[msl] Regenerate E2E expectations for IR

Bug: 42251016
Change-Id: I271844a5a8f92e2cde18ec3ecd6203adfd232aea
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/187742
Commit-Queue: James Price <jrprice@google.com>
Reviewed-by: dan sinclair <dsinclair@chromium.org>
Reviewed-by: Ben Clayton <bclayton@google.com>
diff --git a/test/tint/access/let/matrix.wgsl.expected.ir.msl b/test/tint/access/let/matrix.wgsl.expected.ir.msl
index 9a5bc98..6b2dc0c 100644
--- a/test/tint/access/let/matrix.wgsl.expected.ir.msl
+++ b/test/tint/access/let/matrix.wgsl.expected.ir.msl
@@ -1,8 +1,25 @@
-#include <metal_stdlib>
-using namespace metal;
+SKIP: FAILED
 
-kernel void tint_symbol() {
-  float3x3 const m = float3x3(float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f));
-  float3 const v = m[1];
-  float const f = v[1];
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %s:ptr<storage, f32, read_write> = var @binding_point(0, 0)
 }
+
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %m:mat3x3<f32> = let mat3x3<f32>(vec3<f32>(1.0f, 2.0f, 3.0f), vec3<f32>(4.0f, 5.0f, 6.0f), vec3<f32>(7.0f, 8.0f, 9.0f))
+    %4:vec3<f32> = access %m, 1i
+    %v:vec3<f32> = let %4
+    %6:f32 = access %v, 1i
+    %f:f32 = let %6
+    store %s, %f
+    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.  *
+********************************************************************
diff --git a/test/tint/access/let/vector.wgsl.expected.ir.msl b/test/tint/access/let/vector.wgsl.expected.ir.msl
index 0849b0d..646cdc4 100644
--- a/test/tint/access/let/vector.wgsl.expected.ir.msl
+++ b/test/tint/access/let/vector.wgsl.expected.ir.msl
@@ -1,9 +1,32 @@
-#include <metal_stdlib>
-using namespace metal;
+SKIP: FAILED
 
-kernel void tint_symbol() {
-  float3 const v = float3(1.0f, 2.0f, 3.0f);
-  float const scalar = v[1u];
-  float2 const swizzle2 = v.xz;
-  float3 const swizzle3 = v.xzy;
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %s:ptr<storage, vec3<f32>, read_write> = var @binding_point(0, 0)
 }
+
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %v:vec3<f32> = let vec3<f32>(1.0f, 2.0f, 3.0f)
+    %4:f32 = access %v, 1u
+    %scalar:f32 = let %4
+    %6:vec2<f32> = swizzle %v, xz
+    %swizzle2:vec2<f32> = let %6
+    %8:vec3<f32> = swizzle %v, xzy
+    %swizzle3:vec3<f32> = let %8
+    %10:vec3<f32> = construct %scalar
+    %11:vec3<f32> = let %10
+    %12:vec3<f32> = construct %swizzle2, 1.0f
+    %13:vec3<f32> = add %11, %12
+    %14:vec3<f32> = add %13, %swizzle3
+    store %s, %14
+    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.  *
+********************************************************************
diff --git a/test/tint/access/ptr.wgsl.expected.ir.msl b/test/tint/access/ptr.wgsl.expected.ir.msl
index 2f4757d..0c53820 100644
--- a/test/tint/access/ptr.wgsl.expected.ir.msl
+++ b/test/tint/access/ptr.wgsl.expected.ir.msl
@@ -1,109 +1,121 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:493 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   a:i32 @offset(0)
   b:i32 @offset(4)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %s:ptr<storage, i32, read_write> = var @binding_point(0, 0)
   %g1:ptr<workgroup, atomic<i32>, read_write> = var
 }
 
-%d = func(%val:i32):i32 -> %b2 {
-  %b2 = block {
+%accept_value = func(%val:i32):i32 {
+  $B2: {
     ret %val
   }
 }
-%c = func(%val_1:ptr<function, i32, read_write>):i32 -> %b3 {  # %val_1: 'val'
-  %b3 = block {
+%accept_ptr_deref_call_func = func(%val_1:ptr<function, i32, read_write>):i32 {  # %val_1: 'val'
+  $B3: {
     %7:i32 = load %val_1
     %8:i32 = let %7
     %9:i32 = load %val_1
-    %10:i32 = call %d, %9
+    %10:i32 = call %accept_value, %9
     %11:i32 = add %8, %10
     ret %11
   }
 }
-%a = func(%val_2:ptr<function, i32, read_write>):i32 -> %b4 {  # %val_2: 'val'
-  %b4 = block {
+%accept_ptr_deref_pass_through = func(%val_2:ptr<function, i32, read_write>):i32 {  # %val_2: 'val'
+  $B4: {
     %14:i32 = load %val_2
     %15:i32 = let %14
-    %16:i32 = call %c, %val_2
+    %16:i32 = call %accept_ptr_deref_call_func, %val_2
     %17:i32 = add %15, %16
     ret %17
   }
 }
-%z = func():i32 -> %b5 {
-  %b5 = block {
-    %19:i32 = atomicLoad %g1
-    ret %19
+%accept_ptr_to_struct_and_access = func(%val_3:ptr<function, S, read_write>):i32 {  # %val_3: 'val'
+  $B5: {
+    %20:ptr<function, i32, read_write> = access %val_3, 0u
+    %21:i32 = load %20
+    %22:ptr<function, i32, read_write> = access %val_3, 1u
+    %23:i32 = load %22
+    %24:i32 = add %21, %23
+    ret %24
   }
 }
-%y = func(%v1:ptr<function, vec3<f32>, read_write>):i32 -> %b6 {
-  %b6 = block {
-    %22:vec3<f32> = load %v1
-    %23:vec3<f32> = load %v1
-    %24:vec3<f32> = cross %22, %23
-    %25:f32 = access %24, 0u
-    store_vector_element %v1, 0u, %25
-    %26:f32 = load_vector_element %v1, 0u
-    %27:i32 = call %tint_f32_to_i32, %26
-    ret %27
+%accept_ptr_to_struct_access_pass_ptr = func(%val_4:ptr<function, S, read_write>):i32 {  # %val_4: 'val'
+  $B6: {
+    %27:ptr<function, i32, read_write> = access %val_4, 0u
+    %b:ptr<function, i32, read_write> = let %27
+    store %b, 2i
+    %29:i32 = load %b
+    ret %29
   }
 }
-%b = func(%val_3:ptr<function, S, read_write>):i32 -> %b7 {  # %val_3: 'val'
-  %b7 = block {
-    %31:ptr<function, i32, read_write> = access %val_3, 0u
-    %32:i32 = load %31
-    %33:ptr<function, i32, read_write> = access %val_3, 1u
-    %34:i32 = load %33
-    %35:i32 = add %32, %34
-    ret %35
+%accept_ptr_vec_access_elements = func(%v1:ptr<function, vec3<f32>, read_write>):i32 {
+  $B7: {
+    %32:vec3<f32> = load %v1
+    %33:vec3<f32> = load %v1
+    %34:vec3<f32> = cross %32, %33
+    %35:f32 = access %34, 0u
+    store_vector_element %v1, 0u, %35
+    %36:f32 = load_vector_element %v1, 0u
+    %37:i32 = call %tint_f32_to_i32, %36
+    ret %37
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void -> %b8 {
-  %b8 = block {
-    %38:bool = eq %tint_local_index, 0u
-    if %38 [t: %b9] {  # if_1
-      %b9 = block {  # true
-        %39:void = atomicStore %g1, 0i
+%call_builtin_with_mod_scope_ptr = func():i32 {
+  $B8: {
+    %40:i32 = atomicLoad %g1
+    ret %40
+  }
+}
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B9: {
+    %43:bool = eq %tint_local_index, 0u
+    if %43 [t: $B10] {  # if_1
+      $B10: {  # true
+        %44:void = atomicStore %g1, 0i
         exit_if  # if_1
       }
     }
-    %40:void = msl.threadgroup_barrier 4u
+    %45:void = msl.threadgroup_barrier 4u
     %v1_1:ptr<function, i32, read_write> = var, 0i  # %v1_1: 'v1'
     %v2:ptr<function, S, read_write> = var, S(0i)
     %v3:ptr<function, S, read_write> = let %v2
     %v4:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(0.0f)
-    %45:i32 = atomicLoad %g1
-    %t1:i32 = let %45
-    %47:i32 = call %a, %v1_1
-    %48:i32 = let %47
-    %49:i32 = call %b, %v2
-    %50:i32 = add %48, %49
-    %51:i32 = let %50
-    %52:i32 = call %b, %v3
-    %53:i32 = add %51, %52
-    %54:i32 = let %53
-    %55:i32 = call %z
-    %56:i32 = add %54, %55
-    %57:i32 = add %56, %t1
-    %58:i32 = let %57
-    %59:i32 = call %y, %v4
-    %60:i32 = add %58, %59
-    store %s, %60
+    %50:i32 = atomicLoad %g1
+    %t1:i32 = let %50
+    %52:i32 = call %accept_ptr_deref_pass_through, %v1_1
+    %53:i32 = let %52
+    %54:i32 = call %accept_ptr_to_struct_and_access, %v2
+    %55:i32 = add %53, %54
+    %56:i32 = let %55
+    %57:i32 = call %accept_ptr_to_struct_and_access, %v3
+    %58:i32 = add %56, %57
+    %59:i32 = let %58
+    %60:i32 = call %accept_ptr_vec_access_elements, %v4
+    %61:i32 = add %59, %60
+    %62:i32 = let %61
+    %63:i32 = call %accept_ptr_to_struct_access_pass_ptr, %v2
+    %64:i32 = add %62, %63
+    %65:i32 = let %64
+    %66:i32 = call %call_builtin_with_mod_scope_ptr
+    %67:i32 = add %65, %66
+    %68:i32 = add %67, %t1
+    store %s, %68
     ret
   }
 }
-%tint_f32_to_i32 = func(%value:f32):i32 -> %b10 {
-  %b10 = block {
-    %62:i32 = convert %value
-    %63:bool = gte %value, -2147483648.0f
-    %64:i32 = select -2147483648i, %62, %63
-    %65:bool = lte %value, 2147483520.0f
-    %66:i32 = select 2147483647i, %64, %65
-    ret %66
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B11: {
+    %70:i32 = convert %value
+    %71:bool = gte %value, -2147483648.0f
+    %72:i32 = select -2147483648i, %70, %71
+    %73:bool = lte %value, 2147483520.0f
+    %74:i32 = select 2147483647i, %72, %73
+    ret %74
   }
 }
 
diff --git a/test/tint/access/var/matrix.wgsl.expected.ir.msl b/test/tint/access/var/matrix.wgsl.expected.ir.msl
index bd6323f..b8b4503 100644
--- a/test/tint/access/var/matrix.wgsl.expected.ir.msl
+++ b/test/tint/access/var/matrix.wgsl.expected.ir.msl
@@ -1,8 +1,26 @@
-#include <metal_stdlib>
-using namespace metal;
+SKIP: FAILED
 
-kernel void tint_symbol() {
-  float3x3 m = float3x3(0.0f);
-  float3 const v = m[1];
-  float const f = v[1];
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %s:ptr<storage, f32, read_write> = var @binding_point(0, 0)
 }
+
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %m:ptr<function, mat3x3<f32>, read_write> = var
+    %4:ptr<function, vec3<f32>, read_write> = access %m, 1i
+    %5:vec3<f32> = load %4
+    %v:vec3<f32> = let %5
+    %7:f32 = access %v, 1i
+    %f:f32 = let %7
+    store %s, %f
+    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.  *
+********************************************************************
diff --git a/test/tint/access/var/vector.wgsl.expected.ir.msl b/test/tint/access/var/vector.wgsl.expected.ir.msl
index a42d993..f02d995 100644
--- a/test/tint/access/var/vector.wgsl.expected.ir.msl
+++ b/test/tint/access/var/vector.wgsl.expected.ir.msl
@@ -1,9 +1,34 @@
-#include <metal_stdlib>
-using namespace metal;
+SKIP: FAILED
 
-kernel void tint_symbol() {
-  float3 v = 0.0f;
-  float const scalar = v[1u];
-  float2 const swizzle2 = v.xz;
-  float3 const swizzle3 = v.xzy;
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %s:ptr<storage, vec3<f32>, read_write> = var @binding_point(0, 0)
 }
+
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %v:ptr<function, vec3<f32>, read_write> = var
+    %4:f32 = load_vector_element %v, 1u
+    %scalar:f32 = let %4
+    %6:vec3<f32> = load %v
+    %7:vec2<f32> = swizzle %6, xz
+    %swizzle2:vec2<f32> = let %7
+    %9:vec3<f32> = load %v
+    %10:vec3<f32> = swizzle %9, xzy
+    %swizzle3:vec3<f32> = let %10
+    %12:vec3<f32> = construct %scalar
+    %13:vec3<f32> = let %12
+    %14:vec3<f32> = construct %swizzle2, 1.0f
+    %15:vec3<f32> = add %13, %14
+    %16:vec3<f32> = add %15, %swizzle3
+    store %s, %16
+    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.  *
+********************************************************************
diff --git a/test/tint/array/assign_to_function_var.wgsl.expected.ir.msl b/test/tint/array/assign_to_function_var.wgsl.expected.ir.msl
index 918de54..dc04c8b 100644
--- a/test/tint/array/assign_to_function_var.wgsl.expected.ir.msl
+++ b/test/tint/array/assign_to_function_var.wgsl.expected.ir.msl
@@ -1,28 +1,28 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:493 internal compiler error: S = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(16) {
   arr:array<vec4<i32>, 4> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %src_private:ptr<private, array<vec4<i32>, 4>, read_write> = var
   %src_workgroup:ptr<workgroup, array<vec4<i32>, 4>, read_write> = var
   %src_uniform:ptr<uniform, S, read> = var @binding_point(0, 0)
   %src_storage:ptr<storage, S, read_write> = var @binding_point(0, 1)
 }
 
-%ret_arr = func():array<vec4<i32>, 4> -> %b2 {
-  %b2 = block {
+%ret_arr = func():array<vec4<i32>, 4> {
+  $B2: {
     ret array<vec4<i32>, 4>(vec4<i32>(0i))
   }
 }
-%ret_struct_arr = func():S -> %b3 {
-  %b3 = block {
+%ret_struct_arr = func():S {
+  $B3: {
     ret S(array<vec4<i32>, 4>(vec4<i32>(0i)))
   }
 }
-%foo = func(%src_param:array<vec4<i32>, 4>):void -> %b4 {
-  %b4 = block {
+%foo = func(%src_param:array<vec4<i32>, 4>):void {
+  $B4: {
     %src_function:ptr<function, array<vec4<i32>, 4>, read_write> = var
     %dst:ptr<function, array<vec4<i32>, 4>, read_write> = var
     store %dst, array<vec4<i32>, 4>(vec4<i32>(1i), vec4<i32>(2i), vec4<i32>(3i), vec4<i32>(3i))
@@ -53,26 +53,26 @@
     ret
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void -> %b5 {
-  %b5 = block {
-    loop [i: %b6, b: %b7, c: %b8] {  # loop_1
-      %b6 = block {  # initializer
-        next_iteration %b7 %tint_local_index
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B5: {
+    loop [i: $B6, b: $B7, c: $B8] {  # loop_1
+      $B6: {  # initializer
+        next_iteration %tint_local_index  # -> $B7
       }
-      %b7 = block (%idx:u32) {  # body
-        %28:bool = gte %idx:u32, 4u
-        if %28 [t: %b9] {  # if_1
-          %b9 = block {  # true
+      $B7 (%idx:u32): {  # body
+        %28:bool = gte %idx, 4u
+        if %28 [t: $B9] {  # if_1
+          $B9: {  # true
             exit_loop  # loop_1
           }
         }
-        %29:ptr<workgroup, vec4<i32>, read_write> = access %src_workgroup, %idx:u32
+        %29:ptr<workgroup, vec4<i32>, read_write> = access %src_workgroup, %idx
         store %29, vec4<i32>(0i)
-        continue %b8
+        continue  # -> $B8
       }
-      %b8 = block {  # continuing
-        %30:u32 = add %idx:u32, 1u
-        next_iteration %b7 %30
+      $B8: {  # continuing
+        %30:u32 = add %idx, 1u
+        next_iteration %30  # -> $B7
       }
     }
     %31:void = msl.threadgroup_barrier 4u
diff --git a/test/tint/array/assign_to_private_var.wgsl.expected.ir.msl b/test/tint/array/assign_to_private_var.wgsl.expected.ir.msl
index 2c0797c..73b0747 100644
--- a/test/tint/array/assign_to_private_var.wgsl.expected.ir.msl
+++ b/test/tint/array/assign_to_private_var.wgsl.expected.ir.msl
@@ -1,10 +1,10 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:493 internal compiler error: S = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(16) {
   arr:array<vec4<i32>, 4> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %src_private:ptr<private, array<vec4<i32>, 4>, read_write> = var
   %src_workgroup:ptr<workgroup, array<vec4<i32>, 4>, read_write> = var
   %src_uniform:ptr<uniform, S, read> = var @binding_point(0, 0)
@@ -13,18 +13,18 @@
   %dst_nested:ptr<private, array<array<array<i32, 2>, 3>, 4>, read_write> = var
 }
 
-%ret_arr = func():array<vec4<i32>, 4> -> %b2 {
-  %b2 = block {
+%ret_arr = func():array<vec4<i32>, 4> {
+  $B2: {
     ret array<vec4<i32>, 4>(vec4<i32>(0i))
   }
 }
-%ret_struct_arr = func():S -> %b3 {
-  %b3 = block {
+%ret_struct_arr = func():S {
+  $B3: {
     ret S(array<vec4<i32>, 4>(vec4<i32>(0i)))
   }
 }
-%foo = func(%src_param:array<vec4<i32>, 4>):void -> %b4 {
-  %b4 = block {
+%foo = func(%src_param:array<vec4<i32>, 4>):void {
+  $B4: {
     %src_function:ptr<function, array<vec4<i32>, 4>, read_write> = var
     store %dst, array<vec4<i32>, 4>(vec4<i32>(1i), vec4<i32>(2i), vec4<i32>(3i), vec4<i32>(3i))
     store %dst, %src_param
@@ -53,26 +53,26 @@
     ret
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void -> %b5 {
-  %b5 = block {
-    loop [i: %b6, b: %b7, c: %b8] {  # loop_1
-      %b6 = block {  # initializer
-        next_iteration %b7 %tint_local_index
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B5: {
+    loop [i: $B6, b: $B7, c: $B8] {  # loop_1
+      $B6: {  # initializer
+        next_iteration %tint_local_index  # -> $B7
       }
-      %b7 = block (%idx:u32) {  # body
-        %28:bool = gte %idx:u32, 4u
-        if %28 [t: %b9] {  # if_1
-          %b9 = block {  # true
+      $B7 (%idx:u32): {  # body
+        %28:bool = gte %idx, 4u
+        if %28 [t: $B9] {  # if_1
+          $B9: {  # true
             exit_loop  # loop_1
           }
         }
-        %29:ptr<workgroup, vec4<i32>, read_write> = access %src_workgroup, %idx:u32
+        %29:ptr<workgroup, vec4<i32>, read_write> = access %src_workgroup, %idx
         store %29, vec4<i32>(0i)
-        continue %b8
+        continue  # -> $B8
       }
-      %b8 = block {  # continuing
-        %30:u32 = add %idx:u32, 1u
-        next_iteration %b7 %30
+      $B8: {  # continuing
+        %30:u32 = add %idx, 1u
+        next_iteration %30  # -> $B7
       }
     }
     %31:void = msl.threadgroup_barrier 4u
diff --git a/test/tint/array/assign_to_storage_var.wgsl.expected.ir.msl b/test/tint/array/assign_to_storage_var.wgsl.expected.ir.msl
index 42ffcfd..5a3e7a4 100644
--- a/test/tint/array/assign_to_storage_var.wgsl.expected.ir.msl
+++ b/test/tint/array/assign_to_storage_var.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:493 internal compiler error: S = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(16) {
   arr:array<vec4<i32>, 4> @offset(0)
 }
 
@@ -8,7 +8,7 @@
   arr:array<array<array<i32, 2>, 3>, 4> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %src_private:ptr<private, array<vec4<i32>, 4>, read_write> = var
   %src_workgroup:ptr<workgroup, array<vec4<i32>, 4>, read_write> = var
   %src_uniform:ptr<uniform, S, read> = var @binding_point(0, 0)
@@ -17,18 +17,18 @@
   %dst_nested:ptr<storage, S_nested, read_write> = var @binding_point(0, 3)
 }
 
-%ret_arr = func():array<vec4<i32>, 4> -> %b2 {
-  %b2 = block {
+%ret_arr = func():array<vec4<i32>, 4> {
+  $B2: {
     ret array<vec4<i32>, 4>(vec4<i32>(0i))
   }
 }
-%ret_struct_arr = func():S -> %b3 {
-  %b3 = block {
+%ret_struct_arr = func():S {
+  $B3: {
     ret S(array<vec4<i32>, 4>(vec4<i32>(0i)))
   }
 }
-%foo = func(%src_param:array<vec4<i32>, 4>):void -> %b4 {
-  %b4 = block {
+%foo = func(%src_param:array<vec4<i32>, 4>):void {
+  $B4: {
     %src_function:ptr<function, array<vec4<i32>, 4>, read_write> = var
     %12:ptr<storage, array<vec4<i32>, 4>, read_write> = access %dst, 0u
     store %12, array<vec4<i32>, 4>(vec4<i32>(1i), vec4<i32>(2i), vec4<i32>(3i), vec4<i32>(3i))
@@ -68,26 +68,26 @@
     ret
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void -> %b5 {
-  %b5 = block {
-    loop [i: %b6, b: %b7, c: %b8] {  # loop_1
-      %b6 = block {  # initializer
-        next_iteration %b7 %tint_local_index
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B5: {
+    loop [i: $B6, b: $B7, c: $B8] {  # loop_1
+      $B6: {  # initializer
+        next_iteration %tint_local_index  # -> $B7
       }
-      %b7 = block (%idx:u32) {  # body
-        %39:bool = gte %idx:u32, 4u
-        if %39 [t: %b9] {  # if_1
-          %b9 = block {  # true
+      $B7 (%idx:u32): {  # body
+        %39:bool = gte %idx, 4u
+        if %39 [t: $B9] {  # if_1
+          $B9: {  # true
             exit_loop  # loop_1
           }
         }
-        %40:ptr<workgroup, vec4<i32>, read_write> = access %src_workgroup, %idx:u32
+        %40:ptr<workgroup, vec4<i32>, read_write> = access %src_workgroup, %idx
         store %40, vec4<i32>(0i)
-        continue %b8
+        continue  # -> $B8
       }
-      %b8 = block {  # continuing
-        %41:u32 = add %idx:u32, 1u
-        next_iteration %b7 %41
+      $B8: {  # continuing
+        %41:u32 = add %idx, 1u
+        next_iteration %41  # -> $B7
       }
     }
     %42:void = msl.threadgroup_barrier 4u
diff --git a/test/tint/array/assign_to_subexpr.wgsl.expected.ir.msl b/test/tint/array/assign_to_subexpr.wgsl.expected.ir.msl
index 9f8ee81..3412478 100644
--- a/test/tint/array/assign_to_subexpr.wgsl.expected.ir.msl
+++ b/test/tint/array/assign_to_subexpr.wgsl.expected.ir.msl
@@ -1,15 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:493 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   arr:array<i32, 4> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %s:ptr<storage, i32, read_write> = var @binding_point(0, 0)
 }
 
-%foo = func():i32 -> %b2 {
-  %b2 = block {
+%foo = func():i32 {
+  $B2: {
     %src:array<i32, 4> = let array<i32, 4>(0i)
     %dst:ptr<function, array<i32, 4>, read_write> = var
     %dst_struct:ptr<function, S, read_write> = var
@@ -37,8 +37,8 @@
     ret %21
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %23:i32 = call %foo
     store %s, %23
     ret
diff --git a/test/tint/array/assign_to_workgroup_var.wgsl.expected.ir.msl b/test/tint/array/assign_to_workgroup_var.wgsl.expected.ir.msl
index 6daea82..cf44f68 100644
--- a/test/tint/array/assign_to_workgroup_var.wgsl.expected.ir.msl
+++ b/test/tint/array/assign_to_workgroup_var.wgsl.expected.ir.msl
@@ -1,10 +1,10 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:493 internal compiler error: S = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(16) {
   arr:array<vec4<i32>, 4> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %src_private:ptr<private, array<vec4<i32>, 4>, read_write> = var
   %src_workgroup:ptr<workgroup, array<vec4<i32>, 4>, read_write> = var
   %src_uniform:ptr<uniform, S, read> = var @binding_point(0, 0)
@@ -13,18 +13,18 @@
   %dst_nested:ptr<workgroup, array<array<array<i32, 2>, 3>, 4>, read_write> = var
 }
 
-%ret_arr = func():array<vec4<i32>, 4> -> %b2 {
-  %b2 = block {
+%ret_arr = func():array<vec4<i32>, 4> {
+  $B2: {
     ret array<vec4<i32>, 4>(vec4<i32>(0i))
   }
 }
-%ret_struct_arr = func():S -> %b3 {
-  %b3 = block {
+%ret_struct_arr = func():S {
+  $B3: {
     ret S(array<vec4<i32>, 4>(vec4<i32>(0i)))
   }
 }
-%foo = func(%src_param:array<vec4<i32>, 4>):void -> %b4 {
-  %b4 = block {
+%foo = func(%src_param:array<vec4<i32>, 4>):void {
+  $B4: {
     %src_function:ptr<function, array<vec4<i32>, 4>, read_write> = var
     store %dst, array<vec4<i32>, 4>(vec4<i32>(1i), vec4<i32>(2i), vec4<i32>(3i), vec4<i32>(3i))
     store %dst, %src_param
@@ -53,52 +53,52 @@
     ret
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void -> %b5 {
-  %b5 = block {
-    loop [i: %b6, b: %b7, c: %b8] {  # loop_1
-      %b6 = block {  # initializer
-        next_iteration %b7 %tint_local_index
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B5: {
+    loop [i: $B6, b: $B7, c: $B8] {  # loop_1
+      $B6: {  # initializer
+        next_iteration %tint_local_index  # -> $B7
       }
-      %b7 = block (%idx:u32) {  # body
-        %28:bool = gte %idx:u32, 4u
-        if %28 [t: %b9] {  # if_1
-          %b9 = block {  # true
+      $B7 (%idx:u32): {  # body
+        %28:bool = gte %idx, 4u
+        if %28 [t: $B9] {  # if_1
+          $B9: {  # true
             exit_loop  # loop_1
           }
         }
-        %29:ptr<workgroup, vec4<i32>, read_write> = access %src_workgroup, %idx:u32
+        %29:ptr<workgroup, vec4<i32>, read_write> = access %src_workgroup, %idx
         store %29, vec4<i32>(0i)
-        %30:ptr<workgroup, vec4<i32>, read_write> = access %dst, %idx:u32
+        %30:ptr<workgroup, vec4<i32>, read_write> = access %dst, %idx
         store %30, vec4<i32>(0i)
-        continue %b8
+        continue  # -> $B8
       }
-      %b8 = block {  # continuing
-        %31:u32 = add %idx:u32, 1u
-        next_iteration %b7 %31
+      $B8: {  # continuing
+        %31:u32 = add %idx, 1u
+        next_iteration %31  # -> $B7
       }
     }
-    loop [i: %b10, b: %b11, c: %b12] {  # loop_2
-      %b10 = block {  # initializer
-        next_iteration %b11 %tint_local_index
+    loop [i: $B10, b: $B11, c: $B12] {  # loop_2
+      $B10: {  # initializer
+        next_iteration %tint_local_index  # -> $B11
       }
-      %b11 = block (%idx_1:u32) {  # body
-        %33:bool = gte %idx_1:u32, 24u
-        if %33 [t: %b13] {  # if_2
-          %b13 = block {  # true
+      $B11 (%idx_1:u32): {  # body
+        %33:bool = gte %idx_1, 24u
+        if %33 [t: $B13] {  # if_2
+          $B13: {  # true
             exit_loop  # loop_2
           }
         }
-        %34:u32 = mod %idx_1:u32, 2u
-        %35:u32 = div %idx_1:u32, 2u
+        %34:u32 = mod %idx_1, 2u
+        %35:u32 = div %idx_1, 2u
         %36:u32 = mod %35, 3u
-        %37:u32 = div %idx_1:u32, 6u
+        %37:u32 = div %idx_1, 6u
         %38:ptr<workgroup, i32, read_write> = access %dst_nested, %37, %36, %34
         store %38, 0i
-        continue %b12
+        continue  # -> $B12
       }
-      %b12 = block {  # continuing
-        %39:u32 = add %idx_1:u32, 1u
-        next_iteration %b11 %39
+      $B12: {  # continuing
+        %39:u32 = add %idx_1, 1u
+        next_iteration %39  # -> $B11
       }
     }
     %40:void = msl.threadgroup_barrier 4u
diff --git a/test/tint/array/function_parameter.wgsl.expected.ir.msl b/test/tint/array/function_parameter.wgsl.expected.ir.msl
index c241422..f87eadf 100644
--- a/test/tint/array/function_parameter.wgsl.expected.ir.msl
+++ b/test/tint/array/function_parameter.wgsl.expected.ir.msl
@@ -1,29 +1,29 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:493 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %s:ptr<storage, f32, read_write> = var @binding_point(0, 0)
 }
 
-%f1 = func(%a:array<f32, 4>):f32 -> %b2 {
-  %b2 = block {
+%f1 = func(%a:array<f32, 4>):f32 {
+  $B2: {
     %4:f32 = access %a, 3i
     ret %4
   }
 }
-%f2 = func(%a_1:array<array<f32, 4>, 3>):f32 -> %b3 {  # %a_1: 'a'
-  %b3 = block {
+%f2 = func(%a_1:array<array<f32, 4>, 3>):f32 {  # %a_1: 'a'
+  $B3: {
     %7:f32 = access %a_1, 2i, 3i
     ret %7
   }
 }
-%f3 = func(%a_2:array<array<array<f32, 4>, 3>, 2>):f32 -> %b4 {  # %a_2: 'a'
-  %b4 = block {
+%f3 = func(%a_2:array<array<array<f32, 4>, 3>, 2>):f32 {  # %a_2: 'a'
+  $B4: {
     %10:f32 = access %a_2, 1i, 2i, 3i
     ret %10
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %a1:array<f32, 4> = let array<f32, 4>(0.0f)
     %a2:array<array<f32, 4>, 3> = let array<array<f32, 4>, 3>(array<f32, 4>(0.0f))
     %a3:array<array<array<f32, 4>, 3>, 2> = let array<array<array<f32, 4>, 3>, 2>(array<array<f32, 4>, 3>(array<f32, 4>(0.0f)))
diff --git a/test/tint/array/function_return_type.wgsl.expected.ir.msl b/test/tint/array/function_return_type.wgsl.expected.ir.msl
index ffb2175..70e6a1c 100644
--- a/test/tint/array/function_return_type.wgsl.expected.ir.msl
+++ b/test/tint/array/function_return_type.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:493 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %s:ptr<storage, f32, read_write> = var @binding_point(0, 0)
 }
 
-%f1 = func():array<f32, 4> -> %b2 {
-  %b2 = block {
+%f1 = func():array<f32, 4> {
+  $B2: {
     ret array<f32, 4>(0.0f)
   }
 }
-%f2 = func():array<array<f32, 4>, 3> -> %b3 {
-  %b3 = block {
+%f2 = func():array<array<f32, 4>, 3> {
+  $B3: {
     %4:array<f32, 4> = call %f1
     %5:array<f32, 4> = let %4
     %6:array<f32, 4> = call %f1
@@ -20,8 +20,8 @@
     ret %9
   }
 }
-%f3 = func():array<array<array<f32, 4>, 3>, 2> -> %b4 {
-  %b4 = block {
+%f3 = func():array<array<array<f32, 4>, 3>, 2> {
+  $B4: {
     %11:array<array<f32, 4>, 3> = call %f2
     %12:array<array<f32, 4>, 3> = let %11
     %13:array<array<f32, 4>, 3> = call %f2
@@ -29,8 +29,8 @@
     ret %14
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:array<f32, 4> = call %f1
     %a1:array<f32, 4> = let %16
     %18:array<array<f32, 4>, 3> = call %f2
diff --git a/test/tint/array/size.wgsl.expected.ir.msl b/test/tint/array/size.wgsl.expected.ir.msl
index c60b0f6..21a9191 100644
--- a/test/tint/array/size.wgsl.expected.ir.msl
+++ b/test/tint/array/size.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:493 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %s:ptr<storage, f32, read_write> = var @binding_point(0, 0)
 }
 
-%tint_symbol = @fragment func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @fragment func():void {
+  $B2: {
     %signed_literal:ptr<function, array<f32, 4>, read_write> = var
     %unsigned_literal:ptr<function, array<f32, 4>, read_write> = var
     %signed_constant:ptr<function, array<f32, 4>, read_write> = var
diff --git a/test/tint/array/strides.spvasm.expected.ir.msl b/test/tint/array/strides.spvasm.expected.ir.msl
index 5b78369..77a4f93 100644
--- a/test/tint/array/strides.spvasm.expected.ir.msl
+++ b/test/tint/array/strides.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -12,30 +12,128 @@
   a:array<strided_arr_1, 4> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %s:ptr<storage, S, read_write> = var @binding_point(0, 0)
 }
 
-%f_1 = func():void -> %b2 {
-  %b2 = block {
+%f_1 = func():void {
+  $B2: {
     %3:ptr<storage, array<strided_arr_1, 4>, read_write> = access %s, 0u
-    %x_19:array<strided_arr_1, 4> = load %3
-    %5:ptr<storage, array<array<strided_arr, 2>, 3>, read_write> = access %s, 0u, 3i, 0u
-    %x_24:array<array<strided_arr, 2>, 3> = load %5
-    %7:ptr<storage, array<strided_arr, 2>, read_write> = access %s, 0u, 3i, 0u, 2i
-    %x_28:array<strided_arr, 2> = load %7
-    %9:ptr<storage, f32, read_write> = access %s, 0u, 3i, 0u, 2i, 1i, 0u
-    %x_32:f32 = load %9
-    %11:ptr<storage, array<strided_arr_1, 4>, read_write> = access %s, 0u
-    store %11, array<strided_arr_1, 4>(strided_arr_1(array<array<strided_arr, 2>, 3>(array<strided_arr, 2>(strided_arr(0.0f)))))
+    %4:array<strided_arr_1, 4> = load %3
+    %x_19:array<strided_arr_1, 4> = let %4
+    %6:ptr<storage, array<array<strided_arr, 2>, 3>, read_write> = access %s, 0u, 3i, 0u
+    %7:array<array<strided_arr, 2>, 3> = load %6
+    %x_24:array<array<strided_arr, 2>, 3> = let %7
+    %9:ptr<storage, array<strided_arr, 2>, read_write> = access %s, 0u, 3i, 0u, 2i
+    %10:array<strided_arr, 2> = load %9
+    %x_28:array<strided_arr, 2> = let %10
     %12:ptr<storage, f32, read_write> = access %s, 0u, 3i, 0u, 2i, 1i, 0u
-    store %12, 5.0f
+    %13:f32 = load %12
+    %x_32:f32 = let %13
+    %15:ptr<storage, array<strided_arr_1, 4>, read_write> = access %s, 0u
+    %16:void = call %tint_store_and_preserve_padding, %15, array<strided_arr_1, 4>(strided_arr_1(array<array<strided_arr, 2>, 3>(array<strided_arr, 2>(strided_arr(0.0f)))))
+    %18:ptr<storage, f32, read_write> = access %s, 0u, 3i, 0u, 2i, 1i, 0u
+    store %18, 5.0f
     ret
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
-    %14:void = call %f_1
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
+    %20:void = call %f_1
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, array<strided_arr_1, 4>, read_write>, %value_param:array<strided_arr_1, 4>):void {
+  $B4: {
+    loop [i: $B5, b: $B6, c: $B7] {  # loop_1
+      $B5: {  # initializer
+        next_iteration 0u  # -> $B6
+      }
+      $B6 (%idx:u32): {  # body
+        %24:bool = gte %idx, 4u
+        if %24 [t: $B8] {  # if_1
+          $B8: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %25:ptr<storage, strided_arr_1, read_write> = access %target, %idx
+        %26:strided_arr_1 = access %value_param, %idx
+        %27:void = call %tint_store_and_preserve_padding_1, %25, %26
+        continue  # -> $B7
+      }
+      $B7: {  # continuing
+        %29:u32 = add %idx, 1u
+        next_iteration %29  # -> $B6
+      }
+    }
+    ret
+  }
+}
+%tint_store_and_preserve_padding_1 = func(%target_1:ptr<storage, strided_arr_1, read_write>, %value_param_1:strided_arr_1):void {  # %tint_store_and_preserve_padding_1: 'tint_store_and_preserve_padding', %target_1: 'target', %value_param_1: 'value_param'
+  $B9: {
+    %32:ptr<storage, array<array<strided_arr, 2>, 3>, read_write> = access %target_1, 0u
+    %33:array<array<strided_arr, 2>, 3> = access %value_param_1, 0u
+    %34:void = call %tint_store_and_preserve_padding_2, %32, %33
+    ret
+  }
+}
+%tint_store_and_preserve_padding_2 = func(%target_2:ptr<storage, array<array<strided_arr, 2>, 3>, read_write>, %value_param_2:array<array<strided_arr, 2>, 3>):void {  # %tint_store_and_preserve_padding_2: 'tint_store_and_preserve_padding', %target_2: 'target', %value_param_2: 'value_param'
+  $B10: {
+    loop [i: $B11, b: $B12, c: $B13] {  # loop_2
+      $B11: {  # initializer
+        next_iteration 0u  # -> $B12
+      }
+      $B12 (%idx_1:u32): {  # body
+        %39:bool = gte %idx_1, 3u
+        if %39 [t: $B14] {  # if_2
+          $B14: {  # true
+            exit_loop  # loop_2
+          }
+        }
+        %40:ptr<storage, array<strided_arr, 2>, read_write> = access %target_2, %idx_1
+        %41:array<strided_arr, 2> = access %value_param_2, %idx_1
+        %42:void = call %tint_store_and_preserve_padding_3, %40, %41
+        continue  # -> $B13
+      }
+      $B13: {  # continuing
+        %44:u32 = add %idx_1, 1u
+        next_iteration %44  # -> $B12
+      }
+    }
+    ret
+  }
+}
+%tint_store_and_preserve_padding_3 = func(%target_3:ptr<storage, array<strided_arr, 2>, read_write>, %value_param_3:array<strided_arr, 2>):void {  # %tint_store_and_preserve_padding_3: 'tint_store_and_preserve_padding', %target_3: 'target', %value_param_3: 'value_param'
+  $B15: {
+    loop [i: $B16, b: $B17, c: $B18] {  # loop_3
+      $B16: {  # initializer
+        next_iteration 0u  # -> $B17
+      }
+      $B17 (%idx_2:u32): {  # body
+        %48:bool = gte %idx_2, 2u
+        if %48 [t: $B19] {  # if_3
+          $B19: {  # true
+            exit_loop  # loop_3
+          }
+        }
+        %49:ptr<storage, strided_arr, read_write> = access %target_3, %idx_2
+        %50:strided_arr = access %value_param_3, %idx_2
+        %51:void = call %tint_store_and_preserve_padding_4, %49, %50
+        continue  # -> $B18
+      }
+      $B18: {  # continuing
+        %53:u32 = add %idx_2, 1u
+        next_iteration %53  # -> $B17
+      }
+    }
+    ret
+  }
+}
+%tint_store_and_preserve_padding_4 = func(%target_4:ptr<storage, strided_arr, read_write>, %value_param_4:strided_arr):void {  # %tint_store_and_preserve_padding_4: 'tint_store_and_preserve_padding', %target_4: 'target', %value_param_4: 'value_param'
+  $B20: {
+    %56:ptr<storage, f32, read_write> = access %target_4, 0u
+    %57:f32 = access %value_param_4, 0u
+    store %56, %57
     ret
   }
 }
diff --git a/test/tint/array/type_initializer.wgsl.expected.ir.msl b/test/tint/array/type_initializer.wgsl.expected.ir.msl
index e00cec5..99abaa1 100644
--- a/test/tint/array/type_initializer.wgsl.expected.ir.msl
+++ b/test/tint/array/type_initializer.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:493 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %s:ptr<storage, i32, read_write> = var @binding_point(0, 0)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %x:i32 = let 42i
     %empty:array<i32, 4> = let array<i32, 4>(0i)
     %nonempty:array<i32, 4> = let array<i32, 4>(1i, 2i, 3i, 4i)
diff --git a/test/tint/benchmark/atan2-const-eval.wgsl.expected.ir.msl b/test/tint/benchmark/atan2-const-eval.wgsl.expected.ir.msl
index b570313..9bcc7b5 100644
--- a/test/tint/benchmark/atan2-const-eval.wgsl.expected.ir.msl
+++ b/test/tint/benchmark/atan2-const-eval.wgsl.expected.ir.msl
@@ -1,115 +1,115 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Output = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Output = struct @align(4) {
   value:f32 @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %outputs:ptr<storage, array<Output, 1000>, read_write> = var @binding_point(0, 0)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %3:ptr<storage, f32, read_write> = access %outputs, 0i, 0u
     store %3, -2.35619449615478515625f
     %4:ptr<storage, f32, read_write> = access %outputs, 1i, 0u
-    store %4, -3.14159274101257324219f
+    store %4, -3.14159250259399414062f
     %5:ptr<storage, f32, read_write> = access %outputs, 2i, 0u
-    store %5, -3.14159274101257324219f
+    store %5, -3.14159250259399414062f
     %6:ptr<storage, f32, read_write> = access %outputs, 3i, 0u
-    store %6, -3.14159274101257324219f
+    store %6, -3.14159250259399414062f
     %7:ptr<storage, f32, read_write> = access %outputs, 4i, 0u
-    store %7, -3.14159274101257324219f
+    store %7, -3.14159250259399414062f
     %8:ptr<storage, f32, read_write> = access %outputs, 5i, 0u
-    store %8, -3.14159274101257324219f
+    store %8, -3.14159250259399414062f
     %9:ptr<storage, f32, read_write> = access %outputs, 6i, 0u
-    store %9, -3.14159274101257324219f
+    store %9, -3.14159250259399414062f
     %10:ptr<storage, f32, read_write> = access %outputs, 7i, 0u
-    store %10, -3.14159274101257324219f
+    store %10, -3.14159250259399414062f
     %11:ptr<storage, f32, read_write> = access %outputs, 8i, 0u
-    store %11, -3.14159274101257324219f
+    store %11, -3.14159250259399414062f
     %12:ptr<storage, f32, read_write> = access %outputs, 9i, 0u
-    store %12, -3.14159274101257324219f
+    store %12, -3.14159250259399414062f
     %13:ptr<storage, f32, read_write> = access %outputs, 10i, 0u
-    store %13, -3.14159274101257324219f
+    store %13, -3.14159250259399414062f
     %14:ptr<storage, f32, read_write> = access %outputs, 11i, 0u
-    store %14, -3.14159274101257324219f
+    store %14, -3.14159250259399414062f
     %15:ptr<storage, f32, read_write> = access %outputs, 12i, 0u
-    store %15, -3.14159274101257324219f
+    store %15, -3.14159250259399414062f
     %16:ptr<storage, f32, read_write> = access %outputs, 13i, 0u
-    store %16, -3.14159274101257324219f
+    store %16, -3.14159250259399414062f
     %17:ptr<storage, f32, read_write> = access %outputs, 14i, 0u
-    store %17, -3.14159274101257324219f
+    store %17, -3.14159250259399414062f
     %18:ptr<storage, f32, read_write> = access %outputs, 15i, 0u
-    store %18, -3.14159274101257324219f
+    store %18, -3.14159250259399414062f
     %19:ptr<storage, f32, read_write> = access %outputs, 16i, 0u
-    store %19, -3.14159274101257324219f
+    store %19, -3.14159250259399414062f
     %20:ptr<storage, f32, read_write> = access %outputs, 17i, 0u
-    store %20, -3.14159274101257324219f
+    store %20, -3.14159250259399414062f
     %21:ptr<storage, f32, read_write> = access %outputs, 18i, 0u
-    store %21, -3.14159274101257324219f
+    store %21, -3.14159250259399414062f
     %22:ptr<storage, f32, read_write> = access %outputs, 19i, 0u
-    store %22, -3.14159274101257324219f
+    store %22, -3.14159250259399414062f
     %23:ptr<storage, f32, read_write> = access %outputs, 20i, 0u
-    store %23, -3.14159274101257324219f
+    store %23, -3.14159250259399414062f
     %24:ptr<storage, f32, read_write> = access %outputs, 21i, 0u
-    store %24, -3.14159274101257324219f
+    store %24, -3.14159250259399414062f
     %25:ptr<storage, f32, read_write> = access %outputs, 22i, 0u
-    store %25, -3.14159274101257324219f
+    store %25, -3.14159250259399414062f
     %26:ptr<storage, f32, read_write> = access %outputs, 23i, 0u
-    store %26, -3.14159274101257324219f
+    store %26, -3.14159250259399414062f
     %27:ptr<storage, f32, read_write> = access %outputs, 24i, 0u
-    store %27, -3.14159274101257324219f
+    store %27, -3.14159250259399414062f
     %28:ptr<storage, f32, read_write> = access %outputs, 25i, 0u
-    store %28, -3.14159274101257324219f
+    store %28, -3.14159250259399414062f
     %29:ptr<storage, f32, read_write> = access %outputs, 26i, 0u
-    store %29, -3.14159274101257324219f
+    store %29, -3.14159250259399414062f
     %30:ptr<storage, f32, read_write> = access %outputs, 27i, 0u
-    store %30, -3.14159274101257324219f
+    store %30, -3.14159250259399414062f
     %31:ptr<storage, f32, read_write> = access %outputs, 28i, 0u
-    store %31, -3.14159274101257324219f
+    store %31, -3.14159250259399414062f
     %32:ptr<storage, f32, read_write> = access %outputs, 29i, 0u
-    store %32, -3.14159274101257324219f
+    store %32, -3.14159250259399414062f
     %33:ptr<storage, f32, read_write> = access %outputs, 30i, 0u
-    store %33, -3.14159274101257324219f
+    store %33, -3.14159250259399414062f
     %34:ptr<storage, f32, read_write> = access %outputs, 31i, 0u
-    store %34, -3.14159274101257324219f
+    store %34, -3.14159250259399414062f
     %35:ptr<storage, f32, read_write> = access %outputs, 32i, 0u
-    store %35, -3.14159274101257324219f
+    store %35, -3.14159250259399414062f
     %36:ptr<storage, f32, read_write> = access %outputs, 33i, 0u
-    store %36, -3.14159274101257324219f
+    store %36, -3.14159250259399414062f
     %37:ptr<storage, f32, read_write> = access %outputs, 34i, 0u
-    store %37, -3.14159274101257324219f
+    store %37, -3.14159250259399414062f
     %38:ptr<storage, f32, read_write> = access %outputs, 35i, 0u
-    store %38, -3.14159274101257324219f
+    store %38, -3.14159250259399414062f
     %39:ptr<storage, f32, read_write> = access %outputs, 36i, 0u
-    store %39, -3.14159274101257324219f
+    store %39, -3.14159250259399414062f
     %40:ptr<storage, f32, read_write> = access %outputs, 37i, 0u
-    store %40, -3.14159274101257324219f
+    store %40, -3.14159250259399414062f
     %41:ptr<storage, f32, read_write> = access %outputs, 38i, 0u
-    store %41, -3.14159274101257324219f
+    store %41, -3.14159250259399414062f
     %42:ptr<storage, f32, read_write> = access %outputs, 39i, 0u
-    store %42, -3.14159274101257324219f
+    store %42, -3.14159250259399414062f
     %43:ptr<storage, f32, read_write> = access %outputs, 40i, 0u
-    store %43, -3.14159274101257324219f
+    store %43, -3.14159250259399414062f
     %44:ptr<storage, f32, read_write> = access %outputs, 41i, 0u
-    store %44, -3.14159274101257324219f
+    store %44, -3.14159250259399414062f
     %45:ptr<storage, f32, read_write> = access %outputs, 42i, 0u
-    store %45, -3.14159274101257324219f
+    store %45, -3.14159250259399414062f
     %46:ptr<storage, f32, read_write> = access %outputs, 43i, 0u
-    store %46, -3.14159274101257324219f
+    store %46, -3.14159250259399414062f
     %47:ptr<storage, f32, read_write> = access %outputs, 44i, 0u
-    store %47, -3.14159274101257324219f
+    store %47, -3.14159250259399414062f
     %48:ptr<storage, f32, read_write> = access %outputs, 45i, 0u
-    store %48, -3.14159274101257324219f
+    store %48, -3.14159250259399414062f
     %49:ptr<storage, f32, read_write> = access %outputs, 46i, 0u
-    store %49, -3.14159274101257324219f
+    store %49, -3.14159250259399414062f
     %50:ptr<storage, f32, read_write> = access %outputs, 47i, 0u
-    store %50, -3.14159274101257324219f
+    store %50, -3.14159250259399414062f
     %51:ptr<storage, f32, read_write> = access %outputs, 48i, 0u
-    store %51, -3.14159274101257324219f
+    store %51, -3.14159250259399414062f
     %52:ptr<storage, f32, read_write> = access %outputs, 49i, 0u
-    store %52, -3.14159274101257324219f
+    store %52, -3.14159250259399414062f
     %53:ptr<storage, f32, read_write> = access %outputs, 50i, 0u
     store %53, -2.35619449615478515625f
     %54:ptr<storage, f32, read_write> = access %outputs, 51i, 0u
@@ -119,17 +119,17 @@
     %56:ptr<storage, f32, read_write> = access %outputs, 53i, 0u
     store %56, -2.15879893302917480469f
     %57:ptr<storage, f32, read_write> = access %outputs, 54i, 0u
-    store %57, -2.07789468765258789062f
+    store %57, -2.07789492607116699219f
     %58:ptr<storage, f32, read_write> = access %outputs, 55i, 0u
     store %58, -1.98902058601379394531f
     %59:ptr<storage, f32, read_write> = access %outputs, 56i, 0u
     store %59, -1.89254689216613769531f
     %60:ptr<storage, f32, read_write> = access %outputs, 57i, 0u
-    store %60, -1.78946530818939208984f
+    store %60, -1.78946542739868164062f
     %61:ptr<storage, f32, read_write> = access %outputs, 58i, 0u
     store %61, -1.68145358562469482422f
     %62:ptr<storage, f32, read_write> = access %outputs, 59i, 0u
-    store %62, -1.57079637050628662109f
+    store %62, -1.57079648971557617188f
     %63:ptr<storage, f32, read_write> = access %outputs, 60i, 0u
     store %63, -1.57079637050628662109f
     %64:ptr<storage, f32, read_write> = access %outputs, 61i, 0u
@@ -147,11 +147,11 @@
     %70:ptr<storage, f32, read_write> = access %outputs, 67i, 0u
     store %70, -0.98279374837875366211f
     %71:ptr<storage, f32, read_write> = access %outputs, 68i, 0u
-    store %71, -0.90975326299667358398f
+    store %71, -0.90975320339202880859f
     %72:ptr<storage, f32, read_write> = access %outputs, 69i, 0u
-    store %72, -0.84415405988693237305f
+    store %72, -0.84415400028228759766f
     %73:ptr<storage, f32, read_write> = access %outputs, 70i, 0u
-    store %73, -0.78539824485778808594f
+    store %73, -0.78539818525314331055f
     %74:ptr<storage, f32, read_write> = access %outputs, 71i, 0u
     store %74, -0.78539818525314331055f
     %75:ptr<storage, f32, read_write> = access %outputs, 72i, 0u
@@ -351,25 +351,25 @@
     %172:ptr<storage, f32, read_write> = access %outputs, 169i, 0u
     store %172, -3.1411762237548828125f
     %173:ptr<storage, f32, read_write> = access %outputs, 170i, 0u
-    store %173, -1.57079625129699707031f
+    store %173, -1.57079637050628662109f
     %174:ptr<storage, f32, read_write> = access %outputs, 171i, 0u
-    store %174, -1.57079625129699707031f
+    store %174, -1.57079637050628662109f
     %175:ptr<storage, f32, read_write> = access %outputs, 172i, 0u
-    store %175, -1.57079625129699707031f
+    store %175, -1.57079637050628662109f
     %176:ptr<storage, f32, read_write> = access %outputs, 173i, 0u
-    store %176, -1.57079625129699707031f
+    store %176, -1.57079637050628662109f
     %177:ptr<storage, f32, read_write> = access %outputs, 174i, 0u
-    store %177, -1.57079625129699707031f
+    store %177, -1.57079637050628662109f
     %178:ptr<storage, f32, read_write> = access %outputs, 175i, 0u
-    store %178, -1.57079625129699707031f
+    store %178, -1.57079637050628662109f
     %179:ptr<storage, f32, read_write> = access %outputs, 176i, 0u
-    store %179, -1.57079625129699707031f
+    store %179, -1.57079637050628662109f
     %180:ptr<storage, f32, read_write> = access %outputs, 177i, 0u
-    store %180, -1.57079625129699707031f
+    store %180, -1.57079637050628662109f
     %181:ptr<storage, f32, read_write> = access %outputs, 178i, 0u
-    store %181, -1.57079625129699707031f
+    store %181, -1.57079637050628662109f
     %182:ptr<storage, f32, read_write> = access %outputs, 179i, 0u
-    store %182, -1.57079625129699707031f
+    store %182, -1.57079637050628662109f
     %183:ptr<storage, f32, read_write> = access %outputs, 180i, 0u
     store %183, -1.57079637050628662109f
     %184:ptr<storage, f32, read_write> = access %outputs, 181i, 0u
@@ -411,7 +411,7 @@
     %202:ptr<storage, f32, read_write> = access %outputs, 199i, 0u
     store %202, -0.01562372874468564987f
     %203:ptr<storage, f32, read_write> = access %outputs, 200i, 0u
-    store %203, -0.0123450523242354393f
+    store %203, -0.01234505139291286469f
     %204:ptr<storage, f32, read_write> = access %outputs, 201i, 0u
     store %204, -0.00999966636300086975f
     %205:ptr<storage, f32, read_write> = access %outputs, 202i, 0u
@@ -423,17 +423,17 @@
     %208:ptr<storage, f32, read_write> = access %outputs, 205i, 0u
     store %208, -0.00510199647396802902f
     %209:ptr<storage, f32, read_write> = access %outputs, 206i, 0u
-    store %209, -0.00444441474974155426f
+    store %209, -0.00444441521540284157f
     %210:ptr<storage, f32, read_write> = access %outputs, 207i, 0u
     store %210, -0.00390623020939528942f
     %211:ptr<storage, f32, read_write> = access %outputs, 208i, 0u
-    store %211, -0.00346019398421049118f
+    store %211, -0.00346019375137984753f
     %212:ptr<storage, f32, read_write> = access %outputs, 209i, 0u
-    store %212, -0.00308640999719500542f
+    store %212, -0.00308640976436436176f
     %213:ptr<storage, f32, read_write> = access %outputs, 210i, 0u
     store %213, -0.00277007604017853737f
     %214:ptr<storage, f32, read_write> = access %outputs, 211i, 0u
-    store %214, -0.00249999482184648514f
+    store %214, -0.00249999458901584148f
     %215:ptr<storage, f32, read_write> = access %outputs, 212i, 0u
     store %215, -0.00226756976917386055f
     %216:ptr<storage, f32, read_write> = access %outputs, 213i, 0u
@@ -451,11 +451,11 @@
     %222:ptr<storage, f32, read_write> = access %outputs, 219i, 0u
     store %222, -0.00127550947945564985f
     %223:ptr<storage, f32, read_write> = access %outputs, 220i, 0u
-    store %223, -0.00118906004354357719f
+    store %223, -0.00118906015995889902f
     %224:ptr<storage, f32, read_write> = access %outputs, 221i, 0u
     store %224, -0.00111111055593937635f
     %225:ptr<storage, f32, read_write> = access %outputs, 222i, 0u
-    store %225, -0.00104058242868632078f
+    store %225, -0.00104058231227099895f
     %226:ptr<storage, f32, read_write> = access %outputs, 223i, 0u
     store %226, -0.00097656220896169543f
     %227:ptr<storage, f32, read_write> = access %outputs, 224i, 0u
@@ -473,7 +473,7 @@
     %233:ptr<storage, f32, read_write> = access %outputs, 230i, 0u
     store %233, -0.00065746204927563667f
     %234:ptr<storage, f32, read_write> = access %outputs, 231i, 0u
-    store %234, -0.00062499992782250047f
+    store %234, -0.00062499986961483955f
     %235:ptr<storage, f32, read_write> = access %outputs, 232i, 0u
     store %235, -0.00059488392435014248f
     %236:ptr<storage, f32, read_write> = access %outputs, 233i, 0u
@@ -483,7 +483,7 @@
     %238:ptr<storage, f32, read_write> = access %outputs, 235i, 0u
     store %238, -0.00051652890397235751f
     %239:ptr<storage, f32, read_write> = access %outputs, 236i, 0u
-    store %239, -0.00049382710130885243f
+    store %239, -0.00049382715951651335f
     %240:ptr<storage, f32, read_write> = access %outputs, 237i, 0u
     store %240, -0.00047258977429009974f
     %241:ptr<storage, f32, read_write> = access %outputs, 238i, 0u
@@ -589,25 +589,25 @@
     %291:ptr<storage, f32, read_write> = access %outputs, 288i, 0u
     store %291, -3.13992667198181152344f
     %292:ptr<storage, f32, read_write> = access %outputs, 289i, 0u
-    store %292, -1.57079625129699707031f
+    store %292, -1.57079637050628662109f
     %293:ptr<storage, f32, read_write> = access %outputs, 290i, 0u
-    store %293, -1.57079625129699707031f
+    store %293, -1.57079637050628662109f
     %294:ptr<storage, f32, read_write> = access %outputs, 291i, 0u
-    store %294, -1.57079625129699707031f
+    store %294, -1.57079637050628662109f
     %295:ptr<storage, f32, read_write> = access %outputs, 292i, 0u
-    store %295, -1.57079625129699707031f
+    store %295, -1.57079637050628662109f
     %296:ptr<storage, f32, read_write> = access %outputs, 293i, 0u
-    store %296, -1.57079625129699707031f
+    store %296, -1.57079637050628662109f
     %297:ptr<storage, f32, read_write> = access %outputs, 294i, 0u
-    store %297, -1.57079625129699707031f
+    store %297, -1.57079637050628662109f
     %298:ptr<storage, f32, read_write> = access %outputs, 295i, 0u
-    store %298, -1.57079625129699707031f
+    store %298, -1.57079637050628662109f
     %299:ptr<storage, f32, read_write> = access %outputs, 296i, 0u
-    store %299, -1.57079625129699707031f
+    store %299, -1.57079637050628662109f
     %300:ptr<storage, f32, read_write> = access %outputs, 297i, 0u
-    store %300, -1.57079625129699707031f
+    store %300, -1.57079637050628662109f
     %301:ptr<storage, f32, read_write> = access %outputs, 298i, 0u
-    store %301, -1.57079625129699707031f
+    store %301, -1.57079637050628662109f
     %302:ptr<storage, f32, read_write> = access %outputs, 299i, 0u
     store %302, -1.57079637050628662109f
     %303:ptr<storage, f32, read_write> = access %outputs, 300i, 0u
@@ -653,7 +653,7 @@
     %323:ptr<storage, f32, read_write> = access %outputs, 320i, 0u
     store %323, -0.03997868672013282776f
     %324:ptr<storage, f32, read_write> = access %outputs, 321i, 0u
-    store %324, -0.03304582089185714722f
+    store %324, -0.03304581716656684875f
     %325:ptr<storage, f32, read_write> = access %outputs, 322i, 0u
     store %325, -0.02777063660323619843f
     %326:ptr<storage, f32, read_write> = access %outputs, 323i, 0u
@@ -667,7 +667,7 @@
     %330:ptr<storage, f32, read_write> = access %outputs, 327i, 0u
     store %330, -0.01383994705975055695f
     %331:ptr<storage, f32, read_write> = access %outputs, 328i, 0u
-    store %331, -0.0123450523242354393f
+    store %331, -0.01234505139291286469f
     %332:ptr<storage, f32, read_write> = access %outputs, 329i, 0u
     store %332, -0.0110798785462975502f
     %333:ptr<storage, f32, read_write> = access %outputs, 330i, 0u
@@ -691,7 +691,7 @@
     %342:ptr<storage, f32, read_write> = access %outputs, 339i, 0u
     store %342, -0.00475620664656162262f
     %343:ptr<storage, f32, read_write> = access %outputs, 340i, 0u
-    store %343, -0.00444441474974155426f
+    store %343, -0.00444441521540284157f
     %344:ptr<storage, f32, read_write> = access %outputs, 341i, 0u
     store %344, -0.00416230689734220505f
     %345:ptr<storage, f32, read_write> = access %outputs, 342i, 0u
@@ -699,11 +699,11 @@
     %346:ptr<storage, f32, read_write> = access %outputs, 343i, 0u
     store %346, -0.0036730780266225338f
     %347:ptr<storage, f32, read_write> = access %outputs, 344i, 0u
-    store %347, -0.00346019398421049118f
+    store %347, -0.00346019375137984753f
     %348:ptr<storage, f32, read_write> = access %outputs, 345i, 0u
     store %348, -0.00326529424637556076f
     %349:ptr<storage, f32, read_write> = access %outputs, 346i, 0u
-    store %349, -0.00308640999719500542f
+    store %349, -0.00308640976436436176f
     %350:ptr<storage, f32, read_write> = access %outputs, 347i, 0u
     store %350, -0.0029218324925750494f
     %351:ptr<storage, f32, read_write> = access %outputs, 348i, 0u
@@ -711,13 +711,13 @@
     %352:ptr<storage, f32, read_write> = access %outputs, 349i, 0u
     store %352, -0.002629842609167099f
     %353:ptr<storage, f32, read_write> = access %outputs, 350i, 0u
-    store %353, -0.00249999482184648514f
+    store %353, -0.00249999458901584148f
     %354:ptr<storage, f32, read_write> = access %outputs, 351i, 0u
     store %354, -0.00237953150644898415f
     %355:ptr<storage, f32, read_write> = access %outputs, 352i, 0u
     store %355, -0.00226756976917386055f
     %356:ptr<storage, f32, read_write> = access %outputs, 353i, 0u
-    store %356, -0.00216332823038101196f
+    store %356, -0.00216332799755036831f
     %357:ptr<storage, f32, read_write> = access %outputs, 354i, 0u
     store %357, -0.0020661128219217062f
     %358:ptr<storage, f32, read_write> = access %outputs, 355i, 0u
@@ -825,25 +825,25 @@
     %409:ptr<storage, f32, read_write> = access %outputs, 406i, 0u
     store %409, -3.13784432411193847656f
     %410:ptr<storage, f32, read_write> = access %outputs, 407i, 0u
-    store %410, -1.57079625129699707031f
+    store %410, -1.57079637050628662109f
     %411:ptr<storage, f32, read_write> = access %outputs, 408i, 0u
-    store %411, -1.57079625129699707031f
+    store %411, -1.57079637050628662109f
     %412:ptr<storage, f32, read_write> = access %outputs, 409i, 0u
-    store %412, -1.57079625129699707031f
+    store %412, -1.57079637050628662109f
     %413:ptr<storage, f32, read_write> = access %outputs, 410i, 0u
-    store %413, -1.57079625129699707031f
+    store %413, -1.57079637050628662109f
     %414:ptr<storage, f32, read_write> = access %outputs, 411i, 0u
-    store %414, -1.57079625129699707031f
+    store %414, -1.57079637050628662109f
     %415:ptr<storage, f32, read_write> = access %outputs, 412i, 0u
-    store %415, -1.57079625129699707031f
+    store %415, -1.57079637050628662109f
     %416:ptr<storage, f32, read_write> = access %outputs, 413i, 0u
-    store %416, -1.57079625129699707031f
+    store %416, -1.57079637050628662109f
     %417:ptr<storage, f32, read_write> = access %outputs, 414i, 0u
-    store %417, -1.57079625129699707031f
+    store %417, -1.57079637050628662109f
     %418:ptr<storage, f32, read_write> = access %outputs, 415i, 0u
-    store %418, -1.57079625129699707031f
+    store %418, -1.57079637050628662109f
     %419:ptr<storage, f32, read_write> = access %outputs, 416i, 0u
-    store %419, -1.57079625129699707031f
+    store %419, -1.57079637050628662109f
     %420:ptr<storage, f32, read_write> = access %outputs, 417i, 0u
     store %420, -1.57079637050628662109f
     %421:ptr<storage, f32, read_write> = access %outputs, 418i, 0u
@@ -875,9 +875,9 @@
     %434:ptr<storage, f32, read_write> = access %outputs, 431i, 0u
     store %434, -0.78539818525314331055f
     %435:ptr<storage, f32, read_write> = access %outputs, 432i, 0u
-    store %435, -0.5123894810676574707f
+    store %435, -0.51238942146301269531f
     %436:ptr<storage, f32, read_write> = access %outputs, 433i, 0u
-    store %436, -0.34555557370185852051f
+    store %436, -0.34555554389953613281f
     %437:ptr<storage, f32, read_write> = access %outputs, 434i, 0u
     store %437, -0.24497866630554199219f
     %438:ptr<storage, f32, read_write> = access %outputs, 435i, 0u
@@ -919,13 +919,13 @@
     %456:ptr<storage, f32, read_write> = access %outputs, 453i, 0u
     store %456, -0.01439900510013103485f
     %457:ptr<storage, f32, read_write> = access %outputs, 454i, 0u
-    store %457, -0.01331282220780849457f
+    store %457, -0.01331282313913106918f
     %458:ptr<storage, f32, read_write> = access %outputs, 455i, 0u
-    store %458, -0.0123450523242354393f
+    store %458, -0.01234505139291286469f
     %459:ptr<storage, f32, read_write> = access %outputs, 456i, 0u
     store %459, -0.01147908717393875122f
     %460:ptr<storage, f32, read_write> = access %outputs, 457i, 0u
-    store %460, -0.01070113666355609894f
+    store %460, -0.01070113759487867355f
     %461:ptr<storage, f32, read_write> = access %outputs, 458i, 0u
     store %461, -0.00999966636300086975f
     %462:ptr<storage, f32, read_write> = access %outputs, 459i, 0u
@@ -939,21 +939,21 @@
     %466:ptr<storage, f32, read_write> = access %outputs, 463i, 0u
     store %466, -0.0073468061164021492f
     %467:ptr<storage, f32, read_write> = access %outputs, 464i, 0u
-    store %467, -0.00694433227181434631f
+    store %467, -0.00694433273747563362f
     %468:ptr<storage, f32, read_write> = access %outputs, 465i, 0u
-    store %468, -0.0065740472637116909f
+    store %468, -0.00657404679805040359f
     %469:ptr<storage, f32, read_write> = access %outputs, 466i, 0u
     store %469, -0.00623260624706745148f
     %470:ptr<storage, f32, read_write> = access %outputs, 467i, 0u
     store %470, -0.00591709045693278313f
     %471:ptr<storage, f32, read_write> = access %outputs, 468i, 0u
-    store %471, -0.00562494061887264252f
+    store %471, -0.00562494015321135521f
     %472:ptr<storage, f32, read_write> = access %outputs, 469i, 0u
-    store %472, -0.00535390432924032211f
+    store %472, -0.00535390479490160942f
     %473:ptr<storage, f32, read_write> = access %outputs, 470i, 0u
     store %473, -0.00510199647396802902f
     %474:ptr<storage, f32, read_write> = access %outputs, 471i, 0u
-    store %474, -0.00486745685338973999f
+    store %474, -0.0048674573190510273f
     %475:ptr<storage, f32, read_write> = access %outputs, 472i, 0u
     store %475, -0.00464872689917683601f
     %476:ptr<storage, f32, read_write> = access %outputs, 473i, 0u
@@ -1059,25 +1059,25 @@
     %526:ptr<storage, f32, read_write> = access %outputs, 523i, 0u
     store %526, -3.13492894172668457031f
     %527:ptr<storage, f32, read_write> = access %outputs, 524i, 0u
-    store %527, -1.57079625129699707031f
+    store %527, -1.57079637050628662109f
     %528:ptr<storage, f32, read_write> = access %outputs, 525i, 0u
-    store %528, -1.57079625129699707031f
+    store %528, -1.57079637050628662109f
     %529:ptr<storage, f32, read_write> = access %outputs, 526i, 0u
-    store %529, -1.57079625129699707031f
+    store %529, -1.57079637050628662109f
     %530:ptr<storage, f32, read_write> = access %outputs, 527i, 0u
-    store %530, -1.57079625129699707031f
+    store %530, -1.57079637050628662109f
     %531:ptr<storage, f32, read_write> = access %outputs, 528i, 0u
-    store %531, -1.57079625129699707031f
+    store %531, -1.57079637050628662109f
     %532:ptr<storage, f32, read_write> = access %outputs, 529i, 0u
-    store %532, -1.57079625129699707031f
+    store %532, -1.57079637050628662109f
     %533:ptr<storage, f32, read_write> = access %outputs, 530i, 0u
-    store %533, -1.57079625129699707031f
+    store %533, -1.57079637050628662109f
     %534:ptr<storage, f32, read_write> = access %outputs, 531i, 0u
-    store %534, -1.57079625129699707031f
+    store %534, -1.57079637050628662109f
     %535:ptr<storage, f32, read_write> = access %outputs, 532i, 0u
-    store %535, -1.57079625129699707031f
+    store %535, -1.57079637050628662109f
     %536:ptr<storage, f32, read_write> = access %outputs, 533i, 0u
-    store %536, -1.57079625129699707031f
+    store %536, -1.57079637050628662109f
     %537:ptr<storage, f32, read_write> = access %outputs, 534i, 0u
     store %537, -1.57079637050628662109f
     %538:ptr<storage, f32, read_write> = access %outputs, 535i, 0u
@@ -1119,7 +1119,7 @@
     %556:ptr<storage, f32, read_write> = access %outputs, 553i, 0u
     store %556, -0.24497866630554199219f
     %557:ptr<storage, f32, read_write> = access %outputs, 554i, 0u
-    store %557, -0.19502027332782745361f
+    store %557, -0.19502025842666625977f
     %558:ptr<storage, f32, read_write> = access %outputs, 555i, 0u
     store %558, -0.15865525603294372559f
     %559:ptr<storage, f32, read_write> = access %outputs, 556i, 0u
@@ -1145,7 +1145,7 @@
     %569:ptr<storage, f32, read_write> = access %outputs, 566i, 0u
     store %569, -0.03626527264714241028f
     %570:ptr<storage, f32, read_write> = access %outputs, 567i, 0u
-    store %570, -0.03304582089185714722f
+    store %570, -0.03304581716656684875f
     %571:ptr<storage, f32, read_write> = access %outputs, 568i, 0u
     store %571, -0.03023652918636798859f
     %572:ptr<storage, f32, read_write> = access %outputs, 569i, 0u
@@ -1173,9 +1173,9 @@
     %583:ptr<storage, f32, read_write> = access %outputs, 580i, 0u
     store %583, -0.01306048128753900528f
     %584:ptr<storage, f32, read_write> = access %outputs, 581i, 0u
-    store %584, -0.0123450523242354393f
+    store %584, -0.01234505139291286469f
     %585:ptr<storage, f32, read_write> = access %outputs, 582i, 0u
-    store %585, -0.01168683171272277832f
+    store %585, -0.0116868307814002037f
     %586:ptr<storage, f32, read_write> = access %outputs, 583i, 0u
     store %586, -0.0110798785462975502f
     %587:ptr<storage, f32, read_write> = access %outputs, 584i, 0u
@@ -1191,7 +1191,7 @@
     %592:ptr<storage, f32, read_write> = access %outputs, 589i, 0u
     store %592, -0.00826427526772022247f
     %593:ptr<storage, f32, read_write> = access %outputs, 590i, 0u
-    store %593, -0.00790106970816850662f
+    store %593, -0.00790107063949108124f
     %594:ptr<storage, f32, read_write> = access %outputs, 591i, 0u
     store %594, -0.00756129296496510506f
     %595:ptr<storage, f32, read_write> = access %outputs, 592i, 0u
@@ -1291,25 +1291,25 @@
     %642:ptr<storage, f32, read_write> = access %outputs, 639i, 0u
     store %642, -3.13118076324462890625f
     %643:ptr<storage, f32, read_write> = access %outputs, 640i, 0u
-    store %643, -1.57079625129699707031f
+    store %643, -1.57079637050628662109f
     %644:ptr<storage, f32, read_write> = access %outputs, 641i, 0u
-    store %644, -1.57079625129699707031f
+    store %644, -1.57079637050628662109f
     %645:ptr<storage, f32, read_write> = access %outputs, 642i, 0u
-    store %645, -1.57079625129699707031f
+    store %645, -1.57079637050628662109f
     %646:ptr<storage, f32, read_write> = access %outputs, 643i, 0u
-    store %646, -1.57079625129699707031f
+    store %646, -1.57079637050628662109f
     %647:ptr<storage, f32, read_write> = access %outputs, 644i, 0u
-    store %647, -1.57079625129699707031f
+    store %647, -1.57079637050628662109f
     %648:ptr<storage, f32, read_write> = access %outputs, 645i, 0u
-    store %648, -1.57079625129699707031f
+    store %648, -1.57079637050628662109f
     %649:ptr<storage, f32, read_write> = access %outputs, 646i, 0u
-    store %649, -1.57079625129699707031f
+    store %649, -1.57079637050628662109f
     %650:ptr<storage, f32, read_write> = access %outputs, 647i, 0u
-    store %650, -1.57079625129699707031f
+    store %650, -1.57079637050628662109f
     %651:ptr<storage, f32, read_write> = access %outputs, 648i, 0u
-    store %651, -1.57079625129699707031f
+    store %651, -1.57079637050628662109f
     %652:ptr<storage, f32, read_write> = access %outputs, 649i, 0u
-    store %652, -1.57079625129699707031f
+    store %652, -1.57079637050628662109f
     %653:ptr<storage, f32, read_write> = access %outputs, 650i, 0u
     store %653, -1.57079637050628662109f
     %654:ptr<storage, f32, read_write> = access %outputs, 651i, 0u
@@ -1339,7 +1339,7 @@
     %666:ptr<storage, f32, read_write> = access %outputs, 663i, 0u
     store %666, -1.41214108467102050781f
     %667:ptr<storage, f32, read_write> = access %outputs, 664i, 0u
-    store %667, -1.2252407073974609375f
+    store %667, -1.22524082660675048828f
     %668:ptr<storage, f32, read_write> = access %outputs, 665i, 0u
     store %668, -1.00148320198059082031f
     %669:ptr<storage, f32, read_write> = access %outputs, 666i, 0u
@@ -1347,7 +1347,7 @@
     %670:ptr<storage, f32, read_write> = access %outputs, 667i, 0u
     store %670, -0.60698771476745605469f
     %671:ptr<storage, f32, read_write> = access %outputs, 668i, 0u
-    store %671, -0.47177749872207641602f
+    store %671, -0.47177752852439880371f
     %672:ptr<storage, f32, read_write> = access %outputs, 669i, 0u
     store %672, -0.37239846587181091309f
     %673:ptr<storage, f32, read_write> = access %outputs, 670i, 0u
@@ -1361,7 +1361,7 @@
     %677:ptr<storage, f32, read_write> = access %outputs, 674i, 0u
     store %677, -0.1468639075756072998f
     %678:ptr<storage, f32, read_write> = access %outputs, 675i, 0u
-    store %678, -0.12686596810817718506f
+    store %678, -0.12686598300933837891f
     %679:ptr<storage, f32, read_write> = access %outputs, 676i, 0u
     store %679, -0.11065722256898880005f
     %680:ptr<storage, f32, read_write> = access %outputs, 677i, 0u
@@ -1369,15 +1369,15 @@
     %681:ptr<storage, f32, read_write> = access %outputs, 678i, 0u
     store %681, -0.08629038184881210327f
     %682:ptr<storage, f32, read_write> = access %outputs, 679i, 0u
-    store %682, -0.07700790464878082275f
+    store %682, -0.07700791209936141968f
     %683:ptr<storage, f32, read_write> = access %outputs, 680i, 0u
-    store %683, -0.06914169341325759888f
+    store %683, -0.06914168596267700195f
     %684:ptr<storage, f32, read_write> = access %outputs, 681i, 0u
     store %684, -0.06241881102323532104f
     %685:ptr<storage, f32, read_write> = access %outputs, 682i, 0u
     store %685, -0.05662873387336730957f
     %686:ptr<storage, f32, read_write> = access %outputs, 683i, 0u
-    store %686, -0.05160703510046005249f
+    store %686, -0.05160703137516975403f
     %687:ptr<storage, f32, read_write> = access %outputs, 684i, 0u
     store %687, -0.04722384735941886902f
     %688:ptr<storage, f32, read_write> = access %outputs, 685i, 0u
@@ -1389,15 +1389,15 @@
     %691:ptr<storage, f32, read_write> = access %outputs, 688i, 0u
     store %691, -0.0342801213264465332f
     %692:ptr<storage, f32, read_write> = access %outputs, 689i, 0u
-    store %692, -0.03187695145606994629f
+    store %692, -0.03187695518136024475f
     %693:ptr<storage, f32, read_write> = access %outputs, 690i, 0u
-    store %693, -0.02971776761114597321f
+    store %693, -0.02971776574850082397f
     %694:ptr<storage, f32, read_write> = access %outputs, 691i, 0u
     store %694, -0.02777063660323619843f
     %695:ptr<storage, f32, read_write> = access %outputs, 692i, 0u
-    store %695, -0.02600870467722415924f
+    store %695, -0.02600870281457901001f
     %696:ptr<storage, f32, read_write> = access %outputs, 693i, 0u
-    store %696, -0.02440921589732170105f
+    store %696, -0.02440921403467655182f
     %697:ptr<storage, f32, read_write> = access %outputs, 694i, 0u
     store %697, -0.02295281179249286652f
     %698:ptr<storage, f32, read_write> = access %outputs, 695i, 0u
@@ -1407,11 +1407,11 @@
     %700:ptr<storage, f32, read_write> = access %outputs, 697i, 0u
     store %700, -0.01928773149847984314f
     %701:ptr<storage, f32, read_write> = access %outputs, 698i, 0u
-    store %701, -0.01825947500765323639f
+    store %701, -0.01825947687029838562f
     %702:ptr<storage, f32, read_write> = access %outputs, 699i, 0u
     store %702, -0.01731128990650177002f
     %703:ptr<storage, f32, read_write> = access %outputs, 700i, 0u
-    store %703, -0.01643507368862628937f
+    store %703, -0.0164350755512714386f
     %704:ptr<storage, f32, read_write> = access %outputs, 701i, 0u
     store %704, -0.01562372874468564987f
     %705:ptr<storage, f32, read_write> = access %outputs, 702i, 0u
@@ -1419,13 +1419,13 @@
     %706:ptr<storage, f32, read_write> = access %outputs, 703i, 0u
     store %706, -0.01417138706892728806f
     %707:ptr<storage, f32, read_write> = access %outputs, 704i, 0u
-    store %707, -0.01351999770849943161f
+    store %707, -0.01351999863982200623f
     %708:ptr<storage, f32, read_write> = access %outputs, 705i, 0u
     store %708, -0.01291250623762607574f
     %709:ptr<storage, f32, read_write> = access %outputs, 706i, 0u
-    store %709, -0.01234505325555801392f
+    store %709, -0.0123450523242354393f
     %710:ptr<storage, f32, read_write> = access %outputs, 707i, 0u
-    store %710, -0.01181419659405946732f
+    store %710, -0.0118141956627368927f
     %711:ptr<storage, f32, read_write> = access %outputs, 708i, 0u
     store %711, -0.01131685543805360794f
     %712:ptr<storage, f32, read_write> = access %outputs, 709i, 0u
@@ -1435,7 +1435,7 @@
     %714:ptr<storage, f32, read_write> = access %outputs, 711i, 0u
     store %714, -2.35619449615478515625f
     %715:ptr<storage, f32, read_write> = access %outputs, 712i, 0u
-    store %715, -2.50795984268188476562f
+    store %715, -2.50795960426330566406f
     %716:ptr<storage, f32, read_write> = access %outputs, 713i, 0u
     store %716, -2.62920331954956054688f
     %717:ptr<storage, f32, read_write> = access %outputs, 714i, 0u
@@ -1521,25 +1521,25 @@
     %757:ptr<storage, f32, read_write> = access %outputs, 754i, 0u
     store %757, -3.12660002708435058594f
     %758:ptr<storage, f32, read_write> = access %outputs, 755i, 0u
-    store %758, -1.57079625129699707031f
+    store %758, -1.57079637050628662109f
     %759:ptr<storage, f32, read_write> = access %outputs, 756i, 0u
-    store %759, -1.57079625129699707031f
+    store %759, -1.57079637050628662109f
     %760:ptr<storage, f32, read_write> = access %outputs, 757i, 0u
-    store %760, -1.57079625129699707031f
+    store %760, -1.57079637050628662109f
     %761:ptr<storage, f32, read_write> = access %outputs, 758i, 0u
-    store %761, -1.57079625129699707031f
+    store %761, -1.57079637050628662109f
     %762:ptr<storage, f32, read_write> = access %outputs, 759i, 0u
-    store %762, -1.57079625129699707031f
+    store %762, -1.57079637050628662109f
     %763:ptr<storage, f32, read_write> = access %outputs, 760i, 0u
-    store %763, -1.57079625129699707031f
+    store %763, -1.57079637050628662109f
     %764:ptr<storage, f32, read_write> = access %outputs, 761i, 0u
-    store %764, -1.57079625129699707031f
+    store %764, -1.57079637050628662109f
     %765:ptr<storage, f32, read_write> = access %outputs, 762i, 0u
-    store %765, -1.57079625129699707031f
+    store %765, -1.57079637050628662109f
     %766:ptr<storage, f32, read_write> = access %outputs, 763i, 0u
-    store %766, -1.57079625129699707031f
+    store %766, -1.57079637050628662109f
     %767:ptr<storage, f32, read_write> = access %outputs, 764i, 0u
-    store %767, -1.57079625129699707031f
+    store %767, -1.57079637050628662109f
     %768:ptr<storage, f32, read_write> = access %outputs, 765i, 0u
     store %768, -1.57079637050628662109f
     %769:ptr<storage, f32, read_write> = access %outputs, 766i, 0u
@@ -1577,15 +1577,15 @@
     %785:ptr<storage, f32, read_write> = access %outputs, 782i, 0u
     store %785, -0.78539818525314331055f
     %786:ptr<storage, f32, read_write> = access %outputs, 783i, 0u
-    store %786, -0.63363295793533325195f
+    store %786, -0.63363301753997802734f
     %787:ptr<storage, f32, read_write> = access %outputs, 784i, 0u
-    store %787, -0.5123894810676574707f
+    store %787, -0.51238942146301269531f
     %788:ptr<storage, f32, read_write> = access %outputs, 785i, 0u
     store %788, -0.4182243049144744873f
     %789:ptr<storage, f32, read_write> = access %outputs, 786i, 0u
-    store %789, -0.34555557370185852051f
+    store %789, -0.34555554389953613281f
     %790:ptr<storage, f32, read_write> = access %outputs, 787i, 0u
-    store %790, -0.28918063640594482422f
+    store %790, -0.28918060660362243652f
     %791:ptr<storage, f32, read_write> = access %outputs, 788i, 0u
     store %791, -0.24497866630554199219f
     %792:ptr<storage, f32, read_write> = access %outputs, 789i, 0u
@@ -1621,7 +1621,7 @@
     %807:ptr<storage, f32, read_write> = access %outputs, 804i, 0u
     store %807, -0.0458861328661441803f
     %808:ptr<storage, f32, read_write> = access %outputs, 805i, 0u
-    store %808, -0.04278006404638290405f
+    store %808, -0.04278006777167320251f
     %809:ptr<storage, f32, read_write> = access %outputs, 806i, 0u
     store %809, -0.03997868672013282776f
     %810:ptr<storage, f32, read_write> = access %outputs, 807i, 0u
@@ -1649,7 +1649,7 @@
     %821:ptr<storage, f32, read_write> = access %outputs, 818i, 0u
     store %821, -0.02040532976388931274f
     %822:ptr<storage, f32, read_write> = access %outputs, 819i, 0u
-    store %822, -0.01946752145886421204f
+    store %822, -0.01946752332150936127f
     %823:ptr<storage, f32, read_write> = access %outputs, 820i, 0u
     store %823, -0.01859289966523647308f
     %824:ptr<storage, f32, read_write> = access %outputs, 821i, 0u
@@ -1749,25 +1749,25 @@
     %871:ptr<storage, f32, read_write> = access %outputs, 868i, 0u
     store %871, -3.1211872100830078125f
     %872:ptr<storage, f32, read_write> = access %outputs, 869i, 0u
-    store %872, -1.57079625129699707031f
+    store %872, -1.57079637050628662109f
     %873:ptr<storage, f32, read_write> = access %outputs, 870i, 0u
-    store %873, -1.57079625129699707031f
+    store %873, -1.57079637050628662109f
     %874:ptr<storage, f32, read_write> = access %outputs, 871i, 0u
-    store %874, -1.57079625129699707031f
+    store %874, -1.57079637050628662109f
     %875:ptr<storage, f32, read_write> = access %outputs, 872i, 0u
-    store %875, -1.57079625129699707031f
+    store %875, -1.57079637050628662109f
     %876:ptr<storage, f32, read_write> = access %outputs, 873i, 0u
-    store %876, -1.57079625129699707031f
+    store %876, -1.57079637050628662109f
     %877:ptr<storage, f32, read_write> = access %outputs, 874i, 0u
-    store %877, -1.57079625129699707031f
+    store %877, -1.57079637050628662109f
     %878:ptr<storage, f32, read_write> = access %outputs, 875i, 0u
-    store %878, -1.57079625129699707031f
+    store %878, -1.57079637050628662109f
     %879:ptr<storage, f32, read_write> = access %outputs, 876i, 0u
-    store %879, -1.57079625129699707031f
+    store %879, -1.57079637050628662109f
     %880:ptr<storage, f32, read_write> = access %outputs, 877i, 0u
-    store %880, -1.57079625129699707031f
+    store %880, -1.57079637050628662109f
     %881:ptr<storage, f32, read_write> = access %outputs, 878i, 0u
-    store %881, -1.57079625129699707031f
+    store %881, -1.57079637050628662109f
     %882:ptr<storage, f32, read_write> = access %outputs, 879i, 0u
     store %882, -1.57079637050628662109f
     %883:ptr<storage, f32, read_write> = access %outputs, 880i, 0u
@@ -1807,7 +1807,7 @@
     %900:ptr<storage, f32, read_write> = access %outputs, 897i, 0u
     store %900, -0.78539818525314331055f
     %901:ptr<storage, f32, read_write> = access %outputs, 898i, 0u
-    store %901, -0.65342640876770019531f
+    store %901, -0.65342634916305541992f
     %902:ptr<storage, f32, read_write> = access %outputs, 899i, 0u
     store %902, -0.54404264688491821289f
     %903:ptr<storage, f32, read_write> = access %outputs, 900i, 0u
@@ -1821,7 +1821,7 @@
     %907:ptr<storage, f32, read_write> = access %outputs, 904i, 0u
     store %907, -0.24497866630554199219f
     %908:ptr<storage, f32, read_write> = access %outputs, 905i, 0u
-    store %908, -0.21442967653274536133f
+    store %908, -0.21442969143390655518f
     %909:ptr<storage, f32, read_write> = access %outputs, 906i, 0u
     store %909, -0.18911886215209960938f
     %910:ptr<storage, f32, read_write> = access %outputs, 907i, 0u
@@ -1851,13 +1851,13 @@
     %922:ptr<storage, f32, read_write> = access %outputs, 919i, 0u
     store %922, -0.05819818004965782166f
     %923:ptr<storage, f32, read_write> = access %outputs, 920i, 0u
-    store %923, -0.05439074337482452393f
+    store %923, -0.05439074710011482239f
     %924:ptr<storage, f32, read_write> = access %outputs, 921i, 0u
     store %924, -0.05094443634152412415f
     %925:ptr<storage, f32, read_write> = access %outputs, 922i, 0u
     store %925, -0.04781509190797805786f
     %926:ptr<storage, f32, read_write> = access %outputs, 923i, 0u
-    store %926, -0.04496508464217185974f
+    store %926, -0.04496508091688156128f
     %927:ptr<storage, f32, read_write> = access %outputs, 924i, 0u
     store %927, -0.04236218705773353577f
     %928:ptr<storage, f32, read_write> = access %outputs, 925i, 0u
@@ -1871,7 +1871,7 @@
     %932:ptr<storage, f32, read_write> = access %outputs, 929i, 0u
     store %932, -0.03220450878143310547f
     %933:ptr<storage, f32, read_write> = access %outputs, 930i, 0u
-    store %933, -0.03061543218791484833f
+    store %933, -0.0306154303252696991f
     %934:ptr<storage, f32, read_write> = access %outputs, 931i, 0u
     store %934, -0.02914106473326683044f
     %935:ptr<storage, f32, read_write> = access %outputs, 932i, 0u
@@ -1881,7 +1881,7 @@
     %937:ptr<storage, f32, read_write> = access %outputs, 934i, 0u
     store %937, -0.02530451677739620209f
     %938:ptr<storage, f32, read_write> = access %outputs, 935i, 0u
-    store %938, -0.02419281005859375f
+    store %938, -0.02419281192123889923f
     %939:ptr<storage, f32, read_write> = access %outputs, 936i, 0u
     store %939, -0.02315276302397251129f
     %940:ptr<storage, f32, read_write> = access %outputs, 937i, 0u
@@ -1975,25 +1975,25 @@
     %984:ptr<storage, f32, read_write> = access %outputs, 981i, 0u
     store %984, -3.11494350433349609375f
     %985:ptr<storage, f32, read_write> = access %outputs, 982i, 0u
-    store %985, -1.57079625129699707031f
+    store %985, -1.57079637050628662109f
     %986:ptr<storage, f32, read_write> = access %outputs, 983i, 0u
-    store %986, -1.57079625129699707031f
+    store %986, -1.57079637050628662109f
     %987:ptr<storage, f32, read_write> = access %outputs, 984i, 0u
-    store %987, -1.57079625129699707031f
+    store %987, -1.57079637050628662109f
     %988:ptr<storage, f32, read_write> = access %outputs, 985i, 0u
-    store %988, -1.57079625129699707031f
+    store %988, -1.57079637050628662109f
     %989:ptr<storage, f32, read_write> = access %outputs, 986i, 0u
-    store %989, -1.57079625129699707031f
+    store %989, -1.57079637050628662109f
     %990:ptr<storage, f32, read_write> = access %outputs, 987i, 0u
-    store %990, -1.57079625129699707031f
+    store %990, -1.57079637050628662109f
     %991:ptr<storage, f32, read_write> = access %outputs, 988i, 0u
-    store %991, -1.57079625129699707031f
+    store %991, -1.57079637050628662109f
     %992:ptr<storage, f32, read_write> = access %outputs, 989i, 0u
-    store %992, -1.57079625129699707031f
+    store %992, -1.57079637050628662109f
     %993:ptr<storage, f32, read_write> = access %outputs, 990i, 0u
-    store %993, -1.57079625129699707031f
+    store %993, -1.57079637050628662109f
     %994:ptr<storage, f32, read_write> = access %outputs, 991i, 0u
-    store %994, -1.57079625129699707031f
+    store %994, -1.57079637050628662109f
     %995:ptr<storage, f32, read_write> = access %outputs, 992i, 0u
     store %995, -1.57079637050628662109f
     %996:ptr<storage, f32, read_write> = access %outputs, 993i, 0u
diff --git a/test/tint/benchmark/cluster-lights.wgsl.expected.ir.msl b/test/tint/benchmark/cluster-lights.wgsl.expected.ir.msl
index 1e01b1b..541e21a 100644
--- a/test/tint/benchmark/cluster-lights.wgsl.expected.ir.msl
+++ b/test/tint/benchmark/cluster-lights.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Camera = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Camera = struct @align(16) {
   projection:mat4x4<f32> @offset(0)
   inverseProjection:mat4x4<f32> @offset(64)
   view:mat4x4<f32> @offset(128)
@@ -47,301 +47,325 @@
   lights:array<Light> @offset(48)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %camera:ptr<uniform, Camera, read> = var @binding_point(0, 0)
   %clusters:ptr<storage, Clusters, read> = var @binding_point(0, 1)
   %clusterLights:ptr<storage, ClusterLightGroup, read_write> = var @binding_point(0, 2)
   %globalLights:ptr<storage, GlobalLights, read> = var @binding_point(0, 3)
 }
 
-%linearDepth = func(%depthSample:f32):f32 -> %b2 {
-  %b2 = block {
+%linearDepth = func(%depthSample:f32):f32 {
+  $B2: {
     %7:ptr<uniform, f32, read> = access %camera, 7u
     %8:f32 = load %7
     %9:ptr<uniform, f32, read> = access %camera, 6u
     %10:f32 = load %9
     %11:f32 = mul %8, %10
-    %12:ptr<uniform, f32, read> = access %camera, 6u
-    %13:f32 = load %12
-    %14:ptr<uniform, f32, read> = access %camera, 7u
-    %15:f32 = load %14
-    %16:f32 = sub %13, %15
-    %17:ptr<uniform, f32, read> = access %camera, 7u
-    %18:f32 = load %17
-    %19:f32 = fma %depthSample, %16, %18
-    %20:f32 = div %11, %19
-    ret %20
+    %12:f32 = let %11
+    %13:ptr<uniform, f32, read> = access %camera, 6u
+    %14:f32 = load %13
+    %15:ptr<uniform, f32, read> = access %camera, 7u
+    %16:f32 = load %15
+    %17:f32 = sub %14, %16
+    %18:ptr<uniform, f32, read> = access %camera, 7u
+    %19:f32 = load %18
+    %20:f32 = fma %depthSample, %17, %19
+    %21:f32 = div %12, %20
+    ret %21
   }
 }
-%getTile = func(%fragCoord:vec4<f32>):vec3<u32> -> %b3 {
-  %b3 = block {
-    %23:ptr<uniform, f32, read> = access %camera, 7u
-    %24:f32 = load %23
-    %25:ptr<uniform, f32, read> = access %camera, 6u
-    %26:f32 = load %25
-    %27:f32 = div %24, %26
-    %28:f32 = log2 %27
-    %sliceScale:f32 = div 48.0f, %28
-    %30:ptr<uniform, f32, read> = access %camera, 6u
-    %31:f32 = load %30
-    %32:f32 = log2 %31
-    %33:f32 = mul 48.0f, %32
-    %34:ptr<uniform, f32, read> = access %camera, 7u
-    %35:f32 = load %34
-    %36:ptr<uniform, f32, read> = access %camera, 6u
-    %37:f32 = load %36
-    %38:f32 = div %35, %37
-    %39:f32 = log2 %38
-    %40:f32 = div %33, %39
-    %sliceBias:f32 = negation %40
-    %42:f32 = access %fragCoord, 2u
-    %43:f32 = call %linearDepth, %42
-    %44:f32 = log2 %43
-    %45:f32 = mul %44, %sliceScale
-    %46:f32 = add %45, %sliceBias
-    %47:f32 = max %46, 0.0f
-    %zTile:u32 = convert %47
-    %49:f32 = access %fragCoord, 0u
-    %50:ptr<uniform, vec2<f32>, read> = access %camera, 5u
-    %51:f32 = load_vector_element %50, 0u
-    %52:f32 = div %51, 32.0f
-    %53:f32 = div %49, %52
-    %54:u32 = convert %53
-    %55:f32 = access %fragCoord, 1u
+%getTile = func(%fragCoord:vec4<f32>):vec3<u32> {
+  $B3: {
+    %24:ptr<uniform, f32, read> = access %camera, 7u
+    %25:f32 = load %24
+    %26:ptr<uniform, f32, read> = access %camera, 6u
+    %27:f32 = load %26
+    %28:f32 = div %25, %27
+    %29:f32 = log2 %28
+    %30:f32 = div 48.0f, %29
+    %sliceScale:f32 = let %30
+    %32:ptr<uniform, f32, read> = access %camera, 6u
+    %33:f32 = load %32
+    %34:f32 = log2 %33
+    %35:f32 = mul 48.0f, %34
+    %36:f32 = let %35
+    %37:ptr<uniform, f32, read> = access %camera, 7u
+    %38:f32 = load %37
+    %39:ptr<uniform, f32, read> = access %camera, 6u
+    %40:f32 = load %39
+    %41:f32 = div %38, %40
+    %42:f32 = log2 %41
+    %43:f32 = div %36, %42
+    %44:f32 = negation %43
+    %sliceBias:f32 = let %44
+    %46:f32 = access %fragCoord, 2u
+    %47:f32 = call %linearDepth, %46
+    %48:f32 = log2 %47
+    %49:f32 = mul %48, %sliceScale
+    %50:f32 = add %49, %sliceBias
+    %51:f32 = max %50, 0.0f
+    %52:u32 = call %tint_f32_to_u32, %51
+    %zTile:u32 = let %52
+    %55:f32 = access %fragCoord, 0u
     %56:ptr<uniform, vec2<f32>, read> = access %camera, 5u
-    %57:f32 = load_vector_element %56, 1u
-    %58:f32 = div %57, 18.0f
+    %57:f32 = load_vector_element %56, 0u
+    %58:f32 = div %57, 32.0f
     %59:f32 = div %55, %58
-    %60:u32 = convert %59
-    %61:vec3<u32> = construct %54, %60, %zTile
-    ret %61
+    %60:u32 = call %tint_f32_to_u32, %59
+    %61:u32 = let %60
+    %62:f32 = access %fragCoord, 1u
+    %63:ptr<uniform, vec2<f32>, read> = access %camera, 5u
+    %64:f32 = load_vector_element %63, 1u
+    %65:f32 = div %64, 18.0f
+    %66:f32 = div %62, %65
+    %67:u32 = call %tint_f32_to_u32, %66
+    %68:vec3<u32> = construct %61, %67, %zTile
+    ret %68
   }
 }
-%getClusterIndex = func(%fragCoord_1:vec4<f32>):u32 -> %b4 {  # %fragCoord_1: 'fragCoord'
-  %b4 = block {
-    %tile:vec3<u32> = call %getTile, %fragCoord_1
-    %65:u32 = access %tile, 0u
-    %66:u32 = access %tile, 1u
-    %67:u32 = mul %66, 32u
-    %68:u32 = add %65, %67
-    %69:u32 = access %tile, 2u
-    %70:u32 = mul %69, 32u
-    %71:u32 = mul %70, 18u
-    %72:u32 = add %68, %71
-    ret %72
+%getClusterIndex = func(%fragCoord_1:vec4<f32>):u32 {  # %fragCoord_1: 'fragCoord'
+  $B4: {
+    %71:vec3<u32> = call %getTile, %fragCoord_1
+    %tile:vec3<u32> = let %71
+    %73:u32 = access %tile, 0u
+    %74:u32 = access %tile, 1u
+    %75:u32 = mul %74, 32u
+    %76:u32 = add %73, %75
+    %77:u32 = access %tile, 2u
+    %78:u32 = mul %77, 32u
+    %79:u32 = mul %78, 18u
+    %80:u32 = add %76, %79
+    ret %80
   }
 }
-%sqDistPointAABB = func(%p:vec3<f32>, %minAABB:vec3<f32>, %maxAABB:vec3<f32>):f32 -> %b5 {
-  %b5 = block {
+%sqDistPointAABB = func(%p:vec3<f32>, %minAABB:vec3<f32>, %maxAABB:vec3<f32>):f32 {
+  $B5: {
     %sqDist:ptr<function, f32, read_write> = var, 0.0f
-    loop [i: %b6, b: %b7, c: %b8] {  # loop_1
-      %b6 = block {  # initializer
+    loop [i: $B6, b: $B7, c: $B8] {  # loop_1
+      $B6: {  # initializer
         %i:ptr<function, i32, read_write> = var, 0i
-        next_iteration %b7
+        next_iteration  # -> $B7
       }
-      %b7 = block {  # body
-        %79:i32 = load %i
-        %80:bool = lt %79, 3i
-        if %80 [t: %b9, f: %b10] {  # if_1
-          %b9 = block {  # true
+      $B7: {  # body
+        %87:i32 = load %i
+        %88:bool = lt %87, 3i
+        if %88 [t: $B9, f: $B10] {  # if_1
+          $B9: {  # true
             exit_if  # if_1
           }
-          %b10 = block {  # false
+          $B10: {  # false
             exit_loop  # loop_1
           }
         }
-        %81:i32 = load %i
-        %v:f32 = access %p, %81
-        %83:i32 = load %i
-        %84:f32 = access %minAABB, %83
-        %85:bool = lt %v, %84
-        if %85 [t: %b11] {  # if_2
-          %b11 = block {  # true
-            %86:f32 = load %sqDist
-            %87:i32 = load %i
-            %88:f32 = access %minAABB, %87
-            %89:f32 = sub %88, %v
-            %90:i32 = load %i
-            %91:f32 = access %minAABB, %90
-            %92:f32 = sub %91, %v
-            %93:f32 = mul %89, %92
-            %94:f32 = add %86, %93
-            store %sqDist, %94
+        %89:i32 = load %i
+        %90:f32 = access %p, %89
+        %v:f32 = let %90
+        %92:i32 = load %i
+        %93:f32 = access %minAABB, %92
+        %94:bool = lt %v, %93
+        if %94 [t: $B11] {  # if_2
+          $B11: {  # true
+            %95:f32 = load %sqDist
+            %96:i32 = load %i
+            %97:f32 = access %minAABB, %96
+            %98:f32 = sub %97, %v
+            %99:i32 = load %i
+            %100:f32 = access %minAABB, %99
+            %101:f32 = sub %100, %v
+            %102:f32 = mul %98, %101
+            %103:f32 = add %95, %102
+            store %sqDist, %103
             exit_if  # if_2
           }
         }
-        %95:i32 = load %i
-        %96:f32 = access %maxAABB, %95
-        %97:bool = gt %v, %96
-        if %97 [t: %b12] {  # if_3
-          %b12 = block {  # true
-            %98:f32 = load %sqDist
-            %99:i32 = load %i
-            %100:f32 = access %maxAABB, %99
-            %101:f32 = sub %v, %100
-            %102:i32 = load %i
-            %103:f32 = access %maxAABB, %102
-            %104:f32 = sub %v, %103
-            %105:f32 = mul %101, %104
-            %106:f32 = add %98, %105
-            store %sqDist, %106
+        %104:i32 = load %i
+        %105:f32 = access %maxAABB, %104
+        %106:bool = gt %v, %105
+        if %106 [t: $B12] {  # if_3
+          $B12: {  # true
+            %107:f32 = load %sqDist
+            %108:i32 = load %i
+            %109:f32 = access %maxAABB, %108
+            %110:f32 = sub %v, %109
+            %111:i32 = load %i
+            %112:f32 = access %maxAABB, %111
+            %113:f32 = sub %v, %112
+            %114:f32 = mul %110, %113
+            %115:f32 = add %107, %114
+            store %sqDist, %115
             exit_if  # if_3
           }
         }
-        continue %b8
+        continue  # -> $B8
       }
-      %b8 = block {  # continuing
-        %107:i32 = load %i
-        %108:i32 = add %107, 1i
-        store %i, %108
-        next_iteration %b7
+      $B8: {  # continuing
+        %116:i32 = load %i
+        %117:i32 = add %116, 1i
+        store %i, %117
+        next_iteration  # -> $B7
       }
     }
-    %109:f32 = load %sqDist
-    ret %109
+    %118:f32 = load %sqDist
+    ret %118
   }
 }
-%computeMain = @compute @workgroup_size(4, 2, 4) func(%global_id:vec3<u32> [@global_invocation_id]):void -> %b13 {
-  %b13 = block {
-    %112:u32 = access %global_id, 0u
-    %113:u32 = access %global_id, 1u
-    %114:u32 = mul %113, 32u
-    %115:u32 = add %112, %114
-    %116:u32 = access %global_id, 2u
-    %117:u32 = mul %116, 32u
-    %118:u32 = mul %117, 18u
-    %tileIndex:u32 = add %115, %118
+%computeMain = @compute @workgroup_size(4, 2, 4) func(%global_id:vec3<u32> [@global_invocation_id]):void {
+  $B13: {
+    %121:u32 = access %global_id, 0u
+    %122:u32 = access %global_id, 1u
+    %123:u32 = mul %122, 32u
+    %124:u32 = add %121, %123
+    %125:u32 = access %global_id, 2u
+    %126:u32 = mul %125, 32u
+    %127:u32 = mul %126, 18u
+    %128:u32 = add %124, %127
+    %tileIndex:u32 = let %128
     %clusterLightCount:ptr<function, u32, read_write> = var, 0u
     %cluserLightIndices:ptr<function, array<u32, 256>, read_write> = var
-    loop [i: %b14, b: %b15, c: %b16] {  # loop_2
-      %b14 = block {  # initializer
+    loop [i: $B14, b: $B15, c: $B16] {  # loop_2
+      $B14: {  # initializer
         %i_1:ptr<function, u32, read_write> = var, 0u  # %i_1: 'i'
-        next_iteration %b15
+        next_iteration  # -> $B15
       }
-      %b15 = block {  # body
-        %123:u32 = load %i_1
-        %124:ptr<storage, u32, read> = access %globalLights, 4u
-        %125:u32 = load %124
-        %126:bool = lt %123, %125
-        if %126 [t: %b17, f: %b18] {  # if_4
-          %b17 = block {  # true
+      $B15: {  # body
+        %133:u32 = load %i_1
+        %134:ptr<storage, u32, read> = access %globalLights, 4u
+        %135:u32 = load %134
+        %136:bool = lt %133, %135
+        if %136 [t: $B17, f: $B18] {  # if_4
+          $B17: {  # true
             exit_if  # if_4
           }
-          %b18 = block {  # false
+          $B18: {  # false
             exit_loop  # loop_2
           }
         }
-        %127:u32 = load %i_1
-        %128:ptr<storage, f32, read> = access %globalLights, 5u, %127, 1u
-        %range:f32 = load %128
-        %130:bool = lte %range, 0.0f
-        %lightInCluster:ptr<function, bool, read_write> = var, %130
-        %132:bool = load %lightInCluster
-        %133:bool = eq %132, false
-        if %133 [t: %b19] {  # if_5
-          %b19 = block {  # true
-            %134:ptr<uniform, mat4x4<f32>, read> = access %camera, 2u
-            %135:mat4x4<f32> = load %134
-            %136:u32 = load %i_1
-            %137:ptr<storage, vec3<f32>, read> = access %globalLights, 5u, %136, 0u
-            %138:vec3<f32> = load %137
-            %139:vec4<f32> = construct %138, 1.0f
-            %lightViewPos:vec4<f32> = mul %135, %139
-            %141:vec3<f32> = swizzle %lightViewPos, xyz
-            %142:ptr<storage, vec3<f32>, read> = access %clusters, 0u, %tileIndex, 0u
-            %143:vec3<f32> = load %142
-            %144:ptr<storage, vec3<f32>, read> = access %clusters, 0u, %tileIndex, 1u
-            %145:vec3<f32> = load %144
-            %sqDist_1:f32 = call %sqDistPointAABB, %141, %143, %145  # %sqDist_1: 'sqDist'
-            %147:f32 = mul %range, %range
-            %148:bool = lte %sqDist_1, %147
-            store %lightInCluster, %148
+        %137:u32 = load %i_1
+        %138:ptr<storage, f32, read> = access %globalLights, 5u, %137, 1u
+        %139:f32 = load %138
+        %range:f32 = let %139
+        %141:bool = lte %range, 0.0f
+        %lightInCluster:ptr<function, bool, read_write> = var, %141
+        %143:bool = load %lightInCluster
+        %144:bool = eq %143, false
+        if %144 [t: $B19] {  # if_5
+          $B19: {  # true
+            %145:ptr<uniform, mat4x4<f32>, read> = access %camera, 2u
+            %146:mat4x4<f32> = load %145
+            %147:mat4x4<f32> = let %146
+            %148:u32 = load %i_1
+            %149:ptr<storage, vec3<f32>, read> = access %globalLights, 5u, %148, 0u
+            %150:vec3<f32> = load %149
+            %151:vec4<f32> = construct %150, 1.0f
+            %152:vec4<f32> = mul %147, %151
+            %lightViewPos:vec4<f32> = let %152
+            %154:vec3<f32> = swizzle %lightViewPos, xyz
+            %155:ptr<storage, vec3<f32>, read> = access %clusters, 0u, %tileIndex, 0u
+            %156:vec3<f32> = load %155
+            %157:ptr<storage, vec3<f32>, read> = access %clusters, 0u, %tileIndex, 1u
+            %158:vec3<f32> = load %157
+            %159:f32 = call %sqDistPointAABB, %154, %156, %158
+            %sqDist_1:f32 = let %159  # %sqDist_1: 'sqDist'
+            %161:f32 = mul %range, %range
+            %162:bool = lte %sqDist_1, %161
+            store %lightInCluster, %162
             exit_if  # if_5
           }
         }
-        %149:bool = load %lightInCluster
-        if %149 [t: %b20] {  # if_6
-          %b20 = block {  # true
-            %150:u32 = load %clusterLightCount
-            %151:ptr<function, u32, read_write> = access %cluserLightIndices, %150
-            %152:u32 = load %i_1
-            store %151, %152
-            %153:u32 = load %clusterLightCount
-            %154:u32 = add %153, 1u
-            store %clusterLightCount, %154
+        %163:bool = load %lightInCluster
+        if %163 [t: $B20] {  # if_6
+          $B20: {  # true
+            %164:u32 = load %clusterLightCount
+            %165:ptr<function, u32, read_write> = access %cluserLightIndices, %164
+            %166:u32 = load %i_1
+            store %165, %166
+            %167:u32 = load %clusterLightCount
+            %168:u32 = add %167, 1u
+            store %clusterLightCount, %168
             exit_if  # if_6
           }
         }
-        %155:u32 = load %clusterLightCount
-        %156:bool = eq %155, 256u
-        if %156 [t: %b21] {  # if_7
-          %b21 = block {  # true
+        %169:u32 = load %clusterLightCount
+        %170:bool = eq %169, 256u
+        if %170 [t: $B21] {  # if_7
+          $B21: {  # true
             exit_loop  # loop_2
           }
         }
-        continue %b16
+        continue  # -> $B16
       }
-      %b16 = block {  # continuing
-        %157:u32 = load %i_1
-        %158:u32 = add %157, 1u
-        store %i_1, %158
-        next_iteration %b15
+      $B16: {  # continuing
+        %171:u32 = load %i_1
+        %172:u32 = add %171, 1u
+        store %i_1, %172
+        next_iteration  # -> $B15
       }
     }
-    %lightCount:u32 = load %clusterLightCount
-    %160:ptr<storage, atomic<u32>, read_write> = access %clusterLights, 0u
-    %161:u32 = atomicAdd %160, %lightCount
-    %offset:ptr<function, u32, read_write> = var, %161
-    %163:u32 = load %offset
-    %164:bool = gte %163, 1769472u
-    if %164 [t: %b22] {  # if_8
-      %b22 = block {  # true
+    %173:u32 = load %clusterLightCount
+    %lightCount:u32 = let %173
+    %175:ptr<storage, atomic<u32>, read_write> = access %clusterLights, 0u
+    %176:u32 = atomicAdd %175, %lightCount
+    %offset:ptr<function, u32, read_write> = var, %176
+    %178:u32 = load %offset
+    %179:bool = gte %178, 1769472u
+    if %179 [t: $B22] {  # if_8
+      $B22: {  # true
         ret
       }
     }
-    loop [i: %b23, b: %b24, c: %b25] {  # loop_3
-      %b23 = block {  # initializer
+    loop [i: $B23, b: $B24, c: $B25] {  # loop_3
+      $B23: {  # initializer
         %i_2:ptr<function, u32, read_write> = var, 0u  # %i_2: 'i'
-        next_iteration %b24
+        next_iteration  # -> $B24
       }
-      %b24 = block {  # body
-        %166:u32 = load %i_2
-        %167:u32 = load %clusterLightCount
-        %168:bool = lt %166, %167
-        if %168 [t: %b26, f: %b27] {  # if_9
-          %b26 = block {  # true
+      $B24: {  # body
+        %181:u32 = load %i_2
+        %182:u32 = load %clusterLightCount
+        %183:bool = lt %181, %182
+        if %183 [t: $B26, f: $B27] {  # if_9
+          $B26: {  # true
             exit_if  # if_9
           }
-          %b27 = block {  # false
+          $B27: {  # false
             exit_loop  # loop_3
           }
         }
-        %169:u32 = load %offset
-        %170:u32 = load %i_2
-        %171:u32 = add %169, %170
-        %172:ptr<storage, u32, read_write> = access %clusterLights, 2u, %171
-        %173:u32 = load %i_2
-        %174:ptr<function, u32, read_write> = access %cluserLightIndices, %173
-        %175:u32 = load %174
-        store %172, %175
-        continue %b25
+        %184:u32 = load %offset
+        %185:u32 = load %i_2
+        %186:u32 = add %184, %185
+        %187:ptr<storage, u32, read_write> = access %clusterLights, 2u, %186
+        %188:u32 = load %i_2
+        %189:ptr<function, u32, read_write> = access %cluserLightIndices, %188
+        %190:u32 = load %189
+        store %187, %190
+        continue  # -> $B25
       }
-      %b25 = block {  # continuing
-        %176:u32 = load %i_2
-        %177:u32 = add %176, 1u
-        store %i_2, %177
-        next_iteration %b24
+      $B25: {  # continuing
+        %191:u32 = load %i_2
+        %192:u32 = add %191, 1u
+        store %i_2, %192
+        next_iteration  # -> $B24
       }
     }
-    %178:ptr<storage, u32, read_write> = access %clusterLights, 1u, %tileIndex, 0u
-    %179:u32 = load %offset
-    store %178, %179
-    %180:ptr<storage, u32, read_write> = access %clusterLights, 1u, %tileIndex, 1u
-    %181:u32 = load %clusterLightCount
-    store %180, %181
+    %193:ptr<storage, u32, read_write> = access %clusterLights, 1u, %tileIndex, 0u
+    %194:u32 = load %offset
+    store %193, %194
+    %195:ptr<storage, u32, read_write> = access %clusterLights, 1u, %tileIndex, 1u
+    %196:u32 = load %clusterLightCount
+    store %195, %196
     ret
   }
 }
+%tint_f32_to_u32 = func(%value:f32):u32 {
+  $B28: {
+    %198:u32 = convert %value
+    %199:bool = gte %value, 0.0f
+    %200:u32 = select 0u, %198, %199
+    %201:bool = lte %value, 4294967040.0f
+    %202:u32 = select 4294967295u, %200, %201
+    ret %202
+  }
+}
 
 unhandled variable address space
 ********************************************************************
diff --git a/test/tint/benchmark/metaball-isosurface.wgsl.expected.ir.msl b/test/tint/benchmark/metaball-isosurface.wgsl.expected.ir.msl
index 3354431..be43b04 100644
--- a/test/tint/benchmark/metaball-isosurface.wgsl.expected.ir.msl
+++ b/test/tint/benchmark/metaball-isosurface.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Tables = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Tables = struct @align(4) {
   edges:array<u32, 256> @offset(0)
   tris:array<i32, 4096> @offset(1024)
 }
@@ -38,7 +38,7 @@
   indexedFirstInstance:u32 @offset(32)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %tables:ptr<storage, Tables, read> = var @binding_point(0, 0)
   %volume:ptr<storage, IsosurfaceVolume, read_write> = var @binding_point(0, 1)
   %positionsOut:ptr<storage, PositionBuffer, read_write> = var @binding_point(0, 2)
@@ -51,14 +51,14 @@
   %cubeVerts:ptr<private, u32, read_write> = var, 0u
 }
 
-%valueAt = func(%index:vec3<u32>):f32 -> %b2 {
-  %b2 = block {
+%valueAt = func(%index:vec3<u32>):f32 {
+  $B2: {
     %13:ptr<storage, vec3<u32>, read_write> = access %volume, 3u
     %14:vec3<u32> = load %13
     %15:vec3<bool> = gte %index, %14
     %16:bool = any %15
-    if %16 [t: %b3] {  # if_1
-      %b3 = block {  # true
+    if %16 [t: $B3] {  # if_1
+      $B3: {  # true
         ret 0.0f
       }
     }
@@ -75,532 +75,580 @@
     %27:ptr<storage, vec3<u32>, read_write> = access %volume, 3u
     %28:u32 = load_vector_element %27, 1u
     %29:u32 = mul %26, %28
-    %valueIndex:u32 = add %22, %29
-    %31:ptr<storage, f32, read_write> = access %volume, 5u, %valueIndex
-    %32:f32 = load %31
-    ret %32
+    %30:u32 = add %22, %29
+    %valueIndex:u32 = let %30
+    %32:ptr<storage, f32, read_write> = access %volume, 5u, %valueIndex
+    %33:f32 = load %32
+    ret %33
   }
 }
-%positionAt = func(%index_1:vec3<u32>):vec3<f32> -> %b4 {  # %index_1: 'index'
-  %b4 = block {
-    %35:ptr<storage, vec3<f32>, read_write> = access %volume, 0u
-    %36:vec3<f32> = load %35
-    %37:ptr<storage, vec3<f32>, read_write> = access %volume, 2u
-    %38:vec3<f32> = load %37
-    %39:vec3<u32> = swizzle %index_1, xyz
-    %40:vec3<f32> = convert %39
-    %41:vec3<f32> = mul %38, %40
-    %42:vec3<f32> = add %36, %41
-    ret %42
+%positionAt = func(%index_1:vec3<u32>):vec3<f32> {  # %index_1: 'index'
+  $B4: {
+    %36:ptr<storage, vec3<f32>, read_write> = access %volume, 0u
+    %37:vec3<f32> = load %36
+    %38:vec3<f32> = let %37
+    %39:ptr<storage, vec3<f32>, read_write> = access %volume, 2u
+    %40:vec3<f32> = load %39
+    %41:vec3<f32> = let %40
+    %42:vec3<u32> = swizzle %index_1, xyz
+    %43:vec3<f32> = convert %42
+    %44:vec3<f32> = mul %41, %43
+    %45:vec3<f32> = add %38, %44
+    ret %45
   }
 }
-%normalAt = func(%index_2:vec3<u32>):vec3<f32> -> %b5 {  # %index_2: 'index'
-  %b5 = block {
-    %45:vec3<u32> = sub %index_2, vec3<u32>(1u, 0u, 0u)
-    %46:f32 = call %valueAt, %45
-    %47:vec3<u32> = add %index_2, vec3<u32>(1u, 0u, 0u)
-    %48:f32 = call %valueAt, %47
-    %49:f32 = sub %46, %48
-    %50:vec3<u32> = sub %index_2, vec3<u32>(0u, 1u, 0u)
-    %51:f32 = call %valueAt, %50
-    %52:vec3<u32> = add %index_2, vec3<u32>(0u, 1u, 0u)
-    %53:f32 = call %valueAt, %52
-    %54:f32 = sub %51, %53
-    %55:vec3<u32> = sub %index_2, vec3<u32>(0u, 0u, 1u)
+%normalAt = func(%index_2:vec3<u32>):vec3<f32> {  # %index_2: 'index'
+  $B5: {
+    %48:vec3<u32> = sub %index_2, vec3<u32>(1u, 0u, 0u)
+    %49:f32 = call %valueAt, %48
+    %50:f32 = let %49
+    %51:vec3<u32> = add %index_2, vec3<u32>(1u, 0u, 0u)
+    %52:f32 = call %valueAt, %51
+    %53:f32 = sub %50, %52
+    %54:f32 = let %53
+    %55:vec3<u32> = sub %index_2, vec3<u32>(0u, 1u, 0u)
     %56:f32 = call %valueAt, %55
-    %57:vec3<u32> = add %index_2, vec3<u32>(0u, 0u, 1u)
-    %58:f32 = call %valueAt, %57
-    %59:f32 = sub %56, %58
-    %60:vec3<f32> = construct %49, %54, %59
-    ret %60
+    %57:f32 = let %56
+    %58:vec3<u32> = add %index_2, vec3<u32>(0u, 1u, 0u)
+    %59:f32 = call %valueAt, %58
+    %60:f32 = sub %57, %59
+    %61:f32 = let %60
+    %62:vec3<u32> = sub %index_2, vec3<u32>(0u, 0u, 1u)
+    %63:f32 = call %valueAt, %62
+    %64:f32 = let %63
+    %65:vec3<u32> = add %index_2, vec3<u32>(0u, 0u, 1u)
+    %66:f32 = call %valueAt, %65
+    %67:f32 = sub %64, %66
+    %68:vec3<f32> = construct %54, %61, %67
+    ret %68
   }
 }
-%interpX = func(%index_3:u32, %i:vec3<u32>, %va:f32, %vb:f32):void -> %b6 {  # %index_3: 'index'
-  %b6 = block {
-    %66:ptr<storage, f32, read_write> = access %volume, 4u
-    %67:f32 = load %66
-    %68:f32 = sub %67, %va
-    %69:f32 = sub %vb, %va
-    %mu:f32 = div %68, %69
-    %71:u32 = load %cubeVerts
-    %72:ptr<private, vec3<f32>, read_write> = access %positions, %71
-    %73:vec3<f32> = call %positionAt, %i
-    %74:ptr<storage, vec3<f32>, read_write> = access %volume, 2u
-    %75:f32 = load_vector_element %74, 0u
-    %76:f32 = mul %75, %mu
-    %77:vec3<f32> = construct %76, 0.0f, 0.0f
-    %78:vec3<f32> = add %73, %77
-    store %72, %78
-    %na:vec3<f32> = call %normalAt, %i
-    %80:vec3<u32> = add %i, vec3<u32>(1u, 0u, 0u)
-    %nb:vec3<f32> = call %normalAt, %80
-    %82:u32 = load %cubeVerts
-    %83:ptr<private, vec3<f32>, read_write> = access %normals, %82
-    %84:vec3<f32> = construct %mu, %mu, %mu
-    %85:vec3<f32> = mix %na, %nb, %84
-    store %83, %85
-    %86:ptr<private, u32, read_write> = access %indices, %index_3
-    %87:u32 = load %cubeVerts
-    store %86, %87
-    %88:u32 = load %cubeVerts
-    %89:u32 = add %88, 1u
-    store %cubeVerts, %89
+%interpX = func(%index_3:u32, %i:vec3<u32>, %va:f32, %vb:f32):void {  # %index_3: 'index'
+  $B6: {
+    %74:ptr<storage, f32, read_write> = access %volume, 4u
+    %75:f32 = load %74
+    %76:f32 = sub %75, %va
+    %77:f32 = sub %vb, %va
+    %78:f32 = div %76, %77
+    %mu:f32 = let %78
+    %80:u32 = load %cubeVerts
+    %81:ptr<private, vec3<f32>, read_write> = access %positions, %80
+    %82:ptr<private, vec3<f32>, read_write> = let %81
+    %83:vec3<f32> = call %positionAt, %i
+    %84:vec3<f32> = let %83
+    %85:ptr<storage, vec3<f32>, read_write> = access %volume, 2u
+    %86:f32 = load_vector_element %85, 0u
+    %87:f32 = mul %86, %mu
+    %88:vec3<f32> = construct %87, 0.0f, 0.0f
+    %89:vec3<f32> = add %84, %88
+    store %82, %89
+    %90:vec3<f32> = call %normalAt, %i
+    %na:vec3<f32> = let %90
+    %92:vec3<u32> = add %i, vec3<u32>(1u, 0u, 0u)
+    %93:vec3<f32> = call %normalAt, %92
+    %nb:vec3<f32> = let %93
+    %95:u32 = load %cubeVerts
+    %96:ptr<private, vec3<f32>, read_write> = access %normals, %95
+    %97:ptr<private, vec3<f32>, read_write> = let %96
+    %98:vec3<f32> = construct %mu, %mu, %mu
+    %99:vec3<f32> = mix %na, %nb, %98
+    store %97, %99
+    %100:ptr<private, u32, read_write> = access %indices, %index_3
+    %101:u32 = load %cubeVerts
+    store %100, %101
+    %102:u32 = load %cubeVerts
+    %103:u32 = add %102, 1u
+    store %cubeVerts, %103
     ret
   }
 }
-%interpY = func(%index_4:u32, %i_1:vec3<u32>, %va_1:f32, %vb_1:f32):void -> %b7 {  # %index_4: 'index', %i_1: 'i', %va_1: 'va', %vb_1: 'vb'
-  %b7 = block {
-    %95:ptr<storage, f32, read_write> = access %volume, 4u
-    %96:f32 = load %95
-    %97:f32 = sub %96, %va_1
-    %98:f32 = sub %vb_1, %va_1
-    %mu_1:f32 = div %97, %98  # %mu_1: 'mu'
-    %100:u32 = load %cubeVerts
-    %101:ptr<private, vec3<f32>, read_write> = access %positions, %100
-    %102:vec3<f32> = call %positionAt, %i_1
-    %103:ptr<storage, vec3<f32>, read_write> = access %volume, 2u
-    %104:f32 = load_vector_element %103, 1u
-    %105:f32 = mul %104, %mu_1
-    %106:vec3<f32> = construct 0.0f, %105, 0.0f
-    %107:vec3<f32> = add %102, %106
-    store %101, %107
-    %na_1:vec3<f32> = call %normalAt, %i_1  # %na_1: 'na'
-    %109:vec3<u32> = add %i_1, vec3<u32>(0u, 1u, 0u)
-    %nb_1:vec3<f32> = call %normalAt, %109  # %nb_1: 'nb'
-    %111:u32 = load %cubeVerts
-    %112:ptr<private, vec3<f32>, read_write> = access %normals, %111
-    %113:vec3<f32> = construct %mu_1, %mu_1, %mu_1
-    %114:vec3<f32> = mix %na_1, %nb_1, %113
-    store %112, %114
-    %115:ptr<private, u32, read_write> = access %indices, %index_4
-    %116:u32 = load %cubeVerts
-    store %115, %116
-    %117:u32 = load %cubeVerts
-    %118:u32 = add %117, 1u
-    store %cubeVerts, %118
+%interpY = func(%index_4:u32, %i_1:vec3<u32>, %va_1:f32, %vb_1:f32):void {  # %index_4: 'index', %i_1: 'i', %va_1: 'va', %vb_1: 'vb'
+  $B7: {
+    %109:ptr<storage, f32, read_write> = access %volume, 4u
+    %110:f32 = load %109
+    %111:f32 = sub %110, %va_1
+    %112:f32 = sub %vb_1, %va_1
+    %113:f32 = div %111, %112
+    %mu_1:f32 = let %113  # %mu_1: 'mu'
+    %115:u32 = load %cubeVerts
+    %116:ptr<private, vec3<f32>, read_write> = access %positions, %115
+    %117:ptr<private, vec3<f32>, read_write> = let %116
+    %118:vec3<f32> = call %positionAt, %i_1
+    %119:vec3<f32> = let %118
+    %120:ptr<storage, vec3<f32>, read_write> = access %volume, 2u
+    %121:f32 = load_vector_element %120, 1u
+    %122:f32 = mul %121, %mu_1
+    %123:vec3<f32> = construct 0.0f, %122, 0.0f
+    %124:vec3<f32> = add %119, %123
+    store %117, %124
+    %125:vec3<f32> = call %normalAt, %i_1
+    %na_1:vec3<f32> = let %125  # %na_1: 'na'
+    %127:vec3<u32> = add %i_1, vec3<u32>(0u, 1u, 0u)
+    %128:vec3<f32> = call %normalAt, %127
+    %nb_1:vec3<f32> = let %128  # %nb_1: 'nb'
+    %130:u32 = load %cubeVerts
+    %131:ptr<private, vec3<f32>, read_write> = access %normals, %130
+    %132:ptr<private, vec3<f32>, read_write> = let %131
+    %133:vec3<f32> = construct %mu_1, %mu_1, %mu_1
+    %134:vec3<f32> = mix %na_1, %nb_1, %133
+    store %132, %134
+    %135:ptr<private, u32, read_write> = access %indices, %index_4
+    %136:u32 = load %cubeVerts
+    store %135, %136
+    %137:u32 = load %cubeVerts
+    %138:u32 = add %137, 1u
+    store %cubeVerts, %138
     ret
   }
 }
-%interpZ = func(%index_5:u32, %i_2:vec3<u32>, %va_2:f32, %vb_2:f32):void -> %b8 {  # %index_5: 'index', %i_2: 'i', %va_2: 'va', %vb_2: 'vb'
-  %b8 = block {
-    %124:ptr<storage, f32, read_write> = access %volume, 4u
-    %125:f32 = load %124
-    %126:f32 = sub %125, %va_2
-    %127:f32 = sub %vb_2, %va_2
-    %mu_2:f32 = div %126, %127  # %mu_2: 'mu'
-    %129:u32 = load %cubeVerts
-    %130:ptr<private, vec3<f32>, read_write> = access %positions, %129
-    %131:vec3<f32> = call %positionAt, %i_2
-    %132:ptr<storage, vec3<f32>, read_write> = access %volume, 2u
-    %133:f32 = load_vector_element %132, 2u
-    %134:f32 = mul %133, %mu_2
-    %135:vec3<f32> = construct 0.0f, 0.0f, %134
-    %136:vec3<f32> = add %131, %135
-    store %130, %136
-    %na_2:vec3<f32> = call %normalAt, %i_2  # %na_2: 'na'
-    %138:vec3<u32> = add %i_2, vec3<u32>(0u, 0u, 1u)
-    %nb_2:vec3<f32> = call %normalAt, %138  # %nb_2: 'nb'
-    %140:u32 = load %cubeVerts
-    %141:ptr<private, vec3<f32>, read_write> = access %normals, %140
-    %142:vec3<f32> = construct %mu_2, %mu_2, %mu_2
-    %143:vec3<f32> = mix %na_2, %nb_2, %142
-    store %141, %143
-    %144:ptr<private, u32, read_write> = access %indices, %index_5
-    %145:u32 = load %cubeVerts
-    store %144, %145
-    %146:u32 = load %cubeVerts
-    %147:u32 = add %146, 1u
-    store %cubeVerts, %147
+%interpZ = func(%index_5:u32, %i_2:vec3<u32>, %va_2:f32, %vb_2:f32):void {  # %index_5: 'index', %i_2: 'i', %va_2: 'va', %vb_2: 'vb'
+  $B8: {
+    %144:ptr<storage, f32, read_write> = access %volume, 4u
+    %145:f32 = load %144
+    %146:f32 = sub %145, %va_2
+    %147:f32 = sub %vb_2, %va_2
+    %148:f32 = div %146, %147
+    %mu_2:f32 = let %148  # %mu_2: 'mu'
+    %150:u32 = load %cubeVerts
+    %151:ptr<private, vec3<f32>, read_write> = access %positions, %150
+    %152:ptr<private, vec3<f32>, read_write> = let %151
+    %153:vec3<f32> = call %positionAt, %i_2
+    %154:vec3<f32> = let %153
+    %155:ptr<storage, vec3<f32>, read_write> = access %volume, 2u
+    %156:f32 = load_vector_element %155, 2u
+    %157:f32 = mul %156, %mu_2
+    %158:vec3<f32> = construct 0.0f, 0.0f, %157
+    %159:vec3<f32> = add %154, %158
+    store %152, %159
+    %160:vec3<f32> = call %normalAt, %i_2
+    %na_2:vec3<f32> = let %160  # %na_2: 'na'
+    %162:vec3<u32> = add %i_2, vec3<u32>(0u, 0u, 1u)
+    %163:vec3<f32> = call %normalAt, %162
+    %nb_2:vec3<f32> = let %163  # %nb_2: 'nb'
+    %165:u32 = load %cubeVerts
+    %166:ptr<private, vec3<f32>, read_write> = access %normals, %165
+    %167:ptr<private, vec3<f32>, read_write> = let %166
+    %168:vec3<f32> = construct %mu_2, %mu_2, %mu_2
+    %169:vec3<f32> = mix %na_2, %nb_2, %168
+    store %167, %169
+    %170:ptr<private, u32, read_write> = access %indices, %index_5
+    %171:u32 = load %cubeVerts
+    store %170, %171
+    %172:u32 = load %cubeVerts
+    %173:u32 = add %172, 1u
+    store %cubeVerts, %173
     ret
   }
 }
-%computeMain = @compute @workgroup_size(4, 4, 4) func(%global_id:vec3<u32> [@global_invocation_id]):void -> %b9 {
-  %b9 = block {
+%computeMain = @compute @workgroup_size(4, 4, 4) func(%global_id:vec3<u32> [@global_invocation_id]):void {
+  $B9: {
     %i0:vec3<u32> = let %global_id
-    %i1:vec3<u32> = add %global_id, vec3<u32>(1u, 0u, 0u)
-    %i2:vec3<u32> = add %global_id, vec3<u32>(1u, 1u, 0u)
-    %i3:vec3<u32> = add %global_id, vec3<u32>(0u, 1u, 0u)
-    %i4:vec3<u32> = add %global_id, vec3<u32>(0u, 0u, 1u)
-    %i5:vec3<u32> = add %global_id, vec3<u32>(1u, 0u, 1u)
-    %i6:vec3<u32> = add %global_id, vec3<u32>(1u)
-    %i7:vec3<u32> = add %global_id, vec3<u32>(0u, 1u, 1u)
-    %v0:f32 = call %valueAt, %i0
-    %v1:f32 = call %valueAt, %i1
-    %v2:f32 = call %valueAt, %i2
-    %v3:f32 = call %valueAt, %i3
-    %v4:f32 = call %valueAt, %i4
-    %v5:f32 = call %valueAt, %i5
-    %v6:f32 = call %valueAt, %i6
-    %v7:f32 = call %valueAt, %i7
+    %177:vec3<u32> = add %global_id, vec3<u32>(1u, 0u, 0u)
+    %i1:vec3<u32> = let %177
+    %179:vec3<u32> = add %global_id, vec3<u32>(1u, 1u, 0u)
+    %i2:vec3<u32> = let %179
+    %181:vec3<u32> = add %global_id, vec3<u32>(0u, 1u, 0u)
+    %i3:vec3<u32> = let %181
+    %183:vec3<u32> = add %global_id, vec3<u32>(0u, 0u, 1u)
+    %i4:vec3<u32> = let %183
+    %185:vec3<u32> = add %global_id, vec3<u32>(1u, 0u, 1u)
+    %i5:vec3<u32> = let %185
+    %187:vec3<u32> = add %global_id, vec3<u32>(1u)
+    %i6:vec3<u32> = let %187
+    %189:vec3<u32> = add %global_id, vec3<u32>(0u, 1u, 1u)
+    %i7:vec3<u32> = let %189
+    %191:f32 = call %valueAt, %i0
+    %v0:f32 = let %191
+    %193:f32 = call %valueAt, %i1
+    %v1:f32 = let %193
+    %195:f32 = call %valueAt, %i2
+    %v2:f32 = let %195
+    %197:f32 = call %valueAt, %i3
+    %v3:f32 = let %197
+    %199:f32 = call %valueAt, %i4
+    %v4:f32 = let %199
+    %201:f32 = call %valueAt, %i5
+    %v5:f32 = let %201
+    %203:f32 = call %valueAt, %i6
+    %v6:f32 = let %203
+    %205:f32 = call %valueAt, %i7
+    %v7:f32 = let %205
     %cubeIndex:ptr<function, u32, read_write> = var, 0u
-    %167:ptr<storage, f32, read_write> = access %volume, 4u
-    %168:f32 = load %167
-    %169:bool = lt %v0, %168
-    if %169 [t: %b10] {  # if_2
-      %b10 = block {  # true
-        %170:u32 = load %cubeIndex
-        %171:u32 = or %170, 1u
-        store %cubeIndex, %171
+    %208:ptr<storage, f32, read_write> = access %volume, 4u
+    %209:f32 = load %208
+    %210:bool = lt %v0, %209
+    if %210 [t: $B10] {  # if_2
+      $B10: {  # true
+        %211:u32 = load %cubeIndex
+        %212:u32 = or %211, 1u
+        store %cubeIndex, %212
         exit_if  # if_2
       }
     }
-    %172:ptr<storage, f32, read_write> = access %volume, 4u
-    %173:f32 = load %172
-    %174:bool = lt %v1, %173
-    if %174 [t: %b11] {  # if_3
-      %b11 = block {  # true
-        %175:u32 = load %cubeIndex
-        %176:u32 = or %175, 2u
-        store %cubeIndex, %176
+    %213:ptr<storage, f32, read_write> = access %volume, 4u
+    %214:f32 = load %213
+    %215:bool = lt %v1, %214
+    if %215 [t: $B11] {  # if_3
+      $B11: {  # true
+        %216:u32 = load %cubeIndex
+        %217:u32 = or %216, 2u
+        store %cubeIndex, %217
         exit_if  # if_3
       }
     }
-    %177:ptr<storage, f32, read_write> = access %volume, 4u
-    %178:f32 = load %177
-    %179:bool = lt %v2, %178
-    if %179 [t: %b12] {  # if_4
-      %b12 = block {  # true
-        %180:u32 = load %cubeIndex
-        %181:u32 = or %180, 4u
-        store %cubeIndex, %181
+    %218:ptr<storage, f32, read_write> = access %volume, 4u
+    %219:f32 = load %218
+    %220:bool = lt %v2, %219
+    if %220 [t: $B12] {  # if_4
+      $B12: {  # true
+        %221:u32 = load %cubeIndex
+        %222:u32 = or %221, 4u
+        store %cubeIndex, %222
         exit_if  # if_4
       }
     }
-    %182:ptr<storage, f32, read_write> = access %volume, 4u
-    %183:f32 = load %182
-    %184:bool = lt %v3, %183
-    if %184 [t: %b13] {  # if_5
-      %b13 = block {  # true
-        %185:u32 = load %cubeIndex
-        %186:u32 = or %185, 8u
-        store %cubeIndex, %186
+    %223:ptr<storage, f32, read_write> = access %volume, 4u
+    %224:f32 = load %223
+    %225:bool = lt %v3, %224
+    if %225 [t: $B13] {  # if_5
+      $B13: {  # true
+        %226:u32 = load %cubeIndex
+        %227:u32 = or %226, 8u
+        store %cubeIndex, %227
         exit_if  # if_5
       }
     }
-    %187:ptr<storage, f32, read_write> = access %volume, 4u
-    %188:f32 = load %187
-    %189:bool = lt %v4, %188
-    if %189 [t: %b14] {  # if_6
-      %b14 = block {  # true
-        %190:u32 = load %cubeIndex
-        %191:u32 = or %190, 16u
-        store %cubeIndex, %191
+    %228:ptr<storage, f32, read_write> = access %volume, 4u
+    %229:f32 = load %228
+    %230:bool = lt %v4, %229
+    if %230 [t: $B14] {  # if_6
+      $B14: {  # true
+        %231:u32 = load %cubeIndex
+        %232:u32 = or %231, 16u
+        store %cubeIndex, %232
         exit_if  # if_6
       }
     }
-    %192:ptr<storage, f32, read_write> = access %volume, 4u
-    %193:f32 = load %192
-    %194:bool = lt %v5, %193
-    if %194 [t: %b15] {  # if_7
-      %b15 = block {  # true
-        %195:u32 = load %cubeIndex
-        %196:u32 = or %195, 32u
-        store %cubeIndex, %196
+    %233:ptr<storage, f32, read_write> = access %volume, 4u
+    %234:f32 = load %233
+    %235:bool = lt %v5, %234
+    if %235 [t: $B15] {  # if_7
+      $B15: {  # true
+        %236:u32 = load %cubeIndex
+        %237:u32 = or %236, 32u
+        store %cubeIndex, %237
         exit_if  # if_7
       }
     }
-    %197:ptr<storage, f32, read_write> = access %volume, 4u
-    %198:f32 = load %197
-    %199:bool = lt %v6, %198
-    if %199 [t: %b16] {  # if_8
-      %b16 = block {  # true
-        %200:u32 = load %cubeIndex
-        %201:u32 = or %200, 64u
-        store %cubeIndex, %201
+    %238:ptr<storage, f32, read_write> = access %volume, 4u
+    %239:f32 = load %238
+    %240:bool = lt %v6, %239
+    if %240 [t: $B16] {  # if_8
+      $B16: {  # true
+        %241:u32 = load %cubeIndex
+        %242:u32 = or %241, 64u
+        store %cubeIndex, %242
         exit_if  # if_8
       }
     }
-    %202:ptr<storage, f32, read_write> = access %volume, 4u
-    %203:f32 = load %202
-    %204:bool = lt %v7, %203
-    if %204 [t: %b17] {  # if_9
-      %b17 = block {  # true
-        %205:u32 = load %cubeIndex
-        %206:u32 = or %205, 128u
-        store %cubeIndex, %206
+    %243:ptr<storage, f32, read_write> = access %volume, 4u
+    %244:f32 = load %243
+    %245:bool = lt %v7, %244
+    if %245 [t: $B17] {  # if_9
+      $B17: {  # true
+        %246:u32 = load %cubeIndex
+        %247:u32 = or %246, 128u
+        store %cubeIndex, %247
         exit_if  # if_9
       }
     }
-    %207:u32 = load %cubeIndex
-    %208:ptr<storage, u32, read> = access %tables, 0u, %207
-    %edges:u32 = load %208
-    %210:u32 = and %edges, 1u
-    %211:bool = neq %210, 0u
-    if %211 [t: %b18] {  # if_10
-      %b18 = block {  # true
-        %212:void = call %interpX, 0u, %i0, %v0, %v1
+    %248:u32 = load %cubeIndex
+    %249:ptr<storage, u32, read> = access %tables, 0u, %248
+    %250:u32 = load %249
+    %edges:u32 = let %250
+    %252:u32 = and %edges, 1u
+    %253:bool = neq %252, 0u
+    if %253 [t: $B18] {  # if_10
+      $B18: {  # true
+        %254:void = call %interpX, 0u, %i0, %v0, %v1
         exit_if  # if_10
       }
     }
-    %213:u32 = and %edges, 2u
-    %214:bool = neq %213, 0u
-    if %214 [t: %b19] {  # if_11
-      %b19 = block {  # true
-        %215:void = call %interpY, 1u, %i1, %v1, %v2
+    %255:u32 = and %edges, 2u
+    %256:bool = neq %255, 0u
+    if %256 [t: $B19] {  # if_11
+      $B19: {  # true
+        %257:void = call %interpY, 1u, %i1, %v1, %v2
         exit_if  # if_11
       }
     }
-    %216:u32 = and %edges, 4u
-    %217:bool = neq %216, 0u
-    if %217 [t: %b20] {  # if_12
-      %b20 = block {  # true
-        %218:void = call %interpX, 2u, %i3, %v3, %v2
+    %258:u32 = and %edges, 4u
+    %259:bool = neq %258, 0u
+    if %259 [t: $B20] {  # if_12
+      $B20: {  # true
+        %260:void = call %interpX, 2u, %i3, %v3, %v2
         exit_if  # if_12
       }
     }
-    %219:u32 = and %edges, 8u
-    %220:bool = neq %219, 0u
-    if %220 [t: %b21] {  # if_13
-      %b21 = block {  # true
-        %221:void = call %interpY, 3u, %i0, %v0, %v3
+    %261:u32 = and %edges, 8u
+    %262:bool = neq %261, 0u
+    if %262 [t: $B21] {  # if_13
+      $B21: {  # true
+        %263:void = call %interpY, 3u, %i0, %v0, %v3
         exit_if  # if_13
       }
     }
-    %222:u32 = and %edges, 16u
-    %223:bool = neq %222, 0u
-    if %223 [t: %b22] {  # if_14
-      %b22 = block {  # true
-        %224:void = call %interpX, 4u, %i4, %v4, %v5
+    %264:u32 = and %edges, 16u
+    %265:bool = neq %264, 0u
+    if %265 [t: $B22] {  # if_14
+      $B22: {  # true
+        %266:void = call %interpX, 4u, %i4, %v4, %v5
         exit_if  # if_14
       }
     }
-    %225:u32 = and %edges, 32u
-    %226:bool = neq %225, 0u
-    if %226 [t: %b23] {  # if_15
-      %b23 = block {  # true
-        %227:void = call %interpY, 5u, %i5, %v5, %v6
+    %267:u32 = and %edges, 32u
+    %268:bool = neq %267, 0u
+    if %268 [t: $B23] {  # if_15
+      $B23: {  # true
+        %269:void = call %interpY, 5u, %i5, %v5, %v6
         exit_if  # if_15
       }
     }
-    %228:u32 = and %edges, 64u
-    %229:bool = neq %228, 0u
-    if %229 [t: %b24] {  # if_16
-      %b24 = block {  # true
-        %230:void = call %interpX, 6u, %i7, %v7, %v6
+    %270:u32 = and %edges, 64u
+    %271:bool = neq %270, 0u
+    if %271 [t: $B24] {  # if_16
+      $B24: {  # true
+        %272:void = call %interpX, 6u, %i7, %v7, %v6
         exit_if  # if_16
       }
     }
-    %231:u32 = and %edges, 128u
-    %232:bool = neq %231, 0u
-    if %232 [t: %b25] {  # if_17
-      %b25 = block {  # true
-        %233:void = call %interpY, 7u, %i4, %v4, %v7
+    %273:u32 = and %edges, 128u
+    %274:bool = neq %273, 0u
+    if %274 [t: $B25] {  # if_17
+      $B25: {  # true
+        %275:void = call %interpY, 7u, %i4, %v4, %v7
         exit_if  # if_17
       }
     }
-    %234:u32 = and %edges, 256u
-    %235:bool = neq %234, 0u
-    if %235 [t: %b26] {  # if_18
-      %b26 = block {  # true
-        %236:void = call %interpZ, 8u, %i0, %v0, %v4
+    %276:u32 = and %edges, 256u
+    %277:bool = neq %276, 0u
+    if %277 [t: $B26] {  # if_18
+      $B26: {  # true
+        %278:void = call %interpZ, 8u, %i0, %v0, %v4
         exit_if  # if_18
       }
     }
-    %237:u32 = and %edges, 512u
-    %238:bool = neq %237, 0u
-    if %238 [t: %b27] {  # if_19
-      %b27 = block {  # true
-        %239:void = call %interpZ, 9u, %i1, %v1, %v5
+    %279:u32 = and %edges, 512u
+    %280:bool = neq %279, 0u
+    if %280 [t: $B27] {  # if_19
+      $B27: {  # true
+        %281:void = call %interpZ, 9u, %i1, %v1, %v5
         exit_if  # if_19
       }
     }
-    %240:u32 = and %edges, 1024u
-    %241:bool = neq %240, 0u
-    if %241 [t: %b28] {  # if_20
-      %b28 = block {  # true
-        %242:void = call %interpZ, 10u, %i2, %v2, %v6
+    %282:u32 = and %edges, 1024u
+    %283:bool = neq %282, 0u
+    if %283 [t: $B28] {  # if_20
+      $B28: {  # true
+        %284:void = call %interpZ, 10u, %i2, %v2, %v6
         exit_if  # if_20
       }
     }
-    %243:u32 = and %edges, 2048u
-    %244:bool = neq %243, 0u
-    if %244 [t: %b29] {  # if_21
-      %b29 = block {  # true
-        %245:void = call %interpZ, 11u, %i3, %v3, %v7
+    %285:u32 = and %edges, 2048u
+    %286:bool = neq %285, 0u
+    if %286 [t: $B29] {  # if_21
+      $B29: {  # true
+        %287:void = call %interpZ, 11u, %i3, %v3, %v7
         exit_if  # if_21
       }
     }
-    %246:u32 = load %cubeIndex
-    %247:u32 = shiftl %246, 4u
-    %triTableOffset:u32 = add %247, 1u
-    %249:u32 = sub %triTableOffset, 1u
-    %250:ptr<storage, i32, read> = access %tables, 1u, %249
-    %251:i32 = load %250
-    %indexCount:u32 = convert %251
-    %253:ptr<storage, atomic<u32>, read_write> = access %drawOut, 1u
-    %254:u32 = load %cubeVerts
-    %255:u32 = atomicAdd %253, %254
-    %firstVertex:ptr<function, u32, read_write> = var, %255
-    %257:u32 = access %global_id, 0u
-    %258:u32 = access %global_id, 1u
-    %259:ptr<storage, vec3<u32>, read_write> = access %volume, 3u
-    %260:u32 = load_vector_element %259, 0u
-    %261:u32 = mul %258, %260
-    %262:u32 = add %257, %261
-    %263:u32 = access %global_id, 2u
-    %264:ptr<storage, vec3<u32>, read_write> = access %volume, 3u
-    %265:u32 = load_vector_element %264, 0u
-    %266:u32 = mul %263, %265
-    %267:ptr<storage, vec3<u32>, read_write> = access %volume, 3u
-    %268:u32 = load_vector_element %267, 1u
-    %269:u32 = mul %266, %268
-    %bufferOffset:u32 = add %262, %269
-    %firstIndex:u32 = mul %bufferOffset, 15u
-    loop [i: %b30, b: %b31, c: %b32] {  # loop_1
-      %b30 = block {  # initializer
+    %288:u32 = load %cubeIndex
+    %289:u32 = and 4u, 31u
+    %290:u32 = shl %288, %289
+    %291:u32 = add %290, 1u
+    %triTableOffset:u32 = let %291
+    %293:u32 = sub %triTableOffset, 1u
+    %294:ptr<storage, i32, read> = access %tables, 1u, %293
+    %295:i32 = load %294
+    %296:u32 = convert %295
+    %indexCount:u32 = let %296
+    %298:ptr<storage, atomic<u32>, read_write> = access %drawOut, 1u
+    %299:u32 = load %cubeVerts
+    %300:u32 = atomicAdd %298, %299
+    %firstVertex:ptr<function, u32, read_write> = var, %300
+    %302:u32 = access %global_id, 0u
+    %303:u32 = access %global_id, 1u
+    %304:ptr<storage, vec3<u32>, read_write> = access %volume, 3u
+    %305:u32 = load_vector_element %304, 0u
+    %306:u32 = mul %303, %305
+    %307:u32 = add %302, %306
+    %308:u32 = access %global_id, 2u
+    %309:ptr<storage, vec3<u32>, read_write> = access %volume, 3u
+    %310:u32 = load_vector_element %309, 0u
+    %311:u32 = mul %308, %310
+    %312:ptr<storage, vec3<u32>, read_write> = access %volume, 3u
+    %313:u32 = load_vector_element %312, 1u
+    %314:u32 = mul %311, %313
+    %315:u32 = add %307, %314
+    %bufferOffset:u32 = let %315
+    %317:u32 = mul %bufferOffset, 15u
+    %firstIndex:u32 = let %317
+    loop [i: $B30, b: $B31, c: $B32] {  # loop_1
+      $B30: {  # initializer
         %i_3:ptr<function, u32, read_write> = var, 0u  # %i_3: 'i'
-        next_iteration %b31
+        next_iteration  # -> $B31
       }
-      %b31 = block {  # body
-        %273:u32 = load %i_3
-        %274:u32 = load %cubeVerts
-        %275:bool = lt %273, %274
-        if %275 [t: %b33, f: %b34] {  # if_22
-          %b33 = block {  # true
+      $B31: {  # body
+        %320:u32 = load %i_3
+        %321:u32 = load %cubeVerts
+        %322:bool = lt %320, %321
+        if %322 [t: $B33, f: $B34] {  # if_22
+          $B33: {  # true
             exit_if  # if_22
           }
-          %b34 = block {  # false
+          $B34: {  # false
             exit_loop  # loop_1
           }
         }
-        %276:u32 = load %firstVertex
-        %277:u32 = mul %276, 3u
-        %278:u32 = load %i_3
-        %279:u32 = mul %278, 3u
-        %280:u32 = add %277, %279
-        %281:ptr<storage, f32, read_write> = access %positionsOut, 0u, %280
-        %282:u32 = load %i_3
-        %283:ptr<private, vec3<f32>, read_write> = access %positions, %282
-        %284:f32 = load_vector_element %283, 0u
-        store %281, %284
-        %285:u32 = load %firstVertex
-        %286:u32 = mul %285, 3u
-        %287:u32 = load %i_3
-        %288:u32 = mul %287, 3u
-        %289:u32 = add %286, %288
-        %290:u32 = add %289, 1u
-        %291:ptr<storage, f32, read_write> = access %positionsOut, 0u, %290
-        %292:u32 = load %i_3
-        %293:ptr<private, vec3<f32>, read_write> = access %positions, %292
-        %294:f32 = load_vector_element %293, 1u
-        store %291, %294
-        %295:u32 = load %firstVertex
-        %296:u32 = mul %295, 3u
-        %297:u32 = load %i_3
-        %298:u32 = mul %297, 3u
-        %299:u32 = add %296, %298
-        %300:u32 = add %299, 2u
-        %301:ptr<storage, f32, read_write> = access %positionsOut, 0u, %300
-        %302:u32 = load %i_3
-        %303:ptr<private, vec3<f32>, read_write> = access %positions, %302
-        %304:f32 = load_vector_element %303, 2u
-        store %301, %304
-        %305:u32 = load %firstVertex
-        %306:u32 = mul %305, 3u
-        %307:u32 = load %i_3
-        %308:u32 = mul %307, 3u
-        %309:u32 = add %306, %308
-        %310:ptr<storage, f32, read_write> = access %normalsOut, 0u, %309
-        %311:u32 = load %i_3
-        %312:ptr<private, vec3<f32>, read_write> = access %normals, %311
-        %313:f32 = load_vector_element %312, 0u
-        store %310, %313
-        %314:u32 = load %firstVertex
-        %315:u32 = mul %314, 3u
-        %316:u32 = load %i_3
-        %317:u32 = mul %316, 3u
-        %318:u32 = add %315, %317
-        %319:u32 = add %318, 1u
-        %320:ptr<storage, f32, read_write> = access %normalsOut, 0u, %319
-        %321:u32 = load %i_3
-        %322:ptr<private, vec3<f32>, read_write> = access %normals, %321
-        %323:f32 = load_vector_element %322, 1u
-        store %320, %323
-        %324:u32 = load %firstVertex
-        %325:u32 = mul %324, 3u
-        %326:u32 = load %i_3
-        %327:u32 = mul %326, 3u
-        %328:u32 = add %325, %327
-        %329:u32 = add %328, 2u
-        %330:ptr<storage, f32, read_write> = access %normalsOut, 0u, %329
-        %331:u32 = load %i_3
-        %332:ptr<private, vec3<f32>, read_write> = access %normals, %331
-        %333:f32 = load_vector_element %332, 2u
-        store %330, %333
-        continue %b32
-      }
-      %b32 = block {  # continuing
+        %323:u32 = load %firstVertex
+        %324:u32 = mul %323, 3u
+        %325:u32 = load %i_3
+        %326:u32 = mul %325, 3u
+        %327:u32 = add %324, %326
+        %328:ptr<storage, f32, read_write> = access %positionsOut, 0u, %327
+        %329:u32 = load %i_3
+        %330:ptr<private, vec3<f32>, read_write> = access %positions, %329
+        %331:f32 = load_vector_element %330, 0u
+        store %328, %331
+        %332:u32 = load %firstVertex
+        %333:u32 = mul %332, 3u
         %334:u32 = load %i_3
-        %335:u32 = add %334, 1u
-        store %i_3, %335
-        next_iteration %b31
+        %335:u32 = mul %334, 3u
+        %336:u32 = add %333, %335
+        %337:u32 = add %336, 1u
+        %338:ptr<storage, f32, read_write> = access %positionsOut, 0u, %337
+        %339:u32 = load %i_3
+        %340:ptr<private, vec3<f32>, read_write> = access %positions, %339
+        %341:f32 = load_vector_element %340, 1u
+        store %338, %341
+        %342:u32 = load %firstVertex
+        %343:u32 = mul %342, 3u
+        %344:u32 = load %i_3
+        %345:u32 = mul %344, 3u
+        %346:u32 = add %343, %345
+        %347:u32 = add %346, 2u
+        %348:ptr<storage, f32, read_write> = access %positionsOut, 0u, %347
+        %349:u32 = load %i_3
+        %350:ptr<private, vec3<f32>, read_write> = access %positions, %349
+        %351:f32 = load_vector_element %350, 2u
+        store %348, %351
+        %352:u32 = load %firstVertex
+        %353:u32 = mul %352, 3u
+        %354:u32 = load %i_3
+        %355:u32 = mul %354, 3u
+        %356:u32 = add %353, %355
+        %357:ptr<storage, f32, read_write> = access %normalsOut, 0u, %356
+        %358:u32 = load %i_3
+        %359:ptr<private, vec3<f32>, read_write> = access %normals, %358
+        %360:f32 = load_vector_element %359, 0u
+        store %357, %360
+        %361:u32 = load %firstVertex
+        %362:u32 = mul %361, 3u
+        %363:u32 = load %i_3
+        %364:u32 = mul %363, 3u
+        %365:u32 = add %362, %364
+        %366:u32 = add %365, 1u
+        %367:ptr<storage, f32, read_write> = access %normalsOut, 0u, %366
+        %368:u32 = load %i_3
+        %369:ptr<private, vec3<f32>, read_write> = access %normals, %368
+        %370:f32 = load_vector_element %369, 1u
+        store %367, %370
+        %371:u32 = load %firstVertex
+        %372:u32 = mul %371, 3u
+        %373:u32 = load %i_3
+        %374:u32 = mul %373, 3u
+        %375:u32 = add %372, %374
+        %376:u32 = add %375, 2u
+        %377:ptr<storage, f32, read_write> = access %normalsOut, 0u, %376
+        %378:u32 = load %i_3
+        %379:ptr<private, vec3<f32>, read_write> = access %normals, %378
+        %380:f32 = load_vector_element %379, 2u
+        store %377, %380
+        continue  # -> $B32
+      }
+      $B32: {  # continuing
+        %381:u32 = load %i_3
+        %382:u32 = add %381, 1u
+        store %i_3, %382
+        next_iteration  # -> $B31
       }
     }
-    loop [i: %b35, b: %b36, c: %b37] {  # loop_2
-      %b35 = block {  # initializer
+    loop [i: $B35, b: $B36, c: $B37] {  # loop_2
+      $B35: {  # initializer
         %i_4:ptr<function, u32, read_write> = var, 0u  # %i_4: 'i'
-        next_iteration %b36
+        next_iteration  # -> $B36
       }
-      %b36 = block {  # body
-        %337:u32 = load %i_4
-        %338:bool = lt %337, %indexCount
-        if %338 [t: %b38, f: %b39] {  # if_23
-          %b38 = block {  # true
+      $B36: {  # body
+        %384:u32 = load %i_4
+        %385:bool = lt %384, %indexCount
+        if %385 [t: $B38, f: $B39] {  # if_23
+          $B38: {  # true
             exit_if  # if_23
           }
-          %b39 = block {  # false
+          $B39: {  # false
             exit_loop  # loop_2
           }
         }
-        %339:u32 = load %i_4
-        %340:u32 = add %triTableOffset, %339
-        %341:ptr<storage, i32, read> = access %tables, 1u, %340
-        %index_6:i32 = load %341  # %index_6: 'index'
-        %343:u32 = load %i_4
-        %344:u32 = add %firstIndex, %343
-        %345:ptr<storage, u32, read_write> = access %indicesOut, 0u, %344
-        %346:u32 = load %firstVertex
-        %347:ptr<private, u32, read_write> = access %indices, %index_6
-        %348:u32 = load %347
-        %349:u32 = add %346, %348
-        store %345, %349
-        continue %b37
+        %386:u32 = load %i_4
+        %387:u32 = add %triTableOffset, %386
+        %388:ptr<storage, i32, read> = access %tables, 1u, %387
+        %389:i32 = load %388
+        %index_6:i32 = let %389  # %index_6: 'index'
+        %391:u32 = load %i_4
+        %392:u32 = add %firstIndex, %391
+        %393:ptr<storage, u32, read_write> = access %indicesOut, 0u, %392
+        %394:u32 = load %firstVertex
+        %395:ptr<private, u32, read_write> = access %indices, %index_6
+        %396:u32 = load %395
+        %397:u32 = add %394, %396
+        store %393, %397
+        continue  # -> $B37
       }
-      %b37 = block {  # continuing
-        %350:u32 = load %i_4
-        %351:u32 = add %350, 1u
-        store %i_4, %351
-        next_iteration %b36
+      $B37: {  # continuing
+        %398:u32 = load %i_4
+        %399:u32 = add %398, 1u
+        store %i_4, %399
+        next_iteration  # -> $B36
       }
     }
-    loop [i: %b40, b: %b41, c: %b42] {  # loop_3
-      %b40 = block {  # initializer
+    loop [i: $B40, b: $B41, c: $B42] {  # loop_3
+      $B40: {  # initializer
         %i_5:ptr<function, u32, read_write> = var, %indexCount  # %i_5: 'i'
-        next_iteration %b41
+        next_iteration  # -> $B41
       }
-      %b41 = block {  # body
-        %353:u32 = load %i_5
-        %354:bool = lt %353, 15u
-        if %354 [t: %b43, f: %b44] {  # if_24
-          %b43 = block {  # true
+      $B41: {  # body
+        %401:u32 = load %i_5
+        %402:bool = lt %401, 15u
+        if %402 [t: $B43, f: $B44] {  # if_24
+          $B43: {  # true
             exit_if  # if_24
           }
-          %b44 = block {  # false
+          $B44: {  # false
             exit_loop  # loop_3
           }
         }
-        %355:u32 = load %i_5
-        %356:u32 = add %firstIndex, %355
-        %357:ptr<storage, u32, read_write> = access %indicesOut, 0u, %356
-        %358:u32 = load %firstVertex
-        store %357, %358
-        continue %b42
+        %403:u32 = load %i_5
+        %404:u32 = add %firstIndex, %403
+        %405:ptr<storage, u32, read_write> = access %indicesOut, 0u, %404
+        %406:u32 = load %firstVertex
+        store %405, %406
+        continue  # -> $B42
       }
-      %b42 = block {  # continuing
-        %359:u32 = load %i_5
-        %360:u32 = add %359, 1u
-        store %i_5, %360
-        next_iteration %b41
+      $B42: {  # continuing
+        %407:u32 = load %i_5
+        %408:u32 = add %407, 1u
+        store %i_5, %408
+        next_iteration  # -> $B41
       }
     }
     ret
diff --git a/test/tint/benchmark/particles.wgsl.expected.ir.msl b/test/tint/benchmark/particles.wgsl.expected.ir.msl
index 7341342..f169ea5 100644
--- a/test/tint/benchmark/particles.wgsl.expected.ir.msl
+++ b/test/tint/benchmark/particles.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: RenderParams = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: RenderParams = struct @align(16) {
   modelViewProjectionMatrix:mat4x4<f32> @offset(0)
   right:vec3<f32> @offset(64)
   up:vec3<f32> @offset(80)
@@ -42,7 +42,7 @@
   weights:array<f32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %rand_seed:ptr<private, vec2<f32>, read_write> = var
   %render_params:ptr<uniform, RenderParams, read> = var @binding_point(0, 0)
   %sim_params:ptr<uniform, SimulationParams, read> = var @binding_point(0, 0)
@@ -55,8 +55,8 @@
   %tex_out:ptr<handle, texture_storage_2d<rgba8unorm, write>, read> = var @binding_point(0, 7)
 }
 
-%rand = func():f32 -> %b2 {
-  %b2 = block {
+%rand = func():f32 {
+  $B2: {
     %12:vec2<f32> = load %rand_seed
     %13:f32 = dot %12, vec2<f32>(23.1407794952392578125f, 232.6168975830078125f)
     %14:f32 = cos %13
@@ -73,8 +73,8 @@
     ret %22
   }
 }
-%vs_main = @vertex func(%in:VertexInput):VertexOutput -> %b3 {
-  %b3 = block {
+%vs_main = @vertex func(%in:VertexInput):VertexOutput {
+  $B3: {
     %25:ptr<uniform, vec3<f32>, read> = access %render_params, 1u
     %26:vec3<f32> = load %25
     %27:ptr<uniform, vec3<f32>, read> = access %render_params, 2u
@@ -92,268 +92,306 @@
     %39:ptr<function, vec4<f32>, read_write> = access %out, 0u
     %40:ptr<uniform, mat4x4<f32>, read> = access %render_params, 0u
     %41:mat4x4<f32> = load %40
-    %42:vec3<f32> = load %position
-    %43:vec4<f32> = construct %42, 1.0f
-    %44:vec4<f32> = mul %41, %43
-    store %39, %44
-    %45:ptr<function, vec4<f32>, read_write> = access %out, 1u
-    %46:vec4<f32> = access %in, 1u
-    store %45, %46
-    %47:ptr<function, vec2<f32>, read_write> = access %out, 2u
-    %48:vec2<f32> = access %in, 2u
-    store %47, %48
-    %49:VertexOutput = load %out
-    ret %49
+    %42:mat4x4<f32> = let %41
+    %43:vec3<f32> = load %position
+    %44:vec4<f32> = construct %43, 1.0f
+    %45:vec4<f32> = mul %42, %44
+    store %39, %45
+    %46:ptr<function, vec4<f32>, read_write> = access %out, 1u
+    %47:vec4<f32> = access %in, 1u
+    store %46, %47
+    %48:ptr<function, vec2<f32>, read_write> = access %out, 2u
+    %49:vec2<f32> = access %in, 2u
+    store %48, %49
+    %50:VertexOutput = load %out
+    ret %50
   }
 }
-%fs_main = @fragment func(%in_1:VertexOutput):vec4<f32> [@location(0)] -> %b4 {  # %in_1: 'in'
-  %b4 = block {
-    %52:vec4<f32> = access %in_1, 1u
-    %color:ptr<function, vec4<f32>, read_write> = var, %52
-    %54:f32 = load_vector_element %color, 3u
-    %55:vec2<f32> = access %in_1, 2u
-    %56:f32 = length %55
-    %57:f32 = sub 1.0f, %56
-    %58:f32 = max %57, 0.0f
-    %59:f32 = mul %54, %58
-    store_vector_element %color, 3u, %59
-    %60:vec4<f32> = load %color
-    ret %60
+%fs_main = @fragment func(%in_1:VertexOutput):vec4<f32> [@location(0)] {  # %in_1: 'in'
+  $B4: {
+    %53:vec4<f32> = access %in_1, 1u
+    %color:ptr<function, vec4<f32>, read_write> = var, %53
+    %55:f32 = load_vector_element %color, 3u
+    %56:f32 = let %55
+    %57:vec2<f32> = access %in_1, 2u
+    %58:f32 = length %57
+    %59:f32 = sub 1.0f, %58
+    %60:f32 = max %59, 0.0f
+    %61:f32 = mul %56, %60
+    store_vector_element %color, 3u, %61
+    %62:vec4<f32> = load %color
+    ret %62
   }
 }
-%simulate = @compute @workgroup_size(64, 1, 1) func(%GlobalInvocationID:vec3<u32> [@global_invocation_id]):void -> %b5 {
-  %b5 = block {
-    %63:ptr<uniform, vec4<f32>, read> = access %sim_params, 1u
-    %64:vec4<f32> = load %63
-    %65:vec2<f32> = swizzle %64, xy
-    %66:vec2<u32> = swizzle %GlobalInvocationID, xy
-    %67:vec2<f32> = convert %66
-    %68:vec2<f32> = add %65, %67
-    %69:ptr<uniform, vec4<f32>, read> = access %sim_params, 1u
-    %70:vec4<f32> = load %69
-    %71:vec2<f32> = swizzle %70, zw
-    %72:vec2<f32> = mul %68, %71
-    store %rand_seed, %72
-    %idx:u32 = access %GlobalInvocationID, 0u
-    %74:ptr<storage, Particle, read_write> = access %data, 0u, %idx
-    %75:Particle = load %74
-    %particle:ptr<function, Particle, read_write> = var, %75
-    %77:ptr<function, vec3<f32>, read_write> = access %particle, 3u
-    %78:ptr<function, vec3<f32>, read_write> = access %particle, 3u
-    %79:f32 = load_vector_element %78, 2u
-    %80:ptr<uniform, f32, read> = access %sim_params, 0u
-    %81:f32 = load %80
-    %82:f32 = mul %81, 0.5f
-    %83:f32 = sub %79, %82
-    store_vector_element %77, 2u, %83
-    %84:ptr<function, vec3<f32>, read_write> = access %particle, 0u
-    %85:ptr<function, vec3<f32>, read_write> = access %particle, 0u
-    %86:vec3<f32> = load %85
-    %87:ptr<uniform, f32, read> = access %sim_params, 0u
-    %88:f32 = load %87
-    %89:ptr<function, vec3<f32>, read_write> = access %particle, 3u
+%simulate = @compute @workgroup_size(64, 1, 1) func(%GlobalInvocationID:vec3<u32> [@global_invocation_id]):void {
+  $B5: {
+    %65:ptr<uniform, vec4<f32>, read> = access %sim_params, 1u
+    %66:vec4<f32> = load %65
+    %67:vec2<f32> = swizzle %66, xy
+    %68:vec2<f32> = let %67
+    %69:vec2<u32> = swizzle %GlobalInvocationID, xy
+    %70:vec2<f32> = convert %69
+    %71:vec2<f32> = add %68, %70
+    %72:ptr<uniform, vec4<f32>, read> = access %sim_params, 1u
+    %73:vec4<f32> = load %72
+    %74:vec2<f32> = swizzle %73, zw
+    %75:vec2<f32> = mul %71, %74
+    store %rand_seed, %75
+    %76:u32 = access %GlobalInvocationID, 0u
+    %idx:u32 = let %76
+    %78:ptr<storage, Particle, read_write> = access %data, 0u, %idx
+    %79:Particle = load %78
+    %particle:ptr<function, Particle, read_write> = var, %79
+    %81:ptr<function, vec3<f32>, read_write> = access %particle, 3u
+    %82:ptr<function, vec3<f32>, read_write> = access %particle, 3u
+    %83:f32 = load_vector_element %82, 2u
+    %84:ptr<uniform, f32, read> = access %sim_params, 0u
+    %85:f32 = load %84
+    %86:f32 = mul %85, 0.5f
+    %87:f32 = sub %83, %86
+    store_vector_element %81, 2u, %87
+    %88:ptr<function, vec3<f32>, read_write> = access %particle, 0u
+    %89:ptr<function, vec3<f32>, read_write> = access %particle, 0u
     %90:vec3<f32> = load %89
-    %91:vec3<f32> = mul %88, %90
-    %92:vec3<f32> = add %86, %91
-    store %84, %92
-    %93:ptr<function, f32, read_write> = access %particle, 1u
-    %94:ptr<function, f32, read_write> = access %particle, 1u
-    %95:f32 = load %94
-    %96:ptr<uniform, f32, read> = access %sim_params, 0u
-    %97:f32 = load %96
-    %98:f32 = sub %95, %97
-    store %93, %98
-    %99:ptr<function, vec4<f32>, read_write> = access %particle, 2u
-    %100:ptr<function, f32, read_write> = access %particle, 1u
+    %91:ptr<uniform, f32, read> = access %sim_params, 0u
+    %92:f32 = load %91
+    %93:ptr<function, vec3<f32>, read_write> = access %particle, 3u
+    %94:vec3<f32> = load %93
+    %95:vec3<f32> = mul %92, %94
+    %96:vec3<f32> = add %90, %95
+    store %88, %96
+    %97:ptr<function, f32, read_write> = access %particle, 1u
+    %98:ptr<function, f32, read_write> = access %particle, 1u
+    %99:f32 = load %98
+    %100:ptr<uniform, f32, read> = access %sim_params, 0u
     %101:f32 = load %100
-    %102:f32 = smoothstep 0.0f, 0.5f, %101
-    store_vector_element %99, 3u, %102
-    %103:ptr<function, f32, read_write> = access %particle, 1u
-    %104:f32 = load %103
-    %105:bool = lt %104, 0.0f
-    if %105 [t: %b6] {  # if_1
-      %b6 = block {  # true
+    %102:f32 = sub %99, %101
+    store %97, %102
+    %103:ptr<function, vec4<f32>, read_write> = access %particle, 2u
+    %104:ptr<function, f32, read_write> = access %particle, 1u
+    %105:f32 = load %104
+    %106:f32 = smoothstep 0.0f, 0.5f, %105
+    store_vector_element %103, 3u, %106
+    %107:ptr<function, f32, read_write> = access %particle, 1u
+    %108:f32 = load %107
+    %109:bool = lt %108, 0.0f
+    if %109 [t: $B6] {  # if_1
+      $B6: {  # true
         %coord:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(0u)
-        loop [i: %b7, b: %b8, c: %b9] {  # loop_1
-          %b7 = block {  # initializer
-            %107:texture_2d<f32> = load %tint_symbol
-            %108:u32 = textureNumLevels %107
-            %109:u32 = sub %108, 1u
-            %level:ptr<function, u32, read_write> = var, %109
-            next_iteration %b8
+        loop [i: $B7, b: $B8, c: $B9] {  # loop_1
+          $B7: {  # initializer
+            %111:texture_2d<f32> = load %tint_symbol
+            %112:u32 = textureNumLevels %111
+            %113:u32 = sub %112, 1u
+            %level:ptr<function, u32, read_write> = var, %113
+            next_iteration  # -> $B8
           }
-          %b8 = block {  # body
-            %111:u32 = load %level
-            %112:bool = gt %111, 0u
-            if %112 [t: %b10, f: %b11] {  # if_2
-              %b10 = block {  # true
+          $B8: {  # body
+            %115:u32 = load %level
+            %116:bool = gt %115, 0u
+            if %116 [t: $B10, f: $B11] {  # if_2
+              $B10: {  # true
                 exit_if  # if_2
               }
-              %b11 = block {  # false
+              $B11: {  # false
                 exit_loop  # loop_1
               }
             }
-            %113:texture_2d<f32> = load %tint_symbol
-            %114:vec2<u32> = load %coord
-            %115:u32 = load %level
-            %probabilites:vec4<f32> = textureLoad %113, %114, %115
-            %117:f32 = call %rand
-            %value:vec4<f32> = construct %117
-            %119:vec3<f32> = swizzle %probabilites, xyz
-            %120:vec4<f32> = construct 0.0f, %119
-            %121:vec4<bool> = gte %value, %120
-            %122:vec4<bool> = lt %value, %probabilites
-            %mask:vec4<bool> = and %121, %122
-            %124:vec2<u32> = load %coord
-            %125:vec2<u32> = mul %124, 2u
-            store %coord, %125
-            %126:vec2<bool> = swizzle %mask, yw
-            %127:bool = any %126
-            %128:u32 = select 0u, 1u, %127
-            %129:u32 = load_vector_element %coord, 0u
-            %130:u32 = add %129, %128
-            store_vector_element %coord, 0u, %130
-            %131:vec2<bool> = swizzle %mask, zw
-            %132:bool = any %131
-            %133:u32 = select 0u, 1u, %132
-            %134:u32 = load_vector_element %coord, 1u
-            %135:u32 = add %134, %133
-            store_vector_element %coord, 1u, %135
-            continue %b9
+            %117:texture_2d<f32> = load %tint_symbol
+            %118:vec2<u32> = load %coord
+            %119:u32 = load %level
+            %120:vec4<f32> = textureLoad %117, %118, %119
+            %probabilites:vec4<f32> = let %120
+            %122:f32 = call %rand
+            %123:vec4<f32> = construct %122
+            %value:vec4<f32> = let %123
+            %125:vec3<f32> = swizzle %probabilites, xyz
+            %126:vec4<f32> = construct 0.0f, %125
+            %127:vec4<bool> = gte %value, %126
+            %128:vec4<bool> = lt %value, %probabilites
+            %129:vec4<bool> = and %127, %128
+            %mask:vec4<bool> = let %129
+            %131:vec2<u32> = load %coord
+            %132:vec2<u32> = mul %131, 2u
+            store %coord, %132
+            %133:vec2<bool> = swizzle %mask, yw
+            %134:bool = any %133
+            %135:u32 = select 0u, 1u, %134
+            %136:u32 = load_vector_element %coord, 0u
+            %137:u32 = add %136, %135
+            store_vector_element %coord, 0u, %137
+            %138:vec2<bool> = swizzle %mask, zw
+            %139:bool = any %138
+            %140:u32 = select 0u, 1u, %139
+            %141:u32 = load_vector_element %coord, 1u
+            %142:u32 = add %141, %140
+            store_vector_element %coord, 1u, %142
+            continue  # -> $B9
           }
-          %b9 = block {  # continuing
-            %136:u32 = load %level
-            %137:u32 = sub %136, 1u
-            store %level, %137
-            next_iteration %b8
+          $B9: {  # continuing
+            %143:u32 = load %level
+            %144:u32 = sub %143, 1u
+            store %level, %144
+            next_iteration  # -> $B8
           }
         }
-        %138:vec2<u32> = load %coord
-        %139:vec2<f32> = convert %138
-        %140:texture_2d<f32> = load %tint_symbol
-        %141:vec2<u32> = textureDimensions %140
-        %142:vec2<f32> = convert %141
-        %uv:vec2<f32> = div %139, %142
-        %144:ptr<function, vec3<f32>, read_write> = access %particle, 0u
-        %145:vec2<f32> = sub %uv, 0.5f
-        %146:vec2<f32> = mul %145, 3.0f
-        %147:vec2<f32> = mul %146, vec2<f32>(1.0f, -1.0f)
-        %148:vec3<f32> = construct %147, 0.0f
-        store %144, %148
-        %149:ptr<function, vec4<f32>, read_write> = access %particle, 2u
-        %150:texture_2d<f32> = load %tint_symbol
-        %151:vec2<u32> = load %coord
-        %152:vec4<f32> = textureLoad %150, %151, 0i
-        store %149, %152
-        %153:ptr<function, vec3<f32>, read_write> = access %particle, 3u
-        %154:f32 = call %rand
-        %155:f32 = sub %154, 0.5f
-        %156:f32 = mul %155, 0.10000000149011611938f
-        store_vector_element %153, 0u, %156
-        %157:ptr<function, vec3<f32>, read_write> = access %particle, 3u
-        %158:f32 = call %rand
-        %159:f32 = sub %158, 0.5f
-        %160:f32 = mul %159, 0.10000000149011611938f
-        store_vector_element %157, 1u, %160
-        %161:ptr<function, vec3<f32>, read_write> = access %particle, 3u
-        %162:f32 = call %rand
-        %163:f32 = mul %162, 0.30000001192092895508f
-        store_vector_element %161, 2u, %163
-        %164:ptr<function, f32, read_write> = access %particle, 1u
-        %165:f32 = call %rand
-        %166:f32 = mul %165, 2.0f
-        %167:f32 = add 0.5f, %166
-        store %164, %167
+        %145:vec2<u32> = load %coord
+        %146:vec2<f32> = convert %145
+        %147:vec2<f32> = let %146
+        %148:texture_2d<f32> = load %tint_symbol
+        %149:vec2<u32> = textureDimensions %148
+        %150:vec2<f32> = convert %149
+        %151:vec2<f32> = div %147, %150
+        %uv:vec2<f32> = let %151
+        %153:ptr<function, vec3<f32>, read_write> = access %particle, 0u
+        %154:vec2<f32> = sub %uv, 0.5f
+        %155:vec2<f32> = mul %154, 3.0f
+        %156:vec2<f32> = mul %155, vec2<f32>(1.0f, -1.0f)
+        %157:vec3<f32> = construct %156, 0.0f
+        store %153, %157
+        %158:ptr<function, vec4<f32>, read_write> = access %particle, 2u
+        %159:texture_2d<f32> = load %tint_symbol
+        %160:vec2<u32> = load %coord
+        %161:vec4<f32> = textureLoad %159, %160, 0i
+        store %158, %161
+        %162:ptr<function, vec3<f32>, read_write> = access %particle, 3u
+        %163:f32 = call %rand
+        %164:f32 = sub %163, 0.5f
+        %165:f32 = mul %164, 0.10000000149011611938f
+        store_vector_element %162, 0u, %165
+        %166:ptr<function, vec3<f32>, read_write> = access %particle, 3u
+        %167:f32 = call %rand
+        %168:f32 = sub %167, 0.5f
+        %169:f32 = mul %168, 0.10000000149011611938f
+        store_vector_element %166, 1u, %169
+        %170:ptr<function, vec3<f32>, read_write> = access %particle, 3u
+        %171:f32 = call %rand
+        %172:f32 = mul %171, 0.30000001192092895508f
+        store_vector_element %170, 2u, %172
+        %173:ptr<function, f32, read_write> = access %particle, 1u
+        %174:f32 = call %rand
+        %175:f32 = mul %174, 2.0f
+        %176:f32 = add 0.5f, %175
+        store %173, %176
         exit_if  # if_1
       }
     }
-    %168:ptr<storage, Particle, read_write> = access %data, 0u, %idx
-    %169:Particle = load %particle
-    store %168, %169
+    %177:ptr<storage, Particle, read_write> = access %data, 0u, %idx
+    %178:Particle = load %particle
+    %179:void = call %tint_store_and_preserve_padding, %177, %178
     ret
   }
 }
-%import_level = @compute @workgroup_size(64, 1, 1) func(%coord_1:vec3<u32> [@global_invocation_id]):void -> %b12 {  # %coord_1: 'coord'
-  %b12 = block {
-    %172:u32 = access %coord_1, 0u
-    %173:u32 = access %coord_1, 1u
-    %174:ptr<uniform, u32, read> = access %ubo, 0u
-    %175:u32 = load %174
-    %176:u32 = mul %173, %175
-    %offset:u32 = add %172, %176
-    %178:ptr<storage, f32, read_write> = access %buf_out, 0u, %offset
-    %179:texture_2d<f32> = load %tex_in
-    %180:vec2<u32> = swizzle %coord_1, xy
-    %181:vec2<i32> = convert %180
-    %182:vec4<f32> = textureLoad %179, %181, 0i
-    %183:f32 = access %182, 3u
-    store %178, %183
+%import_level = @compute @workgroup_size(64, 1, 1) func(%coord_1:vec3<u32> [@global_invocation_id]):void {  # %coord_1: 'coord'
+  $B12: {
+    %183:u32 = access %coord_1, 0u
+    %184:u32 = access %coord_1, 1u
+    %185:ptr<uniform, u32, read> = access %ubo, 0u
+    %186:u32 = load %185
+    %187:u32 = mul %184, %186
+    %188:u32 = add %183, %187
+    %offset:u32 = let %188
+    %190:ptr<storage, f32, read_write> = access %buf_out, 0u, %offset
+    %191:texture_2d<f32> = load %tex_in
+    %192:texture_2d<f32> = let %191
+    %193:vec2<u32> = swizzle %coord_1, xy
+    %194:vec2<i32> = convert %193
+    %195:vec4<f32> = textureLoad %192, %194, 0i
+    %196:f32 = access %195, 3u
+    store %190, %196
     ret
   }
 }
-%export_level = @compute @workgroup_size(64, 1, 1) func(%coord_2:vec3<u32> [@global_invocation_id]):void -> %b13 {  # %coord_2: 'coord'
-  %b13 = block {
-    %186:vec2<u32> = swizzle %coord_2, xy
-    %187:texture_storage_2d<rgba8unorm, write> = load %tex_out
-    %188:vec2<u32> = textureDimensions %187
-    %189:vec2<u32> = construct %188
-    %190:vec2<bool> = lt %186, %189
-    %191:bool = all %190
-    if %191 [t: %b14] {  # if_3
-      %b14 = block {  # true
-        %192:u32 = access %coord_2, 0u
-        %193:u32 = access %coord_2, 1u
-        %194:ptr<uniform, u32, read> = access %ubo, 0u
-        %195:u32 = load %194
-        %196:u32 = mul %193, %195
-        %dst_offset:u32 = add %192, %196
-        %198:u32 = access %coord_2, 0u
-        %199:u32 = mul %198, 2u
-        %200:u32 = access %coord_2, 1u
-        %201:u32 = mul %200, 2u
-        %202:ptr<uniform, u32, read> = access %ubo, 0u
-        %203:u32 = load %202
-        %204:u32 = mul %201, %203
-        %src_offset:u32 = add %199, %204
-        %206:u32 = add %src_offset, 0u
-        %207:ptr<storage, f32, read> = access %buf_in, 0u, %206
-        %a:f32 = load %207
-        %209:u32 = add %src_offset, 1u
-        %210:ptr<storage, f32, read> = access %buf_in, 0u, %209
-        %b:f32 = load %210
-        %212:u32 = add %src_offset, 0u
-        %213:ptr<uniform, u32, read> = access %ubo, 0u
-        %214:u32 = load %213
-        %215:u32 = add %212, %214
-        %216:ptr<storage, f32, read> = access %buf_in, 0u, %215
-        %c:f32 = load %216
-        %218:u32 = add %src_offset, 1u
-        %219:ptr<uniform, u32, read> = access %ubo, 0u
-        %220:u32 = load %219
-        %221:u32 = add %218, %220
+%export_level = @compute @workgroup_size(64, 1, 1) func(%coord_2:vec3<u32> [@global_invocation_id]):void {  # %coord_2: 'coord'
+  $B13: {
+    %199:vec2<u32> = swizzle %coord_2, xy
+    %200:texture_storage_2d<rgba8unorm, write> = load %tex_out
+    %201:vec2<u32> = textureDimensions %200
+    %202:vec2<u32> = construct %201
+    %203:vec2<bool> = lt %199, %202
+    %204:bool = all %203
+    if %204 [t: $B14] {  # if_3
+      $B14: {  # true
+        %205:u32 = access %coord_2, 0u
+        %206:u32 = access %coord_2, 1u
+        %207:ptr<uniform, u32, read> = access %ubo, 0u
+        %208:u32 = load %207
+        %209:u32 = mul %206, %208
+        %210:u32 = add %205, %209
+        %dst_offset:u32 = let %210
+        %212:u32 = access %coord_2, 0u
+        %213:u32 = mul %212, 2u
+        %214:u32 = access %coord_2, 1u
+        %215:u32 = mul %214, 2u
+        %216:ptr<uniform, u32, read> = access %ubo, 0u
+        %217:u32 = load %216
+        %218:u32 = mul %215, %217
+        %219:u32 = add %213, %218
+        %src_offset:u32 = let %219
+        %221:u32 = add %src_offset, 0u
         %222:ptr<storage, f32, read> = access %buf_in, 0u, %221
-        %d:f32 = load %222
-        %224:vec4<f32> = construct %a, %b, %c, %d
-        %sum:f32 = dot %224, vec4<f32>(1.0f)
-        %226:ptr<storage, f32, read_write> = access %buf_out, 0u, %dst_offset
-        %227:f32 = div %sum, 4.0f
-        store %226, %227
-        %228:f32 = add %a, %b
-        %229:f32 = add %a, %b
-        %230:f32 = add %229, %c
-        %231:vec4<f32> = construct %a, %228, %230, %sum
-        %232:f32 = max %sum, 0.00009999999747378752f
-        %probabilities:vec4<f32> = div %231, %232
-        %234:texture_storage_2d<rgba8unorm, write> = load %tex_out
-        %235:vec2<u32> = swizzle %coord_2, xy
-        %236:vec2<i32> = convert %235
-        %237:void = textureStore %234, %236, %probabilities
+        %223:f32 = load %222
+        %a:f32 = let %223
+        %225:u32 = add %src_offset, 1u
+        %226:ptr<storage, f32, read> = access %buf_in, 0u, %225
+        %227:f32 = load %226
+        %b:f32 = let %227
+        %229:u32 = add %src_offset, 0u
+        %230:ptr<uniform, u32, read> = access %ubo, 0u
+        %231:u32 = load %230
+        %232:u32 = add %229, %231
+        %233:ptr<storage, f32, read> = access %buf_in, 0u, %232
+        %234:f32 = load %233
+        %c:f32 = let %234
+        %236:u32 = add %src_offset, 1u
+        %237:ptr<uniform, u32, read> = access %ubo, 0u
+        %238:u32 = load %237
+        %239:u32 = add %236, %238
+        %240:ptr<storage, f32, read> = access %buf_in, 0u, %239
+        %241:f32 = load %240
+        %d:f32 = let %241
+        %243:vec4<f32> = construct %a, %b, %c, %d
+        %244:f32 = dot %243, vec4<f32>(1.0f)
+        %sum:f32 = let %244
+        %246:ptr<storage, f32, read_write> = access %buf_out, 0u, %dst_offset
+        %247:f32 = div %sum, 4.0f
+        store %246, %247
+        %248:f32 = add %a, %b
+        %249:f32 = add %a, %b
+        %250:f32 = add %249, %c
+        %251:vec4<f32> = construct %a, %248, %250, %sum
+        %252:vec4<f32> = let %251
+        %253:f32 = max %sum, 0.00009999999747378752f
+        %254:vec4<f32> = div %252, %253
+        %probabilities:vec4<f32> = let %254
+        %256:texture_storage_2d<rgba8unorm, write> = load %tex_out
+        %257:texture_storage_2d<rgba8unorm, write> = let %256
+        %258:vec2<u32> = swizzle %coord_2, xy
+        %259:vec2<i32> = convert %258
+        %260:void = textureStore %257, %259, %probabilities
         exit_if  # if_3
       }
     }
     ret
   }
 }
+%tint_store_and_preserve_padding = func(%target:ptr<storage, Particle, read_write>, %value_param:Particle):void {
+  $B15: {
+    %263:ptr<storage, vec3<f32>, read_write> = access %target, 0u
+    %264:vec3<f32> = access %value_param, 0u
+    store %263, %264
+    %265:ptr<storage, f32, read_write> = access %target, 1u
+    %266:f32 = access %value_param, 1u
+    store %265, %266
+    %267:ptr<storage, vec4<f32>, read_write> = access %target, 2u
+    %268:vec4<f32> = access %value_param, 2u
+    store %267, %268
+    %269:ptr<storage, vec3<f32>, read_write> = access %target, 3u
+    %270:vec3<f32> = access %value_param, 3u
+    store %269, %270
+    ret
+  }
+}
 
 unhandled variable address space
 ********************************************************************
diff --git a/test/tint/benchmark/shadow-fragment.wgsl.expected.ir.msl b/test/tint/benchmark/shadow-fragment.wgsl.expected.ir.msl
index afabeb9..132aa68 100644
--- a/test/tint/benchmark/shadow-fragment.wgsl.expected.ir.msl
+++ b/test/tint/benchmark/shadow-fragment.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Scene = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Scene = struct @align(16) {
   lightViewProjMatrix:mat4x4<f32> @offset(0)
   cameraViewProjMatrix:mat4x4<f32> @offset(64)
   lightPos:vec3<f32> @offset(128)
@@ -12,102 +12,107 @@
   fragNorm:vec3<f32> @offset(32), @location(2)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %scene:ptr<uniform, Scene, read> = var @binding_point(0, 0)
   %shadowMap:ptr<handle, texture_depth_2d, read> = var @binding_point(0, 1)
   %shadowSampler:ptr<handle, sampler_comparison, read> = var @binding_point(0, 2)
 }
 
-%tint_symbol = @fragment func(%input:FragmentInput):vec4<f32> [@location(0)] -> %b2 {
-  %b2 = block {
+%tint_symbol = @fragment func(%input:FragmentInput):vec4<f32> [@location(0)] {
+  $B2: {
     %visibility:ptr<function, f32, read_write> = var, 0.0f
     %oneOverShadowDepthTextureSize:f32 = let 0.0009765625f
-    loop [i: %b3, b: %b4, c: %b5] {  # loop_1
-      %b3 = block {  # initializer
+    loop [i: $B3, b: $B4, c: $B5] {  # loop_1
+      $B3: {  # initializer
         %y:ptr<function, i32, read_write> = var, -1i
-        next_iteration %b4
+        next_iteration  # -> $B4
       }
-      %b4 = block {  # body
+      $B4: {  # body
         %9:i32 = load %y
         %10:bool = lte %9, 1i
-        if %10 [t: %b6, f: %b7] {  # if_1
-          %b6 = block {  # true
+        if %10 [t: $B6, f: $B7] {  # if_1
+          $B6: {  # true
             exit_if  # if_1
           }
-          %b7 = block {  # false
+          $B7: {  # false
             exit_loop  # loop_1
           }
         }
-        loop [i: %b8, b: %b9, c: %b10] {  # loop_2
-          %b8 = block {  # initializer
+        loop [i: $B8, b: $B9, c: $B10] {  # loop_2
+          $B8: {  # initializer
             %x:ptr<function, i32, read_write> = var, -1i
-            next_iteration %b9
+            next_iteration  # -> $B9
           }
-          %b9 = block {  # body
+          $B9: {  # body
             %12:i32 = load %x
             %13:bool = lte %12, 1i
-            if %13 [t: %b11, f: %b12] {  # if_2
-              %b11 = block {  # true
+            if %13 [t: $B11, f: $B12] {  # if_2
+              $B11: {  # true
                 exit_if  # if_2
               }
-              %b12 = block {  # false
+              $B12: {  # false
                 exit_loop  # loop_2
               }
             }
             %14:i32 = load %x
             %15:f32 = convert %14
             %16:f32 = mul %15, %oneOverShadowDepthTextureSize
-            %17:i32 = load %y
-            %18:f32 = convert %17
-            %19:f32 = mul %18, %oneOverShadowDepthTextureSize
-            %offset:vec2<f32> = construct %16, %19
-            %21:f32 = load %visibility
-            %22:texture_depth_2d = load %shadowMap
-            %23:sampler_comparison = load %shadowSampler
-            %24:vec3<f32> = access %input, 0u
-            %25:vec2<f32> = swizzle %24, xy
-            %26:vec2<f32> = add %25, %offset
-            %27:f32 = access %input, 0u, 2u
-            %28:f32 = sub %27, 0.00700000021606683731f
-            %29:f32 = textureSampleCompare %22, %23, %26, %28
-            %30:f32 = add %21, %29
-            store %visibility, %30
-            continue %b10
+            %17:f32 = let %16
+            %18:i32 = load %y
+            %19:f32 = convert %18
+            %20:f32 = mul %19, %oneOverShadowDepthTextureSize
+            %21:vec2<f32> = construct %17, %20
+            %offset:vec2<f32> = let %21
+            %23:f32 = load %visibility
+            %24:f32 = let %23
+            %25:texture_depth_2d = load %shadowMap
+            %26:sampler_comparison = load %shadowSampler
+            %27:vec3<f32> = access %input, 0u
+            %28:vec2<f32> = swizzle %27, xy
+            %29:vec2<f32> = add %28, %offset
+            %30:f32 = access %input, 0u, 2u
+            %31:f32 = sub %30, 0.00700000021606683731f
+            %32:f32 = textureSampleCompare %25, %26, %29, %31
+            %33:f32 = add %24, %32
+            store %visibility, %33
+            continue  # -> $B10
           }
-          %b10 = block {  # continuing
-            %31:i32 = load %x
-            %32:i32 = add %31, 1i
-            store %x, %32
-            next_iteration %b9
+          $B10: {  # continuing
+            %34:i32 = load %x
+            %35:i32 = add %34, 1i
+            store %x, %35
+            next_iteration  # -> $B9
           }
         }
-        continue %b5
+        continue  # -> $B5
       }
-      %b5 = block {  # continuing
-        %33:i32 = load %y
-        %34:i32 = add %33, 1i
-        store %y, %34
-        next_iteration %b4
+      $B5: {  # continuing
+        %36:i32 = load %y
+        %37:i32 = add %36, 1i
+        store %y, %37
+        next_iteration  # -> $B4
       }
     }
-    %35:f32 = load %visibility
-    %36:f32 = div %35, 9.0f
-    store %visibility, %36
-    %37:ptr<uniform, vec3<f32>, read> = access %scene, 2u
-    %38:vec3<f32> = load %37
-    %39:vec3<f32> = access %input, 1u
-    %40:vec3<f32> = sub %38, %39
-    %41:vec3<f32> = normalize %40
-    %42:vec3<f32> = access %input, 2u
-    %43:f32 = dot %41, %42
-    %lambertFactor:f32 = max %43, 0.0f
-    %45:f32 = load %visibility
-    %46:f32 = mul %45, %lambertFactor
-    %47:f32 = add 0.20000000298023223877f, %46
-    %lightingFactor:f32 = min %47, 1.0f
-    %49:vec3<f32> = mul %lightingFactor, vec3<f32>(0.89999997615814208984f)
-    %50:vec4<f32> = construct %49, 1.0f
-    ret %50
+    %38:f32 = load %visibility
+    %39:f32 = div %38, 9.0f
+    store %visibility, %39
+    %40:ptr<uniform, vec3<f32>, read> = access %scene, 2u
+    %41:vec3<f32> = load %40
+    %42:vec3<f32> = access %input, 1u
+    %43:vec3<f32> = sub %41, %42
+    %44:vec3<f32> = normalize %43
+    %45:vec3<f32> = access %input, 2u
+    %46:f32 = dot %44, %45
+    %47:f32 = max %46, 0.0f
+    %lambertFactor:f32 = let %47
+    %49:f32 = load %visibility
+    %50:f32 = mul %49, %lambertFactor
+    %51:f32 = add 0.20000000298023223877f, %50
+    %52:f32 = min %51, 1.0f
+    %lightingFactor:f32 = let %52
+    %54:vec3<f32> = mul %lightingFactor, vec3<f32>(0.89999997615814208984f)
+    %55:vec4<f32> = construct %54, 1.0f
+    ret %55
   }
 }
 
diff --git a/test/tint/benchmark/skinned-shadowed-pbr-fragment.wgsl.expected.ir.msl b/test/tint/benchmark/skinned-shadowed-pbr-fragment.wgsl.expected.ir.msl
index 804ef8d..0d672cf 100644
--- a/test/tint/benchmark/skinned-shadowed-pbr-fragment.wgsl.expected.ir.msl
+++ b/test/tint/benchmark/skinned-shadowed-pbr-fragment.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Camera = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Camera = struct @align(16) {
   projection:mat4x4<f32> @offset(0)
   inverseProjection:mat4x4<f32> @offset(64)
   view:mat4x4<f32> @offset(128)
@@ -97,7 +97,7 @@
   emissive:vec4<f32> @offset(16), @location(1)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %camera:ptr<uniform, Camera, read> = var @binding_point(0, 0)
   %clusterLights:ptr<storage, ClusterLightGroup, read> = var @binding_point(0, 1)
   %globalLights:ptr<storage, GlobalLights, read> = var @binding_point(0, 2)
@@ -121,728 +121,813 @@
   %ssaoTexture:ptr<handle, texture_2d<f32>, read> = var @binding_point(0, 19)
 }
 
-%linearTosRGB = func(%linear:vec3<f32>):vec3<f32> -> %b2 {
-  %b2 = block {
+%linearTosRGB = func(%linear:vec3<f32>):vec3<f32> {
+  $B2: {
     %INV_GAMMA:f32 = let 0.45454543828964233398f
     %25:vec3<f32> = construct %INV_GAMMA
     %26:vec3<f32> = pow %linear, %25
     ret %26
   }
 }
-%sRGBToLinear = func(%srgb:vec3<f32>):vec3<f32> -> %b3 {
-  %b3 = block {
+%sRGBToLinear = func(%srgb:vec3<f32>):vec3<f32> {
+  $B3: {
     %29:vec3<f32> = pow %srgb, vec3<f32>(2.20000004768371582031f)
     ret %29
   }
 }
-%linearDepth = func(%depthSample:f32):f32 -> %b4 {
-  %b4 = block {
+%linearDepth = func(%depthSample:f32):f32 {
+  $B4: {
     %32:ptr<uniform, f32, read> = access %camera, 7u
     %33:f32 = load %32
     %34:ptr<uniform, f32, read> = access %camera, 6u
     %35:f32 = load %34
     %36:f32 = mul %33, %35
-    %37:ptr<uniform, f32, read> = access %camera, 6u
-    %38:f32 = load %37
-    %39:ptr<uniform, f32, read> = access %camera, 7u
-    %40:f32 = load %39
-    %41:f32 = sub %38, %40
-    %42:ptr<uniform, f32, read> = access %camera, 7u
-    %43:f32 = load %42
-    %44:f32 = fma %depthSample, %41, %43
-    %45:f32 = div %36, %44
-    ret %45
+    %37:f32 = let %36
+    %38:ptr<uniform, f32, read> = access %camera, 6u
+    %39:f32 = load %38
+    %40:ptr<uniform, f32, read> = access %camera, 7u
+    %41:f32 = load %40
+    %42:f32 = sub %39, %41
+    %43:ptr<uniform, f32, read> = access %camera, 7u
+    %44:f32 = load %43
+    %45:f32 = fma %depthSample, %42, %44
+    %46:f32 = div %37, %45
+    ret %46
   }
 }
-%getTile = func(%fragCoord:vec4<f32>):vec3<u32> -> %b5 {
-  %b5 = block {
-    %48:ptr<uniform, f32, read> = access %camera, 7u
-    %49:f32 = load %48
-    %50:ptr<uniform, f32, read> = access %camera, 6u
-    %51:f32 = load %50
-    %52:f32 = div %49, %51
-    %53:f32 = log2 %52
-    %sliceScale:f32 = div 48.0f, %53
-    %55:ptr<uniform, f32, read> = access %camera, 6u
-    %56:f32 = load %55
-    %57:f32 = log2 %56
-    %58:f32 = mul 48.0f, %57
-    %59:ptr<uniform, f32, read> = access %camera, 7u
-    %60:f32 = load %59
-    %61:ptr<uniform, f32, read> = access %camera, 6u
-    %62:f32 = load %61
-    %63:f32 = div %60, %62
-    %64:f32 = log2 %63
-    %65:f32 = div %58, %64
-    %sliceBias:f32 = negation %65
-    %67:f32 = access %fragCoord, 2u
-    %68:f32 = call %linearDepth, %67
-    %69:f32 = log2 %68
-    %70:f32 = mul %69, %sliceScale
-    %71:f32 = add %70, %sliceBias
-    %72:f32 = max %71, 0.0f
-    %zTile:u32 = convert %72
-    %74:f32 = access %fragCoord, 0u
-    %75:ptr<uniform, vec2<f32>, read> = access %camera, 5u
-    %76:f32 = load_vector_element %75, 0u
-    %77:f32 = div %76, 32.0f
-    %78:f32 = div %74, %77
-    %79:u32 = convert %78
-    %80:f32 = access %fragCoord, 1u
+%getTile = func(%fragCoord:vec4<f32>):vec3<u32> {
+  $B5: {
+    %49:ptr<uniform, f32, read> = access %camera, 7u
+    %50:f32 = load %49
+    %51:ptr<uniform, f32, read> = access %camera, 6u
+    %52:f32 = load %51
+    %53:f32 = div %50, %52
+    %54:f32 = log2 %53
+    %55:f32 = div 48.0f, %54
+    %sliceScale:f32 = let %55
+    %57:ptr<uniform, f32, read> = access %camera, 6u
+    %58:f32 = load %57
+    %59:f32 = log2 %58
+    %60:f32 = mul 48.0f, %59
+    %61:f32 = let %60
+    %62:ptr<uniform, f32, read> = access %camera, 7u
+    %63:f32 = load %62
+    %64:ptr<uniform, f32, read> = access %camera, 6u
+    %65:f32 = load %64
+    %66:f32 = div %63, %65
+    %67:f32 = log2 %66
+    %68:f32 = div %61, %67
+    %69:f32 = negation %68
+    %sliceBias:f32 = let %69
+    %71:f32 = access %fragCoord, 2u
+    %72:f32 = call %linearDepth, %71
+    %73:f32 = log2 %72
+    %74:f32 = mul %73, %sliceScale
+    %75:f32 = add %74, %sliceBias
+    %76:f32 = max %75, 0.0f
+    %77:u32 = call %tint_f32_to_u32, %76
+    %zTile:u32 = let %77
+    %80:f32 = access %fragCoord, 0u
     %81:ptr<uniform, vec2<f32>, read> = access %camera, 5u
-    %82:f32 = load_vector_element %81, 1u
-    %83:f32 = div %82, 18.0f
+    %82:f32 = load_vector_element %81, 0u
+    %83:f32 = div %82, 32.0f
     %84:f32 = div %80, %83
-    %85:u32 = convert %84
-    %86:vec3<u32> = construct %79, %85, %zTile
-    ret %86
+    %85:u32 = call %tint_f32_to_u32, %84
+    %86:u32 = let %85
+    %87:f32 = access %fragCoord, 1u
+    %88:ptr<uniform, vec2<f32>, read> = access %camera, 5u
+    %89:f32 = load_vector_element %88, 1u
+    %90:f32 = div %89, 18.0f
+    %91:f32 = div %87, %90
+    %92:u32 = call %tint_f32_to_u32, %91
+    %93:vec3<u32> = construct %86, %92, %zTile
+    ret %93
   }
 }
-%getClusterIndex = func(%fragCoord_1:vec4<f32>):u32 -> %b6 {  # %fragCoord_1: 'fragCoord'
-  %b6 = block {
-    %tile:vec3<u32> = call %getTile, %fragCoord_1
-    %90:u32 = access %tile, 0u
-    %91:u32 = access %tile, 1u
-    %92:u32 = mul %91, 32u
-    %93:u32 = add %90, %92
-    %94:u32 = access %tile, 2u
-    %95:u32 = mul %94, 32u
-    %96:u32 = mul %95, 18u
-    %97:u32 = add %93, %96
-    ret %97
+%getClusterIndex = func(%fragCoord_1:vec4<f32>):u32 {  # %fragCoord_1: 'fragCoord'
+  $B6: {
+    %96:vec3<u32> = call %getTile, %fragCoord_1
+    %tile:vec3<u32> = let %96
+    %98:u32 = access %tile, 0u
+    %99:u32 = access %tile, 1u
+    %100:u32 = mul %99, 32u
+    %101:u32 = add %98, %100
+    %102:u32 = access %tile, 2u
+    %103:u32 = mul %102, 32u
+    %104:u32 = mul %103, 18u
+    %105:u32 = add %101, %104
+    ret %105
   }
 }
-%dirLightVisibility = func(%worldPos:vec3<f32>):f32 -> %b7 {
-  %b7 = block {
-    %100:ptr<storage, i32, read> = access %lightShadowTable, 0u, 0u
-    %shadowIndex:i32 = load %100
-    %102:bool = eq %shadowIndex, -1i
-    if %102 [t: %b8] {  # if_1
-      %b8 = block {  # true
+%dirLightVisibility = func(%worldPos:vec3<f32>):f32 {
+  $B7: {
+    %108:ptr<storage, i32, read> = access %lightShadowTable, 0u, 0u
+    %109:i32 = load %108
+    %shadowIndex:i32 = let %109
+    %111:bool = eq %shadowIndex, -1i
+    if %111 [t: $B8] {  # if_1
+      $B8: {  # true
         ret 1.0f
       }
     }
-    %103:ptr<storage, vec4<f32>, read> = access %shadow, 0u, %shadowIndex, 0u
-    %viewport:vec4<f32> = load %103
-    %105:ptr<storage, mat4x4<f32>, read> = access %shadow, 0u, %shadowIndex, 1u
-    %106:mat4x4<f32> = load %105
-    %107:vec4<f32> = construct %worldPos, 1.0f
-    %lightPos:vec4<f32> = mul %106, %107
-    %109:vec2<f32> = swizzle %lightPos, xy
-    %110:f32 = access %lightPos, 3u
-    %111:vec2<f32> = div %109, %110
-    %112:vec2<f32> = mul %111, vec2<f32>(0.5f, -0.5f)
-    %113:vec2<f32> = add %112, vec2<f32>(0.5f)
-    %114:f32 = access %lightPos, 2u
-    %115:f32 = access %lightPos, 3u
-    %116:f32 = div %114, %115
-    %shadowPos:vec3<f32> = construct %113, %116
-    %118:vec2<f32> = swizzle %viewport, xy
-    %119:vec2<f32> = swizzle %shadowPos, xy
-    %120:vec2<f32> = swizzle %viewport, zw
-    %121:vec2<f32> = mul %119, %120
-    %122:vec2<f32> = add %118, %121
-    %viewportPos:vec2<f32> = construct %122
-    %124:texture_depth_2d = load %shadowTexture
-    %125:vec2<u32> = textureDimensions %124, 0i
-    %126:vec2<f32> = convert %125
-    %texelSize:vec2<f32> = div 1.0f, %126
-    %128:vec2<f32> = swizzle %viewport, xy
-    %129:vec2<f32> = sub %128, %texelSize
-    %130:vec2<f32> = swizzle %viewport, xy
-    %131:vec2<f32> = swizzle %viewport, zw
-    %132:vec2<f32> = add %130, %131
-    %133:vec2<f32> = add %132, %texelSize
-    %clampRect:vec4<f32> = construct %129, %133
+    %112:ptr<storage, vec4<f32>, read> = access %shadow, 0u, %shadowIndex, 0u
+    %113:vec4<f32> = load %112
+    %viewport:vec4<f32> = let %113
+    %115:ptr<storage, mat4x4<f32>, read> = access %shadow, 0u, %shadowIndex, 1u
+    %116:mat4x4<f32> = load %115
+    %117:mat4x4<f32> = let %116
+    %118:vec4<f32> = construct %worldPos, 1.0f
+    %119:vec4<f32> = mul %117, %118
+    %lightPos:vec4<f32> = let %119
+    %121:vec2<f32> = swizzle %lightPos, xy
+    %122:f32 = access %lightPos, 3u
+    %123:vec2<f32> = div %121, %122
+    %124:vec2<f32> = mul %123, vec2<f32>(0.5f, -0.5f)
+    %125:vec2<f32> = add %124, vec2<f32>(0.5f)
+    %126:f32 = access %lightPos, 2u
+    %127:f32 = access %lightPos, 3u
+    %128:f32 = div %126, %127
+    %129:vec3<f32> = construct %125, %128
+    %shadowPos:vec3<f32> = let %129
+    %131:vec2<f32> = swizzle %viewport, xy
+    %132:vec2<f32> = swizzle %shadowPos, xy
+    %133:vec2<f32> = swizzle %viewport, zw
+    %134:vec2<f32> = mul %132, %133
+    %135:vec2<f32> = add %131, %134
+    %136:vec2<f32> = construct %135
+    %viewportPos:vec2<f32> = let %136
+    %138:texture_depth_2d = load %shadowTexture
+    %139:vec2<u32> = textureDimensions %138, 0i
+    %140:vec2<f32> = convert %139
+    %141:vec2<f32> = div 1.0f, %140
+    %texelSize:vec2<f32> = let %141
+    %143:vec2<f32> = swizzle %viewport, xy
+    %144:vec2<f32> = sub %143, %texelSize
+    %145:vec2<f32> = swizzle %viewport, xy
+    %146:vec2<f32> = swizzle %viewport, zw
+    %147:vec2<f32> = add %145, %146
+    %148:vec2<f32> = add %147, %texelSize
+    %149:vec4<f32> = construct %144, %148
+    %clampRect:vec4<f32> = let %149
     %visibility:ptr<function, f32, read_write> = var, 0.0f
-    loop [i: %b9, b: %b10, c: %b11] {  # loop_1
-      %b9 = block {  # initializer
+    loop [i: $B9, b: $B10, c: $B11] {  # loop_1
+      $B9: {  # initializer
         %i:ptr<function, u32, read_write> = var, 0u
-        next_iteration %b10
+        next_iteration  # -> $B10
       }
-      %b10 = block {  # body
-        %137:u32 = load %i
-        %138:bool = lt %137, 16u
-        if %138 [t: %b12, f: %b13] {  # if_2
-          %b12 = block {  # true
+      $B10: {  # body
+        %153:u32 = load %i
+        %154:bool = lt %153, 16u
+        if %154 [t: $B12, f: $B13] {  # if_2
+          $B12: {  # true
             exit_if  # if_2
           }
-          %b13 = block {  # false
+          $B13: {  # false
             exit_loop  # loop_1
           }
         }
-        %139:f32 = load %visibility
-        %140:texture_depth_2d = load %shadowTexture
-        %141:sampler_comparison = load %shadowSampler
-        %142:u32 = load %i
-        %143:ptr<private, vec2<f32>, read_write> = access %shadowSampleOffsets, %142
-        %144:vec2<f32> = load %143
-        %145:vec2<f32> = mul %144, %texelSize
-        %146:vec2<f32> = add %viewportPos, %145
-        %147:vec2<f32> = swizzle %clampRect, xy
-        %148:vec2<f32> = swizzle %clampRect, zw
-        %149:vec2<f32> = clamp %146, %147, %148
-        %150:f32 = access %shadowPos, 2u
-        %151:f32 = sub %150, 0.00300000002607703209f
-        %152:f32 = textureSampleCompareLevel %140, %141, %149, %151
-        %153:f32 = add %139, %152
-        store %visibility, %153
-        continue %b11
+        %155:f32 = load %visibility
+        %156:f32 = let %155
+        %157:texture_depth_2d = load %shadowTexture
+        %158:texture_depth_2d = let %157
+        %159:sampler_comparison = load %shadowSampler
+        %160:sampler_comparison = let %159
+        %161:u32 = load %i
+        %162:ptr<private, vec2<f32>, read_write> = access %shadowSampleOffsets, %161
+        %163:vec2<f32> = load %162
+        %164:vec2<f32> = mul %163, %texelSize
+        %165:vec2<f32> = add %viewportPos, %164
+        %166:vec2<f32> = swizzle %clampRect, xy
+        %167:vec2<f32> = swizzle %clampRect, zw
+        %168:vec2<f32> = clamp %165, %166, %167
+        %169:f32 = access %shadowPos, 2u
+        %170:f32 = sub %169, 0.00300000002607703209f
+        %171:f32 = textureSampleCompareLevel %158, %160, %168, %170
+        %172:f32 = add %156, %171
+        store %visibility, %172
+        continue  # -> $B11
       }
-      %b11 = block {  # continuing
-        %154:u32 = load %i
-        %155:u32 = add %154, 1u
-        store %i, %155
-        next_iteration %b10
+      $B11: {  # continuing
+        %173:u32 = load %i
+        %174:u32 = add %173, 1u
+        store %i, %174
+        next_iteration  # -> $B10
       }
     }
-    %156:f32 = load %visibility
-    %157:f32 = div %156, 16.0f
-    ret %157
+    %175:f32 = load %visibility
+    %176:f32 = div %175, 16.0f
+    ret %176
   }
 }
-%getCubeFace = func(%v:vec3<f32>):i32 -> %b14 {
-  %b14 = block {
-    %vAbs:vec3<f32> = abs %v
-    %161:f32 = access %vAbs, 2u
-    %162:f32 = access %vAbs, 0u
-    %163:bool = gte %161, %162
-    %164:bool = if %163 [t: %b15, f: %b16] {  # if_3
-      %b15 = block {  # true
-        %165:f32 = access %vAbs, 2u
-        %166:f32 = access %vAbs, 1u
-        %167:bool = gte %165, %166
-        exit_if %167  # if_3
+%getCubeFace = func(%v:vec3<f32>):i32 {
+  $B14: {
+    %179:vec3<f32> = abs %v
+    %vAbs:vec3<f32> = let %179
+    %181:f32 = access %vAbs, 2u
+    %182:f32 = access %vAbs, 0u
+    %183:bool = gte %181, %182
+    %184:bool = if %183 [t: $B15, f: $B16] {  # if_3
+      $B15: {  # true
+        %185:f32 = access %vAbs, 2u
+        %186:f32 = access %vAbs, 1u
+        %187:bool = gte %185, %186
+        exit_if %187  # if_3
       }
-      %b16 = block {  # false
+      $B16: {  # false
         exit_if false  # if_3
       }
     }
-    if %164 [t: %b17] {  # if_4
-      %b17 = block {  # true
-        %168:f32 = access %v, 2u
-        %169:bool = lt %168, 0.0f
-        if %169 [t: %b18] {  # if_5
-          %b18 = block {  # true
+    if %184 [t: $B17] {  # if_4
+      $B17: {  # true
+        %188:f32 = access %v, 2u
+        %189:bool = lt %188, 0.0f
+        if %189 [t: $B18] {  # if_5
+          $B18: {  # true
             ret 5i
           }
         }
         ret 4i
       }
     }
-    %170:f32 = access %vAbs, 1u
-    %171:f32 = access %vAbs, 0u
-    %172:bool = gte %170, %171
-    if %172 [t: %b19] {  # if_6
-      %b19 = block {  # true
-        %173:f32 = access %v, 1u
-        %174:bool = lt %173, 0.0f
-        if %174 [t: %b20] {  # if_7
-          %b20 = block {  # true
+    %190:f32 = access %vAbs, 1u
+    %191:f32 = access %vAbs, 0u
+    %192:bool = gte %190, %191
+    if %192 [t: $B19] {  # if_6
+      $B19: {  # true
+        %193:f32 = access %v, 1u
+        %194:bool = lt %193, 0.0f
+        if %194 [t: $B20] {  # if_7
+          $B20: {  # true
             ret 3i
           }
         }
         ret 2i
       }
     }
-    %175:f32 = access %v, 0u
-    %176:bool = lt %175, 0.0f
-    if %176 [t: %b21] {  # if_8
-      %b21 = block {  # true
+    %195:f32 = access %v, 0u
+    %196:bool = lt %195, 0.0f
+    if %196 [t: $B21] {  # if_8
+      $B21: {  # true
         ret 1i
       }
     }
     ret 0i
   }
 }
-%pointLightVisibility = func(%lightIndex:u32, %worldPos_1:vec3<f32>, %pointToLight:vec3<f32>):f32 -> %b22 {  # %worldPos_1: 'worldPos'
-  %b22 = block {
-    %181:u32 = add %lightIndex, 1u
-    %182:ptr<storage, i32, read> = access %lightShadowTable, 0u, %181
-    %183:i32 = load %182
-    %shadowIndex_1:ptr<function, i32, read_write> = var, %183  # %shadowIndex_1: 'shadowIndex'
-    %185:i32 = load %shadowIndex_1
-    %186:bool = eq %185, -1i
-    if %186 [t: %b23] {  # if_9
-      %b23 = block {  # true
+%pointLightVisibility = func(%lightIndex:u32, %worldPos_1:vec3<f32>, %pointToLight:vec3<f32>):f32 {  # %worldPos_1: 'worldPos'
+  $B22: {
+    %201:u32 = add %lightIndex, 1u
+    %202:ptr<storage, i32, read> = access %lightShadowTable, 0u, %201
+    %203:i32 = load %202
+    %shadowIndex_1:ptr<function, i32, read_write> = var, %203  # %shadowIndex_1: 'shadowIndex'
+    %205:i32 = load %shadowIndex_1
+    %206:bool = eq %205, -1i
+    if %206 [t: $B23] {  # if_9
+      $B23: {  # true
         ret 1.0f
       }
     }
-    %187:i32 = load %shadowIndex_1
-    %188:vec3<f32> = mul %pointToLight, -1.0f
-    %189:i32 = call %getCubeFace, %188
-    %190:i32 = add %187, %189
-    store %shadowIndex_1, %190
-    %191:i32 = load %shadowIndex_1
-    %192:ptr<storage, vec4<f32>, read> = access %shadow, 0u, %191, 0u
-    %viewport_1:vec4<f32> = load %192  # %viewport_1: 'viewport'
-    %194:i32 = load %shadowIndex_1
-    %195:ptr<storage, mat4x4<f32>, read> = access %shadow, 0u, %194, 1u
-    %196:mat4x4<f32> = load %195
-    %197:vec4<f32> = construct %worldPos_1, 1.0f
-    %lightPos_1:vec4<f32> = mul %196, %197  # %lightPos_1: 'lightPos'
-    %199:vec2<f32> = swizzle %lightPos_1, xy
-    %200:f32 = access %lightPos_1, 3u
-    %201:vec2<f32> = div %199, %200
-    %202:vec2<f32> = mul %201, vec2<f32>(0.5f, -0.5f)
-    %203:vec2<f32> = add %202, vec2<f32>(0.5f)
-    %204:f32 = access %lightPos_1, 2u
-    %205:f32 = access %lightPos_1, 3u
-    %206:f32 = div %204, %205
-    %shadowPos_1:vec3<f32> = construct %203, %206  # %shadowPos_1: 'shadowPos'
-    %208:vec2<f32> = swizzle %viewport_1, xy
-    %209:vec2<f32> = swizzle %shadowPos_1, xy
-    %210:vec2<f32> = swizzle %viewport_1, zw
-    %211:vec2<f32> = mul %209, %210
-    %212:vec2<f32> = add %208, %211
-    %viewportPos_1:vec2<f32> = construct %212  # %viewportPos_1: 'viewportPos'
-    %214:texture_depth_2d = load %shadowTexture
-    %215:vec2<u32> = textureDimensions %214, 0i
-    %216:vec2<f32> = convert %215
-    %texelSize_1:vec2<f32> = div 1.0f, %216  # %texelSize_1: 'texelSize'
-    %218:vec2<f32> = swizzle %viewport_1, xy
-    %219:vec2<f32> = swizzle %viewport_1, xy
-    %220:vec2<f32> = swizzle %viewport_1, zw
-    %221:vec2<f32> = add %219, %220
-    %clampRect_1:vec4<f32> = construct %218, %221  # %clampRect_1: 'clampRect'
+    %207:i32 = load %shadowIndex_1
+    %208:i32 = let %207
+    %209:vec3<f32> = mul %pointToLight, -1.0f
+    %210:i32 = call %getCubeFace, %209
+    %211:i32 = add %208, %210
+    store %shadowIndex_1, %211
+    %212:i32 = load %shadowIndex_1
+    %213:ptr<storage, vec4<f32>, read> = access %shadow, 0u, %212, 0u
+    %214:vec4<f32> = load %213
+    %viewport_1:vec4<f32> = let %214  # %viewport_1: 'viewport'
+    %216:i32 = load %shadowIndex_1
+    %217:ptr<storage, mat4x4<f32>, read> = access %shadow, 0u, %216, 1u
+    %218:mat4x4<f32> = load %217
+    %219:mat4x4<f32> = let %218
+    %220:vec4<f32> = construct %worldPos_1, 1.0f
+    %221:vec4<f32> = mul %219, %220
+    %lightPos_1:vec4<f32> = let %221  # %lightPos_1: 'lightPos'
+    %223:vec2<f32> = swizzle %lightPos_1, xy
+    %224:f32 = access %lightPos_1, 3u
+    %225:vec2<f32> = div %223, %224
+    %226:vec2<f32> = mul %225, vec2<f32>(0.5f, -0.5f)
+    %227:vec2<f32> = add %226, vec2<f32>(0.5f)
+    %228:f32 = access %lightPos_1, 2u
+    %229:f32 = access %lightPos_1, 3u
+    %230:f32 = div %228, %229
+    %231:vec3<f32> = construct %227, %230
+    %shadowPos_1:vec3<f32> = let %231  # %shadowPos_1: 'shadowPos'
+    %233:vec2<f32> = swizzle %viewport_1, xy
+    %234:vec2<f32> = swizzle %shadowPos_1, xy
+    %235:vec2<f32> = swizzle %viewport_1, zw
+    %236:vec2<f32> = mul %234, %235
+    %237:vec2<f32> = add %233, %236
+    %238:vec2<f32> = construct %237
+    %viewportPos_1:vec2<f32> = let %238  # %viewportPos_1: 'viewportPos'
+    %240:texture_depth_2d = load %shadowTexture
+    %241:vec2<u32> = textureDimensions %240, 0i
+    %242:vec2<f32> = convert %241
+    %243:vec2<f32> = div 1.0f, %242
+    %texelSize_1:vec2<f32> = let %243  # %texelSize_1: 'texelSize'
+    %245:vec2<f32> = swizzle %viewport_1, xy
+    %246:vec2<f32> = swizzle %viewport_1, xy
+    %247:vec2<f32> = swizzle %viewport_1, zw
+    %248:vec2<f32> = add %246, %247
+    %249:vec4<f32> = construct %245, %248
+    %clampRect_1:vec4<f32> = let %249  # %clampRect_1: 'clampRect'
     %visibility_1:ptr<function, f32, read_write> = var, 0.0f  # %visibility_1: 'visibility'
-    loop [i: %b24, b: %b25, c: %b26] {  # loop_2
-      %b24 = block {  # initializer
+    loop [i: $B24, b: $B25, c: $B26] {  # loop_2
+      $B24: {  # initializer
         %i_1:ptr<function, u32, read_write> = var, 0u  # %i_1: 'i'
-        next_iteration %b25
+        next_iteration  # -> $B25
       }
-      %b25 = block {  # body
-        %225:u32 = load %i_1
-        %226:bool = lt %225, 16u
-        if %226 [t: %b27, f: %b28] {  # if_10
-          %b27 = block {  # true
+      $B25: {  # body
+        %253:u32 = load %i_1
+        %254:bool = lt %253, 16u
+        if %254 [t: $B27, f: $B28] {  # if_10
+          $B27: {  # true
             exit_if  # if_10
           }
-          %b28 = block {  # false
+          $B28: {  # false
             exit_loop  # loop_2
           }
         }
-        %227:f32 = load %visibility_1
-        %228:texture_depth_2d = load %shadowTexture
-        %229:sampler_comparison = load %shadowSampler
-        %230:u32 = load %i_1
-        %231:ptr<private, vec2<f32>, read_write> = access %shadowSampleOffsets, %230
-        %232:vec2<f32> = load %231
-        %233:vec2<f32> = mul %232, %texelSize_1
-        %234:vec2<f32> = add %viewportPos_1, %233
-        %235:vec2<f32> = swizzle %clampRect_1, xy
-        %236:vec2<f32> = swizzle %clampRect_1, zw
-        %237:vec2<f32> = clamp %234, %235, %236
-        %238:f32 = access %shadowPos_1, 2u
-        %239:f32 = sub %238, 0.00999999977648258209f
-        %240:f32 = textureSampleCompareLevel %228, %229, %237, %239
-        %241:f32 = add %227, %240
-        store %visibility_1, %241
-        continue %b26
+        %255:f32 = load %visibility_1
+        %256:f32 = let %255
+        %257:texture_depth_2d = load %shadowTexture
+        %258:texture_depth_2d = let %257
+        %259:sampler_comparison = load %shadowSampler
+        %260:sampler_comparison = let %259
+        %261:u32 = load %i_1
+        %262:ptr<private, vec2<f32>, read_write> = access %shadowSampleOffsets, %261
+        %263:vec2<f32> = load %262
+        %264:vec2<f32> = mul %263, %texelSize_1
+        %265:vec2<f32> = add %viewportPos_1, %264
+        %266:vec2<f32> = swizzle %clampRect_1, xy
+        %267:vec2<f32> = swizzle %clampRect_1, zw
+        %268:vec2<f32> = clamp %265, %266, %267
+        %269:f32 = access %shadowPos_1, 2u
+        %270:f32 = sub %269, 0.00999999977648258209f
+        %271:f32 = textureSampleCompareLevel %258, %260, %268, %270
+        %272:f32 = add %256, %271
+        store %visibility_1, %272
+        continue  # -> $B26
       }
-      %b26 = block {  # continuing
-        %242:u32 = load %i_1
-        %243:u32 = add %242, 1u
-        store %i_1, %243
-        next_iteration %b25
+      $B26: {  # continuing
+        %273:u32 = load %i_1
+        %274:u32 = add %273, 1u
+        store %i_1, %274
+        next_iteration  # -> $B25
       }
     }
-    %244:f32 = load %visibility_1
-    %245:f32 = div %244, 16.0f
-    ret %245
+    %275:f32 = load %visibility_1
+    %276:f32 = div %275, 16.0f
+    ret %276
   }
 }
-%GetSurfaceInfo = func(%input:VertexOutput):SurfaceInfo -> %b29 {
-  %b29 = block {
+%GetSurfaceInfo = func(%input:VertexOutput):SurfaceInfo {
+  $B29: {
     %surface:ptr<function, SurfaceInfo, read_write> = var
-    %249:ptr<function, vec3<f32>, read_write> = access %surface, 8u
-    %250:vec3<f32> = access %input, 2u
-    %251:vec3<f32> = normalize %250
-    store %249, %251
-    %252:vec3<f32> = access %input, 8u
-    %253:vec3<f32> = access %input, 9u
-    %254:vec3<f32> = access %input, 7u
-    %tbn:mat3x3<f32> = construct %252, %253, %254
-    %256:texture_2d<f32> = load %normalTexture
-    %257:sampler = load %normalSampler
-    %258:vec2<f32> = access %input, 3u
-    %259:vec4<f32> = textureSample %256, %257, %258
-    %normalMap:vec3<f32> = swizzle %259, xyz
-    %261:ptr<function, vec3<f32>, read_write> = access %surface, 4u
-    %262:vec3<f32> = mul 2.0f, %normalMap
-    %263:vec3<f32> = sub %262, vec3<f32>(1.0f)
-    %264:vec3<f32> = mul %tbn, %263
-    %265:vec3<f32> = normalize %264
-    store %261, %265
-    %266:texture_2d<f32> = load %baseColorTexture
-    %267:sampler = load %baseColorSampler
-    %268:vec2<f32> = access %input, 3u
-    %baseColorMap:vec4<f32> = textureSample %266, %267, %268
-    %270:ptr<function, vec4<f32>, read_write> = access %surface, 0u
-    %271:vec4<f32> = access %input, 5u
-    %272:ptr<uniform, vec4<f32>, read> = access %material, 0u
-    %273:vec4<f32> = load %272
-    %274:vec4<f32> = mul %271, %273
-    %275:vec4<f32> = mul %274, %baseColorMap
-    store %270, %275
-    %276:ptr<function, vec4<f32>, read_write> = access %surface, 0u
-    %277:f32 = load_vector_element %276, 3u
-    %278:ptr<uniform, f32, read> = access %material, 4u
-    %279:f32 = load %278
-    %280:bool = lt %277, %279
-    if %280 [t: %b30] {  # if_11
-      %b30 = block {  # true
+    %280:ptr<function, vec3<f32>, read_write> = access %surface, 8u
+    %281:vec3<f32> = access %input, 2u
+    %282:vec3<f32> = normalize %281
+    store %280, %282
+    %283:vec3<f32> = access %input, 8u
+    %284:vec3<f32> = access %input, 9u
+    %285:vec3<f32> = access %input, 7u
+    %286:mat3x3<f32> = construct %283, %284, %285
+    %tbn:mat3x3<f32> = let %286
+    %288:texture_2d<f32> = load %normalTexture
+    %289:sampler = load %normalSampler
+    %290:vec2<f32> = access %input, 3u
+    %291:vec4<f32> = textureSample %288, %289, %290
+    %292:vec3<f32> = swizzle %291, xyz
+    %normalMap:vec3<f32> = let %292
+    %294:ptr<function, vec3<f32>, read_write> = access %surface, 4u
+    %295:vec3<f32> = mul 2.0f, %normalMap
+    %296:vec3<f32> = sub %295, vec3<f32>(1.0f)
+    %297:vec3<f32> = mul %tbn, %296
+    %298:vec3<f32> = normalize %297
+    store %294, %298
+    %299:texture_2d<f32> = load %baseColorTexture
+    %300:sampler = load %baseColorSampler
+    %301:vec2<f32> = access %input, 3u
+    %302:vec4<f32> = textureSample %299, %300, %301
+    %baseColorMap:vec4<f32> = let %302
+    %304:ptr<function, vec4<f32>, read_write> = access %surface, 0u
+    %305:vec4<f32> = access %input, 5u
+    %306:ptr<uniform, vec4<f32>, read> = access %material, 0u
+    %307:vec4<f32> = load %306
+    %308:vec4<f32> = mul %305, %307
+    %309:vec4<f32> = mul %308, %baseColorMap
+    store %304, %309
+    %310:ptr<function, vec4<f32>, read_write> = access %surface, 0u
+    %311:f32 = load_vector_element %310, 3u
+    %312:ptr<uniform, f32, read> = access %material, 4u
+    %313:f32 = load %312
+    %314:bool = lt %311, %313
+    if %314 [t: $B30] {  # if_11
+      $B30: {  # true
         exit_if  # if_11
       }
     }
-    %281:ptr<function, vec3<f32>, read_write> = access %surface, 1u
-    %282:ptr<function, vec4<f32>, read_write> = access %surface, 0u
-    %283:vec4<f32> = load %282
-    %284:vec3<f32> = swizzle %283, xyz
-    store %281, %284
-    %285:texture_2d<f32> = load %metallicRoughnessTexture
-    %286:sampler = load %metallicRoughnessSampler
-    %287:vec2<f32> = access %input, 3u
-    %metallicRoughnessMap:vec4<f32> = textureSample %285, %286, %287
-    %289:ptr<function, f32, read_write> = access %surface, 2u
-    %290:ptr<uniform, vec2<f32>, read> = access %material, 3u
-    %291:f32 = load_vector_element %290, 0u
-    %292:f32 = access %metallicRoughnessMap, 2u
-    %293:f32 = mul %291, %292
-    store %289, %293
-    %294:ptr<function, f32, read_write> = access %surface, 3u
-    %295:ptr<uniform, vec2<f32>, read> = access %material, 3u
-    %296:f32 = load_vector_element %295, 1u
-    %297:f32 = access %metallicRoughnessMap, 1u
-    %298:f32 = mul %296, %297
-    store %294, %298
+    %315:ptr<function, vec3<f32>, read_write> = access %surface, 1u
+    %316:ptr<function, vec4<f32>, read_write> = access %surface, 0u
+    %317:vec4<f32> = load %316
+    %318:vec3<f32> = swizzle %317, xyz
+    store %315, %318
+    %319:texture_2d<f32> = load %metallicRoughnessTexture
+    %320:sampler = load %metallicRoughnessSampler
+    %321:vec2<f32> = access %input, 3u
+    %322:vec4<f32> = textureSample %319, %320, %321
+    %metallicRoughnessMap:vec4<f32> = let %322
+    %324:ptr<function, f32, read_write> = access %surface, 2u
+    %325:ptr<uniform, vec2<f32>, read> = access %material, 3u
+    %326:f32 = load_vector_element %325, 0u
+    %327:f32 = access %metallicRoughnessMap, 2u
+    %328:f32 = mul %326, %327
+    store %324, %328
+    %329:ptr<function, f32, read_write> = access %surface, 3u
+    %330:ptr<uniform, vec2<f32>, read> = access %material, 3u
+    %331:f32 = load_vector_element %330, 1u
+    %332:f32 = access %metallicRoughnessMap, 1u
+    %333:f32 = mul %331, %332
+    store %329, %333
     %dielectricSpec:vec3<f32> = let vec3<f32>(0.03999999910593032837f)
-    %300:ptr<function, vec3<f32>, read_write> = access %surface, 5u
-    %301:ptr<function, vec3<f32>, read_write> = access %surface, 1u
-    %302:vec3<f32> = load %301
-    %303:ptr<function, f32, read_write> = access %surface, 2u
-    %304:f32 = load %303
-    %305:vec3<f32> = construct %304
-    %306:vec3<f32> = mix %dielectricSpec, %302, %305
-    store %300, %306
-    %307:texture_2d<f32> = load %occlusionTexture
-    %308:sampler = load %occlusionSampler
-    %309:vec2<f32> = access %input, 3u
-    %occlusionMap:vec4<f32> = textureSample %307, %308, %309
-    %311:ptr<function, f32, read_write> = access %surface, 6u
-    %312:ptr<uniform, f32, read> = access %material, 2u
-    %313:f32 = load %312
-    %314:f32 = access %occlusionMap, 0u
-    %315:f32 = mul %313, %314
-    store %311, %315
-    %316:texture_2d<f32> = load %emissiveTexture
-    %317:sampler = load %emissiveSampler
-    %318:vec2<f32> = access %input, 3u
-    %emissiveMap:vec4<f32> = textureSample %316, %317, %318
-    %320:ptr<function, vec3<f32>, read_write> = access %surface, 7u
-    %321:ptr<uniform, vec3<f32>, read> = access %material, 1u
-    %322:vec3<f32> = load %321
-    %323:vec3<f32> = swizzle %emissiveMap, xyz
-    %324:vec3<f32> = mul %322, %323
-    store %320, %324
-    %325:f32 = access %input, 6u, 3u
-    %326:bool = eq %325, 0.0f
-    if %326 [t: %b31, f: %b32] {  # if_12
-      %b31 = block {  # true
-        %327:ptr<function, vec3<f32>, read_write> = access %surface, 1u
-        %328:ptr<function, vec3<f32>, read_write> = access %surface, 1u
-        %329:vec3<f32> = load %328
-        %330:vec4<f32> = access %input, 6u
-        %331:vec3<f32> = swizzle %330, xyz
-        %332:vec3<f32> = add %329, %331
-        store %327, %332
+    %335:ptr<function, vec3<f32>, read_write> = access %surface, 5u
+    %336:ptr<function, vec3<f32>, read_write> = access %surface, 1u
+    %337:vec3<f32> = load %336
+    %338:vec3<f32> = let %337
+    %339:ptr<function, f32, read_write> = access %surface, 2u
+    %340:f32 = load %339
+    %341:vec3<f32> = construct %340
+    %342:vec3<f32> = mix %dielectricSpec, %338, %341
+    store %335, %342
+    %343:texture_2d<f32> = load %occlusionTexture
+    %344:sampler = load %occlusionSampler
+    %345:vec2<f32> = access %input, 3u
+    %346:vec4<f32> = textureSample %343, %344, %345
+    %occlusionMap:vec4<f32> = let %346
+    %348:ptr<function, f32, read_write> = access %surface, 6u
+    %349:ptr<uniform, f32, read> = access %material, 2u
+    %350:f32 = load %349
+    %351:f32 = access %occlusionMap, 0u
+    %352:f32 = mul %350, %351
+    store %348, %352
+    %353:texture_2d<f32> = load %emissiveTexture
+    %354:sampler = load %emissiveSampler
+    %355:vec2<f32> = access %input, 3u
+    %356:vec4<f32> = textureSample %353, %354, %355
+    %emissiveMap:vec4<f32> = let %356
+    %358:ptr<function, vec3<f32>, read_write> = access %surface, 7u
+    %359:ptr<uniform, vec3<f32>, read> = access %material, 1u
+    %360:vec3<f32> = load %359
+    %361:vec3<f32> = swizzle %emissiveMap, xyz
+    %362:vec3<f32> = mul %360, %361
+    store %358, %362
+    %363:f32 = access %input, 6u, 3u
+    %364:bool = eq %363, 0.0f
+    if %364 [t: $B31, f: $B32] {  # if_12
+      $B31: {  # true
+        %365:ptr<function, vec3<f32>, read_write> = access %surface, 1u
+        %366:ptr<function, vec3<f32>, read_write> = access %surface, 1u
+        %367:vec3<f32> = load %366
+        %368:vec4<f32> = access %input, 6u
+        %369:vec3<f32> = swizzle %368, xyz
+        %370:vec3<f32> = add %367, %369
+        store %365, %370
         exit_if  # if_12
       }
-      %b32 = block {  # false
-        %333:ptr<function, vec3<f32>, read_write> = access %surface, 1u
-        %334:ptr<function, vec3<f32>, read_write> = access %surface, 1u
-        %335:vec3<f32> = load %334
-        %336:vec4<f32> = access %input, 6u
-        %337:vec3<f32> = swizzle %336, xyz
-        %338:vec3<f32> = mul %335, %337
-        store %333, %338
+      $B32: {  # false
+        %371:ptr<function, vec3<f32>, read_write> = access %surface, 1u
+        %372:ptr<function, vec3<f32>, read_write> = access %surface, 1u
+        %373:vec3<f32> = load %372
+        %374:vec4<f32> = access %input, 6u
+        %375:vec3<f32> = swizzle %374, xyz
+        %376:vec3<f32> = mul %373, %375
+        store %371, %376
         exit_if  # if_12
       }
     }
-    %339:SurfaceInfo = load %surface
-    ret %339
+    %377:SurfaceInfo = load %surface
+    ret %377
   }
 }
-%FresnelSchlick = func(%cosTheta:f32, %F0:vec3<f32>):vec3<f32> -> %b33 {
-  %b33 = block {
-    %343:vec3<f32> = sub vec3<f32>(1.0f), %F0
-    %344:f32 = sub 1.0f, %cosTheta
-    %345:f32 = pow %344, 5.0f
-    %346:vec3<f32> = mul %343, %345
-    %347:vec3<f32> = add %F0, %346
-    ret %347
+%FresnelSchlick = func(%cosTheta:f32, %F0:vec3<f32>):vec3<f32> {
+  $B33: {
+    %381:vec3<f32> = sub vec3<f32>(1.0f), %F0
+    %382:f32 = sub 1.0f, %cosTheta
+    %383:f32 = pow %382, 5.0f
+    %384:vec3<f32> = mul %381, %383
+    %385:vec3<f32> = add %F0, %384
+    ret %385
   }
 }
-%DistributionGGX = func(%N:vec3<f32>, %H:vec3<f32>, %roughness:f32):f32 -> %b34 {
-  %b34 = block {
-    %a:f32 = mul %roughness, %roughness
-    %a2:f32 = mul %a, %a
-    %354:f32 = dot %N, %H
-    %NdotH:f32 = max %354, 0.0f
-    %NdotH2:f32 = mul %NdotH, %NdotH
+%DistributionGGX = func(%N:vec3<f32>, %H:vec3<f32>, %roughness:f32):f32 {
+  $B34: {
+    %390:f32 = mul %roughness, %roughness
+    %a:f32 = let %390
+    %392:f32 = mul %a, %a
+    %a2:f32 = let %392
+    %394:f32 = dot %N, %H
+    %395:f32 = max %394, 0.0f
+    %NdotH:f32 = let %395
+    %397:f32 = mul %NdotH, %NdotH
+    %NdotH2:f32 = let %397
     %num:f32 = let %a2
-    %358:f32 = sub %a2, 1.0f
-    %359:f32 = mul %NdotH2, %358
-    %denom:f32 = add %359, 1.0f
-    %361:f32 = mul 3.14159274101257324219f, %denom
-    %362:f32 = mul %361, %denom
-    %363:f32 = div %num, %362
-    ret %363
+    %400:f32 = sub %a2, 1.0f
+    %401:f32 = mul %NdotH2, %400
+    %402:f32 = add %401, 1.0f
+    %denom:f32 = let %402
+    %404:f32 = mul 3.14159274101257324219f, %denom
+    %405:f32 = mul %404, %denom
+    %406:f32 = div %num, %405
+    ret %406
   }
 }
-%GeometrySchlickGGX = func(%NdotV:f32, %roughness_1:f32):f32 -> %b35 {  # %roughness_1: 'roughness'
-  %b35 = block {
-    %r:f32 = add %roughness_1, 1.0f
-    %368:f32 = mul %r, %r
-    %k:f32 = div %368, 8.0f
+%GeometrySchlickGGX = func(%NdotV:f32, %roughness_1:f32):f32 {  # %roughness_1: 'roughness'
+  $B35: {
+    %410:f32 = add %roughness_1, 1.0f
+    %r:f32 = let %410
+    %412:f32 = mul %r, %r
+    %413:f32 = div %412, 8.0f
+    %k:f32 = let %413
     %num_1:f32 = let %NdotV  # %num_1: 'num'
-    %371:f32 = sub 1.0f, %k
-    %372:f32 = mul %NdotV, %371
-    %denom_1:f32 = add %372, %k  # %denom_1: 'denom'
-    %374:f32 = div %num_1, %denom_1
-    ret %374
+    %416:f32 = sub 1.0f, %k
+    %417:f32 = mul %NdotV, %416
+    %418:f32 = add %417, %k
+    %denom_1:f32 = let %418  # %denom_1: 'denom'
+    %420:f32 = div %num_1, %denom_1
+    ret %420
   }
 }
-%GeometrySmith = func(%N_1:vec3<f32>, %V:vec3<f32>, %L:vec3<f32>, %roughness_2:f32):f32 -> %b36 {  # %N_1: 'N', %roughness_2: 'roughness'
-  %b36 = block {
-    %380:f32 = dot %N_1, %V
-    %NdotV_1:f32 = max %380, 0.0f  # %NdotV_1: 'NdotV'
-    %382:f32 = dot %N_1, %L
-    %NdotL:f32 = max %382, 0.0f
-    %ggx2:f32 = call %GeometrySchlickGGX, %NdotV_1, %roughness_2
-    %ggx1:f32 = call %GeometrySchlickGGX, %NdotL, %roughness_2
-    %386:f32 = mul %ggx1, %ggx2
-    ret %386
+%GeometrySmith = func(%N_1:vec3<f32>, %V:vec3<f32>, %L:vec3<f32>, %roughness_2:f32):f32 {  # %N_1: 'N', %roughness_2: 'roughness'
+  $B36: {
+    %426:f32 = dot %N_1, %V
+    %427:f32 = max %426, 0.0f
+    %NdotV_1:f32 = let %427  # %NdotV_1: 'NdotV'
+    %429:f32 = dot %N_1, %L
+    %430:f32 = max %429, 0.0f
+    %NdotL:f32 = let %430
+    %432:f32 = call %GeometrySchlickGGX, %NdotV_1, %roughness_2
+    %ggx2:f32 = let %432
+    %434:f32 = call %GeometrySchlickGGX, %NdotL, %roughness_2
+    %ggx1:f32 = let %434
+    %436:f32 = mul %ggx1, %ggx2
+    ret %436
   }
 }
-%lightAttenuation = func(%light:PuctualLight):f32 -> %b37 {
-  %b37 = block {
-    %389:u32 = access %light, 0u
-    %390:bool = eq %389, 2u
-    if %390 [t: %b38] {  # if_13
-      %b38 = block {  # true
+%lightAttenuation = func(%light:PuctualLight):f32 {
+  $B37: {
+    %439:u32 = access %light, 0u
+    %440:bool = eq %439, 2u
+    if %440 [t: $B38] {  # if_13
+      $B38: {  # true
         ret 1.0f
       }
     }
-    %391:vec3<f32> = access %light, 1u
-    %distance:f32 = length %391
-    %393:f32 = access %light, 2u
-    %394:bool = lte %393, 0.0f
-    if %394 [t: %b39] {  # if_14
-      %b39 = block {  # true
-        %395:f32 = pow %distance, 2.0f
-        %396:f32 = div 1.0f, %395
-        ret %396
+    %441:vec3<f32> = access %light, 1u
+    %442:f32 = length %441
+    %distance:f32 = let %442
+    %444:f32 = access %light, 2u
+    %445:bool = lte %444, 0.0f
+    if %445 [t: $B39] {  # if_14
+      $B39: {  # true
+        %446:f32 = pow %distance, 2.0f
+        %447:f32 = div 1.0f, %446
+        ret %447
       }
     }
-    %397:f32 = access %light, 2u
-    %398:f32 = div %distance, %397
-    %399:f32 = pow %398, 4.0f
-    %400:f32 = sub 1.0f, %399
-    %401:f32 = clamp %400, 0.0f, 1.0f
-    %402:f32 = pow %distance, 2.0f
-    %403:f32 = div %401, %402
-    ret %403
+    %448:f32 = access %light, 2u
+    %449:f32 = div %distance, %448
+    %450:f32 = pow %449, 4.0f
+    %451:f32 = sub 1.0f, %450
+    %452:f32 = clamp %451, 0.0f, 1.0f
+    %453:f32 = let %452
+    %454:f32 = pow %distance, 2.0f
+    %455:f32 = div %453, %454
+    ret %455
   }
 }
-%lightRadiance = func(%light_1:PuctualLight, %surface_1:SurfaceInfo):vec3<f32> -> %b40 {  # %light_1: 'light', %surface_1: 'surface'
-  %b40 = block {
-    %407:vec3<f32> = access %light_1, 1u
-    %L_1:vec3<f32> = normalize %407  # %L_1: 'L'
-    %409:vec3<f32> = access %surface_1, 8u
-    %410:vec3<f32> = add %409, %L_1
-    %H_1:vec3<f32> = normalize %410  # %H_1: 'H'
-    %412:vec3<f32> = access %surface_1, 4u
-    %413:f32 = access %surface_1, 3u
-    %NDF:f32 = call %DistributionGGX, %412, %H_1, %413
-    %415:vec3<f32> = access %surface_1, 4u
-    %416:vec3<f32> = access %surface_1, 8u
-    %417:f32 = access %surface_1, 3u
-    %G:f32 = call %GeometrySmith, %415, %416, %L_1, %417
-    %419:vec3<f32> = access %surface_1, 8u
-    %420:f32 = dot %H_1, %419
-    %421:f32 = max %420, 0.0f
-    %422:vec3<f32> = access %surface_1, 5u
-    %F:vec3<f32> = call %FresnelSchlick, %421, %422
-    %424:vec3<f32> = sub vec3<f32>(1.0f), %F
-    %425:f32 = access %surface_1, 2u
-    %426:f32 = sub 1.0f, %425
-    %kD:vec3<f32> = mul %424, %426
-    %428:vec3<f32> = access %surface_1, 4u
-    %429:f32 = dot %428, %L_1
-    %NdotL_1:f32 = max %429, 0.0f  # %NdotL_1: 'NdotL'
-    %431:f32 = mul %NDF, %G
-    %numerator:vec3<f32> = mul %431, %F
-    %433:vec3<f32> = access %surface_1, 4u
-    %434:vec3<f32> = access %surface_1, 8u
-    %435:f32 = dot %433, %434
-    %436:f32 = max %435, 0.0f
-    %437:f32 = mul 4.0f, %436
-    %438:f32 = mul %437, %NdotL_1
-    %denominator:f32 = max %438, 0.00100000004749745131f
-    %440:vec3<f32> = construct %denominator
-    %specular:vec3<f32> = div %numerator, %440
-    %442:vec3<f32> = access %light_1, 3u
-    %443:f32 = access %light_1, 4u
-    %444:vec3<f32> = mul %442, %443
-    %445:f32 = call %lightAttenuation, %light_1
-    %radiance:vec3<f32> = mul %444, %445
-    %447:vec3<f32> = access %surface_1, 1u
-    %448:vec3<f32> = mul %kD, %447
-    %449:vec3<f32> = div %448, vec3<f32>(3.14159274101257324219f)
-    %450:vec3<f32> = add %449, %specular
-    %451:vec3<f32> = mul %450, %radiance
-    %452:vec3<f32> = mul %451, %NdotL_1
-    ret %452
+%lightRadiance = func(%light_1:PuctualLight, %surface_1:SurfaceInfo):vec3<f32> {  # %light_1: 'light', %surface_1: 'surface'
+  $B40: {
+    %459:vec3<f32> = access %light_1, 1u
+    %460:vec3<f32> = normalize %459
+    %L_1:vec3<f32> = let %460  # %L_1: 'L'
+    %462:vec3<f32> = access %surface_1, 8u
+    %463:vec3<f32> = add %462, %L_1
+    %464:vec3<f32> = normalize %463
+    %H_1:vec3<f32> = let %464  # %H_1: 'H'
+    %466:vec3<f32> = access %surface_1, 4u
+    %467:f32 = access %surface_1, 3u
+    %468:f32 = call %DistributionGGX, %466, %H_1, %467
+    %NDF:f32 = let %468
+    %470:vec3<f32> = access %surface_1, 4u
+    %471:vec3<f32> = access %surface_1, 8u
+    %472:f32 = access %surface_1, 3u
+    %473:f32 = call %GeometrySmith, %470, %471, %L_1, %472
+    %G:f32 = let %473
+    %475:vec3<f32> = access %surface_1, 8u
+    %476:f32 = dot %H_1, %475
+    %477:f32 = max %476, 0.0f
+    %478:vec3<f32> = access %surface_1, 5u
+    %479:vec3<f32> = call %FresnelSchlick, %477, %478
+    %F:vec3<f32> = let %479
+    %481:vec3<f32> = sub vec3<f32>(1.0f), %F
+    %482:f32 = access %surface_1, 2u
+    %483:f32 = sub 1.0f, %482
+    %484:vec3<f32> = mul %481, %483
+    %kD:vec3<f32> = let %484
+    %486:vec3<f32> = access %surface_1, 4u
+    %487:f32 = dot %486, %L_1
+    %488:f32 = max %487, 0.0f
+    %NdotL_1:f32 = let %488  # %NdotL_1: 'NdotL'
+    %490:f32 = mul %NDF, %G
+    %491:vec3<f32> = mul %490, %F
+    %numerator:vec3<f32> = let %491
+    %493:vec3<f32> = access %surface_1, 4u
+    %494:vec3<f32> = access %surface_1, 8u
+    %495:f32 = dot %493, %494
+    %496:f32 = max %495, 0.0f
+    %497:f32 = mul 4.0f, %496
+    %498:f32 = mul %497, %NdotL_1
+    %499:f32 = max %498, 0.00100000004749745131f
+    %denominator:f32 = let %499
+    %501:vec3<f32> = construct %denominator
+    %502:vec3<f32> = div %numerator, %501
+    %specular:vec3<f32> = let %502
+    %504:vec3<f32> = access %light_1, 3u
+    %505:f32 = access %light_1, 4u
+    %506:vec3<f32> = mul %504, %505
+    %507:f32 = call %lightAttenuation, %light_1
+    %508:vec3<f32> = mul %506, %507
+    %radiance:vec3<f32> = let %508
+    %510:vec3<f32> = access %surface_1, 1u
+    %511:vec3<f32> = mul %kD, %510
+    %512:vec3<f32> = div %511, vec3<f32>(3.14159274101257324219f)
+    %513:vec3<f32> = add %512, %specular
+    %514:vec3<f32> = mul %513, %radiance
+    %515:vec3<f32> = mul %514, %NdotL_1
+    ret %515
   }
 }
-%fragmentMain = @fragment func(%input_1:VertexOutput):FragmentOutput -> %b41 {  # %input_1: 'input'
-  %b41 = block {
-    %surface_2:SurfaceInfo = call %GetSurfaceInfo, %input_1  # %surface_2: 'surface'
+%fragmentMain = @fragment func(%input_1:VertexOutput):FragmentOutput {  # %input_1: 'input'
+  $B41: {
+    %518:SurfaceInfo = call %GetSurfaceInfo, %input_1
+    %surface_2:SurfaceInfo = let %518  # %surface_2: 'surface'
     %Lo:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(0.0f)
-    %457:ptr<storage, f32, read> = access %globalLights, 2u
-    %458:f32 = load %457
-    %459:bool = gt %458, 0.0f
-    if %459 [t: %b42] {  # if_15
-      %b42 = block {  # true
+    %521:ptr<storage, f32, read> = access %globalLights, 2u
+    %522:f32 = load %521
+    %523:bool = gt %522, 0.0f
+    if %523 [t: $B42] {  # if_15
+      $B42: {  # true
         %light_2:ptr<function, PuctualLight, read_write> = var  # %light_2: 'light'
-        %461:ptr<function, u32, read_write> = access %light_2, 0u
-        store %461, 2u
-        %462:ptr<function, vec3<f32>, read_write> = access %light_2, 1u
-        %463:ptr<storage, vec3<f32>, read> = access %globalLights, 3u
-        %464:vec3<f32> = load %463
-        store %462, %464
-        %465:ptr<function, vec3<f32>, read_write> = access %light_2, 3u
-        %466:ptr<storage, vec3<f32>, read> = access %globalLights, 1u
-        %467:vec3<f32> = load %466
-        store %465, %467
-        %468:ptr<function, f32, read_write> = access %light_2, 4u
-        %469:ptr<storage, f32, read> = access %globalLights, 2u
-        %470:f32 = load %469
-        store %468, %470
-        %471:vec3<f32> = access %input_1, 1u
-        %lightVis:f32 = call %dirLightVisibility, %471
-        %473:vec3<f32> = load %Lo
-        %474:PuctualLight = load %light_2
-        %475:vec3<f32> = call %lightRadiance, %474, %surface_2
-        %476:vec3<f32> = mul %475, %lightVis
-        %477:vec3<f32> = add %473, %476
-        store %Lo, %477
+        %525:ptr<function, u32, read_write> = access %light_2, 0u
+        store %525, 2u
+        %526:ptr<function, vec3<f32>, read_write> = access %light_2, 1u
+        %527:ptr<storage, vec3<f32>, read> = access %globalLights, 3u
+        %528:vec3<f32> = load %527
+        store %526, %528
+        %529:ptr<function, vec3<f32>, read_write> = access %light_2, 3u
+        %530:ptr<storage, vec3<f32>, read> = access %globalLights, 1u
+        %531:vec3<f32> = load %530
+        store %529, %531
+        %532:ptr<function, f32, read_write> = access %light_2, 4u
+        %533:ptr<storage, f32, read> = access %globalLights, 2u
+        %534:f32 = load %533
+        store %532, %534
+        %535:vec3<f32> = access %input_1, 1u
+        %536:f32 = call %dirLightVisibility, %535
+        %lightVis:f32 = let %536
+        %538:vec3<f32> = load %Lo
+        %539:vec3<f32> = let %538
+        %540:PuctualLight = load %light_2
+        %541:vec3<f32> = call %lightRadiance, %540, %surface_2
+        %542:vec3<f32> = mul %541, %lightVis
+        %543:vec3<f32> = add %539, %542
+        store %Lo, %543
         exit_if  # if_15
       }
     }
-    %478:vec4<f32> = access %input_1, 0u
-    %clusterIndex:u32 = call %getClusterIndex, %478
-    %480:ptr<storage, u32, read> = access %clusterLights, 1u, %clusterIndex, 0u
-    %lightOffset:u32 = load %480
-    %482:ptr<storage, u32, read> = access %clusterLights, 1u, %clusterIndex, 1u
-    %lightCount:u32 = load %482
-    loop [i: %b43, b: %b44, c: %b45] {  # loop_3
-      %b43 = block {  # initializer
+    %544:vec4<f32> = access %input_1, 0u
+    %545:u32 = call %getClusterIndex, %544
+    %clusterIndex:u32 = let %545
+    %547:ptr<storage, u32, read> = access %clusterLights, 1u, %clusterIndex, 0u
+    %548:u32 = load %547
+    %lightOffset:u32 = let %548
+    %550:ptr<storage, u32, read> = access %clusterLights, 1u, %clusterIndex, 1u
+    %551:u32 = load %550
+    %lightCount:u32 = let %551
+    loop [i: $B43, b: $B44, c: $B45] {  # loop_3
+      $B43: {  # initializer
         %lightIndex_1:ptr<function, u32, read_write> = var, 0u  # %lightIndex_1: 'lightIndex'
-        next_iteration %b44
+        next_iteration  # -> $B44
       }
-      %b44 = block {  # body
-        %485:u32 = load %lightIndex_1
-        %486:bool = lt %485, %lightCount
-        if %486 [t: %b46, f: %b47] {  # if_16
-          %b46 = block {  # true
+      $B44: {  # body
+        %554:u32 = load %lightIndex_1
+        %555:bool = lt %554, %lightCount
+        if %555 [t: $B46, f: $B47] {  # if_16
+          $B46: {  # true
             exit_if  # if_16
           }
-          %b47 = block {  # false
+          $B47: {  # false
             exit_loop  # loop_3
           }
         }
-        %487:u32 = load %lightIndex_1
-        %488:u32 = add %lightOffset, %487
-        %489:ptr<storage, u32, read> = access %clusterLights, 2u, %488
-        %i_2:u32 = load %489  # %i_2: 'i'
+        %556:u32 = load %lightIndex_1
+        %557:u32 = add %lightOffset, %556
+        %558:ptr<storage, u32, read> = access %clusterLights, 2u, %557
+        %559:u32 = load %558
+        %i_2:u32 = let %559  # %i_2: 'i'
         %light_3:ptr<function, PuctualLight, read_write> = var  # %light_3: 'light'
-        %492:ptr<function, u32, read_write> = access %light_3, 0u
-        store %492, 0u
-        %493:ptr<function, vec3<f32>, read_write> = access %light_3, 1u
-        %494:ptr<storage, vec3<f32>, read> = access %globalLights, 5u, %i_2, 0u
-        %495:vec3<f32> = load %494
-        %496:vec3<f32> = swizzle %495, xyz
-        %497:vec3<f32> = access %input_1, 1u
-        %498:vec3<f32> = sub %496, %497
-        store %493, %498
-        %499:ptr<function, f32, read_write> = access %light_3, 2u
-        %500:ptr<storage, f32, read> = access %globalLights, 5u, %i_2, 1u
-        %501:f32 = load %500
-        store %499, %501
-        %502:ptr<function, vec3<f32>, read_write> = access %light_3, 3u
-        %503:ptr<storage, vec3<f32>, read> = access %globalLights, 5u, %i_2, 2u
-        %504:vec3<f32> = load %503
-        store %502, %504
-        %505:ptr<function, f32, read_write> = access %light_3, 4u
-        %506:ptr<storage, f32, read> = access %globalLights, 5u, %i_2, 3u
-        %507:f32 = load %506
-        store %505, %507
-        %508:vec3<f32> = access %input_1, 1u
-        %509:ptr<function, vec3<f32>, read_write> = access %light_3, 1u
-        %510:vec3<f32> = load %509
-        %lightVis_1:f32 = call %pointLightVisibility, %i_2, %508, %510  # %lightVis_1: 'lightVis'
-        %512:vec3<f32> = load %Lo
-        %513:PuctualLight = load %light_3
-        %514:vec3<f32> = call %lightRadiance, %513, %surface_2
-        %515:vec3<f32> = mul %514, %lightVis_1
-        %516:vec3<f32> = add %512, %515
-        store %Lo, %516
-        continue %b45
+        %562:ptr<function, u32, read_write> = access %light_3, 0u
+        store %562, 0u
+        %563:ptr<function, vec3<f32>, read_write> = access %light_3, 1u
+        %564:ptr<storage, vec3<f32>, read> = access %globalLights, 5u, %i_2, 0u
+        %565:vec3<f32> = load %564
+        %566:vec3<f32> = swizzle %565, xyz
+        %567:vec3<f32> = access %input_1, 1u
+        %568:vec3<f32> = sub %566, %567
+        store %563, %568
+        %569:ptr<function, f32, read_write> = access %light_3, 2u
+        %570:ptr<storage, f32, read> = access %globalLights, 5u, %i_2, 1u
+        %571:f32 = load %570
+        store %569, %571
+        %572:ptr<function, vec3<f32>, read_write> = access %light_3, 3u
+        %573:ptr<storage, vec3<f32>, read> = access %globalLights, 5u, %i_2, 2u
+        %574:vec3<f32> = load %573
+        store %572, %574
+        %575:ptr<function, f32, read_write> = access %light_3, 4u
+        %576:ptr<storage, f32, read> = access %globalLights, 5u, %i_2, 3u
+        %577:f32 = load %576
+        store %575, %577
+        %578:vec3<f32> = access %input_1, 1u
+        %579:ptr<function, vec3<f32>, read_write> = access %light_3, 1u
+        %580:vec3<f32> = load %579
+        %581:f32 = call %pointLightVisibility, %i_2, %578, %580
+        %lightVis_1:f32 = let %581  # %lightVis_1: 'lightVis'
+        %583:vec3<f32> = load %Lo
+        %584:vec3<f32> = let %583
+        %585:PuctualLight = load %light_3
+        %586:vec3<f32> = call %lightRadiance, %585, %surface_2
+        %587:vec3<f32> = mul %586, %lightVis_1
+        %588:vec3<f32> = add %584, %587
+        store %Lo, %588
+        continue  # -> $B45
       }
-      %b45 = block {  # continuing
-        %517:u32 = load %lightIndex_1
-        %518:u32 = add %517, 1u
-        store %lightIndex_1, %518
-        next_iteration %b44
+      $B45: {  # continuing
+        %589:u32 = load %lightIndex_1
+        %590:u32 = add %589, 1u
+        store %lightIndex_1, %590
+        next_iteration  # -> $B44
       }
     }
-    %519:vec4<f32> = access %input_1, 0u
-    %520:vec2<f32> = swizzle %519, xy
-    %521:texture_2d<f32> = load %ssaoTexture
-    %522:vec2<u32> = textureDimensions %521
-    %523:vec2<u32> = swizzle %522, xy
-    %524:vec2<f32> = convert %523
-    %ssaoCoord:vec2<f32> = div %520, %524
-    %526:texture_2d<f32> = load %ssaoTexture
-    %527:sampler = load %defaultSampler
-    %528:vec4<f32> = textureSample %526, %527, %ssaoCoord
-    %ssaoFactor:f32 = access %528, 0u
-    %530:ptr<storage, vec3<f32>, read> = access %globalLights, 0u
-    %531:vec3<f32> = load %530
-    %532:vec3<f32> = access %surface_2, 1u
-    %533:vec3<f32> = mul %531, %532
-    %534:f32 = access %surface_2, 6u
-    %535:vec3<f32> = mul %533, %534
-    %ambient:vec3<f32> = mul %535, %ssaoFactor
-    %537:vec3<f32> = load %Lo
-    %538:vec3<f32> = add %537, %ambient
-    %539:vec3<f32> = access %surface_2, 7u
-    %540:vec3<f32> = add %538, %539
-    %color:vec3<f32> = call %linearTosRGB, %540
+    %591:vec4<f32> = access %input_1, 0u
+    %592:vec2<f32> = swizzle %591, xy
+    %593:texture_2d<f32> = load %ssaoTexture
+    %594:vec2<u32> = textureDimensions %593
+    %595:vec2<u32> = swizzle %594, xy
+    %596:vec2<f32> = convert %595
+    %597:vec2<f32> = div %592, %596
+    %ssaoCoord:vec2<f32> = let %597
+    %599:texture_2d<f32> = load %ssaoTexture
+    %600:sampler = load %defaultSampler
+    %601:vec4<f32> = textureSample %599, %600, %ssaoCoord
+    %602:f32 = access %601, 0u
+    %ssaoFactor:f32 = let %602
+    %604:ptr<storage, vec3<f32>, read> = access %globalLights, 0u
+    %605:vec3<f32> = load %604
+    %606:vec3<f32> = access %surface_2, 1u
+    %607:vec3<f32> = mul %605, %606
+    %608:f32 = access %surface_2, 6u
+    %609:vec3<f32> = mul %607, %608
+    %610:vec3<f32> = mul %609, %ssaoFactor
+    %ambient:vec3<f32> = let %610
+    %612:vec3<f32> = load %Lo
+    %613:vec3<f32> = add %612, %ambient
+    %614:vec3<f32> = access %surface_2, 7u
+    %615:vec3<f32> = add %613, %614
+    %616:vec3<f32> = call %linearTosRGB, %615
+    %color:vec3<f32> = let %616
     %out:ptr<function, FragmentOutput, read_write> = var
-    %543:ptr<function, vec4<f32>, read_write> = access %out, 0u
-    %544:f32 = access %surface_2, 0u, 3u
-    %545:vec4<f32> = construct %color, %544
-    store %543, %545
-    %546:ptr<function, vec4<f32>, read_write> = access %out, 1u
-    %547:vec3<f32> = access %surface_2, 7u
-    %548:f32 = access %surface_2, 0u, 3u
-    %549:vec4<f32> = construct %547, %548
-    store %546, %549
-    %550:FragmentOutput = load %out
-    ret %550
+    %619:ptr<function, vec4<f32>, read_write> = access %out, 0u
+    %620:f32 = access %surface_2, 0u, 3u
+    %621:vec4<f32> = construct %color, %620
+    store %619, %621
+    %622:ptr<function, vec4<f32>, read_write> = access %out, 1u
+    %623:vec3<f32> = access %surface_2, 7u
+    %624:f32 = access %surface_2, 0u, 3u
+    %625:vec4<f32> = construct %623, %624
+    store %622, %625
+    %626:FragmentOutput = load %out
+    ret %626
+  }
+}
+%tint_f32_to_u32 = func(%value:f32):u32 {
+  $B48: {
+    %628:u32 = convert %value
+    %629:bool = gte %value, 0.0f
+    %630:u32 = select 0u, %628, %629
+    %631:bool = lte %value, 4294967040.0f
+    %632:u32 = select 4294967295u, %630, %631
+    ret %632
   }
 }
 
diff --git a/test/tint/benchmark/skinned-shadowed-pbr-vertex.wgsl.expected.ir.msl b/test/tint/benchmark/skinned-shadowed-pbr-vertex.wgsl.expected.ir.msl
index 0f66a0f..c421b97 100644
--- a/test/tint/benchmark/skinned-shadowed-pbr-vertex.wgsl.expected.ir.msl
+++ b/test/tint/benchmark/skinned-shadowed-pbr-vertex.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Camera = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Camera = struct @align(16) {
   projection:mat4x4<f32> @offset(0)
   inverseProjection:mat4x4<f32> @offset(64)
   view:mat4x4<f32> @offset(128)
@@ -42,14 +42,14 @@
   bitangent:vec3<f32> @offset(128), @location(8)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %camera:ptr<uniform, Camera, read> = var @binding_point(0, 0)
   %joint:ptr<storage, Joints, read> = var @binding_point(0, 1)
   %inverseBind:ptr<storage, Joints, read> = var @binding_point(0, 2)
 }
 
-%getInstanceMatrix = func(%input:VertexInput):mat4x4<f32> -> %b2 {
-  %b2 = block {
+%getInstanceMatrix = func(%input:VertexInput):mat4x4<f32> {
+  $B2: {
     %6:vec4<f32> = access %input, 6u
     %7:vec4<f32> = access %input, 7u
     %8:vec4<f32> = access %input, 8u
@@ -58,107 +58,114 @@
     ret %10
   }
 }
-%getSkinMatrix = func(%input_1:VertexInput):mat4x4<f32> -> %b3 {  # %input_1: 'input'
-  %b3 = block {
+%getSkinMatrix = func(%input_1:VertexInput):mat4x4<f32> {  # %input_1: 'input'
+  $B3: {
     %13:u32 = access %input_1, 4u, 0u
     %14:ptr<storage, mat4x4<f32>, read> = access %joint, 0u, %13
     %15:mat4x4<f32> = load %14
     %16:u32 = access %input_1, 4u, 0u
     %17:ptr<storage, mat4x4<f32>, read> = access %inverseBind, 0u, %16
     %18:mat4x4<f32> = load %17
-    %joint0:mat4x4<f32> = mul %15, %18
-    %20:u32 = access %input_1, 4u, 1u
-    %21:ptr<storage, mat4x4<f32>, read> = access %joint, 0u, %20
-    %22:mat4x4<f32> = load %21
-    %23:u32 = access %input_1, 4u, 1u
-    %24:ptr<storage, mat4x4<f32>, read> = access %inverseBind, 0u, %23
-    %25:mat4x4<f32> = load %24
-    %joint1:mat4x4<f32> = mul %22, %25
-    %27:u32 = access %input_1, 4u, 2u
-    %28:ptr<storage, mat4x4<f32>, read> = access %joint, 0u, %27
-    %29:mat4x4<f32> = load %28
-    %30:u32 = access %input_1, 4u, 2u
-    %31:ptr<storage, mat4x4<f32>, read> = access %inverseBind, 0u, %30
-    %32:mat4x4<f32> = load %31
-    %joint2:mat4x4<f32> = mul %29, %32
-    %34:u32 = access %input_1, 4u, 3u
-    %35:ptr<storage, mat4x4<f32>, read> = access %joint, 0u, %34
-    %36:mat4x4<f32> = load %35
+    %19:mat4x4<f32> = mul %15, %18
+    %joint0:mat4x4<f32> = let %19
+    %21:u32 = access %input_1, 4u, 1u
+    %22:ptr<storage, mat4x4<f32>, read> = access %joint, 0u, %21
+    %23:mat4x4<f32> = load %22
+    %24:u32 = access %input_1, 4u, 1u
+    %25:ptr<storage, mat4x4<f32>, read> = access %inverseBind, 0u, %24
+    %26:mat4x4<f32> = load %25
+    %27:mat4x4<f32> = mul %23, %26
+    %joint1:mat4x4<f32> = let %27
+    %29:u32 = access %input_1, 4u, 2u
+    %30:ptr<storage, mat4x4<f32>, read> = access %joint, 0u, %29
+    %31:mat4x4<f32> = load %30
+    %32:u32 = access %input_1, 4u, 2u
+    %33:ptr<storage, mat4x4<f32>, read> = access %inverseBind, 0u, %32
+    %34:mat4x4<f32> = load %33
+    %35:mat4x4<f32> = mul %31, %34
+    %joint2:mat4x4<f32> = let %35
     %37:u32 = access %input_1, 4u, 3u
-    %38:ptr<storage, mat4x4<f32>, read> = access %inverseBind, 0u, %37
+    %38:ptr<storage, mat4x4<f32>, read> = access %joint, 0u, %37
     %39:mat4x4<f32> = load %38
-    %joint3:mat4x4<f32> = mul %36, %39
-    %41:f32 = access %input_1, 5u, 0u
-    %42:mat4x4<f32> = mul %joint0, %41
-    %43:f32 = access %input_1, 5u, 1u
-    %44:mat4x4<f32> = mul %joint1, %43
-    %45:mat4x4<f32> = add %42, %44
-    %46:f32 = access %input_1, 5u, 2u
-    %47:mat4x4<f32> = mul %joint2, %46
-    %48:mat4x4<f32> = add %45, %47
-    %49:f32 = access %input_1, 5u, 3u
-    %50:mat4x4<f32> = mul %joint3, %49
-    %skinMatrix:mat4x4<f32> = add %48, %50
+    %40:u32 = access %input_1, 4u, 3u
+    %41:ptr<storage, mat4x4<f32>, read> = access %inverseBind, 0u, %40
+    %42:mat4x4<f32> = load %41
+    %43:mat4x4<f32> = mul %39, %42
+    %joint3:mat4x4<f32> = let %43
+    %45:f32 = access %input_1, 5u, 0u
+    %46:mat4x4<f32> = mul %joint0, %45
+    %47:f32 = access %input_1, 5u, 1u
+    %48:mat4x4<f32> = mul %joint1, %47
+    %49:mat4x4<f32> = add %46, %48
+    %50:f32 = access %input_1, 5u, 2u
+    %51:mat4x4<f32> = mul %joint2, %50
+    %52:mat4x4<f32> = add %49, %51
+    %53:f32 = access %input_1, 5u, 3u
+    %54:mat4x4<f32> = mul %joint3, %53
+    %55:mat4x4<f32> = add %52, %54
+    %skinMatrix:mat4x4<f32> = let %55
     ret %skinMatrix
   }
 }
-%vertexMain = @vertex func(%input_2:VertexInput):VertexOutput -> %b4 {  # %input_2: 'input'
-  %b4 = block {
+%vertexMain = @vertex func(%input_2:VertexInput):VertexOutput {  # %input_2: 'input'
+  $B4: {
     %output:ptr<function, VertexOutput, read_write> = var
-    %modelMatrix:mat4x4<f32> = call %getSkinMatrix, %input_2
-    %56:ptr<function, vec3<f32>, read_write> = access %output, 7u
-    %57:vec3<f32> = access %input_2, 1u
-    %58:vec4<f32> = construct %57, 0.0f
-    %59:vec4<f32> = mul %modelMatrix, %58
-    %60:vec3<f32> = swizzle %59, xyz
-    %61:vec3<f32> = normalize %60
-    store %56, %61
-    %62:ptr<function, vec3<f32>, read_write> = access %output, 8u
-    %63:vec4<f32> = access %input_2, 2u
-    %64:vec3<f32> = swizzle %63, xyz
-    %65:vec4<f32> = construct %64, 0.0f
-    %66:vec4<f32> = mul %modelMatrix, %65
-    %67:vec3<f32> = swizzle %66, xyz
-    %68:vec3<f32> = normalize %67
-    store %62, %68
-    %69:ptr<function, vec3<f32>, read_write> = access %output, 9u
-    %70:ptr<function, vec3<f32>, read_write> = access %output, 7u
-    %71:vec3<f32> = load %70
-    %72:ptr<function, vec3<f32>, read_write> = access %output, 8u
-    %73:vec3<f32> = load %72
-    %74:vec3<f32> = cross %71, %73
-    %75:f32 = access %input_2, 2u, 3u
-    %76:vec3<f32> = mul %74, %75
-    store %69, %76
-    %77:ptr<function, vec4<f32>, read_write> = access %output, 5u
-    store %77, vec4<f32>(1.0f)
-    %78:ptr<function, vec2<f32>, read_write> = access %output, 3u
-    %79:vec2<f32> = access %input_2, 3u
-    store %78, %79
-    %80:ptr<function, vec4<f32>, read_write> = access %output, 6u
-    %81:vec4<f32> = access %input_2, 10u
-    store %80, %81
-    %82:vec4<f32> = access %input_2, 0u
-    %modelPos:vec4<f32> = mul %modelMatrix, %82
-    %84:ptr<function, vec3<f32>, read_write> = access %output, 1u
-    %85:vec3<f32> = swizzle %modelPos, xyz
+    %60:mat4x4<f32> = call %getSkinMatrix, %input_2
+    %modelMatrix:mat4x4<f32> = let %60
+    %62:ptr<function, vec3<f32>, read_write> = access %output, 7u
+    %63:vec3<f32> = access %input_2, 1u
+    %64:vec4<f32> = construct %63, 0.0f
+    %65:vec4<f32> = mul %modelMatrix, %64
+    %66:vec3<f32> = swizzle %65, xyz
+    %67:vec3<f32> = normalize %66
+    store %62, %67
+    %68:ptr<function, vec3<f32>, read_write> = access %output, 8u
+    %69:vec4<f32> = access %input_2, 2u
+    %70:vec3<f32> = swizzle %69, xyz
+    %71:vec4<f32> = construct %70, 0.0f
+    %72:vec4<f32> = mul %modelMatrix, %71
+    %73:vec3<f32> = swizzle %72, xyz
+    %74:vec3<f32> = normalize %73
+    store %68, %74
+    %75:ptr<function, vec3<f32>, read_write> = access %output, 9u
+    %76:ptr<function, vec3<f32>, read_write> = access %output, 7u
+    %77:vec3<f32> = load %76
+    %78:ptr<function, vec3<f32>, read_write> = access %output, 8u
+    %79:vec3<f32> = load %78
+    %80:vec3<f32> = cross %77, %79
+    %81:f32 = access %input_2, 2u, 3u
+    %82:vec3<f32> = mul %80, %81
+    store %75, %82
+    %83:ptr<function, vec4<f32>, read_write> = access %output, 5u
+    store %83, vec4<f32>(1.0f)
+    %84:ptr<function, vec2<f32>, read_write> = access %output, 3u
+    %85:vec2<f32> = access %input_2, 3u
     store %84, %85
-    %86:ptr<function, vec3<f32>, read_write> = access %output, 2u
-    %87:ptr<uniform, vec3<f32>, read> = access %camera, 3u
-    %88:vec3<f32> = load %87
-    %89:vec3<f32> = swizzle %modelPos, xyz
-    %90:vec3<f32> = sub %88, %89
-    store %86, %90
-    %91:ptr<function, vec4<f32>, read_write> = access %output, 0u
-    %92:ptr<uniform, mat4x4<f32>, read> = access %camera, 0u
-    %93:mat4x4<f32> = load %92
-    %94:ptr<uniform, mat4x4<f32>, read> = access %camera, 2u
-    %95:mat4x4<f32> = load %94
-    %96:mat4x4<f32> = mul %93, %95
-    %97:vec4<f32> = mul %96, %modelPos
-    store %91, %97
-    %98:VertexOutput = load %output
-    ret %98
+    %86:ptr<function, vec4<f32>, read_write> = access %output, 6u
+    %87:vec4<f32> = access %input_2, 10u
+    store %86, %87
+    %88:vec4<f32> = access %input_2, 0u
+    %89:vec4<f32> = mul %modelMatrix, %88
+    %modelPos:vec4<f32> = let %89
+    %91:ptr<function, vec3<f32>, read_write> = access %output, 1u
+    %92:vec3<f32> = swizzle %modelPos, xyz
+    store %91, %92
+    %93:ptr<function, vec3<f32>, read_write> = access %output, 2u
+    %94:ptr<uniform, vec3<f32>, read> = access %camera, 3u
+    %95:vec3<f32> = load %94
+    %96:vec3<f32> = swizzle %modelPos, xyz
+    %97:vec3<f32> = sub %95, %96
+    store %93, %97
+    %98:ptr<function, vec4<f32>, read_write> = access %output, 0u
+    %99:ptr<uniform, mat4x4<f32>, read> = access %camera, 0u
+    %100:mat4x4<f32> = load %99
+    %101:ptr<uniform, mat4x4<f32>, read> = access %camera, 2u
+    %102:mat4x4<f32> = load %101
+    %103:mat4x4<f32> = mul %100, %102
+    %104:vec4<f32> = mul %103, %modelPos
+    store %98, %104
+    %105:VertexOutput = load %output
+    ret %105
   }
 }
 
diff --git a/test/tint/benchmark/uniformity-analysis-pointer-parameters.wgsl.expected.ir.msl b/test/tint/benchmark/uniformity-analysis-pointer-parameters.wgsl.expected.ir.msl
index 567c382..a66251b 100644
--- a/test/tint/benchmark/uniformity-analysis-pointer-parameters.wgsl.expected.ir.msl
+++ b/test/tint/benchmark/uniformity-analysis-pointer-parameters.wgsl.expected.ir.msl
@@ -1,9 +1,1681 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:270 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+void foo(thread int* const p0, thread int* const p1, thread int* const p2, thread int* const p3, thread int* const p4, thread int* const p5, thread int* const p6, thread int* const p7, thread int* const p8, thread int* const p9, thread int* const p10, thread int* const p11, thread int* const p12, thread int* const p13, thread int* const p14, thread int* const p15, thread int* const p16, thread int* const p17, thread int* const p18, thread int* const p19, thread int* const p20, thread int* const p21, thread int* const p22, thread int* const p23, thread int* const p24, thread int* const p25, thread int* const p26, thread int* const p27, thread int* const p28, thread int* const p29, thread int* const p30, thread int* const p31, thread int* const p32, thread int* const p33, thread int* const p34, thread int* const p35, thread int* const p36, thread int* const p37, thread int* const p38, thread int* const p39, thread int* const p40, thread int* const p41, thread int* const p42, thread int* const p43, thread int* const p44, thread int* const p45, thread int* const p46, thread int* const p47, thread int* const p48, thread int* const p49, thread int* const p50, thread int* const p51, thread int* const p52, thread int* const p53, thread int* const p54, thread int* const p55, thread int* const p56, thread int* const p57, thread int* const p58, thread int* const p59, thread int* const p60, thread int* const p61, thread int* const p62, thread int* const p63, thread int* const p64, thread int* const p65, thread int* const p66, thread int* const p67, thread int* const p68, thread int* const p69, thread int* const p70, thread int* const p71, thread int* const p72, thread int* const p73, thread int* const p74, thread int* const p75, thread int* const p76, thread int* const p77, thread int* const p78, thread int* const p79, thread int* const p80, thread int* const p81, thread int* const p82, thread int* const p83, thread int* const p84, thread int* const p85, thread int* const p86, thread int* const p87, thread int* const p88, thread int* const p89, thread int* const p90, thread int* const p91, thread int* const p92, thread int* const p93, thread int* const p94, thread int* const p95, thread int* const p96, thread int* const p97, thread int* const p98, thread int* const p99, thread int* const p100, thread int* const p101, thread int* const p102, thread int* const p103, thread int* const p104, thread int* const p105, thread int* const p106, thread int* const p107, thread int* const p108, thread int* const p109, thread int* const p110, thread int* const p111, thread int* const p112, thread int* const p113, thread int* const p114, thread int* const p115, thread int* const p116, thread int* const p117, thread int* const p118, thread int* const p119, thread int* const p120, thread int* const p121, thread int* const p122, thread int* const p123, thread int* const p124, thread int* const p125, thread int* const p126, thread int* const p127, thread int* const p128, thread int* const p129, thread int* const p130, thread int* const p131, thread int* const p132, thread int* const p133, thread int* const p134, thread int* const p135, thread int* const p136, thread int* const p137, thread int* const p138, thread int* const p139, thread int* const p140, thread int* const p141, thread int* const p142, thread int* const p143, thread int* const p144, thread int* const p145, thread int* const p146, thread int* const p147, thread int* const p148, thread int* const p149, thread int* const p150, thread int* const p151, thread int* const p152, thread int* const p153, thread int* const p154, thread int* const p155, thread int* const p156, thread int* const p157, thread int* const p158, thread int* const p159, thread int* const p160, thread int* const p161, thread int* const p162, thread int* const p163, thread int* const p164, thread int* const p165, thread int* const p166, thread int* const p167, thread int* const p168, thread int* const p169, thread int* const p170, thread int* const p171, thread int* const p172, thread int* const p173, thread int* const p174, thread int* const p175, thread int* const p176, thread int* const p177, thread int* const p178, thread int* const p179, thread int* const p180, thread int* const p181, thread int* const p182, thread int* const p183, thread int* const p184, thread int* const p185, thread int* const p186, thread int* const p187, thread int* const p188, thread int* const p189, thread int* const p190, thread int* const p191, thread int* const p192, thread int* const p193, thread int* const p194, thread int* const p195, thread int* const p196, thread int* const p197, thread int* const p198, thread int* const p199, thread int* const p200, thread int* const p201, thread int* const p202, thread int* const p203, thread int* const p204, thread int* const p205, thread int* const p206, thread int* const p207, thread int* const p208, thread int* const p209, thread int* const p210, thread int* const p211, thread int* const p212, thread int* const p213, thread int* const p214, thread int* const p215, thread int* const p216, thread int* const p217, thread int* const p218, thread int* const p219, thread int* const p220, thread int* const p221, thread int* const p222, thread int* const p223, thread int* const p224, thread int* const p225, thread int* const p226, thread int* const p227, thread int* const p228, thread int* const p229, thread int* const p230, thread int* const p231, thread int* const p232, thread int* const p233, thread int* const p234, thread int* const p235, thread int* const p236, thread int* const p237, thread int* const p238, thread int* const p239, thread int* const p240, thread int* const p241, thread int* const p242, thread int* const p243, thread int* const p244, thread int* const p245, thread int* const p246, thread int* const p247, thread int* const p248, thread int* const p249, thread int* const p250, thread int* const p251, thread int* const p252, thread int* const p253, thread int* const p254) {
+  int rhs = (((((((p0 + p1) + p2) + p3) + p4) + p5) + p6) + p7);
+  rhs = (rhs + (((((((p8 + p9) + p10) + p11) + p12) + p13) + p14) + p15));
+  rhs = (rhs + (((((((p16 + p17) + p18) + p19) + p20) + p21) + p22) + p23));
+  rhs = (rhs + (((((((p24 + p25) + p26) + p27) + p28) + p29) + p30) + p31));
+  rhs = (rhs + (((((((p32 + p33) + p34) + p35) + p36) + p37) + p38) + p39));
+  rhs = (rhs + (((((((p40 + p41) + p42) + p43) + p44) + p45) + p46) + p47));
+  rhs = (rhs + (((((((p48 + p49) + p50) + p51) + p52) + p53) + p54) + p55));
+  rhs = (rhs + (((((((p56 + p57) + p58) + p59) + p60) + p61) + p62) + p63));
+  rhs = (rhs + (((((((p64 + p65) + p66) + p67) + p68) + p69) + p70) + p71));
+  rhs = (rhs + (((((((p72 + p73) + p74) + p75) + p76) + p77) + p78) + p79));
+  rhs = (rhs + (((((((p80 + p81) + p82) + p83) + p84) + p85) + p86) + p87));
+  rhs = (rhs + (((((((p88 + p89) + p90) + p91) + p92) + p93) + p94) + p95));
+  rhs = (rhs + (((((((p96 + p97) + p98) + p99) + p100) + p101) + p102) + p103));
+  rhs = (rhs + (((((((p104 + p105) + p106) + p107) + p108) + p109) + p110) + p111));
+  rhs = (rhs + (((((((p112 + p113) + p114) + p115) + p116) + p117) + p118) + p119));
+  rhs = (rhs + (((((((p120 + p121) + p122) + p123) + p124) + p125) + p126) + p127));
+  rhs = (rhs + (((((((p128 + p129) + p130) + p131) + p132) + p133) + p134) + p135));
+  rhs = (rhs + (((((((p136 + p137) + p138) + p139) + p140) + p141) + p142) + p143));
+  rhs = (rhs + (((((((p144 + p145) + p146) + p147) + p148) + p149) + p150) + p151));
+  rhs = (rhs + (((((((p152 + p153) + p154) + p155) + p156) + p157) + p158) + p159));
+  rhs = (rhs + (((((((p160 + p161) + p162) + p163) + p164) + p165) + p166) + p167));
+  rhs = (rhs + (((((((p168 + p169) + p170) + p171) + p172) + p173) + p174) + p175));
+  rhs = (rhs + (((((((p176 + p177) + p178) + p179) + p180) + p181) + p182) + p183));
+  rhs = (rhs + (((((((p184 + p185) + p186) + p187) + p188) + p189) + p190) + p191));
+  rhs = (rhs + (((((((p192 + p193) + p194) + p195) + p196) + p197) + p198) + p199));
+  rhs = (rhs + (((((((p200 + p201) + p202) + p203) + p204) + p205) + p206) + p207));
+  rhs = (rhs + (((((((p208 + p209) + p210) + p211) + p212) + p213) + p214) + p215));
+  rhs = (rhs + (((((((p216 + p217) + p218) + p219) + p220) + p221) + p222) + p223));
+  rhs = (rhs + (((((((p224 + p225) + p226) + p227) + p228) + p229) + p230) + p231));
+  rhs = (rhs + (((((((p232 + p233) + p234) + p235) + p236) + p237) + p238) + p239));
+  rhs = (rhs + (((((((p240 + p241) + p242) + p243) + p244) + p245) + p246) + p247));
+  rhs = (rhs + ((((((p248 + p249) + p250) + p251) + p252) + p253) + p254));
+  p1 = rhs;
+  p2 = rhs;
+  p3 = rhs;
+  p4 = rhs;
+  p5 = rhs;
+  p6 = rhs;
+  p7 = rhs;
+  p8 = rhs;
+  p9 = rhs;
+  p10 = rhs;
+  p11 = rhs;
+  p12 = rhs;
+  p13 = rhs;
+  p14 = rhs;
+  p15 = rhs;
+  p16 = rhs;
+  p17 = rhs;
+  p18 = rhs;
+  p19 = rhs;
+  p20 = rhs;
+  p21 = rhs;
+  p22 = rhs;
+  p23 = rhs;
+  p24 = rhs;
+  p25 = rhs;
+  p26 = rhs;
+  p27 = rhs;
+  p28 = rhs;
+  p29 = rhs;
+  p30 = rhs;
+  p31 = rhs;
+  p32 = rhs;
+  p33 = rhs;
+  p34 = rhs;
+  p35 = rhs;
+  p36 = rhs;
+  p37 = rhs;
+  p38 = rhs;
+  p39 = rhs;
+  p40 = rhs;
+  p41 = rhs;
+  p42 = rhs;
+  p43 = rhs;
+  p44 = rhs;
+  p45 = rhs;
+  p46 = rhs;
+  p47 = rhs;
+  p48 = rhs;
+  p49 = rhs;
+  p50 = rhs;
+  p51 = rhs;
+  p52 = rhs;
+  p53 = rhs;
+  p54 = rhs;
+  p55 = rhs;
+  p56 = rhs;
+  p57 = rhs;
+  p58 = rhs;
+  p59 = rhs;
+  p60 = rhs;
+  p61 = rhs;
+  p62 = rhs;
+  p63 = rhs;
+  p64 = rhs;
+  p65 = rhs;
+  p66 = rhs;
+  p67 = rhs;
+  p68 = rhs;
+  p69 = rhs;
+  p70 = rhs;
+  p71 = rhs;
+  p72 = rhs;
+  p73 = rhs;
+  p74 = rhs;
+  p75 = rhs;
+  p76 = rhs;
+  p77 = rhs;
+  p78 = rhs;
+  p79 = rhs;
+  p80 = rhs;
+  p81 = rhs;
+  p82 = rhs;
+  p83 = rhs;
+  p84 = rhs;
+  p85 = rhs;
+  p86 = rhs;
+  p87 = rhs;
+  p88 = rhs;
+  p89 = rhs;
+  p90 = rhs;
+  p91 = rhs;
+  p92 = rhs;
+  p93 = rhs;
+  p94 = rhs;
+  p95 = rhs;
+  p96 = rhs;
+  p97 = rhs;
+  p98 = rhs;
+  p99 = rhs;
+  p100 = rhs;
+  p101 = rhs;
+  p102 = rhs;
+  p103 = rhs;
+  p104 = rhs;
+  p105 = rhs;
+  p106 = rhs;
+  p107 = rhs;
+  p108 = rhs;
+  p109 = rhs;
+  p110 = rhs;
+  p111 = rhs;
+  p112 = rhs;
+  p113 = rhs;
+  p114 = rhs;
+  p115 = rhs;
+  p116 = rhs;
+  p117 = rhs;
+  p118 = rhs;
+  p119 = rhs;
+  p120 = rhs;
+  p121 = rhs;
+  p122 = rhs;
+  p123 = rhs;
+  p124 = rhs;
+  p125 = rhs;
+  p126 = rhs;
+  p127 = rhs;
+  p128 = rhs;
+  p129 = rhs;
+  p130 = rhs;
+  p131 = rhs;
+  p132 = rhs;
+  p133 = rhs;
+  p134 = rhs;
+  p135 = rhs;
+  p136 = rhs;
+  p137 = rhs;
+  p138 = rhs;
+  p139 = rhs;
+  p140 = rhs;
+  p141 = rhs;
+  p142 = rhs;
+  p143 = rhs;
+  p144 = rhs;
+  p145 = rhs;
+  p146 = rhs;
+  p147 = rhs;
+  p148 = rhs;
+  p149 = rhs;
+  p150 = rhs;
+  p151 = rhs;
+  p152 = rhs;
+  p153 = rhs;
+  p154 = rhs;
+  p155 = rhs;
+  p156 = rhs;
+  p157 = rhs;
+  p158 = rhs;
+  p159 = rhs;
+  p160 = rhs;
+  p161 = rhs;
+  p162 = rhs;
+  p163 = rhs;
+  p164 = rhs;
+  p165 = rhs;
+  p166 = rhs;
+  p167 = rhs;
+  p168 = rhs;
+  p169 = rhs;
+  p170 = rhs;
+  p171 = rhs;
+  p172 = rhs;
+  p173 = rhs;
+  p174 = rhs;
+  p175 = rhs;
+  p176 = rhs;
+  p177 = rhs;
+  p178 = rhs;
+  p179 = rhs;
+  p180 = rhs;
+  p181 = rhs;
+  p182 = rhs;
+  p183 = rhs;
+  p184 = rhs;
+  p185 = rhs;
+  p186 = rhs;
+  p187 = rhs;
+  p188 = rhs;
+  p189 = rhs;
+  p190 = rhs;
+  p191 = rhs;
+  p192 = rhs;
+  p193 = rhs;
+  p194 = rhs;
+  p195 = rhs;
+  p196 = rhs;
+  p197 = rhs;
+  p198 = rhs;
+  p199 = rhs;
+  p200 = rhs;
+  p201 = rhs;
+  p202 = rhs;
+  p203 = rhs;
+  p204 = rhs;
+  p205 = rhs;
+  p206 = rhs;
+  p207 = rhs;
+  p208 = rhs;
+  p209 = rhs;
+  p210 = rhs;
+  p211 = rhs;
+  p212 = rhs;
+  p213 = rhs;
+  p214 = rhs;
+  p215 = rhs;
+  p216 = rhs;
+  p217 = rhs;
+  p218 = rhs;
+  p219 = rhs;
+  p220 = rhs;
+  p221 = rhs;
+  p222 = rhs;
+  p223 = rhs;
+  p224 = rhs;
+  p225 = rhs;
+  p226 = rhs;
+  p227 = rhs;
+  p228 = rhs;
+  p229 = rhs;
+  p230 = rhs;
+  p231 = rhs;
+  p232 = rhs;
+  p233 = rhs;
+  p234 = rhs;
+  p235 = rhs;
+  p236 = rhs;
+  p237 = rhs;
+  p238 = rhs;
+  p239 = rhs;
+  p240 = rhs;
+  p241 = rhs;
+  p242 = rhs;
+  p243 = rhs;
+  p244 = rhs;
+  p245 = rhs;
+  p246 = rhs;
+  p247 = rhs;
+  p248 = rhs;
+  p249 = rhs;
+  p250 = rhs;
+  p251 = rhs;
+  p252 = rhs;
+  p253 = rhs;
+  p254 = rhs;
+}
+void tint_symbol() {
+  int v0 = 0;
+  int v1 = 0;
+  int v2 = 0;
+  int v3 = 0;
+  int v4 = 0;
+  int v5 = 0;
+  int v6 = 0;
+  int v7 = 0;
+  int v8 = 0;
+  int v9 = 0;
+  int v10 = 0;
+  int v11 = 0;
+  int v12 = 0;
+  int v13 = 0;
+  int v14 = 0;
+  int v15 = 0;
+  int v16 = 0;
+  int v17 = 0;
+  int v18 = 0;
+  int v19 = 0;
+  int v20 = 0;
+  int v21 = 0;
+  int v22 = 0;
+  int v23 = 0;
+  int v24 = 0;
+  int v25 = 0;
+  int v26 = 0;
+  int v27 = 0;
+  int v28 = 0;
+  int v29 = 0;
+  int v30 = 0;
+  int v31 = 0;
+  int v32 = 0;
+  int v33 = 0;
+  int v34 = 0;
+  int v35 = 0;
+  int v36 = 0;
+  int v37 = 0;
+  int v38 = 0;
+  int v39 = 0;
+  int v40 = 0;
+  int v41 = 0;
+  int v42 = 0;
+  int v43 = 0;
+  int v44 = 0;
+  int v45 = 0;
+  int v46 = 0;
+  int v47 = 0;
+  int v48 = 0;
+  int v49 = 0;
+  int v50 = 0;
+  int v51 = 0;
+  int v52 = 0;
+  int v53 = 0;
+  int v54 = 0;
+  int v55 = 0;
+  int v56 = 0;
+  int v57 = 0;
+  int v58 = 0;
+  int v59 = 0;
+  int v60 = 0;
+  int v61 = 0;
+  int v62 = 0;
+  int v63 = 0;
+  int v64 = 0;
+  int v65 = 0;
+  int v66 = 0;
+  int v67 = 0;
+  int v68 = 0;
+  int v69 = 0;
+  int v70 = 0;
+  int v71 = 0;
+  int v72 = 0;
+  int v73 = 0;
+  int v74 = 0;
+  int v75 = 0;
+  int v76 = 0;
+  int v77 = 0;
+  int v78 = 0;
+  int v79 = 0;
+  int v80 = 0;
+  int v81 = 0;
+  int v82 = 0;
+  int v83 = 0;
+  int v84 = 0;
+  int v85 = 0;
+  int v86 = 0;
+  int v87 = 0;
+  int v88 = 0;
+  int v89 = 0;
+  int v90 = 0;
+  int v91 = 0;
+  int v92 = 0;
+  int v93 = 0;
+  int v94 = 0;
+  int v95 = 0;
+  int v96 = 0;
+  int v97 = 0;
+  int v98 = 0;
+  int v99 = 0;
+  int v100 = 0;
+  int v101 = 0;
+  int v102 = 0;
+  int v103 = 0;
+  int v104 = 0;
+  int v105 = 0;
+  int v106 = 0;
+  int v107 = 0;
+  int v108 = 0;
+  int v109 = 0;
+  int v110 = 0;
+  int v111 = 0;
+  int v112 = 0;
+  int v113 = 0;
+  int v114 = 0;
+  int v115 = 0;
+  int v116 = 0;
+  int v117 = 0;
+  int v118 = 0;
+  int v119 = 0;
+  int v120 = 0;
+  int v121 = 0;
+  int v122 = 0;
+  int v123 = 0;
+  int v124 = 0;
+  int v125 = 0;
+  int v126 = 0;
+  int v127 = 0;
+  int v128 = 0;
+  int v129 = 0;
+  int v130 = 0;
+  int v131 = 0;
+  int v132 = 0;
+  int v133 = 0;
+  int v134 = 0;
+  int v135 = 0;
+  int v136 = 0;
+  int v137 = 0;
+  int v138 = 0;
+  int v139 = 0;
+  int v140 = 0;
+  int v141 = 0;
+  int v142 = 0;
+  int v143 = 0;
+  int v144 = 0;
+  int v145 = 0;
+  int v146 = 0;
+  int v147 = 0;
+  int v148 = 0;
+  int v149 = 0;
+  int v150 = 0;
+  int v151 = 0;
+  int v152 = 0;
+  int v153 = 0;
+  int v154 = 0;
+  int v155 = 0;
+  int v156 = 0;
+  int v157 = 0;
+  int v158 = 0;
+  int v159 = 0;
+  int v160 = 0;
+  int v161 = 0;
+  int v162 = 0;
+  int v163 = 0;
+  int v164 = 0;
+  int v165 = 0;
+  int v166 = 0;
+  int v167 = 0;
+  int v168 = 0;
+  int v169 = 0;
+  int v170 = 0;
+  int v171 = 0;
+  int v172 = 0;
+  int v173 = 0;
+  int v174 = 0;
+  int v175 = 0;
+  int v176 = 0;
+  int v177 = 0;
+  int v178 = 0;
+  int v179 = 0;
+  int v180 = 0;
+  int v181 = 0;
+  int v182 = 0;
+  int v183 = 0;
+  int v184 = 0;
+  int v185 = 0;
+  int v186 = 0;
+  int v187 = 0;
+  int v188 = 0;
+  int v189 = 0;
+  int v190 = 0;
+  int v191 = 0;
+  int v192 = 0;
+  int v193 = 0;
+  int v194 = 0;
+  int v195 = 0;
+  int v196 = 0;
+  int v197 = 0;
+  int v198 = 0;
+  int v199 = 0;
+  int v200 = 0;
+  int v201 = 0;
+  int v202 = 0;
+  int v203 = 0;
+  int v204 = 0;
+  int v205 = 0;
+  int v206 = 0;
+  int v207 = 0;
+  int v208 = 0;
+  int v209 = 0;
+  int v210 = 0;
+  int v211 = 0;
+  int v212 = 0;
+  int v213 = 0;
+  int v214 = 0;
+  int v215 = 0;
+  int v216 = 0;
+  int v217 = 0;
+  int v218 = 0;
+  int v219 = 0;
+  int v220 = 0;
+  int v221 = 0;
+  int v222 = 0;
+  int v223 = 0;
+  int v224 = 0;
+  int v225 = 0;
+  int v226 = 0;
+  int v227 = 0;
+  int v228 = 0;
+  int v229 = 0;
+  int v230 = 0;
+  int v231 = 0;
+  int v232 = 0;
+  int v233 = 0;
+  int v234 = 0;
+  int v235 = 0;
+  int v236 = 0;
+  int v237 = 0;
+  int v238 = 0;
+  int v239 = 0;
+  int v240 = 0;
+  int v241 = 0;
+  int v242 = 0;
+  int v243 = 0;
+  int v244 = 0;
+  int v245 = 0;
+  int v246 = 0;
+  int v247 = 0;
+  int v248 = 0;
+  int v249 = 0;
+  int v250 = 0;
+  int v251 = 0;
+  int v252 = 0;
+  int v253 = 0;
+  int v254 = 0;
+  foo(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62, v63, v64, v65, v66, v67, v68, v69, v70, v71, v72, v73, v74, v75, v76, v77, v78, v79, v80, v81, v82, v83, v84, v85, v86, v87, v88, v89, v90, v91, v92, v93, v94, v95, v96, v97, v98, v99, v100, v101, v102, v103, v104, v105, v106, v107, v108, v109, v110, v111, v112, v113, v114, v115, v116, v117, v118, v119, v120, v121, v122, v123, v124, v125, v126, v127, v128, v129, v130, v131, v132, v133, v134, v135, v136, v137, v138, v139, v140, v141, v142, v143, v144, v145, v146, v147, v148, v149, v150, v151, v152, v153, v154, v155, v156, v157, v158, v159, v160, v161, v162, v163, v164, v165, v166, v167, v168, v169, v170, v171, v172, v173, v174, v175, v176, v177, v178, v179, v180, v181, v182, v183, v184, v185, v186, v187, v188, v189, v190, v191, v192, v193, v194, v195, v196, v197, v198, v199, v200, v201, v202, v203, v204, v205, v206, v207, v208, v209, v210, v211, v212, v213, v214, v215, v216, v217, v218, v219, v220, v221, v222, v223, v224, v225, v226, v227, v228, v229, v230, v231, v232, v233, v234, v235, v236, v237, v238, v239, v240, v241, v242, v243, v244, v245, v246, v247, v248, v249, v250, v251, v252, v253, v254);
+  if ((v254 == 0)) {
+    threadgroup_barrier(mem_flags::mem_threadgroup);
+  }
+}
+program_source:5:23: error: invalid operands to binary expression ('int *const' and 'int *const')
+  int rhs = (((((((p0 + p1) + p2) + p3) + p4) + p5) + p6) + p7);
+                   ~~ ^ ~~
+program_source:6:26: error: invalid operands to binary expression ('int *const' and 'int *const')
+  rhs = (rhs + (((((((p8 + p9) + p10) + p11) + p12) + p13) + p14) + p15));
+                      ~~ ^ ~~
+program_source:7:27: error: invalid operands to binary expression ('int *const' and 'int *const')
+  rhs = (rhs + (((((((p16 + p17) + p18) + p19) + p20) + p21) + p22) + p23));
+                      ~~~ ^ ~~~
+program_source:8:27: error: invalid operands to binary expression ('int *const' and 'int *const')
+  rhs = (rhs + (((((((p24 + p25) + p26) + p27) + p28) + p29) + p30) + p31));
+                      ~~~ ^ ~~~
+program_source:9:27: error: invalid operands to binary expression ('int *const' and 'int *const')
+  rhs = (rhs + (((((((p32 + p33) + p34) + p35) + p36) + p37) + p38) + p39));
+                      ~~~ ^ ~~~
+program_source:10:27: error: invalid operands to binary expression ('int *const' and 'int *const')
+  rhs = (rhs + (((((((p40 + p41) + p42) + p43) + p44) + p45) + p46) + p47));
+                      ~~~ ^ ~~~
+program_source:11:27: error: invalid operands to binary expression ('int *const' and 'int *const')
+  rhs = (rhs + (((((((p48 + p49) + p50) + p51) + p52) + p53) + p54) + p55));
+                      ~~~ ^ ~~~
+program_source:12:27: error: invalid operands to binary expression ('int *const' and 'int *const')
+  rhs = (rhs + (((((((p56 + p57) + p58) + p59) + p60) + p61) + p62) + p63));
+                      ~~~ ^ ~~~
+program_source:13:27: error: invalid operands to binary expression ('int *const' and 'int *const')
+  rhs = (rhs + (((((((p64 + p65) + p66) + p67) + p68) + p69) + p70) + p71));
+                      ~~~ ^ ~~~
+program_source:14:27: error: invalid operands to binary expression ('int *const' and 'int *const')
+  rhs = (rhs + (((((((p72 + p73) + p74) + p75) + p76) + p77) + p78) + p79));
+                      ~~~ ^ ~~~
+program_source:15:27: error: invalid operands to binary expression ('int *const' and 'int *const')
+  rhs = (rhs + (((((((p80 + p81) + p82) + p83) + p84) + p85) + p86) + p87));
+                      ~~~ ^ ~~~
+program_source:16:27: error: invalid operands to binary expression ('int *const' and 'int *const')
+  rhs = (rhs + (((((((p88 + p89) + p90) + p91) + p92) + p93) + p94) + p95));
+                      ~~~ ^ ~~~
+program_source:17:27: error: invalid operands to binary expression ('int *const' and 'int *const')
+  rhs = (rhs + (((((((p96 + p97) + p98) + p99) + p100) + p101) + p102) + p103));
+                      ~~~ ^ ~~~
+program_source:18:28: error: invalid operands to binary expression ('int *const' and 'int *const')
+  rhs = (rhs + (((((((p104 + p105) + p106) + p107) + p108) + p109) + p110) + p111));
+                      ~~~~ ^ ~~~~
+program_source:19:28: error: invalid operands to binary expression ('int *const' and 'int *const')
+  rhs = (rhs + (((((((p112 + p113) + p114) + p115) + p116) + p117) + p118) + p119));
+                      ~~~~ ^ ~~~~
+program_source:20:28: error: invalid operands to binary expression ('int *const' and 'int *const')
+  rhs = (rhs + (((((((p120 + p121) + p122) + p123) + p124) + p125) + p126) + p127));
+                      ~~~~ ^ ~~~~
+program_source:21:28: error: invalid operands to binary expression ('int *const' and 'int *const')
+  rhs = (rhs + (((((((p128 + p129) + p130) + p131) + p132) + p133) + p134) + p135));
+                      ~~~~ ^ ~~~~
+program_source:22:28: error: invalid operands to binary expression ('int *const' and 'int *const')
+  rhs = (rhs + (((((((p136 + p137) + p138) + p139) + p140) + p141) + p142) + p143));
+                      ~~~~ ^ ~~~~
+program_source:23:28: error: invalid operands to binary expression ('int *const' and 'int *const')
+  rhs = (rhs + (((((((p144 + p145) + p146) + p147) + p148) + p149) + p150) + p151));
+                      ~~~~ ^ ~~~~
+program_source:24:28: error: invalid operands to binary expression ('int *const' and 'int *const')
+  rhs = (rhs + (((((((p152 + p153) + p154) + p155) + p156) + p157) + p158) + p159));
+                      ~~~~ ^ ~~~~
+program_source:25:28: error: invalid operands to binary expression ('int *const' and 'int *const')
+  rhs = (rhs + (((((((p160 + p161) + p162) + p163) + p164) + p165) + p166) + p167));
+                      ~~~~ ^ ~~~~
+program_source:26:28: error: invalid operands to binary expression ('int *const' and 'int *const')
+  rhs = (rhs + (((((((p168 + p169) + p170) + p171) + p172) + p173) + p174) + p175));
+                      ~~~~ ^ ~~~~
+program_source:27:28: error: invalid operands to binary expression ('int *const' and 'int *const')
+  rhs = (rhs + (((((((p176 + p177) + p178) + p179) + p180) + p181) + p182) + p183));
+                      ~~~~ ^ ~~~~
+program_source:28:28: error: invalid operands to binary expression ('int *const' and 'int *const')
+  rhs = (rhs + (((((((p184 + p185) + p186) + p187) + p188) + p189) + p190) + p191));
+                      ~~~~ ^ ~~~~
+program_source:29:28: error: invalid operands to binary expression ('int *const' and 'int *const')
+  rhs = (rhs + (((((((p192 + p193) + p194) + p195) + p196) + p197) + p198) + p199));
+                      ~~~~ ^ ~~~~
+program_source:30:28: error: invalid operands to binary expression ('int *const' and 'int *const')
+  rhs = (rhs + (((((((p200 + p201) + p202) + p203) + p204) + p205) + p206) + p207));
+                      ~~~~ ^ ~~~~
+program_source:31:28: error: invalid operands to binary expression ('int *const' and 'int *const')
+  rhs = (rhs + (((((((p208 + p209) + p210) + p211) + p212) + p213) + p214) + p215));
+                      ~~~~ ^ ~~~~
+program_source:32:28: error: invalid operands to binary expression ('int *const' and 'int *const')
+  rhs = (rhs + (((((((p216 + p217) + p218) + p219) + p220) + p221) + p222) + p223));
+                      ~~~~ ^ ~~~~
+program_source:33:28: error: invalid operands to binary expression ('int *const' and 'int *const')
+  rhs = (rhs + (((((((p224 + p225) + p226) + p227) + p228) + p229) + p230) + p231));
+                      ~~~~ ^ ~~~~
+program_source:34:28: error: invalid operands to binary expression ('int *const' and 'int *const')
+  rhs = (rhs + (((((((p232 + p233) + p234) + p235) + p236) + p237) + p238) + p239));
+                      ~~~~ ^ ~~~~
+program_source:35:28: error: invalid operands to binary expression ('int *const' and 'int *const')
+  rhs = (rhs + (((((((p240 + p241) + p242) + p243) + p244) + p245) + p246) + p247));
+                      ~~~~ ^ ~~~~
+program_source:36:27: error: invalid operands to binary expression ('int *const' and 'int *const')
+  rhs = (rhs + ((((((p248 + p249) + p250) + p251) + p252) + p253) + p254));
+                     ~~~~ ^ ~~~~
+program_source:37:6: error: cannot assign to variable 'p1' with const-qualified type 'int *const'
+  p1 = rhs;
+  ~~ ^
+program_source:4:50: note: variable 'p1' declared const here
+program_source:38:6: error: cannot assign to variable 'p2' with const-qualified type 'int *const'
+  p2 = rhs;
+  ~~ ^
+program_source:4:72: note: variable 'p2' declared const here
+program_source:39:6: error: cannot assign to variable 'p3' with const-qualified type 'int *const'
+  p3 = rhs;
+  ~~ ^
+program_source:4:94: note: variable 'p3' declared const here
+program_source:40:6: error: cannot assign to variable 'p4' with const-qualified type 'int *const'
+  p4 = rhs;
+  ~~ ^
+program_source:4:116: note: variable 'p4' declared const here
+program_source:41:6: error: cannot assign to variable 'p5' with const-qualified type 'int *const'
+  p5 = rhs;
+  ~~ ^
+program_source:4:138: note: variable 'p5' declared const here
+program_source:42:6: error: cannot assign to variable 'p6' with const-qualified type 'int *const'
+  p6 = rhs;
+  ~~ ^
+program_source:4:160: note: variable 'p6' declared const here
+program_source:43:6: error: cannot assign to variable 'p7' with const-qualified type 'int *const'
+  p7 = rhs;
+  ~~ ^
+program_source:4:182: note: variable 'p7' declared const here
+program_source:44:6: error: cannot assign to variable 'p8' with const-qualified type 'int *const'
+  p8 = rhs;
+  ~~ ^
+program_source:4:204: note: variable 'p8' declared const here
+program_source:45:6: error: cannot assign to variable 'p9' with const-qualified type 'int *const'
+  p9 = rhs;
+  ~~ ^
+program_source:4:226: note: variable 'p9' declared const here
+program_source:46:7: error: cannot assign to variable 'p10' with const-qualified type 'int *const'
+  p10 = rhs;
+  ~~~ ^
+program_source:4:248: note: variable 'p10' declared const here
+program_source:47:7: error: cannot assign to variable 'p11' with const-qualified type 'int *const'
+  p11 = rhs;
+  ~~~ ^
+program_source:4:271: note: variable 'p11' declared const here
+program_source:48:7: error: cannot assign to variable 'p12' with const-qualified type 'int *const'
+  p12 = rhs;
+  ~~~ ^
+program_source:4:294: note: variable 'p12' declared const here
+program_source:49:7: error: cannot assign to variable 'p13' with const-qualified type 'int *const'
+  p13 = rhs;
+  ~~~ ^
+program_source:4:317: note: variable 'p13' declared const here
+program_source:50:7: error: cannot assign to variable 'p14' with const-qualified type 'int *const'
+  p14 = rhs;
+  ~~~ ^
+program_source:4:340: note: variable 'p14' declared const here
+program_source:51:7: error: cannot assign to variable 'p15' with const-qualified type 'int *const'
+  p15 = rhs;
+  ~~~ ^
+program_source:4:363: note: variable 'p15' declared const here
+program_source:52:7: error: cannot assign to variable 'p16' with const-qualified type 'int *const'
+  p16 = rhs;
+  ~~~ ^
+program_source:4:386: note: variable 'p16' declared const here
+program_source:53:7: error: cannot assign to variable 'p17' with const-qualified type 'int *const'
+  p17 = rhs;
+  ~~~ ^
+program_source:4:409: note: variable 'p17' declared const here
+program_source:54:7: error: cannot assign to variable 'p18' with const-qualified type 'int *const'
+  p18 = rhs;
+  ~~~ ^
+program_source:4:432: note: variable 'p18' declared const here
+program_source:55:7: error: cannot assign to variable 'p19' with const-qualified type 'int *const'
+  p19 = rhs;
+  ~~~ ^
+program_source:4:455: note: variable 'p19' declared const here
+program_source:56:7: error: cannot assign to variable 'p20' with const-qualified type 'int *const'
+  p20 = rhs;
+  ~~~ ^
+program_source:4:478: note: variable 'p20' declared const here
+program_source:57:7: error: cannot assign to variable 'p21' with const-qualified type 'int *const'
+  p21 = rhs;
+  ~~~ ^
+program_source:4:501: note: variable 'p21' declared const here
+program_source:58:7: error: cannot assign to variable 'p22' with const-qualified type 'int *const'
+  p22 = rhs;
+  ~~~ ^
+program_source:4:524: note: variable 'p22' declared const here
+program_source:59:7: error: cannot assign to variable 'p23' with const-qualified type 'int *const'
+  p23 = rhs;
+  ~~~ ^
+program_source:4:547: note: variable 'p23' declared const here
+program_source:60:7: error: cannot assign to variable 'p24' with const-qualified type 'int *const'
+  p24 = rhs;
+  ~~~ ^
+program_source:4:570: note: variable 'p24' declared const here
+program_source:61:7: error: cannot assign to variable 'p25' with const-qualified type 'int *const'
+  p25 = rhs;
+  ~~~ ^
+program_source:4:593: note: variable 'p25' declared const here
+program_source:62:7: error: cannot assign to variable 'p26' with const-qualified type 'int *const'
+  p26 = rhs;
+  ~~~ ^
+program_source:4:616: note: variable 'p26' declared const here
+program_source:63:7: error: cannot assign to variable 'p27' with const-qualified type 'int *const'
+  p27 = rhs;
+  ~~~ ^
+program_source:4:639: note: variable 'p27' declared const here
+program_source:64:7: error: cannot assign to variable 'p28' with const-qualified type 'int *const'
+  p28 = rhs;
+  ~~~ ^
+program_source:4:662: note: variable 'p28' declared const here
+program_source:65:7: error: cannot assign to variable 'p29' with const-qualified type 'int *const'
+  p29 = rhs;
+  ~~~ ^
+program_source:4:685: note: variable 'p29' declared const here
+program_source:66:7: error: cannot assign to variable 'p30' with const-qualified type 'int *const'
+  p30 = rhs;
+  ~~~ ^
+program_source:4:708: note: variable 'p30' declared const here
+program_source:67:7: error: cannot assign to variable 'p31' with const-qualified type 'int *const'
+  p31 = rhs;
+  ~~~ ^
+program_source:4:731: note: variable 'p31' declared const here
+program_source:68:7: error: cannot assign to variable 'p32' with const-qualified type 'int *const'
+  p32 = rhs;
+  ~~~ ^
+program_source:4:754: note: variable 'p32' declared const here
+program_source:69:7: error: cannot assign to variable 'p33' with const-qualified type 'int *const'
+  p33 = rhs;
+  ~~~ ^
+program_source:4:777: note: variable 'p33' declared const here
+program_source:70:7: error: cannot assign to variable 'p34' with const-qualified type 'int *const'
+  p34 = rhs;
+  ~~~ ^
+program_source:4:800: note: variable 'p34' declared const here
+program_source:71:7: error: cannot assign to variable 'p35' with const-qualified type 'int *const'
+  p35 = rhs;
+  ~~~ ^
+program_source:4:823: note: variable 'p35' declared const here
+program_source:72:7: error: cannot assign to variable 'p36' with const-qualified type 'int *const'
+  p36 = rhs;
+  ~~~ ^
+program_source:4:846: note: variable 'p36' declared const here
+program_source:73:7: error: cannot assign to variable 'p37' with const-qualified type 'int *const'
+  p37 = rhs;
+  ~~~ ^
+program_source:4:869: note: variable 'p37' declared const here
+program_source:74:7: error: cannot assign to variable 'p38' with const-qualified type 'int *const'
+  p38 = rhs;
+  ~~~ ^
+program_source:4:892: note: variable 'p38' declared const here
+program_source:75:7: error: cannot assign to variable 'p39' with const-qualified type 'int *const'
+  p39 = rhs;
+  ~~~ ^
+program_source:4:915: note: variable 'p39' declared const here
+program_source:76:7: error: cannot assign to variable 'p40' with const-qualified type 'int *const'
+  p40 = rhs;
+  ~~~ ^
+program_source:4:938: note: variable 'p40' declared const here
+program_source:77:7: error: cannot assign to variable 'p41' with const-qualified type 'int *const'
+  p41 = rhs;
+  ~~~ ^
+program_source:4:961: note: variable 'p41' declared const here
+program_source:78:7: error: cannot assign to variable 'p42' with const-qualified type 'int *const'
+  p42 = rhs;
+  ~~~ ^
+program_source:4:984: note: variable 'p42' declared const here
+program_source:79:7: error: cannot assign to variable 'p43' with const-qualified type 'int *const'
+  p43 = rhs;
+  ~~~ ^
+program_source:4:1007: note: variable 'p43' declared const here
+program_source:80:7: error: cannot assign to variable 'p44' with const-qualified type 'int *const'
+  p44 = rhs;
+  ~~~ ^
+program_source:4:1030: note: variable 'p44' declared const here
+program_source:81:7: error: cannot assign to variable 'p45' with const-qualified type 'int *const'
+  p45 = rhs;
+  ~~~ ^
+program_source:4:1053: note: variable 'p45' declared const here
+program_source:82:7: error: cannot assign to variable 'p46' with const-qualified type 'int *const'
+  p46 = rhs;
+  ~~~ ^
+program_source:4:1076: note: variable 'p46' declared const here
+program_source:83:7: error: cannot assign to variable 'p47' with const-qualified type 'int *const'
+  p47 = rhs;
+  ~~~ ^
+program_source:4:1099: note: variable 'p47' declared const here
+program_source:84:7: error: cannot assign to variable 'p48' with const-qualified type 'int *const'
+  p48 = rhs;
+  ~~~ ^
+program_source:4:1122: note: variable 'p48' declared const here
+program_source:85:7: error: cannot assign to variable 'p49' with const-qualified type 'int *const'
+  p49 = rhs;
+  ~~~ ^
+program_source:4:1145: note: variable 'p49' declared const here
+program_source:86:7: error: cannot assign to variable 'p50' with const-qualified type 'int *const'
+  p50 = rhs;
+  ~~~ ^
+program_source:4:1168: note: variable 'p50' declared const here
+program_source:87:7: error: cannot assign to variable 'p51' with const-qualified type 'int *const'
+  p51 = rhs;
+  ~~~ ^
+program_source:4:1191: note: variable 'p51' declared const here
+program_source:88:7: error: cannot assign to variable 'p52' with const-qualified type 'int *const'
+  p52 = rhs;
+  ~~~ ^
+program_source:4:1214: note: variable 'p52' declared const here
+program_source:89:7: error: cannot assign to variable 'p53' with const-qualified type 'int *const'
+  p53 = rhs;
+  ~~~ ^
+program_source:4:1237: note: variable 'p53' declared const here
+program_source:90:7: error: cannot assign to variable 'p54' with const-qualified type 'int *const'
+  p54 = rhs;
+  ~~~ ^
+program_source:4:1260: note: variable 'p54' declared const here
+program_source:91:7: error: cannot assign to variable 'p55' with const-qualified type 'int *const'
+  p55 = rhs;
+  ~~~ ^
+program_source:4:1283: note: variable 'p55' declared const here
+program_source:92:7: error: cannot assign to variable 'p56' with const-qualified type 'int *const'
+  p56 = rhs;
+  ~~~ ^
+program_source:4:1306: note: variable 'p56' declared const here
+program_source:93:7: error: cannot assign to variable 'p57' with const-qualified type 'int *const'
+  p57 = rhs;
+  ~~~ ^
+program_source:4:1329: note: variable 'p57' declared const here
+program_source:94:7: error: cannot assign to variable 'p58' with const-qualified type 'int *const'
+  p58 = rhs;
+  ~~~ ^
+program_source:4:1352: note: variable 'p58' declared const here
+program_source:95:7: error: cannot assign to variable 'p59' with const-qualified type 'int *const'
+  p59 = rhs;
+  ~~~ ^
+program_source:4:1375: note: variable 'p59' declared const here
+program_source:96:7: error: cannot assign to variable 'p60' with const-qualified type 'int *const'
+  p60 = rhs;
+  ~~~ ^
+program_source:4:1398: note: variable 'p60' declared const here
+program_source:97:7: error: cannot assign to variable 'p61' with const-qualified type 'int *const'
+  p61 = rhs;
+  ~~~ ^
+program_source:4:1421: note: variable 'p61' declared const here
+program_source:98:7: error: cannot assign to variable 'p62' with const-qualified type 'int *const'
+  p62 = rhs;
+  ~~~ ^
+program_source:4:1444: note: variable 'p62' declared const here
+program_source:99:7: error: cannot assign to variable 'p63' with const-qualified type 'int *const'
+  p63 = rhs;
+  ~~~ ^
+program_source:4:1467: note: variable 'p63' declared const here
+program_source:100:7: error: cannot assign to variable 'p64' with const-qualified type 'int *const'
+  p64 = rhs;
+  ~~~ ^
+program_source:4:1490: note: variable 'p64' declared const here
+program_source:101:7: error: cannot assign to variable 'p65' with const-qualified type 'int *const'
+  p65 = rhs;
+  ~~~ ^
+program_source:4:1513: note: variable 'p65' declared const here
+program_source:102:7: error: cannot assign to variable 'p66' with const-qualified type 'int *const'
+  p66 = rhs;
+  ~~~ ^
+program_source:4:1536: note: variable 'p66' declared const here
+program_source:103:7: error: cannot assign to variable 'p67' with const-qualified type 'int *const'
+  p67 = rhs;
+  ~~~ ^
+program_source:4:1559: note: variable 'p67' declared const here
+program_source:104:7: error: cannot assign to variable 'p68' with const-qualified type 'int *const'
+  p68 = rhs;
+  ~~~ ^
+program_source:4:1582: note: variable 'p68' declared const here
+program_source:105:7: error: cannot assign to variable 'p69' with const-qualified type 'int *const'
+  p69 = rhs;
+  ~~~ ^
+program_source:4:1605: note: variable 'p69' declared const here
+program_source:106:7: error: cannot assign to variable 'p70' with const-qualified type 'int *const'
+  p70 = rhs;
+  ~~~ ^
+program_source:4:1628: note: variable 'p70' declared const here
+program_source:107:7: error: cannot assign to variable 'p71' with const-qualified type 'int *const'
+  p71 = rhs;
+  ~~~ ^
+program_source:4:1651: note: variable 'p71' declared const here
+program_source:108:7: error: cannot assign to variable 'p72' with const-qualified type 'int *const'
+  p72 = rhs;
+  ~~~ ^
+program_source:4:1674: note: variable 'p72' declared const here
+program_source:109:7: error: cannot assign to variable 'p73' with const-qualified type 'int *const'
+  p73 = rhs;
+  ~~~ ^
+program_source:4:1697: note: variable 'p73' declared const here
+program_source:110:7: error: cannot assign to variable 'p74' with const-qualified type 'int *const'
+  p74 = rhs;
+  ~~~ ^
+program_source:4:1720: note: variable 'p74' declared const here
+program_source:111:7: error: cannot assign to variable 'p75' with const-qualified type 'int *const'
+  p75 = rhs;
+  ~~~ ^
+program_source:4:1743: note: variable 'p75' declared const here
+program_source:112:7: error: cannot assign to variable 'p76' with const-qualified type 'int *const'
+  p76 = rhs;
+  ~~~ ^
+program_source:4:1766: note: variable 'p76' declared const here
+program_source:113:7: error: cannot assign to variable 'p77' with const-qualified type 'int *const'
+  p77 = rhs;
+  ~~~ ^
+program_source:4:1789: note: variable 'p77' declared const here
+program_source:114:7: error: cannot assign to variable 'p78' with const-qualified type 'int *const'
+  p78 = rhs;
+  ~~~ ^
+program_source:4:1812: note: variable 'p78' declared const here
+program_source:115:7: error: cannot assign to variable 'p79' with const-qualified type 'int *const'
+  p79 = rhs;
+  ~~~ ^
+program_source:4:1835: note: variable 'p79' declared const here
+program_source:116:7: error: cannot assign to variable 'p80' with const-qualified type 'int *const'
+  p80 = rhs;
+  ~~~ ^
+program_source:4:1858: note: variable 'p80' declared const here
+program_source:117:7: error: cannot assign to variable 'p81' with const-qualified type 'int *const'
+  p81 = rhs;
+  ~~~ ^
+program_source:4:1881: note: variable 'p81' declared const here
+program_source:118:7: error: cannot assign to variable 'p82' with const-qualified type 'int *const'
+  p82 = rhs;
+  ~~~ ^
+program_source:4:1904: note: variable 'p82' declared const here
+program_source:119:7: error: cannot assign to variable 'p83' with const-qualified type 'int *const'
+  p83 = rhs;
+  ~~~ ^
+program_source:4:1927: note: variable 'p83' declared const here
+program_source:120:7: error: cannot assign to variable 'p84' with const-qualified type 'int *const'
+  p84 = rhs;
+  ~~~ ^
+program_source:4:1950: note: variable 'p84' declared const here
+program_source:121:7: error: cannot assign to variable 'p85' with const-qualified type 'int *const'
+  p85 = rhs;
+  ~~~ ^
+program_source:4:1973: note: variable 'p85' declared const here
+program_source:122:7: error: cannot assign to variable 'p86' with const-qualified type 'int *const'
+  p86 = rhs;
+  ~~~ ^
+program_source:4:1996: note: variable 'p86' declared const here
+program_source:123:7: error: cannot assign to variable 'p87' with const-qualified type 'int *const'
+  p87 = rhs;
+  ~~~ ^
+program_source:4:2019: note: variable 'p87' declared const here
+program_source:124:7: error: cannot assign to variable 'p88' with const-qualified type 'int *const'
+  p88 = rhs;
+  ~~~ ^
+program_source:4:2042: note: variable 'p88' declared const here
+program_source:125:7: error: cannot assign to variable 'p89' with const-qualified type 'int *const'
+  p89 = rhs;
+  ~~~ ^
+program_source:4:2065: note: variable 'p89' declared const here
+program_source:126:7: error: cannot assign to variable 'p90' with const-qualified type 'int *const'
+  p90 = rhs;
+  ~~~ ^
+program_source:4:2088: note: variable 'p90' declared const here
+program_source:127:7: error: cannot assign to variable 'p91' with const-qualified type 'int *const'
+  p91 = rhs;
+  ~~~ ^
+program_source:4:2111: note: variable 'p91' declared const here
+program_source:128:7: error: cannot assign to variable 'p92' with const-qualified type 'int *const'
+  p92 = rhs;
+  ~~~ ^
+program_source:4:2134: note: variable 'p92' declared const here
+program_source:129:7: error: cannot assign to variable 'p93' with const-qualified type 'int *const'
+  p93 = rhs;
+  ~~~ ^
+program_source:4:2157: note: variable 'p93' declared const here
+program_source:130:7: error: cannot assign to variable 'p94' with const-qualified type 'int *const'
+  p94 = rhs;
+  ~~~ ^
+program_source:4:2180: note: variable 'p94' declared const here
+program_source:131:7: error: cannot assign to variable 'p95' with const-qualified type 'int *const'
+  p95 = rhs;
+  ~~~ ^
+program_source:4:2203: note: variable 'p95' declared const here
+program_source:132:7: error: cannot assign to variable 'p96' with const-qualified type 'int *const'
+  p96 = rhs;
+  ~~~ ^
+program_source:4:2226: note: variable 'p96' declared const here
+program_source:133:7: error: cannot assign to variable 'p97' with const-qualified type 'int *const'
+  p97 = rhs;
+  ~~~ ^
+program_source:4:2249: note: variable 'p97' declared const here
+program_source:134:7: error: cannot assign to variable 'p98' with const-qualified type 'int *const'
+  p98 = rhs;
+  ~~~ ^
+program_source:4:2272: note: variable 'p98' declared const here
+program_source:135:7: error: cannot assign to variable 'p99' with const-qualified type 'int *const'
+  p99 = rhs;
+  ~~~ ^
+program_source:4:2295: note: variable 'p99' declared const here
+program_source:136:8: error: cannot assign to variable 'p100' with const-qualified type 'int *const'
+  p100 = rhs;
+  ~~~~ ^
+program_source:4:2318: note: variable 'p100' declared const here
+program_source:137:8: error: cannot assign to variable 'p101' with const-qualified type 'int *const'
+  p101 = rhs;
+  ~~~~ ^
+program_source:4:2342: note: variable 'p101' declared const here
+program_source:138:8: error: cannot assign to variable 'p102' with const-qualified type 'int *const'
+  p102 = rhs;
+  ~~~~ ^
+program_source:4:2366: note: variable 'p102' declared const here
+program_source:139:8: error: cannot assign to variable 'p103' with const-qualified type 'int *const'
+  p103 = rhs;
+  ~~~~ ^
+program_source:4:2390: note: variable 'p103' declared const here
+program_source:140:8: error: cannot assign to variable 'p104' with const-qualified type 'int *const'
+  p104 = rhs;
+  ~~~~ ^
+program_source:4:2414: note: variable 'p104' declared const here
+program_source:141:8: error: cannot assign to variable 'p105' with const-qualified type 'int *const'
+  p105 = rhs;
+  ~~~~ ^
+program_source:4:2438: note: variable 'p105' declared const here
+program_source:142:8: error: cannot assign to variable 'p106' with const-qualified type 'int *const'
+  p106 = rhs;
+  ~~~~ ^
+program_source:4:2462: note: variable 'p106' declared const here
+program_source:143:8: error: cannot assign to variable 'p107' with const-qualified type 'int *const'
+  p107 = rhs;
+  ~~~~ ^
+program_source:4:2486: note: variable 'p107' declared const here
+program_source:144:8: error: cannot assign to variable 'p108' with const-qualified type 'int *const'
+  p108 = rhs;
+  ~~~~ ^
+program_source:4:2510: note: variable 'p108' declared const here
+program_source:145:8: error: cannot assign to variable 'p109' with const-qualified type 'int *const'
+  p109 = rhs;
+  ~~~~ ^
+program_source:4:2534: note: variable 'p109' declared const here
+program_source:146:8: error: cannot assign to variable 'p110' with const-qualified type 'int *const'
+  p110 = rhs;
+  ~~~~ ^
+program_source:4:2558: note: variable 'p110' declared const here
+program_source:147:8: error: cannot assign to variable 'p111' with const-qualified type 'int *const'
+  p111 = rhs;
+  ~~~~ ^
+program_source:4:2582: note: variable 'p111' declared const here
+program_source:148:8: error: cannot assign to variable 'p112' with const-qualified type 'int *const'
+  p112 = rhs;
+  ~~~~ ^
+program_source:4:2606: note: variable 'p112' declared const here
+program_source:149:8: error: cannot assign to variable 'p113' with const-qualified type 'int *const'
+  p113 = rhs;
+  ~~~~ ^
+program_source:4:2630: note: variable 'p113' declared const here
+program_source:150:8: error: cannot assign to variable 'p114' with const-qualified type 'int *const'
+  p114 = rhs;
+  ~~~~ ^
+program_source:4:2654: note: variable 'p114' declared const here
+program_source:151:8: error: cannot assign to variable 'p115' with const-qualified type 'int *const'
+  p115 = rhs;
+  ~~~~ ^
+program_source:4:2678: note: variable 'p115' declared const here
+program_source:152:8: error: cannot assign to variable 'p116' with const-qualified type 'int *const'
+  p116 = rhs;
+  ~~~~ ^
+program_source:4:2702: note: variable 'p116' declared const here
+program_source:153:8: error: cannot assign to variable 'p117' with const-qualified type 'int *const'
+  p117 = rhs;
+  ~~~~ ^
+program_source:4:2726: note: variable 'p117' declared const here
+program_source:154:8: error: cannot assign to variable 'p118' with const-qualified type 'int *const'
+  p118 = rhs;
+  ~~~~ ^
+program_source:4:2750: note: variable 'p118' declared const here
+program_source:155:8: error: cannot assign to variable 'p119' with const-qualified type 'int *const'
+  p119 = rhs;
+  ~~~~ ^
+program_source:4:2774: note: variable 'p119' declared const here
+program_source:156:8: error: cannot assign to variable 'p120' with const-qualified type 'int *const'
+  p120 = rhs;
+  ~~~~ ^
+program_source:4:2798: note: variable 'p120' declared const here
+program_source:157:8: error: cannot assign to variable 'p121' with const-qualified type 'int *const'
+  p121 = rhs;
+  ~~~~ ^
+program_source:4:2822: note: variable 'p121' declared const here
+program_source:158:8: error: cannot assign to variable 'p122' with const-qualified type 'int *const'
+  p122 = rhs;
+  ~~~~ ^
+program_source:4:2846: note: variable 'p122' declared const here
+program_source:159:8: error: cannot assign to variable 'p123' with const-qualified type 'int *const'
+  p123 = rhs;
+  ~~~~ ^
+program_source:4:2870: note: variable 'p123' declared const here
+program_source:160:8: error: cannot assign to variable 'p124' with const-qualified type 'int *const'
+  p124 = rhs;
+  ~~~~ ^
+program_source:4:2894: note: variable 'p124' declared const here
+program_source:161:8: error: cannot assign to variable 'p125' with const-qualified type 'int *const'
+  p125 = rhs;
+  ~~~~ ^
+program_source:4:2918: note: variable 'p125' declared const here
+program_source:162:8: error: cannot assign to variable 'p126' with const-qualified type 'int *const'
+  p126 = rhs;
+  ~~~~ ^
+program_source:4:2942: note: variable 'p126' declared const here
+program_source:163:8: error: cannot assign to variable 'p127' with const-qualified type 'int *const'
+  p127 = rhs;
+  ~~~~ ^
+program_source:4:2966: note: variable 'p127' declared const here
+program_source:164:8: error: cannot assign to variable 'p128' with const-qualified type 'int *const'
+  p128 = rhs;
+  ~~~~ ^
+program_source:4:2990: note: variable 'p128' declared const here
+program_source:165:8: error: cannot assign to variable 'p129' with const-qualified type 'int *const'
+  p129 = rhs;
+  ~~~~ ^
+program_source:4:3014: note: variable 'p129' declared const here
+program_source:166:8: error: cannot assign to variable 'p130' with const-qualified type 'int *const'
+  p130 = rhs;
+  ~~~~ ^
+program_source:4:3038: note: variable 'p130' declared const here
+program_source:167:8: error: cannot assign to variable 'p131' with const-qualified type 'int *const'
+  p131 = rhs;
+  ~~~~ ^
+program_source:4:3062: note: variable 'p131' declared const here
+program_source:168:8: error: cannot assign to variable 'p132' with const-qualified type 'int *const'
+  p132 = rhs;
+  ~~~~ ^
+program_source:4:3086: note: variable 'p132' declared const here
+program_source:169:8: error: cannot assign to variable 'p133' with const-qualified type 'int *const'
+  p133 = rhs;
+  ~~~~ ^
+program_source:4:3110: note: variable 'p133' declared const here
+program_source:170:8: error: cannot assign to variable 'p134' with const-qualified type 'int *const'
+  p134 = rhs;
+  ~~~~ ^
+program_source:4:3134: note: variable 'p134' declared const here
+program_source:171:8: error: cannot assign to variable 'p135' with const-qualified type 'int *const'
+  p135 = rhs;
+  ~~~~ ^
+program_source:4:3158: note: variable 'p135' declared const here
+program_source:172:8: error: cannot assign to variable 'p136' with const-qualified type 'int *const'
+  p136 = rhs;
+  ~~~~ ^
+program_source:4:3182: note: variable 'p136' declared const here
+program_source:173:8: error: cannot assign to variable 'p137' with const-qualified type 'int *const'
+  p137 = rhs;
+  ~~~~ ^
+program_source:4:3206: note: variable 'p137' declared const here
+program_source:174:8: error: cannot assign to variable 'p138' with const-qualified type 'int *const'
+  p138 = rhs;
+  ~~~~ ^
+program_source:4:3230: note: variable 'p138' declared const here
+program_source:175:8: error: cannot assign to variable 'p139' with const-qualified type 'int *const'
+  p139 = rhs;
+  ~~~~ ^
+program_source:4:3254: note: variable 'p139' declared const here
+program_source:176:8: error: cannot assign to variable 'p140' with const-qualified type 'int *const'
+  p140 = rhs;
+  ~~~~ ^
+program_source:4:3278: note: variable 'p140' declared const here
+program_source:177:8: error: cannot assign to variable 'p141' with const-qualified type 'int *const'
+  p141 = rhs;
+  ~~~~ ^
+program_source:4:3302: note: variable 'p141' declared const here
+program_source:178:8: error: cannot assign to variable 'p142' with const-qualified type 'int *const'
+  p142 = rhs;
+  ~~~~ ^
+program_source:4:3326: note: variable 'p142' declared const here
+program_source:179:8: error: cannot assign to variable 'p143' with const-qualified type 'int *const'
+  p143 = rhs;
+  ~~~~ ^
+program_source:4:3350: note: variable 'p143' declared const here
+program_source:180:8: error: cannot assign to variable 'p144' with const-qualified type 'int *const'
+  p144 = rhs;
+  ~~~~ ^
+program_source:4:3374: note: variable 'p144' declared const here
+program_source:181:8: error: cannot assign to variable 'p145' with const-qualified type 'int *const'
+  p145 = rhs;
+  ~~~~ ^
+program_source:4:3398: note: variable 'p145' declared const here
+program_source:182:8: error: cannot assign to variable 'p146' with const-qualified type 'int *const'
+  p146 = rhs;
+  ~~~~ ^
+program_source:4:3422: note: variable 'p146' declared const here
+program_source:183:8: error: cannot assign to variable 'p147' with const-qualified type 'int *const'
+  p147 = rhs;
+  ~~~~ ^
+program_source:4:3446: note: variable 'p147' declared const here
+program_source:184:8: error: cannot assign to variable 'p148' with const-qualified type 'int *const'
+  p148 = rhs;
+  ~~~~ ^
+program_source:4:3470: note: variable 'p148' declared const here
+program_source:185:8: error: cannot assign to variable 'p149' with const-qualified type 'int *const'
+  p149 = rhs;
+  ~~~~ ^
+program_source:4:3494: note: variable 'p149' declared const here
+program_source:186:8: error: cannot assign to variable 'p150' with const-qualified type 'int *const'
+  p150 = rhs;
+  ~~~~ ^
+program_source:4:3518: note: variable 'p150' declared const here
+program_source:187:8: error: cannot assign to variable 'p151' with const-qualified type 'int *const'
+  p151 = rhs;
+  ~~~~ ^
+program_source:4:3542: note: variable 'p151' declared const here
+program_source:188:8: error: cannot assign to variable 'p152' with const-qualified type 'int *const'
+  p152 = rhs;
+  ~~~~ ^
+program_source:4:3566: note: variable 'p152' declared const here
+program_source:189:8: error: cannot assign to variable 'p153' with const-qualified type 'int *const'
+  p153 = rhs;
+  ~~~~ ^
+program_source:4:3590: note: variable 'p153' declared const here
+program_source:190:8: error: cannot assign to variable 'p154' with const-qualified type 'int *const'
+  p154 = rhs;
+  ~~~~ ^
+program_source:4:3614: note: variable 'p154' declared const here
+program_source:191:8: error: cannot assign to variable 'p155' with const-qualified type 'int *const'
+  p155 = rhs;
+  ~~~~ ^
+program_source:4:3638: note: variable 'p155' declared const here
+program_source:192:8: error: cannot assign to variable 'p156' with const-qualified type 'int *const'
+  p156 = rhs;
+  ~~~~ ^
+program_source:4:3662: note: variable 'p156' declared const here
+program_source:193:8: error: cannot assign to variable 'p157' with const-qualified type 'int *const'
+  p157 = rhs;
+  ~~~~ ^
+program_source:4:3686: note: variable 'p157' declared const here
+program_source:194:8: error: cannot assign to variable 'p158' with const-qualified type 'int *const'
+  p158 = rhs;
+  ~~~~ ^
+program_source:4:3710: note: variable 'p158' declared const here
+program_source:195:8: error: cannot assign to variable 'p159' with const-qualified type 'int *const'
+  p159 = rhs;
+  ~~~~ ^
+program_source:4:3734: note: variable 'p159' declared const here
+program_source:196:8: error: cannot assign to variable 'p160' with const-qualified type 'int *const'
+  p160 = rhs;
+  ~~~~ ^
+program_source:4:3758: note: variable 'p160' declared const here
+program_source:197:8: error: cannot assign to variable 'p161' with const-qualified type 'int *const'
+  p161 = rhs;
+  ~~~~ ^
+program_source:4:3782: note: variable 'p161' declared const here
+program_source:198:8: error: cannot assign to variable 'p162' with const-qualified type 'int *const'
+  p162 = rhs;
+  ~~~~ ^
+program_source:4:3806: note: variable 'p162' declared const here
+program_source:199:8: error: cannot assign to variable 'p163' with const-qualified type 'int *const'
+  p163 = rhs;
+  ~~~~ ^
+program_source:4:3830: note: variable 'p163' declared const here
+program_source:200:8: error: cannot assign to variable 'p164' with const-qualified type 'int *const'
+  p164 = rhs;
+  ~~~~ ^
+program_source:4:3854: note: variable 'p164' declared const here
+program_source:201:8: error: cannot assign to variable 'p165' with const-qualified type 'int *const'
+  p165 = rhs;
+  ~~~~ ^
+program_source:4:3878: note: variable 'p165' declared const here
+program_source:202:8: error: cannot assign to variable 'p166' with const-qualified type 'int *const'
+  p166 = rhs;
+  ~~~~ ^
+program_source:4:3902: note: variable 'p166' declared const here
+program_source:203:8: error: cannot assign to variable 'p167' with const-qualified type 'int *const'
+  p167 = rhs;
+  ~~~~ ^
+program_source:4:3926: note: variable 'p167' declared const here
+program_source:204:8: error: cannot assign to variable 'p168' with const-qualified type 'int *const'
+  p168 = rhs;
+  ~~~~ ^
+program_source:4:3950: note: variable 'p168' declared const here
+program_source:205:8: error: cannot assign to variable 'p169' with const-qualified type 'int *const'
+  p169 = rhs;
+  ~~~~ ^
+program_source:4:3974: note: variable 'p169' declared const here
+program_source:206:8: error: cannot assign to variable 'p170' with const-qualified type 'int *const'
+  p170 = rhs;
+  ~~~~ ^
+program_source:4:3998: note: variable 'p170' declared const here
+program_source:207:8: error: cannot assign to variable 'p171' with const-qualified type 'int *const'
+  p171 = rhs;
+  ~~~~ ^
+program_source:4:4022: note: variable 'p171' declared const here
+program_source:208:8: error: cannot assign to variable 'p172' with const-qualified type 'int *const'
+  p172 = rhs;
+  ~~~~ ^
+program_source:4:4046: note: variable 'p172' declared const here
+program_source:209:8: error: cannot assign to variable 'p173' with const-qualified type 'int *const'
+  p173 = rhs;
+  ~~~~ ^
+program_source:4:4070: note: variable 'p173' declared const here
+program_source:210:8: error: cannot assign to variable 'p174' with const-qualified type 'int *const'
+  p174 = rhs;
+  ~~~~ ^
+program_source:4:4094: note: variable 'p174' declared const here
+program_source:211:8: error: cannot assign to variable 'p175' with const-qualified type 'int *const'
+  p175 = rhs;
+  ~~~~ ^
+program_source:4:4118: note: variable 'p175' declared const here
+program_source:212:8: error: cannot assign to variable 'p176' with const-qualified type 'int *const'
+  p176 = rhs;
+  ~~~~ ^
+program_source:4:4142: note: variable 'p176' declared const here
+program_source:213:8: error: cannot assign to variable 'p177' with const-qualified type 'int *const'
+  p177 = rhs;
+  ~~~~ ^
+program_source:4:4166: note: variable 'p177' declared const here
+program_source:214:8: error: cannot assign to variable 'p178' with const-qualified type 'int *const'
+  p178 = rhs;
+  ~~~~ ^
+program_source:4:4190: note: variable 'p178' declared const here
+program_source:215:8: error: cannot assign to variable 'p179' with const-qualified type 'int *const'
+  p179 = rhs;
+  ~~~~ ^
+program_source:4:4214: note: variable 'p179' declared const here
+program_source:216:8: error: cannot assign to variable 'p180' with const-qualified type 'int *const'
+  p180 = rhs;
+  ~~~~ ^
+program_source:4:4238: note: variable 'p180' declared const here
+program_source:217:8: error: cannot assign to variable 'p181' with const-qualified type 'int *const'
+  p181 = rhs;
+  ~~~~ ^
+program_source:4:4262: note: variable 'p181' declared const here
+program_source:218:8: error: cannot assign to variable 'p182' with const-qualified type 'int *const'
+  p182 = rhs;
+  ~~~~ ^
+program_source:4:4286: note: variable 'p182' declared const here
+program_source:219:8: error: cannot assign to variable 'p183' with const-qualified type 'int *const'
+  p183 = rhs;
+  ~~~~ ^
+program_source:4:4310: note: variable 'p183' declared const here
+program_source:220:8: error: cannot assign to variable 'p184' with const-qualified type 'int *const'
+  p184 = rhs;
+  ~~~~ ^
+program_source:4:4334: note: variable 'p184' declared const here
+program_source:221:8: error: cannot assign to variable 'p185' with const-qualified type 'int *const'
+  p185 = rhs;
+  ~~~~ ^
+program_source:4:4358: note: variable 'p185' declared const here
+program_source:222:8: error: cannot assign to variable 'p186' with const-qualified type 'int *const'
+  p186 = rhs;
+  ~~~~ ^
+program_source:4:4382: note: variable 'p186' declared const here
+program_source:223:8: error: cannot assign to variable 'p187' with const-qualified type 'int *const'
+  p187 = rhs;
+  ~~~~ ^
+program_source:4:4406: note: variable 'p187' declared const here
+program_source:224:8: error: cannot assign to variable 'p188' with const-qualified type 'int *const'
+  p188 = rhs;
+  ~~~~ ^
+program_source:4:4430: note: variable 'p188' declared const here
+program_source:225:8: error: cannot assign to variable 'p189' with const-qualified type 'int *const'
+  p189 = rhs;
+  ~~~~ ^
+program_source:4:4454: note: variable 'p189' declared const here
+program_source:226:8: error: cannot assign to variable 'p190' with const-qualified type 'int *const'
+  p190 = rhs;
+  ~~~~ ^
+program_source:4:4478: note: variable 'p190' declared const here
+program_source:227:8: error: cannot assign to variable 'p191' with const-qualified type 'int *const'
+  p191 = rhs;
+  ~~~~ ^
+program_source:4:4502: note: variable 'p191' declared const here
+program_source:228:8: error: cannot assign to variable 'p192' with const-qualified type 'int *const'
+  p192 = rhs;
+  ~~~~ ^
+program_source:4:4526: note: variable 'p192' declared const here
+program_source:229:8: error: cannot assign to variable 'p193' with const-qualified type 'int *const'
+  p193 = rhs;
+  ~~~~ ^
+program_source:4:4550: note: variable 'p193' declared const here
+program_source:230:8: error: cannot assign to variable 'p194' with const-qualified type 'int *const'
+  p194 = rhs;
+  ~~~~ ^
+program_source:4:4574: note: variable 'p194' declared const here
+program_source:231:8: error: cannot assign to variable 'p195' with const-qualified type 'int *const'
+  p195 = rhs;
+  ~~~~ ^
+program_source:4:4598: note: variable 'p195' declared const here
+program_source:232:8: error: cannot assign to variable 'p196' with const-qualified type 'int *const'
+  p196 = rhs;
+  ~~~~ ^
+program_source:4:4622: note: variable 'p196' declared const here
+program_source:233:8: error: cannot assign to variable 'p197' with const-qualified type 'int *const'
+  p197 = rhs;
+  ~~~~ ^
+program_source:4:4646: note: variable 'p197' declared const here
+program_source:234:8: error: cannot assign to variable 'p198' with const-qualified type 'int *const'
+  p198 = rhs;
+  ~~~~ ^
+program_source:4:4670: note: variable 'p198' declared const here
+program_source:235:8: error: cannot assign to variable 'p199' with const-qualified type 'int *const'
+  p199 = rhs;
+  ~~~~ ^
+program_source:4:4694: note: variable 'p199' declared const here
+program_source:236:8: error: cannot assign to variable 'p200' with const-qualified type 'int *const'
+  p200 = rhs;
+  ~~~~ ^
+program_source:4:4718: note: variable 'p200' declared const here
+program_source:237:8: error: cannot assign to variable 'p201' with const-qualified type 'int *const'
+  p201 = rhs;
+  ~~~~ ^
+program_source:4:4742: note: variable 'p201' declared const here
+program_source:238:8: error: cannot assign to variable 'p202' with const-qualified type 'int *const'
+  p202 = rhs;
+  ~~~~ ^
+program_source:4:4766: note: variable 'p202' declared const here
+program_source:239:8: error: cannot assign to variable 'p203' with const-qualified type 'int *const'
+  p203 = rhs;
+  ~~~~ ^
+program_source:4:4790: note: variable 'p203' declared const here
+program_source:240:8: error: cannot assign to variable 'p204' with const-qualified type 'int *const'
+  p204 = rhs;
+  ~~~~ ^
+program_source:4:4814: note: variable 'p204' declared const here
+program_source:241:8: error: cannot assign to variable 'p205' with const-qualified type 'int *const'
+  p205 = rhs;
+  ~~~~ ^
+program_source:4:4838: note: variable 'p205' declared const here
+program_source:242:8: error: cannot assign to variable 'p206' with const-qualified type 'int *const'
+  p206 = rhs;
+  ~~~~ ^
+program_source:4:4862: note: variable 'p206' declared const here
+program_source:243:8: error: cannot assign to variable 'p207' with const-qualified type 'int *const'
+  p207 = rhs;
+  ~~~~ ^
+program_source:4:4886: note: variable 'p207' declared const here
+program_source:244:8: error: cannot assign to variable 'p208' with const-qualified type 'int *const'
+  p208 = rhs;
+  ~~~~ ^
+program_source:4:4910: note: variable 'p208' declared const here
+program_source:245:8: error: cannot assign to variable 'p209' with const-qualified type 'int *const'
+  p209 = rhs;
+  ~~~~ ^
+program_source:4:4934: note: variable 'p209' declared const here
+program_source:246:8: error: cannot assign to variable 'p210' with const-qualified type 'int *const'
+  p210 = rhs;
+  ~~~~ ^
+program_source:4:4958: note: variable 'p210' declared const here
+program_source:247:8: error: cannot assign to variable 'p211' with const-qualified type 'int *const'
+  p211 = rhs;
+  ~~~~ ^
+program_source:4:4982: note: variable 'p211' declared const here
+program_source:248:8: error: cannot assign to variable 'p212' with const-qualified type 'int *const'
+  p212 = rhs;
+  ~~~~ ^
+program_source:4:5006: note: variable 'p212' declared const here
+program_source:249:8: error: cannot assign to variable 'p213' with const-qualified type 'int *const'
+  p213 = rhs;
+  ~~~~ ^
+program_source:4:5030: note: variable 'p213' declared const here
+program_source:250:8: error: cannot assign to variable 'p214' with const-qualified type 'int *const'
+  p214 = rhs;
+  ~~~~ ^
+program_source:4:5054: note: variable 'p214' declared const here
+program_source:251:8: error: cannot assign to variable 'p215' with const-qualified type 'int *const'
+  p215 = rhs;
+  ~~~~ ^
+program_source:4:5078: note: variable 'p215' declared const here
+program_source:252:8: error: cannot assign to variable 'p216' with const-qualified type 'int *const'
+  p216 = rhs;
+  ~~~~ ^
+program_source:4:5102: note: variable 'p216' declared const here
+program_source:253:8: error: cannot assign to variable 'p217' with const-qualified type 'int *const'
+  p217 = rhs;
+  ~~~~ ^
+program_source:4:5126: note: variable 'p217' declared const here
+program_source:254:8: error: cannot assign to variable 'p218' with const-qualified type 'int *const'
+  p218 = rhs;
+  ~~~~ ^
+program_source:4:5150: note: variable 'p218' declared const here
+program_source:255:8: error: cannot assign to variable 'p219' with const-qualified type 'int *const'
+  p219 = rhs;
+  ~~~~ ^
+program_source:4:5174: note: variable 'p219' declared const here
+program_source:256:8: error: cannot assign to variable 'p220' with const-qualified type 'int *const'
+  p220 = rhs;
+  ~~~~ ^
+program_source:4:5198: note: variable 'p220' declared const here
+program_source:257:8: error: cannot assign to variable 'p221' with const-qualified type 'int *const'
+  p221 = rhs;
+  ~~~~ ^
+program_source:4:5222: note: variable 'p221' declared const here
+program_source:258:8: error: cannot assign to variable 'p222' with const-qualified type 'int *const'
+  p222 = rhs;
+  ~~~~ ^
+program_source:4:5246: note: variable 'p222' declared const here
+program_source:259:8: error: cannot assign to variable 'p223' with const-qualified type 'int *const'
+  p223 = rhs;
+  ~~~~ ^
+program_source:4:5270: note: variable 'p223' declared const here
+program_source:260:8: error: cannot assign to variable 'p224' with const-qualified type 'int *const'
+  p224 = rhs;
+  ~~~~ ^
+program_source:4:5294: note: variable 'p224' declared const here
+program_source:261:8: error: cannot assign to variable 'p225' with const-qualified type 'int *const'
+  p225 = rhs;
+  ~~~~ ^
+program_source:4:5318: note: variable 'p225' declared const here
+program_source:262:8: error: cannot assign to variable 'p226' with const-qualified type 'int *const'
+  p226 = rhs;
+  ~~~~ ^
+program_source:4:5342: note: variable 'p226' declared const here
+program_source:263:8: error: cannot assign to variable 'p227' with const-qualified type 'int *const'
+  p227 = rhs;
+  ~~~~ ^
+program_source:4:5366: note: variable 'p227' declared const here
+program_source:264:8: error: cannot assign to variable 'p228' with const-qualified type 'int *const'
+  p228 = rhs;
+  ~~~~ ^
+program_source:4:5390: note: variable 'p228' declared const here
+program_source:265:8: error: cannot assign to variable 'p229' with const-qualified type 'int *const'
+  p229 = rhs;
+  ~~~~ ^
+program_source:4:5414: note: variable 'p229' declared const here
+program_source:266:8: error: cannot assign to variable 'p230' with const-qualified type 'int *const'
+  p230 = rhs;
+  ~~~~ ^
+program_source:4:5438: note: variable 'p230' declared const here
+program_source:267:8: error: cannot assign to variable 'p231' with const-qualified type 'int *const'
+  p231 = rhs;
+  ~~~~ ^
+program_source:4:5462: note: variable 'p231' declared const here
+program_source:268:8: error: cannot assign to variable 'p232' with const-qualified type 'int *const'
+  p232 = rhs;
+  ~~~~ ^
+program_source:4:5486: note: variable 'p232' declared const here
+program_source:269:8: error: cannot assign to variable 'p233' with const-qualified type 'int *const'
+  p233 = rhs;
+  ~~~~ ^
+program_source:4:5510: note: variable 'p233' declared const here
+program_source:270:8: error: cannot assign to variable 'p234' with const-qualified type 'int *const'
+  p234 = rhs;
+  ~~~~ ^
+program_source:4:5534: note: variable 'p234' declared const here
+program_source:271:8: error: cannot assign to variable 'p235' with const-qualified type 'int *const'
+  p235 = rhs;
+  ~~~~ ^
+program_source:4:5558: note: variable 'p235' declared const here
+program_source:272:8: error: cannot assign to variable 'p236' with const-qualified type 'int *const'
+  p236 = rhs;
+  ~~~~ ^
+program_source:4:5582: note: variable 'p236' declared const here
+program_source:273:8: error: cannot assign to variable 'p237' with const-qualified type 'int *const'
+  p237 = rhs;
+  ~~~~ ^
+program_source:4:5606: note: variable 'p237' declared const here
+program_source:274:8: error: cannot assign to variable 'p238' with const-qualified type 'int *const'
+  p238 = rhs;
+  ~~~~ ^
+program_source:4:5630: note: variable 'p238' declared const here
+program_source:275:8: error: cannot assign to variable 'p239' with const-qualified type 'int *const'
+  p239 = rhs;
+  ~~~~ ^
+program_source:4:5654: note: variable 'p239' declared const here
+program_source:276:8: error: cannot assign to variable 'p240' with const-qualified type 'int *const'
+  p240 = rhs;
+  ~~~~ ^
+program_source:4:5678: note: variable 'p240' declared const here
+program_source:277:8: error: cannot assign to variable 'p241' with const-qualified type 'int *const'
+  p241 = rhs;
+  ~~~~ ^
+program_source:4:5702: note: variable 'p241' declared const here
+program_source:278:8: error: cannot assign to variable 'p242' with const-qualified type 'int *const'
+  p242 = rhs;
+  ~~~~ ^
+program_source:4:5726: note: variable 'p242' declared const here
+program_source:279:8: error: cannot assign to variable 'p243' with const-qualified type 'int *const'
+  p243 = rhs;
+  ~~~~ ^
+program_source:4:5750: note: variable 'p243' declared const here
+program_source:280:8: error: cannot assign to variable 'p244' with const-qualified type 'int *const'
+  p244 = rhs;
+  ~~~~ ^
+program_source:4:5774: note: variable 'p244' declared const here
+program_source:281:8: error: cannot assign to variable 'p245' with const-qualified type 'int *const'
+  p245 = rhs;
+  ~~~~ ^
+program_source:4:5798: note: variable 'p245' declared const here
+program_source:282:8: error: cannot assign to variable 'p246' with const-qualified type 'int *const'
+  p246 = rhs;
+  ~~~~ ^
+program_source:4:5822: note: variable 'p246' declared const here
+program_source:283:8: error: cannot assign to variable 'p247' with const-qualified type 'int *const'
+  p247 = rhs;
+  ~~~~ ^
+program_source:4:5846: note: variable 'p247' declared const here
+program_source:284:8: error: cannot assign to variable 'p248' with const-qualified type 'int *const'
+  p248 = rhs;
+  ~~~~ ^
+program_source:4:5870: note: variable 'p248' declared const here
+program_source:285:8: error: cannot assign to variable 'p249' with const-qualified type 'int *const'
+  p249 = rhs;
+  ~~~~ ^
+program_source:4:5894: note: variable 'p249' declared const here
+program_source:286:8: error: cannot assign to variable 'p250' with const-qualified type 'int *const'
+  p250 = rhs;
+  ~~~~ ^
+program_source:4:5918: note: variable 'p250' declared const here
+program_source:287:8: error: cannot assign to variable 'p251' with const-qualified type 'int *const'
+  p251 = rhs;
+  ~~~~ ^
+program_source:4:5942: note: variable 'p251' declared const here
+program_source:288:8: error: cannot assign to variable 'p252' with const-qualified type 'int *const'
+  p252 = rhs;
+  ~~~~ ^
+program_source:4:5966: note: variable 'p252' declared const here
+program_source:289:8: error: cannot assign to variable 'p253' with const-qualified type 'int *const'
+  p253 = rhs;
+  ~~~~ ^
+program_source:4:5990: note: variable 'p253' declared const here
+program_source:290:8: error: cannot assign to variable 'p254' with const-qualified type 'int *const'
+  p254 = rhs;
+  ~~~~ ^
+program_source:4:6014: note: variable 'p254' declared const here
+program_source:548:3: error: no matching function for call to 'foo'
+  foo(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62, v63, v64, v65, v66, v67, v68, v69, v70, v71, v72, v73, v74, v75, v76, v77, v78, v79, v80, v81, v82, v83, v84, v85, v86, v87, v88, v89, v90, v91, v92, v93, v94, v95, v96, v97, v98, v99, v100, v101, v102, v103, v104, v105, v106, v107, v108, v109, v110, v111, v112, v113, v114, v115, v116, v117, v118, v119, v120, v121, v122, v123, v124, v125, v126, v127, v128, v129, v130, v131, v132, v133, v134, v135, v136, v137, v138, v139, v140, v141, v142, v143, v144, v145, v146, v147, v148, v149, v150, v151, v152, v153, v154, v155, v156, v157, v158, v159, v160, v161, v162, v163, v164, v165, v166, v167, v168, v169, v170, v171, v172, v173, v174, v175, v176, v177, v178, v179, v180, v181, v182, v183, v184, v185, v186, v187, v188, v189, v190, v191, v192, v193, v194, v195, v196, v197, v198, v199, v200, v201, v202, v203, v204, v205, v206, v207, v208, v209, v210, v211, v212, v213, v214, v215, v216, v217, v218, v219, v220, v221, v222, v223, v224, v225, v226, v227, v228, v229, v230, v231, v232, v233, v234, v235, v236, v237, v238, v239, v240, v241, v242, v243, v244, v245, v246, v247, v248, v249, v250, v251, v252, v253, v254);
+  ^~~
+program_source:4:6: note: candidate function not viable: no known conversion from 'int' to 'int *const' for 1st argument; take the address of the argument with &
+program_source:549:13: warning: equality comparison with extraneous parentheses [-Wparentheses-equality]
+  if ((v254 == 0)) {
+       ~~~~~^~~~
+program_source:549:13: note: remove extraneous parentheses around the comparison to silence this warning
+  if ((v254 == 0)) {
+      ~     ^   ~
+program_source:549:13: note: use '=' to turn this equality comparison into an assignment
+  if ((v254 == 0)) {
+            ^~
+            =
+
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 a73b168..8dc4c3f 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,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Inner = struct @align(16) {
+../../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)
@@ -29,59 +29,168 @@
   arr:array<Inner> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb:ptr<storage, S, read> = var @binding_point(0, 0)
+  %s:ptr<storage, i32, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%idx:u32 [@local_invocation_index]):void -> %b2 {
-  %b2 = block {
-    %4:ptr<storage, f32, read> = access %sb, 0u, %idx, 0u
-    %scalar_f32:f32 = load %4
-    %6:ptr<storage, i32, read> = access %sb, 0u, %idx, 1u
-    %scalar_i32:i32 = load %6
-    %8:ptr<storage, u32, read> = access %sb, 0u, %idx, 2u
-    %scalar_u32:u32 = load %8
-    %10:ptr<storage, vec2<f32>, read> = access %sb, 0u, %idx, 3u
-    %vec2_f32:vec2<f32> = load %10
-    %12:ptr<storage, vec2<i32>, read> = access %sb, 0u, %idx, 4u
-    %vec2_i32:vec2<i32> = load %12
-    %14:ptr<storage, vec2<u32>, read> = access %sb, 0u, %idx, 5u
-    %vec2_u32:vec2<u32> = load %14
-    %16:ptr<storage, vec3<f32>, read> = access %sb, 0u, %idx, 6u
-    %vec3_f32:vec3<f32> = load %16
-    %18:ptr<storage, vec3<i32>, read> = access %sb, 0u, %idx, 7u
-    %vec3_i32:vec3<i32> = load %18
-    %20:ptr<storage, vec3<u32>, read> = access %sb, 0u, %idx, 8u
-    %vec3_u32:vec3<u32> = load %20
-    %22:ptr<storage, vec4<f32>, read> = access %sb, 0u, %idx, 9u
-    %vec4_f32:vec4<f32> = load %22
-    %24:ptr<storage, vec4<i32>, read> = access %sb, 0u, %idx, 10u
-    %vec4_i32:vec4<i32> = load %24
-    %26:ptr<storage, vec4<u32>, read> = access %sb, 0u, %idx, 11u
-    %vec4_u32:vec4<u32> = load %26
-    %28:ptr<storage, mat2x2<f32>, read> = access %sb, 0u, %idx, 12u
-    %mat2x2_f32:mat2x2<f32> = load %28
-    %30:ptr<storage, mat2x3<f32>, read> = access %sb, 0u, %idx, 13u
-    %mat2x3_f32:mat2x3<f32> = load %30
-    %32:ptr<storage, mat2x4<f32>, read> = access %sb, 0u, %idx, 14u
-    %mat2x4_f32:mat2x4<f32> = load %32
-    %34:ptr<storage, mat3x2<f32>, read> = access %sb, 0u, %idx, 15u
-    %mat3x2_f32:mat3x2<f32> = load %34
-    %36:ptr<storage, mat3x3<f32>, read> = access %sb, 0u, %idx, 16u
-    %mat3x3_f32:mat3x3<f32> = load %36
-    %38:ptr<storage, mat3x4<f32>, read> = access %sb, 0u, %idx, 17u
-    %mat3x4_f32:mat3x4<f32> = load %38
-    %40:ptr<storage, mat4x2<f32>, read> = access %sb, 0u, %idx, 18u
-    %mat4x2_f32:mat4x2<f32> = load %40
-    %42:ptr<storage, mat4x3<f32>, read> = access %sb, 0u, %idx, 19u
-    %mat4x3_f32:mat4x3<f32> = load %42
-    %44:ptr<storage, mat4x4<f32>, read> = access %sb, 0u, %idx, 20u
-    %mat4x4_f32:mat4x4<f32> = load %44
-    %46:ptr<storage, array<vec3<f32>, 2>, read> = access %sb, 0u, %idx, 21u
-    %arr2_vec3_f32:array<vec3<f32>, 2> = load %46
+%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
   }
 }
+%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
 ********************************************************************
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 a998792..804b368 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,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Inner = struct @align(16) {
+../../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)
@@ -43,87 +43,275 @@
   arr:array<Inner> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb:ptr<storage, S, read> = var @binding_point(0, 0)
+  %s:ptr<storage, i32, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%idx:u32 [@local_invocation_index]):void -> %b2 {
-  %b2 = block {
-    %4:ptr<storage, f32, read> = access %sb, 0u, %idx, 0u
-    %scalar_f32:f32 = load %4
-    %6:ptr<storage, i32, read> = access %sb, 0u, %idx, 1u
-    %scalar_i32:i32 = load %6
-    %8:ptr<storage, u32, read> = access %sb, 0u, %idx, 2u
-    %scalar_u32:u32 = load %8
-    %10:ptr<storage, f16, read> = access %sb, 0u, %idx, 3u
-    %scalar_f16:f16 = load %10
-    %12:ptr<storage, vec2<f32>, read> = access %sb, 0u, %idx, 4u
-    %vec2_f32:vec2<f32> = load %12
-    %14:ptr<storage, vec2<i32>, read> = access %sb, 0u, %idx, 5u
-    %vec2_i32:vec2<i32> = load %14
-    %16:ptr<storage, vec2<u32>, read> = access %sb, 0u, %idx, 6u
-    %vec2_u32:vec2<u32> = load %16
-    %18:ptr<storage, vec2<f16>, read> = access %sb, 0u, %idx, 7u
-    %vec2_f16:vec2<f16> = load %18
-    %20:ptr<storage, vec3<f32>, read> = access %sb, 0u, %idx, 8u
-    %vec3_f32:vec3<f32> = load %20
-    %22:ptr<storage, vec3<i32>, read> = access %sb, 0u, %idx, 9u
-    %vec3_i32:vec3<i32> = load %22
-    %24:ptr<storage, vec3<u32>, read> = access %sb, 0u, %idx, 10u
-    %vec3_u32:vec3<u32> = load %24
-    %26:ptr<storage, vec3<f16>, read> = access %sb, 0u, %idx, 11u
-    %vec3_f16:vec3<f16> = load %26
-    %28:ptr<storage, vec4<f32>, read> = access %sb, 0u, %idx, 12u
-    %vec4_f32:vec4<f32> = load %28
-    %30:ptr<storage, vec4<i32>, read> = access %sb, 0u, %idx, 13u
-    %vec4_i32:vec4<i32> = load %30
-    %32:ptr<storage, vec4<u32>, read> = access %sb, 0u, %idx, 14u
-    %vec4_u32:vec4<u32> = load %32
-    %34:ptr<storage, vec4<f16>, read> = access %sb, 0u, %idx, 15u
-    %vec4_f16:vec4<f16> = load %34
-    %36:ptr<storage, mat2x2<f32>, read> = access %sb, 0u, %idx, 16u
-    %mat2x2_f32:mat2x2<f32> = load %36
-    %38:ptr<storage, mat2x3<f32>, read> = access %sb, 0u, %idx, 17u
-    %mat2x3_f32:mat2x3<f32> = load %38
-    %40:ptr<storage, mat2x4<f32>, read> = access %sb, 0u, %idx, 18u
-    %mat2x4_f32:mat2x4<f32> = load %40
-    %42:ptr<storage, mat3x2<f32>, read> = access %sb, 0u, %idx, 19u
-    %mat3x2_f32:mat3x2<f32> = load %42
-    %44:ptr<storage, mat3x3<f32>, read> = access %sb, 0u, %idx, 20u
-    %mat3x3_f32:mat3x3<f32> = load %44
-    %46:ptr<storage, mat3x4<f32>, read> = access %sb, 0u, %idx, 21u
-    %mat3x4_f32:mat3x4<f32> = load %46
-    %48:ptr<storage, mat4x2<f32>, read> = access %sb, 0u, %idx, 22u
-    %mat4x2_f32:mat4x2<f32> = load %48
-    %50:ptr<storage, mat4x3<f32>, read> = access %sb, 0u, %idx, 23u
-    %mat4x3_f32:mat4x3<f32> = load %50
-    %52:ptr<storage, mat4x4<f32>, read> = access %sb, 0u, %idx, 24u
-    %mat4x4_f32:mat4x4<f32> = load %52
-    %54:ptr<storage, mat2x2<f16>, read> = access %sb, 0u, %idx, 25u
-    %mat2x2_f16:mat2x2<f16> = load %54
-    %56:ptr<storage, mat2x3<f16>, read> = access %sb, 0u, %idx, 26u
-    %mat2x3_f16:mat2x3<f16> = load %56
-    %58:ptr<storage, mat2x4<f16>, read> = access %sb, 0u, %idx, 27u
-    %mat2x4_f16:mat2x4<f16> = load %58
-    %60:ptr<storage, mat3x2<f16>, read> = access %sb, 0u, %idx, 28u
-    %mat3x2_f16:mat3x2<f16> = load %60
-    %62:ptr<storage, mat3x3<f16>, read> = access %sb, 0u, %idx, 29u
-    %mat3x3_f16:mat3x3<f16> = load %62
-    %64:ptr<storage, mat3x4<f16>, read> = access %sb, 0u, %idx, 30u
-    %mat3x4_f16:mat3x4<f16> = load %64
-    %66:ptr<storage, mat4x2<f16>, read> = access %sb, 0u, %idx, 31u
-    %mat4x2_f16:mat4x2<f16> = load %66
-    %68:ptr<storage, mat4x3<f16>, read> = access %sb, 0u, %idx, 32u
-    %mat4x3_f16:mat4x3<f16> = load %68
-    %70:ptr<storage, mat4x4<f16>, read> = access %sb, 0u, %idx, 33u
-    %mat4x4_f16:mat4x4<f16> = load %70
-    %72:ptr<storage, array<vec3<f32>, 2>, read> = access %sb, 0u, %idx, 34u
-    %arr2_vec3_f32:array<vec3<f32>, 2> = load %72
-    %74:ptr<storage, array<mat4x2<f16>, 2>, read> = access %sb, 0u, %idx, 35u
-    %arr2_mat4x2_f16:array<mat4x2<f16>, 2> = load %74
+%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
   }
 }
+%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
+  }
+}
+%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
 ********************************************************************
diff --git a/test/tint/buffer/storage/dynamic_index/write.wgsl.expected.ir.msl b/test/tint/buffer/storage/dynamic_index/write.wgsl.expected.ir.msl
index 3555b75..ddc8fd3 100644
--- a/test/tint/buffer/storage/dynamic_index/write.wgsl.expected.ir.msl
+++ b/test/tint/buffer/storage/dynamic_index/write.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Inner = struct @align(16) {
+../../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)
@@ -29,12 +29,12 @@
   arr:array<Inner> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb:ptr<storage, S, read_write> = var @binding_point(0, 0)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%idx:u32 [@local_invocation_index]):void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%idx:u32 [@local_invocation_index]):void {
+  $B2: {
     %4:ptr<storage, f32, read_write> = access %sb, 0u, %idx, 0u
     store %4, 0.0f
     %5:ptr<storage, i32, read_write> = access %sb, 0u, %idx, 1u
@@ -62,23 +62,91 @@
     %16:ptr<storage, mat2x2<f32>, read_write> = access %sb, 0u, %idx, 12u
     store %16, mat2x2<f32>(vec2<f32>(0.0f))
     %17:ptr<storage, mat2x3<f32>, read_write> = access %sb, 0u, %idx, 13u
-    store %17, mat2x3<f32>(vec3<f32>(0.0f))
-    %18:ptr<storage, mat2x4<f32>, read_write> = access %sb, 0u, %idx, 14u
-    store %18, mat2x4<f32>(vec4<f32>(0.0f))
-    %19:ptr<storage, mat3x2<f32>, read_write> = access %sb, 0u, %idx, 15u
-    store %19, mat3x2<f32>(vec2<f32>(0.0f))
-    %20:ptr<storage, mat3x3<f32>, read_write> = access %sb, 0u, %idx, 16u
-    store %20, mat3x3<f32>(vec3<f32>(0.0f))
-    %21:ptr<storage, mat3x4<f32>, read_write> = access %sb, 0u, %idx, 17u
-    store %21, mat3x4<f32>(vec4<f32>(0.0f))
-    %22:ptr<storage, mat4x2<f32>, read_write> = access %sb, 0u, %idx, 18u
-    store %22, mat4x2<f32>(vec2<f32>(0.0f))
-    %23:ptr<storage, mat4x3<f32>, read_write> = access %sb, 0u, %idx, 19u
-    store %23, mat4x3<f32>(vec3<f32>(0.0f))
-    %24:ptr<storage, mat4x4<f32>, read_write> = access %sb, 0u, %idx, 20u
-    store %24, mat4x4<f32>(vec4<f32>(0.0f))
-    %25:ptr<storage, array<vec3<f32>, 2>, read_write> = access %sb, 0u, %idx, 21u
-    store %25, array<vec3<f32>, 2>(vec3<f32>(0.0f))
+    %18:void = call %tint_store_and_preserve_padding, %17, mat2x3<f32>(vec3<f32>(0.0f))
+    %20:ptr<storage, mat2x4<f32>, read_write> = access %sb, 0u, %idx, 14u
+    store %20, mat2x4<f32>(vec4<f32>(0.0f))
+    %21:ptr<storage, mat3x2<f32>, read_write> = access %sb, 0u, %idx, 15u
+    store %21, mat3x2<f32>(vec2<f32>(0.0f))
+    %22:ptr<storage, mat3x3<f32>, read_write> = access %sb, 0u, %idx, 16u
+    %23:void = call %tint_store_and_preserve_padding_1, %22, mat3x3<f32>(vec3<f32>(0.0f))
+    %25:ptr<storage, mat3x4<f32>, read_write> = access %sb, 0u, %idx, 17u
+    store %25, mat3x4<f32>(vec4<f32>(0.0f))
+    %26:ptr<storage, mat4x2<f32>, read_write> = access %sb, 0u, %idx, 18u
+    store %26, mat4x2<f32>(vec2<f32>(0.0f))
+    %27:ptr<storage, mat4x3<f32>, read_write> = access %sb, 0u, %idx, 19u
+    %28:void = call %tint_store_and_preserve_padding_2, %27, mat4x3<f32>(vec3<f32>(0.0f))
+    %30:ptr<storage, mat4x4<f32>, read_write> = access %sb, 0u, %idx, 20u
+    store %30, mat4x4<f32>(vec4<f32>(0.0f))
+    %31:ptr<storage, array<vec3<f32>, 2>, read_write> = access %sb, 0u, %idx, 21u
+    %32:void = call %tint_store_and_preserve_padding_3, %31, array<vec3<f32>, 2>(vec3<f32>(0.0f))
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat2x3<f32>, read_write>, %value_param:mat2x3<f32>):void {
+  $B3: {
+    %36:ptr<storage, vec3<f32>, read_write> = access %target, 0u
+    %37:vec3<f32> = access %value_param, 0u
+    store %36, %37
+    %38:ptr<storage, vec3<f32>, read_write> = access %target, 1u
+    %39:vec3<f32> = access %value_param, 1u
+    store %38, %39
+    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: {
+    %42:ptr<storage, vec3<f32>, read_write> = access %target_1, 0u
+    %43:vec3<f32> = access %value_param_1, 0u
+    store %42, %43
+    %44:ptr<storage, vec3<f32>, read_write> = access %target_1, 1u
+    %45:vec3<f32> = access %value_param_1, 1u
+    store %44, %45
+    %46:ptr<storage, vec3<f32>, read_write> = access %target_1, 2u
+    %47:vec3<f32> = access %value_param_1, 2u
+    store %46, %47
+    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: {
+    %50:ptr<storage, vec3<f32>, read_write> = access %target_2, 0u
+    %51:vec3<f32> = access %value_param_2, 0u
+    store %50, %51
+    %52:ptr<storage, vec3<f32>, read_write> = access %target_2, 1u
+    %53:vec3<f32> = access %value_param_2, 1u
+    store %52, %53
+    %54:ptr<storage, vec3<f32>, read_write> = access %target_2, 2u
+    %55:vec3<f32> = access %value_param_2, 2u
+    store %54, %55
+    %56:ptr<storage, vec3<f32>, read_write> = access %target_2, 3u
+    %57:vec3<f32> = access %value_param_2, 3u
+    store %56, %57
+    ret
+  }
+}
+%tint_store_and_preserve_padding_3 = func(%target_3:ptr<storage, array<vec3<f32>, 2>, read_write>, %value_param_3:array<vec3<f32>, 2>):void {  # %tint_store_and_preserve_padding_3: 'tint_store_and_preserve_padding', %target_3: 'target', %value_param_3: 'value_param'
+  $B6: {
+    loop [i: $B7, b: $B8, c: $B9] {  # loop_1
+      $B7: {  # initializer
+        next_iteration 0u  # -> $B8
+      }
+      $B8 (%idx_1:u32): {  # body
+        %61:bool = gte %idx_1, 2u
+        if %61 [t: $B10] {  # if_1
+          $B10: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %62:ptr<storage, vec3<f32>, read_write> = access %target_3, %idx_1
+        %63:vec3<f32> = access %value_param_3, %idx_1
+        store %62, %63
+        continue  # -> $B9
+      }
+      $B9: {  # continuing
+        %64:u32 = add %idx_1, 1u
+        next_iteration %64  # -> $B8
+      }
+    }
     ret
   }
 }
diff --git a/test/tint/buffer/storage/dynamic_index/write_f16.wgsl.expected.ir.msl b/test/tint/buffer/storage/dynamic_index/write_f16.wgsl.expected.ir.msl
index 8bdfba5..bd202cb 100644
--- a/test/tint/buffer/storage/dynamic_index/write_f16.wgsl.expected.ir.msl
+++ b/test/tint/buffer/storage/dynamic_index/write_f16.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Inner = struct @align(16) {
+../../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)
@@ -43,12 +43,12 @@
   arr:array<Inner> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb:ptr<storage, S, read_write> = var @binding_point(0, 0)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%idx:u32 [@local_invocation_index]):void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%idx:u32 [@local_invocation_index]):void {
+  $B2: {
     %4:ptr<storage, f32, read_write> = access %sb, 0u, %idx, 0u
     store %4, 0.0f
     %5:ptr<storage, i32, read_write> = access %sb, 0u, %idx, 1u
@@ -84,43 +84,153 @@
     %20:ptr<storage, mat2x2<f32>, read_write> = access %sb, 0u, %idx, 16u
     store %20, mat2x2<f32>(vec2<f32>(0.0f))
     %21:ptr<storage, mat2x3<f32>, read_write> = access %sb, 0u, %idx, 17u
-    store %21, mat2x3<f32>(vec3<f32>(0.0f))
-    %22:ptr<storage, mat2x4<f32>, read_write> = access %sb, 0u, %idx, 18u
-    store %22, mat2x4<f32>(vec4<f32>(0.0f))
-    %23:ptr<storage, mat3x2<f32>, read_write> = access %sb, 0u, %idx, 19u
-    store %23, mat3x2<f32>(vec2<f32>(0.0f))
-    %24:ptr<storage, mat3x3<f32>, read_write> = access %sb, 0u, %idx, 20u
-    store %24, mat3x3<f32>(vec3<f32>(0.0f))
-    %25:ptr<storage, mat3x4<f32>, read_write> = access %sb, 0u, %idx, 21u
-    store %25, mat3x4<f32>(vec4<f32>(0.0f))
-    %26:ptr<storage, mat4x2<f32>, read_write> = access %sb, 0u, %idx, 22u
-    store %26, mat4x2<f32>(vec2<f32>(0.0f))
-    %27:ptr<storage, mat4x3<f32>, read_write> = access %sb, 0u, %idx, 23u
-    store %27, mat4x3<f32>(vec3<f32>(0.0f))
-    %28:ptr<storage, mat4x4<f32>, read_write> = access %sb, 0u, %idx, 24u
-    store %28, mat4x4<f32>(vec4<f32>(0.0f))
-    %29:ptr<storage, mat2x2<f16>, read_write> = access %sb, 0u, %idx, 25u
-    store %29, mat2x2<f16>(vec2<f16>(0.0h))
-    %30:ptr<storage, mat2x3<f16>, read_write> = access %sb, 0u, %idx, 26u
-    store %30, mat2x3<f16>(vec3<f16>(0.0h))
-    %31:ptr<storage, mat2x4<f16>, read_write> = access %sb, 0u, %idx, 27u
-    store %31, mat2x4<f16>(vec4<f16>(0.0h))
-    %32:ptr<storage, mat3x2<f16>, read_write> = access %sb, 0u, %idx, 28u
-    store %32, mat3x2<f16>(vec2<f16>(0.0h))
-    %33:ptr<storage, mat3x3<f16>, read_write> = access %sb, 0u, %idx, 29u
-    store %33, mat3x3<f16>(vec3<f16>(0.0h))
-    %34:ptr<storage, mat3x4<f16>, read_write> = access %sb, 0u, %idx, 30u
-    store %34, mat3x4<f16>(vec4<f16>(0.0h))
-    %35:ptr<storage, mat4x2<f16>, read_write> = access %sb, 0u, %idx, 31u
-    store %35, mat4x2<f16>(vec2<f16>(0.0h))
-    %36:ptr<storage, mat4x3<f16>, read_write> = access %sb, 0u, %idx, 32u
-    store %36, mat4x3<f16>(vec3<f16>(0.0h))
-    %37:ptr<storage, mat4x4<f16>, read_write> = access %sb, 0u, %idx, 33u
-    store %37, mat4x4<f16>(vec4<f16>(0.0h))
-    %38:ptr<storage, array<vec3<f32>, 2>, read_write> = access %sb, 0u, %idx, 34u
-    store %38, array<vec3<f32>, 2>(vec3<f32>(0.0f))
-    %39:ptr<storage, array<mat4x2<f16>, 2>, read_write> = access %sb, 0u, %idx, 35u
-    store %39, array<mat4x2<f16>, 2>(mat4x2<f16>(vec2<f16>(0.0h)))
+    %22:void = call %tint_store_and_preserve_padding, %21, mat2x3<f32>(vec3<f32>(0.0f))
+    %24:ptr<storage, mat2x4<f32>, read_write> = access %sb, 0u, %idx, 18u
+    store %24, mat2x4<f32>(vec4<f32>(0.0f))
+    %25:ptr<storage, mat3x2<f32>, read_write> = access %sb, 0u, %idx, 19u
+    store %25, mat3x2<f32>(vec2<f32>(0.0f))
+    %26:ptr<storage, mat3x3<f32>, read_write> = access %sb, 0u, %idx, 20u
+    %27:void = call %tint_store_and_preserve_padding_1, %26, mat3x3<f32>(vec3<f32>(0.0f))
+    %29:ptr<storage, mat3x4<f32>, read_write> = access %sb, 0u, %idx, 21u
+    store %29, mat3x4<f32>(vec4<f32>(0.0f))
+    %30:ptr<storage, mat4x2<f32>, read_write> = access %sb, 0u, %idx, 22u
+    store %30, mat4x2<f32>(vec2<f32>(0.0f))
+    %31:ptr<storage, mat4x3<f32>, read_write> = access %sb, 0u, %idx, 23u
+    %32:void = call %tint_store_and_preserve_padding_2, %31, mat4x3<f32>(vec3<f32>(0.0f))
+    %34:ptr<storage, mat4x4<f32>, read_write> = access %sb, 0u, %idx, 24u
+    store %34, mat4x4<f32>(vec4<f32>(0.0f))
+    %35:ptr<storage, mat2x2<f16>, read_write> = access %sb, 0u, %idx, 25u
+    store %35, mat2x2<f16>(vec2<f16>(0.0h))
+    %36:ptr<storage, mat2x3<f16>, read_write> = access %sb, 0u, %idx, 26u
+    %37:void = call %tint_store_and_preserve_padding_3, %36, mat2x3<f16>(vec3<f16>(0.0h))
+    %39:ptr<storage, mat2x4<f16>, read_write> = access %sb, 0u, %idx, 27u
+    store %39, mat2x4<f16>(vec4<f16>(0.0h))
+    %40:ptr<storage, mat3x2<f16>, read_write> = access %sb, 0u, %idx, 28u
+    store %40, mat3x2<f16>(vec2<f16>(0.0h))
+    %41:ptr<storage, mat3x3<f16>, read_write> = access %sb, 0u, %idx, 29u
+    %42:void = call %tint_store_and_preserve_padding_4, %41, mat3x3<f16>(vec3<f16>(0.0h))
+    %44:ptr<storage, mat3x4<f16>, read_write> = access %sb, 0u, %idx, 30u
+    store %44, mat3x4<f16>(vec4<f16>(0.0h))
+    %45:ptr<storage, mat4x2<f16>, read_write> = access %sb, 0u, %idx, 31u
+    store %45, mat4x2<f16>(vec2<f16>(0.0h))
+    %46:ptr<storage, mat4x3<f16>, read_write> = access %sb, 0u, %idx, 32u
+    %47:void = call %tint_store_and_preserve_padding_5, %46, mat4x3<f16>(vec3<f16>(0.0h))
+    %49:ptr<storage, mat4x4<f16>, read_write> = access %sb, 0u, %idx, 33u
+    store %49, mat4x4<f16>(vec4<f16>(0.0h))
+    %50:ptr<storage, array<vec3<f32>, 2>, read_write> = access %sb, 0u, %idx, 34u
+    %51:void = call %tint_store_and_preserve_padding_6, %50, array<vec3<f32>, 2>(vec3<f32>(0.0f))
+    %53:ptr<storage, array<mat4x2<f16>, 2>, read_write> = access %sb, 0u, %idx, 35u
+    store %53, array<mat4x2<f16>, 2>(mat4x2<f16>(vec2<f16>(0.0h)))
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat2x3<f32>, read_write>, %value_param:mat2x3<f32>):void {
+  $B3: {
+    %56:ptr<storage, vec3<f32>, read_write> = access %target, 0u
+    %57:vec3<f32> = access %value_param, 0u
+    store %56, %57
+    %58:ptr<storage, vec3<f32>, read_write> = access %target, 1u
+    %59:vec3<f32> = access %value_param, 1u
+    store %58, %59
+    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: {
+    %62:ptr<storage, vec3<f32>, read_write> = access %target_1, 0u
+    %63:vec3<f32> = access %value_param_1, 0u
+    store %62, %63
+    %64:ptr<storage, vec3<f32>, read_write> = access %target_1, 1u
+    %65:vec3<f32> = access %value_param_1, 1u
+    store %64, %65
+    %66:ptr<storage, vec3<f32>, read_write> = access %target_1, 2u
+    %67:vec3<f32> = access %value_param_1, 2u
+    store %66, %67
+    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: {
+    %70:ptr<storage, vec3<f32>, read_write> = access %target_2, 0u
+    %71:vec3<f32> = access %value_param_2, 0u
+    store %70, %71
+    %72:ptr<storage, vec3<f32>, read_write> = access %target_2, 1u
+    %73:vec3<f32> = access %value_param_2, 1u
+    store %72, %73
+    %74:ptr<storage, vec3<f32>, read_write> = access %target_2, 2u
+    %75:vec3<f32> = access %value_param_2, 2u
+    store %74, %75
+    %76:ptr<storage, vec3<f32>, read_write> = access %target_2, 3u
+    %77:vec3<f32> = access %value_param_2, 3u
+    store %76, %77
+    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: {
+    %80:ptr<storage, vec3<f16>, read_write> = access %target_3, 0u
+    %81:vec3<f16> = access %value_param_3, 0u
+    store %80, %81
+    %82:ptr<storage, vec3<f16>, read_write> = access %target_3, 1u
+    %83:vec3<f16> = access %value_param_3, 1u
+    store %82, %83
+    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: {
+    %86:ptr<storage, vec3<f16>, read_write> = access %target_4, 0u
+    %87:vec3<f16> = access %value_param_4, 0u
+    store %86, %87
+    %88:ptr<storage, vec3<f16>, read_write> = access %target_4, 1u
+    %89:vec3<f16> = access %value_param_4, 1u
+    store %88, %89
+    %90:ptr<storage, vec3<f16>, read_write> = access %target_4, 2u
+    %91:vec3<f16> = access %value_param_4, 2u
+    store %90, %91
+    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: {
+    %94:ptr<storage, vec3<f16>, read_write> = access %target_5, 0u
+    %95:vec3<f16> = access %value_param_5, 0u
+    store %94, %95
+    %96:ptr<storage, vec3<f16>, read_write> = access %target_5, 1u
+    %97:vec3<f16> = access %value_param_5, 1u
+    store %96, %97
+    %98:ptr<storage, vec3<f16>, read_write> = access %target_5, 2u
+    %99:vec3<f16> = access %value_param_5, 2u
+    store %98, %99
+    %100:ptr<storage, vec3<f16>, read_write> = access %target_5, 3u
+    %101:vec3<f16> = access %value_param_5, 3u
+    store %100, %101
+    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
+      }
+      $B11 (%idx_1:u32): {  # body
+        %105:bool = gte %idx_1, 2u
+        if %105 [t: $B13] {  # if_1
+          $B13: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %106:ptr<storage, vec3<f32>, read_write> = access %target_6, %idx_1
+        %107:vec3<f32> = access %value_param_6, %idx_1
+        store %106, %107
+        continue  # -> $B12
+      }
+      $B12: {  # continuing
+        %108:u32 = add %idx_1, 1u
+        next_iteration %108  # -> $B11
+      }
+    }
     ret
   }
 }
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 9aca6f3..8db9155 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,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Inner = struct @align(4) {
+../../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)
 }
@@ -32,63 +32,178 @@
   array_struct_inner:array<Inner, 4> @offset(552)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb:ptr<storage, S, read> = var @binding_point(0, 0)
+  %s:ptr<storage, i32, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %3:ptr<storage, f32, read> = access %sb, 0u
-    %scalar_f32:f32 = load %3
-    %5:ptr<storage, i32, read> = access %sb, 1u
-    %scalar_i32:i32 = load %5
-    %7:ptr<storage, u32, read> = access %sb, 2u
-    %scalar_u32:u32 = load %7
-    %9:ptr<storage, vec2<f32>, read> = access %sb, 3u
-    %vec2_f32:vec2<f32> = load %9
-    %11:ptr<storage, vec2<i32>, read> = access %sb, 4u
-    %vec2_i32:vec2<i32> = load %11
-    %13:ptr<storage, vec2<u32>, read> = access %sb, 5u
-    %vec2_u32:vec2<u32> = load %13
-    %15:ptr<storage, vec3<f32>, read> = access %sb, 6u
-    %vec3_f32:vec3<f32> = load %15
-    %17:ptr<storage, vec3<i32>, read> = access %sb, 7u
-    %vec3_i32:vec3<i32> = load %17
-    %19:ptr<storage, vec3<u32>, read> = access %sb, 8u
-    %vec3_u32:vec3<u32> = load %19
-    %21:ptr<storage, vec4<f32>, read> = access %sb, 9u
-    %vec4_f32:vec4<f32> = load %21
-    %23:ptr<storage, vec4<i32>, read> = access %sb, 10u
-    %vec4_i32:vec4<i32> = load %23
-    %25:ptr<storage, vec4<u32>, read> = access %sb, 11u
-    %vec4_u32:vec4<u32> = load %25
-    %27:ptr<storage, mat2x2<f32>, read> = access %sb, 12u
-    %mat2x2_f32:mat2x2<f32> = load %27
-    %29:ptr<storage, mat2x3<f32>, read> = access %sb, 13u
-    %mat2x3_f32:mat2x3<f32> = load %29
-    %31:ptr<storage, mat2x4<f32>, read> = access %sb, 14u
-    %mat2x4_f32:mat2x4<f32> = load %31
-    %33:ptr<storage, mat3x2<f32>, read> = access %sb, 15u
-    %mat3x2_f32:mat3x2<f32> = load %33
-    %35:ptr<storage, mat3x3<f32>, read> = access %sb, 16u
-    %mat3x3_f32:mat3x3<f32> = load %35
-    %37:ptr<storage, mat3x4<f32>, read> = access %sb, 17u
-    %mat3x4_f32:mat3x4<f32> = load %37
-    %39:ptr<storage, mat4x2<f32>, read> = access %sb, 18u
-    %mat4x2_f32:mat4x2<f32> = load %39
-    %41:ptr<storage, mat4x3<f32>, read> = access %sb, 19u
-    %mat4x3_f32:mat4x3<f32> = load %41
-    %43:ptr<storage, mat4x4<f32>, read> = access %sb, 20u
-    %mat4x4_f32:mat4x4<f32> = load %43
-    %45:ptr<storage, array<vec3<f32>, 2>, read> = access %sb, 21u
-    %arr2_vec3_f32:array<vec3<f32>, 2> = load %45
-    %47:ptr<storage, Inner, read> = access %sb, 22u
-    %struct_inner:Inner = load %47
-    %49:ptr<storage, array<Inner, 4>, read> = access %sb, 23u
-    %array_struct_inner:array<Inner, 4> = load %49
+%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
 ********************************************************************
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 625cb04..799ebd2 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,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Inner = struct @align(4) {
+../../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)
@@ -47,91 +47,285 @@
   array_struct_inner:array<Inner, 4> @offset(812)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb:ptr<storage, S, read> = var @binding_point(0, 0)
+  %s:ptr<storage, i32, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %3:ptr<storage, f32, read> = access %sb, 0u
-    %scalar_f32:f32 = load %3
-    %5:ptr<storage, i32, read> = access %sb, 1u
-    %scalar_i32:i32 = load %5
-    %7:ptr<storage, u32, read> = access %sb, 2u
-    %scalar_u32:u32 = load %7
-    %9:ptr<storage, f16, read> = access %sb, 3u
-    %scalar_f16:f16 = load %9
-    %11:ptr<storage, vec2<f32>, read> = access %sb, 4u
-    %vec2_f32:vec2<f32> = load %11
-    %13:ptr<storage, vec2<i32>, read> = access %sb, 5u
-    %vec2_i32:vec2<i32> = load %13
-    %15:ptr<storage, vec2<u32>, read> = access %sb, 6u
-    %vec2_u32:vec2<u32> = load %15
-    %17:ptr<storage, vec2<f16>, read> = access %sb, 7u
-    %vec2_f16:vec2<f16> = load %17
-    %19:ptr<storage, vec3<f32>, read> = access %sb, 8u
-    %vec3_f32:vec3<f32> = load %19
-    %21:ptr<storage, vec3<i32>, read> = access %sb, 9u
-    %vec3_i32:vec3<i32> = load %21
-    %23:ptr<storage, vec3<u32>, read> = access %sb, 10u
-    %vec3_u32:vec3<u32> = load %23
-    %25:ptr<storage, vec3<f16>, read> = access %sb, 11u
-    %vec3_f16:vec3<f16> = load %25
-    %27:ptr<storage, vec4<f32>, read> = access %sb, 12u
-    %vec4_f32:vec4<f32> = load %27
-    %29:ptr<storage, vec4<i32>, read> = access %sb, 13u
-    %vec4_i32:vec4<i32> = load %29
-    %31:ptr<storage, vec4<u32>, read> = access %sb, 14u
-    %vec4_u32:vec4<u32> = load %31
-    %33:ptr<storage, vec4<f16>, read> = access %sb, 15u
-    %vec4_f16:vec4<f16> = load %33
-    %35:ptr<storage, mat2x2<f32>, read> = access %sb, 16u
-    %mat2x2_f32:mat2x2<f32> = load %35
-    %37:ptr<storage, mat2x3<f32>, read> = access %sb, 17u
-    %mat2x3_f32:mat2x3<f32> = load %37
-    %39:ptr<storage, mat2x4<f32>, read> = access %sb, 18u
-    %mat2x4_f32:mat2x4<f32> = load %39
-    %41:ptr<storage, mat3x2<f32>, read> = access %sb, 19u
-    %mat3x2_f32:mat3x2<f32> = load %41
-    %43:ptr<storage, mat3x3<f32>, read> = access %sb, 20u
-    %mat3x3_f32:mat3x3<f32> = load %43
-    %45:ptr<storage, mat3x4<f32>, read> = access %sb, 21u
-    %mat3x4_f32:mat3x4<f32> = load %45
-    %47:ptr<storage, mat4x2<f32>, read> = access %sb, 22u
-    %mat4x2_f32:mat4x2<f32> = load %47
-    %49:ptr<storage, mat4x3<f32>, read> = access %sb, 23u
-    %mat4x3_f32:mat4x3<f32> = load %49
-    %51:ptr<storage, mat4x4<f32>, read> = access %sb, 24u
-    %mat4x4_f32:mat4x4<f32> = load %51
-    %53:ptr<storage, mat2x2<f16>, read> = access %sb, 25u
-    %mat2x2_f16:mat2x2<f16> = load %53
-    %55:ptr<storage, mat2x3<f16>, read> = access %sb, 26u
-    %mat2x3_f16:mat2x3<f16> = load %55
-    %57:ptr<storage, mat2x4<f16>, read> = access %sb, 27u
-    %mat2x4_f16:mat2x4<f16> = load %57
-    %59:ptr<storage, mat3x2<f16>, read> = access %sb, 28u
-    %mat3x2_f16:mat3x2<f16> = load %59
-    %61:ptr<storage, mat3x3<f16>, read> = access %sb, 29u
-    %mat3x3_f16:mat3x3<f16> = load %61
-    %63:ptr<storage, mat3x4<f16>, read> = access %sb, 30u
-    %mat3x4_f16:mat3x4<f16> = load %63
-    %65:ptr<storage, mat4x2<f16>, read> = access %sb, 31u
-    %mat4x2_f16:mat4x2<f16> = load %65
-    %67:ptr<storage, mat4x3<f16>, read> = access %sb, 32u
-    %mat4x3_f16:mat4x3<f16> = load %67
-    %69:ptr<storage, mat4x4<f16>, read> = access %sb, 33u
-    %mat4x4_f16:mat4x4<f16> = load %69
-    %71:ptr<storage, array<vec3<f32>, 2>, read> = access %sb, 34u
-    %arr2_vec3_f32:array<vec3<f32>, 2> = load %71
-    %73:ptr<storage, array<mat4x2<f16>, 2>, read> = access %sb, 35u
-    %arr2_mat4x2_f16:array<mat4x2<f16>, 2> = load %73
-    %75:ptr<storage, Inner, read> = access %sb, 36u
-    %struct_inner:Inner = load %75
-    %77:ptr<storage, array<Inner, 4>, read> = access %sb, 37u
-    %array_struct_inner:array<Inner, 4> = load %77
+%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
   }
 }
+%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
 ********************************************************************
diff --git a/test/tint/buffer/storage/static_index/write.wgsl.expected.ir.msl b/test/tint/buffer/storage/static_index/write.wgsl.expected.ir.msl
index 8da450a..25f17fd 100644
--- a/test/tint/buffer/storage/static_index/write.wgsl.expected.ir.msl
+++ b/test/tint/buffer/storage/static_index/write.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Inner = struct @align(4) {
+../../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)
 }
@@ -32,12 +32,12 @@
   array_struct_inner:array<Inner, 4> @offset(552)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb:ptr<storage, S, read_write> = var @binding_point(0, 0)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%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
@@ -65,27 +65,95 @@
     %15:ptr<storage, mat2x2<f32>, read_write> = access %sb, 12u
     store %15, mat2x2<f32>(vec2<f32>(0.0f))
     %16:ptr<storage, mat2x3<f32>, read_write> = access %sb, 13u
-    store %16, mat2x3<f32>(vec3<f32>(0.0f))
-    %17:ptr<storage, mat2x4<f32>, read_write> = access %sb, 14u
-    store %17, mat2x4<f32>(vec4<f32>(0.0f))
-    %18:ptr<storage, mat3x2<f32>, read_write> = access %sb, 15u
-    store %18, mat3x2<f32>(vec2<f32>(0.0f))
-    %19:ptr<storage, mat3x3<f32>, read_write> = access %sb, 16u
-    store %19, mat3x3<f32>(vec3<f32>(0.0f))
-    %20:ptr<storage, mat3x4<f32>, read_write> = access %sb, 17u
-    store %20, mat3x4<f32>(vec4<f32>(0.0f))
-    %21:ptr<storage, mat4x2<f32>, read_write> = access %sb, 18u
-    store %21, mat4x2<f32>(vec2<f32>(0.0f))
-    %22:ptr<storage, mat4x3<f32>, read_write> = access %sb, 19u
-    store %22, mat4x3<f32>(vec3<f32>(0.0f))
-    %23:ptr<storage, mat4x4<f32>, read_write> = access %sb, 20u
-    store %23, mat4x4<f32>(vec4<f32>(0.0f))
-    %24:ptr<storage, array<vec3<f32>, 2>, read_write> = access %sb, 21u
-    store %24, array<vec3<f32>, 2>(vec3<f32>(0.0f))
-    %25:ptr<storage, Inner, read_write> = access %sb, 22u
-    store %25, Inner(0i, 0.0f)
-    %26:ptr<storage, array<Inner, 4>, read_write> = access %sb, 23u
-    store %26, array<Inner, 4>(Inner(0i, 0.0f))
+    %17:void = call %tint_store_and_preserve_padding, %16, mat2x3<f32>(vec3<f32>(0.0f))
+    %19:ptr<storage, mat2x4<f32>, read_write> = access %sb, 14u
+    store %19, mat2x4<f32>(vec4<f32>(0.0f))
+    %20:ptr<storage, mat3x2<f32>, read_write> = access %sb, 15u
+    store %20, mat3x2<f32>(vec2<f32>(0.0f))
+    %21:ptr<storage, mat3x3<f32>, read_write> = access %sb, 16u
+    %22:void = call %tint_store_and_preserve_padding_1, %21, mat3x3<f32>(vec3<f32>(0.0f))
+    %24:ptr<storage, mat3x4<f32>, read_write> = access %sb, 17u
+    store %24, mat3x4<f32>(vec4<f32>(0.0f))
+    %25:ptr<storage, mat4x2<f32>, read_write> = access %sb, 18u
+    store %25, mat4x2<f32>(vec2<f32>(0.0f))
+    %26:ptr<storage, mat4x3<f32>, read_write> = access %sb, 19u
+    %27:void = call %tint_store_and_preserve_padding_2, %26, mat4x3<f32>(vec3<f32>(0.0f))
+    %29:ptr<storage, mat4x4<f32>, read_write> = access %sb, 20u
+    store %29, mat4x4<f32>(vec4<f32>(0.0f))
+    %30:ptr<storage, array<vec3<f32>, 2>, read_write> = access %sb, 21u
+    %31:void = call %tint_store_and_preserve_padding_3, %30, array<vec3<f32>, 2>(vec3<f32>(0.0f))
+    %33:ptr<storage, Inner, read_write> = access %sb, 22u
+    store %33, Inner(0i, 0.0f)
+    %34:ptr<storage, array<Inner, 4>, read_write> = access %sb, 23u
+    store %34, array<Inner, 4>(Inner(0i, 0.0f))
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat2x3<f32>, read_write>, %value_param:mat2x3<f32>):void {
+  $B3: {
+    %37:ptr<storage, vec3<f32>, read_write> = access %target, 0u
+    %38:vec3<f32> = access %value_param, 0u
+    store %37, %38
+    %39:ptr<storage, vec3<f32>, read_write> = access %target, 1u
+    %40:vec3<f32> = access %value_param, 1u
+    store %39, %40
+    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: {
+    %43:ptr<storage, vec3<f32>, read_write> = access %target_1, 0u
+    %44:vec3<f32> = access %value_param_1, 0u
+    store %43, %44
+    %45:ptr<storage, vec3<f32>, read_write> = access %target_1, 1u
+    %46:vec3<f32> = access %value_param_1, 1u
+    store %45, %46
+    %47:ptr<storage, vec3<f32>, read_write> = access %target_1, 2u
+    %48:vec3<f32> = access %value_param_1, 2u
+    store %47, %48
+    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: {
+    %51:ptr<storage, vec3<f32>, read_write> = access %target_2, 0u
+    %52:vec3<f32> = access %value_param_2, 0u
+    store %51, %52
+    %53:ptr<storage, vec3<f32>, read_write> = access %target_2, 1u
+    %54:vec3<f32> = access %value_param_2, 1u
+    store %53, %54
+    %55:ptr<storage, vec3<f32>, read_write> = access %target_2, 2u
+    %56:vec3<f32> = access %value_param_2, 2u
+    store %55, %56
+    %57:ptr<storage, vec3<f32>, read_write> = access %target_2, 3u
+    %58:vec3<f32> = access %value_param_2, 3u
+    store %57, %58
+    ret
+  }
+}
+%tint_store_and_preserve_padding_3 = func(%target_3:ptr<storage, array<vec3<f32>, 2>, read_write>, %value_param_3:array<vec3<f32>, 2>):void {  # %tint_store_and_preserve_padding_3: 'tint_store_and_preserve_padding', %target_3: 'target', %value_param_3: 'value_param'
+  $B6: {
+    loop [i: $B7, b: $B8, c: $B9] {  # loop_1
+      $B7: {  # initializer
+        next_iteration 0u  # -> $B8
+      }
+      $B8 (%idx:u32): {  # body
+        %62:bool = gte %idx, 2u
+        if %62 [t: $B10] {  # if_1
+          $B10: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %63:ptr<storage, vec3<f32>, read_write> = access %target_3, %idx
+        %64:vec3<f32> = access %value_param_3, %idx
+        store %63, %64
+        continue  # -> $B9
+      }
+      $B9: {  # continuing
+        %65:u32 = add %idx, 1u
+        next_iteration %65  # -> $B8
+      }
+    }
     ret
   }
 }
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 be16f05..f4695d3 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,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Inner = struct @align(4) {
+../../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)
@@ -47,12 +47,12 @@
   array_struct_inner:array<Inner, 4> @offset(812)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb:ptr<storage, S, read_write> = var @binding_point(0, 0)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%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
@@ -88,47 +88,197 @@
     %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
-    store %20, mat2x3<f32>(vec3<f32>(0.0f))
-    %21:ptr<storage, mat2x4<f32>, read_write> = access %sb, 18u
-    store %21, mat2x4<f32>(vec4<f32>(0.0f))
-    %22:ptr<storage, mat3x2<f32>, read_write> = access %sb, 19u
-    store %22, mat3x2<f32>(vec2<f32>(0.0f))
-    %23:ptr<storage, mat3x3<f32>, read_write> = access %sb, 20u
-    store %23, mat3x3<f32>(vec3<f32>(0.0f))
-    %24:ptr<storage, mat3x4<f32>, read_write> = access %sb, 21u
-    store %24, mat3x4<f32>(vec4<f32>(0.0f))
-    %25:ptr<storage, mat4x2<f32>, read_write> = access %sb, 22u
-    store %25, mat4x2<f32>(vec2<f32>(0.0f))
-    %26:ptr<storage, mat4x3<f32>, read_write> = access %sb, 23u
-    store %26, mat4x3<f32>(vec3<f32>(0.0f))
-    %27:ptr<storage, mat4x4<f32>, read_write> = access %sb, 24u
-    store %27, mat4x4<f32>(vec4<f32>(0.0f))
-    %28:ptr<storage, mat2x2<f16>, read_write> = access %sb, 25u
-    store %28, mat2x2<f16>(vec2<f16>(0.0h))
-    %29:ptr<storage, mat2x3<f16>, read_write> = access %sb, 26u
-    store %29, mat2x3<f16>(vec3<f16>(0.0h))
-    %30:ptr<storage, mat2x4<f16>, read_write> = access %sb, 27u
-    store %30, mat2x4<f16>(vec4<f16>(0.0h))
-    %31:ptr<storage, mat3x2<f16>, read_write> = access %sb, 28u
-    store %31, mat3x2<f16>(vec2<f16>(0.0h))
-    %32:ptr<storage, mat3x3<f16>, read_write> = access %sb, 29u
-    store %32, mat3x3<f16>(vec3<f16>(0.0h))
-    %33:ptr<storage, mat3x4<f16>, read_write> = access %sb, 30u
-    store %33, mat3x4<f16>(vec4<f16>(0.0h))
-    %34:ptr<storage, mat4x2<f16>, read_write> = access %sb, 31u
-    store %34, mat4x2<f16>(vec2<f16>(0.0h))
-    %35:ptr<storage, mat4x3<f16>, read_write> = access %sb, 32u
-    store %35, mat4x3<f16>(vec3<f16>(0.0h))
-    %36:ptr<storage, mat4x4<f16>, read_write> = access %sb, 33u
-    store %36, mat4x4<f16>(vec4<f16>(0.0h))
-    %37:ptr<storage, array<vec3<f32>, 2>, read_write> = access %sb, 34u
-    store %37, array<vec3<f32>, 2>(vec3<f32>(0.0f))
-    %38:ptr<storage, array<mat4x2<f16>, 2>, read_write> = access %sb, 35u
-    store %38, array<mat4x2<f16>, 2>(mat4x2<f16>(vec2<f16>(0.0h)))
-    %39:ptr<storage, Inner, read_write> = access %sb, 36u
-    store %39, Inner(0i, 0.0f, 0.0h)
-    %40:ptr<storage, array<Inner, 4>, read_write> = access %sb, 37u
-    store %40, array<Inner, 4>(Inner(0i, 0.0f, 0.0h))
+    %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
+      }
+      $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
+      }
+    }
+    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
+      }
+      $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
+      }
+    }
     ret
   }
 }
diff --git a/test/tint/buffer/storage/types/array4_f16.wgsl.expected.ir.msl b/test/tint/buffer/storage/types/array4_f16.wgsl.expected.ir.msl
index 6a3ffbb..5efff12 100644
--- a/test/tint/buffer/storage/types/array4_f16.wgsl.expected.ir.msl
+++ b/test/tint/buffer/storage/types/array4_f16.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %in:ptr<storage, array<f16, 4>, read> = var @binding_point(0, 0)
   %out:ptr<storage, array<f16, 4>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:array<f16, 4> = load %in
     store %out, %4
     ret
diff --git a/test/tint/buffer/storage/types/array4_f32.wgsl.expected.ir.msl b/test/tint/buffer/storage/types/array4_f32.wgsl.expected.ir.msl
index 9442558..8e51e1b 100644
--- a/test/tint/buffer/storage/types/array4_f32.wgsl.expected.ir.msl
+++ b/test/tint/buffer/storage/types/array4_f32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %in:ptr<storage, array<f32, 4>, read> = var @binding_point(0, 0)
   %out:ptr<storage, array<f32, 4>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:array<f32, 4> = load %in
     store %out, %4
     ret
diff --git a/test/tint/buffer/storage/types/f16.wgsl.expected.ir.msl b/test/tint/buffer/storage/types/f16.wgsl.expected.ir.msl
index 2fe002f..8a3ce30 100644
--- a/test/tint/buffer/storage/types/f16.wgsl.expected.ir.msl
+++ b/test/tint/buffer/storage/types/f16.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %in:ptr<storage, f16, read> = var @binding_point(0, 0)
   %out:ptr<storage, f16, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:f16 = load %in
     store %out, %4
     ret
diff --git a/test/tint/buffer/storage/types/f32.wgsl.expected.ir.msl b/test/tint/buffer/storage/types/f32.wgsl.expected.ir.msl
index 8d02974..c6d9e30 100644
--- a/test/tint/buffer/storage/types/f32.wgsl.expected.ir.msl
+++ b/test/tint/buffer/storage/types/f32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %in:ptr<storage, f32, read> = var @binding_point(0, 0)
   %out:ptr<storage, f32, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:f32 = load %in
     store %out, %4
     ret
diff --git a/test/tint/buffer/storage/types/i32.wgsl.expected.ir.msl b/test/tint/buffer/storage/types/i32.wgsl.expected.ir.msl
index 199e131..a84dbf6 100644
--- a/test/tint/buffer/storage/types/i32.wgsl.expected.ir.msl
+++ b/test/tint/buffer/storage/types/i32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %in:ptr<storage, i32, read> = var @binding_point(0, 0)
   %out:ptr<storage, i32, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:i32 = load %in
     store %out, %4
     ret
diff --git a/test/tint/buffer/storage/types/mat2x2_f16.wgsl.expected.ir.msl b/test/tint/buffer/storage/types/mat2x2_f16.wgsl.expected.ir.msl
index 3ebfdc9..189b8ce 100644
--- a/test/tint/buffer/storage/types/mat2x2_f16.wgsl.expected.ir.msl
+++ b/test/tint/buffer/storage/types/mat2x2_f16.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %in:ptr<storage, mat2x2<f16>, read> = var @binding_point(0, 0)
   %out:ptr<storage, mat2x2<f16>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat2x2<f16> = load %in
     store %out, %4
     ret
diff --git a/test/tint/buffer/storage/types/mat2x2_f32.wgsl.expected.ir.msl b/test/tint/buffer/storage/types/mat2x2_f32.wgsl.expected.ir.msl
index 726c9eb..17acaf1 100644
--- a/test/tint/buffer/storage/types/mat2x2_f32.wgsl.expected.ir.msl
+++ b/test/tint/buffer/storage/types/mat2x2_f32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %in:ptr<storage, mat2x2<f32>, read> = var @binding_point(0, 0)
   %out:ptr<storage, mat2x2<f32>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat2x2<f32> = load %in
     store %out, %4
     ret
diff --git a/test/tint/buffer/storage/types/mat2x3_f16.wgsl.expected.ir.msl b/test/tint/buffer/storage/types/mat2x3_f16.wgsl.expected.ir.msl
index 5197c24..fe91e6c 100644
--- a/test/tint/buffer/storage/types/mat2x3_f16.wgsl.expected.ir.msl
+++ b/test/tint/buffer/storage/types/mat2x3_f16.wgsl.expected.ir.msl
@@ -1,14 +1,25 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %in:ptr<storage, mat2x3<f16>, read> = var @binding_point(0, 0)
   %out:ptr<storage, mat2x3<f16>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat2x3<f16> = load %in
-    store %out, %4
+    %5:void = call %tint_store_and_preserve_padding, %out, %4
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat2x3<f16>, read_write>, %value_param:mat2x3<f16>):void {
+  $B3: {
+    %9:ptr<storage, vec3<f16>, read_write> = access %target, 0u
+    %10:vec3<f16> = access %value_param, 0u
+    store %9, %10
+    %11:ptr<storage, vec3<f16>, read_write> = access %target, 1u
+    %12:vec3<f16> = access %value_param, 1u
+    store %11, %12
     ret
   }
 }
diff --git a/test/tint/buffer/storage/types/mat2x3_f32.wgsl.expected.ir.msl b/test/tint/buffer/storage/types/mat2x3_f32.wgsl.expected.ir.msl
index c7c9ccf..4423fbe 100644
--- a/test/tint/buffer/storage/types/mat2x3_f32.wgsl.expected.ir.msl
+++ b/test/tint/buffer/storage/types/mat2x3_f32.wgsl.expected.ir.msl
@@ -1,14 +1,25 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %in:ptr<storage, mat2x3<f32>, read> = var @binding_point(0, 0)
   %out:ptr<storage, mat2x3<f32>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat2x3<f32> = load %in
-    store %out, %4
+    %5:void = call %tint_store_and_preserve_padding, %out, %4
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat2x3<f32>, read_write>, %value_param:mat2x3<f32>):void {
+  $B3: {
+    %9:ptr<storage, vec3<f32>, read_write> = access %target, 0u
+    %10:vec3<f32> = access %value_param, 0u
+    store %9, %10
+    %11:ptr<storage, vec3<f32>, read_write> = access %target, 1u
+    %12:vec3<f32> = access %value_param, 1u
+    store %11, %12
     ret
   }
 }
diff --git a/test/tint/buffer/storage/types/mat2x4_f16.wgsl.expected.ir.msl b/test/tint/buffer/storage/types/mat2x4_f16.wgsl.expected.ir.msl
index 99c1686..07a73c5 100644
--- a/test/tint/buffer/storage/types/mat2x4_f16.wgsl.expected.ir.msl
+++ b/test/tint/buffer/storage/types/mat2x4_f16.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %in:ptr<storage, mat2x4<f16>, read> = var @binding_point(0, 0)
   %out:ptr<storage, mat2x4<f16>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat2x4<f16> = load %in
     store %out, %4
     ret
diff --git a/test/tint/buffer/storage/types/mat2x4_f32.wgsl.expected.ir.msl b/test/tint/buffer/storage/types/mat2x4_f32.wgsl.expected.ir.msl
index 72f0f8a..6e3cc0f 100644
--- a/test/tint/buffer/storage/types/mat2x4_f32.wgsl.expected.ir.msl
+++ b/test/tint/buffer/storage/types/mat2x4_f32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %in:ptr<storage, mat2x4<f32>, read> = var @binding_point(0, 0)
   %out:ptr<storage, mat2x4<f32>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat2x4<f32> = load %in
     store %out, %4
     ret
diff --git a/test/tint/buffer/storage/types/mat3x2_f16.wgsl.expected.ir.msl b/test/tint/buffer/storage/types/mat3x2_f16.wgsl.expected.ir.msl
index b2df7f4..b906b25 100644
--- a/test/tint/buffer/storage/types/mat3x2_f16.wgsl.expected.ir.msl
+++ b/test/tint/buffer/storage/types/mat3x2_f16.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %in:ptr<storage, mat3x2<f16>, read> = var @binding_point(0, 0)
   %out:ptr<storage, mat3x2<f16>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat3x2<f16> = load %in
     store %out, %4
     ret
diff --git a/test/tint/buffer/storage/types/mat3x2_f32.wgsl.expected.ir.msl b/test/tint/buffer/storage/types/mat3x2_f32.wgsl.expected.ir.msl
index ef3b803..8522e4f 100644
--- a/test/tint/buffer/storage/types/mat3x2_f32.wgsl.expected.ir.msl
+++ b/test/tint/buffer/storage/types/mat3x2_f32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %in:ptr<storage, mat3x2<f32>, read> = var @binding_point(0, 0)
   %out:ptr<storage, mat3x2<f32>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat3x2<f32> = load %in
     store %out, %4
     ret
diff --git a/test/tint/buffer/storage/types/mat3x3_f16.wgsl.expected.ir.msl b/test/tint/buffer/storage/types/mat3x3_f16.wgsl.expected.ir.msl
index 5ae796a..73c8213 100644
--- a/test/tint/buffer/storage/types/mat3x3_f16.wgsl.expected.ir.msl
+++ b/test/tint/buffer/storage/types/mat3x3_f16.wgsl.expected.ir.msl
@@ -1,14 +1,28 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %in:ptr<storage, mat3x3<f16>, read> = var @binding_point(0, 0)
   %out:ptr<storage, mat3x3<f16>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat3x3<f16> = load %in
-    store %out, %4
+    %5:void = call %tint_store_and_preserve_padding, %out, %4
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat3x3<f16>, read_write>, %value_param:mat3x3<f16>):void {
+  $B3: {
+    %9:ptr<storage, vec3<f16>, read_write> = access %target, 0u
+    %10:vec3<f16> = access %value_param, 0u
+    store %9, %10
+    %11:ptr<storage, vec3<f16>, read_write> = access %target, 1u
+    %12:vec3<f16> = access %value_param, 1u
+    store %11, %12
+    %13:ptr<storage, vec3<f16>, read_write> = access %target, 2u
+    %14:vec3<f16> = access %value_param, 2u
+    store %13, %14
     ret
   }
 }
diff --git a/test/tint/buffer/storage/types/mat3x3_f32.wgsl.expected.ir.msl b/test/tint/buffer/storage/types/mat3x3_f32.wgsl.expected.ir.msl
index e35d5b7..ce6f52f 100644
--- a/test/tint/buffer/storage/types/mat3x3_f32.wgsl.expected.ir.msl
+++ b/test/tint/buffer/storage/types/mat3x3_f32.wgsl.expected.ir.msl
@@ -1,14 +1,28 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %in:ptr<storage, mat3x3<f32>, read> = var @binding_point(0, 0)
   %out:ptr<storage, mat3x3<f32>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat3x3<f32> = load %in
-    store %out, %4
+    %5:void = call %tint_store_and_preserve_padding, %out, %4
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat3x3<f32>, read_write>, %value_param:mat3x3<f32>):void {
+  $B3: {
+    %9:ptr<storage, vec3<f32>, read_write> = access %target, 0u
+    %10:vec3<f32> = access %value_param, 0u
+    store %9, %10
+    %11:ptr<storage, vec3<f32>, read_write> = access %target, 1u
+    %12:vec3<f32> = access %value_param, 1u
+    store %11, %12
+    %13:ptr<storage, vec3<f32>, read_write> = access %target, 2u
+    %14:vec3<f32> = access %value_param, 2u
+    store %13, %14
     ret
   }
 }
diff --git a/test/tint/buffer/storage/types/mat3x4_f16.wgsl.expected.ir.msl b/test/tint/buffer/storage/types/mat3x4_f16.wgsl.expected.ir.msl
index 6cc8cc0..f030f51 100644
--- a/test/tint/buffer/storage/types/mat3x4_f16.wgsl.expected.ir.msl
+++ b/test/tint/buffer/storage/types/mat3x4_f16.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %in:ptr<storage, mat3x4<f16>, read> = var @binding_point(0, 0)
   %out:ptr<storage, mat3x4<f16>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat3x4<f16> = load %in
     store %out, %4
     ret
diff --git a/test/tint/buffer/storage/types/mat3x4_f32.wgsl.expected.ir.msl b/test/tint/buffer/storage/types/mat3x4_f32.wgsl.expected.ir.msl
index 2497dde..235bd7a 100644
--- a/test/tint/buffer/storage/types/mat3x4_f32.wgsl.expected.ir.msl
+++ b/test/tint/buffer/storage/types/mat3x4_f32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %in:ptr<storage, mat3x4<f32>, read> = var @binding_point(0, 0)
   %out:ptr<storage, mat3x4<f32>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat3x4<f32> = load %in
     store %out, %4
     ret
diff --git a/test/tint/buffer/storage/types/mat4x2_f16.wgsl.expected.ir.msl b/test/tint/buffer/storage/types/mat4x2_f16.wgsl.expected.ir.msl
index 9ec67a9..c8bacd4 100644
--- a/test/tint/buffer/storage/types/mat4x2_f16.wgsl.expected.ir.msl
+++ b/test/tint/buffer/storage/types/mat4x2_f16.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %in:ptr<storage, mat4x2<f16>, read> = var @binding_point(0, 0)
   %out:ptr<storage, mat4x2<f16>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat4x2<f16> = load %in
     store %out, %4
     ret
diff --git a/test/tint/buffer/storage/types/mat4x2_f32.wgsl.expected.ir.msl b/test/tint/buffer/storage/types/mat4x2_f32.wgsl.expected.ir.msl
index 03500f2..9b4d556 100644
--- a/test/tint/buffer/storage/types/mat4x2_f32.wgsl.expected.ir.msl
+++ b/test/tint/buffer/storage/types/mat4x2_f32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %in:ptr<storage, mat4x2<f32>, read> = var @binding_point(0, 0)
   %out:ptr<storage, mat4x2<f32>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat4x2<f32> = load %in
     store %out, %4
     ret
diff --git a/test/tint/buffer/storage/types/mat4x3_f16.wgsl.expected.ir.msl b/test/tint/buffer/storage/types/mat4x3_f16.wgsl.expected.ir.msl
index 1e49ad3..2680261 100644
--- a/test/tint/buffer/storage/types/mat4x3_f16.wgsl.expected.ir.msl
+++ b/test/tint/buffer/storage/types/mat4x3_f16.wgsl.expected.ir.msl
@@ -1,14 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %in:ptr<storage, mat4x3<f16>, read> = var @binding_point(0, 0)
   %out:ptr<storage, mat4x3<f16>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat4x3<f16> = load %in
-    store %out, %4
+    %5:void = call %tint_store_and_preserve_padding, %out, %4
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat4x3<f16>, read_write>, %value_param:mat4x3<f16>):void {
+  $B3: {
+    %9:ptr<storage, vec3<f16>, read_write> = access %target, 0u
+    %10:vec3<f16> = access %value_param, 0u
+    store %9, %10
+    %11:ptr<storage, vec3<f16>, read_write> = access %target, 1u
+    %12:vec3<f16> = access %value_param, 1u
+    store %11, %12
+    %13:ptr<storage, vec3<f16>, read_write> = access %target, 2u
+    %14:vec3<f16> = access %value_param, 2u
+    store %13, %14
+    %15:ptr<storage, vec3<f16>, read_write> = access %target, 3u
+    %16:vec3<f16> = access %value_param, 3u
+    store %15, %16
     ret
   }
 }
diff --git a/test/tint/buffer/storage/types/mat4x3_f32.wgsl.expected.ir.msl b/test/tint/buffer/storage/types/mat4x3_f32.wgsl.expected.ir.msl
index 7e732e4..f360275 100644
--- a/test/tint/buffer/storage/types/mat4x3_f32.wgsl.expected.ir.msl
+++ b/test/tint/buffer/storage/types/mat4x3_f32.wgsl.expected.ir.msl
@@ -1,14 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %in:ptr<storage, mat4x3<f32>, read> = var @binding_point(0, 0)
   %out:ptr<storage, mat4x3<f32>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat4x3<f32> = load %in
-    store %out, %4
+    %5:void = call %tint_store_and_preserve_padding, %out, %4
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat4x3<f32>, read_write>, %value_param:mat4x3<f32>):void {
+  $B3: {
+    %9:ptr<storage, vec3<f32>, read_write> = access %target, 0u
+    %10:vec3<f32> = access %value_param, 0u
+    store %9, %10
+    %11:ptr<storage, vec3<f32>, read_write> = access %target, 1u
+    %12:vec3<f32> = access %value_param, 1u
+    store %11, %12
+    %13:ptr<storage, vec3<f32>, read_write> = access %target, 2u
+    %14:vec3<f32> = access %value_param, 2u
+    store %13, %14
+    %15:ptr<storage, vec3<f32>, read_write> = access %target, 3u
+    %16:vec3<f32> = access %value_param, 3u
+    store %15, %16
     ret
   }
 }
diff --git a/test/tint/buffer/storage/types/mat4x4_f16.wgsl.expected.ir.msl b/test/tint/buffer/storage/types/mat4x4_f16.wgsl.expected.ir.msl
index b362c32..b1f7375 100644
--- a/test/tint/buffer/storage/types/mat4x4_f16.wgsl.expected.ir.msl
+++ b/test/tint/buffer/storage/types/mat4x4_f16.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %in:ptr<storage, mat4x4<f16>, read> = var @binding_point(0, 0)
   %out:ptr<storage, mat4x4<f16>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat4x4<f16> = load %in
     store %out, %4
     ret
diff --git a/test/tint/buffer/storage/types/mat4x4_f32.wgsl.expected.ir.msl b/test/tint/buffer/storage/types/mat4x4_f32.wgsl.expected.ir.msl
index 86b7368..e5c26b0 100644
--- a/test/tint/buffer/storage/types/mat4x4_f32.wgsl.expected.ir.msl
+++ b/test/tint/buffer/storage/types/mat4x4_f32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %in:ptr<storage, mat4x4<f32>, read> = var @binding_point(0, 0)
   %out:ptr<storage, mat4x4<f32>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat4x4<f32> = load %in
     store %out, %4
     ret
diff --git a/test/tint/buffer/storage/types/runtime_array_f16.wgsl.expected.ir.msl b/test/tint/buffer/storage/types/runtime_array_f16.wgsl.expected.ir.msl
index dfe8c55..ebcc21e 100644
--- a/test/tint/buffer/storage/types/runtime_array_f16.wgsl.expected.ir.msl
+++ b/test/tint/buffer/storage/types/runtime_array_f16.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %in:ptr<storage, array<f16>, read> = var @binding_point(0, 0)
   %out:ptr<storage, array<f16>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:ptr<storage, f16, read_write> = access %out, 0i
     %5:ptr<storage, f16, read> = access %in, 0i
     %6:f16 = load %5
diff --git a/test/tint/buffer/storage/types/runtime_array_f32.wgsl.expected.ir.msl b/test/tint/buffer/storage/types/runtime_array_f32.wgsl.expected.ir.msl
index 7ad242c..c5c7875 100644
--- a/test/tint/buffer/storage/types/runtime_array_f32.wgsl.expected.ir.msl
+++ b/test/tint/buffer/storage/types/runtime_array_f32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %in:ptr<storage, array<f32>, read> = var @binding_point(0, 0)
   %out:ptr<storage, array<f32>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:ptr<storage, f32, read_write> = access %out, 0i
     %5:ptr<storage, f32, read> = access %in, 0i
     %6:f32 = load %5
diff --git a/test/tint/buffer/storage/types/struct_f16.wgsl.expected.ir.msl b/test/tint/buffer/storage/types/struct_f16.wgsl.expected.ir.msl
index 39a82df..b43ae16 100644
--- a/test/tint/buffer/storage/types/struct_f16.wgsl.expected.ir.msl
+++ b/test/tint/buffer/storage/types/struct_f16.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Inner = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Inner = struct @align(8) {
   scalar_f16:f16 @offset(0)
   vec3_f16:vec3<f16> @offset(8)
   mat2x4_f16:mat2x4<f16> @offset(16)
@@ -10,15 +10,38 @@
   inner:Inner @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %in:ptr<storage, S, read> = var @binding_point(0, 0)
   %out:ptr<storage, S, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %t:S = load %in
-    store %out, %t
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %4:S = load %in
+    %t:S = let %4
+    %6:void = call %tint_store_and_preserve_padding, %out, %t
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, S, read_write>, %value_param:S):void {
+  $B3: {
+    %10:ptr<storage, Inner, read_write> = access %target, 0u
+    %11:Inner = access %value_param, 0u
+    %12:void = call %tint_store_and_preserve_padding_1, %10, %11
+    ret
+  }
+}
+%tint_store_and_preserve_padding_1 = func(%target_1:ptr<storage, Inner, read_write>, %value_param_1:Inner):void {  # %tint_store_and_preserve_padding_1: 'tint_store_and_preserve_padding', %target_1: 'target', %value_param_1: 'value_param'
+  $B4: {
+    %16:ptr<storage, f16, read_write> = access %target_1, 0u
+    %17:f16 = access %value_param_1, 0u
+    store %16, %17
+    %18:ptr<storage, vec3<f16>, read_write> = access %target_1, 1u
+    %19:vec3<f16> = access %value_param_1, 1u
+    store %18, %19
+    %20:ptr<storage, mat2x4<f16>, read_write> = access %target_1, 2u
+    %21:mat2x4<f16> = access %value_param_1, 2u
+    store %20, %21
     ret
   }
 }
diff --git a/test/tint/buffer/storage/types/struct_f32.wgsl.expected.ir.msl b/test/tint/buffer/storage/types/struct_f32.wgsl.expected.ir.msl
index 16968a5..d07af79 100644
--- a/test/tint/buffer/storage/types/struct_f32.wgsl.expected.ir.msl
+++ b/test/tint/buffer/storage/types/struct_f32.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Inner = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Inner = struct @align(16) {
   scalar_f32:f32 @offset(0)
   vec3_f32:vec3<f32> @offset(16)
   mat2x4_f32:mat2x4<f32> @offset(32)
@@ -10,15 +10,38 @@
   inner:Inner @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %in:ptr<storage, S, read> = var @binding_point(0, 0)
   %out:ptr<storage, S, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %t:S = load %in
-    store %out, %t
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %4:S = load %in
+    %t:S = let %4
+    %6:void = call %tint_store_and_preserve_padding, %out, %t
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, S, read_write>, %value_param:S):void {
+  $B3: {
+    %10:ptr<storage, Inner, read_write> = access %target, 0u
+    %11:Inner = access %value_param, 0u
+    %12:void = call %tint_store_and_preserve_padding_1, %10, %11
+    ret
+  }
+}
+%tint_store_and_preserve_padding_1 = func(%target_1:ptr<storage, Inner, read_write>, %value_param_1:Inner):void {  # %tint_store_and_preserve_padding_1: 'tint_store_and_preserve_padding', %target_1: 'target', %value_param_1: 'value_param'
+  $B4: {
+    %16:ptr<storage, f32, read_write> = access %target_1, 0u
+    %17:f32 = access %value_param_1, 0u
+    store %16, %17
+    %18:ptr<storage, vec3<f32>, read_write> = access %target_1, 1u
+    %19:vec3<f32> = access %value_param_1, 1u
+    store %18, %19
+    %20:ptr<storage, mat2x4<f32>, read_write> = access %target_1, 2u
+    %21:mat2x4<f32> = access %value_param_1, 2u
+    store %20, %21
     ret
   }
 }
diff --git a/test/tint/buffer/storage/types/u32.wgsl.expected.ir.msl b/test/tint/buffer/storage/types/u32.wgsl.expected.ir.msl
index 5ccb6cb..47e58b1 100644
--- a/test/tint/buffer/storage/types/u32.wgsl.expected.ir.msl
+++ b/test/tint/buffer/storage/types/u32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %in:ptr<storage, u32, read> = var @binding_point(0, 0)
   %out:ptr<storage, u32, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:u32 = load %in
     store %out, %4
     ret
diff --git a/test/tint/buffer/storage/types/vec2_f16.wgsl.expected.ir.msl b/test/tint/buffer/storage/types/vec2_f16.wgsl.expected.ir.msl
index 8b96037..7d1f789 100644
--- a/test/tint/buffer/storage/types/vec2_f16.wgsl.expected.ir.msl
+++ b/test/tint/buffer/storage/types/vec2_f16.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %in:ptr<storage, vec2<f16>, read> = var @binding_point(0, 0)
   %out:ptr<storage, vec2<f16>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:vec2<f16> = load %in
     store %out, %4
     ret
diff --git a/test/tint/buffer/storage/types/vec2_f32.wgsl.expected.ir.msl b/test/tint/buffer/storage/types/vec2_f32.wgsl.expected.ir.msl
index cb06734..07039b0 100644
--- a/test/tint/buffer/storage/types/vec2_f32.wgsl.expected.ir.msl
+++ b/test/tint/buffer/storage/types/vec2_f32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %in:ptr<storage, vec2<f32>, read> = var @binding_point(0, 0)
   %out:ptr<storage, vec2<f32>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:vec2<f32> = load %in
     store %out, %4
     ret
diff --git a/test/tint/buffer/storage/types/vec2_i32.wgsl.expected.ir.msl b/test/tint/buffer/storage/types/vec2_i32.wgsl.expected.ir.msl
index f82dca6..90f8a42 100644
--- a/test/tint/buffer/storage/types/vec2_i32.wgsl.expected.ir.msl
+++ b/test/tint/buffer/storage/types/vec2_i32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %in:ptr<storage, vec2<i32>, read> = var @binding_point(0, 0)
   %out:ptr<storage, vec2<i32>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:vec2<i32> = load %in
     store %out, %4
     ret
diff --git a/test/tint/buffer/storage/types/vec2_u32.wgsl.expected.ir.msl b/test/tint/buffer/storage/types/vec2_u32.wgsl.expected.ir.msl
index fdcd286..7f8436e 100644
--- a/test/tint/buffer/storage/types/vec2_u32.wgsl.expected.ir.msl
+++ b/test/tint/buffer/storage/types/vec2_u32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %in:ptr<storage, vec2<u32>, read> = var @binding_point(0, 0)
   %out:ptr<storage, vec2<u32>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:vec2<u32> = load %in
     store %out, %4
     ret
diff --git a/test/tint/buffer/storage/types/vec3_f16.wgsl.expected.ir.msl b/test/tint/buffer/storage/types/vec3_f16.wgsl.expected.ir.msl
index 9e1f62e..d886d54 100644
--- a/test/tint/buffer/storage/types/vec3_f16.wgsl.expected.ir.msl
+++ b/test/tint/buffer/storage/types/vec3_f16.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %in:ptr<storage, vec3<f16>, read> = var @binding_point(0, 0)
   %out:ptr<storage, vec3<f16>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:vec3<f16> = load %in
     store %out, %4
     ret
diff --git a/test/tint/buffer/storage/types/vec3_f32.wgsl.expected.ir.msl b/test/tint/buffer/storage/types/vec3_f32.wgsl.expected.ir.msl
index c8eb97f..6bf97d3 100644
--- a/test/tint/buffer/storage/types/vec3_f32.wgsl.expected.ir.msl
+++ b/test/tint/buffer/storage/types/vec3_f32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %in:ptr<storage, vec3<f32>, read> = var @binding_point(0, 0)
   %out:ptr<storage, vec3<f32>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:vec3<f32> = load %in
     store %out, %4
     ret
diff --git a/test/tint/buffer/storage/types/vec3_i32.wgsl.expected.ir.msl b/test/tint/buffer/storage/types/vec3_i32.wgsl.expected.ir.msl
index 08501f6..d6fdc96 100644
--- a/test/tint/buffer/storage/types/vec3_i32.wgsl.expected.ir.msl
+++ b/test/tint/buffer/storage/types/vec3_i32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %in:ptr<storage, vec3<i32>, read> = var @binding_point(0, 0)
   %out:ptr<storage, vec3<i32>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:vec3<i32> = load %in
     store %out, %4
     ret
diff --git a/test/tint/buffer/storage/types/vec3_u32.wgsl.expected.ir.msl b/test/tint/buffer/storage/types/vec3_u32.wgsl.expected.ir.msl
index d206212..3643214 100644
--- a/test/tint/buffer/storage/types/vec3_u32.wgsl.expected.ir.msl
+++ b/test/tint/buffer/storage/types/vec3_u32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %in:ptr<storage, vec3<u32>, read> = var @binding_point(0, 0)
   %out:ptr<storage, vec3<u32>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:vec3<u32> = load %in
     store %out, %4
     ret
diff --git a/test/tint/buffer/storage/types/vec4_f16.wgsl.expected.ir.msl b/test/tint/buffer/storage/types/vec4_f16.wgsl.expected.ir.msl
index fe820d4..0b4e74c 100644
--- a/test/tint/buffer/storage/types/vec4_f16.wgsl.expected.ir.msl
+++ b/test/tint/buffer/storage/types/vec4_f16.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %in:ptr<storage, vec4<f16>, read> = var @binding_point(0, 0)
   %out:ptr<storage, vec4<f16>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:vec4<f16> = load %in
     store %out, %4
     ret
diff --git a/test/tint/buffer/storage/types/vec4_f32.wgsl.expected.ir.msl b/test/tint/buffer/storage/types/vec4_f32.wgsl.expected.ir.msl
index 50164ab..74fc62e 100644
--- a/test/tint/buffer/storage/types/vec4_f32.wgsl.expected.ir.msl
+++ b/test/tint/buffer/storage/types/vec4_f32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %in:ptr<storage, vec4<f32>, read> = var @binding_point(0, 0)
   %out:ptr<storage, vec4<f32>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:vec4<f32> = load %in
     store %out, %4
     ret
diff --git a/test/tint/buffer/storage/types/vec4_i32.wgsl.expected.ir.msl b/test/tint/buffer/storage/types/vec4_i32.wgsl.expected.ir.msl
index 8f6aa16..ac7b0e2 100644
--- a/test/tint/buffer/storage/types/vec4_i32.wgsl.expected.ir.msl
+++ b/test/tint/buffer/storage/types/vec4_i32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %in:ptr<storage, vec4<i32>, read> = var @binding_point(0, 0)
   %out:ptr<storage, vec4<i32>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:vec4<i32> = load %in
     store %out, %4
     ret
diff --git a/test/tint/buffer/storage/types/vec4_u32.wgsl.expected.ir.msl b/test/tint/buffer/storage/types/vec4_u32.wgsl.expected.ir.msl
index aa7facd..52ee996 100644
--- a/test/tint/buffer/storage/types/vec4_u32.wgsl.expected.ir.msl
+++ b/test/tint/buffer/storage/types/vec4_u32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %in:ptr<storage, vec4<u32>, read> = var @binding_point(0, 0)
   %out:ptr<storage, vec4<u32>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:vec4<u32> = load %in
     store %out, %4
     ret
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 1b4401a..9c490ec 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,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Inner = struct @align(16) {
+../../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)
@@ -29,59 +29,168 @@
   arr:array<Inner, 8> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %ub:ptr<uniform, S, read> = var @binding_point(0, 0)
+  %s:ptr<storage, i32, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%idx:u32 [@local_invocation_index]):void -> %b2 {
-  %b2 = block {
-    %4:ptr<uniform, f32, read> = access %ub, 0u, %idx, 0u
-    %scalar_f32:f32 = load %4
-    %6:ptr<uniform, i32, read> = access %ub, 0u, %idx, 1u
-    %scalar_i32:i32 = load %6
-    %8:ptr<uniform, u32, read> = access %ub, 0u, %idx, 2u
-    %scalar_u32:u32 = load %8
-    %10:ptr<uniform, vec2<f32>, read> = access %ub, 0u, %idx, 3u
-    %vec2_f32:vec2<f32> = load %10
-    %12:ptr<uniform, vec2<i32>, read> = access %ub, 0u, %idx, 4u
-    %vec2_i32:vec2<i32> = load %12
-    %14:ptr<uniform, vec2<u32>, read> = access %ub, 0u, %idx, 5u
-    %vec2_u32:vec2<u32> = load %14
-    %16:ptr<uniform, vec3<f32>, read> = access %ub, 0u, %idx, 6u
-    %vec3_f32:vec3<f32> = load %16
-    %18:ptr<uniform, vec3<i32>, read> = access %ub, 0u, %idx, 7u
-    %vec3_i32:vec3<i32> = load %18
-    %20:ptr<uniform, vec3<u32>, read> = access %ub, 0u, %idx, 8u
-    %vec3_u32:vec3<u32> = load %20
-    %22:ptr<uniform, vec4<f32>, read> = access %ub, 0u, %idx, 9u
-    %vec4_f32:vec4<f32> = load %22
-    %24:ptr<uniform, vec4<i32>, read> = access %ub, 0u, %idx, 10u
-    %vec4_i32:vec4<i32> = load %24
-    %26:ptr<uniform, vec4<u32>, read> = access %ub, 0u, %idx, 11u
-    %vec4_u32:vec4<u32> = load %26
-    %28:ptr<uniform, mat2x2<f32>, read> = access %ub, 0u, %idx, 12u
-    %mat2x2_f32:mat2x2<f32> = load %28
-    %30:ptr<uniform, mat2x3<f32>, read> = access %ub, 0u, %idx, 13u
-    %mat2x3_f32:mat2x3<f32> = load %30
-    %32:ptr<uniform, mat2x4<f32>, read> = access %ub, 0u, %idx, 14u
-    %mat2x4_f32:mat2x4<f32> = load %32
-    %34:ptr<uniform, mat3x2<f32>, read> = access %ub, 0u, %idx, 15u
-    %mat3x2_f32:mat3x2<f32> = load %34
-    %36:ptr<uniform, mat3x3<f32>, read> = access %ub, 0u, %idx, 16u
-    %mat3x3_f32:mat3x3<f32> = load %36
-    %38:ptr<uniform, mat3x4<f32>, read> = access %ub, 0u, %idx, 17u
-    %mat3x4_f32:mat3x4<f32> = load %38
-    %40:ptr<uniform, mat4x2<f32>, read> = access %ub, 0u, %idx, 18u
-    %mat4x2_f32:mat4x2<f32> = load %40
-    %42:ptr<uniform, mat4x3<f32>, read> = access %ub, 0u, %idx, 19u
-    %mat4x3_f32:mat4x3<f32> = load %42
-    %44:ptr<uniform, mat4x4<f32>, read> = access %ub, 0u, %idx, 20u
-    %mat4x4_f32:mat4x4<f32> = load %44
-    %46:ptr<uniform, array<vec3<f32>, 2>, read> = access %ub, 0u, %idx, 21u
-    %arr2_vec3_f32:array<vec3<f32>, 2> = load %46
+%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
   }
 }
+%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
 ********************************************************************
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 0dac2fd..2d60972 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,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Inner = struct @align(16) {
+../../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)
@@ -43,87 +43,275 @@
   arr:array<Inner, 8> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %ub:ptr<uniform, S, read> = var @binding_point(0, 0)
+  %s:ptr<storage, i32, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%idx:u32 [@local_invocation_index]):void -> %b2 {
-  %b2 = block {
-    %4:ptr<uniform, f32, read> = access %ub, 0u, %idx, 0u
-    %scalar_f32:f32 = load %4
-    %6:ptr<uniform, i32, read> = access %ub, 0u, %idx, 1u
-    %scalar_i32:i32 = load %6
-    %8:ptr<uniform, u32, read> = access %ub, 0u, %idx, 2u
-    %scalar_u32:u32 = load %8
-    %10:ptr<uniform, f16, read> = access %ub, 0u, %idx, 3u
-    %scalar_f16:f16 = load %10
-    %12:ptr<uniform, vec2<f32>, read> = access %ub, 0u, %idx, 4u
-    %vec2_f32:vec2<f32> = load %12
-    %14:ptr<uniform, vec2<i32>, read> = access %ub, 0u, %idx, 5u
-    %vec2_i32:vec2<i32> = load %14
-    %16:ptr<uniform, vec2<u32>, read> = access %ub, 0u, %idx, 6u
-    %vec2_u32:vec2<u32> = load %16
-    %18:ptr<uniform, vec2<f16>, read> = access %ub, 0u, %idx, 7u
-    %vec2_f16:vec2<f16> = load %18
-    %20:ptr<uniform, vec3<f32>, read> = access %ub, 0u, %idx, 8u
-    %vec3_f32:vec3<f32> = load %20
-    %22:ptr<uniform, vec3<i32>, read> = access %ub, 0u, %idx, 9u
-    %vec3_i32:vec3<i32> = load %22
-    %24:ptr<uniform, vec3<u32>, read> = access %ub, 0u, %idx, 10u
-    %vec3_u32:vec3<u32> = load %24
-    %26:ptr<uniform, vec3<f16>, read> = access %ub, 0u, %idx, 11u
-    %vec3_f16:vec3<f16> = load %26
-    %28:ptr<uniform, vec4<f32>, read> = access %ub, 0u, %idx, 12u
-    %vec4_f32:vec4<f32> = load %28
-    %30:ptr<uniform, vec4<i32>, read> = access %ub, 0u, %idx, 13u
-    %vec4_i32:vec4<i32> = load %30
-    %32:ptr<uniform, vec4<u32>, read> = access %ub, 0u, %idx, 14u
-    %vec4_u32:vec4<u32> = load %32
-    %34:ptr<uniform, vec4<f16>, read> = access %ub, 0u, %idx, 15u
-    %vec4_f16:vec4<f16> = load %34
-    %36:ptr<uniform, mat2x2<f32>, read> = access %ub, 0u, %idx, 16u
-    %mat2x2_f32:mat2x2<f32> = load %36
-    %38:ptr<uniform, mat2x3<f32>, read> = access %ub, 0u, %idx, 17u
-    %mat2x3_f32:mat2x3<f32> = load %38
-    %40:ptr<uniform, mat2x4<f32>, read> = access %ub, 0u, %idx, 18u
-    %mat2x4_f32:mat2x4<f32> = load %40
-    %42:ptr<uniform, mat3x2<f32>, read> = access %ub, 0u, %idx, 19u
-    %mat3x2_f32:mat3x2<f32> = load %42
-    %44:ptr<uniform, mat3x3<f32>, read> = access %ub, 0u, %idx, 20u
-    %mat3x3_f32:mat3x3<f32> = load %44
-    %46:ptr<uniform, mat3x4<f32>, read> = access %ub, 0u, %idx, 21u
-    %mat3x4_f32:mat3x4<f32> = load %46
-    %48:ptr<uniform, mat4x2<f32>, read> = access %ub, 0u, %idx, 22u
-    %mat4x2_f32:mat4x2<f32> = load %48
-    %50:ptr<uniform, mat4x3<f32>, read> = access %ub, 0u, %idx, 23u
-    %mat4x3_f32:mat4x3<f32> = load %50
-    %52:ptr<uniform, mat4x4<f32>, read> = access %ub, 0u, %idx, 24u
-    %mat4x4_f32:mat4x4<f32> = load %52
-    %54:ptr<uniform, mat2x2<f16>, read> = access %ub, 0u, %idx, 25u
-    %mat2x2_f16:mat2x2<f16> = load %54
-    %56:ptr<uniform, mat2x3<f16>, read> = access %ub, 0u, %idx, 26u
-    %mat2x3_f16:mat2x3<f16> = load %56
-    %58:ptr<uniform, mat2x4<f16>, read> = access %ub, 0u, %idx, 27u
-    %mat2x4_f16:mat2x4<f16> = load %58
-    %60:ptr<uniform, mat3x2<f16>, read> = access %ub, 0u, %idx, 28u
-    %mat3x2_f16:mat3x2<f16> = load %60
-    %62:ptr<uniform, mat3x3<f16>, read> = access %ub, 0u, %idx, 29u
-    %mat3x3_f16:mat3x3<f16> = load %62
-    %64:ptr<uniform, mat3x4<f16>, read> = access %ub, 0u, %idx, 30u
-    %mat3x4_f16:mat3x4<f16> = load %64
-    %66:ptr<uniform, mat4x2<f16>, read> = access %ub, 0u, %idx, 31u
-    %mat4x2_f16:mat4x2<f16> = load %66
-    %68:ptr<uniform, mat4x3<f16>, read> = access %ub, 0u, %idx, 32u
-    %mat4x3_f16:mat4x3<f16> = load %68
-    %70:ptr<uniform, mat4x4<f16>, read> = access %ub, 0u, %idx, 33u
-    %mat4x4_f16:mat4x4<f16> = load %70
-    %72:ptr<uniform, array<vec3<f32>, 2>, read> = access %ub, 0u, %idx, 34u
-    %arr2_vec3_f32:array<vec3<f32>, 2> = load %72
-    %74:ptr<uniform, array<mat4x2<f16>, 2>, read> = access %ub, 0u, %idx, 35u
-    %arr2_mat4x2_f16:array<mat4x2<f16>, 2> = load %74
+%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
   }
 }
+%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
+  }
+}
+%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
 ********************************************************************
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 9bde499..2e14eb1 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,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Inner = struct @align(16) {
+../../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)
 }
@@ -32,63 +32,178 @@
   array_struct_inner:array<Inner, 4> @offset(576)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %ub:ptr<uniform, S, read> = var @binding_point(0, 0)
+  %s:ptr<storage, i32, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %3:ptr<uniform, f32, read> = access %ub, 0u
-    %scalar_f32:f32 = load %3
-    %5:ptr<uniform, i32, read> = access %ub, 1u
-    %scalar_i32:i32 = load %5
-    %7:ptr<uniform, u32, read> = access %ub, 2u
-    %scalar_u32:u32 = load %7
-    %9:ptr<uniform, vec2<f32>, read> = access %ub, 3u
-    %vec2_f32:vec2<f32> = load %9
-    %11:ptr<uniform, vec2<i32>, read> = access %ub, 4u
-    %vec2_i32:vec2<i32> = load %11
-    %13:ptr<uniform, vec2<u32>, read> = access %ub, 5u
-    %vec2_u32:vec2<u32> = load %13
-    %15:ptr<uniform, vec3<f32>, read> = access %ub, 6u
-    %vec3_f32:vec3<f32> = load %15
-    %17:ptr<uniform, vec3<i32>, read> = access %ub, 7u
-    %vec3_i32:vec3<i32> = load %17
-    %19:ptr<uniform, vec3<u32>, read> = access %ub, 8u
-    %vec3_u32:vec3<u32> = load %19
-    %21:ptr<uniform, vec4<f32>, read> = access %ub, 9u
-    %vec4_f32:vec4<f32> = load %21
-    %23:ptr<uniform, vec4<i32>, read> = access %ub, 10u
-    %vec4_i32:vec4<i32> = load %23
-    %25:ptr<uniform, vec4<u32>, read> = access %ub, 11u
-    %vec4_u32:vec4<u32> = load %25
-    %27:ptr<uniform, mat2x2<f32>, read> = access %ub, 12u
-    %mat2x2_f32:mat2x2<f32> = load %27
-    %29:ptr<uniform, mat2x3<f32>, read> = access %ub, 13u
-    %mat2x3_f32:mat2x3<f32> = load %29
-    %31:ptr<uniform, mat2x4<f32>, read> = access %ub, 14u
-    %mat2x4_f32:mat2x4<f32> = load %31
-    %33:ptr<uniform, mat3x2<f32>, read> = access %ub, 15u
-    %mat3x2_f32:mat3x2<f32> = load %33
-    %35:ptr<uniform, mat3x3<f32>, read> = access %ub, 16u
-    %mat3x3_f32:mat3x3<f32> = load %35
-    %37:ptr<uniform, mat3x4<f32>, read> = access %ub, 17u
-    %mat3x4_f32:mat3x4<f32> = load %37
-    %39:ptr<uniform, mat4x2<f32>, read> = access %ub, 18u
-    %mat4x2_f32:mat4x2<f32> = load %39
-    %41:ptr<uniform, mat4x3<f32>, read> = access %ub, 19u
-    %mat4x3_f32:mat4x3<f32> = load %41
-    %43:ptr<uniform, mat4x4<f32>, read> = access %ub, 20u
-    %mat4x4_f32:mat4x4<f32> = load %43
-    %45:ptr<uniform, array<vec3<f32>, 2>, read> = access %ub, 21u
-    %arr2_vec3_f32:array<vec3<f32>, 2> = load %45
-    %47:ptr<uniform, Inner, read> = access %ub, 22u
-    %struct_inner:Inner = load %47
-    %49:ptr<uniform, array<Inner, 4>, read> = access %ub, 23u
-    %array_struct_inner:array<Inner, 4> = load %49
+%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
 ********************************************************************
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 f04a3af..3f18691 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,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Inner = struct @align(4) {
+../../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)
@@ -47,91 +47,285 @@
   array_struct_inner:array<Inner, 4> @offset(816)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %ub:ptr<uniform, S, read> = var @binding_point(0, 0)
+  %s:ptr<storage, i32, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %3:ptr<uniform, f32, read> = access %ub, 0u
-    %scalar_f32:f32 = load %3
-    %5:ptr<uniform, i32, read> = access %ub, 1u
-    %scalar_i32:i32 = load %5
-    %7:ptr<uniform, u32, read> = access %ub, 2u
-    %scalar_u32:u32 = load %7
-    %9:ptr<uniform, f16, read> = access %ub, 3u
-    %scalar_f16:f16 = load %9
-    %11:ptr<uniform, vec2<f32>, read> = access %ub, 4u
-    %vec2_f32:vec2<f32> = load %11
-    %13:ptr<uniform, vec2<i32>, read> = access %ub, 5u
-    %vec2_i32:vec2<i32> = load %13
-    %15:ptr<uniform, vec2<u32>, read> = access %ub, 6u
-    %vec2_u32:vec2<u32> = load %15
-    %17:ptr<uniform, vec2<f16>, read> = access %ub, 7u
-    %vec2_f16:vec2<f16> = load %17
-    %19:ptr<uniform, vec3<f32>, read> = access %ub, 8u
-    %vec3_f32:vec3<f32> = load %19
-    %21:ptr<uniform, vec3<i32>, read> = access %ub, 9u
-    %vec3_i32:vec3<i32> = load %21
-    %23:ptr<uniform, vec3<u32>, read> = access %ub, 10u
-    %vec3_u32:vec3<u32> = load %23
-    %25:ptr<uniform, vec3<f16>, read> = access %ub, 11u
-    %vec3_f16:vec3<f16> = load %25
-    %27:ptr<uniform, vec4<f32>, read> = access %ub, 12u
-    %vec4_f32:vec4<f32> = load %27
-    %29:ptr<uniform, vec4<i32>, read> = access %ub, 13u
-    %vec4_i32:vec4<i32> = load %29
-    %31:ptr<uniform, vec4<u32>, read> = access %ub, 14u
-    %vec4_u32:vec4<u32> = load %31
-    %33:ptr<uniform, vec4<f16>, read> = access %ub, 15u
-    %vec4_f16:vec4<f16> = load %33
-    %35:ptr<uniform, mat2x2<f32>, read> = access %ub, 16u
-    %mat2x2_f32:mat2x2<f32> = load %35
-    %37:ptr<uniform, mat2x3<f32>, read> = access %ub, 17u
-    %mat2x3_f32:mat2x3<f32> = load %37
-    %39:ptr<uniform, mat2x4<f32>, read> = access %ub, 18u
-    %mat2x4_f32:mat2x4<f32> = load %39
-    %41:ptr<uniform, mat3x2<f32>, read> = access %ub, 19u
-    %mat3x2_f32:mat3x2<f32> = load %41
-    %43:ptr<uniform, mat3x3<f32>, read> = access %ub, 20u
-    %mat3x3_f32:mat3x3<f32> = load %43
-    %45:ptr<uniform, mat3x4<f32>, read> = access %ub, 21u
-    %mat3x4_f32:mat3x4<f32> = load %45
-    %47:ptr<uniform, mat4x2<f32>, read> = access %ub, 22u
-    %mat4x2_f32:mat4x2<f32> = load %47
-    %49:ptr<uniform, mat4x3<f32>, read> = access %ub, 23u
-    %mat4x3_f32:mat4x3<f32> = load %49
-    %51:ptr<uniform, mat4x4<f32>, read> = access %ub, 24u
-    %mat4x4_f32:mat4x4<f32> = load %51
-    %53:ptr<uniform, mat2x2<f16>, read> = access %ub, 25u
-    %mat2x2_f16:mat2x2<f16> = load %53
-    %55:ptr<uniform, mat2x3<f16>, read> = access %ub, 26u
-    %mat2x3_f16:mat2x3<f16> = load %55
-    %57:ptr<uniform, mat2x4<f16>, read> = access %ub, 27u
-    %mat2x4_f16:mat2x4<f16> = load %57
-    %59:ptr<uniform, mat3x2<f16>, read> = access %ub, 28u
-    %mat3x2_f16:mat3x2<f16> = load %59
-    %61:ptr<uniform, mat3x3<f16>, read> = access %ub, 29u
-    %mat3x3_f16:mat3x3<f16> = load %61
-    %63:ptr<uniform, mat3x4<f16>, read> = access %ub, 30u
-    %mat3x4_f16:mat3x4<f16> = load %63
-    %65:ptr<uniform, mat4x2<f16>, read> = access %ub, 31u
-    %mat4x2_f16:mat4x2<f16> = load %65
-    %67:ptr<uniform, mat4x3<f16>, read> = access %ub, 32u
-    %mat4x3_f16:mat4x3<f16> = load %67
-    %69:ptr<uniform, mat4x4<f16>, read> = access %ub, 33u
-    %mat4x4_f16:mat4x4<f16> = load %69
-    %71:ptr<uniform, array<vec3<f32>, 2>, read> = access %ub, 34u
-    %arr2_vec3_f32:array<vec3<f32>, 2> = load %71
-    %73:ptr<uniform, array<mat4x2<f16>, 2>, read> = access %ub, 35u
-    %arr2_mat4x2_f16:array<mat4x2<f16>, 2> = load %73
-    %75:ptr<uniform, Inner, read> = access %ub, 36u
-    %struct_inner:Inner = load %75
-    %77:ptr<uniform, array<Inner, 4>, read> = access %ub, 37u
-    %array_struct_inner:array<Inner, 4> = load %77
+%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
   }
 }
+%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
 ********************************************************************
diff --git a/test/tint/buffer/uniform/std140/array/mat2x2_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat2x2_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
index 5ac9fe2..5c5e7bf 100644
--- a/test/tint/buffer/uniform/std140/array/mat2x2_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat2x2_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
@@ -1,29 +1,43 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %a:ptr<uniform, array<mat2x2<f32>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f32, read_write> = var @binding_point(0, 1)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
-    %4:i32 = load %counter
-    %5:i32 = add %4, 1i
-    store %counter, %5
-    %6:i32 = load %counter
-    ret %6
+%i = func():i32 {
+  $B2: {
+    %5:i32 = load %counter
+    %6:i32 = add %5, 1i
+    store %counter, %6
+    %7:i32 = load %counter
+    ret %7
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_a:ptr<uniform, array<mat2x2<f32>, 4>, read> = let %a
-    %9:i32 = call %i
-    %p_a_i:ptr<uniform, mat2x2<f32>, read> = access %p_a, %9
-    %11:i32 = call %i
-    %p_a_i_i:ptr<uniform, vec2<f32>, read> = access %p_a_i, %11
-    %l_a:array<mat2x2<f32>, 4> = load %p_a
-    %l_a_i:mat2x2<f32> = load %p_a_i
-    %l_a_i_i:vec2<f32> = load %p_a_i_i
+    %10:i32 = call %i
+    %11:ptr<uniform, mat2x2<f32>, read> = access %p_a, %10
+    %p_a_i:ptr<uniform, mat2x2<f32>, read> = let %11
+    %13:i32 = call %i
+    %14:ptr<uniform, vec2<f32>, read> = access %p_a_i, %13
+    %p_a_i_i:ptr<uniform, vec2<f32>, read> = let %14
+    %16:array<mat2x2<f32>, 4> = load %p_a
+    %l_a:array<mat2x2<f32>, 4> = let %16
+    %18:mat2x2<f32> = load %p_a_i
+    %l_a_i:mat2x2<f32> = let %18
+    %20:vec2<f32> = load %p_a_i_i
+    %l_a_i_i:vec2<f32> = let %20
+    %22:f32 = load_vector_element %p_a_i_i, 0u
+    %23:f32 = access %l_a, 0i, 0i, 0u
+    %24:f32 = add %22, %23
+    %25:f32 = access %l_a_i, 0i, 0u
+    %26:f32 = add %24, %25
+    %27:f32 = access %l_a_i_i, 0u
+    %28:f32 = add %26, %27
+    store %s, %28
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat2x2_f32/static_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat2x2_f32/static_index_via_ptr.wgsl.expected.ir.msl
index 21dd5d7..64ecc68 100644
--- a/test/tint/buffer/uniform/std140/array/mat2x2_f32/static_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat2x2_f32/static_index_via_ptr.wgsl.expected.ir.msl
@@ -1,17 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %a:ptr<uniform, array<mat2x2<f32>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f32, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %p_a:ptr<uniform, array<mat2x2<f32>, 4>, read> = let %a
-    %p_a_2:ptr<uniform, mat2x2<f32>, read> = access %p_a, 2i
-    %p_a_2_1:ptr<uniform, vec2<f32>, read> = access %p_a_2, 1i
-    %l_a:array<mat2x2<f32>, 4> = load %p_a
-    %l_a_i:mat2x2<f32> = load %p_a_2
-    %l_a_i_i:vec2<f32> = load %p_a_2_1
+    %5:ptr<uniform, mat2x2<f32>, read> = access %p_a, 2i
+    %p_a_2:ptr<uniform, mat2x2<f32>, read> = let %5
+    %7:ptr<uniform, vec2<f32>, read> = access %p_a_2, 1i
+    %p_a_2_1:ptr<uniform, vec2<f32>, read> = let %7
+    %9:array<mat2x2<f32>, 4> = load %p_a
+    %l_a:array<mat2x2<f32>, 4> = let %9
+    %11:mat2x2<f32> = load %p_a_2
+    %l_a_i:mat2x2<f32> = let %11
+    %13:vec2<f32> = load %p_a_2_1
+    %l_a_i_i:vec2<f32> = let %13
+    %15:f32 = load_vector_element %p_a_2_1, 0u
+    %16:f32 = access %l_a, 0i, 0i, 0u
+    %17:f32 = add %15, %16
+    %18:f32 = access %l_a_i, 0i, 0u
+    %19:f32 = add %17, %18
+    %20:f32 = access %l_a_i_i, 0u
+    %21:f32 = add %19, %20
+    store %s, %21
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat2x2_f32/to_builtin.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat2x2_f32/to_builtin.wgsl.expected.ir.msl
index 2414505..ce68c7d 100644
--- a/test/tint/buffer/uniform/std140/array/mat2x2_f32/to_builtin.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat2x2_f32/to_builtin.wgsl.expected.ir.msl
@@ -1,23 +1,34 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat2x2<f32>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f32, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %3:ptr<uniform, mat2x2<f32>, read> = access %u, 2i
-    %4:mat2x2<f32> = load %3
-    %t:mat2x2<f32> = transpose %4
-    %6:ptr<uniform, vec2<f32>, read> = access %u, 0i, 1i
-    %7:vec2<f32> = load %6
-    %8:vec2<f32> = swizzle %7, yx
-    %l:f32 = length %8
-    %10:ptr<uniform, vec2<f32>, read> = access %u, 0i, 1i
-    %11:vec2<f32> = load %10
-    %12:vec2<f32> = swizzle %11, yx
-    %13:f32 = access %12, 0u
-    %a:f32 = abs %13
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %4:ptr<uniform, mat2x2<f32>, read> = access %u, 2i
+    %5:mat2x2<f32> = load %4
+    %6:mat2x2<f32> = transpose %5
+    %t:mat2x2<f32> = let %6
+    %8:ptr<uniform, vec2<f32>, read> = access %u, 0i, 1i
+    %9:vec2<f32> = load %8
+    %10:vec2<f32> = swizzle %9, yx
+    %11:f32 = length %10
+    %l:f32 = let %11
+    %13:ptr<uniform, vec2<f32>, read> = access %u, 0i, 1i
+    %14:vec2<f32> = load %13
+    %15:vec2<f32> = swizzle %14, yx
+    %16:f32 = access %15, 0u
+    %17:f32 = abs %16
+    %a:f32 = let %17
+    %19:f32 = access %t, 0i, 0u
+    %20:f32 = construct %l
+    %21:f32 = add %19, %20
+    %22:f32 = let %21
+    %23:f32 = construct %a
+    %24:f32 = add %22, %23
+    store %s, %24
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat2x2_f32/to_fn.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat2x2_f32/to_fn.wgsl.expected.ir.msl
index cc22e5b..6d05dd4 100644
--- a/test/tint/buffer/uniform/std140/array/mat2x2_f32/to_fn.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat2x2_f32/to_fn.wgsl.expected.ir.msl
@@ -1,45 +1,56 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat2x2<f32>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f32, read_write> = var @binding_point(0, 1)
 }
 
-%a = func(%a_1:array<mat2x2<f32>, 4>):void -> %b2 {  # %a_1: 'a'
-  %b2 = block {
-    ret
+%a = func(%a_1:array<mat2x2<f32>, 4>):f32 {  # %a_1: 'a'
+  $B2: {
+    %5:f32 = access %a_1, 0i, 0i, 0u
+    ret %5
   }
 }
-%b = func(%m:mat2x2<f32>):void -> %b3 {
-  %b3 = block {
-    ret
+%b = func(%m:mat2x2<f32>):f32 {
+  $B3: {
+    %8:f32 = access %m, 0i, 0u
+    ret %8
   }
 }
-%c = func(%v:vec2<f32>):void -> %b4 {
-  %b4 = block {
-    ret
+%c = func(%v:vec2<f32>):f32 {
+  $B4: {
+    %11:f32 = access %v, 0u
+    ret %11
   }
 }
-%d = func(%f:f32):void -> %b5 {
-  %b5 = block {
-    ret
+%d = func(%f:f32):f32 {
+  $B5: {
+    ret %f
   }
 }
-%f_1 = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {  # %f_1: 'f'
-  %b6 = block {
-    %11:array<mat2x2<f32>, 4> = load %u
-    %12:void = call %a, %11
-    %13:ptr<uniform, mat2x2<f32>, read> = access %u, 1i
-    %14:mat2x2<f32> = load %13
-    %15:void = call %b, %14
-    %16:ptr<uniform, vec2<f32>, read> = access %u, 1i, 0i
-    %17:vec2<f32> = load %16
-    %18:vec2<f32> = swizzle %17, yx
-    %19:void = call %c, %18
-    %20:ptr<uniform, vec2<f32>, read> = access %u, 1i, 0i
-    %21:vec2<f32> = load %20
-    %22:vec2<f32> = swizzle %21, yx
-    %23:f32 = access %22, 0u
-    %24:void = call %d, %23
+%f_1 = @compute @workgroup_size(1, 1, 1) func():void {  # %f_1: 'f'
+  $B6: {
+    %15:array<mat2x2<f32>, 4> = load %u
+    %16:f32 = call %a, %15
+    %17:f32 = let %16
+    %18:ptr<uniform, mat2x2<f32>, read> = access %u, 1i
+    %19:mat2x2<f32> = load %18
+    %20:f32 = call %b, %19
+    %21:f32 = add %17, %20
+    %22:f32 = let %21
+    %23:ptr<uniform, vec2<f32>, read> = access %u, 1i, 0i
+    %24:vec2<f32> = load %23
+    %25:vec2<f32> = swizzle %24, yx
+    %26:f32 = call %c, %25
+    %27:f32 = add %22, %26
+    %28:f32 = let %27
+    %29:ptr<uniform, vec2<f32>, read> = access %u, 1i, 0i
+    %30:vec2<f32> = load %29
+    %31:vec2<f32> = swizzle %30, yx
+    %32:f32 = access %31, 0u
+    %33:f32 = call %d, %32
+    %34:f32 = add %28, %33
+    store %s, %34
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat2x2_f32/to_private.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat2x2_f32/to_private.wgsl.expected.ir.msl
index d93db77..abfedb8 100644
--- a/test/tint/buffer/uniform/std140/array/mat2x2_f32/to_private.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat2x2_f32/to_private.wgsl.expected.ir.msl
@@ -1,27 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat2x2<f32>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f32, read_write> = var @binding_point(0, 1)
   %p:ptr<private, array<mat2x2<f32>, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:array<mat2x2<f32>, 4> = load %u
-    store %p, %4
-    %5:ptr<private, mat2x2<f32>, read_write> = access %p, 1i
-    %6:ptr<uniform, mat2x2<f32>, read> = access %u, 2i
-    %7:mat2x2<f32> = load %6
-    store %5, %7
-    %8:ptr<private, vec2<f32>, read_write> = access %p, 1i, 0i
-    %9:ptr<uniform, vec2<f32>, read> = access %u, 0i, 1i
-    %10:vec2<f32> = load %9
-    %11:vec2<f32> = swizzle %10, yx
-    store %8, %11
-    %12:ptr<private, vec2<f32>, read_write> = access %p, 1i, 0i
-    %13:ptr<uniform, vec2<f32>, read> = access %u, 0i, 1i
-    %14:f32 = load_vector_element %13, 0u
-    store_vector_element %12, 0u, %14
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %5:array<mat2x2<f32>, 4> = load %u
+    store %p, %5
+    %6:ptr<private, mat2x2<f32>, read_write> = access %p, 1i
+    %7:ptr<uniform, mat2x2<f32>, read> = access %u, 2i
+    %8:mat2x2<f32> = load %7
+    store %6, %8
+    %9:ptr<private, vec2<f32>, read_write> = access %p, 1i, 0i
+    %10:ptr<uniform, vec2<f32>, read> = access %u, 0i, 1i
+    %11:vec2<f32> = load %10
+    %12:vec2<f32> = swizzle %11, yx
+    store %9, %12
+    %13:ptr<private, vec2<f32>, read_write> = access %p, 1i, 0i
+    %14:ptr<uniform, vec2<f32>, read> = access %u, 0i, 1i
+    %15:f32 = load_vector_element %14, 0u
+    store_vector_element %13, 0u, %15
+    %16:ptr<private, vec2<f32>, read_write> = access %p, 1i, 0i
+    %17:f32 = load_vector_element %16, 0u
+    store %s, %17
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat2x2_f32/to_storage.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat2x2_f32/to_storage.wgsl.expected.ir.msl
index 0bf64aa..2d3c36d 100644
--- a/test/tint/buffer/uniform/std140/array/mat2x2_f32/to_storage.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat2x2_f32/to_storage.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat2x2<f32>, 4>, read> = var @binding_point(0, 0)
   %s:ptr<storage, array<mat2x2<f32>, 4>, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:array<mat2x2<f32>, 4> = load %u
     store %s, %4
     %5:ptr<storage, mat2x2<f32>, read_write> = access %s, 1i
diff --git a/test/tint/buffer/uniform/std140/array/mat2x2_f32/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat2x2_f32/to_workgroup.wgsl.expected.ir.msl
index 6e1e695..d2d4762 100644
--- a/test/tint/buffer/uniform/std140/array/mat2x2_f32/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat2x2_f32/to_workgroup.wgsl.expected.ir.msl
@@ -1,27 +1,48 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat2x2<f32>, 4>, read> = var @binding_point(0, 0)
   %w:ptr<workgroup, array<mat2x2<f32>, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:array<mat2x2<f32>, 4> = load %u
-    store %w, %4
-    %5:ptr<workgroup, mat2x2<f32>, read_write> = access %w, 1i
-    %6:ptr<uniform, mat2x2<f32>, read> = access %u, 2i
-    %7:mat2x2<f32> = load %6
-    store %5, %7
-    %8:ptr<workgroup, vec2<f32>, read_write> = access %w, 1i, 0i
-    %9:ptr<uniform, vec2<f32>, read> = access %u, 0i, 1i
-    %10:vec2<f32> = load %9
-    %11:vec2<f32> = swizzle %10, yx
-    store %8, %11
-    %12:ptr<workgroup, vec2<f32>, read_write> = access %w, 1i, 0i
-    %13:ptr<uniform, vec2<f32>, read> = access %u, 0i, 1i
-    %14:f32 = load_vector_element %13, 0u
-    store_vector_element %12, 0u, %14
+%f = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B2: {
+    loop [i: $B3, b: $B4, c: $B5] {  # loop_1
+      $B3: {  # initializer
+        next_iteration %tint_local_index  # -> $B4
+      }
+      $B4 (%idx:u32): {  # body
+        %6:bool = gte %idx, 4u
+        if %6 [t: $B6] {  # if_1
+          $B6: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %7:ptr<workgroup, mat2x2<f32>, read_write> = access %w, %idx
+        store %7, mat2x2<f32>(vec2<f32>(0.0f))
+        continue  # -> $B5
+      }
+      $B5: {  # continuing
+        %8:u32 = add %idx, 1u
+        next_iteration %8  # -> $B4
+      }
+    }
+    %9:void = msl.threadgroup_barrier 4u
+    %10:array<mat2x2<f32>, 4> = load %u
+    store %w, %10
+    %11:ptr<workgroup, mat2x2<f32>, read_write> = access %w, 1i
+    %12:ptr<uniform, mat2x2<f32>, read> = access %u, 2i
+    %13:mat2x2<f32> = load %12
+    store %11, %13
+    %14:ptr<workgroup, vec2<f32>, read_write> = access %w, 1i, 0i
+    %15:ptr<uniform, vec2<f32>, read> = access %u, 0i, 1i
+    %16:vec2<f32> = load %15
+    %17:vec2<f32> = swizzle %16, yx
+    store %14, %17
+    %18:ptr<workgroup, vec2<f32>, read_write> = access %w, 1i, 0i
+    %19:ptr<uniform, vec2<f32>, read> = access %u, 0i, 1i
+    %20:f32 = load_vector_element %19, 0u
+    store_vector_element %18, 0u, %20
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat2x3_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat2x3_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
index f954066..b28cff4 100644
--- a/test/tint/buffer/uniform/std140/array/mat2x3_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat2x3_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
@@ -1,29 +1,43 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %a:ptr<uniform, array<mat2x3<f16>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f16, read_write> = var @binding_point(0, 1)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
-    %4:i32 = load %counter
-    %5:i32 = add %4, 1i
-    store %counter, %5
-    %6:i32 = load %counter
-    ret %6
+%i = func():i32 {
+  $B2: {
+    %5:i32 = load %counter
+    %6:i32 = add %5, 1i
+    store %counter, %6
+    %7:i32 = load %counter
+    ret %7
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_a:ptr<uniform, array<mat2x3<f16>, 4>, read> = let %a
-    %9:i32 = call %i
-    %p_a_i:ptr<uniform, mat2x3<f16>, read> = access %p_a, %9
-    %11:i32 = call %i
-    %p_a_i_i:ptr<uniform, vec3<f16>, read> = access %p_a_i, %11
-    %l_a:array<mat2x3<f16>, 4> = load %p_a
-    %l_a_i:mat2x3<f16> = load %p_a_i
-    %l_a_i_i:vec3<f16> = load %p_a_i_i
+    %10:i32 = call %i
+    %11:ptr<uniform, mat2x3<f16>, read> = access %p_a, %10
+    %p_a_i:ptr<uniform, mat2x3<f16>, read> = let %11
+    %13:i32 = call %i
+    %14:ptr<uniform, vec3<f16>, read> = access %p_a_i, %13
+    %p_a_i_i:ptr<uniform, vec3<f16>, read> = let %14
+    %16:array<mat2x3<f16>, 4> = load %p_a
+    %l_a:array<mat2x3<f16>, 4> = let %16
+    %18:mat2x3<f16> = load %p_a_i
+    %l_a_i:mat2x3<f16> = let %18
+    %20:vec3<f16> = load %p_a_i_i
+    %l_a_i_i:vec3<f16> = let %20
+    %22:f16 = load_vector_element %p_a_i_i, 0u
+    %23:f16 = access %l_a, 0i, 0i, 0u
+    %24:f16 = add %22, %23
+    %25:f16 = access %l_a_i, 0i, 0u
+    %26:f16 = add %24, %25
+    %27:f16 = access %l_a_i_i, 0u
+    %28:f16 = add %26, %27
+    store %s, %28
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat2x3_f16/static_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat2x3_f16/static_index_via_ptr.wgsl.expected.ir.msl
index a3deefa..dee7935 100644
--- a/test/tint/buffer/uniform/std140/array/mat2x3_f16/static_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat2x3_f16/static_index_via_ptr.wgsl.expected.ir.msl
@@ -1,17 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %a:ptr<uniform, array<mat2x3<f16>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f16, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %p_a:ptr<uniform, array<mat2x3<f16>, 4>, read> = let %a
-    %p_a_2:ptr<uniform, mat2x3<f16>, read> = access %p_a, 2i
-    %p_a_2_1:ptr<uniform, vec3<f16>, read> = access %p_a_2, 1i
-    %l_a:array<mat2x3<f16>, 4> = load %p_a
-    %l_a_i:mat2x3<f16> = load %p_a_2
-    %l_a_i_i:vec3<f16> = load %p_a_2_1
+    %5:ptr<uniform, mat2x3<f16>, read> = access %p_a, 2i
+    %p_a_2:ptr<uniform, mat2x3<f16>, read> = let %5
+    %7:ptr<uniform, vec3<f16>, read> = access %p_a_2, 1i
+    %p_a_2_1:ptr<uniform, vec3<f16>, read> = let %7
+    %9:array<mat2x3<f16>, 4> = load %p_a
+    %l_a:array<mat2x3<f16>, 4> = let %9
+    %11:mat2x3<f16> = load %p_a_2
+    %l_a_i:mat2x3<f16> = let %11
+    %13:vec3<f16> = load %p_a_2_1
+    %l_a_i_i:vec3<f16> = let %13
+    %15:f16 = load_vector_element %p_a_2_1, 0u
+    %16:f16 = access %l_a, 0i, 0i, 0u
+    %17:f16 = add %15, %16
+    %18:f16 = access %l_a_i, 0i, 0u
+    %19:f16 = add %17, %18
+    %20:f16 = access %l_a_i_i, 0u
+    %21:f16 = add %19, %20
+    store %s, %21
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat2x3_f16/to_builtin.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat2x3_f16/to_builtin.wgsl.expected.ir.msl
index 4360569..ced5761 100644
--- a/test/tint/buffer/uniform/std140/array/mat2x3_f16/to_builtin.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat2x3_f16/to_builtin.wgsl.expected.ir.msl
@@ -1,23 +1,34 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat2x3<f16>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f16, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %3:ptr<uniform, mat2x3<f16>, read> = access %u, 2i
-    %4:mat2x3<f16> = load %3
-    %t:mat3x2<f16> = transpose %4
-    %6:ptr<uniform, vec3<f16>, read> = access %u, 0i, 1i
-    %7:vec3<f16> = load %6
-    %8:vec3<f16> = swizzle %7, zxy
-    %l:f16 = length %8
-    %10:ptr<uniform, vec3<f16>, read> = access %u, 0i, 1i
-    %11:vec3<f16> = load %10
-    %12:vec3<f16> = swizzle %11, zxy
-    %13:f16 = access %12, 0u
-    %a:f16 = abs %13
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %4:ptr<uniform, mat2x3<f16>, read> = access %u, 2i
+    %5:mat2x3<f16> = load %4
+    %6:mat3x2<f16> = transpose %5
+    %t:mat3x2<f16> = let %6
+    %8:ptr<uniform, vec3<f16>, read> = access %u, 0i, 1i
+    %9:vec3<f16> = load %8
+    %10:vec3<f16> = swizzle %9, zxy
+    %11:f16 = length %10
+    %l:f16 = let %11
+    %13:ptr<uniform, vec3<f16>, read> = access %u, 0i, 1i
+    %14:vec3<f16> = load %13
+    %15:vec3<f16> = swizzle %14, zxy
+    %16:f16 = access %15, 0u
+    %17:f16 = abs %16
+    %a:f16 = let %17
+    %19:f16 = construct %a
+    %20:f16 = let %19
+    %21:f16 = construct %l
+    %22:f16 = add %20, %21
+    %23:f16 = access %t, 0i, 0u
+    %24:f16 = add %22, %23
+    store %s, %24
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat2x3_f16/to_fn.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat2x3_f16/to_fn.wgsl.expected.ir.msl
index 73777fa..2df98cd 100644
--- a/test/tint/buffer/uniform/std140/array/mat2x3_f16/to_fn.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat2x3_f16/to_fn.wgsl.expected.ir.msl
@@ -1,45 +1,56 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat2x3<f16>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f16, read_write> = var @binding_point(0, 1)
 }
 
-%a = func(%a_1:array<mat2x3<f16>, 4>):void -> %b2 {  # %a_1: 'a'
-  %b2 = block {
-    ret
+%a = func(%a_1:array<mat2x3<f16>, 4>):f16 {  # %a_1: 'a'
+  $B2: {
+    %5:f16 = access %a_1, 0i, 0i, 0u
+    ret %5
   }
 }
-%b = func(%m:mat2x3<f16>):void -> %b3 {
-  %b3 = block {
-    ret
+%b = func(%m:mat2x3<f16>):f16 {
+  $B3: {
+    %8:f16 = access %m, 0i, 0u
+    ret %8
   }
 }
-%c = func(%v:vec3<f16>):void -> %b4 {
-  %b4 = block {
-    ret
+%c = func(%v:vec3<f16>):f16 {
+  $B4: {
+    %11:f16 = access %v, 0u
+    ret %11
   }
 }
-%d = func(%f:f16):void -> %b5 {
-  %b5 = block {
-    ret
+%d = func(%f:f16):f16 {
+  $B5: {
+    ret %f
   }
 }
-%f_1 = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {  # %f_1: 'f'
-  %b6 = block {
-    %11:array<mat2x3<f16>, 4> = load %u
-    %12:void = call %a, %11
-    %13:ptr<uniform, mat2x3<f16>, read> = access %u, 1i
-    %14:mat2x3<f16> = load %13
-    %15:void = call %b, %14
-    %16:ptr<uniform, vec3<f16>, read> = access %u, 1i, 0i
-    %17:vec3<f16> = load %16
-    %18:vec3<f16> = swizzle %17, zxy
-    %19:void = call %c, %18
-    %20:ptr<uniform, vec3<f16>, read> = access %u, 1i, 0i
-    %21:vec3<f16> = load %20
-    %22:vec3<f16> = swizzle %21, zxy
-    %23:f16 = access %22, 0u
-    %24:void = call %d, %23
+%f_1 = @compute @workgroup_size(1, 1, 1) func():void {  # %f_1: 'f'
+  $B6: {
+    %15:array<mat2x3<f16>, 4> = load %u
+    %16:f16 = call %a, %15
+    %17:f16 = let %16
+    %18:ptr<uniform, mat2x3<f16>, read> = access %u, 1i
+    %19:mat2x3<f16> = load %18
+    %20:f16 = call %b, %19
+    %21:f16 = add %17, %20
+    %22:f16 = let %21
+    %23:ptr<uniform, vec3<f16>, read> = access %u, 1i, 0i
+    %24:vec3<f16> = load %23
+    %25:vec3<f16> = swizzle %24, zxy
+    %26:f16 = call %c, %25
+    %27:f16 = add %22, %26
+    %28:f16 = let %27
+    %29:ptr<uniform, vec3<f16>, read> = access %u, 1i, 0i
+    %30:vec3<f16> = load %29
+    %31:vec3<f16> = swizzle %30, zxy
+    %32:f16 = access %31, 0u
+    %33:f16 = call %d, %32
+    %34:f16 = add %28, %33
+    store %s, %34
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat2x3_f16/to_private.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat2x3_f16/to_private.wgsl.expected.ir.msl
index 28cef5d..e840869 100644
--- a/test/tint/buffer/uniform/std140/array/mat2x3_f16/to_private.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat2x3_f16/to_private.wgsl.expected.ir.msl
@@ -1,27 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat2x3<f16>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f16, read_write> = var @binding_point(0, 1)
   %p:ptr<private, array<mat2x3<f16>, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:array<mat2x3<f16>, 4> = load %u
-    store %p, %4
-    %5:ptr<private, mat2x3<f16>, read_write> = access %p, 1i
-    %6:ptr<uniform, mat2x3<f16>, read> = access %u, 2i
-    %7:mat2x3<f16> = load %6
-    store %5, %7
-    %8:ptr<private, vec3<f16>, read_write> = access %p, 1i, 0i
-    %9:ptr<uniform, vec3<f16>, read> = access %u, 0i, 1i
-    %10:vec3<f16> = load %9
-    %11:vec3<f16> = swizzle %10, zxy
-    store %8, %11
-    %12:ptr<private, vec3<f16>, read_write> = access %p, 1i, 0i
-    %13:ptr<uniform, vec3<f16>, read> = access %u, 0i, 1i
-    %14:f16 = load_vector_element %13, 0u
-    store_vector_element %12, 0u, %14
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %5:array<mat2x3<f16>, 4> = load %u
+    store %p, %5
+    %6:ptr<private, mat2x3<f16>, read_write> = access %p, 1i
+    %7:ptr<uniform, mat2x3<f16>, read> = access %u, 2i
+    %8:mat2x3<f16> = load %7
+    store %6, %8
+    %9:ptr<private, vec3<f16>, read_write> = access %p, 1i, 0i
+    %10:ptr<uniform, vec3<f16>, read> = access %u, 0i, 1i
+    %11:vec3<f16> = load %10
+    %12:vec3<f16> = swizzle %11, zxy
+    store %9, %12
+    %13:ptr<private, vec3<f16>, read_write> = access %p, 1i, 0i
+    %14:ptr<uniform, vec3<f16>, read> = access %u, 0i, 1i
+    %15:f16 = load_vector_element %14, 0u
+    store_vector_element %13, 0u, %15
+    %16:ptr<private, vec3<f16>, read_write> = access %p, 1i, 0i
+    %17:f16 = load_vector_element %16, 0u
+    store %s, %17
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat2x3_f16/to_storage.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat2x3_f16/to_storage.wgsl.expected.ir.msl
index fd65746..aa2e73f 100644
--- a/test/tint/buffer/uniform/std140/array/mat2x3_f16/to_storage.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat2x3_f16/to_storage.wgsl.expected.ir.msl
@@ -1,27 +1,64 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat2x3<f16>, 4>, read> = var @binding_point(0, 0)
   %s:ptr<storage, array<mat2x3<f16>, 4>, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:array<mat2x3<f16>, 4> = load %u
-    store %s, %4
-    %5:ptr<storage, mat2x3<f16>, read_write> = access %s, 1i
-    %6:ptr<uniform, mat2x3<f16>, read> = access %u, 2i
-    %7:mat2x3<f16> = load %6
-    store %5, %7
-    %8:ptr<storage, vec3<f16>, read_write> = access %s, 1i, 0i
-    %9:ptr<uniform, vec3<f16>, read> = access %u, 0i, 1i
-    %10:vec3<f16> = load %9
-    %11:vec3<f16> = swizzle %10, zxy
-    store %8, %11
+    %5:void = call %tint_store_and_preserve_padding, %s, %4
+    %7:ptr<storage, mat2x3<f16>, read_write> = access %s, 1i
+    %8:ptr<uniform, mat2x3<f16>, read> = access %u, 2i
+    %9:mat2x3<f16> = load %8
+    %10:void = call %tint_store_and_preserve_padding_1, %7, %9
     %12:ptr<storage, vec3<f16>, read_write> = access %s, 1i, 0i
     %13:ptr<uniform, vec3<f16>, read> = access %u, 0i, 1i
-    %14:f16 = load_vector_element %13, 0u
-    store_vector_element %12, 0u, %14
+    %14:vec3<f16> = load %13
+    %15:vec3<f16> = swizzle %14, zxy
+    store %12, %15
+    %16:ptr<storage, vec3<f16>, read_write> = access %s, 1i, 0i
+    %17:ptr<uniform, vec3<f16>, read> = access %u, 0i, 1i
+    %18:f16 = load_vector_element %17, 0u
+    store_vector_element %16, 0u, %18
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, array<mat2x3<f16>, 4>, read_write>, %value_param:array<mat2x3<f16>, 4>):void {
+  $B3: {
+    loop [i: $B4, b: $B5, c: $B6] {  # loop_1
+      $B4: {  # initializer
+        next_iteration 0u  # -> $B5
+      }
+      $B5 (%idx:u32): {  # body
+        %22:bool = gte %idx, 4u
+        if %22 [t: $B7] {  # if_1
+          $B7: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %23:ptr<storage, mat2x3<f16>, read_write> = access %target, %idx
+        %24:mat2x3<f16> = access %value_param, %idx
+        %25:void = call %tint_store_and_preserve_padding_1, %23, %24
+        continue  # -> $B6
+      }
+      $B6: {  # continuing
+        %26:u32 = add %idx, 1u
+        next_iteration %26  # -> $B5
+      }
+    }
+    ret
+  }
+}
+%tint_store_and_preserve_padding_1 = func(%target_1:ptr<storage, mat2x3<f16>, read_write>, %value_param_1:mat2x3<f16>):void {  # %tint_store_and_preserve_padding_1: 'tint_store_and_preserve_padding', %target_1: 'target', %value_param_1: 'value_param'
+  $B8: {
+    %29:ptr<storage, vec3<f16>, read_write> = access %target_1, 0u
+    %30:vec3<f16> = access %value_param_1, 0u
+    store %29, %30
+    %31:ptr<storage, vec3<f16>, read_write> = access %target_1, 1u
+    %32:vec3<f16> = access %value_param_1, 1u
+    store %31, %32
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat2x3_f16/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat2x3_f16/to_workgroup.wgsl.expected.ir.msl
index 09f609b..f29c37f 100644
--- a/test/tint/buffer/uniform/std140/array/mat2x3_f16/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat2x3_f16/to_workgroup.wgsl.expected.ir.msl
@@ -1,27 +1,52 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat2x3<f16>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f16, read_write> = var @binding_point(0, 1)
   %w:ptr<workgroup, array<mat2x3<f16>, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:array<mat2x3<f16>, 4> = load %u
-    store %w, %4
-    %5:ptr<workgroup, mat2x3<f16>, read_write> = access %w, 1i
-    %6:ptr<uniform, mat2x3<f16>, read> = access %u, 2i
-    %7:mat2x3<f16> = load %6
-    store %5, %7
-    %8:ptr<workgroup, vec3<f16>, read_write> = access %w, 1i, 0i
-    %9:ptr<uniform, vec3<f16>, read> = access %u, 0i, 1i
-    %10:vec3<f16> = load %9
-    %11:vec3<f16> = swizzle %10, zxy
-    store %8, %11
-    %12:ptr<workgroup, vec3<f16>, read_write> = access %w, 1i, 0i
-    %13:ptr<uniform, vec3<f16>, read> = access %u, 0i, 1i
-    %14:f16 = load_vector_element %13, 0u
-    store_vector_element %12, 0u, %14
+%f = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B2: {
+    loop [i: $B3, b: $B4, c: $B5] {  # loop_1
+      $B3: {  # initializer
+        next_iteration %tint_local_index  # -> $B4
+      }
+      $B4 (%idx:u32): {  # body
+        %7:bool = gte %idx, 4u
+        if %7 [t: $B6] {  # if_1
+          $B6: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %8:ptr<workgroup, mat2x3<f16>, read_write> = access %w, %idx
+        store %8, mat2x3<f16>(vec3<f16>(0.0h))
+        continue  # -> $B5
+      }
+      $B5: {  # continuing
+        %9:u32 = add %idx, 1u
+        next_iteration %9  # -> $B4
+      }
+    }
+    %10:void = msl.threadgroup_barrier 4u
+    %11:array<mat2x3<f16>, 4> = load %u
+    store %w, %11
+    %12:ptr<workgroup, mat2x3<f16>, read_write> = access %w, 1i
+    %13:ptr<uniform, mat2x3<f16>, read> = access %u, 2i
+    %14:mat2x3<f16> = load %13
+    store %12, %14
+    %15:ptr<workgroup, vec3<f16>, read_write> = access %w, 1i, 0i
+    %16:ptr<uniform, vec3<f16>, read> = access %u, 0i, 1i
+    %17:vec3<f16> = load %16
+    %18:vec3<f16> = swizzle %17, zxy
+    store %15, %18
+    %19:ptr<workgroup, vec3<f16>, read_write> = access %w, 1i, 0i
+    %20:ptr<uniform, vec3<f16>, read> = access %u, 0i, 1i
+    %21:f16 = load_vector_element %20, 0u
+    store_vector_element %19, 0u, %21
+    %22:ptr<workgroup, vec3<f16>, read_write> = access %w, 1i, 0i
+    %23:f16 = load_vector_element %22, 0u
+    store %s, %23
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat2x3_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat2x3_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
index 57ea490..cdb2914 100644
--- a/test/tint/buffer/uniform/std140/array/mat2x3_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat2x3_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
@@ -1,29 +1,43 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %a:ptr<uniform, array<mat2x3<f32>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f32, read_write> = var @binding_point(0, 1)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
-    %4:i32 = load %counter
-    %5:i32 = add %4, 1i
-    store %counter, %5
-    %6:i32 = load %counter
-    ret %6
+%i = func():i32 {
+  $B2: {
+    %5:i32 = load %counter
+    %6:i32 = add %5, 1i
+    store %counter, %6
+    %7:i32 = load %counter
+    ret %7
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_a:ptr<uniform, array<mat2x3<f32>, 4>, read> = let %a
-    %9:i32 = call %i
-    %p_a_i:ptr<uniform, mat2x3<f32>, read> = access %p_a, %9
-    %11:i32 = call %i
-    %p_a_i_i:ptr<uniform, vec3<f32>, read> = access %p_a_i, %11
-    %l_a:array<mat2x3<f32>, 4> = load %p_a
-    %l_a_i:mat2x3<f32> = load %p_a_i
-    %l_a_i_i:vec3<f32> = load %p_a_i_i
+    %10:i32 = call %i
+    %11:ptr<uniform, mat2x3<f32>, read> = access %p_a, %10
+    %p_a_i:ptr<uniform, mat2x3<f32>, read> = let %11
+    %13:i32 = call %i
+    %14:ptr<uniform, vec3<f32>, read> = access %p_a_i, %13
+    %p_a_i_i:ptr<uniform, vec3<f32>, read> = let %14
+    %16:array<mat2x3<f32>, 4> = load %p_a
+    %l_a:array<mat2x3<f32>, 4> = let %16
+    %18:mat2x3<f32> = load %p_a_i
+    %l_a_i:mat2x3<f32> = let %18
+    %20:vec3<f32> = load %p_a_i_i
+    %l_a_i_i:vec3<f32> = let %20
+    %22:f32 = load_vector_element %p_a_i_i, 0u
+    %23:f32 = access %l_a, 0i, 0i, 0u
+    %24:f32 = add %22, %23
+    %25:f32 = access %l_a_i, 0i, 0u
+    %26:f32 = add %24, %25
+    %27:f32 = access %l_a_i_i, 0u
+    %28:f32 = add %26, %27
+    store %s, %28
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat2x3_f32/static_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat2x3_f32/static_index_via_ptr.wgsl.expected.ir.msl
index e31cc23e..46fb5fb 100644
--- a/test/tint/buffer/uniform/std140/array/mat2x3_f32/static_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat2x3_f32/static_index_via_ptr.wgsl.expected.ir.msl
@@ -1,17 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %a:ptr<uniform, array<mat2x3<f32>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f32, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %p_a:ptr<uniform, array<mat2x3<f32>, 4>, read> = let %a
-    %p_a_2:ptr<uniform, mat2x3<f32>, read> = access %p_a, 2i
-    %p_a_2_1:ptr<uniform, vec3<f32>, read> = access %p_a_2, 1i
-    %l_a:array<mat2x3<f32>, 4> = load %p_a
-    %l_a_i:mat2x3<f32> = load %p_a_2
-    %l_a_i_i:vec3<f32> = load %p_a_2_1
+    %5:ptr<uniform, mat2x3<f32>, read> = access %p_a, 2i
+    %p_a_2:ptr<uniform, mat2x3<f32>, read> = let %5
+    %7:ptr<uniform, vec3<f32>, read> = access %p_a_2, 1i
+    %p_a_2_1:ptr<uniform, vec3<f32>, read> = let %7
+    %9:array<mat2x3<f32>, 4> = load %p_a
+    %l_a:array<mat2x3<f32>, 4> = let %9
+    %11:mat2x3<f32> = load %p_a_2
+    %l_a_i:mat2x3<f32> = let %11
+    %13:vec3<f32> = load %p_a_2_1
+    %l_a_i_i:vec3<f32> = let %13
+    %15:f32 = load_vector_element %p_a_2_1, 0u
+    %16:f32 = access %l_a, 0i, 0i, 0u
+    %17:f32 = add %15, %16
+    %18:f32 = access %l_a_i, 0i, 0u
+    %19:f32 = add %17, %18
+    %20:f32 = access %l_a_i_i, 0u
+    %21:f32 = add %19, %20
+    store %s, %21
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat2x3_f32/to_builtin.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat2x3_f32/to_builtin.wgsl.expected.ir.msl
index 68d6fe2..47c1222 100644
--- a/test/tint/buffer/uniform/std140/array/mat2x3_f32/to_builtin.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat2x3_f32/to_builtin.wgsl.expected.ir.msl
@@ -1,23 +1,34 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat2x3<f32>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f32, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %3:ptr<uniform, mat2x3<f32>, read> = access %u, 2i
-    %4:mat2x3<f32> = load %3
-    %t:mat3x2<f32> = transpose %4
-    %6:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1i
-    %7:vec3<f32> = load %6
-    %8:vec3<f32> = swizzle %7, zxy
-    %l:f32 = length %8
-    %10:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1i
-    %11:vec3<f32> = load %10
-    %12:vec3<f32> = swizzle %11, zxy
-    %13:f32 = access %12, 0u
-    %a:f32 = abs %13
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %4:ptr<uniform, mat2x3<f32>, read> = access %u, 2i
+    %5:mat2x3<f32> = load %4
+    %6:mat3x2<f32> = transpose %5
+    %t:mat3x2<f32> = let %6
+    %8:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1i
+    %9:vec3<f32> = load %8
+    %10:vec3<f32> = swizzle %9, zxy
+    %11:f32 = length %10
+    %l:f32 = let %11
+    %13:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1i
+    %14:vec3<f32> = load %13
+    %15:vec3<f32> = swizzle %14, zxy
+    %16:f32 = access %15, 0u
+    %17:f32 = abs %16
+    %a:f32 = let %17
+    %19:f32 = access %t, 0i, 0u
+    %20:f32 = construct %l
+    %21:f32 = add %19, %20
+    %22:f32 = let %21
+    %23:f32 = construct %a
+    %24:f32 = add %22, %23
+    store %s, %24
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat2x3_f32/to_fn.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat2x3_f32/to_fn.wgsl.expected.ir.msl
index ec3e52e..beb17bf 100644
--- a/test/tint/buffer/uniform/std140/array/mat2x3_f32/to_fn.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat2x3_f32/to_fn.wgsl.expected.ir.msl
@@ -1,45 +1,56 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat2x3<f32>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f32, read_write> = var @binding_point(0, 1)
 }
 
-%a = func(%a_1:array<mat2x3<f32>, 4>):void -> %b2 {  # %a_1: 'a'
-  %b2 = block {
-    ret
+%a = func(%a_1:array<mat2x3<f32>, 4>):f32 {  # %a_1: 'a'
+  $B2: {
+    %5:f32 = access %a_1, 0i, 0i, 0u
+    ret %5
   }
 }
-%b = func(%m:mat2x3<f32>):void -> %b3 {
-  %b3 = block {
-    ret
+%b = func(%m:mat2x3<f32>):f32 {
+  $B3: {
+    %8:f32 = access %m, 0i, 0u
+    ret %8
   }
 }
-%c = func(%v:vec3<f32>):void -> %b4 {
-  %b4 = block {
-    ret
+%c = func(%v:vec3<f32>):f32 {
+  $B4: {
+    %11:f32 = access %v, 0u
+    ret %11
   }
 }
-%d = func(%f:f32):void -> %b5 {
-  %b5 = block {
-    ret
+%d = func(%f:f32):f32 {
+  $B5: {
+    ret %f
   }
 }
-%f_1 = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {  # %f_1: 'f'
-  %b6 = block {
-    %11:array<mat2x3<f32>, 4> = load %u
-    %12:void = call %a, %11
-    %13:ptr<uniform, mat2x3<f32>, read> = access %u, 1i
-    %14:mat2x3<f32> = load %13
-    %15:void = call %b, %14
-    %16:ptr<uniform, vec3<f32>, read> = access %u, 1i, 0i
-    %17:vec3<f32> = load %16
-    %18:vec3<f32> = swizzle %17, zxy
-    %19:void = call %c, %18
-    %20:ptr<uniform, vec3<f32>, read> = access %u, 1i, 0i
-    %21:vec3<f32> = load %20
-    %22:vec3<f32> = swizzle %21, zxy
-    %23:f32 = access %22, 0u
-    %24:void = call %d, %23
+%f_1 = @compute @workgroup_size(1, 1, 1) func():void {  # %f_1: 'f'
+  $B6: {
+    %15:array<mat2x3<f32>, 4> = load %u
+    %16:f32 = call %a, %15
+    %17:f32 = let %16
+    %18:ptr<uniform, mat2x3<f32>, read> = access %u, 1i
+    %19:mat2x3<f32> = load %18
+    %20:f32 = call %b, %19
+    %21:f32 = add %17, %20
+    %22:f32 = let %21
+    %23:ptr<uniform, vec3<f32>, read> = access %u, 1i, 0i
+    %24:vec3<f32> = load %23
+    %25:vec3<f32> = swizzle %24, zxy
+    %26:f32 = call %c, %25
+    %27:f32 = add %22, %26
+    %28:f32 = let %27
+    %29:ptr<uniform, vec3<f32>, read> = access %u, 1i, 0i
+    %30:vec3<f32> = load %29
+    %31:vec3<f32> = swizzle %30, zxy
+    %32:f32 = access %31, 0u
+    %33:f32 = call %d, %32
+    %34:f32 = add %28, %33
+    store %s, %34
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat2x3_f32/to_private.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat2x3_f32/to_private.wgsl.expected.ir.msl
index eb56d2a..654f700 100644
--- a/test/tint/buffer/uniform/std140/array/mat2x3_f32/to_private.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat2x3_f32/to_private.wgsl.expected.ir.msl
@@ -1,27 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat2x3<f32>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f32, read_write> = var @binding_point(0, 1)
   %p:ptr<private, array<mat2x3<f32>, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:array<mat2x3<f32>, 4> = load %u
-    store %p, %4
-    %5:ptr<private, mat2x3<f32>, read_write> = access %p, 1i
-    %6:ptr<uniform, mat2x3<f32>, read> = access %u, 2i
-    %7:mat2x3<f32> = load %6
-    store %5, %7
-    %8:ptr<private, vec3<f32>, read_write> = access %p, 1i, 0i
-    %9:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1i
-    %10:vec3<f32> = load %9
-    %11:vec3<f32> = swizzle %10, zxy
-    store %8, %11
-    %12:ptr<private, vec3<f32>, read_write> = access %p, 1i, 0i
-    %13:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1i
-    %14:f32 = load_vector_element %13, 0u
-    store_vector_element %12, 0u, %14
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %5:array<mat2x3<f32>, 4> = load %u
+    store %p, %5
+    %6:ptr<private, mat2x3<f32>, read_write> = access %p, 1i
+    %7:ptr<uniform, mat2x3<f32>, read> = access %u, 2i
+    %8:mat2x3<f32> = load %7
+    store %6, %8
+    %9:ptr<private, vec3<f32>, read_write> = access %p, 1i, 0i
+    %10:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1i
+    %11:vec3<f32> = load %10
+    %12:vec3<f32> = swizzle %11, zxy
+    store %9, %12
+    %13:ptr<private, vec3<f32>, read_write> = access %p, 1i, 0i
+    %14:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1i
+    %15:f32 = load_vector_element %14, 0u
+    store_vector_element %13, 0u, %15
+    %16:ptr<private, vec3<f32>, read_write> = access %p, 1i, 0i
+    %17:f32 = load_vector_element %16, 0u
+    store %s, %17
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat2x3_f32/to_storage.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat2x3_f32/to_storage.wgsl.expected.ir.msl
index b83bd8c..2492036 100644
--- a/test/tint/buffer/uniform/std140/array/mat2x3_f32/to_storage.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat2x3_f32/to_storage.wgsl.expected.ir.msl
@@ -1,27 +1,64 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat2x3<f32>, 4>, read> = var @binding_point(0, 0)
   %s:ptr<storage, array<mat2x3<f32>, 4>, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:array<mat2x3<f32>, 4> = load %u
-    store %s, %4
-    %5:ptr<storage, mat2x3<f32>, read_write> = access %s, 1i
-    %6:ptr<uniform, mat2x3<f32>, read> = access %u, 2i
-    %7:mat2x3<f32> = load %6
-    store %5, %7
-    %8:ptr<storage, vec3<f32>, read_write> = access %s, 1i, 0i
-    %9:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1i
-    %10:vec3<f32> = load %9
-    %11:vec3<f32> = swizzle %10, zxy
-    store %8, %11
+    %5:void = call %tint_store_and_preserve_padding, %s, %4
+    %7:ptr<storage, mat2x3<f32>, read_write> = access %s, 1i
+    %8:ptr<uniform, mat2x3<f32>, read> = access %u, 2i
+    %9:mat2x3<f32> = load %8
+    %10:void = call %tint_store_and_preserve_padding_1, %7, %9
     %12:ptr<storage, vec3<f32>, read_write> = access %s, 1i, 0i
     %13:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1i
-    %14:f32 = load_vector_element %13, 0u
-    store_vector_element %12, 0u, %14
+    %14:vec3<f32> = load %13
+    %15:vec3<f32> = swizzle %14, zxy
+    store %12, %15
+    %16:ptr<storage, vec3<f32>, read_write> = access %s, 1i, 0i
+    %17:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1i
+    %18:f32 = load_vector_element %17, 0u
+    store_vector_element %16, 0u, %18
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, array<mat2x3<f32>, 4>, read_write>, %value_param:array<mat2x3<f32>, 4>):void {
+  $B3: {
+    loop [i: $B4, b: $B5, c: $B6] {  # loop_1
+      $B4: {  # initializer
+        next_iteration 0u  # -> $B5
+      }
+      $B5 (%idx:u32): {  # body
+        %22:bool = gte %idx, 4u
+        if %22 [t: $B7] {  # if_1
+          $B7: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %23:ptr<storage, mat2x3<f32>, read_write> = access %target, %idx
+        %24:mat2x3<f32> = access %value_param, %idx
+        %25:void = call %tint_store_and_preserve_padding_1, %23, %24
+        continue  # -> $B6
+      }
+      $B6: {  # continuing
+        %26:u32 = add %idx, 1u
+        next_iteration %26  # -> $B5
+      }
+    }
+    ret
+  }
+}
+%tint_store_and_preserve_padding_1 = func(%target_1:ptr<storage, mat2x3<f32>, read_write>, %value_param_1:mat2x3<f32>):void {  # %tint_store_and_preserve_padding_1: 'tint_store_and_preserve_padding', %target_1: 'target', %value_param_1: 'value_param'
+  $B8: {
+    %29:ptr<storage, vec3<f32>, read_write> = access %target_1, 0u
+    %30:vec3<f32> = access %value_param_1, 0u
+    store %29, %30
+    %31:ptr<storage, vec3<f32>, read_write> = access %target_1, 1u
+    %32:vec3<f32> = access %value_param_1, 1u
+    store %31, %32
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat2x3_f32/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat2x3_f32/to_workgroup.wgsl.expected.ir.msl
index 98edbe4..81f7414 100644
--- a/test/tint/buffer/uniform/std140/array/mat2x3_f32/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat2x3_f32/to_workgroup.wgsl.expected.ir.msl
@@ -1,27 +1,48 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat2x3<f32>, 4>, read> = var @binding_point(0, 0)
   %w:ptr<workgroup, array<mat2x3<f32>, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:array<mat2x3<f32>, 4> = load %u
-    store %w, %4
-    %5:ptr<workgroup, mat2x3<f32>, read_write> = access %w, 1i
-    %6:ptr<uniform, mat2x3<f32>, read> = access %u, 2i
-    %7:mat2x3<f32> = load %6
-    store %5, %7
-    %8:ptr<workgroup, vec3<f32>, read_write> = access %w, 1i, 0i
-    %9:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1i
-    %10:vec3<f32> = load %9
-    %11:vec3<f32> = swizzle %10, zxy
-    store %8, %11
-    %12:ptr<workgroup, vec3<f32>, read_write> = access %w, 1i, 0i
-    %13:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1i
-    %14:f32 = load_vector_element %13, 0u
-    store_vector_element %12, 0u, %14
+%f = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B2: {
+    loop [i: $B3, b: $B4, c: $B5] {  # loop_1
+      $B3: {  # initializer
+        next_iteration %tint_local_index  # -> $B4
+      }
+      $B4 (%idx:u32): {  # body
+        %6:bool = gte %idx, 4u
+        if %6 [t: $B6] {  # if_1
+          $B6: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %7:ptr<workgroup, mat2x3<f32>, read_write> = access %w, %idx
+        store %7, mat2x3<f32>(vec3<f32>(0.0f))
+        continue  # -> $B5
+      }
+      $B5: {  # continuing
+        %8:u32 = add %idx, 1u
+        next_iteration %8  # -> $B4
+      }
+    }
+    %9:void = msl.threadgroup_barrier 4u
+    %10:array<mat2x3<f32>, 4> = load %u
+    store %w, %10
+    %11:ptr<workgroup, mat2x3<f32>, read_write> = access %w, 1i
+    %12:ptr<uniform, mat2x3<f32>, read> = access %u, 2i
+    %13:mat2x3<f32> = load %12
+    store %11, %13
+    %14:ptr<workgroup, vec3<f32>, read_write> = access %w, 1i, 0i
+    %15:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1i
+    %16:vec3<f32> = load %15
+    %17:vec3<f32> = swizzle %16, zxy
+    store %14, %17
+    %18:ptr<workgroup, vec3<f32>, read_write> = access %w, 1i, 0i
+    %19:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1i
+    %20:f32 = load_vector_element %19, 0u
+    store_vector_element %18, 0u, %20
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat2x4_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat2x4_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
index 4dacefe..9442868 100644
--- a/test/tint/buffer/uniform/std140/array/mat2x4_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat2x4_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
@@ -1,29 +1,43 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %a:ptr<uniform, array<mat2x4<f16>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f16, read_write> = var @binding_point(0, 1)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
-    %4:i32 = load %counter
-    %5:i32 = add %4, 1i
-    store %counter, %5
-    %6:i32 = load %counter
-    ret %6
+%i = func():i32 {
+  $B2: {
+    %5:i32 = load %counter
+    %6:i32 = add %5, 1i
+    store %counter, %6
+    %7:i32 = load %counter
+    ret %7
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_a:ptr<uniform, array<mat2x4<f16>, 4>, read> = let %a
-    %9:i32 = call %i
-    %p_a_i:ptr<uniform, mat2x4<f16>, read> = access %p_a, %9
-    %11:i32 = call %i
-    %p_a_i_i:ptr<uniform, vec4<f16>, read> = access %p_a_i, %11
-    %l_a:array<mat2x4<f16>, 4> = load %p_a
-    %l_a_i:mat2x4<f16> = load %p_a_i
-    %l_a_i_i:vec4<f16> = load %p_a_i_i
+    %10:i32 = call %i
+    %11:ptr<uniform, mat2x4<f16>, read> = access %p_a, %10
+    %p_a_i:ptr<uniform, mat2x4<f16>, read> = let %11
+    %13:i32 = call %i
+    %14:ptr<uniform, vec4<f16>, read> = access %p_a_i, %13
+    %p_a_i_i:ptr<uniform, vec4<f16>, read> = let %14
+    %16:array<mat2x4<f16>, 4> = load %p_a
+    %l_a:array<mat2x4<f16>, 4> = let %16
+    %18:mat2x4<f16> = load %p_a_i
+    %l_a_i:mat2x4<f16> = let %18
+    %20:vec4<f16> = load %p_a_i_i
+    %l_a_i_i:vec4<f16> = let %20
+    %22:f16 = load_vector_element %p_a_i_i, 0u
+    %23:f16 = access %l_a, 0i, 0i, 0u
+    %24:f16 = add %22, %23
+    %25:f16 = access %l_a_i, 0i, 0u
+    %26:f16 = add %24, %25
+    %27:f16 = access %l_a_i_i, 0u
+    %28:f16 = add %26, %27
+    store %s, %28
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat2x4_f16/static_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat2x4_f16/static_index_via_ptr.wgsl.expected.ir.msl
index ba7636b..b350cbf 100644
--- a/test/tint/buffer/uniform/std140/array/mat2x4_f16/static_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat2x4_f16/static_index_via_ptr.wgsl.expected.ir.msl
@@ -1,17 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %a:ptr<uniform, array<mat2x4<f16>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f16, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %p_a:ptr<uniform, array<mat2x4<f16>, 4>, read> = let %a
-    %p_a_2:ptr<uniform, mat2x4<f16>, read> = access %p_a, 2i
-    %p_a_2_1:ptr<uniform, vec4<f16>, read> = access %p_a_2, 1i
-    %l_a:array<mat2x4<f16>, 4> = load %p_a
-    %l_a_i:mat2x4<f16> = load %p_a_2
-    %l_a_i_i:vec4<f16> = load %p_a_2_1
+    %5:ptr<uniform, mat2x4<f16>, read> = access %p_a, 2i
+    %p_a_2:ptr<uniform, mat2x4<f16>, read> = let %5
+    %7:ptr<uniform, vec4<f16>, read> = access %p_a_2, 1i
+    %p_a_2_1:ptr<uniform, vec4<f16>, read> = let %7
+    %9:array<mat2x4<f16>, 4> = load %p_a
+    %l_a:array<mat2x4<f16>, 4> = let %9
+    %11:mat2x4<f16> = load %p_a_2
+    %l_a_i:mat2x4<f16> = let %11
+    %13:vec4<f16> = load %p_a_2_1
+    %l_a_i_i:vec4<f16> = let %13
+    %15:f16 = load_vector_element %p_a_2_1, 0u
+    %16:f16 = access %l_a, 0i, 0i, 0u
+    %17:f16 = add %15, %16
+    %18:f16 = access %l_a_i, 0i, 0u
+    %19:f16 = add %17, %18
+    %20:f16 = access %l_a_i_i, 0u
+    %21:f16 = add %19, %20
+    store %s, %21
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat2x4_f16/to_builtin.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat2x4_f16/to_builtin.wgsl.expected.ir.msl
index 6e548f8..068f4c3 100644
--- a/test/tint/buffer/uniform/std140/array/mat2x4_f16/to_builtin.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat2x4_f16/to_builtin.wgsl.expected.ir.msl
@@ -1,23 +1,34 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat2x4<f16>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f16, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %3:ptr<uniform, mat2x4<f16>, read> = access %u, 2i
-    %4:mat2x4<f16> = load %3
-    %t:mat4x2<f16> = transpose %4
-    %6:ptr<uniform, vec4<f16>, read> = access %u, 0i, 1i
-    %7:vec4<f16> = load %6
-    %8:vec4<f16> = swizzle %7, ywxz
-    %l:f16 = length %8
-    %10:ptr<uniform, vec4<f16>, read> = access %u, 0i, 1i
-    %11:vec4<f16> = load %10
-    %12:vec4<f16> = swizzle %11, ywxz
-    %13:f16 = access %12, 0u
-    %a:f16 = abs %13
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %4:ptr<uniform, mat2x4<f16>, read> = access %u, 2i
+    %5:mat2x4<f16> = load %4
+    %6:mat4x2<f16> = transpose %5
+    %t:mat4x2<f16> = let %6
+    %8:ptr<uniform, vec4<f16>, read> = access %u, 0i, 1i
+    %9:vec4<f16> = load %8
+    %10:vec4<f16> = swizzle %9, ywxz
+    %11:f16 = length %10
+    %l:f16 = let %11
+    %13:ptr<uniform, vec4<f16>, read> = access %u, 0i, 1i
+    %14:vec4<f16> = load %13
+    %15:vec4<f16> = swizzle %14, ywxz
+    %16:f16 = access %15, 0u
+    %17:f16 = abs %16
+    %a:f16 = let %17
+    %19:f16 = access %t, 0i, 0u
+    %20:f16 = construct %l
+    %21:f16 = add %19, %20
+    %22:f16 = let %21
+    %23:f16 = construct %a
+    %24:f16 = add %22, %23
+    store %s, %24
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat2x4_f16/to_fn.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat2x4_f16/to_fn.wgsl.expected.ir.msl
index afade6c..50ecceb 100644
--- a/test/tint/buffer/uniform/std140/array/mat2x4_f16/to_fn.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat2x4_f16/to_fn.wgsl.expected.ir.msl
@@ -1,45 +1,56 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat2x4<f16>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f16, read_write> = var @binding_point(0, 1)
 }
 
-%a = func(%a_1:array<mat2x4<f16>, 4>):void -> %b2 {  # %a_1: 'a'
-  %b2 = block {
-    ret
+%a = func(%a_1:array<mat2x4<f16>, 4>):f16 {  # %a_1: 'a'
+  $B2: {
+    %5:f16 = access %a_1, 0i, 0i, 0u
+    ret %5
   }
 }
-%b = func(%m:mat2x4<f16>):void -> %b3 {
-  %b3 = block {
-    ret
+%b = func(%m:mat2x4<f16>):f16 {
+  $B3: {
+    %8:f16 = access %m, 0i, 0u
+    ret %8
   }
 }
-%c = func(%v:vec4<f16>):void -> %b4 {
-  %b4 = block {
-    ret
+%c = func(%v:vec4<f16>):f16 {
+  $B4: {
+    %11:f16 = access %v, 0u
+    ret %11
   }
 }
-%d = func(%f:f16):void -> %b5 {
-  %b5 = block {
-    ret
+%d = func(%f:f16):f16 {
+  $B5: {
+    ret %f
   }
 }
-%f_1 = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {  # %f_1: 'f'
-  %b6 = block {
-    %11:array<mat2x4<f16>, 4> = load %u
-    %12:void = call %a, %11
-    %13:ptr<uniform, mat2x4<f16>, read> = access %u, 1i
-    %14:mat2x4<f16> = load %13
-    %15:void = call %b, %14
-    %16:ptr<uniform, vec4<f16>, read> = access %u, 1i, 0i
-    %17:vec4<f16> = load %16
-    %18:vec4<f16> = swizzle %17, ywxz
-    %19:void = call %c, %18
-    %20:ptr<uniform, vec4<f16>, read> = access %u, 1i, 0i
-    %21:vec4<f16> = load %20
-    %22:vec4<f16> = swizzle %21, ywxz
-    %23:f16 = access %22, 0u
-    %24:void = call %d, %23
+%f_1 = @compute @workgroup_size(1, 1, 1) func():void {  # %f_1: 'f'
+  $B6: {
+    %15:array<mat2x4<f16>, 4> = load %u
+    %16:f16 = call %a, %15
+    %17:f16 = let %16
+    %18:ptr<uniform, mat2x4<f16>, read> = access %u, 1i
+    %19:mat2x4<f16> = load %18
+    %20:f16 = call %b, %19
+    %21:f16 = add %17, %20
+    %22:f16 = let %21
+    %23:ptr<uniform, vec4<f16>, read> = access %u, 1i, 0i
+    %24:vec4<f16> = load %23
+    %25:vec4<f16> = swizzle %24, ywxz
+    %26:f16 = call %c, %25
+    %27:f16 = add %22, %26
+    %28:f16 = let %27
+    %29:ptr<uniform, vec4<f16>, read> = access %u, 1i, 0i
+    %30:vec4<f16> = load %29
+    %31:vec4<f16> = swizzle %30, ywxz
+    %32:f16 = access %31, 0u
+    %33:f16 = call %d, %32
+    %34:f16 = add %28, %33
+    store %s, %34
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat2x4_f16/to_private.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat2x4_f16/to_private.wgsl.expected.ir.msl
index 18967f3..e1328d1 100644
--- a/test/tint/buffer/uniform/std140/array/mat2x4_f16/to_private.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat2x4_f16/to_private.wgsl.expected.ir.msl
@@ -1,27 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat2x4<f16>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f16, read_write> = var @binding_point(0, 1)
   %p:ptr<private, array<mat2x4<f16>, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:array<mat2x4<f16>, 4> = load %u
-    store %p, %4
-    %5:ptr<private, mat2x4<f16>, read_write> = access %p, 1i
-    %6:ptr<uniform, mat2x4<f16>, read> = access %u, 2i
-    %7:mat2x4<f16> = load %6
-    store %5, %7
-    %8:ptr<private, vec4<f16>, read_write> = access %p, 1i, 0i
-    %9:ptr<uniform, vec4<f16>, read> = access %u, 0i, 1i
-    %10:vec4<f16> = load %9
-    %11:vec4<f16> = swizzle %10, ywxz
-    store %8, %11
-    %12:ptr<private, vec4<f16>, read_write> = access %p, 1i, 0i
-    %13:ptr<uniform, vec4<f16>, read> = access %u, 0i, 1i
-    %14:f16 = load_vector_element %13, 0u
-    store_vector_element %12, 0u, %14
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %5:array<mat2x4<f16>, 4> = load %u
+    store %p, %5
+    %6:ptr<private, mat2x4<f16>, read_write> = access %p, 1i
+    %7:ptr<uniform, mat2x4<f16>, read> = access %u, 2i
+    %8:mat2x4<f16> = load %7
+    store %6, %8
+    %9:ptr<private, vec4<f16>, read_write> = access %p, 1i, 0i
+    %10:ptr<uniform, vec4<f16>, read> = access %u, 0i, 1i
+    %11:vec4<f16> = load %10
+    %12:vec4<f16> = swizzle %11, ywxz
+    store %9, %12
+    %13:ptr<private, vec4<f16>, read_write> = access %p, 1i, 0i
+    %14:ptr<uniform, vec4<f16>, read> = access %u, 0i, 1i
+    %15:f16 = load_vector_element %14, 0u
+    store_vector_element %13, 0u, %15
+    %16:ptr<private, vec4<f16>, read_write> = access %p, 1i, 0i
+    %17:f16 = load_vector_element %16, 0u
+    store %s, %17
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat2x4_f16/to_storage.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat2x4_f16/to_storage.wgsl.expected.ir.msl
index bdcd2db..c2e1e27 100644
--- a/test/tint/buffer/uniform/std140/array/mat2x4_f16/to_storage.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat2x4_f16/to_storage.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat2x4<f16>, 4>, read> = var @binding_point(0, 0)
   %s:ptr<storage, array<mat2x4<f16>, 4>, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:array<mat2x4<f16>, 4> = load %u
     store %s, %4
     %5:ptr<storage, mat2x4<f16>, read_write> = access %s, 1i
diff --git a/test/tint/buffer/uniform/std140/array/mat2x4_f16/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat2x4_f16/to_workgroup.wgsl.expected.ir.msl
index c7ee507..39b11df 100644
--- a/test/tint/buffer/uniform/std140/array/mat2x4_f16/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat2x4_f16/to_workgroup.wgsl.expected.ir.msl
@@ -1,27 +1,48 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat2x4<f16>, 4>, read> = var @binding_point(0, 0)
   %w:ptr<workgroup, array<mat2x4<f16>, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:array<mat2x4<f16>, 4> = load %u
-    store %w, %4
-    %5:ptr<workgroup, mat2x4<f16>, read_write> = access %w, 1i
-    %6:ptr<uniform, mat2x4<f16>, read> = access %u, 2i
-    %7:mat2x4<f16> = load %6
-    store %5, %7
-    %8:ptr<workgroup, vec4<f16>, read_write> = access %w, 1i, 0i
-    %9:ptr<uniform, vec4<f16>, read> = access %u, 0i, 1i
-    %10:vec4<f16> = load %9
-    %11:vec4<f16> = swizzle %10, ywxz
-    store %8, %11
-    %12:ptr<workgroup, vec4<f16>, read_write> = access %w, 1i, 0i
-    %13:ptr<uniform, vec4<f16>, read> = access %u, 0i, 1i
-    %14:f16 = load_vector_element %13, 0u
-    store_vector_element %12, 0u, %14
+%f = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B2: {
+    loop [i: $B3, b: $B4, c: $B5] {  # loop_1
+      $B3: {  # initializer
+        next_iteration %tint_local_index  # -> $B4
+      }
+      $B4 (%idx:u32): {  # body
+        %6:bool = gte %idx, 4u
+        if %6 [t: $B6] {  # if_1
+          $B6: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %7:ptr<workgroup, mat2x4<f16>, read_write> = access %w, %idx
+        store %7, mat2x4<f16>(vec4<f16>(0.0h))
+        continue  # -> $B5
+      }
+      $B5: {  # continuing
+        %8:u32 = add %idx, 1u
+        next_iteration %8  # -> $B4
+      }
+    }
+    %9:void = msl.threadgroup_barrier 4u
+    %10:array<mat2x4<f16>, 4> = load %u
+    store %w, %10
+    %11:ptr<workgroup, mat2x4<f16>, read_write> = access %w, 1i
+    %12:ptr<uniform, mat2x4<f16>, read> = access %u, 2i
+    %13:mat2x4<f16> = load %12
+    store %11, %13
+    %14:ptr<workgroup, vec4<f16>, read_write> = access %w, 1i, 0i
+    %15:ptr<uniform, vec4<f16>, read> = access %u, 0i, 1i
+    %16:vec4<f16> = load %15
+    %17:vec4<f16> = swizzle %16, ywxz
+    store %14, %17
+    %18:ptr<workgroup, vec4<f16>, read_write> = access %w, 1i, 0i
+    %19:ptr<uniform, vec4<f16>, read> = access %u, 0i, 1i
+    %20:f16 = load_vector_element %19, 0u
+    store_vector_element %18, 0u, %20
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat2x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat2x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
index aabebe3..554498d 100644
--- a/test/tint/buffer/uniform/std140/array/mat2x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat2x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
@@ -1,29 +1,43 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %a:ptr<uniform, array<mat2x4<f32>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f32, read_write> = var @binding_point(0, 1)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
-    %4:i32 = load %counter
-    %5:i32 = add %4, 1i
-    store %counter, %5
-    %6:i32 = load %counter
-    ret %6
+%i = func():i32 {
+  $B2: {
+    %5:i32 = load %counter
+    %6:i32 = add %5, 1i
+    store %counter, %6
+    %7:i32 = load %counter
+    ret %7
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_a:ptr<uniform, array<mat2x4<f32>, 4>, read> = let %a
-    %9:i32 = call %i
-    %p_a_i:ptr<uniform, mat2x4<f32>, read> = access %p_a, %9
-    %11:i32 = call %i
-    %p_a_i_i:ptr<uniform, vec4<f32>, read> = access %p_a_i, %11
-    %l_a:array<mat2x4<f32>, 4> = load %p_a
-    %l_a_i:mat2x4<f32> = load %p_a_i
-    %l_a_i_i:vec4<f32> = load %p_a_i_i
+    %10:i32 = call %i
+    %11:ptr<uniform, mat2x4<f32>, read> = access %p_a, %10
+    %p_a_i:ptr<uniform, mat2x4<f32>, read> = let %11
+    %13:i32 = call %i
+    %14:ptr<uniform, vec4<f32>, read> = access %p_a_i, %13
+    %p_a_i_i:ptr<uniform, vec4<f32>, read> = let %14
+    %16:array<mat2x4<f32>, 4> = load %p_a
+    %l_a:array<mat2x4<f32>, 4> = let %16
+    %18:mat2x4<f32> = load %p_a_i
+    %l_a_i:mat2x4<f32> = let %18
+    %20:vec4<f32> = load %p_a_i_i
+    %l_a_i_i:vec4<f32> = let %20
+    %22:f32 = load_vector_element %p_a_i_i, 0u
+    %23:f32 = access %l_a, 0i, 0i, 0u
+    %24:f32 = add %22, %23
+    %25:f32 = access %l_a_i, 0i, 0u
+    %26:f32 = add %24, %25
+    %27:f32 = access %l_a_i_i, 0u
+    %28:f32 = add %26, %27
+    store %s, %28
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat2x4_f32/static_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat2x4_f32/static_index_via_ptr.wgsl.expected.ir.msl
index c1506df..a23ad8f 100644
--- a/test/tint/buffer/uniform/std140/array/mat2x4_f32/static_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat2x4_f32/static_index_via_ptr.wgsl.expected.ir.msl
@@ -1,17 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %a:ptr<uniform, array<mat2x4<f32>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f32, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %p_a:ptr<uniform, array<mat2x4<f32>, 4>, read> = let %a
-    %p_a_2:ptr<uniform, mat2x4<f32>, read> = access %p_a, 2i
-    %p_a_2_1:ptr<uniform, vec4<f32>, read> = access %p_a_2, 1i
-    %l_a:array<mat2x4<f32>, 4> = load %p_a
-    %l_a_i:mat2x4<f32> = load %p_a_2
-    %l_a_i_i:vec4<f32> = load %p_a_2_1
+    %5:ptr<uniform, mat2x4<f32>, read> = access %p_a, 2i
+    %p_a_2:ptr<uniform, mat2x4<f32>, read> = let %5
+    %7:ptr<uniform, vec4<f32>, read> = access %p_a_2, 1i
+    %p_a_2_1:ptr<uniform, vec4<f32>, read> = let %7
+    %9:array<mat2x4<f32>, 4> = load %p_a
+    %l_a:array<mat2x4<f32>, 4> = let %9
+    %11:mat2x4<f32> = load %p_a_2
+    %l_a_i:mat2x4<f32> = let %11
+    %13:vec4<f32> = load %p_a_2_1
+    %l_a_i_i:vec4<f32> = let %13
+    %15:f32 = load_vector_element %p_a_2_1, 0u
+    %16:f32 = access %l_a, 0i, 0i, 0u
+    %17:f32 = add %15, %16
+    %18:f32 = access %l_a_i, 0i, 0u
+    %19:f32 = add %17, %18
+    %20:f32 = access %l_a_i_i, 0u
+    %21:f32 = add %19, %20
+    store %s, %21
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat2x4_f32/to_builtin.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat2x4_f32/to_builtin.wgsl.expected.ir.msl
index 0be87f4..5cf3e84 100644
--- a/test/tint/buffer/uniform/std140/array/mat2x4_f32/to_builtin.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat2x4_f32/to_builtin.wgsl.expected.ir.msl
@@ -1,23 +1,34 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat2x4<f32>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f32, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %3:ptr<uniform, mat2x4<f32>, read> = access %u, 2i
-    %4:mat2x4<f32> = load %3
-    %t:mat4x2<f32> = transpose %4
-    %6:ptr<uniform, vec4<f32>, read> = access %u, 0i, 1i
-    %7:vec4<f32> = load %6
-    %8:vec4<f32> = swizzle %7, ywxz
-    %l:f32 = length %8
-    %10:ptr<uniform, vec4<f32>, read> = access %u, 0i, 1i
-    %11:vec4<f32> = load %10
-    %12:vec4<f32> = swizzle %11, ywxz
-    %13:f32 = access %12, 0u
-    %a:f32 = abs %13
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %4:ptr<uniform, mat2x4<f32>, read> = access %u, 2i
+    %5:mat2x4<f32> = load %4
+    %6:mat4x2<f32> = transpose %5
+    %t:mat4x2<f32> = let %6
+    %8:ptr<uniform, vec4<f32>, read> = access %u, 0i, 1i
+    %9:vec4<f32> = load %8
+    %10:vec4<f32> = swizzle %9, ywxz
+    %11:f32 = length %10
+    %l:f32 = let %11
+    %13:ptr<uniform, vec4<f32>, read> = access %u, 0i, 1i
+    %14:vec4<f32> = load %13
+    %15:vec4<f32> = swizzle %14, ywxz
+    %16:f32 = access %15, 0u
+    %17:f32 = abs %16
+    %a:f32 = let %17
+    %19:f32 = access %t, 0i, 0u
+    %20:f32 = construct %l
+    %21:f32 = add %19, %20
+    %22:f32 = let %21
+    %23:f32 = construct %a
+    %24:f32 = add %22, %23
+    store %s, %24
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat2x4_f32/to_fn.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat2x4_f32/to_fn.wgsl.expected.ir.msl
index f5af612..520f113 100644
--- a/test/tint/buffer/uniform/std140/array/mat2x4_f32/to_fn.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat2x4_f32/to_fn.wgsl.expected.ir.msl
@@ -1,45 +1,56 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat2x4<f32>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f32, read_write> = var @binding_point(0, 1)
 }
 
-%a = func(%a_1:array<mat2x4<f32>, 4>):void -> %b2 {  # %a_1: 'a'
-  %b2 = block {
-    ret
+%a = func(%a_1:array<mat2x4<f32>, 4>):f32 {  # %a_1: 'a'
+  $B2: {
+    %5:f32 = access %a_1, 0i, 0i, 0u
+    ret %5
   }
 }
-%b = func(%m:mat2x4<f32>):void -> %b3 {
-  %b3 = block {
-    ret
+%b = func(%m:mat2x4<f32>):f32 {
+  $B3: {
+    %8:f32 = access %m, 0i, 0u
+    ret %8
   }
 }
-%c = func(%v:vec4<f32>):void -> %b4 {
-  %b4 = block {
-    ret
+%c = func(%v:vec4<f32>):f32 {
+  $B4: {
+    %11:f32 = access %v, 0u
+    ret %11
   }
 }
-%d = func(%f:f32):void -> %b5 {
-  %b5 = block {
-    ret
+%d = func(%f:f32):f32 {
+  $B5: {
+    ret %f
   }
 }
-%f_1 = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {  # %f_1: 'f'
-  %b6 = block {
-    %11:array<mat2x4<f32>, 4> = load %u
-    %12:void = call %a, %11
-    %13:ptr<uniform, mat2x4<f32>, read> = access %u, 1i
-    %14:mat2x4<f32> = load %13
-    %15:void = call %b, %14
-    %16:ptr<uniform, vec4<f32>, read> = access %u, 1i, 0i
-    %17:vec4<f32> = load %16
-    %18:vec4<f32> = swizzle %17, ywxz
-    %19:void = call %c, %18
-    %20:ptr<uniform, vec4<f32>, read> = access %u, 1i, 0i
-    %21:vec4<f32> = load %20
-    %22:vec4<f32> = swizzle %21, ywxz
-    %23:f32 = access %22, 0u
-    %24:void = call %d, %23
+%f_1 = @compute @workgroup_size(1, 1, 1) func():void {  # %f_1: 'f'
+  $B6: {
+    %15:array<mat2x4<f32>, 4> = load %u
+    %16:f32 = call %a, %15
+    %17:f32 = let %16
+    %18:ptr<uniform, mat2x4<f32>, read> = access %u, 1i
+    %19:mat2x4<f32> = load %18
+    %20:f32 = call %b, %19
+    %21:f32 = add %17, %20
+    %22:f32 = let %21
+    %23:ptr<uniform, vec4<f32>, read> = access %u, 1i, 0i
+    %24:vec4<f32> = load %23
+    %25:vec4<f32> = swizzle %24, ywxz
+    %26:f32 = call %c, %25
+    %27:f32 = add %22, %26
+    %28:f32 = let %27
+    %29:ptr<uniform, vec4<f32>, read> = access %u, 1i, 0i
+    %30:vec4<f32> = load %29
+    %31:vec4<f32> = swizzle %30, ywxz
+    %32:f32 = access %31, 0u
+    %33:f32 = call %d, %32
+    %34:f32 = add %28, %33
+    store %s, %34
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat2x4_f32/to_private.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat2x4_f32/to_private.wgsl.expected.ir.msl
index cda2a20..333936e 100644
--- a/test/tint/buffer/uniform/std140/array/mat2x4_f32/to_private.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat2x4_f32/to_private.wgsl.expected.ir.msl
@@ -1,27 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat2x4<f32>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f32, read_write> = var @binding_point(0, 1)
   %p:ptr<private, array<mat2x4<f32>, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:array<mat2x4<f32>, 4> = load %u
-    store %p, %4
-    %5:ptr<private, mat2x4<f32>, read_write> = access %p, 1i
-    %6:ptr<uniform, mat2x4<f32>, read> = access %u, 2i
-    %7:mat2x4<f32> = load %6
-    store %5, %7
-    %8:ptr<private, vec4<f32>, read_write> = access %p, 1i, 0i
-    %9:ptr<uniform, vec4<f32>, read> = access %u, 0i, 1i
-    %10:vec4<f32> = load %9
-    %11:vec4<f32> = swizzle %10, ywxz
-    store %8, %11
-    %12:ptr<private, vec4<f32>, read_write> = access %p, 1i, 0i
-    %13:ptr<uniform, vec4<f32>, read> = access %u, 0i, 1i
-    %14:f32 = load_vector_element %13, 0u
-    store_vector_element %12, 0u, %14
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %5:array<mat2x4<f32>, 4> = load %u
+    store %p, %5
+    %6:ptr<private, mat2x4<f32>, read_write> = access %p, 1i
+    %7:ptr<uniform, mat2x4<f32>, read> = access %u, 2i
+    %8:mat2x4<f32> = load %7
+    store %6, %8
+    %9:ptr<private, vec4<f32>, read_write> = access %p, 1i, 0i
+    %10:ptr<uniform, vec4<f32>, read> = access %u, 0i, 1i
+    %11:vec4<f32> = load %10
+    %12:vec4<f32> = swizzle %11, ywxz
+    store %9, %12
+    %13:ptr<private, vec4<f32>, read_write> = access %p, 1i, 0i
+    %14:ptr<uniform, vec4<f32>, read> = access %u, 0i, 1i
+    %15:f32 = load_vector_element %14, 0u
+    store_vector_element %13, 0u, %15
+    %16:ptr<private, vec4<f32>, read_write> = access %p, 1i, 0i
+    %17:f32 = load_vector_element %16, 0u
+    store %s, %17
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat2x4_f32/to_storage.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat2x4_f32/to_storage.wgsl.expected.ir.msl
index 61fe75d..8ed1610 100644
--- a/test/tint/buffer/uniform/std140/array/mat2x4_f32/to_storage.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat2x4_f32/to_storage.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat2x4<f32>, 4>, read> = var @binding_point(0, 0)
   %s:ptr<storage, array<mat2x4<f32>, 4>, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:array<mat2x4<f32>, 4> = load %u
     store %s, %4
     %5:ptr<storage, mat2x4<f32>, read_write> = access %s, 1i
diff --git a/test/tint/buffer/uniform/std140/array/mat2x4_f32/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat2x4_f32/to_workgroup.wgsl.expected.ir.msl
index 4c1b8cc..03ccbc8 100644
--- a/test/tint/buffer/uniform/std140/array/mat2x4_f32/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat2x4_f32/to_workgroup.wgsl.expected.ir.msl
@@ -1,27 +1,48 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat2x4<f32>, 4>, read> = var @binding_point(0, 0)
   %w:ptr<workgroup, array<mat2x4<f32>, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:array<mat2x4<f32>, 4> = load %u
-    store %w, %4
-    %5:ptr<workgroup, mat2x4<f32>, read_write> = access %w, 1i
-    %6:ptr<uniform, mat2x4<f32>, read> = access %u, 2i
-    %7:mat2x4<f32> = load %6
-    store %5, %7
-    %8:ptr<workgroup, vec4<f32>, read_write> = access %w, 1i, 0i
-    %9:ptr<uniform, vec4<f32>, read> = access %u, 0i, 1i
-    %10:vec4<f32> = load %9
-    %11:vec4<f32> = swizzle %10, ywxz
-    store %8, %11
-    %12:ptr<workgroup, vec4<f32>, read_write> = access %w, 1i, 0i
-    %13:ptr<uniform, vec4<f32>, read> = access %u, 0i, 1i
-    %14:f32 = load_vector_element %13, 0u
-    store_vector_element %12, 0u, %14
+%f = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B2: {
+    loop [i: $B3, b: $B4, c: $B5] {  # loop_1
+      $B3: {  # initializer
+        next_iteration %tint_local_index  # -> $B4
+      }
+      $B4 (%idx:u32): {  # body
+        %6:bool = gte %idx, 4u
+        if %6 [t: $B6] {  # if_1
+          $B6: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %7:ptr<workgroup, mat2x4<f32>, read_write> = access %w, %idx
+        store %7, mat2x4<f32>(vec4<f32>(0.0f))
+        continue  # -> $B5
+      }
+      $B5: {  # continuing
+        %8:u32 = add %idx, 1u
+        next_iteration %8  # -> $B4
+      }
+    }
+    %9:void = msl.threadgroup_barrier 4u
+    %10:array<mat2x4<f32>, 4> = load %u
+    store %w, %10
+    %11:ptr<workgroup, mat2x4<f32>, read_write> = access %w, 1i
+    %12:ptr<uniform, mat2x4<f32>, read> = access %u, 2i
+    %13:mat2x4<f32> = load %12
+    store %11, %13
+    %14:ptr<workgroup, vec4<f32>, read_write> = access %w, 1i, 0i
+    %15:ptr<uniform, vec4<f32>, read> = access %u, 0i, 1i
+    %16:vec4<f32> = load %15
+    %17:vec4<f32> = swizzle %16, ywxz
+    store %14, %17
+    %18:ptr<workgroup, vec4<f32>, read_write> = access %w, 1i, 0i
+    %19:ptr<uniform, vec4<f32>, read> = access %u, 0i, 1i
+    %20:f32 = load_vector_element %19, 0u
+    store_vector_element %18, 0u, %20
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat3x3_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat3x3_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
index 5793fcb..f2c7e12 100644
--- a/test/tint/buffer/uniform/std140/array/mat3x3_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat3x3_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
@@ -1,29 +1,43 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %a:ptr<uniform, array<mat3x3<f32>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f32, read_write> = var @binding_point(0, 1)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
-    %4:i32 = load %counter
-    %5:i32 = add %4, 1i
-    store %counter, %5
-    %6:i32 = load %counter
-    ret %6
+%i = func():i32 {
+  $B2: {
+    %5:i32 = load %counter
+    %6:i32 = add %5, 1i
+    store %counter, %6
+    %7:i32 = load %counter
+    ret %7
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_a:ptr<uniform, array<mat3x3<f32>, 4>, read> = let %a
-    %9:i32 = call %i
-    %p_a_i:ptr<uniform, mat3x3<f32>, read> = access %p_a, %9
-    %11:i32 = call %i
-    %p_a_i_i:ptr<uniform, vec3<f32>, read> = access %p_a_i, %11
-    %l_a:array<mat3x3<f32>, 4> = load %p_a
-    %l_a_i:mat3x3<f32> = load %p_a_i
-    %l_a_i_i:vec3<f32> = load %p_a_i_i
+    %10:i32 = call %i
+    %11:ptr<uniform, mat3x3<f32>, read> = access %p_a, %10
+    %p_a_i:ptr<uniform, mat3x3<f32>, read> = let %11
+    %13:i32 = call %i
+    %14:ptr<uniform, vec3<f32>, read> = access %p_a_i, %13
+    %p_a_i_i:ptr<uniform, vec3<f32>, read> = let %14
+    %16:array<mat3x3<f32>, 4> = load %p_a
+    %l_a:array<mat3x3<f32>, 4> = let %16
+    %18:mat3x3<f32> = load %p_a_i
+    %l_a_i:mat3x3<f32> = let %18
+    %20:vec3<f32> = load %p_a_i_i
+    %l_a_i_i:vec3<f32> = let %20
+    %22:f32 = load_vector_element %p_a_i_i, 0u
+    %23:f32 = access %l_a, 0i, 0i, 0u
+    %24:f32 = add %22, %23
+    %25:f32 = access %l_a_i, 0i, 0u
+    %26:f32 = add %24, %25
+    %27:f32 = access %l_a_i_i, 0u
+    %28:f32 = add %26, %27
+    store %s, %28
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat3x3_f32/static_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat3x3_f32/static_index_via_ptr.wgsl.expected.ir.msl
index 74fb232..4c5cab1 100644
--- a/test/tint/buffer/uniform/std140/array/mat3x3_f32/static_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat3x3_f32/static_index_via_ptr.wgsl.expected.ir.msl
@@ -1,17 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %a:ptr<uniform, array<mat3x3<f32>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f32, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %p_a:ptr<uniform, array<mat3x3<f32>, 4>, read> = let %a
-    %p_a_2:ptr<uniform, mat3x3<f32>, read> = access %p_a, 2i
-    %p_a_2_1:ptr<uniform, vec3<f32>, read> = access %p_a_2, 1i
-    %l_a:array<mat3x3<f32>, 4> = load %p_a
-    %l_a_i:mat3x3<f32> = load %p_a_2
-    %l_a_i_i:vec3<f32> = load %p_a_2_1
+    %5:ptr<uniform, mat3x3<f32>, read> = access %p_a, 2i
+    %p_a_2:ptr<uniform, mat3x3<f32>, read> = let %5
+    %7:ptr<uniform, vec3<f32>, read> = access %p_a_2, 1i
+    %p_a_2_1:ptr<uniform, vec3<f32>, read> = let %7
+    %9:array<mat3x3<f32>, 4> = load %p_a
+    %l_a:array<mat3x3<f32>, 4> = let %9
+    %11:mat3x3<f32> = load %p_a_2
+    %l_a_i:mat3x3<f32> = let %11
+    %13:vec3<f32> = load %p_a_2_1
+    %l_a_i_i:vec3<f32> = let %13
+    %15:f32 = load_vector_element %p_a_2_1, 0u
+    %16:f32 = access %l_a, 0i, 0i, 0u
+    %17:f32 = add %15, %16
+    %18:f32 = access %l_a_i, 0i, 0u
+    %19:f32 = add %17, %18
+    %20:f32 = access %l_a_i_i, 0u
+    %21:f32 = add %19, %20
+    store %s, %21
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat3x3_f32/to_builtin.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat3x3_f32/to_builtin.wgsl.expected.ir.msl
index 26bc440..246d346 100644
--- a/test/tint/buffer/uniform/std140/array/mat3x3_f32/to_builtin.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat3x3_f32/to_builtin.wgsl.expected.ir.msl
@@ -1,23 +1,34 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat3x3<f32>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f32, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %3:ptr<uniform, mat3x3<f32>, read> = access %u, 2i
-    %4:mat3x3<f32> = load %3
-    %t:mat3x3<f32> = transpose %4
-    %6:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1i
-    %7:vec3<f32> = load %6
-    %8:vec3<f32> = swizzle %7, zxy
-    %l:f32 = length %8
-    %10:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1i
-    %11:vec3<f32> = load %10
-    %12:vec3<f32> = swizzle %11, zxy
-    %13:f32 = access %12, 0u
-    %a:f32 = abs %13
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %4:ptr<uniform, mat3x3<f32>, read> = access %u, 2i
+    %5:mat3x3<f32> = load %4
+    %6:mat3x3<f32> = transpose %5
+    %t:mat3x3<f32> = let %6
+    %8:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1i
+    %9:vec3<f32> = load %8
+    %10:vec3<f32> = swizzle %9, zxy
+    %11:f32 = length %10
+    %l:f32 = let %11
+    %13:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1i
+    %14:vec3<f32> = load %13
+    %15:vec3<f32> = swizzle %14, zxy
+    %16:f32 = access %15, 0u
+    %17:f32 = abs %16
+    %a:f32 = let %17
+    %19:f32 = access %t, 0i, 0u
+    %20:f32 = construct %l
+    %21:f32 = add %19, %20
+    %22:f32 = let %21
+    %23:f32 = construct %a
+    %24:f32 = add %22, %23
+    store %s, %24
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat3x3_f32/to_fn.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat3x3_f32/to_fn.wgsl.expected.ir.msl
index eaffe25..0edee96 100644
--- a/test/tint/buffer/uniform/std140/array/mat3x3_f32/to_fn.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat3x3_f32/to_fn.wgsl.expected.ir.msl
@@ -1,45 +1,56 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat3x3<f32>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f32, read_write> = var @binding_point(0, 1)
 }
 
-%a = func(%a_1:array<mat3x3<f32>, 4>):void -> %b2 {  # %a_1: 'a'
-  %b2 = block {
-    ret
+%a = func(%a_1:array<mat3x3<f32>, 4>):f32 {  # %a_1: 'a'
+  $B2: {
+    %5:f32 = access %a_1, 0i, 0i, 0u
+    ret %5
   }
 }
-%b = func(%m:mat3x3<f32>):void -> %b3 {
-  %b3 = block {
-    ret
+%b = func(%m:mat3x3<f32>):f32 {
+  $B3: {
+    %8:f32 = access %m, 0i, 0u
+    ret %8
   }
 }
-%c = func(%v:vec3<f32>):void -> %b4 {
-  %b4 = block {
-    ret
+%c = func(%v:vec3<f32>):f32 {
+  $B4: {
+    %11:f32 = access %v, 0u
+    ret %11
   }
 }
-%d = func(%f:f32):void -> %b5 {
-  %b5 = block {
-    ret
+%d = func(%f:f32):f32 {
+  $B5: {
+    ret %f
   }
 }
-%f_1 = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {  # %f_1: 'f'
-  %b6 = block {
-    %11:array<mat3x3<f32>, 4> = load %u
-    %12:void = call %a, %11
-    %13:ptr<uniform, mat3x3<f32>, read> = access %u, 1i
-    %14:mat3x3<f32> = load %13
-    %15:void = call %b, %14
-    %16:ptr<uniform, vec3<f32>, read> = access %u, 1i, 0i
-    %17:vec3<f32> = load %16
-    %18:vec3<f32> = swizzle %17, zxy
-    %19:void = call %c, %18
-    %20:ptr<uniform, vec3<f32>, read> = access %u, 1i, 0i
-    %21:vec3<f32> = load %20
-    %22:vec3<f32> = swizzle %21, zxy
-    %23:f32 = access %22, 0u
-    %24:void = call %d, %23
+%f_1 = @compute @workgroup_size(1, 1, 1) func():void {  # %f_1: 'f'
+  $B6: {
+    %15:array<mat3x3<f32>, 4> = load %u
+    %16:f32 = call %a, %15
+    %17:f32 = let %16
+    %18:ptr<uniform, mat3x3<f32>, read> = access %u, 1i
+    %19:mat3x3<f32> = load %18
+    %20:f32 = call %b, %19
+    %21:f32 = add %17, %20
+    %22:f32 = let %21
+    %23:ptr<uniform, vec3<f32>, read> = access %u, 1i, 0i
+    %24:vec3<f32> = load %23
+    %25:vec3<f32> = swizzle %24, zxy
+    %26:f32 = call %c, %25
+    %27:f32 = add %22, %26
+    %28:f32 = let %27
+    %29:ptr<uniform, vec3<f32>, read> = access %u, 1i, 0i
+    %30:vec3<f32> = load %29
+    %31:vec3<f32> = swizzle %30, zxy
+    %32:f32 = access %31, 0u
+    %33:f32 = call %d, %32
+    %34:f32 = add %28, %33
+    store %s, %34
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat3x3_f32/to_private.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat3x3_f32/to_private.wgsl.expected.ir.msl
index e2df4b5..4091530 100644
--- a/test/tint/buffer/uniform/std140/array/mat3x3_f32/to_private.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat3x3_f32/to_private.wgsl.expected.ir.msl
@@ -1,27 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat3x3<f32>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f32, read_write> = var @binding_point(0, 1)
   %p:ptr<private, array<mat3x3<f32>, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:array<mat3x3<f32>, 4> = load %u
-    store %p, %4
-    %5:ptr<private, mat3x3<f32>, read_write> = access %p, 1i
-    %6:ptr<uniform, mat3x3<f32>, read> = access %u, 2i
-    %7:mat3x3<f32> = load %6
-    store %5, %7
-    %8:ptr<private, vec3<f32>, read_write> = access %p, 1i, 0i
-    %9:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1i
-    %10:vec3<f32> = load %9
-    %11:vec3<f32> = swizzle %10, zxy
-    store %8, %11
-    %12:ptr<private, vec3<f32>, read_write> = access %p, 1i, 0i
-    %13:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1i
-    %14:f32 = load_vector_element %13, 0u
-    store_vector_element %12, 0u, %14
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %5:array<mat3x3<f32>, 4> = load %u
+    store %p, %5
+    %6:ptr<private, mat3x3<f32>, read_write> = access %p, 1i
+    %7:ptr<uniform, mat3x3<f32>, read> = access %u, 2i
+    %8:mat3x3<f32> = load %7
+    store %6, %8
+    %9:ptr<private, vec3<f32>, read_write> = access %p, 1i, 0i
+    %10:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1i
+    %11:vec3<f32> = load %10
+    %12:vec3<f32> = swizzle %11, zxy
+    store %9, %12
+    %13:ptr<private, vec3<f32>, read_write> = access %p, 1i, 0i
+    %14:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1i
+    %15:f32 = load_vector_element %14, 0u
+    store_vector_element %13, 0u, %15
+    %16:ptr<private, vec3<f32>, read_write> = access %p, 1i, 0i
+    %17:f32 = load_vector_element %16, 0u
+    store %s, %17
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat3x3_f32/to_storage.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat3x3_f32/to_storage.wgsl.expected.ir.msl
index 4671971..ef57f20 100644
--- a/test/tint/buffer/uniform/std140/array/mat3x3_f32/to_storage.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat3x3_f32/to_storage.wgsl.expected.ir.msl
@@ -1,27 +1,67 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat3x3<f32>, 4>, read> = var @binding_point(0, 0)
   %s:ptr<storage, array<mat3x3<f32>, 4>, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:array<mat3x3<f32>, 4> = load %u
-    store %s, %4
-    %5:ptr<storage, mat3x3<f32>, read_write> = access %s, 1i
-    %6:ptr<uniform, mat3x3<f32>, read> = access %u, 2i
-    %7:mat3x3<f32> = load %6
-    store %5, %7
-    %8:ptr<storage, vec3<f32>, read_write> = access %s, 1i, 0i
-    %9:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1i
-    %10:vec3<f32> = load %9
-    %11:vec3<f32> = swizzle %10, zxy
-    store %8, %11
+    %5:void = call %tint_store_and_preserve_padding, %s, %4
+    %7:ptr<storage, mat3x3<f32>, read_write> = access %s, 1i
+    %8:ptr<uniform, mat3x3<f32>, read> = access %u, 2i
+    %9:mat3x3<f32> = load %8
+    %10:void = call %tint_store_and_preserve_padding_1, %7, %9
     %12:ptr<storage, vec3<f32>, read_write> = access %s, 1i, 0i
     %13:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1i
-    %14:f32 = load_vector_element %13, 0u
-    store_vector_element %12, 0u, %14
+    %14:vec3<f32> = load %13
+    %15:vec3<f32> = swizzle %14, zxy
+    store %12, %15
+    %16:ptr<storage, vec3<f32>, read_write> = access %s, 1i, 0i
+    %17:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1i
+    %18:f32 = load_vector_element %17, 0u
+    store_vector_element %16, 0u, %18
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, array<mat3x3<f32>, 4>, read_write>, %value_param:array<mat3x3<f32>, 4>):void {
+  $B3: {
+    loop [i: $B4, b: $B5, c: $B6] {  # loop_1
+      $B4: {  # initializer
+        next_iteration 0u  # -> $B5
+      }
+      $B5 (%idx:u32): {  # body
+        %22:bool = gte %idx, 4u
+        if %22 [t: $B7] {  # if_1
+          $B7: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %23:ptr<storage, mat3x3<f32>, read_write> = access %target, %idx
+        %24:mat3x3<f32> = access %value_param, %idx
+        %25:void = call %tint_store_and_preserve_padding_1, %23, %24
+        continue  # -> $B6
+      }
+      $B6: {  # continuing
+        %26:u32 = add %idx, 1u
+        next_iteration %26  # -> $B5
+      }
+    }
+    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'
+  $B8: {
+    %29:ptr<storage, vec3<f32>, read_write> = access %target_1, 0u
+    %30:vec3<f32> = access %value_param_1, 0u
+    store %29, %30
+    %31:ptr<storage, vec3<f32>, read_write> = access %target_1, 1u
+    %32:vec3<f32> = access %value_param_1, 1u
+    store %31, %32
+    %33:ptr<storage, vec3<f32>, read_write> = access %target_1, 2u
+    %34:vec3<f32> = access %value_param_1, 2u
+    store %33, %34
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat3x3_f32/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat3x3_f32/to_workgroup.wgsl.expected.ir.msl
index bc9640d..7581390 100644
--- a/test/tint/buffer/uniform/std140/array/mat3x3_f32/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat3x3_f32/to_workgroup.wgsl.expected.ir.msl
@@ -1,27 +1,48 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat3x3<f32>, 4>, read> = var @binding_point(0, 0)
   %w:ptr<workgroup, array<mat3x3<f32>, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:array<mat3x3<f32>, 4> = load %u
-    store %w, %4
-    %5:ptr<workgroup, mat3x3<f32>, read_write> = access %w, 1i
-    %6:ptr<uniform, mat3x3<f32>, read> = access %u, 2i
-    %7:mat3x3<f32> = load %6
-    store %5, %7
-    %8:ptr<workgroup, vec3<f32>, read_write> = access %w, 1i, 0i
-    %9:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1i
-    %10:vec3<f32> = load %9
-    %11:vec3<f32> = swizzle %10, zxy
-    store %8, %11
-    %12:ptr<workgroup, vec3<f32>, read_write> = access %w, 1i, 0i
-    %13:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1i
-    %14:f32 = load_vector_element %13, 0u
-    store_vector_element %12, 0u, %14
+%f = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B2: {
+    loop [i: $B3, b: $B4, c: $B5] {  # loop_1
+      $B3: {  # initializer
+        next_iteration %tint_local_index  # -> $B4
+      }
+      $B4 (%idx:u32): {  # body
+        %6:bool = gte %idx, 4u
+        if %6 [t: $B6] {  # if_1
+          $B6: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %7:ptr<workgroup, mat3x3<f32>, read_write> = access %w, %idx
+        store %7, mat3x3<f32>(vec3<f32>(0.0f))
+        continue  # -> $B5
+      }
+      $B5: {  # continuing
+        %8:u32 = add %idx, 1u
+        next_iteration %8  # -> $B4
+      }
+    }
+    %9:void = msl.threadgroup_barrier 4u
+    %10:array<mat3x3<f32>, 4> = load %u
+    store %w, %10
+    %11:ptr<workgroup, mat3x3<f32>, read_write> = access %w, 1i
+    %12:ptr<uniform, mat3x3<f32>, read> = access %u, 2i
+    %13:mat3x3<f32> = load %12
+    store %11, %13
+    %14:ptr<workgroup, vec3<f32>, read_write> = access %w, 1i, 0i
+    %15:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1i
+    %16:vec3<f32> = load %15
+    %17:vec3<f32> = swizzle %16, zxy
+    store %14, %17
+    %18:ptr<workgroup, vec3<f32>, read_write> = access %w, 1i, 0i
+    %19:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1i
+    %20:f32 = load_vector_element %19, 0u
+    store_vector_element %18, 0u, %20
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat3x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat3x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
index 6c5a57f..6ca088d 100644
--- a/test/tint/buffer/uniform/std140/array/mat3x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat3x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
@@ -1,29 +1,43 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %a:ptr<uniform, array<mat3x4<f32>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f32, read_write> = var @binding_point(0, 1)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
-    %4:i32 = load %counter
-    %5:i32 = add %4, 1i
-    store %counter, %5
-    %6:i32 = load %counter
-    ret %6
+%i = func():i32 {
+  $B2: {
+    %5:i32 = load %counter
+    %6:i32 = add %5, 1i
+    store %counter, %6
+    %7:i32 = load %counter
+    ret %7
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_a:ptr<uniform, array<mat3x4<f32>, 4>, read> = let %a
-    %9:i32 = call %i
-    %p_a_i:ptr<uniform, mat3x4<f32>, read> = access %p_a, %9
-    %11:i32 = call %i
-    %p_a_i_i:ptr<uniform, vec4<f32>, read> = access %p_a_i, %11
-    %l_a:array<mat3x4<f32>, 4> = load %p_a
-    %l_a_i:mat3x4<f32> = load %p_a_i
-    %l_a_i_i:vec4<f32> = load %p_a_i_i
+    %10:i32 = call %i
+    %11:ptr<uniform, mat3x4<f32>, read> = access %p_a, %10
+    %p_a_i:ptr<uniform, mat3x4<f32>, read> = let %11
+    %13:i32 = call %i
+    %14:ptr<uniform, vec4<f32>, read> = access %p_a_i, %13
+    %p_a_i_i:ptr<uniform, vec4<f32>, read> = let %14
+    %16:array<mat3x4<f32>, 4> = load %p_a
+    %l_a:array<mat3x4<f32>, 4> = let %16
+    %18:mat3x4<f32> = load %p_a_i
+    %l_a_i:mat3x4<f32> = let %18
+    %20:vec4<f32> = load %p_a_i_i
+    %l_a_i_i:vec4<f32> = let %20
+    %22:f32 = load_vector_element %p_a_i_i, 0u
+    %23:f32 = access %l_a, 0i, 0i, 0u
+    %24:f32 = add %22, %23
+    %25:f32 = access %l_a_i, 0i, 0u
+    %26:f32 = add %24, %25
+    %27:f32 = access %l_a_i_i, 0u
+    %28:f32 = add %26, %27
+    store %s, %28
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat3x4_f32/static_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat3x4_f32/static_index_via_ptr.wgsl.expected.ir.msl
index 96a9953..6446800 100644
--- a/test/tint/buffer/uniform/std140/array/mat3x4_f32/static_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat3x4_f32/static_index_via_ptr.wgsl.expected.ir.msl
@@ -1,17 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %a:ptr<uniform, array<mat3x4<f32>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f32, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %p_a:ptr<uniform, array<mat3x4<f32>, 4>, read> = let %a
-    %p_a_2:ptr<uniform, mat3x4<f32>, read> = access %p_a, 2i
-    %p_a_2_1:ptr<uniform, vec4<f32>, read> = access %p_a_2, 1i
-    %l_a:array<mat3x4<f32>, 4> = load %p_a
-    %l_a_i:mat3x4<f32> = load %p_a_2
-    %l_a_i_i:vec4<f32> = load %p_a_2_1
+    %5:ptr<uniform, mat3x4<f32>, read> = access %p_a, 2i
+    %p_a_2:ptr<uniform, mat3x4<f32>, read> = let %5
+    %7:ptr<uniform, vec4<f32>, read> = access %p_a_2, 1i
+    %p_a_2_1:ptr<uniform, vec4<f32>, read> = let %7
+    %9:array<mat3x4<f32>, 4> = load %p_a
+    %l_a:array<mat3x4<f32>, 4> = let %9
+    %11:mat3x4<f32> = load %p_a_2
+    %l_a_i:mat3x4<f32> = let %11
+    %13:vec4<f32> = load %p_a_2_1
+    %l_a_i_i:vec4<f32> = let %13
+    %15:f32 = load_vector_element %p_a_2_1, 0u
+    %16:f32 = access %l_a, 0i, 0i, 0u
+    %17:f32 = add %15, %16
+    %18:f32 = access %l_a_i, 0i, 0u
+    %19:f32 = add %17, %18
+    %20:f32 = access %l_a_i_i, 0u
+    %21:f32 = add %19, %20
+    store %s, %21
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat3x4_f32/to_builtin.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat3x4_f32/to_builtin.wgsl.expected.ir.msl
index 3d0daa2..270bf40 100644
--- a/test/tint/buffer/uniform/std140/array/mat3x4_f32/to_builtin.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat3x4_f32/to_builtin.wgsl.expected.ir.msl
@@ -1,23 +1,34 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat3x4<f32>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f32, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %3:ptr<uniform, mat3x4<f32>, read> = access %u, 2i
-    %4:mat3x4<f32> = load %3
-    %t:mat4x3<f32> = transpose %4
-    %6:ptr<uniform, vec4<f32>, read> = access %u, 0i, 1i
-    %7:vec4<f32> = load %6
-    %8:vec4<f32> = swizzle %7, ywxz
-    %l:f32 = length %8
-    %10:ptr<uniform, vec4<f32>, read> = access %u, 0i, 1i
-    %11:vec4<f32> = load %10
-    %12:vec4<f32> = swizzle %11, ywxz
-    %13:f32 = access %12, 0u
-    %a:f32 = abs %13
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %4:ptr<uniform, mat3x4<f32>, read> = access %u, 2i
+    %5:mat3x4<f32> = load %4
+    %6:mat4x3<f32> = transpose %5
+    %t:mat4x3<f32> = let %6
+    %8:ptr<uniform, vec4<f32>, read> = access %u, 0i, 1i
+    %9:vec4<f32> = load %8
+    %10:vec4<f32> = swizzle %9, ywxz
+    %11:f32 = length %10
+    %l:f32 = let %11
+    %13:ptr<uniform, vec4<f32>, read> = access %u, 0i, 1i
+    %14:vec4<f32> = load %13
+    %15:vec4<f32> = swizzle %14, ywxz
+    %16:f32 = access %15, 0u
+    %17:f32 = abs %16
+    %a:f32 = let %17
+    %19:f32 = access %t, 0i, 0u
+    %20:f32 = construct %l
+    %21:f32 = add %19, %20
+    %22:f32 = let %21
+    %23:f32 = construct %a
+    %24:f32 = add %22, %23
+    store %s, %24
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat3x4_f32/to_fn.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat3x4_f32/to_fn.wgsl.expected.ir.msl
index b760ded..90adb9e 100644
--- a/test/tint/buffer/uniform/std140/array/mat3x4_f32/to_fn.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat3x4_f32/to_fn.wgsl.expected.ir.msl
@@ -1,45 +1,56 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat3x4<f32>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f32, read_write> = var @binding_point(0, 1)
 }
 
-%a = func(%a_1:array<mat3x4<f32>, 4>):void -> %b2 {  # %a_1: 'a'
-  %b2 = block {
-    ret
+%a = func(%a_1:array<mat3x4<f32>, 4>):f32 {  # %a_1: 'a'
+  $B2: {
+    %5:f32 = access %a_1, 0i, 0i, 0u
+    ret %5
   }
 }
-%b = func(%m:mat3x4<f32>):void -> %b3 {
-  %b3 = block {
-    ret
+%b = func(%m:mat3x4<f32>):f32 {
+  $B3: {
+    %8:f32 = access %m, 0i, 0u
+    ret %8
   }
 }
-%c = func(%v:vec4<f32>):void -> %b4 {
-  %b4 = block {
-    ret
+%c = func(%v:vec4<f32>):f32 {
+  $B4: {
+    %11:f32 = access %v, 0u
+    ret %11
   }
 }
-%d = func(%f:f32):void -> %b5 {
-  %b5 = block {
-    ret
+%d = func(%f:f32):f32 {
+  $B5: {
+    ret %f
   }
 }
-%f_1 = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {  # %f_1: 'f'
-  %b6 = block {
-    %11:array<mat3x4<f32>, 4> = load %u
-    %12:void = call %a, %11
-    %13:ptr<uniform, mat3x4<f32>, read> = access %u, 1i
-    %14:mat3x4<f32> = load %13
-    %15:void = call %b, %14
-    %16:ptr<uniform, vec4<f32>, read> = access %u, 1i, 0i
-    %17:vec4<f32> = load %16
-    %18:vec4<f32> = swizzle %17, ywxz
-    %19:void = call %c, %18
-    %20:ptr<uniform, vec4<f32>, read> = access %u, 1i, 0i
-    %21:vec4<f32> = load %20
-    %22:vec4<f32> = swizzle %21, ywxz
-    %23:f32 = access %22, 0u
-    %24:void = call %d, %23
+%f_1 = @compute @workgroup_size(1, 1, 1) func():void {  # %f_1: 'f'
+  $B6: {
+    %15:array<mat3x4<f32>, 4> = load %u
+    %16:f32 = call %a, %15
+    %17:f32 = let %16
+    %18:ptr<uniform, mat3x4<f32>, read> = access %u, 1i
+    %19:mat3x4<f32> = load %18
+    %20:f32 = call %b, %19
+    %21:f32 = add %17, %20
+    %22:f32 = let %21
+    %23:ptr<uniform, vec4<f32>, read> = access %u, 1i, 0i
+    %24:vec4<f32> = load %23
+    %25:vec4<f32> = swizzle %24, ywxz
+    %26:f32 = call %c, %25
+    %27:f32 = add %22, %26
+    %28:f32 = let %27
+    %29:ptr<uniform, vec4<f32>, read> = access %u, 1i, 0i
+    %30:vec4<f32> = load %29
+    %31:vec4<f32> = swizzle %30, ywxz
+    %32:f32 = access %31, 0u
+    %33:f32 = call %d, %32
+    %34:f32 = add %28, %33
+    store %s, %34
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat3x4_f32/to_private.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat3x4_f32/to_private.wgsl.expected.ir.msl
index 6391b35..99f53ef 100644
--- a/test/tint/buffer/uniform/std140/array/mat3x4_f32/to_private.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat3x4_f32/to_private.wgsl.expected.ir.msl
@@ -1,27 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat3x4<f32>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f32, read_write> = var @binding_point(0, 1)
   %p:ptr<private, array<mat3x4<f32>, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:array<mat3x4<f32>, 4> = load %u
-    store %p, %4
-    %5:ptr<private, mat3x4<f32>, read_write> = access %p, 1i
-    %6:ptr<uniform, mat3x4<f32>, read> = access %u, 2i
-    %7:mat3x4<f32> = load %6
-    store %5, %7
-    %8:ptr<private, vec4<f32>, read_write> = access %p, 1i, 0i
-    %9:ptr<uniform, vec4<f32>, read> = access %u, 0i, 1i
-    %10:vec4<f32> = load %9
-    %11:vec4<f32> = swizzle %10, ywxz
-    store %8, %11
-    %12:ptr<private, vec4<f32>, read_write> = access %p, 1i, 0i
-    %13:ptr<uniform, vec4<f32>, read> = access %u, 0i, 1i
-    %14:f32 = load_vector_element %13, 0u
-    store_vector_element %12, 0u, %14
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %5:array<mat3x4<f32>, 4> = load %u
+    store %p, %5
+    %6:ptr<private, mat3x4<f32>, read_write> = access %p, 1i
+    %7:ptr<uniform, mat3x4<f32>, read> = access %u, 2i
+    %8:mat3x4<f32> = load %7
+    store %6, %8
+    %9:ptr<private, vec4<f32>, read_write> = access %p, 1i, 0i
+    %10:ptr<uniform, vec4<f32>, read> = access %u, 0i, 1i
+    %11:vec4<f32> = load %10
+    %12:vec4<f32> = swizzle %11, ywxz
+    store %9, %12
+    %13:ptr<private, vec4<f32>, read_write> = access %p, 1i, 0i
+    %14:ptr<uniform, vec4<f32>, read> = access %u, 0i, 1i
+    %15:f32 = load_vector_element %14, 0u
+    store_vector_element %13, 0u, %15
+    %16:ptr<private, vec4<f32>, read_write> = access %p, 1i, 0i
+    %17:f32 = load_vector_element %16, 0u
+    store %s, %17
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat3x4_f32/to_storage.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat3x4_f32/to_storage.wgsl.expected.ir.msl
index bc2a2f6..ce3ff04 100644
--- a/test/tint/buffer/uniform/std140/array/mat3x4_f32/to_storage.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat3x4_f32/to_storage.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat3x4<f32>, 4>, read> = var @binding_point(0, 0)
   %s:ptr<storage, array<mat3x4<f32>, 4>, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:array<mat3x4<f32>, 4> = load %u
     store %s, %4
     %5:ptr<storage, mat3x4<f32>, read_write> = access %s, 1i
diff --git a/test/tint/buffer/uniform/std140/array/mat3x4_f32/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat3x4_f32/to_workgroup.wgsl.expected.ir.msl
index cd658aa..247c618 100644
--- a/test/tint/buffer/uniform/std140/array/mat3x4_f32/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat3x4_f32/to_workgroup.wgsl.expected.ir.msl
@@ -1,27 +1,48 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat3x4<f32>, 4>, read> = var @binding_point(0, 0)
   %w:ptr<workgroup, array<mat3x4<f32>, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:array<mat3x4<f32>, 4> = load %u
-    store %w, %4
-    %5:ptr<workgroup, mat3x4<f32>, read_write> = access %w, 1i
-    %6:ptr<uniform, mat3x4<f32>, read> = access %u, 2i
-    %7:mat3x4<f32> = load %6
-    store %5, %7
-    %8:ptr<workgroup, vec4<f32>, read_write> = access %w, 1i, 0i
-    %9:ptr<uniform, vec4<f32>, read> = access %u, 0i, 1i
-    %10:vec4<f32> = load %9
-    %11:vec4<f32> = swizzle %10, ywxz
-    store %8, %11
-    %12:ptr<workgroup, vec4<f32>, read_write> = access %w, 1i, 0i
-    %13:ptr<uniform, vec4<f32>, read> = access %u, 0i, 1i
-    %14:f32 = load_vector_element %13, 0u
-    store_vector_element %12, 0u, %14
+%f = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B2: {
+    loop [i: $B3, b: $B4, c: $B5] {  # loop_1
+      $B3: {  # initializer
+        next_iteration %tint_local_index  # -> $B4
+      }
+      $B4 (%idx:u32): {  # body
+        %6:bool = gte %idx, 4u
+        if %6 [t: $B6] {  # if_1
+          $B6: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %7:ptr<workgroup, mat3x4<f32>, read_write> = access %w, %idx
+        store %7, mat3x4<f32>(vec4<f32>(0.0f))
+        continue  # -> $B5
+      }
+      $B5: {  # continuing
+        %8:u32 = add %idx, 1u
+        next_iteration %8  # -> $B4
+      }
+    }
+    %9:void = msl.threadgroup_barrier 4u
+    %10:array<mat3x4<f32>, 4> = load %u
+    store %w, %10
+    %11:ptr<workgroup, mat3x4<f32>, read_write> = access %w, 1i
+    %12:ptr<uniform, mat3x4<f32>, read> = access %u, 2i
+    %13:mat3x4<f32> = load %12
+    store %11, %13
+    %14:ptr<workgroup, vec4<f32>, read_write> = access %w, 1i, 0i
+    %15:ptr<uniform, vec4<f32>, read> = access %u, 0i, 1i
+    %16:vec4<f32> = load %15
+    %17:vec4<f32> = swizzle %16, ywxz
+    store %14, %17
+    %18:ptr<workgroup, vec4<f32>, read_write> = access %w, 1i, 0i
+    %19:ptr<uniform, vec4<f32>, read> = access %u, 0i, 1i
+    %20:f32 = load_vector_element %19, 0u
+    store_vector_element %18, 0u, %20
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat4x2_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat4x2_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
index df5682c..3eb259d 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x2_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat4x2_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
@@ -1,29 +1,43 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %a:ptr<uniform, array<mat4x2<f16>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f16, read_write> = var @binding_point(0, 1)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
-    %4:i32 = load %counter
-    %5:i32 = add %4, 1i
-    store %counter, %5
-    %6:i32 = load %counter
-    ret %6
+%i = func():i32 {
+  $B2: {
+    %5:i32 = load %counter
+    %6:i32 = add %5, 1i
+    store %counter, %6
+    %7:i32 = load %counter
+    ret %7
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_a:ptr<uniform, array<mat4x2<f16>, 4>, read> = let %a
-    %9:i32 = call %i
-    %p_a_i:ptr<uniform, mat4x2<f16>, read> = access %p_a, %9
-    %11:i32 = call %i
-    %p_a_i_i:ptr<uniform, vec2<f16>, read> = access %p_a_i, %11
-    %l_a:array<mat4x2<f16>, 4> = load %p_a
-    %l_a_i:mat4x2<f16> = load %p_a_i
-    %l_a_i_i:vec2<f16> = load %p_a_i_i
+    %10:i32 = call %i
+    %11:ptr<uniform, mat4x2<f16>, read> = access %p_a, %10
+    %p_a_i:ptr<uniform, mat4x2<f16>, read> = let %11
+    %13:i32 = call %i
+    %14:ptr<uniform, vec2<f16>, read> = access %p_a_i, %13
+    %p_a_i_i:ptr<uniform, vec2<f16>, read> = let %14
+    %16:array<mat4x2<f16>, 4> = load %p_a
+    %l_a:array<mat4x2<f16>, 4> = let %16
+    %18:mat4x2<f16> = load %p_a_i
+    %l_a_i:mat4x2<f16> = let %18
+    %20:vec2<f16> = load %p_a_i_i
+    %l_a_i_i:vec2<f16> = let %20
+    %22:f16 = load_vector_element %p_a_i_i, 0u
+    %23:f16 = access %l_a, 0i, 0i, 0u
+    %24:f16 = add %22, %23
+    %25:f16 = access %l_a_i, 0i, 0u
+    %26:f16 = add %24, %25
+    %27:f16 = access %l_a_i_i, 0u
+    %28:f16 = add %26, %27
+    store %s, %28
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat4x2_f16/static_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat4x2_f16/static_index_via_ptr.wgsl.expected.ir.msl
index 5c02fd1..54b02cd 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x2_f16/static_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat4x2_f16/static_index_via_ptr.wgsl.expected.ir.msl
@@ -1,17 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %a:ptr<uniform, array<mat4x2<f16>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f16, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %p_a:ptr<uniform, array<mat4x2<f16>, 4>, read> = let %a
-    %p_a_2:ptr<uniform, mat4x2<f16>, read> = access %p_a, 2i
-    %p_a_2_1:ptr<uniform, vec2<f16>, read> = access %p_a_2, 1i
-    %l_a:array<mat4x2<f16>, 4> = load %p_a
-    %l_a_i:mat4x2<f16> = load %p_a_2
-    %l_a_i_i:vec2<f16> = load %p_a_2_1
+    %5:ptr<uniform, mat4x2<f16>, read> = access %p_a, 2i
+    %p_a_2:ptr<uniform, mat4x2<f16>, read> = let %5
+    %7:ptr<uniform, vec2<f16>, read> = access %p_a_2, 1i
+    %p_a_2_1:ptr<uniform, vec2<f16>, read> = let %7
+    %9:array<mat4x2<f16>, 4> = load %p_a
+    %l_a:array<mat4x2<f16>, 4> = let %9
+    %11:mat4x2<f16> = load %p_a_2
+    %l_a_i:mat4x2<f16> = let %11
+    %13:vec2<f16> = load %p_a_2_1
+    %l_a_i_i:vec2<f16> = let %13
+    %15:f16 = load_vector_element %p_a_2_1, 0u
+    %16:f16 = access %l_a, 0i, 0i, 0u
+    %17:f16 = add %15, %16
+    %18:f16 = access %l_a_i, 0i, 0u
+    %19:f16 = add %17, %18
+    %20:f16 = access %l_a_i_i, 0u
+    %21:f16 = add %19, %20
+    store %s, %21
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat4x2_f16/to_builtin.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat4x2_f16/to_builtin.wgsl.expected.ir.msl
index 3ad4229..652e7b9 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x2_f16/to_builtin.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat4x2_f16/to_builtin.wgsl.expected.ir.msl
@@ -1,23 +1,34 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat4x2<f16>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f16, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %3:ptr<uniform, mat4x2<f16>, read> = access %u, 2i
-    %4:mat4x2<f16> = load %3
-    %t:mat2x4<f16> = transpose %4
-    %6:ptr<uniform, vec2<f16>, read> = access %u, 0i, 1i
-    %7:vec2<f16> = load %6
-    %8:vec2<f16> = swizzle %7, yx
-    %l:f16 = length %8
-    %10:ptr<uniform, vec2<f16>, read> = access %u, 0i, 1i
-    %11:vec2<f16> = load %10
-    %12:vec2<f16> = swizzle %11, yx
-    %13:f16 = access %12, 0u
-    %a:f16 = abs %13
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %4:ptr<uniform, mat4x2<f16>, read> = access %u, 2i
+    %5:mat4x2<f16> = load %4
+    %6:mat2x4<f16> = transpose %5
+    %t:mat2x4<f16> = let %6
+    %8:ptr<uniform, vec2<f16>, read> = access %u, 0i, 1i
+    %9:vec2<f16> = load %8
+    %10:vec2<f16> = swizzle %9, yx
+    %11:f16 = length %10
+    %l:f16 = let %11
+    %13:ptr<uniform, vec2<f16>, read> = access %u, 0i, 1i
+    %14:vec2<f16> = load %13
+    %15:vec2<f16> = swizzle %14, yx
+    %16:f16 = access %15, 0u
+    %17:f16 = abs %16
+    %a:f16 = let %17
+    %19:f16 = access %t, 0i, 0u
+    %20:f16 = construct %l
+    %21:f16 = add %19, %20
+    %22:f16 = let %21
+    %23:f16 = construct %a
+    %24:f16 = add %22, %23
+    store %s, %24
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat4x2_f16/to_fn.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat4x2_f16/to_fn.wgsl.expected.ir.msl
index 73aea88..1fbe38c 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x2_f16/to_fn.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat4x2_f16/to_fn.wgsl.expected.ir.msl
@@ -1,45 +1,56 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat4x2<f16>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f16, read_write> = var @binding_point(0, 1)
 }
 
-%a = func(%a_1:array<mat4x2<f16>, 4>):void -> %b2 {  # %a_1: 'a'
-  %b2 = block {
-    ret
+%a = func(%a_1:array<mat4x2<f16>, 4>):f16 {  # %a_1: 'a'
+  $B2: {
+    %5:f16 = access %a_1, 0i, 0i, 0u
+    ret %5
   }
 }
-%b = func(%m:mat4x2<f16>):void -> %b3 {
-  %b3 = block {
-    ret
+%b = func(%m:mat4x2<f16>):f16 {
+  $B3: {
+    %8:f16 = access %m, 0i, 0u
+    ret %8
   }
 }
-%c = func(%v:vec2<f16>):void -> %b4 {
-  %b4 = block {
-    ret
+%c = func(%v:vec2<f16>):f16 {
+  $B4: {
+    %11:f16 = access %v, 0u
+    ret %11
   }
 }
-%d = func(%f:f16):void -> %b5 {
-  %b5 = block {
-    ret
+%d = func(%f:f16):f16 {
+  $B5: {
+    ret %f
   }
 }
-%f_1 = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {  # %f_1: 'f'
-  %b6 = block {
-    %11:array<mat4x2<f16>, 4> = load %u
-    %12:void = call %a, %11
-    %13:ptr<uniform, mat4x2<f16>, read> = access %u, 1i
-    %14:mat4x2<f16> = load %13
-    %15:void = call %b, %14
-    %16:ptr<uniform, vec2<f16>, read> = access %u, 1i, 0i
-    %17:vec2<f16> = load %16
-    %18:vec2<f16> = swizzle %17, yx
-    %19:void = call %c, %18
-    %20:ptr<uniform, vec2<f16>, read> = access %u, 1i, 0i
-    %21:vec2<f16> = load %20
-    %22:vec2<f16> = swizzle %21, yx
-    %23:f16 = access %22, 0u
-    %24:void = call %d, %23
+%f_1 = @compute @workgroup_size(1, 1, 1) func():void {  # %f_1: 'f'
+  $B6: {
+    %15:array<mat4x2<f16>, 4> = load %u
+    %16:f16 = call %a, %15
+    %17:f16 = let %16
+    %18:ptr<uniform, mat4x2<f16>, read> = access %u, 1i
+    %19:mat4x2<f16> = load %18
+    %20:f16 = call %b, %19
+    %21:f16 = add %17, %20
+    %22:f16 = let %21
+    %23:ptr<uniform, vec2<f16>, read> = access %u, 1i, 0i
+    %24:vec2<f16> = load %23
+    %25:vec2<f16> = swizzle %24, yx
+    %26:f16 = call %c, %25
+    %27:f16 = add %22, %26
+    %28:f16 = let %27
+    %29:ptr<uniform, vec2<f16>, read> = access %u, 1i, 0i
+    %30:vec2<f16> = load %29
+    %31:vec2<f16> = swizzle %30, yx
+    %32:f16 = access %31, 0u
+    %33:f16 = call %d, %32
+    %34:f16 = add %28, %33
+    store %s, %34
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat4x2_f16/to_private.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat4x2_f16/to_private.wgsl.expected.ir.msl
index 7334c56..1fc8634 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x2_f16/to_private.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat4x2_f16/to_private.wgsl.expected.ir.msl
@@ -1,27 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat4x2<f16>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f16, read_write> = var @binding_point(0, 1)
   %p:ptr<private, array<mat4x2<f16>, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:array<mat4x2<f16>, 4> = load %u
-    store %p, %4
-    %5:ptr<private, mat4x2<f16>, read_write> = access %p, 1i
-    %6:ptr<uniform, mat4x2<f16>, read> = access %u, 2i
-    %7:mat4x2<f16> = load %6
-    store %5, %7
-    %8:ptr<private, vec2<f16>, read_write> = access %p, 1i, 0i
-    %9:ptr<uniform, vec2<f16>, read> = access %u, 0i, 1i
-    %10:vec2<f16> = load %9
-    %11:vec2<f16> = swizzle %10, yx
-    store %8, %11
-    %12:ptr<private, vec2<f16>, read_write> = access %p, 1i, 0i
-    %13:ptr<uniform, vec2<f16>, read> = access %u, 0i, 1i
-    %14:f16 = load_vector_element %13, 0u
-    store_vector_element %12, 0u, %14
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %5:array<mat4x2<f16>, 4> = load %u
+    store %p, %5
+    %6:ptr<private, mat4x2<f16>, read_write> = access %p, 1i
+    %7:ptr<uniform, mat4x2<f16>, read> = access %u, 2i
+    %8:mat4x2<f16> = load %7
+    store %6, %8
+    %9:ptr<private, vec2<f16>, read_write> = access %p, 1i, 0i
+    %10:ptr<uniform, vec2<f16>, read> = access %u, 0i, 1i
+    %11:vec2<f16> = load %10
+    %12:vec2<f16> = swizzle %11, yx
+    store %9, %12
+    %13:ptr<private, vec2<f16>, read_write> = access %p, 1i, 0i
+    %14:ptr<uniform, vec2<f16>, read> = access %u, 0i, 1i
+    %15:f16 = load_vector_element %14, 0u
+    store_vector_element %13, 0u, %15
+    %16:ptr<private, vec2<f16>, read_write> = access %p, 1i, 0i
+    %17:f16 = load_vector_element %16, 0u
+    store %s, %17
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat4x2_f16/to_storage.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat4x2_f16/to_storage.wgsl.expected.ir.msl
index d39980a..d286f86 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x2_f16/to_storage.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat4x2_f16/to_storage.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat4x2<f16>, 4>, read> = var @binding_point(0, 0)
   %s:ptr<storage, array<mat4x2<f16>, 4>, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:array<mat4x2<f16>, 4> = load %u
     store %s, %4
     %5:ptr<storage, mat4x2<f16>, read_write> = access %s, 1i
diff --git a/test/tint/buffer/uniform/std140/array/mat4x2_f16/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat4x2_f16/to_workgroup.wgsl.expected.ir.msl
index b7712ac..20fbb09 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x2_f16/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat4x2_f16/to_workgroup.wgsl.expected.ir.msl
@@ -1,27 +1,48 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat4x2<f16>, 4>, read> = var @binding_point(0, 0)
   %w:ptr<workgroup, array<mat4x2<f16>, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:array<mat4x2<f16>, 4> = load %u
-    store %w, %4
-    %5:ptr<workgroup, mat4x2<f16>, read_write> = access %w, 1i
-    %6:ptr<uniform, mat4x2<f16>, read> = access %u, 2i
-    %7:mat4x2<f16> = load %6
-    store %5, %7
-    %8:ptr<workgroup, vec2<f16>, read_write> = access %w, 1i, 0i
-    %9:ptr<uniform, vec2<f16>, read> = access %u, 0i, 1i
-    %10:vec2<f16> = load %9
-    %11:vec2<f16> = swizzle %10, yx
-    store %8, %11
-    %12:ptr<workgroup, vec2<f16>, read_write> = access %w, 1i, 0i
-    %13:ptr<uniform, vec2<f16>, read> = access %u, 0i, 1i
-    %14:f16 = load_vector_element %13, 0u
-    store_vector_element %12, 0u, %14
+%f = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B2: {
+    loop [i: $B3, b: $B4, c: $B5] {  # loop_1
+      $B3: {  # initializer
+        next_iteration %tint_local_index  # -> $B4
+      }
+      $B4 (%idx:u32): {  # body
+        %6:bool = gte %idx, 4u
+        if %6 [t: $B6] {  # if_1
+          $B6: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %7:ptr<workgroup, mat4x2<f16>, read_write> = access %w, %idx
+        store %7, mat4x2<f16>(vec2<f16>(0.0h))
+        continue  # -> $B5
+      }
+      $B5: {  # continuing
+        %8:u32 = add %idx, 1u
+        next_iteration %8  # -> $B4
+      }
+    }
+    %9:void = msl.threadgroup_barrier 4u
+    %10:array<mat4x2<f16>, 4> = load %u
+    store %w, %10
+    %11:ptr<workgroup, mat4x2<f16>, read_write> = access %w, 1i
+    %12:ptr<uniform, mat4x2<f16>, read> = access %u, 2i
+    %13:mat4x2<f16> = load %12
+    store %11, %13
+    %14:ptr<workgroup, vec2<f16>, read_write> = access %w, 1i, 0i
+    %15:ptr<uniform, vec2<f16>, read> = access %u, 0i, 1i
+    %16:vec2<f16> = load %15
+    %17:vec2<f16> = swizzle %16, yx
+    store %14, %17
+    %18:ptr<workgroup, vec2<f16>, read_write> = access %w, 1i, 0i
+    %19:ptr<uniform, vec2<f16>, read> = access %u, 0i, 1i
+    %20:f16 = load_vector_element %19, 0u
+    store_vector_element %18, 0u, %20
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat4x2_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat4x2_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
index ad5ce7c..ece1057 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x2_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat4x2_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
@@ -1,29 +1,43 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %a:ptr<uniform, array<mat4x2<f32>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f32, read_write> = var @binding_point(0, 1)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
-    %4:i32 = load %counter
-    %5:i32 = add %4, 1i
-    store %counter, %5
-    %6:i32 = load %counter
-    ret %6
+%i = func():i32 {
+  $B2: {
+    %5:i32 = load %counter
+    %6:i32 = add %5, 1i
+    store %counter, %6
+    %7:i32 = load %counter
+    ret %7
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_a:ptr<uniform, array<mat4x2<f32>, 4>, read> = let %a
-    %9:i32 = call %i
-    %p_a_i:ptr<uniform, mat4x2<f32>, read> = access %p_a, %9
-    %11:i32 = call %i
-    %p_a_i_i:ptr<uniform, vec2<f32>, read> = access %p_a_i, %11
-    %l_a:array<mat4x2<f32>, 4> = load %p_a
-    %l_a_i:mat4x2<f32> = load %p_a_i
-    %l_a_i_i:vec2<f32> = load %p_a_i_i
+    %10:i32 = call %i
+    %11:ptr<uniform, mat4x2<f32>, read> = access %p_a, %10
+    %p_a_i:ptr<uniform, mat4x2<f32>, read> = let %11
+    %13:i32 = call %i
+    %14:ptr<uniform, vec2<f32>, read> = access %p_a_i, %13
+    %p_a_i_i:ptr<uniform, vec2<f32>, read> = let %14
+    %16:array<mat4x2<f32>, 4> = load %p_a
+    %l_a:array<mat4x2<f32>, 4> = let %16
+    %18:mat4x2<f32> = load %p_a_i
+    %l_a_i:mat4x2<f32> = let %18
+    %20:vec2<f32> = load %p_a_i_i
+    %l_a_i_i:vec2<f32> = let %20
+    %22:f32 = load_vector_element %p_a_i_i, 0u
+    %23:f32 = access %l_a, 0i, 0i, 0u
+    %24:f32 = add %22, %23
+    %25:f32 = access %l_a_i, 0i, 0u
+    %26:f32 = add %24, %25
+    %27:f32 = access %l_a_i_i, 0u
+    %28:f32 = add %26, %27
+    store %s, %28
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat4x2_f32/static_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat4x2_f32/static_index_via_ptr.wgsl.expected.ir.msl
index b673d2e..616bce7 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x2_f32/static_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat4x2_f32/static_index_via_ptr.wgsl.expected.ir.msl
@@ -1,17 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %a:ptr<uniform, array<mat4x2<f32>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f32, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %p_a:ptr<uniform, array<mat4x2<f32>, 4>, read> = let %a
-    %p_a_2:ptr<uniform, mat4x2<f32>, read> = access %p_a, 2i
-    %p_a_2_1:ptr<uniform, vec2<f32>, read> = access %p_a_2, 1i
-    %l_a:array<mat4x2<f32>, 4> = load %p_a
-    %l_a_i:mat4x2<f32> = load %p_a_2
-    %l_a_i_i:vec2<f32> = load %p_a_2_1
+    %5:ptr<uniform, mat4x2<f32>, read> = access %p_a, 2i
+    %p_a_2:ptr<uniform, mat4x2<f32>, read> = let %5
+    %7:ptr<uniform, vec2<f32>, read> = access %p_a_2, 1i
+    %p_a_2_1:ptr<uniform, vec2<f32>, read> = let %7
+    %9:array<mat4x2<f32>, 4> = load %p_a
+    %l_a:array<mat4x2<f32>, 4> = let %9
+    %11:mat4x2<f32> = load %p_a_2
+    %l_a_i:mat4x2<f32> = let %11
+    %13:vec2<f32> = load %p_a_2_1
+    %l_a_i_i:vec2<f32> = let %13
+    %15:f32 = load_vector_element %p_a_2_1, 0u
+    %16:f32 = access %l_a, 0i, 0i, 0u
+    %17:f32 = add %15, %16
+    %18:f32 = access %l_a_i, 0i, 0u
+    %19:f32 = add %17, %18
+    %20:f32 = access %l_a_i_i, 0u
+    %21:f32 = add %19, %20
+    store %s, %21
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat4x2_f32/to_builtin.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat4x2_f32/to_builtin.wgsl.expected.ir.msl
index 33dcc4e..9459f95 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x2_f32/to_builtin.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat4x2_f32/to_builtin.wgsl.expected.ir.msl
@@ -1,23 +1,34 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat4x2<f32>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f32, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %3:ptr<uniform, mat4x2<f32>, read> = access %u, 2i
-    %4:mat4x2<f32> = load %3
-    %t:mat2x4<f32> = transpose %4
-    %6:ptr<uniform, vec2<f32>, read> = access %u, 0i, 1i
-    %7:vec2<f32> = load %6
-    %8:vec2<f32> = swizzle %7, yx
-    %l:f32 = length %8
-    %10:ptr<uniform, vec2<f32>, read> = access %u, 0i, 1i
-    %11:vec2<f32> = load %10
-    %12:vec2<f32> = swizzle %11, yx
-    %13:f32 = access %12, 0u
-    %a:f32 = abs %13
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %4:ptr<uniform, mat4x2<f32>, read> = access %u, 2i
+    %5:mat4x2<f32> = load %4
+    %6:mat2x4<f32> = transpose %5
+    %t:mat2x4<f32> = let %6
+    %8:ptr<uniform, vec2<f32>, read> = access %u, 0i, 1i
+    %9:vec2<f32> = load %8
+    %10:vec2<f32> = swizzle %9, yx
+    %11:f32 = length %10
+    %l:f32 = let %11
+    %13:ptr<uniform, vec2<f32>, read> = access %u, 0i, 1i
+    %14:vec2<f32> = load %13
+    %15:vec2<f32> = swizzle %14, yx
+    %16:f32 = access %15, 0u
+    %17:f32 = abs %16
+    %a:f32 = let %17
+    %19:f32 = access %t, 0i, 0u
+    %20:f32 = construct %l
+    %21:f32 = add %19, %20
+    %22:f32 = let %21
+    %23:f32 = construct %a
+    %24:f32 = add %22, %23
+    store %s, %24
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat4x2_f32/to_fn.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat4x2_f32/to_fn.wgsl.expected.ir.msl
index 6cf89d2..3e80621 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x2_f32/to_fn.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat4x2_f32/to_fn.wgsl.expected.ir.msl
@@ -1,45 +1,56 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat4x2<f32>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f32, read_write> = var @binding_point(0, 1)
 }
 
-%a = func(%a_1:array<mat4x2<f32>, 4>):void -> %b2 {  # %a_1: 'a'
-  %b2 = block {
-    ret
+%a = func(%a_1:array<mat4x2<f32>, 4>):f32 {  # %a_1: 'a'
+  $B2: {
+    %5:f32 = access %a_1, 0i, 0i, 0u
+    ret %5
   }
 }
-%b = func(%m:mat4x2<f32>):void -> %b3 {
-  %b3 = block {
-    ret
+%b = func(%m:mat4x2<f32>):f32 {
+  $B3: {
+    %8:f32 = access %m, 0i, 0u
+    ret %8
   }
 }
-%c = func(%v:vec2<f32>):void -> %b4 {
-  %b4 = block {
-    ret
+%c = func(%v:vec2<f32>):f32 {
+  $B4: {
+    %11:f32 = access %v, 0u
+    ret %11
   }
 }
-%d = func(%f:f32):void -> %b5 {
-  %b5 = block {
-    ret
+%d = func(%f:f32):f32 {
+  $B5: {
+    ret %f
   }
 }
-%f_1 = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {  # %f_1: 'f'
-  %b6 = block {
-    %11:array<mat4x2<f32>, 4> = load %u
-    %12:void = call %a, %11
-    %13:ptr<uniform, mat4x2<f32>, read> = access %u, 1i
-    %14:mat4x2<f32> = load %13
-    %15:void = call %b, %14
-    %16:ptr<uniform, vec2<f32>, read> = access %u, 1i, 0i
-    %17:vec2<f32> = load %16
-    %18:vec2<f32> = swizzle %17, yx
-    %19:void = call %c, %18
-    %20:ptr<uniform, vec2<f32>, read> = access %u, 1i, 0i
-    %21:vec2<f32> = load %20
-    %22:vec2<f32> = swizzle %21, yx
-    %23:f32 = access %22, 0u
-    %24:void = call %d, %23
+%f_1 = @compute @workgroup_size(1, 1, 1) func():void {  # %f_1: 'f'
+  $B6: {
+    %15:array<mat4x2<f32>, 4> = load %u
+    %16:f32 = call %a, %15
+    %17:f32 = let %16
+    %18:ptr<uniform, mat4x2<f32>, read> = access %u, 1i
+    %19:mat4x2<f32> = load %18
+    %20:f32 = call %b, %19
+    %21:f32 = add %17, %20
+    %22:f32 = let %21
+    %23:ptr<uniform, vec2<f32>, read> = access %u, 1i, 0i
+    %24:vec2<f32> = load %23
+    %25:vec2<f32> = swizzle %24, yx
+    %26:f32 = call %c, %25
+    %27:f32 = add %22, %26
+    %28:f32 = let %27
+    %29:ptr<uniform, vec2<f32>, read> = access %u, 1i, 0i
+    %30:vec2<f32> = load %29
+    %31:vec2<f32> = swizzle %30, yx
+    %32:f32 = access %31, 0u
+    %33:f32 = call %d, %32
+    %34:f32 = add %28, %33
+    store %s, %34
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat4x2_f32/to_private.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat4x2_f32/to_private.wgsl.expected.ir.msl
index c91288b..180d603 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x2_f32/to_private.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat4x2_f32/to_private.wgsl.expected.ir.msl
@@ -1,27 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat4x2<f32>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f32, read_write> = var @binding_point(0, 1)
   %p:ptr<private, array<mat4x2<f32>, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:array<mat4x2<f32>, 4> = load %u
-    store %p, %4
-    %5:ptr<private, mat4x2<f32>, read_write> = access %p, 1i
-    %6:ptr<uniform, mat4x2<f32>, read> = access %u, 2i
-    %7:mat4x2<f32> = load %6
-    store %5, %7
-    %8:ptr<private, vec2<f32>, read_write> = access %p, 1i, 0i
-    %9:ptr<uniform, vec2<f32>, read> = access %u, 0i, 1i
-    %10:vec2<f32> = load %9
-    %11:vec2<f32> = swizzle %10, yx
-    store %8, %11
-    %12:ptr<private, vec2<f32>, read_write> = access %p, 1i, 0i
-    %13:ptr<uniform, vec2<f32>, read> = access %u, 0i, 1i
-    %14:f32 = load_vector_element %13, 0u
-    store_vector_element %12, 0u, %14
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %5:array<mat4x2<f32>, 4> = load %u
+    store %p, %5
+    %6:ptr<private, mat4x2<f32>, read_write> = access %p, 1i
+    %7:ptr<uniform, mat4x2<f32>, read> = access %u, 2i
+    %8:mat4x2<f32> = load %7
+    store %6, %8
+    %9:ptr<private, vec2<f32>, read_write> = access %p, 1i, 0i
+    %10:ptr<uniform, vec2<f32>, read> = access %u, 0i, 1i
+    %11:vec2<f32> = load %10
+    %12:vec2<f32> = swizzle %11, yx
+    store %9, %12
+    %13:ptr<private, vec2<f32>, read_write> = access %p, 1i, 0i
+    %14:ptr<uniform, vec2<f32>, read> = access %u, 0i, 1i
+    %15:f32 = load_vector_element %14, 0u
+    store_vector_element %13, 0u, %15
+    %16:ptr<private, vec2<f32>, read_write> = access %p, 1i, 0i
+    %17:f32 = load_vector_element %16, 0u
+    store %s, %17
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat4x2_f32/to_storage.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat4x2_f32/to_storage.wgsl.expected.ir.msl
index 18b969d..79aeaaa 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x2_f32/to_storage.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat4x2_f32/to_storage.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat4x2<f32>, 4>, read> = var @binding_point(0, 0)
   %s:ptr<storage, array<mat4x2<f32>, 4>, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:array<mat4x2<f32>, 4> = load %u
     store %s, %4
     %5:ptr<storage, mat4x2<f32>, read_write> = access %s, 1i
diff --git a/test/tint/buffer/uniform/std140/array/mat4x2_f32/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat4x2_f32/to_workgroup.wgsl.expected.ir.msl
index 301d083..8964fe4 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x2_f32/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat4x2_f32/to_workgroup.wgsl.expected.ir.msl
@@ -1,27 +1,48 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat4x2<f32>, 4>, read> = var @binding_point(0, 0)
   %w:ptr<workgroup, array<mat4x2<f32>, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:array<mat4x2<f32>, 4> = load %u
-    store %w, %4
-    %5:ptr<workgroup, mat4x2<f32>, read_write> = access %w, 1i
-    %6:ptr<uniform, mat4x2<f32>, read> = access %u, 2i
-    %7:mat4x2<f32> = load %6
-    store %5, %7
-    %8:ptr<workgroup, vec2<f32>, read_write> = access %w, 1i, 0i
-    %9:ptr<uniform, vec2<f32>, read> = access %u, 0i, 1i
-    %10:vec2<f32> = load %9
-    %11:vec2<f32> = swizzle %10, yx
-    store %8, %11
-    %12:ptr<workgroup, vec2<f32>, read_write> = access %w, 1i, 0i
-    %13:ptr<uniform, vec2<f32>, read> = access %u, 0i, 1i
-    %14:f32 = load_vector_element %13, 0u
-    store_vector_element %12, 0u, %14
+%f = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B2: {
+    loop [i: $B3, b: $B4, c: $B5] {  # loop_1
+      $B3: {  # initializer
+        next_iteration %tint_local_index  # -> $B4
+      }
+      $B4 (%idx:u32): {  # body
+        %6:bool = gte %idx, 4u
+        if %6 [t: $B6] {  # if_1
+          $B6: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %7:ptr<workgroup, mat4x2<f32>, read_write> = access %w, %idx
+        store %7, mat4x2<f32>(vec2<f32>(0.0f))
+        continue  # -> $B5
+      }
+      $B5: {  # continuing
+        %8:u32 = add %idx, 1u
+        next_iteration %8  # -> $B4
+      }
+    }
+    %9:void = msl.threadgroup_barrier 4u
+    %10:array<mat4x2<f32>, 4> = load %u
+    store %w, %10
+    %11:ptr<workgroup, mat4x2<f32>, read_write> = access %w, 1i
+    %12:ptr<uniform, mat4x2<f32>, read> = access %u, 2i
+    %13:mat4x2<f32> = load %12
+    store %11, %13
+    %14:ptr<workgroup, vec2<f32>, read_write> = access %w, 1i, 0i
+    %15:ptr<uniform, vec2<f32>, read> = access %u, 0i, 1i
+    %16:vec2<f32> = load %15
+    %17:vec2<f32> = swizzle %16, yx
+    store %14, %17
+    %18:ptr<workgroup, vec2<f32>, read_write> = access %w, 1i, 0i
+    %19:ptr<uniform, vec2<f32>, read> = access %u, 0i, 1i
+    %20:f32 = load_vector_element %19, 0u
+    store_vector_element %18, 0u, %20
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat4x3_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat4x3_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
index 457bc4f..e41f63c 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x3_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat4x3_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
@@ -1,29 +1,43 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %a:ptr<uniform, array<mat4x3<f16>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f16, read_write> = var @binding_point(0, 1)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
-    %4:i32 = load %counter
-    %5:i32 = add %4, 1i
-    store %counter, %5
-    %6:i32 = load %counter
-    ret %6
+%i = func():i32 {
+  $B2: {
+    %5:i32 = load %counter
+    %6:i32 = add %5, 1i
+    store %counter, %6
+    %7:i32 = load %counter
+    ret %7
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_a:ptr<uniform, array<mat4x3<f16>, 4>, read> = let %a
-    %9:i32 = call %i
-    %p_a_i:ptr<uniform, mat4x3<f16>, read> = access %p_a, %9
-    %11:i32 = call %i
-    %p_a_i_i:ptr<uniform, vec3<f16>, read> = access %p_a_i, %11
-    %l_a:array<mat4x3<f16>, 4> = load %p_a
-    %l_a_i:mat4x3<f16> = load %p_a_i
-    %l_a_i_i:vec3<f16> = load %p_a_i_i
+    %10:i32 = call %i
+    %11:ptr<uniform, mat4x3<f16>, read> = access %p_a, %10
+    %p_a_i:ptr<uniform, mat4x3<f16>, read> = let %11
+    %13:i32 = call %i
+    %14:ptr<uniform, vec3<f16>, read> = access %p_a_i, %13
+    %p_a_i_i:ptr<uniform, vec3<f16>, read> = let %14
+    %16:array<mat4x3<f16>, 4> = load %p_a
+    %l_a:array<mat4x3<f16>, 4> = let %16
+    %18:mat4x3<f16> = load %p_a_i
+    %l_a_i:mat4x3<f16> = let %18
+    %20:vec3<f16> = load %p_a_i_i
+    %l_a_i_i:vec3<f16> = let %20
+    %22:f16 = load_vector_element %p_a_i_i, 0u
+    %23:f16 = access %l_a, 0i, 0i, 0u
+    %24:f16 = add %22, %23
+    %25:f16 = access %l_a_i, 0i, 0u
+    %26:f16 = add %24, %25
+    %27:f16 = access %l_a_i_i, 0u
+    %28:f16 = add %26, %27
+    store %s, %28
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat4x3_f16/static_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat4x3_f16/static_index_via_ptr.wgsl.expected.ir.msl
index 97784a7..775594a 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x3_f16/static_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat4x3_f16/static_index_via_ptr.wgsl.expected.ir.msl
@@ -1,17 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %a:ptr<uniform, array<mat4x3<f16>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f16, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %p_a:ptr<uniform, array<mat4x3<f16>, 4>, read> = let %a
-    %p_a_2:ptr<uniform, mat4x3<f16>, read> = access %p_a, 2i
-    %p_a_2_1:ptr<uniform, vec3<f16>, read> = access %p_a_2, 1i
-    %l_a:array<mat4x3<f16>, 4> = load %p_a
-    %l_a_i:mat4x3<f16> = load %p_a_2
-    %l_a_i_i:vec3<f16> = load %p_a_2_1
+    %5:ptr<uniform, mat4x3<f16>, read> = access %p_a, 2i
+    %p_a_2:ptr<uniform, mat4x3<f16>, read> = let %5
+    %7:ptr<uniform, vec3<f16>, read> = access %p_a_2, 1i
+    %p_a_2_1:ptr<uniform, vec3<f16>, read> = let %7
+    %9:array<mat4x3<f16>, 4> = load %p_a
+    %l_a:array<mat4x3<f16>, 4> = let %9
+    %11:mat4x3<f16> = load %p_a_2
+    %l_a_i:mat4x3<f16> = let %11
+    %13:vec3<f16> = load %p_a_2_1
+    %l_a_i_i:vec3<f16> = let %13
+    %15:f16 = load_vector_element %p_a_2_1, 0u
+    %16:f16 = access %l_a, 0i, 0i, 0u
+    %17:f16 = add %15, %16
+    %18:f16 = access %l_a_i, 0i, 0u
+    %19:f16 = add %17, %18
+    %20:f16 = access %l_a_i_i, 0u
+    %21:f16 = add %19, %20
+    store %s, %21
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat4x3_f16/to_builtin.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat4x3_f16/to_builtin.wgsl.expected.ir.msl
index e150d2b..f7e8030 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x3_f16/to_builtin.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat4x3_f16/to_builtin.wgsl.expected.ir.msl
@@ -1,23 +1,34 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat4x3<f16>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f16, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %3:ptr<uniform, mat4x3<f16>, read> = access %u, 2i
-    %4:mat4x3<f16> = load %3
-    %t:mat3x4<f16> = transpose %4
-    %6:ptr<uniform, vec3<f16>, read> = access %u, 0i, 1i
-    %7:vec3<f16> = load %6
-    %8:vec3<f16> = swizzle %7, zxy
-    %l:f16 = length %8
-    %10:ptr<uniform, vec3<f16>, read> = access %u, 0i, 1i
-    %11:vec3<f16> = load %10
-    %12:vec3<f16> = swizzle %11, zxy
-    %13:f16 = access %12, 0u
-    %a:f16 = abs %13
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %4:ptr<uniform, mat4x3<f16>, read> = access %u, 2i
+    %5:mat4x3<f16> = load %4
+    %6:mat3x4<f16> = transpose %5
+    %t:mat3x4<f16> = let %6
+    %8:ptr<uniform, vec3<f16>, read> = access %u, 0i, 1i
+    %9:vec3<f16> = load %8
+    %10:vec3<f16> = swizzle %9, zxy
+    %11:f16 = length %10
+    %l:f16 = let %11
+    %13:ptr<uniform, vec3<f16>, read> = access %u, 0i, 1i
+    %14:vec3<f16> = load %13
+    %15:vec3<f16> = swizzle %14, zxy
+    %16:f16 = access %15, 0u
+    %17:f16 = abs %16
+    %a:f16 = let %17
+    %19:f16 = access %t, 0i, 0u
+    %20:f16 = construct %l
+    %21:f16 = add %19, %20
+    %22:f16 = let %21
+    %23:f16 = construct %a
+    %24:f16 = add %22, %23
+    store %s, %24
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat4x3_f16/to_fn.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat4x3_f16/to_fn.wgsl.expected.ir.msl
index 24516e1..808d172 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x3_f16/to_fn.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat4x3_f16/to_fn.wgsl.expected.ir.msl
@@ -1,45 +1,56 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat4x3<f16>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f16, read_write> = var @binding_point(0, 1)
 }
 
-%a = func(%a_1:array<mat4x3<f16>, 4>):void -> %b2 {  # %a_1: 'a'
-  %b2 = block {
-    ret
+%a = func(%a_1:array<mat4x3<f16>, 4>):f16 {  # %a_1: 'a'
+  $B2: {
+    %5:f16 = access %a_1, 0i, 0i, 0u
+    ret %5
   }
 }
-%b = func(%m:mat4x3<f16>):void -> %b3 {
-  %b3 = block {
-    ret
+%b = func(%m:mat4x3<f16>):f16 {
+  $B3: {
+    %8:f16 = access %m, 0i, 0u
+    ret %8
   }
 }
-%c = func(%v:vec3<f16>):void -> %b4 {
-  %b4 = block {
-    ret
+%c = func(%v:vec3<f16>):f16 {
+  $B4: {
+    %11:f16 = access %v, 0u
+    ret %11
   }
 }
-%d = func(%f:f16):void -> %b5 {
-  %b5 = block {
-    ret
+%d = func(%f:f16):f16 {
+  $B5: {
+    ret %f
   }
 }
-%f_1 = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {  # %f_1: 'f'
-  %b6 = block {
-    %11:array<mat4x3<f16>, 4> = load %u
-    %12:void = call %a, %11
-    %13:ptr<uniform, mat4x3<f16>, read> = access %u, 1i
-    %14:mat4x3<f16> = load %13
-    %15:void = call %b, %14
-    %16:ptr<uniform, vec3<f16>, read> = access %u, 1i, 0i
-    %17:vec3<f16> = load %16
-    %18:vec3<f16> = swizzle %17, zxy
-    %19:void = call %c, %18
-    %20:ptr<uniform, vec3<f16>, read> = access %u, 1i, 0i
-    %21:vec3<f16> = load %20
-    %22:vec3<f16> = swizzle %21, zxy
-    %23:f16 = access %22, 0u
-    %24:void = call %d, %23
+%f_1 = @compute @workgroup_size(1, 1, 1) func():void {  # %f_1: 'f'
+  $B6: {
+    %15:array<mat4x3<f16>, 4> = load %u
+    %16:f16 = call %a, %15
+    %17:f16 = let %16
+    %18:ptr<uniform, mat4x3<f16>, read> = access %u, 1i
+    %19:mat4x3<f16> = load %18
+    %20:f16 = call %b, %19
+    %21:f16 = add %17, %20
+    %22:f16 = let %21
+    %23:ptr<uniform, vec3<f16>, read> = access %u, 1i, 0i
+    %24:vec3<f16> = load %23
+    %25:vec3<f16> = swizzle %24, zxy
+    %26:f16 = call %c, %25
+    %27:f16 = add %22, %26
+    %28:f16 = let %27
+    %29:ptr<uniform, vec3<f16>, read> = access %u, 1i, 0i
+    %30:vec3<f16> = load %29
+    %31:vec3<f16> = swizzle %30, zxy
+    %32:f16 = access %31, 0u
+    %33:f16 = call %d, %32
+    %34:f16 = add %28, %33
+    store %s, %34
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat4x3_f16/to_private.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat4x3_f16/to_private.wgsl.expected.ir.msl
index 13a9ba2..bfcb672 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x3_f16/to_private.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat4x3_f16/to_private.wgsl.expected.ir.msl
@@ -1,27 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat4x3<f16>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f16, read_write> = var @binding_point(0, 1)
   %p:ptr<private, array<mat4x3<f16>, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:array<mat4x3<f16>, 4> = load %u
-    store %p, %4
-    %5:ptr<private, mat4x3<f16>, read_write> = access %p, 1i
-    %6:ptr<uniform, mat4x3<f16>, read> = access %u, 2i
-    %7:mat4x3<f16> = load %6
-    store %5, %7
-    %8:ptr<private, vec3<f16>, read_write> = access %p, 1i, 0i
-    %9:ptr<uniform, vec3<f16>, read> = access %u, 0i, 1i
-    %10:vec3<f16> = load %9
-    %11:vec3<f16> = swizzle %10, zxy
-    store %8, %11
-    %12:ptr<private, vec3<f16>, read_write> = access %p, 1i, 0i
-    %13:ptr<uniform, vec3<f16>, read> = access %u, 0i, 1i
-    %14:f16 = load_vector_element %13, 0u
-    store_vector_element %12, 0u, %14
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %5:array<mat4x3<f16>, 4> = load %u
+    store %p, %5
+    %6:ptr<private, mat4x3<f16>, read_write> = access %p, 1i
+    %7:ptr<uniform, mat4x3<f16>, read> = access %u, 2i
+    %8:mat4x3<f16> = load %7
+    store %6, %8
+    %9:ptr<private, vec3<f16>, read_write> = access %p, 1i, 0i
+    %10:ptr<uniform, vec3<f16>, read> = access %u, 0i, 1i
+    %11:vec3<f16> = load %10
+    %12:vec3<f16> = swizzle %11, zxy
+    store %9, %12
+    %13:ptr<private, vec3<f16>, read_write> = access %p, 1i, 0i
+    %14:ptr<uniform, vec3<f16>, read> = access %u, 0i, 1i
+    %15:f16 = load_vector_element %14, 0u
+    store_vector_element %13, 0u, %15
+    %16:ptr<private, vec3<f16>, read_write> = access %p, 1i, 0i
+    %17:f16 = load_vector_element %16, 0u
+    store %s, %17
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat4x3_f16/to_storage.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat4x3_f16/to_storage.wgsl.expected.ir.msl
index 35b4520..1567050 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x3_f16/to_storage.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat4x3_f16/to_storage.wgsl.expected.ir.msl
@@ -1,27 +1,70 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat4x3<f16>, 4>, read> = var @binding_point(0, 0)
   %s:ptr<storage, array<mat4x3<f16>, 4>, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:array<mat4x3<f16>, 4> = load %u
-    store %s, %4
-    %5:ptr<storage, mat4x3<f16>, read_write> = access %s, 1i
-    %6:ptr<uniform, mat4x3<f16>, read> = access %u, 2i
-    %7:mat4x3<f16> = load %6
-    store %5, %7
-    %8:ptr<storage, vec3<f16>, read_write> = access %s, 1i, 0i
-    %9:ptr<uniform, vec3<f16>, read> = access %u, 0i, 1i
-    %10:vec3<f16> = load %9
-    %11:vec3<f16> = swizzle %10, zxy
-    store %8, %11
+    %5:void = call %tint_store_and_preserve_padding, %s, %4
+    %7:ptr<storage, mat4x3<f16>, read_write> = access %s, 1i
+    %8:ptr<uniform, mat4x3<f16>, read> = access %u, 2i
+    %9:mat4x3<f16> = load %8
+    %10:void = call %tint_store_and_preserve_padding_1, %7, %9
     %12:ptr<storage, vec3<f16>, read_write> = access %s, 1i, 0i
     %13:ptr<uniform, vec3<f16>, read> = access %u, 0i, 1i
-    %14:f16 = load_vector_element %13, 0u
-    store_vector_element %12, 0u, %14
+    %14:vec3<f16> = load %13
+    %15:vec3<f16> = swizzle %14, zxy
+    store %12, %15
+    %16:ptr<storage, vec3<f16>, read_write> = access %s, 1i, 0i
+    %17:ptr<uniform, vec3<f16>, read> = access %u, 0i, 1i
+    %18:f16 = load_vector_element %17, 0u
+    store_vector_element %16, 0u, %18
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, array<mat4x3<f16>, 4>, read_write>, %value_param:array<mat4x3<f16>, 4>):void {
+  $B3: {
+    loop [i: $B4, b: $B5, c: $B6] {  # loop_1
+      $B4: {  # initializer
+        next_iteration 0u  # -> $B5
+      }
+      $B5 (%idx:u32): {  # body
+        %22:bool = gte %idx, 4u
+        if %22 [t: $B7] {  # if_1
+          $B7: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %23:ptr<storage, mat4x3<f16>, read_write> = access %target, %idx
+        %24:mat4x3<f16> = access %value_param, %idx
+        %25:void = call %tint_store_and_preserve_padding_1, %23, %24
+        continue  # -> $B6
+      }
+      $B6: {  # continuing
+        %26:u32 = add %idx, 1u
+        next_iteration %26  # -> $B5
+      }
+    }
+    ret
+  }
+}
+%tint_store_and_preserve_padding_1 = func(%target_1:ptr<storage, mat4x3<f16>, read_write>, %value_param_1:mat4x3<f16>):void {  # %tint_store_and_preserve_padding_1: 'tint_store_and_preserve_padding', %target_1: 'target', %value_param_1: 'value_param'
+  $B8: {
+    %29:ptr<storage, vec3<f16>, read_write> = access %target_1, 0u
+    %30:vec3<f16> = access %value_param_1, 0u
+    store %29, %30
+    %31:ptr<storage, vec3<f16>, read_write> = access %target_1, 1u
+    %32:vec3<f16> = access %value_param_1, 1u
+    store %31, %32
+    %33:ptr<storage, vec3<f16>, read_write> = access %target_1, 2u
+    %34:vec3<f16> = access %value_param_1, 2u
+    store %33, %34
+    %35:ptr<storage, vec3<f16>, read_write> = access %target_1, 3u
+    %36:vec3<f16> = access %value_param_1, 3u
+    store %35, %36
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat4x3_f16/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat4x3_f16/to_workgroup.wgsl.expected.ir.msl
index 006f2d7..8ca1ffc 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x3_f16/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat4x3_f16/to_workgroup.wgsl.expected.ir.msl
@@ -1,27 +1,48 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat4x3<f16>, 4>, read> = var @binding_point(0, 0)
   %w:ptr<workgroup, array<mat4x3<f16>, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:array<mat4x3<f16>, 4> = load %u
-    store %w, %4
-    %5:ptr<workgroup, mat4x3<f16>, read_write> = access %w, 1i
-    %6:ptr<uniform, mat4x3<f16>, read> = access %u, 2i
-    %7:mat4x3<f16> = load %6
-    store %5, %7
-    %8:ptr<workgroup, vec3<f16>, read_write> = access %w, 1i, 0i
-    %9:ptr<uniform, vec3<f16>, read> = access %u, 0i, 1i
-    %10:vec3<f16> = load %9
-    %11:vec3<f16> = swizzle %10, zxy
-    store %8, %11
-    %12:ptr<workgroup, vec3<f16>, read_write> = access %w, 1i, 0i
-    %13:ptr<uniform, vec3<f16>, read> = access %u, 0i, 1i
-    %14:f16 = load_vector_element %13, 0u
-    store_vector_element %12, 0u, %14
+%f = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B2: {
+    loop [i: $B3, b: $B4, c: $B5] {  # loop_1
+      $B3: {  # initializer
+        next_iteration %tint_local_index  # -> $B4
+      }
+      $B4 (%idx:u32): {  # body
+        %6:bool = gte %idx, 4u
+        if %6 [t: $B6] {  # if_1
+          $B6: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %7:ptr<workgroup, mat4x3<f16>, read_write> = access %w, %idx
+        store %7, mat4x3<f16>(vec3<f16>(0.0h))
+        continue  # -> $B5
+      }
+      $B5: {  # continuing
+        %8:u32 = add %idx, 1u
+        next_iteration %8  # -> $B4
+      }
+    }
+    %9:void = msl.threadgroup_barrier 4u
+    %10:array<mat4x3<f16>, 4> = load %u
+    store %w, %10
+    %11:ptr<workgroup, mat4x3<f16>, read_write> = access %w, 1i
+    %12:ptr<uniform, mat4x3<f16>, read> = access %u, 2i
+    %13:mat4x3<f16> = load %12
+    store %11, %13
+    %14:ptr<workgroup, vec3<f16>, read_write> = access %w, 1i, 0i
+    %15:ptr<uniform, vec3<f16>, read> = access %u, 0i, 1i
+    %16:vec3<f16> = load %15
+    %17:vec3<f16> = swizzle %16, zxy
+    store %14, %17
+    %18:ptr<workgroup, vec3<f16>, read_write> = access %w, 1i, 0i
+    %19:ptr<uniform, vec3<f16>, read> = access %u, 0i, 1i
+    %20:f16 = load_vector_element %19, 0u
+    store_vector_element %18, 0u, %20
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat4x3_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat4x3_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
index ee7a621..dd508be 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x3_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat4x3_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
@@ -1,29 +1,43 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %a:ptr<uniform, array<mat4x3<f32>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f32, read_write> = var @binding_point(0, 1)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
-    %4:i32 = load %counter
-    %5:i32 = add %4, 1i
-    store %counter, %5
-    %6:i32 = load %counter
-    ret %6
+%i = func():i32 {
+  $B2: {
+    %5:i32 = load %counter
+    %6:i32 = add %5, 1i
+    store %counter, %6
+    %7:i32 = load %counter
+    ret %7
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_a:ptr<uniform, array<mat4x3<f32>, 4>, read> = let %a
-    %9:i32 = call %i
-    %p_a_i:ptr<uniform, mat4x3<f32>, read> = access %p_a, %9
-    %11:i32 = call %i
-    %p_a_i_i:ptr<uniform, vec3<f32>, read> = access %p_a_i, %11
-    %l_a:array<mat4x3<f32>, 4> = load %p_a
-    %l_a_i:mat4x3<f32> = load %p_a_i
-    %l_a_i_i:vec3<f32> = load %p_a_i_i
+    %10:i32 = call %i
+    %11:ptr<uniform, mat4x3<f32>, read> = access %p_a, %10
+    %p_a_i:ptr<uniform, mat4x3<f32>, read> = let %11
+    %13:i32 = call %i
+    %14:ptr<uniform, vec3<f32>, read> = access %p_a_i, %13
+    %p_a_i_i:ptr<uniform, vec3<f32>, read> = let %14
+    %16:array<mat4x3<f32>, 4> = load %p_a
+    %l_a:array<mat4x3<f32>, 4> = let %16
+    %18:mat4x3<f32> = load %p_a_i
+    %l_a_i:mat4x3<f32> = let %18
+    %20:vec3<f32> = load %p_a_i_i
+    %l_a_i_i:vec3<f32> = let %20
+    %22:f32 = load_vector_element %p_a_i_i, 0u
+    %23:f32 = access %l_a, 0i, 0i, 0u
+    %24:f32 = add %22, %23
+    %25:f32 = access %l_a_i, 0i, 0u
+    %26:f32 = add %24, %25
+    %27:f32 = access %l_a_i_i, 0u
+    %28:f32 = add %26, %27
+    store %s, %28
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat4x3_f32/static_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat4x3_f32/static_index_via_ptr.wgsl.expected.ir.msl
index a5c5359..3bb2007 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x3_f32/static_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat4x3_f32/static_index_via_ptr.wgsl.expected.ir.msl
@@ -1,17 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %a:ptr<uniform, array<mat4x3<f32>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f32, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %p_a:ptr<uniform, array<mat4x3<f32>, 4>, read> = let %a
-    %p_a_2:ptr<uniform, mat4x3<f32>, read> = access %p_a, 2i
-    %p_a_2_1:ptr<uniform, vec3<f32>, read> = access %p_a_2, 1i
-    %l_a:array<mat4x3<f32>, 4> = load %p_a
-    %l_a_i:mat4x3<f32> = load %p_a_2
-    %l_a_i_i:vec3<f32> = load %p_a_2_1
+    %5:ptr<uniform, mat4x3<f32>, read> = access %p_a, 2i
+    %p_a_2:ptr<uniform, mat4x3<f32>, read> = let %5
+    %7:ptr<uniform, vec3<f32>, read> = access %p_a_2, 1i
+    %p_a_2_1:ptr<uniform, vec3<f32>, read> = let %7
+    %9:array<mat4x3<f32>, 4> = load %p_a
+    %l_a:array<mat4x3<f32>, 4> = let %9
+    %11:mat4x3<f32> = load %p_a_2
+    %l_a_i:mat4x3<f32> = let %11
+    %13:vec3<f32> = load %p_a_2_1
+    %l_a_i_i:vec3<f32> = let %13
+    %15:f32 = load_vector_element %p_a_2_1, 0u
+    %16:f32 = access %l_a, 0i, 0i, 0u
+    %17:f32 = add %15, %16
+    %18:f32 = access %l_a_i, 0i, 0u
+    %19:f32 = add %17, %18
+    %20:f32 = access %l_a_i_i, 0u
+    %21:f32 = add %19, %20
+    store %s, %21
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat4x3_f32/to_builtin.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat4x3_f32/to_builtin.wgsl.expected.ir.msl
index 326ff09..57a74ba 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x3_f32/to_builtin.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat4x3_f32/to_builtin.wgsl.expected.ir.msl
@@ -1,23 +1,34 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat4x3<f32>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f32, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %3:ptr<uniform, mat4x3<f32>, read> = access %u, 2i
-    %4:mat4x3<f32> = load %3
-    %t:mat3x4<f32> = transpose %4
-    %6:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1i
-    %7:vec3<f32> = load %6
-    %8:vec3<f32> = swizzle %7, zxy
-    %l:f32 = length %8
-    %10:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1i
-    %11:vec3<f32> = load %10
-    %12:vec3<f32> = swizzle %11, zxy
-    %13:f32 = access %12, 0u
-    %a:f32 = abs %13
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %4:ptr<uniform, mat4x3<f32>, read> = access %u, 2i
+    %5:mat4x3<f32> = load %4
+    %6:mat3x4<f32> = transpose %5
+    %t:mat3x4<f32> = let %6
+    %8:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1i
+    %9:vec3<f32> = load %8
+    %10:vec3<f32> = swizzle %9, zxy
+    %11:f32 = length %10
+    %l:f32 = let %11
+    %13:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1i
+    %14:vec3<f32> = load %13
+    %15:vec3<f32> = swizzle %14, zxy
+    %16:f32 = access %15, 0u
+    %17:f32 = abs %16
+    %a:f32 = let %17
+    %19:f32 = access %t, 0i, 0u
+    %20:f32 = construct %l
+    %21:f32 = add %19, %20
+    %22:f32 = let %21
+    %23:f32 = construct %a
+    %24:f32 = add %22, %23
+    store %s, %24
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat4x3_f32/to_fn.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat4x3_f32/to_fn.wgsl.expected.ir.msl
index 914a921..1d68a3c 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x3_f32/to_fn.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat4x3_f32/to_fn.wgsl.expected.ir.msl
@@ -1,45 +1,56 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat4x3<f32>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f32, read_write> = var @binding_point(0, 1)
 }
 
-%a = func(%a_1:array<mat4x3<f32>, 4>):void -> %b2 {  # %a_1: 'a'
-  %b2 = block {
-    ret
+%a = func(%a_1:array<mat4x3<f32>, 4>):f32 {  # %a_1: 'a'
+  $B2: {
+    %5:f32 = access %a_1, 0i, 0i, 0u
+    ret %5
   }
 }
-%b = func(%m:mat4x3<f32>):void -> %b3 {
-  %b3 = block {
-    ret
+%b = func(%m:mat4x3<f32>):f32 {
+  $B3: {
+    %8:f32 = access %m, 0i, 0u
+    ret %8
   }
 }
-%c = func(%v:vec3<f32>):void -> %b4 {
-  %b4 = block {
-    ret
+%c = func(%v:vec3<f32>):f32 {
+  $B4: {
+    %11:f32 = access %v, 0u
+    ret %11
   }
 }
-%d = func(%f:f32):void -> %b5 {
-  %b5 = block {
-    ret
+%d = func(%f:f32):f32 {
+  $B5: {
+    ret %f
   }
 }
-%f_1 = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {  # %f_1: 'f'
-  %b6 = block {
-    %11:array<mat4x3<f32>, 4> = load %u
-    %12:void = call %a, %11
-    %13:ptr<uniform, mat4x3<f32>, read> = access %u, 1i
-    %14:mat4x3<f32> = load %13
-    %15:void = call %b, %14
-    %16:ptr<uniform, vec3<f32>, read> = access %u, 1i, 0i
-    %17:vec3<f32> = load %16
-    %18:vec3<f32> = swizzle %17, zxy
-    %19:void = call %c, %18
-    %20:ptr<uniform, vec3<f32>, read> = access %u, 1i, 0i
-    %21:vec3<f32> = load %20
-    %22:vec3<f32> = swizzle %21, zxy
-    %23:f32 = access %22, 0u
-    %24:void = call %d, %23
+%f_1 = @compute @workgroup_size(1, 1, 1) func():void {  # %f_1: 'f'
+  $B6: {
+    %15:array<mat4x3<f32>, 4> = load %u
+    %16:f32 = call %a, %15
+    %17:f32 = let %16
+    %18:ptr<uniform, mat4x3<f32>, read> = access %u, 1i
+    %19:mat4x3<f32> = load %18
+    %20:f32 = call %b, %19
+    %21:f32 = add %17, %20
+    %22:f32 = let %21
+    %23:ptr<uniform, vec3<f32>, read> = access %u, 1i, 0i
+    %24:vec3<f32> = load %23
+    %25:vec3<f32> = swizzle %24, zxy
+    %26:f32 = call %c, %25
+    %27:f32 = add %22, %26
+    %28:f32 = let %27
+    %29:ptr<uniform, vec3<f32>, read> = access %u, 1i, 0i
+    %30:vec3<f32> = load %29
+    %31:vec3<f32> = swizzle %30, zxy
+    %32:f32 = access %31, 0u
+    %33:f32 = call %d, %32
+    %34:f32 = add %28, %33
+    store %s, %34
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat4x3_f32/to_private.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat4x3_f32/to_private.wgsl.expected.ir.msl
index 6eb409e..1fda10a 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x3_f32/to_private.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat4x3_f32/to_private.wgsl.expected.ir.msl
@@ -1,27 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat4x3<f32>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f32, read_write> = var @binding_point(0, 1)
   %p:ptr<private, array<mat4x3<f32>, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:array<mat4x3<f32>, 4> = load %u
-    store %p, %4
-    %5:ptr<private, mat4x3<f32>, read_write> = access %p, 1i
-    %6:ptr<uniform, mat4x3<f32>, read> = access %u, 2i
-    %7:mat4x3<f32> = load %6
-    store %5, %7
-    %8:ptr<private, vec3<f32>, read_write> = access %p, 1i, 0i
-    %9:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1i
-    %10:vec3<f32> = load %9
-    %11:vec3<f32> = swizzle %10, zxy
-    store %8, %11
-    %12:ptr<private, vec3<f32>, read_write> = access %p, 1i, 0i
-    %13:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1i
-    %14:f32 = load_vector_element %13, 0u
-    store_vector_element %12, 0u, %14
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %5:array<mat4x3<f32>, 4> = load %u
+    store %p, %5
+    %6:ptr<private, mat4x3<f32>, read_write> = access %p, 1i
+    %7:ptr<uniform, mat4x3<f32>, read> = access %u, 2i
+    %8:mat4x3<f32> = load %7
+    store %6, %8
+    %9:ptr<private, vec3<f32>, read_write> = access %p, 1i, 0i
+    %10:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1i
+    %11:vec3<f32> = load %10
+    %12:vec3<f32> = swizzle %11, zxy
+    store %9, %12
+    %13:ptr<private, vec3<f32>, read_write> = access %p, 1i, 0i
+    %14:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1i
+    %15:f32 = load_vector_element %14, 0u
+    store_vector_element %13, 0u, %15
+    %16:ptr<private, vec3<f32>, read_write> = access %p, 1i, 0i
+    %17:f32 = load_vector_element %16, 0u
+    store %s, %17
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat4x3_f32/to_storage.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat4x3_f32/to_storage.wgsl.expected.ir.msl
index d015b00..7a463f6 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x3_f32/to_storage.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat4x3_f32/to_storage.wgsl.expected.ir.msl
@@ -1,27 +1,70 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat4x3<f32>, 4>, read> = var @binding_point(0, 0)
   %s:ptr<storage, array<mat4x3<f32>, 4>, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:array<mat4x3<f32>, 4> = load %u
-    store %s, %4
-    %5:ptr<storage, mat4x3<f32>, read_write> = access %s, 1i
-    %6:ptr<uniform, mat4x3<f32>, read> = access %u, 2i
-    %7:mat4x3<f32> = load %6
-    store %5, %7
-    %8:ptr<storage, vec3<f32>, read_write> = access %s, 1i, 0i
-    %9:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1i
-    %10:vec3<f32> = load %9
-    %11:vec3<f32> = swizzle %10, zxy
-    store %8, %11
+    %5:void = call %tint_store_and_preserve_padding, %s, %4
+    %7:ptr<storage, mat4x3<f32>, read_write> = access %s, 1i
+    %8:ptr<uniform, mat4x3<f32>, read> = access %u, 2i
+    %9:mat4x3<f32> = load %8
+    %10:void = call %tint_store_and_preserve_padding_1, %7, %9
     %12:ptr<storage, vec3<f32>, read_write> = access %s, 1i, 0i
     %13:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1i
-    %14:f32 = load_vector_element %13, 0u
-    store_vector_element %12, 0u, %14
+    %14:vec3<f32> = load %13
+    %15:vec3<f32> = swizzle %14, zxy
+    store %12, %15
+    %16:ptr<storage, vec3<f32>, read_write> = access %s, 1i, 0i
+    %17:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1i
+    %18:f32 = load_vector_element %17, 0u
+    store_vector_element %16, 0u, %18
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, array<mat4x3<f32>, 4>, read_write>, %value_param:array<mat4x3<f32>, 4>):void {
+  $B3: {
+    loop [i: $B4, b: $B5, c: $B6] {  # loop_1
+      $B4: {  # initializer
+        next_iteration 0u  # -> $B5
+      }
+      $B5 (%idx:u32): {  # body
+        %22:bool = gte %idx, 4u
+        if %22 [t: $B7] {  # if_1
+          $B7: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %23:ptr<storage, mat4x3<f32>, read_write> = access %target, %idx
+        %24:mat4x3<f32> = access %value_param, %idx
+        %25:void = call %tint_store_and_preserve_padding_1, %23, %24
+        continue  # -> $B6
+      }
+      $B6: {  # continuing
+        %26:u32 = add %idx, 1u
+        next_iteration %26  # -> $B5
+      }
+    }
+    ret
+  }
+}
+%tint_store_and_preserve_padding_1 = func(%target_1:ptr<storage, mat4x3<f32>, read_write>, %value_param_1:mat4x3<f32>):void {  # %tint_store_and_preserve_padding_1: 'tint_store_and_preserve_padding', %target_1: 'target', %value_param_1: 'value_param'
+  $B8: {
+    %29:ptr<storage, vec3<f32>, read_write> = access %target_1, 0u
+    %30:vec3<f32> = access %value_param_1, 0u
+    store %29, %30
+    %31:ptr<storage, vec3<f32>, read_write> = access %target_1, 1u
+    %32:vec3<f32> = access %value_param_1, 1u
+    store %31, %32
+    %33:ptr<storage, vec3<f32>, read_write> = access %target_1, 2u
+    %34:vec3<f32> = access %value_param_1, 2u
+    store %33, %34
+    %35:ptr<storage, vec3<f32>, read_write> = access %target_1, 3u
+    %36:vec3<f32> = access %value_param_1, 3u
+    store %35, %36
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat4x3_f32/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat4x3_f32/to_workgroup.wgsl.expected.ir.msl
index 7e32bb2..0e2863a 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x3_f32/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat4x3_f32/to_workgroup.wgsl.expected.ir.msl
@@ -1,27 +1,48 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat4x3<f32>, 4>, read> = var @binding_point(0, 0)
   %w:ptr<workgroup, array<mat4x3<f32>, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:array<mat4x3<f32>, 4> = load %u
-    store %w, %4
-    %5:ptr<workgroup, mat4x3<f32>, read_write> = access %w, 1i
-    %6:ptr<uniform, mat4x3<f32>, read> = access %u, 2i
-    %7:mat4x3<f32> = load %6
-    store %5, %7
-    %8:ptr<workgroup, vec3<f32>, read_write> = access %w, 1i, 0i
-    %9:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1i
-    %10:vec3<f32> = load %9
-    %11:vec3<f32> = swizzle %10, zxy
-    store %8, %11
-    %12:ptr<workgroup, vec3<f32>, read_write> = access %w, 1i, 0i
-    %13:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1i
-    %14:f32 = load_vector_element %13, 0u
-    store_vector_element %12, 0u, %14
+%f = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B2: {
+    loop [i: $B3, b: $B4, c: $B5] {  # loop_1
+      $B3: {  # initializer
+        next_iteration %tint_local_index  # -> $B4
+      }
+      $B4 (%idx:u32): {  # body
+        %6:bool = gte %idx, 4u
+        if %6 [t: $B6] {  # if_1
+          $B6: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %7:ptr<workgroup, mat4x3<f32>, read_write> = access %w, %idx
+        store %7, mat4x3<f32>(vec3<f32>(0.0f))
+        continue  # -> $B5
+      }
+      $B5: {  # continuing
+        %8:u32 = add %idx, 1u
+        next_iteration %8  # -> $B4
+      }
+    }
+    %9:void = msl.threadgroup_barrier 4u
+    %10:array<mat4x3<f32>, 4> = load %u
+    store %w, %10
+    %11:ptr<workgroup, mat4x3<f32>, read_write> = access %w, 1i
+    %12:ptr<uniform, mat4x3<f32>, read> = access %u, 2i
+    %13:mat4x3<f32> = load %12
+    store %11, %13
+    %14:ptr<workgroup, vec3<f32>, read_write> = access %w, 1i, 0i
+    %15:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1i
+    %16:vec3<f32> = load %15
+    %17:vec3<f32> = swizzle %16, zxy
+    store %14, %17
+    %18:ptr<workgroup, vec3<f32>, read_write> = access %w, 1i, 0i
+    %19:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1i
+    %20:f32 = load_vector_element %19, 0u
+    store_vector_element %18, 0u, %20
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat4x4_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat4x4_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
index 021c37f..863554e 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x4_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat4x4_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
@@ -1,29 +1,43 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %a:ptr<uniform, array<mat4x4<f16>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f16, read_write> = var @binding_point(0, 1)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
-    %4:i32 = load %counter
-    %5:i32 = add %4, 1i
-    store %counter, %5
-    %6:i32 = load %counter
-    ret %6
+%i = func():i32 {
+  $B2: {
+    %5:i32 = load %counter
+    %6:i32 = add %5, 1i
+    store %counter, %6
+    %7:i32 = load %counter
+    ret %7
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_a:ptr<uniform, array<mat4x4<f16>, 4>, read> = let %a
-    %9:i32 = call %i
-    %p_a_i:ptr<uniform, mat4x4<f16>, read> = access %p_a, %9
-    %11:i32 = call %i
-    %p_a_i_i:ptr<uniform, vec4<f16>, read> = access %p_a_i, %11
-    %l_a:array<mat4x4<f16>, 4> = load %p_a
-    %l_a_i:mat4x4<f16> = load %p_a_i
-    %l_a_i_i:vec4<f16> = load %p_a_i_i
+    %10:i32 = call %i
+    %11:ptr<uniform, mat4x4<f16>, read> = access %p_a, %10
+    %p_a_i:ptr<uniform, mat4x4<f16>, read> = let %11
+    %13:i32 = call %i
+    %14:ptr<uniform, vec4<f16>, read> = access %p_a_i, %13
+    %p_a_i_i:ptr<uniform, vec4<f16>, read> = let %14
+    %16:array<mat4x4<f16>, 4> = load %p_a
+    %l_a:array<mat4x4<f16>, 4> = let %16
+    %18:mat4x4<f16> = load %p_a_i
+    %l_a_i:mat4x4<f16> = let %18
+    %20:vec4<f16> = load %p_a_i_i
+    %l_a_i_i:vec4<f16> = let %20
+    %22:f16 = load_vector_element %p_a_i_i, 0u
+    %23:f16 = access %l_a, 0i, 0i, 0u
+    %24:f16 = add %22, %23
+    %25:f16 = access %l_a_i, 0i, 0u
+    %26:f16 = add %24, %25
+    %27:f16 = access %l_a_i_i, 0u
+    %28:f16 = add %26, %27
+    store %s, %28
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat4x4_f16/static_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat4x4_f16/static_index_via_ptr.wgsl.expected.ir.msl
index 686aa97..19984e1 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x4_f16/static_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat4x4_f16/static_index_via_ptr.wgsl.expected.ir.msl
@@ -1,17 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %a:ptr<uniform, array<mat4x4<f16>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f16, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %p_a:ptr<uniform, array<mat4x4<f16>, 4>, read> = let %a
-    %p_a_2:ptr<uniform, mat4x4<f16>, read> = access %p_a, 2i
-    %p_a_2_1:ptr<uniform, vec4<f16>, read> = access %p_a_2, 1i
-    %l_a:array<mat4x4<f16>, 4> = load %p_a
-    %l_a_i:mat4x4<f16> = load %p_a_2
-    %l_a_i_i:vec4<f16> = load %p_a_2_1
+    %5:ptr<uniform, mat4x4<f16>, read> = access %p_a, 2i
+    %p_a_2:ptr<uniform, mat4x4<f16>, read> = let %5
+    %7:ptr<uniform, vec4<f16>, read> = access %p_a_2, 1i
+    %p_a_2_1:ptr<uniform, vec4<f16>, read> = let %7
+    %9:array<mat4x4<f16>, 4> = load %p_a
+    %l_a:array<mat4x4<f16>, 4> = let %9
+    %11:mat4x4<f16> = load %p_a_2
+    %l_a_i:mat4x4<f16> = let %11
+    %13:vec4<f16> = load %p_a_2_1
+    %l_a_i_i:vec4<f16> = let %13
+    %15:f16 = load_vector_element %p_a_2_1, 0u
+    %16:f16 = access %l_a, 0i, 0i, 0u
+    %17:f16 = add %15, %16
+    %18:f16 = access %l_a_i, 0i, 0u
+    %19:f16 = add %17, %18
+    %20:f16 = access %l_a_i_i, 0u
+    %21:f16 = add %19, %20
+    store %s, %21
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat4x4_f16/to_builtin.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat4x4_f16/to_builtin.wgsl.expected.ir.msl
index 0690293..d99cf0f 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x4_f16/to_builtin.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat4x4_f16/to_builtin.wgsl.expected.ir.msl
@@ -1,23 +1,34 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat4x4<f16>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f16, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %3:ptr<uniform, mat4x4<f16>, read> = access %u, 2i
-    %4:mat4x4<f16> = load %3
-    %t:mat4x4<f16> = transpose %4
-    %6:ptr<uniform, vec4<f16>, read> = access %u, 0i, 1i
-    %7:vec4<f16> = load %6
-    %8:vec4<f16> = swizzle %7, ywxz
-    %l:f16 = length %8
-    %10:ptr<uniform, vec4<f16>, read> = access %u, 0i, 1i
-    %11:vec4<f16> = load %10
-    %12:vec4<f16> = swizzle %11, ywxz
-    %13:f16 = access %12, 0u
-    %a:f16 = abs %13
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %4:ptr<uniform, mat4x4<f16>, read> = access %u, 2i
+    %5:mat4x4<f16> = load %4
+    %6:mat4x4<f16> = transpose %5
+    %t:mat4x4<f16> = let %6
+    %8:ptr<uniform, vec4<f16>, read> = access %u, 0i, 1i
+    %9:vec4<f16> = load %8
+    %10:vec4<f16> = swizzle %9, ywxz
+    %11:f16 = length %10
+    %l:f16 = let %11
+    %13:ptr<uniform, vec4<f16>, read> = access %u, 0i, 1i
+    %14:vec4<f16> = load %13
+    %15:vec4<f16> = swizzle %14, ywxz
+    %16:f16 = access %15, 0u
+    %17:f16 = abs %16
+    %a:f16 = let %17
+    %19:f16 = access %t, 0i, 0u
+    %20:f16 = construct %l
+    %21:f16 = add %19, %20
+    %22:f16 = let %21
+    %23:f16 = construct %a
+    %24:f16 = add %22, %23
+    store %s, %24
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat4x4_f16/to_fn.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat4x4_f16/to_fn.wgsl.expected.ir.msl
index 36a3da5..bb5be48 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x4_f16/to_fn.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat4x4_f16/to_fn.wgsl.expected.ir.msl
@@ -1,45 +1,56 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat4x4<f16>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f16, read_write> = var @binding_point(0, 1)
 }
 
-%a = func(%a_1:array<mat4x4<f16>, 4>):void -> %b2 {  # %a_1: 'a'
-  %b2 = block {
-    ret
+%a = func(%a_1:array<mat4x4<f16>, 4>):f16 {  # %a_1: 'a'
+  $B2: {
+    %5:f16 = access %a_1, 0i, 0i, 0u
+    ret %5
   }
 }
-%b = func(%m:mat4x4<f16>):void -> %b3 {
-  %b3 = block {
-    ret
+%b = func(%m:mat4x4<f16>):f16 {
+  $B3: {
+    %8:f16 = access %m, 0i, 0u
+    ret %8
   }
 }
-%c = func(%v:vec4<f16>):void -> %b4 {
-  %b4 = block {
-    ret
+%c = func(%v:vec4<f16>):f16 {
+  $B4: {
+    %11:f16 = access %v, 0u
+    ret %11
   }
 }
-%d = func(%f:f16):void -> %b5 {
-  %b5 = block {
-    ret
+%d = func(%f:f16):f16 {
+  $B5: {
+    ret %f
   }
 }
-%f_1 = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {  # %f_1: 'f'
-  %b6 = block {
-    %11:array<mat4x4<f16>, 4> = load %u
-    %12:void = call %a, %11
-    %13:ptr<uniform, mat4x4<f16>, read> = access %u, 1i
-    %14:mat4x4<f16> = load %13
-    %15:void = call %b, %14
-    %16:ptr<uniform, vec4<f16>, read> = access %u, 1i, 0i
-    %17:vec4<f16> = load %16
-    %18:vec4<f16> = swizzle %17, ywxz
-    %19:void = call %c, %18
-    %20:ptr<uniform, vec4<f16>, read> = access %u, 1i, 0i
-    %21:vec4<f16> = load %20
-    %22:vec4<f16> = swizzle %21, ywxz
-    %23:f16 = access %22, 0u
-    %24:void = call %d, %23
+%f_1 = @compute @workgroup_size(1, 1, 1) func():void {  # %f_1: 'f'
+  $B6: {
+    %15:array<mat4x4<f16>, 4> = load %u
+    %16:f16 = call %a, %15
+    %17:f16 = let %16
+    %18:ptr<uniform, mat4x4<f16>, read> = access %u, 1i
+    %19:mat4x4<f16> = load %18
+    %20:f16 = call %b, %19
+    %21:f16 = add %17, %20
+    %22:f16 = let %21
+    %23:ptr<uniform, vec4<f16>, read> = access %u, 1i, 0i
+    %24:vec4<f16> = load %23
+    %25:vec4<f16> = swizzle %24, ywxz
+    %26:f16 = call %c, %25
+    %27:f16 = add %22, %26
+    %28:f16 = let %27
+    %29:ptr<uniform, vec4<f16>, read> = access %u, 1i, 0i
+    %30:vec4<f16> = load %29
+    %31:vec4<f16> = swizzle %30, ywxz
+    %32:f16 = access %31, 0u
+    %33:f16 = call %d, %32
+    %34:f16 = add %28, %33
+    store %s, %34
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat4x4_f16/to_private.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat4x4_f16/to_private.wgsl.expected.ir.msl
index aca0afd..7673f73 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x4_f16/to_private.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat4x4_f16/to_private.wgsl.expected.ir.msl
@@ -1,27 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat4x4<f16>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f16, read_write> = var @binding_point(0, 1)
   %p:ptr<private, array<mat4x4<f16>, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:array<mat4x4<f16>, 4> = load %u
-    store %p, %4
-    %5:ptr<private, mat4x4<f16>, read_write> = access %p, 1i
-    %6:ptr<uniform, mat4x4<f16>, read> = access %u, 2i
-    %7:mat4x4<f16> = load %6
-    store %5, %7
-    %8:ptr<private, vec4<f16>, read_write> = access %p, 1i, 0i
-    %9:ptr<uniform, vec4<f16>, read> = access %u, 0i, 1i
-    %10:vec4<f16> = load %9
-    %11:vec4<f16> = swizzle %10, ywxz
-    store %8, %11
-    %12:ptr<private, vec4<f16>, read_write> = access %p, 1i, 0i
-    %13:ptr<uniform, vec4<f16>, read> = access %u, 0i, 1i
-    %14:f16 = load_vector_element %13, 0u
-    store_vector_element %12, 0u, %14
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %5:array<mat4x4<f16>, 4> = load %u
+    store %p, %5
+    %6:ptr<private, mat4x4<f16>, read_write> = access %p, 1i
+    %7:ptr<uniform, mat4x4<f16>, read> = access %u, 2i
+    %8:mat4x4<f16> = load %7
+    store %6, %8
+    %9:ptr<private, vec4<f16>, read_write> = access %p, 1i, 0i
+    %10:ptr<uniform, vec4<f16>, read> = access %u, 0i, 1i
+    %11:vec4<f16> = load %10
+    %12:vec4<f16> = swizzle %11, ywxz
+    store %9, %12
+    %13:ptr<private, vec4<f16>, read_write> = access %p, 1i, 0i
+    %14:ptr<uniform, vec4<f16>, read> = access %u, 0i, 1i
+    %15:f16 = load_vector_element %14, 0u
+    store_vector_element %13, 0u, %15
+    %16:ptr<private, vec4<f16>, read_write> = access %p, 1i, 0i
+    %17:f16 = load_vector_element %16, 0u
+    store %s, %17
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat4x4_f16/to_storage.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat4x4_f16/to_storage.wgsl.expected.ir.msl
index 654eb2c..7b01bcc 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x4_f16/to_storage.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat4x4_f16/to_storage.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat4x4<f16>, 4>, read> = var @binding_point(0, 0)
   %s:ptr<storage, array<mat4x4<f16>, 4>, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:array<mat4x4<f16>, 4> = load %u
     store %s, %4
     %5:ptr<storage, mat4x4<f16>, read_write> = access %s, 1i
diff --git a/test/tint/buffer/uniform/std140/array/mat4x4_f16/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat4x4_f16/to_workgroup.wgsl.expected.ir.msl
index 7b3bb97..41a8eb4 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x4_f16/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat4x4_f16/to_workgroup.wgsl.expected.ir.msl
@@ -1,27 +1,48 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat4x4<f16>, 4>, read> = var @binding_point(0, 0)
   %w:ptr<workgroup, array<mat4x4<f16>, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:array<mat4x4<f16>, 4> = load %u
-    store %w, %4
-    %5:ptr<workgroup, mat4x4<f16>, read_write> = access %w, 1i
-    %6:ptr<uniform, mat4x4<f16>, read> = access %u, 2i
-    %7:mat4x4<f16> = load %6
-    store %5, %7
-    %8:ptr<workgroup, vec4<f16>, read_write> = access %w, 1i, 0i
-    %9:ptr<uniform, vec4<f16>, read> = access %u, 0i, 1i
-    %10:vec4<f16> = load %9
-    %11:vec4<f16> = swizzle %10, ywxz
-    store %8, %11
-    %12:ptr<workgroup, vec4<f16>, read_write> = access %w, 1i, 0i
-    %13:ptr<uniform, vec4<f16>, read> = access %u, 0i, 1i
-    %14:f16 = load_vector_element %13, 0u
-    store_vector_element %12, 0u, %14
+%f = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B2: {
+    loop [i: $B3, b: $B4, c: $B5] {  # loop_1
+      $B3: {  # initializer
+        next_iteration %tint_local_index  # -> $B4
+      }
+      $B4 (%idx:u32): {  # body
+        %6:bool = gte %idx, 4u
+        if %6 [t: $B6] {  # if_1
+          $B6: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %7:ptr<workgroup, mat4x4<f16>, read_write> = access %w, %idx
+        store %7, mat4x4<f16>(vec4<f16>(0.0h))
+        continue  # -> $B5
+      }
+      $B5: {  # continuing
+        %8:u32 = add %idx, 1u
+        next_iteration %8  # -> $B4
+      }
+    }
+    %9:void = msl.threadgroup_barrier 4u
+    %10:array<mat4x4<f16>, 4> = load %u
+    store %w, %10
+    %11:ptr<workgroup, mat4x4<f16>, read_write> = access %w, 1i
+    %12:ptr<uniform, mat4x4<f16>, read> = access %u, 2i
+    %13:mat4x4<f16> = load %12
+    store %11, %13
+    %14:ptr<workgroup, vec4<f16>, read_write> = access %w, 1i, 0i
+    %15:ptr<uniform, vec4<f16>, read> = access %u, 0i, 1i
+    %16:vec4<f16> = load %15
+    %17:vec4<f16> = swizzle %16, ywxz
+    store %14, %17
+    %18:ptr<workgroup, vec4<f16>, read_write> = access %w, 1i, 0i
+    %19:ptr<uniform, vec4<f16>, read> = access %u, 0i, 1i
+    %20:f16 = load_vector_element %19, 0u
+    store_vector_element %18, 0u, %20
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat4x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat4x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
index 8e31abf..336fdbe 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat4x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
@@ -1,29 +1,43 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %a:ptr<uniform, array<mat4x4<f32>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f32, read_write> = var @binding_point(0, 1)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
-    %4:i32 = load %counter
-    %5:i32 = add %4, 1i
-    store %counter, %5
-    %6:i32 = load %counter
-    ret %6
+%i = func():i32 {
+  $B2: {
+    %5:i32 = load %counter
+    %6:i32 = add %5, 1i
+    store %counter, %6
+    %7:i32 = load %counter
+    ret %7
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_a:ptr<uniform, array<mat4x4<f32>, 4>, read> = let %a
-    %9:i32 = call %i
-    %p_a_i:ptr<uniform, mat4x4<f32>, read> = access %p_a, %9
-    %11:i32 = call %i
-    %p_a_i_i:ptr<uniform, vec4<f32>, read> = access %p_a_i, %11
-    %l_a:array<mat4x4<f32>, 4> = load %p_a
-    %l_a_i:mat4x4<f32> = load %p_a_i
-    %l_a_i_i:vec4<f32> = load %p_a_i_i
+    %10:i32 = call %i
+    %11:ptr<uniform, mat4x4<f32>, read> = access %p_a, %10
+    %p_a_i:ptr<uniform, mat4x4<f32>, read> = let %11
+    %13:i32 = call %i
+    %14:ptr<uniform, vec4<f32>, read> = access %p_a_i, %13
+    %p_a_i_i:ptr<uniform, vec4<f32>, read> = let %14
+    %16:array<mat4x4<f32>, 4> = load %p_a
+    %l_a:array<mat4x4<f32>, 4> = let %16
+    %18:mat4x4<f32> = load %p_a_i
+    %l_a_i:mat4x4<f32> = let %18
+    %20:vec4<f32> = load %p_a_i_i
+    %l_a_i_i:vec4<f32> = let %20
+    %22:f32 = load_vector_element %p_a_i_i, 0u
+    %23:f32 = access %l_a, 0i, 0i, 0u
+    %24:f32 = add %22, %23
+    %25:f32 = access %l_a_i, 0i, 0u
+    %26:f32 = add %24, %25
+    %27:f32 = access %l_a_i_i, 0u
+    %28:f32 = add %26, %27
+    store %s, %28
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat4x4_f32/static_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat4x4_f32/static_index_via_ptr.wgsl.expected.ir.msl
index dac7881..3a2d273 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x4_f32/static_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat4x4_f32/static_index_via_ptr.wgsl.expected.ir.msl
@@ -1,17 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %a:ptr<uniform, array<mat4x4<f32>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f32, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %p_a:ptr<uniform, array<mat4x4<f32>, 4>, read> = let %a
-    %p_a_2:ptr<uniform, mat4x4<f32>, read> = access %p_a, 2i
-    %p_a_2_1:ptr<uniform, vec4<f32>, read> = access %p_a_2, 1i
-    %l_a:array<mat4x4<f32>, 4> = load %p_a
-    %l_a_i:mat4x4<f32> = load %p_a_2
-    %l_a_i_i:vec4<f32> = load %p_a_2_1
+    %5:ptr<uniform, mat4x4<f32>, read> = access %p_a, 2i
+    %p_a_2:ptr<uniform, mat4x4<f32>, read> = let %5
+    %7:ptr<uniform, vec4<f32>, read> = access %p_a_2, 1i
+    %p_a_2_1:ptr<uniform, vec4<f32>, read> = let %7
+    %9:array<mat4x4<f32>, 4> = load %p_a
+    %l_a:array<mat4x4<f32>, 4> = let %9
+    %11:mat4x4<f32> = load %p_a_2
+    %l_a_i:mat4x4<f32> = let %11
+    %13:vec4<f32> = load %p_a_2_1
+    %l_a_i_i:vec4<f32> = let %13
+    %15:f32 = load_vector_element %p_a_2_1, 0u
+    %16:f32 = access %l_a, 0i, 0i, 0u
+    %17:f32 = add %15, %16
+    %18:f32 = access %l_a_i, 0i, 0u
+    %19:f32 = add %17, %18
+    %20:f32 = access %l_a_i_i, 0u
+    %21:f32 = add %19, %20
+    store %s, %21
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat4x4_f32/to_builtin.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat4x4_f32/to_builtin.wgsl.expected.ir.msl
index b64c380..7dbaef6 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x4_f32/to_builtin.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat4x4_f32/to_builtin.wgsl.expected.ir.msl
@@ -1,23 +1,34 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat4x4<f32>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f32, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %3:ptr<uniform, mat4x4<f32>, read> = access %u, 2i
-    %4:mat4x4<f32> = load %3
-    %t:mat4x4<f32> = transpose %4
-    %6:ptr<uniform, vec4<f32>, read> = access %u, 0i, 1i
-    %7:vec4<f32> = load %6
-    %8:vec4<f32> = swizzle %7, ywxz
-    %l:f32 = length %8
-    %10:ptr<uniform, vec4<f32>, read> = access %u, 0i, 1i
-    %11:vec4<f32> = load %10
-    %12:vec4<f32> = swizzle %11, ywxz
-    %13:f32 = access %12, 0u
-    %a:f32 = abs %13
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %4:ptr<uniform, mat4x4<f32>, read> = access %u, 2i
+    %5:mat4x4<f32> = load %4
+    %6:mat4x4<f32> = transpose %5
+    %t:mat4x4<f32> = let %6
+    %8:ptr<uniform, vec4<f32>, read> = access %u, 0i, 1i
+    %9:vec4<f32> = load %8
+    %10:vec4<f32> = swizzle %9, ywxz
+    %11:f32 = length %10
+    %l:f32 = let %11
+    %13:ptr<uniform, vec4<f32>, read> = access %u, 0i, 1i
+    %14:vec4<f32> = load %13
+    %15:vec4<f32> = swizzle %14, ywxz
+    %16:f32 = access %15, 0u
+    %17:f32 = abs %16
+    %a:f32 = let %17
+    %19:f32 = access %t, 0i, 0u
+    %20:f32 = construct %l
+    %21:f32 = add %19, %20
+    %22:f32 = let %21
+    %23:f32 = construct %a
+    %24:f32 = add %22, %23
+    store %s, %24
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat4x4_f32/to_fn.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat4x4_f32/to_fn.wgsl.expected.ir.msl
index d7ed9d4..a8f60db 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x4_f32/to_fn.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat4x4_f32/to_fn.wgsl.expected.ir.msl
@@ -1,45 +1,56 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat4x4<f32>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f32, read_write> = var @binding_point(0, 1)
 }
 
-%a = func(%a_1:array<mat4x4<f32>, 4>):void -> %b2 {  # %a_1: 'a'
-  %b2 = block {
-    ret
+%a = func(%a_1:array<mat4x4<f32>, 4>):f32 {  # %a_1: 'a'
+  $B2: {
+    %5:f32 = access %a_1, 0i, 0i, 0u
+    ret %5
   }
 }
-%b = func(%m:mat4x4<f32>):void -> %b3 {
-  %b3 = block {
-    ret
+%b = func(%m:mat4x4<f32>):f32 {
+  $B3: {
+    %8:f32 = access %m, 0i, 0u
+    ret %8
   }
 }
-%c = func(%v:vec4<f32>):void -> %b4 {
-  %b4 = block {
-    ret
+%c = func(%v:vec4<f32>):f32 {
+  $B4: {
+    %11:f32 = access %v, 0u
+    ret %11
   }
 }
-%d = func(%f:f32):void -> %b5 {
-  %b5 = block {
-    ret
+%d = func(%f:f32):f32 {
+  $B5: {
+    ret %f
   }
 }
-%f_1 = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {  # %f_1: 'f'
-  %b6 = block {
-    %11:array<mat4x4<f32>, 4> = load %u
-    %12:void = call %a, %11
-    %13:ptr<uniform, mat4x4<f32>, read> = access %u, 1i
-    %14:mat4x4<f32> = load %13
-    %15:void = call %b, %14
-    %16:ptr<uniform, vec4<f32>, read> = access %u, 1i, 0i
-    %17:vec4<f32> = load %16
-    %18:vec4<f32> = swizzle %17, ywxz
-    %19:void = call %c, %18
-    %20:ptr<uniform, vec4<f32>, read> = access %u, 1i, 0i
-    %21:vec4<f32> = load %20
-    %22:vec4<f32> = swizzle %21, ywxz
-    %23:f32 = access %22, 0u
-    %24:void = call %d, %23
+%f_1 = @compute @workgroup_size(1, 1, 1) func():void {  # %f_1: 'f'
+  $B6: {
+    %15:array<mat4x4<f32>, 4> = load %u
+    %16:f32 = call %a, %15
+    %17:f32 = let %16
+    %18:ptr<uniform, mat4x4<f32>, read> = access %u, 1i
+    %19:mat4x4<f32> = load %18
+    %20:f32 = call %b, %19
+    %21:f32 = add %17, %20
+    %22:f32 = let %21
+    %23:ptr<uniform, vec4<f32>, read> = access %u, 1i, 0i
+    %24:vec4<f32> = load %23
+    %25:vec4<f32> = swizzle %24, ywxz
+    %26:f32 = call %c, %25
+    %27:f32 = add %22, %26
+    %28:f32 = let %27
+    %29:ptr<uniform, vec4<f32>, read> = access %u, 1i, 0i
+    %30:vec4<f32> = load %29
+    %31:vec4<f32> = swizzle %30, ywxz
+    %32:f32 = access %31, 0u
+    %33:f32 = call %d, %32
+    %34:f32 = add %28, %33
+    store %s, %34
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat4x4_f32/to_private.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat4x4_f32/to_private.wgsl.expected.ir.msl
index 5af12e4..9a95827 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x4_f32/to_private.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat4x4_f32/to_private.wgsl.expected.ir.msl
@@ -1,27 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat4x4<f32>, 4>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f32, read_write> = var @binding_point(0, 1)
   %p:ptr<private, array<mat4x4<f32>, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:array<mat4x4<f32>, 4> = load %u
-    store %p, %4
-    %5:ptr<private, mat4x4<f32>, read_write> = access %p, 1i
-    %6:ptr<uniform, mat4x4<f32>, read> = access %u, 2i
-    %7:mat4x4<f32> = load %6
-    store %5, %7
-    %8:ptr<private, vec4<f32>, read_write> = access %p, 1i, 0i
-    %9:ptr<uniform, vec4<f32>, read> = access %u, 0i, 1i
-    %10:vec4<f32> = load %9
-    %11:vec4<f32> = swizzle %10, ywxz
-    store %8, %11
-    %12:ptr<private, vec4<f32>, read_write> = access %p, 1i, 0i
-    %13:ptr<uniform, vec4<f32>, read> = access %u, 0i, 1i
-    %14:f32 = load_vector_element %13, 0u
-    store_vector_element %12, 0u, %14
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %5:array<mat4x4<f32>, 4> = load %u
+    store %p, %5
+    %6:ptr<private, mat4x4<f32>, read_write> = access %p, 1i
+    %7:ptr<uniform, mat4x4<f32>, read> = access %u, 2i
+    %8:mat4x4<f32> = load %7
+    store %6, %8
+    %9:ptr<private, vec4<f32>, read_write> = access %p, 1i, 0i
+    %10:ptr<uniform, vec4<f32>, read> = access %u, 0i, 1i
+    %11:vec4<f32> = load %10
+    %12:vec4<f32> = swizzle %11, ywxz
+    store %9, %12
+    %13:ptr<private, vec4<f32>, read_write> = access %p, 1i, 0i
+    %14:ptr<uniform, vec4<f32>, read> = access %u, 0i, 1i
+    %15:f32 = load_vector_element %14, 0u
+    store_vector_element %13, 0u, %15
+    %16:ptr<private, vec4<f32>, read_write> = access %p, 1i, 0i
+    %17:f32 = load_vector_element %16, 0u
+    store %s, %17
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/array/mat4x4_f32/to_storage.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat4x4_f32/to_storage.wgsl.expected.ir.msl
index 908cb40..0aefcc3 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x4_f32/to_storage.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat4x4_f32/to_storage.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat4x4<f32>, 4>, read> = var @binding_point(0, 0)
   %s:ptr<storage, array<mat4x4<f32>, 4>, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:array<mat4x4<f32>, 4> = load %u
     store %s, %4
     %5:ptr<storage, mat4x4<f32>, read_write> = access %s, 1i
diff --git a/test/tint/buffer/uniform/std140/array/mat4x4_f32/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/array/mat4x4_f32/to_workgroup.wgsl.expected.ir.msl
index 67968ab..7aea40c 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x4_f32/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/array/mat4x4_f32/to_workgroup.wgsl.expected.ir.msl
@@ -1,27 +1,48 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, array<mat4x4<f32>, 4>, read> = var @binding_point(0, 0)
   %w:ptr<workgroup, array<mat4x4<f32>, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:array<mat4x4<f32>, 4> = load %u
-    store %w, %4
-    %5:ptr<workgroup, mat4x4<f32>, read_write> = access %w, 1i
-    %6:ptr<uniform, mat4x4<f32>, read> = access %u, 2i
-    %7:mat4x4<f32> = load %6
-    store %5, %7
-    %8:ptr<workgroup, vec4<f32>, read_write> = access %w, 1i, 0i
-    %9:ptr<uniform, vec4<f32>, read> = access %u, 0i, 1i
-    %10:vec4<f32> = load %9
-    %11:vec4<f32> = swizzle %10, ywxz
-    store %8, %11
-    %12:ptr<workgroup, vec4<f32>, read_write> = access %w, 1i, 0i
-    %13:ptr<uniform, vec4<f32>, read> = access %u, 0i, 1i
-    %14:f32 = load_vector_element %13, 0u
-    store_vector_element %12, 0u, %14
+%f = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B2: {
+    loop [i: $B3, b: $B4, c: $B5] {  # loop_1
+      $B3: {  # initializer
+        next_iteration %tint_local_index  # -> $B4
+      }
+      $B4 (%idx:u32): {  # body
+        %6:bool = gte %idx, 4u
+        if %6 [t: $B6] {  # if_1
+          $B6: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %7:ptr<workgroup, mat4x4<f32>, read_write> = access %w, %idx
+        store %7, mat4x4<f32>(vec4<f32>(0.0f))
+        continue  # -> $B5
+      }
+      $B5: {  # continuing
+        %8:u32 = add %idx, 1u
+        next_iteration %8  # -> $B4
+      }
+    }
+    %9:void = msl.threadgroup_barrier 4u
+    %10:array<mat4x4<f32>, 4> = load %u
+    store %w, %10
+    %11:ptr<workgroup, mat4x4<f32>, read_write> = access %w, 1i
+    %12:ptr<uniform, mat4x4<f32>, read> = access %u, 2i
+    %13:mat4x4<f32> = load %12
+    store %11, %13
+    %14:ptr<workgroup, vec4<f32>, read_write> = access %w, 1i, 0i
+    %15:ptr<uniform, vec4<f32>, read> = access %u, 0i, 1i
+    %16:vec4<f32> = load %15
+    %17:vec4<f32> = swizzle %16, ywxz
+    store %14, %17
+    %18:ptr<workgroup, vec4<f32>, read_write> = access %w, 1i, 0i
+    %19:ptr<uniform, vec4<f32>, read> = access %u, 0i, 1i
+    %20:f32 = load_vector_element %19, 0u
+    store_vector_element %18, 0u, %20
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x2_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat2x2_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
index fbc617f..eb2f4f7 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x2_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x2_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Inner = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Inner = struct @align(4) {
   m:mat2x2<f16> @offset(0)
 }
 
@@ -8,13 +8,13 @@
   a:array<Inner, 4> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %a:ptr<uniform, array<Outer, 4>, read> = var @binding_point(0, 0)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
+%i = func():i32 {
+  $B2: {
     %4:i32 = load %counter
     %5:i32 = add %4, 1i
     store %counter, %5
@@ -22,25 +22,37 @@
     ret %6
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_a:ptr<uniform, array<Outer, 4>, read> = let %a
     %9:i32 = call %i
-    %p_a_i:ptr<uniform, Outer, read> = access %p_a, %9
-    %p_a_i_a:ptr<uniform, array<Inner, 4>, read> = access %p_a_i, 0u
-    %12:i32 = call %i
-    %p_a_i_a_i:ptr<uniform, Inner, read> = access %p_a_i_a, %12
-    %p_a_i_a_i_m:ptr<uniform, mat2x2<f16>, read> = access %p_a_i_a_i, 0u
-    %15:i32 = call %i
-    %p_a_i_a_i_m_i:ptr<uniform, vec2<f16>, read> = access %p_a_i_a_i_m, %15
-    %l_a:array<Outer, 4> = load %p_a
-    %l_a_i:Outer = load %p_a_i
-    %l_a_i_a:array<Inner, 4> = load %p_a_i_a
-    %l_a_i_a_i:Inner = load %p_a_i_a_i
-    %l_a_i_a_i_m:mat2x2<f16> = load %p_a_i_a_i_m
-    %l_a_i_a_i_m_i:vec2<f16> = load %p_a_i_a_i_m_i
-    %23:i32 = call %i
-    %l_a_i_a_i_m_i_i:f16 = load_vector_element %p_a_i_a_i_m_i, %23
+    %10:ptr<uniform, Outer, read> = access %p_a, %9
+    %p_a_i:ptr<uniform, Outer, read> = let %10
+    %12:ptr<uniform, array<Inner, 4>, read> = access %p_a_i, 0u
+    %p_a_i_a:ptr<uniform, array<Inner, 4>, read> = let %12
+    %14:i32 = call %i
+    %15:ptr<uniform, Inner, read> = access %p_a_i_a, %14
+    %p_a_i_a_i:ptr<uniform, Inner, read> = let %15
+    %17:ptr<uniform, mat2x2<f16>, read> = access %p_a_i_a_i, 0u
+    %p_a_i_a_i_m:ptr<uniform, mat2x2<f16>, read> = let %17
+    %19:i32 = call %i
+    %20:ptr<uniform, vec2<f16>, read> = access %p_a_i_a_i_m, %19
+    %p_a_i_a_i_m_i:ptr<uniform, vec2<f16>, read> = let %20
+    %22:array<Outer, 4> = load %p_a
+    %l_a:array<Outer, 4> = let %22
+    %24:Outer = load %p_a_i
+    %l_a_i:Outer = let %24
+    %26:array<Inner, 4> = load %p_a_i_a
+    %l_a_i_a:array<Inner, 4> = let %26
+    %28:Inner = load %p_a_i_a_i
+    %l_a_i_a_i:Inner = let %28
+    %30:mat2x2<f16> = load %p_a_i_a_i_m
+    %l_a_i_a_i_m:mat2x2<f16> = let %30
+    %32:vec2<f16> = load %p_a_i_a_i_m_i
+    %l_a_i_a_i_m_i:vec2<f16> = let %32
+    %34:i32 = call %i
+    %35:f16 = load_vector_element %p_a_i_a_i_m_i, %34
+    %l_a_i_a_i_m_i_i:f16 = let %35
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x2_f16/static_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat2x2_f16/static_index_via_ptr.wgsl.expected.ir.msl
index 8adb3af..6eb4d45 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x2_f16/static_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x2_f16/static_index_via_ptr.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Inner = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Inner = struct @align(4) {
   m:mat2x2<f16> @offset(0)
 }
 
@@ -8,25 +8,37 @@
   a:array<Inner, 4> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %a:ptr<uniform, array<Outer, 4>, read> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %p_a:ptr<uniform, array<Outer, 4>, read> = let %a
-    %p_a_3:ptr<uniform, Outer, read> = access %p_a, 3i
-    %p_a_3_a:ptr<uniform, array<Inner, 4>, read> = access %p_a_3, 0u
-    %p_a_3_a_2:ptr<uniform, Inner, read> = access %p_a_3_a, 2i
-    %p_a_3_a_2_m:ptr<uniform, mat2x2<f16>, read> = access %p_a_3_a_2, 0u
-    %p_a_3_a_2_m_1:ptr<uniform, vec2<f16>, read> = access %p_a_3_a_2_m, 1i
-    %l_a:array<Outer, 4> = load %p_a
-    %l_a_3:Outer = load %p_a_3
-    %l_a_3_a:array<Inner, 4> = load %p_a_3_a
-    %l_a_3_a_2:Inner = load %p_a_3_a_2
-    %l_a_3_a_2_m:mat2x2<f16> = load %p_a_3_a_2_m
-    %l_a_3_a_2_m_1:vec2<f16> = load %p_a_3_a_2_m_1
-    %l_a_3_a_2_m_1_0:f16 = load_vector_element %p_a_3_a_2_m_1, 0i
+    %4:ptr<uniform, Outer, read> = access %p_a, 3i
+    %p_a_3:ptr<uniform, Outer, read> = let %4
+    %6:ptr<uniform, array<Inner, 4>, read> = access %p_a_3, 0u
+    %p_a_3_a:ptr<uniform, array<Inner, 4>, read> = let %6
+    %8:ptr<uniform, Inner, read> = access %p_a_3_a, 2i
+    %p_a_3_a_2:ptr<uniform, Inner, read> = let %8
+    %10:ptr<uniform, mat2x2<f16>, read> = access %p_a_3_a_2, 0u
+    %p_a_3_a_2_m:ptr<uniform, mat2x2<f16>, read> = let %10
+    %12:ptr<uniform, vec2<f16>, read> = access %p_a_3_a_2_m, 1i
+    %p_a_3_a_2_m_1:ptr<uniform, vec2<f16>, read> = let %12
+    %14:array<Outer, 4> = load %p_a
+    %l_a:array<Outer, 4> = let %14
+    %16:Outer = load %p_a_3
+    %l_a_3:Outer = let %16
+    %18:array<Inner, 4> = load %p_a_3_a
+    %l_a_3_a:array<Inner, 4> = let %18
+    %20:Inner = load %p_a_3_a_2
+    %l_a_3_a_2:Inner = let %20
+    %22:mat2x2<f16> = load %p_a_3_a_2_m
+    %l_a_3_a_2_m:mat2x2<f16> = let %22
+    %24:vec2<f16> = load %p_a_3_a_2_m_1
+    %l_a_3_a_2_m_1:vec2<f16> = let %24
+    %26:f16 = load_vector_element %p_a_3_a_2_m_1, 0i
+    %l_a_3_a_2_m_1_0:f16 = let %26
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x2_f16/to_builtin.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat2x2_f16/to_builtin.wgsl.expected.ir.msl
index ee58ed5..c180b14 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x2_f16/to_builtin.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x2_f16/to_builtin.wgsl.expected.ir.msl
@@ -1,29 +1,32 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat2x2<f16> @offset(4)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %3:ptr<uniform, mat2x2<f16>, read> = access %u, 2i, 1u
     %4:mat2x2<f16> = load %3
-    %t:mat2x2<f16> = transpose %4
-    %6:ptr<uniform, vec2<f16>, read> = access %u, 0i, 1u, 1i
-    %7:vec2<f16> = load %6
-    %8:vec2<f16> = swizzle %7, yx
-    %l:f16 = length %8
-    %10:ptr<uniform, vec2<f16>, read> = access %u, 0i, 1u, 1i
-    %11:vec2<f16> = load %10
-    %12:vec2<f16> = swizzle %11, yx
-    %13:f16 = access %12, 0u
-    %a:f16 = abs %13
+    %5:mat2x2<f16> = transpose %4
+    %t:mat2x2<f16> = let %5
+    %7:ptr<uniform, vec2<f16>, read> = access %u, 0i, 1u, 1i
+    %8:vec2<f16> = load %7
+    %9:vec2<f16> = swizzle %8, yx
+    %10:f16 = length %9
+    %l:f16 = let %10
+    %12:ptr<uniform, vec2<f16>, read> = access %u, 0i, 1u, 1i
+    %13:vec2<f16> = load %12
+    %14:vec2<f16> = swizzle %13, yx
+    %15:f16 = access %14, 0u
+    %16:f16 = abs %15
+    %a:f16 = let %16
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x2_f16/to_fn.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat2x2_f16/to_fn.wgsl.expected.ir.msl
index 7b6f153..936106d 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x2_f16/to_fn.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x2_f16/to_fn.wgsl.expected.ir.msl
@@ -1,42 +1,42 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat2x2<f16> @offset(4)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
 }
 
-%a = func(%a_1:array<S, 4>):void -> %b2 {  # %a_1: 'a'
-  %b2 = block {
+%a = func(%a_1:array<S, 4>):void {  # %a_1: 'a'
+  $B2: {
     ret
   }
 }
-%b = func(%s:S):void -> %b3 {
-  %b3 = block {
+%b = func(%s:S):void {
+  $B3: {
     ret
   }
 }
-%c = func(%m:mat2x2<f16>):void -> %b4 {
-  %b4 = block {
+%c = func(%m:mat2x2<f16>):void {
+  $B4: {
     ret
   }
 }
-%d = func(%v:vec2<f16>):void -> %b5 {
-  %b5 = block {
+%d = func(%v:vec2<f16>):void {
+  $B5: {
     ret
   }
 }
-%e = func(%f:f16):void -> %b6 {
-  %b6 = block {
+%e = func(%f:f16):void {
+  $B6: {
     ret
   }
 }
-%f_1 = @compute @workgroup_size(1, 1, 1) func():void -> %b7 {  # %f_1: 'f'
-  %b7 = block {
+%f_1 = @compute @workgroup_size(1, 1, 1) func():void {  # %f_1: 'f'
+  $B7: {
     %13:array<S, 4> = load %u
     %14:void = call %a, %13
     %15:ptr<uniform, S, read> = access %u, 2i
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x2_f16/to_private.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat2x2_f16/to_private.wgsl.expected.ir.msl
index 9d19d27..d4123cf 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x2_f16/to_private.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x2_f16/to_private.wgsl.expected.ir.msl
@@ -1,18 +1,18 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat2x2<f16> @offset(4)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
   %p:ptr<private, array<S, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:array<S, 4> = load %u
     store %p, %4
     %5:ptr<private, S, read_write> = access %p, 1i
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x2_f16/to_storage.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat2x2_f16/to_storage.wgsl.expected.ir.msl
index 6f50496..6ad47f9 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x2_f16/to_storage.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x2_f16/to_storage.wgsl.expected.ir.msl
@@ -1,33 +1,73 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat2x2<f16> @offset(4)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
   %s:ptr<storage, array<S, 4>, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:array<S, 4> = load %u
-    store %s, %4
-    %5:ptr<storage, S, read_write> = access %s, 1i
-    %6:ptr<uniform, S, read> = access %u, 2i
-    %7:S = load %6
-    store %5, %7
-    %8:ptr<storage, mat2x2<f16>, read_write> = access %s, 3i, 1u
-    %9:ptr<uniform, mat2x2<f16>, read> = access %u, 2i, 1u
-    %10:mat2x2<f16> = load %9
-    store %8, %10
-    %11:ptr<storage, vec2<f16>, read_write> = access %s, 1i, 1u, 0i
-    %12:ptr<uniform, vec2<f16>, read> = access %u, 0i, 1u, 1i
-    %13:vec2<f16> = load %12
-    %14:vec2<f16> = swizzle %13, yx
-    store %11, %14
+    %5:void = call %tint_store_and_preserve_padding, %s, %4
+    %7:ptr<storage, S, read_write> = access %s, 1i
+    %8:ptr<uniform, S, read> = access %u, 2i
+    %9:S = load %8
+    %10:void = call %tint_store_and_preserve_padding_1, %7, %9
+    %12:ptr<storage, mat2x2<f16>, read_write> = access %s, 3i, 1u
+    %13:ptr<uniform, mat2x2<f16>, read> = access %u, 2i, 1u
+    %14:mat2x2<f16> = load %13
+    store %12, %14
+    %15:ptr<storage, vec2<f16>, read_write> = access %s, 1i, 1u, 0i
+    %16:ptr<uniform, vec2<f16>, read> = access %u, 0i, 1u, 1i
+    %17:vec2<f16> = load %16
+    %18:vec2<f16> = swizzle %17, yx
+    store %15, %18
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, array<S, 4>, read_write>, %value_param:array<S, 4>):void {
+  $B3: {
+    loop [i: $B4, b: $B5, c: $B6] {  # loop_1
+      $B4: {  # initializer
+        next_iteration 0u  # -> $B5
+      }
+      $B5 (%idx:u32): {  # body
+        %22:bool = gte %idx, 4u
+        if %22 [t: $B7] {  # if_1
+          $B7: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %23:ptr<storage, S, read_write> = access %target, %idx
+        %24:S = access %value_param, %idx
+        %25:void = call %tint_store_and_preserve_padding_1, %23, %24
+        continue  # -> $B6
+      }
+      $B6: {  # continuing
+        %26:u32 = add %idx, 1u
+        next_iteration %26  # -> $B5
+      }
+    }
+    ret
+  }
+}
+%tint_store_and_preserve_padding_1 = func(%target_1:ptr<storage, S, read_write>, %value_param_1:S):void {  # %tint_store_and_preserve_padding_1: 'tint_store_and_preserve_padding', %target_1: 'target', %value_param_1: 'value_param'
+  $B8: {
+    %29:ptr<storage, i32, read_write> = access %target_1, 0u
+    %30:i32 = access %value_param_1, 0u
+    store %29, %30
+    %31:ptr<storage, mat2x2<f16>, read_write> = access %target_1, 1u
+    %32:mat2x2<f16> = access %value_param_1, 1u
+    store %31, %32
+    %33:ptr<storage, i32, read_write> = access %target_1, 2u
+    %34:i32 = access %value_param_1, 2u
+    store %33, %34
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x2_f16/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat2x2_f16/to_workgroup.wgsl.expected.ir.msl
index 7448cf1..b943fa6 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x2_f16/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x2_f16/to_workgroup.wgsl.expected.ir.msl
@@ -1,33 +1,54 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat2x2<f16> @offset(4)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
   %w:ptr<workgroup, array<S, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:array<S, 4> = load %u
-    store %w, %4
-    %5:ptr<workgroup, S, read_write> = access %w, 1i
-    %6:ptr<uniform, S, read> = access %u, 2i
-    %7:S = load %6
-    store %5, %7
-    %8:ptr<workgroup, mat2x2<f16>, read_write> = access %w, 3i, 1u
-    %9:ptr<uniform, mat2x2<f16>, read> = access %u, 2i, 1u
-    %10:mat2x2<f16> = load %9
-    store %8, %10
-    %11:ptr<workgroup, vec2<f16>, read_write> = access %w, 1i, 1u, 0i
-    %12:ptr<uniform, vec2<f16>, read> = access %u, 0i, 1u, 1i
-    %13:vec2<f16> = load %12
-    %14:vec2<f16> = swizzle %13, yx
-    store %11, %14
+%f = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B2: {
+    loop [i: $B3, b: $B4, c: $B5] {  # loop_1
+      $B3: {  # initializer
+        next_iteration %tint_local_index  # -> $B4
+      }
+      $B4 (%idx:u32): {  # body
+        %6:bool = gte %idx, 4u
+        if %6 [t: $B6] {  # if_1
+          $B6: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %7:ptr<workgroup, S, read_write> = access %w, %idx
+        store %7, S(0i, mat2x2<f16>(vec2<f16>(0.0h)), 0i)
+        continue  # -> $B5
+      }
+      $B5: {  # continuing
+        %8:u32 = add %idx, 1u
+        next_iteration %8  # -> $B4
+      }
+    }
+    %9:void = msl.threadgroup_barrier 4u
+    %10:array<S, 4> = load %u
+    store %w, %10
+    %11:ptr<workgroup, S, read_write> = access %w, 1i
+    %12:ptr<uniform, S, read> = access %u, 2i
+    %13:S = load %12
+    store %11, %13
+    %14:ptr<workgroup, mat2x2<f16>, read_write> = access %w, 3i, 1u
+    %15:ptr<uniform, mat2x2<f16>, read> = access %u, 2i, 1u
+    %16:mat2x2<f16> = load %15
+    store %14, %16
+    %17:ptr<workgroup, vec2<f16>, read_write> = access %w, 1i, 1u, 0i
+    %18:ptr<uniform, vec2<f16>, read> = access %u, 0i, 1u, 1i
+    %19:vec2<f16> = load %18
+    %20:vec2<f16> = swizzle %19, yx
+    store %17, %20
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x2_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat2x2_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
index ae44278..4132c7f 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x2_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x2_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Inner = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Inner = struct @align(8) {
   m:mat2x2<f32> @offset(0)
 }
 
@@ -8,13 +8,13 @@
   a:array<Inner, 4> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %a:ptr<uniform, array<Outer, 4>, read> = var @binding_point(0, 0)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
+%i = func():i32 {
+  $B2: {
     %4:i32 = load %counter
     %5:i32 = add %4, 1i
     store %counter, %5
@@ -22,25 +22,37 @@
     ret %6
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_a:ptr<uniform, array<Outer, 4>, read> = let %a
     %9:i32 = call %i
-    %p_a_i:ptr<uniform, Outer, read> = access %p_a, %9
-    %p_a_i_a:ptr<uniform, array<Inner, 4>, read> = access %p_a_i, 0u
-    %12:i32 = call %i
-    %p_a_i_a_i:ptr<uniform, Inner, read> = access %p_a_i_a, %12
-    %p_a_i_a_i_m:ptr<uniform, mat2x2<f32>, read> = access %p_a_i_a_i, 0u
-    %15:i32 = call %i
-    %p_a_i_a_i_m_i:ptr<uniform, vec2<f32>, read> = access %p_a_i_a_i_m, %15
-    %l_a:array<Outer, 4> = load %p_a
-    %l_a_i:Outer = load %p_a_i
-    %l_a_i_a:array<Inner, 4> = load %p_a_i_a
-    %l_a_i_a_i:Inner = load %p_a_i_a_i
-    %l_a_i_a_i_m:mat2x2<f32> = load %p_a_i_a_i_m
-    %l_a_i_a_i_m_i:vec2<f32> = load %p_a_i_a_i_m_i
-    %23:i32 = call %i
-    %l_a_i_a_i_m_i_i:f32 = load_vector_element %p_a_i_a_i_m_i, %23
+    %10:ptr<uniform, Outer, read> = access %p_a, %9
+    %p_a_i:ptr<uniform, Outer, read> = let %10
+    %12:ptr<uniform, array<Inner, 4>, read> = access %p_a_i, 0u
+    %p_a_i_a:ptr<uniform, array<Inner, 4>, read> = let %12
+    %14:i32 = call %i
+    %15:ptr<uniform, Inner, read> = access %p_a_i_a, %14
+    %p_a_i_a_i:ptr<uniform, Inner, read> = let %15
+    %17:ptr<uniform, mat2x2<f32>, read> = access %p_a_i_a_i, 0u
+    %p_a_i_a_i_m:ptr<uniform, mat2x2<f32>, read> = let %17
+    %19:i32 = call %i
+    %20:ptr<uniform, vec2<f32>, read> = access %p_a_i_a_i_m, %19
+    %p_a_i_a_i_m_i:ptr<uniform, vec2<f32>, read> = let %20
+    %22:array<Outer, 4> = load %p_a
+    %l_a:array<Outer, 4> = let %22
+    %24:Outer = load %p_a_i
+    %l_a_i:Outer = let %24
+    %26:array<Inner, 4> = load %p_a_i_a
+    %l_a_i_a:array<Inner, 4> = let %26
+    %28:Inner = load %p_a_i_a_i
+    %l_a_i_a_i:Inner = let %28
+    %30:mat2x2<f32> = load %p_a_i_a_i_m
+    %l_a_i_a_i_m:mat2x2<f32> = let %30
+    %32:vec2<f32> = load %p_a_i_a_i_m_i
+    %l_a_i_a_i_m_i:vec2<f32> = let %32
+    %34:i32 = call %i
+    %35:f32 = load_vector_element %p_a_i_a_i_m_i, %34
+    %l_a_i_a_i_m_i_i:f32 = let %35
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x2_f32/static_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat2x2_f32/static_index_via_ptr.wgsl.expected.ir.msl
index 5831ff8..43df577 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x2_f32/static_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x2_f32/static_index_via_ptr.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Inner = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Inner = struct @align(8) {
   m:mat2x2<f32> @offset(0)
 }
 
@@ -8,25 +8,37 @@
   a:array<Inner, 4> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %a:ptr<uniform, array<Outer, 4>, read> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %p_a:ptr<uniform, array<Outer, 4>, read> = let %a
-    %p_a_3:ptr<uniform, Outer, read> = access %p_a, 3i
-    %p_a_3_a:ptr<uniform, array<Inner, 4>, read> = access %p_a_3, 0u
-    %p_a_3_a_2:ptr<uniform, Inner, read> = access %p_a_3_a, 2i
-    %p_a_3_a_2_m:ptr<uniform, mat2x2<f32>, read> = access %p_a_3_a_2, 0u
-    %p_a_3_a_2_m_1:ptr<uniform, vec2<f32>, read> = access %p_a_3_a_2_m, 1i
-    %l_a:array<Outer, 4> = load %p_a
-    %l_a_3:Outer = load %p_a_3
-    %l_a_3_a:array<Inner, 4> = load %p_a_3_a
-    %l_a_3_a_2:Inner = load %p_a_3_a_2
-    %l_a_3_a_2_m:mat2x2<f32> = load %p_a_3_a_2_m
-    %l_a_3_a_2_m_1:vec2<f32> = load %p_a_3_a_2_m_1
-    %l_a_3_a_2_m_1_0:f32 = load_vector_element %p_a_3_a_2_m_1, 0i
+    %4:ptr<uniform, Outer, read> = access %p_a, 3i
+    %p_a_3:ptr<uniform, Outer, read> = let %4
+    %6:ptr<uniform, array<Inner, 4>, read> = access %p_a_3, 0u
+    %p_a_3_a:ptr<uniform, array<Inner, 4>, read> = let %6
+    %8:ptr<uniform, Inner, read> = access %p_a_3_a, 2i
+    %p_a_3_a_2:ptr<uniform, Inner, read> = let %8
+    %10:ptr<uniform, mat2x2<f32>, read> = access %p_a_3_a_2, 0u
+    %p_a_3_a_2_m:ptr<uniform, mat2x2<f32>, read> = let %10
+    %12:ptr<uniform, vec2<f32>, read> = access %p_a_3_a_2_m, 1i
+    %p_a_3_a_2_m_1:ptr<uniform, vec2<f32>, read> = let %12
+    %14:array<Outer, 4> = load %p_a
+    %l_a:array<Outer, 4> = let %14
+    %16:Outer = load %p_a_3
+    %l_a_3:Outer = let %16
+    %18:array<Inner, 4> = load %p_a_3_a
+    %l_a_3_a:array<Inner, 4> = let %18
+    %20:Inner = load %p_a_3_a_2
+    %l_a_3_a_2:Inner = let %20
+    %22:mat2x2<f32> = load %p_a_3_a_2_m
+    %l_a_3_a_2_m:mat2x2<f32> = let %22
+    %24:vec2<f32> = load %p_a_3_a_2_m_1
+    %l_a_3_a_2_m_1:vec2<f32> = let %24
+    %26:f32 = load_vector_element %p_a_3_a_2_m_1, 0i
+    %l_a_3_a_2_m_1_0:f32 = let %26
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x2_f32/to_builtin.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat2x2_f32/to_builtin.wgsl.expected.ir.msl
index 93147df..b0f4c1f 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x2_f32/to_builtin.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x2_f32/to_builtin.wgsl.expected.ir.msl
@@ -1,29 +1,32 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat2x2<f32> @offset(8)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %3:ptr<uniform, mat2x2<f32>, read> = access %u, 2i, 1u
     %4:mat2x2<f32> = load %3
-    %t:mat2x2<f32> = transpose %4
-    %6:ptr<uniform, vec2<f32>, read> = access %u, 0i, 1u, 1i
-    %7:vec2<f32> = load %6
-    %8:vec2<f32> = swizzle %7, yx
-    %l:f32 = length %8
-    %10:ptr<uniform, vec2<f32>, read> = access %u, 0i, 1u, 1i
-    %11:vec2<f32> = load %10
-    %12:vec2<f32> = swizzle %11, yx
-    %13:f32 = access %12, 0u
-    %a:f32 = abs %13
+    %5:mat2x2<f32> = transpose %4
+    %t:mat2x2<f32> = let %5
+    %7:ptr<uniform, vec2<f32>, read> = access %u, 0i, 1u, 1i
+    %8:vec2<f32> = load %7
+    %9:vec2<f32> = swizzle %8, yx
+    %10:f32 = length %9
+    %l:f32 = let %10
+    %12:ptr<uniform, vec2<f32>, read> = access %u, 0i, 1u, 1i
+    %13:vec2<f32> = load %12
+    %14:vec2<f32> = swizzle %13, yx
+    %15:f32 = access %14, 0u
+    %16:f32 = abs %15
+    %a:f32 = let %16
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x2_f32/to_fn.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat2x2_f32/to_fn.wgsl.expected.ir.msl
index 371ef18..2bec96d 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x2_f32/to_fn.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x2_f32/to_fn.wgsl.expected.ir.msl
@@ -1,42 +1,42 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat2x2<f32> @offset(8)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
 }
 
-%a = func(%a_1:array<S, 4>):void -> %b2 {  # %a_1: 'a'
-  %b2 = block {
+%a = func(%a_1:array<S, 4>):void {  # %a_1: 'a'
+  $B2: {
     ret
   }
 }
-%b = func(%s:S):void -> %b3 {
-  %b3 = block {
+%b = func(%s:S):void {
+  $B3: {
     ret
   }
 }
-%c = func(%m:mat2x2<f32>):void -> %b4 {
-  %b4 = block {
+%c = func(%m:mat2x2<f32>):void {
+  $B4: {
     ret
   }
 }
-%d = func(%v:vec2<f32>):void -> %b5 {
-  %b5 = block {
+%d = func(%v:vec2<f32>):void {
+  $B5: {
     ret
   }
 }
-%e = func(%f:f32):void -> %b6 {
-  %b6 = block {
+%e = func(%f:f32):void {
+  $B6: {
     ret
   }
 }
-%f_1 = @compute @workgroup_size(1, 1, 1) func():void -> %b7 {  # %f_1: 'f'
-  %b7 = block {
+%f_1 = @compute @workgroup_size(1, 1, 1) func():void {  # %f_1: 'f'
+  $B7: {
     %13:array<S, 4> = load %u
     %14:void = call %a, %13
     %15:ptr<uniform, S, read> = access %u, 2i
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x2_f32/to_private.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat2x2_f32/to_private.wgsl.expected.ir.msl
index 4ec9b1c..5ee7049 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x2_f32/to_private.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x2_f32/to_private.wgsl.expected.ir.msl
@@ -1,18 +1,18 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat2x2<f32> @offset(8)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
   %p:ptr<private, array<S, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:array<S, 4> = load %u
     store %p, %4
     %5:ptr<private, S, read_write> = access %p, 1i
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x2_f32/to_storage.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat2x2_f32/to_storage.wgsl.expected.ir.msl
index 2cd5d99..9ced729 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x2_f32/to_storage.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x2_f32/to_storage.wgsl.expected.ir.msl
@@ -1,33 +1,73 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat2x2<f32> @offset(8)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
   %s:ptr<storage, array<S, 4>, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:array<S, 4> = load %u
-    store %s, %4
-    %5:ptr<storage, S, read_write> = access %s, 1i
-    %6:ptr<uniform, S, read> = access %u, 2i
-    %7:S = load %6
-    store %5, %7
-    %8:ptr<storage, mat2x2<f32>, read_write> = access %s, 3i, 1u
-    %9:ptr<uniform, mat2x2<f32>, read> = access %u, 2i, 1u
-    %10:mat2x2<f32> = load %9
-    store %8, %10
-    %11:ptr<storage, vec2<f32>, read_write> = access %s, 1i, 1u, 0i
-    %12:ptr<uniform, vec2<f32>, read> = access %u, 0i, 1u, 1i
-    %13:vec2<f32> = load %12
-    %14:vec2<f32> = swizzle %13, yx
-    store %11, %14
+    %5:void = call %tint_store_and_preserve_padding, %s, %4
+    %7:ptr<storage, S, read_write> = access %s, 1i
+    %8:ptr<uniform, S, read> = access %u, 2i
+    %9:S = load %8
+    %10:void = call %tint_store_and_preserve_padding_1, %7, %9
+    %12:ptr<storage, mat2x2<f32>, read_write> = access %s, 3i, 1u
+    %13:ptr<uniform, mat2x2<f32>, read> = access %u, 2i, 1u
+    %14:mat2x2<f32> = load %13
+    store %12, %14
+    %15:ptr<storage, vec2<f32>, read_write> = access %s, 1i, 1u, 0i
+    %16:ptr<uniform, vec2<f32>, read> = access %u, 0i, 1u, 1i
+    %17:vec2<f32> = load %16
+    %18:vec2<f32> = swizzle %17, yx
+    store %15, %18
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, array<S, 4>, read_write>, %value_param:array<S, 4>):void {
+  $B3: {
+    loop [i: $B4, b: $B5, c: $B6] {  # loop_1
+      $B4: {  # initializer
+        next_iteration 0u  # -> $B5
+      }
+      $B5 (%idx:u32): {  # body
+        %22:bool = gte %idx, 4u
+        if %22 [t: $B7] {  # if_1
+          $B7: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %23:ptr<storage, S, read_write> = access %target, %idx
+        %24:S = access %value_param, %idx
+        %25:void = call %tint_store_and_preserve_padding_1, %23, %24
+        continue  # -> $B6
+      }
+      $B6: {  # continuing
+        %26:u32 = add %idx, 1u
+        next_iteration %26  # -> $B5
+      }
+    }
+    ret
+  }
+}
+%tint_store_and_preserve_padding_1 = func(%target_1:ptr<storage, S, read_write>, %value_param_1:S):void {  # %tint_store_and_preserve_padding_1: 'tint_store_and_preserve_padding', %target_1: 'target', %value_param_1: 'value_param'
+  $B8: {
+    %29:ptr<storage, i32, read_write> = access %target_1, 0u
+    %30:i32 = access %value_param_1, 0u
+    store %29, %30
+    %31:ptr<storage, mat2x2<f32>, read_write> = access %target_1, 1u
+    %32:mat2x2<f32> = access %value_param_1, 1u
+    store %31, %32
+    %33:ptr<storage, i32, read_write> = access %target_1, 2u
+    %34:i32 = access %value_param_1, 2u
+    store %33, %34
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x2_f32/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat2x2_f32/to_workgroup.wgsl.expected.ir.msl
index a38c168..2c8ba09 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x2_f32/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x2_f32/to_workgroup.wgsl.expected.ir.msl
@@ -1,33 +1,54 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat2x2<f32> @offset(8)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
   %w:ptr<workgroup, array<S, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:array<S, 4> = load %u
-    store %w, %4
-    %5:ptr<workgroup, S, read_write> = access %w, 1i
-    %6:ptr<uniform, S, read> = access %u, 2i
-    %7:S = load %6
-    store %5, %7
-    %8:ptr<workgroup, mat2x2<f32>, read_write> = access %w, 3i, 1u
-    %9:ptr<uniform, mat2x2<f32>, read> = access %u, 2i, 1u
-    %10:mat2x2<f32> = load %9
-    store %8, %10
-    %11:ptr<workgroup, vec2<f32>, read_write> = access %w, 1i, 1u, 0i
-    %12:ptr<uniform, vec2<f32>, read> = access %u, 0i, 1u, 1i
-    %13:vec2<f32> = load %12
-    %14:vec2<f32> = swizzle %13, yx
-    store %11, %14
+%f = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B2: {
+    loop [i: $B3, b: $B4, c: $B5] {  # loop_1
+      $B3: {  # initializer
+        next_iteration %tint_local_index  # -> $B4
+      }
+      $B4 (%idx:u32): {  # body
+        %6:bool = gte %idx, 4u
+        if %6 [t: $B6] {  # if_1
+          $B6: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %7:ptr<workgroup, S, read_write> = access %w, %idx
+        store %7, S(0i, mat2x2<f32>(vec2<f32>(0.0f)), 0i)
+        continue  # -> $B5
+      }
+      $B5: {  # continuing
+        %8:u32 = add %idx, 1u
+        next_iteration %8  # -> $B4
+      }
+    }
+    %9:void = msl.threadgroup_barrier 4u
+    %10:array<S, 4> = load %u
+    store %w, %10
+    %11:ptr<workgroup, S, read_write> = access %w, 1i
+    %12:ptr<uniform, S, read> = access %u, 2i
+    %13:S = load %12
+    store %11, %13
+    %14:ptr<workgroup, mat2x2<f32>, read_write> = access %w, 3i, 1u
+    %15:ptr<uniform, mat2x2<f32>, read> = access %u, 2i, 1u
+    %16:mat2x2<f32> = load %15
+    store %14, %16
+    %17:ptr<workgroup, vec2<f32>, read_write> = access %w, 1i, 1u, 0i
+    %18:ptr<uniform, vec2<f32>, read> = access %u, 0i, 1u, 1i
+    %19:vec2<f32> = load %18
+    %20:vec2<f32> = swizzle %19, yx
+    store %17, %20
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x3_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat2x3_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
index 11f8e98..985fb84 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x3_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x3_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Inner = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Inner = struct @align(8) {
   m:mat2x3<f16> @offset(0)
 }
 
@@ -8,13 +8,13 @@
   a:array<Inner, 4> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %a:ptr<uniform, array<Outer, 4>, read> = var @binding_point(0, 0)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
+%i = func():i32 {
+  $B2: {
     %4:i32 = load %counter
     %5:i32 = add %4, 1i
     store %counter, %5
@@ -22,25 +22,37 @@
     ret %6
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_a:ptr<uniform, array<Outer, 4>, read> = let %a
     %9:i32 = call %i
-    %p_a_i:ptr<uniform, Outer, read> = access %p_a, %9
-    %p_a_i_a:ptr<uniform, array<Inner, 4>, read> = access %p_a_i, 0u
-    %12:i32 = call %i
-    %p_a_i_a_i:ptr<uniform, Inner, read> = access %p_a_i_a, %12
-    %p_a_i_a_i_m:ptr<uniform, mat2x3<f16>, read> = access %p_a_i_a_i, 0u
-    %15:i32 = call %i
-    %p_a_i_a_i_m_i:ptr<uniform, vec3<f16>, read> = access %p_a_i_a_i_m, %15
-    %l_a:array<Outer, 4> = load %p_a
-    %l_a_i:Outer = load %p_a_i
-    %l_a_i_a:array<Inner, 4> = load %p_a_i_a
-    %l_a_i_a_i:Inner = load %p_a_i_a_i
-    %l_a_i_a_i_m:mat2x3<f16> = load %p_a_i_a_i_m
-    %l_a_i_a_i_m_i:vec3<f16> = load %p_a_i_a_i_m_i
-    %23:i32 = call %i
-    %l_a_i_a_i_m_i_i:f16 = load_vector_element %p_a_i_a_i_m_i, %23
+    %10:ptr<uniform, Outer, read> = access %p_a, %9
+    %p_a_i:ptr<uniform, Outer, read> = let %10
+    %12:ptr<uniform, array<Inner, 4>, read> = access %p_a_i, 0u
+    %p_a_i_a:ptr<uniform, array<Inner, 4>, read> = let %12
+    %14:i32 = call %i
+    %15:ptr<uniform, Inner, read> = access %p_a_i_a, %14
+    %p_a_i_a_i:ptr<uniform, Inner, read> = let %15
+    %17:ptr<uniform, mat2x3<f16>, read> = access %p_a_i_a_i, 0u
+    %p_a_i_a_i_m:ptr<uniform, mat2x3<f16>, read> = let %17
+    %19:i32 = call %i
+    %20:ptr<uniform, vec3<f16>, read> = access %p_a_i_a_i_m, %19
+    %p_a_i_a_i_m_i:ptr<uniform, vec3<f16>, read> = let %20
+    %22:array<Outer, 4> = load %p_a
+    %l_a:array<Outer, 4> = let %22
+    %24:Outer = load %p_a_i
+    %l_a_i:Outer = let %24
+    %26:array<Inner, 4> = load %p_a_i_a
+    %l_a_i_a:array<Inner, 4> = let %26
+    %28:Inner = load %p_a_i_a_i
+    %l_a_i_a_i:Inner = let %28
+    %30:mat2x3<f16> = load %p_a_i_a_i_m
+    %l_a_i_a_i_m:mat2x3<f16> = let %30
+    %32:vec3<f16> = load %p_a_i_a_i_m_i
+    %l_a_i_a_i_m_i:vec3<f16> = let %32
+    %34:i32 = call %i
+    %35:f16 = load_vector_element %p_a_i_a_i_m_i, %34
+    %l_a_i_a_i_m_i_i:f16 = let %35
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x3_f16/static_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat2x3_f16/static_index_via_ptr.wgsl.expected.ir.msl
index c6be965..c9c7e11 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x3_f16/static_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x3_f16/static_index_via_ptr.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Inner = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Inner = struct @align(8) {
   m:mat2x3<f16> @offset(0)
 }
 
@@ -8,25 +8,37 @@
   a:array<Inner, 4> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %a:ptr<uniform, array<Outer, 4>, read> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %p_a:ptr<uniform, array<Outer, 4>, read> = let %a
-    %p_a_3:ptr<uniform, Outer, read> = access %p_a, 3i
-    %p_a_3_a:ptr<uniform, array<Inner, 4>, read> = access %p_a_3, 0u
-    %p_a_3_a_2:ptr<uniform, Inner, read> = access %p_a_3_a, 2i
-    %p_a_3_a_2_m:ptr<uniform, mat2x3<f16>, read> = access %p_a_3_a_2, 0u
-    %p_a_3_a_2_m_1:ptr<uniform, vec3<f16>, read> = access %p_a_3_a_2_m, 1i
-    %l_a:array<Outer, 4> = load %p_a
-    %l_a_3:Outer = load %p_a_3
-    %l_a_3_a:array<Inner, 4> = load %p_a_3_a
-    %l_a_3_a_2:Inner = load %p_a_3_a_2
-    %l_a_3_a_2_m:mat2x3<f16> = load %p_a_3_a_2_m
-    %l_a_3_a_2_m_1:vec3<f16> = load %p_a_3_a_2_m_1
-    %l_a_3_a_2_m_1_0:f16 = load_vector_element %p_a_3_a_2_m_1, 0i
+    %4:ptr<uniform, Outer, read> = access %p_a, 3i
+    %p_a_3:ptr<uniform, Outer, read> = let %4
+    %6:ptr<uniform, array<Inner, 4>, read> = access %p_a_3, 0u
+    %p_a_3_a:ptr<uniform, array<Inner, 4>, read> = let %6
+    %8:ptr<uniform, Inner, read> = access %p_a_3_a, 2i
+    %p_a_3_a_2:ptr<uniform, Inner, read> = let %8
+    %10:ptr<uniform, mat2x3<f16>, read> = access %p_a_3_a_2, 0u
+    %p_a_3_a_2_m:ptr<uniform, mat2x3<f16>, read> = let %10
+    %12:ptr<uniform, vec3<f16>, read> = access %p_a_3_a_2_m, 1i
+    %p_a_3_a_2_m_1:ptr<uniform, vec3<f16>, read> = let %12
+    %14:array<Outer, 4> = load %p_a
+    %l_a:array<Outer, 4> = let %14
+    %16:Outer = load %p_a_3
+    %l_a_3:Outer = let %16
+    %18:array<Inner, 4> = load %p_a_3_a
+    %l_a_3_a:array<Inner, 4> = let %18
+    %20:Inner = load %p_a_3_a_2
+    %l_a_3_a_2:Inner = let %20
+    %22:mat2x3<f16> = load %p_a_3_a_2_m
+    %l_a_3_a_2_m:mat2x3<f16> = let %22
+    %24:vec3<f16> = load %p_a_3_a_2_m_1
+    %l_a_3_a_2_m_1:vec3<f16> = let %24
+    %26:f16 = load_vector_element %p_a_3_a_2_m_1, 0i
+    %l_a_3_a_2_m_1_0:f16 = let %26
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x3_f16/to_builtin.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat2x3_f16/to_builtin.wgsl.expected.ir.msl
index 9964f17..c34fcc2 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x3_f16/to_builtin.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x3_f16/to_builtin.wgsl.expected.ir.msl
@@ -1,29 +1,32 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat2x3<f16> @offset(8)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %3:ptr<uniform, mat2x3<f16>, read> = access %u, 2i, 1u
     %4:mat2x3<f16> = load %3
-    %t:mat3x2<f16> = transpose %4
-    %6:ptr<uniform, vec3<f16>, read> = access %u, 0i, 1u, 1i
-    %7:vec3<f16> = load %6
-    %8:vec3<f16> = swizzle %7, zxy
-    %l:f16 = length %8
-    %10:ptr<uniform, vec3<f16>, read> = access %u, 0i, 1u, 1i
-    %11:vec3<f16> = load %10
-    %12:vec3<f16> = swizzle %11, zxy
-    %13:f16 = access %12, 0u
-    %a:f16 = abs %13
+    %5:mat3x2<f16> = transpose %4
+    %t:mat3x2<f16> = let %5
+    %7:ptr<uniform, vec3<f16>, read> = access %u, 0i, 1u, 1i
+    %8:vec3<f16> = load %7
+    %9:vec3<f16> = swizzle %8, zxy
+    %10:f16 = length %9
+    %l:f16 = let %10
+    %12:ptr<uniform, vec3<f16>, read> = access %u, 0i, 1u, 1i
+    %13:vec3<f16> = load %12
+    %14:vec3<f16> = swizzle %13, zxy
+    %15:f16 = access %14, 0u
+    %16:f16 = abs %15
+    %a:f16 = let %16
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x3_f16/to_fn.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat2x3_f16/to_fn.wgsl.expected.ir.msl
index cd1accb..cf38c54 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x3_f16/to_fn.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x3_f16/to_fn.wgsl.expected.ir.msl
@@ -1,42 +1,42 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat2x3<f16> @offset(8)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
 }
 
-%a = func(%a_1:array<S, 4>):void -> %b2 {  # %a_1: 'a'
-  %b2 = block {
+%a = func(%a_1:array<S, 4>):void {  # %a_1: 'a'
+  $B2: {
     ret
   }
 }
-%b = func(%s:S):void -> %b3 {
-  %b3 = block {
+%b = func(%s:S):void {
+  $B3: {
     ret
   }
 }
-%c = func(%m:mat2x3<f16>):void -> %b4 {
-  %b4 = block {
+%c = func(%m:mat2x3<f16>):void {
+  $B4: {
     ret
   }
 }
-%d = func(%v:vec3<f16>):void -> %b5 {
-  %b5 = block {
+%d = func(%v:vec3<f16>):void {
+  $B5: {
     ret
   }
 }
-%e = func(%f:f16):void -> %b6 {
-  %b6 = block {
+%e = func(%f:f16):void {
+  $B6: {
     ret
   }
 }
-%f_1 = @compute @workgroup_size(1, 1, 1) func():void -> %b7 {  # %f_1: 'f'
-  %b7 = block {
+%f_1 = @compute @workgroup_size(1, 1, 1) func():void {  # %f_1: 'f'
+  $B7: {
     %13:array<S, 4> = load %u
     %14:void = call %a, %13
     %15:ptr<uniform, S, read> = access %u, 2i
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x3_f16/to_private.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat2x3_f16/to_private.wgsl.expected.ir.msl
index 0aad148..435e18b 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x3_f16/to_private.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x3_f16/to_private.wgsl.expected.ir.msl
@@ -1,18 +1,18 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat2x3<f16> @offset(8)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
   %p:ptr<private, array<S, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:array<S, 4> = load %u
     store %p, %4
     %5:ptr<private, S, read_write> = access %p, 1i
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x3_f16/to_storage.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat2x3_f16/to_storage.wgsl.expected.ir.msl
index f2f2e43..5f67ddb 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x3_f16/to_storage.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x3_f16/to_storage.wgsl.expected.ir.msl
@@ -1,33 +1,84 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat2x3<f16> @offset(8)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
   %s:ptr<storage, array<S, 4>, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:array<S, 4> = load %u
-    store %s, %4
-    %5:ptr<storage, S, read_write> = access %s, 1i
-    %6:ptr<uniform, S, read> = access %u, 2i
-    %7:S = load %6
-    store %5, %7
-    %8:ptr<storage, mat2x3<f16>, read_write> = access %s, 3i, 1u
-    %9:ptr<uniform, mat2x3<f16>, read> = access %u, 2i, 1u
-    %10:mat2x3<f16> = load %9
-    store %8, %10
-    %11:ptr<storage, vec3<f16>, read_write> = access %s, 1i, 1u, 0i
-    %12:ptr<uniform, vec3<f16>, read> = access %u, 0i, 1u, 1i
-    %13:vec3<f16> = load %12
-    %14:vec3<f16> = swizzle %13, zxy
-    store %11, %14
+    %5:void = call %tint_store_and_preserve_padding, %s, %4
+    %7:ptr<storage, S, read_write> = access %s, 1i
+    %8:ptr<uniform, S, read> = access %u, 2i
+    %9:S = load %8
+    %10:void = call %tint_store_and_preserve_padding_1, %7, %9
+    %12:ptr<storage, mat2x3<f16>, read_write> = access %s, 3i, 1u
+    %13:ptr<uniform, mat2x3<f16>, read> = access %u, 2i, 1u
+    %14:mat2x3<f16> = load %13
+    %15:void = call %tint_store_and_preserve_padding_2, %12, %14
+    %17:ptr<storage, vec3<f16>, read_write> = access %s, 1i, 1u, 0i
+    %18:ptr<uniform, vec3<f16>, read> = access %u, 0i, 1u, 1i
+    %19:vec3<f16> = load %18
+    %20:vec3<f16> = swizzle %19, zxy
+    store %17, %20
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, array<S, 4>, read_write>, %value_param:array<S, 4>):void {
+  $B3: {
+    loop [i: $B4, b: $B5, c: $B6] {  # loop_1
+      $B4: {  # initializer
+        next_iteration 0u  # -> $B5
+      }
+      $B5 (%idx:u32): {  # body
+        %24:bool = gte %idx, 4u
+        if %24 [t: $B7] {  # if_1
+          $B7: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %25:ptr<storage, S, read_write> = access %target, %idx
+        %26:S = access %value_param, %idx
+        %27:void = call %tint_store_and_preserve_padding_1, %25, %26
+        continue  # -> $B6
+      }
+      $B6: {  # continuing
+        %28:u32 = add %idx, 1u
+        next_iteration %28  # -> $B5
+      }
+    }
+    ret
+  }
+}
+%tint_store_and_preserve_padding_1 = func(%target_1:ptr<storage, S, read_write>, %value_param_1:S):void {  # %tint_store_and_preserve_padding_1: 'tint_store_and_preserve_padding', %target_1: 'target', %value_param_1: 'value_param'
+  $B8: {
+    %31:ptr<storage, i32, read_write> = access %target_1, 0u
+    %32:i32 = access %value_param_1, 0u
+    store %31, %32
+    %33:ptr<storage, mat2x3<f16>, read_write> = access %target_1, 1u
+    %34:mat2x3<f16> = access %value_param_1, 1u
+    %35:void = call %tint_store_and_preserve_padding_2, %33, %34
+    %36:ptr<storage, i32, read_write> = access %target_1, 2u
+    %37:i32 = access %value_param_1, 2u
+    store %36, %37
+    ret
+  }
+}
+%tint_store_and_preserve_padding_2 = func(%target_2:ptr<storage, mat2x3<f16>, read_write>, %value_param_2:mat2x3<f16>):void {  # %tint_store_and_preserve_padding_2: 'tint_store_and_preserve_padding', %target_2: 'target', %value_param_2: 'value_param'
+  $B9: {
+    %40:ptr<storage, vec3<f16>, read_write> = access %target_2, 0u
+    %41:vec3<f16> = access %value_param_2, 0u
+    store %40, %41
+    %42:ptr<storage, vec3<f16>, read_write> = access %target_2, 1u
+    %43:vec3<f16> = access %value_param_2, 1u
+    store %42, %43
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x3_f16/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat2x3_f16/to_workgroup.wgsl.expected.ir.msl
index d064fce..3b8635b 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x3_f16/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x3_f16/to_workgroup.wgsl.expected.ir.msl
@@ -1,33 +1,54 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat2x3<f16> @offset(8)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
   %w:ptr<workgroup, array<S, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:array<S, 4> = load %u
-    store %w, %4
-    %5:ptr<workgroup, S, read_write> = access %w, 1i
-    %6:ptr<uniform, S, read> = access %u, 2i
-    %7:S = load %6
-    store %5, %7
-    %8:ptr<workgroup, mat2x3<f16>, read_write> = access %w, 3i, 1u
-    %9:ptr<uniform, mat2x3<f16>, read> = access %u, 2i, 1u
-    %10:mat2x3<f16> = load %9
-    store %8, %10
-    %11:ptr<workgroup, vec3<f16>, read_write> = access %w, 1i, 1u, 0i
-    %12:ptr<uniform, vec3<f16>, read> = access %u, 0i, 1u, 1i
-    %13:vec3<f16> = load %12
-    %14:vec3<f16> = swizzle %13, zxy
-    store %11, %14
+%f = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B2: {
+    loop [i: $B3, b: $B4, c: $B5] {  # loop_1
+      $B3: {  # initializer
+        next_iteration %tint_local_index  # -> $B4
+      }
+      $B4 (%idx:u32): {  # body
+        %6:bool = gte %idx, 4u
+        if %6 [t: $B6] {  # if_1
+          $B6: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %7:ptr<workgroup, S, read_write> = access %w, %idx
+        store %7, S(0i, mat2x3<f16>(vec3<f16>(0.0h)), 0i)
+        continue  # -> $B5
+      }
+      $B5: {  # continuing
+        %8:u32 = add %idx, 1u
+        next_iteration %8  # -> $B4
+      }
+    }
+    %9:void = msl.threadgroup_barrier 4u
+    %10:array<S, 4> = load %u
+    store %w, %10
+    %11:ptr<workgroup, S, read_write> = access %w, 1i
+    %12:ptr<uniform, S, read> = access %u, 2i
+    %13:S = load %12
+    store %11, %13
+    %14:ptr<workgroup, mat2x3<f16>, read_write> = access %w, 3i, 1u
+    %15:ptr<uniform, mat2x3<f16>, read> = access %u, 2i, 1u
+    %16:mat2x3<f16> = load %15
+    store %14, %16
+    %17:ptr<workgroup, vec3<f16>, read_write> = access %w, 1i, 1u, 0i
+    %18:ptr<uniform, vec3<f16>, read> = access %u, 0i, 1u, 1i
+    %19:vec3<f16> = load %18
+    %20:vec3<f16> = swizzle %19, zxy
+    store %17, %20
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x3_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat2x3_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
index 8b3526e..ab28715 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x3_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x3_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Inner = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Inner = struct @align(16) {
   m:mat2x3<f32> @offset(0)
 }
 
@@ -8,13 +8,13 @@
   a:array<Inner, 4> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %a:ptr<uniform, array<Outer, 4>, read> = var @binding_point(0, 0)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
+%i = func():i32 {
+  $B2: {
     %4:i32 = load %counter
     %5:i32 = add %4, 1i
     store %counter, %5
@@ -22,25 +22,37 @@
     ret %6
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_a:ptr<uniform, array<Outer, 4>, read> = let %a
     %9:i32 = call %i
-    %p_a_i:ptr<uniform, Outer, read> = access %p_a, %9
-    %p_a_i_a:ptr<uniform, array<Inner, 4>, read> = access %p_a_i, 0u
-    %12:i32 = call %i
-    %p_a_i_a_i:ptr<uniform, Inner, read> = access %p_a_i_a, %12
-    %p_a_i_a_i_m:ptr<uniform, mat2x3<f32>, read> = access %p_a_i_a_i, 0u
-    %15:i32 = call %i
-    %p_a_i_a_i_m_i:ptr<uniform, vec3<f32>, read> = access %p_a_i_a_i_m, %15
-    %l_a:array<Outer, 4> = load %p_a
-    %l_a_i:Outer = load %p_a_i
-    %l_a_i_a:array<Inner, 4> = load %p_a_i_a
-    %l_a_i_a_i:Inner = load %p_a_i_a_i
-    %l_a_i_a_i_m:mat2x3<f32> = load %p_a_i_a_i_m
-    %l_a_i_a_i_m_i:vec3<f32> = load %p_a_i_a_i_m_i
-    %23:i32 = call %i
-    %l_a_i_a_i_m_i_i:f32 = load_vector_element %p_a_i_a_i_m_i, %23
+    %10:ptr<uniform, Outer, read> = access %p_a, %9
+    %p_a_i:ptr<uniform, Outer, read> = let %10
+    %12:ptr<uniform, array<Inner, 4>, read> = access %p_a_i, 0u
+    %p_a_i_a:ptr<uniform, array<Inner, 4>, read> = let %12
+    %14:i32 = call %i
+    %15:ptr<uniform, Inner, read> = access %p_a_i_a, %14
+    %p_a_i_a_i:ptr<uniform, Inner, read> = let %15
+    %17:ptr<uniform, mat2x3<f32>, read> = access %p_a_i_a_i, 0u
+    %p_a_i_a_i_m:ptr<uniform, mat2x3<f32>, read> = let %17
+    %19:i32 = call %i
+    %20:ptr<uniform, vec3<f32>, read> = access %p_a_i_a_i_m, %19
+    %p_a_i_a_i_m_i:ptr<uniform, vec3<f32>, read> = let %20
+    %22:array<Outer, 4> = load %p_a
+    %l_a:array<Outer, 4> = let %22
+    %24:Outer = load %p_a_i
+    %l_a_i:Outer = let %24
+    %26:array<Inner, 4> = load %p_a_i_a
+    %l_a_i_a:array<Inner, 4> = let %26
+    %28:Inner = load %p_a_i_a_i
+    %l_a_i_a_i:Inner = let %28
+    %30:mat2x3<f32> = load %p_a_i_a_i_m
+    %l_a_i_a_i_m:mat2x3<f32> = let %30
+    %32:vec3<f32> = load %p_a_i_a_i_m_i
+    %l_a_i_a_i_m_i:vec3<f32> = let %32
+    %34:i32 = call %i
+    %35:f32 = load_vector_element %p_a_i_a_i_m_i, %34
+    %l_a_i_a_i_m_i_i:f32 = let %35
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x3_f32/static_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat2x3_f32/static_index_via_ptr.wgsl.expected.ir.msl
index aead604..3847627 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x3_f32/static_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x3_f32/static_index_via_ptr.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Inner = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Inner = struct @align(16) {
   m:mat2x3<f32> @offset(0)
 }
 
@@ -8,25 +8,37 @@
   a:array<Inner, 4> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %a:ptr<uniform, array<Outer, 4>, read> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %p_a:ptr<uniform, array<Outer, 4>, read> = let %a
-    %p_a_3:ptr<uniform, Outer, read> = access %p_a, 3i
-    %p_a_3_a:ptr<uniform, array<Inner, 4>, read> = access %p_a_3, 0u
-    %p_a_3_a_2:ptr<uniform, Inner, read> = access %p_a_3_a, 2i
-    %p_a_3_a_2_m:ptr<uniform, mat2x3<f32>, read> = access %p_a_3_a_2, 0u
-    %p_a_3_a_2_m_1:ptr<uniform, vec3<f32>, read> = access %p_a_3_a_2_m, 1i
-    %l_a:array<Outer, 4> = load %p_a
-    %l_a_3:Outer = load %p_a_3
-    %l_a_3_a:array<Inner, 4> = load %p_a_3_a
-    %l_a_3_a_2:Inner = load %p_a_3_a_2
-    %l_a_3_a_2_m:mat2x3<f32> = load %p_a_3_a_2_m
-    %l_a_3_a_2_m_1:vec3<f32> = load %p_a_3_a_2_m_1
-    %l_a_3_a_2_m_1_0:f32 = load_vector_element %p_a_3_a_2_m_1, 0i
+    %4:ptr<uniform, Outer, read> = access %p_a, 3i
+    %p_a_3:ptr<uniform, Outer, read> = let %4
+    %6:ptr<uniform, array<Inner, 4>, read> = access %p_a_3, 0u
+    %p_a_3_a:ptr<uniform, array<Inner, 4>, read> = let %6
+    %8:ptr<uniform, Inner, read> = access %p_a_3_a, 2i
+    %p_a_3_a_2:ptr<uniform, Inner, read> = let %8
+    %10:ptr<uniform, mat2x3<f32>, read> = access %p_a_3_a_2, 0u
+    %p_a_3_a_2_m:ptr<uniform, mat2x3<f32>, read> = let %10
+    %12:ptr<uniform, vec3<f32>, read> = access %p_a_3_a_2_m, 1i
+    %p_a_3_a_2_m_1:ptr<uniform, vec3<f32>, read> = let %12
+    %14:array<Outer, 4> = load %p_a
+    %l_a:array<Outer, 4> = let %14
+    %16:Outer = load %p_a_3
+    %l_a_3:Outer = let %16
+    %18:array<Inner, 4> = load %p_a_3_a
+    %l_a_3_a:array<Inner, 4> = let %18
+    %20:Inner = load %p_a_3_a_2
+    %l_a_3_a_2:Inner = let %20
+    %22:mat2x3<f32> = load %p_a_3_a_2_m
+    %l_a_3_a_2_m:mat2x3<f32> = let %22
+    %24:vec3<f32> = load %p_a_3_a_2_m_1
+    %l_a_3_a_2_m_1:vec3<f32> = let %24
+    %26:f32 = load_vector_element %p_a_3_a_2_m_1, 0i
+    %l_a_3_a_2_m_1_0:f32 = let %26
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x3_f32/to_builtin.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat2x3_f32/to_builtin.wgsl.expected.ir.msl
index 1c91d74..632586d 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x3_f32/to_builtin.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x3_f32/to_builtin.wgsl.expected.ir.msl
@@ -1,29 +1,32 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat2x3<f32> @offset(16)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %3:ptr<uniform, mat2x3<f32>, read> = access %u, 2i, 1u
     %4:mat2x3<f32> = load %3
-    %t:mat3x2<f32> = transpose %4
-    %6:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1u, 1i
-    %7:vec3<f32> = load %6
-    %8:vec3<f32> = swizzle %7, zxy
-    %l:f32 = length %8
-    %10:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1u, 1i
-    %11:vec3<f32> = load %10
-    %12:vec3<f32> = swizzle %11, zxy
-    %13:f32 = access %12, 0u
-    %a:f32 = abs %13
+    %5:mat3x2<f32> = transpose %4
+    %t:mat3x2<f32> = let %5
+    %7:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1u, 1i
+    %8:vec3<f32> = load %7
+    %9:vec3<f32> = swizzle %8, zxy
+    %10:f32 = length %9
+    %l:f32 = let %10
+    %12:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1u, 1i
+    %13:vec3<f32> = load %12
+    %14:vec3<f32> = swizzle %13, zxy
+    %15:f32 = access %14, 0u
+    %16:f32 = abs %15
+    %a:f32 = let %16
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x3_f32/to_fn.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat2x3_f32/to_fn.wgsl.expected.ir.msl
index 9a45b4d..b9101bb 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x3_f32/to_fn.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x3_f32/to_fn.wgsl.expected.ir.msl
@@ -1,42 +1,42 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat2x3<f32> @offset(16)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
 }
 
-%a = func(%a_1:array<S, 4>):void -> %b2 {  # %a_1: 'a'
-  %b2 = block {
+%a = func(%a_1:array<S, 4>):void {  # %a_1: 'a'
+  $B2: {
     ret
   }
 }
-%b = func(%s:S):void -> %b3 {
-  %b3 = block {
+%b = func(%s:S):void {
+  $B3: {
     ret
   }
 }
-%c = func(%m:mat2x3<f32>):void -> %b4 {
-  %b4 = block {
+%c = func(%m:mat2x3<f32>):void {
+  $B4: {
     ret
   }
 }
-%d = func(%v:vec3<f32>):void -> %b5 {
-  %b5 = block {
+%d = func(%v:vec3<f32>):void {
+  $B5: {
     ret
   }
 }
-%e = func(%f:f32):void -> %b6 {
-  %b6 = block {
+%e = func(%f:f32):void {
+  $B6: {
     ret
   }
 }
-%f_1 = @compute @workgroup_size(1, 1, 1) func():void -> %b7 {  # %f_1: 'f'
-  %b7 = block {
+%f_1 = @compute @workgroup_size(1, 1, 1) func():void {  # %f_1: 'f'
+  $B7: {
     %13:array<S, 4> = load %u
     %14:void = call %a, %13
     %15:ptr<uniform, S, read> = access %u, 2i
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x3_f32/to_private.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat2x3_f32/to_private.wgsl.expected.ir.msl
index 493693a..76cf221 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x3_f32/to_private.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x3_f32/to_private.wgsl.expected.ir.msl
@@ -1,18 +1,18 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat2x3<f32> @offset(16)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
   %p:ptr<private, array<S, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:array<S, 4> = load %u
     store %p, %4
     %5:ptr<private, S, read_write> = access %p, 1i
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x3_f32/to_storage.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat2x3_f32/to_storage.wgsl.expected.ir.msl
index 55b828f..f650bd7 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x3_f32/to_storage.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x3_f32/to_storage.wgsl.expected.ir.msl
@@ -1,33 +1,84 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat2x3<f32> @offset(16)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
   %s:ptr<storage, array<S, 4>, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:array<S, 4> = load %u
-    store %s, %4
-    %5:ptr<storage, S, read_write> = access %s, 1i
-    %6:ptr<uniform, S, read> = access %u, 2i
-    %7:S = load %6
-    store %5, %7
-    %8:ptr<storage, mat2x3<f32>, read_write> = access %s, 3i, 1u
-    %9:ptr<uniform, mat2x3<f32>, read> = access %u, 2i, 1u
-    %10:mat2x3<f32> = load %9
-    store %8, %10
-    %11:ptr<storage, vec3<f32>, read_write> = access %s, 1i, 1u, 0i
-    %12:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1u, 1i
-    %13:vec3<f32> = load %12
-    %14:vec3<f32> = swizzle %13, zxy
-    store %11, %14
+    %5:void = call %tint_store_and_preserve_padding, %s, %4
+    %7:ptr<storage, S, read_write> = access %s, 1i
+    %8:ptr<uniform, S, read> = access %u, 2i
+    %9:S = load %8
+    %10:void = call %tint_store_and_preserve_padding_1, %7, %9
+    %12:ptr<storage, mat2x3<f32>, read_write> = access %s, 3i, 1u
+    %13:ptr<uniform, mat2x3<f32>, read> = access %u, 2i, 1u
+    %14:mat2x3<f32> = load %13
+    %15:void = call %tint_store_and_preserve_padding_2, %12, %14
+    %17:ptr<storage, vec3<f32>, read_write> = access %s, 1i, 1u, 0i
+    %18:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1u, 1i
+    %19:vec3<f32> = load %18
+    %20:vec3<f32> = swizzle %19, zxy
+    store %17, %20
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, array<S, 4>, read_write>, %value_param:array<S, 4>):void {
+  $B3: {
+    loop [i: $B4, b: $B5, c: $B6] {  # loop_1
+      $B4: {  # initializer
+        next_iteration 0u  # -> $B5
+      }
+      $B5 (%idx:u32): {  # body
+        %24:bool = gte %idx, 4u
+        if %24 [t: $B7] {  # if_1
+          $B7: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %25:ptr<storage, S, read_write> = access %target, %idx
+        %26:S = access %value_param, %idx
+        %27:void = call %tint_store_and_preserve_padding_1, %25, %26
+        continue  # -> $B6
+      }
+      $B6: {  # continuing
+        %28:u32 = add %idx, 1u
+        next_iteration %28  # -> $B5
+      }
+    }
+    ret
+  }
+}
+%tint_store_and_preserve_padding_1 = func(%target_1:ptr<storage, S, read_write>, %value_param_1:S):void {  # %tint_store_and_preserve_padding_1: 'tint_store_and_preserve_padding', %target_1: 'target', %value_param_1: 'value_param'
+  $B8: {
+    %31:ptr<storage, i32, read_write> = access %target_1, 0u
+    %32:i32 = access %value_param_1, 0u
+    store %31, %32
+    %33:ptr<storage, mat2x3<f32>, read_write> = access %target_1, 1u
+    %34:mat2x3<f32> = access %value_param_1, 1u
+    %35:void = call %tint_store_and_preserve_padding_2, %33, %34
+    %36:ptr<storage, i32, read_write> = access %target_1, 2u
+    %37:i32 = access %value_param_1, 2u
+    store %36, %37
+    ret
+  }
+}
+%tint_store_and_preserve_padding_2 = func(%target_2:ptr<storage, mat2x3<f32>, read_write>, %value_param_2:mat2x3<f32>):void {  # %tint_store_and_preserve_padding_2: 'tint_store_and_preserve_padding', %target_2: 'target', %value_param_2: 'value_param'
+  $B9: {
+    %40:ptr<storage, vec3<f32>, read_write> = access %target_2, 0u
+    %41:vec3<f32> = access %value_param_2, 0u
+    store %40, %41
+    %42:ptr<storage, vec3<f32>, read_write> = access %target_2, 1u
+    %43:vec3<f32> = access %value_param_2, 1u
+    store %42, %43
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x3_f32/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat2x3_f32/to_workgroup.wgsl.expected.ir.msl
index 22f01dd..bb09740 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x3_f32/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x3_f32/to_workgroup.wgsl.expected.ir.msl
@@ -1,33 +1,54 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat2x3<f32> @offset(16)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
   %w:ptr<workgroup, array<S, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:array<S, 4> = load %u
-    store %w, %4
-    %5:ptr<workgroup, S, read_write> = access %w, 1i
-    %6:ptr<uniform, S, read> = access %u, 2i
-    %7:S = load %6
-    store %5, %7
-    %8:ptr<workgroup, mat2x3<f32>, read_write> = access %w, 3i, 1u
-    %9:ptr<uniform, mat2x3<f32>, read> = access %u, 2i, 1u
-    %10:mat2x3<f32> = load %9
-    store %8, %10
-    %11:ptr<workgroup, vec3<f32>, read_write> = access %w, 1i, 1u, 0i
-    %12:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1u, 1i
-    %13:vec3<f32> = load %12
-    %14:vec3<f32> = swizzle %13, zxy
-    store %11, %14
+%f = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B2: {
+    loop [i: $B3, b: $B4, c: $B5] {  # loop_1
+      $B3: {  # initializer
+        next_iteration %tint_local_index  # -> $B4
+      }
+      $B4 (%idx:u32): {  # body
+        %6:bool = gte %idx, 4u
+        if %6 [t: $B6] {  # if_1
+          $B6: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %7:ptr<workgroup, S, read_write> = access %w, %idx
+        store %7, S(0i, mat2x3<f32>(vec3<f32>(0.0f)), 0i)
+        continue  # -> $B5
+      }
+      $B5: {  # continuing
+        %8:u32 = add %idx, 1u
+        next_iteration %8  # -> $B4
+      }
+    }
+    %9:void = msl.threadgroup_barrier 4u
+    %10:array<S, 4> = load %u
+    store %w, %10
+    %11:ptr<workgroup, S, read_write> = access %w, 1i
+    %12:ptr<uniform, S, read> = access %u, 2i
+    %13:S = load %12
+    store %11, %13
+    %14:ptr<workgroup, mat2x3<f32>, read_write> = access %w, 3i, 1u
+    %15:ptr<uniform, mat2x3<f32>, read> = access %u, 2i, 1u
+    %16:mat2x3<f32> = load %15
+    store %14, %16
+    %17:ptr<workgroup, vec3<f32>, read_write> = access %w, 1i, 1u, 0i
+    %18:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1u, 1i
+    %19:vec3<f32> = load %18
+    %20:vec3<f32> = swizzle %19, zxy
+    store %17, %20
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x4_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat2x4_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
index 8b5f584..d758a15 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x4_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x4_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Inner = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Inner = struct @align(8) {
   m:mat2x4<f16> @offset(0)
 }
 
@@ -8,13 +8,13 @@
   a:array<Inner, 4> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %a:ptr<uniform, array<Outer, 4>, read> = var @binding_point(0, 0)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
+%i = func():i32 {
+  $B2: {
     %4:i32 = load %counter
     %5:i32 = add %4, 1i
     store %counter, %5
@@ -22,25 +22,37 @@
     ret %6
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_a:ptr<uniform, array<Outer, 4>, read> = let %a
     %9:i32 = call %i
-    %p_a_i:ptr<uniform, Outer, read> = access %p_a, %9
-    %p_a_i_a:ptr<uniform, array<Inner, 4>, read> = access %p_a_i, 0u
-    %12:i32 = call %i
-    %p_a_i_a_i:ptr<uniform, Inner, read> = access %p_a_i_a, %12
-    %p_a_i_a_i_m:ptr<uniform, mat2x4<f16>, read> = access %p_a_i_a_i, 0u
-    %15:i32 = call %i
-    %p_a_i_a_i_m_i:ptr<uniform, vec4<f16>, read> = access %p_a_i_a_i_m, %15
-    %l_a:array<Outer, 4> = load %p_a
-    %l_a_i:Outer = load %p_a_i
-    %l_a_i_a:array<Inner, 4> = load %p_a_i_a
-    %l_a_i_a_i:Inner = load %p_a_i_a_i
-    %l_a_i_a_i_m:mat2x4<f16> = load %p_a_i_a_i_m
-    %l_a_i_a_i_m_i:vec4<f16> = load %p_a_i_a_i_m_i
-    %23:i32 = call %i
-    %l_a_i_a_i_m_i_i:f16 = load_vector_element %p_a_i_a_i_m_i, %23
+    %10:ptr<uniform, Outer, read> = access %p_a, %9
+    %p_a_i:ptr<uniform, Outer, read> = let %10
+    %12:ptr<uniform, array<Inner, 4>, read> = access %p_a_i, 0u
+    %p_a_i_a:ptr<uniform, array<Inner, 4>, read> = let %12
+    %14:i32 = call %i
+    %15:ptr<uniform, Inner, read> = access %p_a_i_a, %14
+    %p_a_i_a_i:ptr<uniform, Inner, read> = let %15
+    %17:ptr<uniform, mat2x4<f16>, read> = access %p_a_i_a_i, 0u
+    %p_a_i_a_i_m:ptr<uniform, mat2x4<f16>, read> = let %17
+    %19:i32 = call %i
+    %20:ptr<uniform, vec4<f16>, read> = access %p_a_i_a_i_m, %19
+    %p_a_i_a_i_m_i:ptr<uniform, vec4<f16>, read> = let %20
+    %22:array<Outer, 4> = load %p_a
+    %l_a:array<Outer, 4> = let %22
+    %24:Outer = load %p_a_i
+    %l_a_i:Outer = let %24
+    %26:array<Inner, 4> = load %p_a_i_a
+    %l_a_i_a:array<Inner, 4> = let %26
+    %28:Inner = load %p_a_i_a_i
+    %l_a_i_a_i:Inner = let %28
+    %30:mat2x4<f16> = load %p_a_i_a_i_m
+    %l_a_i_a_i_m:mat2x4<f16> = let %30
+    %32:vec4<f16> = load %p_a_i_a_i_m_i
+    %l_a_i_a_i_m_i:vec4<f16> = let %32
+    %34:i32 = call %i
+    %35:f16 = load_vector_element %p_a_i_a_i_m_i, %34
+    %l_a_i_a_i_m_i_i:f16 = let %35
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x4_f16/static_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat2x4_f16/static_index_via_ptr.wgsl.expected.ir.msl
index 8939c27..77ca2ed 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x4_f16/static_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x4_f16/static_index_via_ptr.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Inner = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Inner = struct @align(8) {
   m:mat2x4<f16> @offset(0)
 }
 
@@ -8,25 +8,37 @@
   a:array<Inner, 4> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %a:ptr<uniform, array<Outer, 4>, read> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %p_a:ptr<uniform, array<Outer, 4>, read> = let %a
-    %p_a_3:ptr<uniform, Outer, read> = access %p_a, 3i
-    %p_a_3_a:ptr<uniform, array<Inner, 4>, read> = access %p_a_3, 0u
-    %p_a_3_a_2:ptr<uniform, Inner, read> = access %p_a_3_a, 2i
-    %p_a_3_a_2_m:ptr<uniform, mat2x4<f16>, read> = access %p_a_3_a_2, 0u
-    %p_a_3_a_2_m_1:ptr<uniform, vec4<f16>, read> = access %p_a_3_a_2_m, 1i
-    %l_a:array<Outer, 4> = load %p_a
-    %l_a_3:Outer = load %p_a_3
-    %l_a_3_a:array<Inner, 4> = load %p_a_3_a
-    %l_a_3_a_2:Inner = load %p_a_3_a_2
-    %l_a_3_a_2_m:mat2x4<f16> = load %p_a_3_a_2_m
-    %l_a_3_a_2_m_1:vec4<f16> = load %p_a_3_a_2_m_1
-    %l_a_3_a_2_m_1_0:f16 = load_vector_element %p_a_3_a_2_m_1, 0i
+    %4:ptr<uniform, Outer, read> = access %p_a, 3i
+    %p_a_3:ptr<uniform, Outer, read> = let %4
+    %6:ptr<uniform, array<Inner, 4>, read> = access %p_a_3, 0u
+    %p_a_3_a:ptr<uniform, array<Inner, 4>, read> = let %6
+    %8:ptr<uniform, Inner, read> = access %p_a_3_a, 2i
+    %p_a_3_a_2:ptr<uniform, Inner, read> = let %8
+    %10:ptr<uniform, mat2x4<f16>, read> = access %p_a_3_a_2, 0u
+    %p_a_3_a_2_m:ptr<uniform, mat2x4<f16>, read> = let %10
+    %12:ptr<uniform, vec4<f16>, read> = access %p_a_3_a_2_m, 1i
+    %p_a_3_a_2_m_1:ptr<uniform, vec4<f16>, read> = let %12
+    %14:array<Outer, 4> = load %p_a
+    %l_a:array<Outer, 4> = let %14
+    %16:Outer = load %p_a_3
+    %l_a_3:Outer = let %16
+    %18:array<Inner, 4> = load %p_a_3_a
+    %l_a_3_a:array<Inner, 4> = let %18
+    %20:Inner = load %p_a_3_a_2
+    %l_a_3_a_2:Inner = let %20
+    %22:mat2x4<f16> = load %p_a_3_a_2_m
+    %l_a_3_a_2_m:mat2x4<f16> = let %22
+    %24:vec4<f16> = load %p_a_3_a_2_m_1
+    %l_a_3_a_2_m_1:vec4<f16> = let %24
+    %26:f16 = load_vector_element %p_a_3_a_2_m_1, 0i
+    %l_a_3_a_2_m_1_0:f16 = let %26
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x4_f16/to_builtin.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat2x4_f16/to_builtin.wgsl.expected.ir.msl
index e18150f..53625ad 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x4_f16/to_builtin.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x4_f16/to_builtin.wgsl.expected.ir.msl
@@ -1,29 +1,32 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat2x4<f16> @offset(8)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %3:ptr<uniform, mat2x4<f16>, read> = access %u, 2i, 1u
     %4:mat2x4<f16> = load %3
-    %t:mat4x2<f16> = transpose %4
-    %6:ptr<uniform, vec4<f16>, read> = access %u, 0i, 1u, 1i
-    %7:vec4<f16> = load %6
-    %8:vec4<f16> = swizzle %7, ywxz
-    %l:f16 = length %8
-    %10:ptr<uniform, vec4<f16>, read> = access %u, 0i, 1u, 1i
-    %11:vec4<f16> = load %10
-    %12:vec4<f16> = swizzle %11, ywxz
-    %13:f16 = access %12, 0u
-    %a:f16 = abs %13
+    %5:mat4x2<f16> = transpose %4
+    %t:mat4x2<f16> = let %5
+    %7:ptr<uniform, vec4<f16>, read> = access %u, 0i, 1u, 1i
+    %8:vec4<f16> = load %7
+    %9:vec4<f16> = swizzle %8, ywxz
+    %10:f16 = length %9
+    %l:f16 = let %10
+    %12:ptr<uniform, vec4<f16>, read> = access %u, 0i, 1u, 1i
+    %13:vec4<f16> = load %12
+    %14:vec4<f16> = swizzle %13, ywxz
+    %15:f16 = access %14, 0u
+    %16:f16 = abs %15
+    %a:f16 = let %16
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x4_f16/to_fn.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat2x4_f16/to_fn.wgsl.expected.ir.msl
index 25ab058..f665915 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x4_f16/to_fn.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x4_f16/to_fn.wgsl.expected.ir.msl
@@ -1,42 +1,42 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat2x4<f16> @offset(8)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
 }
 
-%a = func(%a_1:array<S, 4>):void -> %b2 {  # %a_1: 'a'
-  %b2 = block {
+%a = func(%a_1:array<S, 4>):void {  # %a_1: 'a'
+  $B2: {
     ret
   }
 }
-%b = func(%s:S):void -> %b3 {
-  %b3 = block {
+%b = func(%s:S):void {
+  $B3: {
     ret
   }
 }
-%c = func(%m:mat2x4<f16>):void -> %b4 {
-  %b4 = block {
+%c = func(%m:mat2x4<f16>):void {
+  $B4: {
     ret
   }
 }
-%d = func(%v:vec4<f16>):void -> %b5 {
-  %b5 = block {
+%d = func(%v:vec4<f16>):void {
+  $B5: {
     ret
   }
 }
-%e = func(%f:f16):void -> %b6 {
-  %b6 = block {
+%e = func(%f:f16):void {
+  $B6: {
     ret
   }
 }
-%f_1 = @compute @workgroup_size(1, 1, 1) func():void -> %b7 {  # %f_1: 'f'
-  %b7 = block {
+%f_1 = @compute @workgroup_size(1, 1, 1) func():void {  # %f_1: 'f'
+  $B7: {
     %13:array<S, 4> = load %u
     %14:void = call %a, %13
     %15:ptr<uniform, S, read> = access %u, 2i
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x4_f16/to_private.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat2x4_f16/to_private.wgsl.expected.ir.msl
index 521e1bb..721519e 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x4_f16/to_private.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x4_f16/to_private.wgsl.expected.ir.msl
@@ -1,18 +1,18 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat2x4<f16> @offset(8)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
   %p:ptr<private, array<S, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:array<S, 4> = load %u
     store %p, %4
     %5:ptr<private, S, read_write> = access %p, 1i
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x4_f16/to_storage.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat2x4_f16/to_storage.wgsl.expected.ir.msl
index b637eff..d50b8d3 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x4_f16/to_storage.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x4_f16/to_storage.wgsl.expected.ir.msl
@@ -1,33 +1,73 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat2x4<f16> @offset(8)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
   %s:ptr<storage, array<S, 4>, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:array<S, 4> = load %u
-    store %s, %4
-    %5:ptr<storage, S, read_write> = access %s, 1i
-    %6:ptr<uniform, S, read> = access %u, 2i
-    %7:S = load %6
-    store %5, %7
-    %8:ptr<storage, mat2x4<f16>, read_write> = access %s, 3i, 1u
-    %9:ptr<uniform, mat2x4<f16>, read> = access %u, 2i, 1u
-    %10:mat2x4<f16> = load %9
-    store %8, %10
-    %11:ptr<storage, vec4<f16>, read_write> = access %s, 1i, 1u, 0i
-    %12:ptr<uniform, vec4<f16>, read> = access %u, 0i, 1u, 1i
-    %13:vec4<f16> = load %12
-    %14:vec4<f16> = swizzle %13, ywxz
-    store %11, %14
+    %5:void = call %tint_store_and_preserve_padding, %s, %4
+    %7:ptr<storage, S, read_write> = access %s, 1i
+    %8:ptr<uniform, S, read> = access %u, 2i
+    %9:S = load %8
+    %10:void = call %tint_store_and_preserve_padding_1, %7, %9
+    %12:ptr<storage, mat2x4<f16>, read_write> = access %s, 3i, 1u
+    %13:ptr<uniform, mat2x4<f16>, read> = access %u, 2i, 1u
+    %14:mat2x4<f16> = load %13
+    store %12, %14
+    %15:ptr<storage, vec4<f16>, read_write> = access %s, 1i, 1u, 0i
+    %16:ptr<uniform, vec4<f16>, read> = access %u, 0i, 1u, 1i
+    %17:vec4<f16> = load %16
+    %18:vec4<f16> = swizzle %17, ywxz
+    store %15, %18
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, array<S, 4>, read_write>, %value_param:array<S, 4>):void {
+  $B3: {
+    loop [i: $B4, b: $B5, c: $B6] {  # loop_1
+      $B4: {  # initializer
+        next_iteration 0u  # -> $B5
+      }
+      $B5 (%idx:u32): {  # body
+        %22:bool = gte %idx, 4u
+        if %22 [t: $B7] {  # if_1
+          $B7: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %23:ptr<storage, S, read_write> = access %target, %idx
+        %24:S = access %value_param, %idx
+        %25:void = call %tint_store_and_preserve_padding_1, %23, %24
+        continue  # -> $B6
+      }
+      $B6: {  # continuing
+        %26:u32 = add %idx, 1u
+        next_iteration %26  # -> $B5
+      }
+    }
+    ret
+  }
+}
+%tint_store_and_preserve_padding_1 = func(%target_1:ptr<storage, S, read_write>, %value_param_1:S):void {  # %tint_store_and_preserve_padding_1: 'tint_store_and_preserve_padding', %target_1: 'target', %value_param_1: 'value_param'
+  $B8: {
+    %29:ptr<storage, i32, read_write> = access %target_1, 0u
+    %30:i32 = access %value_param_1, 0u
+    store %29, %30
+    %31:ptr<storage, mat2x4<f16>, read_write> = access %target_1, 1u
+    %32:mat2x4<f16> = access %value_param_1, 1u
+    store %31, %32
+    %33:ptr<storage, i32, read_write> = access %target_1, 2u
+    %34:i32 = access %value_param_1, 2u
+    store %33, %34
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x4_f16/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat2x4_f16/to_workgroup.wgsl.expected.ir.msl
index e59160c..7b8d581 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x4_f16/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x4_f16/to_workgroup.wgsl.expected.ir.msl
@@ -1,33 +1,54 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat2x4<f16> @offset(8)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
   %w:ptr<workgroup, array<S, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:array<S, 4> = load %u
-    store %w, %4
-    %5:ptr<workgroup, S, read_write> = access %w, 1i
-    %6:ptr<uniform, S, read> = access %u, 2i
-    %7:S = load %6
-    store %5, %7
-    %8:ptr<workgroup, mat2x4<f16>, read_write> = access %w, 3i, 1u
-    %9:ptr<uniform, mat2x4<f16>, read> = access %u, 2i, 1u
-    %10:mat2x4<f16> = load %9
-    store %8, %10
-    %11:ptr<workgroup, vec4<f16>, read_write> = access %w, 1i, 1u, 0i
-    %12:ptr<uniform, vec4<f16>, read> = access %u, 0i, 1u, 1i
-    %13:vec4<f16> = load %12
-    %14:vec4<f16> = swizzle %13, ywxz
-    store %11, %14
+%f = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B2: {
+    loop [i: $B3, b: $B4, c: $B5] {  # loop_1
+      $B3: {  # initializer
+        next_iteration %tint_local_index  # -> $B4
+      }
+      $B4 (%idx:u32): {  # body
+        %6:bool = gte %idx, 4u
+        if %6 [t: $B6] {  # if_1
+          $B6: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %7:ptr<workgroup, S, read_write> = access %w, %idx
+        store %7, S(0i, mat2x4<f16>(vec4<f16>(0.0h)), 0i)
+        continue  # -> $B5
+      }
+      $B5: {  # continuing
+        %8:u32 = add %idx, 1u
+        next_iteration %8  # -> $B4
+      }
+    }
+    %9:void = msl.threadgroup_barrier 4u
+    %10:array<S, 4> = load %u
+    store %w, %10
+    %11:ptr<workgroup, S, read_write> = access %w, 1i
+    %12:ptr<uniform, S, read> = access %u, 2i
+    %13:S = load %12
+    store %11, %13
+    %14:ptr<workgroup, mat2x4<f16>, read_write> = access %w, 3i, 1u
+    %15:ptr<uniform, mat2x4<f16>, read> = access %u, 2i, 1u
+    %16:mat2x4<f16> = load %15
+    store %14, %16
+    %17:ptr<workgroup, vec4<f16>, read_write> = access %w, 1i, 1u, 0i
+    %18:ptr<uniform, vec4<f16>, read> = access %u, 0i, 1u, 1i
+    %19:vec4<f16> = load %18
+    %20:vec4<f16> = swizzle %19, ywxz
+    store %17, %20
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat2x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
index 0e36171..f342797 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Inner = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Inner = struct @align(16) {
   m:mat2x4<f32> @offset(0)
 }
 
@@ -8,13 +8,13 @@
   a:array<Inner, 4> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %a:ptr<uniform, array<Outer, 4>, read> = var @binding_point(0, 0)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
+%i = func():i32 {
+  $B2: {
     %4:i32 = load %counter
     %5:i32 = add %4, 1i
     store %counter, %5
@@ -22,25 +22,37 @@
     ret %6
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_a:ptr<uniform, array<Outer, 4>, read> = let %a
     %9:i32 = call %i
-    %p_a_i:ptr<uniform, Outer, read> = access %p_a, %9
-    %p_a_i_a:ptr<uniform, array<Inner, 4>, read> = access %p_a_i, 0u
-    %12:i32 = call %i
-    %p_a_i_a_i:ptr<uniform, Inner, read> = access %p_a_i_a, %12
-    %p_a_i_a_i_m:ptr<uniform, mat2x4<f32>, read> = access %p_a_i_a_i, 0u
-    %15:i32 = call %i
-    %p_a_i_a_i_m_i:ptr<uniform, vec4<f32>, read> = access %p_a_i_a_i_m, %15
-    %l_a:array<Outer, 4> = load %p_a
-    %l_a_i:Outer = load %p_a_i
-    %l_a_i_a:array<Inner, 4> = load %p_a_i_a
-    %l_a_i_a_i:Inner = load %p_a_i_a_i
-    %l_a_i_a_i_m:mat2x4<f32> = load %p_a_i_a_i_m
-    %l_a_i_a_i_m_i:vec4<f32> = load %p_a_i_a_i_m_i
-    %23:i32 = call %i
-    %l_a_i_a_i_m_i_i:f32 = load_vector_element %p_a_i_a_i_m_i, %23
+    %10:ptr<uniform, Outer, read> = access %p_a, %9
+    %p_a_i:ptr<uniform, Outer, read> = let %10
+    %12:ptr<uniform, array<Inner, 4>, read> = access %p_a_i, 0u
+    %p_a_i_a:ptr<uniform, array<Inner, 4>, read> = let %12
+    %14:i32 = call %i
+    %15:ptr<uniform, Inner, read> = access %p_a_i_a, %14
+    %p_a_i_a_i:ptr<uniform, Inner, read> = let %15
+    %17:ptr<uniform, mat2x4<f32>, read> = access %p_a_i_a_i, 0u
+    %p_a_i_a_i_m:ptr<uniform, mat2x4<f32>, read> = let %17
+    %19:i32 = call %i
+    %20:ptr<uniform, vec4<f32>, read> = access %p_a_i_a_i_m, %19
+    %p_a_i_a_i_m_i:ptr<uniform, vec4<f32>, read> = let %20
+    %22:array<Outer, 4> = load %p_a
+    %l_a:array<Outer, 4> = let %22
+    %24:Outer = load %p_a_i
+    %l_a_i:Outer = let %24
+    %26:array<Inner, 4> = load %p_a_i_a
+    %l_a_i_a:array<Inner, 4> = let %26
+    %28:Inner = load %p_a_i_a_i
+    %l_a_i_a_i:Inner = let %28
+    %30:mat2x4<f32> = load %p_a_i_a_i_m
+    %l_a_i_a_i_m:mat2x4<f32> = let %30
+    %32:vec4<f32> = load %p_a_i_a_i_m_i
+    %l_a_i_a_i_m_i:vec4<f32> = let %32
+    %34:i32 = call %i
+    %35:f32 = load_vector_element %p_a_i_a_i_m_i, %34
+    %l_a_i_a_i_m_i_i:f32 = let %35
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x4_f32/static_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat2x4_f32/static_index_via_ptr.wgsl.expected.ir.msl
index 632a216..834d9f1 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x4_f32/static_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x4_f32/static_index_via_ptr.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Inner = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Inner = struct @align(16) {
   m:mat2x4<f32> @offset(0)
 }
 
@@ -8,25 +8,37 @@
   a:array<Inner, 4> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %a:ptr<uniform, array<Outer, 4>, read> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %p_a:ptr<uniform, array<Outer, 4>, read> = let %a
-    %p_a_3:ptr<uniform, Outer, read> = access %p_a, 3i
-    %p_a_3_a:ptr<uniform, array<Inner, 4>, read> = access %p_a_3, 0u
-    %p_a_3_a_2:ptr<uniform, Inner, read> = access %p_a_3_a, 2i
-    %p_a_3_a_2_m:ptr<uniform, mat2x4<f32>, read> = access %p_a_3_a_2, 0u
-    %p_a_3_a_2_m_1:ptr<uniform, vec4<f32>, read> = access %p_a_3_a_2_m, 1i
-    %l_a:array<Outer, 4> = load %p_a
-    %l_a_3:Outer = load %p_a_3
-    %l_a_3_a:array<Inner, 4> = load %p_a_3_a
-    %l_a_3_a_2:Inner = load %p_a_3_a_2
-    %l_a_3_a_2_m:mat2x4<f32> = load %p_a_3_a_2_m
-    %l_a_3_a_2_m_1:vec4<f32> = load %p_a_3_a_2_m_1
-    %l_a_3_a_2_m_1_0:f32 = load_vector_element %p_a_3_a_2_m_1, 0i
+    %4:ptr<uniform, Outer, read> = access %p_a, 3i
+    %p_a_3:ptr<uniform, Outer, read> = let %4
+    %6:ptr<uniform, array<Inner, 4>, read> = access %p_a_3, 0u
+    %p_a_3_a:ptr<uniform, array<Inner, 4>, read> = let %6
+    %8:ptr<uniform, Inner, read> = access %p_a_3_a, 2i
+    %p_a_3_a_2:ptr<uniform, Inner, read> = let %8
+    %10:ptr<uniform, mat2x4<f32>, read> = access %p_a_3_a_2, 0u
+    %p_a_3_a_2_m:ptr<uniform, mat2x4<f32>, read> = let %10
+    %12:ptr<uniform, vec4<f32>, read> = access %p_a_3_a_2_m, 1i
+    %p_a_3_a_2_m_1:ptr<uniform, vec4<f32>, read> = let %12
+    %14:array<Outer, 4> = load %p_a
+    %l_a:array<Outer, 4> = let %14
+    %16:Outer = load %p_a_3
+    %l_a_3:Outer = let %16
+    %18:array<Inner, 4> = load %p_a_3_a
+    %l_a_3_a:array<Inner, 4> = let %18
+    %20:Inner = load %p_a_3_a_2
+    %l_a_3_a_2:Inner = let %20
+    %22:mat2x4<f32> = load %p_a_3_a_2_m
+    %l_a_3_a_2_m:mat2x4<f32> = let %22
+    %24:vec4<f32> = load %p_a_3_a_2_m_1
+    %l_a_3_a_2_m_1:vec4<f32> = let %24
+    %26:f32 = load_vector_element %p_a_3_a_2_m_1, 0i
+    %l_a_3_a_2_m_1_0:f32 = let %26
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x4_f32/to_builtin.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat2x4_f32/to_builtin.wgsl.expected.ir.msl
index b2da235..26c5032 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x4_f32/to_builtin.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x4_f32/to_builtin.wgsl.expected.ir.msl
@@ -1,29 +1,32 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat2x4<f32> @offset(16)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %3:ptr<uniform, mat2x4<f32>, read> = access %u, 2i, 1u
     %4:mat2x4<f32> = load %3
-    %t:mat4x2<f32> = transpose %4
-    %6:ptr<uniform, vec4<f32>, read> = access %u, 0i, 1u, 1i
-    %7:vec4<f32> = load %6
-    %8:vec4<f32> = swizzle %7, ywxz
-    %l:f32 = length %8
-    %10:ptr<uniform, vec4<f32>, read> = access %u, 0i, 1u, 1i
-    %11:vec4<f32> = load %10
-    %12:vec4<f32> = swizzle %11, ywxz
-    %13:f32 = access %12, 0u
-    %a:f32 = abs %13
+    %5:mat4x2<f32> = transpose %4
+    %t:mat4x2<f32> = let %5
+    %7:ptr<uniform, vec4<f32>, read> = access %u, 0i, 1u, 1i
+    %8:vec4<f32> = load %7
+    %9:vec4<f32> = swizzle %8, ywxz
+    %10:f32 = length %9
+    %l:f32 = let %10
+    %12:ptr<uniform, vec4<f32>, read> = access %u, 0i, 1u, 1i
+    %13:vec4<f32> = load %12
+    %14:vec4<f32> = swizzle %13, ywxz
+    %15:f32 = access %14, 0u
+    %16:f32 = abs %15
+    %a:f32 = let %16
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x4_f32/to_fn.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat2x4_f32/to_fn.wgsl.expected.ir.msl
index 0c24a20..62e00c5 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x4_f32/to_fn.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x4_f32/to_fn.wgsl.expected.ir.msl
@@ -1,42 +1,42 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat2x4<f32> @offset(16)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
 }
 
-%a = func(%a_1:array<S, 4>):void -> %b2 {  # %a_1: 'a'
-  %b2 = block {
+%a = func(%a_1:array<S, 4>):void {  # %a_1: 'a'
+  $B2: {
     ret
   }
 }
-%b = func(%s:S):void -> %b3 {
-  %b3 = block {
+%b = func(%s:S):void {
+  $B3: {
     ret
   }
 }
-%c = func(%m:mat2x4<f32>):void -> %b4 {
-  %b4 = block {
+%c = func(%m:mat2x4<f32>):void {
+  $B4: {
     ret
   }
 }
-%d = func(%v:vec4<f32>):void -> %b5 {
-  %b5 = block {
+%d = func(%v:vec4<f32>):void {
+  $B5: {
     ret
   }
 }
-%e = func(%f:f32):void -> %b6 {
-  %b6 = block {
+%e = func(%f:f32):void {
+  $B6: {
     ret
   }
 }
-%f_1 = @compute @workgroup_size(1, 1, 1) func():void -> %b7 {  # %f_1: 'f'
-  %b7 = block {
+%f_1 = @compute @workgroup_size(1, 1, 1) func():void {  # %f_1: 'f'
+  $B7: {
     %13:array<S, 4> = load %u
     %14:void = call %a, %13
     %15:ptr<uniform, S, read> = access %u, 2i
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x4_f32/to_private.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat2x4_f32/to_private.wgsl.expected.ir.msl
index 476762d..b590bca 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x4_f32/to_private.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x4_f32/to_private.wgsl.expected.ir.msl
@@ -1,18 +1,18 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat2x4<f32> @offset(16)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
   %p:ptr<private, array<S, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:array<S, 4> = load %u
     store %p, %4
     %5:ptr<private, S, read_write> = access %p, 1i
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x4_f32/to_storage.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat2x4_f32/to_storage.wgsl.expected.ir.msl
index 00874ef..86b6c42 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x4_f32/to_storage.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x4_f32/to_storage.wgsl.expected.ir.msl
@@ -1,33 +1,73 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat2x4<f32> @offset(16)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
   %s:ptr<storage, array<S, 4>, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:array<S, 4> = load %u
-    store %s, %4
-    %5:ptr<storage, S, read_write> = access %s, 1i
-    %6:ptr<uniform, S, read> = access %u, 2i
-    %7:S = load %6
-    store %5, %7
-    %8:ptr<storage, mat2x4<f32>, read_write> = access %s, 3i, 1u
-    %9:ptr<uniform, mat2x4<f32>, read> = access %u, 2i, 1u
-    %10:mat2x4<f32> = load %9
-    store %8, %10
-    %11:ptr<storage, vec4<f32>, read_write> = access %s, 1i, 1u, 0i
-    %12:ptr<uniform, vec4<f32>, read> = access %u, 0i, 1u, 1i
-    %13:vec4<f32> = load %12
-    %14:vec4<f32> = swizzle %13, ywxz
-    store %11, %14
+    %5:void = call %tint_store_and_preserve_padding, %s, %4
+    %7:ptr<storage, S, read_write> = access %s, 1i
+    %8:ptr<uniform, S, read> = access %u, 2i
+    %9:S = load %8
+    %10:void = call %tint_store_and_preserve_padding_1, %7, %9
+    %12:ptr<storage, mat2x4<f32>, read_write> = access %s, 3i, 1u
+    %13:ptr<uniform, mat2x4<f32>, read> = access %u, 2i, 1u
+    %14:mat2x4<f32> = load %13
+    store %12, %14
+    %15:ptr<storage, vec4<f32>, read_write> = access %s, 1i, 1u, 0i
+    %16:ptr<uniform, vec4<f32>, read> = access %u, 0i, 1u, 1i
+    %17:vec4<f32> = load %16
+    %18:vec4<f32> = swizzle %17, ywxz
+    store %15, %18
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, array<S, 4>, read_write>, %value_param:array<S, 4>):void {
+  $B3: {
+    loop [i: $B4, b: $B5, c: $B6] {  # loop_1
+      $B4: {  # initializer
+        next_iteration 0u  # -> $B5
+      }
+      $B5 (%idx:u32): {  # body
+        %22:bool = gte %idx, 4u
+        if %22 [t: $B7] {  # if_1
+          $B7: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %23:ptr<storage, S, read_write> = access %target, %idx
+        %24:S = access %value_param, %idx
+        %25:void = call %tint_store_and_preserve_padding_1, %23, %24
+        continue  # -> $B6
+      }
+      $B6: {  # continuing
+        %26:u32 = add %idx, 1u
+        next_iteration %26  # -> $B5
+      }
+    }
+    ret
+  }
+}
+%tint_store_and_preserve_padding_1 = func(%target_1:ptr<storage, S, read_write>, %value_param_1:S):void {  # %tint_store_and_preserve_padding_1: 'tint_store_and_preserve_padding', %target_1: 'target', %value_param_1: 'value_param'
+  $B8: {
+    %29:ptr<storage, i32, read_write> = access %target_1, 0u
+    %30:i32 = access %value_param_1, 0u
+    store %29, %30
+    %31:ptr<storage, mat2x4<f32>, read_write> = access %target_1, 1u
+    %32:mat2x4<f32> = access %value_param_1, 1u
+    store %31, %32
+    %33:ptr<storage, i32, read_write> = access %target_1, 2u
+    %34:i32 = access %value_param_1, 2u
+    store %33, %34
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x4_f32/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat2x4_f32/to_workgroup.wgsl.expected.ir.msl
index 7af440c..c89cd72 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x4_f32/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x4_f32/to_workgroup.wgsl.expected.ir.msl
@@ -1,33 +1,54 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat2x4<f32> @offset(16)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
   %w:ptr<workgroup, array<S, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:array<S, 4> = load %u
-    store %w, %4
-    %5:ptr<workgroup, S, read_write> = access %w, 1i
-    %6:ptr<uniform, S, read> = access %u, 2i
-    %7:S = load %6
-    store %5, %7
-    %8:ptr<workgroup, mat2x4<f32>, read_write> = access %w, 3i, 1u
-    %9:ptr<uniform, mat2x4<f32>, read> = access %u, 2i, 1u
-    %10:mat2x4<f32> = load %9
-    store %8, %10
-    %11:ptr<workgroup, vec4<f32>, read_write> = access %w, 1i, 1u, 0i
-    %12:ptr<uniform, vec4<f32>, read> = access %u, 0i, 1u, 1i
-    %13:vec4<f32> = load %12
-    %14:vec4<f32> = swizzle %13, ywxz
-    store %11, %14
+%f = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B2: {
+    loop [i: $B3, b: $B4, c: $B5] {  # loop_1
+      $B3: {  # initializer
+        next_iteration %tint_local_index  # -> $B4
+      }
+      $B4 (%idx:u32): {  # body
+        %6:bool = gte %idx, 4u
+        if %6 [t: $B6] {  # if_1
+          $B6: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %7:ptr<workgroup, S, read_write> = access %w, %idx
+        store %7, S(0i, mat2x4<f32>(vec4<f32>(0.0f)), 0i)
+        continue  # -> $B5
+      }
+      $B5: {  # continuing
+        %8:u32 = add %idx, 1u
+        next_iteration %8  # -> $B4
+      }
+    }
+    %9:void = msl.threadgroup_barrier 4u
+    %10:array<S, 4> = load %u
+    store %w, %10
+    %11:ptr<workgroup, S, read_write> = access %w, 1i
+    %12:ptr<uniform, S, read> = access %u, 2i
+    %13:S = load %12
+    store %11, %13
+    %14:ptr<workgroup, mat2x4<f32>, read_write> = access %w, 3i, 1u
+    %15:ptr<uniform, mat2x4<f32>, read> = access %u, 2i, 1u
+    %16:mat2x4<f32> = load %15
+    store %14, %16
+    %17:ptr<workgroup, vec4<f32>, read_write> = access %w, 1i, 1u, 0i
+    %18:ptr<uniform, vec4<f32>, read> = access %u, 0i, 1u, 1i
+    %19:vec4<f32> = load %18
+    %20:vec4<f32> = swizzle %19, ywxz
+    store %17, %20
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x2_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat3x2_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
index af95beb..9cd196e 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x2_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x2_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Inner = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Inner = struct @align(4) {
   m:mat3x2<f16> @offset(0)
 }
 
@@ -8,13 +8,13 @@
   a:array<Inner, 4> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %a:ptr<uniform, array<Outer, 4>, read> = var @binding_point(0, 0)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
+%i = func():i32 {
+  $B2: {
     %4:i32 = load %counter
     %5:i32 = add %4, 1i
     store %counter, %5
@@ -22,25 +22,37 @@
     ret %6
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_a:ptr<uniform, array<Outer, 4>, read> = let %a
     %9:i32 = call %i
-    %p_a_i:ptr<uniform, Outer, read> = access %p_a, %9
-    %p_a_i_a:ptr<uniform, array<Inner, 4>, read> = access %p_a_i, 0u
-    %12:i32 = call %i
-    %p_a_i_a_i:ptr<uniform, Inner, read> = access %p_a_i_a, %12
-    %p_a_i_a_i_m:ptr<uniform, mat3x2<f16>, read> = access %p_a_i_a_i, 0u
-    %15:i32 = call %i
-    %p_a_i_a_i_m_i:ptr<uniform, vec2<f16>, read> = access %p_a_i_a_i_m, %15
-    %l_a:array<Outer, 4> = load %p_a
-    %l_a_i:Outer = load %p_a_i
-    %l_a_i_a:array<Inner, 4> = load %p_a_i_a
-    %l_a_i_a_i:Inner = load %p_a_i_a_i
-    %l_a_i_a_i_m:mat3x2<f16> = load %p_a_i_a_i_m
-    %l_a_i_a_i_m_i:vec2<f16> = load %p_a_i_a_i_m_i
-    %23:i32 = call %i
-    %l_a_i_a_i_m_i_i:f16 = load_vector_element %p_a_i_a_i_m_i, %23
+    %10:ptr<uniform, Outer, read> = access %p_a, %9
+    %p_a_i:ptr<uniform, Outer, read> = let %10
+    %12:ptr<uniform, array<Inner, 4>, read> = access %p_a_i, 0u
+    %p_a_i_a:ptr<uniform, array<Inner, 4>, read> = let %12
+    %14:i32 = call %i
+    %15:ptr<uniform, Inner, read> = access %p_a_i_a, %14
+    %p_a_i_a_i:ptr<uniform, Inner, read> = let %15
+    %17:ptr<uniform, mat3x2<f16>, read> = access %p_a_i_a_i, 0u
+    %p_a_i_a_i_m:ptr<uniform, mat3x2<f16>, read> = let %17
+    %19:i32 = call %i
+    %20:ptr<uniform, vec2<f16>, read> = access %p_a_i_a_i_m, %19
+    %p_a_i_a_i_m_i:ptr<uniform, vec2<f16>, read> = let %20
+    %22:array<Outer, 4> = load %p_a
+    %l_a:array<Outer, 4> = let %22
+    %24:Outer = load %p_a_i
+    %l_a_i:Outer = let %24
+    %26:array<Inner, 4> = load %p_a_i_a
+    %l_a_i_a:array<Inner, 4> = let %26
+    %28:Inner = load %p_a_i_a_i
+    %l_a_i_a_i:Inner = let %28
+    %30:mat3x2<f16> = load %p_a_i_a_i_m
+    %l_a_i_a_i_m:mat3x2<f16> = let %30
+    %32:vec2<f16> = load %p_a_i_a_i_m_i
+    %l_a_i_a_i_m_i:vec2<f16> = let %32
+    %34:i32 = call %i
+    %35:f16 = load_vector_element %p_a_i_a_i_m_i, %34
+    %l_a_i_a_i_m_i_i:f16 = let %35
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x2_f16/static_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat3x2_f16/static_index_via_ptr.wgsl.expected.ir.msl
index 8ebf0b1..0f186d0 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x2_f16/static_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x2_f16/static_index_via_ptr.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Inner = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Inner = struct @align(4) {
   m:mat3x2<f16> @offset(0)
 }
 
@@ -8,25 +8,37 @@
   a:array<Inner, 4> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %a:ptr<uniform, array<Outer, 4>, read> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %p_a:ptr<uniform, array<Outer, 4>, read> = let %a
-    %p_a_3:ptr<uniform, Outer, read> = access %p_a, 3i
-    %p_a_3_a:ptr<uniform, array<Inner, 4>, read> = access %p_a_3, 0u
-    %p_a_3_a_2:ptr<uniform, Inner, read> = access %p_a_3_a, 2i
-    %p_a_3_a_2_m:ptr<uniform, mat3x2<f16>, read> = access %p_a_3_a_2, 0u
-    %p_a_3_a_2_m_1:ptr<uniform, vec2<f16>, read> = access %p_a_3_a_2_m, 1i
-    %l_a:array<Outer, 4> = load %p_a
-    %l_a_3:Outer = load %p_a_3
-    %l_a_3_a:array<Inner, 4> = load %p_a_3_a
-    %l_a_3_a_2:Inner = load %p_a_3_a_2
-    %l_a_3_a_2_m:mat3x2<f16> = load %p_a_3_a_2_m
-    %l_a_3_a_2_m_1:vec2<f16> = load %p_a_3_a_2_m_1
-    %l_a_3_a_2_m_1_0:f16 = load_vector_element %p_a_3_a_2_m_1, 0i
+    %4:ptr<uniform, Outer, read> = access %p_a, 3i
+    %p_a_3:ptr<uniform, Outer, read> = let %4
+    %6:ptr<uniform, array<Inner, 4>, read> = access %p_a_3, 0u
+    %p_a_3_a:ptr<uniform, array<Inner, 4>, read> = let %6
+    %8:ptr<uniform, Inner, read> = access %p_a_3_a, 2i
+    %p_a_3_a_2:ptr<uniform, Inner, read> = let %8
+    %10:ptr<uniform, mat3x2<f16>, read> = access %p_a_3_a_2, 0u
+    %p_a_3_a_2_m:ptr<uniform, mat3x2<f16>, read> = let %10
+    %12:ptr<uniform, vec2<f16>, read> = access %p_a_3_a_2_m, 1i
+    %p_a_3_a_2_m_1:ptr<uniform, vec2<f16>, read> = let %12
+    %14:array<Outer, 4> = load %p_a
+    %l_a:array<Outer, 4> = let %14
+    %16:Outer = load %p_a_3
+    %l_a_3:Outer = let %16
+    %18:array<Inner, 4> = load %p_a_3_a
+    %l_a_3_a:array<Inner, 4> = let %18
+    %20:Inner = load %p_a_3_a_2
+    %l_a_3_a_2:Inner = let %20
+    %22:mat3x2<f16> = load %p_a_3_a_2_m
+    %l_a_3_a_2_m:mat3x2<f16> = let %22
+    %24:vec2<f16> = load %p_a_3_a_2_m_1
+    %l_a_3_a_2_m_1:vec2<f16> = let %24
+    %26:f16 = load_vector_element %p_a_3_a_2_m_1, 0i
+    %l_a_3_a_2_m_1_0:f16 = let %26
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x2_f16/to_builtin.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat3x2_f16/to_builtin.wgsl.expected.ir.msl
index ab3afba..379b718 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x2_f16/to_builtin.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x2_f16/to_builtin.wgsl.expected.ir.msl
@@ -1,29 +1,32 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat3x2<f16> @offset(4)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %3:ptr<uniform, mat3x2<f16>, read> = access %u, 2i, 1u
     %4:mat3x2<f16> = load %3
-    %t:mat2x3<f16> = transpose %4
-    %6:ptr<uniform, vec2<f16>, read> = access %u, 0i, 1u, 1i
-    %7:vec2<f16> = load %6
-    %8:vec2<f16> = swizzle %7, yx
-    %l:f16 = length %8
-    %10:ptr<uniform, vec2<f16>, read> = access %u, 0i, 1u, 1i
-    %11:vec2<f16> = load %10
-    %12:vec2<f16> = swizzle %11, yx
-    %13:f16 = access %12, 0u
-    %a:f16 = abs %13
+    %5:mat2x3<f16> = transpose %4
+    %t:mat2x3<f16> = let %5
+    %7:ptr<uniform, vec2<f16>, read> = access %u, 0i, 1u, 1i
+    %8:vec2<f16> = load %7
+    %9:vec2<f16> = swizzle %8, yx
+    %10:f16 = length %9
+    %l:f16 = let %10
+    %12:ptr<uniform, vec2<f16>, read> = access %u, 0i, 1u, 1i
+    %13:vec2<f16> = load %12
+    %14:vec2<f16> = swizzle %13, yx
+    %15:f16 = access %14, 0u
+    %16:f16 = abs %15
+    %a:f16 = let %16
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x2_f16/to_fn.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat3x2_f16/to_fn.wgsl.expected.ir.msl
index 30c80ed..71375f6 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x2_f16/to_fn.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x2_f16/to_fn.wgsl.expected.ir.msl
@@ -1,42 +1,42 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat3x2<f16> @offset(4)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
 }
 
-%a = func(%a_1:array<S, 4>):void -> %b2 {  # %a_1: 'a'
-  %b2 = block {
+%a = func(%a_1:array<S, 4>):void {  # %a_1: 'a'
+  $B2: {
     ret
   }
 }
-%b = func(%s:S):void -> %b3 {
-  %b3 = block {
+%b = func(%s:S):void {
+  $B3: {
     ret
   }
 }
-%c = func(%m:mat3x2<f16>):void -> %b4 {
-  %b4 = block {
+%c = func(%m:mat3x2<f16>):void {
+  $B4: {
     ret
   }
 }
-%d = func(%v:vec2<f16>):void -> %b5 {
-  %b5 = block {
+%d = func(%v:vec2<f16>):void {
+  $B5: {
     ret
   }
 }
-%e = func(%f:f16):void -> %b6 {
-  %b6 = block {
+%e = func(%f:f16):void {
+  $B6: {
     ret
   }
 }
-%f_1 = @compute @workgroup_size(1, 1, 1) func():void -> %b7 {  # %f_1: 'f'
-  %b7 = block {
+%f_1 = @compute @workgroup_size(1, 1, 1) func():void {  # %f_1: 'f'
+  $B7: {
     %13:array<S, 4> = load %u
     %14:void = call %a, %13
     %15:ptr<uniform, S, read> = access %u, 2i
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x2_f16/to_private.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat3x2_f16/to_private.wgsl.expected.ir.msl
index 50cbbbe..5f79e31 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x2_f16/to_private.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x2_f16/to_private.wgsl.expected.ir.msl
@@ -1,18 +1,18 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat3x2<f16> @offset(4)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
   %p:ptr<private, array<S, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:array<S, 4> = load %u
     store %p, %4
     %5:ptr<private, S, read_write> = access %p, 1i
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x2_f16/to_storage.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat3x2_f16/to_storage.wgsl.expected.ir.msl
index 5035ff6..d11d060 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x2_f16/to_storage.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x2_f16/to_storage.wgsl.expected.ir.msl
@@ -1,33 +1,73 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat3x2<f16> @offset(4)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
   %s:ptr<storage, array<S, 4>, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:array<S, 4> = load %u
-    store %s, %4
-    %5:ptr<storage, S, read_write> = access %s, 1i
-    %6:ptr<uniform, S, read> = access %u, 2i
-    %7:S = load %6
-    store %5, %7
-    %8:ptr<storage, mat3x2<f16>, read_write> = access %s, 3i, 1u
-    %9:ptr<uniform, mat3x2<f16>, read> = access %u, 2i, 1u
-    %10:mat3x2<f16> = load %9
-    store %8, %10
-    %11:ptr<storage, vec2<f16>, read_write> = access %s, 1i, 1u, 0i
-    %12:ptr<uniform, vec2<f16>, read> = access %u, 0i, 1u, 1i
-    %13:vec2<f16> = load %12
-    %14:vec2<f16> = swizzle %13, yx
-    store %11, %14
+    %5:void = call %tint_store_and_preserve_padding, %s, %4
+    %7:ptr<storage, S, read_write> = access %s, 1i
+    %8:ptr<uniform, S, read> = access %u, 2i
+    %9:S = load %8
+    %10:void = call %tint_store_and_preserve_padding_1, %7, %9
+    %12:ptr<storage, mat3x2<f16>, read_write> = access %s, 3i, 1u
+    %13:ptr<uniform, mat3x2<f16>, read> = access %u, 2i, 1u
+    %14:mat3x2<f16> = load %13
+    store %12, %14
+    %15:ptr<storage, vec2<f16>, read_write> = access %s, 1i, 1u, 0i
+    %16:ptr<uniform, vec2<f16>, read> = access %u, 0i, 1u, 1i
+    %17:vec2<f16> = load %16
+    %18:vec2<f16> = swizzle %17, yx
+    store %15, %18
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, array<S, 4>, read_write>, %value_param:array<S, 4>):void {
+  $B3: {
+    loop [i: $B4, b: $B5, c: $B6] {  # loop_1
+      $B4: {  # initializer
+        next_iteration 0u  # -> $B5
+      }
+      $B5 (%idx:u32): {  # body
+        %22:bool = gte %idx, 4u
+        if %22 [t: $B7] {  # if_1
+          $B7: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %23:ptr<storage, S, read_write> = access %target, %idx
+        %24:S = access %value_param, %idx
+        %25:void = call %tint_store_and_preserve_padding_1, %23, %24
+        continue  # -> $B6
+      }
+      $B6: {  # continuing
+        %26:u32 = add %idx, 1u
+        next_iteration %26  # -> $B5
+      }
+    }
+    ret
+  }
+}
+%tint_store_and_preserve_padding_1 = func(%target_1:ptr<storage, S, read_write>, %value_param_1:S):void {  # %tint_store_and_preserve_padding_1: 'tint_store_and_preserve_padding', %target_1: 'target', %value_param_1: 'value_param'
+  $B8: {
+    %29:ptr<storage, i32, read_write> = access %target_1, 0u
+    %30:i32 = access %value_param_1, 0u
+    store %29, %30
+    %31:ptr<storage, mat3x2<f16>, read_write> = access %target_1, 1u
+    %32:mat3x2<f16> = access %value_param_1, 1u
+    store %31, %32
+    %33:ptr<storage, i32, read_write> = access %target_1, 2u
+    %34:i32 = access %value_param_1, 2u
+    store %33, %34
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x2_f16/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat3x2_f16/to_workgroup.wgsl.expected.ir.msl
index 0265a2b..7012199 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x2_f16/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x2_f16/to_workgroup.wgsl.expected.ir.msl
@@ -1,33 +1,54 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat3x2<f16> @offset(4)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
   %w:ptr<workgroup, array<S, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:array<S, 4> = load %u
-    store %w, %4
-    %5:ptr<workgroup, S, read_write> = access %w, 1i
-    %6:ptr<uniform, S, read> = access %u, 2i
-    %7:S = load %6
-    store %5, %7
-    %8:ptr<workgroup, mat3x2<f16>, read_write> = access %w, 3i, 1u
-    %9:ptr<uniform, mat3x2<f16>, read> = access %u, 2i, 1u
-    %10:mat3x2<f16> = load %9
-    store %8, %10
-    %11:ptr<workgroup, vec2<f16>, read_write> = access %w, 1i, 1u, 0i
-    %12:ptr<uniform, vec2<f16>, read> = access %u, 0i, 1u, 1i
-    %13:vec2<f16> = load %12
-    %14:vec2<f16> = swizzle %13, yx
-    store %11, %14
+%f = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B2: {
+    loop [i: $B3, b: $B4, c: $B5] {  # loop_1
+      $B3: {  # initializer
+        next_iteration %tint_local_index  # -> $B4
+      }
+      $B4 (%idx:u32): {  # body
+        %6:bool = gte %idx, 4u
+        if %6 [t: $B6] {  # if_1
+          $B6: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %7:ptr<workgroup, S, read_write> = access %w, %idx
+        store %7, S(0i, mat3x2<f16>(vec2<f16>(0.0h)), 0i)
+        continue  # -> $B5
+      }
+      $B5: {  # continuing
+        %8:u32 = add %idx, 1u
+        next_iteration %8  # -> $B4
+      }
+    }
+    %9:void = msl.threadgroup_barrier 4u
+    %10:array<S, 4> = load %u
+    store %w, %10
+    %11:ptr<workgroup, S, read_write> = access %w, 1i
+    %12:ptr<uniform, S, read> = access %u, 2i
+    %13:S = load %12
+    store %11, %13
+    %14:ptr<workgroup, mat3x2<f16>, read_write> = access %w, 3i, 1u
+    %15:ptr<uniform, mat3x2<f16>, read> = access %u, 2i, 1u
+    %16:mat3x2<f16> = load %15
+    store %14, %16
+    %17:ptr<workgroup, vec2<f16>, read_write> = access %w, 1i, 1u, 0i
+    %18:ptr<uniform, vec2<f16>, read> = access %u, 0i, 1u, 1i
+    %19:vec2<f16> = load %18
+    %20:vec2<f16> = swizzle %19, yx
+    store %17, %20
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x2_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat3x2_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
index 33038c5..d191fe4 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x2_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x2_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Inner = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Inner = struct @align(8) {
   m:mat3x2<f32> @offset(0)
 }
 
@@ -8,13 +8,13 @@
   a:array<Inner, 4> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %a:ptr<uniform, array<Outer, 4>, read> = var @binding_point(0, 0)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
+%i = func():i32 {
+  $B2: {
     %4:i32 = load %counter
     %5:i32 = add %4, 1i
     store %counter, %5
@@ -22,25 +22,37 @@
     ret %6
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_a:ptr<uniform, array<Outer, 4>, read> = let %a
     %9:i32 = call %i
-    %p_a_i:ptr<uniform, Outer, read> = access %p_a, %9
-    %p_a_i_a:ptr<uniform, array<Inner, 4>, read> = access %p_a_i, 0u
-    %12:i32 = call %i
-    %p_a_i_a_i:ptr<uniform, Inner, read> = access %p_a_i_a, %12
-    %p_a_i_a_i_m:ptr<uniform, mat3x2<f32>, read> = access %p_a_i_a_i, 0u
-    %15:i32 = call %i
-    %p_a_i_a_i_m_i:ptr<uniform, vec2<f32>, read> = access %p_a_i_a_i_m, %15
-    %l_a:array<Outer, 4> = load %p_a
-    %l_a_i:Outer = load %p_a_i
-    %l_a_i_a:array<Inner, 4> = load %p_a_i_a
-    %l_a_i_a_i:Inner = load %p_a_i_a_i
-    %l_a_i_a_i_m:mat3x2<f32> = load %p_a_i_a_i_m
-    %l_a_i_a_i_m_i:vec2<f32> = load %p_a_i_a_i_m_i
-    %23:i32 = call %i
-    %l_a_i_a_i_m_i_i:f32 = load_vector_element %p_a_i_a_i_m_i, %23
+    %10:ptr<uniform, Outer, read> = access %p_a, %9
+    %p_a_i:ptr<uniform, Outer, read> = let %10
+    %12:ptr<uniform, array<Inner, 4>, read> = access %p_a_i, 0u
+    %p_a_i_a:ptr<uniform, array<Inner, 4>, read> = let %12
+    %14:i32 = call %i
+    %15:ptr<uniform, Inner, read> = access %p_a_i_a, %14
+    %p_a_i_a_i:ptr<uniform, Inner, read> = let %15
+    %17:ptr<uniform, mat3x2<f32>, read> = access %p_a_i_a_i, 0u
+    %p_a_i_a_i_m:ptr<uniform, mat3x2<f32>, read> = let %17
+    %19:i32 = call %i
+    %20:ptr<uniform, vec2<f32>, read> = access %p_a_i_a_i_m, %19
+    %p_a_i_a_i_m_i:ptr<uniform, vec2<f32>, read> = let %20
+    %22:array<Outer, 4> = load %p_a
+    %l_a:array<Outer, 4> = let %22
+    %24:Outer = load %p_a_i
+    %l_a_i:Outer = let %24
+    %26:array<Inner, 4> = load %p_a_i_a
+    %l_a_i_a:array<Inner, 4> = let %26
+    %28:Inner = load %p_a_i_a_i
+    %l_a_i_a_i:Inner = let %28
+    %30:mat3x2<f32> = load %p_a_i_a_i_m
+    %l_a_i_a_i_m:mat3x2<f32> = let %30
+    %32:vec2<f32> = load %p_a_i_a_i_m_i
+    %l_a_i_a_i_m_i:vec2<f32> = let %32
+    %34:i32 = call %i
+    %35:f32 = load_vector_element %p_a_i_a_i_m_i, %34
+    %l_a_i_a_i_m_i_i:f32 = let %35
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x2_f32/static_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat3x2_f32/static_index_via_ptr.wgsl.expected.ir.msl
index 067cbdf..1c32e7f 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x2_f32/static_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x2_f32/static_index_via_ptr.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Inner = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Inner = struct @align(8) {
   m:mat3x2<f32> @offset(0)
 }
 
@@ -8,25 +8,37 @@
   a:array<Inner, 4> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %a:ptr<uniform, array<Outer, 4>, read> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %p_a:ptr<uniform, array<Outer, 4>, read> = let %a
-    %p_a_3:ptr<uniform, Outer, read> = access %p_a, 3i
-    %p_a_3_a:ptr<uniform, array<Inner, 4>, read> = access %p_a_3, 0u
-    %p_a_3_a_2:ptr<uniform, Inner, read> = access %p_a_3_a, 2i
-    %p_a_3_a_2_m:ptr<uniform, mat3x2<f32>, read> = access %p_a_3_a_2, 0u
-    %p_a_3_a_2_m_1:ptr<uniform, vec2<f32>, read> = access %p_a_3_a_2_m, 1i
-    %l_a:array<Outer, 4> = load %p_a
-    %l_a_3:Outer = load %p_a_3
-    %l_a_3_a:array<Inner, 4> = load %p_a_3_a
-    %l_a_3_a_2:Inner = load %p_a_3_a_2
-    %l_a_3_a_2_m:mat3x2<f32> = load %p_a_3_a_2_m
-    %l_a_3_a_2_m_1:vec2<f32> = load %p_a_3_a_2_m_1
-    %l_a_3_a_2_m_1_0:f32 = load_vector_element %p_a_3_a_2_m_1, 0i
+    %4:ptr<uniform, Outer, read> = access %p_a, 3i
+    %p_a_3:ptr<uniform, Outer, read> = let %4
+    %6:ptr<uniform, array<Inner, 4>, read> = access %p_a_3, 0u
+    %p_a_3_a:ptr<uniform, array<Inner, 4>, read> = let %6
+    %8:ptr<uniform, Inner, read> = access %p_a_3_a, 2i
+    %p_a_3_a_2:ptr<uniform, Inner, read> = let %8
+    %10:ptr<uniform, mat3x2<f32>, read> = access %p_a_3_a_2, 0u
+    %p_a_3_a_2_m:ptr<uniform, mat3x2<f32>, read> = let %10
+    %12:ptr<uniform, vec2<f32>, read> = access %p_a_3_a_2_m, 1i
+    %p_a_3_a_2_m_1:ptr<uniform, vec2<f32>, read> = let %12
+    %14:array<Outer, 4> = load %p_a
+    %l_a:array<Outer, 4> = let %14
+    %16:Outer = load %p_a_3
+    %l_a_3:Outer = let %16
+    %18:array<Inner, 4> = load %p_a_3_a
+    %l_a_3_a:array<Inner, 4> = let %18
+    %20:Inner = load %p_a_3_a_2
+    %l_a_3_a_2:Inner = let %20
+    %22:mat3x2<f32> = load %p_a_3_a_2_m
+    %l_a_3_a_2_m:mat3x2<f32> = let %22
+    %24:vec2<f32> = load %p_a_3_a_2_m_1
+    %l_a_3_a_2_m_1:vec2<f32> = let %24
+    %26:f32 = load_vector_element %p_a_3_a_2_m_1, 0i
+    %l_a_3_a_2_m_1_0:f32 = let %26
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x2_f32/to_builtin.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat3x2_f32/to_builtin.wgsl.expected.ir.msl
index 20432b7..37ee1fe 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x2_f32/to_builtin.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x2_f32/to_builtin.wgsl.expected.ir.msl
@@ -1,29 +1,32 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat3x2<f32> @offset(8)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %3:ptr<uniform, mat3x2<f32>, read> = access %u, 2i, 1u
     %4:mat3x2<f32> = load %3
-    %t:mat2x3<f32> = transpose %4
-    %6:ptr<uniform, vec2<f32>, read> = access %u, 0i, 1u, 1i
-    %7:vec2<f32> = load %6
-    %8:vec2<f32> = swizzle %7, yx
-    %l:f32 = length %8
-    %10:ptr<uniform, vec2<f32>, read> = access %u, 0i, 1u, 1i
-    %11:vec2<f32> = load %10
-    %12:vec2<f32> = swizzle %11, yx
-    %13:f32 = access %12, 0u
-    %a:f32 = abs %13
+    %5:mat2x3<f32> = transpose %4
+    %t:mat2x3<f32> = let %5
+    %7:ptr<uniform, vec2<f32>, read> = access %u, 0i, 1u, 1i
+    %8:vec2<f32> = load %7
+    %9:vec2<f32> = swizzle %8, yx
+    %10:f32 = length %9
+    %l:f32 = let %10
+    %12:ptr<uniform, vec2<f32>, read> = access %u, 0i, 1u, 1i
+    %13:vec2<f32> = load %12
+    %14:vec2<f32> = swizzle %13, yx
+    %15:f32 = access %14, 0u
+    %16:f32 = abs %15
+    %a:f32 = let %16
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x2_f32/to_fn.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat3x2_f32/to_fn.wgsl.expected.ir.msl
index fe2e732..b797056 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x2_f32/to_fn.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x2_f32/to_fn.wgsl.expected.ir.msl
@@ -1,42 +1,42 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat3x2<f32> @offset(8)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
 }
 
-%a = func(%a_1:array<S, 4>):void -> %b2 {  # %a_1: 'a'
-  %b2 = block {
+%a = func(%a_1:array<S, 4>):void {  # %a_1: 'a'
+  $B2: {
     ret
   }
 }
-%b = func(%s:S):void -> %b3 {
-  %b3 = block {
+%b = func(%s:S):void {
+  $B3: {
     ret
   }
 }
-%c = func(%m:mat3x2<f32>):void -> %b4 {
-  %b4 = block {
+%c = func(%m:mat3x2<f32>):void {
+  $B4: {
     ret
   }
 }
-%d = func(%v:vec2<f32>):void -> %b5 {
-  %b5 = block {
+%d = func(%v:vec2<f32>):void {
+  $B5: {
     ret
   }
 }
-%e = func(%f:f32):void -> %b6 {
-  %b6 = block {
+%e = func(%f:f32):void {
+  $B6: {
     ret
   }
 }
-%f_1 = @compute @workgroup_size(1, 1, 1) func():void -> %b7 {  # %f_1: 'f'
-  %b7 = block {
+%f_1 = @compute @workgroup_size(1, 1, 1) func():void {  # %f_1: 'f'
+  $B7: {
     %13:array<S, 4> = load %u
     %14:void = call %a, %13
     %15:ptr<uniform, S, read> = access %u, 2i
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x2_f32/to_private.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat3x2_f32/to_private.wgsl.expected.ir.msl
index ab86742..273997c 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x2_f32/to_private.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x2_f32/to_private.wgsl.expected.ir.msl
@@ -1,18 +1,18 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat3x2<f32> @offset(8)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
   %p:ptr<private, array<S, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:array<S, 4> = load %u
     store %p, %4
     %5:ptr<private, S, read_write> = access %p, 1i
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x2_f32/to_storage.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat3x2_f32/to_storage.wgsl.expected.ir.msl
index b586ee2..6a10e36 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x2_f32/to_storage.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x2_f32/to_storage.wgsl.expected.ir.msl
@@ -1,33 +1,73 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat3x2<f32> @offset(8)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
   %s:ptr<storage, array<S, 4>, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:array<S, 4> = load %u
-    store %s, %4
-    %5:ptr<storage, S, read_write> = access %s, 1i
-    %6:ptr<uniform, S, read> = access %u, 2i
-    %7:S = load %6
-    store %5, %7
-    %8:ptr<storage, mat3x2<f32>, read_write> = access %s, 3i, 1u
-    %9:ptr<uniform, mat3x2<f32>, read> = access %u, 2i, 1u
-    %10:mat3x2<f32> = load %9
-    store %8, %10
-    %11:ptr<storage, vec2<f32>, read_write> = access %s, 1i, 1u, 0i
-    %12:ptr<uniform, vec2<f32>, read> = access %u, 0i, 1u, 1i
-    %13:vec2<f32> = load %12
-    %14:vec2<f32> = swizzle %13, yx
-    store %11, %14
+    %5:void = call %tint_store_and_preserve_padding, %s, %4
+    %7:ptr<storage, S, read_write> = access %s, 1i
+    %8:ptr<uniform, S, read> = access %u, 2i
+    %9:S = load %8
+    %10:void = call %tint_store_and_preserve_padding_1, %7, %9
+    %12:ptr<storage, mat3x2<f32>, read_write> = access %s, 3i, 1u
+    %13:ptr<uniform, mat3x2<f32>, read> = access %u, 2i, 1u
+    %14:mat3x2<f32> = load %13
+    store %12, %14
+    %15:ptr<storage, vec2<f32>, read_write> = access %s, 1i, 1u, 0i
+    %16:ptr<uniform, vec2<f32>, read> = access %u, 0i, 1u, 1i
+    %17:vec2<f32> = load %16
+    %18:vec2<f32> = swizzle %17, yx
+    store %15, %18
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, array<S, 4>, read_write>, %value_param:array<S, 4>):void {
+  $B3: {
+    loop [i: $B4, b: $B5, c: $B6] {  # loop_1
+      $B4: {  # initializer
+        next_iteration 0u  # -> $B5
+      }
+      $B5 (%idx:u32): {  # body
+        %22:bool = gte %idx, 4u
+        if %22 [t: $B7] {  # if_1
+          $B7: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %23:ptr<storage, S, read_write> = access %target, %idx
+        %24:S = access %value_param, %idx
+        %25:void = call %tint_store_and_preserve_padding_1, %23, %24
+        continue  # -> $B6
+      }
+      $B6: {  # continuing
+        %26:u32 = add %idx, 1u
+        next_iteration %26  # -> $B5
+      }
+    }
+    ret
+  }
+}
+%tint_store_and_preserve_padding_1 = func(%target_1:ptr<storage, S, read_write>, %value_param_1:S):void {  # %tint_store_and_preserve_padding_1: 'tint_store_and_preserve_padding', %target_1: 'target', %value_param_1: 'value_param'
+  $B8: {
+    %29:ptr<storage, i32, read_write> = access %target_1, 0u
+    %30:i32 = access %value_param_1, 0u
+    store %29, %30
+    %31:ptr<storage, mat3x2<f32>, read_write> = access %target_1, 1u
+    %32:mat3x2<f32> = access %value_param_1, 1u
+    store %31, %32
+    %33:ptr<storage, i32, read_write> = access %target_1, 2u
+    %34:i32 = access %value_param_1, 2u
+    store %33, %34
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x2_f32/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat3x2_f32/to_workgroup.wgsl.expected.ir.msl
index 57ec35f..2c2f347 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x2_f32/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x2_f32/to_workgroup.wgsl.expected.ir.msl
@@ -1,33 +1,54 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat3x2<f32> @offset(8)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
   %w:ptr<workgroup, array<S, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:array<S, 4> = load %u
-    store %w, %4
-    %5:ptr<workgroup, S, read_write> = access %w, 1i
-    %6:ptr<uniform, S, read> = access %u, 2i
-    %7:S = load %6
-    store %5, %7
-    %8:ptr<workgroup, mat3x2<f32>, read_write> = access %w, 3i, 1u
-    %9:ptr<uniform, mat3x2<f32>, read> = access %u, 2i, 1u
-    %10:mat3x2<f32> = load %9
-    store %8, %10
-    %11:ptr<workgroup, vec2<f32>, read_write> = access %w, 1i, 1u, 0i
-    %12:ptr<uniform, vec2<f32>, read> = access %u, 0i, 1u, 1i
-    %13:vec2<f32> = load %12
-    %14:vec2<f32> = swizzle %13, yx
-    store %11, %14
+%f = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B2: {
+    loop [i: $B3, b: $B4, c: $B5] {  # loop_1
+      $B3: {  # initializer
+        next_iteration %tint_local_index  # -> $B4
+      }
+      $B4 (%idx:u32): {  # body
+        %6:bool = gte %idx, 4u
+        if %6 [t: $B6] {  # if_1
+          $B6: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %7:ptr<workgroup, S, read_write> = access %w, %idx
+        store %7, S(0i, mat3x2<f32>(vec2<f32>(0.0f)), 0i)
+        continue  # -> $B5
+      }
+      $B5: {  # continuing
+        %8:u32 = add %idx, 1u
+        next_iteration %8  # -> $B4
+      }
+    }
+    %9:void = msl.threadgroup_barrier 4u
+    %10:array<S, 4> = load %u
+    store %w, %10
+    %11:ptr<workgroup, S, read_write> = access %w, 1i
+    %12:ptr<uniform, S, read> = access %u, 2i
+    %13:S = load %12
+    store %11, %13
+    %14:ptr<workgroup, mat3x2<f32>, read_write> = access %w, 3i, 1u
+    %15:ptr<uniform, mat3x2<f32>, read> = access %u, 2i, 1u
+    %16:mat3x2<f32> = load %15
+    store %14, %16
+    %17:ptr<workgroup, vec2<f32>, read_write> = access %w, 1i, 1u, 0i
+    %18:ptr<uniform, vec2<f32>, read> = access %u, 0i, 1u, 1i
+    %19:vec2<f32> = load %18
+    %20:vec2<f32> = swizzle %19, yx
+    store %17, %20
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x3_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat3x3_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
index 6fdda89..b18f3d8 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x3_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x3_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Inner = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Inner = struct @align(8) {
   m:mat3x3<f16> @offset(0)
 }
 
@@ -8,13 +8,13 @@
   a:array<Inner, 4> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %a:ptr<uniform, array<Outer, 4>, read> = var @binding_point(0, 0)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
+%i = func():i32 {
+  $B2: {
     %4:i32 = load %counter
     %5:i32 = add %4, 1i
     store %counter, %5
@@ -22,25 +22,37 @@
     ret %6
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_a:ptr<uniform, array<Outer, 4>, read> = let %a
     %9:i32 = call %i
-    %p_a_i:ptr<uniform, Outer, read> = access %p_a, %9
-    %p_a_i_a:ptr<uniform, array<Inner, 4>, read> = access %p_a_i, 0u
-    %12:i32 = call %i
-    %p_a_i_a_i:ptr<uniform, Inner, read> = access %p_a_i_a, %12
-    %p_a_i_a_i_m:ptr<uniform, mat3x3<f16>, read> = access %p_a_i_a_i, 0u
-    %15:i32 = call %i
-    %p_a_i_a_i_m_i:ptr<uniform, vec3<f16>, read> = access %p_a_i_a_i_m, %15
-    %l_a:array<Outer, 4> = load %p_a
-    %l_a_i:Outer = load %p_a_i
-    %l_a_i_a:array<Inner, 4> = load %p_a_i_a
-    %l_a_i_a_i:Inner = load %p_a_i_a_i
-    %l_a_i_a_i_m:mat3x3<f16> = load %p_a_i_a_i_m
-    %l_a_i_a_i_m_i:vec3<f16> = load %p_a_i_a_i_m_i
-    %23:i32 = call %i
-    %l_a_i_a_i_m_i_i:f16 = load_vector_element %p_a_i_a_i_m_i, %23
+    %10:ptr<uniform, Outer, read> = access %p_a, %9
+    %p_a_i:ptr<uniform, Outer, read> = let %10
+    %12:ptr<uniform, array<Inner, 4>, read> = access %p_a_i, 0u
+    %p_a_i_a:ptr<uniform, array<Inner, 4>, read> = let %12
+    %14:i32 = call %i
+    %15:ptr<uniform, Inner, read> = access %p_a_i_a, %14
+    %p_a_i_a_i:ptr<uniform, Inner, read> = let %15
+    %17:ptr<uniform, mat3x3<f16>, read> = access %p_a_i_a_i, 0u
+    %p_a_i_a_i_m:ptr<uniform, mat3x3<f16>, read> = let %17
+    %19:i32 = call %i
+    %20:ptr<uniform, vec3<f16>, read> = access %p_a_i_a_i_m, %19
+    %p_a_i_a_i_m_i:ptr<uniform, vec3<f16>, read> = let %20
+    %22:array<Outer, 4> = load %p_a
+    %l_a:array<Outer, 4> = let %22
+    %24:Outer = load %p_a_i
+    %l_a_i:Outer = let %24
+    %26:array<Inner, 4> = load %p_a_i_a
+    %l_a_i_a:array<Inner, 4> = let %26
+    %28:Inner = load %p_a_i_a_i
+    %l_a_i_a_i:Inner = let %28
+    %30:mat3x3<f16> = load %p_a_i_a_i_m
+    %l_a_i_a_i_m:mat3x3<f16> = let %30
+    %32:vec3<f16> = load %p_a_i_a_i_m_i
+    %l_a_i_a_i_m_i:vec3<f16> = let %32
+    %34:i32 = call %i
+    %35:f16 = load_vector_element %p_a_i_a_i_m_i, %34
+    %l_a_i_a_i_m_i_i:f16 = let %35
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x3_f16/static_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat3x3_f16/static_index_via_ptr.wgsl.expected.ir.msl
index 897cc7c..99e3831 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x3_f16/static_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x3_f16/static_index_via_ptr.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Inner = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Inner = struct @align(8) {
   m:mat3x3<f16> @offset(0)
 }
 
@@ -8,25 +8,37 @@
   a:array<Inner, 4> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %a:ptr<uniform, array<Outer, 4>, read> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %p_a:ptr<uniform, array<Outer, 4>, read> = let %a
-    %p_a_3:ptr<uniform, Outer, read> = access %p_a, 3i
-    %p_a_3_a:ptr<uniform, array<Inner, 4>, read> = access %p_a_3, 0u
-    %p_a_3_a_2:ptr<uniform, Inner, read> = access %p_a_3_a, 2i
-    %p_a_3_a_2_m:ptr<uniform, mat3x3<f16>, read> = access %p_a_3_a_2, 0u
-    %p_a_3_a_2_m_1:ptr<uniform, vec3<f16>, read> = access %p_a_3_a_2_m, 1i
-    %l_a:array<Outer, 4> = load %p_a
-    %l_a_3:Outer = load %p_a_3
-    %l_a_3_a:array<Inner, 4> = load %p_a_3_a
-    %l_a_3_a_2:Inner = load %p_a_3_a_2
-    %l_a_3_a_2_m:mat3x3<f16> = load %p_a_3_a_2_m
-    %l_a_3_a_2_m_1:vec3<f16> = load %p_a_3_a_2_m_1
-    %l_a_3_a_2_m_1_0:f16 = load_vector_element %p_a_3_a_2_m_1, 0i
+    %4:ptr<uniform, Outer, read> = access %p_a, 3i
+    %p_a_3:ptr<uniform, Outer, read> = let %4
+    %6:ptr<uniform, array<Inner, 4>, read> = access %p_a_3, 0u
+    %p_a_3_a:ptr<uniform, array<Inner, 4>, read> = let %6
+    %8:ptr<uniform, Inner, read> = access %p_a_3_a, 2i
+    %p_a_3_a_2:ptr<uniform, Inner, read> = let %8
+    %10:ptr<uniform, mat3x3<f16>, read> = access %p_a_3_a_2, 0u
+    %p_a_3_a_2_m:ptr<uniform, mat3x3<f16>, read> = let %10
+    %12:ptr<uniform, vec3<f16>, read> = access %p_a_3_a_2_m, 1i
+    %p_a_3_a_2_m_1:ptr<uniform, vec3<f16>, read> = let %12
+    %14:array<Outer, 4> = load %p_a
+    %l_a:array<Outer, 4> = let %14
+    %16:Outer = load %p_a_3
+    %l_a_3:Outer = let %16
+    %18:array<Inner, 4> = load %p_a_3_a
+    %l_a_3_a:array<Inner, 4> = let %18
+    %20:Inner = load %p_a_3_a_2
+    %l_a_3_a_2:Inner = let %20
+    %22:mat3x3<f16> = load %p_a_3_a_2_m
+    %l_a_3_a_2_m:mat3x3<f16> = let %22
+    %24:vec3<f16> = load %p_a_3_a_2_m_1
+    %l_a_3_a_2_m_1:vec3<f16> = let %24
+    %26:f16 = load_vector_element %p_a_3_a_2_m_1, 0i
+    %l_a_3_a_2_m_1_0:f16 = let %26
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x3_f16/to_builtin.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat3x3_f16/to_builtin.wgsl.expected.ir.msl
index 027e047..eecf916 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x3_f16/to_builtin.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x3_f16/to_builtin.wgsl.expected.ir.msl
@@ -1,29 +1,32 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat3x3<f16> @offset(8)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %3:ptr<uniform, mat3x3<f16>, read> = access %u, 2i, 1u
     %4:mat3x3<f16> = load %3
-    %t:mat3x3<f16> = transpose %4
-    %6:ptr<uniform, vec3<f16>, read> = access %u, 0i, 1u, 1i
-    %7:vec3<f16> = load %6
-    %8:vec3<f16> = swizzle %7, zxy
-    %l:f16 = length %8
-    %10:ptr<uniform, vec3<f16>, read> = access %u, 0i, 1u, 1i
-    %11:vec3<f16> = load %10
-    %12:vec3<f16> = swizzle %11, zxy
-    %13:f16 = access %12, 0u
-    %a:f16 = abs %13
+    %5:mat3x3<f16> = transpose %4
+    %t:mat3x3<f16> = let %5
+    %7:ptr<uniform, vec3<f16>, read> = access %u, 0i, 1u, 1i
+    %8:vec3<f16> = load %7
+    %9:vec3<f16> = swizzle %8, zxy
+    %10:f16 = length %9
+    %l:f16 = let %10
+    %12:ptr<uniform, vec3<f16>, read> = access %u, 0i, 1u, 1i
+    %13:vec3<f16> = load %12
+    %14:vec3<f16> = swizzle %13, zxy
+    %15:f16 = access %14, 0u
+    %16:f16 = abs %15
+    %a:f16 = let %16
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x3_f16/to_fn.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat3x3_f16/to_fn.wgsl.expected.ir.msl
index bc8ae86..1551dce 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x3_f16/to_fn.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x3_f16/to_fn.wgsl.expected.ir.msl
@@ -1,42 +1,42 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat3x3<f16> @offset(8)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
 }
 
-%a = func(%a_1:array<S, 4>):void -> %b2 {  # %a_1: 'a'
-  %b2 = block {
+%a = func(%a_1:array<S, 4>):void {  # %a_1: 'a'
+  $B2: {
     ret
   }
 }
-%b = func(%s:S):void -> %b3 {
-  %b3 = block {
+%b = func(%s:S):void {
+  $B3: {
     ret
   }
 }
-%c = func(%m:mat3x3<f16>):void -> %b4 {
-  %b4 = block {
+%c = func(%m:mat3x3<f16>):void {
+  $B4: {
     ret
   }
 }
-%d = func(%v:vec3<f16>):void -> %b5 {
-  %b5 = block {
+%d = func(%v:vec3<f16>):void {
+  $B5: {
     ret
   }
 }
-%e = func(%f:f16):void -> %b6 {
-  %b6 = block {
+%e = func(%f:f16):void {
+  $B6: {
     ret
   }
 }
-%f_1 = @compute @workgroup_size(1, 1, 1) func():void -> %b7 {  # %f_1: 'f'
-  %b7 = block {
+%f_1 = @compute @workgroup_size(1, 1, 1) func():void {  # %f_1: 'f'
+  $B7: {
     %13:array<S, 4> = load %u
     %14:void = call %a, %13
     %15:ptr<uniform, S, read> = access %u, 2i
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x3_f16/to_private.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat3x3_f16/to_private.wgsl.expected.ir.msl
index 066e525..1542ca6 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x3_f16/to_private.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x3_f16/to_private.wgsl.expected.ir.msl
@@ -1,18 +1,18 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat3x3<f16> @offset(8)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
   %p:ptr<private, array<S, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:array<S, 4> = load %u
     store %p, %4
     %5:ptr<private, S, read_write> = access %p, 1i
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x3_f16/to_storage.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat3x3_f16/to_storage.wgsl.expected.ir.msl
index a1c8203..71bb75b 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x3_f16/to_storage.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x3_f16/to_storage.wgsl.expected.ir.msl
@@ -1,33 +1,87 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat3x3<f16> @offset(8)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
   %s:ptr<storage, array<S, 4>, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:array<S, 4> = load %u
-    store %s, %4
-    %5:ptr<storage, S, read_write> = access %s, 1i
-    %6:ptr<uniform, S, read> = access %u, 2i
-    %7:S = load %6
-    store %5, %7
-    %8:ptr<storage, mat3x3<f16>, read_write> = access %s, 3i, 1u
-    %9:ptr<uniform, mat3x3<f16>, read> = access %u, 2i, 1u
-    %10:mat3x3<f16> = load %9
-    store %8, %10
-    %11:ptr<storage, vec3<f16>, read_write> = access %s, 1i, 1u, 0i
-    %12:ptr<uniform, vec3<f16>, read> = access %u, 0i, 1u, 1i
-    %13:vec3<f16> = load %12
-    %14:vec3<f16> = swizzle %13, zxy
-    store %11, %14
+    %5:void = call %tint_store_and_preserve_padding, %s, %4
+    %7:ptr<storage, S, read_write> = access %s, 1i
+    %8:ptr<uniform, S, read> = access %u, 2i
+    %9:S = load %8
+    %10:void = call %tint_store_and_preserve_padding_1, %7, %9
+    %12:ptr<storage, mat3x3<f16>, read_write> = access %s, 3i, 1u
+    %13:ptr<uniform, mat3x3<f16>, read> = access %u, 2i, 1u
+    %14:mat3x3<f16> = load %13
+    %15:void = call %tint_store_and_preserve_padding_2, %12, %14
+    %17:ptr<storage, vec3<f16>, read_write> = access %s, 1i, 1u, 0i
+    %18:ptr<uniform, vec3<f16>, read> = access %u, 0i, 1u, 1i
+    %19:vec3<f16> = load %18
+    %20:vec3<f16> = swizzle %19, zxy
+    store %17, %20
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, array<S, 4>, read_write>, %value_param:array<S, 4>):void {
+  $B3: {
+    loop [i: $B4, b: $B5, c: $B6] {  # loop_1
+      $B4: {  # initializer
+        next_iteration 0u  # -> $B5
+      }
+      $B5 (%idx:u32): {  # body
+        %24:bool = gte %idx, 4u
+        if %24 [t: $B7] {  # if_1
+          $B7: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %25:ptr<storage, S, read_write> = access %target, %idx
+        %26:S = access %value_param, %idx
+        %27:void = call %tint_store_and_preserve_padding_1, %25, %26
+        continue  # -> $B6
+      }
+      $B6: {  # continuing
+        %28:u32 = add %idx, 1u
+        next_iteration %28  # -> $B5
+      }
+    }
+    ret
+  }
+}
+%tint_store_and_preserve_padding_1 = func(%target_1:ptr<storage, S, read_write>, %value_param_1:S):void {  # %tint_store_and_preserve_padding_1: 'tint_store_and_preserve_padding', %target_1: 'target', %value_param_1: 'value_param'
+  $B8: {
+    %31:ptr<storage, i32, read_write> = access %target_1, 0u
+    %32:i32 = access %value_param_1, 0u
+    store %31, %32
+    %33:ptr<storage, mat3x3<f16>, read_write> = access %target_1, 1u
+    %34:mat3x3<f16> = access %value_param_1, 1u
+    %35:void = call %tint_store_and_preserve_padding_2, %33, %34
+    %36:ptr<storage, i32, read_write> = access %target_1, 2u
+    %37:i32 = access %value_param_1, 2u
+    store %36, %37
+    ret
+  }
+}
+%tint_store_and_preserve_padding_2 = func(%target_2:ptr<storage, mat3x3<f16>, read_write>, %value_param_2:mat3x3<f16>):void {  # %tint_store_and_preserve_padding_2: 'tint_store_and_preserve_padding', %target_2: 'target', %value_param_2: 'value_param'
+  $B9: {
+    %40:ptr<storage, vec3<f16>, read_write> = access %target_2, 0u
+    %41:vec3<f16> = access %value_param_2, 0u
+    store %40, %41
+    %42:ptr<storage, vec3<f16>, read_write> = access %target_2, 1u
+    %43:vec3<f16> = access %value_param_2, 1u
+    store %42, %43
+    %44:ptr<storage, vec3<f16>, read_write> = access %target_2, 2u
+    %45:vec3<f16> = access %value_param_2, 2u
+    store %44, %45
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x3_f16/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat3x3_f16/to_workgroup.wgsl.expected.ir.msl
index f6f0e36..302e85d 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x3_f16/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x3_f16/to_workgroup.wgsl.expected.ir.msl
@@ -1,33 +1,54 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat3x3<f16> @offset(8)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
   %w:ptr<workgroup, array<S, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:array<S, 4> = load %u
-    store %w, %4
-    %5:ptr<workgroup, S, read_write> = access %w, 1i
-    %6:ptr<uniform, S, read> = access %u, 2i
-    %7:S = load %6
-    store %5, %7
-    %8:ptr<workgroup, mat3x3<f16>, read_write> = access %w, 3i, 1u
-    %9:ptr<uniform, mat3x3<f16>, read> = access %u, 2i, 1u
-    %10:mat3x3<f16> = load %9
-    store %8, %10
-    %11:ptr<workgroup, vec3<f16>, read_write> = access %w, 1i, 1u, 0i
-    %12:ptr<uniform, vec3<f16>, read> = access %u, 0i, 1u, 1i
-    %13:vec3<f16> = load %12
-    %14:vec3<f16> = swizzle %13, zxy
-    store %11, %14
+%f = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B2: {
+    loop [i: $B3, b: $B4, c: $B5] {  # loop_1
+      $B3: {  # initializer
+        next_iteration %tint_local_index  # -> $B4
+      }
+      $B4 (%idx:u32): {  # body
+        %6:bool = gte %idx, 4u
+        if %6 [t: $B6] {  # if_1
+          $B6: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %7:ptr<workgroup, S, read_write> = access %w, %idx
+        store %7, S(0i, mat3x3<f16>(vec3<f16>(0.0h)), 0i)
+        continue  # -> $B5
+      }
+      $B5: {  # continuing
+        %8:u32 = add %idx, 1u
+        next_iteration %8  # -> $B4
+      }
+    }
+    %9:void = msl.threadgroup_barrier 4u
+    %10:array<S, 4> = load %u
+    store %w, %10
+    %11:ptr<workgroup, S, read_write> = access %w, 1i
+    %12:ptr<uniform, S, read> = access %u, 2i
+    %13:S = load %12
+    store %11, %13
+    %14:ptr<workgroup, mat3x3<f16>, read_write> = access %w, 3i, 1u
+    %15:ptr<uniform, mat3x3<f16>, read> = access %u, 2i, 1u
+    %16:mat3x3<f16> = load %15
+    store %14, %16
+    %17:ptr<workgroup, vec3<f16>, read_write> = access %w, 1i, 1u, 0i
+    %18:ptr<uniform, vec3<f16>, read> = access %u, 0i, 1u, 1i
+    %19:vec3<f16> = load %18
+    %20:vec3<f16> = swizzle %19, zxy
+    store %17, %20
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x3_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat3x3_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
index 0b9fdd3..7beeeda 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x3_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x3_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Inner = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Inner = struct @align(16) {
   m:mat3x3<f32> @offset(0)
 }
 
@@ -8,13 +8,13 @@
   a:array<Inner, 4> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %a:ptr<uniform, array<Outer, 4>, read> = var @binding_point(0, 0)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
+%i = func():i32 {
+  $B2: {
     %4:i32 = load %counter
     %5:i32 = add %4, 1i
     store %counter, %5
@@ -22,25 +22,37 @@
     ret %6
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_a:ptr<uniform, array<Outer, 4>, read> = let %a
     %9:i32 = call %i
-    %p_a_i:ptr<uniform, Outer, read> = access %p_a, %9
-    %p_a_i_a:ptr<uniform, array<Inner, 4>, read> = access %p_a_i, 0u
-    %12:i32 = call %i
-    %p_a_i_a_i:ptr<uniform, Inner, read> = access %p_a_i_a, %12
-    %p_a_i_a_i_m:ptr<uniform, mat3x3<f32>, read> = access %p_a_i_a_i, 0u
-    %15:i32 = call %i
-    %p_a_i_a_i_m_i:ptr<uniform, vec3<f32>, read> = access %p_a_i_a_i_m, %15
-    %l_a:array<Outer, 4> = load %p_a
-    %l_a_i:Outer = load %p_a_i
-    %l_a_i_a:array<Inner, 4> = load %p_a_i_a
-    %l_a_i_a_i:Inner = load %p_a_i_a_i
-    %l_a_i_a_i_m:mat3x3<f32> = load %p_a_i_a_i_m
-    %l_a_i_a_i_m_i:vec3<f32> = load %p_a_i_a_i_m_i
-    %23:i32 = call %i
-    %l_a_i_a_i_m_i_i:f32 = load_vector_element %p_a_i_a_i_m_i, %23
+    %10:ptr<uniform, Outer, read> = access %p_a, %9
+    %p_a_i:ptr<uniform, Outer, read> = let %10
+    %12:ptr<uniform, array<Inner, 4>, read> = access %p_a_i, 0u
+    %p_a_i_a:ptr<uniform, array<Inner, 4>, read> = let %12
+    %14:i32 = call %i
+    %15:ptr<uniform, Inner, read> = access %p_a_i_a, %14
+    %p_a_i_a_i:ptr<uniform, Inner, read> = let %15
+    %17:ptr<uniform, mat3x3<f32>, read> = access %p_a_i_a_i, 0u
+    %p_a_i_a_i_m:ptr<uniform, mat3x3<f32>, read> = let %17
+    %19:i32 = call %i
+    %20:ptr<uniform, vec3<f32>, read> = access %p_a_i_a_i_m, %19
+    %p_a_i_a_i_m_i:ptr<uniform, vec3<f32>, read> = let %20
+    %22:array<Outer, 4> = load %p_a
+    %l_a:array<Outer, 4> = let %22
+    %24:Outer = load %p_a_i
+    %l_a_i:Outer = let %24
+    %26:array<Inner, 4> = load %p_a_i_a
+    %l_a_i_a:array<Inner, 4> = let %26
+    %28:Inner = load %p_a_i_a_i
+    %l_a_i_a_i:Inner = let %28
+    %30:mat3x3<f32> = load %p_a_i_a_i_m
+    %l_a_i_a_i_m:mat3x3<f32> = let %30
+    %32:vec3<f32> = load %p_a_i_a_i_m_i
+    %l_a_i_a_i_m_i:vec3<f32> = let %32
+    %34:i32 = call %i
+    %35:f32 = load_vector_element %p_a_i_a_i_m_i, %34
+    %l_a_i_a_i_m_i_i:f32 = let %35
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x3_f32/static_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat3x3_f32/static_index_via_ptr.wgsl.expected.ir.msl
index 10a63ff..2e211af 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x3_f32/static_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x3_f32/static_index_via_ptr.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Inner = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Inner = struct @align(16) {
   m:mat3x3<f32> @offset(0)
 }
 
@@ -8,25 +8,37 @@
   a:array<Inner, 4> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %a:ptr<uniform, array<Outer, 4>, read> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %p_a:ptr<uniform, array<Outer, 4>, read> = let %a
-    %p_a_3:ptr<uniform, Outer, read> = access %p_a, 3i
-    %p_a_3_a:ptr<uniform, array<Inner, 4>, read> = access %p_a_3, 0u
-    %p_a_3_a_2:ptr<uniform, Inner, read> = access %p_a_3_a, 2i
-    %p_a_3_a_2_m:ptr<uniform, mat3x3<f32>, read> = access %p_a_3_a_2, 0u
-    %p_a_3_a_2_m_1:ptr<uniform, vec3<f32>, read> = access %p_a_3_a_2_m, 1i
-    %l_a:array<Outer, 4> = load %p_a
-    %l_a_3:Outer = load %p_a_3
-    %l_a_3_a:array<Inner, 4> = load %p_a_3_a
-    %l_a_3_a_2:Inner = load %p_a_3_a_2
-    %l_a_3_a_2_m:mat3x3<f32> = load %p_a_3_a_2_m
-    %l_a_3_a_2_m_1:vec3<f32> = load %p_a_3_a_2_m_1
-    %l_a_3_a_2_m_1_0:f32 = load_vector_element %p_a_3_a_2_m_1, 0i
+    %4:ptr<uniform, Outer, read> = access %p_a, 3i
+    %p_a_3:ptr<uniform, Outer, read> = let %4
+    %6:ptr<uniform, array<Inner, 4>, read> = access %p_a_3, 0u
+    %p_a_3_a:ptr<uniform, array<Inner, 4>, read> = let %6
+    %8:ptr<uniform, Inner, read> = access %p_a_3_a, 2i
+    %p_a_3_a_2:ptr<uniform, Inner, read> = let %8
+    %10:ptr<uniform, mat3x3<f32>, read> = access %p_a_3_a_2, 0u
+    %p_a_3_a_2_m:ptr<uniform, mat3x3<f32>, read> = let %10
+    %12:ptr<uniform, vec3<f32>, read> = access %p_a_3_a_2_m, 1i
+    %p_a_3_a_2_m_1:ptr<uniform, vec3<f32>, read> = let %12
+    %14:array<Outer, 4> = load %p_a
+    %l_a:array<Outer, 4> = let %14
+    %16:Outer = load %p_a_3
+    %l_a_3:Outer = let %16
+    %18:array<Inner, 4> = load %p_a_3_a
+    %l_a_3_a:array<Inner, 4> = let %18
+    %20:Inner = load %p_a_3_a_2
+    %l_a_3_a_2:Inner = let %20
+    %22:mat3x3<f32> = load %p_a_3_a_2_m
+    %l_a_3_a_2_m:mat3x3<f32> = let %22
+    %24:vec3<f32> = load %p_a_3_a_2_m_1
+    %l_a_3_a_2_m_1:vec3<f32> = let %24
+    %26:f32 = load_vector_element %p_a_3_a_2_m_1, 0i
+    %l_a_3_a_2_m_1_0:f32 = let %26
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x3_f32/to_builtin.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat3x3_f32/to_builtin.wgsl.expected.ir.msl
index b97f516..94e4040 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x3_f32/to_builtin.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x3_f32/to_builtin.wgsl.expected.ir.msl
@@ -1,29 +1,32 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat3x3<f32> @offset(16)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %3:ptr<uniform, mat3x3<f32>, read> = access %u, 2i, 1u
     %4:mat3x3<f32> = load %3
-    %t:mat3x3<f32> = transpose %4
-    %6:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1u, 1i
-    %7:vec3<f32> = load %6
-    %8:vec3<f32> = swizzle %7, zxy
-    %l:f32 = length %8
-    %10:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1u, 1i
-    %11:vec3<f32> = load %10
-    %12:vec3<f32> = swizzle %11, zxy
-    %13:f32 = access %12, 0u
-    %a:f32 = abs %13
+    %5:mat3x3<f32> = transpose %4
+    %t:mat3x3<f32> = let %5
+    %7:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1u, 1i
+    %8:vec3<f32> = load %7
+    %9:vec3<f32> = swizzle %8, zxy
+    %10:f32 = length %9
+    %l:f32 = let %10
+    %12:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1u, 1i
+    %13:vec3<f32> = load %12
+    %14:vec3<f32> = swizzle %13, zxy
+    %15:f32 = access %14, 0u
+    %16:f32 = abs %15
+    %a:f32 = let %16
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x3_f32/to_fn.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat3x3_f32/to_fn.wgsl.expected.ir.msl
index b8da91e..3775e04 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x3_f32/to_fn.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x3_f32/to_fn.wgsl.expected.ir.msl
@@ -1,42 +1,42 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat3x3<f32> @offset(16)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
 }
 
-%a = func(%a_1:array<S, 4>):void -> %b2 {  # %a_1: 'a'
-  %b2 = block {
+%a = func(%a_1:array<S, 4>):void {  # %a_1: 'a'
+  $B2: {
     ret
   }
 }
-%b = func(%s:S):void -> %b3 {
-  %b3 = block {
+%b = func(%s:S):void {
+  $B3: {
     ret
   }
 }
-%c = func(%m:mat3x3<f32>):void -> %b4 {
-  %b4 = block {
+%c = func(%m:mat3x3<f32>):void {
+  $B4: {
     ret
   }
 }
-%d = func(%v:vec3<f32>):void -> %b5 {
-  %b5 = block {
+%d = func(%v:vec3<f32>):void {
+  $B5: {
     ret
   }
 }
-%e = func(%f:f32):void -> %b6 {
-  %b6 = block {
+%e = func(%f:f32):void {
+  $B6: {
     ret
   }
 }
-%f_1 = @compute @workgroup_size(1, 1, 1) func():void -> %b7 {  # %f_1: 'f'
-  %b7 = block {
+%f_1 = @compute @workgroup_size(1, 1, 1) func():void {  # %f_1: 'f'
+  $B7: {
     %13:array<S, 4> = load %u
     %14:void = call %a, %13
     %15:ptr<uniform, S, read> = access %u, 2i
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x3_f32/to_private.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat3x3_f32/to_private.wgsl.expected.ir.msl
index 1bae12e..eb254e6 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x3_f32/to_private.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x3_f32/to_private.wgsl.expected.ir.msl
@@ -1,18 +1,18 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat3x3<f32> @offset(16)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
   %p:ptr<private, array<S, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:array<S, 4> = load %u
     store %p, %4
     %5:ptr<private, S, read_write> = access %p, 1i
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x3_f32/to_storage.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat3x3_f32/to_storage.wgsl.expected.ir.msl
index a650360..9bd0e86 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x3_f32/to_storage.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x3_f32/to_storage.wgsl.expected.ir.msl
@@ -1,33 +1,87 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat3x3<f32> @offset(16)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
   %s:ptr<storage, array<S, 4>, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:array<S, 4> = load %u
-    store %s, %4
-    %5:ptr<storage, S, read_write> = access %s, 1i
-    %6:ptr<uniform, S, read> = access %u, 2i
-    %7:S = load %6
-    store %5, %7
-    %8:ptr<storage, mat3x3<f32>, read_write> = access %s, 3i, 1u
-    %9:ptr<uniform, mat3x3<f32>, read> = access %u, 2i, 1u
-    %10:mat3x3<f32> = load %9
-    store %8, %10
-    %11:ptr<storage, vec3<f32>, read_write> = access %s, 1i, 1u, 0i
-    %12:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1u, 1i
-    %13:vec3<f32> = load %12
-    %14:vec3<f32> = swizzle %13, zxy
-    store %11, %14
+    %5:void = call %tint_store_and_preserve_padding, %s, %4
+    %7:ptr<storage, S, read_write> = access %s, 1i
+    %8:ptr<uniform, S, read> = access %u, 2i
+    %9:S = load %8
+    %10:void = call %tint_store_and_preserve_padding_1, %7, %9
+    %12:ptr<storage, mat3x3<f32>, read_write> = access %s, 3i, 1u
+    %13:ptr<uniform, mat3x3<f32>, read> = access %u, 2i, 1u
+    %14:mat3x3<f32> = load %13
+    %15:void = call %tint_store_and_preserve_padding_2, %12, %14
+    %17:ptr<storage, vec3<f32>, read_write> = access %s, 1i, 1u, 0i
+    %18:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1u, 1i
+    %19:vec3<f32> = load %18
+    %20:vec3<f32> = swizzle %19, zxy
+    store %17, %20
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, array<S, 4>, read_write>, %value_param:array<S, 4>):void {
+  $B3: {
+    loop [i: $B4, b: $B5, c: $B6] {  # loop_1
+      $B4: {  # initializer
+        next_iteration 0u  # -> $B5
+      }
+      $B5 (%idx:u32): {  # body
+        %24:bool = gte %idx, 4u
+        if %24 [t: $B7] {  # if_1
+          $B7: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %25:ptr<storage, S, read_write> = access %target, %idx
+        %26:S = access %value_param, %idx
+        %27:void = call %tint_store_and_preserve_padding_1, %25, %26
+        continue  # -> $B6
+      }
+      $B6: {  # continuing
+        %28:u32 = add %idx, 1u
+        next_iteration %28  # -> $B5
+      }
+    }
+    ret
+  }
+}
+%tint_store_and_preserve_padding_1 = func(%target_1:ptr<storage, S, read_write>, %value_param_1:S):void {  # %tint_store_and_preserve_padding_1: 'tint_store_and_preserve_padding', %target_1: 'target', %value_param_1: 'value_param'
+  $B8: {
+    %31:ptr<storage, i32, read_write> = access %target_1, 0u
+    %32:i32 = access %value_param_1, 0u
+    store %31, %32
+    %33:ptr<storage, mat3x3<f32>, read_write> = access %target_1, 1u
+    %34:mat3x3<f32> = access %value_param_1, 1u
+    %35:void = call %tint_store_and_preserve_padding_2, %33, %34
+    %36:ptr<storage, i32, read_write> = access %target_1, 2u
+    %37:i32 = access %value_param_1, 2u
+    store %36, %37
+    ret
+  }
+}
+%tint_store_and_preserve_padding_2 = func(%target_2:ptr<storage, mat3x3<f32>, read_write>, %value_param_2:mat3x3<f32>):void {  # %tint_store_and_preserve_padding_2: 'tint_store_and_preserve_padding', %target_2: 'target', %value_param_2: 'value_param'
+  $B9: {
+    %40:ptr<storage, vec3<f32>, read_write> = access %target_2, 0u
+    %41:vec3<f32> = access %value_param_2, 0u
+    store %40, %41
+    %42:ptr<storage, vec3<f32>, read_write> = access %target_2, 1u
+    %43:vec3<f32> = access %value_param_2, 1u
+    store %42, %43
+    %44:ptr<storage, vec3<f32>, read_write> = access %target_2, 2u
+    %45:vec3<f32> = access %value_param_2, 2u
+    store %44, %45
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x3_f32/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat3x3_f32/to_workgroup.wgsl.expected.ir.msl
index 923c8d5..aabb164 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x3_f32/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x3_f32/to_workgroup.wgsl.expected.ir.msl
@@ -1,33 +1,54 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat3x3<f32> @offset(16)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
   %w:ptr<workgroup, array<S, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:array<S, 4> = load %u
-    store %w, %4
-    %5:ptr<workgroup, S, read_write> = access %w, 1i
-    %6:ptr<uniform, S, read> = access %u, 2i
-    %7:S = load %6
-    store %5, %7
-    %8:ptr<workgroup, mat3x3<f32>, read_write> = access %w, 3i, 1u
-    %9:ptr<uniform, mat3x3<f32>, read> = access %u, 2i, 1u
-    %10:mat3x3<f32> = load %9
-    store %8, %10
-    %11:ptr<workgroup, vec3<f32>, read_write> = access %w, 1i, 1u, 0i
-    %12:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1u, 1i
-    %13:vec3<f32> = load %12
-    %14:vec3<f32> = swizzle %13, zxy
-    store %11, %14
+%f = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B2: {
+    loop [i: $B3, b: $B4, c: $B5] {  # loop_1
+      $B3: {  # initializer
+        next_iteration %tint_local_index  # -> $B4
+      }
+      $B4 (%idx:u32): {  # body
+        %6:bool = gte %idx, 4u
+        if %6 [t: $B6] {  # if_1
+          $B6: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %7:ptr<workgroup, S, read_write> = access %w, %idx
+        store %7, S(0i, mat3x3<f32>(vec3<f32>(0.0f)), 0i)
+        continue  # -> $B5
+      }
+      $B5: {  # continuing
+        %8:u32 = add %idx, 1u
+        next_iteration %8  # -> $B4
+      }
+    }
+    %9:void = msl.threadgroup_barrier 4u
+    %10:array<S, 4> = load %u
+    store %w, %10
+    %11:ptr<workgroup, S, read_write> = access %w, 1i
+    %12:ptr<uniform, S, read> = access %u, 2i
+    %13:S = load %12
+    store %11, %13
+    %14:ptr<workgroup, mat3x3<f32>, read_write> = access %w, 3i, 1u
+    %15:ptr<uniform, mat3x3<f32>, read> = access %u, 2i, 1u
+    %16:mat3x3<f32> = load %15
+    store %14, %16
+    %17:ptr<workgroup, vec3<f32>, read_write> = access %w, 1i, 1u, 0i
+    %18:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1u, 1i
+    %19:vec3<f32> = load %18
+    %20:vec3<f32> = swizzle %19, zxy
+    store %17, %20
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x4_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat3x4_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
index da4d04c..5da7b05 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x4_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x4_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Inner = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Inner = struct @align(8) {
   m:mat3x4<f16> @offset(0)
 }
 
@@ -8,13 +8,13 @@
   a:array<Inner, 4> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %a:ptr<uniform, array<Outer, 4>, read> = var @binding_point(0, 0)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
+%i = func():i32 {
+  $B2: {
     %4:i32 = load %counter
     %5:i32 = add %4, 1i
     store %counter, %5
@@ -22,25 +22,37 @@
     ret %6
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_a:ptr<uniform, array<Outer, 4>, read> = let %a
     %9:i32 = call %i
-    %p_a_i:ptr<uniform, Outer, read> = access %p_a, %9
-    %p_a_i_a:ptr<uniform, array<Inner, 4>, read> = access %p_a_i, 0u
-    %12:i32 = call %i
-    %p_a_i_a_i:ptr<uniform, Inner, read> = access %p_a_i_a, %12
-    %p_a_i_a_i_m:ptr<uniform, mat3x4<f16>, read> = access %p_a_i_a_i, 0u
-    %15:i32 = call %i
-    %p_a_i_a_i_m_i:ptr<uniform, vec4<f16>, read> = access %p_a_i_a_i_m, %15
-    %l_a:array<Outer, 4> = load %p_a
-    %l_a_i:Outer = load %p_a_i
-    %l_a_i_a:array<Inner, 4> = load %p_a_i_a
-    %l_a_i_a_i:Inner = load %p_a_i_a_i
-    %l_a_i_a_i_m:mat3x4<f16> = load %p_a_i_a_i_m
-    %l_a_i_a_i_m_i:vec4<f16> = load %p_a_i_a_i_m_i
-    %23:i32 = call %i
-    %l_a_i_a_i_m_i_i:f16 = load_vector_element %p_a_i_a_i_m_i, %23
+    %10:ptr<uniform, Outer, read> = access %p_a, %9
+    %p_a_i:ptr<uniform, Outer, read> = let %10
+    %12:ptr<uniform, array<Inner, 4>, read> = access %p_a_i, 0u
+    %p_a_i_a:ptr<uniform, array<Inner, 4>, read> = let %12
+    %14:i32 = call %i
+    %15:ptr<uniform, Inner, read> = access %p_a_i_a, %14
+    %p_a_i_a_i:ptr<uniform, Inner, read> = let %15
+    %17:ptr<uniform, mat3x4<f16>, read> = access %p_a_i_a_i, 0u
+    %p_a_i_a_i_m:ptr<uniform, mat3x4<f16>, read> = let %17
+    %19:i32 = call %i
+    %20:ptr<uniform, vec4<f16>, read> = access %p_a_i_a_i_m, %19
+    %p_a_i_a_i_m_i:ptr<uniform, vec4<f16>, read> = let %20
+    %22:array<Outer, 4> = load %p_a
+    %l_a:array<Outer, 4> = let %22
+    %24:Outer = load %p_a_i
+    %l_a_i:Outer = let %24
+    %26:array<Inner, 4> = load %p_a_i_a
+    %l_a_i_a:array<Inner, 4> = let %26
+    %28:Inner = load %p_a_i_a_i
+    %l_a_i_a_i:Inner = let %28
+    %30:mat3x4<f16> = load %p_a_i_a_i_m
+    %l_a_i_a_i_m:mat3x4<f16> = let %30
+    %32:vec4<f16> = load %p_a_i_a_i_m_i
+    %l_a_i_a_i_m_i:vec4<f16> = let %32
+    %34:i32 = call %i
+    %35:f16 = load_vector_element %p_a_i_a_i_m_i, %34
+    %l_a_i_a_i_m_i_i:f16 = let %35
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x4_f16/static_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat3x4_f16/static_index_via_ptr.wgsl.expected.ir.msl
index 49433b1..d80aecf 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x4_f16/static_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x4_f16/static_index_via_ptr.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Inner = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Inner = struct @align(8) {
   m:mat3x4<f16> @offset(0)
 }
 
@@ -8,25 +8,37 @@
   a:array<Inner, 4> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %a:ptr<uniform, array<Outer, 4>, read> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %p_a:ptr<uniform, array<Outer, 4>, read> = let %a
-    %p_a_3:ptr<uniform, Outer, read> = access %p_a, 3i
-    %p_a_3_a:ptr<uniform, array<Inner, 4>, read> = access %p_a_3, 0u
-    %p_a_3_a_2:ptr<uniform, Inner, read> = access %p_a_3_a, 2i
-    %p_a_3_a_2_m:ptr<uniform, mat3x4<f16>, read> = access %p_a_3_a_2, 0u
-    %p_a_3_a_2_m_1:ptr<uniform, vec4<f16>, read> = access %p_a_3_a_2_m, 1i
-    %l_a:array<Outer, 4> = load %p_a
-    %l_a_3:Outer = load %p_a_3
-    %l_a_3_a:array<Inner, 4> = load %p_a_3_a
-    %l_a_3_a_2:Inner = load %p_a_3_a_2
-    %l_a_3_a_2_m:mat3x4<f16> = load %p_a_3_a_2_m
-    %l_a_3_a_2_m_1:vec4<f16> = load %p_a_3_a_2_m_1
-    %l_a_3_a_2_m_1_0:f16 = load_vector_element %p_a_3_a_2_m_1, 0i
+    %4:ptr<uniform, Outer, read> = access %p_a, 3i
+    %p_a_3:ptr<uniform, Outer, read> = let %4
+    %6:ptr<uniform, array<Inner, 4>, read> = access %p_a_3, 0u
+    %p_a_3_a:ptr<uniform, array<Inner, 4>, read> = let %6
+    %8:ptr<uniform, Inner, read> = access %p_a_3_a, 2i
+    %p_a_3_a_2:ptr<uniform, Inner, read> = let %8
+    %10:ptr<uniform, mat3x4<f16>, read> = access %p_a_3_a_2, 0u
+    %p_a_3_a_2_m:ptr<uniform, mat3x4<f16>, read> = let %10
+    %12:ptr<uniform, vec4<f16>, read> = access %p_a_3_a_2_m, 1i
+    %p_a_3_a_2_m_1:ptr<uniform, vec4<f16>, read> = let %12
+    %14:array<Outer, 4> = load %p_a
+    %l_a:array<Outer, 4> = let %14
+    %16:Outer = load %p_a_3
+    %l_a_3:Outer = let %16
+    %18:array<Inner, 4> = load %p_a_3_a
+    %l_a_3_a:array<Inner, 4> = let %18
+    %20:Inner = load %p_a_3_a_2
+    %l_a_3_a_2:Inner = let %20
+    %22:mat3x4<f16> = load %p_a_3_a_2_m
+    %l_a_3_a_2_m:mat3x4<f16> = let %22
+    %24:vec4<f16> = load %p_a_3_a_2_m_1
+    %l_a_3_a_2_m_1:vec4<f16> = let %24
+    %26:f16 = load_vector_element %p_a_3_a_2_m_1, 0i
+    %l_a_3_a_2_m_1_0:f16 = let %26
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x4_f16/to_builtin.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat3x4_f16/to_builtin.wgsl.expected.ir.msl
index 21f6138..990cb8e 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x4_f16/to_builtin.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x4_f16/to_builtin.wgsl.expected.ir.msl
@@ -1,29 +1,32 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat3x4<f16> @offset(8)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %3:ptr<uniform, mat3x4<f16>, read> = access %u, 2i, 1u
     %4:mat3x4<f16> = load %3
-    %t:mat4x3<f16> = transpose %4
-    %6:ptr<uniform, vec4<f16>, read> = access %u, 0i, 1u, 1i
-    %7:vec4<f16> = load %6
-    %8:vec4<f16> = swizzle %7, ywxz
-    %l:f16 = length %8
-    %10:ptr<uniform, vec4<f16>, read> = access %u, 0i, 1u, 1i
-    %11:vec4<f16> = load %10
-    %12:vec4<f16> = swizzle %11, ywxz
-    %13:f16 = access %12, 0u
-    %a:f16 = abs %13
+    %5:mat4x3<f16> = transpose %4
+    %t:mat4x3<f16> = let %5
+    %7:ptr<uniform, vec4<f16>, read> = access %u, 0i, 1u, 1i
+    %8:vec4<f16> = load %7
+    %9:vec4<f16> = swizzle %8, ywxz
+    %10:f16 = length %9
+    %l:f16 = let %10
+    %12:ptr<uniform, vec4<f16>, read> = access %u, 0i, 1u, 1i
+    %13:vec4<f16> = load %12
+    %14:vec4<f16> = swizzle %13, ywxz
+    %15:f16 = access %14, 0u
+    %16:f16 = abs %15
+    %a:f16 = let %16
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x4_f16/to_fn.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat3x4_f16/to_fn.wgsl.expected.ir.msl
index 316f6a9..de62933 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x4_f16/to_fn.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x4_f16/to_fn.wgsl.expected.ir.msl
@@ -1,42 +1,42 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat3x4<f16> @offset(8)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
 }
 
-%a = func(%a_1:array<S, 4>):void -> %b2 {  # %a_1: 'a'
-  %b2 = block {
+%a = func(%a_1:array<S, 4>):void {  # %a_1: 'a'
+  $B2: {
     ret
   }
 }
-%b = func(%s:S):void -> %b3 {
-  %b3 = block {
+%b = func(%s:S):void {
+  $B3: {
     ret
   }
 }
-%c = func(%m:mat3x4<f16>):void -> %b4 {
-  %b4 = block {
+%c = func(%m:mat3x4<f16>):void {
+  $B4: {
     ret
   }
 }
-%d = func(%v:vec4<f16>):void -> %b5 {
-  %b5 = block {
+%d = func(%v:vec4<f16>):void {
+  $B5: {
     ret
   }
 }
-%e = func(%f:f16):void -> %b6 {
-  %b6 = block {
+%e = func(%f:f16):void {
+  $B6: {
     ret
   }
 }
-%f_1 = @compute @workgroup_size(1, 1, 1) func():void -> %b7 {  # %f_1: 'f'
-  %b7 = block {
+%f_1 = @compute @workgroup_size(1, 1, 1) func():void {  # %f_1: 'f'
+  $B7: {
     %13:array<S, 4> = load %u
     %14:void = call %a, %13
     %15:ptr<uniform, S, read> = access %u, 2i
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x4_f16/to_private.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat3x4_f16/to_private.wgsl.expected.ir.msl
index f0ab48d..a61c787 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x4_f16/to_private.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x4_f16/to_private.wgsl.expected.ir.msl
@@ -1,18 +1,18 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat3x4<f16> @offset(8)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
   %p:ptr<private, array<S, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:array<S, 4> = load %u
     store %p, %4
     %5:ptr<private, S, read_write> = access %p, 1i
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x4_f16/to_storage.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat3x4_f16/to_storage.wgsl.expected.ir.msl
index c5b440a..02972d7 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x4_f16/to_storage.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x4_f16/to_storage.wgsl.expected.ir.msl
@@ -1,33 +1,73 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat3x4<f16> @offset(8)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
   %s:ptr<storage, array<S, 4>, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:array<S, 4> = load %u
-    store %s, %4
-    %5:ptr<storage, S, read_write> = access %s, 1i
-    %6:ptr<uniform, S, read> = access %u, 2i
-    %7:S = load %6
-    store %5, %7
-    %8:ptr<storage, mat3x4<f16>, read_write> = access %s, 3i, 1u
-    %9:ptr<uniform, mat3x4<f16>, read> = access %u, 2i, 1u
-    %10:mat3x4<f16> = load %9
-    store %8, %10
-    %11:ptr<storage, vec4<f16>, read_write> = access %s, 1i, 1u, 0i
-    %12:ptr<uniform, vec4<f16>, read> = access %u, 0i, 1u, 1i
-    %13:vec4<f16> = load %12
-    %14:vec4<f16> = swizzle %13, ywxz
-    store %11, %14
+    %5:void = call %tint_store_and_preserve_padding, %s, %4
+    %7:ptr<storage, S, read_write> = access %s, 1i
+    %8:ptr<uniform, S, read> = access %u, 2i
+    %9:S = load %8
+    %10:void = call %tint_store_and_preserve_padding_1, %7, %9
+    %12:ptr<storage, mat3x4<f16>, read_write> = access %s, 3i, 1u
+    %13:ptr<uniform, mat3x4<f16>, read> = access %u, 2i, 1u
+    %14:mat3x4<f16> = load %13
+    store %12, %14
+    %15:ptr<storage, vec4<f16>, read_write> = access %s, 1i, 1u, 0i
+    %16:ptr<uniform, vec4<f16>, read> = access %u, 0i, 1u, 1i
+    %17:vec4<f16> = load %16
+    %18:vec4<f16> = swizzle %17, ywxz
+    store %15, %18
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, array<S, 4>, read_write>, %value_param:array<S, 4>):void {
+  $B3: {
+    loop [i: $B4, b: $B5, c: $B6] {  # loop_1
+      $B4: {  # initializer
+        next_iteration 0u  # -> $B5
+      }
+      $B5 (%idx:u32): {  # body
+        %22:bool = gte %idx, 4u
+        if %22 [t: $B7] {  # if_1
+          $B7: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %23:ptr<storage, S, read_write> = access %target, %idx
+        %24:S = access %value_param, %idx
+        %25:void = call %tint_store_and_preserve_padding_1, %23, %24
+        continue  # -> $B6
+      }
+      $B6: {  # continuing
+        %26:u32 = add %idx, 1u
+        next_iteration %26  # -> $B5
+      }
+    }
+    ret
+  }
+}
+%tint_store_and_preserve_padding_1 = func(%target_1:ptr<storage, S, read_write>, %value_param_1:S):void {  # %tint_store_and_preserve_padding_1: 'tint_store_and_preserve_padding', %target_1: 'target', %value_param_1: 'value_param'
+  $B8: {
+    %29:ptr<storage, i32, read_write> = access %target_1, 0u
+    %30:i32 = access %value_param_1, 0u
+    store %29, %30
+    %31:ptr<storage, mat3x4<f16>, read_write> = access %target_1, 1u
+    %32:mat3x4<f16> = access %value_param_1, 1u
+    store %31, %32
+    %33:ptr<storage, i32, read_write> = access %target_1, 2u
+    %34:i32 = access %value_param_1, 2u
+    store %33, %34
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x4_f16/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat3x4_f16/to_workgroup.wgsl.expected.ir.msl
index 580b070..991d905 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x4_f16/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x4_f16/to_workgroup.wgsl.expected.ir.msl
@@ -1,33 +1,54 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat3x4<f16> @offset(8)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
   %w:ptr<workgroup, array<S, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:array<S, 4> = load %u
-    store %w, %4
-    %5:ptr<workgroup, S, read_write> = access %w, 1i
-    %6:ptr<uniform, S, read> = access %u, 2i
-    %7:S = load %6
-    store %5, %7
-    %8:ptr<workgroup, mat3x4<f16>, read_write> = access %w, 3i, 1u
-    %9:ptr<uniform, mat3x4<f16>, read> = access %u, 2i, 1u
-    %10:mat3x4<f16> = load %9
-    store %8, %10
-    %11:ptr<workgroup, vec4<f16>, read_write> = access %w, 1i, 1u, 0i
-    %12:ptr<uniform, vec4<f16>, read> = access %u, 0i, 1u, 1i
-    %13:vec4<f16> = load %12
-    %14:vec4<f16> = swizzle %13, ywxz
-    store %11, %14
+%f = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B2: {
+    loop [i: $B3, b: $B4, c: $B5] {  # loop_1
+      $B3: {  # initializer
+        next_iteration %tint_local_index  # -> $B4
+      }
+      $B4 (%idx:u32): {  # body
+        %6:bool = gte %idx, 4u
+        if %6 [t: $B6] {  # if_1
+          $B6: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %7:ptr<workgroup, S, read_write> = access %w, %idx
+        store %7, S(0i, mat3x4<f16>(vec4<f16>(0.0h)), 0i)
+        continue  # -> $B5
+      }
+      $B5: {  # continuing
+        %8:u32 = add %idx, 1u
+        next_iteration %8  # -> $B4
+      }
+    }
+    %9:void = msl.threadgroup_barrier 4u
+    %10:array<S, 4> = load %u
+    store %w, %10
+    %11:ptr<workgroup, S, read_write> = access %w, 1i
+    %12:ptr<uniform, S, read> = access %u, 2i
+    %13:S = load %12
+    store %11, %13
+    %14:ptr<workgroup, mat3x4<f16>, read_write> = access %w, 3i, 1u
+    %15:ptr<uniform, mat3x4<f16>, read> = access %u, 2i, 1u
+    %16:mat3x4<f16> = load %15
+    store %14, %16
+    %17:ptr<workgroup, vec4<f16>, read_write> = access %w, 1i, 1u, 0i
+    %18:ptr<uniform, vec4<f16>, read> = access %u, 0i, 1u, 1i
+    %19:vec4<f16> = load %18
+    %20:vec4<f16> = swizzle %19, ywxz
+    store %17, %20
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat3x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
index a71e7d2..7374cb3 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Inner = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Inner = struct @align(16) {
   m:mat3x4<f32> @offset(0)
 }
 
@@ -8,13 +8,13 @@
   a:array<Inner, 4> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %a:ptr<uniform, array<Outer, 4>, read> = var @binding_point(0, 0)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
+%i = func():i32 {
+  $B2: {
     %4:i32 = load %counter
     %5:i32 = add %4, 1i
     store %counter, %5
@@ -22,25 +22,37 @@
     ret %6
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_a:ptr<uniform, array<Outer, 4>, read> = let %a
     %9:i32 = call %i
-    %p_a_i:ptr<uniform, Outer, read> = access %p_a, %9
-    %p_a_i_a:ptr<uniform, array<Inner, 4>, read> = access %p_a_i, 0u
-    %12:i32 = call %i
-    %p_a_i_a_i:ptr<uniform, Inner, read> = access %p_a_i_a, %12
-    %p_a_i_a_i_m:ptr<uniform, mat3x4<f32>, read> = access %p_a_i_a_i, 0u
-    %15:i32 = call %i
-    %p_a_i_a_i_m_i:ptr<uniform, vec4<f32>, read> = access %p_a_i_a_i_m, %15
-    %l_a:array<Outer, 4> = load %p_a
-    %l_a_i:Outer = load %p_a_i
-    %l_a_i_a:array<Inner, 4> = load %p_a_i_a
-    %l_a_i_a_i:Inner = load %p_a_i_a_i
-    %l_a_i_a_i_m:mat3x4<f32> = load %p_a_i_a_i_m
-    %l_a_i_a_i_m_i:vec4<f32> = load %p_a_i_a_i_m_i
-    %23:i32 = call %i
-    %l_a_i_a_i_m_i_i:f32 = load_vector_element %p_a_i_a_i_m_i, %23
+    %10:ptr<uniform, Outer, read> = access %p_a, %9
+    %p_a_i:ptr<uniform, Outer, read> = let %10
+    %12:ptr<uniform, array<Inner, 4>, read> = access %p_a_i, 0u
+    %p_a_i_a:ptr<uniform, array<Inner, 4>, read> = let %12
+    %14:i32 = call %i
+    %15:ptr<uniform, Inner, read> = access %p_a_i_a, %14
+    %p_a_i_a_i:ptr<uniform, Inner, read> = let %15
+    %17:ptr<uniform, mat3x4<f32>, read> = access %p_a_i_a_i, 0u
+    %p_a_i_a_i_m:ptr<uniform, mat3x4<f32>, read> = let %17
+    %19:i32 = call %i
+    %20:ptr<uniform, vec4<f32>, read> = access %p_a_i_a_i_m, %19
+    %p_a_i_a_i_m_i:ptr<uniform, vec4<f32>, read> = let %20
+    %22:array<Outer, 4> = load %p_a
+    %l_a:array<Outer, 4> = let %22
+    %24:Outer = load %p_a_i
+    %l_a_i:Outer = let %24
+    %26:array<Inner, 4> = load %p_a_i_a
+    %l_a_i_a:array<Inner, 4> = let %26
+    %28:Inner = load %p_a_i_a_i
+    %l_a_i_a_i:Inner = let %28
+    %30:mat3x4<f32> = load %p_a_i_a_i_m
+    %l_a_i_a_i_m:mat3x4<f32> = let %30
+    %32:vec4<f32> = load %p_a_i_a_i_m_i
+    %l_a_i_a_i_m_i:vec4<f32> = let %32
+    %34:i32 = call %i
+    %35:f32 = load_vector_element %p_a_i_a_i_m_i, %34
+    %l_a_i_a_i_m_i_i:f32 = let %35
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x4_f32/static_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat3x4_f32/static_index_via_ptr.wgsl.expected.ir.msl
index 4f1844e..a6aa20b 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x4_f32/static_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x4_f32/static_index_via_ptr.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Inner = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Inner = struct @align(16) {
   m:mat3x4<f32> @offset(0)
 }
 
@@ -8,25 +8,37 @@
   a:array<Inner, 4> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %a:ptr<uniform, array<Outer, 4>, read> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %p_a:ptr<uniform, array<Outer, 4>, read> = let %a
-    %p_a_3:ptr<uniform, Outer, read> = access %p_a, 3i
-    %p_a_3_a:ptr<uniform, array<Inner, 4>, read> = access %p_a_3, 0u
-    %p_a_3_a_2:ptr<uniform, Inner, read> = access %p_a_3_a, 2i
-    %p_a_3_a_2_m:ptr<uniform, mat3x4<f32>, read> = access %p_a_3_a_2, 0u
-    %p_a_3_a_2_m_1:ptr<uniform, vec4<f32>, read> = access %p_a_3_a_2_m, 1i
-    %l_a:array<Outer, 4> = load %p_a
-    %l_a_3:Outer = load %p_a_3
-    %l_a_3_a:array<Inner, 4> = load %p_a_3_a
-    %l_a_3_a_2:Inner = load %p_a_3_a_2
-    %l_a_3_a_2_m:mat3x4<f32> = load %p_a_3_a_2_m
-    %l_a_3_a_2_m_1:vec4<f32> = load %p_a_3_a_2_m_1
-    %l_a_3_a_2_m_1_0:f32 = load_vector_element %p_a_3_a_2_m_1, 0i
+    %4:ptr<uniform, Outer, read> = access %p_a, 3i
+    %p_a_3:ptr<uniform, Outer, read> = let %4
+    %6:ptr<uniform, array<Inner, 4>, read> = access %p_a_3, 0u
+    %p_a_3_a:ptr<uniform, array<Inner, 4>, read> = let %6
+    %8:ptr<uniform, Inner, read> = access %p_a_3_a, 2i
+    %p_a_3_a_2:ptr<uniform, Inner, read> = let %8
+    %10:ptr<uniform, mat3x4<f32>, read> = access %p_a_3_a_2, 0u
+    %p_a_3_a_2_m:ptr<uniform, mat3x4<f32>, read> = let %10
+    %12:ptr<uniform, vec4<f32>, read> = access %p_a_3_a_2_m, 1i
+    %p_a_3_a_2_m_1:ptr<uniform, vec4<f32>, read> = let %12
+    %14:array<Outer, 4> = load %p_a
+    %l_a:array<Outer, 4> = let %14
+    %16:Outer = load %p_a_3
+    %l_a_3:Outer = let %16
+    %18:array<Inner, 4> = load %p_a_3_a
+    %l_a_3_a:array<Inner, 4> = let %18
+    %20:Inner = load %p_a_3_a_2
+    %l_a_3_a_2:Inner = let %20
+    %22:mat3x4<f32> = load %p_a_3_a_2_m
+    %l_a_3_a_2_m:mat3x4<f32> = let %22
+    %24:vec4<f32> = load %p_a_3_a_2_m_1
+    %l_a_3_a_2_m_1:vec4<f32> = let %24
+    %26:f32 = load_vector_element %p_a_3_a_2_m_1, 0i
+    %l_a_3_a_2_m_1_0:f32 = let %26
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x4_f32/to_builtin.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat3x4_f32/to_builtin.wgsl.expected.ir.msl
index 5126b54..01d8863 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x4_f32/to_builtin.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x4_f32/to_builtin.wgsl.expected.ir.msl
@@ -1,29 +1,32 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat3x4<f32> @offset(16)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %3:ptr<uniform, mat3x4<f32>, read> = access %u, 2i, 1u
     %4:mat3x4<f32> = load %3
-    %t:mat4x3<f32> = transpose %4
-    %6:ptr<uniform, vec4<f32>, read> = access %u, 0i, 1u, 1i
-    %7:vec4<f32> = load %6
-    %8:vec4<f32> = swizzle %7, ywxz
-    %l:f32 = length %8
-    %10:ptr<uniform, vec4<f32>, read> = access %u, 0i, 1u, 1i
-    %11:vec4<f32> = load %10
-    %12:vec4<f32> = swizzle %11, ywxz
-    %13:f32 = access %12, 0u
-    %a:f32 = abs %13
+    %5:mat4x3<f32> = transpose %4
+    %t:mat4x3<f32> = let %5
+    %7:ptr<uniform, vec4<f32>, read> = access %u, 0i, 1u, 1i
+    %8:vec4<f32> = load %7
+    %9:vec4<f32> = swizzle %8, ywxz
+    %10:f32 = length %9
+    %l:f32 = let %10
+    %12:ptr<uniform, vec4<f32>, read> = access %u, 0i, 1u, 1i
+    %13:vec4<f32> = load %12
+    %14:vec4<f32> = swizzle %13, ywxz
+    %15:f32 = access %14, 0u
+    %16:f32 = abs %15
+    %a:f32 = let %16
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x4_f32/to_fn.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat3x4_f32/to_fn.wgsl.expected.ir.msl
index ffbd46f..9fc86f4 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x4_f32/to_fn.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x4_f32/to_fn.wgsl.expected.ir.msl
@@ -1,42 +1,42 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat3x4<f32> @offset(16)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
 }
 
-%a = func(%a_1:array<S, 4>):void -> %b2 {  # %a_1: 'a'
-  %b2 = block {
+%a = func(%a_1:array<S, 4>):void {  # %a_1: 'a'
+  $B2: {
     ret
   }
 }
-%b = func(%s:S):void -> %b3 {
-  %b3 = block {
+%b = func(%s:S):void {
+  $B3: {
     ret
   }
 }
-%c = func(%m:mat3x4<f32>):void -> %b4 {
-  %b4 = block {
+%c = func(%m:mat3x4<f32>):void {
+  $B4: {
     ret
   }
 }
-%d = func(%v:vec4<f32>):void -> %b5 {
-  %b5 = block {
+%d = func(%v:vec4<f32>):void {
+  $B5: {
     ret
   }
 }
-%e = func(%f:f32):void -> %b6 {
-  %b6 = block {
+%e = func(%f:f32):void {
+  $B6: {
     ret
   }
 }
-%f_1 = @compute @workgroup_size(1, 1, 1) func():void -> %b7 {  # %f_1: 'f'
-  %b7 = block {
+%f_1 = @compute @workgroup_size(1, 1, 1) func():void {  # %f_1: 'f'
+  $B7: {
     %13:array<S, 4> = load %u
     %14:void = call %a, %13
     %15:ptr<uniform, S, read> = access %u, 2i
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x4_f32/to_private.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat3x4_f32/to_private.wgsl.expected.ir.msl
index 68cae57..66213c0 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x4_f32/to_private.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x4_f32/to_private.wgsl.expected.ir.msl
@@ -1,18 +1,18 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat3x4<f32> @offset(16)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
   %p:ptr<private, array<S, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:array<S, 4> = load %u
     store %p, %4
     %5:ptr<private, S, read_write> = access %p, 1i
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x4_f32/to_storage.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat3x4_f32/to_storage.wgsl.expected.ir.msl
index 5fc9747..bc1753b 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x4_f32/to_storage.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x4_f32/to_storage.wgsl.expected.ir.msl
@@ -1,33 +1,73 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat3x4<f32> @offset(16)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
   %s:ptr<storage, array<S, 4>, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:array<S, 4> = load %u
-    store %s, %4
-    %5:ptr<storage, S, read_write> = access %s, 1i
-    %6:ptr<uniform, S, read> = access %u, 2i
-    %7:S = load %6
-    store %5, %7
-    %8:ptr<storage, mat3x4<f32>, read_write> = access %s, 3i, 1u
-    %9:ptr<uniform, mat3x4<f32>, read> = access %u, 2i, 1u
-    %10:mat3x4<f32> = load %9
-    store %8, %10
-    %11:ptr<storage, vec4<f32>, read_write> = access %s, 1i, 1u, 0i
-    %12:ptr<uniform, vec4<f32>, read> = access %u, 0i, 1u, 1i
-    %13:vec4<f32> = load %12
-    %14:vec4<f32> = swizzle %13, ywxz
-    store %11, %14
+    %5:void = call %tint_store_and_preserve_padding, %s, %4
+    %7:ptr<storage, S, read_write> = access %s, 1i
+    %8:ptr<uniform, S, read> = access %u, 2i
+    %9:S = load %8
+    %10:void = call %tint_store_and_preserve_padding_1, %7, %9
+    %12:ptr<storage, mat3x4<f32>, read_write> = access %s, 3i, 1u
+    %13:ptr<uniform, mat3x4<f32>, read> = access %u, 2i, 1u
+    %14:mat3x4<f32> = load %13
+    store %12, %14
+    %15:ptr<storage, vec4<f32>, read_write> = access %s, 1i, 1u, 0i
+    %16:ptr<uniform, vec4<f32>, read> = access %u, 0i, 1u, 1i
+    %17:vec4<f32> = load %16
+    %18:vec4<f32> = swizzle %17, ywxz
+    store %15, %18
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, array<S, 4>, read_write>, %value_param:array<S, 4>):void {
+  $B3: {
+    loop [i: $B4, b: $B5, c: $B6] {  # loop_1
+      $B4: {  # initializer
+        next_iteration 0u  # -> $B5
+      }
+      $B5 (%idx:u32): {  # body
+        %22:bool = gte %idx, 4u
+        if %22 [t: $B7] {  # if_1
+          $B7: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %23:ptr<storage, S, read_write> = access %target, %idx
+        %24:S = access %value_param, %idx
+        %25:void = call %tint_store_and_preserve_padding_1, %23, %24
+        continue  # -> $B6
+      }
+      $B6: {  # continuing
+        %26:u32 = add %idx, 1u
+        next_iteration %26  # -> $B5
+      }
+    }
+    ret
+  }
+}
+%tint_store_and_preserve_padding_1 = func(%target_1:ptr<storage, S, read_write>, %value_param_1:S):void {  # %tint_store_and_preserve_padding_1: 'tint_store_and_preserve_padding', %target_1: 'target', %value_param_1: 'value_param'
+  $B8: {
+    %29:ptr<storage, i32, read_write> = access %target_1, 0u
+    %30:i32 = access %value_param_1, 0u
+    store %29, %30
+    %31:ptr<storage, mat3x4<f32>, read_write> = access %target_1, 1u
+    %32:mat3x4<f32> = access %value_param_1, 1u
+    store %31, %32
+    %33:ptr<storage, i32, read_write> = access %target_1, 2u
+    %34:i32 = access %value_param_1, 2u
+    store %33, %34
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x4_f32/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat3x4_f32/to_workgroup.wgsl.expected.ir.msl
index b5f3d95..def00cc 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x4_f32/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x4_f32/to_workgroup.wgsl.expected.ir.msl
@@ -1,33 +1,54 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat3x4<f32> @offset(16)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
   %w:ptr<workgroup, array<S, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:array<S, 4> = load %u
-    store %w, %4
-    %5:ptr<workgroup, S, read_write> = access %w, 1i
-    %6:ptr<uniform, S, read> = access %u, 2i
-    %7:S = load %6
-    store %5, %7
-    %8:ptr<workgroup, mat3x4<f32>, read_write> = access %w, 3i, 1u
-    %9:ptr<uniform, mat3x4<f32>, read> = access %u, 2i, 1u
-    %10:mat3x4<f32> = load %9
-    store %8, %10
-    %11:ptr<workgroup, vec4<f32>, read_write> = access %w, 1i, 1u, 0i
-    %12:ptr<uniform, vec4<f32>, read> = access %u, 0i, 1u, 1i
-    %13:vec4<f32> = load %12
-    %14:vec4<f32> = swizzle %13, ywxz
-    store %11, %14
+%f = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B2: {
+    loop [i: $B3, b: $B4, c: $B5] {  # loop_1
+      $B3: {  # initializer
+        next_iteration %tint_local_index  # -> $B4
+      }
+      $B4 (%idx:u32): {  # body
+        %6:bool = gte %idx, 4u
+        if %6 [t: $B6] {  # if_1
+          $B6: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %7:ptr<workgroup, S, read_write> = access %w, %idx
+        store %7, S(0i, mat3x4<f32>(vec4<f32>(0.0f)), 0i)
+        continue  # -> $B5
+      }
+      $B5: {  # continuing
+        %8:u32 = add %idx, 1u
+        next_iteration %8  # -> $B4
+      }
+    }
+    %9:void = msl.threadgroup_barrier 4u
+    %10:array<S, 4> = load %u
+    store %w, %10
+    %11:ptr<workgroup, S, read_write> = access %w, 1i
+    %12:ptr<uniform, S, read> = access %u, 2i
+    %13:S = load %12
+    store %11, %13
+    %14:ptr<workgroup, mat3x4<f32>, read_write> = access %w, 3i, 1u
+    %15:ptr<uniform, mat3x4<f32>, read> = access %u, 2i, 1u
+    %16:mat3x4<f32> = load %15
+    store %14, %16
+    %17:ptr<workgroup, vec4<f32>, read_write> = access %w, 1i, 1u, 0i
+    %18:ptr<uniform, vec4<f32>, read> = access %u, 0i, 1u, 1i
+    %19:vec4<f32> = load %18
+    %20:vec4<f32> = swizzle %19, ywxz
+    store %17, %20
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x2_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat4x2_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
index 8306964..f7e6bdc 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x2_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x2_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Inner = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Inner = struct @align(4) {
   m:mat4x2<f16> @offset(0)
 }
 
@@ -8,13 +8,13 @@
   a:array<Inner, 4> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %a:ptr<uniform, array<Outer, 4>, read> = var @binding_point(0, 0)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
+%i = func():i32 {
+  $B2: {
     %4:i32 = load %counter
     %5:i32 = add %4, 1i
     store %counter, %5
@@ -22,25 +22,37 @@
     ret %6
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_a:ptr<uniform, array<Outer, 4>, read> = let %a
     %9:i32 = call %i
-    %p_a_i:ptr<uniform, Outer, read> = access %p_a, %9
-    %p_a_i_a:ptr<uniform, array<Inner, 4>, read> = access %p_a_i, 0u
-    %12:i32 = call %i
-    %p_a_i_a_i:ptr<uniform, Inner, read> = access %p_a_i_a, %12
-    %p_a_i_a_i_m:ptr<uniform, mat4x2<f16>, read> = access %p_a_i_a_i, 0u
-    %15:i32 = call %i
-    %p_a_i_a_i_m_i:ptr<uniform, vec2<f16>, read> = access %p_a_i_a_i_m, %15
-    %l_a:array<Outer, 4> = load %p_a
-    %l_a_i:Outer = load %p_a_i
-    %l_a_i_a:array<Inner, 4> = load %p_a_i_a
-    %l_a_i_a_i:Inner = load %p_a_i_a_i
-    %l_a_i_a_i_m:mat4x2<f16> = load %p_a_i_a_i_m
-    %l_a_i_a_i_m_i:vec2<f16> = load %p_a_i_a_i_m_i
-    %23:i32 = call %i
-    %l_a_i_a_i_m_i_i:f16 = load_vector_element %p_a_i_a_i_m_i, %23
+    %10:ptr<uniform, Outer, read> = access %p_a, %9
+    %p_a_i:ptr<uniform, Outer, read> = let %10
+    %12:ptr<uniform, array<Inner, 4>, read> = access %p_a_i, 0u
+    %p_a_i_a:ptr<uniform, array<Inner, 4>, read> = let %12
+    %14:i32 = call %i
+    %15:ptr<uniform, Inner, read> = access %p_a_i_a, %14
+    %p_a_i_a_i:ptr<uniform, Inner, read> = let %15
+    %17:ptr<uniform, mat4x2<f16>, read> = access %p_a_i_a_i, 0u
+    %p_a_i_a_i_m:ptr<uniform, mat4x2<f16>, read> = let %17
+    %19:i32 = call %i
+    %20:ptr<uniform, vec2<f16>, read> = access %p_a_i_a_i_m, %19
+    %p_a_i_a_i_m_i:ptr<uniform, vec2<f16>, read> = let %20
+    %22:array<Outer, 4> = load %p_a
+    %l_a:array<Outer, 4> = let %22
+    %24:Outer = load %p_a_i
+    %l_a_i:Outer = let %24
+    %26:array<Inner, 4> = load %p_a_i_a
+    %l_a_i_a:array<Inner, 4> = let %26
+    %28:Inner = load %p_a_i_a_i
+    %l_a_i_a_i:Inner = let %28
+    %30:mat4x2<f16> = load %p_a_i_a_i_m
+    %l_a_i_a_i_m:mat4x2<f16> = let %30
+    %32:vec2<f16> = load %p_a_i_a_i_m_i
+    %l_a_i_a_i_m_i:vec2<f16> = let %32
+    %34:i32 = call %i
+    %35:f16 = load_vector_element %p_a_i_a_i_m_i, %34
+    %l_a_i_a_i_m_i_i:f16 = let %35
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x2_f16/static_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat4x2_f16/static_index_via_ptr.wgsl.expected.ir.msl
index 1f50328..5f0caca 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x2_f16/static_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x2_f16/static_index_via_ptr.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Inner = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Inner = struct @align(4) {
   m:mat4x2<f16> @offset(0)
 }
 
@@ -8,25 +8,37 @@
   a:array<Inner, 4> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %a:ptr<uniform, array<Outer, 4>, read> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %p_a:ptr<uniform, array<Outer, 4>, read> = let %a
-    %p_a_3:ptr<uniform, Outer, read> = access %p_a, 3i
-    %p_a_3_a:ptr<uniform, array<Inner, 4>, read> = access %p_a_3, 0u
-    %p_a_3_a_2:ptr<uniform, Inner, read> = access %p_a_3_a, 2i
-    %p_a_3_a_2_m:ptr<uniform, mat4x2<f16>, read> = access %p_a_3_a_2, 0u
-    %p_a_3_a_2_m_1:ptr<uniform, vec2<f16>, read> = access %p_a_3_a_2_m, 1i
-    %l_a:array<Outer, 4> = load %p_a
-    %l_a_3:Outer = load %p_a_3
-    %l_a_3_a:array<Inner, 4> = load %p_a_3_a
-    %l_a_3_a_2:Inner = load %p_a_3_a_2
-    %l_a_3_a_2_m:mat4x2<f16> = load %p_a_3_a_2_m
-    %l_a_3_a_2_m_1:vec2<f16> = load %p_a_3_a_2_m_1
-    %l_a_3_a_2_m_1_0:f16 = load_vector_element %p_a_3_a_2_m_1, 0i
+    %4:ptr<uniform, Outer, read> = access %p_a, 3i
+    %p_a_3:ptr<uniform, Outer, read> = let %4
+    %6:ptr<uniform, array<Inner, 4>, read> = access %p_a_3, 0u
+    %p_a_3_a:ptr<uniform, array<Inner, 4>, read> = let %6
+    %8:ptr<uniform, Inner, read> = access %p_a_3_a, 2i
+    %p_a_3_a_2:ptr<uniform, Inner, read> = let %8
+    %10:ptr<uniform, mat4x2<f16>, read> = access %p_a_3_a_2, 0u
+    %p_a_3_a_2_m:ptr<uniform, mat4x2<f16>, read> = let %10
+    %12:ptr<uniform, vec2<f16>, read> = access %p_a_3_a_2_m, 1i
+    %p_a_3_a_2_m_1:ptr<uniform, vec2<f16>, read> = let %12
+    %14:array<Outer, 4> = load %p_a
+    %l_a:array<Outer, 4> = let %14
+    %16:Outer = load %p_a_3
+    %l_a_3:Outer = let %16
+    %18:array<Inner, 4> = load %p_a_3_a
+    %l_a_3_a:array<Inner, 4> = let %18
+    %20:Inner = load %p_a_3_a_2
+    %l_a_3_a_2:Inner = let %20
+    %22:mat4x2<f16> = load %p_a_3_a_2_m
+    %l_a_3_a_2_m:mat4x2<f16> = let %22
+    %24:vec2<f16> = load %p_a_3_a_2_m_1
+    %l_a_3_a_2_m_1:vec2<f16> = let %24
+    %26:f16 = load_vector_element %p_a_3_a_2_m_1, 0i
+    %l_a_3_a_2_m_1_0:f16 = let %26
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x2_f16/to_builtin.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat4x2_f16/to_builtin.wgsl.expected.ir.msl
index 636630f..ae20072 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x2_f16/to_builtin.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x2_f16/to_builtin.wgsl.expected.ir.msl
@@ -1,29 +1,32 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat4x2<f16> @offset(4)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %3:ptr<uniform, mat4x2<f16>, read> = access %u, 2i, 1u
     %4:mat4x2<f16> = load %3
-    %t:mat2x4<f16> = transpose %4
-    %6:ptr<uniform, vec2<f16>, read> = access %u, 0i, 1u, 1i
-    %7:vec2<f16> = load %6
-    %8:vec2<f16> = swizzle %7, yx
-    %l:f16 = length %8
-    %10:ptr<uniform, vec2<f16>, read> = access %u, 0i, 1u, 1i
-    %11:vec2<f16> = load %10
-    %12:vec2<f16> = swizzle %11, yx
-    %13:f16 = access %12, 0u
-    %a:f16 = abs %13
+    %5:mat2x4<f16> = transpose %4
+    %t:mat2x4<f16> = let %5
+    %7:ptr<uniform, vec2<f16>, read> = access %u, 0i, 1u, 1i
+    %8:vec2<f16> = load %7
+    %9:vec2<f16> = swizzle %8, yx
+    %10:f16 = length %9
+    %l:f16 = let %10
+    %12:ptr<uniform, vec2<f16>, read> = access %u, 0i, 1u, 1i
+    %13:vec2<f16> = load %12
+    %14:vec2<f16> = swizzle %13, yx
+    %15:f16 = access %14, 0u
+    %16:f16 = abs %15
+    %a:f16 = let %16
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x2_f16/to_fn.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat4x2_f16/to_fn.wgsl.expected.ir.msl
index 9f1ee81..2e0da2b 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x2_f16/to_fn.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x2_f16/to_fn.wgsl.expected.ir.msl
@@ -1,42 +1,42 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat4x2<f16> @offset(4)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
 }
 
-%a = func(%a_1:array<S, 4>):void -> %b2 {  # %a_1: 'a'
-  %b2 = block {
+%a = func(%a_1:array<S, 4>):void {  # %a_1: 'a'
+  $B2: {
     ret
   }
 }
-%b = func(%s:S):void -> %b3 {
-  %b3 = block {
+%b = func(%s:S):void {
+  $B3: {
     ret
   }
 }
-%c = func(%m:mat4x2<f16>):void -> %b4 {
-  %b4 = block {
+%c = func(%m:mat4x2<f16>):void {
+  $B4: {
     ret
   }
 }
-%d = func(%v:vec2<f16>):void -> %b5 {
-  %b5 = block {
+%d = func(%v:vec2<f16>):void {
+  $B5: {
     ret
   }
 }
-%e = func(%f:f16):void -> %b6 {
-  %b6 = block {
+%e = func(%f:f16):void {
+  $B6: {
     ret
   }
 }
-%f_1 = @compute @workgroup_size(1, 1, 1) func():void -> %b7 {  # %f_1: 'f'
-  %b7 = block {
+%f_1 = @compute @workgroup_size(1, 1, 1) func():void {  # %f_1: 'f'
+  $B7: {
     %13:array<S, 4> = load %u
     %14:void = call %a, %13
     %15:ptr<uniform, S, read> = access %u, 2i
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x2_f16/to_private.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat4x2_f16/to_private.wgsl.expected.ir.msl
index 6993c15..4904ec9 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x2_f16/to_private.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x2_f16/to_private.wgsl.expected.ir.msl
@@ -1,18 +1,18 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat4x2<f16> @offset(4)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
   %p:ptr<private, array<S, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:array<S, 4> = load %u
     store %p, %4
     %5:ptr<private, S, read_write> = access %p, 1i
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x2_f16/to_storage.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat4x2_f16/to_storage.wgsl.expected.ir.msl
index c0e3d0f..1b11f6e 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x2_f16/to_storage.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x2_f16/to_storage.wgsl.expected.ir.msl
@@ -1,33 +1,73 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat4x2<f16> @offset(4)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
   %s:ptr<storage, array<S, 4>, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:array<S, 4> = load %u
-    store %s, %4
-    %5:ptr<storage, S, read_write> = access %s, 1i
-    %6:ptr<uniform, S, read> = access %u, 2i
-    %7:S = load %6
-    store %5, %7
-    %8:ptr<storage, mat4x2<f16>, read_write> = access %s, 3i, 1u
-    %9:ptr<uniform, mat4x2<f16>, read> = access %u, 2i, 1u
-    %10:mat4x2<f16> = load %9
-    store %8, %10
-    %11:ptr<storage, vec2<f16>, read_write> = access %s, 1i, 1u, 0i
-    %12:ptr<uniform, vec2<f16>, read> = access %u, 0i, 1u, 1i
-    %13:vec2<f16> = load %12
-    %14:vec2<f16> = swizzle %13, yx
-    store %11, %14
+    %5:void = call %tint_store_and_preserve_padding, %s, %4
+    %7:ptr<storage, S, read_write> = access %s, 1i
+    %8:ptr<uniform, S, read> = access %u, 2i
+    %9:S = load %8
+    %10:void = call %tint_store_and_preserve_padding_1, %7, %9
+    %12:ptr<storage, mat4x2<f16>, read_write> = access %s, 3i, 1u
+    %13:ptr<uniform, mat4x2<f16>, read> = access %u, 2i, 1u
+    %14:mat4x2<f16> = load %13
+    store %12, %14
+    %15:ptr<storage, vec2<f16>, read_write> = access %s, 1i, 1u, 0i
+    %16:ptr<uniform, vec2<f16>, read> = access %u, 0i, 1u, 1i
+    %17:vec2<f16> = load %16
+    %18:vec2<f16> = swizzle %17, yx
+    store %15, %18
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, array<S, 4>, read_write>, %value_param:array<S, 4>):void {
+  $B3: {
+    loop [i: $B4, b: $B5, c: $B6] {  # loop_1
+      $B4: {  # initializer
+        next_iteration 0u  # -> $B5
+      }
+      $B5 (%idx:u32): {  # body
+        %22:bool = gte %idx, 4u
+        if %22 [t: $B7] {  # if_1
+          $B7: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %23:ptr<storage, S, read_write> = access %target, %idx
+        %24:S = access %value_param, %idx
+        %25:void = call %tint_store_and_preserve_padding_1, %23, %24
+        continue  # -> $B6
+      }
+      $B6: {  # continuing
+        %26:u32 = add %idx, 1u
+        next_iteration %26  # -> $B5
+      }
+    }
+    ret
+  }
+}
+%tint_store_and_preserve_padding_1 = func(%target_1:ptr<storage, S, read_write>, %value_param_1:S):void {  # %tint_store_and_preserve_padding_1: 'tint_store_and_preserve_padding', %target_1: 'target', %value_param_1: 'value_param'
+  $B8: {
+    %29:ptr<storage, i32, read_write> = access %target_1, 0u
+    %30:i32 = access %value_param_1, 0u
+    store %29, %30
+    %31:ptr<storage, mat4x2<f16>, read_write> = access %target_1, 1u
+    %32:mat4x2<f16> = access %value_param_1, 1u
+    store %31, %32
+    %33:ptr<storage, i32, read_write> = access %target_1, 2u
+    %34:i32 = access %value_param_1, 2u
+    store %33, %34
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x2_f16/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat4x2_f16/to_workgroup.wgsl.expected.ir.msl
index ea84300..0d3b61f 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x2_f16/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x2_f16/to_workgroup.wgsl.expected.ir.msl
@@ -1,33 +1,54 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat4x2<f16> @offset(4)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
   %w:ptr<workgroup, array<S, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:array<S, 4> = load %u
-    store %w, %4
-    %5:ptr<workgroup, S, read_write> = access %w, 1i
-    %6:ptr<uniform, S, read> = access %u, 2i
-    %7:S = load %6
-    store %5, %7
-    %8:ptr<workgroup, mat4x2<f16>, read_write> = access %w, 3i, 1u
-    %9:ptr<uniform, mat4x2<f16>, read> = access %u, 2i, 1u
-    %10:mat4x2<f16> = load %9
-    store %8, %10
-    %11:ptr<workgroup, vec2<f16>, read_write> = access %w, 1i, 1u, 0i
-    %12:ptr<uniform, vec2<f16>, read> = access %u, 0i, 1u, 1i
-    %13:vec2<f16> = load %12
-    %14:vec2<f16> = swizzle %13, yx
-    store %11, %14
+%f = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B2: {
+    loop [i: $B3, b: $B4, c: $B5] {  # loop_1
+      $B3: {  # initializer
+        next_iteration %tint_local_index  # -> $B4
+      }
+      $B4 (%idx:u32): {  # body
+        %6:bool = gte %idx, 4u
+        if %6 [t: $B6] {  # if_1
+          $B6: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %7:ptr<workgroup, S, read_write> = access %w, %idx
+        store %7, S(0i, mat4x2<f16>(vec2<f16>(0.0h)), 0i)
+        continue  # -> $B5
+      }
+      $B5: {  # continuing
+        %8:u32 = add %idx, 1u
+        next_iteration %8  # -> $B4
+      }
+    }
+    %9:void = msl.threadgroup_barrier 4u
+    %10:array<S, 4> = load %u
+    store %w, %10
+    %11:ptr<workgroup, S, read_write> = access %w, 1i
+    %12:ptr<uniform, S, read> = access %u, 2i
+    %13:S = load %12
+    store %11, %13
+    %14:ptr<workgroup, mat4x2<f16>, read_write> = access %w, 3i, 1u
+    %15:ptr<uniform, mat4x2<f16>, read> = access %u, 2i, 1u
+    %16:mat4x2<f16> = load %15
+    store %14, %16
+    %17:ptr<workgroup, vec2<f16>, read_write> = access %w, 1i, 1u, 0i
+    %18:ptr<uniform, vec2<f16>, read> = access %u, 0i, 1u, 1i
+    %19:vec2<f16> = load %18
+    %20:vec2<f16> = swizzle %19, yx
+    store %17, %20
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x2_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat4x2_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
index 65ef9c2..71450f5 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x2_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x2_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Inner = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Inner = struct @align(8) {
   m:mat4x2<f32> @offset(0)
 }
 
@@ -8,13 +8,13 @@
   a:array<Inner, 4> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %a:ptr<uniform, array<Outer, 4>, read> = var @binding_point(0, 0)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
+%i = func():i32 {
+  $B2: {
     %4:i32 = load %counter
     %5:i32 = add %4, 1i
     store %counter, %5
@@ -22,25 +22,37 @@
     ret %6
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_a:ptr<uniform, array<Outer, 4>, read> = let %a
     %9:i32 = call %i
-    %p_a_i:ptr<uniform, Outer, read> = access %p_a, %9
-    %p_a_i_a:ptr<uniform, array<Inner, 4>, read> = access %p_a_i, 0u
-    %12:i32 = call %i
-    %p_a_i_a_i:ptr<uniform, Inner, read> = access %p_a_i_a, %12
-    %p_a_i_a_i_m:ptr<uniform, mat4x2<f32>, read> = access %p_a_i_a_i, 0u
-    %15:i32 = call %i
-    %p_a_i_a_i_m_i:ptr<uniform, vec2<f32>, read> = access %p_a_i_a_i_m, %15
-    %l_a:array<Outer, 4> = load %p_a
-    %l_a_i:Outer = load %p_a_i
-    %l_a_i_a:array<Inner, 4> = load %p_a_i_a
-    %l_a_i_a_i:Inner = load %p_a_i_a_i
-    %l_a_i_a_i_m:mat4x2<f32> = load %p_a_i_a_i_m
-    %l_a_i_a_i_m_i:vec2<f32> = load %p_a_i_a_i_m_i
-    %23:i32 = call %i
-    %l_a_i_a_i_m_i_i:f32 = load_vector_element %p_a_i_a_i_m_i, %23
+    %10:ptr<uniform, Outer, read> = access %p_a, %9
+    %p_a_i:ptr<uniform, Outer, read> = let %10
+    %12:ptr<uniform, array<Inner, 4>, read> = access %p_a_i, 0u
+    %p_a_i_a:ptr<uniform, array<Inner, 4>, read> = let %12
+    %14:i32 = call %i
+    %15:ptr<uniform, Inner, read> = access %p_a_i_a, %14
+    %p_a_i_a_i:ptr<uniform, Inner, read> = let %15
+    %17:ptr<uniform, mat4x2<f32>, read> = access %p_a_i_a_i, 0u
+    %p_a_i_a_i_m:ptr<uniform, mat4x2<f32>, read> = let %17
+    %19:i32 = call %i
+    %20:ptr<uniform, vec2<f32>, read> = access %p_a_i_a_i_m, %19
+    %p_a_i_a_i_m_i:ptr<uniform, vec2<f32>, read> = let %20
+    %22:array<Outer, 4> = load %p_a
+    %l_a:array<Outer, 4> = let %22
+    %24:Outer = load %p_a_i
+    %l_a_i:Outer = let %24
+    %26:array<Inner, 4> = load %p_a_i_a
+    %l_a_i_a:array<Inner, 4> = let %26
+    %28:Inner = load %p_a_i_a_i
+    %l_a_i_a_i:Inner = let %28
+    %30:mat4x2<f32> = load %p_a_i_a_i_m
+    %l_a_i_a_i_m:mat4x2<f32> = let %30
+    %32:vec2<f32> = load %p_a_i_a_i_m_i
+    %l_a_i_a_i_m_i:vec2<f32> = let %32
+    %34:i32 = call %i
+    %35:f32 = load_vector_element %p_a_i_a_i_m_i, %34
+    %l_a_i_a_i_m_i_i:f32 = let %35
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x2_f32/static_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat4x2_f32/static_index_via_ptr.wgsl.expected.ir.msl
index c0e31b9..0795a77 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x2_f32/static_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x2_f32/static_index_via_ptr.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Inner = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Inner = struct @align(8) {
   m:mat4x2<f32> @offset(0)
 }
 
@@ -8,25 +8,37 @@
   a:array<Inner, 4> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %a:ptr<uniform, array<Outer, 4>, read> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %p_a:ptr<uniform, array<Outer, 4>, read> = let %a
-    %p_a_3:ptr<uniform, Outer, read> = access %p_a, 3i
-    %p_a_3_a:ptr<uniform, array<Inner, 4>, read> = access %p_a_3, 0u
-    %p_a_3_a_2:ptr<uniform, Inner, read> = access %p_a_3_a, 2i
-    %p_a_3_a_2_m:ptr<uniform, mat4x2<f32>, read> = access %p_a_3_a_2, 0u
-    %p_a_3_a_2_m_1:ptr<uniform, vec2<f32>, read> = access %p_a_3_a_2_m, 1i
-    %l_a:array<Outer, 4> = load %p_a
-    %l_a_3:Outer = load %p_a_3
-    %l_a_3_a:array<Inner, 4> = load %p_a_3_a
-    %l_a_3_a_2:Inner = load %p_a_3_a_2
-    %l_a_3_a_2_m:mat4x2<f32> = load %p_a_3_a_2_m
-    %l_a_3_a_2_m_1:vec2<f32> = load %p_a_3_a_2_m_1
-    %l_a_3_a_2_m_1_0:f32 = load_vector_element %p_a_3_a_2_m_1, 0i
+    %4:ptr<uniform, Outer, read> = access %p_a, 3i
+    %p_a_3:ptr<uniform, Outer, read> = let %4
+    %6:ptr<uniform, array<Inner, 4>, read> = access %p_a_3, 0u
+    %p_a_3_a:ptr<uniform, array<Inner, 4>, read> = let %6
+    %8:ptr<uniform, Inner, read> = access %p_a_3_a, 2i
+    %p_a_3_a_2:ptr<uniform, Inner, read> = let %8
+    %10:ptr<uniform, mat4x2<f32>, read> = access %p_a_3_a_2, 0u
+    %p_a_3_a_2_m:ptr<uniform, mat4x2<f32>, read> = let %10
+    %12:ptr<uniform, vec2<f32>, read> = access %p_a_3_a_2_m, 1i
+    %p_a_3_a_2_m_1:ptr<uniform, vec2<f32>, read> = let %12
+    %14:array<Outer, 4> = load %p_a
+    %l_a:array<Outer, 4> = let %14
+    %16:Outer = load %p_a_3
+    %l_a_3:Outer = let %16
+    %18:array<Inner, 4> = load %p_a_3_a
+    %l_a_3_a:array<Inner, 4> = let %18
+    %20:Inner = load %p_a_3_a_2
+    %l_a_3_a_2:Inner = let %20
+    %22:mat4x2<f32> = load %p_a_3_a_2_m
+    %l_a_3_a_2_m:mat4x2<f32> = let %22
+    %24:vec2<f32> = load %p_a_3_a_2_m_1
+    %l_a_3_a_2_m_1:vec2<f32> = let %24
+    %26:f32 = load_vector_element %p_a_3_a_2_m_1, 0i
+    %l_a_3_a_2_m_1_0:f32 = let %26
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x2_f32/to_builtin.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat4x2_f32/to_builtin.wgsl.expected.ir.msl
index a80ba28..b1b4be2 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x2_f32/to_builtin.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x2_f32/to_builtin.wgsl.expected.ir.msl
@@ -1,29 +1,32 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat4x2<f32> @offset(8)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %3:ptr<uniform, mat4x2<f32>, read> = access %u, 2i, 1u
     %4:mat4x2<f32> = load %3
-    %t:mat2x4<f32> = transpose %4
-    %6:ptr<uniform, vec2<f32>, read> = access %u, 0i, 1u, 1i
-    %7:vec2<f32> = load %6
-    %8:vec2<f32> = swizzle %7, yx
-    %l:f32 = length %8
-    %10:ptr<uniform, vec2<f32>, read> = access %u, 0i, 1u, 1i
-    %11:vec2<f32> = load %10
-    %12:vec2<f32> = swizzle %11, yx
-    %13:f32 = access %12, 0u
-    %a:f32 = abs %13
+    %5:mat2x4<f32> = transpose %4
+    %t:mat2x4<f32> = let %5
+    %7:ptr<uniform, vec2<f32>, read> = access %u, 0i, 1u, 1i
+    %8:vec2<f32> = load %7
+    %9:vec2<f32> = swizzle %8, yx
+    %10:f32 = length %9
+    %l:f32 = let %10
+    %12:ptr<uniform, vec2<f32>, read> = access %u, 0i, 1u, 1i
+    %13:vec2<f32> = load %12
+    %14:vec2<f32> = swizzle %13, yx
+    %15:f32 = access %14, 0u
+    %16:f32 = abs %15
+    %a:f32 = let %16
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x2_f32/to_fn.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat4x2_f32/to_fn.wgsl.expected.ir.msl
index 8173c6a..1a3bfa4 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x2_f32/to_fn.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x2_f32/to_fn.wgsl.expected.ir.msl
@@ -1,42 +1,42 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat4x2<f32> @offset(8)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
 }
 
-%a = func(%a_1:array<S, 4>):void -> %b2 {  # %a_1: 'a'
-  %b2 = block {
+%a = func(%a_1:array<S, 4>):void {  # %a_1: 'a'
+  $B2: {
     ret
   }
 }
-%b = func(%s:S):void -> %b3 {
-  %b3 = block {
+%b = func(%s:S):void {
+  $B3: {
     ret
   }
 }
-%c = func(%m:mat4x2<f32>):void -> %b4 {
-  %b4 = block {
+%c = func(%m:mat4x2<f32>):void {
+  $B4: {
     ret
   }
 }
-%d = func(%v:vec2<f32>):void -> %b5 {
-  %b5 = block {
+%d = func(%v:vec2<f32>):void {
+  $B5: {
     ret
   }
 }
-%e = func(%f:f32):void -> %b6 {
-  %b6 = block {
+%e = func(%f:f32):void {
+  $B6: {
     ret
   }
 }
-%f_1 = @compute @workgroup_size(1, 1, 1) func():void -> %b7 {  # %f_1: 'f'
-  %b7 = block {
+%f_1 = @compute @workgroup_size(1, 1, 1) func():void {  # %f_1: 'f'
+  $B7: {
     %13:array<S, 4> = load %u
     %14:void = call %a, %13
     %15:ptr<uniform, S, read> = access %u, 2i
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x2_f32/to_private.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat4x2_f32/to_private.wgsl.expected.ir.msl
index 6293405..cc446b3 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x2_f32/to_private.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x2_f32/to_private.wgsl.expected.ir.msl
@@ -1,18 +1,18 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat4x2<f32> @offset(8)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
   %p:ptr<private, array<S, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:array<S, 4> = load %u
     store %p, %4
     %5:ptr<private, S, read_write> = access %p, 1i
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x2_f32/to_storage.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat4x2_f32/to_storage.wgsl.expected.ir.msl
index 7931490..20b06f5 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x2_f32/to_storage.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x2_f32/to_storage.wgsl.expected.ir.msl
@@ -1,33 +1,73 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat4x2<f32> @offset(8)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
   %s:ptr<storage, array<S, 4>, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:array<S, 4> = load %u
-    store %s, %4
-    %5:ptr<storage, S, read_write> = access %s, 1i
-    %6:ptr<uniform, S, read> = access %u, 2i
-    %7:S = load %6
-    store %5, %7
-    %8:ptr<storage, mat4x2<f32>, read_write> = access %s, 3i, 1u
-    %9:ptr<uniform, mat4x2<f32>, read> = access %u, 2i, 1u
-    %10:mat4x2<f32> = load %9
-    store %8, %10
-    %11:ptr<storage, vec2<f32>, read_write> = access %s, 1i, 1u, 0i
-    %12:ptr<uniform, vec2<f32>, read> = access %u, 0i, 1u, 1i
-    %13:vec2<f32> = load %12
-    %14:vec2<f32> = swizzle %13, yx
-    store %11, %14
+    %5:void = call %tint_store_and_preserve_padding, %s, %4
+    %7:ptr<storage, S, read_write> = access %s, 1i
+    %8:ptr<uniform, S, read> = access %u, 2i
+    %9:S = load %8
+    %10:void = call %tint_store_and_preserve_padding_1, %7, %9
+    %12:ptr<storage, mat4x2<f32>, read_write> = access %s, 3i, 1u
+    %13:ptr<uniform, mat4x2<f32>, read> = access %u, 2i, 1u
+    %14:mat4x2<f32> = load %13
+    store %12, %14
+    %15:ptr<storage, vec2<f32>, read_write> = access %s, 1i, 1u, 0i
+    %16:ptr<uniform, vec2<f32>, read> = access %u, 0i, 1u, 1i
+    %17:vec2<f32> = load %16
+    %18:vec2<f32> = swizzle %17, yx
+    store %15, %18
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, array<S, 4>, read_write>, %value_param:array<S, 4>):void {
+  $B3: {
+    loop [i: $B4, b: $B5, c: $B6] {  # loop_1
+      $B4: {  # initializer
+        next_iteration 0u  # -> $B5
+      }
+      $B5 (%idx:u32): {  # body
+        %22:bool = gte %idx, 4u
+        if %22 [t: $B7] {  # if_1
+          $B7: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %23:ptr<storage, S, read_write> = access %target, %idx
+        %24:S = access %value_param, %idx
+        %25:void = call %tint_store_and_preserve_padding_1, %23, %24
+        continue  # -> $B6
+      }
+      $B6: {  # continuing
+        %26:u32 = add %idx, 1u
+        next_iteration %26  # -> $B5
+      }
+    }
+    ret
+  }
+}
+%tint_store_and_preserve_padding_1 = func(%target_1:ptr<storage, S, read_write>, %value_param_1:S):void {  # %tint_store_and_preserve_padding_1: 'tint_store_and_preserve_padding', %target_1: 'target', %value_param_1: 'value_param'
+  $B8: {
+    %29:ptr<storage, i32, read_write> = access %target_1, 0u
+    %30:i32 = access %value_param_1, 0u
+    store %29, %30
+    %31:ptr<storage, mat4x2<f32>, read_write> = access %target_1, 1u
+    %32:mat4x2<f32> = access %value_param_1, 1u
+    store %31, %32
+    %33:ptr<storage, i32, read_write> = access %target_1, 2u
+    %34:i32 = access %value_param_1, 2u
+    store %33, %34
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x2_f32/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat4x2_f32/to_workgroup.wgsl.expected.ir.msl
index 162eeb9..3791b4a 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x2_f32/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x2_f32/to_workgroup.wgsl.expected.ir.msl
@@ -1,33 +1,54 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat4x2<f32> @offset(8)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
   %w:ptr<workgroup, array<S, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:array<S, 4> = load %u
-    store %w, %4
-    %5:ptr<workgroup, S, read_write> = access %w, 1i
-    %6:ptr<uniform, S, read> = access %u, 2i
-    %7:S = load %6
-    store %5, %7
-    %8:ptr<workgroup, mat4x2<f32>, read_write> = access %w, 3i, 1u
-    %9:ptr<uniform, mat4x2<f32>, read> = access %u, 2i, 1u
-    %10:mat4x2<f32> = load %9
-    store %8, %10
-    %11:ptr<workgroup, vec2<f32>, read_write> = access %w, 1i, 1u, 0i
-    %12:ptr<uniform, vec2<f32>, read> = access %u, 0i, 1u, 1i
-    %13:vec2<f32> = load %12
-    %14:vec2<f32> = swizzle %13, yx
-    store %11, %14
+%f = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B2: {
+    loop [i: $B3, b: $B4, c: $B5] {  # loop_1
+      $B3: {  # initializer
+        next_iteration %tint_local_index  # -> $B4
+      }
+      $B4 (%idx:u32): {  # body
+        %6:bool = gte %idx, 4u
+        if %6 [t: $B6] {  # if_1
+          $B6: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %7:ptr<workgroup, S, read_write> = access %w, %idx
+        store %7, S(0i, mat4x2<f32>(vec2<f32>(0.0f)), 0i)
+        continue  # -> $B5
+      }
+      $B5: {  # continuing
+        %8:u32 = add %idx, 1u
+        next_iteration %8  # -> $B4
+      }
+    }
+    %9:void = msl.threadgroup_barrier 4u
+    %10:array<S, 4> = load %u
+    store %w, %10
+    %11:ptr<workgroup, S, read_write> = access %w, 1i
+    %12:ptr<uniform, S, read> = access %u, 2i
+    %13:S = load %12
+    store %11, %13
+    %14:ptr<workgroup, mat4x2<f32>, read_write> = access %w, 3i, 1u
+    %15:ptr<uniform, mat4x2<f32>, read> = access %u, 2i, 1u
+    %16:mat4x2<f32> = load %15
+    store %14, %16
+    %17:ptr<workgroup, vec2<f32>, read_write> = access %w, 1i, 1u, 0i
+    %18:ptr<uniform, vec2<f32>, read> = access %u, 0i, 1u, 1i
+    %19:vec2<f32> = load %18
+    %20:vec2<f32> = swizzle %19, yx
+    store %17, %20
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x3_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat4x3_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
index 12cd26c..d9f9408 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x3_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x3_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Inner = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Inner = struct @align(8) {
   m:mat4x3<f16> @offset(0)
 }
 
@@ -8,13 +8,13 @@
   a:array<Inner, 4> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %a:ptr<uniform, array<Outer, 4>, read> = var @binding_point(0, 0)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
+%i = func():i32 {
+  $B2: {
     %4:i32 = load %counter
     %5:i32 = add %4, 1i
     store %counter, %5
@@ -22,25 +22,37 @@
     ret %6
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_a:ptr<uniform, array<Outer, 4>, read> = let %a
     %9:i32 = call %i
-    %p_a_i:ptr<uniform, Outer, read> = access %p_a, %9
-    %p_a_i_a:ptr<uniform, array<Inner, 4>, read> = access %p_a_i, 0u
-    %12:i32 = call %i
-    %p_a_i_a_i:ptr<uniform, Inner, read> = access %p_a_i_a, %12
-    %p_a_i_a_i_m:ptr<uniform, mat4x3<f16>, read> = access %p_a_i_a_i, 0u
-    %15:i32 = call %i
-    %p_a_i_a_i_m_i:ptr<uniform, vec3<f16>, read> = access %p_a_i_a_i_m, %15
-    %l_a:array<Outer, 4> = load %p_a
-    %l_a_i:Outer = load %p_a_i
-    %l_a_i_a:array<Inner, 4> = load %p_a_i_a
-    %l_a_i_a_i:Inner = load %p_a_i_a_i
-    %l_a_i_a_i_m:mat4x3<f16> = load %p_a_i_a_i_m
-    %l_a_i_a_i_m_i:vec3<f16> = load %p_a_i_a_i_m_i
-    %23:i32 = call %i
-    %l_a_i_a_i_m_i_i:f16 = load_vector_element %p_a_i_a_i_m_i, %23
+    %10:ptr<uniform, Outer, read> = access %p_a, %9
+    %p_a_i:ptr<uniform, Outer, read> = let %10
+    %12:ptr<uniform, array<Inner, 4>, read> = access %p_a_i, 0u
+    %p_a_i_a:ptr<uniform, array<Inner, 4>, read> = let %12
+    %14:i32 = call %i
+    %15:ptr<uniform, Inner, read> = access %p_a_i_a, %14
+    %p_a_i_a_i:ptr<uniform, Inner, read> = let %15
+    %17:ptr<uniform, mat4x3<f16>, read> = access %p_a_i_a_i, 0u
+    %p_a_i_a_i_m:ptr<uniform, mat4x3<f16>, read> = let %17
+    %19:i32 = call %i
+    %20:ptr<uniform, vec3<f16>, read> = access %p_a_i_a_i_m, %19
+    %p_a_i_a_i_m_i:ptr<uniform, vec3<f16>, read> = let %20
+    %22:array<Outer, 4> = load %p_a
+    %l_a:array<Outer, 4> = let %22
+    %24:Outer = load %p_a_i
+    %l_a_i:Outer = let %24
+    %26:array<Inner, 4> = load %p_a_i_a
+    %l_a_i_a:array<Inner, 4> = let %26
+    %28:Inner = load %p_a_i_a_i
+    %l_a_i_a_i:Inner = let %28
+    %30:mat4x3<f16> = load %p_a_i_a_i_m
+    %l_a_i_a_i_m:mat4x3<f16> = let %30
+    %32:vec3<f16> = load %p_a_i_a_i_m_i
+    %l_a_i_a_i_m_i:vec3<f16> = let %32
+    %34:i32 = call %i
+    %35:f16 = load_vector_element %p_a_i_a_i_m_i, %34
+    %l_a_i_a_i_m_i_i:f16 = let %35
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x3_f16/static_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat4x3_f16/static_index_via_ptr.wgsl.expected.ir.msl
index c7f2f11..016a529 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x3_f16/static_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x3_f16/static_index_via_ptr.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Inner = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Inner = struct @align(8) {
   m:mat4x3<f16> @offset(0)
 }
 
@@ -8,25 +8,37 @@
   a:array<Inner, 4> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %a:ptr<uniform, array<Outer, 4>, read> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %p_a:ptr<uniform, array<Outer, 4>, read> = let %a
-    %p_a_3:ptr<uniform, Outer, read> = access %p_a, 3i
-    %p_a_3_a:ptr<uniform, array<Inner, 4>, read> = access %p_a_3, 0u
-    %p_a_3_a_2:ptr<uniform, Inner, read> = access %p_a_3_a, 2i
-    %p_a_3_a_2_m:ptr<uniform, mat4x3<f16>, read> = access %p_a_3_a_2, 0u
-    %p_a_3_a_2_m_1:ptr<uniform, vec3<f16>, read> = access %p_a_3_a_2_m, 1i
-    %l_a:array<Outer, 4> = load %p_a
-    %l_a_3:Outer = load %p_a_3
-    %l_a_3_a:array<Inner, 4> = load %p_a_3_a
-    %l_a_3_a_2:Inner = load %p_a_3_a_2
-    %l_a_3_a_2_m:mat4x3<f16> = load %p_a_3_a_2_m
-    %l_a_3_a_2_m_1:vec3<f16> = load %p_a_3_a_2_m_1
-    %l_a_3_a_2_m_1_0:f16 = load_vector_element %p_a_3_a_2_m_1, 0i
+    %4:ptr<uniform, Outer, read> = access %p_a, 3i
+    %p_a_3:ptr<uniform, Outer, read> = let %4
+    %6:ptr<uniform, array<Inner, 4>, read> = access %p_a_3, 0u
+    %p_a_3_a:ptr<uniform, array<Inner, 4>, read> = let %6
+    %8:ptr<uniform, Inner, read> = access %p_a_3_a, 2i
+    %p_a_3_a_2:ptr<uniform, Inner, read> = let %8
+    %10:ptr<uniform, mat4x3<f16>, read> = access %p_a_3_a_2, 0u
+    %p_a_3_a_2_m:ptr<uniform, mat4x3<f16>, read> = let %10
+    %12:ptr<uniform, vec3<f16>, read> = access %p_a_3_a_2_m, 1i
+    %p_a_3_a_2_m_1:ptr<uniform, vec3<f16>, read> = let %12
+    %14:array<Outer, 4> = load %p_a
+    %l_a:array<Outer, 4> = let %14
+    %16:Outer = load %p_a_3
+    %l_a_3:Outer = let %16
+    %18:array<Inner, 4> = load %p_a_3_a
+    %l_a_3_a:array<Inner, 4> = let %18
+    %20:Inner = load %p_a_3_a_2
+    %l_a_3_a_2:Inner = let %20
+    %22:mat4x3<f16> = load %p_a_3_a_2_m
+    %l_a_3_a_2_m:mat4x3<f16> = let %22
+    %24:vec3<f16> = load %p_a_3_a_2_m_1
+    %l_a_3_a_2_m_1:vec3<f16> = let %24
+    %26:f16 = load_vector_element %p_a_3_a_2_m_1, 0i
+    %l_a_3_a_2_m_1_0:f16 = let %26
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x3_f16/to_builtin.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat4x3_f16/to_builtin.wgsl.expected.ir.msl
index 1bd5a11..5cce2ca 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x3_f16/to_builtin.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x3_f16/to_builtin.wgsl.expected.ir.msl
@@ -1,29 +1,32 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat4x3<f16> @offset(8)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %3:ptr<uniform, mat4x3<f16>, read> = access %u, 2i, 1u
     %4:mat4x3<f16> = load %3
-    %t:mat3x4<f16> = transpose %4
-    %6:ptr<uniform, vec3<f16>, read> = access %u, 0i, 1u, 1i
-    %7:vec3<f16> = load %6
-    %8:vec3<f16> = swizzle %7, zxy
-    %l:f16 = length %8
-    %10:ptr<uniform, vec3<f16>, read> = access %u, 0i, 1u, 1i
-    %11:vec3<f16> = load %10
-    %12:vec3<f16> = swizzle %11, zxy
-    %13:f16 = access %12, 0u
-    %a:f16 = abs %13
+    %5:mat3x4<f16> = transpose %4
+    %t:mat3x4<f16> = let %5
+    %7:ptr<uniform, vec3<f16>, read> = access %u, 0i, 1u, 1i
+    %8:vec3<f16> = load %7
+    %9:vec3<f16> = swizzle %8, zxy
+    %10:f16 = length %9
+    %l:f16 = let %10
+    %12:ptr<uniform, vec3<f16>, read> = access %u, 0i, 1u, 1i
+    %13:vec3<f16> = load %12
+    %14:vec3<f16> = swizzle %13, zxy
+    %15:f16 = access %14, 0u
+    %16:f16 = abs %15
+    %a:f16 = let %16
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x3_f16/to_fn.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat4x3_f16/to_fn.wgsl.expected.ir.msl
index 9408077..fe69066 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x3_f16/to_fn.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x3_f16/to_fn.wgsl.expected.ir.msl
@@ -1,42 +1,42 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat4x3<f16> @offset(8)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
 }
 
-%a = func(%a_1:array<S, 4>):void -> %b2 {  # %a_1: 'a'
-  %b2 = block {
+%a = func(%a_1:array<S, 4>):void {  # %a_1: 'a'
+  $B2: {
     ret
   }
 }
-%b = func(%s:S):void -> %b3 {
-  %b3 = block {
+%b = func(%s:S):void {
+  $B3: {
     ret
   }
 }
-%c = func(%m:mat4x3<f16>):void -> %b4 {
-  %b4 = block {
+%c = func(%m:mat4x3<f16>):void {
+  $B4: {
     ret
   }
 }
-%d = func(%v:vec3<f16>):void -> %b5 {
-  %b5 = block {
+%d = func(%v:vec3<f16>):void {
+  $B5: {
     ret
   }
 }
-%e = func(%f:f16):void -> %b6 {
-  %b6 = block {
+%e = func(%f:f16):void {
+  $B6: {
     ret
   }
 }
-%f_1 = @compute @workgroup_size(1, 1, 1) func():void -> %b7 {  # %f_1: 'f'
-  %b7 = block {
+%f_1 = @compute @workgroup_size(1, 1, 1) func():void {  # %f_1: 'f'
+  $B7: {
     %13:array<S, 4> = load %u
     %14:void = call %a, %13
     %15:ptr<uniform, S, read> = access %u, 2i
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x3_f16/to_private.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat4x3_f16/to_private.wgsl.expected.ir.msl
index e2852af..c6791799 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x3_f16/to_private.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x3_f16/to_private.wgsl.expected.ir.msl
@@ -1,18 +1,18 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat4x3<f16> @offset(8)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
   %p:ptr<private, array<S, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:array<S, 4> = load %u
     store %p, %4
     %5:ptr<private, S, read_write> = access %p, 1i
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x3_f16/to_storage.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat4x3_f16/to_storage.wgsl.expected.ir.msl
index 9e9472f..6912e06 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x3_f16/to_storage.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x3_f16/to_storage.wgsl.expected.ir.msl
@@ -1,33 +1,90 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat4x3<f16> @offset(8)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
   %s:ptr<storage, array<S, 4>, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:array<S, 4> = load %u
-    store %s, %4
-    %5:ptr<storage, S, read_write> = access %s, 1i
-    %6:ptr<uniform, S, read> = access %u, 2i
-    %7:S = load %6
-    store %5, %7
-    %8:ptr<storage, mat4x3<f16>, read_write> = access %s, 3i, 1u
-    %9:ptr<uniform, mat4x3<f16>, read> = access %u, 2i, 1u
-    %10:mat4x3<f16> = load %9
-    store %8, %10
-    %11:ptr<storage, vec3<f16>, read_write> = access %s, 1i, 1u, 0i
-    %12:ptr<uniform, vec3<f16>, read> = access %u, 0i, 1u, 1i
-    %13:vec3<f16> = load %12
-    %14:vec3<f16> = swizzle %13, zxy
-    store %11, %14
+    %5:void = call %tint_store_and_preserve_padding, %s, %4
+    %7:ptr<storage, S, read_write> = access %s, 1i
+    %8:ptr<uniform, S, read> = access %u, 2i
+    %9:S = load %8
+    %10:void = call %tint_store_and_preserve_padding_1, %7, %9
+    %12:ptr<storage, mat4x3<f16>, read_write> = access %s, 3i, 1u
+    %13:ptr<uniform, mat4x3<f16>, read> = access %u, 2i, 1u
+    %14:mat4x3<f16> = load %13
+    %15:void = call %tint_store_and_preserve_padding_2, %12, %14
+    %17:ptr<storage, vec3<f16>, read_write> = access %s, 1i, 1u, 0i
+    %18:ptr<uniform, vec3<f16>, read> = access %u, 0i, 1u, 1i
+    %19:vec3<f16> = load %18
+    %20:vec3<f16> = swizzle %19, zxy
+    store %17, %20
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, array<S, 4>, read_write>, %value_param:array<S, 4>):void {
+  $B3: {
+    loop [i: $B4, b: $B5, c: $B6] {  # loop_1
+      $B4: {  # initializer
+        next_iteration 0u  # -> $B5
+      }
+      $B5 (%idx:u32): {  # body
+        %24:bool = gte %idx, 4u
+        if %24 [t: $B7] {  # if_1
+          $B7: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %25:ptr<storage, S, read_write> = access %target, %idx
+        %26:S = access %value_param, %idx
+        %27:void = call %tint_store_and_preserve_padding_1, %25, %26
+        continue  # -> $B6
+      }
+      $B6: {  # continuing
+        %28:u32 = add %idx, 1u
+        next_iteration %28  # -> $B5
+      }
+    }
+    ret
+  }
+}
+%tint_store_and_preserve_padding_1 = func(%target_1:ptr<storage, S, read_write>, %value_param_1:S):void {  # %tint_store_and_preserve_padding_1: 'tint_store_and_preserve_padding', %target_1: 'target', %value_param_1: 'value_param'
+  $B8: {
+    %31:ptr<storage, i32, read_write> = access %target_1, 0u
+    %32:i32 = access %value_param_1, 0u
+    store %31, %32
+    %33:ptr<storage, mat4x3<f16>, read_write> = access %target_1, 1u
+    %34:mat4x3<f16> = access %value_param_1, 1u
+    %35:void = call %tint_store_and_preserve_padding_2, %33, %34
+    %36:ptr<storage, i32, read_write> = access %target_1, 2u
+    %37:i32 = access %value_param_1, 2u
+    store %36, %37
+    ret
+  }
+}
+%tint_store_and_preserve_padding_2 = func(%target_2:ptr<storage, mat4x3<f16>, read_write>, %value_param_2:mat4x3<f16>):void {  # %tint_store_and_preserve_padding_2: 'tint_store_and_preserve_padding', %target_2: 'target', %value_param_2: 'value_param'
+  $B9: {
+    %40:ptr<storage, vec3<f16>, read_write> = access %target_2, 0u
+    %41:vec3<f16> = access %value_param_2, 0u
+    store %40, %41
+    %42:ptr<storage, vec3<f16>, read_write> = access %target_2, 1u
+    %43:vec3<f16> = access %value_param_2, 1u
+    store %42, %43
+    %44:ptr<storage, vec3<f16>, read_write> = access %target_2, 2u
+    %45:vec3<f16> = access %value_param_2, 2u
+    store %44, %45
+    %46:ptr<storage, vec3<f16>, read_write> = access %target_2, 3u
+    %47:vec3<f16> = access %value_param_2, 3u
+    store %46, %47
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x3_f16/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat4x3_f16/to_workgroup.wgsl.expected.ir.msl
index 3f6e08e..43e3ab0 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x3_f16/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x3_f16/to_workgroup.wgsl.expected.ir.msl
@@ -1,33 +1,54 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat4x3<f16> @offset(8)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
   %w:ptr<workgroup, array<S, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:array<S, 4> = load %u
-    store %w, %4
-    %5:ptr<workgroup, S, read_write> = access %w, 1i
-    %6:ptr<uniform, S, read> = access %u, 2i
-    %7:S = load %6
-    store %5, %7
-    %8:ptr<workgroup, mat4x3<f16>, read_write> = access %w, 3i, 1u
-    %9:ptr<uniform, mat4x3<f16>, read> = access %u, 2i, 1u
-    %10:mat4x3<f16> = load %9
-    store %8, %10
-    %11:ptr<workgroup, vec3<f16>, read_write> = access %w, 1i, 1u, 0i
-    %12:ptr<uniform, vec3<f16>, read> = access %u, 0i, 1u, 1i
-    %13:vec3<f16> = load %12
-    %14:vec3<f16> = swizzle %13, zxy
-    store %11, %14
+%f = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B2: {
+    loop [i: $B3, b: $B4, c: $B5] {  # loop_1
+      $B3: {  # initializer
+        next_iteration %tint_local_index  # -> $B4
+      }
+      $B4 (%idx:u32): {  # body
+        %6:bool = gte %idx, 4u
+        if %6 [t: $B6] {  # if_1
+          $B6: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %7:ptr<workgroup, S, read_write> = access %w, %idx
+        store %7, S(0i, mat4x3<f16>(vec3<f16>(0.0h)), 0i)
+        continue  # -> $B5
+      }
+      $B5: {  # continuing
+        %8:u32 = add %idx, 1u
+        next_iteration %8  # -> $B4
+      }
+    }
+    %9:void = msl.threadgroup_barrier 4u
+    %10:array<S, 4> = load %u
+    store %w, %10
+    %11:ptr<workgroup, S, read_write> = access %w, 1i
+    %12:ptr<uniform, S, read> = access %u, 2i
+    %13:S = load %12
+    store %11, %13
+    %14:ptr<workgroup, mat4x3<f16>, read_write> = access %w, 3i, 1u
+    %15:ptr<uniform, mat4x3<f16>, read> = access %u, 2i, 1u
+    %16:mat4x3<f16> = load %15
+    store %14, %16
+    %17:ptr<workgroup, vec3<f16>, read_write> = access %w, 1i, 1u, 0i
+    %18:ptr<uniform, vec3<f16>, read> = access %u, 0i, 1u, 1i
+    %19:vec3<f16> = load %18
+    %20:vec3<f16> = swizzle %19, zxy
+    store %17, %20
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x3_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat4x3_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
index b8f58ea..2ecbdef 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x3_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x3_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Inner = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Inner = struct @align(16) {
   m:mat4x3<f32> @offset(0)
 }
 
@@ -8,13 +8,13 @@
   a:array<Inner, 4> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %a:ptr<uniform, array<Outer, 4>, read> = var @binding_point(0, 0)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
+%i = func():i32 {
+  $B2: {
     %4:i32 = load %counter
     %5:i32 = add %4, 1i
     store %counter, %5
@@ -22,25 +22,37 @@
     ret %6
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_a:ptr<uniform, array<Outer, 4>, read> = let %a
     %9:i32 = call %i
-    %p_a_i:ptr<uniform, Outer, read> = access %p_a, %9
-    %p_a_i_a:ptr<uniform, array<Inner, 4>, read> = access %p_a_i, 0u
-    %12:i32 = call %i
-    %p_a_i_a_i:ptr<uniform, Inner, read> = access %p_a_i_a, %12
-    %p_a_i_a_i_m:ptr<uniform, mat4x3<f32>, read> = access %p_a_i_a_i, 0u
-    %15:i32 = call %i
-    %p_a_i_a_i_m_i:ptr<uniform, vec3<f32>, read> = access %p_a_i_a_i_m, %15
-    %l_a:array<Outer, 4> = load %p_a
-    %l_a_i:Outer = load %p_a_i
-    %l_a_i_a:array<Inner, 4> = load %p_a_i_a
-    %l_a_i_a_i:Inner = load %p_a_i_a_i
-    %l_a_i_a_i_m:mat4x3<f32> = load %p_a_i_a_i_m
-    %l_a_i_a_i_m_i:vec3<f32> = load %p_a_i_a_i_m_i
-    %23:i32 = call %i
-    %l_a_i_a_i_m_i_i:f32 = load_vector_element %p_a_i_a_i_m_i, %23
+    %10:ptr<uniform, Outer, read> = access %p_a, %9
+    %p_a_i:ptr<uniform, Outer, read> = let %10
+    %12:ptr<uniform, array<Inner, 4>, read> = access %p_a_i, 0u
+    %p_a_i_a:ptr<uniform, array<Inner, 4>, read> = let %12
+    %14:i32 = call %i
+    %15:ptr<uniform, Inner, read> = access %p_a_i_a, %14
+    %p_a_i_a_i:ptr<uniform, Inner, read> = let %15
+    %17:ptr<uniform, mat4x3<f32>, read> = access %p_a_i_a_i, 0u
+    %p_a_i_a_i_m:ptr<uniform, mat4x3<f32>, read> = let %17
+    %19:i32 = call %i
+    %20:ptr<uniform, vec3<f32>, read> = access %p_a_i_a_i_m, %19
+    %p_a_i_a_i_m_i:ptr<uniform, vec3<f32>, read> = let %20
+    %22:array<Outer, 4> = load %p_a
+    %l_a:array<Outer, 4> = let %22
+    %24:Outer = load %p_a_i
+    %l_a_i:Outer = let %24
+    %26:array<Inner, 4> = load %p_a_i_a
+    %l_a_i_a:array<Inner, 4> = let %26
+    %28:Inner = load %p_a_i_a_i
+    %l_a_i_a_i:Inner = let %28
+    %30:mat4x3<f32> = load %p_a_i_a_i_m
+    %l_a_i_a_i_m:mat4x3<f32> = let %30
+    %32:vec3<f32> = load %p_a_i_a_i_m_i
+    %l_a_i_a_i_m_i:vec3<f32> = let %32
+    %34:i32 = call %i
+    %35:f32 = load_vector_element %p_a_i_a_i_m_i, %34
+    %l_a_i_a_i_m_i_i:f32 = let %35
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x3_f32/static_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat4x3_f32/static_index_via_ptr.wgsl.expected.ir.msl
index 0e73a4d..4276831 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x3_f32/static_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x3_f32/static_index_via_ptr.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Inner = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Inner = struct @align(16) {
   m:mat4x3<f32> @offset(0)
 }
 
@@ -8,25 +8,37 @@
   a:array<Inner, 4> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %a:ptr<uniform, array<Outer, 4>, read> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %p_a:ptr<uniform, array<Outer, 4>, read> = let %a
-    %p_a_3:ptr<uniform, Outer, read> = access %p_a, 3i
-    %p_a_3_a:ptr<uniform, array<Inner, 4>, read> = access %p_a_3, 0u
-    %p_a_3_a_2:ptr<uniform, Inner, read> = access %p_a_3_a, 2i
-    %p_a_3_a_2_m:ptr<uniform, mat4x3<f32>, read> = access %p_a_3_a_2, 0u
-    %p_a_3_a_2_m_1:ptr<uniform, vec3<f32>, read> = access %p_a_3_a_2_m, 1i
-    %l_a:array<Outer, 4> = load %p_a
-    %l_a_3:Outer = load %p_a_3
-    %l_a_3_a:array<Inner, 4> = load %p_a_3_a
-    %l_a_3_a_2:Inner = load %p_a_3_a_2
-    %l_a_3_a_2_m:mat4x3<f32> = load %p_a_3_a_2_m
-    %l_a_3_a_2_m_1:vec3<f32> = load %p_a_3_a_2_m_1
-    %l_a_3_a_2_m_1_0:f32 = load_vector_element %p_a_3_a_2_m_1, 0i
+    %4:ptr<uniform, Outer, read> = access %p_a, 3i
+    %p_a_3:ptr<uniform, Outer, read> = let %4
+    %6:ptr<uniform, array<Inner, 4>, read> = access %p_a_3, 0u
+    %p_a_3_a:ptr<uniform, array<Inner, 4>, read> = let %6
+    %8:ptr<uniform, Inner, read> = access %p_a_3_a, 2i
+    %p_a_3_a_2:ptr<uniform, Inner, read> = let %8
+    %10:ptr<uniform, mat4x3<f32>, read> = access %p_a_3_a_2, 0u
+    %p_a_3_a_2_m:ptr<uniform, mat4x3<f32>, read> = let %10
+    %12:ptr<uniform, vec3<f32>, read> = access %p_a_3_a_2_m, 1i
+    %p_a_3_a_2_m_1:ptr<uniform, vec3<f32>, read> = let %12
+    %14:array<Outer, 4> = load %p_a
+    %l_a:array<Outer, 4> = let %14
+    %16:Outer = load %p_a_3
+    %l_a_3:Outer = let %16
+    %18:array<Inner, 4> = load %p_a_3_a
+    %l_a_3_a:array<Inner, 4> = let %18
+    %20:Inner = load %p_a_3_a_2
+    %l_a_3_a_2:Inner = let %20
+    %22:mat4x3<f32> = load %p_a_3_a_2_m
+    %l_a_3_a_2_m:mat4x3<f32> = let %22
+    %24:vec3<f32> = load %p_a_3_a_2_m_1
+    %l_a_3_a_2_m_1:vec3<f32> = let %24
+    %26:f32 = load_vector_element %p_a_3_a_2_m_1, 0i
+    %l_a_3_a_2_m_1_0:f32 = let %26
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x3_f32/to_builtin.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat4x3_f32/to_builtin.wgsl.expected.ir.msl
index 737274f..43a93ce 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x3_f32/to_builtin.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x3_f32/to_builtin.wgsl.expected.ir.msl
@@ -1,29 +1,32 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat4x3<f32> @offset(16)
   after:i32 @offset(128)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %3:ptr<uniform, mat4x3<f32>, read> = access %u, 2i, 1u
     %4:mat4x3<f32> = load %3
-    %t:mat3x4<f32> = transpose %4
-    %6:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1u, 1i
-    %7:vec3<f32> = load %6
-    %8:vec3<f32> = swizzle %7, zxy
-    %l:f32 = length %8
-    %10:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1u, 1i
-    %11:vec3<f32> = load %10
-    %12:vec3<f32> = swizzle %11, zxy
-    %13:f32 = access %12, 0u
-    %a:f32 = abs %13
+    %5:mat3x4<f32> = transpose %4
+    %t:mat3x4<f32> = let %5
+    %7:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1u, 1i
+    %8:vec3<f32> = load %7
+    %9:vec3<f32> = swizzle %8, zxy
+    %10:f32 = length %9
+    %l:f32 = let %10
+    %12:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1u, 1i
+    %13:vec3<f32> = load %12
+    %14:vec3<f32> = swizzle %13, zxy
+    %15:f32 = access %14, 0u
+    %16:f32 = abs %15
+    %a:f32 = let %16
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x3_f32/to_fn.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat4x3_f32/to_fn.wgsl.expected.ir.msl
index b253302..eca171c 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x3_f32/to_fn.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x3_f32/to_fn.wgsl.expected.ir.msl
@@ -1,42 +1,42 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat4x3<f32> @offset(16)
   after:i32 @offset(128)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
 }
 
-%a = func(%a_1:array<S, 4>):void -> %b2 {  # %a_1: 'a'
-  %b2 = block {
+%a = func(%a_1:array<S, 4>):void {  # %a_1: 'a'
+  $B2: {
     ret
   }
 }
-%b = func(%s:S):void -> %b3 {
-  %b3 = block {
+%b = func(%s:S):void {
+  $B3: {
     ret
   }
 }
-%c = func(%m:mat4x3<f32>):void -> %b4 {
-  %b4 = block {
+%c = func(%m:mat4x3<f32>):void {
+  $B4: {
     ret
   }
 }
-%d = func(%v:vec3<f32>):void -> %b5 {
-  %b5 = block {
+%d = func(%v:vec3<f32>):void {
+  $B5: {
     ret
   }
 }
-%e = func(%f:f32):void -> %b6 {
-  %b6 = block {
+%e = func(%f:f32):void {
+  $B6: {
     ret
   }
 }
-%f_1 = @compute @workgroup_size(1, 1, 1) func():void -> %b7 {  # %f_1: 'f'
-  %b7 = block {
+%f_1 = @compute @workgroup_size(1, 1, 1) func():void {  # %f_1: 'f'
+  $B7: {
     %13:array<S, 4> = load %u
     %14:void = call %a, %13
     %15:ptr<uniform, S, read> = access %u, 2i
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x3_f32/to_private.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat4x3_f32/to_private.wgsl.expected.ir.msl
index 732c6e8..ab68b96 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x3_f32/to_private.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x3_f32/to_private.wgsl.expected.ir.msl
@@ -1,18 +1,18 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat4x3<f32> @offset(16)
   after:i32 @offset(128)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
   %p:ptr<private, array<S, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:array<S, 4> = load %u
     store %p, %4
     %5:ptr<private, S, read_write> = access %p, 1i
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x3_f32/to_storage.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat4x3_f32/to_storage.wgsl.expected.ir.msl
index ed7180e..1831094 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x3_f32/to_storage.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x3_f32/to_storage.wgsl.expected.ir.msl
@@ -1,33 +1,90 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat4x3<f32> @offset(16)
   after:i32 @offset(128)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
   %s:ptr<storage, array<S, 4>, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:array<S, 4> = load %u
-    store %s, %4
-    %5:ptr<storage, S, read_write> = access %s, 1i
-    %6:ptr<uniform, S, read> = access %u, 2i
-    %7:S = load %6
-    store %5, %7
-    %8:ptr<storage, mat4x3<f32>, read_write> = access %s, 3i, 1u
-    %9:ptr<uniform, mat4x3<f32>, read> = access %u, 2i, 1u
-    %10:mat4x3<f32> = load %9
-    store %8, %10
-    %11:ptr<storage, vec3<f32>, read_write> = access %s, 1i, 1u, 0i
-    %12:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1u, 1i
-    %13:vec3<f32> = load %12
-    %14:vec3<f32> = swizzle %13, zxy
-    store %11, %14
+    %5:void = call %tint_store_and_preserve_padding, %s, %4
+    %7:ptr<storage, S, read_write> = access %s, 1i
+    %8:ptr<uniform, S, read> = access %u, 2i
+    %9:S = load %8
+    %10:void = call %tint_store_and_preserve_padding_1, %7, %9
+    %12:ptr<storage, mat4x3<f32>, read_write> = access %s, 3i, 1u
+    %13:ptr<uniform, mat4x3<f32>, read> = access %u, 2i, 1u
+    %14:mat4x3<f32> = load %13
+    %15:void = call %tint_store_and_preserve_padding_2, %12, %14
+    %17:ptr<storage, vec3<f32>, read_write> = access %s, 1i, 1u, 0i
+    %18:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1u, 1i
+    %19:vec3<f32> = load %18
+    %20:vec3<f32> = swizzle %19, zxy
+    store %17, %20
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, array<S, 4>, read_write>, %value_param:array<S, 4>):void {
+  $B3: {
+    loop [i: $B4, b: $B5, c: $B6] {  # loop_1
+      $B4: {  # initializer
+        next_iteration 0u  # -> $B5
+      }
+      $B5 (%idx:u32): {  # body
+        %24:bool = gte %idx, 4u
+        if %24 [t: $B7] {  # if_1
+          $B7: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %25:ptr<storage, S, read_write> = access %target, %idx
+        %26:S = access %value_param, %idx
+        %27:void = call %tint_store_and_preserve_padding_1, %25, %26
+        continue  # -> $B6
+      }
+      $B6: {  # continuing
+        %28:u32 = add %idx, 1u
+        next_iteration %28  # -> $B5
+      }
+    }
+    ret
+  }
+}
+%tint_store_and_preserve_padding_1 = func(%target_1:ptr<storage, S, read_write>, %value_param_1:S):void {  # %tint_store_and_preserve_padding_1: 'tint_store_and_preserve_padding', %target_1: 'target', %value_param_1: 'value_param'
+  $B8: {
+    %31:ptr<storage, i32, read_write> = access %target_1, 0u
+    %32:i32 = access %value_param_1, 0u
+    store %31, %32
+    %33:ptr<storage, mat4x3<f32>, read_write> = access %target_1, 1u
+    %34:mat4x3<f32> = access %value_param_1, 1u
+    %35:void = call %tint_store_and_preserve_padding_2, %33, %34
+    %36:ptr<storage, i32, read_write> = access %target_1, 2u
+    %37:i32 = access %value_param_1, 2u
+    store %36, %37
+    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'
+  $B9: {
+    %40:ptr<storage, vec3<f32>, read_write> = access %target_2, 0u
+    %41:vec3<f32> = access %value_param_2, 0u
+    store %40, %41
+    %42:ptr<storage, vec3<f32>, read_write> = access %target_2, 1u
+    %43:vec3<f32> = access %value_param_2, 1u
+    store %42, %43
+    %44:ptr<storage, vec3<f32>, read_write> = access %target_2, 2u
+    %45:vec3<f32> = access %value_param_2, 2u
+    store %44, %45
+    %46:ptr<storage, vec3<f32>, read_write> = access %target_2, 3u
+    %47:vec3<f32> = access %value_param_2, 3u
+    store %46, %47
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x3_f32/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat4x3_f32/to_workgroup.wgsl.expected.ir.msl
index ec8e2c0..1d151cf 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x3_f32/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x3_f32/to_workgroup.wgsl.expected.ir.msl
@@ -1,33 +1,54 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat4x3<f32> @offset(16)
   after:i32 @offset(128)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
   %w:ptr<workgroup, array<S, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:array<S, 4> = load %u
-    store %w, %4
-    %5:ptr<workgroup, S, read_write> = access %w, 1i
-    %6:ptr<uniform, S, read> = access %u, 2i
-    %7:S = load %6
-    store %5, %7
-    %8:ptr<workgroup, mat4x3<f32>, read_write> = access %w, 3i, 1u
-    %9:ptr<uniform, mat4x3<f32>, read> = access %u, 2i, 1u
-    %10:mat4x3<f32> = load %9
-    store %8, %10
-    %11:ptr<workgroup, vec3<f32>, read_write> = access %w, 1i, 1u, 0i
-    %12:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1u, 1i
-    %13:vec3<f32> = load %12
-    %14:vec3<f32> = swizzle %13, zxy
-    store %11, %14
+%f = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B2: {
+    loop [i: $B3, b: $B4, c: $B5] {  # loop_1
+      $B3: {  # initializer
+        next_iteration %tint_local_index  # -> $B4
+      }
+      $B4 (%idx:u32): {  # body
+        %6:bool = gte %idx, 4u
+        if %6 [t: $B6] {  # if_1
+          $B6: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %7:ptr<workgroup, S, read_write> = access %w, %idx
+        store %7, S(0i, mat4x3<f32>(vec3<f32>(0.0f)), 0i)
+        continue  # -> $B5
+      }
+      $B5: {  # continuing
+        %8:u32 = add %idx, 1u
+        next_iteration %8  # -> $B4
+      }
+    }
+    %9:void = msl.threadgroup_barrier 4u
+    %10:array<S, 4> = load %u
+    store %w, %10
+    %11:ptr<workgroup, S, read_write> = access %w, 1i
+    %12:ptr<uniform, S, read> = access %u, 2i
+    %13:S = load %12
+    store %11, %13
+    %14:ptr<workgroup, mat4x3<f32>, read_write> = access %w, 3i, 1u
+    %15:ptr<uniform, mat4x3<f32>, read> = access %u, 2i, 1u
+    %16:mat4x3<f32> = load %15
+    store %14, %16
+    %17:ptr<workgroup, vec3<f32>, read_write> = access %w, 1i, 1u, 0i
+    %18:ptr<uniform, vec3<f32>, read> = access %u, 0i, 1u, 1i
+    %19:vec3<f32> = load %18
+    %20:vec3<f32> = swizzle %19, zxy
+    store %17, %20
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x4_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat4x4_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
index 8e9ad89..44fe5af 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x4_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x4_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Inner = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Inner = struct @align(8) {
   m:mat4x4<f16> @offset(0)
 }
 
@@ -8,13 +8,13 @@
   a:array<Inner, 4> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %a:ptr<uniform, array<Outer, 4>, read> = var @binding_point(0, 0)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
+%i = func():i32 {
+  $B2: {
     %4:i32 = load %counter
     %5:i32 = add %4, 1i
     store %counter, %5
@@ -22,25 +22,37 @@
     ret %6
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_a:ptr<uniform, array<Outer, 4>, read> = let %a
     %9:i32 = call %i
-    %p_a_i:ptr<uniform, Outer, read> = access %p_a, %9
-    %p_a_i_a:ptr<uniform, array<Inner, 4>, read> = access %p_a_i, 0u
-    %12:i32 = call %i
-    %p_a_i_a_i:ptr<uniform, Inner, read> = access %p_a_i_a, %12
-    %p_a_i_a_i_m:ptr<uniform, mat4x4<f16>, read> = access %p_a_i_a_i, 0u
-    %15:i32 = call %i
-    %p_a_i_a_i_m_i:ptr<uniform, vec4<f16>, read> = access %p_a_i_a_i_m, %15
-    %l_a:array<Outer, 4> = load %p_a
-    %l_a_i:Outer = load %p_a_i
-    %l_a_i_a:array<Inner, 4> = load %p_a_i_a
-    %l_a_i_a_i:Inner = load %p_a_i_a_i
-    %l_a_i_a_i_m:mat4x4<f16> = load %p_a_i_a_i_m
-    %l_a_i_a_i_m_i:vec4<f16> = load %p_a_i_a_i_m_i
-    %23:i32 = call %i
-    %l_a_i_a_i_m_i_i:f16 = load_vector_element %p_a_i_a_i_m_i, %23
+    %10:ptr<uniform, Outer, read> = access %p_a, %9
+    %p_a_i:ptr<uniform, Outer, read> = let %10
+    %12:ptr<uniform, array<Inner, 4>, read> = access %p_a_i, 0u
+    %p_a_i_a:ptr<uniform, array<Inner, 4>, read> = let %12
+    %14:i32 = call %i
+    %15:ptr<uniform, Inner, read> = access %p_a_i_a, %14
+    %p_a_i_a_i:ptr<uniform, Inner, read> = let %15
+    %17:ptr<uniform, mat4x4<f16>, read> = access %p_a_i_a_i, 0u
+    %p_a_i_a_i_m:ptr<uniform, mat4x4<f16>, read> = let %17
+    %19:i32 = call %i
+    %20:ptr<uniform, vec4<f16>, read> = access %p_a_i_a_i_m, %19
+    %p_a_i_a_i_m_i:ptr<uniform, vec4<f16>, read> = let %20
+    %22:array<Outer, 4> = load %p_a
+    %l_a:array<Outer, 4> = let %22
+    %24:Outer = load %p_a_i
+    %l_a_i:Outer = let %24
+    %26:array<Inner, 4> = load %p_a_i_a
+    %l_a_i_a:array<Inner, 4> = let %26
+    %28:Inner = load %p_a_i_a_i
+    %l_a_i_a_i:Inner = let %28
+    %30:mat4x4<f16> = load %p_a_i_a_i_m
+    %l_a_i_a_i_m:mat4x4<f16> = let %30
+    %32:vec4<f16> = load %p_a_i_a_i_m_i
+    %l_a_i_a_i_m_i:vec4<f16> = let %32
+    %34:i32 = call %i
+    %35:f16 = load_vector_element %p_a_i_a_i_m_i, %34
+    %l_a_i_a_i_m_i_i:f16 = let %35
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x4_f16/static_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat4x4_f16/static_index_via_ptr.wgsl.expected.ir.msl
index a48f846..bde73d9 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x4_f16/static_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x4_f16/static_index_via_ptr.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Inner = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Inner = struct @align(8) {
   m:mat4x4<f16> @offset(0)
 }
 
@@ -8,25 +8,37 @@
   a:array<Inner, 4> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %a:ptr<uniform, array<Outer, 4>, read> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %p_a:ptr<uniform, array<Outer, 4>, read> = let %a
-    %p_a_3:ptr<uniform, Outer, read> = access %p_a, 3i
-    %p_a_3_a:ptr<uniform, array<Inner, 4>, read> = access %p_a_3, 0u
-    %p_a_3_a_2:ptr<uniform, Inner, read> = access %p_a_3_a, 2i
-    %p_a_3_a_2_m:ptr<uniform, mat4x4<f16>, read> = access %p_a_3_a_2, 0u
-    %p_a_3_a_2_m_1:ptr<uniform, vec4<f16>, read> = access %p_a_3_a_2_m, 1i
-    %l_a:array<Outer, 4> = load %p_a
-    %l_a_3:Outer = load %p_a_3
-    %l_a_3_a:array<Inner, 4> = load %p_a_3_a
-    %l_a_3_a_2:Inner = load %p_a_3_a_2
-    %l_a_3_a_2_m:mat4x4<f16> = load %p_a_3_a_2_m
-    %l_a_3_a_2_m_1:vec4<f16> = load %p_a_3_a_2_m_1
-    %l_a_3_a_2_m_1_0:f16 = load_vector_element %p_a_3_a_2_m_1, 0i
+    %4:ptr<uniform, Outer, read> = access %p_a, 3i
+    %p_a_3:ptr<uniform, Outer, read> = let %4
+    %6:ptr<uniform, array<Inner, 4>, read> = access %p_a_3, 0u
+    %p_a_3_a:ptr<uniform, array<Inner, 4>, read> = let %6
+    %8:ptr<uniform, Inner, read> = access %p_a_3_a, 2i
+    %p_a_3_a_2:ptr<uniform, Inner, read> = let %8
+    %10:ptr<uniform, mat4x4<f16>, read> = access %p_a_3_a_2, 0u
+    %p_a_3_a_2_m:ptr<uniform, mat4x4<f16>, read> = let %10
+    %12:ptr<uniform, vec4<f16>, read> = access %p_a_3_a_2_m, 1i
+    %p_a_3_a_2_m_1:ptr<uniform, vec4<f16>, read> = let %12
+    %14:array<Outer, 4> = load %p_a
+    %l_a:array<Outer, 4> = let %14
+    %16:Outer = load %p_a_3
+    %l_a_3:Outer = let %16
+    %18:array<Inner, 4> = load %p_a_3_a
+    %l_a_3_a:array<Inner, 4> = let %18
+    %20:Inner = load %p_a_3_a_2
+    %l_a_3_a_2:Inner = let %20
+    %22:mat4x4<f16> = load %p_a_3_a_2_m
+    %l_a_3_a_2_m:mat4x4<f16> = let %22
+    %24:vec4<f16> = load %p_a_3_a_2_m_1
+    %l_a_3_a_2_m_1:vec4<f16> = let %24
+    %26:f16 = load_vector_element %p_a_3_a_2_m_1, 0i
+    %l_a_3_a_2_m_1_0:f16 = let %26
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x4_f16/to_builtin.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat4x4_f16/to_builtin.wgsl.expected.ir.msl
index 3fc783f..a2c984e 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x4_f16/to_builtin.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x4_f16/to_builtin.wgsl.expected.ir.msl
@@ -1,29 +1,32 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat4x4<f16> @offset(8)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %3:ptr<uniform, mat4x4<f16>, read> = access %u, 2i, 1u
     %4:mat4x4<f16> = load %3
-    %t:mat4x4<f16> = transpose %4
-    %6:ptr<uniform, vec4<f16>, read> = access %u, 0i, 1u, 1i
-    %7:vec4<f16> = load %6
-    %8:vec4<f16> = swizzle %7, ywxz
-    %l:f16 = length %8
-    %10:ptr<uniform, vec4<f16>, read> = access %u, 0i, 1u, 1i
-    %11:vec4<f16> = load %10
-    %12:vec4<f16> = swizzle %11, ywxz
-    %13:f16 = access %12, 0u
-    %a:f16 = abs %13
+    %5:mat4x4<f16> = transpose %4
+    %t:mat4x4<f16> = let %5
+    %7:ptr<uniform, vec4<f16>, read> = access %u, 0i, 1u, 1i
+    %8:vec4<f16> = load %7
+    %9:vec4<f16> = swizzle %8, ywxz
+    %10:f16 = length %9
+    %l:f16 = let %10
+    %12:ptr<uniform, vec4<f16>, read> = access %u, 0i, 1u, 1i
+    %13:vec4<f16> = load %12
+    %14:vec4<f16> = swizzle %13, ywxz
+    %15:f16 = access %14, 0u
+    %16:f16 = abs %15
+    %a:f16 = let %16
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x4_f16/to_fn.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat4x4_f16/to_fn.wgsl.expected.ir.msl
index a804500..6b8aa2c 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x4_f16/to_fn.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x4_f16/to_fn.wgsl.expected.ir.msl
@@ -1,42 +1,42 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat4x4<f16> @offset(8)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
 }
 
-%a = func(%a_1:array<S, 4>):void -> %b2 {  # %a_1: 'a'
-  %b2 = block {
+%a = func(%a_1:array<S, 4>):void {  # %a_1: 'a'
+  $B2: {
     ret
   }
 }
-%b = func(%s:S):void -> %b3 {
-  %b3 = block {
+%b = func(%s:S):void {
+  $B3: {
     ret
   }
 }
-%c = func(%m:mat4x4<f16>):void -> %b4 {
-  %b4 = block {
+%c = func(%m:mat4x4<f16>):void {
+  $B4: {
     ret
   }
 }
-%d = func(%v:vec4<f16>):void -> %b5 {
-  %b5 = block {
+%d = func(%v:vec4<f16>):void {
+  $B5: {
     ret
   }
 }
-%e = func(%f:f16):void -> %b6 {
-  %b6 = block {
+%e = func(%f:f16):void {
+  $B6: {
     ret
   }
 }
-%f_1 = @compute @workgroup_size(1, 1, 1) func():void -> %b7 {  # %f_1: 'f'
-  %b7 = block {
+%f_1 = @compute @workgroup_size(1, 1, 1) func():void {  # %f_1: 'f'
+  $B7: {
     %13:array<S, 4> = load %u
     %14:void = call %a, %13
     %15:ptr<uniform, S, read> = access %u, 2i
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x4_f16/to_private.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat4x4_f16/to_private.wgsl.expected.ir.msl
index 16b06b8..6db31f9 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x4_f16/to_private.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x4_f16/to_private.wgsl.expected.ir.msl
@@ -1,18 +1,18 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat4x4<f16> @offset(8)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
   %p:ptr<private, array<S, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:array<S, 4> = load %u
     store %p, %4
     %5:ptr<private, S, read_write> = access %p, 1i
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x4_f16/to_storage.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat4x4_f16/to_storage.wgsl.expected.ir.msl
index b8ef1e8..072055f 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x4_f16/to_storage.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x4_f16/to_storage.wgsl.expected.ir.msl
@@ -1,33 +1,73 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat4x4<f16> @offset(8)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
   %s:ptr<storage, array<S, 4>, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:array<S, 4> = load %u
-    store %s, %4
-    %5:ptr<storage, S, read_write> = access %s, 1i
-    %6:ptr<uniform, S, read> = access %u, 2i
-    %7:S = load %6
-    store %5, %7
-    %8:ptr<storage, mat4x4<f16>, read_write> = access %s, 3i, 1u
-    %9:ptr<uniform, mat4x4<f16>, read> = access %u, 2i, 1u
-    %10:mat4x4<f16> = load %9
-    store %8, %10
-    %11:ptr<storage, vec4<f16>, read_write> = access %s, 1i, 1u, 0i
-    %12:ptr<uniform, vec4<f16>, read> = access %u, 0i, 1u, 1i
-    %13:vec4<f16> = load %12
-    %14:vec4<f16> = swizzle %13, ywxz
-    store %11, %14
+    %5:void = call %tint_store_and_preserve_padding, %s, %4
+    %7:ptr<storage, S, read_write> = access %s, 1i
+    %8:ptr<uniform, S, read> = access %u, 2i
+    %9:S = load %8
+    %10:void = call %tint_store_and_preserve_padding_1, %7, %9
+    %12:ptr<storage, mat4x4<f16>, read_write> = access %s, 3i, 1u
+    %13:ptr<uniform, mat4x4<f16>, read> = access %u, 2i, 1u
+    %14:mat4x4<f16> = load %13
+    store %12, %14
+    %15:ptr<storage, vec4<f16>, read_write> = access %s, 1i, 1u, 0i
+    %16:ptr<uniform, vec4<f16>, read> = access %u, 0i, 1u, 1i
+    %17:vec4<f16> = load %16
+    %18:vec4<f16> = swizzle %17, ywxz
+    store %15, %18
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, array<S, 4>, read_write>, %value_param:array<S, 4>):void {
+  $B3: {
+    loop [i: $B4, b: $B5, c: $B6] {  # loop_1
+      $B4: {  # initializer
+        next_iteration 0u  # -> $B5
+      }
+      $B5 (%idx:u32): {  # body
+        %22:bool = gte %idx, 4u
+        if %22 [t: $B7] {  # if_1
+          $B7: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %23:ptr<storage, S, read_write> = access %target, %idx
+        %24:S = access %value_param, %idx
+        %25:void = call %tint_store_and_preserve_padding_1, %23, %24
+        continue  # -> $B6
+      }
+      $B6: {  # continuing
+        %26:u32 = add %idx, 1u
+        next_iteration %26  # -> $B5
+      }
+    }
+    ret
+  }
+}
+%tint_store_and_preserve_padding_1 = func(%target_1:ptr<storage, S, read_write>, %value_param_1:S):void {  # %tint_store_and_preserve_padding_1: 'tint_store_and_preserve_padding', %target_1: 'target', %value_param_1: 'value_param'
+  $B8: {
+    %29:ptr<storage, i32, read_write> = access %target_1, 0u
+    %30:i32 = access %value_param_1, 0u
+    store %29, %30
+    %31:ptr<storage, mat4x4<f16>, read_write> = access %target_1, 1u
+    %32:mat4x4<f16> = access %value_param_1, 1u
+    store %31, %32
+    %33:ptr<storage, i32, read_write> = access %target_1, 2u
+    %34:i32 = access %value_param_1, 2u
+    store %33, %34
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x4_f16/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat4x4_f16/to_workgroup.wgsl.expected.ir.msl
index 7bc6c13..1942023 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x4_f16/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x4_f16/to_workgroup.wgsl.expected.ir.msl
@@ -1,33 +1,54 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat4x4<f16> @offset(8)
   after:i32 @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
   %w:ptr<workgroup, array<S, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:array<S, 4> = load %u
-    store %w, %4
-    %5:ptr<workgroup, S, read_write> = access %w, 1i
-    %6:ptr<uniform, S, read> = access %u, 2i
-    %7:S = load %6
-    store %5, %7
-    %8:ptr<workgroup, mat4x4<f16>, read_write> = access %w, 3i, 1u
-    %9:ptr<uniform, mat4x4<f16>, read> = access %u, 2i, 1u
-    %10:mat4x4<f16> = load %9
-    store %8, %10
-    %11:ptr<workgroup, vec4<f16>, read_write> = access %w, 1i, 1u, 0i
-    %12:ptr<uniform, vec4<f16>, read> = access %u, 0i, 1u, 1i
-    %13:vec4<f16> = load %12
-    %14:vec4<f16> = swizzle %13, ywxz
-    store %11, %14
+%f = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B2: {
+    loop [i: $B3, b: $B4, c: $B5] {  # loop_1
+      $B3: {  # initializer
+        next_iteration %tint_local_index  # -> $B4
+      }
+      $B4 (%idx:u32): {  # body
+        %6:bool = gte %idx, 4u
+        if %6 [t: $B6] {  # if_1
+          $B6: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %7:ptr<workgroup, S, read_write> = access %w, %idx
+        store %7, S(0i, mat4x4<f16>(vec4<f16>(0.0h)), 0i)
+        continue  # -> $B5
+      }
+      $B5: {  # continuing
+        %8:u32 = add %idx, 1u
+        next_iteration %8  # -> $B4
+      }
+    }
+    %9:void = msl.threadgroup_barrier 4u
+    %10:array<S, 4> = load %u
+    store %w, %10
+    %11:ptr<workgroup, S, read_write> = access %w, 1i
+    %12:ptr<uniform, S, read> = access %u, 2i
+    %13:S = load %12
+    store %11, %13
+    %14:ptr<workgroup, mat4x4<f16>, read_write> = access %w, 3i, 1u
+    %15:ptr<uniform, mat4x4<f16>, read> = access %u, 2i, 1u
+    %16:mat4x4<f16> = load %15
+    store %14, %16
+    %17:ptr<workgroup, vec4<f16>, read_write> = access %w, 1i, 1u, 0i
+    %18:ptr<uniform, vec4<f16>, read> = access %u, 0i, 1u, 1i
+    %19:vec4<f16> = load %18
+    %20:vec4<f16> = swizzle %19, ywxz
+    store %17, %20
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat4x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
index d06e288..9ed2603 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Inner = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Inner = struct @align(16) {
   m:mat4x4<f32> @offset(0)
 }
 
@@ -8,13 +8,13 @@
   a:array<Inner, 4> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %a:ptr<uniform, array<Outer, 4>, read> = var @binding_point(0, 0)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
+%i = func():i32 {
+  $B2: {
     %4:i32 = load %counter
     %5:i32 = add %4, 1i
     store %counter, %5
@@ -22,25 +22,37 @@
     ret %6
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_a:ptr<uniform, array<Outer, 4>, read> = let %a
     %9:i32 = call %i
-    %p_a_i:ptr<uniform, Outer, read> = access %p_a, %9
-    %p_a_i_a:ptr<uniform, array<Inner, 4>, read> = access %p_a_i, 0u
-    %12:i32 = call %i
-    %p_a_i_a_i:ptr<uniform, Inner, read> = access %p_a_i_a, %12
-    %p_a_i_a_i_m:ptr<uniform, mat4x4<f32>, read> = access %p_a_i_a_i, 0u
-    %15:i32 = call %i
-    %p_a_i_a_i_m_i:ptr<uniform, vec4<f32>, read> = access %p_a_i_a_i_m, %15
-    %l_a:array<Outer, 4> = load %p_a
-    %l_a_i:Outer = load %p_a_i
-    %l_a_i_a:array<Inner, 4> = load %p_a_i_a
-    %l_a_i_a_i:Inner = load %p_a_i_a_i
-    %l_a_i_a_i_m:mat4x4<f32> = load %p_a_i_a_i_m
-    %l_a_i_a_i_m_i:vec4<f32> = load %p_a_i_a_i_m_i
-    %23:i32 = call %i
-    %l_a_i_a_i_m_i_i:f32 = load_vector_element %p_a_i_a_i_m_i, %23
+    %10:ptr<uniform, Outer, read> = access %p_a, %9
+    %p_a_i:ptr<uniform, Outer, read> = let %10
+    %12:ptr<uniform, array<Inner, 4>, read> = access %p_a_i, 0u
+    %p_a_i_a:ptr<uniform, array<Inner, 4>, read> = let %12
+    %14:i32 = call %i
+    %15:ptr<uniform, Inner, read> = access %p_a_i_a, %14
+    %p_a_i_a_i:ptr<uniform, Inner, read> = let %15
+    %17:ptr<uniform, mat4x4<f32>, read> = access %p_a_i_a_i, 0u
+    %p_a_i_a_i_m:ptr<uniform, mat4x4<f32>, read> = let %17
+    %19:i32 = call %i
+    %20:ptr<uniform, vec4<f32>, read> = access %p_a_i_a_i_m, %19
+    %p_a_i_a_i_m_i:ptr<uniform, vec4<f32>, read> = let %20
+    %22:array<Outer, 4> = load %p_a
+    %l_a:array<Outer, 4> = let %22
+    %24:Outer = load %p_a_i
+    %l_a_i:Outer = let %24
+    %26:array<Inner, 4> = load %p_a_i_a
+    %l_a_i_a:array<Inner, 4> = let %26
+    %28:Inner = load %p_a_i_a_i
+    %l_a_i_a_i:Inner = let %28
+    %30:mat4x4<f32> = load %p_a_i_a_i_m
+    %l_a_i_a_i_m:mat4x4<f32> = let %30
+    %32:vec4<f32> = load %p_a_i_a_i_m_i
+    %l_a_i_a_i_m_i:vec4<f32> = let %32
+    %34:i32 = call %i
+    %35:f32 = load_vector_element %p_a_i_a_i_m_i, %34
+    %l_a_i_a_i_m_i_i:f32 = let %35
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x4_f32/static_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat4x4_f32/static_index_via_ptr.wgsl.expected.ir.msl
index c28300a..4addd07 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x4_f32/static_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x4_f32/static_index_via_ptr.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Inner = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Inner = struct @align(16) {
   m:mat4x4<f32> @offset(0)
 }
 
@@ -8,25 +8,37 @@
   a:array<Inner, 4> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %a:ptr<uniform, array<Outer, 4>, read> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %p_a:ptr<uniform, array<Outer, 4>, read> = let %a
-    %p_a_3:ptr<uniform, Outer, read> = access %p_a, 3i
-    %p_a_3_a:ptr<uniform, array<Inner, 4>, read> = access %p_a_3, 0u
-    %p_a_3_a_2:ptr<uniform, Inner, read> = access %p_a_3_a, 2i
-    %p_a_3_a_2_m:ptr<uniform, mat4x4<f32>, read> = access %p_a_3_a_2, 0u
-    %p_a_3_a_2_m_1:ptr<uniform, vec4<f32>, read> = access %p_a_3_a_2_m, 1i
-    %l_a:array<Outer, 4> = load %p_a
-    %l_a_3:Outer = load %p_a_3
-    %l_a_3_a:array<Inner, 4> = load %p_a_3_a
-    %l_a_3_a_2:Inner = load %p_a_3_a_2
-    %l_a_3_a_2_m:mat4x4<f32> = load %p_a_3_a_2_m
-    %l_a_3_a_2_m_1:vec4<f32> = load %p_a_3_a_2_m_1
-    %l_a_3_a_2_m_1_0:f32 = load_vector_element %p_a_3_a_2_m_1, 0i
+    %4:ptr<uniform, Outer, read> = access %p_a, 3i
+    %p_a_3:ptr<uniform, Outer, read> = let %4
+    %6:ptr<uniform, array<Inner, 4>, read> = access %p_a_3, 0u
+    %p_a_3_a:ptr<uniform, array<Inner, 4>, read> = let %6
+    %8:ptr<uniform, Inner, read> = access %p_a_3_a, 2i
+    %p_a_3_a_2:ptr<uniform, Inner, read> = let %8
+    %10:ptr<uniform, mat4x4<f32>, read> = access %p_a_3_a_2, 0u
+    %p_a_3_a_2_m:ptr<uniform, mat4x4<f32>, read> = let %10
+    %12:ptr<uniform, vec4<f32>, read> = access %p_a_3_a_2_m, 1i
+    %p_a_3_a_2_m_1:ptr<uniform, vec4<f32>, read> = let %12
+    %14:array<Outer, 4> = load %p_a
+    %l_a:array<Outer, 4> = let %14
+    %16:Outer = load %p_a_3
+    %l_a_3:Outer = let %16
+    %18:array<Inner, 4> = load %p_a_3_a
+    %l_a_3_a:array<Inner, 4> = let %18
+    %20:Inner = load %p_a_3_a_2
+    %l_a_3_a_2:Inner = let %20
+    %22:mat4x4<f32> = load %p_a_3_a_2_m
+    %l_a_3_a_2_m:mat4x4<f32> = let %22
+    %24:vec4<f32> = load %p_a_3_a_2_m_1
+    %l_a_3_a_2_m_1:vec4<f32> = let %24
+    %26:f32 = load_vector_element %p_a_3_a_2_m_1, 0i
+    %l_a_3_a_2_m_1_0:f32 = let %26
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x4_f32/to_builtin.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat4x4_f32/to_builtin.wgsl.expected.ir.msl
index 0df1147..6a5a7de 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x4_f32/to_builtin.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x4_f32/to_builtin.wgsl.expected.ir.msl
@@ -1,29 +1,32 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat4x4<f32> @offset(16)
   after:i32 @offset(128)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %3:ptr<uniform, mat4x4<f32>, read> = access %u, 2i, 1u
     %4:mat4x4<f32> = load %3
-    %t:mat4x4<f32> = transpose %4
-    %6:ptr<uniform, vec4<f32>, read> = access %u, 0i, 1u, 1i
-    %7:vec4<f32> = load %6
-    %8:vec4<f32> = swizzle %7, ywxz
-    %l:f32 = length %8
-    %10:ptr<uniform, vec4<f32>, read> = access %u, 0i, 1u, 1i
-    %11:vec4<f32> = load %10
-    %12:vec4<f32> = swizzle %11, ywxz
-    %13:f32 = access %12, 0u
-    %a:f32 = abs %13
+    %5:mat4x4<f32> = transpose %4
+    %t:mat4x4<f32> = let %5
+    %7:ptr<uniform, vec4<f32>, read> = access %u, 0i, 1u, 1i
+    %8:vec4<f32> = load %7
+    %9:vec4<f32> = swizzle %8, ywxz
+    %10:f32 = length %9
+    %l:f32 = let %10
+    %12:ptr<uniform, vec4<f32>, read> = access %u, 0i, 1u, 1i
+    %13:vec4<f32> = load %12
+    %14:vec4<f32> = swizzle %13, ywxz
+    %15:f32 = access %14, 0u
+    %16:f32 = abs %15
+    %a:f32 = let %16
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x4_f32/to_fn.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat4x4_f32/to_fn.wgsl.expected.ir.msl
index efd1e78..9034489 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x4_f32/to_fn.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x4_f32/to_fn.wgsl.expected.ir.msl
@@ -1,42 +1,42 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat4x4<f32> @offset(16)
   after:i32 @offset(128)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
 }
 
-%a = func(%a_1:array<S, 4>):void -> %b2 {  # %a_1: 'a'
-  %b2 = block {
+%a = func(%a_1:array<S, 4>):void {  # %a_1: 'a'
+  $B2: {
     ret
   }
 }
-%b = func(%s:S):void -> %b3 {
-  %b3 = block {
+%b = func(%s:S):void {
+  $B3: {
     ret
   }
 }
-%c = func(%m:mat4x4<f32>):void -> %b4 {
-  %b4 = block {
+%c = func(%m:mat4x4<f32>):void {
+  $B4: {
     ret
   }
 }
-%d = func(%v:vec4<f32>):void -> %b5 {
-  %b5 = block {
+%d = func(%v:vec4<f32>):void {
+  $B5: {
     ret
   }
 }
-%e = func(%f:f32):void -> %b6 {
-  %b6 = block {
+%e = func(%f:f32):void {
+  $B6: {
     ret
   }
 }
-%f_1 = @compute @workgroup_size(1, 1, 1) func():void -> %b7 {  # %f_1: 'f'
-  %b7 = block {
+%f_1 = @compute @workgroup_size(1, 1, 1) func():void {  # %f_1: 'f'
+  $B7: {
     %13:array<S, 4> = load %u
     %14:void = call %a, %13
     %15:ptr<uniform, S, read> = access %u, 2i
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x4_f32/to_private.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat4x4_f32/to_private.wgsl.expected.ir.msl
index 40e5ea9..ead75ea 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x4_f32/to_private.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x4_f32/to_private.wgsl.expected.ir.msl
@@ -1,18 +1,18 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat4x4<f32> @offset(16)
   after:i32 @offset(128)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
   %p:ptr<private, array<S, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:array<S, 4> = load %u
     store %p, %4
     %5:ptr<private, S, read_write> = access %p, 1i
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x4_f32/to_storage.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat4x4_f32/to_storage.wgsl.expected.ir.msl
index 450e67d..6eb7ab0 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x4_f32/to_storage.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x4_f32/to_storage.wgsl.expected.ir.msl
@@ -1,33 +1,73 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat4x4<f32> @offset(16)
   after:i32 @offset(128)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
   %s:ptr<storage, array<S, 4>, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:array<S, 4> = load %u
-    store %s, %4
-    %5:ptr<storage, S, read_write> = access %s, 1i
-    %6:ptr<uniform, S, read> = access %u, 2i
-    %7:S = load %6
-    store %5, %7
-    %8:ptr<storage, mat4x4<f32>, read_write> = access %s, 3i, 1u
-    %9:ptr<uniform, mat4x4<f32>, read> = access %u, 2i, 1u
-    %10:mat4x4<f32> = load %9
-    store %8, %10
-    %11:ptr<storage, vec4<f32>, read_write> = access %s, 1i, 1u, 0i
-    %12:ptr<uniform, vec4<f32>, read> = access %u, 0i, 1u, 1i
-    %13:vec4<f32> = load %12
-    %14:vec4<f32> = swizzle %13, ywxz
-    store %11, %14
+    %5:void = call %tint_store_and_preserve_padding, %s, %4
+    %7:ptr<storage, S, read_write> = access %s, 1i
+    %8:ptr<uniform, S, read> = access %u, 2i
+    %9:S = load %8
+    %10:void = call %tint_store_and_preserve_padding_1, %7, %9
+    %12:ptr<storage, mat4x4<f32>, read_write> = access %s, 3i, 1u
+    %13:ptr<uniform, mat4x4<f32>, read> = access %u, 2i, 1u
+    %14:mat4x4<f32> = load %13
+    store %12, %14
+    %15:ptr<storage, vec4<f32>, read_write> = access %s, 1i, 1u, 0i
+    %16:ptr<uniform, vec4<f32>, read> = access %u, 0i, 1u, 1i
+    %17:vec4<f32> = load %16
+    %18:vec4<f32> = swizzle %17, ywxz
+    store %15, %18
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, array<S, 4>, read_write>, %value_param:array<S, 4>):void {
+  $B3: {
+    loop [i: $B4, b: $B5, c: $B6] {  # loop_1
+      $B4: {  # initializer
+        next_iteration 0u  # -> $B5
+      }
+      $B5 (%idx:u32): {  # body
+        %22:bool = gte %idx, 4u
+        if %22 [t: $B7] {  # if_1
+          $B7: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %23:ptr<storage, S, read_write> = access %target, %idx
+        %24:S = access %value_param, %idx
+        %25:void = call %tint_store_and_preserve_padding_1, %23, %24
+        continue  # -> $B6
+      }
+      $B6: {  # continuing
+        %26:u32 = add %idx, 1u
+        next_iteration %26  # -> $B5
+      }
+    }
+    ret
+  }
+}
+%tint_store_and_preserve_padding_1 = func(%target_1:ptr<storage, S, read_write>, %value_param_1:S):void {  # %tint_store_and_preserve_padding_1: 'tint_store_and_preserve_padding', %target_1: 'target', %value_param_1: 'value_param'
+  $B8: {
+    %29:ptr<storage, i32, read_write> = access %target_1, 0u
+    %30:i32 = access %value_param_1, 0u
+    store %29, %30
+    %31:ptr<storage, mat4x4<f32>, read_write> = access %target_1, 1u
+    %32:mat4x4<f32> = access %value_param_1, 1u
+    store %31, %32
+    %33:ptr<storage, i32, read_write> = access %target_1, 2u
+    %34:i32 = access %value_param_1, 2u
+    store %33, %34
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x4_f32/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/struct/mat4x4_f32/to_workgroup.wgsl.expected.ir.msl
index 31ca2e4..d70ac8b 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x4_f32/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x4_f32/to_workgroup.wgsl.expected.ir.msl
@@ -1,33 +1,54 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(64) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(64) {
   before:i32 @offset(0)
   m:mat4x4<f32> @offset(16)
   after:i32 @offset(128)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, array<S, 4>, read> = var @binding_point(0, 0)
   %w:ptr<workgroup, array<S, 4>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:array<S, 4> = load %u
-    store %w, %4
-    %5:ptr<workgroup, S, read_write> = access %w, 1i
-    %6:ptr<uniform, S, read> = access %u, 2i
-    %7:S = load %6
-    store %5, %7
-    %8:ptr<workgroup, mat4x4<f32>, read_write> = access %w, 3i, 1u
-    %9:ptr<uniform, mat4x4<f32>, read> = access %u, 2i, 1u
-    %10:mat4x4<f32> = load %9
-    store %8, %10
-    %11:ptr<workgroup, vec4<f32>, read_write> = access %w, 1i, 1u, 0i
-    %12:ptr<uniform, vec4<f32>, read> = access %u, 0i, 1u, 1i
-    %13:vec4<f32> = load %12
-    %14:vec4<f32> = swizzle %13, ywxz
-    store %11, %14
+%f = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B2: {
+    loop [i: $B3, b: $B4, c: $B5] {  # loop_1
+      $B3: {  # initializer
+        next_iteration %tint_local_index  # -> $B4
+      }
+      $B4 (%idx:u32): {  # body
+        %6:bool = gte %idx, 4u
+        if %6 [t: $B6] {  # if_1
+          $B6: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %7:ptr<workgroup, S, read_write> = access %w, %idx
+        store %7, S(0i, mat4x4<f32>(vec4<f32>(0.0f)), 0i)
+        continue  # -> $B5
+      }
+      $B5: {  # continuing
+        %8:u32 = add %idx, 1u
+        next_iteration %8  # -> $B4
+      }
+    }
+    %9:void = msl.threadgroup_barrier 4u
+    %10:array<S, 4> = load %u
+    store %w, %10
+    %11:ptr<workgroup, S, read_write> = access %w, 1i
+    %12:ptr<uniform, S, read> = access %u, 2i
+    %13:S = load %12
+    store %11, %13
+    %14:ptr<workgroup, mat4x4<f32>, read_write> = access %w, 3i, 1u
+    %15:ptr<uniform, mat4x4<f32>, read> = access %u, 2i, 1u
+    %16:mat4x4<f32> = load %15
+    store %14, %16
+    %17:ptr<workgroup, vec4<f32>, read_write> = access %w, 1i, 1u, 0i
+    %18:ptr<uniform, vec4<f32>, read> = access %u, 0i, 1u, 1i
+    %19:vec4<f32> = load %18
+    %20:vec4<f32> = swizzle %19, ywxz
+    store %17, %20
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
index 58d2c7e..a176b1c 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<uniform, mat2x2<f16>, read> = var @binding_point(0, 0)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
+%i = func():i32 {
+  $B2: {
     %4:i32 = load %counter
     %5:i32 = add %4, 1i
     store %counter, %5
@@ -14,13 +14,16 @@
     ret %6
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_m:ptr<uniform, mat2x2<f16>, read> = let %m
     %9:i32 = call %i
-    %p_m_i:ptr<uniform, vec2<f16>, read> = access %p_m, %9
-    %l_m:mat2x2<f16> = load %p_m
-    %l_m_i:vec2<f16> = load %p_m_i
+    %10:ptr<uniform, vec2<f16>, read> = access %p_m, %9
+    %p_m_i:ptr<uniform, vec2<f16>, read> = let %10
+    %12:mat2x2<f16> = load %p_m
+    %l_m:mat2x2<f16> = let %12
+    %14:vec2<f16> = load %p_m_i
+    %l_m_i:vec2<f16> = let %14
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/static_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/static_index_via_ptr.wgsl.expected.ir.msl
index 554a8df..e4980e5 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/static_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/static_index_via_ptr.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<uniform, mat2x2<f16>, read> = var @binding_point(0, 0)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
+%i = func():i32 {
+  $B2: {
     %4:i32 = load %counter
     %5:i32 = add %4, 1i
     store %counter, %5
@@ -14,12 +14,15 @@
     ret %6
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_m:ptr<uniform, mat2x2<f16>, read> = let %m
-    %p_m_1:ptr<uniform, vec2<f16>, read> = access %p_m, 1i
-    %l_m:mat2x2<f16> = load %p_m
-    %l_m_1:vec2<f16> = load %p_m_1
+    %9:ptr<uniform, vec2<f16>, read> = access %p_m, 1i
+    %p_m_1:ptr<uniform, vec2<f16>, read> = let %9
+    %11:mat2x2<f16> = load %p_m
+    %l_m:mat2x2<f16> = let %11
+    %13:vec2<f16> = load %p_m_1
+    %l_m_1:vec2<f16> = let %13
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/to_builtin.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/to_builtin.wgsl.expected.ir.msl
index ab08cdd..d3813373 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/to_builtin.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/to_builtin.wgsl.expected.ir.msl
@@ -1,21 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat2x2<f16>, read> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %3:mat2x2<f16> = load %u
-    %t:mat2x2<f16> = transpose %3
-    %5:ptr<uniform, vec2<f16>, read> = access %u, 1i
-    %6:vec2<f16> = load %5
-    %l:f16 = length %6
-    %8:ptr<uniform, vec2<f16>, read> = access %u, 0i
-    %9:vec2<f16> = load %8
-    %10:vec2<f16> = swizzle %9, yx
-    %11:f16 = access %10, 0u
-    %a:f16 = abs %11
+    %4:mat2x2<f16> = transpose %3
+    %t:mat2x2<f16> = let %4
+    %6:ptr<uniform, vec2<f16>, read> = access %u, 1i
+    %7:vec2<f16> = load %6
+    %8:f16 = length %7
+    %l:f16 = let %8
+    %10:ptr<uniform, vec2<f16>, read> = access %u, 0i
+    %11:vec2<f16> = load %10
+    %12:vec2<f16> = swizzle %11, yx
+    %13:f16 = access %12, 0u
+    %14:f16 = abs %13
+    %a:f16 = let %14
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/to_fn.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/to_fn.wgsl.expected.ir.msl
index dbf8128..a228f13 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/to_fn.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/to_fn.wgsl.expected.ir.msl
@@ -1,26 +1,26 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat2x2<f16>, read> = var @binding_point(0, 0)
 }
 
-%a = func(%m:mat2x2<f16>):void -> %b2 {
-  %b2 = block {
+%a = func(%m:mat2x2<f16>):void {
+  $B2: {
     ret
   }
 }
-%b = func(%v:vec2<f16>):void -> %b3 {
-  %b3 = block {
+%b = func(%v:vec2<f16>):void {
+  $B3: {
     ret
   }
 }
-%c = func(%f:f16):void -> %b4 {
-  %b4 = block {
+%c = func(%f:f16):void {
+  $B4: {
     ret
   }
 }
-%f_1 = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {  # %f_1: 'f'
-  %b5 = block {
+%f_1 = @compute @workgroup_size(1, 1, 1) func():void {  # %f_1: 'f'
+  $B5: {
     %9:mat2x2<f16> = load %u
     %10:void = call %a, %9
     %11:ptr<uniform, vec2<f16>, read> = access %u, 1i
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/to_private.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/to_private.wgsl.expected.ir.msl
index 2f0bd64..e0a91b8 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/to_private.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/to_private.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat2x2<f16>, read> = var @binding_point(0, 0)
   %p:ptr<private, mat2x2<f16>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat2x2<f16> = load %u
     store %p, %4
     %5:ptr<private, vec2<f16>, read_write> = access %p, 1i
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/to_storage.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/to_storage.wgsl.expected.ir.msl
index f4b675e..1ccbd29 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/to_storage.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/to_storage.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat2x2<f16>, read> = var @binding_point(0, 0)
   %s:ptr<storage, mat2x2<f16>, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat2x2<f16> = load %u
     store %s, %4
     %5:ptr<storage, vec2<f16>, read_write> = access %s, 1i
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/to_workgroup.wgsl.expected.ir.msl
index a2baf6b..37f0e9b 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/to_workgroup.wgsl.expected.ir.msl
@@ -1,27 +1,35 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat2x2<f16>, read> = var @binding_point(0, 0)
   %w:ptr<workgroup, mat2x2<f16>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:mat2x2<f16> = load %u
-    store %w, %4
-    %5:ptr<workgroup, vec2<f16>, read_write> = access %w, 1i
-    %6:ptr<uniform, vec2<f16>, read> = access %u, 0i
-    %7:vec2<f16> = load %6
-    store %5, %7
+%f = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B2: {
+    %5:bool = eq %tint_local_index, 0u
+    if %5 [t: $B3] {  # if_1
+      $B3: {  # true
+        store %w, mat2x2<f16>(vec2<f16>(0.0h))
+        exit_if  # if_1
+      }
+    }
+    %6:void = msl.threadgroup_barrier 4u
+    %7:mat2x2<f16> = load %u
+    store %w, %7
     %8:ptr<workgroup, vec2<f16>, read_write> = access %w, 1i
     %9:ptr<uniform, vec2<f16>, read> = access %u, 0i
     %10:vec2<f16> = load %9
-    %11:vec2<f16> = swizzle %10, yx
-    store %8, %11
-    %12:ptr<workgroup, vec2<f16>, read_write> = access %w, 0i
-    %13:ptr<uniform, vec2<f16>, read> = access %u, 1i
-    %14:f16 = load_vector_element %13, 0i
-    store_vector_element %12, 1i, %14
+    store %8, %10
+    %11:ptr<workgroup, vec2<f16>, read_write> = access %w, 1i
+    %12:ptr<uniform, vec2<f16>, read> = access %u, 0i
+    %13:vec2<f16> = load %12
+    %14:vec2<f16> = swizzle %13, yx
+    store %11, %14
+    %15:ptr<workgroup, vec2<f16>, read_write> = access %w, 0i
+    %16:ptr<uniform, vec2<f16>, read> = access %u, 1i
+    %17:f16 = load_vector_element %16, 0i
+    store_vector_element %15, 1i, %17
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
index ba40f3b..3f757e5 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<uniform, mat2x2<f32>, read> = var @binding_point(0, 0)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
+%i = func():i32 {
+  $B2: {
     %4:i32 = load %counter
     %5:i32 = add %4, 1i
     store %counter, %5
@@ -14,13 +14,16 @@
     ret %6
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_m:ptr<uniform, mat2x2<f32>, read> = let %m
     %9:i32 = call %i
-    %p_m_i:ptr<uniform, vec2<f32>, read> = access %p_m, %9
-    %l_m:mat2x2<f32> = load %p_m
-    %l_m_i:vec2<f32> = load %p_m_i
+    %10:ptr<uniform, vec2<f32>, read> = access %p_m, %9
+    %p_m_i:ptr<uniform, vec2<f32>, read> = let %10
+    %12:mat2x2<f32> = load %p_m
+    %l_m:mat2x2<f32> = let %12
+    %14:vec2<f32> = load %p_m_i
+    %l_m_i:vec2<f32> = let %14
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/static_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/static_index_via_ptr.wgsl.expected.ir.msl
index 12f9ac2..7cd3bee 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/static_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/static_index_via_ptr.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<uniform, mat2x2<f32>, read> = var @binding_point(0, 0)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
+%i = func():i32 {
+  $B2: {
     %4:i32 = load %counter
     %5:i32 = add %4, 1i
     store %counter, %5
@@ -14,12 +14,15 @@
     ret %6
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_m:ptr<uniform, mat2x2<f32>, read> = let %m
-    %p_m_1:ptr<uniform, vec2<f32>, read> = access %p_m, 1i
-    %l_m:mat2x2<f32> = load %p_m
-    %l_m_1:vec2<f32> = load %p_m_1
+    %9:ptr<uniform, vec2<f32>, read> = access %p_m, 1i
+    %p_m_1:ptr<uniform, vec2<f32>, read> = let %9
+    %11:mat2x2<f32> = load %p_m
+    %l_m:mat2x2<f32> = let %11
+    %13:vec2<f32> = load %p_m_1
+    %l_m_1:vec2<f32> = let %13
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/to_builtin.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/to_builtin.wgsl.expected.ir.msl
index d2f040e..cc7db23 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/to_builtin.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/to_builtin.wgsl.expected.ir.msl
@@ -1,21 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat2x2<f32>, read> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %3:mat2x2<f32> = load %u
-    %t:mat2x2<f32> = transpose %3
-    %5:ptr<uniform, vec2<f32>, read> = access %u, 1i
-    %6:vec2<f32> = load %5
-    %l:f32 = length %6
-    %8:ptr<uniform, vec2<f32>, read> = access %u, 0i
-    %9:vec2<f32> = load %8
-    %10:vec2<f32> = swizzle %9, yx
-    %11:f32 = access %10, 0u
-    %a:f32 = abs %11
+    %4:mat2x2<f32> = transpose %3
+    %t:mat2x2<f32> = let %4
+    %6:ptr<uniform, vec2<f32>, read> = access %u, 1i
+    %7:vec2<f32> = load %6
+    %8:f32 = length %7
+    %l:f32 = let %8
+    %10:ptr<uniform, vec2<f32>, read> = access %u, 0i
+    %11:vec2<f32> = load %10
+    %12:vec2<f32> = swizzle %11, yx
+    %13:f32 = access %12, 0u
+    %14:f32 = abs %13
+    %a:f32 = let %14
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/to_fn.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/to_fn.wgsl.expected.ir.msl
index 26dcceb..4f8ada1 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/to_fn.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/to_fn.wgsl.expected.ir.msl
@@ -1,26 +1,26 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat2x2<f32>, read> = var @binding_point(0, 0)
 }
 
-%a = func(%m:mat2x2<f32>):void -> %b2 {
-  %b2 = block {
+%a = func(%m:mat2x2<f32>):void {
+  $B2: {
     ret
   }
 }
-%b = func(%v:vec2<f32>):void -> %b3 {
-  %b3 = block {
+%b = func(%v:vec2<f32>):void {
+  $B3: {
     ret
   }
 }
-%c = func(%f:f32):void -> %b4 {
-  %b4 = block {
+%c = func(%f:f32):void {
+  $B4: {
     ret
   }
 }
-%f_1 = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {  # %f_1: 'f'
-  %b5 = block {
+%f_1 = @compute @workgroup_size(1, 1, 1) func():void {  # %f_1: 'f'
+  $B5: {
     %9:mat2x2<f32> = load %u
     %10:void = call %a, %9
     %11:ptr<uniform, vec2<f32>, read> = access %u, 1i
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/to_private.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/to_private.wgsl.expected.ir.msl
index 0e4b6f7..11abb4e 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/to_private.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/to_private.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat2x2<f32>, read> = var @binding_point(0, 0)
   %p:ptr<private, mat2x2<f32>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat2x2<f32> = load %u
     store %p, %4
     %5:ptr<private, vec2<f32>, read_write> = access %p, 1i
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/to_storage.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/to_storage.wgsl.expected.ir.msl
index f8f5aef..30bc543 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/to_storage.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/to_storage.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat2x2<f32>, read> = var @binding_point(0, 0)
   %s:ptr<storage, mat2x2<f32>, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat2x2<f32> = load %u
     store %s, %4
     %5:ptr<storage, vec2<f32>, read_write> = access %s, 1i
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/to_workgroup.wgsl.expected.ir.msl
index 6fb47d0..363c971 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/to_workgroup.wgsl.expected.ir.msl
@@ -1,27 +1,35 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat2x2<f32>, read> = var @binding_point(0, 0)
   %w:ptr<workgroup, mat2x2<f32>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:mat2x2<f32> = load %u
-    store %w, %4
-    %5:ptr<workgroup, vec2<f32>, read_write> = access %w, 1i
-    %6:ptr<uniform, vec2<f32>, read> = access %u, 0i
-    %7:vec2<f32> = load %6
-    store %5, %7
+%f = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B2: {
+    %5:bool = eq %tint_local_index, 0u
+    if %5 [t: $B3] {  # if_1
+      $B3: {  # true
+        store %w, mat2x2<f32>(vec2<f32>(0.0f))
+        exit_if  # if_1
+      }
+    }
+    %6:void = msl.threadgroup_barrier 4u
+    %7:mat2x2<f32> = load %u
+    store %w, %7
     %8:ptr<workgroup, vec2<f32>, read_write> = access %w, 1i
     %9:ptr<uniform, vec2<f32>, read> = access %u, 0i
     %10:vec2<f32> = load %9
-    %11:vec2<f32> = swizzle %10, yx
-    store %8, %11
-    %12:ptr<workgroup, vec2<f32>, read_write> = access %w, 0i
-    %13:ptr<uniform, vec2<f32>, read> = access %u, 1i
-    %14:f32 = load_vector_element %13, 0i
-    store_vector_element %12, 1i, %14
+    store %8, %10
+    %11:ptr<workgroup, vec2<f32>, read_write> = access %w, 1i
+    %12:ptr<uniform, vec2<f32>, read> = access %u, 0i
+    %13:vec2<f32> = load %12
+    %14:vec2<f32> = swizzle %13, yx
+    store %11, %14
+    %15:ptr<workgroup, vec2<f32>, read_write> = access %w, 0i
+    %16:ptr<uniform, vec2<f32>, read> = access %u, 1i
+    %17:f32 = load_vector_element %16, 0i
+    store_vector_element %15, 1i, %17
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
index a99fb35..b8b2652 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<uniform, mat2x3<f16>, read> = var @binding_point(0, 0)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
+%i = func():i32 {
+  $B2: {
     %4:i32 = load %counter
     %5:i32 = add %4, 1i
     store %counter, %5
@@ -14,13 +14,16 @@
     ret %6
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_m:ptr<uniform, mat2x3<f16>, read> = let %m
     %9:i32 = call %i
-    %p_m_i:ptr<uniform, vec3<f16>, read> = access %p_m, %9
-    %l_m:mat2x3<f16> = load %p_m
-    %l_m_i:vec3<f16> = load %p_m_i
+    %10:ptr<uniform, vec3<f16>, read> = access %p_m, %9
+    %p_m_i:ptr<uniform, vec3<f16>, read> = let %10
+    %12:mat2x3<f16> = load %p_m
+    %l_m:mat2x3<f16> = let %12
+    %14:vec3<f16> = load %p_m_i
+    %l_m_i:vec3<f16> = let %14
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/static_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/static_index_via_ptr.wgsl.expected.ir.msl
index 9b7c840..3507c2d 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/static_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/static_index_via_ptr.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<uniform, mat2x3<f16>, read> = var @binding_point(0, 0)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
+%i = func():i32 {
+  $B2: {
     %4:i32 = load %counter
     %5:i32 = add %4, 1i
     store %counter, %5
@@ -14,12 +14,15 @@
     ret %6
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_m:ptr<uniform, mat2x3<f16>, read> = let %m
-    %p_m_1:ptr<uniform, vec3<f16>, read> = access %p_m, 1i
-    %l_m:mat2x3<f16> = load %p_m
-    %l_m_1:vec3<f16> = load %p_m_1
+    %9:ptr<uniform, vec3<f16>, read> = access %p_m, 1i
+    %p_m_1:ptr<uniform, vec3<f16>, read> = let %9
+    %11:mat2x3<f16> = load %p_m
+    %l_m:mat2x3<f16> = let %11
+    %13:vec3<f16> = load %p_m_1
+    %l_m_1:vec3<f16> = let %13
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/to_builtin.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/to_builtin.wgsl.expected.ir.msl
index aa59475..07a3a53 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/to_builtin.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/to_builtin.wgsl.expected.ir.msl
@@ -1,21 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat2x3<f16>, read> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %3:mat2x3<f16> = load %u
-    %t:mat3x2<f16> = transpose %3
-    %5:ptr<uniform, vec3<f16>, read> = access %u, 1i
-    %6:vec3<f16> = load %5
-    %l:f16 = length %6
-    %8:ptr<uniform, vec3<f16>, read> = access %u, 0i
-    %9:vec3<f16> = load %8
-    %10:vec3<f16> = swizzle %9, zxy
-    %11:f16 = access %10, 0u
-    %a:f16 = abs %11
+    %4:mat3x2<f16> = transpose %3
+    %t:mat3x2<f16> = let %4
+    %6:ptr<uniform, vec3<f16>, read> = access %u, 1i
+    %7:vec3<f16> = load %6
+    %8:f16 = length %7
+    %l:f16 = let %8
+    %10:ptr<uniform, vec3<f16>, read> = access %u, 0i
+    %11:vec3<f16> = load %10
+    %12:vec3<f16> = swizzle %11, zxy
+    %13:f16 = access %12, 0u
+    %14:f16 = abs %13
+    %a:f16 = let %14
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/to_fn.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/to_fn.wgsl.expected.ir.msl
index 00839af..2ca0e5a 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/to_fn.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/to_fn.wgsl.expected.ir.msl
@@ -1,26 +1,26 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat2x3<f16>, read> = var @binding_point(0, 0)
 }
 
-%a = func(%m:mat2x3<f16>):void -> %b2 {
-  %b2 = block {
+%a = func(%m:mat2x3<f16>):void {
+  $B2: {
     ret
   }
 }
-%b = func(%v:vec3<f16>):void -> %b3 {
-  %b3 = block {
+%b = func(%v:vec3<f16>):void {
+  $B3: {
     ret
   }
 }
-%c = func(%f:f16):void -> %b4 {
-  %b4 = block {
+%c = func(%f:f16):void {
+  $B4: {
     ret
   }
 }
-%f_1 = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {  # %f_1: 'f'
-  %b5 = block {
+%f_1 = @compute @workgroup_size(1, 1, 1) func():void {  # %f_1: 'f'
+  $B5: {
     %9:mat2x3<f16> = load %u
     %10:void = call %a, %9
     %11:ptr<uniform, vec3<f16>, read> = access %u, 1i
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/to_private.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/to_private.wgsl.expected.ir.msl
index 4ad5f1d..7c3e9bb 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/to_private.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/to_private.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat2x3<f16>, read> = var @binding_point(0, 0)
   %p:ptr<private, mat2x3<f16>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat2x3<f16> = load %u
     store %p, %4
     %5:ptr<private, vec3<f16>, read_write> = access %p, 1i
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/to_storage.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/to_storage.wgsl.expected.ir.msl
index 3ad6649..05e28bd 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/to_storage.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/to_storage.wgsl.expected.ir.msl
@@ -1,27 +1,38 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat2x3<f16>, read> = var @binding_point(0, 0)
   %s:ptr<storage, mat2x3<f16>, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat2x3<f16> = load %u
-    store %s, %4
-    %5:ptr<storage, vec3<f16>, read_write> = access %s, 1i
-    %6:ptr<uniform, vec3<f16>, read> = access %u, 0i
-    %7:vec3<f16> = load %6
-    store %5, %7
-    %8:ptr<storage, vec3<f16>, read_write> = access %s, 1i
-    %9:ptr<uniform, vec3<f16>, read> = access %u, 0i
-    %10:vec3<f16> = load %9
-    %11:vec3<f16> = swizzle %10, zxy
-    store %8, %11
-    %12:ptr<storage, vec3<f16>, read_write> = access %s, 0i
-    %13:ptr<uniform, vec3<f16>, read> = access %u, 1i
-    %14:f16 = load_vector_element %13, 0i
-    store_vector_element %12, 1i, %14
+    %5:void = call %tint_store_and_preserve_padding, %s, %4
+    %7:ptr<storage, vec3<f16>, read_write> = access %s, 1i
+    %8:ptr<uniform, vec3<f16>, read> = access %u, 0i
+    %9:vec3<f16> = load %8
+    store %7, %9
+    %10:ptr<storage, vec3<f16>, read_write> = access %s, 1i
+    %11:ptr<uniform, vec3<f16>, read> = access %u, 0i
+    %12:vec3<f16> = load %11
+    %13:vec3<f16> = swizzle %12, zxy
+    store %10, %13
+    %14:ptr<storage, vec3<f16>, read_write> = access %s, 0i
+    %15:ptr<uniform, vec3<f16>, read> = access %u, 1i
+    %16:f16 = load_vector_element %15, 0i
+    store_vector_element %14, 1i, %16
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat2x3<f16>, read_write>, %value_param:mat2x3<f16>):void {
+  $B3: {
+    %19:ptr<storage, vec3<f16>, read_write> = access %target, 0u
+    %20:vec3<f16> = access %value_param, 0u
+    store %19, %20
+    %21:ptr<storage, vec3<f16>, read_write> = access %target, 1u
+    %22:vec3<f16> = access %value_param, 1u
+    store %21, %22
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/to_workgroup.wgsl.expected.ir.msl
index 944ad65..2a286d3 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/to_workgroup.wgsl.expected.ir.msl
@@ -1,27 +1,35 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat2x3<f16>, read> = var @binding_point(0, 0)
   %w:ptr<workgroup, mat2x3<f16>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:mat2x3<f16> = load %u
-    store %w, %4
-    %5:ptr<workgroup, vec3<f16>, read_write> = access %w, 1i
-    %6:ptr<uniform, vec3<f16>, read> = access %u, 0i
-    %7:vec3<f16> = load %6
-    store %5, %7
+%f = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B2: {
+    %5:bool = eq %tint_local_index, 0u
+    if %5 [t: $B3] {  # if_1
+      $B3: {  # true
+        store %w, mat2x3<f16>(vec3<f16>(0.0h))
+        exit_if  # if_1
+      }
+    }
+    %6:void = msl.threadgroup_barrier 4u
+    %7:mat2x3<f16> = load %u
+    store %w, %7
     %8:ptr<workgroup, vec3<f16>, read_write> = access %w, 1i
     %9:ptr<uniform, vec3<f16>, read> = access %u, 0i
     %10:vec3<f16> = load %9
-    %11:vec3<f16> = swizzle %10, zxy
-    store %8, %11
-    %12:ptr<workgroup, vec3<f16>, read_write> = access %w, 0i
-    %13:ptr<uniform, vec3<f16>, read> = access %u, 1i
-    %14:f16 = load_vector_element %13, 0i
-    store_vector_element %12, 1i, %14
+    store %8, %10
+    %11:ptr<workgroup, vec3<f16>, read_write> = access %w, 1i
+    %12:ptr<uniform, vec3<f16>, read> = access %u, 0i
+    %13:vec3<f16> = load %12
+    %14:vec3<f16> = swizzle %13, zxy
+    store %11, %14
+    %15:ptr<workgroup, vec3<f16>, read_write> = access %w, 0i
+    %16:ptr<uniform, vec3<f16>, read> = access %u, 1i
+    %17:f16 = load_vector_element %16, 0i
+    store_vector_element %15, 1i, %17
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
index d397864..b132429 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<uniform, mat2x3<f32>, read> = var @binding_point(0, 0)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
+%i = func():i32 {
+  $B2: {
     %4:i32 = load %counter
     %5:i32 = add %4, 1i
     store %counter, %5
@@ -14,13 +14,16 @@
     ret %6
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_m:ptr<uniform, mat2x3<f32>, read> = let %m
     %9:i32 = call %i
-    %p_m_i:ptr<uniform, vec3<f32>, read> = access %p_m, %9
-    %l_m:mat2x3<f32> = load %p_m
-    %l_m_i:vec3<f32> = load %p_m_i
+    %10:ptr<uniform, vec3<f32>, read> = access %p_m, %9
+    %p_m_i:ptr<uniform, vec3<f32>, read> = let %10
+    %12:mat2x3<f32> = load %p_m
+    %l_m:mat2x3<f32> = let %12
+    %14:vec3<f32> = load %p_m_i
+    %l_m_i:vec3<f32> = let %14
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/static_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/static_index_via_ptr.wgsl.expected.ir.msl
index ef68a506..3008eb9 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/static_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/static_index_via_ptr.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<uniform, mat2x3<f32>, read> = var @binding_point(0, 0)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
+%i = func():i32 {
+  $B2: {
     %4:i32 = load %counter
     %5:i32 = add %4, 1i
     store %counter, %5
@@ -14,12 +14,15 @@
     ret %6
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_m:ptr<uniform, mat2x3<f32>, read> = let %m
-    %p_m_1:ptr<uniform, vec3<f32>, read> = access %p_m, 1i
-    %l_m:mat2x3<f32> = load %p_m
-    %l_m_1:vec3<f32> = load %p_m_1
+    %9:ptr<uniform, vec3<f32>, read> = access %p_m, 1i
+    %p_m_1:ptr<uniform, vec3<f32>, read> = let %9
+    %11:mat2x3<f32> = load %p_m
+    %l_m:mat2x3<f32> = let %11
+    %13:vec3<f32> = load %p_m_1
+    %l_m_1:vec3<f32> = let %13
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_builtin.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_builtin.wgsl.expected.ir.msl
index cc3b659..c2ff7b7 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_builtin.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_builtin.wgsl.expected.ir.msl
@@ -1,21 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat2x3<f32>, read> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %3:mat2x3<f32> = load %u
-    %t:mat3x2<f32> = transpose %3
-    %5:ptr<uniform, vec3<f32>, read> = access %u, 1i
-    %6:vec3<f32> = load %5
-    %l:f32 = length %6
-    %8:ptr<uniform, vec3<f32>, read> = access %u, 0i
-    %9:vec3<f32> = load %8
-    %10:vec3<f32> = swizzle %9, zxy
-    %11:f32 = access %10, 0u
-    %a:f32 = abs %11
+    %4:mat3x2<f32> = transpose %3
+    %t:mat3x2<f32> = let %4
+    %6:ptr<uniform, vec3<f32>, read> = access %u, 1i
+    %7:vec3<f32> = load %6
+    %8:f32 = length %7
+    %l:f32 = let %8
+    %10:ptr<uniform, vec3<f32>, read> = access %u, 0i
+    %11:vec3<f32> = load %10
+    %12:vec3<f32> = swizzle %11, zxy
+    %13:f32 = access %12, 0u
+    %14:f32 = abs %13
+    %a:f32 = let %14
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_fn.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_fn.wgsl.expected.ir.msl
index c4d09fb..c596a51 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_fn.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_fn.wgsl.expected.ir.msl
@@ -1,26 +1,26 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat2x3<f32>, read> = var @binding_point(0, 0)
 }
 
-%a = func(%m:mat2x3<f32>):void -> %b2 {
-  %b2 = block {
+%a = func(%m:mat2x3<f32>):void {
+  $B2: {
     ret
   }
 }
-%b = func(%v:vec3<f32>):void -> %b3 {
-  %b3 = block {
+%b = func(%v:vec3<f32>):void {
+  $B3: {
     ret
   }
 }
-%c = func(%f:f32):void -> %b4 {
-  %b4 = block {
+%c = func(%f:f32):void {
+  $B4: {
     ret
   }
 }
-%f_1 = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {  # %f_1: 'f'
-  %b5 = block {
+%f_1 = @compute @workgroup_size(1, 1, 1) func():void {  # %f_1: 'f'
+  $B5: {
     %9:mat2x3<f32> = load %u
     %10:void = call %a, %9
     %11:ptr<uniform, vec3<f32>, read> = access %u, 1i
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_private.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_private.wgsl.expected.ir.msl
index 23c7804..0fa40e0 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_private.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_private.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat2x3<f32>, read> = var @binding_point(0, 0)
   %p:ptr<private, mat2x3<f32>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat2x3<f32> = load %u
     store %p, %4
     %5:ptr<private, vec3<f32>, read_write> = access %p, 1i
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_storage.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_storage.wgsl.expected.ir.msl
index b4b5227..3f43331 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_storage.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_storage.wgsl.expected.ir.msl
@@ -1,27 +1,38 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat2x3<f32>, read> = var @binding_point(0, 0)
   %s:ptr<storage, mat2x3<f32>, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat2x3<f32> = load %u
-    store %s, %4
-    %5:ptr<storage, vec3<f32>, read_write> = access %s, 1i
-    %6:ptr<uniform, vec3<f32>, read> = access %u, 0i
-    %7:vec3<f32> = load %6
-    store %5, %7
-    %8:ptr<storage, vec3<f32>, read_write> = access %s, 1i
-    %9:ptr<uniform, vec3<f32>, read> = access %u, 0i
-    %10:vec3<f32> = load %9
-    %11:vec3<f32> = swizzle %10, zxy
-    store %8, %11
-    %12:ptr<storage, vec3<f32>, read_write> = access %s, 0i
-    %13:ptr<uniform, vec3<f32>, read> = access %u, 1i
-    %14:f32 = load_vector_element %13, 0i
-    store_vector_element %12, 1i, %14
+    %5:void = call %tint_store_and_preserve_padding, %s, %4
+    %7:ptr<storage, vec3<f32>, read_write> = access %s, 1i
+    %8:ptr<uniform, vec3<f32>, read> = access %u, 0i
+    %9:vec3<f32> = load %8
+    store %7, %9
+    %10:ptr<storage, vec3<f32>, read_write> = access %s, 1i
+    %11:ptr<uniform, vec3<f32>, read> = access %u, 0i
+    %12:vec3<f32> = load %11
+    %13:vec3<f32> = swizzle %12, zxy
+    store %10, %13
+    %14:ptr<storage, vec3<f32>, read_write> = access %s, 0i
+    %15:ptr<uniform, vec3<f32>, read> = access %u, 1i
+    %16:f32 = load_vector_element %15, 0i
+    store_vector_element %14, 1i, %16
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat2x3<f32>, read_write>, %value_param:mat2x3<f32>):void {
+  $B3: {
+    %19:ptr<storage, vec3<f32>, read_write> = access %target, 0u
+    %20:vec3<f32> = access %value_param, 0u
+    store %19, %20
+    %21:ptr<storage, vec3<f32>, read_write> = access %target, 1u
+    %22:vec3<f32> = access %value_param, 1u
+    store %21, %22
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_workgroup.wgsl.expected.ir.msl
index 3decd16..93c51a4 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_workgroup.wgsl.expected.ir.msl
@@ -1,27 +1,35 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat2x3<f32>, read> = var @binding_point(0, 0)
   %w:ptr<workgroup, mat2x3<f32>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:mat2x3<f32> = load %u
-    store %w, %4
-    %5:ptr<workgroup, vec3<f32>, read_write> = access %w, 1i
-    %6:ptr<uniform, vec3<f32>, read> = access %u, 0i
-    %7:vec3<f32> = load %6
-    store %5, %7
+%f = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B2: {
+    %5:bool = eq %tint_local_index, 0u
+    if %5 [t: $B3] {  # if_1
+      $B3: {  # true
+        store %w, mat2x3<f32>(vec3<f32>(0.0f))
+        exit_if  # if_1
+      }
+    }
+    %6:void = msl.threadgroup_barrier 4u
+    %7:mat2x3<f32> = load %u
+    store %w, %7
     %8:ptr<workgroup, vec3<f32>, read_write> = access %w, 1i
     %9:ptr<uniform, vec3<f32>, read> = access %u, 0i
     %10:vec3<f32> = load %9
-    %11:vec3<f32> = swizzle %10, zxy
-    store %8, %11
-    %12:ptr<workgroup, vec3<f32>, read_write> = access %w, 0i
-    %13:ptr<uniform, vec3<f32>, read> = access %u, 1i
-    %14:f32 = load_vector_element %13, 0i
-    store_vector_element %12, 1i, %14
+    store %8, %10
+    %11:ptr<workgroup, vec3<f32>, read_write> = access %w, 1i
+    %12:ptr<uniform, vec3<f32>, read> = access %u, 0i
+    %13:vec3<f32> = load %12
+    %14:vec3<f32> = swizzle %13, zxy
+    store %11, %14
+    %15:ptr<workgroup, vec3<f32>, read_write> = access %w, 0i
+    %16:ptr<uniform, vec3<f32>, read> = access %u, 1i
+    %17:f32 = load_vector_element %16, 0i
+    store_vector_element %15, 1i, %17
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
index e0961a0..6d5e6ec 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<uniform, mat2x4<f16>, read> = var @binding_point(0, 0)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
+%i = func():i32 {
+  $B2: {
     %4:i32 = load %counter
     %5:i32 = add %4, 1i
     store %counter, %5
@@ -14,13 +14,16 @@
     ret %6
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_m:ptr<uniform, mat2x4<f16>, read> = let %m
     %9:i32 = call %i
-    %p_m_i:ptr<uniform, vec4<f16>, read> = access %p_m, %9
-    %l_m:mat2x4<f16> = load %p_m
-    %l_m_i:vec4<f16> = load %p_m_i
+    %10:ptr<uniform, vec4<f16>, read> = access %p_m, %9
+    %p_m_i:ptr<uniform, vec4<f16>, read> = let %10
+    %12:mat2x4<f16> = load %p_m
+    %l_m:mat2x4<f16> = let %12
+    %14:vec4<f16> = load %p_m_i
+    %l_m_i:vec4<f16> = let %14
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/static_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/static_index_via_ptr.wgsl.expected.ir.msl
index 391ff69..9271acf 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/static_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/static_index_via_ptr.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<uniform, mat2x4<f16>, read> = var @binding_point(0, 0)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
+%i = func():i32 {
+  $B2: {
     %4:i32 = load %counter
     %5:i32 = add %4, 1i
     store %counter, %5
@@ -14,12 +14,15 @@
     ret %6
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_m:ptr<uniform, mat2x4<f16>, read> = let %m
-    %p_m_1:ptr<uniform, vec4<f16>, read> = access %p_m, 1i
-    %l_m:mat2x4<f16> = load %p_m
-    %l_m_1:vec4<f16> = load %p_m_1
+    %9:ptr<uniform, vec4<f16>, read> = access %p_m, 1i
+    %p_m_1:ptr<uniform, vec4<f16>, read> = let %9
+    %11:mat2x4<f16> = load %p_m
+    %l_m:mat2x4<f16> = let %11
+    %13:vec4<f16> = load %p_m_1
+    %l_m_1:vec4<f16> = let %13
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/to_builtin.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/to_builtin.wgsl.expected.ir.msl
index bd0dd78..5042f28 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/to_builtin.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/to_builtin.wgsl.expected.ir.msl
@@ -1,21 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat2x4<f16>, read> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %3:mat2x4<f16> = load %u
-    %t:mat4x2<f16> = transpose %3
-    %5:ptr<uniform, vec4<f16>, read> = access %u, 1i
-    %6:vec4<f16> = load %5
-    %l:f16 = length %6
-    %8:ptr<uniform, vec4<f16>, read> = access %u, 0i
-    %9:vec4<f16> = load %8
-    %10:vec4<f16> = swizzle %9, ywxz
-    %11:f16 = access %10, 0u
-    %a:f16 = abs %11
+    %4:mat4x2<f16> = transpose %3
+    %t:mat4x2<f16> = let %4
+    %6:ptr<uniform, vec4<f16>, read> = access %u, 1i
+    %7:vec4<f16> = load %6
+    %8:f16 = length %7
+    %l:f16 = let %8
+    %10:ptr<uniform, vec4<f16>, read> = access %u, 0i
+    %11:vec4<f16> = load %10
+    %12:vec4<f16> = swizzle %11, ywxz
+    %13:f16 = access %12, 0u
+    %14:f16 = abs %13
+    %a:f16 = let %14
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/to_fn.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/to_fn.wgsl.expected.ir.msl
index 8d97bfc..1223365 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/to_fn.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/to_fn.wgsl.expected.ir.msl
@@ -1,26 +1,26 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat2x4<f16>, read> = var @binding_point(0, 0)
 }
 
-%a = func(%m:mat2x4<f16>):void -> %b2 {
-  %b2 = block {
+%a = func(%m:mat2x4<f16>):void {
+  $B2: {
     ret
   }
 }
-%b = func(%v:vec4<f16>):void -> %b3 {
-  %b3 = block {
+%b = func(%v:vec4<f16>):void {
+  $B3: {
     ret
   }
 }
-%c = func(%f:f16):void -> %b4 {
-  %b4 = block {
+%c = func(%f:f16):void {
+  $B4: {
     ret
   }
 }
-%f_1 = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {  # %f_1: 'f'
-  %b5 = block {
+%f_1 = @compute @workgroup_size(1, 1, 1) func():void {  # %f_1: 'f'
+  $B5: {
     %9:mat2x4<f16> = load %u
     %10:void = call %a, %9
     %11:ptr<uniform, vec4<f16>, read> = access %u, 1i
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/to_private.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/to_private.wgsl.expected.ir.msl
index 95f8ed8..242ee99 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/to_private.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/to_private.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat2x4<f16>, read> = var @binding_point(0, 0)
   %p:ptr<private, mat2x4<f16>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat2x4<f16> = load %u
     store %p, %4
     %5:ptr<private, vec4<f16>, read_write> = access %p, 1i
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/to_storage.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/to_storage.wgsl.expected.ir.msl
index 9285b78..c10575a 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/to_storage.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/to_storage.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat2x4<f16>, read> = var @binding_point(0, 0)
   %s:ptr<storage, mat2x4<f16>, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat2x4<f16> = load %u
     store %s, %4
     %5:ptr<storage, vec4<f16>, read_write> = access %s, 1i
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/to_workgroup.wgsl.expected.ir.msl
index f997446..9a8c6ea 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/to_workgroup.wgsl.expected.ir.msl
@@ -1,27 +1,35 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat2x4<f16>, read> = var @binding_point(0, 0)
   %w:ptr<workgroup, mat2x4<f16>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:mat2x4<f16> = load %u
-    store %w, %4
-    %5:ptr<workgroup, vec4<f16>, read_write> = access %w, 1i
-    %6:ptr<uniform, vec4<f16>, read> = access %u, 0i
-    %7:vec4<f16> = load %6
-    store %5, %7
+%f = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B2: {
+    %5:bool = eq %tint_local_index, 0u
+    if %5 [t: $B3] {  # if_1
+      $B3: {  # true
+        store %w, mat2x4<f16>(vec4<f16>(0.0h))
+        exit_if  # if_1
+      }
+    }
+    %6:void = msl.threadgroup_barrier 4u
+    %7:mat2x4<f16> = load %u
+    store %w, %7
     %8:ptr<workgroup, vec4<f16>, read_write> = access %w, 1i
     %9:ptr<uniform, vec4<f16>, read> = access %u, 0i
     %10:vec4<f16> = load %9
-    %11:vec4<f16> = swizzle %10, ywxz
-    store %8, %11
-    %12:ptr<workgroup, vec4<f16>, read_write> = access %w, 0i
-    %13:ptr<uniform, vec4<f16>, read> = access %u, 1i
-    %14:f16 = load_vector_element %13, 0i
-    store_vector_element %12, 1i, %14
+    store %8, %10
+    %11:ptr<workgroup, vec4<f16>, read_write> = access %w, 1i
+    %12:ptr<uniform, vec4<f16>, read> = access %u, 0i
+    %13:vec4<f16> = load %12
+    %14:vec4<f16> = swizzle %13, ywxz
+    store %11, %14
+    %15:ptr<workgroup, vec4<f16>, read_write> = access %w, 0i
+    %16:ptr<uniform, vec4<f16>, read> = access %u, 1i
+    %17:f16 = load_vector_element %16, 0i
+    store_vector_element %15, 1i, %17
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
index 9900f21..d37a124 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<uniform, mat2x4<f32>, read> = var @binding_point(0, 0)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
+%i = func():i32 {
+  $B2: {
     %4:i32 = load %counter
     %5:i32 = add %4, 1i
     store %counter, %5
@@ -14,13 +14,16 @@
     ret %6
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_m:ptr<uniform, mat2x4<f32>, read> = let %m
     %9:i32 = call %i
-    %p_m_i:ptr<uniform, vec4<f32>, read> = access %p_m, %9
-    %l_m:mat2x4<f32> = load %p_m
-    %l_m_i:vec4<f32> = load %p_m_i
+    %10:ptr<uniform, vec4<f32>, read> = access %p_m, %9
+    %p_m_i:ptr<uniform, vec4<f32>, read> = let %10
+    %12:mat2x4<f32> = load %p_m
+    %l_m:mat2x4<f32> = let %12
+    %14:vec4<f32> = load %p_m_i
+    %l_m_i:vec4<f32> = let %14
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/static_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/static_index_via_ptr.wgsl.expected.ir.msl
index 73ee6ec..ed2f0fd 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/static_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/static_index_via_ptr.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<uniform, mat2x4<f32>, read> = var @binding_point(0, 0)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
+%i = func():i32 {
+  $B2: {
     %4:i32 = load %counter
     %5:i32 = add %4, 1i
     store %counter, %5
@@ -14,12 +14,15 @@
     ret %6
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_m:ptr<uniform, mat2x4<f32>, read> = let %m
-    %p_m_1:ptr<uniform, vec4<f32>, read> = access %p_m, 1i
-    %l_m:mat2x4<f32> = load %p_m
-    %l_m_1:vec4<f32> = load %p_m_1
+    %9:ptr<uniform, vec4<f32>, read> = access %p_m, 1i
+    %p_m_1:ptr<uniform, vec4<f32>, read> = let %9
+    %11:mat2x4<f32> = load %p_m
+    %l_m:mat2x4<f32> = let %11
+    %13:vec4<f32> = load %p_m_1
+    %l_m_1:vec4<f32> = let %13
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/to_builtin.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/to_builtin.wgsl.expected.ir.msl
index 030a9a5..51feb64 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/to_builtin.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/to_builtin.wgsl.expected.ir.msl
@@ -1,21 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat2x4<f32>, read> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %3:mat2x4<f32> = load %u
-    %t:mat4x2<f32> = transpose %3
-    %5:ptr<uniform, vec4<f32>, read> = access %u, 1i
-    %6:vec4<f32> = load %5
-    %l:f32 = length %6
-    %8:ptr<uniform, vec4<f32>, read> = access %u, 0i
-    %9:vec4<f32> = load %8
-    %10:vec4<f32> = swizzle %9, ywxz
-    %11:f32 = access %10, 0u
-    %a:f32 = abs %11
+    %4:mat4x2<f32> = transpose %3
+    %t:mat4x2<f32> = let %4
+    %6:ptr<uniform, vec4<f32>, read> = access %u, 1i
+    %7:vec4<f32> = load %6
+    %8:f32 = length %7
+    %l:f32 = let %8
+    %10:ptr<uniform, vec4<f32>, read> = access %u, 0i
+    %11:vec4<f32> = load %10
+    %12:vec4<f32> = swizzle %11, ywxz
+    %13:f32 = access %12, 0u
+    %14:f32 = abs %13
+    %a:f32 = let %14
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/to_fn.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/to_fn.wgsl.expected.ir.msl
index 399c288..c85b6fb 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/to_fn.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/to_fn.wgsl.expected.ir.msl
@@ -1,26 +1,26 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat2x4<f32>, read> = var @binding_point(0, 0)
 }
 
-%a = func(%m:mat2x4<f32>):void -> %b2 {
-  %b2 = block {
+%a = func(%m:mat2x4<f32>):void {
+  $B2: {
     ret
   }
 }
-%b = func(%v:vec4<f32>):void -> %b3 {
-  %b3 = block {
+%b = func(%v:vec4<f32>):void {
+  $B3: {
     ret
   }
 }
-%c = func(%f:f32):void -> %b4 {
-  %b4 = block {
+%c = func(%f:f32):void {
+  $B4: {
     ret
   }
 }
-%f_1 = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {  # %f_1: 'f'
-  %b5 = block {
+%f_1 = @compute @workgroup_size(1, 1, 1) func():void {  # %f_1: 'f'
+  $B5: {
     %9:mat2x4<f32> = load %u
     %10:void = call %a, %9
     %11:ptr<uniform, vec4<f32>, read> = access %u, 1i
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/to_private.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/to_private.wgsl.expected.ir.msl
index 1b5d8ef..a435173 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/to_private.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/to_private.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat2x4<f32>, read> = var @binding_point(0, 0)
   %p:ptr<private, mat2x4<f32>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat2x4<f32> = load %u
     store %p, %4
     %5:ptr<private, vec4<f32>, read_write> = access %p, 1i
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/to_storage.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/to_storage.wgsl.expected.ir.msl
index 69f3a2f..776849d 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/to_storage.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/to_storage.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat2x4<f32>, read> = var @binding_point(0, 0)
   %s:ptr<storage, mat2x4<f32>, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat2x4<f32> = load %u
     store %s, %4
     %5:ptr<storage, vec4<f32>, read_write> = access %s, 1i
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/to_workgroup.wgsl.expected.ir.msl
index 1af4b3e..0a303a5 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/to_workgroup.wgsl.expected.ir.msl
@@ -1,27 +1,35 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat2x4<f32>, read> = var @binding_point(0, 0)
   %w:ptr<workgroup, mat2x4<f32>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:mat2x4<f32> = load %u
-    store %w, %4
-    %5:ptr<workgroup, vec4<f32>, read_write> = access %w, 1i
-    %6:ptr<uniform, vec4<f32>, read> = access %u, 0i
-    %7:vec4<f32> = load %6
-    store %5, %7
+%f = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B2: {
+    %5:bool = eq %tint_local_index, 0u
+    if %5 [t: $B3] {  # if_1
+      $B3: {  # true
+        store %w, mat2x4<f32>(vec4<f32>(0.0f))
+        exit_if  # if_1
+      }
+    }
+    %6:void = msl.threadgroup_barrier 4u
+    %7:mat2x4<f32> = load %u
+    store %w, %7
     %8:ptr<workgroup, vec4<f32>, read_write> = access %w, 1i
     %9:ptr<uniform, vec4<f32>, read> = access %u, 0i
     %10:vec4<f32> = load %9
-    %11:vec4<f32> = swizzle %10, ywxz
-    store %8, %11
-    %12:ptr<workgroup, vec4<f32>, read_write> = access %w, 0i
-    %13:ptr<uniform, vec4<f32>, read> = access %u, 1i
-    %14:f32 = load_vector_element %13, 0i
-    store_vector_element %12, 1i, %14
+    store %8, %10
+    %11:ptr<workgroup, vec4<f32>, read_write> = access %w, 1i
+    %12:ptr<uniform, vec4<f32>, read> = access %u, 0i
+    %13:vec4<f32> = load %12
+    %14:vec4<f32> = swizzle %13, ywxz
+    store %11, %14
+    %15:ptr<workgroup, vec4<f32>, read_write> = access %w, 0i
+    %16:ptr<uniform, vec4<f32>, read> = access %u, 1i
+    %17:f32 = load_vector_element %16, 0i
+    store_vector_element %15, 1i, %17
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
index 2bdc90a..b9cb731 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<uniform, mat3x2<f16>, read> = var @binding_point(0, 0)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
+%i = func():i32 {
+  $B2: {
     %4:i32 = load %counter
     %5:i32 = add %4, 1i
     store %counter, %5
@@ -14,13 +14,16 @@
     ret %6
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_m:ptr<uniform, mat3x2<f16>, read> = let %m
     %9:i32 = call %i
-    %p_m_i:ptr<uniform, vec2<f16>, read> = access %p_m, %9
-    %l_m:mat3x2<f16> = load %p_m
-    %l_m_i:vec2<f16> = load %p_m_i
+    %10:ptr<uniform, vec2<f16>, read> = access %p_m, %9
+    %p_m_i:ptr<uniform, vec2<f16>, read> = let %10
+    %12:mat3x2<f16> = load %p_m
+    %l_m:mat3x2<f16> = let %12
+    %14:vec2<f16> = load %p_m_i
+    %l_m_i:vec2<f16> = let %14
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/static_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/static_index_via_ptr.wgsl.expected.ir.msl
index 0278175..7b1726b 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/static_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/static_index_via_ptr.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<uniform, mat3x2<f16>, read> = var @binding_point(0, 0)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
+%i = func():i32 {
+  $B2: {
     %4:i32 = load %counter
     %5:i32 = add %4, 1i
     store %counter, %5
@@ -14,12 +14,15 @@
     ret %6
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_m:ptr<uniform, mat3x2<f16>, read> = let %m
-    %p_m_1:ptr<uniform, vec2<f16>, read> = access %p_m, 1i
-    %l_m:mat3x2<f16> = load %p_m
-    %l_m_1:vec2<f16> = load %p_m_1
+    %9:ptr<uniform, vec2<f16>, read> = access %p_m, 1i
+    %p_m_1:ptr<uniform, vec2<f16>, read> = let %9
+    %11:mat3x2<f16> = load %p_m
+    %l_m:mat3x2<f16> = let %11
+    %13:vec2<f16> = load %p_m_1
+    %l_m_1:vec2<f16> = let %13
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/to_builtin.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/to_builtin.wgsl.expected.ir.msl
index df1dcc7..e904393 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/to_builtin.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/to_builtin.wgsl.expected.ir.msl
@@ -1,21 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat3x2<f16>, read> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %3:mat3x2<f16> = load %u
-    %t:mat2x3<f16> = transpose %3
-    %5:ptr<uniform, vec2<f16>, read> = access %u, 1i
-    %6:vec2<f16> = load %5
-    %l:f16 = length %6
-    %8:ptr<uniform, vec2<f16>, read> = access %u, 0i
-    %9:vec2<f16> = load %8
-    %10:vec2<f16> = swizzle %9, yx
-    %11:f16 = access %10, 0u
-    %a:f16 = abs %11
+    %4:mat2x3<f16> = transpose %3
+    %t:mat2x3<f16> = let %4
+    %6:ptr<uniform, vec2<f16>, read> = access %u, 1i
+    %7:vec2<f16> = load %6
+    %8:f16 = length %7
+    %l:f16 = let %8
+    %10:ptr<uniform, vec2<f16>, read> = access %u, 0i
+    %11:vec2<f16> = load %10
+    %12:vec2<f16> = swizzle %11, yx
+    %13:f16 = access %12, 0u
+    %14:f16 = abs %13
+    %a:f16 = let %14
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/to_fn.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/to_fn.wgsl.expected.ir.msl
index e8810e1..51d7900 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/to_fn.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/to_fn.wgsl.expected.ir.msl
@@ -1,26 +1,26 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat3x2<f16>, read> = var @binding_point(0, 0)
 }
 
-%a = func(%m:mat3x2<f16>):void -> %b2 {
-  %b2 = block {
+%a = func(%m:mat3x2<f16>):void {
+  $B2: {
     ret
   }
 }
-%b = func(%v:vec2<f16>):void -> %b3 {
-  %b3 = block {
+%b = func(%v:vec2<f16>):void {
+  $B3: {
     ret
   }
 }
-%c = func(%f:f16):void -> %b4 {
-  %b4 = block {
+%c = func(%f:f16):void {
+  $B4: {
     ret
   }
 }
-%f_1 = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {  # %f_1: 'f'
-  %b5 = block {
+%f_1 = @compute @workgroup_size(1, 1, 1) func():void {  # %f_1: 'f'
+  $B5: {
     %9:mat3x2<f16> = load %u
     %10:void = call %a, %9
     %11:ptr<uniform, vec2<f16>, read> = access %u, 1i
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/to_private.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/to_private.wgsl.expected.ir.msl
index b1276af..a0c12b4 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/to_private.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/to_private.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat3x2<f16>, read> = var @binding_point(0, 0)
   %p:ptr<private, mat3x2<f16>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat3x2<f16> = load %u
     store %p, %4
     %5:ptr<private, vec2<f16>, read_write> = access %p, 1i
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/to_storage.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/to_storage.wgsl.expected.ir.msl
index 3f27aea..39104de 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/to_storage.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/to_storage.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat3x2<f16>, read> = var @binding_point(0, 0)
   %s:ptr<storage, mat3x2<f16>, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat3x2<f16> = load %u
     store %s, %4
     %5:ptr<storage, vec2<f16>, read_write> = access %s, 1i
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/to_workgroup.wgsl.expected.ir.msl
index 81f1128..d5fae9d 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/to_workgroup.wgsl.expected.ir.msl
@@ -1,27 +1,35 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat3x2<f16>, read> = var @binding_point(0, 0)
   %w:ptr<workgroup, mat3x2<f16>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:mat3x2<f16> = load %u
-    store %w, %4
-    %5:ptr<workgroup, vec2<f16>, read_write> = access %w, 1i
-    %6:ptr<uniform, vec2<f16>, read> = access %u, 0i
-    %7:vec2<f16> = load %6
-    store %5, %7
+%f = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B2: {
+    %5:bool = eq %tint_local_index, 0u
+    if %5 [t: $B3] {  # if_1
+      $B3: {  # true
+        store %w, mat3x2<f16>(vec2<f16>(0.0h))
+        exit_if  # if_1
+      }
+    }
+    %6:void = msl.threadgroup_barrier 4u
+    %7:mat3x2<f16> = load %u
+    store %w, %7
     %8:ptr<workgroup, vec2<f16>, read_write> = access %w, 1i
     %9:ptr<uniform, vec2<f16>, read> = access %u, 0i
     %10:vec2<f16> = load %9
-    %11:vec2<f16> = swizzle %10, yx
-    store %8, %11
-    %12:ptr<workgroup, vec2<f16>, read_write> = access %w, 0i
-    %13:ptr<uniform, vec2<f16>, read> = access %u, 1i
-    %14:f16 = load_vector_element %13, 0i
-    store_vector_element %12, 1i, %14
+    store %8, %10
+    %11:ptr<workgroup, vec2<f16>, read_write> = access %w, 1i
+    %12:ptr<uniform, vec2<f16>, read> = access %u, 0i
+    %13:vec2<f16> = load %12
+    %14:vec2<f16> = swizzle %13, yx
+    store %11, %14
+    %15:ptr<workgroup, vec2<f16>, read_write> = access %w, 0i
+    %16:ptr<uniform, vec2<f16>, read> = access %u, 1i
+    %17:f16 = load_vector_element %16, 0i
+    store_vector_element %15, 1i, %17
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
index d3d90db..a785ca7 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<uniform, mat3x2<f32>, read> = var @binding_point(0, 0)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
+%i = func():i32 {
+  $B2: {
     %4:i32 = load %counter
     %5:i32 = add %4, 1i
     store %counter, %5
@@ -14,13 +14,16 @@
     ret %6
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_m:ptr<uniform, mat3x2<f32>, read> = let %m
     %9:i32 = call %i
-    %p_m_i:ptr<uniform, vec2<f32>, read> = access %p_m, %9
-    %l_m:mat3x2<f32> = load %p_m
-    %l_m_i:vec2<f32> = load %p_m_i
+    %10:ptr<uniform, vec2<f32>, read> = access %p_m, %9
+    %p_m_i:ptr<uniform, vec2<f32>, read> = let %10
+    %12:mat3x2<f32> = load %p_m
+    %l_m:mat3x2<f32> = let %12
+    %14:vec2<f32> = load %p_m_i
+    %l_m_i:vec2<f32> = let %14
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/static_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/static_index_via_ptr.wgsl.expected.ir.msl
index 18c3cce..4de6f95 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/static_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/static_index_via_ptr.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<uniform, mat3x2<f32>, read> = var @binding_point(0, 0)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
+%i = func():i32 {
+  $B2: {
     %4:i32 = load %counter
     %5:i32 = add %4, 1i
     store %counter, %5
@@ -14,12 +14,15 @@
     ret %6
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_m:ptr<uniform, mat3x2<f32>, read> = let %m
-    %p_m_1:ptr<uniform, vec2<f32>, read> = access %p_m, 1i
-    %l_m:mat3x2<f32> = load %p_m
-    %l_m_1:vec2<f32> = load %p_m_1
+    %9:ptr<uniform, vec2<f32>, read> = access %p_m, 1i
+    %p_m_1:ptr<uniform, vec2<f32>, read> = let %9
+    %11:mat3x2<f32> = load %p_m
+    %l_m:mat3x2<f32> = let %11
+    %13:vec2<f32> = load %p_m_1
+    %l_m_1:vec2<f32> = let %13
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/to_builtin.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/to_builtin.wgsl.expected.ir.msl
index 535ddb0..3f6f8d2 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/to_builtin.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/to_builtin.wgsl.expected.ir.msl
@@ -1,21 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat3x2<f32>, read> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %3:mat3x2<f32> = load %u
-    %t:mat2x3<f32> = transpose %3
-    %5:ptr<uniform, vec2<f32>, read> = access %u, 1i
-    %6:vec2<f32> = load %5
-    %l:f32 = length %6
-    %8:ptr<uniform, vec2<f32>, read> = access %u, 0i
-    %9:vec2<f32> = load %8
-    %10:vec2<f32> = swizzle %9, yx
-    %11:f32 = access %10, 0u
-    %a:f32 = abs %11
+    %4:mat2x3<f32> = transpose %3
+    %t:mat2x3<f32> = let %4
+    %6:ptr<uniform, vec2<f32>, read> = access %u, 1i
+    %7:vec2<f32> = load %6
+    %8:f32 = length %7
+    %l:f32 = let %8
+    %10:ptr<uniform, vec2<f32>, read> = access %u, 0i
+    %11:vec2<f32> = load %10
+    %12:vec2<f32> = swizzle %11, yx
+    %13:f32 = access %12, 0u
+    %14:f32 = abs %13
+    %a:f32 = let %14
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/to_fn.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/to_fn.wgsl.expected.ir.msl
index 28f78bb..33a39ee 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/to_fn.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/to_fn.wgsl.expected.ir.msl
@@ -1,26 +1,26 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat3x2<f32>, read> = var @binding_point(0, 0)
 }
 
-%a = func(%m:mat3x2<f32>):void -> %b2 {
-  %b2 = block {
+%a = func(%m:mat3x2<f32>):void {
+  $B2: {
     ret
   }
 }
-%b = func(%v:vec2<f32>):void -> %b3 {
-  %b3 = block {
+%b = func(%v:vec2<f32>):void {
+  $B3: {
     ret
   }
 }
-%c = func(%f:f32):void -> %b4 {
-  %b4 = block {
+%c = func(%f:f32):void {
+  $B4: {
     ret
   }
 }
-%f_1 = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {  # %f_1: 'f'
-  %b5 = block {
+%f_1 = @compute @workgroup_size(1, 1, 1) func():void {  # %f_1: 'f'
+  $B5: {
     %9:mat3x2<f32> = load %u
     %10:void = call %a, %9
     %11:ptr<uniform, vec2<f32>, read> = access %u, 1i
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/to_private.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/to_private.wgsl.expected.ir.msl
index 98d3c68..f618d23 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/to_private.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/to_private.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat3x2<f32>, read> = var @binding_point(0, 0)
   %p:ptr<private, mat3x2<f32>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat3x2<f32> = load %u
     store %p, %4
     %5:ptr<private, vec2<f32>, read_write> = access %p, 1i
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/to_storage.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/to_storage.wgsl.expected.ir.msl
index 33f2504..a8519a7 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/to_storage.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/to_storage.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat3x2<f32>, read> = var @binding_point(0, 0)
   %s:ptr<storage, mat3x2<f32>, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat3x2<f32> = load %u
     store %s, %4
     %5:ptr<storage, vec2<f32>, read_write> = access %s, 1i
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/to_workgroup.wgsl.expected.ir.msl
index e903ad8..45c60a8 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/to_workgroup.wgsl.expected.ir.msl
@@ -1,27 +1,35 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat3x2<f32>, read> = var @binding_point(0, 0)
   %w:ptr<workgroup, mat3x2<f32>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:mat3x2<f32> = load %u
-    store %w, %4
-    %5:ptr<workgroup, vec2<f32>, read_write> = access %w, 1i
-    %6:ptr<uniform, vec2<f32>, read> = access %u, 0i
-    %7:vec2<f32> = load %6
-    store %5, %7
+%f = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B2: {
+    %5:bool = eq %tint_local_index, 0u
+    if %5 [t: $B3] {  # if_1
+      $B3: {  # true
+        store %w, mat3x2<f32>(vec2<f32>(0.0f))
+        exit_if  # if_1
+      }
+    }
+    %6:void = msl.threadgroup_barrier 4u
+    %7:mat3x2<f32> = load %u
+    store %w, %7
     %8:ptr<workgroup, vec2<f32>, read_write> = access %w, 1i
     %9:ptr<uniform, vec2<f32>, read> = access %u, 0i
     %10:vec2<f32> = load %9
-    %11:vec2<f32> = swizzle %10, yx
-    store %8, %11
-    %12:ptr<workgroup, vec2<f32>, read_write> = access %w, 0i
-    %13:ptr<uniform, vec2<f32>, read> = access %u, 1i
-    %14:f32 = load_vector_element %13, 0i
-    store_vector_element %12, 1i, %14
+    store %8, %10
+    %11:ptr<workgroup, vec2<f32>, read_write> = access %w, 1i
+    %12:ptr<uniform, vec2<f32>, read> = access %u, 0i
+    %13:vec2<f32> = load %12
+    %14:vec2<f32> = swizzle %13, yx
+    store %11, %14
+    %15:ptr<workgroup, vec2<f32>, read_write> = access %w, 0i
+    %16:ptr<uniform, vec2<f32>, read> = access %u, 1i
+    %17:f32 = load_vector_element %16, 0i
+    store_vector_element %15, 1i, %17
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
index 069fa27..723ff77 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<uniform, mat3x3<f16>, read> = var @binding_point(0, 0)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
+%i = func():i32 {
+  $B2: {
     %4:i32 = load %counter
     %5:i32 = add %4, 1i
     store %counter, %5
@@ -14,13 +14,16 @@
     ret %6
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_m:ptr<uniform, mat3x3<f16>, read> = let %m
     %9:i32 = call %i
-    %p_m_i:ptr<uniform, vec3<f16>, read> = access %p_m, %9
-    %l_m:mat3x3<f16> = load %p_m
-    %l_m_i:vec3<f16> = load %p_m_i
+    %10:ptr<uniform, vec3<f16>, read> = access %p_m, %9
+    %p_m_i:ptr<uniform, vec3<f16>, read> = let %10
+    %12:mat3x3<f16> = load %p_m
+    %l_m:mat3x3<f16> = let %12
+    %14:vec3<f16> = load %p_m_i
+    %l_m_i:vec3<f16> = let %14
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/static_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/static_index_via_ptr.wgsl.expected.ir.msl
index 79f04e3..048ef60 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/static_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/static_index_via_ptr.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<uniform, mat3x3<f16>, read> = var @binding_point(0, 0)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
+%i = func():i32 {
+  $B2: {
     %4:i32 = load %counter
     %5:i32 = add %4, 1i
     store %counter, %5
@@ -14,12 +14,15 @@
     ret %6
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_m:ptr<uniform, mat3x3<f16>, read> = let %m
-    %p_m_1:ptr<uniform, vec3<f16>, read> = access %p_m, 1i
-    %l_m:mat3x3<f16> = load %p_m
-    %l_m_1:vec3<f16> = load %p_m_1
+    %9:ptr<uniform, vec3<f16>, read> = access %p_m, 1i
+    %p_m_1:ptr<uniform, vec3<f16>, read> = let %9
+    %11:mat3x3<f16> = load %p_m
+    %l_m:mat3x3<f16> = let %11
+    %13:vec3<f16> = load %p_m_1
+    %l_m_1:vec3<f16> = let %13
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/to_builtin.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/to_builtin.wgsl.expected.ir.msl
index ec69afd..921fbf7 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/to_builtin.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/to_builtin.wgsl.expected.ir.msl
@@ -1,21 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat3x3<f16>, read> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %3:mat3x3<f16> = load %u
-    %t:mat3x3<f16> = transpose %3
-    %5:ptr<uniform, vec3<f16>, read> = access %u, 1i
-    %6:vec3<f16> = load %5
-    %l:f16 = length %6
-    %8:ptr<uniform, vec3<f16>, read> = access %u, 0i
-    %9:vec3<f16> = load %8
-    %10:vec3<f16> = swizzle %9, zxy
-    %11:f16 = access %10, 0u
-    %a:f16 = abs %11
+    %4:mat3x3<f16> = transpose %3
+    %t:mat3x3<f16> = let %4
+    %6:ptr<uniform, vec3<f16>, read> = access %u, 1i
+    %7:vec3<f16> = load %6
+    %8:f16 = length %7
+    %l:f16 = let %8
+    %10:ptr<uniform, vec3<f16>, read> = access %u, 0i
+    %11:vec3<f16> = load %10
+    %12:vec3<f16> = swizzle %11, zxy
+    %13:f16 = access %12, 0u
+    %14:f16 = abs %13
+    %a:f16 = let %14
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/to_fn.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/to_fn.wgsl.expected.ir.msl
index 4ea6635..a19f3fc 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/to_fn.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/to_fn.wgsl.expected.ir.msl
@@ -1,26 +1,26 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat3x3<f16>, read> = var @binding_point(0, 0)
 }
 
-%a = func(%m:mat3x3<f16>):void -> %b2 {
-  %b2 = block {
+%a = func(%m:mat3x3<f16>):void {
+  $B2: {
     ret
   }
 }
-%b = func(%v:vec3<f16>):void -> %b3 {
-  %b3 = block {
+%b = func(%v:vec3<f16>):void {
+  $B3: {
     ret
   }
 }
-%c = func(%f:f16):void -> %b4 {
-  %b4 = block {
+%c = func(%f:f16):void {
+  $B4: {
     ret
   }
 }
-%f_1 = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {  # %f_1: 'f'
-  %b5 = block {
+%f_1 = @compute @workgroup_size(1, 1, 1) func():void {  # %f_1: 'f'
+  $B5: {
     %9:mat3x3<f16> = load %u
     %10:void = call %a, %9
     %11:ptr<uniform, vec3<f16>, read> = access %u, 1i
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/to_private.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/to_private.wgsl.expected.ir.msl
index 9f5ee9d..a6e0aca 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/to_private.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/to_private.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat3x3<f16>, read> = var @binding_point(0, 0)
   %p:ptr<private, mat3x3<f16>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat3x3<f16> = load %u
     store %p, %4
     %5:ptr<private, vec3<f16>, read_write> = access %p, 1i
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/to_storage.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/to_storage.wgsl.expected.ir.msl
index 70a150d..b8d1318 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/to_storage.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/to_storage.wgsl.expected.ir.msl
@@ -1,27 +1,41 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat3x3<f16>, read> = var @binding_point(0, 0)
   %s:ptr<storage, mat3x3<f16>, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat3x3<f16> = load %u
-    store %s, %4
-    %5:ptr<storage, vec3<f16>, read_write> = access %s, 1i
-    %6:ptr<uniform, vec3<f16>, read> = access %u, 0i
-    %7:vec3<f16> = load %6
-    store %5, %7
-    %8:ptr<storage, vec3<f16>, read_write> = access %s, 1i
-    %9:ptr<uniform, vec3<f16>, read> = access %u, 0i
-    %10:vec3<f16> = load %9
-    %11:vec3<f16> = swizzle %10, zxy
-    store %8, %11
-    %12:ptr<storage, vec3<f16>, read_write> = access %s, 0i
-    %13:ptr<uniform, vec3<f16>, read> = access %u, 1i
-    %14:f16 = load_vector_element %13, 0i
-    store_vector_element %12, 1i, %14
+    %5:void = call %tint_store_and_preserve_padding, %s, %4
+    %7:ptr<storage, vec3<f16>, read_write> = access %s, 1i
+    %8:ptr<uniform, vec3<f16>, read> = access %u, 0i
+    %9:vec3<f16> = load %8
+    store %7, %9
+    %10:ptr<storage, vec3<f16>, read_write> = access %s, 1i
+    %11:ptr<uniform, vec3<f16>, read> = access %u, 0i
+    %12:vec3<f16> = load %11
+    %13:vec3<f16> = swizzle %12, zxy
+    store %10, %13
+    %14:ptr<storage, vec3<f16>, read_write> = access %s, 0i
+    %15:ptr<uniform, vec3<f16>, read> = access %u, 1i
+    %16:f16 = load_vector_element %15, 0i
+    store_vector_element %14, 1i, %16
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat3x3<f16>, read_write>, %value_param:mat3x3<f16>):void {
+  $B3: {
+    %19:ptr<storage, vec3<f16>, read_write> = access %target, 0u
+    %20:vec3<f16> = access %value_param, 0u
+    store %19, %20
+    %21:ptr<storage, vec3<f16>, read_write> = access %target, 1u
+    %22:vec3<f16> = access %value_param, 1u
+    store %21, %22
+    %23:ptr<storage, vec3<f16>, read_write> = access %target, 2u
+    %24:vec3<f16> = access %value_param, 2u
+    store %23, %24
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/to_workgroup.wgsl.expected.ir.msl
index 22c48c0..aef9a32 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/to_workgroup.wgsl.expected.ir.msl
@@ -1,27 +1,35 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat3x3<f16>, read> = var @binding_point(0, 0)
   %w:ptr<workgroup, mat3x3<f16>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:mat3x3<f16> = load %u
-    store %w, %4
-    %5:ptr<workgroup, vec3<f16>, read_write> = access %w, 1i
-    %6:ptr<uniform, vec3<f16>, read> = access %u, 0i
-    %7:vec3<f16> = load %6
-    store %5, %7
+%f = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B2: {
+    %5:bool = eq %tint_local_index, 0u
+    if %5 [t: $B3] {  # if_1
+      $B3: {  # true
+        store %w, mat3x3<f16>(vec3<f16>(0.0h))
+        exit_if  # if_1
+      }
+    }
+    %6:void = msl.threadgroup_barrier 4u
+    %7:mat3x3<f16> = load %u
+    store %w, %7
     %8:ptr<workgroup, vec3<f16>, read_write> = access %w, 1i
     %9:ptr<uniform, vec3<f16>, read> = access %u, 0i
     %10:vec3<f16> = load %9
-    %11:vec3<f16> = swizzle %10, zxy
-    store %8, %11
-    %12:ptr<workgroup, vec3<f16>, read_write> = access %w, 0i
-    %13:ptr<uniform, vec3<f16>, read> = access %u, 1i
-    %14:f16 = load_vector_element %13, 0i
-    store_vector_element %12, 1i, %14
+    store %8, %10
+    %11:ptr<workgroup, vec3<f16>, read_write> = access %w, 1i
+    %12:ptr<uniform, vec3<f16>, read> = access %u, 0i
+    %13:vec3<f16> = load %12
+    %14:vec3<f16> = swizzle %13, zxy
+    store %11, %14
+    %15:ptr<workgroup, vec3<f16>, read_write> = access %w, 0i
+    %16:ptr<uniform, vec3<f16>, read> = access %u, 1i
+    %17:f16 = load_vector_element %16, 0i
+    store_vector_element %15, 1i, %17
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
index ee02b29..df56e12 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<uniform, mat3x3<f32>, read> = var @binding_point(0, 0)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
+%i = func():i32 {
+  $B2: {
     %4:i32 = load %counter
     %5:i32 = add %4, 1i
     store %counter, %5
@@ -14,13 +14,16 @@
     ret %6
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_m:ptr<uniform, mat3x3<f32>, read> = let %m
     %9:i32 = call %i
-    %p_m_i:ptr<uniform, vec3<f32>, read> = access %p_m, %9
-    %l_m:mat3x3<f32> = load %p_m
-    %l_m_i:vec3<f32> = load %p_m_i
+    %10:ptr<uniform, vec3<f32>, read> = access %p_m, %9
+    %p_m_i:ptr<uniform, vec3<f32>, read> = let %10
+    %12:mat3x3<f32> = load %p_m
+    %l_m:mat3x3<f32> = let %12
+    %14:vec3<f32> = load %p_m_i
+    %l_m_i:vec3<f32> = let %14
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/static_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/static_index_via_ptr.wgsl.expected.ir.msl
index 0ec69d2c..1cf2551 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/static_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/static_index_via_ptr.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<uniform, mat3x3<f32>, read> = var @binding_point(0, 0)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
+%i = func():i32 {
+  $B2: {
     %4:i32 = load %counter
     %5:i32 = add %4, 1i
     store %counter, %5
@@ -14,12 +14,15 @@
     ret %6
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_m:ptr<uniform, mat3x3<f32>, read> = let %m
-    %p_m_1:ptr<uniform, vec3<f32>, read> = access %p_m, 1i
-    %l_m:mat3x3<f32> = load %p_m
-    %l_m_1:vec3<f32> = load %p_m_1
+    %9:ptr<uniform, vec3<f32>, read> = access %p_m, 1i
+    %p_m_1:ptr<uniform, vec3<f32>, read> = let %9
+    %11:mat3x3<f32> = load %p_m
+    %l_m:mat3x3<f32> = let %11
+    %13:vec3<f32> = load %p_m_1
+    %l_m_1:vec3<f32> = let %13
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_builtin.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_builtin.wgsl.expected.ir.msl
index b04e140..7a1127e 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_builtin.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_builtin.wgsl.expected.ir.msl
@@ -1,21 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat3x3<f32>, read> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %3:mat3x3<f32> = load %u
-    %t:mat3x3<f32> = transpose %3
-    %5:ptr<uniform, vec3<f32>, read> = access %u, 1i
-    %6:vec3<f32> = load %5
-    %l:f32 = length %6
-    %8:ptr<uniform, vec3<f32>, read> = access %u, 0i
-    %9:vec3<f32> = load %8
-    %10:vec3<f32> = swizzle %9, zxy
-    %11:f32 = access %10, 0u
-    %a:f32 = abs %11
+    %4:mat3x3<f32> = transpose %3
+    %t:mat3x3<f32> = let %4
+    %6:ptr<uniform, vec3<f32>, read> = access %u, 1i
+    %7:vec3<f32> = load %6
+    %8:f32 = length %7
+    %l:f32 = let %8
+    %10:ptr<uniform, vec3<f32>, read> = access %u, 0i
+    %11:vec3<f32> = load %10
+    %12:vec3<f32> = swizzle %11, zxy
+    %13:f32 = access %12, 0u
+    %14:f32 = abs %13
+    %a:f32 = let %14
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_fn.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_fn.wgsl.expected.ir.msl
index cf7cd2b..4d57392 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_fn.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_fn.wgsl.expected.ir.msl
@@ -1,26 +1,26 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat3x3<f32>, read> = var @binding_point(0, 0)
 }
 
-%a = func(%m:mat3x3<f32>):void -> %b2 {
-  %b2 = block {
+%a = func(%m:mat3x3<f32>):void {
+  $B2: {
     ret
   }
 }
-%b = func(%v:vec3<f32>):void -> %b3 {
-  %b3 = block {
+%b = func(%v:vec3<f32>):void {
+  $B3: {
     ret
   }
 }
-%c = func(%f:f32):void -> %b4 {
-  %b4 = block {
+%c = func(%f:f32):void {
+  $B4: {
     ret
   }
 }
-%f_1 = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {  # %f_1: 'f'
-  %b5 = block {
+%f_1 = @compute @workgroup_size(1, 1, 1) func():void {  # %f_1: 'f'
+  $B5: {
     %9:mat3x3<f32> = load %u
     %10:void = call %a, %9
     %11:ptr<uniform, vec3<f32>, read> = access %u, 1i
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_private.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_private.wgsl.expected.ir.msl
index e25b41e..0b3147b 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_private.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_private.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat3x3<f32>, read> = var @binding_point(0, 0)
   %p:ptr<private, mat3x3<f32>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat3x3<f32> = load %u
     store %p, %4
     %5:ptr<private, vec3<f32>, read_write> = access %p, 1i
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_storage.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_storage.wgsl.expected.ir.msl
index 67b3a37..1e75702 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_storage.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_storage.wgsl.expected.ir.msl
@@ -1,27 +1,41 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat3x3<f32>, read> = var @binding_point(0, 0)
   %s:ptr<storage, mat3x3<f32>, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat3x3<f32> = load %u
-    store %s, %4
-    %5:ptr<storage, vec3<f32>, read_write> = access %s, 1i
-    %6:ptr<uniform, vec3<f32>, read> = access %u, 0i
-    %7:vec3<f32> = load %6
-    store %5, %7
-    %8:ptr<storage, vec3<f32>, read_write> = access %s, 1i
-    %9:ptr<uniform, vec3<f32>, read> = access %u, 0i
-    %10:vec3<f32> = load %9
-    %11:vec3<f32> = swizzle %10, zxy
-    store %8, %11
-    %12:ptr<storage, vec3<f32>, read_write> = access %s, 0i
-    %13:ptr<uniform, vec3<f32>, read> = access %u, 1i
-    %14:f32 = load_vector_element %13, 0i
-    store_vector_element %12, 1i, %14
+    %5:void = call %tint_store_and_preserve_padding, %s, %4
+    %7:ptr<storage, vec3<f32>, read_write> = access %s, 1i
+    %8:ptr<uniform, vec3<f32>, read> = access %u, 0i
+    %9:vec3<f32> = load %8
+    store %7, %9
+    %10:ptr<storage, vec3<f32>, read_write> = access %s, 1i
+    %11:ptr<uniform, vec3<f32>, read> = access %u, 0i
+    %12:vec3<f32> = load %11
+    %13:vec3<f32> = swizzle %12, zxy
+    store %10, %13
+    %14:ptr<storage, vec3<f32>, read_write> = access %s, 0i
+    %15:ptr<uniform, vec3<f32>, read> = access %u, 1i
+    %16:f32 = load_vector_element %15, 0i
+    store_vector_element %14, 1i, %16
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat3x3<f32>, read_write>, %value_param:mat3x3<f32>):void {
+  $B3: {
+    %19:ptr<storage, vec3<f32>, read_write> = access %target, 0u
+    %20:vec3<f32> = access %value_param, 0u
+    store %19, %20
+    %21:ptr<storage, vec3<f32>, read_write> = access %target, 1u
+    %22:vec3<f32> = access %value_param, 1u
+    store %21, %22
+    %23:ptr<storage, vec3<f32>, read_write> = access %target, 2u
+    %24:vec3<f32> = access %value_param, 2u
+    store %23, %24
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_workgroup.wgsl.expected.ir.msl
index b82634b..db86b8c 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_workgroup.wgsl.expected.ir.msl
@@ -1,27 +1,35 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat3x3<f32>, read> = var @binding_point(0, 0)
   %w:ptr<workgroup, mat3x3<f32>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:mat3x3<f32> = load %u
-    store %w, %4
-    %5:ptr<workgroup, vec3<f32>, read_write> = access %w, 1i
-    %6:ptr<uniform, vec3<f32>, read> = access %u, 0i
-    %7:vec3<f32> = load %6
-    store %5, %7
+%f = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B2: {
+    %5:bool = eq %tint_local_index, 0u
+    if %5 [t: $B3] {  # if_1
+      $B3: {  # true
+        store %w, mat3x3<f32>(vec3<f32>(0.0f))
+        exit_if  # if_1
+      }
+    }
+    %6:void = msl.threadgroup_barrier 4u
+    %7:mat3x3<f32> = load %u
+    store %w, %7
     %8:ptr<workgroup, vec3<f32>, read_write> = access %w, 1i
     %9:ptr<uniform, vec3<f32>, read> = access %u, 0i
     %10:vec3<f32> = load %9
-    %11:vec3<f32> = swizzle %10, zxy
-    store %8, %11
-    %12:ptr<workgroup, vec3<f32>, read_write> = access %w, 0i
-    %13:ptr<uniform, vec3<f32>, read> = access %u, 1i
-    %14:f32 = load_vector_element %13, 0i
-    store_vector_element %12, 1i, %14
+    store %8, %10
+    %11:ptr<workgroup, vec3<f32>, read_write> = access %w, 1i
+    %12:ptr<uniform, vec3<f32>, read> = access %u, 0i
+    %13:vec3<f32> = load %12
+    %14:vec3<f32> = swizzle %13, zxy
+    store %11, %14
+    %15:ptr<workgroup, vec3<f32>, read_write> = access %w, 0i
+    %16:ptr<uniform, vec3<f32>, read> = access %u, 1i
+    %17:f32 = load_vector_element %16, 0i
+    store_vector_element %15, 1i, %17
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
index e0f32bf..98f0969 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<uniform, mat3x4<f16>, read> = var @binding_point(0, 0)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
+%i = func():i32 {
+  $B2: {
     %4:i32 = load %counter
     %5:i32 = add %4, 1i
     store %counter, %5
@@ -14,13 +14,16 @@
     ret %6
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_m:ptr<uniform, mat3x4<f16>, read> = let %m
     %9:i32 = call %i
-    %p_m_i:ptr<uniform, vec4<f16>, read> = access %p_m, %9
-    %l_m:mat3x4<f16> = load %p_m
-    %l_m_i:vec4<f16> = load %p_m_i
+    %10:ptr<uniform, vec4<f16>, read> = access %p_m, %9
+    %p_m_i:ptr<uniform, vec4<f16>, read> = let %10
+    %12:mat3x4<f16> = load %p_m
+    %l_m:mat3x4<f16> = let %12
+    %14:vec4<f16> = load %p_m_i
+    %l_m_i:vec4<f16> = let %14
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/static_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/static_index_via_ptr.wgsl.expected.ir.msl
index fce40e4..f7982ac 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/static_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/static_index_via_ptr.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<uniform, mat3x4<f16>, read> = var @binding_point(0, 0)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
+%i = func():i32 {
+  $B2: {
     %4:i32 = load %counter
     %5:i32 = add %4, 1i
     store %counter, %5
@@ -14,12 +14,15 @@
     ret %6
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_m:ptr<uniform, mat3x4<f16>, read> = let %m
-    %p_m_1:ptr<uniform, vec4<f16>, read> = access %p_m, 1i
-    %l_m:mat3x4<f16> = load %p_m
-    %l_m_1:vec4<f16> = load %p_m_1
+    %9:ptr<uniform, vec4<f16>, read> = access %p_m, 1i
+    %p_m_1:ptr<uniform, vec4<f16>, read> = let %9
+    %11:mat3x4<f16> = load %p_m
+    %l_m:mat3x4<f16> = let %11
+    %13:vec4<f16> = load %p_m_1
+    %l_m_1:vec4<f16> = let %13
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/to_builtin.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/to_builtin.wgsl.expected.ir.msl
index 49ff783..c4e57c6 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/to_builtin.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/to_builtin.wgsl.expected.ir.msl
@@ -1,21 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat3x4<f16>, read> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %3:mat3x4<f16> = load %u
-    %t:mat4x3<f16> = transpose %3
-    %5:ptr<uniform, vec4<f16>, read> = access %u, 1i
-    %6:vec4<f16> = load %5
-    %l:f16 = length %6
-    %8:ptr<uniform, vec4<f16>, read> = access %u, 0i
-    %9:vec4<f16> = load %8
-    %10:vec4<f16> = swizzle %9, ywxz
-    %11:f16 = access %10, 0u
-    %a:f16 = abs %11
+    %4:mat4x3<f16> = transpose %3
+    %t:mat4x3<f16> = let %4
+    %6:ptr<uniform, vec4<f16>, read> = access %u, 1i
+    %7:vec4<f16> = load %6
+    %8:f16 = length %7
+    %l:f16 = let %8
+    %10:ptr<uniform, vec4<f16>, read> = access %u, 0i
+    %11:vec4<f16> = load %10
+    %12:vec4<f16> = swizzle %11, ywxz
+    %13:f16 = access %12, 0u
+    %14:f16 = abs %13
+    %a:f16 = let %14
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/to_fn.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/to_fn.wgsl.expected.ir.msl
index 76b983b..e072db3 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/to_fn.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/to_fn.wgsl.expected.ir.msl
@@ -1,26 +1,26 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat3x4<f16>, read> = var @binding_point(0, 0)
 }
 
-%a = func(%m:mat3x4<f16>):void -> %b2 {
-  %b2 = block {
+%a = func(%m:mat3x4<f16>):void {
+  $B2: {
     ret
   }
 }
-%b = func(%v:vec4<f16>):void -> %b3 {
-  %b3 = block {
+%b = func(%v:vec4<f16>):void {
+  $B3: {
     ret
   }
 }
-%c = func(%f:f16):void -> %b4 {
-  %b4 = block {
+%c = func(%f:f16):void {
+  $B4: {
     ret
   }
 }
-%f_1 = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {  # %f_1: 'f'
-  %b5 = block {
+%f_1 = @compute @workgroup_size(1, 1, 1) func():void {  # %f_1: 'f'
+  $B5: {
     %9:mat3x4<f16> = load %u
     %10:void = call %a, %9
     %11:ptr<uniform, vec4<f16>, read> = access %u, 1i
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/to_private.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/to_private.wgsl.expected.ir.msl
index c3ab1fa..c5c8d5e 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/to_private.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/to_private.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat3x4<f16>, read> = var @binding_point(0, 0)
   %p:ptr<private, mat3x4<f16>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat3x4<f16> = load %u
     store %p, %4
     %5:ptr<private, vec4<f16>, read_write> = access %p, 1i
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/to_storage.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/to_storage.wgsl.expected.ir.msl
index 5eede1d..ff20b61 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/to_storage.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/to_storage.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat3x4<f16>, read> = var @binding_point(0, 0)
   %s:ptr<storage, mat3x4<f16>, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat3x4<f16> = load %u
     store %s, %4
     %5:ptr<storage, vec4<f16>, read_write> = access %s, 1i
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/to_workgroup.wgsl.expected.ir.msl
index 9bc230d..6f09501 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/to_workgroup.wgsl.expected.ir.msl
@@ -1,27 +1,35 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat3x4<f16>, read> = var @binding_point(0, 0)
   %w:ptr<workgroup, mat3x4<f16>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:mat3x4<f16> = load %u
-    store %w, %4
-    %5:ptr<workgroup, vec4<f16>, read_write> = access %w, 1i
-    %6:ptr<uniform, vec4<f16>, read> = access %u, 0i
-    %7:vec4<f16> = load %6
-    store %5, %7
+%f = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B2: {
+    %5:bool = eq %tint_local_index, 0u
+    if %5 [t: $B3] {  # if_1
+      $B3: {  # true
+        store %w, mat3x4<f16>(vec4<f16>(0.0h))
+        exit_if  # if_1
+      }
+    }
+    %6:void = msl.threadgroup_barrier 4u
+    %7:mat3x4<f16> = load %u
+    store %w, %7
     %8:ptr<workgroup, vec4<f16>, read_write> = access %w, 1i
     %9:ptr<uniform, vec4<f16>, read> = access %u, 0i
     %10:vec4<f16> = load %9
-    %11:vec4<f16> = swizzle %10, ywxz
-    store %8, %11
-    %12:ptr<workgroup, vec4<f16>, read_write> = access %w, 0i
-    %13:ptr<uniform, vec4<f16>, read> = access %u, 1i
-    %14:f16 = load_vector_element %13, 0i
-    store_vector_element %12, 1i, %14
+    store %8, %10
+    %11:ptr<workgroup, vec4<f16>, read_write> = access %w, 1i
+    %12:ptr<uniform, vec4<f16>, read> = access %u, 0i
+    %13:vec4<f16> = load %12
+    %14:vec4<f16> = swizzle %13, ywxz
+    store %11, %14
+    %15:ptr<workgroup, vec4<f16>, read_write> = access %w, 0i
+    %16:ptr<uniform, vec4<f16>, read> = access %u, 1i
+    %17:f16 = load_vector_element %16, 0i
+    store_vector_element %15, 1i, %17
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
index 4fe1ad2..7a51367 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<uniform, mat3x4<f32>, read> = var @binding_point(0, 0)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
+%i = func():i32 {
+  $B2: {
     %4:i32 = load %counter
     %5:i32 = add %4, 1i
     store %counter, %5
@@ -14,13 +14,16 @@
     ret %6
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_m:ptr<uniform, mat3x4<f32>, read> = let %m
     %9:i32 = call %i
-    %p_m_i:ptr<uniform, vec4<f32>, read> = access %p_m, %9
-    %l_m:mat3x4<f32> = load %p_m
-    %l_m_i:vec4<f32> = load %p_m_i
+    %10:ptr<uniform, vec4<f32>, read> = access %p_m, %9
+    %p_m_i:ptr<uniform, vec4<f32>, read> = let %10
+    %12:mat3x4<f32> = load %p_m
+    %l_m:mat3x4<f32> = let %12
+    %14:vec4<f32> = load %p_m_i
+    %l_m_i:vec4<f32> = let %14
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/static_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/static_index_via_ptr.wgsl.expected.ir.msl
index f99ccff..1677a78 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/static_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/static_index_via_ptr.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<uniform, mat3x4<f32>, read> = var @binding_point(0, 0)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
+%i = func():i32 {
+  $B2: {
     %4:i32 = load %counter
     %5:i32 = add %4, 1i
     store %counter, %5
@@ -14,12 +14,15 @@
     ret %6
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_m:ptr<uniform, mat3x4<f32>, read> = let %m
-    %p_m_1:ptr<uniform, vec4<f32>, read> = access %p_m, 1i
-    %l_m:mat3x4<f32> = load %p_m
-    %l_m_1:vec4<f32> = load %p_m_1
+    %9:ptr<uniform, vec4<f32>, read> = access %p_m, 1i
+    %p_m_1:ptr<uniform, vec4<f32>, read> = let %9
+    %11:mat3x4<f32> = load %p_m
+    %l_m:mat3x4<f32> = let %11
+    %13:vec4<f32> = load %p_m_1
+    %l_m_1:vec4<f32> = let %13
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/to_builtin.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/to_builtin.wgsl.expected.ir.msl
index 376d33f..e13ff87 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/to_builtin.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/to_builtin.wgsl.expected.ir.msl
@@ -1,21 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat3x4<f32>, read> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %3:mat3x4<f32> = load %u
-    %t:mat4x3<f32> = transpose %3
-    %5:ptr<uniform, vec4<f32>, read> = access %u, 1i
-    %6:vec4<f32> = load %5
-    %l:f32 = length %6
-    %8:ptr<uniform, vec4<f32>, read> = access %u, 0i
-    %9:vec4<f32> = load %8
-    %10:vec4<f32> = swizzle %9, ywxz
-    %11:f32 = access %10, 0u
-    %a:f32 = abs %11
+    %4:mat4x3<f32> = transpose %3
+    %t:mat4x3<f32> = let %4
+    %6:ptr<uniform, vec4<f32>, read> = access %u, 1i
+    %7:vec4<f32> = load %6
+    %8:f32 = length %7
+    %l:f32 = let %8
+    %10:ptr<uniform, vec4<f32>, read> = access %u, 0i
+    %11:vec4<f32> = load %10
+    %12:vec4<f32> = swizzle %11, ywxz
+    %13:f32 = access %12, 0u
+    %14:f32 = abs %13
+    %a:f32 = let %14
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/to_fn.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/to_fn.wgsl.expected.ir.msl
index 6611c8c..c29857f 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/to_fn.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/to_fn.wgsl.expected.ir.msl
@@ -1,26 +1,26 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat3x4<f32>, read> = var @binding_point(0, 0)
 }
 
-%a = func(%m:mat3x4<f32>):void -> %b2 {
-  %b2 = block {
+%a = func(%m:mat3x4<f32>):void {
+  $B2: {
     ret
   }
 }
-%b = func(%v:vec4<f32>):void -> %b3 {
-  %b3 = block {
+%b = func(%v:vec4<f32>):void {
+  $B3: {
     ret
   }
 }
-%c = func(%f:f32):void -> %b4 {
-  %b4 = block {
+%c = func(%f:f32):void {
+  $B4: {
     ret
   }
 }
-%f_1 = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {  # %f_1: 'f'
-  %b5 = block {
+%f_1 = @compute @workgroup_size(1, 1, 1) func():void {  # %f_1: 'f'
+  $B5: {
     %9:mat3x4<f32> = load %u
     %10:void = call %a, %9
     %11:ptr<uniform, vec4<f32>, read> = access %u, 1i
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/to_private.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/to_private.wgsl.expected.ir.msl
index e50a043..27467a3 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/to_private.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/to_private.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat3x4<f32>, read> = var @binding_point(0, 0)
   %p:ptr<private, mat3x4<f32>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat3x4<f32> = load %u
     store %p, %4
     %5:ptr<private, vec4<f32>, read_write> = access %p, 1i
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/to_storage.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/to_storage.wgsl.expected.ir.msl
index 8231629..d41ec59 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/to_storage.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/to_storage.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat3x4<f32>, read> = var @binding_point(0, 0)
   %s:ptr<storage, mat3x4<f32>, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat3x4<f32> = load %u
     store %s, %4
     %5:ptr<storage, vec4<f32>, read_write> = access %s, 1i
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/to_workgroup.wgsl.expected.ir.msl
index 49d958d..675d4d3 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/to_workgroup.wgsl.expected.ir.msl
@@ -1,27 +1,35 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat3x4<f32>, read> = var @binding_point(0, 0)
   %w:ptr<workgroup, mat3x4<f32>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:mat3x4<f32> = load %u
-    store %w, %4
-    %5:ptr<workgroup, vec4<f32>, read_write> = access %w, 1i
-    %6:ptr<uniform, vec4<f32>, read> = access %u, 0i
-    %7:vec4<f32> = load %6
-    store %5, %7
+%f = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B2: {
+    %5:bool = eq %tint_local_index, 0u
+    if %5 [t: $B3] {  # if_1
+      $B3: {  # true
+        store %w, mat3x4<f32>(vec4<f32>(0.0f))
+        exit_if  # if_1
+      }
+    }
+    %6:void = msl.threadgroup_barrier 4u
+    %7:mat3x4<f32> = load %u
+    store %w, %7
     %8:ptr<workgroup, vec4<f32>, read_write> = access %w, 1i
     %9:ptr<uniform, vec4<f32>, read> = access %u, 0i
     %10:vec4<f32> = load %9
-    %11:vec4<f32> = swizzle %10, ywxz
-    store %8, %11
-    %12:ptr<workgroup, vec4<f32>, read_write> = access %w, 0i
-    %13:ptr<uniform, vec4<f32>, read> = access %u, 1i
-    %14:f32 = load_vector_element %13, 0i
-    store_vector_element %12, 1i, %14
+    store %8, %10
+    %11:ptr<workgroup, vec4<f32>, read_write> = access %w, 1i
+    %12:ptr<uniform, vec4<f32>, read> = access %u, 0i
+    %13:vec4<f32> = load %12
+    %14:vec4<f32> = swizzle %13, ywxz
+    store %11, %14
+    %15:ptr<workgroup, vec4<f32>, read_write> = access %w, 0i
+    %16:ptr<uniform, vec4<f32>, read> = access %u, 1i
+    %17:f32 = load_vector_element %16, 0i
+    store_vector_element %15, 1i, %17
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
index 286f7f6..869cf42 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<uniform, mat4x2<f16>, read> = var @binding_point(0, 0)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
+%i = func():i32 {
+  $B2: {
     %4:i32 = load %counter
     %5:i32 = add %4, 1i
     store %counter, %5
@@ -14,13 +14,16 @@
     ret %6
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_m:ptr<uniform, mat4x2<f16>, read> = let %m
     %9:i32 = call %i
-    %p_m_i:ptr<uniform, vec2<f16>, read> = access %p_m, %9
-    %l_m:mat4x2<f16> = load %p_m
-    %l_m_i:vec2<f16> = load %p_m_i
+    %10:ptr<uniform, vec2<f16>, read> = access %p_m, %9
+    %p_m_i:ptr<uniform, vec2<f16>, read> = let %10
+    %12:mat4x2<f16> = load %p_m
+    %l_m:mat4x2<f16> = let %12
+    %14:vec2<f16> = load %p_m_i
+    %l_m_i:vec2<f16> = let %14
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/static_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/static_index_via_ptr.wgsl.expected.ir.msl
index b9711ae..fa9f2c4 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/static_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/static_index_via_ptr.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<uniform, mat4x2<f16>, read> = var @binding_point(0, 0)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
+%i = func():i32 {
+  $B2: {
     %4:i32 = load %counter
     %5:i32 = add %4, 1i
     store %counter, %5
@@ -14,12 +14,15 @@
     ret %6
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_m:ptr<uniform, mat4x2<f16>, read> = let %m
-    %p_m_1:ptr<uniform, vec2<f16>, read> = access %p_m, 1i
-    %l_m:mat4x2<f16> = load %p_m
-    %l_m_1:vec2<f16> = load %p_m_1
+    %9:ptr<uniform, vec2<f16>, read> = access %p_m, 1i
+    %p_m_1:ptr<uniform, vec2<f16>, read> = let %9
+    %11:mat4x2<f16> = load %p_m
+    %l_m:mat4x2<f16> = let %11
+    %13:vec2<f16> = load %p_m_1
+    %l_m_1:vec2<f16> = let %13
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/to_builtin.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/to_builtin.wgsl.expected.ir.msl
index 25a50ce..bdb7c20 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/to_builtin.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/to_builtin.wgsl.expected.ir.msl
@@ -1,21 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat4x2<f16>, read> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %3:mat4x2<f16> = load %u
-    %t:mat2x4<f16> = transpose %3
-    %5:ptr<uniform, vec2<f16>, read> = access %u, 1i
-    %6:vec2<f16> = load %5
-    %l:f16 = length %6
-    %8:ptr<uniform, vec2<f16>, read> = access %u, 0i
-    %9:vec2<f16> = load %8
-    %10:vec2<f16> = swizzle %9, yx
-    %11:f16 = access %10, 0u
-    %a:f16 = abs %11
+    %4:mat2x4<f16> = transpose %3
+    %t:mat2x4<f16> = let %4
+    %6:ptr<uniform, vec2<f16>, read> = access %u, 1i
+    %7:vec2<f16> = load %6
+    %8:f16 = length %7
+    %l:f16 = let %8
+    %10:ptr<uniform, vec2<f16>, read> = access %u, 0i
+    %11:vec2<f16> = load %10
+    %12:vec2<f16> = swizzle %11, yx
+    %13:f16 = access %12, 0u
+    %14:f16 = abs %13
+    %a:f16 = let %14
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/to_fn.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/to_fn.wgsl.expected.ir.msl
index 6bc5e8a..90525fe 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/to_fn.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/to_fn.wgsl.expected.ir.msl
@@ -1,26 +1,26 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat4x2<f16>, read> = var @binding_point(0, 0)
 }
 
-%a = func(%m:mat4x2<f16>):void -> %b2 {
-  %b2 = block {
+%a = func(%m:mat4x2<f16>):void {
+  $B2: {
     ret
   }
 }
-%b = func(%v:vec2<f16>):void -> %b3 {
-  %b3 = block {
+%b = func(%v:vec2<f16>):void {
+  $B3: {
     ret
   }
 }
-%c = func(%f:f16):void -> %b4 {
-  %b4 = block {
+%c = func(%f:f16):void {
+  $B4: {
     ret
   }
 }
-%f_1 = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {  # %f_1: 'f'
-  %b5 = block {
+%f_1 = @compute @workgroup_size(1, 1, 1) func():void {  # %f_1: 'f'
+  $B5: {
     %9:mat4x2<f16> = load %u
     %10:void = call %a, %9
     %11:ptr<uniform, vec2<f16>, read> = access %u, 1i
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/to_private.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/to_private.wgsl.expected.ir.msl
index f04ceab..0e942db 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/to_private.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/to_private.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat4x2<f16>, read> = var @binding_point(0, 0)
   %p:ptr<private, mat4x2<f16>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat4x2<f16> = load %u
     store %p, %4
     %5:ptr<private, vec2<f16>, read_write> = access %p, 1i
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/to_storage.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/to_storage.wgsl.expected.ir.msl
index 5c4c080..3797fed 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/to_storage.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/to_storage.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat4x2<f16>, read> = var @binding_point(0, 0)
   %s:ptr<storage, mat4x2<f16>, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat4x2<f16> = load %u
     store %s, %4
     %5:ptr<storage, vec2<f16>, read_write> = access %s, 1i
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/to_workgroup.wgsl.expected.ir.msl
index a31eb1a..ced9ab1 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/to_workgroup.wgsl.expected.ir.msl
@@ -1,27 +1,35 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat4x2<f16>, read> = var @binding_point(0, 0)
   %w:ptr<workgroup, mat4x2<f16>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:mat4x2<f16> = load %u
-    store %w, %4
-    %5:ptr<workgroup, vec2<f16>, read_write> = access %w, 1i
-    %6:ptr<uniform, vec2<f16>, read> = access %u, 0i
-    %7:vec2<f16> = load %6
-    store %5, %7
+%f = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B2: {
+    %5:bool = eq %tint_local_index, 0u
+    if %5 [t: $B3] {  # if_1
+      $B3: {  # true
+        store %w, mat4x2<f16>(vec2<f16>(0.0h))
+        exit_if  # if_1
+      }
+    }
+    %6:void = msl.threadgroup_barrier 4u
+    %7:mat4x2<f16> = load %u
+    store %w, %7
     %8:ptr<workgroup, vec2<f16>, read_write> = access %w, 1i
     %9:ptr<uniform, vec2<f16>, read> = access %u, 0i
     %10:vec2<f16> = load %9
-    %11:vec2<f16> = swizzle %10, yx
-    store %8, %11
-    %12:ptr<workgroup, vec2<f16>, read_write> = access %w, 0i
-    %13:ptr<uniform, vec2<f16>, read> = access %u, 1i
-    %14:f16 = load_vector_element %13, 0i
-    store_vector_element %12, 1i, %14
+    store %8, %10
+    %11:ptr<workgroup, vec2<f16>, read_write> = access %w, 1i
+    %12:ptr<uniform, vec2<f16>, read> = access %u, 0i
+    %13:vec2<f16> = load %12
+    %14:vec2<f16> = swizzle %13, yx
+    store %11, %14
+    %15:ptr<workgroup, vec2<f16>, read_write> = access %w, 0i
+    %16:ptr<uniform, vec2<f16>, read> = access %u, 1i
+    %17:f16 = load_vector_element %16, 0i
+    store_vector_element %15, 1i, %17
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
index 5c5ba9b..0091daf 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<uniform, mat4x2<f32>, read> = var @binding_point(0, 0)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
+%i = func():i32 {
+  $B2: {
     %4:i32 = load %counter
     %5:i32 = add %4, 1i
     store %counter, %5
@@ -14,13 +14,16 @@
     ret %6
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_m:ptr<uniform, mat4x2<f32>, read> = let %m
     %9:i32 = call %i
-    %p_m_i:ptr<uniform, vec2<f32>, read> = access %p_m, %9
-    %l_m:mat4x2<f32> = load %p_m
-    %l_m_i:vec2<f32> = load %p_m_i
+    %10:ptr<uniform, vec2<f32>, read> = access %p_m, %9
+    %p_m_i:ptr<uniform, vec2<f32>, read> = let %10
+    %12:mat4x2<f32> = load %p_m
+    %l_m:mat4x2<f32> = let %12
+    %14:vec2<f32> = load %p_m_i
+    %l_m_i:vec2<f32> = let %14
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/static_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/static_index_via_ptr.wgsl.expected.ir.msl
index e42efb1..4f0b68b 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/static_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/static_index_via_ptr.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<uniform, mat4x2<f32>, read> = var @binding_point(0, 0)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
+%i = func():i32 {
+  $B2: {
     %4:i32 = load %counter
     %5:i32 = add %4, 1i
     store %counter, %5
@@ -14,12 +14,15 @@
     ret %6
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_m:ptr<uniform, mat4x2<f32>, read> = let %m
-    %p_m_1:ptr<uniform, vec2<f32>, read> = access %p_m, 1i
-    %l_m:mat4x2<f32> = load %p_m
-    %l_m_1:vec2<f32> = load %p_m_1
+    %9:ptr<uniform, vec2<f32>, read> = access %p_m, 1i
+    %p_m_1:ptr<uniform, vec2<f32>, read> = let %9
+    %11:mat4x2<f32> = load %p_m
+    %l_m:mat4x2<f32> = let %11
+    %13:vec2<f32> = load %p_m_1
+    %l_m_1:vec2<f32> = let %13
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/to_builtin.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/to_builtin.wgsl.expected.ir.msl
index 070f0a1..585f2aa 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/to_builtin.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/to_builtin.wgsl.expected.ir.msl
@@ -1,21 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat4x2<f32>, read> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %3:mat4x2<f32> = load %u
-    %t:mat2x4<f32> = transpose %3
-    %5:ptr<uniform, vec2<f32>, read> = access %u, 1i
-    %6:vec2<f32> = load %5
-    %l:f32 = length %6
-    %8:ptr<uniform, vec2<f32>, read> = access %u, 0i
-    %9:vec2<f32> = load %8
-    %10:vec2<f32> = swizzle %9, yx
-    %11:f32 = access %10, 0u
-    %a:f32 = abs %11
+    %4:mat2x4<f32> = transpose %3
+    %t:mat2x4<f32> = let %4
+    %6:ptr<uniform, vec2<f32>, read> = access %u, 1i
+    %7:vec2<f32> = load %6
+    %8:f32 = length %7
+    %l:f32 = let %8
+    %10:ptr<uniform, vec2<f32>, read> = access %u, 0i
+    %11:vec2<f32> = load %10
+    %12:vec2<f32> = swizzle %11, yx
+    %13:f32 = access %12, 0u
+    %14:f32 = abs %13
+    %a:f32 = let %14
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/to_fn.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/to_fn.wgsl.expected.ir.msl
index 941364e..dc0d78f 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/to_fn.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/to_fn.wgsl.expected.ir.msl
@@ -1,26 +1,26 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat4x2<f32>, read> = var @binding_point(0, 0)
 }
 
-%a = func(%m:mat4x2<f32>):void -> %b2 {
-  %b2 = block {
+%a = func(%m:mat4x2<f32>):void {
+  $B2: {
     ret
   }
 }
-%b = func(%v:vec2<f32>):void -> %b3 {
-  %b3 = block {
+%b = func(%v:vec2<f32>):void {
+  $B3: {
     ret
   }
 }
-%c = func(%f:f32):void -> %b4 {
-  %b4 = block {
+%c = func(%f:f32):void {
+  $B4: {
     ret
   }
 }
-%f_1 = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {  # %f_1: 'f'
-  %b5 = block {
+%f_1 = @compute @workgroup_size(1, 1, 1) func():void {  # %f_1: 'f'
+  $B5: {
     %9:mat4x2<f32> = load %u
     %10:void = call %a, %9
     %11:ptr<uniform, vec2<f32>, read> = access %u, 1i
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/to_private.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/to_private.wgsl.expected.ir.msl
index 506bb84..368cba9 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/to_private.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/to_private.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat4x2<f32>, read> = var @binding_point(0, 0)
   %p:ptr<private, mat4x2<f32>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat4x2<f32> = load %u
     store %p, %4
     %5:ptr<private, vec2<f32>, read_write> = access %p, 1i
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/to_storage.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/to_storage.wgsl.expected.ir.msl
index 3206af9..f190196 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/to_storage.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/to_storage.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat4x2<f32>, read> = var @binding_point(0, 0)
   %s:ptr<storage, mat4x2<f32>, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat4x2<f32> = load %u
     store %s, %4
     %5:ptr<storage, vec2<f32>, read_write> = access %s, 1i
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/to_workgroup.wgsl.expected.ir.msl
index 3b495d6..ff6fa47 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/to_workgroup.wgsl.expected.ir.msl
@@ -1,27 +1,35 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat4x2<f32>, read> = var @binding_point(0, 0)
   %w:ptr<workgroup, mat4x2<f32>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:mat4x2<f32> = load %u
-    store %w, %4
-    %5:ptr<workgroup, vec2<f32>, read_write> = access %w, 1i
-    %6:ptr<uniform, vec2<f32>, read> = access %u, 0i
-    %7:vec2<f32> = load %6
-    store %5, %7
+%f = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B2: {
+    %5:bool = eq %tint_local_index, 0u
+    if %5 [t: $B3] {  # if_1
+      $B3: {  # true
+        store %w, mat4x2<f32>(vec2<f32>(0.0f))
+        exit_if  # if_1
+      }
+    }
+    %6:void = msl.threadgroup_barrier 4u
+    %7:mat4x2<f32> = load %u
+    store %w, %7
     %8:ptr<workgroup, vec2<f32>, read_write> = access %w, 1i
     %9:ptr<uniform, vec2<f32>, read> = access %u, 0i
     %10:vec2<f32> = load %9
-    %11:vec2<f32> = swizzle %10, yx
-    store %8, %11
-    %12:ptr<workgroup, vec2<f32>, read_write> = access %w, 0i
-    %13:ptr<uniform, vec2<f32>, read> = access %u, 1i
-    %14:f32 = load_vector_element %13, 0i
-    store_vector_element %12, 1i, %14
+    store %8, %10
+    %11:ptr<workgroup, vec2<f32>, read_write> = access %w, 1i
+    %12:ptr<uniform, vec2<f32>, read> = access %u, 0i
+    %13:vec2<f32> = load %12
+    %14:vec2<f32> = swizzle %13, yx
+    store %11, %14
+    %15:ptr<workgroup, vec2<f32>, read_write> = access %w, 0i
+    %16:ptr<uniform, vec2<f32>, read> = access %u, 1i
+    %17:f32 = load_vector_element %16, 0i
+    store_vector_element %15, 1i, %17
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
index 312a211..482cb42 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<uniform, mat4x3<f16>, read> = var @binding_point(0, 0)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
+%i = func():i32 {
+  $B2: {
     %4:i32 = load %counter
     %5:i32 = add %4, 1i
     store %counter, %5
@@ -14,13 +14,16 @@
     ret %6
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_m:ptr<uniform, mat4x3<f16>, read> = let %m
     %9:i32 = call %i
-    %p_m_i:ptr<uniform, vec3<f16>, read> = access %p_m, %9
-    %l_m:mat4x3<f16> = load %p_m
-    %l_m_i:vec3<f16> = load %p_m_i
+    %10:ptr<uniform, vec3<f16>, read> = access %p_m, %9
+    %p_m_i:ptr<uniform, vec3<f16>, read> = let %10
+    %12:mat4x3<f16> = load %p_m
+    %l_m:mat4x3<f16> = let %12
+    %14:vec3<f16> = load %p_m_i
+    %l_m_i:vec3<f16> = let %14
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/static_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/static_index_via_ptr.wgsl.expected.ir.msl
index e7685d8..5d31887 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/static_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/static_index_via_ptr.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<uniform, mat4x3<f16>, read> = var @binding_point(0, 0)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
+%i = func():i32 {
+  $B2: {
     %4:i32 = load %counter
     %5:i32 = add %4, 1i
     store %counter, %5
@@ -14,12 +14,15 @@
     ret %6
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_m:ptr<uniform, mat4x3<f16>, read> = let %m
-    %p_m_1:ptr<uniform, vec3<f16>, read> = access %p_m, 1i
-    %l_m:mat4x3<f16> = load %p_m
-    %l_m_1:vec3<f16> = load %p_m_1
+    %9:ptr<uniform, vec3<f16>, read> = access %p_m, 1i
+    %p_m_1:ptr<uniform, vec3<f16>, read> = let %9
+    %11:mat4x3<f16> = load %p_m
+    %l_m:mat4x3<f16> = let %11
+    %13:vec3<f16> = load %p_m_1
+    %l_m_1:vec3<f16> = let %13
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/to_builtin.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/to_builtin.wgsl.expected.ir.msl
index 61f7d76..d600629 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/to_builtin.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/to_builtin.wgsl.expected.ir.msl
@@ -1,21 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat4x3<f16>, read> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %3:mat4x3<f16> = load %u
-    %t:mat3x4<f16> = transpose %3
-    %5:ptr<uniform, vec3<f16>, read> = access %u, 1i
-    %6:vec3<f16> = load %5
-    %l:f16 = length %6
-    %8:ptr<uniform, vec3<f16>, read> = access %u, 0i
-    %9:vec3<f16> = load %8
-    %10:vec3<f16> = swizzle %9, zxy
-    %11:f16 = access %10, 0u
-    %a:f16 = abs %11
+    %4:mat3x4<f16> = transpose %3
+    %t:mat3x4<f16> = let %4
+    %6:ptr<uniform, vec3<f16>, read> = access %u, 1i
+    %7:vec3<f16> = load %6
+    %8:f16 = length %7
+    %l:f16 = let %8
+    %10:ptr<uniform, vec3<f16>, read> = access %u, 0i
+    %11:vec3<f16> = load %10
+    %12:vec3<f16> = swizzle %11, zxy
+    %13:f16 = access %12, 0u
+    %14:f16 = abs %13
+    %a:f16 = let %14
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/to_fn.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/to_fn.wgsl.expected.ir.msl
index f54edaf..fb0290a 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/to_fn.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/to_fn.wgsl.expected.ir.msl
@@ -1,26 +1,26 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat4x3<f16>, read> = var @binding_point(0, 0)
 }
 
-%a = func(%m:mat4x3<f16>):void -> %b2 {
-  %b2 = block {
+%a = func(%m:mat4x3<f16>):void {
+  $B2: {
     ret
   }
 }
-%b = func(%v:vec3<f16>):void -> %b3 {
-  %b3 = block {
+%b = func(%v:vec3<f16>):void {
+  $B3: {
     ret
   }
 }
-%c = func(%f:f16):void -> %b4 {
-  %b4 = block {
+%c = func(%f:f16):void {
+  $B4: {
     ret
   }
 }
-%f_1 = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {  # %f_1: 'f'
-  %b5 = block {
+%f_1 = @compute @workgroup_size(1, 1, 1) func():void {  # %f_1: 'f'
+  $B5: {
     %9:mat4x3<f16> = load %u
     %10:void = call %a, %9
     %11:ptr<uniform, vec3<f16>, read> = access %u, 1i
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/to_private.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/to_private.wgsl.expected.ir.msl
index 61513da..6a01a6f 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/to_private.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/to_private.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat4x3<f16>, read> = var @binding_point(0, 0)
   %p:ptr<private, mat4x3<f16>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat4x3<f16> = load %u
     store %p, %4
     %5:ptr<private, vec3<f16>, read_write> = access %p, 1i
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/to_storage.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/to_storage.wgsl.expected.ir.msl
index d7e305e..c327eb5 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/to_storage.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/to_storage.wgsl.expected.ir.msl
@@ -1,27 +1,44 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat4x3<f16>, read> = var @binding_point(0, 0)
   %s:ptr<storage, mat4x3<f16>, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat4x3<f16> = load %u
-    store %s, %4
-    %5:ptr<storage, vec3<f16>, read_write> = access %s, 1i
-    %6:ptr<uniform, vec3<f16>, read> = access %u, 0i
-    %7:vec3<f16> = load %6
-    store %5, %7
-    %8:ptr<storage, vec3<f16>, read_write> = access %s, 1i
-    %9:ptr<uniform, vec3<f16>, read> = access %u, 0i
-    %10:vec3<f16> = load %9
-    %11:vec3<f16> = swizzle %10, zxy
-    store %8, %11
-    %12:ptr<storage, vec3<f16>, read_write> = access %s, 0i
-    %13:ptr<uniform, vec3<f16>, read> = access %u, 1i
-    %14:f16 = load_vector_element %13, 0i
-    store_vector_element %12, 1i, %14
+    %5:void = call %tint_store_and_preserve_padding, %s, %4
+    %7:ptr<storage, vec3<f16>, read_write> = access %s, 1i
+    %8:ptr<uniform, vec3<f16>, read> = access %u, 0i
+    %9:vec3<f16> = load %8
+    store %7, %9
+    %10:ptr<storage, vec3<f16>, read_write> = access %s, 1i
+    %11:ptr<uniform, vec3<f16>, read> = access %u, 0i
+    %12:vec3<f16> = load %11
+    %13:vec3<f16> = swizzle %12, zxy
+    store %10, %13
+    %14:ptr<storage, vec3<f16>, read_write> = access %s, 0i
+    %15:ptr<uniform, vec3<f16>, read> = access %u, 1i
+    %16:f16 = load_vector_element %15, 0i
+    store_vector_element %14, 1i, %16
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat4x3<f16>, read_write>, %value_param:mat4x3<f16>):void {
+  $B3: {
+    %19:ptr<storage, vec3<f16>, read_write> = access %target, 0u
+    %20:vec3<f16> = access %value_param, 0u
+    store %19, %20
+    %21:ptr<storage, vec3<f16>, read_write> = access %target, 1u
+    %22:vec3<f16> = access %value_param, 1u
+    store %21, %22
+    %23:ptr<storage, vec3<f16>, read_write> = access %target, 2u
+    %24:vec3<f16> = access %value_param, 2u
+    store %23, %24
+    %25:ptr<storage, vec3<f16>, read_write> = access %target, 3u
+    %26:vec3<f16> = access %value_param, 3u
+    store %25, %26
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/to_workgroup.wgsl.expected.ir.msl
index 735464c..4ec8615 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/to_workgroup.wgsl.expected.ir.msl
@@ -1,27 +1,35 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat4x3<f16>, read> = var @binding_point(0, 0)
   %w:ptr<workgroup, mat4x3<f16>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:mat4x3<f16> = load %u
-    store %w, %4
-    %5:ptr<workgroup, vec3<f16>, read_write> = access %w, 1i
-    %6:ptr<uniform, vec3<f16>, read> = access %u, 0i
-    %7:vec3<f16> = load %6
-    store %5, %7
+%f = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B2: {
+    %5:bool = eq %tint_local_index, 0u
+    if %5 [t: $B3] {  # if_1
+      $B3: {  # true
+        store %w, mat4x3<f16>(vec3<f16>(0.0h))
+        exit_if  # if_1
+      }
+    }
+    %6:void = msl.threadgroup_barrier 4u
+    %7:mat4x3<f16> = load %u
+    store %w, %7
     %8:ptr<workgroup, vec3<f16>, read_write> = access %w, 1i
     %9:ptr<uniform, vec3<f16>, read> = access %u, 0i
     %10:vec3<f16> = load %9
-    %11:vec3<f16> = swizzle %10, zxy
-    store %8, %11
-    %12:ptr<workgroup, vec3<f16>, read_write> = access %w, 0i
-    %13:ptr<uniform, vec3<f16>, read> = access %u, 1i
-    %14:f16 = load_vector_element %13, 0i
-    store_vector_element %12, 1i, %14
+    store %8, %10
+    %11:ptr<workgroup, vec3<f16>, read_write> = access %w, 1i
+    %12:ptr<uniform, vec3<f16>, read> = access %u, 0i
+    %13:vec3<f16> = load %12
+    %14:vec3<f16> = swizzle %13, zxy
+    store %11, %14
+    %15:ptr<workgroup, vec3<f16>, read_write> = access %w, 0i
+    %16:ptr<uniform, vec3<f16>, read> = access %u, 1i
+    %17:f16 = load_vector_element %16, 0i
+    store_vector_element %15, 1i, %17
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
index cc38512..adf6d98 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<uniform, mat4x3<f32>, read> = var @binding_point(0, 0)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
+%i = func():i32 {
+  $B2: {
     %4:i32 = load %counter
     %5:i32 = add %4, 1i
     store %counter, %5
@@ -14,13 +14,16 @@
     ret %6
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_m:ptr<uniform, mat4x3<f32>, read> = let %m
     %9:i32 = call %i
-    %p_m_i:ptr<uniform, vec3<f32>, read> = access %p_m, %9
-    %l_m:mat4x3<f32> = load %p_m
-    %l_m_i:vec3<f32> = load %p_m_i
+    %10:ptr<uniform, vec3<f32>, read> = access %p_m, %9
+    %p_m_i:ptr<uniform, vec3<f32>, read> = let %10
+    %12:mat4x3<f32> = load %p_m
+    %l_m:mat4x3<f32> = let %12
+    %14:vec3<f32> = load %p_m_i
+    %l_m_i:vec3<f32> = let %14
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/static_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/static_index_via_ptr.wgsl.expected.ir.msl
index 26c10bf..4c9b023 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/static_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/static_index_via_ptr.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<uniform, mat4x3<f32>, read> = var @binding_point(0, 0)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
+%i = func():i32 {
+  $B2: {
     %4:i32 = load %counter
     %5:i32 = add %4, 1i
     store %counter, %5
@@ -14,12 +14,15 @@
     ret %6
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_m:ptr<uniform, mat4x3<f32>, read> = let %m
-    %p_m_1:ptr<uniform, vec3<f32>, read> = access %p_m, 1i
-    %l_m:mat4x3<f32> = load %p_m
-    %l_m_1:vec3<f32> = load %p_m_1
+    %9:ptr<uniform, vec3<f32>, read> = access %p_m, 1i
+    %p_m_1:ptr<uniform, vec3<f32>, read> = let %9
+    %11:mat4x3<f32> = load %p_m
+    %l_m:mat4x3<f32> = let %11
+    %13:vec3<f32> = load %p_m_1
+    %l_m_1:vec3<f32> = let %13
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_builtin.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_builtin.wgsl.expected.ir.msl
index 8bfb8f2..45acf1a 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_builtin.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_builtin.wgsl.expected.ir.msl
@@ -1,21 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat4x3<f32>, read> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %3:mat4x3<f32> = load %u
-    %t:mat3x4<f32> = transpose %3
-    %5:ptr<uniform, vec3<f32>, read> = access %u, 1i
-    %6:vec3<f32> = load %5
-    %l:f32 = length %6
-    %8:ptr<uniform, vec3<f32>, read> = access %u, 0i
-    %9:vec3<f32> = load %8
-    %10:vec3<f32> = swizzle %9, zxy
-    %11:f32 = access %10, 0u
-    %a:f32 = abs %11
+    %4:mat3x4<f32> = transpose %3
+    %t:mat3x4<f32> = let %4
+    %6:ptr<uniform, vec3<f32>, read> = access %u, 1i
+    %7:vec3<f32> = load %6
+    %8:f32 = length %7
+    %l:f32 = let %8
+    %10:ptr<uniform, vec3<f32>, read> = access %u, 0i
+    %11:vec3<f32> = load %10
+    %12:vec3<f32> = swizzle %11, zxy
+    %13:f32 = access %12, 0u
+    %14:f32 = abs %13
+    %a:f32 = let %14
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_fn.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_fn.wgsl.expected.ir.msl
index 99b9217..20ea079 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_fn.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_fn.wgsl.expected.ir.msl
@@ -1,26 +1,26 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat4x3<f32>, read> = var @binding_point(0, 0)
 }
 
-%a = func(%m:mat4x3<f32>):void -> %b2 {
-  %b2 = block {
+%a = func(%m:mat4x3<f32>):void {
+  $B2: {
     ret
   }
 }
-%b = func(%v:vec3<f32>):void -> %b3 {
-  %b3 = block {
+%b = func(%v:vec3<f32>):void {
+  $B3: {
     ret
   }
 }
-%c = func(%f:f32):void -> %b4 {
-  %b4 = block {
+%c = func(%f:f32):void {
+  $B4: {
     ret
   }
 }
-%f_1 = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {  # %f_1: 'f'
-  %b5 = block {
+%f_1 = @compute @workgroup_size(1, 1, 1) func():void {  # %f_1: 'f'
+  $B5: {
     %9:mat4x3<f32> = load %u
     %10:void = call %a, %9
     %11:ptr<uniform, vec3<f32>, read> = access %u, 1i
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_private.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_private.wgsl.expected.ir.msl
index 40b6eb1..ceedbe2 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_private.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_private.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat4x3<f32>, read> = var @binding_point(0, 0)
   %p:ptr<private, mat4x3<f32>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat4x3<f32> = load %u
     store %p, %4
     %5:ptr<private, vec3<f32>, read_write> = access %p, 1i
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_storage.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_storage.wgsl.expected.ir.msl
index f3dfcaa..5c97be5 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_storage.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_storage.wgsl.expected.ir.msl
@@ -1,27 +1,44 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat4x3<f32>, read> = var @binding_point(0, 0)
   %s:ptr<storage, mat4x3<f32>, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat4x3<f32> = load %u
-    store %s, %4
-    %5:ptr<storage, vec3<f32>, read_write> = access %s, 1i
-    %6:ptr<uniform, vec3<f32>, read> = access %u, 0i
-    %7:vec3<f32> = load %6
-    store %5, %7
-    %8:ptr<storage, vec3<f32>, read_write> = access %s, 1i
-    %9:ptr<uniform, vec3<f32>, read> = access %u, 0i
-    %10:vec3<f32> = load %9
-    %11:vec3<f32> = swizzle %10, zxy
-    store %8, %11
-    %12:ptr<storage, vec3<f32>, read_write> = access %s, 0i
-    %13:ptr<uniform, vec3<f32>, read> = access %u, 1i
-    %14:f32 = load_vector_element %13, 0i
-    store_vector_element %12, 1i, %14
+    %5:void = call %tint_store_and_preserve_padding, %s, %4
+    %7:ptr<storage, vec3<f32>, read_write> = access %s, 1i
+    %8:ptr<uniform, vec3<f32>, read> = access %u, 0i
+    %9:vec3<f32> = load %8
+    store %7, %9
+    %10:ptr<storage, vec3<f32>, read_write> = access %s, 1i
+    %11:ptr<uniform, vec3<f32>, read> = access %u, 0i
+    %12:vec3<f32> = load %11
+    %13:vec3<f32> = swizzle %12, zxy
+    store %10, %13
+    %14:ptr<storage, vec3<f32>, read_write> = access %s, 0i
+    %15:ptr<uniform, vec3<f32>, read> = access %u, 1i
+    %16:f32 = load_vector_element %15, 0i
+    store_vector_element %14, 1i, %16
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat4x3<f32>, read_write>, %value_param:mat4x3<f32>):void {
+  $B3: {
+    %19:ptr<storage, vec3<f32>, read_write> = access %target, 0u
+    %20:vec3<f32> = access %value_param, 0u
+    store %19, %20
+    %21:ptr<storage, vec3<f32>, read_write> = access %target, 1u
+    %22:vec3<f32> = access %value_param, 1u
+    store %21, %22
+    %23:ptr<storage, vec3<f32>, read_write> = access %target, 2u
+    %24:vec3<f32> = access %value_param, 2u
+    store %23, %24
+    %25:ptr<storage, vec3<f32>, read_write> = access %target, 3u
+    %26:vec3<f32> = access %value_param, 3u
+    store %25, %26
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_workgroup.wgsl.expected.ir.msl
index f61ad92..ded9db0 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_workgroup.wgsl.expected.ir.msl
@@ -1,27 +1,35 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat4x3<f32>, read> = var @binding_point(0, 0)
   %w:ptr<workgroup, mat4x3<f32>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:mat4x3<f32> = load %u
-    store %w, %4
-    %5:ptr<workgroup, vec3<f32>, read_write> = access %w, 1i
-    %6:ptr<uniform, vec3<f32>, read> = access %u, 0i
-    %7:vec3<f32> = load %6
-    store %5, %7
+%f = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B2: {
+    %5:bool = eq %tint_local_index, 0u
+    if %5 [t: $B3] {  # if_1
+      $B3: {  # true
+        store %w, mat4x3<f32>(vec3<f32>(0.0f))
+        exit_if  # if_1
+      }
+    }
+    %6:void = msl.threadgroup_barrier 4u
+    %7:mat4x3<f32> = load %u
+    store %w, %7
     %8:ptr<workgroup, vec3<f32>, read_write> = access %w, 1i
     %9:ptr<uniform, vec3<f32>, read> = access %u, 0i
     %10:vec3<f32> = load %9
-    %11:vec3<f32> = swizzle %10, zxy
-    store %8, %11
-    %12:ptr<workgroup, vec3<f32>, read_write> = access %w, 0i
-    %13:ptr<uniform, vec3<f32>, read> = access %u, 1i
-    %14:f32 = load_vector_element %13, 0i
-    store_vector_element %12, 1i, %14
+    store %8, %10
+    %11:ptr<workgroup, vec3<f32>, read_write> = access %w, 1i
+    %12:ptr<uniform, vec3<f32>, read> = access %u, 0i
+    %13:vec3<f32> = load %12
+    %14:vec3<f32> = swizzle %13, zxy
+    store %11, %14
+    %15:ptr<workgroup, vec3<f32>, read_write> = access %w, 0i
+    %16:ptr<uniform, vec3<f32>, read> = access %u, 1i
+    %17:f32 = load_vector_element %16, 0i
+    store_vector_element %15, 1i, %17
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
index b216cd2..803671e 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/dynamic_index_via_ptr.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<uniform, mat4x4<f16>, read> = var @binding_point(0, 0)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
+%i = func():i32 {
+  $B2: {
     %4:i32 = load %counter
     %5:i32 = add %4, 1i
     store %counter, %5
@@ -14,13 +14,16 @@
     ret %6
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_m:ptr<uniform, mat4x4<f16>, read> = let %m
     %9:i32 = call %i
-    %p_m_i:ptr<uniform, vec4<f16>, read> = access %p_m, %9
-    %l_m:mat4x4<f16> = load %p_m
-    %l_m_i:vec4<f16> = load %p_m_i
+    %10:ptr<uniform, vec4<f16>, read> = access %p_m, %9
+    %p_m_i:ptr<uniform, vec4<f16>, read> = let %10
+    %12:mat4x4<f16> = load %p_m
+    %l_m:mat4x4<f16> = let %12
+    %14:vec4<f16> = load %p_m_i
+    %l_m_i:vec4<f16> = let %14
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/static_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/static_index_via_ptr.wgsl.expected.ir.msl
index e6a9990..9576a44 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/static_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/static_index_via_ptr.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<uniform, mat4x4<f16>, read> = var @binding_point(0, 0)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
+%i = func():i32 {
+  $B2: {
     %4:i32 = load %counter
     %5:i32 = add %4, 1i
     store %counter, %5
@@ -14,12 +14,15 @@
     ret %6
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_m:ptr<uniform, mat4x4<f16>, read> = let %m
-    %p_m_1:ptr<uniform, vec4<f16>, read> = access %p_m, 1i
-    %l_m:mat4x4<f16> = load %p_m
-    %l_m_1:vec4<f16> = load %p_m_1
+    %9:ptr<uniform, vec4<f16>, read> = access %p_m, 1i
+    %p_m_1:ptr<uniform, vec4<f16>, read> = let %9
+    %11:mat4x4<f16> = load %p_m
+    %l_m:mat4x4<f16> = let %11
+    %13:vec4<f16> = load %p_m_1
+    %l_m_1:vec4<f16> = let %13
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/to_builtin.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/to_builtin.wgsl.expected.ir.msl
index 88f8c8c..933a9d0 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/to_builtin.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/to_builtin.wgsl.expected.ir.msl
@@ -1,21 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat4x4<f16>, read> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %3:mat4x4<f16> = load %u
-    %t:mat4x4<f16> = transpose %3
-    %5:ptr<uniform, vec4<f16>, read> = access %u, 1i
-    %6:vec4<f16> = load %5
-    %l:f16 = length %6
-    %8:ptr<uniform, vec4<f16>, read> = access %u, 0i
-    %9:vec4<f16> = load %8
-    %10:vec4<f16> = swizzle %9, ywxz
-    %11:f16 = access %10, 0u
-    %a:f16 = abs %11
+    %4:mat4x4<f16> = transpose %3
+    %t:mat4x4<f16> = let %4
+    %6:ptr<uniform, vec4<f16>, read> = access %u, 1i
+    %7:vec4<f16> = load %6
+    %8:f16 = length %7
+    %l:f16 = let %8
+    %10:ptr<uniform, vec4<f16>, read> = access %u, 0i
+    %11:vec4<f16> = load %10
+    %12:vec4<f16> = swizzle %11, ywxz
+    %13:f16 = access %12, 0u
+    %14:f16 = abs %13
+    %a:f16 = let %14
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/to_fn.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/to_fn.wgsl.expected.ir.msl
index 0ff46b3..03b38f5d 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/to_fn.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/to_fn.wgsl.expected.ir.msl
@@ -1,26 +1,26 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat4x4<f16>, read> = var @binding_point(0, 0)
 }
 
-%a = func(%m:mat4x4<f16>):void -> %b2 {
-  %b2 = block {
+%a = func(%m:mat4x4<f16>):void {
+  $B2: {
     ret
   }
 }
-%b = func(%v:vec4<f16>):void -> %b3 {
-  %b3 = block {
+%b = func(%v:vec4<f16>):void {
+  $B3: {
     ret
   }
 }
-%c = func(%f:f16):void -> %b4 {
-  %b4 = block {
+%c = func(%f:f16):void {
+  $B4: {
     ret
   }
 }
-%f_1 = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {  # %f_1: 'f'
-  %b5 = block {
+%f_1 = @compute @workgroup_size(1, 1, 1) func():void {  # %f_1: 'f'
+  $B5: {
     %9:mat4x4<f16> = load %u
     %10:void = call %a, %9
     %11:ptr<uniform, vec4<f16>, read> = access %u, 1i
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/to_private.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/to_private.wgsl.expected.ir.msl
index 014a389..81b005e 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/to_private.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/to_private.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat4x4<f16>, read> = var @binding_point(0, 0)
   %p:ptr<private, mat4x4<f16>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat4x4<f16> = load %u
     store %p, %4
     %5:ptr<private, vec4<f16>, read_write> = access %p, 1i
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/to_storage.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/to_storage.wgsl.expected.ir.msl
index 00e56b6..8bf94bf 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/to_storage.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/to_storage.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat4x4<f16>, read> = var @binding_point(0, 0)
   %s:ptr<storage, mat4x4<f16>, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat4x4<f16> = load %u
     store %s, %4
     %5:ptr<storage, vec4<f16>, read_write> = access %s, 1i
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/to_workgroup.wgsl.expected.ir.msl
index 4661ed0..68cc6fd 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/to_workgroup.wgsl.expected.ir.msl
@@ -1,27 +1,35 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat4x4<f16>, read> = var @binding_point(0, 0)
   %w:ptr<workgroup, mat4x4<f16>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:mat4x4<f16> = load %u
-    store %w, %4
-    %5:ptr<workgroup, vec4<f16>, read_write> = access %w, 1i
-    %6:ptr<uniform, vec4<f16>, read> = access %u, 0i
-    %7:vec4<f16> = load %6
-    store %5, %7
+%f = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B2: {
+    %5:bool = eq %tint_local_index, 0u
+    if %5 [t: $B3] {  # if_1
+      $B3: {  # true
+        store %w, mat4x4<f16>(vec4<f16>(0.0h))
+        exit_if  # if_1
+      }
+    }
+    %6:void = msl.threadgroup_barrier 4u
+    %7:mat4x4<f16> = load %u
+    store %w, %7
     %8:ptr<workgroup, vec4<f16>, read_write> = access %w, 1i
     %9:ptr<uniform, vec4<f16>, read> = access %u, 0i
     %10:vec4<f16> = load %9
-    %11:vec4<f16> = swizzle %10, ywxz
-    store %8, %11
-    %12:ptr<workgroup, vec4<f16>, read_write> = access %w, 0i
-    %13:ptr<uniform, vec4<f16>, read> = access %u, 1i
-    %14:f16 = load_vector_element %13, 0i
-    store_vector_element %12, 1i, %14
+    store %8, %10
+    %11:ptr<workgroup, vec4<f16>, read_write> = access %w, 1i
+    %12:ptr<uniform, vec4<f16>, read> = access %u, 0i
+    %13:vec4<f16> = load %12
+    %14:vec4<f16> = swizzle %13, ywxz
+    store %11, %14
+    %15:ptr<workgroup, vec4<f16>, read_write> = access %w, 0i
+    %16:ptr<uniform, vec4<f16>, read> = access %u, 1i
+    %17:f16 = load_vector_element %16, 0i
+    store_vector_element %15, 1i, %17
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
index 5430b17..3a35fc9 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/dynamic_index_via_ptr.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<uniform, mat4x4<f32>, read> = var @binding_point(0, 0)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
+%i = func():i32 {
+  $B2: {
     %4:i32 = load %counter
     %5:i32 = add %4, 1i
     store %counter, %5
@@ -14,13 +14,16 @@
     ret %6
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_m:ptr<uniform, mat4x4<f32>, read> = let %m
     %9:i32 = call %i
-    %p_m_i:ptr<uniform, vec4<f32>, read> = access %p_m, %9
-    %l_m:mat4x4<f32> = load %p_m
-    %l_m_i:vec4<f32> = load %p_m_i
+    %10:ptr<uniform, vec4<f32>, read> = access %p_m, %9
+    %p_m_i:ptr<uniform, vec4<f32>, read> = let %10
+    %12:mat4x4<f32> = load %p_m
+    %l_m:mat4x4<f32> = let %12
+    %14:vec4<f32> = load %p_m_i
+    %l_m_i:vec4<f32> = let %14
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/static_index_via_ptr.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/static_index_via_ptr.wgsl.expected.ir.msl
index 011471b..668c83e 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/static_index_via_ptr.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/static_index_via_ptr.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<uniform, mat4x4<f32>, read> = var @binding_point(0, 0)
   %counter:ptr<private, i32, read_write> = var, 0i
 }
 
-%i = func():i32 -> %b2 {
-  %b2 = block {
+%i = func():i32 {
+  $B2: {
     %4:i32 = load %counter
     %5:i32 = add %4, 1i
     store %counter, %5
@@ -14,12 +14,15 @@
     ret %6
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %p_m:ptr<uniform, mat4x4<f32>, read> = let %m
-    %p_m_1:ptr<uniform, vec4<f32>, read> = access %p_m, 1i
-    %l_m:mat4x4<f32> = load %p_m
-    %l_m_1:vec4<f32> = load %p_m_1
+    %9:ptr<uniform, vec4<f32>, read> = access %p_m, 1i
+    %p_m_1:ptr<uniform, vec4<f32>, read> = let %9
+    %11:mat4x4<f32> = load %p_m
+    %l_m:mat4x4<f32> = let %11
+    %13:vec4<f32> = load %p_m_1
+    %l_m_1:vec4<f32> = let %13
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/to_builtin.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/to_builtin.wgsl.expected.ir.msl
index 1adcdb6..89826de 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/to_builtin.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/to_builtin.wgsl.expected.ir.msl
@@ -1,21 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat4x4<f32>, read> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %3:mat4x4<f32> = load %u
-    %t:mat4x4<f32> = transpose %3
-    %5:ptr<uniform, vec4<f32>, read> = access %u, 1i
-    %6:vec4<f32> = load %5
-    %l:f32 = length %6
-    %8:ptr<uniform, vec4<f32>, read> = access %u, 0i
-    %9:vec4<f32> = load %8
-    %10:vec4<f32> = swizzle %9, ywxz
-    %11:f32 = access %10, 0u
-    %a:f32 = abs %11
+    %4:mat4x4<f32> = transpose %3
+    %t:mat4x4<f32> = let %4
+    %6:ptr<uniform, vec4<f32>, read> = access %u, 1i
+    %7:vec4<f32> = load %6
+    %8:f32 = length %7
+    %l:f32 = let %8
+    %10:ptr<uniform, vec4<f32>, read> = access %u, 0i
+    %11:vec4<f32> = load %10
+    %12:vec4<f32> = swizzle %11, ywxz
+    %13:f32 = access %12, 0u
+    %14:f32 = abs %13
+    %a:f32 = let %14
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/to_fn.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/to_fn.wgsl.expected.ir.msl
index 8c2ae43..8898af0 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/to_fn.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/to_fn.wgsl.expected.ir.msl
@@ -1,26 +1,26 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat4x4<f32>, read> = var @binding_point(0, 0)
 }
 
-%a = func(%m:mat4x4<f32>):void -> %b2 {
-  %b2 = block {
+%a = func(%m:mat4x4<f32>):void {
+  $B2: {
     ret
   }
 }
-%b = func(%v:vec4<f32>):void -> %b3 {
-  %b3 = block {
+%b = func(%v:vec4<f32>):void {
+  $B3: {
     ret
   }
 }
-%c = func(%f:f32):void -> %b4 {
-  %b4 = block {
+%c = func(%f:f32):void {
+  $B4: {
     ret
   }
 }
-%f_1 = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {  # %f_1: 'f'
-  %b5 = block {
+%f_1 = @compute @workgroup_size(1, 1, 1) func():void {  # %f_1: 'f'
+  $B5: {
     %9:mat4x4<f32> = load %u
     %10:void = call %a, %9
     %11:ptr<uniform, vec4<f32>, read> = access %u, 1i
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/to_private.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/to_private.wgsl.expected.ir.msl
index 39f0e8d..5419a0a 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/to_private.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/to_private.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat4x4<f32>, read> = var @binding_point(0, 0)
   %p:ptr<private, mat4x4<f32>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat4x4<f32> = load %u
     store %p, %4
     %5:ptr<private, vec4<f32>, read_write> = access %p, 1i
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/to_storage.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/to_storage.wgsl.expected.ir.msl
index 1245fdb..2046512 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/to_storage.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/to_storage.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat4x4<f32>, read> = var @binding_point(0, 0)
   %s:ptr<storage, mat4x4<f32>, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat4x4<f32> = load %u
     store %s, %4
     %5:ptr<storage, vec4<f32>, read_write> = access %s, 1i
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/to_workgroup.wgsl.expected.ir.msl b/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/to_workgroup.wgsl.expected.ir.msl
index a89e85c..9818ee4 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/to_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/to_workgroup.wgsl.expected.ir.msl
@@ -1,27 +1,35 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat4x4<f32>, read> = var @binding_point(0, 0)
   %w:ptr<workgroup, mat4x4<f32>, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:mat4x4<f32> = load %u
-    store %w, %4
-    %5:ptr<workgroup, vec4<f32>, read_write> = access %w, 1i
-    %6:ptr<uniform, vec4<f32>, read> = access %u, 0i
-    %7:vec4<f32> = load %6
-    store %5, %7
+%f = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B2: {
+    %5:bool = eq %tint_local_index, 0u
+    if %5 [t: $B3] {  # if_1
+      $B3: {  # true
+        store %w, mat4x4<f32>(vec4<f32>(0.0f))
+        exit_if  # if_1
+      }
+    }
+    %6:void = msl.threadgroup_barrier 4u
+    %7:mat4x4<f32> = load %u
+    store %w, %7
     %8:ptr<workgroup, vec4<f32>, read_write> = access %w, 1i
     %9:ptr<uniform, vec4<f32>, read> = access %u, 0i
     %10:vec4<f32> = load %9
-    %11:vec4<f32> = swizzle %10, ywxz
-    store %8, %11
-    %12:ptr<workgroup, vec4<f32>, read_write> = access %w, 0i
-    %13:ptr<uniform, vec4<f32>, read> = access %u, 1i
-    %14:f32 = load_vector_element %13, 0i
-    store_vector_element %12, 1i, %14
+    store %8, %10
+    %11:ptr<workgroup, vec4<f32>, read_write> = access %w, 1i
+    %12:ptr<uniform, vec4<f32>, read> = access %u, 0i
+    %13:vec4<f32> = load %12
+    %14:vec4<f32> = swizzle %13, ywxz
+    store %11, %14
+    %15:ptr<workgroup, vec4<f32>, read_write> = access %w, 0i
+    %16:ptr<uniform, vec4<f32>, read> = access %u, 1i
+    %17:f32 = load_vector_element %16, 0i
+    store_vector_element %15, 1i, %17
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/types/f16.wgsl.expected.ir.msl b/test/tint/buffer/uniform/types/f16.wgsl.expected.ir.msl
index a644025..23ca7a8 100644
--- a/test/tint/buffer/uniform/types/f16.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/types/f16.wgsl.expected.ir.msl
@@ -1,12 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, f16, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f16, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %x:f16 = load %u
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %4:f16 = load %u
+    %x:f16 = let %4
+    store %s, %x
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/types/f32.wgsl.expected.ir.msl b/test/tint/buffer/uniform/types/f32.wgsl.expected.ir.msl
index bac63fc..b0b6bdd 100644
--- a/test/tint/buffer/uniform/types/f32.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/types/f32.wgsl.expected.ir.msl
@@ -1,12 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, f32, read> = var @binding_point(0, 0)
+  %s:ptr<storage, f32, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %x:f32 = load %u
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %4:f32 = load %u
+    %x:f32 = let %4
+    store %s, %x
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/types/i32.wgsl.expected.ir.msl b/test/tint/buffer/uniform/types/i32.wgsl.expected.ir.msl
index 14ca4df..f8c3a23 100644
--- a/test/tint/buffer/uniform/types/i32.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/types/i32.wgsl.expected.ir.msl
@@ -1,12 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, i32, read> = var @binding_point(0, 0)
+  %s:ptr<storage, i32, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %x:i32 = load %u
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %4:i32 = load %u
+    %x:i32 = let %4
+    store %s, %x
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/types/mat2x2_f16.wgsl.expected.ir.msl b/test/tint/buffer/uniform/types/mat2x2_f16.wgsl.expected.ir.msl
index cd86fd3..e500eb8 100644
--- a/test/tint/buffer/uniform/types/mat2x2_f16.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/types/mat2x2_f16.wgsl.expected.ir.msl
@@ -1,12 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat2x2<f16>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, mat2x2<f16>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %x:mat2x2<f16> = load %u
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %4:mat2x2<f16> = load %u
+    %x:mat2x2<f16> = let %4
+    store %s, %x
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/types/mat2x2_f32.wgsl.expected.ir.msl b/test/tint/buffer/uniform/types/mat2x2_f32.wgsl.expected.ir.msl
index fc906ce..6f523cc 100644
--- a/test/tint/buffer/uniform/types/mat2x2_f32.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/types/mat2x2_f32.wgsl.expected.ir.msl
@@ -1,12 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat2x2<f32>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, mat2x2<f32>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %x:mat2x2<f32> = load %u
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %4:mat2x2<f32> = load %u
+    %x:mat2x2<f32> = let %4
+    store %s, %x
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/types/mat2x3_f16.wgsl.expected.ir.msl b/test/tint/buffer/uniform/types/mat2x3_f16.wgsl.expected.ir.msl
index 0e6a340..3394820 100644
--- a/test/tint/buffer/uniform/types/mat2x3_f16.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/types/mat2x3_f16.wgsl.expected.ir.msl
@@ -1,12 +1,26 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat2x3<f16>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, mat2x3<f16>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %x:mat2x3<f16> = load %u
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %4:mat2x3<f16> = load %u
+    %x:mat2x3<f16> = let %4
+    %6:void = call %tint_store_and_preserve_padding, %s, %x
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat2x3<f16>, read_write>, %value_param:mat2x3<f16>):void {
+  $B3: {
+    %10:ptr<storage, vec3<f16>, read_write> = access %target, 0u
+    %11:vec3<f16> = access %value_param, 0u
+    store %10, %11
+    %12:ptr<storage, vec3<f16>, read_write> = access %target, 1u
+    %13:vec3<f16> = access %value_param, 1u
+    store %12, %13
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/types/mat2x3_f32.wgsl.expected.ir.msl b/test/tint/buffer/uniform/types/mat2x3_f32.wgsl.expected.ir.msl
index adf0fed..7067254 100644
--- a/test/tint/buffer/uniform/types/mat2x3_f32.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/types/mat2x3_f32.wgsl.expected.ir.msl
@@ -1,12 +1,26 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat2x3<f32>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, mat2x3<f32>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %x:mat2x3<f32> = load %u
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %4:mat2x3<f32> = load %u
+    %x:mat2x3<f32> = let %4
+    %6:void = call %tint_store_and_preserve_padding, %s, %x
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat2x3<f32>, read_write>, %value_param:mat2x3<f32>):void {
+  $B3: {
+    %10:ptr<storage, vec3<f32>, read_write> = access %target, 0u
+    %11:vec3<f32> = access %value_param, 0u
+    store %10, %11
+    %12:ptr<storage, vec3<f32>, read_write> = access %target, 1u
+    %13:vec3<f32> = access %value_param, 1u
+    store %12, %13
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/types/mat2x4_f16.wgsl.expected.ir.msl b/test/tint/buffer/uniform/types/mat2x4_f16.wgsl.expected.ir.msl
index 70eebd1..9d37062 100644
--- a/test/tint/buffer/uniform/types/mat2x4_f16.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/types/mat2x4_f16.wgsl.expected.ir.msl
@@ -1,12 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat2x4<f16>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, mat2x4<f16>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %x:mat2x4<f16> = load %u
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %4:mat2x4<f16> = load %u
+    %x:mat2x4<f16> = let %4
+    store %s, %x
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/types/mat2x4_f32.wgsl.expected.ir.msl b/test/tint/buffer/uniform/types/mat2x4_f32.wgsl.expected.ir.msl
index 0b526cb..f0e779e 100644
--- a/test/tint/buffer/uniform/types/mat2x4_f32.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/types/mat2x4_f32.wgsl.expected.ir.msl
@@ -1,12 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat2x4<f32>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, mat2x4<f32>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %x:mat2x4<f32> = load %u
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %4:mat2x4<f32> = load %u
+    %x:mat2x4<f32> = let %4
+    store %s, %x
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/types/mat3x2_f16.wgsl.expected.ir.msl b/test/tint/buffer/uniform/types/mat3x2_f16.wgsl.expected.ir.msl
index 83a1b11..abe10dd 100644
--- a/test/tint/buffer/uniform/types/mat3x2_f16.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/types/mat3x2_f16.wgsl.expected.ir.msl
@@ -1,12 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat3x2<f16>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, mat3x2<f16>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %x:mat3x2<f16> = load %u
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %4:mat3x2<f16> = load %u
+    %x:mat3x2<f16> = let %4
+    store %s, %x
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/types/mat3x2_f32.wgsl.expected.ir.msl b/test/tint/buffer/uniform/types/mat3x2_f32.wgsl.expected.ir.msl
index 2482e7a..670f15b 100644
--- a/test/tint/buffer/uniform/types/mat3x2_f32.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/types/mat3x2_f32.wgsl.expected.ir.msl
@@ -1,12 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat3x2<f32>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, mat3x2<f32>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %x:mat3x2<f32> = load %u
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %4:mat3x2<f32> = load %u
+    %x:mat3x2<f32> = let %4
+    store %s, %x
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/types/mat3x3_f16.wgsl.expected.ir.msl b/test/tint/buffer/uniform/types/mat3x3_f16.wgsl.expected.ir.msl
index f8d04f8..be8a99a 100644
--- a/test/tint/buffer/uniform/types/mat3x3_f16.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/types/mat3x3_f16.wgsl.expected.ir.msl
@@ -1,12 +1,29 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat3x3<f16>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, mat3x3<f16>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %x:mat3x3<f16> = load %u
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %4:mat3x3<f16> = load %u
+    %x:mat3x3<f16> = let %4
+    %6:void = call %tint_store_and_preserve_padding, %s, %x
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat3x3<f16>, read_write>, %value_param:mat3x3<f16>):void {
+  $B3: {
+    %10:ptr<storage, vec3<f16>, read_write> = access %target, 0u
+    %11:vec3<f16> = access %value_param, 0u
+    store %10, %11
+    %12:ptr<storage, vec3<f16>, read_write> = access %target, 1u
+    %13:vec3<f16> = access %value_param, 1u
+    store %12, %13
+    %14:ptr<storage, vec3<f16>, read_write> = access %target, 2u
+    %15:vec3<f16> = access %value_param, 2u
+    store %14, %15
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/types/mat3x3_f32.wgsl.expected.ir.msl b/test/tint/buffer/uniform/types/mat3x3_f32.wgsl.expected.ir.msl
index 0be5b17..200b1fa 100644
--- a/test/tint/buffer/uniform/types/mat3x3_f32.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/types/mat3x3_f32.wgsl.expected.ir.msl
@@ -1,12 +1,29 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat3x3<f32>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, mat3x3<f32>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %x:mat3x3<f32> = load %u
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %4:mat3x3<f32> = load %u
+    %x:mat3x3<f32> = let %4
+    %6:void = call %tint_store_and_preserve_padding, %s, %x
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat3x3<f32>, read_write>, %value_param:mat3x3<f32>):void {
+  $B3: {
+    %10:ptr<storage, vec3<f32>, read_write> = access %target, 0u
+    %11:vec3<f32> = access %value_param, 0u
+    store %10, %11
+    %12:ptr<storage, vec3<f32>, read_write> = access %target, 1u
+    %13:vec3<f32> = access %value_param, 1u
+    store %12, %13
+    %14:ptr<storage, vec3<f32>, read_write> = access %target, 2u
+    %15:vec3<f32> = access %value_param, 2u
+    store %14, %15
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/types/mat3x4_f16.wgsl.expected.ir.msl b/test/tint/buffer/uniform/types/mat3x4_f16.wgsl.expected.ir.msl
index 54e9cfe..d6c94a1 100644
--- a/test/tint/buffer/uniform/types/mat3x4_f16.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/types/mat3x4_f16.wgsl.expected.ir.msl
@@ -1,12 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat3x4<f16>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, mat3x4<f16>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %x:mat3x4<f16> = load %u
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %4:mat3x4<f16> = load %u
+    %x:mat3x4<f16> = let %4
+    store %s, %x
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/types/mat3x4_f32.wgsl.expected.ir.msl b/test/tint/buffer/uniform/types/mat3x4_f32.wgsl.expected.ir.msl
index 45fd1c6..2ff19a9 100644
--- a/test/tint/buffer/uniform/types/mat3x4_f32.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/types/mat3x4_f32.wgsl.expected.ir.msl
@@ -1,12 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat3x4<f32>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, mat3x4<f32>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %x:mat3x4<f32> = load %u
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %4:mat3x4<f32> = load %u
+    %x:mat3x4<f32> = let %4
+    store %s, %x
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/types/mat4x2_f16.wgsl.expected.ir.msl b/test/tint/buffer/uniform/types/mat4x2_f16.wgsl.expected.ir.msl
index 3411dbd..4d67658 100644
--- a/test/tint/buffer/uniform/types/mat4x2_f16.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/types/mat4x2_f16.wgsl.expected.ir.msl
@@ -1,12 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat4x2<f16>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, mat4x2<f16>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %x:mat4x2<f16> = load %u
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %4:mat4x2<f16> = load %u
+    %x:mat4x2<f16> = let %4
+    store %s, %x
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/types/mat4x2_f32.wgsl.expected.ir.msl b/test/tint/buffer/uniform/types/mat4x2_f32.wgsl.expected.ir.msl
index 034bfa4..7c78a9d 100644
--- a/test/tint/buffer/uniform/types/mat4x2_f32.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/types/mat4x2_f32.wgsl.expected.ir.msl
@@ -1,12 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat4x2<f32>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, mat4x2<f32>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %x:mat4x2<f32> = load %u
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %4:mat4x2<f32> = load %u
+    %x:mat4x2<f32> = let %4
+    store %s, %x
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/types/mat4x3_f16.wgsl.expected.ir.msl b/test/tint/buffer/uniform/types/mat4x3_f16.wgsl.expected.ir.msl
index 3c0c743..431a296 100644
--- a/test/tint/buffer/uniform/types/mat4x3_f16.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/types/mat4x3_f16.wgsl.expected.ir.msl
@@ -1,12 +1,32 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat4x3<f16>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, mat4x3<f16>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %x:mat4x3<f16> = load %u
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %4:mat4x3<f16> = load %u
+    %x:mat4x3<f16> = let %4
+    %6:void = call %tint_store_and_preserve_padding, %s, %x
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat4x3<f16>, read_write>, %value_param:mat4x3<f16>):void {
+  $B3: {
+    %10:ptr<storage, vec3<f16>, read_write> = access %target, 0u
+    %11:vec3<f16> = access %value_param, 0u
+    store %10, %11
+    %12:ptr<storage, vec3<f16>, read_write> = access %target, 1u
+    %13:vec3<f16> = access %value_param, 1u
+    store %12, %13
+    %14:ptr<storage, vec3<f16>, read_write> = access %target, 2u
+    %15:vec3<f16> = access %value_param, 2u
+    store %14, %15
+    %16:ptr<storage, vec3<f16>, read_write> = access %target, 3u
+    %17:vec3<f16> = access %value_param, 3u
+    store %16, %17
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/types/mat4x3_f32.wgsl.expected.ir.msl b/test/tint/buffer/uniform/types/mat4x3_f32.wgsl.expected.ir.msl
index 53a6da8..e427638 100644
--- a/test/tint/buffer/uniform/types/mat4x3_f32.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/types/mat4x3_f32.wgsl.expected.ir.msl
@@ -1,12 +1,32 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat4x3<f32>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, mat4x3<f32>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %x:mat4x3<f32> = load %u
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %4:mat4x3<f32> = load %u
+    %x:mat4x3<f32> = let %4
+    %6:void = call %tint_store_and_preserve_padding, %s, %x
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat4x3<f32>, read_write>, %value_param:mat4x3<f32>):void {
+  $B3: {
+    %10:ptr<storage, vec3<f32>, read_write> = access %target, 0u
+    %11:vec3<f32> = access %value_param, 0u
+    store %10, %11
+    %12:ptr<storage, vec3<f32>, read_write> = access %target, 1u
+    %13:vec3<f32> = access %value_param, 1u
+    store %12, %13
+    %14:ptr<storage, vec3<f32>, read_write> = access %target, 2u
+    %15:vec3<f32> = access %value_param, 2u
+    store %14, %15
+    %16:ptr<storage, vec3<f32>, read_write> = access %target, 3u
+    %17:vec3<f32> = access %value_param, 3u
+    store %16, %17
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/types/mat4x4_f16.wgsl.expected.ir.msl b/test/tint/buffer/uniform/types/mat4x4_f16.wgsl.expected.ir.msl
index c879469..b8d72f2 100644
--- a/test/tint/buffer/uniform/types/mat4x4_f16.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/types/mat4x4_f16.wgsl.expected.ir.msl
@@ -1,12 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat4x4<f16>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, mat4x4<f16>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %x:mat4x4<f16> = load %u
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %4:mat4x4<f16> = load %u
+    %x:mat4x4<f16> = let %4
+    store %s, %x
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/types/mat4x4_f32.wgsl.expected.ir.msl b/test/tint/buffer/uniform/types/mat4x4_f32.wgsl.expected.ir.msl
index e384e59..56beb0c 100644
--- a/test/tint/buffer/uniform/types/mat4x4_f32.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/types/mat4x4_f32.wgsl.expected.ir.msl
@@ -1,12 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, mat4x4<f32>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, mat4x4<f32>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %x:mat4x4<f32> = load %u
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %4:mat4x4<f32> = load %u
+    %x:mat4x4<f32> = let %4
+    store %s, %x
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/types/struct_f16.wgsl.expected.ir.msl b/test/tint/buffer/uniform/types/struct_f16.wgsl.expected.ir.msl
index b567e6c..4a7cccb 100644
--- a/test/tint/buffer/uniform/types/struct_f16.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/types/struct_f16.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Inner = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Inner = struct @align(8) {
   scalar_f16:f16 @offset(0)
   vec3_f16:vec3<f16> @offset(8)
   mat2x4_f16:mat2x4<f16> @offset(16)
@@ -10,13 +10,38 @@
   inner:Inner @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, S, read> = var @binding_point(0, 0)
+  %s:ptr<storage, S, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %x:S = load %u
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %4:S = load %u
+    %x:S = let %4
+    %6:void = call %tint_store_and_preserve_padding, %s, %x
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, S, read_write>, %value_param:S):void {
+  $B3: {
+    %10:ptr<storage, Inner, read_write> = access %target, 0u
+    %11:Inner = access %value_param, 0u
+    %12:void = call %tint_store_and_preserve_padding_1, %10, %11
+    ret
+  }
+}
+%tint_store_and_preserve_padding_1 = func(%target_1:ptr<storage, Inner, read_write>, %value_param_1:Inner):void {  # %tint_store_and_preserve_padding_1: 'tint_store_and_preserve_padding', %target_1: 'target', %value_param_1: 'value_param'
+  $B4: {
+    %16:ptr<storage, f16, read_write> = access %target_1, 0u
+    %17:f16 = access %value_param_1, 0u
+    store %16, %17
+    %18:ptr<storage, vec3<f16>, read_write> = access %target_1, 1u
+    %19:vec3<f16> = access %value_param_1, 1u
+    store %18, %19
+    %20:ptr<storage, mat2x4<f16>, read_write> = access %target_1, 2u
+    %21:mat2x4<f16> = access %value_param_1, 2u
+    store %20, %21
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/types/struct_f32.wgsl.expected.ir.msl b/test/tint/buffer/uniform/types/struct_f32.wgsl.expected.ir.msl
index 9be6cf2..fdc49bb 100644
--- a/test/tint/buffer/uniform/types/struct_f32.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/types/struct_f32.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Inner = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Inner = struct @align(16) {
   scalar_f32:f32 @offset(0)
   vec3_f32:vec3<f32> @offset(16)
   mat2x4_f32:mat2x4<f32> @offset(32)
@@ -10,13 +10,38 @@
   inner:Inner @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, S, read> = var @binding_point(0, 0)
+  %s:ptr<storage, S, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %x:S = load %u
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %4:S = load %u
+    %x:S = let %4
+    %6:void = call %tint_store_and_preserve_padding, %s, %x
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, S, read_write>, %value_param:S):void {
+  $B3: {
+    %10:ptr<storage, Inner, read_write> = access %target, 0u
+    %11:Inner = access %value_param, 0u
+    %12:void = call %tint_store_and_preserve_padding_1, %10, %11
+    ret
+  }
+}
+%tint_store_and_preserve_padding_1 = func(%target_1:ptr<storage, Inner, read_write>, %value_param_1:Inner):void {  # %tint_store_and_preserve_padding_1: 'tint_store_and_preserve_padding', %target_1: 'target', %value_param_1: 'value_param'
+  $B4: {
+    %16:ptr<storage, f32, read_write> = access %target_1, 0u
+    %17:f32 = access %value_param_1, 0u
+    store %16, %17
+    %18:ptr<storage, vec3<f32>, read_write> = access %target_1, 1u
+    %19:vec3<f32> = access %value_param_1, 1u
+    store %18, %19
+    %20:ptr<storage, mat2x4<f32>, read_write> = access %target_1, 2u
+    %21:mat2x4<f32> = access %value_param_1, 2u
+    store %20, %21
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/types/u32.wgsl.expected.ir.msl b/test/tint/buffer/uniform/types/u32.wgsl.expected.ir.msl
index 8dc1f0d..f81df8c 100644
--- a/test/tint/buffer/uniform/types/u32.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/types/u32.wgsl.expected.ir.msl
@@ -1,12 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, u32, read> = var @binding_point(0, 0)
+  %s:ptr<storage, u32, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %x:u32 = load %u
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %4:u32 = load %u
+    %x:u32 = let %4
+    store %s, %x
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/types/vec2_f16.wgsl.expected.ir.msl b/test/tint/buffer/uniform/types/vec2_f16.wgsl.expected.ir.msl
index a908f8d..c058c67 100644
--- a/test/tint/buffer/uniform/types/vec2_f16.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/types/vec2_f16.wgsl.expected.ir.msl
@@ -1,12 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, vec2<f16>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, vec2<f16>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %x:vec2<f16> = load %u
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %4:vec2<f16> = load %u
+    %x:vec2<f16> = let %4
+    store %s, %x
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/types/vec2_f32.wgsl.expected.ir.msl b/test/tint/buffer/uniform/types/vec2_f32.wgsl.expected.ir.msl
index c5bcd69..d8275c8 100644
--- a/test/tint/buffer/uniform/types/vec2_f32.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/types/vec2_f32.wgsl.expected.ir.msl
@@ -1,12 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, vec2<f32>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, vec2<f32>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %x:vec2<f32> = load %u
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %4:vec2<f32> = load %u
+    %x:vec2<f32> = let %4
+    store %s, %x
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/types/vec2_i32.wgsl.expected.ir.msl b/test/tint/buffer/uniform/types/vec2_i32.wgsl.expected.ir.msl
index 4506737..c033670 100644
--- a/test/tint/buffer/uniform/types/vec2_i32.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/types/vec2_i32.wgsl.expected.ir.msl
@@ -1,12 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, vec2<i32>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, vec2<i32>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %x:vec2<i32> = load %u
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %4:vec2<i32> = load %u
+    %x:vec2<i32> = let %4
+    store %s, %x
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/types/vec2_u32.wgsl.expected.ir.msl b/test/tint/buffer/uniform/types/vec2_u32.wgsl.expected.ir.msl
index dc2f477..c5e6856 100644
--- a/test/tint/buffer/uniform/types/vec2_u32.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/types/vec2_u32.wgsl.expected.ir.msl
@@ -1,12 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, vec2<u32>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, vec2<u32>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %x:vec2<u32> = load %u
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %4:vec2<u32> = load %u
+    %x:vec2<u32> = let %4
+    store %s, %x
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/types/vec3_f16.wgsl.expected.ir.msl b/test/tint/buffer/uniform/types/vec3_f16.wgsl.expected.ir.msl
index 52474cd..e2ee911 100644
--- a/test/tint/buffer/uniform/types/vec3_f16.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/types/vec3_f16.wgsl.expected.ir.msl
@@ -1,12 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, vec3<f16>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, vec3<f16>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %x:vec3<f16> = load %u
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %4:vec3<f16> = load %u
+    %x:vec3<f16> = let %4
+    store %s, %x
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/types/vec3_f32.wgsl.expected.ir.msl b/test/tint/buffer/uniform/types/vec3_f32.wgsl.expected.ir.msl
index 28ba54f..480b084 100644
--- a/test/tint/buffer/uniform/types/vec3_f32.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/types/vec3_f32.wgsl.expected.ir.msl
@@ -1,12 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, vec3<f32>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, vec3<f32>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %x:vec3<f32> = load %u
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %4:vec3<f32> = load %u
+    %x:vec3<f32> = let %4
+    store %s, %x
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/types/vec3_i32.wgsl.expected.ir.msl b/test/tint/buffer/uniform/types/vec3_i32.wgsl.expected.ir.msl
index 8da11b1..242cae3 100644
--- a/test/tint/buffer/uniform/types/vec3_i32.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/types/vec3_i32.wgsl.expected.ir.msl
@@ -1,12 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, vec3<i32>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, vec3<i32>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %x:vec3<i32> = load %u
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %4:vec3<i32> = load %u
+    %x:vec3<i32> = let %4
+    store %s, %x
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/types/vec3_u32.wgsl.expected.ir.msl b/test/tint/buffer/uniform/types/vec3_u32.wgsl.expected.ir.msl
index 509a8c0..18b6c5e 100644
--- a/test/tint/buffer/uniform/types/vec3_u32.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/types/vec3_u32.wgsl.expected.ir.msl
@@ -1,12 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, vec3<u32>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, vec3<u32>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %x:vec3<u32> = load %u
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %4:vec3<u32> = load %u
+    %x:vec3<u32> = let %4
+    store %s, %x
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/types/vec4_f16.wgsl.expected.ir.msl b/test/tint/buffer/uniform/types/vec4_f16.wgsl.expected.ir.msl
index c44790d..f73d656 100644
--- a/test/tint/buffer/uniform/types/vec4_f16.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/types/vec4_f16.wgsl.expected.ir.msl
@@ -1,12 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, vec4<f16>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, vec4<f16>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %x:vec4<f16> = load %u
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %4:vec4<f16> = load %u
+    %x:vec4<f16> = let %4
+    store %s, %x
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/types/vec4_f32.wgsl.expected.ir.msl b/test/tint/buffer/uniform/types/vec4_f32.wgsl.expected.ir.msl
index 2f461bd..df46933 100644
--- a/test/tint/buffer/uniform/types/vec4_f32.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/types/vec4_f32.wgsl.expected.ir.msl
@@ -1,12 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, vec4<f32>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, vec4<f32>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %x:vec4<f32> = load %u
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %4:vec4<f32> = load %u
+    %x:vec4<f32> = let %4
+    store %s, %x
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/types/vec4_i32.wgsl.expected.ir.msl b/test/tint/buffer/uniform/types/vec4_i32.wgsl.expected.ir.msl
index 808e2fd..3b61b9f 100644
--- a/test/tint/buffer/uniform/types/vec4_i32.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/types/vec4_i32.wgsl.expected.ir.msl
@@ -1,12 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, vec4<i32>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, vec4<i32>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %x:vec4<i32> = load %u
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %4:vec4<i32> = load %u
+    %x:vec4<i32> = let %4
+    store %s, %x
     ret
   }
 }
diff --git a/test/tint/buffer/uniform/types/vec4_u32.wgsl.expected.ir.msl b/test/tint/buffer/uniform/types/vec4_u32.wgsl.expected.ir.msl
index 9b7f573..b7c1bf2 100644
--- a/test/tint/buffer/uniform/types/vec4_u32.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/types/vec4_u32.wgsl.expected.ir.msl
@@ -1,12 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, vec4<u32>, read> = var @binding_point(0, 0)
+  %s:ptr<storage, vec4<u32>, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %x:vec4<u32> = load %u
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %4:vec4<u32> = load %u
+    %x:vec4<u32> = let %4
+    store %s, %x
     ret
   }
 }
diff --git a/test/tint/bug/chromium/1251009.wgsl.expected.ir.msl b/test/tint/bug/chromium/1251009.wgsl.expected.ir.msl
index 28251dc..dd28836 100644
--- a/test/tint/bug/chromium/1251009.wgsl.expected.ir.msl
+++ b/test/tint/bug/chromium/1251009.wgsl.expected.ir.msl
@@ -1,6 +1,25 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: VertexInputs0 = struct @align(4) {
+  vertex_index:u32 @offset(0), @builtin(vertex_index)
+  loc0:i32 @offset(4), @location(0)
+}
+
+VertexInputs1 = struct @align(16) {
+  loc1:u32 @offset(0), @location(2)
+  loc3:vec4<f32> @offset(16), @location(3)
+}
+
+%tint_symbol = @vertex func(%inputs0:VertexInputs0, %loc1:u32 [@location(1)], %instance_index:u32 [@instance_index], %inputs1:VertexInputs1):vec4<f32> [@position] {
+  $B1: {
+    %6:u32 = access %inputs0, 0u
+    %7:u32 = add %6, %instance_index
+    %foo:u32 = let %7
+    ret vec4<f32>(0.0f)
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/bug/chromium/1273230.wgsl.expected.ir.msl b/test/tint/bug/chromium/1273230.wgsl.expected.ir.msl
index 1053e3b..74faf92 100644
--- a/test/tint/bug/chromium/1273230.wgsl.expected.ir.msl
+++ b/test/tint/bug/chromium/1273230.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Uniforms = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Uniforms = struct @align(16) {
   numTriangles:u32 @offset(0)
   gridSize:u32 @offset(4)
   puuuuuuuuuuuuuuuuad1:u32 @offset(8)
@@ -40,7 +40,7 @@
   value_f32_3:f32 @offset(44)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %uniforms:ptr<uniform, Uniforms, read> = var @binding_point(0, 0)
   %indices:ptr<storage, U32s, read_write> = var @binding_point(0, 10)
   %positions:ptr<storage, F32s, read_write> = var @binding_point(0, 11)
@@ -49,13 +49,13 @@
   %dbg:ptr<storage, Dbg, read_write> = var @binding_point(0, 50)
 }
 
-%marg8uintin = func():void -> %b2 {
-  %b2 = block {
+%marg8uintin = func():void {
+  $B2: {
     ret
   }
 }
-%toVoxelPos = func(%position:vec3<f32>):vec3<f32> -> %b3 {
-  %b3 = block {
+%toVoxelPos = func(%position:vec3<f32>):vec3<f32> {
+  $B3: {
     %10:ptr<uniform, vec3<f32>, read> = access %uniforms, 4u
     %11:f32 = load_vector_element %10, 0u
     %12:ptr<uniform, vec3<f32>, read> = access %uniforms, 4u
@@ -120,147 +120,176 @@
     ret %70
   }
 }
-%toIndex1D = func(%gridSize_1:u32, %voxelPos:vec3<f32>):u32 -> %b4 {  # %gridSize_1: 'gridSize'
-  %b4 = block {
-    %74:vec3<u32> = convert %voxelPos
+%toIndex1D = func(%gridSize_1:u32, %voxelPos:vec3<f32>):u32 {  # %gridSize_1: 'gridSize'
+  $B4: {
+    %74:vec3<u32> = call %tint_v3f32_to_v3u32, %voxelPos
     %icoord:ptr<function, vec3<u32>, read_write> = var, %74
-    %76:u32 = load_vector_element %icoord, 0u
-    %77:u32 = load_vector_element %icoord, 1u
-    %78:u32 = mul %gridSize_1, %77
-    %79:u32 = add %76, %78
-    %80:u32 = mul %gridSize_1, %gridSize_1
-    %81:u32 = load_vector_element %icoord, 2u
-    %82:u32 = mul %80, %81
-    %83:u32 = add %79, %82
-    ret %83
+    %77:u32 = load_vector_element %icoord, 0u
+    %78:u32 = load_vector_element %icoord, 1u
+    %79:u32 = mul %gridSize_1, %78
+    %80:u32 = add %77, %79
+    %81:u32 = mul %gridSize_1, %gridSize_1
+    %82:u32 = load_vector_element %icoord, 2u
+    %83:u32 = mul %81, %82
+    %84:u32 = add %80, %83
+    ret %84
   }
 }
-%toIndex4D = func(%gridSize_2:u32, %index:u32):vec3<u32> -> %b5 {  # %gridSize_2: 'gridSize'
-  %b5 = block {
-    %87:u32 = mul %index, %index
-    %88:u32 = div %gridSize_2, %87
-    %z:ptr<function, u32, read_write> = var, %88
-    %90:u32 = mul %gridSize_2, %gridSize_2
-    %91:u32 = load %z
-    %92:u32 = mul %90, %91
-    %93:u32 = sub %gridSize_2, %92
-    %94:u32 = div %93, %gridSize_2
-    %y:ptr<function, u32, read_write> = var, %94
-    %96:u32 = mod %index, %gridSize_2
-    %x:ptr<function, u32, read_write> = var, %96
-    %98:u32 = load %z
-    %99:u32 = load %y
-    %100:u32 = load %y
-    %101:vec3<u32> = construct %98, %99, %100
-    ret %101
+%toIndex4D = func(%gridSize_2:u32, %index:u32):vec3<u32> {  # %gridSize_2: 'gridSize'
+  $B5: {
+    %88:u32 = mul %index, %index
+    %89:u32 = call %tint_div_u32, %gridSize_2, %88
+    %z:ptr<function, u32, read_write> = var, %89
+    %92:u32 = mul %gridSize_2, %gridSize_2
+    %93:u32 = load %z
+    %94:u32 = mul %92, %93
+    %95:u32 = sub %gridSize_2, %94
+    %96:u32 = call %tint_div_u32, %95, %gridSize_2
+    %y:ptr<function, u32, read_write> = var, %96
+    %98:u32 = call %tint_mod_u32, %index, %gridSize_2
+    %x:ptr<function, u32, read_write> = var, %98
+    %101:u32 = load %z
+    %102:u32 = load %y
+    %103:u32 = load %y
+    %104:vec3<u32> = construct %101, %102, %103
+    ret %104
   }
 }
-%loadPosition = func(%vertexIndex:u32):vec3<f32> -> %b6 {
-  %b6 = block {
-    %104:u32 = mul 3u, %vertexIndex
-    %105:u32 = add %104, 0u
-    %106:ptr<storage, f32, read_write> = access %positions, 0u, %105
-    %107:f32 = load %106
-    %108:u32 = mul 3u, %vertexIndex
-    %109:u32 = add %108, 1u
-    %110:ptr<storage, f32, read_write> = access %positions, 0u, %109
-    %111:f32 = load %110
-    %112:u32 = mul 3u, %vertexIndex
-    %113:u32 = add %112, 2u
-    %114:ptr<storage, f32, read_write> = access %positions, 0u, %113
-    %115:f32 = load %114
-    %116:vec3<f32> = construct %107, %111, %115
-    %position_1:ptr<function, vec3<f32>, read_write> = var, %116  # %position_1: 'position'
-    %118:vec3<f32> = load %position_1
-    ret %118
+%loadPosition = func(%vertexIndex:u32):vec3<f32> {
+  $B6: {
+    %107:u32 = mul 3u, %vertexIndex
+    %108:u32 = add %107, 0u
+    %109:ptr<storage, f32, read_write> = access %positions, 0u, %108
+    %110:f32 = load %109
+    %111:u32 = mul 3u, %vertexIndex
+    %112:u32 = add %111, 1u
+    %113:ptr<storage, f32, read_write> = access %positions, 0u, %112
+    %114:f32 = load %113
+    %115:u32 = mul 3u, %vertexIndex
+    %116:u32 = add %115, 2u
+    %117:ptr<storage, f32, read_write> = access %positions, 0u, %116
+    %118:f32 = load %117
+    %119:vec3<f32> = construct %110, %114, %118
+    %position_1:ptr<function, vec3<f32>, read_write> = var, %119  # %position_1: 'position'
+    %121:vec3<f32> = load %position_1
+    ret %121
   }
 }
-%doIgnore = func():void -> %b7 {
-  %b7 = block {
-    %120:ptr<uniform, u32, read> = access %uniforms, 0u
-    %121:u32 = load %120
-    %g43:ptr<function, u32, read_write> = var, %121
-    %123:ptr<storage, u32, read_write> = access %dbg, 5u
+%doIgnore = func():void {
+  $B7: {
+    %123:ptr<uniform, u32, read> = access %uniforms, 0u
     %124:u32 = load %123
-    %kj6:ptr<function, u32, read_write> = var, %124
-    %126:ptr<storage, atomic<u32>, read_write> = access %counters, 0u, 0i
-    %127:u32 = atomicLoad %126
-    %b53:ptr<function, u32, read_write> = var, %127
-    %129:ptr<storage, u32, read_write> = access %indices, 0u, 0i
-    %130:u32 = load %129
-    %rwg:ptr<function, u32, read_write> = var, %130
-    %132:ptr<storage, f32, read_write> = access %positions, 0u, 0i
-    %133:f32 = load %132
-    %rb5:ptr<function, f32, read_write> = var, %133
-    %135:ptr<storage, atomic<i32>, read_write> = access %LUT, 0u, 0i
-    %136:i32 = atomicLoad %135
-    %g55:ptr<function, i32, read_write> = var, %136
+    %g43:ptr<function, u32, read_write> = var, %124
+    %126:ptr<storage, u32, read_write> = access %dbg, 5u
+    %127:u32 = load %126
+    %kj6:ptr<function, u32, read_write> = var, %127
+    %129:ptr<storage, atomic<u32>, read_write> = access %counters, 0u, 0i
+    %130:u32 = atomicLoad %129
+    %b53:ptr<function, u32, read_write> = var, %130
+    %132:ptr<storage, u32, read_write> = access %indices, 0u, 0i
+    %133:u32 = load %132
+    %rwg:ptr<function, u32, read_write> = var, %133
+    %135:ptr<storage, f32, read_write> = access %positions, 0u, 0i
+    %136:f32 = load %135
+    %rb5:ptr<function, f32, read_write> = var, %136
+    %138:ptr<storage, atomic<i32>, read_write> = access %LUT, 0u, 0i
+    %139:i32 = atomicLoad %138
+    %g55:ptr<function, i32, read_write> = var, %139
     ret
   }
 }
-%main_count = @compute @workgroup_size(128, 1, 1) func(%GlobalInvocationID:vec3<u32> [@global_invocation_id]):void -> %b8 {
-  %b8 = block {
-    %140:u32 = access %GlobalInvocationID, 0u
-    %triangleIndex:ptr<function, u32, read_write> = var, %140
-    %142:u32 = load %triangleIndex
-    %143:ptr<uniform, u32, read> = access %uniforms, 0u
-    %144:u32 = load %143
-    %145:bool = gte %142, %144
-    if %145 [t: %b9] {  # if_1
-      %b9 = block {  # true
+%main_count = @compute @workgroup_size(128, 1, 1) func(%GlobalInvocationID:vec3<u32> [@global_invocation_id]):void {
+  $B8: {
+    %143:u32 = access %GlobalInvocationID, 0u
+    %triangleIndex:ptr<function, u32, read_write> = var, %143
+    %145:u32 = load %triangleIndex
+    %146:ptr<uniform, u32, read> = access %uniforms, 0u
+    %147:u32 = load %146
+    %148:bool = gte %145, %147
+    if %148 [t: $B9] {  # if_1
+      $B9: {  # true
         ret
       }
     }
-    %146:void = call %doIgnore
-    %147:u32 = load %triangleIndex
-    %148:u32 = mul 3u, %147
-    %149:u32 = add %148, 0u
-    %150:ptr<storage, u32, read_write> = access %indices, 0u, %149
-    %151:u32 = load %150
-    %i0:ptr<function, u32, read_write> = var, %151
-    %153:u32 = load %i0
-    %154:u32 = mul 3u, %153
-    %155:u32 = add %154, 1u
-    %156:ptr<storage, u32, read_write> = access %indices, 0u, %155
-    %157:u32 = load %156
-    %i1:ptr<function, u32, read_write> = var, %157
-    %159:u32 = load %i0
-    %160:u32 = mul 3u, %159
-    %161:u32 = add %160, 2u
-    %162:ptr<storage, u32, read_write> = access %indices, 0u, %161
-    %163:u32 = load %162
-    %i2:ptr<function, u32, read_write> = var, %163
-    %165:u32 = load %i0
-    %166:vec3<f32> = call %loadPosition, %165
-    %p0:ptr<function, vec3<f32>, read_write> = var, %166
+    %149:void = call %doIgnore
+    %150:u32 = load %triangleIndex
+    %151:u32 = mul 3u, %150
+    %152:u32 = add %151, 0u
+    %153:ptr<storage, u32, read_write> = access %indices, 0u, %152
+    %154:u32 = load %153
+    %i0:ptr<function, u32, read_write> = var, %154
+    %156:u32 = load %i0
+    %157:u32 = mul 3u, %156
+    %158:u32 = add %157, 1u
+    %159:ptr<storage, u32, read_write> = access %indices, 0u, %158
+    %160:u32 = load %159
+    %i1:ptr<function, u32, read_write> = var, %160
+    %162:u32 = load %i0
+    %163:u32 = mul 3u, %162
+    %164:u32 = add %163, 2u
+    %165:ptr<storage, u32, read_write> = access %indices, 0u, %164
+    %166:u32 = load %165
+    %i2:ptr<function, u32, read_write> = var, %166
     %168:u32 = load %i0
     %169:vec3<f32> = call %loadPosition, %168
-    %p1:ptr<function, vec3<f32>, read_write> = var, %169
-    %171:u32 = load %i2
+    %p0:ptr<function, vec3<f32>, read_write> = var, %169
+    %171:u32 = load %i0
     %172:vec3<f32> = call %loadPosition, %171
-    %p2:ptr<function, vec3<f32>, read_write> = var, %172
-    %174:vec3<f32> = load %p0
-    %175:vec3<f32> = load %p2
-    %176:vec3<f32> = add %174, %175
-    %177:vec3<f32> = load %p1
-    %178:vec3<f32> = add %176, %177
-    %179:vec3<f32> = div %178, 3.0f
-    %center:ptr<function, vec3<f32>, read_write> = var, %179
-    %181:vec3<f32> = load %p1
-    %182:vec3<f32> = call %toVoxelPos, %181
-    %voxelPos_1:ptr<function, vec3<f32>, read_write> = var, %182  # %voxelPos_1: 'voxelPos'
-    %184:ptr<uniform, u32, read> = access %uniforms, 1u
-    %185:u32 = load %184
-    %186:vec3<f32> = load %p0
-    %187:u32 = call %toIndex1D, %185, %186
-    %lIndex:ptr<function, u32, read_write> = var, %187
-    %189:u32 = load %i1
-    %190:ptr<storage, atomic<i32>, read_write> = access %LUT, 0u, %189
-    %191:i32 = atomicAdd %190, 1i
-    %triangleOffset:ptr<function, i32, read_write> = var, %191
+    %p1:ptr<function, vec3<f32>, read_write> = var, %172
+    %174:u32 = load %i2
+    %175:vec3<f32> = call %loadPosition, %174
+    %p2:ptr<function, vec3<f32>, read_write> = var, %175
+    %177:vec3<f32> = load %p0
+    %178:vec3<f32> = load %p2
+    %179:vec3<f32> = add %177, %178
+    %180:vec3<f32> = load %p1
+    %181:vec3<f32> = add %179, %180
+    %182:vec3<f32> = div %181, 3.0f
+    %center:ptr<function, vec3<f32>, read_write> = var, %182
+    %184:vec3<f32> = load %p1
+    %185:vec3<f32> = call %toVoxelPos, %184
+    %voxelPos_1:ptr<function, vec3<f32>, read_write> = var, %185  # %voxelPos_1: 'voxelPos'
+    %187:ptr<uniform, u32, read> = access %uniforms, 1u
+    %188:u32 = load %187
+    %189:vec3<f32> = load %p0
+    %190:u32 = call %toIndex1D, %188, %189
+    %lIndex:ptr<function, u32, read_write> = var, %190
+    %192:u32 = load %i1
+    %193:ptr<storage, atomic<i32>, read_write> = access %LUT, 0u, %192
+    %194:i32 = atomicAdd %193, 1i
+    %triangleOffset:ptr<function, i32, read_write> = var, %194
     ret
   }
 }
+%tint_div_u32 = func(%lhs:u32, %rhs:u32):u32 {
+  $B10: {
+    %198:bool = eq %rhs, 0u
+    %199:u32 = select %rhs, 1u, %198
+    %200:u32 = div %lhs, %199
+    ret %200
+  }
+}
+%tint_mod_u32 = func(%lhs_1:u32, %rhs_1:u32):u32 {  # %lhs_1: 'lhs', %rhs_1: 'rhs'
+  $B11: {
+    %203:bool = eq %rhs_1, 0u
+    %204:u32 = select %rhs_1, 1u, %203
+    %205:u32 = let %204
+    %206:u32 = div %lhs_1, %205
+    %207:u32 = mul %206, %205
+    %208:u32 = sub %lhs_1, %207
+    ret %208
+  }
+}
+%tint_v3f32_to_v3u32 = func(%value:vec3<f32>):vec3<u32> {
+  $B12: {
+    %210:vec3<u32> = convert %value
+    %211:vec3<bool> = gte %value, vec3<f32>(0.0f)
+    %212:vec3<u32> = select vec3<u32>(0u), %210, %211
+    %213:vec3<bool> = lte %value, vec3<f32>(4294967040.0f)
+    %214:vec3<u32> = select vec3<u32>(4294967295u), %212, %213
+    ret %214
+  }
+}
 
 unhandled variable address space
 ********************************************************************
diff --git a/test/tint/bug/chromium/1290107.wgsl.expected.ir.msl b/test/tint/bug/chromium/1290107.wgsl.expected.ir.msl
index f262bf6..d318171 100644
--- a/test/tint/bug/chromium/1290107.wgsl.expected.ir.msl
+++ b/test/tint/bug/chromium/1290107.wgsl.expected.ir.msl
@@ -1,16 +1,17 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   f:f32 @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %arr:ptr<storage, array<S>, read> = var @binding_point(0, 0)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %len:u32 = arrayLength %arr
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %3:u32 = arrayLength %arr
+    %len:u32 = let %3
     ret
   }
 }
diff --git a/test/tint/bug/chromium/1343242.wgsl.expected.ir.msl b/test/tint/bug/chromium/1343242.wgsl.expected.ir.msl
index d009c59..78c346a 100644
--- a/test/tint/bug/chromium/1343242.wgsl.expected.ir.msl
+++ b/test/tint/bug/chromium/1343242.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread bool o = true;
+program_source:4:13: error: program scope variable must reside in constant address space
+thread bool o = true;
+            ^
+
diff --git a/test/tint/bug/chromium/1350147.wgsl.expected.ir.msl b/test/tint/bug/chromium/1350147.wgsl.expected.ir.msl
index dba5f88..d1dd16d 100644
--- a/test/tint/bug/chromium/1350147.wgsl.expected.ir.msl
+++ b/test/tint/bug/chromium/1350147.wgsl.expected.ir.msl
@@ -11,3 +11,16 @@
   float const a = 2.5f;
   float const b = 2.5f;
 }
+program_source:9:15: error: redefinition of 'a'
+  float const a = 2.5f;
+              ^
+program_source:7:15: note: previous definition is here
+  float const a = 1.47112762928009033203f;
+              ^
+program_source:10:15: error: redefinition of 'b'
+  float const b = 2.5f;
+              ^
+program_source:8:15: note: previous definition is here
+  float const b = 0.09966865181922912598f;
+              ^
+
diff --git a/test/tint/bug/chromium/1360925.wgsl.expected.ir.msl b/test/tint/bug/chromium/1360925.wgsl.expected.ir.msl
index 99f9e9e..87fcb15 100644
--- a/test/tint/bug/chromium/1360925.wgsl.expected.ir.msl
+++ b/test/tint/bug/chromium/1360925.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %G:ptr<storage, array<i32>, read> = var @binding_point(0, 0)
 }
 
-%n = func():void -> %b2 {
-  %b2 = block {
+%n = func():void {
+  $B2: {
     %p:ptr<storage, array<i32>, read> = let %G
     %4:u32 = arrayLength %p
     ret
diff --git a/test/tint/bug/chromium/1367602_private_space_initializer_valid_count.wgsl.expected.ir.msl b/test/tint/bug/chromium/1367602_private_space_initializer_valid_count.wgsl.expected.ir.msl
index 5e5fb64..8cac9ee 100644
--- a/test/tint/bug/chromium/1367602_private_space_initializer_valid_count.wgsl.expected.ir.msl
+++ b/test/tint/bug/chromium/1367602_private_space_initializer_valid_count.wgsl.expected.ir.msl
@@ -18,3 +18,7 @@
 thread tint_array<bool, 65535> v = tint_array<bool, 65535>{};
 void f() {
 }
+program_source:16:32: error: program scope variable must reside in constant address space
+thread tint_array<bool, 65535> v = tint_array<bool, 65535>{};
+                               ^
+
diff --git a/test/tint/bug/chromium/1367602_private_space_no_initializer_valid_count.wgsl.expected.ir.msl b/test/tint/bug/chromium/1367602_private_space_no_initializer_valid_count.wgsl.expected.ir.msl
index bf741e0..7c79dfc 100644
--- a/test/tint/bug/chromium/1367602_private_space_no_initializer_valid_count.wgsl.expected.ir.msl
+++ b/test/tint/bug/chromium/1367602_private_space_no_initializer_valid_count.wgsl.expected.ir.msl
@@ -18,3 +18,7 @@
 thread tint_array<bool, 65535> v = {};
 void f() {
 }
+program_source:16:32: error: program scope variable must reside in constant address space
+thread tint_array<bool, 65535> v = {};
+                               ^
+
diff --git a/test/tint/bug/chromium/1367602_storage_space.wgsl.expected.ir.msl b/test/tint/bug/chromium/1367602_storage_space.wgsl.expected.ir.msl
index 0872f3e..a4c0a7f 100644
--- a/test/tint/bug/chromium/1367602_storage_space.wgsl.expected.ir.msl
+++ b/test/tint/bug/chromium/1367602_storage_space.wgsl.expected.ir.msl
@@ -1,10 +1,10 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: A = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: A = struct @align(4) {
   a:array<f32, 1000000> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %v:ptr<storage, array<i32, 1000000>, read> = var @binding_point(0, 0)
   %b:ptr<storage, A, read> = var @binding_point(0, 1)
 }
diff --git a/test/tint/bug/chromium/1381883.wgsl.expected.ir.msl b/test/tint/bug/chromium/1381883.wgsl.expected.ir.msl
index f925a33..abed861 100644
--- a/test/tint/bug/chromium/1381883.wgsl.expected.ir.msl
+++ b/test/tint/bug/chromium/1381883.wgsl.expected.ir.msl
@@ -3,5 +3,9 @@
 #include <metal_stdlib>
 using namespace metal;
 
-void tint_symbol() {
+fragment void tint_symbol(float none) {
 }
+program_source:4:27: error: invalid type 'float' for input declaration in a fragment function
+fragment void tint_symbol(float none) {
+                          ^~~~~~~~~~
+
diff --git a/test/tint/bug/chromium/1386647.wgsl.expected.ir.msl b/test/tint/bug/chromium/1386647.wgsl.expected.ir.msl
index 28251dc..288ce4b 100644
--- a/test/tint/bug/chromium/1386647.wgsl.expected.ir.msl
+++ b/test/tint/bug/chromium/1386647.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+kernel void f(uint3 v [[thread_position_in_grid]]) {
+  uint const l = (v[0u] << (tint_mod_u32(v[1u], 1u) & 31u));
+}
+uint tint_mod_u32(uint lhs, uint rhs) {
+  uint const v_1 = select(rhs, 1u, (rhs == 0u));
+  return (lhs - ((lhs / v_1) * v_1));
+}
+program_source:5:29: error: use of undeclared identifier 'tint_mod_u32'
+  uint const l = (v[0u] << (tint_mod_u32(v[1u], 1u) & 31u));
+                            ^
+
diff --git a/test/tint/bug/chromium/1405676.wgsl.expected.ir.msl b/test/tint/bug/chromium/1405676.wgsl.expected.ir.msl
index b38060a..ee65b2d 100644
--- a/test/tint/bug/chromium/1405676.wgsl.expected.ir.msl
+++ b/test/tint/bug/chromium/1405676.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureLoad
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/bug/chromium/1430309.wgsl.expected.ir.msl b/test/tint/bug/chromium/1430309.wgsl.expected.ir.msl
index 28251dc..144777b 100644
--- a/test/tint/bug/chromium/1430309.wgsl.expected.ir.msl
+++ b/test/tint/bug/chromium/1430309.wgsl.expected.ir.msl
@@ -1,9 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct frexp_result_f32 {
+  float f;
+};
+struct frexp_result_f32_1 {
+  float fract;
+  int exp;
+};
+
+thread frexp_result_f32 a = {};
+thread frexp_result_f32_1 b = frexp_result_f32_1{.fract=0.5f, .exp=1};
+fragment float4 tint_symbol() {
+  return float4(a.f, b.fract, 0.0f, 0.0f);
+}
+program_source:11:25: error: program scope variable must reside in constant address space
+thread frexp_result_f32 a = {};
+                        ^
+program_source:12:27: error: program scope variable must reside in constant address space
+thread frexp_result_f32_1 b = frexp_result_f32_1{.fract=0.5f, .exp=1};
+                          ^
+
diff --git a/test/tint/bug/chromium/1434271.wgsl.expected.ir.msl b/test/tint/bug/chromium/1434271.wgsl.expected.ir.msl
index 5877ca6..f20f319 100644
--- a/test/tint/bug/chromium/1434271.wgsl.expected.ir.msl
+++ b/test/tint/bug/chromium/1434271.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: RenderParams = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: RenderParams = struct @align(16) {
   modelViewProjectionMatrix:mat4x4<f32> @offset(0)
   right:vec3<f32> @offset(64)
   up:vec3<f32> @offset(80)
@@ -42,7 +42,7 @@
   weights:array<f32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %rand_seed:ptr<private, vec2<f32>, read_write> = var
   %render_params:ptr<uniform, RenderParams, read> = var @binding_point(0, 5)
   %sim_params:ptr<uniform, SimulationParams, read> = var @binding_point(0, 0)
@@ -55,8 +55,8 @@
   %tex_out:ptr<handle, texture_storage_2d<rgba8unorm, write>, read> = var @binding_point(0, 7)
 }
 
-%asinh_468a48 = func():void -> %b2 {
-  %b2 = block {
+%asinh_468a48 = func():void {
+  $B2: {
     %arg_0:ptr<function, f16, read_write> = var, 0.0h
     %13:f16 = load %arg_0
     %14:f16 = asinh %13
@@ -64,26 +64,26 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %17:void = call %asinh_468a48
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %19:void = call %asinh_468a48
     ret
   }
 }
-%rgba32uintin = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%rgba32uintin = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %21:void = call %asinh_468a48
     ret
   }
 }
-%vs_main = @vertex func(%in:VertexInput):VertexOutput -> %b6 {
-  %b6 = block {
+%vs_main = @vertex func(%in:VertexInput):VertexOutput {
+  $B6: {
     %24:ptr<uniform, vec3<f32>, read> = access %render_params, 1u
     %25:vec3<f32> = load %24
     %26:ptr<uniform, vec3<f32>, read> = access %render_params, 2u
@@ -101,106 +101,139 @@
     %38:ptr<function, vec4<f32>, read_write> = access %out, 0u
     %39:ptr<uniform, mat4x4<f32>, read> = access %render_params, 0u
     %40:mat4x4<f32> = load %39
-    %41:vec3<f32> = load %position
-    %42:vec4<f32> = construct %41, 1.0f
-    %43:vec4<f32> = mul %40, %42
-    store %38, %43
-    %44:ptr<function, vec4<f32>, read_write> = access %out, 1u
-    %45:vec4<f32> = access %in, 1u
-    store %44, %45
-    %46:ptr<function, vec2<f32>, read_write> = access %out, 2u
-    %47:vec2<f32> = access %in, 2u
-    store %46, %47
-    %48:VertexOutput = load %out
-    ret %48
+    %41:mat4x4<f32> = let %40
+    %42:vec3<f32> = load %position
+    %43:vec4<f32> = construct %42, 1.0f
+    %44:vec4<f32> = mul %41, %43
+    store %38, %44
+    %45:ptr<function, vec4<f32>, read_write> = access %out, 1u
+    %46:vec4<f32> = access %in, 1u
+    store %45, %46
+    %47:ptr<function, vec2<f32>, read_write> = access %out, 2u
+    %48:vec2<f32> = access %in, 2u
+    store %47, %48
+    %49:VertexOutput = load %out
+    ret %49
   }
 }
-%simulate = @compute @workgroup_size(64, 1, 1) func(%GlobalInvocationID:vec3<u32> [@global_invocation_id]):void -> %b7 {
-  %b7 = block {
-    %51:ptr<uniform, vec4<f32>, read> = access %sim_params, 1u
-    %52:vec4<f32> = load %51
-    %53:vec2<f32> = swizzle %52, xy
-    %54:vec2<u32> = swizzle %GlobalInvocationID, xy
-    %55:vec2<f32> = convert %54
-    %56:vec2<f32> = mul %53, %55
-    %57:ptr<uniform, vec4<f32>, read> = access %sim_params, 1u
-    %58:vec4<f32> = load %57
-    %59:vec2<f32> = swizzle %58, zw
-    %60:vec2<f32> = mul %56, %59
-    store %rand_seed, %60
-    %idx:u32 = access %GlobalInvocationID, 0u
-    %62:ptr<storage, Particle, read_write> = access %data, 0u, %idx
-    %63:Particle = load %62
-    %particle:ptr<function, Particle, read_write> = var, %63
+%simulate = @compute @workgroup_size(64, 1, 1) func(%GlobalInvocationID:vec3<u32> [@global_invocation_id]):void {
+  $B7: {
+    %52:ptr<uniform, vec4<f32>, read> = access %sim_params, 1u
+    %53:vec4<f32> = load %52
+    %54:vec2<f32> = swizzle %53, xy
+    %55:vec2<f32> = let %54
+    %56:vec2<u32> = swizzle %GlobalInvocationID, xy
+    %57:vec2<f32> = convert %56
+    %58:vec2<f32> = mul %55, %57
+    %59:ptr<uniform, vec4<f32>, read> = access %sim_params, 1u
+    %60:vec4<f32> = load %59
+    %61:vec2<f32> = swizzle %60, zw
+    %62:vec2<f32> = mul %58, %61
+    store %rand_seed, %62
+    %63:u32 = access %GlobalInvocationID, 0u
+    %idx:u32 = let %63
     %65:ptr<storage, Particle, read_write> = access %data, 0u, %idx
-    %66:Particle = load %particle
-    store %65, %66
+    %66:Particle = load %65
+    %particle:ptr<function, Particle, read_write> = var, %66
+    %68:ptr<storage, Particle, read_write> = access %data, 0u, %idx
+    %69:Particle = load %particle
+    %70:void = call %tint_store_and_preserve_padding, %68, %69
     ret
   }
 }
-%export_level = @compute @workgroup_size(64, 1, 1) func(%coord:vec3<u32> [@global_invocation_id]):void -> %b8 {
-  %b8 = block {
-    %69:vec2<u32> = swizzle %coord, xy
-    %70:texture_storage_2d<rgba8unorm, write> = load %tex_out
-    %71:vec2<u32> = textureDimensions %70
-    %72:vec2<u32> = construct %71
-    %73:vec2<bool> = lt %69, %72
-    %74:bool = all %73
-    if %74 [t: %b9] {  # if_1
-      %b9 = block {  # true
-        %75:u32 = access %coord, 0u
-        %76:u32 = access %coord, 1u
-        %77:ptr<uniform, u32, read> = access %ubo, 0u
-        %78:u32 = load %77
-        %79:u32 = mul %76, %78
-        %dst_offset:u32 = shiftl %75, %79
-        %81:u32 = access %coord, 0u
-        %82:u32 = sub %81, 2u
-        %83:u32 = access %coord, 1u
-        %84:u32 = shiftr %83, 2u
-        %85:ptr<uniform, u32, read> = access %ubo, 0u
-        %86:u32 = load %85
-        %87:u32 = mul %84, %86
-        %src_offset:u32 = add %82, %87
-        %89:u32 = shiftl %src_offset, 0u
-        %90:ptr<storage, f32, read> = access %buf_in, 0u, %89
-        %a:f32 = load %90
-        %92:u32 = add %src_offset, 1u
-        %93:ptr<storage, f32, read> = access %buf_in, 0u, %92
-        %b:f32 = load %93
-        %95:u32 = add %src_offset, 1u
-        %96:ptr<uniform, u32, read> = access %ubo, 0u
-        %97:u32 = load %96
-        %98:u32 = add %95, %97
-        %99:ptr<storage, f32, read> = access %buf_in, 0u, %98
-        %c:f32 = load %99
-        %101:u32 = add %src_offset, 1u
-        %102:ptr<uniform, u32, read> = access %ubo, 0u
-        %103:u32 = load %102
-        %104:u32 = add %101, %103
-        %105:ptr<storage, f32, read> = access %buf_in, 0u, %104
-        %d:f32 = load %105
-        %107:vec4<f32> = construct %a, %b, %c, %d
-        %sum:f32 = dot %107, vec4<f32>(1.0f)
-        %109:ptr<storage, f32, read_write> = access %buf_out, 0u, %dst_offset
-        %110:f32 = mod %sum, 4.0f
-        store %109, %110
-        %111:f32 = mul %a, %b
-        %112:f32 = div %a, %b
-        %113:f32 = add %112, %c
-        %114:vec4<f32> = construct %a, %111, %113, %sum
-        %115:f32 = max %sum, 0.0f
-        %probabilities:vec4<f32> = add %114, %115
-        %117:texture_storage_2d<rgba8unorm, write> = load %tex_out
-        %118:vec2<u32> = swizzle %coord, xy
-        %119:vec2<i32> = convert %118
-        %120:void = textureStore %117, %119, %probabilities
+%export_level = @compute @workgroup_size(64, 1, 1) func(%coord:vec3<u32> [@global_invocation_id]):void {
+  $B8: {
+    %74:vec2<u32> = swizzle %coord, xy
+    %75:texture_storage_2d<rgba8unorm, write> = load %tex_out
+    %76:vec2<u32> = textureDimensions %75
+    %77:vec2<u32> = construct %76
+    %78:vec2<bool> = lt %74, %77
+    %79:bool = all %78
+    if %79 [t: $B9] {  # if_1
+      $B9: {  # true
+        %80:u32 = access %coord, 0u
+        %81:u32 = access %coord, 1u
+        %82:ptr<uniform, u32, read> = access %ubo, 0u
+        %83:u32 = load %82
+        %84:u32 = mul %81, %83
+        %85:u32 = and %84, 31u
+        %86:u32 = shl %80, %85
+        %dst_offset:u32 = let %86
+        %88:u32 = access %coord, 0u
+        %89:u32 = sub %88, 2u
+        %90:u32 = access %coord, 1u
+        %91:u32 = and 2u, 31u
+        %92:u32 = shr %90, %91
+        %93:ptr<uniform, u32, read> = access %ubo, 0u
+        %94:u32 = load %93
+        %95:u32 = mul %92, %94
+        %96:u32 = add %89, %95
+        %src_offset:u32 = let %96
+        %98:u32 = and 0u, 31u
+        %99:u32 = shl %src_offset, %98
+        %100:ptr<storage, f32, read> = access %buf_in, 0u, %99
+        %101:f32 = load %100
+        %a:f32 = let %101
+        %103:u32 = add %src_offset, 1u
+        %104:ptr<storage, f32, read> = access %buf_in, 0u, %103
+        %105:f32 = load %104
+        %b:f32 = let %105
+        %107:u32 = add %src_offset, 1u
+        %108:ptr<uniform, u32, read> = access %ubo, 0u
+        %109:u32 = load %108
+        %110:u32 = add %107, %109
+        %111:ptr<storage, f32, read> = access %buf_in, 0u, %110
+        %112:f32 = load %111
+        %c:f32 = let %112
+        %114:u32 = add %src_offset, 1u
+        %115:ptr<uniform, u32, read> = access %ubo, 0u
+        %116:u32 = load %115
+        %117:u32 = add %114, %116
+        %118:ptr<storage, f32, read> = access %buf_in, 0u, %117
+        %119:f32 = load %118
+        %d:f32 = let %119
+        %121:vec4<f32> = construct %a, %b, %c, %d
+        %122:f32 = dot %121, vec4<f32>(1.0f)
+        %sum:f32 = let %122
+        %124:ptr<storage, f32, read_write> = access %buf_out, 0u, %dst_offset
+        %125:f32 = mod %sum, 4.0f
+        store %124, %125
+        %126:f32 = mul %a, %b
+        %127:f32 = div %a, %b
+        %128:f32 = add %127, %c
+        %129:vec4<f32> = construct %a, %126, %128, %sum
+        %130:vec4<f32> = let %129
+        %131:f32 = max %sum, 0.0f
+        %132:vec4<f32> = add %130, %131
+        %probabilities:vec4<f32> = let %132
+        %134:texture_storage_2d<rgba8unorm, write> = load %tex_out
+        %135:texture_storage_2d<rgba8unorm, write> = let %134
+        %136:vec2<u32> = swizzle %coord, xy
+        %137:vec2<i32> = convert %136
+        %138:void = textureStore %135, %137, %probabilities
         exit_if  # if_1
       }
     }
     ret
   }
 }
+%tint_store_and_preserve_padding = func(%target:ptr<storage, Particle, read_write>, %value_param:Particle):void {
+  $B10: {
+    %141:ptr<storage, vec3<f32>, read_write> = access %target, 0u
+    %142:vec3<f32> = access %value_param, 0u
+    store %141, %142
+    %143:ptr<storage, f32, read_write> = access %target, 1u
+    %144:f32 = access %value_param, 1u
+    store %143, %144
+    %145:ptr<storage, vec4<f32>, read_write> = access %target, 2u
+    %146:vec4<f32> = access %value_param, 2u
+    store %145, %146
+    %147:ptr<storage, vec2<f32>, read_write> = access %target, 3u
+    %148:vec2<f32> = access %value_param, 3u
+    store %147, %148
+    ret
+  }
+}
 
 unhandled variable address space
 ********************************************************************
diff --git a/test/tint/bug/chromium/1449474.wgsl.expected.ir.msl b/test/tint/bug/chromium/1449474.wgsl.expected.ir.msl
index e3024b1..06f9314 100644
--- a/test/tint/bug/chromium/1449474.wgsl.expected.ir.msl
+++ b/test/tint/bug/chromium/1449474.wgsl.expected.ir.msl
@@ -18,3 +18,5 @@
 thread tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1> arr = tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<tint_array<int, 1>, 1>, 1>, 1>{tint_array<tint_array<tint_array<int, 1>, 1>, 1>{tint_array<tint_array<int, 1>, 1>{tint_array<int, 1>{-6}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}};
 void f() {
 }
+program_source:16:987: error: program scope variable must reside in constant address space
+
diff --git a/test/tint/bug/chromium/324466107.wgsl.expected.ir.msl b/test/tint/bug/chromium/324466107.wgsl.expected.ir.msl
new file mode 100644
index 0000000..0f7ec1f
--- /dev/null
+++ b/test/tint/bug/chromium/324466107.wgsl.expected.ir.msl
@@ -0,0 +1,5 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+}
diff --git a/test/tint/bug/chromium/335592006.wgsl.expected.ir.msl b/test/tint/bug/chromium/335592006.wgsl.expected.ir.msl
new file mode 100644
index 0000000..5a5a617
--- /dev/null
+++ b/test/tint/bug/chromium/335592006.wgsl.expected.ir.msl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int const a = 1;
+  int(a);
+}
+program_source:6:7: error: redefinition of 'a' with a different type: 'int' vs 'const int'
+  int(a);
+      ^
+program_source:5:13: note: previous definition is here
+  int const a = 1;
+            ^
+
diff --git a/test/tint/bug/chromium/40943165.wgsl.expected.ir.msl b/test/tint/bug/chromium/40943165.wgsl.expected.ir.msl
new file mode 100644
index 0000000..fbd61a0
--- /dev/null
+++ b/test/tint/bug/chromium/40943165.wgsl.expected.ir.msl
@@ -0,0 +1,27 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+threadgroup float2x2 W;
+kernel void F(uint mat2x2 [[thread_index_in_threadgroup]]) {
+  if ((mat2x2 == 0u)) {
+    W = float2x2(float2(0.0f), float2(0.0f));
+  }
+  threadgroup_barrier(mem_flags::mem_threadgroup);
+  W[0] = (W[0] + 0.0f);
+}
+program_source:4:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 W;
+                     ^
+program_source:6:15: warning: equality comparison with extraneous parentheses [-Wparentheses-equality]
+  if ((mat2x2 == 0u)) {
+       ~~~~~~~^~~~~
+program_source:6:15: note: remove extraneous parentheses around the comparison to silence this warning
+  if ((mat2x2 == 0u)) {
+      ~       ^    ~
+program_source:6:15: note: use '=' to turn this equality comparison into an assignment
+  if ((mat2x2 == 0u)) {
+              ^~
+              =
+
diff --git a/test/tint/bug/dawn/947.wgsl.expected.ir.msl b/test/tint/bug/dawn/947.wgsl.expected.ir.msl
index ecc7c06..b6b5579 100644
--- a/test/tint/bug/dawn/947.wgsl.expected.ir.msl
+++ b/test/tint/bug/dawn/947.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Uniforms = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Uniforms = struct @align(8) {
   u_scale:vec2<f32> @offset(0)
   u_offset:vec2<f32> @offset(8)
 }
@@ -10,81 +10,89 @@
   position:vec4<f32> @offset(16), @builtin(position)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %uniforms:ptr<uniform, Uniforms, read> = var @binding_point(0, 0)
   %mySampler:ptr<handle, sampler, read> = var @binding_point(0, 1)
   %myTexture:ptr<handle, texture_2d<f32>, read> = var @binding_point(0, 2)
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%vs_main = @vertex func(%VertexIndex:u32 [@vertex_index]):VertexOutputs -> %b2 {
-  %b2 = block {
+%vs_main = @vertex func(%VertexIndex:u32 [@vertex_index]):VertexOutputs {
+  $B2: {
     %texcoord:ptr<function, array<vec2<f32>, 3>, read_write> = var, array<vec2<f32>, 3>(vec2<f32>(-0.5f, 0.0f), vec2<f32>(1.5f, 0.0f), vec2<f32>(0.5f, 2.0f))
     %output:ptr<function, VertexOutputs, read_write> = var
-    %8:ptr<function, vec4<f32>, read_write> = access %output, 1u
-    %9:ptr<function, vec2<f32>, read_write> = access %texcoord, %VertexIndex
-    %10:vec2<f32> = load %9
-    %11:vec2<f32> = mul %10, 2.0f
-    %12:vec2<f32> = sub %11, vec2<f32>(1.0f)
-    %13:vec4<f32> = construct %12, 0.0f, 1.0f
-    store %8, %13
-    %14:ptr<uniform, vec2<f32>, read> = access %uniforms, 0u
-    %15:f32 = load_vector_element %14, 1u
-    %16:bool = lt %15, 0.0f
-    %flipY:ptr<function, bool, read_write> = var, %16
-    %18:bool = load %flipY
-    if %18 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %19:ptr<function, vec2<f32>, read_write> = access %output, 0u
-        %20:ptr<function, vec2<f32>, read_write> = access %texcoord, %VertexIndex
-        %21:vec2<f32> = load %20
-        %22:ptr<uniform, vec2<f32>, read> = access %uniforms, 0u
-        %23:vec2<f32> = load %22
-        %24:vec2<f32> = mul %21, %23
-        %25:ptr<uniform, vec2<f32>, read> = access %uniforms, 1u
-        %26:vec2<f32> = load %25
-        %27:vec2<f32> = add %24, %26
-        %28:vec2<f32> = mul %27, vec2<f32>(1.0f, -1.0f)
-        %29:vec2<f32> = add %28, vec2<f32>(0.0f, 1.0f)
-        store %19, %29
+    %9:ptr<function, vec4<f32>, read_write> = access %output, 1u
+    %10:ptr<function, vec2<f32>, read_write> = access %texcoord, %VertexIndex
+    %11:vec2<f32> = load %10
+    %12:vec2<f32> = mul %11, 2.0f
+    %13:vec2<f32> = sub %12, vec2<f32>(1.0f)
+    %14:vec4<f32> = construct %13, 0.0f, 1.0f
+    store %9, %14
+    %15:ptr<uniform, vec2<f32>, read> = access %uniforms, 0u
+    %16:f32 = load_vector_element %15, 1u
+    %17:bool = lt %16, 0.0f
+    %flipY:ptr<function, bool, read_write> = var, %17
+    %19:bool = load %flipY
+    if %19 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %20:ptr<function, vec2<f32>, read_write> = access %output, 0u
+        %21:ptr<function, vec2<f32>, read_write> = access %texcoord, %VertexIndex
+        %22:vec2<f32> = load %21
+        %23:ptr<uniform, vec2<f32>, read> = access %uniforms, 0u
+        %24:vec2<f32> = load %23
+        %25:vec2<f32> = mul %22, %24
+        %26:ptr<uniform, vec2<f32>, read> = access %uniforms, 1u
+        %27:vec2<f32> = load %26
+        %28:vec2<f32> = add %25, %27
+        %29:vec2<f32> = mul %28, vec2<f32>(1.0f, -1.0f)
+        %30:vec2<f32> = add %29, vec2<f32>(0.0f, 1.0f)
+        store %20, %30
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %30:ptr<function, vec2<f32>, read_write> = access %output, 0u
-        %31:ptr<function, vec2<f32>, read_write> = access %texcoord, %VertexIndex
-        %32:vec2<f32> = load %31
-        %33:vec2<f32> = mul %32, vec2<f32>(1.0f, -1.0f)
-        %34:vec2<f32> = add %33, vec2<f32>(0.0f, 1.0f)
-        %35:ptr<uniform, vec2<f32>, read> = access %uniforms, 0u
-        %36:vec2<f32> = load %35
-        %37:vec2<f32> = mul %34, %36
-        %38:ptr<uniform, vec2<f32>, read> = access %uniforms, 1u
-        %39:vec2<f32> = load %38
-        %40:vec2<f32> = add %37, %39
-        store %30, %40
+      $B4: {  # false
+        %31:ptr<function, vec2<f32>, read_write> = access %output, 0u
+        %32:ptr<function, vec2<f32>, read_write> = access %texcoord, %VertexIndex
+        %33:vec2<f32> = load %32
+        %34:vec2<f32> = mul %33, vec2<f32>(1.0f, -1.0f)
+        %35:vec2<f32> = add %34, vec2<f32>(0.0f, 1.0f)
+        %36:ptr<uniform, vec2<f32>, read> = access %uniforms, 0u
+        %37:vec2<f32> = load %36
+        %38:vec2<f32> = mul %35, %37
+        %39:ptr<uniform, vec2<f32>, read> = access %uniforms, 1u
+        %40:vec2<f32> = load %39
+        %41:vec2<f32> = add %38, %40
+        store %31, %41
         exit_if  # if_1
       }
     }
-    %41:VertexOutputs = load %output
-    ret %41
+    %42:VertexOutputs = load %output
+    ret %42
   }
 }
-%fs_main = @fragment func(%texcoord_1:vec2<f32> [@location(0)]):vec4<f32> [@location(0)] -> %b5 {  # %texcoord_1: 'texcoord'
-  %b5 = block {
-    %44:vec2<f32> = clamp %texcoord_1, vec2<f32>(0.0f), vec2<f32>(1.0f)
-    %clampedTexcoord:ptr<function, vec2<f32>, read_write> = var, %44
-    %46:vec2<f32> = load %clampedTexcoord
-    %47:vec2<bool> = eq %46, %texcoord_1
-    %48:bool = all %47
-    %49:bool = eq %48, false
-    if %49 [t: %b6] {  # if_2
-      %b6 = block {  # true
-        discard
+%fs_main = @fragment func(%texcoord_1:vec2<f32> [@location(0)]):vec4<f32> [@location(0)] {  # %texcoord_1: 'texcoord'
+  $B5: {
+    %45:vec2<f32> = clamp %texcoord_1, vec2<f32>(0.0f), vec2<f32>(1.0f)
+    %clampedTexcoord:ptr<function, vec2<f32>, read_write> = var, %45
+    %47:vec2<f32> = load %clampedTexcoord
+    %48:vec2<bool> = eq %47, %texcoord_1
+    %49:bool = all %48
+    %50:bool = eq %49, false
+    if %50 [t: $B6] {  # if_2
+      $B6: {  # true
+        store %continue_execution, false
         exit_if  # if_2
       }
     }
     %srcColor:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(0.0f)
-    %51:vec4<f32> = load %srcColor
-    ret %51
+    %52:vec4<f32> = load %srcColor
+    %53:bool = load %continue_execution
+    %54:bool = eq %53, false
+    if %54 [t: $B7] {  # if_3
+      $B7: {  # true
+        terminate_invocation
+      }
+    }
+    ret %52
   }
 }
 
diff --git a/test/tint/bug/fxc/dyn_array_idx/read/function.wgsl.expected.ir.msl b/test/tint/bug/fxc/dyn_array_idx/read/function.wgsl.expected.ir.msl
index e71e2b0..9def01d 100644
--- a/test/tint/bug/fxc/dyn_array_idx/read/function.wgsl.expected.ir.msl
+++ b/test/tint/bug/fxc/dyn_array_idx/read/function.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: UBO = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: UBO = struct @align(4) {
   dynamic_idx:i32 @offset(0)
 }
 
@@ -12,13 +12,13 @@
   data:array<i32, 64> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %ubo:ptr<uniform, UBO, read> = var @binding_point(0, 0)
   %result:ptr<storage, Result, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %s:ptr<function, S, read_write> = var
     %5:ptr<storage, i32, read_write> = access %result, 0u
     %6:ptr<uniform, i32, read> = access %ubo, 0u
diff --git a/test/tint/bug/fxc/dyn_array_idx/read/private.wgsl.expected.ir.msl b/test/tint/bug/fxc/dyn_array_idx/read/private.wgsl.expected.ir.msl
index a8fffb8..4c59525 100644
--- a/test/tint/bug/fxc/dyn_array_idx/read/private.wgsl.expected.ir.msl
+++ b/test/tint/bug/fxc/dyn_array_idx/read/private.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: UBO = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: UBO = struct @align(4) {
   dynamic_idx:i32 @offset(0)
 }
 
@@ -12,14 +12,14 @@
   data:array<i32, 64> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %ubo:ptr<uniform, UBO, read> = var @binding_point(0, 0)
   %result:ptr<storage, Result, read_write> = var @binding_point(0, 1)
   %s:ptr<private, S, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %5:ptr<storage, i32, read_write> = access %result, 0u
     %6:ptr<uniform, i32, read> = access %ubo, 0u
     %7:i32 = load %6
diff --git a/test/tint/bug/fxc/dyn_array_idx/read/storage.wgsl.expected.ir.msl b/test/tint/bug/fxc/dyn_array_idx/read/storage.wgsl.expected.ir.msl
index 9e6e6fc..a8f5a41 100644
--- a/test/tint/bug/fxc/dyn_array_idx/read/storage.wgsl.expected.ir.msl
+++ b/test/tint/bug/fxc/dyn_array_idx/read/storage.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: UBO = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: UBO = struct @align(4) {
   dynamic_idx:i32 @offset(0)
 }
 
@@ -12,14 +12,14 @@
   data:array<i32, 4> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %ubo:ptr<uniform, UBO, read> = var @binding_point(0, 0)
   %result:ptr<storage, Result, read_write> = var @binding_point(0, 2)
   %ssbo:ptr<storage, SSBO, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %5:ptr<storage, i32, read_write> = access %result, 0u
     %6:ptr<uniform, i32, read> = access %ubo, 0u
     %7:i32 = load %6
diff --git a/test/tint/bug/fxc/dyn_array_idx/read/uniform.wgsl.expected.ir.msl b/test/tint/bug/fxc/dyn_array_idx/read/uniform.wgsl.expected.ir.msl
index ad113f7..e394af7 100644
--- a/test/tint/bug/fxc/dyn_array_idx/read/uniform.wgsl.expected.ir.msl
+++ b/test/tint/bug/fxc/dyn_array_idx/read/uniform.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: UBO = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: UBO = struct @align(16) {
   data:array<vec4<i32>, 4> @offset(0)
   dynamic_idx:i32 @offset(64)
 }
@@ -9,13 +9,13 @@
   out:i32 @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %ubo:ptr<uniform, UBO, read> = var @binding_point(0, 0)
   %result:ptr<storage, Result, read_write> = var @binding_point(0, 2)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:ptr<storage, i32, read_write> = access %result, 0u
     %5:ptr<uniform, i32, read> = access %ubo, 1u
     %6:i32 = load %5
diff --git a/test/tint/bug/fxc/dyn_array_idx/read/workgroup.wgsl.expected.ir.msl b/test/tint/bug/fxc/dyn_array_idx/read/workgroup.wgsl.expected.ir.msl
index c48801d..70a8107 100644
--- a/test/tint/bug/fxc/dyn_array_idx/read/workgroup.wgsl.expected.ir.msl
+++ b/test/tint/bug/fxc/dyn_array_idx/read/workgroup.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: UBO = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: UBO = struct @align(4) {
   dynamic_idx:i32 @offset(0)
 }
 
@@ -12,20 +12,41 @@
   data:array<i32, 64> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %ubo:ptr<uniform, UBO, read> = var @binding_point(0, 0)
   %result:ptr<storage, Result, read_write> = var @binding_point(0, 1)
   %s:ptr<workgroup, S, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %5:ptr<storage, i32, read_write> = access %result, 0u
-    %6:ptr<uniform, i32, read> = access %ubo, 0u
-    %7:i32 = load %6
-    %8:ptr<workgroup, i32, read_write> = access %s, 0u, %7
-    %9:i32 = load %8
-    store %5, %9
+%f = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B2: {
+    loop [i: $B3, b: $B4, c: $B5] {  # loop_1
+      $B3: {  # initializer
+        next_iteration %tint_local_index  # -> $B4
+      }
+      $B4 (%idx:u32): {  # body
+        %7:bool = gte %idx, 64u
+        if %7 [t: $B6] {  # if_1
+          $B6: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %8:ptr<workgroup, i32, read_write> = access %s, 0u, %idx
+        store %8, 0i
+        continue  # -> $B5
+      }
+      $B5: {  # continuing
+        %9:u32 = add %idx, 1u
+        next_iteration %9  # -> $B4
+      }
+    }
+    %10:void = msl.threadgroup_barrier 4u
+    %11:ptr<storage, i32, read_write> = access %result, 0u
+    %12:ptr<uniform, i32, read> = access %ubo, 0u
+    %13:i32 = load %12
+    %14:ptr<workgroup, i32, read_write> = access %s, 0u, %13
+    %15:i32 = load %14
+    store %11, %15
     ret
   }
 }
diff --git a/test/tint/bug/fxc/dyn_array_idx/write/function.wgsl.expected.ir.msl b/test/tint/bug/fxc/dyn_array_idx/write/function.wgsl.expected.ir.msl
index 64113c8..3930e65 100644
--- a/test/tint/bug/fxc/dyn_array_idx/write/function.wgsl.expected.ir.msl
+++ b/test/tint/bug/fxc/dyn_array_idx/write/function.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: UBO = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: UBO = struct @align(4) {
   dynamic_idx:i32 @offset(0)
 }
 
@@ -12,13 +12,13 @@
   data:array<i32, 64> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %ubo:ptr<uniform, UBO, read> = var @binding_point(0, 0)
   %result:ptr<storage, Result, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %s:ptr<function, S, read_write> = var
     %5:ptr<uniform, i32, read> = access %ubo, 0u
     %6:i32 = load %5
diff --git a/test/tint/bug/fxc/dyn_array_idx/write/function_via_param.wgsl.expected.ir.msl b/test/tint/bug/fxc/dyn_array_idx/write/function_via_param.wgsl.expected.ir.msl
index ffe3f4b..2e17591 100644
--- a/test/tint/bug/fxc/dyn_array_idx/write/function_via_param.wgsl.expected.ir.msl
+++ b/test/tint/bug/fxc/dyn_array_idx/write/function_via_param.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: UBO = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: UBO = struct @align(4) {
   dynamic_idx:i32 @offset(0)
 }
 
@@ -12,13 +12,13 @@
   data:array<i32, 64> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %ubo:ptr<uniform, UBO, read> = var @binding_point(0, 0)
   %result:ptr<storage, Result, read_write> = var @binding_point(0, 1)
 }
 
-%x = func(%p:ptr<function, S, read_write>):void -> %b2 {
-  %b2 = block {
+%x = func(%p:ptr<function, S, read_write>):void {
+  $B2: {
     %5:ptr<uniform, i32, read> = access %ubo, 0u
     %6:i32 = load %5
     %7:ptr<function, i32, read_write> = access %p, 0u, %6
@@ -26,8 +26,8 @@
     ret
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %s:ptr<function, S, read_write> = var
     %10:void = call %x, %s
     %11:ptr<storage, i32, read_write> = access %result, 0u
diff --git a/test/tint/bug/fxc/dyn_array_idx/write/private.wgsl.expected.ir.msl b/test/tint/bug/fxc/dyn_array_idx/write/private.wgsl.expected.ir.msl
index ad73832..fac2d98 100644
--- a/test/tint/bug/fxc/dyn_array_idx/write/private.wgsl.expected.ir.msl
+++ b/test/tint/bug/fxc/dyn_array_idx/write/private.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: UBO = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: UBO = struct @align(4) {
   dynamic_idx:i32 @offset(0)
 }
 
@@ -12,14 +12,14 @@
   data:array<i32, 64> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %ubo:ptr<uniform, UBO, read> = var @binding_point(0, 0)
   %result:ptr<storage, Result, read_write> = var @binding_point(0, 1)
   %s:ptr<private, S, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %5:ptr<uniform, i32, read> = access %ubo, 0u
     %6:i32 = load %5
     %7:ptr<private, i32, read_write> = access %s, 0u, %6
diff --git a/test/tint/bug/fxc/dyn_array_idx/write/private_via_param.wgsl.expected.ir.msl b/test/tint/bug/fxc/dyn_array_idx/write/private_via_param.wgsl.expected.ir.msl
index 619a04d..573ffa1 100644
--- a/test/tint/bug/fxc/dyn_array_idx/write/private_via_param.wgsl.expected.ir.msl
+++ b/test/tint/bug/fxc/dyn_array_idx/write/private_via_param.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: UBO = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: UBO = struct @align(4) {
   dynamic_idx:i32 @offset(0)
 }
 
@@ -12,14 +12,14 @@
   data:array<i32, 64> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %ubo:ptr<uniform, UBO, read> = var @binding_point(0, 0)
   %result:ptr<storage, Result, read_write> = var @binding_point(0, 1)
   %s:ptr<private, S, read_write> = var
 }
 
-%x = func(%p:ptr<private, S, read_write>):void -> %b2 {
-  %b2 = block {
+%x = func(%p:ptr<private, S, read_write>):void {
+  $B2: {
     %6:ptr<uniform, i32, read> = access %ubo, 0u
     %7:i32 = load %6
     %8:ptr<private, i32, read_write> = access %p, 0u, %7
@@ -27,8 +27,8 @@
     ret
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %10:void = call %x, %s
     %11:ptr<storage, i32, read_write> = access %result, 0u
     %12:ptr<private, i32, read_write> = access %s, 0u, 3i
diff --git a/test/tint/bug/fxc/dyn_array_idx/write/storage.wgsl.expected.ir.msl b/test/tint/bug/fxc/dyn_array_idx/write/storage.wgsl.expected.ir.msl
index f730826..d48f2c5 100644
--- a/test/tint/bug/fxc/dyn_array_idx/write/storage.wgsl.expected.ir.msl
+++ b/test/tint/bug/fxc/dyn_array_idx/write/storage.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: UBO = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: UBO = struct @align(4) {
   dynamic_idx:i32 @offset(0)
 }
 
@@ -12,14 +12,14 @@
   data:array<i32, 4> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %ubo:ptr<uniform, UBO, read> = var @binding_point(0, 0)
   %result:ptr<storage, Result, read_write> = var @binding_point(0, 2)
   %ssbo:ptr<storage, SSBO, read_write> = var @binding_point(0, 1)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %5:ptr<uniform, i32, read> = access %ubo, 0u
     %6:i32 = load %5
     %7:ptr<storage, i32, read_write> = access %ssbo, 0u, %6
diff --git a/test/tint/bug/fxc/dyn_array_idx/write/workgroup.wgsl.expected.ir.msl b/test/tint/bug/fxc/dyn_array_idx/write/workgroup.wgsl.expected.ir.msl
index 678261a..a23a9a8 100644
--- a/test/tint/bug/fxc/dyn_array_idx/write/workgroup.wgsl.expected.ir.msl
+++ b/test/tint/bug/fxc/dyn_array_idx/write/workgroup.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: UBO = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: UBO = struct @align(4) {
   dynamic_idx:i32 @offset(0)
 }
 
@@ -12,22 +12,43 @@
   data:array<i32, 64> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %ubo:ptr<uniform, UBO, read> = var @binding_point(0, 0)
   %result:ptr<storage, Result, read_write> = var @binding_point(0, 1)
   %s:ptr<workgroup, S, read_write> = var
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %5:ptr<uniform, i32, read> = access %ubo, 0u
-    %6:i32 = load %5
-    %7:ptr<workgroup, i32, read_write> = access %s, 0u, %6
-    store %7, 1i
-    %8:ptr<storage, i32, read_write> = access %result, 0u
-    %9:ptr<workgroup, i32, read_write> = access %s, 0u, 3i
-    %10:i32 = load %9
-    store %8, %10
+%f = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B2: {
+    loop [i: $B3, b: $B4, c: $B5] {  # loop_1
+      $B3: {  # initializer
+        next_iteration %tint_local_index  # -> $B4
+      }
+      $B4 (%idx:u32): {  # body
+        %7:bool = gte %idx, 64u
+        if %7 [t: $B6] {  # if_1
+          $B6: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %8:ptr<workgroup, i32, read_write> = access %s, 0u, %idx
+        store %8, 0i
+        continue  # -> $B5
+      }
+      $B5: {  # continuing
+        %9:u32 = add %idx, 1u
+        next_iteration %9  # -> $B4
+      }
+    }
+    %10:void = msl.threadgroup_barrier 4u
+    %11:ptr<uniform, i32, read> = access %ubo, 0u
+    %12:i32 = load %11
+    %13:ptr<workgroup, i32, read_write> = access %s, 0u, %12
+    store %13, 1i
+    %14:ptr<storage, i32, read_write> = access %result, 0u
+    %15:ptr<workgroup, i32, read_write> = access %s, 0u, 3i
+    %16:i32 = load %15
+    store %14, %16
     ret
   }
 }
diff --git a/test/tint/bug/fxc/gradient_in_varying_loop/1112.wgsl.expected.ir.msl b/test/tint/bug/fxc/gradient_in_varying_loop/1112.wgsl.expected.ir.msl
index b38060a..3543919 100644
--- a/test/tint/bug/fxc/gradient_in_varying_loop/1112.wgsl.expected.ir.msl
+++ b/test/tint/bug/fxc/gradient_in_varying_loop/1112.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSample
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/bug/fxc/indexed_assign_to_array_in_struct/1206.wgsl.expected.ir.msl b/test/tint/bug/fxc/indexed_assign_to_array_in_struct/1206.wgsl.expected.ir.msl
index 67448e3..71ac128 100644
--- a/test/tint/bug/fxc/indexed_assign_to_array_in_struct/1206.wgsl.expected.ir.msl
+++ b/test/tint/bug/fxc/indexed_assign_to_array_in_struct/1206.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Particle = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Particle = struct @align(16) {
   position:array<vec3<f32>, 8> @offset(0)
   lifetime:f32 @offset(128)
   color:vec4<f32> @offset(144)
@@ -15,13 +15,13 @@
   i:u32 @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %particles:ptr<storage, Particles, read> = var @binding_point(1, 3)
   %sim:ptr<uniform, Simulation, read> = var @binding_point(1, 4)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:ptr<storage, Particle, read> = access %particles, 0u, 0i
     %5:Particle = load %4
     %particle:ptr<function, Particle, read_write> = var, %5
diff --git a/test/tint/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_x.wgsl.expected.ir.msl b/test/tint/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_x.wgsl.expected.ir.msl
index c351f36..12171f2 100644
--- a/test/tint/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_x.wgsl.expected.ir.msl
+++ b/test/tint/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_x.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Uniforms = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Uniforms = struct @align(4) {
   i:u32 @offset(0)
   j:u32 @offset(4)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %uniforms:ptr<uniform, Uniforms, read> = var @binding_point(1, 4)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %m1:ptr<function, mat2x4<f32>, read_write> = var
     %4:ptr<uniform, u32, read> = access %uniforms, 0u
     %5:u32 = load %4
diff --git a/test/tint/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_xy.wgsl.expected.ir.msl b/test/tint/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_xy.wgsl.expected.ir.msl
index 02e39ba..366bee8 100644
--- a/test/tint/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_xy.wgsl.expected.ir.msl
+++ b/test/tint/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_xy.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Uniforms = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Uniforms = struct @align(4) {
   i:u32 @offset(0)
   j:u32 @offset(4)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %uniforms:ptr<uniform, Uniforms, read> = var @binding_point(1, 4)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %m1:ptr<function, mat2x4<f32>, read_write> = var
     %4:ptr<uniform, u32, read> = access %uniforms, 0u
     %5:u32 = load %4
diff --git a/test/tint/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_y.wgsl.expected.ir.msl b/test/tint/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_y.wgsl.expected.ir.msl
index 2158837..12bd65d 100644
--- a/test/tint/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_y.wgsl.expected.ir.msl
+++ b/test/tint/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_y.wgsl.expected.ir.msl
@@ -1,17 +1,17 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Uniforms = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Uniforms = struct @align(4) {
   i:u32 @offset(0)
   j:u32 @offset(4)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %uniforms:ptr<uniform, Uniforms, read> = var @binding_point(1, 4)
   %m1:ptr<private, mat2x4<f32>, read_write> = var
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:ptr<private, vec4<f32>, read_write> = access %m1, 0i
     %5:ptr<uniform, u32, read> = access %uniforms, 1u
     %6:u32 = load %5
diff --git a/test/tint/bug/fxc/matrix_assignment_dynamic_index/local_assign_vector.wgsl.expected.ir.msl b/test/tint/bug/fxc/matrix_assignment_dynamic_index/local_assign_vector.wgsl.expected.ir.msl
index 2c232bd..718291b 100644
--- a/test/tint/bug/fxc/matrix_assignment_dynamic_index/local_assign_vector.wgsl.expected.ir.msl
+++ b/test/tint/bug/fxc/matrix_assignment_dynamic_index/local_assign_vector.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Uniforms = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Uniforms = struct @align(4) {
   i:u32 @offset(0)
   j:u32 @offset(4)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %uniforms:ptr<uniform, Uniforms, read> = var @binding_point(1, 4)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %m1:ptr<function, mat2x4<f32>, read_write> = var
     %4:ptr<uniform, u32, read> = access %uniforms, 0u
     %5:u32 = load %4
diff --git a/test/tint/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_x.wgsl.expected.ir.msl b/test/tint/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_x.wgsl.expected.ir.msl
index f310f79..d8ed7c3 100644
--- a/test/tint/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_x.wgsl.expected.ir.msl
+++ b/test/tint/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_x.wgsl.expected.ir.msl
@@ -1,17 +1,17 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Uniforms = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Uniforms = struct @align(4) {
   i:u32 @offset(0)
   j:u32 @offset(4)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %uniforms:ptr<uniform, Uniforms, read> = var @binding_point(1, 4)
   %m1:ptr<private, mat2x4<f32>, read_write> = var
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:ptr<uniform, u32, read> = access %uniforms, 0u
     %5:u32 = load %4
     %6:ptr<private, vec4<f32>, read_write> = access %m1, %5
diff --git a/test/tint/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_xy.wgsl.expected.ir.msl b/test/tint/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_xy.wgsl.expected.ir.msl
index edbd7d6..ed64108 100644
--- a/test/tint/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_xy.wgsl.expected.ir.msl
+++ b/test/tint/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_xy.wgsl.expected.ir.msl
@@ -1,17 +1,17 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Uniforms = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Uniforms = struct @align(4) {
   i:u32 @offset(0)
   j:u32 @offset(4)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %uniforms:ptr<uniform, Uniforms, read> = var @binding_point(1, 4)
   %m1:ptr<private, mat2x4<f32>, read_write> = var
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:ptr<uniform, u32, read> = access %uniforms, 0u
     %5:u32 = load %4
     %6:ptr<private, vec4<f32>, read_write> = access %m1, %5
diff --git a/test/tint/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_y.wgsl.expected.ir.msl b/test/tint/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_y.wgsl.expected.ir.msl
index 2158837..12bd65d 100644
--- a/test/tint/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_y.wgsl.expected.ir.msl
+++ b/test/tint/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_y.wgsl.expected.ir.msl
@@ -1,17 +1,17 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Uniforms = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Uniforms = struct @align(4) {
   i:u32 @offset(0)
   j:u32 @offset(4)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %uniforms:ptr<uniform, Uniforms, read> = var @binding_point(1, 4)
   %m1:ptr<private, mat2x4<f32>, read_write> = var
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:ptr<private, vec4<f32>, read_write> = access %m1, 0i
     %5:ptr<uniform, u32, read> = access %uniforms, 1u
     %6:u32 = load %5
diff --git a/test/tint/bug/fxc/matrix_assignment_dynamic_index/module_assign_vector.wgsl.expected.ir.msl b/test/tint/bug/fxc/matrix_assignment_dynamic_index/module_assign_vector.wgsl.expected.ir.msl
index 5ec776c..eafa77b 100644
--- a/test/tint/bug/fxc/matrix_assignment_dynamic_index/module_assign_vector.wgsl.expected.ir.msl
+++ b/test/tint/bug/fxc/matrix_assignment_dynamic_index/module_assign_vector.wgsl.expected.ir.msl
@@ -1,17 +1,17 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Uniforms = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Uniforms = struct @align(4) {
   i:u32 @offset(0)
   j:u32 @offset(4)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %uniforms:ptr<uniform, Uniforms, read> = var @binding_point(1, 4)
   %m1:ptr<private, mat2x4<f32>, read_write> = var
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:ptr<uniform, u32, read> = access %uniforms, 0u
     %5:u32 = load %4
     %6:ptr<private, vec4<f32>, read_write> = access %m1, %5
diff --git a/test/tint/bug/fxc/vector_assignment_in_loop/loop_call_with_loop.wgsl.expected.ir.msl b/test/tint/bug/fxc/vector_assignment_in_loop/loop_call_with_loop.wgsl.expected.ir.msl
index cdbf128..1896e60 100644
--- a/test/tint/bug/fxc/vector_assignment_in_loop/loop_call_with_loop.wgsl.expected.ir.msl
+++ b/test/tint/bug/fxc/vector_assignment_in_loop/loop_call_with_loop.wgsl.expected.ir.msl
@@ -1,9 +1,53 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float2 v2f = 0.0f;
+thread int3 v3i = 0;
+thread uint4 v4u = 0u;
+thread bool2 v2b = false;
+void foo() {
+  {
+    int i = 0;
+    while(true) {
+      if ((i < 2)) {
+      } else {
+        break;
+      }
+      v2f[i] = 1.0f;
+      v3i[i] = 1;
+      v4u[i] = 1u;
+      v2b[i] = true;
+      i = (i + 1);
+      continue;
+    }
+  }
+}
+kernel void tint_symbol() {
+  {
+    int i = 0;
+    while(true) {
+      if ((i < 2)) {
+      } else {
+        break;
+      }
+      foo();
+      i = (i + 1);
+      continue;
+    }
+  }
+}
+program_source:4:15: error: program scope variable must reside in constant address space
+thread float2 v2f = 0.0f;
+              ^
+program_source:5:13: error: program scope variable must reside in constant address space
+thread int3 v3i = 0;
+            ^
+program_source:6:14: error: program scope variable must reside in constant address space
+thread uint4 v4u = 0u;
+             ^
+program_source:7:14: error: program scope variable must reside in constant address space
+thread bool2 v2b = false;
+             ^
+
diff --git a/test/tint/bug/fxc/vector_assignment_in_loop/loop_call_with_no_loop.wgsl.expected.ir.msl b/test/tint/bug/fxc/vector_assignment_in_loop/loop_call_with_no_loop.wgsl.expected.ir.msl
index 3440042..56d2875 100644
--- a/test/tint/bug/fxc/vector_assignment_in_loop/loop_call_with_no_loop.wgsl.expected.ir.msl
+++ b/test/tint/bug/fxc/vector_assignment_in_loop/loop_call_with_no_loop.wgsl.expected.ir.msl
@@ -1,9 +1,43 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::StoreVectorElement
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float2 v2f = 0.0f;
+thread int3 v3i = 0;
+thread uint4 v4u = 0u;
+thread bool2 v2b = false;
+void foo() {
+  int i = 0;
+  v2f[i] = 1.0f;
+  v3i[i] = 1;
+  v4u[i] = 1u;
+  v2b[i] = true;
+}
+kernel void tint_symbol() {
+  {
+    int i = 0;
+    while(true) {
+      if ((i < 2)) {
+      } else {
+        break;
+      }
+      foo();
+      i = (i + 1);
+      continue;
+    }
+  }
+}
+program_source:4:15: error: program scope variable must reside in constant address space
+thread float2 v2f = 0.0f;
+              ^
+program_source:5:13: error: program scope variable must reside in constant address space
+thread int3 v3i = 0;
+            ^
+program_source:6:14: error: program scope variable must reside in constant address space
+thread uint4 v4u = 0u;
+             ^
+program_source:7:14: error: program scope variable must reside in constant address space
+thread bool2 v2b = false;
+             ^
+
diff --git a/test/tint/bug/oss-fuzz/57795.spv.expected.ir.msl b/test/tint/bug/oss-fuzz/57795.spv.expected.ir.msl
index 792ab03..68a168c 100644
--- a/test/tint/bug/oss-fuzz/57795.spv.expected.ir.msl
+++ b/test/tint/bug/oss-fuzz/57795.spv.expected.ir.msl
@@ -1,9 +1,42 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#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];
+};
+
+struct S_6 {
+  tint_array<tint_array<float3, 18>, 13> field0;
+};
+
+thread tint_array<float4x4, 58> x_75 = tint_array<float4x4, 58>{};
+thread tint_array<S_6, 46> x_82 = tint_array<S_6, 46>{};
+thread tint_array<float3, 37> x_85 = tint_array<float3, 37>{};
+void main_1() {
+  uint const x_88 = 58u;
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:19:33: error: program scope variable must reside in constant address space
+thread tint_array<float4x4, 58> x_75 = tint_array<float4x4, 58>{};
+                                ^
+program_source:20:28: error: program scope variable must reside in constant address space
+thread tint_array<S_6, 46> x_82 = tint_array<S_6, 46>{};
+                           ^
+program_source:21:31: error: program scope variable must reside in constant address space
+thread tint_array<float3, 37> x_85 = tint_array<float3, 37>{};
+                              ^
+program_source:23:14: warning: unused variable 'x_88' [-Wunused-variable]
+  uint const x_88 = 58u;
+             ^
+
diff --git a/test/tint/bug/tint/1046.wgsl.expected.ir.msl b/test/tint/bug/tint/1046.wgsl.expected.ir.msl
index 29a3e0e..f416fce 100644
--- a/test/tint/bug/tint/1046.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/1046.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Uniforms = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Uniforms = struct @align(16) {
   worldView:mat4x4<f32> @offset(0)
   proj:mat4x4<f32> @offset(64)
   numPointLights:u32 @offset(128)
@@ -28,53 +28,53 @@
   color:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %uniforms:ptr<uniform, Uniforms, read> = var @binding_point(0, 0)
   %pointLights:ptr<storage, PointLights, read> = var @binding_point(0, 1)
   %mySampler:ptr<handle, sampler, read> = var @binding_point(0, 2)
   %myTexture:ptr<handle, texture_2d<f32>, read> = var @binding_point(0, 3)
 }
 
-%getColor = func(%tint_symbol:FragmentInput):vec4<f32> -> %b2 {
-  %b2 = block {
+%getColor = func(%tint_symbol:FragmentInput):vec4<f32> {
+  $B2: {
     %color:ptr<function, vec4<f32>, read_write> = var
     %8:ptr<uniform, u32, read> = access %uniforms, 3u
     %9:u32 = load %8
     %10:bool = eq %9, 0u
-    if %10 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    if %10 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         %11:vec4<f32> = access %tint_symbol, 4u
         store %color, %11
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         %12:ptr<uniform, u32, read> = access %uniforms, 3u
         %13:u32 = load %12
         %14:bool = eq %13, 1u
-        if %14 [t: %b5, f: %b6] {  # if_2
-          %b5 = block {  # true
+        if %14 [t: $B5, f: $B6] {  # if_2
+          $B5: {  # true
             %15:vec4<f32> = access %tint_symbol, 2u
             store %color, %15
             store_vector_element %color, 3u, 1.0f
             exit_if  # if_2
           }
-          %b6 = block {  # false
+          $B6: {  # false
             %16:ptr<uniform, u32, read> = access %uniforms, 3u
             %17:u32 = load %16
             %18:bool = eq %17, 2u
-            if %18 [t: %b7, f: %b8] {  # if_3
-              %b7 = block {  # true
+            if %18 [t: $B7, f: $B8] {  # if_3
+              $B7: {  # true
                 %19:ptr<uniform, vec4<f32>, read> = access %uniforms, 4u
                 %20:vec4<f32> = load %19
                 store %color, %20
                 exit_if  # if_3
               }
-              %b8 = block {  # false
+              $B8: {  # false
                 %21:ptr<uniform, u32, read> = access %uniforms, 3u
                 %22:u32 = load %21
                 %23:bool = eq %22, 3u
-                if %23 [t: %b9] {  # if_4
-                  %b9 = block {  # true
+                if %23 [t: $B9] {  # if_4
+                  $B9: {  # true
                     %24:texture_2d<f32> = load %myTexture
                     %25:sampler = load %mySampler
                     %26:vec2<f32> = access %tint_symbol, 3u
@@ -96,8 +96,8 @@
     ret %28
   }
 }
-%tint_symbol_1 = @fragment func(%tint_symbol_2:FragmentInput):FragmentOutput -> %b10 {  # %tint_symbol_2: 'tint_symbol'
-  %b10 = block {
+%tint_symbol_1 = @fragment func(%tint_symbol_2:FragmentInput):FragmentOutput {  # %tint_symbol_2: 'tint_symbol'
+  $B10: {
     %output:ptr<function, FragmentOutput, read_write> = var
     %32:ptr<function, vec4<f32>, read_write> = access %output, 0u
     store %32, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
diff --git a/test/tint/bug/tint/1061.spvasm.expected.ir.msl b/test/tint/bug/tint/1061.spvasm.expected.ir.msl
index eefd36c..61fdca7 100644
--- a/test/tint/bug/tint/1061.spvasm.expected.ir.msl
+++ b/test/tint/bug/tint/1061.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(16) {
   r:vec4<f32> @offset(0)
 }
 
@@ -8,37 +8,40 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %f:ptr<function, f32, read_write> = var
     %v:ptr<function, vec4<f32>, read_write> = var
     store %f, 1.0f
     %6:f32 = load %f
     %7:f32 = sin %6
-    %8:f32 = load %f
-    %9:f32 = cos %8
-    %10:f32 = load %f
-    %11:f32 = exp2 %10
+    %8:f32 = let %7
+    %9:f32 = load %f
+    %10:f32 = cos %9
+    %11:f32 = let %10
     %12:f32 = load %f
-    %13:f32 = log %12
-    %14:vec4<f32> = construct %7, %9, %11, %13
-    store %v, %14
-    %15:vec4<f32> = load %v
-    %16:ptr<uniform, vec4<f32>, read> = access %x_7, 0u
-    %17:vec4<f32> = load %16
-    %18:f32 = distance %15, %17
-    %19:bool = lt %18, 0.10000000149011611938f
-    if %19 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    %13:f32 = exp2 %12
+    %14:f32 = let %13
+    %15:f32 = load %f
+    %16:f32 = log %15
+    %17:vec4<f32> = construct %8, %11, %14, %16
+    store %v, %17
+    %18:vec4<f32> = load %v
+    %19:ptr<uniform, vec4<f32>, read> = access %x_7, 0u
+    %20:vec4<f32> = load %19
+    %21:f32 = distance %18, %20
+    %22:bool = lt %21, 0.10000000149011611938f
+    if %22 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
@@ -46,12 +49,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %21:void = call %main_1
-    %22:vec4<f32> = load %x_GLF_color
-    %23:main_out = construct %22
-    ret %23
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %24:void = call %main_1
+    %25:vec4<f32> = load %x_GLF_color
+    %26:main_out = construct %25
+    ret %26
   }
 }
 
diff --git a/test/tint/bug/tint/1064.wgsl.expected.ir.msl b/test/tint/bug/tint/1064.wgsl.expected.ir.msl
index cdbf128..aa6b0ab 100644
--- a/test/tint/bug/tint/1064.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/1064.wgsl.expected.ir.msl
@@ -1,9 +1,21 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+fragment void tint_symbol() {
+  {
+    while(true) {
+      if (false) {
+      } else {
+        break;
+      }
+      if false { break; }
+      continue;
+    }
+  }
+}
+program_source:11:10: error: expected '(' after 'if'
+      if false { break; }
+         ^
+
diff --git a/test/tint/bug/tint/1076.wgsl.expected.ir.msl b/test/tint/bug/tint/1076.wgsl.expected.ir.msl
index 1f31e45..cee7f46 100644
--- a/test/tint/bug/tint/1076.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/1076.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:775 internal compiler error: FragIn = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: FragIn = struct @align(4) {
   a:f32 @offset(0), @location(0)
   mask:u32 @offset(4), @builtin(sample_mask)
 }
 
-%tint_symbol = @fragment func(%in:FragIn, %b:f32 [@location(1)]):FragIn -> %b1 {
-  %b1 = block {
+%tint_symbol = @fragment func(%in:FragIn, %b:f32 [@location(1)]):FragIn {
+  $B1: {
     %4:u32 = access %in, 1u
     %5:bool = eq %4, 0u
-    if %5 [t: %b2] {  # if_1
-      %b2 = block {  # true
+    if %5 [t: $B2] {  # if_1
+      $B2: {  # true
         ret %in
       }
     }
diff --git a/test/tint/bug/tint/1081.wgsl.expected.ir.msl b/test/tint/bug/tint/1081.wgsl.expected.ir.msl
index 567c382..0a11199 100644
--- a/test/tint/bug/tint/1081.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/1081.wgsl.expected.ir.msl
@@ -1,9 +1,45 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:270 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool continue_execution = true;
+int f(int x) {
+  if ((x == 10)) {
+    continue_execution = false;
+  }
+  return x;
+}
+fragment int tint_symbol(int3 x) {
+  int y = x[0u];
+  {
+    while(true) {
+      int const r = f(y);
+      if ((r == 0)) {
+        break;
+      }
+      continue;
+    }
+  }
+  if (!(continue_execution)) {
+    discard_fragment();
+  }
+  return y;
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread bool continue_execution = true;
+            ^
+program_source:6:10: warning: equality comparison with extraneous parentheses [-Wparentheses-equality]
+  if ((x == 10)) {
+       ~~^~~~~
+program_source:6:10: note: remove extraneous parentheses around the comparison to silence this warning
+  if ((x == 10)) {
+      ~  ^    ~
+program_source:6:10: note: use '=' to turn this equality comparison into an assignment
+  if ((x == 10)) {
+         ^~
+         =
+program_source:11:26: error: invalid type 'int3' (vector of 3 'int' values) for input declaration in a fragment function
+fragment int tint_symbol(int3 x) {
+                         ^~~~~~
+
diff --git a/test/tint/bug/tint/1083.wgsl.expected.ir.msl b/test/tint/bug/tint/1083.wgsl.expected.ir.msl
index c46ebec..75a514b 100644
--- a/test/tint/bug/tint/1083.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/1083.wgsl.expected.ir.msl
@@ -1,8 +1,17 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   int const a = 1;
   int const b = 0;
-  int const c = (a / b);
+  int const c = tint_div_i32(a, b);
 }
+int tint_div_i32(int lhs, int rhs) {
+  return (lhs / select(rhs, 1, ((rhs == 0) | ((lhs == (-2147483647 - 1)) & (rhs == -1)))));
+}
+program_source:7:17: error: use of undeclared identifier 'tint_div_i32'
+  int const c = tint_div_i32(a, b);
+                ^
+
diff --git a/test/tint/bug/tint/1086.wgsl.expected.ir.msl b/test/tint/bug/tint/1086.wgsl.expected.ir.msl
index efdd3b1..37f69a0 100644
--- a/test/tint/bug/tint/1086.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/1086.wgsl.expected.ir.msl
@@ -1,9 +1,25 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float v = 0.0f;
+void x(thread float* const p) {
+  p = 0.0f;
+}
+void g() {
+  x(v);
+}
+fragment void f() {
+  g();
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread float v = 0.0f;
+             ^
+program_source:6:5: error: cannot assign to variable 'p' with const-qualified type 'float *const'
+  p = 0.0f;
+  ~ ^
+program_source:5:28: note: variable 'p' declared const here
+void x(thread float* const p) {
+       ~~~~~~~~~~~~~~~~~~~~^
+
diff --git a/test/tint/bug/tint/1088.spvasm.expected.ir.msl b/test/tint/bug/tint/1088.spvasm.expected.ir.msl
index 80f7d46..ffc5ee7 100644
--- a/test/tint/bug/tint/1088.spvasm.expected.ir.msl
+++ b/test/tint/bug/tint/1088.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -16,7 +16,7 @@
   vUV_1:vec2<f32> @offset(16), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %position_1:ptr<private, vec3<f32>, read_write> = var
   %x_14:ptr<uniform, LeftOver, read> = var @binding_point(2, 2)
   %vUV:ptr<private, vec2<f32>, read_write> = var
@@ -25,8 +25,8 @@
   %gl_Position:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %q:ptr<function, vec4<f32>, read_write> = var
     %p:ptr<function, vec3<f32>, read_write> = var
     %10:f32 = load_vector_element %position_1, 0u
@@ -38,49 +38,52 @@
     %15:vec3<f32> = swizzle %14, xyz
     store %p, %15
     %16:f32 = load_vector_element %p, 0u
-    %17:ptr<uniform, f32, read> = access %x_14, 3u, 0i, 0u
-    %18:f32 = load %17
-    %19:f32 = load_vector_element %position_1, 1u
-    %20:f32 = mul %18, %19
-    %21:ptr<uniform, f32, read> = access %x_14, 1u
-    %22:f32 = load %21
-    %23:f32 = add %20, %22
-    %24:f32 = sin %23
-    %25:f32 = add %16, %24
-    store_vector_element %p, 0u, %25
-    %26:f32 = load_vector_element %p, 1u
-    %27:ptr<uniform, f32, read> = access %x_14, 1u
-    %28:f32 = load %27
-    %29:f32 = add %28, 4.0f
-    %30:f32 = sin %29
-    %31:f32 = add %26, %30
-    store_vector_element %p, 1u, %31
-    %32:ptr<uniform, mat4x4<f32>, read> = access %x_14, 0u
-    %33:mat4x4<f32> = load %32
-    %34:f32 = load_vector_element %p, 0u
-    %35:f32 = load_vector_element %p, 1u
-    %36:f32 = load_vector_element %p, 2u
-    %37:vec4<f32> = construct %34, %35, %36, 1.0f
-    %38:vec4<f32> = mul %33, %37
-    store %gl_Position, %38
-    %39:vec2<f32> = load %uv
-    store %vUV, %39
-    %40:f32 = load_vector_element %gl_Position, 1u
-    %41:f32 = mul %40, -1.0f
-    store_vector_element %gl_Position, 1u, %41
+    %17:f32 = let %16
+    %18:ptr<uniform, f32, read> = access %x_14, 3u, 0i, 0u
+    %19:f32 = load %18
+    %20:f32 = load_vector_element %position_1, 1u
+    %21:f32 = mul %19, %20
+    %22:ptr<uniform, f32, read> = access %x_14, 1u
+    %23:f32 = load %22
+    %24:f32 = add %21, %23
+    %25:f32 = sin %24
+    %26:f32 = add %17, %25
+    store_vector_element %p, 0u, %26
+    %27:f32 = load_vector_element %p, 1u
+    %28:f32 = let %27
+    %29:ptr<uniform, f32, read> = access %x_14, 1u
+    %30:f32 = load %29
+    %31:f32 = add %30, 4.0f
+    %32:f32 = sin %31
+    %33:f32 = add %28, %32
+    store_vector_element %p, 1u, %33
+    %34:ptr<uniform, mat4x4<f32>, read> = access %x_14, 0u
+    %35:mat4x4<f32> = load %34
+    %36:mat4x4<f32> = let %35
+    %37:f32 = load_vector_element %p, 0u
+    %38:f32 = load_vector_element %p, 1u
+    %39:f32 = load_vector_element %p, 2u
+    %40:vec4<f32> = construct %37, %38, %39, 1.0f
+    %41:vec4<f32> = mul %36, %40
+    store %gl_Position, %41
+    %42:vec2<f32> = load %uv
+    store %vUV, %42
+    %43:f32 = load_vector_element %gl_Position, 1u
+    %44:f32 = mul %43, -1.0f
+    store_vector_element %gl_Position, 1u, %44
     ret
   }
 }
-%tint_symbol = @vertex func(%position_1_param:vec3<f32> [@location(0)], %uv_param:vec2<f32> [@location(2)], %normal_param:vec3<f32> [@location(1)]):main_out -> %b3 {
-  %b3 = block {
+%tint_symbol = @vertex func(%position_1_param:vec3<f32> [@location(0)], %uv_param:vec2<f32> [@location(2)], %normal_param:vec3<f32> [@location(1)]):main_out {
+  $B3: {
     store %position_1, %position_1_param
     store %uv, %uv_param
     store %normal, %normal_param
-    %46:void = call %main_1
-    %47:vec4<f32> = load %gl_Position
-    %48:vec2<f32> = load %vUV
-    %49:main_out = construct %47, %48
-    ret %49
+    %49:void = call %main_1
+    %50:vec4<f32> = load %gl_Position
+    %51:vec2<f32> = load %vUV
+    %52:main_out = construct %50, %51
+    ret %52
   }
 }
 
diff --git a/test/tint/bug/tint/1113.wgsl.expected.ir.msl b/test/tint/bug/tint/1113.wgsl.expected.ir.msl
index 02b42ad..6d4edfb 100644
--- a/test/tint/bug/tint/1113.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/1113.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Uniforms = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Uniforms = struct @align(16) {
   numTriangles:u32 @offset(0)
   gridSize:u32 @offset(4)
   pad1:u32 @offset(8)
@@ -40,7 +40,7 @@
   value_f32_3:f32 @offset(44)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %uniforms:ptr<uniform, Uniforms, read> = var @binding_point(0, 0)
   %indices:ptr<storage, U32s, read_write> = var @binding_point(0, 10)
   %positions:ptr<storage, F32s, read_write> = var @binding_point(0, 11)
@@ -49,8 +49,8 @@
   %dbg:ptr<storage, Dbg, read_write> = var @binding_point(0, 50)
 }
 
-%toVoxelPos = func(%position:vec3<f32>):vec3<f32> -> %b2 {
-  %b2 = block {
+%toVoxelPos = func(%position:vec3<f32>):vec3<f32> {
+  $B2: {
     %9:ptr<uniform, vec3<f32>, read> = access %uniforms, 4u
     %10:f32 = load_vector_element %9, 0u
     %11:ptr<uniform, vec3<f32>, read> = access %uniforms, 4u
@@ -115,276 +115,305 @@
     ret %69
   }
 }
-%toIndex1D = func(%gridSize_1:u32, %voxelPos:vec3<f32>):u32 -> %b3 {  # %gridSize_1: 'gridSize'
-  %b3 = block {
-    %73:vec3<u32> = convert %voxelPos
+%toIndex1D = func(%gridSize_1:u32, %voxelPos:vec3<f32>):u32 {  # %gridSize_1: 'gridSize'
+  $B3: {
+    %73:vec3<u32> = call %tint_v3f32_to_v3u32, %voxelPos
     %icoord:ptr<function, vec3<u32>, read_write> = var, %73
-    %75:u32 = load_vector_element %icoord, 0u
-    %76:u32 = load_vector_element %icoord, 1u
-    %77:u32 = mul %gridSize_1, %76
-    %78:u32 = add %75, %77
-    %79:u32 = mul %gridSize_1, %gridSize_1
-    %80:u32 = load_vector_element %icoord, 2u
-    %81:u32 = mul %79, %80
-    %82:u32 = add %78, %81
-    ret %82
+    %76:u32 = load_vector_element %icoord, 0u
+    %77:u32 = load_vector_element %icoord, 1u
+    %78:u32 = mul %gridSize_1, %77
+    %79:u32 = add %76, %78
+    %80:u32 = mul %gridSize_1, %gridSize_1
+    %81:u32 = load_vector_element %icoord, 2u
+    %82:u32 = mul %80, %81
+    %83:u32 = add %79, %82
+    ret %83
   }
 }
-%toIndex3D = func(%gridSize_2:u32, %index:u32):vec3<u32> -> %b4 {  # %gridSize_2: 'gridSize'
-  %b4 = block {
-    %86:u32 = mul %gridSize_2, %gridSize_2
-    %87:u32 = div %index, %86
-    %z:ptr<function, u32, read_write> = var, %87
-    %89:u32 = mul %gridSize_2, %gridSize_2
-    %90:u32 = load %z
-    %91:u32 = mul %89, %90
-    %92:u32 = sub %index, %91
-    %93:u32 = div %92, %gridSize_2
-    %y:ptr<function, u32, read_write> = var, %93
-    %95:u32 = mod %index, %gridSize_2
-    %x:ptr<function, u32, read_write> = var, %95
-    %97:u32 = load %x
-    %98:u32 = load %y
-    %99:u32 = load %z
-    %100:vec3<u32> = construct %97, %98, %99
-    ret %100
+%toIndex3D = func(%gridSize_2:u32, %index:u32):vec3<u32> {  # %gridSize_2: 'gridSize'
+  $B4: {
+    %87:u32 = mul %gridSize_2, %gridSize_2
+    %88:u32 = call %tint_div_u32, %index, %87
+    %z:ptr<function, u32, read_write> = var, %88
+    %91:u32 = mul %gridSize_2, %gridSize_2
+    %92:u32 = load %z
+    %93:u32 = mul %91, %92
+    %94:u32 = sub %index, %93
+    %95:u32 = call %tint_div_u32, %94, %gridSize_2
+    %y:ptr<function, u32, read_write> = var, %95
+    %97:u32 = call %tint_mod_u32, %index, %gridSize_2
+    %x:ptr<function, u32, read_write> = var, %97
+    %100:u32 = load %x
+    %101:u32 = load %y
+    %102:u32 = load %z
+    %103:vec3<u32> = construct %100, %101, %102
+    ret %103
   }
 }
-%loadPosition = func(%vertexIndex:u32):vec3<f32> -> %b5 {
-  %b5 = block {
-    %103:u32 = mul 3u, %vertexIndex
-    %104:u32 = add %103, 0u
-    %105:ptr<storage, f32, read_write> = access %positions, 0u, %104
-    %106:f32 = load %105
-    %107:u32 = mul 3u, %vertexIndex
-    %108:u32 = add %107, 1u
-    %109:ptr<storage, f32, read_write> = access %positions, 0u, %108
-    %110:f32 = load %109
-    %111:u32 = mul 3u, %vertexIndex
-    %112:u32 = add %111, 2u
-    %113:ptr<storage, f32, read_write> = access %positions, 0u, %112
-    %114:f32 = load %113
-    %115:vec3<f32> = construct %106, %110, %114
-    %position_1:ptr<function, vec3<f32>, read_write> = var, %115  # %position_1: 'position'
-    %117:vec3<f32> = load %position_1
-    ret %117
+%loadPosition = func(%vertexIndex:u32):vec3<f32> {
+  $B5: {
+    %106:u32 = mul 3u, %vertexIndex
+    %107:u32 = add %106, 0u
+    %108:ptr<storage, f32, read_write> = access %positions, 0u, %107
+    %109:f32 = load %108
+    %110:u32 = mul 3u, %vertexIndex
+    %111:u32 = add %110, 1u
+    %112:ptr<storage, f32, read_write> = access %positions, 0u, %111
+    %113:f32 = load %112
+    %114:u32 = mul 3u, %vertexIndex
+    %115:u32 = add %114, 2u
+    %116:ptr<storage, f32, read_write> = access %positions, 0u, %115
+    %117:f32 = load %116
+    %118:vec3<f32> = construct %109, %113, %117
+    %position_1:ptr<function, vec3<f32>, read_write> = var, %118  # %position_1: 'position'
+    %120:vec3<f32> = load %position_1
+    ret %120
   }
 }
-%doIgnore = func():void -> %b6 {
-  %b6 = block {
-    %119:ptr<uniform, u32, read> = access %uniforms, 0u
-    %120:u32 = load %119
-    %g42:ptr<function, u32, read_write> = var, %120
-    %122:ptr<storage, u32, read_write> = access %dbg, 5u
+%doIgnore = func():void {
+  $B6: {
+    %122:ptr<uniform, u32, read> = access %uniforms, 0u
     %123:u32 = load %122
-    %kj6:ptr<function, u32, read_write> = var, %123
-    %125:ptr<storage, atomic<u32>, read_write> = access %counters, 0u, 0i
-    %126:u32 = atomicLoad %125
-    %b53:ptr<function, u32, read_write> = var, %126
-    %128:ptr<storage, u32, read_write> = access %indices, 0u, 0i
-    %129:u32 = load %128
-    %rwg:ptr<function, u32, read_write> = var, %129
-    %131:ptr<storage, f32, read_write> = access %positions, 0u, 0i
-    %132:f32 = load %131
-    %rb5:ptr<function, f32, read_write> = var, %132
-    %134:ptr<storage, atomic<i32>, read_write> = access %LUT, 0u, 0i
-    %135:i32 = atomicLoad %134
-    %g55:ptr<function, i32, read_write> = var, %135
+    %g42:ptr<function, u32, read_write> = var, %123
+    %125:ptr<storage, u32, read_write> = access %dbg, 5u
+    %126:u32 = load %125
+    %kj6:ptr<function, u32, read_write> = var, %126
+    %128:ptr<storage, atomic<u32>, read_write> = access %counters, 0u, 0i
+    %129:u32 = atomicLoad %128
+    %b53:ptr<function, u32, read_write> = var, %129
+    %131:ptr<storage, u32, read_write> = access %indices, 0u, 0i
+    %132:u32 = load %131
+    %rwg:ptr<function, u32, read_write> = var, %132
+    %134:ptr<storage, f32, read_write> = access %positions, 0u, 0i
+    %135:f32 = load %134
+    %rb5:ptr<function, f32, read_write> = var, %135
+    %137:ptr<storage, atomic<i32>, read_write> = access %LUT, 0u, 0i
+    %138:i32 = atomicLoad %137
+    %g55:ptr<function, i32, read_write> = var, %138
     ret
   }
 }
-%main_count = @compute @workgroup_size(128, 1, 1) func(%GlobalInvocationID:vec3<u32> [@global_invocation_id]):void -> %b7 {
-  %b7 = block {
-    %139:u32 = access %GlobalInvocationID, 0u
-    %triangleIndex:ptr<function, u32, read_write> = var, %139
-    %141:u32 = load %triangleIndex
-    %142:ptr<uniform, u32, read> = access %uniforms, 0u
-    %143:u32 = load %142
-    %144:bool = gte %141, %143
-    if %144 [t: %b8] {  # if_1
-      %b8 = block {  # true
+%main_count = @compute @workgroup_size(128, 1, 1) func(%GlobalInvocationID:vec3<u32> [@global_invocation_id]):void {
+  $B7: {
+    %142:u32 = access %GlobalInvocationID, 0u
+    %triangleIndex:ptr<function, u32, read_write> = var, %142
+    %144:u32 = load %triangleIndex
+    %145:ptr<uniform, u32, read> = access %uniforms, 0u
+    %146:u32 = load %145
+    %147:bool = gte %144, %146
+    if %147 [t: $B8] {  # if_1
+      $B8: {  # true
         ret
       }
     }
-    %145:void = call %doIgnore
-    %146:u32 = load %triangleIndex
-    %147:u32 = mul 3u, %146
-    %148:u32 = add %147, 0u
-    %149:ptr<storage, u32, read_write> = access %indices, 0u, %148
-    %150:u32 = load %149
-    %i0:ptr<function, u32, read_write> = var, %150
-    %152:u32 = load %triangleIndex
-    %153:u32 = mul 3u, %152
-    %154:u32 = add %153, 1u
-    %155:ptr<storage, u32, read_write> = access %indices, 0u, %154
-    %156:u32 = load %155
-    %i1:ptr<function, u32, read_write> = var, %156
-    %158:u32 = load %triangleIndex
-    %159:u32 = mul 3u, %158
-    %160:u32 = add %159, 2u
-    %161:ptr<storage, u32, read_write> = access %indices, 0u, %160
-    %162:u32 = load %161
-    %i2:ptr<function, u32, read_write> = var, %162
-    %164:u32 = load %i0
-    %165:vec3<f32> = call %loadPosition, %164
-    %p0:ptr<function, vec3<f32>, read_write> = var, %165
-    %167:u32 = load %i1
+    %148:void = call %doIgnore
+    %149:u32 = load %triangleIndex
+    %150:u32 = mul 3u, %149
+    %151:u32 = add %150, 0u
+    %152:ptr<storage, u32, read_write> = access %indices, 0u, %151
+    %153:u32 = load %152
+    %i0:ptr<function, u32, read_write> = var, %153
+    %155:u32 = load %triangleIndex
+    %156:u32 = mul 3u, %155
+    %157:u32 = add %156, 1u
+    %158:ptr<storage, u32, read_write> = access %indices, 0u, %157
+    %159:u32 = load %158
+    %i1:ptr<function, u32, read_write> = var, %159
+    %161:u32 = load %triangleIndex
+    %162:u32 = mul 3u, %161
+    %163:u32 = add %162, 2u
+    %164:ptr<storage, u32, read_write> = access %indices, 0u, %163
+    %165:u32 = load %164
+    %i2:ptr<function, u32, read_write> = var, %165
+    %167:u32 = load %i0
     %168:vec3<f32> = call %loadPosition, %167
-    %p1:ptr<function, vec3<f32>, read_write> = var, %168
-    %170:u32 = load %i2
+    %p0:ptr<function, vec3<f32>, read_write> = var, %168
+    %170:u32 = load %i1
     %171:vec3<f32> = call %loadPosition, %170
-    %p2:ptr<function, vec3<f32>, read_write> = var, %171
-    %173:vec3<f32> = load %p0
-    %174:vec3<f32> = load %p1
-    %175:vec3<f32> = add %173, %174
-    %176:vec3<f32> = load %p2
-    %177:vec3<f32> = add %175, %176
-    %178:vec3<f32> = div %177, 3.0f
-    %center:ptr<function, vec3<f32>, read_write> = var, %178
-    %180:vec3<f32> = load %center
-    %181:vec3<f32> = call %toVoxelPos, %180
-    %voxelPos_1:ptr<function, vec3<f32>, read_write> = var, %181  # %voxelPos_1: 'voxelPos'
-    %183:ptr<uniform, u32, read> = access %uniforms, 1u
-    %184:u32 = load %183
-    %185:vec3<f32> = load %voxelPos_1
-    %186:u32 = call %toIndex1D, %184, %185
-    %voxelIndex:ptr<function, u32, read_write> = var, %186
-    %188:u32 = load %voxelIndex
-    %189:ptr<storage, atomic<u32>, read_write> = access %counters, 0u, %188
-    %190:u32 = atomicAdd %189, 1u
-    %acefg:ptr<function, u32, read_write> = var, %190
-    %192:u32 = load %triangleIndex
-    %193:bool = eq %192, 0u
-    if %193 [t: %b9] {  # if_2
-      %b9 = block {  # true
-        %194:ptr<storage, u32, read_write> = access %dbg, 4u
-        %195:ptr<uniform, u32, read> = access %uniforms, 1u
-        %196:u32 = load %195
-        store %194, %196
-        %197:ptr<storage, f32, read_write> = access %dbg, 8u
-        %198:f32 = load_vector_element %center, 0u
-        store %197, %198
-        %199:ptr<storage, f32, read_write> = access %dbg, 9u
-        %200:f32 = load_vector_element %center, 1u
-        store %199, %200
-        %201:ptr<storage, f32, read_write> = access %dbg, 10u
-        %202:f32 = load_vector_element %center, 2u
-        store %201, %202
+    %p1:ptr<function, vec3<f32>, read_write> = var, %171
+    %173:u32 = load %i2
+    %174:vec3<f32> = call %loadPosition, %173
+    %p2:ptr<function, vec3<f32>, read_write> = var, %174
+    %176:vec3<f32> = load %p0
+    %177:vec3<f32> = load %p1
+    %178:vec3<f32> = add %176, %177
+    %179:vec3<f32> = load %p2
+    %180:vec3<f32> = add %178, %179
+    %181:vec3<f32> = div %180, 3.0f
+    %center:ptr<function, vec3<f32>, read_write> = var, %181
+    %183:vec3<f32> = load %center
+    %184:vec3<f32> = call %toVoxelPos, %183
+    %voxelPos_1:ptr<function, vec3<f32>, read_write> = var, %184  # %voxelPos_1: 'voxelPos'
+    %186:ptr<uniform, u32, read> = access %uniforms, 1u
+    %187:u32 = load %186
+    %188:vec3<f32> = load %voxelPos_1
+    %189:u32 = call %toIndex1D, %187, %188
+    %voxelIndex:ptr<function, u32, read_write> = var, %189
+    %191:u32 = load %voxelIndex
+    %192:ptr<storage, atomic<u32>, read_write> = access %counters, 0u, %191
+    %193:u32 = atomicAdd %192, 1u
+    %acefg:ptr<function, u32, read_write> = var, %193
+    %195:u32 = load %triangleIndex
+    %196:bool = eq %195, 0u
+    if %196 [t: $B9] {  # if_2
+      $B9: {  # true
+        %197:ptr<storage, u32, read_write> = access %dbg, 4u
+        %198:ptr<uniform, u32, read> = access %uniforms, 1u
+        %199:u32 = load %198
+        store %197, %199
+        %200:ptr<storage, f32, read_write> = access %dbg, 8u
+        %201:f32 = load_vector_element %center, 0u
+        store %200, %201
+        %202:ptr<storage, f32, read_write> = access %dbg, 9u
+        %203:f32 = load_vector_element %center, 1u
+        store %202, %203
+        %204:ptr<storage, f32, read_write> = access %dbg, 10u
+        %205:f32 = load_vector_element %center, 2u
+        store %204, %205
         exit_if  # if_2
       }
     }
     ret
   }
 }
-%main_create_lut = @compute @workgroup_size(128, 1, 1) func(%GlobalInvocationID_1:vec3<u32> [@global_invocation_id]):void -> %b10 {  # %GlobalInvocationID_1: 'GlobalInvocationID'
-  %b10 = block {
-    %205:u32 = access %GlobalInvocationID_1, 0u
-    %voxelIndex_1:ptr<function, u32, read_write> = var, %205  # %voxelIndex_1: 'voxelIndex'
-    %207:void = call %doIgnore
-    %208:ptr<uniform, u32, read> = access %uniforms, 1u
-    %209:u32 = load %208
-    %210:ptr<uniform, u32, read> = access %uniforms, 1u
-    %211:u32 = load %210
-    %212:u32 = mul %209, %211
+%main_create_lut = @compute @workgroup_size(128, 1, 1) func(%GlobalInvocationID_1:vec3<u32> [@global_invocation_id]):void {  # %GlobalInvocationID_1: 'GlobalInvocationID'
+  $B10: {
+    %208:u32 = access %GlobalInvocationID_1, 0u
+    %voxelIndex_1:ptr<function, u32, read_write> = var, %208  # %voxelIndex_1: 'voxelIndex'
+    %210:void = call %doIgnore
+    %211:ptr<uniform, u32, read> = access %uniforms, 1u
+    %212:u32 = load %211
     %213:ptr<uniform, u32, read> = access %uniforms, 1u
     %214:u32 = load %213
     %215:u32 = mul %212, %214
-    %maxVoxels:ptr<function, u32, read_write> = var, %215
-    %217:u32 = load %voxelIndex_1
-    %218:u32 = load %maxVoxels
-    %219:bool = gte %217, %218
-    if %219 [t: %b11] {  # if_3
-      %b11 = block {  # true
+    %216:ptr<uniform, u32, read> = access %uniforms, 1u
+    %217:u32 = load %216
+    %218:u32 = mul %215, %217
+    %maxVoxels:ptr<function, u32, read_write> = var, %218
+    %220:u32 = load %voxelIndex_1
+    %221:u32 = load %maxVoxels
+    %222:bool = gte %220, %221
+    if %222 [t: $B11] {  # if_3
+      $B11: {  # true
         ret
       }
     }
-    %220:u32 = load %voxelIndex_1
-    %221:ptr<storage, atomic<u32>, read_write> = access %counters, 0u, %220
-    %222:u32 = atomicLoad %221
-    %numTriangles:ptr<function, u32, read_write> = var, %222
+    %223:u32 = load %voxelIndex_1
+    %224:ptr<storage, atomic<u32>, read_write> = access %counters, 0u, %223
+    %225:u32 = atomicLoad %224
+    %numTriangles:ptr<function, u32, read_write> = var, %225
     %offset:ptr<function, i32, read_write> = var, -1i
-    %225:u32 = load %numTriangles
-    %226:bool = gt %225, 0u
-    if %226 [t: %b12] {  # if_4
-      %b12 = block {  # true
-        %227:ptr<storage, atomic<u32>, read_write> = access %dbg, 0u
-        %228:u32 = load %numTriangles
-        %229:u32 = atomicAdd %227, %228
-        %230:i32 = convert %229
-        store %offset, %230
+    %228:u32 = load %numTriangles
+    %229:bool = gt %228, 0u
+    if %229 [t: $B12] {  # if_4
+      $B12: {  # true
+        %230:ptr<storage, atomic<u32>, read_write> = access %dbg, 0u
+        %231:u32 = load %numTriangles
+        %232:u32 = atomicAdd %230, %231
+        %233:i32 = convert %232
+        store %offset, %233
         exit_if  # if_4
       }
     }
-    %231:u32 = load %voxelIndex_1
-    %232:ptr<storage, atomic<i32>, read_write> = access %LUT, 0u, %231
-    %233:i32 = load %offset
-    %234:void = atomicStore %232, %233
+    %234:u32 = load %voxelIndex_1
+    %235:ptr<storage, atomic<i32>, read_write> = access %LUT, 0u, %234
+    %236:i32 = load %offset
+    %237:void = atomicStore %235, %236
     ret
   }
 }
-%main_sort_triangles = @compute @workgroup_size(128, 1, 1) func(%GlobalInvocationID_2:vec3<u32> [@global_invocation_id]):void -> %b13 {  # %GlobalInvocationID_2: 'GlobalInvocationID'
-  %b13 = block {
-    %237:u32 = access %GlobalInvocationID_2, 0u
-    %triangleIndex_1:ptr<function, u32, read_write> = var, %237  # %triangleIndex_1: 'triangleIndex'
-    %239:void = call %doIgnore
-    %240:u32 = load %triangleIndex_1
-    %241:ptr<uniform, u32, read> = access %uniforms, 0u
-    %242:u32 = load %241
-    %243:bool = gte %240, %242
-    if %243 [t: %b14] {  # if_5
-      %b14 = block {  # true
+%main_sort_triangles = @compute @workgroup_size(128, 1, 1) func(%GlobalInvocationID_2:vec3<u32> [@global_invocation_id]):void {  # %GlobalInvocationID_2: 'GlobalInvocationID'
+  $B13: {
+    %240:u32 = access %GlobalInvocationID_2, 0u
+    %triangleIndex_1:ptr<function, u32, read_write> = var, %240  # %triangleIndex_1: 'triangleIndex'
+    %242:void = call %doIgnore
+    %243:u32 = load %triangleIndex_1
+    %244:ptr<uniform, u32, read> = access %uniforms, 0u
+    %245:u32 = load %244
+    %246:bool = gte %243, %245
+    if %246 [t: $B14] {  # if_5
+      $B14: {  # true
         ret
       }
     }
-    %244:u32 = load %triangleIndex_1
-    %245:u32 = mul 3u, %244
-    %246:u32 = add %245, 0u
-    %247:ptr<storage, u32, read_write> = access %indices, 0u, %246
-    %248:u32 = load %247
-    %i0_1:ptr<function, u32, read_write> = var, %248  # %i0_1: 'i0'
-    %250:u32 = load %triangleIndex_1
-    %251:u32 = mul 3u, %250
-    %252:u32 = add %251, 1u
-    %253:ptr<storage, u32, read_write> = access %indices, 0u, %252
-    %254:u32 = load %253
-    %i1_1:ptr<function, u32, read_write> = var, %254  # %i1_1: 'i1'
-    %256:u32 = load %triangleIndex_1
-    %257:u32 = mul 3u, %256
-    %258:u32 = add %257, 2u
-    %259:ptr<storage, u32, read_write> = access %indices, 0u, %258
-    %260:u32 = load %259
-    %i2_1:ptr<function, u32, read_write> = var, %260  # %i2_1: 'i2'
-    %262:u32 = load %i0_1
-    %263:vec3<f32> = call %loadPosition, %262
-    %p0_1:ptr<function, vec3<f32>, read_write> = var, %263  # %p0_1: 'p0'
-    %265:u32 = load %i1_1
+    %247:u32 = load %triangleIndex_1
+    %248:u32 = mul 3u, %247
+    %249:u32 = add %248, 0u
+    %250:ptr<storage, u32, read_write> = access %indices, 0u, %249
+    %251:u32 = load %250
+    %i0_1:ptr<function, u32, read_write> = var, %251  # %i0_1: 'i0'
+    %253:u32 = load %triangleIndex_1
+    %254:u32 = mul 3u, %253
+    %255:u32 = add %254, 1u
+    %256:ptr<storage, u32, read_write> = access %indices, 0u, %255
+    %257:u32 = load %256
+    %i1_1:ptr<function, u32, read_write> = var, %257  # %i1_1: 'i1'
+    %259:u32 = load %triangleIndex_1
+    %260:u32 = mul 3u, %259
+    %261:u32 = add %260, 2u
+    %262:ptr<storage, u32, read_write> = access %indices, 0u, %261
+    %263:u32 = load %262
+    %i2_1:ptr<function, u32, read_write> = var, %263  # %i2_1: 'i2'
+    %265:u32 = load %i0_1
     %266:vec3<f32> = call %loadPosition, %265
-    %p1_1:ptr<function, vec3<f32>, read_write> = var, %266  # %p1_1: 'p1'
-    %268:u32 = load %i2_1
+    %p0_1:ptr<function, vec3<f32>, read_write> = var, %266  # %p0_1: 'p0'
+    %268:u32 = load %i1_1
     %269:vec3<f32> = call %loadPosition, %268
-    %p2_1:ptr<function, vec3<f32>, read_write> = var, %269  # %p2_1: 'p2'
-    %271:vec3<f32> = load %p0_1
-    %272:vec3<f32> = load %p1_1
-    %273:vec3<f32> = add %271, %272
-    %274:vec3<f32> = load %p2_1
-    %275:vec3<f32> = add %273, %274
-    %276:vec3<f32> = div %275, 3.0f
-    %center_1:ptr<function, vec3<f32>, read_write> = var, %276  # %center_1: 'center'
-    %278:vec3<f32> = load %center_1
-    %279:vec3<f32> = call %toVoxelPos, %278
-    %voxelPos_2:ptr<function, vec3<f32>, read_write> = var, %279  # %voxelPos_2: 'voxelPos'
-    %281:ptr<uniform, u32, read> = access %uniforms, 1u
-    %282:u32 = load %281
-    %283:vec3<f32> = load %voxelPos_2
-    %284:u32 = call %toIndex1D, %282, %283
-    %voxelIndex_2:ptr<function, u32, read_write> = var, %284  # %voxelIndex_2: 'voxelIndex'
-    %286:u32 = load %voxelIndex_2
-    %287:ptr<storage, atomic<i32>, read_write> = access %LUT, 0u, %286
-    %288:i32 = atomicAdd %287, 1i
-    %triangleOffset:ptr<function, i32, read_write> = var, %288
+    %p1_1:ptr<function, vec3<f32>, read_write> = var, %269  # %p1_1: 'p1'
+    %271:u32 = load %i2_1
+    %272:vec3<f32> = call %loadPosition, %271
+    %p2_1:ptr<function, vec3<f32>, read_write> = var, %272  # %p2_1: 'p2'
+    %274:vec3<f32> = load %p0_1
+    %275:vec3<f32> = load %p1_1
+    %276:vec3<f32> = add %274, %275
+    %277:vec3<f32> = load %p2_1
+    %278:vec3<f32> = add %276, %277
+    %279:vec3<f32> = div %278, 3.0f
+    %center_1:ptr<function, vec3<f32>, read_write> = var, %279  # %center_1: 'center'
+    %281:vec3<f32> = load %center_1
+    %282:vec3<f32> = call %toVoxelPos, %281
+    %voxelPos_2:ptr<function, vec3<f32>, read_write> = var, %282  # %voxelPos_2: 'voxelPos'
+    %284:ptr<uniform, u32, read> = access %uniforms, 1u
+    %285:u32 = load %284
+    %286:vec3<f32> = load %voxelPos_2
+    %287:u32 = call %toIndex1D, %285, %286
+    %voxelIndex_2:ptr<function, u32, read_write> = var, %287  # %voxelIndex_2: 'voxelIndex'
+    %289:u32 = load %voxelIndex_2
+    %290:ptr<storage, atomic<i32>, read_write> = access %LUT, 0u, %289
+    %291:i32 = atomicAdd %290, 1i
+    %triangleOffset:ptr<function, i32, read_write> = var, %291
     ret
   }
 }
+%tint_div_u32 = func(%lhs:u32, %rhs:u32):u32 {
+  $B15: {
+    %295:bool = eq %rhs, 0u
+    %296:u32 = select %rhs, 1u, %295
+    %297:u32 = div %lhs, %296
+    ret %297
+  }
+}
+%tint_mod_u32 = func(%lhs_1:u32, %rhs_1:u32):u32 {  # %lhs_1: 'lhs', %rhs_1: 'rhs'
+  $B16: {
+    %300:bool = eq %rhs_1, 0u
+    %301:u32 = select %rhs_1, 1u, %300
+    %302:u32 = let %301
+    %303:u32 = div %lhs_1, %302
+    %304:u32 = mul %303, %302
+    %305:u32 = sub %lhs_1, %304
+    ret %305
+  }
+}
+%tint_v3f32_to_v3u32 = func(%value:vec3<f32>):vec3<u32> {
+  $B17: {
+    %307:vec3<u32> = convert %value
+    %308:vec3<bool> = gte %value, vec3<f32>(0.0f)
+    %309:vec3<u32> = select vec3<u32>(0u), %307, %308
+    %310:vec3<bool> = lte %value, vec3<f32>(4294967040.0f)
+    %311:vec3<u32> = select vec3<u32>(4294967295u), %309, %310
+    ret %311
+  }
+}
 
 unhandled variable address space
 ********************************************************************
diff --git a/test/tint/bug/tint/1118.wgsl.expected.ir.msl b/test/tint/bug/tint/1118.wgsl.expected.ir.msl
index 2e2e81f..781fc11 100644
--- a/test/tint/bug/tint/1118.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/1118.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Scene = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Scene = struct @align(16) {
   vEyePosition:vec4<f32> @offset(0)
 }
 
@@ -20,17 +20,18 @@
   glFragColor_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %fClipDistance3:ptr<private, f32, read_write> = var
   %fClipDistance4:ptr<private, f32, read_write> = var
   %x_29:ptr<uniform, Scene, read> = var @binding_point(0, 0)
   %x_49:ptr<uniform, Material, read> = var @binding_point(0, 1)
   %x_137:ptr<uniform, Mesh, read> = var @binding_point(0, 2)
   %glFragColor:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %viewDirectionW:ptr<function, vec3<f32>, read_write> = var
     %baseColor:ptr<function, vec4<f32>, read_write> = var
     %diffuseColor:ptr<function, vec3<f32>, read_write> = var
@@ -47,144 +48,181 @@
     %finalDiffuse:ptr<function, vec3<f32>, read_write> = var
     %finalSpecular:ptr<function, vec3<f32>, read_write> = var
     %color:ptr<function, vec4<f32>, read_write> = var
-    %x_9:f32 = load %fClipDistance3
-    %25:bool = gt %x_9, 0.0f
-    if %25 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        discard
+    %25:f32 = load %fClipDistance3
+    %x_9:f32 = let %25
+    %27:bool = gt %x_9, 0.0f
+    if %27 [t: $B3] {  # if_1
+      $B3: {  # true
+        store %continue_execution, false
         exit_if  # if_1
       }
     }
-    %x_17:f32 = load %fClipDistance4
-    %27:bool = gt %x_17, 0.0f
-    if %27 [t: %b4] {  # if_2
-      %b4 = block {  # true
-        discard
+    %28:f32 = load %fClipDistance4
+    %x_17:f32 = let %28
+    %30:bool = gt %x_17, 0.0f
+    if %30 [t: $B4] {  # if_2
+      $B4: {  # true
+        store %continue_execution, false
         exit_if  # if_2
       }
     }
-    %28:ptr<uniform, vec4<f32>, read> = access %x_29, 0u
-    %x_34:vec4<f32> = load %28
+    %31:ptr<uniform, vec4<f32>, read> = access %x_29, 0u
+    %32:vec4<f32> = load %31
+    %x_34:vec4<f32> = let %32
     %x_38:vec3<f32> = let vec3<f32>(0.0f)
-    %31:f32 = access %x_34, 0u
-    %32:f32 = access %x_34, 1u
-    %33:f32 = access %x_34, 2u
-    %34:vec3<f32> = construct %31, %32, %33
-    %35:vec3<f32> = sub %34, %x_38
-    %36:vec3<f32> = normalize %35
-    store %viewDirectionW, %36
+    %35:f32 = access %x_34, 0u
+    %36:f32 = access %x_34, 1u
+    %37:f32 = access %x_34, 2u
+    %38:vec3<f32> = construct %35, %36, %37
+    %39:vec3<f32> = sub %38, %x_38
+    %40:vec3<f32> = normalize %39
+    store %viewDirectionW, %40
     store %baseColor, vec4<f32>(1.0f)
-    %37:ptr<uniform, vec4<f32>, read> = access %x_49, 0u
-    %x_52:vec4<f32> = load %37
-    %39:f32 = access %x_52, 0u
-    %40:f32 = access %x_52, 1u
-    %41:f32 = access %x_52, 2u
-    %42:vec3<f32> = construct %39, %40, %41
-    store %diffuseColor, %42
-    %43:ptr<uniform, vec4<f32>, read> = access %x_49, 0u
-    %x_60:f32 = load_vector_element %43, 3u
+    %41:ptr<uniform, vec4<f32>, read> = access %x_49, 0u
+    %42:vec4<f32> = load %41
+    %x_52:vec4<f32> = let %42
+    %44:f32 = access %x_52, 0u
+    %45:f32 = access %x_52, 1u
+    %46:f32 = access %x_52, 2u
+    %47:vec3<f32> = construct %44, %45, %46
+    store %diffuseColor, %47
+    %48:ptr<uniform, vec4<f32>, read> = access %x_49, 0u
+    %49:f32 = load_vector_element %48, 3u
+    %x_60:f32 = let %49
     store %alpha, %x_60
     %x_62:vec3<f32> = let vec3<f32>(0.0f)
     %x_64:vec3<f32> = let vec3<f32>(0.0f)
     store %uvOffset, vec2<f32>(0.0f)
     %x_74:vec4<f32> = let vec4<f32>(0.0f)
-    %x_76:vec4<f32> = load %baseColor
-    %49:f32 = access %x_76, 0u
-    %50:f32 = access %x_76, 1u
-    %51:f32 = access %x_76, 2u
-    %52:vec3<f32> = construct %49, %50, %51
-    %53:f32 = access %x_74, 0u
-    %54:f32 = access %x_74, 1u
-    %55:f32 = access %x_74, 2u
-    %56:vec3<f32> = construct %53, %54, %55
-    %x_78:vec3<f32> = mul %52, %56
-    %x_79:vec4<f32> = load %baseColor
-    %59:f32 = access %x_78, 0u
-    %60:f32 = access %x_78, 1u
-    %61:f32 = access %x_78, 2u
-    %62:f32 = access %x_79, 3u
-    %63:vec4<f32> = construct %59, %60, %61, %62
-    store %baseColor, %63
+    %54:vec4<f32> = load %baseColor
+    %x_76:vec4<f32> = let %54
+    %56:f32 = access %x_76, 0u
+    %57:f32 = access %x_76, 1u
+    %58:f32 = access %x_76, 2u
+    %59:vec3<f32> = construct %56, %57, %58
+    %60:vec3<f32> = let %59
+    %61:f32 = access %x_74, 0u
+    %62:f32 = access %x_74, 1u
+    %63:f32 = access %x_74, 2u
+    %64:vec3<f32> = construct %61, %62, %63
+    %65:vec3<f32> = mul %60, %64
+    %x_78:vec3<f32> = let %65
+    %67:vec4<f32> = load %baseColor
+    %x_79:vec4<f32> = let %67
+    %69:f32 = access %x_78, 0u
+    %70:f32 = access %x_78, 1u
+    %71:f32 = access %x_78, 2u
+    %72:f32 = access %x_79, 3u
+    %73:vec4<f32> = construct %69, %70, %71, %72
+    store %baseColor, %73
     store %baseAmbientColor, vec3<f32>(1.0f)
     store %glossiness, 0.0f
     store %diffuseBase, vec3<f32>(0.0f)
     store %shadow, 1.0f
     store %refractionColor, vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f)
     store %reflectionColor, vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f)
-    %64:ptr<uniform, vec3<f32>, read> = access %x_49, 3u
-    %x_94:vec3<f32> = load %64
+    %74:ptr<uniform, vec3<f32>, read> = access %x_49, 3u
+    %75:vec3<f32> = load %74
+    %x_94:vec3<f32> = let %75
     store %emissiveColor, %x_94
-    %x_96:vec3<f32> = load %diffuseBase
-    %x_97:vec3<f32> = load %diffuseColor
-    %x_99:vec3<f32> = load %emissiveColor
-    %69:ptr<uniform, vec3<f32>, read> = access %x_49, 1u
-    %x_103:vec3<f32> = load %69
-    %x_108:vec4<f32> = load %baseColor
-    %72:vec3<f32> = mul %x_96, %x_97
-    %73:vec3<f32> = add %72, %x_99
-    %74:vec3<f32> = add %73, %x_103
-    %75:vec3<f32> = clamp %74, vec3<f32>(0.0f), vec3<f32>(1.0f)
-    %76:f32 = access %x_108, 0u
-    %77:f32 = access %x_108, 1u
-    %78:f32 = access %x_108, 2u
-    %79:vec3<f32> = construct %76, %77, %78
-    %80:vec3<f32> = mul %75, %79
-    store %finalDiffuse, %80
-    store %finalSpecular, vec3<f32>(0.0f)
-    %x_113:vec3<f32> = load %finalDiffuse
-    %x_114:vec3<f32> = load %baseAmbientColor
-    %x_116:vec3<f32> = load %finalSpecular
-    %x_118:vec4<f32> = load %reflectionColor
-    %x_121:vec4<f32> = load %refractionColor
-    %86:vec3<f32> = mul %x_113, %x_114
-    %87:vec3<f32> = add %86, %x_116
-    %88:f32 = access %x_118, 0u
-    %89:f32 = access %x_118, 1u
-    %90:f32 = access %x_118, 2u
-    %91:vec3<f32> = construct %88, %89, %90
-    %92:vec3<f32> = add %87, %91
-    %93:f32 = access %x_121, 0u
-    %94:f32 = access %x_121, 1u
-    %95:f32 = access %x_121, 2u
+    %77:vec3<f32> = load %diffuseBase
+    %x_96:vec3<f32> = let %77
+    %79:vec3<f32> = load %diffuseColor
+    %x_97:vec3<f32> = let %79
+    %81:vec3<f32> = load %emissiveColor
+    %x_99:vec3<f32> = let %81
+    %83:ptr<uniform, vec3<f32>, read> = access %x_49, 1u
+    %84:vec3<f32> = load %83
+    %x_103:vec3<f32> = let %84
+    %86:vec4<f32> = load %baseColor
+    %x_108:vec4<f32> = let %86
+    %88:vec3<f32> = mul %x_96, %x_97
+    %89:vec3<f32> = add %88, %x_99
+    %90:vec3<f32> = add %89, %x_103
+    %91:vec3<f32> = clamp %90, vec3<f32>(0.0f), vec3<f32>(1.0f)
+    %92:vec3<f32> = let %91
+    %93:f32 = access %x_108, 0u
+    %94:f32 = access %x_108, 1u
+    %95:f32 = access %x_108, 2u
     %96:vec3<f32> = construct %93, %94, %95
-    %x_123:vec3<f32> = add %92, %96
-    %x_124:f32 = load %alpha
-    %99:f32 = access %x_123, 0u
-    %100:f32 = access %x_123, 1u
-    %101:f32 = access %x_123, 2u
-    %102:vec4<f32> = construct %99, %100, %101, %x_124
-    store %color, %102
-    %x_129:vec4<f32> = load %color
-    %104:f32 = access %x_129, 0u
-    %105:f32 = access %x_129, 1u
-    %106:f32 = access %x_129, 2u
-    %107:vec3<f32> = construct %104, %105, %106
-    %x_132:vec3<f32> = max %107, vec3<f32>(0.0f)
-    %x_133:vec4<f32> = load %color
-    %110:f32 = access %x_132, 0u
-    %111:f32 = access %x_132, 1u
-    %112:f32 = access %x_132, 2u
-    %113:f32 = access %x_133, 3u
-    %114:vec4<f32> = construct %110, %111, %112, %113
-    store %color, %114
-    %115:ptr<uniform, f32, read> = access %x_137, 0u
-    %x_140:f32 = load %115
-    %x_142:f32 = load_vector_element %color, 3u
-    %118:f32 = mul %x_142, %x_140
-    store_vector_element %color, 3u, %118
-    %x_147:vec4<f32> = load %color
+    %97:vec3<f32> = mul %92, %96
+    store %finalDiffuse, %97
+    store %finalSpecular, vec3<f32>(0.0f)
+    %98:vec3<f32> = load %finalDiffuse
+    %x_113:vec3<f32> = let %98
+    %100:vec3<f32> = load %baseAmbientColor
+    %x_114:vec3<f32> = let %100
+    %102:vec3<f32> = load %finalSpecular
+    %x_116:vec3<f32> = let %102
+    %104:vec4<f32> = load %reflectionColor
+    %x_118:vec4<f32> = let %104
+    %106:vec4<f32> = load %refractionColor
+    %x_121:vec4<f32> = let %106
+    %108:vec3<f32> = mul %x_113, %x_114
+    %109:vec3<f32> = add %108, %x_116
+    %110:f32 = access %x_118, 0u
+    %111:f32 = access %x_118, 1u
+    %112:f32 = access %x_118, 2u
+    %113:vec3<f32> = construct %110, %111, %112
+    %114:vec3<f32> = add %109, %113
+    %115:vec3<f32> = let %114
+    %116:f32 = access %x_121, 0u
+    %117:f32 = access %x_121, 1u
+    %118:f32 = access %x_121, 2u
+    %119:vec3<f32> = construct %116, %117, %118
+    %120:vec3<f32> = add %115, %119
+    %x_123:vec3<f32> = let %120
+    %122:f32 = load %alpha
+    %x_124:f32 = let %122
+    %124:f32 = access %x_123, 0u
+    %125:f32 = access %x_123, 1u
+    %126:f32 = access %x_123, 2u
+    %127:vec4<f32> = construct %124, %125, %126, %x_124
+    store %color, %127
+    %128:vec4<f32> = load %color
+    %x_129:vec4<f32> = let %128
+    %130:f32 = access %x_129, 0u
+    %131:f32 = access %x_129, 1u
+    %132:f32 = access %x_129, 2u
+    %133:vec3<f32> = construct %130, %131, %132
+    %134:vec3<f32> = max %133, vec3<f32>(0.0f)
+    %x_132:vec3<f32> = let %134
+    %136:vec4<f32> = load %color
+    %x_133:vec4<f32> = let %136
+    %138:f32 = access %x_132, 0u
+    %139:f32 = access %x_132, 1u
+    %140:f32 = access %x_132, 2u
+    %141:f32 = access %x_133, 3u
+    %142:vec4<f32> = construct %138, %139, %140, %141
+    store %color, %142
+    %143:ptr<uniform, f32, read> = access %x_137, 0u
+    %144:f32 = load %143
+    %x_140:f32 = let %144
+    %146:f32 = load_vector_element %color, 3u
+    %x_142:f32 = let %146
+    %148:f32 = mul %x_142, %x_140
+    store_vector_element %color, 3u, %148
+    %149:vec4<f32> = load %color
+    %x_147:vec4<f32> = let %149
     store %glFragColor, %x_147
     ret
   }
 }
-%tint_symbol = @fragment func(%fClipDistance3_param:f32 [@location(2)], %fClipDistance4_param:f32 [@location(3)]):main_out -> %b5 {
-  %b5 = block {
+%tint_symbol = @fragment func(%fClipDistance3_param:f32 [@location(2)], %fClipDistance4_param:f32 [@location(3)]):main_out {
+  $B5: {
     store %fClipDistance3, %fClipDistance3_param
     store %fClipDistance4, %fClipDistance4_param
-    %123:void = call %main_1
-    %124:vec4<f32> = load %glFragColor
-    %125:main_out = construct %124
-    ret %125
+    %154:void = call %main_1
+    %155:vec4<f32> = load %glFragColor
+    %156:main_out = construct %155
+    %157:bool = load %continue_execution
+    %158:bool = eq %157, false
+    if %158 [t: $B6] {  # if_3
+      $B6: {  # true
+        terminate_invocation
+      }
+    }
+    ret %156
   }
 }
 
diff --git a/test/tint/bug/tint/1121.wgsl.expected.ir.msl b/test/tint/bug/tint/1121.wgsl.expected.ir.msl
index 87c86a1..02a6258 100644
--- a/test/tint/bug/tint/1121.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/1121.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: LightData = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: LightData = struct @align(16) {
   position:vec4<f32> @offset(0)
   color:vec3<f32> @offset(16)
   radius:f32 @offset(28)
@@ -36,407 +36,414 @@
   fullScreenSize:vec4<f32> @offset(160)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %lightsBuffer:ptr<storage, LightsBuffer, read_write> = var @binding_point(0, 0)
   %tileLightId:ptr<storage, Tiles, read_write> = var @binding_point(1, 0)
   %config:ptr<uniform, Config, read> = var @binding_point(2, 0)
   %uniforms:ptr<uniform, Uniforms, read> = var @binding_point(3, 0)
 }
 
-%tint_symbol = @compute @workgroup_size(64, 1, 1) func(%GlobalInvocationID:vec3<u32> [@global_invocation_id]):void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(64, 1, 1) func(%GlobalInvocationID:vec3<u32> [@global_invocation_id]):void {
+  $B2: {
     %7:u32 = access %GlobalInvocationID, 0u
     %index:ptr<function, u32, read_write> = var, %7
     %9:u32 = load %index
     %10:ptr<uniform, u32, read> = access %config, 0u
     %11:u32 = load %10
     %12:bool = gte %9, %11
-    if %12 [t: %b3] {  # if_1
-      %b3 = block {  # true
+    if %12 [t: $B3] {  # if_1
+      $B3: {  # true
         ret
       }
     }
     %13:u32 = load %index
     %14:ptr<storage, vec4<f32>, read_write> = access %lightsBuffer, 0u, %13, 0u
-    %15:u32 = load %index
-    %16:ptr<storage, vec4<f32>, read_write> = access %lightsBuffer, 0u, %15, 0u
-    %17:f32 = load_vector_element %16, 1u
-    %18:f32 = sub %17, 0.10000000149011611938f
-    %19:u32 = load %index
-    %20:f32 = convert %19
+    %15:ptr<storage, vec4<f32>, read_write> = let %14
+    %16:u32 = load %index
+    %17:ptr<storage, vec4<f32>, read_write> = access %lightsBuffer, 0u, %16, 0u
+    %18:f32 = load_vector_element %17, 1u
+    %19:f32 = sub %18, 0.10000000149011611938f
+    %20:f32 = let %19
     %21:u32 = load %index
     %22:f32 = convert %21
-    %23:f32 = div %22, 64.0f
-    %24:f32 = floor %23
-    %25:f32 = mul 64.0f, %24
-    %26:f32 = sub %20, %25
-    %27:f32 = mul 0.00100000004749745131f, %26
-    %28:f32 = add %18, %27
-    store_vector_element %14, 1u, %28
-    %29:u32 = load %index
-    %30:ptr<storage, vec4<f32>, read_write> = access %lightsBuffer, 0u, %29, 0u
-    %31:f32 = load_vector_element %30, 1u
-    %32:ptr<uniform, vec4<f32>, read> = access %uniforms, 0u
-    %33:f32 = load_vector_element %32, 1u
-    %34:bool = lt %31, %33
-    if %34 [t: %b4] {  # if_2
-      %b4 = block {  # true
-        %35:u32 = load %index
-        %36:ptr<storage, vec4<f32>, read_write> = access %lightsBuffer, 0u, %35, 0u
-        %37:ptr<uniform, vec4<f32>, read> = access %uniforms, 1u
-        %38:f32 = load_vector_element %37, 1u
-        store_vector_element %36, 1u, %38
+    %23:f32 = let %22
+    %24:u32 = load %index
+    %25:f32 = convert %24
+    %26:f32 = div %25, 64.0f
+    %27:f32 = floor %26
+    %28:f32 = mul 64.0f, %27
+    %29:f32 = sub %23, %28
+    %30:f32 = mul 0.00100000004749745131f, %29
+    %31:f32 = add %20, %30
+    store_vector_element %15, 1u, %31
+    %32:u32 = load %index
+    %33:ptr<storage, vec4<f32>, read_write> = access %lightsBuffer, 0u, %32, 0u
+    %34:f32 = load_vector_element %33, 1u
+    %35:ptr<uniform, vec4<f32>, read> = access %uniforms, 0u
+    %36:f32 = load_vector_element %35, 1u
+    %37:bool = lt %34, %36
+    if %37 [t: $B4] {  # if_2
+      $B4: {  # true
+        %38:u32 = load %index
+        %39:ptr<storage, vec4<f32>, read_write> = access %lightsBuffer, 0u, %38, 0u
+        %40:ptr<uniform, vec4<f32>, read> = access %uniforms, 1u
+        %41:f32 = load_vector_element %40, 1u
+        store_vector_element %39, 1u, %41
         exit_if  # if_2
       }
     }
-    %39:ptr<uniform, mat4x4<f32>, read> = access %uniforms, 3u
-    %40:mat4x4<f32> = load %39
-    %M:ptr<function, mat4x4<f32>, read_write> = var, %40
-    %42:ptr<function, vec4<f32>, read_write> = access %M, 3i
-    %43:f32 = load_vector_element %42, 2i
-    %44:f32 = negation %43
-    %45:ptr<function, vec4<f32>, read_write> = access %M, 2i
+    %42:ptr<uniform, mat4x4<f32>, read> = access %uniforms, 3u
+    %43:mat4x4<f32> = load %42
+    %M:ptr<function, mat4x4<f32>, read_write> = var, %43
+    %45:ptr<function, vec4<f32>, read_write> = access %M, 3i
     %46:f32 = load_vector_element %45, 2i
-    %47:f32 = add -1.0f, %46
-    %48:f32 = div %44, %47
-    %viewNear:ptr<function, f32, read_write> = var, %48
-    %50:ptr<function, vec4<f32>, read_write> = access %M, 3i
-    %51:f32 = load_vector_element %50, 2i
-    %52:f32 = negation %51
-    %53:ptr<function, vec4<f32>, read_write> = access %M, 2i
+    %47:f32 = negation %46
+    %48:ptr<function, vec4<f32>, read_write> = access %M, 2i
+    %49:f32 = load_vector_element %48, 2i
+    %50:f32 = add -1.0f, %49
+    %51:f32 = div %47, %50
+    %viewNear:ptr<function, f32, read_write> = var, %51
+    %53:ptr<function, vec4<f32>, read_write> = access %M, 3i
     %54:f32 = load_vector_element %53, 2i
-    %55:f32 = add 1.0f, %54
-    %56:f32 = div %52, %55
-    %viewFar:ptr<function, f32, read_write> = var, %56
-    %58:u32 = load %index
-    %59:ptr<storage, vec4<f32>, read_write> = access %lightsBuffer, 0u, %58, 0u
-    %60:vec4<f32> = load %59
-    %lightPos:ptr<function, vec4<f32>, read_write> = var, %60
-    %62:ptr<uniform, mat4x4<f32>, read> = access %uniforms, 2u
-    %63:mat4x4<f32> = load %62
-    %64:vec4<f32> = load %lightPos
-    %65:vec4<f32> = mul %63, %64
-    store %lightPos, %65
-    %66:vec4<f32> = load %lightPos
-    %67:f32 = load_vector_element %lightPos, 3u
-    %68:vec4<f32> = div %66, %67
+    %55:f32 = negation %54
+    %56:ptr<function, vec4<f32>, read_write> = access %M, 2i
+    %57:f32 = load_vector_element %56, 2i
+    %58:f32 = add 1.0f, %57
+    %59:f32 = div %55, %58
+    %viewFar:ptr<function, f32, read_write> = var, %59
+    %61:u32 = load %index
+    %62:ptr<storage, vec4<f32>, read_write> = access %lightsBuffer, 0u, %61, 0u
+    %63:vec4<f32> = load %62
+    %lightPos:ptr<function, vec4<f32>, read_write> = var, %63
+    %65:ptr<uniform, mat4x4<f32>, read> = access %uniforms, 2u
+    %66:mat4x4<f32> = load %65
+    %67:vec4<f32> = load %lightPos
+    %68:vec4<f32> = mul %66, %67
     store %lightPos, %68
-    %69:u32 = load %index
-    %70:ptr<storage, f32, read_write> = access %lightsBuffer, 0u, %69, 2u
-    %71:f32 = load %70
-    %lightRadius:ptr<function, f32, read_write> = var, %71
-    %73:vec4<f32> = load %lightPos
-    %74:f32 = load %lightRadius
-    %75:vec3<f32> = construct %74
-    %76:vec4<f32> = construct %75, 0.0f
-    %77:vec4<f32> = sub %73, %76
-    %boxMin:ptr<function, vec4<f32>, read_write> = var, %77
-    %79:vec4<f32> = load %lightPos
-    %80:f32 = load %lightRadius
-    %81:vec3<f32> = construct %80
-    %82:vec4<f32> = construct %81, 0.0f
-    %83:vec4<f32> = add %79, %82
-    %boxMax:ptr<function, vec4<f32>, read_write> = var, %83
+    %69:vec4<f32> = load %lightPos
+    %70:f32 = load_vector_element %lightPos, 3u
+    %71:vec4<f32> = div %69, %70
+    store %lightPos, %71
+    %72:u32 = load %index
+    %73:ptr<storage, f32, read_write> = access %lightsBuffer, 0u, %72, 2u
+    %74:f32 = load %73
+    %lightRadius:ptr<function, f32, read_write> = var, %74
+    %76:vec4<f32> = load %lightPos
+    %77:vec4<f32> = let %76
+    %78:f32 = load %lightRadius
+    %79:vec3<f32> = construct %78
+    %80:vec4<f32> = construct %79, 0.0f
+    %81:vec4<f32> = sub %77, %80
+    %boxMin:ptr<function, vec4<f32>, read_write> = var, %81
+    %83:vec4<f32> = load %lightPos
+    %84:vec4<f32> = let %83
+    %85:f32 = load %lightRadius
+    %86:vec3<f32> = construct %85
+    %87:vec4<f32> = construct %86, 0.0f
+    %88:vec4<f32> = add %84, %87
+    %boxMax:ptr<function, vec4<f32>, read_write> = var, %88
     %frustumPlanes:ptr<function, array<vec4<f32>, 6>, read_write> = var
-    %86:ptr<function, vec4<f32>, read_write> = access %frustumPlanes, 4i
-    %87:f32 = load %viewNear
-    %88:vec4<f32> = construct 0.0f, 0.0f, -1.0f, %87
-    store %86, %88
-    %89:ptr<function, vec4<f32>, read_write> = access %frustumPlanes, 5i
-    %90:f32 = load %viewFar
-    %91:f32 = negation %90
-    %92:vec4<f32> = construct 0.0f, 0.0f, 1.0f, %91
-    store %89, %92
+    %91:ptr<function, vec4<f32>, read_write> = access %frustumPlanes, 4i
+    %92:f32 = load %viewNear
+    %93:vec4<f32> = construct 0.0f, 0.0f, -1.0f, %92
+    store %91, %93
+    %94:ptr<function, vec4<f32>, read_write> = access %frustumPlanes, 5i
+    %95:f32 = load %viewFar
+    %96:f32 = negation %95
+    %97:vec4<f32> = construct 0.0f, 0.0f, 1.0f, %96
+    store %94, %97
     %TILE_SIZE:i32 = let 16i
     %TILE_COUNT_X:i32 = let 2i
     %TILE_COUNT_Y:i32 = let 2i
-    loop [i: %b5, b: %b6, c: %b7] {  # loop_1
-      %b5 = block {  # initializer
+    loop [i: $B5, b: $B6, c: $B7] {  # loop_1
+      $B5: {  # initializer
         %y:ptr<function, i32, read_write> = var, 0i
-        next_iteration %b6
+        next_iteration  # -> $B6
       }
-      %b6 = block {  # body
-        %97:i32 = load %y
-        %98:bool = lt %97, %TILE_COUNT_Y
-        if %98 [t: %b8, f: %b9] {  # if_3
-          %b8 = block {  # true
+      $B6: {  # body
+        %102:i32 = load %y
+        %103:bool = lt %102, %TILE_COUNT_Y
+        if %103 [t: $B8, f: $B9] {  # if_3
+          $B8: {  # true
             exit_if  # if_3
           }
-          %b9 = block {  # false
+          $B9: {  # false
             exit_loop  # loop_1
           }
         }
-        loop [i: %b10, b: %b11, c: %b12] {  # loop_2
-          %b10 = block {  # initializer
+        loop [i: $B10, b: $B11, c: $B12] {  # loop_2
+          $B10: {  # initializer
             %x:ptr<function, i32, read_write> = var, 0i
-            next_iteration %b11
+            next_iteration  # -> $B11
           }
-          %b11 = block {  # body
-            %100:i32 = load %x
-            %101:bool = lt %100, %TILE_COUNT_X
-            if %101 [t: %b13, f: %b14] {  # if_4
-              %b13 = block {  # true
+          $B11: {  # body
+            %105:i32 = load %x
+            %106:bool = lt %105, %TILE_COUNT_X
+            if %106 [t: $B13, f: $B14] {  # if_4
+              $B13: {  # true
                 exit_if  # if_4
               }
-              %b14 = block {  # false
+              $B14: {  # false
                 exit_loop  # loop_2
               }
             }
-            %102:i32 = load %x
-            %103:i32 = mul %102, %TILE_SIZE
-            %104:i32 = load %y
-            %105:i32 = mul %104, %TILE_SIZE
-            %106:vec2<i32> = construct %103, %105
-            %tilePixel0Idx:ptr<function, vec2<i32>, read_write> = var, %106
-            %108:vec2<i32> = load %tilePixel0Idx
-            %109:vec2<f32> = convert %108
-            %110:vec2<f32> = mul 2.0f, %109
-            %111:ptr<uniform, vec4<f32>, read> = access %uniforms, 4u
-            %112:vec4<f32> = load %111
-            %113:vec2<f32> = swizzle %112, xy
-            %114:vec2<f32> = div %110, %113
-            %115:vec2<f32> = sub %114, vec2<f32>(1.0f)
-            %floorCoord:ptr<function, vec2<f32>, read_write> = var, %115
-            %117:vec2<i32> = load %tilePixel0Idx
-            %118:vec2<i32> = construct %TILE_SIZE
-            %119:vec2<i32> = add %117, %118
-            %120:vec2<f32> = convert %119
-            %121:vec2<f32> = mul 2.0f, %120
-            %122:ptr<uniform, vec4<f32>, read> = access %uniforms, 4u
-            %123:vec4<f32> = load %122
-            %124:vec2<f32> = swizzle %123, xy
-            %125:vec2<f32> = div %121, %124
-            %126:vec2<f32> = sub %125, vec2<f32>(1.0f)
-            %ceilCoord:ptr<function, vec2<f32>, read_write> = var, %126
-            %128:f32 = load %viewNear
-            %129:f32 = negation %128
-            %130:f32 = load_vector_element %floorCoord, 0u
-            %131:f32 = mul %129, %130
-            %132:ptr<function, vec4<f32>, read_write> = access %M, 2i
-            %133:f32 = load_vector_element %132, 0i
+            %107:i32 = load %x
+            %108:i32 = mul %107, %TILE_SIZE
+            %109:i32 = load %y
+            %110:i32 = mul %109, %TILE_SIZE
+            %111:vec2<i32> = construct %108, %110
+            %tilePixel0Idx:ptr<function, vec2<i32>, read_write> = var, %111
+            %113:vec2<i32> = load %tilePixel0Idx
+            %114:vec2<f32> = convert %113
+            %115:vec2<f32> = mul 2.0f, %114
+            %116:ptr<uniform, vec4<f32>, read> = access %uniforms, 4u
+            %117:vec4<f32> = load %116
+            %118:vec2<f32> = swizzle %117, xy
+            %119:vec2<f32> = div %115, %118
+            %120:vec2<f32> = sub %119, vec2<f32>(1.0f)
+            %floorCoord:ptr<function, vec2<f32>, read_write> = var, %120
+            %122:vec2<i32> = load %tilePixel0Idx
+            %123:vec2<i32> = let %122
+            %124:vec2<i32> = construct %TILE_SIZE
+            %125:vec2<i32> = add %123, %124
+            %126:vec2<f32> = convert %125
+            %127:vec2<f32> = mul 2.0f, %126
+            %128:ptr<uniform, vec4<f32>, read> = access %uniforms, 4u
+            %129:vec4<f32> = load %128
+            %130:vec2<f32> = swizzle %129, xy
+            %131:vec2<f32> = div %127, %130
+            %132:vec2<f32> = sub %131, vec2<f32>(1.0f)
+            %ceilCoord:ptr<function, vec2<f32>, read_write> = var, %132
             %134:f32 = load %viewNear
-            %135:f32 = mul %133, %134
-            %136:f32 = sub %131, %135
-            %137:ptr<function, vec4<f32>, read_write> = access %M, 0i
-            %138:f32 = load_vector_element %137, 0i
-            %139:f32 = div %136, %138
+            %135:f32 = negation %134
+            %136:f32 = load_vector_element %floorCoord, 0u
+            %137:f32 = mul %135, %136
+            %138:ptr<function, vec4<f32>, read_write> = access %M, 2i
+            %139:f32 = load_vector_element %138, 0i
             %140:f32 = load %viewNear
-            %141:f32 = negation %140
-            %142:f32 = load_vector_element %floorCoord, 1u
-            %143:f32 = mul %141, %142
-            %144:ptr<function, vec4<f32>, read_write> = access %M, 2i
-            %145:f32 = load_vector_element %144, 1i
+            %141:f32 = mul %139, %140
+            %142:f32 = sub %137, %141
+            %143:ptr<function, vec4<f32>, read_write> = access %M, 0i
+            %144:f32 = load_vector_element %143, 0i
+            %145:f32 = div %142, %144
             %146:f32 = load %viewNear
-            %147:f32 = mul %145, %146
-            %148:f32 = sub %143, %147
-            %149:ptr<function, vec4<f32>, read_write> = access %M, 1i
-            %150:f32 = load_vector_element %149, 1i
-            %151:f32 = div %148, %150
-            %152:vec2<f32> = construct %139, %151
-            %viewFloorCoord:ptr<function, vec2<f32>, read_write> = var, %152
-            %154:f32 = load %viewNear
-            %155:f32 = negation %154
-            %156:f32 = load_vector_element %ceilCoord, 0u
-            %157:f32 = mul %155, %156
-            %158:ptr<function, vec4<f32>, read_write> = access %M, 2i
-            %159:f32 = load_vector_element %158, 0i
+            %147:f32 = negation %146
+            %148:f32 = load_vector_element %floorCoord, 1u
+            %149:f32 = mul %147, %148
+            %150:ptr<function, vec4<f32>, read_write> = access %M, 2i
+            %151:f32 = load_vector_element %150, 1i
+            %152:f32 = load %viewNear
+            %153:f32 = mul %151, %152
+            %154:f32 = sub %149, %153
+            %155:ptr<function, vec4<f32>, read_write> = access %M, 1i
+            %156:f32 = load_vector_element %155, 1i
+            %157:f32 = div %154, %156
+            %158:vec2<f32> = construct %145, %157
+            %viewFloorCoord:ptr<function, vec2<f32>, read_write> = var, %158
             %160:f32 = load %viewNear
-            %161:f32 = mul %159, %160
-            %162:f32 = sub %157, %161
-            %163:ptr<function, vec4<f32>, read_write> = access %M, 0i
-            %164:f32 = load_vector_element %163, 0i
-            %165:f32 = div %162, %164
+            %161:f32 = negation %160
+            %162:f32 = load_vector_element %ceilCoord, 0u
+            %163:f32 = mul %161, %162
+            %164:ptr<function, vec4<f32>, read_write> = access %M, 2i
+            %165:f32 = load_vector_element %164, 0i
             %166:f32 = load %viewNear
-            %167:f32 = negation %166
-            %168:f32 = load_vector_element %ceilCoord, 1u
-            %169:f32 = mul %167, %168
-            %170:ptr<function, vec4<f32>, read_write> = access %M, 2i
-            %171:f32 = load_vector_element %170, 1i
+            %167:f32 = mul %165, %166
+            %168:f32 = sub %163, %167
+            %169:ptr<function, vec4<f32>, read_write> = access %M, 0i
+            %170:f32 = load_vector_element %169, 0i
+            %171:f32 = div %168, %170
             %172:f32 = load %viewNear
-            %173:f32 = mul %171, %172
-            %174:f32 = sub %169, %173
-            %175:ptr<function, vec4<f32>, read_write> = access %M, 1i
-            %176:f32 = load_vector_element %175, 1i
-            %177:f32 = div %174, %176
-            %178:vec2<f32> = construct %165, %177
-            %viewCeilCoord:ptr<function, vec2<f32>, read_write> = var, %178
-            %180:ptr<function, vec4<f32>, read_write> = access %frustumPlanes, 0i
-            %181:f32 = load_vector_element %viewFloorCoord, 0u
-            %182:f32 = negation %181
-            %183:f32 = load %viewNear
-            %184:f32 = div %182, %183
-            %185:vec4<f32> = construct 1.0f, 0.0f, %184, 0.0f
-            store %180, %185
-            %186:ptr<function, vec4<f32>, read_write> = access %frustumPlanes, 1i
-            %187:f32 = load_vector_element %viewCeilCoord, 0u
-            %188:f32 = load %viewNear
-            %189:f32 = div %187, %188
-            %190:vec4<f32> = construct -1.0f, 0.0f, %189, 0.0f
-            store %186, %190
-            %191:ptr<function, vec4<f32>, read_write> = access %frustumPlanes, 2i
-            %192:f32 = load_vector_element %viewFloorCoord, 1u
-            %193:f32 = negation %192
+            %173:f32 = negation %172
+            %174:f32 = load_vector_element %ceilCoord, 1u
+            %175:f32 = mul %173, %174
+            %176:ptr<function, vec4<f32>, read_write> = access %M, 2i
+            %177:f32 = load_vector_element %176, 1i
+            %178:f32 = load %viewNear
+            %179:f32 = mul %177, %178
+            %180:f32 = sub %175, %179
+            %181:ptr<function, vec4<f32>, read_write> = access %M, 1i
+            %182:f32 = load_vector_element %181, 1i
+            %183:f32 = div %180, %182
+            %184:vec2<f32> = construct %171, %183
+            %viewCeilCoord:ptr<function, vec2<f32>, read_write> = var, %184
+            %186:ptr<function, vec4<f32>, read_write> = access %frustumPlanes, 0i
+            %187:f32 = load_vector_element %viewFloorCoord, 0u
+            %188:f32 = negation %187
+            %189:f32 = load %viewNear
+            %190:f32 = div %188, %189
+            %191:vec4<f32> = construct 1.0f, 0.0f, %190, 0.0f
+            store %186, %191
+            %192:ptr<function, vec4<f32>, read_write> = access %frustumPlanes, 1i
+            %193:f32 = load_vector_element %viewCeilCoord, 0u
             %194:f32 = load %viewNear
             %195:f32 = div %193, %194
-            %196:vec4<f32> = construct 0.0f, 1.0f, %195, 0.0f
-            store %191, %196
-            %197:ptr<function, vec4<f32>, read_write> = access %frustumPlanes, 3i
-            %198:f32 = load_vector_element %viewCeilCoord, 1u
-            %199:f32 = load %viewNear
-            %200:f32 = div %198, %199
-            %201:vec4<f32> = construct 0.0f, -1.0f, %200, 0.0f
-            store %197, %201
+            %196:vec4<f32> = construct -1.0f, 0.0f, %195, 0.0f
+            store %192, %196
+            %197:ptr<function, vec4<f32>, read_write> = access %frustumPlanes, 2i
+            %198:f32 = load_vector_element %viewFloorCoord, 1u
+            %199:f32 = negation %198
+            %200:f32 = load %viewNear
+            %201:f32 = div %199, %200
+            %202:vec4<f32> = construct 0.0f, 1.0f, %201, 0.0f
+            store %197, %202
+            %203:ptr<function, vec4<f32>, read_write> = access %frustumPlanes, 3i
+            %204:f32 = load_vector_element %viewCeilCoord, 1u
+            %205:f32 = load %viewNear
+            %206:f32 = div %204, %205
+            %207:vec4<f32> = construct 0.0f, -1.0f, %206, 0.0f
+            store %203, %207
             %dp:ptr<function, f32, read_write> = var, 0.0f
-            loop [i: %b15, b: %b16, c: %b17] {  # loop_3
-              %b15 = block {  # initializer
+            loop [i: $B15, b: $B16, c: $B17] {  # loop_3
+              $B15: {  # initializer
                 %i:ptr<function, u32, read_write> = var, 0u
-                next_iteration %b16
+                next_iteration  # -> $B16
               }
-              %b16 = block {  # body
-                %204:u32 = load %i
-                %205:bool = lt %204, 6u
-                if %205 [t: %b18, f: %b19] {  # if_5
-                  %b18 = block {  # true
+              $B16: {  # body
+                %210:u32 = load %i
+                %211:bool = lt %210, 6u
+                if %211 [t: $B18, f: $B19] {  # if_5
+                  $B18: {  # true
                     exit_if  # if_5
                   }
-                  %b19 = block {  # false
+                  $B19: {  # false
                     exit_loop  # loop_3
                   }
                 }
                 %p:ptr<function, vec4<f32>, read_write> = var
-                %207:u32 = load %i
-                %208:ptr<function, vec4<f32>, read_write> = access %frustumPlanes, %207
-                %209:f32 = load_vector_element %208, 0u
-                %210:bool = gt %209, 0.0f
-                if %210 [t: %b20, f: %b21] {  # if_6
-                  %b20 = block {  # true
-                    %211:f32 = load_vector_element %boxMax, 0u
-                    store_vector_element %p, 0u, %211
-                    exit_if  # if_6
-                  }
-                  %b21 = block {  # false
-                    %212:f32 = load_vector_element %boxMin, 0u
-                    store_vector_element %p, 0u, %212
-                    exit_if  # if_6
-                  }
-                }
                 %213:u32 = load %i
                 %214:ptr<function, vec4<f32>, read_write> = access %frustumPlanes, %213
-                %215:f32 = load_vector_element %214, 1u
+                %215:f32 = load_vector_element %214, 0u
                 %216:bool = gt %215, 0.0f
-                if %216 [t: %b22, f: %b23] {  # if_7
-                  %b22 = block {  # true
-                    %217:f32 = load_vector_element %boxMax, 1u
-                    store_vector_element %p, 1u, %217
-                    exit_if  # if_7
+                if %216 [t: $B20, f: $B21] {  # if_6
+                  $B20: {  # true
+                    %217:f32 = load_vector_element %boxMax, 0u
+                    store_vector_element %p, 0u, %217
+                    exit_if  # if_6
                   }
-                  %b23 = block {  # false
-                    %218:f32 = load_vector_element %boxMin, 1u
-                    store_vector_element %p, 1u, %218
-                    exit_if  # if_7
+                  $B21: {  # false
+                    %218:f32 = load_vector_element %boxMin, 0u
+                    store_vector_element %p, 0u, %218
+                    exit_if  # if_6
                   }
                 }
                 %219:u32 = load %i
                 %220:ptr<function, vec4<f32>, read_write> = access %frustumPlanes, %219
-                %221:f32 = load_vector_element %220, 2u
+                %221:f32 = load_vector_element %220, 1u
                 %222:bool = gt %221, 0.0f
-                if %222 [t: %b24, f: %b25] {  # if_8
-                  %b24 = block {  # true
-                    %223:f32 = load_vector_element %boxMax, 2u
-                    store_vector_element %p, 2u, %223
+                if %222 [t: $B22, f: $B23] {  # if_7
+                  $B22: {  # true
+                    %223:f32 = load_vector_element %boxMax, 1u
+                    store_vector_element %p, 1u, %223
+                    exit_if  # if_7
+                  }
+                  $B23: {  # false
+                    %224:f32 = load_vector_element %boxMin, 1u
+                    store_vector_element %p, 1u, %224
+                    exit_if  # if_7
+                  }
+                }
+                %225:u32 = load %i
+                %226:ptr<function, vec4<f32>, read_write> = access %frustumPlanes, %225
+                %227:f32 = load_vector_element %226, 2u
+                %228:bool = gt %227, 0.0f
+                if %228 [t: $B24, f: $B25] {  # if_8
+                  $B24: {  # true
+                    %229:f32 = load_vector_element %boxMax, 2u
+                    store_vector_element %p, 2u, %229
                     exit_if  # if_8
                   }
-                  %b25 = block {  # false
-                    %224:f32 = load_vector_element %boxMin, 2u
-                    store_vector_element %p, 2u, %224
+                  $B25: {  # false
+                    %230:f32 = load_vector_element %boxMin, 2u
+                    store_vector_element %p, 2u, %230
                     exit_if  # if_8
                   }
                 }
                 store_vector_element %p, 3u, 1.0f
-                %225:f32 = load %dp
-                %226:vec4<f32> = load %p
-                %227:u32 = load %i
-                %228:ptr<function, vec4<f32>, read_write> = access %frustumPlanes, %227
-                %229:vec4<f32> = load %228
-                %230:f32 = dot %226, %229
-                %231:f32 = min 0.0f, %230
-                %232:f32 = add %225, %231
-                store %dp, %232
-                continue %b17
+                %231:f32 = load %dp
+                %232:f32 = let %231
+                %233:vec4<f32> = load %p
+                %234:u32 = load %i
+                %235:ptr<function, vec4<f32>, read_write> = access %frustumPlanes, %234
+                %236:vec4<f32> = load %235
+                %237:f32 = dot %233, %236
+                %238:f32 = min 0.0f, %237
+                %239:f32 = add %232, %238
+                store %dp, %239
+                continue  # -> $B17
               }
-              %b17 = block {  # continuing
-                %233:u32 = load %i
-                %234:u32 = add %233, 1u
-                store %i, %234
-                next_iteration %b16
+              $B17: {  # continuing
+                %240:u32 = load %i
+                %241:u32 = add %240, 1u
+                store %i, %241
+                next_iteration  # -> $B16
               }
             }
-            %235:f32 = load %dp
-            %236:bool = gte %235, 0.0f
-            if %236 [t: %b26] {  # if_9
-              %b26 = block {  # true
-                %237:i32 = load %x
-                %238:i32 = load %y
-                %239:i32 = mul %238, %TILE_COUNT_X
-                %240:i32 = add %237, %239
-                %241:u32 = convert %240
-                %tileId:ptr<function, u32, read_write> = var, %241
-                %243:u32 = load %tileId
-                %244:bool = lt %243, 0u
-                %245:bool = if %244 [t: %b27, f: %b28] {  # if_10
-                  %b27 = block {  # true
+            %242:f32 = load %dp
+            %243:bool = gte %242, 0.0f
+            if %243 [t: $B26] {  # if_9
+              $B26: {  # true
+                %244:i32 = load %x
+                %245:i32 = load %y
+                %246:i32 = mul %245, %TILE_COUNT_X
+                %247:i32 = add %244, %246
+                %248:u32 = convert %247
+                %tileId:ptr<function, u32, read_write> = var, %248
+                %250:u32 = load %tileId
+                %251:bool = lt %250, 0u
+                %252:bool = if %251 [t: $B27, f: $B28] {  # if_10
+                  $B27: {  # true
                     exit_if true  # if_10
                   }
-                  %b28 = block {  # false
-                    %246:u32 = load %tileId
-                    %247:ptr<uniform, u32, read> = access %config, 1u
-                    %248:u32 = load %247
-                    %249:bool = gte %246, %248
-                    exit_if %249  # if_10
+                  $B28: {  # false
+                    %253:u32 = load %tileId
+                    %254:ptr<uniform, u32, read> = access %config, 1u
+                    %255:u32 = load %254
+                    %256:bool = gte %253, %255
+                    exit_if %256  # if_10
                   }
                 }
-                if %245 [t: %b29] {  # if_11
-                  %b29 = block {  # true
-                    continue %b12
+                if %252 [t: $B29] {  # if_11
+                  $B29: {  # true
+                    continue  # -> $B12
                   }
                 }
-                %250:u32 = load %tileId
-                %251:ptr<storage, atomic<u32>, read_write> = access %tileLightId, 0u, %250, 0u
-                %252:u32 = atomicAdd %251, 1u
-                %offset:ptr<function, u32, read_write> = var, %252
-                %254:u32 = load %offset
-                %255:ptr<uniform, u32, read> = access %config, 4u
-                %256:u32 = load %255
-                %257:bool = gte %254, %256
-                if %257 [t: %b30] {  # if_12
-                  %b30 = block {  # true
-                    continue %b12
+                %257:u32 = load %tileId
+                %258:ptr<storage, atomic<u32>, read_write> = access %tileLightId, 0u, %257, 0u
+                %259:u32 = atomicAdd %258, 1u
+                %offset:ptr<function, u32, read_write> = var, %259
+                %261:u32 = load %offset
+                %262:ptr<uniform, u32, read> = access %config, 4u
+                %263:u32 = load %262
+                %264:bool = gte %261, %263
+                if %264 [t: $B30] {  # if_12
+                  $B30: {  # true
+                    continue  # -> $B12
                   }
                 }
-                %258:u32 = load %tileId
-                %259:u32 = load %offset
-                %260:ptr<storage, u32, read_write> = access %tileLightId, 0u, %258, 1u, %259
-                %261:u32 = access %GlobalInvocationID, 0u
-                store %260, %261
+                %265:u32 = load %tileId
+                %266:u32 = load %offset
+                %267:ptr<storage, u32, read_write> = access %tileLightId, 0u, %265, 1u, %266
+                %268:u32 = access %GlobalInvocationID, 0u
+                store %267, %268
                 exit_if  # if_9
               }
             }
-            continue %b12
+            continue  # -> $B12
           }
-          %b12 = block {  # continuing
-            %262:i32 = load %x
-            %263:i32 = add %262, 1i
-            store %x, %263
-            next_iteration %b11
+          $B12: {  # continuing
+            %269:i32 = load %x
+            %270:i32 = add %269, 1i
+            store %x, %270
+            next_iteration  # -> $B11
           }
         }
-        continue %b7
+        continue  # -> $B7
       }
-      %b7 = block {  # continuing
-        %264:i32 = load %y
-        %265:i32 = add %264, 1i
-        store %y, %265
-        next_iteration %b6
+      $B7: {  # continuing
+        %271:i32 = load %y
+        %272:i32 = add %271, 1i
+        store %y, %272
+        next_iteration  # -> $B6
       }
     }
     ret
diff --git a/test/tint/bug/tint/1136.wgsl.expected.ir.msl b/test/tint/bug/tint/1136.wgsl.expected.ir.msl
index 42c020c..27aafe7 100644
--- a/test/tint/bug/tint/1136.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/1136.wgsl.expected.ir.msl
@@ -1,15 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Buffer = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Buffer = struct @align(4) {
   data:u32 @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %tint_symbol:ptr<storage, Buffer, read_write> = var @binding_point(0, 0)
 }
 
-%tint_symbol_1 = func():void -> %b2 {
-  %b2 = block {
+%tint_symbol_1 = func():void {
+  $B2: {
     %3:ptr<storage, u32, read_write> = access %tint_symbol, 0u
     %4:ptr<storage, u32, read_write> = access %tint_symbol, 0u
     %5:u32 = load %4
diff --git a/test/tint/bug/tint/1183.wgsl.expected.ir.msl b/test/tint/bug/tint/1183.wgsl.expected.ir.msl
index b38060a..3543919 100644
--- a/test/tint/bug/tint/1183.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/1183.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSample
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/bug/tint/1321.wgsl.expected.ir.msl b/test/tint/bug/tint/1321.wgsl.expected.ir.msl
index cdbf128..3304981 100644
--- a/test/tint/bug/tint/1321.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/1321.wgsl.expected.ir.msl
@@ -1,9 +1,37 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#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];
+};
+
+
+int foo() {
+  return 1;
+}
+fragment void tint_symbol() {
+  tint_array<float, 4> arr = tint_array<float, 4>{};
+  {
+    thread float* const a = arr[foo()];
+    while(true) {
+      float const x = a;
+      break;
+    }
+  }
+}
+program_source:22:25: error: cannot initialize a variable of type 'float *const' with an lvalue of type 'float'
+    thread float* const a = arr[foo()];
+                        ^   ~~~~~~~~~~
+program_source:24:19: error: cannot initialize a variable of type 'const float' with an lvalue of type 'float *const'
+      float const x = a;
+                  ^   ~
+
diff --git a/test/tint/bug/tint/1332.wgsl.expected.ir.msl b/test/tint/bug/tint/1332.wgsl.expected.ir.msl
index b38060a..bbc0093 100644
--- a/test/tint/bug/tint/1332.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/1332.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: max
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/bug/tint/1369.wgsl.expected.ir.msl b/test/tint/bug/tint/1369.wgsl.expected.ir.msl
index 632584a..9934540 100644
--- a/test/tint/bug/tint/1369.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/1369.wgsl.expected.ir.msl
@@ -1,11 +1,27 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
+thread bool continue_execution = true;
 bool call_discard() {
-  discard_fragment();
+  continue_execution = false;
   return true;
 }
 fragment void f() {
   bool v = call_discard();
   bool also_unreachable = false;
+  if (!(continue_execution)) {
+    discard_fragment();
+  }
 }
+program_source:4:13: error: program scope variable must reside in constant address space
+thread bool continue_execution = true;
+            ^
+program_source:10:8: warning: unused variable 'v' [-Wunused-variable]
+  bool v = call_discard();
+       ^
+program_source:11:8: warning: unused variable 'also_unreachable' [-Wunused-variable]
+  bool also_unreachable = false;
+       ^
+
diff --git a/test/tint/bug/tint/1385.wgsl.expected.ir.msl b/test/tint/bug/tint/1385.wgsl.expected.ir.msl
index c6ead5f..4eab5b4 100644
--- a/test/tint/bug/tint/1385.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/1385.wgsl.expected.ir.msl
@@ -1,18 +1,18 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %data:ptr<storage, array<i32>, read> = var @binding_point(0, 1)
 }
 
-%foo = func():i32 -> %b2 {
-  %b2 = block {
+%foo = func():i32 {
+  $B2: {
     %3:ptr<storage, i32, read> = access %data, 0i
     %4:i32 = load %3
     ret %4
   }
 }
-%tint_symbol = @compute @workgroup_size(16, 16, 1) func():void -> %b3 {
-  %b3 = block {
+%tint_symbol = @compute @workgroup_size(16, 16, 1) func():void {
+  $B3: {
     %6:i32 = call %foo
     ret
   }
diff --git a/test/tint/bug/tint/1474-b.wgsl.expected.ir.msl b/test/tint/bug/tint/1474-b.wgsl.expected.ir.msl
index a0cd356..fe06cb7 100644
--- a/test/tint/bug/tint/1474-b.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/1474-b.wgsl.expected.ir.msl
@@ -4,12 +4,12 @@
     let non_uniform_cond = non_uniform_value == 0;
     ^^^^^^^^^^^^^^^^^^^^
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %non_uniform_value:ptr<storage, i32, read_write> = var @binding_point(0, 0)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     ret
   }
 }
diff --git a/test/tint/bug/tint/1509.wgsl.expected.ir.msl b/test/tint/bug/tint/1509.wgsl.expected.ir.msl
index efdd3b1..74d387f 100644
--- a/test/tint/bug/tint/1509.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/1509.wgsl.expected.ir.msl
@@ -1,9 +1,5013 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint v0 = 0u;
+thread uint v1 = 0u;
+thread uint v2 = 0u;
+thread uint v3 = 0u;
+thread uint v4 = 0u;
+thread uint v5 = 0u;
+thread uint v6 = 0u;
+thread uint v7 = 0u;
+thread uint v8 = 0u;
+thread uint v9 = 0u;
+thread uint v10 = 0u;
+thread uint v11 = 0u;
+thread uint v12 = 0u;
+thread uint v13 = 0u;
+thread uint v14 = 0u;
+thread uint v15 = 0u;
+thread uint v16 = 0u;
+thread uint v17 = 0u;
+thread uint v18 = 0u;
+thread uint v19 = 0u;
+thread uint v20 = 0u;
+thread uint v21 = 0u;
+thread uint v22 = 0u;
+thread uint v23 = 0u;
+thread uint v24 = 0u;
+thread uint v25 = 0u;
+thread uint v26 = 0u;
+thread uint v27 = 0u;
+thread uint v28 = 0u;
+thread uint v29 = 0u;
+thread uint v30 = 0u;
+thread uint v31 = 0u;
+thread uint v32 = 0u;
+thread uint v33 = 0u;
+thread uint v34 = 0u;
+thread uint v35 = 0u;
+thread uint v36 = 0u;
+thread uint v37 = 0u;
+thread uint v38 = 0u;
+thread uint v39 = 0u;
+thread uint v40 = 0u;
+thread uint v41 = 0u;
+thread uint v42 = 0u;
+thread uint v43 = 0u;
+thread uint v44 = 0u;
+thread uint v45 = 0u;
+thread uint v46 = 0u;
+thread uint v47 = 0u;
+thread uint v48 = 0u;
+thread uint v49 = 0u;
+thread uint v50 = 0u;
+thread uint v51 = 0u;
+thread uint v52 = 0u;
+thread uint v53 = 0u;
+thread uint v54 = 0u;
+thread uint v55 = 0u;
+thread uint v56 = 0u;
+thread uint v57 = 0u;
+thread uint v58 = 0u;
+thread uint v59 = 0u;
+thread uint v60 = 0u;
+thread uint v61 = 0u;
+thread uint v62 = 0u;
+thread uint v63 = 0u;
+thread uint v64 = 0u;
+thread uint v65 = 0u;
+thread uint v66 = 0u;
+thread uint v67 = 0u;
+thread uint v68 = 0u;
+thread uint v69 = 0u;
+thread uint v70 = 0u;
+thread uint v71 = 0u;
+thread uint v72 = 0u;
+thread uint v73 = 0u;
+thread uint v74 = 0u;
+thread uint v75 = 0u;
+thread uint v76 = 0u;
+thread uint v77 = 0u;
+thread uint v78 = 0u;
+thread uint v79 = 0u;
+thread uint v80 = 0u;
+thread uint v81 = 0u;
+thread uint v82 = 0u;
+thread uint v83 = 0u;
+thread uint v84 = 0u;
+thread uint v85 = 0u;
+thread uint v86 = 0u;
+thread uint v87 = 0u;
+thread uint v88 = 0u;
+thread uint v89 = 0u;
+thread uint v90 = 0u;
+thread uint v91 = 0u;
+thread uint v92 = 0u;
+thread uint v93 = 0u;
+thread uint v94 = 0u;
+thread uint v95 = 0u;
+thread uint v96 = 0u;
+thread uint v97 = 0u;
+thread uint v98 = 0u;
+thread uint v99 = 0u;
+thread uint v100 = 0u;
+thread uint v101 = 0u;
+thread uint v102 = 0u;
+thread uint v103 = 0u;
+thread uint v104 = 0u;
+thread uint v105 = 0u;
+thread uint v106 = 0u;
+thread uint v107 = 0u;
+thread uint v108 = 0u;
+thread uint v109 = 0u;
+thread uint v110 = 0u;
+thread uint v111 = 0u;
+thread uint v112 = 0u;
+thread uint v113 = 0u;
+thread uint v114 = 0u;
+thread uint v115 = 0u;
+thread uint v116 = 0u;
+thread uint v117 = 0u;
+thread uint v118 = 0u;
+thread uint v119 = 0u;
+thread uint v120 = 0u;
+thread uint v121 = 0u;
+thread uint v122 = 0u;
+thread uint v123 = 0u;
+thread uint v124 = 0u;
+thread uint v125 = 0u;
+thread uint v126 = 0u;
+thread uint v127 = 0u;
+thread uint v128 = 0u;
+thread uint v129 = 0u;
+thread uint v130 = 0u;
+thread uint v131 = 0u;
+thread uint v132 = 0u;
+thread uint v133 = 0u;
+thread uint v134 = 0u;
+thread uint v135 = 0u;
+thread uint v136 = 0u;
+thread uint v137 = 0u;
+thread uint v138 = 0u;
+thread uint v139 = 0u;
+thread uint v140 = 0u;
+thread uint v141 = 0u;
+thread uint v142 = 0u;
+thread uint v143 = 0u;
+thread uint v144 = 0u;
+thread uint v145 = 0u;
+thread uint v146 = 0u;
+thread uint v147 = 0u;
+thread uint v148 = 0u;
+thread uint v149 = 0u;
+thread uint v150 = 0u;
+thread uint v151 = 0u;
+thread uint v152 = 0u;
+thread uint v153 = 0u;
+thread uint v154 = 0u;
+thread uint v155 = 0u;
+thread uint v156 = 0u;
+thread uint v157 = 0u;
+thread uint v158 = 0u;
+thread uint v159 = 0u;
+thread uint v160 = 0u;
+thread uint v161 = 0u;
+thread uint v162 = 0u;
+thread uint v163 = 0u;
+thread uint v164 = 0u;
+thread uint v165 = 0u;
+thread uint v166 = 0u;
+thread uint v167 = 0u;
+thread uint v168 = 0u;
+thread uint v169 = 0u;
+thread uint v170 = 0u;
+thread uint v171 = 0u;
+thread uint v172 = 0u;
+thread uint v173 = 0u;
+thread uint v174 = 0u;
+thread uint v175 = 0u;
+thread uint v176 = 0u;
+thread uint v177 = 0u;
+thread uint v178 = 0u;
+thread uint v179 = 0u;
+thread uint v180 = 0u;
+thread uint v181 = 0u;
+thread uint v182 = 0u;
+thread uint v183 = 0u;
+thread uint v184 = 0u;
+thread uint v185 = 0u;
+thread uint v186 = 0u;
+thread uint v187 = 0u;
+thread uint v188 = 0u;
+thread uint v189 = 0u;
+thread uint v190 = 0u;
+thread uint v191 = 0u;
+thread uint v192 = 0u;
+thread uint v193 = 0u;
+thread uint v194 = 0u;
+thread uint v195 = 0u;
+thread uint v196 = 0u;
+thread uint v197 = 0u;
+thread uint v198 = 0u;
+thread uint v199 = 0u;
+thread uint v200 = 0u;
+thread uint v201 = 0u;
+thread uint v202 = 0u;
+thread uint v203 = 0u;
+thread uint v204 = 0u;
+thread uint v205 = 0u;
+thread uint v206 = 0u;
+thread uint v207 = 0u;
+thread uint v208 = 0u;
+thread uint v209 = 0u;
+thread uint v210 = 0u;
+thread uint v211 = 0u;
+thread uint v212 = 0u;
+thread uint v213 = 0u;
+thread uint v214 = 0u;
+thread uint v215 = 0u;
+thread uint v216 = 0u;
+thread uint v217 = 0u;
+thread uint v218 = 0u;
+thread uint v219 = 0u;
+thread uint v220 = 0u;
+thread uint v221 = 0u;
+thread uint v222 = 0u;
+thread uint v223 = 0u;
+thread uint v224 = 0u;
+thread uint v225 = 0u;
+thread uint v226 = 0u;
+thread uint v227 = 0u;
+thread uint v228 = 0u;
+thread uint v229 = 0u;
+thread uint v230 = 0u;
+thread uint v231 = 0u;
+thread uint v232 = 0u;
+thread uint v233 = 0u;
+thread uint v234 = 0u;
+thread uint v235 = 0u;
+thread uint v236 = 0u;
+thread uint v237 = 0u;
+thread uint v238 = 0u;
+thread uint v239 = 0u;
+thread uint v240 = 0u;
+thread uint v241 = 0u;
+thread uint v242 = 0u;
+thread uint v243 = 0u;
+thread uint v244 = 0u;
+thread uint v245 = 0u;
+thread uint v246 = 0u;
+thread uint v247 = 0u;
+thread uint v248 = 0u;
+thread uint v249 = 0u;
+thread uint v250 = 0u;
+thread uint v251 = 0u;
+thread uint v252 = 0u;
+thread uint v253 = 0u;
+thread uint v254 = 0u;
+thread uint v255 = 0u;
+thread uint v256 = 0u;
+thread uint v257 = 0u;
+thread uint v258 = 0u;
+thread uint v259 = 0u;
+thread uint v260 = 0u;
+thread uint v261 = 0u;
+thread uint v262 = 0u;
+thread uint v263 = 0u;
+thread uint v264 = 0u;
+thread uint v265 = 0u;
+thread uint v266 = 0u;
+thread uint v267 = 0u;
+thread uint v268 = 0u;
+thread uint v269 = 0u;
+thread uint v270 = 0u;
+thread uint v271 = 0u;
+thread uint v272 = 0u;
+thread uint v273 = 0u;
+thread uint v274 = 0u;
+thread uint v275 = 0u;
+thread uint v276 = 0u;
+thread uint v277 = 0u;
+thread uint v278 = 0u;
+thread uint v279 = 0u;
+thread uint v280 = 0u;
+thread uint v281 = 0u;
+thread uint v282 = 0u;
+thread uint v283 = 0u;
+thread uint v284 = 0u;
+thread uint v285 = 0u;
+thread uint v286 = 0u;
+thread uint v287 = 0u;
+thread uint v288 = 0u;
+thread uint v289 = 0u;
+thread uint v290 = 0u;
+thread uint v291 = 0u;
+thread uint v292 = 0u;
+thread uint v293 = 0u;
+thread uint v294 = 0u;
+thread uint v295 = 0u;
+thread uint v296 = 0u;
+thread uint v297 = 0u;
+thread uint v298 = 0u;
+thread uint v299 = 0u;
+thread uint v300 = 0u;
+thread uint v301 = 0u;
+thread uint v302 = 0u;
+thread uint v303 = 0u;
+thread uint v304 = 0u;
+thread uint v305 = 0u;
+thread uint v306 = 0u;
+thread uint v307 = 0u;
+thread uint v308 = 0u;
+thread uint v309 = 0u;
+thread uint v310 = 0u;
+thread uint v311 = 0u;
+thread uint v312 = 0u;
+thread uint v313 = 0u;
+thread uint v314 = 0u;
+thread uint v315 = 0u;
+thread uint v316 = 0u;
+thread uint v317 = 0u;
+thread uint v318 = 0u;
+thread uint v319 = 0u;
+thread uint v320 = 0u;
+thread uint v321 = 0u;
+thread uint v322 = 0u;
+thread uint v323 = 0u;
+thread uint v324 = 0u;
+thread uint v325 = 0u;
+thread uint v326 = 0u;
+thread uint v327 = 0u;
+thread uint v328 = 0u;
+thread uint v329 = 0u;
+thread uint v330 = 0u;
+thread uint v331 = 0u;
+thread uint v332 = 0u;
+thread uint v333 = 0u;
+thread uint v334 = 0u;
+thread uint v335 = 0u;
+thread uint v336 = 0u;
+thread uint v337 = 0u;
+thread uint v338 = 0u;
+thread uint v339 = 0u;
+thread uint v340 = 0u;
+thread uint v341 = 0u;
+thread uint v342 = 0u;
+thread uint v343 = 0u;
+thread uint v344 = 0u;
+thread uint v345 = 0u;
+thread uint v346 = 0u;
+thread uint v347 = 0u;
+thread uint v348 = 0u;
+thread uint v349 = 0u;
+thread uint v350 = 0u;
+thread uint v351 = 0u;
+thread uint v352 = 0u;
+thread uint v353 = 0u;
+thread uint v354 = 0u;
+thread uint v355 = 0u;
+thread uint v356 = 0u;
+thread uint v357 = 0u;
+thread uint v358 = 0u;
+thread uint v359 = 0u;
+thread uint v360 = 0u;
+thread uint v361 = 0u;
+thread uint v362 = 0u;
+thread uint v363 = 0u;
+thread uint v364 = 0u;
+thread uint v365 = 0u;
+thread uint v366 = 0u;
+thread uint v367 = 0u;
+thread uint v368 = 0u;
+thread uint v369 = 0u;
+thread uint v370 = 0u;
+thread uint v371 = 0u;
+thread uint v372 = 0u;
+thread uint v373 = 0u;
+thread uint v374 = 0u;
+thread uint v375 = 0u;
+thread uint v376 = 0u;
+thread uint v377 = 0u;
+thread uint v378 = 0u;
+thread uint v379 = 0u;
+thread uint v380 = 0u;
+thread uint v381 = 0u;
+thread uint v382 = 0u;
+thread uint v383 = 0u;
+thread uint v384 = 0u;
+thread uint v385 = 0u;
+thread uint v386 = 0u;
+thread uint v387 = 0u;
+thread uint v388 = 0u;
+thread uint v389 = 0u;
+thread uint v390 = 0u;
+thread uint v391 = 0u;
+thread uint v392 = 0u;
+thread uint v393 = 0u;
+thread uint v394 = 0u;
+thread uint v395 = 0u;
+thread uint v396 = 0u;
+thread uint v397 = 0u;
+thread uint v398 = 0u;
+thread uint v399 = 0u;
+thread uint v400 = 0u;
+thread uint v401 = 0u;
+thread uint v402 = 0u;
+thread uint v403 = 0u;
+thread uint v404 = 0u;
+thread uint v405 = 0u;
+thread uint v406 = 0u;
+thread uint v407 = 0u;
+thread uint v408 = 0u;
+thread uint v409 = 0u;
+thread uint v410 = 0u;
+thread uint v411 = 0u;
+thread uint v412 = 0u;
+thread uint v413 = 0u;
+thread uint v414 = 0u;
+thread uint v415 = 0u;
+thread uint v416 = 0u;
+thread uint v417 = 0u;
+thread uint v418 = 0u;
+thread uint v419 = 0u;
+thread uint v420 = 0u;
+thread uint v421 = 0u;
+thread uint v422 = 0u;
+thread uint v423 = 0u;
+thread uint v424 = 0u;
+thread uint v425 = 0u;
+thread uint v426 = 0u;
+thread uint v427 = 0u;
+thread uint v428 = 0u;
+thread uint v429 = 0u;
+thread uint v430 = 0u;
+thread uint v431 = 0u;
+thread uint v432 = 0u;
+thread uint v433 = 0u;
+thread uint v434 = 0u;
+thread uint v435 = 0u;
+thread uint v436 = 0u;
+thread uint v437 = 0u;
+thread uint v438 = 0u;
+thread uint v439 = 0u;
+thread uint v440 = 0u;
+thread uint v441 = 0u;
+thread uint v442 = 0u;
+thread uint v443 = 0u;
+thread uint v444 = 0u;
+thread uint v445 = 0u;
+thread uint v446 = 0u;
+thread uint v447 = 0u;
+thread uint v448 = 0u;
+thread uint v449 = 0u;
+thread uint v450 = 0u;
+thread uint v451 = 0u;
+thread uint v452 = 0u;
+thread uint v453 = 0u;
+thread uint v454 = 0u;
+thread uint v455 = 0u;
+thread uint v456 = 0u;
+thread uint v457 = 0u;
+thread uint v458 = 0u;
+thread uint v459 = 0u;
+thread uint v460 = 0u;
+thread uint v461 = 0u;
+thread uint v462 = 0u;
+thread uint v463 = 0u;
+thread uint v464 = 0u;
+thread uint v465 = 0u;
+thread uint v466 = 0u;
+thread uint v467 = 0u;
+thread uint v468 = 0u;
+thread uint v469 = 0u;
+thread uint v470 = 0u;
+thread uint v471 = 0u;
+thread uint v472 = 0u;
+thread uint v473 = 0u;
+thread uint v474 = 0u;
+thread uint v475 = 0u;
+thread uint v476 = 0u;
+thread uint v477 = 0u;
+thread uint v478 = 0u;
+thread uint v479 = 0u;
+thread uint v480 = 0u;
+thread uint v481 = 0u;
+thread uint v482 = 0u;
+thread uint v483 = 0u;
+thread uint v484 = 0u;
+thread uint v485 = 0u;
+thread uint v486 = 0u;
+thread uint v487 = 0u;
+thread uint v488 = 0u;
+thread uint v489 = 0u;
+thread uint v490 = 0u;
+thread uint v491 = 0u;
+thread uint v492 = 0u;
+thread uint v493 = 0u;
+thread uint v494 = 0u;
+thread uint v495 = 0u;
+thread uint v496 = 0u;
+thread uint v497 = 0u;
+thread uint v498 = 0u;
+thread uint v499 = 0u;
+thread uint v500 = 0u;
+thread uint v501 = 0u;
+thread uint v502 = 0u;
+thread uint v503 = 0u;
+thread uint v504 = 0u;
+thread uint v505 = 0u;
+thread uint v506 = 0u;
+thread uint v507 = 0u;
+thread uint v508 = 0u;
+thread uint v509 = 0u;
+thread uint v510 = 0u;
+thread uint v511 = 0u;
+thread uint v512 = 0u;
+thread uint v513 = 0u;
+thread uint v514 = 0u;
+thread uint v515 = 0u;
+thread uint v516 = 0u;
+thread uint v517 = 0u;
+thread uint v518 = 0u;
+thread uint v519 = 0u;
+thread uint v520 = 0u;
+thread uint v521 = 0u;
+thread uint v522 = 0u;
+thread uint v523 = 0u;
+thread uint v524 = 0u;
+thread uint v525 = 0u;
+thread uint v526 = 0u;
+thread uint v527 = 0u;
+thread uint v528 = 0u;
+thread uint v529 = 0u;
+thread uint v530 = 0u;
+thread uint v531 = 0u;
+thread uint v532 = 0u;
+thread uint v533 = 0u;
+thread uint v534 = 0u;
+thread uint v535 = 0u;
+thread uint v536 = 0u;
+thread uint v537 = 0u;
+thread uint v538 = 0u;
+thread uint v539 = 0u;
+thread uint v540 = 0u;
+thread uint v541 = 0u;
+thread uint v542 = 0u;
+thread uint v543 = 0u;
+thread uint v544 = 0u;
+thread uint v545 = 0u;
+thread uint v546 = 0u;
+thread uint v547 = 0u;
+thread uint v548 = 0u;
+thread uint v549 = 0u;
+thread uint v550 = 0u;
+thread uint v551 = 0u;
+thread uint v552 = 0u;
+thread uint v553 = 0u;
+thread uint v554 = 0u;
+thread uint v555 = 0u;
+thread uint v556 = 0u;
+thread uint v557 = 0u;
+thread uint v558 = 0u;
+thread uint v559 = 0u;
+thread uint v560 = 0u;
+thread uint v561 = 0u;
+thread uint v562 = 0u;
+thread uint v563 = 0u;
+thread uint v564 = 0u;
+thread uint v565 = 0u;
+thread uint v566 = 0u;
+thread uint v567 = 0u;
+thread uint v568 = 0u;
+thread uint v569 = 0u;
+thread uint v570 = 0u;
+thread uint v571 = 0u;
+thread uint v572 = 0u;
+thread uint v573 = 0u;
+thread uint v574 = 0u;
+thread uint v575 = 0u;
+thread uint v576 = 0u;
+thread uint v577 = 0u;
+thread uint v578 = 0u;
+thread uint v579 = 0u;
+thread uint v580 = 0u;
+thread uint v581 = 0u;
+thread uint v582 = 0u;
+thread uint v583 = 0u;
+thread uint v584 = 0u;
+thread uint v585 = 0u;
+thread uint v586 = 0u;
+thread uint v587 = 0u;
+thread uint v588 = 0u;
+thread uint v589 = 0u;
+thread uint v590 = 0u;
+thread uint v591 = 0u;
+thread uint v592 = 0u;
+thread uint v593 = 0u;
+thread uint v594 = 0u;
+thread uint v595 = 0u;
+thread uint v596 = 0u;
+thread uint v597 = 0u;
+thread uint v598 = 0u;
+thread uint v599 = 0u;
+thread uint v600 = 0u;
+thread uint v601 = 0u;
+thread uint v602 = 0u;
+thread uint v603 = 0u;
+thread uint v604 = 0u;
+thread uint v605 = 0u;
+thread uint v606 = 0u;
+thread uint v607 = 0u;
+thread uint v608 = 0u;
+thread uint v609 = 0u;
+thread uint v610 = 0u;
+thread uint v611 = 0u;
+thread uint v612 = 0u;
+thread uint v613 = 0u;
+thread uint v614 = 0u;
+thread uint v615 = 0u;
+thread uint v616 = 0u;
+thread uint v617 = 0u;
+thread uint v618 = 0u;
+thread uint v619 = 0u;
+thread uint v620 = 0u;
+thread uint v621 = 0u;
+thread uint v622 = 0u;
+thread uint v623 = 0u;
+thread uint v624 = 0u;
+thread uint v625 = 0u;
+thread uint v626 = 0u;
+thread uint v627 = 0u;
+thread uint v628 = 0u;
+thread uint v629 = 0u;
+thread uint v630 = 0u;
+thread uint v631 = 0u;
+thread uint v632 = 0u;
+thread uint v633 = 0u;
+thread uint v634 = 0u;
+thread uint v635 = 0u;
+thread uint v636 = 0u;
+thread uint v637 = 0u;
+thread uint v638 = 0u;
+thread uint v639 = 0u;
+thread uint v640 = 0u;
+thread uint v641 = 0u;
+thread uint v642 = 0u;
+thread uint v643 = 0u;
+thread uint v644 = 0u;
+thread uint v645 = 0u;
+thread uint v646 = 0u;
+thread uint v647 = 0u;
+thread uint v648 = 0u;
+thread uint v649 = 0u;
+thread uint v650 = 0u;
+thread uint v651 = 0u;
+thread uint v652 = 0u;
+thread uint v653 = 0u;
+thread uint v654 = 0u;
+thread uint v655 = 0u;
+thread uint v656 = 0u;
+thread uint v657 = 0u;
+thread uint v658 = 0u;
+thread uint v659 = 0u;
+thread uint v660 = 0u;
+thread uint v661 = 0u;
+thread uint v662 = 0u;
+thread uint v663 = 0u;
+thread uint v664 = 0u;
+thread uint v665 = 0u;
+thread uint v666 = 0u;
+thread uint v667 = 0u;
+thread uint v668 = 0u;
+thread uint v669 = 0u;
+thread uint v670 = 0u;
+thread uint v671 = 0u;
+thread uint v672 = 0u;
+thread uint v673 = 0u;
+thread uint v674 = 0u;
+thread uint v675 = 0u;
+thread uint v676 = 0u;
+thread uint v677 = 0u;
+thread uint v678 = 0u;
+thread uint v679 = 0u;
+thread uint v680 = 0u;
+thread uint v681 = 0u;
+thread uint v682 = 0u;
+thread uint v683 = 0u;
+thread uint v684 = 0u;
+thread uint v685 = 0u;
+thread uint v686 = 0u;
+thread uint v687 = 0u;
+thread uint v688 = 0u;
+thread uint v689 = 0u;
+thread uint v690 = 0u;
+thread uint v691 = 0u;
+thread uint v692 = 0u;
+thread uint v693 = 0u;
+thread uint v694 = 0u;
+thread uint v695 = 0u;
+thread uint v696 = 0u;
+thread uint v697 = 0u;
+thread uint v698 = 0u;
+thread uint v699 = 0u;
+thread uint v700 = 0u;
+thread uint v701 = 0u;
+thread uint v702 = 0u;
+thread uint v703 = 0u;
+thread uint v704 = 0u;
+thread uint v705 = 0u;
+thread uint v706 = 0u;
+thread uint v707 = 0u;
+thread uint v708 = 0u;
+thread uint v709 = 0u;
+thread uint v710 = 0u;
+thread uint v711 = 0u;
+thread uint v712 = 0u;
+thread uint v713 = 0u;
+thread uint v714 = 0u;
+thread uint v715 = 0u;
+thread uint v716 = 0u;
+thread uint v717 = 0u;
+thread uint v718 = 0u;
+thread uint v719 = 0u;
+thread uint v720 = 0u;
+thread uint v721 = 0u;
+thread uint v722 = 0u;
+thread uint v723 = 0u;
+thread uint v724 = 0u;
+thread uint v725 = 0u;
+thread uint v726 = 0u;
+thread uint v727 = 0u;
+thread uint v728 = 0u;
+thread uint v729 = 0u;
+thread uint v730 = 0u;
+thread uint v731 = 0u;
+thread uint v732 = 0u;
+thread uint v733 = 0u;
+thread uint v734 = 0u;
+thread uint v735 = 0u;
+thread uint v736 = 0u;
+thread uint v737 = 0u;
+thread uint v738 = 0u;
+thread uint v739 = 0u;
+thread uint v740 = 0u;
+thread uint v741 = 0u;
+thread uint v742 = 0u;
+thread uint v743 = 0u;
+thread uint v744 = 0u;
+thread uint v745 = 0u;
+thread uint v746 = 0u;
+thread uint v747 = 0u;
+thread uint v748 = 0u;
+thread uint v749 = 0u;
+thread uint v750 = 0u;
+thread uint v751 = 0u;
+thread uint v752 = 0u;
+thread uint v753 = 0u;
+thread uint v754 = 0u;
+thread uint v755 = 0u;
+thread uint v756 = 0u;
+thread uint v757 = 0u;
+thread uint v758 = 0u;
+thread uint v759 = 0u;
+thread uint v760 = 0u;
+thread uint v761 = 0u;
+thread uint v762 = 0u;
+thread uint v763 = 0u;
+thread uint v764 = 0u;
+thread uint v765 = 0u;
+thread uint v766 = 0u;
+thread uint v767 = 0u;
+thread uint v768 = 0u;
+thread uint v769 = 0u;
+thread uint v770 = 0u;
+thread uint v771 = 0u;
+thread uint v772 = 0u;
+thread uint v773 = 0u;
+thread uint v774 = 0u;
+thread uint v775 = 0u;
+thread uint v776 = 0u;
+thread uint v777 = 0u;
+thread uint v778 = 0u;
+thread uint v779 = 0u;
+thread uint v780 = 0u;
+thread uint v781 = 0u;
+thread uint v782 = 0u;
+thread uint v783 = 0u;
+thread uint v784 = 0u;
+thread uint v785 = 0u;
+thread uint v786 = 0u;
+thread uint v787 = 0u;
+thread uint v788 = 0u;
+thread uint v789 = 0u;
+thread uint v790 = 0u;
+thread uint v791 = 0u;
+thread uint v792 = 0u;
+thread uint v793 = 0u;
+thread uint v794 = 0u;
+thread uint v795 = 0u;
+thread uint v796 = 0u;
+thread uint v797 = 0u;
+thread uint v798 = 0u;
+thread uint v799 = 0u;
+thread uint v800 = 0u;
+thread uint v801 = 0u;
+thread uint v802 = 0u;
+thread uint v803 = 0u;
+thread uint v804 = 0u;
+thread uint v805 = 0u;
+thread uint v806 = 0u;
+thread uint v807 = 0u;
+thread uint v808 = 0u;
+thread uint v809 = 0u;
+thread uint v810 = 0u;
+thread uint v811 = 0u;
+thread uint v812 = 0u;
+thread uint v813 = 0u;
+thread uint v814 = 0u;
+thread uint v815 = 0u;
+thread uint v816 = 0u;
+thread uint v817 = 0u;
+thread uint v818 = 0u;
+thread uint v819 = 0u;
+thread uint v820 = 0u;
+thread uint v821 = 0u;
+thread uint v822 = 0u;
+thread uint v823 = 0u;
+thread uint v824 = 0u;
+thread uint v825 = 0u;
+thread uint v826 = 0u;
+thread uint v827 = 0u;
+thread uint v828 = 0u;
+thread uint v829 = 0u;
+thread uint v830 = 0u;
+thread uint v831 = 0u;
+thread uint v832 = 0u;
+thread uint v833 = 0u;
+thread uint v834 = 0u;
+thread uint v835 = 0u;
+thread uint v836 = 0u;
+thread uint v837 = 0u;
+thread uint v838 = 0u;
+thread uint v839 = 0u;
+thread uint v840 = 0u;
+thread uint v841 = 0u;
+thread uint v842 = 0u;
+thread uint v843 = 0u;
+thread uint v844 = 0u;
+thread uint v845 = 0u;
+thread uint v846 = 0u;
+thread uint v847 = 0u;
+thread uint v848 = 0u;
+thread uint v849 = 0u;
+thread uint v850 = 0u;
+thread uint v851 = 0u;
+thread uint v852 = 0u;
+thread uint v853 = 0u;
+thread uint v854 = 0u;
+thread uint v855 = 0u;
+thread uint v856 = 0u;
+thread uint v857 = 0u;
+thread uint v858 = 0u;
+thread uint v859 = 0u;
+thread uint v860 = 0u;
+thread uint v861 = 0u;
+thread uint v862 = 0u;
+thread uint v863 = 0u;
+thread uint v864 = 0u;
+thread uint v865 = 0u;
+thread uint v866 = 0u;
+thread uint v867 = 0u;
+thread uint v868 = 0u;
+thread uint v869 = 0u;
+thread uint v870 = 0u;
+thread uint v871 = 0u;
+thread uint v872 = 0u;
+thread uint v873 = 0u;
+thread uint v874 = 0u;
+thread uint v875 = 0u;
+thread uint v876 = 0u;
+thread uint v877 = 0u;
+thread uint v878 = 0u;
+thread uint v879 = 0u;
+thread uint v880 = 0u;
+thread uint v881 = 0u;
+thread uint v882 = 0u;
+thread uint v883 = 0u;
+thread uint v884 = 0u;
+thread uint v885 = 0u;
+thread uint v886 = 0u;
+thread uint v887 = 0u;
+thread uint v888 = 0u;
+thread uint v889 = 0u;
+thread uint v890 = 0u;
+thread uint v891 = 0u;
+thread uint v892 = 0u;
+thread uint v893 = 0u;
+thread uint v894 = 0u;
+thread uint v895 = 0u;
+thread uint v896 = 0u;
+thread uint v897 = 0u;
+thread uint v898 = 0u;
+thread uint v899 = 0u;
+thread uint v900 = 0u;
+thread uint v901 = 0u;
+thread uint v902 = 0u;
+thread uint v903 = 0u;
+thread uint v904 = 0u;
+thread uint v905 = 0u;
+thread uint v906 = 0u;
+thread uint v907 = 0u;
+thread uint v908 = 0u;
+thread uint v909 = 0u;
+thread uint v910 = 0u;
+thread uint v911 = 0u;
+thread uint v912 = 0u;
+thread uint v913 = 0u;
+thread uint v914 = 0u;
+thread uint v915 = 0u;
+thread uint v916 = 0u;
+thread uint v917 = 0u;
+thread uint v918 = 0u;
+thread uint v919 = 0u;
+thread uint v920 = 0u;
+thread uint v921 = 0u;
+thread uint v922 = 0u;
+thread uint v923 = 0u;
+thread uint v924 = 0u;
+thread uint v925 = 0u;
+thread uint v926 = 0u;
+thread uint v927 = 0u;
+thread uint v928 = 0u;
+thread uint v929 = 0u;
+thread uint v930 = 0u;
+thread uint v931 = 0u;
+thread uint v932 = 0u;
+thread uint v933 = 0u;
+thread uint v934 = 0u;
+thread uint v935 = 0u;
+thread uint v936 = 0u;
+thread uint v937 = 0u;
+thread uint v938 = 0u;
+thread uint v939 = 0u;
+thread uint v940 = 0u;
+thread uint v941 = 0u;
+thread uint v942 = 0u;
+thread uint v943 = 0u;
+thread uint v944 = 0u;
+thread uint v945 = 0u;
+thread uint v946 = 0u;
+thread uint v947 = 0u;
+thread uint v948 = 0u;
+thread uint v949 = 0u;
+thread uint v950 = 0u;
+thread uint v951 = 0u;
+thread uint v952 = 0u;
+thread uint v953 = 0u;
+thread uint v954 = 0u;
+thread uint v955 = 0u;
+thread uint v956 = 0u;
+thread uint v957 = 0u;
+thread uint v958 = 0u;
+thread uint v959 = 0u;
+thread uint v960 = 0u;
+thread uint v961 = 0u;
+thread uint v962 = 0u;
+thread uint v963 = 0u;
+thread uint v964 = 0u;
+thread uint v965 = 0u;
+thread uint v966 = 0u;
+thread uint v967 = 0u;
+thread uint v968 = 0u;
+thread uint v969 = 0u;
+thread uint v970 = 0u;
+thread uint v971 = 0u;
+thread uint v972 = 0u;
+thread uint v973 = 0u;
+thread uint v974 = 0u;
+thread uint v975 = 0u;
+thread uint v976 = 0u;
+thread uint v977 = 0u;
+thread uint v978 = 0u;
+thread uint v979 = 0u;
+thread uint v980 = 0u;
+thread uint v981 = 0u;
+thread uint v982 = 0u;
+thread uint v983 = 0u;
+thread uint v984 = 0u;
+thread uint v985 = 0u;
+thread uint v986 = 0u;
+thread uint v987 = 0u;
+thread uint v988 = 0u;
+thread uint v989 = 0u;
+thread uint v990 = 0u;
+thread uint v991 = 0u;
+thread uint v992 = 0u;
+thread uint v993 = 0u;
+thread uint v994 = 0u;
+thread uint v995 = 0u;
+thread uint v996 = 0u;
+thread uint v997 = 0u;
+thread uint v998 = 0u;
+thread uint v999 = 0u;
+uint foo() {
+  uint x = 0u;
+  x = (x + v0);
+  x = (x + v1);
+  x = (x + v2);
+  x = (x + v3);
+  x = (x + v4);
+  x = (x + v5);
+  x = (x + v6);
+  x = (x + v7);
+  x = (x + v8);
+  x = (x + v9);
+  x = (x + v10);
+  x = (x + v11);
+  x = (x + v12);
+  x = (x + v13);
+  x = (x + v14);
+  x = (x + v15);
+  x = (x + v16);
+  x = (x + v17);
+  x = (x + v18);
+  x = (x + v19);
+  x = (x + v20);
+  x = (x + v21);
+  x = (x + v22);
+  x = (x + v23);
+  x = (x + v24);
+  x = (x + v25);
+  x = (x + v26);
+  x = (x + v27);
+  x = (x + v28);
+  x = (x + v29);
+  x = (x + v30);
+  x = (x + v31);
+  x = (x + v32);
+  x = (x + v33);
+  x = (x + v34);
+  x = (x + v35);
+  x = (x + v36);
+  x = (x + v37);
+  x = (x + v38);
+  x = (x + v39);
+  x = (x + v40);
+  x = (x + v41);
+  x = (x + v42);
+  x = (x + v43);
+  x = (x + v44);
+  x = (x + v45);
+  x = (x + v46);
+  x = (x + v47);
+  x = (x + v48);
+  x = (x + v49);
+  x = (x + v50);
+  x = (x + v51);
+  x = (x + v52);
+  x = (x + v53);
+  x = (x + v54);
+  x = (x + v55);
+  x = (x + v56);
+  x = (x + v57);
+  x = (x + v58);
+  x = (x + v59);
+  x = (x + v60);
+  x = (x + v61);
+  x = (x + v62);
+  x = (x + v63);
+  x = (x + v64);
+  x = (x + v65);
+  x = (x + v66);
+  x = (x + v67);
+  x = (x + v68);
+  x = (x + v69);
+  x = (x + v70);
+  x = (x + v71);
+  x = (x + v72);
+  x = (x + v73);
+  x = (x + v74);
+  x = (x + v75);
+  x = (x + v76);
+  x = (x + v77);
+  x = (x + v78);
+  x = (x + v79);
+  x = (x + v80);
+  x = (x + v81);
+  x = (x + v82);
+  x = (x + v83);
+  x = (x + v84);
+  x = (x + v85);
+  x = (x + v86);
+  x = (x + v87);
+  x = (x + v88);
+  x = (x + v89);
+  x = (x + v90);
+  x = (x + v91);
+  x = (x + v92);
+  x = (x + v93);
+  x = (x + v94);
+  x = (x + v95);
+  x = (x + v96);
+  x = (x + v97);
+  x = (x + v98);
+  x = (x + v99);
+  x = (x + v100);
+  x = (x + v101);
+  x = (x + v102);
+  x = (x + v103);
+  x = (x + v104);
+  x = (x + v105);
+  x = (x + v106);
+  x = (x + v107);
+  x = (x + v108);
+  x = (x + v109);
+  x = (x + v110);
+  x = (x + v111);
+  x = (x + v112);
+  x = (x + v113);
+  x = (x + v114);
+  x = (x + v115);
+  x = (x + v116);
+  x = (x + v117);
+  x = (x + v118);
+  x = (x + v119);
+  x = (x + v120);
+  x = (x + v121);
+  x = (x + v122);
+  x = (x + v123);
+  x = (x + v124);
+  x = (x + v125);
+  x = (x + v126);
+  x = (x + v127);
+  x = (x + v128);
+  x = (x + v129);
+  x = (x + v130);
+  x = (x + v131);
+  x = (x + v132);
+  x = (x + v133);
+  x = (x + v134);
+  x = (x + v135);
+  x = (x + v136);
+  x = (x + v137);
+  x = (x + v138);
+  x = (x + v139);
+  x = (x + v140);
+  x = (x + v141);
+  x = (x + v142);
+  x = (x + v143);
+  x = (x + v144);
+  x = (x + v145);
+  x = (x + v146);
+  x = (x + v147);
+  x = (x + v148);
+  x = (x + v149);
+  x = (x + v150);
+  x = (x + v151);
+  x = (x + v152);
+  x = (x + v153);
+  x = (x + v154);
+  x = (x + v155);
+  x = (x + v156);
+  x = (x + v157);
+  x = (x + v158);
+  x = (x + v159);
+  x = (x + v160);
+  x = (x + v161);
+  x = (x + v162);
+  x = (x + v163);
+  x = (x + v164);
+  x = (x + v165);
+  x = (x + v166);
+  x = (x + v167);
+  x = (x + v168);
+  x = (x + v169);
+  x = (x + v170);
+  x = (x + v171);
+  x = (x + v172);
+  x = (x + v173);
+  x = (x + v174);
+  x = (x + v175);
+  x = (x + v176);
+  x = (x + v177);
+  x = (x + v178);
+  x = (x + v179);
+  x = (x + v180);
+  x = (x + v181);
+  x = (x + v182);
+  x = (x + v183);
+  x = (x + v184);
+  x = (x + v185);
+  x = (x + v186);
+  x = (x + v187);
+  x = (x + v188);
+  x = (x + v189);
+  x = (x + v190);
+  x = (x + v191);
+  x = (x + v192);
+  x = (x + v193);
+  x = (x + v194);
+  x = (x + v195);
+  x = (x + v196);
+  x = (x + v197);
+  x = (x + v198);
+  x = (x + v199);
+  x = (x + v200);
+  x = (x + v201);
+  x = (x + v202);
+  x = (x + v203);
+  x = (x + v204);
+  x = (x + v205);
+  x = (x + v206);
+  x = (x + v207);
+  x = (x + v208);
+  x = (x + v209);
+  x = (x + v210);
+  x = (x + v211);
+  x = (x + v212);
+  x = (x + v213);
+  x = (x + v214);
+  x = (x + v215);
+  x = (x + v216);
+  x = (x + v217);
+  x = (x + v218);
+  x = (x + v219);
+  x = (x + v220);
+  x = (x + v221);
+  x = (x + v222);
+  x = (x + v223);
+  x = (x + v224);
+  x = (x + v225);
+  x = (x + v226);
+  x = (x + v227);
+  x = (x + v228);
+  x = (x + v229);
+  x = (x + v230);
+  x = (x + v231);
+  x = (x + v232);
+  x = (x + v233);
+  x = (x + v234);
+  x = (x + v235);
+  x = (x + v236);
+  x = (x + v237);
+  x = (x + v238);
+  x = (x + v239);
+  x = (x + v240);
+  x = (x + v241);
+  x = (x + v242);
+  x = (x + v243);
+  x = (x + v244);
+  x = (x + v245);
+  x = (x + v246);
+  x = (x + v247);
+  x = (x + v248);
+  x = (x + v249);
+  x = (x + v250);
+  x = (x + v251);
+  x = (x + v252);
+  x = (x + v253);
+  x = (x + v254);
+  x = (x + v255);
+  x = (x + v256);
+  x = (x + v257);
+  x = (x + v258);
+  x = (x + v259);
+  x = (x + v260);
+  x = (x + v261);
+  x = (x + v262);
+  x = (x + v263);
+  x = (x + v264);
+  x = (x + v265);
+  x = (x + v266);
+  x = (x + v267);
+  x = (x + v268);
+  x = (x + v269);
+  x = (x + v270);
+  x = (x + v271);
+  x = (x + v272);
+  x = (x + v273);
+  x = (x + v274);
+  x = (x + v275);
+  x = (x + v276);
+  x = (x + v277);
+  x = (x + v278);
+  x = (x + v279);
+  x = (x + v280);
+  x = (x + v281);
+  x = (x + v282);
+  x = (x + v283);
+  x = (x + v284);
+  x = (x + v285);
+  x = (x + v286);
+  x = (x + v287);
+  x = (x + v288);
+  x = (x + v289);
+  x = (x + v290);
+  x = (x + v291);
+  x = (x + v292);
+  x = (x + v293);
+  x = (x + v294);
+  x = (x + v295);
+  x = (x + v296);
+  x = (x + v297);
+  x = (x + v298);
+  x = (x + v299);
+  x = (x + v300);
+  x = (x + v301);
+  x = (x + v302);
+  x = (x + v303);
+  x = (x + v304);
+  x = (x + v305);
+  x = (x + v306);
+  x = (x + v307);
+  x = (x + v308);
+  x = (x + v309);
+  x = (x + v310);
+  x = (x + v311);
+  x = (x + v312);
+  x = (x + v313);
+  x = (x + v314);
+  x = (x + v315);
+  x = (x + v316);
+  x = (x + v317);
+  x = (x + v318);
+  x = (x + v319);
+  x = (x + v320);
+  x = (x + v321);
+  x = (x + v322);
+  x = (x + v323);
+  x = (x + v324);
+  x = (x + v325);
+  x = (x + v326);
+  x = (x + v327);
+  x = (x + v328);
+  x = (x + v329);
+  x = (x + v330);
+  x = (x + v331);
+  x = (x + v332);
+  x = (x + v333);
+  x = (x + v334);
+  x = (x + v335);
+  x = (x + v336);
+  x = (x + v337);
+  x = (x + v338);
+  x = (x + v339);
+  x = (x + v340);
+  x = (x + v341);
+  x = (x + v342);
+  x = (x + v343);
+  x = (x + v344);
+  x = (x + v345);
+  x = (x + v346);
+  x = (x + v347);
+  x = (x + v348);
+  x = (x + v349);
+  x = (x + v350);
+  x = (x + v351);
+  x = (x + v352);
+  x = (x + v353);
+  x = (x + v354);
+  x = (x + v355);
+  x = (x + v356);
+  x = (x + v357);
+  x = (x + v358);
+  x = (x + v359);
+  x = (x + v360);
+  x = (x + v361);
+  x = (x + v362);
+  x = (x + v363);
+  x = (x + v364);
+  x = (x + v365);
+  x = (x + v366);
+  x = (x + v367);
+  x = (x + v368);
+  x = (x + v369);
+  x = (x + v370);
+  x = (x + v371);
+  x = (x + v372);
+  x = (x + v373);
+  x = (x + v374);
+  x = (x + v375);
+  x = (x + v376);
+  x = (x + v377);
+  x = (x + v378);
+  x = (x + v379);
+  x = (x + v380);
+  x = (x + v381);
+  x = (x + v382);
+  x = (x + v383);
+  x = (x + v384);
+  x = (x + v385);
+  x = (x + v386);
+  x = (x + v387);
+  x = (x + v388);
+  x = (x + v389);
+  x = (x + v390);
+  x = (x + v391);
+  x = (x + v392);
+  x = (x + v393);
+  x = (x + v394);
+  x = (x + v395);
+  x = (x + v396);
+  x = (x + v397);
+  x = (x + v398);
+  x = (x + v399);
+  x = (x + v400);
+  x = (x + v401);
+  x = (x + v402);
+  x = (x + v403);
+  x = (x + v404);
+  x = (x + v405);
+  x = (x + v406);
+  x = (x + v407);
+  x = (x + v408);
+  x = (x + v409);
+  x = (x + v410);
+  x = (x + v411);
+  x = (x + v412);
+  x = (x + v413);
+  x = (x + v414);
+  x = (x + v415);
+  x = (x + v416);
+  x = (x + v417);
+  x = (x + v418);
+  x = (x + v419);
+  x = (x + v420);
+  x = (x + v421);
+  x = (x + v422);
+  x = (x + v423);
+  x = (x + v424);
+  x = (x + v425);
+  x = (x + v426);
+  x = (x + v427);
+  x = (x + v428);
+  x = (x + v429);
+  x = (x + v430);
+  x = (x + v431);
+  x = (x + v432);
+  x = (x + v433);
+  x = (x + v434);
+  x = (x + v435);
+  x = (x + v436);
+  x = (x + v437);
+  x = (x + v438);
+  x = (x + v439);
+  x = (x + v440);
+  x = (x + v441);
+  x = (x + v442);
+  x = (x + v443);
+  x = (x + v444);
+  x = (x + v445);
+  x = (x + v446);
+  x = (x + v447);
+  x = (x + v448);
+  x = (x + v449);
+  x = (x + v450);
+  x = (x + v451);
+  x = (x + v452);
+  x = (x + v453);
+  x = (x + v454);
+  x = (x + v455);
+  x = (x + v456);
+  x = (x + v457);
+  x = (x + v458);
+  x = (x + v459);
+  x = (x + v460);
+  x = (x + v461);
+  x = (x + v462);
+  x = (x + v463);
+  x = (x + v464);
+  x = (x + v465);
+  x = (x + v466);
+  x = (x + v467);
+  x = (x + v468);
+  x = (x + v469);
+  x = (x + v470);
+  x = (x + v471);
+  x = (x + v472);
+  x = (x + v473);
+  x = (x + v474);
+  x = (x + v475);
+  x = (x + v476);
+  x = (x + v477);
+  x = (x + v478);
+  x = (x + v479);
+  x = (x + v480);
+  x = (x + v481);
+  x = (x + v482);
+  x = (x + v483);
+  x = (x + v484);
+  x = (x + v485);
+  x = (x + v486);
+  x = (x + v487);
+  x = (x + v488);
+  x = (x + v489);
+  x = (x + v490);
+  x = (x + v491);
+  x = (x + v492);
+  x = (x + v493);
+  x = (x + v494);
+  x = (x + v495);
+  x = (x + v496);
+  x = (x + v497);
+  x = (x + v498);
+  x = (x + v499);
+  x = (x + v500);
+  x = (x + v501);
+  x = (x + v502);
+  x = (x + v503);
+  x = (x + v504);
+  x = (x + v505);
+  x = (x + v506);
+  x = (x + v507);
+  x = (x + v508);
+  x = (x + v509);
+  x = (x + v510);
+  x = (x + v511);
+  x = (x + v512);
+  x = (x + v513);
+  x = (x + v514);
+  x = (x + v515);
+  x = (x + v516);
+  x = (x + v517);
+  x = (x + v518);
+  x = (x + v519);
+  x = (x + v520);
+  x = (x + v521);
+  x = (x + v522);
+  x = (x + v523);
+  x = (x + v524);
+  x = (x + v525);
+  x = (x + v526);
+  x = (x + v527);
+  x = (x + v528);
+  x = (x + v529);
+  x = (x + v530);
+  x = (x + v531);
+  x = (x + v532);
+  x = (x + v533);
+  x = (x + v534);
+  x = (x + v535);
+  x = (x + v536);
+  x = (x + v537);
+  x = (x + v538);
+  x = (x + v539);
+  x = (x + v540);
+  x = (x + v541);
+  x = (x + v542);
+  x = (x + v543);
+  x = (x + v544);
+  x = (x + v545);
+  x = (x + v546);
+  x = (x + v547);
+  x = (x + v548);
+  x = (x + v549);
+  x = (x + v550);
+  x = (x + v551);
+  x = (x + v552);
+  x = (x + v553);
+  x = (x + v554);
+  x = (x + v555);
+  x = (x + v556);
+  x = (x + v557);
+  x = (x + v558);
+  x = (x + v559);
+  x = (x + v560);
+  x = (x + v561);
+  x = (x + v562);
+  x = (x + v563);
+  x = (x + v564);
+  x = (x + v565);
+  x = (x + v566);
+  x = (x + v567);
+  x = (x + v568);
+  x = (x + v569);
+  x = (x + v570);
+  x = (x + v571);
+  x = (x + v572);
+  x = (x + v573);
+  x = (x + v574);
+  x = (x + v575);
+  x = (x + v576);
+  x = (x + v577);
+  x = (x + v578);
+  x = (x + v579);
+  x = (x + v580);
+  x = (x + v581);
+  x = (x + v582);
+  x = (x + v583);
+  x = (x + v584);
+  x = (x + v585);
+  x = (x + v586);
+  x = (x + v587);
+  x = (x + v588);
+  x = (x + v589);
+  x = (x + v590);
+  x = (x + v591);
+  x = (x + v592);
+  x = (x + v593);
+  x = (x + v594);
+  x = (x + v595);
+  x = (x + v596);
+  x = (x + v597);
+  x = (x + v598);
+  x = (x + v599);
+  x = (x + v600);
+  x = (x + v601);
+  x = (x + v602);
+  x = (x + v603);
+  x = (x + v604);
+  x = (x + v605);
+  x = (x + v606);
+  x = (x + v607);
+  x = (x + v608);
+  x = (x + v609);
+  x = (x + v610);
+  x = (x + v611);
+  x = (x + v612);
+  x = (x + v613);
+  x = (x + v614);
+  x = (x + v615);
+  x = (x + v616);
+  x = (x + v617);
+  x = (x + v618);
+  x = (x + v619);
+  x = (x + v620);
+  x = (x + v621);
+  x = (x + v622);
+  x = (x + v623);
+  x = (x + v624);
+  x = (x + v625);
+  x = (x + v626);
+  x = (x + v627);
+  x = (x + v628);
+  x = (x + v629);
+  x = (x + v630);
+  x = (x + v631);
+  x = (x + v632);
+  x = (x + v633);
+  x = (x + v634);
+  x = (x + v635);
+  x = (x + v636);
+  x = (x + v637);
+  x = (x + v638);
+  x = (x + v639);
+  x = (x + v640);
+  x = (x + v641);
+  x = (x + v642);
+  x = (x + v643);
+  x = (x + v644);
+  x = (x + v645);
+  x = (x + v646);
+  x = (x + v647);
+  x = (x + v648);
+  x = (x + v649);
+  x = (x + v650);
+  x = (x + v651);
+  x = (x + v652);
+  x = (x + v653);
+  x = (x + v654);
+  x = (x + v655);
+  x = (x + v656);
+  x = (x + v657);
+  x = (x + v658);
+  x = (x + v659);
+  x = (x + v660);
+  x = (x + v661);
+  x = (x + v662);
+  x = (x + v663);
+  x = (x + v664);
+  x = (x + v665);
+  x = (x + v666);
+  x = (x + v667);
+  x = (x + v668);
+  x = (x + v669);
+  x = (x + v670);
+  x = (x + v671);
+  x = (x + v672);
+  x = (x + v673);
+  x = (x + v674);
+  x = (x + v675);
+  x = (x + v676);
+  x = (x + v677);
+  x = (x + v678);
+  x = (x + v679);
+  x = (x + v680);
+  x = (x + v681);
+  x = (x + v682);
+  x = (x + v683);
+  x = (x + v684);
+  x = (x + v685);
+  x = (x + v686);
+  x = (x + v687);
+  x = (x + v688);
+  x = (x + v689);
+  x = (x + v690);
+  x = (x + v691);
+  x = (x + v692);
+  x = (x + v693);
+  x = (x + v694);
+  x = (x + v695);
+  x = (x + v696);
+  x = (x + v697);
+  x = (x + v698);
+  x = (x + v699);
+  x = (x + v700);
+  x = (x + v701);
+  x = (x + v702);
+  x = (x + v703);
+  x = (x + v704);
+  x = (x + v705);
+  x = (x + v706);
+  x = (x + v707);
+  x = (x + v708);
+  x = (x + v709);
+  x = (x + v710);
+  x = (x + v711);
+  x = (x + v712);
+  x = (x + v713);
+  x = (x + v714);
+  x = (x + v715);
+  x = (x + v716);
+  x = (x + v717);
+  x = (x + v718);
+  x = (x + v719);
+  x = (x + v720);
+  x = (x + v721);
+  x = (x + v722);
+  x = (x + v723);
+  x = (x + v724);
+  x = (x + v725);
+  x = (x + v726);
+  x = (x + v727);
+  x = (x + v728);
+  x = (x + v729);
+  x = (x + v730);
+  x = (x + v731);
+  x = (x + v732);
+  x = (x + v733);
+  x = (x + v734);
+  x = (x + v735);
+  x = (x + v736);
+  x = (x + v737);
+  x = (x + v738);
+  x = (x + v739);
+  x = (x + v740);
+  x = (x + v741);
+  x = (x + v742);
+  x = (x + v743);
+  x = (x + v744);
+  x = (x + v745);
+  x = (x + v746);
+  x = (x + v747);
+  x = (x + v748);
+  x = (x + v749);
+  x = (x + v750);
+  x = (x + v751);
+  x = (x + v752);
+  x = (x + v753);
+  x = (x + v754);
+  x = (x + v755);
+  x = (x + v756);
+  x = (x + v757);
+  x = (x + v758);
+  x = (x + v759);
+  x = (x + v760);
+  x = (x + v761);
+  x = (x + v762);
+  x = (x + v763);
+  x = (x + v764);
+  x = (x + v765);
+  x = (x + v766);
+  x = (x + v767);
+  x = (x + v768);
+  x = (x + v769);
+  x = (x + v770);
+  x = (x + v771);
+  x = (x + v772);
+  x = (x + v773);
+  x = (x + v774);
+  x = (x + v775);
+  x = (x + v776);
+  x = (x + v777);
+  x = (x + v778);
+  x = (x + v779);
+  x = (x + v780);
+  x = (x + v781);
+  x = (x + v782);
+  x = (x + v783);
+  x = (x + v784);
+  x = (x + v785);
+  x = (x + v786);
+  x = (x + v787);
+  x = (x + v788);
+  x = (x + v789);
+  x = (x + v790);
+  x = (x + v791);
+  x = (x + v792);
+  x = (x + v793);
+  x = (x + v794);
+  x = (x + v795);
+  x = (x + v796);
+  x = (x + v797);
+  x = (x + v798);
+  x = (x + v799);
+  x = (x + v800);
+  x = (x + v801);
+  x = (x + v802);
+  x = (x + v803);
+  x = (x + v804);
+  x = (x + v805);
+  x = (x + v806);
+  x = (x + v807);
+  x = (x + v808);
+  x = (x + v809);
+  x = (x + v810);
+  x = (x + v811);
+  x = (x + v812);
+  x = (x + v813);
+  x = (x + v814);
+  x = (x + v815);
+  x = (x + v816);
+  x = (x + v817);
+  x = (x + v818);
+  x = (x + v819);
+  x = (x + v820);
+  x = (x + v821);
+  x = (x + v822);
+  x = (x + v823);
+  x = (x + v824);
+  x = (x + v825);
+  x = (x + v826);
+  x = (x + v827);
+  x = (x + v828);
+  x = (x + v829);
+  x = (x + v830);
+  x = (x + v831);
+  x = (x + v832);
+  x = (x + v833);
+  x = (x + v834);
+  x = (x + v835);
+  x = (x + v836);
+  x = (x + v837);
+  x = (x + v838);
+  x = (x + v839);
+  x = (x + v840);
+  x = (x + v841);
+  x = (x + v842);
+  x = (x + v843);
+  x = (x + v844);
+  x = (x + v845);
+  x = (x + v846);
+  x = (x + v847);
+  x = (x + v848);
+  x = (x + v849);
+  x = (x + v850);
+  x = (x + v851);
+  x = (x + v852);
+  x = (x + v853);
+  x = (x + v854);
+  x = (x + v855);
+  x = (x + v856);
+  x = (x + v857);
+  x = (x + v858);
+  x = (x + v859);
+  x = (x + v860);
+  x = (x + v861);
+  x = (x + v862);
+  x = (x + v863);
+  x = (x + v864);
+  x = (x + v865);
+  x = (x + v866);
+  x = (x + v867);
+  x = (x + v868);
+  x = (x + v869);
+  x = (x + v870);
+  x = (x + v871);
+  x = (x + v872);
+  x = (x + v873);
+  x = (x + v874);
+  x = (x + v875);
+  x = (x + v876);
+  x = (x + v877);
+  x = (x + v878);
+  x = (x + v879);
+  x = (x + v880);
+  x = (x + v881);
+  x = (x + v882);
+  x = (x + v883);
+  x = (x + v884);
+  x = (x + v885);
+  x = (x + v886);
+  x = (x + v887);
+  x = (x + v888);
+  x = (x + v889);
+  x = (x + v890);
+  x = (x + v891);
+  x = (x + v892);
+  x = (x + v893);
+  x = (x + v894);
+  x = (x + v895);
+  x = (x + v896);
+  x = (x + v897);
+  x = (x + v898);
+  x = (x + v899);
+  x = (x + v900);
+  x = (x + v901);
+  x = (x + v902);
+  x = (x + v903);
+  x = (x + v904);
+  x = (x + v905);
+  x = (x + v906);
+  x = (x + v907);
+  x = (x + v908);
+  x = (x + v909);
+  x = (x + v910);
+  x = (x + v911);
+  x = (x + v912);
+  x = (x + v913);
+  x = (x + v914);
+  x = (x + v915);
+  x = (x + v916);
+  x = (x + v917);
+  x = (x + v918);
+  x = (x + v919);
+  x = (x + v920);
+  x = (x + v921);
+  x = (x + v922);
+  x = (x + v923);
+  x = (x + v924);
+  x = (x + v925);
+  x = (x + v926);
+  x = (x + v927);
+  x = (x + v928);
+  x = (x + v929);
+  x = (x + v930);
+  x = (x + v931);
+  x = (x + v932);
+  x = (x + v933);
+  x = (x + v934);
+  x = (x + v935);
+  x = (x + v936);
+  x = (x + v937);
+  x = (x + v938);
+  x = (x + v939);
+  x = (x + v940);
+  x = (x + v941);
+  x = (x + v942);
+  x = (x + v943);
+  x = (x + v944);
+  x = (x + v945);
+  x = (x + v946);
+  x = (x + v947);
+  x = (x + v948);
+  x = (x + v949);
+  x = (x + v950);
+  x = (x + v951);
+  x = (x + v952);
+  x = (x + v953);
+  x = (x + v954);
+  x = (x + v955);
+  x = (x + v956);
+  x = (x + v957);
+  x = (x + v958);
+  x = (x + v959);
+  x = (x + v960);
+  x = (x + v961);
+  x = (x + v962);
+  x = (x + v963);
+  x = (x + v964);
+  x = (x + v965);
+  x = (x + v966);
+  x = (x + v967);
+  x = (x + v968);
+  x = (x + v969);
+  x = (x + v970);
+  x = (x + v971);
+  x = (x + v972);
+  x = (x + v973);
+  x = (x + v974);
+  x = (x + v975);
+  x = (x + v976);
+  x = (x + v977);
+  x = (x + v978);
+  x = (x + v979);
+  x = (x + v980);
+  x = (x + v981);
+  x = (x + v982);
+  x = (x + v983);
+  x = (x + v984);
+  x = (x + v985);
+  x = (x + v986);
+  x = (x + v987);
+  x = (x + v988);
+  x = (x + v989);
+  x = (x + v990);
+  x = (x + v991);
+  x = (x + v992);
+  x = (x + v993);
+  x = (x + v994);
+  x = (x + v995);
+  x = (x + v996);
+  x = (x + v997);
+  x = (x + v998);
+  x = (x + v999);
+  return x;
+}
+fragment uint tint_symbol() {
+  return foo();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint v0 = 0u;
+            ^
+program_source:5:13: error: program scope variable must reside in constant address space
+thread uint v1 = 0u;
+            ^
+program_source:6:13: error: program scope variable must reside in constant address space
+thread uint v2 = 0u;
+            ^
+program_source:7:13: error: program scope variable must reside in constant address space
+thread uint v3 = 0u;
+            ^
+program_source:8:13: error: program scope variable must reside in constant address space
+thread uint v4 = 0u;
+            ^
+program_source:9:13: error: program scope variable must reside in constant address space
+thread uint v5 = 0u;
+            ^
+program_source:10:13: error: program scope variable must reside in constant address space
+thread uint v6 = 0u;
+            ^
+program_source:11:13: error: program scope variable must reside in constant address space
+thread uint v7 = 0u;
+            ^
+program_source:12:13: error: program scope variable must reside in constant address space
+thread uint v8 = 0u;
+            ^
+program_source:13:13: error: program scope variable must reside in constant address space
+thread uint v9 = 0u;
+            ^
+program_source:14:13: error: program scope variable must reside in constant address space
+thread uint v10 = 0u;
+            ^
+program_source:15:13: error: program scope variable must reside in constant address space
+thread uint v11 = 0u;
+            ^
+program_source:16:13: error: program scope variable must reside in constant address space
+thread uint v12 = 0u;
+            ^
+program_source:17:13: error: program scope variable must reside in constant address space
+thread uint v13 = 0u;
+            ^
+program_source:18:13: error: program scope variable must reside in constant address space
+thread uint v14 = 0u;
+            ^
+program_source:19:13: error: program scope variable must reside in constant address space
+thread uint v15 = 0u;
+            ^
+program_source:20:13: error: program scope variable must reside in constant address space
+thread uint v16 = 0u;
+            ^
+program_source:21:13: error: program scope variable must reside in constant address space
+thread uint v17 = 0u;
+            ^
+program_source:22:13: error: program scope variable must reside in constant address space
+thread uint v18 = 0u;
+            ^
+program_source:23:13: error: program scope variable must reside in constant address space
+thread uint v19 = 0u;
+            ^
+program_source:24:13: error: program scope variable must reside in constant address space
+thread uint v20 = 0u;
+            ^
+program_source:25:13: error: program scope variable must reside in constant address space
+thread uint v21 = 0u;
+            ^
+program_source:26:13: error: program scope variable must reside in constant address space
+thread uint v22 = 0u;
+            ^
+program_source:27:13: error: program scope variable must reside in constant address space
+thread uint v23 = 0u;
+            ^
+program_source:28:13: error: program scope variable must reside in constant address space
+thread uint v24 = 0u;
+            ^
+program_source:29:13: error: program scope variable must reside in constant address space
+thread uint v25 = 0u;
+            ^
+program_source:30:13: error: program scope variable must reside in constant address space
+thread uint v26 = 0u;
+            ^
+program_source:31:13: error: program scope variable must reside in constant address space
+thread uint v27 = 0u;
+            ^
+program_source:32:13: error: program scope variable must reside in constant address space
+thread uint v28 = 0u;
+            ^
+program_source:33:13: error: program scope variable must reside in constant address space
+thread uint v29 = 0u;
+            ^
+program_source:34:13: error: program scope variable must reside in constant address space
+thread uint v30 = 0u;
+            ^
+program_source:35:13: error: program scope variable must reside in constant address space
+thread uint v31 = 0u;
+            ^
+program_source:36:13: error: program scope variable must reside in constant address space
+thread uint v32 = 0u;
+            ^
+program_source:37:13: error: program scope variable must reside in constant address space
+thread uint v33 = 0u;
+            ^
+program_source:38:13: error: program scope variable must reside in constant address space
+thread uint v34 = 0u;
+            ^
+program_source:39:13: error: program scope variable must reside in constant address space
+thread uint v35 = 0u;
+            ^
+program_source:40:13: error: program scope variable must reside in constant address space
+thread uint v36 = 0u;
+            ^
+program_source:41:13: error: program scope variable must reside in constant address space
+thread uint v37 = 0u;
+            ^
+program_source:42:13: error: program scope variable must reside in constant address space
+thread uint v38 = 0u;
+            ^
+program_source:43:13: error: program scope variable must reside in constant address space
+thread uint v39 = 0u;
+            ^
+program_source:44:13: error: program scope variable must reside in constant address space
+thread uint v40 = 0u;
+            ^
+program_source:45:13: error: program scope variable must reside in constant address space
+thread uint v41 = 0u;
+            ^
+program_source:46:13: error: program scope variable must reside in constant address space
+thread uint v42 = 0u;
+            ^
+program_source:47:13: error: program scope variable must reside in constant address space
+thread uint v43 = 0u;
+            ^
+program_source:48:13: error: program scope variable must reside in constant address space
+thread uint v44 = 0u;
+            ^
+program_source:49:13: error: program scope variable must reside in constant address space
+thread uint v45 = 0u;
+            ^
+program_source:50:13: error: program scope variable must reside in constant address space
+thread uint v46 = 0u;
+            ^
+program_source:51:13: error: program scope variable must reside in constant address space
+thread uint v47 = 0u;
+            ^
+program_source:52:13: error: program scope variable must reside in constant address space
+thread uint v48 = 0u;
+            ^
+program_source:53:13: error: program scope variable must reside in constant address space
+thread uint v49 = 0u;
+            ^
+program_source:54:13: error: program scope variable must reside in constant address space
+thread uint v50 = 0u;
+            ^
+program_source:55:13: error: program scope variable must reside in constant address space
+thread uint v51 = 0u;
+            ^
+program_source:56:13: error: program scope variable must reside in constant address space
+thread uint v52 = 0u;
+            ^
+program_source:57:13: error: program scope variable must reside in constant address space
+thread uint v53 = 0u;
+            ^
+program_source:58:13: error: program scope variable must reside in constant address space
+thread uint v54 = 0u;
+            ^
+program_source:59:13: error: program scope variable must reside in constant address space
+thread uint v55 = 0u;
+            ^
+program_source:60:13: error: program scope variable must reside in constant address space
+thread uint v56 = 0u;
+            ^
+program_source:61:13: error: program scope variable must reside in constant address space
+thread uint v57 = 0u;
+            ^
+program_source:62:13: error: program scope variable must reside in constant address space
+thread uint v58 = 0u;
+            ^
+program_source:63:13: error: program scope variable must reside in constant address space
+thread uint v59 = 0u;
+            ^
+program_source:64:13: error: program scope variable must reside in constant address space
+thread uint v60 = 0u;
+            ^
+program_source:65:13: error: program scope variable must reside in constant address space
+thread uint v61 = 0u;
+            ^
+program_source:66:13: error: program scope variable must reside in constant address space
+thread uint v62 = 0u;
+            ^
+program_source:67:13: error: program scope variable must reside in constant address space
+thread uint v63 = 0u;
+            ^
+program_source:68:13: error: program scope variable must reside in constant address space
+thread uint v64 = 0u;
+            ^
+program_source:69:13: error: program scope variable must reside in constant address space
+thread uint v65 = 0u;
+            ^
+program_source:70:13: error: program scope variable must reside in constant address space
+thread uint v66 = 0u;
+            ^
+program_source:71:13: error: program scope variable must reside in constant address space
+thread uint v67 = 0u;
+            ^
+program_source:72:13: error: program scope variable must reside in constant address space
+thread uint v68 = 0u;
+            ^
+program_source:73:13: error: program scope variable must reside in constant address space
+thread uint v69 = 0u;
+            ^
+program_source:74:13: error: program scope variable must reside in constant address space
+thread uint v70 = 0u;
+            ^
+program_source:75:13: error: program scope variable must reside in constant address space
+thread uint v71 = 0u;
+            ^
+program_source:76:13: error: program scope variable must reside in constant address space
+thread uint v72 = 0u;
+            ^
+program_source:77:13: error: program scope variable must reside in constant address space
+thread uint v73 = 0u;
+            ^
+program_source:78:13: error: program scope variable must reside in constant address space
+thread uint v74 = 0u;
+            ^
+program_source:79:13: error: program scope variable must reside in constant address space
+thread uint v75 = 0u;
+            ^
+program_source:80:13: error: program scope variable must reside in constant address space
+thread uint v76 = 0u;
+            ^
+program_source:81:13: error: program scope variable must reside in constant address space
+thread uint v77 = 0u;
+            ^
+program_source:82:13: error: program scope variable must reside in constant address space
+thread uint v78 = 0u;
+            ^
+program_source:83:13: error: program scope variable must reside in constant address space
+thread uint v79 = 0u;
+            ^
+program_source:84:13: error: program scope variable must reside in constant address space
+thread uint v80 = 0u;
+            ^
+program_source:85:13: error: program scope variable must reside in constant address space
+thread uint v81 = 0u;
+            ^
+program_source:86:13: error: program scope variable must reside in constant address space
+thread uint v82 = 0u;
+            ^
+program_source:87:13: error: program scope variable must reside in constant address space
+thread uint v83 = 0u;
+            ^
+program_source:88:13: error: program scope variable must reside in constant address space
+thread uint v84 = 0u;
+            ^
+program_source:89:13: error: program scope variable must reside in constant address space
+thread uint v85 = 0u;
+            ^
+program_source:90:13: error: program scope variable must reside in constant address space
+thread uint v86 = 0u;
+            ^
+program_source:91:13: error: program scope variable must reside in constant address space
+thread uint v87 = 0u;
+            ^
+program_source:92:13: error: program scope variable must reside in constant address space
+thread uint v88 = 0u;
+            ^
+program_source:93:13: error: program scope variable must reside in constant address space
+thread uint v89 = 0u;
+            ^
+program_source:94:13: error: program scope variable must reside in constant address space
+thread uint v90 = 0u;
+            ^
+program_source:95:13: error: program scope variable must reside in constant address space
+thread uint v91 = 0u;
+            ^
+program_source:96:13: error: program scope variable must reside in constant address space
+thread uint v92 = 0u;
+            ^
+program_source:97:13: error: program scope variable must reside in constant address space
+thread uint v93 = 0u;
+            ^
+program_source:98:13: error: program scope variable must reside in constant address space
+thread uint v94 = 0u;
+            ^
+program_source:99:13: error: program scope variable must reside in constant address space
+thread uint v95 = 0u;
+            ^
+program_source:100:13: error: program scope variable must reside in constant address space
+thread uint v96 = 0u;
+            ^
+program_source:101:13: error: program scope variable must reside in constant address space
+thread uint v97 = 0u;
+            ^
+program_source:102:13: error: program scope variable must reside in constant address space
+thread uint v98 = 0u;
+            ^
+program_source:103:13: error: program scope variable must reside in constant address space
+thread uint v99 = 0u;
+            ^
+program_source:104:13: error: program scope variable must reside in constant address space
+thread uint v100 = 0u;
+            ^
+program_source:105:13: error: program scope variable must reside in constant address space
+thread uint v101 = 0u;
+            ^
+program_source:106:13: error: program scope variable must reside in constant address space
+thread uint v102 = 0u;
+            ^
+program_source:107:13: error: program scope variable must reside in constant address space
+thread uint v103 = 0u;
+            ^
+program_source:108:13: error: program scope variable must reside in constant address space
+thread uint v104 = 0u;
+            ^
+program_source:109:13: error: program scope variable must reside in constant address space
+thread uint v105 = 0u;
+            ^
+program_source:110:13: error: program scope variable must reside in constant address space
+thread uint v106 = 0u;
+            ^
+program_source:111:13: error: program scope variable must reside in constant address space
+thread uint v107 = 0u;
+            ^
+program_source:112:13: error: program scope variable must reside in constant address space
+thread uint v108 = 0u;
+            ^
+program_source:113:13: error: program scope variable must reside in constant address space
+thread uint v109 = 0u;
+            ^
+program_source:114:13: error: program scope variable must reside in constant address space
+thread uint v110 = 0u;
+            ^
+program_source:115:13: error: program scope variable must reside in constant address space
+thread uint v111 = 0u;
+            ^
+program_source:116:13: error: program scope variable must reside in constant address space
+thread uint v112 = 0u;
+            ^
+program_source:117:13: error: program scope variable must reside in constant address space
+thread uint v113 = 0u;
+            ^
+program_source:118:13: error: program scope variable must reside in constant address space
+thread uint v114 = 0u;
+            ^
+program_source:119:13: error: program scope variable must reside in constant address space
+thread uint v115 = 0u;
+            ^
+program_source:120:13: error: program scope variable must reside in constant address space
+thread uint v116 = 0u;
+            ^
+program_source:121:13: error: program scope variable must reside in constant address space
+thread uint v117 = 0u;
+            ^
+program_source:122:13: error: program scope variable must reside in constant address space
+thread uint v118 = 0u;
+            ^
+program_source:123:13: error: program scope variable must reside in constant address space
+thread uint v119 = 0u;
+            ^
+program_source:124:13: error: program scope variable must reside in constant address space
+thread uint v120 = 0u;
+            ^
+program_source:125:13: error: program scope variable must reside in constant address space
+thread uint v121 = 0u;
+            ^
+program_source:126:13: error: program scope variable must reside in constant address space
+thread uint v122 = 0u;
+            ^
+program_source:127:13: error: program scope variable must reside in constant address space
+thread uint v123 = 0u;
+            ^
+program_source:128:13: error: program scope variable must reside in constant address space
+thread uint v124 = 0u;
+            ^
+program_source:129:13: error: program scope variable must reside in constant address space
+thread uint v125 = 0u;
+            ^
+program_source:130:13: error: program scope variable must reside in constant address space
+thread uint v126 = 0u;
+            ^
+program_source:131:13: error: program scope variable must reside in constant address space
+thread uint v127 = 0u;
+            ^
+program_source:132:13: error: program scope variable must reside in constant address space
+thread uint v128 = 0u;
+            ^
+program_source:133:13: error: program scope variable must reside in constant address space
+thread uint v129 = 0u;
+            ^
+program_source:134:13: error: program scope variable must reside in constant address space
+thread uint v130 = 0u;
+            ^
+program_source:135:13: error: program scope variable must reside in constant address space
+thread uint v131 = 0u;
+            ^
+program_source:136:13: error: program scope variable must reside in constant address space
+thread uint v132 = 0u;
+            ^
+program_source:137:13: error: program scope variable must reside in constant address space
+thread uint v133 = 0u;
+            ^
+program_source:138:13: error: program scope variable must reside in constant address space
+thread uint v134 = 0u;
+            ^
+program_source:139:13: error: program scope variable must reside in constant address space
+thread uint v135 = 0u;
+            ^
+program_source:140:13: error: program scope variable must reside in constant address space
+thread uint v136 = 0u;
+            ^
+program_source:141:13: error: program scope variable must reside in constant address space
+thread uint v137 = 0u;
+            ^
+program_source:142:13: error: program scope variable must reside in constant address space
+thread uint v138 = 0u;
+            ^
+program_source:143:13: error: program scope variable must reside in constant address space
+thread uint v139 = 0u;
+            ^
+program_source:144:13: error: program scope variable must reside in constant address space
+thread uint v140 = 0u;
+            ^
+program_source:145:13: error: program scope variable must reside in constant address space
+thread uint v141 = 0u;
+            ^
+program_source:146:13: error: program scope variable must reside in constant address space
+thread uint v142 = 0u;
+            ^
+program_source:147:13: error: program scope variable must reside in constant address space
+thread uint v143 = 0u;
+            ^
+program_source:148:13: error: program scope variable must reside in constant address space
+thread uint v144 = 0u;
+            ^
+program_source:149:13: error: program scope variable must reside in constant address space
+thread uint v145 = 0u;
+            ^
+program_source:150:13: error: program scope variable must reside in constant address space
+thread uint v146 = 0u;
+            ^
+program_source:151:13: error: program scope variable must reside in constant address space
+thread uint v147 = 0u;
+            ^
+program_source:152:13: error: program scope variable must reside in constant address space
+thread uint v148 = 0u;
+            ^
+program_source:153:13: error: program scope variable must reside in constant address space
+thread uint v149 = 0u;
+            ^
+program_source:154:13: error: program scope variable must reside in constant address space
+thread uint v150 = 0u;
+            ^
+program_source:155:13: error: program scope variable must reside in constant address space
+thread uint v151 = 0u;
+            ^
+program_source:156:13: error: program scope variable must reside in constant address space
+thread uint v152 = 0u;
+            ^
+program_source:157:13: error: program scope variable must reside in constant address space
+thread uint v153 = 0u;
+            ^
+program_source:158:13: error: program scope variable must reside in constant address space
+thread uint v154 = 0u;
+            ^
+program_source:159:13: error: program scope variable must reside in constant address space
+thread uint v155 = 0u;
+            ^
+program_source:160:13: error: program scope variable must reside in constant address space
+thread uint v156 = 0u;
+            ^
+program_source:161:13: error: program scope variable must reside in constant address space
+thread uint v157 = 0u;
+            ^
+program_source:162:13: error: program scope variable must reside in constant address space
+thread uint v158 = 0u;
+            ^
+program_source:163:13: error: program scope variable must reside in constant address space
+thread uint v159 = 0u;
+            ^
+program_source:164:13: error: program scope variable must reside in constant address space
+thread uint v160 = 0u;
+            ^
+program_source:165:13: error: program scope variable must reside in constant address space
+thread uint v161 = 0u;
+            ^
+program_source:166:13: error: program scope variable must reside in constant address space
+thread uint v162 = 0u;
+            ^
+program_source:167:13: error: program scope variable must reside in constant address space
+thread uint v163 = 0u;
+            ^
+program_source:168:13: error: program scope variable must reside in constant address space
+thread uint v164 = 0u;
+            ^
+program_source:169:13: error: program scope variable must reside in constant address space
+thread uint v165 = 0u;
+            ^
+program_source:170:13: error: program scope variable must reside in constant address space
+thread uint v166 = 0u;
+            ^
+program_source:171:13: error: program scope variable must reside in constant address space
+thread uint v167 = 0u;
+            ^
+program_source:172:13: error: program scope variable must reside in constant address space
+thread uint v168 = 0u;
+            ^
+program_source:173:13: error: program scope variable must reside in constant address space
+thread uint v169 = 0u;
+            ^
+program_source:174:13: error: program scope variable must reside in constant address space
+thread uint v170 = 0u;
+            ^
+program_source:175:13: error: program scope variable must reside in constant address space
+thread uint v171 = 0u;
+            ^
+program_source:176:13: error: program scope variable must reside in constant address space
+thread uint v172 = 0u;
+            ^
+program_source:177:13: error: program scope variable must reside in constant address space
+thread uint v173 = 0u;
+            ^
+program_source:178:13: error: program scope variable must reside in constant address space
+thread uint v174 = 0u;
+            ^
+program_source:179:13: error: program scope variable must reside in constant address space
+thread uint v175 = 0u;
+            ^
+program_source:180:13: error: program scope variable must reside in constant address space
+thread uint v176 = 0u;
+            ^
+program_source:181:13: error: program scope variable must reside in constant address space
+thread uint v177 = 0u;
+            ^
+program_source:182:13: error: program scope variable must reside in constant address space
+thread uint v178 = 0u;
+            ^
+program_source:183:13: error: program scope variable must reside in constant address space
+thread uint v179 = 0u;
+            ^
+program_source:184:13: error: program scope variable must reside in constant address space
+thread uint v180 = 0u;
+            ^
+program_source:185:13: error: program scope variable must reside in constant address space
+thread uint v181 = 0u;
+            ^
+program_source:186:13: error: program scope variable must reside in constant address space
+thread uint v182 = 0u;
+            ^
+program_source:187:13: error: program scope variable must reside in constant address space
+thread uint v183 = 0u;
+            ^
+program_source:188:13: error: program scope variable must reside in constant address space
+thread uint v184 = 0u;
+            ^
+program_source:189:13: error: program scope variable must reside in constant address space
+thread uint v185 = 0u;
+            ^
+program_source:190:13: error: program scope variable must reside in constant address space
+thread uint v186 = 0u;
+            ^
+program_source:191:13: error: program scope variable must reside in constant address space
+thread uint v187 = 0u;
+            ^
+program_source:192:13: error: program scope variable must reside in constant address space
+thread uint v188 = 0u;
+            ^
+program_source:193:13: error: program scope variable must reside in constant address space
+thread uint v189 = 0u;
+            ^
+program_source:194:13: error: program scope variable must reside in constant address space
+thread uint v190 = 0u;
+            ^
+program_source:195:13: error: program scope variable must reside in constant address space
+thread uint v191 = 0u;
+            ^
+program_source:196:13: error: program scope variable must reside in constant address space
+thread uint v192 = 0u;
+            ^
+program_source:197:13: error: program scope variable must reside in constant address space
+thread uint v193 = 0u;
+            ^
+program_source:198:13: error: program scope variable must reside in constant address space
+thread uint v194 = 0u;
+            ^
+program_source:199:13: error: program scope variable must reside in constant address space
+thread uint v195 = 0u;
+            ^
+program_source:200:13: error: program scope variable must reside in constant address space
+thread uint v196 = 0u;
+            ^
+program_source:201:13: error: program scope variable must reside in constant address space
+thread uint v197 = 0u;
+            ^
+program_source:202:13: error: program scope variable must reside in constant address space
+thread uint v198 = 0u;
+            ^
+program_source:203:13: error: program scope variable must reside in constant address space
+thread uint v199 = 0u;
+            ^
+program_source:204:13: error: program scope variable must reside in constant address space
+thread uint v200 = 0u;
+            ^
+program_source:205:13: error: program scope variable must reside in constant address space
+thread uint v201 = 0u;
+            ^
+program_source:206:13: error: program scope variable must reside in constant address space
+thread uint v202 = 0u;
+            ^
+program_source:207:13: error: program scope variable must reside in constant address space
+thread uint v203 = 0u;
+            ^
+program_source:208:13: error: program scope variable must reside in constant address space
+thread uint v204 = 0u;
+            ^
+program_source:209:13: error: program scope variable must reside in constant address space
+thread uint v205 = 0u;
+            ^
+program_source:210:13: error: program scope variable must reside in constant address space
+thread uint v206 = 0u;
+            ^
+program_source:211:13: error: program scope variable must reside in constant address space
+thread uint v207 = 0u;
+            ^
+program_source:212:13: error: program scope variable must reside in constant address space
+thread uint v208 = 0u;
+            ^
+program_source:213:13: error: program scope variable must reside in constant address space
+thread uint v209 = 0u;
+            ^
+program_source:214:13: error: program scope variable must reside in constant address space
+thread uint v210 = 0u;
+            ^
+program_source:215:13: error: program scope variable must reside in constant address space
+thread uint v211 = 0u;
+            ^
+program_source:216:13: error: program scope variable must reside in constant address space
+thread uint v212 = 0u;
+            ^
+program_source:217:13: error: program scope variable must reside in constant address space
+thread uint v213 = 0u;
+            ^
+program_source:218:13: error: program scope variable must reside in constant address space
+thread uint v214 = 0u;
+            ^
+program_source:219:13: error: program scope variable must reside in constant address space
+thread uint v215 = 0u;
+            ^
+program_source:220:13: error: program scope variable must reside in constant address space
+thread uint v216 = 0u;
+            ^
+program_source:221:13: error: program scope variable must reside in constant address space
+thread uint v217 = 0u;
+            ^
+program_source:222:13: error: program scope variable must reside in constant address space
+thread uint v218 = 0u;
+            ^
+program_source:223:13: error: program scope variable must reside in constant address space
+thread uint v219 = 0u;
+            ^
+program_source:224:13: error: program scope variable must reside in constant address space
+thread uint v220 = 0u;
+            ^
+program_source:225:13: error: program scope variable must reside in constant address space
+thread uint v221 = 0u;
+            ^
+program_source:226:13: error: program scope variable must reside in constant address space
+thread uint v222 = 0u;
+            ^
+program_source:227:13: error: program scope variable must reside in constant address space
+thread uint v223 = 0u;
+            ^
+program_source:228:13: error: program scope variable must reside in constant address space
+thread uint v224 = 0u;
+            ^
+program_source:229:13: error: program scope variable must reside in constant address space
+thread uint v225 = 0u;
+            ^
+program_source:230:13: error: program scope variable must reside in constant address space
+thread uint v226 = 0u;
+            ^
+program_source:231:13: error: program scope variable must reside in constant address space
+thread uint v227 = 0u;
+            ^
+program_source:232:13: error: program scope variable must reside in constant address space
+thread uint v228 = 0u;
+            ^
+program_source:233:13: error: program scope variable must reside in constant address space
+thread uint v229 = 0u;
+            ^
+program_source:234:13: error: program scope variable must reside in constant address space
+thread uint v230 = 0u;
+            ^
+program_source:235:13: error: program scope variable must reside in constant address space
+thread uint v231 = 0u;
+            ^
+program_source:236:13: error: program scope variable must reside in constant address space
+thread uint v232 = 0u;
+            ^
+program_source:237:13: error: program scope variable must reside in constant address space
+thread uint v233 = 0u;
+            ^
+program_source:238:13: error: program scope variable must reside in constant address space
+thread uint v234 = 0u;
+            ^
+program_source:239:13: error: program scope variable must reside in constant address space
+thread uint v235 = 0u;
+            ^
+program_source:240:13: error: program scope variable must reside in constant address space
+thread uint v236 = 0u;
+            ^
+program_source:241:13: error: program scope variable must reside in constant address space
+thread uint v237 = 0u;
+            ^
+program_source:242:13: error: program scope variable must reside in constant address space
+thread uint v238 = 0u;
+            ^
+program_source:243:13: error: program scope variable must reside in constant address space
+thread uint v239 = 0u;
+            ^
+program_source:244:13: error: program scope variable must reside in constant address space
+thread uint v240 = 0u;
+            ^
+program_source:245:13: error: program scope variable must reside in constant address space
+thread uint v241 = 0u;
+            ^
+program_source:246:13: error: program scope variable must reside in constant address space
+thread uint v242 = 0u;
+            ^
+program_source:247:13: error: program scope variable must reside in constant address space
+thread uint v243 = 0u;
+            ^
+program_source:248:13: error: program scope variable must reside in constant address space
+thread uint v244 = 0u;
+            ^
+program_source:249:13: error: program scope variable must reside in constant address space
+thread uint v245 = 0u;
+            ^
+program_source:250:13: error: program scope variable must reside in constant address space
+thread uint v246 = 0u;
+            ^
+program_source:251:13: error: program scope variable must reside in constant address space
+thread uint v247 = 0u;
+            ^
+program_source:252:13: error: program scope variable must reside in constant address space
+thread uint v248 = 0u;
+            ^
+program_source:253:13: error: program scope variable must reside in constant address space
+thread uint v249 = 0u;
+            ^
+program_source:254:13: error: program scope variable must reside in constant address space
+thread uint v250 = 0u;
+            ^
+program_source:255:13: error: program scope variable must reside in constant address space
+thread uint v251 = 0u;
+            ^
+program_source:256:13: error: program scope variable must reside in constant address space
+thread uint v252 = 0u;
+            ^
+program_source:257:13: error: program scope variable must reside in constant address space
+thread uint v253 = 0u;
+            ^
+program_source:258:13: error: program scope variable must reside in constant address space
+thread uint v254 = 0u;
+            ^
+program_source:259:13: error: program scope variable must reside in constant address space
+thread uint v255 = 0u;
+            ^
+program_source:260:13: error: program scope variable must reside in constant address space
+thread uint v256 = 0u;
+            ^
+program_source:261:13: error: program scope variable must reside in constant address space
+thread uint v257 = 0u;
+            ^
+program_source:262:13: error: program scope variable must reside in constant address space
+thread uint v258 = 0u;
+            ^
+program_source:263:13: error: program scope variable must reside in constant address space
+thread uint v259 = 0u;
+            ^
+program_source:264:13: error: program scope variable must reside in constant address space
+thread uint v260 = 0u;
+            ^
+program_source:265:13: error: program scope variable must reside in constant address space
+thread uint v261 = 0u;
+            ^
+program_source:266:13: error: program scope variable must reside in constant address space
+thread uint v262 = 0u;
+            ^
+program_source:267:13: error: program scope variable must reside in constant address space
+thread uint v263 = 0u;
+            ^
+program_source:268:13: error: program scope variable must reside in constant address space
+thread uint v264 = 0u;
+            ^
+program_source:269:13: error: program scope variable must reside in constant address space
+thread uint v265 = 0u;
+            ^
+program_source:270:13: error: program scope variable must reside in constant address space
+thread uint v266 = 0u;
+            ^
+program_source:271:13: error: program scope variable must reside in constant address space
+thread uint v267 = 0u;
+            ^
+program_source:272:13: error: program scope variable must reside in constant address space
+thread uint v268 = 0u;
+            ^
+program_source:273:13: error: program scope variable must reside in constant address space
+thread uint v269 = 0u;
+            ^
+program_source:274:13: error: program scope variable must reside in constant address space
+thread uint v270 = 0u;
+            ^
+program_source:275:13: error: program scope variable must reside in constant address space
+thread uint v271 = 0u;
+            ^
+program_source:276:13: error: program scope variable must reside in constant address space
+thread uint v272 = 0u;
+            ^
+program_source:277:13: error: program scope variable must reside in constant address space
+thread uint v273 = 0u;
+            ^
+program_source:278:13: error: program scope variable must reside in constant address space
+thread uint v274 = 0u;
+            ^
+program_source:279:13: error: program scope variable must reside in constant address space
+thread uint v275 = 0u;
+            ^
+program_source:280:13: error: program scope variable must reside in constant address space
+thread uint v276 = 0u;
+            ^
+program_source:281:13: error: program scope variable must reside in constant address space
+thread uint v277 = 0u;
+            ^
+program_source:282:13: error: program scope variable must reside in constant address space
+thread uint v278 = 0u;
+            ^
+program_source:283:13: error: program scope variable must reside in constant address space
+thread uint v279 = 0u;
+            ^
+program_source:284:13: error: program scope variable must reside in constant address space
+thread uint v280 = 0u;
+            ^
+program_source:285:13: error: program scope variable must reside in constant address space
+thread uint v281 = 0u;
+            ^
+program_source:286:13: error: program scope variable must reside in constant address space
+thread uint v282 = 0u;
+            ^
+program_source:287:13: error: program scope variable must reside in constant address space
+thread uint v283 = 0u;
+            ^
+program_source:288:13: error: program scope variable must reside in constant address space
+thread uint v284 = 0u;
+            ^
+program_source:289:13: error: program scope variable must reside in constant address space
+thread uint v285 = 0u;
+            ^
+program_source:290:13: error: program scope variable must reside in constant address space
+thread uint v286 = 0u;
+            ^
+program_source:291:13: error: program scope variable must reside in constant address space
+thread uint v287 = 0u;
+            ^
+program_source:292:13: error: program scope variable must reside in constant address space
+thread uint v288 = 0u;
+            ^
+program_source:293:13: error: program scope variable must reside in constant address space
+thread uint v289 = 0u;
+            ^
+program_source:294:13: error: program scope variable must reside in constant address space
+thread uint v290 = 0u;
+            ^
+program_source:295:13: error: program scope variable must reside in constant address space
+thread uint v291 = 0u;
+            ^
+program_source:296:13: error: program scope variable must reside in constant address space
+thread uint v292 = 0u;
+            ^
+program_source:297:13: error: program scope variable must reside in constant address space
+thread uint v293 = 0u;
+            ^
+program_source:298:13: error: program scope variable must reside in constant address space
+thread uint v294 = 0u;
+            ^
+program_source:299:13: error: program scope variable must reside in constant address space
+thread uint v295 = 0u;
+            ^
+program_source:300:13: error: program scope variable must reside in constant address space
+thread uint v296 = 0u;
+            ^
+program_source:301:13: error: program scope variable must reside in constant address space
+thread uint v297 = 0u;
+            ^
+program_source:302:13: error: program scope variable must reside in constant address space
+thread uint v298 = 0u;
+            ^
+program_source:303:13: error: program scope variable must reside in constant address space
+thread uint v299 = 0u;
+            ^
+program_source:304:13: error: program scope variable must reside in constant address space
+thread uint v300 = 0u;
+            ^
+program_source:305:13: error: program scope variable must reside in constant address space
+thread uint v301 = 0u;
+            ^
+program_source:306:13: error: program scope variable must reside in constant address space
+thread uint v302 = 0u;
+            ^
+program_source:307:13: error: program scope variable must reside in constant address space
+thread uint v303 = 0u;
+            ^
+program_source:308:13: error: program scope variable must reside in constant address space
+thread uint v304 = 0u;
+            ^
+program_source:309:13: error: program scope variable must reside in constant address space
+thread uint v305 = 0u;
+            ^
+program_source:310:13: error: program scope variable must reside in constant address space
+thread uint v306 = 0u;
+            ^
+program_source:311:13: error: program scope variable must reside in constant address space
+thread uint v307 = 0u;
+            ^
+program_source:312:13: error: program scope variable must reside in constant address space
+thread uint v308 = 0u;
+            ^
+program_source:313:13: error: program scope variable must reside in constant address space
+thread uint v309 = 0u;
+            ^
+program_source:314:13: error: program scope variable must reside in constant address space
+thread uint v310 = 0u;
+            ^
+program_source:315:13: error: program scope variable must reside in constant address space
+thread uint v311 = 0u;
+            ^
+program_source:316:13: error: program scope variable must reside in constant address space
+thread uint v312 = 0u;
+            ^
+program_source:317:13: error: program scope variable must reside in constant address space
+thread uint v313 = 0u;
+            ^
+program_source:318:13: error: program scope variable must reside in constant address space
+thread uint v314 = 0u;
+            ^
+program_source:319:13: error: program scope variable must reside in constant address space
+thread uint v315 = 0u;
+            ^
+program_source:320:13: error: program scope variable must reside in constant address space
+thread uint v316 = 0u;
+            ^
+program_source:321:13: error: program scope variable must reside in constant address space
+thread uint v317 = 0u;
+            ^
+program_source:322:13: error: program scope variable must reside in constant address space
+thread uint v318 = 0u;
+            ^
+program_source:323:13: error: program scope variable must reside in constant address space
+thread uint v319 = 0u;
+            ^
+program_source:324:13: error: program scope variable must reside in constant address space
+thread uint v320 = 0u;
+            ^
+program_source:325:13: error: program scope variable must reside in constant address space
+thread uint v321 = 0u;
+            ^
+program_source:326:13: error: program scope variable must reside in constant address space
+thread uint v322 = 0u;
+            ^
+program_source:327:13: error: program scope variable must reside in constant address space
+thread uint v323 = 0u;
+            ^
+program_source:328:13: error: program scope variable must reside in constant address space
+thread uint v324 = 0u;
+            ^
+program_source:329:13: error: program scope variable must reside in constant address space
+thread uint v325 = 0u;
+            ^
+program_source:330:13: error: program scope variable must reside in constant address space
+thread uint v326 = 0u;
+            ^
+program_source:331:13: error: program scope variable must reside in constant address space
+thread uint v327 = 0u;
+            ^
+program_source:332:13: error: program scope variable must reside in constant address space
+thread uint v328 = 0u;
+            ^
+program_source:333:13: error: program scope variable must reside in constant address space
+thread uint v329 = 0u;
+            ^
+program_source:334:13: error: program scope variable must reside in constant address space
+thread uint v330 = 0u;
+            ^
+program_source:335:13: error: program scope variable must reside in constant address space
+thread uint v331 = 0u;
+            ^
+program_source:336:13: error: program scope variable must reside in constant address space
+thread uint v332 = 0u;
+            ^
+program_source:337:13: error: program scope variable must reside in constant address space
+thread uint v333 = 0u;
+            ^
+program_source:338:13: error: program scope variable must reside in constant address space
+thread uint v334 = 0u;
+            ^
+program_source:339:13: error: program scope variable must reside in constant address space
+thread uint v335 = 0u;
+            ^
+program_source:340:13: error: program scope variable must reside in constant address space
+thread uint v336 = 0u;
+            ^
+program_source:341:13: error: program scope variable must reside in constant address space
+thread uint v337 = 0u;
+            ^
+program_source:342:13: error: program scope variable must reside in constant address space
+thread uint v338 = 0u;
+            ^
+program_source:343:13: error: program scope variable must reside in constant address space
+thread uint v339 = 0u;
+            ^
+program_source:344:13: error: program scope variable must reside in constant address space
+thread uint v340 = 0u;
+            ^
+program_source:345:13: error: program scope variable must reside in constant address space
+thread uint v341 = 0u;
+            ^
+program_source:346:13: error: program scope variable must reside in constant address space
+thread uint v342 = 0u;
+            ^
+program_source:347:13: error: program scope variable must reside in constant address space
+thread uint v343 = 0u;
+            ^
+program_source:348:13: error: program scope variable must reside in constant address space
+thread uint v344 = 0u;
+            ^
+program_source:349:13: error: program scope variable must reside in constant address space
+thread uint v345 = 0u;
+            ^
+program_source:350:13: error: program scope variable must reside in constant address space
+thread uint v346 = 0u;
+            ^
+program_source:351:13: error: program scope variable must reside in constant address space
+thread uint v347 = 0u;
+            ^
+program_source:352:13: error: program scope variable must reside in constant address space
+thread uint v348 = 0u;
+            ^
+program_source:353:13: error: program scope variable must reside in constant address space
+thread uint v349 = 0u;
+            ^
+program_source:354:13: error: program scope variable must reside in constant address space
+thread uint v350 = 0u;
+            ^
+program_source:355:13: error: program scope variable must reside in constant address space
+thread uint v351 = 0u;
+            ^
+program_source:356:13: error: program scope variable must reside in constant address space
+thread uint v352 = 0u;
+            ^
+program_source:357:13: error: program scope variable must reside in constant address space
+thread uint v353 = 0u;
+            ^
+program_source:358:13: error: program scope variable must reside in constant address space
+thread uint v354 = 0u;
+            ^
+program_source:359:13: error: program scope variable must reside in constant address space
+thread uint v355 = 0u;
+            ^
+program_source:360:13: error: program scope variable must reside in constant address space
+thread uint v356 = 0u;
+            ^
+program_source:361:13: error: program scope variable must reside in constant address space
+thread uint v357 = 0u;
+            ^
+program_source:362:13: error: program scope variable must reside in constant address space
+thread uint v358 = 0u;
+            ^
+program_source:363:13: error: program scope variable must reside in constant address space
+thread uint v359 = 0u;
+            ^
+program_source:364:13: error: program scope variable must reside in constant address space
+thread uint v360 = 0u;
+            ^
+program_source:365:13: error: program scope variable must reside in constant address space
+thread uint v361 = 0u;
+            ^
+program_source:366:13: error: program scope variable must reside in constant address space
+thread uint v362 = 0u;
+            ^
+program_source:367:13: error: program scope variable must reside in constant address space
+thread uint v363 = 0u;
+            ^
+program_source:368:13: error: program scope variable must reside in constant address space
+thread uint v364 = 0u;
+            ^
+program_source:369:13: error: program scope variable must reside in constant address space
+thread uint v365 = 0u;
+            ^
+program_source:370:13: error: program scope variable must reside in constant address space
+thread uint v366 = 0u;
+            ^
+program_source:371:13: error: program scope variable must reside in constant address space
+thread uint v367 = 0u;
+            ^
+program_source:372:13: error: program scope variable must reside in constant address space
+thread uint v368 = 0u;
+            ^
+program_source:373:13: error: program scope variable must reside in constant address space
+thread uint v369 = 0u;
+            ^
+program_source:374:13: error: program scope variable must reside in constant address space
+thread uint v370 = 0u;
+            ^
+program_source:375:13: error: program scope variable must reside in constant address space
+thread uint v371 = 0u;
+            ^
+program_source:376:13: error: program scope variable must reside in constant address space
+thread uint v372 = 0u;
+            ^
+program_source:377:13: error: program scope variable must reside in constant address space
+thread uint v373 = 0u;
+            ^
+program_source:378:13: error: program scope variable must reside in constant address space
+thread uint v374 = 0u;
+            ^
+program_source:379:13: error: program scope variable must reside in constant address space
+thread uint v375 = 0u;
+            ^
+program_source:380:13: error: program scope variable must reside in constant address space
+thread uint v376 = 0u;
+            ^
+program_source:381:13: error: program scope variable must reside in constant address space
+thread uint v377 = 0u;
+            ^
+program_source:382:13: error: program scope variable must reside in constant address space
+thread uint v378 = 0u;
+            ^
+program_source:383:13: error: program scope variable must reside in constant address space
+thread uint v379 = 0u;
+            ^
+program_source:384:13: error: program scope variable must reside in constant address space
+thread uint v380 = 0u;
+            ^
+program_source:385:13: error: program scope variable must reside in constant address space
+thread uint v381 = 0u;
+            ^
+program_source:386:13: error: program scope variable must reside in constant address space
+thread uint v382 = 0u;
+            ^
+program_source:387:13: error: program scope variable must reside in constant address space
+thread uint v383 = 0u;
+            ^
+program_source:388:13: error: program scope variable must reside in constant address space
+thread uint v384 = 0u;
+            ^
+program_source:389:13: error: program scope variable must reside in constant address space
+thread uint v385 = 0u;
+            ^
+program_source:390:13: error: program scope variable must reside in constant address space
+thread uint v386 = 0u;
+            ^
+program_source:391:13: error: program scope variable must reside in constant address space
+thread uint v387 = 0u;
+            ^
+program_source:392:13: error: program scope variable must reside in constant address space
+thread uint v388 = 0u;
+            ^
+program_source:393:13: error: program scope variable must reside in constant address space
+thread uint v389 = 0u;
+            ^
+program_source:394:13: error: program scope variable must reside in constant address space
+thread uint v390 = 0u;
+            ^
+program_source:395:13: error: program scope variable must reside in constant address space
+thread uint v391 = 0u;
+            ^
+program_source:396:13: error: program scope variable must reside in constant address space
+thread uint v392 = 0u;
+            ^
+program_source:397:13: error: program scope variable must reside in constant address space
+thread uint v393 = 0u;
+            ^
+program_source:398:13: error: program scope variable must reside in constant address space
+thread uint v394 = 0u;
+            ^
+program_source:399:13: error: program scope variable must reside in constant address space
+thread uint v395 = 0u;
+            ^
+program_source:400:13: error: program scope variable must reside in constant address space
+thread uint v396 = 0u;
+            ^
+program_source:401:13: error: program scope variable must reside in constant address space
+thread uint v397 = 0u;
+            ^
+program_source:402:13: error: program scope variable must reside in constant address space
+thread uint v398 = 0u;
+            ^
+program_source:403:13: error: program scope variable must reside in constant address space
+thread uint v399 = 0u;
+            ^
+program_source:404:13: error: program scope variable must reside in constant address space
+thread uint v400 = 0u;
+            ^
+program_source:405:13: error: program scope variable must reside in constant address space
+thread uint v401 = 0u;
+            ^
+program_source:406:13: error: program scope variable must reside in constant address space
+thread uint v402 = 0u;
+            ^
+program_source:407:13: error: program scope variable must reside in constant address space
+thread uint v403 = 0u;
+            ^
+program_source:408:13: error: program scope variable must reside in constant address space
+thread uint v404 = 0u;
+            ^
+program_source:409:13: error: program scope variable must reside in constant address space
+thread uint v405 = 0u;
+            ^
+program_source:410:13: error: program scope variable must reside in constant address space
+thread uint v406 = 0u;
+            ^
+program_source:411:13: error: program scope variable must reside in constant address space
+thread uint v407 = 0u;
+            ^
+program_source:412:13: error: program scope variable must reside in constant address space
+thread uint v408 = 0u;
+            ^
+program_source:413:13: error: program scope variable must reside in constant address space
+thread uint v409 = 0u;
+            ^
+program_source:414:13: error: program scope variable must reside in constant address space
+thread uint v410 = 0u;
+            ^
+program_source:415:13: error: program scope variable must reside in constant address space
+thread uint v411 = 0u;
+            ^
+program_source:416:13: error: program scope variable must reside in constant address space
+thread uint v412 = 0u;
+            ^
+program_source:417:13: error: program scope variable must reside in constant address space
+thread uint v413 = 0u;
+            ^
+program_source:418:13: error: program scope variable must reside in constant address space
+thread uint v414 = 0u;
+            ^
+program_source:419:13: error: program scope variable must reside in constant address space
+thread uint v415 = 0u;
+            ^
+program_source:420:13: error: program scope variable must reside in constant address space
+thread uint v416 = 0u;
+            ^
+program_source:421:13: error: program scope variable must reside in constant address space
+thread uint v417 = 0u;
+            ^
+program_source:422:13: error: program scope variable must reside in constant address space
+thread uint v418 = 0u;
+            ^
+program_source:423:13: error: program scope variable must reside in constant address space
+thread uint v419 = 0u;
+            ^
+program_source:424:13: error: program scope variable must reside in constant address space
+thread uint v420 = 0u;
+            ^
+program_source:425:13: error: program scope variable must reside in constant address space
+thread uint v421 = 0u;
+            ^
+program_source:426:13: error: program scope variable must reside in constant address space
+thread uint v422 = 0u;
+            ^
+program_source:427:13: error: program scope variable must reside in constant address space
+thread uint v423 = 0u;
+            ^
+program_source:428:13: error: program scope variable must reside in constant address space
+thread uint v424 = 0u;
+            ^
+program_source:429:13: error: program scope variable must reside in constant address space
+thread uint v425 = 0u;
+            ^
+program_source:430:13: error: program scope variable must reside in constant address space
+thread uint v426 = 0u;
+            ^
+program_source:431:13: error: program scope variable must reside in constant address space
+thread uint v427 = 0u;
+            ^
+program_source:432:13: error: program scope variable must reside in constant address space
+thread uint v428 = 0u;
+            ^
+program_source:433:13: error: program scope variable must reside in constant address space
+thread uint v429 = 0u;
+            ^
+program_source:434:13: error: program scope variable must reside in constant address space
+thread uint v430 = 0u;
+            ^
+program_source:435:13: error: program scope variable must reside in constant address space
+thread uint v431 = 0u;
+            ^
+program_source:436:13: error: program scope variable must reside in constant address space
+thread uint v432 = 0u;
+            ^
+program_source:437:13: error: program scope variable must reside in constant address space
+thread uint v433 = 0u;
+            ^
+program_source:438:13: error: program scope variable must reside in constant address space
+thread uint v434 = 0u;
+            ^
+program_source:439:13: error: program scope variable must reside in constant address space
+thread uint v435 = 0u;
+            ^
+program_source:440:13: error: program scope variable must reside in constant address space
+thread uint v436 = 0u;
+            ^
+program_source:441:13: error: program scope variable must reside in constant address space
+thread uint v437 = 0u;
+            ^
+program_source:442:13: error: program scope variable must reside in constant address space
+thread uint v438 = 0u;
+            ^
+program_source:443:13: error: program scope variable must reside in constant address space
+thread uint v439 = 0u;
+            ^
+program_source:444:13: error: program scope variable must reside in constant address space
+thread uint v440 = 0u;
+            ^
+program_source:445:13: error: program scope variable must reside in constant address space
+thread uint v441 = 0u;
+            ^
+program_source:446:13: error: program scope variable must reside in constant address space
+thread uint v442 = 0u;
+            ^
+program_source:447:13: error: program scope variable must reside in constant address space
+thread uint v443 = 0u;
+            ^
+program_source:448:13: error: program scope variable must reside in constant address space
+thread uint v444 = 0u;
+            ^
+program_source:449:13: error: program scope variable must reside in constant address space
+thread uint v445 = 0u;
+            ^
+program_source:450:13: error: program scope variable must reside in constant address space
+thread uint v446 = 0u;
+            ^
+program_source:451:13: error: program scope variable must reside in constant address space
+thread uint v447 = 0u;
+            ^
+program_source:452:13: error: program scope variable must reside in constant address space
+thread uint v448 = 0u;
+            ^
+program_source:453:13: error: program scope variable must reside in constant address space
+thread uint v449 = 0u;
+            ^
+program_source:454:13: error: program scope variable must reside in constant address space
+thread uint v450 = 0u;
+            ^
+program_source:455:13: error: program scope variable must reside in constant address space
+thread uint v451 = 0u;
+            ^
+program_source:456:13: error: program scope variable must reside in constant address space
+thread uint v452 = 0u;
+            ^
+program_source:457:13: error: program scope variable must reside in constant address space
+thread uint v453 = 0u;
+            ^
+program_source:458:13: error: program scope variable must reside in constant address space
+thread uint v454 = 0u;
+            ^
+program_source:459:13: error: program scope variable must reside in constant address space
+thread uint v455 = 0u;
+            ^
+program_source:460:13: error: program scope variable must reside in constant address space
+thread uint v456 = 0u;
+            ^
+program_source:461:13: error: program scope variable must reside in constant address space
+thread uint v457 = 0u;
+            ^
+program_source:462:13: error: program scope variable must reside in constant address space
+thread uint v458 = 0u;
+            ^
+program_source:463:13: error: program scope variable must reside in constant address space
+thread uint v459 = 0u;
+            ^
+program_source:464:13: error: program scope variable must reside in constant address space
+thread uint v460 = 0u;
+            ^
+program_source:465:13: error: program scope variable must reside in constant address space
+thread uint v461 = 0u;
+            ^
+program_source:466:13: error: program scope variable must reside in constant address space
+thread uint v462 = 0u;
+            ^
+program_source:467:13: error: program scope variable must reside in constant address space
+thread uint v463 = 0u;
+            ^
+program_source:468:13: error: program scope variable must reside in constant address space
+thread uint v464 = 0u;
+            ^
+program_source:469:13: error: program scope variable must reside in constant address space
+thread uint v465 = 0u;
+            ^
+program_source:470:13: error: program scope variable must reside in constant address space
+thread uint v466 = 0u;
+            ^
+program_source:471:13: error: program scope variable must reside in constant address space
+thread uint v467 = 0u;
+            ^
+program_source:472:13: error: program scope variable must reside in constant address space
+thread uint v468 = 0u;
+            ^
+program_source:473:13: error: program scope variable must reside in constant address space
+thread uint v469 = 0u;
+            ^
+program_source:474:13: error: program scope variable must reside in constant address space
+thread uint v470 = 0u;
+            ^
+program_source:475:13: error: program scope variable must reside in constant address space
+thread uint v471 = 0u;
+            ^
+program_source:476:13: error: program scope variable must reside in constant address space
+thread uint v472 = 0u;
+            ^
+program_source:477:13: error: program scope variable must reside in constant address space
+thread uint v473 = 0u;
+            ^
+program_source:478:13: error: program scope variable must reside in constant address space
+thread uint v474 = 0u;
+            ^
+program_source:479:13: error: program scope variable must reside in constant address space
+thread uint v475 = 0u;
+            ^
+program_source:480:13: error: program scope variable must reside in constant address space
+thread uint v476 = 0u;
+            ^
+program_source:481:13: error: program scope variable must reside in constant address space
+thread uint v477 = 0u;
+            ^
+program_source:482:13: error: program scope variable must reside in constant address space
+thread uint v478 = 0u;
+            ^
+program_source:483:13: error: program scope variable must reside in constant address space
+thread uint v479 = 0u;
+            ^
+program_source:484:13: error: program scope variable must reside in constant address space
+thread uint v480 = 0u;
+            ^
+program_source:485:13: error: program scope variable must reside in constant address space
+thread uint v481 = 0u;
+            ^
+program_source:486:13: error: program scope variable must reside in constant address space
+thread uint v482 = 0u;
+            ^
+program_source:487:13: error: program scope variable must reside in constant address space
+thread uint v483 = 0u;
+            ^
+program_source:488:13: error: program scope variable must reside in constant address space
+thread uint v484 = 0u;
+            ^
+program_source:489:13: error: program scope variable must reside in constant address space
+thread uint v485 = 0u;
+            ^
+program_source:490:13: error: program scope variable must reside in constant address space
+thread uint v486 = 0u;
+            ^
+program_source:491:13: error: program scope variable must reside in constant address space
+thread uint v487 = 0u;
+            ^
+program_source:492:13: error: program scope variable must reside in constant address space
+thread uint v488 = 0u;
+            ^
+program_source:493:13: error: program scope variable must reside in constant address space
+thread uint v489 = 0u;
+            ^
+program_source:494:13: error: program scope variable must reside in constant address space
+thread uint v490 = 0u;
+            ^
+program_source:495:13: error: program scope variable must reside in constant address space
+thread uint v491 = 0u;
+            ^
+program_source:496:13: error: program scope variable must reside in constant address space
+thread uint v492 = 0u;
+            ^
+program_source:497:13: error: program scope variable must reside in constant address space
+thread uint v493 = 0u;
+            ^
+program_source:498:13: error: program scope variable must reside in constant address space
+thread uint v494 = 0u;
+            ^
+program_source:499:13: error: program scope variable must reside in constant address space
+thread uint v495 = 0u;
+            ^
+program_source:500:13: error: program scope variable must reside in constant address space
+thread uint v496 = 0u;
+            ^
+program_source:501:13: error: program scope variable must reside in constant address space
+thread uint v497 = 0u;
+            ^
+program_source:502:13: error: program scope variable must reside in constant address space
+thread uint v498 = 0u;
+            ^
+program_source:503:13: error: program scope variable must reside in constant address space
+thread uint v499 = 0u;
+            ^
+program_source:504:13: error: program scope variable must reside in constant address space
+thread uint v500 = 0u;
+            ^
+program_source:505:13: error: program scope variable must reside in constant address space
+thread uint v501 = 0u;
+            ^
+program_source:506:13: error: program scope variable must reside in constant address space
+thread uint v502 = 0u;
+            ^
+program_source:507:13: error: program scope variable must reside in constant address space
+thread uint v503 = 0u;
+            ^
+program_source:508:13: error: program scope variable must reside in constant address space
+thread uint v504 = 0u;
+            ^
+program_source:509:13: error: program scope variable must reside in constant address space
+thread uint v505 = 0u;
+            ^
+program_source:510:13: error: program scope variable must reside in constant address space
+thread uint v506 = 0u;
+            ^
+program_source:511:13: error: program scope variable must reside in constant address space
+thread uint v507 = 0u;
+            ^
+program_source:512:13: error: program scope variable must reside in constant address space
+thread uint v508 = 0u;
+            ^
+program_source:513:13: error: program scope variable must reside in constant address space
+thread uint v509 = 0u;
+            ^
+program_source:514:13: error: program scope variable must reside in constant address space
+thread uint v510 = 0u;
+            ^
+program_source:515:13: error: program scope variable must reside in constant address space
+thread uint v511 = 0u;
+            ^
+program_source:516:13: error: program scope variable must reside in constant address space
+thread uint v512 = 0u;
+            ^
+program_source:517:13: error: program scope variable must reside in constant address space
+thread uint v513 = 0u;
+            ^
+program_source:518:13: error: program scope variable must reside in constant address space
+thread uint v514 = 0u;
+            ^
+program_source:519:13: error: program scope variable must reside in constant address space
+thread uint v515 = 0u;
+            ^
+program_source:520:13: error: program scope variable must reside in constant address space
+thread uint v516 = 0u;
+            ^
+program_source:521:13: error: program scope variable must reside in constant address space
+thread uint v517 = 0u;
+            ^
+program_source:522:13: error: program scope variable must reside in constant address space
+thread uint v518 = 0u;
+            ^
+program_source:523:13: error: program scope variable must reside in constant address space
+thread uint v519 = 0u;
+            ^
+program_source:524:13: error: program scope variable must reside in constant address space
+thread uint v520 = 0u;
+            ^
+program_source:525:13: error: program scope variable must reside in constant address space
+thread uint v521 = 0u;
+            ^
+program_source:526:13: error: program scope variable must reside in constant address space
+thread uint v522 = 0u;
+            ^
+program_source:527:13: error: program scope variable must reside in constant address space
+thread uint v523 = 0u;
+            ^
+program_source:528:13: error: program scope variable must reside in constant address space
+thread uint v524 = 0u;
+            ^
+program_source:529:13: error: program scope variable must reside in constant address space
+thread uint v525 = 0u;
+            ^
+program_source:530:13: error: program scope variable must reside in constant address space
+thread uint v526 = 0u;
+            ^
+program_source:531:13: error: program scope variable must reside in constant address space
+thread uint v527 = 0u;
+            ^
+program_source:532:13: error: program scope variable must reside in constant address space
+thread uint v528 = 0u;
+            ^
+program_source:533:13: error: program scope variable must reside in constant address space
+thread uint v529 = 0u;
+            ^
+program_source:534:13: error: program scope variable must reside in constant address space
+thread uint v530 = 0u;
+            ^
+program_source:535:13: error: program scope variable must reside in constant address space
+thread uint v531 = 0u;
+            ^
+program_source:536:13: error: program scope variable must reside in constant address space
+thread uint v532 = 0u;
+            ^
+program_source:537:13: error: program scope variable must reside in constant address space
+thread uint v533 = 0u;
+            ^
+program_source:538:13: error: program scope variable must reside in constant address space
+thread uint v534 = 0u;
+            ^
+program_source:539:13: error: program scope variable must reside in constant address space
+thread uint v535 = 0u;
+            ^
+program_source:540:13: error: program scope variable must reside in constant address space
+thread uint v536 = 0u;
+            ^
+program_source:541:13: error: program scope variable must reside in constant address space
+thread uint v537 = 0u;
+            ^
+program_source:542:13: error: program scope variable must reside in constant address space
+thread uint v538 = 0u;
+            ^
+program_source:543:13: error: program scope variable must reside in constant address space
+thread uint v539 = 0u;
+            ^
+program_source:544:13: error: program scope variable must reside in constant address space
+thread uint v540 = 0u;
+            ^
+program_source:545:13: error: program scope variable must reside in constant address space
+thread uint v541 = 0u;
+            ^
+program_source:546:13: error: program scope variable must reside in constant address space
+thread uint v542 = 0u;
+            ^
+program_source:547:13: error: program scope variable must reside in constant address space
+thread uint v543 = 0u;
+            ^
+program_source:548:13: error: program scope variable must reside in constant address space
+thread uint v544 = 0u;
+            ^
+program_source:549:13: error: program scope variable must reside in constant address space
+thread uint v545 = 0u;
+            ^
+program_source:550:13: error: program scope variable must reside in constant address space
+thread uint v546 = 0u;
+            ^
+program_source:551:13: error: program scope variable must reside in constant address space
+thread uint v547 = 0u;
+            ^
+program_source:552:13: error: program scope variable must reside in constant address space
+thread uint v548 = 0u;
+            ^
+program_source:553:13: error: program scope variable must reside in constant address space
+thread uint v549 = 0u;
+            ^
+program_source:554:13: error: program scope variable must reside in constant address space
+thread uint v550 = 0u;
+            ^
+program_source:555:13: error: program scope variable must reside in constant address space
+thread uint v551 = 0u;
+            ^
+program_source:556:13: error: program scope variable must reside in constant address space
+thread uint v552 = 0u;
+            ^
+program_source:557:13: error: program scope variable must reside in constant address space
+thread uint v553 = 0u;
+            ^
+program_source:558:13: error: program scope variable must reside in constant address space
+thread uint v554 = 0u;
+            ^
+program_source:559:13: error: program scope variable must reside in constant address space
+thread uint v555 = 0u;
+            ^
+program_source:560:13: error: program scope variable must reside in constant address space
+thread uint v556 = 0u;
+            ^
+program_source:561:13: error: program scope variable must reside in constant address space
+thread uint v557 = 0u;
+            ^
+program_source:562:13: error: program scope variable must reside in constant address space
+thread uint v558 = 0u;
+            ^
+program_source:563:13: error: program scope variable must reside in constant address space
+thread uint v559 = 0u;
+            ^
+program_source:564:13: error: program scope variable must reside in constant address space
+thread uint v560 = 0u;
+            ^
+program_source:565:13: error: program scope variable must reside in constant address space
+thread uint v561 = 0u;
+            ^
+program_source:566:13: error: program scope variable must reside in constant address space
+thread uint v562 = 0u;
+            ^
+program_source:567:13: error: program scope variable must reside in constant address space
+thread uint v563 = 0u;
+            ^
+program_source:568:13: error: program scope variable must reside in constant address space
+thread uint v564 = 0u;
+            ^
+program_source:569:13: error: program scope variable must reside in constant address space
+thread uint v565 = 0u;
+            ^
+program_source:570:13: error: program scope variable must reside in constant address space
+thread uint v566 = 0u;
+            ^
+program_source:571:13: error: program scope variable must reside in constant address space
+thread uint v567 = 0u;
+            ^
+program_source:572:13: error: program scope variable must reside in constant address space
+thread uint v568 = 0u;
+            ^
+program_source:573:13: error: program scope variable must reside in constant address space
+thread uint v569 = 0u;
+            ^
+program_source:574:13: error: program scope variable must reside in constant address space
+thread uint v570 = 0u;
+            ^
+program_source:575:13: error: program scope variable must reside in constant address space
+thread uint v571 = 0u;
+            ^
+program_source:576:13: error: program scope variable must reside in constant address space
+thread uint v572 = 0u;
+            ^
+program_source:577:13: error: program scope variable must reside in constant address space
+thread uint v573 = 0u;
+            ^
+program_source:578:13: error: program scope variable must reside in constant address space
+thread uint v574 = 0u;
+            ^
+program_source:579:13: error: program scope variable must reside in constant address space
+thread uint v575 = 0u;
+            ^
+program_source:580:13: error: program scope variable must reside in constant address space
+thread uint v576 = 0u;
+            ^
+program_source:581:13: error: program scope variable must reside in constant address space
+thread uint v577 = 0u;
+            ^
+program_source:582:13: error: program scope variable must reside in constant address space
+thread uint v578 = 0u;
+            ^
+program_source:583:13: error: program scope variable must reside in constant address space
+thread uint v579 = 0u;
+            ^
+program_source:584:13: error: program scope variable must reside in constant address space
+thread uint v580 = 0u;
+            ^
+program_source:585:13: error: program scope variable must reside in constant address space
+thread uint v581 = 0u;
+            ^
+program_source:586:13: error: program scope variable must reside in constant address space
+thread uint v582 = 0u;
+            ^
+program_source:587:13: error: program scope variable must reside in constant address space
+thread uint v583 = 0u;
+            ^
+program_source:588:13: error: program scope variable must reside in constant address space
+thread uint v584 = 0u;
+            ^
+program_source:589:13: error: program scope variable must reside in constant address space
+thread uint v585 = 0u;
+            ^
+program_source:590:13: error: program scope variable must reside in constant address space
+thread uint v586 = 0u;
+            ^
+program_source:591:13: error: program scope variable must reside in constant address space
+thread uint v587 = 0u;
+            ^
+program_source:592:13: error: program scope variable must reside in constant address space
+thread uint v588 = 0u;
+            ^
+program_source:593:13: error: program scope variable must reside in constant address space
+thread uint v589 = 0u;
+            ^
+program_source:594:13: error: program scope variable must reside in constant address space
+thread uint v590 = 0u;
+            ^
+program_source:595:13: error: program scope variable must reside in constant address space
+thread uint v591 = 0u;
+            ^
+program_source:596:13: error: program scope variable must reside in constant address space
+thread uint v592 = 0u;
+            ^
+program_source:597:13: error: program scope variable must reside in constant address space
+thread uint v593 = 0u;
+            ^
+program_source:598:13: error: program scope variable must reside in constant address space
+thread uint v594 = 0u;
+            ^
+program_source:599:13: error: program scope variable must reside in constant address space
+thread uint v595 = 0u;
+            ^
+program_source:600:13: error: program scope variable must reside in constant address space
+thread uint v596 = 0u;
+            ^
+program_source:601:13: error: program scope variable must reside in constant address space
+thread uint v597 = 0u;
+            ^
+program_source:602:13: error: program scope variable must reside in constant address space
+thread uint v598 = 0u;
+            ^
+program_source:603:13: error: program scope variable must reside in constant address space
+thread uint v599 = 0u;
+            ^
+program_source:604:13: error: program scope variable must reside in constant address space
+thread uint v600 = 0u;
+            ^
+program_source:605:13: error: program scope variable must reside in constant address space
+thread uint v601 = 0u;
+            ^
+program_source:606:13: error: program scope variable must reside in constant address space
+thread uint v602 = 0u;
+            ^
+program_source:607:13: error: program scope variable must reside in constant address space
+thread uint v603 = 0u;
+            ^
+program_source:608:13: error: program scope variable must reside in constant address space
+thread uint v604 = 0u;
+            ^
+program_source:609:13: error: program scope variable must reside in constant address space
+thread uint v605 = 0u;
+            ^
+program_source:610:13: error: program scope variable must reside in constant address space
+thread uint v606 = 0u;
+            ^
+program_source:611:13: error: program scope variable must reside in constant address space
+thread uint v607 = 0u;
+            ^
+program_source:612:13: error: program scope variable must reside in constant address space
+thread uint v608 = 0u;
+            ^
+program_source:613:13: error: program scope variable must reside in constant address space
+thread uint v609 = 0u;
+            ^
+program_source:614:13: error: program scope variable must reside in constant address space
+thread uint v610 = 0u;
+            ^
+program_source:615:13: error: program scope variable must reside in constant address space
+thread uint v611 = 0u;
+            ^
+program_source:616:13: error: program scope variable must reside in constant address space
+thread uint v612 = 0u;
+            ^
+program_source:617:13: error: program scope variable must reside in constant address space
+thread uint v613 = 0u;
+            ^
+program_source:618:13: error: program scope variable must reside in constant address space
+thread uint v614 = 0u;
+            ^
+program_source:619:13: error: program scope variable must reside in constant address space
+thread uint v615 = 0u;
+            ^
+program_source:620:13: error: program scope variable must reside in constant address space
+thread uint v616 = 0u;
+            ^
+program_source:621:13: error: program scope variable must reside in constant address space
+thread uint v617 = 0u;
+            ^
+program_source:622:13: error: program scope variable must reside in constant address space
+thread uint v618 = 0u;
+            ^
+program_source:623:13: error: program scope variable must reside in constant address space
+thread uint v619 = 0u;
+            ^
+program_source:624:13: error: program scope variable must reside in constant address space
+thread uint v620 = 0u;
+            ^
+program_source:625:13: error: program scope variable must reside in constant address space
+thread uint v621 = 0u;
+            ^
+program_source:626:13: error: program scope variable must reside in constant address space
+thread uint v622 = 0u;
+            ^
+program_source:627:13: error: program scope variable must reside in constant address space
+thread uint v623 = 0u;
+            ^
+program_source:628:13: error: program scope variable must reside in constant address space
+thread uint v624 = 0u;
+            ^
+program_source:629:13: error: program scope variable must reside in constant address space
+thread uint v625 = 0u;
+            ^
+program_source:630:13: error: program scope variable must reside in constant address space
+thread uint v626 = 0u;
+            ^
+program_source:631:13: error: program scope variable must reside in constant address space
+thread uint v627 = 0u;
+            ^
+program_source:632:13: error: program scope variable must reside in constant address space
+thread uint v628 = 0u;
+            ^
+program_source:633:13: error: program scope variable must reside in constant address space
+thread uint v629 = 0u;
+            ^
+program_source:634:13: error: program scope variable must reside in constant address space
+thread uint v630 = 0u;
+            ^
+program_source:635:13: error: program scope variable must reside in constant address space
+thread uint v631 = 0u;
+            ^
+program_source:636:13: error: program scope variable must reside in constant address space
+thread uint v632 = 0u;
+            ^
+program_source:637:13: error: program scope variable must reside in constant address space
+thread uint v633 = 0u;
+            ^
+program_source:638:13: error: program scope variable must reside in constant address space
+thread uint v634 = 0u;
+            ^
+program_source:639:13: error: program scope variable must reside in constant address space
+thread uint v635 = 0u;
+            ^
+program_source:640:13: error: program scope variable must reside in constant address space
+thread uint v636 = 0u;
+            ^
+program_source:641:13: error: program scope variable must reside in constant address space
+thread uint v637 = 0u;
+            ^
+program_source:642:13: error: program scope variable must reside in constant address space
+thread uint v638 = 0u;
+            ^
+program_source:643:13: error: program scope variable must reside in constant address space
+thread uint v639 = 0u;
+            ^
+program_source:644:13: error: program scope variable must reside in constant address space
+thread uint v640 = 0u;
+            ^
+program_source:645:13: error: program scope variable must reside in constant address space
+thread uint v641 = 0u;
+            ^
+program_source:646:13: error: program scope variable must reside in constant address space
+thread uint v642 = 0u;
+            ^
+program_source:647:13: error: program scope variable must reside in constant address space
+thread uint v643 = 0u;
+            ^
+program_source:648:13: error: program scope variable must reside in constant address space
+thread uint v644 = 0u;
+            ^
+program_source:649:13: error: program scope variable must reside in constant address space
+thread uint v645 = 0u;
+            ^
+program_source:650:13: error: program scope variable must reside in constant address space
+thread uint v646 = 0u;
+            ^
+program_source:651:13: error: program scope variable must reside in constant address space
+thread uint v647 = 0u;
+            ^
+program_source:652:13: error: program scope variable must reside in constant address space
+thread uint v648 = 0u;
+            ^
+program_source:653:13: error: program scope variable must reside in constant address space
+thread uint v649 = 0u;
+            ^
+program_source:654:13: error: program scope variable must reside in constant address space
+thread uint v650 = 0u;
+            ^
+program_source:655:13: error: program scope variable must reside in constant address space
+thread uint v651 = 0u;
+            ^
+program_source:656:13: error: program scope variable must reside in constant address space
+thread uint v652 = 0u;
+            ^
+program_source:657:13: error: program scope variable must reside in constant address space
+thread uint v653 = 0u;
+            ^
+program_source:658:13: error: program scope variable must reside in constant address space
+thread uint v654 = 0u;
+            ^
+program_source:659:13: error: program scope variable must reside in constant address space
+thread uint v655 = 0u;
+            ^
+program_source:660:13: error: program scope variable must reside in constant address space
+thread uint v656 = 0u;
+            ^
+program_source:661:13: error: program scope variable must reside in constant address space
+thread uint v657 = 0u;
+            ^
+program_source:662:13: error: program scope variable must reside in constant address space
+thread uint v658 = 0u;
+            ^
+program_source:663:13: error: program scope variable must reside in constant address space
+thread uint v659 = 0u;
+            ^
+program_source:664:13: error: program scope variable must reside in constant address space
+thread uint v660 = 0u;
+            ^
+program_source:665:13: error: program scope variable must reside in constant address space
+thread uint v661 = 0u;
+            ^
+program_source:666:13: error: program scope variable must reside in constant address space
+thread uint v662 = 0u;
+            ^
+program_source:667:13: error: program scope variable must reside in constant address space
+thread uint v663 = 0u;
+            ^
+program_source:668:13: error: program scope variable must reside in constant address space
+thread uint v664 = 0u;
+            ^
+program_source:669:13: error: program scope variable must reside in constant address space
+thread uint v665 = 0u;
+            ^
+program_source:670:13: error: program scope variable must reside in constant address space
+thread uint v666 = 0u;
+            ^
+program_source:671:13: error: program scope variable must reside in constant address space
+thread uint v667 = 0u;
+            ^
+program_source:672:13: error: program scope variable must reside in constant address space
+thread uint v668 = 0u;
+            ^
+program_source:673:13: error: program scope variable must reside in constant address space
+thread uint v669 = 0u;
+            ^
+program_source:674:13: error: program scope variable must reside in constant address space
+thread uint v670 = 0u;
+            ^
+program_source:675:13: error: program scope variable must reside in constant address space
+thread uint v671 = 0u;
+            ^
+program_source:676:13: error: program scope variable must reside in constant address space
+thread uint v672 = 0u;
+            ^
+program_source:677:13: error: program scope variable must reside in constant address space
+thread uint v673 = 0u;
+            ^
+program_source:678:13: error: program scope variable must reside in constant address space
+thread uint v674 = 0u;
+            ^
+program_source:679:13: error: program scope variable must reside in constant address space
+thread uint v675 = 0u;
+            ^
+program_source:680:13: error: program scope variable must reside in constant address space
+thread uint v676 = 0u;
+            ^
+program_source:681:13: error: program scope variable must reside in constant address space
+thread uint v677 = 0u;
+            ^
+program_source:682:13: error: program scope variable must reside in constant address space
+thread uint v678 = 0u;
+            ^
+program_source:683:13: error: program scope variable must reside in constant address space
+thread uint v679 = 0u;
+            ^
+program_source:684:13: error: program scope variable must reside in constant address space
+thread uint v680 = 0u;
+            ^
+program_source:685:13: error: program scope variable must reside in constant address space
+thread uint v681 = 0u;
+            ^
+program_source:686:13: error: program scope variable must reside in constant address space
+thread uint v682 = 0u;
+            ^
+program_source:687:13: error: program scope variable must reside in constant address space
+thread uint v683 = 0u;
+            ^
+program_source:688:13: error: program scope variable must reside in constant address space
+thread uint v684 = 0u;
+            ^
+program_source:689:13: error: program scope variable must reside in constant address space
+thread uint v685 = 0u;
+            ^
+program_source:690:13: error: program scope variable must reside in constant address space
+thread uint v686 = 0u;
+            ^
+program_source:691:13: error: program scope variable must reside in constant address space
+thread uint v687 = 0u;
+            ^
+program_source:692:13: error: program scope variable must reside in constant address space
+thread uint v688 = 0u;
+            ^
+program_source:693:13: error: program scope variable must reside in constant address space
+thread uint v689 = 0u;
+            ^
+program_source:694:13: error: program scope variable must reside in constant address space
+thread uint v690 = 0u;
+            ^
+program_source:695:13: error: program scope variable must reside in constant address space
+thread uint v691 = 0u;
+            ^
+program_source:696:13: error: program scope variable must reside in constant address space
+thread uint v692 = 0u;
+            ^
+program_source:697:13: error: program scope variable must reside in constant address space
+thread uint v693 = 0u;
+            ^
+program_source:698:13: error: program scope variable must reside in constant address space
+thread uint v694 = 0u;
+            ^
+program_source:699:13: error: program scope variable must reside in constant address space
+thread uint v695 = 0u;
+            ^
+program_source:700:13: error: program scope variable must reside in constant address space
+thread uint v696 = 0u;
+            ^
+program_source:701:13: error: program scope variable must reside in constant address space
+thread uint v697 = 0u;
+            ^
+program_source:702:13: error: program scope variable must reside in constant address space
+thread uint v698 = 0u;
+            ^
+program_source:703:13: error: program scope variable must reside in constant address space
+thread uint v699 = 0u;
+            ^
+program_source:704:13: error: program scope variable must reside in constant address space
+thread uint v700 = 0u;
+            ^
+program_source:705:13: error: program scope variable must reside in constant address space
+thread uint v701 = 0u;
+            ^
+program_source:706:13: error: program scope variable must reside in constant address space
+thread uint v702 = 0u;
+            ^
+program_source:707:13: error: program scope variable must reside in constant address space
+thread uint v703 = 0u;
+            ^
+program_source:708:13: error: program scope variable must reside in constant address space
+thread uint v704 = 0u;
+            ^
+program_source:709:13: error: program scope variable must reside in constant address space
+thread uint v705 = 0u;
+            ^
+program_source:710:13: error: program scope variable must reside in constant address space
+thread uint v706 = 0u;
+            ^
+program_source:711:13: error: program scope variable must reside in constant address space
+thread uint v707 = 0u;
+            ^
+program_source:712:13: error: program scope variable must reside in constant address space
+thread uint v708 = 0u;
+            ^
+program_source:713:13: error: program scope variable must reside in constant address space
+thread uint v709 = 0u;
+            ^
+program_source:714:13: error: program scope variable must reside in constant address space
+thread uint v710 = 0u;
+            ^
+program_source:715:13: error: program scope variable must reside in constant address space
+thread uint v711 = 0u;
+            ^
+program_source:716:13: error: program scope variable must reside in constant address space
+thread uint v712 = 0u;
+            ^
+program_source:717:13: error: program scope variable must reside in constant address space
+thread uint v713 = 0u;
+            ^
+program_source:718:13: error: program scope variable must reside in constant address space
+thread uint v714 = 0u;
+            ^
+program_source:719:13: error: program scope variable must reside in constant address space
+thread uint v715 = 0u;
+            ^
+program_source:720:13: error: program scope variable must reside in constant address space
+thread uint v716 = 0u;
+            ^
+program_source:721:13: error: program scope variable must reside in constant address space
+thread uint v717 = 0u;
+            ^
+program_source:722:13: error: program scope variable must reside in constant address space
+thread uint v718 = 0u;
+            ^
+program_source:723:13: error: program scope variable must reside in constant address space
+thread uint v719 = 0u;
+            ^
+program_source:724:13: error: program scope variable must reside in constant address space
+thread uint v720 = 0u;
+            ^
+program_source:725:13: error: program scope variable must reside in constant address space
+thread uint v721 = 0u;
+            ^
+program_source:726:13: error: program scope variable must reside in constant address space
+thread uint v722 = 0u;
+            ^
+program_source:727:13: error: program scope variable must reside in constant address space
+thread uint v723 = 0u;
+            ^
+program_source:728:13: error: program scope variable must reside in constant address space
+thread uint v724 = 0u;
+            ^
+program_source:729:13: error: program scope variable must reside in constant address space
+thread uint v725 = 0u;
+            ^
+program_source:730:13: error: program scope variable must reside in constant address space
+thread uint v726 = 0u;
+            ^
+program_source:731:13: error: program scope variable must reside in constant address space
+thread uint v727 = 0u;
+            ^
+program_source:732:13: error: program scope variable must reside in constant address space
+thread uint v728 = 0u;
+            ^
+program_source:733:13: error: program scope variable must reside in constant address space
+thread uint v729 = 0u;
+            ^
+program_source:734:13: error: program scope variable must reside in constant address space
+thread uint v730 = 0u;
+            ^
+program_source:735:13: error: program scope variable must reside in constant address space
+thread uint v731 = 0u;
+            ^
+program_source:736:13: error: program scope variable must reside in constant address space
+thread uint v732 = 0u;
+            ^
+program_source:737:13: error: program scope variable must reside in constant address space
+thread uint v733 = 0u;
+            ^
+program_source:738:13: error: program scope variable must reside in constant address space
+thread uint v734 = 0u;
+            ^
+program_source:739:13: error: program scope variable must reside in constant address space
+thread uint v735 = 0u;
+            ^
+program_source:740:13: error: program scope variable must reside in constant address space
+thread uint v736 = 0u;
+            ^
+program_source:741:13: error: program scope variable must reside in constant address space
+thread uint v737 = 0u;
+            ^
+program_source:742:13: error: program scope variable must reside in constant address space
+thread uint v738 = 0u;
+            ^
+program_source:743:13: error: program scope variable must reside in constant address space
+thread uint v739 = 0u;
+            ^
+program_source:744:13: error: program scope variable must reside in constant address space
+thread uint v740 = 0u;
+            ^
+program_source:745:13: error: program scope variable must reside in constant address space
+thread uint v741 = 0u;
+            ^
+program_source:746:13: error: program scope variable must reside in constant address space
+thread uint v742 = 0u;
+            ^
+program_source:747:13: error: program scope variable must reside in constant address space
+thread uint v743 = 0u;
+            ^
+program_source:748:13: error: program scope variable must reside in constant address space
+thread uint v744 = 0u;
+            ^
+program_source:749:13: error: program scope variable must reside in constant address space
+thread uint v745 = 0u;
+            ^
+program_source:750:13: error: program scope variable must reside in constant address space
+thread uint v746 = 0u;
+            ^
+program_source:751:13: error: program scope variable must reside in constant address space
+thread uint v747 = 0u;
+            ^
+program_source:752:13: error: program scope variable must reside in constant address space
+thread uint v748 = 0u;
+            ^
+program_source:753:13: error: program scope variable must reside in constant address space
+thread uint v749 = 0u;
+            ^
+program_source:754:13: error: program scope variable must reside in constant address space
+thread uint v750 = 0u;
+            ^
+program_source:755:13: error: program scope variable must reside in constant address space
+thread uint v751 = 0u;
+            ^
+program_source:756:13: error: program scope variable must reside in constant address space
+thread uint v752 = 0u;
+            ^
+program_source:757:13: error: program scope variable must reside in constant address space
+thread uint v753 = 0u;
+            ^
+program_source:758:13: error: program scope variable must reside in constant address space
+thread uint v754 = 0u;
+            ^
+program_source:759:13: error: program scope variable must reside in constant address space
+thread uint v755 = 0u;
+            ^
+program_source:760:13: error: program scope variable must reside in constant address space
+thread uint v756 = 0u;
+            ^
+program_source:761:13: error: program scope variable must reside in constant address space
+thread uint v757 = 0u;
+            ^
+program_source:762:13: error: program scope variable must reside in constant address space
+thread uint v758 = 0u;
+            ^
+program_source:763:13: error: program scope variable must reside in constant address space
+thread uint v759 = 0u;
+            ^
+program_source:764:13: error: program scope variable must reside in constant address space
+thread uint v760 = 0u;
+            ^
+program_source:765:13: error: program scope variable must reside in constant address space
+thread uint v761 = 0u;
+            ^
+program_source:766:13: error: program scope variable must reside in constant address space
+thread uint v762 = 0u;
+            ^
+program_source:767:13: error: program scope variable must reside in constant address space
+thread uint v763 = 0u;
+            ^
+program_source:768:13: error: program scope variable must reside in constant address space
+thread uint v764 = 0u;
+            ^
+program_source:769:13: error: program scope variable must reside in constant address space
+thread uint v765 = 0u;
+            ^
+program_source:770:13: error: program scope variable must reside in constant address space
+thread uint v766 = 0u;
+            ^
+program_source:771:13: error: program scope variable must reside in constant address space
+thread uint v767 = 0u;
+            ^
+program_source:772:13: error: program scope variable must reside in constant address space
+thread uint v768 = 0u;
+            ^
+program_source:773:13: error: program scope variable must reside in constant address space
+thread uint v769 = 0u;
+            ^
+program_source:774:13: error: program scope variable must reside in constant address space
+thread uint v770 = 0u;
+            ^
+program_source:775:13: error: program scope variable must reside in constant address space
+thread uint v771 = 0u;
+            ^
+program_source:776:13: error: program scope variable must reside in constant address space
+thread uint v772 = 0u;
+            ^
+program_source:777:13: error: program scope variable must reside in constant address space
+thread uint v773 = 0u;
+            ^
+program_source:778:13: error: program scope variable must reside in constant address space
+thread uint v774 = 0u;
+            ^
+program_source:779:13: error: program scope variable must reside in constant address space
+thread uint v775 = 0u;
+            ^
+program_source:780:13: error: program scope variable must reside in constant address space
+thread uint v776 = 0u;
+            ^
+program_source:781:13: error: program scope variable must reside in constant address space
+thread uint v777 = 0u;
+            ^
+program_source:782:13: error: program scope variable must reside in constant address space
+thread uint v778 = 0u;
+            ^
+program_source:783:13: error: program scope variable must reside in constant address space
+thread uint v779 = 0u;
+            ^
+program_source:784:13: error: program scope variable must reside in constant address space
+thread uint v780 = 0u;
+            ^
+program_source:785:13: error: program scope variable must reside in constant address space
+thread uint v781 = 0u;
+            ^
+program_source:786:13: error: program scope variable must reside in constant address space
+thread uint v782 = 0u;
+            ^
+program_source:787:13: error: program scope variable must reside in constant address space
+thread uint v783 = 0u;
+            ^
+program_source:788:13: error: program scope variable must reside in constant address space
+thread uint v784 = 0u;
+            ^
+program_source:789:13: error: program scope variable must reside in constant address space
+thread uint v785 = 0u;
+            ^
+program_source:790:13: error: program scope variable must reside in constant address space
+thread uint v786 = 0u;
+            ^
+program_source:791:13: error: program scope variable must reside in constant address space
+thread uint v787 = 0u;
+            ^
+program_source:792:13: error: program scope variable must reside in constant address space
+thread uint v788 = 0u;
+            ^
+program_source:793:13: error: program scope variable must reside in constant address space
+thread uint v789 = 0u;
+            ^
+program_source:794:13: error: program scope variable must reside in constant address space
+thread uint v790 = 0u;
+            ^
+program_source:795:13: error: program scope variable must reside in constant address space
+thread uint v791 = 0u;
+            ^
+program_source:796:13: error: program scope variable must reside in constant address space
+thread uint v792 = 0u;
+            ^
+program_source:797:13: error: program scope variable must reside in constant address space
+thread uint v793 = 0u;
+            ^
+program_source:798:13: error: program scope variable must reside in constant address space
+thread uint v794 = 0u;
+            ^
+program_source:799:13: error: program scope variable must reside in constant address space
+thread uint v795 = 0u;
+            ^
+program_source:800:13: error: program scope variable must reside in constant address space
+thread uint v796 = 0u;
+            ^
+program_source:801:13: error: program scope variable must reside in constant address space
+thread uint v797 = 0u;
+            ^
+program_source:802:13: error: program scope variable must reside in constant address space
+thread uint v798 = 0u;
+            ^
+program_source:803:13: error: program scope variable must reside in constant address space
+thread uint v799 = 0u;
+            ^
+program_source:804:13: error: program scope variable must reside in constant address space
+thread uint v800 = 0u;
+            ^
+program_source:805:13: error: program scope variable must reside in constant address space
+thread uint v801 = 0u;
+            ^
+program_source:806:13: error: program scope variable must reside in constant address space
+thread uint v802 = 0u;
+            ^
+program_source:807:13: error: program scope variable must reside in constant address space
+thread uint v803 = 0u;
+            ^
+program_source:808:13: error: program scope variable must reside in constant address space
+thread uint v804 = 0u;
+            ^
+program_source:809:13: error: program scope variable must reside in constant address space
+thread uint v805 = 0u;
+            ^
+program_source:810:13: error: program scope variable must reside in constant address space
+thread uint v806 = 0u;
+            ^
+program_source:811:13: error: program scope variable must reside in constant address space
+thread uint v807 = 0u;
+            ^
+program_source:812:13: error: program scope variable must reside in constant address space
+thread uint v808 = 0u;
+            ^
+program_source:813:13: error: program scope variable must reside in constant address space
+thread uint v809 = 0u;
+            ^
+program_source:814:13: error: program scope variable must reside in constant address space
+thread uint v810 = 0u;
+            ^
+program_source:815:13: error: program scope variable must reside in constant address space
+thread uint v811 = 0u;
+            ^
+program_source:816:13: error: program scope variable must reside in constant address space
+thread uint v812 = 0u;
+            ^
+program_source:817:13: error: program scope variable must reside in constant address space
+thread uint v813 = 0u;
+            ^
+program_source:818:13: error: program scope variable must reside in constant address space
+thread uint v814 = 0u;
+            ^
+program_source:819:13: error: program scope variable must reside in constant address space
+thread uint v815 = 0u;
+            ^
+program_source:820:13: error: program scope variable must reside in constant address space
+thread uint v816 = 0u;
+            ^
+program_source:821:13: error: program scope variable must reside in constant address space
+thread uint v817 = 0u;
+            ^
+program_source:822:13: error: program scope variable must reside in constant address space
+thread uint v818 = 0u;
+            ^
+program_source:823:13: error: program scope variable must reside in constant address space
+thread uint v819 = 0u;
+            ^
+program_source:824:13: error: program scope variable must reside in constant address space
+thread uint v820 = 0u;
+            ^
+program_source:825:13: error: program scope variable must reside in constant address space
+thread uint v821 = 0u;
+            ^
+program_source:826:13: error: program scope variable must reside in constant address space
+thread uint v822 = 0u;
+            ^
+program_source:827:13: error: program scope variable must reside in constant address space
+thread uint v823 = 0u;
+            ^
+program_source:828:13: error: program scope variable must reside in constant address space
+thread uint v824 = 0u;
+            ^
+program_source:829:13: error: program scope variable must reside in constant address space
+thread uint v825 = 0u;
+            ^
+program_source:830:13: error: program scope variable must reside in constant address space
+thread uint v826 = 0u;
+            ^
+program_source:831:13: error: program scope variable must reside in constant address space
+thread uint v827 = 0u;
+            ^
+program_source:832:13: error: program scope variable must reside in constant address space
+thread uint v828 = 0u;
+            ^
+program_source:833:13: error: program scope variable must reside in constant address space
+thread uint v829 = 0u;
+            ^
+program_source:834:13: error: program scope variable must reside in constant address space
+thread uint v830 = 0u;
+            ^
+program_source:835:13: error: program scope variable must reside in constant address space
+thread uint v831 = 0u;
+            ^
+program_source:836:13: error: program scope variable must reside in constant address space
+thread uint v832 = 0u;
+            ^
+program_source:837:13: error: program scope variable must reside in constant address space
+thread uint v833 = 0u;
+            ^
+program_source:838:13: error: program scope variable must reside in constant address space
+thread uint v834 = 0u;
+            ^
+program_source:839:13: error: program scope variable must reside in constant address space
+thread uint v835 = 0u;
+            ^
+program_source:840:13: error: program scope variable must reside in constant address space
+thread uint v836 = 0u;
+            ^
+program_source:841:13: error: program scope variable must reside in constant address space
+thread uint v837 = 0u;
+            ^
+program_source:842:13: error: program scope variable must reside in constant address space
+thread uint v838 = 0u;
+            ^
+program_source:843:13: error: program scope variable must reside in constant address space
+thread uint v839 = 0u;
+            ^
+program_source:844:13: error: program scope variable must reside in constant address space
+thread uint v840 = 0u;
+            ^
+program_source:845:13: error: program scope variable must reside in constant address space
+thread uint v841 = 0u;
+            ^
+program_source:846:13: error: program scope variable must reside in constant address space
+thread uint v842 = 0u;
+            ^
+program_source:847:13: error: program scope variable must reside in constant address space
+thread uint v843 = 0u;
+            ^
+program_source:848:13: error: program scope variable must reside in constant address space
+thread uint v844 = 0u;
+            ^
+program_source:849:13: error: program scope variable must reside in constant address space
+thread uint v845 = 0u;
+            ^
+program_source:850:13: error: program scope variable must reside in constant address space
+thread uint v846 = 0u;
+            ^
+program_source:851:13: error: program scope variable must reside in constant address space
+thread uint v847 = 0u;
+            ^
+program_source:852:13: error: program scope variable must reside in constant address space
+thread uint v848 = 0u;
+            ^
+program_source:853:13: error: program scope variable must reside in constant address space
+thread uint v849 = 0u;
+            ^
+program_source:854:13: error: program scope variable must reside in constant address space
+thread uint v850 = 0u;
+            ^
+program_source:855:13: error: program scope variable must reside in constant address space
+thread uint v851 = 0u;
+            ^
+program_source:856:13: error: program scope variable must reside in constant address space
+thread uint v852 = 0u;
+            ^
+program_source:857:13: error: program scope variable must reside in constant address space
+thread uint v853 = 0u;
+            ^
+program_source:858:13: error: program scope variable must reside in constant address space
+thread uint v854 = 0u;
+            ^
+program_source:859:13: error: program scope variable must reside in constant address space
+thread uint v855 = 0u;
+            ^
+program_source:860:13: error: program scope variable must reside in constant address space
+thread uint v856 = 0u;
+            ^
+program_source:861:13: error: program scope variable must reside in constant address space
+thread uint v857 = 0u;
+            ^
+program_source:862:13: error: program scope variable must reside in constant address space
+thread uint v858 = 0u;
+            ^
+program_source:863:13: error: program scope variable must reside in constant address space
+thread uint v859 = 0u;
+            ^
+program_source:864:13: error: program scope variable must reside in constant address space
+thread uint v860 = 0u;
+            ^
+program_source:865:13: error: program scope variable must reside in constant address space
+thread uint v861 = 0u;
+            ^
+program_source:866:13: error: program scope variable must reside in constant address space
+thread uint v862 = 0u;
+            ^
+program_source:867:13: error: program scope variable must reside in constant address space
+thread uint v863 = 0u;
+            ^
+program_source:868:13: error: program scope variable must reside in constant address space
+thread uint v864 = 0u;
+            ^
+program_source:869:13: error: program scope variable must reside in constant address space
+thread uint v865 = 0u;
+            ^
+program_source:870:13: error: program scope variable must reside in constant address space
+thread uint v866 = 0u;
+            ^
+program_source:871:13: error: program scope variable must reside in constant address space
+thread uint v867 = 0u;
+            ^
+program_source:872:13: error: program scope variable must reside in constant address space
+thread uint v868 = 0u;
+            ^
+program_source:873:13: error: program scope variable must reside in constant address space
+thread uint v869 = 0u;
+            ^
+program_source:874:13: error: program scope variable must reside in constant address space
+thread uint v870 = 0u;
+            ^
+program_source:875:13: error: program scope variable must reside in constant address space
+thread uint v871 = 0u;
+            ^
+program_source:876:13: error: program scope variable must reside in constant address space
+thread uint v872 = 0u;
+            ^
+program_source:877:13: error: program scope variable must reside in constant address space
+thread uint v873 = 0u;
+            ^
+program_source:878:13: error: program scope variable must reside in constant address space
+thread uint v874 = 0u;
+            ^
+program_source:879:13: error: program scope variable must reside in constant address space
+thread uint v875 = 0u;
+            ^
+program_source:880:13: error: program scope variable must reside in constant address space
+thread uint v876 = 0u;
+            ^
+program_source:881:13: error: program scope variable must reside in constant address space
+thread uint v877 = 0u;
+            ^
+program_source:882:13: error: program scope variable must reside in constant address space
+thread uint v878 = 0u;
+            ^
+program_source:883:13: error: program scope variable must reside in constant address space
+thread uint v879 = 0u;
+            ^
+program_source:884:13: error: program scope variable must reside in constant address space
+thread uint v880 = 0u;
+            ^
+program_source:885:13: error: program scope variable must reside in constant address space
+thread uint v881 = 0u;
+            ^
+program_source:886:13: error: program scope variable must reside in constant address space
+thread uint v882 = 0u;
+            ^
+program_source:887:13: error: program scope variable must reside in constant address space
+thread uint v883 = 0u;
+            ^
+program_source:888:13: error: program scope variable must reside in constant address space
+thread uint v884 = 0u;
+            ^
+program_source:889:13: error: program scope variable must reside in constant address space
+thread uint v885 = 0u;
+            ^
+program_source:890:13: error: program scope variable must reside in constant address space
+thread uint v886 = 0u;
+            ^
+program_source:891:13: error: program scope variable must reside in constant address space
+thread uint v887 = 0u;
+            ^
+program_source:892:13: error: program scope variable must reside in constant address space
+thread uint v888 = 0u;
+            ^
+program_source:893:13: error: program scope variable must reside in constant address space
+thread uint v889 = 0u;
+            ^
+program_source:894:13: error: program scope variable must reside in constant address space
+thread uint v890 = 0u;
+            ^
+program_source:895:13: error: program scope variable must reside in constant address space
+thread uint v891 = 0u;
+            ^
+program_source:896:13: error: program scope variable must reside in constant address space
+thread uint v892 = 0u;
+            ^
+program_source:897:13: error: program scope variable must reside in constant address space
+thread uint v893 = 0u;
+            ^
+program_source:898:13: error: program scope variable must reside in constant address space
+thread uint v894 = 0u;
+            ^
+program_source:899:13: error: program scope variable must reside in constant address space
+thread uint v895 = 0u;
+            ^
+program_source:900:13: error: program scope variable must reside in constant address space
+thread uint v896 = 0u;
+            ^
+program_source:901:13: error: program scope variable must reside in constant address space
+thread uint v897 = 0u;
+            ^
+program_source:902:13: error: program scope variable must reside in constant address space
+thread uint v898 = 0u;
+            ^
+program_source:903:13: error: program scope variable must reside in constant address space
+thread uint v899 = 0u;
+            ^
+program_source:904:13: error: program scope variable must reside in constant address space
+thread uint v900 = 0u;
+            ^
+program_source:905:13: error: program scope variable must reside in constant address space
+thread uint v901 = 0u;
+            ^
+program_source:906:13: error: program scope variable must reside in constant address space
+thread uint v902 = 0u;
+            ^
+program_source:907:13: error: program scope variable must reside in constant address space
+thread uint v903 = 0u;
+            ^
+program_source:908:13: error: program scope variable must reside in constant address space
+thread uint v904 = 0u;
+            ^
+program_source:909:13: error: program scope variable must reside in constant address space
+thread uint v905 = 0u;
+            ^
+program_source:910:13: error: program scope variable must reside in constant address space
+thread uint v906 = 0u;
+            ^
+program_source:911:13: error: program scope variable must reside in constant address space
+thread uint v907 = 0u;
+            ^
+program_source:912:13: error: program scope variable must reside in constant address space
+thread uint v908 = 0u;
+            ^
+program_source:913:13: error: program scope variable must reside in constant address space
+thread uint v909 = 0u;
+            ^
+program_source:914:13: error: program scope variable must reside in constant address space
+thread uint v910 = 0u;
+            ^
+program_source:915:13: error: program scope variable must reside in constant address space
+thread uint v911 = 0u;
+            ^
+program_source:916:13: error: program scope variable must reside in constant address space
+thread uint v912 = 0u;
+            ^
+program_source:917:13: error: program scope variable must reside in constant address space
+thread uint v913 = 0u;
+            ^
+program_source:918:13: error: program scope variable must reside in constant address space
+thread uint v914 = 0u;
+            ^
+program_source:919:13: error: program scope variable must reside in constant address space
+thread uint v915 = 0u;
+            ^
+program_source:920:13: error: program scope variable must reside in constant address space
+thread uint v916 = 0u;
+            ^
+program_source:921:13: error: program scope variable must reside in constant address space
+thread uint v917 = 0u;
+            ^
+program_source:922:13: error: program scope variable must reside in constant address space
+thread uint v918 = 0u;
+            ^
+program_source:923:13: error: program scope variable must reside in constant address space
+thread uint v919 = 0u;
+            ^
+program_source:924:13: error: program scope variable must reside in constant address space
+thread uint v920 = 0u;
+            ^
+program_source:925:13: error: program scope variable must reside in constant address space
+thread uint v921 = 0u;
+            ^
+program_source:926:13: error: program scope variable must reside in constant address space
+thread uint v922 = 0u;
+            ^
+program_source:927:13: error: program scope variable must reside in constant address space
+thread uint v923 = 0u;
+            ^
+program_source:928:13: error: program scope variable must reside in constant address space
+thread uint v924 = 0u;
+            ^
+program_source:929:13: error: program scope variable must reside in constant address space
+thread uint v925 = 0u;
+            ^
+program_source:930:13: error: program scope variable must reside in constant address space
+thread uint v926 = 0u;
+            ^
+program_source:931:13: error: program scope variable must reside in constant address space
+thread uint v927 = 0u;
+            ^
+program_source:932:13: error: program scope variable must reside in constant address space
+thread uint v928 = 0u;
+            ^
+program_source:933:13: error: program scope variable must reside in constant address space
+thread uint v929 = 0u;
+            ^
+program_source:934:13: error: program scope variable must reside in constant address space
+thread uint v930 = 0u;
+            ^
+program_source:935:13: error: program scope variable must reside in constant address space
+thread uint v931 = 0u;
+            ^
+program_source:936:13: error: program scope variable must reside in constant address space
+thread uint v932 = 0u;
+            ^
+program_source:937:13: error: program scope variable must reside in constant address space
+thread uint v933 = 0u;
+            ^
+program_source:938:13: error: program scope variable must reside in constant address space
+thread uint v934 = 0u;
+            ^
+program_source:939:13: error: program scope variable must reside in constant address space
+thread uint v935 = 0u;
+            ^
+program_source:940:13: error: program scope variable must reside in constant address space
+thread uint v936 = 0u;
+            ^
+program_source:941:13: error: program scope variable must reside in constant address space
+thread uint v937 = 0u;
+            ^
+program_source:942:13: error: program scope variable must reside in constant address space
+thread uint v938 = 0u;
+            ^
+program_source:943:13: error: program scope variable must reside in constant address space
+thread uint v939 = 0u;
+            ^
+program_source:944:13: error: program scope variable must reside in constant address space
+thread uint v940 = 0u;
+            ^
+program_source:945:13: error: program scope variable must reside in constant address space
+thread uint v941 = 0u;
+            ^
+program_source:946:13: error: program scope variable must reside in constant address space
+thread uint v942 = 0u;
+            ^
+program_source:947:13: error: program scope variable must reside in constant address space
+thread uint v943 = 0u;
+            ^
+program_source:948:13: error: program scope variable must reside in constant address space
+thread uint v944 = 0u;
+            ^
+program_source:949:13: error: program scope variable must reside in constant address space
+thread uint v945 = 0u;
+            ^
+program_source:950:13: error: program scope variable must reside in constant address space
+thread uint v946 = 0u;
+            ^
+program_source:951:13: error: program scope variable must reside in constant address space
+thread uint v947 = 0u;
+            ^
+program_source:952:13: error: program scope variable must reside in constant address space
+thread uint v948 = 0u;
+            ^
+program_source:953:13: error: program scope variable must reside in constant address space
+thread uint v949 = 0u;
+            ^
+program_source:954:13: error: program scope variable must reside in constant address space
+thread uint v950 = 0u;
+            ^
+program_source:955:13: error: program scope variable must reside in constant address space
+thread uint v951 = 0u;
+            ^
+program_source:956:13: error: program scope variable must reside in constant address space
+thread uint v952 = 0u;
+            ^
+program_source:957:13: error: program scope variable must reside in constant address space
+thread uint v953 = 0u;
+            ^
+program_source:958:13: error: program scope variable must reside in constant address space
+thread uint v954 = 0u;
+            ^
+program_source:959:13: error: program scope variable must reside in constant address space
+thread uint v955 = 0u;
+            ^
+program_source:960:13: error: program scope variable must reside in constant address space
+thread uint v956 = 0u;
+            ^
+program_source:961:13: error: program scope variable must reside in constant address space
+thread uint v957 = 0u;
+            ^
+program_source:962:13: error: program scope variable must reside in constant address space
+thread uint v958 = 0u;
+            ^
+program_source:963:13: error: program scope variable must reside in constant address space
+thread uint v959 = 0u;
+            ^
+program_source:964:13: error: program scope variable must reside in constant address space
+thread uint v960 = 0u;
+            ^
+program_source:965:13: error: program scope variable must reside in constant address space
+thread uint v961 = 0u;
+            ^
+program_source:966:13: error: program scope variable must reside in constant address space
+thread uint v962 = 0u;
+            ^
+program_source:967:13: error: program scope variable must reside in constant address space
+thread uint v963 = 0u;
+            ^
+program_source:968:13: error: program scope variable must reside in constant address space
+thread uint v964 = 0u;
+            ^
+program_source:969:13: error: program scope variable must reside in constant address space
+thread uint v965 = 0u;
+            ^
+program_source:970:13: error: program scope variable must reside in constant address space
+thread uint v966 = 0u;
+            ^
+program_source:971:13: error: program scope variable must reside in constant address space
+thread uint v967 = 0u;
+            ^
+program_source:972:13: error: program scope variable must reside in constant address space
+thread uint v968 = 0u;
+            ^
+program_source:973:13: error: program scope variable must reside in constant address space
+thread uint v969 = 0u;
+            ^
+program_source:974:13: error: program scope variable must reside in constant address space
+thread uint v970 = 0u;
+            ^
+program_source:975:13: error: program scope variable must reside in constant address space
+thread uint v971 = 0u;
+            ^
+program_source:976:13: error: program scope variable must reside in constant address space
+thread uint v972 = 0u;
+            ^
+program_source:977:13: error: program scope variable must reside in constant address space
+thread uint v973 = 0u;
+            ^
+program_source:978:13: error: program scope variable must reside in constant address space
+thread uint v974 = 0u;
+            ^
+program_source:979:13: error: program scope variable must reside in constant address space
+thread uint v975 = 0u;
+            ^
+program_source:980:13: error: program scope variable must reside in constant address space
+thread uint v976 = 0u;
+            ^
+program_source:981:13: error: program scope variable must reside in constant address space
+thread uint v977 = 0u;
+            ^
+program_source:982:13: error: program scope variable must reside in constant address space
+thread uint v978 = 0u;
+            ^
+program_source:983:13: error: program scope variable must reside in constant address space
+thread uint v979 = 0u;
+            ^
+program_source:984:13: error: program scope variable must reside in constant address space
+thread uint v980 = 0u;
+            ^
+program_source:985:13: error: program scope variable must reside in constant address space
+thread uint v981 = 0u;
+            ^
+program_source:986:13: error: program scope variable must reside in constant address space
+thread uint v982 = 0u;
+            ^
+program_source:987:13: error: program scope variable must reside in constant address space
+thread uint v983 = 0u;
+            ^
+program_source:988:13: error: program scope variable must reside in constant address space
+thread uint v984 = 0u;
+            ^
+program_source:989:13: error: program scope variable must reside in constant address space
+thread uint v985 = 0u;
+            ^
+program_source:990:13: error: program scope variable must reside in constant address space
+thread uint v986 = 0u;
+            ^
+program_source:991:13: error: program scope variable must reside in constant address space
+thread uint v987 = 0u;
+            ^
+program_source:992:13: error: program scope variable must reside in constant address space
+thread uint v988 = 0u;
+            ^
+program_source:993:13: error: program scope variable must reside in constant address space
+thread uint v989 = 0u;
+            ^
+program_source:994:13: error: program scope variable must reside in constant address space
+thread uint v990 = 0u;
+            ^
+program_source:995:13: error: program scope variable must reside in constant address space
+thread uint v991 = 0u;
+            ^
+program_source:996:13: error: program scope variable must reside in constant address space
+thread uint v992 = 0u;
+            ^
+program_source:997:13: error: program scope variable must reside in constant address space
+thread uint v993 = 0u;
+            ^
+program_source:998:13: error: program scope variable must reside in constant address space
+thread uint v994 = 0u;
+            ^
+program_source:999:13: error: program scope variable must reside in constant address space
+thread uint v995 = 0u;
+            ^
+program_source:1000:13: error: program scope variable must reside in constant address space
+thread uint v996 = 0u;
+            ^
+program_source:1001:13: error: program scope variable must reside in constant address space
+thread uint v997 = 0u;
+            ^
+program_source:1002:13: error: program scope variable must reside in constant address space
+thread uint v998 = 0u;
+            ^
+program_source:1003:13: error: program scope variable must reside in constant address space
+thread uint v999 = 0u;
+            ^
+
diff --git a/test/tint/bug/tint/1520.spvasm.expected.ir.msl b/test/tint/bug/tint/1520.spvasm.expected.ir.msl
index 68dff4c..c1cce03 100644
--- a/test/tint/bug/tint/1520.spvasm.expected.ir.msl
+++ b/test/tint/bug/tint/1520.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: UniformBuffer = struct @align(16) {
+../../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)
@@ -11,15 +11,15 @@
   sk_FragColor_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%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
@@ -31,76 +31,86 @@
     %x_66:ptr<function, bool, read_write> = var
     %15:ptr<uniform, f32, read> = access %x_4, 0u
     %16:f32 = load %15
-    %x_27:i32 = convert %16
+    %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 = block {  # true
-        %18:vec4<i32> = construct %x_27
-        %19:vec4<i32> = div vec4<i32>(0i), %18
-        %20:vec4<bool> = eq %19, vec4<i32>(0i)
-        %21:bool = all %20
-        store %x_40, %21
-        %22:bool = load %x_40
-        store %x_41, %22
+    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
       }
     }
-    %23:bool = load %x_41
-    store %ok, %23
-    %x_44:vec4<i32> = construct %x_27
+    %26:bool = load %x_41
+    store %ok, %26
+    %27:vec4<i32> = construct %x_27
+    %x_44:vec4<i32> = let %27
     store %val, %x_44
-    %x_47:vec4<i32> = add %x_44, vec4<i32>(1i)
+    %29:vec4<i32> = add %x_44, vec4<i32>(1i)
+    %x_47:vec4<i32> = let %29
     store %val, %x_47
-    %x_48:vec4<i32> = sub %x_47, vec4<i32>(1i)
+    %31:vec4<i32> = sub %x_47, vec4<i32>(1i)
+    %x_48:vec4<i32> = let %31
     store %val, %x_48
-    %x_49:vec4<i32> = add %x_48, vec4<i32>(1i)
+    %33:vec4<i32> = add %x_48, vec4<i32>(1i)
+    %x_49:vec4<i32> = let %33
     store %val, %x_49
-    %x_50:vec4<i32> = sub %x_49, vec4<i32>(1i)
+    %35:vec4<i32> = sub %x_49, vec4<i32>(1i)
+    %x_50:vec4<i32> = let %35
     store %val, %x_50
     store %x_55, false
-    %29:bool = load %x_41
-    if %29 [t: %b4] {  # if_2
-      %b4 = block {  # true
-        %30:vec4<bool> = eq %x_50, %x_44
-        %31:bool = all %30
-        store %x_54, %31
-        %32:bool = load %x_54
-        store %x_55, %32
+    %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
       }
     }
-    %33:bool = load %x_55
-    store %ok, %33
-    %x_58:vec4<i32> = mul %x_50, vec4<i32>(2i)
+    %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
-    %x_59:vec4<i32> = div %x_58, vec4<i32>(2i)
+    %44:vec4<i32> = call %tint_div_v4i32, %x_58, vec4<i32>(2i)
+    %x_59:vec4<i32> = let %44
     store %val, %x_59
-    %x_60:vec4<i32> = mul %x_59, vec4<i32>(2i)
+    %46:vec4<i32> = mul %x_59, vec4<i32>(2i)
+    %x_60:vec4<i32> = let %46
     store %val, %x_60
-    %x_61:vec4<i32> = div %x_60, vec4<i32>(2i)
+    %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
-    %38:bool = load %x_55
-    if %38 [t: %b5] {  # if_3
-      %b5 = block {  # true
-        %39:vec4<bool> = eq %x_61, %x_44
-        %40:bool = all %39
-        store %x_65, %40
-        %41:bool = load %x_65
-        store %x_66, %41
+    %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
       }
     }
-    %42:bool = load %x_66
-    store %ok, %42
-    %43:bool = load %x_66
-    ret %43
+    %54:bool = load %x_66
+    store %ok, %54
+    %55:bool = load %x_66
+    ret %55
   }
 }
-%main_1 = func():void -> %b6 {
-  %b6 = block {
+%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
@@ -115,114 +125,147 @@
     %x_111:ptr<function, bool, read_write> = var
     %x_114:ptr<function, bool, read_write> = var
     %x_115:ptr<function, bool, read_write> = var
-    %59:vec4<f32> = load %vcolor_S0
-    store %outputColor_S0, %59
-    %60:ptr<uniform, f32, read> = access %x_4, 0u
-    %x_77:f32 = load %60
+    %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 = block {  # true
-        %62:vec4<f32> = construct %x_77
-        %63:vec4<f32> = div vec4<f32>(0.0f), %62
-        %64:vec4<bool> = eq %63, vec4<f32>(0.0f)
-        %65:bool = all %64
-        store %x_86, %65
-        %66:bool = load %x_86
-        store %x_87, %66
+    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
       }
     }
-    %67:bool = load %x_87
-    store %x_9_ok, %67
-    %x_89:vec4<f32> = construct %x_77
+    %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
-    %x_92:vec4<f32> = add %x_89, vec4<f32>(1.0f)
+    %83:vec4<f32> = add %x_89, vec4<f32>(1.0f)
+    %x_92:vec4<f32> = let %83
     store %x_10_val, %x_92
-    %x_93:vec4<f32> = sub %x_92, vec4<f32>(1.0f)
+    %85:vec4<f32> = sub %x_92, vec4<f32>(1.0f)
+    %x_93:vec4<f32> = let %85
     store %x_10_val, %x_93
-    %x_94:vec4<f32> = add %x_93, vec4<f32>(1.0f)
+    %87:vec4<f32> = add %x_93, vec4<f32>(1.0f)
+    %x_94:vec4<f32> = let %87
     store %x_10_val, %x_94
-    %x_95:vec4<f32> = sub %x_94, vec4<f32>(1.0f)
+    %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
-    %73:bool = load %x_87
-    if %73 [t: %b8] {  # if_5
-      %b8 = block {  # true
-        %74:vec4<bool> = eq %x_95, %x_89
-        %75:bool = all %74
-        store %x_99, %75
-        %76:bool = load %x_99
-        store %x_100, %76
+    %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
       }
     }
-    %77:bool = load %x_100
-    store %x_9_ok, %77
-    %x_103:vec4<f32> = mul %x_95, vec4<f32>(2.0f)
+    %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
-    %x_104:vec4<f32> = div %x_103, vec4<f32>(2.0f)
+    %98:vec4<f32> = div %x_103, vec4<f32>(2.0f)
+    %x_104:vec4<f32> = let %98
     store %x_10_val, %x_104
-    %x_105:vec4<f32> = mul %x_104, vec4<f32>(2.0f)
+    %100:vec4<f32> = mul %x_104, vec4<f32>(2.0f)
+    %x_105:vec4<f32> = let %100
     store %x_10_val, %x_105
-    %x_106:vec4<f32> = div %x_105, vec4<f32>(2.0f)
+    %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
-    %82:bool = load %x_100
-    if %82 [t: %b9] {  # if_6
-      %b9 = block {  # true
-        %83:vec4<bool> = eq %x_106, %x_89
-        %84:bool = all %83
-        store %x_110, %84
-        %85:bool = load %x_110
-        store %x_111, %85
+    %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
       }
     }
-    %86:bool = load %x_111
-    store %x_9_ok, %86
+    %108:bool = load %x_111
+    store %x_9_ok, %108
     store %x_115, false
-    %87:bool = load %x_111
-    if %87 [t: %b10] {  # if_7
-      %b10 = block {  # true
-        %88:bool = call %test_int_S1_c0_b
-        store %x_114, %88
-        %89:bool = load %x_114
-        store %x_115, %89
+    %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
       }
     }
-    %90:bool = load %x_115
-    if %90 [t: %b11, f: %b12] {  # if_8
-      %b11 = block {  # true
-        %91:ptr<uniform, vec4<f32>, read> = access %x_4, 2u
-        %92:vec4<f32> = load %91
-        store %x_116, %92
+    %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 = block {  # false
-        %93:ptr<uniform, vec4<f32>, read> = access %x_4, 1u
-        %94:vec4<f32> = load %93
-        store %x_116, %94
+      $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
       }
     }
-    %x_125:vec4<f32> = load %x_116
-    %96:vec4<f32> = load %x_116
-    store %output_S1, %96
+    %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
   }
 }
-%tint_symbol = @fragment func(%sk_Clockwise_param:bool [@front_facing], %vcolor_S0_param:vec4<f32> [@location(0)]):main_out -> %b13 {
-  %b13 = block {
+%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
-    %100:void = call %main_1
-    %101:vec4<f32> = load %sk_FragColor
-    %102:main_out = construct %101
-    ret %102
+    %123:void = call %main_1
+    %124:vec4<f32> = load %sk_FragColor
+    %125:main_out = construct %124
+    ret %125
+  }
+}
+%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
+  }
+}
+%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
   }
 }
 
diff --git a/test/tint/bug/tint/1534.wgsl.expected.ir.msl b/test/tint/bug/tint/1534.wgsl.expected.ir.msl
index e48bbc6..d9246b1 100644
--- a/test/tint/bug/tint/1534.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/1534.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: g = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: g = struct @align(16) {
   a:vec3<u32> @offset(0)
 }
 
@@ -8,22 +8,23 @@
   a:u32 @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %i:ptr<uniform, g, read> = var @binding_point(0, 0)
   %j:ptr<storage, h, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:ptr<uniform, vec3<u32>, read> = access %i, 0u
     %5:vec3<u32> = load %4
     %6:ptr<uniform, vec3<u32>, read> = access %i, 0u
     %7:vec3<u32> = load %6
-    %l:u32 = dot %5, %7
-    %9:ptr<storage, u32, read_write> = access %j, 0u
-    %10:ptr<uniform, vec3<u32>, read> = access %i, 0u
-    %11:u32 = load_vector_element %10, 0u
-    store %9, %11
+    %8:u32 = dot %5, %7
+    %l:u32 = let %8
+    %10:ptr<storage, u32, read_write> = access %j, 0u
+    %11:ptr<uniform, vec3<u32>, read> = access %i, 0u
+    %12:u32 = load_vector_element %11, 0u
+    store %10, %12
     ret
   }
 }
diff --git a/test/tint/bug/tint/1538.wgsl.expected.ir.msl b/test/tint/bug/tint/1538.wgsl.expected.ir.msl
index d5572fe..ffbff32 100644
--- a/test/tint/bug/tint/1538.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/1538.wgsl.expected.ir.msl
@@ -1,49 +1,47 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %buf:ptr<storage, array<u32, 1>, read_write> = var @binding_point(0, 1)
 }
 
-%g = func():i32 -> %b2 {
-  %b2 = block {
+%g = func():i32 {
+  $B2: {
     ret 0i
   }
 }
-%f = func():i32 -> %b3 {
-  %b3 = block {
-    loop [b: %b4, c: %b5] {  # loop_1
-      %b4 = block {  # body
+%f = func():i32 {
+  $B3: {
+    loop [b: $B4] {  # loop_1
+      $B4: {  # body
         %4:i32 = call %g
         exit_loop  # loop_1
       }
-      %b5 = block {  # continuing
-        next_iteration %b4
-      }
     }
-    %o:i32 = call %g
+    %5:i32 = call %g
+    %o:i32 = let %5
     ret 0i
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {
-  %b6 = block {
-    loop [b: %b7, c: %b8] {  # loop_2
-      %b7 = block {  # body
-        %7:ptr<storage, u32, read_write> = access %buf, 0i
-        %8:u32 = load %7
-        %9:bool = eq %8, 0u
-        if %9 [t: %b9] {  # if_1
-          %b9 = block {  # true
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    loop [b: $B6, c: $B7] {  # loop_2
+      $B6: {  # body
+        %8:ptr<storage, u32, read_write> = access %buf, 0i
+        %9:u32 = load %8
+        %10:bool = eq %9, 0u
+        if %10 [t: $B8] {  # if_1
+          $B8: {  # true
             exit_loop  # loop_2
           }
         }
-        %10:i32 = call %f
-        %s:ptr<function, i32, read_write> = var, %10
-        %12:ptr<storage, u32, read_write> = access %buf, 0i
-        store %12, 0u
-        continue %b8
+        %11:i32 = call %f
+        %s:ptr<function, i32, read_write> = var, %11
+        %13:ptr<storage, u32, read_write> = access %buf, 0i
+        store %13, 0u
+        continue  # -> $B7
       }
-      %b8 = block {  # continuing
-        next_iteration %b7
+      $B7: {  # continuing
+        next_iteration  # -> $B6
       }
     }
     ret
diff --git a/test/tint/bug/tint/1540.wgsl.expected.ir.msl b/test/tint/bug/tint/1540.wgsl.expected.ir.msl
index 16b8883..e05be48 100644
--- a/test/tint/bug/tint/1540.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/1540.wgsl.expected.ir.msl
@@ -6,7 +6,18 @@
   bool e;
 };
 
-void tint_symbol() {
+kernel void tint_symbol() {
   bool b = false;
   S v = {.e=(true & b)};
 }
+program_source:9:13: error: non-constant-expression cannot be narrowed from type 'int' to 'bool' in initializer list [-Wc++11-narrowing]
+  S v = {.e=(true & b)};
+            ^~~~~~~~~~
+program_source:9:13: note: insert an explicit cast to silence this issue
+  S v = {.e=(true & b)};
+            ^~~~~~~~~~
+            static_cast<bool>( )
+program_source:9:5: warning: unused variable 'v' [-Wunused-variable]
+  S v = {.e=(true & b)};
+    ^
+
diff --git a/test/tint/bug/tint/1541.wgsl.expected.ir.msl b/test/tint/bug/tint/1541.wgsl.expected.ir.msl
index b38060a..19fa371 100644
--- a/test/tint/bug/tint/1541.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/1541.wgsl.expected.ir.msl
@@ -1,9 +1,19 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+kernel void tint_symbol() {
+  bool const a = true;
+  bool v = select((a & true), true, false);
+}
+program_source:6:12: error: call to 'select' is ambiguous
+  bool v = select((a & true), true, false);
+           ^~~~~~
+/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/32023/Libraries/lib/clang/32023.194/include/metal/metal_relational:780:17: note: candidate function
+METAL_FUNC bool select(bool x, bool y, bool c)
+                ^
+/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/32023/Libraries/lib/clang/32023.194/include/metal/metal_relational:920:16: note: candidate function
+METAL_FUNC int select(int x, int y, bool c)
+               ^
+
diff --git a/test/tint/bug/tint/1542.wgsl.expected.ir.msl b/test/tint/bug/tint/1542.wgsl.expected.ir.msl
index ed2e4e0..d403947 100644
--- a/test/tint/bug/tint/1542.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/1542.wgsl.expected.ir.msl
@@ -1,18 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: UniformBuffer = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: UniformBuffer = struct @align(16) {
   d:vec3<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u_input:ptr<uniform, UniformBuffer, read> = var @binding_point(0, 0)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %3:ptr<uniform, vec3<i32>, read> = access %u_input, 0u
     %4:vec3<i32> = load %3
-    %temp:vec3<i32> = shiftl %4, vec3<u32>(0u)
+    %5:vec3<u32> = and vec3<u32>(0u), vec3<u32>(31u)
+    %6:vec3<i32> = shl %4, %5
+    %temp:vec3<i32> = let %6
     ret
   }
 }
diff --git a/test/tint/bug/tint/1557.wgsl.expected.ir.msl b/test/tint/bug/tint/1557.wgsl.expected.ir.msl
index 46647fd..8598d3b 100644
--- a/test/tint/bug/tint/1557.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/1557.wgsl.expected.ir.msl
@@ -1,23 +1,23 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %u:ptr<uniform, i32, read> = var @binding_point(0, 0)
 }
 
-%f = func():i32 -> %b2 {
-  %b2 = block {
+%f = func():i32 {
+  $B2: {
     ret 0i
   }
 }
-%g = func():void -> %b3 {
-  %b3 = block {
+%g = func():void {
+  $B3: {
     %j:ptr<function, i32, read_write> = var, 0i
-    loop [b: %b4, c: %b5] {  # loop_1
-      %b4 = block {  # body
+    loop [b: $B4, c: $B5] {  # loop_1
+      $B4: {  # body
         %5:i32 = load %j
         %6:bool = gte %5, 1i
-        if %6 [t: %b6] {  # if_1
-          %b6 = block {  # true
+        if %6 [t: $B6] {  # if_1
+          $B6: {  # true
             exit_loop  # loop_1
           }
         }
@@ -26,33 +26,33 @@
         store %j, %8
         %9:i32 = call %f
         %k:ptr<function, i32, read_write> = var, %9
-        continue %b5
+        continue  # -> $B5
       }
-      %b5 = block {  # continuing
-        next_iteration %b4
+      $B5: {  # continuing
+        next_iteration  # -> $B4
       }
     }
     ret
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b7 {
-  %b7 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B7: {
     %12:i32 = load %u
-    switch %12 [c: (0i, %b8), c: (default, %b9)] {  # switch_1
-      %b8 = block {  # case
+    switch %12 [c: (0i, $B8), c: (default, $B9)] {  # switch_1
+      $B8: {  # case
         %13:i32 = load %u
-        switch %13 [c: (0i, %b10), c: (default, %b11)] {  # switch_2
-          %b10 = block {  # case
+        switch %13 [c: (0i, $B10), c: (default, $B11)] {  # switch_2
+          $B10: {  # case
             exit_switch  # switch_2
           }
-          %b11 = block {  # case
+          $B11: {  # case
             %14:void = call %g
             exit_switch  # switch_2
           }
         }
         exit_switch  # switch_1
       }
-      %b9 = block {  # case
+      $B9: {  # case
         exit_switch  # switch_1
       }
     }
diff --git a/test/tint/bug/tint/1563.wgsl.expected.ir.msl b/test/tint/bug/tint/1563.wgsl.expected.ir.msl
index 6d165d3..40ec97c 100644
--- a/test/tint/bug/tint/1563.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/1563.wgsl.expected.ir.msl
@@ -1,10 +1,9 @@
-#include <metal_stdlib>
-using namespace metal;
+SKIP: FAILED
 
-float foo() {
-  int const oob = 99;
-  float const b = float4(0.0f)[oob];
-  float4 v = 0.0f;
-  v[oob] = b;
-  return b;
-}
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: min
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix 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/1573.wgsl.expected.ir.msl b/test/tint/bug/tint/1573.wgsl.expected.ir.msl
index 5c3788e..115852e 100644
--- a/test/tint/bug/tint/1573.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/1573.wgsl.expected.ir.msl
@@ -1,19 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: __atomic_compare_exchange_result_u32 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: __atomic_compare_exchange_result_u32 = struct @align(4) {
   old_value:u32 @offset(0)
   exchanged:bool @offset(4)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %a:ptr<storage, atomic<u32>, read_write> = var @binding_point(0, 0)
 }
 
-%tint_symbol = @compute @workgroup_size(16, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(16, 1, 1) func():void {
+  $B2: {
     %value:ptr<function, u32, read_write> = var, 42u
     %4:u32 = load %value
-    %result:__atomic_compare_exchange_result_u32 = atomicCompareExchangeWeak %a, 0u, %4
+    %5:__atomic_compare_exchange_result_u32 = atomicCompareExchangeWeak %a, 0u, %4
+    %result:__atomic_compare_exchange_result_u32 = let %5
     ret
   }
 }
diff --git a/test/tint/bug/tint/1574.wgsl.expected.ir.msl b/test/tint/bug/tint/1574.wgsl.expected.ir.msl
index 20bf1cf..e7a21e4 100644
--- a/test/tint/bug/tint/1574.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/1574.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: __atomic_compare_exchange_result_u32 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: __atomic_compare_exchange_result_u32 = struct @align(4) {
   old_value:u32 @offset(0)
   exchanged:bool @offset(4)
 }
@@ -10,43 +10,64 @@
   exchanged:bool @offset(4)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %a_u32:ptr<storage, atomic<u32>, read_write> = var @binding_point(0, 0)
   %a_i32:ptr<storage, atomic<i32>, read_write> = var @binding_point(0, 1)
   %b_u32:ptr<workgroup, atomic<u32>, read_write> = var
   %b_i32:ptr<workgroup, atomic<i32>, read_write> = var
 }
 
-%tint_symbol = @compute @workgroup_size(16, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(16, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B2: {
+    %7:bool = eq %tint_local_index, 0u
+    if %7 [t: $B3] {  # if_1
+      $B3: {  # true
+        %8:void = atomicStore %b_u32, 0u
+        %9:void = atomicStore %b_i32, 0i
+        exit_if  # if_1
+      }
+    }
+    %10:void = msl.threadgroup_barrier 4u
     %value:ptr<function, u32, read_write> = var, 42u
-    %7:u32 = load %value
-    %r1:__atomic_compare_exchange_result_u32 = atomicCompareExchangeWeak %a_u32, 0u, %7
-    %9:u32 = load %value
-    %r2:__atomic_compare_exchange_result_u32 = atomicCompareExchangeWeak %a_u32, 0u, %9
-    %11:u32 = load %value
-    %r3:__atomic_compare_exchange_result_u32 = atomicCompareExchangeWeak %a_u32, 0u, %11
+    %12:u32 = load %value
+    %13:__atomic_compare_exchange_result_u32 = atomicCompareExchangeWeak %a_u32, 0u, %12
+    %r1:__atomic_compare_exchange_result_u32 = let %13
+    %15:u32 = load %value
+    %16:__atomic_compare_exchange_result_u32 = atomicCompareExchangeWeak %a_u32, 0u, %15
+    %r2:__atomic_compare_exchange_result_u32 = let %16
+    %18:u32 = load %value
+    %19:__atomic_compare_exchange_result_u32 = atomicCompareExchangeWeak %a_u32, 0u, %18
+    %r3:__atomic_compare_exchange_result_u32 = let %19
     %value_1:ptr<function, i32, read_write> = var, 42i  # %value_1: 'value'
-    %14:i32 = load %value_1
-    %r1_1:__atomic_compare_exchange_result_i32 = atomicCompareExchangeWeak %a_i32, 0i, %14  # %r1_1: 'r1'
-    %16:i32 = load %value_1
-    %r2_1:__atomic_compare_exchange_result_i32 = atomicCompareExchangeWeak %a_i32, 0i, %16  # %r2_1: 'r2'
-    %18:i32 = load %value_1
-    %r3_1:__atomic_compare_exchange_result_i32 = atomicCompareExchangeWeak %a_i32, 0i, %18  # %r3_1: 'r3'
+    %22:i32 = load %value_1
+    %23:__atomic_compare_exchange_result_i32 = atomicCompareExchangeWeak %a_i32, 0i, %22
+    %r1_1:__atomic_compare_exchange_result_i32 = let %23  # %r1_1: 'r1'
+    %25:i32 = load %value_1
+    %26:__atomic_compare_exchange_result_i32 = atomicCompareExchangeWeak %a_i32, 0i, %25
+    %r2_1:__atomic_compare_exchange_result_i32 = let %26  # %r2_1: 'r2'
+    %28:i32 = load %value_1
+    %29:__atomic_compare_exchange_result_i32 = atomicCompareExchangeWeak %a_i32, 0i, %28
+    %r3_1:__atomic_compare_exchange_result_i32 = let %29  # %r3_1: 'r3'
     %value_2:ptr<function, u32, read_write> = var, 42u  # %value_2: 'value'
-    %21:u32 = load %value_2
-    %r1_2:__atomic_compare_exchange_result_u32 = atomicCompareExchangeWeak %b_u32, 0u, %21  # %r1_2: 'r1'
-    %23:u32 = load %value_2
-    %r2_2:__atomic_compare_exchange_result_u32 = atomicCompareExchangeWeak %b_u32, 0u, %23  # %r2_2: 'r2'
-    %25:u32 = load %value_2
-    %r3_2:__atomic_compare_exchange_result_u32 = atomicCompareExchangeWeak %b_u32, 0u, %25  # %r3_2: 'r3'
+    %32:u32 = load %value_2
+    %33:__atomic_compare_exchange_result_u32 = atomicCompareExchangeWeak %b_u32, 0u, %32
+    %r1_2:__atomic_compare_exchange_result_u32 = let %33  # %r1_2: 'r1'
+    %35:u32 = load %value_2
+    %36:__atomic_compare_exchange_result_u32 = atomicCompareExchangeWeak %b_u32, 0u, %35
+    %r2_2:__atomic_compare_exchange_result_u32 = let %36  # %r2_2: 'r2'
+    %38:u32 = load %value_2
+    %39:__atomic_compare_exchange_result_u32 = atomicCompareExchangeWeak %b_u32, 0u, %38
+    %r3_2:__atomic_compare_exchange_result_u32 = let %39  # %r3_2: 'r3'
     %value_3:ptr<function, i32, read_write> = var, 42i  # %value_3: 'value'
-    %28:i32 = load %value_3
-    %r1_3:__atomic_compare_exchange_result_i32 = atomicCompareExchangeWeak %b_i32, 0i, %28  # %r1_3: 'r1'
-    %30:i32 = load %value_3
-    %r2_3:__atomic_compare_exchange_result_i32 = atomicCompareExchangeWeak %b_i32, 0i, %30  # %r2_3: 'r2'
-    %32:i32 = load %value_3
-    %r3_3:__atomic_compare_exchange_result_i32 = atomicCompareExchangeWeak %b_i32, 0i, %32  # %r3_3: 'r3'
+    %42:i32 = load %value_3
+    %43:__atomic_compare_exchange_result_i32 = atomicCompareExchangeWeak %b_i32, 0i, %42
+    %r1_3:__atomic_compare_exchange_result_i32 = let %43  # %r1_3: 'r1'
+    %45:i32 = load %value_3
+    %46:__atomic_compare_exchange_result_i32 = atomicCompareExchangeWeak %b_i32, 0i, %45
+    %r2_3:__atomic_compare_exchange_result_i32 = let %46  # %r2_3: 'r2'
+    %48:i32 = load %value_3
+    %49:__atomic_compare_exchange_result_i32 = atomicCompareExchangeWeak %b_i32, 0i, %48
+    %r3_3:__atomic_compare_exchange_result_i32 = let %49  # %r3_3: 'r3'
     ret
   }
 }
diff --git a/test/tint/bug/tint/1604.wgsl.expected.ir.msl b/test/tint/bug/tint/1604.wgsl.expected.ir.msl
index 57a9550..51679e2 100644
--- a/test/tint/bug/tint/1604.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/1604.wgsl.expected.ir.msl
@@ -1,25 +1,22 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %x:ptr<uniform, i32, read> = var @binding_point(0, 0)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %3:i32 = load %x
-    switch %3 [c: (0i, %b3), c: (default, %b4)] {  # switch_1
-      %b3 = block {  # case
-        loop [b: %b5, c: %b6] {  # loop_1
-          %b5 = block {  # body
+    switch %3 [c: (0i, $B3), c: (default, $B4)] {  # switch_1
+      $B3: {  # case
+        loop [b: $B5] {  # loop_1
+          $B5: {  # body
             ret
           }
-          %b6 = block {  # continuing
-            next_iteration %b5
-          }
         }
         exit_switch  # switch_1
       }
-      %b4 = block {  # case
+      $B4: {  # case
         exit_switch  # switch_1
       }
     }
diff --git a/test/tint/bug/tint/1605.wgsl.expected.ir.msl b/test/tint/bug/tint/1605.wgsl.expected.ir.msl
index d1a4039..5eee2e1 100644
--- a/test/tint/bug/tint/1605.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/1605.wgsl.expected.ir.msl
@@ -1,67 +1,67 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %b:ptr<uniform, i32, read> = var @binding_point(0, 0)
 }
 
-%func_3 = func():bool -> %b2 {
-  %b2 = block {
-    loop [i: %b3, b: %b4, c: %b5] {  # loop_1
-      %b3 = block {  # initializer
+%func_3 = func():bool {
+  $B2: {
+    loop [i: $B3, b: $B4, c: $B5] {  # loop_1
+      $B3: {  # initializer
         %i:ptr<function, i32, read_write> = var, 0i
-        next_iteration %b4
+        next_iteration  # -> $B4
       }
-      %b4 = block {  # body
+      $B4: {  # body
         %4:i32 = load %i
         %5:i32 = load %b
         %6:bool = lt %4, %5
-        if %6 [t: %b6, f: %b7] {  # if_1
-          %b6 = block {  # true
+        if %6 [t: $B6, f: $B7] {  # if_1
+          $B6: {  # true
             exit_if  # if_1
           }
-          %b7 = block {  # false
+          $B7: {  # false
             exit_loop  # loop_1
           }
         }
-        loop [i: %b8, b: %b9, c: %b10] {  # loop_2
-          %b8 = block {  # initializer
+        loop [i: $B8, b: $B9, c: $B10] {  # loop_2
+          $B8: {  # initializer
             %j:ptr<function, i32, read_write> = var, -1i
-            next_iteration %b9
+            next_iteration  # -> $B9
           }
-          %b9 = block {  # body
+          $B9: {  # body
             %8:i32 = load %j
             %9:bool = eq %8, 1i
-            if %9 [t: %b11, f: %b12] {  # if_2
-              %b11 = block {  # true
+            if %9 [t: $B11, f: $B12] {  # if_2
+              $B11: {  # true
                 exit_if  # if_2
               }
-              %b12 = block {  # false
+              $B12: {  # false
                 exit_loop  # loop_2
               }
             }
             ret false
           }
-          %b10 = block {  # continuing
+          $B10: {  # continuing
             %10:i32 = load %j
             %11:i32 = add %10, 1i
             store %j, %11
-            next_iteration %b9
+            next_iteration  # -> $B9
           }
         }
-        continue %b5
+        continue  # -> $B5
       }
-      %b5 = block {  # continuing
+      $B5: {  # continuing
         %12:i32 = load %i
         %13:i32 = add %12, 1i
         store %i, %13
-        next_iteration %b4
+        next_iteration  # -> $B4
       }
     }
     ret false
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b13 {
-  %b13 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B13: {
     %15:bool = call %func_3
     ret
   }
diff --git a/test/tint/bug/tint/1653.wgsl.expected.ir.msl b/test/tint/bug/tint/1653.wgsl.expected.ir.msl
index 28251dc..f204da4 100644
--- a/test/tint/bug/tint/1653.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/1653.wgsl.expected.ir.msl
@@ -1,9 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#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];
+};
+
+
+vertex float4 vs_main(uint in_vertex_index [[]]) {
+  return tint_array<float4, 3>{float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f)}[in_vertex_index];
+}
+program_source:16:23: error: invalid type 'uint' (aka 'unsigned int') for input declaration in a vertex function
+vertex float4 vs_main(uint in_vertex_index [[]]) {
+                      ^~~~~~~~~~~~~~~~~~~~
+
diff --git a/test/tint/bug/tint/1660.wgsl.expected.ir.msl b/test/tint/bug/tint/1660.wgsl.expected.ir.msl
index cc034c1..ee80ac2 100644
--- a/test/tint/bug/tint/1660.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/1660.wgsl.expected.ir.msl
@@ -16,3 +16,7 @@
 
 
 threadgroup tint_array<float, 2> a;
+program_source:16:34: error: program scope variable must reside in constant address space
+threadgroup tint_array<float, 2> a;
+                                 ^
+
diff --git a/test/tint/bug/tint/1666.wgsl.expected.ir.msl b/test/tint/bug/tint/1666.wgsl.expected.ir.msl
index 27cbf95..854c912 100644
--- a/test/tint/bug/tint/1666.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/1666.wgsl.expected.ir.msl
@@ -1,45 +1,49 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %rarr:ptr<storage, array<f32>, read> = var @binding_point(0, 0)
 }
 
-%vector = func():void -> %b2 {
-  %b2 = block {
+%vector = func():void {
+  $B2: {
     %idx:i32 = let 3i
-    %x:i32 = access vec2<i32>(1i, 2i), %idx
+    %4:i32 = access vec2<i32>(1i, 2i), %idx
+    %x:i32 = let %4
     ret
   }
 }
-%tint_symbol = func():void -> %b3 {
-  %b3 = block {
+%tint_symbol = func():void {
+  $B3: {
     %idx_1:i32 = let 4i  # %idx_1: 'idx'
-    %x_1:vec2<f32> = access mat2x2<f32>(vec2<f32>(1.0f, 2.0f), vec2<f32>(3.0f, 4.0f)), %idx_1  # %x_1: 'x'
+    %8:vec2<f32> = access mat2x2<f32>(vec2<f32>(1.0f, 2.0f), vec2<f32>(3.0f, 4.0f)), %idx_1
+    %x_1:vec2<f32> = let %8  # %x_1: 'x'
     ret
   }
 }
-%fixed_size_array = func():void -> %b4 {
-  %b4 = block {
+%fixed_size_array = func():void {
+  $B4: {
     %arr:array<i32, 2> = let array<i32, 2>(1i, 2i)
     %idx_2:i32 = let 3i  # %idx_2: 'idx'
-    %x_2:i32 = access %arr, %idx_2  # %x_2: 'x'
+    %13:i32 = access %arr, %idx_2
+    %x_2:i32 = let %13  # %x_2: 'x'
     ret
   }
 }
-%runtime_size_array = func():void -> %b5 {
-  %b5 = block {
+%runtime_size_array = func():void {
+  $B5: {
     %idx_3:i32 = let -1i  # %idx_3: 'idx'
-    %14:ptr<storage, f32, read> = access %rarr, %idx_3
-    %x_3:f32 = load %14  # %x_3: 'x'
+    %17:ptr<storage, f32, read> = access %rarr, %idx_3
+    %18:f32 = load %17
+    %x_3:f32 = let %18  # %x_3: 'x'
     ret
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {
-  %b6 = block {
-    %17:void = call %vector
-    %18:void = call %tint_symbol
-    %19:void = call %fixed_size_array
-    %20:void = call %runtime_size_array
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B6: {
+    %21:void = call %vector
+    %22:void = call %tint_symbol
+    %23:void = call %fixed_size_array
+    %24:void = call %runtime_size_array
     ret
   }
 }
diff --git a/test/tint/bug/tint/1677.wgsl.expected.ir.msl b/test/tint/bug/tint/1677.wgsl.expected.ir.msl
index 5b31a9a..78e17ab 100644
--- a/test/tint/bug/tint/1677.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/1677.wgsl.expected.ir.msl
@@ -1,18 +1,19 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Input = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Input = struct @align(16) {
   position:vec3<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %input:ptr<storage, Input, read> = var @binding_point(0, 0)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%id:vec3<u32> [@global_invocation_id]):void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%id:vec3<u32> [@global_invocation_id]):void {
+  $B2: {
     %4:ptr<storage, vec3<i32>, read> = access %input, 0u
     %5:vec3<i32> = load %4
-    %pos:vec3<i32> = sub %5, vec3<i32>(0i)
+    %6:vec3<i32> = sub %5, vec3<i32>(0i)
+    %pos:vec3<i32> = let %6
     ret
   }
 }
diff --git a/test/tint/bug/tint/1703.wgsl.expected.ir.msl b/test/tint/bug/tint/1703.wgsl.expected.ir.msl
index 6b7f0e1..ef1868d 100644
--- a/test/tint/bug/tint/1703.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/1703.wgsl.expected.ir.msl
@@ -1,14 +1,14 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %my_global:ptr<private, vec4<f32>, read_write> = var
   %my_uniform:ptr<uniform, f32, read> = var @binding_point(0, 0)
   %my_texture:ptr<handle, texture_2d<f32>, read> = var @binding_point(0, 1)
   %my_sampler:ptr<handle, sampler, read> = var @binding_point(0, 2)
 }
 
-%foo_member_initialize = func():void -> %b2 {
-  %b2 = block {
+%foo_member_initialize = func():void {
+  $B2: {
     %vb2:ptr<function, vec2<bool>, read_write> = var
     %7:f32 = load_vector_element %my_global, 2u
     %8:bool = neq %7, 0.0f
@@ -21,33 +21,35 @@
     %13:vec2<bool> = construct %12, false
     store %vb2, %13
     %14:bool = load_vector_element %vb2, 0u
-    if %14 [t: %b3] {  # if_1
-      %b3 = block {  # true
+    if %14 [t: $B3] {  # if_1
+      $B3: {  # true
         %15:texture_2d<f32> = load %my_texture
         %16:sampler = load %my_sampler
-        %r:vec4<f32> = textureSampleBias %15, %16, vec2<f32>(0.0f), 0.0f
+        %17:vec4<f32> = textureSampleBias %15, %16, vec2<f32>(0.0f), 0.0f
+        %r:vec4<f32> = let %17
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%foo_default_initialize = func():void -> %b4 {
-  %b4 = block {
+%foo_default_initialize = func():void {
+  $B4: {
     %vb2_1:ptr<function, vec2<bool>, read_write> = var  # %vb2_1: 'vb2'
-    %20:f32 = load_vector_element %my_global, 2u
-    %21:bool = neq %20, 0.0f
-    store_vector_element %vb2_1, 0u, %21
-    %22:f32 = load %my_uniform
-    %23:bool = eq %22, -1.0f
-    store_vector_element %vb2_1, 0u, %23
+    %21:f32 = load_vector_element %my_global, 2u
+    %22:bool = neq %21, 0.0f
+    store_vector_element %vb2_1, 0u, %22
+    %23:f32 = load %my_uniform
+    %24:bool = eq %23, -1.0f
+    store_vector_element %vb2_1, 0u, %24
     store %vb2_1, vec2<bool>(false)
-    %24:bool = load_vector_element %vb2_1, 0u
-    if %24 [t: %b5] {  # if_2
-      %b5 = block {  # true
-        %25:texture_2d<f32> = load %my_texture
-        %26:sampler = load %my_sampler
-        %r_1:vec4<f32> = textureSampleBias %25, %26, vec2<f32>(0.0f), 0.0f  # %r_1: 'r'
+    %25:bool = load_vector_element %vb2_1, 0u
+    if %25 [t: $B5] {  # if_2
+      $B5: {  # true
+        %26:texture_2d<f32> = load %my_texture
+        %27:sampler = load %my_sampler
+        %28:vec4<f32> = textureSampleBias %26, %27, vec2<f32>(0.0f), 0.0f
+        %r_1:vec4<f32> = let %28  # %r_1: 'r'
         exit_if  # if_2
       }
     }
diff --git a/test/tint/bug/tint/1725.wgsl.expected.ir.msl b/test/tint/bug/tint/1725.wgsl.expected.ir.msl
index db84ee6..fd3c2c8 100644
--- a/test/tint/bug/tint/1725.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/1725.wgsl.expected.ir.msl
@@ -1,16 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %tint_symbol:ptr<storage, array<u32>, read> = var @binding_point(0, 0)
 }
 
-%tint_symbol_1 = @compute @workgroup_size(1, 1, 1) func(%tint_symbol_2:u32 [@local_invocation_index]):void -> %b2 {
-  %b2 = block {
+%tint_symbol_1 = @compute @workgroup_size(1, 1, 1) func(%tint_symbol_2:u32 [@local_invocation_index]):void {
+  $B2: {
     %tint_symbol_3:i32 = let 0i
     %tint_symbol_4:i32 = let 0i
     %tint_symbol_5:i32 = let 0i
-    %7:ptr<storage, u32, read> = access %tint_symbol, %tint_symbol_2
-    %tint_symbol_6:u32 = load %7
+    %7:u32 = arrayLength %tint_symbol
+    %8:u32 = sub %7, 1u
+    %9:u32 = min %tint_symbol_2, %8
+    %10:ptr<storage, u32, read> = access %tint_symbol, %9
+    %11:u32 = load %10
+    %tint_symbol_6:u32 = let %11
     ret
   }
 }
diff --git a/test/tint/bug/tint/1735.wgsl.expected.ir.msl b/test/tint/bug/tint/1735.wgsl.expected.ir.msl
index 095be25..d776463 100644
--- a/test/tint/bug/tint/1735.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/1735.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   f:f32 @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %in:ptr<storage, S, read> = var @binding_point(0, 0)
   %out:ptr<storage, S, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:S = load %in
     store %out, %4
     ret
diff --git a/test/tint/bug/tint/1737.wgsl.expected.ir.msl b/test/tint/bug/tint/1737.wgsl.expected.ir.msl
index 28251dc..7f0bf1c 100644
--- a/test/tint/bug/tint/1737.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/1737.wgsl.expected.ir.msl
@@ -1,9 +1,36 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#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];
+};
+
+
+threadgroup tint_array<float, 10> a;
+threadgroup tint_array<float, 20> b;
+void f() {
+  float const x = a[0];
+  float const y = b[0];
+}
+program_source:16:35: error: program scope variable must reside in constant address space
+threadgroup tint_array<float, 10> a;
+                                  ^
+program_source:17:35: error: program scope variable must reside in constant address space
+threadgroup tint_array<float, 20> b;
+                                  ^
+program_source:19:15: warning: unused variable 'x' [-Wunused-variable]
+  float const x = a[0];
+              ^
+program_source:20:15: warning: unused variable 'y' [-Wunused-variable]
+  float const y = b[0];
+              ^
+
diff --git a/test/tint/bug/tint/1739.wgsl.expected.ir.msl b/test/tint/bug/tint/1739.wgsl.expected.ir.msl
index 02a26bb..c9b1023 100644
--- a/test/tint/bug/tint/1739.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/1739.wgsl.expected.ir.msl
@@ -1,32 +1,17 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:626 internal compiler error: %b1 = block {  # root
-  %t:ptr<handle, texture_external, read> = var @binding_point(0, 0)
-  %outImage:ptr<handle, texture_storage_2d<rgba8unorm, write>, read> = var @binding_point(0, 1)
+
+@group(0) @binding(0) var t : texture_external;
+
+@group(0) @binding(1) var outImage : texture_storage_2d<rgba8unorm, write>;
+
+@compute @workgroup_size(1)
+fn tint_symbol() {
+  var red : vec4<f32> = textureLoad(t, vec2<i32>(10, 10));
+  textureStore(outImage, vec2<i32>(0, 0), red);
+  var green : vec4<f32> = textureLoad(t, vec2<i32>(70, 118));
+  textureStore(outImage, vec2<i32>(1, 0), green);
+  return;
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %4:texture_external = load %t
-    %5:vec4<f32> = textureLoad %4, vec2<i32>(10i)
-    %red:ptr<function, vec4<f32>, read_write> = var, %5
-    %7:texture_storage_2d<rgba8unorm, write> = load %outImage
-    %8:vec4<f32> = load %red
-    %9:void = textureStore %7, vec2<i32>(0i), %8
-    %10:texture_external = load %t
-    %11:vec4<f32> = textureLoad %10, vec2<i32>(70i, 118i)
-    %green:ptr<function, vec4<f32>, read_write> = var, %11
-    %13:texture_storage_2d<rgba8unorm, write> = load %outImage
-    %14:vec4<f32> = load %green
-    %15:void = textureStore %13, vec2<i32>(1i, 0i), %14
-    ret
-  }
-}
-
-Multiplanar external texture transform was not run.
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+Failed to generate: error: ExternalTextureOptions missing binding entry for [group: 0, binding: 0]
diff --git a/test/tint/bug/tint/1764.wgsl.expected.ir.msl b/test/tint/bug/tint/1764.wgsl.expected.ir.msl
index 28251dc..3fa6a4b 100644
--- a/test/tint/bug/tint/1764.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/1764.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
+../../src/tint/lang/msl/writer/printer/printer.cc:388 internal compiler error: Switch() matched no cases. Type: tint::core::ir::BlockParam
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/bug/tint/1776.spvasm.expected.ir.msl b/test/tint/bug/tint/1776.spvasm.expected.ir.msl
index 088571d..1c97029 100644
--- a/test/tint/bug/tint/1776.spvasm.expected.ir.msl
+++ b/test/tint/bug/tint/1776.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(16) {
   a:vec4<f32> @offset(0)
   b:i32 @offset(16)
 }
@@ -9,20 +9,21 @@
   inner:array<S> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb:ptr<storage, sb_block, read_write> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %3:ptr<storage, S, read_write> = access %sb, 0u, 1i
-    %x_18:S = load %3
+    %4:S = load %3
+    %x_18:S = let %4
     ret
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
-    %6:void = call %main_1
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
+    %7:void = call %main_1
     ret
   }
 }
diff --git a/test/tint/bug/tint/1776.wgsl.expected.ir.msl b/test/tint/bug/tint/1776.wgsl.expected.ir.msl
index 67ceebb..684cd82 100644
--- a/test/tint/bug/tint/1776.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/1776.wgsl.expected.ir.msl
@@ -1,18 +1,19 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(16) {
   a:vec4<f32> @offset(0)
   b:i32 @offset(16)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb:ptr<storage, array<S>, read> = var @binding_point(0, 0)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %3:ptr<storage, S, read> = access %sb, 1i
-    %x:S = load %3
+    %4:S = load %3
+    %x:S = let %4
     ret
   }
 }
diff --git a/test/tint/bug/tint/1820.wgsl.expected.ir.msl b/test/tint/bug/tint/1820.wgsl.expected.ir.msl
index 47c8fbc..330d80a 100644
--- a/test/tint/bug/tint/1820.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/1820.wgsl.expected.ir.msl
@@ -1,9 +1,41 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread int global = 0;
+void foo(float x) {
+  switch(tint_f32_to_i32(x)) {
+    default:
+    {
+      break;
+    }
+  }
+}
+int baz(int x) {
+  global = 42;
+  return x;
+}
+void bar(float x) {
+  switch(baz(tint_f32_to_i32(x))) {
+    default:
+    {
+      break;
+    }
+  }
+}
+void tint_symbol() {
+}
+int tint_f32_to_i32(float value) {
+  return select(2147483647, select((-2147483647 - 1), int(value), (value >= -2147483648.0f)), (value <= 2147483520.0f));
+}
+program_source:4:12: error: program scope variable must reside in constant address space
+thread int global = 0;
+           ^
+program_source:6:10: error: use of undeclared identifier 'tint_f32_to_i32'
+  switch(tint_f32_to_i32(x)) {
+         ^
+program_source:18:14: error: use of undeclared identifier 'tint_f32_to_i32'
+  switch(baz(tint_f32_to_i32(x))) {
+             ^
+
diff --git a/test/tint/bug/tint/1860.wgsl.expected.ir.msl b/test/tint/bug/tint/1860.wgsl.expected.ir.msl
index 68538df..d6faf5c 100644
--- a/test/tint/bug/tint/1860.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/1860.wgsl.expected.ir.msl
@@ -1,15 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: DeclaredAfterUsage = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: DeclaredAfterUsage = struct @align(4) {
   f:f32 @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %declared_after_usage:ptr<uniform, DeclaredAfterUsage, read> = var @binding_point(0, 0)
 }
 
-%tint_symbol = @vertex func():vec4<f32> [@position] -> %b2 {
-  %b2 = block {
+%tint_symbol = @vertex func():vec4<f32> [@position] {
+  $B2: {
     %3:ptr<uniform, f32, read> = access %declared_after_usage, 0u
     %4:f32 = load %3
     %5:vec4<f32> = construct %4
diff --git a/test/tint/bug/tint/1875.wgsl.expected.ir.msl b/test/tint/bug/tint/1875.wgsl.expected.ir.msl
index de67af0..7e094a4 100644
--- a/test/tint/bug/tint/1875.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/1875.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Outputs = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Outputs = struct @align(4) {
   data:array<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %count:ptr<private, u32, read_write> = var, 0u
   %outputs:ptr<storage, Outputs, read_write> = var @binding_point(0, 1)
 }
 
-%push_output = func(%value:u32):void -> %b2 {
-  %b2 = block {
+%push_output = func(%value:u32):void {
+  $B2: {
     %5:u32 = load %count
     %6:ptr<storage, u32, read_write> = access %outputs, 0u, %5
     store %6, %value
@@ -20,8 +20,8 @@
     ret
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %a:ptr<function, u32, read_write> = var, 0u
     %b:ptr<function, u32, read_write> = var, 10u
     %c:ptr<function, u32, read_write> = var, 4294967294u
diff --git a/test/tint/bug/tint/1926.wgsl.expected.ir.msl b/test/tint/bug/tint/1926.wgsl.expected.ir.msl
index 1ac3e37..c450d39 100644
--- a/test/tint/bug/tint/1926.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/1926.wgsl.expected.ir.msl
@@ -1,23 +1,33 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %sh_atomic_failed:ptr<workgroup, u32, read_write> = var
   %output:ptr<storage, u32, read_write> = var @binding_point(0, 4)
 }
 
-%tint_symbol = @compute @workgroup_size(256, 1, 1) func(%global_id:vec3<u32> [@global_invocation_id], %local_id:vec3<u32> [@local_invocation_id]):void -> %b2 {
-  %b2 = block {
-    %6:void = workgroupBarrier
-    %7:u32 = load %sh_atomic_failed
-    %8:void = workgroupBarrier
-    %9:u32 = access %local_id, 0u
-    %10:bool = eq %9, 0u
-    if %10 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        store %output, %7
+%tint_symbol = @compute @workgroup_size(256, 1, 1) func(%global_id:vec3<u32> [@global_invocation_id], %local_id:vec3<u32> [@local_invocation_id], %tint_local_index:u32 [@local_invocation_index]):void {
+  $B2: {
+    %7:bool = eq %tint_local_index, 0u
+    if %7 [t: $B3] {  # if_1
+      $B3: {  # true
+        store %sh_atomic_failed, 0u
         exit_if  # if_1
       }
     }
+    %8:void = msl.threadgroup_barrier 4u
+    %9:void = msl.threadgroup_barrier 4u
+    %10:u32 = load %sh_atomic_failed
+    %11:u32 = let %10
+    %12:void = msl.threadgroup_barrier 4u
+    %failed:u32 = let %11
+    %14:u32 = access %local_id, 0u
+    %15:bool = eq %14, 0u
+    if %15 [t: $B4] {  # if_2
+      $B4: {  # true
+        store %output, %failed
+        exit_if  # if_2
+      }
+    }
     ret
   }
 }
diff --git a/test/tint/bug/tint/1961.wgsl.expected.ir.msl b/test/tint/bug/tint/1961.wgsl.expected.ir.msl
index 93ca517..0e49291 100644
--- a/test/tint/bug/tint/1961.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/1961.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:268 internal compiler error: Switch() matched no cases. Type: tint::core::ir::If
+../../src/tint/lang/msl/writer/printer/printer.cc:385 internal compiler error: Switch() matched no cases. Type: tint::core::ir::If
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/bug/tint/1963_b.wgsl.expected.ir.msl b/test/tint/bug/tint/1963_b.wgsl.expected.ir.msl
index b271fbb..9eb780f 100644
--- a/test/tint/bug/tint/1963_b.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/1963_b.wgsl.expected.ir.msl
@@ -1,18 +1,19 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: __atomic_compare_exchange_result_i32 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: __atomic_compare_exchange_result_i32 = struct @align(4) {
   old_value:i32 @offset(0)
   exchanged:bool @offset(4)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %a:ptr<storage, atomic<i32>, read_write> = var @binding_point(0, 0)
 }
 
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %3:__atomic_compare_exchange_result_i32 = atomicCompareExchangeWeak %a, 1i, 1i
-    %v:i32 = access %3, 0u
+    %4:i32 = access %3, 0u
+    %v:i32 = let %4
     ret
   }
 }
diff --git a/test/tint/bug/tint/1976.wgsl.expected.ir.msl b/test/tint/bug/tint/1976.wgsl.expected.ir.msl
index 165b340..949e8a4 100644
--- a/test/tint/bug/tint/1976.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/1976.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Results = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Results = struct @align(4) {
   colorSamples:array<f32, 4> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %texture0:ptr<handle, texture_multisampled_2d<f32>, read> = var @binding_point(0, 0)
   %results:ptr<storage, Results, read_write> = var @binding_point(0, 2)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:ptr<storage, f32, read_write> = access %results, 0u, 0i
     %5:texture_multisampled_2d<f32> = load %texture0
     %6:vec4<f32> = textureLoad %5, vec2<i32>(0i), 0i
diff --git a/test/tint/bug/tint/2010.spvasm.expected.ir.msl b/test/tint/bug/tint/2010.spvasm.expected.ir.msl
index 8cd2d6b..252583d 100644
--- a/test/tint/bug/tint/2010.spvasm.expected.ir.msl
+++ b/test/tint/bug/tint/2010.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(8) {
   field0:vec2<f32> @offset(0)
   field1:u32 @offset(8)
 }
@@ -21,7 +21,7 @@
   field0:array<vec4<f32>> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_28:ptr<workgroup, array<S, 4096>, read_write> = var
   %x_34:ptr<workgroup, atomic<u32>, read_write> = var
   %x_35:ptr<workgroup, atomic<u32>, read_write> = var
@@ -33,178 +33,231 @@
   %x_12:ptr<storage, S_4, read_write> = var @binding_point(0, 3)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %x_54:ptr<function, u32, read_write> = var
     %x_58:ptr<function, u32, read_write> = var
     %x_85:ptr<function, vec4<f32>, read_write> = var
     %x_88:ptr<function, u32, read_write> = var
-    %x_52:u32 = load_vector_element %x_3, 0u
+    %15:u32 = load_vector_element %x_3, 0u
+    %x_52:u32 = let %15
     store %x_54, 0u
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %x_55:ptr<function, u32, read_write> = var
-        %17:ptr<uniform, u32, read> = access %x_6, 0u, 0u
-        %18:u32 = load %17
-        store %x_58, %18
-        %19:u32 = load %x_54
-        %20:u32 = load %x_58
-        %21:bool = lt %19, %20
-        if %21 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %18:ptr<uniform, u32, read> = access %x_6, 0u, 0u
+        %19:u32 = load %18
+        store %x_58, %19
+        %20:u32 = load %x_54
+        %21:u32 = load %x_58
+        %22:bool = lt %20, %21
+        if %22 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %22:u32 = load %x_54
-        %x_62:u32 = add %22, %x_52
-        %24:u32 = load %x_58
-        %25:bool = gte %x_62, %24
-        if %25 [t: %b7] {  # if_2
-          %b7 = block {  # true
-            %26:ptr<storage, vec4<f32>, read> = access %x_9, 0u, %x_62
-            %x_67:vec4<f32> = load %26
-            %28:ptr<workgroup, S, read_write> = access %x_28, %x_62
-            %29:vec2<f32> = swizzle %x_67, xy
-            %30:vec2<f32> = swizzle %x_67, zw
-            %31:vec2<f32> = add %29, %30
-            %32:vec2<f32> = mul %31, 0.5f
-            %33:S = construct %32, %x_62
-            store %28, %33
+        %23:u32 = load %x_54
+        %24:u32 = add %23, %x_52
+        %x_62:u32 = let %24
+        %26:u32 = load %x_58
+        %27:bool = gte %x_62, %26
+        if %27 [t: $B7] {  # if_2
+          $B7: {  # true
+            %28:ptr<storage, vec4<f32>, read> = access %x_9, 0u, %x_62
+            %29:vec4<f32> = load %28
+            %x_67:vec4<f32> = let %29
+            %31:ptr<workgroup, S, read_write> = access %x_28, %x_62
+            %32:vec2<f32> = swizzle %x_67, xy
+            %33:vec2<f32> = swizzle %x_67, zw
+            %34:vec2<f32> = add %32, %33
+            %35:vec2<f32> = mul %34, 0.5f
+            %36:S = construct %35, %x_62
+            store %31, %36
             exit_if  # if_2
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %34:u32 = load %x_54
-        %35:u32 = add %34, 32u
-        store %x_55, %35
-        %36:u32 = load %x_55
-        store %x_54, %36
-        next_iteration %b3
+      $B4: {  # continuing
+        %37:u32 = load %x_54
+        %38:u32 = add %37, 32u
+        store %x_55, %38
+        %39:u32 = load %x_55
+        store %x_54, %39
+        next_iteration  # -> $B3
       }
     }
-    %37:void = workgroupBarrier
-    %38:u32 = load %x_58
-    %x_74:i32 = bitcast %38
-    %40:ptr<workgroup, vec2<f32>, read_write> = access %x_28, 0i, 0u
-    %x_76:vec2<f32> = load %40
-    %42:bool = eq %x_52, 0u
-    if %42 [t: %b8] {  # if_3
-      %b8 = block {  # true
-        %x_80:vec2<u32> = bitcast %x_76
-        %x_81:u32 = access %x_80, 0u
-        %45:void = atomicStore %x_34, %x_81
-        %x_82:u32 = access %x_80, 1u
-        %47:void = atomicStore %x_35, %x_82
-        %48:void = atomicStore %x_36, %x_81
-        %49:void = atomicStore %x_37, %x_82
+    %40:void = msl.threadgroup_barrier 4u
+    %41:u32 = load %x_58
+    %42:i32 = bitcast %41
+    %x_74:i32 = let %42
+    %44:ptr<workgroup, vec2<f32>, read_write> = access %x_28, 0i, 0u
+    %45:vec2<f32> = load %44
+    %x_76:vec2<f32> = let %45
+    %47:bool = eq %x_52, 0u
+    if %47 [t: $B8] {  # if_3
+      $B8: {  # true
+        %48:vec2<u32> = bitcast %x_76
+        %x_80:vec2<u32> = let %48
+        %50:u32 = access %x_80, 0u
+        %x_81:u32 = let %50
+        %52:void = atomicStore %x_34, %x_81
+        %53:u32 = access %x_80, 1u
+        %x_82:u32 = let %53
+        %55:void = atomicStore %x_35, %x_82
+        %56:void = atomicStore %x_36, %x_81
+        %57:void = atomicStore %x_37, %x_82
         exit_if  # if_3
       }
     }
-    %50:vec4<f32> = swizzle %x_76, xyxy
-    store %x_85, %50
+    %58:vec4<f32> = swizzle %x_76, xyxy
+    store %x_85, %58
     store %x_88, 1u
-    loop [b: %b9, c: %b10] {  # loop_2
-      %b9 = block {  # body
+    loop [b: $B9, c: $B10] {  # loop_2
+      $B9: {  # body
         %x_111:ptr<function, vec4<f32>, read_write> = var
         %x_86:ptr<function, vec4<f32>, read_write> = var
         %x_89:ptr<function, u32, read_write> = var
-        %x_90:u32 = bitcast %x_74
-        %55:u32 = load %x_88
-        %56:bool = lt %55, %x_90
-        if %56 [t: %b11, f: %b12] {  # if_4
-          %b11 = block {  # true
+        %62:u32 = bitcast %x_74
+        %x_90:u32 = let %62
+        %64:u32 = load %x_88
+        %65:bool = lt %64, %x_90
+        if %65 [t: $B11, f: $B12] {  # if_4
+          $B11: {  # true
             exit_if  # if_4
           }
-          %b12 = block {  # false
+          $B12: {  # false
             exit_loop  # loop_2
           }
         }
-        %57:u32 = load %x_88
-        %x_94:u32 = add %57, %x_52
-        %59:vec4<f32> = load %x_85
-        store %x_86, %59
-        %60:bool = gte %x_94, %x_90
-        if %60 [t: %b13] {  # if_5
-          %b13 = block {  # true
-            %61:ptr<workgroup, vec2<f32>, read_write> = access %x_28, %x_94, 0u
-            %x_99:vec2<f32> = load %61
-            %63:vec4<f32> = load %x_85
-            %64:vec2<f32> = swizzle %63, xy
-            %x_101:vec2<f32> = min %64, %x_99
-            %66:vec4<f32> = load %x_85
-            %x_103_1:ptr<function, vec4<f32>, read_write> = var, %66
-            %68:f32 = access %x_101, 0u
-            store_vector_element %x_103_1, 0u, %68
-            %x_103:vec4<f32> = load %x_103_1
+        %66:u32 = load %x_88
+        %67:u32 = add %66, %x_52
+        %x_94:u32 = let %67
+        %69:vec4<f32> = load %x_85
+        store %x_86, %69
+        %70:bool = gte %x_94, %x_90
+        if %70 [t: $B13] {  # if_5
+          $B13: {  # true
+            %71:ptr<workgroup, vec2<f32>, read_write> = access %x_28, %x_94, 0u
+            %72:vec2<f32> = load %71
+            %x_99:vec2<f32> = let %72
+            %74:vec4<f32> = load %x_85
+            %75:vec2<f32> = swizzle %74, xy
+            %76:vec2<f32> = min %75, %x_99
+            %x_101:vec2<f32> = let %76
+            %78:vec4<f32> = load %x_85
+            %x_103_1:ptr<function, vec4<f32>, read_write> = var, %78
+            %80:f32 = access %x_101, 0u
+            store_vector_element %x_103_1, 0u, %80
+            %81:vec4<f32> = load %x_103_1
+            %x_103:vec4<f32> = let %81
             %x_105_1:ptr<function, vec4<f32>, read_write> = var, %x_103
-            %71:f32 = access %x_101, 1u
-            store_vector_element %x_105_1, 1u, %71
-            %x_105:vec4<f32> = load %x_105_1
-            %73:vec4<f32> = load %x_105_1
-            %74:vec2<f32> = swizzle %73, zw
-            %x_107:vec2<f32> = max %74, %x_99
+            %84:f32 = access %x_101, 1u
+            store_vector_element %x_105_1, 1u, %84
+            %85:vec4<f32> = load %x_105_1
+            %x_105:vec4<f32> = let %85
+            %87:vec4<f32> = load %x_105_1
+            %88:vec2<f32> = swizzle %87, zw
+            %89:vec2<f32> = max %88, %x_99
+            %x_107:vec2<f32> = let %89
             %x_109_1:ptr<function, vec4<f32>, read_write> = var, %x_105
-            %77:f32 = access %x_107, 0u
-            store_vector_element %x_109_1, 2u, %77
-            %78:vec4<f32> = load %x_109_1
-            store %x_111, %78
-            %79:f32 = access %x_107, 1u
-            store_vector_element %x_111, 3u, %79
-            %80:vec4<f32> = load %x_111
-            store %x_86, %80
+            %92:f32 = access %x_107, 0u
+            store_vector_element %x_109_1, 2u, %92
+            %93:vec4<f32> = load %x_109_1
+            store %x_111, %93
+            %94:f32 = access %x_107, 1u
+            store_vector_element %x_111, 3u, %94
+            %95:vec4<f32> = load %x_111
+            store %x_86, %95
             exit_if  # if_5
           }
         }
-        continue %b10
+        continue  # -> $B10
       }
-      %b10 = block {  # continuing
-        %81:u32 = load %x_88
-        %82:u32 = add %81, 32u
-        store %x_89, %82
-        %83:vec4<f32> = load %x_86
-        store %x_85, %83
-        %84:u32 = load %x_89
-        store %x_88, %84
-        next_iteration %b9
+      $B10: {  # continuing
+        %96:u32 = load %x_88
+        %97:u32 = add %96, 32u
+        store %x_89, %97
+        %98:vec4<f32> = load %x_86
+        store %x_85, %98
+        %99:u32 = load %x_89
+        store %x_88, %99
+        next_iteration  # -> $B9
       }
     }
-    %85:void = workgroupBarrier
-    %86:f32 = load_vector_element %x_85, 0u
-    %87:u32 = bitcast %86
-    %x_114:u32 = atomicMin %x_34, %87
-    %89:f32 = load_vector_element %x_85, 1u
-    %90:u32 = bitcast %89
-    %x_117:u32 = atomicMin %x_35, %90
-    %92:f32 = load_vector_element %x_85, 2u
-    %93:u32 = bitcast %92
-    %x_120:u32 = atomicMax %x_36, %93
-    %95:f32 = load_vector_element %x_85, 3u
-    %96:u32 = bitcast %95
-    %x_123:u32 = atomicMax %x_37, %96
-    %98:void = workgroupBarrier
-    %99:ptr<storage, vec4<f32>, read_write> = access %x_12, 0u, 0i
-    %100:u32 = atomicLoad %x_34
-    %101:f32 = bitcast %100
-    %102:u32 = atomicLoad %x_35
-    %103:f32 = bitcast %102
-    %104:u32 = atomicLoad %x_36
-    %105:f32 = bitcast %104
-    %106:u32 = atomicLoad %x_37
-    %107:f32 = bitcast %106
-    %108:vec4<f32> = construct %101, %103, %105, %107
-    store %99, %108
+    %100:void = msl.threadgroup_barrier 4u
+    %101:f32 = load_vector_element %x_85, 0u
+    %102:u32 = bitcast %101
+    %103:u32 = atomicMin %x_34, %102
+    %x_114:u32 = let %103
+    %105:f32 = load_vector_element %x_85, 1u
+    %106:u32 = bitcast %105
+    %107:u32 = atomicMin %x_35, %106
+    %x_117:u32 = let %107
+    %109:f32 = load_vector_element %x_85, 2u
+    %110:u32 = bitcast %109
+    %111:u32 = atomicMax %x_36, %110
+    %x_120:u32 = let %111
+    %113:f32 = load_vector_element %x_85, 3u
+    %114:u32 = bitcast %113
+    %115:u32 = atomicMax %x_37, %114
+    %x_123:u32 = let %115
+    %117:void = msl.threadgroup_barrier 4u
+    %118:ptr<storage, vec4<f32>, read_write> = access %x_12, 0u, 0i
+    %119:u32 = atomicLoad %x_34
+    %120:f32 = bitcast %119
+    %121:f32 = let %120
+    %122:u32 = atomicLoad %x_35
+    %123:f32 = bitcast %122
+    %124:f32 = let %123
+    %125:u32 = atomicLoad %x_36
+    %126:f32 = bitcast %125
+    %127:f32 = let %126
+    %128:u32 = atomicLoad %x_37
+    %129:f32 = bitcast %128
+    %130:vec4<f32> = construct %121, %124, %127, %129
+    store %118, %130
     ret
   }
 }
-%tint_symbol = @compute @workgroup_size(32, 1, 1) func(%x_3_param:vec3<u32> [@local_invocation_id]):void -> %b14 {
-  %b14 = block {
+%tint_symbol = @compute @workgroup_size(32, 1, 1) func(%x_3_param:vec3<u32> [@local_invocation_id], %tint_local_index:u32 [@local_invocation_index]):void {
+  $B14: {
+    %134:bool = eq %tint_local_index, 0u
+    if %134 [t: $B15] {  # if_6
+      $B15: {  # true
+        %135:void = atomicStore %x_34, 0u
+        %136:void = atomicStore %x_35, 0u
+        %137:void = atomicStore %x_36, 0u
+        %138:void = atomicStore %x_37, 0u
+        exit_if  # if_6
+      }
+    }
+    loop [i: $B16, b: $B17, c: $B18] {  # loop_3
+      $B16: {  # initializer
+        next_iteration %tint_local_index  # -> $B17
+      }
+      $B17 (%idx:u32): {  # body
+        %140:bool = gte %idx, 4096u
+        if %140 [t: $B19] {  # if_7
+          $B19: {  # true
+            exit_loop  # loop_3
+          }
+        }
+        %141:ptr<workgroup, S, read_write> = access %x_28, %idx
+        store %141, S(vec2<f32>(0.0f), 0u)
+        continue  # -> $B18
+      }
+      $B18: {  # continuing
+        %142:u32 = add %idx, 32u
+        next_iteration %142  # -> $B17
+      }
+    }
+    %143:void = msl.threadgroup_barrier 4u
     store %x_3, %x_3_param
-    %111:void = call %main_1
+    %144:void = call %main_1
     ret
   }
 }
diff --git a/test/tint/bug/tint/2029.wgsl.expected.ir.msl b/test/tint/bug/tint/2029.wgsl.expected.ir.msl
index 64aab0d..13ca518 100644
--- a/test/tint/bug/tint/2029.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/2029.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %s:ptr<storage, vec3<i32>, read_write> = var @binding_point(0, 0)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     store %s, vec3<i32>(1i)
     ret
   }
diff --git a/test/tint/bug/tint/2038.wgsl.expected.ir.msl b/test/tint/bug/tint/2038.wgsl.expected.ir.msl
index 47702b2..3d6a133 100644
--- a/test/tint/bug/tint/2038.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/2038.wgsl.expected.ir.msl
@@ -1,20 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %output:ptr<storage, array<u32, 2>, read_write> = var @binding_point(0, 0)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    if false [t: %b3] {  # if_1
-      %b3 = block {  # true
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    if false [t: $B3] {  # if_1
+      $B3: {  # true
         %3:ptr<storage, u32, read_write> = access %output, 0i
         store %3, 1u
         exit_if  # if_1
       }
     }
-    if false [t: %b4] {  # if_2
-      %b4 = block {  # true
+    if false [t: $B4] {  # if_2
+      $B4: {  # true
         %4:ptr<storage, u32, read_write> = access %output, 1i
         store %4, 1u
         exit_if  # if_2
diff --git a/test/tint/bug/tint/2039.wgsl.expected.ir.msl b/test/tint/bug/tint/2039.wgsl.expected.ir.msl
new file mode 100644
index 0000000..5cc464b
--- /dev/null
+++ b/test/tint/bug/tint/2039.wgsl.expected.ir.msl
@@ -0,0 +1,33 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+kernel void tint_symbol() {
+  uint out = 0u;
+  {
+    while(true) {
+      switch(2) {
+        case 1:
+        {
+          if true { break; }
+          continue;
+        }
+        default:
+        {
+          break;
+        }
+      }
+      out = (out + 1u);
+      if true { break; }
+      continue;
+    }
+  }
+}
+program_source:11:14: error: expected '(' after 'if'
+          if true { break; }
+             ^
+program_source:20:10: error: expected '(' after 'if'
+      if true { break; }
+         ^
+
diff --git a/test/tint/bug/tint/2052.wgsl.expected.ir.msl b/test/tint/bug/tint/2052.wgsl.expected.ir.msl
index 6f459d5..2e04a91 100644
--- a/test/tint/bug/tint/2052.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/2052.wgsl.expected.ir.msl
@@ -1,6 +1,13 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
+thread bool continue_execution = true;
 void f() {
-  discard_fragment();
+  continue_execution = false;
 }
+program_source:4:13: error: program scope variable must reside in constant address space
+thread bool continue_execution = true;
+            ^
+
diff --git a/test/tint/bug/tint/2054.wgsl.expected.ir.msl b/test/tint/bug/tint/2054.wgsl.expected.ir.msl
index 0df05dd..da129a9 100644
--- a/test/tint/bug/tint/2054.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/2054.wgsl.expected.ir.msl
@@ -1,34 +1,35 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %out:ptr<storage, f32, read_write> = var @binding_point(0, 0)
 }
 
-%bar = func(%p:ptr<function, f32, read_write>):void -> %b2 {
-  %b2 = block {
+%bar = func(%p:ptr<function, f32, read_write>):void {
+  $B2: {
     %a:f32 = let 1.0f
     %b:f32 = let 2.0f
     %6:bool = gte %a, 0.0f
-    %cond:bool = if %6 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    %7:bool = if %6 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         %8:bool = gte %b, 0.0f
         exit_if %8  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         exit_if false  # if_1
       }
     }
-    %9:f32 = select %a, %b, %cond
-    store %p, %9
+    %cond:bool = let %7
+    %10:f32 = select %a, %b, %cond
+    store %p, %10
     ret
   }
 }
-%foo = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%foo = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %param:ptr<function, f32, read_write> = var
-    %12:void = call %bar, %param
-    %13:f32 = load %param
-    store %out, %13
+    %13:void = call %bar, %param
+    %14:f32 = load %param
+    store %out, %14
     ret
   }
 }
diff --git a/test/tint/bug/tint/2059.wgsl.expected.ir.msl b/test/tint/bug/tint/2059.wgsl.expected.ir.msl
index 92a78a7..e0ff29a 100644
--- a/test/tint/bug/tint/2059.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/2059.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(16) {
   m:mat3x3<f32> @offset(0)
 }
 
@@ -16,7 +16,7 @@
   s:array<S, 1> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %buffer0:ptr<storage, mat3x3<f32>, read_write> = var @binding_point(0, 0)
   %buffer1:ptr<storage, S, read_write> = var @binding_point(0, 1)
   %buffer2:ptr<storage, S2, read_write> = var @binding_point(0, 2)
@@ -27,80 +27,215 @@
   %buffer7:ptr<storage, array<S2, 1>, read_write> = var @binding_point(0, 7)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %m:ptr<function, mat3x3<f32>, read_write> = var
-    loop [i: %b3, b: %b4, c: %b5] {  # loop_1
-      %b3 = block {  # initializer
+    loop [i: $B3, b: $B4, c: $B5] {  # loop_1
+      $B3: {  # initializer
         %c:ptr<function, u32, read_write> = var, 0u
-        next_iteration %b4
+        next_iteration  # -> $B4
       }
-      %b4 = block {  # body
+      $B4: {  # body
         %12:u32 = load %c
         %13:bool = lt %12, 3u
-        if %13 [t: %b6, f: %b7] {  # if_1
-          %b6 = block {  # true
+        if %13 [t: $B6, f: $B7] {  # if_1
+          $B6: {  # true
             exit_if  # if_1
           }
-          %b7 = block {  # false
+          $B7: {  # false
             exit_loop  # loop_1
           }
         }
         %14:u32 = load %c
         %15:ptr<function, vec3<f32>, read_write> = access %m, %14
-        %16:u32 = load %c
-        %17:u32 = mul %16, 3u
-        %18:u32 = add %17, 1u
-        %19:f32 = convert %18
-        %20:u32 = load %c
-        %21:u32 = mul %20, 3u
-        %22:u32 = add %21, 2u
-        %23:f32 = convert %22
-        %24:u32 = load %c
-        %25:u32 = mul %24, 3u
-        %26:u32 = add %25, 3u
-        %27:f32 = convert %26
-        %28:vec3<f32> = construct %19, %23, %27
-        store %15, %28
-        continue %b5
+        %16:ptr<function, vec3<f32>, read_write> = let %15
+        %17:u32 = load %c
+        %18:u32 = mul %17, 3u
+        %19:u32 = add %18, 1u
+        %20:f32 = convert %19
+        %21:f32 = let %20
+        %22:u32 = load %c
+        %23:u32 = mul %22, 3u
+        %24:u32 = add %23, 2u
+        %25:f32 = convert %24
+        %26:f32 = let %25
+        %27:u32 = load %c
+        %28:u32 = mul %27, 3u
+        %29:u32 = add %28, 3u
+        %30:f32 = convert %29
+        %31:vec3<f32> = construct %21, %26, %30
+        store %16, %31
+        continue  # -> $B5
       }
-      %b5 = block {  # continuing
-        %29:u32 = load %c
-        %30:u32 = add %29, 1u
-        store %c, %30
-        next_iteration %b4
+      $B5: {  # continuing
+        %32:u32 = load %c
+        %33:u32 = add %32, 1u
+        store %c, %33
+        next_iteration  # -> $B4
       }
     }
-    %a:mat3x3<f32> = load %m
-    store %buffer0, %a
-    %32:mat3x3<f32> = load %m
-    %a_1:S = construct %32  # %a_1: 'a'
-    store %buffer1, %a_1
     %34:mat3x3<f32> = load %m
-    %35:array<mat3x3<f32>, 1> = construct %34
-    %a_2:S2 = construct %35  # %a_2: 'a'
-    store %buffer2, %a_2
-    %37:mat3x3<f32> = load %m
-    %38:S = construct %37
-    %a_3:S3 = construct %38  # %a_3: 'a'
-    store %buffer3, %a_3
-    %40:mat3x3<f32> = load %m
-    %41:S = construct %40
-    %42:array<S, 1> = construct %41
-    %a_4:S4 = construct %42  # %a_4: 'a'
-    store %buffer4, %a_4
-    %44:mat3x3<f32> = load %m
-    %a_5:array<mat3x3<f32>, 1> = construct %44  # %a_5: 'a'
-    store %buffer5, %a_5
-    %46:mat3x3<f32> = load %m
-    %47:S = construct %46
-    %a_6:array<S, 1> = construct %47  # %a_6: 'a'
-    store %buffer6, %a_6
+    %a:mat3x3<f32> = let %34
+    %36:void = call %tint_store_and_preserve_padding, %buffer0, %a
+    %38:mat3x3<f32> = load %m
+    %39:S = construct %38
+    %a_1:S = let %39  # %a_1: 'a'
+    %41:void = call %tint_store_and_preserve_padding_1, %buffer1, %a_1
+    %43:mat3x3<f32> = load %m
+    %44:array<mat3x3<f32>, 1> = construct %43
+    %45:S2 = construct %44
+    %a_2:S2 = let %45  # %a_2: 'a'
+    %47:void = call %tint_store_and_preserve_padding_2, %buffer2, %a_2
     %49:mat3x3<f32> = load %m
-    %50:array<mat3x3<f32>, 1> = construct %49
-    %51:S2 = construct %50
-    %a_7:array<S2, 1> = construct %51  # %a_7: 'a'
-    store %buffer7, %a_7
+    %50:S = construct %49
+    %51:S3 = construct %50
+    %a_3:S3 = let %51  # %a_3: 'a'
+    %53:void = call %tint_store_and_preserve_padding_3, %buffer3, %a_3
+    %55:mat3x3<f32> = load %m
+    %56:S = construct %55
+    %57:array<S, 1> = construct %56
+    %58:S4 = construct %57
+    %a_4:S4 = let %58  # %a_4: 'a'
+    %60:void = call %tint_store_and_preserve_padding_4, %buffer4, %a_4
+    %62:mat3x3<f32> = load %m
+    %63:array<mat3x3<f32>, 1> = construct %62
+    %a_5:array<mat3x3<f32>, 1> = let %63  # %a_5: 'a'
+    %65:void = call %tint_store_and_preserve_padding_5, %buffer5, %a_5
+    %67:mat3x3<f32> = load %m
+    %68:S = construct %67
+    %69:array<S, 1> = construct %68
+    %a_6:array<S, 1> = let %69  # %a_6: 'a'
+    %71:void = call %tint_store_and_preserve_padding_6, %buffer6, %a_6
+    %73:mat3x3<f32> = load %m
+    %74:array<mat3x3<f32>, 1> = construct %73
+    %75:S2 = construct %74
+    %76:array<S2, 1> = construct %75
+    %a_7:array<S2, 1> = let %76  # %a_7: 'a'
+    %78:void = call %tint_store_and_preserve_padding_7, %buffer7, %a_7
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat3x3<f32>, read_write>, %value_param:mat3x3<f32>):void {
+  $B8: {
+    %82:ptr<storage, vec3<f32>, read_write> = access %target, 0u
+    %83:vec3<f32> = access %value_param, 0u
+    store %82, %83
+    %84:ptr<storage, vec3<f32>, read_write> = access %target, 1u
+    %85:vec3<f32> = access %value_param, 1u
+    store %84, %85
+    %86:ptr<storage, vec3<f32>, read_write> = access %target, 2u
+    %87:vec3<f32> = access %value_param, 2u
+    store %86, %87
+    ret
+  }
+}
+%tint_store_and_preserve_padding_1 = func(%target_1:ptr<storage, S, read_write>, %value_param_1:S):void {  # %tint_store_and_preserve_padding_1: 'tint_store_and_preserve_padding', %target_1: 'target', %value_param_1: 'value_param'
+  $B9: {
+    %90:ptr<storage, mat3x3<f32>, read_write> = access %target_1, 0u
+    %91:mat3x3<f32> = access %value_param_1, 0u
+    %92:void = call %tint_store_and_preserve_padding, %90, %91
+    ret
+  }
+}
+%tint_store_and_preserve_padding_2 = func(%target_2:ptr<storage, S2, read_write>, %value_param_2:S2):void {  # %tint_store_and_preserve_padding_2: 'tint_store_and_preserve_padding', %target_2: 'target', %value_param_2: 'value_param'
+  $B10: {
+    %95:ptr<storage, array<mat3x3<f32>, 1>, read_write> = access %target_2, 0u
+    %96:array<mat3x3<f32>, 1> = access %value_param_2, 0u
+    %97:void = call %tint_store_and_preserve_padding_5, %95, %96
+    ret
+  }
+}
+%tint_store_and_preserve_padding_5 = func(%target_3:ptr<storage, array<mat3x3<f32>, 1>, read_write>, %value_param_3:array<mat3x3<f32>, 1>):void {  # %tint_store_and_preserve_padding_5: 'tint_store_and_preserve_padding', %target_3: 'target', %value_param_3: 'value_param'
+  $B11: {
+    loop [i: $B12, b: $B13, c: $B14] {  # loop_2
+      $B12: {  # initializer
+        next_iteration 0u  # -> $B13
+      }
+      $B13 (%idx:u32): {  # body
+        %101:bool = gte %idx, 1u
+        if %101 [t: $B15] {  # if_2
+          $B15: {  # true
+            exit_loop  # loop_2
+          }
+        }
+        %102:ptr<storage, mat3x3<f32>, read_write> = access %target_3, %idx
+        %103:mat3x3<f32> = access %value_param_3, %idx
+        %104:void = call %tint_store_and_preserve_padding, %102, %103
+        continue  # -> $B14
+      }
+      $B14: {  # continuing
+        %105:u32 = add %idx, 1u
+        next_iteration %105  # -> $B13
+      }
+    }
+    ret
+  }
+}
+%tint_store_and_preserve_padding_3 = func(%target_4:ptr<storage, S3, read_write>, %value_param_4:S3):void {  # %tint_store_and_preserve_padding_3: 'tint_store_and_preserve_padding', %target_4: 'target', %value_param_4: 'value_param'
+  $B16: {
+    %108:ptr<storage, S, read_write> = access %target_4, 0u
+    %109:S = access %value_param_4, 0u
+    %110:void = call %tint_store_and_preserve_padding_1, %108, %109
+    ret
+  }
+}
+%tint_store_and_preserve_padding_4 = func(%target_5:ptr<storage, S4, read_write>, %value_param_5:S4):void {  # %tint_store_and_preserve_padding_4: 'tint_store_and_preserve_padding', %target_5: 'target', %value_param_5: 'value_param'
+  $B17: {
+    %113:ptr<storage, array<S, 1>, read_write> = access %target_5, 0u
+    %114:array<S, 1> = access %value_param_5, 0u
+    %115:void = call %tint_store_and_preserve_padding_6, %113, %114
+    ret
+  }
+}
+%tint_store_and_preserve_padding_6 = func(%target_6:ptr<storage, array<S, 1>, read_write>, %value_param_6:array<S, 1>):void {  # %tint_store_and_preserve_padding_6: 'tint_store_and_preserve_padding', %target_6: 'target', %value_param_6: 'value_param'
+  $B18: {
+    loop [i: $B19, b: $B20, c: $B21] {  # loop_3
+      $B19: {  # initializer
+        next_iteration 0u  # -> $B20
+      }
+      $B20 (%idx_1:u32): {  # body
+        %119:bool = gte %idx_1, 1u
+        if %119 [t: $B22] {  # if_3
+          $B22: {  # true
+            exit_loop  # loop_3
+          }
+        }
+        %120:ptr<storage, S, read_write> = access %target_6, %idx_1
+        %121:S = access %value_param_6, %idx_1
+        %122:void = call %tint_store_and_preserve_padding_1, %120, %121
+        continue  # -> $B21
+      }
+      $B21: {  # continuing
+        %123:u32 = add %idx_1, 1u
+        next_iteration %123  # -> $B20
+      }
+    }
+    ret
+  }
+}
+%tint_store_and_preserve_padding_7 = func(%target_7:ptr<storage, array<S2, 1>, read_write>, %value_param_7:array<S2, 1>):void {  # %tint_store_and_preserve_padding_7: 'tint_store_and_preserve_padding', %target_7: 'target', %value_param_7: 'value_param'
+  $B23: {
+    loop [i: $B24, b: $B25, c: $B26] {  # loop_4
+      $B24: {  # initializer
+        next_iteration 0u  # -> $B25
+      }
+      $B25 (%idx_2:u32): {  # body
+        %127:bool = gte %idx_2, 1u
+        if %127 [t: $B27] {  # if_4
+          $B27: {  # true
+            exit_loop  # loop_4
+          }
+        }
+        %128:ptr<storage, S2, read_write> = access %target_7, %idx_2
+        %129:S2 = access %value_param_7, %idx_2
+        %130:void = call %tint_store_and_preserve_padding_2, %128, %129
+        continue  # -> $B26
+      }
+      $B26: {  # continuing
+        %131:u32 = add %idx_2, 1u
+        next_iteration %131  # -> $B25
+      }
+    }
     ret
   }
 }
diff --git a/test/tint/bug/tint/2063.wgsl.expected.ir.msl b/test/tint/bug/tint/2063.wgsl.expected.ir.msl
index b38060a..92c0fdd 100644
--- a/test/tint/bug/tint/2063.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/2063.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/bug/tint/2069.wgsl.expected.ir.msl b/test/tint/bug/tint/2069.wgsl.expected.ir.msl
new file mode 100644
index 0000000..d40cb4d
--- /dev/null
+++ b/test/tint/bug/tint/2069.wgsl.expected.ir.msl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+struct modf_result_f32 {
+  float fract;
+  float whole;
+};
+
+thread modf_result_f32 v = modf_result_f32{.fract=0.0f, .whole=1.0f};
+kernel void tint_symbol() {
+}
+program_source:8:24: error: program scope variable must reside in constant address space
+thread modf_result_f32 v = modf_result_f32{.fract=0.0f, .whole=1.0f};
+                       ^
+
diff --git a/test/tint/bug/tint/2076.wgsl.expected.ir.msl b/test/tint/bug/tint/2076.wgsl.expected.ir.msl
index a24ece3..a812156 100644
--- a/test/tint/bug/tint/2076.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/2076.wgsl.expected.ir.msl
@@ -1,13 +1,43 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:626 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: tint_GammaTransferParams = struct @align(4) {
+  G:f32 @offset(0)
+  A:f32 @offset(4)
+  B:f32 @offset(8)
+  C:f32 @offset(12)
+  D:f32 @offset(16)
+  E:f32 @offset(20)
+  F:f32 @offset(24)
+  padding:u32 @offset(28)
+}
+
+tint_ExternalTextureParams = struct @align(16) {
+  numPlanes:u32 @offset(0)
+  doYuvToRgbConversionOnly:u32 @offset(4)
+  yuvToRgbConversionMatrix:mat3x4<f32> @offset(16)
+  gammaDecodeParams:tint_GammaTransferParams @offset(64)
+  gammaEncodeParams:tint_GammaTransferParams @offset(96)
+  gamutConversionMatrix:mat3x3<f32> @offset(128)
+  coordTransformationMatrix:mat3x2<f32> @offset(176)
+  loadTransformationMatrix:mat3x2<f32> @offset(200)
+  samplePlane0RectMin:vec2<f32> @offset(224)
+  samplePlane0RectMax:vec2<f32> @offset(232)
+  samplePlane1RectMin:vec2<f32> @offset(240)
+  samplePlane1RectMax:vec2<f32> @offset(248)
+  displayVisibleRectMax:vec2<u32> @offset(256)
+  plane1CoordFactor:vec2<f32> @offset(264)
+}
+
+$B1: {  # root
   %Sampler:ptr<handle, sampler, read> = var @binding_point(0, 1)
-  %randomTexture:ptr<handle, texture_external, read> = var @binding_point(0, 1)
+  %randomTexture_plane0:ptr<handle, texture_2d<f32>, read> = var @binding_point(0, 1)
+  %randomTexture_plane1:ptr<handle, texture_2d<f32>, read> = var @binding_point(0, 3)
+  %randomTexture_params:ptr<uniform, tint_ExternalTextureParams, read> = var @binding_point(0, 4)
   %depthTexture:ptr<handle, texture_2d<f32>, read> = var @binding_point(0, 2)
 }
 
 
-Multiplanar external texture transform was not run.
+unhandled variable address space
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/bug/tint/2100.wgsl.expected.ir.msl b/test/tint/bug/tint/2100.wgsl.expected.ir.msl
index 64cf7d9..9c390b3 100644
--- a/test/tint/bug/tint/2100.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/2100.wgsl.expected.ir.msl
@@ -1,20 +1,21 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(16) {
   matrix_view:mat4x4<f32> @offset(0)
   matrix_normal:mat3x3<f32> @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %tint_symbol:ptr<uniform, S, read> = var @binding_point(0, 0)
 }
 
-%tint_symbol_1 = @vertex func():vec4<f32> [@position] -> %b2 {
-  %b2 = block {
+%tint_symbol_1 = @vertex func():vec4<f32> [@position] {
+  $B2: {
     %3:ptr<uniform, vec4<f32>, read> = access %tint_symbol, 0u, 0i
-    %x:f32 = load_vector_element %3, 2u
-    %5:vec4<f32> = construct %x, 0.0f, 0.0f, 1.0f
-    ret %5
+    %4:f32 = load_vector_element %3, 2u
+    %x:f32 = let %4
+    %6:vec4<f32> = construct %x, 0.0f, 0.0f, 1.0f
+    ret %6
   }
 }
 
diff --git a/test/tint/bug/tint/2121.wgsl.expected.ir.msl b/test/tint/bug/tint/2121.wgsl.expected.ir.msl
new file mode 100644
index 0000000..4604f10
--- /dev/null
+++ b/test/tint/bug/tint/2121.wgsl.expected.ir.msl
@@ -0,0 +1,28 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+struct VSOut {
+  float4 pos [[position]];
+};
+
+void foo(thread VSOut* const out) {
+  float4 pos = float4(1.0f, 2.0f, 3.0f, 4.0f);
+  out.pos = pos;
+}
+vertex VSOut tint_symbol() {
+  VSOut out = {};
+  foo(out);
+  return out;
+}
+program_source:9:6: error: member reference type 'VSOut *const' is a pointer; did you mean to use '->'?
+  out.pos = pos;
+  ~~~^
+     ->
+program_source:13:3: error: no matching function for call to 'foo'
+  foo(out);
+  ^~~
+program_source:7:6: note: candidate function not viable: no known conversion from 'VSOut' to 'VSOut *const' for 1st argument; take the address of the argument with &
+void foo(thread VSOut* const out) {
+     ^
+
diff --git a/test/tint/bug/tint/2146.wgsl.expected.ir.msl b/test/tint/bug/tint/2146.wgsl.expected.ir.msl
new file mode 100644
index 0000000..0adff61
--- /dev/null
+++ b/test/tint/bug/tint/2146.wgsl.expected.ir.msl
@@ -0,0 +1,34 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint3 localId = 0u;
+thread uint localIndex = 0u;
+thread uint3 globalId = 0u;
+thread uint3 numWorkgroups = 0u;
+thread uint3 workgroupId = 0u;
+uint globalId2Index() {
+  return globalId[0u];
+}
+kernel void tint_symbol() {
+  half4 a = half4(0.0h);
+  half const b = 1.0h;
+  a[0] = (a[0] + b);
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread uint3 localId = 0u;
+             ^
+program_source:5:13: error: program scope variable must reside in constant address space
+thread uint localIndex = 0u;
+            ^
+program_source:6:14: error: program scope variable must reside in constant address space
+thread uint3 globalId = 0u;
+             ^
+program_source:7:14: error: program scope variable must reside in constant address space
+thread uint3 numWorkgroups = 0u;
+             ^
+program_source:8:14: error: program scope variable must reside in constant address space
+thread uint3 workgroupId = 0u;
+             ^
+
diff --git a/test/tint/bug/tint/2147.wgsl.expected.ir.msl b/test/tint/bug/tint/2147.wgsl.expected.ir.msl
new file mode 100644
index 0000000..c66ff97
--- /dev/null
+++ b/test/tint/bug/tint/2147.wgsl.expected.ir.msl
@@ -0,0 +1,50 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: __atomic_compare_exchange_result_i32 = struct @align(4) {
+  old_value:i32 @offset(0)
+  exchanged:bool @offset(4)
+}
+
+$B1: {  # root
+  %S:ptr<storage, atomic<i32>, read_write> = var @binding_point(0, 0)
+  %continue_execution:ptr<private, bool, read_write> = var, true
+}
+
+%tint_symbol = @fragment func():vec4<f32> [@location(0)] {
+  $B2: {
+    if false [t: $B3] {  # if_1
+      $B3: {  # true
+        store %continue_execution, false
+        exit_if  # if_1
+      }
+    }
+    %4:bool = load %continue_execution
+    %5:__atomic_compare_exchange_result_i32 = if %4 [t: $B4] {  # if_2
+      $B4: {  # true
+        %6:__atomic_compare_exchange_result_i32 = atomicCompareExchangeWeak %S, 0i, 1i
+        exit_if %6  # if_2
+      }
+      # implicit false block: exit_if undef
+    }
+    %7:i32 = access %5, 0u
+    %old_value:i32 = let %7
+    %9:f32 = convert %old_value
+    %10:vec4<f32> = construct %9
+    %11:bool = load %continue_execution
+    %12:bool = eq %11, false
+    if %12 [t: $B5] {  # if_3
+      $B5: {  # true
+        terminate_invocation
+      }
+    }
+    ret %10
+  }
+}
+
+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/2175.wgsl.expected.ir.msl b/test/tint/bug/tint/2175.wgsl.expected.ir.msl
new file mode 100644
index 0000000..c2eec40
--- /dev/null
+++ b/test/tint/bug/tint/2175.wgsl.expected.ir.msl
@@ -0,0 +1,20 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %tint_symbol_2:ptr<storage, u32, read_write> = var @binding_point(0, 0)
+}
+
+%tint_symbol_3 = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    store %tint_symbol_2, 0u
+    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.  *
+********************************************************************
diff --git a/test/tint/bug/tint/2177.wgsl.expected.ir.msl b/test/tint/bug/tint/2177.wgsl.expected.ir.msl
new file mode 100644
index 0000000..12ec3cd
--- /dev/null
+++ b/test/tint/bug/tint/2177.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %arr:ptr<storage, array<u32>, read_write> = var @binding_point(0, 0)
+}
+
+%f2 = func(%p:ptr<storage, array<u32>, read_write>):u32 {
+  $B2: {
+    %4:u32 = arrayLength %p
+    ret %4
+  }
+}
+%f1 = func(%p_1:ptr<storage, array<u32>, read_write>):u32 {  # %p_1: 'p'
+  $B3: {
+    %7:u32 = call %f2, %p_1
+    ret %7
+  }
+}
+%f0 = func(%p_2:ptr<storage, array<u32>, read_write>):u32 {  # %p_2: 'p'
+  $B4: {
+    %10:u32 = call %f1, %p_2
+    ret %10
+  }
+}
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %12:ptr<storage, u32, read_write> = access %arr, 0i
+    %13:u32 = call %f0, %arr
+    store %12, %13
+    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.  *
+********************************************************************
diff --git a/test/tint/bug/tint/219.spvasm.expected.ir.msl b/test/tint/bug/tint/219.spvasm.expected.ir.msl
index 2e88a5f..a2c96a5 100644
--- a/test/tint/bug/tint/219.spvasm.expected.ir.msl
+++ b/test/tint/bug/tint/219.spvasm.expected.ir.msl
@@ -1,9 +1,26 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::LoadVectorElement
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+float x_200(thread float2* const x_201) {
+  float const x_212 = x_201[0u];
+  return x_212;
+}
+void main_1() {
+  float2 x_11 = 0.0f;
+  float const x_12 = x_200(x_11);
+}
+kernel void tint_symbol() {
+  main_1();
+}
+program_source:5:15: error: cannot initialize a variable of type 'const float' with an lvalue of type 'float2' (vector of 2 'float' values)
+  float const x_212 = x_201[0u];
+              ^       ~~~~~~~~~
+program_source:10:22: error: no matching function for call to 'x_200'
+  float const x_12 = x_200(x_11);
+                     ^~~~~
+program_source:4:7: note: candidate function not viable: no known conversion from 'float2' (vector of 2 'float' values) to 'float2 *const' for 1st argument; take the address of the argument with &
+float x_200(thread float2* const x_201) {
+      ^
+
diff --git a/test/tint/bug/tint/2190.wgsl.expected.ir.msl b/test/tint/bug/tint/2190.wgsl.expected.ir.msl
new file mode 100644
index 0000000..f231313
--- /dev/null
+++ b/test/tint/bug/tint/2190.wgsl.expected.ir.msl
@@ -0,0 +1,6 @@
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  bool const v = false;
+}
diff --git a/test/tint/bug/tint/2201.wgsl.expected.ir.msl b/test/tint/bug/tint/2201.wgsl.expected.ir.msl
new file mode 100644
index 0000000..9e9e983
--- /dev/null
+++ b/test/tint/bug/tint/2201.wgsl.expected.ir.msl
@@ -0,0 +1,19 @@
+<dawn>/test/tint/bug/tint/2201.wgsl:9:9 warning: code is unreachable
+        let _e16_ = vec2(false, false);
+        ^^^^^^^^^
+
+#include <metal_stdlib>
+using namespace metal;
+
+kernel void tint_symbol() {
+  {
+    while(true) {
+      if (true) {
+        break;
+      } else {
+        break;
+      }
+      /* unreachable */
+    }
+  }
+}
diff --git a/test/tint/bug/tint/2202.wgsl.expected.ir.msl b/test/tint/bug/tint/2202.wgsl.expected.ir.msl
new file mode 100644
index 0000000..8217706
--- /dev/null
+++ b/test/tint/bug/tint/2202.wgsl.expected.ir.msl
@@ -0,0 +1,19 @@
+<dawn>/test/tint/bug/tint/2202.wgsl:7:9 warning: code is unreachable
+        let _e9 = (vec3<i32>().y >= vec3<i32>().y);
+        ^^^^^^^
+
+#include <metal_stdlib>
+using namespace metal;
+
+kernel void tint_symbol() {
+  {
+    while(true) {
+      {
+        while(true) {
+          return;
+        }
+      }
+      /* unreachable */
+    }
+  }
+}
diff --git a/test/tint/bug/tint/221.wgsl.expected.ir.msl b/test/tint/bug/tint/221.wgsl.expected.ir.msl
index f27e367..f430f2b 100644
--- a/test/tint/bug/tint/221.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/221.wgsl.expected.ir.msl
@@ -1,54 +1,66 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Buf = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Buf = struct @align(4) {
   count:u32 @offset(0)
   data:array<u32, 50> @offset(4)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %b:ptr<storage, Buf, read_write> = var @binding_point(0, 0)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %i:ptr<function, u32, read_write> = var, 0u
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %4:u32 = load %i
         %5:ptr<storage, u32, read_write> = access %b, 0u
         %6:u32 = load %5
         %7:bool = gte %4, %6
-        if %7 [t: %b5] {  # if_1
-          %b5 = block {  # true
+        if %7 [t: $B5] {  # if_1
+          $B5: {  # true
             exit_loop  # loop_1
           }
         }
         %8:u32 = load %i
-        %p:ptr<storage, u32, read_write> = access %b, 1u, %8
-        %10:u32 = load %i
-        %11:u32 = mod %10, 2u
-        %12:bool = eq %11, 0u
-        if %12 [t: %b6] {  # if_2
-          %b6 = block {  # true
-            continue %b4
+        %9:ptr<storage, u32, read_write> = access %b, 1u, %8
+        %p:ptr<storage, u32, read_write> = let %9
+        %11:u32 = load %i
+        %12:u32 = call %tint_mod_u32, %11, 2u
+        %14:bool = eq %12, 0u
+        if %14 [t: $B6] {  # if_2
+          $B6: {  # true
+            continue  # -> $B4
           }
         }
         store %p, 0u
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %13:u32 = load %p
-        %14:u32 = mul %13, 2u
-        store %p, %14
-        %15:u32 = load %i
-        %16:u32 = add %15, 1u
-        store %i, %16
-        next_iteration %b3
+      $B4: {  # continuing
+        %15:u32 = load %p
+        %16:u32 = mul %15, 2u
+        store %p, %16
+        %17:u32 = load %i
+        %18:u32 = add %17, 1u
+        store %i, %18
+        next_iteration  # -> $B3
       }
     }
     ret
   }
 }
+%tint_mod_u32 = func(%lhs:u32, %rhs:u32):u32 {
+  $B7: {
+    %21:bool = eq %rhs, 0u
+    %22:u32 = select %rhs, 1u, %21
+    %23:u32 = let %22
+    %24:u32 = div %lhs, %23
+    %25:u32 = mul %24, %23
+    %26:u32 = sub %lhs, %25
+    ret %26
+  }
+}
 
 unhandled variable address space
 ********************************************************************
diff --git a/test/tint/bug/tint/2237.wgsl.expected.ir.msl b/test/tint/bug/tint/2237.wgsl.expected.ir.msl
new file mode 100644
index 0000000..bcc5b55
--- /dev/null
+++ b/test/tint/bug/tint/2237.wgsl.expected.ir.msl
@@ -0,0 +1,32 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %tint_symbol:ptr<storage, u32, read_write> = var @binding_point(0, 0)
+}
+
+%foo = func():u32 {
+  $B2: {
+    %3:u32 = load %tint_symbol
+    %4:u32 = access array<u32, 4>(0u, 1u, 2u, 4u), %3
+    ret %4
+  }
+}
+%tint_symbol_1 = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
+    %6:u32 = load %tint_symbol
+    %7:u32 = access array<u32, 4>(0u, 1u, 2u, 4u), %6
+    %v:u32 = let %7
+    %9:u32 = call %foo
+    %10:u32 = add %v, %9
+    store %tint_symbol, %10
+    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.  *
+********************************************************************
diff --git a/test/tint/bug/tint/294.wgsl.expected.ir.msl b/test/tint/bug/tint/294.wgsl.expected.ir.msl
index f10fe19..bf849a7 100644
--- a/test/tint/bug/tint/294.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/294.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Light = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Light = struct @align(16) {
   position:vec3<f32> @offset(0)
   colour:vec3<f32> @offset(16)
 }
@@ -9,7 +9,7 @@
   light:array<Light> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %lights:ptr<storage, Lights, read> = var @binding_point(0, 1)
 }
 
diff --git a/test/tint/bug/tint/369.wgsl.expected.ir.msl b/test/tint/bug/tint/369.wgsl.expected.ir.msl
index 7bc66ac..7e7d8ce 100644
--- a/test/tint/bug/tint/369.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/369.wgsl.expected.ir.msl
@@ -1,10 +1,10 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(8) {
   m:mat2x2<f32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %SSBO:ptr<storage, S, read> = var @binding_point(0, 0)
   %UBO:ptr<uniform, S, read> = var @binding_point(0, 0)
 }
diff --git a/test/tint/bug/tint/403.wgsl.expected.ir.msl b/test/tint/bug/tint/403.wgsl.expected.ir.msl
index 21df4f2..9d5da16 100644
--- a/test/tint/bug/tint/403.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/403.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: vertexUniformBuffer1 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: vertexUniformBuffer1 = struct @align(8) {
   transform1:mat2x2<f32> @offset(0)
 }
 
@@ -8,34 +8,38 @@
   transform2:mat2x2<f32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_20:ptr<uniform, vertexUniformBuffer1, read> = var @binding_point(0, 0)
   %x_26:ptr<uniform, vertexUniformBuffer2, read> = var @binding_point(1, 0)
 }
 
-%tint_symbol = @vertex func(%gl_VertexIndex:u32 [@vertex_index]):vec4<f32> [@position] -> %b2 {
-  %b2 = block {
+%tint_symbol = @vertex func(%gl_VertexIndex:u32 [@vertex_index]):vec4<f32> [@position] {
+  $B2: {
     %indexable:ptr<function, array<vec2<f32>, 3>, read_write> = var
     %6:ptr<uniform, mat2x2<f32>, read> = access %x_20, 0u
-    %x_23:mat2x2<f32> = load %6
-    %8:ptr<uniform, mat2x2<f32>, read> = access %x_26, 0u
-    %x_28:mat2x2<f32> = load %8
+    %7:mat2x2<f32> = load %6
+    %x_23:mat2x2<f32> = let %7
+    %9:ptr<uniform, mat2x2<f32>, read> = access %x_26, 0u
+    %10:mat2x2<f32> = load %9
+    %x_28:mat2x2<f32> = let %10
     %x_46:u32 = let %gl_VertexIndex
     store %indexable, array<vec2<f32>, 3>(vec2<f32>(-1.0f, 1.0f), vec2<f32>(1.0f), vec2<f32>(-1.0f))
-    %11:ptr<function, vec2<f32>, read_write> = access %indexable, %x_46
-    %x_51:vec2<f32> = load %11
-    %13:vec2<f32> = access %x_23, 0u
-    %14:vec2<f32> = access %x_28, 0u
-    %15:vec2<f32> = add %13, %14
-    %16:vec2<f32> = access %x_23, 1u
-    %17:vec2<f32> = access %x_28, 1u
+    %13:ptr<function, vec2<f32>, read_write> = access %indexable, %x_46
+    %14:vec2<f32> = load %13
+    %x_51:vec2<f32> = let %14
+    %16:vec2<f32> = access %x_23, 0u
+    %17:vec2<f32> = access %x_28, 0u
     %18:vec2<f32> = add %16, %17
-    %19:mat2x2<f32> = construct %15, %18
-    %x_52:vec2<f32> = mul %19, %x_51
-    %21:f32 = access %x_52, 0u
-    %22:f32 = access %x_52, 1u
-    %23:vec4<f32> = construct %21, %22, 0.0f, 1.0f
-    ret %23
+    %19:vec2<f32> = access %x_23, 1u
+    %20:vec2<f32> = access %x_28, 1u
+    %21:vec2<f32> = add %19, %20
+    %22:mat2x2<f32> = construct %18, %21
+    %23:vec2<f32> = mul %22, %x_51
+    %x_52:vec2<f32> = let %23
+    %25:f32 = access %x_52, 0u
+    %26:f32 = access %x_52, 1u
+    %27:vec4<f32> = construct %25, %26, 0.0f, 1.0f
+    ret %27
   }
 }
 
diff --git a/test/tint/bug/tint/413.spvasm.expected.ir.msl b/test/tint/bug/tint/413.spvasm.expected.ir.msl
index b38060a..ee65b2d 100644
--- a/test/tint/bug/tint/413.spvasm.expected.ir.msl
+++ b/test/tint/bug/tint/413.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureLoad
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/bug/tint/453.wgsl.expected.ir.msl b/test/tint/bug/tint/453.wgsl.expected.ir.msl
index b38060a..ee65b2d 100644
--- a/test/tint/bug/tint/453.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/453.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureLoad
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/bug/tint/492.wgsl.expected.ir.msl b/test/tint/bug/tint/492.wgsl.expected.ir.msl
index e322d13..9891160 100644
--- a/test/tint/bug/tint/492.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/492.wgsl.expected.ir.msl
@@ -1,16 +1,17 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   a:i32 @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %buf:ptr<storage, S, read_write> = var @binding_point(0, 0)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %p:ptr<storage, i32, read_write> = access %buf, 0u
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %3:ptr<storage, i32, read_write> = access %buf, 0u
+    %p:ptr<storage, i32, read_write> = let %3
     store %p, 12i
     ret
   }
diff --git a/test/tint/bug/tint/534.wgsl.expected.ir.msl b/test/tint/bug/tint/534.wgsl.expected.ir.msl
index 51f94d6..23a4a58 100644
--- a/test/tint/bug/tint/534.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/534.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: OutputBuf = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: OutputBuf = struct @align(4) {
   result:array<u32> @offset(0)
 }
 
@@ -11,20 +11,20 @@
   channelCount:u32 @offset(12)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %src:ptr<handle, texture_2d<f32>, read> = var @binding_point(0, 0)
   %dst:ptr<handle, texture_2d<f32>, read> = var @binding_point(0, 1)
   %output:ptr<storage, OutputBuf, read_write> = var @binding_point(0, 2)
   %uniforms:ptr<uniform, Uniforms, read> = var @binding_point(0, 3)
 }
 
-%ConvertToFp16FloatValue = func(%fp32:f32):u32 -> %b2 {
-  %b2 = block {
+%ConvertToFp16FloatValue = func(%fp32:f32):u32 {
+  $B2: {
     ret 1u
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%GlobalInvocationID:vec3<u32> [@global_invocation_id]):void -> %b3 {
-  %b3 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%GlobalInvocationID:vec3<u32> [@global_invocation_id]):void {
+  $B3: {
     %9:texture_2d<f32> = load %src
     %10:vec2<u32> = textureDimensions %9
     %size:ptr<function, vec2<u32>, read_write> = var, %10
@@ -35,8 +35,8 @@
     %16:ptr<uniform, u32, read> = access %uniforms, 0u
     %17:u32 = load %16
     %18:bool = eq %17, 1u
-    if %18 [t: %b4] {  # if_1
-      %b4 = block {  # true
+    if %18 [t: $B4] {  # if_1
+      $B4: {  # true
         %19:u32 = load_vector_element %size, 1u
         %20:u32 = load_vector_element %dstTexCoord, 1u
         %21:u32 = sub %19, %20
@@ -56,80 +56,91 @@
     %success:ptr<function, bool, read_write> = var, true
     %srcColorBits:ptr<function, vec4<u32>, read_write> = var
     %33:vec4<f32> = load %dstColor
-    %34:vec4<u32> = convert %33
+    %34:vec4<u32> = call %tint_v4f32_to_v4u32, %33
     %dstColorBits:ptr<function, vec4<u32>, read_write> = var, %34
-    loop [i: %b5, b: %b6, c: %b7] {  # loop_1
-      %b5 = block {  # initializer
+    loop [i: $B5, b: $B6, c: $B7] {  # loop_1
+      $B5: {  # initializer
         %i:ptr<function, u32, read_write> = var, 0u
-        next_iteration %b6
+        next_iteration  # -> $B6
       }
-      %b6 = block {  # body
-        %37:u32 = load %i
-        %38:ptr<uniform, u32, read> = access %uniforms, 3u
-        %39:u32 = load %38
-        %40:bool = lt %37, %39
-        if %40 [t: %b8, f: %b9] {  # if_2
-          %b8 = block {  # true
+      $B6: {  # body
+        %38:u32 = load %i
+        %39:ptr<uniform, u32, read> = access %uniforms, 3u
+        %40:u32 = load %39
+        %41:bool = lt %38, %40
+        if %41 [t: $B8, f: $B9] {  # if_2
+          $B8: {  # true
             exit_if  # if_2
           }
-          %b9 = block {  # false
+          $B9: {  # false
             exit_loop  # loop_1
           }
         }
-        %41:u32 = load %i
         %42:u32 = load %i
-        %43:f32 = load_vector_element %srcColor, %42
-        %44:u32 = call %ConvertToFp16FloatValue, %43
-        store_vector_element %srcColorBits, %41, %44
-        %45:bool = load %success
-        %46:bool = if %45 [t: %b10, f: %b11] {  # if_3
-          %b10 = block {  # true
-            %47:u32 = load %i
-            %48:u32 = load_vector_element %srcColorBits, %47
+        %43:u32 = let %42
+        %44:u32 = load %i
+        %45:f32 = load_vector_element %srcColor, %44
+        %46:u32 = call %ConvertToFp16FloatValue, %45
+        store_vector_element %srcColorBits, %43, %46
+        %47:bool = load %success
+        %48:bool = if %47 [t: $B10, f: $B11] {  # if_3
+          $B10: {  # true
             %49:u32 = load %i
-            %50:u32 = load_vector_element %dstColorBits, %49
-            %51:bool = eq %48, %50
-            exit_if %51  # if_3
+            %50:u32 = load_vector_element %srcColorBits, %49
+            %51:u32 = load %i
+            %52:u32 = load_vector_element %dstColorBits, %51
+            %53:bool = eq %50, %52
+            exit_if %53  # if_3
           }
-          %b11 = block {  # false
+          $B11: {  # false
             exit_if false  # if_3
           }
         }
-        store %success, %46
-        continue %b7
+        store %success, %48
+        continue  # -> $B7
       }
-      %b7 = block {  # continuing
-        %52:u32 = load %i
-        %53:u32 = add %52, 1u
-        store %i, %53
-        next_iteration %b6
+      $B7: {  # continuing
+        %54:u32 = load %i
+        %55:u32 = add %54, 1u
+        store %i, %55
+        next_iteration  # -> $B6
       }
     }
-    %54:u32 = access %GlobalInvocationID, 1u
-    %55:u32 = load_vector_element %size, 0u
-    %56:u32 = construct %55
-    %57:u32 = mul %54, %56
-    %58:u32 = access %GlobalInvocationID, 0u
-    %59:u32 = add %57, %58
-    %outputIndex:ptr<function, u32, read_write> = var, %59
-    %61:bool = load %success
-    if %61 [t: %b12, f: %b13] {  # if_4
-      %b12 = block {  # true
-        %62:u32 = load %outputIndex
-        %63:ptr<storage, u32, read_write> = access %output, 0u, %62
-        store %63, 1u
-        exit_if  # if_4
-      }
-      %b13 = block {  # false
+    %56:u32 = access %GlobalInvocationID, 1u
+    %57:u32 = load_vector_element %size, 0u
+    %58:u32 = construct %57
+    %59:u32 = mul %56, %58
+    %60:u32 = access %GlobalInvocationID, 0u
+    %61:u32 = add %59, %60
+    %outputIndex:ptr<function, u32, read_write> = var, %61
+    %63:bool = load %success
+    if %63 [t: $B12, f: $B13] {  # if_4
+      $B12: {  # true
         %64:u32 = load %outputIndex
         %65:ptr<storage, u32, read_write> = access %output, 0u, %64
-        store %65, 0u
+        store %65, 1u
+        exit_if  # if_4
+      }
+      $B13: {  # false
+        %66:u32 = load %outputIndex
+        %67:ptr<storage, u32, read_write> = access %output, 0u, %66
+        store %67, 0u
         exit_if  # if_4
       }
     }
     ret
   }
 }
+%tint_v4f32_to_v4u32 = func(%value:vec4<f32>):vec4<u32> {
+  $B14: {
+    %69:vec4<u32> = convert %value
+    %70:vec4<bool> = gte %value, vec4<f32>(0.0f)
+    %71:vec4<u32> = select vec4<u32>(0u), %69, %70
+    %72:vec4<bool> = lte %value, vec4<f32>(4294967040.0f)
+    %73:vec4<u32> = select vec4<u32>(4294967295u), %71, %72
+    ret %73
+  }
+}
 
 unhandled variable address space
 ********************************************************************
diff --git a/test/tint/bug/tint/744.wgsl.expected.ir.msl b/test/tint/bug/tint/744.wgsl.expected.ir.msl
index 2f4398f..5989a20 100644
--- a/test/tint/bug/tint/744.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/744.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Matrix = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Matrix = struct @align(4) {
   numbers:array<u32> @offset(0)
 }
 
@@ -10,71 +10,77 @@
   outShape:vec2<u32> @offset(16)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %firstMatrix:ptr<storage, Matrix, read> = var @binding_point(0, 0)
   %secondMatrix:ptr<storage, Matrix, read> = var @binding_point(0, 1)
   %resultMatrix:ptr<storage, Matrix, read_write> = var @binding_point(0, 2)
   %uniforms:ptr<uniform, Uniforms, read> = var @binding_point(0, 3)
 }
 
-%tint_symbol = @compute @workgroup_size(2, 2, 1) func(%global_id:vec3<u32> [@global_invocation_id]):void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(2, 2, 1) func(%global_id:vec3<u32> [@global_invocation_id]):void {
+  $B2: {
     %7:u32 = access %global_id, 1u
     %8:u32 = access %global_id, 0u
-    %resultCell:vec2<u32> = construct %7, %8
-    %10:ptr<uniform, vec2<u32>, read> = access %uniforms, 0u
-    %dimInner:u32 = load_vector_element %10, 1u
-    %12:ptr<uniform, vec2<u32>, read> = access %uniforms, 2u
-    %dimOutter:u32 = load_vector_element %12, 1u
+    %9:vec2<u32> = construct %7, %8
+    %resultCell:vec2<u32> = let %9
+    %11:ptr<uniform, vec2<u32>, read> = access %uniforms, 0u
+    %12:u32 = load_vector_element %11, 1u
+    %dimInner:u32 = let %12
+    %14:ptr<uniform, vec2<u32>, read> = access %uniforms, 2u
+    %15:u32 = load_vector_element %14, 1u
+    %dimOutter:u32 = let %15
     %result:ptr<function, u32, read_write> = var, 0u
-    loop [i: %b3, b: %b4, c: %b5] {  # loop_1
-      %b3 = block {  # initializer
+    loop [i: $B3, b: $B4, c: $B5] {  # loop_1
+      $B3: {  # initializer
         %i:ptr<function, u32, read_write> = var, 0u
-        next_iteration %b4
+        next_iteration  # -> $B4
       }
-      %b4 = block {  # body
-        %16:u32 = load %i
-        %17:bool = lt %16, %dimInner
-        if %17 [t: %b6, f: %b7] {  # if_1
-          %b6 = block {  # true
+      $B4: {  # body
+        %19:u32 = load %i
+        %20:bool = lt %19, %dimInner
+        if %20 [t: $B6, f: $B7] {  # if_1
+          $B6: {  # true
             exit_if  # if_1
           }
-          %b7 = block {  # false
+          $B7: {  # false
             exit_loop  # loop_1
           }
         }
-        %18:u32 = load %i
-        %19:u32 = access %resultCell, 0u
-        %20:u32 = mul %19, %dimInner
-        %a:u32 = add %18, %20
-        %22:u32 = access %resultCell, 1u
-        %23:u32 = load %i
-        %24:u32 = mul %23, %dimOutter
-        %b:u32 = add %22, %24
-        %26:u32 = load %result
-        %27:ptr<storage, u32, read> = access %firstMatrix, 0u, %a
-        %28:u32 = load %27
-        %29:ptr<storage, u32, read> = access %secondMatrix, 0u, %b
-        %30:u32 = load %29
-        %31:u32 = mul %28, %30
-        %32:u32 = add %26, %31
-        store %result, %32
-        continue %b5
+        %21:u32 = load %i
+        %22:u32 = access %resultCell, 0u
+        %23:u32 = mul %22, %dimInner
+        %24:u32 = add %21, %23
+        %a:u32 = let %24
+        %26:u32 = access %resultCell, 1u
+        %27:u32 = load %i
+        %28:u32 = mul %27, %dimOutter
+        %29:u32 = add %26, %28
+        %b:u32 = let %29
+        %31:u32 = load %result
+        %32:ptr<storage, u32, read> = access %firstMatrix, 0u, %a
+        %33:u32 = load %32
+        %34:ptr<storage, u32, read> = access %secondMatrix, 0u, %b
+        %35:u32 = load %34
+        %36:u32 = mul %33, %35
+        %37:u32 = add %31, %36
+        store %result, %37
+        continue  # -> $B5
       }
-      %b5 = block {  # continuing
-        %33:u32 = load %i
-        %34:u32 = add %33, 1u
-        store %i, %34
-        next_iteration %b4
+      $B5: {  # continuing
+        %38:u32 = load %i
+        %39:u32 = add %38, 1u
+        store %i, %39
+        next_iteration  # -> $B4
       }
     }
-    %35:u32 = access %resultCell, 1u
-    %36:u32 = access %resultCell, 0u
-    %37:u32 = mul %36, %dimOutter
-    %index:u32 = add %35, %37
-    %39:ptr<storage, u32, read_write> = access %resultMatrix, 0u, %index
-    %40:u32 = load %result
-    store %39, %40
+    %40:u32 = access %resultCell, 1u
+    %41:u32 = access %resultCell, 0u
+    %42:u32 = mul %41, %dimOutter
+    %43:u32 = add %40, %42
+    %index:u32 = let %43
+    %45:ptr<storage, u32, read_write> = access %resultMatrix, 0u, %index
+    %46:u32 = load %result
+    store %45, %46
     ret
   }
 }
diff --git a/test/tint/bug/tint/749.spvasm.expected.ir.msl b/test/tint/bug/tint/749.spvasm.expected.ir.msl
index 87b3373..4dc6699 100644
--- a/test/tint/bug/tint/749.spvasm.expected.ir.msl
+++ b/test/tint/bug/tint/749.spvasm.expected.ir.msl
@@ -1,1497 +1,7 @@
 SKIP: FAILED
 
 
-struct QuicksortObject {
-  numbers : array<i32, 10u>,
-}
 
-struct buf0 {
-  /* @offset(0) */
-  resolution : vec2f,
-}
+error: line:256: ID '172' decorated with NoContraction multiple times is not allowed.
+  %172 = OpIMul %int %168 %171
 
-var<private> obj : QuicksortObject;
-
-var<private> gl_FragCoord : vec4f;
-
-@group(0) @binding(0) var<uniform> x_188 : buf0;
-
-var<private> x_GLF_color : vec4f;
-
-const x_199 = vec3f(1.0f, 2.0f, 3.0f);
-
-fn swap_i1_i1_(i : ptr<function, i32>, j : ptr<function, i32>) {
-  var temp : i32;
-  let x_932 = temp;
-  temp = 0i;
-  temp = x_932;
-  let x_523 = x_199.zyz;
-  let x_933 = *(i);
-  *(i) = 0i;
-  *(i) = x_933;
-  let x_28 = *(i);
-  let x_934 = *(j);
-  *(j) = 0i;
-  *(j) = x_934;
-  let x_524 = x_523.yxy;
-  let x_935 = temp;
-  temp = 0i;
-  temp = x_935;
-  let x_30 = &(obj.numbers[x_28]);
-  let x_936 = *(x_30);
-  *(x_30) = 0i;
-  *(x_30) = x_936;
-  let x_31 = *(x_30);
-  let x_937 = temp;
-  temp = 0i;
-  temp = x_937;
-  temp = x_31;
-  let x_938 = *(j);
-  *(j) = 0i;
-  *(j) = x_938;
-  let x_525 = vec3f(x_523.z, x_199.x, x_523.y);
-  let x_939 = *(i);
-  *(i) = 0i;
-  *(i) = x_939;
-  let x_32 = *(i);
-  let x_940 = *(x_30);
-  *(x_30) = 0i;
-  *(x_30) = x_940;
-  let x_33 = *(j);
-  let x_941 = *(i);
-  *(i) = 0i;
-  *(i) = x_941;
-  let x_526 = x_525.xzz;
-  let x_942 = *(x_30);
-  *(x_30) = 0i;
-  *(x_30) = x_942;
-  let x_34 = &(obj.numbers[x_33]);
-  let x_35 = *(x_34);
-  let x_943 = obj;
-  obj = QuicksortObject();
-  obj = x_943;
-  let x_527 = x_526.xx;
-  let x_36 = &(obj.numbers[x_32]);
-  let x_528 = x_524.xzx;
-  *(x_36) = x_35;
-  let x_944 = obj;
-  obj = QuicksortObject();
-  obj = x_944;
-  let x_529 = x_526.yzx;
-  let x_945 = *(i);
-  *(i) = 0i;
-  *(i) = x_945;
-  let x_37 = *(j);
-  let x_946 = temp;
-  temp = 0i;
-  temp = x_946;
-  let x_530 = x_529.zy;
-  let x_947 = *(x_34);
-  *(x_34) = 0i;
-  *(x_34) = x_947;
-  let x_38 = temp;
-  let x_948 = *(j);
-  *(j) = 0i;
-  *(j) = x_948;
-  let x_531 = vec3f(x_527.x, x_526.yx);
-  let x_949 = *(x_36);
-  *(x_36) = 0i;
-  *(x_36) = x_949;
-  let x_950 = obj;
-  obj = QuicksortObject();
-  obj = x_950;
-  let x_532 = x_528.xyx;
-  let x_951 = *(x_34);
-  *(x_34) = 0i;
-  *(x_34) = x_951;
-  obj.numbers[x_37] = x_38;
-  return;
-}
-
-fn performPartition_i1_i1_(l : ptr<function, i32>, h : ptr<function, i32>) -> i32 {
-  var param_3 : i32;
-  var i_1 : i32;
-  var j_1 : i32;
-  var param_2 : i32;
-  var param_1 : i32;
-  var param : i32;
-  var pivot : i32;
-  var x_537 : vec2f;
-  var x_538 : vec3f;
-  let x_952 = *(h);
-  *(h) = 0i;
-  *(h) = x_952;
-  let x_41 = *(h);
-  let x_953 = *(l);
-  *(l) = 0i;
-  *(l) = x_953;
-  let x_42 = &(obj.numbers[x_41]);
-  let x_954 = *(x_42);
-  *(x_42) = 0i;
-  *(x_42) = x_954;
-  let x_43 = *(x_42);
-  let x_955 = param_3;
-  param_3 = 0i;
-  param_3 = x_955;
-  let x_534 = x_199.zxz;
-  let x_956 = param_1;
-  param_1 = 0i;
-  param_1 = x_956;
-  pivot = x_43;
-  let x_45 = *(l);
-  let x_957 = *(h);
-  *(h) = 0i;
-  *(h) = x_957;
-  let x_958 = j_1;
-  j_1 = 0i;
-  j_1 = x_958;
-  let x_535 = x_534.yzy;
-  let x_959 = *(l);
-  *(l) = 0i;
-  *(l) = x_959;
-  i_1 = (x_45 - bitcast<i32>(1u));
-  let x_49 = *(l);
-  let x_536 = vec3f(x_534.xz, x_535.x);
-  j_1 = 10i;
-  let x_960 = obj;
-  obj = QuicksortObject();
-  obj = x_960;
-  loop {
-    var x_61 : ptr<private, i32>;
-    var x_539 : vec3f;
-    var x_541 : vec3f;
-    let x_961 = pivot;
-    pivot = 0i;
-    pivot = x_961;
-    let x_962 = param_1;
-    param_1 = 0i;
-    param_1 = x_962;
-    let x_55 = j_1;
-    let x_963 = pivot;
-    pivot = 0i;
-    pivot = x_963;
-    x_537 = x_199.yz;
-    let x_964 = obj;
-    obj = QuicksortObject();
-    obj = x_964;
-    let x_56 = *(h);
-    let x_965 = *(h);
-    *(h) = 0i;
-    *(h) = x_965;
-    let x_966 = param;
-    param = 0i;
-    param = x_966;
-    let x_967 = j_1;
-    j_1 = 0i;
-    j_1 = x_967;
-    x_538 = vec3f(x_534.x, x_537.y, x_534.z);
-    let x_968 = param;
-    param = 0i;
-    param = x_968;
-    if ((x_55 <= (x_56 - bitcast<i32>(1u)))) {
-    } else {
-      break;
-    }
-    let x_60 = j_1;
-    let x_969 = *(x_42);
-    *(x_42) = 0i;
-    *(x_42) = x_969;
-    x_61 = obj.numbers[x_60];
-    let x_970 = *(h);
-    *(h) = 0i;
-    *(h) = x_970;
-    x_539 = vec3f(x_537.x, x_535.z, x_537.x);
-    let x_971 = param_1;
-    param_1 = 0i;
-    param_1 = x_971;
-    let x_62 = x_61;
-    let x_972 = obj;
-    obj = QuicksortObject();
-    obj = x_972;
-    let x_63 = pivot;
-    let x_540 = vec2f(x_199.y, x_534.z);
-    let x_973 = i_1;
-    i_1 = 0i;
-    i_1 = x_973;
-    let x_974 = *(l);
-    *(l) = 0i;
-    *(l) = x_974;
-    x_541 = x_534.yxy;
-    let x_975 = pivot;
-    pivot = 0i;
-    pivot = x_975;
-    if ((x_62 <= x_63)) {
-      let x_542 = x_541.zxx;
-      let x_976 = param_3;
-      param_3 = 0i;
-      param_3 = x_976;
-      let x_67 = i_1;
-      let x_977 = pivot;
-      pivot = 0i;
-      pivot = x_977;
-      let x_543 = vec2f(x_539.x, x_541.y);
-      let x_978 = i_1;
-      i_1 = 0i;
-      i_1 = x_978;
-      let x_979 = param;
-      param = 0i;
-      param = x_979;
-      i_1 = (x_67 + bitcast<i32>(1u));
-      let x_980 = *(l);
-      *(l) = 0i;
-      *(l) = x_980;
-      let x_544 = vec3f(x_199.zy, x_540.x);
-      let x_70 = i_1;
-      let x_545 = vec2f(x_537.y, x_538.x);
-      let x_981 = param;
-      param = 0i;
-      param = x_981;
-      param = x_70;
-      let x_982 = param;
-      param = 0i;
-      param = x_982;
-      let x_546 = x_545.xx;
-      let x_983 = i_1;
-      i_1 = 0i;
-      i_1 = x_983;
-      let x_72 = j_1;
-      param_1 = x_72;
-      let x_984 = param_3;
-      param_3 = 0i;
-      param_3 = x_984;
-      swap_i1_i1_(&(param), &(param_1));
-      let x_985 = param_1;
-      param_1 = 0i;
-      param_1 = x_985;
-    }
-    let x_986 = obj;
-    obj = QuicksortObject();
-    obj = x_986;
-
-    continuing {
-      let x_987 = *(h);
-      *(h) = 0i;
-      *(h) = x_987;
-      let x_74 = j_1;
-      let x_988 = *(h);
-      *(h) = 0i;
-      *(h) = x_988;
-      let x_547 = vec3f(x_539.x, x_541.zz);
-      let x_989 = x_61;
-      x_61 = 0i;
-      x_61 = x_989;
-      let x_990 = param;
-      param = 0i;
-      param = x_990;
-      j_1 = (1i + x_74);
-      let x_991 = param_1;
-      param_1 = 0i;
-      param_1 = x_991;
-      let x_548 = x_541.yzx;
-      let x_992 = x_61;
-      x_61 = 0i;
-      x_61 = x_992;
-    }
-  }
-  let x_76 = i_1;
-  let x_993 = *(x_42);
-  *(x_42) = 0i;
-  *(x_42) = x_993;
-  let x_549 = x_534.xy;
-  let x_994 = obj;
-  obj = QuicksortObject();
-  obj = x_994;
-  let x_995 = *(h);
-  *(h) = 0i;
-  *(h) = x_995;
-  i_1 = (1i + x_76);
-  let x_996 = param_1;
-  param_1 = 0i;
-  param_1 = x_996;
-  let x_79 = i_1;
-  let x_997 = j_1;
-  j_1 = 0i;
-  j_1 = x_997;
-  let x_550 = x_534.xx;
-  let x_998 = param_1;
-  param_1 = 0i;
-  param_1 = x_998;
-  param_2 = x_79;
-  let x_551 = vec2f(x_534.y, x_536.x);
-  let x_999 = pivot;
-  pivot = 0i;
-  pivot = x_999;
-  let x_81 = *(h);
-  let x_552 = vec2f(x_550.x, x_549.y);
-  let x_1000 = *(h);
-  *(h) = 0i;
-  *(h) = x_1000;
-  param_3 = x_81;
-  let x_1001 = i_1;
-  i_1 = 0i;
-  i_1 = x_1001;
-  let x_553 = vec2f(x_549.y, x_552.x);
-  let x_1002 = *(h);
-  *(h) = 0i;
-  *(h) = x_1002;
-  swap_i1_i1_(&(param_2), &(param_3));
-  let x_1003 = *(l);
-  *(l) = 0i;
-  *(l) = x_1003;
-  let x_554 = vec2f(x_536.z, x_199.y);
-  let x_1004 = param_1;
-  param_1 = 0i;
-  param_1 = x_1004;
-  let x_83 = i_1;
-  let x_1005 = param;
-  param = 0i;
-  param = x_1005;
-  let x_555 = x_534.yx;
-  let x_1006 = j_1;
-  j_1 = 0i;
-  j_1 = x_1006;
-  return x_83;
-}
-
-fn quicksort_() {
-  var param_4 : i32;
-  var h_1 : i32;
-  var p : i32;
-  var l_1 : i32;
-  var top : i32;
-  var stack : array<i32, 10u>;
-  var param_5 : i32;
-  l_1 = 0i;
-  let x_1007 = param_5;
-  param_5 = 0i;
-  param_5 = x_1007;
-  h_1 = 9i;
-  let x_1008 = stack;
-  stack = array<i32, 10u>();
-  stack = x_1008;
-  let x_556 = x_199.yy;
-  let x_1009 = param_5;
-  param_5 = 0i;
-  param_5 = x_1009;
-  top = -1i;
-  let x_1010 = p;
-  p = 0i;
-  p = x_1010;
-  let x_93 = top;
-  let x_557 = x_199.xx;
-  let x_1011 = p;
-  p = 0i;
-  p = x_1011;
-  let x_94 = (x_93 + bitcast<i32>(1u));
-  let x_1012 = top;
-  top = 0i;
-  top = x_1012;
-  let x_558 = vec2f(x_556.y, x_557.y);
-  let x_1013 = param_4;
-  param_4 = 0i;
-  param_4 = x_1013;
-  top = x_94;
-  let x_1014 = h_1;
-  h_1 = 0i;
-  h_1 = x_1014;
-  let x_559 = x_557.yxx;
-  let x_1015 = param_4;
-  param_4 = 0i;
-  param_4 = x_1015;
-  let x_95 = l_1;
-  let x_1016 = obj;
-  obj = QuicksortObject();
-  obj = x_1016;
-  let x_560 = vec3f(x_559.yx, x_557.x);
-  let x_96 = &(stack[x_94]);
-  let x_1017 = stack;
-  stack = array<i32, 10u>();
-  stack = x_1017;
-  let x_561 = x_556.yyy;
-  let x_1018 = l_1;
-  l_1 = 0i;
-  l_1 = 0i;
-  *(x_96) = x_95;
-  let x_1019 = param_5;
-  param_5 = 0i;
-  param_5 = x_1019;
-  let x_97 = top;
-  let x_1020 = param_4;
-  param_4 = 0i;
-  param_4 = x_1020;
-  let x_562 = vec3f(x_199.z, x_558.y, x_199.y);
-  let x_1021 = *(x_96);
-  *(x_96) = 0i;
-  *(x_96) = x_1021;
-  let x_98 = (x_97 + 1i);
-  let x_1022 = *(x_96);
-  *(x_96) = 0i;
-  *(x_96) = x_1022;
-  let x_563 = vec3f(x_559.xz, x_556.y);
-  top = x_98;
-  let x_1023 = param_4;
-  param_4 = 0i;
-  param_4 = x_1023;
-  let x_99 = h_1;
-  let x_1024 = param_4;
-  param_4 = 0i;
-  param_4 = x_1024;
-  let x_564 = vec3f(x_558.x, x_561.x, x_558.y);
-  let x_1025 = l_1;
-  l_1 = 0i;
-  l_1 = x_1025;
-  let x_100 = &(stack[x_98]);
-  let x_1026 = param_5;
-  param_5 = 0i;
-  param_5 = x_1026;
-  let x_565 = x_564.zz;
-  let x_1027 = p;
-  p = 0i;
-  p = x_1027;
-  *(x_100) = x_99;
-  loop {
-    let x_566 = x_563.xxx;
-    let x_1028 = h_1;
-    h_1 = 0i;
-    h_1 = x_1028;
-    let x_1029 = stack;
-    stack = array<i32, 10u>();
-    stack = x_1029;
-    let x_106 = top;
-    let x_1030 = stack;
-    stack = array<i32, 10u>();
-    stack = x_1030;
-    let x_567 = vec2f(x_558.x, x_564.z);
-    let x_1031 = param_4;
-    param_4 = 0i;
-    param_4 = x_1031;
-    if ((x_106 >= bitcast<i32>(0u))) {
-    } else {
-      break;
-    }
-    let x_1032 = obj;
-    obj = QuicksortObject();
-    obj = x_1032;
-    let x_568 = vec3f(x_559.yx, x_563.y);
-    let x_1033 = param_4;
-    param_4 = 0i;
-    param_4 = x_1033;
-    let x_108 = top;
-    let x_569 = vec3f(x_565.x, x_567.y, x_565.x);
-    let x_1034 = h_1;
-    h_1 = 0i;
-    h_1 = x_1034;
-    let x_570 = x_556.xx;
-    let x_1035 = p;
-    p = 0i;
-    p = x_1035;
-    top = (x_108 - bitcast<i32>(1u));
-    let x_1036 = p;
-    p = 0i;
-    p = x_1036;
-    let x_110 = &(stack[x_108]);
-    let x_1037 = *(x_96);
-    *(x_96) = 0i;
-    *(x_96) = x_1037;
-    let x_111 = *(x_110);
-    let x_1038 = stack;
-    stack = array<i32, 10u>();
-    stack = x_1038;
-    let x_571 = vec3f(x_559.yx, x_564.y);
-    let x_1039 = l_1;
-    l_1 = 0i;
-    l_1 = x_1039;
-    h_1 = x_111;
-    let x_1040 = stack;
-    stack = array<i32, 10u>();
-    stack = x_1040;
-    let x_572 = vec2f(x_562.y, x_561.y);
-    let x_1041 = p;
-    p = 0i;
-    p = x_1041;
-    let x_112 = top;
-    let x_1042 = param_4;
-    param_4 = 0i;
-    param_4 = x_1042;
-    let x_1043 = *(x_100);
-    *(x_100) = 0i;
-    *(x_100) = x_1043;
-    let x_573 = x_199.yz;
-    top = (x_112 - 1i);
-    let x_1044 = param_5;
-    param_5 = 0i;
-    param_5 = x_1044;
-    let x_574 = vec3f(x_570.y, x_565.x, x_570.y);
-    let x_1045 = h_1;
-    h_1 = 0i;
-    h_1 = x_1045;
-    let x_114 = &(stack[x_112]);
-    let x_575 = x_564.yz;
-    let x_1046 = *(x_100);
-    *(x_100) = 0i;
-    *(x_100) = x_1046;
-    let x_115 = *(x_114);
-    let x_1047 = p;
-    p = 0i;
-    p = x_1047;
-    let x_576 = vec3f(x_573.yy, x_565.x);
-    let x_1048 = param_5;
-    param_5 = 0i;
-    param_5 = x_1048;
-    l_1 = x_115;
-    let x_1049 = top;
-    top = 0i;
-    top = x_1049;
-    let x_118 = l_1;
-    param_4 = x_118;
-    let x_1050 = *(x_110);
-    *(x_110) = 0i;
-    *(x_110) = x_1050;
-    let x_577 = x_569.yz;
-    let x_120 = h_1;
-    let x_578 = vec2f(x_558.x, x_199.y);
-    param_5 = x_120;
-    let x_1051 = *(x_100);
-    *(x_100) = 0i;
-    *(x_100) = x_1051;
-    let x_121 = performPartition_i1_i1_(&(param_4), &(param_5));
-    let x_579 = vec2f(x_567.x, x_568.x);
-    let x_1052 = param_5;
-    param_5 = 0i;
-    param_5 = x_1052;
-    p = x_121;
-    let x_1053 = param_4;
-    param_4 = 0i;
-    param_4 = x_1053;
-    let x_122 = p;
-    let x_1054 = h_1;
-    h_1 = 0i;
-    h_1 = x_1054;
-    let x_580 = x_568.yy;
-    let x_1055 = l_1;
-    l_1 = 0i;
-    l_1 = x_1055;
-    let x_1056 = h_1;
-    h_1 = 0i;
-    h_1 = x_1056;
-    let x_124 = l_1;
-    let x_1057 = *(x_110);
-    *(x_110) = 0i;
-    *(x_110) = x_1057;
-    let x_1058 = h_1;
-    h_1 = 0i;
-    h_1 = x_1058;
-    let x_582 = vec2f(x_567.y, x_573.x);
-    let x_1059 = *(x_100);
-    *(x_100) = 0i;
-    *(x_100) = x_1059;
-    if (((x_122 - bitcast<i32>(1u)) > x_124)) {
-      let x_1060 = param_4;
-      param_4 = 0i;
-      param_4 = x_1060;
-      let x_128 = top;
-      let x_583 = vec2f(x_571.y, x_556.y);
-      let x_1061 = *(x_100);
-      *(x_100) = 0i;
-      *(x_100) = x_1061;
-      let x_1062 = stack;
-      stack = array<i32, 10u>();
-      stack = x_1062;
-      let x_584 = x_569.zy;
-      let x_585 = vec3f(x_580.y, x_577.xx);
-      let x_130 = l_1;
-      let x_1063 = *(x_114);
-      *(x_114) = 0i;
-      *(x_114) = x_1063;
-      let x_586 = vec2f(x_564.x, x_585.x);
-      let x_1064 = param_5;
-      param_5 = 0i;
-      param_5 = x_1064;
-      let x_131 = &(stack[(1i + x_128)]);
-      let x_1065 = *(x_110);
-      *(x_110) = 0i;
-      *(x_110) = x_1065;
-      let x_587 = vec3f(x_566.yy, x_563.x);
-      let x_1066 = param_5;
-      param_5 = 0i;
-      param_5 = x_1066;
-      *(x_131) = x_130;
-      let x_132 = top;
-      let x_1067 = *(x_100);
-      *(x_100) = 0i;
-      *(x_100) = x_1067;
-      let x_588 = x_575.yx;
-      let x_1068 = *(x_131);
-      *(x_131) = 0i;
-      *(x_131) = x_1068;
-      let x_133 = bitcast<i32>((1u + bitcast<u32>(x_132)));
-      let x_1069 = *(x_100);
-      *(x_100) = 0i;
-      *(x_100) = x_1069;
-      let x_589 = vec3f(x_576.z, x_588.y, x_576.z);
-      let x_1070 = h_1;
-      h_1 = 0i;
-      h_1 = x_1070;
-      top = x_133;
-      let x_1071 = stack;
-      stack = array<i32, 10u>();
-      stack = x_1071;
-      let x_134 = p;
-      let x_590 = vec2f(x_576.x, x_573.y);
-      let x_1072 = *(x_114);
-      *(x_114) = 0i;
-      *(x_114) = x_1072;
-      let x_136 = &(stack[x_133]);
-      let x_1073 = *(x_114);
-      *(x_114) = 0i;
-      *(x_114) = x_1073;
-      *(x_136) = (x_134 - bitcast<i32>(1u));
-      let x_1074 = *(x_96);
-      *(x_96) = 0i;
-      *(x_96) = x_1074;
-      let x_591 = x_569.zy;
-      let x_1075 = *(x_136);
-      *(x_136) = 0i;
-      *(x_136) = x_1075;
-    }
-    let x_1076 = *(x_96);
-    *(x_96) = 0i;
-    *(x_96) = x_1076;
-    let x_592 = x_199.xy;
-    let x_1077 = obj;
-    obj = QuicksortObject();
-    obj = x_1077;
-    let x_137 = p;
-    let x_1078 = *(x_114);
-    *(x_114) = 0i;
-    *(x_114) = x_1078;
-    let x_593 = vec3f(x_571.z, x_556.xy);
-    let x_1079 = p;
-    p = 0i;
-    p = x_1079;
-    let x_594 = vec3f(x_563.zx, x_575.x);
-    let x_1080 = *(x_114);
-    *(x_114) = 0i;
-    *(x_114) = x_1080;
-    let x_139 = h_1;
-    let x_1081 = top;
-    top = 0i;
-    top = x_1081;
-    let x_595 = vec3f(x_560.z, x_568.x, x_560.x);
-    let x_1082 = *(x_100);
-    *(x_100) = 0i;
-    *(x_100) = x_1082;
-    let x_1083 = p;
-    p = 0i;
-    p = x_1083;
-    if ((bitcast<i32>((1u + bitcast<u32>(x_137))) < x_139)) {
-      let x_1084 = *(x_114);
-      *(x_114) = 0i;
-      *(x_114) = x_1084;
-      let x_596 = vec2f(x_592.y, x_582.x);
-      let x_1085 = l_1;
-      l_1 = 0i;
-      l_1 = x_1085;
-      let x_143 = top;
-      let x_1086 = *(x_114);
-      *(x_114) = 0i;
-      *(x_114) = x_1086;
-      let x_597 = vec3f(x_562.y, x_560.yy);
-      let x_144 = (x_143 + 1i);
-      let x_1087 = param_5;
-      param_5 = 0i;
-      param_5 = x_1087;
-      top = x_144;
-      let x_1088 = *(x_114);
-      *(x_114) = 0i;
-      *(x_114) = x_1088;
-      let x_145 = p;
-      let x_1089 = param_5;
-      param_5 = 0i;
-      param_5 = x_1089;
-      let x_599 = vec3f(x_560.zx, x_568.x);
-      let x_1090 = p;
-      p = 0i;
-      p = x_1090;
-      let x_600 = vec3f(x_556.x, x_580.xx);
-      let x_1091 = *(x_100);
-      *(x_100) = 0i;
-      *(x_100) = x_1091;
-      let x_147 = &(stack[x_144]);
-      let x_1092 = *(x_110);
-      *(x_110) = 0i;
-      *(x_110) = x_1092;
-      let x_601 = x_563.xy;
-      *(x_147) = bitcast<i32>((1u + bitcast<u32>(x_145)));
-      let x_1093 = stack;
-      stack = array<i32, 10u>();
-      stack = x_1093;
-      let x_148 = top;
-      let x_1094 = *(x_114);
-      *(x_114) = 0i;
-      *(x_114) = x_1094;
-      let x_602 = vec2f(x_565.y, x_599.y);
-      let x_1095 = stack;
-      stack = array<i32, 10u>();
-      stack = x_1095;
-      let x_149 = (x_148 + bitcast<i32>(1u));
-      let x_1096 = *(x_147);
-      *(x_147) = 0i;
-      *(x_147) = x_1096;
-      top = x_149;
-      let x_1097 = param_4;
-      param_4 = 0i;
-      param_4 = x_1097;
-      let x_150 = h_1;
-      let x_1098 = *(x_100);
-      *(x_100) = 0i;
-      *(x_100) = x_1098;
-      let x_1099 = *(x_96);
-      *(x_96) = 0i;
-      *(x_96) = x_1099;
-      stack[x_149] = x_150;
-      let x_1100 = *(x_114);
-      *(x_114) = 0i;
-      *(x_114) = x_1100;
-      let x_603 = vec3f(x_568.y, x_564.xx);
-      let x_1101 = l_1;
-      l_1 = 0i;
-      l_1 = x_1101;
-    }
-    let x_1102 = *(x_100);
-    *(x_100) = 0i;
-    *(x_100) = x_1102;
-
-    continuing {
-      let x_1103 = l_1;
-      l_1 = 0i;
-      l_1 = x_1103;
-      let x_604 = vec2f(x_563.z, x_564.x);
-      let x_1104 = obj;
-      obj = QuicksortObject();
-      obj = x_1104;
-    }
-  }
-  let x_1105 = h_1;
-  h_1 = 0i;
-  h_1 = x_1105;
-  return;
-}
-
-fn main_1() {
-  var color : vec3f;
-  var i_2 : i32;
-  var uv : vec2f;
-  let x_717 = uv;
-  uv = vec2f();
-  uv = x_717;
-  i_2 = 0i;
-  let x_721 = obj;
-  obj = QuicksortObject();
-  obj = x_721;
-  if (true) {
-    let x_722 = obj;
-    obj = QuicksortObject();
-    obj = x_722;
-    let x_431 = x_199.xx;
-    let x_158 = i_2;
-    let x_723 = uv;
-    uv = vec2f();
-    uv = x_723;
-    let x_725 = color;
-    color = vec3f();
-    color = x_725;
-    let x_432 = x_431.yy;
-    let x_726 = obj;
-    obj = QuicksortObject();
-    obj = x_726;
-  }
-  let x_756 = obj;
-  obj = QuicksortObject();
-  obj = x_756;
-  let x_446 = vec2f().xx;
-  let x_757 = i_2;
-  i_2 = 0i;
-  i_2 = x_757;
-  quicksort_();
-  let x_758 = obj;
-  obj = QuicksortObject();
-  obj = x_758;
-  let x_184 = gl_FragCoord;
-  let x_759 = uv;
-  uv = vec2f();
-  uv = x_759;
-  let x_447 = vec2f().yy;
-  let x_760 = uv;
-  uv = vec2f();
-  uv = x_760;
-  let x_185 = x_184.xy;
-  let x_448 = vec3f(x_185.y, x_446.yy);
-  let x_761 = obj;
-  obj = QuicksortObject();
-  obj = x_761;
-  let x_762 = uv;
-  uv = vec2f();
-  uv = x_762;
-  let x_191 = x_188.resolution;
-  let x_763 = obj;
-  obj = QuicksortObject();
-  obj = x_763;
-  let x_449 = vec3f(x_184.y, x_199.z, x_184.w);
-  let x_764 = color;
-  color = vec3f();
-  color = x_764;
-  let x_192 = (x_185 / x_191);
-  let x_765 = obj;
-  obj = QuicksortObject();
-  obj = x_765;
-  let x_450 = vec2f(x_447.x, x_185.y);
-  let x_766 = color;
-  color = vec3f();
-  let x_767 = color;
-  color = vec3f();
-  color = x_767;
-  color = x_766;
-  uv = x_192;
-  color = x_199;
-  let x_768 = color;
-  color = vec3f();
-  color = x_768;
-  let x_451 = vec3f(x_185.xy, x_446.y);
-  let x_769 = obj;
-  obj = QuicksortObject();
-  obj = x_769;
-  let x_200 = &(obj.numbers[0u]);
-  let x_770 = *(x_200);
-  *(x_200) = 0i;
-  *(x_200) = x_770;
-  let x_201 = *(x_200);
-  let x_771 = obj;
-  obj = QuicksortObject();
-  obj = x_771;
-  let x_772 = *(x_200);
-  *(x_200) = 0i;
-  *(x_200) = x_772;
-  let x_206 = color.x;
-  let x_773 = color.x;
-  color.x = 0.0f;
-  color.x = x_773;
-  let x_452 = x_199.zy;
-  let x_774 = i_2;
-  i_2 = 0i;
-  i_2 = x_774;
-  let x_775 = obj;
-  obj = QuicksortObject();
-  obj = x_775;
-  let x_453 = vec3f(x_451.x, x_450.xy);
-  color.x = (x_206 + f32(x_201));
-  let x_776 = uv;
-  uv = vec2f();
-  uv = x_776;
-  let x_777 = uv;
-  uv = vec2f();
-  uv = x_777;
-  let x_454 = x_184.yy;
-  let x_210 = uv.x;
-  let x_455 = x_192.yx;
-  let x_778 = uv.x;
-  uv.x = 0.0f;
-  uv.x = x_778;
-  let x_779 = obj;
-  obj = QuicksortObject();
-  obj = x_779;
-  if ((x_210 > 0.25f)) {
-    let x_780 = i_2;
-    i_2 = 0i;
-    i_2 = x_780;
-    let x_781 = *(x_200);
-    *(x_200) = 0i;
-    *(x_200) = x_781;
-    let x_456 = vec3f(vec2f().y, x_448.yy);
-    let x_782 = uv.x;
-    uv.x = 0.0f;
-    uv.x = x_782;
-    let x_216 = obj.numbers[1i];
-    let x_783 = obj;
-    obj = QuicksortObject();
-    obj = x_783;
-    let x_457 = x_454.xx;
-    let x_784 = uv;
-    uv = vec2f();
-    uv = x_784;
-    let x_785 = obj;
-    obj = QuicksortObject();
-    obj = x_785;
-    let x_458 = vec2f(x_199.z, vec2f().y);
-    let x_786 = i_2;
-    i_2 = 0i;
-    i_2 = x_786;
-    let x_219 = color[0i];
-    let x_787 = color[0i];
-    color[0i] = 0.0f;
-    color[0i] = x_787;
-    let x_788 = color;
-    color = vec3f();
-    color = x_788;
-    let x_789 = color;
-    color = vec3f();
-    color = x_789;
-    let x_459 = vec3f(x_454.yy, x_447.y);
-    let x_790 = color[0i];
-    color[0i] = 0.0f;
-    color[0i] = x_790;
-    color.x = (f32(x_216) + x_219);
-    let x_791 = *(x_200);
-    *(x_200) = 0i;
-    *(x_200) = x_791;
-  }
-  let x_792 = uv.x;
-  uv.x = 0.0f;
-  uv.x = x_792;
-  let x_793 = uv.x;
-  uv.x = 0.0f;
-  uv.x = x_793;
-  let x_223 = uv.x;
-  let x_794 = uv.x;
-  uv.x = 0.0f;
-  uv.x = x_794;
-  let x_460 = x_453.zyy;
-  let x_795 = uv;
-  uv = vec2f();
-  uv = x_795;
-  let x_796 = uv.x;
-  uv.x = 0.0f;
-  uv.x = x_796;
-  let x_461 = vec2f().yy;
-  let x_797 = uv.x;
-  uv.x = 0.0f;
-  uv.x = x_797;
-  if ((x_223 > 0.5f)) {
-    let x_798 = uv.x;
-    uv.x = 0.0f;
-    uv.x = x_798;
-    let x_462 = x_446.xx;
-    let x_799 = color.x;
-    color.x = 0.0f;
-    color.x = x_799;
-    let x_229 = &(obj.numbers[2u]);
-    let x_800 = color.x;
-    color.x = 0.0f;
-    color.x = x_800;
-    let x_463 = vec3f(x_453.xz, x_461.y);
-    let x_801 = color.x;
-    color.x = 0.0f;
-    color.x = x_801;
-    let x_230 = *(x_229);
-    let x_802 = uv.x;
-    uv.x = 0.0f;
-    uv.x = x_802;
-    let x_803 = color.x;
-    color.x = 0.0f;
-    color.x = x_803;
-    let x_804 = *(x_229);
-    *(x_229) = 0i;
-    *(x_229) = x_804;
-    let x_464 = vec2f(x_450.y, x_191.x);
-    let x_805 = color.y;
-    color.y = 0.0f;
-    color.y = x_805;
-    let x_234 = color.y;
-    let x_806 = *(x_229);
-    *(x_229) = 0i;
-    *(x_229) = x_806;
-    let x_465 = vec2f(x_463.x, x_185.x);
-    let x_807 = color.x;
-    color.x = 0.0f;
-    color.x = x_807;
-    let x_808 = i_2;
-    i_2 = 0i;
-    i_2 = x_808;
-    let x_466 = vec2f(x_455.y, vec2f().y);
-    let x_809 = i_2;
-    i_2 = 0i;
-    i_2 = x_809;
-    color.y = (f32(x_230) + x_234);
-    let x_810 = uv.x;
-    uv.x = 0.0f;
-    uv.x = x_810;
-  }
-  let x_811 = i_2;
-  i_2 = 0i;
-  i_2 = x_811;
-  let x_467 = x_191.xx;
-  let x_812 = uv.x;
-  uv.x = 0.0f;
-  uv.x = x_812;
-  let x_238 = uv[0i];
-  let x_813 = color;
-  color = vec3f();
-  color = x_813;
-  let x_814 = color.x;
-  color.x = 0.0f;
-  color.x = x_814;
-  if ((x_238 > 0.75f)) {
-    let x_815 = color.x;
-    color.x = 0.0f;
-    color.x = x_815;
-    let x_245 = obj.numbers[3i];
-    let x_816 = color.x;
-    color.x = 0.0f;
-    color.x = x_816;
-    let x_817 = obj;
-    obj = QuicksortObject();
-    obj = x_817;
-    let x_468 = x_467.xxx;
-    let x_818 = uv[0i];
-    uv[0i] = 0.0f;
-    uv[0i] = x_818;
-    let x_819 = uv.x;
-    uv.x = 0.0f;
-    uv.x = x_819;
-    let x_249 = color.z;
-    let x_820 = color;
-    color = vec3f();
-    color = x_820;
-    let x_469 = vec3f(x_467.x, x_191.y, x_467.y);
-    let x_821 = color.z;
-    color.z = 0.0f;
-    color.z = x_821;
-    let x_822 = *(x_200);
-    *(x_200) = 0i;
-    *(x_200) = x_822;
-    let x_470 = vec2f().xy;
-    let x_823 = color.z;
-    color.z = 0.0f;
-    color.z = x_823;
-    color.z = (x_249 + f32(x_245));
-    let x_824 = uv;
-    uv = vec2f();
-    uv = x_824;
-    let x_471 = x_470.yy;
-  }
-  let x_825 = uv[0i];
-  uv[0i] = 0.0f;
-  uv[0i] = x_825;
-  let x_472 = x_454.xyy;
-  let x_253 = &(obj.numbers[4i]);
-  let x_254 = *(x_253);
-  let x_826 = uv[0i];
-  uv[0i] = 0.0f;
-  uv[0i] = x_826;
-  let x_827 = color;
-  color = vec3f();
-  color = x_827;
-  let x_473 = vec3f(x_446.y, x_453.xx);
-  let x_828 = *(x_253);
-  *(x_253) = 0i;
-  *(x_253) = x_828;
-  let x_474 = vec2f(x_191.x, x_184.z);
-  let x_829 = uv.x;
-  uv.x = 0.0f;
-  uv.x = x_829;
-  let x_257 = color.y;
-  let x_830 = color.y;
-  color.y = 0.0f;
-  color.y = x_830;
-  let x_475 = vec2f(x_467.x, x_450.x);
-  let x_831 = uv.x;
-  uv.x = 0.0f;
-  uv.x = x_831;
-  let x_832 = color.x;
-  color.x = 0.0f;
-  color.x = x_832;
-  let x_476 = vec2f(x_451.z, x_460.y);
-  color.y = (x_257 + f32(x_254));
-  let x_477 = vec3f(vec2f().x, x_472.x, vec2f().y);
-  let x_833 = uv.x;
-  uv.x = 0.0f;
-  uv.x = x_833;
-  let x_834 = color.x;
-  color.x = 0.0f;
-  color.x = x_834;
-  let x_478 = x_472.xy;
-  let x_835 = uv.y;
-  uv.y = 0.0f;
-  uv.y = x_835;
-  let x_261 = uv.y;
-  let x_836 = i_2;
-  i_2 = 0i;
-  i_2 = x_836;
-  let x_479 = vec3f(vec2f().y, x_454.y, vec2f().x);
-  let x_837 = *(x_200);
-  *(x_200) = 0i;
-  *(x_200) = x_837;
-  let x_838 = color.y;
-  color.y = 0.0f;
-  color.y = x_838;
-  let x_480 = vec3f(x_446.xx, vec2f().y);
-  let x_839 = uv.x;
-  uv.x = 0.0f;
-  uv.x = x_839;
-  if ((x_261 > 0.25f)) {
-    let x_481 = vec2f(x_447.x, x_480.z);
-    let x_840 = color;
-    color = vec3f();
-    color = x_840;
-    let x_267 = obj.numbers[5u];
-    let x_841 = color.x;
-    color.x = 0.0f;
-    color.x = x_841;
-    let x_842 = i_2;
-    i_2 = 0i;
-    i_2 = x_842;
-    let x_843 = i_2;
-    i_2 = 0i;
-    i_2 = x_843;
-    let x_270 = color.x;
-    let x_844 = uv[0i];
-    uv[0i] = 0.0f;
-    uv[0i] = x_844;
-    let x_482 = vec3f(x_455.x, x_475.y, x_455.y);
-    let x_845 = obj;
-    obj = QuicksortObject();
-    obj = x_845;
-    let x_846 = uv.y;
-    uv.y = 0.0f;
-    uv.y = x_846;
-    let x_847 = i_2;
-    i_2 = 0i;
-    i_2 = x_847;
-    let x_483 = vec3f(x_184.ww, x_192.x);
-    let x_848 = uv.x;
-    uv.x = 0.0f;
-    uv.x = x_848;
-    color.x = (f32(x_267) + x_270);
-    let x_484 = vec3f(x_454.y, x_450.x, x_454.y);
-    let x_849 = uv.x;
-    uv.x = 0.0f;
-    uv.x = x_849;
-  }
-  let x_850 = color.x;
-  color.x = 0.0f;
-  color.x = x_850;
-  let x_485 = vec3f(x_467.x, x_450.yx);
-  let x_851 = uv.y;
-  uv.y = 0.0f;
-  uv.y = x_851;
-  let x_852 = *(x_253);
-  *(x_253) = 0i;
-  *(x_253) = x_852;
-  let x_274 = uv.y;
-  let x_853 = *(x_200);
-  *(x_200) = 0i;
-  *(x_200) = x_853;
-  if ((x_274 > 0.5f)) {
-    let x_854 = uv.x;
-    uv.x = 0.0f;
-    uv.x = x_854;
-    let x_486 = vec2f(x_480.y, x_455.y);
-    let x_279 = &(obj.numbers[6u]);
-    let x_855 = color.y;
-    color.y = 0.0f;
-    color.y = x_855;
-    let x_487 = x_449.zy;
-    let x_856 = uv.y;
-    uv.y = 0.0f;
-    uv.y = x_856;
-    let x_280 = *(x_279);
-    let x_857 = uv.y;
-    uv.y = 0.0f;
-    uv.y = x_857;
-    let x_858 = i_2;
-    i_2 = 0i;
-    i_2 = x_858;
-    let x_859 = *(x_253);
-    *(x_253) = 0i;
-    *(x_253) = x_859;
-    let x_488 = x_473.zy;
-    let x_283 = color.y;
-    let x_860 = uv;
-    uv = vec2f();
-    uv = x_860;
-    let x_861 = color.x;
-    color.x = 0.0f;
-    color.x = x_861;
-    let x_489 = x_475.yx;
-    let x_862 = *(x_279);
-    *(x_279) = 0i;
-    *(x_279) = x_862;
-    let x_863 = *(x_279);
-    *(x_279) = 0i;
-    *(x_279) = x_863;
-    let x_490 = x_480.zz;
-    let x_864 = obj;
-    obj = QuicksortObject();
-    obj = x_864;
-    color.y = (f32(x_280) + x_283);
-    let x_865 = color.x;
-    color.x = 0.0f;
-    color.x = x_865;
-    let x_491 = vec2f(x_199.y, x_454.x);
-    let x_866 = color.y;
-    color.y = 0.0f;
-    color.y = x_866;
-  }
-  let x_492 = x_455.yy;
-  let x_867 = color.x;
-  color.x = 0.0f;
-  color.x = x_867;
-  let x_287 = uv.y;
-  let x_868 = obj;
-  obj = QuicksortObject();
-  obj = x_868;
-  let x_493 = x_475.xy;
-  let x_869 = uv[0i];
-  uv[0i] = 0.0f;
-  uv[0i] = x_869;
-  let x_870 = color.y;
-  color.y = 0.0f;
-  color.y = x_870;
-  let x_494 = x_191.xyy;
-  let x_871 = *(x_253);
-  *(x_253) = 0i;
-  *(x_253) = x_871;
-  if ((x_287 > 0.75f)) {
-    let x_872 = color;
-    color = vec3f();
-    color = x_872;
-    let x_873 = color.x;
-    color.x = 0.0f;
-    color.x = x_873;
-    let x_495 = x_192.yxy;
-    let x_874 = color;
-    color = vec3f();
-    color = x_874;
-    let x_293 = obj.numbers[7i];
-    let x_875 = uv.x;
-    uv.x = 0.0f;
-    uv.x = x_875;
-    let x_496 = vec3f(x_475.x, x_467.yx);
-    let x_876 = color.y;
-    color.y = 0.0f;
-    color.y = x_876;
-    let x_497 = vec2f(x_477.x, x_461.y);
-    let x_877 = *(x_200);
-    *(x_200) = 0i;
-    *(x_200) = x_877;
-    let x_878 = color.y;
-    color.y = 0.0f;
-    color.y = x_878;
-    let x_498 = x_478.xyx;
-    let x_879 = color.x;
-    color.x = 0.0f;
-    color.x = x_879;
-    let x_296 = color.z;
-    let x_880 = uv.y;
-    uv.y = 0.0f;
-    uv.y = x_880;
-    let x_499 = x_184.xy;
-    let x_881 = uv.x;
-    uv.x = 0.0f;
-    uv.x = x_881;
-    let x_882 = uv.y;
-    uv.y = 0.0f;
-    uv.y = x_882;
-    let x_883 = uv.y;
-    uv.y = 0.0f;
-    uv.y = x_883;
-    let x_500 = vec3f(x_499.yy, x_494.z);
-    let x_884 = color.z;
-    color.z = 0.0f;
-    color.z = x_884;
-    color.z = (f32(x_293) + x_296);
-    let x_885 = color.y;
-    color.y = 0.0f;
-    color.y = x_885;
-    let x_501 = x_453.xz;
-    let x_886 = color.x;
-    color.x = 0.0f;
-    color.x = x_886;
-  }
-  let x_887 = i_2;
-  i_2 = 0i;
-  i_2 = x_887;
-  let x_502 = vec2f(x_451.y, x_192.y);
-  let x_888 = uv;
-  uv = vec2f();
-  uv = x_888;
-  let x_300 = &(obj.numbers[8i]);
-  let x_301 = *(x_300);
-  let x_889 = i_2;
-  i_2 = 0i;
-  i_2 = x_889;
-  let x_503 = vec2f(x_185.x, x_451.z);
-  let x_890 = *(x_300);
-  *(x_300) = 0i;
-  *(x_300) = x_890;
-  let x_891 = color.y;
-  color.y = 0.0f;
-  color.y = x_891;
-  let x_504 = vec2f(x_453.y, vec2f().x);
-  let x_892 = color.x;
-  color.x = 0.0f;
-  color.x = x_892;
-  let x_505 = x_504.xyx;
-  let x_893 = color.z;
-  color.z = 0.0f;
-  color.z = x_893;
-  let x_304 = color.z;
-  let x_894 = color.x;
-  color.x = 0.0f;
-  color.x = x_894;
-  let x_506 = vec2f(x_493.x, x_492.x);
-  let x_895 = *(x_253);
-  *(x_253) = 0i;
-  *(x_253) = x_895;
-  let x_896 = uv.y;
-  uv.y = 0.0f;
-  uv.y = x_896;
-  let x_507 = vec2f(x_461.x, x_447.x);
-  let x_897 = color.y;
-  color.y = 0.0f;
-  color.y = x_897;
-  color.z = (x_304 + f32(x_301));
-  let x_898 = uv;
-  uv = vec2f();
-  uv = x_898;
-  let x_899 = uv.x;
-  uv.x = 0.0f;
-  uv.x = x_899;
-  let x_508 = vec3f(x_461.yx, x_506.y);
-  let x_900 = uv.x;
-  uv.x = 0.0f;
-  uv.x = x_900;
-  let x_308 = uv.x;
-  let x_901 = color.y;
-  color.y = 0.0f;
-  color.y = x_901;
-  let x_509 = vec3f(x_503.yx, x_448.z);
-  let x_902 = uv.y;
-  uv.y = 0.0f;
-  uv.y = x_902;
-  let x_310 = uv.y;
-  let x_903 = uv.y;
-  uv.y = 0.0f;
-  uv.y = x_903;
-  let x_904 = color.z;
-  color.z = 0.0f;
-  color.z = x_904;
-  let x_510 = vec3f(x_199.y, x_485.yz);
-  let x_905 = color.z;
-  color.z = 0.0f;
-  color.z = x_905;
-  let x_906 = i_2;
-  i_2 = 0i;
-  i_2 = x_906;
-  let x_511 = x_485.zy;
-  let x_907 = color;
-  color = vec3f();
-  color = x_907;
-  let x_908 = uv.y;
-  uv.y = 0.0f;
-  uv.y = x_908;
-  let x_512 = x_455.yyy;
-  let x_909 = *(x_253);
-  *(x_253) = 0i;
-  *(x_253) = x_909;
-  if ((abs((x_308 - x_310)) < 0.25f)) {
-    let x_910 = uv.x;
-    uv.x = 0.0f;
-    uv.x = x_910;
-    let x_911 = obj;
-    obj = QuicksortObject();
-    obj = x_911;
-    let x_513 = vec3f(x_505.zx, x_448.x);
-    let x_912 = *(x_300);
-    *(x_300) = 0i;
-    *(x_300) = x_912;
-    let x_317 = obj.numbers[9u];
-    let x_514 = x_474.yyy;
-    let x_913 = uv.y;
-    uv.y = 0.0f;
-    uv.y = x_913;
-    let x_320 = color.x;
-    let x_914 = uv.y;
-    uv.y = 0.0f;
-    uv.y = x_914;
-    let x_515 = x_502.xy;
-    let x_915 = color.x;
-    color.x = 0.0f;
-    color.x = x_915;
-    let x_916 = color;
-    color = vec3f();
-    color = x_916;
-    let x_516 = x_452.xx;
-    let x_917 = uv;
-    uv = vec2f();
-    uv = x_917;
-    let x_918 = uv.x;
-    uv.x = 0.0f;
-    uv.x = x_918;
-    let x_517 = vec2f().xxy;
-    color.x = (f32(x_317) + x_320);
-    let x_919 = color.x;
-    color.x = 0.0f;
-    color.x = x_919;
-    let x_518 = vec3f(x_480.y, x_508.x, x_480.x);
-    let x_920 = color.x;
-    color.x = 0.0f;
-    color.x = x_920;
-  }
-  let x_921 = uv.y;
-  uv.y = 0.0f;
-  uv.y = x_921;
-  let x_325 = color;
-  let x_922 = uv[0i];
-  uv[0i] = 0.0f;
-  uv[0i] = x_922;
-  let x_519 = vec3f(x_447.x, x_446.xy);
-  let x_326 = normalize(x_325);
-  let x_923 = uv.x;
-  uv.x = 0.0f;
-  uv.x = x_923;
-  let x_924 = obj;
-  obj = QuicksortObject();
-  obj = x_924;
-  let x_925 = obj;
-  obj = QuicksortObject();
-  obj = x_925;
-  let x_926 = color.y;
-  color.y = 0.0f;
-  color.y = x_926;
-  let x_520 = vec2f(x_506.y, x_519.y);
-  let x_927 = color.y;
-  color.y = 0.0f;
-  color.y = x_927;
-  let x_330 = vec4f(x_326.x, x_326.y, x_326.z, 1.0f);
-  let x_928 = uv.y;
-  uv.y = 0.0f;
-  uv.y = x_928;
-  let x_521 = vec3f(x_199.yy, x_520.y);
-  let x_929 = uv.x;
-  uv.x = 0.0f;
-  uv.x = x_929;
-  x_GLF_color = x_330;
-  let x_930 = obj;
-  obj = QuicksortObject();
-  obj = x_930;
-  let x_522 = vec3f(x_330.wy, x_493.x);
-  let x_931 = color.x;
-  color.x = 0.0f;
-  color.x = x_931;
-  return;
-}
-
-struct main_out {
-  @location(0)
-  x_GLF_color_1 : vec4f,
-}
-
-@fragment
-fn main(@builtin(position) gl_FragCoord_param : vec4f) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
-
-error: function-scope 'var' must have a constructible type
diff --git a/test/tint/bug/tint/757.wgsl.expected.ir.msl b/test/tint/bug/tint/757.wgsl.expected.ir.msl
index d0caa43..7457b78 100644
--- a/test/tint/bug/tint/757.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/757.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Constants = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Constants = struct @align(4) {
   level:i32 @offset(0)
 }
 
@@ -8,14 +8,14 @@
   values:array<f32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %constants:ptr<uniform, Constants, read> = var @binding_point(0, 0)
   %myTexture:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(0, 1)
   %result:ptr<storage, Result, read_write> = var @binding_point(0, 3)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%GlobalInvocationID:vec3<u32> [@global_invocation_id]):void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%GlobalInvocationID:vec3<u32> [@global_invocation_id]):void {
+  $B2: {
     %6:u32 = access %GlobalInvocationID, 2u
     %7:u32 = mul 4u, %6
     %8:u32 = access %GlobalInvocationID, 1u
@@ -28,39 +28,40 @@
     %15:u32 = mul %14, 1u
     store %flatIndex, %15
     %16:texture_2d_array<f32> = load %myTexture
-    %17:vec2<u32> = swizzle %GlobalInvocationID, xy
-    %18:vec2<i32> = convert %17
-    %19:vec4<f32> = textureLoad %16, %18, 0i, 0i
-    %texel:ptr<function, vec4<f32>, read_write> = var, %19
-    loop [i: %b3, b: %b4, c: %b5] {  # loop_1
-      %b3 = block {  # initializer
+    %17:texture_2d_array<f32> = let %16
+    %18:vec2<u32> = swizzle %GlobalInvocationID, xy
+    %19:vec2<i32> = convert %18
+    %20:vec4<f32> = textureLoad %17, %19, 0i, 0i
+    %texel:ptr<function, vec4<f32>, read_write> = var, %20
+    loop [i: $B3, b: $B4, c: $B5] {  # loop_1
+      $B3: {  # initializer
         %i:ptr<function, u32, read_write> = var, 0u
-        next_iteration %b4
+        next_iteration  # -> $B4
       }
-      %b4 = block {  # body
-        %22:u32 = load %i
-        %23:bool = lt %22, 1u
-        if %23 [t: %b6, f: %b7] {  # if_1
-          %b6 = block {  # true
+      $B4: {  # body
+        %23:u32 = load %i
+        %24:bool = lt %23, 1u
+        if %24 [t: $B6, f: $B7] {  # if_1
+          $B6: {  # true
             exit_if  # if_1
           }
-          %b7 = block {  # false
+          $B7: {  # false
             exit_loop  # loop_1
           }
         }
-        %24:u32 = load %flatIndex
-        %25:u32 = load %i
-        %26:u32 = add %24, %25
-        %27:ptr<storage, f32, read_write> = access %result, 0u, %26
-        %28:f32 = load_vector_element %texel, 0u
-        store %27, %28
-        continue %b5
+        %25:u32 = load %flatIndex
+        %26:u32 = load %i
+        %27:u32 = add %25, %26
+        %28:ptr<storage, f32, read_write> = access %result, 0u, %27
+        %29:f32 = load_vector_element %texel, 0u
+        store %28, %29
+        continue  # -> $B5
       }
-      %b5 = block {  # continuing
-        %29:u32 = load %i
-        %30:u32 = add %29, 1u
-        store %i, %30
-        next_iteration %b4
+      $B5: {  # continuing
+        %30:u32 = load %i
+        %31:u32 = add %30, 1u
+        store %i, %31
+        next_iteration  # -> $B4
       }
     }
     ret
diff --git a/test/tint/bug/tint/824.wgsl.expected.ir.msl b/test/tint/bug/tint/824.wgsl.expected.ir.msl
index 4174ae5..d73170c 100644
--- a/test/tint/bug/tint/824.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/824.wgsl.expected.ir.msl
@@ -1,24 +1,25 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:775 internal compiler error: Output = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: Output = struct @align(16) {
   Position:vec4<f32> @offset(0), @builtin(position)
   color:vec4<f32> @offset(16), @location(0)
 }
 
-%tint_symbol = @vertex func(%VertexIndex:u32 [@vertex_index], %InstanceIndex:u32 [@instance_index]):Output -> %b1 {
-  %b1 = block {
+%tint_symbol = @vertex func(%VertexIndex:u32 [@vertex_index], %InstanceIndex:u32 [@instance_index]):Output {
+  $B1: {
     %zv:array<vec2<f32>, 4> = let array<vec2<f32>, 4>(vec2<f32>(0.20000000298023223877f), vec2<f32>(0.30000001192092895508f), vec2<f32>(-0.10000000149011611938f), vec2<f32>(1.10000002384185791016f))
-    %z:f32 = access %zv, %InstanceIndex, 0u
+    %5:f32 = access %zv, %InstanceIndex, 0u
+    %z:f32 = let %5
     %output:ptr<function, Output, read_write> = var
-    %7:ptr<function, vec4<f32>, read_write> = access %output, 0u
-    %8:vec4<f32> = construct 0.5f, 0.5f, %z, 1.0f
-    store %7, %8
+    %8:ptr<function, vec4<f32>, read_write> = access %output, 0u
+    %9:vec4<f32> = construct 0.5f, 0.5f, %z, 1.0f
+    store %8, %9
     %colors:array<vec4<f32>, 4> = let array<vec4<f32>, 4>(vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(1.0f))
-    %10:ptr<function, vec4<f32>, read_write> = access %output, 1u
-    %11:vec4<f32> = access %colors, %InstanceIndex
-    store %10, %11
-    %12:Output = load %output
-    ret %12
+    %11:ptr<function, vec4<f32>, read_write> = access %output, 1u
+    %12:vec4<f32> = access %colors, %InstanceIndex
+    store %11, %12
+    %13:Output = load %output
+    ret %13
   }
 }
 
diff --git a/test/tint/bug/tint/827.wgsl.expected.ir.msl b/test/tint/bug/tint/827.wgsl.expected.ir.msl
index 18df912..dd5bb6b 100644
--- a/test/tint/bug/tint/827.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/827.wgsl.expected.ir.msl
@@ -1,29 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Result = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Result = struct @align(4) {
   values:array<f32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %tex:ptr<handle, texture_depth_2d, read> = var @binding_point(0, 0)
   %result:ptr<storage, Result, read_write> = var @binding_point(0, 1)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%GlobalInvocationId:vec3<u32> [@global_invocation_id]):void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%GlobalInvocationId:vec3<u32> [@global_invocation_id]):void {
+  $B2: {
     %5:u32 = access %GlobalInvocationId, 1u
     %6:u32 = mul %5, 128u
     %7:u32 = access %GlobalInvocationId, 0u
     %8:u32 = add %6, %7
     %9:ptr<storage, f32, read_write> = access %result, 0u, %8
     %10:texture_depth_2d = load %tex
-    %11:u32 = access %GlobalInvocationId, 0u
-    %12:i32 = convert %11
-    %13:u32 = access %GlobalInvocationId, 1u
-    %14:i32 = convert %13
-    %15:vec2<i32> = construct %12, %14
-    %16:f32 = textureLoad %10, %15, 0i
-    store %9, %16
+    %11:texture_depth_2d = let %10
+    %12:u32 = access %GlobalInvocationId, 0u
+    %13:i32 = convert %12
+    %14:i32 = let %13
+    %15:u32 = access %GlobalInvocationId, 1u
+    %16:i32 = convert %15
+    %17:vec2<i32> = construct %14, %16
+    %18:f32 = textureLoad %11, %17, 0i
+    store %9, %18
     ret
   }
 }
diff --git a/test/tint/bug/tint/870.spvasm.expected.ir.msl b/test/tint/bug/tint/870.spvasm.expected.ir.msl
index b5ec799..230f41d 100644
--- a/test/tint/bug/tint/870.spvasm.expected.ir.msl
+++ b/test/tint/bug/tint/870.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: sspp962805860buildInformationS = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: sspp962805860buildInformationS = struct @align(16) {
   footprint:vec4<f32> @offset(0)
   offset:vec4<f32> @offset(16)
   essence:i32 @offset(32)
@@ -11,39 +11,40 @@
   passthru:sspp962805860buildInformationS @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sspp962805860buildInformation:ptr<storage, x_B4_BuildInformation, read> = var @binding_point(0, 2)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %orientation:ptr<function, array<i32, 6>, read_write> = var
     %4:ptr<storage, array<i32, 6>, read> = access %sspp962805860buildInformation, 0u, 3u
-    %x_23:array<i32, 6> = load %4
-    %6:ptr<function, i32, read_write> = access %orientation, 0i
-    %7:i32 = access %x_23, 0u
-    store %6, %7
-    %8:ptr<function, i32, read_write> = access %orientation, 1i
-    %9:i32 = access %x_23, 1u
-    store %8, %9
-    %10:ptr<function, i32, read_write> = access %orientation, 2i
-    %11:i32 = access %x_23, 2u
-    store %10, %11
-    %12:ptr<function, i32, read_write> = access %orientation, 3i
-    %13:i32 = access %x_23, 3u
-    store %12, %13
-    %14:ptr<function, i32, read_write> = access %orientation, 4i
-    %15:i32 = access %x_23, 4u
-    store %14, %15
-    %16:ptr<function, i32, read_write> = access %orientation, 5i
-    %17:i32 = access %x_23, 5u
-    store %16, %17
+    %5:array<i32, 6> = load %4
+    %x_23:array<i32, 6> = let %5
+    %7:ptr<function, i32, read_write> = access %orientation, 0i
+    %8:i32 = access %x_23, 0u
+    store %7, %8
+    %9:ptr<function, i32, read_write> = access %orientation, 1i
+    %10:i32 = access %x_23, 1u
+    store %9, %10
+    %11:ptr<function, i32, read_write> = access %orientation, 2i
+    %12:i32 = access %x_23, 2u
+    store %11, %12
+    %13:ptr<function, i32, read_write> = access %orientation, 3i
+    %14:i32 = access %x_23, 3u
+    store %13, %14
+    %15:ptr<function, i32, read_write> = access %orientation, 4i
+    %16:i32 = access %x_23, 4u
+    store %15, %16
+    %17:ptr<function, i32, read_write> = access %orientation, 5i
+    %18:i32 = access %x_23, 5u
+    store %17, %18
     ret
   }
 }
-%tint_symbol = @fragment func():void -> %b3 {
-  %b3 = block {
-    %19:void = call %main_1
+%tint_symbol = @fragment func():void {
+  $B3: {
+    %20:void = call %main_1
     ret
   }
 }
diff --git a/test/tint/bug/tint/913.wgsl.expected.ir.msl b/test/tint/bug/tint/913.wgsl.expected.ir.msl
index 1b0d9fb..366b488 100644
--- a/test/tint/bug/tint/913.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/913.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: OutputBuf = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: OutputBuf = struct @align(4) {
   result:array<u32> @offset(0)
 }
 
@@ -12,223 +12,232 @@
   copySize:vec2<u32> @offset(24)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %src:ptr<handle, texture_2d<f32>, read> = var @binding_point(0, 0)
   %dst:ptr<handle, texture_2d<f32>, read> = var @binding_point(0, 1)
   %output:ptr<storage, OutputBuf, read_write> = var @binding_point(0, 2)
   %uniforms:ptr<uniform, Uniforms, read> = var @binding_point(0, 3)
 }
 
-%aboutEqual = func(%value:f32, %expect:f32):bool -> %b2 {
-  %b2 = block {
+%aboutEqual = func(%value:f32, %expect:f32):bool {
+  $B2: {
     %8:f32 = sub %value, %expect
     %9:f32 = abs %8
     %10:bool = lt %9, 0.00100000004749745131f
     ret %10
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%GlobalInvocationID:vec3<u32> [@global_invocation_id]):void -> %b3 {
-  %b3 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%GlobalInvocationID:vec3<u32> [@global_invocation_id]):void {
+  $B3: {
     %13:texture_2d<f32> = load %src
-    %srcSize:vec2<u32> = textureDimensions %13
-    %15:texture_2d<f32> = load %dst
-    %dstSize:vec2<u32> = textureDimensions %15
-    %17:vec2<u32> = swizzle %GlobalInvocationID, xy
-    %dstTexCoord:vec2<u32> = construct %17
+    %14:vec2<u32> = textureDimensions %13
+    %srcSize:vec2<u32> = let %14
+    %16:texture_2d<f32> = load %dst
+    %17:vec2<u32> = textureDimensions %16
+    %dstSize:vec2<u32> = let %17
+    %19:vec2<u32> = swizzle %GlobalInvocationID, xy
+    %20:vec2<u32> = construct %19
+    %dstTexCoord:vec2<u32> = let %20
     %nonCoveredColor:vec4<f32> = let vec4<f32>(0.0f, 1.0f, 0.0f, 1.0f)
     %success:ptr<function, bool, read_write> = var, true
-    %21:u32 = access %dstTexCoord, 0u
-    %22:ptr<uniform, vec2<u32>, read> = access %uniforms, 3u
-    %23:u32 = load_vector_element %22, 0u
-    %24:bool = lt %21, %23
-    %25:bool = if %24 [t: %b4, f: %b5] {  # if_1
-      %b4 = block {  # true
+    %24:u32 = access %dstTexCoord, 0u
+    %25:ptr<uniform, vec2<u32>, read> = access %uniforms, 3u
+    %26:u32 = load_vector_element %25, 0u
+    %27:bool = lt %24, %26
+    %28:bool = if %27 [t: $B4, f: $B5] {  # if_1
+      $B4: {  # true
         exit_if true  # if_1
       }
-      %b5 = block {  # false
-        %26:u32 = access %dstTexCoord, 1u
-        %27:ptr<uniform, vec2<u32>, read> = access %uniforms, 3u
-        %28:u32 = load_vector_element %27, 1u
-        %29:bool = lt %26, %28
-        exit_if %29  # if_1
+      $B5: {  # false
+        %29:u32 = access %dstTexCoord, 1u
+        %30:ptr<uniform, vec2<u32>, read> = access %uniforms, 3u
+        %31:u32 = load_vector_element %30, 1u
+        %32:bool = lt %29, %31
+        exit_if %32  # if_1
       }
     }
-    %30:bool = if %25 [t: %b6, f: %b7] {  # if_2
-      %b6 = block {  # true
+    %33:bool = if %28 [t: $B6, f: $B7] {  # if_2
+      $B6: {  # true
         exit_if true  # if_2
       }
-      %b7 = block {  # false
-        %31:u32 = access %dstTexCoord, 0u
-        %32:ptr<uniform, vec2<u32>, read> = access %uniforms, 3u
-        %33:u32 = load_vector_element %32, 0u
-        %34:ptr<uniform, vec2<u32>, read> = access %uniforms, 4u
-        %35:u32 = load_vector_element %34, 0u
-        %36:u32 = add %33, %35
-        %37:bool = gte %31, %36
-        exit_if %37  # if_2
+      $B7: {  # false
+        %34:u32 = access %dstTexCoord, 0u
+        %35:ptr<uniform, vec2<u32>, read> = access %uniforms, 3u
+        %36:u32 = load_vector_element %35, 0u
+        %37:ptr<uniform, vec2<u32>, read> = access %uniforms, 4u
+        %38:u32 = load_vector_element %37, 0u
+        %39:u32 = add %36, %38
+        %40:bool = gte %34, %39
+        exit_if %40  # if_2
       }
     }
-    %38:bool = if %30 [t: %b8, f: %b9] {  # if_3
-      %b8 = block {  # true
+    %41:bool = if %33 [t: $B8, f: $B9] {  # if_3
+      $B8: {  # true
         exit_if true  # if_3
       }
-      %b9 = block {  # false
-        %39:u32 = access %dstTexCoord, 1u
-        %40:ptr<uniform, vec2<u32>, read> = access %uniforms, 3u
-        %41:u32 = load_vector_element %40, 1u
-        %42:ptr<uniform, vec2<u32>, read> = access %uniforms, 4u
-        %43:u32 = load_vector_element %42, 1u
-        %44:u32 = add %41, %43
-        %45:bool = gte %39, %44
-        exit_if %45  # if_3
+      $B9: {  # false
+        %42:u32 = access %dstTexCoord, 1u
+        %43:ptr<uniform, vec2<u32>, read> = access %uniforms, 3u
+        %44:u32 = load_vector_element %43, 1u
+        %45:ptr<uniform, vec2<u32>, read> = access %uniforms, 4u
+        %46:u32 = load_vector_element %45, 1u
+        %47:u32 = add %44, %46
+        %48:bool = gte %42, %47
+        exit_if %48  # if_3
       }
     }
-    if %38 [t: %b10, f: %b11] {  # if_4
-      %b10 = block {  # true
-        %46:bool = load %success
-        %47:bool = if %46 [t: %b12, f: %b13] {  # if_5
-          %b12 = block {  # true
-            %48:texture_2d<f32> = load %dst
-            %49:vec2<i32> = convert %dstTexCoord
-            %50:vec4<f32> = textureLoad %48, %49, 0i
-            %51:vec4<bool> = eq %50, %nonCoveredColor
-            %52:bool = all %51
-            exit_if %52  # if_5
+    if %41 [t: $B10, f: $B11] {  # if_4
+      $B10: {  # true
+        %49:bool = load %success
+        %50:bool = if %49 [t: $B12, f: $B13] {  # if_5
+          $B12: {  # true
+            %51:texture_2d<f32> = load %dst
+            %52:texture_2d<f32> = let %51
+            %53:vec2<i32> = convert %dstTexCoord
+            %54:vec4<f32> = textureLoad %52, %53, 0i
+            %55:vec4<bool> = eq %54, %nonCoveredColor
+            %56:bool = all %55
+            exit_if %56  # if_5
           }
-          %b13 = block {  # false
+          $B13: {  # false
             exit_if false  # if_5
           }
         }
-        store %success, %47
+        store %success, %50
         exit_if  # if_4
       }
-      %b11 = block {  # false
-        %53:ptr<uniform, vec2<u32>, read> = access %uniforms, 3u
-        %54:vec2<u32> = load %53
-        %55:vec2<u32> = sub %dstTexCoord, %54
-        %56:ptr<uniform, vec2<u32>, read> = access %uniforms, 2u
-        %57:vec2<u32> = load %56
-        %58:vec2<u32> = add %55, %57
-        %srcTexCoord:ptr<function, vec2<u32>, read_write> = var, %58
-        %60:ptr<uniform, u32, read> = access %uniforms, 0u
-        %61:u32 = load %60
-        %62:bool = eq %61, 1u
-        if %62 [t: %b14] {  # if_6
-          %b14 = block {  # true
-            %63:u32 = access %srcSize, 1u
-            %64:u32 = load_vector_element %srcTexCoord, 1u
-            %65:u32 = sub %63, %64
-            %66:u32 = sub %65, 1u
-            store_vector_element %srcTexCoord, 1u, %66
+      $B11: {  # false
+        %57:ptr<uniform, vec2<u32>, read> = access %uniforms, 3u
+        %58:vec2<u32> = load %57
+        %59:vec2<u32> = sub %dstTexCoord, %58
+        %60:ptr<uniform, vec2<u32>, read> = access %uniforms, 2u
+        %61:vec2<u32> = load %60
+        %62:vec2<u32> = add %59, %61
+        %srcTexCoord:ptr<function, vec2<u32>, read_write> = var, %62
+        %64:ptr<uniform, u32, read> = access %uniforms, 0u
+        %65:u32 = load %64
+        %66:bool = eq %65, 1u
+        if %66 [t: $B14] {  # if_6
+          $B14: {  # true
+            %67:u32 = access %srcSize, 1u
+            %68:u32 = load_vector_element %srcTexCoord, 1u
+            %69:u32 = sub %67, %68
+            %70:u32 = sub %69, 1u
+            store_vector_element %srcTexCoord, 1u, %70
             exit_if  # if_6
           }
         }
-        %67:texture_2d<f32> = load %src
-        %68:vec2<u32> = load %srcTexCoord
-        %69:vec2<i32> = convert %68
-        %srcColor:vec4<f32> = textureLoad %67, %69, 0i
-        %71:texture_2d<f32> = load %dst
-        %72:vec2<i32> = convert %dstTexCoord
-        %dstColor:vec4<f32> = textureLoad %71, %72, 0i
-        %74:ptr<uniform, u32, read> = access %uniforms, 1u
-        %75:u32 = load %74
-        %76:bool = eq %75, 2u
-        if %76 [t: %b15, f: %b16] {  # if_7
-          %b15 = block {  # true
-            %77:bool = load %success
-            %78:bool = if %77 [t: %b17, f: %b18] {  # if_8
-              %b17 = block {  # true
-                %79:f32 = access %dstColor, 0u
-                %80:f32 = access %srcColor, 0u
-                %81:bool = call %aboutEqual, %79, %80
-                exit_if %81  # if_8
+        %71:texture_2d<f32> = load %src
+        %72:texture_2d<f32> = let %71
+        %73:vec2<u32> = load %srcTexCoord
+        %74:vec2<i32> = convert %73
+        %75:vec4<f32> = textureLoad %72, %74, 0i
+        %srcColor:vec4<f32> = let %75
+        %77:texture_2d<f32> = load %dst
+        %78:texture_2d<f32> = let %77
+        %79:vec2<i32> = convert %dstTexCoord
+        %80:vec4<f32> = textureLoad %78, %79, 0i
+        %dstColor:vec4<f32> = let %80
+        %82:ptr<uniform, u32, read> = access %uniforms, 1u
+        %83:u32 = load %82
+        %84:bool = eq %83, 2u
+        if %84 [t: $B15, f: $B16] {  # if_7
+          $B15: {  # true
+            %85:bool = load %success
+            %86:bool = if %85 [t: $B17, f: $B18] {  # if_8
+              $B17: {  # true
+                %87:f32 = access %dstColor, 0u
+                %88:f32 = access %srcColor, 0u
+                %89:bool = call %aboutEqual, %87, %88
+                exit_if %89  # if_8
               }
-              %b18 = block {  # false
+              $B18: {  # false
                 exit_if false  # if_8
               }
             }
-            %82:bool = if %78 [t: %b19, f: %b20] {  # if_9
-              %b19 = block {  # true
-                %83:f32 = access %dstColor, 1u
-                %84:f32 = access %srcColor, 1u
-                %85:bool = call %aboutEqual, %83, %84
-                exit_if %85  # if_9
+            %90:bool = if %86 [t: $B19, f: $B20] {  # if_9
+              $B19: {  # true
+                %91:f32 = access %dstColor, 1u
+                %92:f32 = access %srcColor, 1u
+                %93:bool = call %aboutEqual, %91, %92
+                exit_if %93  # if_9
               }
-              %b20 = block {  # false
+              $B20: {  # false
                 exit_if false  # if_9
               }
             }
-            store %success, %82
+            store %success, %90
             exit_if  # if_7
           }
-          %b16 = block {  # false
-            %86:bool = load %success
-            %87:bool = if %86 [t: %b21, f: %b22] {  # if_10
-              %b21 = block {  # true
-                %88:f32 = access %dstColor, 0u
-                %89:f32 = access %srcColor, 0u
-                %90:bool = call %aboutEqual, %88, %89
-                exit_if %90  # if_10
+          $B16: {  # false
+            %94:bool = load %success
+            %95:bool = if %94 [t: $B21, f: $B22] {  # if_10
+              $B21: {  # true
+                %96:f32 = access %dstColor, 0u
+                %97:f32 = access %srcColor, 0u
+                %98:bool = call %aboutEqual, %96, %97
+                exit_if %98  # if_10
               }
-              %b22 = block {  # false
+              $B22: {  # false
                 exit_if false  # if_10
               }
             }
-            %91:bool = if %87 [t: %b23, f: %b24] {  # if_11
-              %b23 = block {  # true
-                %92:f32 = access %dstColor, 1u
-                %93:f32 = access %srcColor, 1u
-                %94:bool = call %aboutEqual, %92, %93
-                exit_if %94  # if_11
+            %99:bool = if %95 [t: $B23, f: $B24] {  # if_11
+              $B23: {  # true
+                %100:f32 = access %dstColor, 1u
+                %101:f32 = access %srcColor, 1u
+                %102:bool = call %aboutEqual, %100, %101
+                exit_if %102  # if_11
               }
-              %b24 = block {  # false
+              $B24: {  # false
                 exit_if false  # if_11
               }
             }
-            %95:bool = if %91 [t: %b25, f: %b26] {  # if_12
-              %b25 = block {  # true
-                %96:f32 = access %dstColor, 2u
-                %97:f32 = access %srcColor, 2u
-                %98:bool = call %aboutEqual, %96, %97
-                exit_if %98  # if_12
+            %103:bool = if %99 [t: $B25, f: $B26] {  # if_12
+              $B25: {  # true
+                %104:f32 = access %dstColor, 2u
+                %105:f32 = access %srcColor, 2u
+                %106:bool = call %aboutEqual, %104, %105
+                exit_if %106  # if_12
               }
-              %b26 = block {  # false
+              $B26: {  # false
                 exit_if false  # if_12
               }
             }
-            %99:bool = if %95 [t: %b27, f: %b28] {  # if_13
-              %b27 = block {  # true
-                %100:f32 = access %dstColor, 3u
-                %101:f32 = access %srcColor, 3u
-                %102:bool = call %aboutEqual, %100, %101
-                exit_if %102  # if_13
+            %107:bool = if %103 [t: $B27, f: $B28] {  # if_13
+              $B27: {  # true
+                %108:f32 = access %dstColor, 3u
+                %109:f32 = access %srcColor, 3u
+                %110:bool = call %aboutEqual, %108, %109
+                exit_if %110  # if_13
               }
-              %b28 = block {  # false
+              $B28: {  # false
                 exit_if false  # if_13
               }
             }
-            store %success, %99
+            store %success, %107
             exit_if  # if_7
           }
         }
         exit_if  # if_4
       }
     }
-    %103:u32 = access %GlobalInvocationID, 1u
-    %104:u32 = access %dstSize, 0u
-    %105:u32 = mul %103, %104
-    %106:u32 = access %GlobalInvocationID, 0u
-    %outputIndex:u32 = add %105, %106
-    %108:bool = load %success
-    if %108 [t: %b29, f: %b30] {  # if_14
-      %b29 = block {  # true
-        %109:ptr<storage, u32, read_write> = access %output, 0u, %outputIndex
-        store %109, 1u
+    %111:u32 = access %GlobalInvocationID, 1u
+    %112:u32 = access %dstSize, 0u
+    %113:u32 = mul %111, %112
+    %114:u32 = access %GlobalInvocationID, 0u
+    %115:u32 = add %113, %114
+    %outputIndex:u32 = let %115
+    %117:bool = load %success
+    if %117 [t: $B29, f: $B30] {  # if_14
+      $B29: {  # true
+        %118:ptr<storage, u32, read_write> = access %output, 0u, %outputIndex
+        store %118, 1u
         exit_if  # if_14
       }
-      %b30 = block {  # false
-        %110:ptr<storage, u32, read_write> = access %output, 0u, %outputIndex
-        store %110, 0u
+      $B30: {  # false
+        %119:ptr<storage, u32, read_write> = access %output, 0u, %outputIndex
+        store %119, 0u
         exit_if  # if_14
       }
     }
diff --git a/test/tint/bug/tint/914.wgsl.expected.ir.msl b/test/tint/bug/tint/914.wgsl.expected.ir.msl
index f4b0d1d..a9a3e39 100644
--- a/test/tint/bug/tint/914.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/914.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Matrix = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Matrix = struct @align(4) {
   numbers:array<f32> @offset(0)
 }
 
@@ -10,7 +10,7 @@
   dimBOuter:u32 @offset(8)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %firstMatrix:ptr<storage, Matrix, read> = var @binding_point(0, 0)
   %secondMatrix:ptr<storage, Matrix, read> = var @binding_point(0, 1)
   %resultMatrix:ptr<storage, Matrix, read_write> = var @binding_point(0, 2)
@@ -19,492 +19,544 @@
   %mm_Bsub:ptr<workgroup, array<array<f32, 64>, 64>, read_write> = var
 }
 
-%mm_readA = func(%row:u32, %col:u32):f32 -> %b2 {
-  %b2 = block {
+%mm_readA = func(%row:u32, %col:u32):f32 {
+  $B2: {
     %10:ptr<uniform, u32, read> = access %uniforms, 0u
     %11:u32 = load %10
     %12:bool = lt %row, %11
-    %13:bool = if %12 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    %13:bool = if %12 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         %14:ptr<uniform, u32, read> = access %uniforms, 1u
         %15:u32 = load %14
         %16:bool = lt %col, %15
         exit_if %16  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         exit_if false  # if_1
       }
     }
-    if %13 [t: %b5] {  # if_2
-      %b5 = block {  # true
+    if %13 [t: $B5] {  # if_2
+      $B5: {  # true
         %17:ptr<uniform, u32, read> = access %uniforms, 1u
         %18:u32 = load %17
         %19:u32 = mul %row, %18
         %20:u32 = add %19, %col
         %21:ptr<storage, f32, read> = access %firstMatrix, 0u, %20
-        %result:f32 = load %21
+        %22:f32 = load %21
+        %result:f32 = let %22
         ret %result
       }
     }
     ret 0.0f
   }
 }
-%mm_readB = func(%row_1:u32, %col_1:u32):f32 -> %b6 {  # %row_1: 'row', %col_1: 'col'
-  %b6 = block {
-    %26:ptr<uniform, u32, read> = access %uniforms, 1u
-    %27:u32 = load %26
-    %28:bool = lt %row_1, %27
-    %29:bool = if %28 [t: %b7, f: %b8] {  # if_3
-      %b7 = block {  # true
-        %30:ptr<uniform, u32, read> = access %uniforms, 2u
-        %31:u32 = load %30
-        %32:bool = lt %col_1, %31
-        exit_if %32  # if_3
+%mm_readB = func(%row_1:u32, %col_1:u32):f32 {  # %row_1: 'row', %col_1: 'col'
+  $B6: {
+    %27:ptr<uniform, u32, read> = access %uniforms, 1u
+    %28:u32 = load %27
+    %29:bool = lt %row_1, %28
+    %30:bool = if %29 [t: $B7, f: $B8] {  # if_3
+      $B7: {  # true
+        %31:ptr<uniform, u32, read> = access %uniforms, 2u
+        %32:u32 = load %31
+        %33:bool = lt %col_1, %32
+        exit_if %33  # if_3
       }
-      %b8 = block {  # false
+      $B8: {  # false
         exit_if false  # if_3
       }
     }
-    if %29 [t: %b9] {  # if_4
-      %b9 = block {  # true
-        %33:ptr<uniform, u32, read> = access %uniforms, 2u
-        %34:u32 = load %33
-        %35:u32 = mul %row_1, %34
-        %36:u32 = add %35, %col_1
-        %37:ptr<storage, f32, read> = access %secondMatrix, 0u, %36
-        %result_1:f32 = load %37  # %result_1: 'result'
+    if %30 [t: $B9] {  # if_4
+      $B9: {  # true
+        %34:ptr<uniform, u32, read> = access %uniforms, 2u
+        %35:u32 = load %34
+        %36:u32 = mul %row_1, %35
+        %37:u32 = add %36, %col_1
+        %38:ptr<storage, f32, read> = access %secondMatrix, 0u, %37
+        %39:f32 = load %38
+        %result_1:f32 = let %39  # %result_1: 'result'
         ret %result_1
       }
     }
     ret 0.0f
   }
 }
-%mm_write = func(%row_2:u32, %col_2:u32, %value:f32):void -> %b10 {  # %row_2: 'row', %col_2: 'col'
-  %b10 = block {
-    %43:ptr<uniform, u32, read> = access %uniforms, 0u
-    %44:u32 = load %43
-    %45:bool = lt %row_2, %44
-    %46:bool = if %45 [t: %b11, f: %b12] {  # if_5
-      %b11 = block {  # true
-        %47:ptr<uniform, u32, read> = access %uniforms, 2u
-        %48:u32 = load %47
-        %49:bool = lt %col_2, %48
-        exit_if %49  # if_5
+%mm_write = func(%row_2:u32, %col_2:u32, %value:f32):void {  # %row_2: 'row', %col_2: 'col'
+  $B10: {
+    %45:ptr<uniform, u32, read> = access %uniforms, 0u
+    %46:u32 = load %45
+    %47:bool = lt %row_2, %46
+    %48:bool = if %47 [t: $B11, f: $B12] {  # if_5
+      $B11: {  # true
+        %49:ptr<uniform, u32, read> = access %uniforms, 2u
+        %50:u32 = load %49
+        %51:bool = lt %col_2, %50
+        exit_if %51  # if_5
       }
-      %b12 = block {  # false
+      $B12: {  # false
         exit_if false  # if_5
       }
     }
-    if %46 [t: %b13] {  # if_6
-      %b13 = block {  # true
-        %50:ptr<uniform, u32, read> = access %uniforms, 2u
-        %51:u32 = load %50
-        %52:u32 = mul %row_2, %51
-        %index:u32 = add %col_2, %52
-        %54:ptr<storage, f32, read_write> = access %resultMatrix, 0u, %index
-        store %54, %value
+    if %48 [t: $B13] {  # if_6
+      $B13: {  # true
+        %52:ptr<uniform, u32, read> = access %uniforms, 2u
+        %53:u32 = load %52
+        %54:u32 = mul %row_2, %53
+        %55:u32 = add %col_2, %54
+        %index:u32 = let %55
+        %57:ptr<storage, f32, read_write> = access %resultMatrix, 0u, %index
+        store %57, %value
         exit_if  # if_6
       }
     }
     ret
   }
 }
-%tint_symbol = @compute @workgroup_size(16, 16, 1) func(%local_id:vec3<u32> [@local_invocation_id], %global_id:vec3<u32> [@global_invocation_id]):void -> %b14 {
-  %b14 = block {
-    %58:u32 = access %local_id, 1u
-    %tileRow:u32 = mul %58, 4u
-    %60:u32 = access %local_id, 0u
-    %tileCol:u32 = mul %60, 4u
-    %62:u32 = access %global_id, 1u
-    %globalRow:u32 = mul %62, 4u
-    %64:u32 = access %global_id, 0u
-    %globalCol:u32 = mul %64, 4u
-    %66:ptr<uniform, u32, read> = access %uniforms, 1u
-    %67:u32 = load %66
-    %68:u32 = sub %67, 1u
-    %69:u32 = div %68, 64u
-    %numTiles:u32 = add %69, 1u
-    %acc:ptr<function, array<f32, 16>, read_write> = var
-    %ACached:ptr<function, f32, read_write> = var
-    %BCached:ptr<function, array<f32, 4>, read_write> = var
-    loop [i: %b15, b: %b16, c: %b17] {  # loop_1
-      %b15 = block {  # initializer
-        %index_1:ptr<function, u32, read_write> = var, 0u  # %index_1: 'index'
-        next_iteration %b16
+%tint_symbol = @compute @workgroup_size(16, 16, 1) func(%local_id:vec3<u32> [@local_invocation_id], %global_id:vec3<u32> [@global_invocation_id], %tint_local_index:u32 [@local_invocation_index]):void {
+  $B14: {
+    loop [i: $B15, b: $B16, c: $B17] {  # loop_1
+      $B15: {  # initializer
+        next_iteration %tint_local_index  # -> $B16
       }
-      %b16 = block {  # body
-        %75:u32 = load %index_1
-        %76:bool = lt %75, 16u
-        if %76 [t: %b18, f: %b19] {  # if_7
-          %b18 = block {  # true
-            exit_if  # if_7
-          }
-          %b19 = block {  # false
+      $B16 (%idx:u32): {  # body
+        %63:bool = gte %idx, 4096u
+        if %63 [t: $B18] {  # if_7
+          $B18: {  # true
             exit_loop  # loop_1
           }
         }
-        %77:u32 = load %index_1
-        %78:ptr<function, f32, read_write> = access %acc, %77
-        store %78, 0.0f
-        continue %b17
+        %64:u32 = mod %idx, 64u
+        %65:u32 = div %idx, 64u
+        %66:ptr<workgroup, f32, read_write> = access %mm_Asub, %65, %64
+        store %66, 0.0f
+        %67:u32 = mod %idx, 64u
+        %68:u32 = div %idx, 64u
+        %69:ptr<workgroup, f32, read_write> = access %mm_Bsub, %68, %67
+        store %69, 0.0f
+        continue  # -> $B17
       }
-      %b17 = block {  # continuing
-        %79:u32 = load %index_1
-        %80:u32 = add %79, 1u
-        store %index_1, %80
-        next_iteration %b16
+      $B17: {  # continuing
+        %70:u32 = add %idx, 256u
+        next_iteration %70  # -> $B16
       }
     }
-    %ColPerThreadA:u32 = let 4u
-    %82:u32 = access %local_id, 0u
-    %tileColA:u32 = mul %82, %ColPerThreadA
-    %RowPerThreadB:u32 = let 4u
-    %85:u32 = access %local_id, 1u
-    %tileRowB:u32 = mul %85, %RowPerThreadB
-    loop [i: %b20, b: %b21, c: %b22] {  # loop_2
-      %b20 = block {  # initializer
-        %t:ptr<function, u32, read_write> = var, 0u
-        next_iteration %b21
+    %71:void = msl.threadgroup_barrier 4u
+    %72:u32 = access %local_id, 1u
+    %73:u32 = mul %72, 4u
+    %tileRow:u32 = let %73
+    %75:u32 = access %local_id, 0u
+    %76:u32 = mul %75, 4u
+    %tileCol:u32 = let %76
+    %78:u32 = access %global_id, 1u
+    %79:u32 = mul %78, 4u
+    %globalRow:u32 = let %79
+    %81:u32 = access %global_id, 0u
+    %82:u32 = mul %81, 4u
+    %globalCol:u32 = let %82
+    %84:ptr<uniform, u32, read> = access %uniforms, 1u
+    %85:u32 = load %84
+    %86:u32 = sub %85, 1u
+    %87:u32 = call %tint_div_u32, %86, 64u
+    %89:u32 = add %87, 1u
+    %numTiles:u32 = let %89
+    %acc:ptr<function, array<f32, 16>, read_write> = var
+    %ACached:ptr<function, f32, read_write> = var
+    %BCached:ptr<function, array<f32, 4>, read_write> = var
+    loop [i: $B19, b: $B20, c: $B21] {  # loop_2
+      $B19: {  # initializer
+        %index_1:ptr<function, u32, read_write> = var, 0u  # %index_1: 'index'
+        next_iteration  # -> $B20
       }
-      %b21 = block {  # body
-        %88:u32 = load %t
-        %89:bool = lt %88, %numTiles
-        if %89 [t: %b23, f: %b24] {  # if_8
-          %b23 = block {  # true
+      $B20: {  # body
+        %95:u32 = load %index_1
+        %96:bool = lt %95, 16u
+        if %96 [t: $B22, f: $B23] {  # if_8
+          $B22: {  # true
             exit_if  # if_8
           }
-          %b24 = block {  # false
+          $B23: {  # false
             exit_loop  # loop_2
           }
         }
-        loop [i: %b25, b: %b26, c: %b27] {  # loop_3
-          %b25 = block {  # initializer
+        %97:u32 = load %index_1
+        %98:ptr<function, f32, read_write> = access %acc, %97
+        store %98, 0.0f
+        continue  # -> $B21
+      }
+      $B21: {  # continuing
+        %99:u32 = load %index_1
+        %100:u32 = add %99, 1u
+        store %index_1, %100
+        next_iteration  # -> $B20
+      }
+    }
+    %ColPerThreadA:u32 = let 4u
+    %102:u32 = access %local_id, 0u
+    %103:u32 = mul %102, %ColPerThreadA
+    %tileColA:u32 = let %103
+    %RowPerThreadB:u32 = let 4u
+    %106:u32 = access %local_id, 1u
+    %107:u32 = mul %106, %RowPerThreadB
+    %tileRowB:u32 = let %107
+    loop [i: $B24, b: $B25, c: $B26] {  # loop_3
+      $B24: {  # initializer
+        %t:ptr<function, u32, read_write> = var, 0u
+        next_iteration  # -> $B25
+      }
+      $B25: {  # body
+        %110:u32 = load %t
+        %111:bool = lt %110, %numTiles
+        if %111 [t: $B27, f: $B28] {  # if_9
+          $B27: {  # true
+            exit_if  # if_9
+          }
+          $B28: {  # false
+            exit_loop  # loop_3
+          }
+        }
+        loop [i: $B29, b: $B30, c: $B31] {  # loop_4
+          $B29: {  # initializer
             %innerRow:ptr<function, u32, read_write> = var, 0u
-            next_iteration %b26
+            next_iteration  # -> $B30
           }
-          %b26 = block {  # body
-            %91:u32 = load %innerRow
-            %92:bool = lt %91, 4u
-            if %92 [t: %b28, f: %b29] {  # if_9
-              %b28 = block {  # true
-                exit_if  # if_9
+          $B30: {  # body
+            %113:u32 = load %innerRow
+            %114:bool = lt %113, 4u
+            if %114 [t: $B32, f: $B33] {  # if_10
+              $B32: {  # true
+                exit_if  # if_10
               }
-              %b29 = block {  # false
-                exit_loop  # loop_3
+              $B33: {  # false
+                exit_loop  # loop_4
               }
             }
-            loop [i: %b30, b: %b31, c: %b32] {  # loop_4
-              %b30 = block {  # initializer
+            loop [i: $B34, b: $B35, c: $B36] {  # loop_5
+              $B34: {  # initializer
                 %innerCol:ptr<function, u32, read_write> = var, 0u
-                next_iteration %b31
+                next_iteration  # -> $B35
               }
-              %b31 = block {  # body
-                %94:u32 = load %innerCol
-                %95:bool = lt %94, %ColPerThreadA
-                if %95 [t: %b33, f: %b34] {  # if_10
-                  %b33 = block {  # true
-                    exit_if  # if_10
+              $B35: {  # body
+                %116:u32 = load %innerCol
+                %117:bool = lt %116, %ColPerThreadA
+                if %117 [t: $B37, f: $B38] {  # if_11
+                  $B37: {  # true
+                    exit_if  # if_11
                   }
-                  %b34 = block {  # false
-                    exit_loop  # loop_4
+                  $B38: {  # false
+                    exit_loop  # loop_5
                   }
                 }
-                %96:u32 = load %innerRow
-                %inputRow:u32 = add %tileRow, %96
-                %98:u32 = load %innerCol
-                %inputCol:u32 = add %tileColA, %98
-                %100:ptr<workgroup, f32, read_write> = access %mm_Asub, %inputRow, %inputCol
-                %101:u32 = load %innerRow
-                %102:u32 = add %globalRow, %101
-                %103:u32 = load %t
-                %104:u32 = mul %103, 64u
-                %105:u32 = add %104, %inputCol
-                %106:f32 = call %mm_readA, %102, %105
-                store %100, %106
-                continue %b32
+                %118:u32 = load %innerRow
+                %119:u32 = add %tileRow, %118
+                %inputRow:u32 = let %119
+                %121:u32 = load %innerCol
+                %122:u32 = add %tileColA, %121
+                %inputCol:u32 = let %122
+                %124:ptr<workgroup, f32, read_write> = access %mm_Asub, %inputRow, %inputCol
+                %125:u32 = load %innerRow
+                %126:u32 = add %globalRow, %125
+                %127:u32 = load %t
+                %128:u32 = mul %127, 64u
+                %129:u32 = add %128, %inputCol
+                %130:f32 = call %mm_readA, %126, %129
+                store %124, %130
+                continue  # -> $B36
               }
-              %b32 = block {  # continuing
-                %107:u32 = load %innerCol
-                %108:u32 = add %107, 1u
-                store %innerCol, %108
-                next_iteration %b31
+              $B36: {  # continuing
+                %131:u32 = load %innerCol
+                %132:u32 = add %131, 1u
+                store %innerCol, %132
+                next_iteration  # -> $B35
               }
             }
-            continue %b27
+            continue  # -> $B31
           }
-          %b27 = block {  # continuing
-            %109:u32 = load %innerRow
-            %110:u32 = add %109, 1u
-            store %innerRow, %110
-            next_iteration %b26
+          $B31: {  # continuing
+            %133:u32 = load %innerRow
+            %134:u32 = add %133, 1u
+            store %innerRow, %134
+            next_iteration  # -> $B30
           }
         }
-        loop [i: %b35, b: %b36, c: %b37] {  # loop_5
-          %b35 = block {  # initializer
+        loop [i: $B39, b: $B40, c: $B41] {  # loop_6
+          $B39: {  # initializer
             %innerRow_1:ptr<function, u32, read_write> = var, 0u  # %innerRow_1: 'innerRow'
-            next_iteration %b36
+            next_iteration  # -> $B40
           }
-          %b36 = block {  # body
-            %112:u32 = load %innerRow_1
-            %113:bool = lt %112, %RowPerThreadB
-            if %113 [t: %b38, f: %b39] {  # if_11
-              %b38 = block {  # true
-                exit_if  # if_11
+          $B40: {  # body
+            %136:u32 = load %innerRow_1
+            %137:bool = lt %136, %RowPerThreadB
+            if %137 [t: $B42, f: $B43] {  # if_12
+              $B42: {  # true
+                exit_if  # if_12
               }
-              %b39 = block {  # false
-                exit_loop  # loop_5
+              $B43: {  # false
+                exit_loop  # loop_6
               }
             }
-            loop [i: %b40, b: %b41, c: %b42] {  # loop_6
-              %b40 = block {  # initializer
+            loop [i: $B44, b: $B45, c: $B46] {  # loop_7
+              $B44: {  # initializer
                 %innerCol_1:ptr<function, u32, read_write> = var, 0u  # %innerCol_1: 'innerCol'
-                next_iteration %b41
+                next_iteration  # -> $B45
               }
-              %b41 = block {  # body
-                %115:u32 = load %innerCol_1
-                %116:bool = lt %115, 4u
-                if %116 [t: %b43, f: %b44] {  # if_12
-                  %b43 = block {  # true
-                    exit_if  # if_12
+              $B45: {  # body
+                %139:u32 = load %innerCol_1
+                %140:bool = lt %139, 4u
+                if %140 [t: $B47, f: $B48] {  # if_13
+                  $B47: {  # true
+                    exit_if  # if_13
                   }
-                  %b44 = block {  # false
-                    exit_loop  # loop_6
+                  $B48: {  # false
+                    exit_loop  # loop_7
                   }
                 }
-                %117:u32 = load %innerRow_1
-                %inputRow_1:u32 = add %tileRowB, %117  # %inputRow_1: 'inputRow'
-                %119:u32 = load %innerCol_1
-                %inputCol_1:u32 = add %tileCol, %119  # %inputCol_1: 'inputCol'
-                %121:u32 = load %innerCol_1
-                %122:ptr<workgroup, f32, read_write> = access %mm_Bsub, %121, %inputCol_1
-                %123:u32 = load %t
-                %124:u32 = mul %123, 64u
-                %125:u32 = add %124, %inputRow_1
-                %126:u32 = load %innerCol_1
-                %127:u32 = add %globalCol, %126
-                %128:f32 = call %mm_readB, %125, %127
-                store %122, %128
-                continue %b42
+                %141:u32 = load %innerRow_1
+                %142:u32 = add %tileRowB, %141
+                %inputRow_1:u32 = let %142  # %inputRow_1: 'inputRow'
+                %144:u32 = load %innerCol_1
+                %145:u32 = add %tileCol, %144
+                %inputCol_1:u32 = let %145  # %inputCol_1: 'inputCol'
+                %147:u32 = load %innerCol_1
+                %148:ptr<workgroup, f32, read_write> = access %mm_Bsub, %147, %inputCol_1
+                %149:ptr<workgroup, f32, read_write> = let %148
+                %150:u32 = load %t
+                %151:u32 = mul %150, 64u
+                %152:u32 = add %151, %inputRow_1
+                %153:u32 = load %innerCol_1
+                %154:u32 = add %globalCol, %153
+                %155:f32 = call %mm_readB, %152, %154
+                store %149, %155
+                continue  # -> $B46
               }
-              %b42 = block {  # continuing
-                %129:u32 = load %innerCol_1
-                %130:u32 = add %129, 1u
-                store %innerCol_1, %130
-                next_iteration %b41
+              $B46: {  # continuing
+                %156:u32 = load %innerCol_1
+                %157:u32 = add %156, 1u
+                store %innerCol_1, %157
+                next_iteration  # -> $B45
               }
             }
-            continue %b37
+            continue  # -> $B41
           }
-          %b37 = block {  # continuing
-            %131:u32 = load %innerRow_1
-            %132:u32 = add %131, 1u
-            store %innerRow_1, %132
-            next_iteration %b36
+          $B41: {  # continuing
+            %158:u32 = load %innerRow_1
+            %159:u32 = add %158, 1u
+            store %innerRow_1, %159
+            next_iteration  # -> $B40
           }
         }
-        %133:void = workgroupBarrier
-        loop [i: %b45, b: %b46, c: %b47] {  # loop_7
-          %b45 = block {  # initializer
+        %160:void = msl.threadgroup_barrier 4u
+        loop [i: $B49, b: $B50, c: $B51] {  # loop_8
+          $B49: {  # initializer
             %k:ptr<function, u32, read_write> = var, 0u
-            next_iteration %b46
+            next_iteration  # -> $B50
           }
-          %b46 = block {  # body
-            %135:u32 = load %k
-            %136:bool = lt %135, 64u
-            if %136 [t: %b48, f: %b49] {  # if_13
-              %b48 = block {  # true
-                exit_if  # if_13
+          $B50: {  # body
+            %162:u32 = load %k
+            %163:bool = lt %162, 64u
+            if %163 [t: $B52, f: $B53] {  # if_14
+              $B52: {  # true
+                exit_if  # if_14
               }
-              %b49 = block {  # false
-                exit_loop  # loop_7
+              $B53: {  # false
+                exit_loop  # loop_8
               }
             }
-            loop [i: %b50, b: %b51, c: %b52] {  # loop_8
-              %b50 = block {  # initializer
+            loop [i: $B54, b: $B55, c: $B56] {  # loop_9
+              $B54: {  # initializer
                 %inner:ptr<function, u32, read_write> = var, 0u
-                next_iteration %b51
+                next_iteration  # -> $B55
               }
-              %b51 = block {  # body
-                %138:u32 = load %inner
-                %139:bool = lt %138, 4u
-                if %139 [t: %b53, f: %b54] {  # if_14
-                  %b53 = block {  # true
-                    exit_if  # if_14
-                  }
-                  %b54 = block {  # false
-                    exit_loop  # loop_8
-                  }
-                }
-                %140:u32 = load %inner
-                %141:ptr<function, f32, read_write> = access %BCached, %140
-                %142:u32 = load %k
-                %143:u32 = load %inner
-                %144:u32 = add %tileCol, %143
-                %145:ptr<workgroup, f32, read_write> = access %mm_Bsub, %142, %144
-                %146:f32 = load %145
-                store %141, %146
-                continue %b52
-              }
-              %b52 = block {  # continuing
-                %147:u32 = load %inner
-                %148:u32 = add %147, 1u
-                store %inner, %148
-                next_iteration %b51
-              }
-            }
-            loop [i: %b55, b: %b56, c: %b57] {  # loop_9
-              %b55 = block {  # initializer
-                %innerRow_2:ptr<function, u32, read_write> = var, 0u  # %innerRow_2: 'innerRow'
-                next_iteration %b56
-              }
-              %b56 = block {  # body
-                %150:u32 = load %innerRow_2
-                %151:bool = lt %150, 4u
-                if %151 [t: %b58, f: %b59] {  # if_15
-                  %b58 = block {  # true
+              $B55: {  # body
+                %165:u32 = load %inner
+                %166:bool = lt %165, 4u
+                if %166 [t: $B57, f: $B58] {  # if_15
+                  $B57: {  # true
                     exit_if  # if_15
                   }
-                  %b59 = block {  # false
+                  $B58: {  # false
                     exit_loop  # loop_9
                   }
                 }
-                %152:u32 = load %innerRow_2
-                %153:u32 = add %tileRow, %152
-                %154:u32 = load %k
-                %155:ptr<workgroup, f32, read_write> = access %mm_Asub, %153, %154
-                %156:f32 = load %155
-                store %ACached, %156
-                loop [i: %b60, b: %b61, c: %b62] {  # loop_10
-                  %b60 = block {  # initializer
-                    %innerCol_2:ptr<function, u32, read_write> = var, 0u  # %innerCol_2: 'innerCol'
-                    next_iteration %b61
+                %167:u32 = load %inner
+                %168:ptr<function, f32, read_write> = access %BCached, %167
+                %169:u32 = load %k
+                %170:u32 = load %inner
+                %171:u32 = add %tileCol, %170
+                %172:ptr<workgroup, f32, read_write> = access %mm_Bsub, %169, %171
+                %173:f32 = load %172
+                store %168, %173
+                continue  # -> $B56
+              }
+              $B56: {  # continuing
+                %174:u32 = load %inner
+                %175:u32 = add %174, 1u
+                store %inner, %175
+                next_iteration  # -> $B55
+              }
+            }
+            loop [i: $B59, b: $B60, c: $B61] {  # loop_10
+              $B59: {  # initializer
+                %innerRow_2:ptr<function, u32, read_write> = var, 0u  # %innerRow_2: 'innerRow'
+                next_iteration  # -> $B60
+              }
+              $B60: {  # body
+                %177:u32 = load %innerRow_2
+                %178:bool = lt %177, 4u
+                if %178 [t: $B62, f: $B63] {  # if_16
+                  $B62: {  # true
+                    exit_if  # if_16
                   }
-                  %b61 = block {  # body
-                    %158:u32 = load %innerCol_2
-                    %159:bool = lt %158, 4u
-                    if %159 [t: %b63, f: %b64] {  # if_16
-                      %b63 = block {  # true
-                        exit_if  # if_16
-                      }
-                      %b64 = block {  # false
-                        exit_loop  # loop_10
-                      }
-                    }
-                    %160:u32 = load %innerRow_2
-                    %161:u32 = mul %160, 4u
-                    %162:u32 = load %innerCol_2
-                    %index_2:u32 = add %161, %162  # %index_2: 'index'
-                    %164:ptr<function, f32, read_write> = access %acc, %index_2
-                    %165:ptr<function, f32, read_write> = access %acc, %index_2
-                    %166:f32 = load %165
-                    %167:f32 = load %ACached
-                    %168:u32 = load %innerCol_2
-                    %169:ptr<function, f32, read_write> = access %BCached, %168
-                    %170:f32 = load %169
-                    %171:f32 = mul %167, %170
-                    %172:f32 = add %166, %171
-                    store %164, %172
-                    continue %b62
-                  }
-                  %b62 = block {  # continuing
-                    %173:u32 = load %innerCol_2
-                    %174:u32 = add %173, 1u
-                    store %innerCol_2, %174
-                    next_iteration %b61
+                  $B63: {  # false
+                    exit_loop  # loop_10
                   }
                 }
-                continue %b57
+                %179:u32 = load %innerRow_2
+                %180:u32 = add %tileRow, %179
+                %181:u32 = load %k
+                %182:ptr<workgroup, f32, read_write> = access %mm_Asub, %180, %181
+                %183:f32 = load %182
+                store %ACached, %183
+                loop [i: $B64, b: $B65, c: $B66] {  # loop_11
+                  $B64: {  # initializer
+                    %innerCol_2:ptr<function, u32, read_write> = var, 0u  # %innerCol_2: 'innerCol'
+                    next_iteration  # -> $B65
+                  }
+                  $B65: {  # body
+                    %185:u32 = load %innerCol_2
+                    %186:bool = lt %185, 4u
+                    if %186 [t: $B67, f: $B68] {  # if_17
+                      $B67: {  # true
+                        exit_if  # if_17
+                      }
+                      $B68: {  # false
+                        exit_loop  # loop_11
+                      }
+                    }
+                    %187:u32 = load %innerRow_2
+                    %188:u32 = mul %187, 4u
+                    %189:u32 = load %innerCol_2
+                    %190:u32 = add %188, %189
+                    %index_2:u32 = let %190  # %index_2: 'index'
+                    %192:ptr<function, f32, read_write> = access %acc, %index_2
+                    %193:ptr<function, f32, read_write> = access %acc, %index_2
+                    %194:f32 = load %193
+                    %195:f32 = load %ACached
+                    %196:u32 = load %innerCol_2
+                    %197:ptr<function, f32, read_write> = access %BCached, %196
+                    %198:f32 = load %197
+                    %199:f32 = mul %195, %198
+                    %200:f32 = add %194, %199
+                    store %192, %200
+                    continue  # -> $B66
+                  }
+                  $B66: {  # continuing
+                    %201:u32 = load %innerCol_2
+                    %202:u32 = add %201, 1u
+                    store %innerCol_2, %202
+                    next_iteration  # -> $B65
+                  }
+                }
+                continue  # -> $B61
               }
-              %b57 = block {  # continuing
-                %175:u32 = load %innerRow_2
-                %176:u32 = add %175, 1u
-                store %innerRow_2, %176
-                next_iteration %b56
+              $B61: {  # continuing
+                %203:u32 = load %innerRow_2
+                %204:u32 = add %203, 1u
+                store %innerRow_2, %204
+                next_iteration  # -> $B60
               }
             }
-            continue %b47
+            continue  # -> $B51
           }
-          %b47 = block {  # continuing
-            %177:u32 = load %k
-            %178:u32 = add %177, 1u
-            store %k, %178
-            next_iteration %b46
+          $B51: {  # continuing
+            %205:u32 = load %k
+            %206:u32 = add %205, 1u
+            store %k, %206
+            next_iteration  # -> $B50
           }
         }
-        %179:void = workgroupBarrier
-        continue %b22
+        %207:void = msl.threadgroup_barrier 4u
+        continue  # -> $B26
       }
-      %b22 = block {  # continuing
-        %180:u32 = load %t
-        %181:u32 = add %180, 1u
-        store %t, %181
-        next_iteration %b21
+      $B26: {  # continuing
+        %208:u32 = load %t
+        %209:u32 = add %208, 1u
+        store %t, %209
+        next_iteration  # -> $B25
       }
     }
-    loop [i: %b65, b: %b66, c: %b67] {  # loop_11
-      %b65 = block {  # initializer
+    loop [i: $B69, b: $B70, c: $B71] {  # loop_12
+      $B69: {  # initializer
         %innerRow_3:ptr<function, u32, read_write> = var, 0u  # %innerRow_3: 'innerRow'
-        next_iteration %b66
+        next_iteration  # -> $B70
       }
-      %b66 = block {  # body
-        %183:u32 = load %innerRow_3
-        %184:bool = lt %183, 4u
-        if %184 [t: %b68, f: %b69] {  # if_17
-          %b68 = block {  # true
-            exit_if  # if_17
+      $B70: {  # body
+        %211:u32 = load %innerRow_3
+        %212:bool = lt %211, 4u
+        if %212 [t: $B72, f: $B73] {  # if_18
+          $B72: {  # true
+            exit_if  # if_18
           }
-          %b69 = block {  # false
-            exit_loop  # loop_11
+          $B73: {  # false
+            exit_loop  # loop_12
           }
         }
-        loop [i: %b70, b: %b71, c: %b72] {  # loop_12
-          %b70 = block {  # initializer
+        loop [i: $B74, b: $B75, c: $B76] {  # loop_13
+          $B74: {  # initializer
             %innerCol_3:ptr<function, u32, read_write> = var, 0u  # %innerCol_3: 'innerCol'
-            next_iteration %b71
+            next_iteration  # -> $B75
           }
-          %b71 = block {  # body
-            %186:u32 = load %innerCol_3
-            %187:bool = lt %186, 4u
-            if %187 [t: %b73, f: %b74] {  # if_18
-              %b73 = block {  # true
-                exit_if  # if_18
+          $B75: {  # body
+            %214:u32 = load %innerCol_3
+            %215:bool = lt %214, 4u
+            if %215 [t: $B77, f: $B78] {  # if_19
+              $B77: {  # true
+                exit_if  # if_19
               }
-              %b74 = block {  # false
-                exit_loop  # loop_12
+              $B78: {  # false
+                exit_loop  # loop_13
               }
             }
-            %188:u32 = load %innerRow_3
-            %189:u32 = mul %188, 4u
-            %190:u32 = load %innerCol_3
-            %index_3:u32 = add %189, %190  # %index_3: 'index'
-            %192:u32 = load %innerRow_3
-            %193:u32 = add %globalRow, %192
-            %194:u32 = load %innerCol_3
-            %195:u32 = add %globalCol, %194
-            %196:ptr<function, f32, read_write> = access %acc, %index_3
-            %197:f32 = load %196
-            %198:void = call %mm_write, %193, %195, %197
-            continue %b72
+            %216:u32 = load %innerRow_3
+            %217:u32 = mul %216, 4u
+            %218:u32 = load %innerCol_3
+            %219:u32 = add %217, %218
+            %index_3:u32 = let %219  # %index_3: 'index'
+            %221:u32 = load %innerRow_3
+            %222:u32 = add %globalRow, %221
+            %223:u32 = load %innerCol_3
+            %224:u32 = add %globalCol, %223
+            %225:ptr<function, f32, read_write> = access %acc, %index_3
+            %226:f32 = load %225
+            %227:void = call %mm_write, %222, %224, %226
+            continue  # -> $B76
           }
-          %b72 = block {  # continuing
-            %199:u32 = load %innerCol_3
-            %200:u32 = add %199, 1u
-            store %innerCol_3, %200
-            next_iteration %b71
+          $B76: {  # continuing
+            %228:u32 = load %innerCol_3
+            %229:u32 = add %228, 1u
+            store %innerCol_3, %229
+            next_iteration  # -> $B75
           }
         }
-        continue %b67
+        continue  # -> $B71
       }
-      %b67 = block {  # continuing
-        %201:u32 = load %innerRow_3
-        %202:u32 = add %201, 1u
-        store %innerRow_3, %202
-        next_iteration %b66
+      $B71: {  # continuing
+        %230:u32 = load %innerRow_3
+        %231:u32 = add %230, 1u
+        store %innerRow_3, %231
+        next_iteration  # -> $B70
       }
     }
     ret
   }
 }
+%tint_div_u32 = func(%lhs:u32, %rhs:u32):u32 {
+  $B79: {
+    %234:bool = eq %rhs, 0u
+    %235:u32 = select %rhs, 1u, %234
+    %236:u32 = div %lhs, %235
+    ret %236
+  }
+}
 
 unhandled variable address space
 ********************************************************************
diff --git a/test/tint/bug/tint/922.wgsl.expected.ir.msl b/test/tint/bug/tint/922.wgsl.expected.ir.msl
index 1ab7829..edb93e9 100644
--- a/test/tint/bug/tint/922.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/922.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Mat4x4_ = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Mat4x4_ = struct @align(16) {
   mx:vec4<f32> @offset(0)
   my:vec4<f32> @offset(16)
   mz:vec4<f32> @offset(32)
@@ -37,7 +37,7 @@
   member:vec4<f32> @offset(32), @builtin(position)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %global:ptr<uniform, ub_SceneParams, read> = var @binding_point(0, 0)
   %global1:ptr<uniform, ub_MaterialParams, read> = var @binding_point(0, 1)
   %global2:ptr<uniform, ub_PacketParams, read> = var @binding_point(0, 2)
@@ -51,338 +51,452 @@
   %gl_Position:ptr<private, vec4<f32>, read_write> = var
 }
 
-%Mat4x3GetCol0_ = func(%m:Mat4x3_):vec3<f32> -> %b2 {
-  %b2 = block {
+%Mat4x3GetCol0_ = func(%m:Mat4x3_):vec3<f32> {
+  $B2: {
     %m1:ptr<function, Mat4x3_, read_write> = var
     store %m1, %m
-    %x_e2:Mat4x3_ = load %m1
-    %x_e5:Mat4x3_ = load %m1
-    %x_e8:Mat4x3_ = load %m1
-    %18:f32 = access %x_e2, 0u, 0u
-    %19:f32 = access %x_e5, 1u, 0u
-    %20:f32 = access %x_e8, 2u, 0u
-    %21:vec3<f32> = construct %18, %19, %20
-    ret %21
+    %15:Mat4x3_ = load %m1
+    %x_e2:Mat4x3_ = let %15
+    %17:Mat4x3_ = load %m1
+    %x_e5:Mat4x3_ = let %17
+    %19:Mat4x3_ = load %m1
+    %x_e8:Mat4x3_ = let %19
+    %21:f32 = access %x_e2, 0u, 0u
+    %22:f32 = access %x_e5, 1u, 0u
+    %23:f32 = access %x_e8, 2u, 0u
+    %24:vec3<f32> = construct %21, %22, %23
+    ret %24
   }
 }
-%Mat4x3GetCol1_ = func(%m2:Mat4x3_):vec3<f32> -> %b3 {
-  %b3 = block {
+%Mat4x3GetCol1_ = func(%m2:Mat4x3_):vec3<f32> {
+  $B3: {
     %m3:ptr<function, Mat4x3_, read_write> = var
     store %m3, %m2
-    %x_e2_1:Mat4x3_ = load %m3  # %x_e2_1: 'x_e2'
-    %x_e5_1:Mat4x3_ = load %m3  # %x_e5_1: 'x_e5'
-    %x_e8_1:Mat4x3_ = load %m3  # %x_e8_1: 'x_e8'
-    %28:f32 = access %x_e2_1, 0u, 1u
-    %29:f32 = access %x_e5_1, 1u, 1u
-    %30:f32 = access %x_e8_1, 2u, 1u
-    %31:vec3<f32> = construct %28, %29, %30
-    ret %31
+    %28:Mat4x3_ = load %m3
+    %x_e2_1:Mat4x3_ = let %28  # %x_e2_1: 'x_e2'
+    %30:Mat4x3_ = load %m3
+    %x_e5_1:Mat4x3_ = let %30  # %x_e5_1: 'x_e5'
+    %32:Mat4x3_ = load %m3
+    %x_e8_1:Mat4x3_ = let %32  # %x_e8_1: 'x_e8'
+    %34:f32 = access %x_e2_1, 0u, 1u
+    %35:f32 = access %x_e5_1, 1u, 1u
+    %36:f32 = access %x_e8_1, 2u, 1u
+    %37:vec3<f32> = construct %34, %35, %36
+    ret %37
   }
 }
-%Mat4x3GetCol2_ = func(%m4:Mat4x3_):vec3<f32> -> %b4 {
-  %b4 = block {
+%Mat4x3GetCol2_ = func(%m4:Mat4x3_):vec3<f32> {
+  $B4: {
     %m5:ptr<function, Mat4x3_, read_write> = var
     store %m5, %m4
-    %x_e2_2:Mat4x3_ = load %m5  # %x_e2_2: 'x_e2'
-    %x_e5_2:Mat4x3_ = load %m5  # %x_e5_2: 'x_e5'
-    %x_e8_2:Mat4x3_ = load %m5  # %x_e8_2: 'x_e8'
-    %38:f32 = access %x_e2_2, 0u, 2u
-    %39:f32 = access %x_e5_2, 1u, 2u
-    %40:f32 = access %x_e8_2, 2u, 2u
-    %41:vec3<f32> = construct %38, %39, %40
-    ret %41
+    %41:Mat4x3_ = load %m5
+    %x_e2_2:Mat4x3_ = let %41  # %x_e2_2: 'x_e2'
+    %43:Mat4x3_ = load %m5
+    %x_e5_2:Mat4x3_ = let %43  # %x_e5_2: 'x_e5'
+    %45:Mat4x3_ = load %m5
+    %x_e8_2:Mat4x3_ = let %45  # %x_e8_2: 'x_e8'
+    %47:f32 = access %x_e2_2, 0u, 2u
+    %48:f32 = access %x_e5_2, 1u, 2u
+    %49:f32 = access %x_e8_2, 2u, 2u
+    %50:vec3<f32> = construct %47, %48, %49
+    ret %50
   }
 }
-%Mat4x3GetCol3_ = func(%m6:Mat4x3_):vec3<f32> -> %b5 {
-  %b5 = block {
+%Mat4x3GetCol3_ = func(%m6:Mat4x3_):vec3<f32> {
+  $B5: {
     %m7:ptr<function, Mat4x3_, read_write> = var
     store %m7, %m6
-    %x_e2_3:Mat4x3_ = load %m7  # %x_e2_3: 'x_e2'
-    %x_e5_3:Mat4x3_ = load %m7  # %x_e5_3: 'x_e5'
-    %x_e8_3:Mat4x3_ = load %m7  # %x_e8_3: 'x_e8'
-    %48:f32 = access %x_e2_3, 0u, 3u
-    %49:f32 = access %x_e5_3, 1u, 3u
-    %50:f32 = access %x_e8_3, 2u, 3u
-    %51:vec3<f32> = construct %48, %49, %50
-    ret %51
+    %54:Mat4x3_ = load %m7
+    %x_e2_3:Mat4x3_ = let %54  # %x_e2_3: 'x_e2'
+    %56:Mat4x3_ = load %m7
+    %x_e5_3:Mat4x3_ = let %56  # %x_e5_3: 'x_e5'
+    %58:Mat4x3_ = load %m7
+    %x_e8_3:Mat4x3_ = let %58  # %x_e8_3: 'x_e8'
+    %60:f32 = access %x_e2_3, 0u, 3u
+    %61:f32 = access %x_e5_3, 1u, 3u
+    %62:f32 = access %x_e8_3, 2u, 3u
+    %63:vec3<f32> = construct %60, %61, %62
+    ret %63
   }
 }
-%Mul = func(%m8:Mat4x4_, %v:vec4<f32>):vec4<f32> -> %b6 {
-  %b6 = block {
+%Mul = func(%m8:Mat4x4_, %v:vec4<f32>):vec4<f32> {
+  $B6: {
     %m9:ptr<function, Mat4x4_, read_write> = var
     %v1:ptr<function, vec4<f32>, read_write> = var
     store %m9, %m8
     store %v1, %v
-    %x_e4:Mat4x4_ = load %m9
-    %x_e6:vec4<f32> = load %v1
-    %x_e8_4:Mat4x4_ = load %m9  # %x_e8_4: 'x_e8'
-    %x_e10:vec4<f32> = load %v1
-    %x_e12:Mat4x4_ = load %m9
-    %x_e14:vec4<f32> = load %v1
-    %x_e16:Mat4x4_ = load %m9
-    %x_e18:vec4<f32> = load %v1
-    %65:vec4<f32> = access %x_e4, 0u
-    %66:f32 = dot %65, %x_e6
-    %67:vec4<f32> = access %x_e8_4, 1u
-    %68:f32 = dot %67, %x_e10
-    %69:vec4<f32> = access %x_e12, 2u
-    %70:f32 = dot %69, %x_e14
-    %71:vec4<f32> = access %x_e16, 3u
-    %72:f32 = dot %71, %x_e18
-    %73:vec4<f32> = construct %66, %68, %70, %72
-    ret %73
+    %69:Mat4x4_ = load %m9
+    %x_e4:Mat4x4_ = let %69
+    %71:vec4<f32> = load %v1
+    %x_e6:vec4<f32> = let %71
+    %73:Mat4x4_ = load %m9
+    %x_e8_4:Mat4x4_ = let %73  # %x_e8_4: 'x_e8'
+    %75:vec4<f32> = load %v1
+    %x_e10:vec4<f32> = let %75
+    %77:Mat4x4_ = load %m9
+    %x_e12:Mat4x4_ = let %77
+    %79:vec4<f32> = load %v1
+    %x_e14:vec4<f32> = let %79
+    %81:Mat4x4_ = load %m9
+    %x_e16:Mat4x4_ = let %81
+    %83:vec4<f32> = load %v1
+    %x_e18:vec4<f32> = let %83
+    %85:vec4<f32> = access %x_e4, 0u
+    %86:f32 = dot %85, %x_e6
+    %87:f32 = let %86
+    %88:vec4<f32> = access %x_e8_4, 1u
+    %89:f32 = dot %88, %x_e10
+    %90:f32 = let %89
+    %91:vec4<f32> = access %x_e12, 2u
+    %92:f32 = dot %91, %x_e14
+    %93:f32 = let %92
+    %94:vec4<f32> = access %x_e16, 3u
+    %95:f32 = dot %94, %x_e18
+    %96:vec4<f32> = construct %87, %90, %93, %95
+    ret %96
   }
 }
-%Mul1 = func(%m10:Mat4x3_, %v2:vec4<f32>):vec3<f32> -> %b7 {
-  %b7 = block {
+%Mul1 = func(%m10:Mat4x3_, %v2:vec4<f32>):vec3<f32> {
+  $B7: {
     %m11:ptr<function, Mat4x3_, read_write> = var
     %v3:ptr<function, vec4<f32>, read_write> = var
     store %m11, %m10
     store %v3, %v2
-    %x_e4_1:Mat4x3_ = load %m11  # %x_e4_1: 'x_e4'
-    %x_e6_1:vec4<f32> = load %v3  # %x_e6_1: 'x_e6'
-    %x_e8_5:Mat4x3_ = load %m11  # %x_e8_5: 'x_e8'
-    %x_e10_1:vec4<f32> = load %v3  # %x_e10_1: 'x_e10'
-    %x_e12_1:Mat4x3_ = load %m11  # %x_e12_1: 'x_e12'
-    %x_e14_1:vec4<f32> = load %v3  # %x_e14_1: 'x_e14'
-    %85:vec4<f32> = access %x_e4_1, 0u
-    %86:f32 = dot %85, %x_e6_1
-    %87:vec4<f32> = access %x_e8_5, 1u
-    %88:f32 = dot %87, %x_e10_1
-    %89:vec4<f32> = access %x_e12_1, 2u
-    %90:f32 = dot %89, %x_e14_1
-    %91:vec3<f32> = construct %86, %88, %90
-    ret %91
+    %102:Mat4x3_ = load %m11
+    %x_e4_1:Mat4x3_ = let %102  # %x_e4_1: 'x_e4'
+    %104:vec4<f32> = load %v3
+    %x_e6_1:vec4<f32> = let %104  # %x_e6_1: 'x_e6'
+    %106:Mat4x3_ = load %m11
+    %x_e8_5:Mat4x3_ = let %106  # %x_e8_5: 'x_e8'
+    %108:vec4<f32> = load %v3
+    %x_e10_1:vec4<f32> = let %108  # %x_e10_1: 'x_e10'
+    %110:Mat4x3_ = load %m11
+    %x_e12_1:Mat4x3_ = let %110  # %x_e12_1: 'x_e12'
+    %112:vec4<f32> = load %v3
+    %x_e14_1:vec4<f32> = let %112  # %x_e14_1: 'x_e14'
+    %114:vec4<f32> = access %x_e4_1, 0u
+    %115:f32 = dot %114, %x_e6_1
+    %116:f32 = let %115
+    %117:vec4<f32> = access %x_e8_5, 1u
+    %118:f32 = dot %117, %x_e10_1
+    %119:f32 = let %118
+    %120:vec4<f32> = access %x_e12_1, 2u
+    %121:f32 = dot %120, %x_e14_1
+    %122:vec3<f32> = construct %116, %119, %121
+    ret %122
   }
 }
-%Mul2 = func(%m12:Mat4x2_, %v4:vec4<f32>):vec2<f32> -> %b8 {
-  %b8 = block {
+%Mul2 = func(%m12:Mat4x2_, %v4:vec4<f32>):vec2<f32> {
+  $B8: {
     %m13:ptr<function, Mat4x2_, read_write> = var
     %v5:ptr<function, vec4<f32>, read_write> = var
     store %m13, %m12
     store %v5, %v4
-    %x_e4_2:Mat4x2_ = load %m13  # %x_e4_2: 'x_e4'
-    %x_e6_2:vec4<f32> = load %v5  # %x_e6_2: 'x_e6'
-    %x_e8_6:Mat4x2_ = load %m13  # %x_e8_6: 'x_e8'
-    %x_e10_2:vec4<f32> = load %v5  # %x_e10_2: 'x_e10'
-    %101:vec4<f32> = access %x_e4_2, 0u
-    %102:f32 = dot %101, %x_e6_2
-    %103:vec4<f32> = access %x_e8_6, 1u
-    %104:f32 = dot %103, %x_e10_2
-    %105:vec2<f32> = construct %102, %104
-    ret %105
+    %128:Mat4x2_ = load %m13
+    %x_e4_2:Mat4x2_ = let %128  # %x_e4_2: 'x_e4'
+    %130:vec4<f32> = load %v5
+    %x_e6_2:vec4<f32> = let %130  # %x_e6_2: 'x_e6'
+    %132:Mat4x2_ = load %m13
+    %x_e8_6:Mat4x2_ = let %132  # %x_e8_6: 'x_e8'
+    %134:vec4<f32> = load %v5
+    %x_e10_2:vec4<f32> = let %134  # %x_e10_2: 'x_e10'
+    %136:vec4<f32> = access %x_e4_2, 0u
+    %137:f32 = dot %136, %x_e6_2
+    %138:f32 = let %137
+    %139:vec4<f32> = access %x_e8_6, 1u
+    %140:f32 = dot %139, %x_e10_2
+    %141:vec2<f32> = construct %138, %140
+    ret %141
   }
 }
-%Mul3 = func(%v6:vec3<f32>, %m14:Mat4x3_):vec4<f32> -> %b9 {
-  %b9 = block {
+%Mul3 = func(%v6:vec3<f32>, %m14:Mat4x3_):vec4<f32> {
+  $B9: {
     %v7:ptr<function, vec3<f32>, read_write> = var
     %m15:ptr<function, Mat4x3_, read_write> = var
     store %v7, %v6
     store %m15, %m14
-    %x_e5_4:Mat4x3_ = load %m15  # %x_e5_4: 'x_e5'
-    %x_e6_3:vec3<f32> = call %Mat4x3GetCol0_, %x_e5_4  # %x_e6_3: 'x_e6'
-    %x_e7:vec3<f32> = load %v7
-    %x_e10_3:Mat4x3_ = load %m15  # %x_e10_3: 'x_e10'
-    %x_e11:vec3<f32> = call %Mat4x3GetCol1_, %x_e10_3
-    %x_e12_2:vec3<f32> = load %v7  # %x_e12_2: 'x_e12'
-    %x_e15:Mat4x3_ = load %m15
-    %x_e16_1:vec3<f32> = call %Mat4x3GetCol2_, %x_e15  # %x_e16_1: 'x_e16'
-    %x_e17:vec3<f32> = load %v7
-    %x_e20:Mat4x3_ = load %m15
-    %x_e21:vec3<f32> = call %Mat4x3GetCol3_, %x_e20
-    %x_e22:vec3<f32> = load %v7
-    %123:f32 = dot %x_e6_3, %x_e7
-    %124:f32 = dot %x_e11, %x_e12_2
-    %125:f32 = dot %x_e16_1, %x_e17
-    %126:f32 = dot %x_e21, %x_e22
-    %127:vec4<f32> = construct %123, %124, %125, %126
-    ret %127
+    %147:Mat4x3_ = load %m15
+    %x_e5_4:Mat4x3_ = let %147  # %x_e5_4: 'x_e5'
+    %149:vec3<f32> = call %Mat4x3GetCol0_, %x_e5_4
+    %x_e6_3:vec3<f32> = let %149  # %x_e6_3: 'x_e6'
+    %151:vec3<f32> = load %v7
+    %x_e7:vec3<f32> = let %151
+    %153:Mat4x3_ = load %m15
+    %x_e10_3:Mat4x3_ = let %153  # %x_e10_3: 'x_e10'
+    %155:vec3<f32> = call %Mat4x3GetCol1_, %x_e10_3
+    %x_e11:vec3<f32> = let %155
+    %157:vec3<f32> = load %v7
+    %x_e12_2:vec3<f32> = let %157  # %x_e12_2: 'x_e12'
+    %159:Mat4x3_ = load %m15
+    %x_e15:Mat4x3_ = let %159
+    %161:vec3<f32> = call %Mat4x3GetCol2_, %x_e15
+    %x_e16_1:vec3<f32> = let %161  # %x_e16_1: 'x_e16'
+    %163:vec3<f32> = load %v7
+    %x_e17:vec3<f32> = let %163
+    %165:Mat4x3_ = load %m15
+    %x_e20:Mat4x3_ = let %165
+    %167:vec3<f32> = call %Mat4x3GetCol3_, %x_e20
+    %x_e21:vec3<f32> = let %167
+    %169:vec3<f32> = load %v7
+    %x_e22:vec3<f32> = let %169
+    %171:f32 = dot %x_e6_3, %x_e7
+    %172:f32 = let %171
+    %173:f32 = dot %x_e11, %x_e12_2
+    %174:f32 = let %173
+    %175:f32 = dot %x_e16_1, %x_e17
+    %176:f32 = let %175
+    %177:f32 = dot %x_e21, %x_e22
+    %178:vec4<f32> = construct %172, %174, %176, %177
+    ret %178
   }
 }
-%x_Mat4x4_ = func(%n:f32):Mat4x4_ -> %b10 {
-  %b10 = block {
+%x_Mat4x4_ = func(%n:f32):Mat4x4_ {
+  $B10: {
     %n1:ptr<function, f32, read_write> = var
     %o:ptr<function, Mat4x4_, read_write> = var
     store %n1, %n
-    %x_e4_3:f32 = load %n1  # %x_e4_3: 'x_e4'
-    %133:ptr<function, vec4<f32>, read_write> = access %o, 0u
-    %134:vec4<f32> = construct %x_e4_3, 0.0f, 0.0f, 0.0f
-    store %133, %134
-    %x_e11_1:f32 = load %n1  # %x_e11_1: 'x_e11'
-    %136:ptr<function, vec4<f32>, read_write> = access %o, 1u
-    %137:vec4<f32> = construct 0.0f, %x_e11_1, 0.0f, 0.0f
-    store %136, %137
-    %x_e18_1:f32 = load %n1  # %x_e18_1: 'x_e18'
-    %139:ptr<function, vec4<f32>, read_write> = access %o, 2u
-    %140:vec4<f32> = construct 0.0f, 0.0f, %x_e18_1, 0.0f
-    store %139, %140
-    %x_e25:f32 = load %n1
-    %142:ptr<function, vec4<f32>, read_write> = access %o, 3u
-    %143:vec4<f32> = construct 0.0f, 0.0f, 0.0f, %x_e25
-    store %142, %143
-    %x_e27:Mat4x4_ = load %o
+    %183:f32 = load %n1
+    %x_e4_3:f32 = let %183  # %x_e4_3: 'x_e4'
+    %185:ptr<function, vec4<f32>, read_write> = access %o, 0u
+    %186:vec4<f32> = construct %x_e4_3, 0.0f, 0.0f, 0.0f
+    store %185, %186
+    %187:f32 = load %n1
+    %x_e11_1:f32 = let %187  # %x_e11_1: 'x_e11'
+    %189:ptr<function, vec4<f32>, read_write> = access %o, 1u
+    %190:vec4<f32> = construct 0.0f, %x_e11_1, 0.0f, 0.0f
+    store %189, %190
+    %191:f32 = load %n1
+    %x_e18_1:f32 = let %191  # %x_e18_1: 'x_e18'
+    %193:ptr<function, vec4<f32>, read_write> = access %o, 2u
+    %194:vec4<f32> = construct 0.0f, 0.0f, %x_e18_1, 0.0f
+    store %193, %194
+    %195:f32 = load %n1
+    %x_e25:f32 = let %195
+    %197:ptr<function, vec4<f32>, read_write> = access %o, 3u
+    %198:vec4<f32> = construct 0.0f, 0.0f, 0.0f, %x_e25
+    store %197, %198
+    %199:Mat4x4_ = load %o
+    %x_e27:Mat4x4_ = let %199
     ret %x_e27
   }
 }
-%x_Mat4x4_1 = func(%m16:Mat4x3_):Mat4x4_ -> %b11 {
-  %b11 = block {
+%x_Mat4x4_1 = func(%m16:Mat4x3_):Mat4x4_ {
+  $B11: {
     %m17:ptr<function, Mat4x3_, read_write> = var
     %o1:ptr<function, Mat4x4_, read_write> = var
     store %m17, %m16
-    %x_e4_4:Mat4x4_ = call %x_Mat4x4_, 1.0f  # %x_e4_4: 'x_e4'
+    %205:Mat4x4_ = call %x_Mat4x4_, 1.0f
+    %x_e4_4:Mat4x4_ = let %205  # %x_e4_4: 'x_e4'
     store %o1, %x_e4_4
-    %x_e7_1:Mat4x3_ = load %m17  # %x_e7_1: 'x_e7'
-    %151:ptr<function, vec4<f32>, read_write> = access %o1, 0u
-    %152:vec4<f32> = access %x_e7_1, 0u
-    store %151, %152
-    %x_e10_4:Mat4x3_ = load %m17  # %x_e10_4: 'x_e10'
-    %154:ptr<function, vec4<f32>, read_write> = access %o1, 1u
-    %155:vec4<f32> = access %x_e10_4, 1u
-    store %154, %155
-    %x_e13:Mat4x3_ = load %m17
-    %157:ptr<function, vec4<f32>, read_write> = access %o1, 2u
-    %158:vec4<f32> = access %x_e13, 2u
-    store %157, %158
-    %x_e15_1:Mat4x4_ = load %o1  # %x_e15_1: 'x_e15'
+    %207:Mat4x3_ = load %m17
+    %x_e7_1:Mat4x3_ = let %207  # %x_e7_1: 'x_e7'
+    %209:ptr<function, vec4<f32>, read_write> = access %o1, 0u
+    %210:vec4<f32> = access %x_e7_1, 0u
+    store %209, %210
+    %211:Mat4x3_ = load %m17
+    %x_e10_4:Mat4x3_ = let %211  # %x_e10_4: 'x_e10'
+    %213:ptr<function, vec4<f32>, read_write> = access %o1, 1u
+    %214:vec4<f32> = access %x_e10_4, 1u
+    store %213, %214
+    %215:Mat4x3_ = load %m17
+    %x_e13:Mat4x3_ = let %215
+    %217:ptr<function, vec4<f32>, read_write> = access %o1, 2u
+    %218:vec4<f32> = access %x_e13, 2u
+    store %217, %218
+    %219:Mat4x4_ = load %o1
+    %x_e15_1:Mat4x4_ = let %219  # %x_e15_1: 'x_e15'
     ret %x_e15_1
   }
 }
-%x_Mat4x4_2 = func(%m18:Mat4x2_):Mat4x4_ -> %b12 {
-  %b12 = block {
+%x_Mat4x4_2 = func(%m18:Mat4x2_):Mat4x4_ {
+  $B12: {
     %m19:ptr<function, Mat4x2_, read_write> = var
     %o2:ptr<function, Mat4x4_, read_write> = var
     store %m19, %m18
-    %x_e4_5:Mat4x4_ = call %x_Mat4x4_, 1.0f  # %x_e4_5: 'x_e4'
+    %225:Mat4x4_ = call %x_Mat4x4_, 1.0f
+    %x_e4_5:Mat4x4_ = let %225  # %x_e4_5: 'x_e4'
     store %o2, %x_e4_5
-    %x_e7_2:Mat4x2_ = load %m19  # %x_e7_2: 'x_e7'
-    %166:ptr<function, vec4<f32>, read_write> = access %o2, 0u
-    %167:vec4<f32> = access %x_e7_2, 0u
-    store %166, %167
-    %x_e10_5:Mat4x2_ = load %m19  # %x_e10_5: 'x_e10'
-    %169:ptr<function, vec4<f32>, read_write> = access %o2, 1u
-    %170:vec4<f32> = access %x_e10_5, 1u
-    store %169, %170
-    %x_e12_3:Mat4x4_ = load %o2  # %x_e12_3: 'x_e12'
+    %227:Mat4x2_ = load %m19
+    %x_e7_2:Mat4x2_ = let %227  # %x_e7_2: 'x_e7'
+    %229:ptr<function, vec4<f32>, read_write> = access %o2, 0u
+    %230:vec4<f32> = access %x_e7_2, 0u
+    store %229, %230
+    %231:Mat4x2_ = load %m19
+    %x_e10_5:Mat4x2_ = let %231  # %x_e10_5: 'x_e10'
+    %233:ptr<function, vec4<f32>, read_write> = access %o2, 1u
+    %234:vec4<f32> = access %x_e10_5, 1u
+    store %233, %234
+    %235:Mat4x4_ = load %o2
+    %x_e12_3:Mat4x4_ = let %235  # %x_e12_3: 'x_e12'
     ret %x_e12_3
   }
 }
-%x_Mat4x3_ = func(%n2:f32):Mat4x3_ -> %b13 {
-  %b13 = block {
+%x_Mat4x3_ = func(%n2:f32):Mat4x3_ {
+  $B13: {
     %n3:ptr<function, f32, read_write> = var
     %o3:ptr<function, Mat4x3_, read_write> = var
     store %n3, %n2
-    %x_e4_6:f32 = load %n3  # %x_e4_6: 'x_e4'
-    %177:ptr<function, vec4<f32>, read_write> = access %o3, 0u
-    %178:vec4<f32> = construct %x_e4_6, 0.0f, 0.0f, 0.0f
-    store %177, %178
-    %x_e11_2:f32 = load %n3  # %x_e11_2: 'x_e11'
-    %180:ptr<function, vec4<f32>, read_write> = access %o3, 1u
-    %181:vec4<f32> = construct 0.0f, %x_e11_2, 0.0f, 0.0f
-    store %180, %181
-    %x_e18_2:f32 = load %n3  # %x_e18_2: 'x_e18'
-    %183:ptr<function, vec4<f32>, read_write> = access %o3, 2u
-    %184:vec4<f32> = construct 0.0f, 0.0f, %x_e18_2, 0.0f
-    store %183, %184
-    %x_e21_1:Mat4x3_ = load %o3  # %x_e21_1: 'x_e21'
+    %241:f32 = load %n3
+    %x_e4_6:f32 = let %241  # %x_e4_6: 'x_e4'
+    %243:ptr<function, vec4<f32>, read_write> = access %o3, 0u
+    %244:vec4<f32> = construct %x_e4_6, 0.0f, 0.0f, 0.0f
+    store %243, %244
+    %245:f32 = load %n3
+    %x_e11_2:f32 = let %245  # %x_e11_2: 'x_e11'
+    %247:ptr<function, vec4<f32>, read_write> = access %o3, 1u
+    %248:vec4<f32> = construct 0.0f, %x_e11_2, 0.0f, 0.0f
+    store %247, %248
+    %249:f32 = load %n3
+    %x_e18_2:f32 = let %249  # %x_e18_2: 'x_e18'
+    %251:ptr<function, vec4<f32>, read_write> = access %o3, 2u
+    %252:vec4<f32> = construct 0.0f, 0.0f, %x_e18_2, 0.0f
+    store %251, %252
+    %253:Mat4x3_ = load %o3
+    %x_e21_1:Mat4x3_ = let %253  # %x_e21_1: 'x_e21'
     ret %x_e21_1
   }
 }
-%x_Mat4x3_1 = func(%m20:Mat4x4_):Mat4x3_ -> %b14 {
-  %b14 = block {
+%x_Mat4x3_1 = func(%m20:Mat4x4_):Mat4x3_ {
+  $B14: {
     %m21:ptr<function, Mat4x4_, read_write> = var
     %o4:ptr<function, Mat4x3_, read_write> = var
     store %m21, %m20
-    %x_e4_7:Mat4x4_ = load %m21  # %x_e4_7: 'x_e4'
-    %191:ptr<function, vec4<f32>, read_write> = access %o4, 0u
-    %192:vec4<f32> = access %x_e4_7, 0u
-    store %191, %192
-    %x_e7_3:Mat4x4_ = load %m21  # %x_e7_3: 'x_e7'
-    %194:ptr<function, vec4<f32>, read_write> = access %o4, 1u
-    %195:vec4<f32> = access %x_e7_3, 1u
-    store %194, %195
-    %x_e10_6:Mat4x4_ = load %m21  # %x_e10_6: 'x_e10'
-    %197:ptr<function, vec4<f32>, read_write> = access %o4, 2u
-    %198:vec4<f32> = access %x_e10_6, 2u
-    store %197, %198
-    %x_e12_4:Mat4x3_ = load %o4  # %x_e12_4: 'x_e12'
+    %259:Mat4x4_ = load %m21
+    %x_e4_7:Mat4x4_ = let %259  # %x_e4_7: 'x_e4'
+    %261:ptr<function, vec4<f32>, read_write> = access %o4, 0u
+    %262:vec4<f32> = access %x_e4_7, 0u
+    store %261, %262
+    %263:Mat4x4_ = load %m21
+    %x_e7_3:Mat4x4_ = let %263  # %x_e7_3: 'x_e7'
+    %265:ptr<function, vec4<f32>, read_write> = access %o4, 1u
+    %266:vec4<f32> = access %x_e7_3, 1u
+    store %265, %266
+    %267:Mat4x4_ = load %m21
+    %x_e10_6:Mat4x4_ = let %267  # %x_e10_6: 'x_e10'
+    %269:ptr<function, vec4<f32>, read_write> = access %o4, 2u
+    %270:vec4<f32> = access %x_e10_6, 2u
+    store %269, %270
+    %271:Mat4x3_ = load %o4
+    %x_e12_4:Mat4x3_ = let %271  # %x_e12_4: 'x_e12'
     ret %x_e12_4
   }
 }
-%main1 = func():void -> %b15 {
-  %b15 = block {
+%main1 = func():void {
+  $B15: {
     %t_PosMtx:ptr<function, Mat4x3_, read_write> = var
     %t_TexSpaceCoord:ptr<function, vec2<f32>, read_write> = var
-    %x_e15_2:f32 = load %a_PosMtxIdx1  # %x_e15_2: 'x_e15'
-    %204:i32 = convert %x_e15_2
-    %205:ptr<uniform, Mat4x3_, read> = access %global2, 0u, %204
-    %x_e18_3:Mat4x3_ = load %205  # %x_e18_3: 'x_e18'
+    %276:f32 = load %a_PosMtxIdx1
+    %x_e15_2:f32 = let %276  # %x_e15_2: 'x_e15'
+    %278:i32 = call %tint_f32_to_i32, %x_e15_2
+    %280:ptr<uniform, Mat4x3_, read> = access %global2, 0u, %278
+    %281:Mat4x3_ = load %280
+    %x_e18_3:Mat4x3_ = let %281  # %x_e18_3: 'x_e18'
     store %t_PosMtx, %x_e18_3
-    %x_e23:Mat4x3_ = load %t_PosMtx
-    %x_e24:Mat4x4_ = call %x_Mat4x4_1, %x_e23
-    %x_e25_1:vec3<f32> = load %a_Position1  # %x_e25_1: 'x_e25'
-    %x_e29:Mat4x3_ = load %t_PosMtx
-    %x_e30:Mat4x4_ = call %x_Mat4x4_1, %x_e29
-    %x_e31:vec3<f32> = load %a_Position1
-    %213:vec4<f32> = construct %x_e31, 1.0f
-    %x_e34:vec4<f32> = call %Mul, %x_e30, %213
-    %215:ptr<uniform, Mat4x4_, read> = access %global, 0u
-    %x_e35:Mat4x4_ = load %215
-    %x_e37:Mat4x3_ = load %t_PosMtx
-    %x_e38:Mat4x4_ = call %x_Mat4x4_1, %x_e37
-    %x_e39:vec3<f32> = load %a_Position1
-    %x_e43:Mat4x3_ = load %t_PosMtx
-    %x_e44:Mat4x4_ = call %x_Mat4x4_1, %x_e43
-    %x_e45:vec3<f32> = load %a_Position1
-    %223:vec4<f32> = construct %x_e45, 1.0f
-    %x_e48:vec4<f32> = call %Mul, %x_e44, %223
-    %x_e49:vec4<f32> = call %Mul, %x_e35, %x_e48
+    %283:Mat4x3_ = load %t_PosMtx
+    %x_e23:Mat4x3_ = let %283
+    %285:Mat4x4_ = call %x_Mat4x4_1, %x_e23
+    %x_e24:Mat4x4_ = let %285
+    %287:vec3<f32> = load %a_Position1
+    %x_e25_1:vec3<f32> = let %287  # %x_e25_1: 'x_e25'
+    %289:Mat4x3_ = load %t_PosMtx
+    %x_e29:Mat4x3_ = let %289
+    %291:Mat4x4_ = call %x_Mat4x4_1, %x_e29
+    %x_e30:Mat4x4_ = let %291
+    %293:vec3<f32> = load %a_Position1
+    %x_e31:vec3<f32> = let %293
+    %295:vec4<f32> = construct %x_e31, 1.0f
+    %296:vec4<f32> = call %Mul, %x_e30, %295
+    %x_e34:vec4<f32> = let %296
+    %298:ptr<uniform, Mat4x4_, read> = access %global, 0u
+    %299:Mat4x4_ = load %298
+    %x_e35:Mat4x4_ = let %299
+    %301:Mat4x3_ = load %t_PosMtx
+    %x_e37:Mat4x3_ = let %301
+    %303:Mat4x4_ = call %x_Mat4x4_1, %x_e37
+    %x_e38:Mat4x4_ = let %303
+    %305:vec3<f32> = load %a_Position1
+    %x_e39:vec3<f32> = let %305
+    %307:Mat4x3_ = load %t_PosMtx
+    %x_e43:Mat4x3_ = let %307
+    %309:Mat4x4_ = call %x_Mat4x4_1, %x_e43
+    %x_e44:Mat4x4_ = let %309
+    %311:vec3<f32> = load %a_Position1
+    %x_e45:vec3<f32> = let %311
+    %313:vec4<f32> = construct %x_e45, 1.0f
+    %314:vec4<f32> = call %Mul, %x_e44, %313
+    %x_e48:vec4<f32> = let %314
+    %316:vec4<f32> = call %Mul, %x_e35, %x_e48
+    %x_e49:vec4<f32> = let %316
     store %gl_Position, %x_e49
-    %x_e50:vec4<f32> = load %a_Color1
+    %318:vec4<f32> = load %a_Color1
+    %x_e50:vec4<f32> = let %318
     store %v_Color, %x_e50
-    %227:ptr<uniform, vec4<f32>, read> = access %global1, 1u
-    %x_e52:vec4<f32> = load %227
-    %229:f32 = access %x_e52, 0u
-    %230:bool = eq %229, 2.0f
-    if %230 [t: %b16, f: %b17] {  # if_1
-      %b16 = block {  # true
-        %x_e59:vec3<f32> = load %a_Normal1
-        %232:ptr<uniform, Mat4x2_, read> = access %global1, 0u, 0i
-        %x_e64:Mat4x2_ = load %232
-        %x_e65:vec3<f32> = load %a_Normal1
-        %235:vec4<f32> = construct %x_e65, 1.0f
-        %x_e68:vec2<f32> = call %Mul2, %x_e64, %235
-        %237:vec2<f32> = swizzle %x_e68, xy
-        store %v_TexCoord, %237
+    %320:ptr<uniform, vec4<f32>, read> = access %global1, 1u
+    %321:vec4<f32> = load %320
+    %x_e52:vec4<f32> = let %321
+    %323:f32 = access %x_e52, 0u
+    %324:bool = eq %323, 2.0f
+    if %324 [t: $B16, f: $B17] {  # if_1
+      $B16: {  # true
+        %325:vec3<f32> = load %a_Normal1
+        %x_e59:vec3<f32> = let %325
+        %327:ptr<uniform, Mat4x2_, read> = access %global1, 0u, 0i
+        %328:Mat4x2_ = load %327
+        %x_e64:Mat4x2_ = let %328
+        %330:vec3<f32> = load %a_Normal1
+        %x_e65:vec3<f32> = let %330
+        %332:vec4<f32> = construct %x_e65, 1.0f
+        %333:vec2<f32> = call %Mul2, %x_e64, %332
+        %x_e68:vec2<f32> = let %333
+        %335:vec2<f32> = swizzle %x_e68, xy
+        store %v_TexCoord, %335
         ret
       }
-      %b17 = block {  # false
-        %x_e73:vec2<f32> = load %a_UV1
-        %239:ptr<uniform, Mat4x2_, read> = access %global1, 0u, 0i
-        %x_e79:Mat4x2_ = load %239
-        %x_e80:vec2<f32> = load %a_UV1
-        %242:vec4<f32> = construct %x_e80, 1.0f, 1.0f
-        %x_e84:vec2<f32> = call %Mul2, %x_e79, %242
-        %244:vec2<f32> = swizzle %x_e84, xy
-        store %v_TexCoord, %244
+      $B17: {  # false
+        %336:vec2<f32> = load %a_UV1
+        %x_e73:vec2<f32> = let %336
+        %338:ptr<uniform, Mat4x2_, read> = access %global1, 0u, 0i
+        %339:Mat4x2_ = load %338
+        %x_e79:Mat4x2_ = let %339
+        %341:vec2<f32> = load %a_UV1
+        %x_e80:vec2<f32> = let %341
+        %343:vec4<f32> = construct %x_e80, 1.0f, 1.0f
+        %344:vec2<f32> = call %Mul2, %x_e79, %343
+        %x_e84:vec2<f32> = let %344
+        %346:vec2<f32> = swizzle %x_e84, xy
+        store %v_TexCoord, %346
         ret
       }
     }
     unreachable
   }
 }
-%tint_symbol = @vertex func(%a_Position:vec3<f32> [@location(0)], %a_UV:vec2<f32> [@location(1)], %a_Color:vec4<f32> [@location(2)], %a_Normal:vec3<f32> [@location(3)], %a_PosMtxIdx:f32 [@location(4)]):VertexOutput -> %b18 {
-  %b18 = block {
+%tint_symbol = @vertex func(%a_Position:vec3<f32> [@location(0)], %a_UV:vec2<f32> [@location(1)], %a_Color:vec4<f32> [@location(2)], %a_Normal:vec3<f32> [@location(3)], %a_PosMtxIdx:f32 [@location(4)]):VertexOutput {
+  $B18: {
     store %a_Position1, %a_Position
     store %a_UV1, %a_UV
     store %a_Color1, %a_Color
     store %a_Normal1, %a_Normal
     store %a_PosMtxIdx1, %a_PosMtxIdx
-    %251:void = call %main1
-    %x_e11_3:vec4<f32> = load %v_Color  # %x_e11_3: 'x_e11'
-    %x_e13_1:vec2<f32> = load %v_TexCoord  # %x_e13_1: 'x_e13'
-    %x_e15_3:vec4<f32> = load %gl_Position  # %x_e15_3: 'x_e15'
-    %255:VertexOutput = construct %x_e11_3, %x_e13_1, %x_e15_3
-    ret %255
+    %353:void = call %main1
+    %354:vec4<f32> = load %v_Color
+    %x_e11_3:vec4<f32> = let %354  # %x_e11_3: 'x_e11'
+    %356:vec2<f32> = load %v_TexCoord
+    %x_e13_1:vec2<f32> = let %356  # %x_e13_1: 'x_e13'
+    %358:vec4<f32> = load %gl_Position
+    %x_e15_3:vec4<f32> = let %358  # %x_e15_3: 'x_e15'
+    %360:VertexOutput = construct %x_e11_3, %x_e13_1, %x_e15_3
+    ret %360
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B19: {
+    %362:i32 = convert %value
+    %363:bool = gte %value, -2147483648.0f
+    %364:i32 = select -2147483648i, %362, %363
+    %365:bool = lte %value, 2147483520.0f
+    %366:i32 = select 2147483647i, %364, %365
+    ret %366
   }
 }
 
diff --git a/test/tint/bug/tint/926.wgsl.expected.ir.msl b/test/tint/bug/tint/926.wgsl.expected.ir.msl
index 2a8cef0..4ee0699 100644
--- a/test/tint/bug/tint/926.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/926.wgsl.expected.ir.msl
@@ -1,19 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: DrawIndirectArgs = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: DrawIndirectArgs = struct @align(4) {
   vertexCount:atomic<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %drawOut:ptr<storage, DrawIndirectArgs, read_write> = var @binding_point(0, 5)
   %cubeVerts:ptr<private, u32, read_write> = var, 0u
 }
 
-%computeMain = @compute @workgroup_size(1, 1, 1) func(%global_id:vec3<u32> [@global_invocation_id]):void -> %b2 {
-  %b2 = block {
+%computeMain = @compute @workgroup_size(1, 1, 1) func(%global_id:vec3<u32> [@global_invocation_id]):void {
+  $B2: {
     %5:ptr<storage, atomic<u32>, read_write> = access %drawOut, 0u
     %6:u32 = load %cubeVerts
-    %firstVertex:u32 = atomicAdd %5, %6
+    %7:u32 = atomicAdd %5, %6
+    %firstVertex:u32 = let %7
     ret
   }
 }
diff --git a/test/tint/bug/tint/942.wgsl.expected.ir.msl b/test/tint/bug/tint/942.wgsl.expected.ir.msl
index 3dad2ff..fc90c50 100644
--- a/test/tint/bug/tint/942.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/942.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Params = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Params = struct @align(4) {
   filterDim:u32 @offset(0)
   blockDim:u32 @offset(4)
 }
@@ -9,7 +9,7 @@
   value:u32 @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %samp:ptr<handle, sampler, read> = var @binding_point(0, 0)
   %params:ptr<uniform, Params, read> = var @binding_point(0, 1)
   %inputTex:ptr<handle, texture_2d<f32>, read> = var @binding_point(1, 1)
@@ -18,256 +18,299 @@
   %tile:ptr<workgroup, array<array<vec3<f32>, 256>, 4>, read_write> = var
 }
 
-%tint_symbol = @compute @workgroup_size(64, 1, 1) func(%WorkGroupID:vec3<u32> [@workgroup_id], %LocalInvocationID:vec3<u32> [@local_invocation_id]):void -> %b2 {
-  %b2 = block {
-    %10:ptr<uniform, u32, read> = access %params, 0u
-    %11:u32 = load %10
-    %12:u32 = sub %11, 1u
-    %filterOffset:u32 = div %12, 2u
-    %14:texture_2d<f32> = load %inputTex
-    %dims:vec2<u32> = textureDimensions %14, 0i
-    %16:vec2<u32> = swizzle %WorkGroupID, xy
-    %17:ptr<uniform, u32, read> = access %params, 1u
-    %18:u32 = load %17
-    %19:vec2<u32> = construct %18, 4u
-    %20:vec2<u32> = mul %16, %19
-    %21:vec2<u32> = swizzle %LocalInvocationID, xy
-    %22:vec2<u32> = mul %21, vec2<u32>(4u, 1u)
-    %23:vec2<u32> = add %20, %22
-    %24:vec2<u32> = construct %filterOffset, 0u
-    %baseIndex:vec2<u32> = sub %23, %24
-    loop [i: %b3, b: %b4, c: %b5] {  # loop_1
-      %b3 = block {  # initializer
-        %r:ptr<function, u32, read_write> = var, 0u
-        next_iteration %b4
+%tint_symbol = @compute @workgroup_size(64, 1, 1) func(%WorkGroupID:vec3<u32> [@workgroup_id], %LocalInvocationID:vec3<u32> [@local_invocation_id], %tint_local_index:u32 [@local_invocation_index]):void {
+  $B2: {
+    loop [i: $B3, b: $B4, c: $B5] {  # loop_1
+      $B3: {  # initializer
+        next_iteration %tint_local_index  # -> $B4
       }
-      %b4 = block {  # body
-        %27:u32 = load %r
-        %28:bool = lt %27, 4u
-        if %28 [t: %b6, f: %b7] {  # if_1
-          %b6 = block {  # true
-            exit_if  # if_1
-          }
-          %b7 = block {  # false
+      $B4 (%idx:u32): {  # body
+        %12:bool = gte %idx, 1024u
+        if %12 [t: $B6] {  # if_1
+          $B6: {  # true
             exit_loop  # loop_1
           }
         }
-        loop [i: %b8, b: %b9, c: %b10] {  # loop_2
-          %b8 = block {  # initializer
-            %c:ptr<function, u32, read_write> = var, 0u
-            next_iteration %b9
-          }
-          %b9 = block {  # body
-            %30:u32 = load %c
-            %31:bool = lt %30, 4u
-            if %31 [t: %b11, f: %b12] {  # if_2
-              %b11 = block {  # true
-                exit_if  # if_2
-              }
-              %b12 = block {  # false
-                exit_loop  # loop_2
-              }
-            }
-            %32:u32 = load %c
-            %33:u32 = load %r
-            %34:vec2<u32> = construct %32, %33
-            %35:vec2<u32> = add %baseIndex, %34
-            %loadIndex:ptr<function, vec2<u32>, read_write> = var, %35
-            %37:ptr<uniform, u32, read> = access %flip, 0u
-            %38:u32 = load %37
-            %39:bool = neq %38, 0u
-            if %39 [t: %b13] {  # if_3
-              %b13 = block {  # true
-                %40:vec2<u32> = load %loadIndex
-                %41:vec2<u32> = swizzle %40, yx
-                store %loadIndex, %41
-                exit_if  # if_3
-              }
-            }
-            %42:u32 = load %r
-            %43:u32 = access %LocalInvocationID, 0u
-            %44:u32 = mul 4u, %43
-            %45:u32 = load %c
-            %46:u32 = add %44, %45
-            %47:ptr<workgroup, vec3<f32>, read_write> = access %tile, %42, %46
-            %48:texture_2d<f32> = load %inputTex
-            %49:sampler = load %samp
-            %50:vec2<u32> = load %loadIndex
-            %51:vec2<f32> = convert %50
-            %52:vec2<f32> = add %51, vec2<f32>(0.25f)
-            %53:vec2<f32> = convert %dims
-            %54:vec2<f32> = div %52, %53
-            %55:vec4<f32> = textureSampleLevel %48, %49, %54, 0.0f
-            %56:vec3<f32> = swizzle %55, xyz
-            store %47, %56
-            continue %b10
-          }
-          %b10 = block {  # continuing
-            %57:u32 = load %c
-            %58:u32 = add %57, 1u
-            store %c, %58
-            next_iteration %b9
-          }
-        }
-        continue %b5
+        %13:u32 = mod %idx, 256u
+        %14:u32 = div %idx, 256u
+        %15:ptr<workgroup, vec3<f32>, read_write> = access %tile, %14, %13
+        store %15, vec3<f32>(0.0f)
+        continue  # -> $B5
       }
-      %b5 = block {  # continuing
-        %59:u32 = load %r
-        %60:u32 = add %59, 1u
-        store %r, %60
-        next_iteration %b4
+      $B5: {  # continuing
+        %16:u32 = add %idx, 64u
+        next_iteration %16  # -> $B4
       }
     }
-    %61:void = workgroupBarrier
-    loop [i: %b14, b: %b15, c: %b16] {  # loop_3
-      %b14 = block {  # initializer
-        %r_1:ptr<function, u32, read_write> = var, 0u  # %r_1: 'r'
-        next_iteration %b15
+    %17:void = msl.threadgroup_barrier 4u
+    %18:ptr<uniform, u32, read> = access %params, 0u
+    %19:u32 = load %18
+    %20:u32 = sub %19, 1u
+    %21:u32 = call %tint_div_u32, %20, 2u
+    %filterOffset:u32 = let %21
+    %24:texture_2d<f32> = load %inputTex
+    %25:vec2<u32> = textureDimensions %24, 0i
+    %dims:vec2<u32> = let %25
+    %27:vec2<u32> = swizzle %WorkGroupID, xy
+    %28:ptr<uniform, u32, read> = access %params, 1u
+    %29:u32 = load %28
+    %30:vec2<u32> = construct %29, 4u
+    %31:vec2<u32> = mul %27, %30
+    %32:vec2<u32> = swizzle %LocalInvocationID, xy
+    %33:vec2<u32> = mul %32, vec2<u32>(4u, 1u)
+    %34:vec2<u32> = add %31, %33
+    %35:vec2<u32> = let %34
+    %36:vec2<u32> = construct %filterOffset, 0u
+    %37:vec2<u32> = sub %35, %36
+    %baseIndex:vec2<u32> = let %37
+    loop [i: $B7, b: $B8, c: $B9] {  # loop_2
+      $B7: {  # initializer
+        %r:ptr<function, u32, read_write> = var, 0u
+        next_iteration  # -> $B8
       }
-      %b15 = block {  # body
-        %63:u32 = load %r_1
-        %64:bool = lt %63, 4u
-        if %64 [t: %b17, f: %b18] {  # if_4
-          %b17 = block {  # true
-            exit_if  # if_4
+      $B8: {  # body
+        %40:u32 = load %r
+        %41:bool = lt %40, 4u
+        if %41 [t: $B10, f: $B11] {  # if_2
+          $B10: {  # true
+            exit_if  # if_2
           }
-          %b18 = block {  # false
-            exit_loop  # loop_3
+          $B11: {  # false
+            exit_loop  # loop_2
           }
         }
-        loop [i: %b19, b: %b20, c: %b21] {  # loop_4
-          %b19 = block {  # initializer
-            %c_1:ptr<function, u32, read_write> = var, 0u  # %c_1: 'c'
-            next_iteration %b20
+        loop [i: $B12, b: $B13, c: $B14] {  # loop_3
+          $B12: {  # initializer
+            %c:ptr<function, u32, read_write> = var, 0u
+            next_iteration  # -> $B13
           }
-          %b20 = block {  # body
-            %66:u32 = load %c_1
-            %67:bool = lt %66, 4u
-            if %67 [t: %b22, f: %b23] {  # if_5
-              %b22 = block {  # true
-                exit_if  # if_5
+          $B13: {  # body
+            %43:u32 = load %c
+            %44:bool = lt %43, 4u
+            if %44 [t: $B15, f: $B16] {  # if_3
+              $B15: {  # true
+                exit_if  # if_3
               }
-              %b23 = block {  # false
-                exit_loop  # loop_4
+              $B16: {  # false
+                exit_loop  # loop_3
               }
             }
-            %68:u32 = load %c_1
-            %69:u32 = load %r_1
-            %70:vec2<u32> = construct %68, %69
-            %71:vec2<u32> = add %baseIndex, %70
-            %writeIndex:ptr<function, vec2<u32>, read_write> = var, %71
-            %73:ptr<uniform, u32, read> = access %flip, 0u
-            %74:u32 = load %73
-            %75:bool = neq %74, 0u
-            if %75 [t: %b24] {  # if_6
-              %b24 = block {  # true
-                %76:vec2<u32> = load %writeIndex
-                %77:vec2<u32> = swizzle %76, yx
-                store %writeIndex, %77
+            %45:u32 = load %c
+            %46:u32 = load %r
+            %47:vec2<u32> = construct %45, %46
+            %48:vec2<u32> = add %baseIndex, %47
+            %loadIndex:ptr<function, vec2<u32>, read_write> = var, %48
+            %50:ptr<uniform, u32, read> = access %flip, 0u
+            %51:u32 = load %50
+            %52:bool = neq %51, 0u
+            if %52 [t: $B17] {  # if_4
+              $B17: {  # true
+                %53:vec2<u32> = load %loadIndex
+                %54:vec2<u32> = swizzle %53, yx
+                store %loadIndex, %54
+                exit_if  # if_4
+              }
+            }
+            %55:u32 = load %r
+            %56:u32 = access %LocalInvocationID, 0u
+            %57:u32 = mul 4u, %56
+            %58:u32 = load %c
+            %59:u32 = add %57, %58
+            %60:ptr<workgroup, vec3<f32>, read_write> = access %tile, %55, %59
+            %61:ptr<workgroup, vec3<f32>, read_write> = let %60
+            %62:texture_2d<f32> = load %inputTex
+            %63:texture_2d<f32> = let %62
+            %64:sampler = load %samp
+            %65:sampler = let %64
+            %66:vec2<u32> = load %loadIndex
+            %67:vec2<f32> = convert %66
+            %68:vec2<f32> = add %67, vec2<f32>(0.25f)
+            %69:vec2<f32> = let %68
+            %70:vec2<f32> = convert %dims
+            %71:vec2<f32> = div %69, %70
+            %72:vec4<f32> = textureSampleLevel %63, %65, %71, 0.0f
+            %73:vec3<f32> = swizzle %72, xyz
+            store %61, %73
+            continue  # -> $B14
+          }
+          $B14: {  # continuing
+            %74:u32 = load %c
+            %75:u32 = add %74, 1u
+            store %c, %75
+            next_iteration  # -> $B13
+          }
+        }
+        continue  # -> $B9
+      }
+      $B9: {  # continuing
+        %76:u32 = load %r
+        %77:u32 = add %76, 1u
+        store %r, %77
+        next_iteration  # -> $B8
+      }
+    }
+    %78:void = msl.threadgroup_barrier 4u
+    loop [i: $B18, b: $B19, c: $B20] {  # loop_4
+      $B18: {  # initializer
+        %r_1:ptr<function, u32, read_write> = var, 0u  # %r_1: 'r'
+        next_iteration  # -> $B19
+      }
+      $B19: {  # body
+        %80:u32 = load %r_1
+        %81:bool = lt %80, 4u
+        if %81 [t: $B21, f: $B22] {  # if_5
+          $B21: {  # true
+            exit_if  # if_5
+          }
+          $B22: {  # false
+            exit_loop  # loop_4
+          }
+        }
+        loop [i: $B23, b: $B24, c: $B25] {  # loop_5
+          $B23: {  # initializer
+            %c_1:ptr<function, u32, read_write> = var, 0u  # %c_1: 'c'
+            next_iteration  # -> $B24
+          }
+          $B24: {  # body
+            %83:u32 = load %c_1
+            %84:bool = lt %83, 4u
+            if %84 [t: $B26, f: $B27] {  # if_6
+              $B26: {  # true
                 exit_if  # if_6
               }
-            }
-            %78:u32 = access %LocalInvocationID, 0u
-            %79:u32 = mul 4u, %78
-            %80:u32 = load %c_1
-            %center:u32 = add %79, %80
-            %82:bool = gte %center, %filterOffset
-            %83:bool = if %82 [t: %b25, f: %b26] {  # if_7
-              %b25 = block {  # true
-                %84:u32 = sub 256u, %filterOffset
-                %85:bool = lt %center, %84
-                exit_if %85  # if_7
-              }
-              %b26 = block {  # false
-                exit_if false  # if_7
+              $B27: {  # false
+                exit_loop  # loop_5
               }
             }
-            %86:bool = if %83 [t: %b27, f: %b28] {  # if_8
-              %b27 = block {  # true
-                %87:vec2<u32> = load %writeIndex
-                %88:vec2<bool> = lt %87, %dims
-                %89:bool = all %88
-                exit_if %89  # if_8
+            %85:u32 = load %c_1
+            %86:u32 = load %r_1
+            %87:vec2<u32> = construct %85, %86
+            %88:vec2<u32> = add %baseIndex, %87
+            %writeIndex:ptr<function, vec2<u32>, read_write> = var, %88
+            %90:ptr<uniform, u32, read> = access %flip, 0u
+            %91:u32 = load %90
+            %92:bool = neq %91, 0u
+            if %92 [t: $B28] {  # if_7
+              $B28: {  # true
+                %93:vec2<u32> = load %writeIndex
+                %94:vec2<u32> = swizzle %93, yx
+                store %writeIndex, %94
+                exit_if  # if_7
               }
-              %b28 = block {  # false
+            }
+            %95:u32 = access %LocalInvocationID, 0u
+            %96:u32 = mul 4u, %95
+            %97:u32 = load %c_1
+            %98:u32 = add %96, %97
+            %center:u32 = let %98
+            %100:bool = gte %center, %filterOffset
+            %101:bool = if %100 [t: $B29, f: $B30] {  # if_8
+              $B29: {  # true
+                %102:u32 = sub 256u, %filterOffset
+                %103:bool = lt %center, %102
+                exit_if %103  # if_8
+              }
+              $B30: {  # false
                 exit_if false  # if_8
               }
             }
-            if %86 [t: %b29] {  # if_9
-              %b29 = block {  # true
-                %acc:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(0.0f)
-                loop [i: %b30, b: %b31, c: %b32] {  # loop_5
-                  %b30 = block {  # initializer
-                    %f:ptr<function, u32, read_write> = var, 0u
-                    next_iteration %b31
-                  }
-                  %b31 = block {  # body
-                    %92:u32 = load %f
-                    %93:ptr<uniform, u32, read> = access %params, 0u
-                    %94:u32 = load %93
-                    %95:bool = lt %92, %94
-                    if %95 [t: %b33, f: %b34] {  # if_10
-                      %b33 = block {  # true
-                        exit_if  # if_10
-                      }
-                      %b34 = block {  # false
-                        exit_loop  # loop_5
-                      }
-                    }
-                    %96:u32 = load %f
-                    %97:u32 = add %center, %96
-                    %98:u32 = sub %97, %filterOffset
-                    %i:ptr<function, u32, read_write> = var, %98
-                    %100:vec3<f32> = load %acc
-                    %101:ptr<uniform, u32, read> = access %params, 0u
-                    %102:u32 = load %101
-                    %103:f32 = convert %102
-                    %104:f32 = div 1.0f, %103
-                    %105:u32 = load %r_1
-                    %106:u32 = load %i
-                    %107:ptr<workgroup, vec3<f32>, read_write> = access %tile, %105, %106
-                    %108:vec3<f32> = load %107
-                    %109:vec3<f32> = mul %104, %108
-                    %110:vec3<f32> = add %100, %109
-                    store %acc, %110
-                    continue %b32
-                  }
-                  %b32 = block {  # continuing
-                    %111:u32 = load %f
-                    %112:u32 = add %111, 1u
-                    store %f, %112
-                    next_iteration %b31
-                  }
-                }
-                %113:texture_storage_2d<rgba8unorm, write> = load %outputTex
-                %114:vec2<u32> = load %writeIndex
-                %115:vec3<f32> = load %acc
-                %116:vec4<f32> = construct %115, 1.0f
-                %117:void = textureStore %113, %114, %116
-                exit_if  # if_9
+            %104:bool = if %101 [t: $B31, f: $B32] {  # if_9
+              $B31: {  # true
+                %105:vec2<u32> = load %writeIndex
+                %106:vec2<bool> = lt %105, %dims
+                %107:bool = all %106
+                exit_if %107  # if_9
+              }
+              $B32: {  # false
+                exit_if false  # if_9
               }
             }
-            continue %b21
+            if %104 [t: $B33] {  # if_10
+              $B33: {  # true
+                %acc:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(0.0f)
+                loop [i: $B34, b: $B35, c: $B36] {  # loop_6
+                  $B34: {  # initializer
+                    %f:ptr<function, u32, read_write> = var, 0u
+                    next_iteration  # -> $B35
+                  }
+                  $B35: {  # body
+                    %110:u32 = load %f
+                    %111:ptr<uniform, u32, read> = access %params, 0u
+                    %112:u32 = load %111
+                    %113:bool = lt %110, %112
+                    if %113 [t: $B37, f: $B38] {  # if_11
+                      $B37: {  # true
+                        exit_if  # if_11
+                      }
+                      $B38: {  # false
+                        exit_loop  # loop_6
+                      }
+                    }
+                    %114:u32 = load %f
+                    %115:u32 = add %center, %114
+                    %116:u32 = sub %115, %filterOffset
+                    %i:ptr<function, u32, read_write> = var, %116
+                    %118:vec3<f32> = load %acc
+                    %119:vec3<f32> = let %118
+                    %120:ptr<uniform, u32, read> = access %params, 0u
+                    %121:u32 = load %120
+                    %122:f32 = convert %121
+                    %123:f32 = div 1.0f, %122
+                    %124:u32 = load %r_1
+                    %125:u32 = load %i
+                    %126:ptr<workgroup, vec3<f32>, read_write> = access %tile, %124, %125
+                    %127:vec3<f32> = load %126
+                    %128:vec3<f32> = mul %123, %127
+                    %129:vec3<f32> = add %119, %128
+                    store %acc, %129
+                    continue  # -> $B36
+                  }
+                  $B36: {  # continuing
+                    %130:u32 = load %f
+                    %131:u32 = add %130, 1u
+                    store %f, %131
+                    next_iteration  # -> $B35
+                  }
+                }
+                %132:texture_storage_2d<rgba8unorm, write> = load %outputTex
+                %133:texture_storage_2d<rgba8unorm, write> = let %132
+                %134:vec2<u32> = load %writeIndex
+                %135:vec2<u32> = let %134
+                %136:vec3<f32> = load %acc
+                %137:vec4<f32> = construct %136, 1.0f
+                %138:void = textureStore %133, %135, %137
+                exit_if  # if_10
+              }
+            }
+            continue  # -> $B25
           }
-          %b21 = block {  # continuing
-            %118:u32 = load %c_1
-            %119:u32 = add %118, 1u
-            store %c_1, %119
-            next_iteration %b20
+          $B25: {  # continuing
+            %139:u32 = load %c_1
+            %140:u32 = add %139, 1u
+            store %c_1, %140
+            next_iteration  # -> $B24
           }
         }
-        continue %b16
+        continue  # -> $B20
       }
-      %b16 = block {  # continuing
-        %120:u32 = load %r_1
-        %121:u32 = add %120, 1u
-        store %r_1, %121
-        next_iteration %b15
+      $B20: {  # continuing
+        %141:u32 = load %r_1
+        %142:u32 = add %141, 1u
+        store %r_1, %142
+        next_iteration  # -> $B19
       }
     }
     ret
   }
 }
+%tint_div_u32 = func(%lhs:u32, %rhs:u32):u32 {
+  $B39: {
+    %145:bool = eq %rhs, 0u
+    %146:u32 = select %rhs, 1u, %145
+    %147:u32 = div %lhs, %146
+    ret %147
+  }
+}
 
 unhandled variable address space
 ********************************************************************
diff --git a/test/tint/bug/tint/948.wgsl.expected.ir.msl b/test/tint/bug/tint/948.wgsl.expected.ir.msl
index d3af39e..9dfc9b8 100644
--- a/test/tint/bug/tint/948.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/948.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: LeftOver = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: LeftOver = struct @align(16) {
   time:f32 @offset(0)
   padding:u32 @offset(4)
   worldViewProjection:mat4x4<f32> @offset(16)
@@ -16,7 +16,7 @@
   glFragColor_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_20:ptr<uniform, LeftOver, read> = var @binding_point(2, 9)
   %frameMapTexture:ptr<handle, texture_2d<f32>, read> = var @binding_point(2, 3)
   %frameMapSampler:ptr<handle, sampler, read> = var @binding_point(2, 2)
@@ -37,50 +37,66 @@
   %vUV:ptr<private, vec2<f32>, read_write> = var
 }
 
-%getFrameData_f1_ = func(%frameID:ptr<function, f32, read_write>):mat4x4<f32> -> %b2 {
-  %b2 = block {
+%getFrameData_f1_ = func(%frameID:ptr<function, f32, read_write>):mat4x4<f32> {
+  $B2: {
     %fX:ptr<function, f32, read_write> = var
-    %x_15:f32 = load %frameID
-    %23:ptr<uniform, f32, read> = access %x_20, 7u
-    %x_25:f32 = load %23
-    %25:f32 = div %x_15, %x_25
-    store %fX, %25
-    %x_37:f32 = load %fX
-    %27:texture_2d<f32> = load %frameMapTexture
-    %28:sampler = load %frameMapSampler
-    %29:vec2<f32> = construct %x_37, 0.0f
-    %x_40:vec4<f32> = textureSampleBias %27, %28, %29, 0.0f
-    %x_44:f32 = load %fX
-    %32:texture_2d<f32> = load %frameMapTexture
-    %33:sampler = load %frameMapSampler
-    %34:vec2<f32> = construct %x_44, 0.25f
-    %x_47:vec4<f32> = textureSampleBias %32, %33, %34, 0.0f
-    %x_51:f32 = load %fX
-    %37:texture_2d<f32> = load %frameMapTexture
-    %38:sampler = load %frameMapSampler
-    %39:vec2<f32> = construct %x_51, 0.5f
-    %x_54:vec4<f32> = textureSampleBias %37, %38, %39, 0.0f
-    %41:f32 = access %x_40, 0u
-    %42:f32 = access %x_40, 1u
-    %43:f32 = access %x_40, 2u
-    %44:f32 = access %x_40, 3u
-    %45:vec4<f32> = construct %41, %42, %43, %44
-    %46:f32 = access %x_47, 0u
-    %47:f32 = access %x_47, 1u
-    %48:f32 = access %x_47, 2u
-    %49:f32 = access %x_47, 3u
-    %50:vec4<f32> = construct %46, %47, %48, %49
-    %51:f32 = access %x_54, 0u
-    %52:f32 = access %x_54, 1u
-    %53:f32 = access %x_54, 2u
-    %54:f32 = access %x_54, 3u
-    %55:vec4<f32> = construct %51, %52, %53, %54
-    %56:mat4x4<f32> = construct %45, %50, %55, vec4<f32>(0.0f)
-    ret %56
+    %22:f32 = load %frameID
+    %x_15:f32 = let %22
+    %24:ptr<uniform, f32, read> = access %x_20, 7u
+    %25:f32 = load %24
+    %x_25:f32 = let %25
+    %27:f32 = div %x_15, %x_25
+    store %fX, %27
+    %28:f32 = load %fX
+    %x_37:f32 = let %28
+    %30:texture_2d<f32> = load %frameMapTexture
+    %31:texture_2d<f32> = let %30
+    %32:sampler = load %frameMapSampler
+    %33:sampler = let %32
+    %34:vec2<f32> = construct %x_37, 0.0f
+    %35:vec4<f32> = textureSampleBias %31, %33, %34, 0.0f
+    %x_40:vec4<f32> = let %35
+    %37:f32 = load %fX
+    %x_44:f32 = let %37
+    %39:texture_2d<f32> = load %frameMapTexture
+    %40:texture_2d<f32> = let %39
+    %41:sampler = load %frameMapSampler
+    %42:sampler = let %41
+    %43:vec2<f32> = construct %x_44, 0.25f
+    %44:vec4<f32> = textureSampleBias %40, %42, %43, 0.0f
+    %x_47:vec4<f32> = let %44
+    %46:f32 = load %fX
+    %x_51:f32 = let %46
+    %48:texture_2d<f32> = load %frameMapTexture
+    %49:texture_2d<f32> = let %48
+    %50:sampler = load %frameMapSampler
+    %51:sampler = let %50
+    %52:vec2<f32> = construct %x_51, 0.5f
+    %53:vec4<f32> = textureSampleBias %49, %51, %52, 0.0f
+    %x_54:vec4<f32> = let %53
+    %55:f32 = access %x_40, 0u
+    %56:f32 = access %x_40, 1u
+    %57:f32 = access %x_40, 2u
+    %58:f32 = access %x_40, 3u
+    %59:vec4<f32> = construct %55, %56, %57, %58
+    %60:vec4<f32> = let %59
+    %61:f32 = access %x_47, 0u
+    %62:f32 = access %x_47, 1u
+    %63:f32 = access %x_47, 2u
+    %64:f32 = access %x_47, 3u
+    %65:vec4<f32> = construct %61, %62, %63, %64
+    %66:vec4<f32> = let %65
+    %67:f32 = access %x_54, 0u
+    %68:f32 = access %x_54, 1u
+    %69:f32 = access %x_54, 2u
+    %70:f32 = access %x_54, 3u
+    %71:vec4<f32> = construct %67, %68, %69, %70
+    %72:mat4x4<f32> = construct %60, %66, %71, vec4<f32>(0.0f)
+    ret %72
   }
 }
-%main_1 = func():void -> %b3 {
-  %b3 = block {
+%main_1 = func():void {
+  $B3: {
     %color:ptr<function, vec4<f32>, read_write> = var
     %tileUV:ptr<function, vec2<f32>, read_write> = var
     %tileID:ptr<function, vec2<f32>, read_write> = var
@@ -100,275 +116,340 @@
     %alpha:ptr<function, f32, read_write> = var
     %mixed:ptr<function, vec3<f32>, read_write> = var
     store %color, vec4<f32>(0.0f)
-    %x_86:vec2<f32> = load %tUV
-    %77:vec2<f32> = fract %x_86
-    store %tileUV, %77
-    %x_91:f32 = load_vector_element %tileUV, 1u
-    %79:f32 = sub 1.0f, %x_91
-    store_vector_element %tileUV, 1u, %79
-    %x_95:vec2<f32> = load %tUV
-    %81:vec2<f32> = floor %x_95
-    store %tileID, %81
-    %82:ptr<uniform, vec2<f32>, read> = access %x_20, 5u
-    %x_101:vec2<f32> = load %82
-    %84:vec2<f32> = div vec2<f32>(1.0f), %x_101
-    store %sheetUnits, %84
-    %85:ptr<uniform, f32, read> = access %x_20, 7u
-    %x_106:f32 = load %85
-    %87:f32 = div 1.0f, %x_106
-    store %spriteUnits, %87
-    %88:ptr<uniform, vec2<f32>, read> = access %x_20, 4u
-    %x_111:vec2<f32> = load %88
-    %90:vec2<f32> = div vec2<f32>(1.0f), %x_111
-    store %stageUnits, %90
+    %92:vec2<f32> = load %tUV
+    %x_86:vec2<f32> = let %92
+    %94:vec2<f32> = fract %x_86
+    store %tileUV, %94
+    %95:f32 = load_vector_element %tileUV, 1u
+    %x_91:f32 = let %95
+    %97:f32 = sub 1.0f, %x_91
+    store_vector_element %tileUV, 1u, %97
+    %98:vec2<f32> = load %tUV
+    %x_95:vec2<f32> = let %98
+    %100:vec2<f32> = floor %x_95
+    store %tileID, %100
+    %101:ptr<uniform, vec2<f32>, read> = access %x_20, 5u
+    %102:vec2<f32> = load %101
+    %x_101:vec2<f32> = let %102
+    %104:vec2<f32> = div vec2<f32>(1.0f), %x_101
+    store %sheetUnits, %104
+    %105:ptr<uniform, f32, read> = access %x_20, 7u
+    %106:f32 = load %105
+    %x_106:f32 = let %106
+    %108:f32 = div 1.0f, %x_106
+    store %spriteUnits, %108
+    %109:ptr<uniform, vec2<f32>, read> = access %x_20, 4u
+    %110:vec2<f32> = load %109
+    %x_111:vec2<f32> = let %110
+    %112:vec2<f32> = div vec2<f32>(1.0f), %x_111
+    store %stageUnits, %112
     store %i, 0i
-    loop [b: %b4, c: %b5] {  # loop_1
-      %b4 = block {  # body
-        %x_122:i32 = load %i
-        %92:bool = lt %x_122, 2i
-        if %92 [t: %b6, f: %b7] {  # if_1
-          %b6 = block {  # true
+    loop [b: $B4, c: $B5] {  # loop_1
+      $B4: {  # body
+        %113:i32 = load %i
+        %x_122:i32 = let %113
+        %115:bool = lt %x_122, 2i
+        if %115 [t: $B6, f: $B7] {  # if_1
+          $B6: {  # true
             exit_if  # if_1
           }
-          %b7 = block {  # false
+          $B7: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_126:i32 = load %i
-        switch %x_126 [c: (1i, %b8), c: (0i, %b9), c: (default, %b10)] {  # switch_1
-          %b8 = block {  # case
-            %x_150:vec2<f32> = load %tileID
-            %95:ptr<uniform, vec2<f32>, read> = access %x_20, 4u
-            %x_154:vec2<f32> = load %95
-            %97:texture_2d<f32> = load %tileMapsTexture1
-            %98:sampler = load %tileMapsSampler
-            %99:vec2<f32> = add %x_150, vec2<f32>(0.5f)
-            %100:vec2<f32> = div %99, %x_154
-            %x_156:vec4<f32> = textureSampleBias %97, %98, %100, 0.0f
-            %102:f32 = access %x_156, 0u
-            store %frameID_1, %102
+        %116:i32 = load %i
+        %x_126:i32 = let %116
+        switch %x_126 [c: (1i, $B8), c: (0i, $B9), c: (default, $B10)] {  # switch_1
+          $B8: {  # case
+            %118:vec2<f32> = load %tileID
+            %x_150:vec2<f32> = let %118
+            %120:ptr<uniform, vec2<f32>, read> = access %x_20, 4u
+            %121:vec2<f32> = load %120
+            %x_154:vec2<f32> = let %121
+            %123:texture_2d<f32> = load %tileMapsTexture1
+            %124:sampler = load %tileMapsSampler
+            %125:vec2<f32> = add %x_150, vec2<f32>(0.5f)
+            %126:vec2<f32> = div %125, %x_154
+            %127:vec4<f32> = textureSampleBias %123, %124, %126, 0.0f
+            %x_156:vec4<f32> = let %127
+            %129:f32 = access %x_156, 0u
+            store %frameID_1, %129
             exit_switch  # switch_1
           }
-          %b9 = block {  # case
-            %x_136:vec2<f32> = load %tileID
-            %104:ptr<uniform, vec2<f32>, read> = access %x_20, 4u
-            %x_140:vec2<f32> = load %104
-            %106:texture_2d<f32> = load %tileMapsTexture0
-            %107:sampler = load %tileMapsSampler
-            %108:vec2<f32> = add %x_136, vec2<f32>(0.5f)
-            %109:vec2<f32> = div %108, %x_140
-            %x_142:vec4<f32> = textureSampleBias %106, %107, %109, 0.0f
-            %111:f32 = access %x_142, 0u
-            store %frameID_1, %111
+          $B9: {  # case
+            %130:vec2<f32> = load %tileID
+            %x_136:vec2<f32> = let %130
+            %132:ptr<uniform, vec2<f32>, read> = access %x_20, 4u
+            %133:vec2<f32> = load %132
+            %x_140:vec2<f32> = let %133
+            %135:texture_2d<f32> = load %tileMapsTexture0
+            %136:sampler = load %tileMapsSampler
+            %137:vec2<f32> = add %x_136, vec2<f32>(0.5f)
+            %138:vec2<f32> = div %137, %x_140
+            %139:vec4<f32> = textureSampleBias %135, %136, %138, 0.0f
+            %x_142:vec4<f32> = let %139
+            %141:f32 = access %x_142, 0u
+            store %frameID_1, %141
             exit_switch  # switch_1
           }
-          %b10 = block {  # case
+          $B10: {  # case
             exit_switch  # switch_1
           }
         }
-        %x_166:f32 = load %frameID_1
-        %113:ptr<uniform, f32, read> = access %x_20, 7u
-        %x_169:f32 = load %113
-        %115:texture_2d<f32> = load %animationMapTexture
-        %116:sampler = load %animationMapSampler
-        %117:f32 = add %x_166, 0.5f
-        %118:f32 = div %117, %x_169
-        %119:vec2<f32> = construct %118, 0.0f
-        %x_172:vec4<f32> = textureSampleBias %115, %116, %119, 0.0f
+        %142:f32 = load %frameID_1
+        %x_166:f32 = let %142
+        %144:ptr<uniform, f32, read> = access %x_20, 7u
+        %145:f32 = load %144
+        %x_169:f32 = let %145
+        %147:texture_2d<f32> = load %animationMapTexture
+        %148:texture_2d<f32> = let %147
+        %149:sampler = load %animationMapSampler
+        %150:sampler = let %149
+        %151:f32 = add %x_166, 0.5f
+        %152:f32 = div %151, %x_169
+        %153:vec2<f32> = construct %152, 0.0f
+        %154:vec4<f32> = textureSampleBias %148, %150, %153, 0.0f
+        %x_172:vec4<f32> = let %154
         store %animationData, %x_172
-        %x_174:f32 = load_vector_element %animationData, 1u
-        %122:bool = gt %x_174, 0.0f
-        if %122 [t: %b11] {  # if_2
-          %b11 = block {  # true
-            %123:ptr<uniform, f32, read> = access %x_20, 0u
-            %x_181:f32 = load %123
-            %x_184:f32 = load_vector_element %animationData, 2u
-            %126:f32 = mul %x_181, %x_184
-            %127:f32 = mod %126, 1.0f
-            store %mt, %127
+        %156:f32 = load_vector_element %animationData, 1u
+        %x_174:f32 = let %156
+        %158:bool = gt %x_174, 0.0f
+        if %158 [t: $B11] {  # if_2
+          $B11: {  # true
+            %159:ptr<uniform, f32, read> = access %x_20, 0u
+            %160:f32 = load %159
+            %x_181:f32 = let %160
+            %162:f32 = load_vector_element %animationData, 2u
+            %x_184:f32 = let %162
+            %164:f32 = mul %x_181, %x_184
+            %165:f32 = mod %164, 1.0f
+            store %mt, %165
             store %f, 0.0f
-            loop [b: %b12, c: %b13] {  # loop_2
-              %b12 = block {  # body
-                %x_193:f32 = load %f
-                %129:bool = lt %x_193, 8.0f
-                if %129 [t: %b14, f: %b15] {  # if_3
-                  %b14 = block {  # true
+            loop [b: $B12, c: $B13] {  # loop_2
+              $B12: {  # body
+                %166:f32 = load %f
+                %x_193:f32 = let %166
+                %168:bool = lt %x_193, 8.0f
+                if %168 [t: $B14, f: $B15] {  # if_3
+                  $B14: {  # true
                     exit_if  # if_3
                   }
-                  %b15 = block {  # false
+                  $B15: {  # false
                     exit_loop  # loop_2
                   }
                 }
-                %x_197:f32 = load_vector_element %animationData, 1u
-                %x_198:f32 = load %mt
-                %132:bool = gt %x_197, %x_198
-                if %132 [t: %b16] {  # if_4
-                  %b16 = block {  # true
-                    %x_203:f32 = load_vector_element %animationData, 0u
+                %169:f32 = load_vector_element %animationData, 1u
+                %x_197:f32 = let %169
+                %171:f32 = load %mt
+                %x_198:f32 = let %171
+                %173:bool = gt %x_197, %x_198
+                if %173 [t: $B16] {  # if_4
+                  $B16: {  # true
+                    %174:f32 = load_vector_element %animationData, 0u
+                    %x_203:f32 = let %174
                     store %frameID_1, %x_203
                     exit_loop  # loop_2
                   }
                 }
-                %x_208:f32 = load %frameID_1
-                %135:ptr<uniform, f32, read> = access %x_20, 7u
-                %x_211:f32 = load %135
-                %x_214:f32 = load %f
+                %176:f32 = load %frameID_1
+                %x_208:f32 = let %176
+                %178:ptr<uniform, f32, read> = access %x_20, 7u
+                %179:f32 = load %178
+                %x_211:f32 = let %179
+                %181:f32 = load %f
+                %x_214:f32 = let %181
                 %x_217:vec4<f32> = let vec4<f32>(0.0f)
                 store %animationData, %x_217
-                continue %b13
+                continue  # -> $B13
               }
-              %b13 = block {  # continuing
-                %x_218:f32 = load %f
-                %140:f32 = add %x_218, 1.0f
-                store %f, %140
-                next_iteration %b12
+              $B13: {  # continuing
+                %184:f32 = load %f
+                %x_218:f32 = let %184
+                %186:f32 = add %x_218, 1.0f
+                store %f, %186
+                next_iteration  # -> $B12
               }
             }
             exit_if  # if_2
           }
         }
-        %x_222:f32 = load %frameID_1
-        %142:f32 = add %x_222, 0.5f
-        store %param, %142
-        %x_225:mat4x4<f32> = call %getFrameData_f1_, %param
+        %187:f32 = load %frameID_1
+        %x_222:f32 = let %187
+        %189:f32 = add %x_222, 0.5f
+        store %param, %189
+        %190:mat4x4<f32> = call %getFrameData_f1_, %param
+        %x_225:mat4x4<f32> = let %190
         store %frameData, %x_225
-        %144:ptr<function, vec4<f32>, read_write> = access %frameData, 0i
-        %x_228:vec4<f32> = load %144
-        %146:ptr<uniform, vec2<f32>, read> = access %x_20, 5u
-        %x_231:vec2<f32> = load %146
-        %148:f32 = access %x_228, 3u
-        %149:f32 = access %x_228, 2u
-        %150:vec2<f32> = construct %148, %149
-        %151:vec2<f32> = div %150, %x_231
-        store %frameSize, %151
-        %152:ptr<function, vec4<f32>, read_write> = access %frameData, 0i
-        %x_235:vec4<f32> = load %152
-        %x_237:vec2<f32> = load %sheetUnits
-        %155:f32 = access %x_235, 0u
-        %156:f32 = access %x_235, 1u
-        %157:vec2<f32> = construct %155, %156
-        %158:vec2<f32> = mul %157, %x_237
-        store %offset_1, %158
-        %159:ptr<function, vec4<f32>, read_write> = access %frameData, 2i
-        %x_241:vec4<f32> = load %159
-        %161:ptr<function, vec4<f32>, read_write> = access %frameData, 0i
-        %x_244:vec4<f32> = load %161
-        %163:f32 = access %x_241, 0u
-        %164:f32 = access %x_241, 1u
-        %165:vec2<f32> = construct %163, %164
-        %166:f32 = access %x_244, 3u
-        %167:f32 = access %x_244, 2u
-        %168:vec2<f32> = construct %166, %167
-        %169:vec2<f32> = div %165, %168
-        store %ratio, %169
-        %170:ptr<function, vec4<f32>, read_write> = access %frameData, 2i
-        %x_248:f32 = load_vector_element %170, 2u
-        %172:bool = eq %x_248, 1.0f
-        if %172 [t: %b17] {  # if_5
-          %b17 = block {  # true
-            %x_252:vec2<f32> = load %tileUV
-            %174:f32 = access %x_252, 1u
-            %175:f32 = access %x_252, 0u
-            %176:vec2<f32> = construct %174, %175
-            store %tileUV, %176
+        %192:ptr<function, vec4<f32>, read_write> = access %frameData, 0i
+        %193:vec4<f32> = load %192
+        %x_228:vec4<f32> = let %193
+        %195:ptr<uniform, vec2<f32>, read> = access %x_20, 5u
+        %196:vec2<f32> = load %195
+        %x_231:vec2<f32> = let %196
+        %198:f32 = access %x_228, 3u
+        %199:f32 = access %x_228, 2u
+        %200:vec2<f32> = construct %198, %199
+        %201:vec2<f32> = div %200, %x_231
+        store %frameSize, %201
+        %202:ptr<function, vec4<f32>, read_write> = access %frameData, 0i
+        %203:vec4<f32> = load %202
+        %x_235:vec4<f32> = let %203
+        %205:vec2<f32> = load %sheetUnits
+        %x_237:vec2<f32> = let %205
+        %207:f32 = access %x_235, 0u
+        %208:f32 = access %x_235, 1u
+        %209:vec2<f32> = construct %207, %208
+        %210:vec2<f32> = mul %209, %x_237
+        store %offset_1, %210
+        %211:ptr<function, vec4<f32>, read_write> = access %frameData, 2i
+        %212:vec4<f32> = load %211
+        %x_241:vec4<f32> = let %212
+        %214:ptr<function, vec4<f32>, read_write> = access %frameData, 0i
+        %215:vec4<f32> = load %214
+        %x_244:vec4<f32> = let %215
+        %217:f32 = access %x_241, 0u
+        %218:f32 = access %x_241, 1u
+        %219:vec2<f32> = construct %217, %218
+        %220:vec2<f32> = let %219
+        %221:f32 = access %x_244, 3u
+        %222:f32 = access %x_244, 2u
+        %223:vec2<f32> = construct %221, %222
+        %224:vec2<f32> = div %220, %223
+        store %ratio, %224
+        %225:ptr<function, vec4<f32>, read_write> = access %frameData, 2i
+        %226:f32 = load_vector_element %225, 2u
+        %x_248:f32 = let %226
+        %228:bool = eq %x_248, 1.0f
+        if %228 [t: $B17] {  # if_5
+          $B17: {  # true
+            %229:vec2<f32> = load %tileUV
+            %x_252:vec2<f32> = let %229
+            %231:f32 = access %x_252, 1u
+            %232:f32 = access %x_252, 0u
+            %233:vec2<f32> = construct %231, %232
+            store %tileUV, %233
             exit_if  # if_5
           }
         }
-        %x_254:i32 = load %i
-        %178:bool = eq %x_254, 0i
-        if %178 [t: %b18, f: %b19] {  # if_6
-          %b18 = block {  # true
-            %x_263:vec2<f32> = load %tileUV
-            %x_264:vec2<f32> = load %frameSize
-            %x_266:vec2<f32> = load %offset_1
-            %182:texture_2d<f32> = load %spriteSheetTexture
-            %183:sampler = load %spriteSheetSampler
-            %184:vec2<f32> = mul %x_263, %x_264
-            %185:vec2<f32> = add %184, %x_266
-            %x_268:vec4<f32> = textureSample %182, %183, %185
+        %234:i32 = load %i
+        %x_254:i32 = let %234
+        %236:bool = eq %x_254, 0i
+        if %236 [t: $B18, f: $B19] {  # if_6
+          $B18: {  # true
+            %237:vec2<f32> = load %tileUV
+            %x_263:vec2<f32> = let %237
+            %239:vec2<f32> = load %frameSize
+            %x_264:vec2<f32> = let %239
+            %241:vec2<f32> = load %offset_1
+            %x_266:vec2<f32> = let %241
+            %243:texture_2d<f32> = load %spriteSheetTexture
+            %244:sampler = load %spriteSheetSampler
+            %245:vec2<f32> = mul %x_263, %x_264
+            %246:vec2<f32> = add %245, %x_266
+            %247:vec4<f32> = textureSample %243, %244, %246
+            %x_268:vec4<f32> = let %247
             store %color, %x_268
             exit_if  # if_6
           }
-          %b19 = block {  # false
-            %x_274:vec2<f32> = load %tileUV
-            %x_275:vec2<f32> = load %frameSize
-            %x_277:vec2<f32> = load %offset_1
-            %190:texture_2d<f32> = load %spriteSheetTexture
-            %191:sampler = load %spriteSheetSampler
-            %192:vec2<f32> = mul %x_274, %x_275
-            %193:vec2<f32> = add %192, %x_277
-            %x_279:vec4<f32> = textureSample %190, %191, %193
+          $B19: {  # false
+            %249:vec2<f32> = load %tileUV
+            %x_274:vec2<f32> = let %249
+            %251:vec2<f32> = load %frameSize
+            %x_275:vec2<f32> = let %251
+            %253:vec2<f32> = load %offset_1
+            %x_277:vec2<f32> = let %253
+            %255:texture_2d<f32> = load %spriteSheetTexture
+            %256:sampler = load %spriteSheetSampler
+            %257:vec2<f32> = mul %x_274, %x_275
+            %258:vec2<f32> = add %257, %x_277
+            %259:vec4<f32> = textureSample %255, %256, %258
+            %x_279:vec4<f32> = let %259
             store %nc, %x_279
-            %x_283:f32 = load_vector_element %color, 3u
-            %x_285:f32 = load_vector_element %nc, 3u
-            %197:f32 = add %x_283, %x_285
-            %198:f32 = min %197, 1.0f
-            store %alpha, %198
-            %x_290:vec4<f32> = load %color
-            %x_292:vec4<f32> = load %nc
-            %x_295:f32 = load_vector_element %nc, 3u
-            %202:f32 = access %x_290, 0u
-            %203:f32 = access %x_290, 1u
-            %204:f32 = access %x_290, 2u
-            %205:vec3<f32> = construct %202, %203, %204
-            %206:f32 = access %x_292, 0u
-            %207:f32 = access %x_292, 1u
-            %208:f32 = access %x_292, 2u
-            %209:vec3<f32> = construct %206, %207, %208
-            %210:vec3<f32> = construct %x_295, %x_295, %x_295
-            %211:vec3<f32> = mix %205, %209, %210
-            store %mixed, %211
-            %x_298:vec3<f32> = load %mixed
-            %x_299:f32 = load %alpha
-            %214:f32 = access %x_298, 0u
-            %215:f32 = access %x_298, 1u
-            %216:f32 = access %x_298, 2u
-            %217:vec4<f32> = construct %214, %215, %216, %x_299
-            store %color, %217
+            %261:f32 = load_vector_element %color, 3u
+            %x_283:f32 = let %261
+            %263:f32 = load_vector_element %nc, 3u
+            %x_285:f32 = let %263
+            %265:f32 = add %x_283, %x_285
+            %266:f32 = min %265, 1.0f
+            store %alpha, %266
+            %267:vec4<f32> = load %color
+            %x_290:vec4<f32> = let %267
+            %269:vec4<f32> = load %nc
+            %x_292:vec4<f32> = let %269
+            %271:f32 = load_vector_element %nc, 3u
+            %x_295:f32 = let %271
+            %273:f32 = access %x_290, 0u
+            %274:f32 = access %x_290, 1u
+            %275:f32 = access %x_290, 2u
+            %276:vec3<f32> = construct %273, %274, %275
+            %277:vec3<f32> = let %276
+            %278:f32 = access %x_292, 0u
+            %279:f32 = access %x_292, 1u
+            %280:f32 = access %x_292, 2u
+            %281:vec3<f32> = construct %278, %279, %280
+            %282:vec3<f32> = let %281
+            %283:vec3<f32> = construct %x_295, %x_295, %x_295
+            %284:vec3<f32> = mix %277, %282, %283
+            store %mixed, %284
+            %285:vec3<f32> = load %mixed
+            %x_298:vec3<f32> = let %285
+            %287:f32 = load %alpha
+            %x_299:f32 = let %287
+            %289:f32 = access %x_298, 0u
+            %290:f32 = access %x_298, 1u
+            %291:f32 = access %x_298, 2u
+            %292:vec4<f32> = construct %289, %290, %291, %x_299
+            store %color, %292
             exit_if  # if_6
           }
         }
-        continue %b5
+        continue  # -> $B5
       }
-      %b5 = block {  # continuing
-        %x_304:i32 = load %i
-        %219:i32 = add %x_304, 1i
-        store %i, %219
-        next_iteration %b4
+      $B5: {  # continuing
+        %293:i32 = load %i
+        %x_304:i32 = let %293
+        %295:i32 = add %x_304, 1i
+        store %i, %295
+        next_iteration  # -> $B4
       }
     }
-    %220:ptr<uniform, vec3<f32>, read> = access %x_20, 8u
-    %x_310:vec3<f32> = load %220
-    %x_311:vec4<f32> = load %color
-    %223:f32 = access %x_311, 0u
-    %224:f32 = access %x_311, 1u
-    %225:f32 = access %x_311, 2u
-    %226:vec3<f32> = construct %223, %224, %225
-    %x_313:vec3<f32> = mul %226, %x_310
-    %x_314:vec4<f32> = load %color
-    %229:f32 = access %x_313, 0u
-    %230:f32 = access %x_313, 1u
-    %231:f32 = access %x_313, 2u
-    %232:f32 = access %x_314, 3u
-    %233:vec4<f32> = construct %229, %230, %231, %232
-    store %color, %233
-    %x_318:vec4<f32> = load %color
+    %296:ptr<uniform, vec3<f32>, read> = access %x_20, 8u
+    %297:vec3<f32> = load %296
+    %x_310:vec3<f32> = let %297
+    %299:vec4<f32> = load %color
+    %x_311:vec4<f32> = let %299
+    %301:f32 = access %x_311, 0u
+    %302:f32 = access %x_311, 1u
+    %303:f32 = access %x_311, 2u
+    %304:vec3<f32> = construct %301, %302, %303
+    %305:vec3<f32> = mul %304, %x_310
+    %x_313:vec3<f32> = let %305
+    %307:vec4<f32> = load %color
+    %x_314:vec4<f32> = let %307
+    %309:f32 = access %x_313, 0u
+    %310:f32 = access %x_313, 1u
+    %311:f32 = access %x_313, 2u
+    %312:f32 = access %x_314, 3u
+    %313:vec4<f32> = construct %309, %310, %311, %312
+    store %color, %313
+    %314:vec4<f32> = load %color
+    %x_318:vec4<f32> = let %314
     store %glFragColor, %x_318
     ret
   }
 }
-%tint_symbol = @fragment func(%tUV_param:vec2<f32> [@location(2)], %tileID_1_param:vec2<f32> [@location(5)], %levelUnits_param:vec2<f32> [@location(4)], %stageUnits_1_param:vec2<f32> [@location(3)], %vPosition_param:vec3<f32> [@location(0)], %vUV_param:vec2<f32> [@location(1)]):main_out -> %b20 {
-  %b20 = block {
+%tint_symbol = @fragment func(%tUV_param:vec2<f32> [@location(2)], %tileID_1_param:vec2<f32> [@location(5)], %levelUnits_param:vec2<f32> [@location(4)], %stageUnits_1_param:vec2<f32> [@location(3)], %vPosition_param:vec3<f32> [@location(0)], %vUV_param:vec2<f32> [@location(1)]):main_out {
+  $B20: {
     store %tUV, %tUV_param
     store %tileID_1, %tileID_1_param
     store %levelUnits, %levelUnits_param
     store %stageUnits_1, %stageUnits_1_param
     store %vPosition, %vPosition_param
     store %vUV, %vUV_param
-    %242:void = call %main_1
-    %243:vec4<f32> = load %glFragColor
-    %244:main_out = construct %243
-    ret %244
+    %323:void = call %main_1
+    %324:vec4<f32> = load %glFragColor
+    %325:main_out = construct %324
+    ret %325
   }
 }
 
diff --git a/test/tint/bug/tint/949.wgsl.expected.ir.msl b/test/tint/bug/tint/949.wgsl.expected.ir.msl
index 84c7e57..7148115 100644
--- a/test/tint/bug/tint/949.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/949.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: LeftOver = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: LeftOver = struct @align(16) {
   u_World:mat4x4<f32> @offset(0)
   u_ViewProjection:mat4x4<f32> @offset(64)
   u_bumpStrength:f32 @offset(128)
@@ -31,7 +31,7 @@
   glFragColor_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u_Float:ptr<private, f32, read_write> = var
   %u_Color:ptr<private, vec3<f32>, read_write> = var
   %TextureSamplerTexture:ptr<handle, texture_2d<f32>, read> = var @binding_point(2, 1)
@@ -46,12 +46,12 @@
   %TextureSampler1Sampler:ptr<handle, sampler, read> = var @binding_point(2, 2)
   %light0:ptr<uniform, Light0, read> = var @binding_point(0, 5)
   %glFragColor:ptr<private, vec4<f32>, read_write> = var
-  %bumpSamplerSampler:ptr<handle, sampler, read> = var @binding_point(2, 4)
-  %bumpSamplerTexture:ptr<handle, texture_2d<f32>, read> = var @binding_point(2, 5)
+  %bumpSamplerSampler:ptr<handle, sampler, read> = var @binding_point(0, 4)
+  %bumpSamplerTexture:ptr<handle, texture_2d<f32>, read> = var @binding_point(0, 5)
 }
 
-%cotangent_frame_vf3_vf3_vf2_vf2_ = func(%normal_1:ptr<function, vec3<f32>, read_write>, %p:ptr<function, vec3<f32>, read_write>, %uv:ptr<function, vec2<f32>, read_write>, %tangentSpaceParams:ptr<function, vec2<f32>, read_write>):mat3x3<f32> -> %b2 {
-  %b2 = block {
+%cotangent_frame_vf3_vf3_vf2_vf2_ = func(%normal_1:ptr<function, vec3<f32>, read_write>, %p:ptr<function, vec3<f32>, read_write>, %uv:ptr<function, vec2<f32>, read_write>, %tangentSpaceParams:ptr<function, vec2<f32>, read_write>):mat3x3<f32> {
+  $B2: {
     %dp1:ptr<function, vec3<f32>, read_write> = var
     %dp2:ptr<function, vec3<f32>, read_write> = var
     %duv1:ptr<function, vec2<f32>, read_write> = var
@@ -61,206 +61,278 @@
     %tangent:ptr<function, vec3<f32>, read_write> = var
     %bitangent:ptr<function, vec3<f32>, read_write> = var
     %invmax:ptr<function, f32, read_write> = var
-    %x_133:vec3<f32> = load %p
-    %32:vec3<f32> = dpdx %x_133
-    store %dp1, %32
-    %x_136:vec3<f32> = load %p
-    %34:vec3<f32> = dpdy %x_136
-    store %dp2, %34
-    %x_139:vec2<f32> = load %uv
-    %36:vec2<f32> = dpdx %x_139
-    store %duv1, %36
-    %x_142:vec2<f32> = load %uv
-    %38:vec2<f32> = dpdy %x_142
-    store %duv2, %38
-    %x_145:vec3<f32> = load %dp2
-    %x_146:vec3<f32> = load %normal_1
-    %41:vec3<f32> = cross %x_145, %x_146
-    store %dp2perp, %41
-    %x_149:vec3<f32> = load %normal_1
-    %x_150:vec3<f32> = load %dp1
-    %44:vec3<f32> = cross %x_149, %x_150
-    store %dp1perp, %44
-    %x_153:vec3<f32> = load %dp2perp
-    %x_155:f32 = load_vector_element %duv1, 0u
-    %x_157:vec3<f32> = load %dp1perp
-    %x_159:f32 = load_vector_element %duv2, 0u
-    %49:vec3<f32> = mul %x_153, %x_155
-    %50:vec3<f32> = mul %x_157, %x_159
-    %51:vec3<f32> = add %49, %50
-    store %tangent, %51
-    %x_163:vec3<f32> = load %dp2perp
-    %x_165:f32 = load_vector_element %duv1, 1u
-    %x_167:vec3<f32> = load %dp1perp
-    %x_169:f32 = load_vector_element %duv2, 1u
-    %56:vec3<f32> = mul %x_163, %x_165
-    %57:vec3<f32> = mul %x_167, %x_169
-    %58:vec3<f32> = add %56, %57
-    store %bitangent, %58
-    %x_173:f32 = load_vector_element %tangentSpaceParams, 0u
-    %x_174:vec3<f32> = load %tangent
-    %61:vec3<f32> = mul %x_174, %x_173
-    store %tangent, %61
-    %x_177:f32 = load_vector_element %tangentSpaceParams, 1u
-    %x_178:vec3<f32> = load %bitangent
-    %64:vec3<f32> = mul %x_178, %x_177
-    store %bitangent, %64
-    %x_181:vec3<f32> = load %tangent
-    %x_182:vec3<f32> = load %tangent
-    %x_184:vec3<f32> = load %bitangent
-    %x_185:vec3<f32> = load %bitangent
-    %69:f32 = dot %x_181, %x_182
-    %70:f32 = dot %x_184, %x_185
-    %71:f32 = max %69, %70
-    %72:f32 = inverseSqrt %71
-    store %invmax, %72
-    %x_189:vec3<f32> = load %tangent
-    %x_190:f32 = load %invmax
-    %x_191:vec3<f32> = mul %x_189, %x_190
-    %x_192:vec3<f32> = load %bitangent
-    %x_193:f32 = load %invmax
-    %x_194:vec3<f32> = mul %x_192, %x_193
-    %x_195:vec3<f32> = load %normal_1
-    %80:f32 = access %x_191, 0u
-    %81:f32 = access %x_191, 1u
-    %82:f32 = access %x_191, 2u
-    %83:vec3<f32> = construct %80, %81, %82
-    %84:f32 = access %x_194, 0u
-    %85:f32 = access %x_194, 1u
-    %86:f32 = access %x_194, 2u
-    %87:vec3<f32> = construct %84, %85, %86
-    %88:f32 = access %x_195, 0u
-    %89:f32 = access %x_195, 1u
-    %90:f32 = access %x_195, 2u
-    %91:vec3<f32> = construct %88, %89, %90
-    %92:mat3x3<f32> = construct %83, %87, %91
-    ret %92
+    %31:vec3<f32> = load %p
+    %x_133:vec3<f32> = let %31
+    %33:vec3<f32> = dpdx %x_133
+    store %dp1, %33
+    %34:vec3<f32> = load %p
+    %x_136:vec3<f32> = let %34
+    %36:vec3<f32> = dpdy %x_136
+    store %dp2, %36
+    %37:vec2<f32> = load %uv
+    %x_139:vec2<f32> = let %37
+    %39:vec2<f32> = dpdx %x_139
+    store %duv1, %39
+    %40:vec2<f32> = load %uv
+    %x_142:vec2<f32> = let %40
+    %42:vec2<f32> = dpdy %x_142
+    store %duv2, %42
+    %43:vec3<f32> = load %dp2
+    %x_145:vec3<f32> = let %43
+    %45:vec3<f32> = load %normal_1
+    %x_146:vec3<f32> = let %45
+    %47:vec3<f32> = cross %x_145, %x_146
+    store %dp2perp, %47
+    %48:vec3<f32> = load %normal_1
+    %x_149:vec3<f32> = let %48
+    %50:vec3<f32> = load %dp1
+    %x_150:vec3<f32> = let %50
+    %52:vec3<f32> = cross %x_149, %x_150
+    store %dp1perp, %52
+    %53:vec3<f32> = load %dp2perp
+    %x_153:vec3<f32> = let %53
+    %55:f32 = load_vector_element %duv1, 0u
+    %x_155:f32 = let %55
+    %57:vec3<f32> = load %dp1perp
+    %x_157:vec3<f32> = let %57
+    %59:f32 = load_vector_element %duv2, 0u
+    %x_159:f32 = let %59
+    %61:vec3<f32> = mul %x_153, %x_155
+    %62:vec3<f32> = mul %x_157, %x_159
+    %63:vec3<f32> = add %61, %62
+    store %tangent, %63
+    %64:vec3<f32> = load %dp2perp
+    %x_163:vec3<f32> = let %64
+    %66:f32 = load_vector_element %duv1, 1u
+    %x_165:f32 = let %66
+    %68:vec3<f32> = load %dp1perp
+    %x_167:vec3<f32> = let %68
+    %70:f32 = load_vector_element %duv2, 1u
+    %x_169:f32 = let %70
+    %72:vec3<f32> = mul %x_163, %x_165
+    %73:vec3<f32> = mul %x_167, %x_169
+    %74:vec3<f32> = add %72, %73
+    store %bitangent, %74
+    %75:f32 = load_vector_element %tangentSpaceParams, 0u
+    %x_173:f32 = let %75
+    %77:vec3<f32> = load %tangent
+    %x_174:vec3<f32> = let %77
+    %79:vec3<f32> = mul %x_174, %x_173
+    store %tangent, %79
+    %80:f32 = load_vector_element %tangentSpaceParams, 1u
+    %x_177:f32 = let %80
+    %82:vec3<f32> = load %bitangent
+    %x_178:vec3<f32> = let %82
+    %84:vec3<f32> = mul %x_178, %x_177
+    store %bitangent, %84
+    %85:vec3<f32> = load %tangent
+    %x_181:vec3<f32> = let %85
+    %87:vec3<f32> = load %tangent
+    %x_182:vec3<f32> = let %87
+    %89:vec3<f32> = load %bitangent
+    %x_184:vec3<f32> = let %89
+    %91:vec3<f32> = load %bitangent
+    %x_185:vec3<f32> = let %91
+    %93:f32 = dot %x_181, %x_182
+    %94:f32 = let %93
+    %95:f32 = dot %x_184, %x_185
+    %96:f32 = max %94, %95
+    %97:f32 = inverseSqrt %96
+    store %invmax, %97
+    %98:vec3<f32> = load %tangent
+    %x_189:vec3<f32> = let %98
+    %100:f32 = load %invmax
+    %x_190:f32 = let %100
+    %102:vec3<f32> = mul %x_189, %x_190
+    %x_191:vec3<f32> = let %102
+    %104:vec3<f32> = load %bitangent
+    %x_192:vec3<f32> = let %104
+    %106:f32 = load %invmax
+    %x_193:f32 = let %106
+    %108:vec3<f32> = mul %x_192, %x_193
+    %x_194:vec3<f32> = let %108
+    %110:vec3<f32> = load %normal_1
+    %x_195:vec3<f32> = let %110
+    %112:f32 = access %x_191, 0u
+    %113:f32 = access %x_191, 1u
+    %114:f32 = access %x_191, 2u
+    %115:vec3<f32> = construct %112, %113, %114
+    %116:vec3<f32> = let %115
+    %117:f32 = access %x_194, 0u
+    %118:f32 = access %x_194, 1u
+    %119:f32 = access %x_194, 2u
+    %120:vec3<f32> = construct %117, %118, %119
+    %121:vec3<f32> = let %120
+    %122:f32 = access %x_195, 0u
+    %123:f32 = access %x_195, 1u
+    %124:f32 = access %x_195, 2u
+    %125:vec3<f32> = construct %122, %123, %124
+    %126:mat3x3<f32> = construct %116, %121, %125
+    ret %126
   }
 }
-%transposeMat3_mf33_ = func(%inMatrix:ptr<function, mat3x3<f32>, read_write>):mat3x3<f32> -> %b3 {
-  %b3 = block {
+%transposeMat3_mf33_ = func(%inMatrix:ptr<function, mat3x3<f32>, read_write>):mat3x3<f32> {
+  $B3: {
     %i0:ptr<function, vec3<f32>, read_write> = var
     %i1:ptr<function, vec3<f32>, read_write> = var
     %i2:ptr<function, vec3<f32>, read_write> = var
     %outMatrix:ptr<function, mat3x3<f32>, read_write> = var
-    %99:ptr<function, vec3<f32>, read_write> = access %inMatrix, 0i
-    %x_60:vec3<f32> = load %99
+    %133:ptr<function, vec3<f32>, read_write> = access %inMatrix, 0i
+    %134:vec3<f32> = load %133
+    %x_60:vec3<f32> = let %134
     store %i0, %x_60
-    %101:ptr<function, vec3<f32>, read_write> = access %inMatrix, 1i
-    %x_64:vec3<f32> = load %101
+    %136:ptr<function, vec3<f32>, read_write> = access %inMatrix, 1i
+    %137:vec3<f32> = load %136
+    %x_64:vec3<f32> = let %137
     store %i1, %x_64
-    %103:ptr<function, vec3<f32>, read_write> = access %inMatrix, 2i
-    %x_68:vec3<f32> = load %103
+    %139:ptr<function, vec3<f32>, read_write> = access %inMatrix, 2i
+    %140:vec3<f32> = load %139
+    %x_68:vec3<f32> = let %140
     store %i2, %x_68
-    %x_73:f32 = load_vector_element %i0, 0u
-    %x_75:f32 = load_vector_element %i1, 0u
-    %x_77:f32 = load_vector_element %i2, 0u
-    %x_78:vec3<f32> = construct %x_73, %x_75, %x_77
-    %x_81:f32 = load_vector_element %i0, 1u
-    %x_83:f32 = load_vector_element %i1, 1u
-    %x_85:f32 = load_vector_element %i2, 1u
-    %x_86:vec3<f32> = construct %x_81, %x_83, %x_85
-    %x_89:f32 = load_vector_element %i0, 2u
-    %x_91:f32 = load_vector_element %i1, 2u
-    %x_93:f32 = load_vector_element %i2, 2u
-    %x_94:vec3<f32> = construct %x_89, %x_91, %x_93
-    %117:f32 = access %x_78, 0u
-    %118:f32 = access %x_78, 1u
-    %119:f32 = access %x_78, 2u
-    %120:vec3<f32> = construct %117, %118, %119
-    %121:f32 = access %x_86, 0u
-    %122:f32 = access %x_86, 1u
-    %123:f32 = access %x_86, 2u
-    %124:vec3<f32> = construct %121, %122, %123
-    %125:f32 = access %x_94, 0u
-    %126:f32 = access %x_94, 1u
-    %127:f32 = access %x_94, 2u
-    %128:vec3<f32> = construct %125, %126, %127
-    %129:mat3x3<f32> = construct %120, %124, %128
-    store %outMatrix, %129
-    %x_110:mat3x3<f32> = load %outMatrix
+    %142:f32 = load_vector_element %i0, 0u
+    %x_73:f32 = let %142
+    %144:f32 = load_vector_element %i1, 0u
+    %x_75:f32 = let %144
+    %146:f32 = load_vector_element %i2, 0u
+    %x_77:f32 = let %146
+    %148:vec3<f32> = construct %x_73, %x_75, %x_77
+    %x_78:vec3<f32> = let %148
+    %150:f32 = load_vector_element %i0, 1u
+    %x_81:f32 = let %150
+    %152:f32 = load_vector_element %i1, 1u
+    %x_83:f32 = let %152
+    %154:f32 = load_vector_element %i2, 1u
+    %x_85:f32 = let %154
+    %156:vec3<f32> = construct %x_81, %x_83, %x_85
+    %x_86:vec3<f32> = let %156
+    %158:f32 = load_vector_element %i0, 2u
+    %x_89:f32 = let %158
+    %160:f32 = load_vector_element %i1, 2u
+    %x_91:f32 = let %160
+    %162:f32 = load_vector_element %i2, 2u
+    %x_93:f32 = let %162
+    %164:vec3<f32> = construct %x_89, %x_91, %x_93
+    %x_94:vec3<f32> = let %164
+    %166:f32 = access %x_78, 0u
+    %167:f32 = access %x_78, 1u
+    %168:f32 = access %x_78, 2u
+    %169:vec3<f32> = construct %166, %167, %168
+    %170:vec3<f32> = let %169
+    %171:f32 = access %x_86, 0u
+    %172:f32 = access %x_86, 1u
+    %173:f32 = access %x_86, 2u
+    %174:vec3<f32> = construct %171, %172, %173
+    %175:vec3<f32> = let %174
+    %176:f32 = access %x_94, 0u
+    %177:f32 = access %x_94, 1u
+    %178:f32 = access %x_94, 2u
+    %179:vec3<f32> = construct %176, %177, %178
+    %180:mat3x3<f32> = construct %170, %175, %179
+    store %outMatrix, %180
+    %181:mat3x3<f32> = load %outMatrix
+    %x_110:mat3x3<f32> = let %181
     ret %x_110
   }
 }
-%perturbNormalBase_mf33_vf3_f1_ = func(%cotangentFrame:ptr<function, mat3x3<f32>, read_write>, %normal:ptr<function, vec3<f32>, read_write>, %scale:ptr<function, f32, read_write>):vec3<f32> -> %b4 {
-  %b4 = block {
-    %x_113:mat3x3<f32> = load %cotangentFrame
-    %x_114:vec3<f32> = load %normal
-    %137:vec3<f32> = mul %x_113, %x_114
-    %138:vec3<f32> = normalize %137
-    ret %138
+%perturbNormalBase_mf33_vf3_f1_ = func(%cotangentFrame:ptr<function, mat3x3<f32>, read_write>, %normal:ptr<function, vec3<f32>, read_write>, %scale:ptr<function, f32, read_write>):vec3<f32> {
+  $B4: {
+    %187:mat3x3<f32> = load %cotangentFrame
+    %x_113:mat3x3<f32> = let %187
+    %189:vec3<f32> = load %normal
+    %x_114:vec3<f32> = let %189
+    %191:vec3<f32> = mul %x_113, %x_114
+    %192:vec3<f32> = normalize %191
+    ret %192
   }
 }
-%perturbNormal_mf33_vf3_f1_ = func(%cotangentFrame_1:ptr<function, mat3x3<f32>, read_write>, %textureSample:ptr<function, vec3<f32>, read_write>, %scale_1:ptr<function, f32, read_write>):vec3<f32> -> %b5 {
-  %b5 = block {
+%perturbNormal_mf33_vf3_f1_ = func(%cotangentFrame_1:ptr<function, mat3x3<f32>, read_write>, %textureSample:ptr<function, vec3<f32>, read_write>, %scale_1:ptr<function, f32, read_write>):vec3<f32> {
+  $B5: {
     %param:ptr<function, mat3x3<f32>, read_write> = var
     %param_1:ptr<function, vec3<f32>, read_write> = var
     %param_2:ptr<function, f32, read_write> = var
-    %x_119:vec3<f32> = load %textureSample
-    %x_125:mat3x3<f32> = load %cotangentFrame_1
+    %200:vec3<f32> = load %textureSample
+    %x_119:vec3<f32> = let %200
+    %202:mat3x3<f32> = load %cotangentFrame_1
+    %x_125:mat3x3<f32> = let %202
     store %param, %x_125
-    %148:vec3<f32> = mul %x_119, 2.0f
-    %149:vec3<f32> = sub %148, vec3<f32>(1.0f)
-    store %param_1, %149
-    %x_128:f32 = load %scale_1
+    %204:vec3<f32> = mul %x_119, 2.0f
+    %205:vec3<f32> = sub %204, vec3<f32>(1.0f)
+    store %param_1, %205
+    %206:f32 = load %scale_1
+    %x_128:f32 = let %206
     store %param_2, %x_128
-    %x_129:vec3<f32> = call %perturbNormalBase_mf33_vf3_f1_, %param, %param_1, %param_2
+    %208:vec3<f32> = call %perturbNormalBase_mf33_vf3_f1_, %param, %param_1, %param_2
+    %x_129:vec3<f32> = let %208
     ret %x_129
   }
 }
-%computeHemisphericLighting_vf3_vf3_vf4_vf3_vf3_vf3_f1_ = func(%viewDirectionW:ptr<function, vec3<f32>, read_write>, %vNormal:ptr<function, vec3<f32>, read_write>, %lightData:ptr<function, vec4<f32>, read_write>, %diffuseColor:ptr<function, vec3<f32>, read_write>, %specularColor:ptr<function, vec3<f32>, read_write>, %groundColor:ptr<function, vec3<f32>, read_write>, %glossiness:ptr<function, f32, read_write>):lightingInfo -> %b6 {
-  %b6 = block {
+%computeHemisphericLighting_vf3_vf3_vf4_vf3_vf3_vf3_f1_ = func(%viewDirectionW:ptr<function, vec3<f32>, read_write>, %vNormal:ptr<function, vec3<f32>, read_write>, %lightData:ptr<function, vec4<f32>, read_write>, %diffuseColor:ptr<function, vec3<f32>, read_write>, %specularColor:ptr<function, vec3<f32>, read_write>, %groundColor:ptr<function, vec3<f32>, read_write>, %glossiness:ptr<function, f32, read_write>):lightingInfo {
+  $B6: {
     %ndl:ptr<function, f32, read_write> = var
     %result:ptr<function, lightingInfo, read_write> = var
     %angleW:ptr<function, vec3<f32>, read_write> = var
     %specComp:ptr<function, f32, read_write> = var
-    %x_212:vec3<f32> = load %vNormal
-    %x_213:vec4<f32> = load %lightData
-    %166:f32 = access %x_213, 0u
-    %167:f32 = access %x_213, 1u
-    %168:f32 = access %x_213, 2u
-    %169:vec3<f32> = construct %166, %167, %168
-    %170:f32 = dot %x_212, %169
-    %171:f32 = mul %170, 0.5f
-    %172:f32 = add %171, 0.5f
-    store %ndl, %172
-    %x_220:vec3<f32> = load %groundColor
-    %x_221:vec3<f32> = load %diffuseColor
-    %x_222:f32 = load %ndl
-    %176:ptr<function, vec3<f32>, read_write> = access %result, 0u
-    %177:vec3<f32> = construct %x_222, %x_222, %x_222
-    %178:vec3<f32> = mix %x_220, %x_221, %177
-    store %176, %178
-    %x_227:vec3<f32> = load %viewDirectionW
-    %x_228:vec4<f32> = load %lightData
-    %181:f32 = access %x_228, 0u
-    %182:f32 = access %x_228, 1u
-    %183:f32 = access %x_228, 2u
-    %184:vec3<f32> = construct %181, %182, %183
-    %185:vec3<f32> = add %x_227, %184
-    %186:vec3<f32> = normalize %185
-    store %angleW, %186
-    %x_233:vec3<f32> = load %vNormal
-    %x_234:vec3<f32> = load %angleW
-    %189:f32 = dot %x_233, %x_234
-    %190:f32 = max 0.0f, %189
-    store %specComp, %190
-    %x_237:f32 = load %specComp
-    %x_238:f32 = load %glossiness
-    %193:f32 = max 1.0f, %x_238
-    %194:f32 = pow %x_237, %193
-    store %specComp, %194
-    %x_241:f32 = load %specComp
-    %x_242:vec3<f32> = load %specularColor
-    %197:ptr<function, vec3<f32>, read_write> = access %result, 1u
-    %198:vec3<f32> = mul %x_242, %x_241
-    store %197, %198
-    %x_245:lightingInfo = load %result
+    %222:vec3<f32> = load %vNormal
+    %x_212:vec3<f32> = let %222
+    %224:vec4<f32> = load %lightData
+    %x_213:vec4<f32> = let %224
+    %226:f32 = access %x_213, 0u
+    %227:f32 = access %x_213, 1u
+    %228:f32 = access %x_213, 2u
+    %229:vec3<f32> = construct %226, %227, %228
+    %230:f32 = dot %x_212, %229
+    %231:f32 = mul %230, 0.5f
+    %232:f32 = add %231, 0.5f
+    store %ndl, %232
+    %233:vec3<f32> = load %groundColor
+    %x_220:vec3<f32> = let %233
+    %235:vec3<f32> = load %diffuseColor
+    %x_221:vec3<f32> = let %235
+    %237:f32 = load %ndl
+    %x_222:f32 = let %237
+    %239:ptr<function, vec3<f32>, read_write> = access %result, 0u
+    %240:vec3<f32> = construct %x_222, %x_222, %x_222
+    %241:vec3<f32> = mix %x_220, %x_221, %240
+    store %239, %241
+    %242:vec3<f32> = load %viewDirectionW
+    %x_227:vec3<f32> = let %242
+    %244:vec4<f32> = load %lightData
+    %x_228:vec4<f32> = let %244
+    %246:f32 = access %x_228, 0u
+    %247:f32 = access %x_228, 1u
+    %248:f32 = access %x_228, 2u
+    %249:vec3<f32> = construct %246, %247, %248
+    %250:vec3<f32> = add %x_227, %249
+    %251:vec3<f32> = normalize %250
+    store %angleW, %251
+    %252:vec3<f32> = load %vNormal
+    %x_233:vec3<f32> = let %252
+    %254:vec3<f32> = load %angleW
+    %x_234:vec3<f32> = let %254
+    %256:f32 = dot %x_233, %x_234
+    %257:f32 = max 0.0f, %256
+    store %specComp, %257
+    %258:f32 = load %specComp
+    %x_237:f32 = let %258
+    %260:f32 = load %glossiness
+    %x_238:f32 = let %260
+    %262:f32 = max 1.0f, %x_238
+    %263:f32 = pow %x_237, %262
+    store %specComp, %263
+    %264:f32 = load %specComp
+    %x_241:f32 = let %264
+    %266:vec3<f32> = load %specularColor
+    %x_242:vec3<f32> = let %266
+    %268:ptr<function, vec3<f32>, read_write> = access %result, 1u
+    %269:vec3<f32> = mul %x_242, %x_241
+    store %268, %269
+    %270:lightingInfo = load %result
+    %x_245:lightingInfo = let %270
     ret %x_245
   }
 }
-%main_1 = func():void -> %b7 {
-  %b7 = block {
+%main_1 = func():void {
+  $B7: {
     %tempTextureRead:ptr<function, vec4<f32>, read_write> = var
     %rgb:ptr<function, vec3<f32>, read_write> = var
     %output5:ptr<function, vec3<f32>, read_write> = var
@@ -316,351 +388,451 @@
     %output3:ptr<function, vec3<f32>, read_write> = var
     store %u_Float, 100.0f
     store %u_Color, vec3<f32>(0.5f)
-    %x_261:vec2<f32> = load %vMainuv
-    %255:texture_2d<f32> = load %TextureSamplerTexture
-    %256:sampler = load %TextureSamplerSampler
-    %x_262:vec4<f32> = textureSample %255, %256, %x_261
+    %326:vec2<f32> = load %vMainuv
+    %x_261:vec2<f32> = let %326
+    %328:texture_2d<f32> = load %TextureSamplerTexture
+    %329:sampler = load %TextureSamplerSampler
+    %330:vec4<f32> = textureSample %328, %329, %x_261
+    %x_262:vec4<f32> = let %330
     store %tempTextureRead, %x_262
-    %x_264:vec4<f32> = load %tempTextureRead
-    %259:ptr<uniform, f32, read> = access %x_269, 6u
-    %x_273:f32 = load %259
-    %261:f32 = access %x_264, 0u
-    %262:f32 = access %x_264, 1u
-    %263:f32 = access %x_264, 2u
-    %264:vec3<f32> = construct %261, %262, %263
-    %265:vec3<f32> = mul %264, %x_273
-    store %rgb, %265
-    %266:ptr<uniform, vec3<f32>, read> = access %x_269, 4u
-    %x_279:vec3<f32> = load %266
-    %x_282:vec4<f32> = load %v_output1
-    %269:f32 = access %x_282, 0u
-    %270:f32 = access %x_282, 1u
-    %271:f32 = access %x_282, 2u
-    %272:vec3<f32> = construct %269, %270, %271
-    %273:vec3<f32> = sub %x_279, %272
-    %274:vec3<f32> = normalize %273
-    store %output5, %274
+    %332:vec4<f32> = load %tempTextureRead
+    %x_264:vec4<f32> = let %332
+    %334:ptr<uniform, f32, read> = access %x_269, 6u
+    %335:f32 = load %334
+    %x_273:f32 = let %335
+    %337:f32 = access %x_264, 0u
+    %338:f32 = access %x_264, 1u
+    %339:f32 = access %x_264, 2u
+    %340:vec3<f32> = construct %337, %338, %339
+    %341:vec3<f32> = mul %340, %x_273
+    store %rgb, %341
+    %342:ptr<uniform, vec3<f32>, read> = access %x_269, 4u
+    %343:vec3<f32> = load %342
+    %x_279:vec3<f32> = let %343
+    %345:vec4<f32> = load %v_output1
+    %x_282:vec4<f32> = let %345
+    %347:f32 = access %x_282, 0u
+    %348:f32 = access %x_282, 1u
+    %349:f32 = access %x_282, 2u
+    %350:vec3<f32> = construct %347, %348, %349
+    %351:vec3<f32> = sub %x_279, %350
+    %352:vec3<f32> = normalize %351
+    store %output5, %352
     store %output4, vec4<f32>(0.0f)
     store %uvOffset, vec2<f32>(0.0f)
-    %275:ptr<uniform, f32, read> = access %x_269, 2u
-    %x_292:f32 = load %275
-    %277:f32 = div 1.0f, %x_292
-    store %normalScale, %277
-    %x_298:bool = load %gl_FrontFacing
-    if %x_298 [t: %b8, f: %b9] {  # if_1
-      %b8 = block {  # true
-        %x_303:vec2<f32> = load %v_uv
+    %353:ptr<uniform, f32, read> = access %x_269, 2u
+    %354:f32 = load %353
+    %x_292:f32 = let %354
+    %356:f32 = div 1.0f, %x_292
+    store %normalScale, %356
+    %357:bool = load %gl_FrontFacing
+    %x_298:bool = let %357
+    if %x_298 [t: $B8, f: $B9] {  # if_1
+      $B8: {  # true
+        %359:vec2<f32> = load %v_uv
+        %x_303:vec2<f32> = let %359
         store %x_299, %x_303
         exit_if  # if_1
       }
-      %b9 = block {  # false
-        %x_305:vec2<f32> = load %v_uv
-        %281:vec2<f32> = negation %x_305
-        store %x_299, %281
+      $B9: {  # false
+        %361:vec2<f32> = load %v_uv
+        %x_305:vec2<f32> = let %361
+        %363:vec2<f32> = negation %x_305
+        store %x_299, %363
         exit_if  # if_1
       }
     }
-    %x_307:vec2<f32> = load %x_299
+    %364:vec2<f32> = load %x_299
+    %x_307:vec2<f32> = let %364
     store %TBNUV, %x_307
-    %x_310:vec4<f32> = load %v_output2
-    %x_312:f32 = load %normalScale
-    %285:f32 = access %x_310, 0u
-    %286:f32 = access %x_310, 1u
-    %287:f32 = access %x_310, 2u
-    %288:vec3<f32> = construct %285, %286, %287
-    %289:vec3<f32> = mul %288, %x_312
-    store %param_3, %289
-    %x_317:vec4<f32> = load %v_output1
-    %291:f32 = access %x_317, 0u
-    %292:f32 = access %x_317, 1u
-    %293:f32 = access %x_317, 2u
-    %294:vec3<f32> = construct %291, %292, %293
-    store %param_4, %294
-    %x_320:vec2<f32> = load %TBNUV
+    %366:vec4<f32> = load %v_output2
+    %x_310:vec4<f32> = let %366
+    %368:f32 = load %normalScale
+    %x_312:f32 = let %368
+    %370:f32 = access %x_310, 0u
+    %371:f32 = access %x_310, 1u
+    %372:f32 = access %x_310, 2u
+    %373:vec3<f32> = construct %370, %371, %372
+    %374:vec3<f32> = mul %373, %x_312
+    store %param_3, %374
+    %375:vec4<f32> = load %v_output1
+    %x_317:vec4<f32> = let %375
+    %377:f32 = access %x_317, 0u
+    %378:f32 = access %x_317, 1u
+    %379:f32 = access %x_317, 2u
+    %380:vec3<f32> = construct %377, %378, %379
+    store %param_4, %380
+    %381:vec2<f32> = load %TBNUV
+    %x_320:vec2<f32> = let %381
     store %param_5, %x_320
-    %296:ptr<uniform, vec2<f32>, read> = access %x_269, 8u
-    %x_324:vec2<f32> = load %296
+    %383:ptr<uniform, vec2<f32>, read> = access %x_269, 8u
+    %384:vec2<f32> = load %383
+    %x_324:vec2<f32> = let %384
     store %param_6, %x_324
-    %x_325:mat3x3<f32> = call %cotangent_frame_vf3_vf3_vf2_vf2_, %param_3, %param_4, %param_5, %param_6
+    %386:mat3x3<f32> = call %cotangent_frame_vf3_vf3_vf2_vf2_, %param_3, %param_4, %param_5, %param_6
+    %x_325:mat3x3<f32> = let %386
     store %TBN, %x_325
-    %x_328:mat3x3<f32> = load %TBN
+    %388:mat3x3<f32> = load %TBN
+    %x_328:mat3x3<f32> = let %388
     store %param_7, %x_328
-    %x_329:mat3x3<f32> = call %transposeMat3_mf33_, %param_7
+    %390:mat3x3<f32> = call %transposeMat3_mf33_, %param_7
+    %x_329:mat3x3<f32> = let %390
     store %invTBN, %x_329
-    %x_331:mat3x3<f32> = load %invTBN
-    %x_332:vec3<f32> = load %output5
-    %303:vec3<f32> = negation %x_332
-    %x_334:vec3<f32> = mul %x_331, %303
-    %x_337:mat3x3<f32> = load %invTBN
-    %x_338:vec3<f32> = load %output5
-    %307:f32 = access %x_334, 0u
-    %308:f32 = access %x_334, 1u
-    %309:vec2<f32> = construct %307, %308
-    %310:f32 = length %309
-    %311:vec3<f32> = negation %x_338
-    %312:vec3<f32> = mul %x_337, %311
-    %313:f32 = access %312, 2u
-    %314:f32 = div %310, %313
-    store %parallaxLimit, %314
-    %315:ptr<uniform, f32, read> = access %x_269, 5u
-    %x_345:f32 = load %315
-    %x_346:f32 = load %parallaxLimit
-    %318:f32 = mul %x_346, %x_345
-    store %parallaxLimit, %318
-    %x_349:mat3x3<f32> = load %invTBN
-    %x_350:vec3<f32> = load %output5
-    %321:vec3<f32> = negation %x_350
-    %x_352:vec3<f32> = mul %x_349, %321
-    %323:f32 = access %x_352, 0u
-    %324:f32 = access %x_352, 1u
-    %325:vec2<f32> = construct %323, %324
-    %326:vec2<f32> = normalize %325
-    store %vOffsetDir, %326
-    %x_356:vec2<f32> = load %vOffsetDir
-    %x_357:f32 = load %parallaxLimit
-    %329:vec2<f32> = mul %x_356, %x_357
-    store %vMaxOffset, %329
-    %x_361:mat3x3<f32> = load %invTBN
-    %x_362:vec3<f32> = load %output5
-    %x_365:mat3x3<f32> = load %invTBN
-    %x_366:vec4<f32> = load %v_output2
-    %334:vec3<f32> = negation %x_362
-    %335:vec3<f32> = mul %x_361, %334
-    %336:f32 = access %x_366, 0u
-    %337:f32 = access %x_366, 1u
-    %338:f32 = access %x_366, 2u
-    %339:vec3<f32> = construct %336, %337, %338
-    %340:vec3<f32> = mul %x_365, %339
-    %341:f32 = dot %335, %340
-    %342:f32 = mul %341, -11.0f
-    %343:f32 = add 15.0f, %342
-    store %numSamples, %343
-    %x_374:f32 = load %numSamples
-    %345:f32 = div 1.0f, %x_374
-    store %stepSize, %345
+    %392:mat3x3<f32> = load %invTBN
+    %x_331:mat3x3<f32> = let %392
+    %394:vec3<f32> = load %output5
+    %x_332:vec3<f32> = let %394
+    %396:vec3<f32> = negation %x_332
+    %397:vec3<f32> = mul %x_331, %396
+    %x_334:vec3<f32> = let %397
+    %399:mat3x3<f32> = load %invTBN
+    %x_337:mat3x3<f32> = let %399
+    %401:vec3<f32> = load %output5
+    %x_338:vec3<f32> = let %401
+    %403:f32 = access %x_334, 0u
+    %404:f32 = access %x_334, 1u
+    %405:vec2<f32> = construct %403, %404
+    %406:f32 = length %405
+    %407:vec3<f32> = negation %x_338
+    %408:vec3<f32> = mul %x_337, %407
+    %409:f32 = access %408, 2u
+    %410:f32 = div %406, %409
+    store %parallaxLimit, %410
+    %411:ptr<uniform, f32, read> = access %x_269, 5u
+    %412:f32 = load %411
+    %x_345:f32 = let %412
+    %414:f32 = load %parallaxLimit
+    %x_346:f32 = let %414
+    %416:f32 = mul %x_346, %x_345
+    store %parallaxLimit, %416
+    %417:mat3x3<f32> = load %invTBN
+    %x_349:mat3x3<f32> = let %417
+    %419:vec3<f32> = load %output5
+    %x_350:vec3<f32> = let %419
+    %421:vec3<f32> = negation %x_350
+    %422:vec3<f32> = mul %x_349, %421
+    %x_352:vec3<f32> = let %422
+    %424:f32 = access %x_352, 0u
+    %425:f32 = access %x_352, 1u
+    %426:vec2<f32> = construct %424, %425
+    %427:vec2<f32> = normalize %426
+    store %vOffsetDir, %427
+    %428:vec2<f32> = load %vOffsetDir
+    %x_356:vec2<f32> = let %428
+    %430:f32 = load %parallaxLimit
+    %x_357:f32 = let %430
+    %432:vec2<f32> = mul %x_356, %x_357
+    store %vMaxOffset, %432
+    %433:mat3x3<f32> = load %invTBN
+    %x_361:mat3x3<f32> = let %433
+    %435:vec3<f32> = load %output5
+    %x_362:vec3<f32> = let %435
+    %437:mat3x3<f32> = load %invTBN
+    %x_365:mat3x3<f32> = let %437
+    %439:vec4<f32> = load %v_output2
+    %x_366:vec4<f32> = let %439
+    %441:vec3<f32> = negation %x_362
+    %442:vec3<f32> = mul %x_361, %441
+    %443:f32 = access %x_366, 0u
+    %444:f32 = access %x_366, 1u
+    %445:f32 = access %x_366, 2u
+    %446:vec3<f32> = construct %443, %444, %445
+    %447:vec3<f32> = mul %x_365, %446
+    %448:f32 = dot %442, %447
+    %449:f32 = mul %448, -11.0f
+    %450:f32 = add 15.0f, %449
+    store %numSamples, %450
+    %451:f32 = load %numSamples
+    %x_374:f32 = let %451
+    %453:f32 = div 1.0f, %x_374
+    store %stepSize, %453
     store %currRayHeight, 1.0f
     store %vCurrOffset, vec2<f32>(0.0f)
     store %vLastOffset, vec2<f32>(0.0f)
     store %lastSampledHeight, 1.0f
     store %currSampledHeight, 1.0f
     store %i, 0i
-    loop [b: %b10, c: %b11] {  # loop_1
-      %b10 = block {  # body
-        %x_388:i32 = load %i
-        %347:bool = lt %x_388, 15i
-        if %347 [t: %b12, f: %b13] {  # if_2
-          %b12 = block {  # true
+    loop [b: $B10, c: $B11] {  # loop_1
+      $B10: {  # body
+        %454:i32 = load %i
+        %x_388:i32 = let %454
+        %456:bool = lt %x_388, 15i
+        if %456 [t: $B12, f: $B13] {  # if_2
+          $B12: {  # true
             exit_if  # if_2
           }
-          %b13 = block {  # false
+          $B13: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_394:vec2<f32> = load %v_uv
-        %x_395:vec2<f32> = load %vCurrOffset
+        %457:vec2<f32> = load %v_uv
+        %x_394:vec2<f32> = let %457
+        %459:vec2<f32> = load %vCurrOffset
+        %x_395:vec2<f32> = let %459
         %x_397:vec4<f32> = let vec4<f32>(0.0f)
-        %351:f32 = access %x_397, 3u
-        store %currSampledHeight, %351
-        %x_400:f32 = load %currSampledHeight
-        %x_401:f32 = load %currRayHeight
-        %354:bool = gt %x_400, %x_401
-        if %354 [t: %b14, f: %b15] {  # if_3
-          %b14 = block {  # true
-            %x_406:f32 = load %currSampledHeight
-            %x_407:f32 = load %currRayHeight
-            %357:f32 = sub %x_406, %x_407
-            store %delta1, %357
-            %x_410:f32 = load %currRayHeight
-            %x_411:f32 = load %stepSize
-            %x_413:f32 = load %lastSampledHeight
-            %361:f32 = add %x_410, %x_411
-            %362:f32 = sub %361, %x_413
-            store %delta2, %362
-            %x_416:f32 = load %delta1
-            %x_417:f32 = load %delta1
-            %x_418:f32 = load %delta2
-            %366:f32 = add %x_417, %x_418
-            %367:f32 = div %x_416, %366
-            store %ratio, %367
-            %x_421:f32 = load %ratio
-            %x_422:vec2<f32> = load %vLastOffset
-            %x_424:f32 = load %ratio
-            %x_426:vec2<f32> = load %vCurrOffset
-            %372:vec2<f32> = mul %x_422, %x_421
-            %373:f32 = sub 1.0f, %x_424
-            %374:vec2<f32> = mul %x_426, %373
-            %375:vec2<f32> = add %372, %374
-            store %vCurrOffset, %375
+        %462:f32 = access %x_397, 3u
+        store %currSampledHeight, %462
+        %463:f32 = load %currSampledHeight
+        %x_400:f32 = let %463
+        %465:f32 = load %currRayHeight
+        %x_401:f32 = let %465
+        %467:bool = gt %x_400, %x_401
+        if %467 [t: $B14, f: $B15] {  # if_3
+          $B14: {  # true
+            %468:f32 = load %currSampledHeight
+            %x_406:f32 = let %468
+            %470:f32 = load %currRayHeight
+            %x_407:f32 = let %470
+            %472:f32 = sub %x_406, %x_407
+            store %delta1, %472
+            %473:f32 = load %currRayHeight
+            %x_410:f32 = let %473
+            %475:f32 = load %stepSize
+            %x_411:f32 = let %475
+            %477:f32 = load %lastSampledHeight
+            %x_413:f32 = let %477
+            %479:f32 = add %x_410, %x_411
+            %480:f32 = sub %479, %x_413
+            store %delta2, %480
+            %481:f32 = load %delta1
+            %x_416:f32 = let %481
+            %483:f32 = load %delta1
+            %x_417:f32 = let %483
+            %485:f32 = load %delta2
+            %x_418:f32 = let %485
+            %487:f32 = add %x_417, %x_418
+            %488:f32 = div %x_416, %487
+            store %ratio, %488
+            %489:f32 = load %ratio
+            %x_421:f32 = let %489
+            %491:vec2<f32> = load %vLastOffset
+            %x_422:vec2<f32> = let %491
+            %493:f32 = load %ratio
+            %x_424:f32 = let %493
+            %495:vec2<f32> = load %vCurrOffset
+            %x_426:vec2<f32> = let %495
+            %497:vec2<f32> = mul %x_422, %x_421
+            %498:f32 = sub 1.0f, %x_424
+            %499:vec2<f32> = mul %x_426, %498
+            %500:vec2<f32> = add %497, %499
+            store %vCurrOffset, %500
             exit_loop  # loop_1
           }
-          %b15 = block {  # false
-            %x_431:f32 = load %stepSize
-            %x_432:f32 = load %currRayHeight
-            %378:f32 = sub %x_432, %x_431
-            store %currRayHeight, %378
-            %x_434:vec2<f32> = load %vCurrOffset
+          $B15: {  # false
+            %501:f32 = load %stepSize
+            %x_431:f32 = let %501
+            %503:f32 = load %currRayHeight
+            %x_432:f32 = let %503
+            %505:f32 = sub %x_432, %x_431
+            store %currRayHeight, %505
+            %506:vec2<f32> = load %vCurrOffset
+            %x_434:vec2<f32> = let %506
             store %vLastOffset, %x_434
-            %x_435:f32 = load %stepSize
-            %x_436:vec2<f32> = load %vMaxOffset
-            %x_438:vec2<f32> = load %vCurrOffset
-            %383:vec2<f32> = mul %x_436, %x_435
-            %384:vec2<f32> = add %x_438, %383
-            store %vCurrOffset, %384
-            %x_440:f32 = load %currSampledHeight
+            %508:f32 = load %stepSize
+            %x_435:f32 = let %508
+            %510:vec2<f32> = load %vMaxOffset
+            %x_436:vec2<f32> = let %510
+            %512:vec2<f32> = load %vCurrOffset
+            %x_438:vec2<f32> = let %512
+            %514:vec2<f32> = mul %x_436, %x_435
+            %515:vec2<f32> = add %x_438, %514
+            store %vCurrOffset, %515
+            %516:f32 = load %currSampledHeight
+            %x_440:f32 = let %516
             store %lastSampledHeight, %x_440
             exit_if  # if_3
           }
         }
-        continue %b11
+        continue  # -> $B11
       }
-      %b11 = block {  # continuing
-        %x_441:i32 = load %i
-        %387:i32 = add %x_441, 1i
-        store %i, %387
-        next_iteration %b10
+      $B11: {  # continuing
+        %518:i32 = load %i
+        %x_441:i32 = let %518
+        %520:i32 = add %x_441, 1i
+        store %i, %520
+        next_iteration  # -> $B10
       }
     }
-    %x_444:vec2<f32> = load %vCurrOffset
+    %521:vec2<f32> = load %vCurrOffset
+    %x_444:vec2<f32> = let %521
     store %parallaxOcclusion_0, %x_444
-    %x_445:vec2<f32> = load %parallaxOcclusion_0
+    %523:vec2<f32> = load %parallaxOcclusion_0
+    %x_445:vec2<f32> = let %523
     store %uvOffset, %x_445
-    %x_449:vec2<f32> = load %v_uv
-    %x_450:vec2<f32> = load %uvOffset
-    %392:texture_2d<f32> = load %TextureSamplerTexture
-    %393:sampler = load %TextureSamplerSampler
-    %394:vec2<f32> = add %x_449, %x_450
-    %x_452:vec4<f32> = textureSample %392, %393, %394
-    %396:ptr<uniform, f32, read> = access %x_269, 2u
-    %x_454:f32 = load %396
-    %x_457:mat3x3<f32> = load %TBN
+    %525:vec2<f32> = load %v_uv
+    %x_449:vec2<f32> = let %525
+    %527:vec2<f32> = load %uvOffset
+    %x_450:vec2<f32> = let %527
+    %529:texture_2d<f32> = load %TextureSamplerTexture
+    %530:sampler = load %TextureSamplerSampler
+    %531:vec2<f32> = add %x_449, %x_450
+    %532:vec4<f32> = textureSample %529, %530, %531
+    %x_452:vec4<f32> = let %532
+    %534:ptr<uniform, f32, read> = access %x_269, 2u
+    %535:f32 = load %534
+    %x_454:f32 = let %535
+    %537:mat3x3<f32> = load %TBN
+    %x_457:mat3x3<f32> = let %537
     store %param_8, %x_457
-    %399:f32 = access %x_452, 0u
-    %400:f32 = access %x_452, 1u
-    %401:f32 = access %x_452, 2u
-    %402:vec3<f32> = construct %399, %400, %401
-    store %param_9, %402
-    %403:f32 = div 1.0f, %x_454
-    store %param_10, %403
-    %x_461:vec3<f32> = call %perturbNormal_mf33_vf3_f1_, %param_8, %param_9, %param_10
-    %x_462:vec4<f32> = load %output4
-    %406:f32 = access %x_461, 0u
-    %407:f32 = access %x_461, 1u
-    %408:f32 = access %x_461, 2u
-    %409:f32 = access %x_462, 3u
-    %410:vec4<f32> = construct %406, %407, %408, %409
-    store %output4, %410
-    %x_465:vec2<f32> = load %v_uv
-    %x_466:vec2<f32> = load %uvOffset
-    %413:vec2<f32> = add %x_465, %x_466
-    store %output6, %413
-    %x_474:vec2<f32> = load %output6
-    %415:texture_2d<f32> = load %TextureSampler1Texture
-    %416:sampler = load %TextureSampler1Sampler
-    %x_475:vec4<f32> = textureSample %415, %416, %x_474
+    %539:f32 = access %x_452, 0u
+    %540:f32 = access %x_452, 1u
+    %541:f32 = access %x_452, 2u
+    %542:vec3<f32> = construct %539, %540, %541
+    store %param_9, %542
+    %543:f32 = div 1.0f, %x_454
+    store %param_10, %543
+    %544:vec3<f32> = call %perturbNormal_mf33_vf3_f1_, %param_8, %param_9, %param_10
+    %x_461:vec3<f32> = let %544
+    %546:vec4<f32> = load %output4
+    %x_462:vec4<f32> = let %546
+    %548:f32 = access %x_461, 0u
+    %549:f32 = access %x_461, 1u
+    %550:f32 = access %x_461, 2u
+    %551:f32 = access %x_462, 3u
+    %552:vec4<f32> = construct %548, %549, %550, %551
+    store %output4, %552
+    %553:vec2<f32> = load %v_uv
+    %x_465:vec2<f32> = let %553
+    %555:vec2<f32> = load %uvOffset
+    %x_466:vec2<f32> = let %555
+    %557:vec2<f32> = add %x_465, %x_466
+    store %output6, %557
+    %558:vec2<f32> = load %output6
+    %x_474:vec2<f32> = let %558
+    %560:texture_2d<f32> = load %TextureSampler1Texture
+    %561:sampler = load %TextureSampler1Sampler
+    %562:vec4<f32> = textureSample %560, %561, %x_474
+    %x_475:vec4<f32> = let %562
     store %tempTextureRead1, %x_475
-    %x_477:vec4<f32> = load %tempTextureRead1
-    %419:f32 = access %x_477, 0u
-    %420:f32 = access %x_477, 1u
-    %421:f32 = access %x_477, 2u
-    %422:vec3<f32> = construct %419, %420, %421
-    store %rgb1, %422
-    %423:ptr<uniform, vec3<f32>, read> = access %x_269, 4u
-    %x_481:vec3<f32> = load %423
-    %x_482:vec4<f32> = load %v_output1
-    %426:f32 = access %x_482, 0u
-    %427:f32 = access %x_482, 1u
-    %428:f32 = access %x_482, 2u
-    %429:vec3<f32> = construct %426, %427, %428
-    %430:vec3<f32> = sub %x_481, %429
-    %431:vec3<f32> = normalize %430
-    store %viewDirectionW_1, %431
+    %564:vec4<f32> = load %tempTextureRead1
+    %x_477:vec4<f32> = let %564
+    %566:f32 = access %x_477, 0u
+    %567:f32 = access %x_477, 1u
+    %568:f32 = access %x_477, 2u
+    %569:vec3<f32> = construct %566, %567, %568
+    store %rgb1, %569
+    %570:ptr<uniform, vec3<f32>, read> = access %x_269, 4u
+    %571:vec3<f32> = load %570
+    %x_481:vec3<f32> = let %571
+    %573:vec4<f32> = load %v_output1
+    %x_482:vec4<f32> = let %573
+    %575:f32 = access %x_482, 0u
+    %576:f32 = access %x_482, 1u
+    %577:f32 = access %x_482, 2u
+    %578:vec3<f32> = construct %575, %576, %577
+    %579:vec3<f32> = sub %x_481, %578
+    %580:vec3<f32> = normalize %579
+    store %viewDirectionW_1, %580
     store %shadow, 1.0f
-    %x_488:f32 = load %u_Float
-    %433:f32 = mul 1.0f, %x_488
-    store %glossiness_1, %433
+    %581:f32 = load %u_Float
+    %x_488:f32 = let %581
+    %583:f32 = mul 1.0f, %x_488
+    store %glossiness_1, %583
     store %diffuseBase, vec3<f32>(0.0f)
     store %specularBase, vec3<f32>(0.0f)
-    %x_494:vec4<f32> = load %output4
-    %435:f32 = access %x_494, 0u
-    %436:f32 = access %x_494, 1u
-    %437:f32 = access %x_494, 2u
-    %438:vec3<f32> = construct %435, %436, %437
-    store %normalW, %438
-    %x_501:vec3<f32> = load %viewDirectionW_1
+    %584:vec4<f32> = load %output4
+    %x_494:vec4<f32> = let %584
+    %586:f32 = access %x_494, 0u
+    %587:f32 = access %x_494, 1u
+    %588:f32 = access %x_494, 2u
+    %589:vec3<f32> = construct %586, %587, %588
+    store %normalW, %589
+    %590:vec3<f32> = load %viewDirectionW_1
+    %x_501:vec3<f32> = let %590
     store %param_11, %x_501
-    %x_503:vec3<f32> = load %normalW
+    %592:vec3<f32> = load %normalW
+    %x_503:vec3<f32> = let %592
     store %param_12, %x_503
-    %441:ptr<uniform, vec4<f32>, read> = access %light0, 0u
-    %x_507:vec4<f32> = load %441
+    %594:ptr<uniform, vec4<f32>, read> = access %light0, 0u
+    %595:vec4<f32> = load %594
+    %x_507:vec4<f32> = let %595
     store %param_13, %x_507
-    %443:ptr<uniform, vec4<f32>, read> = access %light0, 1u
-    %x_510:vec4<f32> = load %443
-    %445:f32 = access %x_510, 0u
-    %446:f32 = access %x_510, 1u
-    %447:f32 = access %x_510, 2u
-    %448:vec3<f32> = construct %445, %446, %447
-    store %param_14, %448
-    %449:ptr<uniform, vec4<f32>, read> = access %light0, 2u
-    %x_514:vec4<f32> = load %449
-    %451:f32 = access %x_514, 0u
-    %452:f32 = access %x_514, 1u
-    %453:f32 = access %x_514, 2u
-    %454:vec3<f32> = construct %451, %452, %453
-    store %param_15, %454
-    %455:ptr<uniform, vec3<f32>, read> = access %light0, 3u
-    %x_518:vec3<f32> = load %455
+    %597:ptr<uniform, vec4<f32>, read> = access %light0, 1u
+    %598:vec4<f32> = load %597
+    %x_510:vec4<f32> = let %598
+    %600:f32 = access %x_510, 0u
+    %601:f32 = access %x_510, 1u
+    %602:f32 = access %x_510, 2u
+    %603:vec3<f32> = construct %600, %601, %602
+    store %param_14, %603
+    %604:ptr<uniform, vec4<f32>, read> = access %light0, 2u
+    %605:vec4<f32> = load %604
+    %x_514:vec4<f32> = let %605
+    %607:f32 = access %x_514, 0u
+    %608:f32 = access %x_514, 1u
+    %609:f32 = access %x_514, 2u
+    %610:vec3<f32> = construct %607, %608, %609
+    store %param_15, %610
+    %611:ptr<uniform, vec3<f32>, read> = access %light0, 3u
+    %612:vec3<f32> = load %611
+    %x_518:vec3<f32> = let %612
     store %param_16, %x_518
-    %x_520:f32 = load %glossiness_1
+    %614:f32 = load %glossiness_1
+    %x_520:f32 = let %614
     store %param_17, %x_520
-    %x_521:lightingInfo = call %computeHemisphericLighting_vf3_vf3_vf4_vf3_vf3_vf3_f1_, %param_11, %param_12, %param_13, %param_14, %param_15, %param_16, %param_17
+    %616:lightingInfo = call %computeHemisphericLighting_vf3_vf3_vf4_vf3_vf3_vf3_f1_, %param_11, %param_12, %param_13, %param_14, %param_15, %param_16, %param_17
+    %x_521:lightingInfo = let %616
     store %info, %x_521
     store %shadow, 1.0f
-    %459:ptr<function, vec3<f32>, read_write> = access %info, 0u
-    %x_523:vec3<f32> = load %459
-    %x_524:f32 = load %shadow
-    %x_526:vec3<f32> = load %diffuseBase
-    %463:vec3<f32> = mul %x_523, %x_524
-    %464:vec3<f32> = add %x_526, %463
-    store %diffuseBase, %464
-    %465:ptr<function, vec3<f32>, read_write> = access %info, 1u
-    %x_529:vec3<f32> = load %465
-    %x_530:f32 = load %shadow
-    %x_532:vec3<f32> = load %specularBase
-    %469:vec3<f32> = mul %x_529, %x_530
-    %470:vec3<f32> = add %x_532, %469
-    store %specularBase, %470
-    %x_535:vec3<f32> = load %diffuseBase
-    %x_536:vec3<f32> = load %rgb1
-    %473:vec3<f32> = mul %x_535, %x_536
-    store %diffuseOutput, %473
-    %x_539:vec3<f32> = load %specularBase
-    %x_540:vec3<f32> = load %u_Color
-    %476:vec3<f32> = mul %x_539, %x_540
-    store %specularOutput, %476
-    %x_543:vec3<f32> = load %diffuseOutput
-    %x_544:vec3<f32> = load %specularOutput
-    %479:vec3<f32> = add %x_543, %x_544
-    store %output3, %479
-    %x_548:vec3<f32> = load %output3
-    %481:f32 = access %x_548, 0u
-    %482:f32 = access %x_548, 1u
-    %483:f32 = access %x_548, 2u
-    %484:vec4<f32> = construct %481, %482, %483, 1.0f
-    store %glFragColor, %484
+    %618:ptr<function, vec3<f32>, read_write> = access %info, 0u
+    %619:vec3<f32> = load %618
+    %x_523:vec3<f32> = let %619
+    %621:f32 = load %shadow
+    %x_524:f32 = let %621
+    %623:vec3<f32> = load %diffuseBase
+    %x_526:vec3<f32> = let %623
+    %625:vec3<f32> = mul %x_523, %x_524
+    %626:vec3<f32> = add %x_526, %625
+    store %diffuseBase, %626
+    %627:ptr<function, vec3<f32>, read_write> = access %info, 1u
+    %628:vec3<f32> = load %627
+    %x_529:vec3<f32> = let %628
+    %630:f32 = load %shadow
+    %x_530:f32 = let %630
+    %632:vec3<f32> = load %specularBase
+    %x_532:vec3<f32> = let %632
+    %634:vec3<f32> = mul %x_529, %x_530
+    %635:vec3<f32> = add %x_532, %634
+    store %specularBase, %635
+    %636:vec3<f32> = load %diffuseBase
+    %x_535:vec3<f32> = let %636
+    %638:vec3<f32> = load %rgb1
+    %x_536:vec3<f32> = let %638
+    %640:vec3<f32> = mul %x_535, %x_536
+    store %diffuseOutput, %640
+    %641:vec3<f32> = load %specularBase
+    %x_539:vec3<f32> = let %641
+    %643:vec3<f32> = load %u_Color
+    %x_540:vec3<f32> = let %643
+    %645:vec3<f32> = mul %x_539, %x_540
+    store %specularOutput, %645
+    %646:vec3<f32> = load %diffuseOutput
+    %x_543:vec3<f32> = let %646
+    %648:vec3<f32> = load %specularOutput
+    %x_544:vec3<f32> = let %648
+    %650:vec3<f32> = add %x_543, %x_544
+    store %output3, %650
+    %651:vec3<f32> = load %output3
+    %x_548:vec3<f32> = let %651
+    %653:f32 = access %x_548, 0u
+    %654:f32 = access %x_548, 1u
+    %655:f32 = access %x_548, 2u
+    %656:vec4<f32> = construct %653, %654, %655, 1.0f
+    store %glFragColor, %656
     ret
   }
 }
-%tint_symbol = @fragment func(%vMainuv_param:vec2<f32> [@location(1)], %v_output1_param:vec4<f32> [@location(0)], %gl_FrontFacing_param:bool [@front_facing], %v_uv_param:vec2<f32> [@location(3)], %v_output2_param:vec4<f32> [@location(2)]):main_out -> %b16 {
-  %b16 = block {
+%tint_symbol = @fragment func(%vMainuv_param:vec2<f32> [@location(1)], %v_output1_param:vec4<f32> [@location(0)], %gl_FrontFacing_param:bool [@front_facing], %v_uv_param:vec2<f32> [@location(3)], %v_output2_param:vec4<f32> [@location(2)]):main_out {
+  $B16: {
     store %vMainuv, %vMainuv_param
     store %v_output1, %v_output1_param
     store %gl_FrontFacing, %gl_FrontFacing_param
     store %v_uv, %v_uv_param
     store %v_output2, %v_output2_param
-    %491:void = call %main_1
-    %492:vec4<f32> = load %glFragColor
-    %493:main_out = construct %492
-    ret %493
+    %663:void = call %main_1
+    %664:vec4<f32> = load %glFragColor
+    %665:main_out = construct %664
+    ret %665
   }
 }
 
diff --git a/test/tint/bug/tint/959.wgsl.expected.ir.msl b/test/tint/bug/tint/959.wgsl.expected.ir.msl
index 45866e5..0b29009 100644
--- a/test/tint/bug/tint/959.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/959.wgsl.expected.ir.msl
@@ -1,10 +1,10 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   a:f32 @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %b0:ptr<storage, S, read> = var @binding_point(0, 0)
   %b1:ptr<storage, S, read> = var @binding_point(1, 0)
   %b2:ptr<storage, S, read> = var @binding_point(2, 0)
@@ -55,8 +55,8 @@
   %s15:ptr<handle, sampler_comparison, read> = var @binding_point(15, 300)
 }
 
-%tint_symbol = @fragment func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @fragment func():void {
+  $B2: {
     %50:S = load %b0
     %51:S = load %b1
     %52:S = load %b2
diff --git a/test/tint/bug/tint/977.spvasm.expected.ir.msl b/test/tint/bug/tint/977.spvasm.expected.ir.msl
index dd8e150..cdc3e5b 100644
--- a/test/tint/bug/tint/977.spvasm.expected.ir.msl
+++ b/test/tint/bug/tint/977.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: ResultMatrix = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: ResultMatrix = struct @align(4) {
   numbers:array<f32> @offset(0)
 }
 
@@ -18,7 +18,7 @@
   sizeB:i32 @offset(8)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %gl_GlobalInvocationID:ptr<private, vec3<u32>, read_write> = var
   %resultMatrix:ptr<storage, ResultMatrix, read_write> = var @binding_point(0, 2)
   %firstMatrix:ptr<storage, FirstMatrix, read> = var @binding_point(0, 0)
@@ -26,72 +26,77 @@
   %x_46:ptr<uniform, Uniforms, read> = var @binding_point(0, 3)
 }
 
-%binaryOperation_f1_f1_ = func(%a:ptr<function, f32, read_write>, %b:ptr<function, f32, read_write>):f32 -> %b2 {
-  %b2 = block {
+%binaryOperation_f1_f1_ = func(%a:ptr<function, f32, read_write>, %b:ptr<function, f32, read_write>):f32 {
+  $B2: {
     %x_26:ptr<function, f32, read_write> = var
     %10:f32 = load %b
     %11:bool = eq %10, 0.0f
-    if %11 [t: %b3] {  # if_1
-      %b3 = block {  # true
+    if %11 [t: $B3] {  # if_1
+      $B3: {  # true
         ret 1.0f
       }
     }
-    %x_21:f32 = load %b
-    %13:f32 = div %x_21, 2.0f
-    %14:f32 = floor %13
-    %15:f32 = mul 2.0f, %14
-    %16:f32 = sub %x_21, %15
-    %17:f32 = round %16
-    %18:bool = eq %17, 1.0f
-    %19:bool = eq %18, false
-    if %19 [t: %b4, f: %b5] {  # if_2
-      %b4 = block {  # true
-        %20:f32 = load %a
-        %21:f32 = abs %20
-        %22:f32 = load %b
-        %23:f32 = pow %21, %22
-        store %x_26, %23
+    %12:f32 = load %b
+    %x_21:f32 = let %12
+    %14:f32 = div %x_21, 2.0f
+    %15:f32 = floor %14
+    %16:f32 = mul 2.0f, %15
+    %17:f32 = sub %x_21, %16
+    %18:f32 = round %17
+    %19:bool = eq %18, 1.0f
+    %20:bool = eq %19, false
+    if %20 [t: $B4, f: $B5] {  # if_2
+      $B4: {  # true
+        %21:f32 = load %a
+        %22:f32 = abs %21
+        %23:f32 = load %b
+        %24:f32 = pow %22, %23
+        store %x_26, %24
         exit_if  # if_2
       }
-      %b5 = block {  # false
-        %24:f32 = load %a
-        %25:f32 = sign %24
-        %26:f32 = load %a
-        %27:f32 = abs %26
-        %28:f32 = load %b
-        %29:f32 = pow %27, %28
-        %30:f32 = mul %25, %29
-        store %x_26, %30
+      $B5: {  # false
+        %25:f32 = load %a
+        %26:f32 = sign %25
+        %27:f32 = let %26
+        %28:f32 = load %a
+        %29:f32 = abs %28
+        %30:f32 = load %b
+        %31:f32 = pow %29, %30
+        %32:f32 = mul %27, %31
+        store %x_26, %32
         exit_if  # if_2
       }
     }
-    %x_41:f32 = load %x_26
+    %33:f32 = load %x_26
+    %x_41:f32 = let %33
     ret %x_41
   }
 }
-%main_1 = func():void -> %b6 {
-  %b6 = block {
+%main_1 = func():void {
+  $B6: {
     %index:ptr<function, i32, read_write> = var
     %a_1:ptr<function, i32, read_write> = var
     %param:ptr<function, f32, read_write> = var
     %param_1:ptr<function, f32, read_write> = var
-    %37:u32 = load_vector_element %gl_GlobalInvocationID, 0u
-    %38:i32 = bitcast %37
-    store %index, %38
+    %40:u32 = load_vector_element %gl_GlobalInvocationID, 0u
+    %41:i32 = bitcast %40
+    store %index, %41
     store %a_1, -10i
-    %x_63:i32 = load %index
+    %42:i32 = load %index
+    %x_63:i32 = let %42
     store %param, -4.0f
     store %param_1, -3.0f
-    %x_68:f32 = call %binaryOperation_f1_f1_, %param, %param_1
-    %41:ptr<storage, f32, read_write> = access %resultMatrix, 0u, %x_63
-    store %41, %x_68
+    %44:f32 = call %binaryOperation_f1_f1_, %param, %param_1
+    %x_68:f32 = let %44
+    %46:ptr<storage, f32, read_write> = access %resultMatrix, 0u, %x_63
+    store %46, %x_68
     ret
   }
 }
-%tint_symbol_1 = @compute @workgroup_size(1, 1, 1) func(%gl_GlobalInvocationID_param:vec3<u32> [@global_invocation_id]):void -> %b7 {
-  %b7 = block {
+%tint_symbol_1 = @compute @workgroup_size(1, 1, 1) func(%gl_GlobalInvocationID_param:vec3<u32> [@global_invocation_id]):void {
+  $B7: {
     store %gl_GlobalInvocationID, %gl_GlobalInvocationID_param
-    %44:void = call %main_1
+    %49:void = call %main_1
     ret
   }
 }
diff --git a/test/tint/bug/tint/978.wgsl.expected.ir.msl b/test/tint/bug/tint/978.wgsl.expected.ir.msl
index c87dbdf..414ed77 100644
--- a/test/tint/bug/tint/978.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/978.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:775 internal compiler error: FragmentOutput = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: FragmentOutput = struct @align(16) {
   color:vec4<f32> @offset(0), @location(0)
 }
 
@@ -8,24 +8,26 @@
   vUv:vec2<f32> @offset(0), @location(2)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %depthMap:ptr<handle, texture_depth_2d, read> = var @binding_point(1, 5)
   %texSampler:ptr<handle, sampler, read> = var @binding_point(1, 3)
 }
 
-%tint_symbol = @fragment func(%fIn:FragmentInput):FragmentOutput -> %b2 {
-  %b2 = block {
+%tint_symbol = @fragment func(%fIn:FragmentInput):FragmentOutput {
+  $B2: {
     %5:texture_depth_2d = load %depthMap
     %6:sampler = load %texSampler
     %7:vec2<f32> = access %fIn, 0u
-    %sample:f32 = textureSample %5, %6, %7
-    %color:vec3<f32> = construct %sample, %sample, %sample
+    %8:f32 = textureSample %5, %6, %7
+    %sample:f32 = let %8
+    %10:vec3<f32> = construct %sample, %sample, %sample
+    %color:vec3<f32> = let %10
     %fOut:ptr<function, FragmentOutput, read_write> = var
-    %11:ptr<function, vec4<f32>, read_write> = access %fOut, 0u
-    %12:vec4<f32> = construct %color, 1.0f
-    store %11, %12
-    %13:FragmentOutput = load %fOut
-    ret %13
+    %13:ptr<function, vec4<f32>, read_write> = access %fOut, 0u
+    %14:vec4<f32> = construct %color, 1.0f
+    store %13, %14
+    %15:FragmentOutput = load %fOut
+    ret %15
   }
 }
 
diff --git a/test/tint/bug/tint/980.wgsl.expected.ir.msl b/test/tint/bug/tint/980.wgsl.expected.ir.msl
index 7539644..1ead1ce 100644
--- a/test/tint/bug/tint/980.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/980.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(16) {
   v:vec3<f32> @offset(0)
   i:u32 @offset(12)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %io:ptr<storage, S, read_write> = var @binding_point(0, 0)
 }
 
-%Bad = func(%index:u32, %rd:vec3<f32>):vec3<f32> -> %b2 {
-  %b2 = block {
+%Bad = func(%index:u32, %rd:vec3<f32>):vec3<f32> {
+  $B2: {
     %normal:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(0.0f)
     %6:f32 = access %rd, %index
     %7:f32 = sign %6
@@ -21,8 +21,8 @@
     ret %10
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%idx:u32 [@local_invocation_index]):void -> %b3 {
-  %b3 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%idx:u32 [@local_invocation_index]):void {
+  $B3: {
     %13:ptr<storage, vec3<f32>, read_write> = access %io, 0u
     %14:ptr<storage, u32, read_write> = access %io, 1u
     %15:u32 = load %14
diff --git a/test/tint/bug/tint/990.wgsl.expected.ir.msl b/test/tint/bug/tint/990.wgsl.expected.ir.msl
index cdbf128..5c3a247 100644
--- a/test/tint/bug/tint/990.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/990.wgsl.expected.ir.msl
@@ -1,9 +1,22 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+void f() {
+  int i = 0;
+  {
+    thread int* const p = i;
+    while(true) {
+      if (false) {
+      } else {
+        break;
+      }
+      continue;
+    }
+  }
+}
+program_source:7:23: error: cannot initialize a variable of type 'int *const' with an lvalue of type 'int'
+    thread int* const p = i;
+                      ^   ~
+
diff --git a/test/tint/bug/tint/993.wgsl.expected.ir.msl b/test/tint/bug/tint/993.wgsl.expected.ir.msl
index a0b521d..f304267 100644
--- a/test/tint/bug/tint/993.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/993.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Constants = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Constants = struct @align(4) {
   zero:u32 @offset(0)
 }
 
@@ -12,14 +12,14 @@
   data:array<atomic<i32>, 3> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %constants:ptr<uniform, Constants, read> = var @binding_point(1, 0)
   %result:ptr<storage, Result, read_write> = var @binding_point(1, 1)
   %s:ptr<storage, TestData, read_write> = var @binding_point(0, 0)
 }
 
-%runTest = func():i32 -> %b2 {
-  %b2 = block {
+%runTest = func():i32 {
+  $B2: {
     %5:ptr<uniform, u32, read> = access %constants, 0u
     %6:u32 = load %5
     %7:u32 = construct %6
@@ -29,8 +29,8 @@
     ret %10
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %12:ptr<storage, u32, read_write> = access %result, 0u
     %13:i32 = call %runTest
     %14:u32 = convert %13
diff --git a/test/tint/bug/tint/998.wgsl.expected.ir.msl b/test/tint/bug/tint/998.wgsl.expected.ir.msl
index 2ca622c..9970216 100644
--- a/test/tint/bug/tint/998.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/998.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Constants = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Constants = struct @align(4) {
   zero:u32 @offset(0)
 }
 
@@ -12,14 +12,14 @@
   data:array<u32, 3> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %constants:ptr<uniform, Constants, read> = var @binding_point(1, 0)
-  %result:ptr<storage, Result, read_write> = var @binding_point(1, 1)
+  %result:ptr<storage, Result, read_write> = var @binding_point(0, 1)
   %s:ptr<private, S, read_write> = var
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %5:ptr<uniform, u32, read> = access %constants, 0u
     %6:u32 = load %5
     %7:ptr<private, u32, read_write> = access %s, 0u, %6
diff --git a/test/tint/builtins/arrayLength/complex_via_let.wgsl.expected.ir.msl b/test/tint/builtins/arrayLength/complex_via_let.wgsl.expected.ir.msl
index 32e1f53..99a5e9a 100644
--- a/test/tint/builtins/arrayLength/complex_via_let.wgsl.expected.ir.msl
+++ b/test/tint/builtins/arrayLength/complex_via_let.wgsl.expected.ir.msl
@@ -1,18 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   a:array<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %G:ptr<storage, S, read> = var @binding_point(0, 0)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %p:ptr<storage, S, read> = let %G
-    %p2:ptr<storage, array<i32>, read> = access %p, 0u
-    %l1:u32 = arrayLength %p2
+    %4:ptr<storage, array<i32>, read> = access %p, 0u
+    %p2:ptr<storage, array<i32>, read> = let %4
+    %6:u32 = arrayLength %p2
+    %l1:u32 = let %6
     ret
   }
 }
diff --git a/test/tint/builtins/arrayLength/complex_via_let_no_struct.wgsl.expected.ir.msl b/test/tint/builtins/arrayLength/complex_via_let_no_struct.wgsl.expected.ir.msl
index bade5f8..0b6198a 100644
--- a/test/tint/builtins/arrayLength/complex_via_let_no_struct.wgsl.expected.ir.msl
+++ b/test/tint/builtins/arrayLength/complex_via_let_no_struct.wgsl.expected.ir.msl
@@ -1,14 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %G:ptr<storage, array<i32>, read> = var @binding_point(0, 0)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %p:ptr<storage, array<i32>, read> = let %G
     %p2:ptr<storage, array<i32>, read> = let %p
-    %l1:u32 = arrayLength %p2
+    %5:u32 = arrayLength %p2
+    %l1:u32 = let %5
     ret
   }
 }
diff --git a/test/tint/builtins/arrayLength/deprecated.wgsl.expected.ir.msl b/test/tint/builtins/arrayLength/deprecated.wgsl.expected.ir.msl
index aa98bce..6c50580 100644
--- a/test/tint/builtins/arrayLength/deprecated.wgsl.expected.ir.msl
+++ b/test/tint/builtins/arrayLength/deprecated.wgsl.expected.ir.msl
@@ -1,19 +1,22 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   a:array<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %G:ptr<storage, S, read> = var @binding_point(0, 0)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %3:ptr<storage, array<i32>, read> = access %G, 0u
-    %l1:u32 = arrayLength %3
-    %p:ptr<storage, array<i32>, read> = access %G, 0u
-    %l2:u32 = arrayLength %p
+    %4:u32 = arrayLength %3
+    %l1:u32 = let %4
+    %6:ptr<storage, array<i32>, read> = access %G, 0u
+    %p:ptr<storage, array<i32>, read> = let %6
+    %8:u32 = arrayLength %p
+    %l2:u32 = let %8
     ret
   }
 }
diff --git a/test/tint/builtins/arrayLength/simple.wgsl.expected.ir.msl b/test/tint/builtins/arrayLength/simple.wgsl.expected.ir.msl
index 1e92cc0..e995e26 100644
--- a/test/tint/builtins/arrayLength/simple.wgsl.expected.ir.msl
+++ b/test/tint/builtins/arrayLength/simple.wgsl.expected.ir.msl
@@ -1,17 +1,18 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   a:array<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %G:ptr<storage, S, read> = var @binding_point(0, 0)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %3:ptr<storage, array<i32>, read> = access %G, 0u
-    %l1:u32 = arrayLength %3
+    %4:u32 = arrayLength %3
+    %l1:u32 = let %4
     ret
   }
 }
diff --git a/test/tint/builtins/arrayLength/simple_no_struct.wgsl.expected.ir.msl b/test/tint/builtins/arrayLength/simple_no_struct.wgsl.expected.ir.msl
index 383e3ec..87f5b82 100644
--- a/test/tint/builtins/arrayLength/simple_no_struct.wgsl.expected.ir.msl
+++ b/test/tint/builtins/arrayLength/simple_no_struct.wgsl.expected.ir.msl
@@ -1,12 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %G:ptr<storage, array<i32>, read> = var @binding_point(0, 0)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %l1:u32 = arrayLength %G
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %3:u32 = arrayLength %G
+    %l1:u32 = let %3
     ret
   }
 }
diff --git a/test/tint/builtins/arrayLength/via_let.wgsl.expected.ir.msl b/test/tint/builtins/arrayLength/via_let.wgsl.expected.ir.msl
index 46e5813..a0adc21 100644
--- a/test/tint/builtins/arrayLength/via_let.wgsl.expected.ir.msl
+++ b/test/tint/builtins/arrayLength/via_let.wgsl.expected.ir.msl
@@ -1,18 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   a:array<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %G:ptr<storage, S, read> = var @binding_point(0, 0)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %p:ptr<storage, array<i32>, read> = access %G, 0u
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %3:ptr<storage, array<i32>, read> = access %G, 0u
+    %p:ptr<storage, array<i32>, read> = let %3
     %p2:ptr<storage, array<i32>, read> = let %p
-    %l1:u32 = arrayLength %p2
+    %6:u32 = arrayLength %p2
+    %l1:u32 = let %6
     ret
   }
 }
diff --git a/test/tint/builtins/arrayLength/via_let_complex.wgsl.expected.ir.msl b/test/tint/builtins/arrayLength/via_let_complex.wgsl.expected.ir.msl
index 5350010..94eb3df 100644
--- a/test/tint/builtins/arrayLength/via_let_complex.wgsl.expected.ir.msl
+++ b/test/tint/builtins/arrayLength/via_let_complex.wgsl.expected.ir.msl
@@ -1,19 +1,21 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   a:array<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %G:ptr<storage, S, read> = var @binding_point(0, 0)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %p:ptr<storage, S, read> = let %G
     %p2:ptr<storage, S, read> = let %p
-    %p3:ptr<storage, array<i32>, read> = access %p, 0u
-    %l1:u32 = arrayLength %p3
+    %5:ptr<storage, array<i32>, read> = access %p, 0u
+    %p3:ptr<storage, array<i32>, read> = let %5
+    %7:u32 = arrayLength %p3
+    %l1:u32 = let %7
     ret
   }
 }
diff --git a/test/tint/builtins/arrayLength/via_let_complex_no_struct.wgsl.expected.ir.msl b/test/tint/builtins/arrayLength/via_let_complex_no_struct.wgsl.expected.ir.msl
index 43af5f8..e276ea6 100644
--- a/test/tint/builtins/arrayLength/via_let_complex_no_struct.wgsl.expected.ir.msl
+++ b/test/tint/builtins/arrayLength/via_let_complex_no_struct.wgsl.expected.ir.msl
@@ -1,15 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %G:ptr<storage, array<i32>, read> = var @binding_point(0, 0)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %p:ptr<storage, array<i32>, read> = let %G
     %p2:ptr<storage, array<i32>, read> = let %p
     %p3:ptr<storage, array<i32>, read> = let %p
-    %l1:u32 = arrayLength %p3
+    %6:u32 = arrayLength %p3
+    %l1:u32 = let %6
     ret
   }
 }
diff --git a/test/tint/builtins/arrayLength/via_let_no_struct.wgsl.expected.ir.msl b/test/tint/builtins/arrayLength/via_let_no_struct.wgsl.expected.ir.msl
index bade5f8..0b6198a 100644
--- a/test/tint/builtins/arrayLength/via_let_no_struct.wgsl.expected.ir.msl
+++ b/test/tint/builtins/arrayLength/via_let_no_struct.wgsl.expected.ir.msl
@@ -1,14 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %G:ptr<storage, array<i32>, read> = var @binding_point(0, 0)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %p:ptr<storage, array<i32>, read> = let %G
     %p2:ptr<storage, array<i32>, read> = let %p
-    %l1:u32 = arrayLength %p2
+    %5:u32 = arrayLength %p2
+    %l1:u32 = let %5
     ret
   }
 }
diff --git a/test/tint/builtins/atomicStore/array/aliased_arrays.spvasm.expected.ir.msl b/test/tint/builtins/atomicStore/array/aliased_arrays.spvasm.expected.ir.msl
index efdd3b1..92c0fdd 100644
--- a/test/tint/builtins/atomicStore/array/aliased_arrays.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomicStore/array/aliased_arrays.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomicStore/array/aliased_arrays.wgsl.expected.ir.msl b/test/tint/builtins/atomicStore/array/aliased_arrays.wgsl.expected.ir.msl
index 40823e3..3fa6a4b 100644
--- a/test/tint/builtins/atomicStore/array/aliased_arrays.wgsl.expected.ir.msl
+++ b/test/tint/builtins/atomicStore/array/aliased_arrays.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: atomicStore
+../../src/tint/lang/msl/writer/printer/printer.cc:388 internal compiler error: Switch() matched no cases. Type: tint::core::ir::BlockParam
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomicStore/array/array.spvasm.expected.ir.msl b/test/tint/builtins/atomicStore/array/array.spvasm.expected.ir.msl
index efdd3b1..92c0fdd 100644
--- a/test/tint/builtins/atomicStore/array/array.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomicStore/array/array.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomicStore/array/array.wgsl.expected.ir.msl b/test/tint/builtins/atomicStore/array/array.wgsl.expected.ir.msl
index 40823e3..3fa6a4b 100644
--- a/test/tint/builtins/atomicStore/array/array.wgsl.expected.ir.msl
+++ b/test/tint/builtins/atomicStore/array/array.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: atomicStore
+../../src/tint/lang/msl/writer/printer/printer.cc:388 internal compiler error: Switch() matched no cases. Type: tint::core::ir::BlockParam
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomicStore/array/arrays.spvasm.expected.ir.msl b/test/tint/builtins/atomicStore/array/arrays.spvasm.expected.ir.msl
index efdd3b1..92c0fdd 100644
--- a/test/tint/builtins/atomicStore/array/arrays.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomicStore/array/arrays.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomicStore/array/arrays.wgsl.expected.ir.msl b/test/tint/builtins/atomicStore/array/arrays.wgsl.expected.ir.msl
index 40823e3..3fa6a4b 100644
--- a/test/tint/builtins/atomicStore/array/arrays.wgsl.expected.ir.msl
+++ b/test/tint/builtins/atomicStore/array/arrays.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: atomicStore
+../../src/tint/lang/msl/writer/printer/printer.cc:388 internal compiler error: Switch() matched no cases. Type: tint::core::ir::BlockParam
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomicStore/struct/array_of_struct.spvasm.expected.ir.msl b/test/tint/builtins/atomicStore/struct/array_of_struct.spvasm.expected.ir.msl
index efdd3b1..92c0fdd 100644
--- a/test/tint/builtins/atomicStore/struct/array_of_struct.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomicStore/struct/array_of_struct.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomicStore/struct/array_of_struct.wgsl.expected.ir.msl b/test/tint/builtins/atomicStore/struct/array_of_struct.wgsl.expected.ir.msl
index 40823e3..3fa6a4b 100644
--- a/test/tint/builtins/atomicStore/struct/array_of_struct.wgsl.expected.ir.msl
+++ b/test/tint/builtins/atomicStore/struct/array_of_struct.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: atomicStore
+../../src/tint/lang/msl/writer/printer/printer.cc:388 internal compiler error: Switch() matched no cases. Type: tint::core::ir::BlockParam
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomicStore/struct/flat_multiple_atomics.spvasm.expected.ir.msl b/test/tint/builtins/atomicStore/struct/flat_multiple_atomics.spvasm.expected.ir.msl
index 28251dc..92c0fdd 100644
--- a/test/tint/builtins/atomicStore/struct/flat_multiple_atomics.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomicStore/struct/flat_multiple_atomics.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomicStore/struct/flat_multiple_atomics.wgsl.expected.ir.msl b/test/tint/builtins/atomicStore/struct/flat_multiple_atomics.wgsl.expected.ir.msl
index 40823e3..92c0fdd 100644
--- a/test/tint/builtins/atomicStore/struct/flat_multiple_atomics.wgsl.expected.ir.msl
+++ b/test/tint/builtins/atomicStore/struct/flat_multiple_atomics.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: atomicStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomicStore/struct/flat_single_atomic.spvasm.expected.ir.msl b/test/tint/builtins/atomicStore/struct/flat_single_atomic.spvasm.expected.ir.msl
index 28251dc..92c0fdd 100644
--- a/test/tint/builtins/atomicStore/struct/flat_single_atomic.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomicStore/struct/flat_single_atomic.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomicStore/struct/flat_single_atomic.wgsl.expected.ir.msl b/test/tint/builtins/atomicStore/struct/flat_single_atomic.wgsl.expected.ir.msl
index 40823e3..92c0fdd 100644
--- a/test/tint/builtins/atomicStore/struct/flat_single_atomic.wgsl.expected.ir.msl
+++ b/test/tint/builtins/atomicStore/struct/flat_single_atomic.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: atomicStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomicStore/struct/nested.spvasm.expected.ir.msl b/test/tint/builtins/atomicStore/struct/nested.spvasm.expected.ir.msl
index 28251dc..92c0fdd 100644
--- a/test/tint/builtins/atomicStore/struct/nested.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomicStore/struct/nested.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomicStore/struct/nested.wgsl.expected.ir.msl b/test/tint/builtins/atomicStore/struct/nested.wgsl.expected.ir.msl
index 40823e3..92c0fdd 100644
--- a/test/tint/builtins/atomicStore/struct/nested.wgsl.expected.ir.msl
+++ b/test/tint/builtins/atomicStore/struct/nested.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: atomicStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomicStore/struct/struct_of_array.spvasm.expected.ir.msl b/test/tint/builtins/atomicStore/struct/struct_of_array.spvasm.expected.ir.msl
index 28251dc..92c0fdd 100644
--- a/test/tint/builtins/atomicStore/struct/struct_of_array.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomicStore/struct/struct_of_array.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomicStore/struct/struct_of_array.wgsl.expected.ir.msl b/test/tint/builtins/atomicStore/struct/struct_of_array.wgsl.expected.ir.msl
index 40823e3..3fa6a4b 100644
--- a/test/tint/builtins/atomicStore/struct/struct_of_array.wgsl.expected.ir.msl
+++ b/test/tint/builtins/atomicStore/struct/struct_of_array.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: atomicStore
+../../src/tint/lang/msl/writer/printer/printer.cc:388 internal compiler error: Switch() matched no cases. Type: tint::core::ir::BlockParam
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomicStore/struct/via_ptr_let.spvasm.expected.ir.msl b/test/tint/builtins/atomicStore/struct/via_ptr_let.spvasm.expected.ir.msl
index 28251dc..92c0fdd 100644
--- a/test/tint/builtins/atomicStore/struct/via_ptr_let.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomicStore/struct/via_ptr_let.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomicStore/struct/via_ptr_let.wgsl.expected.ir.msl b/test/tint/builtins/atomicStore/struct/via_ptr_let.wgsl.expected.ir.msl
index 40823e3..92c0fdd 100644
--- a/test/tint/builtins/atomicStore/struct/via_ptr_let.wgsl.expected.ir.msl
+++ b/test/tint/builtins/atomicStore/struct/via_ptr_let.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: atomicStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicAdd/storage_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicAdd/storage_i32.spvasm.expected.ir.msl
index 018333f..68658f0 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicAdd/storage_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicAdd/storage_i32.spvasm.expected.ir.msl
@@ -1,43 +1,44 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: SB_RW_atomic = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW_atomic = struct @align(4) {
   arg_0:atomic<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW_atomic, read_write> = var @binding_point(0, 0)
 }
 
-%atomicAdd_d32fe4 = func():void -> %b2 {
-  %b2 = block {
+%atomicAdd_d32fe4 = func():void {
+  $B2: {
     %res:ptr<function, i32, read_write> = var, 0i
     %4:ptr<storage, atomic<i32>, read_write> = access %sb_rw, 0u
-    %x_9:i32 = atomicAdd %4, 1i
+    %5:i32 = atomicAdd %4, 1i
+    %x_9:i32 = let %5
     store %res, %x_9
     ret
   }
 }
-%fragment_main_1 = func():void -> %b3 {
-  %b3 = block {
-    %7:void = call %atomicAdd_d32fe4
+%fragment_main_1 = func():void {
+  $B3: {
+    %8:void = call %atomicAdd_d32fe4
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %9:void = call %fragment_main_1
+%fragment_main = @fragment func():void {
+  $B4: {
+    %10:void = call %fragment_main_1
     ret
   }
 }
-%compute_main_1 = func():void -> %b5 {
-  %b5 = block {
-    %11:void = call %atomicAdd_d32fe4
+%compute_main_1 = func():void {
+  $B5: {
+    %12:void = call %atomicAdd_d32fe4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {
-  %b6 = block {
-    %13:void = call %compute_main_1
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B6: {
+    %14:void = call %compute_main_1
     ret
   }
 }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicAdd/storage_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicAdd/storage_u32.spvasm.expected.ir.msl
index 6095252..1375ee3 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicAdd/storage_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicAdd/storage_u32.spvasm.expected.ir.msl
@@ -1,43 +1,44 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: SB_RW_atomic = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW_atomic = struct @align(4) {
   arg_0:atomic<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW_atomic, read_write> = var @binding_point(0, 0)
 }
 
-%atomicAdd_8a199a = func():void -> %b2 {
-  %b2 = block {
+%atomicAdd_8a199a = func():void {
+  $B2: {
     %res:ptr<function, u32, read_write> = var, 0u
     %4:ptr<storage, atomic<u32>, read_write> = access %sb_rw, 0u
-    %x_9:u32 = atomicAdd %4, 1u
+    %5:u32 = atomicAdd %4, 1u
+    %x_9:u32 = let %5
     store %res, %x_9
     ret
   }
 }
-%fragment_main_1 = func():void -> %b3 {
-  %b3 = block {
-    %7:void = call %atomicAdd_8a199a
+%fragment_main_1 = func():void {
+  $B3: {
+    %8:void = call %atomicAdd_8a199a
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %9:void = call %fragment_main_1
+%fragment_main = @fragment func():void {
+  $B4: {
+    %10:void = call %fragment_main_1
     ret
   }
 }
-%compute_main_1 = func():void -> %b5 {
-  %b5 = block {
-    %11:void = call %atomicAdd_8a199a
+%compute_main_1 = func():void {
+  $B5: {
+    %12:void = call %atomicAdd_8a199a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {
-  %b6 = block {
-    %13:void = call %compute_main_1
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B6: {
+    %14:void = call %compute_main_1
     ret
   }
 }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_i32.spvasm.expected.ir.msl
index b38060a..f7dc0d0 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_i32.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicAdd
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_u32.spvasm.expected.ir.msl
index b38060a..f7dc0d0 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicAdd/workgroup_u32.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicAdd
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicAnd/storage_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicAnd/storage_i32.spvasm.expected.ir.msl
index 43b4644..f636432 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicAnd/storage_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicAnd/storage_i32.spvasm.expected.ir.msl
@@ -1,43 +1,44 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: SB_RW_atomic = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW_atomic = struct @align(4) {
   arg_0:atomic<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW_atomic, read_write> = var @binding_point(0, 0)
 }
 
-%atomicAnd_152966 = func():void -> %b2 {
-  %b2 = block {
+%atomicAnd_152966 = func():void {
+  $B2: {
     %res:ptr<function, i32, read_write> = var, 0i
     %4:ptr<storage, atomic<i32>, read_write> = access %sb_rw, 0u
-    %x_9:i32 = atomicAnd %4, 1i
+    %5:i32 = atomicAnd %4, 1i
+    %x_9:i32 = let %5
     store %res, %x_9
     ret
   }
 }
-%fragment_main_1 = func():void -> %b3 {
-  %b3 = block {
-    %7:void = call %atomicAnd_152966
+%fragment_main_1 = func():void {
+  $B3: {
+    %8:void = call %atomicAnd_152966
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %9:void = call %fragment_main_1
+%fragment_main = @fragment func():void {
+  $B4: {
+    %10:void = call %fragment_main_1
     ret
   }
 }
-%compute_main_1 = func():void -> %b5 {
-  %b5 = block {
-    %11:void = call %atomicAnd_152966
+%compute_main_1 = func():void {
+  $B5: {
+    %12:void = call %atomicAnd_152966
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {
-  %b6 = block {
-    %13:void = call %compute_main_1
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B6: {
+    %14:void = call %compute_main_1
     ret
   }
 }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicAnd/storage_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicAnd/storage_u32.spvasm.expected.ir.msl
index a07401c..dd4689a 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicAnd/storage_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicAnd/storage_u32.spvasm.expected.ir.msl
@@ -1,43 +1,44 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: SB_RW_atomic = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW_atomic = struct @align(4) {
   arg_0:atomic<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW_atomic, read_write> = var @binding_point(0, 0)
 }
 
-%atomicAnd_85a8d9 = func():void -> %b2 {
-  %b2 = block {
+%atomicAnd_85a8d9 = func():void {
+  $B2: {
     %res:ptr<function, u32, read_write> = var, 0u
     %4:ptr<storage, atomic<u32>, read_write> = access %sb_rw, 0u
-    %x_9:u32 = atomicAnd %4, 1u
+    %5:u32 = atomicAnd %4, 1u
+    %x_9:u32 = let %5
     store %res, %x_9
     ret
   }
 }
-%fragment_main_1 = func():void -> %b3 {
-  %b3 = block {
-    %7:void = call %atomicAnd_85a8d9
+%fragment_main_1 = func():void {
+  $B3: {
+    %8:void = call %atomicAnd_85a8d9
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %9:void = call %fragment_main_1
+%fragment_main = @fragment func():void {
+  $B4: {
+    %10:void = call %fragment_main_1
     ret
   }
 }
-%compute_main_1 = func():void -> %b5 {
-  %b5 = block {
-    %11:void = call %atomicAnd_85a8d9
+%compute_main_1 = func():void {
+  $B5: {
+    %12:void = call %atomicAnd_85a8d9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {
-  %b6 = block {
-    %13:void = call %compute_main_1
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B6: {
+    %14:void = call %compute_main_1
     ret
   }
 }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_i32.spvasm.expected.ir.msl
index b38060a..cb4c94c 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_i32.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicAnd
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_u32.spvasm.expected.ir.msl
index b38060a..cb4c94c 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicAnd/workgroup_u32.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicAnd
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/storage_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/storage_i32.spvasm.expected.ir.msl
index 6a2b56c..14dcecd 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/storage_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/storage_i32.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: SB_RW_atomic = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW_atomic = struct @align(4) {
   arg_0:atomic<i32> @offset(0)
 }
 
@@ -14,44 +14,45 @@
   exchanged:bool @offset(4)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW_atomic, read_write> = var @binding_point(0, 0)
 }
 
-%atomicCompareExchangeWeak_1bd40a = func():void -> %b2 {
-  %b2 = block {
+%atomicCompareExchangeWeak_1bd40a = func():void {
+  $B2: {
     %res:ptr<function, x__atomic_compare_exchange_resulti32, read_write> = var, x__atomic_compare_exchange_resulti32(0i, false)
     %4:ptr<storage, atomic<i32>, read_write> = access %sb_rw, 0u
     %5:__atomic_compare_exchange_result_i32 = atomicCompareExchangeWeak %4, 1i, 1i
-    %old_value_1:i32 = access %5, 0u
+    %6:i32 = access %5, 0u
+    %old_value_1:i32 = let %6
     %x_19:i32 = let %old_value_1
-    %8:bool = eq %x_19, 1i
-    %9:x__atomic_compare_exchange_resulti32 = construct %x_19, %8
-    store %res, %9
+    %9:bool = eq %x_19, 1i
+    %10:x__atomic_compare_exchange_resulti32 = construct %x_19, %9
+    store %res, %10
     ret
   }
 }
-%fragment_main_1 = func():void -> %b3 {
-  %b3 = block {
-    %11:void = call %atomicCompareExchangeWeak_1bd40a
+%fragment_main_1 = func():void {
+  $B3: {
+    %12:void = call %atomicCompareExchangeWeak_1bd40a
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %13:void = call %fragment_main_1
+%fragment_main = @fragment func():void {
+  $B4: {
+    %14:void = call %fragment_main_1
     ret
   }
 }
-%compute_main_1 = func():void -> %b5 {
-  %b5 = block {
-    %15:void = call %atomicCompareExchangeWeak_1bd40a
+%compute_main_1 = func():void {
+  $B5: {
+    %16:void = call %atomicCompareExchangeWeak_1bd40a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {
-  %b6 = block {
-    %17:void = call %compute_main_1
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B6: {
+    %18:void = call %compute_main_1
     ret
   }
 }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/storage_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/storage_u32.spvasm.expected.ir.msl
index 3a51a5b..eec1176 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/storage_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/storage_u32.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: SB_RW_atomic = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW_atomic = struct @align(4) {
   arg_0:atomic<u32> @offset(0)
 }
 
@@ -14,44 +14,45 @@
   exchanged:bool @offset(4)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW_atomic, read_write> = var @binding_point(0, 0)
 }
 
-%atomicCompareExchangeWeak_63d8e6 = func():void -> %b2 {
-  %b2 = block {
+%atomicCompareExchangeWeak_63d8e6 = func():void {
+  $B2: {
     %res:ptr<function, x__atomic_compare_exchange_resultu32, read_write> = var, x__atomic_compare_exchange_resultu32(0u, false)
     %4:ptr<storage, atomic<u32>, read_write> = access %sb_rw, 0u
     %5:__atomic_compare_exchange_result_u32 = atomicCompareExchangeWeak %4, 1u, 1u
-    %old_value_1:u32 = access %5, 0u
+    %6:u32 = access %5, 0u
+    %old_value_1:u32 = let %6
     %x_17:u32 = let %old_value_1
-    %8:bool = eq %x_17, 1u
-    %9:x__atomic_compare_exchange_resultu32 = construct %x_17, %8
-    store %res, %9
+    %9:bool = eq %x_17, 1u
+    %10:x__atomic_compare_exchange_resultu32 = construct %x_17, %9
+    store %res, %10
     ret
   }
 }
-%fragment_main_1 = func():void -> %b3 {
-  %b3 = block {
-    %11:void = call %atomicCompareExchangeWeak_63d8e6
+%fragment_main_1 = func():void {
+  $B3: {
+    %12:void = call %atomicCompareExchangeWeak_63d8e6
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %13:void = call %fragment_main_1
+%fragment_main = @fragment func():void {
+  $B4: {
+    %14:void = call %fragment_main_1
     ret
   }
 }
-%compute_main_1 = func():void -> %b5 {
-  %b5 = block {
-    %15:void = call %atomicCompareExchangeWeak_63d8e6
+%compute_main_1 = func():void {
+  $B5: {
+    %16:void = call %atomicCompareExchangeWeak_63d8e6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {
-  %b6 = block {
-    %17:void = call %compute_main_1
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B6: {
+    %18:void = call %compute_main_1
     ret
   }
 }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.ir.msl
index b38060a..b4e0e6d 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicCompareExchangeWeak
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.ir.msl
index b38060a..b4e0e6d 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicCompareExchangeWeak
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicExchange/storage_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicExchange/storage_i32.spvasm.expected.ir.msl
index e4cf48a..89fae49 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicExchange/storage_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicExchange/storage_i32.spvasm.expected.ir.msl
@@ -1,43 +1,44 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: SB_RW_atomic = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW_atomic = struct @align(4) {
   arg_0:atomic<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW_atomic, read_write> = var @binding_point(0, 0)
 }
 
-%atomicExchange_f2e22f = func():void -> %b2 {
-  %b2 = block {
+%atomicExchange_f2e22f = func():void {
+  $B2: {
     %res:ptr<function, i32, read_write> = var, 0i
     %4:ptr<storage, atomic<i32>, read_write> = access %sb_rw, 0u
-    %x_9:i32 = atomicExchange %4, 1i
+    %5:i32 = atomicExchange %4, 1i
+    %x_9:i32 = let %5
     store %res, %x_9
     ret
   }
 }
-%fragment_main_1 = func():void -> %b3 {
-  %b3 = block {
-    %7:void = call %atomicExchange_f2e22f
+%fragment_main_1 = func():void {
+  $B3: {
+    %8:void = call %atomicExchange_f2e22f
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %9:void = call %fragment_main_1
+%fragment_main = @fragment func():void {
+  $B4: {
+    %10:void = call %fragment_main_1
     ret
   }
 }
-%compute_main_1 = func():void -> %b5 {
-  %b5 = block {
-    %11:void = call %atomicExchange_f2e22f
+%compute_main_1 = func():void {
+  $B5: {
+    %12:void = call %atomicExchange_f2e22f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {
-  %b6 = block {
-    %13:void = call %compute_main_1
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B6: {
+    %14:void = call %compute_main_1
     ret
   }
 }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicExchange/storage_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicExchange/storage_u32.spvasm.expected.ir.msl
index f846387..6eb9ff0 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicExchange/storage_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicExchange/storage_u32.spvasm.expected.ir.msl
@@ -1,43 +1,44 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: SB_RW_atomic = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW_atomic = struct @align(4) {
   arg_0:atomic<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW_atomic, read_write> = var @binding_point(0, 0)
 }
 
-%atomicExchange_d59712 = func():void -> %b2 {
-  %b2 = block {
+%atomicExchange_d59712 = func():void {
+  $B2: {
     %res:ptr<function, u32, read_write> = var, 0u
     %4:ptr<storage, atomic<u32>, read_write> = access %sb_rw, 0u
-    %x_9:u32 = atomicExchange %4, 1u
+    %5:u32 = atomicExchange %4, 1u
+    %x_9:u32 = let %5
     store %res, %x_9
     ret
   }
 }
-%fragment_main_1 = func():void -> %b3 {
-  %b3 = block {
-    %7:void = call %atomicExchange_d59712
+%fragment_main_1 = func():void {
+  $B3: {
+    %8:void = call %atomicExchange_d59712
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %9:void = call %fragment_main_1
+%fragment_main = @fragment func():void {
+  $B4: {
+    %10:void = call %fragment_main_1
     ret
   }
 }
-%compute_main_1 = func():void -> %b5 {
-  %b5 = block {
-    %11:void = call %atomicExchange_d59712
+%compute_main_1 = func():void {
+  $B5: {
+    %12:void = call %atomicExchange_d59712
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {
-  %b6 = block {
-    %13:void = call %compute_main_1
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B6: {
+    %14:void = call %compute_main_1
     ret
   }
 }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_i32.spvasm.expected.ir.msl
index b38060a..2f8d44e 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_i32.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicExchange
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_u32.spvasm.expected.ir.msl
index b38060a..2f8d44e 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicExchange/workgroup_u32.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicExchange
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicLoad/storage_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicLoad/storage_i32.spvasm.expected.ir.msl
index 1b06340..7b20853 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicLoad/storage_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicLoad/storage_i32.spvasm.expected.ir.msl
@@ -1,43 +1,44 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: SB_RW_atomic = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW_atomic = struct @align(4) {
   arg_0:atomic<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW_atomic, read_write> = var @binding_point(0, 0)
 }
 
-%atomicLoad_0806ad = func():void -> %b2 {
-  %b2 = block {
+%atomicLoad_0806ad = func():void {
+  $B2: {
     %res:ptr<function, i32, read_write> = var, 0i
     %4:ptr<storage, atomic<i32>, read_write> = access %sb_rw, 0u
-    %x_9:i32 = atomicLoad %4
+    %5:i32 = atomicLoad %4
+    %x_9:i32 = let %5
     store %res, %x_9
     ret
   }
 }
-%fragment_main_1 = func():void -> %b3 {
-  %b3 = block {
-    %7:void = call %atomicLoad_0806ad
+%fragment_main_1 = func():void {
+  $B3: {
+    %8:void = call %atomicLoad_0806ad
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %9:void = call %fragment_main_1
+%fragment_main = @fragment func():void {
+  $B4: {
+    %10:void = call %fragment_main_1
     ret
   }
 }
-%compute_main_1 = func():void -> %b5 {
-  %b5 = block {
-    %11:void = call %atomicLoad_0806ad
+%compute_main_1 = func():void {
+  $B5: {
+    %12:void = call %atomicLoad_0806ad
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {
-  %b6 = block {
-    %13:void = call %compute_main_1
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B6: {
+    %14:void = call %compute_main_1
     ret
   }
 }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicLoad/storage_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicLoad/storage_u32.spvasm.expected.ir.msl
index ccc1975..3c25b76 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicLoad/storage_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicLoad/storage_u32.spvasm.expected.ir.msl
@@ -1,43 +1,44 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: SB_RW_atomic = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW_atomic = struct @align(4) {
   arg_0:atomic<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW_atomic, read_write> = var @binding_point(0, 0)
 }
 
-%atomicLoad_fe6cc3 = func():void -> %b2 {
-  %b2 = block {
+%atomicLoad_fe6cc3 = func():void {
+  $B2: {
     %res:ptr<function, u32, read_write> = var, 0u
     %4:ptr<storage, atomic<u32>, read_write> = access %sb_rw, 0u
-    %x_9:u32 = atomicLoad %4
+    %5:u32 = atomicLoad %4
+    %x_9:u32 = let %5
     store %res, %x_9
     ret
   }
 }
-%fragment_main_1 = func():void -> %b3 {
-  %b3 = block {
-    %7:void = call %atomicLoad_fe6cc3
+%fragment_main_1 = func():void {
+  $B3: {
+    %8:void = call %atomicLoad_fe6cc3
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %9:void = call %fragment_main_1
+%fragment_main = @fragment func():void {
+  $B4: {
+    %10:void = call %fragment_main_1
     ret
   }
 }
-%compute_main_1 = func():void -> %b5 {
-  %b5 = block {
-    %11:void = call %atomicLoad_fe6cc3
+%compute_main_1 = func():void {
+  $B5: {
+    %12:void = call %atomicLoad_fe6cc3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {
-  %b6 = block {
-    %13:void = call %compute_main_1
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B6: {
+    %14:void = call %compute_main_1
     ret
   }
 }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_i32.spvasm.expected.ir.msl
index b38060a..e62fe24 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_i32.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicLoad
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_u32.spvasm.expected.ir.msl
index b38060a..e62fe24 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicLoad/workgroup_u32.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicLoad
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicMax/storage_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicMax/storage_i32.spvasm.expected.ir.msl
index f08f451..e8fca07 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicMax/storage_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicMax/storage_i32.spvasm.expected.ir.msl
@@ -1,43 +1,44 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: SB_RW_atomic = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW_atomic = struct @align(4) {
   arg_0:atomic<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW_atomic, read_write> = var @binding_point(0, 0)
 }
 
-%atomicMax_92aa72 = func():void -> %b2 {
-  %b2 = block {
+%atomicMax_92aa72 = func():void {
+  $B2: {
     %res:ptr<function, i32, read_write> = var, 0i
     %4:ptr<storage, atomic<i32>, read_write> = access %sb_rw, 0u
-    %x_9:i32 = atomicMax %4, 1i
+    %5:i32 = atomicMax %4, 1i
+    %x_9:i32 = let %5
     store %res, %x_9
     ret
   }
 }
-%fragment_main_1 = func():void -> %b3 {
-  %b3 = block {
-    %7:void = call %atomicMax_92aa72
+%fragment_main_1 = func():void {
+  $B3: {
+    %8:void = call %atomicMax_92aa72
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %9:void = call %fragment_main_1
+%fragment_main = @fragment func():void {
+  $B4: {
+    %10:void = call %fragment_main_1
     ret
   }
 }
-%compute_main_1 = func():void -> %b5 {
-  %b5 = block {
-    %11:void = call %atomicMax_92aa72
+%compute_main_1 = func():void {
+  $B5: {
+    %12:void = call %atomicMax_92aa72
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {
-  %b6 = block {
-    %13:void = call %compute_main_1
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B6: {
+    %14:void = call %compute_main_1
     ret
   }
 }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicMax/storage_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicMax/storage_u32.spvasm.expected.ir.msl
index 12d1369..4433c19 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicMax/storage_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicMax/storage_u32.spvasm.expected.ir.msl
@@ -1,43 +1,44 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: SB_RW_atomic = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW_atomic = struct @align(4) {
   arg_0:atomic<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW_atomic, read_write> = var @binding_point(0, 0)
 }
 
-%atomicMax_51b9be = func():void -> %b2 {
-  %b2 = block {
+%atomicMax_51b9be = func():void {
+  $B2: {
     %res:ptr<function, u32, read_write> = var, 0u
     %4:ptr<storage, atomic<u32>, read_write> = access %sb_rw, 0u
-    %x_9:u32 = atomicMax %4, 1u
+    %5:u32 = atomicMax %4, 1u
+    %x_9:u32 = let %5
     store %res, %x_9
     ret
   }
 }
-%fragment_main_1 = func():void -> %b3 {
-  %b3 = block {
-    %7:void = call %atomicMax_51b9be
+%fragment_main_1 = func():void {
+  $B3: {
+    %8:void = call %atomicMax_51b9be
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %9:void = call %fragment_main_1
+%fragment_main = @fragment func():void {
+  $B4: {
+    %10:void = call %fragment_main_1
     ret
   }
 }
-%compute_main_1 = func():void -> %b5 {
-  %b5 = block {
-    %11:void = call %atomicMax_51b9be
+%compute_main_1 = func():void {
+  $B5: {
+    %12:void = call %atomicMax_51b9be
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {
-  %b6 = block {
-    %13:void = call %compute_main_1
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B6: {
+    %14:void = call %compute_main_1
     ret
   }
 }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_i32.spvasm.expected.ir.msl
index b38060a..6687606 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_i32.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicMax
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_u32.spvasm.expected.ir.msl
index b38060a..6687606 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicMax/workgroup_u32.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicMax
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicMin/storage_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicMin/storage_i32.spvasm.expected.ir.msl
index e32fea2..21e0d7d 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicMin/storage_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicMin/storage_i32.spvasm.expected.ir.msl
@@ -1,43 +1,44 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: SB_RW_atomic = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW_atomic = struct @align(4) {
   arg_0:atomic<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW_atomic, read_write> = var @binding_point(0, 0)
 }
 
-%atomicMin_8e38dc = func():void -> %b2 {
-  %b2 = block {
+%atomicMin_8e38dc = func():void {
+  $B2: {
     %res:ptr<function, i32, read_write> = var, 0i
     %4:ptr<storage, atomic<i32>, read_write> = access %sb_rw, 0u
-    %x_9:i32 = atomicMin %4, 1i
+    %5:i32 = atomicMin %4, 1i
+    %x_9:i32 = let %5
     store %res, %x_9
     ret
   }
 }
-%fragment_main_1 = func():void -> %b3 {
-  %b3 = block {
-    %7:void = call %atomicMin_8e38dc
+%fragment_main_1 = func():void {
+  $B3: {
+    %8:void = call %atomicMin_8e38dc
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %9:void = call %fragment_main_1
+%fragment_main = @fragment func():void {
+  $B4: {
+    %10:void = call %fragment_main_1
     ret
   }
 }
-%compute_main_1 = func():void -> %b5 {
-  %b5 = block {
-    %11:void = call %atomicMin_8e38dc
+%compute_main_1 = func():void {
+  $B5: {
+    %12:void = call %atomicMin_8e38dc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {
-  %b6 = block {
-    %13:void = call %compute_main_1
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B6: {
+    %14:void = call %compute_main_1
     ret
   }
 }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicMin/storage_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicMin/storage_u32.spvasm.expected.ir.msl
index be3e8a5..d099c9f 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicMin/storage_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicMin/storage_u32.spvasm.expected.ir.msl
@@ -1,43 +1,44 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: SB_RW_atomic = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW_atomic = struct @align(4) {
   arg_0:atomic<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW_atomic, read_write> = var @binding_point(0, 0)
 }
 
-%atomicMin_c67a74 = func():void -> %b2 {
-  %b2 = block {
+%atomicMin_c67a74 = func():void {
+  $B2: {
     %res:ptr<function, u32, read_write> = var, 0u
     %4:ptr<storage, atomic<u32>, read_write> = access %sb_rw, 0u
-    %x_9:u32 = atomicMin %4, 1u
+    %5:u32 = atomicMin %4, 1u
+    %x_9:u32 = let %5
     store %res, %x_9
     ret
   }
 }
-%fragment_main_1 = func():void -> %b3 {
-  %b3 = block {
-    %7:void = call %atomicMin_c67a74
+%fragment_main_1 = func():void {
+  $B3: {
+    %8:void = call %atomicMin_c67a74
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %9:void = call %fragment_main_1
+%fragment_main = @fragment func():void {
+  $B4: {
+    %10:void = call %fragment_main_1
     ret
   }
 }
-%compute_main_1 = func():void -> %b5 {
-  %b5 = block {
-    %11:void = call %atomicMin_c67a74
+%compute_main_1 = func():void {
+  $B5: {
+    %12:void = call %atomicMin_c67a74
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {
-  %b6 = block {
-    %13:void = call %compute_main_1
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B6: {
+    %14:void = call %compute_main_1
     ret
   }
 }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_i32.spvasm.expected.ir.msl
index b38060a..829342e 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_i32.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicMin
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_u32.spvasm.expected.ir.msl
index b38060a..829342e 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicMin/workgroup_u32.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicMin
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicOr/storage_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicOr/storage_i32.spvasm.expected.ir.msl
index f22f193..40aafa6 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicOr/storage_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicOr/storage_i32.spvasm.expected.ir.msl
@@ -1,43 +1,44 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: SB_RW_atomic = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW_atomic = struct @align(4) {
   arg_0:atomic<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW_atomic, read_write> = var @binding_point(0, 0)
 }
 
-%atomicOr_8d96a0 = func():void -> %b2 {
-  %b2 = block {
+%atomicOr_8d96a0 = func():void {
+  $B2: {
     %res:ptr<function, i32, read_write> = var, 0i
     %4:ptr<storage, atomic<i32>, read_write> = access %sb_rw, 0u
-    %x_9:i32 = atomicOr %4, 1i
+    %5:i32 = atomicOr %4, 1i
+    %x_9:i32 = let %5
     store %res, %x_9
     ret
   }
 }
-%fragment_main_1 = func():void -> %b3 {
-  %b3 = block {
-    %7:void = call %atomicOr_8d96a0
+%fragment_main_1 = func():void {
+  $B3: {
+    %8:void = call %atomicOr_8d96a0
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %9:void = call %fragment_main_1
+%fragment_main = @fragment func():void {
+  $B4: {
+    %10:void = call %fragment_main_1
     ret
   }
 }
-%compute_main_1 = func():void -> %b5 {
-  %b5 = block {
-    %11:void = call %atomicOr_8d96a0
+%compute_main_1 = func():void {
+  $B5: {
+    %12:void = call %atomicOr_8d96a0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {
-  %b6 = block {
-    %13:void = call %compute_main_1
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B6: {
+    %14:void = call %compute_main_1
     ret
   }
 }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicOr/storage_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicOr/storage_u32.spvasm.expected.ir.msl
index 62dc841..42ef410 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicOr/storage_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicOr/storage_u32.spvasm.expected.ir.msl
@@ -1,43 +1,44 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: SB_RW_atomic = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW_atomic = struct @align(4) {
   arg_0:atomic<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW_atomic, read_write> = var @binding_point(0, 0)
 }
 
-%atomicOr_5e95d4 = func():void -> %b2 {
-  %b2 = block {
+%atomicOr_5e95d4 = func():void {
+  $B2: {
     %res:ptr<function, u32, read_write> = var, 0u
     %4:ptr<storage, atomic<u32>, read_write> = access %sb_rw, 0u
-    %x_9:u32 = atomicOr %4, 1u
+    %5:u32 = atomicOr %4, 1u
+    %x_9:u32 = let %5
     store %res, %x_9
     ret
   }
 }
-%fragment_main_1 = func():void -> %b3 {
-  %b3 = block {
-    %7:void = call %atomicOr_5e95d4
+%fragment_main_1 = func():void {
+  $B3: {
+    %8:void = call %atomicOr_5e95d4
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %9:void = call %fragment_main_1
+%fragment_main = @fragment func():void {
+  $B4: {
+    %10:void = call %fragment_main_1
     ret
   }
 }
-%compute_main_1 = func():void -> %b5 {
-  %b5 = block {
-    %11:void = call %atomicOr_5e95d4
+%compute_main_1 = func():void {
+  $B5: {
+    %12:void = call %atomicOr_5e95d4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {
-  %b6 = block {
-    %13:void = call %compute_main_1
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B6: {
+    %14:void = call %compute_main_1
     ret
   }
 }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_i32.spvasm.expected.ir.msl
index b38060a..49e8313 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_i32.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicOr
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_u32.spvasm.expected.ir.msl
index b38060a..49e8313 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicOr/workgroup_u32.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicOr
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicStore/storage_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicStore/storage_i32.spvasm.expected.ir.msl
index 7e9e333..b596ede 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicStore/storage_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicStore/storage_i32.spvasm.expected.ir.msl
@@ -1,40 +1,40 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: SB_RW_atomic = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW_atomic = struct @align(4) {
   arg_0:atomic<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW_atomic, read_write> = var @binding_point(0, 0)
 }
 
-%atomicStore_d1e9a6 = func():void -> %b2 {
-  %b2 = block {
+%atomicStore_d1e9a6 = func():void {
+  $B2: {
     %3:ptr<storage, atomic<i32>, read_write> = access %sb_rw, 0u
     %4:void = atomicStore %3, 1i
     ret
   }
 }
-%fragment_main_1 = func():void -> %b3 {
-  %b3 = block {
+%fragment_main_1 = func():void {
+  $B3: {
     %6:void = call %atomicStore_d1e9a6
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %fragment_main_1
     ret
   }
 }
-%compute_main_1 = func():void -> %b5 {
-  %b5 = block {
+%compute_main_1 = func():void {
+  $B5: {
     %10:void = call %atomicStore_d1e9a6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {
-  %b6 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B6: {
     %12:void = call %compute_main_1
     ret
   }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicStore/storage_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicStore/storage_u32.spvasm.expected.ir.msl
index a300b03..f8c29ad 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicStore/storage_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicStore/storage_u32.spvasm.expected.ir.msl
@@ -1,40 +1,40 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: SB_RW_atomic = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW_atomic = struct @align(4) {
   arg_0:atomic<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW_atomic, read_write> = var @binding_point(0, 0)
 }
 
-%atomicStore_cdc29e = func():void -> %b2 {
-  %b2 = block {
+%atomicStore_cdc29e = func():void {
+  $B2: {
     %3:ptr<storage, atomic<u32>, read_write> = access %sb_rw, 0u
     %4:void = atomicStore %3, 1u
     ret
   }
 }
-%fragment_main_1 = func():void -> %b3 {
-  %b3 = block {
+%fragment_main_1 = func():void {
+  $B3: {
     %6:void = call %atomicStore_cdc29e
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %fragment_main_1
     ret
   }
 }
-%compute_main_1 = func():void -> %b5 {
-  %b5 = block {
+%compute_main_1 = func():void {
+  $B5: {
     %10:void = call %atomicStore_cdc29e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {
-  %b6 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B6: {
     %12:void = call %compute_main_1
     ret
   }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_i32.spvasm.expected.ir.msl
index b38060a..92c0fdd 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_i32.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_u32.spvasm.expected.ir.msl
index b38060a..92c0fdd 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicStore/workgroup_u32.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicSub/storage_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicSub/storage_i32.spvasm.expected.ir.msl
index b5e3378..98dc438 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicSub/storage_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicSub/storage_i32.spvasm.expected.ir.msl
@@ -1,43 +1,44 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: SB_RW_atomic = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW_atomic = struct @align(4) {
   arg_0:atomic<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW_atomic, read_write> = var @binding_point(0, 0)
 }
 
-%atomicSub_051100 = func():void -> %b2 {
-  %b2 = block {
+%atomicSub_051100 = func():void {
+  $B2: {
     %res:ptr<function, i32, read_write> = var, 0i
     %4:ptr<storage, atomic<i32>, read_write> = access %sb_rw, 0u
-    %x_9:i32 = atomicSub %4, 1i
+    %5:i32 = atomicSub %4, 1i
+    %x_9:i32 = let %5
     store %res, %x_9
     ret
   }
 }
-%fragment_main_1 = func():void -> %b3 {
-  %b3 = block {
-    %7:void = call %atomicSub_051100
+%fragment_main_1 = func():void {
+  $B3: {
+    %8:void = call %atomicSub_051100
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %9:void = call %fragment_main_1
+%fragment_main = @fragment func():void {
+  $B4: {
+    %10:void = call %fragment_main_1
     ret
   }
 }
-%compute_main_1 = func():void -> %b5 {
-  %b5 = block {
-    %11:void = call %atomicSub_051100
+%compute_main_1 = func():void {
+  $B5: {
+    %12:void = call %atomicSub_051100
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {
-  %b6 = block {
-    %13:void = call %compute_main_1
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B6: {
+    %14:void = call %compute_main_1
     ret
   }
 }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicSub/storage_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicSub/storage_u32.spvasm.expected.ir.msl
index feb29d3..6de10a8 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicSub/storage_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicSub/storage_u32.spvasm.expected.ir.msl
@@ -1,43 +1,44 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: SB_RW_atomic = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW_atomic = struct @align(4) {
   arg_0:atomic<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW_atomic, read_write> = var @binding_point(0, 0)
 }
 
-%atomicSub_15bfc9 = func():void -> %b2 {
-  %b2 = block {
+%atomicSub_15bfc9 = func():void {
+  $B2: {
     %res:ptr<function, u32, read_write> = var, 0u
     %4:ptr<storage, atomic<u32>, read_write> = access %sb_rw, 0u
-    %x_9:u32 = atomicSub %4, 1u
+    %5:u32 = atomicSub %4, 1u
+    %x_9:u32 = let %5
     store %res, %x_9
     ret
   }
 }
-%fragment_main_1 = func():void -> %b3 {
-  %b3 = block {
-    %7:void = call %atomicSub_15bfc9
+%fragment_main_1 = func():void {
+  $B3: {
+    %8:void = call %atomicSub_15bfc9
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %9:void = call %fragment_main_1
+%fragment_main = @fragment func():void {
+  $B4: {
+    %10:void = call %fragment_main_1
     ret
   }
 }
-%compute_main_1 = func():void -> %b5 {
-  %b5 = block {
-    %11:void = call %atomicSub_15bfc9
+%compute_main_1 = func():void {
+  $B5: {
+    %12:void = call %atomicSub_15bfc9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {
-  %b6 = block {
-    %13:void = call %compute_main_1
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B6: {
+    %14:void = call %compute_main_1
     ret
   }
 }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_i32.spvasm.expected.ir.msl
index b38060a..0c4bcbe 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_i32.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicSub
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_u32.spvasm.expected.ir.msl
index b38060a..0c4bcbe 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicSub/workgroup_u32.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicSub
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicXor/storage_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicXor/storage_i32.spvasm.expected.ir.msl
index e90e590..532c62c 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicXor/storage_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicXor/storage_i32.spvasm.expected.ir.msl
@@ -1,43 +1,44 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: SB_RW_atomic = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW_atomic = struct @align(4) {
   arg_0:atomic<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW_atomic, read_write> = var @binding_point(0, 0)
 }
 
-%atomicXor_c1b78c = func():void -> %b2 {
-  %b2 = block {
+%atomicXor_c1b78c = func():void {
+  $B2: {
     %res:ptr<function, i32, read_write> = var, 0i
     %4:ptr<storage, atomic<i32>, read_write> = access %sb_rw, 0u
-    %x_9:i32 = atomicXor %4, 1i
+    %5:i32 = atomicXor %4, 1i
+    %x_9:i32 = let %5
     store %res, %x_9
     ret
   }
 }
-%fragment_main_1 = func():void -> %b3 {
-  %b3 = block {
-    %7:void = call %atomicXor_c1b78c
+%fragment_main_1 = func():void {
+  $B3: {
+    %8:void = call %atomicXor_c1b78c
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %9:void = call %fragment_main_1
+%fragment_main = @fragment func():void {
+  $B4: {
+    %10:void = call %fragment_main_1
     ret
   }
 }
-%compute_main_1 = func():void -> %b5 {
-  %b5 = block {
-    %11:void = call %atomicXor_c1b78c
+%compute_main_1 = func():void {
+  $B5: {
+    %12:void = call %atomicXor_c1b78c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {
-  %b6 = block {
-    %13:void = call %compute_main_1
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B6: {
+    %14:void = call %compute_main_1
     ret
   }
 }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicXor/storage_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicXor/storage_u32.spvasm.expected.ir.msl
index 1cd1de9..c123f78 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicXor/storage_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicXor/storage_u32.spvasm.expected.ir.msl
@@ -1,43 +1,44 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: SB_RW_atomic = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW_atomic = struct @align(4) {
   arg_0:atomic<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW_atomic, read_write> = var @binding_point(0, 0)
 }
 
-%atomicXor_54510e = func():void -> %b2 {
-  %b2 = block {
+%atomicXor_54510e = func():void {
+  $B2: {
     %res:ptr<function, u32, read_write> = var, 0u
     %4:ptr<storage, atomic<u32>, read_write> = access %sb_rw, 0u
-    %x_9:u32 = atomicXor %4, 1u
+    %5:u32 = atomicXor %4, 1u
+    %x_9:u32 = let %5
     store %res, %x_9
     ret
   }
 }
-%fragment_main_1 = func():void -> %b3 {
-  %b3 = block {
-    %7:void = call %atomicXor_54510e
+%fragment_main_1 = func():void {
+  $B3: {
+    %8:void = call %atomicXor_54510e
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %9:void = call %fragment_main_1
+%fragment_main = @fragment func():void {
+  $B4: {
+    %10:void = call %fragment_main_1
     ret
   }
 }
-%compute_main_1 = func():void -> %b5 {
-  %b5 = block {
-    %11:void = call %atomicXor_54510e
+%compute_main_1 = func():void {
+  $B5: {
+    %12:void = call %atomicXor_54510e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {
-  %b6 = block {
-    %13:void = call %compute_main_1
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B6: {
+    %14:void = call %compute_main_1
     ret
   }
 }
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_i32.spvasm.expected.ir.msl
index b38060a..665f64b 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_i32.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicXor
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_u32.spvasm.expected.ir.msl
index b38060a..665f64b 100644
--- a/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/atomicXor/workgroup_u32.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicXor
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/storage_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/storage_i32.spvasm.expected.ir.msl
index 3f05aba..0b67cf6 100644
--- a/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/storage_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/storage_i32.spvasm.expected.ir.msl
@@ -1,43 +1,44 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: SB_RW_atomic = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW_atomic = struct @align(4) {
   arg_0:atomic<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW_atomic, read_write> = var @binding_point(0, 0)
 }
 
-%atomicAdd_d32fe4 = func():void -> %b2 {
-  %b2 = block {
+%atomicAdd_d32fe4 = func():void {
+  $B2: {
     %res:ptr<function, i32, read_write> = var, 0i
     %4:ptr<storage, atomic<i32>, read_write> = access %sb_rw, 0u
-    %x_9:i32 = atomicSub %4, 1i
+    %5:i32 = atomicSub %4, 1i
+    %x_9:i32 = let %5
     store %res, %x_9
     ret
   }
 }
-%fragment_main_1 = func():void -> %b3 {
-  %b3 = block {
-    %7:void = call %atomicAdd_d32fe4
+%fragment_main_1 = func():void {
+  $B3: {
+    %8:void = call %atomicAdd_d32fe4
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %9:void = call %fragment_main_1
+%fragment_main = @fragment func():void {
+  $B4: {
+    %10:void = call %fragment_main_1
     ret
   }
 }
-%compute_main_1 = func():void -> %b5 {
-  %b5 = block {
-    %11:void = call %atomicAdd_d32fe4
+%compute_main_1 = func():void {
+  $B5: {
+    %12:void = call %atomicAdd_d32fe4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {
-  %b6 = block {
-    %13:void = call %compute_main_1
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B6: {
+    %14:void = call %compute_main_1
     ret
   }
 }
diff --git a/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/storage_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/storage_u32.spvasm.expected.ir.msl
index 8d9784d..68ccea4 100644
--- a/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/storage_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/storage_u32.spvasm.expected.ir.msl
@@ -1,43 +1,44 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: SB_RW_atomic = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW_atomic = struct @align(4) {
   arg_0:atomic<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW_atomic, read_write> = var @binding_point(0, 0)
 }
 
-%atomicAdd_8a199a = func():void -> %b2 {
-  %b2 = block {
+%atomicAdd_8a199a = func():void {
+  $B2: {
     %res:ptr<function, u32, read_write> = var, 0u
     %4:ptr<storage, atomic<u32>, read_write> = access %sb_rw, 0u
-    %x_9:u32 = atomicSub %4, 1u
+    %5:u32 = atomicSub %4, 1u
+    %x_9:u32 = let %5
     store %res, %x_9
     ret
   }
 }
-%fragment_main_1 = func():void -> %b3 {
-  %b3 = block {
-    %7:void = call %atomicAdd_8a199a
+%fragment_main_1 = func():void {
+  $B3: {
+    %8:void = call %atomicAdd_8a199a
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %9:void = call %fragment_main_1
+%fragment_main = @fragment func():void {
+  $B4: {
+    %10:void = call %fragment_main_1
     ret
   }
 }
-%compute_main_1 = func():void -> %b5 {
-  %b5 = block {
-    %11:void = call %atomicAdd_8a199a
+%compute_main_1 = func():void {
+  $B5: {
+    %12:void = call %atomicAdd_8a199a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {
-  %b6 = block {
-    %13:void = call %compute_main_1
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B6: {
+    %14:void = call %compute_main_1
     ret
   }
 }
diff --git a/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_i32.spvasm.expected.ir.msl
index b38060a..0c4bcbe 100644
--- a/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_i32.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicSub
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_u32.spvasm.expected.ir.msl
index b38060a..0c4bcbe 100644
--- a/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/spvAtomicDecrement/workgroup_u32.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicSub
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/storage_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/storage_i32.spvasm.expected.ir.msl
index 018333f..68658f0 100644
--- a/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/storage_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/storage_i32.spvasm.expected.ir.msl
@@ -1,43 +1,44 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: SB_RW_atomic = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW_atomic = struct @align(4) {
   arg_0:atomic<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW_atomic, read_write> = var @binding_point(0, 0)
 }
 
-%atomicAdd_d32fe4 = func():void -> %b2 {
-  %b2 = block {
+%atomicAdd_d32fe4 = func():void {
+  $B2: {
     %res:ptr<function, i32, read_write> = var, 0i
     %4:ptr<storage, atomic<i32>, read_write> = access %sb_rw, 0u
-    %x_9:i32 = atomicAdd %4, 1i
+    %5:i32 = atomicAdd %4, 1i
+    %x_9:i32 = let %5
     store %res, %x_9
     ret
   }
 }
-%fragment_main_1 = func():void -> %b3 {
-  %b3 = block {
-    %7:void = call %atomicAdd_d32fe4
+%fragment_main_1 = func():void {
+  $B3: {
+    %8:void = call %atomicAdd_d32fe4
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %9:void = call %fragment_main_1
+%fragment_main = @fragment func():void {
+  $B4: {
+    %10:void = call %fragment_main_1
     ret
   }
 }
-%compute_main_1 = func():void -> %b5 {
-  %b5 = block {
-    %11:void = call %atomicAdd_d32fe4
+%compute_main_1 = func():void {
+  $B5: {
+    %12:void = call %atomicAdd_d32fe4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {
-  %b6 = block {
-    %13:void = call %compute_main_1
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B6: {
+    %14:void = call %compute_main_1
     ret
   }
 }
diff --git a/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/storage_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/storage_u32.spvasm.expected.ir.msl
index 6095252..1375ee3 100644
--- a/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/storage_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/storage_u32.spvasm.expected.ir.msl
@@ -1,43 +1,44 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: SB_RW_atomic = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW_atomic = struct @align(4) {
   arg_0:atomic<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW_atomic, read_write> = var @binding_point(0, 0)
 }
 
-%atomicAdd_8a199a = func():void -> %b2 {
-  %b2 = block {
+%atomicAdd_8a199a = func():void {
+  $B2: {
     %res:ptr<function, u32, read_write> = var, 0u
     %4:ptr<storage, atomic<u32>, read_write> = access %sb_rw, 0u
-    %x_9:u32 = atomicAdd %4, 1u
+    %5:u32 = atomicAdd %4, 1u
+    %x_9:u32 = let %5
     store %res, %x_9
     ret
   }
 }
-%fragment_main_1 = func():void -> %b3 {
-  %b3 = block {
-    %7:void = call %atomicAdd_8a199a
+%fragment_main_1 = func():void {
+  $B3: {
+    %8:void = call %atomicAdd_8a199a
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %9:void = call %fragment_main_1
+%fragment_main = @fragment func():void {
+  $B4: {
+    %10:void = call %fragment_main_1
     ret
   }
 }
-%compute_main_1 = func():void -> %b5 {
-  %b5 = block {
-    %11:void = call %atomicAdd_8a199a
+%compute_main_1 = func():void {
+  $B5: {
+    %12:void = call %atomicAdd_8a199a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {
-  %b6 = block {
-    %13:void = call %compute_main_1
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B6: {
+    %14:void = call %compute_main_1
     ret
   }
 }
diff --git a/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_i32.spvasm.expected.ir.msl
index b38060a..f7dc0d0 100644
--- a/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_i32.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicAdd
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_u32.spvasm.expected.ir.msl
index b38060a..f7dc0d0 100644
--- a/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/literal/spvAtomicIncrement/workgroup_u32.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicAdd
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicAdd/storage_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicAdd/storage_i32.spvasm.expected.ir.msl
index a04380b..8a8ef46 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicAdd/storage_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicAdd/storage_i32.spvasm.expected.ir.msl
@@ -1,46 +1,48 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: SB_RW_atomic = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW_atomic = struct @align(4) {
   arg_0:atomic<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW_atomic, read_write> = var @binding_point(0, 0)
 }
 
-%atomicAdd_d32fe4 = func():void -> %b2 {
-  %b2 = block {
+%atomicAdd_d32fe4 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 0i
     %res:ptr<function, i32, read_write> = var, 0i
     store %arg_1, 1i
-    %x_20:i32 = load %arg_1
-    %6:ptr<storage, atomic<i32>, read_write> = access %sb_rw, 0u
-    %x_13:i32 = atomicAdd %6, %x_20
+    %5:i32 = load %arg_1
+    %x_20:i32 = let %5
+    %7:ptr<storage, atomic<i32>, read_write> = access %sb_rw, 0u
+    %8:i32 = atomicAdd %7, %x_20
+    %x_13:i32 = let %8
     store %res, %x_13
     ret
   }
 }
-%fragment_main_1 = func():void -> %b3 {
-  %b3 = block {
-    %9:void = call %atomicAdd_d32fe4
+%fragment_main_1 = func():void {
+  $B3: {
+    %11:void = call %atomicAdd_d32fe4
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %11:void = call %fragment_main_1
+%fragment_main = @fragment func():void {
+  $B4: {
+    %13:void = call %fragment_main_1
     ret
   }
 }
-%compute_main_1 = func():void -> %b5 {
-  %b5 = block {
-    %13:void = call %atomicAdd_d32fe4
+%compute_main_1 = func():void {
+  $B5: {
+    %15:void = call %atomicAdd_d32fe4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {
-  %b6 = block {
-    %15:void = call %compute_main_1
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B6: {
+    %17:void = call %compute_main_1
     ret
   }
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicAdd/storage_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicAdd/storage_u32.spvasm.expected.ir.msl
index 40b4d94..19e1415 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicAdd/storage_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicAdd/storage_u32.spvasm.expected.ir.msl
@@ -1,46 +1,48 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: SB_RW_atomic = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW_atomic = struct @align(4) {
   arg_0:atomic<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW_atomic, read_write> = var @binding_point(0, 0)
 }
 
-%atomicAdd_8a199a = func():void -> %b2 {
-  %b2 = block {
+%atomicAdd_8a199a = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 0u
     %res:ptr<function, u32, read_write> = var, 0u
     store %arg_1, 1u
-    %x_18:u32 = load %arg_1
-    %6:ptr<storage, atomic<u32>, read_write> = access %sb_rw, 0u
-    %x_13:u32 = atomicAdd %6, %x_18
+    %5:u32 = load %arg_1
+    %x_18:u32 = let %5
+    %7:ptr<storage, atomic<u32>, read_write> = access %sb_rw, 0u
+    %8:u32 = atomicAdd %7, %x_18
+    %x_13:u32 = let %8
     store %res, %x_13
     ret
   }
 }
-%fragment_main_1 = func():void -> %b3 {
-  %b3 = block {
-    %9:void = call %atomicAdd_8a199a
+%fragment_main_1 = func():void {
+  $B3: {
+    %11:void = call %atomicAdd_8a199a
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %11:void = call %fragment_main_1
+%fragment_main = @fragment func():void {
+  $B4: {
+    %13:void = call %fragment_main_1
     ret
   }
 }
-%compute_main_1 = func():void -> %b5 {
-  %b5 = block {
-    %13:void = call %atomicAdd_8a199a
+%compute_main_1 = func():void {
+  $B5: {
+    %15:void = call %atomicAdd_8a199a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {
-  %b6 = block {
-    %15:void = call %compute_main_1
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B6: {
+    %17:void = call %compute_main_1
     ret
   }
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_i32.spvasm.expected.ir.msl
index efdd3b1..f7dc0d0 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_i32.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicAdd
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_u32.spvasm.expected.ir.msl
index efdd3b1..f7dc0d0 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicAdd/workgroup_u32.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicAdd
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicAnd/storage_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicAnd/storage_i32.spvasm.expected.ir.msl
index 94d34de..62a0403 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicAnd/storage_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicAnd/storage_i32.spvasm.expected.ir.msl
@@ -1,46 +1,48 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: SB_RW_atomic = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW_atomic = struct @align(4) {
   arg_0:atomic<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW_atomic, read_write> = var @binding_point(0, 0)
 }
 
-%atomicAnd_152966 = func():void -> %b2 {
-  %b2 = block {
+%atomicAnd_152966 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 0i
     %res:ptr<function, i32, read_write> = var, 0i
     store %arg_1, 1i
-    %x_20:i32 = load %arg_1
-    %6:ptr<storage, atomic<i32>, read_write> = access %sb_rw, 0u
-    %x_13:i32 = atomicAnd %6, %x_20
+    %5:i32 = load %arg_1
+    %x_20:i32 = let %5
+    %7:ptr<storage, atomic<i32>, read_write> = access %sb_rw, 0u
+    %8:i32 = atomicAnd %7, %x_20
+    %x_13:i32 = let %8
     store %res, %x_13
     ret
   }
 }
-%fragment_main_1 = func():void -> %b3 {
-  %b3 = block {
-    %9:void = call %atomicAnd_152966
+%fragment_main_1 = func():void {
+  $B3: {
+    %11:void = call %atomicAnd_152966
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %11:void = call %fragment_main_1
+%fragment_main = @fragment func():void {
+  $B4: {
+    %13:void = call %fragment_main_1
     ret
   }
 }
-%compute_main_1 = func():void -> %b5 {
-  %b5 = block {
-    %13:void = call %atomicAnd_152966
+%compute_main_1 = func():void {
+  $B5: {
+    %15:void = call %atomicAnd_152966
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {
-  %b6 = block {
-    %15:void = call %compute_main_1
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B6: {
+    %17:void = call %compute_main_1
     ret
   }
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicAnd/storage_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicAnd/storage_u32.spvasm.expected.ir.msl
index 40af166..b578acb 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicAnd/storage_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicAnd/storage_u32.spvasm.expected.ir.msl
@@ -1,46 +1,48 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: SB_RW_atomic = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW_atomic = struct @align(4) {
   arg_0:atomic<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW_atomic, read_write> = var @binding_point(0, 0)
 }
 
-%atomicAnd_85a8d9 = func():void -> %b2 {
-  %b2 = block {
+%atomicAnd_85a8d9 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 0u
     %res:ptr<function, u32, read_write> = var, 0u
     store %arg_1, 1u
-    %x_18:u32 = load %arg_1
-    %6:ptr<storage, atomic<u32>, read_write> = access %sb_rw, 0u
-    %x_13:u32 = atomicAnd %6, %x_18
+    %5:u32 = load %arg_1
+    %x_18:u32 = let %5
+    %7:ptr<storage, atomic<u32>, read_write> = access %sb_rw, 0u
+    %8:u32 = atomicAnd %7, %x_18
+    %x_13:u32 = let %8
     store %res, %x_13
     ret
   }
 }
-%fragment_main_1 = func():void -> %b3 {
-  %b3 = block {
-    %9:void = call %atomicAnd_85a8d9
+%fragment_main_1 = func():void {
+  $B3: {
+    %11:void = call %atomicAnd_85a8d9
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %11:void = call %fragment_main_1
+%fragment_main = @fragment func():void {
+  $B4: {
+    %13:void = call %fragment_main_1
     ret
   }
 }
-%compute_main_1 = func():void -> %b5 {
-  %b5 = block {
-    %13:void = call %atomicAnd_85a8d9
+%compute_main_1 = func():void {
+  $B5: {
+    %15:void = call %atomicAnd_85a8d9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {
-  %b6 = block {
-    %15:void = call %compute_main_1
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B6: {
+    %17:void = call %compute_main_1
     ret
   }
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_i32.spvasm.expected.ir.msl
index efdd3b1..cb4c94c 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_i32.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicAnd
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_u32.spvasm.expected.ir.msl
index efdd3b1..cb4c94c 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicAnd/workgroup_u32.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicAnd
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/storage_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/storage_i32.spvasm.expected.ir.msl
index 6a438d5..6a47b50 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/storage_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/storage_i32.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: SB_RW_atomic = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW_atomic = struct @align(4) {
   arg_0:atomic<i32> @offset(0)
 }
 
@@ -14,50 +14,53 @@
   exchanged:bool @offset(4)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW_atomic, read_write> = var @binding_point(0, 0)
 }
 
-%atomicCompareExchangeWeak_1bd40a = func():void -> %b2 {
-  %b2 = block {
+%atomicCompareExchangeWeak_1bd40a = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 0i
     %arg_2:ptr<function, i32, read_write> = var, 0i
     %res:ptr<function, x__atomic_compare_exchange_resulti32, read_write> = var, x__atomic_compare_exchange_resulti32(0i, false)
     store %arg_1, 1i
     store %arg_2, 1i
-    %x_23:i32 = load %arg_2
-    %x_24:i32 = load %arg_1
-    %8:ptr<storage, atomic<i32>, read_write> = access %sb_rw, 0u
-    %9:__atomic_compare_exchange_result_i32 = atomicCompareExchangeWeak %8, %x_24, %x_23
-    %old_value_1:i32 = access %9, 0u
+    %6:i32 = load %arg_2
+    %x_23:i32 = let %6
+    %8:i32 = load %arg_1
+    %x_24:i32 = let %8
+    %10:ptr<storage, atomic<i32>, read_write> = access %sb_rw, 0u
+    %11:__atomic_compare_exchange_result_i32 = atomicCompareExchangeWeak %10, %x_24, %x_23
+    %12:i32 = access %11, 0u
+    %old_value_1:i32 = let %12
     %x_25:i32 = let %old_value_1
-    %12:bool = eq %x_25, %x_23
-    %13:x__atomic_compare_exchange_resulti32 = construct %x_25, %12
-    store %res, %13
+    %15:bool = eq %x_25, %x_23
+    %16:x__atomic_compare_exchange_resulti32 = construct %x_25, %15
+    store %res, %16
     ret
   }
 }
-%fragment_main_1 = func():void -> %b3 {
-  %b3 = block {
-    %15:void = call %atomicCompareExchangeWeak_1bd40a
+%fragment_main_1 = func():void {
+  $B3: {
+    %18:void = call %atomicCompareExchangeWeak_1bd40a
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %17:void = call %fragment_main_1
+%fragment_main = @fragment func():void {
+  $B4: {
+    %20:void = call %fragment_main_1
     ret
   }
 }
-%compute_main_1 = func():void -> %b5 {
-  %b5 = block {
-    %19:void = call %atomicCompareExchangeWeak_1bd40a
+%compute_main_1 = func():void {
+  $B5: {
+    %22:void = call %atomicCompareExchangeWeak_1bd40a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {
-  %b6 = block {
-    %21:void = call %compute_main_1
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B6: {
+    %24:void = call %compute_main_1
     ret
   }
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/storage_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/storage_u32.spvasm.expected.ir.msl
index 683fd25..90ba1b5 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/storage_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/storage_u32.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: SB_RW_atomic = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW_atomic = struct @align(4) {
   arg_0:atomic<u32> @offset(0)
 }
 
@@ -14,50 +14,53 @@
   exchanged:bool @offset(4)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW_atomic, read_write> = var @binding_point(0, 0)
 }
 
-%atomicCompareExchangeWeak_63d8e6 = func():void -> %b2 {
-  %b2 = block {
+%atomicCompareExchangeWeak_63d8e6 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 0u
     %arg_2:ptr<function, u32, read_write> = var, 0u
     %res:ptr<function, x__atomic_compare_exchange_resultu32, read_write> = var, x__atomic_compare_exchange_resultu32(0u, false)
     store %arg_1, 1u
     store %arg_2, 1u
-    %x_21:u32 = load %arg_2
-    %x_22:u32 = load %arg_1
-    %8:ptr<storage, atomic<u32>, read_write> = access %sb_rw, 0u
-    %9:__atomic_compare_exchange_result_u32 = atomicCompareExchangeWeak %8, %x_22, %x_21
-    %old_value_1:u32 = access %9, 0u
+    %6:u32 = load %arg_2
+    %x_21:u32 = let %6
+    %8:u32 = load %arg_1
+    %x_22:u32 = let %8
+    %10:ptr<storage, atomic<u32>, read_write> = access %sb_rw, 0u
+    %11:__atomic_compare_exchange_result_u32 = atomicCompareExchangeWeak %10, %x_22, %x_21
+    %12:u32 = access %11, 0u
+    %old_value_1:u32 = let %12
     %x_23:u32 = let %old_value_1
-    %12:bool = eq %x_23, %x_21
-    %13:x__atomic_compare_exchange_resultu32 = construct %x_23, %12
-    store %res, %13
+    %15:bool = eq %x_23, %x_21
+    %16:x__atomic_compare_exchange_resultu32 = construct %x_23, %15
+    store %res, %16
     ret
   }
 }
-%fragment_main_1 = func():void -> %b3 {
-  %b3 = block {
-    %15:void = call %atomicCompareExchangeWeak_63d8e6
+%fragment_main_1 = func():void {
+  $B3: {
+    %18:void = call %atomicCompareExchangeWeak_63d8e6
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %17:void = call %fragment_main_1
+%fragment_main = @fragment func():void {
+  $B4: {
+    %20:void = call %fragment_main_1
     ret
   }
 }
-%compute_main_1 = func():void -> %b5 {
-  %b5 = block {
-    %19:void = call %atomicCompareExchangeWeak_63d8e6
+%compute_main_1 = func():void {
+  $B5: {
+    %22:void = call %atomicCompareExchangeWeak_63d8e6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {
-  %b6 = block {
-    %21:void = call %compute_main_1
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B6: {
+    %24:void = call %compute_main_1
     ret
   }
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.ir.msl
index efdd3b1..b4e0e6d 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_i32.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicCompareExchangeWeak
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.ir.msl
index efdd3b1..b4e0e6d 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicCompareExchangeWeak/workgroup_u32.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicCompareExchangeWeak
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicExchange/storage_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicExchange/storage_i32.spvasm.expected.ir.msl
index 341f200..b48794d 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicExchange/storage_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicExchange/storage_i32.spvasm.expected.ir.msl
@@ -1,46 +1,48 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: SB_RW_atomic = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW_atomic = struct @align(4) {
   arg_0:atomic<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW_atomic, read_write> = var @binding_point(0, 0)
 }
 
-%atomicExchange_f2e22f = func():void -> %b2 {
-  %b2 = block {
+%atomicExchange_f2e22f = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 0i
     %res:ptr<function, i32, read_write> = var, 0i
     store %arg_1, 1i
-    %x_20:i32 = load %arg_1
-    %6:ptr<storage, atomic<i32>, read_write> = access %sb_rw, 0u
-    %x_13:i32 = atomicExchange %6, %x_20
+    %5:i32 = load %arg_1
+    %x_20:i32 = let %5
+    %7:ptr<storage, atomic<i32>, read_write> = access %sb_rw, 0u
+    %8:i32 = atomicExchange %7, %x_20
+    %x_13:i32 = let %8
     store %res, %x_13
     ret
   }
 }
-%fragment_main_1 = func():void -> %b3 {
-  %b3 = block {
-    %9:void = call %atomicExchange_f2e22f
+%fragment_main_1 = func():void {
+  $B3: {
+    %11:void = call %atomicExchange_f2e22f
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %11:void = call %fragment_main_1
+%fragment_main = @fragment func():void {
+  $B4: {
+    %13:void = call %fragment_main_1
     ret
   }
 }
-%compute_main_1 = func():void -> %b5 {
-  %b5 = block {
-    %13:void = call %atomicExchange_f2e22f
+%compute_main_1 = func():void {
+  $B5: {
+    %15:void = call %atomicExchange_f2e22f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {
-  %b6 = block {
-    %15:void = call %compute_main_1
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B6: {
+    %17:void = call %compute_main_1
     ret
   }
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicExchange/storage_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicExchange/storage_u32.spvasm.expected.ir.msl
index ab62a1c..df1b5e9 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicExchange/storage_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicExchange/storage_u32.spvasm.expected.ir.msl
@@ -1,46 +1,48 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: SB_RW_atomic = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW_atomic = struct @align(4) {
   arg_0:atomic<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW_atomic, read_write> = var @binding_point(0, 0)
 }
 
-%atomicExchange_d59712 = func():void -> %b2 {
-  %b2 = block {
+%atomicExchange_d59712 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 0u
     %res:ptr<function, u32, read_write> = var, 0u
     store %arg_1, 1u
-    %x_18:u32 = load %arg_1
-    %6:ptr<storage, atomic<u32>, read_write> = access %sb_rw, 0u
-    %x_13:u32 = atomicExchange %6, %x_18
+    %5:u32 = load %arg_1
+    %x_18:u32 = let %5
+    %7:ptr<storage, atomic<u32>, read_write> = access %sb_rw, 0u
+    %8:u32 = atomicExchange %7, %x_18
+    %x_13:u32 = let %8
     store %res, %x_13
     ret
   }
 }
-%fragment_main_1 = func():void -> %b3 {
-  %b3 = block {
-    %9:void = call %atomicExchange_d59712
+%fragment_main_1 = func():void {
+  $B3: {
+    %11:void = call %atomicExchange_d59712
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %11:void = call %fragment_main_1
+%fragment_main = @fragment func():void {
+  $B4: {
+    %13:void = call %fragment_main_1
     ret
   }
 }
-%compute_main_1 = func():void -> %b5 {
-  %b5 = block {
-    %13:void = call %atomicExchange_d59712
+%compute_main_1 = func():void {
+  $B5: {
+    %15:void = call %atomicExchange_d59712
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {
-  %b6 = block {
-    %15:void = call %compute_main_1
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B6: {
+    %17:void = call %compute_main_1
     ret
   }
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_i32.spvasm.expected.ir.msl
index efdd3b1..2f8d44e 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_i32.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicExchange
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_u32.spvasm.expected.ir.msl
index efdd3b1..2f8d44e 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicExchange/workgroup_u32.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicExchange
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicLoad/storage_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicLoad/storage_i32.spvasm.expected.ir.msl
index 1b06340..7b20853 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicLoad/storage_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicLoad/storage_i32.spvasm.expected.ir.msl
@@ -1,43 +1,44 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: SB_RW_atomic = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW_atomic = struct @align(4) {
   arg_0:atomic<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW_atomic, read_write> = var @binding_point(0, 0)
 }
 
-%atomicLoad_0806ad = func():void -> %b2 {
-  %b2 = block {
+%atomicLoad_0806ad = func():void {
+  $B2: {
     %res:ptr<function, i32, read_write> = var, 0i
     %4:ptr<storage, atomic<i32>, read_write> = access %sb_rw, 0u
-    %x_9:i32 = atomicLoad %4
+    %5:i32 = atomicLoad %4
+    %x_9:i32 = let %5
     store %res, %x_9
     ret
   }
 }
-%fragment_main_1 = func():void -> %b3 {
-  %b3 = block {
-    %7:void = call %atomicLoad_0806ad
+%fragment_main_1 = func():void {
+  $B3: {
+    %8:void = call %atomicLoad_0806ad
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %9:void = call %fragment_main_1
+%fragment_main = @fragment func():void {
+  $B4: {
+    %10:void = call %fragment_main_1
     ret
   }
 }
-%compute_main_1 = func():void -> %b5 {
-  %b5 = block {
-    %11:void = call %atomicLoad_0806ad
+%compute_main_1 = func():void {
+  $B5: {
+    %12:void = call %atomicLoad_0806ad
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {
-  %b6 = block {
-    %13:void = call %compute_main_1
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B6: {
+    %14:void = call %compute_main_1
     ret
   }
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicLoad/storage_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicLoad/storage_u32.spvasm.expected.ir.msl
index ccc1975..3c25b76 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicLoad/storage_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicLoad/storage_u32.spvasm.expected.ir.msl
@@ -1,43 +1,44 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: SB_RW_atomic = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW_atomic = struct @align(4) {
   arg_0:atomic<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW_atomic, read_write> = var @binding_point(0, 0)
 }
 
-%atomicLoad_fe6cc3 = func():void -> %b2 {
-  %b2 = block {
+%atomicLoad_fe6cc3 = func():void {
+  $B2: {
     %res:ptr<function, u32, read_write> = var, 0u
     %4:ptr<storage, atomic<u32>, read_write> = access %sb_rw, 0u
-    %x_9:u32 = atomicLoad %4
+    %5:u32 = atomicLoad %4
+    %x_9:u32 = let %5
     store %res, %x_9
     ret
   }
 }
-%fragment_main_1 = func():void -> %b3 {
-  %b3 = block {
-    %7:void = call %atomicLoad_fe6cc3
+%fragment_main_1 = func():void {
+  $B3: {
+    %8:void = call %atomicLoad_fe6cc3
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %9:void = call %fragment_main_1
+%fragment_main = @fragment func():void {
+  $B4: {
+    %10:void = call %fragment_main_1
     ret
   }
 }
-%compute_main_1 = func():void -> %b5 {
-  %b5 = block {
-    %11:void = call %atomicLoad_fe6cc3
+%compute_main_1 = func():void {
+  $B5: {
+    %12:void = call %atomicLoad_fe6cc3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {
-  %b6 = block {
-    %13:void = call %compute_main_1
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B6: {
+    %14:void = call %compute_main_1
     ret
   }
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_i32.spvasm.expected.ir.msl
index b38060a..e62fe24 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_i32.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicLoad
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_u32.spvasm.expected.ir.msl
index b38060a..e62fe24 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicLoad/workgroup_u32.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicLoad
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicMax/storage_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicMax/storage_i32.spvasm.expected.ir.msl
index 4bc5073..44332aa 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicMax/storage_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicMax/storage_i32.spvasm.expected.ir.msl
@@ -1,46 +1,48 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: SB_RW_atomic = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW_atomic = struct @align(4) {
   arg_0:atomic<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW_atomic, read_write> = var @binding_point(0, 0)
 }
 
-%atomicMax_92aa72 = func():void -> %b2 {
-  %b2 = block {
+%atomicMax_92aa72 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 0i
     %res:ptr<function, i32, read_write> = var, 0i
     store %arg_1, 1i
-    %x_20:i32 = load %arg_1
-    %6:ptr<storage, atomic<i32>, read_write> = access %sb_rw, 0u
-    %x_13:i32 = atomicMax %6, %x_20
+    %5:i32 = load %arg_1
+    %x_20:i32 = let %5
+    %7:ptr<storage, atomic<i32>, read_write> = access %sb_rw, 0u
+    %8:i32 = atomicMax %7, %x_20
+    %x_13:i32 = let %8
     store %res, %x_13
     ret
   }
 }
-%fragment_main_1 = func():void -> %b3 {
-  %b3 = block {
-    %9:void = call %atomicMax_92aa72
+%fragment_main_1 = func():void {
+  $B3: {
+    %11:void = call %atomicMax_92aa72
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %11:void = call %fragment_main_1
+%fragment_main = @fragment func():void {
+  $B4: {
+    %13:void = call %fragment_main_1
     ret
   }
 }
-%compute_main_1 = func():void -> %b5 {
-  %b5 = block {
-    %13:void = call %atomicMax_92aa72
+%compute_main_1 = func():void {
+  $B5: {
+    %15:void = call %atomicMax_92aa72
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {
-  %b6 = block {
-    %15:void = call %compute_main_1
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B6: {
+    %17:void = call %compute_main_1
     ret
   }
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicMax/storage_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicMax/storage_u32.spvasm.expected.ir.msl
index 08e74b0..2c71acf 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicMax/storage_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicMax/storage_u32.spvasm.expected.ir.msl
@@ -1,46 +1,48 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: SB_RW_atomic = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW_atomic = struct @align(4) {
   arg_0:atomic<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW_atomic, read_write> = var @binding_point(0, 0)
 }
 
-%atomicMax_51b9be = func():void -> %b2 {
-  %b2 = block {
+%atomicMax_51b9be = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 0u
     %res:ptr<function, u32, read_write> = var, 0u
     store %arg_1, 1u
-    %x_18:u32 = load %arg_1
-    %6:ptr<storage, atomic<u32>, read_write> = access %sb_rw, 0u
-    %x_13:u32 = atomicMax %6, %x_18
+    %5:u32 = load %arg_1
+    %x_18:u32 = let %5
+    %7:ptr<storage, atomic<u32>, read_write> = access %sb_rw, 0u
+    %8:u32 = atomicMax %7, %x_18
+    %x_13:u32 = let %8
     store %res, %x_13
     ret
   }
 }
-%fragment_main_1 = func():void -> %b3 {
-  %b3 = block {
-    %9:void = call %atomicMax_51b9be
+%fragment_main_1 = func():void {
+  $B3: {
+    %11:void = call %atomicMax_51b9be
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %11:void = call %fragment_main_1
+%fragment_main = @fragment func():void {
+  $B4: {
+    %13:void = call %fragment_main_1
     ret
   }
 }
-%compute_main_1 = func():void -> %b5 {
-  %b5 = block {
-    %13:void = call %atomicMax_51b9be
+%compute_main_1 = func():void {
+  $B5: {
+    %15:void = call %atomicMax_51b9be
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {
-  %b6 = block {
-    %15:void = call %compute_main_1
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B6: {
+    %17:void = call %compute_main_1
     ret
   }
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_i32.spvasm.expected.ir.msl
index efdd3b1..6687606 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_i32.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicMax
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_u32.spvasm.expected.ir.msl
index efdd3b1..6687606 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicMax/workgroup_u32.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicMax
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicMin/storage_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicMin/storage_i32.spvasm.expected.ir.msl
index 097fac5..0102605 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicMin/storage_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicMin/storage_i32.spvasm.expected.ir.msl
@@ -1,46 +1,48 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: SB_RW_atomic = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW_atomic = struct @align(4) {
   arg_0:atomic<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW_atomic, read_write> = var @binding_point(0, 0)
 }
 
-%atomicMin_8e38dc = func():void -> %b2 {
-  %b2 = block {
+%atomicMin_8e38dc = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 0i
     %res:ptr<function, i32, read_write> = var, 0i
     store %arg_1, 1i
-    %x_20:i32 = load %arg_1
-    %6:ptr<storage, atomic<i32>, read_write> = access %sb_rw, 0u
-    %x_13:i32 = atomicMin %6, %x_20
+    %5:i32 = load %arg_1
+    %x_20:i32 = let %5
+    %7:ptr<storage, atomic<i32>, read_write> = access %sb_rw, 0u
+    %8:i32 = atomicMin %7, %x_20
+    %x_13:i32 = let %8
     store %res, %x_13
     ret
   }
 }
-%fragment_main_1 = func():void -> %b3 {
-  %b3 = block {
-    %9:void = call %atomicMin_8e38dc
+%fragment_main_1 = func():void {
+  $B3: {
+    %11:void = call %atomicMin_8e38dc
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %11:void = call %fragment_main_1
+%fragment_main = @fragment func():void {
+  $B4: {
+    %13:void = call %fragment_main_1
     ret
   }
 }
-%compute_main_1 = func():void -> %b5 {
-  %b5 = block {
-    %13:void = call %atomicMin_8e38dc
+%compute_main_1 = func():void {
+  $B5: {
+    %15:void = call %atomicMin_8e38dc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {
-  %b6 = block {
-    %15:void = call %compute_main_1
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B6: {
+    %17:void = call %compute_main_1
     ret
   }
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicMin/storage_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicMin/storage_u32.spvasm.expected.ir.msl
index d305f8b..ce2c985 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicMin/storage_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicMin/storage_u32.spvasm.expected.ir.msl
@@ -1,46 +1,48 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: SB_RW_atomic = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW_atomic = struct @align(4) {
   arg_0:atomic<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW_atomic, read_write> = var @binding_point(0, 0)
 }
 
-%atomicMin_c67a74 = func():void -> %b2 {
-  %b2 = block {
+%atomicMin_c67a74 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 0u
     %res:ptr<function, u32, read_write> = var, 0u
     store %arg_1, 1u
-    %x_18:u32 = load %arg_1
-    %6:ptr<storage, atomic<u32>, read_write> = access %sb_rw, 0u
-    %x_13:u32 = atomicMin %6, %x_18
+    %5:u32 = load %arg_1
+    %x_18:u32 = let %5
+    %7:ptr<storage, atomic<u32>, read_write> = access %sb_rw, 0u
+    %8:u32 = atomicMin %7, %x_18
+    %x_13:u32 = let %8
     store %res, %x_13
     ret
   }
 }
-%fragment_main_1 = func():void -> %b3 {
-  %b3 = block {
-    %9:void = call %atomicMin_c67a74
+%fragment_main_1 = func():void {
+  $B3: {
+    %11:void = call %atomicMin_c67a74
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %11:void = call %fragment_main_1
+%fragment_main = @fragment func():void {
+  $B4: {
+    %13:void = call %fragment_main_1
     ret
   }
 }
-%compute_main_1 = func():void -> %b5 {
-  %b5 = block {
-    %13:void = call %atomicMin_c67a74
+%compute_main_1 = func():void {
+  $B5: {
+    %15:void = call %atomicMin_c67a74
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {
-  %b6 = block {
-    %15:void = call %compute_main_1
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B6: {
+    %17:void = call %compute_main_1
     ret
   }
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_i32.spvasm.expected.ir.msl
index efdd3b1..829342e 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_i32.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicMin
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_u32.spvasm.expected.ir.msl
index efdd3b1..829342e 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicMin/workgroup_u32.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicMin
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicOr/storage_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicOr/storage_i32.spvasm.expected.ir.msl
index 1d8a5c3..9cade54 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicOr/storage_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicOr/storage_i32.spvasm.expected.ir.msl
@@ -1,46 +1,48 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: SB_RW_atomic = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW_atomic = struct @align(4) {
   arg_0:atomic<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW_atomic, read_write> = var @binding_point(0, 0)
 }
 
-%atomicOr_8d96a0 = func():void -> %b2 {
-  %b2 = block {
+%atomicOr_8d96a0 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 0i
     %res:ptr<function, i32, read_write> = var, 0i
     store %arg_1, 1i
-    %x_20:i32 = load %arg_1
-    %6:ptr<storage, atomic<i32>, read_write> = access %sb_rw, 0u
-    %x_13:i32 = atomicOr %6, %x_20
+    %5:i32 = load %arg_1
+    %x_20:i32 = let %5
+    %7:ptr<storage, atomic<i32>, read_write> = access %sb_rw, 0u
+    %8:i32 = atomicOr %7, %x_20
+    %x_13:i32 = let %8
     store %res, %x_13
     ret
   }
 }
-%fragment_main_1 = func():void -> %b3 {
-  %b3 = block {
-    %9:void = call %atomicOr_8d96a0
+%fragment_main_1 = func():void {
+  $B3: {
+    %11:void = call %atomicOr_8d96a0
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %11:void = call %fragment_main_1
+%fragment_main = @fragment func():void {
+  $B4: {
+    %13:void = call %fragment_main_1
     ret
   }
 }
-%compute_main_1 = func():void -> %b5 {
-  %b5 = block {
-    %13:void = call %atomicOr_8d96a0
+%compute_main_1 = func():void {
+  $B5: {
+    %15:void = call %atomicOr_8d96a0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {
-  %b6 = block {
-    %15:void = call %compute_main_1
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B6: {
+    %17:void = call %compute_main_1
     ret
   }
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicOr/storage_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicOr/storage_u32.spvasm.expected.ir.msl
index c77e311..dcfab64 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicOr/storage_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicOr/storage_u32.spvasm.expected.ir.msl
@@ -1,46 +1,48 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: SB_RW_atomic = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW_atomic = struct @align(4) {
   arg_0:atomic<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW_atomic, read_write> = var @binding_point(0, 0)
 }
 
-%atomicOr_5e95d4 = func():void -> %b2 {
-  %b2 = block {
+%atomicOr_5e95d4 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 0u
     %res:ptr<function, u32, read_write> = var, 0u
     store %arg_1, 1u
-    %x_18:u32 = load %arg_1
-    %6:ptr<storage, atomic<u32>, read_write> = access %sb_rw, 0u
-    %x_13:u32 = atomicOr %6, %x_18
+    %5:u32 = load %arg_1
+    %x_18:u32 = let %5
+    %7:ptr<storage, atomic<u32>, read_write> = access %sb_rw, 0u
+    %8:u32 = atomicOr %7, %x_18
+    %x_13:u32 = let %8
     store %res, %x_13
     ret
   }
 }
-%fragment_main_1 = func():void -> %b3 {
-  %b3 = block {
-    %9:void = call %atomicOr_5e95d4
+%fragment_main_1 = func():void {
+  $B3: {
+    %11:void = call %atomicOr_5e95d4
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %11:void = call %fragment_main_1
+%fragment_main = @fragment func():void {
+  $B4: {
+    %13:void = call %fragment_main_1
     ret
   }
 }
-%compute_main_1 = func():void -> %b5 {
-  %b5 = block {
-    %13:void = call %atomicOr_5e95d4
+%compute_main_1 = func():void {
+  $B5: {
+    %15:void = call %atomicOr_5e95d4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {
-  %b6 = block {
-    %15:void = call %compute_main_1
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B6: {
+    %17:void = call %compute_main_1
     ret
   }
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_i32.spvasm.expected.ir.msl
index efdd3b1..49e8313 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_i32.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicOr
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_u32.spvasm.expected.ir.msl
index efdd3b1..49e8313 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicOr/workgroup_u32.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicOr
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicStore/storage_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicStore/storage_i32.spvasm.expected.ir.msl
index f05836b..a33344a 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicStore/storage_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicStore/storage_i32.spvasm.expected.ir.msl
@@ -1,44 +1,45 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: SB_RW_atomic = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW_atomic = struct @align(4) {
   arg_0:atomic<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW_atomic, read_write> = var @binding_point(0, 0)
 }
 
-%atomicStore_d1e9a6 = func():void -> %b2 {
-  %b2 = block {
+%atomicStore_d1e9a6 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 0i
     store %arg_1, 1i
-    %x_20:i32 = load %arg_1
-    %5:ptr<storage, atomic<i32>, read_write> = access %sb_rw, 0u
-    %6:void = atomicStore %5, %x_20
+    %4:i32 = load %arg_1
+    %x_20:i32 = let %4
+    %6:ptr<storage, atomic<i32>, read_write> = access %sb_rw, 0u
+    %7:void = atomicStore %6, %x_20
     ret
   }
 }
-%fragment_main_1 = func():void -> %b3 {
-  %b3 = block {
-    %8:void = call %atomicStore_d1e9a6
+%fragment_main_1 = func():void {
+  $B3: {
+    %9:void = call %atomicStore_d1e9a6
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %10:void = call %fragment_main_1
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %fragment_main_1
     ret
   }
 }
-%compute_main_1 = func():void -> %b5 {
-  %b5 = block {
-    %12:void = call %atomicStore_d1e9a6
+%compute_main_1 = func():void {
+  $B5: {
+    %13:void = call %atomicStore_d1e9a6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {
-  %b6 = block {
-    %14:void = call %compute_main_1
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B6: {
+    %15:void = call %compute_main_1
     ret
   }
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicStore/storage_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicStore/storage_u32.spvasm.expected.ir.msl
index 30878b8..d8786c0 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicStore/storage_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicStore/storage_u32.spvasm.expected.ir.msl
@@ -1,44 +1,45 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: SB_RW_atomic = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW_atomic = struct @align(4) {
   arg_0:atomic<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW_atomic, read_write> = var @binding_point(0, 0)
 }
 
-%atomicStore_cdc29e = func():void -> %b2 {
-  %b2 = block {
+%atomicStore_cdc29e = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 0u
     store %arg_1, 1u
-    %x_18:u32 = load %arg_1
-    %5:ptr<storage, atomic<u32>, read_write> = access %sb_rw, 0u
-    %6:void = atomicStore %5, %x_18
+    %4:u32 = load %arg_1
+    %x_18:u32 = let %4
+    %6:ptr<storage, atomic<u32>, read_write> = access %sb_rw, 0u
+    %7:void = atomicStore %6, %x_18
     ret
   }
 }
-%fragment_main_1 = func():void -> %b3 {
-  %b3 = block {
-    %8:void = call %atomicStore_cdc29e
+%fragment_main_1 = func():void {
+  $B3: {
+    %9:void = call %atomicStore_cdc29e
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %10:void = call %fragment_main_1
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %fragment_main_1
     ret
   }
 }
-%compute_main_1 = func():void -> %b5 {
-  %b5 = block {
-    %12:void = call %atomicStore_cdc29e
+%compute_main_1 = func():void {
+  $B5: {
+    %13:void = call %atomicStore_cdc29e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {
-  %b6 = block {
-    %14:void = call %compute_main_1
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B6: {
+    %15:void = call %compute_main_1
     ret
   }
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_i32.spvasm.expected.ir.msl
index efdd3b1..92c0fdd 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_i32.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_u32.spvasm.expected.ir.msl
index efdd3b1..92c0fdd 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicStore/workgroup_u32.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicSub/storage_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicSub/storage_i32.spvasm.expected.ir.msl
index ab63ae0..6b41579 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicSub/storage_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicSub/storage_i32.spvasm.expected.ir.msl
@@ -1,46 +1,48 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: SB_RW_atomic = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW_atomic = struct @align(4) {
   arg_0:atomic<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW_atomic, read_write> = var @binding_point(0, 0)
 }
 
-%atomicSub_051100 = func():void -> %b2 {
-  %b2 = block {
+%atomicSub_051100 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 0i
     %res:ptr<function, i32, read_write> = var, 0i
     store %arg_1, 1i
-    %x_20:i32 = load %arg_1
-    %6:ptr<storage, atomic<i32>, read_write> = access %sb_rw, 0u
-    %x_13:i32 = atomicSub %6, %x_20
+    %5:i32 = load %arg_1
+    %x_20:i32 = let %5
+    %7:ptr<storage, atomic<i32>, read_write> = access %sb_rw, 0u
+    %8:i32 = atomicSub %7, %x_20
+    %x_13:i32 = let %8
     store %res, %x_13
     ret
   }
 }
-%fragment_main_1 = func():void -> %b3 {
-  %b3 = block {
-    %9:void = call %atomicSub_051100
+%fragment_main_1 = func():void {
+  $B3: {
+    %11:void = call %atomicSub_051100
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %11:void = call %fragment_main_1
+%fragment_main = @fragment func():void {
+  $B4: {
+    %13:void = call %fragment_main_1
     ret
   }
 }
-%compute_main_1 = func():void -> %b5 {
-  %b5 = block {
-    %13:void = call %atomicSub_051100
+%compute_main_1 = func():void {
+  $B5: {
+    %15:void = call %atomicSub_051100
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {
-  %b6 = block {
-    %15:void = call %compute_main_1
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B6: {
+    %17:void = call %compute_main_1
     ret
   }
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicSub/storage_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicSub/storage_u32.spvasm.expected.ir.msl
index 90257fb..a48c41d 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicSub/storage_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicSub/storage_u32.spvasm.expected.ir.msl
@@ -1,46 +1,48 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: SB_RW_atomic = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW_atomic = struct @align(4) {
   arg_0:atomic<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW_atomic, read_write> = var @binding_point(0, 0)
 }
 
-%atomicSub_15bfc9 = func():void -> %b2 {
-  %b2 = block {
+%atomicSub_15bfc9 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 0u
     %res:ptr<function, u32, read_write> = var, 0u
     store %arg_1, 1u
-    %x_18:u32 = load %arg_1
-    %6:ptr<storage, atomic<u32>, read_write> = access %sb_rw, 0u
-    %x_13:u32 = atomicSub %6, %x_18
+    %5:u32 = load %arg_1
+    %x_18:u32 = let %5
+    %7:ptr<storage, atomic<u32>, read_write> = access %sb_rw, 0u
+    %8:u32 = atomicSub %7, %x_18
+    %x_13:u32 = let %8
     store %res, %x_13
     ret
   }
 }
-%fragment_main_1 = func():void -> %b3 {
-  %b3 = block {
-    %9:void = call %atomicSub_15bfc9
+%fragment_main_1 = func():void {
+  $B3: {
+    %11:void = call %atomicSub_15bfc9
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %11:void = call %fragment_main_1
+%fragment_main = @fragment func():void {
+  $B4: {
+    %13:void = call %fragment_main_1
     ret
   }
 }
-%compute_main_1 = func():void -> %b5 {
-  %b5 = block {
-    %13:void = call %atomicSub_15bfc9
+%compute_main_1 = func():void {
+  $B5: {
+    %15:void = call %atomicSub_15bfc9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {
-  %b6 = block {
-    %15:void = call %compute_main_1
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B6: {
+    %17:void = call %compute_main_1
     ret
   }
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_i32.spvasm.expected.ir.msl
index efdd3b1..0c4bcbe 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_i32.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicSub
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_u32.spvasm.expected.ir.msl
index efdd3b1..0c4bcbe 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicSub/workgroup_u32.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicSub
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicXor/storage_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicXor/storage_i32.spvasm.expected.ir.msl
index c42ec40..e184a49 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicXor/storage_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicXor/storage_i32.spvasm.expected.ir.msl
@@ -1,46 +1,48 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: SB_RW_atomic = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW_atomic = struct @align(4) {
   arg_0:atomic<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW_atomic, read_write> = var @binding_point(0, 0)
 }
 
-%atomicXor_c1b78c = func():void -> %b2 {
-  %b2 = block {
+%atomicXor_c1b78c = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 0i
     %res:ptr<function, i32, read_write> = var, 0i
     store %arg_1, 1i
-    %x_20:i32 = load %arg_1
-    %6:ptr<storage, atomic<i32>, read_write> = access %sb_rw, 0u
-    %x_13:i32 = atomicXor %6, %x_20
+    %5:i32 = load %arg_1
+    %x_20:i32 = let %5
+    %7:ptr<storage, atomic<i32>, read_write> = access %sb_rw, 0u
+    %8:i32 = atomicXor %7, %x_20
+    %x_13:i32 = let %8
     store %res, %x_13
     ret
   }
 }
-%fragment_main_1 = func():void -> %b3 {
-  %b3 = block {
-    %9:void = call %atomicXor_c1b78c
+%fragment_main_1 = func():void {
+  $B3: {
+    %11:void = call %atomicXor_c1b78c
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %11:void = call %fragment_main_1
+%fragment_main = @fragment func():void {
+  $B4: {
+    %13:void = call %fragment_main_1
     ret
   }
 }
-%compute_main_1 = func():void -> %b5 {
-  %b5 = block {
-    %13:void = call %atomicXor_c1b78c
+%compute_main_1 = func():void {
+  $B5: {
+    %15:void = call %atomicXor_c1b78c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {
-  %b6 = block {
-    %15:void = call %compute_main_1
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B6: {
+    %17:void = call %compute_main_1
     ret
   }
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicXor/storage_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicXor/storage_u32.spvasm.expected.ir.msl
index 7301d13..b29898a 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicXor/storage_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicXor/storage_u32.spvasm.expected.ir.msl
@@ -1,46 +1,48 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: SB_RW_atomic = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW_atomic = struct @align(4) {
   arg_0:atomic<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW_atomic, read_write> = var @binding_point(0, 0)
 }
 
-%atomicXor_54510e = func():void -> %b2 {
-  %b2 = block {
+%atomicXor_54510e = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 0u
     %res:ptr<function, u32, read_write> = var, 0u
     store %arg_1, 1u
-    %x_18:u32 = load %arg_1
-    %6:ptr<storage, atomic<u32>, read_write> = access %sb_rw, 0u
-    %x_13:u32 = atomicXor %6, %x_18
+    %5:u32 = load %arg_1
+    %x_18:u32 = let %5
+    %7:ptr<storage, atomic<u32>, read_write> = access %sb_rw, 0u
+    %8:u32 = atomicXor %7, %x_18
+    %x_13:u32 = let %8
     store %res, %x_13
     ret
   }
 }
-%fragment_main_1 = func():void -> %b3 {
-  %b3 = block {
-    %9:void = call %atomicXor_54510e
+%fragment_main_1 = func():void {
+  $B3: {
+    %11:void = call %atomicXor_54510e
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %11:void = call %fragment_main_1
+%fragment_main = @fragment func():void {
+  $B4: {
+    %13:void = call %fragment_main_1
     ret
   }
 }
-%compute_main_1 = func():void -> %b5 {
-  %b5 = block {
-    %13:void = call %atomicXor_54510e
+%compute_main_1 = func():void {
+  $B5: {
+    %15:void = call %atomicXor_54510e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {
-  %b6 = block {
-    %15:void = call %compute_main_1
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B6: {
+    %17:void = call %compute_main_1
     ret
   }
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_i32.spvasm.expected.ir.msl
index efdd3b1..665f64b 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_i32.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicXor
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_u32.spvasm.expected.ir.msl
index efdd3b1..665f64b 100644
--- a/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/atomicXor/workgroup_u32.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicXor
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/storage_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/storage_i32.spvasm.expected.ir.msl
index 20cca2d..f87530e 100644
--- a/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/storage_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/storage_i32.spvasm.expected.ir.msl
@@ -1,45 +1,46 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: SB_RW_atomic = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW_atomic = struct @align(4) {
   arg_0:atomic<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW_atomic, read_write> = var @binding_point(0, 0)
 }
 
-%atomicAdd_d32fe4 = func():void -> %b2 {
-  %b2 = block {
+%atomicAdd_d32fe4 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 0i
     %res:ptr<function, i32, read_write> = var, 0i
     store %arg_1, 1i
     %5:ptr<storage, atomic<i32>, read_write> = access %sb_rw, 0u
-    %x_13:i32 = atomicSub %5, 1i
+    %6:i32 = atomicSub %5, 1i
+    %x_13:i32 = let %6
     store %res, %x_13
     ret
   }
 }
-%fragment_main_1 = func():void -> %b3 {
-  %b3 = block {
-    %8:void = call %atomicAdd_d32fe4
+%fragment_main_1 = func():void {
+  $B3: {
+    %9:void = call %atomicAdd_d32fe4
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %10:void = call %fragment_main_1
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %fragment_main_1
     ret
   }
 }
-%compute_main_1 = func():void -> %b5 {
-  %b5 = block {
-    %12:void = call %atomicAdd_d32fe4
+%compute_main_1 = func():void {
+  $B5: {
+    %13:void = call %atomicAdd_d32fe4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {
-  %b6 = block {
-    %14:void = call %compute_main_1
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B6: {
+    %15:void = call %compute_main_1
     ret
   }
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/storage_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/storage_u32.spvasm.expected.ir.msl
index 840a5b4..d827813 100644
--- a/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/storage_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/storage_u32.spvasm.expected.ir.msl
@@ -1,45 +1,46 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: SB_RW_atomic = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW_atomic = struct @align(4) {
   arg_0:atomic<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW_atomic, read_write> = var @binding_point(0, 0)
 }
 
-%atomicAdd_8a199a = func():void -> %b2 {
-  %b2 = block {
+%atomicAdd_8a199a = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 0u
     %res:ptr<function, u32, read_write> = var, 0u
     store %arg_1, 1u
     %5:ptr<storage, atomic<u32>, read_write> = access %sb_rw, 0u
-    %x_13:u32 = atomicSub %5, 1u
+    %6:u32 = atomicSub %5, 1u
+    %x_13:u32 = let %6
     store %res, %x_13
     ret
   }
 }
-%fragment_main_1 = func():void -> %b3 {
-  %b3 = block {
-    %8:void = call %atomicAdd_8a199a
+%fragment_main_1 = func():void {
+  $B3: {
+    %9:void = call %atomicAdd_8a199a
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %10:void = call %fragment_main_1
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %fragment_main_1
     ret
   }
 }
-%compute_main_1 = func():void -> %b5 {
-  %b5 = block {
-    %12:void = call %atomicAdd_8a199a
+%compute_main_1 = func():void {
+  $B5: {
+    %13:void = call %atomicAdd_8a199a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {
-  %b6 = block {
-    %14:void = call %compute_main_1
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B6: {
+    %15:void = call %compute_main_1
     ret
   }
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_i32.spvasm.expected.ir.msl
index efdd3b1..0c4bcbe 100644
--- a/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_i32.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicSub
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_u32.spvasm.expected.ir.msl
index efdd3b1..0c4bcbe 100644
--- a/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/spvAtomicDecrement/workgroup_u32.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicSub
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/storage_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/storage_i32.spvasm.expected.ir.msl
index 4066047..006c1b4 100644
--- a/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/storage_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/storage_i32.spvasm.expected.ir.msl
@@ -1,45 +1,46 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: SB_RW_atomic = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW_atomic = struct @align(4) {
   arg_0:atomic<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW_atomic, read_write> = var @binding_point(0, 0)
 }
 
-%atomicAdd_d32fe4 = func():void -> %b2 {
-  %b2 = block {
+%atomicAdd_d32fe4 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 0i
     %res:ptr<function, i32, read_write> = var, 0i
     store %arg_1, 1i
     %5:ptr<storage, atomic<i32>, read_write> = access %sb_rw, 0u
-    %x_13:i32 = atomicAdd %5, 1i
+    %6:i32 = atomicAdd %5, 1i
+    %x_13:i32 = let %6
     store %res, %x_13
     ret
   }
 }
-%fragment_main_1 = func():void -> %b3 {
-  %b3 = block {
-    %8:void = call %atomicAdd_d32fe4
+%fragment_main_1 = func():void {
+  $B3: {
+    %9:void = call %atomicAdd_d32fe4
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %10:void = call %fragment_main_1
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %fragment_main_1
     ret
   }
 }
-%compute_main_1 = func():void -> %b5 {
-  %b5 = block {
-    %12:void = call %atomicAdd_d32fe4
+%compute_main_1 = func():void {
+  $B5: {
+    %13:void = call %atomicAdd_d32fe4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {
-  %b6 = block {
-    %14:void = call %compute_main_1
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B6: {
+    %15:void = call %compute_main_1
     ret
   }
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/storage_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/storage_u32.spvasm.expected.ir.msl
index d6b86ec..0275a62 100644
--- a/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/storage_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/storage_u32.spvasm.expected.ir.msl
@@ -1,45 +1,46 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: SB_RW_atomic = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW_atomic = struct @align(4) {
   arg_0:atomic<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW_atomic, read_write> = var @binding_point(0, 0)
 }
 
-%atomicAdd_8a199a = func():void -> %b2 {
-  %b2 = block {
+%atomicAdd_8a199a = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 0u
     %res:ptr<function, u32, read_write> = var, 0u
     store %arg_1, 1u
     %5:ptr<storage, atomic<u32>, read_write> = access %sb_rw, 0u
-    %x_13:u32 = atomicAdd %5, 1u
+    %6:u32 = atomicAdd %5, 1u
+    %x_13:u32 = let %6
     store %res, %x_13
     ret
   }
 }
-%fragment_main_1 = func():void -> %b3 {
-  %b3 = block {
-    %8:void = call %atomicAdd_8a199a
+%fragment_main_1 = func():void {
+  $B3: {
+    %9:void = call %atomicAdd_8a199a
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %10:void = call %fragment_main_1
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %fragment_main_1
     ret
   }
 }
-%compute_main_1 = func():void -> %b5 {
-  %b5 = block {
-    %12:void = call %atomicAdd_8a199a
+%compute_main_1 = func():void {
+  $B5: {
+    %13:void = call %atomicAdd_8a199a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {
-  %b6 = block {
-    %14:void = call %compute_main_1
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B6: {
+    %15:void = call %compute_main_1
     ret
   }
 }
diff --git a/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_i32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_i32.spvasm.expected.ir.msl
index efdd3b1..f7dc0d0 100644
--- a/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_i32.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicAdd
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_u32.spvasm.expected.ir.msl b/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_u32.spvasm.expected.ir.msl
index efdd3b1..f7dc0d0 100644
--- a/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/atomics/from_gen/var/spvAtomicIncrement/workgroup_u32.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicAdd
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/degrees.spvasm.expected.ir.msl b/test/tint/builtins/degrees.spvasm.expected.ir.msl
index efdd3b1..52f1705 100644
--- a/test/tint/builtins/degrees.spvasm.expected.ir.msl
+++ b/test/tint/builtins/degrees.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: degrees
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/extractBits/scalar/i32.spvasm.expected.ir.msl b/test/tint/builtins/extractBits/scalar/i32.spvasm.expected.ir.msl
index e32d733..40ec97c 100644
--- a/test/tint/builtins/extractBits/scalar/i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/extractBits/scalar/i32.spvasm.expected.ir.msl
@@ -1,12 +1,9 @@
-#include <metal_stdlib>
-using namespace metal;
+SKIP: FAILED
 
-void f_1() {
-  int v = 0;
-  uint offset_1 = 0u;
-  uint count = 0u;
-  int const x_14 = extract_bits(v, offset_1, count);
-}
-kernel void f() {
-  f_1();
-}
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: min
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/builtins/extractBits/scalar/u32.spvasm.expected.ir.msl b/test/tint/builtins/extractBits/scalar/u32.spvasm.expected.ir.msl
index f745d77..40ec97c 100644
--- a/test/tint/builtins/extractBits/scalar/u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/extractBits/scalar/u32.spvasm.expected.ir.msl
@@ -1,12 +1,9 @@
-#include <metal_stdlib>
-using namespace metal;
+SKIP: FAILED
 
-void f_1() {
-  uint v = 0u;
-  uint offset_1 = 0u;
-  uint count = 0u;
-  uint const x_11 = extract_bits(v, offset_1, count);
-}
-kernel void f() {
-  f_1();
-}
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: min
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/builtins/extractBits/vec3/i32.spvasm.expected.ir.msl b/test/tint/builtins/extractBits/vec3/i32.spvasm.expected.ir.msl
index 12ea438..40ec97c 100644
--- a/test/tint/builtins/extractBits/vec3/i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/extractBits/vec3/i32.spvasm.expected.ir.msl
@@ -1,12 +1,9 @@
-#include <metal_stdlib>
-using namespace metal;
+SKIP: FAILED
 
-void f_1() {
-  int3 v = int3(0);
-  uint offset_1 = 0u;
-  uint count = 0u;
-  int3 const x_15 = extract_bits(v, offset_1, count);
-}
-kernel void f() {
-  f_1();
-}
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: min
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/builtins/extractBits/vec3/u32.spvasm.expected.ir.msl b/test/tint/builtins/extractBits/vec3/u32.spvasm.expected.ir.msl
index d03d9a2..40ec97c 100644
--- a/test/tint/builtins/extractBits/vec3/u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/extractBits/vec3/u32.spvasm.expected.ir.msl
@@ -1,12 +1,9 @@
-#include <metal_stdlib>
-using namespace metal;
+SKIP: FAILED
 
-void f_1() {
-  uint3 v = uint3(0u);
-  uint offset_1 = 0u;
-  uint count = 0u;
-  uint3 const x_14 = extract_bits(v, offset_1, count);
-}
-kernel void f() {
-  f_1();
-}
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: min
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/builtins/frexp/scalar/mixed.wgsl.expected.ir.msl b/test/tint/builtins/frexp/scalar/mixed.wgsl.expected.ir.msl
index 4b0600b..1423d26 100644
--- a/test/tint/builtins/frexp/scalar/mixed.wgsl.expected.ir.msl
+++ b/test/tint/builtins/frexp/scalar/mixed.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: frexp
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: frexp
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/frexp/scalar/runtime.wgsl.expected.ir.msl b/test/tint/builtins/frexp/scalar/runtime.wgsl.expected.ir.msl
index 4b0600b..1423d26 100644
--- a/test/tint/builtins/frexp/scalar/runtime.wgsl.expected.ir.msl
+++ b/test/tint/builtins/frexp/scalar/runtime.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: frexp
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: frexp
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/frexp/vector/mixed.wgsl.expected.ir.msl b/test/tint/builtins/frexp/vector/mixed.wgsl.expected.ir.msl
index 4b0600b..1423d26 100644
--- a/test/tint/builtins/frexp/vector/mixed.wgsl.expected.ir.msl
+++ b/test/tint/builtins/frexp/vector/mixed.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: frexp
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: frexp
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/frexp/vector/runtime.wgsl.expected.ir.msl b/test/tint/builtins/frexp/vector/runtime.wgsl.expected.ir.msl
index 4b0600b..1423d26 100644
--- a/test/tint/builtins/frexp/vector/runtime.wgsl.expected.ir.msl
+++ b/test/tint/builtins/frexp/vector/runtime.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: frexp
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: frexp
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/abs/002533.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/abs/002533.wgsl.expected.ir.msl
index 5818c13..0731a6e 100644
--- a/test/tint/builtins/gen/literal/abs/002533.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/abs/002533.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%abs_002533 = func():void -> %b2 {
-  %b2 = block {
+%abs_002533 = func():void {
+  $B2: {
     %res:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %4:vec4<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %abs_002533
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %abs_002533
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %abs_002533
     ret
   }
diff --git a/test/tint/builtins/gen/literal/abs/005174.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/abs/005174.wgsl.expected.ir.msl
index c3db820..437c147 100644
--- a/test/tint/builtins/gen/literal/abs/005174.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/abs/005174.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%abs_005174 = func():void -> %b2 {
-  %b2 = block {
+%abs_005174 = func():void {
+  $B2: {
     %res:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %4:vec3<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %abs_005174
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %abs_005174
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %abs_005174
     ret
   }
diff --git a/test/tint/builtins/gen/literal/abs/1ce782.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/abs/1ce782.wgsl.expected.ir.msl
index 1fa9350..cb8d8a9 100644
--- a/test/tint/builtins/gen/literal/abs/1ce782.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/abs/1ce782.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%abs_1ce782 = func():void -> %b2 {
-  %b2 = block {
+%abs_1ce782 = func():void {
+  $B2: {
     %res:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
     %4:vec4<u32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %abs_1ce782
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %abs_1ce782
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %abs_1ce782
     ret
   }
diff --git a/test/tint/builtins/gen/literal/abs/1e9d53.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/abs/1e9d53.wgsl.expected.ir.msl
index 2fdf8a4..d119f0a 100644
--- a/test/tint/builtins/gen/literal/abs/1e9d53.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/abs/1e9d53.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%abs_1e9d53 = func():void -> %b2 {
-  %b2 = block {
+%abs_1e9d53 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %4:vec2<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %abs_1e9d53
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %abs_1e9d53
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %abs_1e9d53
     ret
   }
diff --git a/test/tint/builtins/gen/literal/abs/421ca3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/abs/421ca3.wgsl.expected.ir.msl
index 749f10f..352c724 100644
--- a/test/tint/builtins/gen/literal/abs/421ca3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/abs/421ca3.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%abs_421ca3 = func():void -> %b2 {
-  %b2 = block {
+%abs_421ca3 = func():void {
+  $B2: {
     %res:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %4:vec3<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %abs_421ca3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %abs_421ca3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %abs_421ca3
     ret
   }
diff --git a/test/tint/builtins/gen/literal/abs/467cd1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/abs/467cd1.wgsl.expected.ir.msl
index 625c122..74cdbfe 100644
--- a/test/tint/builtins/gen/literal/abs/467cd1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/abs/467cd1.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%abs_467cd1 = func():void -> %b2 {
-  %b2 = block {
+%abs_467cd1 = func():void {
+  $B2: {
     %res:ptr<function, u32, read_write> = var, 1u
     %4:u32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %abs_467cd1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %abs_467cd1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %abs_467cd1
     ret
   }
diff --git a/test/tint/builtins/gen/literal/abs/4ad288.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/abs/4ad288.wgsl.expected.ir.msl
index f865ecb..ad04181 100644
--- a/test/tint/builtins/gen/literal/abs/4ad288.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/abs/4ad288.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%abs_4ad288 = func():void -> %b2 {
-  %b2 = block {
+%abs_4ad288 = func():void {
+  $B2: {
     %res:ptr<function, i32, read_write> = var, 1i
     %4:i32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %abs_4ad288
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %abs_4ad288
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %abs_4ad288
     ret
   }
diff --git a/test/tint/builtins/gen/literal/abs/538d29.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/abs/538d29.wgsl.expected.ir.msl
index f12cff0..a6cfc71 100644
--- a/test/tint/builtins/gen/literal/abs/538d29.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/abs/538d29.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%abs_538d29 = func():void -> %b2 {
-  %b2 = block {
+%abs_538d29 = func():void {
+  $B2: {
     %res:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %4:vec4<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %abs_538d29
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %abs_538d29
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %abs_538d29
     ret
   }
diff --git a/test/tint/builtins/gen/literal/abs/5ad50a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/abs/5ad50a.wgsl.expected.ir.msl
index 8b29d4e..4816bb5 100644
--- a/test/tint/builtins/gen/literal/abs/5ad50a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/abs/5ad50a.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%abs_5ad50a = func():void -> %b2 {
-  %b2 = block {
+%abs_5ad50a = func():void {
+  $B2: {
     %res:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %4:vec3<i32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %abs_5ad50a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %abs_5ad50a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %abs_5ad50a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/abs/5ae4fe.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/abs/5ae4fe.wgsl.expected.ir.msl
index ffd8d38..a18628f 100644
--- a/test/tint/builtins/gen/literal/abs/5ae4fe.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/abs/5ae4fe.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%abs_5ae4fe = func():void -> %b2 {
-  %b2 = block {
+%abs_5ae4fe = func():void {
+  $B2: {
     %res:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %4:vec2<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %abs_5ae4fe
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %abs_5ae4fe
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %abs_5ae4fe
     ret
   }
diff --git a/test/tint/builtins/gen/literal/abs/7326de.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/abs/7326de.wgsl.expected.ir.msl
index a1f4af2..9b1b183 100644
--- a/test/tint/builtins/gen/literal/abs/7326de.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/abs/7326de.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%abs_7326de = func():void -> %b2 {
-  %b2 = block {
+%abs_7326de = func():void {
+  $B2: {
     %res:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %4:vec3<u32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %abs_7326de
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %abs_7326de
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %abs_7326de
     ret
   }
diff --git a/test/tint/builtins/gen/literal/abs/7f28e6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/abs/7f28e6.wgsl.expected.ir.msl
index 8108b31..d4b3603 100644
--- a/test/tint/builtins/gen/literal/abs/7f28e6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/abs/7f28e6.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%abs_7f28e6 = func():void -> %b2 {
-  %b2 = block {
+%abs_7f28e6 = func():void {
+  $B2: {
     %res:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %4:vec2<u32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %abs_7f28e6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %abs_7f28e6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %abs_7f28e6
     ret
   }
diff --git a/test/tint/builtins/gen/literal/abs/7faa9e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/abs/7faa9e.wgsl.expected.ir.msl
index 8b2e6f8..327c226 100644
--- a/test/tint/builtins/gen/literal/abs/7faa9e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/abs/7faa9e.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%abs_7faa9e = func():void -> %b2 {
-  %b2 = block {
+%abs_7faa9e = func():void {
+  $B2: {
     %res:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %4:vec2<i32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %abs_7faa9e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %abs_7faa9e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %abs_7faa9e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/abs/9c80a6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/abs/9c80a6.wgsl.expected.ir.msl
index b73bce3..174bf05 100644
--- a/test/tint/builtins/gen/literal/abs/9c80a6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/abs/9c80a6.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%abs_9c80a6 = func():void -> %b2 {
-  %b2 = block {
+%abs_9c80a6 = func():void {
+  $B2: {
     %res:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %4:vec4<i32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %abs_9c80a6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %abs_9c80a6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %abs_9c80a6
     ret
   }
diff --git a/test/tint/builtins/gen/literal/abs/b96037.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/abs/b96037.wgsl.expected.ir.msl
index ca11eb0..7d603d9 100644
--- a/test/tint/builtins/gen/literal/abs/b96037.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/abs/b96037.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%abs_b96037 = func():void -> %b2 {
-  %b2 = block {
+%abs_b96037 = func():void {
+  $B2: {
     %res:ptr<function, f32, read_write> = var, 1.0f
     %4:f32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %abs_b96037
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %abs_b96037
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %abs_b96037
     ret
   }
diff --git a/test/tint/builtins/gen/literal/abs/fd247f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/abs/fd247f.wgsl.expected.ir.msl
index 87dd2e0..d53f0ff 100644
--- a/test/tint/builtins/gen/literal/abs/fd247f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/abs/fd247f.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%abs_fd247f = func():void -> %b2 {
-  %b2 = block {
+%abs_fd247f = func():void {
+  $B2: {
     %res:ptr<function, f16, read_write> = var, 1.0h
     %4:f16 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %abs_fd247f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %abs_fd247f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %abs_fd247f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/acos/004aff.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/acos/004aff.wgsl.expected.ir.msl
index 2e59739..06b25fd 100644
--- a/test/tint/builtins/gen/literal/acos/004aff.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/acos/004aff.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%acos_004aff = func():void -> %b2 {
-  %b2 = block {
+%acos_004aff = func():void {
+  $B2: {
     %res:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(0.25048828125h)
     %4:vec2<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %acos_004aff
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %acos_004aff
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %acos_004aff
     ret
   }
diff --git a/test/tint/builtins/gen/literal/acos/203628.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/acos/203628.wgsl.expected.ir.msl
index ff30f79..b742690 100644
--- a/test/tint/builtins/gen/literal/acos/203628.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/acos/203628.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%acos_203628 = func():void -> %b2 {
-  %b2 = block {
+%acos_203628 = func():void {
+  $B2: {
     %res:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(0.25048828125h)
     %4:vec4<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %acos_203628
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %acos_203628
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %acos_203628
     ret
   }
diff --git a/test/tint/builtins/gen/literal/acos/303e3d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/acos/303e3d.wgsl.expected.ir.msl
index 11baadd..8e6bdd4 100644
--- a/test/tint/builtins/gen/literal/acos/303e3d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/acos/303e3d.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%acos_303e3d = func():void -> %b2 {
-  %b2 = block {
+%acos_303e3d = func():void {
+  $B2: {
     %res:ptr<function, f16, read_write> = var, 0.25048828125h
     %4:f16 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %acos_303e3d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %acos_303e3d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %acos_303e3d
     ret
   }
diff --git a/test/tint/builtins/gen/literal/acos/489247.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/acos/489247.wgsl.expected.ir.msl
index fe5cf10..136a7bb 100644
--- a/test/tint/builtins/gen/literal/acos/489247.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/acos/489247.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%acos_489247 = func():void -> %b2 {
-  %b2 = block {
+%acos_489247 = func():void {
+  $B2: {
     %res:ptr<function, f32, read_write> = var, 0.25f
     %4:f32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %acos_489247
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %acos_489247
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %acos_489247
     ret
   }
diff --git a/test/tint/builtins/gen/literal/acos/8e2acf.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/acos/8e2acf.wgsl.expected.ir.msl
index a0dadf7..c302051 100644
--- a/test/tint/builtins/gen/literal/acos/8e2acf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/acos/8e2acf.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%acos_8e2acf = func():void -> %b2 {
-  %b2 = block {
+%acos_8e2acf = func():void {
+  $B2: {
     %res:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(0.25f)
     %4:vec4<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %acos_8e2acf
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %acos_8e2acf
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %acos_8e2acf
     ret
   }
diff --git a/test/tint/builtins/gen/literal/acos/a610c4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/acos/a610c4.wgsl.expected.ir.msl
index 1d307a1..a5c39dc 100644
--- a/test/tint/builtins/gen/literal/acos/a610c4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/acos/a610c4.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%acos_a610c4 = func():void -> %b2 {
-  %b2 = block {
+%acos_a610c4 = func():void {
+  $B2: {
     %res:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(0.25f)
     %4:vec3<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %acos_a610c4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %acos_a610c4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %acos_a610c4
     ret
   }
diff --git a/test/tint/builtins/gen/literal/acos/dfc915.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/acos/dfc915.wgsl.expected.ir.msl
index 8ec4209..73ad491 100644
--- a/test/tint/builtins/gen/literal/acos/dfc915.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/acos/dfc915.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%acos_dfc915 = func():void -> %b2 {
-  %b2 = block {
+%acos_dfc915 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(0.25f)
     %4:vec2<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %acos_dfc915
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %acos_dfc915
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %acos_dfc915
     ret
   }
diff --git a/test/tint/builtins/gen/literal/acos/f47057.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/acos/f47057.wgsl.expected.ir.msl
index 21306cd..a52f337 100644
--- a/test/tint/builtins/gen/literal/acos/f47057.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/acos/f47057.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%acos_f47057 = func():void -> %b2 {
-  %b2 = block {
+%acos_f47057 = func():void {
+  $B2: {
     %res:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(0.25048828125h)
     %4:vec3<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %acos_f47057
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %acos_f47057
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %acos_f47057
     ret
   }
diff --git a/test/tint/builtins/gen/literal/acosh/5f49d8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/acosh/5f49d8.wgsl.expected.ir.msl
index 364f5c5..767cdf8 100644
--- a/test/tint/builtins/gen/literal/acosh/5f49d8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/acosh/5f49d8.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%acosh_5f49d8 = func():void -> %b2 {
-  %b2 = block {
+%acosh_5f49d8 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(0.99951171875h)
     %4:vec2<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %acosh_5f49d8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %acosh_5f49d8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %acosh_5f49d8
     ret
   }
diff --git a/test/tint/builtins/gen/literal/acosh/640883.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/acosh/640883.wgsl.expected.ir.msl
index 7e3b687..ae0ced3 100644
--- a/test/tint/builtins/gen/literal/acosh/640883.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/acosh/640883.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%acosh_640883 = func():void -> %b2 {
-  %b2 = block {
+%acosh_640883 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %4:vec2<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %acosh_640883
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %acosh_640883
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %acosh_640883
     ret
   }
diff --git a/test/tint/builtins/gen/literal/acosh/a37dfe.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/acosh/a37dfe.wgsl.expected.ir.msl
index e95e9e4..f1865f3 100644
--- a/test/tint/builtins/gen/literal/acosh/a37dfe.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/acosh/a37dfe.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%acosh_a37dfe = func():void -> %b2 {
-  %b2 = block {
+%acosh_a37dfe = func():void {
+  $B2: {
     %res:ptr<function, f16, read_write> = var, 0.99951171875h
     %4:f16 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %acosh_a37dfe
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %acosh_a37dfe
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %acosh_a37dfe
     ret
   }
diff --git a/test/tint/builtins/gen/literal/acosh/d51ccb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/acosh/d51ccb.wgsl.expected.ir.msl
index 325af03..e729a16 100644
--- a/test/tint/builtins/gen/literal/acosh/d51ccb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/acosh/d51ccb.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%acosh_d51ccb = func():void -> %b2 {
-  %b2 = block {
+%acosh_d51ccb = func():void {
+  $B2: {
     %res:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %4:vec4<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %acosh_d51ccb
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %acosh_d51ccb
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %acosh_d51ccb
     ret
   }
diff --git a/test/tint/builtins/gen/literal/acosh/de60d8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/acosh/de60d8.wgsl.expected.ir.msl
index 0e17b06..79e04ce2 100644
--- a/test/tint/builtins/gen/literal/acosh/de60d8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/acosh/de60d8.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%acosh_de60d8 = func():void -> %b2 {
-  %b2 = block {
+%acosh_de60d8 = func():void {
+  $B2: {
     %res:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(0.99951171875h)
     %4:vec4<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %acosh_de60d8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %acosh_de60d8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %acosh_de60d8
     ret
   }
diff --git a/test/tint/builtins/gen/literal/acosh/e38f5c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/acosh/e38f5c.wgsl.expected.ir.msl
index 0af73a9..ae5884e 100644
--- a/test/tint/builtins/gen/literal/acosh/e38f5c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/acosh/e38f5c.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%acosh_e38f5c = func():void -> %b2 {
-  %b2 = block {
+%acosh_e38f5c = func():void {
+  $B2: {
     %res:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %4:vec3<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %acosh_e38f5c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %acosh_e38f5c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %acosh_e38f5c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/acosh/ecf2d1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/acosh/ecf2d1.wgsl.expected.ir.msl
index 5d6a69f..fb27f29 100644
--- a/test/tint/builtins/gen/literal/acosh/ecf2d1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/acosh/ecf2d1.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%acosh_ecf2d1 = func():void -> %b2 {
-  %b2 = block {
+%acosh_ecf2d1 = func():void {
+  $B2: {
     %res:ptr<function, f32, read_write> = var, 1.0f
     %4:f32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %acosh_ecf2d1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %acosh_ecf2d1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %acosh_ecf2d1
     ret
   }
diff --git a/test/tint/builtins/gen/literal/acosh/f56574.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/acosh/f56574.wgsl.expected.ir.msl
index db1adcc..953cc26 100644
--- a/test/tint/builtins/gen/literal/acosh/f56574.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/acosh/f56574.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%acosh_f56574 = func():void -> %b2 {
-  %b2 = block {
+%acosh_f56574 = func():void {
+  $B2: {
     %res:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(0.99951171875h)
     %4:vec3<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %acosh_f56574
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %acosh_f56574
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %acosh_f56574
     ret
   }
diff --git a/test/tint/builtins/gen/literal/all/353d6a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/all/353d6a.wgsl.expected.ir.msl
index 8998e1c..96f3514 100644
--- a/test/tint/builtins/gen/literal/all/353d6a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/all/353d6a.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%all_353d6a = func():void -> %b2 {
-  %b2 = block {
+%all_353d6a = func():void {
+  $B2: {
     %res:ptr<function, bool, read_write> = var, true
     %4:bool = load %res
     %5:bool = eq %4, false
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %all_353d6a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %all_353d6a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %all_353d6a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/all/986c7b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/all/986c7b.wgsl.expected.ir.msl
index a6b4449..6b51625 100644
--- a/test/tint/builtins/gen/literal/all/986c7b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/all/986c7b.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%all_986c7b = func():void -> %b2 {
-  %b2 = block {
+%all_986c7b = func():void {
+  $B2: {
     %res:ptr<function, bool, read_write> = var, true
     %4:bool = load %res
     %5:bool = eq %4, false
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %all_986c7b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %all_986c7b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %all_986c7b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/all/bd2dba.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/all/bd2dba.wgsl.expected.ir.msl
index 4458631..6ab4c60 100644
--- a/test/tint/builtins/gen/literal/all/bd2dba.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/all/bd2dba.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%all_bd2dba = func():void -> %b2 {
-  %b2 = block {
+%all_bd2dba = func():void {
+  $B2: {
     %res:ptr<function, bool, read_write> = var, true
     %4:bool = load %res
     %5:bool = eq %4, false
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %all_bd2dba
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %all_bd2dba
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %all_bd2dba
     ret
   }
diff --git a/test/tint/builtins/gen/literal/all/f46790.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/all/f46790.wgsl.expected.ir.msl
index e3ce048..780c535 100644
--- a/test/tint/builtins/gen/literal/all/f46790.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/all/f46790.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%all_f46790 = func():void -> %b2 {
-  %b2 = block {
+%all_f46790 = func():void {
+  $B2: {
     %res:ptr<function, bool, read_write> = var, true
     %4:bool = load %res
     %5:bool = eq %4, false
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %all_f46790
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %all_f46790
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %all_f46790
     ret
   }
diff --git a/test/tint/builtins/gen/literal/any/083428.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/any/083428.wgsl.expected.ir.msl
index ab81d36..098ce1c 100644
--- a/test/tint/builtins/gen/literal/any/083428.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/any/083428.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%any_083428 = func():void -> %b2 {
-  %b2 = block {
+%any_083428 = func():void {
+  $B2: {
     %res:ptr<function, bool, read_write> = var, true
     %4:bool = load %res
     %5:bool = eq %4, false
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %any_083428
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %any_083428
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %any_083428
     ret
   }
diff --git a/test/tint/builtins/gen/literal/any/0e3e58.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/any/0e3e58.wgsl.expected.ir.msl
index 04c181f..932fcf4 100644
--- a/test/tint/builtins/gen/literal/any/0e3e58.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/any/0e3e58.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%any_0e3e58 = func():void -> %b2 {
-  %b2 = block {
+%any_0e3e58 = func():void {
+  $B2: {
     %res:ptr<function, bool, read_write> = var, true
     %4:bool = load %res
     %5:bool = eq %4, false
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %any_0e3e58
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %any_0e3e58
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %any_0e3e58
     ret
   }
diff --git a/test/tint/builtins/gen/literal/any/2ab91a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/any/2ab91a.wgsl.expected.ir.msl
index 97835cf..2149cc4 100644
--- a/test/tint/builtins/gen/literal/any/2ab91a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/any/2ab91a.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%any_2ab91a = func():void -> %b2 {
-  %b2 = block {
+%any_2ab91a = func():void {
+  $B2: {
     %res:ptr<function, bool, read_write> = var, true
     %4:bool = load %res
     %5:bool = eq %4, false
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %any_2ab91a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %any_2ab91a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %any_2ab91a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/any/e755c1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/any/e755c1.wgsl.expected.ir.msl
index 377a837..d585dd8 100644
--- a/test/tint/builtins/gen/literal/any/e755c1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/any/e755c1.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%any_e755c1 = func():void -> %b2 {
-  %b2 = block {
+%any_e755c1 = func():void {
+  $B2: {
     %res:ptr<function, bool, read_write> = var, true
     %4:bool = load %res
     %5:bool = eq %4, false
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %any_e755c1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %any_e755c1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %any_e755c1
     ret
   }
diff --git a/test/tint/builtins/gen/literal/arrayLength/1588cd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/arrayLength/1588cd.wgsl.expected.ir.msl
index b4a5e32..6a20a8a 100644
--- a/test/tint/builtins/gen/literal/arrayLength/1588cd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/arrayLength/1588cd.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: SB_RO = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RO = struct @align(4) {
   arg_0:array<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_ro:ptr<storage, SB_RO, read> = var @binding_point(0, 1)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%arrayLength_1588cd = func():void -> %b2 {
-  %b2 = block {
+%arrayLength_1588cd = func():void {
+  $B2: {
     %4:ptr<storage, array<i32>, read> = access %sb_ro, 0u
     %5:u32 = arrayLength %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %arrayLength_1588cd
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %arrayLength_1588cd
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %arrayLength_1588cd
     ret
   }
diff --git a/test/tint/builtins/gen/literal/arrayLength/61b1c7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/arrayLength/61b1c7.wgsl.expected.ir.msl
index c984c30..7f449f6 100644
--- a/test/tint/builtins/gen/literal/arrayLength/61b1c7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/arrayLength/61b1c7.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: SB_RW = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW = struct @align(4) {
   arg_0:array<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW, read_write> = var @binding_point(0, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%arrayLength_61b1c7 = func():void -> %b2 {
-  %b2 = block {
+%arrayLength_61b1c7 = func():void {
+  $B2: {
     %4:ptr<storage, array<i32>, read_write> = access %sb_rw, 0u
     %5:u32 = arrayLength %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %arrayLength_61b1c7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %arrayLength_61b1c7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %arrayLength_61b1c7
     ret
   }
diff --git a/test/tint/builtins/gen/literal/arrayLength/8421b9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/arrayLength/8421b9.wgsl.expected.ir.msl
index af17f38..f062c57 100644
--- a/test/tint/builtins/gen/literal/arrayLength/8421b9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/arrayLength/8421b9.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: SB_RO = struct @align(2) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RO = struct @align(2) {
   arg_0:array<f16> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_ro:ptr<storage, SB_RO, read> = var @binding_point(0, 1)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%arrayLength_8421b9 = func():void -> %b2 {
-  %b2 = block {
+%arrayLength_8421b9 = func():void {
+  $B2: {
     %4:ptr<storage, array<f16>, read> = access %sb_ro, 0u
     %5:u32 = arrayLength %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %arrayLength_8421b9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %arrayLength_8421b9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %arrayLength_8421b9
     ret
   }
diff --git a/test/tint/builtins/gen/literal/arrayLength/a0f5ca.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/arrayLength/a0f5ca.wgsl.expected.ir.msl
index 502bcb1..a48951d 100644
--- a/test/tint/builtins/gen/literal/arrayLength/a0f5ca.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/arrayLength/a0f5ca.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: SB_RO = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RO = struct @align(4) {
   arg_0:array<f32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_ro:ptr<storage, SB_RO, read> = var @binding_point(0, 1)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%arrayLength_a0f5ca = func():void -> %b2 {
-  %b2 = block {
+%arrayLength_a0f5ca = func():void {
+  $B2: {
     %4:ptr<storage, array<f32>, read> = access %sb_ro, 0u
     %5:u32 = arrayLength %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %arrayLength_a0f5ca
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %arrayLength_a0f5ca
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %arrayLength_a0f5ca
     ret
   }
diff --git a/test/tint/builtins/gen/literal/arrayLength/cbd6b5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/arrayLength/cbd6b5.wgsl.expected.ir.msl
index 5794de2..818bebf 100644
--- a/test/tint/builtins/gen/literal/arrayLength/cbd6b5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/arrayLength/cbd6b5.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: SB_RW = struct @align(2) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW = struct @align(2) {
   arg_0:array<f16> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW, read_write> = var @binding_point(0, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%arrayLength_cbd6b5 = func():void -> %b2 {
-  %b2 = block {
+%arrayLength_cbd6b5 = func():void {
+  $B2: {
     %4:ptr<storage, array<f16>, read_write> = access %sb_rw, 0u
     %5:u32 = arrayLength %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %arrayLength_cbd6b5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %arrayLength_cbd6b5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %arrayLength_cbd6b5
     ret
   }
diff --git a/test/tint/builtins/gen/literal/arrayLength/cdd123.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/arrayLength/cdd123.wgsl.expected.ir.msl
index d3348fb..bbdda44 100644
--- a/test/tint/builtins/gen/literal/arrayLength/cdd123.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/arrayLength/cdd123.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: SB_RW = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW = struct @align(4) {
   arg_0:array<f32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW, read_write> = var @binding_point(0, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%arrayLength_cdd123 = func():void -> %b2 {
-  %b2 = block {
+%arrayLength_cdd123 = func():void {
+  $B2: {
     %4:ptr<storage, array<f32>, read_write> = access %sb_rw, 0u
     %5:u32 = arrayLength %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %arrayLength_cdd123
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %arrayLength_cdd123
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %arrayLength_cdd123
     ret
   }
diff --git a/test/tint/builtins/gen/literal/arrayLength/cfca0a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/arrayLength/cfca0a.wgsl.expected.ir.msl
index e381c84..f320d12 100644
--- a/test/tint/builtins/gen/literal/arrayLength/cfca0a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/arrayLength/cfca0a.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: SB_RO = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RO = struct @align(4) {
   arg_0:array<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_ro:ptr<storage, SB_RO, read> = var @binding_point(0, 1)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%arrayLength_cfca0a = func():void -> %b2 {
-  %b2 = block {
+%arrayLength_cfca0a = func():void {
+  $B2: {
     %4:ptr<storage, array<u32>, read> = access %sb_ro, 0u
     %5:u32 = arrayLength %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %arrayLength_cfca0a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %arrayLength_cfca0a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %arrayLength_cfca0a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/arrayLength/eb510f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/arrayLength/eb510f.wgsl.expected.ir.msl
index 900b8d0..b07c58a 100644
--- a/test/tint/builtins/gen/literal/arrayLength/eb510f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/arrayLength/eb510f.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: SB_RW = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW = struct @align(4) {
   arg_0:array<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW, read_write> = var @binding_point(0, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%arrayLength_eb510f = func():void -> %b2 {
-  %b2 = block {
+%arrayLength_eb510f = func():void {
+  $B2: {
     %4:ptr<storage, array<u32>, read_write> = access %sb_rw, 0u
     %5:u32 = arrayLength %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %arrayLength_eb510f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %arrayLength_eb510f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %arrayLength_eb510f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/asin/064953.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/asin/064953.wgsl.expected.ir.msl
index 1be28f8..6cac7c5 100644
--- a/test/tint/builtins/gen/literal/asin/064953.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/asin/064953.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%asin_064953 = func():void -> %b2 {
-  %b2 = block {
+%asin_064953 = func():void {
+  $B2: {
     %res:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(0.5f)
     %4:vec4<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %asin_064953
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %asin_064953
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %asin_064953
     ret
   }
diff --git a/test/tint/builtins/gen/literal/asin/11dfda.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/asin/11dfda.wgsl.expected.ir.msl
index 2f1aa8b..e1e9ad2 100644
--- a/test/tint/builtins/gen/literal/asin/11dfda.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/asin/11dfda.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%asin_11dfda = func():void -> %b2 {
-  %b2 = block {
+%asin_11dfda = func():void {
+  $B2: {
     %res:ptr<function, f16, read_write> = var, 0.499755859375h
     %4:f16 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %asin_11dfda
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %asin_11dfda
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %asin_11dfda
     ret
   }
diff --git a/test/tint/builtins/gen/literal/asin/2d8e29.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/asin/2d8e29.wgsl.expected.ir.msl
index 5fecc8f..c7fd0a9 100644
--- a/test/tint/builtins/gen/literal/asin/2d8e29.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/asin/2d8e29.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%asin_2d8e29 = func():void -> %b2 {
-  %b2 = block {
+%asin_2d8e29 = func():void {
+  $B2: {
     %res:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(0.499755859375h)
     %4:vec3<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %asin_2d8e29
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %asin_2d8e29
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %asin_2d8e29
     ret
   }
diff --git a/test/tint/builtins/gen/literal/asin/3cfbd4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/asin/3cfbd4.wgsl.expected.ir.msl
index 79c5350..3240bd1 100644
--- a/test/tint/builtins/gen/literal/asin/3cfbd4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/asin/3cfbd4.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%asin_3cfbd4 = func():void -> %b2 {
-  %b2 = block {
+%asin_3cfbd4 = func():void {
+  $B2: {
     %res:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(0.499755859375h)
     %4:vec4<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %asin_3cfbd4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %asin_3cfbd4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %asin_3cfbd4
     ret
   }
diff --git a/test/tint/builtins/gen/literal/asin/7b6a44.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/asin/7b6a44.wgsl.expected.ir.msl
index e0197e2..3b792c6 100644
--- a/test/tint/builtins/gen/literal/asin/7b6a44.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/asin/7b6a44.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%asin_7b6a44 = func():void -> %b2 {
-  %b2 = block {
+%asin_7b6a44 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(0.5f)
     %4:vec2<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %asin_7b6a44
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %asin_7b6a44
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %asin_7b6a44
     ret
   }
diff --git a/test/tint/builtins/gen/literal/asin/8cd9c9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/asin/8cd9c9.wgsl.expected.ir.msl
index 420a12b..9451fcd 100644
--- a/test/tint/builtins/gen/literal/asin/8cd9c9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/asin/8cd9c9.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%asin_8cd9c9 = func():void -> %b2 {
-  %b2 = block {
+%asin_8cd9c9 = func():void {
+  $B2: {
     %res:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(0.5f)
     %4:vec3<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %asin_8cd9c9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %asin_8cd9c9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %asin_8cd9c9
     ret
   }
diff --git a/test/tint/builtins/gen/literal/asin/b4aced.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/asin/b4aced.wgsl.expected.ir.msl
index 36da383..88a1eda 100644
--- a/test/tint/builtins/gen/literal/asin/b4aced.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/asin/b4aced.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%asin_b4aced = func():void -> %b2 {
-  %b2 = block {
+%asin_b4aced = func():void {
+  $B2: {
     %res:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(0.499755859375h)
     %4:vec2<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %asin_b4aced
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %asin_b4aced
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %asin_b4aced
     ret
   }
diff --git a/test/tint/builtins/gen/literal/asin/c0c272.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/asin/c0c272.wgsl.expected.ir.msl
index 8f325c8..2e76028 100644
--- a/test/tint/builtins/gen/literal/asin/c0c272.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/asin/c0c272.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%asin_c0c272 = func():void -> %b2 {
-  %b2 = block {
+%asin_c0c272 = func():void {
+  $B2: {
     %res:ptr<function, f32, read_write> = var, 0.5f
     %4:f32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %asin_c0c272
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %asin_c0c272
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %asin_c0c272
     ret
   }
diff --git a/test/tint/builtins/gen/literal/asinh/157447.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/asinh/157447.wgsl.expected.ir.msl
index fabafc2..4e55c09 100644
--- a/test/tint/builtins/gen/literal/asinh/157447.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/asinh/157447.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%asinh_157447 = func():void -> %b2 {
-  %b2 = block {
+%asinh_157447 = func():void {
+  $B2: {
     %res:ptr<function, f32, read_write> = var, 0.88137358427047729492f
     %4:f32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %asinh_157447
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %asinh_157447
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %asinh_157447
     ret
   }
diff --git a/test/tint/builtins/gen/literal/asinh/2265ee.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/asinh/2265ee.wgsl.expected.ir.msl
index 03f7806..9cdfce9 100644
--- a/test/tint/builtins/gen/literal/asinh/2265ee.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/asinh/2265ee.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%asinh_2265ee = func():void -> %b2 {
-  %b2 = block {
+%asinh_2265ee = func():void {
+  $B2: {
     %res:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(0.88137358427047729492f)
     %4:vec3<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %asinh_2265ee
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %asinh_2265ee
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %asinh_2265ee
     ret
   }
diff --git a/test/tint/builtins/gen/literal/asinh/468a48.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/asinh/468a48.wgsl.expected.ir.msl
index d3fa53c..d3d9eb2 100644
--- a/test/tint/builtins/gen/literal/asinh/468a48.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/asinh/468a48.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%asinh_468a48 = func():void -> %b2 {
-  %b2 = block {
+%asinh_468a48 = func():void {
+  $B2: {
     %res:ptr<function, f16, read_write> = var, 0.88134765625h
     %4:f16 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %asinh_468a48
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %asinh_468a48
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %asinh_468a48
     ret
   }
diff --git a/test/tint/builtins/gen/literal/asinh/4a2226.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/asinh/4a2226.wgsl.expected.ir.msl
index 3bbe187..90087a9 100644
--- a/test/tint/builtins/gen/literal/asinh/4a2226.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/asinh/4a2226.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%asinh_4a2226 = func():void -> %b2 {
-  %b2 = block {
+%asinh_4a2226 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(0.88137358427047729492f)
     %4:vec2<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %asinh_4a2226
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %asinh_4a2226
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %asinh_4a2226
     ret
   }
diff --git a/test/tint/builtins/gen/literal/asinh/8d2e51.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/asinh/8d2e51.wgsl.expected.ir.msl
index 122c440..2b1f246 100644
--- a/test/tint/builtins/gen/literal/asinh/8d2e51.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/asinh/8d2e51.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%asinh_8d2e51 = func():void -> %b2 {
-  %b2 = block {
+%asinh_8d2e51 = func():void {
+  $B2: {
     %res:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(0.88137358427047729492f)
     %4:vec4<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %asinh_8d2e51
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %asinh_8d2e51
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %asinh_8d2e51
     ret
   }
diff --git a/test/tint/builtins/gen/literal/asinh/95ab2b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/asinh/95ab2b.wgsl.expected.ir.msl
index a2c850a..8de6cef 100644
--- a/test/tint/builtins/gen/literal/asinh/95ab2b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/asinh/95ab2b.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%asinh_95ab2b = func():void -> %b2 {
-  %b2 = block {
+%asinh_95ab2b = func():void {
+  $B2: {
     %res:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(0.88134765625h)
     %4:vec4<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %asinh_95ab2b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %asinh_95ab2b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %asinh_95ab2b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/asinh/ad8f8b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/asinh/ad8f8b.wgsl.expected.ir.msl
index 0f0f7c3..d36b50a 100644
--- a/test/tint/builtins/gen/literal/asinh/ad8f8b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/asinh/ad8f8b.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%asinh_ad8f8b = func():void -> %b2 {
-  %b2 = block {
+%asinh_ad8f8b = func():void {
+  $B2: {
     %res:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(0.88134765625h)
     %4:vec2<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %asinh_ad8f8b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %asinh_ad8f8b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %asinh_ad8f8b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/asinh/fb5e8c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/asinh/fb5e8c.wgsl.expected.ir.msl
index 368b8b0..d342382 100644
--- a/test/tint/builtins/gen/literal/asinh/fb5e8c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/asinh/fb5e8c.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%asinh_fb5e8c = func():void -> %b2 {
-  %b2 = block {
+%asinh_fb5e8c = func():void {
+  $B2: {
     %res:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(0.88134765625h)
     %4:vec3<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %asinh_fb5e8c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %asinh_fb5e8c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %asinh_fb5e8c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/atan/02979a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atan/02979a.wgsl.expected.ir.msl
index dad9f69..fc16177 100644
--- a/test/tint/builtins/gen/literal/atan/02979a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atan/02979a.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%atan_02979a = func():void -> %b2 {
-  %b2 = block {
+%atan_02979a = func():void {
+  $B2: {
     %res:ptr<function, f32, read_write> = var, 0.78539818525314331055f
     %4:f32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %atan_02979a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %atan_02979a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %atan_02979a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/atan/19faea.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atan/19faea.wgsl.expected.ir.msl
index 18eda1a..d969133 100644
--- a/test/tint/builtins/gen/literal/atan/19faea.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atan/19faea.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%atan_19faea = func():void -> %b2 {
-  %b2 = block {
+%atan_19faea = func():void {
+  $B2: {
     %res:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(0.78515625h)
     %4:vec4<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %atan_19faea
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %atan_19faea
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %atan_19faea
     ret
   }
diff --git a/test/tint/builtins/gen/literal/atan/1e1764.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atan/1e1764.wgsl.expected.ir.msl
index 4c922730..74d783a 100644
--- a/test/tint/builtins/gen/literal/atan/1e1764.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atan/1e1764.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%atan_1e1764 = func():void -> %b2 {
-  %b2 = block {
+%atan_1e1764 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(0.78515625h)
     %4:vec2<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %atan_1e1764
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %atan_1e1764
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %atan_1e1764
     ret
   }
diff --git a/test/tint/builtins/gen/literal/atan/331e6d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atan/331e6d.wgsl.expected.ir.msl
index 89b4f55..203fdc1 100644
--- a/test/tint/builtins/gen/literal/atan/331e6d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atan/331e6d.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%atan_331e6d = func():void -> %b2 {
-  %b2 = block {
+%atan_331e6d = func():void {
+  $B2: {
     %res:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(0.78539818525314331055f)
     %4:vec3<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %atan_331e6d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %atan_331e6d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %atan_331e6d
     ret
   }
diff --git a/test/tint/builtins/gen/literal/atan/a5f421.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atan/a5f421.wgsl.expected.ir.msl
index 5429ce0..b9bc08a 100644
--- a/test/tint/builtins/gen/literal/atan/a5f421.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atan/a5f421.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%atan_a5f421 = func():void -> %b2 {
-  %b2 = block {
+%atan_a5f421 = func():void {
+  $B2: {
     %res:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(0.78515625h)
     %4:vec3<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %atan_a5f421
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %atan_a5f421
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %atan_a5f421
     ret
   }
diff --git a/test/tint/builtins/gen/literal/atan/a7ba61.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atan/a7ba61.wgsl.expected.ir.msl
index 3f9956d..7cc44ea 100644
--- a/test/tint/builtins/gen/literal/atan/a7ba61.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atan/a7ba61.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%atan_a7ba61 = func():void -> %b2 {
-  %b2 = block {
+%atan_a7ba61 = func():void {
+  $B2: {
     %res:ptr<function, f16, read_write> = var, 0.78515625h
     %4:f16 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %atan_a7ba61
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %atan_a7ba61
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %atan_a7ba61
     ret
   }
diff --git a/test/tint/builtins/gen/literal/atan/a8b696.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atan/a8b696.wgsl.expected.ir.msl
index 1e9aef8..649646a 100644
--- a/test/tint/builtins/gen/literal/atan/a8b696.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atan/a8b696.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%atan_a8b696 = func():void -> %b2 {
-  %b2 = block {
+%atan_a8b696 = func():void {
+  $B2: {
     %res:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(0.78539818525314331055f)
     %4:vec4<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %atan_a8b696
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %atan_a8b696
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %atan_a8b696
     ret
   }
diff --git a/test/tint/builtins/gen/literal/atan/ad96e4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atan/ad96e4.wgsl.expected.ir.msl
index 9ae816d..fabc053 100644
--- a/test/tint/builtins/gen/literal/atan/ad96e4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atan/ad96e4.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%atan_ad96e4 = func():void -> %b2 {
-  %b2 = block {
+%atan_ad96e4 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(0.78539818525314331055f)
     %4:vec2<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %atan_ad96e4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %atan_ad96e4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %atan_ad96e4
     ret
   }
diff --git a/test/tint/builtins/gen/literal/atan2/21dfea.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atan2/21dfea.wgsl.expected.ir.msl
index 9b04df1..a1b4e14 100644
--- a/test/tint/builtins/gen/literal/atan2/21dfea.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atan2/21dfea.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%atan2_21dfea = func():void -> %b2 {
-  %b2 = block {
+%atan2_21dfea = func():void {
+  $B2: {
     %res:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(0.78515625h)
     %4:vec3<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %atan2_21dfea
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %atan2_21dfea
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %atan2_21dfea
     ret
   }
diff --git a/test/tint/builtins/gen/literal/atan2/57fb13.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atan2/57fb13.wgsl.expected.ir.msl
index aee8836..62027e2 100644
--- a/test/tint/builtins/gen/literal/atan2/57fb13.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atan2/57fb13.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%atan2_57fb13 = func():void -> %b2 {
-  %b2 = block {
+%atan2_57fb13 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(0.78539818525314331055f)
     %4:vec2<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %atan2_57fb13
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %atan2_57fb13
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %atan2_57fb13
     ret
   }
diff --git a/test/tint/builtins/gen/literal/atan2/93febc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atan2/93febc.wgsl.expected.ir.msl
index 2e03eb4..f15080b 100644
--- a/test/tint/builtins/gen/literal/atan2/93febc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atan2/93febc.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%atan2_93febc = func():void -> %b2 {
-  %b2 = block {
+%atan2_93febc = func():void {
+  $B2: {
     %res:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(0.78515625h)
     %4:vec2<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %atan2_93febc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %atan2_93febc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %atan2_93febc
     ret
   }
diff --git a/test/tint/builtins/gen/literal/atan2/96057c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atan2/96057c.wgsl.expected.ir.msl
index 4303d9a..0fc831d 100644
--- a/test/tint/builtins/gen/literal/atan2/96057c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atan2/96057c.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%atan2_96057c = func():void -> %b2 {
-  %b2 = block {
+%atan2_96057c = func():void {
+  $B2: {
     %res:ptr<function, f32, read_write> = var, 0.78539818525314331055f
     %4:f32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %atan2_96057c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %atan2_96057c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %atan2_96057c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/atan2/a70d0d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atan2/a70d0d.wgsl.expected.ir.msl
index 3bd4e20..6d245dd 100644
--- a/test/tint/builtins/gen/literal/atan2/a70d0d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atan2/a70d0d.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%atan2_a70d0d = func():void -> %b2 {
-  %b2 = block {
+%atan2_a70d0d = func():void {
+  $B2: {
     %res:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(0.78539818525314331055f)
     %4:vec3<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %atan2_a70d0d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %atan2_a70d0d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %atan2_a70d0d
     ret
   }
diff --git a/test/tint/builtins/gen/literal/atan2/ae713e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atan2/ae713e.wgsl.expected.ir.msl
index d7f7a6e..bb1dae7 100644
--- a/test/tint/builtins/gen/literal/atan2/ae713e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atan2/ae713e.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%atan2_ae713e = func():void -> %b2 {
-  %b2 = block {
+%atan2_ae713e = func():void {
+  $B2: {
     %res:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(0.78539818525314331055f)
     %4:vec4<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %atan2_ae713e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %atan2_ae713e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %atan2_ae713e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/atan2/ca698e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atan2/ca698e.wgsl.expected.ir.msl
index d3a5a02..8028639 100644
--- a/test/tint/builtins/gen/literal/atan2/ca698e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atan2/ca698e.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%atan2_ca698e = func():void -> %b2 {
-  %b2 = block {
+%atan2_ca698e = func():void {
+  $B2: {
     %res:ptr<function, f16, read_write> = var, 0.78515625h
     %4:f16 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %atan2_ca698e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %atan2_ca698e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %atan2_ca698e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/atan2/d983ab.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atan2/d983ab.wgsl.expected.ir.msl
index ad869ba..0c4fab0 100644
--- a/test/tint/builtins/gen/literal/atan2/d983ab.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atan2/d983ab.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%atan2_d983ab = func():void -> %b2 {
-  %b2 = block {
+%atan2_d983ab = func():void {
+  $B2: {
     %res:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(0.78515625h)
     %4:vec4<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %atan2_d983ab
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %atan2_d983ab
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %atan2_d983ab
     ret
   }
diff --git a/test/tint/builtins/gen/literal/atanh/440cca.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atanh/440cca.wgsl.expected.ir.msl
index 49d782b..7467696 100644
--- a/test/tint/builtins/gen/literal/atanh/440cca.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atanh/440cca.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%atanh_440cca = func():void -> %b2 {
-  %b2 = block {
+%atanh_440cca = func():void {
+  $B2: {
     %res:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(0.54930615425109863281f)
     %4:vec3<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %atanh_440cca
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %atanh_440cca
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %atanh_440cca
     ret
   }
diff --git a/test/tint/builtins/gen/literal/atanh/5bf88d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atanh/5bf88d.wgsl.expected.ir.msl
index 7eb4393..f6900e9 100644
--- a/test/tint/builtins/gen/literal/atanh/5bf88d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atanh/5bf88d.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%atanh_5bf88d = func():void -> %b2 {
-  %b2 = block {
+%atanh_5bf88d = func():void {
+  $B2: {
     %res:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(0.548828125h)
     %4:vec2<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %atanh_5bf88d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %atanh_5bf88d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %atanh_5bf88d
     ret
   }
diff --git a/test/tint/builtins/gen/literal/atanh/7997d8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atanh/7997d8.wgsl.expected.ir.msl
index 35d69ce..9dd2282 100644
--- a/test/tint/builtins/gen/literal/atanh/7997d8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atanh/7997d8.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%atanh_7997d8 = func():void -> %b2 {
-  %b2 = block {
+%atanh_7997d8 = func():void {
+  $B2: {
     %res:ptr<function, f32, read_write> = var, 0.54930615425109863281f
     %4:f32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %atanh_7997d8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %atanh_7997d8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %atanh_7997d8
     ret
   }
diff --git a/test/tint/builtins/gen/literal/atanh/c0e634.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atanh/c0e634.wgsl.expected.ir.msl
index b63ca3b..2051e59 100644
--- a/test/tint/builtins/gen/literal/atanh/c0e634.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atanh/c0e634.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%atanh_c0e634 = func():void -> %b2 {
-  %b2 = block {
+%atanh_c0e634 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(0.54930615425109863281f)
     %4:vec2<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %atanh_c0e634
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %atanh_c0e634
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %atanh_c0e634
     ret
   }
diff --git a/test/tint/builtins/gen/literal/atanh/d2d8cd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atanh/d2d8cd.wgsl.expected.ir.msl
index 49d3d2f..326cb9e 100644
--- a/test/tint/builtins/gen/literal/atanh/d2d8cd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atanh/d2d8cd.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%atanh_d2d8cd = func():void -> %b2 {
-  %b2 = block {
+%atanh_d2d8cd = func():void {
+  $B2: {
     %res:ptr<function, f16, read_write> = var, 0.548828125h
     %4:f16 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %atanh_d2d8cd
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %atanh_d2d8cd
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %atanh_d2d8cd
     ret
   }
diff --git a/test/tint/builtins/gen/literal/atanh/e3b450.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atanh/e3b450.wgsl.expected.ir.msl
index 544486e..5f5b10b 100644
--- a/test/tint/builtins/gen/literal/atanh/e3b450.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atanh/e3b450.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%atanh_e3b450 = func():void -> %b2 {
-  %b2 = block {
+%atanh_e3b450 = func():void {
+  $B2: {
     %res:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(0.548828125h)
     %4:vec4<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %atanh_e3b450
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %atanh_e3b450
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %atanh_e3b450
     ret
   }
diff --git a/test/tint/builtins/gen/literal/atanh/ec4b06.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atanh/ec4b06.wgsl.expected.ir.msl
index f2a7240..94c5e42 100644
--- a/test/tint/builtins/gen/literal/atanh/ec4b06.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atanh/ec4b06.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%atanh_ec4b06 = func():void -> %b2 {
-  %b2 = block {
+%atanh_ec4b06 = func():void {
+  $B2: {
     %res:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(0.548828125h)
     %4:vec3<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %atanh_ec4b06
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %atanh_ec4b06
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %atanh_ec4b06
     ret
   }
diff --git a/test/tint/builtins/gen/literal/atanh/f3e01b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atanh/f3e01b.wgsl.expected.ir.msl
index 7676aff..db87360 100644
--- a/test/tint/builtins/gen/literal/atanh/f3e01b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atanh/f3e01b.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%atanh_f3e01b = func():void -> %b2 {
-  %b2 = block {
+%atanh_f3e01b = func():void {
+  $B2: {
     %res:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(0.54930615425109863281f)
     %4:vec4<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %atanh_f3e01b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %atanh_f3e01b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %atanh_f3e01b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/atomicAdd/794055.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicAdd/794055.wgsl.expected.ir.msl
index 8385fb6..2d8ca1e 100644
--- a/test/tint/builtins/gen/literal/atomicAdd/794055.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicAdd/794055.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<workgroup, atomic<i32>, read_write> = var
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicAdd_794055 = func():void -> %b2 {
-  %b2 = block {
+%atomicAdd_794055 = func():void {
+  $B2: {
     %4:i32 = atomicAdd %arg_0, 1i
     %res:ptr<function, i32, read_write> = var, %4
     %6:i32 = load %res
@@ -14,9 +14,17 @@
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
-    %8:void = call %atomicAdd_794055
+%compute_main = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B3: {
+    %9:bool = eq %tint_local_index, 0u
+    if %9 [t: $B4] {  # if_1
+      $B4: {  # true
+        %10:void = atomicStore %arg_0, 0i
+        exit_if  # if_1
+      }
+    }
+    %11:void = msl.threadgroup_barrier 4u
+    %12:void = call %atomicAdd_794055
     ret
   }
 }
diff --git a/test/tint/builtins/gen/literal/atomicAdd/8a199a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicAdd/8a199a.wgsl.expected.ir.msl
index 7b17382..1f492ef 100644
--- a/test/tint/builtins/gen/literal/atomicAdd/8a199a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicAdd/8a199a.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: SB_RW = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW = struct @align(4) {
   arg_0:atomic<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW, read_write> = var @binding_point(0, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicAdd_8a199a = func():void -> %b2 {
-  %b2 = block {
+%atomicAdd_8a199a = func():void {
+  $B2: {
     %4:ptr<storage, atomic<u32>, read_write> = access %sb_rw, 0u
     %5:u32 = atomicAdd %4, 1u
     %res:ptr<function, u32, read_write> = var, %5
@@ -19,14 +19,14 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %9:void = call %atomicAdd_8a199a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b4 {
-  %b4 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B4: {
     %11:void = call %atomicAdd_8a199a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/atomicAdd/d32fe4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicAdd/d32fe4.wgsl.expected.ir.msl
index 026bbd3..6e2f524 100644
--- a/test/tint/builtins/gen/literal/atomicAdd/d32fe4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicAdd/d32fe4.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: SB_RW = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW = struct @align(4) {
   arg_0:atomic<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW, read_write> = var @binding_point(0, 0)
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicAdd_d32fe4 = func():void -> %b2 {
-  %b2 = block {
+%atomicAdd_d32fe4 = func():void {
+  $B2: {
     %4:ptr<storage, atomic<i32>, read_write> = access %sb_rw, 0u
     %5:i32 = atomicAdd %4, 1i
     %res:ptr<function, i32, read_write> = var, %5
@@ -19,14 +19,14 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %9:void = call %atomicAdd_d32fe4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b4 {
-  %b4 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B4: {
     %11:void = call %atomicAdd_d32fe4
     ret
   }
diff --git a/test/tint/builtins/gen/literal/atomicAdd/d5db1d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicAdd/d5db1d.wgsl.expected.ir.msl
index 305e5b7..9d612a8 100644
--- a/test/tint/builtins/gen/literal/atomicAdd/d5db1d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicAdd/d5db1d.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<workgroup, atomic<u32>, read_write> = var
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicAdd_d5db1d = func():void -> %b2 {
-  %b2 = block {
+%atomicAdd_d5db1d = func():void {
+  $B2: {
     %4:u32 = atomicAdd %arg_0, 1u
     %res:ptr<function, u32, read_write> = var, %4
     %6:u32 = load %res
@@ -14,9 +14,17 @@
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
-    %8:void = call %atomicAdd_d5db1d
+%compute_main = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B3: {
+    %9:bool = eq %tint_local_index, 0u
+    if %9 [t: $B4] {  # if_1
+      $B4: {  # true
+        %10:void = atomicStore %arg_0, 0u
+        exit_if  # if_1
+      }
+    }
+    %11:void = msl.threadgroup_barrier 4u
+    %12:void = call %atomicAdd_d5db1d
     ret
   }
 }
diff --git a/test/tint/builtins/gen/literal/atomicAnd/152966.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicAnd/152966.wgsl.expected.ir.msl
index e3ab49d..726d92f 100644
--- a/test/tint/builtins/gen/literal/atomicAnd/152966.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicAnd/152966.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: SB_RW = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW = struct @align(4) {
   arg_0:atomic<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW, read_write> = var @binding_point(0, 0)
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicAnd_152966 = func():void -> %b2 {
-  %b2 = block {
+%atomicAnd_152966 = func():void {
+  $B2: {
     %4:ptr<storage, atomic<i32>, read_write> = access %sb_rw, 0u
     %5:i32 = atomicAnd %4, 1i
     %res:ptr<function, i32, read_write> = var, %5
@@ -19,14 +19,14 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %9:void = call %atomicAnd_152966
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b4 {
-  %b4 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B4: {
     %11:void = call %atomicAnd_152966
     ret
   }
diff --git a/test/tint/builtins/gen/literal/atomicAnd/34edd3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicAnd/34edd3.wgsl.expected.ir.msl
index 5ebc2d7..1a92f2a 100644
--- a/test/tint/builtins/gen/literal/atomicAnd/34edd3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicAnd/34edd3.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<workgroup, atomic<u32>, read_write> = var
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicAnd_34edd3 = func():void -> %b2 {
-  %b2 = block {
+%atomicAnd_34edd3 = func():void {
+  $B2: {
     %4:u32 = atomicAnd %arg_0, 1u
     %res:ptr<function, u32, read_write> = var, %4
     %6:u32 = load %res
@@ -14,9 +14,17 @@
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
-    %8:void = call %atomicAnd_34edd3
+%compute_main = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B3: {
+    %9:bool = eq %tint_local_index, 0u
+    if %9 [t: $B4] {  # if_1
+      $B4: {  # true
+        %10:void = atomicStore %arg_0, 0u
+        exit_if  # if_1
+      }
+    }
+    %11:void = msl.threadgroup_barrier 4u
+    %12:void = call %atomicAnd_34edd3
     ret
   }
 }
diff --git a/test/tint/builtins/gen/literal/atomicAnd/45a819.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicAnd/45a819.wgsl.expected.ir.msl
index 91c7b44..e0214cd 100644
--- a/test/tint/builtins/gen/literal/atomicAnd/45a819.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicAnd/45a819.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<workgroup, atomic<i32>, read_write> = var
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicAnd_45a819 = func():void -> %b2 {
-  %b2 = block {
+%atomicAnd_45a819 = func():void {
+  $B2: {
     %4:i32 = atomicAnd %arg_0, 1i
     %res:ptr<function, i32, read_write> = var, %4
     %6:i32 = load %res
@@ -14,9 +14,17 @@
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
-    %8:void = call %atomicAnd_45a819
+%compute_main = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B3: {
+    %9:bool = eq %tint_local_index, 0u
+    if %9 [t: $B4] {  # if_1
+      $B4: {  # true
+        %10:void = atomicStore %arg_0, 0i
+        exit_if  # if_1
+      }
+    }
+    %11:void = msl.threadgroup_barrier 4u
+    %12:void = call %atomicAnd_45a819
     ret
   }
 }
diff --git a/test/tint/builtins/gen/literal/atomicAnd/85a8d9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicAnd/85a8d9.wgsl.expected.ir.msl
index 231a009..d5f01f1 100644
--- a/test/tint/builtins/gen/literal/atomicAnd/85a8d9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicAnd/85a8d9.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: SB_RW = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW = struct @align(4) {
   arg_0:atomic<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW, read_write> = var @binding_point(0, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicAnd_85a8d9 = func():void -> %b2 {
-  %b2 = block {
+%atomicAnd_85a8d9 = func():void {
+  $B2: {
     %4:ptr<storage, atomic<u32>, read_write> = access %sb_rw, 0u
     %5:u32 = atomicAnd %4, 1u
     %res:ptr<function, u32, read_write> = var, %5
@@ -19,14 +19,14 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %9:void = call %atomicAnd_85a8d9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b4 {
-  %b4 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B4: {
     %11:void = call %atomicAnd_85a8d9
     ret
   }
diff --git a/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/1bd40a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/1bd40a.wgsl.expected.ir.msl
index 566e676..fdb0a0a 100644
--- a/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/1bd40a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/1bd40a.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: SB_RW = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW = struct @align(4) {
   arg_0:atomic<i32> @offset(0)
 }
 
@@ -9,26 +9,26 @@
   exchanged:bool @offset(4)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW, read_write> = var @binding_point(0, 0)
 }
 
-%atomicCompareExchangeWeak_1bd40a = func():void -> %b2 {
-  %b2 = block {
+%atomicCompareExchangeWeak_1bd40a = func():void {
+  $B2: {
     %3:ptr<storage, atomic<i32>, read_write> = access %sb_rw, 0u
     %4:__atomic_compare_exchange_result_i32 = atomicCompareExchangeWeak %3, 1i, 1i
     %res:ptr<function, __atomic_compare_exchange_result_i32, read_write> = var, %4
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %7:void = call %atomicCompareExchangeWeak_1bd40a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b4 {
-  %b4 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B4: {
     %9:void = call %atomicCompareExchangeWeak_1bd40a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/63d8e6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/63d8e6.wgsl.expected.ir.msl
index b95f55c..fa34457 100644
--- a/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/63d8e6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/63d8e6.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: SB_RW = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW = struct @align(4) {
   arg_0:atomic<u32> @offset(0)
 }
 
@@ -9,26 +9,26 @@
   exchanged:bool @offset(4)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW, read_write> = var @binding_point(0, 0)
 }
 
-%atomicCompareExchangeWeak_63d8e6 = func():void -> %b2 {
-  %b2 = block {
+%atomicCompareExchangeWeak_63d8e6 = func():void {
+  $B2: {
     %3:ptr<storage, atomic<u32>, read_write> = access %sb_rw, 0u
     %4:__atomic_compare_exchange_result_u32 = atomicCompareExchangeWeak %3, 1u, 1u
     %res:ptr<function, __atomic_compare_exchange_result_u32, read_write> = var, %4
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %7:void = call %atomicCompareExchangeWeak_63d8e6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b4 {
-  %b4 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B4: {
     %9:void = call %atomicCompareExchangeWeak_63d8e6
     ret
   }
diff --git a/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/83580d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/83580d.wgsl.expected.ir.msl
index 09231af..b4e0e6d 100644
--- a/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/83580d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/83580d.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: atomicCompareExchangeWeak
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicCompareExchangeWeak
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/e88938.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/e88938.wgsl.expected.ir.msl
index 09231af..b4e0e6d 100644
--- a/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/e88938.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/e88938.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: atomicCompareExchangeWeak
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicCompareExchangeWeak
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/atomicExchange/0a5dca.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicExchange/0a5dca.wgsl.expected.ir.msl
index b8262bd..44b9310 100644
--- a/test/tint/builtins/gen/literal/atomicExchange/0a5dca.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicExchange/0a5dca.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<workgroup, atomic<u32>, read_write> = var
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicExchange_0a5dca = func():void -> %b2 {
-  %b2 = block {
+%atomicExchange_0a5dca = func():void {
+  $B2: {
     %4:u32 = atomicExchange %arg_0, 1u
     %res:ptr<function, u32, read_write> = var, %4
     %6:u32 = load %res
@@ -14,9 +14,17 @@
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
-    %8:void = call %atomicExchange_0a5dca
+%compute_main = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B3: {
+    %9:bool = eq %tint_local_index, 0u
+    if %9 [t: $B4] {  # if_1
+      $B4: {  # true
+        %10:void = atomicStore %arg_0, 0u
+        exit_if  # if_1
+      }
+    }
+    %11:void = msl.threadgroup_barrier 4u
+    %12:void = call %atomicExchange_0a5dca
     ret
   }
 }
diff --git a/test/tint/builtins/gen/literal/atomicExchange/d59712.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicExchange/d59712.wgsl.expected.ir.msl
index c793ccc..2ae14ff 100644
--- a/test/tint/builtins/gen/literal/atomicExchange/d59712.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicExchange/d59712.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: SB_RW = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW = struct @align(4) {
   arg_0:atomic<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW, read_write> = var @binding_point(0, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicExchange_d59712 = func():void -> %b2 {
-  %b2 = block {
+%atomicExchange_d59712 = func():void {
+  $B2: {
     %4:ptr<storage, atomic<u32>, read_write> = access %sb_rw, 0u
     %5:u32 = atomicExchange %4, 1u
     %res:ptr<function, u32, read_write> = var, %5
@@ -19,14 +19,14 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %9:void = call %atomicExchange_d59712
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b4 {
-  %b4 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B4: {
     %11:void = call %atomicExchange_d59712
     ret
   }
diff --git a/test/tint/builtins/gen/literal/atomicExchange/e114ba.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicExchange/e114ba.wgsl.expected.ir.msl
index 4d546b5..1c2e377 100644
--- a/test/tint/builtins/gen/literal/atomicExchange/e114ba.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicExchange/e114ba.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<workgroup, atomic<i32>, read_write> = var
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicExchange_e114ba = func():void -> %b2 {
-  %b2 = block {
+%atomicExchange_e114ba = func():void {
+  $B2: {
     %4:i32 = atomicExchange %arg_0, 1i
     %res:ptr<function, i32, read_write> = var, %4
     %6:i32 = load %res
@@ -14,9 +14,17 @@
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
-    %8:void = call %atomicExchange_e114ba
+%compute_main = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B3: {
+    %9:bool = eq %tint_local_index, 0u
+    if %9 [t: $B4] {  # if_1
+      $B4: {  # true
+        %10:void = atomicStore %arg_0, 0i
+        exit_if  # if_1
+      }
+    }
+    %11:void = msl.threadgroup_barrier 4u
+    %12:void = call %atomicExchange_e114ba
     ret
   }
 }
diff --git a/test/tint/builtins/gen/literal/atomicExchange/f2e22f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicExchange/f2e22f.wgsl.expected.ir.msl
index eff330f..be2f686 100644
--- a/test/tint/builtins/gen/literal/atomicExchange/f2e22f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicExchange/f2e22f.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: SB_RW = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW = struct @align(4) {
   arg_0:atomic<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW, read_write> = var @binding_point(0, 0)
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicExchange_f2e22f = func():void -> %b2 {
-  %b2 = block {
+%atomicExchange_f2e22f = func():void {
+  $B2: {
     %4:ptr<storage, atomic<i32>, read_write> = access %sb_rw, 0u
     %5:i32 = atomicExchange %4, 1i
     %res:ptr<function, i32, read_write> = var, %5
@@ -19,14 +19,14 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %9:void = call %atomicExchange_f2e22f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b4 {
-  %b4 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B4: {
     %11:void = call %atomicExchange_f2e22f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/atomicLoad/0806ad.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicLoad/0806ad.wgsl.expected.ir.msl
index 93c0012..b990acb 100644
--- a/test/tint/builtins/gen/literal/atomicLoad/0806ad.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicLoad/0806ad.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: SB_RW = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW = struct @align(4) {
   arg_0:atomic<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW, read_write> = var @binding_point(0, 0)
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicLoad_0806ad = func():void -> %b2 {
-  %b2 = block {
+%atomicLoad_0806ad = func():void {
+  $B2: {
     %4:ptr<storage, atomic<i32>, read_write> = access %sb_rw, 0u
     %5:i32 = atomicLoad %4
     %res:ptr<function, i32, read_write> = var, %5
@@ -19,14 +19,14 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %9:void = call %atomicLoad_0806ad
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b4 {
-  %b4 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B4: {
     %11:void = call %atomicLoad_0806ad
     ret
   }
diff --git a/test/tint/builtins/gen/literal/atomicLoad/361bf1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicLoad/361bf1.wgsl.expected.ir.msl
index d6db186..7ae76ad 100644
--- a/test/tint/builtins/gen/literal/atomicLoad/361bf1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicLoad/361bf1.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<workgroup, atomic<u32>, read_write> = var
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicLoad_361bf1 = func():void -> %b2 {
-  %b2 = block {
+%atomicLoad_361bf1 = func():void {
+  $B2: {
     %4:u32 = atomicLoad %arg_0
     %res:ptr<function, u32, read_write> = var, %4
     %6:u32 = load %res
@@ -14,9 +14,17 @@
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
-    %8:void = call %atomicLoad_361bf1
+%compute_main = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B3: {
+    %9:bool = eq %tint_local_index, 0u
+    if %9 [t: $B4] {  # if_1
+      $B4: {  # true
+        %10:void = atomicStore %arg_0, 0u
+        exit_if  # if_1
+      }
+    }
+    %11:void = msl.threadgroup_barrier 4u
+    %12:void = call %atomicLoad_361bf1
     ret
   }
 }
diff --git a/test/tint/builtins/gen/literal/atomicLoad/afcc03.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicLoad/afcc03.wgsl.expected.ir.msl
index 8a2bba0..ee77bef 100644
--- a/test/tint/builtins/gen/literal/atomicLoad/afcc03.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicLoad/afcc03.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<workgroup, atomic<i32>, read_write> = var
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicLoad_afcc03 = func():void -> %b2 {
-  %b2 = block {
+%atomicLoad_afcc03 = func():void {
+  $B2: {
     %4:i32 = atomicLoad %arg_0
     %res:ptr<function, i32, read_write> = var, %4
     %6:i32 = load %res
@@ -14,9 +14,17 @@
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
-    %8:void = call %atomicLoad_afcc03
+%compute_main = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B3: {
+    %9:bool = eq %tint_local_index, 0u
+    if %9 [t: $B4] {  # if_1
+      $B4: {  # true
+        %10:void = atomicStore %arg_0, 0i
+        exit_if  # if_1
+      }
+    }
+    %11:void = msl.threadgroup_barrier 4u
+    %12:void = call %atomicLoad_afcc03
     ret
   }
 }
diff --git a/test/tint/builtins/gen/literal/atomicLoad/fe6cc3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicLoad/fe6cc3.wgsl.expected.ir.msl
index 0a568fb..0637775 100644
--- a/test/tint/builtins/gen/literal/atomicLoad/fe6cc3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicLoad/fe6cc3.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: SB_RW = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW = struct @align(4) {
   arg_0:atomic<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW, read_write> = var @binding_point(0, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicLoad_fe6cc3 = func():void -> %b2 {
-  %b2 = block {
+%atomicLoad_fe6cc3 = func():void {
+  $B2: {
     %4:ptr<storage, atomic<u32>, read_write> = access %sb_rw, 0u
     %5:u32 = atomicLoad %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -19,14 +19,14 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %9:void = call %atomicLoad_fe6cc3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b4 {
-  %b4 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B4: {
     %11:void = call %atomicLoad_fe6cc3
     ret
   }
diff --git a/test/tint/builtins/gen/literal/atomicMax/51b9be.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicMax/51b9be.wgsl.expected.ir.msl
index dd192a4..3d571d0 100644
--- a/test/tint/builtins/gen/literal/atomicMax/51b9be.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicMax/51b9be.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: SB_RW = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW = struct @align(4) {
   arg_0:atomic<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW, read_write> = var @binding_point(0, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicMax_51b9be = func():void -> %b2 {
-  %b2 = block {
+%atomicMax_51b9be = func():void {
+  $B2: {
     %4:ptr<storage, atomic<u32>, read_write> = access %sb_rw, 0u
     %5:u32 = atomicMax %4, 1u
     %res:ptr<function, u32, read_write> = var, %5
@@ -19,14 +19,14 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %9:void = call %atomicMax_51b9be
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b4 {
-  %b4 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B4: {
     %11:void = call %atomicMax_51b9be
     ret
   }
diff --git a/test/tint/builtins/gen/literal/atomicMax/92aa72.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicMax/92aa72.wgsl.expected.ir.msl
index 790c4ee..43f6adf 100644
--- a/test/tint/builtins/gen/literal/atomicMax/92aa72.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicMax/92aa72.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: SB_RW = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW = struct @align(4) {
   arg_0:atomic<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW, read_write> = var @binding_point(0, 0)
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicMax_92aa72 = func():void -> %b2 {
-  %b2 = block {
+%atomicMax_92aa72 = func():void {
+  $B2: {
     %4:ptr<storage, atomic<i32>, read_write> = access %sb_rw, 0u
     %5:i32 = atomicMax %4, 1i
     %res:ptr<function, i32, read_write> = var, %5
@@ -19,14 +19,14 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %9:void = call %atomicMax_92aa72
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b4 {
-  %b4 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B4: {
     %11:void = call %atomicMax_92aa72
     ret
   }
diff --git a/test/tint/builtins/gen/literal/atomicMax/a89cc3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicMax/a89cc3.wgsl.expected.ir.msl
index 2d47c84..6636ef8 100644
--- a/test/tint/builtins/gen/literal/atomicMax/a89cc3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicMax/a89cc3.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<workgroup, atomic<i32>, read_write> = var
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicMax_a89cc3 = func():void -> %b2 {
-  %b2 = block {
+%atomicMax_a89cc3 = func():void {
+  $B2: {
     %4:i32 = atomicMax %arg_0, 1i
     %res:ptr<function, i32, read_write> = var, %4
     %6:i32 = load %res
@@ -14,9 +14,17 @@
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
-    %8:void = call %atomicMax_a89cc3
+%compute_main = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B3: {
+    %9:bool = eq %tint_local_index, 0u
+    if %9 [t: $B4] {  # if_1
+      $B4: {  # true
+        %10:void = atomicStore %arg_0, 0i
+        exit_if  # if_1
+      }
+    }
+    %11:void = msl.threadgroup_barrier 4u
+    %12:void = call %atomicMax_a89cc3
     ret
   }
 }
diff --git a/test/tint/builtins/gen/literal/atomicMax/beccfc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicMax/beccfc.wgsl.expected.ir.msl
index b882f85..6851230 100644
--- a/test/tint/builtins/gen/literal/atomicMax/beccfc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicMax/beccfc.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<workgroup, atomic<u32>, read_write> = var
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicMax_beccfc = func():void -> %b2 {
-  %b2 = block {
+%atomicMax_beccfc = func():void {
+  $B2: {
     %4:u32 = atomicMax %arg_0, 1u
     %res:ptr<function, u32, read_write> = var, %4
     %6:u32 = load %res
@@ -14,9 +14,17 @@
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
-    %8:void = call %atomicMax_beccfc
+%compute_main = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B3: {
+    %9:bool = eq %tint_local_index, 0u
+    if %9 [t: $B4] {  # if_1
+      $B4: {  # true
+        %10:void = atomicStore %arg_0, 0u
+        exit_if  # if_1
+      }
+    }
+    %11:void = msl.threadgroup_barrier 4u
+    %12:void = call %atomicMax_beccfc
     ret
   }
 }
diff --git a/test/tint/builtins/gen/literal/atomicMin/278235.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicMin/278235.wgsl.expected.ir.msl
index 284c78c..6cc3781 100644
--- a/test/tint/builtins/gen/literal/atomicMin/278235.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicMin/278235.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<workgroup, atomic<i32>, read_write> = var
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicMin_278235 = func():void -> %b2 {
-  %b2 = block {
+%atomicMin_278235 = func():void {
+  $B2: {
     %4:i32 = atomicMin %arg_0, 1i
     %res:ptr<function, i32, read_write> = var, %4
     %6:i32 = load %res
@@ -14,9 +14,17 @@
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
-    %8:void = call %atomicMin_278235
+%compute_main = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B3: {
+    %9:bool = eq %tint_local_index, 0u
+    if %9 [t: $B4] {  # if_1
+      $B4: {  # true
+        %10:void = atomicStore %arg_0, 0i
+        exit_if  # if_1
+      }
+    }
+    %11:void = msl.threadgroup_barrier 4u
+    %12:void = call %atomicMin_278235
     ret
   }
 }
diff --git a/test/tint/builtins/gen/literal/atomicMin/69d383.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicMin/69d383.wgsl.expected.ir.msl
index 8ceaf26..f1be440 100644
--- a/test/tint/builtins/gen/literal/atomicMin/69d383.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicMin/69d383.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<workgroup, atomic<u32>, read_write> = var
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicMin_69d383 = func():void -> %b2 {
-  %b2 = block {
+%atomicMin_69d383 = func():void {
+  $B2: {
     %4:u32 = atomicMin %arg_0, 1u
     %res:ptr<function, u32, read_write> = var, %4
     %6:u32 = load %res
@@ -14,9 +14,17 @@
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
-    %8:void = call %atomicMin_69d383
+%compute_main = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B3: {
+    %9:bool = eq %tint_local_index, 0u
+    if %9 [t: $B4] {  # if_1
+      $B4: {  # true
+        %10:void = atomicStore %arg_0, 0u
+        exit_if  # if_1
+      }
+    }
+    %11:void = msl.threadgroup_barrier 4u
+    %12:void = call %atomicMin_69d383
     ret
   }
 }
diff --git a/test/tint/builtins/gen/literal/atomicMin/8e38dc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicMin/8e38dc.wgsl.expected.ir.msl
index 26257d6..29a3c35 100644
--- a/test/tint/builtins/gen/literal/atomicMin/8e38dc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicMin/8e38dc.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: SB_RW = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW = struct @align(4) {
   arg_0:atomic<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW, read_write> = var @binding_point(0, 0)
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicMin_8e38dc = func():void -> %b2 {
-  %b2 = block {
+%atomicMin_8e38dc = func():void {
+  $B2: {
     %4:ptr<storage, atomic<i32>, read_write> = access %sb_rw, 0u
     %5:i32 = atomicMin %4, 1i
     %res:ptr<function, i32, read_write> = var, %5
@@ -19,14 +19,14 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %9:void = call %atomicMin_8e38dc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b4 {
-  %b4 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B4: {
     %11:void = call %atomicMin_8e38dc
     ret
   }
diff --git a/test/tint/builtins/gen/literal/atomicMin/c67a74.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicMin/c67a74.wgsl.expected.ir.msl
index 6e1c3b9..2b50bb7 100644
--- a/test/tint/builtins/gen/literal/atomicMin/c67a74.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicMin/c67a74.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: SB_RW = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW = struct @align(4) {
   arg_0:atomic<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW, read_write> = var @binding_point(0, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicMin_c67a74 = func():void -> %b2 {
-  %b2 = block {
+%atomicMin_c67a74 = func():void {
+  $B2: {
     %4:ptr<storage, atomic<u32>, read_write> = access %sb_rw, 0u
     %5:u32 = atomicMin %4, 1u
     %res:ptr<function, u32, read_write> = var, %5
@@ -19,14 +19,14 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %9:void = call %atomicMin_c67a74
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b4 {
-  %b4 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B4: {
     %11:void = call %atomicMin_c67a74
     ret
   }
diff --git a/test/tint/builtins/gen/literal/atomicOr/5e3d61.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicOr/5e3d61.wgsl.expected.ir.msl
index e23a709..41c65f2 100644
--- a/test/tint/builtins/gen/literal/atomicOr/5e3d61.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicOr/5e3d61.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<workgroup, atomic<u32>, read_write> = var
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicOr_5e3d61 = func():void -> %b2 {
-  %b2 = block {
+%atomicOr_5e3d61 = func():void {
+  $B2: {
     %4:u32 = atomicOr %arg_0, 1u
     %res:ptr<function, u32, read_write> = var, %4
     %6:u32 = load %res
@@ -14,9 +14,17 @@
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
-    %8:void = call %atomicOr_5e3d61
+%compute_main = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B3: {
+    %9:bool = eq %tint_local_index, 0u
+    if %9 [t: $B4] {  # if_1
+      $B4: {  # true
+        %10:void = atomicStore %arg_0, 0u
+        exit_if  # if_1
+      }
+    }
+    %11:void = msl.threadgroup_barrier 4u
+    %12:void = call %atomicOr_5e3d61
     ret
   }
 }
diff --git a/test/tint/builtins/gen/literal/atomicOr/5e95d4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicOr/5e95d4.wgsl.expected.ir.msl
index 7d42f92..59f2526 100644
--- a/test/tint/builtins/gen/literal/atomicOr/5e95d4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicOr/5e95d4.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: SB_RW = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW = struct @align(4) {
   arg_0:atomic<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW, read_write> = var @binding_point(0, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicOr_5e95d4 = func():void -> %b2 {
-  %b2 = block {
+%atomicOr_5e95d4 = func():void {
+  $B2: {
     %4:ptr<storage, atomic<u32>, read_write> = access %sb_rw, 0u
     %5:u32 = atomicOr %4, 1u
     %res:ptr<function, u32, read_write> = var, %5
@@ -19,14 +19,14 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %9:void = call %atomicOr_5e95d4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b4 {
-  %b4 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B4: {
     %11:void = call %atomicOr_5e95d4
     ret
   }
diff --git a/test/tint/builtins/gen/literal/atomicOr/8d96a0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicOr/8d96a0.wgsl.expected.ir.msl
index acc55aa..50c5b04 100644
--- a/test/tint/builtins/gen/literal/atomicOr/8d96a0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicOr/8d96a0.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: SB_RW = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW = struct @align(4) {
   arg_0:atomic<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW, read_write> = var @binding_point(0, 0)
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicOr_8d96a0 = func():void -> %b2 {
-  %b2 = block {
+%atomicOr_8d96a0 = func():void {
+  $B2: {
     %4:ptr<storage, atomic<i32>, read_write> = access %sb_rw, 0u
     %5:i32 = atomicOr %4, 1i
     %res:ptr<function, i32, read_write> = var, %5
@@ -19,14 +19,14 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %9:void = call %atomicOr_8d96a0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b4 {
-  %b4 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B4: {
     %11:void = call %atomicOr_8d96a0
     ret
   }
diff --git a/test/tint/builtins/gen/literal/atomicOr/d09248.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicOr/d09248.wgsl.expected.ir.msl
index 88215ad..11e5fe6 100644
--- a/test/tint/builtins/gen/literal/atomicOr/d09248.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicOr/d09248.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<workgroup, atomic<i32>, read_write> = var
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicOr_d09248 = func():void -> %b2 {
-  %b2 = block {
+%atomicOr_d09248 = func():void {
+  $B2: {
     %4:i32 = atomicOr %arg_0, 1i
     %res:ptr<function, i32, read_write> = var, %4
     %6:i32 = load %res
@@ -14,9 +14,17 @@
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
-    %8:void = call %atomicOr_d09248
+%compute_main = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B3: {
+    %9:bool = eq %tint_local_index, 0u
+    if %9 [t: $B4] {  # if_1
+      $B4: {  # true
+        %10:void = atomicStore %arg_0, 0i
+        exit_if  # if_1
+      }
+    }
+    %11:void = msl.threadgroup_barrier 4u
+    %12:void = call %atomicOr_d09248
     ret
   }
 }
diff --git a/test/tint/builtins/gen/literal/atomicStore/726882.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicStore/726882.wgsl.expected.ir.msl
index 40823e3..92c0fdd 100644
--- a/test/tint/builtins/gen/literal/atomicStore/726882.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicStore/726882.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: atomicStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/atomicStore/8bea94.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicStore/8bea94.wgsl.expected.ir.msl
index 40823e3..92c0fdd 100644
--- a/test/tint/builtins/gen/literal/atomicStore/8bea94.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicStore/8bea94.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: atomicStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/atomicStore/cdc29e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicStore/cdc29e.wgsl.expected.ir.msl
index a18ad65..4d4d962 100644
--- a/test/tint/builtins/gen/literal/atomicStore/cdc29e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicStore/cdc29e.wgsl.expected.ir.msl
@@ -1,28 +1,28 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: SB_RW = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW = struct @align(4) {
   arg_0:atomic<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW, read_write> = var @binding_point(0, 0)
 }
 
-%atomicStore_cdc29e = func():void -> %b2 {
-  %b2 = block {
+%atomicStore_cdc29e = func():void {
+  $B2: {
     %3:ptr<storage, atomic<u32>, read_write> = access %sb_rw, 0u
     %4:void = atomicStore %3, 1u
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %6:void = call %atomicStore_cdc29e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b4 {
-  %b4 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B4: {
     %8:void = call %atomicStore_cdc29e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/atomicStore/d1e9a6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicStore/d1e9a6.wgsl.expected.ir.msl
index 9a934bb..1e78e33 100644
--- a/test/tint/builtins/gen/literal/atomicStore/d1e9a6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicStore/d1e9a6.wgsl.expected.ir.msl
@@ -1,28 +1,28 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: SB_RW = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW = struct @align(4) {
   arg_0:atomic<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW, read_write> = var @binding_point(0, 0)
 }
 
-%atomicStore_d1e9a6 = func():void -> %b2 {
-  %b2 = block {
+%atomicStore_d1e9a6 = func():void {
+  $B2: {
     %3:ptr<storage, atomic<i32>, read_write> = access %sb_rw, 0u
     %4:void = atomicStore %3, 1i
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %6:void = call %atomicStore_d1e9a6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b4 {
-  %b4 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B4: {
     %8:void = call %atomicStore_d1e9a6
     ret
   }
diff --git a/test/tint/builtins/gen/literal/atomicSub/051100.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicSub/051100.wgsl.expected.ir.msl
index 41ef6d1..589d05f 100644
--- a/test/tint/builtins/gen/literal/atomicSub/051100.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicSub/051100.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: SB_RW = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW = struct @align(4) {
   arg_0:atomic<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW, read_write> = var @binding_point(0, 0)
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicSub_051100 = func():void -> %b2 {
-  %b2 = block {
+%atomicSub_051100 = func():void {
+  $B2: {
     %4:ptr<storage, atomic<i32>, read_write> = access %sb_rw, 0u
     %5:i32 = atomicSub %4, 1i
     %res:ptr<function, i32, read_write> = var, %5
@@ -19,14 +19,14 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %9:void = call %atomicSub_051100
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b4 {
-  %b4 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B4: {
     %11:void = call %atomicSub_051100
     ret
   }
diff --git a/test/tint/builtins/gen/literal/atomicSub/0d26c2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicSub/0d26c2.wgsl.expected.ir.msl
index 80cc778..92edf6f 100644
--- a/test/tint/builtins/gen/literal/atomicSub/0d26c2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicSub/0d26c2.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<workgroup, atomic<u32>, read_write> = var
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicSub_0d26c2 = func():void -> %b2 {
-  %b2 = block {
+%atomicSub_0d26c2 = func():void {
+  $B2: {
     %4:u32 = atomicSub %arg_0, 1u
     %res:ptr<function, u32, read_write> = var, %4
     %6:u32 = load %res
@@ -14,9 +14,17 @@
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
-    %8:void = call %atomicSub_0d26c2
+%compute_main = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B3: {
+    %9:bool = eq %tint_local_index, 0u
+    if %9 [t: $B4] {  # if_1
+      $B4: {  # true
+        %10:void = atomicStore %arg_0, 0u
+        exit_if  # if_1
+      }
+    }
+    %11:void = msl.threadgroup_barrier 4u
+    %12:void = call %atomicSub_0d26c2
     ret
   }
 }
diff --git a/test/tint/builtins/gen/literal/atomicSub/15bfc9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicSub/15bfc9.wgsl.expected.ir.msl
index 56e12c6..3f68716 100644
--- a/test/tint/builtins/gen/literal/atomicSub/15bfc9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicSub/15bfc9.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: SB_RW = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW = struct @align(4) {
   arg_0:atomic<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW, read_write> = var @binding_point(0, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicSub_15bfc9 = func():void -> %b2 {
-  %b2 = block {
+%atomicSub_15bfc9 = func():void {
+  $B2: {
     %4:ptr<storage, atomic<u32>, read_write> = access %sb_rw, 0u
     %5:u32 = atomicSub %4, 1u
     %res:ptr<function, u32, read_write> = var, %5
@@ -19,14 +19,14 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %9:void = call %atomicSub_15bfc9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b4 {
-  %b4 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B4: {
     %11:void = call %atomicSub_15bfc9
     ret
   }
diff --git a/test/tint/builtins/gen/literal/atomicSub/77883a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicSub/77883a.wgsl.expected.ir.msl
index 5596ef6..5501c49 100644
--- a/test/tint/builtins/gen/literal/atomicSub/77883a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicSub/77883a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<workgroup, atomic<i32>, read_write> = var
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicSub_77883a = func():void -> %b2 {
-  %b2 = block {
+%atomicSub_77883a = func():void {
+  $B2: {
     %4:i32 = atomicSub %arg_0, 1i
     %res:ptr<function, i32, read_write> = var, %4
     %6:i32 = load %res
@@ -14,9 +14,17 @@
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
-    %8:void = call %atomicSub_77883a
+%compute_main = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B3: {
+    %9:bool = eq %tint_local_index, 0u
+    if %9 [t: $B4] {  # if_1
+      $B4: {  # true
+        %10:void = atomicStore %arg_0, 0i
+        exit_if  # if_1
+      }
+    }
+    %11:void = msl.threadgroup_barrier 4u
+    %12:void = call %atomicSub_77883a
     ret
   }
 }
diff --git a/test/tint/builtins/gen/literal/atomicXor/54510e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicXor/54510e.wgsl.expected.ir.msl
index 0bcd54d..dade502 100644
--- a/test/tint/builtins/gen/literal/atomicXor/54510e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicXor/54510e.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: SB_RW = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW = struct @align(4) {
   arg_0:atomic<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW, read_write> = var @binding_point(0, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicXor_54510e = func():void -> %b2 {
-  %b2 = block {
+%atomicXor_54510e = func():void {
+  $B2: {
     %4:ptr<storage, atomic<u32>, read_write> = access %sb_rw, 0u
     %5:u32 = atomicXor %4, 1u
     %res:ptr<function, u32, read_write> = var, %5
@@ -19,14 +19,14 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %9:void = call %atomicXor_54510e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b4 {
-  %b4 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B4: {
     %11:void = call %atomicXor_54510e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/atomicXor/75dc95.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicXor/75dc95.wgsl.expected.ir.msl
index a19329f..5201c68 100644
--- a/test/tint/builtins/gen/literal/atomicXor/75dc95.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicXor/75dc95.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<workgroup, atomic<i32>, read_write> = var
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicXor_75dc95 = func():void -> %b2 {
-  %b2 = block {
+%atomicXor_75dc95 = func():void {
+  $B2: {
     %4:i32 = atomicXor %arg_0, 1i
     %res:ptr<function, i32, read_write> = var, %4
     %6:i32 = load %res
@@ -14,9 +14,17 @@
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
-    %8:void = call %atomicXor_75dc95
+%compute_main = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B3: {
+    %9:bool = eq %tint_local_index, 0u
+    if %9 [t: $B4] {  # if_1
+      $B4: {  # true
+        %10:void = atomicStore %arg_0, 0i
+        exit_if  # if_1
+      }
+    }
+    %11:void = msl.threadgroup_barrier 4u
+    %12:void = call %atomicXor_75dc95
     ret
   }
 }
diff --git a/test/tint/builtins/gen/literal/atomicXor/c1b78c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicXor/c1b78c.wgsl.expected.ir.msl
index b5cc82c..0d5add2 100644
--- a/test/tint/builtins/gen/literal/atomicXor/c1b78c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicXor/c1b78c.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: SB_RW = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW = struct @align(4) {
   arg_0:atomic<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW, read_write> = var @binding_point(0, 0)
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicXor_c1b78c = func():void -> %b2 {
-  %b2 = block {
+%atomicXor_c1b78c = func():void {
+  $B2: {
     %4:ptr<storage, atomic<i32>, read_write> = access %sb_rw, 0u
     %5:i32 = atomicXor %4, 1i
     %res:ptr<function, i32, read_write> = var, %5
@@ -19,14 +19,14 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %9:void = call %atomicXor_c1b78c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b4 {
-  %b4 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B4: {
     %11:void = call %atomicXor_c1b78c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/atomicXor/c8e6be.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicXor/c8e6be.wgsl.expected.ir.msl
index 598e38b..6622537 100644
--- a/test/tint/builtins/gen/literal/atomicXor/c8e6be.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicXor/c8e6be.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<workgroup, atomic<u32>, read_write> = var
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicXor_c8e6be = func():void -> %b2 {
-  %b2 = block {
+%atomicXor_c8e6be = func():void {
+  $B2: {
     %4:u32 = atomicXor %arg_0, 1u
     %res:ptr<function, u32, read_write> = var, %4
     %6:u32 = load %res
@@ -14,9 +14,17 @@
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
-    %8:void = call %atomicXor_c8e6be
+%compute_main = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B3: {
+    %9:bool = eq %tint_local_index, 0u
+    if %9 [t: $B4] {  # if_1
+      $B4: {  # true
+        %10:void = atomicStore %arg_0, 0u
+        exit_if  # if_1
+      }
+    }
+    %11:void = msl.threadgroup_barrier 4u
+    %12:void = call %atomicXor_c8e6be
     ret
   }
 }
diff --git a/test/tint/builtins/gen/literal/bitcast/0fe0c9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/0fe0c9.wgsl.expected.ir.msl
new file mode 100644
index 0000000..97f9d1e
--- /dev/null
+++ b/test/tint/builtins/gen/literal/bitcast/0fe0c9.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_0fe0c9 = func():void {
+  $B2: {
+    %res:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.40129846e-45f)
+    %4:vec3<f32> = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %bitcast_0fe0c9
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %bitcast_0fe0c9
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %bitcast_0fe0c9
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/bitcast/160c09.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/160c09.wgsl.expected.ir.msl
new file mode 100644
index 0000000..3bc3ef4
--- /dev/null
+++ b/test/tint/builtins/gen/literal/bitcast/160c09.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_160c09 = func():void {
+  $B2: {
+    %res:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
+    %4:vec4<u32> = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %bitcast_160c09
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %bitcast_160c09
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %bitcast_160c09
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/bitcast/16cba4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/16cba4.wgsl.expected.ir.msl
new file mode 100644
index 0000000..3262b1a
--- /dev/null
+++ b/test/tint/builtins/gen/literal/bitcast/16cba4.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_16cba4 = func():void {
+  $B2: {
+    %res:ptr<function, i32, read_write> = var, 1065353216i
+    %4:i32 = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %bitcast_16cba4
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %bitcast_16cba4
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %bitcast_16cba4
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/bitcast/1c3b31.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/1c3b31.wgsl.expected.ir.msl
new file mode 100644
index 0000000..9e49682
--- /dev/null
+++ b/test/tint/builtins/gen/literal/bitcast/1c3b31.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_1c3b31 = func():void {
+  $B2: {
+    %res:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
+    %4:vec2<u32> = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %bitcast_1c3b31
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %bitcast_1c3b31
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %bitcast_1c3b31
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/bitcast/1df11f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/1df11f.wgsl.expected.ir.msl
new file mode 100644
index 0000000..9af0b6e
--- /dev/null
+++ b/test/tint/builtins/gen/literal/bitcast/1df11f.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_1df11f = func():void {
+  $B2: {
+    %res:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
+    %4:vec2<f16> = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %bitcast_1df11f
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %bitcast_1df11f
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %bitcast_1df11f
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/bitcast/214f23.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/214f23.wgsl.expected.ir.msl
new file mode 100644
index 0000000..389856c
--- /dev/null
+++ b/test/tint/builtins/gen/literal/bitcast/214f23.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec2<i32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_214f23 = func():void {
+  $B2: {
+    %res:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1006648320i)
+    %4:vec2<i32> = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %bitcast_214f23
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %bitcast_214f23
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %bitcast_214f23
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/bitcast/23c8bd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/23c8bd.wgsl.expected.ir.msl
new file mode 100644
index 0000000..54715d0
--- /dev/null
+++ b/test/tint/builtins/gen/literal/bitcast/23c8bd.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_23c8bd = func():void {
+  $B2: {
+    %res:ptr<function, f32, read_write> = var, 0.00782680511474609375f
+    %4:f32 = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %bitcast_23c8bd
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %bitcast_23c8bd
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %bitcast_23c8bd
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/bitcast/2421c8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/2421c8.wgsl.expected.ir.msl
new file mode 100644
index 0000000..ce95bcd
--- /dev/null
+++ b/test/tint/builtins/gen/literal/bitcast/2421c8.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_2421c8 = func():void {
+  $B2: {
+    %res:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.40129846e-45f)
+    %4:vec2<f32> = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %bitcast_2421c8
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %bitcast_2421c8
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %bitcast_2421c8
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/bitcast/287bdf.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/287bdf.wgsl.expected.ir.msl
new file mode 100644
index 0000000..8b49cfd
--- /dev/null
+++ b/test/tint/builtins/gen/literal/bitcast/287bdf.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_287bdf = func():void {
+  $B2: {
+    %res:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
+    %4:vec3<u32> = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %bitcast_287bdf
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %bitcast_287bdf
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %bitcast_287bdf
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/bitcast/2a6e58.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/2a6e58.wgsl.expected.ir.msl
new file mode 100644
index 0000000..6984a0f
--- /dev/null
+++ b/test/tint/builtins/gen/literal/bitcast/2a6e58.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_2a6e58 = func():void {
+  $B2: {
+    %res:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(0.00782680511474609375f)
+    %4:vec2<f32> = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %bitcast_2a6e58
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %bitcast_2a6e58
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %bitcast_2a6e58
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/bitcast/2b05b3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/2b05b3.wgsl.expected.ir.msl
new file mode 100644
index 0000000..b298814
--- /dev/null
+++ b/test/tint/builtins/gen/literal/bitcast/2b05b3.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_2b05b3 = func():void {
+  $B2: {
+    %res:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
+    %4:vec3<f32> = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %bitcast_2b05b3
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %bitcast_2b05b3
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %bitcast_2b05b3
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/bitcast/2b2738.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/2b2738.wgsl.expected.ir.msl
new file mode 100644
index 0000000..ac13230
--- /dev/null
+++ b/test/tint/builtins/gen/literal/bitcast/2b2738.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_2b2738 = func():void {
+  $B2: {
+    %res:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1065353216u)
+    %4:vec2<u32> = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %bitcast_2b2738
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %bitcast_2b2738
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %bitcast_2b2738
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/bitcast/31c080.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/31c080.wgsl.expected.ir.msl
new file mode 100644
index 0000000..d0d470e
--- /dev/null
+++ b/test/tint/builtins/gen/literal/bitcast/31c080.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_31c080 = func():void {
+  $B2: {
+    %res:ptr<function, u32, read_write> = var, 1u
+    %4:u32 = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %bitcast_31c080
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %bitcast_31c080
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %bitcast_31c080
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/bitcast/332f78.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/332f78.wgsl.expected.ir.msl
new file mode 100644
index 0000000..ac5c471
--- /dev/null
+++ b/test/tint/builtins/gen/literal/bitcast/332f78.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_332f78 = func():void {
+  $B2: {
+    %res:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.40129846e-45f)
+    %4:vec3<f32> = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %bitcast_332f78
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %bitcast_332f78
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %bitcast_332f78
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/bitcast/3e7b47.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/3e7b47.wgsl.expected.ir.msl
new file mode 100644
index 0000000..6c58816
--- /dev/null
+++ b/test/tint/builtins/gen/literal/bitcast/3e7b47.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_3e7b47 = func():void {
+  $B2: {
+    %res:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
+    %4:vec4<f16> = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %bitcast_3e7b47
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %bitcast_3e7b47
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %bitcast_3e7b47
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/bitcast/3f7437.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/3f7437.wgsl.expected.ir.msl
new file mode 100644
index 0000000..2821d47
--- /dev/null
+++ b/test/tint/builtins/gen/literal/bitcast/3f7437.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_3f7437 = func():void {
+  $B2: {
+    %res:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
+    %4:vec4<i32> = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %bitcast_3f7437
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %bitcast_3f7437
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %bitcast_3f7437
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/bitcast/3fdacd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/3fdacd.wgsl.expected.ir.msl
new file mode 100644
index 0000000..3394e6e
--- /dev/null
+++ b/test/tint/builtins/gen/literal/bitcast/3fdacd.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_3fdacd = func():void {
+  $B2: {
+    %res:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.40129846e-45f)
+    %4:vec4<f32> = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %bitcast_3fdacd
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %bitcast_3fdacd
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %bitcast_3fdacd
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/bitcast/429d64.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/429d64.wgsl.expected.ir.msl
new file mode 100644
index 0000000..83e50d5
--- /dev/null
+++ b/test/tint/builtins/gen/literal/bitcast/429d64.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_429d64 = func():void {
+  $B2: {
+    %res:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(0.0h, 1.875h, 0.0h, 1.875h)
+    %4:vec4<f16> = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %bitcast_429d64
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %bitcast_429d64
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %bitcast_429d64
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/bitcast/436211.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/436211.wgsl.expected.ir.msl
new file mode 100644
index 0000000..324115c
--- /dev/null
+++ b/test/tint/builtins/gen/literal/bitcast/436211.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_436211 = func():void {
+  $B2: {
+    %res:ptr<function, f16, read_write> = var, 1.0h
+    %4:f16 = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %bitcast_436211
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %bitcast_436211
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %bitcast_436211
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/bitcast/5081ed.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/5081ed.wgsl.expected.ir.msl
new file mode 100644
index 0000000..484a59e
--- /dev/null
+++ b/test/tint/builtins/gen/literal/bitcast/5081ed.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_5081ed = func():void {
+  $B2: {
+    %res:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
+    %4:vec3<f16> = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %bitcast_5081ed
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %bitcast_5081ed
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %bitcast_5081ed
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/bitcast/56266e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/56266e.wgsl.expected.ir.msl
new file mode 100644
index 0000000..2c01bd2
--- /dev/null
+++ b/test/tint/builtins/gen/literal/bitcast/56266e.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_56266e = func():void {
+  $B2: {
+    %res:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1065353216u)
+    %4:vec3<u32> = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %bitcast_56266e
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %bitcast_56266e
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %bitcast_56266e
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/bitcast/66e93d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/66e93d.wgsl.expected.ir.msl
new file mode 100644
index 0000000..a9bfd27
--- /dev/null
+++ b/test/tint/builtins/gen/literal/bitcast/66e93d.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_66e93d = func():void {
+  $B2: {
+    %res:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(0.00000005960464477539h, 0.0h)
+    %4:vec2<f16> = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %bitcast_66e93d
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %bitcast_66e93d
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %bitcast_66e93d
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/bitcast/674557.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/674557.wgsl.expected.ir.msl
new file mode 100644
index 0000000..757a1ed
--- /dev/null
+++ b/test/tint/builtins/gen/literal/bitcast/674557.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_674557 = func():void {
+  $B2: {
+    %res:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(0.00000005960464477539h, 0.0h)
+    %4:vec2<f16> = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %bitcast_674557
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %bitcast_674557
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %bitcast_674557
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/bitcast/6ac6f9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/6ac6f9.wgsl.expected.ir.msl
new file mode 100644
index 0000000..ab0d927
--- /dev/null
+++ b/test/tint/builtins/gen/literal/bitcast/6ac6f9.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_6ac6f9 = func():void {
+  $B2: {
+    %res:ptr<function, i32, read_write> = var, 1006648320i
+    %4:i32 = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %bitcast_6ac6f9
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %bitcast_6ac6f9
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %bitcast_6ac6f9
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/bitcast/6de2bd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/6de2bd.wgsl.expected.ir.msl
new file mode 100644
index 0000000..26ae3e4
--- /dev/null
+++ b/test/tint/builtins/gen/literal/bitcast/6de2bd.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_6de2bd = func():void {
+  $B2: {
+    %res:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1065353216i)
+    %4:vec4<i32> = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %bitcast_6de2bd
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %bitcast_6de2bd
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %bitcast_6de2bd
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/bitcast/70b121.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/70b121.wgsl.expected.ir.msl
new file mode 100644
index 0000000..5a11cf6
--- /dev/null
+++ b/test/tint/builtins/gen/literal/bitcast/70b121.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_70b121 = func():void {
+  $B2: {
+    %res:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
+    %4:vec2<u32> = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %bitcast_70b121
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %bitcast_70b121
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %bitcast_70b121
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/bitcast/71c92a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/71c92a.wgsl.expected.ir.msl
new file mode 100644
index 0000000..6ad99f2
--- /dev/null
+++ b/test/tint/builtins/gen/literal/bitcast/71c92a.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_71c92a = func():void {
+  $B2: {
+    %res:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(0.00000005960464477539h, 0.0h, 0.00000005960464477539h, 0.0h)
+    %4:vec4<f16> = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %bitcast_71c92a
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %bitcast_71c92a
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %bitcast_71c92a
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/bitcast/745b27.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/745b27.wgsl.expected.ir.msl
new file mode 100644
index 0000000..eb1dd9b
--- /dev/null
+++ b/test/tint/builtins/gen/literal/bitcast/745b27.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_745b27 = func():void {
+  $B2: {
+    %res:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
+    %4:vec4<f32> = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %bitcast_745b27
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %bitcast_745b27
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %bitcast_745b27
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/bitcast/7e67cc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/7e67cc.wgsl.expected.ir.msl
new file mode 100644
index 0000000..3a818b8
--- /dev/null
+++ b/test/tint/builtins/gen/literal/bitcast/7e67cc.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_7e67cc = func():void {
+  $B2: {
+    %res:ptr<function, i32, read_write> = var, 1i
+    %4:i32 = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %bitcast_7e67cc
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %bitcast_7e67cc
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %bitcast_7e67cc
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/bitcast/7ffa9c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/7ffa9c.wgsl.expected.ir.msl
new file mode 100644
index 0000000..785cace
--- /dev/null
+++ b/test/tint/builtins/gen/literal/bitcast/7ffa9c.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_7ffa9c = func():void {
+  $B2: {
+    %res:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
+    %4:vec4<u32> = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %bitcast_7ffa9c
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %bitcast_7ffa9c
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %bitcast_7ffa9c
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/bitcast/81c5f5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/81c5f5.wgsl.expected.ir.msl
new file mode 100644
index 0000000..274f9ba
--- /dev/null
+++ b/test/tint/builtins/gen/literal/bitcast/81c5f5.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_81c5f5 = func():void {
+  $B2: {
+    %res:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1006648320u)
+    %4:vec2<u32> = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %bitcast_81c5f5
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %bitcast_81c5f5
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %bitcast_81c5f5
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/bitcast/8318a8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/8318a8.wgsl.expected.ir.msl
new file mode 100644
index 0000000..9dcc50e
--- /dev/null
+++ b/test/tint/builtins/gen/literal/bitcast/8318a8.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_8318a8 = func():void {
+  $B2: {
+    %res:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
+    %4:vec3<u32> = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %bitcast_8318a8
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %bitcast_8318a8
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %bitcast_8318a8
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/bitcast/879dc9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/879dc9.wgsl.expected.ir.msl
new file mode 100644
index 0000000..21f6360
--- /dev/null
+++ b/test/tint/builtins/gen/literal/bitcast/879dc9.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_879dc9 = func():void {
+  $B2: {
+    %res:ptr<function, u32, read_write> = var, 1u
+    %4:u32 = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %bitcast_879dc9
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %bitcast_879dc9
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %bitcast_879dc9
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/bitcast/899e50.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/899e50.wgsl.expected.ir.msl
new file mode 100644
index 0000000..5b0f3a3
--- /dev/null
+++ b/test/tint/builtins/gen/literal/bitcast/899e50.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec2<i32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_899e50 = func():void {
+  $B2: {
+    %res:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1065353216i)
+    %4:vec2<i32> = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %bitcast_899e50
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %bitcast_899e50
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %bitcast_899e50
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/bitcast/8d184c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/8d184c.wgsl.expected.ir.msl
new file mode 100644
index 0000000..e7e9650
--- /dev/null
+++ b/test/tint/builtins/gen/literal/bitcast/8d184c.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_8d184c = func():void {
+  $B2: {
+    %res:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1065353216u)
+    %4:vec4<u32> = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %bitcast_8d184c
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %bitcast_8d184c
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %bitcast_8d184c
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/bitcast/9bcf71.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/9bcf71.wgsl.expected.ir.msl
new file mode 100644
index 0000000..7af01da
--- /dev/null
+++ b/test/tint/builtins/gen/literal/bitcast/9bcf71.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_9bcf71 = func():void {
+  $B2: {
+    %res:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
+    %4:vec2<f32> = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %bitcast_9bcf71
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %bitcast_9bcf71
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %bitcast_9bcf71
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/bitcast/9ca42c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/9ca42c.wgsl.expected.ir.msl
new file mode 100644
index 0000000..589e7e1
--- /dev/null
+++ b/test/tint/builtins/gen/literal/bitcast/9ca42c.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_9ca42c = func():void {
+  $B2: {
+    %res:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(0.0h, 1.875h)
+    %4:vec2<f16> = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %bitcast_9ca42c
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %bitcast_9ca42c
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %bitcast_9ca42c
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/bitcast/9eee21.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/9eee21.wgsl.expected.ir.msl
new file mode 100644
index 0000000..15831c1
--- /dev/null
+++ b/test/tint/builtins/gen/literal/bitcast/9eee21.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec3<i32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_9eee21 = func():void {
+  $B2: {
+    %res:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
+    %4:vec3<i32> = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %bitcast_9eee21
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %bitcast_9eee21
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %bitcast_9eee21
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/bitcast/a4b290.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/a4b290.wgsl.expected.ir.msl
new file mode 100644
index 0000000..21dd042
--- /dev/null
+++ b/test/tint/builtins/gen/literal/bitcast/a4b290.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_a4b290 = func():void {
+  $B2: {
+    %res:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.40129846e-45f)
+    %4:vec4<f32> = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %bitcast_a4b290
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %bitcast_a4b290
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %bitcast_a4b290
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/bitcast/a58b50.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/a58b50.wgsl.expected.ir.msl
new file mode 100644
index 0000000..7ca3d4e
--- /dev/null
+++ b/test/tint/builtins/gen/literal/bitcast/a58b50.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_a58b50 = func():void {
+  $B2: {
+    %res:ptr<function, u32, read_write> = var, 1006648320u
+    %4:u32 = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %bitcast_a58b50
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %bitcast_a58b50
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %bitcast_a58b50
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/bitcast/a5c539.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/a5c539.wgsl.expected.ir.msl
new file mode 100644
index 0000000..834f6ac
--- /dev/null
+++ b/test/tint/builtins/gen/literal/bitcast/a5c539.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_a5c539 = func():void {
+  $B2: {
+    %res:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
+    %4:vec4<i32> = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %bitcast_a5c539
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %bitcast_a5c539
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %bitcast_a5c539
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/bitcast/a8c93f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/a8c93f.wgsl.expected.ir.msl
new file mode 100644
index 0000000..5d1e123
--- /dev/null
+++ b/test/tint/builtins/gen/literal/bitcast/a8c93f.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_a8c93f = func():void {
+  $B2: {
+    %res:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
+    %4:vec4<u32> = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %bitcast_a8c93f
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %bitcast_a8c93f
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %bitcast_a8c93f
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/bitcast/a8ea1b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/a8ea1b.wgsl.expected.ir.msl
new file mode 100644
index 0000000..fb8ada2
--- /dev/null
+++ b/test/tint/builtins/gen/literal/bitcast/a8ea1b.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec3<i32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_a8ea1b = func():void {
+  $B2: {
+    %res:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
+    %4:vec3<i32> = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %bitcast_a8ea1b
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %bitcast_a8ea1b
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %bitcast_a8ea1b
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/bitcast/ac09d0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/ac09d0.wgsl.expected.ir.msl
new file mode 100644
index 0000000..54569d7
--- /dev/null
+++ b/test/tint/builtins/gen/literal/bitcast/ac09d0.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_ac09d0 = func():void {
+  $B2: {
+    %res:ptr<function, f32, read_write> = var, 1.0f
+    %4:f32 = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %bitcast_ac09d0
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %bitcast_ac09d0
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %bitcast_ac09d0
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/bitcast/ad4b05.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/ad4b05.wgsl.expected.ir.msl
new file mode 100644
index 0000000..cf00a70
--- /dev/null
+++ b/test/tint/builtins/gen/literal/bitcast/ad4b05.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_ad4b05 = func():void {
+  $B2: {
+    %res:ptr<function, f32, read_write> = var, 1.40129846e-45f
+    %4:f32 = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %bitcast_ad4b05
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %bitcast_ad4b05
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %bitcast_ad4b05
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/bitcast/b28cbd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/b28cbd.wgsl.expected.ir.msl
new file mode 100644
index 0000000..79ffc40
--- /dev/null
+++ b/test/tint/builtins/gen/literal/bitcast/b28cbd.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec3<i32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_b28cbd = func():void {
+  $B2: {
+    %res:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1065353216i)
+    %4:vec3<i32> = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %bitcast_b28cbd
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %bitcast_b28cbd
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %bitcast_b28cbd
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/bitcast/b77573.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/b77573.wgsl.expected.ir.msl
new file mode 100644
index 0000000..b7772d8
--- /dev/null
+++ b/test/tint/builtins/gen/literal/bitcast/b77573.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_b77573 = func():void {
+  $B2: {
+    %res:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.40129846e-45f)
+    %4:vec2<f32> = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %bitcast_b77573
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %bitcast_b77573
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %bitcast_b77573
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/bitcast/bc3994.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/bc3994.wgsl.expected.ir.msl
new file mode 100644
index 0000000..d9edf5d
--- /dev/null
+++ b/test/tint/builtins/gen/literal/bitcast/bc3994.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_bc3994 = func():void {
+  $B2: {
+    %res:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(0.00000005960464477539h, 0.0h, 0.00000005960464477539h, 0.0h)
+    %4:vec4<f16> = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %bitcast_bc3994
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %bitcast_bc3994
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %bitcast_bc3994
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/bitcast/c69aaf.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/c69aaf.wgsl.expected.ir.msl
new file mode 100644
index 0000000..cd60bfa
--- /dev/null
+++ b/test/tint/builtins/gen/literal/bitcast/c69aaf.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec2<i32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_c69aaf = func():void {
+  $B2: {
+    %res:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
+    %4:vec2<i32> = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %bitcast_c69aaf
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %bitcast_c69aaf
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %bitcast_c69aaf
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/bitcast/ca5c3f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/ca5c3f.wgsl.expected.ir.msl
new file mode 100644
index 0000000..b0389d8
--- /dev/null
+++ b/test/tint/builtins/gen/literal/bitcast/ca5c3f.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_ca5c3f = func():void {
+  $B2: {
+    %res:ptr<function, f32, read_write> = var, 1.40129846e-45f
+    %4:f32 = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %bitcast_ca5c3f
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %bitcast_ca5c3f
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %bitcast_ca5c3f
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/bitcast/cc7aa7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/cc7aa7.wgsl.expected.ir.msl
new file mode 100644
index 0000000..7f3917e
--- /dev/null
+++ b/test/tint/builtins/gen/literal/bitcast/cc7aa7.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec2<i32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_cc7aa7 = func():void {
+  $B2: {
+    %res:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
+    %4:vec2<i32> = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %bitcast_cc7aa7
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %bitcast_cc7aa7
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %bitcast_cc7aa7
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/bitcast/d29765.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/d29765.wgsl.expected.ir.msl
new file mode 100644
index 0000000..0cd2dba
--- /dev/null
+++ b/test/tint/builtins/gen/literal/bitcast/d29765.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_d29765 = func():void {
+  $B2: {
+    %res:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
+    %4:vec2<u32> = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %bitcast_d29765
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %bitcast_d29765
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %bitcast_d29765
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/bitcast/dce842.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/dce842.wgsl.expected.ir.msl
new file mode 100644
index 0000000..65e6789
--- /dev/null
+++ b/test/tint/builtins/gen/literal/bitcast/dce842.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_dce842 = func():void {
+  $B2: {
+    %res:ptr<function, u32, read_write> = var, 1u
+    %4:u32 = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %bitcast_dce842
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %bitcast_dce842
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %bitcast_dce842
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/bitcast/e61c57.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/e61c57.wgsl.expected.ir.msl
new file mode 100644
index 0000000..b6e2a13
--- /dev/null
+++ b/test/tint/builtins/gen/literal/bitcast/e61c57.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_e61c57 = func():void {
+  $B2: {
+    %res:ptr<function, i32, read_write> = var, 1i
+    %4:i32 = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %bitcast_e61c57
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %bitcast_e61c57
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %bitcast_e61c57
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/bitcast/e6c18f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/e6c18f.wgsl.expected.ir.msl
new file mode 100644
index 0000000..5ceb43e
--- /dev/null
+++ b/test/tint/builtins/gen/literal/bitcast/e6c18f.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_e6c18f = func():void {
+  $B2: {
+    %res:ptr<function, u32, read_write> = var, 1065353216u
+    %4:u32 = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %bitcast_e6c18f
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %bitcast_e6c18f
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %bitcast_e6c18f
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/bitcast/f756cd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/f756cd.wgsl.expected.ir.msl
new file mode 100644
index 0000000..be39e07
--- /dev/null
+++ b/test/tint/builtins/gen/literal/bitcast/f756cd.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_f756cd = func():void {
+  $B2: {
+    %res:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
+    %4:vec3<u32> = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %bitcast_f756cd
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %bitcast_f756cd
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %bitcast_f756cd
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/ceil/09bf52.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/ceil/09bf52.wgsl.expected.ir.msl
index 04ffae9..cb0af2e 100644
--- a/test/tint/builtins/gen/literal/ceil/09bf52.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/ceil/09bf52.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%ceil_09bf52 = func():void -> %b2 {
-  %b2 = block {
+%ceil_09bf52 = func():void {
+  $B2: {
     %res:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(2.0h)
     %4:vec3<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %ceil_09bf52
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %ceil_09bf52
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %ceil_09bf52
     ret
   }
diff --git a/test/tint/builtins/gen/literal/ceil/18c240.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/ceil/18c240.wgsl.expected.ir.msl
index d79faea..450cf52 100644
--- a/test/tint/builtins/gen/literal/ceil/18c240.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/ceil/18c240.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%ceil_18c240 = func():void -> %b2 {
-  %b2 = block {
+%ceil_18c240 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(2.0h)
     %4:vec2<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %ceil_18c240
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %ceil_18c240
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %ceil_18c240
     ret
   }
diff --git a/test/tint/builtins/gen/literal/ceil/34064b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/ceil/34064b.wgsl.expected.ir.msl
index 54391a9..fc7c7da 100644
--- a/test/tint/builtins/gen/literal/ceil/34064b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/ceil/34064b.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%ceil_34064b = func():void -> %b2 {
-  %b2 = block {
+%ceil_34064b = func():void {
+  $B2: {
     %res:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(2.0f)
     %4:vec3<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %ceil_34064b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %ceil_34064b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %ceil_34064b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/ceil/4bca2a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/ceil/4bca2a.wgsl.expected.ir.msl
index d6ba665..f7dfc07 100644
--- a/test/tint/builtins/gen/literal/ceil/4bca2a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/ceil/4bca2a.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%ceil_4bca2a = func():void -> %b2 {
-  %b2 = block {
+%ceil_4bca2a = func():void {
+  $B2: {
     %res:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(2.0h)
     %4:vec4<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %ceil_4bca2a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %ceil_4bca2a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %ceil_4bca2a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/ceil/678655.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/ceil/678655.wgsl.expected.ir.msl
index 7b1cd1f..df6dd2a 100644
--- a/test/tint/builtins/gen/literal/ceil/678655.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/ceil/678655.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%ceil_678655 = func():void -> %b2 {
-  %b2 = block {
+%ceil_678655 = func():void {
+  $B2: {
     %res:ptr<function, f32, read_write> = var, 2.0f
     %4:f32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %ceil_678655
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %ceil_678655
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %ceil_678655
     ret
   }
diff --git a/test/tint/builtins/gen/literal/ceil/96f597.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/ceil/96f597.wgsl.expected.ir.msl
index 3c5d606..3fa73e3 100644
--- a/test/tint/builtins/gen/literal/ceil/96f597.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/ceil/96f597.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%ceil_96f597 = func():void -> %b2 {
-  %b2 = block {
+%ceil_96f597 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(2.0f)
     %4:vec2<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %ceil_96f597
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %ceil_96f597
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %ceil_96f597
     ret
   }
diff --git a/test/tint/builtins/gen/literal/ceil/b74c16.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/ceil/b74c16.wgsl.expected.ir.msl
index 1c92bf9..a75e584 100644
--- a/test/tint/builtins/gen/literal/ceil/b74c16.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/ceil/b74c16.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%ceil_b74c16 = func():void -> %b2 {
-  %b2 = block {
+%ceil_b74c16 = func():void {
+  $B2: {
     %res:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(2.0f)
     %4:vec4<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %ceil_b74c16
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %ceil_b74c16
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %ceil_b74c16
     ret
   }
diff --git a/test/tint/builtins/gen/literal/ceil/f3f889.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/ceil/f3f889.wgsl.expected.ir.msl
index d1c23a6..58d8770 100644
--- a/test/tint/builtins/gen/literal/ceil/f3f889.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/ceil/f3f889.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%ceil_f3f889 = func():void -> %b2 {
-  %b2 = block {
+%ceil_f3f889 = func():void {
+  $B2: {
     %res:ptr<function, f16, read_write> = var, 2.0h
     %4:f16 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %ceil_f3f889
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %ceil_f3f889
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %ceil_f3f889
     ret
   }
diff --git a/test/tint/builtins/gen/literal/clamp/0acf8f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/clamp/0acf8f.wgsl.expected.ir.msl
index 9c83cd4..744722d 100644
--- a/test/tint/builtins/gen/literal/clamp/0acf8f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/clamp/0acf8f.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%clamp_0acf8f = func():void -> %b2 {
-  %b2 = block {
+%clamp_0acf8f = func():void {
+  $B2: {
     %res:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %4:vec2<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %clamp_0acf8f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %clamp_0acf8f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %clamp_0acf8f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/clamp/1a32e3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/clamp/1a32e3.wgsl.expected.ir.msl
index 4894886..8131b61 100644
--- a/test/tint/builtins/gen/literal/clamp/1a32e3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/clamp/1a32e3.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%clamp_1a32e3 = func():void -> %b2 {
-  %b2 = block {
+%clamp_1a32e3 = func():void {
+  $B2: {
     %res:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %4:vec4<i32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %clamp_1a32e3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %clamp_1a32e3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %clamp_1a32e3
     ret
   }
diff --git a/test/tint/builtins/gen/literal/clamp/235b29.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/clamp/235b29.wgsl.expected.ir.msl
index d2a412e..f8430e1 100644
--- a/test/tint/builtins/gen/literal/clamp/235b29.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/clamp/235b29.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%clamp_235b29 = func():void -> %b2 {
-  %b2 = block {
+%clamp_235b29 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %4:vec2<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %clamp_235b29
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %clamp_235b29
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %clamp_235b29
     ret
   }
diff --git a/test/tint/builtins/gen/literal/clamp/2bd567.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/clamp/2bd567.wgsl.expected.ir.msl
index 8820f63..278d8a5 100644
--- a/test/tint/builtins/gen/literal/clamp/2bd567.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/clamp/2bd567.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%clamp_2bd567 = func():void -> %b2 {
-  %b2 = block {
+%clamp_2bd567 = func():void {
+  $B2: {
     %res:ptr<function, f32, read_write> = var, 1.0f
     %4:f32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %clamp_2bd567
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %clamp_2bd567
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %clamp_2bd567
     ret
   }
diff --git a/test/tint/builtins/gen/literal/clamp/2bde41.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/clamp/2bde41.wgsl.expected.ir.msl
index b29d531..a3c2507 100644
--- a/test/tint/builtins/gen/literal/clamp/2bde41.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/clamp/2bde41.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%clamp_2bde41 = func():void -> %b2 {
-  %b2 = block {
+%clamp_2bde41 = func():void {
+  $B2: {
     %res:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %4:vec4<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %clamp_2bde41
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %clamp_2bde41
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %clamp_2bde41
     ret
   }
diff --git a/test/tint/builtins/gen/literal/clamp/2c251b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/clamp/2c251b.wgsl.expected.ir.msl
index 8bb64e2..a2ed8b1 100644
--- a/test/tint/builtins/gen/literal/clamp/2c251b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/clamp/2c251b.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%clamp_2c251b = func():void -> %b2 {
-  %b2 = block {
+%clamp_2c251b = func():void {
+  $B2: {
     %res:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %4:vec4<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %clamp_2c251b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %clamp_2c251b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %clamp_2c251b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/clamp/548fc7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/clamp/548fc7.wgsl.expected.ir.msl
index dba2fa3..cefe9bc 100644
--- a/test/tint/builtins/gen/literal/clamp/548fc7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/clamp/548fc7.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%clamp_548fc7 = func():void -> %b2 {
-  %b2 = block {
+%clamp_548fc7 = func():void {
+  $B2: {
     %res:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %4:vec3<u32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %clamp_548fc7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %clamp_548fc7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %clamp_548fc7
     ret
   }
diff --git a/test/tint/builtins/gen/literal/clamp/553ffb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/clamp/553ffb.wgsl.expected.ir.msl
index 8a71d76..3547c96 100644
--- a/test/tint/builtins/gen/literal/clamp/553ffb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/clamp/553ffb.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%clamp_553ffb = func():void -> %b2 {
-  %b2 = block {
+%clamp_553ffb = func():void {
+  $B2: {
     %res:ptr<function, f16, read_write> = var, 1.0h
     %4:f16 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %clamp_553ffb
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %clamp_553ffb
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %clamp_553ffb
     ret
   }
diff --git a/test/tint/builtins/gen/literal/clamp/5f0819.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/clamp/5f0819.wgsl.expected.ir.msl
index 632e4cd..bc20786 100644
--- a/test/tint/builtins/gen/literal/clamp/5f0819.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/clamp/5f0819.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%clamp_5f0819 = func():void -> %b2 {
-  %b2 = block {
+%clamp_5f0819 = func():void {
+  $B2: {
     %res:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %4:vec3<i32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %clamp_5f0819
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %clamp_5f0819
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %clamp_5f0819
     ret
   }
diff --git a/test/tint/builtins/gen/literal/clamp/6c1749.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/clamp/6c1749.wgsl.expected.ir.msl
index 8bbcc0c..9f66e57 100644
--- a/test/tint/builtins/gen/literal/clamp/6c1749.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/clamp/6c1749.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%clamp_6c1749 = func():void -> %b2 {
-  %b2 = block {
+%clamp_6c1749 = func():void {
+  $B2: {
     %res:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %4:vec2<i32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %clamp_6c1749
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %clamp_6c1749
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %clamp_6c1749
     ret
   }
diff --git a/test/tint/builtins/gen/literal/clamp/7706d7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/clamp/7706d7.wgsl.expected.ir.msl
index d9878b1..5195b7a 100644
--- a/test/tint/builtins/gen/literal/clamp/7706d7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/clamp/7706d7.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%clamp_7706d7 = func():void -> %b2 {
-  %b2 = block {
+%clamp_7706d7 = func():void {
+  $B2: {
     %res:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %4:vec2<u32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %clamp_7706d7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %clamp_7706d7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %clamp_7706d7
     ret
   }
diff --git a/test/tint/builtins/gen/literal/clamp/867397.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/clamp/867397.wgsl.expected.ir.msl
index f6ef6f2..1e11eec 100644
--- a/test/tint/builtins/gen/literal/clamp/867397.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/clamp/867397.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%clamp_867397 = func():void -> %b2 {
-  %b2 = block {
+%clamp_867397 = func():void {
+  $B2: {
     %res:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %4:vec3<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %clamp_867397
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %clamp_867397
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %clamp_867397
     ret
   }
diff --git a/test/tint/builtins/gen/literal/clamp/a2de25.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/clamp/a2de25.wgsl.expected.ir.msl
index 7bb9b3d..d0bbda6 100644
--- a/test/tint/builtins/gen/literal/clamp/a2de25.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/clamp/a2de25.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%clamp_a2de25 = func():void -> %b2 {
-  %b2 = block {
+%clamp_a2de25 = func():void {
+  $B2: {
     %res:ptr<function, u32, read_write> = var, 1u
     %4:u32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %clamp_a2de25
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %clamp_a2de25
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %clamp_a2de25
     ret
   }
diff --git a/test/tint/builtins/gen/literal/clamp/b07c65.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/clamp/b07c65.wgsl.expected.ir.msl
index 2cb583a..863bcde 100644
--- a/test/tint/builtins/gen/literal/clamp/b07c65.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/clamp/b07c65.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%clamp_b07c65 = func():void -> %b2 {
-  %b2 = block {
+%clamp_b07c65 = func():void {
+  $B2: {
     %res:ptr<function, i32, read_write> = var, 1i
     %4:i32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %clamp_b07c65
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %clamp_b07c65
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %clamp_b07c65
     ret
   }
diff --git a/test/tint/builtins/gen/literal/clamp/b195eb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/clamp/b195eb.wgsl.expected.ir.msl
index b014534..25bbaa4 100644
--- a/test/tint/builtins/gen/literal/clamp/b195eb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/clamp/b195eb.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%clamp_b195eb = func():void -> %b2 {
-  %b2 = block {
+%clamp_b195eb = func():void {
+  $B2: {
     %res:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %4:vec3<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %clamp_b195eb
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %clamp_b195eb
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %clamp_b195eb
     ret
   }
diff --git a/test/tint/builtins/gen/literal/clamp/bd43ce.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/clamp/bd43ce.wgsl.expected.ir.msl
index d2fec03..6932a36 100644
--- a/test/tint/builtins/gen/literal/clamp/bd43ce.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/clamp/bd43ce.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%clamp_bd43ce = func():void -> %b2 {
-  %b2 = block {
+%clamp_bd43ce = func():void {
+  $B2: {
     %res:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
     %4:vec4<u32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %clamp_bd43ce
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %clamp_bd43ce
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %clamp_bd43ce
     ret
   }
diff --git a/test/tint/builtins/gen/literal/cos/0835a8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/cos/0835a8.wgsl.expected.ir.msl
index 4124b27..b323c26 100644
--- a/test/tint/builtins/gen/literal/cos/0835a8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/cos/0835a8.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%cos_0835a8 = func():void -> %b2 {
-  %b2 = block {
+%cos_0835a8 = func():void {
+  $B2: {
     %res:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %4:vec3<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %cos_0835a8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %cos_0835a8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %cos_0835a8
     ret
   }
diff --git a/test/tint/builtins/gen/literal/cos/0a89f7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/cos/0a89f7.wgsl.expected.ir.msl
index 31a9e3b..6bd3a28 100644
--- a/test/tint/builtins/gen/literal/cos/0a89f7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/cos/0a89f7.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%cos_0a89f7 = func():void -> %b2 {
-  %b2 = block {
+%cos_0a89f7 = func():void {
+  $B2: {
     %res:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %4:vec4<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %cos_0a89f7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %cos_0a89f7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %cos_0a89f7
     ret
   }
diff --git a/test/tint/builtins/gen/literal/cos/16dc15.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/cos/16dc15.wgsl.expected.ir.msl
index 8447f42..0c91334 100644
--- a/test/tint/builtins/gen/literal/cos/16dc15.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/cos/16dc15.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%cos_16dc15 = func():void -> %b2 {
-  %b2 = block {
+%cos_16dc15 = func():void {
+  $B2: {
     %res:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %4:vec3<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %cos_16dc15
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %cos_16dc15
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %cos_16dc15
     ret
   }
diff --git a/test/tint/builtins/gen/literal/cos/29d66d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/cos/29d66d.wgsl.expected.ir.msl
index 91a1c80..5fe42c8 100644
--- a/test/tint/builtins/gen/literal/cos/29d66d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/cos/29d66d.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%cos_29d66d = func():void -> %b2 {
-  %b2 = block {
+%cos_29d66d = func():void {
+  $B2: {
     %res:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %4:vec4<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %cos_29d66d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %cos_29d66d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %cos_29d66d
     ret
   }
diff --git a/test/tint/builtins/gen/literal/cos/5bc2c6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/cos/5bc2c6.wgsl.expected.ir.msl
index 1743af8..595285b 100644
--- a/test/tint/builtins/gen/literal/cos/5bc2c6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/cos/5bc2c6.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%cos_5bc2c6 = func():void -> %b2 {
-  %b2 = block {
+%cos_5bc2c6 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %4:vec2<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %cos_5bc2c6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %cos_5bc2c6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %cos_5bc2c6
     ret
   }
diff --git a/test/tint/builtins/gen/literal/cos/c3b486.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/cos/c3b486.wgsl.expected.ir.msl
index 48fd94a..d5bee61 100644
--- a/test/tint/builtins/gen/literal/cos/c3b486.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/cos/c3b486.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%cos_c3b486 = func():void -> %b2 {
-  %b2 = block {
+%cos_c3b486 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %4:vec2<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %cos_c3b486
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %cos_c3b486
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %cos_c3b486
     ret
   }
diff --git a/test/tint/builtins/gen/literal/cos/c5c28e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/cos/c5c28e.wgsl.expected.ir.msl
index 8c67e39..f6f9e7c 100644
--- a/test/tint/builtins/gen/literal/cos/c5c28e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/cos/c5c28e.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%cos_c5c28e = func():void -> %b2 {
-  %b2 = block {
+%cos_c5c28e = func():void {
+  $B2: {
     %res:ptr<function, f32, read_write> = var, 1.0f
     %4:f32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %cos_c5c28e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %cos_c5c28e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %cos_c5c28e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/cos/fc047d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/cos/fc047d.wgsl.expected.ir.msl
index 6ebe11e..f6a7058 100644
--- a/test/tint/builtins/gen/literal/cos/fc047d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/cos/fc047d.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%cos_fc047d = func():void -> %b2 {
-  %b2 = block {
+%cos_fc047d = func():void {
+  $B2: {
     %res:ptr<function, f16, read_write> = var, 1.0h
     %4:f16 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %cos_fc047d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %cos_fc047d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %cos_fc047d
     ret
   }
diff --git a/test/tint/builtins/gen/literal/cosh/2ed778.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/cosh/2ed778.wgsl.expected.ir.msl
index cfd663e..9e28d57 100644
--- a/test/tint/builtins/gen/literal/cosh/2ed778.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/cosh/2ed778.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%cosh_2ed778 = func():void -> %b2 {
-  %b2 = block {
+%cosh_2ed778 = func():void {
+  $B2: {
     %res:ptr<function, f16, read_write> = var, 1.0h
     %4:f16 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %cosh_2ed778
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %cosh_2ed778
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %cosh_2ed778
     ret
   }
diff --git a/test/tint/builtins/gen/literal/cosh/377652.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/cosh/377652.wgsl.expected.ir.msl
index aa894c6..fc9db4e 100644
--- a/test/tint/builtins/gen/literal/cosh/377652.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/cosh/377652.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%cosh_377652 = func():void -> %b2 {
-  %b2 = block {
+%cosh_377652 = func():void {
+  $B2: {
     %res:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %4:vec3<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %cosh_377652
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %cosh_377652
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %cosh_377652
     ret
   }
diff --git a/test/tint/builtins/gen/literal/cosh/3b7bbf.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/cosh/3b7bbf.wgsl.expected.ir.msl
index 7f1c367..228b46f 100644
--- a/test/tint/builtins/gen/literal/cosh/3b7bbf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/cosh/3b7bbf.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%cosh_3b7bbf = func():void -> %b2 {
-  %b2 = block {
+%cosh_3b7bbf = func():void {
+  $B2: {
     %res:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %4:vec4<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %cosh_3b7bbf
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %cosh_3b7bbf
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %cosh_3b7bbf
     ret
   }
diff --git a/test/tint/builtins/gen/literal/cosh/43b672.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/cosh/43b672.wgsl.expected.ir.msl
index e2fe279..b9141f6 100644
--- a/test/tint/builtins/gen/literal/cosh/43b672.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/cosh/43b672.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%cosh_43b672 = func():void -> %b2 {
-  %b2 = block {
+%cosh_43b672 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %4:vec2<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %cosh_43b672
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %cosh_43b672
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %cosh_43b672
     ret
   }
diff --git a/test/tint/builtins/gen/literal/cosh/b1b8a0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/cosh/b1b8a0.wgsl.expected.ir.msl
index ed24d65..e40d2a4 100644
--- a/test/tint/builtins/gen/literal/cosh/b1b8a0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/cosh/b1b8a0.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%cosh_b1b8a0 = func():void -> %b2 {
-  %b2 = block {
+%cosh_b1b8a0 = func():void {
+  $B2: {
     %res:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %4:vec3<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %cosh_b1b8a0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %cosh_b1b8a0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %cosh_b1b8a0
     ret
   }
diff --git a/test/tint/builtins/gen/literal/cosh/c13756.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/cosh/c13756.wgsl.expected.ir.msl
index 22b3529..0b0a20d 100644
--- a/test/tint/builtins/gen/literal/cosh/c13756.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/cosh/c13756.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%cosh_c13756 = func():void -> %b2 {
-  %b2 = block {
+%cosh_c13756 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %4:vec2<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %cosh_c13756
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %cosh_c13756
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %cosh_c13756
     ret
   }
diff --git a/test/tint/builtins/gen/literal/cosh/da92dd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/cosh/da92dd.wgsl.expected.ir.msl
index 55c82a7..bbc76c4 100644
--- a/test/tint/builtins/gen/literal/cosh/da92dd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/cosh/da92dd.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%cosh_da92dd = func():void -> %b2 {
-  %b2 = block {
+%cosh_da92dd = func():void {
+  $B2: {
     %res:ptr<function, f32, read_write> = var, 1.0f
     %4:f32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %cosh_da92dd
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %cosh_da92dd
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %cosh_da92dd
     ret
   }
diff --git a/test/tint/builtins/gen/literal/cosh/e0c1de.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/cosh/e0c1de.wgsl.expected.ir.msl
index a6ac15b..3fa03d0 100644
--- a/test/tint/builtins/gen/literal/cosh/e0c1de.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/cosh/e0c1de.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%cosh_e0c1de = func():void -> %b2 {
-  %b2 = block {
+%cosh_e0c1de = func():void {
+  $B2: {
     %res:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %4:vec4<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %cosh_e0c1de
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %cosh_e0c1de
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %cosh_e0c1de
     ret
   }
diff --git a/test/tint/builtins/gen/literal/countLeadingZeros/208d46.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/countLeadingZeros/208d46.wgsl.expected.ir.msl
index 4e8d92e..7b16c66 100644
--- a/test/tint/builtins/gen/literal/countLeadingZeros/208d46.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/countLeadingZeros/208d46.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%countLeadingZeros_208d46 = func():void -> %b2 {
-  %b2 = block {
+%countLeadingZeros_208d46 = func():void {
+  $B2: {
     %res:ptr<function, u32, read_write> = var, 31u
     %4:u32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %countLeadingZeros_208d46
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %countLeadingZeros_208d46
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %countLeadingZeros_208d46
     ret
   }
diff --git a/test/tint/builtins/gen/literal/countLeadingZeros/6d4656.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/countLeadingZeros/6d4656.wgsl.expected.ir.msl
index 3726890..f00a512 100644
--- a/test/tint/builtins/gen/literal/countLeadingZeros/6d4656.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/countLeadingZeros/6d4656.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%countLeadingZeros_6d4656 = func():void -> %b2 {
-  %b2 = block {
+%countLeadingZeros_6d4656 = func():void {
+  $B2: {
     %res:ptr<function, i32, read_write> = var, 31i
     %4:i32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %countLeadingZeros_6d4656
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %countLeadingZeros_6d4656
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %countLeadingZeros_6d4656
     ret
   }
diff --git a/test/tint/builtins/gen/literal/countLeadingZeros/70783f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/countLeadingZeros/70783f.wgsl.expected.ir.msl
index 44063ed..877ed3f 100644
--- a/test/tint/builtins/gen/literal/countLeadingZeros/70783f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/countLeadingZeros/70783f.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%countLeadingZeros_70783f = func():void -> %b2 {
-  %b2 = block {
+%countLeadingZeros_70783f = func():void {
+  $B2: {
     %res:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(31u)
     %4:vec2<u32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %countLeadingZeros_70783f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %countLeadingZeros_70783f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %countLeadingZeros_70783f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/countLeadingZeros/7c38a6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/countLeadingZeros/7c38a6.wgsl.expected.ir.msl
index 5194c2a..014eec5 100644
--- a/test/tint/builtins/gen/literal/countLeadingZeros/7c38a6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/countLeadingZeros/7c38a6.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%countLeadingZeros_7c38a6 = func():void -> %b2 {
-  %b2 = block {
+%countLeadingZeros_7c38a6 = func():void {
+  $B2: {
     %res:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(31i)
     %4:vec3<i32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %countLeadingZeros_7c38a6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %countLeadingZeros_7c38a6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %countLeadingZeros_7c38a6
     ret
   }
diff --git a/test/tint/builtins/gen/literal/countLeadingZeros/858d40.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/countLeadingZeros/858d40.wgsl.expected.ir.msl
index d5c4325..f4367ad 100644
--- a/test/tint/builtins/gen/literal/countLeadingZeros/858d40.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/countLeadingZeros/858d40.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%countLeadingZeros_858d40 = func():void -> %b2 {
-  %b2 = block {
+%countLeadingZeros_858d40 = func():void {
+  $B2: {
     %res:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(31i)
     %4:vec2<i32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %countLeadingZeros_858d40
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %countLeadingZeros_858d40
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %countLeadingZeros_858d40
     ret
   }
diff --git a/test/tint/builtins/gen/literal/countLeadingZeros/ab6345.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/countLeadingZeros/ab6345.wgsl.expected.ir.msl
index 55bd5dd..6b4e08f 100644
--- a/test/tint/builtins/gen/literal/countLeadingZeros/ab6345.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/countLeadingZeros/ab6345.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%countLeadingZeros_ab6345 = func():void -> %b2 {
-  %b2 = block {
+%countLeadingZeros_ab6345 = func():void {
+  $B2: {
     %res:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(31u)
     %4:vec3<u32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %countLeadingZeros_ab6345
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %countLeadingZeros_ab6345
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %countLeadingZeros_ab6345
     ret
   }
diff --git a/test/tint/builtins/gen/literal/countLeadingZeros/eab32b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/countLeadingZeros/eab32b.wgsl.expected.ir.msl
index 7e19d7c..9ac6475 100644
--- a/test/tint/builtins/gen/literal/countLeadingZeros/eab32b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/countLeadingZeros/eab32b.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%countLeadingZeros_eab32b = func():void -> %b2 {
-  %b2 = block {
+%countLeadingZeros_eab32b = func():void {
+  $B2: {
     %res:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(31i)
     %4:vec4<i32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %countLeadingZeros_eab32b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %countLeadingZeros_eab32b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %countLeadingZeros_eab32b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/countLeadingZeros/f70103.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/countLeadingZeros/f70103.wgsl.expected.ir.msl
index 1b03c00..53bf941 100644
--- a/test/tint/builtins/gen/literal/countLeadingZeros/f70103.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/countLeadingZeros/f70103.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%countLeadingZeros_f70103 = func():void -> %b2 {
-  %b2 = block {
+%countLeadingZeros_f70103 = func():void {
+  $B2: {
     %res:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(31u)
     %4:vec4<u32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %countLeadingZeros_f70103
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %countLeadingZeros_f70103
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %countLeadingZeros_f70103
     ret
   }
diff --git a/test/tint/builtins/gen/literal/countOneBits/0d0e46.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/countOneBits/0d0e46.wgsl.expected.ir.msl
index 25e745a..d960057 100644
--- a/test/tint/builtins/gen/literal/countOneBits/0d0e46.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/countOneBits/0d0e46.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%countOneBits_0d0e46 = func():void -> %b2 {
-  %b2 = block {
+%countOneBits_0d0e46 = func():void {
+  $B2: {
     %res:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
     %4:vec4<u32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %countOneBits_0d0e46
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %countOneBits_0d0e46
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %countOneBits_0d0e46
     ret
   }
diff --git a/test/tint/builtins/gen/literal/countOneBits/0f7980.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/countOneBits/0f7980.wgsl.expected.ir.msl
index ef683c1..446cd6a 100644
--- a/test/tint/builtins/gen/literal/countOneBits/0f7980.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/countOneBits/0f7980.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%countOneBits_0f7980 = func():void -> %b2 {
-  %b2 = block {
+%countOneBits_0f7980 = func():void {
+  $B2: {
     %res:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %4:vec4<i32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %countOneBits_0f7980
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %countOneBits_0f7980
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %countOneBits_0f7980
     ret
   }
diff --git a/test/tint/builtins/gen/literal/countOneBits/65d2ae.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/countOneBits/65d2ae.wgsl.expected.ir.msl
index 3da4826..db213b7 100644
--- a/test/tint/builtins/gen/literal/countOneBits/65d2ae.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/countOneBits/65d2ae.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%countOneBits_65d2ae = func():void -> %b2 {
-  %b2 = block {
+%countOneBits_65d2ae = func():void {
+  $B2: {
     %res:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %4:vec3<i32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %countOneBits_65d2ae
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %countOneBits_65d2ae
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %countOneBits_65d2ae
     ret
   }
diff --git a/test/tint/builtins/gen/literal/countOneBits/690cfc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/countOneBits/690cfc.wgsl.expected.ir.msl
index b31fb27..61293cf 100644
--- a/test/tint/builtins/gen/literal/countOneBits/690cfc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/countOneBits/690cfc.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%countOneBits_690cfc = func():void -> %b2 {
-  %b2 = block {
+%countOneBits_690cfc = func():void {
+  $B2: {
     %res:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %4:vec3<u32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %countOneBits_690cfc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %countOneBits_690cfc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %countOneBits_690cfc
     ret
   }
diff --git a/test/tint/builtins/gen/literal/countOneBits/94fd81.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/countOneBits/94fd81.wgsl.expected.ir.msl
index bd99f2e..a79b4dc 100644
--- a/test/tint/builtins/gen/literal/countOneBits/94fd81.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/countOneBits/94fd81.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%countOneBits_94fd81 = func():void -> %b2 {
-  %b2 = block {
+%countOneBits_94fd81 = func():void {
+  $B2: {
     %res:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %4:vec2<u32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %countOneBits_94fd81
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %countOneBits_94fd81
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %countOneBits_94fd81
     ret
   }
diff --git a/test/tint/builtins/gen/literal/countOneBits/ae44f9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/countOneBits/ae44f9.wgsl.expected.ir.msl
index 7a4f991..4d06d68 100644
--- a/test/tint/builtins/gen/literal/countOneBits/ae44f9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/countOneBits/ae44f9.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%countOneBits_ae44f9 = func():void -> %b2 {
-  %b2 = block {
+%countOneBits_ae44f9 = func():void {
+  $B2: {
     %res:ptr<function, u32, read_write> = var, 1u
     %4:u32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %countOneBits_ae44f9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %countOneBits_ae44f9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %countOneBits_ae44f9
     ret
   }
diff --git a/test/tint/builtins/gen/literal/countOneBits/af90e2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/countOneBits/af90e2.wgsl.expected.ir.msl
index e0b167e..8722955 100644
--- a/test/tint/builtins/gen/literal/countOneBits/af90e2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/countOneBits/af90e2.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%countOneBits_af90e2 = func():void -> %b2 {
-  %b2 = block {
+%countOneBits_af90e2 = func():void {
+  $B2: {
     %res:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %4:vec2<i32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %countOneBits_af90e2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %countOneBits_af90e2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %countOneBits_af90e2
     ret
   }
diff --git a/test/tint/builtins/gen/literal/countOneBits/fd88b2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/countOneBits/fd88b2.wgsl.expected.ir.msl
index 008eac7..31c6f40 100644
--- a/test/tint/builtins/gen/literal/countOneBits/fd88b2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/countOneBits/fd88b2.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%countOneBits_fd88b2 = func():void -> %b2 {
-  %b2 = block {
+%countOneBits_fd88b2 = func():void {
+  $B2: {
     %res:ptr<function, i32, read_write> = var, 1i
     %4:i32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %countOneBits_fd88b2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %countOneBits_fd88b2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %countOneBits_fd88b2
     ret
   }
diff --git a/test/tint/builtins/gen/literal/countTrailingZeros/1ad138.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/countTrailingZeros/1ad138.wgsl.expected.ir.msl
index 31ba2c3..5aa4bdc 100644
--- a/test/tint/builtins/gen/literal/countTrailingZeros/1ad138.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/countTrailingZeros/1ad138.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%countTrailingZeros_1ad138 = func():void -> %b2 {
-  %b2 = block {
+%countTrailingZeros_1ad138 = func():void {
+  $B2: {
     %res:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(0u)
     %4:vec2<u32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %countTrailingZeros_1ad138
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %countTrailingZeros_1ad138
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %countTrailingZeros_1ad138
     ret
   }
diff --git a/test/tint/builtins/gen/literal/countTrailingZeros/1dc84a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/countTrailingZeros/1dc84a.wgsl.expected.ir.msl
index 87f4c2c..dd5f1af 100644
--- a/test/tint/builtins/gen/literal/countTrailingZeros/1dc84a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/countTrailingZeros/1dc84a.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%countTrailingZeros_1dc84a = func():void -> %b2 {
-  %b2 = block {
+%countTrailingZeros_1dc84a = func():void {
+  $B2: {
     %res:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(0i)
     %4:vec4<i32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %countTrailingZeros_1dc84a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %countTrailingZeros_1dc84a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %countTrailingZeros_1dc84a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/countTrailingZeros/21e394.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/countTrailingZeros/21e394.wgsl.expected.ir.msl
index 8a6de3f..509e755 100644
--- a/test/tint/builtins/gen/literal/countTrailingZeros/21e394.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/countTrailingZeros/21e394.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%countTrailingZeros_21e394 = func():void -> %b2 {
-  %b2 = block {
+%countTrailingZeros_21e394 = func():void {
+  $B2: {
     %res:ptr<function, u32, read_write> = var, 0u
     %4:u32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %countTrailingZeros_21e394
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %countTrailingZeros_21e394
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %countTrailingZeros_21e394
     ret
   }
diff --git a/test/tint/builtins/gen/literal/countTrailingZeros/327c37.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/countTrailingZeros/327c37.wgsl.expected.ir.msl
index ad6a5e5..0397cf3 100644
--- a/test/tint/builtins/gen/literal/countTrailingZeros/327c37.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/countTrailingZeros/327c37.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%countTrailingZeros_327c37 = func():void -> %b2 {
-  %b2 = block {
+%countTrailingZeros_327c37 = func():void {
+  $B2: {
     %res:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(0i)
     %4:vec2<i32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %countTrailingZeros_327c37
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %countTrailingZeros_327c37
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %countTrailingZeros_327c37
     ret
   }
diff --git a/test/tint/builtins/gen/literal/countTrailingZeros/42fed6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/countTrailingZeros/42fed6.wgsl.expected.ir.msl
index 1098b1f..f18d316 100644
--- a/test/tint/builtins/gen/literal/countTrailingZeros/42fed6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/countTrailingZeros/42fed6.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%countTrailingZeros_42fed6 = func():void -> %b2 {
-  %b2 = block {
+%countTrailingZeros_42fed6 = func():void {
+  $B2: {
     %res:ptr<function, i32, read_write> = var, 0i
     %4:i32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %countTrailingZeros_42fed6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %countTrailingZeros_42fed6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %countTrailingZeros_42fed6
     ret
   }
diff --git a/test/tint/builtins/gen/literal/countTrailingZeros/8ed26f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/countTrailingZeros/8ed26f.wgsl.expected.ir.msl
index 3800ee9..a2334a5 100644
--- a/test/tint/builtins/gen/literal/countTrailingZeros/8ed26f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/countTrailingZeros/8ed26f.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%countTrailingZeros_8ed26f = func():void -> %b2 {
-  %b2 = block {
+%countTrailingZeros_8ed26f = func():void {
+  $B2: {
     %res:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(0u)
     %4:vec3<u32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %countTrailingZeros_8ed26f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %countTrailingZeros_8ed26f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %countTrailingZeros_8ed26f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/countTrailingZeros/acfacb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/countTrailingZeros/acfacb.wgsl.expected.ir.msl
index 7e844df..6e8d1e2 100644
--- a/test/tint/builtins/gen/literal/countTrailingZeros/acfacb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/countTrailingZeros/acfacb.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%countTrailingZeros_acfacb = func():void -> %b2 {
-  %b2 = block {
+%countTrailingZeros_acfacb = func():void {
+  $B2: {
     %res:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(0i)
     %4:vec3<i32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %countTrailingZeros_acfacb
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %countTrailingZeros_acfacb
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %countTrailingZeros_acfacb
     ret
   }
diff --git a/test/tint/builtins/gen/literal/countTrailingZeros/d2b4a0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/countTrailingZeros/d2b4a0.wgsl.expected.ir.msl
index b37b9ca..11d2846 100644
--- a/test/tint/builtins/gen/literal/countTrailingZeros/d2b4a0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/countTrailingZeros/d2b4a0.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%countTrailingZeros_d2b4a0 = func():void -> %b2 {
-  %b2 = block {
+%countTrailingZeros_d2b4a0 = func():void {
+  $B2: {
     %res:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(0u)
     %4:vec4<u32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %countTrailingZeros_d2b4a0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %countTrailingZeros_d2b4a0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %countTrailingZeros_d2b4a0
     ret
   }
diff --git a/test/tint/builtins/gen/literal/cross/041cb0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/cross/041cb0.wgsl.expected.ir.msl
index ae2e05e..2a70cd0 100644
--- a/test/tint/builtins/gen/literal/cross/041cb0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/cross/041cb0.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%cross_041cb0 = func():void -> %b2 {
-  %b2 = block {
+%cross_041cb0 = func():void {
+  $B2: {
     %res:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(0.0f)
     %4:vec3<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %cross_041cb0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %cross_041cb0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %cross_041cb0
     ret
   }
diff --git a/test/tint/builtins/gen/literal/cross/9857cb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/cross/9857cb.wgsl.expected.ir.msl
index 9bc4604..5e59e1e 100644
--- a/test/tint/builtins/gen/literal/cross/9857cb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/cross/9857cb.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%cross_9857cb = func():void -> %b2 {
-  %b2 = block {
+%cross_9857cb = func():void {
+  $B2: {
     %res:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(0.0h)
     %4:vec3<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %cross_9857cb
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %cross_9857cb
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %cross_9857cb
     ret
   }
diff --git a/test/tint/builtins/gen/literal/degrees/0d170c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/degrees/0d170c.wgsl.expected.ir.msl
index a41911b..f0d467e 100644
--- a/test/tint/builtins/gen/literal/degrees/0d170c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/degrees/0d170c.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%degrees_0d170c = func():void -> %b2 {
-  %b2 = block {
+%degrees_0d170c = func():void {
+  $B2: {
     %res:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(57.2957763671875f)
     %4:vec4<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %degrees_0d170c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %degrees_0d170c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %degrees_0d170c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/degrees/1ad5df.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/degrees/1ad5df.wgsl.expected.ir.msl
index 9d87881..a2731d6 100644
--- a/test/tint/builtins/gen/literal/degrees/1ad5df.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/degrees/1ad5df.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%degrees_1ad5df = func():void -> %b2 {
-  %b2 = block {
+%degrees_1ad5df = func():void {
+  $B2: {
     %res:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(57.2957763671875f)
     %4:vec2<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %degrees_1ad5df
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %degrees_1ad5df
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %degrees_1ad5df
     ret
   }
diff --git a/test/tint/builtins/gen/literal/degrees/2af623.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/degrees/2af623.wgsl.expected.ir.msl
index bfb85d8..1780616 100644
--- a/test/tint/builtins/gen/literal/degrees/2af623.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/degrees/2af623.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%degrees_2af623 = func():void -> %b2 {
-  %b2 = block {
+%degrees_2af623 = func():void {
+  $B2: {
     %res:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(57.2957763671875f)
     %4:vec3<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %degrees_2af623
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %degrees_2af623
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %degrees_2af623
     ret
   }
diff --git a/test/tint/builtins/gen/literal/degrees/3055d3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/degrees/3055d3.wgsl.expected.ir.msl
index cdb36d4..bbc4216 100644
--- a/test/tint/builtins/gen/literal/degrees/3055d3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/degrees/3055d3.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%degrees_3055d3 = func():void -> %b2 {
-  %b2 = block {
+%degrees_3055d3 = func():void {
+  $B2: {
     %res:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(57.3125h)
     %4:vec4<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %degrees_3055d3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %degrees_3055d3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %degrees_3055d3
     ret
   }
diff --git a/test/tint/builtins/gen/literal/degrees/51f705.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/degrees/51f705.wgsl.expected.ir.msl
index a74c285..7f7c0dd 100644
--- a/test/tint/builtins/gen/literal/degrees/51f705.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/degrees/51f705.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%degrees_51f705 = func():void -> %b2 {
-  %b2 = block {
+%degrees_51f705 = func():void {
+  $B2: {
     %res:ptr<function, f32, read_write> = var, 57.2957763671875f
     %4:f32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %degrees_51f705
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %degrees_51f705
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %degrees_51f705
     ret
   }
diff --git a/test/tint/builtins/gen/literal/degrees/5e9805.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/degrees/5e9805.wgsl.expected.ir.msl
index 534fc9a..3b25593 100644
--- a/test/tint/builtins/gen/literal/degrees/5e9805.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/degrees/5e9805.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%degrees_5e9805 = func():void -> %b2 {
-  %b2 = block {
+%degrees_5e9805 = func():void {
+  $B2: {
     %res:ptr<function, f16, read_write> = var, 57.3125h
     %4:f16 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %degrees_5e9805
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %degrees_5e9805
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %degrees_5e9805
     ret
   }
diff --git a/test/tint/builtins/gen/literal/degrees/dfe8f4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/degrees/dfe8f4.wgsl.expected.ir.msl
index fd825c5..d6eca91 100644
--- a/test/tint/builtins/gen/literal/degrees/dfe8f4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/degrees/dfe8f4.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%degrees_dfe8f4 = func():void -> %b2 {
-  %b2 = block {
+%degrees_dfe8f4 = func():void {
+  $B2: {
     %res:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(57.3125h)
     %4:vec3<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %degrees_dfe8f4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %degrees_dfe8f4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %degrees_dfe8f4
     ret
   }
diff --git a/test/tint/builtins/gen/literal/degrees/f59715.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/degrees/f59715.wgsl.expected.ir.msl
index 6fdef6d..fb976de 100644
--- a/test/tint/builtins/gen/literal/degrees/f59715.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/degrees/f59715.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%degrees_f59715 = func():void -> %b2 {
-  %b2 = block {
+%degrees_f59715 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(57.3125h)
     %4:vec2<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %degrees_f59715
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %degrees_f59715
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %degrees_f59715
     ret
   }
diff --git a/test/tint/builtins/gen/literal/determinant/2b62ba.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/determinant/2b62ba.wgsl.expected.ir.msl
index 03a310c..9df2f04 100644
--- a/test/tint/builtins/gen/literal/determinant/2b62ba.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/determinant/2b62ba.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%determinant_2b62ba = func():void -> %b2 {
-  %b2 = block {
+%determinant_2b62ba = func():void {
+  $B2: {
     %res:ptr<function, f32, read_write> = var, 0.0f
     %4:f32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %determinant_2b62ba
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %determinant_2b62ba
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %determinant_2b62ba
     ret
   }
diff --git a/test/tint/builtins/gen/literal/determinant/32bfde.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/determinant/32bfde.wgsl.expected.ir.msl
index 4825ba4..e75c120 100644
--- a/test/tint/builtins/gen/literal/determinant/32bfde.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/determinant/32bfde.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%determinant_32bfde = func():void -> %b2 {
-  %b2 = block {
+%determinant_32bfde = func():void {
+  $B2: {
     %res:ptr<function, f16, read_write> = var, 0.0h
     %4:f16 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %determinant_32bfde
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %determinant_32bfde
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %determinant_32bfde
     ret
   }
diff --git a/test/tint/builtins/gen/literal/determinant/a0a87c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/determinant/a0a87c.wgsl.expected.ir.msl
index aeb56f6..2e0d308 100644
--- a/test/tint/builtins/gen/literal/determinant/a0a87c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/determinant/a0a87c.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%determinant_a0a87c = func():void -> %b2 {
-  %b2 = block {
+%determinant_a0a87c = func():void {
+  $B2: {
     %res:ptr<function, f32, read_write> = var, 0.0f
     %4:f32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %determinant_a0a87c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %determinant_a0a87c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %determinant_a0a87c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/determinant/d7c86f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/determinant/d7c86f.wgsl.expected.ir.msl
index 9442c60..274863b 100644
--- a/test/tint/builtins/gen/literal/determinant/d7c86f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/determinant/d7c86f.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%determinant_d7c86f = func():void -> %b2 {
-  %b2 = block {
+%determinant_d7c86f = func():void {
+  $B2: {
     %res:ptr<function, f16, read_write> = var, 0.0h
     %4:f16 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %determinant_d7c86f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %determinant_d7c86f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %determinant_d7c86f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/determinant/e19305.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/determinant/e19305.wgsl.expected.ir.msl
index 66cb3ce..4a41cc3 100644
--- a/test/tint/builtins/gen/literal/determinant/e19305.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/determinant/e19305.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%determinant_e19305 = func():void -> %b2 {
-  %b2 = block {
+%determinant_e19305 = func():void {
+  $B2: {
     %res:ptr<function, f32, read_write> = var, 0.0f
     %4:f32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %determinant_e19305
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %determinant_e19305
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %determinant_e19305
     ret
   }
diff --git a/test/tint/builtins/gen/literal/determinant/fc12a5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/determinant/fc12a5.wgsl.expected.ir.msl
index e4f7d7b..6154bba 100644
--- a/test/tint/builtins/gen/literal/determinant/fc12a5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/determinant/fc12a5.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%determinant_fc12a5 = func():void -> %b2 {
-  %b2 = block {
+%determinant_fc12a5 = func():void {
+  $B2: {
     %res:ptr<function, f16, read_write> = var, 0.0h
     %4:f16 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %determinant_fc12a5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %determinant_fc12a5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %determinant_fc12a5
     ret
   }
diff --git a/test/tint/builtins/gen/literal/distance/0657d4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/distance/0657d4.wgsl.expected.ir.msl
index dc717cc..78a2556 100644
--- a/test/tint/builtins/gen/literal/distance/0657d4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/distance/0657d4.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%distance_0657d4 = func():void -> %b2 {
-  %b2 = block {
+%distance_0657d4 = func():void {
+  $B2: {
     %res:ptr<function, f32, read_write> = var, 0.0f
     %4:f32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %distance_0657d4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %distance_0657d4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %distance_0657d4
     ret
   }
diff --git a/test/tint/builtins/gen/literal/distance/7272f3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/distance/7272f3.wgsl.expected.ir.msl
index fd2aa8b..8a0343b 100644
--- a/test/tint/builtins/gen/literal/distance/7272f3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/distance/7272f3.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%distance_7272f3 = func():void -> %b2 {
-  %b2 = block {
+%distance_7272f3 = func():void {
+  $B2: {
     %res:ptr<function, f16, read_write> = var, 0.0h
     %4:f16 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %distance_7272f3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %distance_7272f3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %distance_7272f3
     ret
   }
diff --git a/test/tint/builtins/gen/literal/distance/7d201f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/distance/7d201f.wgsl.expected.ir.msl
index 83215be..85c9d8f 100644
--- a/test/tint/builtins/gen/literal/distance/7d201f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/distance/7d201f.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%distance_7d201f = func():void -> %b2 {
-  %b2 = block {
+%distance_7d201f = func():void {
+  $B2: {
     %res:ptr<function, f16, read_write> = var, 0.0h
     %4:f16 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %distance_7d201f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %distance_7d201f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %distance_7d201f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/distance/892a5d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/distance/892a5d.wgsl.expected.ir.msl
index 3595ed9..9ae524c 100644
--- a/test/tint/builtins/gen/literal/distance/892a5d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/distance/892a5d.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%distance_892a5d = func():void -> %b2 {
-  %b2 = block {
+%distance_892a5d = func():void {
+  $B2: {
     %res:ptr<function, f16, read_write> = var, 0.0h
     %4:f16 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %distance_892a5d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %distance_892a5d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %distance_892a5d
     ret
   }
diff --git a/test/tint/builtins/gen/literal/distance/928fa0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/distance/928fa0.wgsl.expected.ir.msl
index 8a764b0..ca0afc3 100644
--- a/test/tint/builtins/gen/literal/distance/928fa0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/distance/928fa0.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%distance_928fa0 = func():void -> %b2 {
-  %b2 = block {
+%distance_928fa0 = func():void {
+  $B2: {
     %res:ptr<function, f16, read_write> = var, 0.0h
     %4:f16 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %distance_928fa0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %distance_928fa0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %distance_928fa0
     ret
   }
diff --git a/test/tint/builtins/gen/literal/distance/9646ea.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/distance/9646ea.wgsl.expected.ir.msl
index 8a01b19..0570269 100644
--- a/test/tint/builtins/gen/literal/distance/9646ea.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/distance/9646ea.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%distance_9646ea = func():void -> %b2 {
-  %b2 = block {
+%distance_9646ea = func():void {
+  $B2: {
     %res:ptr<function, f32, read_write> = var, 0.0f
     %4:f32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %distance_9646ea
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %distance_9646ea
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %distance_9646ea
     ret
   }
diff --git a/test/tint/builtins/gen/literal/distance/aa4055.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/distance/aa4055.wgsl.expected.ir.msl
index 4732ddd..fa38915 100644
--- a/test/tint/builtins/gen/literal/distance/aa4055.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/distance/aa4055.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%distance_aa4055 = func():void -> %b2 {
-  %b2 = block {
+%distance_aa4055 = func():void {
+  $B2: {
     %res:ptr<function, f32, read_write> = var, 0.0f
     %4:f32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %distance_aa4055
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %distance_aa4055
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %distance_aa4055
     ret
   }
diff --git a/test/tint/builtins/gen/literal/distance/cfed73.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/distance/cfed73.wgsl.expected.ir.msl
index f325352..ff4d191 100644
--- a/test/tint/builtins/gen/literal/distance/cfed73.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/distance/cfed73.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%distance_cfed73 = func():void -> %b2 {
-  %b2 = block {
+%distance_cfed73 = func():void {
+  $B2: {
     %res:ptr<function, f32, read_write> = var, 0.0f
     %4:f32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %distance_cfed73
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %distance_cfed73
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %distance_cfed73
     ret
   }
diff --git a/test/tint/builtins/gen/literal/dot/0c577b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dot/0c577b.wgsl.expected.ir.msl
index 8a679b8..8aa1c92 100644
--- a/test/tint/builtins/gen/literal/dot/0c577b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dot/0c577b.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%dot_0c577b = func():void -> %b2 {
-  %b2 = block {
+%dot_0c577b = func():void {
+  $B2: {
     %res:ptr<function, f32, read_write> = var, 4.0f
     %4:f32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %dot_0c577b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %dot_0c577b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %dot_0c577b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/dot/7548a0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dot/7548a0.wgsl.expected.ir.msl
index a2716c9..0834e2a 100644
--- a/test/tint/builtins/gen/literal/dot/7548a0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dot/7548a0.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%dot_7548a0 = func():void -> %b2 {
-  %b2 = block {
+%dot_7548a0 = func():void {
+  $B2: {
     %res:ptr<function, u32, read_write> = var, 3u
     %4:u32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %dot_7548a0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %dot_7548a0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %dot_7548a0
     ret
   }
diff --git a/test/tint/builtins/gen/literal/dot/883f0e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dot/883f0e.wgsl.expected.ir.msl
index c79e78d..9c80dce 100644
--- a/test/tint/builtins/gen/literal/dot/883f0e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dot/883f0e.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%dot_883f0e = func():void -> %b2 {
-  %b2 = block {
+%dot_883f0e = func():void {
+  $B2: {
     %res:ptr<function, f32, read_write> = var, 2.0f
     %4:f32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %dot_883f0e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %dot_883f0e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %dot_883f0e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/dot/8e40f1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dot/8e40f1.wgsl.expected.ir.msl
index 4d84fc4..f4e1747 100644
--- a/test/tint/builtins/gen/literal/dot/8e40f1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dot/8e40f1.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%dot_8e40f1 = func():void -> %b2 {
-  %b2 = block {
+%dot_8e40f1 = func():void {
+  $B2: {
     %res:ptr<function, f16, read_write> = var, 3.0h
     %4:f16 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %dot_8e40f1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %dot_8e40f1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %dot_8e40f1
     ret
   }
diff --git a/test/tint/builtins/gen/literal/dot/97c7ee.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dot/97c7ee.wgsl.expected.ir.msl
index 5bdaeb3..cffc5db 100644
--- a/test/tint/builtins/gen/literal/dot/97c7ee.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dot/97c7ee.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%dot_97c7ee = func():void -> %b2 {
-  %b2 = block {
+%dot_97c7ee = func():void {
+  $B2: {
     %res:ptr<function, u32, read_write> = var, 2u
     %4:u32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %dot_97c7ee
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %dot_97c7ee
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %dot_97c7ee
     ret
   }
diff --git a/test/tint/builtins/gen/literal/dot/ba4246.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dot/ba4246.wgsl.expected.ir.msl
index 6f807f9..612a9ac 100644
--- a/test/tint/builtins/gen/literal/dot/ba4246.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dot/ba4246.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%dot_ba4246 = func():void -> %b2 {
-  %b2 = block {
+%dot_ba4246 = func():void {
+  $B2: {
     %res:ptr<function, f32, read_write> = var, 3.0f
     %4:f32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %dot_ba4246
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %dot_ba4246
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %dot_ba4246
     ret
   }
diff --git a/test/tint/builtins/gen/literal/dot/cd5a04.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dot/cd5a04.wgsl.expected.ir.msl
index 14b7ffa..335ad7e 100644
--- a/test/tint/builtins/gen/literal/dot/cd5a04.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dot/cd5a04.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%dot_cd5a04 = func():void -> %b2 {
-  %b2 = block {
+%dot_cd5a04 = func():void {
+  $B2: {
     %res:ptr<function, f16, read_write> = var, 2.0h
     %4:f16 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %dot_cd5a04
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %dot_cd5a04
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %dot_cd5a04
     ret
   }
diff --git a/test/tint/builtins/gen/literal/dot/d0d179.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dot/d0d179.wgsl.expected.ir.msl
index f8ef95f..125642e 100644
--- a/test/tint/builtins/gen/literal/dot/d0d179.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dot/d0d179.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%dot_d0d179 = func():void -> %b2 {
-  %b2 = block {
+%dot_d0d179 = func():void {
+  $B2: {
     %res:ptr<function, f16, read_write> = var, 4.0h
     %4:f16 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %dot_d0d179
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %dot_d0d179
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %dot_d0d179
     ret
   }
diff --git a/test/tint/builtins/gen/literal/dot/e994c7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dot/e994c7.wgsl.expected.ir.msl
index 5c8a7ae..418954c 100644
--- a/test/tint/builtins/gen/literal/dot/e994c7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dot/e994c7.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%dot_e994c7 = func():void -> %b2 {
-  %b2 = block {
+%dot_e994c7 = func():void {
+  $B2: {
     %res:ptr<function, u32, read_write> = var, 4u
     %4:u32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %dot_e994c7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %dot_e994c7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %dot_e994c7
     ret
   }
diff --git a/test/tint/builtins/gen/literal/dot/ef6b1d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dot/ef6b1d.wgsl.expected.ir.msl
index 383e2bc..b6235b4 100644
--- a/test/tint/builtins/gen/literal/dot/ef6b1d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dot/ef6b1d.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%dot_ef6b1d = func():void -> %b2 {
-  %b2 = block {
+%dot_ef6b1d = func():void {
+  $B2: {
     %res:ptr<function, i32, read_write> = var, 4i
     %4:i32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %dot_ef6b1d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %dot_ef6b1d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %dot_ef6b1d
     ret
   }
diff --git a/test/tint/builtins/gen/literal/dot/f1312c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dot/f1312c.wgsl.expected.ir.msl
index 4fb3b12..7025b74 100644
--- a/test/tint/builtins/gen/literal/dot/f1312c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dot/f1312c.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%dot_f1312c = func():void -> %b2 {
-  %b2 = block {
+%dot_f1312c = func():void {
+  $B2: {
     %res:ptr<function, i32, read_write> = var, 3i
     %4:i32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %dot_f1312c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %dot_f1312c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %dot_f1312c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/dot/fc5f7c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dot/fc5f7c.wgsl.expected.ir.msl
index 89bad36..01a04f0 100644
--- a/test/tint/builtins/gen/literal/dot/fc5f7c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dot/fc5f7c.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%dot_fc5f7c = func():void -> %b2 {
-  %b2 = block {
+%dot_fc5f7c = func():void {
+  $B2: {
     %res:ptr<function, i32, read_write> = var, 2i
     %4:i32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %dot_fc5f7c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %dot_fc5f7c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %dot_fc5f7c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/dot4I8Packed/881e62.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dot4I8Packed/881e62.wgsl.expected.ir.msl
index 4fbcdec..945e756 100644
--- a/test/tint/builtins/gen/literal/dot4I8Packed/881e62.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dot4I8Packed/881e62.wgsl.expected.ir.msl
@@ -1,33 +1,32 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%dot4I8Packed_881e62 = func():void -> %b2 {
-  %b2 = block {
-    %3:i32 = dot4I8Packed 1u, 1u
-    %res:ptr<function, i32, read_write> = var, %3
-    %5:i32 = load %res
-    store %prevent_dce, %5
+%dot4I8Packed_881e62 = func():void {
+  $B2: {
+    %res:ptr<function, i32, read_write> = var, 1i
+    %4:i32 = load %res
+    store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %7:void = call %dot4I8Packed_881e62
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %dot4I8Packed_881e62
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %9:void = call %dot4I8Packed_881e62
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %dot4I8Packed_881e62
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %11:void = call %dot4I8Packed_881e62
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %dot4I8Packed_881e62
     ret
   }
 }
diff --git a/test/tint/builtins/gen/literal/dot4U8Packed/fbed7b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dot4U8Packed/fbed7b.wgsl.expected.ir.msl
index 2aa916f..204d5f9 100644
--- a/test/tint/builtins/gen/literal/dot4U8Packed/fbed7b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dot4U8Packed/fbed7b.wgsl.expected.ir.msl
@@ -1,33 +1,32 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%dot4U8Packed_fbed7b = func():void -> %b2 {
-  %b2 = block {
-    %3:u32 = dot4U8Packed 1u, 1u
-    %res:ptr<function, u32, read_write> = var, %3
-    %5:u32 = load %res
-    store %prevent_dce, %5
+%dot4U8Packed_fbed7b = func():void {
+  $B2: {
+    %res:ptr<function, u32, read_write> = var, 1u
+    %4:u32 = load %res
+    store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %7:void = call %dot4U8Packed_fbed7b
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %dot4U8Packed_fbed7b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %9:void = call %dot4U8Packed_fbed7b
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %dot4U8Packed_fbed7b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %11:void = call %dot4U8Packed_fbed7b
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %dot4U8Packed_fbed7b
     ret
   }
 }
diff --git a/test/tint/builtins/gen/literal/dpdx/0763f7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dpdx/0763f7.wgsl.expected.ir.msl
index 435f7e8..0ca863b 100644
--- a/test/tint/builtins/gen/literal/dpdx/0763f7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dpdx/0763f7.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%dpdx_0763f7 = func():void -> %b2 {
-  %b2 = block {
+%dpdx_0763f7 = func():void {
+  $B2: {
     %3:vec3<f32> = dpdx vec3<f32>(1.0f)
     %res:ptr<function, vec3<f32>, read_write> = var, %3
     %5:vec3<f32> = load %res
@@ -13,8 +13,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %7:void = call %dpdx_0763f7
     ret
   }
diff --git a/test/tint/builtins/gen/literal/dpdx/99edb1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dpdx/99edb1.wgsl.expected.ir.msl
index f7057e1..e0fba5d 100644
--- a/test/tint/builtins/gen/literal/dpdx/99edb1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dpdx/99edb1.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%dpdx_99edb1 = func():void -> %b2 {
-  %b2 = block {
+%dpdx_99edb1 = func():void {
+  $B2: {
     %3:vec2<f32> = dpdx vec2<f32>(1.0f)
     %res:ptr<function, vec2<f32>, read_write> = var, %3
     %5:vec2<f32> = load %res
@@ -13,8 +13,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %7:void = call %dpdx_99edb1
     ret
   }
diff --git a/test/tint/builtins/gen/literal/dpdx/c487fa.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dpdx/c487fa.wgsl.expected.ir.msl
index 8170fb6..9e269f9 100644
--- a/test/tint/builtins/gen/literal/dpdx/c487fa.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dpdx/c487fa.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%dpdx_c487fa = func():void -> %b2 {
-  %b2 = block {
+%dpdx_c487fa = func():void {
+  $B2: {
     %3:vec4<f32> = dpdx vec4<f32>(1.0f)
     %res:ptr<function, vec4<f32>, read_write> = var, %3
     %5:vec4<f32> = load %res
@@ -13,8 +13,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %7:void = call %dpdx_c487fa
     ret
   }
diff --git a/test/tint/builtins/gen/literal/dpdx/e263de.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dpdx/e263de.wgsl.expected.ir.msl
index 54e8540..a69f997 100644
--- a/test/tint/builtins/gen/literal/dpdx/e263de.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dpdx/e263de.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%dpdx_e263de = func():void -> %b2 {
-  %b2 = block {
+%dpdx_e263de = func():void {
+  $B2: {
     %3:f32 = dpdx 1.0f
     %res:ptr<function, f32, read_write> = var, %3
     %5:f32 = load %res
@@ -13,8 +13,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %7:void = call %dpdx_e263de
     ret
   }
diff --git a/test/tint/builtins/gen/literal/dpdxCoarse/029152.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dpdxCoarse/029152.wgsl.expected.ir.msl
index 002df99..8ba18ce 100644
--- a/test/tint/builtins/gen/literal/dpdxCoarse/029152.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dpdxCoarse/029152.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%dpdxCoarse_029152 = func():void -> %b2 {
-  %b2 = block {
+%dpdxCoarse_029152 = func():void {
+  $B2: {
     %3:f32 = dpdxCoarse 1.0f
     %res:ptr<function, f32, read_write> = var, %3
     %5:f32 = load %res
@@ -13,8 +13,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %7:void = call %dpdxCoarse_029152
     ret
   }
diff --git a/test/tint/builtins/gen/literal/dpdxCoarse/9581cf.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dpdxCoarse/9581cf.wgsl.expected.ir.msl
index 0b448aa..1be7290 100644
--- a/test/tint/builtins/gen/literal/dpdxCoarse/9581cf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dpdxCoarse/9581cf.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%dpdxCoarse_9581cf = func():void -> %b2 {
-  %b2 = block {
+%dpdxCoarse_9581cf = func():void {
+  $B2: {
     %3:vec2<f32> = dpdxCoarse vec2<f32>(1.0f)
     %res:ptr<function, vec2<f32>, read_write> = var, %3
     %5:vec2<f32> = load %res
@@ -13,8 +13,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %7:void = call %dpdxCoarse_9581cf
     ret
   }
diff --git a/test/tint/builtins/gen/literal/dpdxCoarse/c28641.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dpdxCoarse/c28641.wgsl.expected.ir.msl
index 7c66502..df5d6f1 100644
--- a/test/tint/builtins/gen/literal/dpdxCoarse/c28641.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dpdxCoarse/c28641.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%dpdxCoarse_c28641 = func():void -> %b2 {
-  %b2 = block {
+%dpdxCoarse_c28641 = func():void {
+  $B2: {
     %3:vec4<f32> = dpdxCoarse vec4<f32>(1.0f)
     %res:ptr<function, vec4<f32>, read_write> = var, %3
     %5:vec4<f32> = load %res
@@ -13,8 +13,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %7:void = call %dpdxCoarse_c28641
     ret
   }
diff --git a/test/tint/builtins/gen/literal/dpdxCoarse/f64d7b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dpdxCoarse/f64d7b.wgsl.expected.ir.msl
index 833067d..1a66f58 100644
--- a/test/tint/builtins/gen/literal/dpdxCoarse/f64d7b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dpdxCoarse/f64d7b.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%dpdxCoarse_f64d7b = func():void -> %b2 {
-  %b2 = block {
+%dpdxCoarse_f64d7b = func():void {
+  $B2: {
     %3:vec3<f32> = dpdxCoarse vec3<f32>(1.0f)
     %res:ptr<function, vec3<f32>, read_write> = var, %3
     %5:vec3<f32> = load %res
@@ -13,8 +13,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %7:void = call %dpdxCoarse_f64d7b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/dpdxFine/8c5069.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dpdxFine/8c5069.wgsl.expected.ir.msl
index 6c56e6e..e8c4db4 100644
--- a/test/tint/builtins/gen/literal/dpdxFine/8c5069.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dpdxFine/8c5069.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%dpdxFine_8c5069 = func():void -> %b2 {
-  %b2 = block {
+%dpdxFine_8c5069 = func():void {
+  $B2: {
     %3:vec4<f32> = dpdxFine vec4<f32>(1.0f)
     %res:ptr<function, vec4<f32>, read_write> = var, %3
     %5:vec4<f32> = load %res
@@ -13,8 +13,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %7:void = call %dpdxFine_8c5069
     ret
   }
diff --git a/test/tint/builtins/gen/literal/dpdxFine/9631de.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dpdxFine/9631de.wgsl.expected.ir.msl
index 4268feb..4df38c3 100644
--- a/test/tint/builtins/gen/literal/dpdxFine/9631de.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dpdxFine/9631de.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%dpdxFine_9631de = func():void -> %b2 {
-  %b2 = block {
+%dpdxFine_9631de = func():void {
+  $B2: {
     %3:vec2<f32> = dpdxFine vec2<f32>(1.0f)
     %res:ptr<function, vec2<f32>, read_write> = var, %3
     %5:vec2<f32> = load %res
@@ -13,8 +13,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %7:void = call %dpdxFine_9631de
     ret
   }
diff --git a/test/tint/builtins/gen/literal/dpdxFine/f401a2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dpdxFine/f401a2.wgsl.expected.ir.msl
index f90fa2b..5ba2362 100644
--- a/test/tint/builtins/gen/literal/dpdxFine/f401a2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dpdxFine/f401a2.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%dpdxFine_f401a2 = func():void -> %b2 {
-  %b2 = block {
+%dpdxFine_f401a2 = func():void {
+  $B2: {
     %3:f32 = dpdxFine 1.0f
     %res:ptr<function, f32, read_write> = var, %3
     %5:f32 = load %res
@@ -13,8 +13,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %7:void = call %dpdxFine_f401a2
     ret
   }
diff --git a/test/tint/builtins/gen/literal/dpdxFine/f92fb6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dpdxFine/f92fb6.wgsl.expected.ir.msl
index b478bbc..e47e06e 100644
--- a/test/tint/builtins/gen/literal/dpdxFine/f92fb6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dpdxFine/f92fb6.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%dpdxFine_f92fb6 = func():void -> %b2 {
-  %b2 = block {
+%dpdxFine_f92fb6 = func():void {
+  $B2: {
     %3:vec3<f32> = dpdxFine vec3<f32>(1.0f)
     %res:ptr<function, vec3<f32>, read_write> = var, %3
     %5:vec3<f32> = load %res
@@ -13,8 +13,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %7:void = call %dpdxFine_f92fb6
     ret
   }
diff --git a/test/tint/builtins/gen/literal/dpdy/699a05.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dpdy/699a05.wgsl.expected.ir.msl
index ffa5424..57691c8 100644
--- a/test/tint/builtins/gen/literal/dpdy/699a05.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dpdy/699a05.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%dpdy_699a05 = func():void -> %b2 {
-  %b2 = block {
+%dpdy_699a05 = func():void {
+  $B2: {
     %3:vec4<f32> = dpdy vec4<f32>(1.0f)
     %res:ptr<function, vec4<f32>, read_write> = var, %3
     %5:vec4<f32> = load %res
@@ -13,8 +13,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %7:void = call %dpdy_699a05
     ret
   }
diff --git a/test/tint/builtins/gen/literal/dpdy/7f8d84.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dpdy/7f8d84.wgsl.expected.ir.msl
index 4429a8b..da25646 100644
--- a/test/tint/builtins/gen/literal/dpdy/7f8d84.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dpdy/7f8d84.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%dpdy_7f8d84 = func():void -> %b2 {
-  %b2 = block {
+%dpdy_7f8d84 = func():void {
+  $B2: {
     %3:f32 = dpdy 1.0f
     %res:ptr<function, f32, read_write> = var, %3
     %5:f32 = load %res
@@ -13,8 +13,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %7:void = call %dpdy_7f8d84
     ret
   }
diff --git a/test/tint/builtins/gen/literal/dpdy/a8b56e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dpdy/a8b56e.wgsl.expected.ir.msl
index 5f73215..585d377 100644
--- a/test/tint/builtins/gen/literal/dpdy/a8b56e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dpdy/a8b56e.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%dpdy_a8b56e = func():void -> %b2 {
-  %b2 = block {
+%dpdy_a8b56e = func():void {
+  $B2: {
     %3:vec2<f32> = dpdy vec2<f32>(1.0f)
     %res:ptr<function, vec2<f32>, read_write> = var, %3
     %5:vec2<f32> = load %res
@@ -13,8 +13,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %7:void = call %dpdy_a8b56e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/dpdy/feb40f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dpdy/feb40f.wgsl.expected.ir.msl
index 343d507..d260d93 100644
--- a/test/tint/builtins/gen/literal/dpdy/feb40f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dpdy/feb40f.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%dpdy_feb40f = func():void -> %b2 {
-  %b2 = block {
+%dpdy_feb40f = func():void {
+  $B2: {
     %3:vec3<f32> = dpdy vec3<f32>(1.0f)
     %res:ptr<function, vec3<f32>, read_write> = var, %3
     %5:vec3<f32> = load %res
@@ -13,8 +13,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %7:void = call %dpdy_feb40f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/dpdyCoarse/3e1ab4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dpdyCoarse/3e1ab4.wgsl.expected.ir.msl
index 8a3212d..f9a4259 100644
--- a/test/tint/builtins/gen/literal/dpdyCoarse/3e1ab4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dpdyCoarse/3e1ab4.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%dpdyCoarse_3e1ab4 = func():void -> %b2 {
-  %b2 = block {
+%dpdyCoarse_3e1ab4 = func():void {
+  $B2: {
     %3:vec2<f32> = dpdyCoarse vec2<f32>(1.0f)
     %res:ptr<function, vec2<f32>, read_write> = var, %3
     %5:vec2<f32> = load %res
@@ -13,8 +13,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %7:void = call %dpdyCoarse_3e1ab4
     ret
   }
diff --git a/test/tint/builtins/gen/literal/dpdyCoarse/445d24.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dpdyCoarse/445d24.wgsl.expected.ir.msl
index 44c1511..9e6c52e 100644
--- a/test/tint/builtins/gen/literal/dpdyCoarse/445d24.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dpdyCoarse/445d24.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%dpdyCoarse_445d24 = func():void -> %b2 {
-  %b2 = block {
+%dpdyCoarse_445d24 = func():void {
+  $B2: {
     %3:vec4<f32> = dpdyCoarse vec4<f32>(1.0f)
     %res:ptr<function, vec4<f32>, read_write> = var, %3
     %5:vec4<f32> = load %res
@@ -13,8 +13,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %7:void = call %dpdyCoarse_445d24
     ret
   }
diff --git a/test/tint/builtins/gen/literal/dpdyCoarse/870a7e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dpdyCoarse/870a7e.wgsl.expected.ir.msl
index 238da22..583e7d8 100644
--- a/test/tint/builtins/gen/literal/dpdyCoarse/870a7e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dpdyCoarse/870a7e.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%dpdyCoarse_870a7e = func():void -> %b2 {
-  %b2 = block {
+%dpdyCoarse_870a7e = func():void {
+  $B2: {
     %3:f32 = dpdyCoarse 1.0f
     %res:ptr<function, f32, read_write> = var, %3
     %5:f32 = load %res
@@ -13,8 +13,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %7:void = call %dpdyCoarse_870a7e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/dpdyCoarse/ae1873.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dpdyCoarse/ae1873.wgsl.expected.ir.msl
index 3452a10..db85027 100644
--- a/test/tint/builtins/gen/literal/dpdyCoarse/ae1873.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dpdyCoarse/ae1873.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%dpdyCoarse_ae1873 = func():void -> %b2 {
-  %b2 = block {
+%dpdyCoarse_ae1873 = func():void {
+  $B2: {
     %3:vec3<f32> = dpdyCoarse vec3<f32>(1.0f)
     %res:ptr<function, vec3<f32>, read_write> = var, %3
     %5:vec3<f32> = load %res
@@ -13,8 +13,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %7:void = call %dpdyCoarse_ae1873
     ret
   }
diff --git a/test/tint/builtins/gen/literal/dpdyFine/1fb7ab.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dpdyFine/1fb7ab.wgsl.expected.ir.msl
index 94374d3..9104ee9 100644
--- a/test/tint/builtins/gen/literal/dpdyFine/1fb7ab.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dpdyFine/1fb7ab.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%dpdyFine_1fb7ab = func():void -> %b2 {
-  %b2 = block {
+%dpdyFine_1fb7ab = func():void {
+  $B2: {
     %3:vec3<f32> = dpdyFine vec3<f32>(1.0f)
     %res:ptr<function, vec3<f32>, read_write> = var, %3
     %5:vec3<f32> = load %res
@@ -13,8 +13,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %7:void = call %dpdyFine_1fb7ab
     ret
   }
diff --git a/test/tint/builtins/gen/literal/dpdyFine/6eb673.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dpdyFine/6eb673.wgsl.expected.ir.msl
index 2ecf3cb..95f7e27 100644
--- a/test/tint/builtins/gen/literal/dpdyFine/6eb673.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dpdyFine/6eb673.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%dpdyFine_6eb673 = func():void -> %b2 {
-  %b2 = block {
+%dpdyFine_6eb673 = func():void {
+  $B2: {
     %3:f32 = dpdyFine 1.0f
     %res:ptr<function, f32, read_write> = var, %3
     %5:f32 = load %res
@@ -13,8 +13,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %7:void = call %dpdyFine_6eb673
     ret
   }
diff --git a/test/tint/builtins/gen/literal/dpdyFine/d0a648.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dpdyFine/d0a648.wgsl.expected.ir.msl
index 3e62048..2bdcf10 100644
--- a/test/tint/builtins/gen/literal/dpdyFine/d0a648.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dpdyFine/d0a648.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%dpdyFine_d0a648 = func():void -> %b2 {
-  %b2 = block {
+%dpdyFine_d0a648 = func():void {
+  $B2: {
     %3:vec4<f32> = dpdyFine vec4<f32>(1.0f)
     %res:ptr<function, vec4<f32>, read_write> = var, %3
     %5:vec4<f32> = load %res
@@ -13,8 +13,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %7:void = call %dpdyFine_d0a648
     ret
   }
diff --git a/test/tint/builtins/gen/literal/dpdyFine/df33aa.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dpdyFine/df33aa.wgsl.expected.ir.msl
index fb4e547..2168616 100644
--- a/test/tint/builtins/gen/literal/dpdyFine/df33aa.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dpdyFine/df33aa.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%dpdyFine_df33aa = func():void -> %b2 {
-  %b2 = block {
+%dpdyFine_df33aa = func():void {
+  $B2: {
     %3:vec2<f32> = dpdyFine vec2<f32>(1.0f)
     %res:ptr<function, vec2<f32>, read_write> = var, %3
     %5:vec2<f32> = load %res
@@ -13,8 +13,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %7:void = call %dpdyFine_df33aa
     ret
   }
diff --git a/test/tint/builtins/gen/literal/exp/0f70eb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/exp/0f70eb.wgsl.expected.ir.msl
index 76618aa..c48dffe 100644
--- a/test/tint/builtins/gen/literal/exp/0f70eb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/exp/0f70eb.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%exp_0f70eb = func():void -> %b2 {
-  %b2 = block {
+%exp_0f70eb = func():void {
+  $B2: {
     %res:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(2.71828174591064453125f)
     %4:vec4<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %exp_0f70eb
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %exp_0f70eb
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %exp_0f70eb
     ret
   }
diff --git a/test/tint/builtins/gen/literal/exp/13806d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/exp/13806d.wgsl.expected.ir.msl
index 24a55e9..7136422 100644
--- a/test/tint/builtins/gen/literal/exp/13806d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/exp/13806d.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%exp_13806d = func():void -> %b2 {
-  %b2 = block {
+%exp_13806d = func():void {
+  $B2: {
     %res:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(2.716796875h)
     %4:vec3<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %exp_13806d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %exp_13806d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %exp_13806d
     ret
   }
diff --git a/test/tint/builtins/gen/literal/exp/1951e7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/exp/1951e7.wgsl.expected.ir.msl
index 31f58b6..bef8951 100644
--- a/test/tint/builtins/gen/literal/exp/1951e7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/exp/1951e7.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%exp_1951e7 = func():void -> %b2 {
-  %b2 = block {
+%exp_1951e7 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(2.71828174591064453125f)
     %4:vec2<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %exp_1951e7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %exp_1951e7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %exp_1951e7
     ret
   }
diff --git a/test/tint/builtins/gen/literal/exp/2e08e2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/exp/2e08e2.wgsl.expected.ir.msl
index 2cd37c3..66b76b1 100644
--- a/test/tint/builtins/gen/literal/exp/2e08e2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/exp/2e08e2.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%exp_2e08e2 = func():void -> %b2 {
-  %b2 = block {
+%exp_2e08e2 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(2.716796875h)
     %4:vec2<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %exp_2e08e2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %exp_2e08e2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %exp_2e08e2
     ret
   }
diff --git a/test/tint/builtins/gen/literal/exp/611a87.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/exp/611a87.wgsl.expected.ir.msl
index a78b525..d5f6e29 100644
--- a/test/tint/builtins/gen/literal/exp/611a87.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/exp/611a87.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%exp_611a87 = func():void -> %b2 {
-  %b2 = block {
+%exp_611a87 = func():void {
+  $B2: {
     %res:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(2.716796875h)
     %4:vec4<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %exp_611a87
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %exp_611a87
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %exp_611a87
     ret
   }
diff --git a/test/tint/builtins/gen/literal/exp/771fd2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/exp/771fd2.wgsl.expected.ir.msl
index c7ee764..308e004 100644
--- a/test/tint/builtins/gen/literal/exp/771fd2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/exp/771fd2.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%exp_771fd2 = func():void -> %b2 {
-  %b2 = block {
+%exp_771fd2 = func():void {
+  $B2: {
     %res:ptr<function, f32, read_write> = var, 2.71828174591064453125f
     %4:f32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %exp_771fd2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %exp_771fd2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %exp_771fd2
     ret
   }
diff --git a/test/tint/builtins/gen/literal/exp/c18fe9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/exp/c18fe9.wgsl.expected.ir.msl
index e991d01..f5e4681 100644
--- a/test/tint/builtins/gen/literal/exp/c18fe9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/exp/c18fe9.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%exp_c18fe9 = func():void -> %b2 {
-  %b2 = block {
+%exp_c18fe9 = func():void {
+  $B2: {
     %res:ptr<function, f16, read_write> = var, 2.716796875h
     %4:f16 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %exp_c18fe9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %exp_c18fe9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %exp_c18fe9
     ret
   }
diff --git a/test/tint/builtins/gen/literal/exp/d98450.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/exp/d98450.wgsl.expected.ir.msl
index ce37f9b..850641c 100644
--- a/test/tint/builtins/gen/literal/exp/d98450.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/exp/d98450.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%exp_d98450 = func():void -> %b2 {
-  %b2 = block {
+%exp_d98450 = func():void {
+  $B2: {
     %res:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(2.71828174591064453125f)
     %4:vec3<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %exp_d98450
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %exp_d98450
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %exp_d98450
     ret
   }
diff --git a/test/tint/builtins/gen/literal/exp2/151a4c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/exp2/151a4c.wgsl.expected.ir.msl
index 0de8be5..adab754 100644
--- a/test/tint/builtins/gen/literal/exp2/151a4c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/exp2/151a4c.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%exp2_151a4c = func():void -> %b2 {
-  %b2 = block {
+%exp2_151a4c = func():void {
+  $B2: {
     %res:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(2.0h)
     %4:vec2<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %exp2_151a4c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %exp2_151a4c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %exp2_151a4c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/exp2/1f8680.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/exp2/1f8680.wgsl.expected.ir.msl
index 4f9872a..c3304fb 100644
--- a/test/tint/builtins/gen/literal/exp2/1f8680.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/exp2/1f8680.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%exp2_1f8680 = func():void -> %b2 {
-  %b2 = block {
+%exp2_1f8680 = func():void {
+  $B2: {
     %res:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(2.0f)
     %4:vec3<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %exp2_1f8680
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %exp2_1f8680
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %exp2_1f8680
     ret
   }
diff --git a/test/tint/builtins/gen/literal/exp2/751377.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/exp2/751377.wgsl.expected.ir.msl
index b763fdd..a5ba82f 100644
--- a/test/tint/builtins/gen/literal/exp2/751377.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/exp2/751377.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%exp2_751377 = func():void -> %b2 {
-  %b2 = block {
+%exp2_751377 = func():void {
+  $B2: {
     %res:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(2.0h)
     %4:vec3<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %exp2_751377
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %exp2_751377
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %exp2_751377
     ret
   }
diff --git a/test/tint/builtins/gen/literal/exp2/a9d0a7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/exp2/a9d0a7.wgsl.expected.ir.msl
index c9e5abc..2545ae5 100644
--- a/test/tint/builtins/gen/literal/exp2/a9d0a7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/exp2/a9d0a7.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%exp2_a9d0a7 = func():void -> %b2 {
-  %b2 = block {
+%exp2_a9d0a7 = func():void {
+  $B2: {
     %res:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(2.0f)
     %4:vec4<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %exp2_a9d0a7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %exp2_a9d0a7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %exp2_a9d0a7
     ret
   }
diff --git a/test/tint/builtins/gen/literal/exp2/b408e4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/exp2/b408e4.wgsl.expected.ir.msl
index eee2702..7792ed1 100644
--- a/test/tint/builtins/gen/literal/exp2/b408e4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/exp2/b408e4.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%exp2_b408e4 = func():void -> %b2 {
-  %b2 = block {
+%exp2_b408e4 = func():void {
+  $B2: {
     %res:ptr<function, f16, read_write> = var, 2.0h
     %4:f16 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %exp2_b408e4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %exp2_b408e4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %exp2_b408e4
     ret
   }
diff --git a/test/tint/builtins/gen/literal/exp2/d6777c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/exp2/d6777c.wgsl.expected.ir.msl
index 1ea6cf1..43a70cf 100644
--- a/test/tint/builtins/gen/literal/exp2/d6777c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/exp2/d6777c.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%exp2_d6777c = func():void -> %b2 {
-  %b2 = block {
+%exp2_d6777c = func():void {
+  $B2: {
     %res:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(2.0f)
     %4:vec2<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %exp2_d6777c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %exp2_d6777c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %exp2_d6777c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/exp2/dea523.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/exp2/dea523.wgsl.expected.ir.msl
index 514c2fe..f45114c 100644
--- a/test/tint/builtins/gen/literal/exp2/dea523.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/exp2/dea523.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%exp2_dea523 = func():void -> %b2 {
-  %b2 = block {
+%exp2_dea523 = func():void {
+  $B2: {
     %res:ptr<function, f32, read_write> = var, 2.0f
     %4:f32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %exp2_dea523
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %exp2_dea523
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %exp2_dea523
     ret
   }
diff --git a/test/tint/builtins/gen/literal/exp2/ffa827.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/exp2/ffa827.wgsl.expected.ir.msl
index 58f4aa8..3b25fc4 100644
--- a/test/tint/builtins/gen/literal/exp2/ffa827.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/exp2/ffa827.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%exp2_ffa827 = func():void -> %b2 {
-  %b2 = block {
+%exp2_ffa827 = func():void {
+  $B2: {
     %res:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(2.0h)
     %4:vec4<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %exp2_ffa827
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %exp2_ffa827
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %exp2_ffa827
     ret
   }
diff --git a/test/tint/builtins/gen/literal/extractBits/12b197.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/extractBits/12b197.wgsl.expected.ir.msl
index f92af1e..be9003a 100644
--- a/test/tint/builtins/gen/literal/extractBits/12b197.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/extractBits/12b197.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%extractBits_12b197 = func():void -> %b2 {
-  %b2 = block {
+%extractBits_12b197 = func():void {
+  $B2: {
     %res:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(0u)
     %4:vec3<u32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %extractBits_12b197
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %extractBits_12b197
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %extractBits_12b197
     ret
   }
diff --git a/test/tint/builtins/gen/literal/extractBits/249874.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/extractBits/249874.wgsl.expected.ir.msl
index a7c9afd..cd8aeff 100644
--- a/test/tint/builtins/gen/literal/extractBits/249874.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/extractBits/249874.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%extractBits_249874 = func():void -> %b2 {
-  %b2 = block {
+%extractBits_249874 = func():void {
+  $B2: {
     %res:ptr<function, i32, read_write> = var, 0i
     %4:i32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %extractBits_249874
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %extractBits_249874
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %extractBits_249874
     ret
   }
diff --git a/test/tint/builtins/gen/literal/extractBits/631377.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/extractBits/631377.wgsl.expected.ir.msl
index 6d8cd43..74087c6 100644
--- a/test/tint/builtins/gen/literal/extractBits/631377.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/extractBits/631377.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%extractBits_631377 = func():void -> %b2 {
-  %b2 = block {
+%extractBits_631377 = func():void {
+  $B2: {
     %res:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(0u)
     %4:vec4<u32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %extractBits_631377
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %extractBits_631377
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %extractBits_631377
     ret
   }
diff --git a/test/tint/builtins/gen/literal/extractBits/a99a8d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/extractBits/a99a8d.wgsl.expected.ir.msl
index 3dd7573..059bba4 100644
--- a/test/tint/builtins/gen/literal/extractBits/a99a8d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/extractBits/a99a8d.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%extractBits_a99a8d = func():void -> %b2 {
-  %b2 = block {
+%extractBits_a99a8d = func():void {
+  $B2: {
     %res:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(0i)
     %4:vec2<i32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %extractBits_a99a8d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %extractBits_a99a8d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %extractBits_a99a8d
     ret
   }
diff --git a/test/tint/builtins/gen/literal/extractBits/ce81f8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/extractBits/ce81f8.wgsl.expected.ir.msl
index 32faea1..6e7a578 100644
--- a/test/tint/builtins/gen/literal/extractBits/ce81f8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/extractBits/ce81f8.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%extractBits_ce81f8 = func():void -> %b2 {
-  %b2 = block {
+%extractBits_ce81f8 = func():void {
+  $B2: {
     %res:ptr<function, u32, read_write> = var, 0u
     %4:u32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %extractBits_ce81f8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %extractBits_ce81f8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %extractBits_ce81f8
     ret
   }
diff --git a/test/tint/builtins/gen/literal/extractBits/e04f5d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/extractBits/e04f5d.wgsl.expected.ir.msl
index e6d2d5f..7d86250 100644
--- a/test/tint/builtins/gen/literal/extractBits/e04f5d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/extractBits/e04f5d.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%extractBits_e04f5d = func():void -> %b2 {
-  %b2 = block {
+%extractBits_e04f5d = func():void {
+  $B2: {
     %res:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(0i)
     %4:vec3<i32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %extractBits_e04f5d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %extractBits_e04f5d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %extractBits_e04f5d
     ret
   }
diff --git a/test/tint/builtins/gen/literal/extractBits/f28f69.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/extractBits/f28f69.wgsl.expected.ir.msl
index 785f5db..9e762ec 100644
--- a/test/tint/builtins/gen/literal/extractBits/f28f69.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/extractBits/f28f69.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%extractBits_f28f69 = func():void -> %b2 {
-  %b2 = block {
+%extractBits_f28f69 = func():void {
+  $B2: {
     %res:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(0u)
     %4:vec2<u32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %extractBits_f28f69
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %extractBits_f28f69
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %extractBits_f28f69
     ret
   }
diff --git a/test/tint/builtins/gen/literal/extractBits/fb850f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/extractBits/fb850f.wgsl.expected.ir.msl
index df642b2..70c6950 100644
--- a/test/tint/builtins/gen/literal/extractBits/fb850f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/extractBits/fb850f.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%extractBits_fb850f = func():void -> %b2 {
-  %b2 = block {
+%extractBits_fb850f = func():void {
+  $B2: {
     %res:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(0i)
     %4:vec4<i32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %extractBits_fb850f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %extractBits_fb850f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %extractBits_fb850f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/faceForward/524986.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/faceForward/524986.wgsl.expected.ir.msl
index 85a82b2..b5b3f78 100644
--- a/test/tint/builtins/gen/literal/faceForward/524986.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/faceForward/524986.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%faceForward_524986 = func():void -> %b2 {
-  %b2 = block {
+%faceForward_524986 = func():void {
+  $B2: {
     %res:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(-1.0h)
     %4:vec3<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %faceForward_524986
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %faceForward_524986
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %faceForward_524986
     ret
   }
diff --git a/test/tint/builtins/gen/literal/faceForward/5afbd5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/faceForward/5afbd5.wgsl.expected.ir.msl
index 3584ed8..7d7d764 100644
--- a/test/tint/builtins/gen/literal/faceForward/5afbd5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/faceForward/5afbd5.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%faceForward_5afbd5 = func():void -> %b2 {
-  %b2 = block {
+%faceForward_5afbd5 = func():void {
+  $B2: {
     %res:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(-1.0f)
     %4:vec3<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %faceForward_5afbd5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %faceForward_5afbd5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %faceForward_5afbd5
     ret
   }
diff --git a/test/tint/builtins/gen/literal/faceForward/b316e5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/faceForward/b316e5.wgsl.expected.ir.msl
index 44088b4..c1758bd 100644
--- a/test/tint/builtins/gen/literal/faceForward/b316e5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/faceForward/b316e5.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%faceForward_b316e5 = func():void -> %b2 {
-  %b2 = block {
+%faceForward_b316e5 = func():void {
+  $B2: {
     %res:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(-1.0f)
     %4:vec4<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %faceForward_b316e5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %faceForward_b316e5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %faceForward_b316e5
     ret
   }
diff --git a/test/tint/builtins/gen/literal/faceForward/cc63dc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/faceForward/cc63dc.wgsl.expected.ir.msl
index 61fc4e1..d939e63 100644
--- a/test/tint/builtins/gen/literal/faceForward/cc63dc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/faceForward/cc63dc.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%faceForward_cc63dc = func():void -> %b2 {
-  %b2 = block {
+%faceForward_cc63dc = func():void {
+  $B2: {
     %res:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(-1.0h)
     %4:vec4<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %faceForward_cc63dc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %faceForward_cc63dc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %faceForward_cc63dc
     ret
   }
diff --git a/test/tint/builtins/gen/literal/faceForward/e6908b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/faceForward/e6908b.wgsl.expected.ir.msl
index ddc0d0f..59437ce 100644
--- a/test/tint/builtins/gen/literal/faceForward/e6908b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/faceForward/e6908b.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%faceForward_e6908b = func():void -> %b2 {
-  %b2 = block {
+%faceForward_e6908b = func():void {
+  $B2: {
     %res:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(-1.0f)
     %4:vec2<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %faceForward_e6908b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %faceForward_e6908b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %faceForward_e6908b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/faceForward/fb0f2e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/faceForward/fb0f2e.wgsl.expected.ir.msl
index 09baf19b..8b1f872 100644
--- a/test/tint/builtins/gen/literal/faceForward/fb0f2e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/faceForward/fb0f2e.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%faceForward_fb0f2e = func():void -> %b2 {
-  %b2 = block {
+%faceForward_fb0f2e = func():void {
+  $B2: {
     %res:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(-1.0h)
     %4:vec2<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %faceForward_fb0f2e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %faceForward_fb0f2e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %faceForward_fb0f2e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/firstLeadingBit/000ff3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/firstLeadingBit/000ff3.wgsl.expected.ir.msl
index eb9ca18..a0d6a48 100644
--- a/test/tint/builtins/gen/literal/firstLeadingBit/000ff3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/firstLeadingBit/000ff3.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%firstLeadingBit_000ff3 = func():void -> %b2 {
-  %b2 = block {
+%firstLeadingBit_000ff3 = func():void {
+  $B2: {
     %res:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(0u)
     %4:vec4<u32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %firstLeadingBit_000ff3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %firstLeadingBit_000ff3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %firstLeadingBit_000ff3
     ret
   }
diff --git a/test/tint/builtins/gen/literal/firstLeadingBit/35053e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/firstLeadingBit/35053e.wgsl.expected.ir.msl
index 6758fa4..ae0b854 100644
--- a/test/tint/builtins/gen/literal/firstLeadingBit/35053e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/firstLeadingBit/35053e.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%firstLeadingBit_35053e = func():void -> %b2 {
-  %b2 = block {
+%firstLeadingBit_35053e = func():void {
+  $B2: {
     %res:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(0i)
     %4:vec3<i32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %firstLeadingBit_35053e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %firstLeadingBit_35053e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %firstLeadingBit_35053e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/firstLeadingBit/3fd7d0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/firstLeadingBit/3fd7d0.wgsl.expected.ir.msl
index 8496591..9e5c0d4 100644
--- a/test/tint/builtins/gen/literal/firstLeadingBit/3fd7d0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/firstLeadingBit/3fd7d0.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%firstLeadingBit_3fd7d0 = func():void -> %b2 {
-  %b2 = block {
+%firstLeadingBit_3fd7d0 = func():void {
+  $B2: {
     %res:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(0u)
     %4:vec3<u32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %firstLeadingBit_3fd7d0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %firstLeadingBit_3fd7d0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %firstLeadingBit_3fd7d0
     ret
   }
diff --git a/test/tint/builtins/gen/literal/firstLeadingBit/57a1a3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/firstLeadingBit/57a1a3.wgsl.expected.ir.msl
index 3bbeea1..193ac55 100644
--- a/test/tint/builtins/gen/literal/firstLeadingBit/57a1a3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/firstLeadingBit/57a1a3.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%firstLeadingBit_57a1a3 = func():void -> %b2 {
-  %b2 = block {
+%firstLeadingBit_57a1a3 = func():void {
+  $B2: {
     %res:ptr<function, i32, read_write> = var, 0i
     %4:i32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %firstLeadingBit_57a1a3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %firstLeadingBit_57a1a3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %firstLeadingBit_57a1a3
     ret
   }
diff --git a/test/tint/builtins/gen/literal/firstLeadingBit/6fe804.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/firstLeadingBit/6fe804.wgsl.expected.ir.msl
index 3c21736..fb4f38a 100644
--- a/test/tint/builtins/gen/literal/firstLeadingBit/6fe804.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/firstLeadingBit/6fe804.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%firstLeadingBit_6fe804 = func():void -> %b2 {
-  %b2 = block {
+%firstLeadingBit_6fe804 = func():void {
+  $B2: {
     %res:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(0u)
     %4:vec2<u32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %firstLeadingBit_6fe804
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %firstLeadingBit_6fe804
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %firstLeadingBit_6fe804
     ret
   }
diff --git a/test/tint/builtins/gen/literal/firstLeadingBit/a622c2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/firstLeadingBit/a622c2.wgsl.expected.ir.msl
index 6df47bd..c599954 100644
--- a/test/tint/builtins/gen/literal/firstLeadingBit/a622c2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/firstLeadingBit/a622c2.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%firstLeadingBit_a622c2 = func():void -> %b2 {
-  %b2 = block {
+%firstLeadingBit_a622c2 = func():void {
+  $B2: {
     %res:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(0i)
     %4:vec2<i32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %firstLeadingBit_a622c2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %firstLeadingBit_a622c2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %firstLeadingBit_a622c2
     ret
   }
diff --git a/test/tint/builtins/gen/literal/firstLeadingBit/c1f940.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/firstLeadingBit/c1f940.wgsl.expected.ir.msl
index 9fadcb5..cb0d41f 100644
--- a/test/tint/builtins/gen/literal/firstLeadingBit/c1f940.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/firstLeadingBit/c1f940.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%firstLeadingBit_c1f940 = func():void -> %b2 {
-  %b2 = block {
+%firstLeadingBit_c1f940 = func():void {
+  $B2: {
     %res:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(0i)
     %4:vec4<i32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %firstLeadingBit_c1f940
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %firstLeadingBit_c1f940
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %firstLeadingBit_c1f940
     ret
   }
diff --git a/test/tint/builtins/gen/literal/firstLeadingBit/f0779d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/firstLeadingBit/f0779d.wgsl.expected.ir.msl
index 79300e6..951f937 100644
--- a/test/tint/builtins/gen/literal/firstLeadingBit/f0779d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/firstLeadingBit/f0779d.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%firstLeadingBit_f0779d = func():void -> %b2 {
-  %b2 = block {
+%firstLeadingBit_f0779d = func():void {
+  $B2: {
     %res:ptr<function, u32, read_write> = var, 0u
     %4:u32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %firstLeadingBit_f0779d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %firstLeadingBit_f0779d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %firstLeadingBit_f0779d
     ret
   }
diff --git a/test/tint/builtins/gen/literal/firstTrailingBit/110f2c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/firstTrailingBit/110f2c.wgsl.expected.ir.msl
index 46d9dee..a496192 100644
--- a/test/tint/builtins/gen/literal/firstTrailingBit/110f2c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/firstTrailingBit/110f2c.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%firstTrailingBit_110f2c = func():void -> %b2 {
-  %b2 = block {
+%firstTrailingBit_110f2c = func():void {
+  $B2: {
     %res:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(0u)
     %4:vec4<u32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %firstTrailingBit_110f2c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %firstTrailingBit_110f2c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %firstTrailingBit_110f2c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/firstTrailingBit/3a2acc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/firstTrailingBit/3a2acc.wgsl.expected.ir.msl
index a0883d8..9d70845 100644
--- a/test/tint/builtins/gen/literal/firstTrailingBit/3a2acc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/firstTrailingBit/3a2acc.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%firstTrailingBit_3a2acc = func():void -> %b2 {
-  %b2 = block {
+%firstTrailingBit_3a2acc = func():void {
+  $B2: {
     %res:ptr<function, i32, read_write> = var, 0i
     %4:i32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %firstTrailingBit_3a2acc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %firstTrailingBit_3a2acc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %firstTrailingBit_3a2acc
     ret
   }
diff --git a/test/tint/builtins/gen/literal/firstTrailingBit/45eb10.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/firstTrailingBit/45eb10.wgsl.expected.ir.msl
index dc0b5b1..84eed01 100644
--- a/test/tint/builtins/gen/literal/firstTrailingBit/45eb10.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/firstTrailingBit/45eb10.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%firstTrailingBit_45eb10 = func():void -> %b2 {
-  %b2 = block {
+%firstTrailingBit_45eb10 = func():void {
+  $B2: {
     %res:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(0u)
     %4:vec2<u32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %firstTrailingBit_45eb10
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %firstTrailingBit_45eb10
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %firstTrailingBit_45eb10
     ret
   }
diff --git a/test/tint/builtins/gen/literal/firstTrailingBit/47d475.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/firstTrailingBit/47d475.wgsl.expected.ir.msl
index 30a1f89..1079c6d 100644
--- a/test/tint/builtins/gen/literal/firstTrailingBit/47d475.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/firstTrailingBit/47d475.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%firstTrailingBit_47d475 = func():void -> %b2 {
-  %b2 = block {
+%firstTrailingBit_47d475 = func():void {
+  $B2: {
     %res:ptr<function, u32, read_write> = var, 0u
     %4:u32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %firstTrailingBit_47d475
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %firstTrailingBit_47d475
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %firstTrailingBit_47d475
     ret
   }
diff --git a/test/tint/builtins/gen/literal/firstTrailingBit/50c072.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/firstTrailingBit/50c072.wgsl.expected.ir.msl
index fe7c87c..054aa7a 100644
--- a/test/tint/builtins/gen/literal/firstTrailingBit/50c072.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/firstTrailingBit/50c072.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%firstTrailingBit_50c072 = func():void -> %b2 {
-  %b2 = block {
+%firstTrailingBit_50c072 = func():void {
+  $B2: {
     %res:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(0i)
     %4:vec2<i32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %firstTrailingBit_50c072
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %firstTrailingBit_50c072
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %firstTrailingBit_50c072
     ret
   }
diff --git a/test/tint/builtins/gen/literal/firstTrailingBit/7496d6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/firstTrailingBit/7496d6.wgsl.expected.ir.msl
index 1ffcd06..c7d6003 100644
--- a/test/tint/builtins/gen/literal/firstTrailingBit/7496d6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/firstTrailingBit/7496d6.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%firstTrailingBit_7496d6 = func():void -> %b2 {
-  %b2 = block {
+%firstTrailingBit_7496d6 = func():void {
+  $B2: {
     %res:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(0i)
     %4:vec3<i32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %firstTrailingBit_7496d6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %firstTrailingBit_7496d6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %firstTrailingBit_7496d6
     ret
   }
diff --git a/test/tint/builtins/gen/literal/firstTrailingBit/86551b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/firstTrailingBit/86551b.wgsl.expected.ir.msl
index e6eca62..2a49bf3 100644
--- a/test/tint/builtins/gen/literal/firstTrailingBit/86551b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/firstTrailingBit/86551b.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%firstTrailingBit_86551b = func():void -> %b2 {
-  %b2 = block {
+%firstTrailingBit_86551b = func():void {
+  $B2: {
     %res:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(0i)
     %4:vec4<i32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %firstTrailingBit_86551b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %firstTrailingBit_86551b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %firstTrailingBit_86551b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/firstTrailingBit/cb51ce.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/firstTrailingBit/cb51ce.wgsl.expected.ir.msl
index abd787f..c1c5b95 100644
--- a/test/tint/builtins/gen/literal/firstTrailingBit/cb51ce.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/firstTrailingBit/cb51ce.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%firstTrailingBit_cb51ce = func():void -> %b2 {
-  %b2 = block {
+%firstTrailingBit_cb51ce = func():void {
+  $B2: {
     %res:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(0u)
     %4:vec3<u32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %firstTrailingBit_cb51ce
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %firstTrailingBit_cb51ce
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %firstTrailingBit_cb51ce
     ret
   }
diff --git a/test/tint/builtins/gen/literal/floor/3802c0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/floor/3802c0.wgsl.expected.ir.msl
index 3039bce..174b69f 100644
--- a/test/tint/builtins/gen/literal/floor/3802c0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/floor/3802c0.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%floor_3802c0 = func():void -> %b2 {
-  %b2 = block {
+%floor_3802c0 = func():void {
+  $B2: {
     %res:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %4:vec3<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %floor_3802c0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %floor_3802c0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %floor_3802c0
     ret
   }
diff --git a/test/tint/builtins/gen/literal/floor/3bccc4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/floor/3bccc4.wgsl.expected.ir.msl
index 708ab93..1d558d0 100644
--- a/test/tint/builtins/gen/literal/floor/3bccc4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/floor/3bccc4.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%floor_3bccc4 = func():void -> %b2 {
-  %b2 = block {
+%floor_3bccc4 = func():void {
+  $B2: {
     %res:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %4:vec4<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %floor_3bccc4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %floor_3bccc4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %floor_3bccc4
     ret
   }
diff --git a/test/tint/builtins/gen/literal/floor/5fc9ac.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/floor/5fc9ac.wgsl.expected.ir.msl
index ee4b0d4..6c726ec 100644
--- a/test/tint/builtins/gen/literal/floor/5fc9ac.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/floor/5fc9ac.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%floor_5fc9ac = func():void -> %b2 {
-  %b2 = block {
+%floor_5fc9ac = func():void {
+  $B2: {
     %res:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %4:vec2<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %floor_5fc9ac
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %floor_5fc9ac
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %floor_5fc9ac
     ret
   }
diff --git a/test/tint/builtins/gen/literal/floor/60d7ea.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/floor/60d7ea.wgsl.expected.ir.msl
index 7734906..9dc18bc 100644
--- a/test/tint/builtins/gen/literal/floor/60d7ea.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/floor/60d7ea.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%floor_60d7ea = func():void -> %b2 {
-  %b2 = block {
+%floor_60d7ea = func():void {
+  $B2: {
     %res:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %4:vec3<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %floor_60d7ea
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %floor_60d7ea
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %floor_60d7ea
     ret
   }
diff --git a/test/tint/builtins/gen/literal/floor/66f154.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/floor/66f154.wgsl.expected.ir.msl
index d2aabed..d55980a 100644
--- a/test/tint/builtins/gen/literal/floor/66f154.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/floor/66f154.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%floor_66f154 = func():void -> %b2 {
-  %b2 = block {
+%floor_66f154 = func():void {
+  $B2: {
     %res:ptr<function, f32, read_write> = var, 1.0f
     %4:f32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %floor_66f154
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %floor_66f154
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %floor_66f154
     ret
   }
diff --git a/test/tint/builtins/gen/literal/floor/84658c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/floor/84658c.wgsl.expected.ir.msl
index c452479..abef59d 100644
--- a/test/tint/builtins/gen/literal/floor/84658c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/floor/84658c.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%floor_84658c = func():void -> %b2 {
-  %b2 = block {
+%floor_84658c = func():void {
+  $B2: {
     %res:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %4:vec2<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %floor_84658c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %floor_84658c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %floor_84658c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/floor/a2d31b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/floor/a2d31b.wgsl.expected.ir.msl
index 4cc49b3..1c58233 100644
--- a/test/tint/builtins/gen/literal/floor/a2d31b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/floor/a2d31b.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%floor_a2d31b = func():void -> %b2 {
-  %b2 = block {
+%floor_a2d31b = func():void {
+  $B2: {
     %res:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %4:vec4<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %floor_a2d31b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %floor_a2d31b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %floor_a2d31b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/floor/b6e09c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/floor/b6e09c.wgsl.expected.ir.msl
index b0d099a..0820954 100644
--- a/test/tint/builtins/gen/literal/floor/b6e09c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/floor/b6e09c.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%floor_b6e09c = func():void -> %b2 {
-  %b2 = block {
+%floor_b6e09c = func():void {
+  $B2: {
     %res:ptr<function, f16, read_write> = var, 1.0h
     %4:f16 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %floor_b6e09c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %floor_b6e09c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %floor_b6e09c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/fma/26a7a9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fma/26a7a9.wgsl.expected.ir.msl
index 28266e8..63df411 100644
--- a/test/tint/builtins/gen/literal/fma/26a7a9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fma/26a7a9.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%fma_26a7a9 = func():void -> %b2 {
-  %b2 = block {
+%fma_26a7a9 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(2.0f)
     %4:vec2<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %fma_26a7a9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %fma_26a7a9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %fma_26a7a9
     ret
   }
diff --git a/test/tint/builtins/gen/literal/fma/6a3283.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fma/6a3283.wgsl.expected.ir.msl
index 61fa6fb..9c9d0ac 100644
--- a/test/tint/builtins/gen/literal/fma/6a3283.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fma/6a3283.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%fma_6a3283 = func():void -> %b2 {
-  %b2 = block {
+%fma_6a3283 = func():void {
+  $B2: {
     %res:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(2.0f)
     %4:vec4<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %fma_6a3283
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %fma_6a3283
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %fma_6a3283
     ret
   }
diff --git a/test/tint/builtins/gen/literal/fma/ab7818.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fma/ab7818.wgsl.expected.ir.msl
index a139194..330ef62 100644
--- a/test/tint/builtins/gen/literal/fma/ab7818.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fma/ab7818.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%fma_ab7818 = func():void -> %b2 {
-  %b2 = block {
+%fma_ab7818 = func():void {
+  $B2: {
     %res:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(2.0h)
     %4:vec4<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %fma_ab7818
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %fma_ab7818
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %fma_ab7818
     ret
   }
diff --git a/test/tint/builtins/gen/literal/fma/bf21b6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fma/bf21b6.wgsl.expected.ir.msl
index 1e2e476..3116777 100644
--- a/test/tint/builtins/gen/literal/fma/bf21b6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fma/bf21b6.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%fma_bf21b6 = func():void -> %b2 {
-  %b2 = block {
+%fma_bf21b6 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(2.0h)
     %4:vec2<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %fma_bf21b6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %fma_bf21b6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %fma_bf21b6
     ret
   }
diff --git a/test/tint/builtins/gen/literal/fma/c10ba3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fma/c10ba3.wgsl.expected.ir.msl
index b952784..b35d864 100644
--- a/test/tint/builtins/gen/literal/fma/c10ba3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fma/c10ba3.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%fma_c10ba3 = func():void -> %b2 {
-  %b2 = block {
+%fma_c10ba3 = func():void {
+  $B2: {
     %res:ptr<function, f32, read_write> = var, 2.0f
     %4:f32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %fma_c10ba3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %fma_c10ba3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %fma_c10ba3
     ret
   }
diff --git a/test/tint/builtins/gen/literal/fma/c8abb3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fma/c8abb3.wgsl.expected.ir.msl
index 3f809fc..bf615e1 100644
--- a/test/tint/builtins/gen/literal/fma/c8abb3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fma/c8abb3.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%fma_c8abb3 = func():void -> %b2 {
-  %b2 = block {
+%fma_c8abb3 = func():void {
+  $B2: {
     %res:ptr<function, f16, read_write> = var, 2.0h
     %4:f16 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %fma_c8abb3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %fma_c8abb3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %fma_c8abb3
     ret
   }
diff --git a/test/tint/builtins/gen/literal/fma/e17c5c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fma/e17c5c.wgsl.expected.ir.msl
index 7c39d15..4518ada 100644
--- a/test/tint/builtins/gen/literal/fma/e17c5c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fma/e17c5c.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%fma_e17c5c = func():void -> %b2 {
-  %b2 = block {
+%fma_e17c5c = func():void {
+  $B2: {
     %res:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(2.0f)
     %4:vec3<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %fma_e17c5c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %fma_e17c5c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %fma_e17c5c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/fma/e7abdc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fma/e7abdc.wgsl.expected.ir.msl
index f3e7e5f..df14fac 100644
--- a/test/tint/builtins/gen/literal/fma/e7abdc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fma/e7abdc.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%fma_e7abdc = func():void -> %b2 {
-  %b2 = block {
+%fma_e7abdc = func():void {
+  $B2: {
     %res:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(2.0h)
     %4:vec3<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %fma_e7abdc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %fma_e7abdc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %fma_e7abdc
     ret
   }
diff --git a/test/tint/builtins/gen/literal/fract/181aa9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fract/181aa9.wgsl.expected.ir.msl
index 22248ea..5837693 100644
--- a/test/tint/builtins/gen/literal/fract/181aa9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fract/181aa9.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%fract_181aa9 = func():void -> %b2 {
-  %b2 = block {
+%fract_181aa9 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(0.25h)
     %4:vec2<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %fract_181aa9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %fract_181aa9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %fract_181aa9
     ret
   }
diff --git a/test/tint/builtins/gen/literal/fract/498c77.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fract/498c77.wgsl.expected.ir.msl
index 9a7fc17..ad81009 100644
--- a/test/tint/builtins/gen/literal/fract/498c77.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fract/498c77.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%fract_498c77 = func():void -> %b2 {
-  %b2 = block {
+%fract_498c77 = func():void {
+  $B2: {
     %res:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(0.25h)
     %4:vec4<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %fract_498c77
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %fract_498c77
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %fract_498c77
     ret
   }
diff --git a/test/tint/builtins/gen/literal/fract/8bc1e9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fract/8bc1e9.wgsl.expected.ir.msl
index 8c34a04..441c5cb 100644
--- a/test/tint/builtins/gen/literal/fract/8bc1e9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fract/8bc1e9.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%fract_8bc1e9 = func():void -> %b2 {
-  %b2 = block {
+%fract_8bc1e9 = func():void {
+  $B2: {
     %res:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(0.25f)
     %4:vec4<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %fract_8bc1e9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %fract_8bc1e9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %fract_8bc1e9
     ret
   }
diff --git a/test/tint/builtins/gen/literal/fract/943cb1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fract/943cb1.wgsl.expected.ir.msl
index fa63193..503882d 100644
--- a/test/tint/builtins/gen/literal/fract/943cb1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fract/943cb1.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%fract_943cb1 = func():void -> %b2 {
-  %b2 = block {
+%fract_943cb1 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(0.25f)
     %4:vec2<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %fract_943cb1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %fract_943cb1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %fract_943cb1
     ret
   }
diff --git a/test/tint/builtins/gen/literal/fract/958a1d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fract/958a1d.wgsl.expected.ir.msl
index 0b3557b..312e018 100644
--- a/test/tint/builtins/gen/literal/fract/958a1d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fract/958a1d.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%fract_958a1d = func():void -> %b2 {
-  %b2 = block {
+%fract_958a1d = func():void {
+  $B2: {
     %res:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(0.25h)
     %4:vec3<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %fract_958a1d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %fract_958a1d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %fract_958a1d
     ret
   }
diff --git a/test/tint/builtins/gen/literal/fract/a49758.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fract/a49758.wgsl.expected.ir.msl
index 3cb9927..8903669 100644
--- a/test/tint/builtins/gen/literal/fract/a49758.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fract/a49758.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%fract_a49758 = func():void -> %b2 {
-  %b2 = block {
+%fract_a49758 = func():void {
+  $B2: {
     %res:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(0.25f)
     %4:vec3<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %fract_a49758
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %fract_a49758
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %fract_a49758
     ret
   }
diff --git a/test/tint/builtins/gen/literal/fract/eb38ce.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fract/eb38ce.wgsl.expected.ir.msl
index 588757b..9a5bbd2 100644
--- a/test/tint/builtins/gen/literal/fract/eb38ce.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fract/eb38ce.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%fract_eb38ce = func():void -> %b2 {
-  %b2 = block {
+%fract_eb38ce = func():void {
+  $B2: {
     %res:ptr<function, f16, read_write> = var, 0.25h
     %4:f16 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %fract_eb38ce
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %fract_eb38ce
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %fract_eb38ce
     ret
   }
diff --git a/test/tint/builtins/gen/literal/fract/fa5c71.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fract/fa5c71.wgsl.expected.ir.msl
index ea674e9..734e936 100644
--- a/test/tint/builtins/gen/literal/fract/fa5c71.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fract/fa5c71.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%fract_fa5c71 = func():void -> %b2 {
-  %b2 = block {
+%fract_fa5c71 = func():void {
+  $B2: {
     %res:ptr<function, f32, read_write> = var, 0.25f
     %4:f32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %fract_fa5c71
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %fract_fa5c71
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %fract_fa5c71
     ret
   }
diff --git a/test/tint/builtins/gen/literal/fwidth/5d1b39.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fwidth/5d1b39.wgsl.expected.ir.msl
index 0600386..bcbd4d4 100644
--- a/test/tint/builtins/gen/literal/fwidth/5d1b39.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fwidth/5d1b39.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%fwidth_5d1b39 = func():void -> %b2 {
-  %b2 = block {
+%fwidth_5d1b39 = func():void {
+  $B2: {
     %3:vec3<f32> = fwidth vec3<f32>(1.0f)
     %res:ptr<function, vec3<f32>, read_write> = var, %3
     %5:vec3<f32> = load %res
@@ -13,8 +13,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %7:void = call %fwidth_5d1b39
     ret
   }
diff --git a/test/tint/builtins/gen/literal/fwidth/b83ebb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fwidth/b83ebb.wgsl.expected.ir.msl
index 120f411..3d835e9 100644
--- a/test/tint/builtins/gen/literal/fwidth/b83ebb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fwidth/b83ebb.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%fwidth_b83ebb = func():void -> %b2 {
-  %b2 = block {
+%fwidth_b83ebb = func():void {
+  $B2: {
     %3:vec2<f32> = fwidth vec2<f32>(1.0f)
     %res:ptr<function, vec2<f32>, read_write> = var, %3
     %5:vec2<f32> = load %res
@@ -13,8 +13,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %7:void = call %fwidth_b83ebb
     ret
   }
diff --git a/test/tint/builtins/gen/literal/fwidth/d2ab9a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fwidth/d2ab9a.wgsl.expected.ir.msl
index 98c3234..ca6b902 100644
--- a/test/tint/builtins/gen/literal/fwidth/d2ab9a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fwidth/d2ab9a.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%fwidth_d2ab9a = func():void -> %b2 {
-  %b2 = block {
+%fwidth_d2ab9a = func():void {
+  $B2: {
     %3:vec4<f32> = fwidth vec4<f32>(1.0f)
     %res:ptr<function, vec4<f32>, read_write> = var, %3
     %5:vec4<f32> = load %res
@@ -13,8 +13,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %7:void = call %fwidth_d2ab9a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/fwidth/df38ef.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fwidth/df38ef.wgsl.expected.ir.msl
index ea378be..3ac6af6 100644
--- a/test/tint/builtins/gen/literal/fwidth/df38ef.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fwidth/df38ef.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%fwidth_df38ef = func():void -> %b2 {
-  %b2 = block {
+%fwidth_df38ef = func():void {
+  $B2: {
     %3:f32 = fwidth 1.0f
     %res:ptr<function, f32, read_write> = var, %3
     %5:f32 = load %res
@@ -13,8 +13,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %7:void = call %fwidth_df38ef
     ret
   }
diff --git a/test/tint/builtins/gen/literal/fwidthCoarse/159c8a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fwidthCoarse/159c8a.wgsl.expected.ir.msl
index acd3a57..7f5ff5a 100644
--- a/test/tint/builtins/gen/literal/fwidthCoarse/159c8a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fwidthCoarse/159c8a.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%fwidthCoarse_159c8a = func():void -> %b2 {
-  %b2 = block {
+%fwidthCoarse_159c8a = func():void {
+  $B2: {
     %3:f32 = fwidthCoarse 1.0f
     %res:ptr<function, f32, read_write> = var, %3
     %5:f32 = load %res
@@ -13,8 +13,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %7:void = call %fwidthCoarse_159c8a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/fwidthCoarse/1e59d9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fwidthCoarse/1e59d9.wgsl.expected.ir.msl
index 181163f..f30d081 100644
--- a/test/tint/builtins/gen/literal/fwidthCoarse/1e59d9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fwidthCoarse/1e59d9.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%fwidthCoarse_1e59d9 = func():void -> %b2 {
-  %b2 = block {
+%fwidthCoarse_1e59d9 = func():void {
+  $B2: {
     %3:vec3<f32> = fwidthCoarse vec3<f32>(1.0f)
     %res:ptr<function, vec3<f32>, read_write> = var, %3
     %5:vec3<f32> = load %res
@@ -13,8 +13,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %7:void = call %fwidthCoarse_1e59d9
     ret
   }
diff --git a/test/tint/builtins/gen/literal/fwidthCoarse/4e4fc4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fwidthCoarse/4e4fc4.wgsl.expected.ir.msl
index baa0650..adfb446 100644
--- a/test/tint/builtins/gen/literal/fwidthCoarse/4e4fc4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fwidthCoarse/4e4fc4.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%fwidthCoarse_4e4fc4 = func():void -> %b2 {
-  %b2 = block {
+%fwidthCoarse_4e4fc4 = func():void {
+  $B2: {
     %3:vec4<f32> = fwidthCoarse vec4<f32>(1.0f)
     %res:ptr<function, vec4<f32>, read_write> = var, %3
     %5:vec4<f32> = load %res
@@ -13,8 +13,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %7:void = call %fwidthCoarse_4e4fc4
     ret
   }
diff --git a/test/tint/builtins/gen/literal/fwidthCoarse/e653f7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fwidthCoarse/e653f7.wgsl.expected.ir.msl
index 366dce1..3a2d028 100644
--- a/test/tint/builtins/gen/literal/fwidthCoarse/e653f7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fwidthCoarse/e653f7.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%fwidthCoarse_e653f7 = func():void -> %b2 {
-  %b2 = block {
+%fwidthCoarse_e653f7 = func():void {
+  $B2: {
     %3:vec2<f32> = fwidthCoarse vec2<f32>(1.0f)
     %res:ptr<function, vec2<f32>, read_write> = var, %3
     %5:vec2<f32> = load %res
@@ -13,8 +13,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %7:void = call %fwidthCoarse_e653f7
     ret
   }
diff --git a/test/tint/builtins/gen/literal/fwidthFine/523fdc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fwidthFine/523fdc.wgsl.expected.ir.msl
index a33bc6e..7d01936 100644
--- a/test/tint/builtins/gen/literal/fwidthFine/523fdc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fwidthFine/523fdc.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%fwidthFine_523fdc = func():void -> %b2 {
-  %b2 = block {
+%fwidthFine_523fdc = func():void {
+  $B2: {
     %3:vec3<f32> = fwidthFine vec3<f32>(1.0f)
     %res:ptr<function, vec3<f32>, read_write> = var, %3
     %5:vec3<f32> = load %res
@@ -13,8 +13,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %7:void = call %fwidthFine_523fdc
     ret
   }
diff --git a/test/tint/builtins/gen/literal/fwidthFine/68f4ef.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fwidthFine/68f4ef.wgsl.expected.ir.msl
index 163429fa..fcc356c 100644
--- a/test/tint/builtins/gen/literal/fwidthFine/68f4ef.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fwidthFine/68f4ef.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%fwidthFine_68f4ef = func():void -> %b2 {
-  %b2 = block {
+%fwidthFine_68f4ef = func():void {
+  $B2: {
     %3:vec4<f32> = fwidthFine vec4<f32>(1.0f)
     %res:ptr<function, vec4<f32>, read_write> = var, %3
     %5:vec4<f32> = load %res
@@ -13,8 +13,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %7:void = call %fwidthFine_68f4ef
     ret
   }
diff --git a/test/tint/builtins/gen/literal/fwidthFine/f1742d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fwidthFine/f1742d.wgsl.expected.ir.msl
index 0b20008..79017bc 100644
--- a/test/tint/builtins/gen/literal/fwidthFine/f1742d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fwidthFine/f1742d.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%fwidthFine_f1742d = func():void -> %b2 {
-  %b2 = block {
+%fwidthFine_f1742d = func():void {
+  $B2: {
     %3:f32 = fwidthFine 1.0f
     %res:ptr<function, f32, read_write> = var, %3
     %5:f32 = load %res
@@ -13,8 +13,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %7:void = call %fwidthFine_f1742d
     ret
   }
diff --git a/test/tint/builtins/gen/literal/fwidthFine/ff6aa0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fwidthFine/ff6aa0.wgsl.expected.ir.msl
index 91af55e..d791baf 100644
--- a/test/tint/builtins/gen/literal/fwidthFine/ff6aa0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fwidthFine/ff6aa0.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%fwidthFine_ff6aa0 = func():void -> %b2 {
-  %b2 = block {
+%fwidthFine_ff6aa0 = func():void {
+  $B2: {
     %3:vec2<f32> = fwidthFine vec2<f32>(1.0f)
     %res:ptr<function, vec2<f32>, read_write> = var, %3
     %5:vec2<f32> = load %res
@@ -13,8 +13,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %7:void = call %fwidthFine_ff6aa0
     ret
   }
diff --git a/test/tint/builtins/gen/literal/insertBits/3c7ba5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/insertBits/3c7ba5.wgsl.expected.ir.msl
index 5fa7048..d721c92 100644
--- a/test/tint/builtins/gen/literal/insertBits/3c7ba5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/insertBits/3c7ba5.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%insertBits_3c7ba5 = func():void -> %b2 {
-  %b2 = block {
+%insertBits_3c7ba5 = func():void {
+  $B2: {
     %res:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(3u)
     %4:vec2<u32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %insertBits_3c7ba5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %insertBits_3c7ba5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %insertBits_3c7ba5
     ret
   }
diff --git a/test/tint/builtins/gen/literal/insertBits/428b0b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/insertBits/428b0b.wgsl.expected.ir.msl
index ab4992d..5cd4917 100644
--- a/test/tint/builtins/gen/literal/insertBits/428b0b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/insertBits/428b0b.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%insertBits_428b0b = func():void -> %b2 {
-  %b2 = block {
+%insertBits_428b0b = func():void {
+  $B2: {
     %res:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(3i)
     %4:vec3<i32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %insertBits_428b0b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %insertBits_428b0b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %insertBits_428b0b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/insertBits/51ede1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/insertBits/51ede1.wgsl.expected.ir.msl
index 85927c9..dfd489d 100644
--- a/test/tint/builtins/gen/literal/insertBits/51ede1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/insertBits/51ede1.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%insertBits_51ede1 = func():void -> %b2 {
-  %b2 = block {
+%insertBits_51ede1 = func():void {
+  $B2: {
     %res:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(3u)
     %4:vec4<u32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %insertBits_51ede1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %insertBits_51ede1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %insertBits_51ede1
     ret
   }
diff --git a/test/tint/builtins/gen/literal/insertBits/65468b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/insertBits/65468b.wgsl.expected.ir.msl
index 2b581b6..421f660 100644
--- a/test/tint/builtins/gen/literal/insertBits/65468b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/insertBits/65468b.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%insertBits_65468b = func():void -> %b2 {
-  %b2 = block {
+%insertBits_65468b = func():void {
+  $B2: {
     %res:ptr<function, i32, read_write> = var, 3i
     %4:i32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %insertBits_65468b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %insertBits_65468b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %insertBits_65468b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/insertBits/87826b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/insertBits/87826b.wgsl.expected.ir.msl
index 93a3699..2918383 100644
--- a/test/tint/builtins/gen/literal/insertBits/87826b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/insertBits/87826b.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%insertBits_87826b = func():void -> %b2 {
-  %b2 = block {
+%insertBits_87826b = func():void {
+  $B2: {
     %res:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(3u)
     %4:vec3<u32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %insertBits_87826b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %insertBits_87826b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %insertBits_87826b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/insertBits/d86978.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/insertBits/d86978.wgsl.expected.ir.msl
index 7b816ff..ed61052 100644
--- a/test/tint/builtins/gen/literal/insertBits/d86978.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/insertBits/d86978.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%insertBits_d86978 = func():void -> %b2 {
-  %b2 = block {
+%insertBits_d86978 = func():void {
+  $B2: {
     %res:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(3i)
     %4:vec4<i32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %insertBits_d86978
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %insertBits_d86978
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %insertBits_d86978
     ret
   }
diff --git a/test/tint/builtins/gen/literal/insertBits/e3e3a2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/insertBits/e3e3a2.wgsl.expected.ir.msl
index f71a334..7e27124 100644
--- a/test/tint/builtins/gen/literal/insertBits/e3e3a2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/insertBits/e3e3a2.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%insertBits_e3e3a2 = func():void -> %b2 {
-  %b2 = block {
+%insertBits_e3e3a2 = func():void {
+  $B2: {
     %res:ptr<function, u32, read_write> = var, 3u
     %4:u32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %insertBits_e3e3a2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %insertBits_e3e3a2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %insertBits_e3e3a2
     ret
   }
diff --git a/test/tint/builtins/gen/literal/insertBits/fe6ba6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/insertBits/fe6ba6.wgsl.expected.ir.msl
index 5499105..0017091 100644
--- a/test/tint/builtins/gen/literal/insertBits/fe6ba6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/insertBits/fe6ba6.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%insertBits_fe6ba6 = func():void -> %b2 {
-  %b2 = block {
+%insertBits_fe6ba6 = func():void {
+  $B2: {
     %res:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(3i)
     %4:vec2<i32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %insertBits_fe6ba6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %insertBits_fe6ba6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %insertBits_fe6ba6
     ret
   }
diff --git a/test/tint/builtins/gen/literal/inverseSqrt/440300.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/inverseSqrt/440300.wgsl.expected.ir.msl
index 67e08fc..ddcc179 100644
--- a/test/tint/builtins/gen/literal/inverseSqrt/440300.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/inverseSqrt/440300.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%inverseSqrt_440300 = func():void -> %b2 {
-  %b2 = block {
+%inverseSqrt_440300 = func():void {
+  $B2: {
     %res:ptr<function, f16, read_write> = var, 1.0h
     %4:f16 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %inverseSqrt_440300
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %inverseSqrt_440300
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %inverseSqrt_440300
     ret
   }
diff --git a/test/tint/builtins/gen/literal/inverseSqrt/5f51f8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/inverseSqrt/5f51f8.wgsl.expected.ir.msl
index 1958773..a706a7e 100644
--- a/test/tint/builtins/gen/literal/inverseSqrt/5f51f8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/inverseSqrt/5f51f8.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%inverseSqrt_5f51f8 = func():void -> %b2 {
-  %b2 = block {
+%inverseSqrt_5f51f8 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %4:vec2<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %inverseSqrt_5f51f8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %inverseSqrt_5f51f8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %inverseSqrt_5f51f8
     ret
   }
diff --git a/test/tint/builtins/gen/literal/inverseSqrt/84407e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/inverseSqrt/84407e.wgsl.expected.ir.msl
index ce27a52..ab02c0f 100644
--- a/test/tint/builtins/gen/literal/inverseSqrt/84407e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/inverseSqrt/84407e.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%inverseSqrt_84407e = func():void -> %b2 {
-  %b2 = block {
+%inverseSqrt_84407e = func():void {
+  $B2: {
     %res:ptr<function, f32, read_write> = var, 1.0f
     %4:f32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %inverseSqrt_84407e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %inverseSqrt_84407e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %inverseSqrt_84407e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/inverseSqrt/8f2bd2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/inverseSqrt/8f2bd2.wgsl.expected.ir.msl
index 266809e..e4debbe 100644
--- a/test/tint/builtins/gen/literal/inverseSqrt/8f2bd2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/inverseSqrt/8f2bd2.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%inverseSqrt_8f2bd2 = func():void -> %b2 {
-  %b2 = block {
+%inverseSqrt_8f2bd2 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %4:vec2<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %inverseSqrt_8f2bd2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %inverseSqrt_8f2bd2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %inverseSqrt_8f2bd2
     ret
   }
diff --git a/test/tint/builtins/gen/literal/inverseSqrt/b197b1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/inverseSqrt/b197b1.wgsl.expected.ir.msl
index 19a602b..8d581d9 100644
--- a/test/tint/builtins/gen/literal/inverseSqrt/b197b1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/inverseSqrt/b197b1.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%inverseSqrt_b197b1 = func():void -> %b2 {
-  %b2 = block {
+%inverseSqrt_b197b1 = func():void {
+  $B2: {
     %res:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %4:vec3<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %inverseSqrt_b197b1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %inverseSqrt_b197b1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %inverseSqrt_b197b1
     ret
   }
diff --git a/test/tint/builtins/gen/literal/inverseSqrt/b85ebd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/inverseSqrt/b85ebd.wgsl.expected.ir.msl
index 4fb3a0c..0442a06b 100644
--- a/test/tint/builtins/gen/literal/inverseSqrt/b85ebd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/inverseSqrt/b85ebd.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%inverseSqrt_b85ebd = func():void -> %b2 {
-  %b2 = block {
+%inverseSqrt_b85ebd = func():void {
+  $B2: {
     %res:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %4:vec3<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %inverseSqrt_b85ebd
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %inverseSqrt_b85ebd
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %inverseSqrt_b85ebd
     ret
   }
diff --git a/test/tint/builtins/gen/literal/inverseSqrt/c22347.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/inverseSqrt/c22347.wgsl.expected.ir.msl
index 67e93d3..c0d8171 100644
--- a/test/tint/builtins/gen/literal/inverseSqrt/c22347.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/inverseSqrt/c22347.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%inverseSqrt_c22347 = func():void -> %b2 {
-  %b2 = block {
+%inverseSqrt_c22347 = func():void {
+  $B2: {
     %res:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %4:vec4<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %inverseSqrt_c22347
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %inverseSqrt_c22347
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %inverseSqrt_c22347
     ret
   }
diff --git a/test/tint/builtins/gen/literal/inverseSqrt/cbdc70.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/inverseSqrt/cbdc70.wgsl.expected.ir.msl
index f904786..8db3b8c 100644
--- a/test/tint/builtins/gen/literal/inverseSqrt/cbdc70.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/inverseSqrt/cbdc70.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%inverseSqrt_cbdc70 = func():void -> %b2 {
-  %b2 = block {
+%inverseSqrt_cbdc70 = func():void {
+  $B2: {
     %res:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %4:vec4<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %inverseSqrt_cbdc70
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %inverseSqrt_cbdc70
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %inverseSqrt_cbdc70
     ret
   }
diff --git a/test/tint/builtins/gen/literal/ldexp/082c1f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/ldexp/082c1f.wgsl.expected.ir.msl
index e162ffb..97fb35b 100644
--- a/test/tint/builtins/gen/literal/ldexp/082c1f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/ldexp/082c1f.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%ldexp_082c1f = func():void -> %b2 {
-  %b2 = block {
+%ldexp_082c1f = func():void {
+  $B2: {
     %res:ptr<function, f16, read_write> = var, 2.0h
     %4:f16 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %ldexp_082c1f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %ldexp_082c1f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %ldexp_082c1f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/ldexp/217a31.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/ldexp/217a31.wgsl.expected.ir.msl
index 1d4bd80..ec7120a 100644
--- a/test/tint/builtins/gen/literal/ldexp/217a31.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/ldexp/217a31.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%ldexp_217a31 = func():void -> %b2 {
-  %b2 = block {
+%ldexp_217a31 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(2.0h)
     %4:vec2<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %ldexp_217a31
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %ldexp_217a31
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %ldexp_217a31
     ret
   }
diff --git a/test/tint/builtins/gen/literal/ldexp/3d90b4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/ldexp/3d90b4.wgsl.expected.ir.msl
index 586207d..8c9d264 100644
--- a/test/tint/builtins/gen/literal/ldexp/3d90b4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/ldexp/3d90b4.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%ldexp_3d90b4 = func():void -> %b2 {
-  %b2 = block {
+%ldexp_3d90b4 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(2.0h)
     %4:vec2<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %ldexp_3d90b4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %ldexp_3d90b4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %ldexp_3d90b4
     ret
   }
diff --git a/test/tint/builtins/gen/literal/ldexp/593ff3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/ldexp/593ff3.wgsl.expected.ir.msl
index 3914a6a3..c000c5f 100644
--- a/test/tint/builtins/gen/literal/ldexp/593ff3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/ldexp/593ff3.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%ldexp_593ff3 = func():void -> %b2 {
-  %b2 = block {
+%ldexp_593ff3 = func():void {
+  $B2: {
     %res:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(2.0f)
     %4:vec3<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %ldexp_593ff3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %ldexp_593ff3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %ldexp_593ff3
     ret
   }
diff --git a/test/tint/builtins/gen/literal/ldexp/624e0c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/ldexp/624e0c.wgsl.expected.ir.msl
index 721ce54..849c493 100644
--- a/test/tint/builtins/gen/literal/ldexp/624e0c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/ldexp/624e0c.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%ldexp_624e0c = func():void -> %b2 {
-  %b2 = block {
+%ldexp_624e0c = func():void {
+  $B2: {
     %res:ptr<function, f16, read_write> = var, 2.0h
     %4:f16 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %ldexp_624e0c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %ldexp_624e0c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %ldexp_624e0c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/ldexp/65a7bd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/ldexp/65a7bd.wgsl.expected.ir.msl
index 812e340..2d0e3e1 100644
--- a/test/tint/builtins/gen/literal/ldexp/65a7bd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/ldexp/65a7bd.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%ldexp_65a7bd = func():void -> %b2 {
-  %b2 = block {
+%ldexp_65a7bd = func():void {
+  $B2: {
     %res:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(2.0f)
     %4:vec4<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %ldexp_65a7bd
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %ldexp_65a7bd
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %ldexp_65a7bd
     ret
   }
diff --git a/test/tint/builtins/gen/literal/ldexp/7485ce.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/ldexp/7485ce.wgsl.expected.ir.msl
index 3947b11..24eeb3e 100644
--- a/test/tint/builtins/gen/literal/ldexp/7485ce.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/ldexp/7485ce.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%ldexp_7485ce = func():void -> %b2 {
-  %b2 = block {
+%ldexp_7485ce = func():void {
+  $B2: {
     %res:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(2.0h)
     %4:vec3<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %ldexp_7485ce
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %ldexp_7485ce
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %ldexp_7485ce
     ret
   }
diff --git a/test/tint/builtins/gen/literal/ldexp/7fa13c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/ldexp/7fa13c.wgsl.expected.ir.msl
index 10742c8..0374c7a 100644
--- a/test/tint/builtins/gen/literal/ldexp/7fa13c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/ldexp/7fa13c.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%ldexp_7fa13c = func():void -> %b2 {
-  %b2 = block {
+%ldexp_7fa13c = func():void {
+  $B2: {
     %res:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(2.0h)
     %4:vec4<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %ldexp_7fa13c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %ldexp_7fa13c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %ldexp_7fa13c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/ldexp/8a0c2f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/ldexp/8a0c2f.wgsl.expected.ir.msl
index 53cbd4a..bc51039 100644
--- a/test/tint/builtins/gen/literal/ldexp/8a0c2f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/ldexp/8a0c2f.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%ldexp_8a0c2f = func():void -> %b2 {
-  %b2 = block {
+%ldexp_8a0c2f = func():void {
+  $B2: {
     %res:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(2.0h)
     %4:vec4<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %ldexp_8a0c2f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %ldexp_8a0c2f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %ldexp_8a0c2f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/ldexp/8e43e9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/ldexp/8e43e9.wgsl.expected.ir.msl
index ec9a0a1..8f949ca 100644
--- a/test/tint/builtins/gen/literal/ldexp/8e43e9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/ldexp/8e43e9.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%ldexp_8e43e9 = func():void -> %b2 {
-  %b2 = block {
+%ldexp_8e43e9 = func():void {
+  $B2: {
     %res:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(2.0h)
     %4:vec3<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %ldexp_8e43e9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %ldexp_8e43e9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %ldexp_8e43e9
     ret
   }
diff --git a/test/tint/builtins/gen/literal/ldexp/a22679.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/ldexp/a22679.wgsl.expected.ir.msl
index 57f125d..a80f5ba 100644
--- a/test/tint/builtins/gen/literal/ldexp/a22679.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/ldexp/a22679.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%ldexp_a22679 = func():void -> %b2 {
-  %b2 = block {
+%ldexp_a22679 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(2.0f)
     %4:vec2<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %ldexp_a22679
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %ldexp_a22679
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %ldexp_a22679
     ret
   }
diff --git a/test/tint/builtins/gen/literal/ldexp/a31cdc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/ldexp/a31cdc.wgsl.expected.ir.msl
index cee88f0..9f6b25a 100644
--- a/test/tint/builtins/gen/literal/ldexp/a31cdc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/ldexp/a31cdc.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%ldexp_a31cdc = func():void -> %b2 {
-  %b2 = block {
+%ldexp_a31cdc = func():void {
+  $B2: {
     %res:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(2.0f)
     %4:vec3<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %ldexp_a31cdc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %ldexp_a31cdc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %ldexp_a31cdc
     ret
   }
diff --git a/test/tint/builtins/gen/literal/ldexp/abd718.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/ldexp/abd718.wgsl.expected.ir.msl
index 2ad9004..f433aba 100644
--- a/test/tint/builtins/gen/literal/ldexp/abd718.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/ldexp/abd718.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%ldexp_abd718 = func():void -> %b2 {
-  %b2 = block {
+%ldexp_abd718 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(2.0f)
     %4:vec2<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %ldexp_abd718
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %ldexp_abd718
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %ldexp_abd718
     ret
   }
diff --git a/test/tint/builtins/gen/literal/ldexp/c9d0b7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/ldexp/c9d0b7.wgsl.expected.ir.msl
index 0f49ba7..033d067 100644
--- a/test/tint/builtins/gen/literal/ldexp/c9d0b7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/ldexp/c9d0b7.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%ldexp_c9d0b7 = func():void -> %b2 {
-  %b2 = block {
+%ldexp_c9d0b7 = func():void {
+  $B2: {
     %res:ptr<function, f32, read_write> = var, 2.0f
     %4:f32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %ldexp_c9d0b7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %ldexp_c9d0b7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %ldexp_c9d0b7
     ret
   }
diff --git a/test/tint/builtins/gen/literal/ldexp/cc9cde.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/ldexp/cc9cde.wgsl.expected.ir.msl
index bc6b42b..d98ac86 100644
--- a/test/tint/builtins/gen/literal/ldexp/cc9cde.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/ldexp/cc9cde.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%ldexp_cc9cde = func():void -> %b2 {
-  %b2 = block {
+%ldexp_cc9cde = func():void {
+  $B2: {
     %res:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(2.0f)
     %4:vec4<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %ldexp_cc9cde
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %ldexp_cc9cde
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %ldexp_cc9cde
     ret
   }
diff --git a/test/tint/builtins/gen/literal/ldexp/db8b49.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/ldexp/db8b49.wgsl.expected.ir.msl
index ebb8091..3fa8503 100644
--- a/test/tint/builtins/gen/literal/ldexp/db8b49.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/ldexp/db8b49.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%ldexp_db8b49 = func():void -> %b2 {
-  %b2 = block {
+%ldexp_db8b49 = func():void {
+  $B2: {
     %res:ptr<function, f32, read_write> = var, 2.0f
     %4:f32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %ldexp_db8b49
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %ldexp_db8b49
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %ldexp_db8b49
     ret
   }
diff --git a/test/tint/builtins/gen/literal/length/056071.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/length/056071.wgsl.expected.ir.msl
index 3afadaa..7b91718 100644
--- a/test/tint/builtins/gen/literal/length/056071.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/length/056071.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%length_056071 = func():void -> %b2 {
-  %b2 = block {
+%length_056071 = func():void {
+  $B2: {
     %res:ptr<function, f32, read_write> = var, 0.0f
     %4:f32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %length_056071
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %length_056071
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %length_056071
     ret
   }
diff --git a/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.ir.msl
index 7b3f794..35e1a9b 100644
--- a/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%length_3f0e13 = func():void -> %b2 {
-  %b2 = block {
+%length_3f0e13 = func():void {
+  $B2: {
     %res:ptr<function, f16, read_write> = var, 0.0h
     %4:f16 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %length_3f0e13
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %length_3f0e13
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %length_3f0e13
     ret
   }
diff --git a/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.ir.msl
index 1d5b295..ae450a1 100644
--- a/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%length_5b1a9b = func():void -> %b2 {
-  %b2 = block {
+%length_5b1a9b = func():void {
+  $B2: {
     %res:ptr<function, f16, read_write> = var, 0.0h
     %4:f16 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %length_5b1a9b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %length_5b1a9b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %length_5b1a9b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/length/602a17.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/length/602a17.wgsl.expected.ir.msl
index 075259a..750f1f1 100644
--- a/test/tint/builtins/gen/literal/length/602a17.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/length/602a17.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%length_602a17 = func():void -> %b2 {
-  %b2 = block {
+%length_602a17 = func():void {
+  $B2: {
     %res:ptr<function, f32, read_write> = var, 0.0f
     %4:f32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %length_602a17
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %length_602a17
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %length_602a17
     ret
   }
diff --git a/test/tint/builtins/gen/literal/length/afde8b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/length/afde8b.wgsl.expected.ir.msl
index fe36e10..5547294 100644
--- a/test/tint/builtins/gen/literal/length/afde8b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/length/afde8b.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%length_afde8b = func():void -> %b2 {
-  %b2 = block {
+%length_afde8b = func():void {
+  $B2: {
     %res:ptr<function, f32, read_write> = var, 0.0f
     %4:f32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %length_afde8b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %length_afde8b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %length_afde8b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.ir.msl
index 2244814..9c93153 100644
--- a/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%length_ba16d6 = func():void -> %b2 {
-  %b2 = block {
+%length_ba16d6 = func():void {
+  $B2: {
     %res:ptr<function, f16, read_write> = var, 0.0h
     %4:f16 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %length_ba16d6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %length_ba16d6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %length_ba16d6
     ret
   }
diff --git a/test/tint/builtins/gen/literal/length/becebf.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/length/becebf.wgsl.expected.ir.msl
index 7a9b528..1e7761c 100644
--- a/test/tint/builtins/gen/literal/length/becebf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/length/becebf.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%length_becebf = func():void -> %b2 {
-  %b2 = block {
+%length_becebf = func():void {
+  $B2: {
     %res:ptr<function, f32, read_write> = var, 0.0f
     %4:f32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %length_becebf
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %length_becebf
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %length_becebf
     ret
   }
diff --git a/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.ir.msl
index d779c54..f9b66fc 100644
--- a/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%length_c158da = func():void -> %b2 {
-  %b2 = block {
+%length_c158da = func():void {
+  $B2: {
     %res:ptr<function, f16, read_write> = var, 0.0h
     %4:f16 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %length_c158da
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %length_c158da
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %length_c158da
     ret
   }
diff --git a/test/tint/builtins/gen/literal/log/3da25a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/log/3da25a.wgsl.expected.ir.msl
index 2c3c70e..6972f91 100644
--- a/test/tint/builtins/gen/literal/log/3da25a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/log/3da25a.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%log_3da25a = func():void -> %b2 {
-  %b2 = block {
+%log_3da25a = func():void {
+  $B2: {
     %res:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(0.0f)
     %4:vec4<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %log_3da25a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %log_3da25a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %log_3da25a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/log/6ff86f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/log/6ff86f.wgsl.expected.ir.msl
index 6f7ea71..ddb614f 100644
--- a/test/tint/builtins/gen/literal/log/6ff86f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/log/6ff86f.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%log_6ff86f = func():void -> %b2 {
-  %b2 = block {
+%log_6ff86f = func():void {
+  $B2: {
     %res:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(0.0h)
     %4:vec3<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %log_6ff86f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %log_6ff86f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %log_6ff86f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/log/7114a6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/log/7114a6.wgsl.expected.ir.msl
index 7643d7e..f84ab50 100644
--- a/test/tint/builtins/gen/literal/log/7114a6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/log/7114a6.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%log_7114a6 = func():void -> %b2 {
-  %b2 = block {
+%log_7114a6 = func():void {
+  $B2: {
     %res:ptr<function, f32, read_write> = var, 0.0f
     %4:f32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %log_7114a6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %log_7114a6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %log_7114a6
     ret
   }
diff --git a/test/tint/builtins/gen/literal/log/8f0e32.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/log/8f0e32.wgsl.expected.ir.msl
index 8483f45..e484842 100644
--- a/test/tint/builtins/gen/literal/log/8f0e32.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/log/8f0e32.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%log_8f0e32 = func():void -> %b2 {
-  %b2 = block {
+%log_8f0e32 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(0.0h)
     %4:vec2<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %log_8f0e32
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %log_8f0e32
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %log_8f0e32
     ret
   }
diff --git a/test/tint/builtins/gen/literal/log/b2ce28.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/log/b2ce28.wgsl.expected.ir.msl
index 9e576e3..a1bd9ad 100644
--- a/test/tint/builtins/gen/literal/log/b2ce28.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/log/b2ce28.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%log_b2ce28 = func():void -> %b2 {
-  %b2 = block {
+%log_b2ce28 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(0.0f)
     %4:vec2<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %log_b2ce28
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %log_b2ce28
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %log_b2ce28
     ret
   }
diff --git a/test/tint/builtins/gen/literal/log/c9f489.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/log/c9f489.wgsl.expected.ir.msl
index ea20b1b..5e9a89d 100644
--- a/test/tint/builtins/gen/literal/log/c9f489.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/log/c9f489.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%log_c9f489 = func():void -> %b2 {
-  %b2 = block {
+%log_c9f489 = func():void {
+  $B2: {
     %res:ptr<function, f16, read_write> = var, 0.0h
     %4:f16 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %log_c9f489
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %log_c9f489
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %log_c9f489
     ret
   }
diff --git a/test/tint/builtins/gen/literal/log/cdbdc1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/log/cdbdc1.wgsl.expected.ir.msl
index 15862bc..71214e8 100644
--- a/test/tint/builtins/gen/literal/log/cdbdc1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/log/cdbdc1.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%log_cdbdc1 = func():void -> %b2 {
-  %b2 = block {
+%log_cdbdc1 = func():void {
+  $B2: {
     %res:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(0.0h)
     %4:vec4<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %log_cdbdc1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %log_cdbdc1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %log_cdbdc1
     ret
   }
diff --git a/test/tint/builtins/gen/literal/log/f4c570.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/log/f4c570.wgsl.expected.ir.msl
index 3be5315..d5e22ee 100644
--- a/test/tint/builtins/gen/literal/log/f4c570.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/log/f4c570.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%log_f4c570 = func():void -> %b2 {
-  %b2 = block {
+%log_f4c570 = func():void {
+  $B2: {
     %res:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(0.0f)
     %4:vec3<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %log_f4c570
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %log_f4c570
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %log_f4c570
     ret
   }
diff --git a/test/tint/builtins/gen/literal/log2/38b478.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/log2/38b478.wgsl.expected.ir.msl
index 11d4086..0d3fc4c 100644
--- a/test/tint/builtins/gen/literal/log2/38b478.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/log2/38b478.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%log2_38b478 = func():void -> %b2 {
-  %b2 = block {
+%log2_38b478 = func():void {
+  $B2: {
     %res:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(0.0h)
     %4:vec3<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %log2_38b478
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %log2_38b478
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %log2_38b478
     ret
   }
diff --git a/test/tint/builtins/gen/literal/log2/4036ed.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/log2/4036ed.wgsl.expected.ir.msl
index 84dcaa1..be55ae3 100644
--- a/test/tint/builtins/gen/literal/log2/4036ed.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/log2/4036ed.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%log2_4036ed = func():void -> %b2 {
-  %b2 = block {
+%log2_4036ed = func():void {
+  $B2: {
     %res:ptr<function, f32, read_write> = var, 0.0f
     %4:f32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %log2_4036ed
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %log2_4036ed
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %log2_4036ed
     ret
   }
diff --git a/test/tint/builtins/gen/literal/log2/776088.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/log2/776088.wgsl.expected.ir.msl
index be69d7a..89ad282 100644
--- a/test/tint/builtins/gen/literal/log2/776088.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/log2/776088.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%log2_776088 = func():void -> %b2 {
-  %b2 = block {
+%log2_776088 = func():void {
+  $B2: {
     %res:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(0.0h)
     %4:vec4<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %log2_776088
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %log2_776088
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %log2_776088
     ret
   }
diff --git a/test/tint/builtins/gen/literal/log2/8c10b3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/log2/8c10b3.wgsl.expected.ir.msl
index 87b1c21..42d65bb 100644
--- a/test/tint/builtins/gen/literal/log2/8c10b3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/log2/8c10b3.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%log2_8c10b3 = func():void -> %b2 {
-  %b2 = block {
+%log2_8c10b3 = func():void {
+  $B2: {
     %res:ptr<function, f16, read_write> = var, 0.0h
     %4:f16 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %log2_8c10b3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %log2_8c10b3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %log2_8c10b3
     ret
   }
diff --git a/test/tint/builtins/gen/literal/log2/902988.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/log2/902988.wgsl.expected.ir.msl
index 02716d8..82282d5 100644
--- a/test/tint/builtins/gen/literal/log2/902988.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/log2/902988.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%log2_902988 = func():void -> %b2 {
-  %b2 = block {
+%log2_902988 = func():void {
+  $B2: {
     %res:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(0.0f)
     %4:vec4<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %log2_902988
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %log2_902988
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %log2_902988
     ret
   }
diff --git a/test/tint/builtins/gen/literal/log2/adb233.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/log2/adb233.wgsl.expected.ir.msl
index b2f2b17..27ca570 100644
--- a/test/tint/builtins/gen/literal/log2/adb233.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/log2/adb233.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%log2_adb233 = func():void -> %b2 {
-  %b2 = block {
+%log2_adb233 = func():void {
+  $B2: {
     %res:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(0.0f)
     %4:vec3<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %log2_adb233
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %log2_adb233
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %log2_adb233
     ret
   }
diff --git a/test/tint/builtins/gen/literal/log2/aea659.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/log2/aea659.wgsl.expected.ir.msl
index ef55927..f7028ec 100644
--- a/test/tint/builtins/gen/literal/log2/aea659.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/log2/aea659.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%log2_aea659 = func():void -> %b2 {
-  %b2 = block {
+%log2_aea659 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(0.0f)
     %4:vec2<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %log2_aea659
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %log2_aea659
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %log2_aea659
     ret
   }
diff --git a/test/tint/builtins/gen/literal/log2/fb9f0b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/log2/fb9f0b.wgsl.expected.ir.msl
index 38056f4..11808b9 100644
--- a/test/tint/builtins/gen/literal/log2/fb9f0b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/log2/fb9f0b.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%log2_fb9f0b = func():void -> %b2 {
-  %b2 = block {
+%log2_fb9f0b = func():void {
+  $B2: {
     %res:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(0.0h)
     %4:vec2<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %log2_fb9f0b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %log2_fb9f0b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %log2_fb9f0b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/max/0c0aae.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/max/0c0aae.wgsl.expected.ir.msl
index 8bca3fb..feaa012 100644
--- a/test/tint/builtins/gen/literal/max/0c0aae.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/max/0c0aae.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%max_0c0aae = func():void -> %b2 {
-  %b2 = block {
+%max_0c0aae = func():void {
+  $B2: {
     %res:ptr<function, u32, read_write> = var, 1u
     %4:u32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %max_0c0aae
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %max_0c0aae
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %max_0c0aae
     ret
   }
diff --git a/test/tint/builtins/gen/literal/max/111ac0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/max/111ac0.wgsl.expected.ir.msl
index abc3075..8b2ea6b 100644
--- a/test/tint/builtins/gen/literal/max/111ac0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/max/111ac0.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%max_111ac0 = func():void -> %b2 {
-  %b2 = block {
+%max_111ac0 = func():void {
+  $B2: {
     %res:ptr<function, f16, read_write> = var, 1.0h
     %4:f16 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %max_111ac0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %max_111ac0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %max_111ac0
     ret
   }
diff --git a/test/tint/builtins/gen/literal/max/25eafe.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/max/25eafe.wgsl.expected.ir.msl
index 0d55f0c..194ae2d 100644
--- a/test/tint/builtins/gen/literal/max/25eafe.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/max/25eafe.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%max_25eafe = func():void -> %b2 {
-  %b2 = block {
+%max_25eafe = func():void {
+  $B2: {
     %res:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %4:vec3<i32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %max_25eafe
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %max_25eafe
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %max_25eafe
     ret
   }
diff --git a/test/tint/builtins/gen/literal/max/320815.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/max/320815.wgsl.expected.ir.msl
index bc2c2ee..046997e 100644
--- a/test/tint/builtins/gen/literal/max/320815.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/max/320815.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%max_320815 = func():void -> %b2 {
-  %b2 = block {
+%max_320815 = func():void {
+  $B2: {
     %res:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %4:vec2<u32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %max_320815
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %max_320815
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %max_320815
     ret
   }
diff --git a/test/tint/builtins/gen/literal/max/34956e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/max/34956e.wgsl.expected.ir.msl
index 0857fae..55b0ad5 100644
--- a/test/tint/builtins/gen/literal/max/34956e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/max/34956e.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%max_34956e = func():void -> %b2 {
-  %b2 = block {
+%max_34956e = func():void {
+  $B2: {
     %res:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %4:vec2<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %max_34956e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %max_34956e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %max_34956e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/max/445169.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/max/445169.wgsl.expected.ir.msl
index 8ed7dfe..9db9765 100644
--- a/test/tint/builtins/gen/literal/max/445169.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/max/445169.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%max_445169 = func():void -> %b2 {
-  %b2 = block {
+%max_445169 = func():void {
+  $B2: {
     %res:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %4:vec3<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %max_445169
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %max_445169
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %max_445169
     ret
   }
diff --git a/test/tint/builtins/gen/literal/max/44a39d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/max/44a39d.wgsl.expected.ir.msl
index 9065841..566fade 100644
--- a/test/tint/builtins/gen/literal/max/44a39d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/max/44a39d.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%max_44a39d = func():void -> %b2 {
-  %b2 = block {
+%max_44a39d = func():void {
+  $B2: {
     %res:ptr<function, f32, read_write> = var, 1.0f
     %4:f32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %max_44a39d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %max_44a39d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %max_44a39d
     ret
   }
diff --git a/test/tint/builtins/gen/literal/max/453e04.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/max/453e04.wgsl.expected.ir.msl
index 95e9d1c..e9a308a 100644
--- a/test/tint/builtins/gen/literal/max/453e04.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/max/453e04.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%max_453e04 = func():void -> %b2 {
-  %b2 = block {
+%max_453e04 = func():void {
+  $B2: {
     %res:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
     %4:vec4<u32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %max_453e04
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %max_453e04
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %max_453e04
     ret
   }
diff --git a/test/tint/builtins/gen/literal/max/462050.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/max/462050.wgsl.expected.ir.msl
index 5dc59e6..79913a6 100644
--- a/test/tint/builtins/gen/literal/max/462050.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/max/462050.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%max_462050 = func():void -> %b2 {
-  %b2 = block {
+%max_462050 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %4:vec2<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %max_462050
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %max_462050
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %max_462050
     ret
   }
diff --git a/test/tint/builtins/gen/literal/max/4883ac.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/max/4883ac.wgsl.expected.ir.msl
index 50ae750..ce337f1 100644
--- a/test/tint/builtins/gen/literal/max/4883ac.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/max/4883ac.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%max_4883ac = func():void -> %b2 {
-  %b2 = block {
+%max_4883ac = func():void {
+  $B2: {
     %res:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %4:vec3<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %max_4883ac
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %max_4883ac
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %max_4883ac
     ret
   }
diff --git a/test/tint/builtins/gen/literal/max/85e6bc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/max/85e6bc.wgsl.expected.ir.msl
index 6029013..ba92aca 100644
--- a/test/tint/builtins/gen/literal/max/85e6bc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/max/85e6bc.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%max_85e6bc = func():void -> %b2 {
-  %b2 = block {
+%max_85e6bc = func():void {
+  $B2: {
     %res:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %4:vec4<i32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %max_85e6bc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %max_85e6bc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %max_85e6bc
     ret
   }
diff --git a/test/tint/builtins/gen/literal/max/a93419.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/max/a93419.wgsl.expected.ir.msl
index e2a6c3e..2df3357 100644
--- a/test/tint/builtins/gen/literal/max/a93419.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/max/a93419.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%max_a93419 = func():void -> %b2 {
-  %b2 = block {
+%max_a93419 = func():void {
+  $B2: {
     %res:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %4:vec4<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %max_a93419
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %max_a93419
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %max_a93419
     ret
   }
diff --git a/test/tint/builtins/gen/literal/max/b1b73a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/max/b1b73a.wgsl.expected.ir.msl
index 3d6c077..067837b 100644
--- a/test/tint/builtins/gen/literal/max/b1b73a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/max/b1b73a.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%max_b1b73a = func():void -> %b2 {
-  %b2 = block {
+%max_b1b73a = func():void {
+  $B2: {
     %res:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %4:vec3<u32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %max_b1b73a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %max_b1b73a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %max_b1b73a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/max/ce7c30.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/max/ce7c30.wgsl.expected.ir.msl
index d49a043..5de5295 100644
--- a/test/tint/builtins/gen/literal/max/ce7c30.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/max/ce7c30.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%max_ce7c30 = func():void -> %b2 {
-  %b2 = block {
+%max_ce7c30 = func():void {
+  $B2: {
     %res:ptr<function, i32, read_write> = var, 1i
     %4:i32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %max_ce7c30
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %max_ce7c30
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %max_ce7c30
     ret
   }
diff --git a/test/tint/builtins/gen/literal/max/e14f2b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/max/e14f2b.wgsl.expected.ir.msl
index 90cbbaa..2a129ee 100644
--- a/test/tint/builtins/gen/literal/max/e14f2b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/max/e14f2b.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%max_e14f2b = func():void -> %b2 {
-  %b2 = block {
+%max_e14f2b = func():void {
+  $B2: {
     %res:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %4:vec4<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %max_e14f2b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %max_e14f2b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %max_e14f2b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/max/e8192f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/max/e8192f.wgsl.expected.ir.msl
index 6e56221..97e011d 100644
--- a/test/tint/builtins/gen/literal/max/e8192f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/max/e8192f.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%max_e8192f = func():void -> %b2 {
-  %b2 = block {
+%max_e8192f = func():void {
+  $B2: {
     %res:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %4:vec2<i32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %max_e8192f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %max_e8192f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %max_e8192f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/min/03c7e3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/min/03c7e3.wgsl.expected.ir.msl
index b9b0fc1..78e3079 100644
--- a/test/tint/builtins/gen/literal/min/03c7e3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/min/03c7e3.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%min_03c7e3 = func():void -> %b2 {
-  %b2 = block {
+%min_03c7e3 = func():void {
+  $B2: {
     %res:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %4:vec2<i32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %min_03c7e3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %min_03c7e3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %min_03c7e3
     ret
   }
diff --git a/test/tint/builtins/gen/literal/min/0dc614.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/min/0dc614.wgsl.expected.ir.msl
index 8e4c216..ea46645 100644
--- a/test/tint/builtins/gen/literal/min/0dc614.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/min/0dc614.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%min_0dc614 = func():void -> %b2 {
-  %b2 = block {
+%min_0dc614 = func():void {
+  $B2: {
     %res:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
     %4:vec4<u32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %min_0dc614
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %min_0dc614
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %min_0dc614
     ret
   }
diff --git a/test/tint/builtins/gen/literal/min/3941e1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/min/3941e1.wgsl.expected.ir.msl
index 0e44fff..0335d07 100644
--- a/test/tint/builtins/gen/literal/min/3941e1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/min/3941e1.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%min_3941e1 = func():void -> %b2 {
-  %b2 = block {
+%min_3941e1 = func():void {
+  $B2: {
     %res:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %4:vec4<i32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %min_3941e1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %min_3941e1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %min_3941e1
     ret
   }
diff --git a/test/tint/builtins/gen/literal/min/46c5d3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/min/46c5d3.wgsl.expected.ir.msl
index b09217a..726e91c 100644
--- a/test/tint/builtins/gen/literal/min/46c5d3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/min/46c5d3.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%min_46c5d3 = func():void -> %b2 {
-  %b2 = block {
+%min_46c5d3 = func():void {
+  $B2: {
     %res:ptr<function, u32, read_write> = var, 1u
     %4:u32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %min_46c5d3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %min_46c5d3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %min_46c5d3
     ret
   }
diff --git a/test/tint/builtins/gen/literal/min/7c710a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/min/7c710a.wgsl.expected.ir.msl
index 0774af0..6e01303 100644
--- a/test/tint/builtins/gen/literal/min/7c710a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/min/7c710a.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%min_7c710a = func():void -> %b2 {
-  %b2 = block {
+%min_7c710a = func():void {
+  $B2: {
     %res:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %4:vec4<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %min_7c710a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %min_7c710a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %min_7c710a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/min/82b28f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/min/82b28f.wgsl.expected.ir.msl
index 43827e5..aad1e9a 100644
--- a/test/tint/builtins/gen/literal/min/82b28f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/min/82b28f.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%min_82b28f = func():void -> %b2 {
-  %b2 = block {
+%min_82b28f = func():void {
+  $B2: {
     %res:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %4:vec2<u32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %min_82b28f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %min_82b28f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %min_82b28f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/min/93cfc4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/min/93cfc4.wgsl.expected.ir.msl
index 2192409..b19675f 100644
--- a/test/tint/builtins/gen/literal/min/93cfc4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/min/93cfc4.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%min_93cfc4 = func():void -> %b2 {
-  %b2 = block {
+%min_93cfc4 = func():void {
+  $B2: {
     %res:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %4:vec3<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %min_93cfc4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %min_93cfc4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %min_93cfc4
     ret
   }
diff --git a/test/tint/builtins/gen/literal/min/a45171.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/min/a45171.wgsl.expected.ir.msl
index 60c1773..a83579a 100644
--- a/test/tint/builtins/gen/literal/min/a45171.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/min/a45171.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%min_a45171 = func():void -> %b2 {
-  %b2 = block {
+%min_a45171 = func():void {
+  $B2: {
     %res:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %4:vec3<i32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %min_a45171
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %min_a45171
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %min_a45171
     ret
   }
diff --git a/test/tint/builtins/gen/literal/min/aa28ad.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/min/aa28ad.wgsl.expected.ir.msl
index 5d160f4..c47de82 100644
--- a/test/tint/builtins/gen/literal/min/aa28ad.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/min/aa28ad.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%min_aa28ad = func():void -> %b2 {
-  %b2 = block {
+%min_aa28ad = func():void {
+  $B2: {
     %res:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %4:vec2<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %min_aa28ad
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %min_aa28ad
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %min_aa28ad
     ret
   }
diff --git a/test/tint/builtins/gen/literal/min/ab0acd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/min/ab0acd.wgsl.expected.ir.msl
index e8b3acc..1c7be54 100644
--- a/test/tint/builtins/gen/literal/min/ab0acd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/min/ab0acd.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%min_ab0acd = func():void -> %b2 {
-  %b2 = block {
+%min_ab0acd = func():void {
+  $B2: {
     %res:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %4:vec3<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %min_ab0acd
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %min_ab0acd
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %min_ab0acd
     ret
   }
diff --git a/test/tint/builtins/gen/literal/min/ac84d6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/min/ac84d6.wgsl.expected.ir.msl
index 5ab8552..3ad3ad6 100644
--- a/test/tint/builtins/gen/literal/min/ac84d6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/min/ac84d6.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%min_ac84d6 = func():void -> %b2 {
-  %b2 = block {
+%min_ac84d6 = func():void {
+  $B2: {
     %res:ptr<function, f16, read_write> = var, 1.0h
     %4:f16 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %min_ac84d6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %min_ac84d6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %min_ac84d6
     ret
   }
diff --git a/test/tint/builtins/gen/literal/min/af326d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/min/af326d.wgsl.expected.ir.msl
index f1678bb..6724e0a 100644
--- a/test/tint/builtins/gen/literal/min/af326d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/min/af326d.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%min_af326d = func():void -> %b2 {
-  %b2 = block {
+%min_af326d = func():void {
+  $B2: {
     %res:ptr<function, f32, read_write> = var, 1.0f
     %4:f32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %min_af326d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %min_af326d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %min_af326d
     ret
   }
diff --git a/test/tint/builtins/gen/literal/min/c70bb7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/min/c70bb7.wgsl.expected.ir.msl
index 6a112a3..c587fde 100644
--- a/test/tint/builtins/gen/literal/min/c70bb7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/min/c70bb7.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%min_c70bb7 = func():void -> %b2 {
-  %b2 = block {
+%min_c70bb7 = func():void {
+  $B2: {
     %res:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %4:vec3<u32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %min_c70bb7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %min_c70bb7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %min_c70bb7
     ret
   }
diff --git a/test/tint/builtins/gen/literal/min/c73147.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/min/c73147.wgsl.expected.ir.msl
index 067568d..a2645f8 100644
--- a/test/tint/builtins/gen/literal/min/c73147.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/min/c73147.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%min_c73147 = func():void -> %b2 {
-  %b2 = block {
+%min_c73147 = func():void {
+  $B2: {
     %res:ptr<function, i32, read_write> = var, 1i
     %4:i32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %min_c73147
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %min_c73147
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %min_c73147
     ret
   }
diff --git a/test/tint/builtins/gen/literal/min/c76fa6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/min/c76fa6.wgsl.expected.ir.msl
index e1387c1..f8cdcb5 100644
--- a/test/tint/builtins/gen/literal/min/c76fa6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/min/c76fa6.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%min_c76fa6 = func():void -> %b2 {
-  %b2 = block {
+%min_c76fa6 = func():void {
+  $B2: {
     %res:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %4:vec4<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %min_c76fa6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %min_c76fa6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %min_c76fa6
     ret
   }
diff --git a/test/tint/builtins/gen/literal/min/e780f9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/min/e780f9.wgsl.expected.ir.msl
index c9945a4..4ae4813 100644
--- a/test/tint/builtins/gen/literal/min/e780f9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/min/e780f9.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%min_e780f9 = func():void -> %b2 {
-  %b2 = block {
+%min_e780f9 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %4:vec2<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %min_e780f9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %min_e780f9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %min_e780f9
     ret
   }
diff --git a/test/tint/builtins/gen/literal/mix/0c8c33.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/mix/0c8c33.wgsl.expected.ir.msl
index 2474a4f..5d6c7e9 100644
--- a/test/tint/builtins/gen/literal/mix/0c8c33.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/mix/0c8c33.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%mix_0c8c33 = func():void -> %b2 {
-  %b2 = block {
+%mix_0c8c33 = func():void {
+  $B2: {
     %res:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %4:vec3<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %mix_0c8c33
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %mix_0c8c33
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %mix_0c8c33
     ret
   }
diff --git a/test/tint/builtins/gen/literal/mix/1faeb1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/mix/1faeb1.wgsl.expected.ir.msl
index 2ef140e..15728d6 100644
--- a/test/tint/builtins/gen/literal/mix/1faeb1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/mix/1faeb1.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%mix_1faeb1 = func():void -> %b2 {
-  %b2 = block {
+%mix_1faeb1 = func():void {
+  $B2: {
     %res:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %4:vec4<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %mix_1faeb1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %mix_1faeb1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %mix_1faeb1
     ret
   }
diff --git a/test/tint/builtins/gen/literal/mix/2fadab.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/mix/2fadab.wgsl.expected.ir.msl
index 8fc3ea2..266bac2 100644
--- a/test/tint/builtins/gen/literal/mix/2fadab.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/mix/2fadab.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%mix_2fadab = func():void -> %b2 {
-  %b2 = block {
+%mix_2fadab = func():void {
+  $B2: {
     %res:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %4:vec2<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %mix_2fadab
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %mix_2fadab
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %mix_2fadab
     ret
   }
diff --git a/test/tint/builtins/gen/literal/mix/315264.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/mix/315264.wgsl.expected.ir.msl
index a6c37e3..1179752 100644
--- a/test/tint/builtins/gen/literal/mix/315264.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/mix/315264.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%mix_315264 = func():void -> %b2 {
-  %b2 = block {
+%mix_315264 = func():void {
+  $B2: {
     %res:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %4:vec3<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %mix_315264
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %mix_315264
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %mix_315264
     ret
   }
diff --git a/test/tint/builtins/gen/literal/mix/38cbbb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/mix/38cbbb.wgsl.expected.ir.msl
index 7fc1fb4..0369647 100644
--- a/test/tint/builtins/gen/literal/mix/38cbbb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/mix/38cbbb.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%mix_38cbbb = func():void -> %b2 {
-  %b2 = block {
+%mix_38cbbb = func():void {
+  $B2: {
     %res:ptr<function, f16, read_write> = var, 1.0h
     %4:f16 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %mix_38cbbb
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %mix_38cbbb
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %mix_38cbbb
     ret
   }
diff --git a/test/tint/builtins/gen/literal/mix/4f0b5e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/mix/4f0b5e.wgsl.expected.ir.msl
index c5fa38b..efa8c04 100644
--- a/test/tint/builtins/gen/literal/mix/4f0b5e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/mix/4f0b5e.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%mix_4f0b5e = func():void -> %b2 {
-  %b2 = block {
+%mix_4f0b5e = func():void {
+  $B2: {
     %res:ptr<function, f32, read_write> = var, 1.0f
     %4:f32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %mix_4f0b5e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %mix_4f0b5e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %mix_4f0b5e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/mix/63f2fd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/mix/63f2fd.wgsl.expected.ir.msl
index c9d8fa9..12c5d1d 100644
--- a/test/tint/builtins/gen/literal/mix/63f2fd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/mix/63f2fd.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%mix_63f2fd = func():void -> %b2 {
-  %b2 = block {
+%mix_63f2fd = func():void {
+  $B2: {
     %res:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %4:vec3<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %mix_63f2fd
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %mix_63f2fd
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %mix_63f2fd
     ret
   }
diff --git a/test/tint/builtins/gen/literal/mix/6f8adc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/mix/6f8adc.wgsl.expected.ir.msl
index 8a904c4..6d9aa83 100644
--- a/test/tint/builtins/gen/literal/mix/6f8adc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/mix/6f8adc.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%mix_6f8adc = func():void -> %b2 {
-  %b2 = block {
+%mix_6f8adc = func():void {
+  $B2: {
     %res:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %4:vec2<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %mix_6f8adc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %mix_6f8adc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %mix_6f8adc
     ret
   }
diff --git a/test/tint/builtins/gen/literal/mix/98ee3e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/mix/98ee3e.wgsl.expected.ir.msl
index 2a3616c..3064ad9 100644
--- a/test/tint/builtins/gen/literal/mix/98ee3e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/mix/98ee3e.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%mix_98ee3e = func():void -> %b2 {
-  %b2 = block {
+%mix_98ee3e = func():void {
+  $B2: {
     %res:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %4:vec2<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %mix_98ee3e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %mix_98ee3e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %mix_98ee3e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/mix/c1aec6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/mix/c1aec6.wgsl.expected.ir.msl
index 34e4807..a08ac54 100644
--- a/test/tint/builtins/gen/literal/mix/c1aec6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/mix/c1aec6.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%mix_c1aec6 = func():void -> %b2 {
-  %b2 = block {
+%mix_c1aec6 = func():void {
+  $B2: {
     %res:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %4:vec3<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %mix_c1aec6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %mix_c1aec6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %mix_c1aec6
     ret
   }
diff --git a/test/tint/builtins/gen/literal/mix/c37ede.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/mix/c37ede.wgsl.expected.ir.msl
index 64d33cd..a979cb9 100644
--- a/test/tint/builtins/gen/literal/mix/c37ede.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/mix/c37ede.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%mix_c37ede = func():void -> %b2 {
-  %b2 = block {
+%mix_c37ede = func():void {
+  $B2: {
     %res:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %4:vec4<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %mix_c37ede
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %mix_c37ede
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %mix_c37ede
     ret
   }
diff --git a/test/tint/builtins/gen/literal/mix/e46a83.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/mix/e46a83.wgsl.expected.ir.msl
index fd31446..77b2515 100644
--- a/test/tint/builtins/gen/literal/mix/e46a83.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/mix/e46a83.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%mix_e46a83 = func():void -> %b2 {
-  %b2 = block {
+%mix_e46a83 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %4:vec2<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %mix_e46a83
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %mix_e46a83
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %mix_e46a83
     ret
   }
diff --git a/test/tint/builtins/gen/literal/mix/ee2468.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/mix/ee2468.wgsl.expected.ir.msl
index feff659..b3671fe 100644
--- a/test/tint/builtins/gen/literal/mix/ee2468.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/mix/ee2468.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%mix_ee2468 = func():void -> %b2 {
-  %b2 = block {
+%mix_ee2468 = func():void {
+  $B2: {
     %res:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %4:vec4<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %mix_ee2468
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %mix_ee2468
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %mix_ee2468
     ret
   }
diff --git a/test/tint/builtins/gen/literal/mix/f1a543.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/mix/f1a543.wgsl.expected.ir.msl
index 488373d..f9641d8 100644
--- a/test/tint/builtins/gen/literal/mix/f1a543.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/mix/f1a543.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%mix_f1a543 = func():void -> %b2 {
-  %b2 = block {
+%mix_f1a543 = func():void {
+  $B2: {
     %res:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %4:vec4<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %mix_f1a543
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %mix_f1a543
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %mix_f1a543
     ret
   }
diff --git a/test/tint/builtins/gen/literal/normalize/39d5ec.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/normalize/39d5ec.wgsl.expected.ir.msl
index dfedcda..38fc652 100644
--- a/test/tint/builtins/gen/literal/normalize/39d5ec.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/normalize/39d5ec.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%normalize_39d5ec = func():void -> %b2 {
-  %b2 = block {
+%normalize_39d5ec = func():void {
+  $B2: {
     %res:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(0.5771484375h)
     %4:vec3<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %normalize_39d5ec
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %normalize_39d5ec
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %normalize_39d5ec
     ret
   }
diff --git a/test/tint/builtins/gen/literal/normalize/64d8c0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/normalize/64d8c0.wgsl.expected.ir.msl
index 19cce1b..c9a9e41 100644
--- a/test/tint/builtins/gen/literal/normalize/64d8c0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/normalize/64d8c0.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%normalize_64d8c0 = func():void -> %b2 {
-  %b2 = block {
+%normalize_64d8c0 = func():void {
+  $B2: {
     %res:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(0.57735025882720947266f)
     %4:vec3<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %normalize_64d8c0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %normalize_64d8c0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %normalize_64d8c0
     ret
   }
diff --git a/test/tint/builtins/gen/literal/normalize/7990f3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/normalize/7990f3.wgsl.expected.ir.msl
index d4fc8f8..9f768ce 100644
--- a/test/tint/builtins/gen/literal/normalize/7990f3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/normalize/7990f3.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%normalize_7990f3 = func():void -> %b2 {
-  %b2 = block {
+%normalize_7990f3 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(0.70703125h)
     %4:vec2<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %normalize_7990f3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %normalize_7990f3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %normalize_7990f3
     ret
   }
diff --git a/test/tint/builtins/gen/literal/normalize/9a0aab.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/normalize/9a0aab.wgsl.expected.ir.msl
index 7ff4385..e3d378d 100644
--- a/test/tint/builtins/gen/literal/normalize/9a0aab.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/normalize/9a0aab.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%normalize_9a0aab = func():void -> %b2 {
-  %b2 = block {
+%normalize_9a0aab = func():void {
+  $B2: {
     %res:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(0.5f)
     %4:vec4<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %normalize_9a0aab
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %normalize_9a0aab
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %normalize_9a0aab
     ret
   }
diff --git a/test/tint/builtins/gen/literal/normalize/b8cb8d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/normalize/b8cb8d.wgsl.expected.ir.msl
index f6651af..f1ee83c 100644
--- a/test/tint/builtins/gen/literal/normalize/b8cb8d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/normalize/b8cb8d.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%normalize_b8cb8d = func():void -> %b2 {
-  %b2 = block {
+%normalize_b8cb8d = func():void {
+  $B2: {
     %res:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(0.5h)
     %4:vec4<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %normalize_b8cb8d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %normalize_b8cb8d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %normalize_b8cb8d
     ret
   }
diff --git a/test/tint/builtins/gen/literal/normalize/fc2ef1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/normalize/fc2ef1.wgsl.expected.ir.msl
index 9178ea4..6a04499 100644
--- a/test/tint/builtins/gen/literal/normalize/fc2ef1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/normalize/fc2ef1.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%normalize_fc2ef1 = func():void -> %b2 {
-  %b2 = block {
+%normalize_fc2ef1 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(0.70710676908493041992f)
     %4:vec2<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %normalize_fc2ef1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %normalize_fc2ef1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %normalize_fc2ef1
     ret
   }
diff --git a/test/tint/builtins/gen/literal/pack2x16float/0e97b3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/pack2x16float/0e97b3.wgsl.expected.ir.msl
index 46764a3..62b7421 100644
--- a/test/tint/builtins/gen/literal/pack2x16float/0e97b3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/pack2x16float/0e97b3.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%pack2x16float_0e97b3 = func():void -> %b2 {
-  %b2 = block {
+%pack2x16float_0e97b3 = func():void {
+  $B2: {
     %res:ptr<function, u32, read_write> = var, 1006648320u
     %4:u32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %pack2x16float_0e97b3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %pack2x16float_0e97b3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %pack2x16float_0e97b3
     ret
   }
diff --git a/test/tint/builtins/gen/literal/pack2x16snorm/6c169b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/pack2x16snorm/6c169b.wgsl.expected.ir.msl
index 6609970..7986bb2 100644
--- a/test/tint/builtins/gen/literal/pack2x16snorm/6c169b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/pack2x16snorm/6c169b.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%pack2x16snorm_6c169b = func():void -> %b2 {
-  %b2 = block {
+%pack2x16snorm_6c169b = func():void {
+  $B2: {
     %res:ptr<function, u32, read_write> = var, 2147450879u
     %4:u32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %pack2x16snorm_6c169b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %pack2x16snorm_6c169b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %pack2x16snorm_6c169b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/pack2x16unorm/0f08e4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/pack2x16unorm/0f08e4.wgsl.expected.ir.msl
index 0cc8fc0..144a96b 100644
--- a/test/tint/builtins/gen/literal/pack2x16unorm/0f08e4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/pack2x16unorm/0f08e4.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%pack2x16unorm_0f08e4 = func():void -> %b2 {
-  %b2 = block {
+%pack2x16unorm_0f08e4 = func():void {
+  $B2: {
     %res:ptr<function, u32, read_write> = var, 4294967295u
     %4:u32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %pack2x16unorm_0f08e4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %pack2x16unorm_0f08e4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %pack2x16unorm_0f08e4
     ret
   }
diff --git a/test/tint/builtins/gen/literal/pack4x8snorm/4d22e7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/pack4x8snorm/4d22e7.wgsl.expected.ir.msl
index f28e156..eccd8f5 100644
--- a/test/tint/builtins/gen/literal/pack4x8snorm/4d22e7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/pack4x8snorm/4d22e7.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%pack4x8snorm_4d22e7 = func():void -> %b2 {
-  %b2 = block {
+%pack4x8snorm_4d22e7 = func():void {
+  $B2: {
     %res:ptr<function, u32, read_write> = var, 2139062143u
     %4:u32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %pack4x8snorm_4d22e7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %pack4x8snorm_4d22e7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %pack4x8snorm_4d22e7
     ret
   }
diff --git a/test/tint/builtins/gen/literal/pack4x8unorm/95c456.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/pack4x8unorm/95c456.wgsl.expected.ir.msl
index bea441f..013f3c5 100644
--- a/test/tint/builtins/gen/literal/pack4x8unorm/95c456.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/pack4x8unorm/95c456.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%pack4x8unorm_95c456 = func():void -> %b2 {
-  %b2 = block {
+%pack4x8unorm_95c456 = func():void {
+  $B2: {
     %res:ptr<function, u32, read_write> = var, 4294967295u
     %4:u32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %pack4x8unorm_95c456
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %pack4x8unorm_95c456
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %pack4x8unorm_95c456
     ret
   }
diff --git a/test/tint/builtins/gen/literal/pack4xI8/bfce01.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/pack4xI8/bfce01.wgsl.expected.ir.msl
new file mode 100644
index 0000000..16cd350
--- /dev/null
+++ b/test/tint/builtins/gen/literal/pack4xI8/bfce01.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
+}
+
+%pack4xI8_bfce01 = func():void {
+  $B2: {
+    %res:ptr<function, u32, read_write> = var, 16843009u
+    %4:u32 = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %pack4xI8_bfce01
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %pack4xI8_bfce01
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %pack4xI8_bfce01
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/pack4xI8Clamp/e42b2a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/pack4xI8Clamp/e42b2a.wgsl.expected.ir.msl
new file mode 100644
index 0000000..315f680
--- /dev/null
+++ b/test/tint/builtins/gen/literal/pack4xI8Clamp/e42b2a.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
+}
+
+%pack4xI8Clamp_e42b2a = func():void {
+  $B2: {
+    %res:ptr<function, u32, read_write> = var, 16843009u
+    %4:u32 = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %pack4xI8Clamp_e42b2a
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %pack4xI8Clamp_e42b2a
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %pack4xI8Clamp_e42b2a
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/pack4xU8/b70b53.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/pack4xU8/b70b53.wgsl.expected.ir.msl
new file mode 100644
index 0000000..b1aaea6
--- /dev/null
+++ b/test/tint/builtins/gen/literal/pack4xU8/b70b53.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
+}
+
+%pack4xU8_b70b53 = func():void {
+  $B2: {
+    %res:ptr<function, u32, read_write> = var, 16843009u
+    %4:u32 = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %pack4xU8_b70b53
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %pack4xU8_b70b53
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %pack4xU8_b70b53
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/pack4xU8Clamp/6b8c1b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/pack4xU8Clamp/6b8c1b.wgsl.expected.ir.msl
new file mode 100644
index 0000000..dafd983
--- /dev/null
+++ b/test/tint/builtins/gen/literal/pack4xU8Clamp/6b8c1b.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
+}
+
+%pack4xU8Clamp_6b8c1b = func():void {
+  $B2: {
+    %res:ptr<function, u32, read_write> = var, 16843009u
+    %4:u32 = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %pack4xU8Clamp_6b8c1b
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %pack4xU8Clamp_6b8c1b
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %pack4xU8Clamp_6b8c1b
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/pow/04a908.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/pow/04a908.wgsl.expected.ir.msl
index 2698c23..d644677 100644
--- a/test/tint/builtins/gen/literal/pow/04a908.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/pow/04a908.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%pow_04a908 = func():void -> %b2 {
-  %b2 = block {
+%pow_04a908 = func():void {
+  $B2: {
     %res:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %4:vec4<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %pow_04a908
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %pow_04a908
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %pow_04a908
     ret
   }
diff --git a/test/tint/builtins/gen/literal/pow/46e029.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/pow/46e029.wgsl.expected.ir.msl
index 56c3f2c..168f07f 100644
--- a/test/tint/builtins/gen/literal/pow/46e029.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/pow/46e029.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%pow_46e029 = func():void -> %b2 {
-  %b2 = block {
+%pow_46e029 = func():void {
+  $B2: {
     %res:ptr<function, f32, read_write> = var, 1.0f
     %4:f32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %pow_46e029
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %pow_46e029
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %pow_46e029
     ret
   }
diff --git a/test/tint/builtins/gen/literal/pow/4a46c9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/pow/4a46c9.wgsl.expected.ir.msl
index 4eed196..d9e9415 100644
--- a/test/tint/builtins/gen/literal/pow/4a46c9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/pow/4a46c9.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%pow_4a46c9 = func():void -> %b2 {
-  %b2 = block {
+%pow_4a46c9 = func():void {
+  $B2: {
     %res:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %4:vec3<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %pow_4a46c9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %pow_4a46c9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %pow_4a46c9
     ret
   }
diff --git a/test/tint/builtins/gen/literal/pow/4f33b2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/pow/4f33b2.wgsl.expected.ir.msl
index c487c87..8523c4f 100644
--- a/test/tint/builtins/gen/literal/pow/4f33b2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/pow/4f33b2.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%pow_4f33b2 = func():void -> %b2 {
-  %b2 = block {
+%pow_4f33b2 = func():void {
+  $B2: {
     %res:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %4:vec4<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %pow_4f33b2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %pow_4f33b2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %pow_4f33b2
     ret
   }
diff --git a/test/tint/builtins/gen/literal/pow/ce9ef5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/pow/ce9ef5.wgsl.expected.ir.msl
index 1eaa9ba..6651ead 100644
--- a/test/tint/builtins/gen/literal/pow/ce9ef5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/pow/ce9ef5.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%pow_ce9ef5 = func():void -> %b2 {
-  %b2 = block {
+%pow_ce9ef5 = func():void {
+  $B2: {
     %res:ptr<function, f16, read_write> = var, 1.0h
     %4:f16 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %pow_ce9ef5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %pow_ce9ef5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %pow_ce9ef5
     ret
   }
diff --git a/test/tint/builtins/gen/literal/pow/e60ea5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/pow/e60ea5.wgsl.expected.ir.msl
index 4c3a685..3a6fb4f 100644
--- a/test/tint/builtins/gen/literal/pow/e60ea5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/pow/e60ea5.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%pow_e60ea5 = func():void -> %b2 {
-  %b2 = block {
+%pow_e60ea5 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %4:vec2<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %pow_e60ea5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %pow_e60ea5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %pow_e60ea5
     ret
   }
diff --git a/test/tint/builtins/gen/literal/pow/f37b25.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/pow/f37b25.wgsl.expected.ir.msl
index b7bb885..06ae3de 100644
--- a/test/tint/builtins/gen/literal/pow/f37b25.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/pow/f37b25.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%pow_f37b25 = func():void -> %b2 {
-  %b2 = block {
+%pow_f37b25 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %4:vec2<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %pow_f37b25
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %pow_f37b25
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %pow_f37b25
     ret
   }
diff --git a/test/tint/builtins/gen/literal/pow/fa5429.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/pow/fa5429.wgsl.expected.ir.msl
index f92068f..8148729 100644
--- a/test/tint/builtins/gen/literal/pow/fa5429.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/pow/fa5429.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%pow_fa5429 = func():void -> %b2 {
-  %b2 = block {
+%pow_fa5429 = func():void {
+  $B2: {
     %res:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %4:vec3<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %pow_fa5429
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %pow_fa5429
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %pow_fa5429
     ret
   }
diff --git a/test/tint/builtins/gen/literal/quantizeToF16/12e50e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/quantizeToF16/12e50e.wgsl.expected.ir.msl
index 6a957b5..0e74e8c 100644
--- a/test/tint/builtins/gen/literal/quantizeToF16/12e50e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/quantizeToF16/12e50e.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%quantizeToF16_12e50e = func():void -> %b2 {
-  %b2 = block {
+%quantizeToF16_12e50e = func():void {
+  $B2: {
     %res:ptr<function, f32, read_write> = var, 1.0f
     %4:f32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %quantizeToF16_12e50e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %quantizeToF16_12e50e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %quantizeToF16_12e50e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/quantizeToF16/2cddf3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/quantizeToF16/2cddf3.wgsl.expected.ir.msl
index 69b0a9c..6a2a1c5 100644
--- a/test/tint/builtins/gen/literal/quantizeToF16/2cddf3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/quantizeToF16/2cddf3.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%quantizeToF16_2cddf3 = func():void -> %b2 {
-  %b2 = block {
+%quantizeToF16_2cddf3 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %4:vec2<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %quantizeToF16_2cddf3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %quantizeToF16_2cddf3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %quantizeToF16_2cddf3
     ret
   }
diff --git a/test/tint/builtins/gen/literal/quantizeToF16/cba294.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/quantizeToF16/cba294.wgsl.expected.ir.msl
index 1c14f90..c7597a6 100644
--- a/test/tint/builtins/gen/literal/quantizeToF16/cba294.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/quantizeToF16/cba294.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%quantizeToF16_cba294 = func():void -> %b2 {
-  %b2 = block {
+%quantizeToF16_cba294 = func():void {
+  $B2: {
     %res:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %4:vec4<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %quantizeToF16_cba294
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %quantizeToF16_cba294
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %quantizeToF16_cba294
     ret
   }
diff --git a/test/tint/builtins/gen/literal/quantizeToF16/e8fd14.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/quantizeToF16/e8fd14.wgsl.expected.ir.msl
index e438505..2c24604 100644
--- a/test/tint/builtins/gen/literal/quantizeToF16/e8fd14.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/quantizeToF16/e8fd14.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%quantizeToF16_e8fd14 = func():void -> %b2 {
-  %b2 = block {
+%quantizeToF16_e8fd14 = func():void {
+  $B2: {
     %res:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %4:vec3<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %quantizeToF16_e8fd14
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %quantizeToF16_e8fd14
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %quantizeToF16_e8fd14
     ret
   }
diff --git a/test/tint/builtins/gen/literal/radians/09b7fc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/radians/09b7fc.wgsl.expected.ir.msl
index c1df59f..848de34 100644
--- a/test/tint/builtins/gen/literal/radians/09b7fc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/radians/09b7fc.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%radians_09b7fc = func():void -> %b2 {
-  %b2 = block {
+%radians_09b7fc = func():void {
+  $B2: {
     %res:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(0.01745329238474369049f)
     %4:vec4<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %radians_09b7fc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %radians_09b7fc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %radians_09b7fc
     ret
   }
diff --git a/test/tint/builtins/gen/literal/radians/208fd9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/radians/208fd9.wgsl.expected.ir.msl
index 1d3b4ca..6da0f4e 100644
--- a/test/tint/builtins/gen/literal/radians/208fd9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/radians/208fd9.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%radians_208fd9 = func():void -> %b2 {
-  %b2 = block {
+%radians_208fd9 = func():void {
+  $B2: {
     %res:ptr<function, f16, read_write> = var, 0.0174407958984375h
     %4:f16 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %radians_208fd9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %radians_208fd9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %radians_208fd9
     ret
   }
diff --git a/test/tint/builtins/gen/literal/radians/44f20b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/radians/44f20b.wgsl.expected.ir.msl
index 617e1d5..259b772 100644
--- a/test/tint/builtins/gen/literal/radians/44f20b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/radians/44f20b.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%radians_44f20b = func():void -> %b2 {
-  %b2 = block {
+%radians_44f20b = func():void {
+  $B2: {
     %res:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(0.0174407958984375h)
     %4:vec4<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %radians_44f20b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %radians_44f20b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %radians_44f20b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/radians/61687a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/radians/61687a.wgsl.expected.ir.msl
index 41c0635..ac59e94 100644
--- a/test/tint/builtins/gen/literal/radians/61687a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/radians/61687a.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%radians_61687a = func():void -> %b2 {
-  %b2 = block {
+%radians_61687a = func():void {
+  $B2: {
     %res:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(0.01745329238474369049f)
     %4:vec2<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %radians_61687a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %radians_61687a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %radians_61687a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/radians/6b0ff2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/radians/6b0ff2.wgsl.expected.ir.msl
index 57ec58f..4c9375d 100644
--- a/test/tint/builtins/gen/literal/radians/6b0ff2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/radians/6b0ff2.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%radians_6b0ff2 = func():void -> %b2 {
-  %b2 = block {
+%radians_6b0ff2 = func():void {
+  $B2: {
     %res:ptr<function, f32, read_write> = var, 0.01745329238474369049f
     %4:f32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %radians_6b0ff2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %radians_6b0ff2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %radians_6b0ff2
     ret
   }
diff --git a/test/tint/builtins/gen/literal/radians/7ea4c7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/radians/7ea4c7.wgsl.expected.ir.msl
index 8eb55d9..6b3986d 100644
--- a/test/tint/builtins/gen/literal/radians/7ea4c7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/radians/7ea4c7.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%radians_7ea4c7 = func():void -> %b2 {
-  %b2 = block {
+%radians_7ea4c7 = func():void {
+  $B2: {
     %res:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(0.0174407958984375h)
     %4:vec3<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %radians_7ea4c7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %radians_7ea4c7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %radians_7ea4c7
     ret
   }
diff --git a/test/tint/builtins/gen/literal/radians/f96258.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/radians/f96258.wgsl.expected.ir.msl
index 4a43e1d..f316677 100644
--- a/test/tint/builtins/gen/literal/radians/f96258.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/radians/f96258.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%radians_f96258 = func():void -> %b2 {
-  %b2 = block {
+%radians_f96258 = func():void {
+  $B2: {
     %res:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(0.01745329238474369049f)
     %4:vec3<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %radians_f96258
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %radians_f96258
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %radians_f96258
     ret
   }
diff --git a/test/tint/builtins/gen/literal/radians/fbacf0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/radians/fbacf0.wgsl.expected.ir.msl
index 481bee9..57b7c98 100644
--- a/test/tint/builtins/gen/literal/radians/fbacf0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/radians/fbacf0.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%radians_fbacf0 = func():void -> %b2 {
-  %b2 = block {
+%radians_fbacf0 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(0.0174407958984375h)
     %4:vec2<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %radians_fbacf0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %radians_fbacf0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %radians_fbacf0
     ret
   }
diff --git a/test/tint/builtins/gen/literal/reflect/05357e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/reflect/05357e.wgsl.expected.ir.msl
index 05dd4a2..4179b0c 100644
--- a/test/tint/builtins/gen/literal/reflect/05357e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/reflect/05357e.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%reflect_05357e = func():void -> %b2 {
-  %b2 = block {
+%reflect_05357e = func():void {
+  $B2: {
     %res:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(-7.0f)
     %4:vec4<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %reflect_05357e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %reflect_05357e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %reflect_05357e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/reflect/310de5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/reflect/310de5.wgsl.expected.ir.msl
index 63c86ef..4583243 100644
--- a/test/tint/builtins/gen/literal/reflect/310de5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/reflect/310de5.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%reflect_310de5 = func():void -> %b2 {
-  %b2 = block {
+%reflect_310de5 = func():void {
+  $B2: {
     %res:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(-7.0h)
     %4:vec4<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %reflect_310de5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %reflect_310de5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %reflect_310de5
     ret
   }
diff --git a/test/tint/builtins/gen/literal/reflect/61ca21.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/reflect/61ca21.wgsl.expected.ir.msl
index 434a990..e9b088b 100644
--- a/test/tint/builtins/gen/literal/reflect/61ca21.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/reflect/61ca21.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%reflect_61ca21 = func():void -> %b2 {
-  %b2 = block {
+%reflect_61ca21 = func():void {
+  $B2: {
     %res:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(-5.0h)
     %4:vec3<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %reflect_61ca21
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %reflect_61ca21
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %reflect_61ca21
     ret
   }
diff --git a/test/tint/builtins/gen/literal/reflect/b61e10.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/reflect/b61e10.wgsl.expected.ir.msl
index 87c0ee6..d0ef78f 100644
--- a/test/tint/builtins/gen/literal/reflect/b61e10.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/reflect/b61e10.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%reflect_b61e10 = func():void -> %b2 {
-  %b2 = block {
+%reflect_b61e10 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(-3.0f)
     %4:vec2<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %reflect_b61e10
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %reflect_b61e10
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %reflect_b61e10
     ret
   }
diff --git a/test/tint/builtins/gen/literal/reflect/bb15ac.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/reflect/bb15ac.wgsl.expected.ir.msl
index 569f506..8b6763e 100644
--- a/test/tint/builtins/gen/literal/reflect/bb15ac.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/reflect/bb15ac.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%reflect_bb15ac = func():void -> %b2 {
-  %b2 = block {
+%reflect_bb15ac = func():void {
+  $B2: {
     %res:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(-3.0h)
     %4:vec2<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %reflect_bb15ac
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %reflect_bb15ac
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %reflect_bb15ac
     ret
   }
diff --git a/test/tint/builtins/gen/literal/reflect/f47fdb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/reflect/f47fdb.wgsl.expected.ir.msl
index bfccefd..2afe379 100644
--- a/test/tint/builtins/gen/literal/reflect/f47fdb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/reflect/f47fdb.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%reflect_f47fdb = func():void -> %b2 {
-  %b2 = block {
+%reflect_f47fdb = func():void {
+  $B2: {
     %res:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(-5.0f)
     %4:vec3<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %reflect_f47fdb
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %reflect_f47fdb
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %reflect_f47fdb
     ret
   }
diff --git a/test/tint/builtins/gen/literal/refract/0594ba.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/refract/0594ba.wgsl.expected.ir.msl
index 821fc76..b4366c8 100644
--- a/test/tint/builtins/gen/literal/refract/0594ba.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/refract/0594ba.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%refract_0594ba = func():void -> %b2 {
-  %b2 = block {
+%refract_0594ba = func():void {
+  $B2: {
     %res:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(-7.0h)
     %4:vec4<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %refract_0594ba
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %refract_0594ba
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %refract_0594ba
     ret
   }
diff --git a/test/tint/builtins/gen/literal/refract/570cb3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/refract/570cb3.wgsl.expected.ir.msl
index 734379d..5780718 100644
--- a/test/tint/builtins/gen/literal/refract/570cb3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/refract/570cb3.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%refract_570cb3 = func():void -> %b2 {
-  %b2 = block {
+%refract_570cb3 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(-3.0h)
     %4:vec2<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %refract_570cb3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %refract_570cb3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %refract_570cb3
     ret
   }
diff --git a/test/tint/builtins/gen/literal/refract/7e02e6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/refract/7e02e6.wgsl.expected.ir.msl
index f443537..64f2529 100644
--- a/test/tint/builtins/gen/literal/refract/7e02e6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/refract/7e02e6.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%refract_7e02e6 = func():void -> %b2 {
-  %b2 = block {
+%refract_7e02e6 = func():void {
+  $B2: {
     %res:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(-7.0f)
     %4:vec4<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %refract_7e02e6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %refract_7e02e6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %refract_7e02e6
     ret
   }
diff --git a/test/tint/builtins/gen/literal/refract/8984af.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/refract/8984af.wgsl.expected.ir.msl
index 7dbc702..b685da1 100644
--- a/test/tint/builtins/gen/literal/refract/8984af.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/refract/8984af.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%refract_8984af = func():void -> %b2 {
-  %b2 = block {
+%refract_8984af = func():void {
+  $B2: {
     %res:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(-5.0h)
     %4:vec3<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %refract_8984af
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %refract_8984af
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %refract_8984af
     ret
   }
diff --git a/test/tint/builtins/gen/literal/refract/cbc1d2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/refract/cbc1d2.wgsl.expected.ir.msl
index e5c7361..ab6cfdc 100644
--- a/test/tint/builtins/gen/literal/refract/cbc1d2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/refract/cbc1d2.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%refract_cbc1d2 = func():void -> %b2 {
-  %b2 = block {
+%refract_cbc1d2 = func():void {
+  $B2: {
     %res:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(-5.0f)
     %4:vec3<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %refract_cbc1d2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %refract_cbc1d2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %refract_cbc1d2
     ret
   }
diff --git a/test/tint/builtins/gen/literal/refract/cd905f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/refract/cd905f.wgsl.expected.ir.msl
index 5457e7e..2781980 100644
--- a/test/tint/builtins/gen/literal/refract/cd905f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/refract/cd905f.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%refract_cd905f = func():void -> %b2 {
-  %b2 = block {
+%refract_cd905f = func():void {
+  $B2: {
     %res:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(-3.0f)
     %4:vec2<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %refract_cd905f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %refract_cd905f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %refract_cd905f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/reverseBits/222177.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/reverseBits/222177.wgsl.expected.ir.msl
index 433ffba..a37f516 100644
--- a/test/tint/builtins/gen/literal/reverseBits/222177.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/reverseBits/222177.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%reverseBits_222177 = func():void -> %b2 {
-  %b2 = block {
+%reverseBits_222177 = func():void {
+  $B2: {
     %res:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(-2147483648i)
     %4:vec2<i32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %reverseBits_222177
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %reverseBits_222177
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %reverseBits_222177
     ret
   }
diff --git a/test/tint/builtins/gen/literal/reverseBits/35fea9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/reverseBits/35fea9.wgsl.expected.ir.msl
index 463f56d..ee87551 100644
--- a/test/tint/builtins/gen/literal/reverseBits/35fea9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/reverseBits/35fea9.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%reverseBits_35fea9 = func():void -> %b2 {
-  %b2 = block {
+%reverseBits_35fea9 = func():void {
+  $B2: {
     %res:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(2147483648u)
     %4:vec4<u32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %reverseBits_35fea9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %reverseBits_35fea9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %reverseBits_35fea9
     ret
   }
diff --git a/test/tint/builtins/gen/literal/reverseBits/4dbd6f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/reverseBits/4dbd6f.wgsl.expected.ir.msl
index 9fefd05..9c2181c 100644
--- a/test/tint/builtins/gen/literal/reverseBits/4dbd6f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/reverseBits/4dbd6f.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%reverseBits_4dbd6f = func():void -> %b2 {
-  %b2 = block {
+%reverseBits_4dbd6f = func():void {
+  $B2: {
     %res:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(-2147483648i)
     %4:vec4<i32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %reverseBits_4dbd6f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %reverseBits_4dbd6f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %reverseBits_4dbd6f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/reverseBits/7c4269.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/reverseBits/7c4269.wgsl.expected.ir.msl
index 4a7d96a..2b75c35 100644
--- a/test/tint/builtins/gen/literal/reverseBits/7c4269.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/reverseBits/7c4269.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%reverseBits_7c4269 = func():void -> %b2 {
-  %b2 = block {
+%reverseBits_7c4269 = func():void {
+  $B2: {
     %res:ptr<function, i32, read_write> = var, -2147483648i
     %4:i32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %reverseBits_7c4269
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %reverseBits_7c4269
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %reverseBits_7c4269
     ret
   }
diff --git a/test/tint/builtins/gen/literal/reverseBits/a6ccd4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/reverseBits/a6ccd4.wgsl.expected.ir.msl
index 0a9f304..b69da10 100644
--- a/test/tint/builtins/gen/literal/reverseBits/a6ccd4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/reverseBits/a6ccd4.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%reverseBits_a6ccd4 = func():void -> %b2 {
-  %b2 = block {
+%reverseBits_a6ccd4 = func():void {
+  $B2: {
     %res:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(2147483648u)
     %4:vec3<u32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %reverseBits_a6ccd4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %reverseBits_a6ccd4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %reverseBits_a6ccd4
     ret
   }
diff --git a/test/tint/builtins/gen/literal/reverseBits/c21bc1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/reverseBits/c21bc1.wgsl.expected.ir.msl
index 4d782f7..213fb35 100644
--- a/test/tint/builtins/gen/literal/reverseBits/c21bc1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/reverseBits/c21bc1.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%reverseBits_c21bc1 = func():void -> %b2 {
-  %b2 = block {
+%reverseBits_c21bc1 = func():void {
+  $B2: {
     %res:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(-2147483648i)
     %4:vec3<i32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %reverseBits_c21bc1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %reverseBits_c21bc1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %reverseBits_c21bc1
     ret
   }
diff --git a/test/tint/builtins/gen/literal/reverseBits/e1f4c1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/reverseBits/e1f4c1.wgsl.expected.ir.msl
index dcd3cbc..501332c 100644
--- a/test/tint/builtins/gen/literal/reverseBits/e1f4c1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/reverseBits/e1f4c1.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%reverseBits_e1f4c1 = func():void -> %b2 {
-  %b2 = block {
+%reverseBits_e1f4c1 = func():void {
+  $B2: {
     %res:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(2147483648u)
     %4:vec2<u32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %reverseBits_e1f4c1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %reverseBits_e1f4c1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %reverseBits_e1f4c1
     ret
   }
diff --git a/test/tint/builtins/gen/literal/reverseBits/e31adf.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/reverseBits/e31adf.wgsl.expected.ir.msl
index ff09b14..bc36578 100644
--- a/test/tint/builtins/gen/literal/reverseBits/e31adf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/reverseBits/e31adf.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%reverseBits_e31adf = func():void -> %b2 {
-  %b2 = block {
+%reverseBits_e31adf = func():void {
+  $B2: {
     %res:ptr<function, u32, read_write> = var, 2147483648u
     %4:u32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %reverseBits_e31adf
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %reverseBits_e31adf
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %reverseBits_e31adf
     ret
   }
diff --git a/test/tint/builtins/gen/literal/round/106c0b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/round/106c0b.wgsl.expected.ir.msl
index 4f89ffe..3938eea 100644
--- a/test/tint/builtins/gen/literal/round/106c0b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/round/106c0b.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%round_106c0b = func():void -> %b2 {
-  %b2 = block {
+%round_106c0b = func():void {
+  $B2: {
     %res:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(4.0f)
     %4:vec4<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %round_106c0b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %round_106c0b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %round_106c0b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/round/1c7897.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/round/1c7897.wgsl.expected.ir.msl
index 8933eb1..e9795c0 100644
--- a/test/tint/builtins/gen/literal/round/1c7897.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/round/1c7897.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%round_1c7897 = func():void -> %b2 {
-  %b2 = block {
+%round_1c7897 = func():void {
+  $B2: {
     %res:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(4.0f)
     %4:vec3<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %round_1c7897
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %round_1c7897
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %round_1c7897
     ret
   }
diff --git a/test/tint/builtins/gen/literal/round/52c84d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/round/52c84d.wgsl.expected.ir.msl
index d3fb1dc..1b32278 100644
--- a/test/tint/builtins/gen/literal/round/52c84d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/round/52c84d.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%round_52c84d = func():void -> %b2 {
-  %b2 = block {
+%round_52c84d = func():void {
+  $B2: {
     %res:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(4.0f)
     %4:vec2<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %round_52c84d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %round_52c84d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %round_52c84d
     ret
   }
diff --git a/test/tint/builtins/gen/literal/round/9078ef.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/round/9078ef.wgsl.expected.ir.msl
index e4df2b7..4eaf8e8 100644
--- a/test/tint/builtins/gen/literal/round/9078ef.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/round/9078ef.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%round_9078ef = func():void -> %b2 {
-  %b2 = block {
+%round_9078ef = func():void {
+  $B2: {
     %res:ptr<function, f16, read_write> = var, 4.0h
     %4:f16 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %round_9078ef
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %round_9078ef
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %round_9078ef
     ret
   }
diff --git a/test/tint/builtins/gen/literal/round/9edc38.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/round/9edc38.wgsl.expected.ir.msl
index d4be21a..6a6c8a4 100644
--- a/test/tint/builtins/gen/literal/round/9edc38.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/round/9edc38.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%round_9edc38 = func():void -> %b2 {
-  %b2 = block {
+%round_9edc38 = func():void {
+  $B2: {
     %res:ptr<function, f32, read_write> = var, 4.0f
     %4:f32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %round_9edc38
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %round_9edc38
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %round_9edc38
     ret
   }
diff --git a/test/tint/builtins/gen/literal/round/d87e84.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/round/d87e84.wgsl.expected.ir.msl
index 5393b66..747acd7 100644
--- a/test/tint/builtins/gen/literal/round/d87e84.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/round/d87e84.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%round_d87e84 = func():void -> %b2 {
-  %b2 = block {
+%round_d87e84 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(4.0h)
     %4:vec2<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %round_d87e84
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %round_d87e84
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %round_d87e84
     ret
   }
diff --git a/test/tint/builtins/gen/literal/round/e1bba2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/round/e1bba2.wgsl.expected.ir.msl
index 50d241e..e250256 100644
--- a/test/tint/builtins/gen/literal/round/e1bba2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/round/e1bba2.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%round_e1bba2 = func():void -> %b2 {
-  %b2 = block {
+%round_e1bba2 = func():void {
+  $B2: {
     %res:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(4.0h)
     %4:vec3<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %round_e1bba2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %round_e1bba2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %round_e1bba2
     ret
   }
diff --git a/test/tint/builtins/gen/literal/round/f665b5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/round/f665b5.wgsl.expected.ir.msl
index c48d125..c7933ed 100644
--- a/test/tint/builtins/gen/literal/round/f665b5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/round/f665b5.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%round_f665b5 = func():void -> %b2 {
-  %b2 = block {
+%round_f665b5 = func():void {
+  $B2: {
     %res:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(4.0h)
     %4:vec4<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %round_f665b5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %round_f665b5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %round_f665b5
     ret
   }
diff --git a/test/tint/builtins/gen/literal/saturate/270da5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/saturate/270da5.wgsl.expected.ir.msl
index c54d046..58d3885 100644
--- a/test/tint/builtins/gen/literal/saturate/270da5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/saturate/270da5.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%saturate_270da5 = func():void -> %b2 {
-  %b2 = block {
+%saturate_270da5 = func():void {
+  $B2: {
     %res:ptr<function, f32, read_write> = var, 1.0f
     %4:f32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %saturate_270da5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %saturate_270da5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %saturate_270da5
     ret
   }
diff --git a/test/tint/builtins/gen/literal/saturate/462535.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/saturate/462535.wgsl.expected.ir.msl
index 4cda04c..b1eceda 100644
--- a/test/tint/builtins/gen/literal/saturate/462535.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/saturate/462535.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%saturate_462535 = func():void -> %b2 {
-  %b2 = block {
+%saturate_462535 = func():void {
+  $B2: {
     %res:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %4:vec3<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %saturate_462535
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %saturate_462535
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %saturate_462535
     ret
   }
diff --git a/test/tint/builtins/gen/literal/saturate/51567f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/saturate/51567f.wgsl.expected.ir.msl
index 69d2e8d..3ad7145 100644
--- a/test/tint/builtins/gen/literal/saturate/51567f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/saturate/51567f.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%saturate_51567f = func():void -> %b2 {
-  %b2 = block {
+%saturate_51567f = func():void {
+  $B2: {
     %res:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %4:vec2<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %saturate_51567f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %saturate_51567f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %saturate_51567f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/saturate/6bcddf.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/saturate/6bcddf.wgsl.expected.ir.msl
index 8c00b2b..0c43f59 100644
--- a/test/tint/builtins/gen/literal/saturate/6bcddf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/saturate/6bcddf.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%saturate_6bcddf = func():void -> %b2 {
-  %b2 = block {
+%saturate_6bcddf = func():void {
+  $B2: {
     %res:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %4:vec3<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %saturate_6bcddf
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %saturate_6bcddf
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %saturate_6bcddf
     ret
   }
diff --git a/test/tint/builtins/gen/literal/saturate/a5b571.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/saturate/a5b571.wgsl.expected.ir.msl
index b68c541..9215e8e 100644
--- a/test/tint/builtins/gen/literal/saturate/a5b571.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/saturate/a5b571.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%saturate_a5b571 = func():void -> %b2 {
-  %b2 = block {
+%saturate_a5b571 = func():void {
+  $B2: {
     %res:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %4:vec4<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %saturate_a5b571
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %saturate_a5b571
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %saturate_a5b571
     ret
   }
diff --git a/test/tint/builtins/gen/literal/saturate/cd2028.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/saturate/cd2028.wgsl.expected.ir.msl
index 261bd1e..aa621ee 100644
--- a/test/tint/builtins/gen/literal/saturate/cd2028.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/saturate/cd2028.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%saturate_cd2028 = func():void -> %b2 {
-  %b2 = block {
+%saturate_cd2028 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %4:vec2<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %saturate_cd2028
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %saturate_cd2028
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %saturate_cd2028
     ret
   }
diff --git a/test/tint/builtins/gen/literal/saturate/dcde71.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/saturate/dcde71.wgsl.expected.ir.msl
index 618ed77..8fb98db 100644
--- a/test/tint/builtins/gen/literal/saturate/dcde71.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/saturate/dcde71.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%saturate_dcde71 = func():void -> %b2 {
-  %b2 = block {
+%saturate_dcde71 = func():void {
+  $B2: {
     %res:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %4:vec4<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %saturate_dcde71
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %saturate_dcde71
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %saturate_dcde71
     ret
   }
diff --git a/test/tint/builtins/gen/literal/saturate/e8df56.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/saturate/e8df56.wgsl.expected.ir.msl
index a0f2d25..adbf785 100644
--- a/test/tint/builtins/gen/literal/saturate/e8df56.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/saturate/e8df56.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%saturate_e8df56 = func():void -> %b2 {
-  %b2 = block {
+%saturate_e8df56 = func():void {
+  $B2: {
     %res:ptr<function, f16, read_write> = var, 1.0h
     %4:f16 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %saturate_e8df56
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %saturate_e8df56
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %saturate_e8df56
     ret
   }
diff --git a/test/tint/builtins/gen/literal/select/00b848.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/00b848.wgsl.expected.ir.msl
index 2f89941..6d76d88 100644
--- a/test/tint/builtins/gen/literal/select/00b848.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/00b848.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%select_00b848 = func():void -> %b2 {
-  %b2 = block {
+%select_00b848 = func():void {
+  $B2: {
     %res:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %4:vec2<i32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %select_00b848
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %select_00b848
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %select_00b848
     ret
   }
diff --git a/test/tint/builtins/gen/literal/select/01e2cd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/01e2cd.wgsl.expected.ir.msl
index 19bcd85..eda7dd8 100644
--- a/test/tint/builtins/gen/literal/select/01e2cd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/01e2cd.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%select_01e2cd = func():void -> %b2 {
-  %b2 = block {
+%select_01e2cd = func():void {
+  $B2: {
     %res:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %4:vec3<i32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %select_01e2cd
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %select_01e2cd
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %select_01e2cd
     ret
   }
diff --git a/test/tint/builtins/gen/literal/select/087ea4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/087ea4.wgsl.expected.ir.msl
index 9cf4453..bcf989b 100644
--- a/test/tint/builtins/gen/literal/select/087ea4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/087ea4.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%select_087ea4 = func():void -> %b2 {
-  %b2 = block {
+%select_087ea4 = func():void {
+  $B2: {
     %res:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
     %4:vec4<u32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %select_087ea4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %select_087ea4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %select_087ea4
     ret
   }
diff --git a/test/tint/builtins/gen/literal/select/10e73b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/10e73b.wgsl.expected.ir.msl
index 9a4bbc6..ae02b21 100644
--- a/test/tint/builtins/gen/literal/select/10e73b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/10e73b.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%select_10e73b = func():void -> %b2 {
-  %b2 = block {
+%select_10e73b = func():void {
+  $B2: {
     %res:ptr<function, f16, read_write> = var, 1.0h
     %4:f16 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %select_10e73b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %select_10e73b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %select_10e73b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/select/1ada2a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/1ada2a.wgsl.expected.ir.msl
index 20feeda..1ab7e87 100644
--- a/test/tint/builtins/gen/literal/select/1ada2a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/1ada2a.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%select_1ada2a = func():void -> %b2 {
-  %b2 = block {
+%select_1ada2a = func():void {
+  $B2: {
     %res:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %4:vec3<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %select_1ada2a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %select_1ada2a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %select_1ada2a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/select/1e960b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/1e960b.wgsl.expected.ir.msl
index 456cc9c..f8d02fb 100644
--- a/test/tint/builtins/gen/literal/select/1e960b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/1e960b.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%select_1e960b = func():void -> %b2 {
-  %b2 = block {
+%select_1e960b = func():void {
+  $B2: {
     %res:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %4:vec2<u32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %select_1e960b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %select_1e960b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %select_1e960b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/select/266aff.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/266aff.wgsl.expected.ir.msl
index 6ac40fd..7898e19 100644
--- a/test/tint/builtins/gen/literal/select/266aff.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/266aff.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%select_266aff = func():void -> %b2 {
-  %b2 = block {
+%select_266aff = func():void {
+  $B2: {
     %res:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %4:vec2<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %select_266aff
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %select_266aff
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %select_266aff
     ret
   }
diff --git a/test/tint/builtins/gen/literal/select/28a27e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/28a27e.wgsl.expected.ir.msl
index 845446e..4721520 100644
--- a/test/tint/builtins/gen/literal/select/28a27e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/28a27e.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%select_28a27e = func():void -> %b2 {
-  %b2 = block {
+%select_28a27e = func():void {
+  $B2: {
     %res:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %4:vec3<u32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %select_28a27e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %select_28a27e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %select_28a27e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/select/3c25ce.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/3c25ce.wgsl.expected.ir.msl
index 51a52ab..1952414 100644
--- a/test/tint/builtins/gen/literal/select/3c25ce.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/3c25ce.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%select_3c25ce = func():void -> %b2 {
-  %b2 = block {
+%select_3c25ce = func():void {
+  $B2: {
     %res:ptr<function, vec3<bool>, read_write> = var, vec3<bool>(true)
     %4:vec3<bool> = load %res
     %5:vec3<bool> = eq %4, vec3<bool>(false)
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %select_3c25ce
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %select_3c25ce
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %select_3c25ce
     ret
   }
diff --git a/test/tint/builtins/gen/literal/select/416e14.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/416e14.wgsl.expected.ir.msl
index 3a3eb31..2169f22 100644
--- a/test/tint/builtins/gen/literal/select/416e14.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/416e14.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%select_416e14 = func():void -> %b2 {
-  %b2 = block {
+%select_416e14 = func():void {
+  $B2: {
     %res:ptr<function, f32, read_write> = var, 1.0f
     %4:f32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %select_416e14
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %select_416e14
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %select_416e14
     ret
   }
diff --git a/test/tint/builtins/gen/literal/select/51b047.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/51b047.wgsl.expected.ir.msl
index fae183e..3b3ad84 100644
--- a/test/tint/builtins/gen/literal/select/51b047.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/51b047.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%select_51b047 = func():void -> %b2 {
-  %b2 = block {
+%select_51b047 = func():void {
+  $B2: {
     %res:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %4:vec2<u32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %select_51b047
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %select_51b047
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %select_51b047
     ret
   }
diff --git a/test/tint/builtins/gen/literal/select/53d518.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/53d518.wgsl.expected.ir.msl
index 97c6777..47c62ae 100644
--- a/test/tint/builtins/gen/literal/select/53d518.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/53d518.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%select_53d518 = func():void -> %b2 {
-  %b2 = block {
+%select_53d518 = func():void {
+  $B2: {
     %res:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %4:vec3<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %select_53d518
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %select_53d518
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %select_53d518
     ret
   }
diff --git a/test/tint/builtins/gen/literal/select/713567.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/713567.wgsl.expected.ir.msl
index dae0fa0..3596694 100644
--- a/test/tint/builtins/gen/literal/select/713567.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/713567.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%select_713567 = func():void -> %b2 {
-  %b2 = block {
+%select_713567 = func():void {
+  $B2: {
     %res:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %4:vec4<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %select_713567
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %select_713567
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %select_713567
     ret
   }
diff --git a/test/tint/builtins/gen/literal/select/78be5f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/78be5f.wgsl.expected.ir.msl
index c1a45f2..7d406fa 100644
--- a/test/tint/builtins/gen/literal/select/78be5f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/78be5f.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%select_78be5f = func():void -> %b2 {
-  %b2 = block {
+%select_78be5f = func():void {
+  $B2: {
     %res:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %4:vec3<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %select_78be5f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %select_78be5f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %select_78be5f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/select/80a9a9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/80a9a9.wgsl.expected.ir.msl
index b964340..fd12708 100644
--- a/test/tint/builtins/gen/literal/select/80a9a9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/80a9a9.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%select_80a9a9 = func():void -> %b2 {
-  %b2 = block {
+%select_80a9a9 = func():void {
+  $B2: {
     %res:ptr<function, vec3<bool>, read_write> = var, vec3<bool>(true)
     %4:vec3<bool> = load %res
     %5:vec3<bool> = eq %4, vec3<bool>(false)
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %select_80a9a9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %select_80a9a9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %select_80a9a9
     ret
   }
diff --git a/test/tint/builtins/gen/literal/select/830dd9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/830dd9.wgsl.expected.ir.msl
index 718895d..f799518 100644
--- a/test/tint/builtins/gen/literal/select/830dd9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/830dd9.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%select_830dd9 = func():void -> %b2 {
-  %b2 = block {
+%select_830dd9 = func():void {
+  $B2: {
     %res:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %4:vec4<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %select_830dd9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %select_830dd9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %select_830dd9
     ret
   }
diff --git a/test/tint/builtins/gen/literal/select/86f9bd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/86f9bd.wgsl.expected.ir.msl
index 456a111..1b32ae8 100644
--- a/test/tint/builtins/gen/literal/select/86f9bd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/86f9bd.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%select_86f9bd = func():void -> %b2 {
-  %b2 = block {
+%select_86f9bd = func():void {
+  $B2: {
     %res:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %4:vec2<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %select_86f9bd
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %select_86f9bd
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %select_86f9bd
     ret
   }
diff --git a/test/tint/builtins/gen/literal/select/8fa62c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/8fa62c.wgsl.expected.ir.msl
index 7e42b51..682d6b2 100644
--- a/test/tint/builtins/gen/literal/select/8fa62c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/8fa62c.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%select_8fa62c = func():void -> %b2 {
-  %b2 = block {
+%select_8fa62c = func():void {
+  $B2: {
     %res:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %4:vec3<i32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %select_8fa62c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %select_8fa62c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %select_8fa62c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/select/99f883.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/99f883.wgsl.expected.ir.msl
index 8dd6ed0..45d3f8a 100644
--- a/test/tint/builtins/gen/literal/select/99f883.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/99f883.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%select_99f883 = func():void -> %b2 {
-  %b2 = block {
+%select_99f883 = func():void {
+  $B2: {
     %res:ptr<function, u32, read_write> = var, 1u
     %4:u32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %select_99f883
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %select_99f883
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %select_99f883
     ret
   }
diff --git a/test/tint/builtins/gen/literal/select/a081f1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/a081f1.wgsl.expected.ir.msl
index 04a4725..d9d447f 100644
--- a/test/tint/builtins/gen/literal/select/a081f1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/a081f1.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%select_a081f1 = func():void -> %b2 {
-  %b2 = block {
+%select_a081f1 = func():void {
+  $B2: {
     %res:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %4:vec4<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %select_a081f1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %select_a081f1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %select_a081f1
     ret
   }
diff --git a/test/tint/builtins/gen/literal/select/a2860e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/a2860e.wgsl.expected.ir.msl
index 58d2952..188330d 100644
--- a/test/tint/builtins/gen/literal/select/a2860e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/a2860e.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%select_a2860e = func():void -> %b2 {
-  %b2 = block {
+%select_a2860e = func():void {
+  $B2: {
     %res:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %4:vec4<i32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %select_a2860e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %select_a2860e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %select_a2860e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/select/ab069f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/ab069f.wgsl.expected.ir.msl
index 24d31d4..bdb67db 100644
--- a/test/tint/builtins/gen/literal/select/ab069f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/ab069f.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%select_ab069f = func():void -> %b2 {
-  %b2 = block {
+%select_ab069f = func():void {
+  $B2: {
     %res:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %4:vec4<i32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %select_ab069f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %select_ab069f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %select_ab069f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/select/b04721.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/b04721.wgsl.expected.ir.msl
index c99db1e..e989ed3 100644
--- a/test/tint/builtins/gen/literal/select/b04721.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/b04721.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%select_b04721 = func():void -> %b2 {
-  %b2 = block {
+%select_b04721 = func():void {
+  $B2: {
     %res:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %4:vec3<u32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %select_b04721
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %select_b04721
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %select_b04721
     ret
   }
diff --git a/test/tint/builtins/gen/literal/select/bb447f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/bb447f.wgsl.expected.ir.msl
index 7c3afed..d1895c3 100644
--- a/test/tint/builtins/gen/literal/select/bb447f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/bb447f.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%select_bb447f = func():void -> %b2 {
-  %b2 = block {
+%select_bb447f = func():void {
+  $B2: {
     %res:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %4:vec2<i32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %select_bb447f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %select_bb447f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %select_bb447f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/select/bb8aae.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/bb8aae.wgsl.expected.ir.msl
index 5660ea2..7b14cdb 100644
--- a/test/tint/builtins/gen/literal/select/bb8aae.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/bb8aae.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%select_bb8aae = func():void -> %b2 {
-  %b2 = block {
+%select_bb8aae = func():void {
+  $B2: {
     %res:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %4:vec4<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %select_bb8aae
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %select_bb8aae
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %select_bb8aae
     ret
   }
diff --git a/test/tint/builtins/gen/literal/select/bf3d29.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/bf3d29.wgsl.expected.ir.msl
index d19eb40..7688386 100644
--- a/test/tint/builtins/gen/literal/select/bf3d29.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/bf3d29.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%select_bf3d29 = func():void -> %b2 {
-  %b2 = block {
+%select_bf3d29 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %4:vec2<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %select_bf3d29
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %select_bf3d29
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %select_bf3d29
     ret
   }
diff --git a/test/tint/builtins/gen/literal/select/c31f9e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/c31f9e.wgsl.expected.ir.msl
index e0d6b3f..2f9ddda 100644
--- a/test/tint/builtins/gen/literal/select/c31f9e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/c31f9e.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%select_c31f9e = func():void -> %b2 {
-  %b2 = block {
+%select_c31f9e = func():void {
+  $B2: {
     %res:ptr<function, bool, read_write> = var, true
     %4:bool = load %res
     %5:bool = eq %4, false
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %select_c31f9e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %select_c31f9e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %select_c31f9e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/select/c41bd1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/c41bd1.wgsl.expected.ir.msl
index 9fa2dd3..003b6da 100644
--- a/test/tint/builtins/gen/literal/select/c41bd1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/c41bd1.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%select_c41bd1 = func():void -> %b2 {
-  %b2 = block {
+%select_c41bd1 = func():void {
+  $B2: {
     %res:ptr<function, vec4<bool>, read_write> = var, vec4<bool>(true)
     %4:vec4<bool> = load %res
     %5:vec4<bool> = eq %4, vec4<bool>(false)
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %select_c41bd1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %select_c41bd1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %select_c41bd1
     ret
   }
diff --git a/test/tint/builtins/gen/literal/select/c4a4ef.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/c4a4ef.wgsl.expected.ir.msl
index 13fc35b..bd3f936 100644
--- a/test/tint/builtins/gen/literal/select/c4a4ef.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/c4a4ef.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%select_c4a4ef = func():void -> %b2 {
-  %b2 = block {
+%select_c4a4ef = func():void {
+  $B2: {
     %res:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
     %4:vec4<u32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %select_c4a4ef
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %select_c4a4ef
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %select_c4a4ef
     ret
   }
diff --git a/test/tint/builtins/gen/literal/select/cb9301.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/cb9301.wgsl.expected.ir.msl
index 7ea47d2..b0a4fce 100644
--- a/test/tint/builtins/gen/literal/select/cb9301.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/cb9301.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%select_cb9301 = func():void -> %b2 {
-  %b2 = block {
+%select_cb9301 = func():void {
+  $B2: {
     %res:ptr<function, vec2<bool>, read_write> = var, vec2<bool>(true)
     %4:vec2<bool> = load %res
     %5:vec2<bool> = eq %4, vec2<bool>(false)
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %select_cb9301
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %select_cb9301
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %select_cb9301
     ret
   }
diff --git a/test/tint/builtins/gen/literal/select/e3e028.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/e3e028.wgsl.expected.ir.msl
index fd050a6..d5d85a7 100644
--- a/test/tint/builtins/gen/literal/select/e3e028.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/e3e028.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%select_e3e028 = func():void -> %b2 {
-  %b2 = block {
+%select_e3e028 = func():void {
+  $B2: {
     %res:ptr<function, vec4<bool>, read_write> = var, vec4<bool>(true)
     %4:vec4<bool> = load %res
     %5:vec4<bool> = eq %4, vec4<bool>(false)
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %select_e3e028
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %select_e3e028
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %select_e3e028
     ret
   }
diff --git a/test/tint/builtins/gen/literal/select/ebfea2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/ebfea2.wgsl.expected.ir.msl
index 3bbb423..8a39293 100644
--- a/test/tint/builtins/gen/literal/select/ebfea2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/ebfea2.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%select_ebfea2 = func():void -> %b2 {
-  %b2 = block {
+%select_ebfea2 = func():void {
+  $B2: {
     %res:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %4:vec3<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %select_ebfea2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %select_ebfea2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %select_ebfea2
     ret
   }
diff --git a/test/tint/builtins/gen/literal/select/ed7c13.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/ed7c13.wgsl.expected.ir.msl
index b831313..8b579a4 100644
--- a/test/tint/builtins/gen/literal/select/ed7c13.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/ed7c13.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%select_ed7c13 = func():void -> %b2 {
-  %b2 = block {
+%select_ed7c13 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %4:vec2<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %select_ed7c13
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %select_ed7c13
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %select_ed7c13
     ret
   }
diff --git a/test/tint/builtins/gen/literal/select/ed8a15.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/ed8a15.wgsl.expected.ir.msl
index b39d0c4..03b9041 100644
--- a/test/tint/builtins/gen/literal/select/ed8a15.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/ed8a15.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%select_ed8a15 = func():void -> %b2 {
-  %b2 = block {
+%select_ed8a15 = func():void {
+  $B2: {
     %res:ptr<function, i32, read_write> = var, 1i
     %4:i32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %select_ed8a15
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %select_ed8a15
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %select_ed8a15
     ret
   }
diff --git a/test/tint/builtins/gen/literal/select/fb7e53.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/fb7e53.wgsl.expected.ir.msl
index 8c85a3b..8dda2db 100644
--- a/test/tint/builtins/gen/literal/select/fb7e53.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/fb7e53.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%select_fb7e53 = func():void -> %b2 {
-  %b2 = block {
+%select_fb7e53 = func():void {
+  $B2: {
     %res:ptr<function, vec2<bool>, read_write> = var, vec2<bool>(true)
     %4:vec2<bool> = load %res
     %5:vec2<bool> = eq %4, vec2<bool>(false)
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %select_fb7e53
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %select_fb7e53
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %select_fb7e53
     ret
   }
diff --git a/test/tint/builtins/gen/literal/sign/159665.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sign/159665.wgsl.expected.ir.msl
index 92f156d..7e58e6e 100644
--- a/test/tint/builtins/gen/literal/sign/159665.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sign/159665.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%sign_159665 = func():void -> %b2 {
-  %b2 = block {
+%sign_159665 = func():void {
+  $B2: {
     %res:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %4:vec3<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %sign_159665
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %sign_159665
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %sign_159665
     ret
   }
diff --git a/test/tint/builtins/gen/literal/sign/160933.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sign/160933.wgsl.expected.ir.msl
index b11441c..2efd39a 100644
--- a/test/tint/builtins/gen/literal/sign/160933.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sign/160933.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%sign_160933 = func():void -> %b2 {
-  %b2 = block {
+%sign_160933 = func():void {
+  $B2: {
     %res:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %4:vec4<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %sign_160933
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %sign_160933
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %sign_160933
     ret
   }
diff --git a/test/tint/builtins/gen/literal/sign/3233fa.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sign/3233fa.wgsl.expected.ir.msl
index bb8db2c..208d895 100644
--- a/test/tint/builtins/gen/literal/sign/3233fa.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sign/3233fa.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%sign_3233fa = func():void -> %b2 {
-  %b2 = block {
+%sign_3233fa = func():void {
+  $B2: {
     %res:ptr<function, i32, read_write> = var, 1i
     %4:i32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %sign_3233fa
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %sign_3233fa
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %sign_3233fa
     ret
   }
diff --git a/test/tint/builtins/gen/literal/sign/58d779.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sign/58d779.wgsl.expected.ir.msl
index b05ccf2..418b757 100644
--- a/test/tint/builtins/gen/literal/sign/58d779.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sign/58d779.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%sign_58d779 = func():void -> %b2 {
-  %b2 = block {
+%sign_58d779 = func():void {
+  $B2: {
     %res:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %4:vec4<i32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %sign_58d779
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %sign_58d779
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %sign_58d779
     ret
   }
diff --git a/test/tint/builtins/gen/literal/sign/5d283a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sign/5d283a.wgsl.expected.ir.msl
index ccf01de..d31a59f 100644
--- a/test/tint/builtins/gen/literal/sign/5d283a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sign/5d283a.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%sign_5d283a = func():void -> %b2 {
-  %b2 = block {
+%sign_5d283a = func():void {
+  $B2: {
     %res:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %4:vec3<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %sign_5d283a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %sign_5d283a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %sign_5d283a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/sign/7c85ea.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sign/7c85ea.wgsl.expected.ir.msl
index 8b3d84d..ea6fb60 100644
--- a/test/tint/builtins/gen/literal/sign/7c85ea.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sign/7c85ea.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%sign_7c85ea = func():void -> %b2 {
-  %b2 = block {
+%sign_7c85ea = func():void {
+  $B2: {
     %res:ptr<function, f16, read_write> = var, 1.0h
     %4:f16 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %sign_7c85ea
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %sign_7c85ea
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %sign_7c85ea
     ret
   }
diff --git a/test/tint/builtins/gen/literal/sign/926015.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sign/926015.wgsl.expected.ir.msl
index ca91a7b..9b7633f 100644
--- a/test/tint/builtins/gen/literal/sign/926015.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sign/926015.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%sign_926015 = func():void -> %b2 {
-  %b2 = block {
+%sign_926015 = func():void {
+  $B2: {
     %res:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %4:vec2<i32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %sign_926015
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %sign_926015
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %sign_926015
     ret
   }
diff --git a/test/tint/builtins/gen/literal/sign/9603b1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sign/9603b1.wgsl.expected.ir.msl
index a8515b7..6efd5c3 100644
--- a/test/tint/builtins/gen/literal/sign/9603b1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sign/9603b1.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%sign_9603b1 = func():void -> %b2 {
-  %b2 = block {
+%sign_9603b1 = func():void {
+  $B2: {
     %res:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %4:vec3<i32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %sign_9603b1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %sign_9603b1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %sign_9603b1
     ret
   }
diff --git a/test/tint/builtins/gen/literal/sign/b8f634.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sign/b8f634.wgsl.expected.ir.msl
index 1b3ec47..5ca0fc8 100644
--- a/test/tint/builtins/gen/literal/sign/b8f634.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sign/b8f634.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%sign_b8f634 = func():void -> %b2 {
-  %b2 = block {
+%sign_b8f634 = func():void {
+  $B2: {
     %res:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %4:vec4<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %sign_b8f634
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %sign_b8f634
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %sign_b8f634
     ret
   }
diff --git a/test/tint/builtins/gen/literal/sign/ccdb3c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sign/ccdb3c.wgsl.expected.ir.msl
index 7f78353..71fd106 100644
--- a/test/tint/builtins/gen/literal/sign/ccdb3c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sign/ccdb3c.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%sign_ccdb3c = func():void -> %b2 {
-  %b2 = block {
+%sign_ccdb3c = func():void {
+  $B2: {
     %res:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %4:vec2<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %sign_ccdb3c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %sign_ccdb3c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %sign_ccdb3c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/sign/d065d8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sign/d065d8.wgsl.expected.ir.msl
index 91f48e4..758b40d 100644
--- a/test/tint/builtins/gen/literal/sign/d065d8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sign/d065d8.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%sign_d065d8 = func():void -> %b2 {
-  %b2 = block {
+%sign_d065d8 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %4:vec2<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %sign_d065d8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %sign_d065d8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %sign_d065d8
     ret
   }
diff --git a/test/tint/builtins/gen/literal/sign/dd790e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sign/dd790e.wgsl.expected.ir.msl
index 37ff2ee..fd44221 100644
--- a/test/tint/builtins/gen/literal/sign/dd790e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sign/dd790e.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%sign_dd790e = func():void -> %b2 {
-  %b2 = block {
+%sign_dd790e = func():void {
+  $B2: {
     %res:ptr<function, f32, read_write> = var, 1.0f
     %4:f32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %sign_dd790e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %sign_dd790e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %sign_dd790e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/sin/01f241.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sin/01f241.wgsl.expected.ir.msl
index ea19785..e44c9d8 100644
--- a/test/tint/builtins/gen/literal/sin/01f241.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sin/01f241.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%sin_01f241 = func():void -> %b2 {
-  %b2 = block {
+%sin_01f241 = func():void {
+  $B2: {
     %res:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %4:vec3<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %sin_01f241
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %sin_01f241
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %sin_01f241
     ret
   }
diff --git a/test/tint/builtins/gen/literal/sin/2c903b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sin/2c903b.wgsl.expected.ir.msl
index ecbac91..152835c 100644
--- a/test/tint/builtins/gen/literal/sin/2c903b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sin/2c903b.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%sin_2c903b = func():void -> %b2 {
-  %b2 = block {
+%sin_2c903b = func():void {
+  $B2: {
     %res:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(0.99951171875h)
     %4:vec3<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %sin_2c903b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %sin_2c903b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %sin_2c903b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/sin/3cca11.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sin/3cca11.wgsl.expected.ir.msl
index 360531a..8e79366 100644
--- a/test/tint/builtins/gen/literal/sin/3cca11.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sin/3cca11.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%sin_3cca11 = func():void -> %b2 {
-  %b2 = block {
+%sin_3cca11 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(0.99951171875h)
     %4:vec2<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %sin_3cca11
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %sin_3cca11
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %sin_3cca11
     ret
   }
diff --git a/test/tint/builtins/gen/literal/sin/4e3979.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sin/4e3979.wgsl.expected.ir.msl
index 3d9328a..c9500e0 100644
--- a/test/tint/builtins/gen/literal/sin/4e3979.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sin/4e3979.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%sin_4e3979 = func():void -> %b2 {
-  %b2 = block {
+%sin_4e3979 = func():void {
+  $B2: {
     %res:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %4:vec4<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %sin_4e3979
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %sin_4e3979
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %sin_4e3979
     ret
   }
diff --git a/test/tint/builtins/gen/literal/sin/5c0712.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sin/5c0712.wgsl.expected.ir.msl
index 8c54ff1..165b11c 100644
--- a/test/tint/builtins/gen/literal/sin/5c0712.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sin/5c0712.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%sin_5c0712 = func():void -> %b2 {
-  %b2 = block {
+%sin_5c0712 = func():void {
+  $B2: {
     %res:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(0.99951171875h)
     %4:vec4<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %sin_5c0712
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %sin_5c0712
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %sin_5c0712
     ret
   }
diff --git a/test/tint/builtins/gen/literal/sin/66a59f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sin/66a59f.wgsl.expected.ir.msl
index 0896783..022f530 100644
--- a/test/tint/builtins/gen/literal/sin/66a59f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sin/66a59f.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%sin_66a59f = func():void -> %b2 {
-  %b2 = block {
+%sin_66a59f = func():void {
+  $B2: {
     %res:ptr<function, f16, read_write> = var, 0.99951171875h
     %4:f16 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %sin_66a59f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %sin_66a59f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %sin_66a59f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/sin/b78c91.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sin/b78c91.wgsl.expected.ir.msl
index 69e468b..583af3c 100644
--- a/test/tint/builtins/gen/literal/sin/b78c91.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sin/b78c91.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%sin_b78c91 = func():void -> %b2 {
-  %b2 = block {
+%sin_b78c91 = func():void {
+  $B2: {
     %res:ptr<function, f32, read_write> = var, 1.0f
     %4:f32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %sin_b78c91
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %sin_b78c91
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %sin_b78c91
     ret
   }
diff --git a/test/tint/builtins/gen/literal/sin/fc8bc4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sin/fc8bc4.wgsl.expected.ir.msl
index 074c7ee..f1954d5 100644
--- a/test/tint/builtins/gen/literal/sin/fc8bc4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sin/fc8bc4.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%sin_fc8bc4 = func():void -> %b2 {
-  %b2 = block {
+%sin_fc8bc4 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %4:vec2<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %sin_fc8bc4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %sin_fc8bc4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %sin_fc8bc4
     ret
   }
diff --git a/test/tint/builtins/gen/literal/sinh/0908c1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sinh/0908c1.wgsl.expected.ir.msl
index 54f8dee..f797d71 100644
--- a/test/tint/builtins/gen/literal/sinh/0908c1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sinh/0908c1.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%sinh_0908c1 = func():void -> %b2 {
-  %b2 = block {
+%sinh_0908c1 = func():void {
+  $B2: {
     %res:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.1748046875h)
     %4:vec3<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %sinh_0908c1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %sinh_0908c1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %sinh_0908c1
     ret
   }
diff --git a/test/tint/builtins/gen/literal/sinh/445e33.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sinh/445e33.wgsl.expected.ir.msl
index 7c256d9..6203fff 100644
--- a/test/tint/builtins/gen/literal/sinh/445e33.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sinh/445e33.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%sinh_445e33 = func():void -> %b2 {
-  %b2 = block {
+%sinh_445e33 = func():void {
+  $B2: {
     %res:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.17520117759704589844f)
     %4:vec4<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %sinh_445e33
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %sinh_445e33
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %sinh_445e33
     ret
   }
diff --git a/test/tint/builtins/gen/literal/sinh/69cce2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sinh/69cce2.wgsl.expected.ir.msl
index 6f31ebe..9ddebef 100644
--- a/test/tint/builtins/gen/literal/sinh/69cce2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sinh/69cce2.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%sinh_69cce2 = func():void -> %b2 {
-  %b2 = block {
+%sinh_69cce2 = func():void {
+  $B2: {
     %res:ptr<function, f16, read_write> = var, 1.1748046875h
     %4:f16 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %sinh_69cce2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %sinh_69cce2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %sinh_69cce2
     ret
   }
diff --git a/test/tint/builtins/gen/literal/sinh/7bb598.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sinh/7bb598.wgsl.expected.ir.msl
index 930447d..378c024 100644
--- a/test/tint/builtins/gen/literal/sinh/7bb598.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sinh/7bb598.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%sinh_7bb598 = func():void -> %b2 {
-  %b2 = block {
+%sinh_7bb598 = func():void {
+  $B2: {
     %res:ptr<function, f32, read_write> = var, 1.17520117759704589844f
     %4:f32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %sinh_7bb598
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %sinh_7bb598
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %sinh_7bb598
     ret
   }
diff --git a/test/tint/builtins/gen/literal/sinh/924f19.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sinh/924f19.wgsl.expected.ir.msl
index f67c8dd..93d4ab5 100644
--- a/test/tint/builtins/gen/literal/sinh/924f19.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sinh/924f19.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%sinh_924f19 = func():void -> %b2 {
-  %b2 = block {
+%sinh_924f19 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.1748046875h)
     %4:vec2<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %sinh_924f19
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %sinh_924f19
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %sinh_924f19
     ret
   }
diff --git a/test/tint/builtins/gen/literal/sinh/b9860e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sinh/b9860e.wgsl.expected.ir.msl
index d237f4d..f8e221d 100644
--- a/test/tint/builtins/gen/literal/sinh/b9860e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sinh/b9860e.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%sinh_b9860e = func():void -> %b2 {
-  %b2 = block {
+%sinh_b9860e = func():void {
+  $B2: {
     %res:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.17520117759704589844f)
     %4:vec2<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %sinh_b9860e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %sinh_b9860e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %sinh_b9860e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/sinh/ba7e25.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sinh/ba7e25.wgsl.expected.ir.msl
index e74b9ec..f90ff72 100644
--- a/test/tint/builtins/gen/literal/sinh/ba7e25.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sinh/ba7e25.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%sinh_ba7e25 = func():void -> %b2 {
-  %b2 = block {
+%sinh_ba7e25 = func():void {
+  $B2: {
     %res:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.1748046875h)
     %4:vec4<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %sinh_ba7e25
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %sinh_ba7e25
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %sinh_ba7e25
     ret
   }
diff --git a/test/tint/builtins/gen/literal/sinh/c9a5eb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sinh/c9a5eb.wgsl.expected.ir.msl
index fbce9dc..c8d2e3a 100644
--- a/test/tint/builtins/gen/literal/sinh/c9a5eb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sinh/c9a5eb.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%sinh_c9a5eb = func():void -> %b2 {
-  %b2 = block {
+%sinh_c9a5eb = func():void {
+  $B2: {
     %res:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.17520117759704589844f)
     %4:vec3<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %sinh_c9a5eb
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %sinh_c9a5eb
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %sinh_c9a5eb
     ret
   }
diff --git a/test/tint/builtins/gen/literal/smoothstep/12c031.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/smoothstep/12c031.wgsl.expected.ir.msl
index 663e4f8..fa3ba83 100644
--- a/test/tint/builtins/gen/literal/smoothstep/12c031.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/smoothstep/12c031.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%smoothstep_12c031 = func():void -> %b2 {
-  %b2 = block {
+%smoothstep_12c031 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(0.5h)
     %4:vec2<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %smoothstep_12c031
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %smoothstep_12c031
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %smoothstep_12c031
     ret
   }
diff --git a/test/tint/builtins/gen/literal/smoothstep/392c19.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/smoothstep/392c19.wgsl.expected.ir.msl
index ff332d9..b5145ef 100644
--- a/test/tint/builtins/gen/literal/smoothstep/392c19.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/smoothstep/392c19.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%smoothstep_392c19 = func():void -> %b2 {
-  %b2 = block {
+%smoothstep_392c19 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(0.5f)
     %4:vec2<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %smoothstep_392c19
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %smoothstep_392c19
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %smoothstep_392c19
     ret
   }
diff --git a/test/tint/builtins/gen/literal/smoothstep/40864c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/smoothstep/40864c.wgsl.expected.ir.msl
index 20b1907..a851b91 100644
--- a/test/tint/builtins/gen/literal/smoothstep/40864c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/smoothstep/40864c.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%smoothstep_40864c = func():void -> %b2 {
-  %b2 = block {
+%smoothstep_40864c = func():void {
+  $B2: {
     %res:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(0.5f)
     %4:vec4<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %smoothstep_40864c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %smoothstep_40864c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %smoothstep_40864c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/smoothstep/586e12.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/smoothstep/586e12.wgsl.expected.ir.msl
index 940cea1..f3a7a60 100644
--- a/test/tint/builtins/gen/literal/smoothstep/586e12.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/smoothstep/586e12.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%smoothstep_586e12 = func():void -> %b2 {
-  %b2 = block {
+%smoothstep_586e12 = func():void {
+  $B2: {
     %res:ptr<function, f16, read_write> = var, 0.5h
     %4:f16 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %smoothstep_586e12
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %smoothstep_586e12
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %smoothstep_586e12
     ret
   }
diff --git a/test/tint/builtins/gen/literal/smoothstep/6c4975.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/smoothstep/6c4975.wgsl.expected.ir.msl
index 7a8ad73..5d2cd2e 100644
--- a/test/tint/builtins/gen/literal/smoothstep/6c4975.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/smoothstep/6c4975.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%smoothstep_6c4975 = func():void -> %b2 {
-  %b2 = block {
+%smoothstep_6c4975 = func():void {
+  $B2: {
     %res:ptr<function, f32, read_write> = var, 0.5f
     %4:f32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %smoothstep_6c4975
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %smoothstep_6c4975
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %smoothstep_6c4975
     ret
   }
diff --git a/test/tint/builtins/gen/literal/smoothstep/6e7a74.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/smoothstep/6e7a74.wgsl.expected.ir.msl
index 7afdea7..c19a8eb 100644
--- a/test/tint/builtins/gen/literal/smoothstep/6e7a74.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/smoothstep/6e7a74.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%smoothstep_6e7a74 = func():void -> %b2 {
-  %b2 = block {
+%smoothstep_6e7a74 = func():void {
+  $B2: {
     %res:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(0.5h)
     %4:vec3<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %smoothstep_6e7a74
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %smoothstep_6e7a74
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %smoothstep_6e7a74
     ret
   }
diff --git a/test/tint/builtins/gen/literal/smoothstep/aad1db.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/smoothstep/aad1db.wgsl.expected.ir.msl
index 23f5292..79b9b3c 100644
--- a/test/tint/builtins/gen/literal/smoothstep/aad1db.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/smoothstep/aad1db.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%smoothstep_aad1db = func():void -> %b2 {
-  %b2 = block {
+%smoothstep_aad1db = func():void {
+  $B2: {
     %res:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(0.5f)
     %4:vec3<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %smoothstep_aad1db
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %smoothstep_aad1db
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %smoothstep_aad1db
     ret
   }
diff --git a/test/tint/builtins/gen/literal/smoothstep/c43ebd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/smoothstep/c43ebd.wgsl.expected.ir.msl
index c07b275..a777dac 100644
--- a/test/tint/builtins/gen/literal/smoothstep/c43ebd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/smoothstep/c43ebd.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%smoothstep_c43ebd = func():void -> %b2 {
-  %b2 = block {
+%smoothstep_c43ebd = func():void {
+  $B2: {
     %res:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(0.5h)
     %4:vec4<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %smoothstep_c43ebd
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %smoothstep_c43ebd
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %smoothstep_c43ebd
     ret
   }
diff --git a/test/tint/builtins/gen/literal/sqrt/20c74e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sqrt/20c74e.wgsl.expected.ir.msl
index 5cd7769..f08ab08 100644
--- a/test/tint/builtins/gen/literal/sqrt/20c74e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sqrt/20c74e.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%sqrt_20c74e = func():void -> %b2 {
-  %b2 = block {
+%sqrt_20c74e = func():void {
+  $B2: {
     %res:ptr<function, f32, read_write> = var, 1.0f
     %4:f32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %sqrt_20c74e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %sqrt_20c74e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %sqrt_20c74e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/sqrt/803d1c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sqrt/803d1c.wgsl.expected.ir.msl
index bca2421..a8611b4 100644
--- a/test/tint/builtins/gen/literal/sqrt/803d1c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sqrt/803d1c.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%sqrt_803d1c = func():void -> %b2 {
-  %b2 = block {
+%sqrt_803d1c = func():void {
+  $B2: {
     %res:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %4:vec4<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %sqrt_803d1c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %sqrt_803d1c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %sqrt_803d1c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/sqrt/895a0c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sqrt/895a0c.wgsl.expected.ir.msl
index 937a36b..1aa0330 100644
--- a/test/tint/builtins/gen/literal/sqrt/895a0c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sqrt/895a0c.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%sqrt_895a0c = func():void -> %b2 {
-  %b2 = block {
+%sqrt_895a0c = func():void {
+  $B2: {
     %res:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %4:vec3<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %sqrt_895a0c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %sqrt_895a0c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %sqrt_895a0c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/sqrt/8c7024.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sqrt/8c7024.wgsl.expected.ir.msl
index 0f7ac24..2b6a953 100644
--- a/test/tint/builtins/gen/literal/sqrt/8c7024.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sqrt/8c7024.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%sqrt_8c7024 = func():void -> %b2 {
-  %b2 = block {
+%sqrt_8c7024 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %4:vec2<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %sqrt_8c7024
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %sqrt_8c7024
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %sqrt_8c7024
     ret
   }
diff --git a/test/tint/builtins/gen/literal/sqrt/aa0d7a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sqrt/aa0d7a.wgsl.expected.ir.msl
index 5bee23d..fafa6e5 100644
--- a/test/tint/builtins/gen/literal/sqrt/aa0d7a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sqrt/aa0d7a.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%sqrt_aa0d7a = func():void -> %b2 {
-  %b2 = block {
+%sqrt_aa0d7a = func():void {
+  $B2: {
     %res:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %4:vec4<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %sqrt_aa0d7a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %sqrt_aa0d7a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %sqrt_aa0d7a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/sqrt/d9ab4d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sqrt/d9ab4d.wgsl.expected.ir.msl
index 1dd2058..7f8f0fd 100644
--- a/test/tint/builtins/gen/literal/sqrt/d9ab4d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sqrt/d9ab4d.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%sqrt_d9ab4d = func():void -> %b2 {
-  %b2 = block {
+%sqrt_d9ab4d = func():void {
+  $B2: {
     %res:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %4:vec2<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %sqrt_d9ab4d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %sqrt_d9ab4d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %sqrt_d9ab4d
     ret
   }
diff --git a/test/tint/builtins/gen/literal/sqrt/ec33e9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sqrt/ec33e9.wgsl.expected.ir.msl
index 26d86ee..dd03040 100644
--- a/test/tint/builtins/gen/literal/sqrt/ec33e9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sqrt/ec33e9.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%sqrt_ec33e9 = func():void -> %b2 {
-  %b2 = block {
+%sqrt_ec33e9 = func():void {
+  $B2: {
     %res:ptr<function, f16, read_write> = var, 1.0h
     %4:f16 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %sqrt_ec33e9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %sqrt_ec33e9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %sqrt_ec33e9
     ret
   }
diff --git a/test/tint/builtins/gen/literal/sqrt/f8c59a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sqrt/f8c59a.wgsl.expected.ir.msl
index 5abe356..25fc369 100644
--- a/test/tint/builtins/gen/literal/sqrt/f8c59a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sqrt/f8c59a.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%sqrt_f8c59a = func():void -> %b2 {
-  %b2 = block {
+%sqrt_f8c59a = func():void {
+  $B2: {
     %res:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %4:vec3<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %sqrt_f8c59a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %sqrt_f8c59a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %sqrt_f8c59a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/step/07cb06.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/step/07cb06.wgsl.expected.ir.msl
index 6e80971..c0e9c09 100644
--- a/test/tint/builtins/gen/literal/step/07cb06.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/step/07cb06.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%step_07cb06 = func():void -> %b2 {
-  %b2 = block {
+%step_07cb06 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %4:vec2<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %step_07cb06
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %step_07cb06
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %step_07cb06
     ret
   }
diff --git a/test/tint/builtins/gen/literal/step/0b073b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/step/0b073b.wgsl.expected.ir.msl
index e9bac3b..8344c29 100644
--- a/test/tint/builtins/gen/literal/step/0b073b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/step/0b073b.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%step_0b073b = func():void -> %b2 {
-  %b2 = block {
+%step_0b073b = func():void {
+  $B2: {
     %res:ptr<function, f32, read_write> = var, 1.0f
     %4:f32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %step_0b073b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %step_0b073b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %step_0b073b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/step/19accd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/step/19accd.wgsl.expected.ir.msl
index 255e3c0..07c20bc 100644
--- a/test/tint/builtins/gen/literal/step/19accd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/step/19accd.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%step_19accd = func():void -> %b2 {
-  %b2 = block {
+%step_19accd = func():void {
+  $B2: {
     %res:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %4:vec2<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %step_19accd
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %step_19accd
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %step_19accd
     ret
   }
diff --git a/test/tint/builtins/gen/literal/step/334303.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/step/334303.wgsl.expected.ir.msl
index fe65602..c8cdc21 100644
--- a/test/tint/builtins/gen/literal/step/334303.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/step/334303.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%step_334303 = func():void -> %b2 {
-  %b2 = block {
+%step_334303 = func():void {
+  $B2: {
     %res:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %4:vec3<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %step_334303
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %step_334303
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %step_334303
     ret
   }
diff --git a/test/tint/builtins/gen/literal/step/630d07.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/step/630d07.wgsl.expected.ir.msl
index 20bf478..cbd9ea0 100644
--- a/test/tint/builtins/gen/literal/step/630d07.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/step/630d07.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%step_630d07 = func():void -> %b2 {
-  %b2 = block {
+%step_630d07 = func():void {
+  $B2: {
     %res:ptr<function, f16, read_write> = var, 1.0h
     %4:f16 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %step_630d07
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %step_630d07
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %step_630d07
     ret
   }
diff --git a/test/tint/builtins/gen/literal/step/baa320.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/step/baa320.wgsl.expected.ir.msl
index 2943a97..184b4e2 100644
--- a/test/tint/builtins/gen/literal/step/baa320.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/step/baa320.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%step_baa320 = func():void -> %b2 {
-  %b2 = block {
+%step_baa320 = func():void {
+  $B2: {
     %res:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %4:vec4<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %step_baa320
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %step_baa320
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %step_baa320
     ret
   }
diff --git a/test/tint/builtins/gen/literal/step/cc6b61.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/step/cc6b61.wgsl.expected.ir.msl
index a884bd5..2a0a3d6 100644
--- a/test/tint/builtins/gen/literal/step/cc6b61.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/step/cc6b61.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%step_cc6b61 = func():void -> %b2 {
-  %b2 = block {
+%step_cc6b61 = func():void {
+  $B2: {
     %res:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %4:vec3<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %step_cc6b61
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %step_cc6b61
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %step_cc6b61
     ret
   }
diff --git a/test/tint/builtins/gen/literal/step/e2b337.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/step/e2b337.wgsl.expected.ir.msl
index eff242a..100b9b2 100644
--- a/test/tint/builtins/gen/literal/step/e2b337.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/step/e2b337.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%step_e2b337 = func():void -> %b2 {
-  %b2 = block {
+%step_e2b337 = func():void {
+  $B2: {
     %res:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %4:vec4<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %step_e2b337
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %step_e2b337
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %step_e2b337
     ret
   }
diff --git a/test/tint/builtins/gen/literal/subgroupBallot/7e6d0e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/subgroupBallot/7e6d0e.wgsl.expected.ir.msl
index 5bf6eab..c9de677 100644
--- a/test/tint/builtins/gen/literal/subgroupBallot/7e6d0e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/subgroupBallot/7e6d0e.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%subgroupBallot_7e6d0e = func():void -> %b2 {
-  %b2 = block {
+%subgroupBallot_7e6d0e = func():void {
+  $B2: {
     %3:vec4<u32> = subgroupBallot
     %res:ptr<function, vec4<u32>, read_write> = var, %3
     %5:vec4<u32> = load %res
@@ -13,8 +13,8 @@
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %7:void = call %subgroupBallot_7e6d0e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/subgroupBroadcast/07e2d8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/subgroupBroadcast/07e2d8.wgsl.expected.ir.msl
new file mode 100644
index 0000000..9adced4
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupBroadcast/07e2d8.wgsl.expected.ir.msl
@@ -0,0 +1,29 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
+}
+
+%subgroupBroadcast_07e2d8 = func():void {
+  $B2: {
+    %3:f16 = subgroupBroadcast 1.0h, 1u
+    %res:ptr<function, f16, read_write> = var, %3
+    %5:f16 = load %res
+    store %prevent_dce, %5
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
+    %7:void = call %subgroupBroadcast_07e2d8
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/subgroupBroadcast/08beca.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/subgroupBroadcast/08beca.wgsl.expected.ir.msl
index 20b6e28..34c7b15 100644
--- a/test/tint/builtins/gen/literal/subgroupBroadcast/08beca.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/subgroupBroadcast/08beca.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%subgroupBroadcast_08beca = func():void -> %b2 {
-  %b2 = block {
+%subgroupBroadcast_08beca = func():void {
+  $B2: {
     %3:f32 = subgroupBroadcast 1.0f, 1u
     %res:ptr<function, f32, read_write> = var, %3
     %5:f32 = load %res
@@ -13,8 +13,8 @@
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %7:void = call %subgroupBroadcast_08beca
     ret
   }
diff --git a/test/tint/builtins/gen/literal/subgroupBroadcast/0f44e2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/subgroupBroadcast/0f44e2.wgsl.expected.ir.msl
new file mode 100644
index 0000000..a65f913
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupBroadcast/0f44e2.wgsl.expected.ir.msl
@@ -0,0 +1,29 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
+}
+
+%subgroupBroadcast_0f44e2 = func():void {
+  $B2: {
+    %3:vec4<f16> = subgroupBroadcast vec4<f16>(1.0h), 1u
+    %res:ptr<function, vec4<f16>, read_write> = var, %3
+    %5:vec4<f16> = load %res
+    store %prevent_dce, %5
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
+    %7:void = call %subgroupBroadcast_0f44e2
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/subgroupBroadcast/13f36c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/subgroupBroadcast/13f36c.wgsl.expected.ir.msl
new file mode 100644
index 0000000..4d4ef64
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupBroadcast/13f36c.wgsl.expected.ir.msl
@@ -0,0 +1,29 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
+}
+
+%subgroupBroadcast_13f36c = func():void {
+  $B2: {
+    %3:vec2<f16> = subgroupBroadcast vec2<f16>(1.0h), 1u
+    %res:ptr<function, vec2<f16>, read_write> = var, %3
+    %5:vec2<f16> = load %res
+    store %prevent_dce, %5
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
+    %7:void = call %subgroupBroadcast_13f36c
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/subgroupBroadcast/1d79c7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/subgroupBroadcast/1d79c7.wgsl.expected.ir.msl
index e85fb13..63daf07 100644
--- a/test/tint/builtins/gen/literal/subgroupBroadcast/1d79c7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/subgroupBroadcast/1d79c7.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%subgroupBroadcast_1d79c7 = func():void -> %b2 {
-  %b2 = block {
+%subgroupBroadcast_1d79c7 = func():void {
+  $B2: {
     %3:i32 = subgroupBroadcast 1i, 1u
     %res:ptr<function, i32, read_write> = var, %3
     %5:i32 = load %res
@@ -13,8 +13,8 @@
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %7:void = call %subgroupBroadcast_1d79c7
     ret
   }
diff --git a/test/tint/builtins/gen/literal/subgroupBroadcast/279027.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/subgroupBroadcast/279027.wgsl.expected.ir.msl
new file mode 100644
index 0000000..679738c
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupBroadcast/279027.wgsl.expected.ir.msl
@@ -0,0 +1,29 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
+}
+
+%subgroupBroadcast_279027 = func():void {
+  $B2: {
+    %3:vec4<u32> = subgroupBroadcast vec4<u32>(1u), 1u
+    %res:ptr<function, vec4<u32>, read_write> = var, %3
+    %5:vec4<u32> = load %res
+    store %prevent_dce, %5
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
+    %7:void = call %subgroupBroadcast_279027
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/subgroupBroadcast/34fa3d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/subgroupBroadcast/34fa3d.wgsl.expected.ir.msl
new file mode 100644
index 0000000..80f19a1
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupBroadcast/34fa3d.wgsl.expected.ir.msl
@@ -0,0 +1,29 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
+}
+
+%subgroupBroadcast_34fa3d = func():void {
+  $B2: {
+    %3:vec3<u32> = subgroupBroadcast vec3<u32>(1u), 1u
+    %res:ptr<function, vec3<u32>, read_write> = var, %3
+    %5:vec3<u32> = load %res
+    store %prevent_dce, %5
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
+    %7:void = call %subgroupBroadcast_34fa3d
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/subgroupBroadcast/3e6879.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/subgroupBroadcast/3e6879.wgsl.expected.ir.msl
new file mode 100644
index 0000000..35f09ee
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupBroadcast/3e6879.wgsl.expected.ir.msl
@@ -0,0 +1,29 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec2<i32>, read_write> = var @binding_point(2, 0)
+}
+
+%subgroupBroadcast_3e6879 = func():void {
+  $B2: {
+    %3:vec2<i32> = subgroupBroadcast vec2<i32>(1i), 1u
+    %res:ptr<function, vec2<i32>, read_write> = var, %3
+    %5:vec2<i32> = load %res
+    store %prevent_dce, %5
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
+    %7:void = call %subgroupBroadcast_3e6879
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/subgroupBroadcast/41e5d7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/subgroupBroadcast/41e5d7.wgsl.expected.ir.msl
new file mode 100644
index 0000000..ae9da25
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupBroadcast/41e5d7.wgsl.expected.ir.msl
@@ -0,0 +1,29 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
+}
+
+%subgroupBroadcast_41e5d7 = func():void {
+  $B2: {
+    %3:vec3<f16> = subgroupBroadcast vec3<f16>(1.0h), 1u
+    %res:ptr<function, vec3<f16>, read_write> = var, %3
+    %5:vec3<f16> = load %res
+    store %prevent_dce, %5
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
+    %7:void = call %subgroupBroadcast_41e5d7
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/subgroupBroadcast/4a4334.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/subgroupBroadcast/4a4334.wgsl.expected.ir.msl
new file mode 100644
index 0000000..f5c29ef
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupBroadcast/4a4334.wgsl.expected.ir.msl
@@ -0,0 +1,29 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
+}
+
+%subgroupBroadcast_4a4334 = func():void {
+  $B2: {
+    %3:vec2<u32> = subgroupBroadcast vec2<u32>(1u), 1u
+    %res:ptr<function, vec2<u32>, read_write> = var, %3
+    %5:vec2<u32> = load %res
+    store %prevent_dce, %5
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
+    %7:void = call %subgroupBroadcast_4a4334
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/subgroupBroadcast/5196c8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/subgroupBroadcast/5196c8.wgsl.expected.ir.msl
new file mode 100644
index 0000000..01efdcb
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupBroadcast/5196c8.wgsl.expected.ir.msl
@@ -0,0 +1,29 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%subgroupBroadcast_5196c8 = func():void {
+  $B2: {
+    %3:vec2<f32> = subgroupBroadcast vec2<f32>(1.0f), 1u
+    %res:ptr<function, vec2<f32>, read_write> = var, %3
+    %5:vec2<f32> = load %res
+    store %prevent_dce, %5
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
+    %7:void = call %subgroupBroadcast_5196c8
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/subgroupBroadcast/912ff5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/subgroupBroadcast/912ff5.wgsl.expected.ir.msl
new file mode 100644
index 0000000..5c9af34
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupBroadcast/912ff5.wgsl.expected.ir.msl
@@ -0,0 +1,29 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%subgroupBroadcast_912ff5 = func():void {
+  $B2: {
+    %3:vec3<f32> = subgroupBroadcast vec3<f32>(1.0f), 1u
+    %res:ptr<function, vec3<f32>, read_write> = var, %3
+    %5:vec3<f32> = load %res
+    store %prevent_dce, %5
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
+    %7:void = call %subgroupBroadcast_912ff5
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/subgroupBroadcast/b7e93b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/subgroupBroadcast/b7e93b.wgsl.expected.ir.msl
new file mode 100644
index 0000000..a695582
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupBroadcast/b7e93b.wgsl.expected.ir.msl
@@ -0,0 +1,29 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%subgroupBroadcast_b7e93b = func():void {
+  $B2: {
+    %3:vec4<f32> = subgroupBroadcast vec4<f32>(1.0f), 1u
+    %res:ptr<function, vec4<f32>, read_write> = var, %3
+    %5:vec4<f32> = load %res
+    store %prevent_dce, %5
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
+    %7:void = call %subgroupBroadcast_b7e93b
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/subgroupBroadcast/c36fe1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/subgroupBroadcast/c36fe1.wgsl.expected.ir.msl
index 39dc1f9..17ec2f5 100644
--- a/test/tint/builtins/gen/literal/subgroupBroadcast/c36fe1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/subgroupBroadcast/c36fe1.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%subgroupBroadcast_c36fe1 = func():void -> %b2 {
-  %b2 = block {
+%subgroupBroadcast_c36fe1 = func():void {
+  $B2: {
     %3:u32 = subgroupBroadcast 1u, 1u
     %res:ptr<function, u32, read_write> = var, %3
     %5:u32 = load %res
@@ -13,8 +13,8 @@
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %7:void = call %subgroupBroadcast_c36fe1
     ret
   }
diff --git a/test/tint/builtins/gen/literal/subgroupBroadcast/e275c8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/subgroupBroadcast/e275c8.wgsl.expected.ir.msl
new file mode 100644
index 0000000..c6955be
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupBroadcast/e275c8.wgsl.expected.ir.msl
@@ -0,0 +1,29 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec3<i32>, read_write> = var @binding_point(2, 0)
+}
+
+%subgroupBroadcast_e275c8 = func():void {
+  $B2: {
+    %3:vec3<i32> = subgroupBroadcast vec3<i32>(1i), 1u
+    %res:ptr<function, vec3<i32>, read_write> = var, %3
+    %5:vec3<i32> = load %res
+    store %prevent_dce, %5
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
+    %7:void = call %subgroupBroadcast_e275c8
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/subgroupBroadcast/f637f9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/subgroupBroadcast/f637f9.wgsl.expected.ir.msl
new file mode 100644
index 0000000..c623b8c
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupBroadcast/f637f9.wgsl.expected.ir.msl
@@ -0,0 +1,29 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
+}
+
+%subgroupBroadcast_f637f9 = func():void {
+  $B2: {
+    %3:vec4<i32> = subgroupBroadcast vec4<i32>(1i), 1u
+    %res:ptr<function, vec4<i32>, read_write> = var, %3
+    %5:vec4<i32> = load %res
+    store %prevent_dce, %5
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
+    %7:void = call %subgroupBroadcast_f637f9
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/tan/244e2a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/tan/244e2a.wgsl.expected.ir.msl
index b3dcbbe..818ddd4 100644
--- a/test/tint/builtins/gen/literal/tan/244e2a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/tan/244e2a.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%tan_244e2a = func():void -> %b2 {
-  %b2 = block {
+%tan_244e2a = func():void {
+  $B2: {
     %res:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.55740773677825927734f)
     %4:vec4<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %tan_244e2a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %tan_244e2a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %tan_244e2a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/tan/2f030e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/tan/2f030e.wgsl.expected.ir.msl
index c2fe9bf..cc74f56 100644
--- a/test/tint/builtins/gen/literal/tan/2f030e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/tan/2f030e.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%tan_2f030e = func():void -> %b2 {
-  %b2 = block {
+%tan_2f030e = func():void {
+  $B2: {
     %res:ptr<function, f32, read_write> = var, 1.55740773677825927734f
     %4:f32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %tan_2f030e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %tan_2f030e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %tan_2f030e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/tan/539e54.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/tan/539e54.wgsl.expected.ir.msl
index d8dc623..95f54cc 100644
--- a/test/tint/builtins/gen/literal/tan/539e54.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/tan/539e54.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%tan_539e54 = func():void -> %b2 {
-  %b2 = block {
+%tan_539e54 = func():void {
+  $B2: {
     %res:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.556640625h)
     %4:vec4<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %tan_539e54
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %tan_539e54
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %tan_539e54
     ret
   }
diff --git a/test/tint/builtins/gen/literal/tan/7ea104.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/tan/7ea104.wgsl.expected.ir.msl
index c8fbd11..e35b401 100644
--- a/test/tint/builtins/gen/literal/tan/7ea104.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/tan/7ea104.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%tan_7ea104 = func():void -> %b2 {
-  %b2 = block {
+%tan_7ea104 = func():void {
+  $B2: {
     %res:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.55740773677825927734f)
     %4:vec3<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %tan_7ea104
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %tan_7ea104
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %tan_7ea104
     ret
   }
diff --git a/test/tint/builtins/gen/literal/tan/8ce3e9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/tan/8ce3e9.wgsl.expected.ir.msl
index e6bfb77..a2d7872 100644
--- a/test/tint/builtins/gen/literal/tan/8ce3e9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/tan/8ce3e9.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%tan_8ce3e9 = func():void -> %b2 {
-  %b2 = block {
+%tan_8ce3e9 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.55740773677825927734f)
     %4:vec2<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %tan_8ce3e9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %tan_8ce3e9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %tan_8ce3e9
     ret
   }
diff --git a/test/tint/builtins/gen/literal/tan/9f7c9c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/tan/9f7c9c.wgsl.expected.ir.msl
index 0be28c4..6572bb2 100644
--- a/test/tint/builtins/gen/literal/tan/9f7c9c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/tan/9f7c9c.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%tan_9f7c9c = func():void -> %b2 {
-  %b2 = block {
+%tan_9f7c9c = func():void {
+  $B2: {
     %res:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.556640625h)
     %4:vec2<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %tan_9f7c9c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %tan_9f7c9c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %tan_9f7c9c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/tan/d4d491.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/tan/d4d491.wgsl.expected.ir.msl
index b5e3620..c114bdb 100644
--- a/test/tint/builtins/gen/literal/tan/d4d491.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/tan/d4d491.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%tan_d4d491 = func():void -> %b2 {
-  %b2 = block {
+%tan_d4d491 = func():void {
+  $B2: {
     %res:ptr<function, f16, read_write> = var, 1.556640625h
     %4:f16 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %tan_d4d491
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %tan_d4d491
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %tan_d4d491
     ret
   }
diff --git a/test/tint/builtins/gen/literal/tan/db0456.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/tan/db0456.wgsl.expected.ir.msl
index 7dad027..1228f5f 100644
--- a/test/tint/builtins/gen/literal/tan/db0456.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/tan/db0456.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%tan_db0456 = func():void -> %b2 {
-  %b2 = block {
+%tan_db0456 = func():void {
+  $B2: {
     %res:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.556640625h)
     %4:vec3<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %tan_db0456
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %tan_db0456
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %tan_db0456
     ret
   }
diff --git a/test/tint/builtins/gen/literal/tanh/06a4fe.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/tanh/06a4fe.wgsl.expected.ir.msl
index 0ac54a9..c5ea369 100644
--- a/test/tint/builtins/gen/literal/tanh/06a4fe.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/tanh/06a4fe.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%tanh_06a4fe = func():void -> %b2 {
-  %b2 = block {
+%tanh_06a4fe = func():void {
+  $B2: {
     %res:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(0.76123046875h)
     %4:vec3<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %tanh_06a4fe
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %tanh_06a4fe
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %tanh_06a4fe
     ret
   }
diff --git a/test/tint/builtins/gen/literal/tanh/5663c5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/tanh/5663c5.wgsl.expected.ir.msl
index 8999406..3bc7003 100644
--- a/test/tint/builtins/gen/literal/tanh/5663c5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/tanh/5663c5.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%tanh_5663c5 = func():void -> %b2 {
-  %b2 = block {
+%tanh_5663c5 = func():void {
+  $B2: {
     %res:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(0.76159417629241943359f)
     %4:vec4<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %tanh_5663c5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %tanh_5663c5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %tanh_5663c5
     ret
   }
diff --git a/test/tint/builtins/gen/literal/tanh/5724b3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/tanh/5724b3.wgsl.expected.ir.msl
index 9814c16..2dc6de2 100644
--- a/test/tint/builtins/gen/literal/tanh/5724b3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/tanh/5724b3.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%tanh_5724b3 = func():void -> %b2 {
-  %b2 = block {
+%tanh_5724b3 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(0.76159417629241943359f)
     %4:vec2<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %tanh_5724b3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %tanh_5724b3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %tanh_5724b3
     ret
   }
diff --git a/test/tint/builtins/gen/literal/tanh/5b19af.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/tanh/5b19af.wgsl.expected.ir.msl
index 1b967e7..f7193b9 100644
--- a/test/tint/builtins/gen/literal/tanh/5b19af.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/tanh/5b19af.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%tanh_5b19af = func():void -> %b2 {
-  %b2 = block {
+%tanh_5b19af = func():void {
+  $B2: {
     %res:ptr<function, f16, read_write> = var, 0.76123046875h
     %4:f16 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %tanh_5b19af
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %tanh_5b19af
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %tanh_5b19af
     ret
   }
diff --git a/test/tint/builtins/gen/literal/tanh/6d105a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/tanh/6d105a.wgsl.expected.ir.msl
index 2b535a2..54dda19 100644
--- a/test/tint/builtins/gen/literal/tanh/6d105a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/tanh/6d105a.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%tanh_6d105a = func():void -> %b2 {
-  %b2 = block {
+%tanh_6d105a = func():void {
+  $B2: {
     %res:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(0.76123046875h)
     %4:vec2<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %tanh_6d105a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %tanh_6d105a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %tanh_6d105a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/tanh/9f9fb9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/tanh/9f9fb9.wgsl.expected.ir.msl
index f817dc3..c4c0aac 100644
--- a/test/tint/builtins/gen/literal/tanh/9f9fb9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/tanh/9f9fb9.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%tanh_9f9fb9 = func():void -> %b2 {
-  %b2 = block {
+%tanh_9f9fb9 = func():void {
+  $B2: {
     %res:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(0.76159417629241943359f)
     %4:vec3<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %tanh_9f9fb9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %tanh_9f9fb9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %tanh_9f9fb9
     ret
   }
diff --git a/test/tint/builtins/gen/literal/tanh/c15fdb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/tanh/c15fdb.wgsl.expected.ir.msl
index df3b319..c84f3f5 100644
--- a/test/tint/builtins/gen/literal/tanh/c15fdb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/tanh/c15fdb.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%tanh_c15fdb = func():void -> %b2 {
-  %b2 = block {
+%tanh_c15fdb = func():void {
+  $B2: {
     %res:ptr<function, f32, read_write> = var, 0.76159417629241943359f
     %4:f32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %tanh_c15fdb
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %tanh_c15fdb
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %tanh_c15fdb
     ret
   }
diff --git a/test/tint/builtins/gen/literal/tanh/e8efb3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/tanh/e8efb3.wgsl.expected.ir.msl
index 35d180a..a8db501 100644
--- a/test/tint/builtins/gen/literal/tanh/e8efb3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/tanh/e8efb3.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%tanh_e8efb3 = func():void -> %b2 {
-  %b2 = block {
+%tanh_e8efb3 = func():void {
+  $B2: {
     %res:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(0.76123046875h)
     %4:vec4<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %tanh_e8efb3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %tanh_e8efb3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %tanh_e8efb3
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/00229f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/00229f.wgsl.expected.ir.msl
new file mode 100644
index 0000000..849a6c6
--- /dev/null
+++ b/test/tint/builtins/gen/literal/textureDimensions/00229f.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_3d<r8unorm, read>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
+}
+
+%textureDimensions_00229f = func():void {
+  $B2: {
+    %4:texture_storage_3d<r8unorm, read> = load %arg_0
+    %5:vec3<u32> = textureDimensions %4
+    %res:ptr<function, vec3<u32>, read_write> = var, %5
+    %7:vec3<u32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %textureDimensions_00229f
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %textureDimensions_00229f
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %textureDimensions_00229f
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/textureDimensions/00348c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/00348c.wgsl.expected.ir.msl
index 8d68a23..6e14327 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/00348c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/00348c.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_multisampled_2d<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_00348c = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_00348c = func():void {
+  $B2: {
     %4:texture_multisampled_2d<i32> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_00348c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_00348c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_00348c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/01e21e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/01e21e.wgsl.expected.ir.msl
index ffa7c60..4ef958d 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/01e21e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/01e21e.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rg32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_01e21e = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_01e21e = func():void {
+  $B2: {
     %4:texture_storage_1d<rg32uint, read_write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_01e21e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_01e21e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_01e21e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/01edb1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/01edb1.wgsl.expected.ir.msl
index f60ef0a..76d62ec 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/01edb1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/01edb1.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_01edb1 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_01edb1 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba8uint, read_write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_01edb1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_01edb1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_01edb1
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/022903.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/022903.wgsl.expected.ir.msl
index 2dcd3a7..7232e7e 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/022903.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/022903.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_1d<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_022903 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_022903 = func():void {
+  $B2: {
     %4:texture_1d<i32> = load %arg_0
     %5:u32 = textureDimensions %4, 1u
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_022903
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_022903
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_022903
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/0276ec.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/0276ec.wgsl.expected.ir.msl
index 4566e1d..4cfbfbf 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/0276ec.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/0276ec.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba16uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_0276ec = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_0276ec = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba16uint, read_write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_0276ec
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_0276ec
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_0276ec
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/029589.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/029589.wgsl.expected.ir.msl
index 757d7e1..b729de4 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/029589.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/029589.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_029589 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_029589 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rg32float, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_029589
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_029589
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_029589
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/0329b0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/0329b0.wgsl.expected.ir.msl
index 8a14bb0..e8cd0aa 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/0329b0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/0329b0.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba16sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_0329b0 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_0329b0 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba16sint, read> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_0329b0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_0329b0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_0329b0
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/033195.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/033195.wgsl.expected.ir.msl
index e49dfb0..66ff65b 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/033195.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/033195.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba16float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_033195 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_033195 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba16float, read_write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_033195
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_033195
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_033195
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/033ea7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/033ea7.wgsl.expected.ir.msl
index 4c507bc..94e7998 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/033ea7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/033ea7.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8unorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_033ea7 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_033ea7 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba8unorm, read> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_033ea7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_033ea7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_033ea7
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/038847.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/038847.wgsl.expected.ir.msl
index 1a095bd..095c18f 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/038847.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/038847.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_038847 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_038847 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba8sint, read_write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_038847
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_038847
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_038847
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/03f81e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/03f81e.wgsl.expected.ir.msl
index 34ff61d..2c6ddcf 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/03f81e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/03f81e.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_03f81e = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_03f81e = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba8snorm, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_03f81e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_03f81e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_03f81e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/07f1ba.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/07f1ba.wgsl.expected.ir.msl
index 0aa01df..7bd43fe 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/07f1ba.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/07f1ba.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba16float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_07f1ba = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_07f1ba = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba16float, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_07f1ba
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_07f1ba
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_07f1ba
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/088918.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/088918.wgsl.expected.ir.msl
index 9fa6c50..8b222cb 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/088918.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/088918.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8unorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_088918 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_088918 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba8unorm, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_088918
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_088918
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_088918
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/0890c6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/0890c6.wgsl.expected.ir.msl
index acb375d..601df6f 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/0890c6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/0890c6.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_0890c6 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_0890c6 = func():void {
+  $B2: {
     %4:texture_3d<f32> = load %arg_0
     %5:vec3<u32> = textureDimensions %4, 1u
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_0890c6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_0890c6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_0890c6
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/08e371.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/08e371.wgsl.expected.ir.msl
index d5226e8..b091661 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/08e371.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/08e371.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rg32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_08e371 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_08e371 = func():void {
+  $B2: {
     %4:texture_storage_2d<rg32sint, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_08e371
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_08e371
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_08e371
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/09140b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/09140b.wgsl.expected.ir.msl
index d24c56c..7cecfa5 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/09140b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/09140b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba32uint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_09140b = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_09140b = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba32uint, write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_09140b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_09140b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_09140b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/0973c9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/0973c9.wgsl.expected.ir.msl
index 8ab572f..939d739 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/0973c9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/0973c9.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba16uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_0973c9 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_0973c9 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba16uint, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_0973c9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_0973c9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_0973c9
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/0baa0d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/0baa0d.wgsl.expected.ir.msl
index 7d67b05..3fe3ba8 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/0baa0d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/0baa0d.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<r32float, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_0baa0d = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_0baa0d = func():void {
+  $B2: {
     %4:texture_storage_2d<r32float, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_0baa0d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_0baa0d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_0baa0d
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/0c0b0c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/0c0b0c.wgsl.expected.ir.msl
index de886b1..2b0db04 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/0c0b0c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/0c0b0c.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba16float, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_0c0b0c = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_0c0b0c = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba16float, write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_0c0b0c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_0c0b0c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_0c0b0c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/0d4a7c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/0d4a7c.wgsl.expected.ir.msl
index 1ca0ae8..587df6b 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/0d4a7c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/0d4a7c.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_0d4a7c = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_0d4a7c = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba32uint, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_0d4a7c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_0d4a7c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_0d4a7c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/0de70c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/0de70c.wgsl.expected.ir.msl
index 7a8d115..6abd491 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/0de70c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/0de70c.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_0de70c = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_0de70c = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba8unorm, read_write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_0de70c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_0de70c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_0de70c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/0ff9a4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/0ff9a4.wgsl.expected.ir.msl
index baf1eb7..ebdcefa 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/0ff9a4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/0ff9a4.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_cube_array, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_0ff9a4 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_0ff9a4 = func():void {
+  $B2: {
     %4:texture_depth_cube_array = load %arg_0
     %5:vec2<u32> = textureDimensions %4, 1i
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_0ff9a4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_0ff9a4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_0ff9a4
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/135176.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/135176.wgsl.expected.ir.msl
index fec379a..8bf1674 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/135176.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/135176.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_135176 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_135176 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<r32float, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_135176
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_135176
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_135176
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/13f8db.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/13f8db.wgsl.expected.ir.msl
index 8f4e319..022bcd6 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/13f8db.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/13f8db.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_13f8db = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_13f8db = func():void {
+  $B2: {
     %4:texture_2d<f32> = load %arg_0
     %5:vec2<u32> = textureDimensions %4, 1u
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_13f8db
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_13f8db
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_13f8db
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/1417dd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/1417dd.wgsl.expected.ir.msl
index 29807be..8a98008 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/1417dd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/1417dd.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba16sint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_1417dd = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_1417dd = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba16sint, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_1417dd
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_1417dd
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_1417dd
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/15aa17.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/15aa17.wgsl.expected.ir.msl
index 2409c0a..0d1b2e3 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/15aa17.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/15aa17.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba32sint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_15aa17 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_15aa17 = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba32sint, write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_15aa17
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_15aa17
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_15aa17
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/15b577.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/15b577.wgsl.expected.ir.msl
index 72f2f75..a2d9dc6 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/15b577.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/15b577.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_15b577 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_15b577 = func():void {
+  $B2: {
     %4:texture_2d<u32> = load %arg_0
     %5:vec2<u32> = textureDimensions %4, 1i
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_15b577
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_15b577
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_15b577
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/18160d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/18160d.wgsl.expected.ir.msl
new file mode 100644
index 0000000..6c1d710
--- /dev/null
+++ b/test/tint/builtins/gen/literal/textureDimensions/18160d.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_2d<r8unorm, read_write>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
+}
+
+%textureDimensions_18160d = func():void {
+  $B2: {
+    %4:texture_storage_2d<r8unorm, read_write> = load %arg_0
+    %5:vec2<u32> = textureDimensions %4
+    %res:ptr<function, vec2<u32>, read_write> = var, %5
+    %7:vec2<u32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %textureDimensions_18160d
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %textureDimensions_18160d
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %textureDimensions_18160d
+    ret
+  }
+}
+
+invalid access control for storage texture
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/textureDimensions/18f19f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/18f19f.wgsl.expected.ir.msl
new file mode 100644
index 0000000..5c1e999
--- /dev/null
+++ b/test/tint/builtins/gen/literal/textureDimensions/18f19f.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_2d<r8unorm, write>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
+}
+
+%textureDimensions_18f19f = func():void {
+  $B2: {
+    %4:texture_storage_2d<r8unorm, write> = load %arg_0
+    %5:vec2<u32> = textureDimensions %4
+    %res:ptr<function, vec2<u32>, read_write> = var, %5
+    %7:vec2<u32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %textureDimensions_18f19f
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %textureDimensions_18f19f
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %textureDimensions_18f19f
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/textureDimensions/1a2be7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/1a2be7.wgsl.expected.ir.msl
index 7cd2b86..f4d7661 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/1a2be7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/1a2be7.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_1a2be7 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_1a2be7 = func():void {
+  $B2: {
     %4:texture_3d<i32> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_1a2be7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_1a2be7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_1a2be7
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/1b720f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/1b720f.wgsl.expected.ir.msl
index a738c11..087679b 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/1b720f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/1b720f.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba16sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_1b720f = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_1b720f = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba16sint, read> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_1b720f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_1b720f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_1b720f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/1bc428.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/1bc428.wgsl.expected.ir.msl
index e249f83..b74d04f 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/1bc428.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/1bc428.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_1bc428 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_1bc428 = func():void {
+  $B2: {
     %4:texture_3d<f32> = load %arg_0
     %5:vec3<u32> = textureDimensions %4, 1i
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_1bc428
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_1bc428
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_1bc428
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/1bd78c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/1bd78c.wgsl.expected.ir.msl
index 9d29d4e..c3ac928 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/1bd78c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/1bd78c.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_1bd78c = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_1bd78c = func():void {
+  $B2: {
     %4:texture_2d<f32> = load %arg_0
     %5:vec2<u32> = textureDimensions %4, 1i
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_1bd78c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_1bd78c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_1bd78c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/1e4024.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/1e4024.wgsl.expected.ir.msl
index 1a146fc..e098f08 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/1e4024.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/1e4024.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<r32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_1e4024 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_1e4024 = func():void {
+  $B2: {
     %4:texture_storage_2d<r32float, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_1e4024
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_1e4024
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_1e4024
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/20eaad.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/20eaad.wgsl.expected.ir.msl
index 46a827c..f40f3ce 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/20eaad.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/20eaad.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba16sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_20eaad = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_20eaad = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba16sint, read_write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_20eaad
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_20eaad
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_20eaad
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/20ecef.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/20ecef.wgsl.expected.ir.msl
index c4765b3..a316b4f 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/20ecef.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/20ecef.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<r32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_20ecef = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_20ecef = func():void {
+  $B2: {
     %4:texture_storage_1d<r32float, read_write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_20ecef
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_20ecef
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_20ecef
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/212362.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/212362.wgsl.expected.ir.msl
index d514f3c..9ae2b94 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/212362.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/212362.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<r32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_212362 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_212362 = func():void {
+  $B2: {
     %4:texture_storage_1d<r32float, read> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_212362
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_212362
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_212362
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/224113.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/224113.wgsl.expected.ir.msl
index f0a7bc7..01a873d 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/224113.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/224113.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8unorm, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_224113 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_224113 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba8unorm, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_224113
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_224113
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_224113
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/22b5b6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/22b5b6.wgsl.expected.ir.msl
index 171ab73..62e3a16 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/22b5b6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/22b5b6.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube_array<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_22b5b6 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_22b5b6 = func():void {
+  $B2: {
     %4:texture_cube_array<u32> = load %arg_0
     %5:vec2<u32> = textureDimensions %4, 1i
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_22b5b6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_22b5b6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_22b5b6
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/24db07.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/24db07.wgsl.expected.ir.msl
index d8558ea..a6dfb5c 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/24db07.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/24db07.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_24db07 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_24db07 = func():void {
+  $B2: {
     %4:texture_2d<f32> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_24db07
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_24db07
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_24db07
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/25d284.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/25d284.wgsl.expected.ir.msl
new file mode 100644
index 0000000..0da591d
--- /dev/null
+++ b/test/tint/builtins/gen/literal/textureDimensions/25d284.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_2d_array<r8unorm, write>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
+}
+
+%textureDimensions_25d284 = func():void {
+  $B2: {
+    %4:texture_storage_2d_array<r8unorm, write> = load %arg_0
+    %5:vec2<u32> = textureDimensions %4
+    %res:ptr<function, vec2<u32>, read_write> = var, %5
+    %7:vec2<u32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %textureDimensions_25d284
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %textureDimensions_25d284
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %textureDimensions_25d284
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/textureDimensions/2674d8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/2674d8.wgsl.expected.ir.msl
index 3f48aee..d004de9 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/2674d8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/2674d8.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32uint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_2674d8 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_2674d8 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rg32uint, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_2674d8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_2674d8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_2674d8
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/268ddb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/268ddb.wgsl.expected.ir.msl
index 40f698d..f3ace0c 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/268ddb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/268ddb.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_268ddb = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_268ddb = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba32uint, read> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_268ddb
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_268ddb
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_268ddb
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/26d6bf.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/26d6bf.wgsl.expected.ir.msl
index 029b3f6..c1f845d 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/26d6bf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/26d6bf.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_1d<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_26d6bf = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_26d6bf = func():void {
+  $B2: {
     %4:texture_1d<f32> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_26d6bf
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_26d6bf
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_26d6bf
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/282978.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/282978.wgsl.expected.ir.msl
new file mode 100644
index 0000000..44c95a1
--- /dev/null
+++ b/test/tint/builtins/gen/literal/textureDimensions/282978.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_3d<r8unorm, read_write>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
+}
+
+%textureDimensions_282978 = func():void {
+  $B2: {
+    %4:texture_storage_3d<r8unorm, read_write> = load %arg_0
+    %5:vec3<u32> = textureDimensions %4
+    %res:ptr<function, vec3<u32>, read_write> = var, %5
+    %7:vec3<u32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %textureDimensions_282978
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %textureDimensions_282978
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %textureDimensions_282978
+    ret
+  }
+}
+
+invalid access control for storage texture
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/textureDimensions/283b58.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/283b58.wgsl.expected.ir.msl
index 60f523a..e76cc22 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/283b58.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/283b58.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_283b58 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_283b58 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba32float, read_write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_283b58
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_283b58
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_283b58
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/284c27.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/284c27.wgsl.expected.ir.msl
index 84f17ba..7d0faea 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/284c27.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/284c27.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rg32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_284c27 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_284c27 = func():void {
+  $B2: {
     %4:texture_storage_1d<rg32float, read> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_284c27
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_284c27
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_284c27
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/2a58b7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/2a58b7.wgsl.expected.ir.msl
index fedce92..ccf4364 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/2a58b7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/2a58b7.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_2a58b7 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_2a58b7 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba16sint, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_2a58b7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_2a58b7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_2a58b7
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/2bafdf.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/2bafdf.wgsl.expected.ir.msl
index 8e066e4..9760498 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/2bafdf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/2bafdf.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<bgra8unorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_2bafdf = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_2bafdf = func():void {
+  $B2: {
     %4:texture_storage_1d<bgra8unorm, read> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_2bafdf
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_2bafdf
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_2bafdf
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/2dc5c5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/2dc5c5.wgsl.expected.ir.msl
index d183f63..a95e06f 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/2dc5c5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/2dc5c5.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_2dc5c5 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_2dc5c5 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba8uint, read> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_2dc5c5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_2dc5c5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_2dc5c5
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/2e443d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/2e443d.wgsl.expected.ir.msl
index 6b52791..14a2522 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/2e443d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/2e443d.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_2e443d = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_2e443d = func():void {
+  $B2: {
     %4:texture_2d<i32> = load %arg_0
     %5:vec2<u32> = textureDimensions %4, 1i
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_2e443d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_2e443d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_2e443d
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/2fd2a4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/2fd2a4.wgsl.expected.ir.msl
index 20b842d..4c813e5 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/2fd2a4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/2fd2a4.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_2fd2a4 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_2fd2a4 = func():void {
+  $B2: {
     %4:texture_2d_array<f32> = load %arg_0
     %5:vec2<u32> = textureDimensions %4, 1i
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_2fd2a4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_2fd2a4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_2fd2a4
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/2ff32a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/2ff32a.wgsl.expected.ir.msl
index 61ffb89..5d4bba5 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/2ff32a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/2ff32a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<r32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_2ff32a = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_2ff32a = func():void {
+  $B2: {
     %4:texture_storage_3d<r32float, read> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_2ff32a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_2ff32a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_2ff32a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/305dd5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/305dd5.wgsl.expected.ir.msl
index 09ecd93..7ebfbd1 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/305dd5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/305dd5.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_305dd5 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_305dd5 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<r32uint, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_305dd5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_305dd5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_305dd5
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/31799c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/31799c.wgsl.expected.ir.msl
index da2c208..fb3c196 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/31799c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/31799c.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<r32uint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_31799c = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_31799c = func():void {
+  $B2: {
     %4:texture_storage_3d<r32uint, write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_31799c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_31799c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_31799c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/31d00d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/31d00d.wgsl.expected.ir.msl
index a3dc5be..01b52fd 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/31d00d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/31d00d.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<r32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_31d00d = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_31d00d = func():void {
+  $B2: {
     %4:texture_storage_3d<r32uint, read_write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_31d00d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_31d00d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_31d00d
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/325338.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/325338.wgsl.expected.ir.msl
index c92b5fa..6163677 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/325338.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/325338.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_325338 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_325338 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba32sint, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_325338
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_325338
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_325338
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/346fee.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/346fee.wgsl.expected.ir.msl
index a3fa4a8..cc3c5ac 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/346fee.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/346fee.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube_array<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_346fee = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_346fee = func():void {
+  $B2: {
     %4:texture_cube_array<u32> = load %arg_0
     %5:vec2<u32> = textureDimensions %4, 1u
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_346fee
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_346fee
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_346fee
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/35a7e5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/35a7e5.wgsl.expected.ir.msl
index 0673369..dac4208 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/35a7e5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/35a7e5.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba16uint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_35a7e5 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_35a7e5 = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba16uint, write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_35a7e5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_35a7e5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_35a7e5
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/35ee69.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/35ee69.wgsl.expected.ir.msl
index cec6f94..2d3dfdc 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/35ee69.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/35ee69.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rg32uint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_35ee69 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_35ee69 = func():void {
+  $B2: {
     %4:texture_storage_3d<rg32uint, write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_35ee69
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_35ee69
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_35ee69
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/36eeb7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/36eeb7.wgsl.expected.ir.msl
index 63bd17a..62d243b 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/36eeb7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/36eeb7.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_36eeb7 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_36eeb7 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba32uint, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_36eeb7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_36eeb7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_36eeb7
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/378a65.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/378a65.wgsl.expected.ir.msl
index 697e131..3900345 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/378a65.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/378a65.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8sint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_378a65 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_378a65 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba8sint, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_378a65
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_378a65
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_378a65
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/382b16.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/382b16.wgsl.expected.ir.msl
index a4dc6be..9af7332 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/382b16.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/382b16.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_382b16 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_382b16 = func():void {
+  $B2: {
     %4:texture_cube<f32> = load %arg_0
     %5:vec2<u32> = textureDimensions %4, 1u
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_382b16
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_382b16
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_382b16
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/3834f8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/3834f8.wgsl.expected.ir.msl
index 29b7ff2..258694e 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/3834f8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/3834f8.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_3834f8 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_3834f8 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<r32sint, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_3834f8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_3834f8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_3834f8
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/38c9ca.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/38c9ca.wgsl.expected.ir.msl
index 168752a..0a6c1af 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/38c9ca.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/38c9ca.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_38c9ca = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_38c9ca = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba16float, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_38c9ca
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_38c9ca
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_38c9ca
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/3963d0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/3963d0.wgsl.expected.ir.msl
index 298feb0..8754cd9 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/3963d0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/3963d0.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube_array<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_3963d0 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_3963d0 = func():void {
+  $B2: {
     %4:texture_cube_array<i32> = load %arg_0
     %5:vec2<u32> = textureDimensions %4, 1u
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_3963d0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_3963d0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_3963d0
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/397dab.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/397dab.wgsl.expected.ir.msl
index f1c6b33..1e11e55 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/397dab.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/397dab.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_397dab = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_397dab = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8uint, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_397dab
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_397dab
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_397dab
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/3a5bb1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/3a5bb1.wgsl.expected.ir.msl
index e5e0108..a025279 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/3a5bb1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/3a5bb1.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba32float, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_3a5bb1 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_3a5bb1 = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba32float, write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_3a5bb1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_3a5bb1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_3a5bb1
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/3a7b69.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/3a7b69.wgsl.expected.ir.msl
index 3a5a0d0..120e276 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/3a7b69.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/3a7b69.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8unorm, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_3a7b69 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_3a7b69 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8unorm, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_3a7b69
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_3a7b69
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_3a7b69
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/3af3e7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/3af3e7.wgsl.expected.ir.msl
index ba19efe..c68bbe6 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/3af3e7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/3af3e7.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8unorm, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_3af3e7 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_3af3e7 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba8unorm, write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_3af3e7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_3af3e7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_3af3e7
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/3b38f6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/3b38f6.wgsl.expected.ir.msl
index d85b497..6dacb37 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/3b38f6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/3b38f6.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_3b38f6 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_3b38f6 = func():void {
+  $B2: {
     %4:texture_depth_2d = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_3b38f6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_3b38f6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_3b38f6
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/3baab5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/3baab5.wgsl.expected.ir.msl
index be36858..0b67c6a 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/3baab5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/3baab5.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8uint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_3baab5 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_3baab5 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8uint, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_3baab5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_3baab5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_3baab5
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/3bf12a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/3bf12a.wgsl.expected.ir.msl
index 86ed6ea..6d8c462 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/3bf12a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/3bf12a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_3bf12a = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_3bf12a = func():void {
+  $B2: {
     %4:texture_storage_2d_array<r32float, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_3bf12a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_3bf12a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_3bf12a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/3c66f0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/3c66f0.wgsl.expected.ir.msl
index f3e19f4..2061f4b 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/3c66f0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/3c66f0.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube_array<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_3c66f0 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_3c66f0 = func():void {
+  $B2: {
     %4:texture_cube_array<i32> = load %arg_0
     %5:vec2<u32> = textureDimensions %4, 1i
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_3c66f0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_3c66f0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_3c66f0
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/3f3474.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/3f3474.wgsl.expected.ir.msl
index 3a31398..4bf0dfb 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/3f3474.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/3f3474.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_multisampled_2d<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_3f3474 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_3f3474 = func():void {
+  $B2: {
     %4:texture_multisampled_2d<f32> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_3f3474
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_3f3474
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_3f3474
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/3fc3dc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/3fc3dc.wgsl.expected.ir.msl
index 83244e5..ec59950 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/3fc3dc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/3fc3dc.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_3fc3dc = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_3fc3dc = func():void {
+  $B2: {
     %4:texture_2d_array<f32> = load %arg_0
     %5:vec2<u32> = textureDimensions %4, 1u
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_3fc3dc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_3fc3dc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_3fc3dc
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/3ff0a5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/3ff0a5.wgsl.expected.ir.msl
index 886cdeb..c51a938 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/3ff0a5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/3ff0a5.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_3ff0a5 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_3ff0a5 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<r32sint, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_3ff0a5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_3ff0a5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_3ff0a5
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/40c671.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/40c671.wgsl.expected.ir.msl
index 2530c03..25a3c15 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/40c671.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/40c671.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8sint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_40c671 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_40c671 = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba8sint, write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_40c671
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_40c671
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_40c671
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/40da20.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/40da20.wgsl.expected.ir.msl
new file mode 100644
index 0000000..208291e
--- /dev/null
+++ b/test/tint/builtins/gen/literal/textureDimensions/40da20.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_2d<r8unorm, read>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
+}
+
+%textureDimensions_40da20 = func():void {
+  $B2: {
+    %4:texture_storage_2d<r8unorm, read> = load %arg_0
+    %5:vec2<u32> = textureDimensions %4
+    %res:ptr<function, vec2<u32>, read_write> = var, %5
+    %7:vec2<u32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %textureDimensions_40da20
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %textureDimensions_40da20
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %textureDimensions_40da20
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/textureDimensions/40ecf4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/40ecf4.wgsl.expected.ir.msl
index d33ac2d..c705907 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/40ecf4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/40ecf4.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16uint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_40ecf4 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_40ecf4 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba16uint, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_40ecf4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_40ecf4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_40ecf4
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/41545f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/41545f.wgsl.expected.ir.msl
index fc02b5c..2fa16a6 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/41545f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/41545f.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32uint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_41545f = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_41545f = func():void {
+  $B2: {
     %4:texture_storage_2d_array<r32uint, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_41545f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_41545f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_41545f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/423519.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/423519.wgsl.expected.ir.msl
index c5ab335..53deb29 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/423519.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/423519.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<r32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_423519 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_423519 = func():void {
+  $B2: {
     %4:texture_storage_3d<r32uint, read> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_423519
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_423519
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_423519
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/427f92.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/427f92.wgsl.expected.ir.msl
index 2be9ad1..656fd03 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/427f92.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/427f92.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_427f92 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_427f92 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba16uint, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_427f92
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_427f92
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_427f92
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/439651.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/439651.wgsl.expected.ir.msl
index 094d43a..0217d47 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/439651.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/439651.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rg32sint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_439651 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_439651 = func():void {
+  $B2: {
     %4:texture_storage_2d<rg32sint, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_439651
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_439651
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_439651
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/445376.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/445376.wgsl.expected.ir.msl
index a13d727..a204183 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/445376.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/445376.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_445376 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_445376 = func():void {
+  $B2: {
     %4:texture_2d_array<u32> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_445376
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_445376
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_445376
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/44b358.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/44b358.wgsl.expected.ir.msl
index a21e3e8..43f5263 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/44b358.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/44b358.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba32uint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_44b358 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_44b358 = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba32uint, write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_44b358
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_44b358
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_44b358
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/452fc1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/452fc1.wgsl.expected.ir.msl
index 2bf2104..5745a04 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/452fc1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/452fc1.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32uint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_452fc1 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_452fc1 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba32uint, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_452fc1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_452fc1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_452fc1
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/46f0fc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/46f0fc.wgsl.expected.ir.msl
index 8cbb4ad..c3a792c 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/46f0fc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/46f0fc.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_46f0fc = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_46f0fc = func():void {
+  $B2: {
     %4:texture_2d_array<f32> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_46f0fc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_46f0fc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_46f0fc
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/4716a4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/4716a4.wgsl.expected.ir.msl
index 4b6334a..fd0adfb 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/4716a4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/4716a4.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_4716a4 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_4716a4 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8sint, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_4716a4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_4716a4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_4716a4
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/475c10.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/475c10.wgsl.expected.ir.msl
index b3328f8..ef7d399 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/475c10.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/475c10.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_475c10 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_475c10 = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba8uint, read> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_475c10
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_475c10
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_475c10
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/49a067.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/49a067.wgsl.expected.ir.msl
index f92783f..b1f3fd8 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/49a067.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/49a067.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_49a067 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_49a067 = func():void {
+  $B2: {
     %4:texture_cube<f32> = load %arg_0
     %5:vec2<u32> = textureDimensions %4, 1i
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_49a067
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_49a067
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_49a067
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/4acec7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/4acec7.wgsl.expected.ir.msl
index 3c18d12..3c1c43b 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/4acec7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/4acec7.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32float, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_4acec7 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_4acec7 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rg32float, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_4acec7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_4acec7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_4acec7
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/4b26ef.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/4b26ef.wgsl.expected.ir.msl
index 8c84fc2..50f413f 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/4b26ef.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/4b26ef.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8unorm, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_4b26ef = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_4b26ef = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba8unorm, write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_4b26ef
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_4b26ef
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_4b26ef
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/4be71b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/4be71b.wgsl.expected.ir.msl
index fadfcf3..11f227a 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/4be71b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/4be71b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_4be71b = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_4be71b = func():void {
+  $B2: {
     %4:texture_2d<u32> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_4be71b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_4be71b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_4be71b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/4d1f71.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/4d1f71.wgsl.expected.ir.msl
index a7e1b4e..0dba440 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/4d1f71.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/4d1f71.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_4d1f71 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_4d1f71 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rg32uint, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_4d1f71
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_4d1f71
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_4d1f71
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/4d27b3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/4d27b3.wgsl.expected.ir.msl
index 367ee2b..825c86d 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/4d27b3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/4d27b3.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<r32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_4d27b3 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_4d27b3 = func():void {
+  $B2: {
     %4:texture_storage_3d<r32sint, read_write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_4d27b3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_4d27b3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_4d27b3
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/4df14c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/4df14c.wgsl.expected.ir.msl
index 70e4cd7..d79244a 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/4df14c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/4df14c.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rg32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_4df14c = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_4df14c = func():void {
+  $B2: {
     %4:texture_storage_3d<rg32uint, read_write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_4df14c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_4df14c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_4df14c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/4e540a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/4e540a.wgsl.expected.ir.msl
index 0b2237b..17dadcf 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/4e540a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/4e540a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<r32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_4e540a = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_4e540a = func():void {
+  $B2: {
     %4:texture_storage_1d<r32sint, read_write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_4e540a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_4e540a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_4e540a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/528c0e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/528c0e.wgsl.expected.ir.msl
index 7c6eb4c..5e77cb4 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/528c0e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/528c0e.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_528c0e = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_528c0e = func():void {
+  $B2: {
     %4:texture_2d_array<u32> = load %arg_0
     %5:vec2<u32> = textureDimensions %4, 1u
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_528c0e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_528c0e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_528c0e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/52cf60.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/52cf60.wgsl.expected.ir.msl
index 75a1fec..531b168 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/52cf60.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/52cf60.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rg32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_52cf60 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_52cf60 = func():void {
+  $B2: {
     %4:texture_storage_2d<rg32float, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_52cf60
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_52cf60
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_52cf60
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/534ef8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/534ef8.wgsl.expected.ir.msl
index 174cbc8..f968e3c 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/534ef8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/534ef8.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_534ef8 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_534ef8 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba8sint, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_534ef8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_534ef8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_534ef8
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/542c62.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/542c62.wgsl.expected.ir.msl
new file mode 100644
index 0000000..ecbc4a0
--- /dev/null
+++ b/test/tint/builtins/gen/literal/textureDimensions/542c62.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_1d<r8unorm, write>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
+}
+
+%textureDimensions_542c62 = func():void {
+  $B2: {
+    %4:texture_storage_1d<r8unorm, write> = load %arg_0
+    %5:u32 = textureDimensions %4
+    %res:ptr<function, u32, read_write> = var, %5
+    %7:u32 = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %textureDimensions_542c62
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %textureDimensions_542c62
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %textureDimensions_542c62
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/textureDimensions/55fdeb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/55fdeb.wgsl.expected.ir.msl
index b8de1d8..7ca2b12 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/55fdeb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/55fdeb.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_55fdeb = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_55fdeb = func():void {
+  $B2: {
     %4:texture_storage_2d<bgra8unorm, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_55fdeb
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_55fdeb
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_55fdeb
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/5703b3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/5703b3.wgsl.expected.ir.msl
index 818d6fc..c407cc0 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/5703b3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/5703b3.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_5703b3 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_5703b3 = func():void {
+  $B2: {
     %4:texture_storage_1d<bgra8unorm, read_write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_5703b3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_5703b3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_5703b3
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/578e75.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/578e75.wgsl.expected.ir.msl
new file mode 100644
index 0000000..2e4dcc34
--- /dev/null
+++ b/test/tint/builtins/gen/literal/textureDimensions/578e75.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_2d_array<r8unorm, read_write>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
+}
+
+%textureDimensions_578e75 = func():void {
+  $B2: {
+    %4:texture_storage_2d_array<r8unorm, read_write> = load %arg_0
+    %5:vec2<u32> = textureDimensions %4
+    %res:ptr<function, vec2<u32>, read_write> = var, %5
+    %7:vec2<u32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %textureDimensions_578e75
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %textureDimensions_578e75
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %textureDimensions_578e75
+    ret
+  }
+}
+
+invalid access control for storage texture
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/textureDimensions/579eee.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/579eee.wgsl.expected.ir.msl
index ca4afb5..5753859 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/579eee.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/579eee.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_579eee = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_579eee = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba32uint, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_579eee
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_579eee
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_579eee
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/58a82d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/58a82d.wgsl.expected.ir.msl
index 7993c20..2e1f885 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/58a82d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/58a82d.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba16uint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_58a82d = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_58a82d = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba16uint, write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_58a82d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_58a82d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_58a82d
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/591981.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/591981.wgsl.expected.ir.msl
index 0ff517d..97fd934 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/591981.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/591981.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba16sint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_591981 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_591981 = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba16sint, write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_591981
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_591981
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_591981
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/599ab5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/599ab5.wgsl.expected.ir.msl
index 20826ef..25db417 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/599ab5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/599ab5.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba16float, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_599ab5 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_599ab5 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba16float, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_599ab5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_599ab5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_599ab5
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/5b4b10.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/5b4b10.wgsl.expected.ir.msl
index a343aac..5d70969 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/5b4b10.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/5b4b10.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<bgra8unorm, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_5b4b10 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_5b4b10 = func():void {
+  $B2: {
     %4:texture_storage_3d<bgra8unorm, write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_5b4b10
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_5b4b10
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_5b4b10
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/5df042.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/5df042.wgsl.expected.ir.msl
index 291311a..18e817d 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/5df042.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/5df042.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_1d<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_5df042 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_5df042 = func():void {
+  $B2: {
     %4:texture_1d<i32> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_5df042
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_5df042
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_5df042
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/607979.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/607979.wgsl.expected.ir.msl
index 2d07a54..9e9f649 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/607979.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/607979.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<r32sint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_607979 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_607979 = func():void {
+  $B2: {
     %4:texture_storage_1d<r32sint, write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_607979
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_607979
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_607979
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/609d34.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/609d34.wgsl.expected.ir.msl
index 785cf3c..2a9cae2 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/609d34.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/609d34.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8snorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_609d34 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_609d34 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8snorm, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_609d34
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_609d34
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_609d34
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/617dc8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/617dc8.wgsl.expected.ir.msl
index b3e28e5..a85f2fe 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/617dc8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/617dc8.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<r32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_617dc8 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_617dc8 = func():void {
+  $B2: {
     %4:texture_storage_3d<r32float, read_write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_617dc8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_617dc8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_617dc8
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/62cb5a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/62cb5a.wgsl.expected.ir.msl
index 372dd86..3131f5a 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/62cb5a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/62cb5a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_62cb5a = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_62cb5a = func():void {
+  $B2: {
     %4:texture_2d_array<i32> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_62cb5a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_62cb5a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_62cb5a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/62e7ae.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/62e7ae.wgsl.expected.ir.msl
index 594fa94..4216195 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/62e7ae.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/62e7ae.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_62e7ae = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_62e7ae = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba8uint, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_62e7ae
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_62e7ae
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_62e7ae
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/64dc74.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/64dc74.wgsl.expected.ir.msl
index 9bd369f..75fcd8a 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/64dc74.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/64dc74.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_64dc74 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_64dc74 = func():void {
+  $B2: {
     %4:texture_cube<i32> = load %arg_0
     %5:vec2<u32> = textureDimensions %4, 1u
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_64dc74
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_64dc74
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_64dc74
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/674058.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/674058.wgsl.expected.ir.msl
index a41c70f..01f1ff4 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/674058.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/674058.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32sint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_674058 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_674058 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<r32sint, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_674058
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_674058
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_674058
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/6dae40.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/6dae40.wgsl.expected.ir.msl
index 4630605..adb7d86 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/6dae40.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/6dae40.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rg32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_6dae40 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_6dae40 = func():void {
+  $B2: {
     %4:texture_storage_3d<rg32float, read> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_6dae40
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_6dae40
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_6dae40
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/6dbef4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/6dbef4.wgsl.expected.ir.msl
index f0a139a..824418f 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/6dbef4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/6dbef4.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rg32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_6dbef4 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_6dbef4 = func():void {
+  $B2: {
     %4:texture_storage_3d<rg32sint, read> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_6dbef4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_6dbef4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_6dbef4
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/6e6c7a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/6e6c7a.wgsl.expected.ir.msl
index 2c05cc6..f3a3e71 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/6e6c7a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/6e6c7a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_6e6c7a = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_6e6c7a = func():void {
+  $B2: {
     %4:texture_3d<u32> = load %arg_0
     %5:vec3<u32> = textureDimensions %4, 1u
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_6e6c7a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_6e6c7a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_6e6c7a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/6e72c5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/6e72c5.wgsl.expected.ir.msl
index dc42636..6b1da73 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/6e72c5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/6e72c5.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<r32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_6e72c5 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_6e72c5 = func():void {
+  $B2: {
     %4:texture_storage_2d<r32float, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_6e72c5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_6e72c5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_6e72c5
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/6f1b5d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/6f1b5d.wgsl.expected.ir.msl
index 6a92105..d5ac0d7 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/6f1b5d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/6f1b5d.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_6f1b5d = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_6f1b5d = func():void {
+  $B2: {
     %4:texture_depth_2d = load %arg_0
     %5:vec2<u32> = textureDimensions %4, 1i
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_6f1b5d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_6f1b5d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_6f1b5d
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/709357.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/709357.wgsl.expected.ir.msl
index 10e9fd9..61d2869 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/709357.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/709357.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba16uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_709357 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_709357 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba16uint, read> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_709357
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_709357
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_709357
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/70dd33.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/70dd33.wgsl.expected.ir.msl
index 947df4d..84e759d 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/70dd33.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/70dd33.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_70dd33 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_70dd33 = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba32sint, read_write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_70dd33
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_70dd33
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_70dd33
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/715917.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/715917.wgsl.expected.ir.msl
index ec49950..6e0c466 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/715917.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/715917.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_715917 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_715917 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<bgra8unorm, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_715917
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_715917
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_715917
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/7228de.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/7228de.wgsl.expected.ir.msl
index 36d88d6..79806b5 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/7228de.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/7228de.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<r32uint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_7228de = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_7228de = func():void {
+  $B2: {
     %4:texture_storage_1d<r32uint, write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_7228de
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_7228de
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_7228de
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/7327fa.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/7327fa.wgsl.expected.ir.msl
index f9fabcb..16fb52c 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/7327fa.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/7327fa.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8snorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_7327fa = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_7327fa = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba8snorm, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_7327fa
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_7327fa
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_7327fa
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/740e7c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/740e7c.wgsl.expected.ir.msl
index 1e31a38..24b58d8 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/740e7c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/740e7c.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rg32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_740e7c = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_740e7c = func():void {
+  $B2: {
     %4:texture_storage_1d<rg32sint, read_write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_740e7c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_740e7c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_740e7c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/756031.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/756031.wgsl.expected.ir.msl
index deb6f89..a1e6f57 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/756031.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/756031.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_756031 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_756031 = func():void {
+  $B2: {
     %4:texture_3d<i32> = load %arg_0
     %5:vec3<u32> = textureDimensions %4, 1i
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_756031
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_756031
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_756031
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/756304.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/756304.wgsl.expected.ir.msl
index b44d9f6..b11235e 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/756304.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/756304.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32float, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_756304 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_756304 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<r32float, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_756304
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_756304
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_756304
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/790e57.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/790e57.wgsl.expected.ir.msl
index 276dc5a..ac9fe31 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/790e57.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/790e57.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_790e57 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_790e57 = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba8sint, read> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_790e57
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_790e57
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_790e57
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/795fbb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/795fbb.wgsl.expected.ir.msl
index cfc7070..265b2d8 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/795fbb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/795fbb.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_795fbb = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_795fbb = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8unorm, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_795fbb
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_795fbb
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_795fbb
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/797c30.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/797c30.wgsl.expected.ir.msl
index d970bd8..5363267 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/797c30.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/797c30.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_797c30 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_797c30 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba32uint, read> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_797c30
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_797c30
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_797c30
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/79d168.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/79d168.wgsl.expected.ir.msl
index 47dc6f3..b9aeac2 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/79d168.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/79d168.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_cube, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_79d168 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_79d168 = func():void {
+  $B2: {
     %4:texture_depth_cube = load %arg_0
     %5:vec2<u32> = textureDimensions %4, 1i
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_79d168
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_79d168
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_79d168
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/7a3890.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/7a3890.wgsl.expected.ir.msl
index 836ec32..4bacd6e 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/7a3890.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/7a3890.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_7a3890 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_7a3890 = func():void {
+  $B2: {
     %4:texture_3d<u32> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_7a3890
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_7a3890
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_7a3890
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/7a9e30.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/7a9e30.wgsl.expected.ir.msl
index 8a20526..58f4d8e 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/7a9e30.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/7a9e30.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_7a9e30 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_7a9e30 = func():void {
+  $B2: {
     %4:texture_cube<u32> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_7a9e30
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_7a9e30
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_7a9e30
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/7c753b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/7c753b.wgsl.expected.ir.msl
index 32063f2..d4ae4d4 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/7c753b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/7c753b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_7c753b = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_7c753b = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba32float, read> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_7c753b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_7c753b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_7c753b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/7c7c64.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/7c7c64.wgsl.expected.ir.msl
index 87f54bb..081b6f4 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/7c7c64.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/7c7c64.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_7c7c64 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_7c7c64 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rg32sint, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_7c7c64
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_7c7c64
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_7c7c64
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/7d8439.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/7d8439.wgsl.expected.ir.msl
index d03fe02..88fcff8 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/7d8439.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/7d8439.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rg32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_7d8439 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_7d8439 = func():void {
+  $B2: {
     %4:texture_storage_1d<rg32uint, read> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_7d8439
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_7d8439
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_7d8439
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/7ea4b5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/7ea4b5.wgsl.expected.ir.msl
index d0cb535..c97f9a9 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/7ea4b5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/7ea4b5.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_7ea4b5 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_7ea4b5 = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba8sint, read_write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_7ea4b5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_7ea4b5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_7ea4b5
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/7edb05.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/7edb05.wgsl.expected.ir.msl
index 1cc1ef1..eb022fb 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/7edb05.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/7edb05.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_7edb05 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_7edb05 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba16uint, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_7edb05
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_7edb05
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_7edb05
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/8057cb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/8057cb.wgsl.expected.ir.msl
index 1bc5c53..c1ab7fe 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/8057cb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/8057cb.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<bgra8unorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_8057cb = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_8057cb = func():void {
+  $B2: {
     %4:texture_storage_3d<bgra8unorm, read> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_8057cb
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_8057cb
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_8057cb
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/8243a1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/8243a1.wgsl.expected.ir.msl
index f4e27e1..1ce6264 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/8243a1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/8243a1.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_8243a1 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_8243a1 = func():void {
+  $B2: {
     %4:texture_storage_3d<bgra8unorm, read_write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_8243a1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_8243a1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_8243a1
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/835f90.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/835f90.wgsl.expected.ir.msl
index e8eb00f..7cf9323 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/835f90.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/835f90.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rg32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_835f90 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_835f90 = func():void {
+  $B2: {
     %4:texture_storage_2d<rg32sint, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_835f90
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_835f90
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_835f90
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/841ebe.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/841ebe.wgsl.expected.ir.msl
index 16fd29d..17df82a 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/841ebe.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/841ebe.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_841ebe = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_841ebe = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba8sint, read> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_841ebe
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_841ebe
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_841ebe
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/84f363.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/84f363.wgsl.expected.ir.msl
index 54b0340..aa9df4d 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/84f363.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/84f363.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<bgra8unorm, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_84f363 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_84f363 = func():void {
+  $B2: {
     %4:texture_storage_1d<bgra8unorm, write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_84f363
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_84f363
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_84f363
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/867ead.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/867ead.wgsl.expected.ir.msl
index 200a725..617e797 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/867ead.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/867ead.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8snorm, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_867ead = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_867ead = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8snorm, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_867ead
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_867ead
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_867ead
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/879b73.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/879b73.wgsl.expected.ir.msl
index 903525f..746ecfc 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/879b73.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/879b73.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube_array<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_879b73 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_879b73 = func():void {
+  $B2: {
     %4:texture_cube_array<f32> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_879b73
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_879b73
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_879b73
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/87b42d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/87b42d.wgsl.expected.ir.msl
index 4fdf484..8f63c38 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/87b42d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/87b42d.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_87b42d = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_87b42d = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba32uint, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_87b42d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_87b42d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_87b42d
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/881dd4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/881dd4.wgsl.expected.ir.msl
index c0bffc9..74863db 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/881dd4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/881dd4.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8unorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_881dd4 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_881dd4 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8unorm, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_881dd4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_881dd4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_881dd4
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/8a2b17.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/8a2b17.wgsl.expected.ir.msl
index 15e9426..18da2e6 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/8a2b17.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/8a2b17.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_8a2b17 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_8a2b17 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba32sint, read_write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_8a2b17
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_8a2b17
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_8a2b17
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/8a35f9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/8a35f9.wgsl.expected.ir.msl
index 42d933c..c071be2 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/8a35f9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/8a35f9.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rg32float, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_8a35f9 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_8a35f9 = func():void {
+  $B2: {
     %4:texture_storage_2d<rg32float, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_8a35f9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_8a35f9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_8a35f9
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/8af728.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/8af728.wgsl.expected.ir.msl
new file mode 100644
index 0000000..8934ef5
--- /dev/null
+++ b/test/tint/builtins/gen/literal/textureDimensions/8af728.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_2d_array<r8unorm, read>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
+}
+
+%textureDimensions_8af728 = func():void {
+  $B2: {
+    %4:texture_storage_2d_array<r8unorm, read> = load %arg_0
+    %5:vec2<u32> = textureDimensions %4
+    %res:ptr<function, vec2<u32>, read_write> = var, %5
+    %7:vec2<u32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %textureDimensions_8af728
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %textureDimensions_8af728
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %textureDimensions_8af728
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/textureDimensions/8b9906.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/8b9906.wgsl.expected.ir.msl
index 9413450..2fc2c6a 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/8b9906.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/8b9906.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_8b9906 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_8b9906 = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba8uint, read_write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_8b9906
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_8b9906
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_8b9906
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/8bd369.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/8bd369.wgsl.expected.ir.msl
index 729d131..42dbc03 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/8bd369.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/8bd369.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_8bd369 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_8bd369 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8snorm, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_8bd369
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_8bd369
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_8bd369
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/8e15f4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/8e15f4.wgsl.expected.ir.msl
index 65d5cd0..07f2d52 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/8e15f4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/8e15f4.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rg32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_8e15f4 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_8e15f4 = func():void {
+  $B2: {
     %4:texture_storage_2d<rg32uint, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_8e15f4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_8e15f4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_8e15f4
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/8e5de6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/8e5de6.wgsl.expected.ir.msl
index 4a653cc..5b50de8 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/8e5de6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/8e5de6.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<r32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_8e5de6 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_8e5de6 = func():void {
+  $B2: {
     %4:texture_storage_1d<r32sint, read> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_8e5de6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_8e5de6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_8e5de6
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/8efd47.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/8efd47.wgsl.expected.ir.msl
index 9c785b5..20db69d 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/8efd47.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/8efd47.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba32sint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_8efd47 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_8efd47 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba32sint, write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_8efd47
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_8efd47
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_8efd47
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/902179.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/902179.wgsl.expected.ir.msl
index 67628d1..b32850f 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/902179.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/902179.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<r32float, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_902179 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_902179 = func():void {
+  $B2: {
     %4:texture_storage_3d<r32float, write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_902179
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_902179
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_902179
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/904b0f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/904b0f.wgsl.expected.ir.msl
index 8cca4cb..936e48b 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/904b0f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/904b0f.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_904b0f = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_904b0f = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba16sint, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_904b0f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_904b0f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_904b0f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/90dd74.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/90dd74.wgsl.expected.ir.msl
index 7d1dfe6..98ef490 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/90dd74.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/90dd74.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16sint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_90dd74 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_90dd74 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba16sint, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_90dd74
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_90dd74
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_90dd74
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/91e3b4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/91e3b4.wgsl.expected.ir.msl
index ea729a6..f4e12c7 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/91e3b4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/91e3b4.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rg32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_91e3b4 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_91e3b4 = func():void {
+  $B2: {
     %4:texture_storage_3d<rg32sint, read_write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_91e3b4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_91e3b4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_91e3b4
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/920006.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/920006.wgsl.expected.ir.msl
index 8b07b04..698b4b1 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/920006.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/920006.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_1d<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_920006 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_920006 = func():void {
+  $B2: {
     %4:texture_1d<u32> = load %arg_0
     %5:u32 = textureDimensions %4, 1i
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_920006
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_920006
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_920006
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/92552e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/92552e.wgsl.expected.ir.msl
index c3f86df..94b54b9 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/92552e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/92552e.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8sint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_92552e = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_92552e = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba8sint, write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_92552e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_92552e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_92552e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/9573f3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/9573f3.wgsl.expected.ir.msl
index 813087d..f3de2e7 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/9573f3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/9573f3.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rg32uint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_9573f3 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_9573f3 = func():void {
+  $B2: {
     %4:texture_storage_2d<rg32uint, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_9573f3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_9573f3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_9573f3
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/965645.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/965645.wgsl.expected.ir.msl
index 50c5d56..69d9637 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/965645.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/965645.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_1d<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_965645 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_965645 = func():void {
+  $B2: {
     %4:texture_1d<u32> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_965645
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_965645
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_965645
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/98b2d3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/98b2d3.wgsl.expected.ir.msl
index 99191cf..0d26142 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/98b2d3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/98b2d3.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube_array<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_98b2d3 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_98b2d3 = func():void {
+  $B2: {
     %4:texture_cube_array<i32> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_98b2d3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_98b2d3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_98b2d3
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/991ea9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/991ea9.wgsl.expected.ir.msl
index 4833879..1d45751 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/991ea9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/991ea9.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_991ea9 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_991ea9 = func():void {
+  $B2: {
     %4:texture_depth_2d = load %arg_0
     %5:vec2<u32> = textureDimensions %4, 1u
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_991ea9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_991ea9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_991ea9
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/9944d5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/9944d5.wgsl.expected.ir.msl
index 54aa83e..ef2628f 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/9944d5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/9944d5.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<r32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_9944d5 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_9944d5 = func():void {
+  $B2: {
     %4:texture_storage_1d<r32uint, read_write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_9944d5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_9944d5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_9944d5
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/9b10a0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/9b10a0.wgsl.expected.ir.msl
index 6241d58..d9e55ec 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/9b10a0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/9b10a0.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<bgra8unorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_9b10a0 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_9b10a0 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<bgra8unorm, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_9b10a0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_9b10a0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_9b10a0
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/9b223b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/9b223b.wgsl.expected.ir.msl
index ccea5f1..cfd4e1e 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/9b223b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/9b223b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_9b223b = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_9b223b = func():void {
+  $B2: {
     %4:texture_cube<f32> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_9b223b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_9b223b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_9b223b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/9baf27.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/9baf27.wgsl.expected.ir.msl
index 65e95a7..09fa746 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/9baf27.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/9baf27.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_9baf27 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_9baf27 = func():void {
+  $B2: {
     %4:texture_cube<u32> = load %arg_0
     %5:vec2<u32> = textureDimensions %4, 1u
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_9baf27
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_9baf27
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_9baf27
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/9c7a00.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/9c7a00.wgsl.expected.ir.msl
index b6793d4..0af581f 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/9c7a00.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/9c7a00.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_1d<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_9c7a00 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_9c7a00 = func():void {
+  $B2: {
     %4:texture_1d<u32> = load %arg_0
     %5:u32 = textureDimensions %4, 1u
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_9c7a00
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_9c7a00
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_9c7a00
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/9cd4ca.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/9cd4ca.wgsl.expected.ir.msl
index 48d8c2d..07f2ef3 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/9cd4ca.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/9cd4ca.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_9cd4ca = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_9cd4ca = func():void {
+  $B2: {
     %4:texture_cube<u32> = load %arg_0
     %5:vec2<u32> = textureDimensions %4, 1i
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_9cd4ca
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_9cd4ca
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_9cd4ca
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/9cd8ad.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/9cd8ad.wgsl.expected.ir.msl
index 8371919..2cafaac 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/9cd8ad.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/9cd8ad.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rg32float, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_9cd8ad = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_9cd8ad = func():void {
+  $B2: {
     %4:texture_storage_3d<rg32float, write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_9cd8ad
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_9cd8ad
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_9cd8ad
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/9d0bac.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/9d0bac.wgsl.expected.ir.msl
index e1c7026..112a8d0 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/9d0bac.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/9d0bac.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_9d0bac = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_9d0bac = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba32float, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_9d0bac
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_9d0bac
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_9d0bac
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/9d68b8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/9d68b8.wgsl.expected.ir.msl
index 38a6fd4..72d63e4 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/9d68b8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/9d68b8.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8snorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_9d68b8 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_9d68b8 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba8snorm, read> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_9d68b8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_9d68b8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_9d68b8
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/9dc27a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/9dc27a.wgsl.expected.ir.msl
index 921b3fd..69c15a9 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/9dc27a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/9dc27a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_9dc27a = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_9dc27a = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rg32float, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_9dc27a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_9dc27a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_9dc27a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/9e0794.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/9e0794.wgsl.expected.ir.msl
index 0b6c3c0..be32208 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/9e0794.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/9e0794.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_9e0794 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_9e0794 = func():void {
+  $B2: {
     %4:texture_2d_array<u32> = load %arg_0
     %5:vec2<u32> = textureDimensions %4, 1i
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_9e0794
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_9e0794
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_9e0794
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/9fcc3b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/9fcc3b.wgsl.expected.ir.msl
index 64d4fb9..e3ad776 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/9fcc3b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/9fcc3b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_cube_array, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_9fcc3b = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_9fcc3b = func():void {
+  $B2: {
     %4:texture_depth_cube_array = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_9fcc3b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_9fcc3b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_9fcc3b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/a105a5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/a105a5.wgsl.expected.ir.msl
index b42152d..2655353 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/a105a5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/a105a5.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_a105a5 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_a105a5 = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba32uint, read_write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_a105a5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_a105a5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_a105a5
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/a14386.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/a14386.wgsl.expected.ir.msl
index b65acf2..24e838d 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/a14386.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/a14386.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba16float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_a14386 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_a14386 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba16float, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_a14386
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_a14386
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_a14386
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/a1598a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/a1598a.wgsl.expected.ir.msl
index 329db7f..fd21c6f 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/a1598a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/a1598a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube_array<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_a1598a = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_a1598a = func():void {
+  $B2: {
     %4:texture_cube_array<u32> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_a1598a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_a1598a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_a1598a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/a20ba2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/a20ba2.wgsl.expected.ir.msl
new file mode 100644
index 0000000..fd6e2c5
--- /dev/null
+++ b/test/tint/builtins/gen/literal/textureDimensions/a20ba2.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_3d<r8unorm, write>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
+}
+
+%textureDimensions_a20ba2 = func():void {
+  $B2: {
+    %4:texture_storage_3d<r8unorm, write> = load %arg_0
+    %5:vec3<u32> = textureDimensions %4
+    %res:ptr<function, vec3<u32>, read_write> = var, %5
+    %7:vec3<u32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %textureDimensions_a20ba2
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %textureDimensions_a20ba2
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %textureDimensions_a20ba2
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/textureDimensions/a25d9b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/a25d9b.wgsl.expected.ir.msl
index 8a7a2b3..0bb63bb 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/a25d9b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/a25d9b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8unorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_a25d9b = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_a25d9b = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba8unorm, read> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_a25d9b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_a25d9b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_a25d9b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/a2ba5e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/a2ba5e.wgsl.expected.ir.msl
index 0af1f38..6dfbdf2 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/a2ba5e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/a2ba5e.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_a2ba5e = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_a2ba5e = func():void {
+  $B2: {
     %4:texture_cube<i32> = load %arg_0
     %5:vec2<u32> = textureDimensions %4, 1i
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_a2ba5e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_a2ba5e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_a2ba5e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/a3ea91.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/a3ea91.wgsl.expected.ir.msl
index 63f4178..0686639 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/a3ea91.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/a3ea91.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba16float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_a3ea91 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_a3ea91 = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba16float, read> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_a3ea91
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_a3ea91
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_a3ea91
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/a48049.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/a48049.wgsl.expected.ir.msl
index 972e2cc..46fc59b 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/a48049.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/a48049.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_a48049 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_a48049 = func():void {
+  $B2: {
     %4:texture_2d<i32> = load %arg_0
     %5:vec2<u32> = textureDimensions %4, 1u
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_a48049
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_a48049
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_a48049
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/a4cd56.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/a4cd56.wgsl.expected.ir.msl
index c3d5b6b..4961dc8 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/a4cd56.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/a4cd56.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_a4cd56 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_a4cd56 = func():void {
+  $B2: {
     %4:texture_depth_2d_array = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_a4cd56
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_a4cd56
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_a4cd56
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/a65776.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/a65776.wgsl.expected.ir.msl
index d24df3e..2a10b20 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/a65776.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/a65776.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba16sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_a65776 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_a65776 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba16sint, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_a65776
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_a65776
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_a65776
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/a7ae4c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/a7ae4c.wgsl.expected.ir.msl
index b2ab621..5ff70c5 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/a7ae4c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/a7ae4c.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_a7ae4c = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_a7ae4c = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba8snorm, read_write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_a7ae4c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_a7ae4c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_a7ae4c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/aa4353.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/aa4353.wgsl.expected.ir.msl
index 11b3405..8f68441 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/aa4353.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/aa4353.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba32sint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_aa4353 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_aa4353 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba32sint, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_aa4353
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_aa4353
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_aa4353
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/aac604.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/aac604.wgsl.expected.ir.msl
index cbd1a4c..b4f729e 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/aac604.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/aac604.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_1d<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_aac604 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_aac604 = func():void {
+  $B2: {
     %4:texture_1d<f32> = load %arg_0
     %5:u32 = textureDimensions %4, 1u
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_aac604
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_aac604
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_aac604
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/ad7d3b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/ad7d3b.wgsl.expected.ir.msl
index 25f0baf..1a0e6ca 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/ad7d3b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/ad7d3b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8uint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_ad7d3b = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_ad7d3b = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba8uint, write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_ad7d3b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_ad7d3b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_ad7d3b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/ae4595.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/ae4595.wgsl.expected.ir.msl
index dfecd22..84b0b21 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/ae4595.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/ae4595.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rg32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_ae4595 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_ae4595 = func():void {
+  $B2: {
     %4:texture_storage_3d<rg32float, read_write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_ae4595
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_ae4595
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_ae4595
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/ae75a7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/ae75a7.wgsl.expected.ir.msl
index 3ca8324..efbeeed 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/ae75a7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/ae75a7.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba16uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_ae75a7 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_ae75a7 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba16uint, read_write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_ae75a7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_ae75a7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_ae75a7
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/af46ab.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/af46ab.wgsl.expected.ir.msl
index a11470a..949d892 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/af46ab.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/af46ab.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32sint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_af46ab = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_af46ab = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rg32sint, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_af46ab
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_af46ab
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_af46ab
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/b16352.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/b16352.wgsl.expected.ir.msl
index 1336990..c75fa3e 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/b16352.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/b16352.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba16sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_b16352 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_b16352 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba16sint, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_b16352
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_b16352
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_b16352
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/b284b8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/b284b8.wgsl.expected.ir.msl
index bd5d7c1..55267cb 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/b284b8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/b284b8.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_b284b8 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_b284b8 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba8sint, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_b284b8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_b284b8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_b284b8
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/b3ab5e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/b3ab5e.wgsl.expected.ir.msl
index 6a6b2b3..6f5fb3d 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/b3ab5e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/b3ab5e.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube_array<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_b3ab5e = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_b3ab5e = func():void {
+  $B2: {
     %4:texture_cube_array<f32> = load %arg_0
     %5:vec2<u32> = textureDimensions %4, 1i
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_b3ab5e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_b3ab5e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_b3ab5e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/b46d97.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/b46d97.wgsl.expected.ir.msl
index 48f3f8d..b0652c5 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/b46d97.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/b46d97.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_1d<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_b46d97 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_b46d97 = func():void {
+  $B2: {
     %4:texture_1d<i32> = load %arg_0
     %5:u32 = textureDimensions %4, 1i
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_b46d97
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_b46d97
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_b46d97
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/b51345.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/b51345.wgsl.expected.ir.msl
index 16221ed..e4f0554 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/b51345.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/b51345.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rg32float, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_b51345 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_b51345 = func():void {
+  $B2: {
     %4:texture_storage_1d<rg32float, write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_b51345
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_b51345
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_b51345
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/b56112.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/b56112.wgsl.expected.ir.msl
index a346ecd..60af298 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/b56112.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/b56112.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<r32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_b56112 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_b56112 = func():void {
+  $B2: {
     %4:texture_storage_2d<r32uint, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_b56112
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_b56112
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_b56112
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/b5ba03.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/b5ba03.wgsl.expected.ir.msl
index 82cfa14..34d233d 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/b5ba03.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/b5ba03.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba16float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_b5ba03 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_b5ba03 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba16float, read> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_b5ba03
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_b5ba03
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_b5ba03
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/b5d68e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/b5d68e.wgsl.expected.ir.msl
index eb4dd20..7075ee4 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/b5d68e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/b5d68e.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_b5d68e = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_b5d68e = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba32sint, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_b5d68e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_b5d68e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_b5d68e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/b6bbf4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/b6bbf4.wgsl.expected.ir.msl
index f1da8c9..e676ab1 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/b6bbf4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/b6bbf4.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba16uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_b6bbf4 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_b6bbf4 = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba16uint, read> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_b6bbf4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_b6bbf4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_b6bbf4
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/b8287f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/b8287f.wgsl.expected.ir.msl
index 0f97f51..8a9bb43 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/b8287f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/b8287f.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_b8287f = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_b8287f = func():void {
+  $B2: {
     %4:texture_storage_2d_array<r32uint, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_b8287f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_b8287f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_b8287f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/b9e7ef.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/b9e7ef.wgsl.expected.ir.msl
index 1d3252f..2489e6e 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/b9e7ef.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/b9e7ef.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_b9e7ef = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_b9e7ef = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba32sint, read> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_b9e7ef
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_b9e7ef
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_b9e7ef
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/bb95d9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/bb95d9.wgsl.expected.ir.msl
index 39de294..70d133a 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/bb95d9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/bb95d9.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_bb95d9 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_bb95d9 = func():void {
+  $B2: {
     %4:texture_3d<f32> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_bb95d9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_bb95d9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_bb95d9
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/bbe285.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/bbe285.wgsl.expected.ir.msl
index de9d6ef..499807d 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/bbe285.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/bbe285.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8sint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_bbe285 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_bbe285 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8sint, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_bbe285
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_bbe285
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_bbe285
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/bc96f6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/bc96f6.wgsl.expected.ir.msl
index 4454816..0734d41 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/bc96f6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/bc96f6.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_bc96f6 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_bc96f6 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba32float, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_bc96f6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_bc96f6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_bc96f6
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/bd94c8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/bd94c8.wgsl.expected.ir.msl
index 1b4945a..969ccbc 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/bd94c8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/bd94c8.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_cube_array, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_bd94c8 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_bd94c8 = func():void {
+  $B2: {
     %4:texture_depth_cube_array = load %arg_0
     %5:vec2<u32> = textureDimensions %4, 1u
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_bd94c8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_bd94c8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_bd94c8
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/bec716.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/bec716.wgsl.expected.ir.msl
index 0726507..5a4f560 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/bec716.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/bec716.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_bec716 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_bec716 = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba32float, read> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_bec716
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_bec716
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_bec716
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/bf9170.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/bf9170.wgsl.expected.ir.msl
index 6846af3..c83ca85 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/bf9170.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/bf9170.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8snorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_bf9170 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_bf9170 = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba8snorm, read> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_bf9170
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_bf9170
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_bf9170
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/c1189e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/c1189e.wgsl.expected.ir.msl
index a45498e..d2615a1 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/c1189e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/c1189e.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_c1189e = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_c1189e = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba32float, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_c1189e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_c1189e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_c1189e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/c1dbf6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/c1dbf6.wgsl.expected.ir.msl
index dac5f33..514e05f 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/c1dbf6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/c1dbf6.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8uint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_c1dbf6 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_c1dbf6 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba8uint, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_c1dbf6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_c1dbf6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_c1dbf6
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/c27466.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/c27466.wgsl.expected.ir.msl
index c66c698..4d04623 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/c27466.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/c27466.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba16sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_c27466 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_c27466 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba16sint, read_write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_c27466
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_c27466
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_c27466
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/c2cdd3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/c2cdd3.wgsl.expected.ir.msl
index 1a455f3..9688623 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/c2cdd3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/c2cdd3.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_multisampled_2d, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_c2cdd3 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_c2cdd3 = func():void {
+  $B2: {
     %4:texture_depth_multisampled_2d = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_c2cdd3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_c2cdd3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_c2cdd3
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/c44fc1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/c44fc1.wgsl.expected.ir.msl
index f616817..9ea7ecd 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/c44fc1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/c44fc1.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32sint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_c44fc1 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_c44fc1 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba32sint, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_c44fc1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_c44fc1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_c44fc1
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/c5a36e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/c5a36e.wgsl.expected.ir.msl
index c3fe0f8..36f79de 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/c5a36e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/c5a36e.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_cube, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_c5a36e = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_c5a36e = func():void {
+  $B2: {
     %4:texture_depth_cube = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_c5a36e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_c5a36e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_c5a36e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/c6b44c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/c6b44c.wgsl.expected.ir.msl
index ea1a673..c81c192 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/c6b44c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/c6b44c.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<r32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_c6b44c = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_c6b44c = func():void {
+  $B2: {
     %4:texture_storage_2d<r32sint, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_c6b44c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_c6b44c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_c6b44c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/c6b985.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/c6b985.wgsl.expected.ir.msl
new file mode 100644
index 0000000..b645805
--- /dev/null
+++ b/test/tint/builtins/gen/literal/textureDimensions/c6b985.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_1d<r8unorm, read_write>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
+}
+
+%textureDimensions_c6b985 = func():void {
+  $B2: {
+    %4:texture_storage_1d<r8unorm, read_write> = load %arg_0
+    %5:u32 = textureDimensions %4
+    %res:ptr<function, u32, read_write> = var, %5
+    %7:u32 = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %textureDimensions_c6b985
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %textureDimensions_c6b985
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %textureDimensions_c6b985
+    ret
+  }
+}
+
+invalid access control for storage texture
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/textureDimensions/c7ea63.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/c7ea63.wgsl.expected.ir.msl
index 3b1f4ea..7be61e1 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/c7ea63.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/c7ea63.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rg32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_c7ea63 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_c7ea63 = func():void {
+  $B2: {
     %4:texture_storage_1d<rg32float, read_write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_c7ea63
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_c7ea63
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_c7ea63
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/c82420.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/c82420.wgsl.expected.ir.msl
index 37abb03..a886b56 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/c82420.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/c82420.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rg32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_c82420 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_c82420 = func():void {
+  $B2: {
     %4:texture_storage_2d<rg32uint, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_c82420
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_c82420
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_c82420
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/c871f3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/c871f3.wgsl.expected.ir.msl
index e96b120..cf61340 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/c871f3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/c871f3.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_c871f3 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_c871f3 = func():void {
+  $B2: {
     %4:texture_3d<i32> = load %arg_0
     %5:vec3<u32> = textureDimensions %4, 1u
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_c871f3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_c871f3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_c871f3
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/ca10cc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/ca10cc.wgsl.expected.ir.msl
index e2e6476..d198f46 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/ca10cc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/ca10cc.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_ca10cc = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_ca10cc = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8uint, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_ca10cc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_ca10cc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_ca10cc
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/cad3b7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/cad3b7.wgsl.expected.ir.msl
index 0edeec9..d8afa22 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/cad3b7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/cad3b7.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<r32sint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_cad3b7 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_cad3b7 = func():void {
+  $B2: {
     %4:texture_storage_2d<r32sint, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_cad3b7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_cad3b7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_cad3b7
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/cc947b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/cc947b.wgsl.expected.ir.msl
index de2abf0..3f96199 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/cc947b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/cc947b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8snorm, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_cc947b = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_cc947b = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba8snorm, write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_cc947b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_cc947b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_cc947b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/cd3033.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/cd3033.wgsl.expected.ir.msl
index 4d501f1..8b882cd 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/cd3033.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/cd3033.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_cd3033 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_cd3033 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rg32sint, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_cd3033
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_cd3033
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_cd3033
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/cdc6c9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/cdc6c9.wgsl.expected.ir.msl
index 3623164..897a716 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/cdc6c9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/cdc6c9.wgsl.expected.ir.msl
@@ -1,43 +1,29 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1057 internal compiler error: %b1 = block {  # root
-  %arg_0:ptr<handle, texture_external, read> = var @binding_point(1, 0)
-  %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
+
+@group(1) @binding(0) var arg_0 : texture_external;
+
+fn textureDimensions_cdc6c9() {
+  var res : vec2<u32> = textureDimensions(arg_0);
+  prevent_dce = res;
 }
 
-%textureDimensions_cdc6c9 = func():void -> %b2 {
-  %b2 = block {
-    %4:texture_external = load %arg_0
-    %5:vec2<u32> = textureDimensions %4
-    %res:ptr<function, vec2<u32>, read_write> = var, %5
-    %7:vec2<u32> = load %res
-    store %prevent_dce, %7
-    ret
-  }
-}
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %9:void = call %textureDimensions_cdc6c9
-    ret vec4<f32>(0.0f)
-  }
-}
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %11:void = call %textureDimensions_cdc6c9
-    ret
-  }
-}
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %13:void = call %textureDimensions_cdc6c9
-    ret
-  }
+@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
+
+@vertex
+fn vertex_main() -> @builtin(position) vec4<f32> {
+  textureDimensions_cdc6c9();
+  return vec4<f32>();
 }
 
-Multiplanar external texture transform was not run.
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+@fragment
+fn fragment_main() {
+  textureDimensions_cdc6c9();
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+  textureDimensions_cdc6c9();
+}
+
+Failed to generate: error: ExternalTextureOptions missing binding entry for [group: 1, binding: 0]
diff --git a/test/tint/builtins/gen/literal/textureDimensions/cedabd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/cedabd.wgsl.expected.ir.msl
index d735d96..16fab76 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/cedabd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/cedabd.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rg32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_cedabd = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_cedabd = func():void {
+  $B2: {
     %4:texture_storage_1d<rg32sint, read> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_cedabd
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_cedabd
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_cedabd
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/cf2b50.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/cf2b50.wgsl.expected.ir.msl
index 683565c7..850dbd5 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/cf2b50.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/cf2b50.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube_array<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_cf2b50 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_cf2b50 = func():void {
+  $B2: {
     %4:texture_cube_array<f32> = load %arg_0
     %5:vec2<u32> = textureDimensions %4, 1u
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_cf2b50
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_cf2b50
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_cf2b50
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/d0778e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/d0778e.wgsl.expected.ir.msl
index 45666e4..2766e73 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/d0778e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/d0778e.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rg32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_d0778e = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_d0778e = func():void {
+  $B2: {
     %4:texture_storage_3d<rg32uint, read> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_d0778e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_d0778e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_d0778e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/d08a94.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/d08a94.wgsl.expected.ir.msl
index 69b50c4..2409557 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/d08a94.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/d08a94.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba16sint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_d08a94 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_d08a94 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba16sint, write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_d08a94
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_d08a94
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_d08a94
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/d1b882.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/d1b882.wgsl.expected.ir.msl
index af9946a..01afc41 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/d1b882.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/d1b882.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<bgra8unorm, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_d1b882 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_d1b882 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<bgra8unorm, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_d1b882
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_d1b882
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_d1b882
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/d3accd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/d3accd.wgsl.expected.ir.msl
index 27fe95a..0d009d7 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/d3accd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/d3accd.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_cube, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_d3accd = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_d3accd = func():void {
+  $B2: {
     %4:texture_depth_cube = load %arg_0
     %5:vec2<u32> = textureDimensions %4, 1u
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_d3accd
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_d3accd
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_d3accd
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/d44ac3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/d44ac3.wgsl.expected.ir.msl
index 30118d1..54c3236 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/d44ac3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/d44ac3.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<bgra8unorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_d44ac3 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_d44ac3 = func():void {
+  $B2: {
     %4:texture_storage_2d<bgra8unorm, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_d44ac3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_d44ac3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_d44ac3
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/d44dd1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/d44dd1.wgsl.expected.ir.msl
index 364a79d..3bd1f75 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/d44dd1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/d44dd1.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba16uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_d44dd1 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_d44dd1 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba16uint, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_d44dd1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_d44dd1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_d44dd1
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/d63c28.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/d63c28.wgsl.expected.ir.msl
index 4de5cb9..5a40033 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/d63c28.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/d63c28.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32float, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_d63c28 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_d63c28 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba32float, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_d63c28
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_d63c28
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_d63c28
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/d6f3cf.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/d6f3cf.wgsl.expected.ir.msl
index 07430fc..3db25b3 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/d6f3cf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/d6f3cf.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<r32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_d6f3cf = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_d6f3cf = func():void {
+  $B2: {
     %4:texture_storage_2d<r32sint, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_d6f3cf
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_d6f3cf
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_d6f3cf
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/d8ba68.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/d8ba68.wgsl.expected.ir.msl
index ec3713d..a06d2a2 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/d8ba68.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/d8ba68.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba32uint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_d8ba68 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_d8ba68 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba32uint, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_d8ba68
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_d8ba68
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_d8ba68
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/d8f887.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/d8f887.wgsl.expected.ir.msl
index 0b33a4c..ae94e9a 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/d8f887.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/d8f887.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8uint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_d8f887 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_d8f887 = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba8uint, write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_d8f887
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_d8f887
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_d8f887
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/da30d2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/da30d2.wgsl.expected.ir.msl
index f6a0b51..39888a1 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/da30d2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/da30d2.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba32float, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_da30d2 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_da30d2 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba32float, write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_da30d2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_da30d2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_da30d2
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/daf0fe.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/daf0fe.wgsl.expected.ir.msl
index 8711ebe..5df2122 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/daf0fe.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/daf0fe.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_daf0fe = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_daf0fe = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba16float, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_daf0fe
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_daf0fe
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_daf0fe
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/db7131.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/db7131.wgsl.expected.ir.msl
index a4a403e..9ad882b 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/db7131.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/db7131.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<r32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_db7131 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_db7131 = func():void {
+  $B2: {
     %4:texture_storage_3d<r32sint, read> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_db7131
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_db7131
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_db7131
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/dc83ce.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/dc83ce.wgsl.expected.ir.msl
index 1fc8070..fe3c647 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/dc83ce.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/dc83ce.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<r32uint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_dc83ce = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_dc83ce = func():void {
+  $B2: {
     %4:texture_storage_2d<r32uint, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_dc83ce
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_dc83ce
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_dc83ce
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/de03c6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/de03c6.wgsl.expected.ir.msl
index bde0adc..9078219 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/de03c6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/de03c6.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<r32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_de03c6 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_de03c6 = func():void {
+  $B2: {
     %4:texture_storage_1d<r32uint, read> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_de03c6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_de03c6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_de03c6
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/deb3c0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/deb3c0.wgsl.expected.ir.msl
index 6426348..adf6260 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/deb3c0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/deb3c0.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba16float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_deb3c0 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_deb3c0 = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba16float, read_write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_deb3c0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_deb3c0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_deb3c0
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/dee461.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/dee461.wgsl.expected.ir.msl
index f90b14b..5f041ee 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/dee461.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/dee461.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8snorm, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_dee461 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_dee461 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba8snorm, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_dee461
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_dee461
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_dee461
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/dfdc32.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/dfdc32.wgsl.expected.ir.msl
index 631d77b..f91ae8b 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/dfdc32.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/dfdc32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_dfdc32 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_dfdc32 = func():void {
+  $B2: {
     %4:texture_depth_2d_array = load %arg_0
     %5:vec2<u32> = textureDimensions %4, 1i
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_dfdc32
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_dfdc32
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_dfdc32
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/e122fe.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/e122fe.wgsl.expected.ir.msl
index 41a608b..9fa70a2 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/e122fe.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/e122fe.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8snorm, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_e122fe = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_e122fe = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba8snorm, write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_e122fe
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_e122fe
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_e122fe
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/e18a8b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/e18a8b.wgsl.expected.ir.msl
index ca48cf7..9d9dd71 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/e18a8b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/e18a8b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_e18a8b = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_e18a8b = func():void {
+  $B2: {
     %4:texture_2d<u32> = load %arg_0
     %5:vec2<u32> = textureDimensions %4, 1u
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_e18a8b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_e18a8b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_e18a8b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/e4bfd2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/e4bfd2.wgsl.expected.ir.msl
index bd02c6d..fb143d2 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/e4bfd2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/e4bfd2.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_multisampled_2d<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_e4bfd2 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_e4bfd2 = func():void {
+  $B2: {
     %4:texture_multisampled_2d<u32> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_e4bfd2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_e4bfd2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_e4bfd2
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/e4e310.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/e4e310.wgsl.expected.ir.msl
index 2f00f67..dbb3087 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/e4e310.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/e4e310.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_e4e310 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_e4e310 = func():void {
+  $B2: {
     %4:texture_2d_array<i32> = load %arg_0
     %5:vec2<u32> = textureDimensions %4, 1u
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_e4e310
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_e4e310
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_e4e310
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/e4f021.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/e4f021.wgsl.expected.ir.msl
index cd67d4f..687f5e4 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/e4f021.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/e4f021.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_e4f021 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_e4f021 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba32float, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_e4f021
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_e4f021
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_e4f021
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/e50eb8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/e50eb8.wgsl.expected.ir.msl
index f00ed8b..015b749 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/e50eb8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/e50eb8.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_e50eb8 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_e50eb8 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba8uint, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_e50eb8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_e50eb8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_e50eb8
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/e5a203.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/e5a203.wgsl.expected.ir.msl
index b87eaf8..72118bf 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/e5a203.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/e5a203.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_e5a203 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_e5a203 = func():void {
+  $B2: {
     %4:texture_3d<u32> = load %arg_0
     %5:vec3<u32> = textureDimensions %4, 1i
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_e5a203
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_e5a203
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_e5a203
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/e738f4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/e738f4.wgsl.expected.ir.msl
index 998f7c6..b50314a 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/e738f4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/e738f4.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rg32sint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_e738f4 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_e738f4 = func():void {
+  $B2: {
     %4:texture_storage_3d<rg32sint, write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_e738f4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_e738f4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_e738f4
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/e824b6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/e824b6.wgsl.expected.ir.msl
index c80e930..f8c1124 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/e824b6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/e824b6.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_e824b6 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_e824b6 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rg32uint, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_e824b6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_e824b6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_e824b6
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/e99308.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/e99308.wgsl.expected.ir.msl
index 3fe8d5a..4f612d8 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/e99308.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/e99308.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba16uint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_e99308 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_e99308 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba16uint, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_e99308
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_e99308
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_e99308
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/ea066c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/ea066c.wgsl.expected.ir.msl
index fe39c3e..9a38d3b 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/ea066c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/ea066c.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<r32float, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_ea066c = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_ea066c = func():void {
+  $B2: {
     %4:texture_storage_1d<r32float, write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_ea066c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_ea066c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_ea066c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/ea25bc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/ea25bc.wgsl.expected.ir.msl
index e249406..3941694 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/ea25bc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/ea25bc.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rg32uint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_ea25bc = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_ea25bc = func():void {
+  $B2: {
     %4:texture_storage_1d<rg32uint, write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_ea25bc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_ea25bc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_ea25bc
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/eafe19.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/eafe19.wgsl.expected.ir.msl
index 4cb7431..8971c91 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/eafe19.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/eafe19.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_eafe19 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_eafe19 = func():void {
+  $B2: {
     %4:texture_depth_2d_array = load %arg_0
     %5:vec2<u32> = textureDimensions %4, 1u
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_eafe19
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_eafe19
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_eafe19
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/eb03b1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/eb03b1.wgsl.expected.ir.msl
index 5491a5a..2f2c4deb 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/eb03b1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/eb03b1.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16float, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_eb03b1 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_eb03b1 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba16float, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_eb03b1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_eb03b1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_eb03b1
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/eb10d6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/eb10d6.wgsl.expected.ir.msl
index 9935888..009453b 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/eb10d6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/eb10d6.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_eb10d6 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_eb10d6 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba8unorm, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_eb10d6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_eb10d6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_eb10d6
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/eb1249.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/eb1249.wgsl.expected.ir.msl
index c503142..1f20f91 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/eb1249.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/eb1249.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_eb1249 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_eb1249 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba32uint, read_write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_eb1249
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_eb1249
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_eb1249
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/eb9f4d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/eb9f4d.wgsl.expected.ir.msl
index c12ee15..92df375 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/eb9f4d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/eb9f4d.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_eb9f4d = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_eb9f4d = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8sint, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_eb9f4d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_eb9f4d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_eb9f4d
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/ed1030.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/ed1030.wgsl.expected.ir.msl
index 9306ad7..74ea7f7 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/ed1030.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/ed1030.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<r32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_ed1030 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_ed1030 = func():void {
+  $B2: {
     %4:texture_storage_2d<r32uint, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_ed1030
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_ed1030
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_ed1030
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/ef2e58.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/ef2e58.wgsl.expected.ir.msl
index 6e97d5e..1568ae4 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/ef2e58.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/ef2e58.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<r32sint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_ef2e58 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_ef2e58 = func():void {
+  $B2: {
     %4:texture_storage_3d<r32sint, write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_ef2e58
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_ef2e58
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_ef2e58
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/f17acd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/f17acd.wgsl.expected.ir.msl
index 2fe4ca4..3298759 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/f17acd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/f17acd.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_1d<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_f17acd = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_f17acd = func():void {
+  $B2: {
     %4:texture_1d<f32> = load %arg_0
     %5:u32 = textureDimensions %4, 1i
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_f17acd
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_f17acd
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_f17acd
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/f264a3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/f264a3.wgsl.expected.ir.msl
index 30fb118..645e567 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/f264a3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/f264a3.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rg32sint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_f264a3 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_f264a3 = func():void {
+  $B2: {
     %4:texture_storage_1d<rg32sint, write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_f264a3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_f264a3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_f264a3
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/f3a2ac.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/f3a2ac.wgsl.expected.ir.msl
index 6b43a8f..6724bae 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/f3a2ac.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/f3a2ac.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba16float, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_f3a2ac = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_f3a2ac = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba16float, write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_f3a2ac
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_f3a2ac
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_f3a2ac
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/f406ff.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/f406ff.wgsl.expected.ir.msl
index c019323..77a9dc8 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/f406ff.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/f406ff.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_f406ff = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_f406ff = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba8unorm, read_write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_f406ff
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_f406ff
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_f406ff
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/f4321c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/f4321c.wgsl.expected.ir.msl
index 87e3a27..6380af3 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/f4321c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/f4321c.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_f4321c = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_f4321c = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba32sint, read> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_f4321c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_f4321c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_f4321c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/f48886.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/f48886.wgsl.expected.ir.msl
index c82f533..3080663 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/f48886.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/f48886.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_f48886 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_f48886 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba32sint, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_f48886
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_f48886
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_f48886
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/f4e469.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/f4e469.wgsl.expected.ir.msl
index f21daf5..b5b0589 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/f4e469.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/f4e469.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba32float, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_f4e469 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_f4e469 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba32float, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_f4e469
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_f4e469
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_f4e469
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/f55a94.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/f55a94.wgsl.expected.ir.msl
index 35c77f2..157d160 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/f55a94.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/f55a94.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_f55a94 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_f55a94 = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba8snorm, read_write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_f55a94
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_f55a94
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_f55a94
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/f626b3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/f626b3.wgsl.expected.ir.msl
index 7de3d5f..f7a92d3 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/f626b3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/f626b3.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_f626b3 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_f626b3 = func():void {
+  $B2: {
     %4:texture_cube<i32> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_f626b3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_f626b3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_f626b3
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/f7bac5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/f7bac5.wgsl.expected.ir.msl
index 77d78f9..fa54e1e 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/f7bac5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/f7bac5.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_f7bac5 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_f7bac5 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba32sint, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_f7bac5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_f7bac5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_f7bac5
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/f8522e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/f8522e.wgsl.expected.ir.msl
index 5771f3e..c56b6b9 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/f8522e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/f8522e.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_f8522e = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_f8522e = func():void {
+  $B2: {
     %4:texture_2d<i32> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_f8522e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_f8522e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_f8522e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/f93ece.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/f93ece.wgsl.expected.ir.msl
index db60c65..f0c1f58 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/f93ece.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/f93ece.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_f93ece = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_f93ece = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba32float, read_write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_f93ece
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_f93ece
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_f93ece
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/f94e55.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/f94e55.wgsl.expected.ir.msl
index ae414ed..1b8912c 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/f94e55.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/f94e55.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rg32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_f94e55 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_f94e55 = func():void {
+  $B2: {
     %4:texture_storage_2d<rg32float, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_f94e55
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_f94e55
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_f94e55
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/fbb15a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/fbb15a.wgsl.expected.ir.msl
index 8aa87ad..2e6dd38 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/fbb15a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/fbb15a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<bgra8unorm, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_fbb15a = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_fbb15a = func():void {
+  $B2: {
     %4:texture_storage_2d<bgra8unorm, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_fbb15a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_fbb15a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_fbb15a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/fdbae8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/fdbae8.wgsl.expected.ir.msl
new file mode 100644
index 0000000..3b9fcc6
--- /dev/null
+++ b/test/tint/builtins/gen/literal/textureDimensions/fdbae8.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_1d<r8unorm, read>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
+}
+
+%textureDimensions_fdbae8 = func():void {
+  $B2: {
+    %4:texture_storage_1d<r8unorm, read> = load %arg_0
+    %5:u32 = textureDimensions %4
+    %res:ptr<function, u32, read_write> = var, %5
+    %7:u32 = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %textureDimensions_fdbae8
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %textureDimensions_fdbae8
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %textureDimensions_fdbae8
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/textureDimensions/fdf6e9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/fdf6e9.wgsl.expected.ir.msl
index 2a601dd..93f9861 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/fdf6e9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/fdf6e9.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_fdf6e9 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_fdf6e9 = func():void {
+  $B2: {
     %4:texture_2d_array<i32> = load %arg_0
     %5:vec2<u32> = textureDimensions %4, 1i
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_fdf6e9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_fdf6e9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_fdf6e9
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/0166ec.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/0166ec.wgsl.expected.ir.msl
index 6849a25..2de2d4b 100644
--- a/test/tint/builtins/gen/literal/textureGather/0166ec.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/0166ec.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_cube<i32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_0166ec = func():void -> %b2 {
-  %b2 = block {
+%textureGather_0166ec = func():void {
+  $B2: {
     %5:texture_cube<i32> = load %arg_1
     %6:sampler = load %arg_2
     %7:vec4<i32> = textureGather 1u, %5, %6, vec3<f32>(1.0f)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_0166ec
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_0166ec
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_0166ec
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/04fa78.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/04fa78.wgsl.expected.ir.msl
index 93b90dd..357b0d4 100644
--- a/test/tint/builtins/gen/literal/textureGather/04fa78.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/04fa78.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_cube_array<i32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_04fa78 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_04fa78 = func():void {
+  $B2: {
     %5:texture_cube_array<i32> = load %arg_1
     %6:sampler = load %arg_2
     %7:vec4<i32> = textureGather 1u, %5, %6, vec3<f32>(1.0f), 1u
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_04fa78
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_04fa78
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_04fa78
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/10c554.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/10c554.wgsl.expected.ir.msl
index 6039ad1..55f9b2c 100644
--- a/test/tint/builtins/gen/literal/textureGather/10c554.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/10c554.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_cube, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_10c554 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_10c554 = func():void {
+  $B2: {
     %5:texture_depth_cube = load %arg_0
     %6:sampler = load %arg_1
     %7:vec4<f32> = textureGather %5, %6, vec3<f32>(1.0f)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_10c554
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_10c554
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_10c554
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/11b2db.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/11b2db.wgsl.expected.ir.msl
index 32f9230..7b59780 100644
--- a/test/tint/builtins/gen/literal/textureGather/11b2db.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/11b2db.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_cube<f32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_11b2db = func():void -> %b2 {
-  %b2 = block {
+%textureGather_11b2db = func():void {
+  $B2: {
     %5:texture_cube<f32> = load %arg_1
     %6:sampler = load %arg_2
     %7:vec4<f32> = textureGather 1u, %5, %6, vec3<f32>(1.0f)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_11b2db
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_11b2db
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_11b2db
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/17baac.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/17baac.wgsl.expected.ir.msl
index e42a4c5..5aa5c90 100644
--- a/test/tint/builtins/gen/literal/textureGather/17baac.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/17baac.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_17baac = func():void -> %b2 {
-  %b2 = block {
+%textureGather_17baac = func():void {
+  $B2: {
     %5:texture_2d_array<f32> = load %arg_1
     %6:sampler = load %arg_2
     %7:vec4<f32> = textureGather 1i, %5, %6, vec2<f32>(1.0f), 1u
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_17baac
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_17baac
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_17baac
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/1bf0ab.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/1bf0ab.wgsl.expected.ir.msl
index 73d84b5..b79f2f8 100644
--- a/test/tint/builtins/gen/literal/textureGather/1bf0ab.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/1bf0ab.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d_array<u32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_1bf0ab = func():void -> %b2 {
-  %b2 = block {
+%textureGather_1bf0ab = func():void {
+  $B2: {
     %5:texture_2d_array<u32> = load %arg_1
     %6:sampler = load %arg_2
     %7:vec4<u32> = textureGather 1u, %5, %6, vec2<f32>(1.0f), 1u
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_1bf0ab
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_1bf0ab
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_1bf0ab
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/1f7f6b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/1f7f6b.wgsl.expected.ir.msl
index 8055520..424dfff 100644
--- a/test/tint/builtins/gen/literal/textureGather/1f7f6b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/1f7f6b.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_1f7f6b = func():void -> %b2 {
-  %b2 = block {
+%textureGather_1f7f6b = func():void {
+  $B2: {
     %5:texture_depth_2d = load %arg_0
     %6:sampler = load %arg_1
     %7:vec4<f32> = textureGather %5, %6, vec2<f32>(1.0f), vec2<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_1f7f6b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_1f7f6b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_1f7f6b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/22e930.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/22e930.wgsl.expected.ir.msl
index 944bb51..a41ac3c 100644
--- a/test/tint/builtins/gen/literal/textureGather/22e930.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/22e930.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_22e930 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_22e930 = func():void {
+  $B2: {
     %5:texture_2d_array<f32> = load %arg_1
     %6:sampler = load %arg_2
     %7:vec4<f32> = textureGather 1i, %5, %6, vec2<f32>(1.0f), 1i
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_22e930
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_22e930
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_22e930
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/238ec4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/238ec4.wgsl.expected.ir.msl
index 0db669e..f95859f 100644
--- a/test/tint/builtins/gen/literal/textureGather/238ec4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/238ec4.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_238ec4 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_238ec4 = func():void {
+  $B2: {
     %5:texture_2d_array<f32> = load %arg_1
     %6:sampler = load %arg_2
     %7:vec4<f32> = textureGather 1u, %5, %6, vec2<f32>(1.0f), 1u, vec2<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_238ec4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_238ec4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_238ec4
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/24b0bd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/24b0bd.wgsl.expected.ir.msl
index c87d055..1d089d3 100644
--- a/test/tint/builtins/gen/literal/textureGather/24b0bd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/24b0bd.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_24b0bd = func():void -> %b2 {
-  %b2 = block {
+%textureGather_24b0bd = func():void {
+  $B2: {
     %5:texture_2d_array<f32> = load %arg_1
     %6:sampler = load %arg_2
     %7:vec4<f32> = textureGather 1u, %5, %6, vec2<f32>(1.0f), 1i
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_24b0bd
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_24b0bd
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_24b0bd
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/269250.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/269250.wgsl.expected.ir.msl
index 31c2076..3b1c41b 100644
--- a/test/tint/builtins/gen/literal/textureGather/269250.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/269250.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d_array<i32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_269250 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_269250 = func():void {
+  $B2: {
     %5:texture_2d_array<i32> = load %arg_1
     %6:sampler = load %arg_2
     %7:vec4<i32> = textureGather 1u, %5, %6, vec2<f32>(1.0f), 1u
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_269250
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_269250
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_269250
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/2a4f40.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/2a4f40.wgsl.expected.ir.msl
index e223ec5..ef04a44 100644
--- a/test/tint/builtins/gen/literal/textureGather/2a4f40.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/2a4f40.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_2a4f40 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_2a4f40 = func():void {
+  $B2: {
     %5:texture_depth_2d_array = load %arg_0
     %6:sampler = load %arg_1
     %7:vec4<f32> = textureGather %5, %6, vec2<f32>(1.0f), 1u
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_2a4f40
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_2a4f40
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_2a4f40
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/2cc066.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/2cc066.wgsl.expected.ir.msl
index 538738f..1db9960 100644
--- a/test/tint/builtins/gen/literal/textureGather/2cc066.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/2cc066.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d_array<u32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_2cc066 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_2cc066 = func():void {
+  $B2: {
     %5:texture_2d_array<u32> = load %arg_1
     %6:sampler = load %arg_2
     %7:vec4<u32> = textureGather 1i, %5, %6, vec2<f32>(1.0f), 1i
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_2cc066
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_2cc066
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_2cc066
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/2e0ed5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/2e0ed5.wgsl.expected.ir.msl
index 56efca4..d18346d 100644
--- a/test/tint/builtins/gen/literal/textureGather/2e0ed5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/2e0ed5.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_2e0ed5 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_2e0ed5 = func():void {
+  $B2: {
     %5:texture_depth_2d = load %arg_0
     %6:sampler = load %arg_1
     %7:vec4<f32> = textureGather %5, %6, vec2<f32>(1.0f)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_2e0ed5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_2e0ed5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_2e0ed5
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/32c4e8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/32c4e8.wgsl.expected.ir.msl
index 8a5bab2..705be42 100644
--- a/test/tint/builtins/gen/literal/textureGather/32c4e8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/32c4e8.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_cube<f32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_32c4e8 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_32c4e8 = func():void {
+  $B2: {
     %5:texture_cube<f32> = load %arg_1
     %6:sampler = load %arg_2
     %7:vec4<f32> = textureGather 1i, %5, %6, vec3<f32>(1.0f)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_32c4e8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_32c4e8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_32c4e8
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/3b32cc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/3b32cc.wgsl.expected.ir.msl
index d9085be..63f765d 100644
--- a/test/tint/builtins/gen/literal/textureGather/3b32cc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/3b32cc.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_cube<u32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_3b32cc = func():void -> %b2 {
-  %b2 = block {
+%textureGather_3b32cc = func():void {
+  $B2: {
     %5:texture_cube<u32> = load %arg_1
     %6:sampler = load %arg_2
     %7:vec4<u32> = textureGather 1i, %5, %6, vec3<f32>(1.0f)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_3b32cc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_3b32cc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_3b32cc
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/43025d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/43025d.wgsl.expected.ir.msl
index 7a4f5ec..1880cc9 100644
--- a/test/tint/builtins/gen/literal/textureGather/43025d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/43025d.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_cube_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_43025d = func():void -> %b2 {
-  %b2 = block {
+%textureGather_43025d = func():void {
+  $B2: {
     %5:texture_depth_cube_array = load %arg_0
     %6:sampler = load %arg_1
     %7:vec4<f32> = textureGather %5, %6, vec3<f32>(1.0f), 1i
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_43025d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_43025d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_43025d
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/445793.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/445793.wgsl.expected.ir.msl
index f0b729f..1cb1fba 100644
--- a/test/tint/builtins/gen/literal/textureGather/445793.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/445793.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d_array<i32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_445793 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_445793 = func():void {
+  $B2: {
     %5:texture_2d_array<i32> = load %arg_1
     %6:sampler = load %arg_2
     %7:vec4<i32> = textureGather 1u, %5, %6, vec2<f32>(1.0f), 1i
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_445793
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_445793
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_445793
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/49b07f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/49b07f.wgsl.expected.ir.msl
index 751830b..baca22c 100644
--- a/test/tint/builtins/gen/literal/textureGather/49b07f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/49b07f.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d<u32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_49b07f = func():void -> %b2 {
-  %b2 = block {
+%textureGather_49b07f = func():void {
+  $B2: {
     %5:texture_2d<u32> = load %arg_1
     %6:sampler = load %arg_2
     %7:vec4<u32> = textureGather 1i, %5, %6, vec2<f32>(1.0f), vec2<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_49b07f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_49b07f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_49b07f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/4b8103.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/4b8103.wgsl.expected.ir.msl
index 9a92e54..af27961 100644
--- a/test/tint/builtins/gen/literal/textureGather/4b8103.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/4b8103.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_4b8103 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_4b8103 = func():void {
+  $B2: {
     %5:texture_2d_array<f32> = load %arg_1
     %6:sampler = load %arg_2
     %7:vec4<f32> = textureGather 1i, %5, %6, vec2<f32>(1.0f), 1i, vec2<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_4b8103
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_4b8103
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_4b8103
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/4e8ac5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/4e8ac5.wgsl.expected.ir.msl
index cb61f79..502b00c 100644
--- a/test/tint/builtins/gen/literal/textureGather/4e8ac5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/4e8ac5.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d_array<i32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_4e8ac5 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_4e8ac5 = func():void {
+  $B2: {
     %5:texture_2d_array<i32> = load %arg_1
     %6:sampler = load %arg_2
     %7:vec4<i32> = textureGather 1i, %5, %6, vec2<f32>(1.0f), 1u
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_4e8ac5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_4e8ac5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_4e8ac5
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/5266da.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/5266da.wgsl.expected.ir.msl
index eb13c08..5d2085b 100644
--- a/test/tint/builtins/gen/literal/textureGather/5266da.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/5266da.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d<f32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_5266da = func():void -> %b2 {
-  %b2 = block {
+%textureGather_5266da = func():void {
+  $B2: {
     %5:texture_2d<f32> = load %arg_1
     %6:sampler = load %arg_2
     %7:vec4<f32> = textureGather 1i, %5, %6, vec2<f32>(1.0f)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_5266da
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_5266da
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_5266da
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/59372a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/59372a.wgsl.expected.ir.msl
index 93de9ee..4d31bc0 100644
--- a/test/tint/builtins/gen/literal/textureGather/59372a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/59372a.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_59372a = func():void -> %b2 {
-  %b2 = block {
+%textureGather_59372a = func():void {
+  $B2: {
     %5:texture_2d_array<f32> = load %arg_1
     %6:sampler = load %arg_2
     %7:vec4<f32> = textureGather 1i, %5, %6, vec2<f32>(1.0f), 1u, vec2<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_59372a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_59372a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_59372a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/5ba85f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/5ba85f.wgsl.expected.ir.msl
index 867cf34..eb3d1d3 100644
--- a/test/tint/builtins/gen/literal/textureGather/5ba85f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/5ba85f.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_cube<i32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_5ba85f = func():void -> %b2 {
-  %b2 = block {
+%textureGather_5ba85f = func():void {
+  $B2: {
     %5:texture_cube<i32> = load %arg_1
     %6:sampler = load %arg_2
     %7:vec4<i32> = textureGather 1i, %5, %6, vec3<f32>(1.0f)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_5ba85f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_5ba85f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_5ba85f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/5bd491.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/5bd491.wgsl.expected.ir.msl
index 0d402da..222d70b 100644
--- a/test/tint/builtins/gen/literal/textureGather/5bd491.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/5bd491.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d<u32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_5bd491 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_5bd491 = func():void {
+  $B2: {
     %5:texture_2d<u32> = load %arg_1
     %6:sampler = load %arg_2
     %7:vec4<u32> = textureGather 1i, %5, %6, vec2<f32>(1.0f)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_5bd491
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_5bd491
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_5bd491
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/6b7b74.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/6b7b74.wgsl.expected.ir.msl
index 2ddb552..18f188e 100644
--- a/test/tint/builtins/gen/literal/textureGather/6b7b74.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/6b7b74.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d_array<u32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_6b7b74 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_6b7b74 = func():void {
+  $B2: {
     %5:texture_2d_array<u32> = load %arg_1
     %6:sampler = load %arg_2
     %7:vec4<u32> = textureGather 1u, %5, %6, vec2<f32>(1.0f), 1u, vec2<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_6b7b74
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_6b7b74
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_6b7b74
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/751f8a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/751f8a.wgsl.expected.ir.msl
index 899776a..275c5d1 100644
--- a/test/tint/builtins/gen/literal/textureGather/751f8a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/751f8a.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_cube_array<f32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_751f8a = func():void -> %b2 {
-  %b2 = block {
+%textureGather_751f8a = func():void {
+  $B2: {
     %5:texture_cube_array<f32> = load %arg_1
     %6:sampler = load %arg_2
     %7:vec4<f32> = textureGather 1i, %5, %6, vec3<f32>(1.0f), 1i
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_751f8a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_751f8a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_751f8a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/788010.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/788010.wgsl.expected.ir.msl
index b56b9cc..dda5981 100644
--- a/test/tint/builtins/gen/literal/textureGather/788010.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/788010.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_cube_array<i32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_788010 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_788010 = func():void {
+  $B2: {
     %5:texture_cube_array<i32> = load %arg_1
     %6:sampler = load %arg_2
     %7:vec4<i32> = textureGather 1i, %5, %6, vec3<f32>(1.0f), 1u
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_788010
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_788010
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_788010
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/7c3828.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/7c3828.wgsl.expected.ir.msl
index da70c06..c3e2824 100644
--- a/test/tint/builtins/gen/literal/textureGather/7c3828.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/7c3828.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d<i32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_7c3828 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_7c3828 = func():void {
+  $B2: {
     %5:texture_2d<i32> = load %arg_1
     %6:sampler = load %arg_2
     %7:vec4<i32> = textureGather 1i, %5, %6, vec2<f32>(1.0f), vec2<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_7c3828
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_7c3828
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_7c3828
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/7dd226.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/7dd226.wgsl.expected.ir.msl
index 56035ce..5536d92 100644
--- a/test/tint/builtins/gen/literal/textureGather/7dd226.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/7dd226.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_cube_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_7dd226 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_7dd226 = func():void {
+  $B2: {
     %5:texture_depth_cube_array = load %arg_0
     %6:sampler = load %arg_1
     %7:vec4<f32> = textureGather %5, %6, vec3<f32>(1.0f), 1u
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_7dd226
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_7dd226
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_7dd226
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/829357.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/829357.wgsl.expected.ir.msl
index ae55caf..8bca05f 100644
--- a/test/tint/builtins/gen/literal/textureGather/829357.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/829357.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_cube_array<f32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_829357 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_829357 = func():void {
+  $B2: {
     %5:texture_cube_array<f32> = load %arg_1
     %6:sampler = load %arg_2
     %7:vec4<f32> = textureGather 1i, %5, %6, vec3<f32>(1.0f), 1u
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_829357
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_829357
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_829357
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/831549.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/831549.wgsl.expected.ir.msl
index 1149893..1e1a66f 100644
--- a/test/tint/builtins/gen/literal/textureGather/831549.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/831549.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_831549 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_831549 = func():void {
+  $B2: {
     %5:texture_2d_array<f32> = load %arg_1
     %6:sampler = load %arg_2
     %7:vec4<f32> = textureGather 1u, %5, %6, vec2<f32>(1.0f), 1i, vec2<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_831549
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_831549
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_831549
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/8578bc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/8578bc.wgsl.expected.ir.msl
index 2262934..fb5959d 100644
--- a/test/tint/builtins/gen/literal/textureGather/8578bc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/8578bc.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_cube_array<f32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_8578bc = func():void -> %b2 {
-  %b2 = block {
+%textureGather_8578bc = func():void {
+  $B2: {
     %5:texture_cube_array<f32> = load %arg_1
     %6:sampler = load %arg_2
     %7:vec4<f32> = textureGather 1u, %5, %6, vec3<f32>(1.0f), 1u
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_8578bc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_8578bc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_8578bc
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/89680f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/89680f.wgsl.expected.ir.msl
index 35e7c64..c64f2e5 100644
--- a/test/tint/builtins/gen/literal/textureGather/89680f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/89680f.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_cube<u32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_89680f = func():void -> %b2 {
-  %b2 = block {
+%textureGather_89680f = func():void {
+  $B2: {
     %5:texture_cube<u32> = load %arg_1
     %6:sampler = load %arg_2
     %7:vec4<u32> = textureGather 1u, %5, %6, vec3<f32>(1.0f)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_89680f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_89680f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_89680f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/8b754c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/8b754c.wgsl.expected.ir.msl
index ebf30d5..ac1da9b 100644
--- a/test/tint/builtins/gen/literal/textureGather/8b754c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/8b754c.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d_array<i32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_8b754c = func():void -> %b2 {
-  %b2 = block {
+%textureGather_8b754c = func():void {
+  $B2: {
     %5:texture_2d_array<i32> = load %arg_1
     %6:sampler = load %arg_2
     %7:vec4<i32> = textureGather 1i, %5, %6, vec2<f32>(1.0f), 1i
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_8b754c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_8b754c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_8b754c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/8fae00.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/8fae00.wgsl.expected.ir.msl
index 234b3c2..77e2b84 100644
--- a/test/tint/builtins/gen/literal/textureGather/8fae00.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/8fae00.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d<u32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_8fae00 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_8fae00 = func():void {
+  $B2: {
     %5:texture_2d<u32> = load %arg_1
     %6:sampler = load %arg_2
     %7:vec4<u32> = textureGather 1u, %5, %6, vec2<f32>(1.0f)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_8fae00
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_8fae00
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_8fae00
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/92ea47.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/92ea47.wgsl.expected.ir.msl
index 3df611d..8226fc1 100644
--- a/test/tint/builtins/gen/literal/textureGather/92ea47.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/92ea47.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d_array<u32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_92ea47 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_92ea47 = func():void {
+  $B2: {
     %5:texture_2d_array<u32> = load %arg_1
     %6:sampler = load %arg_2
     %7:vec4<u32> = textureGather 1u, %5, %6, vec2<f32>(1.0f), 1i
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_92ea47
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_92ea47
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_92ea47
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/986700.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/986700.wgsl.expected.ir.msl
index b5993d9..434d6a2 100644
--- a/test/tint/builtins/gen/literal/textureGather/986700.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/986700.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d<u32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_986700 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_986700 = func():void {
+  $B2: {
     %5:texture_2d<u32> = load %arg_1
     %6:sampler = load %arg_2
     %7:vec4<u32> = textureGather 1u, %5, %6, vec2<f32>(1.0f), vec2<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_986700
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_986700
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_986700
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/9a6358.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/9a6358.wgsl.expected.ir.msl
index 67f04e4..d904d0b 100644
--- a/test/tint/builtins/gen/literal/textureGather/9a6358.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/9a6358.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_9a6358 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_9a6358 = func():void {
+  $B2: {
     %5:texture_depth_2d_array = load %arg_0
     %6:sampler = load %arg_1
     %7:vec4<f32> = textureGather %5, %6, vec2<f32>(1.0f), 1i
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_9a6358
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_9a6358
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_9a6358
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/9ab41e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/9ab41e.wgsl.expected.ir.msl
index 84e8e13..00c2afb 100644
--- a/test/tint/builtins/gen/literal/textureGather/9ab41e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/9ab41e.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d_array<i32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_9ab41e = func():void -> %b2 {
-  %b2 = block {
+%textureGather_9ab41e = func():void {
+  $B2: {
     %5:texture_2d_array<i32> = load %arg_1
     %6:sampler = load %arg_2
     %7:vec4<i32> = textureGather 1u, %5, %6, vec2<f32>(1.0f), 1i, vec2<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_9ab41e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_9ab41e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_9ab41e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/a0372b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/a0372b.wgsl.expected.ir.msl
index f76b601..2d05f68 100644
--- a/test/tint/builtins/gen/literal/textureGather/a0372b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/a0372b.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d_array<u32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_a0372b = func():void -> %b2 {
-  %b2 = block {
+%textureGather_a0372b = func():void {
+  $B2: {
     %5:texture_2d_array<u32> = load %arg_1
     %6:sampler = load %arg_2
     %7:vec4<u32> = textureGather 1i, %5, %6, vec2<f32>(1.0f), 1u
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_a0372b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_a0372b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_a0372b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/a68027.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/a68027.wgsl.expected.ir.msl
index 9606f7d..1c005b5 100644
--- a/test/tint/builtins/gen/literal/textureGather/a68027.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/a68027.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_a68027 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_a68027 = func():void {
+  $B2: {
     %5:texture_depth_2d_array = load %arg_0
     %6:sampler = load %arg_1
     %7:vec4<f32> = textureGather %5, %6, vec2<f32>(1.0f), 1u, vec2<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_a68027
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_a68027
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_a68027
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/aaf6bd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/aaf6bd.wgsl.expected.ir.msl
index edeb7fd..bd352c7 100644
--- a/test/tint/builtins/gen/literal/textureGather/aaf6bd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/aaf6bd.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_cube_array<i32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_aaf6bd = func():void -> %b2 {
-  %b2 = block {
+%textureGather_aaf6bd = func():void {
+  $B2: {
     %5:texture_cube_array<i32> = load %arg_1
     %6:sampler = load %arg_2
     %7:vec4<i32> = textureGather 1u, %5, %6, vec3<f32>(1.0f), 1i
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_aaf6bd
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_aaf6bd
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_aaf6bd
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/af55b3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/af55b3.wgsl.expected.ir.msl
index 2bbd6af..baf6eb5 100644
--- a/test/tint/builtins/gen/literal/textureGather/af55b3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/af55b3.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d<f32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_af55b3 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_af55b3 = func():void {
+  $B2: {
     %5:texture_2d<f32> = load %arg_1
     %6:sampler = load %arg_2
     %7:vec4<f32> = textureGather 1i, %5, %6, vec2<f32>(1.0f), vec2<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_af55b3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_af55b3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_af55b3
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/bb3ac5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/bb3ac5.wgsl.expected.ir.msl
index c59ba96..1e20fa8 100644
--- a/test/tint/builtins/gen/literal/textureGather/bb3ac5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/bb3ac5.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d<i32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_bb3ac5 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_bb3ac5 = func():void {
+  $B2: {
     %5:texture_2d<i32> = load %arg_1
     %6:sampler = load %arg_2
     %7:vec4<i32> = textureGather 1i, %5, %6, vec2<f32>(1.0f)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_bb3ac5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_bb3ac5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_bb3ac5
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/bd33b6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/bd33b6.wgsl.expected.ir.msl
index 45ed278..cc62d57 100644
--- a/test/tint/builtins/gen/literal/textureGather/bd33b6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/bd33b6.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d_array<i32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_bd33b6 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_bd33b6 = func():void {
+  $B2: {
     %5:texture_2d_array<i32> = load %arg_1
     %6:sampler = load %arg_2
     %7:vec4<i32> = textureGather 1i, %5, %6, vec2<f32>(1.0f), 1u, vec2<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_bd33b6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_bd33b6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_bd33b6
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/be276f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/be276f.wgsl.expected.ir.msl
index cda04ef..82ec8d6 100644
--- a/test/tint/builtins/gen/literal/textureGather/be276f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/be276f.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_cube_array<u32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_be276f = func():void -> %b2 {
-  %b2 = block {
+%textureGather_be276f = func():void {
+  $B2: {
     %5:texture_cube_array<u32> = load %arg_1
     %6:sampler = load %arg_2
     %7:vec4<u32> = textureGather 1i, %5, %6, vec3<f32>(1.0f), 1u
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_be276f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_be276f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_be276f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/c0640c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/c0640c.wgsl.expected.ir.msl
index f0433f3..4632728 100644
--- a/test/tint/builtins/gen/literal/textureGather/c0640c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/c0640c.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_cube_array<i32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_c0640c = func():void -> %b2 {
-  %b2 = block {
+%textureGather_c0640c = func():void {
+  $B2: {
     %5:texture_cube_array<i32> = load %arg_1
     %6:sampler = load %arg_2
     %7:vec4<i32> = textureGather 1i, %5, %6, vec3<f32>(1.0f), 1i
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_c0640c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_c0640c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_c0640c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/ccadde.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/ccadde.wgsl.expected.ir.msl
index a5fc7be..b601e93 100644
--- a/test/tint/builtins/gen/literal/textureGather/ccadde.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/ccadde.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d<i32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_ccadde = func():void -> %b2 {
-  %b2 = block {
+%textureGather_ccadde = func():void {
+  $B2: {
     %5:texture_2d<i32> = load %arg_1
     %6:sampler = load %arg_2
     %7:vec4<i32> = textureGather 1u, %5, %6, vec2<f32>(1.0f)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_ccadde
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_ccadde
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_ccadde
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/ce5578.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/ce5578.wgsl.expected.ir.msl
index 9749031..21a6f2d 100644
--- a/test/tint/builtins/gen/literal/textureGather/ce5578.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/ce5578.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d_array<u32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_ce5578 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_ce5578 = func():void {
+  $B2: {
     %5:texture_2d_array<u32> = load %arg_1
     %6:sampler = load %arg_2
     %7:vec4<u32> = textureGather 1i, %5, %6, vec2<f32>(1.0f), 1u, vec2<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_ce5578
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_ce5578
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_ce5578
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/cf9112.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/cf9112.wgsl.expected.ir.msl
index f1c53ca..f54f06f 100644
--- a/test/tint/builtins/gen/literal/textureGather/cf9112.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/cf9112.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d_array<i32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_cf9112 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_cf9112 = func():void {
+  $B2: {
     %5:texture_2d_array<i32> = load %arg_1
     %6:sampler = load %arg_2
     %7:vec4<i32> = textureGather 1u, %5, %6, vec2<f32>(1.0f), 1u, vec2<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_cf9112
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_cf9112
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_cf9112
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/d1f187.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/d1f187.wgsl.expected.ir.msl
index 225b372..f1a227f 100644
--- a/test/tint/builtins/gen/literal/textureGather/d1f187.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/d1f187.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d_array<u32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_d1f187 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_d1f187 = func():void {
+  $B2: {
     %5:texture_2d_array<u32> = load %arg_1
     %6:sampler = load %arg_2
     %7:vec4<u32> = textureGather 1i, %5, %6, vec2<f32>(1.0f), 1i, vec2<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_d1f187
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_d1f187
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_d1f187
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/d4b5c6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/d4b5c6.wgsl.expected.ir.msl
index 326d6bc..0f145e1 100644
--- a/test/tint/builtins/gen/literal/textureGather/d4b5c6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/d4b5c6.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_cube_array<u32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_d4b5c6 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_d4b5c6 = func():void {
+  $B2: {
     %5:texture_cube_array<u32> = load %arg_1
     %6:sampler = load %arg_2
     %7:vec4<u32> = textureGather 1u, %5, %6, vec3<f32>(1.0f), 1i
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_d4b5c6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_d4b5c6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_d4b5c6
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/d6507c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/d6507c.wgsl.expected.ir.msl
index 4cce2e2..1c3d988 100644
--- a/test/tint/builtins/gen/literal/textureGather/d6507c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/d6507c.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d<f32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_d6507c = func():void -> %b2 {
-  %b2 = block {
+%textureGather_d6507c = func():void {
+  $B2: {
     %5:texture_2d<f32> = load %arg_1
     %6:sampler = load %arg_2
     %7:vec4<f32> = textureGather 1u, %5, %6, vec2<f32>(1.0f), vec2<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_d6507c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_d6507c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_d6507c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/d8e958.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/d8e958.wgsl.expected.ir.msl
index b290cae..217a253 100644
--- a/test/tint/builtins/gen/literal/textureGather/d8e958.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/d8e958.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d<f32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_d8e958 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_d8e958 = func():void {
+  $B2: {
     %5:texture_2d<f32> = load %arg_1
     %6:sampler = load %arg_2
     %7:vec4<f32> = textureGather 1u, %5, %6, vec2<f32>(1.0f)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_d8e958
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_d8e958
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_d8e958
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/d90605.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/d90605.wgsl.expected.ir.msl
index 414d148..b8bdbcc 100644
--- a/test/tint/builtins/gen/literal/textureGather/d90605.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/d90605.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_d90605 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_d90605 = func():void {
+  $B2: {
     %5:texture_depth_2d_array = load %arg_0
     %6:sampler = load %arg_1
     %7:vec4<f32> = textureGather %5, %6, vec2<f32>(1.0f), 1i, vec2<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_d90605
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_d90605
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_d90605
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/d98d59.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/d98d59.wgsl.expected.ir.msl
index 12c286e..5a30a46 100644
--- a/test/tint/builtins/gen/literal/textureGather/d98d59.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/d98d59.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_cube_array<f32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_d98d59 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_d98d59 = func():void {
+  $B2: {
     %5:texture_cube_array<f32> = load %arg_1
     %6:sampler = load %arg_2
     %7:vec4<f32> = textureGather 1u, %5, %6, vec3<f32>(1.0f), 1i
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_d98d59
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_d98d59
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_d98d59
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/dc6661.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/dc6661.wgsl.expected.ir.msl
index 9e614d9..6a1c24a 100644
--- a/test/tint/builtins/gen/literal/textureGather/dc6661.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/dc6661.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d<i32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_dc6661 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_dc6661 = func():void {
+  $B2: {
     %5:texture_2d<i32> = load %arg_1
     %6:sampler = load %arg_2
     %7:vec4<i32> = textureGather 1u, %5, %6, vec2<f32>(1.0f), vec2<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_dc6661
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_dc6661
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_dc6661
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/e2acac.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/e2acac.wgsl.expected.ir.msl
index 3131743..c5f2013 100644
--- a/test/tint/builtins/gen/literal/textureGather/e2acac.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/e2acac.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_cube_array<u32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_e2acac = func():void -> %b2 {
-  %b2 = block {
+%textureGather_e2acac = func():void {
+  $B2: {
     %5:texture_cube_array<u32> = load %arg_1
     %6:sampler = load %arg_2
     %7:vec4<u32> = textureGather 1u, %5, %6, vec3<f32>(1.0f), 1u
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_e2acac
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_e2acac
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_e2acac
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/e3165f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/e3165f.wgsl.expected.ir.msl
index 3cce8d3..a2fa561 100644
--- a/test/tint/builtins/gen/literal/textureGather/e3165f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/e3165f.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d_array<u32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_e3165f = func():void -> %b2 {
-  %b2 = block {
+%textureGather_e3165f = func():void {
+  $B2: {
     %5:texture_2d_array<u32> = load %arg_1
     %6:sampler = load %arg_2
     %7:vec4<u32> = textureGather 1u, %5, %6, vec2<f32>(1.0f), 1i, vec2<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_e3165f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_e3165f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_e3165f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/e9d390.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/e9d390.wgsl.expected.ir.msl
index 31d3b99..5e9c142 100644
--- a/test/tint/builtins/gen/literal/textureGather/e9d390.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/e9d390.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d_array<i32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_e9d390 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_e9d390 = func():void {
+  $B2: {
     %5:texture_2d_array<i32> = load %arg_1
     %6:sampler = load %arg_2
     %7:vec4<i32> = textureGather 1i, %5, %6, vec2<f32>(1.0f), 1i, vec2<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_e9d390
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_e9d390
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_e9d390
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/ea8eb4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/ea8eb4.wgsl.expected.ir.msl
index fbba23c..5923b70 100644
--- a/test/tint/builtins/gen/literal/textureGather/ea8eb4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/ea8eb4.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_ea8eb4 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_ea8eb4 = func():void {
+  $B2: {
     %5:texture_2d_array<f32> = load %arg_1
     %6:sampler = load %arg_2
     %7:vec4<f32> = textureGather 1u, %5, %6, vec2<f32>(1.0f), 1u
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_ea8eb4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_ea8eb4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_ea8eb4
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGather/f2c6e3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGather/f2c6e3.wgsl.expected.ir.msl
index dddb419..6ecf246 100644
--- a/test/tint/builtins/gen/literal/textureGather/f2c6e3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGather/f2c6e3.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_cube_array<u32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_f2c6e3 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_f2c6e3 = func():void {
+  $B2: {
     %5:texture_cube_array<u32> = load %arg_1
     %6:sampler = load %arg_2
     %7:vec4<u32> = textureGather 1i, %5, %6, vec3<f32>(1.0f), 1i
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGather_f2c6e3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGather_f2c6e3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGather_f2c6e3
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGatherCompare/144a9a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGatherCompare/144a9a.wgsl.expected.ir.msl
index c155626..63517b7 100644
--- a/test/tint/builtins/gen/literal/textureGatherCompare/144a9a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGatherCompare/144a9a.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler_comparison, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGatherCompare_144a9a = func():void -> %b2 {
-  %b2 = block {
+%textureGatherCompare_144a9a = func():void {
+  $B2: {
     %5:texture_depth_2d_array = load %arg_0
     %6:sampler_comparison = load %arg_1
     %7:vec4<f32> = textureGatherCompare %5, %6, vec2<f32>(1.0f), 1u, 1.0f, vec2<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGatherCompare_144a9a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGatherCompare_144a9a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGatherCompare_144a9a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGatherCompare/182fd4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGatherCompare/182fd4.wgsl.expected.ir.msl
index 2dba1a5..b442160 100644
--- a/test/tint/builtins/gen/literal/textureGatherCompare/182fd4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGatherCompare/182fd4.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_cube, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler_comparison, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGatherCompare_182fd4 = func():void -> %b2 {
-  %b2 = block {
+%textureGatherCompare_182fd4 = func():void {
+  $B2: {
     %5:texture_depth_cube = load %arg_0
     %6:sampler_comparison = load %arg_1
     %7:vec4<f32> = textureGatherCompare %5, %6, vec3<f32>(1.0f), 1.0f
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGatherCompare_182fd4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGatherCompare_182fd4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGatherCompare_182fd4
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGatherCompare/2e409c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGatherCompare/2e409c.wgsl.expected.ir.msl
index a06e4ac..ffa76b6 100644
--- a/test/tint/builtins/gen/literal/textureGatherCompare/2e409c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGatherCompare/2e409c.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_cube_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler_comparison, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGatherCompare_2e409c = func():void -> %b2 {
-  %b2 = block {
+%textureGatherCompare_2e409c = func():void {
+  $B2: {
     %5:texture_depth_cube_array = load %arg_0
     %6:sampler_comparison = load %arg_1
     %7:vec4<f32> = textureGatherCompare %5, %6, vec3<f32>(1.0f), 1u, 1.0f
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGatherCompare_2e409c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGatherCompare_2e409c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGatherCompare_2e409c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGatherCompare/313add.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGatherCompare/313add.wgsl.expected.ir.msl
index 4fa2a5d..1c71372 100644
--- a/test/tint/builtins/gen/literal/textureGatherCompare/313add.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGatherCompare/313add.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler_comparison, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGatherCompare_313add = func():void -> %b2 {
-  %b2 = block {
+%textureGatherCompare_313add = func():void {
+  $B2: {
     %5:texture_depth_2d = load %arg_0
     %6:sampler_comparison = load %arg_1
     %7:vec4<f32> = textureGatherCompare %5, %6, vec2<f32>(1.0f), 1.0f, vec2<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGatherCompare_313add
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGatherCompare_313add
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGatherCompare_313add
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGatherCompare/60d2d1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGatherCompare/60d2d1.wgsl.expected.ir.msl
index c3ce65b..6c5bf4a 100644
--- a/test/tint/builtins/gen/literal/textureGatherCompare/60d2d1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGatherCompare/60d2d1.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_cube_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler_comparison, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGatherCompare_60d2d1 = func():void -> %b2 {
-  %b2 = block {
+%textureGatherCompare_60d2d1 = func():void {
+  $B2: {
     %5:texture_depth_cube_array = load %arg_0
     %6:sampler_comparison = load %arg_1
     %7:vec4<f32> = textureGatherCompare %5, %6, vec3<f32>(1.0f), 1i, 1.0f
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGatherCompare_60d2d1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGatherCompare_60d2d1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGatherCompare_60d2d1
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGatherCompare/6d9352.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGatherCompare/6d9352.wgsl.expected.ir.msl
index 184cef9..2c68f64 100644
--- a/test/tint/builtins/gen/literal/textureGatherCompare/6d9352.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGatherCompare/6d9352.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler_comparison, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGatherCompare_6d9352 = func():void -> %b2 {
-  %b2 = block {
+%textureGatherCompare_6d9352 = func():void {
+  $B2: {
     %5:texture_depth_2d = load %arg_0
     %6:sampler_comparison = load %arg_1
     %7:vec4<f32> = textureGatherCompare %5, %6, vec2<f32>(1.0f), 1.0f
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGatherCompare_6d9352
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGatherCompare_6d9352
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGatherCompare_6d9352
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGatherCompare/783e65.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGatherCompare/783e65.wgsl.expected.ir.msl
index 0937c22..5da8d82 100644
--- a/test/tint/builtins/gen/literal/textureGatherCompare/783e65.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGatherCompare/783e65.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler_comparison, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGatherCompare_783e65 = func():void -> %b2 {
-  %b2 = block {
+%textureGatherCompare_783e65 = func():void {
+  $B2: {
     %5:texture_depth_2d_array = load %arg_0
     %6:sampler_comparison = load %arg_1
     %7:vec4<f32> = textureGatherCompare %5, %6, vec2<f32>(1.0f), 1i, 1.0f
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGatherCompare_783e65
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGatherCompare_783e65
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGatherCompare_783e65
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGatherCompare/b5bc43.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGatherCompare/b5bc43.wgsl.expected.ir.msl
index 6e2db66..26312da 100644
--- a/test/tint/builtins/gen/literal/textureGatherCompare/b5bc43.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGatherCompare/b5bc43.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler_comparison, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGatherCompare_b5bc43 = func():void -> %b2 {
-  %b2 = block {
+%textureGatherCompare_b5bc43 = func():void {
+  $B2: {
     %5:texture_depth_2d_array = load %arg_0
     %6:sampler_comparison = load %arg_1
     %7:vec4<f32> = textureGatherCompare %5, %6, vec2<f32>(1.0f), 1u, 1.0f
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGatherCompare_b5bc43
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGatherCompare_b5bc43
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGatherCompare_b5bc43
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureGatherCompare/f585cc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureGatherCompare/f585cc.wgsl.expected.ir.msl
index 7fd0360..f5ae344 100644
--- a/test/tint/builtins/gen/literal/textureGatherCompare/f585cc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureGatherCompare/f585cc.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler_comparison, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGatherCompare_f585cc = func():void -> %b2 {
-  %b2 = block {
+%textureGatherCompare_f585cc = func():void {
+  $B2: {
     %5:texture_depth_2d_array = load %arg_0
     %6:sampler_comparison = load %arg_1
     %7:vec4<f32> = textureGatherCompare %5, %6, vec2<f32>(1.0f), 1i, 1.0f, vec2<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureGatherCompare_f585cc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureGatherCompare_f585cc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureGatherCompare_f585cc
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/012e11.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/012e11.wgsl.expected.ir.msl
index 9a84c85..36f4d14 100644
--- a/test/tint/builtins/gen/literal/textureLoad/012e11.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/012e11.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_012e11 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_012e11 = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba8unorm, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec3<i32>(1i)
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_012e11
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_012e11
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_012e11
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/019da0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/019da0.wgsl.expected.ir.msl
index e98d510..b0cad39 100644
--- a/test/tint/builtins/gen/literal/textureLoad/019da0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/019da0.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_019da0 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_019da0 = func():void {
+  $B2: {
     %4:texture_3d<f32> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec3<i32>(1i), 1u
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_019da0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_019da0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_019da0
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/01cd01.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/01cd01.wgsl.expected.ir.msl
index baa4b5f..2941dc7 100644
--- a/test/tint/builtins/gen/literal/textureLoad/01cd01.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/01cd01.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_01cd01 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_01cd01 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<r32sint, read_write> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<u32>(1u), 1u
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_01cd01
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_01cd01
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_01cd01
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/026217.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/026217.wgsl.expected.ir.msl
index dd0d8a7..a88be3d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/026217.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/026217.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_026217 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_026217 = func():void {
+  $B2: {
     %4:texture_2d_array<u32> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<u32>(1u), 1u, 1i
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_026217
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_026217
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_026217
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/02c48d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/02c48d.wgsl.expected.ir.msl
index 56f4896..04e2cff 100644
--- a/test/tint/builtins/gen/literal/textureLoad/02c48d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/02c48d.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba16uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_02c48d = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_02c48d = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba16uint, read_write> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec3<u32>(1u)
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_02c48d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_02c48d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_02c48d
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/02ef1f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/02ef1f.wgsl.expected.ir.msl
index 436b341..99115d2 100644
--- a/test/tint/builtins/gen/literal/textureLoad/02ef1f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/02ef1f.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<r32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_02ef1f = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_02ef1f = func():void {
+  $B2: {
     %4:texture_storage_2d<r32uint, read_write> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<i32>(1i)
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_02ef1f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_02ef1f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_02ef1f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/03e03e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/03e03e.wgsl.expected.ir.msl
index ca46227..6ac4028 100644
--- a/test/tint/builtins/gen/literal/textureLoad/03e03e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/03e03e.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba16sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_03e03e = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_03e03e = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba16sint, read_write> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec3<i32>(1i)
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_03e03e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_03e03e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_03e03e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/045ec9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/045ec9.wgsl.expected.ir.msl
index 94a286f..2187362 100644
--- a/test/tint/builtins/gen/literal/textureLoad/045ec9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/045ec9.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_045ec9 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_045ec9 = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba8sint, read> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec3<u32>(1u)
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_045ec9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_045ec9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_045ec9
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/04b911.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/04b911.wgsl.expected.ir.msl
index b5f6aa2..a0059d1 100644
--- a/test/tint/builtins/gen/literal/textureLoad/04b911.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/04b911.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_04b911 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_04b911 = func():void {
+  $B2: {
     %4:texture_depth_2d_array = load %arg_0
     %5:f32 = textureLoad %4, vec2<u32>(1u), 1i, 1u
     %res:ptr<function, f32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_04b911
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_04b911
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_04b911
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/050c33.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/050c33.wgsl.expected.ir.msl
index 9086ebc..faf0593 100644
--- a/test/tint/builtins/gen/literal/textureLoad/050c33.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/050c33.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rg32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_050c33 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_050c33 = func():void {
+  $B2: {
     %4:texture_storage_2d<rg32uint, read> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<i32>(1i)
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_050c33
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_050c33
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_050c33
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/054350.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/054350.wgsl.expected.ir.msl
index b11527f..22c060a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/054350.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/054350.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_054350 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_054350 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba8uint, read_write> = load %arg_0
     %5:vec4<u32> = textureLoad %4, 1u
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_054350
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_054350
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_054350
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/0674b1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/0674b1.wgsl.expected.ir.msl
index 27295cd..1095e81 100644
--- a/test/tint/builtins/gen/literal/textureLoad/0674b1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/0674b1.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8snorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_0674b1 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_0674b1 = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba8snorm, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec3<u32>(1u)
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_0674b1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_0674b1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_0674b1
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/06ac37.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/06ac37.wgsl.expected.ir.msl
index 8d817ff..607b1dd 100644
--- a/test/tint/builtins/gen/literal/textureLoad/06ac37.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/06ac37.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_06ac37 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_06ac37 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba32float, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<u32>(1u), 1u
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_06ac37
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_06ac37
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_06ac37
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/072e26.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/072e26.wgsl.expected.ir.msl
index aa3defa..459910a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/072e26.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/072e26.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8snorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_072e26 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_072e26 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8snorm, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<i32>(1i), 1i
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_072e26
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_072e26
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_072e26
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/078bc4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/078bc4.wgsl.expected.ir.msl
index a51efa5..889d13f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/078bc4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/078bc4.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8snorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_078bc4 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_078bc4 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba8snorm, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<i32>(1i)
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_078bc4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_078bc4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_078bc4
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/0b515a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/0b515a.wgsl.expected.ir.msl
index abe638a..3a3ac6b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/0b515a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/0b515a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_0b515a = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_0b515a = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba16sint, read_write> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<u32>(1u), 1u
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_0b515a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_0b515a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_0b515a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/0cb698.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/0cb698.wgsl.expected.ir.msl
index 50161c7..0c10bb6 100644
--- a/test/tint/builtins/gen/literal/textureLoad/0cb698.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/0cb698.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_1d<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_0cb698 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_0cb698 = func():void {
+  $B2: {
     %4:texture_1d<i32> = load %arg_0
     %5:vec4<i32> = textureLoad %4, 1u, 1u
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_0cb698
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_0cb698
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_0cb698
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/10db82.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/10db82.wgsl.expected.ir.msl
index 0211ac9..13670e4 100644
--- a/test/tint/builtins/gen/literal/textureLoad/10db82.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/10db82.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_10db82 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_10db82 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba16float, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<u32>(1u), 1u
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_10db82
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_10db82
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_10db82
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/126466.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/126466.wgsl.expected.ir.msl
index 2c04acd..bc88972 100644
--- a/test/tint/builtins/gen/literal/textureLoad/126466.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/126466.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rg32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_126466 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_126466 = func():void {
+  $B2: {
     %4:texture_storage_3d<rg32float, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec3<i32>(1i)
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_126466
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_126466
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_126466
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/127e12.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/127e12.wgsl.expected.ir.msl
index 8bdb6bd..aab4faa 100644
--- a/test/tint/builtins/gen/literal/textureLoad/127e12.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/127e12.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_127e12 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_127e12 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba16uint, read> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<i32>(1i), 1i
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_127e12
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_127e12
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_127e12
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/1373dc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/1373dc.wgsl.expected.ir.msl
index 6681d51..eaecec0 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1373dc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/1373dc.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_1d<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_1373dc = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_1373dc = func():void {
+  $B2: {
     %4:texture_1d<f32> = load %arg_0
     %5:vec4<f32> = textureLoad %4, 1u, 1i
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_1373dc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_1373dc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_1373dc
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/13d539.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/13d539.wgsl.expected.ir.msl
index f68a88f..63b1c97 100644
--- a/test/tint/builtins/gen/literal/textureLoad/13d539.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/13d539.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_13d539 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_13d539 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba16sint, read> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<u32>(1u), 1i
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_13d539
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_13d539
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_13d539
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/13e90c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/13e90c.wgsl.expected.ir.msl
index 4aca1cc..89c884a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/13e90c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/13e90c.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_13e90c = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_13e90c = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba16float, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<i32>(1i), 1u
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_13e90c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_13e90c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_13e90c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/143d84.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/143d84.wgsl.expected.ir.msl
index df4c642..5d90cd4 100644
--- a/test/tint/builtins/gen/literal/textureLoad/143d84.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/143d84.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_143d84 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_143d84 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rg32float, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<i32>(1i), 1u
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_143d84
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_143d84
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_143d84
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/1471b8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/1471b8.wgsl.expected.ir.msl
index bc71973..f3d1126 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1471b8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/1471b8.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_1471b8 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_1471b8 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba32sint, read> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<u32>(1u), 1i
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_1471b8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_1471b8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_1471b8
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/14cc4c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/14cc4c.wgsl.expected.ir.msl
index e7eb9a3..fd3831b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/14cc4c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/14cc4c.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_14cc4c = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_14cc4c = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba8unorm, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<i32>(1i)
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_14cc4c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_14cc4c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_14cc4c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/1561a7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/1561a7.wgsl.expected.ir.msl
index 6e58a79..1869055 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1561a7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/1561a7.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<r32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_1561a7 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_1561a7 = func():void {
+  $B2: {
     %4:texture_storage_1d<r32uint, read> = load %arg_0
     %5:vec4<u32> = textureLoad %4, 1i
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_1561a7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_1561a7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_1561a7
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/15e675.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/15e675.wgsl.expected.ir.msl
index 817c87b..9160919 100644
--- a/test/tint/builtins/gen/literal/textureLoad/15e675.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/15e675.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_15e675 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_15e675 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8uint, read> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<u32>(1u), 1i
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_15e675
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_15e675
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_15e675
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/1619bf.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/1619bf.wgsl.expected.ir.msl
index 31bc400..9049d66 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1619bf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/1619bf.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_1619bf = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_1619bf = func():void {
+  $B2: {
     %4:texture_storage_2d_array<r32sint, read_write> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<u32>(1u), 1i
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_1619bf
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_1619bf
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_1619bf
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/168dc8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/168dc8.wgsl.expected.ir.msl
index 85980ef..6595d81 100644
--- a/test/tint/builtins/gen/literal/textureLoad/168dc8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/168dc8.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_168dc8 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_168dc8 = func():void {
+  $B2: {
     %4:texture_2d_array<i32> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<u32>(1u), 1i, 1i
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_168dc8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_168dc8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_168dc8
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/170593.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/170593.wgsl.expected.ir.msl
index 27a32ae..77f3d10 100644
--- a/test/tint/builtins/gen/literal/textureLoad/170593.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/170593.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_170593 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_170593 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba32uint, read_write> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<i32>(1i)
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_170593
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_170593
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_170593
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/17095b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/17095b.wgsl.expected.ir.msl
index 57c83da..fb4a28d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/17095b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/17095b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_17095b = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_17095b = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba32uint, read_write> = load %arg_0
     %5:vec4<u32> = textureLoad %4, 1u
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_17095b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_17095b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_17095b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/18ac11.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/18ac11.wgsl.expected.ir.msl
index 03d2314..3ae6e69 100644
--- a/test/tint/builtins/gen/literal/textureLoad/18ac11.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/18ac11.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rg32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_18ac11 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_18ac11 = func():void {
+  $B2: {
     %4:texture_storage_1d<rg32sint, read> = load %arg_0
     %5:vec4<i32> = textureLoad %4, 1u
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_18ac11
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_18ac11
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_18ac11
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/19cf87.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/19cf87.wgsl.expected.ir.msl
index 03ff7c1..c498cfb 100644
--- a/test/tint/builtins/gen/literal/textureLoad/19cf87.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/19cf87.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_19cf87 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_19cf87 = func():void {
+  $B2: {
     %4:texture_depth_2d = load %arg_0
     %5:f32 = textureLoad %4, vec2<i32>(1i), 1i
     %res:ptr<function, f32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_19cf87
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_19cf87
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_19cf87
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/19d6be.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/19d6be.wgsl.expected.ir.msl
index e474424..0552217 100644
--- a/test/tint/builtins/gen/literal/textureLoad/19d6be.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/19d6be.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<r32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_19d6be = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_19d6be = func():void {
+  $B2: {
     %4:texture_storage_3d<r32uint, read_write> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec3<u32>(1u)
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_19d6be
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_19d6be
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_19d6be
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/19e5ca.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/19e5ca.wgsl.expected.ir.msl
new file mode 100644
index 0000000..f202122
--- /dev/null
+++ b/test/tint/builtins/gen/literal/textureLoad/19e5ca.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_2d_array<r8unorm, read>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%textureLoad_19e5ca = func():void {
+  $B2: {
+    %4:texture_storage_2d_array<r8unorm, read> = load %arg_0
+    %5:vec4<f32> = textureLoad %4, vec2<i32>(1i), 1u
+    %res:ptr<function, vec4<f32>, read_write> = var, %5
+    %7:vec4<f32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %textureLoad_19e5ca
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %textureLoad_19e5ca
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %textureLoad_19e5ca
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/textureLoad/1a062f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/1a062f.wgsl.expected.ir.msl
index 4f84965..481b6f9 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1a062f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/1a062f.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_1a062f = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_1a062f = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba16float, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<i32>(1i), 1i
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_1a062f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_1a062f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_1a062f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/1a8452.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/1a8452.wgsl.expected.ir.msl
index 3caf14d..bee8d48 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1a8452.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/1a8452.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_1a8452 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_1a8452 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba8uint, read> = load %arg_0
     %5:vec4<u32> = textureLoad %4, 1i
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_1a8452
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_1a8452
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_1a8452
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/1aa950.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/1aa950.wgsl.expected.ir.msl
index 462afbe..49ea59d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1aa950.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/1aa950.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_1aa950 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_1aa950 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba32sint, read> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<i32>(1i), 1u
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_1aa950
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_1aa950
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_1aa950
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/1b051f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/1b051f.wgsl.expected.ir.msl
index 59e94bc..35c96bd 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1b051f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/1b051f.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_1b051f = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_1b051f = func():void {
+  $B2: {
     %4:texture_2d_array<u32> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<i32>(1i), 1u, 1u
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_1b051f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_1b051f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_1b051f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/1b4332.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/1b4332.wgsl.expected.ir.msl
index b0c070c..17d3b3f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1b4332.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/1b4332.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<r32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_1b4332 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_1b4332 = func():void {
+  $B2: {
     %4:texture_storage_3d<r32uint, read_write> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec3<i32>(1i)
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_1b4332
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_1b4332
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_1b4332
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/1b8588.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/1b8588.wgsl.expected.ir.msl
index 1d6a966..f85fc6c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1b8588.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/1b8588.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_1d<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_1b8588 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_1b8588 = func():void {
+  $B2: {
     %4:texture_1d<u32> = load %arg_0
     %5:vec4<u32> = textureLoad %4, 1i, 1i
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_1b8588
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_1b8588
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_1b8588
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/1bc5ab.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/1bc5ab.wgsl.expected.ir.msl
index 2574d91..666c2d5 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1bc5ab.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/1bc5ab.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_1bc5ab = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_1bc5ab = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba8snorm, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec3<u32>(1u)
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_1bc5ab
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_1bc5ab
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_1bc5ab
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/1bfdfb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/1bfdfb.wgsl.expected.ir.msl
index b88733c..a841470 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1bfdfb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/1bfdfb.wgsl.expected.ir.msl
@@ -1,43 +1,29 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1057 internal compiler error: %b1 = block {  # root
-  %arg_0:ptr<handle, texture_external, read> = var @binding_point(1, 0)
-  %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
+
+@group(1) @binding(0) var arg_0 : texture_external;
+
+fn textureLoad_1bfdfb() {
+  var res : vec4<f32> = textureLoad(arg_0, vec2<u32>(1u));
+  prevent_dce = res;
 }
 
-%textureLoad_1bfdfb = func():void -> %b2 {
-  %b2 = block {
-    %4:texture_external = load %arg_0
-    %5:vec4<f32> = textureLoad %4, vec2<u32>(1u)
-    %res:ptr<function, vec4<f32>, read_write> = var, %5
-    %7:vec4<f32> = load %res
-    store %prevent_dce, %7
-    ret
-  }
-}
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %9:void = call %textureLoad_1bfdfb
-    ret vec4<f32>(0.0f)
-  }
-}
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %11:void = call %textureLoad_1bfdfb
-    ret
-  }
-}
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %13:void = call %textureLoad_1bfdfb
-    ret
-  }
+@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+@vertex
+fn vertex_main() -> @builtin(position) vec4<f32> {
+  textureLoad_1bfdfb();
+  return vec4<f32>();
 }
 
-Multiplanar external texture transform was not run.
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+@fragment
+fn fragment_main() {
+  textureLoad_1bfdfb();
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+  textureLoad_1bfdfb();
+}
+
+Failed to generate: error: ExternalTextureOptions missing binding entry for [group: 1, binding: 0]
diff --git a/test/tint/builtins/gen/literal/textureLoad/1c562a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/1c562a.wgsl.expected.ir.msl
index 70269d29..84cd7cf 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1c562a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/1c562a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_1c562a = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_1c562a = func():void {
+  $B2: {
     %4:texture_3d<u32> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec3<u32>(1u), 1u
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_1c562a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_1c562a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_1c562a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/1d43ae.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/1d43ae.wgsl.expected.ir.msl
index c8a3a5b..2508a9f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1d43ae.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/1d43ae.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_1d43ae = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_1d43ae = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba32sint, read_write> = load %arg_0
     %5:vec4<i32> = textureLoad %4, 1i
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_1d43ae
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_1d43ae
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_1d43ae
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/1e6baa.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/1e6baa.wgsl.expected.ir.msl
index 3647f87..070c77e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1e6baa.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/1e6baa.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rg32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_1e6baa = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_1e6baa = func():void {
+  $B2: {
     %4:texture_storage_1d<rg32float, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, 1u
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_1e6baa
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_1e6baa
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_1e6baa
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/1eb93f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/1eb93f.wgsl.expected.ir.msl
index 0f3de80..4a0c613 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1eb93f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/1eb93f.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rg32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_1eb93f = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_1eb93f = func():void {
+  $B2: {
     %4:texture_storage_2d<rg32float, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<u32>(1u)
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_1eb93f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_1eb93f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_1eb93f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/1f2016.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/1f2016.wgsl.expected.ir.msl
index 8d35d77..b67950a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1f2016.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/1f2016.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_1f2016 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_1f2016 = func():void {
+  $B2: {
     %4:texture_3d<f32> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec3<i32>(1i), 1i
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_1f2016
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_1f2016
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_1f2016
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/1fde63.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/1fde63.wgsl.expected.ir.msl
new file mode 100644
index 0000000..431ede4
--- /dev/null
+++ b/test/tint/builtins/gen/literal/textureLoad/1fde63.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_3d<r8unorm, read_write>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%textureLoad_1fde63 = func():void {
+  $B2: {
+    %4:texture_storage_3d<r8unorm, read_write> = load %arg_0
+    %5:vec4<f32> = textureLoad %4, vec3<u32>(1u)
+    %res:ptr<function, vec4<f32>, read_write> = var, %5
+    %7:vec4<f32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %textureLoad_1fde63
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %textureLoad_1fde63
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %textureLoad_1fde63
+    ret
+  }
+}
+
+invalid access control for storage texture
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/textureLoad/206a08.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/206a08.wgsl.expected.ir.msl
index 0efff32..32d6780 100644
--- a/test/tint/builtins/gen/literal/textureLoad/206a08.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/206a08.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_206a08 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_206a08 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba8uint, read> = load %arg_0
     %5:vec4<u32> = textureLoad %4, 1u
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_206a08
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_206a08
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_206a08
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/20fa2f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/20fa2f.wgsl.expected.ir.msl
index 80ea7ea..01b255f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/20fa2f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/20fa2f.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_20fa2f = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_20fa2f = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rg32float, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<i32>(1i), 1i
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_20fa2f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_20fa2f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_20fa2f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/216c37.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/216c37.wgsl.expected.ir.msl
index c251a91..b219cde 100644
--- a/test/tint/builtins/gen/literal/textureLoad/216c37.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/216c37.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_1d<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_216c37 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_216c37 = func():void {
+  $B2: {
     %4:texture_1d<u32> = load %arg_0
     %5:vec4<u32> = textureLoad %4, 1u, 1i
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_216c37
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_216c37
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_216c37
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/21d1c4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/21d1c4.wgsl.expected.ir.msl
index b9956b1..5107816 100644
--- a/test/tint/builtins/gen/literal/textureLoad/21d1c4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/21d1c4.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_21d1c4 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_21d1c4 = func():void {
+  $B2: {
     %4:texture_3d<f32> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec3<u32>(1u), 1u
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_21d1c4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_21d1c4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_21d1c4
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/223246.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/223246.wgsl.expected.ir.msl
index 886e4fb..dd111f0 100644
--- a/test/tint/builtins/gen/literal/textureLoad/223246.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/223246.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_223246 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_223246 = func():void {
+  $B2: {
     %4:texture_3d<i32> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec3<u32>(1u), 1i
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_223246
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_223246
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_223246
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/22e963.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/22e963.wgsl.expected.ir.msl
index f8cdc45..84e4e09 100644
--- a/test/tint/builtins/gen/literal/textureLoad/22e963.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/22e963.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_22e963 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_22e963 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<r32uint, read> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<u32>(1u), 1u
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_22e963
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_22e963
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_22e963
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/23007a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/23007a.wgsl.expected.ir.msl
index 74d01e7..9e0d063 100644
--- a/test/tint/builtins/gen/literal/textureLoad/23007a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/23007a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_23007a = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_23007a = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rg32float, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<u32>(1u), 1i
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_23007a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_23007a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_23007a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/2363be.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/2363be.wgsl.expected.ir.msl
index aed9b84..7948136 100644
--- a/test/tint/builtins/gen/literal/textureLoad/2363be.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/2363be.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_2363be = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_2363be = func():void {
+  $B2: {
     %4:texture_2d_array<i32> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<u32>(1u), 1i, 1u
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_2363be
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_2363be
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_2363be
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/23ff89.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/23ff89.wgsl.expected.ir.msl
index 95a1fbd..4df3e00 100644
--- a/test/tint/builtins/gen/literal/textureLoad/23ff89.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/23ff89.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_23ff89 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_23ff89 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba16uint, read> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<u32>(1u), 1u
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_23ff89
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_23ff89
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_23ff89
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/25b67f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/25b67f.wgsl.expected.ir.msl
index 719d276..ff7f308 100644
--- a/test/tint/builtins/gen/literal/textureLoad/25b67f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/25b67f.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_25b67f = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_25b67f = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba8uint, read_write> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<u32>(1u)
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_25b67f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_25b67f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_25b67f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/26b8f6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/26b8f6.wgsl.expected.ir.msl
index c8af7c4..248fbd9 100644
--- a/test/tint/builtins/gen/literal/textureLoad/26b8f6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/26b8f6.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_26b8f6 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_26b8f6 = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba8uint, read_write> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec3<u32>(1u)
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_26b8f6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_26b8f6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_26b8f6
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/26c4f8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/26c4f8.wgsl.expected.ir.msl
index 0958e1a..f1d12a2 100644
--- a/test/tint/builtins/gen/literal/textureLoad/26c4f8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/26c4f8.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<bgra8unorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_26c4f8 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_26c4f8 = func():void {
+  $B2: {
     %4:texture_storage_2d<bgra8unorm, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<i32>(1i)
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_26c4f8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_26c4f8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_26c4f8
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/26d7f1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/26d7f1.wgsl.expected.ir.msl
index 01aa255..36e390d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/26d7f1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/26d7f1.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_26d7f1 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_26d7f1 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rg32uint, read> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<u32>(1u), 1i
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_26d7f1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_26d7f1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_26d7f1
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/272e7a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/272e7a.wgsl.expected.ir.msl
index 7f725f5..07de33b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/272e7a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/272e7a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<r32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_272e7a = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_272e7a = func():void {
+  $B2: {
     %4:texture_storage_3d<r32float, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec3<u32>(1u)
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_272e7a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_272e7a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_272e7a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/276643.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/276643.wgsl.expected.ir.msl
new file mode 100644
index 0000000..19bad9b
--- /dev/null
+++ b/test/tint/builtins/gen/literal/textureLoad/276643.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_1d<r8unorm, read>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%textureLoad_276643 = func():void {
+  $B2: {
+    %4:texture_storage_1d<r8unorm, read> = load %arg_0
+    %5:vec4<f32> = textureLoad %4, 1u
+    %res:ptr<function, vec4<f32>, read_write> = var, %5
+    %7:vec4<f32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %textureLoad_276643
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %textureLoad_276643
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %textureLoad_276643
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/textureLoad/276a2c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/276a2c.wgsl.expected.ir.msl
index 72904e4..13613ee 100644
--- a/test/tint/builtins/gen/literal/textureLoad/276a2c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/276a2c.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_276a2c = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_276a2c = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba32uint, read> = load %arg_0
     %5:vec4<u32> = textureLoad %4, 1i
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_276a2c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_276a2c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_276a2c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/2887d7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/2887d7.wgsl.expected.ir.msl
index b29916f..2dee8b4 100644
--- a/test/tint/builtins/gen/literal/textureLoad/2887d7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/2887d7.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_2887d7 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_2887d7 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba32float, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, 1i
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_2887d7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_2887d7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_2887d7
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/2a82d9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/2a82d9.wgsl.expected.ir.msl
index afd8eb5..2d292db 100644
--- a/test/tint/builtins/gen/literal/textureLoad/2a82d9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/2a82d9.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_2a82d9 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_2a82d9 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba32sint, read> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<u32>(1u), 1u
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_2a82d9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_2a82d9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_2a82d9
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/2ae485.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/2ae485.wgsl.expected.ir.msl
index f0034a2..053cf2f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/2ae485.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/2ae485.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba16sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_2ae485 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_2ae485 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba16sint, read> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<i32>(1i)
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_2ae485
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_2ae485
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_2ae485
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/2c72ae.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/2c72ae.wgsl.expected.ir.msl
index cb198a0..4766a7d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/2c72ae.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/2c72ae.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_2c72ae = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_2c72ae = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba32sint, read> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<u32>(1u)
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_2c72ae
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_2c72ae
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_2c72ae
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/2cee30.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/2cee30.wgsl.expected.ir.msl
index 27b05df..a27bde7 100644
--- a/test/tint/builtins/gen/literal/textureLoad/2cee30.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/2cee30.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_2cee30 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_2cee30 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba32sint, read_write> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<u32>(1u), 1i
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_2cee30
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_2cee30
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_2cee30
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/2d479c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/2d479c.wgsl.expected.ir.msl
index 979e684..c7bfad3 100644
--- a/test/tint/builtins/gen/literal/textureLoad/2d479c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/2d479c.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_2d479c = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_2d479c = func():void {
+  $B2: {
     %4:texture_2d<f32> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<i32>(1i), 1u
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_2d479c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_2d479c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_2d479c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/2d6cf7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/2d6cf7.wgsl.expected.ir.msl
index 0607e90..c086cd6 100644
--- a/test/tint/builtins/gen/literal/textureLoad/2d6cf7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/2d6cf7.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rg32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_2d6cf7 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_2d6cf7 = func():void {
+  $B2: {
     %4:texture_storage_1d<rg32sint, read> = load %arg_0
     %5:vec4<i32> = textureLoad %4, 1i
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_2d6cf7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_2d6cf7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_2d6cf7
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/2dbfc2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/2dbfc2.wgsl.expected.ir.msl
index 09623a7..53cc48e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/2dbfc2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/2dbfc2.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_2dbfc2 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_2dbfc2 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<bgra8unorm, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<u32>(1u), 1i
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_2dbfc2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_2dbfc2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_2dbfc2
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/2e09aa.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/2e09aa.wgsl.expected.ir.msl
index 75fb620..14bf31e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/2e09aa.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/2e09aa.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_multisampled_2d<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_2e09aa = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_2e09aa = func():void {
+  $B2: {
     %4:texture_multisampled_2d<f32> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<u32>(1u), 1u
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_2e09aa
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_2e09aa
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_2e09aa
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/2e3552.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/2e3552.wgsl.expected.ir.msl
index 3b5f868..a0e4ba0 100644
--- a/test/tint/builtins/gen/literal/textureLoad/2e3552.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/2e3552.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_2e3552 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_2e3552 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<r32float, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<u32>(1u), 1i
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_2e3552
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_2e3552
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_2e3552
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/2eaf31.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/2eaf31.wgsl.expected.ir.msl
index 7b3fa20..acfbd6c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/2eaf31.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/2eaf31.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rg32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_2eaf31 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_2eaf31 = func():void {
+  $B2: {
     %4:texture_storage_2d<rg32sint, read_write> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<u32>(1u)
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_2eaf31
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_2eaf31
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_2eaf31
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/313c73.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/313c73.wgsl.expected.ir.msl
index 3ef2104..808e09c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/313c73.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/313c73.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_313c73 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_313c73 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba16sint, read> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<u32>(1u), 1u
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_313c73
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_313c73
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_313c73
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/31db4b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/31db4b.wgsl.expected.ir.msl
index 1a0ec84..7c5de66 100644
--- a/test/tint/builtins/gen/literal/textureLoad/31db4b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/31db4b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<r32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_31db4b = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_31db4b = func():void {
+  $B2: {
     %4:texture_storage_1d<r32uint, read> = load %arg_0
     %5:vec4<u32> = textureLoad %4, 1u
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_31db4b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_31db4b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_31db4b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/321210.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/321210.wgsl.expected.ir.msl
index cd92bfa..99cdb07 100644
--- a/test/tint/builtins/gen/literal/textureLoad/321210.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/321210.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_321210 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_321210 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba16uint, read> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<i32>(1i), 1u
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_321210
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_321210
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_321210
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/32a7b8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/32a7b8.wgsl.expected.ir.msl
index 18a4f0f..5862e3f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/32a7b8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/32a7b8.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_32a7b8 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_32a7b8 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8sint, read_write> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<u32>(1u), 1i
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_32a7b8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_32a7b8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_32a7b8
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/33d3aa.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/33d3aa.wgsl.expected.ir.msl
index 9aeb2ce..bb59bec 100644
--- a/test/tint/builtins/gen/literal/textureLoad/33d3aa.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/33d3aa.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_33d3aa = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_33d3aa = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba32sint, read> = load %arg_0
     %5:vec4<i32> = textureLoad %4, 1u
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_33d3aa
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_33d3aa
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_33d3aa
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/348827.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/348827.wgsl.expected.ir.msl
index dac976d..3c5c63b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/348827.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/348827.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_348827 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_348827 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba32uint, read> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<u32>(1u), 1u
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_348827
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_348827
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_348827
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/34d97c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/34d97c.wgsl.expected.ir.msl
index 9fe2308..57a2154 100644
--- a/test/tint/builtins/gen/literal/textureLoad/34d97c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/34d97c.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_34d97c = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_34d97c = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rg32uint, read_write> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<i32>(1i), 1i
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_34d97c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_34d97c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_34d97c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/35a5e2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/35a5e2.wgsl.expected.ir.msl
new file mode 100644
index 0000000..0cb056c
--- /dev/null
+++ b/test/tint/builtins/gen/literal/textureLoad/35a5e2.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_1d<r8unorm, read_write>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%textureLoad_35a5e2 = func():void {
+  $B2: {
+    %4:texture_storage_1d<r8unorm, read_write> = load %arg_0
+    %5:vec4<f32> = textureLoad %4, 1i
+    %res:ptr<function, vec4<f32>, read_write> = var, %5
+    %7:vec4<f32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %textureLoad_35a5e2
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %textureLoad_35a5e2
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %textureLoad_35a5e2
+    ret
+  }
+}
+
+invalid access control for storage texture
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/textureLoad/35d464.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/35d464.wgsl.expected.ir.msl
new file mode 100644
index 0000000..51e6d05
--- /dev/null
+++ b/test/tint/builtins/gen/literal/textureLoad/35d464.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_2d_array<r8unorm, read>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%textureLoad_35d464 = func():void {
+  $B2: {
+    %4:texture_storage_2d_array<r8unorm, read> = load %arg_0
+    %5:vec4<f32> = textureLoad %4, vec2<i32>(1i), 1i
+    %res:ptr<function, vec4<f32>, read_write> = var, %5
+    %7:vec4<f32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %textureLoad_35d464
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %textureLoad_35d464
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %textureLoad_35d464
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/textureLoad/374351.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/374351.wgsl.expected.ir.msl
index 0d29089..269ad4a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/374351.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/374351.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba16uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_374351 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_374351 = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba16uint, read> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec3<u32>(1u)
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_374351
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_374351
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_374351
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/388688.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/388688.wgsl.expected.ir.msl
index 7dca7b5..4032148 100644
--- a/test/tint/builtins/gen/literal/textureLoad/388688.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/388688.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8snorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_388688 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_388688 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba8snorm, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, 1u
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_388688
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_388688
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_388688
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/38f8ab.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/38f8ab.wgsl.expected.ir.msl
index 83b4f2d..5c378ca 100644
--- a/test/tint/builtins/gen/literal/textureLoad/38f8ab.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/38f8ab.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_multisampled_2d<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_38f8ab = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_38f8ab = func():void {
+  $B2: {
     %4:texture_multisampled_2d<i32> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<i32>(1i), 1u
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_38f8ab
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_38f8ab
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_38f8ab
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/39016c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/39016c.wgsl.expected.ir.msl
index 5e0fa37..95a5676 100644
--- a/test/tint/builtins/gen/literal/textureLoad/39016c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/39016c.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_39016c = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_39016c = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba8snorm, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<i32>(1i)
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_39016c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_39016c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_39016c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/395447.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/395447.wgsl.expected.ir.msl
index 9ec5d41..e290aaa4 100644
--- a/test/tint/builtins/gen/literal/textureLoad/395447.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/395447.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_395447 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_395447 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba32float, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<u32>(1u)
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_395447
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_395447
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_395447
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/39ef40.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/39ef40.wgsl.expected.ir.msl
index 770901e..d53f2c9 100644
--- a/test/tint/builtins/gen/literal/textureLoad/39ef40.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/39ef40.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba16float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_39ef40 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_39ef40 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba16float, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, 1u
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_39ef40
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_39ef40
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_39ef40
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/3a2350.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/3a2350.wgsl.expected.ir.msl
index 98d9273..b768de9 100644
--- a/test/tint/builtins/gen/literal/textureLoad/3a2350.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/3a2350.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_3a2350 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_3a2350 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba16uint, read_write> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<i32>(1i), 1u
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_3a2350
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_3a2350
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_3a2350
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/3aea13.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/3aea13.wgsl.expected.ir.msl
index 3b1d90e..a7591e7 100644
--- a/test/tint/builtins/gen/literal/textureLoad/3aea13.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/3aea13.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_3aea13 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_3aea13 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<r32sint, read_write> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<i32>(1i), 1u
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_3aea13
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_3aea13
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_3aea13
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/3bbc2b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/3bbc2b.wgsl.expected.ir.msl
index 9845b56..6546e9c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/3bbc2b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/3bbc2b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<r32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_3bbc2b = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_3bbc2b = func():void {
+  $B2: {
     %4:texture_storage_1d<r32float, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, 1i
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_3bbc2b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_3bbc2b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_3bbc2b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/3c0d9e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/3c0d9e.wgsl.expected.ir.msl
index 821d5af..89b2c0b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/3c0d9e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/3c0d9e.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_3c0d9e = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_3c0d9e = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba8uint, read> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<i32>(1i)
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_3c0d9e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_3c0d9e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_3c0d9e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/3c9587.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/3c9587.wgsl.expected.ir.msl
index 43a9043..722851c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/3c9587.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/3c9587.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8unorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_3c9587 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_3c9587 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba8unorm, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<i32>(1i)
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_3c9587
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_3c9587
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_3c9587
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/3c96e8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/3c96e8.wgsl.expected.ir.msl
index 77e95fa..622fddd 100644
--- a/test/tint/builtins/gen/literal/textureLoad/3c96e8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/3c96e8.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_3c96e8 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_3c96e8 = func():void {
+  $B2: {
     %4:texture_2d_array<f32> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<i32>(1i), 1u, 1u
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_3c96e8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_3c96e8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_3c96e8
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/3cfb9c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/3cfb9c.wgsl.expected.ir.msl
index 7c24b4b..ad554c6 100644
--- a/test/tint/builtins/gen/literal/textureLoad/3cfb9c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/3cfb9c.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_3cfb9c = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_3cfb9c = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba8uint, read_write> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec3<i32>(1i)
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_3cfb9c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_3cfb9c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_3cfb9c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/3d001b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/3d001b.wgsl.expected.ir.msl
index 1f55ea2..66e2708 100644
--- a/test/tint/builtins/gen/literal/textureLoad/3d001b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/3d001b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_3d001b = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_3d001b = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba8sint, read> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec3<i32>(1i)
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_3d001b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_3d001b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_3d001b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/3d3fd1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/3d3fd1.wgsl.expected.ir.msl
index cfea600..809bc48 100644
--- a/test/tint/builtins/gen/literal/textureLoad/3d3fd1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/3d3fd1.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_3d3fd1 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_3d3fd1 = func():void {
+  $B2: {
     %4:texture_2d_array<i32> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<u32>(1u), 1u, 1i
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_3d3fd1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_3d3fd1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_3d3fd1
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/3d9c90.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/3d9c90.wgsl.expected.ir.msl
index a4f2581..d62f3d0 100644
--- a/test/tint/builtins/gen/literal/textureLoad/3d9c90.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/3d9c90.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_3d9c90 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_3d9c90 = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba32float, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec3<i32>(1i)
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_3d9c90
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_3d9c90
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_3d9c90
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/3da3ed.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/3da3ed.wgsl.expected.ir.msl
index 504f918..e4ac3ae 100644
--- a/test/tint/builtins/gen/literal/textureLoad/3da3ed.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/3da3ed.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_1d<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_3da3ed = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_3da3ed = func():void {
+  $B2: {
     %4:texture_1d<f32> = load %arg_0
     %5:vec4<f32> = textureLoad %4, 1i, 1u
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_3da3ed
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_3da3ed
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_3da3ed
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/3e16a8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/3e16a8.wgsl.expected.ir.msl
new file mode 100644
index 0000000..0a9215c
--- /dev/null
+++ b/test/tint/builtins/gen/literal/textureLoad/3e16a8.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_2d<r8unorm, read_write>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%textureLoad_3e16a8 = func():void {
+  $B2: {
+    %4:texture_storage_2d<r8unorm, read_write> = load %arg_0
+    %5:vec4<f32> = textureLoad %4, vec2<i32>(1i)
+    %res:ptr<function, vec4<f32>, read_write> = var, %5
+    %7:vec4<f32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %textureLoad_3e16a8
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %textureLoad_3e16a8
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %textureLoad_3e16a8
+    ret
+  }
+}
+
+invalid access control for storage texture
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/textureLoad/3e5f6a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/3e5f6a.wgsl.expected.ir.msl
index df73283..fa4b726 100644
--- a/test/tint/builtins/gen/literal/textureLoad/3e5f6a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/3e5f6a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba16float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_3e5f6a = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_3e5f6a = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba16float, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<u32>(1u)
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_3e5f6a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_3e5f6a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_3e5f6a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/40ee8b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/40ee8b.wgsl.expected.ir.msl
index 5b1157a..88f39bc 100644
--- a/test/tint/builtins/gen/literal/textureLoad/40ee8b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/40ee8b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_40ee8b = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_40ee8b = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba32sint, read_write> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<i32>(1i), 1u
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_40ee8b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_40ee8b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_40ee8b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/4212a1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/4212a1.wgsl.expected.ir.msl
index 32890a9..337caa4 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4212a1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/4212a1.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_4212a1 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_4212a1 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba32sint, read_write> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<i32>(1i)
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_4212a1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_4212a1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_4212a1
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/424afd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/424afd.wgsl.expected.ir.msl
index 34501bd..79a8d0f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/424afd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/424afd.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_424afd = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_424afd = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rg32sint, read_write> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<i32>(1i), 1i
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_424afd
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_424afd
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_424afd
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/42a631.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/42a631.wgsl.expected.ir.msl
index 6d45457..2cb44a0 100644
--- a/test/tint/builtins/gen/literal/textureLoad/42a631.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/42a631.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba16float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_42a631 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_42a631 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba16float, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, 1i
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_42a631
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_42a631
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_42a631
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/43484a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/43484a.wgsl.expected.ir.msl
index 88b36ec..686c9d0 100644
--- a/test/tint/builtins/gen/literal/textureLoad/43484a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/43484a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_43484a = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_43484a = func():void {
+  $B2: {
     %4:texture_storage_2d_array<r32float, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<u32>(1u), 1u
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_43484a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_43484a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_43484a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/439e2a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/439e2a.wgsl.expected.ir.msl
index 2f59e1f..5666880 100644
--- a/test/tint/builtins/gen/literal/textureLoad/439e2a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/439e2a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_439e2a = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_439e2a = func():void {
+  $B2: {
     %4:texture_2d<f32> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<u32>(1u), 1i
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_439e2a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_439e2a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_439e2a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/43cd86.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/43cd86.wgsl.expected.ir.msl
index 82e9a84..4e1eee8 100644
--- a/test/tint/builtins/gen/literal/textureLoad/43cd86.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/43cd86.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_43cd86 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_43cd86 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba8snorm, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<u32>(1u)
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_43cd86
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_43cd86
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_43cd86
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/44c826.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/44c826.wgsl.expected.ir.msl
index a10fc8e..40b8325 100644
--- a/test/tint/builtins/gen/literal/textureLoad/44c826.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/44c826.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rg32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_44c826 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_44c826 = func():void {
+  $B2: {
     %4:texture_storage_1d<rg32uint, read> = load %arg_0
     %5:vec4<u32> = textureLoad %4, 1u
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_44c826
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_44c826
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_44c826
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/4542ae.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/4542ae.wgsl.expected.ir.msl
index f7fa71f..c2dbf78 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4542ae.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/4542ae.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_4542ae = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_4542ae = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8unorm, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<i32>(1i), 1i
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_4542ae
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_4542ae
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_4542ae
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/454347.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/454347.wgsl.expected.ir.msl
index 1812709..068ebf9 100644
--- a/test/tint/builtins/gen/literal/textureLoad/454347.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/454347.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_454347 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_454347 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba32uint, read> = load %arg_0
     %5:vec4<u32> = textureLoad %4, 1u
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_454347
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_454347
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_454347
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/4638a0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/4638a0.wgsl.expected.ir.msl
index 6b09316..167dfda 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4638a0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/4638a0.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_4638a0 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_4638a0 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba16sint, read> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<i32>(1i), 1u
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_4638a0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_4638a0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_4638a0
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/469912.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/469912.wgsl.expected.ir.msl
index 52731a0..d257383 100644
--- a/test/tint/builtins/gen/literal/textureLoad/469912.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/469912.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rg32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_469912 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_469912 = func():void {
+  $B2: {
     %4:texture_storage_1d<rg32sint, read_write> = load %arg_0
     %5:vec4<i32> = textureLoad %4, 1i
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_469912
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_469912
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_469912
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/46a93f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/46a93f.wgsl.expected.ir.msl
index 97307eb..9cbc5cd 100644
--- a/test/tint/builtins/gen/literal/textureLoad/46a93f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/46a93f.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_46a93f = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_46a93f = func():void {
+  $B2: {
     %4:texture_2d_array<f32> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<u32>(1u), 1i, 1u
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_46a93f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_46a93f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_46a93f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/46dbf5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/46dbf5.wgsl.expected.ir.msl
index 28f3305..264ed48 100644
--- a/test/tint/builtins/gen/literal/textureLoad/46dbf5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/46dbf5.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8unorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_46dbf5 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_46dbf5 = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba8unorm, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec3<u32>(1u)
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_46dbf5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_46dbf5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_46dbf5
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/473d3e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/473d3e.wgsl.expected.ir.msl
index 1a23dc3..a719930 100644
--- a/test/tint/builtins/gen/literal/textureLoad/473d3e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/473d3e.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_473d3e = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_473d3e = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba32float, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec3<u32>(1u)
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_473d3e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_473d3e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_473d3e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/47e818.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/47e818.wgsl.expected.ir.msl
index 17d66ed..7228c4b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/47e818.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/47e818.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_47e818 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_47e818 = func():void {
+  $B2: {
     %4:texture_3d<i32> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec3<u32>(1u), 1u
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_47e818
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_47e818
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_47e818
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/482627.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/482627.wgsl.expected.ir.msl
index f3b64e0..87b0bc3 100644
--- a/test/tint/builtins/gen/literal/textureLoad/482627.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/482627.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_482627 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_482627 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rg32float, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<u32>(1u), 1u
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_482627
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_482627
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_482627
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/484344.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/484344.wgsl.expected.ir.msl
index 29b827d..df4aedd 100644
--- a/test/tint/builtins/gen/literal/textureLoad/484344.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/484344.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_484344 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_484344 = func():void {
+  $B2: {
     %4:texture_2d<f32> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<i32>(1i), 1i
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_484344
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_484344
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_484344
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/4951bb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/4951bb.wgsl.expected.ir.msl
new file mode 100644
index 0000000..34d23a1
--- /dev/null
+++ b/test/tint/builtins/gen/literal/textureLoad/4951bb.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_2d_array<r8unorm, read>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%textureLoad_4951bb = func():void {
+  $B2: {
+    %4:texture_storage_2d_array<r8unorm, read> = load %arg_0
+    %5:vec4<f32> = textureLoad %4, vec2<u32>(1u), 1i
+    %res:ptr<function, vec4<f32>, read_write> = var, %5
+    %7:vec4<f32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %textureLoad_4951bb
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %textureLoad_4951bb
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %textureLoad_4951bb
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/textureLoad/49f76f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/49f76f.wgsl.expected.ir.msl
index e9e8b4e..c22805d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/49f76f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/49f76f.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_multisampled_2d<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_49f76f = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_49f76f = func():void {
+  $B2: {
     %4:texture_multisampled_2d<u32> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<u32>(1u), 1u
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_49f76f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_49f76f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_49f76f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/4a5c55.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/4a5c55.wgsl.expected.ir.msl
index b97e5b4..78f317f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4a5c55.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/4a5c55.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_4a5c55 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_4a5c55 = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba8sint, read_write> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec3<u32>(1u)
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_4a5c55
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_4a5c55
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_4a5c55
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/4acb64.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/4acb64.wgsl.expected.ir.msl
index 4ceab3e..55b2f42 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4acb64.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/4acb64.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_4acb64 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_4acb64 = func():void {
+  $B2: {
     %4:texture_2d_array<f32> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<i32>(1i), 1u, 1i
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_4acb64
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_4acb64
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_4acb64
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/4c15b2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/4c15b2.wgsl.expected.ir.msl
index d2c3288..affca29 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4c15b2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/4c15b2.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_4c15b2 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_4c15b2 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba32float, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<i32>(1i), 1i
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_4c15b2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_4c15b2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_4c15b2
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/4c1a1e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/4c1a1e.wgsl.expected.ir.msl
index 04dfd28..04f2f00 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4c1a1e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/4c1a1e.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rg32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_4c1a1e = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_4c1a1e = func():void {
+  $B2: {
     %4:texture_storage_3d<rg32uint, read_write> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec3<i32>(1i)
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_4c1a1e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_4c1a1e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_4c1a1e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/4c423f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/4c423f.wgsl.expected.ir.msl
index 82cdb48..828593d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4c423f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/4c423f.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_1d<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_4c423f = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_4c423f = func():void {
+  $B2: {
     %4:texture_1d<i32> = load %arg_0
     %5:vec4<i32> = textureLoad %4, 1u, 1i
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_4c423f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_4c423f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_4c423f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/4c67be.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/4c67be.wgsl.expected.ir.msl
index 7158bd4..405a5b3 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4c67be.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/4c67be.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<r32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_4c67be = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_4c67be = func():void {
+  $B2: {
     %4:texture_storage_2d<r32float, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<u32>(1u)
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_4c67be
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_4c67be
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_4c67be
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/4ccf9a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/4ccf9a.wgsl.expected.ir.msl
index 5fa1e17..7e0d8b3 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4ccf9a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/4ccf9a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rg32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_4ccf9a = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_4ccf9a = func():void {
+  $B2: {
     %4:texture_storage_3d<rg32uint, read_write> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec3<u32>(1u)
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_4ccf9a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_4ccf9a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_4ccf9a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/4cdca5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/4cdca5.wgsl.expected.ir.msl
index d50c278..9d564ae 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4cdca5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/4cdca5.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_4cdca5 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_4cdca5 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8sint, read> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<i32>(1i), 1u
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_4cdca5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_4cdca5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_4cdca5
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/4db25c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/4db25c.wgsl.expected.ir.msl
index 62ee79d..483bc80 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4db25c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/4db25c.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_multisampled_2d, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_4db25c = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_4db25c = func():void {
+  $B2: {
     %4:texture_depth_multisampled_2d = load %arg_0
     %5:f32 = textureLoad %4, vec2<u32>(1u), 1u
     %res:ptr<function, f32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_4db25c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_4db25c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_4db25c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/4e2c5c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/4e2c5c.wgsl.expected.ir.msl
index c973c0a..2da6a58 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4e2c5c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/4e2c5c.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_4e2c5c = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_4e2c5c = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba16float, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<i32>(1i), 1u
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_4e2c5c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_4e2c5c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_4e2c5c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/4f5496.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/4f5496.wgsl.expected.ir.msl
index 5fd7141..68f8866 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4f5496.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/4f5496.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_4f5496 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_4f5496 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<r32uint, read_write> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<i32>(1i), 1i
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_4f5496
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_4f5496
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_4f5496
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/4f90bb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/4f90bb.wgsl.expected.ir.msl
index 4e402b7..edede64 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4f90bb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/4f90bb.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_4f90bb = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_4f90bb = func():void {
+  $B2: {
     %4:texture_storage_2d<bgra8unorm, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<i32>(1i)
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_4f90bb
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_4f90bb
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_4f90bb
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/4fa6ae.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/4fa6ae.wgsl.expected.ir.msl
index 66a6eca..35779be 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4fa6ae.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/4fa6ae.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<bgra8unorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_4fa6ae = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_4fa6ae = func():void {
+  $B2: {
     %4:texture_storage_3d<bgra8unorm, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec3<u32>(1u)
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_4fa6ae
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_4fa6ae
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_4fa6ae
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/4fd803.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/4fd803.wgsl.expected.ir.msl
index 04e2911..f25271d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4fd803.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/4fd803.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_4fd803 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_4fd803 = func():void {
+  $B2: {
     %4:texture_3d<i32> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec3<i32>(1i), 1i
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_4fd803
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_4fd803
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_4fd803
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/505aa2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/505aa2.wgsl.expected.ir.msl
index c907289..6342e69 100644
--- a/test/tint/builtins/gen/literal/textureLoad/505aa2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/505aa2.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<r32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_505aa2 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_505aa2 = func():void {
+  $B2: {
     %4:texture_storage_3d<r32sint, read> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec3<i32>(1i)
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_505aa2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_505aa2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_505aa2
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/50915c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/50915c.wgsl.expected.ir.msl
index bf02d58..5540f51 100644
--- a/test/tint/builtins/gen/literal/textureLoad/50915c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/50915c.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_50915c = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_50915c = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba8uint, read> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec3<u32>(1u)
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_50915c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_50915c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_50915c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/5154e1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/5154e1.wgsl.expected.ir.msl
index 371b590..5878178 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5154e1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/5154e1.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_5154e1 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_5154e1 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba32float, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<i32>(1i)
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_5154e1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_5154e1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_5154e1
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/519ab5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/519ab5.wgsl.expected.ir.msl
index 38daaa0..380c0dc 100644
--- a/test/tint/builtins/gen/literal/textureLoad/519ab5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/519ab5.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8unorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_519ab5 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_519ab5 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba8unorm, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, 1i
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_519ab5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_519ab5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_519ab5
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/53378a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/53378a.wgsl.expected.ir.msl
index 31ef95d..6d87cb6 100644
--- a/test/tint/builtins/gen/literal/textureLoad/53378a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/53378a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rg32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_53378a = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_53378a = func():void {
+  $B2: {
     %4:texture_storage_2d<rg32sint, read> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<i32>(1i)
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_53378a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_53378a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_53378a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/53941c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/53941c.wgsl.expected.ir.msl
index 205c1b5..b621f87 100644
--- a/test/tint/builtins/gen/literal/textureLoad/53941c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/53941c.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_53941c = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_53941c = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba32sint, read_write> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<u32>(1u), 1u
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_53941c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_53941c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_53941c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/53e142.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/53e142.wgsl.expected.ir.msl
index b3c3574..3895c337 100644
--- a/test/tint/builtins/gen/literal/textureLoad/53e142.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/53e142.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_53e142 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_53e142 = func():void {
+  $B2: {
     %4:texture_2d_array<u32> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<u32>(1u), 1i, 1i
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_53e142
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_53e142
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_53e142
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/54a59b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/54a59b.wgsl.expected.ir.msl
index 4694795..beb958a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/54a59b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/54a59b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_54a59b = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_54a59b = func():void {
+  $B2: {
     %4:texture_2d_array<f32> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<u32>(1u), 1i, 1i
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_54a59b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_54a59b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_54a59b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/54e0ce.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/54e0ce.wgsl.expected.ir.msl
index cbedfd5..c1c2618 100644
--- a/test/tint/builtins/gen/literal/textureLoad/54e0ce.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/54e0ce.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<bgra8unorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_54e0ce = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_54e0ce = func():void {
+  $B2: {
     %4:texture_storage_2d<bgra8unorm, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<u32>(1u)
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_54e0ce
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_54e0ce
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_54e0ce
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/54fb38.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/54fb38.wgsl.expected.ir.msl
index 5845938..c5edd80 100644
--- a/test/tint/builtins/gen/literal/textureLoad/54fb38.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/54fb38.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_54fb38 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_54fb38 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rg32uint, read_write> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<u32>(1u), 1u
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_54fb38
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_54fb38
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_54fb38
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/55e745.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/55e745.wgsl.expected.ir.msl
index 63a270c..2030c91 100644
--- a/test/tint/builtins/gen/literal/textureLoad/55e745.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/55e745.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_55e745 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_55e745 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<r32sint, read> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<u32>(1u), 1i
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_55e745
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_55e745
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_55e745
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/560573.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/560573.wgsl.expected.ir.msl
index de7e09f..e9b19e0 100644
--- a/test/tint/builtins/gen/literal/textureLoad/560573.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/560573.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_560573 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_560573 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<r32sint, read> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<i32>(1i), 1i
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_560573
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_560573
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_560573
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/56a000.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/56a000.wgsl.expected.ir.msl
index 871f335..deb7dc4 100644
--- a/test/tint/builtins/gen/literal/textureLoad/56a000.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/56a000.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rg32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_56a000 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_56a000 = func():void {
+  $B2: {
     %4:texture_storage_1d<rg32float, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, 1i
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_56a000
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_56a000
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_56a000
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/582015.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/582015.wgsl.expected.ir.msl
index a557083..332c9bc 100644
--- a/test/tint/builtins/gen/literal/textureLoad/582015.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/582015.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_582015 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_582015 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8sint, read> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<i32>(1i), 1i
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_582015
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_582015
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_582015
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/589eaa.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/589eaa.wgsl.expected.ir.msl
index 0ea352b..5a51603 100644
--- a/test/tint/builtins/gen/literal/textureLoad/589eaa.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/589eaa.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba16float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_589eaa = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_589eaa = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba16float, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec3<u32>(1u)
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_589eaa
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_589eaa
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_589eaa
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/5a2f9d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/5a2f9d.wgsl.expected.ir.msl
index ec32baa..d8265ea 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5a2f9d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/5a2f9d.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_1d<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_5a2f9d = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_5a2f9d = func():void {
+  $B2: {
     %4:texture_1d<i32> = load %arg_0
     %5:vec4<i32> = textureLoad %4, 1i, 1i
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_5a2f9d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_5a2f9d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_5a2f9d
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/5abbf2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/5abbf2.wgsl.expected.ir.msl
index 6ec1117..eb42d17 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5abbf2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/5abbf2.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rg32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_5abbf2 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_5abbf2 = func():void {
+  $B2: {
     %4:texture_storage_1d<rg32float, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, 1u
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_5abbf2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_5abbf2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_5abbf2
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/5b0f5b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/5b0f5b.wgsl.expected.ir.msl
index 1e18c3f..40c3fcf 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5b0f5b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/5b0f5b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba16uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_5b0f5b = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_5b0f5b = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba16uint, read_write> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec3<i32>(1i)
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_5b0f5b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_5b0f5b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_5b0f5b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/5b4947.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/5b4947.wgsl.expected.ir.msl
index b67bd9d..660229d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5b4947.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/5b4947.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_5b4947 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_5b4947 = func():void {
+  $B2: {
     %4:texture_storage_3d<bgra8unorm, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec3<i32>(1i)
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_5b4947
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_5b4947
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_5b4947
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/5bb7fb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/5bb7fb.wgsl.expected.ir.msl
index 6e8235e..ad4b629 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5bb7fb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/5bb7fb.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rg32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_5bb7fb = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_5bb7fb = func():void {
+  $B2: {
     %4:texture_storage_1d<rg32uint, read> = load %arg_0
     %5:vec4<u32> = textureLoad %4, 1i
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_5bb7fb
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_5bb7fb
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_5bb7fb
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/5c69f8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/5c69f8.wgsl.expected.ir.msl
index a99da6b..f3b127a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5c69f8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/5c69f8.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_5c69f8 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_5c69f8 = func():void {
+  $B2: {
     %4:texture_storage_3d<bgra8unorm, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec3<u32>(1u)
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_5c69f8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_5c69f8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_5c69f8
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/5cd3fc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/5cd3fc.wgsl.expected.ir.msl
index 2631d2d..f99e355 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5cd3fc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/5cd3fc.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<r32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_5cd3fc = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_5cd3fc = func():void {
+  $B2: {
     %4:texture_storage_2d<r32sint, read_write> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<i32>(1i)
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_5cd3fc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_5cd3fc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_5cd3fc
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/5cee3b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/5cee3b.wgsl.expected.ir.msl
index 2f57579..0b34c99 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5cee3b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/5cee3b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<r32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_5cee3b = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_5cee3b = func():void {
+  $B2: {
     %4:texture_storage_3d<r32uint, read> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec3<u32>(1u)
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_5cee3b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_5cee3b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_5cee3b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/5d0a2f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/5d0a2f.wgsl.expected.ir.msl
index 3e7559c..12dfe1a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5d0a2f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/5d0a2f.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_5d0a2f = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_5d0a2f = func():void {
+  $B2: {
     %4:texture_storage_2d_array<r32uint, read> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<i32>(1i), 1i
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_5d0a2f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_5d0a2f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_5d0a2f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/5d4042.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/5d4042.wgsl.expected.ir.msl
index f6130dd..802bf66 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5d4042.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/5d4042.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_5d4042 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_5d4042 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba32float, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<u32>(1u), 1i
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_5d4042
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_5d4042
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_5d4042
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/5dd4c7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/5dd4c7.wgsl.expected.ir.msl
new file mode 100644
index 0000000..7beae48
--- /dev/null
+++ b/test/tint/builtins/gen/literal/textureLoad/5dd4c7.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_2d<r8unorm, read>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%textureLoad_5dd4c7 = func():void {
+  $B2: {
+    %4:texture_storage_2d<r8unorm, read> = load %arg_0
+    %5:vec4<f32> = textureLoad %4, vec2<i32>(1i)
+    %res:ptr<function, vec4<f32>, read_write> = var, %5
+    %7:vec4<f32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %textureLoad_5dd4c7
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %textureLoad_5dd4c7
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %textureLoad_5dd4c7
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/textureLoad/5e17a7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/5e17a7.wgsl.expected.ir.msl
index 2f87f71..07196d6 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5e17a7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/5e17a7.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_5e17a7 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_5e17a7 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba8sint, read_write> = load %arg_0
     %5:vec4<i32> = textureLoad %4, 1i
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_5e17a7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_5e17a7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_5e17a7
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/5e1843.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/5e1843.wgsl.expected.ir.msl
index 0062014..a7cb53e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5e1843.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/5e1843.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_5e1843 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_5e1843 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba16uint, read_write> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<u32>(1u), 1u
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_5e1843
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_5e1843
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_5e1843
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/5e8d3f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/5e8d3f.wgsl.expected.ir.msl
index 2162824..26dd53e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5e8d3f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/5e8d3f.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<r32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_5e8d3f = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_5e8d3f = func():void {
+  $B2: {
     %4:texture_storage_3d<r32sint, read> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec3<u32>(1u)
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_5e8d3f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_5e8d3f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_5e8d3f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/5ed6ad.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/5ed6ad.wgsl.expected.ir.msl
new file mode 100644
index 0000000..c7837c2
--- /dev/null
+++ b/test/tint/builtins/gen/literal/textureLoad/5ed6ad.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_2d_array<r8unorm, read>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%textureLoad_5ed6ad = func():void {
+  $B2: {
+    %4:texture_storage_2d_array<r8unorm, read> = load %arg_0
+    %5:vec4<f32> = textureLoad %4, vec2<u32>(1u), 1u
+    %res:ptr<function, vec4<f32>, read_write> = var, %5
+    %7:vec4<f32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %textureLoad_5ed6ad
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %textureLoad_5ed6ad
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %textureLoad_5ed6ad
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/textureLoad/5f4473.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/5f4473.wgsl.expected.ir.msl
index 5a54772..a60d3d6 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5f4473.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/5f4473.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_5f4473 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_5f4473 = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba32uint, read> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec3<u32>(1u)
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_5f4473
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_5f4473
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_5f4473
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/5feb4d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/5feb4d.wgsl.expected.ir.msl
index c545ff9..3c073dcc 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5feb4d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/5feb4d.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<r32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_5feb4d = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_5feb4d = func():void {
+  $B2: {
     %4:texture_storage_1d<r32float, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, 1u
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_5feb4d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_5feb4d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_5feb4d
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/6154d4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/6154d4.wgsl.expected.ir.msl
index c74976a..aad49a3 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6154d4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/6154d4.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_6154d4 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_6154d4 = func():void {
+  $B2: {
     %4:texture_2d<u32> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<i32>(1i), 1i
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_6154d4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_6154d4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_6154d4
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/61e2e8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/61e2e8.wgsl.expected.ir.msl
index c0fa36b..e537c69 100644
--- a/test/tint/builtins/gen/literal/textureLoad/61e2e8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/61e2e8.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rg32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_61e2e8 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_61e2e8 = func():void {
+  $B2: {
     %4:texture_storage_3d<rg32sint, read_write> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec3<u32>(1u)
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_61e2e8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_61e2e8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_61e2e8
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/620caa.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/620caa.wgsl.expected.ir.msl
index b66d99f..4066e62 100644
--- a/test/tint/builtins/gen/literal/textureLoad/620caa.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/620caa.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rg32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_620caa = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_620caa = func():void {
+  $B2: {
     %4:texture_storage_2d<rg32sint, read> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<u32>(1u)
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_620caa
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_620caa
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_620caa
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/622278.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/622278.wgsl.expected.ir.msl
index 8e83dde..63b010e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/622278.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/622278.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_622278 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_622278 = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba32uint, read_write> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec3<i32>(1i)
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_622278
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_622278
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_622278
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/6273b1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/6273b1.wgsl.expected.ir.msl
index 02b9751..1b025a5 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6273b1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/6273b1.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_multisampled_2d, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_6273b1 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_6273b1 = func():void {
+  $B2: {
     %4:texture_depth_multisampled_2d = load %arg_0
     %5:f32 = textureLoad %4, vec2<i32>(1i), 1i
     %res:ptr<function, f32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_6273b1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_6273b1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_6273b1
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/62d125.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/62d125.wgsl.expected.ir.msl
index 16b7fc6..329824a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/62d125.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/62d125.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8snorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_62d125 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_62d125 = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba8snorm, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec3<i32>(1i)
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_62d125
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_62d125
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_62d125
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/62d1de.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/62d1de.wgsl.expected.ir.msl
index 615c7fa..1361258 100644
--- a/test/tint/builtins/gen/literal/textureLoad/62d1de.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/62d1de.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_1d<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_62d1de = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_62d1de = func():void {
+  $B2: {
     %4:texture_1d<i32> = load %arg_0
     %5:vec4<i32> = textureLoad %4, 1i, 1u
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_62d1de
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_62d1de
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_62d1de
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/639962.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/639962.wgsl.expected.ir.msl
index ac5f78f..b8f31f4 100644
--- a/test/tint/builtins/gen/literal/textureLoad/639962.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/639962.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_multisampled_2d<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_639962 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_639962 = func():void {
+  $B2: {
     %4:texture_multisampled_2d<i32> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<u32>(1u), 1u
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_639962
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_639962
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_639962
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/63be18.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/63be18.wgsl.expected.ir.msl
index 5b1a2dc..1a84876 100644
--- a/test/tint/builtins/gen/literal/textureLoad/63be18.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/63be18.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_63be18 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_63be18 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rg32sint, read> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<u32>(1u), 1u
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_63be18
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_63be18
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_63be18
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/64c372.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/64c372.wgsl.expected.ir.msl
index 5c6c32b..5fcc2b1 100644
--- a/test/tint/builtins/gen/literal/textureLoad/64c372.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/64c372.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_64c372 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_64c372 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba16uint, read_write> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<i32>(1i), 1i
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_64c372
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_64c372
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_64c372
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/656d76.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/656d76.wgsl.expected.ir.msl
index 08d79a9..d48aa3f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/656d76.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/656d76.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_656d76 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_656d76 = func():void {
+  $B2: {
     %4:texture_2d_array<u32> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<i32>(1i), 1i, 1u
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_656d76
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_656d76
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_656d76
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/65a4d0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/65a4d0.wgsl.expected.ir.msl
index c378756..3870e28 100644
--- a/test/tint/builtins/gen/literal/textureLoad/65a4d0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/65a4d0.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8unorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_65a4d0 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_65a4d0 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8unorm, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<u32>(1u), 1i
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_65a4d0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_65a4d0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_65a4d0
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/666010.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/666010.wgsl.expected.ir.msl
index 025a6bc..9b1ca6c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/666010.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/666010.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_666010 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_666010 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba8unorm, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, 1u
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_666010
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_666010
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_666010
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/6678b6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/6678b6.wgsl.expected.ir.msl
index dc14945..97f1ec6 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6678b6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/6678b6.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba16sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_6678b6 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_6678b6 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba16sint, read> = load %arg_0
     %5:vec4<i32> = textureLoad %4, 1i
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_6678b6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_6678b6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_6678b6
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/66be47.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/66be47.wgsl.expected.ir.msl
index 3984f8a..ebca3b3 100644
--- a/test/tint/builtins/gen/literal/textureLoad/66be47.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/66be47.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_66be47 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_66be47 = func():void {
+  $B2: {
     %4:texture_depth_2d_array = load %arg_0
     %5:f32 = textureLoad %4, vec2<i32>(1i), 1u, 1u
     %res:ptr<function, f32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_66be47
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_66be47
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_66be47
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/67d826.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/67d826.wgsl.expected.ir.msl
index 5e75fe5..7510956 100644
--- a/test/tint/builtins/gen/literal/textureLoad/67d826.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/67d826.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_67d826 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_67d826 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<r32float, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<i32>(1i), 1u
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_67d826
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_67d826
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_67d826
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/67edca.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/67edca.wgsl.expected.ir.msl
index 7db1efd..3c31810 100644
--- a/test/tint/builtins/gen/literal/textureLoad/67edca.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/67edca.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_67edca = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_67edca = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba32uint, read> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec3<i32>(1i)
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_67edca
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_67edca
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_67edca
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/68d273.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/68d273.wgsl.expected.ir.msl
index 213622f..f780015 100644
--- a/test/tint/builtins/gen/literal/textureLoad/68d273.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/68d273.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba16sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_68d273 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_68d273 = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba16sint, read_write> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec3<u32>(1u)
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_68d273
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_68d273
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_68d273
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/6925bc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/6925bc.wgsl.expected.ir.msl
index 1c15a6f..88e55e4 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6925bc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/6925bc.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_multisampled_2d, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_6925bc = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_6925bc = func():void {
+  $B2: {
     %4:texture_depth_multisampled_2d = load %arg_0
     %5:f32 = textureLoad %4, vec2<i32>(1i), 1u
     %res:ptr<function, f32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_6925bc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_6925bc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_6925bc
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/69fee5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/69fee5.wgsl.expected.ir.msl
index c72c61d..b534d2f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/69fee5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/69fee5.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_69fee5 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_69fee5 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<r32float, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<u32>(1u), 1i
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_69fee5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_69fee5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_69fee5
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/6a6871.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/6a6871.wgsl.expected.ir.msl
index b18269a..c279818 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6a6871.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/6a6871.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_6a6871 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_6a6871 = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba32float, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec3<i32>(1i)
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_6a6871
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_6a6871
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_6a6871
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/6b77d4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/6b77d4.wgsl.expected.ir.msl
index 7df4cfd..0e781b7 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6b77d4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/6b77d4.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_1d<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_6b77d4 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_6b77d4 = func():void {
+  $B2: {
     %4:texture_1d<u32> = load %arg_0
     %5:vec4<u32> = textureLoad %4, 1i, 1u
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_6b77d4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_6b77d4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_6b77d4
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/6b8ba6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/6b8ba6.wgsl.expected.ir.msl
index c0c17f2..9c44ee2 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6b8ba6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/6b8ba6.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_6b8ba6 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_6b8ba6 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba16float, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<u32>(1u), 1u
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_6b8ba6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_6b8ba6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_6b8ba6
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/6ba9ab.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/6ba9ab.wgsl.expected.ir.msl
index bfaadf8..523b21b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6ba9ab.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/6ba9ab.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_6ba9ab = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_6ba9ab = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8unorm, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<u32>(1u), 1u
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_6ba9ab
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_6ba9ab
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_6ba9ab
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/6bf3e2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/6bf3e2.wgsl.expected.ir.msl
index d70268b..2824e8a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6bf3e2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/6bf3e2.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_6bf3e2 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_6bf3e2 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<bgra8unorm, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<i32>(1i), 1u
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_6bf3e2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_6bf3e2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_6bf3e2
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/6bf4b7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/6bf4b7.wgsl.expected.ir.msl
index 88d00b2..8faaca7 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6bf4b7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/6bf4b7.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_6bf4b7 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_6bf4b7 = func():void {
+  $B2: {
     %4:texture_3d<u32> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec3<i32>(1i), 1u
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_6bf4b7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_6bf4b7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_6bf4b7
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/6d1fb4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/6d1fb4.wgsl.expected.ir.msl
index e463c9e..f61bed4 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6d1fb4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/6d1fb4.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_6d1fb4 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_6d1fb4 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<r32uint, read_write> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<u32>(1u), 1u
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_6d1fb4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_6d1fb4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_6d1fb4
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/6d376a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/6d376a.wgsl.expected.ir.msl
index 7ff4aa9..aac0511 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6d376a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/6d376a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_1d<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_6d376a = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_6d376a = func():void {
+  $B2: {
     %4:texture_1d<f32> = load %arg_0
     %5:vec4<f32> = textureLoad %4, 1u, 1u
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_6d376a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_6d376a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_6d376a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/6d7bb5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/6d7bb5.wgsl.expected.ir.msl
index 3e97e35..a608662 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6d7bb5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/6d7bb5.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_6d7bb5 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_6d7bb5 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8unorm, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<u32>(1u), 1i
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_6d7bb5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_6d7bb5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_6d7bb5
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/6e903f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/6e903f.wgsl.expected.ir.msl
index 0084c8a..21c12b7 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6e903f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/6e903f.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_6e903f = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_6e903f = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba8sint, read_write> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec3<i32>(1i)
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_6e903f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_6e903f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_6e903f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/6f0370.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/6f0370.wgsl.expected.ir.msl
new file mode 100644
index 0000000..cf44be0
--- /dev/null
+++ b/test/tint/builtins/gen/literal/textureLoad/6f0370.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_3d<r8unorm, read>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%textureLoad_6f0370 = func():void {
+  $B2: {
+    %4:texture_storage_3d<r8unorm, read> = load %arg_0
+    %5:vec4<f32> = textureLoad %4, vec3<u32>(1u)
+    %res:ptr<function, vec4<f32>, read_write> = var, %5
+    %7:vec4<f32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %textureLoad_6f0370
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %textureLoad_6f0370
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %textureLoad_6f0370
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/textureLoad/6f0ea8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/6f0ea8.wgsl.expected.ir.msl
index 9015bd7..8e534af 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6f0ea8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/6f0ea8.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba16float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_6f0ea8 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_6f0ea8 = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba16float, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec3<i32>(1i)
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_6f0ea8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_6f0ea8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_6f0ea8
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/6f1750.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/6f1750.wgsl.expected.ir.msl
index 3688e2c..220391c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6f1750.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/6f1750.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_6f1750 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_6f1750 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<r32float, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<u32>(1u), 1u
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_6f1750
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_6f1750
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_6f1750
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/6f8927.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/6f8927.wgsl.expected.ir.msl
index d579817..55c08e8 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6f8927.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/6f8927.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_6f8927 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_6f8927 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba32float, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<i32>(1i), 1u
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_6f8927
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_6f8927
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_6f8927
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/714471.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/714471.wgsl.expected.ir.msl
index a97631b..bc6ca20 100644
--- a/test/tint/builtins/gen/literal/textureLoad/714471.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/714471.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_714471 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_714471 = func():void {
+  $B2: {
     %4:texture_2d<i32> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<u32>(1u), 1u
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_714471
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_714471
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_714471
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/72bb3c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/72bb3c.wgsl.expected.ir.msl
index 66267b6..a6a770f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/72bb3c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/72bb3c.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8snorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_72bb3c = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_72bb3c = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8snorm, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<u32>(1u), 1i
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_72bb3c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_72bb3c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_72bb3c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/72c9c3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/72c9c3.wgsl.expected.ir.msl
new file mode 100644
index 0000000..50edd72
--- /dev/null
+++ b/test/tint/builtins/gen/literal/textureLoad/72c9c3.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_2d_array<r8unorm, read_write>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%textureLoad_72c9c3 = func():void {
+  $B2: {
+    %4:texture_storage_2d_array<r8unorm, read_write> = load %arg_0
+    %5:vec4<f32> = textureLoad %4, vec2<i32>(1i), 1u
+    %res:ptr<function, vec4<f32>, read_write> = var, %5
+    %7:vec4<f32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %textureLoad_72c9c3
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %textureLoad_72c9c3
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %textureLoad_72c9c3
+    ret
+  }
+}
+
+invalid access control for storage texture
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/textureLoad/742f1b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/742f1b.wgsl.expected.ir.msl
index 33d6b7d..3c3360b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/742f1b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/742f1b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba16float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_742f1b = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_742f1b = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba16float, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec3<u32>(1u)
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_742f1b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_742f1b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_742f1b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/749704.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/749704.wgsl.expected.ir.msl
index dcc92a3..fd9e305 100644
--- a/test/tint/builtins/gen/literal/textureLoad/749704.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/749704.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<r32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_749704 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_749704 = func():void {
+  $B2: {
     %4:texture_storage_2d<r32uint, read> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<i32>(1i)
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_749704
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_749704
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_749704
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/74a387.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/74a387.wgsl.expected.ir.msl
index 6bd86e3..38ab8bf 100644
--- a/test/tint/builtins/gen/literal/textureLoad/74a387.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/74a387.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_74a387 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_74a387 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba8sint, read_write> = load %arg_0
     %5:vec4<i32> = textureLoad %4, 1u
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_74a387
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_74a387
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_74a387
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/773c46.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/773c46.wgsl.expected.ir.msl
index 4a5383f..9d839ec 100644
--- a/test/tint/builtins/gen/literal/textureLoad/773c46.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/773c46.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rg32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_773c46 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_773c46 = func():void {
+  $B2: {
     %4:texture_storage_2d<rg32uint, read> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<u32>(1u)
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_773c46
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_773c46
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_773c46
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/789045.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/789045.wgsl.expected.ir.msl
index 1f7acd5..0ee1502 100644
--- a/test/tint/builtins/gen/literal/textureLoad/789045.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/789045.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_789045 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_789045 = func():void {
+  $B2: {
     %4:texture_2d_array<f32> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<i32>(1i), 1i, 1u
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_789045
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_789045
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_789045
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/79e697.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/79e697.wgsl.expected.ir.msl
index 8bc2c31..b79d9be 100644
--- a/test/tint/builtins/gen/literal/textureLoad/79e697.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/79e697.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_79e697 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_79e697 = func():void {
+  $B2: {
     %4:texture_2d_array<i32> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<i32>(1i), 1i, 1i
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_79e697
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_79e697
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_79e697
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/7ab4df.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/7ab4df.wgsl.expected.ir.msl
index 8414ed1..f8937af 100644
--- a/test/tint/builtins/gen/literal/textureLoad/7ab4df.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/7ab4df.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_7ab4df = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_7ab4df = func():void {
+  $B2: {
     %4:texture_2d_array<u32> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<i32>(1i), 1u, 1i
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_7ab4df
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_7ab4df
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_7ab4df
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/7b63e0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/7b63e0.wgsl.expected.ir.msl
index c0554cd..24d1510 100644
--- a/test/tint/builtins/gen/literal/textureLoad/7b63e0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/7b63e0.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_7b63e0 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_7b63e0 = func():void {
+  $B2: {
     %4:texture_depth_2d_array = load %arg_0
     %5:f32 = textureLoad %4, vec2<u32>(1u), 1u, 1u
     %res:ptr<function, f32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_7b63e0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_7b63e0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_7b63e0
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/7bee94.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/7bee94.wgsl.expected.ir.msl
index e4851a6..ce5659f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/7bee94.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/7bee94.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_multisampled_2d<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_7bee94 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_7bee94 = func():void {
+  $B2: {
     %4:texture_multisampled_2d<i32> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<u32>(1u), 1i
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_7bee94
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_7bee94
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_7bee94
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/7c90e5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/7c90e5.wgsl.expected.ir.msl
index c90e5d1..593dcd7 100644
--- a/test/tint/builtins/gen/literal/textureLoad/7c90e5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/7c90e5.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_7c90e5 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_7c90e5 = func():void {
+  $B2: {
     %4:texture_2d_array<u32> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<i32>(1i), 1i, 1i
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_7c90e5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_7c90e5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_7c90e5
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/7dab57.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/7dab57.wgsl.expected.ir.msl
index 646be13..c5f9219 100644
--- a/test/tint/builtins/gen/literal/textureLoad/7dab57.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/7dab57.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_7dab57 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_7dab57 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rg32sint, read> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<u32>(1u), 1i
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_7dab57
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_7dab57
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_7dab57
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/7dd3d5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/7dd3d5.wgsl.expected.ir.msl
new file mode 100644
index 0000000..5c5568f
--- /dev/null
+++ b/test/tint/builtins/gen/literal/textureLoad/7dd3d5.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_2d_array<r8unorm, read_write>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%textureLoad_7dd3d5 = func():void {
+  $B2: {
+    %4:texture_storage_2d_array<r8unorm, read_write> = load %arg_0
+    %5:vec4<f32> = textureLoad %4, vec2<i32>(1i), 1i
+    %res:ptr<function, vec4<f32>, read_write> = var, %5
+    %7:vec4<f32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %textureLoad_7dd3d5
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %textureLoad_7dd3d5
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %textureLoad_7dd3d5
+    ret
+  }
+}
+
+invalid access control for storage texture
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/textureLoad/7e5cbc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/7e5cbc.wgsl.expected.ir.msl
index db92a3d..541d482 100644
--- a/test/tint/builtins/gen/literal/textureLoad/7e5cbc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/7e5cbc.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_7e5cbc = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_7e5cbc = func():void {
+  $B2: {
     %4:texture_storage_1d<bgra8unorm, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, 1u
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_7e5cbc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_7e5cbc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_7e5cbc
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/7fd822.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/7fd822.wgsl.expected.ir.msl
index d28b080..876fe08 100644
--- a/test/tint/builtins/gen/literal/textureLoad/7fd822.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/7fd822.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_7fd822 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_7fd822 = func():void {
+  $B2: {
     %4:texture_depth_2d = load %arg_0
     %5:f32 = textureLoad %4, vec2<u32>(1u), 1i
     %res:ptr<function, f32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_7fd822
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_7fd822
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_7fd822
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/80dae1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/80dae1.wgsl.expected.ir.msl
index 6fb7fdd..67877ff 100644
--- a/test/tint/builtins/gen/literal/textureLoad/80dae1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/80dae1.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba16sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_80dae1 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_80dae1 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba16sint, read_write> = load %arg_0
     %5:vec4<i32> = textureLoad %4, 1u
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_80dae1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_80dae1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_80dae1
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/81c381.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/81c381.wgsl.expected.ir.msl
index aa9279d..a87e262 100644
--- a/test/tint/builtins/gen/literal/textureLoad/81c381.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/81c381.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_1d<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_81c381 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_81c381 = func():void {
+  $B2: {
     %4:texture_1d<f32> = load %arg_0
     %5:vec4<f32> = textureLoad %4, 1i, 1i
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_81c381
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_81c381
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_81c381
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/83162f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/83162f.wgsl.expected.ir.msl
index 7cf74b0..e127d71 100644
--- a/test/tint/builtins/gen/literal/textureLoad/83162f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/83162f.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rg32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_83162f = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_83162f = func():void {
+  $B2: {
     %4:texture_storage_3d<rg32float, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec3<u32>(1u)
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_83162f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_83162f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_83162f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/83cea4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/83cea4.wgsl.expected.ir.msl
index 2ca72b4..36201f9 100644
--- a/test/tint/builtins/gen/literal/textureLoad/83cea4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/83cea4.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba16uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_83cea4 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_83cea4 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba16uint, read> = load %arg_0
     %5:vec4<u32> = textureLoad %4, 1i
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_83cea4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_83cea4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_83cea4
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/83d6e3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/83d6e3.wgsl.expected.ir.msl
index 5a63978..8b7e0e7 100644
--- a/test/tint/builtins/gen/literal/textureLoad/83d6e3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/83d6e3.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<r32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_83d6e3 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_83d6e3 = func():void {
+  $B2: {
     %4:texture_storage_1d<r32uint, read_write> = load %arg_0
     %5:vec4<u32> = textureLoad %4, 1i
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_83d6e3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_83d6e3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_83d6e3
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/848d85.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/848d85.wgsl.expected.ir.msl
index 517d61e..086dc08 100644
--- a/test/tint/builtins/gen/literal/textureLoad/848d85.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/848d85.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba16float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_848d85 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_848d85 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba16float, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<u32>(1u)
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_848d85
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_848d85
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_848d85
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/84a438.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/84a438.wgsl.expected.ir.msl
index 948d86b..93fe4ee 100644
--- a/test/tint/builtins/gen/literal/textureLoad/84a438.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/84a438.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_84a438 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_84a438 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba8uint, read_write> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<i32>(1i)
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_84a438
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_84a438
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_84a438
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/84c728.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/84c728.wgsl.expected.ir.msl
index 529a2a9..8d30b75 100644
--- a/test/tint/builtins/gen/literal/textureLoad/84c728.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/84c728.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_84c728 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_84c728 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba32float, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, 1u
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_84c728
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_84c728
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_84c728
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/84dee1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/84dee1.wgsl.expected.ir.msl
index 1d6031f..86adac7 100644
--- a/test/tint/builtins/gen/literal/textureLoad/84dee1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/84dee1.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_84dee1 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_84dee1 = func():void {
+  $B2: {
     %4:texture_2d<f32> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<u32>(1u), 1u
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_84dee1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_84dee1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_84dee1
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/8527b1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/8527b1.wgsl.expected.ir.msl
index f5c610b..d130d1d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8527b1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/8527b1.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_8527b1 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_8527b1 = func():void {
+  $B2: {
     %4:texture_2d_array<u32> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<u32>(1u), 1u, 1u
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_8527b1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_8527b1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_8527b1
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/862833.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/862833.wgsl.expected.ir.msl
index 9dfbed2..d6b1eaa 100644
--- a/test/tint/builtins/gen/literal/textureLoad/862833.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/862833.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_862833 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_862833 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba32float, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<i32>(1i), 1u
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_862833
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_862833
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_862833
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/878e24.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/878e24.wgsl.expected.ir.msl
index 3baa88b..a158444 100644
--- a/test/tint/builtins/gen/literal/textureLoad/878e24.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/878e24.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_878e24 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_878e24 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba32float, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<u32>(1u), 1u
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_878e24
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_878e24
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_878e24
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/87be85.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/87be85.wgsl.expected.ir.msl
index 3c81419..a798143 100644
--- a/test/tint/builtins/gen/literal/textureLoad/87be85.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/87be85.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_87be85 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_87be85 = func():void {
+  $B2: {
     %4:texture_2d_array<f32> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<i32>(1i), 1i, 1i
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_87be85
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_87be85
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_87be85
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/87f0a6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/87f0a6.wgsl.expected.ir.msl
index 778bad7..5316b0c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/87f0a6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/87f0a6.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_87f0a6 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_87f0a6 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8uint, read_write> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<i32>(1i), 1i
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_87f0a6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_87f0a6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_87f0a6
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/881349.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/881349.wgsl.expected.ir.msl
index a078400..6cd5b21 100644
--- a/test/tint/builtins/gen/literal/textureLoad/881349.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/881349.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_881349 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_881349 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rg32float, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<i32>(1i), 1i
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_881349
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_881349
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_881349
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/89620b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/89620b.wgsl.expected.ir.msl
index e497a4e..b1d0924 100644
--- a/test/tint/builtins/gen/literal/textureLoad/89620b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/89620b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<bgra8unorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_89620b = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_89620b = func():void {
+  $B2: {
     %4:texture_storage_2d_array<bgra8unorm, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<i32>(1i), 1i
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_89620b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_89620b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_89620b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/897cf3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/897cf3.wgsl.expected.ir.msl
index 84fb1ae..ec0358a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/897cf3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/897cf3.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_897cf3 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_897cf3 = func():void {
+  $B2: {
     %4:texture_2d<u32> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<u32>(1u), 1u
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_897cf3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_897cf3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_897cf3
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/8a291b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/8a291b.wgsl.expected.ir.msl
index 1079603..f38e79a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8a291b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/8a291b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<bgra8unorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_8a291b = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_8a291b = func():void {
+  $B2: {
     %4:texture_storage_2d_array<bgra8unorm, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<i32>(1i), 1u
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_8a291b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_8a291b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_8a291b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/8a9988.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/8a9988.wgsl.expected.ir.msl
index dc8bce5..f9d5e8d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8a9988.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/8a9988.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rg32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_8a9988 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_8a9988 = func():void {
+  $B2: {
     %4:texture_storage_3d<rg32sint, read> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec3<u32>(1u)
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_8a9988
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_8a9988
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_8a9988
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/8acf41.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/8acf41.wgsl.expected.ir.msl
index ca37f21..56a26d3 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8acf41.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/8acf41.wgsl.expected.ir.msl
@@ -1,43 +1,29 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1057 internal compiler error: %b1 = block {  # root
-  %arg_0:ptr<handle, texture_external, read> = var @binding_point(1, 0)
-  %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
+
+@group(1) @binding(0) var arg_0 : texture_external;
+
+fn textureLoad_8acf41() {
+  var res : vec4<f32> = textureLoad(arg_0, vec2<i32>(1i));
+  prevent_dce = res;
 }
 
-%textureLoad_8acf41 = func():void -> %b2 {
-  %b2 = block {
-    %4:texture_external = load %arg_0
-    %5:vec4<f32> = textureLoad %4, vec2<i32>(1i)
-    %res:ptr<function, vec4<f32>, read_write> = var, %5
-    %7:vec4<f32> = load %res
-    store %prevent_dce, %7
-    ret
-  }
-}
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %9:void = call %textureLoad_8acf41
-    ret vec4<f32>(0.0f)
-  }
-}
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %11:void = call %textureLoad_8acf41
-    ret
-  }
-}
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %13:void = call %textureLoad_8acf41
-    ret
-  }
+@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+@vertex
+fn vertex_main() -> @builtin(position) vec4<f32> {
+  textureLoad_8acf41();
+  return vec4<f32>();
 }
 
-Multiplanar external texture transform was not run.
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+@fragment
+fn fragment_main() {
+  textureLoad_8acf41();
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+  textureLoad_8acf41();
+}
+
+Failed to generate: error: ExternalTextureOptions missing binding entry for [group: 1, binding: 0]
diff --git a/test/tint/builtins/gen/literal/textureLoad/8b62fb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/8b62fb.wgsl.expected.ir.msl
index 3ede8bb..339de64 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8b62fb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/8b62fb.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_8b62fb = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_8b62fb = func():void {
+  $B2: {
     %4:texture_storage_2d<bgra8unorm, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<u32>(1u)
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_8b62fb
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_8b62fb
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_8b62fb
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/8bf8c2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/8bf8c2.wgsl.expected.ir.msl
index cf611cb..24acecf 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8bf8c2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/8bf8c2.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<r32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_8bf8c2 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_8bf8c2 = func():void {
+  $B2: {
     %4:texture_storage_1d<r32float, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, 1u
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_8bf8c2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_8bf8c2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_8bf8c2
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/8c6176.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/8c6176.wgsl.expected.ir.msl
index e090e92..f807ae2c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8c6176.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/8c6176.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rg32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_8c6176 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_8c6176 = func():void {
+  $B2: {
     %4:texture_storage_2d<rg32uint, read_write> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<u32>(1u)
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_8c6176
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_8c6176
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_8c6176
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/8ccbe3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/8ccbe3.wgsl.expected.ir.msl
index d48ea45..dacc21b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8ccbe3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/8ccbe3.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_8ccbe3 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_8ccbe3 = func():void {
+  $B2: {
     %4:texture_depth_2d = load %arg_0
     %5:f32 = textureLoad %4, vec2<i32>(1i), 1u
     %res:ptr<function, f32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_8ccbe3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_8ccbe3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_8ccbe3
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/8d64c3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/8d64c3.wgsl.expected.ir.msl
index 3cc0bf9..36150fa 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8d64c3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/8d64c3.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rg32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_8d64c3 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_8d64c3 = func():void {
+  $B2: {
     %4:texture_storage_2d<rg32uint, read_write> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<i32>(1i)
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_8d64c3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_8d64c3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_8d64c3
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/8db0ce.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/8db0ce.wgsl.expected.ir.msl
index 51037e8..d0f057b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8db0ce.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/8db0ce.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_8db0ce = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_8db0ce = func():void {
+  $B2: {
     %4:texture_storage_2d_array<r32sint, read> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<u32>(1u), 1u
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_8db0ce
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_8db0ce
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_8db0ce
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/8e5032.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/8e5032.wgsl.expected.ir.msl
index ab3caa8..7efd290 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8e5032.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/8e5032.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_8e5032 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_8e5032 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rg32uint, read> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<i32>(1i), 1i
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_8e5032
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_8e5032
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_8e5032
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/8e68c9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/8e68c9.wgsl.expected.ir.msl
index 6ff4674..e217833 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8e68c9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/8e68c9.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_8e68c9 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_8e68c9 = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba32sint, read_write> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec3<u32>(1u)
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_8e68c9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_8e68c9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_8e68c9
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/8fc29b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/8fc29b.wgsl.expected.ir.msl
index e1df6b9..93197bb 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8fc29b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/8fc29b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_8fc29b = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_8fc29b = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba8unorm, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, 1i
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_8fc29b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_8fc29b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_8fc29b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/8ff033.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/8ff033.wgsl.expected.ir.msl
index b801e90..c3131d7 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8ff033.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/8ff033.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8snorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_8ff033 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_8ff033 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba8snorm, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<u32>(1u)
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_8ff033
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_8ff033
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_8ff033
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/91ede5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/91ede5.wgsl.expected.ir.msl
index 4de7ffe..8da8dfa 100644
--- a/test/tint/builtins/gen/literal/textureLoad/91ede5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/91ede5.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rg32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_91ede5 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_91ede5 = func():void {
+  $B2: {
     %4:texture_storage_3d<rg32float, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec3<u32>(1u)
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_91ede5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_91ede5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_91ede5
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/9242e7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/9242e7.wgsl.expected.ir.msl
index 40519db..22fe693 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9242e7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/9242e7.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba16uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_9242e7 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_9242e7 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba16uint, read_write> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<u32>(1u)
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_9242e7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_9242e7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_9242e7
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/92dd61.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/92dd61.wgsl.expected.ir.msl
new file mode 100644
index 0000000..fbfd174
--- /dev/null
+++ b/test/tint/builtins/gen/literal/textureLoad/92dd61.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_1d<r8unorm, read_write>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%textureLoad_92dd61 = func():void {
+  $B2: {
+    %4:texture_storage_1d<r8unorm, read_write> = load %arg_0
+    %5:vec4<f32> = textureLoad %4, 1u
+    %res:ptr<function, vec4<f32>, read_write> = var, %5
+    %7:vec4<f32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %textureLoad_92dd61
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %textureLoad_92dd61
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %textureLoad_92dd61
+    ret
+  }
+}
+
+invalid access control for storage texture
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/textureLoad/92eb1f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/92eb1f.wgsl.expected.ir.msl
index 93655fd..ff44fb9 100644
--- a/test/tint/builtins/gen/literal/textureLoad/92eb1f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/92eb1f.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_92eb1f = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_92eb1f = func():void {
+  $B2: {
     %4:texture_3d<u32> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec3<u32>(1u), 1i
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_92eb1f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_92eb1f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_92eb1f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/936952.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/936952.wgsl.expected.ir.msl
index 3e562aa..786e875 100644
--- a/test/tint/builtins/gen/literal/textureLoad/936952.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/936952.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_936952 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_936952 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba32float, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<i32>(1i), 1i
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_936952
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_936952
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_936952
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/93f23e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/93f23e.wgsl.expected.ir.msl
index 3264bc6..35abf55 100644
--- a/test/tint/builtins/gen/literal/textureLoad/93f23e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/93f23e.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<r32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_93f23e = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_93f23e = func():void {
+  $B2: {
     %4:texture_storage_2d<r32uint, read_write> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<u32>(1u)
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_93f23e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_93f23e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_93f23e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/947107.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/947107.wgsl.expected.ir.msl
new file mode 100644
index 0000000..27ac0dd
--- /dev/null
+++ b/test/tint/builtins/gen/literal/textureLoad/947107.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_1d<r8unorm, read>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%textureLoad_947107 = func():void {
+  $B2: {
+    %4:texture_storage_1d<r8unorm, read> = load %arg_0
+    %5:vec4<f32> = textureLoad %4, 1i
+    %res:ptr<function, vec4<f32>, read_write> = var, %5
+    %7:vec4<f32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %textureLoad_947107
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %textureLoad_947107
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %textureLoad_947107
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/textureLoad/96efd5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/96efd5.wgsl.expected.ir.msl
index 2c37b36..aa022c6 100644
--- a/test/tint/builtins/gen/literal/textureLoad/96efd5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/96efd5.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_96efd5 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_96efd5 = func():void {
+  $B2: {
     %4:texture_2d_array<f32> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<u32>(1u), 1u, 1u
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_96efd5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_96efd5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_96efd5
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/970308.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/970308.wgsl.expected.ir.msl
index e0a7cbb..2f78a21 100644
--- a/test/tint/builtins/gen/literal/textureLoad/970308.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/970308.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_970308 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_970308 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<r32uint, read> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<i32>(1i), 1u
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_970308
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_970308
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_970308
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/9885b0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/9885b0.wgsl.expected.ir.msl
index 7fcf783..bc2b583 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9885b0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/9885b0.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_9885b0 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_9885b0 = func():void {
+  $B2: {
     %4:texture_2d_array<i32> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<u32>(1u), 1u, 1u
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_9885b0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_9885b0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_9885b0
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/99d8fa.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/99d8fa.wgsl.expected.ir.msl
new file mode 100644
index 0000000..5951782
--- /dev/null
+++ b/test/tint/builtins/gen/literal/textureLoad/99d8fa.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_3d<r8unorm, read_write>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%textureLoad_99d8fa = func():void {
+  $B2: {
+    %4:texture_storage_3d<r8unorm, read_write> = load %arg_0
+    %5:vec4<f32> = textureLoad %4, vec3<i32>(1i)
+    %res:ptr<function, vec4<f32>, read_write> = var, %5
+    %7:vec4<f32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %textureLoad_99d8fa
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %textureLoad_99d8fa
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %textureLoad_99d8fa
+    ret
+  }
+}
+
+invalid access control for storage texture
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/textureLoad/9a7c90.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/9a7c90.wgsl.expected.ir.msl
index fb061f9..9264fe3 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9a7c90.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/9a7c90.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_9a7c90 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_9a7c90 = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba8uint, read> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec3<i32>(1i)
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_9a7c90
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_9a7c90
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_9a7c90
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/9a8c1e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/9a8c1e.wgsl.expected.ir.msl
index 30a4999..d3c972e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9a8c1e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/9a8c1e.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_9a8c1e = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_9a8c1e = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8sint, read> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<u32>(1u), 1i
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_9a8c1e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_9a8c1e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_9a8c1e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/9aa733.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/9aa733.wgsl.expected.ir.msl
index e3b25d7..b685bdc 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9aa733.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/9aa733.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_9aa733 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_9aa733 = func():void {
+  $B2: {
     %4:texture_2d<i32> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<u32>(1u), 1i
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_9aa733
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_9aa733
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_9aa733
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/9b2667.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/9b2667.wgsl.expected.ir.msl
index 9c73897..657f962 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9b2667.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/9b2667.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_9b2667 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_9b2667 = func():void {
+  $B2: {
     %4:texture_depth_2d_array = load %arg_0
     %5:f32 = textureLoad %4, vec2<i32>(1i), 1i, 1i
     %res:ptr<function, f32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_9b2667
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_9b2667
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_9b2667
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/9b5343.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/9b5343.wgsl.expected.ir.msl
index 824a28f..a958fdc 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9b5343.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/9b5343.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_9b5343 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_9b5343 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba16uint, read> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<u32>(1u), 1i
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_9b5343
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_9b5343
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_9b5343
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/9c2376.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/9c2376.wgsl.expected.ir.msl
index 680025b..8923e9d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9c2376.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/9c2376.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_9c2376 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_9c2376 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<r32float, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<i32>(1i), 1u
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_9c2376
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_9c2376
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_9c2376
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/9c2a14.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/9c2a14.wgsl.expected.ir.msl
index 54c47fa..dbc0a91 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9c2a14.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/9c2a14.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rg32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_9c2a14 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_9c2a14 = func():void {
+  $B2: {
     %4:texture_storage_2d<rg32float, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<i32>(1i)
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_9c2a14
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_9c2a14
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_9c2a14
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/9cf7df.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/9cf7df.wgsl.expected.ir.msl
index 90518cf..7a3f1e9 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9cf7df.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/9cf7df.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_9cf7df = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_9cf7df = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rg32sint, read> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<i32>(1i), 1u
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_9cf7df
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_9cf7df
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_9cf7df
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/9d70e9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/9d70e9.wgsl.expected.ir.msl
index 8b9bdd3..d651c3a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9d70e9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/9d70e9.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_9d70e9 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_9d70e9 = func():void {
+  $B2: {
     %4:texture_2d_array<i32> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<i32>(1i), 1i, 1u
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_9d70e9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_9d70e9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_9d70e9
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/9de6f5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/9de6f5.wgsl.expected.ir.msl
index aa6aa0a..7e8b8dc 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9de6f5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/9de6f5.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8snorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_9de6f5 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_9de6f5 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8snorm, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<i32>(1i), 1u
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_9de6f5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_9de6f5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_9de6f5
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/9ed19e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/9ed19e.wgsl.expected.ir.msl
index 4618590..e49047c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9ed19e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/9ed19e.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_9ed19e = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_9ed19e = func():void {
+  $B2: {
     %4:texture_depth_2d = load %arg_0
     %5:f32 = textureLoad %4, vec2<u32>(1u), 1u
     %res:ptr<function, f32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_9ed19e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_9ed19e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_9ed19e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/9fa9fd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/9fa9fd.wgsl.expected.ir.msl
index c9082cd..66712a6 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9fa9fd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/9fa9fd.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_9fa9fd = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_9fa9fd = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba32uint, read_write> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec3<u32>(1u)
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_9fa9fd
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_9fa9fd
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_9fa9fd
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/9fbfd9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/9fbfd9.wgsl.expected.ir.msl
index a4ebe9c..7656b0e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9fbfd9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/9fbfd9.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_9fbfd9 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_9fbfd9 = func():void {
+  $B2: {
     %4:texture_2d_array<i32> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<i32>(1i), 1u, 1u
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_9fbfd9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_9fbfd9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_9fbfd9
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/9fd7be.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/9fd7be.wgsl.expected.ir.msl
index d1e6db0..d26ea73 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9fd7be.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/9fd7be.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_9fd7be = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_9fd7be = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba32uint, read_write> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<i32>(1i), 1i
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_9fd7be
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_9fd7be
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_9fd7be
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/a03af1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/a03af1.wgsl.expected.ir.msl
index ea71403..06b4078 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a03af1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/a03af1.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8unorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_a03af1 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_a03af1 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8unorm, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<i32>(1i), 1u
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_a03af1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_a03af1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_a03af1
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/a24be1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/a24be1.wgsl.expected.ir.msl
index 8e05c90..a9abec1 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a24be1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/a24be1.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_a24be1 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_a24be1 = func():void {
+  $B2: {
     %4:texture_2d_array<u32> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<u32>(1u), 1i, 1u
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_a24be1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_a24be1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_a24be1
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/a2b3f4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/a2b3f4.wgsl.expected.ir.msl
index a7e7924..e9e3672 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a2b3f4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/a2b3f4.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_a2b3f4 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_a2b3f4 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8uint, read_write> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<u32>(1u), 1u
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_a2b3f4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_a2b3f4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_a2b3f4
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/a3733f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/a3733f.wgsl.expected.ir.msl
index ca5221c..f35cbc8 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a3733f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/a3733f.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba16uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_a3733f = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_a3733f = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba16uint, read_write> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<i32>(1i)
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_a3733f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_a3733f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_a3733f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/a3f122.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/a3f122.wgsl.expected.ir.msl
index 050e40d..99edb67 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a3f122.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/a3f122.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_a3f122 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_a3f122 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba32uint, read_write> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<u32>(1u), 1u
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_a3f122
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_a3f122
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_a3f122
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/a548a8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/a548a8.wgsl.expected.ir.msl
index 4e592ea..1c28420 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a548a8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/a548a8.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_a548a8 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_a548a8 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba8uint, read_write> = load %arg_0
     %5:vec4<u32> = textureLoad %4, 1i
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_a548a8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_a548a8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_a548a8
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/a54e11.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/a54e11.wgsl.expected.ir.msl
index 5522638..1f6a241 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a54e11.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/a54e11.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_a54e11 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_a54e11 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8sint, read_write> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<i32>(1i), 1u
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_a54e11
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_a54e11
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_a54e11
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/a583c9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/a583c9.wgsl.expected.ir.msl
index 509b6bb..c4a1a40 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a583c9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/a583c9.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_multisampled_2d<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_a583c9 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_a583c9 = func():void {
+  $B2: {
     %4:texture_multisampled_2d<f32> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<i32>(1i), 1i
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_a583c9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_a583c9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_a583c9
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/a5c4e2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/a5c4e2.wgsl.expected.ir.msl
index 499fdf4..6f5519e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a5c4e2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/a5c4e2.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rg32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_a5c4e2 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_a5c4e2 = func():void {
+  $B2: {
     %4:texture_storage_1d<rg32uint, read_write> = load %arg_0
     %5:vec4<u32> = textureLoad %4, 1i
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_a5c4e2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_a5c4e2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_a5c4e2
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/a5e0a5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/a5e0a5.wgsl.expected.ir.msl
index 54a02d9..b563f06 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a5e0a5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/a5e0a5.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<r32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_a5e0a5 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_a5e0a5 = func():void {
+  $B2: {
     %4:texture_storage_2d<r32float, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<u32>(1u)
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_a5e0a5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_a5e0a5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_a5e0a5
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/a64b1d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/a64b1d.wgsl.expected.ir.msl
index 655f5d4..5a6a2c3 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a64b1d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/a64b1d.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_a64b1d = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_a64b1d = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba8unorm, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec3<u32>(1u)
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_a64b1d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_a64b1d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_a64b1d
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/a6a85a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/a6a85a.wgsl.expected.ir.msl
index 58c8d2c..d3bde8f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a6a85a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/a6a85a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8unorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_a6a85a = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_a6a85a = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba8unorm, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec3<i32>(1i)
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_a6a85a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_a6a85a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_a6a85a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/a6b61d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/a6b61d.wgsl.expected.ir.msl
index 0284deb..39cdf2e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a6b61d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/a6b61d.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_a6b61d = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_a6b61d = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba32sint, read> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<i32>(1i), 1i
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_a6b61d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_a6b61d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_a6b61d
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/a7444c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/a7444c.wgsl.expected.ir.msl
index 00726a7..aa24f88 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a7444c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/a7444c.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_a7444c = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_a7444c = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8uint, read> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<u32>(1u), 1u
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_a7444c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_a7444c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_a7444c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/a7a3c3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/a7a3c3.wgsl.expected.ir.msl
index af77ada..3631495 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a7a3c3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/a7a3c3.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba16sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_a7a3c3 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_a7a3c3 = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba16sint, read> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec3<i32>(1i)
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_a7a3c3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_a7a3c3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_a7a3c3
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/a7bcb4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/a7bcb4.wgsl.expected.ir.msl
index 854e568..83bffa6 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a7bcb4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/a7bcb4.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_a7bcb4 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_a7bcb4 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba8snorm, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, 1u
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_a7bcb4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_a7bcb4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_a7bcb4
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/a7c171.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/a7c171.wgsl.expected.ir.msl
index c08e96b..dfa6eb7 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a7c171.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/a7c171.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba16sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_a7c171 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_a7c171 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba16sint, read_write> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<u32>(1u)
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_a7c171
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_a7c171
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_a7c171
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/a8549b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/a8549b.wgsl.expected.ir.msl
index c0a987a..75d08d1 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a8549b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/a8549b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_a8549b = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_a8549b = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba32float, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec3<u32>(1u)
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_a8549b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_a8549b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_a8549b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/a92b18.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/a92b18.wgsl.expected.ir.msl
index 0d1b7f2..2ac9a5a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a92b18.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/a92b18.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_a92b18 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_a92b18 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba32float, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<u32>(1u), 1i
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_a92b18
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_a92b18
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_a92b18
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/a9a9f5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/a9a9f5.wgsl.expected.ir.msl
index 069b02a..766cb3f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a9a9f5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/a9a9f5.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_a9a9f5 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_a9a9f5 = func():void {
+  $B2: {
     %4:texture_3d<u32> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec3<i32>(1i), 1i
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_a9a9f5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_a9a9f5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_a9a9f5
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/aa2579.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/aa2579.wgsl.expected.ir.msl
index 63816df..94fc625 100644
--- a/test/tint/builtins/gen/literal/textureLoad/aa2579.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/aa2579.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_aa2579 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_aa2579 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba32uint, read_write> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<u32>(1u), 1i
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_aa2579
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_aa2579
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_aa2579
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/aa6130.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/aa6130.wgsl.expected.ir.msl
index cf6dbc9..8e4ea28 100644
--- a/test/tint/builtins/gen/literal/textureLoad/aa6130.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/aa6130.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rg32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_aa6130 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_aa6130 = func():void {
+  $B2: {
     %4:texture_storage_2d<rg32sint, read_write> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<i32>(1i)
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_aa6130
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_aa6130
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_aa6130
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/aa8a0d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/aa8a0d.wgsl.expected.ir.msl
index 1525be1..32ac8c7 100644
--- a/test/tint/builtins/gen/literal/textureLoad/aa8a0d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/aa8a0d.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba16uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_aa8a0d = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_aa8a0d = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba16uint, read> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<u32>(1u)
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_aa8a0d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_aa8a0d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_aa8a0d
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/aae7f6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/aae7f6.wgsl.expected.ir.msl
index ab9a002..af86248 100644
--- a/test/tint/builtins/gen/literal/textureLoad/aae7f6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/aae7f6.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_aae7f6 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_aae7f6 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<r32sint, read> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<i32>(1i), 1u
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_aae7f6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_aae7f6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_aae7f6
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/aae9c3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/aae9c3.wgsl.expected.ir.msl
index 283afee..9cf8d46 100644
--- a/test/tint/builtins/gen/literal/textureLoad/aae9c3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/aae9c3.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_aae9c3 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_aae9c3 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8snorm, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<i32>(1i), 1u
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_aae9c3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_aae9c3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_aae9c3
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/ac64f7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/ac64f7.wgsl.expected.ir.msl
index 42b9fc0..919dbfa 100644
--- a/test/tint/builtins/gen/literal/textureLoad/ac64f7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/ac64f7.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<bgra8unorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_ac64f7 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_ac64f7 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<bgra8unorm, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<u32>(1u), 1u
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_ac64f7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_ac64f7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_ac64f7
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/acf22f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/acf22f.wgsl.expected.ir.msl
index 5956b36..ac0613e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/acf22f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/acf22f.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba16float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_acf22f = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_acf22f = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba16float, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, 1u
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_acf22f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_acf22f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_acf22f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/ad551e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/ad551e.wgsl.expected.ir.msl
index acd331a..5a66c2f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/ad551e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/ad551e.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<r32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_ad551e = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_ad551e = func():void {
+  $B2: {
     %4:texture_storage_1d<r32uint, read_write> = load %arg_0
     %5:vec4<u32> = textureLoad %4, 1u
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_ad551e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_ad551e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_ad551e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/aeae73.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/aeae73.wgsl.expected.ir.msl
index 8285ddd..3b74ba0 100644
--- a/test/tint/builtins/gen/literal/textureLoad/aeae73.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/aeae73.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_aeae73 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_aeae73 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<r32uint, read> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<u32>(1u), 1i
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_aeae73
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_aeae73
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_aeae73
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/aebc09.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/aebc09.wgsl.expected.ir.msl
index f4c6d9e..93d9359 100644
--- a/test/tint/builtins/gen/literal/textureLoad/aebc09.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/aebc09.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba16uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_aebc09 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_aebc09 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba16uint, read> = load %arg_0
     %5:vec4<u32> = textureLoad %4, 1u
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_aebc09
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_aebc09
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_aebc09
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/af0507.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/af0507.wgsl.expected.ir.msl
index 7f3ecbf..f36566f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/af0507.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/af0507.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_af0507 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_af0507 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rg32float, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<i32>(1i), 1u
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_af0507
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_af0507
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_af0507
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/b1bf79.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/b1bf79.wgsl.expected.ir.msl
index a4ad418..f6788af 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b1bf79.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/b1bf79.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_b1bf79 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_b1bf79 = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba32sint, read> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec3<i32>(1i)
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_b1bf79
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_b1bf79
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_b1bf79
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/b1ca35.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/b1ca35.wgsl.expected.ir.msl
index 22047d0..ce65533 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b1ca35.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/b1ca35.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_b1ca35 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_b1ca35 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rg32sint, read_write> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<u32>(1u), 1u
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_b1ca35
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_b1ca35
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_b1ca35
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/b24d27.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/b24d27.wgsl.expected.ir.msl
index e0c1568..d522e90 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b24d27.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/b24d27.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_b24d27 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_b24d27 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba8sint, read> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<u32>(1u)
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_b24d27
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_b24d27
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_b24d27
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/b25644.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/b25644.wgsl.expected.ir.msl
index 0652e83..8901c34 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b25644.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/b25644.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_b25644 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_b25644 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<r32uint, read_write> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<i32>(1i), 1u
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_b25644
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_b25644
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_b25644
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/b27c33.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/b27c33.wgsl.expected.ir.msl
index 2e67e8a..1a4af67 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b27c33.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/b27c33.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<r32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_b27c33 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_b27c33 = func():void {
+  $B2: {
     %4:texture_storage_3d<r32sint, read_write> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec3<i32>(1i)
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_b27c33
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_b27c33
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_b27c33
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/b29f71.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/b29f71.wgsl.expected.ir.msl
index 1951b4e..b37a726 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b29f71.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/b29f71.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_b29f71 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_b29f71 = func():void {
+  $B2: {
     %4:texture_2d_array<i32> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<i32>(1i), 1u, 1i
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_b29f71
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_b29f71
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_b29f71
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/b4d6c4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/b4d6c4.wgsl.expected.ir.msl
index a3ea9aa..f2cf4e9 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b4d6c4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/b4d6c4.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rg32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_b4d6c4 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_b4d6c4 = func():void {
+  $B2: {
     %4:texture_storage_2d<rg32float, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<u32>(1u)
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_b4d6c4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_b4d6c4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_b4d6c4
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/b58c6d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/b58c6d.wgsl.expected.ir.msl
index 537397e..21a0f23 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b58c6d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/b58c6d.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_b58c6d = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_b58c6d = func():void {
+  $B2: {
     %4:texture_storage_2d_array<r32float, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<i32>(1i), 1i
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_b58c6d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_b58c6d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_b58c6d
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/b60a86.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/b60a86.wgsl.expected.ir.msl
index a919246..2cb0a28 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b60a86.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/b60a86.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_b60a86 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_b60a86 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba32uint, read_write> = load %arg_0
     %5:vec4<u32> = textureLoad %4, 1i
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_b60a86
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_b60a86
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_b60a86
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/b60db7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/b60db7.wgsl.expected.ir.msl
index 1750607..0ca1b7e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b60db7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/b60db7.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_b60db7 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_b60db7 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<bgra8unorm, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<u32>(1u), 1u
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_b60db7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_b60db7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_b60db7
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/b6ba5d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/b6ba5d.wgsl.expected.ir.msl
index c8914a0..9c59788 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b6ba5d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/b6ba5d.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_b6ba5d = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_b6ba5d = func():void {
+  $B2: {
     %4:texture_depth_2d_array = load %arg_0
     %5:f32 = textureLoad %4, vec2<u32>(1u), 1i, 1i
     %res:ptr<function, f32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_b6ba5d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_b6ba5d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_b6ba5d
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/b6c458.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/b6c458.wgsl.expected.ir.msl
index a5f8605..b32f44f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b6c458.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/b6c458.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_b6c458 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_b6c458 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba32uint, read> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<i32>(1i)
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_b6c458
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_b6c458
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_b6c458
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/b73f6b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/b73f6b.wgsl.expected.ir.msl
index a2ee627..b076e89 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b73f6b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/b73f6b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_b73f6b = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_b73f6b = func():void {
+  $B2: {
     %4:texture_2d<u32> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<u32>(1u), 1i
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_b73f6b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_b73f6b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_b73f6b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/b75c8f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/b75c8f.wgsl.expected.ir.msl
index 72ce08e..5bc056f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b75c8f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/b75c8f.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<r32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_b75c8f = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_b75c8f = func():void {
+  $B2: {
     %4:texture_storage_2d<r32sint, read_write> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<u32>(1u)
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_b75c8f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_b75c8f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_b75c8f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/b75d4a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/b75d4a.wgsl.expected.ir.msl
index b5b664e..c584e6c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b75d4a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/b75d4a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_multisampled_2d<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_b75d4a = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_b75d4a = func():void {
+  $B2: {
     %4:texture_multisampled_2d<f32> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<i32>(1i), 1u
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_b75d4a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_b75d4a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_b75d4a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/b7f74f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/b7f74f.wgsl.expected.ir.msl
index 832de8e..19d4723 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b7f74f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/b7f74f.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<bgra8unorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_b7f74f = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_b7f74f = func():void {
+  $B2: {
     %4:texture_storage_1d<bgra8unorm, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, 1u
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_b7f74f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_b7f74f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_b7f74f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/b80e7e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/b80e7e.wgsl.expected.ir.msl
index 7d38b64..4a8333f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b80e7e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/b80e7e.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_b80e7e = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_b80e7e = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba16float, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<u32>(1u), 1i
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_b80e7e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_b80e7e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_b80e7e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/b94d15.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/b94d15.wgsl.expected.ir.msl
index 02445ec..bc22772 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b94d15.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/b94d15.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_b94d15 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_b94d15 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8uint, read> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<i32>(1i), 1u
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_b94d15
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_b94d15
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_b94d15
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/ba023a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/ba023a.wgsl.expected.ir.msl
index 904d1a7..5950a6a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/ba023a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/ba023a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_ba023a = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_ba023a = func():void {
+  $B2: {
     %4:texture_storage_2d_array<r32sint, read_write> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<i32>(1i), 1i
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_ba023a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_ba023a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_ba023a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/ba74b2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/ba74b2.wgsl.expected.ir.msl
index ca50c00..e7ce55e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/ba74b2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/ba74b2.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_ba74b2 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_ba74b2 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba32sint, read_write> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<i32>(1i), 1i
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_ba74b2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_ba74b2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_ba74b2
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/babdf3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/babdf3.wgsl.expected.ir.msl
index 7bd8397..156a9d2 100644
--- a/test/tint/builtins/gen/literal/textureLoad/babdf3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/babdf3.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba16uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_babdf3 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_babdf3 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba16uint, read_write> = load %arg_0
     %5:vec4<u32> = textureLoad %4, 1u
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_babdf3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_babdf3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_babdf3
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/bba04a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/bba04a.wgsl.expected.ir.msl
index 0940ee8..8b29a93 100644
--- a/test/tint/builtins/gen/literal/textureLoad/bba04a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/bba04a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rg32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_bba04a = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_bba04a = func():void {
+  $B2: {
     %4:texture_storage_1d<rg32uint, read_write> = load %arg_0
     %5:vec4<u32> = textureLoad %4, 1u
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_bba04a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_bba04a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_bba04a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/bbb762.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/bbb762.wgsl.expected.ir.msl
index 0bbe53b..baccd6a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/bbb762.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/bbb762.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_bbb762 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_bbb762 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba32sint, read_write> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<u32>(1u)
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_bbb762
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_bbb762
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_bbb762
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/bc3201.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/bc3201.wgsl.expected.ir.msl
index e50a1d6..7ef0b47 100644
--- a/test/tint/builtins/gen/literal/textureLoad/bc3201.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/bc3201.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_1d<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_bc3201 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_bc3201 = func():void {
+  $B2: {
     %4:texture_1d<u32> = load %arg_0
     %5:vec4<u32> = textureLoad %4, 1u, 1u
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_bc3201
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_bc3201
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_bc3201
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/bc882d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/bc882d.wgsl.expected.ir.msl
new file mode 100644
index 0000000..cd77fce
--- /dev/null
+++ b/test/tint/builtins/gen/literal/textureLoad/bc882d.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_2d_array<r8unorm, read_write>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%textureLoad_bc882d = func():void {
+  $B2: {
+    %4:texture_storage_2d_array<r8unorm, read_write> = load %arg_0
+    %5:vec4<f32> = textureLoad %4, vec2<u32>(1u), 1i
+    %res:ptr<function, vec4<f32>, read_write> = var, %5
+    %7:vec4<f32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %textureLoad_bc882d
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %textureLoad_bc882d
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %textureLoad_bc882d
+    ret
+  }
+}
+
+invalid access control for storage texture
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/textureLoad/bcbb3c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/bcbb3c.wgsl.expected.ir.msl
index abc6e6f..1722046 100644
--- a/test/tint/builtins/gen/literal/textureLoad/bcbb3c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/bcbb3c.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_bcbb3c = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_bcbb3c = func():void {
+  $B2: {
     %4:texture_3d<f32> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec3<u32>(1u), 1i
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_bcbb3c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_bcbb3c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_bcbb3c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/bd990a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/bd990a.wgsl.expected.ir.msl
index 9ad98b2..d6b8e19 100644
--- a/test/tint/builtins/gen/literal/textureLoad/bd990a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/bd990a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_bd990a = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_bd990a = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8uint, read_write> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<u32>(1u), 1i
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_bd990a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_bd990a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_bd990a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/bdc67a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/bdc67a.wgsl.expected.ir.msl
index c2cfd44..5d78ff3 100644
--- a/test/tint/builtins/gen/literal/textureLoad/bdc67a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/bdc67a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_bdc67a = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_bdc67a = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rg32float, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<u32>(1u), 1i
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_bdc67a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_bdc67a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_bdc67a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/bfd154.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/bfd154.wgsl.expected.ir.msl
index be3e299..a70e5f0 100644
--- a/test/tint/builtins/gen/literal/textureLoad/bfd154.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/bfd154.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<r32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_bfd154 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_bfd154 = func():void {
+  $B2: {
     %4:texture_storage_3d<r32uint, read> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec3<i32>(1i)
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_bfd154
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_bfd154
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_bfd154
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/c02b74.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/c02b74.wgsl.expected.ir.msl
index 2d6ed2f..9af0807 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c02b74.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/c02b74.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba16float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_c02b74 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_c02b74 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba16float, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, 1i
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_c02b74
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_c02b74
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_c02b74
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/c07013.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/c07013.wgsl.expected.ir.msl
index 68e2d75..2c98c0f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c07013.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/c07013.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<r32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_c07013 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_c07013 = func():void {
+  $B2: {
     %4:texture_storage_2d<r32float, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<i32>(1i)
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_c07013
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_c07013
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_c07013
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/c16e00.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/c16e00.wgsl.expected.ir.msl
index 05c0b9d..a74b48f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c16e00.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/c16e00.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_c16e00 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_c16e00 = func():void {
+  $B2: {
     %4:texture_depth_2d_array = load %arg_0
     %5:f32 = textureLoad %4, vec2<i32>(1i), 1u, 1i
     %res:ptr<function, f32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_c16e00
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_c16e00
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_c16e00
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/c21b33.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/c21b33.wgsl.expected.ir.msl
index 8566c7b..7d9bc5d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c21b33.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/c21b33.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_c21b33 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_c21b33 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba32uint, read> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<u32>(1u), 1i
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_c21b33
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_c21b33
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_c21b33
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/c2a480.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/c2a480.wgsl.expected.ir.msl
index 3a6b9b4..ec2db07 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c2a480.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/c2a480.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_c2a480 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_c2a480 = func():void {
+  $B2: {
     %4:texture_2d<i32> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<i32>(1i), 1i
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_c2a480
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_c2a480
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_c2a480
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/c2d09a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/c2d09a.wgsl.expected.ir.msl
index 2183cf7..fac51c5 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c2d09a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/c2d09a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_c2d09a = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_c2d09a = func():void {
+  $B2: {
     %4:texture_storage_2d_array<r32uint, read_write> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<u32>(1u), 1i
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_c2d09a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_c2d09a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_c2d09a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/c378ee.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/c378ee.wgsl.expected.ir.msl
index aff1851..64b7702 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c378ee.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/c378ee.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_multisampled_2d<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_c378ee = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_c378ee = func():void {
+  $B2: {
     %4:texture_multisampled_2d<u32> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<i32>(1i), 1i
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_c378ee
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_c378ee
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_c378ee
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/c40dcb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/c40dcb.wgsl.expected.ir.msl
index da744b65..925d054 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c40dcb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/c40dcb.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_c40dcb = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_c40dcb = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba32uint, read> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<i32>(1i), 1i
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_c40dcb
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_c40dcb
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_c40dcb
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/c456bc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/c456bc.wgsl.expected.ir.msl
index deadade..8f1a849 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c456bc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/c456bc.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<r32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_c456bc = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_c456bc = func():void {
+  $B2: {
     %4:texture_storage_3d<r32float, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec3<i32>(1i)
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_c456bc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_c456bc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_c456bc
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/c5791b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/c5791b.wgsl.expected.ir.msl
index 54769ae..b6008ca 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c5791b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/c5791b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba16sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_c5791b = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_c5791b = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba16sint, read> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<u32>(1u)
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_c5791b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_c5791b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_c5791b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/c5c86d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/c5c86d.wgsl.expected.ir.msl
index f600e75..8dd64a1 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c5c86d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/c5c86d.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_c5c86d = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_c5c86d = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba16sint, read_write> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<i32>(1i), 1i
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_c5c86d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_c5c86d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_c5c86d
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/c66b20.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/c66b20.wgsl.expected.ir.msl
index 8bd25bb..36aed4b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c66b20.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/c66b20.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<r32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_c66b20 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_c66b20 = func():void {
+  $B2: {
     %4:texture_storage_2d<r32sint, read> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<u32>(1u)
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_c66b20
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_c66b20
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_c66b20
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/c7cbed.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/c7cbed.wgsl.expected.ir.msl
index 25e81f7..80ae590 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c7cbed.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/c7cbed.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<r32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_c7cbed = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_c7cbed = func():void {
+  $B2: {
     %4:texture_storage_1d<r32float, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, 1i
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_c7cbed
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_c7cbed
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_c7cbed
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/c7e313.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/c7e313.wgsl.expected.ir.msl
index c3d0059..d3bace1 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c7e313.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/c7e313.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_c7e313 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_c7e313 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba32uint, read_write> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<u32>(1u)
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_c7e313
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_c7e313
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_c7e313
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/c80691.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/c80691.wgsl.expected.ir.msl
index 7714f72..78b79c3 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c80691.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/c80691.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<r32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_c80691 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_c80691 = func():void {
+  $B2: {
     %4:texture_storage_1d<r32sint, read_write> = load %arg_0
     %5:vec4<i32> = textureLoad %4, 1u
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_c80691
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_c80691
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_c80691
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/c8ed19.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/c8ed19.wgsl.expected.ir.msl
index 7f56c77..812efdd 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c8ed19.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/c8ed19.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_c8ed19 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_c8ed19 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rg32uint, read> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<u32>(1u), 1u
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_c8ed19
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_c8ed19
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_c8ed19
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/c98bf4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/c98bf4.wgsl.expected.ir.msl
index 112675c..883e014 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c98bf4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/c98bf4.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_c98bf4 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_c98bf4 = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba8snorm, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec3<i32>(1i)
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_c98bf4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_c98bf4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_c98bf4
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/c9b083.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/c9b083.wgsl.expected.ir.msl
index 37e252f..e65dae8 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c9b083.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/c9b083.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_c9b083 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_c9b083 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba16sint, read_write> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<i32>(1i), 1u
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_c9b083
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_c9b083
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_c9b083
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/c9cc40.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/c9cc40.wgsl.expected.ir.msl
index bdf99ba..5d85f55 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c9cc40.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/c9cc40.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_c9cc40 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_c9cc40 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba8sint, read> = load %arg_0
     %5:vec4<i32> = textureLoad %4, 1i
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_c9cc40
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_c9cc40
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_c9cc40
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/c9f310.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/c9f310.wgsl.expected.ir.msl
index 5dfaa7f..856150f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c9f310.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/c9f310.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<r32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_c9f310 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_c9f310 = func():void {
+  $B2: {
     %4:texture_storage_1d<r32sint, read_write> = load %arg_0
     %5:vec4<i32> = textureLoad %4, 1i
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_c9f310
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_c9f310
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_c9f310
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/cac876.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/cac876.wgsl.expected.ir.msl
index d56a234..188b447 100644
--- a/test/tint/builtins/gen/literal/textureLoad/cac876.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/cac876.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_cac876 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_cac876 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba32sint, read_write> = load %arg_0
     %5:vec4<i32> = textureLoad %4, 1u
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_cac876
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_cac876
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_cac876
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/cad5f2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/cad5f2.wgsl.expected.ir.msl
index 2b6c745..8d8e06b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/cad5f2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/cad5f2.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_multisampled_2d<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_cad5f2 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_cad5f2 = func():void {
+  $B2: {
     %4:texture_multisampled_2d<u32> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<i32>(1i), 1u
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_cad5f2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_cad5f2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_cad5f2
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/cb57c2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/cb57c2.wgsl.expected.ir.msl
index 34faae6..b1193d3 100644
--- a/test/tint/builtins/gen/literal/textureLoad/cb57c2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/cb57c2.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_cb57c2 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_cb57c2 = func():void {
+  $B2: {
     %4:texture_depth_2d_array = load %arg_0
     %5:f32 = textureLoad %4, vec2<u32>(1u), 1u, 1i
     %res:ptr<function, f32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_cb57c2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_cb57c2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_cb57c2
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/cdbcf6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/cdbcf6.wgsl.expected.ir.msl
index 6095dc8..c5bd0d6 100644
--- a/test/tint/builtins/gen/literal/textureLoad/cdbcf6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/cdbcf6.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_cdbcf6 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_cdbcf6 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8snorm, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<u32>(1u), 1u
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_cdbcf6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_cdbcf6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_cdbcf6
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/cdccd2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/cdccd2.wgsl.expected.ir.msl
index 34334c1..bc35718 100644
--- a/test/tint/builtins/gen/literal/textureLoad/cdccd2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/cdccd2.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_cdccd2 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_cdccd2 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rg32uint, read_write> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<i32>(1i), 1u
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_cdccd2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_cdccd2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_cdccd2
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/cdd343.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/cdd343.wgsl.expected.ir.msl
index f7d87c3..ad5237a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/cdd343.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/cdd343.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_cdd343 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_cdd343 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba32uint, read> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<i32>(1i), 1u
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_cdd343
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_cdd343
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_cdd343
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/cddf6b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/cddf6b.wgsl.expected.ir.msl
index a4462e0..4dad871 100644
--- a/test/tint/builtins/gen/literal/textureLoad/cddf6b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/cddf6b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_cddf6b = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_cddf6b = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba8unorm, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<u32>(1u)
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_cddf6b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_cddf6b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_cddf6b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/cec477.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/cec477.wgsl.expected.ir.msl
index 48fd857..e971bf5 100644
--- a/test/tint/builtins/gen/literal/textureLoad/cec477.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/cec477.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<r32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_cec477 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_cec477 = func():void {
+  $B2: {
     %4:texture_storage_3d<r32sint, read_write> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec3<u32>(1u)
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_cec477
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_cec477
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_cec477
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/cece6c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/cece6c.wgsl.expected.ir.msl
new file mode 100644
index 0000000..aa36909
--- /dev/null
+++ b/test/tint/builtins/gen/literal/textureLoad/cece6c.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_3d<r8unorm, read>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%textureLoad_cece6c = func():void {
+  $B2: {
+    %4:texture_storage_3d<r8unorm, read> = load %arg_0
+    %5:vec4<f32> = textureLoad %4, vec3<i32>(1i)
+    %res:ptr<function, vec4<f32>, read_write> = var, %5
+    %7:vec4<f32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %textureLoad_cece6c
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %textureLoad_cece6c
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %textureLoad_cece6c
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/textureLoad/d02afc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/d02afc.wgsl.expected.ir.msl
index 3179c22..2fb613e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d02afc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/d02afc.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_d02afc = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_d02afc = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba32sint, read> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec3<u32>(1u)
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_d02afc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_d02afc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_d02afc
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/d0e351.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/d0e351.wgsl.expected.ir.msl
index 494b18e..a2bc7ae 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d0e351.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/d0e351.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_d0e351 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_d0e351 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rg32uint, read_write> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<u32>(1u), 1i
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_d0e351
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_d0e351
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_d0e351
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/d357bb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/d357bb.wgsl.expected.ir.msl
index 9bd1cd9..1457236 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d357bb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/d357bb.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<bgra8unorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_d357bb = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_d357bb = func():void {
+  $B2: {
     %4:texture_storage_1d<bgra8unorm, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, 1i
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_d357bb
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_d357bb
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_d357bb
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/d37a08.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/d37a08.wgsl.expected.ir.msl
index 3b1b21a..ccebd7a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d37a08.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/d37a08.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_d37a08 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_d37a08 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8uint, read_write> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<i32>(1i), 1u
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_d37a08
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_d37a08
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_d37a08
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/d3d8fc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/d3d8fc.wgsl.expected.ir.msl
index 4cc4f4f..5379dc2 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d3d8fc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/d3d8fc.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_d3d8fc = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_d3d8fc = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba16sint, read_write> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<u32>(1u), 1i
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_d3d8fc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_d3d8fc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_d3d8fc
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/d41c72.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/d41c72.wgsl.expected.ir.msl
index 5d1da92..0a2ec03 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d41c72.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/d41c72.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rg32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_d41c72 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_d41c72 = func():void {
+  $B2: {
     %4:texture_storage_3d<rg32sint, read_write> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec3<i32>(1i)
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_d41c72
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_d41c72
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_d41c72
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/d4df19.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/d4df19.wgsl.expected.ir.msl
index 761d17c..bf6cd20 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d4df19.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/d4df19.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<r32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_d4df19 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_d4df19 = func():void {
+  $B2: {
     %4:texture_storage_2d<r32uint, read> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<u32>(1u)
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_d4df19
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_d4df19
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_d4df19
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/d5c48d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/d5c48d.wgsl.expected.ir.msl
index 09fae3c..767876e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d5c48d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/d5c48d.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_d5c48d = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_d5c48d = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba32float, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<i32>(1i)
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_d5c48d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_d5c48d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_d5c48d
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/d72de9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/d72de9.wgsl.expected.ir.msl
index fb7b1ff..540687a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d72de9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/d72de9.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_d72de9 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_d72de9 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba8sint, read_write> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<i32>(1i)
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_d72de9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_d72de9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_d72de9
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/d7996a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/d7996a.wgsl.expected.ir.msl
index 00be350..0b38564 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d7996a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/d7996a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_d7996a = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_d7996a = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba32sint, read_write> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec3<i32>(1i)
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_d7996a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_d7996a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_d7996a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/d79c5c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/d79c5c.wgsl.expected.ir.msl
index e7ab98a..a01bb0c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d79c5c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/d79c5c.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba16uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_d79c5c = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_d79c5c = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba16uint, read_write> = load %arg_0
     %5:vec4<u32> = textureLoad %4, 1i
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_d79c5c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_d79c5c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_d79c5c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/d80ff3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/d80ff3.wgsl.expected.ir.msl
index 8e30b99..7b06dc3 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d80ff3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/d80ff3.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_d80ff3 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_d80ff3 = func():void {
+  $B2: {
     %4:texture_storage_1d<bgra8unorm, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, 1i
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_d80ff3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_d80ff3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_d80ff3
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/d81c57.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/d81c57.wgsl.expected.ir.msl
index eb2dda8..4bdb5e5 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d81c57.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/d81c57.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rg32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_d81c57 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_d81c57 = func():void {
+  $B2: {
     %4:texture_storage_1d<rg32float, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, 1i
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_d81c57
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_d81c57
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_d81c57
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/d85d61.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/d85d61.wgsl.expected.ir.msl
index fce8368..37e2b6f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d85d61.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/d85d61.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_d85d61 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_d85d61 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba32uint, read> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<u32>(1u)
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_d85d61
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_d85d61
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_d85d61
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/d8617f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/d8617f.wgsl.expected.ir.msl
index d04fca5..3f12b50 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d8617f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/d8617f.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_d8617f = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_d8617f = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rg32sint, read> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<i32>(1i), 1i
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_d8617f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_d8617f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_d8617f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/d8be5a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/d8be5a.wgsl.expected.ir.msl
index ef60486..dd3a098 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d8be5a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/d8be5a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba16sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_d8be5a = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_d8be5a = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba16sint, read_write> = load %arg_0
     %5:vec4<i32> = textureLoad %4, 1i
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_d8be5a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_d8be5a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_d8be5a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/d91f37.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/d91f37.wgsl.expected.ir.msl
index 6aa279c..396bd95 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d91f37.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/d91f37.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_d91f37 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_d91f37 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8unorm, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<i32>(1i), 1u
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_d91f37
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_d91f37
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_d91f37
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/dab04f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/dab04f.wgsl.expected.ir.msl
index baf10d0..5b2f066 100644
--- a/test/tint/builtins/gen/literal/textureLoad/dab04f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/dab04f.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_dab04f = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_dab04f = func():void {
+  $B2: {
     %4:texture_storage_2d_array<bgra8unorm, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<i32>(1i), 1i
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_dab04f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_dab04f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_dab04f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/dbd554.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/dbd554.wgsl.expected.ir.msl
index 41baf43..aafc6e0 100644
--- a/test/tint/builtins/gen/literal/textureLoad/dbd554.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/dbd554.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_dbd554 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_dbd554 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba32sint, read> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<i32>(1i)
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_dbd554
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_dbd554
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_dbd554
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/dd5859.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/dd5859.wgsl.expected.ir.msl
index 4b8cc2e..ccc0163 100644
--- a/test/tint/builtins/gen/literal/textureLoad/dd5859.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/dd5859.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_dd5859 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_dd5859 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba16float, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<i32>(1i), 1i
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_dd5859
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_dd5859
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_dd5859
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/dd8776.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/dd8776.wgsl.expected.ir.msl
index 0480a28..a5f48ba 100644
--- a/test/tint/builtins/gen/literal/textureLoad/dd8776.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/dd8776.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_dd8776 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_dd8776 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rg32float, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<u32>(1u), 1u
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_dd8776
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_dd8776
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_dd8776
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/ddeed3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/ddeed3.wgsl.expected.ir.msl
index cb9ddd5..c5e4e5f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/ddeed3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/ddeed3.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_ddeed3 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_ddeed3 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba32sint, read> = load %arg_0
     %5:vec4<i32> = textureLoad %4, 1i
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_ddeed3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_ddeed3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_ddeed3
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/de5a0e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/de5a0e.wgsl.expected.ir.msl
index c922a56..f49ee54 100644
--- a/test/tint/builtins/gen/literal/textureLoad/de5a0e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/de5a0e.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_de5a0e = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_de5a0e = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8sint, read_write> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<u32>(1u), 1u
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_de5a0e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_de5a0e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_de5a0e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/dee8e7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/dee8e7.wgsl.expected.ir.msl
index ca6ba6a..f45d679 100644
--- a/test/tint/builtins/gen/literal/textureLoad/dee8e7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/dee8e7.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_dee8e7 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_dee8e7 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba8sint, read> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<i32>(1i)
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_dee8e7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_dee8e7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_dee8e7
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/defd9a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/defd9a.wgsl.expected.ir.msl
index 0da75c9..7c0ffca 100644
--- a/test/tint/builtins/gen/literal/textureLoad/defd9a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/defd9a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rg32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_defd9a = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_defd9a = func():void {
+  $B2: {
     %4:texture_storage_2d<rg32float, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<i32>(1i)
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_defd9a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_defd9a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_defd9a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/dfdf3b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/dfdf3b.wgsl.expected.ir.msl
index 10133b6..78dd06f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/dfdf3b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/dfdf3b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_dfdf3b = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_dfdf3b = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8sint, read> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<u32>(1u), 1u
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_dfdf3b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_dfdf3b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_dfdf3b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/e1c3cf.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/e1c3cf.wgsl.expected.ir.msl
index e0caaac..42c883d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e1c3cf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/e1c3cf.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba16float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_e1c3cf = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_e1c3cf = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba16float, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<i32>(1i)
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_e1c3cf
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_e1c3cf
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_e1c3cf
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/e2292f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/e2292f.wgsl.expected.ir.msl
index e2b8a8e..1b105c1 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e2292f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/e2292f.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<r32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_e2292f = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_e2292f = func():void {
+  $B2: {
     %4:texture_storage_1d<r32sint, read> = load %arg_0
     %5:vec4<i32> = textureLoad %4, 1u
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_e2292f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_e2292f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_e2292f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/e2b3a1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/e2b3a1.wgsl.expected.ir.msl
index 342b243..efeb5df 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e2b3a1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/e2b3a1.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_e2b3a1 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_e2b3a1 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rg32sint, read_write> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<u32>(1u), 1i
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_e2b3a1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_e2b3a1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_e2b3a1
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/e2d7da.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/e2d7da.wgsl.expected.ir.msl
index 5308b29..743241e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e2d7da.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/e2d7da.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_e2d7da = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_e2d7da = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba16float, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<u32>(1u), 1i
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_e2d7da
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_e2d7da
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_e2d7da
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/e33285.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/e33285.wgsl.expected.ir.msl
index b46ce8d..54efcbf 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e33285.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/e33285.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba16sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_e33285 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_e33285 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba16sint, read_write> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<i32>(1i)
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_e33285
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_e33285
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_e33285
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/e35f72.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/e35f72.wgsl.expected.ir.msl
index 0d7c0ef..92376e7 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e35f72.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/e35f72.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_e35f72 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_e35f72 = func():void {
+  $B2: {
     %4:texture_3d<i32> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec3<i32>(1i), 1u
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_e35f72
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_e35f72
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_e35f72
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/e3b08b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/e3b08b.wgsl.expected.ir.msl
index abd02a4..58d28bc 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e3b08b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/e3b08b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<r32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_e3b08b = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_e3b08b = func():void {
+  $B2: {
     %4:texture_storage_3d<r32float, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec3<u32>(1u)
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_e3b08b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_e3b08b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_e3b08b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/e3d2cc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/e3d2cc.wgsl.expected.ir.msl
index 30167d2..616e1f7 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e3d2cc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/e3d2cc.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_multisampled_2d<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_e3d2cc = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_e3d2cc = func():void {
+  $B2: {
     %4:texture_multisampled_2d<i32> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<i32>(1i), 1i
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_e3d2cc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_e3d2cc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_e3d2cc
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/e4051a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/e4051a.wgsl.expected.ir.msl
new file mode 100644
index 0000000..3f9494e
--- /dev/null
+++ b/test/tint/builtins/gen/literal/textureLoad/e4051a.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_2d<r8unorm, read_write>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%textureLoad_e4051a = func():void {
+  $B2: {
+    %4:texture_storage_2d<r8unorm, read_write> = load %arg_0
+    %5:vec4<f32> = textureLoad %4, vec2<u32>(1u)
+    %res:ptr<function, vec4<f32>, read_write> = var, %5
+    %7:vec4<f32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %textureLoad_e4051a
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %textureLoad_e4051a
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %textureLoad_e4051a
+    ret
+  }
+}
+
+invalid access control for storage texture
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/textureLoad/e57e92.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/e57e92.wgsl.expected.ir.msl
index 4c77f50..0d70e7a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e57e92.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/e57e92.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<bgra8unorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_e57e92 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_e57e92 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<bgra8unorm, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<u32>(1u), 1i
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_e57e92
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_e57e92
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_e57e92
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/e59fdf.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/e59fdf.wgsl.expected.ir.msl
index 1e6fb37..ea988c2 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e59fdf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/e59fdf.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rg32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_e59fdf = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_e59fdf = func():void {
+  $B2: {
     %4:texture_storage_3d<rg32uint, read> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec3<u32>(1u)
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_e59fdf
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_e59fdf
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_e59fdf
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/e65916.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/e65916.wgsl.expected.ir.msl
index 2485735..df3e69d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e65916.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/e65916.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rg32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_e65916 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_e65916 = func():void {
+  $B2: {
     %4:texture_storage_3d<rg32sint, read> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec3<i32>(1i)
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_e65916
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_e65916
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_e65916
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/e893d7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/e893d7.wgsl.expected.ir.msl
index 413360d..90540ee 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e893d7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/e893d7.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba16float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_e893d7 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_e893d7 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba16float, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<i32>(1i)
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_e893d7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_e893d7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_e893d7
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/e92dd0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/e92dd0.wgsl.expected.ir.msl
index 76dc3ff..a4343c6 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e92dd0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/e92dd0.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8unorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_e92dd0 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_e92dd0 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba8unorm, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, 1u
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_e92dd0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_e92dd0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_e92dd0
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/e9eb65.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/e9eb65.wgsl.expected.ir.msl
index 68e0a10..806832c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e9eb65.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/e9eb65.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_e9eb65 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_e9eb65 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba16uint, read_write> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<u32>(1u), 1i
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_e9eb65
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_e9eb65
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_e9eb65
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/ea2abd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/ea2abd.wgsl.expected.ir.msl
index 688c886..2d7fd7d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/ea2abd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/ea2abd.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_ea2abd = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_ea2abd = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba32float, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<u32>(1u)
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_ea2abd
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_ea2abd
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_ea2abd
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/eb573b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/eb573b.wgsl.expected.ir.msl
index 305ee90..9f5c0d6 100644
--- a/test/tint/builtins/gen/literal/textureLoad/eb573b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/eb573b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<r32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_eb573b = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_eb573b = func():void {
+  $B2: {
     %4:texture_storage_2d<r32sint, read> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<i32>(1i)
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_eb573b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_eb573b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_eb573b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/ebfb92.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/ebfb92.wgsl.expected.ir.msl
index e8dc388..4b8f2de 100644
--- a/test/tint/builtins/gen/literal/textureLoad/ebfb92.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/ebfb92.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_ebfb92 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_ebfb92 = func():void {
+  $B2: {
     %4:texture_2d<u32> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<i32>(1i), 1u
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_ebfb92
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_ebfb92
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_ebfb92
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/ecc823.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/ecc823.wgsl.expected.ir.msl
index fe526bf..67eb68e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/ecc823.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/ecc823.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba16uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_ecc823 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_ecc823 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba16uint, read> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<i32>(1i)
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_ecc823
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_ecc823
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_ecc823
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/ed55a8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/ed55a8.wgsl.expected.ir.msl
index ca4026b..2ab426c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/ed55a8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/ed55a8.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_ed55a8 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_ed55a8 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rg32sint, read_write> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<i32>(1i), 1u
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_ed55a8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_ed55a8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_ed55a8
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/ee33c5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/ee33c5.wgsl.expected.ir.msl
index 0af0bfe..080a4fc 100644
--- a/test/tint/builtins/gen/literal/textureLoad/ee33c5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/ee33c5.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba16sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_ee33c5 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_ee33c5 = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba16sint, read> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec3<u32>(1u)
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_ee33c5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_ee33c5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_ee33c5
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/eecf7d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/eecf7d.wgsl.expected.ir.msl
index ccc0759..b0412d9 100644
--- a/test/tint/builtins/gen/literal/textureLoad/eecf7d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/eecf7d.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_eecf7d = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_eecf7d = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rg32uint, read> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<i32>(1i), 1u
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_eecf7d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_eecf7d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_eecf7d
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/ef2ec3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/ef2ec3.wgsl.expected.ir.msl
index 092f83e..e392cd0 100644
--- a/test/tint/builtins/gen/literal/textureLoad/ef2ec3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/ef2ec3.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rg32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_ef2ec3 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_ef2ec3 = func():void {
+  $B2: {
     %4:texture_storage_1d<rg32sint, read_write> = load %arg_0
     %5:vec4<i32> = textureLoad %4, 1u
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_ef2ec3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_ef2ec3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_ef2ec3
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/ef5405.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/ef5405.wgsl.expected.ir.msl
index 6ca8940..e5fdbef 100644
--- a/test/tint/builtins/gen/literal/textureLoad/ef5405.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/ef5405.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rg32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_ef5405 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_ef5405 = func():void {
+  $B2: {
     %4:texture_storage_3d<rg32uint, read> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec3<i32>(1i)
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_ef5405
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_ef5405
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_ef5405
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/efa787.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/efa787.wgsl.expected.ir.msl
index 11c9ac1..75cd72d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/efa787.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/efa787.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8unorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_efa787 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_efa787 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8unorm, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<u32>(1u), 1u
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_efa787
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_efa787
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_efa787
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/f0514a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/f0514a.wgsl.expected.ir.msl
index 549c96e..f189ff2 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f0514a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/f0514a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_f0514a = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_f0514a = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba32float, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, 1i
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_f0514a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_f0514a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_f0514a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/f06b69.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/f06b69.wgsl.expected.ir.msl
index 11ce828..2d7ef74 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f06b69.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/f06b69.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<r32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_f06b69 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_f06b69 = func():void {
+  $B2: {
     %4:texture_storage_1d<r32sint, read> = load %arg_0
     %5:vec4<i32> = textureLoad %4, 1i
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_f06b69
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_f06b69
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_f06b69
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/f0abad.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/f0abad.wgsl.expected.ir.msl
index 77cf536..37273b2 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f0abad.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/f0abad.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_multisampled_2d<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_f0abad = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_f0abad = func():void {
+  $B2: {
     %4:texture_multisampled_2d<f32> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<u32>(1u), 1i
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_f0abad
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_f0abad
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_f0abad
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/f1c549.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/f1c549.wgsl.expected.ir.msl
index e0cbd2c..5c82944 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f1c549.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/f1c549.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<r32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_f1c549 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_f1c549 = func():void {
+  $B2: {
     %4:texture_storage_3d<r32float, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec3<i32>(1i)
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_f1c549
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_f1c549
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_f1c549
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/f2a7ff.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/f2a7ff.wgsl.expected.ir.msl
index ea63ff1..9d7184e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f2a7ff.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/f2a7ff.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8unorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_f2a7ff = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_f2a7ff = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba8unorm, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<u32>(1u)
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_f2a7ff
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_f2a7ff
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_f2a7ff
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/f2bdd4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/f2bdd4.wgsl.expected.ir.msl
new file mode 100644
index 0000000..3844916
--- /dev/null
+++ b/test/tint/builtins/gen/literal/textureLoad/f2bdd4.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_2d_array<r8unorm, read_write>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%textureLoad_f2bdd4 = func():void {
+  $B2: {
+    %4:texture_storage_2d_array<r8unorm, read_write> = load %arg_0
+    %5:vec4<f32> = textureLoad %4, vec2<u32>(1u), 1u
+    %res:ptr<function, vec4<f32>, read_write> = var, %5
+    %7:vec4<f32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %textureLoad_f2bdd4
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %textureLoad_f2bdd4
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %textureLoad_f2bdd4
+    ret
+  }
+}
+
+invalid access control for storage texture
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/textureLoad/f2c311.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/f2c311.wgsl.expected.ir.msl
index 44a03a5..1d79e03 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f2c311.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/f2c311.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_f2c311 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_f2c311 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8sint, read_write> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<i32>(1i), 1i
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_f2c311
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_f2c311
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_f2c311
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/f348d9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/f348d9.wgsl.expected.ir.msl
index 214be32..9355c5d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f348d9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/f348d9.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_f348d9 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_f348d9 = func():void {
+  $B2: {
     %4:texture_2d_array<f32> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<u32>(1u), 1u, 1i
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_f348d9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_f348d9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_f348d9
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/f35ac7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/f35ac7.wgsl.expected.ir.msl
index d6869b5..6176b1e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f35ac7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/f35ac7.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_f35ac7 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_f35ac7 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba8sint, read> = load %arg_0
     %5:vec4<i32> = textureLoad %4, 1u
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_f35ac7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_f35ac7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_f35ac7
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/f379e2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/f379e2.wgsl.expected.ir.msl
index 502a2c3..276cdb5 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f379e2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/f379e2.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8unorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_f379e2 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_f379e2 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8unorm, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<i32>(1i), 1i
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_f379e2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_f379e2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_f379e2
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/f56e6f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/f56e6f.wgsl.expected.ir.msl
index 7d9f57b..e91d6df 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f56e6f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/f56e6f.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba16uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_f56e6f = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_f56e6f = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba16uint, read> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec3<i32>(1i)
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_f56e6f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_f56e6f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_f56e6f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/f5aee2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/f5aee2.wgsl.expected.ir.msl
new file mode 100644
index 0000000..9b87695
--- /dev/null
+++ b/test/tint/builtins/gen/literal/textureLoad/f5aee2.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_2d<r8unorm, read>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%textureLoad_f5aee2 = func():void {
+  $B2: {
+    %4:texture_storage_2d<r8unorm, read> = load %arg_0
+    %5:vec4<f32> = textureLoad %4, vec2<u32>(1u)
+    %res:ptr<function, vec4<f32>, read_write> = var, %5
+    %7:vec4<f32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %textureLoad_f5aee2
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %textureLoad_f5aee2
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %textureLoad_f5aee2
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/textureLoad/f5fbc6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/f5fbc6.wgsl.expected.ir.msl
index 6cbd280..e26d4e5 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f5fbc6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/f5fbc6.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_f5fbc6 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_f5fbc6 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8snorm, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<i32>(1i), 1i
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_f5fbc6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_f5fbc6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_f5fbc6
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/f74bd8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/f74bd8.wgsl.expected.ir.msl
index 68e4682..32029de 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f74bd8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/f74bd8.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rg32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_f74bd8 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_f74bd8 = func():void {
+  $B2: {
     %4:texture_storage_3d<rg32float, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec3<i32>(1i)
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_f74bd8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_f74bd8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_f74bd8
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/f7f3bc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/f7f3bc.wgsl.expected.ir.msl
index 2c6c123..52f24e1 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f7f3bc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/f7f3bc.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_f7f3bc = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_f7f3bc = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba8snorm, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, 1i
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_f7f3bc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_f7f3bc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_f7f3bc
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/f7f936.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/f7f936.wgsl.expected.ir.msl
index 8f5fbde..432d1a0 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f7f936.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/f7f936.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8snorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_f7f936 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_f7f936 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8snorm, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<u32>(1u), 1u
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_f7f936
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_f7f936
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_f7f936
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/f81792.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/f81792.wgsl.expected.ir.msl
index 93c9047..3aecc6e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f81792.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/f81792.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_f81792 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_f81792 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<r32float, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<i32>(1i), 1i
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_f81792
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_f81792
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_f81792
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/f82eb2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/f82eb2.wgsl.expected.ir.msl
index 62664b6..ef5fea6 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f82eb2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/f82eb2.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_f82eb2 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_f82eb2 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba32float, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, 1u
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_f82eb2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_f82eb2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_f82eb2
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/f85291.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/f85291.wgsl.expected.ir.msl
index 285d044..1d42ef5 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f85291.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/f85291.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_f85291 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_f85291 = func():void {
+  $B2: {
     %4:texture_2d<i32> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<i32>(1i), 1u
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_f85291
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_f85291
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_f85291
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/f8a2e8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/f8a2e8.wgsl.expected.ir.msl
index 6709502..cb691af 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f8a2e8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/f8a2e8.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<bgra8unorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_f8a2e8 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_f8a2e8 = func():void {
+  $B2: {
     %4:texture_storage_3d<bgra8unorm, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec3<i32>(1i)
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_f8a2e8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_f8a2e8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_f8a2e8
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/f92c2d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/f92c2d.wgsl.expected.ir.msl
index 8f4953c..0f784ff 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f92c2d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/f92c2d.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<r32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_f92c2d = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_f92c2d = func():void {
+  $B2: {
     %4:texture_storage_2d<r32float, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<i32>(1i)
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_f92c2d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_f92c2d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_f92c2d
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/f9eaaf.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/f9eaaf.wgsl.expected.ir.msl
index ad741d3..68e0e77 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f9eaaf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/f9eaaf.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba16sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_f9eaaf = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_f9eaaf = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba16sint, read> = load %arg_0
     %5:vec4<i32> = textureLoad %4, 1u
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_f9eaaf
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_f9eaaf
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_f9eaaf
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/fc47ff.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/fc47ff.wgsl.expected.ir.msl
index 5396b22..2e53fa3 100644
--- a/test/tint/builtins/gen/literal/textureLoad/fc47ff.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/fc47ff.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_fc47ff = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_fc47ff = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba8sint, read_write> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<u32>(1u)
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_fc47ff
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_fc47ff
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_fc47ff
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/fc6d36.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/fc6d36.wgsl.expected.ir.msl
index 5179022..bfc353e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/fc6d36.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/fc6d36.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_fc6d36 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_fc6d36 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba16sint, read> = load %arg_0
     %5:vec4<i32> = textureLoad %4, vec2<i32>(1i), 1i
     %res:ptr<function, vec4<i32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_fc6d36
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_fc6d36
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_fc6d36
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/fcd23d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/fcd23d.wgsl.expected.ir.msl
index cf294ce..557e089 100644
--- a/test/tint/builtins/gen/literal/textureLoad/fcd23d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/fcd23d.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_multisampled_2d, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_fcd23d = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_fcd23d = func():void {
+  $B2: {
     %4:texture_depth_multisampled_2d = load %arg_0
     %5:f32 = textureLoad %4, vec2<u32>(1u), 1i
     %res:ptr<function, f32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_fcd23d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_fcd23d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_fcd23d
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/fd6442.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/fd6442.wgsl.expected.ir.msl
index 087b175..fb6d3f0 100644
--- a/test/tint/builtins/gen/literal/textureLoad/fd6442.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/fd6442.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_fd6442 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_fd6442 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba8uint, read> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<u32>(1u)
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_fd6442
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_fd6442
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_fd6442
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/fd9606.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/fd9606.wgsl.expected.ir.msl
index 705c19f..2d7d731 100644
--- a/test/tint/builtins/gen/literal/textureLoad/fd9606.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/fd9606.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_fd9606 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_fd9606 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8snorm, read_write> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec2<u32>(1u), 1i
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_fd9606
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_fd9606
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_fd9606
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/fdebd0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/fdebd0.wgsl.expected.ir.msl
index 6b826b5..7f6aacb 100644
--- a/test/tint/builtins/gen/literal/textureLoad/fdebd0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/fdebd0.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_fdebd0 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_fdebd0 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8uint, read> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<i32>(1i), 1i
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_fdebd0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_fdebd0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_fdebd0
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/fe0565.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/fe0565.wgsl.expected.ir.msl
index 89e8120..facbfe5 100644
--- a/test/tint/builtins/gen/literal/textureLoad/fe0565.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/fe0565.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_multisampled_2d<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_fe0565 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_fe0565 = func():void {
+  $B2: {
     %4:texture_multisampled_2d<u32> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<u32>(1u), 1i
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_fe0565
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_fe0565
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_fe0565
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/fe222a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/fe222a.wgsl.expected.ir.msl
index 7ef38e2..bf7ec25 100644
--- a/test/tint/builtins/gen/literal/textureLoad/fe222a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/fe222a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8snorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_fe222a = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_fe222a = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba8snorm, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, 1i
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_fe222a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_fe222a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_fe222a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/fe2c1b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/fe2c1b.wgsl.expected.ir.msl
index ba57662..7ceec82 100644
--- a/test/tint/builtins/gen/literal/textureLoad/fe2c1b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/fe2c1b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_fe2c1b = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_fe2c1b = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba32uint, read_write> = load %arg_0
     %5:vec4<u32> = textureLoad %4, vec2<i32>(1i), 1u
     %res:ptr<function, vec4<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_fe2c1b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_fe2c1b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_fe2c1b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/feab99.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/feab99.wgsl.expected.ir.msl
index bedaf9f..6878fe7 100644
--- a/test/tint/builtins/gen/literal/textureLoad/feab99.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/feab99.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba16float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_feab99 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_feab99 = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba16float, read> = load %arg_0
     %5:vec4<f32> = textureLoad %4, vec3<i32>(1i)
     %res:ptr<function, vec4<f32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_feab99
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_feab99
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_feab99
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureLoad/ff1119.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/ff1119.wgsl.expected.ir.msl
index d79b291..4faa327 100644
--- a/test/tint/builtins/gen/literal/textureLoad/ff1119.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/ff1119.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_ff1119 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_ff1119 = func():void {
+  $B2: {
     %4:texture_depth_2d_array = load %arg_0
     %5:f32 = textureLoad %4, vec2<i32>(1i), 1i, 1u
     %res:ptr<function, f32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureLoad_ff1119
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureLoad_ff1119
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureLoad_ff1119
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/014a3b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/014a3b.wgsl.expected.ir.msl
index 0fb4467..9281d71 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/014a3b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/014a3b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16uint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_014a3b = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_014a3b = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba16uint, write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_014a3b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_014a3b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_014a3b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/071ebc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/071ebc.wgsl.expected.ir.msl
index d8c57e4..9550c71 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/071ebc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/071ebc.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32uint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_071ebc = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_071ebc = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rg32uint, write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_071ebc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_071ebc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_071ebc
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/0856ae.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/0856ae.wgsl.expected.ir.msl
index c3e4aa9..68eca19 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/0856ae.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/0856ae.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_0856ae = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_0856ae = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba16float, read_write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_0856ae
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_0856ae
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_0856ae
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/0ec222.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/0ec222.wgsl.expected.ir.msl
index 5f6ac22..3523e3c 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/0ec222.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/0ec222.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_0ec222 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_0ec222 = func():void {
+  $B2: {
     %4:texture_2d_array<f32> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_0ec222
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_0ec222
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_0ec222
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/0fe8dc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/0fe8dc.wgsl.expected.ir.msl
index 3d4483f..87cf3db 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/0fe8dc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/0fe8dc.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_0fe8dc = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_0fe8dc = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba32float, read> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_0fe8dc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_0fe8dc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_0fe8dc
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/17ccad.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/17ccad.wgsl.expected.ir.msl
index 602e6ce..33363af 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/17ccad.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/17ccad.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_17ccad = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_17ccad = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rg32float, read_write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_17ccad
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_17ccad
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_17ccad
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/1f858a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/1f858a.wgsl.expected.ir.msl
index 14b4671..c6bbf24 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/1f858a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/1f858a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<bgra8unorm, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_1f858a = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_1f858a = func():void {
+  $B2: {
     %4:texture_storage_2d_array<bgra8unorm, write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_1f858a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_1f858a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_1f858a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/24d572.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/24d572.wgsl.expected.ir.msl
index 0d09b42..94a6240 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/24d572.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/24d572.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_24d572 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_24d572 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rg32uint, read_write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_24d572
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_24d572
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_24d572
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/26c9f9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/26c9f9.wgsl.expected.ir.msl
index 4bc2217..ff5efc6 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/26c9f9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/26c9f9.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_26c9f9 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_26c9f9 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<r32sint, read> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_26c9f9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_26c9f9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_26c9f9
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/2a48dc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/2a48dc.wgsl.expected.ir.msl
index 504cd1e..6ec8cad 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/2a48dc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/2a48dc.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_2a48dc = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_2a48dc = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba32uint, read_write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_2a48dc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_2a48dc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_2a48dc
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/2d95ea.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/2d95ea.wgsl.expected.ir.msl
index f6417fc..7694de3 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/2d95ea.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/2d95ea.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_2d95ea = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_2d95ea = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rg32uint, read> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_2d95ea
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_2d95ea
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_2d95ea
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/327d70.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/327d70.wgsl.expected.ir.msl
index 353c19b..7dbf2d3 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/327d70.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/327d70.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_327d70 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_327d70 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba16uint, read_write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_327d70
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_327d70
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_327d70
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/32ca10.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/32ca10.wgsl.expected.ir.msl
index 609eb8e..af43135 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/32ca10.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/32ca10.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_32ca10 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_32ca10 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8uint, read_write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_32ca10
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_32ca10
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_32ca10
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/3465ec.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/3465ec.wgsl.expected.ir.msl
index 0330bd1..cc22260 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/3465ec.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/3465ec.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32float, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_3465ec = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_3465ec = func():void {
+  $B2: {
     %4:texture_storage_2d_array<r32float, write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_3465ec
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_3465ec
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_3465ec
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/34cefa.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/34cefa.wgsl.expected.ir.msl
index c2e34b0..b0a4cfa 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/34cefa.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/34cefa.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube_array<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_34cefa = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_34cefa = func():void {
+  $B2: {
     %4:texture_cube_array<f32> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_34cefa
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_34cefa
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_34cefa
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/3580ab.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/3580ab.wgsl.expected.ir.msl
index 86480f4..1a0d751 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/3580ab.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/3580ab.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32sint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_3580ab = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_3580ab = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rg32sint, write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_3580ab
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_3580ab
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_3580ab
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/379cc5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/379cc5.wgsl.expected.ir.msl
index 260b649..a5c5c2e 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/379cc5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/379cc5.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_379cc5 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_379cc5 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<r32float, read> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_379cc5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_379cc5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_379cc5
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/37bc8a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/37bc8a.wgsl.expected.ir.msl
index 8479b30..463d2f6 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/37bc8a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/37bc8a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_37bc8a = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_37bc8a = func():void {
+  $B2: {
     %4:texture_storage_2d_array<r32float, read_write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_37bc8a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_37bc8a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_37bc8a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/380a60.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/380a60.wgsl.expected.ir.msl
index e3d0f43..71f562e 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/380a60.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/380a60.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_380a60 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_380a60 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8sint, read_write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_380a60
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_380a60
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_380a60
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/3ad143.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/3ad143.wgsl.expected.ir.msl
index e88ff34..8949315f0 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/3ad143.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/3ad143.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_3ad143 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_3ad143 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8sint, read> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_3ad143
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_3ad143
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_3ad143
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/3eff89.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/3eff89.wgsl.expected.ir.msl
index 230a024..ebc5e74 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/3eff89.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/3eff89.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8unorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_3eff89 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_3eff89 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8unorm, read> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_3eff89
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_3eff89
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_3eff89
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/485774.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/485774.wgsl.expected.ir.msl
index 7f7f953..50ccfdd 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/485774.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/485774.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<bgra8unorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_485774 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_485774 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<bgra8unorm, read> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_485774
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_485774
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_485774
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/48ef47.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/48ef47.wgsl.expected.ir.msl
index daf683a..398ad9e 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/48ef47.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/48ef47.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_cube_array, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_48ef47 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_48ef47 = func():void {
+  $B2: {
     %4:texture_depth_cube_array = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_48ef47
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_48ef47
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_48ef47
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/4adaad.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/4adaad.wgsl.expected.ir.msl
index 9b34cd3..a34320e 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/4adaad.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/4adaad.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_4adaad = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_4adaad = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba32sint, read> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_4adaad
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_4adaad
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_4adaad
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/4c4333.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/4c4333.wgsl.expected.ir.msl
index 9295af0..f0f4aef 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/4c4333.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/4c4333.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8snorm, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_4c4333 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_4c4333 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8snorm, write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_4c4333
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_4c4333
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_4c4333
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/520086.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/520086.wgsl.expected.ir.msl
index ec06518..93cd92d 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/520086.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/520086.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_520086 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_520086 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<r32uint, read_write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_520086
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_520086
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_520086
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/52dfc5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/52dfc5.wgsl.expected.ir.msl
index b23e61c..628dfa8 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/52dfc5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/52dfc5.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_52dfc5 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_52dfc5 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba16sint, read> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_52dfc5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_52dfc5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_52dfc5
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/54a654.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/54a654.wgsl.expected.ir.msl
index 403b305..4172f70 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/54a654.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/54a654.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_54a654 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_54a654 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba16sint, read_write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_54a654
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_54a654
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_54a654
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/555f67.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/555f67.wgsl.expected.ir.msl
index ec1e35a..67d85a3 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/555f67.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/555f67.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_555f67 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_555f67 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba16uint, read> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_555f67
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_555f67
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_555f67
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/59cc27.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/59cc27.wgsl.expected.ir.msl
new file mode 100644
index 0000000..31c332d
--- /dev/null
+++ b/test/tint/builtins/gen/literal/textureNumLayers/59cc27.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_2d_array<r8unorm, read>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
+}
+
+%textureNumLayers_59cc27 = func():void {
+  $B2: {
+    %4:texture_storage_2d_array<r8unorm, read> = load %arg_0
+    %5:u32 = textureNumLayers %4
+    %res:ptr<function, u32, read_write> = var, %5
+    %7:u32 = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %textureNumLayers_59cc27
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %textureNumLayers_59cc27
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %textureNumLayers_59cc27
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/59eb57.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/59eb57.wgsl.expected.ir.msl
index 21c8365..ae46337 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/59eb57.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/59eb57.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32sint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_59eb57 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_59eb57 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<r32sint, write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_59eb57
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_59eb57
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_59eb57
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/5ee8f2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/5ee8f2.wgsl.expected.ir.msl
index c3958c3..f6ecd8e 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/5ee8f2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/5ee8f2.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_5ee8f2 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_5ee8f2 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba32float, read_write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_5ee8f2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_5ee8f2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_5ee8f2
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/5f20d1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/5f20d1.wgsl.expected.ir.msl
index 7ea0e55..2cfeb83 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/5f20d1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/5f20d1.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_5f20d1 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_5f20d1 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<r32uint, read> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_5f20d1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_5f20d1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_5f20d1
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/61bd23.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/61bd23.wgsl.expected.ir.msl
index 0ba22a3..f132ef9 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/61bd23.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/61bd23.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8uint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_61bd23 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_61bd23 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8uint, write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_61bd23
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_61bd23
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_61bd23
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/622aa2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/622aa2.wgsl.expected.ir.msl
index ab2e549..ad88e15 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/622aa2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/622aa2.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_622aa2 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_622aa2 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rg32sint, read_write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_622aa2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_622aa2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_622aa2
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/6b4321.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/6b4321.wgsl.expected.ir.msl
index f93dc1e..faa0303 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/6b4321.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/6b4321.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube_array<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_6b4321 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_6b4321 = func():void {
+  $B2: {
     %4:texture_cube_array<i32> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_6b4321
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_6b4321
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_6b4321
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/6da0eb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/6da0eb.wgsl.expected.ir.msl
index dc1f22c..cfe2770 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/6da0eb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/6da0eb.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_6da0eb = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_6da0eb = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8unorm, read_write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_6da0eb
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_6da0eb
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_6da0eb
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/77be7b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/77be7b.wgsl.expected.ir.msl
index c3b006e..dd12182 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/77be7b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/77be7b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_77be7b = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_77be7b = func():void {
+  $B2: {
     %4:texture_2d_array<i32> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_77be7b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_77be7b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_77be7b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/7895f4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/7895f4.wgsl.expected.ir.msl
index ac4abcf..e36e51d 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/7895f4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/7895f4.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8snorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_7895f4 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_7895f4 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8snorm, read> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_7895f4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_7895f4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_7895f4
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/7f28cf.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/7f28cf.wgsl.expected.ir.msl
index 14e579f..f6948ca 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/7f28cf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/7f28cf.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32float, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_7f28cf = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_7f28cf = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rg32float, write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_7f28cf
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_7f28cf
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_7f28cf
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/8356f7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/8356f7.wgsl.expected.ir.msl
new file mode 100644
index 0000000..1d18a30
--- /dev/null
+++ b/test/tint/builtins/gen/literal/textureNumLayers/8356f7.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_2d_array<r8unorm, write>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
+}
+
+%textureNumLayers_8356f7 = func():void {
+  $B2: {
+    %4:texture_storage_2d_array<r8unorm, write> = load %arg_0
+    %5:u32 = textureNumLayers %4
+    %res:ptr<function, u32, read_write> = var, %5
+    %7:u32 = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %textureNumLayers_8356f7
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %textureNumLayers_8356f7
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %textureNumLayers_8356f7
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/878dea.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/878dea.wgsl.expected.ir.msl
index dece494..4b13efe 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/878dea.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/878dea.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8sint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_878dea = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_878dea = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8sint, write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_878dea
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_878dea
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_878dea
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/87faad.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/87faad.wgsl.expected.ir.msl
index b9c1c72..ad9cf95 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/87faad.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/87faad.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32uint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_87faad = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_87faad = func():void {
+  $B2: {
     %4:texture_storage_2d_array<r32uint, write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_87faad
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_87faad
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_87faad
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/8ac32a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/8ac32a.wgsl.expected.ir.msl
index dfb1202..0ff3e5a 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/8ac32a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/8ac32a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_8ac32a = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_8ac32a = func():void {
+  $B2: {
     %4:texture_2d_array<u32> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_8ac32a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_8ac32a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_8ac32a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/8bd987.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/8bd987.wgsl.expected.ir.msl
index 6ef41e6..a19cbca 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/8bd987.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/8bd987.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32sint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_8bd987 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_8bd987 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba32sint, write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_8bd987
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_8bd987
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_8bd987
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/8dbf23.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/8dbf23.wgsl.expected.ir.msl
index f1592e9..50af50b 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/8dbf23.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/8dbf23.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8unorm, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_8dbf23 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_8dbf23 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8unorm, write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_8dbf23
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_8dbf23
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_8dbf23
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/8e1bd0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/8e1bd0.wgsl.expected.ir.msl
index 7585c82..24fbd07 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/8e1bd0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/8e1bd0.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_8e1bd0 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_8e1bd0 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<r32sint, read_write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_8e1bd0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_8e1bd0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_8e1bd0
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/90b8cc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/90b8cc.wgsl.expected.ir.msl
index fd3222a..082e72b 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/90b8cc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/90b8cc.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_90b8cc = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_90b8cc = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rg32float, read> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_90b8cc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_90b8cc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_90b8cc
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/9695c6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/9695c6.wgsl.expected.ir.msl
index 6cdb31d..9534498 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/9695c6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/9695c6.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32uint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_9695c6 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_9695c6 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba32uint, write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_9695c6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_9695c6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_9695c6
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/98a9cf.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/98a9cf.wgsl.expected.ir.msl
index 1bde369..d4ebae1 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/98a9cf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/98a9cf.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16float, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_98a9cf = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_98a9cf = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba16float, write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_98a9cf
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_98a9cf
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_98a9cf
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/9c60e3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/9c60e3.wgsl.expected.ir.msl
index d1146ee..020f2c2 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/9c60e3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/9c60e3.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_9c60e3 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_9c60e3 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba32uint, read> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_9c60e3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_9c60e3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_9c60e3
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/a54655.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/a54655.wgsl.expected.ir.msl
index dc774f4..7d7ae36 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/a54655.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/a54655.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_a54655 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_a54655 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<bgra8unorm, read_write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_a54655
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_a54655
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_a54655
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/a9d3f5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/a9d3f5.wgsl.expected.ir.msl
index a484d5a..596843d 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/a9d3f5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/a9d3f5.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_a9d3f5 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_a9d3f5 = func():void {
+  $B2: {
     %4:texture_depth_2d_array = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_a9d3f5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_a9d3f5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_a9d3f5
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/aac630.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/aac630.wgsl.expected.ir.msl
new file mode 100644
index 0000000..971a269
--- /dev/null
+++ b/test/tint/builtins/gen/literal/textureNumLayers/aac630.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_2d_array<r8unorm, read_write>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
+}
+
+%textureNumLayers_aac630 = func():void {
+  $B2: {
+    %4:texture_storage_2d_array<r8unorm, read_write> = load %arg_0
+    %5:u32 = textureNumLayers %4
+    %res:ptr<function, u32, read_write> = var, %5
+    %7:u32 = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %textureNumLayers_aac630
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %textureNumLayers_aac630
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %textureNumLayers_aac630
+    ret
+  }
+}
+
+invalid access control for storage texture
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/bf2f76.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/bf2f76.wgsl.expected.ir.msl
index 62bb7e5..60413c7 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/bf2f76.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/bf2f76.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_bf2f76 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_bf2f76 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rg32sint, read> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_bf2f76
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_bf2f76
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_bf2f76
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/c1eca9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/c1eca9.wgsl.expected.ir.msl
index 67e92b9..e34b6e8 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/c1eca9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/c1eca9.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube_array<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_c1eca9 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_c1eca9 = func():void {
+  $B2: {
     %4:texture_cube_array<u32> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_c1eca9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_c1eca9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_c1eca9
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/d3e21f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/d3e21f.wgsl.expected.ir.msl
index 8ccfa7b..541a1c1 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/d3e21f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/d3e21f.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_d3e21f = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_d3e21f = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8uint, read> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_d3e21f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_d3e21f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_d3e21f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/d3f655.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/d3f655.wgsl.expected.ir.msl
index 89fc94d..2658710 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/d3f655.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/d3f655.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_d3f655 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_d3f655 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba32sint, read_write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_d3f655
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_d3f655
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_d3f655
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/d75a0b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/d75a0b.wgsl.expected.ir.msl
index 4aeac8b..411e681 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/d75a0b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/d75a0b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32float, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_d75a0b = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_d75a0b = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba32float, write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_d75a0b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_d75a0b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_d75a0b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/de8087.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/de8087.wgsl.expected.ir.msl
index 5d387dd..e4517d4 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/de8087.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/de8087.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16sint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_de8087 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_de8087 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba16sint, write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_de8087
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_de8087
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_de8087
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/e47aac.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/e47aac.wgsl.expected.ir.msl
index 72222a7..89f70d4 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/e47aac.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/e47aac.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_e47aac = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_e47aac = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8snorm, read_write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_e47aac
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_e47aac
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_e47aac
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/f1783f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/f1783f.wgsl.expected.ir.msl
index c8ba250..55270ec 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/f1783f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/f1783f.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_f1783f = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_f1783f = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba16float, read> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_f1783f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_f1783f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_f1783f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLevels/181090.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLevels/181090.wgsl.expected.ir.msl
index adbe171..1d6870d 100644
--- a/test/tint/builtins/gen/literal/textureNumLevels/181090.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLevels/181090.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLevels_181090 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLevels_181090 = func():void {
+  $B2: {
     %4:texture_2d_array<u32> = load %arg_0
     %5:u32 = textureNumLevels %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLevels_181090
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLevels_181090
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLevels_181090
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLevels/1a3fa9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLevels/1a3fa9.wgsl.expected.ir.msl
index 130bc45..add0e08 100644
--- a/test/tint/builtins/gen/literal/textureNumLevels/1a3fa9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLevels/1a3fa9.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLevels_1a3fa9 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLevels_1a3fa9 = func():void {
+  $B2: {
     %4:texture_2d<i32> = load %arg_0
     %5:u32 = textureNumLevels %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLevels_1a3fa9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLevels_1a3fa9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLevels_1a3fa9
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLevels/1a7fc3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLevels/1a7fc3.wgsl.expected.ir.msl
index 206b34d..0e2d138 100644
--- a/test/tint/builtins/gen/literal/textureNumLevels/1a7fc3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLevels/1a7fc3.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_1d<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLevels_1a7fc3 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLevels_1a7fc3 = func():void {
+  $B2: {
     %4:texture_1d<u32> = load %arg_0
     %5:u32 = textureNumLevels %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLevels_1a7fc3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLevels_1a7fc3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLevels_1a7fc3
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLevels/2267d8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLevels/2267d8.wgsl.expected.ir.msl
index c8278c6..b5543c7 100644
--- a/test/tint/builtins/gen/literal/textureNumLevels/2267d8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLevels/2267d8.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLevels_2267d8 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLevels_2267d8 = func():void {
+  $B2: {
     %4:texture_cube<i32> = load %arg_0
     %5:u32 = textureNumLevels %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLevels_2267d8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLevels_2267d8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLevels_2267d8
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLevels/24b2c6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLevels/24b2c6.wgsl.expected.ir.msl
index 49a6b03..df3f5f9 100644
--- a/test/tint/builtins/gen/literal/textureNumLevels/24b2c6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLevels/24b2c6.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLevels_24b2c6 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLevels_24b2c6 = func():void {
+  $B2: {
     %4:texture_2d<f32> = load %arg_0
     %5:u32 = textureNumLevels %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLevels_24b2c6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLevels_24b2c6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLevels_24b2c6
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLevels/2bea6c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLevels/2bea6c.wgsl.expected.ir.msl
index b5cdd15..c2a98e4 100644
--- a/test/tint/builtins/gen/literal/textureNumLevels/2bea6c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLevels/2bea6c.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_cube_array, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLevels_2bea6c = func():void -> %b2 {
-  %b2 = block {
+%textureNumLevels_2bea6c = func():void {
+  $B2: {
     %4:texture_depth_cube_array = load %arg_0
     %5:u32 = textureNumLevels %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLevels_2bea6c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLevels_2bea6c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLevels_2bea6c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLevels/2df1ab.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLevels/2df1ab.wgsl.expected.ir.msl
index 53c278b..9562080 100644
--- a/test/tint/builtins/gen/literal/textureNumLevels/2df1ab.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLevels/2df1ab.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLevels_2df1ab = func():void -> %b2 {
-  %b2 = block {
+%textureNumLevels_2df1ab = func():void {
+  $B2: {
     %4:texture_cube<f32> = load %arg_0
     %5:u32 = textureNumLevels %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLevels_2df1ab
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLevels_2df1ab
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLevels_2df1ab
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLevels/46dbd8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLevels/46dbd8.wgsl.expected.ir.msl
index e793891..7cf81ff 100644
--- a/test/tint/builtins/gen/literal/textureNumLevels/46dbd8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLevels/46dbd8.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLevels_46dbd8 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLevels_46dbd8 = func():void {
+  $B2: {
     %4:texture_2d_array<f32> = load %arg_0
     %5:u32 = textureNumLevels %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLevels_46dbd8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLevels_46dbd8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLevels_46dbd8
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLevels/60d9b8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLevels/60d9b8.wgsl.expected.ir.msl
index 9803878..51be4e4 100644
--- a/test/tint/builtins/gen/literal/textureNumLevels/60d9b8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLevels/60d9b8.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLevels_60d9b8 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLevels_60d9b8 = func():void {
+  $B2: {
     %4:texture_3d<u32> = load %arg_0
     %5:u32 = textureNumLevels %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLevels_60d9b8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLevels_60d9b8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLevels_60d9b8
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLevels/903920.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLevels/903920.wgsl.expected.ir.msl
index 8ce3591..cdb68aa 100644
--- a/test/tint/builtins/gen/literal/textureNumLevels/903920.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLevels/903920.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube_array<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLevels_903920 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLevels_903920 = func():void {
+  $B2: {
     %4:texture_cube_array<i32> = load %arg_0
     %5:u32 = textureNumLevels %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLevels_903920
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLevels_903920
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLevels_903920
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLevels/9a1a65.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLevels/9a1a65.wgsl.expected.ir.msl
index 849c832..56868d8 100644
--- a/test/tint/builtins/gen/literal/textureNumLevels/9a1a65.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLevels/9a1a65.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLevels_9a1a65 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLevels_9a1a65 = func():void {
+  $B2: {
     %4:texture_3d<i32> = load %arg_0
     %5:u32 = textureNumLevels %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLevels_9a1a65
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLevels_9a1a65
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLevels_9a1a65
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLevels/adc783.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLevels/adc783.wgsl.expected.ir.msl
index d86d8b3..358b38a 100644
--- a/test/tint/builtins/gen/literal/textureNumLevels/adc783.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLevels/adc783.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLevels_adc783 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLevels_adc783 = func():void {
+  $B2: {
     %4:texture_2d_array<i32> = load %arg_0
     %5:u32 = textureNumLevels %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLevels_adc783
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLevels_adc783
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLevels_adc783
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLevels/ae911c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLevels/ae911c.wgsl.expected.ir.msl
index 49ed517..352fc7f 100644
--- a/test/tint/builtins/gen/literal/textureNumLevels/ae911c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLevels/ae911c.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLevels_ae911c = func():void -> %b2 {
-  %b2 = block {
+%textureNumLevels_ae911c = func():void {
+  $B2: {
     %4:texture_depth_2d_array = load %arg_0
     %5:u32 = textureNumLevels %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLevels_ae911c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLevels_ae911c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLevels_ae911c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLevels/c386c8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLevels/c386c8.wgsl.expected.ir.msl
index 45c4581..a381977 100644
--- a/test/tint/builtins/gen/literal/textureNumLevels/c386c8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLevels/c386c8.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLevels_c386c8 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLevels_c386c8 = func():void {
+  $B2: {
     %4:texture_cube<u32> = load %arg_0
     %5:u32 = textureNumLevels %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLevels_c386c8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLevels_c386c8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLevels_c386c8
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLevels/c399f9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLevels/c399f9.wgsl.expected.ir.msl
index 627c314..ab8b06c 100644
--- a/test/tint/builtins/gen/literal/textureNumLevels/c399f9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLevels/c399f9.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_1d<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLevels_c399f9 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLevels_c399f9 = func():void {
+  $B2: {
     %4:texture_1d<f32> = load %arg_0
     %5:u32 = textureNumLevels %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLevels_c399f9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLevels_c399f9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLevels_c399f9
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLevels/c8c25c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLevels/c8c25c.wgsl.expected.ir.msl
index 2c5037c..ac6bf19 100644
--- a/test/tint/builtins/gen/literal/textureNumLevels/c8c25c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLevels/c8c25c.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_cube, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLevels_c8c25c = func():void -> %b2 {
-  %b2 = block {
+%textureNumLevels_c8c25c = func():void {
+  $B2: {
     %4:texture_depth_cube = load %arg_0
     %5:u32 = textureNumLevels %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLevels_c8c25c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLevels_c8c25c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLevels_c8c25c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLevels/d63126.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLevels/d63126.wgsl.expected.ir.msl
index 5cb28c7..a3f9b35 100644
--- a/test/tint/builtins/gen/literal/textureNumLevels/d63126.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLevels/d63126.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLevels_d63126 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLevels_d63126 = func():void {
+  $B2: {
     %4:texture_depth_2d = load %arg_0
     %5:u32 = textureNumLevels %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLevels_d63126
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLevels_d63126
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLevels_d63126
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLevels/d8f73b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLevels/d8f73b.wgsl.expected.ir.msl
index 0c5b086..73607e8 100644
--- a/test/tint/builtins/gen/literal/textureNumLevels/d8f73b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLevels/d8f73b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube_array<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLevels_d8f73b = func():void -> %b2 {
-  %b2 = block {
+%textureNumLevels_d8f73b = func():void {
+  $B2: {
     %4:texture_cube_array<f32> = load %arg_0
     %5:u32 = textureNumLevels %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLevels_d8f73b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLevels_d8f73b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLevels_d8f73b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLevels/ef7944.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLevels/ef7944.wgsl.expected.ir.msl
index dacd1be..52292ff 100644
--- a/test/tint/builtins/gen/literal/textureNumLevels/ef7944.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLevels/ef7944.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLevels_ef7944 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLevels_ef7944 = func():void {
+  $B2: {
     %4:texture_3d<f32> = load %arg_0
     %5:u32 = textureNumLevels %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLevels_ef7944
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLevels_ef7944
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLevels_ef7944
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLevels/efd6df.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLevels/efd6df.wgsl.expected.ir.msl
index ed91d52..0d6eac8 100644
--- a/test/tint/builtins/gen/literal/textureNumLevels/efd6df.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLevels/efd6df.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLevels_efd6df = func():void -> %b2 {
-  %b2 = block {
+%textureNumLevels_efd6df = func():void {
+  $B2: {
     %4:texture_2d<u32> = load %arg_0
     %5:u32 = textureNumLevels %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLevels_efd6df
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLevels_efd6df
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLevels_efd6df
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLevels/f742c0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLevels/f742c0.wgsl.expected.ir.msl
index 5a8b34c..d26c684 100644
--- a/test/tint/builtins/gen/literal/textureNumLevels/f742c0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLevels/f742c0.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_1d<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLevels_f742c0 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLevels_f742c0 = func():void {
+  $B2: {
     %4:texture_1d<i32> = load %arg_0
     %5:u32 = textureNumLevels %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLevels_f742c0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLevels_f742c0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLevels_f742c0
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumLevels/fe2171.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLevels/fe2171.wgsl.expected.ir.msl
index 699cb9a..7ee8eef 100644
--- a/test/tint/builtins/gen/literal/textureNumLevels/fe2171.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLevels/fe2171.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube_array<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLevels_fe2171 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLevels_fe2171 = func():void {
+  $B2: {
     %4:texture_cube_array<u32> = load %arg_0
     %5:u32 = textureNumLevels %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLevels_fe2171
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLevels_fe2171
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLevels_fe2171
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumSamples/50f399.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumSamples/50f399.wgsl.expected.ir.msl
index 861bc63..2747d7a 100644
--- a/test/tint/builtins/gen/literal/textureNumSamples/50f399.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumSamples/50f399.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_multisampled_2d<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumSamples_50f399 = func():void -> %b2 {
-  %b2 = block {
+%textureNumSamples_50f399 = func():void {
+  $B2: {
     %4:texture_multisampled_2d<u32> = load %arg_0
     %5:u32 = textureNumSamples %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumSamples_50f399
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumSamples_50f399
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumSamples_50f399
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumSamples/c1a777.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumSamples/c1a777.wgsl.expected.ir.msl
index 5b7e65d..78c82ff 100644
--- a/test/tint/builtins/gen/literal/textureNumSamples/c1a777.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumSamples/c1a777.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_multisampled_2d<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumSamples_c1a777 = func():void -> %b2 {
-  %b2 = block {
+%textureNumSamples_c1a777 = func():void {
+  $B2: {
     %4:texture_multisampled_2d<i32> = load %arg_0
     %5:u32 = textureNumSamples %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumSamples_c1a777
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumSamples_c1a777
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumSamples_c1a777
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumSamples/dbb799.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumSamples/dbb799.wgsl.expected.ir.msl
index d3e0ac4..033d432 100644
--- a/test/tint/builtins/gen/literal/textureNumSamples/dbb799.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumSamples/dbb799.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_multisampled_2d<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumSamples_dbb799 = func():void -> %b2 {
-  %b2 = block {
+%textureNumSamples_dbb799 = func():void {
+  $B2: {
     %4:texture_multisampled_2d<f32> = load %arg_0
     %5:u32 = textureNumSamples %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumSamples_dbb799
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumSamples_dbb799
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumSamples_dbb799
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureNumSamples/ecd321.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumSamples/ecd321.wgsl.expected.ir.msl
index 37385e4..c03f5a1 100644
--- a/test/tint/builtins/gen/literal/textureNumSamples/ecd321.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumSamples/ecd321.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_multisampled_2d, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumSamples_ecd321 = func():void -> %b2 {
-  %b2 = block {
+%textureNumSamples_ecd321 = func():void {
+  $B2: {
     %4:texture_depth_multisampled_2d = load %arg_0
     %5:u32 = textureNumSamples %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumSamples_ecd321
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumSamples_ecd321
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumSamples_ecd321
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSample/0dff6c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSample/0dff6c.wgsl.expected.ir.msl
index 9bed604..55819ad 100644
--- a/test/tint/builtins/gen/literal/textureSample/0dff6c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSample/0dff6c.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSample_0dff6c = func():void -> %b2 {
-  %b2 = block {
+%textureSample_0dff6c = func():void {
+  $B2: {
     %5:texture_depth_2d = load %arg_0
     %6:sampler = load %arg_1
     %7:f32 = textureSample %5, %6, vec2<f32>(1.0f), vec2<i32>(1i)
@@ -17,8 +17,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %11:void = call %textureSample_0dff6c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSample/17e988.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSample/17e988.wgsl.expected.ir.msl
index d0e6abd..1da17ad 100644
--- a/test/tint/builtins/gen/literal/textureSample/17e988.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSample/17e988.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSample_17e988 = func():void -> %b2 {
-  %b2 = block {
+%textureSample_17e988 = func():void {
+  $B2: {
     %5:texture_2d_array<f32> = load %arg_0
     %6:sampler = load %arg_1
     %7:vec4<f32> = textureSample %5, %6, vec2<f32>(1.0f), 1i, vec2<i32>(1i)
@@ -17,8 +17,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %11:void = call %textureSample_17e988
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSample/193203.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSample/193203.wgsl.expected.ir.msl
index 86c7ec9..ae6b1e6 100644
--- a/test/tint/builtins/gen/literal/textureSample/193203.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSample/193203.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSample_193203 = func():void -> %b2 {
-  %b2 = block {
+%textureSample_193203 = func():void {
+  $B2: {
     %5:texture_2d_array<f32> = load %arg_0
     %6:sampler = load %arg_1
     %7:vec4<f32> = textureSample %5, %6, vec2<f32>(1.0f), 1u, vec2<i32>(1i)
@@ -17,8 +17,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %11:void = call %textureSample_193203
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSample/1a4e1b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSample/1a4e1b.wgsl.expected.ir.msl
index d3df5f1..a0e7fe3 100644
--- a/test/tint/builtins/gen/literal/textureSample/1a4e1b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSample/1a4e1b.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSample_1a4e1b = func():void -> %b2 {
-  %b2 = block {
+%textureSample_1a4e1b = func():void {
+  $B2: {
     %5:texture_depth_2d_array = load %arg_0
     %6:sampler = load %arg_1
     %7:f32 = textureSample %5, %6, vec2<f32>(1.0f), 1u
@@ -17,8 +17,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %11:void = call %textureSample_1a4e1b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSample/2149ec.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSample/2149ec.wgsl.expected.ir.msl
index 4d39cdd..8b191d3 100644
--- a/test/tint/builtins/gen/literal/textureSample/2149ec.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSample/2149ec.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSample_2149ec = func():void -> %b2 {
-  %b2 = block {
+%textureSample_2149ec = func():void {
+  $B2: {
     %5:texture_3d<f32> = load %arg_0
     %6:sampler = load %arg_1
     %7:vec4<f32> = textureSample %5, %6, vec3<f32>(1.0f), vec3<i32>(1i)
@@ -17,8 +17,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %11:void = call %textureSample_2149ec
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSample/38bbb9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSample/38bbb9.wgsl.expected.ir.msl
index eed3b0c..a4a4204 100644
--- a/test/tint/builtins/gen/literal/textureSample/38bbb9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSample/38bbb9.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSample_38bbb9 = func():void -> %b2 {
-  %b2 = block {
+%textureSample_38bbb9 = func():void {
+  $B2: {
     %5:texture_depth_2d = load %arg_0
     %6:sampler = load %arg_1
     %7:f32 = textureSample %5, %6, vec2<f32>(1.0f)
@@ -17,8 +17,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %11:void = call %textureSample_38bbb9
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSample/3b50bd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSample/3b50bd.wgsl.expected.ir.msl
index d126d83..3f682f9 100644
--- a/test/tint/builtins/gen/literal/textureSample/3b50bd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSample/3b50bd.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSample_3b50bd = func():void -> %b2 {
-  %b2 = block {
+%textureSample_3b50bd = func():void {
+  $B2: {
     %5:texture_3d<f32> = load %arg_0
     %6:sampler = load %arg_1
     %7:vec4<f32> = textureSample %5, %6, vec3<f32>(1.0f)
@@ -17,8 +17,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %11:void = call %textureSample_3b50bd
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSample/4703d0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSample/4703d0.wgsl.expected.ir.msl
index 74f1742..979bf90 100644
--- a/test/tint/builtins/gen/literal/textureSample/4703d0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSample/4703d0.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSample_4703d0 = func():void -> %b2 {
-  %b2 = block {
+%textureSample_4703d0 = func():void {
+  $B2: {
     %5:texture_depth_2d_array = load %arg_0
     %6:sampler = load %arg_1
     %7:f32 = textureSample %5, %6, vec2<f32>(1.0f), 1u, vec2<i32>(1i)
@@ -17,8 +17,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %11:void = call %textureSample_4703d0
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSample/4dd1bf.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSample/4dd1bf.wgsl.expected.ir.msl
index 94709bb..9ebb5c2 100644
--- a/test/tint/builtins/gen/literal/textureSample/4dd1bf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSample/4dd1bf.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube_array<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSample_4dd1bf = func():void -> %b2 {
-  %b2 = block {
+%textureSample_4dd1bf = func():void {
+  $B2: {
     %5:texture_cube_array<f32> = load %arg_0
     %6:sampler = load %arg_1
     %7:vec4<f32> = textureSample %5, %6, vec3<f32>(1.0f), 1i
@@ -17,8 +17,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %11:void = call %textureSample_4dd1bf
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSample/51b514.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSample/51b514.wgsl.expected.ir.msl
index e08c6cb..e019e2b 100644
--- a/test/tint/builtins/gen/literal/textureSample/51b514.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSample/51b514.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSample_51b514 = func():void -> %b2 {
-  %b2 = block {
+%textureSample_51b514 = func():void {
+  $B2: {
     %5:texture_2d<f32> = load %arg_0
     %6:sampler = load %arg_1
     %7:vec4<f32> = textureSample %5, %6, vec2<f32>(1.0f)
@@ -17,8 +17,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %11:void = call %textureSample_51b514
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSample/60bf45.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSample/60bf45.wgsl.expected.ir.msl
index 8f3e779..03697ed 100644
--- a/test/tint/builtins/gen/literal/textureSample/60bf45.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSample/60bf45.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSample_60bf45 = func():void -> %b2 {
-  %b2 = block {
+%textureSample_60bf45 = func():void {
+  $B2: {
     %5:texture_depth_2d_array = load %arg_0
     %6:sampler = load %arg_1
     %7:f32 = textureSample %5, %6, vec2<f32>(1.0f), 1i, vec2<i32>(1i)
@@ -17,8 +17,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %11:void = call %textureSample_60bf45
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSample/6717ca.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSample/6717ca.wgsl.expected.ir.msl
index 906ce62..c5d638e 100644
--- a/test/tint/builtins/gen/literal/textureSample/6717ca.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSample/6717ca.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSample_6717ca = func():void -> %b2 {
-  %b2 = block {
+%textureSample_6717ca = func():void {
+  $B2: {
     %5:texture_2d_array<f32> = load %arg_0
     %6:sampler = load %arg_1
     %7:vec4<f32> = textureSample %5, %6, vec2<f32>(1.0f), 1i
@@ -17,8 +17,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %11:void = call %textureSample_6717ca
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSample/6e64fb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSample/6e64fb.wgsl.expected.ir.msl
index 07c6455..a3c0665 100644
--- a/test/tint/builtins/gen/literal/textureSample/6e64fb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSample/6e64fb.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_1d<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSample_6e64fb = func():void -> %b2 {
-  %b2 = block {
+%textureSample_6e64fb = func():void {
+  $B2: {
     %5:texture_1d<f32> = load %arg_0
     %6:sampler = load %arg_1
     %7:vec4<f32> = textureSample %5, %6, 1.0f
@@ -17,8 +17,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %11:void = call %textureSample_6e64fb
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSample/7e9ffd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSample/7e9ffd.wgsl.expected.ir.msl
index d68dec6..203f61c 100644
--- a/test/tint/builtins/gen/literal/textureSample/7e9ffd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSample/7e9ffd.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSample_7e9ffd = func():void -> %b2 {
-  %b2 = block {
+%textureSample_7e9ffd = func():void {
+  $B2: {
     %5:texture_depth_2d_array = load %arg_0
     %6:sampler = load %arg_1
     %7:f32 = textureSample %5, %6, vec2<f32>(1.0f), 1i
@@ -17,8 +17,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %11:void = call %textureSample_7e9ffd
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSample/7fd8cb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSample/7fd8cb.wgsl.expected.ir.msl
index 5b57034..f6d8f84 100644
--- a/test/tint/builtins/gen/literal/textureSample/7fd8cb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSample/7fd8cb.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_cube_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSample_7fd8cb = func():void -> %b2 {
-  %b2 = block {
+%textureSample_7fd8cb = func():void {
+  $B2: {
     %5:texture_depth_cube_array = load %arg_0
     %6:sampler = load %arg_1
     %7:f32 = textureSample %5, %6, vec3<f32>(1.0f), 1u
@@ -17,8 +17,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %11:void = call %textureSample_7fd8cb
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSample/85c4ba.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSample/85c4ba.wgsl.expected.ir.msl
index 9455e36..df38079 100644
--- a/test/tint/builtins/gen/literal/textureSample/85c4ba.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSample/85c4ba.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSample_85c4ba = func():void -> %b2 {
-  %b2 = block {
+%textureSample_85c4ba = func():void {
+  $B2: {
     %5:texture_2d<f32> = load %arg_0
     %6:sampler = load %arg_1
     %7:vec4<f32> = textureSample %5, %6, vec2<f32>(1.0f), vec2<i32>(1i)
@@ -17,8 +17,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %11:void = call %textureSample_85c4ba
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSample/bc7477.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSample/bc7477.wgsl.expected.ir.msl
index 3b9d158..63be6d6 100644
--- a/test/tint/builtins/gen/literal/textureSample/bc7477.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSample/bc7477.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube_array<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSample_bc7477 = func():void -> %b2 {
-  %b2 = block {
+%textureSample_bc7477 = func():void {
+  $B2: {
     %5:texture_cube_array<f32> = load %arg_0
     %6:sampler = load %arg_1
     %7:vec4<f32> = textureSample %5, %6, vec3<f32>(1.0f), 1u
@@ -17,8 +17,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %11:void = call %textureSample_bc7477
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSample/c2f4e8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSample/c2f4e8.wgsl.expected.ir.msl
index 12eb8be..cc9e0ac 100644
--- a/test/tint/builtins/gen/literal/textureSample/c2f4e8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSample/c2f4e8.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_cube_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSample_c2f4e8 = func():void -> %b2 {
-  %b2 = block {
+%textureSample_c2f4e8 = func():void {
+  $B2: {
     %5:texture_depth_cube_array = load %arg_0
     %6:sampler = load %arg_1
     %7:f32 = textureSample %5, %6, vec3<f32>(1.0f), 1i
@@ -17,8 +17,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %11:void = call %textureSample_c2f4e8
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSample/d6b281.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSample/d6b281.wgsl.expected.ir.msl
index 7f33603..d663331 100644
--- a/test/tint/builtins/gen/literal/textureSample/d6b281.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSample/d6b281.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSample_d6b281 = func():void -> %b2 {
-  %b2 = block {
+%textureSample_d6b281 = func():void {
+  $B2: {
     %5:texture_2d_array<f32> = load %arg_0
     %6:sampler = load %arg_1
     %7:vec4<f32> = textureSample %5, %6, vec2<f32>(1.0f), 1u
@@ -17,8 +17,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %11:void = call %textureSample_d6b281
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSample/e53267.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSample/e53267.wgsl.expected.ir.msl
index cdcd1fb..3babe54 100644
--- a/test/tint/builtins/gen/literal/textureSample/e53267.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSample/e53267.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSample_e53267 = func():void -> %b2 {
-  %b2 = block {
+%textureSample_e53267 = func():void {
+  $B2: {
     %5:texture_cube<f32> = load %arg_0
     %6:sampler = load %arg_1
     %7:vec4<f32> = textureSample %5, %6, vec3<f32>(1.0f)
@@ -17,8 +17,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %11:void = call %textureSample_e53267
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSample/ea7030.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSample/ea7030.wgsl.expected.ir.msl
index e0bf650..62669b6 100644
--- a/test/tint/builtins/gen/literal/textureSample/ea7030.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSample/ea7030.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_cube, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSample_ea7030 = func():void -> %b2 {
-  %b2 = block {
+%textureSample_ea7030 = func():void {
+  $B2: {
     %5:texture_depth_cube = load %arg_0
     %6:sampler = load %arg_1
     %7:f32 = textureSample %5, %6, vec3<f32>(1.0f)
@@ -17,8 +17,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %11:void = call %textureSample_ea7030
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleBaseClampToEdge/7c04e6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleBaseClampToEdge/7c04e6.wgsl.expected.ir.msl
index 34b8561..7139838 100644
--- a/test/tint/builtins/gen/literal/textureSampleBaseClampToEdge/7c04e6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleBaseClampToEdge/7c04e6.wgsl.expected.ir.msl
@@ -1,45 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1057 internal compiler error: %b1 = block {  # root
-  %arg_0:ptr<handle, texture_external, read> = var @binding_point(1, 0)
-  %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
-  %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
+
+@group(1) @binding(0) var arg_0 : texture_external;
+
+@group(1) @binding(1) var arg_1 : sampler;
+
+fn textureSampleBaseClampToEdge_7c04e6() {
+  var res : vec4<f32> = textureSampleBaseClampToEdge(arg_0, arg_1, vec2<f32>(1.0f));
+  prevent_dce = res;
 }
 
-%textureSampleBaseClampToEdge_7c04e6 = func():void -> %b2 {
-  %b2 = block {
-    %5:texture_external = load %arg_0
-    %6:sampler = load %arg_1
-    %7:vec4<f32> = textureSampleBaseClampToEdge %5, %6, vec2<f32>(1.0f)
-    %res:ptr<function, vec4<f32>, read_write> = var, %7
-    %9:vec4<f32> = load %res
-    store %prevent_dce, %9
-    ret
-  }
-}
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %11:void = call %textureSampleBaseClampToEdge_7c04e6
-    ret vec4<f32>(0.0f)
-  }
-}
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %13:void = call %textureSampleBaseClampToEdge_7c04e6
-    ret
-  }
-}
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %15:void = call %textureSampleBaseClampToEdge_7c04e6
-    ret
-  }
+@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+@vertex
+fn vertex_main() -> @builtin(position) vec4<f32> {
+  textureSampleBaseClampToEdge_7c04e6();
+  return vec4<f32>();
 }
 
-Multiplanar external texture transform was not run.
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+@fragment
+fn fragment_main() {
+  textureSampleBaseClampToEdge_7c04e6();
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+  textureSampleBaseClampToEdge_7c04e6();
+}
+
+Failed to generate: error: ExternalTextureOptions missing binding entry for [group: 1, binding: 0]
diff --git a/test/tint/builtins/gen/literal/textureSampleBaseClampToEdge/9ca02c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleBaseClampToEdge/9ca02c.wgsl.expected.ir.msl
index 7e5f997..e63ac89 100644
--- a/test/tint/builtins/gen/literal/textureSampleBaseClampToEdge/9ca02c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleBaseClampToEdge/9ca02c.wgsl.expected.ir.msl
@@ -1,37 +1,45 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleBaseClampToEdge_9ca02c = func():void -> %b2 {
-  %b2 = block {
+%textureSampleBaseClampToEdge_9ca02c = func():void {
+  $B2: {
     %5:texture_2d<f32> = load %arg_0
-    %6:sampler = load %arg_1
-    %7:vec4<f32> = textureSampleBaseClampToEdge %5, %6, vec2<f32>(1.0f)
-    %res:ptr<function, vec4<f32>, read_write> = var, %7
-    %9:vec4<f32> = load %res
-    store %prevent_dce, %9
+    %6:texture_2d<f32> = let %5
+    %7:sampler = load %arg_1
+    %8:sampler = let %7
+    %9:vec2<u32> = textureDimensions %6
+    %10:vec2<f32> = convert %9
+    %11:vec2<f32> = div vec2<f32>(0.5f), %10
+    %12:vec2<f32> = let %11
+    %13:vec2<f32> = sub vec2<f32>(1.0f), %12
+    %14:vec2<f32> = clamp vec2<f32>(1.0f), %12, %13
+    %15:vec4<f32> = textureSampleLevel %6, %8, %14, 0.0f
+    %res:ptr<function, vec4<f32>, read_write> = var, %15
+    %17:vec4<f32> = load %res
+    store %prevent_dce, %17
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %11:void = call %textureSampleBaseClampToEdge_9ca02c
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %19:void = call %textureSampleBaseClampToEdge_9ca02c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %13:void = call %textureSampleBaseClampToEdge_9ca02c
+%fragment_main = @fragment func():void {
+  $B4: {
+    %21:void = call %textureSampleBaseClampToEdge_9ca02c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %15:void = call %textureSampleBaseClampToEdge_9ca02c
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %23:void = call %textureSampleBaseClampToEdge_9ca02c
     ret
   }
 }
diff --git a/test/tint/builtins/gen/literal/textureSampleBias/1c707e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleBias/1c707e.wgsl.expected.ir.msl
index d7028d4..53a45bc 100644
--- a/test/tint/builtins/gen/literal/textureSampleBias/1c707e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleBias/1c707e.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleBias_1c707e = func():void -> %b2 {
-  %b2 = block {
+%textureSampleBias_1c707e = func():void {
+  $B2: {
     %5:texture_2d_array<f32> = load %arg_0
     %6:sampler = load %arg_1
     %7:vec4<f32> = textureSampleBias %5, %6, vec2<f32>(1.0f), 1u, 1.0f
@@ -17,8 +17,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %11:void = call %textureSampleBias_1c707e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleBias/53b9f7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleBias/53b9f7.wgsl.expected.ir.msl
index 5c9983b..685c790 100644
--- a/test/tint/builtins/gen/literal/textureSampleBias/53b9f7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleBias/53b9f7.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleBias_53b9f7 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleBias_53b9f7 = func():void {
+  $B2: {
     %5:texture_cube<f32> = load %arg_0
     %6:sampler = load %arg_1
     %7:vec4<f32> = textureSampleBias %5, %6, vec3<f32>(1.0f), 1.0f
@@ -17,8 +17,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %11:void = call %textureSampleBias_53b9f7
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleBias/594824.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleBias/594824.wgsl.expected.ir.msl
index 3069aa8..41233e3 100644
--- a/test/tint/builtins/gen/literal/textureSampleBias/594824.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleBias/594824.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleBias_594824 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleBias_594824 = func():void {
+  $B2: {
     %5:texture_3d<f32> = load %arg_0
     %6:sampler = load %arg_1
     %7:vec4<f32> = textureSampleBias %5, %6, vec3<f32>(1.0f), 1.0f, vec3<i32>(1i)
@@ -17,8 +17,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %11:void = call %textureSampleBias_594824
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleBias/6a9113.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleBias/6a9113.wgsl.expected.ir.msl
index efd1138..567b678 100644
--- a/test/tint/builtins/gen/literal/textureSampleBias/6a9113.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleBias/6a9113.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleBias_6a9113 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleBias_6a9113 = func():void {
+  $B2: {
     %5:texture_2d<f32> = load %arg_0
     %6:sampler = load %arg_1
     %7:vec4<f32> = textureSampleBias %5, %6, vec2<f32>(1.0f), 1.0f
@@ -17,8 +17,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %11:void = call %textureSampleBias_6a9113
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleBias/80e579.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleBias/80e579.wgsl.expected.ir.msl
index f0614c5..c6e57f3 100644
--- a/test/tint/builtins/gen/literal/textureSampleBias/80e579.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleBias/80e579.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleBias_80e579 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleBias_80e579 = func():void {
+  $B2: {
     %5:texture_2d_array<f32> = load %arg_0
     %6:sampler = load %arg_1
     %7:vec4<f32> = textureSampleBias %5, %6, vec2<f32>(1.0f), 1i, 1.0f
@@ -17,8 +17,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %11:void = call %textureSampleBias_80e579
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleBias/87915c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleBias/87915c.wgsl.expected.ir.msl
index 4fb3e10..c1c72c8 100644
--- a/test/tint/builtins/gen/literal/textureSampleBias/87915c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleBias/87915c.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleBias_87915c = func():void -> %b2 {
-  %b2 = block {
+%textureSampleBias_87915c = func():void {
+  $B2: {
     %5:texture_2d_array<f32> = load %arg_0
     %6:sampler = load %arg_1
     %7:vec4<f32> = textureSampleBias %5, %6, vec2<f32>(1.0f), 1u, 1.0f, vec2<i32>(1i)
@@ -17,8 +17,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %11:void = call %textureSampleBias_87915c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleBias/9dbb51.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleBias/9dbb51.wgsl.expected.ir.msl
index 58da570..a48a502 100644
--- a/test/tint/builtins/gen/literal/textureSampleBias/9dbb51.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleBias/9dbb51.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleBias_9dbb51 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleBias_9dbb51 = func():void {
+  $B2: {
     %5:texture_2d_array<f32> = load %arg_0
     %6:sampler = load %arg_1
     %7:vec4<f32> = textureSampleBias %5, %6, vec2<f32>(1.0f), 1i, 1.0f, vec2<i32>(1i)
@@ -17,8 +17,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %11:void = call %textureSampleBias_9dbb51
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleBias/a161cf.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleBias/a161cf.wgsl.expected.ir.msl
index 8e68aff..ce7e988 100644
--- a/test/tint/builtins/gen/literal/textureSampleBias/a161cf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleBias/a161cf.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleBias_a161cf = func():void -> %b2 {
-  %b2 = block {
+%textureSampleBias_a161cf = func():void {
+  $B2: {
     %5:texture_2d<f32> = load %arg_0
     %6:sampler = load %arg_1
     %7:vec4<f32> = textureSampleBias %5, %6, vec2<f32>(1.0f), 1.0f, vec2<i32>(1i)
@@ -17,8 +17,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %11:void = call %textureSampleBias_a161cf
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleBias/c6953d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleBias/c6953d.wgsl.expected.ir.msl
index 616acee..9a0ba94 100644
--- a/test/tint/builtins/gen/literal/textureSampleBias/c6953d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleBias/c6953d.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube_array<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleBias_c6953d = func():void -> %b2 {
-  %b2 = block {
+%textureSampleBias_c6953d = func():void {
+  $B2: {
     %5:texture_cube_array<f32> = load %arg_0
     %6:sampler = load %arg_1
     %7:vec4<f32> = textureSampleBias %5, %6, vec3<f32>(1.0f), 1u, 1.0f
@@ -17,8 +17,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %11:void = call %textureSampleBias_c6953d
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleBias/d3fa1b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleBias/d3fa1b.wgsl.expected.ir.msl
index d3847a6..d59ec6c 100644
--- a/test/tint/builtins/gen/literal/textureSampleBias/d3fa1b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleBias/d3fa1b.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleBias_d3fa1b = func():void -> %b2 {
-  %b2 = block {
+%textureSampleBias_d3fa1b = func():void {
+  $B2: {
     %5:texture_3d<f32> = load %arg_0
     %6:sampler = load %arg_1
     %7:vec4<f32> = textureSampleBias %5, %6, vec3<f32>(1.0f), 1.0f
@@ -17,8 +17,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %11:void = call %textureSampleBias_d3fa1b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleBias/eed7c4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleBias/eed7c4.wgsl.expected.ir.msl
index 10bfbaa..fc8e2f6 100644
--- a/test/tint/builtins/gen/literal/textureSampleBias/eed7c4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleBias/eed7c4.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube_array<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleBias_eed7c4 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleBias_eed7c4 = func():void {
+  $B2: {
     %5:texture_cube_array<f32> = load %arg_0
     %6:sampler = load %arg_1
     %7:vec4<f32> = textureSampleBias %5, %6, vec3<f32>(1.0f), 1i, 1.0f
@@ -17,8 +17,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %11:void = call %textureSampleBias_eed7c4
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleCompare/1912e5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleCompare/1912e5.wgsl.expected.ir.msl
index e26070c..44f772a 100644
--- a/test/tint/builtins/gen/literal/textureSampleCompare/1912e5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleCompare/1912e5.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_cube_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler_comparison, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleCompare_1912e5 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleCompare_1912e5 = func():void {
+  $B2: {
     %5:texture_depth_cube_array = load %arg_0
     %6:sampler_comparison = load %arg_1
     %7:f32 = textureSampleCompare %5, %6, vec3<f32>(1.0f), 1u, 1.0f
@@ -17,8 +17,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %11:void = call %textureSampleCompare_1912e5
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleCompare/3a5923.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleCompare/3a5923.wgsl.expected.ir.msl
index a416397..de3c917 100644
--- a/test/tint/builtins/gen/literal/textureSampleCompare/3a5923.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleCompare/3a5923.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler_comparison, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleCompare_3a5923 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleCompare_3a5923 = func():void {
+  $B2: {
     %5:texture_depth_2d = load %arg_0
     %6:sampler_comparison = load %arg_1
     %7:f32 = textureSampleCompare %5, %6, vec2<f32>(1.0f), 1.0f
@@ -17,8 +17,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %11:void = call %textureSampleCompare_3a5923
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleCompare/63fb83.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleCompare/63fb83.wgsl.expected.ir.msl
index 19cc5f8..fe74bcd 100644
--- a/test/tint/builtins/gen/literal/textureSampleCompare/63fb83.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleCompare/63fb83.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_cube, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler_comparison, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleCompare_63fb83 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleCompare_63fb83 = func():void {
+  $B2: {
     %5:texture_depth_cube = load %arg_0
     %6:sampler_comparison = load %arg_1
     %7:f32 = textureSampleCompare %5, %6, vec3<f32>(1.0f), 1.0f
@@ -17,8 +17,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %11:void = call %textureSampleCompare_63fb83
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleCompare/7b5025.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleCompare/7b5025.wgsl.expected.ir.msl
index 12d221e..2028910 100644
--- a/test/tint/builtins/gen/literal/textureSampleCompare/7b5025.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleCompare/7b5025.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler_comparison, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleCompare_7b5025 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleCompare_7b5025 = func():void {
+  $B2: {
     %5:texture_depth_2d_array = load %arg_0
     %6:sampler_comparison = load %arg_1
     %7:f32 = textureSampleCompare %5, %6, vec2<f32>(1.0f), 1u, 1.0f, vec2<i32>(1i)
@@ -17,8 +17,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %11:void = call %textureSampleCompare_7b5025
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleCompare/90ae56.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleCompare/90ae56.wgsl.expected.ir.msl
index 746c862..5f5bc65 100644
--- a/test/tint/builtins/gen/literal/textureSampleCompare/90ae56.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleCompare/90ae56.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler_comparison, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleCompare_90ae56 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleCompare_90ae56 = func():void {
+  $B2: {
     %5:texture_depth_2d_array = load %arg_0
     %6:sampler_comparison = load %arg_1
     %7:f32 = textureSampleCompare %5, %6, vec2<f32>(1.0f), 1u, 1.0f
@@ -17,8 +17,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %11:void = call %textureSampleCompare_90ae56
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleCompare/a3ca7e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleCompare/a3ca7e.wgsl.expected.ir.msl
index 8b710b7..841edcc 100644
--- a/test/tint/builtins/gen/literal/textureSampleCompare/a3ca7e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleCompare/a3ca7e.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_cube_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler_comparison, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleCompare_a3ca7e = func():void -> %b2 {
-  %b2 = block {
+%textureSampleCompare_a3ca7e = func():void {
+  $B2: {
     %5:texture_depth_cube_array = load %arg_0
     %6:sampler_comparison = load %arg_1
     %7:f32 = textureSampleCompare %5, %6, vec3<f32>(1.0f), 1i, 1.0f
@@ -17,8 +17,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %11:void = call %textureSampleCompare_a3ca7e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleCompare/af1051.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleCompare/af1051.wgsl.expected.ir.msl
index 513895d4..8407c89 100644
--- a/test/tint/builtins/gen/literal/textureSampleCompare/af1051.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleCompare/af1051.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler_comparison, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleCompare_af1051 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleCompare_af1051 = func():void {
+  $B2: {
     %5:texture_depth_2d_array = load %arg_0
     %6:sampler_comparison = load %arg_1
     %7:f32 = textureSampleCompare %5, %6, vec2<f32>(1.0f), 1i, 1.0f, vec2<i32>(1i)
@@ -17,8 +17,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %11:void = call %textureSampleCompare_af1051
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleCompare/dd431d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleCompare/dd431d.wgsl.expected.ir.msl
index 564f0da..dd01922 100644
--- a/test/tint/builtins/gen/literal/textureSampleCompare/dd431d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleCompare/dd431d.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler_comparison, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleCompare_dd431d = func():void -> %b2 {
-  %b2 = block {
+%textureSampleCompare_dd431d = func():void {
+  $B2: {
     %5:texture_depth_2d_array = load %arg_0
     %6:sampler_comparison = load %arg_1
     %7:f32 = textureSampleCompare %5, %6, vec2<f32>(1.0f), 1i, 1.0f
@@ -17,8 +17,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %11:void = call %textureSampleCompare_dd431d
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleCompare/dec064.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleCompare/dec064.wgsl.expected.ir.msl
index 414f059..5c98ac6 100644
--- a/test/tint/builtins/gen/literal/textureSampleCompare/dec064.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleCompare/dec064.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler_comparison, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleCompare_dec064 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleCompare_dec064 = func():void {
+  $B2: {
     %5:texture_depth_2d = load %arg_0
     %6:sampler_comparison = load %arg_1
     %7:f32 = textureSampleCompare %5, %6, vec2<f32>(1.0f), 1.0f, vec2<i32>(1i)
@@ -17,8 +17,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %11:void = call %textureSampleCompare_dec064
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleCompareLevel/1116ed.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleCompareLevel/1116ed.wgsl.expected.ir.msl
index daa9d29..32ad9bc 100644
--- a/test/tint/builtins/gen/literal/textureSampleCompareLevel/1116ed.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleCompareLevel/1116ed.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler_comparison, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleCompareLevel_1116ed = func():void -> %b2 {
-  %b2 = block {
+%textureSampleCompareLevel_1116ed = func():void {
+  $B2: {
     %5:texture_depth_2d_array = load %arg_0
     %6:sampler_comparison = load %arg_1
     %7:f32 = textureSampleCompareLevel %5, %6, vec2<f32>(1.0f), 1i, 1.0f
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureSampleCompareLevel_1116ed
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureSampleCompareLevel_1116ed
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureSampleCompareLevel_1116ed
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleCompareLevel/1568e3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleCompareLevel/1568e3.wgsl.expected.ir.msl
index 2f09d0c..d1b7778 100644
--- a/test/tint/builtins/gen/literal/textureSampleCompareLevel/1568e3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleCompareLevel/1568e3.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_cube, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler_comparison, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleCompareLevel_1568e3 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleCompareLevel_1568e3 = func():void {
+  $B2: {
     %5:texture_depth_cube = load %arg_0
     %6:sampler_comparison = load %arg_1
     %7:f32 = textureSampleCompareLevel %5, %6, vec3<f32>(1.0f), 1.0f
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureSampleCompareLevel_1568e3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureSampleCompareLevel_1568e3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureSampleCompareLevel_1568e3
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleCompareLevel/2ad2b1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleCompareLevel/2ad2b1.wgsl.expected.ir.msl
index b82dff9..db9bb2c 100644
--- a/test/tint/builtins/gen/literal/textureSampleCompareLevel/2ad2b1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleCompareLevel/2ad2b1.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler_comparison, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleCompareLevel_2ad2b1 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleCompareLevel_2ad2b1 = func():void {
+  $B2: {
     %5:texture_depth_2d = load %arg_0
     %6:sampler_comparison = load %arg_1
     %7:f32 = textureSampleCompareLevel %5, %6, vec2<f32>(1.0f), 1.0f
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureSampleCompareLevel_2ad2b1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureSampleCompareLevel_2ad2b1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureSampleCompareLevel_2ad2b1
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleCompareLevel/4cf3a2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleCompareLevel/4cf3a2.wgsl.expected.ir.msl
index 4235a87..d5c0d62 100644
--- a/test/tint/builtins/gen/literal/textureSampleCompareLevel/4cf3a2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleCompareLevel/4cf3a2.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_cube_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler_comparison, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleCompareLevel_4cf3a2 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleCompareLevel_4cf3a2 = func():void {
+  $B2: {
     %5:texture_depth_cube_array = load %arg_0
     %6:sampler_comparison = load %arg_1
     %7:f32 = textureSampleCompareLevel %5, %6, vec3<f32>(1.0f), 1i, 1.0f
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureSampleCompareLevel_4cf3a2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureSampleCompareLevel_4cf3a2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureSampleCompareLevel_4cf3a2
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleCompareLevel/7dc3c0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleCompareLevel/7dc3c0.wgsl.expected.ir.msl
index 17df9a9..4d0b81a 100644
--- a/test/tint/builtins/gen/literal/textureSampleCompareLevel/7dc3c0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleCompareLevel/7dc3c0.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler_comparison, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleCompareLevel_7dc3c0 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleCompareLevel_7dc3c0 = func():void {
+  $B2: {
     %5:texture_depth_2d_array = load %arg_0
     %6:sampler_comparison = load %arg_1
     %7:f32 = textureSampleCompareLevel %5, %6, vec2<f32>(1.0f), 1u, 1.0f
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureSampleCompareLevel_7dc3c0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureSampleCompareLevel_7dc3c0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureSampleCompareLevel_7dc3c0
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleCompareLevel/7f2b9a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleCompareLevel/7f2b9a.wgsl.expected.ir.msl
index 70bff04..2b5e824 100644
--- a/test/tint/builtins/gen/literal/textureSampleCompareLevel/7f2b9a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleCompareLevel/7f2b9a.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler_comparison, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleCompareLevel_7f2b9a = func():void -> %b2 {
-  %b2 = block {
+%textureSampleCompareLevel_7f2b9a = func():void {
+  $B2: {
     %5:texture_depth_2d = load %arg_0
     %6:sampler_comparison = load %arg_1
     %7:f32 = textureSampleCompareLevel %5, %6, vec2<f32>(1.0f), 1.0f, vec2<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureSampleCompareLevel_7f2b9a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureSampleCompareLevel_7f2b9a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureSampleCompareLevel_7f2b9a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleCompareLevel/958c87.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleCompareLevel/958c87.wgsl.expected.ir.msl
index ea12e0a..bfa24b4 100644
--- a/test/tint/builtins/gen/literal/textureSampleCompareLevel/958c87.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleCompareLevel/958c87.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_cube_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler_comparison, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleCompareLevel_958c87 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleCompareLevel_958c87 = func():void {
+  $B2: {
     %5:texture_depth_cube_array = load %arg_0
     %6:sampler_comparison = load %arg_1
     %7:f32 = textureSampleCompareLevel %5, %6, vec3<f32>(1.0f), 1u, 1.0f
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureSampleCompareLevel_958c87
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureSampleCompareLevel_958c87
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureSampleCompareLevel_958c87
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleCompareLevel/b6e47c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleCompareLevel/b6e47c.wgsl.expected.ir.msl
index 482e062..56b75ff 100644
--- a/test/tint/builtins/gen/literal/textureSampleCompareLevel/b6e47c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleCompareLevel/b6e47c.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler_comparison, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleCompareLevel_b6e47c = func():void -> %b2 {
-  %b2 = block {
+%textureSampleCompareLevel_b6e47c = func():void {
+  $B2: {
     %5:texture_depth_2d_array = load %arg_0
     %6:sampler_comparison = load %arg_1
     %7:f32 = textureSampleCompareLevel %5, %6, vec2<f32>(1.0f), 1i, 1.0f, vec2<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureSampleCompareLevel_b6e47c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureSampleCompareLevel_b6e47c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureSampleCompareLevel_b6e47c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleCompareLevel/bcb3dd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleCompareLevel/bcb3dd.wgsl.expected.ir.msl
index 537982b..1d421ef 100644
--- a/test/tint/builtins/gen/literal/textureSampleCompareLevel/bcb3dd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleCompareLevel/bcb3dd.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler_comparison, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleCompareLevel_bcb3dd = func():void -> %b2 {
-  %b2 = block {
+%textureSampleCompareLevel_bcb3dd = func():void {
+  $B2: {
     %5:texture_depth_2d_array = load %arg_0
     %6:sampler_comparison = load %arg_1
     %7:f32 = textureSampleCompareLevel %5, %6, vec2<f32>(1.0f), 1u, 1.0f, vec2<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureSampleCompareLevel_bcb3dd
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureSampleCompareLevel_bcb3dd
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureSampleCompareLevel_bcb3dd
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleGrad/21402b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleGrad/21402b.wgsl.expected.ir.msl
index fb98059..7e92af2 100644
--- a/test/tint/builtins/gen/literal/textureSampleGrad/21402b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleGrad/21402b.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleGrad_21402b = func():void -> %b2 {
-  %b2 = block {
+%textureSampleGrad_21402b = func():void {
+  $B2: {
     %5:texture_3d<f32> = load %arg_0
     %6:sampler = load %arg_1
     %7:vec4<f32> = textureSampleGrad %5, %6, vec3<f32>(1.0f), vec3<f32>(1.0f), vec3<f32>(1.0f)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureSampleGrad_21402b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureSampleGrad_21402b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureSampleGrad_21402b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleGrad/2ecd8f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleGrad/2ecd8f.wgsl.expected.ir.msl
index 212141b..fb90410 100644
--- a/test/tint/builtins/gen/literal/textureSampleGrad/2ecd8f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleGrad/2ecd8f.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleGrad_2ecd8f = func():void -> %b2 {
-  %b2 = block {
+%textureSampleGrad_2ecd8f = func():void {
+  $B2: {
     %5:texture_2d_array<f32> = load %arg_0
     %6:sampler = load %arg_1
     %7:vec4<f32> = textureSampleGrad %5, %6, vec2<f32>(1.0f), 1i, vec2<f32>(1.0f), vec2<f32>(1.0f)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureSampleGrad_2ecd8f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureSampleGrad_2ecd8f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureSampleGrad_2ecd8f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleGrad/521263.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleGrad/521263.wgsl.expected.ir.msl
index c695bd3..5dcd64d 100644
--- a/test/tint/builtins/gen/literal/textureSampleGrad/521263.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleGrad/521263.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleGrad_521263 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleGrad_521263 = func():void {
+  $B2: {
     %5:texture_2d<f32> = load %arg_0
     %6:sampler = load %arg_1
     %7:vec4<f32> = textureSampleGrad %5, %6, vec2<f32>(1.0f), vec2<f32>(1.0f), vec2<f32>(1.0f)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureSampleGrad_521263
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureSampleGrad_521263
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureSampleGrad_521263
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleGrad/5312f4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleGrad/5312f4.wgsl.expected.ir.msl
index b640f6b..bc9965c 100644
--- a/test/tint/builtins/gen/literal/textureSampleGrad/5312f4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleGrad/5312f4.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleGrad_5312f4 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleGrad_5312f4 = func():void {
+  $B2: {
     %5:texture_cube<f32> = load %arg_0
     %6:sampler = load %arg_1
     %7:vec4<f32> = textureSampleGrad %5, %6, vec3<f32>(1.0f), vec3<f32>(1.0f), vec3<f32>(1.0f)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureSampleGrad_5312f4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureSampleGrad_5312f4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureSampleGrad_5312f4
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleGrad/5884dd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleGrad/5884dd.wgsl.expected.ir.msl
index 8757e0c..b0063b5 100644
--- a/test/tint/builtins/gen/literal/textureSampleGrad/5884dd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleGrad/5884dd.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleGrad_5884dd = func():void -> %b2 {
-  %b2 = block {
+%textureSampleGrad_5884dd = func():void {
+  $B2: {
     %5:texture_3d<f32> = load %arg_0
     %6:sampler = load %arg_1
     %7:vec4<f32> = textureSampleGrad %5, %6, vec3<f32>(1.0f), vec3<f32>(1.0f), vec3<f32>(1.0f), vec3<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureSampleGrad_5884dd
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureSampleGrad_5884dd
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureSampleGrad_5884dd
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleGrad/7cd6de.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleGrad/7cd6de.wgsl.expected.ir.msl
index 15534c9..d323764 100644
--- a/test/tint/builtins/gen/literal/textureSampleGrad/7cd6de.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleGrad/7cd6de.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleGrad_7cd6de = func():void -> %b2 {
-  %b2 = block {
+%textureSampleGrad_7cd6de = func():void {
+  $B2: {
     %5:texture_2d_array<f32> = load %arg_0
     %6:sampler = load %arg_1
     %7:vec4<f32> = textureSampleGrad %5, %6, vec2<f32>(1.0f), 1u, vec2<f32>(1.0f), vec2<f32>(1.0f), vec2<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureSampleGrad_7cd6de
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureSampleGrad_7cd6de
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureSampleGrad_7cd6de
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleGrad/a09131.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleGrad/a09131.wgsl.expected.ir.msl
index 49a4c7a..34702ee 100644
--- a/test/tint/builtins/gen/literal/textureSampleGrad/a09131.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleGrad/a09131.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleGrad_a09131 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleGrad_a09131 = func():void {
+  $B2: {
     %5:texture_2d_array<f32> = load %arg_0
     %6:sampler = load %arg_1
     %7:vec4<f32> = textureSampleGrad %5, %6, vec2<f32>(1.0f), 1u, vec2<f32>(1.0f), vec2<f32>(1.0f)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureSampleGrad_a09131
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureSampleGrad_a09131
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureSampleGrad_a09131
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleGrad/bbb58f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleGrad/bbb58f.wgsl.expected.ir.msl
index ebd6492..ce6b693 100644
--- a/test/tint/builtins/gen/literal/textureSampleGrad/bbb58f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleGrad/bbb58f.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube_array<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleGrad_bbb58f = func():void -> %b2 {
-  %b2 = block {
+%textureSampleGrad_bbb58f = func():void {
+  $B2: {
     %5:texture_cube_array<f32> = load %arg_0
     %6:sampler = load %arg_1
     %7:vec4<f32> = textureSampleGrad %5, %6, vec3<f32>(1.0f), 1u, vec3<f32>(1.0f), vec3<f32>(1.0f)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureSampleGrad_bbb58f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureSampleGrad_bbb58f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureSampleGrad_bbb58f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleGrad/d4e3c5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleGrad/d4e3c5.wgsl.expected.ir.msl
index 6b70929..78bef3c 100644
--- a/test/tint/builtins/gen/literal/textureSampleGrad/d4e3c5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleGrad/d4e3c5.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleGrad_d4e3c5 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleGrad_d4e3c5 = func():void {
+  $B2: {
     %5:texture_2d<f32> = load %arg_0
     %6:sampler = load %arg_1
     %7:vec4<f32> = textureSampleGrad %5, %6, vec2<f32>(1.0f), vec2<f32>(1.0f), vec2<f32>(1.0f), vec2<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureSampleGrad_d4e3c5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureSampleGrad_d4e3c5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureSampleGrad_d4e3c5
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleGrad/d65515.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleGrad/d65515.wgsl.expected.ir.msl
index 02b81e5..88364c9 100644
--- a/test/tint/builtins/gen/literal/textureSampleGrad/d65515.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleGrad/d65515.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleGrad_d65515 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleGrad_d65515 = func():void {
+  $B2: {
     %5:texture_2d_array<f32> = load %arg_0
     %6:sampler = load %arg_1
     %7:vec4<f32> = textureSampleGrad %5, %6, vec2<f32>(1.0f), 1i, vec2<f32>(1.0f), vec2<f32>(1.0f), vec2<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureSampleGrad_d65515
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureSampleGrad_d65515
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureSampleGrad_d65515
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleGrad/e383db.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleGrad/e383db.wgsl.expected.ir.msl
index 3cd9e38..affbda2 100644
--- a/test/tint/builtins/gen/literal/textureSampleGrad/e383db.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleGrad/e383db.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube_array<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleGrad_e383db = func():void -> %b2 {
-  %b2 = block {
+%textureSampleGrad_e383db = func():void {
+  $B2: {
     %5:texture_cube_array<f32> = load %arg_0
     %6:sampler = load %arg_1
     %7:vec4<f32> = textureSampleGrad %5, %6, vec3<f32>(1.0f), 1i, vec3<f32>(1.0f), vec3<f32>(1.0f)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureSampleGrad_e383db
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureSampleGrad_e383db
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureSampleGrad_e383db
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/02be59.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleLevel/02be59.wgsl.expected.ir.msl
index dcf4b71..5fa56cf 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/02be59.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/02be59.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleLevel_02be59 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleLevel_02be59 = func():void {
+  $B2: {
     %5:texture_depth_2d = load %arg_0
     %6:sampler = load %arg_1
     %7:f32 = textureSampleLevel %5, %6, vec2<f32>(1.0f), 1i
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureSampleLevel_02be59
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureSampleLevel_02be59
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureSampleLevel_02be59
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/0b0a1b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleLevel/0b0a1b.wgsl.expected.ir.msl
index 5f9bc7a..f6678dd 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/0b0a1b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/0b0a1b.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleLevel_0b0a1b = func():void -> %b2 {
-  %b2 = block {
+%textureSampleLevel_0b0a1b = func():void {
+  $B2: {
     %5:texture_2d<f32> = load %arg_0
     %6:sampler = load %arg_1
     %7:vec4<f32> = textureSampleLevel %5, %6, vec2<f32>(1.0f), 1.0f, vec2<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureSampleLevel_0b0a1b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureSampleLevel_0b0a1b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureSampleLevel_0b0a1b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/0bdd9a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleLevel/0bdd9a.wgsl.expected.ir.msl
index 75596d2..05d280a 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/0bdd9a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/0bdd9a.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube_array<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleLevel_0bdd9a = func():void -> %b2 {
-  %b2 = block {
+%textureSampleLevel_0bdd9a = func():void {
+  $B2: {
     %5:texture_cube_array<f32> = load %arg_0
     %6:sampler = load %arg_1
     %7:vec4<f32> = textureSampleLevel %5, %6, vec3<f32>(1.0f), 1i, 1.0f
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureSampleLevel_0bdd9a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureSampleLevel_0bdd9a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureSampleLevel_0bdd9a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/1b0291.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleLevel/1b0291.wgsl.expected.ir.msl
index b5f8396..5d2dcc9 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/1b0291.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/1b0291.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_cube, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleLevel_1b0291 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleLevel_1b0291 = func():void {
+  $B2: {
     %5:texture_depth_cube = load %arg_0
     %6:sampler = load %arg_1
     %7:f32 = textureSampleLevel %5, %6, vec3<f32>(1.0f), 1i
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureSampleLevel_1b0291
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureSampleLevel_1b0291
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureSampleLevel_1b0291
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/1bf73e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleLevel/1bf73e.wgsl.expected.ir.msl
index cb95780..4186450 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/1bf73e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/1bf73e.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleLevel_1bf73e = func():void -> %b2 {
-  %b2 = block {
+%textureSampleLevel_1bf73e = func():void {
+  $B2: {
     %5:texture_depth_2d_array = load %arg_0
     %6:sampler = load %arg_1
     %7:f32 = textureSampleLevel %5, %6, vec2<f32>(1.0f), 1i, 1i
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureSampleLevel_1bf73e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureSampleLevel_1bf73e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureSampleLevel_1bf73e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/265cc7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleLevel/265cc7.wgsl.expected.ir.msl
index fb6a2a1..fed51d5 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/265cc7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/265cc7.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleLevel_265cc7 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleLevel_265cc7 = func():void {
+  $B2: {
     %5:texture_2d_array<f32> = load %arg_0
     %6:sampler = load %arg_1
     %7:vec4<f32> = textureSampleLevel %5, %6, vec2<f32>(1.0f), 1u, 1.0f
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureSampleLevel_265cc7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureSampleLevel_265cc7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureSampleLevel_265cc7
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/2974eb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleLevel/2974eb.wgsl.expected.ir.msl
index d0a4bf2..05b9d3e 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/2974eb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/2974eb.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleLevel_2974eb = func():void -> %b2 {
-  %b2 = block {
+%textureSampleLevel_2974eb = func():void {
+  $B2: {
     %5:texture_depth_2d_array = load %arg_0
     %6:sampler = load %arg_1
     %7:f32 = textureSampleLevel %5, %6, vec2<f32>(1.0f), 1i, 1u
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureSampleLevel_2974eb
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureSampleLevel_2974eb
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureSampleLevel_2974eb
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/302be4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleLevel/302be4.wgsl.expected.ir.msl
index fae05de..db2c003 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/302be4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/302be4.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleLevel_302be4 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleLevel_302be4 = func():void {
+  $B2: {
     %5:texture_2d_array<f32> = load %arg_0
     %6:sampler = load %arg_1
     %7:vec4<f32> = textureSampleLevel %5, %6, vec2<f32>(1.0f), 1i, 1.0f
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureSampleLevel_302be4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureSampleLevel_302be4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureSampleLevel_302be4
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/36780e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleLevel/36780e.wgsl.expected.ir.msl
index 67f2f3c..a80c7e1 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/36780e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/36780e.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleLevel_36780e = func():void -> %b2 {
-  %b2 = block {
+%textureSampleLevel_36780e = func():void {
+  $B2: {
     %5:texture_depth_2d_array = load %arg_0
     %6:sampler = load %arg_1
     %7:f32 = textureSampleLevel %5, %6, vec2<f32>(1.0f), 1i, 1i, vec2<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureSampleLevel_36780e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureSampleLevel_36780e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureSampleLevel_36780e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/36f0d3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleLevel/36f0d3.wgsl.expected.ir.msl
index 3261a97..47c29e3 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/36f0d3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/36f0d3.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleLevel_36f0d3 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleLevel_36f0d3 = func():void {
+  $B2: {
     %5:texture_depth_2d_array = load %arg_0
     %6:sampler = load %arg_1
     %7:f32 = textureSampleLevel %5, %6, vec2<f32>(1.0f), 1i, 1u, vec2<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureSampleLevel_36f0d3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureSampleLevel_36f0d3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureSampleLevel_36f0d3
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/3c3442.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleLevel/3c3442.wgsl.expected.ir.msl
index 69925a7..a04d36c 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/3c3442.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/3c3442.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleLevel_3c3442 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleLevel_3c3442 = func():void {
+  $B2: {
     %5:texture_depth_2d_array = load %arg_0
     %6:sampler = load %arg_1
     %7:f32 = textureSampleLevel %5, %6, vec2<f32>(1.0f), 1u, 1i
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureSampleLevel_3c3442
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureSampleLevel_3c3442
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureSampleLevel_3c3442
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/615583.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleLevel/615583.wgsl.expected.ir.msl
index 5eddcd0..af54a08 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/615583.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/615583.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleLevel_615583 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleLevel_615583 = func():void {
+  $B2: {
     %5:texture_depth_2d_array = load %arg_0
     %6:sampler = load %arg_1
     %7:f32 = textureSampleLevel %5, %6, vec2<f32>(1.0f), 1u, 1u
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureSampleLevel_615583
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureSampleLevel_615583
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureSampleLevel_615583
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/73e892.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleLevel/73e892.wgsl.expected.ir.msl
index de203d3..8be7331 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/73e892.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/73e892.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleLevel_73e892 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleLevel_73e892 = func():void {
+  $B2: {
     %5:texture_depth_2d = load %arg_0
     %6:sampler = load %arg_1
     %7:f32 = textureSampleLevel %5, %6, vec2<f32>(1.0f), 1u
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureSampleLevel_73e892
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureSampleLevel_73e892
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureSampleLevel_73e892
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/749baf.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleLevel/749baf.wgsl.expected.ir.msl
index 046a160..e19ee04 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/749baf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/749baf.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleLevel_749baf = func():void -> %b2 {
-  %b2 = block {
+%textureSampleLevel_749baf = func():void {
+  $B2: {
     %5:texture_depth_2d = load %arg_0
     %6:sampler = load %arg_1
     %7:f32 = textureSampleLevel %5, %6, vec2<f32>(1.0f), 1i, vec2<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureSampleLevel_749baf
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureSampleLevel_749baf
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureSampleLevel_749baf
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/941a53.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleLevel/941a53.wgsl.expected.ir.msl
index ac3547d..178f030 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/941a53.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/941a53.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_cube_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleLevel_941a53 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleLevel_941a53 = func():void {
+  $B2: {
     %5:texture_depth_cube_array = load %arg_0
     %6:sampler = load %arg_1
     %7:f32 = textureSampleLevel %5, %6, vec3<f32>(1.0f), 1u, 1u
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureSampleLevel_941a53
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureSampleLevel_941a53
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureSampleLevel_941a53
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/a12142.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleLevel/a12142.wgsl.expected.ir.msl
index 92c4c2e..e4604cc 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/a12142.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/a12142.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_cube_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleLevel_a12142 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleLevel_a12142 = func():void {
+  $B2: {
     %5:texture_depth_cube_array = load %arg_0
     %6:sampler = load %arg_1
     %7:f32 = textureSampleLevel %5, %6, vec3<f32>(1.0f), 1i, 1u
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureSampleLevel_a12142
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureSampleLevel_a12142
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureSampleLevel_a12142
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/aab3b9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleLevel/aab3b9.wgsl.expected.ir.msl
index ce1f246..ab114e6 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/aab3b9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/aab3b9.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube_array<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleLevel_aab3b9 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleLevel_aab3b9 = func():void {
+  $B2: {
     %5:texture_cube_array<f32> = load %arg_0
     %6:sampler = load %arg_1
     %7:vec4<f32> = textureSampleLevel %5, %6, vec3<f32>(1.0f), 1u, 1.0f
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureSampleLevel_aab3b9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureSampleLevel_aab3b9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureSampleLevel_aab3b9
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/abfcc0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleLevel/abfcc0.wgsl.expected.ir.msl
index 696f514..adc28a7 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/abfcc0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/abfcc0.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleLevel_abfcc0 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleLevel_abfcc0 = func():void {
+  $B2: {
     %5:texture_3d<f32> = load %arg_0
     %6:sampler = load %arg_1
     %7:vec4<f32> = textureSampleLevel %5, %6, vec3<f32>(1.0f), 1.0f
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureSampleLevel_abfcc0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureSampleLevel_abfcc0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureSampleLevel_abfcc0
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/ae5e39.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleLevel/ae5e39.wgsl.expected.ir.msl
index b26bc4b..6823dba 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/ae5e39.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/ae5e39.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_cube_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleLevel_ae5e39 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleLevel_ae5e39 = func():void {
+  $B2: {
     %5:texture_depth_cube_array = load %arg_0
     %6:sampler = load %arg_1
     %7:f32 = textureSampleLevel %5, %6, vec3<f32>(1.0f), 1i, 1i
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureSampleLevel_ae5e39
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureSampleLevel_ae5e39
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureSampleLevel_ae5e39
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/ae92a2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleLevel/ae92a2.wgsl.expected.ir.msl
index f827ed2..3d0c2f4 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/ae92a2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/ae92a2.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_cube, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleLevel_ae92a2 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleLevel_ae92a2 = func():void {
+  $B2: {
     %5:texture_depth_cube = load %arg_0
     %6:sampler = load %arg_1
     %7:f32 = textureSampleLevel %5, %6, vec3<f32>(1.0f), 1u
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureSampleLevel_ae92a2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureSampleLevel_ae92a2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureSampleLevel_ae92a2
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/b7c55c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleLevel/b7c55c.wgsl.expected.ir.msl
index 9b9650d..6bcddb2 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/b7c55c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/b7c55c.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleLevel_b7c55c = func():void -> %b2 {
-  %b2 = block {
+%textureSampleLevel_b7c55c = func():void {
+  $B2: {
     %5:texture_2d_array<f32> = load %arg_0
     %6:sampler = load %arg_1
     %7:vec4<f32> = textureSampleLevel %5, %6, vec2<f32>(1.0f), 1i, 1.0f, vec2<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureSampleLevel_b7c55c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureSampleLevel_b7c55c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureSampleLevel_b7c55c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/c32df7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleLevel/c32df7.wgsl.expected.ir.msl
index 1f92372..80c8b4a 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/c32df7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/c32df7.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleLevel_c32df7 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleLevel_c32df7 = func():void {
+  $B2: {
     %5:texture_cube<f32> = load %arg_0
     %6:sampler = load %arg_1
     %7:vec4<f32> = textureSampleLevel %5, %6, vec3<f32>(1.0f), 1.0f
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureSampleLevel_c32df7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureSampleLevel_c32df7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureSampleLevel_c32df7
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/c6aca6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleLevel/c6aca6.wgsl.expected.ir.msl
index a51c5df..d7f8271 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/c6aca6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/c6aca6.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleLevel_c6aca6 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleLevel_c6aca6 = func():void {
+  $B2: {
     %5:texture_2d<f32> = load %arg_0
     %6:sampler = load %arg_1
     %7:vec4<f32> = textureSampleLevel %5, %6, vec2<f32>(1.0f), 1.0f
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureSampleLevel_c6aca6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureSampleLevel_c6aca6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureSampleLevel_c6aca6
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/cdfe0f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleLevel/cdfe0f.wgsl.expected.ir.msl
index b634e56..076b1c9 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/cdfe0f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/cdfe0f.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleLevel_cdfe0f = func():void -> %b2 {
-  %b2 = block {
+%textureSampleLevel_cdfe0f = func():void {
+  $B2: {
     %5:texture_depth_2d_array = load %arg_0
     %6:sampler = load %arg_1
     %7:f32 = textureSampleLevel %5, %6, vec2<f32>(1.0f), 1u, 1u, vec2<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureSampleLevel_cdfe0f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureSampleLevel_cdfe0f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureSampleLevel_cdfe0f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/dcbecb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleLevel/dcbecb.wgsl.expected.ir.msl
index 9f40ef8..b903fa9 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/dcbecb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/dcbecb.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleLevel_dcbecb = func():void -> %b2 {
-  %b2 = block {
+%textureSampleLevel_dcbecb = func():void {
+  $B2: {
     %5:texture_3d<f32> = load %arg_0
     %6:sampler = load %arg_1
     %7:vec4<f32> = textureSampleLevel %5, %6, vec3<f32>(1.0f), 1.0f, vec3<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureSampleLevel_dcbecb
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureSampleLevel_dcbecb
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureSampleLevel_dcbecb
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/e6ce9e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleLevel/e6ce9e.wgsl.expected.ir.msl
index ec73842..75bfa63 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/e6ce9e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/e6ce9e.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleLevel_e6ce9e = func():void -> %b2 {
-  %b2 = block {
+%textureSampleLevel_e6ce9e = func():void {
+  $B2: {
     %5:texture_depth_2d_array = load %arg_0
     %6:sampler = load %arg_1
     %7:f32 = textureSampleLevel %5, %6, vec2<f32>(1.0f), 1u, 1i, vec2<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureSampleLevel_e6ce9e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureSampleLevel_e6ce9e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureSampleLevel_e6ce9e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/f3b2c8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleLevel/f3b2c8.wgsl.expected.ir.msl
index 52a72f0..a14e215 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/f3b2c8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/f3b2c8.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleLevel_f3b2c8 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleLevel_f3b2c8 = func():void {
+  $B2: {
     %5:texture_depth_2d = load %arg_0
     %6:sampler = load %arg_1
     %7:f32 = textureSampleLevel %5, %6, vec2<f32>(1.0f), 1u, vec2<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureSampleLevel_f3b2c8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureSampleLevel_f3b2c8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureSampleLevel_f3b2c8
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/faa6d7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleLevel/faa6d7.wgsl.expected.ir.msl
index 2dd5c21..ccecf6f 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/faa6d7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/faa6d7.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleLevel_faa6d7 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleLevel_faa6d7 = func():void {
+  $B2: {
     %5:texture_2d_array<f32> = load %arg_0
     %6:sampler = load %arg_1
     %7:vec4<f32> = textureSampleLevel %5, %6, vec2<f32>(1.0f), 1u, 1.0f, vec2<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureSampleLevel_faa6d7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureSampleLevel_faa6d7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureSampleLevel_faa6d7
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/ff11bc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleLevel/ff11bc.wgsl.expected.ir.msl
index 7b4d3b0..b6b1184 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/ff11bc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/ff11bc.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_cube_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleLevel_ff11bc = func():void -> %b2 {
-  %b2 = block {
+%textureSampleLevel_ff11bc = func():void {
+  $B2: {
     %5:texture_depth_cube_array = load %arg_0
     %6:sampler = load %arg_1
     %7:f32 = textureSampleLevel %5, %6, vec3<f32>(1.0f), 1u, 1i
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureSampleLevel_ff11bc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureSampleLevel_ff11bc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureSampleLevel_ff11bc
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/00ca64.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/00ca64.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/00ca64.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/00ca64.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/0148bd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/0148bd.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/0148bd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/0148bd.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/031506.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/031506.wgsl.expected.ir.msl
index 55fcee8..bbe33ef 100644
--- a/test/tint/builtins/gen/literal/textureStore/031506.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/031506.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<r32float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_031506 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_031506 = func():void {
+  $B2: {
     %3:texture_storage_2d<r32float, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<i32>(1i), vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_031506
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_031506
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_031506
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/036d0e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/036d0e.wgsl.expected.ir.msl
index be4a489..8eec2f9 100644
--- a/test/tint/builtins/gen/literal/textureStore/036d0e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/036d0e.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_036d0e = func():void -> %b2 {
-  %b2 = block {
+%textureStore_036d0e = func():void {
+  $B2: {
     %3:texture_storage_3d<rgba8unorm, read_write> = load %arg_0
     %4:void = textureStore %3, vec3<i32>(1i), vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_036d0e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_036d0e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_036d0e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/03e7a0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/03e7a0.wgsl.expected.ir.msl
index 80535dc..bc30d0d 100644
--- a/test/tint/builtins/gen/literal/textureStore/03e7a0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/03e7a0.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba16uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_03e7a0 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_03e7a0 = func():void {
+  $B2: {
     %3:texture_storage_2d<rgba16uint, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<i32>(1i), vec4<u32>(1u)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_03e7a0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_03e7a0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_03e7a0
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/042b06.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/042b06.wgsl.expected.ir.msl
index c33c9a6..3172261 100644
--- a/test/tint/builtins/gen/literal/textureStore/042b06.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/042b06.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_042b06 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_042b06 = func():void {
+  $B2: {
     %3:texture_storage_2d_array<rgba8snorm, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<u32>(1u), 1u, vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_042b06
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_042b06
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_042b06
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/052a4e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/052a4e.wgsl.expected.ir.msl
index a128c9a..1f5e66c 100644
--- a/test/tint/builtins/gen/literal/textureStore/052a4e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/052a4e.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_052a4e = func():void -> %b2 {
-  %b2 = block {
+%textureStore_052a4e = func():void {
+  $B2: {
     %3:texture_storage_1d<rgba8unorm, read_write> = load %arg_0
     %4:void = textureStore %3, 1u, vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_052a4e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_052a4e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_052a4e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/053664.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/053664.wgsl.expected.ir.msl
index 85d0990..5a7e50a 100644
--- a/test/tint/builtins/gen/literal/textureStore/053664.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/053664.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_053664 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_053664 = func():void {
+  $B2: {
     %3:texture_storage_2d_array<rgba32float, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<i32>(1i), 1i, vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_053664
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_053664
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_053664
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/05ce15.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/05ce15.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/05ce15.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/05ce15.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/064c7f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/064c7f.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/064c7f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/064c7f.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/068641.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/068641.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/068641.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/068641.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/06e49c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/06e49c.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/06e49c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/06e49c.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/07548b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/07548b.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/07548b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/07548b.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/09e4d5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/09e4d5.wgsl.expected.ir.msl
index 1d3b517..211abf2 100644
--- a/test/tint/builtins/gen/literal/textureStore/09e4d5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/09e4d5.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_09e4d5 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_09e4d5 = func():void {
+  $B2: {
     %3:texture_storage_1d<bgra8unorm, read_write> = load %arg_0
     %4:void = textureStore %3, 1u, vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_09e4d5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_09e4d5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_09e4d5
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/0a1a79.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/0a1a79.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/0a1a79.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/0a1a79.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/0ad124.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/0ad124.wgsl.expected.ir.msl
new file mode 100644
index 0000000..818c31f
--- /dev/null
+++ b/test/tint/builtins/gen/literal/textureStore/0ad124.wgsl.expected.ir.msl
@@ -0,0 +1,39 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_1d<r8unorm, read_write>, read> = var @binding_point(1, 0)
+}
+
+%textureStore_0ad124 = func():void {
+  $B2: {
+    %3:texture_storage_1d<r8unorm, read_write> = load %arg_0
+    %4:void = textureStore %3, 1i, vec4<f32>(1.0f)
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %textureStore_0ad124
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %textureStore_0ad124
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %textureStore_0ad124
+    ret
+  }
+}
+
+invalid access control for storage texture
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/textureStore/0ade9a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/0ade9a.wgsl.expected.ir.msl
index 4f5c692..a04feb9 100644
--- a/test/tint/builtins/gen/literal/textureStore/0ade9a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/0ade9a.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_0ade9a = func():void -> %b2 {
-  %b2 = block {
+%textureStore_0ade9a = func():void {
+  $B2: {
     %3:texture_storage_2d_array<rg32uint, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<u32>(1u), 1u, vec4<u32>(1u)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_0ade9a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_0ade9a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_0ade9a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/0af6b5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/0af6b5.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/0af6b5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/0af6b5.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/0c3dff.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/0c3dff.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/0c3dff.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/0c3dff.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/0cc825.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/0cc825.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/0cc825.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/0cc825.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/0ff97a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/0ff97a.wgsl.expected.ir.msl
index 369e03e..2877d6d 100644
--- a/test/tint/builtins/gen/literal/textureStore/0ff97a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/0ff97a.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_0ff97a = func():void -> %b2 {
-  %b2 = block {
+%textureStore_0ff97a = func():void {
+  $B2: {
     %3:texture_storage_2d_array<r32float, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<u32>(1u), 1u, vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_0ff97a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_0ff97a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_0ff97a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/101325.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/101325.wgsl.expected.ir.msl
index 046b1e7..34a713c 100644
--- a/test/tint/builtins/gen/literal/textureStore/101325.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/101325.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba16uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_101325 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_101325 = func():void {
+  $B2: {
     %3:texture_storage_3d<rgba16uint, read_write> = load %arg_0
     %4:void = textureStore %3, vec3<u32>(1u), vec4<u32>(1u)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_101325
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_101325
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_101325
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/102722.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/102722.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/102722.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/102722.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/145061.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/145061.wgsl.expected.ir.msl
index e36d49b..0404fd8 100644
--- a/test/tint/builtins/gen/literal/textureStore/145061.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/145061.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba16uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_145061 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_145061 = func():void {
+  $B2: {
     %3:texture_storage_2d<rgba16uint, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<u32>(1u), vec4<u32>(1u)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_145061
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_145061
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_145061
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/158cf0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/158cf0.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/158cf0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/158cf0.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/178e69.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/178e69.wgsl.expected.ir.msl
index dc58b50..e5f72bf 100644
--- a/test/tint/builtins/gen/literal/textureStore/178e69.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/178e69.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_178e69 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_178e69 = func():void {
+  $B2: {
     %3:texture_storage_1d<bgra8unorm, read_write> = load %arg_0
     %4:void = textureStore %3, 1i, vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_178e69
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_178e69
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_178e69
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/1839f2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/1839f2.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/1839f2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/1839f2.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/195d1b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/195d1b.wgsl.expected.ir.msl
index 07a83fb..942b4cb 100644
--- a/test/tint/builtins/gen/literal/textureStore/195d1b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/195d1b.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba32float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_195d1b = func():void -> %b2 {
-  %b2 = block {
+%textureStore_195d1b = func():void {
+  $B2: {
     %3:texture_storage_3d<rgba32float, read_write> = load %arg_0
     %4:void = textureStore %3, vec3<u32>(1u), vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_195d1b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_195d1b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_195d1b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/197637.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/197637.wgsl.expected.ir.msl
index 5d4e43d..0934c57 100644
--- a/test/tint/builtins/gen/literal/textureStore/197637.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/197637.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba32float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_197637 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_197637 = func():void {
+  $B2: {
     %3:texture_storage_1d<rgba32float, read_write> = load %arg_0
     %4:void = textureStore %3, 1i, vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_197637
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_197637
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_197637
     ret
   }
diff --git a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/1a264d.wgsl.expected.ir.msl
similarity index 75%
rename from test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.ir.msl
rename to test/tint/builtins/gen/literal/textureStore/1a264d.wgsl.expected.ir.msl
index efdd3b1..877ebc6 100644
--- a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/1a264d.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/1a6c0b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/1a6c0b.wgsl.expected.ir.msl
index b4dd0e4..bd8673c 100644
--- a/test/tint/builtins/gen/literal/textureStore/1a6c0b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/1a6c0b.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_1a6c0b = func():void -> %b2 {
-  %b2 = block {
+%textureStore_1a6c0b = func():void {
+  $B2: {
     %3:texture_storage_2d_array<rg32sint, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<u32>(1u), 1u, vec4<i32>(1i)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_1a6c0b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_1a6c0b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_1a6c0b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/1a7d35.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/1a7d35.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/1a7d35.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/1a7d35.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/1af236.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/1af236.wgsl.expected.ir.msl
index 76d5b56..0266535 100644
--- a/test/tint/builtins/gen/literal/textureStore/1af236.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/1af236.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_1af236 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_1af236 = func():void {
+  $B2: {
     %3:texture_storage_2d_array<rgba16float, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<i32>(1i), 1i, vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_1af236
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_1af236
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_1af236
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/1bbd08.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/1bbd08.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/1bbd08.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/1bbd08.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/1c02e7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/1c02e7.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/1c02e7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/1c02e7.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/1dc954.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/1dc954.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/1dc954.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/1dc954.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/1e20f2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/1e20f2.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/1e20f2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/1e20f2.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/1e79f0.wgsl.expected.ir.msl
similarity index 75%
copy from test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.ir.msl
copy to test/tint/builtins/gen/literal/textureStore/1e79f0.wgsl.expected.ir.msl
index efdd3b1..877ebc6 100644
--- a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/1e79f0.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/1e9fbd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/1e9fbd.wgsl.expected.ir.msl
index 397cb93..9353add 100644
--- a/test/tint/builtins/gen/literal/textureStore/1e9fbd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/1e9fbd.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_1e9fbd = func():void -> %b2 {
-  %b2 = block {
+%textureStore_1e9fbd = func():void {
+  $B2: {
     %3:texture_storage_2d_array<r32sint, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<u32>(1u), 1i, vec4<i32>(1i)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_1e9fbd
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_1e9fbd
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_1e9fbd
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/1efc36.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/1efc36.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/1efc36.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/1efc36.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/1f1ef8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/1f1ef8.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/1f1ef8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/1f1ef8.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/1fef04.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/1fef04.wgsl.expected.ir.msl
index 0702bf3..693f553 100644
--- a/test/tint/builtins/gen/literal/textureStore/1fef04.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/1fef04.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<r32sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_1fef04 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_1fef04 = func():void {
+  $B2: {
     %3:texture_storage_1d<r32sint, read_write> = load %arg_0
     %4:void = textureStore %3, 1u, vec4<i32>(1i)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_1fef04
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_1fef04
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_1fef04
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/2046db.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/2046db.wgsl.expected.ir.msl
index 5857574..07fa7a6 100644
--- a/test/tint/builtins/gen/literal/textureStore/2046db.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/2046db.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_2046db = func():void -> %b2 {
-  %b2 = block {
+%textureStore_2046db = func():void {
+  $B2: {
     %3:texture_storage_2d_array<rgba16float, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<u32>(1u), 1i, vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_2046db
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_2046db
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_2046db
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/207fdd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/207fdd.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/207fdd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/207fdd.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/2173fd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/2173fd.wgsl.expected.ir.msl
index f7a86e5..645ab03 100644
--- a/test/tint/builtins/gen/literal/textureStore/2173fd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/2173fd.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba32uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_2173fd = func():void -> %b2 {
-  %b2 = block {
+%textureStore_2173fd = func():void {
+  $B2: {
     %3:texture_storage_1d<rgba32uint, read_write> = load %arg_0
     %4:void = textureStore %3, 1u, vec4<u32>(1u)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_2173fd
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_2173fd
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_2173fd
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/22d955.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/22d955.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/22d955.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/22d955.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/22f045.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/22f045.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/22f045.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/22f045.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/2383fc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/2383fc.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/2383fc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/2383fc.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/24e6b7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/24e6b7.wgsl.expected.ir.msl
index e12b06a..8b73497 100644
--- a/test/tint/builtins/gen/literal/textureStore/24e6b7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/24e6b7.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<r32sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_24e6b7 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_24e6b7 = func():void {
+  $B2: {
     %3:texture_storage_3d<r32sint, read_write> = load %arg_0
     %4:void = textureStore %3, vec3<i32>(1i), vec4<i32>(1i)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_24e6b7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_24e6b7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_24e6b7
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/258ab0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/258ab0.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/258ab0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/258ab0.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/26a26d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/26a26d.wgsl.expected.ir.msl
index af94646..228bd7c 100644
--- a/test/tint/builtins/gen/literal/textureStore/26a26d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/26a26d.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_26a26d = func():void -> %b2 {
-  %b2 = block {
+%textureStore_26a26d = func():void {
+  $B2: {
     %3:texture_storage_1d<rgba8snorm, read_write> = load %arg_0
     %4:void = textureStore %3, 1u, vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_26a26d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_26a26d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_26a26d
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/26bf70.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/26bf70.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/26bf70.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/26bf70.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/27063a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/27063a.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/27063a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/27063a.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/272f5a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/272f5a.wgsl.expected.ir.msl
new file mode 100644
index 0000000..7f54cc5
--- /dev/null
+++ b/test/tint/builtins/gen/literal/textureStore/272f5a.wgsl.expected.ir.msl
@@ -0,0 +1,39 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_2d_array<r8unorm, read_write>, read> = var @binding_point(1, 0)
+}
+
+%textureStore_272f5a = func():void {
+  $B2: {
+    %3:texture_storage_2d_array<r8unorm, read_write> = load %arg_0
+    %4:void = textureStore %3, vec2<i32>(1i), 1u, vec4<f32>(1.0f)
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %textureStore_272f5a
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %textureStore_272f5a
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %textureStore_272f5a
+    ret
+  }
+}
+
+invalid access control for storage texture
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/textureStore/2796b4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/2796b4.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/2796b4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/2796b4.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/285218.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/285218.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/285218.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/285218.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/28a7ec.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/28a7ec.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/28a7ec.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/28a7ec.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/28e109.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/28e109.wgsl.expected.ir.msl
index 491ae5a..b1ce0d9 100644
--- a/test/tint/builtins/gen/literal/textureStore/28e109.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/28e109.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_28e109 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_28e109 = func():void {
+  $B2: {
     %3:texture_storage_2d<rgba8sint, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<i32>(1i), vec4<i32>(1i)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_28e109
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_28e109
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_28e109
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/2a60c9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/2a60c9.wgsl.expected.ir.msl
index c8d831b..fdec6c9 100644
--- a/test/tint/builtins/gen/literal/textureStore/2a60c9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/2a60c9.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_2a60c9 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_2a60c9 = func():void {
+  $B2: {
     %3:texture_storage_2d_array<rgba8sint, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<u32>(1u), 1u, vec4<i32>(1i)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_2a60c9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_2a60c9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_2a60c9
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/2ac6c7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/2ac6c7.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/2ac6c7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/2ac6c7.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/2addd6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/2addd6.wgsl.expected.ir.msl
index 95f9052..82b6db3 100644
--- a/test/tint/builtins/gen/literal/textureStore/2addd6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/2addd6.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_2addd6 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_2addd6 = func():void {
+  $B2: {
     %3:texture_storage_2d_array<rgba8uint, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<u32>(1u), 1u, vec4<u32>(1u)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_2addd6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_2addd6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_2addd6
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/2c76db.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/2c76db.wgsl.expected.ir.msl
index ffac80e..847edd3 100644
--- a/test/tint/builtins/gen/literal/textureStore/2c76db.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/2c76db.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_2c76db = func():void -> %b2 {
-  %b2 = block {
+%textureStore_2c76db = func():void {
+  $B2: {
     %3:texture_storage_2d<rgba8snorm, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<u32>(1u), vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_2c76db
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_2c76db
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_2c76db
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/2d2835.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/2d2835.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/2d2835.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/2d2835.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/2e4245.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/2e4245.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/2e4245.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/2e4245.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/2e512f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/2e512f.wgsl.expected.ir.msl
new file mode 100644
index 0000000..87b746f
--- /dev/null
+++ b/test/tint/builtins/gen/literal/textureStore/2e512f.wgsl.expected.ir.msl
@@ -0,0 +1,39 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_2d<r8unorm, read_write>, read> = var @binding_point(1, 0)
+}
+
+%textureStore_2e512f = func():void {
+  $B2: {
+    %3:texture_storage_2d<r8unorm, read_write> = load %arg_0
+    %4:void = textureStore %3, vec2<u32>(1u), vec4<f32>(1.0f)
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %textureStore_2e512f
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %textureStore_2e512f
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %textureStore_2e512f
+    ret
+  }
+}
+
+invalid access control for storage texture
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/textureStore/2e6102.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/2e6102.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/2e6102.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/2e6102.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/2eb2a4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/2eb2a4.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/2eb2a4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/2eb2a4.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/2ed2a3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/2ed2a3.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/2ed2a3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/2ed2a3.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/2f29ea.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/2f29ea.wgsl.expected.ir.msl
index c47539d..757a9f5 100644
--- a/test/tint/builtins/gen/literal/textureStore/2f29ea.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/2f29ea.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba32sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_2f29ea = func():void -> %b2 {
-  %b2 = block {
+%textureStore_2f29ea = func():void {
+  $B2: {
     %3:texture_storage_2d<rgba32sint, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<i32>(1i), vec4<i32>(1i)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_2f29ea
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_2f29ea
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_2f29ea
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/30b0b0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/30b0b0.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/30b0b0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/30b0b0.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/312f27.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/312f27.wgsl.expected.ir.msl
index bca2770..477aa39 100644
--- a/test/tint/builtins/gen/literal/textureStore/312f27.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/312f27.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_312f27 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_312f27 = func():void {
+  $B2: {
     %3:texture_storage_2d_array<r32float, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<i32>(1i), 1u, vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_312f27
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_312f27
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_312f27
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/31745b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/31745b.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/31745b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/31745b.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/319029.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/319029.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/319029.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/319029.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/32d3d6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/32d3d6.wgsl.expected.ir.msl
index f84cfc6..7813a9d 100644
--- a/test/tint/builtins/gen/literal/textureStore/32d3d6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/32d3d6.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<r32uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_32d3d6 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_32d3d6 = func():void {
+  $B2: {
     %3:texture_storage_1d<r32uint, read_write> = load %arg_0
     %4:void = textureStore %3, 1u, vec4<u32>(1u)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_32d3d6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_32d3d6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_32d3d6
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/32f368.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/32f368.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/32f368.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/32f368.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/330b7c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/330b7c.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/330b7c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/330b7c.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/3310d3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/3310d3.wgsl.expected.ir.msl
index cc6aaf9..b5ff31e 100644
--- a/test/tint/builtins/gen/literal/textureStore/3310d3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/3310d3.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_3310d3 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_3310d3 = func():void {
+  $B2: {
     %3:texture_storage_2d_array<rgba8snorm, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<i32>(1i), 1i, vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_3310d3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_3310d3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_3310d3
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/331aee.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/331aee.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/331aee.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/331aee.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/33cec0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/33cec0.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/33cec0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/33cec0.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/345332.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/345332.wgsl.expected.ir.msl
index 1030450..5393bfd 100644
--- a/test/tint/builtins/gen/literal/textureStore/345332.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/345332.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_345332 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_345332 = func():void {
+  $B2: {
     %3:texture_storage_2d<rgba8uint, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<u32>(1u), vec4<u32>(1u)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_345332
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_345332
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_345332
     ret
   }
diff --git a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/37eeef.wgsl.expected.ir.msl
similarity index 75%
copy from test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.ir.msl
copy to test/tint/builtins/gen/literal/textureStore/37eeef.wgsl.expected.ir.msl
index efdd3b1..877ebc6 100644
--- a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/37eeef.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/37ffd4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/37ffd4.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/37ffd4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/37ffd4.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/38e8d7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/38e8d7.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/38e8d7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/38e8d7.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/3a52ac.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/3a52ac.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/3a52ac.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/3a52ac.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/3bb7a1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/3bb7a1.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/3bb7a1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/3bb7a1.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/3bec15.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/3bec15.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/3bec15.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/3bec15.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/3c1937.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/3c1937.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/3c1937.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/3c1937.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/3d1ebe.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/3d1ebe.wgsl.expected.ir.msl
index 7ec4abc..6858e00 100644
--- a/test/tint/builtins/gen/literal/textureStore/3d1ebe.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/3d1ebe.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<r32float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_3d1ebe = func():void -> %b2 {
-  %b2 = block {
+%textureStore_3d1ebe = func():void {
+  $B2: {
     %3:texture_storage_2d<r32float, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<u32>(1u), vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_3d1ebe
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_3d1ebe
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_3d1ebe
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/3d6f01.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/3d6f01.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/3d6f01.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/3d6f01.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/3d96a4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/3d96a4.wgsl.expected.ir.msl
index 0889fcd..6f074c1 100644
--- a/test/tint/builtins/gen/literal/textureStore/3d96a4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/3d96a4.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba32sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_3d96a4 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_3d96a4 = func():void {
+  $B2: {
     %3:texture_storage_3d<rgba32sint, read_write> = load %arg_0
     %4:void = textureStore %3, vec3<u32>(1u), vec4<i32>(1i)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_3d96a4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_3d96a4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_3d96a4
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/3e0dc4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/3e0dc4.wgsl.expected.ir.msl
index 7388f8b..bc9a5c1 100644
--- a/test/tint/builtins/gen/literal/textureStore/3e0dc4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/3e0dc4.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_3e0dc4 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_3e0dc4 = func():void {
+  $B2: {
     %3:texture_storage_2d_array<rg32float, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<i32>(1i), 1u, vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_3e0dc4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_3e0dc4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_3e0dc4
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/3f61ca.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/3f61ca.wgsl.expected.ir.msl
index d6901b4..ff0ae1b 100644
--- a/test/tint/builtins/gen/literal/textureStore/3f61ca.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/3f61ca.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_3f61ca = func():void -> %b2 {
-  %b2 = block {
+%textureStore_3f61ca = func():void {
+  $B2: {
     %3:texture_storage_3d<rgba8snorm, read_write> = load %arg_0
     %4:void = textureStore %3, vec3<i32>(1i), vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_3f61ca
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_3f61ca
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_3f61ca
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/3fb31f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/3fb31f.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/3fb31f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/3fb31f.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/40c455.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/40c455.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/40c455.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/40c455.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/4288fc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/4288fc.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/4288fc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/4288fc.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/43d1df.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/43d1df.wgsl.expected.ir.msl
new file mode 100644
index 0000000..b852d69
--- /dev/null
+++ b/test/tint/builtins/gen/literal/textureStore/43d1df.wgsl.expected.ir.msl
@@ -0,0 +1,39 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_2d_array<r8unorm, read_write>, read> = var @binding_point(1, 0)
+}
+
+%textureStore_43d1df = func():void {
+  $B2: {
+    %3:texture_storage_2d_array<r8unorm, read_write> = load %arg_0
+    %4:void = textureStore %3, vec2<i32>(1i), 1i, vec4<f32>(1.0f)
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %textureStore_43d1df
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %textureStore_43d1df
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %textureStore_43d1df
+    ret
+  }
+}
+
+invalid access control for storage texture
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/textureStore/441222.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/441222.wgsl.expected.ir.msl
index 1bfcf41..44b3828 100644
--- a/test/tint/builtins/gen/literal/textureStore/441222.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/441222.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba32sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_441222 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_441222 = func():void {
+  $B2: {
     %3:texture_storage_2d<rgba32sint, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<u32>(1u), vec4<i32>(1i)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_441222
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_441222
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_441222
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/441ba8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/441ba8.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/441ba8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/441ba8.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/4483e7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/4483e7.wgsl.expected.ir.msl
index 041461c..1658b1e 100644
--- a/test/tint/builtins/gen/literal/textureStore/4483e7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/4483e7.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba32sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_4483e7 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_4483e7 = func():void {
+  $B2: {
     %3:texture_storage_1d<rgba32sint, read_write> = load %arg_0
     %4:void = textureStore %3, 1u, vec4<i32>(1i)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_4483e7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_4483e7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_4483e7
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/44b372.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/44b372.wgsl.expected.ir.msl
index b436b1d..c958470 100644
--- a/test/tint/builtins/gen/literal/textureStore/44b372.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/44b372.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba16sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_44b372 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_44b372 = func():void {
+  $B2: {
     %3:texture_storage_2d<rgba16sint, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<i32>(1i), vec4<i32>(1i)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_44b372
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_44b372
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_44b372
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/44daa7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/44daa7.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/44daa7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/44daa7.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/473ead.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/473ead.wgsl.expected.ir.msl
index e80ce3f..9ba0477 100644
--- a/test/tint/builtins/gen/literal/textureStore/473ead.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/473ead.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rg32uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_473ead = func():void -> %b2 {
-  %b2 = block {
+%textureStore_473ead = func():void {
+  $B2: {
     %3:texture_storage_3d<rg32uint, read_write> = load %arg_0
     %4:void = textureStore %3, vec3<u32>(1u), vec4<u32>(1u)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_473ead
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_473ead
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_473ead
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/47bd70.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/47bd70.wgsl.expected.ir.msl
index f3b216f..5be639f 100644
--- a/test/tint/builtins/gen/literal/textureStore/47bd70.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/47bd70.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_47bd70 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_47bd70 = func():void {
+  $B2: {
     %3:texture_storage_2d<rgba8unorm, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<u32>(1u), vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_47bd70
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_47bd70
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_47bd70
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/486500.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/486500.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/486500.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/486500.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/48cb56.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/48cb56.wgsl.expected.ir.msl
index 2c28184..25f9a8d 100644
--- a/test/tint/builtins/gen/literal/textureStore/48cb56.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/48cb56.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_48cb56 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_48cb56 = func():void {
+  $B2: {
     %3:texture_storage_2d_array<rgba16sint, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<u32>(1u), 1u, vec4<i32>(1i)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_48cb56
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_48cb56
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_48cb56
     ret
   }
diff --git a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/48eae1.wgsl.expected.ir.msl
similarity index 75%
copy from test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.ir.msl
copy to test/tint/builtins/gen/literal/textureStore/48eae1.wgsl.expected.ir.msl
index efdd3b1..877ebc6 100644
--- a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/48eae1.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/4bf1fd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/4bf1fd.wgsl.expected.ir.msl
index 1c112b6..0239fee 100644
--- a/test/tint/builtins/gen/literal/textureStore/4bf1fd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/4bf1fd.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<r32uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_4bf1fd = func():void -> %b2 {
-  %b2 = block {
+%textureStore_4bf1fd = func():void {
+  $B2: {
     %3:texture_storage_2d<r32uint, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<u32>(1u), vec4<u32>(1u)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_4bf1fd
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_4bf1fd
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_4bf1fd
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/4c454f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/4c454f.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/4c454f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/4c454f.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/4c76b7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/4c76b7.wgsl.expected.ir.msl
index 2e049de..c18392f 100644
--- a/test/tint/builtins/gen/literal/textureStore/4c76b7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/4c76b7.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_4c76b7 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_4c76b7 = func():void {
+  $B2: {
     %3:texture_storage_2d_array<bgra8unorm, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<u32>(1u), 1i, vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_4c76b7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_4c76b7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_4c76b7
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/4cce74.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/4cce74.wgsl.expected.ir.msl
index c76b4bf..61f3b4c 100644
--- a/test/tint/builtins/gen/literal/textureStore/4cce74.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/4cce74.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rg32uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_4cce74 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_4cce74 = func():void {
+  $B2: {
     %3:texture_storage_1d<rg32uint, read_write> = load %arg_0
     %4:void = textureStore %3, 1i, vec4<u32>(1u)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_4cce74
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_4cce74
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_4cce74
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/4d359d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/4d359d.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/4d359d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/4d359d.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/4ddf52.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/4ddf52.wgsl.expected.ir.msl
index dac878f..6c09869 100644
--- a/test/tint/builtins/gen/literal/textureStore/4ddf52.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/4ddf52.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba16sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_4ddf52 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_4ddf52 = func():void {
+  $B2: {
     %3:texture_storage_2d<rgba16sint, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<u32>(1u), vec4<i32>(1i)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_4ddf52
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_4ddf52
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_4ddf52
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/4e2b3a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/4e2b3a.wgsl.expected.ir.msl
index 199e165..3ce2f27 100644
--- a/test/tint/builtins/gen/literal/textureStore/4e2b3a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/4e2b3a.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_4e2b3a = func():void -> %b2 {
-  %b2 = block {
+%textureStore_4e2b3a = func():void {
+  $B2: {
     %3:texture_storage_2d_array<rg32float, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<i32>(1i), 1i, vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_4e2b3a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_4e2b3a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_4e2b3a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/4fc057.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/4fc057.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/4fc057.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/4fc057.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/5030f5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/5030f5.wgsl.expected.ir.msl
index 0b84d77..85929e5 100644
--- a/test/tint/builtins/gen/literal/textureStore/5030f5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/5030f5.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_5030f5 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_5030f5 = func():void {
+  $B2: {
     %3:texture_storage_2d_array<bgra8unorm, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<u32>(1u), 1u, vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_5030f5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_5030f5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_5030f5
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/506a71.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/506a71.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/506a71.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/506a71.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/51ec82.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/51ec82.wgsl.expected.ir.msl
index 9ef9366..3ad0935 100644
--- a/test/tint/builtins/gen/literal/textureStore/51ec82.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/51ec82.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rg32float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_51ec82 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_51ec82 = func():void {
+  $B2: {
     %3:texture_storage_1d<rg32float, read_write> = load %arg_0
     %4:void = textureStore %3, 1i, vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_51ec82
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_51ec82
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_51ec82
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/5246b4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/5246b4.wgsl.expected.ir.msl
index 2e44965..32ce08a 100644
--- a/test/tint/builtins/gen/literal/textureStore/5246b4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/5246b4.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<r32uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_5246b4 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_5246b4 = func():void {
+  $B2: {
     %3:texture_storage_3d<r32uint, read_write> = load %arg_0
     %4:void = textureStore %3, vec3<u32>(1u), vec4<u32>(1u)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_5246b4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_5246b4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_5246b4
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/52f503.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/52f503.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/52f503.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/52f503.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/53a68b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/53a68b.wgsl.expected.ir.msl
index d09c74b..d84ecd0 100644
--- a/test/tint/builtins/gen/literal/textureStore/53a68b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/53a68b.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<r32uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_53a68b = func():void -> %b2 {
-  %b2 = block {
+%textureStore_53a68b = func():void {
+  $B2: {
     %3:texture_storage_3d<r32uint, read_write> = load %arg_0
     %4:void = textureStore %3, vec3<i32>(1i), vec4<u32>(1u)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_53a68b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_53a68b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_53a68b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/5425ab.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/5425ab.wgsl.expected.ir.msl
index 98ba7c6..05ca46d 100644
--- a/test/tint/builtins/gen/literal/textureStore/5425ab.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/5425ab.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rg32uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_5425ab = func():void -> %b2 {
-  %b2 = block {
+%textureStore_5425ab = func():void {
+  $B2: {
     %3:texture_storage_2d<rg32uint, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<i32>(1i), vec4<u32>(1u)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_5425ab
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_5425ab
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_5425ab
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/544f06.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/544f06.wgsl.expected.ir.msl
index bb88a23..8936663 100644
--- a/test/tint/builtins/gen/literal/textureStore/544f06.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/544f06.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_544f06 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_544f06 = func():void {
+  $B2: {
     %3:texture_storage_2d<bgra8unorm, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<i32>(1i), vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_544f06
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_544f06
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_544f06
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/55f9dc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/55f9dc.wgsl.expected.ir.msl
index 7b28084..80d5b8e 100644
--- a/test/tint/builtins/gen/literal/textureStore/55f9dc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/55f9dc.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_55f9dc = func():void -> %b2 {
-  %b2 = block {
+%textureStore_55f9dc = func():void {
+  $B2: {
     %3:texture_storage_2d_array<rgba32float, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<u32>(1u), 1u, vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_55f9dc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_55f9dc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_55f9dc
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/574a31.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/574a31.wgsl.expected.ir.msl
index e0271ed..83cf013 100644
--- a/test/tint/builtins/gen/literal/textureStore/574a31.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/574a31.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rg32sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_574a31 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_574a31 = func():void {
+  $B2: {
     %3:texture_storage_1d<rg32sint, read_write> = load %arg_0
     %4:void = textureStore %3, 1u, vec4<i32>(1i)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_574a31
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_574a31
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_574a31
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/579b93.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/579b93.wgsl.expected.ir.msl
index add4392..f2070ba 100644
--- a/test/tint/builtins/gen/literal/textureStore/579b93.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/579b93.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<r32uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_579b93 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_579b93 = func():void {
+  $B2: {
     %3:texture_storage_2d<r32uint, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<i32>(1i), vec4<u32>(1u)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_579b93
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_579b93
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_579b93
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/5841f8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/5841f8.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/5841f8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/5841f8.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/58fc35.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/58fc35.wgsl.expected.ir.msl
index 69c5183..375e6e4 100644
--- a/test/tint/builtins/gen/literal/textureStore/58fc35.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/58fc35.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba16float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_58fc35 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_58fc35 = func():void {
+  $B2: {
     %3:texture_storage_1d<rgba16float, read_write> = load %arg_0
     %4:void = textureStore %3, 1u, vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_58fc35
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_58fc35
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_58fc35
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/59a0ab.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/59a0ab.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/59a0ab.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/59a0ab.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/5a2f8f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/5a2f8f.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/5a2f8f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/5a2f8f.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/5a8b41.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/5a8b41.wgsl.expected.ir.msl
index 879d644..4632423 100644
--- a/test/tint/builtins/gen/literal/textureStore/5a8b41.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/5a8b41.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_5a8b41 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_5a8b41 = func():void {
+  $B2: {
     %3:texture_storage_2d_array<rgba32float, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<u32>(1u), 1i, vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_5a8b41
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_5a8b41
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_5a8b41
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/5b17eb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/5b17eb.wgsl.expected.ir.msl
index f1a1f86..3c604d0 100644
--- a/test/tint/builtins/gen/literal/textureStore/5b17eb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/5b17eb.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rg32float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_5b17eb = func():void -> %b2 {
-  %b2 = block {
+%textureStore_5b17eb = func():void {
+  $B2: {
     %3:texture_storage_2d<rg32float, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<u32>(1u), vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_5b17eb
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_5b17eb
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_5b17eb
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/5b4522.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/5b4522.wgsl.expected.ir.msl
index 8089a25..fc2a5a7 100644
--- a/test/tint/builtins/gen/literal/textureStore/5b4522.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/5b4522.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_5b4522 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_5b4522 = func():void {
+  $B2: {
     %3:texture_storage_1d<rgba8uint, read_write> = load %arg_0
     %4:void = textureStore %3, 1u, vec4<u32>(1u)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_5b4522
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_5b4522
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_5b4522
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/5bc4f3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/5bc4f3.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/5bc4f3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/5bc4f3.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/5ddc61.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/5ddc61.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/5ddc61.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/5ddc61.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/5ec6b2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/5ec6b2.wgsl.expected.ir.msl
index b100834..59a8df5 100644
--- a/test/tint/builtins/gen/literal/textureStore/5ec6b2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/5ec6b2.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<r32float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_5ec6b2 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_5ec6b2 = func():void {
+  $B2: {
     %3:texture_storage_3d<r32float, read_write> = load %arg_0
     %4:void = textureStore %3, vec3<u32>(1u), vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_5ec6b2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_5ec6b2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_5ec6b2
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/5ee194.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/5ee194.wgsl.expected.ir.msl
index 5674b4c..7e2da69 100644
--- a/test/tint/builtins/gen/literal/textureStore/5ee194.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/5ee194.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_5ee194 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_5ee194 = func():void {
+  $B2: {
     %3:texture_storage_2d_array<rg32float, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<u32>(1u), 1u, vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_5ee194
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_5ee194
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_5ee194
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/5f9a49.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/5f9a49.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/5f9a49.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/5f9a49.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/602b5a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/602b5a.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/602b5a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/602b5a.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/60975f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/60975f.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/60975f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/60975f.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/614b58.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/614b58.wgsl.expected.ir.msl
index 18d79fe..5777b67 100644
--- a/test/tint/builtins/gen/literal/textureStore/614b58.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/614b58.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_614b58 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_614b58 = func():void {
+  $B2: {
     %3:texture_storage_2d_array<r32sint, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<i32>(1i), 1u, vec4<i32>(1i)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_614b58
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_614b58
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_614b58
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/635584.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/635584.wgsl.expected.ir.msl
index be2e584..428d45d 100644
--- a/test/tint/builtins/gen/literal/textureStore/635584.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/635584.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rg32float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_635584 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_635584 = func():void {
+  $B2: {
     %3:texture_storage_1d<rg32float, read_write> = load %arg_0
     %4:void = textureStore %3, 1u, vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_635584
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_635584
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_635584
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/63f34a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/63f34a.wgsl.expected.ir.msl
index e56ce54..5403af3 100644
--- a/test/tint/builtins/gen/literal/textureStore/63f34a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/63f34a.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rg32sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_63f34a = func():void -> %b2 {
-  %b2 = block {
+%textureStore_63f34a = func():void {
+  $B2: {
     %3:texture_storage_2d<rg32sint, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<u32>(1u), vec4<i32>(1i)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_63f34a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_63f34a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_63f34a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/646dbc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/646dbc.wgsl.expected.ir.msl
index e8ded03..5f76504 100644
--- a/test/tint/builtins/gen/literal/textureStore/646dbc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/646dbc.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba32sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_646dbc = func():void -> %b2 {
-  %b2 = block {
+%textureStore_646dbc = func():void {
+  $B2: {
     %3:texture_storage_3d<rgba32sint, read_write> = load %arg_0
     %4:void = textureStore %3, vec3<i32>(1i), vec4<i32>(1i)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_646dbc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_646dbc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_646dbc
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/658a74.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/658a74.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/658a74.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/658a74.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/65b6aa.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/65b6aa.wgsl.expected.ir.msl
index 168d126..8e25743 100644
--- a/test/tint/builtins/gen/literal/textureStore/65b6aa.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/65b6aa.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_65b6aa = func():void -> %b2 {
-  %b2 = block {
+%textureStore_65b6aa = func():void {
+  $B2: {
     %3:texture_storage_1d<rgba8sint, read_write> = load %arg_0
     %4:void = textureStore %3, 1i, vec4<i32>(1i)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_65b6aa
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_65b6aa
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_65b6aa
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/65ba8b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/65ba8b.wgsl.expected.ir.msl
new file mode 100644
index 0000000..c1c500b
--- /dev/null
+++ b/test/tint/builtins/gen/literal/textureStore/65ba8b.wgsl.expected.ir.msl
@@ -0,0 +1,39 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_2d<r8unorm, read_write>, read> = var @binding_point(1, 0)
+}
+
+%textureStore_65ba8b = func():void {
+  $B2: {
+    %3:texture_storage_2d<r8unorm, read_write> = load %arg_0
+    %4:void = textureStore %3, vec2<i32>(1i), vec4<f32>(1.0f)
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %textureStore_65ba8b
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %textureStore_65ba8b
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %textureStore_65ba8b
+    ret
+  }
+}
+
+invalid access control for storage texture
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/textureStore/682fd6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/682fd6.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/682fd6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/682fd6.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/699a1b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/699a1b.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/699a1b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/699a1b.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/6b75c3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/6b75c3.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/6b75c3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/6b75c3.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/6b80d2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/6b80d2.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/6b80d2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/6b80d2.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/6be9e0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/6be9e0.wgsl.expected.ir.msl
index a7814b0..86333e3 100644
--- a/test/tint/builtins/gen/literal/textureStore/6be9e0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/6be9e0.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<r32float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_6be9e0 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_6be9e0 = func():void {
+  $B2: {
     %3:texture_storage_3d<r32float, read_write> = load %arg_0
     %4:void = textureStore %3, vec3<i32>(1i), vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_6be9e0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_6be9e0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_6be9e0
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/6c4a70.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/6c4a70.wgsl.expected.ir.msl
index b3b83e2..fb606a2 100644
--- a/test/tint/builtins/gen/literal/textureStore/6c4a70.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/6c4a70.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<r32sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_6c4a70 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_6c4a70 = func():void {
+  $B2: {
     %3:texture_storage_2d<r32sint, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<u32>(1u), vec4<i32>(1i)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_6c4a70
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_6c4a70
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_6c4a70
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/6cff2e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/6cff2e.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/6cff2e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/6cff2e.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/6d1809.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/6d1809.wgsl.expected.ir.msl
index b6c8110..92d193f 100644
--- a/test/tint/builtins/gen/literal/textureStore/6d1809.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/6d1809.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_6d1809 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_6d1809 = func():void {
+  $B2: {
     %3:texture_storage_2d_array<rgba8unorm, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<u32>(1u), 1u, vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_6d1809
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_6d1809
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_6d1809
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/6d259f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/6d259f.wgsl.expected.ir.msl
index 4e08486..53e68a4 100644
--- a/test/tint/builtins/gen/literal/textureStore/6d259f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/6d259f.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba32uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_6d259f = func():void -> %b2 {
-  %b2 = block {
+%textureStore_6d259f = func():void {
+  $B2: {
     %3:texture_storage_2d<rgba32uint, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<i32>(1i), vec4<u32>(1u)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_6d259f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_6d259f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_6d259f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/6da692.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/6da692.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/6da692.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/6da692.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/6e6cc0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/6e6cc0.wgsl.expected.ir.msl
index 2745c49..15e2053 100644
--- a/test/tint/builtins/gen/literal/textureStore/6e6cc0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/6e6cc0.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<r32float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_6e6cc0 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_6e6cc0 = func():void {
+  $B2: {
     %3:texture_storage_1d<r32float, read_write> = load %arg_0
     %4:void = textureStore %3, 1i, vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_6e6cc0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_6e6cc0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_6e6cc0
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/6f0c92.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/6f0c92.wgsl.expected.ir.msl
new file mode 100644
index 0000000..c0ea989
--- /dev/null
+++ b/test/tint/builtins/gen/literal/textureStore/6f0c92.wgsl.expected.ir.msl
@@ -0,0 +1,39 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_2d_array<r8unorm, read_write>, read> = var @binding_point(1, 0)
+}
+
+%textureStore_6f0c92 = func():void {
+  $B2: {
+    %3:texture_storage_2d_array<r8unorm, read_write> = load %arg_0
+    %4:void = textureStore %3, vec2<u32>(1u), 1i, vec4<f32>(1.0f)
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %textureStore_6f0c92
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %textureStore_6f0c92
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %textureStore_6f0c92
+    ret
+  }
+}
+
+invalid access control for storage texture
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/textureStore/6f3542.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/6f3542.wgsl.expected.ir.msl
index 9f4a93d..c8419b7 100644
--- a/test/tint/builtins/gen/literal/textureStore/6f3542.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/6f3542.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba16uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_6f3542 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_6f3542 = func():void {
+  $B2: {
     %3:texture_storage_3d<rgba16uint, read_write> = load %arg_0
     %4:void = textureStore %3, vec3<i32>(1i), vec4<u32>(1u)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_6f3542
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_6f3542
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_6f3542
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/6f8642.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/6f8642.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/6f8642.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/6f8642.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/6fb99b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/6fb99b.wgsl.expected.ir.msl
index a9f02cd..eb90406 100644
--- a/test/tint/builtins/gen/literal/textureStore/6fb99b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/6fb99b.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba16float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_6fb99b = func():void -> %b2 {
-  %b2 = block {
+%textureStore_6fb99b = func():void {
+  $B2: {
     %3:texture_storage_3d<rgba16float, read_write> = load %arg_0
     %4:void = textureStore %3, vec3<i32>(1i), vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_6fb99b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_6fb99b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_6fb99b
     ret
   }
diff --git a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/6fd2b1.wgsl.expected.ir.msl
similarity index 75%
copy from test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.ir.msl
copy to test/tint/builtins/gen/literal/textureStore/6fd2b1.wgsl.expected.ir.msl
index efdd3b1..877ebc6 100644
--- a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/6fd2b1.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/704e1f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/704e1f.wgsl.expected.ir.msl
index 7f6d9cb..ea067ff 100644
--- a/test/tint/builtins/gen/literal/textureStore/704e1f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/704e1f.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_704e1f = func():void -> %b2 {
-  %b2 = block {
+%textureStore_704e1f = func():void {
+  $B2: {
     %3:texture_storage_2d_array<rgba8unorm, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<i32>(1i), 1i, vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_704e1f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_704e1f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_704e1f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/706236.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/706236.wgsl.expected.ir.msl
index 1fbcc34..371f4b7 100644
--- a/test/tint/builtins/gen/literal/textureStore/706236.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/706236.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_706236 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_706236 = func():void {
+  $B2: {
     %3:texture_storage_1d<rgba8unorm, read_write> = load %arg_0
     %4:void = textureStore %3, 1i, vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_706236
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_706236
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_706236
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/706560.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/706560.wgsl.expected.ir.msl
index ccccb31..2380b1e 100644
--- a/test/tint/builtins/gen/literal/textureStore/706560.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/706560.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_706560 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_706560 = func():void {
+  $B2: {
     %3:texture_storage_2d_array<rgba32uint, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<i32>(1i), 1u, vec4<u32>(1u)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_706560
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_706560
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_706560
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/726472.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/726472.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/726472.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/726472.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/726d6d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/726d6d.wgsl.expected.ir.msl
index a16887f..a4e6ce8 100644
--- a/test/tint/builtins/gen/literal/textureStore/726d6d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/726d6d.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba16float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_726d6d = func():void -> %b2 {
-  %b2 = block {
+%textureStore_726d6d = func():void {
+  $B2: {
     %3:texture_storage_2d<rgba16float, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<u32>(1u), vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_726d6d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_726d6d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_726d6d
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/72fa64.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/72fa64.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/72fa64.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/72fa64.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/731349.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/731349.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/731349.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/731349.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/73a735.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/73a735.wgsl.expected.ir.msl
index 6d95d21..9da11f0 100644
--- a/test/tint/builtins/gen/literal/textureStore/73a735.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/73a735.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_73a735 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_73a735 = func():void {
+  $B2: {
     %3:texture_storage_2d_array<rgba8sint, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<u32>(1u), 1i, vec4<i32>(1i)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_73a735
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_73a735
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_73a735
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/73bbbc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/73bbbc.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/73bbbc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/73bbbc.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/74886f.wgsl.expected.ir.msl
similarity index 75%
copy from test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.ir.msl
copy to test/tint/builtins/gen/literal/textureStore/74886f.wgsl.expected.ir.msl
index efdd3b1..877ebc6 100644
--- a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/74886f.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/751256.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/751256.wgsl.expected.ir.msl
index 529f432..582856e 100644
--- a/test/tint/builtins/gen/literal/textureStore/751256.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/751256.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba32uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_751256 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_751256 = func():void {
+  $B2: {
     %3:texture_storage_1d<rgba32uint, read_write> = load %arg_0
     %4:void = textureStore %3, 1i, vec4<u32>(1u)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_751256
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_751256
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_751256
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/752da6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/752da6.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/752da6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/752da6.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/75bbd5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/75bbd5.wgsl.expected.ir.msl
index 8b399d9..1c580fd 100644
--- a/test/tint/builtins/gen/literal/textureStore/75bbd5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/75bbd5.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_75bbd5 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_75bbd5 = func():void {
+  $B2: {
     %3:texture_storage_2d_array<rg32uint, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<i32>(1i), 1u, vec4<u32>(1u)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_75bbd5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_75bbd5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_75bbd5
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/76affd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/76affd.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/76affd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/76affd.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/7792fa.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/7792fa.wgsl.expected.ir.msl
index 9a2ad34..b1399f7 100644
--- a/test/tint/builtins/gen/literal/textureStore/7792fa.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/7792fa.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rg32sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_7792fa = func():void -> %b2 {
-  %b2 = block {
+%textureStore_7792fa = func():void {
+  $B2: {
     %3:texture_storage_3d<rg32sint, read_write> = load %arg_0
     %4:void = textureStore %3, vec3<u32>(1u), vec4<i32>(1i)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_7792fa
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_7792fa
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_7792fa
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/779d14.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/779d14.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/779d14.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/779d14.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/77c0ae.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/77c0ae.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/77c0ae.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/77c0ae.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/7b8f86.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/7b8f86.wgsl.expected.ir.msl
index 1e89b74..74b9040 100644
--- a/test/tint/builtins/gen/literal/textureStore/7b8f86.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/7b8f86.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rg32float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_7b8f86 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_7b8f86 = func():void {
+  $B2: {
     %3:texture_storage_3d<rg32float, read_write> = load %arg_0
     %4:void = textureStore %3, vec3<u32>(1u), vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_7b8f86
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_7b8f86
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_7b8f86
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/7bb211.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/7bb211.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/7bb211.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/7bb211.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/7cec8d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/7cec8d.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/7cec8d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/7cec8d.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/7cf6e7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/7cf6e7.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/7cf6e7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/7cf6e7.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/7d10e0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/7d10e0.wgsl.expected.ir.msl
index f9f1840..f55840b 100644
--- a/test/tint/builtins/gen/literal/textureStore/7d10e0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/7d10e0.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba32float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_7d10e0 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_7d10e0 = func():void {
+  $B2: {
     %3:texture_storage_1d<rgba32float, read_write> = load %arg_0
     %4:void = textureStore %3, 1u, vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_7d10e0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_7d10e0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_7d10e0
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/7dd042.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/7dd042.wgsl.expected.ir.msl
index d7e6cc1..33aa100 100644
--- a/test/tint/builtins/gen/literal/textureStore/7dd042.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/7dd042.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_7dd042 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_7dd042 = func():void {
+  $B2: {
     %3:texture_storage_2d_array<rgba16sint, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<i32>(1i), 1i, vec4<i32>(1i)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_7dd042
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_7dd042
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_7dd042
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/7e787a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/7e787a.wgsl.expected.ir.msl
index 829af7c..3136246 100644
--- a/test/tint/builtins/gen/literal/textureStore/7e787a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/7e787a.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba32float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_7e787a = func():void -> %b2 {
-  %b2 = block {
+%textureStore_7e787a = func():void {
+  $B2: {
     %3:texture_storage_3d<rgba32float, read_write> = load %arg_0
     %4:void = textureStore %3, vec3<i32>(1i), vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_7e787a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_7e787a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_7e787a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/7f7fae.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/7f7fae.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/7f7fae.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/7f7fae.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/803a10.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/803a10.wgsl.expected.ir.msl
new file mode 100644
index 0000000..03fc8e8
--- /dev/null
+++ b/test/tint/builtins/gen/literal/textureStore/803a10.wgsl.expected.ir.msl
@@ -0,0 +1,39 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_3d<r8unorm, read_write>, read> = var @binding_point(1, 0)
+}
+
+%textureStore_803a10 = func():void {
+  $B2: {
+    %3:texture_storage_3d<r8unorm, read_write> = load %arg_0
+    %4:void = textureStore %3, vec3<u32>(1u), vec4<f32>(1.0f)
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %textureStore_803a10
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %textureStore_803a10
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %textureStore_803a10
+    ret
+  }
+}
+
+invalid access control for storage texture
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/textureStore/804942.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/804942.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/804942.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/804942.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/805dae.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/805dae.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/805dae.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/805dae.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/80bf1d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/80bf1d.wgsl.expected.ir.msl
index 569a094..2e850de 100644
--- a/test/tint/builtins/gen/literal/textureStore/80bf1d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/80bf1d.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rg32sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_80bf1d = func():void -> %b2 {
-  %b2 = block {
+%textureStore_80bf1d = func():void {
+  $B2: {
     %3:texture_storage_2d<rg32sint, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<i32>(1i), vec4<i32>(1i)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_80bf1d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_80bf1d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_80bf1d
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/818df6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/818df6.wgsl.expected.ir.msl
index d370f68..710f14c 100644
--- a/test/tint/builtins/gen/literal/textureStore/818df6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/818df6.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba16float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_818df6 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_818df6 = func():void {
+  $B2: {
     %3:texture_storage_3d<rgba16float, read_write> = load %arg_0
     %4:void = textureStore %3, vec3<u32>(1u), vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_818df6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_818df6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_818df6
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/81ae31.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/81ae31.wgsl.expected.ir.msl
index 09fdbf7..74b9fdc 100644
--- a/test/tint/builtins/gen/literal/textureStore/81ae31.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/81ae31.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_81ae31 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_81ae31 = func():void {
+  $B2: {
     %3:texture_storage_2d_array<r32float, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<i32>(1i), 1i, vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_81ae31
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_81ae31
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_81ae31
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/820272.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/820272.wgsl.expected.ir.msl
index 5a75078..f986a9a 100644
--- a/test/tint/builtins/gen/literal/textureStore/820272.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/820272.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_820272 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_820272 = func():void {
+  $B2: {
     %3:texture_storage_2d_array<rg32sint, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<i32>(1i), 1u, vec4<i32>(1i)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_820272
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_820272
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_820272
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/83bcc1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/83bcc1.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/83bcc1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/83bcc1.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/84d435.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/84d435.wgsl.expected.ir.msl
index e041d66..e4f3eec 100644
--- a/test/tint/builtins/gen/literal/textureStore/84d435.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/84d435.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_84d435 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_84d435 = func():void {
+  $B2: {
     %3:texture_storage_2d_array<rg32sint, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<i32>(1i), 1i, vec4<i32>(1i)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_84d435
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_84d435
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_84d435
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/84f4f4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/84f4f4.wgsl.expected.ir.msl
index 7a7266b..bc86db9 100644
--- a/test/tint/builtins/gen/literal/textureStore/84f4f4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/84f4f4.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_84f4f4 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_84f4f4 = func():void {
+  $B2: {
     %3:texture_storage_2d_array<rgba16sint, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<u32>(1u), 1i, vec4<i32>(1i)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_84f4f4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_84f4f4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_84f4f4
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/8676c9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/8676c9.wgsl.expected.ir.msl
index 4d86f51..4ca237c 100644
--- a/test/tint/builtins/gen/literal/textureStore/8676c9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/8676c9.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<r32uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_8676c9 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_8676c9 = func():void {
+  $B2: {
     %3:texture_storage_1d<r32uint, read_write> = load %arg_0
     %4:void = textureStore %3, 1i, vec4<u32>(1u)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_8676c9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_8676c9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_8676c9
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/86f713.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/86f713.wgsl.expected.ir.msl
index da72d6d..39ac939 100644
--- a/test/tint/builtins/gen/literal/textureStore/86f713.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/86f713.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba16sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_86f713 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_86f713 = func():void {
+  $B2: {
     %3:texture_storage_3d<rgba16sint, read_write> = load %arg_0
     %4:void = textureStore %3, vec3<i32>(1i), vec4<i32>(1i)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_86f713
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_86f713
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_86f713
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/872747.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/872747.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/872747.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/872747.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/877c92.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/877c92.wgsl.expected.ir.msl
index c2817e4..c8d0780 100644
--- a/test/tint/builtins/gen/literal/textureStore/877c92.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/877c92.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_877c92 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_877c92 = func():void {
+  $B2: {
     %3:texture_storage_1d<rgba8snorm, read_write> = load %arg_0
     %4:void = textureStore %3, 1i, vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_877c92
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_877c92
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_877c92
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/8815b1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/8815b1.wgsl.expected.ir.msl
index ecc278e..9dd6d504 100644
--- a/test/tint/builtins/gen/literal/textureStore/8815b1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/8815b1.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_8815b1 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_8815b1 = func():void {
+  $B2: {
     %3:texture_storage_2d_array<rgba16sint, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<i32>(1i), 1u, vec4<i32>(1i)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_8815b1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_8815b1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_8815b1
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/885921.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/885921.wgsl.expected.ir.msl
index 092d018..1679f62 100644
--- a/test/tint/builtins/gen/literal/textureStore/885921.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/885921.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_885921 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_885921 = func():void {
+  $B2: {
     %3:texture_storage_3d<rgba8unorm, read_write> = load %arg_0
     %4:void = textureStore %3, vec3<u32>(1u), vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_885921
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_885921
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_885921
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/88ce7e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/88ce7e.wgsl.expected.ir.msl
index 1ff7529..177dd5c 100644
--- a/test/tint/builtins/gen/literal/textureStore/88ce7e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/88ce7e.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_88ce7e = func():void -> %b2 {
-  %b2 = block {
+%textureStore_88ce7e = func():void {
+  $B2: {
     %3:texture_storage_3d<rgba8sint, read_write> = load %arg_0
     %4:void = textureStore %3, vec3<i32>(1i), vec4<i32>(1i)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_88ce7e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_88ce7e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_88ce7e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/8a16b0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/8a16b0.wgsl.expected.ir.msl
index 1813e96..5736334 100644
--- a/test/tint/builtins/gen/literal/textureStore/8a16b0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/8a16b0.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_8a16b0 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_8a16b0 = func():void {
+  $B2: {
     %3:texture_storage_2d_array<r32uint, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<i32>(1i), 1i, vec4<u32>(1u)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_8a16b0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_8a16b0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_8a16b0
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/8a46ff.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/8a46ff.wgsl.expected.ir.msl
index 4fb095c..c62062c 100644
--- a/test/tint/builtins/gen/literal/textureStore/8a46ff.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/8a46ff.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba16float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_8a46ff = func():void -> %b2 {
-  %b2 = block {
+%textureStore_8a46ff = func():void {
+  $B2: {
     %3:texture_storage_2d<rgba16float, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<i32>(1i), vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_8a46ff
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_8a46ff
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_8a46ff
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/8a85b9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/8a85b9.wgsl.expected.ir.msl
index 43a30ca..9ca0cf7 100644
--- a/test/tint/builtins/gen/literal/textureStore/8a85b9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/8a85b9.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_8a85b9 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_8a85b9 = func():void {
+  $B2: {
     %3:texture_storage_2d_array<rgba8sint, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<i32>(1i), 1i, vec4<i32>(1i)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_8a85b9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_8a85b9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_8a85b9
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/8a8681.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/8a8681.wgsl.expected.ir.msl
index 8469e7e..f6cda78 100644
--- a/test/tint/builtins/gen/literal/textureStore/8a8681.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/8a8681.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rg32uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_8a8681 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_8a8681 = func():void {
+  $B2: {
     %3:texture_storage_2d<rg32uint, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<u32>(1u), vec4<u32>(1u)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_8a8681
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_8a8681
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_8a8681
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/8ae0bc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/8ae0bc.wgsl.expected.ir.msl
index 2e67176..aee9074 100644
--- a/test/tint/builtins/gen/literal/textureStore/8ae0bc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/8ae0bc.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_8ae0bc = func():void -> %b2 {
-  %b2 = block {
+%textureStore_8ae0bc = func():void {
+  $B2: {
     %3:texture_storage_2d_array<rgba8snorm, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<i32>(1i), 1u, vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_8ae0bc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_8ae0bc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_8ae0bc
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/8b9310.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/8b9310.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/8b9310.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/8b9310.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/8bb287.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/8bb287.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/8bb287.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/8bb287.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/8c76e9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/8c76e9.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/8c76e9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/8c76e9.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/8cd611.wgsl.expected.ir.msl
similarity index 75%
copy from test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.ir.msl
copy to test/tint/builtins/gen/literal/textureStore/8cd611.wgsl.expected.ir.msl
index efdd3b1..877ebc6 100644
--- a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/8cd611.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/8cd841.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/8cd841.wgsl.expected.ir.msl
index f182163..e734118 100644
--- a/test/tint/builtins/gen/literal/textureStore/8cd841.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/8cd841.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_8cd841 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_8cd841 = func():void {
+  $B2: {
     %3:texture_storage_2d_array<r32uint, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<i32>(1i), 1u, vec4<u32>(1u)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_8cd841
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_8cd841
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_8cd841
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/8dc54f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/8dc54f.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/8dc54f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/8dc54f.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/8e0479.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/8e0479.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/8e0479.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/8e0479.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/8ebdc9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/8ebdc9.wgsl.expected.ir.msl
index a555e82..b5c2a12 100644
--- a/test/tint/builtins/gen/literal/textureStore/8ebdc9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/8ebdc9.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_8ebdc9 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_8ebdc9 = func():void {
+  $B2: {
     %3:texture_storage_2d_array<rgba16float, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<u32>(1u), 1u, vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_8ebdc9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_8ebdc9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_8ebdc9
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/8ed9f8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/8ed9f8.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/8ed9f8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/8ed9f8.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/8f71a1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/8f71a1.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/8f71a1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/8f71a1.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/8ff674.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/8ff674.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/8ff674.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/8ff674.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/90960e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/90960e.wgsl.expected.ir.msl
index ec59fb4..899f8b4 100644
--- a/test/tint/builtins/gen/literal/textureStore/90960e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/90960e.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba16float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_90960e = func():void -> %b2 {
-  %b2 = block {
+%textureStore_90960e = func():void {
+  $B2: {
     %3:texture_storage_1d<rgba16float, read_write> = load %arg_0
     %4:void = textureStore %3, 1i, vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_90960e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_90960e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_90960e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/90a553.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/90a553.wgsl.expected.ir.msl
index ab54cf7..e233fbe 100644
--- a/test/tint/builtins/gen/literal/textureStore/90a553.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/90a553.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_90a553 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_90a553 = func():void {
+  $B2: {
     %3:texture_storage_2d_array<rgba8sint, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<i32>(1i), 1u, vec4<i32>(1i)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_90a553
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_90a553
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_90a553
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/958353.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/958353.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/958353.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/958353.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/959d94.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/959d94.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/959d94.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/959d94.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/95e452.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/95e452.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/95e452.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/95e452.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/969534.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/969534.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/969534.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/969534.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/976636.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/976636.wgsl.expected.ir.msl
index aca9814..cfffe30 100644
--- a/test/tint/builtins/gen/literal/textureStore/976636.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/976636.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_976636 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_976636 = func():void {
+  $B2: {
     %3:texture_storage_1d<rgba8sint, read_write> = load %arg_0
     %4:void = textureStore %3, 1u, vec4<i32>(1i)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_976636
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_976636
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_976636
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/9938b7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/9938b7.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/9938b7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/9938b7.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/9a3ecc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/9a3ecc.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/9a3ecc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/9a3ecc.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/9aedd3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/9aedd3.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/9aedd3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/9aedd3.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/9ba5c1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/9ba5c1.wgsl.expected.ir.msl
index 1d37ed8..a25776a 100644
--- a/test/tint/builtins/gen/literal/textureStore/9ba5c1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/9ba5c1.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba16uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_9ba5c1 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_9ba5c1 = func():void {
+  $B2: {
     %3:texture_storage_1d<rgba16uint, read_write> = load %arg_0
     %4:void = textureStore %3, 1u, vec4<u32>(1u)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_9ba5c1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_9ba5c1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_9ba5c1
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/9cea9e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/9cea9e.wgsl.expected.ir.msl
index 1150c4e..5636c1f 100644
--- a/test/tint/builtins/gen/literal/textureStore/9cea9e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/9cea9e.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_9cea9e = func():void -> %b2 {
-  %b2 = block {
+%textureStore_9cea9e = func():void {
+  $B2: {
     %3:texture_storage_2d_array<rgba8uint, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<i32>(1i), 1u, vec4<u32>(1u)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_9cea9e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_9cea9e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_9cea9e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/9d7c62.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/9d7c62.wgsl.expected.ir.msl
index 89490d8..37bac20 100644
--- a/test/tint/builtins/gen/literal/textureStore/9d7c62.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/9d7c62.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_9d7c62 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_9d7c62 = func():void {
+  $B2: {
     %3:texture_storage_1d<rgba8uint, read_write> = load %arg_0
     %4:void = textureStore %3, 1i, vec4<u32>(1u)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_9d7c62
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_9d7c62
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_9d7c62
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/9d8668.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/9d8668.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/9d8668.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/9d8668.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/9d9cd5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/9d9cd5.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/9d9cd5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/9d9cd5.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/9e3ec5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/9e3ec5.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/9e3ec5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/9e3ec5.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/9e5bc2.wgsl.expected.ir.msl
similarity index 75%
copy from test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.ir.msl
copy to test/tint/builtins/gen/literal/textureStore/9e5bc2.wgsl.expected.ir.msl
index efdd3b1..877ebc6 100644
--- a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/9e5bc2.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/9f5318.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/9f5318.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/9f5318.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/9f5318.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/9f7cea.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/9f7cea.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/9f7cea.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/9f7cea.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/a0022f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/a0022f.wgsl.expected.ir.msl
index fad3e8b..38a40c9 100644
--- a/test/tint/builtins/gen/literal/textureStore/a0022f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/a0022f.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_a0022f = func():void -> %b2 {
-  %b2 = block {
+%textureStore_a0022f = func():void {
+  $B2: {
     %3:texture_storage_2d_array<r32sint, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<i32>(1i), 1i, vec4<i32>(1i)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_a0022f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_a0022f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_a0022f
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/a0f96e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/a0f96e.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/a0f96e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/a0f96e.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/a1352c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/a1352c.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/a1352c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/a1352c.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/a14041.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/a14041.wgsl.expected.ir.msl
index 3199543..0074ea5 100644
--- a/test/tint/builtins/gen/literal/textureStore/a14041.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/a14041.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba32sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_a14041 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_a14041 = func():void {
+  $B2: {
     %3:texture_storage_1d<rgba32sint, read_write> = load %arg_0
     %4:void = textureStore %3, 1i, vec4<i32>(1i)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_a14041
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_a14041
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_a14041
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/a165b8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/a165b8.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/a165b8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/a165b8.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/a19a12.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/a19a12.wgsl.expected.ir.msl
index a8c70a1..75a6be8 100644
--- a/test/tint/builtins/gen/literal/textureStore/a19a12.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/a19a12.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba32uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_a19a12 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_a19a12 = func():void {
+  $B2: {
     %3:texture_storage_3d<rgba32uint, read_write> = load %arg_0
     %4:void = textureStore %3, vec3<i32>(1i), vec4<u32>(1u)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_a19a12
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_a19a12
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_a19a12
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/a24491.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/a24491.wgsl.expected.ir.msl
index 9d65d2b..68fcfad 100644
--- a/test/tint/builtins/gen/literal/textureStore/a24491.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/a24491.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba32uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_a24491 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_a24491 = func():void {
+  $B2: {
     %3:texture_storage_2d<rgba32uint, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<u32>(1u), vec4<u32>(1u)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_a24491
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_a24491
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_a24491
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/a4c338.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/a4c338.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/a4c338.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/a4c338.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/a5b88e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/a5b88e.wgsl.expected.ir.msl
index 4c45bb1..a418b74 100644
--- a/test/tint/builtins/gen/literal/textureStore/a5b88e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/a5b88e.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba16sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_a5b88e = func():void -> %b2 {
-  %b2 = block {
+%textureStore_a5b88e = func():void {
+  $B2: {
     %3:texture_storage_3d<rgba16sint, read_write> = load %arg_0
     %4:void = textureStore %3, vec3<u32>(1u), vec4<i32>(1i)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_a5b88e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_a5b88e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_a5b88e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/a5c925.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/a5c925.wgsl.expected.ir.msl
index 3553c4f..21f5454 100644
--- a/test/tint/builtins/gen/literal/textureStore/a5c925.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/a5c925.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_a5c925 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_a5c925 = func():void {
+  $B2: {
     %3:texture_storage_3d<rgba8sint, read_write> = load %arg_0
     %4:void = textureStore %3, vec3<u32>(1u), vec4<i32>(1i)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_a5c925
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_a5c925
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_a5c925
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/a5e80d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/a5e80d.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/a5e80d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/a5e80d.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/a66ca4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/a66ca4.wgsl.expected.ir.msl
index 299d29b..c4e76fe 100644
--- a/test/tint/builtins/gen/literal/textureStore/a66ca4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/a66ca4.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_a66ca4 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_a66ca4 = func():void {
+  $B2: {
     %3:texture_storage_3d<bgra8unorm, read_write> = load %arg_0
     %4:void = textureStore %3, vec3<i32>(1i), vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_a66ca4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_a66ca4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_a66ca4
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/a6a986.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/a6a986.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/a6a986.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/a6a986.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/a6e78f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/a6e78f.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/a6e78f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/a6e78f.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/a702b6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/a702b6.wgsl.expected.ir.msl
index 98bd7e1..cef39ea 100644
--- a/test/tint/builtins/gen/literal/textureStore/a702b6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/a702b6.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_a702b6 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_a702b6 = func():void {
+  $B2: {
     %3:texture_storage_2d_array<rg32uint, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<i32>(1i), 1i, vec4<u32>(1u)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_a702b6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_a702b6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_a702b6
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/a7fc47.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/a7fc47.wgsl.expected.ir.msl
new file mode 100644
index 0000000..09e3732
--- /dev/null
+++ b/test/tint/builtins/gen/literal/textureStore/a7fc47.wgsl.expected.ir.msl
@@ -0,0 +1,39 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_1d<r8unorm, read_write>, read> = var @binding_point(1, 0)
+}
+
+%textureStore_a7fc47 = func():void {
+  $B2: {
+    %3:texture_storage_1d<r8unorm, read_write> = load %arg_0
+    %4:void = textureStore %3, 1u, vec4<f32>(1.0f)
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %textureStore_a7fc47
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %textureStore_a7fc47
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %textureStore_a7fc47
+    ret
+  }
+}
+
+invalid access control for storage texture
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/textureStore/a9298c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/a9298c.wgsl.expected.ir.msl
index af49adb..8c694b5 100644
--- a/test/tint/builtins/gen/literal/textureStore/a9298c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/a9298c.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rg32uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_a9298c = func():void -> %b2 {
-  %b2 = block {
+%textureStore_a9298c = func():void {
+  $B2: {
     %3:texture_storage_1d<rg32uint, read_write> = load %arg_0
     %4:void = textureStore %3, 1u, vec4<u32>(1u)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_a9298c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_a9298c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_a9298c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/a9426c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/a9426c.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/a9426c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/a9426c.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/ab03b6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/ab03b6.wgsl.expected.ir.msl
index 9ddba8d..a49d67a 100644
--- a/test/tint/builtins/gen/literal/textureStore/ab03b6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/ab03b6.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_ab03b6 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_ab03b6 = func():void {
+  $B2: {
     %3:texture_storage_3d<rgba8uint, read_write> = load %arg_0
     %4:void = textureStore %3, vec3<i32>(1i), vec4<u32>(1u)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_ab03b6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_ab03b6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_ab03b6
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/ab788e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/ab788e.wgsl.expected.ir.msl
index ba02744..81e3ec0 100644
--- a/test/tint/builtins/gen/literal/textureStore/ab788e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/ab788e.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rg32float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_ab788e = func():void -> %b2 {
-  %b2 = block {
+%textureStore_ab788e = func():void {
+  $B2: {
     %3:texture_storage_2d<rg32float, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<i32>(1i), vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_ab788e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_ab788e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_ab788e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/abdd21.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/abdd21.wgsl.expected.ir.msl
index 0c556e0..9f68be7 100644
--- a/test/tint/builtins/gen/literal/textureStore/abdd21.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/abdd21.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_abdd21 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_abdd21 = func():void {
+  $B2: {
     %3:texture_storage_2d_array<r32uint, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<u32>(1u), 1u, vec4<u32>(1u)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_abdd21
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_abdd21
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_abdd21
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/ac0a55.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/ac0a55.wgsl.expected.ir.msl
index a35801d..09b997d 100644
--- a/test/tint/builtins/gen/literal/textureStore/ac0a55.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/ac0a55.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_ac0a55 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_ac0a55 = func():void {
+  $B2: {
     %3:texture_storage_2d_array<rgba32uint, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<u32>(1u), 1u, vec4<u32>(1u)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_ac0a55
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_ac0a55
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_ac0a55
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/ac67aa.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/ac67aa.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/ac67aa.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/ac67aa.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/ae6a2a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/ae6a2a.wgsl.expected.ir.msl
new file mode 100644
index 0000000..0bac92e
--- /dev/null
+++ b/test/tint/builtins/gen/literal/textureStore/ae6a2a.wgsl.expected.ir.msl
@@ -0,0 +1,39 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_2d_array<r8unorm, read_write>, read> = var @binding_point(1, 0)
+}
+
+%textureStore_ae6a2a = func():void {
+  $B2: {
+    %3:texture_storage_2d_array<r8unorm, read_write> = load %arg_0
+    %4:void = textureStore %3, vec2<u32>(1u), 1u, vec4<f32>(1.0f)
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %textureStore_ae6a2a
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %textureStore_ae6a2a
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %textureStore_ae6a2a
+    ret
+  }
+}
+
+invalid access control for storage texture
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/textureStore/aeb38a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/aeb38a.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/aeb38a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/aeb38a.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/aedea3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/aedea3.wgsl.expected.ir.msl
index 910116e..1033809 100644
--- a/test/tint/builtins/gen/literal/textureStore/aedea3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/aedea3.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_aedea3 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_aedea3 = func():void {
+  $B2: {
     %3:texture_storage_2d_array<rgba16uint, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<u32>(1u), 1i, vec4<u32>(1u)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_aedea3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_aedea3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_aedea3
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/b16110.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/b16110.wgsl.expected.ir.msl
index 717d2d7..f4fe414 100644
--- a/test/tint/builtins/gen/literal/textureStore/b16110.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/b16110.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_b16110 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_b16110 = func():void {
+  $B2: {
     %3:texture_storage_2d_array<rgba32sint, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<u32>(1u), 1u, vec4<i32>(1i)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_b16110
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_b16110
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_b16110
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/b286b4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/b286b4.wgsl.expected.ir.msl
index 840542c..2b717c4 100644
--- a/test/tint/builtins/gen/literal/textureStore/b286b4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/b286b4.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_b286b4 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_b286b4 = func():void {
+  $B2: {
     %3:texture_storage_2d_array<rgba32uint, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<i32>(1i), 1i, vec4<u32>(1u)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_b286b4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_b286b4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_b286b4
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/b36bc1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/b36bc1.wgsl.expected.ir.msl
index 051f0ec..b5586e4 100644
--- a/test/tint/builtins/gen/literal/textureStore/b36bc1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/b36bc1.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_b36bc1 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_b36bc1 = func():void {
+  $B2: {
     %3:texture_storage_3d<rgba8uint, read_write> = load %arg_0
     %4:void = textureStore %3, vec3<u32>(1u), vec4<u32>(1u)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_b36bc1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_b36bc1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_b36bc1
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/b42fd3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/b42fd3.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/b42fd3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/b42fd3.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/b4389e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/b4389e.wgsl.expected.ir.msl
index 82e564f..c59af0a 100644
--- a/test/tint/builtins/gen/literal/textureStore/b4389e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/b4389e.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_b4389e = func():void -> %b2 {
-  %b2 = block {
+%textureStore_b4389e = func():void {
+  $B2: {
     %3:texture_storage_3d<bgra8unorm, read_write> = load %arg_0
     %4:void = textureStore %3, vec3<u32>(1u), vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_b4389e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_b4389e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_b4389e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/b706b1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/b706b1.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/b706b1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/b706b1.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/b70ded.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/b70ded.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/b70ded.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/b70ded.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/b71c13.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/b71c13.wgsl.expected.ir.msl
index dee9782..09885a5 100644
--- a/test/tint/builtins/gen/literal/textureStore/b71c13.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/b71c13.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_b71c13 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_b71c13 = func():void {
+  $B2: {
     %3:texture_storage_2d_array<rg32float, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<u32>(1u), 1i, vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_b71c13
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_b71c13
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_b71c13
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/b7232c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/b7232c.wgsl.expected.ir.msl
index b1d9f88..f636376 100644
--- a/test/tint/builtins/gen/literal/textureStore/b7232c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/b7232c.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<r32float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_b7232c = func():void -> %b2 {
-  %b2 = block {
+%textureStore_b7232c = func():void {
+  $B2: {
     %3:texture_storage_1d<r32float, read_write> = load %arg_0
     %4:void = textureStore %3, 1u, vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_b7232c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_b7232c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_b7232c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/b76ff3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/b76ff3.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/b76ff3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/b76ff3.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/b77161.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/b77161.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/b77161.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/b77161.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/b89ffb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/b89ffb.wgsl.expected.ir.msl
index 49690af..4c2e579 100644
--- a/test/tint/builtins/gen/literal/textureStore/b89ffb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/b89ffb.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_b89ffb = func():void -> %b2 {
-  %b2 = block {
+%textureStore_b89ffb = func():void {
+  $B2: {
     %3:texture_storage_2d_array<bgra8unorm, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<i32>(1i), 1u, vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_b89ffb
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_b89ffb
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_b89ffb
     ret
   }
diff --git a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/b91b86.wgsl.expected.ir.msl
similarity index 75%
copy from test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.ir.msl
copy to test/tint/builtins/gen/literal/textureStore/b91b86.wgsl.expected.ir.msl
index efdd3b1..877ebc6 100644
--- a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/b91b86.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/b9c81a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/b9c81a.wgsl.expected.ir.msl
index 09b6c43..ae15d5e 100644
--- a/test/tint/builtins/gen/literal/textureStore/b9c81a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/b9c81a.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rg32uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_b9c81a = func():void -> %b2 {
-  %b2 = block {
+%textureStore_b9c81a = func():void {
+  $B2: {
     %3:texture_storage_3d<rg32uint, read_write> = load %arg_0
     %4:void = textureStore %3, vec3<i32>(1i), vec4<u32>(1u)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_b9c81a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_b9c81a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_b9c81a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/b9d863.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/b9d863.wgsl.expected.ir.msl
index 394cf08..12cd07f 100644
--- a/test/tint/builtins/gen/literal/textureStore/b9d863.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/b9d863.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_b9d863 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_b9d863 = func():void {
+  $B2: {
     %3:texture_storage_2d_array<rgba16uint, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<i32>(1i), 1i, vec4<u32>(1u)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_b9d863
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_b9d863
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_b9d863
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/bbcb7f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/bbcb7f.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/bbcb7f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/bbcb7f.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/bc1423.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/bc1423.wgsl.expected.ir.msl
index 8121eca..d3cdf75 100644
--- a/test/tint/builtins/gen/literal/textureStore/bc1423.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/bc1423.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_bc1423 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_bc1423 = func():void {
+  $B2: {
     %3:texture_storage_2d_array<rgba8uint, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<u32>(1u), 1i, vec4<u32>(1u)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_bc1423
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_bc1423
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_bc1423
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/bcc97a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/bcc97a.wgsl.expected.ir.msl
index 505ca96..a09afd9 100644
--- a/test/tint/builtins/gen/literal/textureStore/bcc97a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/bcc97a.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<r32sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_bcc97a = func():void -> %b2 {
-  %b2 = block {
+%textureStore_bcc97a = func():void {
+  $B2: {
     %3:texture_storage_2d<r32sint, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<i32>(1i), vec4<i32>(1i)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_bcc97a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_bcc97a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_bcc97a
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/bd6602.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/bd6602.wgsl.expected.ir.msl
index 5741091..97b7f93 100644
--- a/test/tint/builtins/gen/literal/textureStore/bd6602.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/bd6602.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_bd6602 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_bd6602 = func():void {
+  $B2: {
     %3:texture_storage_2d_array<rg32uint, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<u32>(1u), 1i, vec4<u32>(1u)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_bd6602
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_bd6602
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_bd6602
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/be6e30.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/be6e30.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/be6e30.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/be6e30.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/bedbfc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/bedbfc.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/bedbfc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/bedbfc.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/bf775c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/bf775c.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/bf775c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/bf775c.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/c06463.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/c06463.wgsl.expected.ir.msl
index b1388b4..fe4ca3e 100644
--- a/test/tint/builtins/gen/literal/textureStore/c06463.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/c06463.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_c06463 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_c06463 = func():void {
+  $B2: {
     %3:texture_storage_2d_array<bgra8unorm, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<i32>(1i), 1i, vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_c06463
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_c06463
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_c06463
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/c1c664.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/c1c664.wgsl.expected.ir.msl
index 895bb0b..42882cb 100644
--- a/test/tint/builtins/gen/literal/textureStore/c1c664.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/c1c664.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba32float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_c1c664 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_c1c664 = func():void {
+  $B2: {
     %3:texture_storage_2d<rgba32float, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<i32>(1i), vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_c1c664
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_c1c664
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_c1c664
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/c1f29e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/c1f29e.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/c1f29e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/c1f29e.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/c1f760.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/c1f760.wgsl.expected.ir.msl
index 54aa592..f911f3e 100644
--- a/test/tint/builtins/gen/literal/textureStore/c1f760.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/c1f760.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_c1f760 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_c1f760 = func():void {
+  $B2: {
     %3:texture_storage_2d_array<rgba16uint, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<u32>(1u), 1u, vec4<u32>(1u)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_c1f760
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_c1f760
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_c1f760
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/c2ca46.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/c2ca46.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/c2ca46.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/c2ca46.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/c32905.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/c32905.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/c32905.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/c32905.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/c33478.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/c33478.wgsl.expected.ir.msl
index ac7b7c2..22e7a69 100644
--- a/test/tint/builtins/gen/literal/textureStore/c33478.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/c33478.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rg32float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_c33478 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_c33478 = func():void {
+  $B2: {
     %3:texture_storage_3d<rg32float, read_write> = load %arg_0
     %4:void = textureStore %3, vec3<i32>(1i), vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_c33478
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_c33478
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_c33478
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/c35268.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/c35268.wgsl.expected.ir.msl
index cd8ee14..f80f8cd 100644
--- a/test/tint/builtins/gen/literal/textureStore/c35268.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/c35268.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_c35268 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_c35268 = func():void {
+  $B2: {
     %3:texture_storage_2d_array<r32uint, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<u32>(1u), 1i, vec4<u32>(1u)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_c35268
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_c35268
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_c35268
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/c5af1e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/c5af1e.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/c5af1e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/c5af1e.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/c63f05.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/c63f05.wgsl.expected.ir.msl
index 371a946..a24e662 100644
--- a/test/tint/builtins/gen/literal/textureStore/c63f05.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/c63f05.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_c63f05 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_c63f05 = func():void {
+  $B2: {
     %3:texture_storage_2d_array<rgba32sint, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<u32>(1u), 1i, vec4<i32>(1i)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_c63f05
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_c63f05
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_c63f05
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/c79451.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/c79451.wgsl.expected.ir.msl
index 34cac56..198956e 100644
--- a/test/tint/builtins/gen/literal/textureStore/c79451.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/c79451.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba16sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_c79451 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_c79451 = func():void {
+  $B2: {
     %3:texture_storage_1d<rgba16sint, read_write> = load %arg_0
     %4:void = textureStore %3, 1u, vec4<i32>(1i)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_c79451
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_c79451
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_c79451
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/c863be.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/c863be.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/c863be.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/c863be.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/c9d780.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/c9d780.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/c9d780.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/c9d780.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/cb3b0b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/cb3b0b.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/cb3b0b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/cb3b0b.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/ccac20.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/ccac20.wgsl.expected.ir.msl
index fb962c7..b35917d 100644
--- a/test/tint/builtins/gen/literal/textureStore/ccac20.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/ccac20.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba32float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_ccac20 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_ccac20 = func():void {
+  $B2: {
     %3:texture_storage_2d<rgba32float, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<u32>(1u), vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_ccac20
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_ccac20
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_ccac20
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/cd6755.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/cd6755.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/cd6755.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/cd6755.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/ceb832.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/ceb832.wgsl.expected.ir.msl
index 1f79543..4bd44f7 100644
--- a/test/tint/builtins/gen/literal/textureStore/ceb832.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/ceb832.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_ceb832 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_ceb832 = func():void {
+  $B2: {
     %3:texture_storage_2d_array<r32sint, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<u32>(1u), 1u, vec4<i32>(1i)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_ceb832
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_ceb832
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_ceb832
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/d0d62c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/d0d62c.wgsl.expected.ir.msl
index cd844ec16..2c0c22a 100644
--- a/test/tint/builtins/gen/literal/textureStore/d0d62c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/d0d62c.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_d0d62c = func():void -> %b2 {
-  %b2 = block {
+%textureStore_d0d62c = func():void {
+  $B2: {
     %3:texture_storage_2d<rgba8uint, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<i32>(1i), vec4<u32>(1u)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_d0d62c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_d0d62c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_d0d62c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/d0fadc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/d0fadc.wgsl.expected.ir.msl
index 63810da..9e45831 100644
--- a/test/tint/builtins/gen/literal/textureStore/d0fadc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/d0fadc.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_d0fadc = func():void -> %b2 {
-  %b2 = block {
+%textureStore_d0fadc = func():void {
+  $B2: {
     %3:texture_storage_2d_array<rgba8unorm, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<i32>(1i), 1u, vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_d0fadc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_d0fadc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_d0fadc
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/d19db4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/d19db4.wgsl.expected.ir.msl
index ebb7f82..52ec638 100644
--- a/test/tint/builtins/gen/literal/textureStore/d19db4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/d19db4.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rg32sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_d19db4 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_d19db4 = func():void {
+  $B2: {
     %3:texture_storage_3d<rg32sint, read_write> = load %arg_0
     %4:void = textureStore %3, vec3<i32>(1i), vec4<i32>(1i)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_d19db4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_d19db4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_d19db4
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/d1ab82.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/d1ab82.wgsl.expected.ir.msl
index 0eac9f2..de4d75b 100644
--- a/test/tint/builtins/gen/literal/textureStore/d1ab82.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/d1ab82.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_d1ab82 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_d1ab82 = func():void {
+  $B2: {
     %3:texture_storage_2d<rgba8unorm, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<i32>(1i), vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_d1ab82
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_d1ab82
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_d1ab82
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/d26166.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/d26166.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/d26166.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/d26166.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/d2b565.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/d2b565.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/d2b565.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/d2b565.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/d3a22b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/d3a22b.wgsl.expected.ir.msl
index b818438..4bc5fe7 100644
--- a/test/tint/builtins/gen/literal/textureStore/d3a22b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/d3a22b.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba32uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_d3a22b = func():void -> %b2 {
-  %b2 = block {
+%textureStore_d3a22b = func():void {
+  $B2: {
     %3:texture_storage_3d<rgba32uint, read_write> = load %arg_0
     %4:void = textureStore %3, vec3<u32>(1u), vec4<u32>(1u)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_d3a22b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_d3a22b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_d3a22b
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/d4aa95.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/d4aa95.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/d4aa95.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/d4aa95.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/d55e65.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/d55e65.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/d55e65.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/d55e65.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/d73b5c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/d73b5c.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/d73b5c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/d73b5c.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/d82b0a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/d82b0a.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/d82b0a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/d82b0a.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/d86d33.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/d86d33.wgsl.expected.ir.msl
index 01690f6..cd4ad3a 100644
--- a/test/tint/builtins/gen/literal/textureStore/d86d33.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/d86d33.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_d86d33 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_d86d33 = func():void {
+  $B2: {
     %3:texture_storage_2d_array<rgba8snorm, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<u32>(1u), 1i, vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_d86d33
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_d86d33
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_d86d33
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/da530c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/da530c.wgsl.expected.ir.msl
index 487637f..e966878 100644
--- a/test/tint/builtins/gen/literal/textureStore/da530c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/da530c.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_da530c = func():void -> %b2 {
-  %b2 = block {
+%textureStore_da530c = func():void {
+  $B2: {
     %3:texture_storage_2d<rgba8sint, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<u32>(1u), vec4<i32>(1i)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_da530c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_da530c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_da530c
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/db5128.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/db5128.wgsl.expected.ir.msl
index 233f4e7..6ab468a 100644
--- a/test/tint/builtins/gen/literal/textureStore/db5128.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/db5128.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_db5128 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_db5128 = func():void {
+  $B2: {
     %3:texture_storage_2d_array<rgba16uint, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<i32>(1i), 1u, vec4<u32>(1u)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_db5128
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_db5128
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_db5128
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/db92a2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/db92a2.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/db92a2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/db92a2.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/dce0e2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/dce0e2.wgsl.expected.ir.msl
index ea22e97..6ee0143 100644
--- a/test/tint/builtins/gen/literal/textureStore/dce0e2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/dce0e2.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_dce0e2 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_dce0e2 = func():void {
+  $B2: {
     %3:texture_storage_2d_array<r32float, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<u32>(1u), 1i, vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_dce0e2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_dce0e2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_dce0e2
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/dd7d81.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/dd7d81.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/dd7d81.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/dd7d81.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/dd8b29.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/dd8b29.wgsl.expected.ir.msl
index af0c31d..3d23822 100644
--- a/test/tint/builtins/gen/literal/textureStore/dd8b29.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/dd8b29.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_dd8b29 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_dd8b29 = func():void {
+  $B2: {
     %3:texture_storage_2d_array<rgba8uint, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<i32>(1i), 1i, vec4<u32>(1u)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_dd8b29
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_dd8b29
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_dd8b29
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/dde364.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/dde364.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/dde364.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/dde364.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/de38e5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/de38e5.wgsl.expected.ir.msl
index 8f03bf8..65c1671 100644
--- a/test/tint/builtins/gen/literal/textureStore/de38e5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/de38e5.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_de38e5 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_de38e5 = func():void {
+  $B2: {
     %3:texture_storage_3d<rgba8snorm, read_write> = load %arg_0
     %4:void = textureStore %3, vec3<u32>(1u), vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_de38e5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_de38e5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_de38e5
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/de4b94.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/de4b94.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/de4b94.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/de4b94.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/df0c51.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/df0c51.wgsl.expected.ir.msl
index 3c77f81..d0105fc 100644
--- a/test/tint/builtins/gen/literal/textureStore/df0c51.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/df0c51.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<r32sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_df0c51 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_df0c51 = func():void {
+  $B2: {
     %3:texture_storage_3d<r32sint, read_write> = load %arg_0
     %4:void = textureStore %3, vec3<u32>(1u), vec4<i32>(1i)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_df0c51
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_df0c51
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_df0c51
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/df2ca4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/df2ca4.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/df2ca4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/df2ca4.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/dfa9a1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/dfa9a1.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/dfa9a1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/dfa9a1.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/dffb13.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/dffb13.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/dffb13.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/dffb13.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/e077e7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/e077e7.wgsl.expected.ir.msl
index 5a5fd87..0ceadf3 100644
--- a/test/tint/builtins/gen/literal/textureStore/e077e7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/e077e7.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rg32sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_e077e7 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_e077e7 = func():void {
+  $B2: {
     %3:texture_storage_1d<rg32sint, read_write> = load %arg_0
     %4:void = textureStore %3, 1i, vec4<i32>(1i)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_e077e7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_e077e7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_e077e7
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/e0b666.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/e0b666.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/e0b666.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/e0b666.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/e1784d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/e1784d.wgsl.expected.ir.msl
index e9fcf7d..da82960 100644
--- a/test/tint/builtins/gen/literal/textureStore/e1784d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/e1784d.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_e1784d = func():void -> %b2 {
-  %b2 = block {
+%textureStore_e1784d = func():void {
+  $B2: {
     %3:texture_storage_2d_array<rgba32float, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<i32>(1i), 1u, vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_e1784d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_e1784d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_e1784d
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/e38281.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/e38281.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/e38281.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/e38281.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/e46fd8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/e46fd8.wgsl.expected.ir.msl
index 0f9c612..d0c8fc1 100644
--- a/test/tint/builtins/gen/literal/textureStore/e46fd8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/e46fd8.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_e46fd8 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_e46fd8 = func():void {
+  $B2: {
     %3:texture_storage_2d<bgra8unorm, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<u32>(1u), vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_e46fd8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_e46fd8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_e46fd8
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/e72bdc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/e72bdc.wgsl.expected.ir.msl
index e0d04ba..405c746 100644
--- a/test/tint/builtins/gen/literal/textureStore/e72bdc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/e72bdc.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_e72bdc = func():void -> %b2 {
-  %b2 = block {
+%textureStore_e72bdc = func():void {
+  $B2: {
     %3:texture_storage_2d_array<rgba16float, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<i32>(1i), 1u, vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_e72bdc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_e72bdc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_e72bdc
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/e7c6d8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/e7c6d8.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/e7c6d8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/e7c6d8.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/e87f6e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/e87f6e.wgsl.expected.ir.msl
index ca6f79a..0dd0320 100644
--- a/test/tint/builtins/gen/literal/textureStore/e87f6e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/e87f6e.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba16sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_e87f6e = func():void -> %b2 {
-  %b2 = block {
+%textureStore_e87f6e = func():void {
+  $B2: {
     %3:texture_storage_1d<rgba16sint, read_write> = load %arg_0
     %4:void = textureStore %3, 1i, vec4<i32>(1i)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_e87f6e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_e87f6e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_e87f6e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/e885e8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/e885e8.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/e885e8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/e885e8.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/e8cbf7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/e8cbf7.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/e8cbf7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/e8cbf7.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/ea30d2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/ea30d2.wgsl.expected.ir.msl
index 6ec9e68..f5ad660 100644
--- a/test/tint/builtins/gen/literal/textureStore/ea30d2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/ea30d2.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_ea30d2 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_ea30d2 = func():void {
+  $B2: {
     %3:texture_storage_2d_array<rg32sint, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<u32>(1u), 1i, vec4<i32>(1i)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_ea30d2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_ea30d2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_ea30d2
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/eb702f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/eb702f.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/eb702f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/eb702f.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/eb78b9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/eb78b9.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/eb78b9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/eb78b9.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/ed6198.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/ed6198.wgsl.expected.ir.msl
new file mode 100644
index 0000000..d466bd5
--- /dev/null
+++ b/test/tint/builtins/gen/literal/textureStore/ed6198.wgsl.expected.ir.msl
@@ -0,0 +1,39 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_3d<r8unorm, read_write>, read> = var @binding_point(1, 0)
+}
+
+%textureStore_ed6198 = func():void {
+  $B2: {
+    %3:texture_storage_3d<r8unorm, read_write> = load %arg_0
+    %4:void = textureStore %3, vec3<i32>(1i), vec4<f32>(1.0f)
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %textureStore_ed6198
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %textureStore_ed6198
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %textureStore_ed6198
+    ret
+  }
+}
+
+invalid access control for storage texture
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/textureStore/ee6acc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/ee6acc.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/ee6acc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/ee6acc.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/ef9f2f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/ef9f2f.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/ef9f2f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/ef9f2f.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/f05928.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/f05928.wgsl.expected.ir.msl
index 5ddfb33..012fee8 100644
--- a/test/tint/builtins/gen/literal/textureStore/f05928.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/f05928.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_f05928 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_f05928 = func():void {
+  $B2: {
     %3:texture_storage_2d_array<rgba32sint, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<i32>(1i), 1u, vec4<i32>(1i)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_f05928
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_f05928
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_f05928
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/f1e6d3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/f1e6d3.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/f1e6d3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/f1e6d3.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/f64d69.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/f64d69.wgsl.expected.ir.msl
index 469e261..e3c57ac 100644
--- a/test/tint/builtins/gen/literal/textureStore/f64d69.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/f64d69.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<r32sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_f64d69 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_f64d69 = func():void {
+  $B2: {
     %3:texture_storage_1d<r32sint, read_write> = load %arg_0
     %4:void = textureStore %3, 1i, vec4<i32>(1i)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_f64d69
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_f64d69
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_f64d69
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/f6f392.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/f6f392.wgsl.expected.ir.msl
index b300462..89a285b 100644
--- a/test/tint/builtins/gen/literal/textureStore/f6f392.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/f6f392.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_f6f392 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_f6f392 = func():void {
+  $B2: {
     %3:texture_storage_2d_array<rgba8unorm, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<u32>(1u), 1i, vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_f6f392
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_f6f392
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_f6f392
     ret
   }
diff --git a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/f7b0ab.wgsl.expected.ir.msl
similarity index 75%
copy from test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.ir.msl
copy to test/tint/builtins/gen/literal/textureStore/f7b0ab.wgsl.expected.ir.msl
index efdd3b1..877ebc6 100644
--- a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/f7b0ab.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/f8aaf9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/f8aaf9.wgsl.expected.ir.msl
index 1e48fc6..8e36399 100644
--- a/test/tint/builtins/gen/literal/textureStore/f8aaf9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/f8aaf9.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_f8aaf9 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_f8aaf9 = func():void {
+  $B2: {
     %3:texture_storage_2d_array<rgba32sint, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<i32>(1i), 1i, vec4<i32>(1i)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_f8aaf9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_f8aaf9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_f8aaf9
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/f8dead.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/f8dead.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/f8dead.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/f8dead.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/f975a0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/f975a0.wgsl.expected.ir.msl
index 2a6b0a9..8ac603b 100644
--- a/test/tint/builtins/gen/literal/textureStore/f975a0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/f975a0.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_f975a0 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_f975a0 = func():void {
+  $B2: {
     %3:texture_storage_2d<rgba8snorm, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<i32>(1i), vec4<f32>(1.0f)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_f975a0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_f975a0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_f975a0
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/f9be83.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/f9be83.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/f9be83.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/f9be83.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/fb9a8f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/fb9a8f.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/fb9a8f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/fb9a8f.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/fbf53f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/fbf53f.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/fbf53f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/fbf53f.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/fc916e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/fc916e.wgsl.expected.ir.msl
index 57041d5..cc3903b 100644
--- a/test/tint/builtins/gen/literal/textureStore/fc916e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/fc916e.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_fc916e = func():void -> %b2 {
-  %b2 = block {
+%textureStore_fc916e = func():void {
+  $B2: {
     %3:texture_storage_2d_array<rgba32uint, read_write> = load %arg_0
     %4:void = textureStore %3, vec2<u32>(1u), 1i, vec4<u32>(1u)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_fc916e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_fc916e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_fc916e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/textureStore/fcbe66.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/fcbe66.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/fcbe66.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/fcbe66.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/fd350c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/fd350c.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/fd350c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/fd350c.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/textureStore/ff23b3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/ff23b3.wgsl.expected.ir.msl
index bdcdd25..da43bcf 100644
--- a/test/tint/builtins/gen/literal/textureStore/ff23b3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/ff23b3.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba16uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_ff23b3 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_ff23b3 = func():void {
+  $B2: {
     %3:texture_storage_1d<rgba16uint, read_write> = load %arg_0
     %4:void = textureStore %3, 1i, vec4<u32>(1u)
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %textureStore_ff23b3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %textureStore_ff23b3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %textureStore_ff23b3
     ret
   }
diff --git a/test/tint/builtins/gen/literal/transpose/06794e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/transpose/06794e.wgsl.expected.ir.msl
index 3999fea..2ae2d2a 100644
--- a/test/tint/builtins/gen/literal/transpose/06794e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/transpose/06794e.wgsl.expected.ir.msl
@@ -1,32 +1,46 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, mat3x3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%transpose_06794e = func():void -> %b2 {
-  %b2 = block {
+%transpose_06794e = func():void {
+  $B2: {
     %res:ptr<function, mat3x3<f16>, read_write> = var, mat3x3<f16>(vec3<f16>(1.0h))
     %4:mat3x3<f16> = load %res
-    store %prevent_dce, %4
+    %5:void = call %tint_store_and_preserve_padding, %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %6:void = call %transpose_06794e
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %8:void = call %transpose_06794e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %8:void = call %transpose_06794e
+%fragment_main = @fragment func():void {
+  $B4: {
+    %10:void = call %transpose_06794e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %10:void = call %transpose_06794e
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %12:void = call %transpose_06794e
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat3x3<f16>, read_write>, %value_param:mat3x3<f16>):void {
+  $B6: {
+    %15:ptr<storage, vec3<f16>, read_write> = access %target, 0u
+    %16:vec3<f16> = access %value_param, 0u
+    store %15, %16
+    %17:ptr<storage, vec3<f16>, read_write> = access %target, 1u
+    %18:vec3<f16> = access %value_param, 1u
+    store %17, %18
+    %19:ptr<storage, vec3<f16>, read_write> = access %target, 2u
+    %20:vec3<f16> = access %value_param, 2u
+    store %19, %20
     ret
   }
 }
diff --git a/test/tint/builtins/gen/literal/transpose/2585cd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/transpose/2585cd.wgsl.expected.ir.msl
index 432fcff..857b8dd 100644
--- a/test/tint/builtins/gen/literal/transpose/2585cd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/transpose/2585cd.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, mat3x4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%transpose_2585cd = func():void -> %b2 {
-  %b2 = block {
+%transpose_2585cd = func():void {
+  $B2: {
     %res:ptr<function, mat3x4<f32>, read_write> = var, mat3x4<f32>(vec4<f32>(1.0f))
     %4:mat3x4<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %transpose_2585cd
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %transpose_2585cd
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %transpose_2585cd
     ret
   }
diff --git a/test/tint/builtins/gen/literal/transpose/31d679.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/transpose/31d679.wgsl.expected.ir.msl
index 87a5d94..17a5ecb 100644
--- a/test/tint/builtins/gen/literal/transpose/31d679.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/transpose/31d679.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, mat2x2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%transpose_31d679 = func():void -> %b2 {
-  %b2 = block {
+%transpose_31d679 = func():void {
+  $B2: {
     %res:ptr<function, mat2x2<f32>, read_write> = var, mat2x2<f32>(vec2<f32>(1.0f))
     %4:mat2x2<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %transpose_31d679
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %transpose_31d679
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %transpose_31d679
     ret
   }
diff --git a/test/tint/builtins/gen/literal/transpose/31e37e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/transpose/31e37e.wgsl.expected.ir.msl
index b5961e3..41b0ab2 100644
--- a/test/tint/builtins/gen/literal/transpose/31e37e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/transpose/31e37e.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, mat2x4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%transpose_31e37e = func():void -> %b2 {
-  %b2 = block {
+%transpose_31e37e = func():void {
+  $B2: {
     %res:ptr<function, mat2x4<f32>, read_write> = var, mat2x4<f32>(vec4<f32>(1.0f))
     %4:mat2x4<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %transpose_31e37e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %transpose_31e37e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %transpose_31e37e
     ret
   }
diff --git a/test/tint/builtins/gen/literal/transpose/4ce359.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/transpose/4ce359.wgsl.expected.ir.msl
index ccd76d3..0790be4 100644
--- a/test/tint/builtins/gen/literal/transpose/4ce359.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/transpose/4ce359.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, mat4x2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%transpose_4ce359 = func():void -> %b2 {
-  %b2 = block {
+%transpose_4ce359 = func():void {
+  $B2: {
     %res:ptr<function, mat4x2<f32>, read_write> = var, mat4x2<f32>(vec2<f32>(1.0f))
     %4:mat4x2<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %transpose_4ce359
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %transpose_4ce359
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %transpose_4ce359
     ret
   }
diff --git a/test/tint/builtins/gen/literal/transpose/4dc9a1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/transpose/4dc9a1.wgsl.expected.ir.msl
index 5cda6cf..29e88bf 100644
--- a/test/tint/builtins/gen/literal/transpose/4dc9a1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/transpose/4dc9a1.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, mat3x2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%transpose_4dc9a1 = func():void -> %b2 {
-  %b2 = block {
+%transpose_4dc9a1 = func():void {
+  $B2: {
     %res:ptr<function, mat3x2<f32>, read_write> = var, mat3x2<f32>(vec2<f32>(1.0f))
     %4:mat3x2<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %transpose_4dc9a1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %transpose_4dc9a1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %transpose_4dc9a1
     ret
   }
diff --git a/test/tint/builtins/gen/literal/transpose/5edd96.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/transpose/5edd96.wgsl.expected.ir.msl
index 2e1fb73..54d482b 100644
--- a/test/tint/builtins/gen/literal/transpose/5edd96.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/transpose/5edd96.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, mat2x4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%transpose_5edd96 = func():void -> %b2 {
-  %b2 = block {
+%transpose_5edd96 = func():void {
+  $B2: {
     %res:ptr<function, mat2x4<f16>, read_write> = var, mat2x4<f16>(vec4<f16>(1.0h))
     %4:mat2x4<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %transpose_5edd96
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %transpose_5edd96
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %transpose_5edd96
     ret
   }
diff --git a/test/tint/builtins/gen/literal/transpose/5f36bf.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/transpose/5f36bf.wgsl.expected.ir.msl
index e1835a8..2703a21 100644
--- a/test/tint/builtins/gen/literal/transpose/5f36bf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/transpose/5f36bf.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, mat3x4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%transpose_5f36bf = func():void -> %b2 {
-  %b2 = block {
+%transpose_5f36bf = func():void {
+  $B2: {
     %res:ptr<function, mat3x4<f16>, read_write> = var, mat3x4<f16>(vec4<f16>(1.0h))
     %4:mat3x4<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %transpose_5f36bf
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %transpose_5f36bf
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %transpose_5f36bf
     ret
   }
diff --git a/test/tint/builtins/gen/literal/transpose/7be8b2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/transpose/7be8b2.wgsl.expected.ir.msl
index 638c52c..a9e74ea 100644
--- a/test/tint/builtins/gen/literal/transpose/7be8b2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/transpose/7be8b2.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, mat2x2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%transpose_7be8b2 = func():void -> %b2 {
-  %b2 = block {
+%transpose_7be8b2 = func():void {
+  $B2: {
     %res:ptr<function, mat2x2<f16>, read_write> = var, mat2x2<f16>(vec2<f16>(1.0h))
     %4:mat2x2<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %transpose_7be8b2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %transpose_7be8b2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %transpose_7be8b2
     ret
   }
diff --git a/test/tint/builtins/gen/literal/transpose/844869.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/transpose/844869.wgsl.expected.ir.msl
index 917f96f..c49b14f 100644
--- a/test/tint/builtins/gen/literal/transpose/844869.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/transpose/844869.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, mat4x4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%transpose_844869 = func():void -> %b2 {
-  %b2 = block {
+%transpose_844869 = func():void {
+  $B2: {
     %res:ptr<function, mat4x4<f16>, read_write> = var, mat4x4<f16>(vec4<f16>(1.0h))
     %4:mat4x4<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %transpose_844869
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %transpose_844869
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %transpose_844869
     ret
   }
diff --git a/test/tint/builtins/gen/literal/transpose/854336.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/transpose/854336.wgsl.expected.ir.msl
index 1667a79..5374f9f 100644
--- a/test/tint/builtins/gen/literal/transpose/854336.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/transpose/854336.wgsl.expected.ir.msl
@@ -1,32 +1,46 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, mat3x3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%transpose_854336 = func():void -> %b2 {
-  %b2 = block {
+%transpose_854336 = func():void {
+  $B2: {
     %res:ptr<function, mat3x3<f32>, read_write> = var, mat3x3<f32>(vec3<f32>(1.0f))
     %4:mat3x3<f32> = load %res
-    store %prevent_dce, %4
+    %5:void = call %tint_store_and_preserve_padding, %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %6:void = call %transpose_854336
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %8:void = call %transpose_854336
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %8:void = call %transpose_854336
+%fragment_main = @fragment func():void {
+  $B4: {
+    %10:void = call %transpose_854336
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %10:void = call %transpose_854336
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %12:void = call %transpose_854336
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat3x3<f32>, read_write>, %value_param:mat3x3<f32>):void {
+  $B6: {
+    %15:ptr<storage, vec3<f32>, read_write> = access %target, 0u
+    %16:vec3<f32> = access %value_param, 0u
+    store %15, %16
+    %17:ptr<storage, vec3<f32>, read_write> = access %target, 1u
+    %18:vec3<f32> = access %value_param, 1u
+    store %17, %18
+    %19:ptr<storage, vec3<f32>, read_write> = access %target, 2u
+    %20:vec3<f32> = access %value_param, 2u
+    store %19, %20
     ret
   }
 }
diff --git a/test/tint/builtins/gen/literal/transpose/8c06ce.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/transpose/8c06ce.wgsl.expected.ir.msl
index fa2c344..ea6b819 100644
--- a/test/tint/builtins/gen/literal/transpose/8c06ce.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/transpose/8c06ce.wgsl.expected.ir.msl
@@ -1,32 +1,49 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, mat4x3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%transpose_8c06ce = func():void -> %b2 {
-  %b2 = block {
+%transpose_8c06ce = func():void {
+  $B2: {
     %res:ptr<function, mat4x3<f16>, read_write> = var, mat4x3<f16>(vec3<f16>(1.0h))
     %4:mat4x3<f16> = load %res
-    store %prevent_dce, %4
+    %5:void = call %tint_store_and_preserve_padding, %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %6:void = call %transpose_8c06ce
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %8:void = call %transpose_8c06ce
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %8:void = call %transpose_8c06ce
+%fragment_main = @fragment func():void {
+  $B4: {
+    %10:void = call %transpose_8c06ce
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %10:void = call %transpose_8c06ce
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %12:void = call %transpose_8c06ce
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat4x3<f16>, read_write>, %value_param:mat4x3<f16>):void {
+  $B6: {
+    %15:ptr<storage, vec3<f16>, read_write> = access %target, 0u
+    %16:vec3<f16> = access %value_param, 0u
+    store %15, %16
+    %17:ptr<storage, vec3<f16>, read_write> = access %target, 1u
+    %18:vec3<f16> = access %value_param, 1u
+    store %17, %18
+    %19:ptr<storage, vec3<f16>, read_write> = access %target, 2u
+    %20:vec3<f16> = access %value_param, 2u
+    store %19, %20
+    %21:ptr<storage, vec3<f16>, read_write> = access %target, 3u
+    %22:vec3<f16> = access %value_param, 3u
+    store %21, %22
     ret
   }
 }
diff --git a/test/tint/builtins/gen/literal/transpose/b9ad1f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/transpose/b9ad1f.wgsl.expected.ir.msl
index 04b8314..3315a2d 100644
--- a/test/tint/builtins/gen/literal/transpose/b9ad1f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/transpose/b9ad1f.wgsl.expected.ir.msl
@@ -1,32 +1,43 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, mat2x3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%transpose_b9ad1f = func():void -> %b2 {
-  %b2 = block {
+%transpose_b9ad1f = func():void {
+  $B2: {
     %res:ptr<function, mat2x3<f16>, read_write> = var, mat2x3<f16>(vec3<f16>(1.0h))
     %4:mat2x3<f16> = load %res
-    store %prevent_dce, %4
+    %5:void = call %tint_store_and_preserve_padding, %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %6:void = call %transpose_b9ad1f
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %8:void = call %transpose_b9ad1f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %8:void = call %transpose_b9ad1f
+%fragment_main = @fragment func():void {
+  $B4: {
+    %10:void = call %transpose_b9ad1f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %10:void = call %transpose_b9ad1f
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %12:void = call %transpose_b9ad1f
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat2x3<f16>, read_write>, %value_param:mat2x3<f16>):void {
+  $B6: {
+    %15:ptr<storage, vec3<f16>, read_write> = access %target, 0u
+    %16:vec3<f16> = access %value_param, 0u
+    store %15, %16
+    %17:ptr<storage, vec3<f16>, read_write> = access %target, 1u
+    %18:vec3<f16> = access %value_param, 1u
+    store %17, %18
     ret
   }
 }
diff --git a/test/tint/builtins/gen/literal/transpose/c1b600.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/transpose/c1b600.wgsl.expected.ir.msl
index 6d1b89f..292e5b2 100644
--- a/test/tint/builtins/gen/literal/transpose/c1b600.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/transpose/c1b600.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, mat4x4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%transpose_c1b600 = func():void -> %b2 {
-  %b2 = block {
+%transpose_c1b600 = func():void {
+  $B2: {
     %res:ptr<function, mat4x4<f32>, read_write> = var, mat4x4<f32>(vec4<f32>(1.0f))
     %4:mat4x4<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %transpose_c1b600
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %transpose_c1b600
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %transpose_c1b600
     ret
   }
diff --git a/test/tint/builtins/gen/literal/transpose/d6faec.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/transpose/d6faec.wgsl.expected.ir.msl
index d832ae2..f18f396 100644
--- a/test/tint/builtins/gen/literal/transpose/d6faec.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/transpose/d6faec.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, mat3x2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%transpose_d6faec = func():void -> %b2 {
-  %b2 = block {
+%transpose_d6faec = func():void {
+  $B2: {
     %res:ptr<function, mat3x2<f16>, read_write> = var, mat3x2<f16>(vec2<f16>(1.0h))
     %4:mat3x2<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %transpose_d6faec
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %transpose_d6faec
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %transpose_d6faec
     ret
   }
diff --git a/test/tint/builtins/gen/literal/transpose/d8f8ba.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/transpose/d8f8ba.wgsl.expected.ir.msl
index a2c664f..f4a72c3 100644
--- a/test/tint/builtins/gen/literal/transpose/d8f8ba.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/transpose/d8f8ba.wgsl.expected.ir.msl
@@ -1,32 +1,49 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, mat4x3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%transpose_d8f8ba = func():void -> %b2 {
-  %b2 = block {
+%transpose_d8f8ba = func():void {
+  $B2: {
     %res:ptr<function, mat4x3<f32>, read_write> = var, mat4x3<f32>(vec3<f32>(1.0f))
     %4:mat4x3<f32> = load %res
-    store %prevent_dce, %4
+    %5:void = call %tint_store_and_preserve_padding, %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %6:void = call %transpose_d8f8ba
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %8:void = call %transpose_d8f8ba
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %8:void = call %transpose_d8f8ba
+%fragment_main = @fragment func():void {
+  $B4: {
+    %10:void = call %transpose_d8f8ba
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %10:void = call %transpose_d8f8ba
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %12:void = call %transpose_d8f8ba
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat4x3<f32>, read_write>, %value_param:mat4x3<f32>):void {
+  $B6: {
+    %15:ptr<storage, vec3<f32>, read_write> = access %target, 0u
+    %16:vec3<f32> = access %value_param, 0u
+    store %15, %16
+    %17:ptr<storage, vec3<f32>, read_write> = access %target, 1u
+    %18:vec3<f32> = access %value_param, 1u
+    store %17, %18
+    %19:ptr<storage, vec3<f32>, read_write> = access %target, 2u
+    %20:vec3<f32> = access %value_param, 2u
+    store %19, %20
+    %21:ptr<storage, vec3<f32>, read_write> = access %target, 3u
+    %22:vec3<f32> = access %value_param, 3u
+    store %21, %22
     ret
   }
 }
diff --git a/test/tint/builtins/gen/literal/transpose/ed4bdc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/transpose/ed4bdc.wgsl.expected.ir.msl
index b3b40ea..bbd817b 100644
--- a/test/tint/builtins/gen/literal/transpose/ed4bdc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/transpose/ed4bdc.wgsl.expected.ir.msl
@@ -1,32 +1,43 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, mat2x3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%transpose_ed4bdc = func():void -> %b2 {
-  %b2 = block {
+%transpose_ed4bdc = func():void {
+  $B2: {
     %res:ptr<function, mat2x3<f32>, read_write> = var, mat2x3<f32>(vec3<f32>(1.0f))
     %4:mat2x3<f32> = load %res
-    store %prevent_dce, %4
+    %5:void = call %tint_store_and_preserve_padding, %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %6:void = call %transpose_ed4bdc
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %8:void = call %transpose_ed4bdc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %8:void = call %transpose_ed4bdc
+%fragment_main = @fragment func():void {
+  $B4: {
+    %10:void = call %transpose_ed4bdc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %10:void = call %transpose_ed4bdc
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %12:void = call %transpose_ed4bdc
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat2x3<f32>, read_write>, %value_param:mat2x3<f32>):void {
+  $B6: {
+    %15:ptr<storage, vec3<f32>, read_write> = access %target, 0u
+    %16:vec3<f32> = access %value_param, 0u
+    store %15, %16
+    %17:ptr<storage, vec3<f32>, read_write> = access %target, 1u
+    %18:vec3<f32> = access %value_param, 1u
+    store %17, %18
     ret
   }
 }
diff --git a/test/tint/builtins/gen/literal/transpose/faeb05.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/transpose/faeb05.wgsl.expected.ir.msl
index 78d7168..49f4e35 100644
--- a/test/tint/builtins/gen/literal/transpose/faeb05.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/transpose/faeb05.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, mat4x2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%transpose_faeb05 = func():void -> %b2 {
-  %b2 = block {
+%transpose_faeb05 = func():void {
+  $B2: {
     %res:ptr<function, mat4x2<f16>, read_write> = var, mat4x2<f16>(vec2<f16>(1.0h))
     %4:mat4x2<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %transpose_faeb05
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %transpose_faeb05
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %transpose_faeb05
     ret
   }
diff --git a/test/tint/builtins/gen/literal/trunc/103ab8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/trunc/103ab8.wgsl.expected.ir.msl
index c89fa47..1fc3b67 100644
--- a/test/tint/builtins/gen/literal/trunc/103ab8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/trunc/103ab8.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%trunc_103ab8 = func():void -> %b2 {
-  %b2 = block {
+%trunc_103ab8 = func():void {
+  $B2: {
     %res:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %4:vec3<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %trunc_103ab8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %trunc_103ab8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %trunc_103ab8
     ret
   }
diff --git a/test/tint/builtins/gen/literal/trunc/562d05.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/trunc/562d05.wgsl.expected.ir.msl
index a02125e..8ec4a9a 100644
--- a/test/tint/builtins/gen/literal/trunc/562d05.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/trunc/562d05.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%trunc_562d05 = func():void -> %b2 {
-  %b2 = block {
+%trunc_562d05 = func():void {
+  $B2: {
     %res:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %4:vec3<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %trunc_562d05
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %trunc_562d05
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %trunc_562d05
     ret
   }
diff --git a/test/tint/builtins/gen/literal/trunc/a56109.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/trunc/a56109.wgsl.expected.ir.msl
index 5e9158d..f80644a 100644
--- a/test/tint/builtins/gen/literal/trunc/a56109.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/trunc/a56109.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%trunc_a56109 = func():void -> %b2 {
-  %b2 = block {
+%trunc_a56109 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %4:vec2<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %trunc_a56109
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %trunc_a56109
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %trunc_a56109
     ret
   }
diff --git a/test/tint/builtins/gen/literal/trunc/cc2b0d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/trunc/cc2b0d.wgsl.expected.ir.msl
index b012ef3..63d8cac 100644
--- a/test/tint/builtins/gen/literal/trunc/cc2b0d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/trunc/cc2b0d.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%trunc_cc2b0d = func():void -> %b2 {
-  %b2 = block {
+%trunc_cc2b0d = func():void {
+  $B2: {
     %res:ptr<function, f16, read_write> = var, 1.0h
     %4:f16 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %trunc_cc2b0d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %trunc_cc2b0d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %trunc_cc2b0d
     ret
   }
diff --git a/test/tint/builtins/gen/literal/trunc/ce7c17.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/trunc/ce7c17.wgsl.expected.ir.msl
index e855bd0..a13987b 100644
--- a/test/tint/builtins/gen/literal/trunc/ce7c17.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/trunc/ce7c17.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%trunc_ce7c17 = func():void -> %b2 {
-  %b2 = block {
+%trunc_ce7c17 = func():void {
+  $B2: {
     %res:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %4:vec4<f16> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %trunc_ce7c17
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %trunc_ce7c17
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %trunc_ce7c17
     ret
   }
diff --git a/test/tint/builtins/gen/literal/trunc/e183aa.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/trunc/e183aa.wgsl.expected.ir.msl
index 3215da6..50f66f8 100644
--- a/test/tint/builtins/gen/literal/trunc/e183aa.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/trunc/e183aa.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%trunc_e183aa = func():void -> %b2 {
-  %b2 = block {
+%trunc_e183aa = func():void {
+  $B2: {
     %res:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %4:vec4<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %trunc_e183aa
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %trunc_e183aa
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %trunc_e183aa
     ret
   }
diff --git a/test/tint/builtins/gen/literal/trunc/eb83df.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/trunc/eb83df.wgsl.expected.ir.msl
index 6677f62..5f0df2f 100644
--- a/test/tint/builtins/gen/literal/trunc/eb83df.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/trunc/eb83df.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%trunc_eb83df = func():void -> %b2 {
-  %b2 = block {
+%trunc_eb83df = func():void {
+  $B2: {
     %res:ptr<function, f32, read_write> = var, 1.0f
     %4:f32 = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %trunc_eb83df
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %trunc_eb83df
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %trunc_eb83df
     ret
   }
diff --git a/test/tint/builtins/gen/literal/trunc/f370d3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/trunc/f370d3.wgsl.expected.ir.msl
index 85602f5..f4dd5a4 100644
--- a/test/tint/builtins/gen/literal/trunc/f370d3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/trunc/f370d3.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%trunc_f370d3 = func():void -> %b2 {
-  %b2 = block {
+%trunc_f370d3 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %4:vec2<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %trunc_f370d3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %trunc_f370d3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %trunc_f370d3
     ret
   }
diff --git a/test/tint/builtins/gen/literal/unpack2x16float/32a5cf.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/unpack2x16float/32a5cf.wgsl.expected.ir.msl
index 424c533..e8f39d6 100644
--- a/test/tint/builtins/gen/literal/unpack2x16float/32a5cf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/unpack2x16float/32a5cf.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%unpack2x16float_32a5cf = func():void -> %b2 {
-  %b2 = block {
+%unpack2x16float_32a5cf = func():void {
+  $B2: {
     %res:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(0.00000005960464477539f, 0.0f)
     %4:vec2<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %unpack2x16float_32a5cf
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %unpack2x16float_32a5cf
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %unpack2x16float_32a5cf
     ret
   }
diff --git a/test/tint/builtins/gen/literal/unpack2x16snorm/b4aea6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/unpack2x16snorm/b4aea6.wgsl.expected.ir.msl
index 3bad6cd..82affab 100644
--- a/test/tint/builtins/gen/literal/unpack2x16snorm/b4aea6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/unpack2x16snorm/b4aea6.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%unpack2x16snorm_b4aea6 = func():void -> %b2 {
-  %b2 = block {
+%unpack2x16snorm_b4aea6 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(0.00003051850944757462f, 0.0f)
     %4:vec2<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %unpack2x16snorm_b4aea6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %unpack2x16snorm_b4aea6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %unpack2x16snorm_b4aea6
     ret
   }
diff --git a/test/tint/builtins/gen/literal/unpack2x16unorm/7699c0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/unpack2x16unorm/7699c0.wgsl.expected.ir.msl
index 600253b..4b88d53 100644
--- a/test/tint/builtins/gen/literal/unpack2x16unorm/7699c0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/unpack2x16unorm/7699c0.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%unpack2x16unorm_7699c0 = func():void -> %b2 {
-  %b2 = block {
+%unpack2x16unorm_7699c0 = func():void {
+  $B2: {
     %res:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(0.00001525902189314365f, 0.0f)
     %4:vec2<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %unpack2x16unorm_7699c0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %unpack2x16unorm_7699c0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %unpack2x16unorm_7699c0
     ret
   }
diff --git a/test/tint/builtins/gen/literal/unpack4x8snorm/523fb3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/unpack4x8snorm/523fb3.wgsl.expected.ir.msl
index 21fb2b1..0da466d 100644
--- a/test/tint/builtins/gen/literal/unpack4x8snorm/523fb3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/unpack4x8snorm/523fb3.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%unpack4x8snorm_523fb3 = func():void -> %b2 {
-  %b2 = block {
+%unpack4x8snorm_523fb3 = func():void {
+  $B2: {
     %res:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(0.00787401571869850159f, 0.0f, 0.0f, 0.0f)
     %4:vec4<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %unpack4x8snorm_523fb3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %unpack4x8snorm_523fb3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %unpack4x8snorm_523fb3
     ret
   }
diff --git a/test/tint/builtins/gen/literal/unpack4x8unorm/750c74.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/unpack4x8unorm/750c74.wgsl.expected.ir.msl
index d63cb8f..b9feaba 100644
--- a/test/tint/builtins/gen/literal/unpack4x8unorm/750c74.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/unpack4x8unorm/750c74.wgsl.expected.ir.msl
@@ -1,31 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%unpack4x8unorm_750c74 = func():void -> %b2 {
-  %b2 = block {
+%unpack4x8unorm_750c74 = func():void {
+  $B2: {
     %res:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(0.0039215688593685627f, 0.0f, 0.0f, 0.0f)
     %4:vec4<f32> = load %res
     store %prevent_dce, %4
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %6:void = call %unpack4x8unorm_750c74
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %8:void = call %unpack4x8unorm_750c74
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %10:void = call %unpack4x8unorm_750c74
     ret
   }
diff --git a/test/tint/builtins/gen/literal/unpack4xI8/830900.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/unpack4xI8/830900.wgsl.expected.ir.msl
new file mode 100644
index 0000000..937165e
--- /dev/null
+++ b/test/tint/builtins/gen/literal/unpack4xI8/830900.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
+}
+
+%unpack4xI8_830900 = func():void {
+  $B2: {
+    %res:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i, 0i, 0i, 0i)
+    %4:vec4<i32> = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %unpack4xI8_830900
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %unpack4xI8_830900
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %unpack4xI8_830900
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/unpack4xU8/a5ea55.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/unpack4xU8/a5ea55.wgsl.expected.ir.msl
new file mode 100644
index 0000000..7dec3c3
--- /dev/null
+++ b/test/tint/builtins/gen/literal/unpack4xU8/a5ea55.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
+}
+
+%unpack4xU8_a5ea55 = func():void {
+  $B2: {
+    %res:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u, 0u, 0u, 0u)
+    %4:vec4<u32> = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %unpack4xU8_a5ea55
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %unpack4xU8_a5ea55
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %unpack4xU8_a5ea55
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/literal/workgroupUniformLoad/37307c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/workgroupUniformLoad/37307c.wgsl.expected.ir.msl
index 959bbd3..f8281db 100644
--- a/test/tint/builtins/gen/literal/workgroupUniformLoad/37307c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/workgroupUniformLoad/37307c.wgsl.expected.ir.msl
@@ -1,24 +1,33 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<workgroup, u32, read_write> = var
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%workgroupUniformLoad_37307c = func():void -> %b2 {
-  %b2 = block {
-    %4:void = workgroupBarrier
+%workgroupUniformLoad_37307c = func():void {
+  $B2: {
+    %4:void = msl.threadgroup_barrier 4u
     %5:u32 = load %arg_0
-    %6:void = workgroupBarrier
-    %res:ptr<function, u32, read_write> = var, %5
-    %8:u32 = load %res
-    store %prevent_dce, %8
+    %6:u32 = let %5
+    %7:void = msl.threadgroup_barrier 4u
+    %res:ptr<function, u32, read_write> = var, %6
+    %9:u32 = load %res
+    store %prevent_dce, %9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
-    %10:void = call %workgroupUniformLoad_37307c
+%compute_main = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B3: {
+    %12:bool = eq %tint_local_index, 0u
+    if %12 [t: $B4] {  # if_1
+      $B4: {  # true
+        store %arg_0, 0u
+        exit_if  # if_1
+      }
+    }
+    %13:void = msl.threadgroup_barrier 4u
+    %14:void = call %workgroupUniformLoad_37307c
     ret
   }
 }
diff --git a/test/tint/builtins/gen/literal/workgroupUniformLoad/7a857c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/workgroupUniformLoad/7a857c.wgsl.expected.ir.msl
index 2529246..e2eb2fb 100644
--- a/test/tint/builtins/gen/literal/workgroupUniformLoad/7a857c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/workgroupUniformLoad/7a857c.wgsl.expected.ir.msl
@@ -1,24 +1,33 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<workgroup, f32, read_write> = var
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%workgroupUniformLoad_7a857c = func():void -> %b2 {
-  %b2 = block {
-    %4:void = workgroupBarrier
+%workgroupUniformLoad_7a857c = func():void {
+  $B2: {
+    %4:void = msl.threadgroup_barrier 4u
     %5:f32 = load %arg_0
-    %6:void = workgroupBarrier
-    %res:ptr<function, f32, read_write> = var, %5
-    %8:f32 = load %res
-    store %prevent_dce, %8
+    %6:f32 = let %5
+    %7:void = msl.threadgroup_barrier 4u
+    %res:ptr<function, f32, read_write> = var, %6
+    %9:f32 = load %res
+    store %prevent_dce, %9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
-    %10:void = call %workgroupUniformLoad_7a857c
+%compute_main = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B3: {
+    %12:bool = eq %tint_local_index, 0u
+    if %12 [t: $B4] {  # if_1
+      $B4: {  # true
+        store %arg_0, 0.0f
+        exit_if  # if_1
+      }
+    }
+    %13:void = msl.threadgroup_barrier 4u
+    %14:void = call %workgroupUniformLoad_7a857c
     ret
   }
 }
diff --git a/test/tint/builtins/gen/literal/workgroupUniformLoad/9d33de.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/workgroupUniformLoad/9d33de.wgsl.expected.ir.msl
index 89dabfa..3bb3f44 100644
--- a/test/tint/builtins/gen/literal/workgroupUniformLoad/9d33de.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/workgroupUniformLoad/9d33de.wgsl.expected.ir.msl
@@ -1,24 +1,33 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<workgroup, i32, read_write> = var
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%workgroupUniformLoad_9d33de = func():void -> %b2 {
-  %b2 = block {
-    %4:void = workgroupBarrier
+%workgroupUniformLoad_9d33de = func():void {
+  $B2: {
+    %4:void = msl.threadgroup_barrier 4u
     %5:i32 = load %arg_0
-    %6:void = workgroupBarrier
-    %res:ptr<function, i32, read_write> = var, %5
-    %8:i32 = load %res
-    store %prevent_dce, %8
+    %6:i32 = let %5
+    %7:void = msl.threadgroup_barrier 4u
+    %res:ptr<function, i32, read_write> = var, %6
+    %9:i32 = load %res
+    store %prevent_dce, %9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
-    %10:void = call %workgroupUniformLoad_9d33de
+%compute_main = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B3: {
+    %12:bool = eq %tint_local_index, 0u
+    if %12 [t: $B4] {  # if_1
+      $B4: {  # true
+        store %arg_0, 0i
+        exit_if  # if_1
+      }
+    }
+    %13:void = msl.threadgroup_barrier 4u
+    %14:void = call %workgroupUniformLoad_9d33de
     ret
   }
 }
diff --git a/test/tint/builtins/gen/literal/workgroupUniformLoad/e07d08.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/workgroupUniformLoad/e07d08.wgsl.expected.ir.msl
index 036773d..bd29073 100644
--- a/test/tint/builtins/gen/literal/workgroupUniformLoad/e07d08.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/workgroupUniformLoad/e07d08.wgsl.expected.ir.msl
@@ -1,24 +1,33 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<workgroup, f16, read_write> = var
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%workgroupUniformLoad_e07d08 = func():void -> %b2 {
-  %b2 = block {
-    %4:void = workgroupBarrier
+%workgroupUniformLoad_e07d08 = func():void {
+  $B2: {
+    %4:void = msl.threadgroup_barrier 4u
     %5:f16 = load %arg_0
-    %6:void = workgroupBarrier
-    %res:ptr<function, f16, read_write> = var, %5
-    %8:f16 = load %res
-    store %prevent_dce, %8
+    %6:f16 = let %5
+    %7:void = msl.threadgroup_barrier 4u
+    %res:ptr<function, f16, read_write> = var, %6
+    %9:f16 = load %res
+    store %prevent_dce, %9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
-    %10:void = call %workgroupUniformLoad_e07d08
+%compute_main = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B3: {
+    %12:bool = eq %tint_local_index, 0u
+    if %12 [t: $B4] {  # if_1
+      $B4: {  # true
+        store %arg_0, 0.0h
+        exit_if  # if_1
+      }
+    }
+    %13:void = msl.threadgroup_barrier 4u
+    %14:void = call %workgroupUniformLoad_e07d08
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/abs/002533.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/abs/002533.wgsl.expected.ir.msl
index ee1413d..6a1ed9c 100644
--- a/test/tint/builtins/gen/var/abs/002533.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/abs/002533.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%abs_002533 = func():void -> %b2 {
-  %b2 = block {
+%abs_002533 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %4:vec4<f32> = load %arg_0
     %5:vec4<f32> = abs %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %abs_002533
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %abs_002533
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %abs_002533
     ret
   }
diff --git a/test/tint/builtins/gen/var/abs/005174.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/abs/005174.wgsl.expected.ir.msl
index 7499b6d..b8d13b3 100644
--- a/test/tint/builtins/gen/var/abs/005174.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/abs/005174.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%abs_005174 = func():void -> %b2 {
-  %b2 = block {
+%abs_005174 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %4:vec3<f32> = load %arg_0
     %5:vec3<f32> = abs %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %abs_005174
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %abs_005174
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %abs_005174
     ret
   }
diff --git a/test/tint/builtins/gen/var/abs/1ce782.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/abs/1ce782.wgsl.expected.ir.msl
index 1fc6474..862821a 100644
--- a/test/tint/builtins/gen/var/abs/1ce782.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/abs/1ce782.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%abs_1ce782 = func():void -> %b2 {
-  %b2 = block {
+%abs_1ce782 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
     %4:vec4<u32> = load %arg_0
     %5:vec4<u32> = abs %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %abs_1ce782
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %abs_1ce782
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %abs_1ce782
     ret
   }
diff --git a/test/tint/builtins/gen/var/abs/1e9d53.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/abs/1e9d53.wgsl.expected.ir.msl
index acde0dc..39da404 100644
--- a/test/tint/builtins/gen/var/abs/1e9d53.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/abs/1e9d53.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%abs_1e9d53 = func():void -> %b2 {
-  %b2 = block {
+%abs_1e9d53 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %4:vec2<f32> = load %arg_0
     %5:vec2<f32> = abs %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %abs_1e9d53
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %abs_1e9d53
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %abs_1e9d53
     ret
   }
diff --git a/test/tint/builtins/gen/var/abs/421ca3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/abs/421ca3.wgsl.expected.ir.msl
index 165e282..c78e031 100644
--- a/test/tint/builtins/gen/var/abs/421ca3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/abs/421ca3.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%abs_421ca3 = func():void -> %b2 {
-  %b2 = block {
+%abs_421ca3 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %4:vec3<f16> = load %arg_0
     %5:vec3<f16> = abs %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %abs_421ca3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %abs_421ca3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %abs_421ca3
     ret
   }
diff --git a/test/tint/builtins/gen/var/abs/467cd1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/abs/467cd1.wgsl.expected.ir.msl
index f81468d..2eb143b 100644
--- a/test/tint/builtins/gen/var/abs/467cd1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/abs/467cd1.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%abs_467cd1 = func():void -> %b2 {
-  %b2 = block {
+%abs_467cd1 = func():void {
+  $B2: {
     %arg_0:ptr<function, u32, read_write> = var, 1u
     %4:u32 = load %arg_0
     %5:u32 = abs %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %abs_467cd1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %abs_467cd1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %abs_467cd1
     ret
   }
diff --git a/test/tint/builtins/gen/var/abs/4ad288.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/abs/4ad288.wgsl.expected.ir.msl
index 4282277..30ee360 100644
--- a/test/tint/builtins/gen/var/abs/4ad288.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/abs/4ad288.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%abs_4ad288 = func():void -> %b2 {
-  %b2 = block {
+%abs_4ad288 = func():void {
+  $B2: {
     %arg_0:ptr<function, i32, read_write> = var, 1i
     %4:i32 = load %arg_0
     %5:i32 = abs %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %abs_4ad288
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %abs_4ad288
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %abs_4ad288
     ret
   }
diff --git a/test/tint/builtins/gen/var/abs/538d29.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/abs/538d29.wgsl.expected.ir.msl
index 155e1f3..88baa00 100644
--- a/test/tint/builtins/gen/var/abs/538d29.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/abs/538d29.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%abs_538d29 = func():void -> %b2 {
-  %b2 = block {
+%abs_538d29 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %4:vec4<f16> = load %arg_0
     %5:vec4<f16> = abs %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %abs_538d29
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %abs_538d29
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %abs_538d29
     ret
   }
diff --git a/test/tint/builtins/gen/var/abs/5ad50a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/abs/5ad50a.wgsl.expected.ir.msl
index d0d4ffa..de31a2a 100644
--- a/test/tint/builtins/gen/var/abs/5ad50a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/abs/5ad50a.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%abs_5ad50a = func():void -> %b2 {
-  %b2 = block {
+%abs_5ad50a = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %4:vec3<i32> = load %arg_0
     %5:vec3<i32> = abs %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %abs_5ad50a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %abs_5ad50a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %abs_5ad50a
     ret
   }
diff --git a/test/tint/builtins/gen/var/abs/5ae4fe.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/abs/5ae4fe.wgsl.expected.ir.msl
index 99cf2a5..6af8aca 100644
--- a/test/tint/builtins/gen/var/abs/5ae4fe.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/abs/5ae4fe.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%abs_5ae4fe = func():void -> %b2 {
-  %b2 = block {
+%abs_5ae4fe = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %4:vec2<f16> = load %arg_0
     %5:vec2<f16> = abs %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %abs_5ae4fe
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %abs_5ae4fe
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %abs_5ae4fe
     ret
   }
diff --git a/test/tint/builtins/gen/var/abs/7326de.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/abs/7326de.wgsl.expected.ir.msl
index 1476a29..a9cb089 100644
--- a/test/tint/builtins/gen/var/abs/7326de.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/abs/7326de.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%abs_7326de = func():void -> %b2 {
-  %b2 = block {
+%abs_7326de = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %4:vec3<u32> = load %arg_0
     %5:vec3<u32> = abs %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %abs_7326de
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %abs_7326de
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %abs_7326de
     ret
   }
diff --git a/test/tint/builtins/gen/var/abs/7f28e6.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/abs/7f28e6.wgsl.expected.ir.msl
index 4f7cb19..6a73091 100644
--- a/test/tint/builtins/gen/var/abs/7f28e6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/abs/7f28e6.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%abs_7f28e6 = func():void -> %b2 {
-  %b2 = block {
+%abs_7f28e6 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %4:vec2<u32> = load %arg_0
     %5:vec2<u32> = abs %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %abs_7f28e6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %abs_7f28e6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %abs_7f28e6
     ret
   }
diff --git a/test/tint/builtins/gen/var/abs/7faa9e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/abs/7faa9e.wgsl.expected.ir.msl
index 1f10465..ea399d8 100644
--- a/test/tint/builtins/gen/var/abs/7faa9e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/abs/7faa9e.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%abs_7faa9e = func():void -> %b2 {
-  %b2 = block {
+%abs_7faa9e = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %4:vec2<i32> = load %arg_0
     %5:vec2<i32> = abs %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %abs_7faa9e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %abs_7faa9e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %abs_7faa9e
     ret
   }
diff --git a/test/tint/builtins/gen/var/abs/9c80a6.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/abs/9c80a6.wgsl.expected.ir.msl
index 8948fac..3f15419 100644
--- a/test/tint/builtins/gen/var/abs/9c80a6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/abs/9c80a6.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%abs_9c80a6 = func():void -> %b2 {
-  %b2 = block {
+%abs_9c80a6 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %4:vec4<i32> = load %arg_0
     %5:vec4<i32> = abs %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %abs_9c80a6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %abs_9c80a6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %abs_9c80a6
     ret
   }
diff --git a/test/tint/builtins/gen/var/abs/b96037.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/abs/b96037.wgsl.expected.ir.msl
index c135cae..2a9a611 100644
--- a/test/tint/builtins/gen/var/abs/b96037.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/abs/b96037.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%abs_b96037 = func():void -> %b2 {
-  %b2 = block {
+%abs_b96037 = func():void {
+  $B2: {
     %arg_0:ptr<function, f32, read_write> = var, 1.0f
     %4:f32 = load %arg_0
     %5:f32 = abs %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %abs_b96037
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %abs_b96037
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %abs_b96037
     ret
   }
diff --git a/test/tint/builtins/gen/var/abs/fd247f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/abs/fd247f.wgsl.expected.ir.msl
index f483a18..29a17c3 100644
--- a/test/tint/builtins/gen/var/abs/fd247f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/abs/fd247f.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%abs_fd247f = func():void -> %b2 {
-  %b2 = block {
+%abs_fd247f = func():void {
+  $B2: {
     %arg_0:ptr<function, f16, read_write> = var, 1.0h
     %4:f16 = load %arg_0
     %5:f16 = abs %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %abs_fd247f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %abs_fd247f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %abs_fd247f
     ret
   }
diff --git a/test/tint/builtins/gen/var/acos/004aff.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/acos/004aff.wgsl.expected.ir.msl
index 2f0d2d3..9290487 100644
--- a/test/tint/builtins/gen/var/acos/004aff.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/acos/004aff.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%acos_004aff = func():void -> %b2 {
-  %b2 = block {
+%acos_004aff = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(0.96875h)
     %4:vec2<f16> = load %arg_0
     %5:vec2<f16> = acos %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %acos_004aff
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %acos_004aff
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %acos_004aff
     ret
   }
diff --git a/test/tint/builtins/gen/var/acos/203628.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/acos/203628.wgsl.expected.ir.msl
index fc1b044..033eee4 100644
--- a/test/tint/builtins/gen/var/acos/203628.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/acos/203628.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%acos_203628 = func():void -> %b2 {
-  %b2 = block {
+%acos_203628 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(0.96875h)
     %4:vec4<f16> = load %arg_0
     %5:vec4<f16> = acos %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %acos_203628
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %acos_203628
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %acos_203628
     ret
   }
diff --git a/test/tint/builtins/gen/var/acos/303e3d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/acos/303e3d.wgsl.expected.ir.msl
index fb17b97..9921179 100644
--- a/test/tint/builtins/gen/var/acos/303e3d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/acos/303e3d.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%acos_303e3d = func():void -> %b2 {
-  %b2 = block {
+%acos_303e3d = func():void {
+  $B2: {
     %arg_0:ptr<function, f16, read_write> = var, 0.96875h
     %4:f16 = load %arg_0
     %5:f16 = acos %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %acos_303e3d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %acos_303e3d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %acos_303e3d
     ret
   }
diff --git a/test/tint/builtins/gen/var/acos/489247.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/acos/489247.wgsl.expected.ir.msl
index bfa1c42..c141ca9 100644
--- a/test/tint/builtins/gen/var/acos/489247.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/acos/489247.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%acos_489247 = func():void -> %b2 {
-  %b2 = block {
+%acos_489247 = func():void {
+  $B2: {
     %arg_0:ptr<function, f32, read_write> = var, 0.96891242265701293945f
     %4:f32 = load %arg_0
     %5:f32 = acos %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %acos_489247
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %acos_489247
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %acos_489247
     ret
   }
diff --git a/test/tint/builtins/gen/var/acos/8e2acf.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/acos/8e2acf.wgsl.expected.ir.msl
index 7422beb..8d7b1cf 100644
--- a/test/tint/builtins/gen/var/acos/8e2acf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/acos/8e2acf.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%acos_8e2acf = func():void -> %b2 {
-  %b2 = block {
+%acos_8e2acf = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(0.96891242265701293945f)
     %4:vec4<f32> = load %arg_0
     %5:vec4<f32> = acos %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %acos_8e2acf
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %acos_8e2acf
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %acos_8e2acf
     ret
   }
diff --git a/test/tint/builtins/gen/var/acos/a610c4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/acos/a610c4.wgsl.expected.ir.msl
index 0a1a00c..9d2a2f4 100644
--- a/test/tint/builtins/gen/var/acos/a610c4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/acos/a610c4.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%acos_a610c4 = func():void -> %b2 {
-  %b2 = block {
+%acos_a610c4 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(0.96891242265701293945f)
     %4:vec3<f32> = load %arg_0
     %5:vec3<f32> = acos %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %acos_a610c4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %acos_a610c4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %acos_a610c4
     ret
   }
diff --git a/test/tint/builtins/gen/var/acos/dfc915.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/acos/dfc915.wgsl.expected.ir.msl
index 75f5b8b..1e0875f 100644
--- a/test/tint/builtins/gen/var/acos/dfc915.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/acos/dfc915.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%acos_dfc915 = func():void -> %b2 {
-  %b2 = block {
+%acos_dfc915 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(0.96891242265701293945f)
     %4:vec2<f32> = load %arg_0
     %5:vec2<f32> = acos %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %acos_dfc915
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %acos_dfc915
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %acos_dfc915
     ret
   }
diff --git a/test/tint/builtins/gen/var/acos/f47057.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/acos/f47057.wgsl.expected.ir.msl
index 1f9e5ca..d49b44f 100644
--- a/test/tint/builtins/gen/var/acos/f47057.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/acos/f47057.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%acos_f47057 = func():void -> %b2 {
-  %b2 = block {
+%acos_f47057 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(0.96875h)
     %4:vec3<f16> = load %arg_0
     %5:vec3<f16> = acos %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %acos_f47057
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %acos_f47057
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %acos_f47057
     ret
   }
diff --git a/test/tint/builtins/gen/var/acosh/5f49d8.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/acosh/5f49d8.wgsl.expected.ir.msl
index 3273020..89dd483 100644
--- a/test/tint/builtins/gen/var/acosh/5f49d8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/acosh/5f49d8.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%acosh_5f49d8 = func():void -> %b2 {
-  %b2 = block {
+%acosh_5f49d8 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.54296875h)
     %4:vec2<f16> = load %arg_0
     %5:vec2<f16> = acosh %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %acosh_5f49d8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %acosh_5f49d8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %acosh_5f49d8
     ret
   }
diff --git a/test/tint/builtins/gen/var/acosh/640883.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/acosh/640883.wgsl.expected.ir.msl
index 5835f68..95b285d 100644
--- a/test/tint/builtins/gen/var/acosh/640883.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/acosh/640883.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%acosh_640883 = func():void -> %b2 {
-  %b2 = block {
+%acosh_640883 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.54308068752288818359f)
     %4:vec2<f32> = load %arg_0
     %5:vec2<f32> = acosh %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %acosh_640883
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %acosh_640883
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %acosh_640883
     ret
   }
diff --git a/test/tint/builtins/gen/var/acosh/a37dfe.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/acosh/a37dfe.wgsl.expected.ir.msl
index e382bee..8e4ca01 100644
--- a/test/tint/builtins/gen/var/acosh/a37dfe.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/acosh/a37dfe.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%acosh_a37dfe = func():void -> %b2 {
-  %b2 = block {
+%acosh_a37dfe = func():void {
+  $B2: {
     %arg_0:ptr<function, f16, read_write> = var, 1.54296875h
     %4:f16 = load %arg_0
     %5:f16 = acosh %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %acosh_a37dfe
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %acosh_a37dfe
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %acosh_a37dfe
     ret
   }
diff --git a/test/tint/builtins/gen/var/acosh/d51ccb.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/acosh/d51ccb.wgsl.expected.ir.msl
index d0d9072..d138155 100644
--- a/test/tint/builtins/gen/var/acosh/d51ccb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/acosh/d51ccb.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%acosh_d51ccb = func():void -> %b2 {
-  %b2 = block {
+%acosh_d51ccb = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.54308068752288818359f)
     %4:vec4<f32> = load %arg_0
     %5:vec4<f32> = acosh %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %acosh_d51ccb
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %acosh_d51ccb
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %acosh_d51ccb
     ret
   }
diff --git a/test/tint/builtins/gen/var/acosh/de60d8.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/acosh/de60d8.wgsl.expected.ir.msl
index 9a39783..b18ea4c 100644
--- a/test/tint/builtins/gen/var/acosh/de60d8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/acosh/de60d8.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%acosh_de60d8 = func():void -> %b2 {
-  %b2 = block {
+%acosh_de60d8 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.54296875h)
     %4:vec4<f16> = load %arg_0
     %5:vec4<f16> = acosh %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %acosh_de60d8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %acosh_de60d8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %acosh_de60d8
     ret
   }
diff --git a/test/tint/builtins/gen/var/acosh/e38f5c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/acosh/e38f5c.wgsl.expected.ir.msl
index 4f2f436..91170a3 100644
--- a/test/tint/builtins/gen/var/acosh/e38f5c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/acosh/e38f5c.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%acosh_e38f5c = func():void -> %b2 {
-  %b2 = block {
+%acosh_e38f5c = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.54308068752288818359f)
     %4:vec3<f32> = load %arg_0
     %5:vec3<f32> = acosh %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %acosh_e38f5c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %acosh_e38f5c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %acosh_e38f5c
     ret
   }
diff --git a/test/tint/builtins/gen/var/acosh/ecf2d1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/acosh/ecf2d1.wgsl.expected.ir.msl
index 60d6b61..bf781bc 100644
--- a/test/tint/builtins/gen/var/acosh/ecf2d1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/acosh/ecf2d1.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%acosh_ecf2d1 = func():void -> %b2 {
-  %b2 = block {
+%acosh_ecf2d1 = func():void {
+  $B2: {
     %arg_0:ptr<function, f32, read_write> = var, 1.54308068752288818359f
     %4:f32 = load %arg_0
     %5:f32 = acosh %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %acosh_ecf2d1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %acosh_ecf2d1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %acosh_ecf2d1
     ret
   }
diff --git a/test/tint/builtins/gen/var/acosh/f56574.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/acosh/f56574.wgsl.expected.ir.msl
index 57deff5..824746f 100644
--- a/test/tint/builtins/gen/var/acosh/f56574.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/acosh/f56574.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%acosh_f56574 = func():void -> %b2 {
-  %b2 = block {
+%acosh_f56574 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.54296875h)
     %4:vec3<f16> = load %arg_0
     %5:vec3<f16> = acosh %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %acosh_f56574
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %acosh_f56574
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %acosh_f56574
     ret
   }
diff --git a/test/tint/builtins/gen/var/all/353d6a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/all/353d6a.wgsl.expected.ir.msl
index 7bd5428..3a3730a 100644
--- a/test/tint/builtins/gen/var/all/353d6a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/all/353d6a.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%all_353d6a = func():void -> %b2 {
-  %b2 = block {
+%all_353d6a = func():void {
+  $B2: {
     %arg_0:ptr<function, bool, read_write> = var, true
     %4:bool = load %arg_0
     %5:bool = all %4
@@ -18,20 +18,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %all_353d6a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %all_353d6a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %all_353d6a
     ret
   }
diff --git a/test/tint/builtins/gen/var/all/986c7b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/all/986c7b.wgsl.expected.ir.msl
index 60319c6..6f18af5 100644
--- a/test/tint/builtins/gen/var/all/986c7b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/all/986c7b.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%all_986c7b = func():void -> %b2 {
-  %b2 = block {
+%all_986c7b = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<bool>, read_write> = var, vec4<bool>(true)
     %4:vec4<bool> = load %arg_0
     %5:bool = all %4
@@ -18,20 +18,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %all_986c7b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %all_986c7b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %all_986c7b
     ret
   }
diff --git a/test/tint/builtins/gen/var/all/bd2dba.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/all/bd2dba.wgsl.expected.ir.msl
index 98b320b..44e3c30 100644
--- a/test/tint/builtins/gen/var/all/bd2dba.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/all/bd2dba.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%all_bd2dba = func():void -> %b2 {
-  %b2 = block {
+%all_bd2dba = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<bool>, read_write> = var, vec3<bool>(true)
     %4:vec3<bool> = load %arg_0
     %5:bool = all %4
@@ -18,20 +18,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %all_bd2dba
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %all_bd2dba
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %all_bd2dba
     ret
   }
diff --git a/test/tint/builtins/gen/var/all/f46790.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/all/f46790.wgsl.expected.ir.msl
index 3c61548..e82ee7a 100644
--- a/test/tint/builtins/gen/var/all/f46790.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/all/f46790.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%all_f46790 = func():void -> %b2 {
-  %b2 = block {
+%all_f46790 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<bool>, read_write> = var, vec2<bool>(true)
     %4:vec2<bool> = load %arg_0
     %5:bool = all %4
@@ -18,20 +18,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %all_f46790
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %all_f46790
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %all_f46790
     ret
   }
diff --git a/test/tint/builtins/gen/var/any/083428.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/any/083428.wgsl.expected.ir.msl
index 681ba57..022f147 100644
--- a/test/tint/builtins/gen/var/any/083428.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/any/083428.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%any_083428 = func():void -> %b2 {
-  %b2 = block {
+%any_083428 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<bool>, read_write> = var, vec4<bool>(true)
     %4:vec4<bool> = load %arg_0
     %5:bool = any %4
@@ -18,20 +18,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %any_083428
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %any_083428
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %any_083428
     ret
   }
diff --git a/test/tint/builtins/gen/var/any/0e3e58.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/any/0e3e58.wgsl.expected.ir.msl
index ce7cfbc..4eb3003 100644
--- a/test/tint/builtins/gen/var/any/0e3e58.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/any/0e3e58.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%any_0e3e58 = func():void -> %b2 {
-  %b2 = block {
+%any_0e3e58 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<bool>, read_write> = var, vec2<bool>(true)
     %4:vec2<bool> = load %arg_0
     %5:bool = any %4
@@ -18,20 +18,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %any_0e3e58
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %any_0e3e58
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %any_0e3e58
     ret
   }
diff --git a/test/tint/builtins/gen/var/any/2ab91a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/any/2ab91a.wgsl.expected.ir.msl
index 0f028fa..4d4adfd 100644
--- a/test/tint/builtins/gen/var/any/2ab91a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/any/2ab91a.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%any_2ab91a = func():void -> %b2 {
-  %b2 = block {
+%any_2ab91a = func():void {
+  $B2: {
     %arg_0:ptr<function, bool, read_write> = var, true
     %4:bool = load %arg_0
     %5:bool = any %4
@@ -18,20 +18,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %any_2ab91a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %any_2ab91a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %any_2ab91a
     ret
   }
diff --git a/test/tint/builtins/gen/var/any/e755c1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/any/e755c1.wgsl.expected.ir.msl
index e57f112..529c520 100644
--- a/test/tint/builtins/gen/var/any/e755c1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/any/e755c1.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%any_e755c1 = func():void -> %b2 {
-  %b2 = block {
+%any_e755c1 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<bool>, read_write> = var, vec3<bool>(true)
     %4:vec3<bool> = load %arg_0
     %5:bool = any %4
@@ -18,20 +18,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %any_e755c1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %any_e755c1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %any_e755c1
     ret
   }
diff --git a/test/tint/builtins/gen/var/arrayLength/1588cd.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/arrayLength/1588cd.wgsl.expected.ir.msl
index b4a5e32..6a20a8a 100644
--- a/test/tint/builtins/gen/var/arrayLength/1588cd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/arrayLength/1588cd.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: SB_RO = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RO = struct @align(4) {
   arg_0:array<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_ro:ptr<storage, SB_RO, read> = var @binding_point(0, 1)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%arrayLength_1588cd = func():void -> %b2 {
-  %b2 = block {
+%arrayLength_1588cd = func():void {
+  $B2: {
     %4:ptr<storage, array<i32>, read> = access %sb_ro, 0u
     %5:u32 = arrayLength %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %arrayLength_1588cd
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %arrayLength_1588cd
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %arrayLength_1588cd
     ret
   }
diff --git a/test/tint/builtins/gen/var/arrayLength/61b1c7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/arrayLength/61b1c7.wgsl.expected.ir.msl
index c984c30..7f449f6 100644
--- a/test/tint/builtins/gen/var/arrayLength/61b1c7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/arrayLength/61b1c7.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: SB_RW = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW = struct @align(4) {
   arg_0:array<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW, read_write> = var @binding_point(0, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%arrayLength_61b1c7 = func():void -> %b2 {
-  %b2 = block {
+%arrayLength_61b1c7 = func():void {
+  $B2: {
     %4:ptr<storage, array<i32>, read_write> = access %sb_rw, 0u
     %5:u32 = arrayLength %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %arrayLength_61b1c7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %arrayLength_61b1c7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %arrayLength_61b1c7
     ret
   }
diff --git a/test/tint/builtins/gen/var/arrayLength/8421b9.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/arrayLength/8421b9.wgsl.expected.ir.msl
index af17f38..f062c57 100644
--- a/test/tint/builtins/gen/var/arrayLength/8421b9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/arrayLength/8421b9.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: SB_RO = struct @align(2) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RO = struct @align(2) {
   arg_0:array<f16> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_ro:ptr<storage, SB_RO, read> = var @binding_point(0, 1)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%arrayLength_8421b9 = func():void -> %b2 {
-  %b2 = block {
+%arrayLength_8421b9 = func():void {
+  $B2: {
     %4:ptr<storage, array<f16>, read> = access %sb_ro, 0u
     %5:u32 = arrayLength %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %arrayLength_8421b9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %arrayLength_8421b9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %arrayLength_8421b9
     ret
   }
diff --git a/test/tint/builtins/gen/var/arrayLength/a0f5ca.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/arrayLength/a0f5ca.wgsl.expected.ir.msl
index 502bcb1..a48951d 100644
--- a/test/tint/builtins/gen/var/arrayLength/a0f5ca.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/arrayLength/a0f5ca.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: SB_RO = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RO = struct @align(4) {
   arg_0:array<f32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_ro:ptr<storage, SB_RO, read> = var @binding_point(0, 1)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%arrayLength_a0f5ca = func():void -> %b2 {
-  %b2 = block {
+%arrayLength_a0f5ca = func():void {
+  $B2: {
     %4:ptr<storage, array<f32>, read> = access %sb_ro, 0u
     %5:u32 = arrayLength %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %arrayLength_a0f5ca
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %arrayLength_a0f5ca
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %arrayLength_a0f5ca
     ret
   }
diff --git a/test/tint/builtins/gen/var/arrayLength/cbd6b5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/arrayLength/cbd6b5.wgsl.expected.ir.msl
index 5794de2..818bebf 100644
--- a/test/tint/builtins/gen/var/arrayLength/cbd6b5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/arrayLength/cbd6b5.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: SB_RW = struct @align(2) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW = struct @align(2) {
   arg_0:array<f16> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW, read_write> = var @binding_point(0, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%arrayLength_cbd6b5 = func():void -> %b2 {
-  %b2 = block {
+%arrayLength_cbd6b5 = func():void {
+  $B2: {
     %4:ptr<storage, array<f16>, read_write> = access %sb_rw, 0u
     %5:u32 = arrayLength %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %arrayLength_cbd6b5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %arrayLength_cbd6b5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %arrayLength_cbd6b5
     ret
   }
diff --git a/test/tint/builtins/gen/var/arrayLength/cdd123.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/arrayLength/cdd123.wgsl.expected.ir.msl
index d3348fb..bbdda44 100644
--- a/test/tint/builtins/gen/var/arrayLength/cdd123.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/arrayLength/cdd123.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: SB_RW = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW = struct @align(4) {
   arg_0:array<f32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW, read_write> = var @binding_point(0, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%arrayLength_cdd123 = func():void -> %b2 {
-  %b2 = block {
+%arrayLength_cdd123 = func():void {
+  $B2: {
     %4:ptr<storage, array<f32>, read_write> = access %sb_rw, 0u
     %5:u32 = arrayLength %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %arrayLength_cdd123
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %arrayLength_cdd123
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %arrayLength_cdd123
     ret
   }
diff --git a/test/tint/builtins/gen/var/arrayLength/cfca0a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/arrayLength/cfca0a.wgsl.expected.ir.msl
index e381c84..f320d12 100644
--- a/test/tint/builtins/gen/var/arrayLength/cfca0a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/arrayLength/cfca0a.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: SB_RO = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RO = struct @align(4) {
   arg_0:array<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_ro:ptr<storage, SB_RO, read> = var @binding_point(0, 1)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%arrayLength_cfca0a = func():void -> %b2 {
-  %b2 = block {
+%arrayLength_cfca0a = func():void {
+  $B2: {
     %4:ptr<storage, array<u32>, read> = access %sb_ro, 0u
     %5:u32 = arrayLength %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %arrayLength_cfca0a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %arrayLength_cfca0a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %arrayLength_cfca0a
     ret
   }
diff --git a/test/tint/builtins/gen/var/arrayLength/eb510f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/arrayLength/eb510f.wgsl.expected.ir.msl
index 900b8d0..b07c58a 100644
--- a/test/tint/builtins/gen/var/arrayLength/eb510f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/arrayLength/eb510f.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: SB_RW = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW = struct @align(4) {
   arg_0:array<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW, read_write> = var @binding_point(0, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%arrayLength_eb510f = func():void -> %b2 {
-  %b2 = block {
+%arrayLength_eb510f = func():void {
+  $B2: {
     %4:ptr<storage, array<u32>, read_write> = access %sb_rw, 0u
     %5:u32 = arrayLength %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %arrayLength_eb510f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %arrayLength_eb510f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %arrayLength_eb510f
     ret
   }
diff --git a/test/tint/builtins/gen/var/asin/064953.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/asin/064953.wgsl.expected.ir.msl
index dd628a6..a41816a 100644
--- a/test/tint/builtins/gen/var/asin/064953.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/asin/064953.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%asin_064953 = func():void -> %b2 {
-  %b2 = block {
+%asin_064953 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(0.47942554950714111328f)
     %4:vec4<f32> = load %arg_0
     %5:vec4<f32> = asin %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %asin_064953
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %asin_064953
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %asin_064953
     ret
   }
diff --git a/test/tint/builtins/gen/var/asin/11dfda.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/asin/11dfda.wgsl.expected.ir.msl
index d694940..26cd65b 100644
--- a/test/tint/builtins/gen/var/asin/11dfda.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/asin/11dfda.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%asin_11dfda = func():void -> %b2 {
-  %b2 = block {
+%asin_11dfda = func():void {
+  $B2: {
     %arg_0:ptr<function, f16, read_write> = var, 0.479248046875h
     %4:f16 = load %arg_0
     %5:f16 = asin %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %asin_11dfda
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %asin_11dfda
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %asin_11dfda
     ret
   }
diff --git a/test/tint/builtins/gen/var/asin/2d8e29.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/asin/2d8e29.wgsl.expected.ir.msl
index f71f921..0ead735 100644
--- a/test/tint/builtins/gen/var/asin/2d8e29.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/asin/2d8e29.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%asin_2d8e29 = func():void -> %b2 {
-  %b2 = block {
+%asin_2d8e29 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(0.479248046875h)
     %4:vec3<f16> = load %arg_0
     %5:vec3<f16> = asin %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %asin_2d8e29
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %asin_2d8e29
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %asin_2d8e29
     ret
   }
diff --git a/test/tint/builtins/gen/var/asin/3cfbd4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/asin/3cfbd4.wgsl.expected.ir.msl
index 618f26c..be8699f 100644
--- a/test/tint/builtins/gen/var/asin/3cfbd4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/asin/3cfbd4.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%asin_3cfbd4 = func():void -> %b2 {
-  %b2 = block {
+%asin_3cfbd4 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(0.479248046875h)
     %4:vec4<f16> = load %arg_0
     %5:vec4<f16> = asin %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %asin_3cfbd4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %asin_3cfbd4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %asin_3cfbd4
     ret
   }
diff --git a/test/tint/builtins/gen/var/asin/7b6a44.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/asin/7b6a44.wgsl.expected.ir.msl
index 5b26c78..f30db80 100644
--- a/test/tint/builtins/gen/var/asin/7b6a44.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/asin/7b6a44.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%asin_7b6a44 = func():void -> %b2 {
-  %b2 = block {
+%asin_7b6a44 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(0.47942554950714111328f)
     %4:vec2<f32> = load %arg_0
     %5:vec2<f32> = asin %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %asin_7b6a44
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %asin_7b6a44
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %asin_7b6a44
     ret
   }
diff --git a/test/tint/builtins/gen/var/asin/8cd9c9.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/asin/8cd9c9.wgsl.expected.ir.msl
index 296bdc3..92b6188 100644
--- a/test/tint/builtins/gen/var/asin/8cd9c9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/asin/8cd9c9.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%asin_8cd9c9 = func():void -> %b2 {
-  %b2 = block {
+%asin_8cd9c9 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(0.47942554950714111328f)
     %4:vec3<f32> = load %arg_0
     %5:vec3<f32> = asin %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %asin_8cd9c9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %asin_8cd9c9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %asin_8cd9c9
     ret
   }
diff --git a/test/tint/builtins/gen/var/asin/b4aced.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/asin/b4aced.wgsl.expected.ir.msl
index dcad49c..4ec4659 100644
--- a/test/tint/builtins/gen/var/asin/b4aced.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/asin/b4aced.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%asin_b4aced = func():void -> %b2 {
-  %b2 = block {
+%asin_b4aced = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(0.479248046875h)
     %4:vec2<f16> = load %arg_0
     %5:vec2<f16> = asin %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %asin_b4aced
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %asin_b4aced
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %asin_b4aced
     ret
   }
diff --git a/test/tint/builtins/gen/var/asin/c0c272.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/asin/c0c272.wgsl.expected.ir.msl
index 0b15ec6..5de31fb 100644
--- a/test/tint/builtins/gen/var/asin/c0c272.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/asin/c0c272.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%asin_c0c272 = func():void -> %b2 {
-  %b2 = block {
+%asin_c0c272 = func():void {
+  $B2: {
     %arg_0:ptr<function, f32, read_write> = var, 0.47942554950714111328f
     %4:f32 = load %arg_0
     %5:f32 = asin %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %asin_c0c272
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %asin_c0c272
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %asin_c0c272
     ret
   }
diff --git a/test/tint/builtins/gen/var/asinh/157447.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/asinh/157447.wgsl.expected.ir.msl
index cc644ba..9170e51 100644
--- a/test/tint/builtins/gen/var/asinh/157447.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/asinh/157447.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%asinh_157447 = func():void -> %b2 {
-  %b2 = block {
+%asinh_157447 = func():void {
+  $B2: {
     %arg_0:ptr<function, f32, read_write> = var, 1.0f
     %4:f32 = load %arg_0
     %5:f32 = asinh %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %asinh_157447
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %asinh_157447
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %asinh_157447
     ret
   }
diff --git a/test/tint/builtins/gen/var/asinh/2265ee.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/asinh/2265ee.wgsl.expected.ir.msl
index e20e4b2..8da41f2 100644
--- a/test/tint/builtins/gen/var/asinh/2265ee.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/asinh/2265ee.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%asinh_2265ee = func():void -> %b2 {
-  %b2 = block {
+%asinh_2265ee = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %4:vec3<f32> = load %arg_0
     %5:vec3<f32> = asinh %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %asinh_2265ee
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %asinh_2265ee
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %asinh_2265ee
     ret
   }
diff --git a/test/tint/builtins/gen/var/asinh/468a48.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/asinh/468a48.wgsl.expected.ir.msl
index 9599d43..cdd2f8f 100644
--- a/test/tint/builtins/gen/var/asinh/468a48.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/asinh/468a48.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%asinh_468a48 = func():void -> %b2 {
-  %b2 = block {
+%asinh_468a48 = func():void {
+  $B2: {
     %arg_0:ptr<function, f16, read_write> = var, 1.0h
     %4:f16 = load %arg_0
     %5:f16 = asinh %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %asinh_468a48
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %asinh_468a48
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %asinh_468a48
     ret
   }
diff --git a/test/tint/builtins/gen/var/asinh/4a2226.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/asinh/4a2226.wgsl.expected.ir.msl
index ebb9127..bb6c0cf 100644
--- a/test/tint/builtins/gen/var/asinh/4a2226.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/asinh/4a2226.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%asinh_4a2226 = func():void -> %b2 {
-  %b2 = block {
+%asinh_4a2226 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %4:vec2<f32> = load %arg_0
     %5:vec2<f32> = asinh %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %asinh_4a2226
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %asinh_4a2226
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %asinh_4a2226
     ret
   }
diff --git a/test/tint/builtins/gen/var/asinh/8d2e51.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/asinh/8d2e51.wgsl.expected.ir.msl
index 1756f2a..0c55edb 100644
--- a/test/tint/builtins/gen/var/asinh/8d2e51.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/asinh/8d2e51.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%asinh_8d2e51 = func():void -> %b2 {
-  %b2 = block {
+%asinh_8d2e51 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %4:vec4<f32> = load %arg_0
     %5:vec4<f32> = asinh %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %asinh_8d2e51
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %asinh_8d2e51
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %asinh_8d2e51
     ret
   }
diff --git a/test/tint/builtins/gen/var/asinh/95ab2b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/asinh/95ab2b.wgsl.expected.ir.msl
index 7722651..b758841 100644
--- a/test/tint/builtins/gen/var/asinh/95ab2b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/asinh/95ab2b.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%asinh_95ab2b = func():void -> %b2 {
-  %b2 = block {
+%asinh_95ab2b = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %4:vec4<f16> = load %arg_0
     %5:vec4<f16> = asinh %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %asinh_95ab2b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %asinh_95ab2b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %asinh_95ab2b
     ret
   }
diff --git a/test/tint/builtins/gen/var/asinh/ad8f8b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/asinh/ad8f8b.wgsl.expected.ir.msl
index 15d38ee..0723f1b 100644
--- a/test/tint/builtins/gen/var/asinh/ad8f8b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/asinh/ad8f8b.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%asinh_ad8f8b = func():void -> %b2 {
-  %b2 = block {
+%asinh_ad8f8b = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %4:vec2<f16> = load %arg_0
     %5:vec2<f16> = asinh %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %asinh_ad8f8b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %asinh_ad8f8b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %asinh_ad8f8b
     ret
   }
diff --git a/test/tint/builtins/gen/var/asinh/fb5e8c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/asinh/fb5e8c.wgsl.expected.ir.msl
index 3b84944..605b105 100644
--- a/test/tint/builtins/gen/var/asinh/fb5e8c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/asinh/fb5e8c.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%asinh_fb5e8c = func():void -> %b2 {
-  %b2 = block {
+%asinh_fb5e8c = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %4:vec3<f16> = load %arg_0
     %5:vec3<f16> = asinh %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %asinh_fb5e8c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %asinh_fb5e8c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %asinh_fb5e8c
     ret
   }
diff --git a/test/tint/builtins/gen/var/atan/02979a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atan/02979a.wgsl.expected.ir.msl
index cd39d38..29ffb53 100644
--- a/test/tint/builtins/gen/var/atan/02979a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atan/02979a.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%atan_02979a = func():void -> %b2 {
-  %b2 = block {
+%atan_02979a = func():void {
+  $B2: {
     %arg_0:ptr<function, f32, read_write> = var, 1.0f
     %4:f32 = load %arg_0
     %5:f32 = atan %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %atan_02979a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %atan_02979a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %atan_02979a
     ret
   }
diff --git a/test/tint/builtins/gen/var/atan/19faea.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atan/19faea.wgsl.expected.ir.msl
index 1c1b3af..c0c624d 100644
--- a/test/tint/builtins/gen/var/atan/19faea.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atan/19faea.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%atan_19faea = func():void -> %b2 {
-  %b2 = block {
+%atan_19faea = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %4:vec4<f16> = load %arg_0
     %5:vec4<f16> = atan %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %atan_19faea
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %atan_19faea
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %atan_19faea
     ret
   }
diff --git a/test/tint/builtins/gen/var/atan/1e1764.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atan/1e1764.wgsl.expected.ir.msl
index e3d9515..2df5a3e 100644
--- a/test/tint/builtins/gen/var/atan/1e1764.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atan/1e1764.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%atan_1e1764 = func():void -> %b2 {
-  %b2 = block {
+%atan_1e1764 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %4:vec2<f16> = load %arg_0
     %5:vec2<f16> = atan %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %atan_1e1764
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %atan_1e1764
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %atan_1e1764
     ret
   }
diff --git a/test/tint/builtins/gen/var/atan/331e6d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atan/331e6d.wgsl.expected.ir.msl
index 066a83b..02c54c4 100644
--- a/test/tint/builtins/gen/var/atan/331e6d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atan/331e6d.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%atan_331e6d = func():void -> %b2 {
-  %b2 = block {
+%atan_331e6d = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %4:vec3<f32> = load %arg_0
     %5:vec3<f32> = atan %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %atan_331e6d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %atan_331e6d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %atan_331e6d
     ret
   }
diff --git a/test/tint/builtins/gen/var/atan/a5f421.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atan/a5f421.wgsl.expected.ir.msl
index 3a72511..d5ab0e8 100644
--- a/test/tint/builtins/gen/var/atan/a5f421.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atan/a5f421.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%atan_a5f421 = func():void -> %b2 {
-  %b2 = block {
+%atan_a5f421 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %4:vec3<f16> = load %arg_0
     %5:vec3<f16> = atan %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %atan_a5f421
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %atan_a5f421
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %atan_a5f421
     ret
   }
diff --git a/test/tint/builtins/gen/var/atan/a7ba61.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atan/a7ba61.wgsl.expected.ir.msl
index 18a5705..30940d5 100644
--- a/test/tint/builtins/gen/var/atan/a7ba61.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atan/a7ba61.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%atan_a7ba61 = func():void -> %b2 {
-  %b2 = block {
+%atan_a7ba61 = func():void {
+  $B2: {
     %arg_0:ptr<function, f16, read_write> = var, 1.0h
     %4:f16 = load %arg_0
     %5:f16 = atan %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %atan_a7ba61
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %atan_a7ba61
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %atan_a7ba61
     ret
   }
diff --git a/test/tint/builtins/gen/var/atan/a8b696.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atan/a8b696.wgsl.expected.ir.msl
index 214e08b..6cbb3b7 100644
--- a/test/tint/builtins/gen/var/atan/a8b696.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atan/a8b696.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%atan_a8b696 = func():void -> %b2 {
-  %b2 = block {
+%atan_a8b696 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %4:vec4<f32> = load %arg_0
     %5:vec4<f32> = atan %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %atan_a8b696
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %atan_a8b696
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %atan_a8b696
     ret
   }
diff --git a/test/tint/builtins/gen/var/atan/ad96e4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atan/ad96e4.wgsl.expected.ir.msl
index a75dd95..5c79624 100644
--- a/test/tint/builtins/gen/var/atan/ad96e4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atan/ad96e4.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%atan_ad96e4 = func():void -> %b2 {
-  %b2 = block {
+%atan_ad96e4 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %4:vec2<f32> = load %arg_0
     %5:vec2<f32> = atan %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %atan_ad96e4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %atan_ad96e4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %atan_ad96e4
     ret
   }
diff --git a/test/tint/builtins/gen/var/atan2/21dfea.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atan2/21dfea.wgsl.expected.ir.msl
index ff76a15..5eb4fe0 100644
--- a/test/tint/builtins/gen/var/atan2/21dfea.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atan2/21dfea.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%atan2_21dfea = func():void -> %b2 {
-  %b2 = block {
+%atan2_21dfea = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %arg_1:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %5:vec3<f16> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %atan2_21dfea
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %atan2_21dfea
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %atan2_21dfea
     ret
   }
diff --git a/test/tint/builtins/gen/var/atan2/57fb13.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atan2/57fb13.wgsl.expected.ir.msl
index d938d76..914fb95 100644
--- a/test/tint/builtins/gen/var/atan2/57fb13.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atan2/57fb13.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%atan2_57fb13 = func():void -> %b2 {
-  %b2 = block {
+%atan2_57fb13 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_1:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %5:vec2<f32> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %atan2_57fb13
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %atan2_57fb13
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %atan2_57fb13
     ret
   }
diff --git a/test/tint/builtins/gen/var/atan2/93febc.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atan2/93febc.wgsl.expected.ir.msl
index c64655e..28e491b 100644
--- a/test/tint/builtins/gen/var/atan2/93febc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atan2/93febc.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%atan2_93febc = func():void -> %b2 {
-  %b2 = block {
+%atan2_93febc = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %arg_1:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %5:vec2<f16> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %atan2_93febc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %atan2_93febc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %atan2_93febc
     ret
   }
diff --git a/test/tint/builtins/gen/var/atan2/96057c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atan2/96057c.wgsl.expected.ir.msl
index f689e30..5d5b6e9 100644
--- a/test/tint/builtins/gen/var/atan2/96057c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atan2/96057c.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%atan2_96057c = func():void -> %b2 {
-  %b2 = block {
+%atan2_96057c = func():void {
+  $B2: {
     %arg_0:ptr<function, f32, read_write> = var, 1.0f
     %arg_1:ptr<function, f32, read_write> = var, 1.0f
     %5:f32 = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %atan2_96057c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %atan2_96057c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %atan2_96057c
     ret
   }
diff --git a/test/tint/builtins/gen/var/atan2/a70d0d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atan2/a70d0d.wgsl.expected.ir.msl
index b68b5f0..fdb0d0f 100644
--- a/test/tint/builtins/gen/var/atan2/a70d0d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atan2/a70d0d.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%atan2_a70d0d = func():void -> %b2 {
-  %b2 = block {
+%atan2_a70d0d = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_1:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %5:vec3<f32> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %atan2_a70d0d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %atan2_a70d0d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %atan2_a70d0d
     ret
   }
diff --git a/test/tint/builtins/gen/var/atan2/ae713e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atan2/ae713e.wgsl.expected.ir.msl
index d88a904..b69ca4b 100644
--- a/test/tint/builtins/gen/var/atan2/ae713e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atan2/ae713e.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%atan2_ae713e = func():void -> %b2 {
-  %b2 = block {
+%atan2_ae713e = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %arg_1:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %5:vec4<f32> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %atan2_ae713e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %atan2_ae713e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %atan2_ae713e
     ret
   }
diff --git a/test/tint/builtins/gen/var/atan2/ca698e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atan2/ca698e.wgsl.expected.ir.msl
index 5282def..8e9ab53 100644
--- a/test/tint/builtins/gen/var/atan2/ca698e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atan2/ca698e.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%atan2_ca698e = func():void -> %b2 {
-  %b2 = block {
+%atan2_ca698e = func():void {
+  $B2: {
     %arg_0:ptr<function, f16, read_write> = var, 1.0h
     %arg_1:ptr<function, f16, read_write> = var, 1.0h
     %5:f16 = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %atan2_ca698e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %atan2_ca698e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %atan2_ca698e
     ret
   }
diff --git a/test/tint/builtins/gen/var/atan2/d983ab.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atan2/d983ab.wgsl.expected.ir.msl
index 5bcd549..7d3dde6 100644
--- a/test/tint/builtins/gen/var/atan2/d983ab.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atan2/d983ab.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%atan2_d983ab = func():void -> %b2 {
-  %b2 = block {
+%atan2_d983ab = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %arg_1:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %5:vec4<f16> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %atan2_d983ab
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %atan2_d983ab
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %atan2_d983ab
     ret
   }
diff --git a/test/tint/builtins/gen/var/atanh/440cca.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atanh/440cca.wgsl.expected.ir.msl
index 589f89b..30c0afa 100644
--- a/test/tint/builtins/gen/var/atanh/440cca.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atanh/440cca.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%atanh_440cca = func():void -> %b2 {
-  %b2 = block {
+%atanh_440cca = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(0.5f)
     %4:vec3<f32> = load %arg_0
     %5:vec3<f32> = atanh %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %atanh_440cca
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %atanh_440cca
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %atanh_440cca
     ret
   }
diff --git a/test/tint/builtins/gen/var/atanh/5bf88d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atanh/5bf88d.wgsl.expected.ir.msl
index 89f49fc..f9cedd7 100644
--- a/test/tint/builtins/gen/var/atanh/5bf88d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atanh/5bf88d.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%atanh_5bf88d = func():void -> %b2 {
-  %b2 = block {
+%atanh_5bf88d = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(0.5h)
     %4:vec2<f16> = load %arg_0
     %5:vec2<f16> = atanh %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %atanh_5bf88d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %atanh_5bf88d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %atanh_5bf88d
     ret
   }
diff --git a/test/tint/builtins/gen/var/atanh/7997d8.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atanh/7997d8.wgsl.expected.ir.msl
index 4559796..937886f 100644
--- a/test/tint/builtins/gen/var/atanh/7997d8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atanh/7997d8.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%atanh_7997d8 = func():void -> %b2 {
-  %b2 = block {
+%atanh_7997d8 = func():void {
+  $B2: {
     %arg_0:ptr<function, f32, read_write> = var, 0.5f
     %4:f32 = load %arg_0
     %5:f32 = atanh %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %atanh_7997d8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %atanh_7997d8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %atanh_7997d8
     ret
   }
diff --git a/test/tint/builtins/gen/var/atanh/c0e634.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atanh/c0e634.wgsl.expected.ir.msl
index df5364e..36e7fee 100644
--- a/test/tint/builtins/gen/var/atanh/c0e634.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atanh/c0e634.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%atanh_c0e634 = func():void -> %b2 {
-  %b2 = block {
+%atanh_c0e634 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(0.5f)
     %4:vec2<f32> = load %arg_0
     %5:vec2<f32> = atanh %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %atanh_c0e634
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %atanh_c0e634
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %atanh_c0e634
     ret
   }
diff --git a/test/tint/builtins/gen/var/atanh/d2d8cd.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atanh/d2d8cd.wgsl.expected.ir.msl
index 9245b77..801ce66 100644
--- a/test/tint/builtins/gen/var/atanh/d2d8cd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atanh/d2d8cd.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%atanh_d2d8cd = func():void -> %b2 {
-  %b2 = block {
+%atanh_d2d8cd = func():void {
+  $B2: {
     %arg_0:ptr<function, f16, read_write> = var, 0.5h
     %4:f16 = load %arg_0
     %5:f16 = atanh %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %atanh_d2d8cd
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %atanh_d2d8cd
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %atanh_d2d8cd
     ret
   }
diff --git a/test/tint/builtins/gen/var/atanh/e3b450.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atanh/e3b450.wgsl.expected.ir.msl
index cd11597..2a736aa 100644
--- a/test/tint/builtins/gen/var/atanh/e3b450.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atanh/e3b450.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%atanh_e3b450 = func():void -> %b2 {
-  %b2 = block {
+%atanh_e3b450 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(0.5h)
     %4:vec4<f16> = load %arg_0
     %5:vec4<f16> = atanh %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %atanh_e3b450
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %atanh_e3b450
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %atanh_e3b450
     ret
   }
diff --git a/test/tint/builtins/gen/var/atanh/ec4b06.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atanh/ec4b06.wgsl.expected.ir.msl
index ef9123d..73e8145 100644
--- a/test/tint/builtins/gen/var/atanh/ec4b06.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atanh/ec4b06.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%atanh_ec4b06 = func():void -> %b2 {
-  %b2 = block {
+%atanh_ec4b06 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(0.5h)
     %4:vec3<f16> = load %arg_0
     %5:vec3<f16> = atanh %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %atanh_ec4b06
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %atanh_ec4b06
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %atanh_ec4b06
     ret
   }
diff --git a/test/tint/builtins/gen/var/atanh/f3e01b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atanh/f3e01b.wgsl.expected.ir.msl
index 378044b..7d4ae12 100644
--- a/test/tint/builtins/gen/var/atanh/f3e01b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atanh/f3e01b.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%atanh_f3e01b = func():void -> %b2 {
-  %b2 = block {
+%atanh_f3e01b = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(0.5f)
     %4:vec4<f32> = load %arg_0
     %5:vec4<f32> = atanh %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %atanh_f3e01b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %atanh_f3e01b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %atanh_f3e01b
     ret
   }
diff --git a/test/tint/builtins/gen/var/atomicAdd/794055.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicAdd/794055.wgsl.expected.ir.msl
index bac8efc..b0e458b 100644
--- a/test/tint/builtins/gen/var/atomicAdd/794055.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicAdd/794055.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<workgroup, atomic<i32>, read_write> = var
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicAdd_794055 = func():void -> %b2 {
-  %b2 = block {
+%atomicAdd_794055 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:i32 = load %arg_1
     %6:i32 = atomicAdd %arg_0, %5
@@ -16,9 +16,17 @@
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
-    %10:void = call %atomicAdd_794055
+%compute_main = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B3: {
+    %11:bool = eq %tint_local_index, 0u
+    if %11 [t: $B4] {  # if_1
+      $B4: {  # true
+        %12:void = atomicStore %arg_0, 0i
+        exit_if  # if_1
+      }
+    }
+    %13:void = msl.threadgroup_barrier 4u
+    %14:void = call %atomicAdd_794055
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/atomicAdd/8a199a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicAdd/8a199a.wgsl.expected.ir.msl
index 9942344..e02fd62 100644
--- a/test/tint/builtins/gen/var/atomicAdd/8a199a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicAdd/8a199a.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: SB_RW = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW = struct @align(4) {
   arg_0:atomic<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW, read_write> = var @binding_point(0, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicAdd_8a199a = func():void -> %b2 {
-  %b2 = block {
+%atomicAdd_8a199a = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:ptr<storage, atomic<u32>, read_write> = access %sb_rw, 0u
     %6:u32 = load %arg_1
@@ -21,14 +21,14 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %11:void = call %atomicAdd_8a199a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b4 {
-  %b4 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B4: {
     %13:void = call %atomicAdd_8a199a
     ret
   }
diff --git a/test/tint/builtins/gen/var/atomicAdd/d32fe4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicAdd/d32fe4.wgsl.expected.ir.msl
index 8a966a4..a986677 100644
--- a/test/tint/builtins/gen/var/atomicAdd/d32fe4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicAdd/d32fe4.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: SB_RW = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW = struct @align(4) {
   arg_0:atomic<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW, read_write> = var @binding_point(0, 0)
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicAdd_d32fe4 = func():void -> %b2 {
-  %b2 = block {
+%atomicAdd_d32fe4 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:ptr<storage, atomic<i32>, read_write> = access %sb_rw, 0u
     %6:i32 = load %arg_1
@@ -21,14 +21,14 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %11:void = call %atomicAdd_d32fe4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b4 {
-  %b4 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B4: {
     %13:void = call %atomicAdd_d32fe4
     ret
   }
diff --git a/test/tint/builtins/gen/var/atomicAdd/d5db1d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicAdd/d5db1d.wgsl.expected.ir.msl
index 4b871f1..1eaa8da 100644
--- a/test/tint/builtins/gen/var/atomicAdd/d5db1d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicAdd/d5db1d.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<workgroup, atomic<u32>, read_write> = var
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicAdd_d5db1d = func():void -> %b2 {
-  %b2 = block {
+%atomicAdd_d5db1d = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:u32 = load %arg_1
     %6:u32 = atomicAdd %arg_0, %5
@@ -16,9 +16,17 @@
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
-    %10:void = call %atomicAdd_d5db1d
+%compute_main = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B3: {
+    %11:bool = eq %tint_local_index, 0u
+    if %11 [t: $B4] {  # if_1
+      $B4: {  # true
+        %12:void = atomicStore %arg_0, 0u
+        exit_if  # if_1
+      }
+    }
+    %13:void = msl.threadgroup_barrier 4u
+    %14:void = call %atomicAdd_d5db1d
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/atomicAnd/152966.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicAnd/152966.wgsl.expected.ir.msl
index 5404076..a1ba11d 100644
--- a/test/tint/builtins/gen/var/atomicAnd/152966.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicAnd/152966.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: SB_RW = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW = struct @align(4) {
   arg_0:atomic<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW, read_write> = var @binding_point(0, 0)
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicAnd_152966 = func():void -> %b2 {
-  %b2 = block {
+%atomicAnd_152966 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:ptr<storage, atomic<i32>, read_write> = access %sb_rw, 0u
     %6:i32 = load %arg_1
@@ -21,14 +21,14 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %11:void = call %atomicAnd_152966
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b4 {
-  %b4 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B4: {
     %13:void = call %atomicAnd_152966
     ret
   }
diff --git a/test/tint/builtins/gen/var/atomicAnd/34edd3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicAnd/34edd3.wgsl.expected.ir.msl
index fd71518..1f18321 100644
--- a/test/tint/builtins/gen/var/atomicAnd/34edd3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicAnd/34edd3.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<workgroup, atomic<u32>, read_write> = var
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicAnd_34edd3 = func():void -> %b2 {
-  %b2 = block {
+%atomicAnd_34edd3 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:u32 = load %arg_1
     %6:u32 = atomicAnd %arg_0, %5
@@ -16,9 +16,17 @@
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
-    %10:void = call %atomicAnd_34edd3
+%compute_main = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B3: {
+    %11:bool = eq %tint_local_index, 0u
+    if %11 [t: $B4] {  # if_1
+      $B4: {  # true
+        %12:void = atomicStore %arg_0, 0u
+        exit_if  # if_1
+      }
+    }
+    %13:void = msl.threadgroup_barrier 4u
+    %14:void = call %atomicAnd_34edd3
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/atomicAnd/45a819.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicAnd/45a819.wgsl.expected.ir.msl
index 9e197c5..fb95c90 100644
--- a/test/tint/builtins/gen/var/atomicAnd/45a819.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicAnd/45a819.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<workgroup, atomic<i32>, read_write> = var
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicAnd_45a819 = func():void -> %b2 {
-  %b2 = block {
+%atomicAnd_45a819 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:i32 = load %arg_1
     %6:i32 = atomicAnd %arg_0, %5
@@ -16,9 +16,17 @@
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
-    %10:void = call %atomicAnd_45a819
+%compute_main = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B3: {
+    %11:bool = eq %tint_local_index, 0u
+    if %11 [t: $B4] {  # if_1
+      $B4: {  # true
+        %12:void = atomicStore %arg_0, 0i
+        exit_if  # if_1
+      }
+    }
+    %13:void = msl.threadgroup_barrier 4u
+    %14:void = call %atomicAnd_45a819
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/atomicAnd/85a8d9.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicAnd/85a8d9.wgsl.expected.ir.msl
index 03df253..b7fc583 100644
--- a/test/tint/builtins/gen/var/atomicAnd/85a8d9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicAnd/85a8d9.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: SB_RW = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW = struct @align(4) {
   arg_0:atomic<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW, read_write> = var @binding_point(0, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicAnd_85a8d9 = func():void -> %b2 {
-  %b2 = block {
+%atomicAnd_85a8d9 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:ptr<storage, atomic<u32>, read_write> = access %sb_rw, 0u
     %6:u32 = load %arg_1
@@ -21,14 +21,14 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %11:void = call %atomicAnd_85a8d9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b4 {
-  %b4 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B4: {
     %13:void = call %atomicAnd_85a8d9
     ret
   }
diff --git a/test/tint/builtins/gen/var/atomicCompareExchangeWeak/1bd40a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicCompareExchangeWeak/1bd40a.wgsl.expected.ir.msl
index b9b64ed..f516df8 100644
--- a/test/tint/builtins/gen/var/atomicCompareExchangeWeak/1bd40a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicCompareExchangeWeak/1bd40a.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: SB_RW = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW = struct @align(4) {
   arg_0:atomic<i32> @offset(0)
 }
 
@@ -9,12 +9,12 @@
   exchanged:bool @offset(4)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW, read_write> = var @binding_point(0, 0)
 }
 
-%atomicCompareExchangeWeak_1bd40a = func():void -> %b2 {
-  %b2 = block {
+%atomicCompareExchangeWeak_1bd40a = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %5:ptr<storage, atomic<i32>, read_write> = access %sb_rw, 0u
@@ -25,14 +25,14 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %11:void = call %atomicCompareExchangeWeak_1bd40a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b4 {
-  %b4 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B4: {
     %13:void = call %atomicCompareExchangeWeak_1bd40a
     ret
   }
diff --git a/test/tint/builtins/gen/var/atomicCompareExchangeWeak/63d8e6.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicCompareExchangeWeak/63d8e6.wgsl.expected.ir.msl
index 3a1c251..b6a731b 100644
--- a/test/tint/builtins/gen/var/atomicCompareExchangeWeak/63d8e6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicCompareExchangeWeak/63d8e6.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: SB_RW = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW = struct @align(4) {
   arg_0:atomic<u32> @offset(0)
 }
 
@@ -9,12 +9,12 @@
   exchanged:bool @offset(4)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW, read_write> = var @binding_point(0, 0)
 }
 
-%atomicCompareExchangeWeak_63d8e6 = func():void -> %b2 {
-  %b2 = block {
+%atomicCompareExchangeWeak_63d8e6 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %5:ptr<storage, atomic<u32>, read_write> = access %sb_rw, 0u
@@ -25,14 +25,14 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %11:void = call %atomicCompareExchangeWeak_63d8e6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b4 {
-  %b4 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B4: {
     %13:void = call %atomicCompareExchangeWeak_63d8e6
     ret
   }
diff --git a/test/tint/builtins/gen/var/atomicCompareExchangeWeak/83580d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicCompareExchangeWeak/83580d.wgsl.expected.ir.msl
index 09231af..b4e0e6d 100644
--- a/test/tint/builtins/gen/var/atomicCompareExchangeWeak/83580d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicCompareExchangeWeak/83580d.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: atomicCompareExchangeWeak
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicCompareExchangeWeak
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/atomicCompareExchangeWeak/e88938.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicCompareExchangeWeak/e88938.wgsl.expected.ir.msl
index 09231af..b4e0e6d 100644
--- a/test/tint/builtins/gen/var/atomicCompareExchangeWeak/e88938.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicCompareExchangeWeak/e88938.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: atomicCompareExchangeWeak
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicCompareExchangeWeak
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/atomicExchange/0a5dca.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicExchange/0a5dca.wgsl.expected.ir.msl
index e52b45a..01fb28e 100644
--- a/test/tint/builtins/gen/var/atomicExchange/0a5dca.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicExchange/0a5dca.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<workgroup, atomic<u32>, read_write> = var
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicExchange_0a5dca = func():void -> %b2 {
-  %b2 = block {
+%atomicExchange_0a5dca = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:u32 = load %arg_1
     %6:u32 = atomicExchange %arg_0, %5
@@ -16,9 +16,17 @@
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
-    %10:void = call %atomicExchange_0a5dca
+%compute_main = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B3: {
+    %11:bool = eq %tint_local_index, 0u
+    if %11 [t: $B4] {  # if_1
+      $B4: {  # true
+        %12:void = atomicStore %arg_0, 0u
+        exit_if  # if_1
+      }
+    }
+    %13:void = msl.threadgroup_barrier 4u
+    %14:void = call %atomicExchange_0a5dca
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/atomicExchange/d59712.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicExchange/d59712.wgsl.expected.ir.msl
index 0d18043..6cce0f2 100644
--- a/test/tint/builtins/gen/var/atomicExchange/d59712.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicExchange/d59712.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: SB_RW = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW = struct @align(4) {
   arg_0:atomic<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW, read_write> = var @binding_point(0, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicExchange_d59712 = func():void -> %b2 {
-  %b2 = block {
+%atomicExchange_d59712 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:ptr<storage, atomic<u32>, read_write> = access %sb_rw, 0u
     %6:u32 = load %arg_1
@@ -21,14 +21,14 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %11:void = call %atomicExchange_d59712
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b4 {
-  %b4 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B4: {
     %13:void = call %atomicExchange_d59712
     ret
   }
diff --git a/test/tint/builtins/gen/var/atomicExchange/e114ba.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicExchange/e114ba.wgsl.expected.ir.msl
index 3c46ca2..6834d7d 100644
--- a/test/tint/builtins/gen/var/atomicExchange/e114ba.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicExchange/e114ba.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<workgroup, atomic<i32>, read_write> = var
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicExchange_e114ba = func():void -> %b2 {
-  %b2 = block {
+%atomicExchange_e114ba = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:i32 = load %arg_1
     %6:i32 = atomicExchange %arg_0, %5
@@ -16,9 +16,17 @@
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
-    %10:void = call %atomicExchange_e114ba
+%compute_main = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B3: {
+    %11:bool = eq %tint_local_index, 0u
+    if %11 [t: $B4] {  # if_1
+      $B4: {  # true
+        %12:void = atomicStore %arg_0, 0i
+        exit_if  # if_1
+      }
+    }
+    %13:void = msl.threadgroup_barrier 4u
+    %14:void = call %atomicExchange_e114ba
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/atomicExchange/f2e22f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicExchange/f2e22f.wgsl.expected.ir.msl
index 6a1ff27..4150b9e 100644
--- a/test/tint/builtins/gen/var/atomicExchange/f2e22f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicExchange/f2e22f.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: SB_RW = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW = struct @align(4) {
   arg_0:atomic<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW, read_write> = var @binding_point(0, 0)
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicExchange_f2e22f = func():void -> %b2 {
-  %b2 = block {
+%atomicExchange_f2e22f = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:ptr<storage, atomic<i32>, read_write> = access %sb_rw, 0u
     %6:i32 = load %arg_1
@@ -21,14 +21,14 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %11:void = call %atomicExchange_f2e22f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b4 {
-  %b4 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B4: {
     %13:void = call %atomicExchange_f2e22f
     ret
   }
diff --git a/test/tint/builtins/gen/var/atomicLoad/0806ad.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicLoad/0806ad.wgsl.expected.ir.msl
index 93c0012..b990acb 100644
--- a/test/tint/builtins/gen/var/atomicLoad/0806ad.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicLoad/0806ad.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: SB_RW = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW = struct @align(4) {
   arg_0:atomic<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW, read_write> = var @binding_point(0, 0)
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicLoad_0806ad = func():void -> %b2 {
-  %b2 = block {
+%atomicLoad_0806ad = func():void {
+  $B2: {
     %4:ptr<storage, atomic<i32>, read_write> = access %sb_rw, 0u
     %5:i32 = atomicLoad %4
     %res:ptr<function, i32, read_write> = var, %5
@@ -19,14 +19,14 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %9:void = call %atomicLoad_0806ad
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b4 {
-  %b4 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B4: {
     %11:void = call %atomicLoad_0806ad
     ret
   }
diff --git a/test/tint/builtins/gen/var/atomicLoad/361bf1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicLoad/361bf1.wgsl.expected.ir.msl
index d6db186..7ae76ad 100644
--- a/test/tint/builtins/gen/var/atomicLoad/361bf1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicLoad/361bf1.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<workgroup, atomic<u32>, read_write> = var
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicLoad_361bf1 = func():void -> %b2 {
-  %b2 = block {
+%atomicLoad_361bf1 = func():void {
+  $B2: {
     %4:u32 = atomicLoad %arg_0
     %res:ptr<function, u32, read_write> = var, %4
     %6:u32 = load %res
@@ -14,9 +14,17 @@
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
-    %8:void = call %atomicLoad_361bf1
+%compute_main = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B3: {
+    %9:bool = eq %tint_local_index, 0u
+    if %9 [t: $B4] {  # if_1
+      $B4: {  # true
+        %10:void = atomicStore %arg_0, 0u
+        exit_if  # if_1
+      }
+    }
+    %11:void = msl.threadgroup_barrier 4u
+    %12:void = call %atomicLoad_361bf1
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/atomicLoad/afcc03.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicLoad/afcc03.wgsl.expected.ir.msl
index 8a2bba0..ee77bef 100644
--- a/test/tint/builtins/gen/var/atomicLoad/afcc03.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicLoad/afcc03.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<workgroup, atomic<i32>, read_write> = var
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicLoad_afcc03 = func():void -> %b2 {
-  %b2 = block {
+%atomicLoad_afcc03 = func():void {
+  $B2: {
     %4:i32 = atomicLoad %arg_0
     %res:ptr<function, i32, read_write> = var, %4
     %6:i32 = load %res
@@ -14,9 +14,17 @@
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
-    %8:void = call %atomicLoad_afcc03
+%compute_main = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B3: {
+    %9:bool = eq %tint_local_index, 0u
+    if %9 [t: $B4] {  # if_1
+      $B4: {  # true
+        %10:void = atomicStore %arg_0, 0i
+        exit_if  # if_1
+      }
+    }
+    %11:void = msl.threadgroup_barrier 4u
+    %12:void = call %atomicLoad_afcc03
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/atomicLoad/fe6cc3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicLoad/fe6cc3.wgsl.expected.ir.msl
index 0a568fb..0637775 100644
--- a/test/tint/builtins/gen/var/atomicLoad/fe6cc3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicLoad/fe6cc3.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: SB_RW = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW = struct @align(4) {
   arg_0:atomic<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW, read_write> = var @binding_point(0, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicLoad_fe6cc3 = func():void -> %b2 {
-  %b2 = block {
+%atomicLoad_fe6cc3 = func():void {
+  $B2: {
     %4:ptr<storage, atomic<u32>, read_write> = access %sb_rw, 0u
     %5:u32 = atomicLoad %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -19,14 +19,14 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %9:void = call %atomicLoad_fe6cc3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b4 {
-  %b4 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B4: {
     %11:void = call %atomicLoad_fe6cc3
     ret
   }
diff --git a/test/tint/builtins/gen/var/atomicMax/51b9be.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicMax/51b9be.wgsl.expected.ir.msl
index 0092159..1f0f423 100644
--- a/test/tint/builtins/gen/var/atomicMax/51b9be.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicMax/51b9be.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: SB_RW = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW = struct @align(4) {
   arg_0:atomic<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW, read_write> = var @binding_point(0, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicMax_51b9be = func():void -> %b2 {
-  %b2 = block {
+%atomicMax_51b9be = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:ptr<storage, atomic<u32>, read_write> = access %sb_rw, 0u
     %6:u32 = load %arg_1
@@ -21,14 +21,14 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %11:void = call %atomicMax_51b9be
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b4 {
-  %b4 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B4: {
     %13:void = call %atomicMax_51b9be
     ret
   }
diff --git a/test/tint/builtins/gen/var/atomicMax/92aa72.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicMax/92aa72.wgsl.expected.ir.msl
index 6fd81ce..94e0ee9 100644
--- a/test/tint/builtins/gen/var/atomicMax/92aa72.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicMax/92aa72.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: SB_RW = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW = struct @align(4) {
   arg_0:atomic<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW, read_write> = var @binding_point(0, 0)
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicMax_92aa72 = func():void -> %b2 {
-  %b2 = block {
+%atomicMax_92aa72 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:ptr<storage, atomic<i32>, read_write> = access %sb_rw, 0u
     %6:i32 = load %arg_1
@@ -21,14 +21,14 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %11:void = call %atomicMax_92aa72
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b4 {
-  %b4 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B4: {
     %13:void = call %atomicMax_92aa72
     ret
   }
diff --git a/test/tint/builtins/gen/var/atomicMax/a89cc3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicMax/a89cc3.wgsl.expected.ir.msl
index fdf6a3b..562e7ee 100644
--- a/test/tint/builtins/gen/var/atomicMax/a89cc3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicMax/a89cc3.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<workgroup, atomic<i32>, read_write> = var
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicMax_a89cc3 = func():void -> %b2 {
-  %b2 = block {
+%atomicMax_a89cc3 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:i32 = load %arg_1
     %6:i32 = atomicMax %arg_0, %5
@@ -16,9 +16,17 @@
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
-    %10:void = call %atomicMax_a89cc3
+%compute_main = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B3: {
+    %11:bool = eq %tint_local_index, 0u
+    if %11 [t: $B4] {  # if_1
+      $B4: {  # true
+        %12:void = atomicStore %arg_0, 0i
+        exit_if  # if_1
+      }
+    }
+    %13:void = msl.threadgroup_barrier 4u
+    %14:void = call %atomicMax_a89cc3
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/atomicMax/beccfc.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicMax/beccfc.wgsl.expected.ir.msl
index 20816ab..d1b0c9d 100644
--- a/test/tint/builtins/gen/var/atomicMax/beccfc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicMax/beccfc.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<workgroup, atomic<u32>, read_write> = var
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicMax_beccfc = func():void -> %b2 {
-  %b2 = block {
+%atomicMax_beccfc = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:u32 = load %arg_1
     %6:u32 = atomicMax %arg_0, %5
@@ -16,9 +16,17 @@
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
-    %10:void = call %atomicMax_beccfc
+%compute_main = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B3: {
+    %11:bool = eq %tint_local_index, 0u
+    if %11 [t: $B4] {  # if_1
+      $B4: {  # true
+        %12:void = atomicStore %arg_0, 0u
+        exit_if  # if_1
+      }
+    }
+    %13:void = msl.threadgroup_barrier 4u
+    %14:void = call %atomicMax_beccfc
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/atomicMin/278235.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicMin/278235.wgsl.expected.ir.msl
index cbf4ba9..0f2fbc8 100644
--- a/test/tint/builtins/gen/var/atomicMin/278235.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicMin/278235.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<workgroup, atomic<i32>, read_write> = var
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicMin_278235 = func():void -> %b2 {
-  %b2 = block {
+%atomicMin_278235 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:i32 = load %arg_1
     %6:i32 = atomicMin %arg_0, %5
@@ -16,9 +16,17 @@
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
-    %10:void = call %atomicMin_278235
+%compute_main = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B3: {
+    %11:bool = eq %tint_local_index, 0u
+    if %11 [t: $B4] {  # if_1
+      $B4: {  # true
+        %12:void = atomicStore %arg_0, 0i
+        exit_if  # if_1
+      }
+    }
+    %13:void = msl.threadgroup_barrier 4u
+    %14:void = call %atomicMin_278235
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/atomicMin/69d383.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicMin/69d383.wgsl.expected.ir.msl
index dc79801..bcceaf4 100644
--- a/test/tint/builtins/gen/var/atomicMin/69d383.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicMin/69d383.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<workgroup, atomic<u32>, read_write> = var
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicMin_69d383 = func():void -> %b2 {
-  %b2 = block {
+%atomicMin_69d383 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:u32 = load %arg_1
     %6:u32 = atomicMin %arg_0, %5
@@ -16,9 +16,17 @@
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
-    %10:void = call %atomicMin_69d383
+%compute_main = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B3: {
+    %11:bool = eq %tint_local_index, 0u
+    if %11 [t: $B4] {  # if_1
+      $B4: {  # true
+        %12:void = atomicStore %arg_0, 0u
+        exit_if  # if_1
+      }
+    }
+    %13:void = msl.threadgroup_barrier 4u
+    %14:void = call %atomicMin_69d383
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/atomicMin/8e38dc.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicMin/8e38dc.wgsl.expected.ir.msl
index ecf7242..2ba247f 100644
--- a/test/tint/builtins/gen/var/atomicMin/8e38dc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicMin/8e38dc.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: SB_RW = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW = struct @align(4) {
   arg_0:atomic<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW, read_write> = var @binding_point(0, 0)
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicMin_8e38dc = func():void -> %b2 {
-  %b2 = block {
+%atomicMin_8e38dc = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:ptr<storage, atomic<i32>, read_write> = access %sb_rw, 0u
     %6:i32 = load %arg_1
@@ -21,14 +21,14 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %11:void = call %atomicMin_8e38dc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b4 {
-  %b4 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B4: {
     %13:void = call %atomicMin_8e38dc
     ret
   }
diff --git a/test/tint/builtins/gen/var/atomicMin/c67a74.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicMin/c67a74.wgsl.expected.ir.msl
index 134d87c..b73dd5e 100644
--- a/test/tint/builtins/gen/var/atomicMin/c67a74.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicMin/c67a74.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: SB_RW = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW = struct @align(4) {
   arg_0:atomic<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW, read_write> = var @binding_point(0, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicMin_c67a74 = func():void -> %b2 {
-  %b2 = block {
+%atomicMin_c67a74 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:ptr<storage, atomic<u32>, read_write> = access %sb_rw, 0u
     %6:u32 = load %arg_1
@@ -21,14 +21,14 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %11:void = call %atomicMin_c67a74
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b4 {
-  %b4 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B4: {
     %13:void = call %atomicMin_c67a74
     ret
   }
diff --git a/test/tint/builtins/gen/var/atomicOr/5e3d61.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicOr/5e3d61.wgsl.expected.ir.msl
index 877e6da..674263e 100644
--- a/test/tint/builtins/gen/var/atomicOr/5e3d61.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicOr/5e3d61.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<workgroup, atomic<u32>, read_write> = var
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicOr_5e3d61 = func():void -> %b2 {
-  %b2 = block {
+%atomicOr_5e3d61 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:u32 = load %arg_1
     %6:u32 = atomicOr %arg_0, %5
@@ -16,9 +16,17 @@
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
-    %10:void = call %atomicOr_5e3d61
+%compute_main = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B3: {
+    %11:bool = eq %tint_local_index, 0u
+    if %11 [t: $B4] {  # if_1
+      $B4: {  # true
+        %12:void = atomicStore %arg_0, 0u
+        exit_if  # if_1
+      }
+    }
+    %13:void = msl.threadgroup_barrier 4u
+    %14:void = call %atomicOr_5e3d61
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/atomicOr/5e95d4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicOr/5e95d4.wgsl.expected.ir.msl
index 652a30c..55439a1 100644
--- a/test/tint/builtins/gen/var/atomicOr/5e95d4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicOr/5e95d4.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: SB_RW = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW = struct @align(4) {
   arg_0:atomic<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW, read_write> = var @binding_point(0, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicOr_5e95d4 = func():void -> %b2 {
-  %b2 = block {
+%atomicOr_5e95d4 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:ptr<storage, atomic<u32>, read_write> = access %sb_rw, 0u
     %6:u32 = load %arg_1
@@ -21,14 +21,14 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %11:void = call %atomicOr_5e95d4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b4 {
-  %b4 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B4: {
     %13:void = call %atomicOr_5e95d4
     ret
   }
diff --git a/test/tint/builtins/gen/var/atomicOr/8d96a0.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicOr/8d96a0.wgsl.expected.ir.msl
index ae3aa4f..676e025 100644
--- a/test/tint/builtins/gen/var/atomicOr/8d96a0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicOr/8d96a0.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: SB_RW = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW = struct @align(4) {
   arg_0:atomic<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW, read_write> = var @binding_point(0, 0)
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicOr_8d96a0 = func():void -> %b2 {
-  %b2 = block {
+%atomicOr_8d96a0 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:ptr<storage, atomic<i32>, read_write> = access %sb_rw, 0u
     %6:i32 = load %arg_1
@@ -21,14 +21,14 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %11:void = call %atomicOr_8d96a0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b4 {
-  %b4 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B4: {
     %13:void = call %atomicOr_8d96a0
     ret
   }
diff --git a/test/tint/builtins/gen/var/atomicOr/d09248.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicOr/d09248.wgsl.expected.ir.msl
index 00a18f6..9411bde 100644
--- a/test/tint/builtins/gen/var/atomicOr/d09248.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicOr/d09248.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<workgroup, atomic<i32>, read_write> = var
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicOr_d09248 = func():void -> %b2 {
-  %b2 = block {
+%atomicOr_d09248 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:i32 = load %arg_1
     %6:i32 = atomicOr %arg_0, %5
@@ -16,9 +16,17 @@
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
-    %10:void = call %atomicOr_d09248
+%compute_main = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B3: {
+    %11:bool = eq %tint_local_index, 0u
+    if %11 [t: $B4] {  # if_1
+      $B4: {  # true
+        %12:void = atomicStore %arg_0, 0i
+        exit_if  # if_1
+      }
+    }
+    %13:void = msl.threadgroup_barrier 4u
+    %14:void = call %atomicOr_d09248
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/atomicStore/726882.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicStore/726882.wgsl.expected.ir.msl
index 40823e3..92c0fdd 100644
--- a/test/tint/builtins/gen/var/atomicStore/726882.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicStore/726882.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: atomicStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/atomicStore/8bea94.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicStore/8bea94.wgsl.expected.ir.msl
index 40823e3..92c0fdd 100644
--- a/test/tint/builtins/gen/var/atomicStore/8bea94.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicStore/8bea94.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: atomicStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: atomicStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/atomicStore/cdc29e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicStore/cdc29e.wgsl.expected.ir.msl
index f3c5739..c1a5cdb 100644
--- a/test/tint/builtins/gen/var/atomicStore/cdc29e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicStore/cdc29e.wgsl.expected.ir.msl
@@ -1,15 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: SB_RW = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW = struct @align(4) {
   arg_0:atomic<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW, read_write> = var @binding_point(0, 0)
 }
 
-%atomicStore_cdc29e = func():void -> %b2 {
-  %b2 = block {
+%atomicStore_cdc29e = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %4:ptr<storage, atomic<u32>, read_write> = access %sb_rw, 0u
     %5:u32 = load %arg_1
@@ -17,14 +17,14 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %8:void = call %atomicStore_cdc29e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b4 {
-  %b4 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B4: {
     %10:void = call %atomicStore_cdc29e
     ret
   }
diff --git a/test/tint/builtins/gen/var/atomicStore/d1e9a6.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicStore/d1e9a6.wgsl.expected.ir.msl
index db767d4..9e419f8 100644
--- a/test/tint/builtins/gen/var/atomicStore/d1e9a6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicStore/d1e9a6.wgsl.expected.ir.msl
@@ -1,15 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: SB_RW = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW = struct @align(4) {
   arg_0:atomic<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW, read_write> = var @binding_point(0, 0)
 }
 
-%atomicStore_d1e9a6 = func():void -> %b2 {
-  %b2 = block {
+%atomicStore_d1e9a6 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %4:ptr<storage, atomic<i32>, read_write> = access %sb_rw, 0u
     %5:i32 = load %arg_1
@@ -17,14 +17,14 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %8:void = call %atomicStore_d1e9a6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b4 {
-  %b4 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B4: {
     %10:void = call %atomicStore_d1e9a6
     ret
   }
diff --git a/test/tint/builtins/gen/var/atomicSub/051100.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicSub/051100.wgsl.expected.ir.msl
index 681bc12..4c11fa3 100644
--- a/test/tint/builtins/gen/var/atomicSub/051100.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicSub/051100.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: SB_RW = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW = struct @align(4) {
   arg_0:atomic<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW, read_write> = var @binding_point(0, 0)
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicSub_051100 = func():void -> %b2 {
-  %b2 = block {
+%atomicSub_051100 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:ptr<storage, atomic<i32>, read_write> = access %sb_rw, 0u
     %6:i32 = load %arg_1
@@ -21,14 +21,14 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %11:void = call %atomicSub_051100
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b4 {
-  %b4 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B4: {
     %13:void = call %atomicSub_051100
     ret
   }
diff --git a/test/tint/builtins/gen/var/atomicSub/0d26c2.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicSub/0d26c2.wgsl.expected.ir.msl
index 7a85c2a..d2ef285 100644
--- a/test/tint/builtins/gen/var/atomicSub/0d26c2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicSub/0d26c2.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<workgroup, atomic<u32>, read_write> = var
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicSub_0d26c2 = func():void -> %b2 {
-  %b2 = block {
+%atomicSub_0d26c2 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:u32 = load %arg_1
     %6:u32 = atomicSub %arg_0, %5
@@ -16,9 +16,17 @@
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
-    %10:void = call %atomicSub_0d26c2
+%compute_main = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B3: {
+    %11:bool = eq %tint_local_index, 0u
+    if %11 [t: $B4] {  # if_1
+      $B4: {  # true
+        %12:void = atomicStore %arg_0, 0u
+        exit_if  # if_1
+      }
+    }
+    %13:void = msl.threadgroup_barrier 4u
+    %14:void = call %atomicSub_0d26c2
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/atomicSub/15bfc9.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicSub/15bfc9.wgsl.expected.ir.msl
index 2b75d6d..f2b9e5d 100644
--- a/test/tint/builtins/gen/var/atomicSub/15bfc9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicSub/15bfc9.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: SB_RW = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW = struct @align(4) {
   arg_0:atomic<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW, read_write> = var @binding_point(0, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicSub_15bfc9 = func():void -> %b2 {
-  %b2 = block {
+%atomicSub_15bfc9 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:ptr<storage, atomic<u32>, read_write> = access %sb_rw, 0u
     %6:u32 = load %arg_1
@@ -21,14 +21,14 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %11:void = call %atomicSub_15bfc9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b4 {
-  %b4 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B4: {
     %13:void = call %atomicSub_15bfc9
     ret
   }
diff --git a/test/tint/builtins/gen/var/atomicSub/77883a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicSub/77883a.wgsl.expected.ir.msl
index 2209109..08c3396 100644
--- a/test/tint/builtins/gen/var/atomicSub/77883a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicSub/77883a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<workgroup, atomic<i32>, read_write> = var
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicSub_77883a = func():void -> %b2 {
-  %b2 = block {
+%atomicSub_77883a = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:i32 = load %arg_1
     %6:i32 = atomicSub %arg_0, %5
@@ -16,9 +16,17 @@
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
-    %10:void = call %atomicSub_77883a
+%compute_main = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B3: {
+    %11:bool = eq %tint_local_index, 0u
+    if %11 [t: $B4] {  # if_1
+      $B4: {  # true
+        %12:void = atomicStore %arg_0, 0i
+        exit_if  # if_1
+      }
+    }
+    %13:void = msl.threadgroup_barrier 4u
+    %14:void = call %atomicSub_77883a
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/atomicXor/54510e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicXor/54510e.wgsl.expected.ir.msl
index c65f07f..098fa82 100644
--- a/test/tint/builtins/gen/var/atomicXor/54510e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicXor/54510e.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: SB_RW = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW = struct @align(4) {
   arg_0:atomic<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW, read_write> = var @binding_point(0, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicXor_54510e = func():void -> %b2 {
-  %b2 = block {
+%atomicXor_54510e = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:ptr<storage, atomic<u32>, read_write> = access %sb_rw, 0u
     %6:u32 = load %arg_1
@@ -21,14 +21,14 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %11:void = call %atomicXor_54510e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b4 {
-  %b4 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B4: {
     %13:void = call %atomicXor_54510e
     ret
   }
diff --git a/test/tint/builtins/gen/var/atomicXor/75dc95.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicXor/75dc95.wgsl.expected.ir.msl
index 2080a0d..7006b95 100644
--- a/test/tint/builtins/gen/var/atomicXor/75dc95.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicXor/75dc95.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<workgroup, atomic<i32>, read_write> = var
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicXor_75dc95 = func():void -> %b2 {
-  %b2 = block {
+%atomicXor_75dc95 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:i32 = load %arg_1
     %6:i32 = atomicXor %arg_0, %5
@@ -16,9 +16,17 @@
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
-    %10:void = call %atomicXor_75dc95
+%compute_main = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B3: {
+    %11:bool = eq %tint_local_index, 0u
+    if %11 [t: $B4] {  # if_1
+      $B4: {  # true
+        %12:void = atomicStore %arg_0, 0i
+        exit_if  # if_1
+      }
+    }
+    %13:void = msl.threadgroup_barrier 4u
+    %14:void = call %atomicXor_75dc95
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/atomicXor/c1b78c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicXor/c1b78c.wgsl.expected.ir.msl
index f3129fd..8f0769e 100644
--- a/test/tint/builtins/gen/var/atomicXor/c1b78c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicXor/c1b78c.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: SB_RW = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SB_RW = struct @align(4) {
   arg_0:atomic<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %sb_rw:ptr<storage, SB_RW, read_write> = var @binding_point(0, 0)
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicXor_c1b78c = func():void -> %b2 {
-  %b2 = block {
+%atomicXor_c1b78c = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:ptr<storage, atomic<i32>, read_write> = access %sb_rw, 0u
     %6:i32 = load %arg_1
@@ -21,14 +21,14 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %11:void = call %atomicXor_c1b78c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b4 {
-  %b4 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B4: {
     %13:void = call %atomicXor_c1b78c
     ret
   }
diff --git a/test/tint/builtins/gen/var/atomicXor/c8e6be.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/atomicXor/c8e6be.wgsl.expected.ir.msl
index 8f604ef..add516e 100644
--- a/test/tint/builtins/gen/var/atomicXor/c8e6be.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/atomicXor/c8e6be.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<workgroup, atomic<u32>, read_write> = var
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%atomicXor_c8e6be = func():void -> %b2 {
-  %b2 = block {
+%atomicXor_c8e6be = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:u32 = load %arg_1
     %6:u32 = atomicXor %arg_0, %5
@@ -16,9 +16,17 @@
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
-    %10:void = call %atomicXor_c8e6be
+%compute_main = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B3: {
+    %11:bool = eq %tint_local_index, 0u
+    if %11 [t: $B4] {  # if_1
+      $B4: {  # true
+        %12:void = atomicStore %arg_0, 0u
+        exit_if  # if_1
+      }
+    }
+    %13:void = msl.threadgroup_barrier 4u
+    %14:void = call %atomicXor_c8e6be
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/bitcast/0fe0c9.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/bitcast/0fe0c9.wgsl.expected.ir.msl
new file mode 100644
index 0000000..8f69339
--- /dev/null
+++ b/test/tint/builtins/gen/var/bitcast/0fe0c9.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_0fe0c9 = func():void {
+  $B2: {
+    %arg_0:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
+    %4:vec3<u32> = load %arg_0
+    %5:vec3<f32> = bitcast %4
+    %res:ptr<function, vec3<f32>, read_write> = var, %5
+    %7:vec3<f32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %bitcast_0fe0c9
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %bitcast_0fe0c9
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %bitcast_0fe0c9
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/bitcast/160c09.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/bitcast/160c09.wgsl.expected.ir.msl
new file mode 100644
index 0000000..3bc3ef4
--- /dev/null
+++ b/test/tint/builtins/gen/var/bitcast/160c09.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_160c09 = func():void {
+  $B2: {
+    %res:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
+    %4:vec4<u32> = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %bitcast_160c09
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %bitcast_160c09
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %bitcast_160c09
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/bitcast/16cba4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/bitcast/16cba4.wgsl.expected.ir.msl
new file mode 100644
index 0000000..73abc25
--- /dev/null
+++ b/test/tint/builtins/gen/var/bitcast/16cba4.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_16cba4 = func():void {
+  $B2: {
+    %arg_0:ptr<function, f32, read_write> = var, 1.0f
+    %4:f32 = load %arg_0
+    %5:i32 = bitcast %4
+    %res:ptr<function, i32, read_write> = var, %5
+    %7:i32 = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %bitcast_16cba4
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %bitcast_16cba4
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %bitcast_16cba4
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/bitcast/1c3b31.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/bitcast/1c3b31.wgsl.expected.ir.msl
new file mode 100644
index 0000000..4e4b6f4
--- /dev/null
+++ b/test/tint/builtins/gen/var/bitcast/1c3b31.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_1c3b31 = func():void {
+  $B2: {
+    %arg_0:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
+    %4:vec2<i32> = load %arg_0
+    %5:vec2<u32> = bitcast %4
+    %res:ptr<function, vec2<u32>, read_write> = var, %5
+    %7:vec2<u32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %bitcast_1c3b31
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %bitcast_1c3b31
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %bitcast_1c3b31
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/bitcast/1df11f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/bitcast/1df11f.wgsl.expected.ir.msl
new file mode 100644
index 0000000..a6ff8e1
--- /dev/null
+++ b/test/tint/builtins/gen/var/bitcast/1df11f.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_1df11f = func():void {
+  $B2: {
+    %arg_0:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
+    %4:vec2<f16> = load %arg_0
+    %5:vec2<f16> = bitcast %4
+    %res:ptr<function, vec2<f16>, read_write> = var, %5
+    %7:vec2<f16> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %bitcast_1df11f
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %bitcast_1df11f
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %bitcast_1df11f
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/bitcast/214f23.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/bitcast/214f23.wgsl.expected.ir.msl
new file mode 100644
index 0000000..3224687
--- /dev/null
+++ b/test/tint/builtins/gen/var/bitcast/214f23.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec2<i32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_214f23 = func():void {
+  $B2: {
+    %arg_0:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
+    %4:vec4<f16> = load %arg_0
+    %5:vec2<i32> = bitcast %4
+    %res:ptr<function, vec2<i32>, read_write> = var, %5
+    %7:vec2<i32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %bitcast_214f23
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %bitcast_214f23
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %bitcast_214f23
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/bitcast/23c8bd.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/bitcast/23c8bd.wgsl.expected.ir.msl
new file mode 100644
index 0000000..c224a52
--- /dev/null
+++ b/test/tint/builtins/gen/var/bitcast/23c8bd.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_23c8bd = func():void {
+  $B2: {
+    %arg_0:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
+    %4:vec2<f16> = load %arg_0
+    %5:f32 = bitcast %4
+    %res:ptr<function, f32, read_write> = var, %5
+    %7:f32 = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %bitcast_23c8bd
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %bitcast_23c8bd
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %bitcast_23c8bd
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/bitcast/2421c8.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/bitcast/2421c8.wgsl.expected.ir.msl
new file mode 100644
index 0000000..0d5fc30
--- /dev/null
+++ b/test/tint/builtins/gen/var/bitcast/2421c8.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_2421c8 = func():void {
+  $B2: {
+    %arg_0:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
+    %4:vec2<u32> = load %arg_0
+    %5:vec2<f32> = bitcast %4
+    %res:ptr<function, vec2<f32>, read_write> = var, %5
+    %7:vec2<f32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %bitcast_2421c8
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %bitcast_2421c8
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %bitcast_2421c8
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/bitcast/287bdf.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/bitcast/287bdf.wgsl.expected.ir.msl
new file mode 100644
index 0000000..a0dd331
--- /dev/null
+++ b/test/tint/builtins/gen/var/bitcast/287bdf.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_287bdf = func():void {
+  $B2: {
+    %arg_0:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
+    %4:vec3<i32> = load %arg_0
+    %5:vec3<u32> = bitcast %4
+    %res:ptr<function, vec3<u32>, read_write> = var, %5
+    %7:vec3<u32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %bitcast_287bdf
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %bitcast_287bdf
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %bitcast_287bdf
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/bitcast/2a6e58.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/bitcast/2a6e58.wgsl.expected.ir.msl
new file mode 100644
index 0000000..e8b86d1
--- /dev/null
+++ b/test/tint/builtins/gen/var/bitcast/2a6e58.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_2a6e58 = func():void {
+  $B2: {
+    %arg_0:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
+    %4:vec4<f16> = load %arg_0
+    %5:vec2<f32> = bitcast %4
+    %res:ptr<function, vec2<f32>, read_write> = var, %5
+    %7:vec2<f32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %bitcast_2a6e58
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %bitcast_2a6e58
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %bitcast_2a6e58
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/bitcast/2b05b3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/bitcast/2b05b3.wgsl.expected.ir.msl
new file mode 100644
index 0000000..f24eef3
--- /dev/null
+++ b/test/tint/builtins/gen/var/bitcast/2b05b3.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_2b05b3 = func():void {
+  $B2: {
+    %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
+    %4:vec3<f32> = load %arg_0
+    %5:vec3<f32> = bitcast %4
+    %res:ptr<function, vec3<f32>, read_write> = var, %5
+    %7:vec3<f32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %bitcast_2b05b3
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %bitcast_2b05b3
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %bitcast_2b05b3
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/bitcast/2b2738.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/bitcast/2b2738.wgsl.expected.ir.msl
new file mode 100644
index 0000000..0355a57
--- /dev/null
+++ b/test/tint/builtins/gen/var/bitcast/2b2738.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_2b2738 = func():void {
+  $B2: {
+    %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
+    %4:vec2<f32> = load %arg_0
+    %5:vec2<u32> = bitcast %4
+    %res:ptr<function, vec2<u32>, read_write> = var, %5
+    %7:vec2<u32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %bitcast_2b2738
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %bitcast_2b2738
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %bitcast_2b2738
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/bitcast/31c080.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/bitcast/31c080.wgsl.expected.ir.msl
new file mode 100644
index 0000000..36d608f
--- /dev/null
+++ b/test/tint/builtins/gen/var/bitcast/31c080.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_31c080 = func():void {
+  $B2: {
+    %arg_0:ptr<function, u32, read_write> = var, 1u
+    %4:u32 = load %arg_0
+    %5:u32 = bitcast %4
+    %res:ptr<function, u32, read_write> = var, %5
+    %7:u32 = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %bitcast_31c080
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %bitcast_31c080
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %bitcast_31c080
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/bitcast/332f78.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/bitcast/332f78.wgsl.expected.ir.msl
new file mode 100644
index 0000000..8deaf83
--- /dev/null
+++ b/test/tint/builtins/gen/var/bitcast/332f78.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_332f78 = func():void {
+  $B2: {
+    %arg_0:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
+    %4:vec3<i32> = load %arg_0
+    %5:vec3<f32> = bitcast %4
+    %res:ptr<function, vec3<f32>, read_write> = var, %5
+    %7:vec3<f32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %bitcast_332f78
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %bitcast_332f78
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %bitcast_332f78
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/bitcast/3e7b47.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/bitcast/3e7b47.wgsl.expected.ir.msl
new file mode 100644
index 0000000..b7b950e
--- /dev/null
+++ b/test/tint/builtins/gen/var/bitcast/3e7b47.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_3e7b47 = func():void {
+  $B2: {
+    %arg_0:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
+    %4:vec4<f16> = load %arg_0
+    %5:vec4<f16> = bitcast %4
+    %res:ptr<function, vec4<f16>, read_write> = var, %5
+    %7:vec4<f16> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %bitcast_3e7b47
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %bitcast_3e7b47
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %bitcast_3e7b47
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/bitcast/3f7437.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/bitcast/3f7437.wgsl.expected.ir.msl
new file mode 100644
index 0000000..e0ae4c0
--- /dev/null
+++ b/test/tint/builtins/gen/var/bitcast/3f7437.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_3f7437 = func():void {
+  $B2: {
+    %arg_0:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
+    %4:vec4<i32> = load %arg_0
+    %5:vec4<i32> = bitcast %4
+    %res:ptr<function, vec4<i32>, read_write> = var, %5
+    %7:vec4<i32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %bitcast_3f7437
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %bitcast_3f7437
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %bitcast_3f7437
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/bitcast/3fdacd.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/bitcast/3fdacd.wgsl.expected.ir.msl
new file mode 100644
index 0000000..1bab90a
--- /dev/null
+++ b/test/tint/builtins/gen/var/bitcast/3fdacd.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_3fdacd = func():void {
+  $B2: {
+    %arg_0:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
+    %4:vec4<i32> = load %arg_0
+    %5:vec4<f32> = bitcast %4
+    %res:ptr<function, vec4<f32>, read_write> = var, %5
+    %7:vec4<f32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %bitcast_3fdacd
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %bitcast_3fdacd
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %bitcast_3fdacd
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/bitcast/429d64.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/bitcast/429d64.wgsl.expected.ir.msl
new file mode 100644
index 0000000..302376f
--- /dev/null
+++ b/test/tint/builtins/gen/var/bitcast/429d64.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_429d64 = func():void {
+  $B2: {
+    %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
+    %4:vec2<f32> = load %arg_0
+    %5:vec4<f16> = bitcast %4
+    %res:ptr<function, vec4<f16>, read_write> = var, %5
+    %7:vec4<f16> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %bitcast_429d64
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %bitcast_429d64
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %bitcast_429d64
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/bitcast/436211.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/bitcast/436211.wgsl.expected.ir.msl
new file mode 100644
index 0000000..0b77eed
--- /dev/null
+++ b/test/tint/builtins/gen/var/bitcast/436211.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_436211 = func():void {
+  $B2: {
+    %arg_0:ptr<function, f16, read_write> = var, 1.0h
+    %4:f16 = load %arg_0
+    %5:f16 = bitcast %4
+    %res:ptr<function, f16, read_write> = var, %5
+    %7:f16 = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %bitcast_436211
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %bitcast_436211
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %bitcast_436211
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/bitcast/5081ed.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/bitcast/5081ed.wgsl.expected.ir.msl
new file mode 100644
index 0000000..6fbca43
--- /dev/null
+++ b/test/tint/builtins/gen/var/bitcast/5081ed.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_5081ed = func():void {
+  $B2: {
+    %arg_0:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
+    %4:vec3<f16> = load %arg_0
+    %5:vec3<f16> = bitcast %4
+    %res:ptr<function, vec3<f16>, read_write> = var, %5
+    %7:vec3<f16> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %bitcast_5081ed
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %bitcast_5081ed
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %bitcast_5081ed
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/bitcast/56266e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/bitcast/56266e.wgsl.expected.ir.msl
new file mode 100644
index 0000000..37d76ca
--- /dev/null
+++ b/test/tint/builtins/gen/var/bitcast/56266e.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_56266e = func():void {
+  $B2: {
+    %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
+    %4:vec3<f32> = load %arg_0
+    %5:vec3<u32> = bitcast %4
+    %res:ptr<function, vec3<u32>, read_write> = var, %5
+    %7:vec3<u32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %bitcast_56266e
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %bitcast_56266e
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %bitcast_56266e
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/bitcast/66e93d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/bitcast/66e93d.wgsl.expected.ir.msl
new file mode 100644
index 0000000..b980939
--- /dev/null
+++ b/test/tint/builtins/gen/var/bitcast/66e93d.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_66e93d = func():void {
+  $B2: {
+    %arg_0:ptr<function, u32, read_write> = var, 1u
+    %4:u32 = load %arg_0
+    %5:vec2<f16> = bitcast %4
+    %res:ptr<function, vec2<f16>, read_write> = var, %5
+    %7:vec2<f16> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %bitcast_66e93d
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %bitcast_66e93d
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %bitcast_66e93d
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/bitcast/674557.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/bitcast/674557.wgsl.expected.ir.msl
new file mode 100644
index 0000000..10c8c1c
--- /dev/null
+++ b/test/tint/builtins/gen/var/bitcast/674557.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_674557 = func():void {
+  $B2: {
+    %arg_0:ptr<function, i32, read_write> = var, 1i
+    %4:i32 = load %arg_0
+    %5:vec2<f16> = bitcast %4
+    %res:ptr<function, vec2<f16>, read_write> = var, %5
+    %7:vec2<f16> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %bitcast_674557
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %bitcast_674557
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %bitcast_674557
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/bitcast/6ac6f9.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/bitcast/6ac6f9.wgsl.expected.ir.msl
new file mode 100644
index 0000000..3903be1
--- /dev/null
+++ b/test/tint/builtins/gen/var/bitcast/6ac6f9.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_6ac6f9 = func():void {
+  $B2: {
+    %arg_0:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
+    %4:vec2<f16> = load %arg_0
+    %5:i32 = bitcast %4
+    %res:ptr<function, i32, read_write> = var, %5
+    %7:i32 = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %bitcast_6ac6f9
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %bitcast_6ac6f9
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %bitcast_6ac6f9
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/bitcast/6de2bd.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/bitcast/6de2bd.wgsl.expected.ir.msl
new file mode 100644
index 0000000..75088ccd
--- /dev/null
+++ b/test/tint/builtins/gen/var/bitcast/6de2bd.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_6de2bd = func():void {
+  $B2: {
+    %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
+    %4:vec4<f32> = load %arg_0
+    %5:vec4<i32> = bitcast %4
+    %res:ptr<function, vec4<i32>, read_write> = var, %5
+    %7:vec4<i32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %bitcast_6de2bd
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %bitcast_6de2bd
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %bitcast_6de2bd
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/bitcast/70b121.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/bitcast/70b121.wgsl.expected.ir.msl
new file mode 100644
index 0000000..5a11cf6
--- /dev/null
+++ b/test/tint/builtins/gen/var/bitcast/70b121.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_70b121 = func():void {
+  $B2: {
+    %res:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
+    %4:vec2<u32> = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %bitcast_70b121
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %bitcast_70b121
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %bitcast_70b121
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/bitcast/71c92a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/bitcast/71c92a.wgsl.expected.ir.msl
new file mode 100644
index 0000000..2f33f9d
--- /dev/null
+++ b/test/tint/builtins/gen/var/bitcast/71c92a.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_71c92a = func():void {
+  $B2: {
+    %arg_0:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
+    %4:vec2<i32> = load %arg_0
+    %5:vec4<f16> = bitcast %4
+    %res:ptr<function, vec4<f16>, read_write> = var, %5
+    %7:vec4<f16> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %bitcast_71c92a
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %bitcast_71c92a
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %bitcast_71c92a
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/bitcast/745b27.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/bitcast/745b27.wgsl.expected.ir.msl
new file mode 100644
index 0000000..5de8567
--- /dev/null
+++ b/test/tint/builtins/gen/var/bitcast/745b27.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_745b27 = func():void {
+  $B2: {
+    %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
+    %4:vec4<f32> = load %arg_0
+    %5:vec4<f32> = bitcast %4
+    %res:ptr<function, vec4<f32>, read_write> = var, %5
+    %7:vec4<f32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %bitcast_745b27
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %bitcast_745b27
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %bitcast_745b27
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/bitcast/7e67cc.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/bitcast/7e67cc.wgsl.expected.ir.msl
new file mode 100644
index 0000000..7b41ec2
--- /dev/null
+++ b/test/tint/builtins/gen/var/bitcast/7e67cc.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_7e67cc = func():void {
+  $B2: {
+    %arg_0:ptr<function, i32, read_write> = var, 1i
+    %4:i32 = load %arg_0
+    %5:i32 = bitcast %4
+    %res:ptr<function, i32, read_write> = var, %5
+    %7:i32 = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %bitcast_7e67cc
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %bitcast_7e67cc
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %bitcast_7e67cc
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/bitcast/7ffa9c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/bitcast/7ffa9c.wgsl.expected.ir.msl
new file mode 100644
index 0000000..33d25ac
--- /dev/null
+++ b/test/tint/builtins/gen/var/bitcast/7ffa9c.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_7ffa9c = func():void {
+  $B2: {
+    %arg_0:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
+    %4:vec4<u32> = load %arg_0
+    %5:vec4<u32> = bitcast %4
+    %res:ptr<function, vec4<u32>, read_write> = var, %5
+    %7:vec4<u32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %bitcast_7ffa9c
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %bitcast_7ffa9c
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %bitcast_7ffa9c
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/bitcast/81c5f5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/bitcast/81c5f5.wgsl.expected.ir.msl
new file mode 100644
index 0000000..beeb8f4
--- /dev/null
+++ b/test/tint/builtins/gen/var/bitcast/81c5f5.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_81c5f5 = func():void {
+  $B2: {
+    %arg_0:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
+    %4:vec4<f16> = load %arg_0
+    %5:vec2<u32> = bitcast %4
+    %res:ptr<function, vec2<u32>, read_write> = var, %5
+    %7:vec2<u32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %bitcast_81c5f5
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %bitcast_81c5f5
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %bitcast_81c5f5
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/bitcast/8318a8.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/bitcast/8318a8.wgsl.expected.ir.msl
new file mode 100644
index 0000000..9481752
--- /dev/null
+++ b/test/tint/builtins/gen/var/bitcast/8318a8.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_8318a8 = func():void {
+  $B2: {
+    %arg_0:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
+    %4:vec3<u32> = load %arg_0
+    %5:vec3<u32> = bitcast %4
+    %res:ptr<function, vec3<u32>, read_write> = var, %5
+    %7:vec3<u32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %bitcast_8318a8
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %bitcast_8318a8
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %bitcast_8318a8
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/bitcast/879dc9.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/bitcast/879dc9.wgsl.expected.ir.msl
new file mode 100644
index 0000000..21f6360
--- /dev/null
+++ b/test/tint/builtins/gen/var/bitcast/879dc9.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_879dc9 = func():void {
+  $B2: {
+    %res:ptr<function, u32, read_write> = var, 1u
+    %4:u32 = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %bitcast_879dc9
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %bitcast_879dc9
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %bitcast_879dc9
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/bitcast/899e50.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/bitcast/899e50.wgsl.expected.ir.msl
new file mode 100644
index 0000000..3d5901a
--- /dev/null
+++ b/test/tint/builtins/gen/var/bitcast/899e50.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec2<i32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_899e50 = func():void {
+  $B2: {
+    %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
+    %4:vec2<f32> = load %arg_0
+    %5:vec2<i32> = bitcast %4
+    %res:ptr<function, vec2<i32>, read_write> = var, %5
+    %7:vec2<i32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %bitcast_899e50
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %bitcast_899e50
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %bitcast_899e50
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/bitcast/8d184c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/bitcast/8d184c.wgsl.expected.ir.msl
new file mode 100644
index 0000000..0b8b043
--- /dev/null
+++ b/test/tint/builtins/gen/var/bitcast/8d184c.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_8d184c = func():void {
+  $B2: {
+    %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
+    %4:vec4<f32> = load %arg_0
+    %5:vec4<u32> = bitcast %4
+    %res:ptr<function, vec4<u32>, read_write> = var, %5
+    %7:vec4<u32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %bitcast_8d184c
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %bitcast_8d184c
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %bitcast_8d184c
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/bitcast/9bcf71.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/bitcast/9bcf71.wgsl.expected.ir.msl
new file mode 100644
index 0000000..9ddc8fe
--- /dev/null
+++ b/test/tint/builtins/gen/var/bitcast/9bcf71.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_9bcf71 = func():void {
+  $B2: {
+    %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
+    %4:vec2<f32> = load %arg_0
+    %5:vec2<f32> = bitcast %4
+    %res:ptr<function, vec2<f32>, read_write> = var, %5
+    %7:vec2<f32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %bitcast_9bcf71
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %bitcast_9bcf71
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %bitcast_9bcf71
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/bitcast/9ca42c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/bitcast/9ca42c.wgsl.expected.ir.msl
new file mode 100644
index 0000000..9f12f8d
--- /dev/null
+++ b/test/tint/builtins/gen/var/bitcast/9ca42c.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_9ca42c = func():void {
+  $B2: {
+    %arg_0:ptr<function, f32, read_write> = var, 1.0f
+    %4:f32 = load %arg_0
+    %5:vec2<f16> = bitcast %4
+    %res:ptr<function, vec2<f16>, read_write> = var, %5
+    %7:vec2<f16> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %bitcast_9ca42c
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %bitcast_9ca42c
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %bitcast_9ca42c
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/bitcast/9eee21.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/bitcast/9eee21.wgsl.expected.ir.msl
new file mode 100644
index 0000000..0aed783
--- /dev/null
+++ b/test/tint/builtins/gen/var/bitcast/9eee21.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec3<i32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_9eee21 = func():void {
+  $B2: {
+    %arg_0:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
+    %4:vec3<i32> = load %arg_0
+    %5:vec3<i32> = bitcast %4
+    %res:ptr<function, vec3<i32>, read_write> = var, %5
+    %7:vec3<i32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %bitcast_9eee21
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %bitcast_9eee21
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %bitcast_9eee21
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/bitcast/a4b290.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/bitcast/a4b290.wgsl.expected.ir.msl
new file mode 100644
index 0000000..de13cfd
--- /dev/null
+++ b/test/tint/builtins/gen/var/bitcast/a4b290.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_a4b290 = func():void {
+  $B2: {
+    %arg_0:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
+    %4:vec4<u32> = load %arg_0
+    %5:vec4<f32> = bitcast %4
+    %res:ptr<function, vec4<f32>, read_write> = var, %5
+    %7:vec4<f32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %bitcast_a4b290
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %bitcast_a4b290
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %bitcast_a4b290
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/bitcast/a58b50.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/bitcast/a58b50.wgsl.expected.ir.msl
new file mode 100644
index 0000000..ba225e9
--- /dev/null
+++ b/test/tint/builtins/gen/var/bitcast/a58b50.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_a58b50 = func():void {
+  $B2: {
+    %arg_0:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
+    %4:vec2<f16> = load %arg_0
+    %5:u32 = bitcast %4
+    %res:ptr<function, u32, read_write> = var, %5
+    %7:u32 = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %bitcast_a58b50
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %bitcast_a58b50
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %bitcast_a58b50
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/bitcast/a5c539.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/bitcast/a5c539.wgsl.expected.ir.msl
new file mode 100644
index 0000000..5132cd1
--- /dev/null
+++ b/test/tint/builtins/gen/var/bitcast/a5c539.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_a5c539 = func():void {
+  $B2: {
+    %arg_0:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
+    %4:vec4<u32> = load %arg_0
+    %5:vec4<i32> = bitcast %4
+    %res:ptr<function, vec4<i32>, read_write> = var, %5
+    %7:vec4<i32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %bitcast_a5c539
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %bitcast_a5c539
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %bitcast_a5c539
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/bitcast/a8c93f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/bitcast/a8c93f.wgsl.expected.ir.msl
new file mode 100644
index 0000000..147242f
--- /dev/null
+++ b/test/tint/builtins/gen/var/bitcast/a8c93f.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_a8c93f = func():void {
+  $B2: {
+    %arg_0:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
+    %4:vec4<i32> = load %arg_0
+    %5:vec4<u32> = bitcast %4
+    %res:ptr<function, vec4<u32>, read_write> = var, %5
+    %7:vec4<u32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %bitcast_a8c93f
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %bitcast_a8c93f
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %bitcast_a8c93f
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/bitcast/a8ea1b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/bitcast/a8ea1b.wgsl.expected.ir.msl
new file mode 100644
index 0000000..e30d2fa
--- /dev/null
+++ b/test/tint/builtins/gen/var/bitcast/a8ea1b.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec3<i32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_a8ea1b = func():void {
+  $B2: {
+    %arg_0:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
+    %4:vec3<u32> = load %arg_0
+    %5:vec3<i32> = bitcast %4
+    %res:ptr<function, vec3<i32>, read_write> = var, %5
+    %7:vec3<i32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %bitcast_a8ea1b
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %bitcast_a8ea1b
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %bitcast_a8ea1b
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/bitcast/ac09d0.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/bitcast/ac09d0.wgsl.expected.ir.msl
new file mode 100644
index 0000000..fd5bbda
--- /dev/null
+++ b/test/tint/builtins/gen/var/bitcast/ac09d0.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_ac09d0 = func():void {
+  $B2: {
+    %arg_0:ptr<function, f32, read_write> = var, 1.0f
+    %4:f32 = load %arg_0
+    %5:f32 = bitcast %4
+    %res:ptr<function, f32, read_write> = var, %5
+    %7:f32 = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %bitcast_ac09d0
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %bitcast_ac09d0
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %bitcast_ac09d0
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/bitcast/ad4b05.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/bitcast/ad4b05.wgsl.expected.ir.msl
new file mode 100644
index 0000000..d5df97e
--- /dev/null
+++ b/test/tint/builtins/gen/var/bitcast/ad4b05.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_ad4b05 = func():void {
+  $B2: {
+    %arg_0:ptr<function, u32, read_write> = var, 1u
+    %4:u32 = load %arg_0
+    %5:f32 = bitcast %4
+    %res:ptr<function, f32, read_write> = var, %5
+    %7:f32 = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %bitcast_ad4b05
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %bitcast_ad4b05
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %bitcast_ad4b05
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/bitcast/b28cbd.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/bitcast/b28cbd.wgsl.expected.ir.msl
new file mode 100644
index 0000000..535ebc1
--- /dev/null
+++ b/test/tint/builtins/gen/var/bitcast/b28cbd.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec3<i32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_b28cbd = func():void {
+  $B2: {
+    %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
+    %4:vec3<f32> = load %arg_0
+    %5:vec3<i32> = bitcast %4
+    %res:ptr<function, vec3<i32>, read_write> = var, %5
+    %7:vec3<i32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %bitcast_b28cbd
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %bitcast_b28cbd
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %bitcast_b28cbd
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/bitcast/b77573.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/bitcast/b77573.wgsl.expected.ir.msl
new file mode 100644
index 0000000..59c56c4
--- /dev/null
+++ b/test/tint/builtins/gen/var/bitcast/b77573.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_b77573 = func():void {
+  $B2: {
+    %arg_0:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
+    %4:vec2<i32> = load %arg_0
+    %5:vec2<f32> = bitcast %4
+    %res:ptr<function, vec2<f32>, read_write> = var, %5
+    %7:vec2<f32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %bitcast_b77573
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %bitcast_b77573
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %bitcast_b77573
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/bitcast/bc3994.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/bitcast/bc3994.wgsl.expected.ir.msl
new file mode 100644
index 0000000..ddaaea8
--- /dev/null
+++ b/test/tint/builtins/gen/var/bitcast/bc3994.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_bc3994 = func():void {
+  $B2: {
+    %arg_0:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
+    %4:vec2<u32> = load %arg_0
+    %5:vec4<f16> = bitcast %4
+    %res:ptr<function, vec4<f16>, read_write> = var, %5
+    %7:vec4<f16> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %bitcast_bc3994
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %bitcast_bc3994
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %bitcast_bc3994
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/bitcast/c69aaf.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/bitcast/c69aaf.wgsl.expected.ir.msl
new file mode 100644
index 0000000..4c420af
--- /dev/null
+++ b/test/tint/builtins/gen/var/bitcast/c69aaf.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec2<i32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_c69aaf = func():void {
+  $B2: {
+    %arg_0:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
+    %4:vec2<u32> = load %arg_0
+    %5:vec2<i32> = bitcast %4
+    %res:ptr<function, vec2<i32>, read_write> = var, %5
+    %7:vec2<i32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %bitcast_c69aaf
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %bitcast_c69aaf
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %bitcast_c69aaf
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/bitcast/ca5c3f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/bitcast/ca5c3f.wgsl.expected.ir.msl
new file mode 100644
index 0000000..fcff441
--- /dev/null
+++ b/test/tint/builtins/gen/var/bitcast/ca5c3f.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_ca5c3f = func():void {
+  $B2: {
+    %arg_0:ptr<function, i32, read_write> = var, 1i
+    %4:i32 = load %arg_0
+    %5:f32 = bitcast %4
+    %res:ptr<function, f32, read_write> = var, %5
+    %7:f32 = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %bitcast_ca5c3f
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %bitcast_ca5c3f
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %bitcast_ca5c3f
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/bitcast/cc7aa7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/bitcast/cc7aa7.wgsl.expected.ir.msl
new file mode 100644
index 0000000..befcd85
--- /dev/null
+++ b/test/tint/builtins/gen/var/bitcast/cc7aa7.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec2<i32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_cc7aa7 = func():void {
+  $B2: {
+    %arg_0:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
+    %4:vec2<i32> = load %arg_0
+    %5:vec2<i32> = bitcast %4
+    %res:ptr<function, vec2<i32>, read_write> = var, %5
+    %7:vec2<i32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %bitcast_cc7aa7
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %bitcast_cc7aa7
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %bitcast_cc7aa7
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/bitcast/d29765.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/bitcast/d29765.wgsl.expected.ir.msl
new file mode 100644
index 0000000..9130589
--- /dev/null
+++ b/test/tint/builtins/gen/var/bitcast/d29765.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_d29765 = func():void {
+  $B2: {
+    %arg_0:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
+    %4:vec2<u32> = load %arg_0
+    %5:vec2<u32> = bitcast %4
+    %res:ptr<function, vec2<u32>, read_write> = var, %5
+    %7:vec2<u32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %bitcast_d29765
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %bitcast_d29765
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %bitcast_d29765
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/bitcast/dce842.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/bitcast/dce842.wgsl.expected.ir.msl
new file mode 100644
index 0000000..df8dd02
--- /dev/null
+++ b/test/tint/builtins/gen/var/bitcast/dce842.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_dce842 = func():void {
+  $B2: {
+    %arg_0:ptr<function, i32, read_write> = var, 1i
+    %4:i32 = load %arg_0
+    %5:u32 = bitcast %4
+    %res:ptr<function, u32, read_write> = var, %5
+    %7:u32 = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %bitcast_dce842
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %bitcast_dce842
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %bitcast_dce842
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/bitcast/e61c57.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/bitcast/e61c57.wgsl.expected.ir.msl
new file mode 100644
index 0000000..0aef928
--- /dev/null
+++ b/test/tint/builtins/gen/var/bitcast/e61c57.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_e61c57 = func():void {
+  $B2: {
+    %arg_0:ptr<function, u32, read_write> = var, 1u
+    %4:u32 = load %arg_0
+    %5:i32 = bitcast %4
+    %res:ptr<function, i32, read_write> = var, %5
+    %7:i32 = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %bitcast_e61c57
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %bitcast_e61c57
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %bitcast_e61c57
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/bitcast/e6c18f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/bitcast/e6c18f.wgsl.expected.ir.msl
new file mode 100644
index 0000000..26286a0
--- /dev/null
+++ b/test/tint/builtins/gen/var/bitcast/e6c18f.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_e6c18f = func():void {
+  $B2: {
+    %arg_0:ptr<function, f32, read_write> = var, 1.0f
+    %4:f32 = load %arg_0
+    %5:u32 = bitcast %4
+    %res:ptr<function, u32, read_write> = var, %5
+    %7:u32 = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %bitcast_e6c18f
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %bitcast_e6c18f
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %bitcast_e6c18f
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/bitcast/f756cd.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/bitcast/f756cd.wgsl.expected.ir.msl
new file mode 100644
index 0000000..be39e07
--- /dev/null
+++ b/test/tint/builtins/gen/var/bitcast/f756cd.wgsl.expected.ir.msl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
+}
+
+%bitcast_f756cd = func():void {
+  $B2: {
+    %res:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
+    %4:vec3<u32> = load %res
+    store %prevent_dce, %4
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %6:void = call %bitcast_f756cd
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %8:void = call %bitcast_f756cd
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %10:void = call %bitcast_f756cd
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/ceil/09bf52.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/ceil/09bf52.wgsl.expected.ir.msl
index ae973dc..cbaf635 100644
--- a/test/tint/builtins/gen/var/ceil/09bf52.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/ceil/09bf52.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%ceil_09bf52 = func():void -> %b2 {
-  %b2 = block {
+%ceil_09bf52 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.5h)
     %4:vec3<f16> = load %arg_0
     %5:vec3<f16> = ceil %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %ceil_09bf52
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %ceil_09bf52
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %ceil_09bf52
     ret
   }
diff --git a/test/tint/builtins/gen/var/ceil/18c240.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/ceil/18c240.wgsl.expected.ir.msl
index f17ccc3..31069bf 100644
--- a/test/tint/builtins/gen/var/ceil/18c240.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/ceil/18c240.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%ceil_18c240 = func():void -> %b2 {
-  %b2 = block {
+%ceil_18c240 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.5h)
     %4:vec2<f16> = load %arg_0
     %5:vec2<f16> = ceil %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %ceil_18c240
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %ceil_18c240
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %ceil_18c240
     ret
   }
diff --git a/test/tint/builtins/gen/var/ceil/34064b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/ceil/34064b.wgsl.expected.ir.msl
index 10cce88..2752308 100644
--- a/test/tint/builtins/gen/var/ceil/34064b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/ceil/34064b.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%ceil_34064b = func():void -> %b2 {
-  %b2 = block {
+%ceil_34064b = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.5f)
     %4:vec3<f32> = load %arg_0
     %5:vec3<f32> = ceil %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %ceil_34064b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %ceil_34064b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %ceil_34064b
     ret
   }
diff --git a/test/tint/builtins/gen/var/ceil/4bca2a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/ceil/4bca2a.wgsl.expected.ir.msl
index c7f1e60..76b4825 100644
--- a/test/tint/builtins/gen/var/ceil/4bca2a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/ceil/4bca2a.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%ceil_4bca2a = func():void -> %b2 {
-  %b2 = block {
+%ceil_4bca2a = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.5h)
     %4:vec4<f16> = load %arg_0
     %5:vec4<f16> = ceil %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %ceil_4bca2a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %ceil_4bca2a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %ceil_4bca2a
     ret
   }
diff --git a/test/tint/builtins/gen/var/ceil/678655.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/ceil/678655.wgsl.expected.ir.msl
index f3b2ceb..7f3c625 100644
--- a/test/tint/builtins/gen/var/ceil/678655.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/ceil/678655.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%ceil_678655 = func():void -> %b2 {
-  %b2 = block {
+%ceil_678655 = func():void {
+  $B2: {
     %arg_0:ptr<function, f32, read_write> = var, 1.5f
     %4:f32 = load %arg_0
     %5:f32 = ceil %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %ceil_678655
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %ceil_678655
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %ceil_678655
     ret
   }
diff --git a/test/tint/builtins/gen/var/ceil/96f597.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/ceil/96f597.wgsl.expected.ir.msl
index b163813..de82b9f 100644
--- a/test/tint/builtins/gen/var/ceil/96f597.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/ceil/96f597.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%ceil_96f597 = func():void -> %b2 {
-  %b2 = block {
+%ceil_96f597 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.5f)
     %4:vec2<f32> = load %arg_0
     %5:vec2<f32> = ceil %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %ceil_96f597
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %ceil_96f597
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %ceil_96f597
     ret
   }
diff --git a/test/tint/builtins/gen/var/ceil/b74c16.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/ceil/b74c16.wgsl.expected.ir.msl
index eec2866..b0ca642 100644
--- a/test/tint/builtins/gen/var/ceil/b74c16.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/ceil/b74c16.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%ceil_b74c16 = func():void -> %b2 {
-  %b2 = block {
+%ceil_b74c16 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.5f)
     %4:vec4<f32> = load %arg_0
     %5:vec4<f32> = ceil %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %ceil_b74c16
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %ceil_b74c16
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %ceil_b74c16
     ret
   }
diff --git a/test/tint/builtins/gen/var/ceil/f3f889.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/ceil/f3f889.wgsl.expected.ir.msl
index 7eade12..c4060ff 100644
--- a/test/tint/builtins/gen/var/ceil/f3f889.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/ceil/f3f889.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%ceil_f3f889 = func():void -> %b2 {
-  %b2 = block {
+%ceil_f3f889 = func():void {
+  $B2: {
     %arg_0:ptr<function, f16, read_write> = var, 1.5h
     %4:f16 = load %arg_0
     %5:f16 = ceil %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %ceil_f3f889
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %ceil_f3f889
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %ceil_f3f889
     ret
   }
diff --git a/test/tint/builtins/gen/var/clamp/0acf8f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/clamp/0acf8f.wgsl.expected.ir.msl
index 433d0dc..4b952a9 100644
--- a/test/tint/builtins/gen/var/clamp/0acf8f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/clamp/0acf8f.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%clamp_0acf8f = func():void -> %b2 {
-  %b2 = block {
+%clamp_0acf8f = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_1:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %clamp_0acf8f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %clamp_0acf8f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %clamp_0acf8f
     ret
   }
diff --git a/test/tint/builtins/gen/var/clamp/1a32e3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/clamp/1a32e3.wgsl.expected.ir.msl
index bc95846..c0557d7 100644
--- a/test/tint/builtins/gen/var/clamp/1a32e3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/clamp/1a32e3.wgsl.expected.ir.msl
@@ -1,39 +1,41 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%clamp_1a32e3 = func():void -> %b2 {
-  %b2 = block {
+%clamp_1a32e3 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %arg_1:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %6:vec4<i32> = load %arg_0
     %7:vec4<i32> = load %arg_1
     %8:vec4<i32> = load %arg_2
-    %9:vec4<i32> = clamp %6, %7, %8
-    %res:ptr<function, vec4<i32>, read_write> = var, %9
-    %11:vec4<i32> = load %res
-    store %prevent_dce, %11
+    %9:vec4<i32> = let %8
+    %10:vec4<i32> = max %6, %7
+    %11:vec4<i32> = min %10, %9
+    %res:ptr<function, vec4<i32>, read_write> = var, %11
+    %13:vec4<i32> = load %res
+    store %prevent_dce, %13
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %13:void = call %clamp_1a32e3
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %15:void = call %clamp_1a32e3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %15:void = call %clamp_1a32e3
+%fragment_main = @fragment func():void {
+  $B4: {
+    %17:void = call %clamp_1a32e3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %17:void = call %clamp_1a32e3
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %19:void = call %clamp_1a32e3
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/clamp/235b29.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/clamp/235b29.wgsl.expected.ir.msl
index 3a3a343..8379ec8 100644
--- a/test/tint/builtins/gen/var/clamp/235b29.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/clamp/235b29.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%clamp_235b29 = func():void -> %b2 {
-  %b2 = block {
+%clamp_235b29 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %arg_1:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %arg_2:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %clamp_235b29
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %clamp_235b29
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %clamp_235b29
     ret
   }
diff --git a/test/tint/builtins/gen/var/clamp/2bd567.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/clamp/2bd567.wgsl.expected.ir.msl
index b491e1d..a567d0d 100644
--- a/test/tint/builtins/gen/var/clamp/2bd567.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/clamp/2bd567.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%clamp_2bd567 = func():void -> %b2 {
-  %b2 = block {
+%clamp_2bd567 = func():void {
+  $B2: {
     %arg_0:ptr<function, f32, read_write> = var, 1.0f
     %arg_1:ptr<function, f32, read_write> = var, 1.0f
     %arg_2:ptr<function, f32, read_write> = var, 1.0f
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %clamp_2bd567
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %clamp_2bd567
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %clamp_2bd567
     ret
   }
diff --git a/test/tint/builtins/gen/var/clamp/2bde41.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/clamp/2bde41.wgsl.expected.ir.msl
index a1aa8d7..bbb1e4a 100644
--- a/test/tint/builtins/gen/var/clamp/2bde41.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/clamp/2bde41.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%clamp_2bde41 = func():void -> %b2 {
-  %b2 = block {
+%clamp_2bde41 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %arg_1:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %clamp_2bde41
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %clamp_2bde41
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %clamp_2bde41
     ret
   }
diff --git a/test/tint/builtins/gen/var/clamp/2c251b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/clamp/2c251b.wgsl.expected.ir.msl
index 184e48f..3da7fdf 100644
--- a/test/tint/builtins/gen/var/clamp/2c251b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/clamp/2c251b.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%clamp_2c251b = func():void -> %b2 {
-  %b2 = block {
+%clamp_2c251b = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %arg_1:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %arg_2:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %clamp_2c251b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %clamp_2c251b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %clamp_2c251b
     ret
   }
diff --git a/test/tint/builtins/gen/var/clamp/548fc7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/clamp/548fc7.wgsl.expected.ir.msl
index 4ad74e6..787fa10 100644
--- a/test/tint/builtins/gen/var/clamp/548fc7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/clamp/548fc7.wgsl.expected.ir.msl
@@ -1,39 +1,41 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%clamp_548fc7 = func():void -> %b2 {
-  %b2 = block {
+%clamp_548fc7 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %arg_2:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %6:vec3<u32> = load %arg_0
     %7:vec3<u32> = load %arg_1
     %8:vec3<u32> = load %arg_2
-    %9:vec3<u32> = clamp %6, %7, %8
-    %res:ptr<function, vec3<u32>, read_write> = var, %9
-    %11:vec3<u32> = load %res
-    store %prevent_dce, %11
+    %9:vec3<u32> = let %8
+    %10:vec3<u32> = max %6, %7
+    %11:vec3<u32> = min %10, %9
+    %res:ptr<function, vec3<u32>, read_write> = var, %11
+    %13:vec3<u32> = load %res
+    store %prevent_dce, %13
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %13:void = call %clamp_548fc7
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %15:void = call %clamp_548fc7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %15:void = call %clamp_548fc7
+%fragment_main = @fragment func():void {
+  $B4: {
+    %17:void = call %clamp_548fc7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %17:void = call %clamp_548fc7
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %19:void = call %clamp_548fc7
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/clamp/553ffb.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/clamp/553ffb.wgsl.expected.ir.msl
index 5fb10b9..8ef14fd 100644
--- a/test/tint/builtins/gen/var/clamp/553ffb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/clamp/553ffb.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%clamp_553ffb = func():void -> %b2 {
-  %b2 = block {
+%clamp_553ffb = func():void {
+  $B2: {
     %arg_0:ptr<function, f16, read_write> = var, 1.0h
     %arg_1:ptr<function, f16, read_write> = var, 1.0h
     %arg_2:ptr<function, f16, read_write> = var, 1.0h
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %clamp_553ffb
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %clamp_553ffb
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %clamp_553ffb
     ret
   }
diff --git a/test/tint/builtins/gen/var/clamp/5f0819.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/clamp/5f0819.wgsl.expected.ir.msl
index a8ac9a5..1f183f9 100644
--- a/test/tint/builtins/gen/var/clamp/5f0819.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/clamp/5f0819.wgsl.expected.ir.msl
@@ -1,39 +1,41 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%clamp_5f0819 = func():void -> %b2 {
-  %b2 = block {
+%clamp_5f0819 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %arg_2:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %6:vec3<i32> = load %arg_0
     %7:vec3<i32> = load %arg_1
     %8:vec3<i32> = load %arg_2
-    %9:vec3<i32> = clamp %6, %7, %8
-    %res:ptr<function, vec3<i32>, read_write> = var, %9
-    %11:vec3<i32> = load %res
-    store %prevent_dce, %11
+    %9:vec3<i32> = let %8
+    %10:vec3<i32> = max %6, %7
+    %11:vec3<i32> = min %10, %9
+    %res:ptr<function, vec3<i32>, read_write> = var, %11
+    %13:vec3<i32> = load %res
+    store %prevent_dce, %13
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %13:void = call %clamp_5f0819
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %15:void = call %clamp_5f0819
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %15:void = call %clamp_5f0819
+%fragment_main = @fragment func():void {
+  $B4: {
+    %17:void = call %clamp_5f0819
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %17:void = call %clamp_5f0819
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %19:void = call %clamp_5f0819
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/clamp/6c1749.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/clamp/6c1749.wgsl.expected.ir.msl
index 408888b..d599483 100644
--- a/test/tint/builtins/gen/var/clamp/6c1749.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/clamp/6c1749.wgsl.expected.ir.msl
@@ -1,39 +1,41 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%clamp_6c1749 = func():void -> %b2 {
-  %b2 = block {
+%clamp_6c1749 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %6:vec2<i32> = load %arg_0
     %7:vec2<i32> = load %arg_1
     %8:vec2<i32> = load %arg_2
-    %9:vec2<i32> = clamp %6, %7, %8
-    %res:ptr<function, vec2<i32>, read_write> = var, %9
-    %11:vec2<i32> = load %res
-    store %prevent_dce, %11
+    %9:vec2<i32> = let %8
+    %10:vec2<i32> = max %6, %7
+    %11:vec2<i32> = min %10, %9
+    %res:ptr<function, vec2<i32>, read_write> = var, %11
+    %13:vec2<i32> = load %res
+    store %prevent_dce, %13
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %13:void = call %clamp_6c1749
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %15:void = call %clamp_6c1749
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %15:void = call %clamp_6c1749
+%fragment_main = @fragment func():void {
+  $B4: {
+    %17:void = call %clamp_6c1749
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %17:void = call %clamp_6c1749
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %19:void = call %clamp_6c1749
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/clamp/7706d7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/clamp/7706d7.wgsl.expected.ir.msl
index 84ca0c5..e126b0a 100644
--- a/test/tint/builtins/gen/var/clamp/7706d7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/clamp/7706d7.wgsl.expected.ir.msl
@@ -1,39 +1,41 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%clamp_7706d7 = func():void -> %b2 {
-  %b2 = block {
+%clamp_7706d7 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %6:vec2<u32> = load %arg_0
     %7:vec2<u32> = load %arg_1
     %8:vec2<u32> = load %arg_2
-    %9:vec2<u32> = clamp %6, %7, %8
-    %res:ptr<function, vec2<u32>, read_write> = var, %9
-    %11:vec2<u32> = load %res
-    store %prevent_dce, %11
+    %9:vec2<u32> = let %8
+    %10:vec2<u32> = max %6, %7
+    %11:vec2<u32> = min %10, %9
+    %res:ptr<function, vec2<u32>, read_write> = var, %11
+    %13:vec2<u32> = load %res
+    store %prevent_dce, %13
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %13:void = call %clamp_7706d7
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %15:void = call %clamp_7706d7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %15:void = call %clamp_7706d7
+%fragment_main = @fragment func():void {
+  $B4: {
+    %17:void = call %clamp_7706d7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %17:void = call %clamp_7706d7
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %19:void = call %clamp_7706d7
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/clamp/867397.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/clamp/867397.wgsl.expected.ir.msl
index 11fdd8c..68a7d40 100644
--- a/test/tint/builtins/gen/var/clamp/867397.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/clamp/867397.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%clamp_867397 = func():void -> %b2 {
-  %b2 = block {
+%clamp_867397 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_1:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_2:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %clamp_867397
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %clamp_867397
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %clamp_867397
     ret
   }
diff --git a/test/tint/builtins/gen/var/clamp/a2de25.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/clamp/a2de25.wgsl.expected.ir.msl
index e4367ca..cc2bedb 100644
--- a/test/tint/builtins/gen/var/clamp/a2de25.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/clamp/a2de25.wgsl.expected.ir.msl
@@ -1,39 +1,41 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%clamp_a2de25 = func():void -> %b2 {
-  %b2 = block {
+%clamp_a2de25 = func():void {
+  $B2: {
     %arg_0:ptr<function, u32, read_write> = var, 1u
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:u32 = load %arg_0
     %7:u32 = load %arg_1
     %8:u32 = load %arg_2
-    %9:u32 = clamp %6, %7, %8
-    %res:ptr<function, u32, read_write> = var, %9
-    %11:u32 = load %res
-    store %prevent_dce, %11
+    %9:u32 = let %8
+    %10:u32 = max %6, %7
+    %11:u32 = min %10, %9
+    %res:ptr<function, u32, read_write> = var, %11
+    %13:u32 = load %res
+    store %prevent_dce, %13
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %13:void = call %clamp_a2de25
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %15:void = call %clamp_a2de25
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %15:void = call %clamp_a2de25
+%fragment_main = @fragment func():void {
+  $B4: {
+    %17:void = call %clamp_a2de25
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %17:void = call %clamp_a2de25
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %19:void = call %clamp_a2de25
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/clamp/b07c65.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/clamp/b07c65.wgsl.expected.ir.msl
index 528724f..b2d9963 100644
--- a/test/tint/builtins/gen/var/clamp/b07c65.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/clamp/b07c65.wgsl.expected.ir.msl
@@ -1,39 +1,41 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%clamp_b07c65 = func():void -> %b2 {
-  %b2 = block {
+%clamp_b07c65 = func():void {
+  $B2: {
     %arg_0:ptr<function, i32, read_write> = var, 1i
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:i32 = load %arg_0
     %7:i32 = load %arg_1
     %8:i32 = load %arg_2
-    %9:i32 = clamp %6, %7, %8
-    %res:ptr<function, i32, read_write> = var, %9
-    %11:i32 = load %res
-    store %prevent_dce, %11
+    %9:i32 = let %8
+    %10:i32 = max %6, %7
+    %11:i32 = min %10, %9
+    %res:ptr<function, i32, read_write> = var, %11
+    %13:i32 = load %res
+    store %prevent_dce, %13
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %13:void = call %clamp_b07c65
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %15:void = call %clamp_b07c65
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %15:void = call %clamp_b07c65
+%fragment_main = @fragment func():void {
+  $B4: {
+    %17:void = call %clamp_b07c65
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %17:void = call %clamp_b07c65
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %19:void = call %clamp_b07c65
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/clamp/b195eb.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/clamp/b195eb.wgsl.expected.ir.msl
index b8447f6..2a2c14b 100644
--- a/test/tint/builtins/gen/var/clamp/b195eb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/clamp/b195eb.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%clamp_b195eb = func():void -> %b2 {
-  %b2 = block {
+%clamp_b195eb = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %arg_1:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %arg_2:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %clamp_b195eb
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %clamp_b195eb
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %clamp_b195eb
     ret
   }
diff --git a/test/tint/builtins/gen/var/clamp/bd43ce.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/clamp/bd43ce.wgsl.expected.ir.msl
index 56e44d6..2036f4e 100644
--- a/test/tint/builtins/gen/var/clamp/bd43ce.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/clamp/bd43ce.wgsl.expected.ir.msl
@@ -1,39 +1,41 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%clamp_bd43ce = func():void -> %b2 {
-  %b2 = block {
+%clamp_bd43ce = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
     %arg_1:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
     %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
     %6:vec4<u32> = load %arg_0
     %7:vec4<u32> = load %arg_1
     %8:vec4<u32> = load %arg_2
-    %9:vec4<u32> = clamp %6, %7, %8
-    %res:ptr<function, vec4<u32>, read_write> = var, %9
-    %11:vec4<u32> = load %res
-    store %prevent_dce, %11
+    %9:vec4<u32> = let %8
+    %10:vec4<u32> = max %6, %7
+    %11:vec4<u32> = min %10, %9
+    %res:ptr<function, vec4<u32>, read_write> = var, %11
+    %13:vec4<u32> = load %res
+    store %prevent_dce, %13
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %13:void = call %clamp_bd43ce
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %15:void = call %clamp_bd43ce
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %15:void = call %clamp_bd43ce
+%fragment_main = @fragment func():void {
+  $B4: {
+    %17:void = call %clamp_bd43ce
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %17:void = call %clamp_bd43ce
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %19:void = call %clamp_bd43ce
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/cos/0835a8.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/cos/0835a8.wgsl.expected.ir.msl
index c2f985d..8b8ef827 100644
--- a/test/tint/builtins/gen/var/cos/0835a8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/cos/0835a8.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%cos_0835a8 = func():void -> %b2 {
-  %b2 = block {
+%cos_0835a8 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(0.0h)
     %4:vec3<f16> = load %arg_0
     %5:vec3<f16> = cos %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %cos_0835a8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %cos_0835a8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %cos_0835a8
     ret
   }
diff --git a/test/tint/builtins/gen/var/cos/0a89f7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/cos/0a89f7.wgsl.expected.ir.msl
index d5f0174..f1a498a 100644
--- a/test/tint/builtins/gen/var/cos/0a89f7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/cos/0a89f7.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%cos_0a89f7 = func():void -> %b2 {
-  %b2 = block {
+%cos_0a89f7 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(0.0h)
     %4:vec4<f16> = load %arg_0
     %5:vec4<f16> = cos %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %cos_0a89f7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %cos_0a89f7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %cos_0a89f7
     ret
   }
diff --git a/test/tint/builtins/gen/var/cos/16dc15.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/cos/16dc15.wgsl.expected.ir.msl
index e05558a..c989ffb 100644
--- a/test/tint/builtins/gen/var/cos/16dc15.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/cos/16dc15.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%cos_16dc15 = func():void -> %b2 {
-  %b2 = block {
+%cos_16dc15 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(0.0f)
     %4:vec3<f32> = load %arg_0
     %5:vec3<f32> = cos %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %cos_16dc15
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %cos_16dc15
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %cos_16dc15
     ret
   }
diff --git a/test/tint/builtins/gen/var/cos/29d66d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/cos/29d66d.wgsl.expected.ir.msl
index f2b612c..1f90d5b 100644
--- a/test/tint/builtins/gen/var/cos/29d66d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/cos/29d66d.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%cos_29d66d = func():void -> %b2 {
-  %b2 = block {
+%cos_29d66d = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(0.0f)
     %4:vec4<f32> = load %arg_0
     %5:vec4<f32> = cos %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %cos_29d66d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %cos_29d66d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %cos_29d66d
     ret
   }
diff --git a/test/tint/builtins/gen/var/cos/5bc2c6.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/cos/5bc2c6.wgsl.expected.ir.msl
index 0abebfc..ebc0227 100644
--- a/test/tint/builtins/gen/var/cos/5bc2c6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/cos/5bc2c6.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%cos_5bc2c6 = func():void -> %b2 {
-  %b2 = block {
+%cos_5bc2c6 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(0.0h)
     %4:vec2<f16> = load %arg_0
     %5:vec2<f16> = cos %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %cos_5bc2c6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %cos_5bc2c6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %cos_5bc2c6
     ret
   }
diff --git a/test/tint/builtins/gen/var/cos/c3b486.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/cos/c3b486.wgsl.expected.ir.msl
index 4d21419..f111de7 100644
--- a/test/tint/builtins/gen/var/cos/c3b486.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/cos/c3b486.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%cos_c3b486 = func():void -> %b2 {
-  %b2 = block {
+%cos_c3b486 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(0.0f)
     %4:vec2<f32> = load %arg_0
     %5:vec2<f32> = cos %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %cos_c3b486
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %cos_c3b486
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %cos_c3b486
     ret
   }
diff --git a/test/tint/builtins/gen/var/cos/c5c28e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/cos/c5c28e.wgsl.expected.ir.msl
index e2b2867..3e56c13 100644
--- a/test/tint/builtins/gen/var/cos/c5c28e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/cos/c5c28e.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%cos_c5c28e = func():void -> %b2 {
-  %b2 = block {
+%cos_c5c28e = func():void {
+  $B2: {
     %arg_0:ptr<function, f32, read_write> = var, 0.0f
     %4:f32 = load %arg_0
     %5:f32 = cos %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %cos_c5c28e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %cos_c5c28e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %cos_c5c28e
     ret
   }
diff --git a/test/tint/builtins/gen/var/cos/fc047d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/cos/fc047d.wgsl.expected.ir.msl
index 502f58d..3820c7f 100644
--- a/test/tint/builtins/gen/var/cos/fc047d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/cos/fc047d.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%cos_fc047d = func():void -> %b2 {
-  %b2 = block {
+%cos_fc047d = func():void {
+  $B2: {
     %arg_0:ptr<function, f16, read_write> = var, 0.0h
     %4:f16 = load %arg_0
     %5:f16 = cos %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %cos_fc047d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %cos_fc047d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %cos_fc047d
     ret
   }
diff --git a/test/tint/builtins/gen/var/cosh/2ed778.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/cosh/2ed778.wgsl.expected.ir.msl
index ed121b0..462884c 100644
--- a/test/tint/builtins/gen/var/cosh/2ed778.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/cosh/2ed778.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%cosh_2ed778 = func():void -> %b2 {
-  %b2 = block {
+%cosh_2ed778 = func():void {
+  $B2: {
     %arg_0:ptr<function, f16, read_write> = var, 0.0h
     %4:f16 = load %arg_0
     %5:f16 = cosh %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %cosh_2ed778
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %cosh_2ed778
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %cosh_2ed778
     ret
   }
diff --git a/test/tint/builtins/gen/var/cosh/377652.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/cosh/377652.wgsl.expected.ir.msl
index c147f12..5db6769 100644
--- a/test/tint/builtins/gen/var/cosh/377652.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/cosh/377652.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%cosh_377652 = func():void -> %b2 {
-  %b2 = block {
+%cosh_377652 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(0.0f)
     %4:vec3<f32> = load %arg_0
     %5:vec3<f32> = cosh %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %cosh_377652
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %cosh_377652
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %cosh_377652
     ret
   }
diff --git a/test/tint/builtins/gen/var/cosh/3b7bbf.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/cosh/3b7bbf.wgsl.expected.ir.msl
index fa776caa9..256b96a 100644
--- a/test/tint/builtins/gen/var/cosh/3b7bbf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/cosh/3b7bbf.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%cosh_3b7bbf = func():void -> %b2 {
-  %b2 = block {
+%cosh_3b7bbf = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(0.0h)
     %4:vec4<f16> = load %arg_0
     %5:vec4<f16> = cosh %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %cosh_3b7bbf
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %cosh_3b7bbf
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %cosh_3b7bbf
     ret
   }
diff --git a/test/tint/builtins/gen/var/cosh/43b672.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/cosh/43b672.wgsl.expected.ir.msl
index 90ffbd1..2919630 100644
--- a/test/tint/builtins/gen/var/cosh/43b672.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/cosh/43b672.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%cosh_43b672 = func():void -> %b2 {
-  %b2 = block {
+%cosh_43b672 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(0.0h)
     %4:vec2<f16> = load %arg_0
     %5:vec2<f16> = cosh %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %cosh_43b672
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %cosh_43b672
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %cosh_43b672
     ret
   }
diff --git a/test/tint/builtins/gen/var/cosh/b1b8a0.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/cosh/b1b8a0.wgsl.expected.ir.msl
index 38fc295..aaedb1e 100644
--- a/test/tint/builtins/gen/var/cosh/b1b8a0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/cosh/b1b8a0.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%cosh_b1b8a0 = func():void -> %b2 {
-  %b2 = block {
+%cosh_b1b8a0 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(0.0h)
     %4:vec3<f16> = load %arg_0
     %5:vec3<f16> = cosh %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %cosh_b1b8a0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %cosh_b1b8a0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %cosh_b1b8a0
     ret
   }
diff --git a/test/tint/builtins/gen/var/cosh/c13756.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/cosh/c13756.wgsl.expected.ir.msl
index 63aeacd..08f15c7 100644
--- a/test/tint/builtins/gen/var/cosh/c13756.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/cosh/c13756.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%cosh_c13756 = func():void -> %b2 {
-  %b2 = block {
+%cosh_c13756 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(0.0f)
     %4:vec2<f32> = load %arg_0
     %5:vec2<f32> = cosh %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %cosh_c13756
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %cosh_c13756
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %cosh_c13756
     ret
   }
diff --git a/test/tint/builtins/gen/var/cosh/da92dd.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/cosh/da92dd.wgsl.expected.ir.msl
index f73c47f..fbc323c 100644
--- a/test/tint/builtins/gen/var/cosh/da92dd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/cosh/da92dd.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%cosh_da92dd = func():void -> %b2 {
-  %b2 = block {
+%cosh_da92dd = func():void {
+  $B2: {
     %arg_0:ptr<function, f32, read_write> = var, 0.0f
     %4:f32 = load %arg_0
     %5:f32 = cosh %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %cosh_da92dd
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %cosh_da92dd
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %cosh_da92dd
     ret
   }
diff --git a/test/tint/builtins/gen/var/cosh/e0c1de.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/cosh/e0c1de.wgsl.expected.ir.msl
index 79d2fbf..8fe2e12 100644
--- a/test/tint/builtins/gen/var/cosh/e0c1de.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/cosh/e0c1de.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%cosh_e0c1de = func():void -> %b2 {
-  %b2 = block {
+%cosh_e0c1de = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(0.0f)
     %4:vec4<f32> = load %arg_0
     %5:vec4<f32> = cosh %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %cosh_e0c1de
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %cosh_e0c1de
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %cosh_e0c1de
     ret
   }
diff --git a/test/tint/builtins/gen/var/countLeadingZeros/208d46.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/countLeadingZeros/208d46.wgsl.expected.ir.msl
index 0a37cea..f78c43d 100644
--- a/test/tint/builtins/gen/var/countLeadingZeros/208d46.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/countLeadingZeros/208d46.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%countLeadingZeros_208d46 = func():void -> %b2 {
-  %b2 = block {
+%countLeadingZeros_208d46 = func():void {
+  $B2: {
     %arg_0:ptr<function, u32, read_write> = var, 1u
     %4:u32 = load %arg_0
     %5:u32 = countLeadingZeros %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %countLeadingZeros_208d46
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %countLeadingZeros_208d46
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %countLeadingZeros_208d46
     ret
   }
diff --git a/test/tint/builtins/gen/var/countLeadingZeros/6d4656.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/countLeadingZeros/6d4656.wgsl.expected.ir.msl
index 6aea24d..20e2bb9 100644
--- a/test/tint/builtins/gen/var/countLeadingZeros/6d4656.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/countLeadingZeros/6d4656.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%countLeadingZeros_6d4656 = func():void -> %b2 {
-  %b2 = block {
+%countLeadingZeros_6d4656 = func():void {
+  $B2: {
     %arg_0:ptr<function, i32, read_write> = var, 1i
     %4:i32 = load %arg_0
     %5:i32 = countLeadingZeros %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %countLeadingZeros_6d4656
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %countLeadingZeros_6d4656
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %countLeadingZeros_6d4656
     ret
   }
diff --git a/test/tint/builtins/gen/var/countLeadingZeros/70783f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/countLeadingZeros/70783f.wgsl.expected.ir.msl
index ad28b86..6779730 100644
--- a/test/tint/builtins/gen/var/countLeadingZeros/70783f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/countLeadingZeros/70783f.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%countLeadingZeros_70783f = func():void -> %b2 {
-  %b2 = block {
+%countLeadingZeros_70783f = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %4:vec2<u32> = load %arg_0
     %5:vec2<u32> = countLeadingZeros %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %countLeadingZeros_70783f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %countLeadingZeros_70783f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %countLeadingZeros_70783f
     ret
   }
diff --git a/test/tint/builtins/gen/var/countLeadingZeros/7c38a6.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/countLeadingZeros/7c38a6.wgsl.expected.ir.msl
index b28c0ed..d553603 100644
--- a/test/tint/builtins/gen/var/countLeadingZeros/7c38a6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/countLeadingZeros/7c38a6.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%countLeadingZeros_7c38a6 = func():void -> %b2 {
-  %b2 = block {
+%countLeadingZeros_7c38a6 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %4:vec3<i32> = load %arg_0
     %5:vec3<i32> = countLeadingZeros %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %countLeadingZeros_7c38a6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %countLeadingZeros_7c38a6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %countLeadingZeros_7c38a6
     ret
   }
diff --git a/test/tint/builtins/gen/var/countLeadingZeros/858d40.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/countLeadingZeros/858d40.wgsl.expected.ir.msl
index b77efa3..7a43878 100644
--- a/test/tint/builtins/gen/var/countLeadingZeros/858d40.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/countLeadingZeros/858d40.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%countLeadingZeros_858d40 = func():void -> %b2 {
-  %b2 = block {
+%countLeadingZeros_858d40 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %4:vec2<i32> = load %arg_0
     %5:vec2<i32> = countLeadingZeros %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %countLeadingZeros_858d40
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %countLeadingZeros_858d40
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %countLeadingZeros_858d40
     ret
   }
diff --git a/test/tint/builtins/gen/var/countLeadingZeros/ab6345.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/countLeadingZeros/ab6345.wgsl.expected.ir.msl
index 565b333..f05b12a 100644
--- a/test/tint/builtins/gen/var/countLeadingZeros/ab6345.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/countLeadingZeros/ab6345.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%countLeadingZeros_ab6345 = func():void -> %b2 {
-  %b2 = block {
+%countLeadingZeros_ab6345 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %4:vec3<u32> = load %arg_0
     %5:vec3<u32> = countLeadingZeros %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %countLeadingZeros_ab6345
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %countLeadingZeros_ab6345
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %countLeadingZeros_ab6345
     ret
   }
diff --git a/test/tint/builtins/gen/var/countLeadingZeros/eab32b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/countLeadingZeros/eab32b.wgsl.expected.ir.msl
index e7dc342..34db708 100644
--- a/test/tint/builtins/gen/var/countLeadingZeros/eab32b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/countLeadingZeros/eab32b.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%countLeadingZeros_eab32b = func():void -> %b2 {
-  %b2 = block {
+%countLeadingZeros_eab32b = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %4:vec4<i32> = load %arg_0
     %5:vec4<i32> = countLeadingZeros %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %countLeadingZeros_eab32b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %countLeadingZeros_eab32b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %countLeadingZeros_eab32b
     ret
   }
diff --git a/test/tint/builtins/gen/var/countLeadingZeros/f70103.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/countLeadingZeros/f70103.wgsl.expected.ir.msl
index dabb622..b048ae0 100644
--- a/test/tint/builtins/gen/var/countLeadingZeros/f70103.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/countLeadingZeros/f70103.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%countLeadingZeros_f70103 = func():void -> %b2 {
-  %b2 = block {
+%countLeadingZeros_f70103 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
     %4:vec4<u32> = load %arg_0
     %5:vec4<u32> = countLeadingZeros %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %countLeadingZeros_f70103
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %countLeadingZeros_f70103
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %countLeadingZeros_f70103
     ret
   }
diff --git a/test/tint/builtins/gen/var/countOneBits/0d0e46.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/countOneBits/0d0e46.wgsl.expected.ir.msl
index 6563ebc..c2dcf06 100644
--- a/test/tint/builtins/gen/var/countOneBits/0d0e46.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/countOneBits/0d0e46.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%countOneBits_0d0e46 = func():void -> %b2 {
-  %b2 = block {
+%countOneBits_0d0e46 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
     %4:vec4<u32> = load %arg_0
     %5:vec4<u32> = countOneBits %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %countOneBits_0d0e46
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %countOneBits_0d0e46
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %countOneBits_0d0e46
     ret
   }
diff --git a/test/tint/builtins/gen/var/countOneBits/0f7980.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/countOneBits/0f7980.wgsl.expected.ir.msl
index dca6ba8..6c50856 100644
--- a/test/tint/builtins/gen/var/countOneBits/0f7980.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/countOneBits/0f7980.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%countOneBits_0f7980 = func():void -> %b2 {
-  %b2 = block {
+%countOneBits_0f7980 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %4:vec4<i32> = load %arg_0
     %5:vec4<i32> = countOneBits %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %countOneBits_0f7980
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %countOneBits_0f7980
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %countOneBits_0f7980
     ret
   }
diff --git a/test/tint/builtins/gen/var/countOneBits/65d2ae.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/countOneBits/65d2ae.wgsl.expected.ir.msl
index 3b2698c..767b61e 100644
--- a/test/tint/builtins/gen/var/countOneBits/65d2ae.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/countOneBits/65d2ae.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%countOneBits_65d2ae = func():void -> %b2 {
-  %b2 = block {
+%countOneBits_65d2ae = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %4:vec3<i32> = load %arg_0
     %5:vec3<i32> = countOneBits %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %countOneBits_65d2ae
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %countOneBits_65d2ae
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %countOneBits_65d2ae
     ret
   }
diff --git a/test/tint/builtins/gen/var/countOneBits/690cfc.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/countOneBits/690cfc.wgsl.expected.ir.msl
index a5f238c..9ffbb82 100644
--- a/test/tint/builtins/gen/var/countOneBits/690cfc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/countOneBits/690cfc.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%countOneBits_690cfc = func():void -> %b2 {
-  %b2 = block {
+%countOneBits_690cfc = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %4:vec3<u32> = load %arg_0
     %5:vec3<u32> = countOneBits %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %countOneBits_690cfc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %countOneBits_690cfc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %countOneBits_690cfc
     ret
   }
diff --git a/test/tint/builtins/gen/var/countOneBits/94fd81.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/countOneBits/94fd81.wgsl.expected.ir.msl
index 2ca42c8..202a66a 100644
--- a/test/tint/builtins/gen/var/countOneBits/94fd81.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/countOneBits/94fd81.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%countOneBits_94fd81 = func():void -> %b2 {
-  %b2 = block {
+%countOneBits_94fd81 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %4:vec2<u32> = load %arg_0
     %5:vec2<u32> = countOneBits %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %countOneBits_94fd81
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %countOneBits_94fd81
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %countOneBits_94fd81
     ret
   }
diff --git a/test/tint/builtins/gen/var/countOneBits/ae44f9.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/countOneBits/ae44f9.wgsl.expected.ir.msl
index 22caf9b..caa73ce 100644
--- a/test/tint/builtins/gen/var/countOneBits/ae44f9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/countOneBits/ae44f9.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%countOneBits_ae44f9 = func():void -> %b2 {
-  %b2 = block {
+%countOneBits_ae44f9 = func():void {
+  $B2: {
     %arg_0:ptr<function, u32, read_write> = var, 1u
     %4:u32 = load %arg_0
     %5:u32 = countOneBits %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %countOneBits_ae44f9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %countOneBits_ae44f9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %countOneBits_ae44f9
     ret
   }
diff --git a/test/tint/builtins/gen/var/countOneBits/af90e2.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/countOneBits/af90e2.wgsl.expected.ir.msl
index d5452ca..97655bb 100644
--- a/test/tint/builtins/gen/var/countOneBits/af90e2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/countOneBits/af90e2.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%countOneBits_af90e2 = func():void -> %b2 {
-  %b2 = block {
+%countOneBits_af90e2 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %4:vec2<i32> = load %arg_0
     %5:vec2<i32> = countOneBits %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %countOneBits_af90e2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %countOneBits_af90e2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %countOneBits_af90e2
     ret
   }
diff --git a/test/tint/builtins/gen/var/countOneBits/fd88b2.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/countOneBits/fd88b2.wgsl.expected.ir.msl
index ef0bcdf..68e35d3 100644
--- a/test/tint/builtins/gen/var/countOneBits/fd88b2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/countOneBits/fd88b2.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%countOneBits_fd88b2 = func():void -> %b2 {
-  %b2 = block {
+%countOneBits_fd88b2 = func():void {
+  $B2: {
     %arg_0:ptr<function, i32, read_write> = var, 1i
     %4:i32 = load %arg_0
     %5:i32 = countOneBits %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %countOneBits_fd88b2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %countOneBits_fd88b2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %countOneBits_fd88b2
     ret
   }
diff --git a/test/tint/builtins/gen/var/countTrailingZeros/1ad138.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/countTrailingZeros/1ad138.wgsl.expected.ir.msl
index a7adecd..c0b588c 100644
--- a/test/tint/builtins/gen/var/countTrailingZeros/1ad138.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/countTrailingZeros/1ad138.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%countTrailingZeros_1ad138 = func():void -> %b2 {
-  %b2 = block {
+%countTrailingZeros_1ad138 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %4:vec2<u32> = load %arg_0
     %5:vec2<u32> = countTrailingZeros %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %countTrailingZeros_1ad138
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %countTrailingZeros_1ad138
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %countTrailingZeros_1ad138
     ret
   }
diff --git a/test/tint/builtins/gen/var/countTrailingZeros/1dc84a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/countTrailingZeros/1dc84a.wgsl.expected.ir.msl
index 980b6cd..0c43f1f 100644
--- a/test/tint/builtins/gen/var/countTrailingZeros/1dc84a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/countTrailingZeros/1dc84a.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%countTrailingZeros_1dc84a = func():void -> %b2 {
-  %b2 = block {
+%countTrailingZeros_1dc84a = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %4:vec4<i32> = load %arg_0
     %5:vec4<i32> = countTrailingZeros %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %countTrailingZeros_1dc84a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %countTrailingZeros_1dc84a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %countTrailingZeros_1dc84a
     ret
   }
diff --git a/test/tint/builtins/gen/var/countTrailingZeros/21e394.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/countTrailingZeros/21e394.wgsl.expected.ir.msl
index 171a41e..9e37cdc 100644
--- a/test/tint/builtins/gen/var/countTrailingZeros/21e394.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/countTrailingZeros/21e394.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%countTrailingZeros_21e394 = func():void -> %b2 {
-  %b2 = block {
+%countTrailingZeros_21e394 = func():void {
+  $B2: {
     %arg_0:ptr<function, u32, read_write> = var, 1u
     %4:u32 = load %arg_0
     %5:u32 = countTrailingZeros %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %countTrailingZeros_21e394
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %countTrailingZeros_21e394
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %countTrailingZeros_21e394
     ret
   }
diff --git a/test/tint/builtins/gen/var/countTrailingZeros/327c37.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/countTrailingZeros/327c37.wgsl.expected.ir.msl
index c730c70..7170c77 100644
--- a/test/tint/builtins/gen/var/countTrailingZeros/327c37.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/countTrailingZeros/327c37.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%countTrailingZeros_327c37 = func():void -> %b2 {
-  %b2 = block {
+%countTrailingZeros_327c37 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %4:vec2<i32> = load %arg_0
     %5:vec2<i32> = countTrailingZeros %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %countTrailingZeros_327c37
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %countTrailingZeros_327c37
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %countTrailingZeros_327c37
     ret
   }
diff --git a/test/tint/builtins/gen/var/countTrailingZeros/42fed6.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/countTrailingZeros/42fed6.wgsl.expected.ir.msl
index 43b2d70..22109af 100644
--- a/test/tint/builtins/gen/var/countTrailingZeros/42fed6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/countTrailingZeros/42fed6.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%countTrailingZeros_42fed6 = func():void -> %b2 {
-  %b2 = block {
+%countTrailingZeros_42fed6 = func():void {
+  $B2: {
     %arg_0:ptr<function, i32, read_write> = var, 1i
     %4:i32 = load %arg_0
     %5:i32 = countTrailingZeros %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %countTrailingZeros_42fed6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %countTrailingZeros_42fed6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %countTrailingZeros_42fed6
     ret
   }
diff --git a/test/tint/builtins/gen/var/countTrailingZeros/8ed26f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/countTrailingZeros/8ed26f.wgsl.expected.ir.msl
index 5171466..ef0218c 100644
--- a/test/tint/builtins/gen/var/countTrailingZeros/8ed26f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/countTrailingZeros/8ed26f.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%countTrailingZeros_8ed26f = func():void -> %b2 {
-  %b2 = block {
+%countTrailingZeros_8ed26f = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %4:vec3<u32> = load %arg_0
     %5:vec3<u32> = countTrailingZeros %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %countTrailingZeros_8ed26f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %countTrailingZeros_8ed26f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %countTrailingZeros_8ed26f
     ret
   }
diff --git a/test/tint/builtins/gen/var/countTrailingZeros/acfacb.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/countTrailingZeros/acfacb.wgsl.expected.ir.msl
index 812d396..0bb4f4e 100644
--- a/test/tint/builtins/gen/var/countTrailingZeros/acfacb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/countTrailingZeros/acfacb.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%countTrailingZeros_acfacb = func():void -> %b2 {
-  %b2 = block {
+%countTrailingZeros_acfacb = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %4:vec3<i32> = load %arg_0
     %5:vec3<i32> = countTrailingZeros %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %countTrailingZeros_acfacb
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %countTrailingZeros_acfacb
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %countTrailingZeros_acfacb
     ret
   }
diff --git a/test/tint/builtins/gen/var/countTrailingZeros/d2b4a0.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/countTrailingZeros/d2b4a0.wgsl.expected.ir.msl
index 027df62..373c504 100644
--- a/test/tint/builtins/gen/var/countTrailingZeros/d2b4a0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/countTrailingZeros/d2b4a0.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%countTrailingZeros_d2b4a0 = func():void -> %b2 {
-  %b2 = block {
+%countTrailingZeros_d2b4a0 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
     %4:vec4<u32> = load %arg_0
     %5:vec4<u32> = countTrailingZeros %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %countTrailingZeros_d2b4a0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %countTrailingZeros_d2b4a0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %countTrailingZeros_d2b4a0
     ret
   }
diff --git a/test/tint/builtins/gen/var/cross/041cb0.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/cross/041cb0.wgsl.expected.ir.msl
index cf9217c..1aaf80d 100644
--- a/test/tint/builtins/gen/var/cross/041cb0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/cross/041cb0.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%cross_041cb0 = func():void -> %b2 {
-  %b2 = block {
+%cross_041cb0 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_1:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %5:vec3<f32> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %cross_041cb0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %cross_041cb0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %cross_041cb0
     ret
   }
diff --git a/test/tint/builtins/gen/var/cross/9857cb.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/cross/9857cb.wgsl.expected.ir.msl
index e080950..7efca35 100644
--- a/test/tint/builtins/gen/var/cross/9857cb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/cross/9857cb.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%cross_9857cb = func():void -> %b2 {
-  %b2 = block {
+%cross_9857cb = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %arg_1:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %5:vec3<f16> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %cross_9857cb
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %cross_9857cb
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %cross_9857cb
     ret
   }
diff --git a/test/tint/builtins/gen/var/degrees/0d170c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/degrees/0d170c.wgsl.expected.ir.msl
index be2dacc..f6516f9 100644
--- a/test/tint/builtins/gen/var/degrees/0d170c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/degrees/0d170c.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%degrees_0d170c = func():void -> %b2 {
-  %b2 = block {
+%degrees_0d170c = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %4:vec4<f32> = load %arg_0
     %5:vec4<f32> = degrees %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %degrees_0d170c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %degrees_0d170c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %degrees_0d170c
     ret
   }
diff --git a/test/tint/builtins/gen/var/degrees/1ad5df.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/degrees/1ad5df.wgsl.expected.ir.msl
index ef4f6b4..74cda5e 100644
--- a/test/tint/builtins/gen/var/degrees/1ad5df.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/degrees/1ad5df.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%degrees_1ad5df = func():void -> %b2 {
-  %b2 = block {
+%degrees_1ad5df = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %4:vec2<f32> = load %arg_0
     %5:vec2<f32> = degrees %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %degrees_1ad5df
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %degrees_1ad5df
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %degrees_1ad5df
     ret
   }
diff --git a/test/tint/builtins/gen/var/degrees/2af623.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/degrees/2af623.wgsl.expected.ir.msl
index cec0079..f9f1fb8 100644
--- a/test/tint/builtins/gen/var/degrees/2af623.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/degrees/2af623.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%degrees_2af623 = func():void -> %b2 {
-  %b2 = block {
+%degrees_2af623 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %4:vec3<f32> = load %arg_0
     %5:vec3<f32> = degrees %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %degrees_2af623
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %degrees_2af623
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %degrees_2af623
     ret
   }
diff --git a/test/tint/builtins/gen/var/degrees/3055d3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/degrees/3055d3.wgsl.expected.ir.msl
index 2e23065..036c9f4 100644
--- a/test/tint/builtins/gen/var/degrees/3055d3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/degrees/3055d3.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%degrees_3055d3 = func():void -> %b2 {
-  %b2 = block {
+%degrees_3055d3 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %4:vec4<f16> = load %arg_0
     %5:vec4<f16> = degrees %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %degrees_3055d3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %degrees_3055d3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %degrees_3055d3
     ret
   }
diff --git a/test/tint/builtins/gen/var/degrees/51f705.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/degrees/51f705.wgsl.expected.ir.msl
index 4907ce5..3e931a4 100644
--- a/test/tint/builtins/gen/var/degrees/51f705.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/degrees/51f705.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%degrees_51f705 = func():void -> %b2 {
-  %b2 = block {
+%degrees_51f705 = func():void {
+  $B2: {
     %arg_0:ptr<function, f32, read_write> = var, 1.0f
     %4:f32 = load %arg_0
     %5:f32 = degrees %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %degrees_51f705
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %degrees_51f705
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %degrees_51f705
     ret
   }
diff --git a/test/tint/builtins/gen/var/degrees/5e9805.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/degrees/5e9805.wgsl.expected.ir.msl
index 4ede4bd..ea9f15f 100644
--- a/test/tint/builtins/gen/var/degrees/5e9805.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/degrees/5e9805.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%degrees_5e9805 = func():void -> %b2 {
-  %b2 = block {
+%degrees_5e9805 = func():void {
+  $B2: {
     %arg_0:ptr<function, f16, read_write> = var, 1.0h
     %4:f16 = load %arg_0
     %5:f16 = degrees %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %degrees_5e9805
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %degrees_5e9805
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %degrees_5e9805
     ret
   }
diff --git a/test/tint/builtins/gen/var/degrees/dfe8f4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/degrees/dfe8f4.wgsl.expected.ir.msl
index 42a53d4..4c30577 100644
--- a/test/tint/builtins/gen/var/degrees/dfe8f4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/degrees/dfe8f4.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%degrees_dfe8f4 = func():void -> %b2 {
-  %b2 = block {
+%degrees_dfe8f4 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %4:vec3<f16> = load %arg_0
     %5:vec3<f16> = degrees %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %degrees_dfe8f4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %degrees_dfe8f4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %degrees_dfe8f4
     ret
   }
diff --git a/test/tint/builtins/gen/var/degrees/f59715.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/degrees/f59715.wgsl.expected.ir.msl
index 176875d..994b8d3 100644
--- a/test/tint/builtins/gen/var/degrees/f59715.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/degrees/f59715.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%degrees_f59715 = func():void -> %b2 {
-  %b2 = block {
+%degrees_f59715 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %4:vec2<f16> = load %arg_0
     %5:vec2<f16> = degrees %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %degrees_f59715
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %degrees_f59715
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %degrees_f59715
     ret
   }
diff --git a/test/tint/builtins/gen/var/determinant/2b62ba.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/determinant/2b62ba.wgsl.expected.ir.msl
index e7a4585..abf9485 100644
--- a/test/tint/builtins/gen/var/determinant/2b62ba.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/determinant/2b62ba.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%determinant_2b62ba = func():void -> %b2 {
-  %b2 = block {
+%determinant_2b62ba = func():void {
+  $B2: {
     %arg_0:ptr<function, mat3x3<f32>, read_write> = var, mat3x3<f32>(vec3<f32>(1.0f))
     %4:mat3x3<f32> = load %arg_0
     %5:f32 = determinant %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %determinant_2b62ba
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %determinant_2b62ba
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %determinant_2b62ba
     ret
   }
diff --git a/test/tint/builtins/gen/var/determinant/32bfde.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/determinant/32bfde.wgsl.expected.ir.msl
index 0abd867..0d95a2d 100644
--- a/test/tint/builtins/gen/var/determinant/32bfde.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/determinant/32bfde.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%determinant_32bfde = func():void -> %b2 {
-  %b2 = block {
+%determinant_32bfde = func():void {
+  $B2: {
     %arg_0:ptr<function, mat4x4<f16>, read_write> = var, mat4x4<f16>(vec4<f16>(1.0h))
     %4:mat4x4<f16> = load %arg_0
     %5:f16 = determinant %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %determinant_32bfde
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %determinant_32bfde
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %determinant_32bfde
     ret
   }
diff --git a/test/tint/builtins/gen/var/determinant/a0a87c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/determinant/a0a87c.wgsl.expected.ir.msl
index 4c99eb6..e1ef5da 100644
--- a/test/tint/builtins/gen/var/determinant/a0a87c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/determinant/a0a87c.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%determinant_a0a87c = func():void -> %b2 {
-  %b2 = block {
+%determinant_a0a87c = func():void {
+  $B2: {
     %arg_0:ptr<function, mat4x4<f32>, read_write> = var, mat4x4<f32>(vec4<f32>(1.0f))
     %4:mat4x4<f32> = load %arg_0
     %5:f32 = determinant %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %determinant_a0a87c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %determinant_a0a87c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %determinant_a0a87c
     ret
   }
diff --git a/test/tint/builtins/gen/var/determinant/d7c86f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/determinant/d7c86f.wgsl.expected.ir.msl
index 3325d82..f9af38a 100644
--- a/test/tint/builtins/gen/var/determinant/d7c86f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/determinant/d7c86f.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%determinant_d7c86f = func():void -> %b2 {
-  %b2 = block {
+%determinant_d7c86f = func():void {
+  $B2: {
     %arg_0:ptr<function, mat3x3<f16>, read_write> = var, mat3x3<f16>(vec3<f16>(1.0h))
     %4:mat3x3<f16> = load %arg_0
     %5:f16 = determinant %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %determinant_d7c86f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %determinant_d7c86f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %determinant_d7c86f
     ret
   }
diff --git a/test/tint/builtins/gen/var/determinant/e19305.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/determinant/e19305.wgsl.expected.ir.msl
index f12283a..ea38e69 100644
--- a/test/tint/builtins/gen/var/determinant/e19305.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/determinant/e19305.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%determinant_e19305 = func():void -> %b2 {
-  %b2 = block {
+%determinant_e19305 = func():void {
+  $B2: {
     %arg_0:ptr<function, mat2x2<f32>, read_write> = var, mat2x2<f32>(vec2<f32>(1.0f))
     %4:mat2x2<f32> = load %arg_0
     %5:f32 = determinant %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %determinant_e19305
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %determinant_e19305
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %determinant_e19305
     ret
   }
diff --git a/test/tint/builtins/gen/var/determinant/fc12a5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/determinant/fc12a5.wgsl.expected.ir.msl
index fb2606d..8e16d1f 100644
--- a/test/tint/builtins/gen/var/determinant/fc12a5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/determinant/fc12a5.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%determinant_fc12a5 = func():void -> %b2 {
-  %b2 = block {
+%determinant_fc12a5 = func():void {
+  $B2: {
     %arg_0:ptr<function, mat2x2<f16>, read_write> = var, mat2x2<f16>(vec2<f16>(1.0h))
     %4:mat2x2<f16> = load %arg_0
     %5:f16 = determinant %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %determinant_fc12a5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %determinant_fc12a5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %determinant_fc12a5
     ret
   }
diff --git a/test/tint/builtins/gen/var/distance/0657d4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/distance/0657d4.wgsl.expected.ir.msl
index 652d46d..9039640 100644
--- a/test/tint/builtins/gen/var/distance/0657d4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/distance/0657d4.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%distance_0657d4 = func():void -> %b2 {
-  %b2 = block {
+%distance_0657d4 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_1:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %5:vec3<f32> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %distance_0657d4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %distance_0657d4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %distance_0657d4
     ret
   }
diff --git a/test/tint/builtins/gen/var/distance/7272f3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/distance/7272f3.wgsl.expected.ir.msl
index 8d62f58..4011b03 100644
--- a/test/tint/builtins/gen/var/distance/7272f3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/distance/7272f3.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%distance_7272f3 = func():void -> %b2 {
-  %b2 = block {
+%distance_7272f3 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %arg_1:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %5:vec4<f16> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %distance_7272f3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %distance_7272f3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %distance_7272f3
     ret
   }
diff --git a/test/tint/builtins/gen/var/distance/7d201f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/distance/7d201f.wgsl.expected.ir.msl
index e18ef88..191e2a4 100644
--- a/test/tint/builtins/gen/var/distance/7d201f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/distance/7d201f.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%distance_7d201f = func():void -> %b2 {
-  %b2 = block {
+%distance_7d201f = func():void {
+  $B2: {
     %arg_0:ptr<function, f16, read_write> = var, 1.0h
     %arg_1:ptr<function, f16, read_write> = var, 1.0h
     %5:f16 = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %distance_7d201f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %distance_7d201f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %distance_7d201f
     ret
   }
diff --git a/test/tint/builtins/gen/var/distance/892a5d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/distance/892a5d.wgsl.expected.ir.msl
index 08437a7..747068c 100644
--- a/test/tint/builtins/gen/var/distance/892a5d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/distance/892a5d.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%distance_892a5d = func():void -> %b2 {
-  %b2 = block {
+%distance_892a5d = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %arg_1:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %5:vec2<f16> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %distance_892a5d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %distance_892a5d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %distance_892a5d
     ret
   }
diff --git a/test/tint/builtins/gen/var/distance/928fa0.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/distance/928fa0.wgsl.expected.ir.msl
index 222b456..d82d9bc 100644
--- a/test/tint/builtins/gen/var/distance/928fa0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/distance/928fa0.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%distance_928fa0 = func():void -> %b2 {
-  %b2 = block {
+%distance_928fa0 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %arg_1:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %5:vec3<f16> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %distance_928fa0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %distance_928fa0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %distance_928fa0
     ret
   }
diff --git a/test/tint/builtins/gen/var/distance/9646ea.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/distance/9646ea.wgsl.expected.ir.msl
index fb598cc..1a8b1cc 100644
--- a/test/tint/builtins/gen/var/distance/9646ea.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/distance/9646ea.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%distance_9646ea = func():void -> %b2 {
-  %b2 = block {
+%distance_9646ea = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %arg_1:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %5:vec4<f32> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %distance_9646ea
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %distance_9646ea
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %distance_9646ea
     ret
   }
diff --git a/test/tint/builtins/gen/var/distance/aa4055.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/distance/aa4055.wgsl.expected.ir.msl
index 5a0e618..a672973 100644
--- a/test/tint/builtins/gen/var/distance/aa4055.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/distance/aa4055.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%distance_aa4055 = func():void -> %b2 {
-  %b2 = block {
+%distance_aa4055 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_1:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %5:vec2<f32> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %distance_aa4055
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %distance_aa4055
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %distance_aa4055
     ret
   }
diff --git a/test/tint/builtins/gen/var/distance/cfed73.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/distance/cfed73.wgsl.expected.ir.msl
index bf77dfe..e238d18 100644
--- a/test/tint/builtins/gen/var/distance/cfed73.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/distance/cfed73.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%distance_cfed73 = func():void -> %b2 {
-  %b2 = block {
+%distance_cfed73 = func():void {
+  $B2: {
     %arg_0:ptr<function, f32, read_write> = var, 1.0f
     %arg_1:ptr<function, f32, read_write> = var, 1.0f
     %5:f32 = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %distance_cfed73
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %distance_cfed73
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %distance_cfed73
     ret
   }
diff --git a/test/tint/builtins/gen/var/dot/0c577b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/dot/0c577b.wgsl.expected.ir.msl
index 0bdf0de..98d607a 100644
--- a/test/tint/builtins/gen/var/dot/0c577b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/dot/0c577b.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%dot_0c577b = func():void -> %b2 {
-  %b2 = block {
+%dot_0c577b = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %arg_1:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %5:vec4<f32> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %dot_0c577b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %dot_0c577b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %dot_0c577b
     ret
   }
diff --git a/test/tint/builtins/gen/var/dot/7548a0.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/dot/7548a0.wgsl.expected.ir.msl
index a207bc4..0d58a72 100644
--- a/test/tint/builtins/gen/var/dot/7548a0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/dot/7548a0.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%dot_7548a0 = func():void -> %b2 {
-  %b2 = block {
+%dot_7548a0 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %5:vec3<u32> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %dot_7548a0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %dot_7548a0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %dot_7548a0
     ret
   }
diff --git a/test/tint/builtins/gen/var/dot/883f0e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/dot/883f0e.wgsl.expected.ir.msl
index cfc067c..4ba0669 100644
--- a/test/tint/builtins/gen/var/dot/883f0e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/dot/883f0e.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%dot_883f0e = func():void -> %b2 {
-  %b2 = block {
+%dot_883f0e = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_1:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %5:vec2<f32> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %dot_883f0e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %dot_883f0e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %dot_883f0e
     ret
   }
diff --git a/test/tint/builtins/gen/var/dot/8e40f1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/dot/8e40f1.wgsl.expected.ir.msl
index 981c39b..59ba8e4 100644
--- a/test/tint/builtins/gen/var/dot/8e40f1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/dot/8e40f1.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%dot_8e40f1 = func():void -> %b2 {
-  %b2 = block {
+%dot_8e40f1 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %arg_1:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %5:vec3<f16> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %dot_8e40f1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %dot_8e40f1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %dot_8e40f1
     ret
   }
diff --git a/test/tint/builtins/gen/var/dot/97c7ee.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/dot/97c7ee.wgsl.expected.ir.msl
index a3b8066..e50a72d 100644
--- a/test/tint/builtins/gen/var/dot/97c7ee.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/dot/97c7ee.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%dot_97c7ee = func():void -> %b2 {
-  %b2 = block {
+%dot_97c7ee = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %5:vec2<u32> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %dot_97c7ee
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %dot_97c7ee
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %dot_97c7ee
     ret
   }
diff --git a/test/tint/builtins/gen/var/dot/ba4246.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/dot/ba4246.wgsl.expected.ir.msl
index b327953..95efaf3 100644
--- a/test/tint/builtins/gen/var/dot/ba4246.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/dot/ba4246.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%dot_ba4246 = func():void -> %b2 {
-  %b2 = block {
+%dot_ba4246 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_1:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %5:vec3<f32> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %dot_ba4246
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %dot_ba4246
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %dot_ba4246
     ret
   }
diff --git a/test/tint/builtins/gen/var/dot/cd5a04.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/dot/cd5a04.wgsl.expected.ir.msl
index 3b066f0..c06f542 100644
--- a/test/tint/builtins/gen/var/dot/cd5a04.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/dot/cd5a04.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%dot_cd5a04 = func():void -> %b2 {
-  %b2 = block {
+%dot_cd5a04 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %arg_1:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %5:vec2<f16> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %dot_cd5a04
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %dot_cd5a04
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %dot_cd5a04
     ret
   }
diff --git a/test/tint/builtins/gen/var/dot/d0d179.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/dot/d0d179.wgsl.expected.ir.msl
index 5915335..5f9317e 100644
--- a/test/tint/builtins/gen/var/dot/d0d179.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/dot/d0d179.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%dot_d0d179 = func():void -> %b2 {
-  %b2 = block {
+%dot_d0d179 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %arg_1:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %5:vec4<f16> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %dot_d0d179
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %dot_d0d179
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %dot_d0d179
     ret
   }
diff --git a/test/tint/builtins/gen/var/dot/e994c7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/dot/e994c7.wgsl.expected.ir.msl
index 3e5d686..b54bb20 100644
--- a/test/tint/builtins/gen/var/dot/e994c7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/dot/e994c7.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%dot_e994c7 = func():void -> %b2 {
-  %b2 = block {
+%dot_e994c7 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
     %arg_1:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
     %5:vec4<u32> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %dot_e994c7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %dot_e994c7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %dot_e994c7
     ret
   }
diff --git a/test/tint/builtins/gen/var/dot/ef6b1d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/dot/ef6b1d.wgsl.expected.ir.msl
index d80eb92..c791587 100644
--- a/test/tint/builtins/gen/var/dot/ef6b1d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/dot/ef6b1d.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%dot_ef6b1d = func():void -> %b2 {
-  %b2 = block {
+%dot_ef6b1d = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %arg_1:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %5:vec4<i32> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %dot_ef6b1d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %dot_ef6b1d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %dot_ef6b1d
     ret
   }
diff --git a/test/tint/builtins/gen/var/dot/f1312c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/dot/f1312c.wgsl.expected.ir.msl
index 0004a83..4796545 100644
--- a/test/tint/builtins/gen/var/dot/f1312c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/dot/f1312c.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%dot_f1312c = func():void -> %b2 {
-  %b2 = block {
+%dot_f1312c = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %5:vec3<i32> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %dot_f1312c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %dot_f1312c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %dot_f1312c
     ret
   }
diff --git a/test/tint/builtins/gen/var/dot/fc5f7c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/dot/fc5f7c.wgsl.expected.ir.msl
index 2c691f5..596c52e 100644
--- a/test/tint/builtins/gen/var/dot/fc5f7c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/dot/fc5f7c.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%dot_fc5f7c = func():void -> %b2 {
-  %b2 = block {
+%dot_fc5f7c = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %5:vec2<i32> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %dot_fc5f7c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %dot_fc5f7c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %dot_fc5f7c
     ret
   }
diff --git a/test/tint/builtins/gen/var/dot4I8Packed/881e62.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/dot4I8Packed/881e62.wgsl.expected.ir.msl
index c62274e..0f67064 100644
--- a/test/tint/builtins/gen/var/dot4I8Packed/881e62.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/dot4I8Packed/881e62.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%dot4I8Packed_881e62 = func():void -> %b2 {
-  %b2 = block {
+%dot4I8Packed_881e62 = func():void {
+  $B2: {
     %arg_0:ptr<function, u32, read_write> = var, 1u
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:u32 = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %dot4I8Packed_881e62
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %dot4I8Packed_881e62
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %dot4I8Packed_881e62
     ret
   }
diff --git a/test/tint/builtins/gen/var/dot4U8Packed/fbed7b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/dot4U8Packed/fbed7b.wgsl.expected.ir.msl
index 73af54e..49416f8 100644
--- a/test/tint/builtins/gen/var/dot4U8Packed/fbed7b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/dot4U8Packed/fbed7b.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%dot4U8Packed_fbed7b = func():void -> %b2 {
-  %b2 = block {
+%dot4U8Packed_fbed7b = func():void {
+  $B2: {
     %arg_0:ptr<function, u32, read_write> = var, 1u
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:u32 = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %dot4U8Packed_fbed7b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %dot4U8Packed_fbed7b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %dot4U8Packed_fbed7b
     ret
   }
diff --git a/test/tint/builtins/gen/var/dpdx/0763f7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/dpdx/0763f7.wgsl.expected.ir.msl
index a7668ff8..77e74a7 100644
--- a/test/tint/builtins/gen/var/dpdx/0763f7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/dpdx/0763f7.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%dpdx_0763f7 = func():void -> %b2 {
-  %b2 = block {
+%dpdx_0763f7 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %4:vec3<f32> = load %arg_0
     %5:vec3<f32> = dpdx %4
@@ -15,8 +15,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %9:void = call %dpdx_0763f7
     ret
   }
diff --git a/test/tint/builtins/gen/var/dpdx/99edb1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/dpdx/99edb1.wgsl.expected.ir.msl
index 42b8329..3b24933 100644
--- a/test/tint/builtins/gen/var/dpdx/99edb1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/dpdx/99edb1.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%dpdx_99edb1 = func():void -> %b2 {
-  %b2 = block {
+%dpdx_99edb1 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %4:vec2<f32> = load %arg_0
     %5:vec2<f32> = dpdx %4
@@ -15,8 +15,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %9:void = call %dpdx_99edb1
     ret
   }
diff --git a/test/tint/builtins/gen/var/dpdx/c487fa.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/dpdx/c487fa.wgsl.expected.ir.msl
index ee15634..10c1dd2 100644
--- a/test/tint/builtins/gen/var/dpdx/c487fa.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/dpdx/c487fa.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%dpdx_c487fa = func():void -> %b2 {
-  %b2 = block {
+%dpdx_c487fa = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %4:vec4<f32> = load %arg_0
     %5:vec4<f32> = dpdx %4
@@ -15,8 +15,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %9:void = call %dpdx_c487fa
     ret
   }
diff --git a/test/tint/builtins/gen/var/dpdx/e263de.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/dpdx/e263de.wgsl.expected.ir.msl
index 5f79859..9b5fa43 100644
--- a/test/tint/builtins/gen/var/dpdx/e263de.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/dpdx/e263de.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%dpdx_e263de = func():void -> %b2 {
-  %b2 = block {
+%dpdx_e263de = func():void {
+  $B2: {
     %arg_0:ptr<function, f32, read_write> = var, 1.0f
     %4:f32 = load %arg_0
     %5:f32 = dpdx %4
@@ -15,8 +15,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %9:void = call %dpdx_e263de
     ret
   }
diff --git a/test/tint/builtins/gen/var/dpdxCoarse/029152.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/dpdxCoarse/029152.wgsl.expected.ir.msl
index 2c426ee..46b92b4 100644
--- a/test/tint/builtins/gen/var/dpdxCoarse/029152.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/dpdxCoarse/029152.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%dpdxCoarse_029152 = func():void -> %b2 {
-  %b2 = block {
+%dpdxCoarse_029152 = func():void {
+  $B2: {
     %arg_0:ptr<function, f32, read_write> = var, 1.0f
     %4:f32 = load %arg_0
     %5:f32 = dpdxCoarse %4
@@ -15,8 +15,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %9:void = call %dpdxCoarse_029152
     ret
   }
diff --git a/test/tint/builtins/gen/var/dpdxCoarse/9581cf.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/dpdxCoarse/9581cf.wgsl.expected.ir.msl
index d7dd4c7..6901848 100644
--- a/test/tint/builtins/gen/var/dpdxCoarse/9581cf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/dpdxCoarse/9581cf.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%dpdxCoarse_9581cf = func():void -> %b2 {
-  %b2 = block {
+%dpdxCoarse_9581cf = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %4:vec2<f32> = load %arg_0
     %5:vec2<f32> = dpdxCoarse %4
@@ -15,8 +15,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %9:void = call %dpdxCoarse_9581cf
     ret
   }
diff --git a/test/tint/builtins/gen/var/dpdxCoarse/c28641.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/dpdxCoarse/c28641.wgsl.expected.ir.msl
index 032b91c..56f17df 100644
--- a/test/tint/builtins/gen/var/dpdxCoarse/c28641.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/dpdxCoarse/c28641.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%dpdxCoarse_c28641 = func():void -> %b2 {
-  %b2 = block {
+%dpdxCoarse_c28641 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %4:vec4<f32> = load %arg_0
     %5:vec4<f32> = dpdxCoarse %4
@@ -15,8 +15,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %9:void = call %dpdxCoarse_c28641
     ret
   }
diff --git a/test/tint/builtins/gen/var/dpdxCoarse/f64d7b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/dpdxCoarse/f64d7b.wgsl.expected.ir.msl
index f432ec6..32c632f 100644
--- a/test/tint/builtins/gen/var/dpdxCoarse/f64d7b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/dpdxCoarse/f64d7b.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%dpdxCoarse_f64d7b = func():void -> %b2 {
-  %b2 = block {
+%dpdxCoarse_f64d7b = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %4:vec3<f32> = load %arg_0
     %5:vec3<f32> = dpdxCoarse %4
@@ -15,8 +15,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %9:void = call %dpdxCoarse_f64d7b
     ret
   }
diff --git a/test/tint/builtins/gen/var/dpdxFine/8c5069.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/dpdxFine/8c5069.wgsl.expected.ir.msl
index 3ca2191..58c89f9 100644
--- a/test/tint/builtins/gen/var/dpdxFine/8c5069.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/dpdxFine/8c5069.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%dpdxFine_8c5069 = func():void -> %b2 {
-  %b2 = block {
+%dpdxFine_8c5069 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %4:vec4<f32> = load %arg_0
     %5:vec4<f32> = dpdxFine %4
@@ -15,8 +15,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %9:void = call %dpdxFine_8c5069
     ret
   }
diff --git a/test/tint/builtins/gen/var/dpdxFine/9631de.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/dpdxFine/9631de.wgsl.expected.ir.msl
index aafd4ef..0f66004 100644
--- a/test/tint/builtins/gen/var/dpdxFine/9631de.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/dpdxFine/9631de.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%dpdxFine_9631de = func():void -> %b2 {
-  %b2 = block {
+%dpdxFine_9631de = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %4:vec2<f32> = load %arg_0
     %5:vec2<f32> = dpdxFine %4
@@ -15,8 +15,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %9:void = call %dpdxFine_9631de
     ret
   }
diff --git a/test/tint/builtins/gen/var/dpdxFine/f401a2.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/dpdxFine/f401a2.wgsl.expected.ir.msl
index ede1310..ed80b3f 100644
--- a/test/tint/builtins/gen/var/dpdxFine/f401a2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/dpdxFine/f401a2.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%dpdxFine_f401a2 = func():void -> %b2 {
-  %b2 = block {
+%dpdxFine_f401a2 = func():void {
+  $B2: {
     %arg_0:ptr<function, f32, read_write> = var, 1.0f
     %4:f32 = load %arg_0
     %5:f32 = dpdxFine %4
@@ -15,8 +15,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %9:void = call %dpdxFine_f401a2
     ret
   }
diff --git a/test/tint/builtins/gen/var/dpdxFine/f92fb6.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/dpdxFine/f92fb6.wgsl.expected.ir.msl
index 49ea532a..1f85d0a 100644
--- a/test/tint/builtins/gen/var/dpdxFine/f92fb6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/dpdxFine/f92fb6.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%dpdxFine_f92fb6 = func():void -> %b2 {
-  %b2 = block {
+%dpdxFine_f92fb6 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %4:vec3<f32> = load %arg_0
     %5:vec3<f32> = dpdxFine %4
@@ -15,8 +15,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %9:void = call %dpdxFine_f92fb6
     ret
   }
diff --git a/test/tint/builtins/gen/var/dpdy/699a05.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/dpdy/699a05.wgsl.expected.ir.msl
index 0e92850..8772d24 100644
--- a/test/tint/builtins/gen/var/dpdy/699a05.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/dpdy/699a05.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%dpdy_699a05 = func():void -> %b2 {
-  %b2 = block {
+%dpdy_699a05 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %4:vec4<f32> = load %arg_0
     %5:vec4<f32> = dpdy %4
@@ -15,8 +15,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %9:void = call %dpdy_699a05
     ret
   }
diff --git a/test/tint/builtins/gen/var/dpdy/7f8d84.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/dpdy/7f8d84.wgsl.expected.ir.msl
index 2e9b5e0..eeacda5 100644
--- a/test/tint/builtins/gen/var/dpdy/7f8d84.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/dpdy/7f8d84.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%dpdy_7f8d84 = func():void -> %b2 {
-  %b2 = block {
+%dpdy_7f8d84 = func():void {
+  $B2: {
     %arg_0:ptr<function, f32, read_write> = var, 1.0f
     %4:f32 = load %arg_0
     %5:f32 = dpdy %4
@@ -15,8 +15,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %9:void = call %dpdy_7f8d84
     ret
   }
diff --git a/test/tint/builtins/gen/var/dpdy/a8b56e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/dpdy/a8b56e.wgsl.expected.ir.msl
index b695649..ddcf808 100644
--- a/test/tint/builtins/gen/var/dpdy/a8b56e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/dpdy/a8b56e.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%dpdy_a8b56e = func():void -> %b2 {
-  %b2 = block {
+%dpdy_a8b56e = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %4:vec2<f32> = load %arg_0
     %5:vec2<f32> = dpdy %4
@@ -15,8 +15,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %9:void = call %dpdy_a8b56e
     ret
   }
diff --git a/test/tint/builtins/gen/var/dpdy/feb40f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/dpdy/feb40f.wgsl.expected.ir.msl
index 59f3dd2..aafd81a 100644
--- a/test/tint/builtins/gen/var/dpdy/feb40f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/dpdy/feb40f.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%dpdy_feb40f = func():void -> %b2 {
-  %b2 = block {
+%dpdy_feb40f = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %4:vec3<f32> = load %arg_0
     %5:vec3<f32> = dpdy %4
@@ -15,8 +15,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %9:void = call %dpdy_feb40f
     ret
   }
diff --git a/test/tint/builtins/gen/var/dpdyCoarse/3e1ab4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/dpdyCoarse/3e1ab4.wgsl.expected.ir.msl
index 91a612a..bbbd56b 100644
--- a/test/tint/builtins/gen/var/dpdyCoarse/3e1ab4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/dpdyCoarse/3e1ab4.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%dpdyCoarse_3e1ab4 = func():void -> %b2 {
-  %b2 = block {
+%dpdyCoarse_3e1ab4 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %4:vec2<f32> = load %arg_0
     %5:vec2<f32> = dpdyCoarse %4
@@ -15,8 +15,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %9:void = call %dpdyCoarse_3e1ab4
     ret
   }
diff --git a/test/tint/builtins/gen/var/dpdyCoarse/445d24.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/dpdyCoarse/445d24.wgsl.expected.ir.msl
index 519ea78..3e14a29 100644
--- a/test/tint/builtins/gen/var/dpdyCoarse/445d24.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/dpdyCoarse/445d24.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%dpdyCoarse_445d24 = func():void -> %b2 {
-  %b2 = block {
+%dpdyCoarse_445d24 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %4:vec4<f32> = load %arg_0
     %5:vec4<f32> = dpdyCoarse %4
@@ -15,8 +15,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %9:void = call %dpdyCoarse_445d24
     ret
   }
diff --git a/test/tint/builtins/gen/var/dpdyCoarse/870a7e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/dpdyCoarse/870a7e.wgsl.expected.ir.msl
index 5e219bf..c85e414 100644
--- a/test/tint/builtins/gen/var/dpdyCoarse/870a7e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/dpdyCoarse/870a7e.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%dpdyCoarse_870a7e = func():void -> %b2 {
-  %b2 = block {
+%dpdyCoarse_870a7e = func():void {
+  $B2: {
     %arg_0:ptr<function, f32, read_write> = var, 1.0f
     %4:f32 = load %arg_0
     %5:f32 = dpdyCoarse %4
@@ -15,8 +15,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %9:void = call %dpdyCoarse_870a7e
     ret
   }
diff --git a/test/tint/builtins/gen/var/dpdyCoarse/ae1873.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/dpdyCoarse/ae1873.wgsl.expected.ir.msl
index f44827f..9ed9024 100644
--- a/test/tint/builtins/gen/var/dpdyCoarse/ae1873.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/dpdyCoarse/ae1873.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%dpdyCoarse_ae1873 = func():void -> %b2 {
-  %b2 = block {
+%dpdyCoarse_ae1873 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %4:vec3<f32> = load %arg_0
     %5:vec3<f32> = dpdyCoarse %4
@@ -15,8 +15,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %9:void = call %dpdyCoarse_ae1873
     ret
   }
diff --git a/test/tint/builtins/gen/var/dpdyFine/1fb7ab.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/dpdyFine/1fb7ab.wgsl.expected.ir.msl
index 1190b31..106c2a6 100644
--- a/test/tint/builtins/gen/var/dpdyFine/1fb7ab.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/dpdyFine/1fb7ab.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%dpdyFine_1fb7ab = func():void -> %b2 {
-  %b2 = block {
+%dpdyFine_1fb7ab = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %4:vec3<f32> = load %arg_0
     %5:vec3<f32> = dpdyFine %4
@@ -15,8 +15,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %9:void = call %dpdyFine_1fb7ab
     ret
   }
diff --git a/test/tint/builtins/gen/var/dpdyFine/6eb673.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/dpdyFine/6eb673.wgsl.expected.ir.msl
index fe7e707..bf02b2e 100644
--- a/test/tint/builtins/gen/var/dpdyFine/6eb673.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/dpdyFine/6eb673.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%dpdyFine_6eb673 = func():void -> %b2 {
-  %b2 = block {
+%dpdyFine_6eb673 = func():void {
+  $B2: {
     %arg_0:ptr<function, f32, read_write> = var, 1.0f
     %4:f32 = load %arg_0
     %5:f32 = dpdyFine %4
@@ -15,8 +15,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %9:void = call %dpdyFine_6eb673
     ret
   }
diff --git a/test/tint/builtins/gen/var/dpdyFine/d0a648.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/dpdyFine/d0a648.wgsl.expected.ir.msl
index f4af85f..68fca90 100644
--- a/test/tint/builtins/gen/var/dpdyFine/d0a648.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/dpdyFine/d0a648.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%dpdyFine_d0a648 = func():void -> %b2 {
-  %b2 = block {
+%dpdyFine_d0a648 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %4:vec4<f32> = load %arg_0
     %5:vec4<f32> = dpdyFine %4
@@ -15,8 +15,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %9:void = call %dpdyFine_d0a648
     ret
   }
diff --git a/test/tint/builtins/gen/var/dpdyFine/df33aa.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/dpdyFine/df33aa.wgsl.expected.ir.msl
index 2e104f7..74579f7 100644
--- a/test/tint/builtins/gen/var/dpdyFine/df33aa.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/dpdyFine/df33aa.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%dpdyFine_df33aa = func():void -> %b2 {
-  %b2 = block {
+%dpdyFine_df33aa = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %4:vec2<f32> = load %arg_0
     %5:vec2<f32> = dpdyFine %4
@@ -15,8 +15,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %9:void = call %dpdyFine_df33aa
     ret
   }
diff --git a/test/tint/builtins/gen/var/exp/0f70eb.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/exp/0f70eb.wgsl.expected.ir.msl
index 45acd9b..ac71538 100644
--- a/test/tint/builtins/gen/var/exp/0f70eb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/exp/0f70eb.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%exp_0f70eb = func():void -> %b2 {
-  %b2 = block {
+%exp_0f70eb = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %4:vec4<f32> = load %arg_0
     %5:vec4<f32> = exp %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %exp_0f70eb
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %exp_0f70eb
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %exp_0f70eb
     ret
   }
diff --git a/test/tint/builtins/gen/var/exp/13806d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/exp/13806d.wgsl.expected.ir.msl
index 1b62498..ba27483 100644
--- a/test/tint/builtins/gen/var/exp/13806d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/exp/13806d.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%exp_13806d = func():void -> %b2 {
-  %b2 = block {
+%exp_13806d = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %4:vec3<f16> = load %arg_0
     %5:vec3<f16> = exp %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %exp_13806d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %exp_13806d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %exp_13806d
     ret
   }
diff --git a/test/tint/builtins/gen/var/exp/1951e7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/exp/1951e7.wgsl.expected.ir.msl
index aa3fe7e..ba90a5b 100644
--- a/test/tint/builtins/gen/var/exp/1951e7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/exp/1951e7.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%exp_1951e7 = func():void -> %b2 {
-  %b2 = block {
+%exp_1951e7 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %4:vec2<f32> = load %arg_0
     %5:vec2<f32> = exp %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %exp_1951e7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %exp_1951e7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %exp_1951e7
     ret
   }
diff --git a/test/tint/builtins/gen/var/exp/2e08e2.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/exp/2e08e2.wgsl.expected.ir.msl
index e0b7316..c72ccea 100644
--- a/test/tint/builtins/gen/var/exp/2e08e2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/exp/2e08e2.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%exp_2e08e2 = func():void -> %b2 {
-  %b2 = block {
+%exp_2e08e2 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %4:vec2<f16> = load %arg_0
     %5:vec2<f16> = exp %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %exp_2e08e2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %exp_2e08e2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %exp_2e08e2
     ret
   }
diff --git a/test/tint/builtins/gen/var/exp/611a87.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/exp/611a87.wgsl.expected.ir.msl
index 7ecfd2a..fd33b71 100644
--- a/test/tint/builtins/gen/var/exp/611a87.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/exp/611a87.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%exp_611a87 = func():void -> %b2 {
-  %b2 = block {
+%exp_611a87 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %4:vec4<f16> = load %arg_0
     %5:vec4<f16> = exp %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %exp_611a87
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %exp_611a87
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %exp_611a87
     ret
   }
diff --git a/test/tint/builtins/gen/var/exp/771fd2.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/exp/771fd2.wgsl.expected.ir.msl
index e4fce63..cdb7c97 100644
--- a/test/tint/builtins/gen/var/exp/771fd2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/exp/771fd2.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%exp_771fd2 = func():void -> %b2 {
-  %b2 = block {
+%exp_771fd2 = func():void {
+  $B2: {
     %arg_0:ptr<function, f32, read_write> = var, 1.0f
     %4:f32 = load %arg_0
     %5:f32 = exp %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %exp_771fd2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %exp_771fd2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %exp_771fd2
     ret
   }
diff --git a/test/tint/builtins/gen/var/exp/c18fe9.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/exp/c18fe9.wgsl.expected.ir.msl
index 50467d1..68d4e53 100644
--- a/test/tint/builtins/gen/var/exp/c18fe9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/exp/c18fe9.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%exp_c18fe9 = func():void -> %b2 {
-  %b2 = block {
+%exp_c18fe9 = func():void {
+  $B2: {
     %arg_0:ptr<function, f16, read_write> = var, 1.0h
     %4:f16 = load %arg_0
     %5:f16 = exp %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %exp_c18fe9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %exp_c18fe9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %exp_c18fe9
     ret
   }
diff --git a/test/tint/builtins/gen/var/exp/d98450.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/exp/d98450.wgsl.expected.ir.msl
index 65c0756..ba8a527 100644
--- a/test/tint/builtins/gen/var/exp/d98450.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/exp/d98450.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%exp_d98450 = func():void -> %b2 {
-  %b2 = block {
+%exp_d98450 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %4:vec3<f32> = load %arg_0
     %5:vec3<f32> = exp %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %exp_d98450
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %exp_d98450
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %exp_d98450
     ret
   }
diff --git a/test/tint/builtins/gen/var/exp2/151a4c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/exp2/151a4c.wgsl.expected.ir.msl
index 3247205..172fb64 100644
--- a/test/tint/builtins/gen/var/exp2/151a4c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/exp2/151a4c.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%exp2_151a4c = func():void -> %b2 {
-  %b2 = block {
+%exp2_151a4c = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %4:vec2<f16> = load %arg_0
     %5:vec2<f16> = exp2 %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %exp2_151a4c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %exp2_151a4c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %exp2_151a4c
     ret
   }
diff --git a/test/tint/builtins/gen/var/exp2/1f8680.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/exp2/1f8680.wgsl.expected.ir.msl
index ba05d0b..63cf705 100644
--- a/test/tint/builtins/gen/var/exp2/1f8680.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/exp2/1f8680.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%exp2_1f8680 = func():void -> %b2 {
-  %b2 = block {
+%exp2_1f8680 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %4:vec3<f32> = load %arg_0
     %5:vec3<f32> = exp2 %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %exp2_1f8680
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %exp2_1f8680
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %exp2_1f8680
     ret
   }
diff --git a/test/tint/builtins/gen/var/exp2/751377.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/exp2/751377.wgsl.expected.ir.msl
index 3616624..c62d385 100644
--- a/test/tint/builtins/gen/var/exp2/751377.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/exp2/751377.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%exp2_751377 = func():void -> %b2 {
-  %b2 = block {
+%exp2_751377 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %4:vec3<f16> = load %arg_0
     %5:vec3<f16> = exp2 %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %exp2_751377
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %exp2_751377
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %exp2_751377
     ret
   }
diff --git a/test/tint/builtins/gen/var/exp2/a9d0a7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/exp2/a9d0a7.wgsl.expected.ir.msl
index 76fbba3..3869a1e 100644
--- a/test/tint/builtins/gen/var/exp2/a9d0a7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/exp2/a9d0a7.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%exp2_a9d0a7 = func():void -> %b2 {
-  %b2 = block {
+%exp2_a9d0a7 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %4:vec4<f32> = load %arg_0
     %5:vec4<f32> = exp2 %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %exp2_a9d0a7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %exp2_a9d0a7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %exp2_a9d0a7
     ret
   }
diff --git a/test/tint/builtins/gen/var/exp2/b408e4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/exp2/b408e4.wgsl.expected.ir.msl
index a0834ef..8d66ab8 100644
--- a/test/tint/builtins/gen/var/exp2/b408e4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/exp2/b408e4.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%exp2_b408e4 = func():void -> %b2 {
-  %b2 = block {
+%exp2_b408e4 = func():void {
+  $B2: {
     %arg_0:ptr<function, f16, read_write> = var, 1.0h
     %4:f16 = load %arg_0
     %5:f16 = exp2 %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %exp2_b408e4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %exp2_b408e4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %exp2_b408e4
     ret
   }
diff --git a/test/tint/builtins/gen/var/exp2/d6777c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/exp2/d6777c.wgsl.expected.ir.msl
index 24c88fb..d47f914 100644
--- a/test/tint/builtins/gen/var/exp2/d6777c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/exp2/d6777c.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%exp2_d6777c = func():void -> %b2 {
-  %b2 = block {
+%exp2_d6777c = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %4:vec2<f32> = load %arg_0
     %5:vec2<f32> = exp2 %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %exp2_d6777c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %exp2_d6777c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %exp2_d6777c
     ret
   }
diff --git a/test/tint/builtins/gen/var/exp2/dea523.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/exp2/dea523.wgsl.expected.ir.msl
index 1de33db..9da7c77 100644
--- a/test/tint/builtins/gen/var/exp2/dea523.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/exp2/dea523.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%exp2_dea523 = func():void -> %b2 {
-  %b2 = block {
+%exp2_dea523 = func():void {
+  $B2: {
     %arg_0:ptr<function, f32, read_write> = var, 1.0f
     %4:f32 = load %arg_0
     %5:f32 = exp2 %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %exp2_dea523
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %exp2_dea523
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %exp2_dea523
     ret
   }
diff --git a/test/tint/builtins/gen/var/exp2/ffa827.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/exp2/ffa827.wgsl.expected.ir.msl
index 2abe6e0..ef5868a 100644
--- a/test/tint/builtins/gen/var/exp2/ffa827.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/exp2/ffa827.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%exp2_ffa827 = func():void -> %b2 {
-  %b2 = block {
+%exp2_ffa827 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %4:vec4<f16> = load %arg_0
     %5:vec4<f16> = exp2 %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %exp2_ffa827
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %exp2_ffa827
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %exp2_ffa827
     ret
   }
diff --git a/test/tint/builtins/gen/var/extractBits/12b197.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/extractBits/12b197.wgsl.expected.ir.msl
index 312384f..fa79d1a 100644
--- a/test/tint/builtins/gen/var/extractBits/12b197.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/extractBits/12b197.wgsl.expected.ir.msl
@@ -1,39 +1,45 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%extractBits_12b197 = func():void -> %b2 {
-  %b2 = block {
+%extractBits_12b197 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:vec3<u32> = load %arg_0
-    %7:u32 = load %arg_1
-    %8:u32 = load %arg_2
-    %9:vec3<u32> = extractBits %6, %7, %8
-    %res:ptr<function, vec3<u32>, read_write> = var, %9
-    %11:vec3<u32> = load %res
-    store %prevent_dce, %11
+    %7:vec3<u32> = let %6
+    %8:u32 = load %arg_1
+    %9:u32 = load %arg_2
+    %10:u32 = let %9
+    %11:u32 = min %8, 32u
+    %12:u32 = let %11
+    %13:u32 = sub 32u, %12
+    %14:u32 = min %10, %13
+    %15:vec3<u32> = extractBits %7, %12, %14
+    %res:ptr<function, vec3<u32>, read_write> = var, %15
+    %17:vec3<u32> = load %res
+    store %prevent_dce, %17
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %13:void = call %extractBits_12b197
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %19:void = call %extractBits_12b197
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %15:void = call %extractBits_12b197
+%fragment_main = @fragment func():void {
+  $B4: {
+    %21:void = call %extractBits_12b197
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %17:void = call %extractBits_12b197
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %23:void = call %extractBits_12b197
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/extractBits/249874.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/extractBits/249874.wgsl.expected.ir.msl
index 246bdfb..eb66449 100644
--- a/test/tint/builtins/gen/var/extractBits/249874.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/extractBits/249874.wgsl.expected.ir.msl
@@ -1,39 +1,45 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%extractBits_249874 = func():void -> %b2 {
-  %b2 = block {
+%extractBits_249874 = func():void {
+  $B2: {
     %arg_0:ptr<function, i32, read_write> = var, 1i
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:i32 = load %arg_0
-    %7:u32 = load %arg_1
-    %8:u32 = load %arg_2
-    %9:i32 = extractBits %6, %7, %8
-    %res:ptr<function, i32, read_write> = var, %9
-    %11:i32 = load %res
-    store %prevent_dce, %11
+    %7:i32 = let %6
+    %8:u32 = load %arg_1
+    %9:u32 = load %arg_2
+    %10:u32 = let %9
+    %11:u32 = min %8, 32u
+    %12:u32 = let %11
+    %13:u32 = sub 32u, %12
+    %14:u32 = min %10, %13
+    %15:i32 = extractBits %7, %12, %14
+    %res:ptr<function, i32, read_write> = var, %15
+    %17:i32 = load %res
+    store %prevent_dce, %17
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %13:void = call %extractBits_249874
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %19:void = call %extractBits_249874
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %15:void = call %extractBits_249874
+%fragment_main = @fragment func():void {
+  $B4: {
+    %21:void = call %extractBits_249874
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %17:void = call %extractBits_249874
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %23:void = call %extractBits_249874
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/extractBits/631377.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/extractBits/631377.wgsl.expected.ir.msl
index 54ec83d..e0e22af 100644
--- a/test/tint/builtins/gen/var/extractBits/631377.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/extractBits/631377.wgsl.expected.ir.msl
@@ -1,39 +1,45 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%extractBits_631377 = func():void -> %b2 {
-  %b2 = block {
+%extractBits_631377 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:vec4<u32> = load %arg_0
-    %7:u32 = load %arg_1
-    %8:u32 = load %arg_2
-    %9:vec4<u32> = extractBits %6, %7, %8
-    %res:ptr<function, vec4<u32>, read_write> = var, %9
-    %11:vec4<u32> = load %res
-    store %prevent_dce, %11
+    %7:vec4<u32> = let %6
+    %8:u32 = load %arg_1
+    %9:u32 = load %arg_2
+    %10:u32 = let %9
+    %11:u32 = min %8, 32u
+    %12:u32 = let %11
+    %13:u32 = sub 32u, %12
+    %14:u32 = min %10, %13
+    %15:vec4<u32> = extractBits %7, %12, %14
+    %res:ptr<function, vec4<u32>, read_write> = var, %15
+    %17:vec4<u32> = load %res
+    store %prevent_dce, %17
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %13:void = call %extractBits_631377
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %19:void = call %extractBits_631377
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %15:void = call %extractBits_631377
+%fragment_main = @fragment func():void {
+  $B4: {
+    %21:void = call %extractBits_631377
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %17:void = call %extractBits_631377
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %23:void = call %extractBits_631377
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/extractBits/a99a8d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/extractBits/a99a8d.wgsl.expected.ir.msl
index 3f5e60e..9767fd2 100644
--- a/test/tint/builtins/gen/var/extractBits/a99a8d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/extractBits/a99a8d.wgsl.expected.ir.msl
@@ -1,39 +1,45 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%extractBits_a99a8d = func():void -> %b2 {
-  %b2 = block {
+%extractBits_a99a8d = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:vec2<i32> = load %arg_0
-    %7:u32 = load %arg_1
-    %8:u32 = load %arg_2
-    %9:vec2<i32> = extractBits %6, %7, %8
-    %res:ptr<function, vec2<i32>, read_write> = var, %9
-    %11:vec2<i32> = load %res
-    store %prevent_dce, %11
+    %7:vec2<i32> = let %6
+    %8:u32 = load %arg_1
+    %9:u32 = load %arg_2
+    %10:u32 = let %9
+    %11:u32 = min %8, 32u
+    %12:u32 = let %11
+    %13:u32 = sub 32u, %12
+    %14:u32 = min %10, %13
+    %15:vec2<i32> = extractBits %7, %12, %14
+    %res:ptr<function, vec2<i32>, read_write> = var, %15
+    %17:vec2<i32> = load %res
+    store %prevent_dce, %17
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %13:void = call %extractBits_a99a8d
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %19:void = call %extractBits_a99a8d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %15:void = call %extractBits_a99a8d
+%fragment_main = @fragment func():void {
+  $B4: {
+    %21:void = call %extractBits_a99a8d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %17:void = call %extractBits_a99a8d
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %23:void = call %extractBits_a99a8d
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/extractBits/ce81f8.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/extractBits/ce81f8.wgsl.expected.ir.msl
index 4d2a933..3dc80c7 100644
--- a/test/tint/builtins/gen/var/extractBits/ce81f8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/extractBits/ce81f8.wgsl.expected.ir.msl
@@ -1,39 +1,45 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%extractBits_ce81f8 = func():void -> %b2 {
-  %b2 = block {
+%extractBits_ce81f8 = func():void {
+  $B2: {
     %arg_0:ptr<function, u32, read_write> = var, 1u
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:u32 = load %arg_0
-    %7:u32 = load %arg_1
-    %8:u32 = load %arg_2
-    %9:u32 = extractBits %6, %7, %8
-    %res:ptr<function, u32, read_write> = var, %9
-    %11:u32 = load %res
-    store %prevent_dce, %11
+    %7:u32 = let %6
+    %8:u32 = load %arg_1
+    %9:u32 = load %arg_2
+    %10:u32 = let %9
+    %11:u32 = min %8, 32u
+    %12:u32 = let %11
+    %13:u32 = sub 32u, %12
+    %14:u32 = min %10, %13
+    %15:u32 = extractBits %7, %12, %14
+    %res:ptr<function, u32, read_write> = var, %15
+    %17:u32 = load %res
+    store %prevent_dce, %17
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %13:void = call %extractBits_ce81f8
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %19:void = call %extractBits_ce81f8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %15:void = call %extractBits_ce81f8
+%fragment_main = @fragment func():void {
+  $B4: {
+    %21:void = call %extractBits_ce81f8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %17:void = call %extractBits_ce81f8
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %23:void = call %extractBits_ce81f8
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/extractBits/e04f5d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/extractBits/e04f5d.wgsl.expected.ir.msl
index b1524ca..3138dd4 100644
--- a/test/tint/builtins/gen/var/extractBits/e04f5d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/extractBits/e04f5d.wgsl.expected.ir.msl
@@ -1,39 +1,45 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%extractBits_e04f5d = func():void -> %b2 {
-  %b2 = block {
+%extractBits_e04f5d = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:vec3<i32> = load %arg_0
-    %7:u32 = load %arg_1
-    %8:u32 = load %arg_2
-    %9:vec3<i32> = extractBits %6, %7, %8
-    %res:ptr<function, vec3<i32>, read_write> = var, %9
-    %11:vec3<i32> = load %res
-    store %prevent_dce, %11
+    %7:vec3<i32> = let %6
+    %8:u32 = load %arg_1
+    %9:u32 = load %arg_2
+    %10:u32 = let %9
+    %11:u32 = min %8, 32u
+    %12:u32 = let %11
+    %13:u32 = sub 32u, %12
+    %14:u32 = min %10, %13
+    %15:vec3<i32> = extractBits %7, %12, %14
+    %res:ptr<function, vec3<i32>, read_write> = var, %15
+    %17:vec3<i32> = load %res
+    store %prevent_dce, %17
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %13:void = call %extractBits_e04f5d
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %19:void = call %extractBits_e04f5d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %15:void = call %extractBits_e04f5d
+%fragment_main = @fragment func():void {
+  $B4: {
+    %21:void = call %extractBits_e04f5d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %17:void = call %extractBits_e04f5d
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %23:void = call %extractBits_e04f5d
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/extractBits/f28f69.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/extractBits/f28f69.wgsl.expected.ir.msl
index 82da1e8..d605beb 100644
--- a/test/tint/builtins/gen/var/extractBits/f28f69.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/extractBits/f28f69.wgsl.expected.ir.msl
@@ -1,39 +1,45 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%extractBits_f28f69 = func():void -> %b2 {
-  %b2 = block {
+%extractBits_f28f69 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:vec2<u32> = load %arg_0
-    %7:u32 = load %arg_1
-    %8:u32 = load %arg_2
-    %9:vec2<u32> = extractBits %6, %7, %8
-    %res:ptr<function, vec2<u32>, read_write> = var, %9
-    %11:vec2<u32> = load %res
-    store %prevent_dce, %11
+    %7:vec2<u32> = let %6
+    %8:u32 = load %arg_1
+    %9:u32 = load %arg_2
+    %10:u32 = let %9
+    %11:u32 = min %8, 32u
+    %12:u32 = let %11
+    %13:u32 = sub 32u, %12
+    %14:u32 = min %10, %13
+    %15:vec2<u32> = extractBits %7, %12, %14
+    %res:ptr<function, vec2<u32>, read_write> = var, %15
+    %17:vec2<u32> = load %res
+    store %prevent_dce, %17
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %13:void = call %extractBits_f28f69
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %19:void = call %extractBits_f28f69
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %15:void = call %extractBits_f28f69
+%fragment_main = @fragment func():void {
+  $B4: {
+    %21:void = call %extractBits_f28f69
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %17:void = call %extractBits_f28f69
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %23:void = call %extractBits_f28f69
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/extractBits/fb850f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/extractBits/fb850f.wgsl.expected.ir.msl
index 77f8413..292ff46 100644
--- a/test/tint/builtins/gen/var/extractBits/fb850f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/extractBits/fb850f.wgsl.expected.ir.msl
@@ -1,39 +1,45 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%extractBits_fb850f = func():void -> %b2 {
-  %b2 = block {
+%extractBits_fb850f = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:vec4<i32> = load %arg_0
-    %7:u32 = load %arg_1
-    %8:u32 = load %arg_2
-    %9:vec4<i32> = extractBits %6, %7, %8
-    %res:ptr<function, vec4<i32>, read_write> = var, %9
-    %11:vec4<i32> = load %res
-    store %prevent_dce, %11
+    %7:vec4<i32> = let %6
+    %8:u32 = load %arg_1
+    %9:u32 = load %arg_2
+    %10:u32 = let %9
+    %11:u32 = min %8, 32u
+    %12:u32 = let %11
+    %13:u32 = sub 32u, %12
+    %14:u32 = min %10, %13
+    %15:vec4<i32> = extractBits %7, %12, %14
+    %res:ptr<function, vec4<i32>, read_write> = var, %15
+    %17:vec4<i32> = load %res
+    store %prevent_dce, %17
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %13:void = call %extractBits_fb850f
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %19:void = call %extractBits_fb850f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %15:void = call %extractBits_fb850f
+%fragment_main = @fragment func():void {
+  $B4: {
+    %21:void = call %extractBits_fb850f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %17:void = call %extractBits_fb850f
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %23:void = call %extractBits_fb850f
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/faceForward/524986.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/faceForward/524986.wgsl.expected.ir.msl
index db98d05..d69df78 100644
--- a/test/tint/builtins/gen/var/faceForward/524986.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/faceForward/524986.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%faceForward_524986 = func():void -> %b2 {
-  %b2 = block {
+%faceForward_524986 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %arg_1:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %arg_2:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %faceForward_524986
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %faceForward_524986
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %faceForward_524986
     ret
   }
diff --git a/test/tint/builtins/gen/var/faceForward/5afbd5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/faceForward/5afbd5.wgsl.expected.ir.msl
index 4e91fb4..22b13e6 100644
--- a/test/tint/builtins/gen/var/faceForward/5afbd5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/faceForward/5afbd5.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%faceForward_5afbd5 = func():void -> %b2 {
-  %b2 = block {
+%faceForward_5afbd5 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_1:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_2:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %faceForward_5afbd5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %faceForward_5afbd5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %faceForward_5afbd5
     ret
   }
diff --git a/test/tint/builtins/gen/var/faceForward/b316e5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/faceForward/b316e5.wgsl.expected.ir.msl
index 67031a4..1ae842e 100644
--- a/test/tint/builtins/gen/var/faceForward/b316e5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/faceForward/b316e5.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%faceForward_b316e5 = func():void -> %b2 {
-  %b2 = block {
+%faceForward_b316e5 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %arg_1:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %faceForward_b316e5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %faceForward_b316e5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %faceForward_b316e5
     ret
   }
diff --git a/test/tint/builtins/gen/var/faceForward/cc63dc.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/faceForward/cc63dc.wgsl.expected.ir.msl
index e2b56b2..4d95c4c 100644
--- a/test/tint/builtins/gen/var/faceForward/cc63dc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/faceForward/cc63dc.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%faceForward_cc63dc = func():void -> %b2 {
-  %b2 = block {
+%faceForward_cc63dc = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %arg_1:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %arg_2:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %faceForward_cc63dc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %faceForward_cc63dc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %faceForward_cc63dc
     ret
   }
diff --git a/test/tint/builtins/gen/var/faceForward/e6908b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/faceForward/e6908b.wgsl.expected.ir.msl
index b736d01..7a14c48 100644
--- a/test/tint/builtins/gen/var/faceForward/e6908b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/faceForward/e6908b.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%faceForward_e6908b = func():void -> %b2 {
-  %b2 = block {
+%faceForward_e6908b = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_1:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %faceForward_e6908b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %faceForward_e6908b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %faceForward_e6908b
     ret
   }
diff --git a/test/tint/builtins/gen/var/faceForward/fb0f2e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/faceForward/fb0f2e.wgsl.expected.ir.msl
index 9855b1c..a0babaa 100644
--- a/test/tint/builtins/gen/var/faceForward/fb0f2e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/faceForward/fb0f2e.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%faceForward_fb0f2e = func():void -> %b2 {
-  %b2 = block {
+%faceForward_fb0f2e = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %arg_1:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %arg_2:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %faceForward_fb0f2e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %faceForward_fb0f2e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %faceForward_fb0f2e
     ret
   }
diff --git a/test/tint/builtins/gen/var/firstLeadingBit/000ff3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/firstLeadingBit/000ff3.wgsl.expected.ir.msl
index cdca2ad..b9251a0 100644
--- a/test/tint/builtins/gen/var/firstLeadingBit/000ff3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/firstLeadingBit/000ff3.wgsl.expected.ir.msl
@@ -1,35 +1,64 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%firstLeadingBit_000ff3 = func():void -> %b2 {
-  %b2 = block {
+%firstLeadingBit_000ff3 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
     %4:vec4<u32> = load %arg_0
-    %5:vec4<u32> = firstLeadingBit %4
-    %res:ptr<function, vec4<u32>, read_write> = var, %5
-    %7:vec4<u32> = load %res
-    store %prevent_dce, %7
+    %5:vec4<u32> = let %4
+    %6:vec4<u32> = and %5, vec4<u32>(4294901760u)
+    %7:vec4<bool> = eq %6, vec4<u32>(0u)
+    %8:vec4<u32> = select vec4<u32>(16u), vec4<u32>(0u), %7
+    %9:vec4<u32> = let %8
+    %10:vec4<u32> = shr %5, %9
+    %11:vec4<u32> = and %10, vec4<u32>(65280u)
+    %12:vec4<bool> = eq %11, vec4<u32>(0u)
+    %13:vec4<u32> = select vec4<u32>(8u), vec4<u32>(0u), %12
+    %14:vec4<u32> = let %13
+    %15:vec4<u32> = shr %10, %14
+    %16:vec4<u32> = and %15, vec4<u32>(240u)
+    %17:vec4<bool> = eq %16, vec4<u32>(0u)
+    %18:vec4<u32> = select vec4<u32>(4u), vec4<u32>(0u), %17
+    %19:vec4<u32> = let %18
+    %20:vec4<u32> = shr %15, %19
+    %21:vec4<u32> = and %20, vec4<u32>(12u)
+    %22:vec4<bool> = eq %21, vec4<u32>(0u)
+    %23:vec4<u32> = select vec4<u32>(2u), vec4<u32>(0u), %22
+    %24:vec4<u32> = let %23
+    %25:vec4<u32> = shr %20, %24
+    %26:vec4<u32> = and %25, vec4<u32>(2u)
+    %27:vec4<bool> = eq %26, vec4<u32>(0u)
+    %28:vec4<u32> = select vec4<u32>(1u), vec4<u32>(0u), %27
+    %29:vec4<u32> = or %24, %28
+    %30:vec4<u32> = or %19, %29
+    %31:vec4<u32> = or %14, %30
+    %32:vec4<u32> = or %9, %31
+    %33:vec4<bool> = eq %25, vec4<u32>(0u)
+    %34:vec4<u32> = select %32, vec4<u32>(4294967295u), %33
+    %res:ptr<function, vec4<u32>, read_write> = var, %34
+    %36:vec4<u32> = load %res
+    store %prevent_dce, %36
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %9:void = call %firstLeadingBit_000ff3
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %38:void = call %firstLeadingBit_000ff3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %11:void = call %firstLeadingBit_000ff3
+%fragment_main = @fragment func():void {
+  $B4: {
+    %40:void = call %firstLeadingBit_000ff3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %13:void = call %firstLeadingBit_000ff3
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %42:void = call %firstLeadingBit_000ff3
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/firstLeadingBit/35053e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/firstLeadingBit/35053e.wgsl.expected.ir.msl
index 073a350..225bd64 100644
--- a/test/tint/builtins/gen/var/firstLeadingBit/35053e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/firstLeadingBit/35053e.wgsl.expected.ir.msl
@@ -1,35 +1,70 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%firstLeadingBit_35053e = func():void -> %b2 {
-  %b2 = block {
+%firstLeadingBit_35053e = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %4:vec3<i32> = load %arg_0
-    %5:vec3<i32> = firstLeadingBit %4
-    %res:ptr<function, vec3<i32>, read_write> = var, %5
-    %7:vec3<i32> = load %res
-    store %prevent_dce, %7
+    %5:vec3<u32> = bitcast %4
+    %6:vec3<u32> = let %5
+    %7:vec3<u32> = complement %6
+    %8:vec3<bool> = lt %6, vec3<u32>(2147483648u)
+    %9:vec3<u32> = select %7, %6, %8
+    %10:vec3<u32> = let %9
+    %11:vec3<u32> = and %10, vec3<u32>(4294901760u)
+    %12:vec3<bool> = eq %11, vec3<u32>(0u)
+    %13:vec3<u32> = select vec3<u32>(16u), vec3<u32>(0u), %12
+    %14:vec3<u32> = let %13
+    %15:vec3<u32> = shr %10, %14
+    %16:vec3<u32> = and %15, vec3<u32>(65280u)
+    %17:vec3<bool> = eq %16, vec3<u32>(0u)
+    %18:vec3<u32> = select vec3<u32>(8u), vec3<u32>(0u), %17
+    %19:vec3<u32> = let %18
+    %20:vec3<u32> = shr %15, %19
+    %21:vec3<u32> = and %20, vec3<u32>(240u)
+    %22:vec3<bool> = eq %21, vec3<u32>(0u)
+    %23:vec3<u32> = select vec3<u32>(4u), vec3<u32>(0u), %22
+    %24:vec3<u32> = let %23
+    %25:vec3<u32> = shr %20, %24
+    %26:vec3<u32> = and %25, vec3<u32>(12u)
+    %27:vec3<bool> = eq %26, vec3<u32>(0u)
+    %28:vec3<u32> = select vec3<u32>(2u), vec3<u32>(0u), %27
+    %29:vec3<u32> = let %28
+    %30:vec3<u32> = shr %25, %29
+    %31:vec3<u32> = and %30, vec3<u32>(2u)
+    %32:vec3<bool> = eq %31, vec3<u32>(0u)
+    %33:vec3<u32> = select vec3<u32>(1u), vec3<u32>(0u), %32
+    %34:vec3<u32> = or %29, %33
+    %35:vec3<u32> = or %24, %34
+    %36:vec3<u32> = or %19, %35
+    %37:vec3<u32> = or %14, %36
+    %38:vec3<bool> = eq %30, vec3<u32>(0u)
+    %39:vec3<u32> = select %37, vec3<u32>(4294967295u), %38
+    %40:vec3<i32> = bitcast %39
+    %res:ptr<function, vec3<i32>, read_write> = var, %40
+    %42:vec3<i32> = load %res
+    store %prevent_dce, %42
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %9:void = call %firstLeadingBit_35053e
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %44:void = call %firstLeadingBit_35053e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %11:void = call %firstLeadingBit_35053e
+%fragment_main = @fragment func():void {
+  $B4: {
+    %46:void = call %firstLeadingBit_35053e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %13:void = call %firstLeadingBit_35053e
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %48:void = call %firstLeadingBit_35053e
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/firstLeadingBit/3fd7d0.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/firstLeadingBit/3fd7d0.wgsl.expected.ir.msl
index d734e2b..1282e64 100644
--- a/test/tint/builtins/gen/var/firstLeadingBit/3fd7d0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/firstLeadingBit/3fd7d0.wgsl.expected.ir.msl
@@ -1,35 +1,64 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%firstLeadingBit_3fd7d0 = func():void -> %b2 {
-  %b2 = block {
+%firstLeadingBit_3fd7d0 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %4:vec3<u32> = load %arg_0
-    %5:vec3<u32> = firstLeadingBit %4
-    %res:ptr<function, vec3<u32>, read_write> = var, %5
-    %7:vec3<u32> = load %res
-    store %prevent_dce, %7
+    %5:vec3<u32> = let %4
+    %6:vec3<u32> = and %5, vec3<u32>(4294901760u)
+    %7:vec3<bool> = eq %6, vec3<u32>(0u)
+    %8:vec3<u32> = select vec3<u32>(16u), vec3<u32>(0u), %7
+    %9:vec3<u32> = let %8
+    %10:vec3<u32> = shr %5, %9
+    %11:vec3<u32> = and %10, vec3<u32>(65280u)
+    %12:vec3<bool> = eq %11, vec3<u32>(0u)
+    %13:vec3<u32> = select vec3<u32>(8u), vec3<u32>(0u), %12
+    %14:vec3<u32> = let %13
+    %15:vec3<u32> = shr %10, %14
+    %16:vec3<u32> = and %15, vec3<u32>(240u)
+    %17:vec3<bool> = eq %16, vec3<u32>(0u)
+    %18:vec3<u32> = select vec3<u32>(4u), vec3<u32>(0u), %17
+    %19:vec3<u32> = let %18
+    %20:vec3<u32> = shr %15, %19
+    %21:vec3<u32> = and %20, vec3<u32>(12u)
+    %22:vec3<bool> = eq %21, vec3<u32>(0u)
+    %23:vec3<u32> = select vec3<u32>(2u), vec3<u32>(0u), %22
+    %24:vec3<u32> = let %23
+    %25:vec3<u32> = shr %20, %24
+    %26:vec3<u32> = and %25, vec3<u32>(2u)
+    %27:vec3<bool> = eq %26, vec3<u32>(0u)
+    %28:vec3<u32> = select vec3<u32>(1u), vec3<u32>(0u), %27
+    %29:vec3<u32> = or %24, %28
+    %30:vec3<u32> = or %19, %29
+    %31:vec3<u32> = or %14, %30
+    %32:vec3<u32> = or %9, %31
+    %33:vec3<bool> = eq %25, vec3<u32>(0u)
+    %34:vec3<u32> = select %32, vec3<u32>(4294967295u), %33
+    %res:ptr<function, vec3<u32>, read_write> = var, %34
+    %36:vec3<u32> = load %res
+    store %prevent_dce, %36
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %9:void = call %firstLeadingBit_3fd7d0
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %38:void = call %firstLeadingBit_3fd7d0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %11:void = call %firstLeadingBit_3fd7d0
+%fragment_main = @fragment func():void {
+  $B4: {
+    %40:void = call %firstLeadingBit_3fd7d0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %13:void = call %firstLeadingBit_3fd7d0
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %42:void = call %firstLeadingBit_3fd7d0
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/firstLeadingBit/57a1a3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/firstLeadingBit/57a1a3.wgsl.expected.ir.msl
index 9cfe1a1..58eb576 100644
--- a/test/tint/builtins/gen/var/firstLeadingBit/57a1a3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/firstLeadingBit/57a1a3.wgsl.expected.ir.msl
@@ -1,35 +1,70 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%firstLeadingBit_57a1a3 = func():void -> %b2 {
-  %b2 = block {
+%firstLeadingBit_57a1a3 = func():void {
+  $B2: {
     %arg_0:ptr<function, i32, read_write> = var, 1i
     %4:i32 = load %arg_0
-    %5:i32 = firstLeadingBit %4
-    %res:ptr<function, i32, read_write> = var, %5
-    %7:i32 = load %res
-    store %prevent_dce, %7
+    %5:u32 = bitcast %4
+    %6:u32 = let %5
+    %7:u32 = complement %6
+    %8:bool = lt %6, 2147483648u
+    %9:u32 = select %7, %6, %8
+    %10:u32 = let %9
+    %11:u32 = and %10, 4294901760u
+    %12:bool = eq %11, 0u
+    %13:u32 = select 16u, 0u, %12
+    %14:u32 = let %13
+    %15:u32 = shr %10, %14
+    %16:u32 = and %15, 65280u
+    %17:bool = eq %16, 0u
+    %18:u32 = select 8u, 0u, %17
+    %19:u32 = let %18
+    %20:u32 = shr %15, %19
+    %21:u32 = and %20, 240u
+    %22:bool = eq %21, 0u
+    %23:u32 = select 4u, 0u, %22
+    %24:u32 = let %23
+    %25:u32 = shr %20, %24
+    %26:u32 = and %25, 12u
+    %27:bool = eq %26, 0u
+    %28:u32 = select 2u, 0u, %27
+    %29:u32 = let %28
+    %30:u32 = shr %25, %29
+    %31:u32 = and %30, 2u
+    %32:bool = eq %31, 0u
+    %33:u32 = select 1u, 0u, %32
+    %34:u32 = or %29, %33
+    %35:u32 = or %24, %34
+    %36:u32 = or %19, %35
+    %37:u32 = or %14, %36
+    %38:bool = eq %30, 0u
+    %39:u32 = select %37, 4294967295u, %38
+    %40:i32 = bitcast %39
+    %res:ptr<function, i32, read_write> = var, %40
+    %42:i32 = load %res
+    store %prevent_dce, %42
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %9:void = call %firstLeadingBit_57a1a3
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %44:void = call %firstLeadingBit_57a1a3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %11:void = call %firstLeadingBit_57a1a3
+%fragment_main = @fragment func():void {
+  $B4: {
+    %46:void = call %firstLeadingBit_57a1a3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %13:void = call %firstLeadingBit_57a1a3
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %48:void = call %firstLeadingBit_57a1a3
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/firstLeadingBit/6fe804.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/firstLeadingBit/6fe804.wgsl.expected.ir.msl
index d35b315..3c7e062 100644
--- a/test/tint/builtins/gen/var/firstLeadingBit/6fe804.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/firstLeadingBit/6fe804.wgsl.expected.ir.msl
@@ -1,35 +1,64 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%firstLeadingBit_6fe804 = func():void -> %b2 {
-  %b2 = block {
+%firstLeadingBit_6fe804 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %4:vec2<u32> = load %arg_0
-    %5:vec2<u32> = firstLeadingBit %4
-    %res:ptr<function, vec2<u32>, read_write> = var, %5
-    %7:vec2<u32> = load %res
-    store %prevent_dce, %7
+    %5:vec2<u32> = let %4
+    %6:vec2<u32> = and %5, vec2<u32>(4294901760u)
+    %7:vec2<bool> = eq %6, vec2<u32>(0u)
+    %8:vec2<u32> = select vec2<u32>(16u), vec2<u32>(0u), %7
+    %9:vec2<u32> = let %8
+    %10:vec2<u32> = shr %5, %9
+    %11:vec2<u32> = and %10, vec2<u32>(65280u)
+    %12:vec2<bool> = eq %11, vec2<u32>(0u)
+    %13:vec2<u32> = select vec2<u32>(8u), vec2<u32>(0u), %12
+    %14:vec2<u32> = let %13
+    %15:vec2<u32> = shr %10, %14
+    %16:vec2<u32> = and %15, vec2<u32>(240u)
+    %17:vec2<bool> = eq %16, vec2<u32>(0u)
+    %18:vec2<u32> = select vec2<u32>(4u), vec2<u32>(0u), %17
+    %19:vec2<u32> = let %18
+    %20:vec2<u32> = shr %15, %19
+    %21:vec2<u32> = and %20, vec2<u32>(12u)
+    %22:vec2<bool> = eq %21, vec2<u32>(0u)
+    %23:vec2<u32> = select vec2<u32>(2u), vec2<u32>(0u), %22
+    %24:vec2<u32> = let %23
+    %25:vec2<u32> = shr %20, %24
+    %26:vec2<u32> = and %25, vec2<u32>(2u)
+    %27:vec2<bool> = eq %26, vec2<u32>(0u)
+    %28:vec2<u32> = select vec2<u32>(1u), vec2<u32>(0u), %27
+    %29:vec2<u32> = or %24, %28
+    %30:vec2<u32> = or %19, %29
+    %31:vec2<u32> = or %14, %30
+    %32:vec2<u32> = or %9, %31
+    %33:vec2<bool> = eq %25, vec2<u32>(0u)
+    %34:vec2<u32> = select %32, vec2<u32>(4294967295u), %33
+    %res:ptr<function, vec2<u32>, read_write> = var, %34
+    %36:vec2<u32> = load %res
+    store %prevent_dce, %36
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %9:void = call %firstLeadingBit_6fe804
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %38:void = call %firstLeadingBit_6fe804
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %11:void = call %firstLeadingBit_6fe804
+%fragment_main = @fragment func():void {
+  $B4: {
+    %40:void = call %firstLeadingBit_6fe804
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %13:void = call %firstLeadingBit_6fe804
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %42:void = call %firstLeadingBit_6fe804
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/firstLeadingBit/a622c2.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/firstLeadingBit/a622c2.wgsl.expected.ir.msl
index 2113f76..2232065 100644
--- a/test/tint/builtins/gen/var/firstLeadingBit/a622c2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/firstLeadingBit/a622c2.wgsl.expected.ir.msl
@@ -1,35 +1,70 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%firstLeadingBit_a622c2 = func():void -> %b2 {
-  %b2 = block {
+%firstLeadingBit_a622c2 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %4:vec2<i32> = load %arg_0
-    %5:vec2<i32> = firstLeadingBit %4
-    %res:ptr<function, vec2<i32>, read_write> = var, %5
-    %7:vec2<i32> = load %res
-    store %prevent_dce, %7
+    %5:vec2<u32> = bitcast %4
+    %6:vec2<u32> = let %5
+    %7:vec2<u32> = complement %6
+    %8:vec2<bool> = lt %6, vec2<u32>(2147483648u)
+    %9:vec2<u32> = select %7, %6, %8
+    %10:vec2<u32> = let %9
+    %11:vec2<u32> = and %10, vec2<u32>(4294901760u)
+    %12:vec2<bool> = eq %11, vec2<u32>(0u)
+    %13:vec2<u32> = select vec2<u32>(16u), vec2<u32>(0u), %12
+    %14:vec2<u32> = let %13
+    %15:vec2<u32> = shr %10, %14
+    %16:vec2<u32> = and %15, vec2<u32>(65280u)
+    %17:vec2<bool> = eq %16, vec2<u32>(0u)
+    %18:vec2<u32> = select vec2<u32>(8u), vec2<u32>(0u), %17
+    %19:vec2<u32> = let %18
+    %20:vec2<u32> = shr %15, %19
+    %21:vec2<u32> = and %20, vec2<u32>(240u)
+    %22:vec2<bool> = eq %21, vec2<u32>(0u)
+    %23:vec2<u32> = select vec2<u32>(4u), vec2<u32>(0u), %22
+    %24:vec2<u32> = let %23
+    %25:vec2<u32> = shr %20, %24
+    %26:vec2<u32> = and %25, vec2<u32>(12u)
+    %27:vec2<bool> = eq %26, vec2<u32>(0u)
+    %28:vec2<u32> = select vec2<u32>(2u), vec2<u32>(0u), %27
+    %29:vec2<u32> = let %28
+    %30:vec2<u32> = shr %25, %29
+    %31:vec2<u32> = and %30, vec2<u32>(2u)
+    %32:vec2<bool> = eq %31, vec2<u32>(0u)
+    %33:vec2<u32> = select vec2<u32>(1u), vec2<u32>(0u), %32
+    %34:vec2<u32> = or %29, %33
+    %35:vec2<u32> = or %24, %34
+    %36:vec2<u32> = or %19, %35
+    %37:vec2<u32> = or %14, %36
+    %38:vec2<bool> = eq %30, vec2<u32>(0u)
+    %39:vec2<u32> = select %37, vec2<u32>(4294967295u), %38
+    %40:vec2<i32> = bitcast %39
+    %res:ptr<function, vec2<i32>, read_write> = var, %40
+    %42:vec2<i32> = load %res
+    store %prevent_dce, %42
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %9:void = call %firstLeadingBit_a622c2
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %44:void = call %firstLeadingBit_a622c2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %11:void = call %firstLeadingBit_a622c2
+%fragment_main = @fragment func():void {
+  $B4: {
+    %46:void = call %firstLeadingBit_a622c2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %13:void = call %firstLeadingBit_a622c2
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %48:void = call %firstLeadingBit_a622c2
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/firstLeadingBit/c1f940.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/firstLeadingBit/c1f940.wgsl.expected.ir.msl
index 8485065..45f4401 100644
--- a/test/tint/builtins/gen/var/firstLeadingBit/c1f940.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/firstLeadingBit/c1f940.wgsl.expected.ir.msl
@@ -1,35 +1,70 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%firstLeadingBit_c1f940 = func():void -> %b2 {
-  %b2 = block {
+%firstLeadingBit_c1f940 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %4:vec4<i32> = load %arg_0
-    %5:vec4<i32> = firstLeadingBit %4
-    %res:ptr<function, vec4<i32>, read_write> = var, %5
-    %7:vec4<i32> = load %res
-    store %prevent_dce, %7
+    %5:vec4<u32> = bitcast %4
+    %6:vec4<u32> = let %5
+    %7:vec4<u32> = complement %6
+    %8:vec4<bool> = lt %6, vec4<u32>(2147483648u)
+    %9:vec4<u32> = select %7, %6, %8
+    %10:vec4<u32> = let %9
+    %11:vec4<u32> = and %10, vec4<u32>(4294901760u)
+    %12:vec4<bool> = eq %11, vec4<u32>(0u)
+    %13:vec4<u32> = select vec4<u32>(16u), vec4<u32>(0u), %12
+    %14:vec4<u32> = let %13
+    %15:vec4<u32> = shr %10, %14
+    %16:vec4<u32> = and %15, vec4<u32>(65280u)
+    %17:vec4<bool> = eq %16, vec4<u32>(0u)
+    %18:vec4<u32> = select vec4<u32>(8u), vec4<u32>(0u), %17
+    %19:vec4<u32> = let %18
+    %20:vec4<u32> = shr %15, %19
+    %21:vec4<u32> = and %20, vec4<u32>(240u)
+    %22:vec4<bool> = eq %21, vec4<u32>(0u)
+    %23:vec4<u32> = select vec4<u32>(4u), vec4<u32>(0u), %22
+    %24:vec4<u32> = let %23
+    %25:vec4<u32> = shr %20, %24
+    %26:vec4<u32> = and %25, vec4<u32>(12u)
+    %27:vec4<bool> = eq %26, vec4<u32>(0u)
+    %28:vec4<u32> = select vec4<u32>(2u), vec4<u32>(0u), %27
+    %29:vec4<u32> = let %28
+    %30:vec4<u32> = shr %25, %29
+    %31:vec4<u32> = and %30, vec4<u32>(2u)
+    %32:vec4<bool> = eq %31, vec4<u32>(0u)
+    %33:vec4<u32> = select vec4<u32>(1u), vec4<u32>(0u), %32
+    %34:vec4<u32> = or %29, %33
+    %35:vec4<u32> = or %24, %34
+    %36:vec4<u32> = or %19, %35
+    %37:vec4<u32> = or %14, %36
+    %38:vec4<bool> = eq %30, vec4<u32>(0u)
+    %39:vec4<u32> = select %37, vec4<u32>(4294967295u), %38
+    %40:vec4<i32> = bitcast %39
+    %res:ptr<function, vec4<i32>, read_write> = var, %40
+    %42:vec4<i32> = load %res
+    store %prevent_dce, %42
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %9:void = call %firstLeadingBit_c1f940
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %44:void = call %firstLeadingBit_c1f940
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %11:void = call %firstLeadingBit_c1f940
+%fragment_main = @fragment func():void {
+  $B4: {
+    %46:void = call %firstLeadingBit_c1f940
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %13:void = call %firstLeadingBit_c1f940
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %48:void = call %firstLeadingBit_c1f940
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/firstLeadingBit/f0779d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/firstLeadingBit/f0779d.wgsl.expected.ir.msl
index be2175b..5392912 100644
--- a/test/tint/builtins/gen/var/firstLeadingBit/f0779d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/firstLeadingBit/f0779d.wgsl.expected.ir.msl
@@ -1,35 +1,64 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%firstLeadingBit_f0779d = func():void -> %b2 {
-  %b2 = block {
+%firstLeadingBit_f0779d = func():void {
+  $B2: {
     %arg_0:ptr<function, u32, read_write> = var, 1u
     %4:u32 = load %arg_0
-    %5:u32 = firstLeadingBit %4
-    %res:ptr<function, u32, read_write> = var, %5
-    %7:u32 = load %res
-    store %prevent_dce, %7
+    %5:u32 = let %4
+    %6:u32 = and %5, 4294901760u
+    %7:bool = eq %6, 0u
+    %8:u32 = select 16u, 0u, %7
+    %9:u32 = let %8
+    %10:u32 = shr %5, %9
+    %11:u32 = and %10, 65280u
+    %12:bool = eq %11, 0u
+    %13:u32 = select 8u, 0u, %12
+    %14:u32 = let %13
+    %15:u32 = shr %10, %14
+    %16:u32 = and %15, 240u
+    %17:bool = eq %16, 0u
+    %18:u32 = select 4u, 0u, %17
+    %19:u32 = let %18
+    %20:u32 = shr %15, %19
+    %21:u32 = and %20, 12u
+    %22:bool = eq %21, 0u
+    %23:u32 = select 2u, 0u, %22
+    %24:u32 = let %23
+    %25:u32 = shr %20, %24
+    %26:u32 = and %25, 2u
+    %27:bool = eq %26, 0u
+    %28:u32 = select 1u, 0u, %27
+    %29:u32 = or %24, %28
+    %30:u32 = or %19, %29
+    %31:u32 = or %14, %30
+    %32:u32 = or %9, %31
+    %33:bool = eq %25, 0u
+    %34:u32 = select %32, 4294967295u, %33
+    %res:ptr<function, u32, read_write> = var, %34
+    %36:u32 = load %res
+    store %prevent_dce, %36
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %9:void = call %firstLeadingBit_f0779d
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %38:void = call %firstLeadingBit_f0779d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %11:void = call %firstLeadingBit_f0779d
+%fragment_main = @fragment func():void {
+  $B4: {
+    %40:void = call %firstLeadingBit_f0779d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %13:void = call %firstLeadingBit_f0779d
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %42:void = call %firstLeadingBit_f0779d
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/firstTrailingBit/110f2c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/firstTrailingBit/110f2c.wgsl.expected.ir.msl
index cfe846c..7bb011e 100644
--- a/test/tint/builtins/gen/var/firstTrailingBit/110f2c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/firstTrailingBit/110f2c.wgsl.expected.ir.msl
@@ -1,35 +1,64 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%firstTrailingBit_110f2c = func():void -> %b2 {
-  %b2 = block {
+%firstTrailingBit_110f2c = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
     %4:vec4<u32> = load %arg_0
-    %5:vec4<u32> = firstTrailingBit %4
-    %res:ptr<function, vec4<u32>, read_write> = var, %5
-    %7:vec4<u32> = load %res
-    store %prevent_dce, %7
+    %5:vec4<u32> = let %4
+    %6:vec4<u32> = and %5, vec4<u32>(65535u)
+    %7:vec4<bool> = eq %6, vec4<u32>(0u)
+    %8:vec4<u32> = select vec4<u32>(0u), vec4<u32>(16u), %7
+    %9:vec4<u32> = let %8
+    %10:vec4<u32> = shr %5, %9
+    %11:vec4<u32> = and %10, vec4<u32>(255u)
+    %12:vec4<bool> = eq %11, vec4<u32>(0u)
+    %13:vec4<u32> = select vec4<u32>(0u), vec4<u32>(8u), %12
+    %14:vec4<u32> = let %13
+    %15:vec4<u32> = shr %10, %14
+    %16:vec4<u32> = and %15, vec4<u32>(15u)
+    %17:vec4<bool> = eq %16, vec4<u32>(0u)
+    %18:vec4<u32> = select vec4<u32>(0u), vec4<u32>(4u), %17
+    %19:vec4<u32> = let %18
+    %20:vec4<u32> = shr %15, %19
+    %21:vec4<u32> = and %20, vec4<u32>(3u)
+    %22:vec4<bool> = eq %21, vec4<u32>(0u)
+    %23:vec4<u32> = select vec4<u32>(0u), vec4<u32>(2u), %22
+    %24:vec4<u32> = let %23
+    %25:vec4<u32> = shr %20, %24
+    %26:vec4<u32> = and %25, vec4<u32>(1u)
+    %27:vec4<bool> = eq %26, vec4<u32>(0u)
+    %28:vec4<u32> = select vec4<u32>(0u), vec4<u32>(1u), %27
+    %29:vec4<u32> = or %24, %28
+    %30:vec4<u32> = or %19, %29
+    %31:vec4<u32> = or %14, %30
+    %32:vec4<u32> = or %9, %31
+    %33:vec4<bool> = eq %25, vec4<u32>(0u)
+    %34:vec4<u32> = select %32, vec4<u32>(4294967295u), %33
+    %res:ptr<function, vec4<u32>, read_write> = var, %34
+    %36:vec4<u32> = load %res
+    store %prevent_dce, %36
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %9:void = call %firstTrailingBit_110f2c
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %38:void = call %firstTrailingBit_110f2c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %11:void = call %firstTrailingBit_110f2c
+%fragment_main = @fragment func():void {
+  $B4: {
+    %40:void = call %firstTrailingBit_110f2c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %13:void = call %firstTrailingBit_110f2c
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %42:void = call %firstTrailingBit_110f2c
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/firstTrailingBit/3a2acc.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/firstTrailingBit/3a2acc.wgsl.expected.ir.msl
index 6d8374f..3b34436 100644
--- a/test/tint/builtins/gen/var/firstTrailingBit/3a2acc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/firstTrailingBit/3a2acc.wgsl.expected.ir.msl
@@ -1,35 +1,66 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%firstTrailingBit_3a2acc = func():void -> %b2 {
-  %b2 = block {
+%firstTrailingBit_3a2acc = func():void {
+  $B2: {
     %arg_0:ptr<function, i32, read_write> = var, 1i
     %4:i32 = load %arg_0
-    %5:i32 = firstTrailingBit %4
-    %res:ptr<function, i32, read_write> = var, %5
-    %7:i32 = load %res
-    store %prevent_dce, %7
+    %5:u32 = bitcast %4
+    %6:u32 = let %5
+    %7:u32 = and %6, 65535u
+    %8:bool = eq %7, 0u
+    %9:u32 = select 0u, 16u, %8
+    %10:u32 = let %9
+    %11:u32 = shr %6, %10
+    %12:u32 = and %11, 255u
+    %13:bool = eq %12, 0u
+    %14:u32 = select 0u, 8u, %13
+    %15:u32 = let %14
+    %16:u32 = shr %11, %15
+    %17:u32 = and %16, 15u
+    %18:bool = eq %17, 0u
+    %19:u32 = select 0u, 4u, %18
+    %20:u32 = let %19
+    %21:u32 = shr %16, %20
+    %22:u32 = and %21, 3u
+    %23:bool = eq %22, 0u
+    %24:u32 = select 0u, 2u, %23
+    %25:u32 = let %24
+    %26:u32 = shr %21, %25
+    %27:u32 = and %26, 1u
+    %28:bool = eq %27, 0u
+    %29:u32 = select 0u, 1u, %28
+    %30:u32 = or %25, %29
+    %31:u32 = or %20, %30
+    %32:u32 = or %15, %31
+    %33:u32 = or %10, %32
+    %34:bool = eq %26, 0u
+    %35:u32 = select %33, 4294967295u, %34
+    %36:i32 = bitcast %35
+    %res:ptr<function, i32, read_write> = var, %36
+    %38:i32 = load %res
+    store %prevent_dce, %38
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %9:void = call %firstTrailingBit_3a2acc
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %40:void = call %firstTrailingBit_3a2acc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %11:void = call %firstTrailingBit_3a2acc
+%fragment_main = @fragment func():void {
+  $B4: {
+    %42:void = call %firstTrailingBit_3a2acc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %13:void = call %firstTrailingBit_3a2acc
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %44:void = call %firstTrailingBit_3a2acc
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/firstTrailingBit/45eb10.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/firstTrailingBit/45eb10.wgsl.expected.ir.msl
index ad42f58..5c2abb7 100644
--- a/test/tint/builtins/gen/var/firstTrailingBit/45eb10.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/firstTrailingBit/45eb10.wgsl.expected.ir.msl
@@ -1,35 +1,64 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%firstTrailingBit_45eb10 = func():void -> %b2 {
-  %b2 = block {
+%firstTrailingBit_45eb10 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %4:vec2<u32> = load %arg_0
-    %5:vec2<u32> = firstTrailingBit %4
-    %res:ptr<function, vec2<u32>, read_write> = var, %5
-    %7:vec2<u32> = load %res
-    store %prevent_dce, %7
+    %5:vec2<u32> = let %4
+    %6:vec2<u32> = and %5, vec2<u32>(65535u)
+    %7:vec2<bool> = eq %6, vec2<u32>(0u)
+    %8:vec2<u32> = select vec2<u32>(0u), vec2<u32>(16u), %7
+    %9:vec2<u32> = let %8
+    %10:vec2<u32> = shr %5, %9
+    %11:vec2<u32> = and %10, vec2<u32>(255u)
+    %12:vec2<bool> = eq %11, vec2<u32>(0u)
+    %13:vec2<u32> = select vec2<u32>(0u), vec2<u32>(8u), %12
+    %14:vec2<u32> = let %13
+    %15:vec2<u32> = shr %10, %14
+    %16:vec2<u32> = and %15, vec2<u32>(15u)
+    %17:vec2<bool> = eq %16, vec2<u32>(0u)
+    %18:vec2<u32> = select vec2<u32>(0u), vec2<u32>(4u), %17
+    %19:vec2<u32> = let %18
+    %20:vec2<u32> = shr %15, %19
+    %21:vec2<u32> = and %20, vec2<u32>(3u)
+    %22:vec2<bool> = eq %21, vec2<u32>(0u)
+    %23:vec2<u32> = select vec2<u32>(0u), vec2<u32>(2u), %22
+    %24:vec2<u32> = let %23
+    %25:vec2<u32> = shr %20, %24
+    %26:vec2<u32> = and %25, vec2<u32>(1u)
+    %27:vec2<bool> = eq %26, vec2<u32>(0u)
+    %28:vec2<u32> = select vec2<u32>(0u), vec2<u32>(1u), %27
+    %29:vec2<u32> = or %24, %28
+    %30:vec2<u32> = or %19, %29
+    %31:vec2<u32> = or %14, %30
+    %32:vec2<u32> = or %9, %31
+    %33:vec2<bool> = eq %25, vec2<u32>(0u)
+    %34:vec2<u32> = select %32, vec2<u32>(4294967295u), %33
+    %res:ptr<function, vec2<u32>, read_write> = var, %34
+    %36:vec2<u32> = load %res
+    store %prevent_dce, %36
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %9:void = call %firstTrailingBit_45eb10
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %38:void = call %firstTrailingBit_45eb10
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %11:void = call %firstTrailingBit_45eb10
+%fragment_main = @fragment func():void {
+  $B4: {
+    %40:void = call %firstTrailingBit_45eb10
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %13:void = call %firstTrailingBit_45eb10
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %42:void = call %firstTrailingBit_45eb10
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/firstTrailingBit/47d475.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/firstTrailingBit/47d475.wgsl.expected.ir.msl
index c65785b..cdaebf9 100644
--- a/test/tint/builtins/gen/var/firstTrailingBit/47d475.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/firstTrailingBit/47d475.wgsl.expected.ir.msl
@@ -1,35 +1,64 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%firstTrailingBit_47d475 = func():void -> %b2 {
-  %b2 = block {
+%firstTrailingBit_47d475 = func():void {
+  $B2: {
     %arg_0:ptr<function, u32, read_write> = var, 1u
     %4:u32 = load %arg_0
-    %5:u32 = firstTrailingBit %4
-    %res:ptr<function, u32, read_write> = var, %5
-    %7:u32 = load %res
-    store %prevent_dce, %7
+    %5:u32 = let %4
+    %6:u32 = and %5, 65535u
+    %7:bool = eq %6, 0u
+    %8:u32 = select 0u, 16u, %7
+    %9:u32 = let %8
+    %10:u32 = shr %5, %9
+    %11:u32 = and %10, 255u
+    %12:bool = eq %11, 0u
+    %13:u32 = select 0u, 8u, %12
+    %14:u32 = let %13
+    %15:u32 = shr %10, %14
+    %16:u32 = and %15, 15u
+    %17:bool = eq %16, 0u
+    %18:u32 = select 0u, 4u, %17
+    %19:u32 = let %18
+    %20:u32 = shr %15, %19
+    %21:u32 = and %20, 3u
+    %22:bool = eq %21, 0u
+    %23:u32 = select 0u, 2u, %22
+    %24:u32 = let %23
+    %25:u32 = shr %20, %24
+    %26:u32 = and %25, 1u
+    %27:bool = eq %26, 0u
+    %28:u32 = select 0u, 1u, %27
+    %29:u32 = or %24, %28
+    %30:u32 = or %19, %29
+    %31:u32 = or %14, %30
+    %32:u32 = or %9, %31
+    %33:bool = eq %25, 0u
+    %34:u32 = select %32, 4294967295u, %33
+    %res:ptr<function, u32, read_write> = var, %34
+    %36:u32 = load %res
+    store %prevent_dce, %36
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %9:void = call %firstTrailingBit_47d475
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %38:void = call %firstTrailingBit_47d475
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %11:void = call %firstTrailingBit_47d475
+%fragment_main = @fragment func():void {
+  $B4: {
+    %40:void = call %firstTrailingBit_47d475
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %13:void = call %firstTrailingBit_47d475
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %42:void = call %firstTrailingBit_47d475
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/firstTrailingBit/50c072.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/firstTrailingBit/50c072.wgsl.expected.ir.msl
index f5de6c2..087ea96 100644
--- a/test/tint/builtins/gen/var/firstTrailingBit/50c072.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/firstTrailingBit/50c072.wgsl.expected.ir.msl
@@ -1,35 +1,66 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%firstTrailingBit_50c072 = func():void -> %b2 {
-  %b2 = block {
+%firstTrailingBit_50c072 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %4:vec2<i32> = load %arg_0
-    %5:vec2<i32> = firstTrailingBit %4
-    %res:ptr<function, vec2<i32>, read_write> = var, %5
-    %7:vec2<i32> = load %res
-    store %prevent_dce, %7
+    %5:vec2<u32> = bitcast %4
+    %6:vec2<u32> = let %5
+    %7:vec2<u32> = and %6, vec2<u32>(65535u)
+    %8:vec2<bool> = eq %7, vec2<u32>(0u)
+    %9:vec2<u32> = select vec2<u32>(0u), vec2<u32>(16u), %8
+    %10:vec2<u32> = let %9
+    %11:vec2<u32> = shr %6, %10
+    %12:vec2<u32> = and %11, vec2<u32>(255u)
+    %13:vec2<bool> = eq %12, vec2<u32>(0u)
+    %14:vec2<u32> = select vec2<u32>(0u), vec2<u32>(8u), %13
+    %15:vec2<u32> = let %14
+    %16:vec2<u32> = shr %11, %15
+    %17:vec2<u32> = and %16, vec2<u32>(15u)
+    %18:vec2<bool> = eq %17, vec2<u32>(0u)
+    %19:vec2<u32> = select vec2<u32>(0u), vec2<u32>(4u), %18
+    %20:vec2<u32> = let %19
+    %21:vec2<u32> = shr %16, %20
+    %22:vec2<u32> = and %21, vec2<u32>(3u)
+    %23:vec2<bool> = eq %22, vec2<u32>(0u)
+    %24:vec2<u32> = select vec2<u32>(0u), vec2<u32>(2u), %23
+    %25:vec2<u32> = let %24
+    %26:vec2<u32> = shr %21, %25
+    %27:vec2<u32> = and %26, vec2<u32>(1u)
+    %28:vec2<bool> = eq %27, vec2<u32>(0u)
+    %29:vec2<u32> = select vec2<u32>(0u), vec2<u32>(1u), %28
+    %30:vec2<u32> = or %25, %29
+    %31:vec2<u32> = or %20, %30
+    %32:vec2<u32> = or %15, %31
+    %33:vec2<u32> = or %10, %32
+    %34:vec2<bool> = eq %26, vec2<u32>(0u)
+    %35:vec2<u32> = select %33, vec2<u32>(4294967295u), %34
+    %36:vec2<i32> = bitcast %35
+    %res:ptr<function, vec2<i32>, read_write> = var, %36
+    %38:vec2<i32> = load %res
+    store %prevent_dce, %38
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %9:void = call %firstTrailingBit_50c072
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %40:void = call %firstTrailingBit_50c072
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %11:void = call %firstTrailingBit_50c072
+%fragment_main = @fragment func():void {
+  $B4: {
+    %42:void = call %firstTrailingBit_50c072
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %13:void = call %firstTrailingBit_50c072
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %44:void = call %firstTrailingBit_50c072
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/firstTrailingBit/7496d6.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/firstTrailingBit/7496d6.wgsl.expected.ir.msl
index 9344b9a..7f110cc 100644
--- a/test/tint/builtins/gen/var/firstTrailingBit/7496d6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/firstTrailingBit/7496d6.wgsl.expected.ir.msl
@@ -1,35 +1,66 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%firstTrailingBit_7496d6 = func():void -> %b2 {
-  %b2 = block {
+%firstTrailingBit_7496d6 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %4:vec3<i32> = load %arg_0
-    %5:vec3<i32> = firstTrailingBit %4
-    %res:ptr<function, vec3<i32>, read_write> = var, %5
-    %7:vec3<i32> = load %res
-    store %prevent_dce, %7
+    %5:vec3<u32> = bitcast %4
+    %6:vec3<u32> = let %5
+    %7:vec3<u32> = and %6, vec3<u32>(65535u)
+    %8:vec3<bool> = eq %7, vec3<u32>(0u)
+    %9:vec3<u32> = select vec3<u32>(0u), vec3<u32>(16u), %8
+    %10:vec3<u32> = let %9
+    %11:vec3<u32> = shr %6, %10
+    %12:vec3<u32> = and %11, vec3<u32>(255u)
+    %13:vec3<bool> = eq %12, vec3<u32>(0u)
+    %14:vec3<u32> = select vec3<u32>(0u), vec3<u32>(8u), %13
+    %15:vec3<u32> = let %14
+    %16:vec3<u32> = shr %11, %15
+    %17:vec3<u32> = and %16, vec3<u32>(15u)
+    %18:vec3<bool> = eq %17, vec3<u32>(0u)
+    %19:vec3<u32> = select vec3<u32>(0u), vec3<u32>(4u), %18
+    %20:vec3<u32> = let %19
+    %21:vec3<u32> = shr %16, %20
+    %22:vec3<u32> = and %21, vec3<u32>(3u)
+    %23:vec3<bool> = eq %22, vec3<u32>(0u)
+    %24:vec3<u32> = select vec3<u32>(0u), vec3<u32>(2u), %23
+    %25:vec3<u32> = let %24
+    %26:vec3<u32> = shr %21, %25
+    %27:vec3<u32> = and %26, vec3<u32>(1u)
+    %28:vec3<bool> = eq %27, vec3<u32>(0u)
+    %29:vec3<u32> = select vec3<u32>(0u), vec3<u32>(1u), %28
+    %30:vec3<u32> = or %25, %29
+    %31:vec3<u32> = or %20, %30
+    %32:vec3<u32> = or %15, %31
+    %33:vec3<u32> = or %10, %32
+    %34:vec3<bool> = eq %26, vec3<u32>(0u)
+    %35:vec3<u32> = select %33, vec3<u32>(4294967295u), %34
+    %36:vec3<i32> = bitcast %35
+    %res:ptr<function, vec3<i32>, read_write> = var, %36
+    %38:vec3<i32> = load %res
+    store %prevent_dce, %38
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %9:void = call %firstTrailingBit_7496d6
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %40:void = call %firstTrailingBit_7496d6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %11:void = call %firstTrailingBit_7496d6
+%fragment_main = @fragment func():void {
+  $B4: {
+    %42:void = call %firstTrailingBit_7496d6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %13:void = call %firstTrailingBit_7496d6
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %44:void = call %firstTrailingBit_7496d6
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/firstTrailingBit/86551b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/firstTrailingBit/86551b.wgsl.expected.ir.msl
index d98c93a..be6f04a 100644
--- a/test/tint/builtins/gen/var/firstTrailingBit/86551b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/firstTrailingBit/86551b.wgsl.expected.ir.msl
@@ -1,35 +1,66 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%firstTrailingBit_86551b = func():void -> %b2 {
-  %b2 = block {
+%firstTrailingBit_86551b = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %4:vec4<i32> = load %arg_0
-    %5:vec4<i32> = firstTrailingBit %4
-    %res:ptr<function, vec4<i32>, read_write> = var, %5
-    %7:vec4<i32> = load %res
-    store %prevent_dce, %7
+    %5:vec4<u32> = bitcast %4
+    %6:vec4<u32> = let %5
+    %7:vec4<u32> = and %6, vec4<u32>(65535u)
+    %8:vec4<bool> = eq %7, vec4<u32>(0u)
+    %9:vec4<u32> = select vec4<u32>(0u), vec4<u32>(16u), %8
+    %10:vec4<u32> = let %9
+    %11:vec4<u32> = shr %6, %10
+    %12:vec4<u32> = and %11, vec4<u32>(255u)
+    %13:vec4<bool> = eq %12, vec4<u32>(0u)
+    %14:vec4<u32> = select vec4<u32>(0u), vec4<u32>(8u), %13
+    %15:vec4<u32> = let %14
+    %16:vec4<u32> = shr %11, %15
+    %17:vec4<u32> = and %16, vec4<u32>(15u)
+    %18:vec4<bool> = eq %17, vec4<u32>(0u)
+    %19:vec4<u32> = select vec4<u32>(0u), vec4<u32>(4u), %18
+    %20:vec4<u32> = let %19
+    %21:vec4<u32> = shr %16, %20
+    %22:vec4<u32> = and %21, vec4<u32>(3u)
+    %23:vec4<bool> = eq %22, vec4<u32>(0u)
+    %24:vec4<u32> = select vec4<u32>(0u), vec4<u32>(2u), %23
+    %25:vec4<u32> = let %24
+    %26:vec4<u32> = shr %21, %25
+    %27:vec4<u32> = and %26, vec4<u32>(1u)
+    %28:vec4<bool> = eq %27, vec4<u32>(0u)
+    %29:vec4<u32> = select vec4<u32>(0u), vec4<u32>(1u), %28
+    %30:vec4<u32> = or %25, %29
+    %31:vec4<u32> = or %20, %30
+    %32:vec4<u32> = or %15, %31
+    %33:vec4<u32> = or %10, %32
+    %34:vec4<bool> = eq %26, vec4<u32>(0u)
+    %35:vec4<u32> = select %33, vec4<u32>(4294967295u), %34
+    %36:vec4<i32> = bitcast %35
+    %res:ptr<function, vec4<i32>, read_write> = var, %36
+    %38:vec4<i32> = load %res
+    store %prevent_dce, %38
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %9:void = call %firstTrailingBit_86551b
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %40:void = call %firstTrailingBit_86551b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %11:void = call %firstTrailingBit_86551b
+%fragment_main = @fragment func():void {
+  $B4: {
+    %42:void = call %firstTrailingBit_86551b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %13:void = call %firstTrailingBit_86551b
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %44:void = call %firstTrailingBit_86551b
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/firstTrailingBit/cb51ce.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/firstTrailingBit/cb51ce.wgsl.expected.ir.msl
index e6a4110..40e8482 100644
--- a/test/tint/builtins/gen/var/firstTrailingBit/cb51ce.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/firstTrailingBit/cb51ce.wgsl.expected.ir.msl
@@ -1,35 +1,64 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%firstTrailingBit_cb51ce = func():void -> %b2 {
-  %b2 = block {
+%firstTrailingBit_cb51ce = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %4:vec3<u32> = load %arg_0
-    %5:vec3<u32> = firstTrailingBit %4
-    %res:ptr<function, vec3<u32>, read_write> = var, %5
-    %7:vec3<u32> = load %res
-    store %prevent_dce, %7
+    %5:vec3<u32> = let %4
+    %6:vec3<u32> = and %5, vec3<u32>(65535u)
+    %7:vec3<bool> = eq %6, vec3<u32>(0u)
+    %8:vec3<u32> = select vec3<u32>(0u), vec3<u32>(16u), %7
+    %9:vec3<u32> = let %8
+    %10:vec3<u32> = shr %5, %9
+    %11:vec3<u32> = and %10, vec3<u32>(255u)
+    %12:vec3<bool> = eq %11, vec3<u32>(0u)
+    %13:vec3<u32> = select vec3<u32>(0u), vec3<u32>(8u), %12
+    %14:vec3<u32> = let %13
+    %15:vec3<u32> = shr %10, %14
+    %16:vec3<u32> = and %15, vec3<u32>(15u)
+    %17:vec3<bool> = eq %16, vec3<u32>(0u)
+    %18:vec3<u32> = select vec3<u32>(0u), vec3<u32>(4u), %17
+    %19:vec3<u32> = let %18
+    %20:vec3<u32> = shr %15, %19
+    %21:vec3<u32> = and %20, vec3<u32>(3u)
+    %22:vec3<bool> = eq %21, vec3<u32>(0u)
+    %23:vec3<u32> = select vec3<u32>(0u), vec3<u32>(2u), %22
+    %24:vec3<u32> = let %23
+    %25:vec3<u32> = shr %20, %24
+    %26:vec3<u32> = and %25, vec3<u32>(1u)
+    %27:vec3<bool> = eq %26, vec3<u32>(0u)
+    %28:vec3<u32> = select vec3<u32>(0u), vec3<u32>(1u), %27
+    %29:vec3<u32> = or %24, %28
+    %30:vec3<u32> = or %19, %29
+    %31:vec3<u32> = or %14, %30
+    %32:vec3<u32> = or %9, %31
+    %33:vec3<bool> = eq %25, vec3<u32>(0u)
+    %34:vec3<u32> = select %32, vec3<u32>(4294967295u), %33
+    %res:ptr<function, vec3<u32>, read_write> = var, %34
+    %36:vec3<u32> = load %res
+    store %prevent_dce, %36
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %9:void = call %firstTrailingBit_cb51ce
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %38:void = call %firstTrailingBit_cb51ce
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %11:void = call %firstTrailingBit_cb51ce
+%fragment_main = @fragment func():void {
+  $B4: {
+    %40:void = call %firstTrailingBit_cb51ce
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %13:void = call %firstTrailingBit_cb51ce
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %42:void = call %firstTrailingBit_cb51ce
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/floor/3802c0.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/floor/3802c0.wgsl.expected.ir.msl
index eb620c3..12f230d 100644
--- a/test/tint/builtins/gen/var/floor/3802c0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/floor/3802c0.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%floor_3802c0 = func():void -> %b2 {
-  %b2 = block {
+%floor_3802c0 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.5h)
     %4:vec3<f16> = load %arg_0
     %5:vec3<f16> = floor %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %floor_3802c0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %floor_3802c0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %floor_3802c0
     ret
   }
diff --git a/test/tint/builtins/gen/var/floor/3bccc4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/floor/3bccc4.wgsl.expected.ir.msl
index 9f96005..b6b85f8 100644
--- a/test/tint/builtins/gen/var/floor/3bccc4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/floor/3bccc4.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%floor_3bccc4 = func():void -> %b2 {
-  %b2 = block {
+%floor_3bccc4 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.5f)
     %4:vec4<f32> = load %arg_0
     %5:vec4<f32> = floor %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %floor_3bccc4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %floor_3bccc4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %floor_3bccc4
     ret
   }
diff --git a/test/tint/builtins/gen/var/floor/5fc9ac.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/floor/5fc9ac.wgsl.expected.ir.msl
index 95e13ee..01eda4e 100644
--- a/test/tint/builtins/gen/var/floor/5fc9ac.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/floor/5fc9ac.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%floor_5fc9ac = func():void -> %b2 {
-  %b2 = block {
+%floor_5fc9ac = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.5f)
     %4:vec2<f32> = load %arg_0
     %5:vec2<f32> = floor %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %floor_5fc9ac
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %floor_5fc9ac
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %floor_5fc9ac
     ret
   }
diff --git a/test/tint/builtins/gen/var/floor/60d7ea.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/floor/60d7ea.wgsl.expected.ir.msl
index 8a2f895..3366cdc 100644
--- a/test/tint/builtins/gen/var/floor/60d7ea.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/floor/60d7ea.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%floor_60d7ea = func():void -> %b2 {
-  %b2 = block {
+%floor_60d7ea = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.5f)
     %4:vec3<f32> = load %arg_0
     %5:vec3<f32> = floor %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %floor_60d7ea
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %floor_60d7ea
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %floor_60d7ea
     ret
   }
diff --git a/test/tint/builtins/gen/var/floor/66f154.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/floor/66f154.wgsl.expected.ir.msl
index 191bd5a..a033a2f5 100644
--- a/test/tint/builtins/gen/var/floor/66f154.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/floor/66f154.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%floor_66f154 = func():void -> %b2 {
-  %b2 = block {
+%floor_66f154 = func():void {
+  $B2: {
     %arg_0:ptr<function, f32, read_write> = var, 1.5f
     %4:f32 = load %arg_0
     %5:f32 = floor %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %floor_66f154
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %floor_66f154
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %floor_66f154
     ret
   }
diff --git a/test/tint/builtins/gen/var/floor/84658c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/floor/84658c.wgsl.expected.ir.msl
index 123f10a..2420c6e 100644
--- a/test/tint/builtins/gen/var/floor/84658c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/floor/84658c.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%floor_84658c = func():void -> %b2 {
-  %b2 = block {
+%floor_84658c = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.5h)
     %4:vec2<f16> = load %arg_0
     %5:vec2<f16> = floor %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %floor_84658c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %floor_84658c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %floor_84658c
     ret
   }
diff --git a/test/tint/builtins/gen/var/floor/a2d31b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/floor/a2d31b.wgsl.expected.ir.msl
index 1760967..c4c5252 100644
--- a/test/tint/builtins/gen/var/floor/a2d31b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/floor/a2d31b.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%floor_a2d31b = func():void -> %b2 {
-  %b2 = block {
+%floor_a2d31b = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.5h)
     %4:vec4<f16> = load %arg_0
     %5:vec4<f16> = floor %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %floor_a2d31b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %floor_a2d31b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %floor_a2d31b
     ret
   }
diff --git a/test/tint/builtins/gen/var/floor/b6e09c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/floor/b6e09c.wgsl.expected.ir.msl
index 12c4cd7..f5f3ac4 100644
--- a/test/tint/builtins/gen/var/floor/b6e09c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/floor/b6e09c.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%floor_b6e09c = func():void -> %b2 {
-  %b2 = block {
+%floor_b6e09c = func():void {
+  $B2: {
     %arg_0:ptr<function, f16, read_write> = var, 1.5h
     %4:f16 = load %arg_0
     %5:f16 = floor %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %floor_b6e09c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %floor_b6e09c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %floor_b6e09c
     ret
   }
diff --git a/test/tint/builtins/gen/var/fma/26a7a9.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/fma/26a7a9.wgsl.expected.ir.msl
index bf40153..936329a 100644
--- a/test/tint/builtins/gen/var/fma/26a7a9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/fma/26a7a9.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%fma_26a7a9 = func():void -> %b2 {
-  %b2 = block {
+%fma_26a7a9 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_1:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %fma_26a7a9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %fma_26a7a9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %fma_26a7a9
     ret
   }
diff --git a/test/tint/builtins/gen/var/fma/6a3283.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/fma/6a3283.wgsl.expected.ir.msl
index 1910ad0..a7a2534 100644
--- a/test/tint/builtins/gen/var/fma/6a3283.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/fma/6a3283.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%fma_6a3283 = func():void -> %b2 {
-  %b2 = block {
+%fma_6a3283 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %arg_1:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %fma_6a3283
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %fma_6a3283
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %fma_6a3283
     ret
   }
diff --git a/test/tint/builtins/gen/var/fma/ab7818.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/fma/ab7818.wgsl.expected.ir.msl
index e73a991..99c3c5d 100644
--- a/test/tint/builtins/gen/var/fma/ab7818.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/fma/ab7818.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%fma_ab7818 = func():void -> %b2 {
-  %b2 = block {
+%fma_ab7818 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %arg_1:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %arg_2:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %fma_ab7818
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %fma_ab7818
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %fma_ab7818
     ret
   }
diff --git a/test/tint/builtins/gen/var/fma/bf21b6.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/fma/bf21b6.wgsl.expected.ir.msl
index a8a59ad..9f83d66 100644
--- a/test/tint/builtins/gen/var/fma/bf21b6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/fma/bf21b6.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%fma_bf21b6 = func():void -> %b2 {
-  %b2 = block {
+%fma_bf21b6 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %arg_1:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %arg_2:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %fma_bf21b6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %fma_bf21b6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %fma_bf21b6
     ret
   }
diff --git a/test/tint/builtins/gen/var/fma/c10ba3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/fma/c10ba3.wgsl.expected.ir.msl
index c9eab4d..5859743 100644
--- a/test/tint/builtins/gen/var/fma/c10ba3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/fma/c10ba3.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%fma_c10ba3 = func():void -> %b2 {
-  %b2 = block {
+%fma_c10ba3 = func():void {
+  $B2: {
     %arg_0:ptr<function, f32, read_write> = var, 1.0f
     %arg_1:ptr<function, f32, read_write> = var, 1.0f
     %arg_2:ptr<function, f32, read_write> = var, 1.0f
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %fma_c10ba3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %fma_c10ba3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %fma_c10ba3
     ret
   }
diff --git a/test/tint/builtins/gen/var/fma/c8abb3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/fma/c8abb3.wgsl.expected.ir.msl
index 674f899..7a91b27 100644
--- a/test/tint/builtins/gen/var/fma/c8abb3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/fma/c8abb3.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%fma_c8abb3 = func():void -> %b2 {
-  %b2 = block {
+%fma_c8abb3 = func():void {
+  $B2: {
     %arg_0:ptr<function, f16, read_write> = var, 1.0h
     %arg_1:ptr<function, f16, read_write> = var, 1.0h
     %arg_2:ptr<function, f16, read_write> = var, 1.0h
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %fma_c8abb3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %fma_c8abb3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %fma_c8abb3
     ret
   }
diff --git a/test/tint/builtins/gen/var/fma/e17c5c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/fma/e17c5c.wgsl.expected.ir.msl
index 0e4bf36..b64eea0 100644
--- a/test/tint/builtins/gen/var/fma/e17c5c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/fma/e17c5c.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%fma_e17c5c = func():void -> %b2 {
-  %b2 = block {
+%fma_e17c5c = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_1:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_2:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %fma_e17c5c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %fma_e17c5c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %fma_e17c5c
     ret
   }
diff --git a/test/tint/builtins/gen/var/fma/e7abdc.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/fma/e7abdc.wgsl.expected.ir.msl
index e1eeff7..6970e0c 100644
--- a/test/tint/builtins/gen/var/fma/e7abdc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/fma/e7abdc.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%fma_e7abdc = func():void -> %b2 {
-  %b2 = block {
+%fma_e7abdc = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %arg_1:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %arg_2:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %fma_e7abdc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %fma_e7abdc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %fma_e7abdc
     ret
   }
diff --git a/test/tint/builtins/gen/var/fract/181aa9.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/fract/181aa9.wgsl.expected.ir.msl
index f636cf7..a5f0b4e 100644
--- a/test/tint/builtins/gen/var/fract/181aa9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/fract/181aa9.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%fract_181aa9 = func():void -> %b2 {
-  %b2 = block {
+%fract_181aa9 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.25h)
     %4:vec2<f16> = load %arg_0
     %5:vec2<f16> = fract %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %fract_181aa9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %fract_181aa9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %fract_181aa9
     ret
   }
diff --git a/test/tint/builtins/gen/var/fract/498c77.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/fract/498c77.wgsl.expected.ir.msl
index a5899c0..7548531 100644
--- a/test/tint/builtins/gen/var/fract/498c77.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/fract/498c77.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%fract_498c77 = func():void -> %b2 {
-  %b2 = block {
+%fract_498c77 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.25h)
     %4:vec4<f16> = load %arg_0
     %5:vec4<f16> = fract %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %fract_498c77
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %fract_498c77
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %fract_498c77
     ret
   }
diff --git a/test/tint/builtins/gen/var/fract/8bc1e9.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/fract/8bc1e9.wgsl.expected.ir.msl
index 280da15..2aebd35 100644
--- a/test/tint/builtins/gen/var/fract/8bc1e9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/fract/8bc1e9.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%fract_8bc1e9 = func():void -> %b2 {
-  %b2 = block {
+%fract_8bc1e9 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.25f)
     %4:vec4<f32> = load %arg_0
     %5:vec4<f32> = fract %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %fract_8bc1e9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %fract_8bc1e9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %fract_8bc1e9
     ret
   }
diff --git a/test/tint/builtins/gen/var/fract/943cb1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/fract/943cb1.wgsl.expected.ir.msl
index db5b13f..27f3625 100644
--- a/test/tint/builtins/gen/var/fract/943cb1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/fract/943cb1.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%fract_943cb1 = func():void -> %b2 {
-  %b2 = block {
+%fract_943cb1 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.25f)
     %4:vec2<f32> = load %arg_0
     %5:vec2<f32> = fract %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %fract_943cb1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %fract_943cb1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %fract_943cb1
     ret
   }
diff --git a/test/tint/builtins/gen/var/fract/958a1d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/fract/958a1d.wgsl.expected.ir.msl
index 9eb6f20..055722d 100644
--- a/test/tint/builtins/gen/var/fract/958a1d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/fract/958a1d.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%fract_958a1d = func():void -> %b2 {
-  %b2 = block {
+%fract_958a1d = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.25h)
     %4:vec3<f16> = load %arg_0
     %5:vec3<f16> = fract %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %fract_958a1d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %fract_958a1d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %fract_958a1d
     ret
   }
diff --git a/test/tint/builtins/gen/var/fract/a49758.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/fract/a49758.wgsl.expected.ir.msl
index 27dc16e..59fc0ce 100644
--- a/test/tint/builtins/gen/var/fract/a49758.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/fract/a49758.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%fract_a49758 = func():void -> %b2 {
-  %b2 = block {
+%fract_a49758 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.25f)
     %4:vec3<f32> = load %arg_0
     %5:vec3<f32> = fract %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %fract_a49758
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %fract_a49758
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %fract_a49758
     ret
   }
diff --git a/test/tint/builtins/gen/var/fract/eb38ce.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/fract/eb38ce.wgsl.expected.ir.msl
index 4fa7b70..29710e2 100644
--- a/test/tint/builtins/gen/var/fract/eb38ce.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/fract/eb38ce.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%fract_eb38ce = func():void -> %b2 {
-  %b2 = block {
+%fract_eb38ce = func():void {
+  $B2: {
     %arg_0:ptr<function, f16, read_write> = var, 1.25h
     %4:f16 = load %arg_0
     %5:f16 = fract %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %fract_eb38ce
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %fract_eb38ce
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %fract_eb38ce
     ret
   }
diff --git a/test/tint/builtins/gen/var/fract/fa5c71.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/fract/fa5c71.wgsl.expected.ir.msl
index ea4271b..4a90150 100644
--- a/test/tint/builtins/gen/var/fract/fa5c71.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/fract/fa5c71.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%fract_fa5c71 = func():void -> %b2 {
-  %b2 = block {
+%fract_fa5c71 = func():void {
+  $B2: {
     %arg_0:ptr<function, f32, read_write> = var, 1.25f
     %4:f32 = load %arg_0
     %5:f32 = fract %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %fract_fa5c71
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %fract_fa5c71
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %fract_fa5c71
     ret
   }
diff --git a/test/tint/builtins/gen/var/frexp/3dd21e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/frexp/3dd21e.wgsl.expected.ir.msl
index 4b0600b..1423d26 100644
--- a/test/tint/builtins/gen/var/frexp/3dd21e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/frexp/3dd21e.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: frexp
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: frexp
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/frexp/4b2200.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/frexp/4b2200.wgsl.expected.ir.msl
index 4b0600b..1423d26 100644
--- a/test/tint/builtins/gen/var/frexp/4b2200.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/frexp/4b2200.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: frexp
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: frexp
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/frexp/5257dd.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/frexp/5257dd.wgsl.expected.ir.msl
index 4b0600b..1423d26 100644
--- a/test/tint/builtins/gen/var/frexp/5257dd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/frexp/5257dd.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: frexp
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: frexp
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/frexp/5f47bf.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/frexp/5f47bf.wgsl.expected.ir.msl
index 4b0600b..1423d26 100644
--- a/test/tint/builtins/gen/var/frexp/5f47bf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/frexp/5f47bf.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: frexp
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: frexp
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/frexp/77af93.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/frexp/77af93.wgsl.expected.ir.msl
index 4b0600b..1423d26 100644
--- a/test/tint/builtins/gen/var/frexp/77af93.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/frexp/77af93.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: frexp
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: frexp
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/frexp/979800.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/frexp/979800.wgsl.expected.ir.msl
index 4b0600b..1423d26 100644
--- a/test/tint/builtins/gen/var/frexp/979800.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/frexp/979800.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: frexp
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: frexp
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/frexp/ae4a66.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/frexp/ae4a66.wgsl.expected.ir.msl
index 4b0600b..1423d26 100644
--- a/test/tint/builtins/gen/var/frexp/ae4a66.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/frexp/ae4a66.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: frexp
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: frexp
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/frexp/eb2421.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/frexp/eb2421.wgsl.expected.ir.msl
index 4b0600b..1423d26 100644
--- a/test/tint/builtins/gen/var/frexp/eb2421.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/frexp/eb2421.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: frexp
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: frexp
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/fwidth/5d1b39.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/fwidth/5d1b39.wgsl.expected.ir.msl
index f54ec4b..bfa53f8 100644
--- a/test/tint/builtins/gen/var/fwidth/5d1b39.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/fwidth/5d1b39.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%fwidth_5d1b39 = func():void -> %b2 {
-  %b2 = block {
+%fwidth_5d1b39 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %4:vec3<f32> = load %arg_0
     %5:vec3<f32> = fwidth %4
@@ -15,8 +15,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %9:void = call %fwidth_5d1b39
     ret
   }
diff --git a/test/tint/builtins/gen/var/fwidth/b83ebb.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/fwidth/b83ebb.wgsl.expected.ir.msl
index c2bea5d..6a2f226 100644
--- a/test/tint/builtins/gen/var/fwidth/b83ebb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/fwidth/b83ebb.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%fwidth_b83ebb = func():void -> %b2 {
-  %b2 = block {
+%fwidth_b83ebb = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %4:vec2<f32> = load %arg_0
     %5:vec2<f32> = fwidth %4
@@ -15,8 +15,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %9:void = call %fwidth_b83ebb
     ret
   }
diff --git a/test/tint/builtins/gen/var/fwidth/d2ab9a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/fwidth/d2ab9a.wgsl.expected.ir.msl
index fe34479..ee4019b 100644
--- a/test/tint/builtins/gen/var/fwidth/d2ab9a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/fwidth/d2ab9a.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%fwidth_d2ab9a = func():void -> %b2 {
-  %b2 = block {
+%fwidth_d2ab9a = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %4:vec4<f32> = load %arg_0
     %5:vec4<f32> = fwidth %4
@@ -15,8 +15,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %9:void = call %fwidth_d2ab9a
     ret
   }
diff --git a/test/tint/builtins/gen/var/fwidth/df38ef.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/fwidth/df38ef.wgsl.expected.ir.msl
index 8d42cbf..6f11de3 100644
--- a/test/tint/builtins/gen/var/fwidth/df38ef.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/fwidth/df38ef.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%fwidth_df38ef = func():void -> %b2 {
-  %b2 = block {
+%fwidth_df38ef = func():void {
+  $B2: {
     %arg_0:ptr<function, f32, read_write> = var, 1.0f
     %4:f32 = load %arg_0
     %5:f32 = fwidth %4
@@ -15,8 +15,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %9:void = call %fwidth_df38ef
     ret
   }
diff --git a/test/tint/builtins/gen/var/fwidthCoarse/159c8a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/fwidthCoarse/159c8a.wgsl.expected.ir.msl
index a8646b8..271aa4a 100644
--- a/test/tint/builtins/gen/var/fwidthCoarse/159c8a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/fwidthCoarse/159c8a.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%fwidthCoarse_159c8a = func():void -> %b2 {
-  %b2 = block {
+%fwidthCoarse_159c8a = func():void {
+  $B2: {
     %arg_0:ptr<function, f32, read_write> = var, 1.0f
     %4:f32 = load %arg_0
     %5:f32 = fwidthCoarse %4
@@ -15,8 +15,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %9:void = call %fwidthCoarse_159c8a
     ret
   }
diff --git a/test/tint/builtins/gen/var/fwidthCoarse/1e59d9.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/fwidthCoarse/1e59d9.wgsl.expected.ir.msl
index a5d4016..fa7b458 100644
--- a/test/tint/builtins/gen/var/fwidthCoarse/1e59d9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/fwidthCoarse/1e59d9.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%fwidthCoarse_1e59d9 = func():void -> %b2 {
-  %b2 = block {
+%fwidthCoarse_1e59d9 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %4:vec3<f32> = load %arg_0
     %5:vec3<f32> = fwidthCoarse %4
@@ -15,8 +15,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %9:void = call %fwidthCoarse_1e59d9
     ret
   }
diff --git a/test/tint/builtins/gen/var/fwidthCoarse/4e4fc4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/fwidthCoarse/4e4fc4.wgsl.expected.ir.msl
index 85fa55e..6abf6c0 100644
--- a/test/tint/builtins/gen/var/fwidthCoarse/4e4fc4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/fwidthCoarse/4e4fc4.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%fwidthCoarse_4e4fc4 = func():void -> %b2 {
-  %b2 = block {
+%fwidthCoarse_4e4fc4 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %4:vec4<f32> = load %arg_0
     %5:vec4<f32> = fwidthCoarse %4
@@ -15,8 +15,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %9:void = call %fwidthCoarse_4e4fc4
     ret
   }
diff --git a/test/tint/builtins/gen/var/fwidthCoarse/e653f7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/fwidthCoarse/e653f7.wgsl.expected.ir.msl
index 9f7edc3..9d8ea01 100644
--- a/test/tint/builtins/gen/var/fwidthCoarse/e653f7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/fwidthCoarse/e653f7.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%fwidthCoarse_e653f7 = func():void -> %b2 {
-  %b2 = block {
+%fwidthCoarse_e653f7 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %4:vec2<f32> = load %arg_0
     %5:vec2<f32> = fwidthCoarse %4
@@ -15,8 +15,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %9:void = call %fwidthCoarse_e653f7
     ret
   }
diff --git a/test/tint/builtins/gen/var/fwidthFine/523fdc.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/fwidthFine/523fdc.wgsl.expected.ir.msl
index 68b77eb..7cea757 100644
--- a/test/tint/builtins/gen/var/fwidthFine/523fdc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/fwidthFine/523fdc.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%fwidthFine_523fdc = func():void -> %b2 {
-  %b2 = block {
+%fwidthFine_523fdc = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %4:vec3<f32> = load %arg_0
     %5:vec3<f32> = fwidthFine %4
@@ -15,8 +15,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %9:void = call %fwidthFine_523fdc
     ret
   }
diff --git a/test/tint/builtins/gen/var/fwidthFine/68f4ef.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/fwidthFine/68f4ef.wgsl.expected.ir.msl
index 6d37679..6c05b53 100644
--- a/test/tint/builtins/gen/var/fwidthFine/68f4ef.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/fwidthFine/68f4ef.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%fwidthFine_68f4ef = func():void -> %b2 {
-  %b2 = block {
+%fwidthFine_68f4ef = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %4:vec4<f32> = load %arg_0
     %5:vec4<f32> = fwidthFine %4
@@ -15,8 +15,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %9:void = call %fwidthFine_68f4ef
     ret
   }
diff --git a/test/tint/builtins/gen/var/fwidthFine/f1742d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/fwidthFine/f1742d.wgsl.expected.ir.msl
index 3df09b8..fc30376 100644
--- a/test/tint/builtins/gen/var/fwidthFine/f1742d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/fwidthFine/f1742d.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%fwidthFine_f1742d = func():void -> %b2 {
-  %b2 = block {
+%fwidthFine_f1742d = func():void {
+  $B2: {
     %arg_0:ptr<function, f32, read_write> = var, 1.0f
     %4:f32 = load %arg_0
     %5:f32 = fwidthFine %4
@@ -15,8 +15,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %9:void = call %fwidthFine_f1742d
     ret
   }
diff --git a/test/tint/builtins/gen/var/fwidthFine/ff6aa0.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/fwidthFine/ff6aa0.wgsl.expected.ir.msl
index b2683aa..e6ec81c 100644
--- a/test/tint/builtins/gen/var/fwidthFine/ff6aa0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/fwidthFine/ff6aa0.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%fwidthFine_ff6aa0 = func():void -> %b2 {
-  %b2 = block {
+%fwidthFine_ff6aa0 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %4:vec2<f32> = load %arg_0
     %5:vec2<f32> = fwidthFine %4
@@ -15,8 +15,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %9:void = call %fwidthFine_ff6aa0
     ret
   }
diff --git a/test/tint/builtins/gen/var/insertBits/3c7ba5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/insertBits/3c7ba5.wgsl.expected.ir.msl
index 6e4321b..9f7a806 100644
--- a/test/tint/builtins/gen/var/insertBits/3c7ba5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/insertBits/3c7ba5.wgsl.expected.ir.msl
@@ -1,41 +1,48 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%insertBits_3c7ba5 = func():void -> %b2 {
-  %b2 = block {
+%insertBits_3c7ba5 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %arg_3:ptr<function, u32, read_write> = var, 1u
     %7:vec2<u32> = load %arg_0
-    %8:vec2<u32> = load %arg_1
-    %9:u32 = load %arg_2
-    %10:u32 = load %arg_3
-    %11:vec2<u32> = insertBits %7, %8, %9, %10
-    %res:ptr<function, vec2<u32>, read_write> = var, %11
-    %13:vec2<u32> = load %res
-    store %prevent_dce, %13
+    %8:vec2<u32> = let %7
+    %9:vec2<u32> = load %arg_1
+    %10:vec2<u32> = let %9
+    %11:u32 = load %arg_2
+    %12:u32 = load %arg_3
+    %13:u32 = let %12
+    %14:u32 = min %11, 32u
+    %15:u32 = let %14
+    %16:u32 = sub 32u, %15
+    %17:u32 = min %13, %16
+    %18:vec2<u32> = insertBits %8, %10, %15, %17
+    %res:ptr<function, vec2<u32>, read_write> = var, %18
+    %20:vec2<u32> = load %res
+    store %prevent_dce, %20
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %15:void = call %insertBits_3c7ba5
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %22:void = call %insertBits_3c7ba5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %17:void = call %insertBits_3c7ba5
+%fragment_main = @fragment func():void {
+  $B4: {
+    %24:void = call %insertBits_3c7ba5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %19:void = call %insertBits_3c7ba5
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %26:void = call %insertBits_3c7ba5
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/insertBits/428b0b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/insertBits/428b0b.wgsl.expected.ir.msl
index 4512c1a..2870ac6 100644
--- a/test/tint/builtins/gen/var/insertBits/428b0b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/insertBits/428b0b.wgsl.expected.ir.msl
@@ -1,41 +1,48 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%insertBits_428b0b = func():void -> %b2 {
-  %b2 = block {
+%insertBits_428b0b = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %arg_3:ptr<function, u32, read_write> = var, 1u
     %7:vec3<i32> = load %arg_0
-    %8:vec3<i32> = load %arg_1
-    %9:u32 = load %arg_2
-    %10:u32 = load %arg_3
-    %11:vec3<i32> = insertBits %7, %8, %9, %10
-    %res:ptr<function, vec3<i32>, read_write> = var, %11
-    %13:vec3<i32> = load %res
-    store %prevent_dce, %13
+    %8:vec3<i32> = let %7
+    %9:vec3<i32> = load %arg_1
+    %10:vec3<i32> = let %9
+    %11:u32 = load %arg_2
+    %12:u32 = load %arg_3
+    %13:u32 = let %12
+    %14:u32 = min %11, 32u
+    %15:u32 = let %14
+    %16:u32 = sub 32u, %15
+    %17:u32 = min %13, %16
+    %18:vec3<i32> = insertBits %8, %10, %15, %17
+    %res:ptr<function, vec3<i32>, read_write> = var, %18
+    %20:vec3<i32> = load %res
+    store %prevent_dce, %20
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %15:void = call %insertBits_428b0b
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %22:void = call %insertBits_428b0b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %17:void = call %insertBits_428b0b
+%fragment_main = @fragment func():void {
+  $B4: {
+    %24:void = call %insertBits_428b0b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %19:void = call %insertBits_428b0b
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %26:void = call %insertBits_428b0b
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/insertBits/51ede1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/insertBits/51ede1.wgsl.expected.ir.msl
index c511729..ffe2673 100644
--- a/test/tint/builtins/gen/var/insertBits/51ede1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/insertBits/51ede1.wgsl.expected.ir.msl
@@ -1,41 +1,48 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%insertBits_51ede1 = func():void -> %b2 {
-  %b2 = block {
+%insertBits_51ede1 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
     %arg_1:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %arg_3:ptr<function, u32, read_write> = var, 1u
     %7:vec4<u32> = load %arg_0
-    %8:vec4<u32> = load %arg_1
-    %9:u32 = load %arg_2
-    %10:u32 = load %arg_3
-    %11:vec4<u32> = insertBits %7, %8, %9, %10
-    %res:ptr<function, vec4<u32>, read_write> = var, %11
-    %13:vec4<u32> = load %res
-    store %prevent_dce, %13
+    %8:vec4<u32> = let %7
+    %9:vec4<u32> = load %arg_1
+    %10:vec4<u32> = let %9
+    %11:u32 = load %arg_2
+    %12:u32 = load %arg_3
+    %13:u32 = let %12
+    %14:u32 = min %11, 32u
+    %15:u32 = let %14
+    %16:u32 = sub 32u, %15
+    %17:u32 = min %13, %16
+    %18:vec4<u32> = insertBits %8, %10, %15, %17
+    %res:ptr<function, vec4<u32>, read_write> = var, %18
+    %20:vec4<u32> = load %res
+    store %prevent_dce, %20
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %15:void = call %insertBits_51ede1
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %22:void = call %insertBits_51ede1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %17:void = call %insertBits_51ede1
+%fragment_main = @fragment func():void {
+  $B4: {
+    %24:void = call %insertBits_51ede1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %19:void = call %insertBits_51ede1
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %26:void = call %insertBits_51ede1
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/insertBits/65468b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/insertBits/65468b.wgsl.expected.ir.msl
index b53b133..383f3b3 100644
--- a/test/tint/builtins/gen/var/insertBits/65468b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/insertBits/65468b.wgsl.expected.ir.msl
@@ -1,41 +1,48 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%insertBits_65468b = func():void -> %b2 {
-  %b2 = block {
+%insertBits_65468b = func():void {
+  $B2: {
     %arg_0:ptr<function, i32, read_write> = var, 1i
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %arg_3:ptr<function, u32, read_write> = var, 1u
     %7:i32 = load %arg_0
-    %8:i32 = load %arg_1
-    %9:u32 = load %arg_2
-    %10:u32 = load %arg_3
-    %11:i32 = insertBits %7, %8, %9, %10
-    %res:ptr<function, i32, read_write> = var, %11
-    %13:i32 = load %res
-    store %prevent_dce, %13
+    %8:i32 = let %7
+    %9:i32 = load %arg_1
+    %10:i32 = let %9
+    %11:u32 = load %arg_2
+    %12:u32 = load %arg_3
+    %13:u32 = let %12
+    %14:u32 = min %11, 32u
+    %15:u32 = let %14
+    %16:u32 = sub 32u, %15
+    %17:u32 = min %13, %16
+    %18:i32 = insertBits %8, %10, %15, %17
+    %res:ptr<function, i32, read_write> = var, %18
+    %20:i32 = load %res
+    store %prevent_dce, %20
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %15:void = call %insertBits_65468b
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %22:void = call %insertBits_65468b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %17:void = call %insertBits_65468b
+%fragment_main = @fragment func():void {
+  $B4: {
+    %24:void = call %insertBits_65468b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %19:void = call %insertBits_65468b
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %26:void = call %insertBits_65468b
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/insertBits/87826b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/insertBits/87826b.wgsl.expected.ir.msl
index 2bff6d7..b3de742 100644
--- a/test/tint/builtins/gen/var/insertBits/87826b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/insertBits/87826b.wgsl.expected.ir.msl
@@ -1,41 +1,48 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%insertBits_87826b = func():void -> %b2 {
-  %b2 = block {
+%insertBits_87826b = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %arg_3:ptr<function, u32, read_write> = var, 1u
     %7:vec3<u32> = load %arg_0
-    %8:vec3<u32> = load %arg_1
-    %9:u32 = load %arg_2
-    %10:u32 = load %arg_3
-    %11:vec3<u32> = insertBits %7, %8, %9, %10
-    %res:ptr<function, vec3<u32>, read_write> = var, %11
-    %13:vec3<u32> = load %res
-    store %prevent_dce, %13
+    %8:vec3<u32> = let %7
+    %9:vec3<u32> = load %arg_1
+    %10:vec3<u32> = let %9
+    %11:u32 = load %arg_2
+    %12:u32 = load %arg_3
+    %13:u32 = let %12
+    %14:u32 = min %11, 32u
+    %15:u32 = let %14
+    %16:u32 = sub 32u, %15
+    %17:u32 = min %13, %16
+    %18:vec3<u32> = insertBits %8, %10, %15, %17
+    %res:ptr<function, vec3<u32>, read_write> = var, %18
+    %20:vec3<u32> = load %res
+    store %prevent_dce, %20
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %15:void = call %insertBits_87826b
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %22:void = call %insertBits_87826b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %17:void = call %insertBits_87826b
+%fragment_main = @fragment func():void {
+  $B4: {
+    %24:void = call %insertBits_87826b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %19:void = call %insertBits_87826b
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %26:void = call %insertBits_87826b
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/insertBits/d86978.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/insertBits/d86978.wgsl.expected.ir.msl
index db7d388..e02fd5b 100644
--- a/test/tint/builtins/gen/var/insertBits/d86978.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/insertBits/d86978.wgsl.expected.ir.msl
@@ -1,41 +1,48 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%insertBits_d86978 = func():void -> %b2 {
-  %b2 = block {
+%insertBits_d86978 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %arg_1:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %arg_3:ptr<function, u32, read_write> = var, 1u
     %7:vec4<i32> = load %arg_0
-    %8:vec4<i32> = load %arg_1
-    %9:u32 = load %arg_2
-    %10:u32 = load %arg_3
-    %11:vec4<i32> = insertBits %7, %8, %9, %10
-    %res:ptr<function, vec4<i32>, read_write> = var, %11
-    %13:vec4<i32> = load %res
-    store %prevent_dce, %13
+    %8:vec4<i32> = let %7
+    %9:vec4<i32> = load %arg_1
+    %10:vec4<i32> = let %9
+    %11:u32 = load %arg_2
+    %12:u32 = load %arg_3
+    %13:u32 = let %12
+    %14:u32 = min %11, 32u
+    %15:u32 = let %14
+    %16:u32 = sub 32u, %15
+    %17:u32 = min %13, %16
+    %18:vec4<i32> = insertBits %8, %10, %15, %17
+    %res:ptr<function, vec4<i32>, read_write> = var, %18
+    %20:vec4<i32> = load %res
+    store %prevent_dce, %20
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %15:void = call %insertBits_d86978
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %22:void = call %insertBits_d86978
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %17:void = call %insertBits_d86978
+%fragment_main = @fragment func():void {
+  $B4: {
+    %24:void = call %insertBits_d86978
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %19:void = call %insertBits_d86978
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %26:void = call %insertBits_d86978
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/insertBits/e3e3a2.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/insertBits/e3e3a2.wgsl.expected.ir.msl
index f3ec1f4..afb16eb 100644
--- a/test/tint/builtins/gen/var/insertBits/e3e3a2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/insertBits/e3e3a2.wgsl.expected.ir.msl
@@ -1,41 +1,48 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%insertBits_e3e3a2 = func():void -> %b2 {
-  %b2 = block {
+%insertBits_e3e3a2 = func():void {
+  $B2: {
     %arg_0:ptr<function, u32, read_write> = var, 1u
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %arg_3:ptr<function, u32, read_write> = var, 1u
     %7:u32 = load %arg_0
-    %8:u32 = load %arg_1
-    %9:u32 = load %arg_2
-    %10:u32 = load %arg_3
-    %11:u32 = insertBits %7, %8, %9, %10
-    %res:ptr<function, u32, read_write> = var, %11
-    %13:u32 = load %res
-    store %prevent_dce, %13
+    %8:u32 = let %7
+    %9:u32 = load %arg_1
+    %10:u32 = let %9
+    %11:u32 = load %arg_2
+    %12:u32 = load %arg_3
+    %13:u32 = let %12
+    %14:u32 = min %11, 32u
+    %15:u32 = let %14
+    %16:u32 = sub 32u, %15
+    %17:u32 = min %13, %16
+    %18:u32 = insertBits %8, %10, %15, %17
+    %res:ptr<function, u32, read_write> = var, %18
+    %20:u32 = load %res
+    store %prevent_dce, %20
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %15:void = call %insertBits_e3e3a2
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %22:void = call %insertBits_e3e3a2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %17:void = call %insertBits_e3e3a2
+%fragment_main = @fragment func():void {
+  $B4: {
+    %24:void = call %insertBits_e3e3a2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %19:void = call %insertBits_e3e3a2
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %26:void = call %insertBits_e3e3a2
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/insertBits/fe6ba6.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/insertBits/fe6ba6.wgsl.expected.ir.msl
index 75ae83f..284d7e3 100644
--- a/test/tint/builtins/gen/var/insertBits/fe6ba6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/insertBits/fe6ba6.wgsl.expected.ir.msl
@@ -1,41 +1,48 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%insertBits_fe6ba6 = func():void -> %b2 {
-  %b2 = block {
+%insertBits_fe6ba6 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %arg_3:ptr<function, u32, read_write> = var, 1u
     %7:vec2<i32> = load %arg_0
-    %8:vec2<i32> = load %arg_1
-    %9:u32 = load %arg_2
-    %10:u32 = load %arg_3
-    %11:vec2<i32> = insertBits %7, %8, %9, %10
-    %res:ptr<function, vec2<i32>, read_write> = var, %11
-    %13:vec2<i32> = load %res
-    store %prevent_dce, %13
+    %8:vec2<i32> = let %7
+    %9:vec2<i32> = load %arg_1
+    %10:vec2<i32> = let %9
+    %11:u32 = load %arg_2
+    %12:u32 = load %arg_3
+    %13:u32 = let %12
+    %14:u32 = min %11, 32u
+    %15:u32 = let %14
+    %16:u32 = sub 32u, %15
+    %17:u32 = min %13, %16
+    %18:vec2<i32> = insertBits %8, %10, %15, %17
+    %res:ptr<function, vec2<i32>, read_write> = var, %18
+    %20:vec2<i32> = load %res
+    store %prevent_dce, %20
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %15:void = call %insertBits_fe6ba6
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %22:void = call %insertBits_fe6ba6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %17:void = call %insertBits_fe6ba6
+%fragment_main = @fragment func():void {
+  $B4: {
+    %24:void = call %insertBits_fe6ba6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %19:void = call %insertBits_fe6ba6
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %26:void = call %insertBits_fe6ba6
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/inverseSqrt/440300.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/inverseSqrt/440300.wgsl.expected.ir.msl
index f5bf230..f25d3ee 100644
--- a/test/tint/builtins/gen/var/inverseSqrt/440300.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/inverseSqrt/440300.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%inverseSqrt_440300 = func():void -> %b2 {
-  %b2 = block {
+%inverseSqrt_440300 = func():void {
+  $B2: {
     %arg_0:ptr<function, f16, read_write> = var, 1.0h
     %4:f16 = load %arg_0
     %5:f16 = inverseSqrt %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %inverseSqrt_440300
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %inverseSqrt_440300
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %inverseSqrt_440300
     ret
   }
diff --git a/test/tint/builtins/gen/var/inverseSqrt/5f51f8.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/inverseSqrt/5f51f8.wgsl.expected.ir.msl
index dc1fee3..f8fbfaf 100644
--- a/test/tint/builtins/gen/var/inverseSqrt/5f51f8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/inverseSqrt/5f51f8.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%inverseSqrt_5f51f8 = func():void -> %b2 {
-  %b2 = block {
+%inverseSqrt_5f51f8 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %4:vec2<f16> = load %arg_0
     %5:vec2<f16> = inverseSqrt %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %inverseSqrt_5f51f8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %inverseSqrt_5f51f8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %inverseSqrt_5f51f8
     ret
   }
diff --git a/test/tint/builtins/gen/var/inverseSqrt/84407e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/inverseSqrt/84407e.wgsl.expected.ir.msl
index fac232a..d4afaa8 100644
--- a/test/tint/builtins/gen/var/inverseSqrt/84407e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/inverseSqrt/84407e.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%inverseSqrt_84407e = func():void -> %b2 {
-  %b2 = block {
+%inverseSqrt_84407e = func():void {
+  $B2: {
     %arg_0:ptr<function, f32, read_write> = var, 1.0f
     %4:f32 = load %arg_0
     %5:f32 = inverseSqrt %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %inverseSqrt_84407e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %inverseSqrt_84407e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %inverseSqrt_84407e
     ret
   }
diff --git a/test/tint/builtins/gen/var/inverseSqrt/8f2bd2.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/inverseSqrt/8f2bd2.wgsl.expected.ir.msl
index 7a3c695..6a4c8e2 100644
--- a/test/tint/builtins/gen/var/inverseSqrt/8f2bd2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/inverseSqrt/8f2bd2.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%inverseSqrt_8f2bd2 = func():void -> %b2 {
-  %b2 = block {
+%inverseSqrt_8f2bd2 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %4:vec2<f32> = load %arg_0
     %5:vec2<f32> = inverseSqrt %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %inverseSqrt_8f2bd2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %inverseSqrt_8f2bd2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %inverseSqrt_8f2bd2
     ret
   }
diff --git a/test/tint/builtins/gen/var/inverseSqrt/b197b1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/inverseSqrt/b197b1.wgsl.expected.ir.msl
index deaa16b..859d28f 100644
--- a/test/tint/builtins/gen/var/inverseSqrt/b197b1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/inverseSqrt/b197b1.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%inverseSqrt_b197b1 = func():void -> %b2 {
-  %b2 = block {
+%inverseSqrt_b197b1 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %4:vec3<f32> = load %arg_0
     %5:vec3<f32> = inverseSqrt %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %inverseSqrt_b197b1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %inverseSqrt_b197b1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %inverseSqrt_b197b1
     ret
   }
diff --git a/test/tint/builtins/gen/var/inverseSqrt/b85ebd.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/inverseSqrt/b85ebd.wgsl.expected.ir.msl
index a205c2a..1155726 100644
--- a/test/tint/builtins/gen/var/inverseSqrt/b85ebd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/inverseSqrt/b85ebd.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%inverseSqrt_b85ebd = func():void -> %b2 {
-  %b2 = block {
+%inverseSqrt_b85ebd = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %4:vec3<f16> = load %arg_0
     %5:vec3<f16> = inverseSqrt %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %inverseSqrt_b85ebd
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %inverseSqrt_b85ebd
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %inverseSqrt_b85ebd
     ret
   }
diff --git a/test/tint/builtins/gen/var/inverseSqrt/c22347.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/inverseSqrt/c22347.wgsl.expected.ir.msl
index 02d8d60..2eac11b 100644
--- a/test/tint/builtins/gen/var/inverseSqrt/c22347.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/inverseSqrt/c22347.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%inverseSqrt_c22347 = func():void -> %b2 {
-  %b2 = block {
+%inverseSqrt_c22347 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %4:vec4<f32> = load %arg_0
     %5:vec4<f32> = inverseSqrt %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %inverseSqrt_c22347
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %inverseSqrt_c22347
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %inverseSqrt_c22347
     ret
   }
diff --git a/test/tint/builtins/gen/var/inverseSqrt/cbdc70.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/inverseSqrt/cbdc70.wgsl.expected.ir.msl
index eae7420..ab8e2e3 100644
--- a/test/tint/builtins/gen/var/inverseSqrt/cbdc70.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/inverseSqrt/cbdc70.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%inverseSqrt_cbdc70 = func():void -> %b2 {
-  %b2 = block {
+%inverseSqrt_cbdc70 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %4:vec4<f16> = load %arg_0
     %5:vec4<f16> = inverseSqrt %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %inverseSqrt_cbdc70
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %inverseSqrt_cbdc70
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %inverseSqrt_cbdc70
     ret
   }
diff --git a/test/tint/builtins/gen/var/ldexp/082c1f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/ldexp/082c1f.wgsl.expected.ir.msl
index 1e85268..1b4f5f2 100644
--- a/test/tint/builtins/gen/var/ldexp/082c1f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/ldexp/082c1f.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%ldexp_082c1f = func():void -> %b2 {
-  %b2 = block {
+%ldexp_082c1f = func():void {
+  $B2: {
     %arg_0:ptr<function, f16, read_write> = var, 1.0h
     %4:f16 = load %arg_0
     %5:f16 = ldexp %4, 1i
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %ldexp_082c1f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %ldexp_082c1f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %ldexp_082c1f
     ret
   }
diff --git a/test/tint/builtins/gen/var/ldexp/217a31.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/ldexp/217a31.wgsl.expected.ir.msl
index 3358897..6abced5 100644
--- a/test/tint/builtins/gen/var/ldexp/217a31.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/ldexp/217a31.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%ldexp_217a31 = func():void -> %b2 {
-  %b2 = block {
+%ldexp_217a31 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %4:vec2<f16> = load %arg_0
     %5:vec2<f16> = ldexp %4, vec2<i32>(1i)
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %ldexp_217a31
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %ldexp_217a31
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %ldexp_217a31
     ret
   }
diff --git a/test/tint/builtins/gen/var/ldexp/3d90b4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/ldexp/3d90b4.wgsl.expected.ir.msl
index aa8f13a..0606c84 100644
--- a/test/tint/builtins/gen/var/ldexp/3d90b4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/ldexp/3d90b4.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%ldexp_3d90b4 = func():void -> %b2 {
-  %b2 = block {
+%ldexp_3d90b4 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %5:vec2<f16> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %ldexp_3d90b4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %ldexp_3d90b4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %ldexp_3d90b4
     ret
   }
diff --git a/test/tint/builtins/gen/var/ldexp/593ff3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/ldexp/593ff3.wgsl.expected.ir.msl
index 298a887..2aed51e 100644
--- a/test/tint/builtins/gen/var/ldexp/593ff3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/ldexp/593ff3.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%ldexp_593ff3 = func():void -> %b2 {
-  %b2 = block {
+%ldexp_593ff3 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %4:vec3<f32> = load %arg_0
     %5:vec3<f32> = ldexp %4, vec3<i32>(1i)
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %ldexp_593ff3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %ldexp_593ff3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %ldexp_593ff3
     ret
   }
diff --git a/test/tint/builtins/gen/var/ldexp/624e0c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/ldexp/624e0c.wgsl.expected.ir.msl
index 2b143d1..5ab7660 100644
--- a/test/tint/builtins/gen/var/ldexp/624e0c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/ldexp/624e0c.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%ldexp_624e0c = func():void -> %b2 {
-  %b2 = block {
+%ldexp_624e0c = func():void {
+  $B2: {
     %arg_0:ptr<function, f16, read_write> = var, 1.0h
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:f16 = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %ldexp_624e0c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %ldexp_624e0c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %ldexp_624e0c
     ret
   }
diff --git a/test/tint/builtins/gen/var/ldexp/65a7bd.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/ldexp/65a7bd.wgsl.expected.ir.msl
index 8535667..568b34a 100644
--- a/test/tint/builtins/gen/var/ldexp/65a7bd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/ldexp/65a7bd.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%ldexp_65a7bd = func():void -> %b2 {
-  %b2 = block {
+%ldexp_65a7bd = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %4:vec4<f32> = load %arg_0
     %5:vec4<f32> = ldexp %4, vec4<i32>(1i)
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %ldexp_65a7bd
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %ldexp_65a7bd
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %ldexp_65a7bd
     ret
   }
diff --git a/test/tint/builtins/gen/var/ldexp/7485ce.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/ldexp/7485ce.wgsl.expected.ir.msl
index a55991e..6462700 100644
--- a/test/tint/builtins/gen/var/ldexp/7485ce.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/ldexp/7485ce.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%ldexp_7485ce = func():void -> %b2 {
-  %b2 = block {
+%ldexp_7485ce = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %5:vec3<f16> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %ldexp_7485ce
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %ldexp_7485ce
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %ldexp_7485ce
     ret
   }
diff --git a/test/tint/builtins/gen/var/ldexp/7fa13c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/ldexp/7fa13c.wgsl.expected.ir.msl
index ab163ba..40c82ad 100644
--- a/test/tint/builtins/gen/var/ldexp/7fa13c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/ldexp/7fa13c.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%ldexp_7fa13c = func():void -> %b2 {
-  %b2 = block {
+%ldexp_7fa13c = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %arg_1:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %5:vec4<f16> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %ldexp_7fa13c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %ldexp_7fa13c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %ldexp_7fa13c
     ret
   }
diff --git a/test/tint/builtins/gen/var/ldexp/8a0c2f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/ldexp/8a0c2f.wgsl.expected.ir.msl
index fcb8b27..b880f13 100644
--- a/test/tint/builtins/gen/var/ldexp/8a0c2f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/ldexp/8a0c2f.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%ldexp_8a0c2f = func():void -> %b2 {
-  %b2 = block {
+%ldexp_8a0c2f = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %4:vec4<f16> = load %arg_0
     %5:vec4<f16> = ldexp %4, vec4<i32>(1i)
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %ldexp_8a0c2f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %ldexp_8a0c2f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %ldexp_8a0c2f
     ret
   }
diff --git a/test/tint/builtins/gen/var/ldexp/8e43e9.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/ldexp/8e43e9.wgsl.expected.ir.msl
index d348024..a0bbce0 100644
--- a/test/tint/builtins/gen/var/ldexp/8e43e9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/ldexp/8e43e9.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%ldexp_8e43e9 = func():void -> %b2 {
-  %b2 = block {
+%ldexp_8e43e9 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %4:vec3<f16> = load %arg_0
     %5:vec3<f16> = ldexp %4, vec3<i32>(1i)
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %ldexp_8e43e9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %ldexp_8e43e9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %ldexp_8e43e9
     ret
   }
diff --git a/test/tint/builtins/gen/var/ldexp/a22679.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/ldexp/a22679.wgsl.expected.ir.msl
index 30a2f87..d9062dd 100644
--- a/test/tint/builtins/gen/var/ldexp/a22679.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/ldexp/a22679.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%ldexp_a22679 = func():void -> %b2 {
-  %b2 = block {
+%ldexp_a22679 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %4:vec2<f32> = load %arg_0
     %5:vec2<f32> = ldexp %4, vec2<i32>(1i)
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %ldexp_a22679
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %ldexp_a22679
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %ldexp_a22679
     ret
   }
diff --git a/test/tint/builtins/gen/var/ldexp/a31cdc.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/ldexp/a31cdc.wgsl.expected.ir.msl
index fca71e7..5e0688e 100644
--- a/test/tint/builtins/gen/var/ldexp/a31cdc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/ldexp/a31cdc.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%ldexp_a31cdc = func():void -> %b2 {
-  %b2 = block {
+%ldexp_a31cdc = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %5:vec3<f32> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %ldexp_a31cdc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %ldexp_a31cdc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %ldexp_a31cdc
     ret
   }
diff --git a/test/tint/builtins/gen/var/ldexp/abd718.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/ldexp/abd718.wgsl.expected.ir.msl
index 6074eb0..f3e515a 100644
--- a/test/tint/builtins/gen/var/ldexp/abd718.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/ldexp/abd718.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%ldexp_abd718 = func():void -> %b2 {
-  %b2 = block {
+%ldexp_abd718 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %5:vec2<f32> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %ldexp_abd718
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %ldexp_abd718
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %ldexp_abd718
     ret
   }
diff --git a/test/tint/builtins/gen/var/ldexp/c9d0b7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/ldexp/c9d0b7.wgsl.expected.ir.msl
index ba63271..d8ede5c 100644
--- a/test/tint/builtins/gen/var/ldexp/c9d0b7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/ldexp/c9d0b7.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%ldexp_c9d0b7 = func():void -> %b2 {
-  %b2 = block {
+%ldexp_c9d0b7 = func():void {
+  $B2: {
     %arg_0:ptr<function, f32, read_write> = var, 1.0f
     %4:f32 = load %arg_0
     %5:f32 = ldexp %4, 1i
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %ldexp_c9d0b7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %ldexp_c9d0b7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %ldexp_c9d0b7
     ret
   }
diff --git a/test/tint/builtins/gen/var/ldexp/cc9cde.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/ldexp/cc9cde.wgsl.expected.ir.msl
index bfad74b..8563df5 100644
--- a/test/tint/builtins/gen/var/ldexp/cc9cde.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/ldexp/cc9cde.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%ldexp_cc9cde = func():void -> %b2 {
-  %b2 = block {
+%ldexp_cc9cde = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %arg_1:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %5:vec4<f32> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %ldexp_cc9cde
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %ldexp_cc9cde
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %ldexp_cc9cde
     ret
   }
diff --git a/test/tint/builtins/gen/var/ldexp/db8b49.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/ldexp/db8b49.wgsl.expected.ir.msl
index a1c42a7..612fd50 100644
--- a/test/tint/builtins/gen/var/ldexp/db8b49.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/ldexp/db8b49.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%ldexp_db8b49 = func():void -> %b2 {
-  %b2 = block {
+%ldexp_db8b49 = func():void {
+  $B2: {
     %arg_0:ptr<function, f32, read_write> = var, 1.0f
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:f32 = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %ldexp_db8b49
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %ldexp_db8b49
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %ldexp_db8b49
     ret
   }
diff --git a/test/tint/builtins/gen/var/length/056071.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/length/056071.wgsl.expected.ir.msl
index 863be46..e95f9e4 100644
--- a/test/tint/builtins/gen/var/length/056071.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/length/056071.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%length_056071 = func():void -> %b2 {
-  %b2 = block {
+%length_056071 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(0.0f)
     %4:vec3<f32> = load %arg_0
     %5:f32 = length %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %length_056071
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %length_056071
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %length_056071
     ret
   }
diff --git a/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.ir.msl
index bf4e99f..35357a6 100644
--- a/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%length_3f0e13 = func():void -> %b2 {
-  %b2 = block {
+%length_3f0e13 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(0.0h)
     %4:vec2<f16> = load %arg_0
     %5:f16 = length %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %length_3f0e13
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %length_3f0e13
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %length_3f0e13
     ret
   }
diff --git a/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.ir.msl
index 3524c44..2c0d70d 100644
--- a/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%length_5b1a9b = func():void -> %b2 {
-  %b2 = block {
+%length_5b1a9b = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(0.0h)
     %4:vec4<f16> = load %arg_0
     %5:f16 = length %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %length_5b1a9b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %length_5b1a9b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %length_5b1a9b
     ret
   }
diff --git a/test/tint/builtins/gen/var/length/602a17.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/length/602a17.wgsl.expected.ir.msl
index eaa7796..7a2defb 100644
--- a/test/tint/builtins/gen/var/length/602a17.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/length/602a17.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%length_602a17 = func():void -> %b2 {
-  %b2 = block {
+%length_602a17 = func():void {
+  $B2: {
     %arg_0:ptr<function, f32, read_write> = var, 0.0f
     %4:f32 = load %arg_0
     %5:f32 = length %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %length_602a17
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %length_602a17
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %length_602a17
     ret
   }
diff --git a/test/tint/builtins/gen/var/length/afde8b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/length/afde8b.wgsl.expected.ir.msl
index e5a38c6..85bcbc5d 100644
--- a/test/tint/builtins/gen/var/length/afde8b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/length/afde8b.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%length_afde8b = func():void -> %b2 {
-  %b2 = block {
+%length_afde8b = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(0.0f)
     %4:vec2<f32> = load %arg_0
     %5:f32 = length %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %length_afde8b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %length_afde8b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %length_afde8b
     ret
   }
diff --git a/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.ir.msl
index 0ef6b56..3c41bbf 100644
--- a/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%length_ba16d6 = func():void -> %b2 {
-  %b2 = block {
+%length_ba16d6 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(0.0h)
     %4:vec3<f16> = load %arg_0
     %5:f16 = length %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %length_ba16d6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %length_ba16d6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %length_ba16d6
     ret
   }
diff --git a/test/tint/builtins/gen/var/length/becebf.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/length/becebf.wgsl.expected.ir.msl
index 1fdfce4..642a661 100644
--- a/test/tint/builtins/gen/var/length/becebf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/length/becebf.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%length_becebf = func():void -> %b2 {
-  %b2 = block {
+%length_becebf = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(0.0f)
     %4:vec4<f32> = load %arg_0
     %5:f32 = length %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %length_becebf
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %length_becebf
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %length_becebf
     ret
   }
diff --git a/test/tint/builtins/gen/var/length/c158da.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/length/c158da.wgsl.expected.ir.msl
index 224ed46..016229a 100644
--- a/test/tint/builtins/gen/var/length/c158da.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/length/c158da.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%length_c158da = func():void -> %b2 {
-  %b2 = block {
+%length_c158da = func():void {
+  $B2: {
     %arg_0:ptr<function, f16, read_write> = var, 0.0h
     %4:f16 = load %arg_0
     %5:f16 = length %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %length_c158da
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %length_c158da
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %length_c158da
     ret
   }
diff --git a/test/tint/builtins/gen/var/log/3da25a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/log/3da25a.wgsl.expected.ir.msl
index 85e4e74..5eef4a2 100644
--- a/test/tint/builtins/gen/var/log/3da25a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/log/3da25a.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%log_3da25a = func():void -> %b2 {
-  %b2 = block {
+%log_3da25a = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %4:vec4<f32> = load %arg_0
     %5:vec4<f32> = log %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %log_3da25a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %log_3da25a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %log_3da25a
     ret
   }
diff --git a/test/tint/builtins/gen/var/log/6ff86f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/log/6ff86f.wgsl.expected.ir.msl
index 983307b..fae22b8 100644
--- a/test/tint/builtins/gen/var/log/6ff86f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/log/6ff86f.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%log_6ff86f = func():void -> %b2 {
-  %b2 = block {
+%log_6ff86f = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %4:vec3<f16> = load %arg_0
     %5:vec3<f16> = log %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %log_6ff86f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %log_6ff86f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %log_6ff86f
     ret
   }
diff --git a/test/tint/builtins/gen/var/log/7114a6.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/log/7114a6.wgsl.expected.ir.msl
index 0e592ee..e946e94 100644
--- a/test/tint/builtins/gen/var/log/7114a6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/log/7114a6.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%log_7114a6 = func():void -> %b2 {
-  %b2 = block {
+%log_7114a6 = func():void {
+  $B2: {
     %arg_0:ptr<function, f32, read_write> = var, 1.0f
     %4:f32 = load %arg_0
     %5:f32 = log %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %log_7114a6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %log_7114a6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %log_7114a6
     ret
   }
diff --git a/test/tint/builtins/gen/var/log/8f0e32.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/log/8f0e32.wgsl.expected.ir.msl
index 927a123..cb15115 100644
--- a/test/tint/builtins/gen/var/log/8f0e32.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/log/8f0e32.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%log_8f0e32 = func():void -> %b2 {
-  %b2 = block {
+%log_8f0e32 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %4:vec2<f16> = load %arg_0
     %5:vec2<f16> = log %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %log_8f0e32
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %log_8f0e32
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %log_8f0e32
     ret
   }
diff --git a/test/tint/builtins/gen/var/log/b2ce28.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/log/b2ce28.wgsl.expected.ir.msl
index 103312e..643e4b0 100644
--- a/test/tint/builtins/gen/var/log/b2ce28.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/log/b2ce28.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%log_b2ce28 = func():void -> %b2 {
-  %b2 = block {
+%log_b2ce28 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %4:vec2<f32> = load %arg_0
     %5:vec2<f32> = log %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %log_b2ce28
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %log_b2ce28
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %log_b2ce28
     ret
   }
diff --git a/test/tint/builtins/gen/var/log/c9f489.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/log/c9f489.wgsl.expected.ir.msl
index f16fc0e..ab9f9f0 100644
--- a/test/tint/builtins/gen/var/log/c9f489.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/log/c9f489.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%log_c9f489 = func():void -> %b2 {
-  %b2 = block {
+%log_c9f489 = func():void {
+  $B2: {
     %arg_0:ptr<function, f16, read_write> = var, 1.0h
     %4:f16 = load %arg_0
     %5:f16 = log %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %log_c9f489
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %log_c9f489
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %log_c9f489
     ret
   }
diff --git a/test/tint/builtins/gen/var/log/cdbdc1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/log/cdbdc1.wgsl.expected.ir.msl
index 0e6f4d1..0cc9552 100644
--- a/test/tint/builtins/gen/var/log/cdbdc1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/log/cdbdc1.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%log_cdbdc1 = func():void -> %b2 {
-  %b2 = block {
+%log_cdbdc1 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %4:vec4<f16> = load %arg_0
     %5:vec4<f16> = log %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %log_cdbdc1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %log_cdbdc1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %log_cdbdc1
     ret
   }
diff --git a/test/tint/builtins/gen/var/log/f4c570.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/log/f4c570.wgsl.expected.ir.msl
index 0e466a0..5a04e6e 100644
--- a/test/tint/builtins/gen/var/log/f4c570.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/log/f4c570.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%log_f4c570 = func():void -> %b2 {
-  %b2 = block {
+%log_f4c570 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %4:vec3<f32> = load %arg_0
     %5:vec3<f32> = log %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %log_f4c570
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %log_f4c570
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %log_f4c570
     ret
   }
diff --git a/test/tint/builtins/gen/var/log2/38b478.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/log2/38b478.wgsl.expected.ir.msl
index 2930754..5926a34 100644
--- a/test/tint/builtins/gen/var/log2/38b478.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/log2/38b478.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%log2_38b478 = func():void -> %b2 {
-  %b2 = block {
+%log2_38b478 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %4:vec3<f16> = load %arg_0
     %5:vec3<f16> = log2 %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %log2_38b478
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %log2_38b478
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %log2_38b478
     ret
   }
diff --git a/test/tint/builtins/gen/var/log2/4036ed.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/log2/4036ed.wgsl.expected.ir.msl
index cd0e2bb..4d1be75 100644
--- a/test/tint/builtins/gen/var/log2/4036ed.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/log2/4036ed.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%log2_4036ed = func():void -> %b2 {
-  %b2 = block {
+%log2_4036ed = func():void {
+  $B2: {
     %arg_0:ptr<function, f32, read_write> = var, 1.0f
     %4:f32 = load %arg_0
     %5:f32 = log2 %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %log2_4036ed
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %log2_4036ed
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %log2_4036ed
     ret
   }
diff --git a/test/tint/builtins/gen/var/log2/776088.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/log2/776088.wgsl.expected.ir.msl
index 972e620..4127f4e 100644
--- a/test/tint/builtins/gen/var/log2/776088.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/log2/776088.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%log2_776088 = func():void -> %b2 {
-  %b2 = block {
+%log2_776088 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %4:vec4<f16> = load %arg_0
     %5:vec4<f16> = log2 %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %log2_776088
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %log2_776088
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %log2_776088
     ret
   }
diff --git a/test/tint/builtins/gen/var/log2/8c10b3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/log2/8c10b3.wgsl.expected.ir.msl
index 9914830..81a2294 100644
--- a/test/tint/builtins/gen/var/log2/8c10b3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/log2/8c10b3.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%log2_8c10b3 = func():void -> %b2 {
-  %b2 = block {
+%log2_8c10b3 = func():void {
+  $B2: {
     %arg_0:ptr<function, f16, read_write> = var, 1.0h
     %4:f16 = load %arg_0
     %5:f16 = log2 %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %log2_8c10b3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %log2_8c10b3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %log2_8c10b3
     ret
   }
diff --git a/test/tint/builtins/gen/var/log2/902988.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/log2/902988.wgsl.expected.ir.msl
index 378e8b1..6f6f237 100644
--- a/test/tint/builtins/gen/var/log2/902988.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/log2/902988.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%log2_902988 = func():void -> %b2 {
-  %b2 = block {
+%log2_902988 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %4:vec4<f32> = load %arg_0
     %5:vec4<f32> = log2 %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %log2_902988
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %log2_902988
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %log2_902988
     ret
   }
diff --git a/test/tint/builtins/gen/var/log2/adb233.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/log2/adb233.wgsl.expected.ir.msl
index 9a03150..d8d20ec 100644
--- a/test/tint/builtins/gen/var/log2/adb233.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/log2/adb233.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%log2_adb233 = func():void -> %b2 {
-  %b2 = block {
+%log2_adb233 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %4:vec3<f32> = load %arg_0
     %5:vec3<f32> = log2 %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %log2_adb233
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %log2_adb233
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %log2_adb233
     ret
   }
diff --git a/test/tint/builtins/gen/var/log2/aea659.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/log2/aea659.wgsl.expected.ir.msl
index 5299a21..d22e0f4 100644
--- a/test/tint/builtins/gen/var/log2/aea659.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/log2/aea659.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%log2_aea659 = func():void -> %b2 {
-  %b2 = block {
+%log2_aea659 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %4:vec2<f32> = load %arg_0
     %5:vec2<f32> = log2 %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %log2_aea659
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %log2_aea659
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %log2_aea659
     ret
   }
diff --git a/test/tint/builtins/gen/var/log2/fb9f0b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/log2/fb9f0b.wgsl.expected.ir.msl
index 1bbabfd..8e44561 100644
--- a/test/tint/builtins/gen/var/log2/fb9f0b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/log2/fb9f0b.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%log2_fb9f0b = func():void -> %b2 {
-  %b2 = block {
+%log2_fb9f0b = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %4:vec2<f16> = load %arg_0
     %5:vec2<f16> = log2 %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %log2_fb9f0b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %log2_fb9f0b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %log2_fb9f0b
     ret
   }
diff --git a/test/tint/builtins/gen/var/max/0c0aae.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/max/0c0aae.wgsl.expected.ir.msl
index e7fd6d4..42205d5 100644
--- a/test/tint/builtins/gen/var/max/0c0aae.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/max/0c0aae.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%max_0c0aae = func():void -> %b2 {
-  %b2 = block {
+%max_0c0aae = func():void {
+  $B2: {
     %arg_0:ptr<function, u32, read_write> = var, 1u
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:u32 = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %max_0c0aae
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %max_0c0aae
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %max_0c0aae
     ret
   }
diff --git a/test/tint/builtins/gen/var/max/111ac0.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/max/111ac0.wgsl.expected.ir.msl
index 8b5a30b..6a34953 100644
--- a/test/tint/builtins/gen/var/max/111ac0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/max/111ac0.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%max_111ac0 = func():void -> %b2 {
-  %b2 = block {
+%max_111ac0 = func():void {
+  $B2: {
     %arg_0:ptr<function, f16, read_write> = var, 1.0h
     %arg_1:ptr<function, f16, read_write> = var, 1.0h
     %5:f16 = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %max_111ac0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %max_111ac0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %max_111ac0
     ret
   }
diff --git a/test/tint/builtins/gen/var/max/25eafe.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/max/25eafe.wgsl.expected.ir.msl
index cc03377..284b967 100644
--- a/test/tint/builtins/gen/var/max/25eafe.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/max/25eafe.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%max_25eafe = func():void -> %b2 {
-  %b2 = block {
+%max_25eafe = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %5:vec3<i32> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %max_25eafe
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %max_25eafe
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %max_25eafe
     ret
   }
diff --git a/test/tint/builtins/gen/var/max/320815.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/max/320815.wgsl.expected.ir.msl
index 6d478db..f37df09 100644
--- a/test/tint/builtins/gen/var/max/320815.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/max/320815.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%max_320815 = func():void -> %b2 {
-  %b2 = block {
+%max_320815 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %5:vec2<u32> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %max_320815
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %max_320815
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %max_320815
     ret
   }
diff --git a/test/tint/builtins/gen/var/max/34956e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/max/34956e.wgsl.expected.ir.msl
index 1f1f8eb..502cf23 100644
--- a/test/tint/builtins/gen/var/max/34956e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/max/34956e.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%max_34956e = func():void -> %b2 {
-  %b2 = block {
+%max_34956e = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %arg_1:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %5:vec2<f16> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %max_34956e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %max_34956e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %max_34956e
     ret
   }
diff --git a/test/tint/builtins/gen/var/max/445169.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/max/445169.wgsl.expected.ir.msl
index 448aad1..bbc95b7 100644
--- a/test/tint/builtins/gen/var/max/445169.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/max/445169.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%max_445169 = func():void -> %b2 {
-  %b2 = block {
+%max_445169 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %arg_1:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %5:vec3<f16> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %max_445169
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %max_445169
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %max_445169
     ret
   }
diff --git a/test/tint/builtins/gen/var/max/44a39d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/max/44a39d.wgsl.expected.ir.msl
index 3d79aad..992d41f 100644
--- a/test/tint/builtins/gen/var/max/44a39d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/max/44a39d.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%max_44a39d = func():void -> %b2 {
-  %b2 = block {
+%max_44a39d = func():void {
+  $B2: {
     %arg_0:ptr<function, f32, read_write> = var, 1.0f
     %arg_1:ptr<function, f32, read_write> = var, 1.0f
     %5:f32 = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %max_44a39d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %max_44a39d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %max_44a39d
     ret
   }
diff --git a/test/tint/builtins/gen/var/max/453e04.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/max/453e04.wgsl.expected.ir.msl
index 0fccda7..f614d96 100644
--- a/test/tint/builtins/gen/var/max/453e04.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/max/453e04.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%max_453e04 = func():void -> %b2 {
-  %b2 = block {
+%max_453e04 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
     %arg_1:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
     %5:vec4<u32> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %max_453e04
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %max_453e04
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %max_453e04
     ret
   }
diff --git a/test/tint/builtins/gen/var/max/462050.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/max/462050.wgsl.expected.ir.msl
index 0d31575..2a0f47c 100644
--- a/test/tint/builtins/gen/var/max/462050.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/max/462050.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%max_462050 = func():void -> %b2 {
-  %b2 = block {
+%max_462050 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_1:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %5:vec2<f32> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %max_462050
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %max_462050
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %max_462050
     ret
   }
diff --git a/test/tint/builtins/gen/var/max/4883ac.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/max/4883ac.wgsl.expected.ir.msl
index 91ebf04..f46ed4c 100644
--- a/test/tint/builtins/gen/var/max/4883ac.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/max/4883ac.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%max_4883ac = func():void -> %b2 {
-  %b2 = block {
+%max_4883ac = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_1:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %5:vec3<f32> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %max_4883ac
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %max_4883ac
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %max_4883ac
     ret
   }
diff --git a/test/tint/builtins/gen/var/max/85e6bc.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/max/85e6bc.wgsl.expected.ir.msl
index 2c20d93..023b4b7 100644
--- a/test/tint/builtins/gen/var/max/85e6bc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/max/85e6bc.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%max_85e6bc = func():void -> %b2 {
-  %b2 = block {
+%max_85e6bc = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %arg_1:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %5:vec4<i32> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %max_85e6bc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %max_85e6bc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %max_85e6bc
     ret
   }
diff --git a/test/tint/builtins/gen/var/max/a93419.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/max/a93419.wgsl.expected.ir.msl
index 00788d9..8819b3a 100644
--- a/test/tint/builtins/gen/var/max/a93419.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/max/a93419.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%max_a93419 = func():void -> %b2 {
-  %b2 = block {
+%max_a93419 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %arg_1:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %5:vec4<f32> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %max_a93419
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %max_a93419
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %max_a93419
     ret
   }
diff --git a/test/tint/builtins/gen/var/max/b1b73a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/max/b1b73a.wgsl.expected.ir.msl
index e0c17dd..28f7ea7 100644
--- a/test/tint/builtins/gen/var/max/b1b73a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/max/b1b73a.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%max_b1b73a = func():void -> %b2 {
-  %b2 = block {
+%max_b1b73a = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %5:vec3<u32> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %max_b1b73a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %max_b1b73a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %max_b1b73a
     ret
   }
diff --git a/test/tint/builtins/gen/var/max/ce7c30.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/max/ce7c30.wgsl.expected.ir.msl
index 9ef1567..264afe5 100644
--- a/test/tint/builtins/gen/var/max/ce7c30.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/max/ce7c30.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%max_ce7c30 = func():void -> %b2 {
-  %b2 = block {
+%max_ce7c30 = func():void {
+  $B2: {
     %arg_0:ptr<function, i32, read_write> = var, 1i
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:i32 = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %max_ce7c30
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %max_ce7c30
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %max_ce7c30
     ret
   }
diff --git a/test/tint/builtins/gen/var/max/e14f2b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/max/e14f2b.wgsl.expected.ir.msl
index 4f4fa97..d8612f2 100644
--- a/test/tint/builtins/gen/var/max/e14f2b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/max/e14f2b.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%max_e14f2b = func():void -> %b2 {
-  %b2 = block {
+%max_e14f2b = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %arg_1:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %5:vec4<f16> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %max_e14f2b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %max_e14f2b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %max_e14f2b
     ret
   }
diff --git a/test/tint/builtins/gen/var/max/e8192f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/max/e8192f.wgsl.expected.ir.msl
index 814db98..ee228be 100644
--- a/test/tint/builtins/gen/var/max/e8192f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/max/e8192f.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%max_e8192f = func():void -> %b2 {
-  %b2 = block {
+%max_e8192f = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %5:vec2<i32> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %max_e8192f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %max_e8192f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %max_e8192f
     ret
   }
diff --git a/test/tint/builtins/gen/var/min/03c7e3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/min/03c7e3.wgsl.expected.ir.msl
index e4296e9..5688d7a 100644
--- a/test/tint/builtins/gen/var/min/03c7e3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/min/03c7e3.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%min_03c7e3 = func():void -> %b2 {
-  %b2 = block {
+%min_03c7e3 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %5:vec2<i32> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %min_03c7e3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %min_03c7e3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %min_03c7e3
     ret
   }
diff --git a/test/tint/builtins/gen/var/min/0dc614.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/min/0dc614.wgsl.expected.ir.msl
index 509af58..87bf497 100644
--- a/test/tint/builtins/gen/var/min/0dc614.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/min/0dc614.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%min_0dc614 = func():void -> %b2 {
-  %b2 = block {
+%min_0dc614 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
     %arg_1:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
     %5:vec4<u32> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %min_0dc614
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %min_0dc614
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %min_0dc614
     ret
   }
diff --git a/test/tint/builtins/gen/var/min/3941e1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/min/3941e1.wgsl.expected.ir.msl
index 77d9b27..8595f0e 100644
--- a/test/tint/builtins/gen/var/min/3941e1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/min/3941e1.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%min_3941e1 = func():void -> %b2 {
-  %b2 = block {
+%min_3941e1 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %arg_1:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %5:vec4<i32> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %min_3941e1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %min_3941e1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %min_3941e1
     ret
   }
diff --git a/test/tint/builtins/gen/var/min/46c5d3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/min/46c5d3.wgsl.expected.ir.msl
index 11a3018..9a14261 100644
--- a/test/tint/builtins/gen/var/min/46c5d3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/min/46c5d3.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%min_46c5d3 = func():void -> %b2 {
-  %b2 = block {
+%min_46c5d3 = func():void {
+  $B2: {
     %arg_0:ptr<function, u32, read_write> = var, 1u
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:u32 = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %min_46c5d3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %min_46c5d3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %min_46c5d3
     ret
   }
diff --git a/test/tint/builtins/gen/var/min/7c710a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/min/7c710a.wgsl.expected.ir.msl
index 812ce84..46ff55e 100644
--- a/test/tint/builtins/gen/var/min/7c710a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/min/7c710a.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%min_7c710a = func():void -> %b2 {
-  %b2 = block {
+%min_7c710a = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %arg_1:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %5:vec4<f16> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %min_7c710a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %min_7c710a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %min_7c710a
     ret
   }
diff --git a/test/tint/builtins/gen/var/min/82b28f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/min/82b28f.wgsl.expected.ir.msl
index 2a32fe3..ef545f0 100644
--- a/test/tint/builtins/gen/var/min/82b28f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/min/82b28f.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%min_82b28f = func():void -> %b2 {
-  %b2 = block {
+%min_82b28f = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %5:vec2<u32> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %min_82b28f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %min_82b28f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %min_82b28f
     ret
   }
diff --git a/test/tint/builtins/gen/var/min/93cfc4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/min/93cfc4.wgsl.expected.ir.msl
index 845ff16..2a9a278 100644
--- a/test/tint/builtins/gen/var/min/93cfc4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/min/93cfc4.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%min_93cfc4 = func():void -> %b2 {
-  %b2 = block {
+%min_93cfc4 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_1:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %5:vec3<f32> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %min_93cfc4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %min_93cfc4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %min_93cfc4
     ret
   }
diff --git a/test/tint/builtins/gen/var/min/a45171.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/min/a45171.wgsl.expected.ir.msl
index 1b355f8..273db93 100644
--- a/test/tint/builtins/gen/var/min/a45171.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/min/a45171.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%min_a45171 = func():void -> %b2 {
-  %b2 = block {
+%min_a45171 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %5:vec3<i32> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %min_a45171
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %min_a45171
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %min_a45171
     ret
   }
diff --git a/test/tint/builtins/gen/var/min/aa28ad.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/min/aa28ad.wgsl.expected.ir.msl
index 724806b..7f3f049 100644
--- a/test/tint/builtins/gen/var/min/aa28ad.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/min/aa28ad.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%min_aa28ad = func():void -> %b2 {
-  %b2 = block {
+%min_aa28ad = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_1:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %5:vec2<f32> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %min_aa28ad
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %min_aa28ad
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %min_aa28ad
     ret
   }
diff --git a/test/tint/builtins/gen/var/min/ab0acd.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/min/ab0acd.wgsl.expected.ir.msl
index 3813715..72b5a8d 100644
--- a/test/tint/builtins/gen/var/min/ab0acd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/min/ab0acd.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%min_ab0acd = func():void -> %b2 {
-  %b2 = block {
+%min_ab0acd = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %arg_1:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %5:vec3<f16> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %min_ab0acd
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %min_ab0acd
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %min_ab0acd
     ret
   }
diff --git a/test/tint/builtins/gen/var/min/ac84d6.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/min/ac84d6.wgsl.expected.ir.msl
index a126212..37292f0 100644
--- a/test/tint/builtins/gen/var/min/ac84d6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/min/ac84d6.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%min_ac84d6 = func():void -> %b2 {
-  %b2 = block {
+%min_ac84d6 = func():void {
+  $B2: {
     %arg_0:ptr<function, f16, read_write> = var, 1.0h
     %arg_1:ptr<function, f16, read_write> = var, 1.0h
     %5:f16 = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %min_ac84d6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %min_ac84d6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %min_ac84d6
     ret
   }
diff --git a/test/tint/builtins/gen/var/min/af326d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/min/af326d.wgsl.expected.ir.msl
index 9851de6..c505a27 100644
--- a/test/tint/builtins/gen/var/min/af326d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/min/af326d.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%min_af326d = func():void -> %b2 {
-  %b2 = block {
+%min_af326d = func():void {
+  $B2: {
     %arg_0:ptr<function, f32, read_write> = var, 1.0f
     %arg_1:ptr<function, f32, read_write> = var, 1.0f
     %5:f32 = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %min_af326d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %min_af326d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %min_af326d
     ret
   }
diff --git a/test/tint/builtins/gen/var/min/c70bb7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/min/c70bb7.wgsl.expected.ir.msl
index 62ccd48..2cf9b05 100644
--- a/test/tint/builtins/gen/var/min/c70bb7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/min/c70bb7.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%min_c70bb7 = func():void -> %b2 {
-  %b2 = block {
+%min_c70bb7 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %5:vec3<u32> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %min_c70bb7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %min_c70bb7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %min_c70bb7
     ret
   }
diff --git a/test/tint/builtins/gen/var/min/c73147.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/min/c73147.wgsl.expected.ir.msl
index 8669bf3..22d0af0 100644
--- a/test/tint/builtins/gen/var/min/c73147.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/min/c73147.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%min_c73147 = func():void -> %b2 {
-  %b2 = block {
+%min_c73147 = func():void {
+  $B2: {
     %arg_0:ptr<function, i32, read_write> = var, 1i
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:i32 = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %min_c73147
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %min_c73147
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %min_c73147
     ret
   }
diff --git a/test/tint/builtins/gen/var/min/c76fa6.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/min/c76fa6.wgsl.expected.ir.msl
index 8c8dde5..0762bef 100644
--- a/test/tint/builtins/gen/var/min/c76fa6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/min/c76fa6.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%min_c76fa6 = func():void -> %b2 {
-  %b2 = block {
+%min_c76fa6 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %arg_1:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %5:vec4<f32> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %min_c76fa6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %min_c76fa6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %min_c76fa6
     ret
   }
diff --git a/test/tint/builtins/gen/var/min/e780f9.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/min/e780f9.wgsl.expected.ir.msl
index 56a71ec..ebd0e21 100644
--- a/test/tint/builtins/gen/var/min/e780f9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/min/e780f9.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%min_e780f9 = func():void -> %b2 {
-  %b2 = block {
+%min_e780f9 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %arg_1:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %5:vec2<f16> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %min_e780f9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %min_e780f9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %min_e780f9
     ret
   }
diff --git a/test/tint/builtins/gen/var/mix/0c8c33.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/mix/0c8c33.wgsl.expected.ir.msl
index 0660144..aeb0010 100644
--- a/test/tint/builtins/gen/var/mix/0c8c33.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/mix/0c8c33.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%mix_0c8c33 = func():void -> %b2 {
-  %b2 = block {
+%mix_0c8c33 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_1:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_2:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %mix_0c8c33
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %mix_0c8c33
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %mix_0c8c33
     ret
   }
diff --git a/test/tint/builtins/gen/var/mix/1faeb1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/mix/1faeb1.wgsl.expected.ir.msl
index afce720..1b060d7 100644
--- a/test/tint/builtins/gen/var/mix/1faeb1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/mix/1faeb1.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%mix_1faeb1 = func():void -> %b2 {
-  %b2 = block {
+%mix_1faeb1 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %arg_1:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %arg_2:ptr<function, f32, read_write> = var, 1.0f
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %mix_1faeb1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %mix_1faeb1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %mix_1faeb1
     ret
   }
diff --git a/test/tint/builtins/gen/var/mix/2fadab.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/mix/2fadab.wgsl.expected.ir.msl
index eee31a2..005198c 100644
--- a/test/tint/builtins/gen/var/mix/2fadab.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/mix/2fadab.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%mix_2fadab = func():void -> %b2 {
-  %b2 = block {
+%mix_2fadab = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_1:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_2:ptr<function, f32, read_write> = var, 1.0f
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %mix_2fadab
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %mix_2fadab
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %mix_2fadab
     ret
   }
diff --git a/test/tint/builtins/gen/var/mix/315264.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/mix/315264.wgsl.expected.ir.msl
index fdd1391..39af80e 100644
--- a/test/tint/builtins/gen/var/mix/315264.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/mix/315264.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%mix_315264 = func():void -> %b2 {
-  %b2 = block {
+%mix_315264 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_1:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_2:ptr<function, f32, read_write> = var, 1.0f
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %mix_315264
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %mix_315264
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %mix_315264
     ret
   }
diff --git a/test/tint/builtins/gen/var/mix/38cbbb.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/mix/38cbbb.wgsl.expected.ir.msl
index 1b68b61..bdf101f 100644
--- a/test/tint/builtins/gen/var/mix/38cbbb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/mix/38cbbb.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%mix_38cbbb = func():void -> %b2 {
-  %b2 = block {
+%mix_38cbbb = func():void {
+  $B2: {
     %arg_0:ptr<function, f16, read_write> = var, 1.0h
     %arg_1:ptr<function, f16, read_write> = var, 1.0h
     %arg_2:ptr<function, f16, read_write> = var, 1.0h
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %mix_38cbbb
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %mix_38cbbb
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %mix_38cbbb
     ret
   }
diff --git a/test/tint/builtins/gen/var/mix/4f0b5e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/mix/4f0b5e.wgsl.expected.ir.msl
index 9cb1e9a..ec6e3e6 100644
--- a/test/tint/builtins/gen/var/mix/4f0b5e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/mix/4f0b5e.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%mix_4f0b5e = func():void -> %b2 {
-  %b2 = block {
+%mix_4f0b5e = func():void {
+  $B2: {
     %arg_0:ptr<function, f32, read_write> = var, 1.0f
     %arg_1:ptr<function, f32, read_write> = var, 1.0f
     %arg_2:ptr<function, f32, read_write> = var, 1.0f
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %mix_4f0b5e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %mix_4f0b5e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %mix_4f0b5e
     ret
   }
diff --git a/test/tint/builtins/gen/var/mix/63f2fd.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/mix/63f2fd.wgsl.expected.ir.msl
index 6338703..b79aba10 100644
--- a/test/tint/builtins/gen/var/mix/63f2fd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/mix/63f2fd.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%mix_63f2fd = func():void -> %b2 {
-  %b2 = block {
+%mix_63f2fd = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %arg_1:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %arg_2:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %mix_63f2fd
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %mix_63f2fd
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %mix_63f2fd
     ret
   }
diff --git a/test/tint/builtins/gen/var/mix/6f8adc.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/mix/6f8adc.wgsl.expected.ir.msl
index 9ecbfa8..a9484c0 100644
--- a/test/tint/builtins/gen/var/mix/6f8adc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/mix/6f8adc.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%mix_6f8adc = func():void -> %b2 {
-  %b2 = block {
+%mix_6f8adc = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_1:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %mix_6f8adc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %mix_6f8adc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %mix_6f8adc
     ret
   }
diff --git a/test/tint/builtins/gen/var/mix/98ee3e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/mix/98ee3e.wgsl.expected.ir.msl
index a4c9b9f..fa632b2 100644
--- a/test/tint/builtins/gen/var/mix/98ee3e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/mix/98ee3e.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%mix_98ee3e = func():void -> %b2 {
-  %b2 = block {
+%mix_98ee3e = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %arg_1:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %arg_2:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %mix_98ee3e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %mix_98ee3e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %mix_98ee3e
     ret
   }
diff --git a/test/tint/builtins/gen/var/mix/c1aec6.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/mix/c1aec6.wgsl.expected.ir.msl
index e6e5db3..b0ef4cf 100644
--- a/test/tint/builtins/gen/var/mix/c1aec6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/mix/c1aec6.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%mix_c1aec6 = func():void -> %b2 {
-  %b2 = block {
+%mix_c1aec6 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %arg_1:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %arg_2:ptr<function, f16, read_write> = var, 1.0h
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %mix_c1aec6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %mix_c1aec6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %mix_c1aec6
     ret
   }
diff --git a/test/tint/builtins/gen/var/mix/c37ede.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/mix/c37ede.wgsl.expected.ir.msl
index 9ab5cb3..b47d596 100644
--- a/test/tint/builtins/gen/var/mix/c37ede.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/mix/c37ede.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%mix_c37ede = func():void -> %b2 {
-  %b2 = block {
+%mix_c37ede = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %arg_1:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %mix_c37ede
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %mix_c37ede
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %mix_c37ede
     ret
   }
diff --git a/test/tint/builtins/gen/var/mix/e46a83.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/mix/e46a83.wgsl.expected.ir.msl
index 58ff410..49ae0ec 100644
--- a/test/tint/builtins/gen/var/mix/e46a83.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/mix/e46a83.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%mix_e46a83 = func():void -> %b2 {
-  %b2 = block {
+%mix_e46a83 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %arg_1:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %arg_2:ptr<function, f16, read_write> = var, 1.0h
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %mix_e46a83
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %mix_e46a83
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %mix_e46a83
     ret
   }
diff --git a/test/tint/builtins/gen/var/mix/ee2468.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/mix/ee2468.wgsl.expected.ir.msl
index ba9e9a0..a5c2ec6 100644
--- a/test/tint/builtins/gen/var/mix/ee2468.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/mix/ee2468.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%mix_ee2468 = func():void -> %b2 {
-  %b2 = block {
+%mix_ee2468 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %arg_1:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %arg_2:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %mix_ee2468
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %mix_ee2468
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %mix_ee2468
     ret
   }
diff --git a/test/tint/builtins/gen/var/mix/f1a543.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/mix/f1a543.wgsl.expected.ir.msl
index 2de3231..f239fa5 100644
--- a/test/tint/builtins/gen/var/mix/f1a543.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/mix/f1a543.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%mix_f1a543 = func():void -> %b2 {
-  %b2 = block {
+%mix_f1a543 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %arg_1:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %arg_2:ptr<function, f16, read_write> = var, 1.0h
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %mix_f1a543
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %mix_f1a543
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %mix_f1a543
     ret
   }
diff --git a/test/tint/builtins/gen/var/modf/2d50da.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/modf/2d50da.wgsl.expected.ir.msl
index 03c2230..edd7e27e 100644
--- a/test/tint/builtins/gen/var/modf/2d50da.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/modf/2d50da.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: modf
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: modf
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/modf/45005f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/modf/45005f.wgsl.expected.ir.msl
index 03c2230..edd7e27e 100644
--- a/test/tint/builtins/gen/var/modf/45005f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/modf/45005f.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: modf
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: modf
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/modf/4bfced.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/modf/4bfced.wgsl.expected.ir.msl
index 03c2230..edd7e27e 100644
--- a/test/tint/builtins/gen/var/modf/4bfced.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/modf/4bfced.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: modf
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: modf
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/modf/5ea256.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/modf/5ea256.wgsl.expected.ir.msl
index 03c2230..edd7e27e 100644
--- a/test/tint/builtins/gen/var/modf/5ea256.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/modf/5ea256.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: modf
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: modf
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/modf/8dbbbf.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/modf/8dbbbf.wgsl.expected.ir.msl
index 03c2230..edd7e27e 100644
--- a/test/tint/builtins/gen/var/modf/8dbbbf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/modf/8dbbbf.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: modf
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: modf
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/modf/995934.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/modf/995934.wgsl.expected.ir.msl
index 03c2230..edd7e27e 100644
--- a/test/tint/builtins/gen/var/modf/995934.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/modf/995934.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: modf
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: modf
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/modf/a545b9.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/modf/a545b9.wgsl.expected.ir.msl
index 03c2230..edd7e27e 100644
--- a/test/tint/builtins/gen/var/modf/a545b9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/modf/a545b9.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: modf
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: modf
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/modf/bbf7f7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/modf/bbf7f7.wgsl.expected.ir.msl
index 03c2230..edd7e27e 100644
--- a/test/tint/builtins/gen/var/modf/bbf7f7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/modf/bbf7f7.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: modf
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: modf
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/normalize/39d5ec.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/normalize/39d5ec.wgsl.expected.ir.msl
index c7322ed..96a12e7 100644
--- a/test/tint/builtins/gen/var/normalize/39d5ec.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/normalize/39d5ec.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%normalize_39d5ec = func():void -> %b2 {
-  %b2 = block {
+%normalize_39d5ec = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %4:vec3<f16> = load %arg_0
     %5:vec3<f16> = normalize %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %normalize_39d5ec
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %normalize_39d5ec
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %normalize_39d5ec
     ret
   }
diff --git a/test/tint/builtins/gen/var/normalize/64d8c0.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/normalize/64d8c0.wgsl.expected.ir.msl
index cca50e0..5032c0d 100644
--- a/test/tint/builtins/gen/var/normalize/64d8c0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/normalize/64d8c0.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%normalize_64d8c0 = func():void -> %b2 {
-  %b2 = block {
+%normalize_64d8c0 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %4:vec3<f32> = load %arg_0
     %5:vec3<f32> = normalize %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %normalize_64d8c0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %normalize_64d8c0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %normalize_64d8c0
     ret
   }
diff --git a/test/tint/builtins/gen/var/normalize/7990f3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/normalize/7990f3.wgsl.expected.ir.msl
index 850b960..9139b6a 100644
--- a/test/tint/builtins/gen/var/normalize/7990f3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/normalize/7990f3.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%normalize_7990f3 = func():void -> %b2 {
-  %b2 = block {
+%normalize_7990f3 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %4:vec2<f16> = load %arg_0
     %5:vec2<f16> = normalize %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %normalize_7990f3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %normalize_7990f3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %normalize_7990f3
     ret
   }
diff --git a/test/tint/builtins/gen/var/normalize/9a0aab.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/normalize/9a0aab.wgsl.expected.ir.msl
index 7cab235..e129cb5 100644
--- a/test/tint/builtins/gen/var/normalize/9a0aab.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/normalize/9a0aab.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%normalize_9a0aab = func():void -> %b2 {
-  %b2 = block {
+%normalize_9a0aab = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %4:vec4<f32> = load %arg_0
     %5:vec4<f32> = normalize %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %normalize_9a0aab
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %normalize_9a0aab
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %normalize_9a0aab
     ret
   }
diff --git a/test/tint/builtins/gen/var/normalize/b8cb8d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/normalize/b8cb8d.wgsl.expected.ir.msl
index 1084331..3c03f38 100644
--- a/test/tint/builtins/gen/var/normalize/b8cb8d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/normalize/b8cb8d.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%normalize_b8cb8d = func():void -> %b2 {
-  %b2 = block {
+%normalize_b8cb8d = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %4:vec4<f16> = load %arg_0
     %5:vec4<f16> = normalize %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %normalize_b8cb8d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %normalize_b8cb8d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %normalize_b8cb8d
     ret
   }
diff --git a/test/tint/builtins/gen/var/normalize/fc2ef1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/normalize/fc2ef1.wgsl.expected.ir.msl
index d204597..3b602b7 100644
--- a/test/tint/builtins/gen/var/normalize/fc2ef1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/normalize/fc2ef1.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%normalize_fc2ef1 = func():void -> %b2 {
-  %b2 = block {
+%normalize_fc2ef1 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %4:vec2<f32> = load %arg_0
     %5:vec2<f32> = normalize %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %normalize_fc2ef1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %normalize_fc2ef1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %normalize_fc2ef1
     ret
   }
diff --git a/test/tint/builtins/gen/var/pack2x16float/0e97b3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/pack2x16float/0e97b3.wgsl.expected.ir.msl
index cf4ccbc..aaa5944 100644
--- a/test/tint/builtins/gen/var/pack2x16float/0e97b3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/pack2x16float/0e97b3.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%pack2x16float_0e97b3 = func():void -> %b2 {
-  %b2 = block {
+%pack2x16float_0e97b3 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %4:vec2<f32> = load %arg_0
     %5:u32 = pack2x16float %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %pack2x16float_0e97b3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %pack2x16float_0e97b3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %pack2x16float_0e97b3
     ret
   }
diff --git a/test/tint/builtins/gen/var/pack2x16snorm/6c169b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/pack2x16snorm/6c169b.wgsl.expected.ir.msl
index bd32ca4..206b592 100644
--- a/test/tint/builtins/gen/var/pack2x16snorm/6c169b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/pack2x16snorm/6c169b.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%pack2x16snorm_6c169b = func():void -> %b2 {
-  %b2 = block {
+%pack2x16snorm_6c169b = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %4:vec2<f32> = load %arg_0
     %5:u32 = pack2x16snorm %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %pack2x16snorm_6c169b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %pack2x16snorm_6c169b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %pack2x16snorm_6c169b
     ret
   }
diff --git a/test/tint/builtins/gen/var/pack2x16unorm/0f08e4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/pack2x16unorm/0f08e4.wgsl.expected.ir.msl
index cdc07a8..59c7894 100644
--- a/test/tint/builtins/gen/var/pack2x16unorm/0f08e4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/pack2x16unorm/0f08e4.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%pack2x16unorm_0f08e4 = func():void -> %b2 {
-  %b2 = block {
+%pack2x16unorm_0f08e4 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %4:vec2<f32> = load %arg_0
     %5:u32 = pack2x16unorm %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %pack2x16unorm_0f08e4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %pack2x16unorm_0f08e4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %pack2x16unorm_0f08e4
     ret
   }
diff --git a/test/tint/builtins/gen/var/pack4x8snorm/4d22e7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/pack4x8snorm/4d22e7.wgsl.expected.ir.msl
index dfcff03..020f7f6 100644
--- a/test/tint/builtins/gen/var/pack4x8snorm/4d22e7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/pack4x8snorm/4d22e7.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%pack4x8snorm_4d22e7 = func():void -> %b2 {
-  %b2 = block {
+%pack4x8snorm_4d22e7 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %4:vec4<f32> = load %arg_0
     %5:u32 = pack4x8snorm %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %pack4x8snorm_4d22e7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %pack4x8snorm_4d22e7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %pack4x8snorm_4d22e7
     ret
   }
diff --git a/test/tint/builtins/gen/var/pack4x8unorm/95c456.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/pack4x8unorm/95c456.wgsl.expected.ir.msl
index b078e2e..cad827a 100644
--- a/test/tint/builtins/gen/var/pack4x8unorm/95c456.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/pack4x8unorm/95c456.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%pack4x8unorm_95c456 = func():void -> %b2 {
-  %b2 = block {
+%pack4x8unorm_95c456 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %4:vec4<f32> = load %arg_0
     %5:u32 = pack4x8unorm %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %pack4x8unorm_95c456
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %pack4x8unorm_95c456
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %pack4x8unorm_95c456
     ret
   }
diff --git a/test/tint/builtins/gen/var/pack4xI8/bfce01.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/pack4xI8/bfce01.wgsl.expected.ir.msl
new file mode 100644
index 0000000..6de1757
--- /dev/null
+++ b/test/tint/builtins/gen/var/pack4xI8/bfce01.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
+}
+
+%pack4xI8_bfce01 = func():void {
+  $B2: {
+    %arg_0:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
+    %4:vec4<i32> = load %arg_0
+    %5:u32 = pack4xI8 %4
+    %res:ptr<function, u32, read_write> = var, %5
+    %7:u32 = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %pack4xI8_bfce01
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %pack4xI8_bfce01
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %pack4xI8_bfce01
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/pack4xI8Clamp/e42b2a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/pack4xI8Clamp/e42b2a.wgsl.expected.ir.msl
new file mode 100644
index 0000000..09252b5
--- /dev/null
+++ b/test/tint/builtins/gen/var/pack4xI8Clamp/e42b2a.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
+}
+
+%pack4xI8Clamp_e42b2a = func():void {
+  $B2: {
+    %arg_0:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
+    %4:vec4<i32> = load %arg_0
+    %5:u32 = pack4xI8Clamp %4
+    %res:ptr<function, u32, read_write> = var, %5
+    %7:u32 = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %pack4xI8Clamp_e42b2a
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %pack4xI8Clamp_e42b2a
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %pack4xI8Clamp_e42b2a
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/pack4xU8/b70b53.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/pack4xU8/b70b53.wgsl.expected.ir.msl
new file mode 100644
index 0000000..6a8baa9
--- /dev/null
+++ b/test/tint/builtins/gen/var/pack4xU8/b70b53.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
+}
+
+%pack4xU8_b70b53 = func():void {
+  $B2: {
+    %arg_0:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
+    %4:vec4<u32> = load %arg_0
+    %5:u32 = pack4xU8 %4
+    %res:ptr<function, u32, read_write> = var, %5
+    %7:u32 = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %pack4xU8_b70b53
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %pack4xU8_b70b53
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %pack4xU8_b70b53
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/pack4xU8Clamp/6b8c1b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/pack4xU8Clamp/6b8c1b.wgsl.expected.ir.msl
new file mode 100644
index 0000000..6d1c228
--- /dev/null
+++ b/test/tint/builtins/gen/var/pack4xU8Clamp/6b8c1b.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
+}
+
+%pack4xU8Clamp_6b8c1b = func():void {
+  $B2: {
+    %arg_0:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
+    %4:vec4<u32> = load %arg_0
+    %5:u32 = pack4xU8Clamp %4
+    %res:ptr<function, u32, read_write> = var, %5
+    %7:u32 = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %pack4xU8Clamp_6b8c1b
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %pack4xU8Clamp_6b8c1b
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %pack4xU8Clamp_6b8c1b
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/pow/04a908.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/pow/04a908.wgsl.expected.ir.msl
index ce1c07c..f4fc973 100644
--- a/test/tint/builtins/gen/var/pow/04a908.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/pow/04a908.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%pow_04a908 = func():void -> %b2 {
-  %b2 = block {
+%pow_04a908 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %arg_1:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %5:vec4<f32> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %pow_04a908
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %pow_04a908
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %pow_04a908
     ret
   }
diff --git a/test/tint/builtins/gen/var/pow/46e029.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/pow/46e029.wgsl.expected.ir.msl
index 7ed90ec..217cf24 100644
--- a/test/tint/builtins/gen/var/pow/46e029.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/pow/46e029.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%pow_46e029 = func():void -> %b2 {
-  %b2 = block {
+%pow_46e029 = func():void {
+  $B2: {
     %arg_0:ptr<function, f32, read_write> = var, 1.0f
     %arg_1:ptr<function, f32, read_write> = var, 1.0f
     %5:f32 = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %pow_46e029
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %pow_46e029
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %pow_46e029
     ret
   }
diff --git a/test/tint/builtins/gen/var/pow/4a46c9.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/pow/4a46c9.wgsl.expected.ir.msl
index d7166dd..52adb59 100644
--- a/test/tint/builtins/gen/var/pow/4a46c9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/pow/4a46c9.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%pow_4a46c9 = func():void -> %b2 {
-  %b2 = block {
+%pow_4a46c9 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_1:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %5:vec3<f32> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %pow_4a46c9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %pow_4a46c9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %pow_4a46c9
     ret
   }
diff --git a/test/tint/builtins/gen/var/pow/4f33b2.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/pow/4f33b2.wgsl.expected.ir.msl
index 53eb347..0df94f1 100644
--- a/test/tint/builtins/gen/var/pow/4f33b2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/pow/4f33b2.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%pow_4f33b2 = func():void -> %b2 {
-  %b2 = block {
+%pow_4f33b2 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %arg_1:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %5:vec4<f16> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %pow_4f33b2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %pow_4f33b2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %pow_4f33b2
     ret
   }
diff --git a/test/tint/builtins/gen/var/pow/ce9ef5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/pow/ce9ef5.wgsl.expected.ir.msl
index bb1ecec..dc2a161 100644
--- a/test/tint/builtins/gen/var/pow/ce9ef5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/pow/ce9ef5.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%pow_ce9ef5 = func():void -> %b2 {
-  %b2 = block {
+%pow_ce9ef5 = func():void {
+  $B2: {
     %arg_0:ptr<function, f16, read_write> = var, 1.0h
     %arg_1:ptr<function, f16, read_write> = var, 1.0h
     %5:f16 = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %pow_ce9ef5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %pow_ce9ef5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %pow_ce9ef5
     ret
   }
diff --git a/test/tint/builtins/gen/var/pow/e60ea5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/pow/e60ea5.wgsl.expected.ir.msl
index 7682e33..d514778 100644
--- a/test/tint/builtins/gen/var/pow/e60ea5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/pow/e60ea5.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%pow_e60ea5 = func():void -> %b2 {
-  %b2 = block {
+%pow_e60ea5 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_1:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %5:vec2<f32> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %pow_e60ea5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %pow_e60ea5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %pow_e60ea5
     ret
   }
diff --git a/test/tint/builtins/gen/var/pow/f37b25.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/pow/f37b25.wgsl.expected.ir.msl
index 7f9e964..0601ac2 100644
--- a/test/tint/builtins/gen/var/pow/f37b25.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/pow/f37b25.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%pow_f37b25 = func():void -> %b2 {
-  %b2 = block {
+%pow_f37b25 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %arg_1:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %5:vec2<f16> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %pow_f37b25
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %pow_f37b25
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %pow_f37b25
     ret
   }
diff --git a/test/tint/builtins/gen/var/pow/fa5429.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/pow/fa5429.wgsl.expected.ir.msl
index 4771bbb..2a55345 100644
--- a/test/tint/builtins/gen/var/pow/fa5429.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/pow/fa5429.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%pow_fa5429 = func():void -> %b2 {
-  %b2 = block {
+%pow_fa5429 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %arg_1:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %5:vec3<f16> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %pow_fa5429
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %pow_fa5429
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %pow_fa5429
     ret
   }
diff --git a/test/tint/builtins/gen/var/quantizeToF16/12e50e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/quantizeToF16/12e50e.wgsl.expected.ir.msl
index fe83564..ec7fec1 100644
--- a/test/tint/builtins/gen/var/quantizeToF16/12e50e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/quantizeToF16/12e50e.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%quantizeToF16_12e50e = func():void -> %b2 {
-  %b2 = block {
+%quantizeToF16_12e50e = func():void {
+  $B2: {
     %arg_0:ptr<function, f32, read_write> = var, 1.0f
     %4:f32 = load %arg_0
     %5:f32 = quantizeToF16 %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %quantizeToF16_12e50e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %quantizeToF16_12e50e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %quantizeToF16_12e50e
     ret
   }
diff --git a/test/tint/builtins/gen/var/quantizeToF16/2cddf3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/quantizeToF16/2cddf3.wgsl.expected.ir.msl
index f6a6225..97979d6 100644
--- a/test/tint/builtins/gen/var/quantizeToF16/2cddf3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/quantizeToF16/2cddf3.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%quantizeToF16_2cddf3 = func():void -> %b2 {
-  %b2 = block {
+%quantizeToF16_2cddf3 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %4:vec2<f32> = load %arg_0
     %5:vec2<f32> = quantizeToF16 %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %quantizeToF16_2cddf3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %quantizeToF16_2cddf3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %quantizeToF16_2cddf3
     ret
   }
diff --git a/test/tint/builtins/gen/var/quantizeToF16/cba294.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/quantizeToF16/cba294.wgsl.expected.ir.msl
index a7f3219..f4fe649 100644
--- a/test/tint/builtins/gen/var/quantizeToF16/cba294.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/quantizeToF16/cba294.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%quantizeToF16_cba294 = func():void -> %b2 {
-  %b2 = block {
+%quantizeToF16_cba294 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %4:vec4<f32> = load %arg_0
     %5:vec4<f32> = quantizeToF16 %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %quantizeToF16_cba294
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %quantizeToF16_cba294
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %quantizeToF16_cba294
     ret
   }
diff --git a/test/tint/builtins/gen/var/quantizeToF16/e8fd14.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/quantizeToF16/e8fd14.wgsl.expected.ir.msl
index 81aecc1..1e11ec8 100644
--- a/test/tint/builtins/gen/var/quantizeToF16/e8fd14.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/quantizeToF16/e8fd14.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%quantizeToF16_e8fd14 = func():void -> %b2 {
-  %b2 = block {
+%quantizeToF16_e8fd14 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %4:vec3<f32> = load %arg_0
     %5:vec3<f32> = quantizeToF16 %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %quantizeToF16_e8fd14
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %quantizeToF16_e8fd14
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %quantizeToF16_e8fd14
     ret
   }
diff --git a/test/tint/builtins/gen/var/radians/09b7fc.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/radians/09b7fc.wgsl.expected.ir.msl
index 6dd9efe..1b0ccd9 100644
--- a/test/tint/builtins/gen/var/radians/09b7fc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/radians/09b7fc.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%radians_09b7fc = func():void -> %b2 {
-  %b2 = block {
+%radians_09b7fc = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %4:vec4<f32> = load %arg_0
     %5:vec4<f32> = radians %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %radians_09b7fc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %radians_09b7fc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %radians_09b7fc
     ret
   }
diff --git a/test/tint/builtins/gen/var/radians/208fd9.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/radians/208fd9.wgsl.expected.ir.msl
index 8313df0..5d51491 100644
--- a/test/tint/builtins/gen/var/radians/208fd9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/radians/208fd9.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%radians_208fd9 = func():void -> %b2 {
-  %b2 = block {
+%radians_208fd9 = func():void {
+  $B2: {
     %arg_0:ptr<function, f16, read_write> = var, 1.0h
     %4:f16 = load %arg_0
     %5:f16 = radians %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %radians_208fd9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %radians_208fd9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %radians_208fd9
     ret
   }
diff --git a/test/tint/builtins/gen/var/radians/44f20b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/radians/44f20b.wgsl.expected.ir.msl
index bf6e1c2..0d55368 100644
--- a/test/tint/builtins/gen/var/radians/44f20b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/radians/44f20b.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%radians_44f20b = func():void -> %b2 {
-  %b2 = block {
+%radians_44f20b = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %4:vec4<f16> = load %arg_0
     %5:vec4<f16> = radians %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %radians_44f20b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %radians_44f20b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %radians_44f20b
     ret
   }
diff --git a/test/tint/builtins/gen/var/radians/61687a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/radians/61687a.wgsl.expected.ir.msl
index b49809e..caa2be9 100644
--- a/test/tint/builtins/gen/var/radians/61687a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/radians/61687a.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%radians_61687a = func():void -> %b2 {
-  %b2 = block {
+%radians_61687a = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %4:vec2<f32> = load %arg_0
     %5:vec2<f32> = radians %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %radians_61687a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %radians_61687a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %radians_61687a
     ret
   }
diff --git a/test/tint/builtins/gen/var/radians/6b0ff2.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/radians/6b0ff2.wgsl.expected.ir.msl
index ec03f97..ea20885 100644
--- a/test/tint/builtins/gen/var/radians/6b0ff2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/radians/6b0ff2.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%radians_6b0ff2 = func():void -> %b2 {
-  %b2 = block {
+%radians_6b0ff2 = func():void {
+  $B2: {
     %arg_0:ptr<function, f32, read_write> = var, 1.0f
     %4:f32 = load %arg_0
     %5:f32 = radians %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %radians_6b0ff2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %radians_6b0ff2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %radians_6b0ff2
     ret
   }
diff --git a/test/tint/builtins/gen/var/radians/7ea4c7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/radians/7ea4c7.wgsl.expected.ir.msl
index 426a218..5f9034c 100644
--- a/test/tint/builtins/gen/var/radians/7ea4c7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/radians/7ea4c7.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%radians_7ea4c7 = func():void -> %b2 {
-  %b2 = block {
+%radians_7ea4c7 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %4:vec3<f16> = load %arg_0
     %5:vec3<f16> = radians %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %radians_7ea4c7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %radians_7ea4c7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %radians_7ea4c7
     ret
   }
diff --git a/test/tint/builtins/gen/var/radians/f96258.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/radians/f96258.wgsl.expected.ir.msl
index d508c60..d0772e5 100644
--- a/test/tint/builtins/gen/var/radians/f96258.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/radians/f96258.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%radians_f96258 = func():void -> %b2 {
-  %b2 = block {
+%radians_f96258 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %4:vec3<f32> = load %arg_0
     %5:vec3<f32> = radians %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %radians_f96258
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %radians_f96258
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %radians_f96258
     ret
   }
diff --git a/test/tint/builtins/gen/var/radians/fbacf0.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/radians/fbacf0.wgsl.expected.ir.msl
index a29e934..f5ae88a 100644
--- a/test/tint/builtins/gen/var/radians/fbacf0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/radians/fbacf0.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%radians_fbacf0 = func():void -> %b2 {
-  %b2 = block {
+%radians_fbacf0 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %4:vec2<f16> = load %arg_0
     %5:vec2<f16> = radians %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %radians_fbacf0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %radians_fbacf0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %radians_fbacf0
     ret
   }
diff --git a/test/tint/builtins/gen/var/reflect/05357e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/reflect/05357e.wgsl.expected.ir.msl
index e138133..75689f3 100644
--- a/test/tint/builtins/gen/var/reflect/05357e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/reflect/05357e.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%reflect_05357e = func():void -> %b2 {
-  %b2 = block {
+%reflect_05357e = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %arg_1:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %5:vec4<f32> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %reflect_05357e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %reflect_05357e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %reflect_05357e
     ret
   }
diff --git a/test/tint/builtins/gen/var/reflect/310de5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/reflect/310de5.wgsl.expected.ir.msl
index 91a10d5..c27379c 100644
--- a/test/tint/builtins/gen/var/reflect/310de5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/reflect/310de5.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%reflect_310de5 = func():void -> %b2 {
-  %b2 = block {
+%reflect_310de5 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %arg_1:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %5:vec4<f16> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %reflect_310de5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %reflect_310de5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %reflect_310de5
     ret
   }
diff --git a/test/tint/builtins/gen/var/reflect/61ca21.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/reflect/61ca21.wgsl.expected.ir.msl
index 0f8ffd5..4fdf6f1 100644
--- a/test/tint/builtins/gen/var/reflect/61ca21.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/reflect/61ca21.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%reflect_61ca21 = func():void -> %b2 {
-  %b2 = block {
+%reflect_61ca21 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %arg_1:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %5:vec3<f16> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %reflect_61ca21
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %reflect_61ca21
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %reflect_61ca21
     ret
   }
diff --git a/test/tint/builtins/gen/var/reflect/b61e10.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/reflect/b61e10.wgsl.expected.ir.msl
index db8d31d..d5d1cc9 100644
--- a/test/tint/builtins/gen/var/reflect/b61e10.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/reflect/b61e10.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%reflect_b61e10 = func():void -> %b2 {
-  %b2 = block {
+%reflect_b61e10 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_1:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %5:vec2<f32> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %reflect_b61e10
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %reflect_b61e10
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %reflect_b61e10
     ret
   }
diff --git a/test/tint/builtins/gen/var/reflect/bb15ac.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/reflect/bb15ac.wgsl.expected.ir.msl
index 41ea2d2..bcfce1d 100644
--- a/test/tint/builtins/gen/var/reflect/bb15ac.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/reflect/bb15ac.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%reflect_bb15ac = func():void -> %b2 {
-  %b2 = block {
+%reflect_bb15ac = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %arg_1:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %5:vec2<f16> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %reflect_bb15ac
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %reflect_bb15ac
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %reflect_bb15ac
     ret
   }
diff --git a/test/tint/builtins/gen/var/reflect/f47fdb.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/reflect/f47fdb.wgsl.expected.ir.msl
index 04dcd4d..35a6fc8 100644
--- a/test/tint/builtins/gen/var/reflect/f47fdb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/reflect/f47fdb.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%reflect_f47fdb = func():void -> %b2 {
-  %b2 = block {
+%reflect_f47fdb = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_1:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %5:vec3<f32> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %reflect_f47fdb
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %reflect_f47fdb
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %reflect_f47fdb
     ret
   }
diff --git a/test/tint/builtins/gen/var/refract/0594ba.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/refract/0594ba.wgsl.expected.ir.msl
index 2de59b5..c76effc 100644
--- a/test/tint/builtins/gen/var/refract/0594ba.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/refract/0594ba.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%refract_0594ba = func():void -> %b2 {
-  %b2 = block {
+%refract_0594ba = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %arg_1:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %arg_2:ptr<function, f16, read_write> = var, 1.0h
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %refract_0594ba
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %refract_0594ba
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %refract_0594ba
     ret
   }
diff --git a/test/tint/builtins/gen/var/refract/570cb3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/refract/570cb3.wgsl.expected.ir.msl
index 2b7dcaa..5cfbc2e 100644
--- a/test/tint/builtins/gen/var/refract/570cb3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/refract/570cb3.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%refract_570cb3 = func():void -> %b2 {
-  %b2 = block {
+%refract_570cb3 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %arg_1:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %arg_2:ptr<function, f16, read_write> = var, 1.0h
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %refract_570cb3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %refract_570cb3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %refract_570cb3
     ret
   }
diff --git a/test/tint/builtins/gen/var/refract/7e02e6.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/refract/7e02e6.wgsl.expected.ir.msl
index b0a172a..8b366c9 100644
--- a/test/tint/builtins/gen/var/refract/7e02e6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/refract/7e02e6.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%refract_7e02e6 = func():void -> %b2 {
-  %b2 = block {
+%refract_7e02e6 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %arg_1:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %arg_2:ptr<function, f32, read_write> = var, 1.0f
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %refract_7e02e6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %refract_7e02e6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %refract_7e02e6
     ret
   }
diff --git a/test/tint/builtins/gen/var/refract/8984af.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/refract/8984af.wgsl.expected.ir.msl
index 04b492c..3f22a37 100644
--- a/test/tint/builtins/gen/var/refract/8984af.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/refract/8984af.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%refract_8984af = func():void -> %b2 {
-  %b2 = block {
+%refract_8984af = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %arg_1:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %arg_2:ptr<function, f16, read_write> = var, 1.0h
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %refract_8984af
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %refract_8984af
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %refract_8984af
     ret
   }
diff --git a/test/tint/builtins/gen/var/refract/cbc1d2.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/refract/cbc1d2.wgsl.expected.ir.msl
index c034470..f862ccd 100644
--- a/test/tint/builtins/gen/var/refract/cbc1d2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/refract/cbc1d2.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%refract_cbc1d2 = func():void -> %b2 {
-  %b2 = block {
+%refract_cbc1d2 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_1:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_2:ptr<function, f32, read_write> = var, 1.0f
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %refract_cbc1d2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %refract_cbc1d2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %refract_cbc1d2
     ret
   }
diff --git a/test/tint/builtins/gen/var/refract/cd905f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/refract/cd905f.wgsl.expected.ir.msl
index 3d63be8..fbaa36b 100644
--- a/test/tint/builtins/gen/var/refract/cd905f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/refract/cd905f.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%refract_cd905f = func():void -> %b2 {
-  %b2 = block {
+%refract_cd905f = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_1:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_2:ptr<function, f32, read_write> = var, 1.0f
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %refract_cd905f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %refract_cd905f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %refract_cd905f
     ret
   }
diff --git a/test/tint/builtins/gen/var/reverseBits/222177.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/reverseBits/222177.wgsl.expected.ir.msl
index 7581b9c..9d12e5a 100644
--- a/test/tint/builtins/gen/var/reverseBits/222177.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/reverseBits/222177.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%reverseBits_222177 = func():void -> %b2 {
-  %b2 = block {
+%reverseBits_222177 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %4:vec2<i32> = load %arg_0
     %5:vec2<i32> = reverseBits %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %reverseBits_222177
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %reverseBits_222177
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %reverseBits_222177
     ret
   }
diff --git a/test/tint/builtins/gen/var/reverseBits/35fea9.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/reverseBits/35fea9.wgsl.expected.ir.msl
index 66c1f8f..18ac66b 100644
--- a/test/tint/builtins/gen/var/reverseBits/35fea9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/reverseBits/35fea9.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%reverseBits_35fea9 = func():void -> %b2 {
-  %b2 = block {
+%reverseBits_35fea9 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
     %4:vec4<u32> = load %arg_0
     %5:vec4<u32> = reverseBits %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %reverseBits_35fea9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %reverseBits_35fea9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %reverseBits_35fea9
     ret
   }
diff --git a/test/tint/builtins/gen/var/reverseBits/4dbd6f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/reverseBits/4dbd6f.wgsl.expected.ir.msl
index 49b9ad4..4fdc773 100644
--- a/test/tint/builtins/gen/var/reverseBits/4dbd6f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/reverseBits/4dbd6f.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%reverseBits_4dbd6f = func():void -> %b2 {
-  %b2 = block {
+%reverseBits_4dbd6f = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %4:vec4<i32> = load %arg_0
     %5:vec4<i32> = reverseBits %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %reverseBits_4dbd6f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %reverseBits_4dbd6f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %reverseBits_4dbd6f
     ret
   }
diff --git a/test/tint/builtins/gen/var/reverseBits/7c4269.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/reverseBits/7c4269.wgsl.expected.ir.msl
index 35c89e1..cecca3a 100644
--- a/test/tint/builtins/gen/var/reverseBits/7c4269.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/reverseBits/7c4269.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%reverseBits_7c4269 = func():void -> %b2 {
-  %b2 = block {
+%reverseBits_7c4269 = func():void {
+  $B2: {
     %arg_0:ptr<function, i32, read_write> = var, 1i
     %4:i32 = load %arg_0
     %5:i32 = reverseBits %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %reverseBits_7c4269
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %reverseBits_7c4269
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %reverseBits_7c4269
     ret
   }
diff --git a/test/tint/builtins/gen/var/reverseBits/a6ccd4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/reverseBits/a6ccd4.wgsl.expected.ir.msl
index d96a075..2cd63ee 100644
--- a/test/tint/builtins/gen/var/reverseBits/a6ccd4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/reverseBits/a6ccd4.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%reverseBits_a6ccd4 = func():void -> %b2 {
-  %b2 = block {
+%reverseBits_a6ccd4 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %4:vec3<u32> = load %arg_0
     %5:vec3<u32> = reverseBits %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %reverseBits_a6ccd4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %reverseBits_a6ccd4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %reverseBits_a6ccd4
     ret
   }
diff --git a/test/tint/builtins/gen/var/reverseBits/c21bc1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/reverseBits/c21bc1.wgsl.expected.ir.msl
index 39175dd..e15dc81 100644
--- a/test/tint/builtins/gen/var/reverseBits/c21bc1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/reverseBits/c21bc1.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%reverseBits_c21bc1 = func():void -> %b2 {
-  %b2 = block {
+%reverseBits_c21bc1 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %4:vec3<i32> = load %arg_0
     %5:vec3<i32> = reverseBits %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %reverseBits_c21bc1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %reverseBits_c21bc1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %reverseBits_c21bc1
     ret
   }
diff --git a/test/tint/builtins/gen/var/reverseBits/e1f4c1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/reverseBits/e1f4c1.wgsl.expected.ir.msl
index 9c4cd96..e93ffff 100644
--- a/test/tint/builtins/gen/var/reverseBits/e1f4c1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/reverseBits/e1f4c1.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%reverseBits_e1f4c1 = func():void -> %b2 {
-  %b2 = block {
+%reverseBits_e1f4c1 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %4:vec2<u32> = load %arg_0
     %5:vec2<u32> = reverseBits %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %reverseBits_e1f4c1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %reverseBits_e1f4c1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %reverseBits_e1f4c1
     ret
   }
diff --git a/test/tint/builtins/gen/var/reverseBits/e31adf.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/reverseBits/e31adf.wgsl.expected.ir.msl
index 05ed830..85718ee 100644
--- a/test/tint/builtins/gen/var/reverseBits/e31adf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/reverseBits/e31adf.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%reverseBits_e31adf = func():void -> %b2 {
-  %b2 = block {
+%reverseBits_e31adf = func():void {
+  $B2: {
     %arg_0:ptr<function, u32, read_write> = var, 1u
     %4:u32 = load %arg_0
     %5:u32 = reverseBits %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %reverseBits_e31adf
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %reverseBits_e31adf
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %reverseBits_e31adf
     ret
   }
diff --git a/test/tint/builtins/gen/var/round/106c0b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/round/106c0b.wgsl.expected.ir.msl
index 9ee1cce..dcf1d25 100644
--- a/test/tint/builtins/gen/var/round/106c0b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/round/106c0b.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%round_106c0b = func():void -> %b2 {
-  %b2 = block {
+%round_106c0b = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(3.5f)
     %4:vec4<f32> = load %arg_0
     %5:vec4<f32> = round %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %round_106c0b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %round_106c0b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %round_106c0b
     ret
   }
diff --git a/test/tint/builtins/gen/var/round/1c7897.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/round/1c7897.wgsl.expected.ir.msl
index dd4f2ee..2dbfd2e 100644
--- a/test/tint/builtins/gen/var/round/1c7897.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/round/1c7897.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%round_1c7897 = func():void -> %b2 {
-  %b2 = block {
+%round_1c7897 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(3.5f)
     %4:vec3<f32> = load %arg_0
     %5:vec3<f32> = round %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %round_1c7897
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %round_1c7897
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %round_1c7897
     ret
   }
diff --git a/test/tint/builtins/gen/var/round/52c84d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/round/52c84d.wgsl.expected.ir.msl
index b130df5..999ee07 100644
--- a/test/tint/builtins/gen/var/round/52c84d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/round/52c84d.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%round_52c84d = func():void -> %b2 {
-  %b2 = block {
+%round_52c84d = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(3.5f)
     %4:vec2<f32> = load %arg_0
     %5:vec2<f32> = round %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %round_52c84d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %round_52c84d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %round_52c84d
     ret
   }
diff --git a/test/tint/builtins/gen/var/round/9078ef.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/round/9078ef.wgsl.expected.ir.msl
index 67be028..3930685 100644
--- a/test/tint/builtins/gen/var/round/9078ef.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/round/9078ef.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%round_9078ef = func():void -> %b2 {
-  %b2 = block {
+%round_9078ef = func():void {
+  $B2: {
     %arg_0:ptr<function, f16, read_write> = var, 3.5h
     %4:f16 = load %arg_0
     %5:f16 = round %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %round_9078ef
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %round_9078ef
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %round_9078ef
     ret
   }
diff --git a/test/tint/builtins/gen/var/round/9edc38.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/round/9edc38.wgsl.expected.ir.msl
index 91d5bcc..aa7db0c 100644
--- a/test/tint/builtins/gen/var/round/9edc38.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/round/9edc38.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%round_9edc38 = func():void -> %b2 {
-  %b2 = block {
+%round_9edc38 = func():void {
+  $B2: {
     %arg_0:ptr<function, f32, read_write> = var, 3.5f
     %4:f32 = load %arg_0
     %5:f32 = round %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %round_9edc38
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %round_9edc38
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %round_9edc38
     ret
   }
diff --git a/test/tint/builtins/gen/var/round/d87e84.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/round/d87e84.wgsl.expected.ir.msl
index 92e89f9..797c05f 100644
--- a/test/tint/builtins/gen/var/round/d87e84.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/round/d87e84.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%round_d87e84 = func():void -> %b2 {
-  %b2 = block {
+%round_d87e84 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(3.5h)
     %4:vec2<f16> = load %arg_0
     %5:vec2<f16> = round %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %round_d87e84
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %round_d87e84
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %round_d87e84
     ret
   }
diff --git a/test/tint/builtins/gen/var/round/e1bba2.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/round/e1bba2.wgsl.expected.ir.msl
index 3ae93e9..a5c7b1b 100644
--- a/test/tint/builtins/gen/var/round/e1bba2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/round/e1bba2.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%round_e1bba2 = func():void -> %b2 {
-  %b2 = block {
+%round_e1bba2 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(3.5h)
     %4:vec3<f16> = load %arg_0
     %5:vec3<f16> = round %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %round_e1bba2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %round_e1bba2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %round_e1bba2
     ret
   }
diff --git a/test/tint/builtins/gen/var/round/f665b5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/round/f665b5.wgsl.expected.ir.msl
index bd7c77a..fa30809 100644
--- a/test/tint/builtins/gen/var/round/f665b5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/round/f665b5.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%round_f665b5 = func():void -> %b2 {
-  %b2 = block {
+%round_f665b5 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(3.5h)
     %4:vec4<f16> = load %arg_0
     %5:vec4<f16> = round %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %round_f665b5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %round_f665b5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %round_f665b5
     ret
   }
diff --git a/test/tint/builtins/gen/var/saturate/270da5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/saturate/270da5.wgsl.expected.ir.msl
index ea06738..e6e7a19 100644
--- a/test/tint/builtins/gen/var/saturate/270da5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/saturate/270da5.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%saturate_270da5 = func():void -> %b2 {
-  %b2 = block {
+%saturate_270da5 = func():void {
+  $B2: {
     %arg_0:ptr<function, f32, read_write> = var, 2.0f
     %4:f32 = load %arg_0
     %5:f32 = saturate %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %saturate_270da5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %saturate_270da5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %saturate_270da5
     ret
   }
diff --git a/test/tint/builtins/gen/var/saturate/462535.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/saturate/462535.wgsl.expected.ir.msl
index 40c633e..5d87372 100644
--- a/test/tint/builtins/gen/var/saturate/462535.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/saturate/462535.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%saturate_462535 = func():void -> %b2 {
-  %b2 = block {
+%saturate_462535 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(2.0h)
     %4:vec3<f16> = load %arg_0
     %5:vec3<f16> = saturate %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %saturate_462535
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %saturate_462535
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %saturate_462535
     ret
   }
diff --git a/test/tint/builtins/gen/var/saturate/51567f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/saturate/51567f.wgsl.expected.ir.msl
index f666a7c..635b753 100644
--- a/test/tint/builtins/gen/var/saturate/51567f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/saturate/51567f.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%saturate_51567f = func():void -> %b2 {
-  %b2 = block {
+%saturate_51567f = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(2.0f)
     %4:vec2<f32> = load %arg_0
     %5:vec2<f32> = saturate %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %saturate_51567f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %saturate_51567f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %saturate_51567f
     ret
   }
diff --git a/test/tint/builtins/gen/var/saturate/6bcddf.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/saturate/6bcddf.wgsl.expected.ir.msl
index ee8d1d5..3d9cbe0 100644
--- a/test/tint/builtins/gen/var/saturate/6bcddf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/saturate/6bcddf.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%saturate_6bcddf = func():void -> %b2 {
-  %b2 = block {
+%saturate_6bcddf = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(2.0f)
     %4:vec3<f32> = load %arg_0
     %5:vec3<f32> = saturate %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %saturate_6bcddf
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %saturate_6bcddf
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %saturate_6bcddf
     ret
   }
diff --git a/test/tint/builtins/gen/var/saturate/a5b571.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/saturate/a5b571.wgsl.expected.ir.msl
index e21b738..df4f811 100644
--- a/test/tint/builtins/gen/var/saturate/a5b571.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/saturate/a5b571.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%saturate_a5b571 = func():void -> %b2 {
-  %b2 = block {
+%saturate_a5b571 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(2.0f)
     %4:vec4<f32> = load %arg_0
     %5:vec4<f32> = saturate %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %saturate_a5b571
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %saturate_a5b571
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %saturate_a5b571
     ret
   }
diff --git a/test/tint/builtins/gen/var/saturate/cd2028.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/saturate/cd2028.wgsl.expected.ir.msl
index 5f6f7dc..e1ce087 100644
--- a/test/tint/builtins/gen/var/saturate/cd2028.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/saturate/cd2028.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%saturate_cd2028 = func():void -> %b2 {
-  %b2 = block {
+%saturate_cd2028 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(2.0h)
     %4:vec2<f16> = load %arg_0
     %5:vec2<f16> = saturate %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %saturate_cd2028
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %saturate_cd2028
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %saturate_cd2028
     ret
   }
diff --git a/test/tint/builtins/gen/var/saturate/dcde71.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/saturate/dcde71.wgsl.expected.ir.msl
index ae69e93..cfef079 100644
--- a/test/tint/builtins/gen/var/saturate/dcde71.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/saturate/dcde71.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%saturate_dcde71 = func():void -> %b2 {
-  %b2 = block {
+%saturate_dcde71 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(2.0h)
     %4:vec4<f16> = load %arg_0
     %5:vec4<f16> = saturate %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %saturate_dcde71
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %saturate_dcde71
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %saturate_dcde71
     ret
   }
diff --git a/test/tint/builtins/gen/var/saturate/e8df56.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/saturate/e8df56.wgsl.expected.ir.msl
index 5d84d1a..7e1cc52 100644
--- a/test/tint/builtins/gen/var/saturate/e8df56.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/saturate/e8df56.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%saturate_e8df56 = func():void -> %b2 {
-  %b2 = block {
+%saturate_e8df56 = func():void {
+  $B2: {
     %arg_0:ptr<function, f16, read_write> = var, 2.0h
     %4:f16 = load %arg_0
     %5:f16 = saturate %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %saturate_e8df56
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %saturate_e8df56
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %saturate_e8df56
     ret
   }
diff --git a/test/tint/builtins/gen/var/select/00b848.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/select/00b848.wgsl.expected.ir.msl
index 226777b..473c1b7 100644
--- a/test/tint/builtins/gen/var/select/00b848.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/select/00b848.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%select_00b848 = func():void -> %b2 {
-  %b2 = block {
+%select_00b848 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, vec2<bool>, read_write> = var, vec2<bool>(true)
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %select_00b848
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %select_00b848
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %select_00b848
     ret
   }
diff --git a/test/tint/builtins/gen/var/select/01e2cd.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/select/01e2cd.wgsl.expected.ir.msl
index da68814..5f4508c 100644
--- a/test/tint/builtins/gen/var/select/01e2cd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/select/01e2cd.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%select_01e2cd = func():void -> %b2 {
-  %b2 = block {
+%select_01e2cd = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %arg_2:ptr<function, vec3<bool>, read_write> = var, vec3<bool>(true)
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %select_01e2cd
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %select_01e2cd
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %select_01e2cd
     ret
   }
diff --git a/test/tint/builtins/gen/var/select/087ea4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/select/087ea4.wgsl.expected.ir.msl
index 33e3c94..ca45189 100644
--- a/test/tint/builtins/gen/var/select/087ea4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/select/087ea4.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%select_087ea4 = func():void -> %b2 {
-  %b2 = block {
+%select_087ea4 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
     %arg_1:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
     %arg_2:ptr<function, bool, read_write> = var, true
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %select_087ea4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %select_087ea4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %select_087ea4
     ret
   }
diff --git a/test/tint/builtins/gen/var/select/10e73b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/select/10e73b.wgsl.expected.ir.msl
index fcf5607..e478b41 100644
--- a/test/tint/builtins/gen/var/select/10e73b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/select/10e73b.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%select_10e73b = func():void -> %b2 {
-  %b2 = block {
+%select_10e73b = func():void {
+  $B2: {
     %arg_0:ptr<function, f16, read_write> = var, 1.0h
     %arg_1:ptr<function, f16, read_write> = var, 1.0h
     %arg_2:ptr<function, bool, read_write> = var, true
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %select_10e73b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %select_10e73b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %select_10e73b
     ret
   }
diff --git a/test/tint/builtins/gen/var/select/1ada2a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/select/1ada2a.wgsl.expected.ir.msl
index 6efaac5..2c8e6c7 100644
--- a/test/tint/builtins/gen/var/select/1ada2a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/select/1ada2a.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%select_1ada2a = func():void -> %b2 {
-  %b2 = block {
+%select_1ada2a = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %arg_1:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %arg_2:ptr<function, bool, read_write> = var, true
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %select_1ada2a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %select_1ada2a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %select_1ada2a
     ret
   }
diff --git a/test/tint/builtins/gen/var/select/1e960b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/select/1e960b.wgsl.expected.ir.msl
index 0ea7f75..ac6c03d 100644
--- a/test/tint/builtins/gen/var/select/1e960b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/select/1e960b.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%select_1e960b = func():void -> %b2 {
-  %b2 = block {
+%select_1e960b = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, vec2<bool>, read_write> = var, vec2<bool>(true)
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %select_1e960b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %select_1e960b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %select_1e960b
     ret
   }
diff --git a/test/tint/builtins/gen/var/select/266aff.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/select/266aff.wgsl.expected.ir.msl
index a6dc72a..c8a0441 100644
--- a/test/tint/builtins/gen/var/select/266aff.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/select/266aff.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%select_266aff = func():void -> %b2 {
-  %b2 = block {
+%select_266aff = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_1:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_2:ptr<function, vec2<bool>, read_write> = var, vec2<bool>(true)
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %select_266aff
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %select_266aff
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %select_266aff
     ret
   }
diff --git a/test/tint/builtins/gen/var/select/28a27e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/select/28a27e.wgsl.expected.ir.msl
index fcd2b5e..26f4b6a 100644
--- a/test/tint/builtins/gen/var/select/28a27e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/select/28a27e.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%select_28a27e = func():void -> %b2 {
-  %b2 = block {
+%select_28a27e = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %arg_2:ptr<function, vec3<bool>, read_write> = var, vec3<bool>(true)
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %select_28a27e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %select_28a27e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %select_28a27e
     ret
   }
diff --git a/test/tint/builtins/gen/var/select/3c25ce.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/select/3c25ce.wgsl.expected.ir.msl
index dc881ba..a0eef48 100644
--- a/test/tint/builtins/gen/var/select/3c25ce.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/select/3c25ce.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%select_3c25ce = func():void -> %b2 {
-  %b2 = block {
+%select_3c25ce = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<bool>, read_write> = var, vec3<bool>(true)
     %arg_1:ptr<function, vec3<bool>, read_write> = var, vec3<bool>(true)
     %arg_2:ptr<function, bool, read_write> = var, true
@@ -22,20 +22,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %16:void = call %select_3c25ce
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %18:void = call %select_3c25ce
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %20:void = call %select_3c25ce
     ret
   }
diff --git a/test/tint/builtins/gen/var/select/416e14.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/select/416e14.wgsl.expected.ir.msl
index 78777a6..e008134 100644
--- a/test/tint/builtins/gen/var/select/416e14.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/select/416e14.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%select_416e14 = func():void -> %b2 {
-  %b2 = block {
+%select_416e14 = func():void {
+  $B2: {
     %arg_0:ptr<function, f32, read_write> = var, 1.0f
     %arg_1:ptr<function, f32, read_write> = var, 1.0f
     %arg_2:ptr<function, bool, read_write> = var, true
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %select_416e14
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %select_416e14
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %select_416e14
     ret
   }
diff --git a/test/tint/builtins/gen/var/select/51b047.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/select/51b047.wgsl.expected.ir.msl
index f427605..d5f0315 100644
--- a/test/tint/builtins/gen/var/select/51b047.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/select/51b047.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%select_51b047 = func():void -> %b2 {
-  %b2 = block {
+%select_51b047 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, bool, read_write> = var, true
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %select_51b047
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %select_51b047
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %select_51b047
     ret
   }
diff --git a/test/tint/builtins/gen/var/select/53d518.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/select/53d518.wgsl.expected.ir.msl
index bc27cff..4f80447 100644
--- a/test/tint/builtins/gen/var/select/53d518.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/select/53d518.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%select_53d518 = func():void -> %b2 {
-  %b2 = block {
+%select_53d518 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %arg_1:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %arg_2:ptr<function, vec3<bool>, read_write> = var, vec3<bool>(true)
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %select_53d518
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %select_53d518
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %select_53d518
     ret
   }
diff --git a/test/tint/builtins/gen/var/select/713567.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/select/713567.wgsl.expected.ir.msl
index 569c43a..2b27364 100644
--- a/test/tint/builtins/gen/var/select/713567.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/select/713567.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%select_713567 = func():void -> %b2 {
-  %b2 = block {
+%select_713567 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %arg_1:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %arg_2:ptr<function, bool, read_write> = var, true
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %select_713567
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %select_713567
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %select_713567
     ret
   }
diff --git a/test/tint/builtins/gen/var/select/78be5f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/select/78be5f.wgsl.expected.ir.msl
index 5b63a4a..2088f2ef 100644
--- a/test/tint/builtins/gen/var/select/78be5f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/select/78be5f.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%select_78be5f = func():void -> %b2 {
-  %b2 = block {
+%select_78be5f = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_1:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_2:ptr<function, bool, read_write> = var, true
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %select_78be5f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %select_78be5f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %select_78be5f
     ret
   }
diff --git a/test/tint/builtins/gen/var/select/80a9a9.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/select/80a9a9.wgsl.expected.ir.msl
index 7a46890..6fd3737 100644
--- a/test/tint/builtins/gen/var/select/80a9a9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/select/80a9a9.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%select_80a9a9 = func():void -> %b2 {
-  %b2 = block {
+%select_80a9a9 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<bool>, read_write> = var, vec3<bool>(true)
     %arg_1:ptr<function, vec3<bool>, read_write> = var, vec3<bool>(true)
     %arg_2:ptr<function, vec3<bool>, read_write> = var, vec3<bool>(true)
@@ -22,20 +22,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %16:void = call %select_80a9a9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %18:void = call %select_80a9a9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %20:void = call %select_80a9a9
     ret
   }
diff --git a/test/tint/builtins/gen/var/select/830dd9.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/select/830dd9.wgsl.expected.ir.msl
index 96e7f68..527ef6a 100644
--- a/test/tint/builtins/gen/var/select/830dd9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/select/830dd9.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%select_830dd9 = func():void -> %b2 {
-  %b2 = block {
+%select_830dd9 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %arg_1:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %arg_2:ptr<function, bool, read_write> = var, true
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %select_830dd9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %select_830dd9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %select_830dd9
     ret
   }
diff --git a/test/tint/builtins/gen/var/select/86f9bd.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/select/86f9bd.wgsl.expected.ir.msl
index a0bef15..3cad55d 100644
--- a/test/tint/builtins/gen/var/select/86f9bd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/select/86f9bd.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%select_86f9bd = func():void -> %b2 {
-  %b2 = block {
+%select_86f9bd = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %arg_1:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %arg_2:ptr<function, bool, read_write> = var, true
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %select_86f9bd
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %select_86f9bd
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %select_86f9bd
     ret
   }
diff --git a/test/tint/builtins/gen/var/select/8fa62c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/select/8fa62c.wgsl.expected.ir.msl
index f8289fa..08be126 100644
--- a/test/tint/builtins/gen/var/select/8fa62c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/select/8fa62c.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%select_8fa62c = func():void -> %b2 {
-  %b2 = block {
+%select_8fa62c = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %arg_2:ptr<function, bool, read_write> = var, true
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %select_8fa62c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %select_8fa62c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %select_8fa62c
     ret
   }
diff --git a/test/tint/builtins/gen/var/select/99f883.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/select/99f883.wgsl.expected.ir.msl
index 1cecef5..e51b3c8 100644
--- a/test/tint/builtins/gen/var/select/99f883.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/select/99f883.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%select_99f883 = func():void -> %b2 {
-  %b2 = block {
+%select_99f883 = func():void {
+  $B2: {
     %arg_0:ptr<function, u32, read_write> = var, 1u
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %arg_2:ptr<function, bool, read_write> = var, true
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %select_99f883
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %select_99f883
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %select_99f883
     ret
   }
diff --git a/test/tint/builtins/gen/var/select/a081f1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/select/a081f1.wgsl.expected.ir.msl
index 739381e..93c0009 100644
--- a/test/tint/builtins/gen/var/select/a081f1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/select/a081f1.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%select_a081f1 = func():void -> %b2 {
-  %b2 = block {
+%select_a081f1 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %arg_1:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %arg_2:ptr<function, vec4<bool>, read_write> = var, vec4<bool>(true)
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %select_a081f1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %select_a081f1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %select_a081f1
     ret
   }
diff --git a/test/tint/builtins/gen/var/select/a2860e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/select/a2860e.wgsl.expected.ir.msl
index 4b02bfa..2f2ea14 100644
--- a/test/tint/builtins/gen/var/select/a2860e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/select/a2860e.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%select_a2860e = func():void -> %b2 {
-  %b2 = block {
+%select_a2860e = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %arg_1:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %arg_2:ptr<function, vec4<bool>, read_write> = var, vec4<bool>(true)
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %select_a2860e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %select_a2860e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %select_a2860e
     ret
   }
diff --git a/test/tint/builtins/gen/var/select/ab069f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/select/ab069f.wgsl.expected.ir.msl
index a3c34eb..3b21dd6 100644
--- a/test/tint/builtins/gen/var/select/ab069f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/select/ab069f.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%select_ab069f = func():void -> %b2 {
-  %b2 = block {
+%select_ab069f = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %arg_1:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %arg_2:ptr<function, bool, read_write> = var, true
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %select_ab069f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %select_ab069f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %select_ab069f
     ret
   }
diff --git a/test/tint/builtins/gen/var/select/b04721.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/select/b04721.wgsl.expected.ir.msl
index ea4e980..115ae90 100644
--- a/test/tint/builtins/gen/var/select/b04721.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/select/b04721.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%select_b04721 = func():void -> %b2 {
-  %b2 = block {
+%select_b04721 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %arg_2:ptr<function, bool, read_write> = var, true
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %select_b04721
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %select_b04721
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %select_b04721
     ret
   }
diff --git a/test/tint/builtins/gen/var/select/bb447f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/select/bb447f.wgsl.expected.ir.msl
index bcd8b07..2317f05 100644
--- a/test/tint/builtins/gen/var/select/bb447f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/select/bb447f.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%select_bb447f = func():void -> %b2 {
-  %b2 = block {
+%select_bb447f = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, bool, read_write> = var, true
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %select_bb447f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %select_bb447f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %select_bb447f
     ret
   }
diff --git a/test/tint/builtins/gen/var/select/bb8aae.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/select/bb8aae.wgsl.expected.ir.msl
index 0f9ea99..ce9e36c 100644
--- a/test/tint/builtins/gen/var/select/bb8aae.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/select/bb8aae.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%select_bb8aae = func():void -> %b2 {
-  %b2 = block {
+%select_bb8aae = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %arg_1:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %arg_2:ptr<function, vec4<bool>, read_write> = var, vec4<bool>(true)
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %select_bb8aae
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %select_bb8aae
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %select_bb8aae
     ret
   }
diff --git a/test/tint/builtins/gen/var/select/bf3d29.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/select/bf3d29.wgsl.expected.ir.msl
index f7f3885..28f58c2 100644
--- a/test/tint/builtins/gen/var/select/bf3d29.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/select/bf3d29.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%select_bf3d29 = func():void -> %b2 {
-  %b2 = block {
+%select_bf3d29 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_1:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_2:ptr<function, bool, read_write> = var, true
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %select_bf3d29
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %select_bf3d29
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %select_bf3d29
     ret
   }
diff --git a/test/tint/builtins/gen/var/select/c31f9e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/select/c31f9e.wgsl.expected.ir.msl
index db4234d..d147d7b 100644
--- a/test/tint/builtins/gen/var/select/c31f9e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/select/c31f9e.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%select_c31f9e = func():void -> %b2 {
-  %b2 = block {
+%select_c31f9e = func():void {
+  $B2: {
     %arg_0:ptr<function, bool, read_write> = var, true
     %arg_1:ptr<function, bool, read_write> = var, true
     %arg_2:ptr<function, bool, read_write> = var, true
@@ -22,20 +22,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %16:void = call %select_c31f9e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %18:void = call %select_c31f9e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %20:void = call %select_c31f9e
     ret
   }
diff --git a/test/tint/builtins/gen/var/select/c41bd1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/select/c41bd1.wgsl.expected.ir.msl
index 1f6530c..a7274ef 100644
--- a/test/tint/builtins/gen/var/select/c41bd1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/select/c41bd1.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%select_c41bd1 = func():void -> %b2 {
-  %b2 = block {
+%select_c41bd1 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<bool>, read_write> = var, vec4<bool>(true)
     %arg_1:ptr<function, vec4<bool>, read_write> = var, vec4<bool>(true)
     %arg_2:ptr<function, bool, read_write> = var, true
@@ -22,20 +22,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %16:void = call %select_c41bd1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %18:void = call %select_c41bd1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %20:void = call %select_c41bd1
     ret
   }
diff --git a/test/tint/builtins/gen/var/select/c4a4ef.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/select/c4a4ef.wgsl.expected.ir.msl
index de14746..1608310 100644
--- a/test/tint/builtins/gen/var/select/c4a4ef.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/select/c4a4ef.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%select_c4a4ef = func():void -> %b2 {
-  %b2 = block {
+%select_c4a4ef = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
     %arg_1:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
     %arg_2:ptr<function, vec4<bool>, read_write> = var, vec4<bool>(true)
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %select_c4a4ef
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %select_c4a4ef
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %select_c4a4ef
     ret
   }
diff --git a/test/tint/builtins/gen/var/select/cb9301.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/select/cb9301.wgsl.expected.ir.msl
index 4a0b24f..82ab349 100644
--- a/test/tint/builtins/gen/var/select/cb9301.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/select/cb9301.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%select_cb9301 = func():void -> %b2 {
-  %b2 = block {
+%select_cb9301 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<bool>, read_write> = var, vec2<bool>(true)
     %arg_1:ptr<function, vec2<bool>, read_write> = var, vec2<bool>(true)
     %arg_2:ptr<function, vec2<bool>, read_write> = var, vec2<bool>(true)
@@ -22,20 +22,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %16:void = call %select_cb9301
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %18:void = call %select_cb9301
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %20:void = call %select_cb9301
     ret
   }
diff --git a/test/tint/builtins/gen/var/select/e3e028.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/select/e3e028.wgsl.expected.ir.msl
index 50d57de..ce9ca97 100644
--- a/test/tint/builtins/gen/var/select/e3e028.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/select/e3e028.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%select_e3e028 = func():void -> %b2 {
-  %b2 = block {
+%select_e3e028 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<bool>, read_write> = var, vec4<bool>(true)
     %arg_1:ptr<function, vec4<bool>, read_write> = var, vec4<bool>(true)
     %arg_2:ptr<function, vec4<bool>, read_write> = var, vec4<bool>(true)
@@ -22,20 +22,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %16:void = call %select_e3e028
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %18:void = call %select_e3e028
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %20:void = call %select_e3e028
     ret
   }
diff --git a/test/tint/builtins/gen/var/select/ebfea2.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/select/ebfea2.wgsl.expected.ir.msl
index afc1ad51..51ee2c3 100644
--- a/test/tint/builtins/gen/var/select/ebfea2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/select/ebfea2.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%select_ebfea2 = func():void -> %b2 {
-  %b2 = block {
+%select_ebfea2 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_1:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_2:ptr<function, vec3<bool>, read_write> = var, vec3<bool>(true)
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %select_ebfea2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %select_ebfea2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %select_ebfea2
     ret
   }
diff --git a/test/tint/builtins/gen/var/select/ed7c13.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/select/ed7c13.wgsl.expected.ir.msl
index 8525370..3bafce6 100644
--- a/test/tint/builtins/gen/var/select/ed7c13.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/select/ed7c13.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%select_ed7c13 = func():void -> %b2 {
-  %b2 = block {
+%select_ed7c13 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %arg_1:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %arg_2:ptr<function, vec2<bool>, read_write> = var, vec2<bool>(true)
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %select_ed7c13
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %select_ed7c13
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %select_ed7c13
     ret
   }
diff --git a/test/tint/builtins/gen/var/select/ed8a15.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/select/ed8a15.wgsl.expected.ir.msl
index bf5054a..6b3157d 100644
--- a/test/tint/builtins/gen/var/select/ed8a15.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/select/ed8a15.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%select_ed8a15 = func():void -> %b2 {
-  %b2 = block {
+%select_ed8a15 = func():void {
+  $B2: {
     %arg_0:ptr<function, i32, read_write> = var, 1i
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %arg_2:ptr<function, bool, read_write> = var, true
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %select_ed8a15
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %select_ed8a15
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %select_ed8a15
     ret
   }
diff --git a/test/tint/builtins/gen/var/select/fb7e53.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/select/fb7e53.wgsl.expected.ir.msl
index a398853..42adc09 100644
--- a/test/tint/builtins/gen/var/select/fb7e53.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/select/fb7e53.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%select_fb7e53 = func():void -> %b2 {
-  %b2 = block {
+%select_fb7e53 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<bool>, read_write> = var, vec2<bool>(true)
     %arg_1:ptr<function, vec2<bool>, read_write> = var, vec2<bool>(true)
     %arg_2:ptr<function, bool, read_write> = var, true
@@ -22,20 +22,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %16:void = call %select_fb7e53
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %18:void = call %select_fb7e53
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %20:void = call %select_fb7e53
     ret
   }
diff --git a/test/tint/builtins/gen/var/sign/159665.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/sign/159665.wgsl.expected.ir.msl
index 6002b60..5a9a2da 100644
--- a/test/tint/builtins/gen/var/sign/159665.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/sign/159665.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%sign_159665 = func():void -> %b2 {
-  %b2 = block {
+%sign_159665 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %4:vec3<f32> = load %arg_0
     %5:vec3<f32> = sign %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %sign_159665
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %sign_159665
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %sign_159665
     ret
   }
diff --git a/test/tint/builtins/gen/var/sign/160933.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/sign/160933.wgsl.expected.ir.msl
index 3d723bd..162958d 100644
--- a/test/tint/builtins/gen/var/sign/160933.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/sign/160933.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%sign_160933 = func():void -> %b2 {
-  %b2 = block {
+%sign_160933 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %4:vec4<f16> = load %arg_0
     %5:vec4<f16> = sign %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %sign_160933
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %sign_160933
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %sign_160933
     ret
   }
diff --git a/test/tint/builtins/gen/var/sign/3233fa.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/sign/3233fa.wgsl.expected.ir.msl
index 1200207..3e352fd 100644
--- a/test/tint/builtins/gen/var/sign/3233fa.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/sign/3233fa.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%sign_3233fa = func():void -> %b2 {
-  %b2 = block {
+%sign_3233fa = func():void {
+  $B2: {
     %arg_0:ptr<function, i32, read_write> = var, 1i
     %4:i32 = load %arg_0
     %5:i32 = sign %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %sign_3233fa
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %sign_3233fa
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %sign_3233fa
     ret
   }
diff --git a/test/tint/builtins/gen/var/sign/58d779.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/sign/58d779.wgsl.expected.ir.msl
index 1ab01a3..87daa61 100644
--- a/test/tint/builtins/gen/var/sign/58d779.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/sign/58d779.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%sign_58d779 = func():void -> %b2 {
-  %b2 = block {
+%sign_58d779 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %4:vec4<i32> = load %arg_0
     %5:vec4<i32> = sign %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %sign_58d779
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %sign_58d779
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %sign_58d779
     ret
   }
diff --git a/test/tint/builtins/gen/var/sign/5d283a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/sign/5d283a.wgsl.expected.ir.msl
index 25e57d8..1fabbf9 100644
--- a/test/tint/builtins/gen/var/sign/5d283a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/sign/5d283a.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%sign_5d283a = func():void -> %b2 {
-  %b2 = block {
+%sign_5d283a = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %4:vec3<f16> = load %arg_0
     %5:vec3<f16> = sign %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %sign_5d283a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %sign_5d283a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %sign_5d283a
     ret
   }
diff --git a/test/tint/builtins/gen/var/sign/7c85ea.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/sign/7c85ea.wgsl.expected.ir.msl
index 04cc283..04c153b 100644
--- a/test/tint/builtins/gen/var/sign/7c85ea.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/sign/7c85ea.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%sign_7c85ea = func():void -> %b2 {
-  %b2 = block {
+%sign_7c85ea = func():void {
+  $B2: {
     %arg_0:ptr<function, f16, read_write> = var, 1.0h
     %4:f16 = load %arg_0
     %5:f16 = sign %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %sign_7c85ea
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %sign_7c85ea
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %sign_7c85ea
     ret
   }
diff --git a/test/tint/builtins/gen/var/sign/926015.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/sign/926015.wgsl.expected.ir.msl
index 36314cd..b7f5378 100644
--- a/test/tint/builtins/gen/var/sign/926015.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/sign/926015.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%sign_926015 = func():void -> %b2 {
-  %b2 = block {
+%sign_926015 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %4:vec2<i32> = load %arg_0
     %5:vec2<i32> = sign %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %sign_926015
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %sign_926015
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %sign_926015
     ret
   }
diff --git a/test/tint/builtins/gen/var/sign/9603b1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/sign/9603b1.wgsl.expected.ir.msl
index 22b3219..3ccbe81 100644
--- a/test/tint/builtins/gen/var/sign/9603b1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/sign/9603b1.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%sign_9603b1 = func():void -> %b2 {
-  %b2 = block {
+%sign_9603b1 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %4:vec3<i32> = load %arg_0
     %5:vec3<i32> = sign %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %sign_9603b1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %sign_9603b1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %sign_9603b1
     ret
   }
diff --git a/test/tint/builtins/gen/var/sign/b8f634.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/sign/b8f634.wgsl.expected.ir.msl
index de57aea..b92315f 100644
--- a/test/tint/builtins/gen/var/sign/b8f634.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/sign/b8f634.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%sign_b8f634 = func():void -> %b2 {
-  %b2 = block {
+%sign_b8f634 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %4:vec4<f32> = load %arg_0
     %5:vec4<f32> = sign %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %sign_b8f634
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %sign_b8f634
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %sign_b8f634
     ret
   }
diff --git a/test/tint/builtins/gen/var/sign/ccdb3c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/sign/ccdb3c.wgsl.expected.ir.msl
index 07cf60c..8d3e3f0 100644
--- a/test/tint/builtins/gen/var/sign/ccdb3c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/sign/ccdb3c.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%sign_ccdb3c = func():void -> %b2 {
-  %b2 = block {
+%sign_ccdb3c = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %4:vec2<f16> = load %arg_0
     %5:vec2<f16> = sign %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %sign_ccdb3c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %sign_ccdb3c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %sign_ccdb3c
     ret
   }
diff --git a/test/tint/builtins/gen/var/sign/d065d8.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/sign/d065d8.wgsl.expected.ir.msl
index eebfaad..879c635 100644
--- a/test/tint/builtins/gen/var/sign/d065d8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/sign/d065d8.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%sign_d065d8 = func():void -> %b2 {
-  %b2 = block {
+%sign_d065d8 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %4:vec2<f32> = load %arg_0
     %5:vec2<f32> = sign %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %sign_d065d8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %sign_d065d8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %sign_d065d8
     ret
   }
diff --git a/test/tint/builtins/gen/var/sign/dd790e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/sign/dd790e.wgsl.expected.ir.msl
index 8298e2d..42a2757 100644
--- a/test/tint/builtins/gen/var/sign/dd790e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/sign/dd790e.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%sign_dd790e = func():void -> %b2 {
-  %b2 = block {
+%sign_dd790e = func():void {
+  $B2: {
     %arg_0:ptr<function, f32, read_write> = var, 1.0f
     %4:f32 = load %arg_0
     %5:f32 = sign %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %sign_dd790e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %sign_dd790e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %sign_dd790e
     ret
   }
diff --git a/test/tint/builtins/gen/var/sin/01f241.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/sin/01f241.wgsl.expected.ir.msl
index 1ca61d8..49c3ca3 100644
--- a/test/tint/builtins/gen/var/sin/01f241.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/sin/01f241.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%sin_01f241 = func():void -> %b2 {
-  %b2 = block {
+%sin_01f241 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.57079637050628662109f)
     %4:vec3<f32> = load %arg_0
     %5:vec3<f32> = sin %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %sin_01f241
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %sin_01f241
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %sin_01f241
     ret
   }
diff --git a/test/tint/builtins/gen/var/sin/2c903b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/sin/2c903b.wgsl.expected.ir.msl
index 6c2f7ee..8729c61 100644
--- a/test/tint/builtins/gen/var/sin/2c903b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/sin/2c903b.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%sin_2c903b = func():void -> %b2 {
-  %b2 = block {
+%sin_2c903b = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.5703125h)
     %4:vec3<f16> = load %arg_0
     %5:vec3<f16> = sin %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %sin_2c903b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %sin_2c903b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %sin_2c903b
     ret
   }
diff --git a/test/tint/builtins/gen/var/sin/3cca11.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/sin/3cca11.wgsl.expected.ir.msl
index fbc565e..7886ef4 100644
--- a/test/tint/builtins/gen/var/sin/3cca11.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/sin/3cca11.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%sin_3cca11 = func():void -> %b2 {
-  %b2 = block {
+%sin_3cca11 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.5703125h)
     %4:vec2<f16> = load %arg_0
     %5:vec2<f16> = sin %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %sin_3cca11
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %sin_3cca11
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %sin_3cca11
     ret
   }
diff --git a/test/tint/builtins/gen/var/sin/4e3979.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/sin/4e3979.wgsl.expected.ir.msl
index a539c5f..549b117 100644
--- a/test/tint/builtins/gen/var/sin/4e3979.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/sin/4e3979.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%sin_4e3979 = func():void -> %b2 {
-  %b2 = block {
+%sin_4e3979 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.57079637050628662109f)
     %4:vec4<f32> = load %arg_0
     %5:vec4<f32> = sin %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %sin_4e3979
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %sin_4e3979
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %sin_4e3979
     ret
   }
diff --git a/test/tint/builtins/gen/var/sin/5c0712.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/sin/5c0712.wgsl.expected.ir.msl
index 4660de9..f625cf9 100644
--- a/test/tint/builtins/gen/var/sin/5c0712.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/sin/5c0712.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%sin_5c0712 = func():void -> %b2 {
-  %b2 = block {
+%sin_5c0712 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.5703125h)
     %4:vec4<f16> = load %arg_0
     %5:vec4<f16> = sin %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %sin_5c0712
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %sin_5c0712
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %sin_5c0712
     ret
   }
diff --git a/test/tint/builtins/gen/var/sin/66a59f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/sin/66a59f.wgsl.expected.ir.msl
index dd54ae8..8771b75 100644
--- a/test/tint/builtins/gen/var/sin/66a59f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/sin/66a59f.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%sin_66a59f = func():void -> %b2 {
-  %b2 = block {
+%sin_66a59f = func():void {
+  $B2: {
     %arg_0:ptr<function, f16, read_write> = var, 1.5703125h
     %4:f16 = load %arg_0
     %5:f16 = sin %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %sin_66a59f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %sin_66a59f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %sin_66a59f
     ret
   }
diff --git a/test/tint/builtins/gen/var/sin/b78c91.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/sin/b78c91.wgsl.expected.ir.msl
index 8dd7c77..9444a90 100644
--- a/test/tint/builtins/gen/var/sin/b78c91.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/sin/b78c91.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%sin_b78c91 = func():void -> %b2 {
-  %b2 = block {
+%sin_b78c91 = func():void {
+  $B2: {
     %arg_0:ptr<function, f32, read_write> = var, 1.57079637050628662109f
     %4:f32 = load %arg_0
     %5:f32 = sin %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %sin_b78c91
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %sin_b78c91
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %sin_b78c91
     ret
   }
diff --git a/test/tint/builtins/gen/var/sin/fc8bc4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/sin/fc8bc4.wgsl.expected.ir.msl
index 16eeb2e..8b0ea0a 100644
--- a/test/tint/builtins/gen/var/sin/fc8bc4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/sin/fc8bc4.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%sin_fc8bc4 = func():void -> %b2 {
-  %b2 = block {
+%sin_fc8bc4 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.57079637050628662109f)
     %4:vec2<f32> = load %arg_0
     %5:vec2<f32> = sin %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %sin_fc8bc4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %sin_fc8bc4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %sin_fc8bc4
     ret
   }
diff --git a/test/tint/builtins/gen/var/sinh/0908c1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/sinh/0908c1.wgsl.expected.ir.msl
index 22f1152..9228a17 100644
--- a/test/tint/builtins/gen/var/sinh/0908c1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/sinh/0908c1.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%sinh_0908c1 = func():void -> %b2 {
-  %b2 = block {
+%sinh_0908c1 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %4:vec3<f16> = load %arg_0
     %5:vec3<f16> = sinh %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %sinh_0908c1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %sinh_0908c1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %sinh_0908c1
     ret
   }
diff --git a/test/tint/builtins/gen/var/sinh/445e33.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/sinh/445e33.wgsl.expected.ir.msl
index 8115800..0606302 100644
--- a/test/tint/builtins/gen/var/sinh/445e33.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/sinh/445e33.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%sinh_445e33 = func():void -> %b2 {
-  %b2 = block {
+%sinh_445e33 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %4:vec4<f32> = load %arg_0
     %5:vec4<f32> = sinh %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %sinh_445e33
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %sinh_445e33
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %sinh_445e33
     ret
   }
diff --git a/test/tint/builtins/gen/var/sinh/69cce2.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/sinh/69cce2.wgsl.expected.ir.msl
index 5e7c794..0c7f4bf 100644
--- a/test/tint/builtins/gen/var/sinh/69cce2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/sinh/69cce2.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%sinh_69cce2 = func():void -> %b2 {
-  %b2 = block {
+%sinh_69cce2 = func():void {
+  $B2: {
     %arg_0:ptr<function, f16, read_write> = var, 1.0h
     %4:f16 = load %arg_0
     %5:f16 = sinh %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %sinh_69cce2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %sinh_69cce2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %sinh_69cce2
     ret
   }
diff --git a/test/tint/builtins/gen/var/sinh/7bb598.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/sinh/7bb598.wgsl.expected.ir.msl
index 53dcc18..8860a73 100644
--- a/test/tint/builtins/gen/var/sinh/7bb598.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/sinh/7bb598.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%sinh_7bb598 = func():void -> %b2 {
-  %b2 = block {
+%sinh_7bb598 = func():void {
+  $B2: {
     %arg_0:ptr<function, f32, read_write> = var, 1.0f
     %4:f32 = load %arg_0
     %5:f32 = sinh %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %sinh_7bb598
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %sinh_7bb598
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %sinh_7bb598
     ret
   }
diff --git a/test/tint/builtins/gen/var/sinh/924f19.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/sinh/924f19.wgsl.expected.ir.msl
index 5880100..38afa99 100644
--- a/test/tint/builtins/gen/var/sinh/924f19.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/sinh/924f19.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%sinh_924f19 = func():void -> %b2 {
-  %b2 = block {
+%sinh_924f19 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %4:vec2<f16> = load %arg_0
     %5:vec2<f16> = sinh %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %sinh_924f19
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %sinh_924f19
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %sinh_924f19
     ret
   }
diff --git a/test/tint/builtins/gen/var/sinh/b9860e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/sinh/b9860e.wgsl.expected.ir.msl
index 250e6c4..f30b4e6 100644
--- a/test/tint/builtins/gen/var/sinh/b9860e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/sinh/b9860e.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%sinh_b9860e = func():void -> %b2 {
-  %b2 = block {
+%sinh_b9860e = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %4:vec2<f32> = load %arg_0
     %5:vec2<f32> = sinh %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %sinh_b9860e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %sinh_b9860e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %sinh_b9860e
     ret
   }
diff --git a/test/tint/builtins/gen/var/sinh/ba7e25.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/sinh/ba7e25.wgsl.expected.ir.msl
index a2c8520..1622cb5 100644
--- a/test/tint/builtins/gen/var/sinh/ba7e25.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/sinh/ba7e25.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%sinh_ba7e25 = func():void -> %b2 {
-  %b2 = block {
+%sinh_ba7e25 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %4:vec4<f16> = load %arg_0
     %5:vec4<f16> = sinh %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %sinh_ba7e25
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %sinh_ba7e25
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %sinh_ba7e25
     ret
   }
diff --git a/test/tint/builtins/gen/var/sinh/c9a5eb.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/sinh/c9a5eb.wgsl.expected.ir.msl
index eaa2819..1c68067 100644
--- a/test/tint/builtins/gen/var/sinh/c9a5eb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/sinh/c9a5eb.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%sinh_c9a5eb = func():void -> %b2 {
-  %b2 = block {
+%sinh_c9a5eb = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %4:vec3<f32> = load %arg_0
     %5:vec3<f32> = sinh %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %sinh_c9a5eb
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %sinh_c9a5eb
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %sinh_c9a5eb
     ret
   }
diff --git a/test/tint/builtins/gen/var/smoothstep/12c031.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/smoothstep/12c031.wgsl.expected.ir.msl
index 82f0da2..888ad07 100644
--- a/test/tint/builtins/gen/var/smoothstep/12c031.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/smoothstep/12c031.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%smoothstep_12c031 = func():void -> %b2 {
-  %b2 = block {
+%smoothstep_12c031 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(2.0h)
     %arg_1:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(4.0h)
     %arg_2:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(3.0h)
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %smoothstep_12c031
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %smoothstep_12c031
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %smoothstep_12c031
     ret
   }
diff --git a/test/tint/builtins/gen/var/smoothstep/392c19.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/smoothstep/392c19.wgsl.expected.ir.msl
index e3dba36..f287a5a 100644
--- a/test/tint/builtins/gen/var/smoothstep/392c19.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/smoothstep/392c19.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%smoothstep_392c19 = func():void -> %b2 {
-  %b2 = block {
+%smoothstep_392c19 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(2.0f)
     %arg_1:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(4.0f)
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(3.0f)
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %smoothstep_392c19
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %smoothstep_392c19
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %smoothstep_392c19
     ret
   }
diff --git a/test/tint/builtins/gen/var/smoothstep/40864c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/smoothstep/40864c.wgsl.expected.ir.msl
index ca12060..b4506a9 100644
--- a/test/tint/builtins/gen/var/smoothstep/40864c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/smoothstep/40864c.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%smoothstep_40864c = func():void -> %b2 {
-  %b2 = block {
+%smoothstep_40864c = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(2.0f)
     %arg_1:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(4.0f)
     %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(3.0f)
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %smoothstep_40864c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %smoothstep_40864c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %smoothstep_40864c
     ret
   }
diff --git a/test/tint/builtins/gen/var/smoothstep/586e12.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/smoothstep/586e12.wgsl.expected.ir.msl
index cac8fd5..c47c494 100644
--- a/test/tint/builtins/gen/var/smoothstep/586e12.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/smoothstep/586e12.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%smoothstep_586e12 = func():void -> %b2 {
-  %b2 = block {
+%smoothstep_586e12 = func():void {
+  $B2: {
     %arg_0:ptr<function, f16, read_write> = var, 2.0h
     %arg_1:ptr<function, f16, read_write> = var, 4.0h
     %arg_2:ptr<function, f16, read_write> = var, 3.0h
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %smoothstep_586e12
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %smoothstep_586e12
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %smoothstep_586e12
     ret
   }
diff --git a/test/tint/builtins/gen/var/smoothstep/6c4975.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/smoothstep/6c4975.wgsl.expected.ir.msl
index dc9f310..5ac7acc 100644
--- a/test/tint/builtins/gen/var/smoothstep/6c4975.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/smoothstep/6c4975.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%smoothstep_6c4975 = func():void -> %b2 {
-  %b2 = block {
+%smoothstep_6c4975 = func():void {
+  $B2: {
     %arg_0:ptr<function, f32, read_write> = var, 2.0f
     %arg_1:ptr<function, f32, read_write> = var, 4.0f
     %arg_2:ptr<function, f32, read_write> = var, 3.0f
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %smoothstep_6c4975
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %smoothstep_6c4975
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %smoothstep_6c4975
     ret
   }
diff --git a/test/tint/builtins/gen/var/smoothstep/6e7a74.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/smoothstep/6e7a74.wgsl.expected.ir.msl
index 61c8fb0..adca0d7 100644
--- a/test/tint/builtins/gen/var/smoothstep/6e7a74.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/smoothstep/6e7a74.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%smoothstep_6e7a74 = func():void -> %b2 {
-  %b2 = block {
+%smoothstep_6e7a74 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(2.0h)
     %arg_1:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(4.0h)
     %arg_2:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(3.0h)
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %smoothstep_6e7a74
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %smoothstep_6e7a74
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %smoothstep_6e7a74
     ret
   }
diff --git a/test/tint/builtins/gen/var/smoothstep/aad1db.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/smoothstep/aad1db.wgsl.expected.ir.msl
index 3d4868e..dd28c77 100644
--- a/test/tint/builtins/gen/var/smoothstep/aad1db.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/smoothstep/aad1db.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%smoothstep_aad1db = func():void -> %b2 {
-  %b2 = block {
+%smoothstep_aad1db = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(2.0f)
     %arg_1:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(4.0f)
     %arg_2:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(3.0f)
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %smoothstep_aad1db
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %smoothstep_aad1db
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %smoothstep_aad1db
     ret
   }
diff --git a/test/tint/builtins/gen/var/smoothstep/c43ebd.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/smoothstep/c43ebd.wgsl.expected.ir.msl
index e413cd1..ac939c4 100644
--- a/test/tint/builtins/gen/var/smoothstep/c43ebd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/smoothstep/c43ebd.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%smoothstep_c43ebd = func():void -> %b2 {
-  %b2 = block {
+%smoothstep_c43ebd = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(2.0h)
     %arg_1:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(4.0h)
     %arg_2:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(3.0h)
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %smoothstep_c43ebd
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %smoothstep_c43ebd
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %smoothstep_c43ebd
     ret
   }
diff --git a/test/tint/builtins/gen/var/sqrt/20c74e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/sqrt/20c74e.wgsl.expected.ir.msl
index 911c3a3..52d1ca3 100644
--- a/test/tint/builtins/gen/var/sqrt/20c74e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/sqrt/20c74e.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%sqrt_20c74e = func():void -> %b2 {
-  %b2 = block {
+%sqrt_20c74e = func():void {
+  $B2: {
     %arg_0:ptr<function, f32, read_write> = var, 1.0f
     %4:f32 = load %arg_0
     %5:f32 = sqrt %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %sqrt_20c74e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %sqrt_20c74e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %sqrt_20c74e
     ret
   }
diff --git a/test/tint/builtins/gen/var/sqrt/803d1c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/sqrt/803d1c.wgsl.expected.ir.msl
index 0086214..b5ba61d 100644
--- a/test/tint/builtins/gen/var/sqrt/803d1c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/sqrt/803d1c.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%sqrt_803d1c = func():void -> %b2 {
-  %b2 = block {
+%sqrt_803d1c = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %4:vec4<f16> = load %arg_0
     %5:vec4<f16> = sqrt %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %sqrt_803d1c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %sqrt_803d1c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %sqrt_803d1c
     ret
   }
diff --git a/test/tint/builtins/gen/var/sqrt/895a0c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/sqrt/895a0c.wgsl.expected.ir.msl
index b35e5eb..134a9ac 100644
--- a/test/tint/builtins/gen/var/sqrt/895a0c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/sqrt/895a0c.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%sqrt_895a0c = func():void -> %b2 {
-  %b2 = block {
+%sqrt_895a0c = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %4:vec3<f16> = load %arg_0
     %5:vec3<f16> = sqrt %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %sqrt_895a0c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %sqrt_895a0c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %sqrt_895a0c
     ret
   }
diff --git a/test/tint/builtins/gen/var/sqrt/8c7024.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/sqrt/8c7024.wgsl.expected.ir.msl
index 06980b2..b08e923 100644
--- a/test/tint/builtins/gen/var/sqrt/8c7024.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/sqrt/8c7024.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%sqrt_8c7024 = func():void -> %b2 {
-  %b2 = block {
+%sqrt_8c7024 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %4:vec2<f32> = load %arg_0
     %5:vec2<f32> = sqrt %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %sqrt_8c7024
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %sqrt_8c7024
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %sqrt_8c7024
     ret
   }
diff --git a/test/tint/builtins/gen/var/sqrt/aa0d7a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/sqrt/aa0d7a.wgsl.expected.ir.msl
index 5f01fec..0bcbe40 100644
--- a/test/tint/builtins/gen/var/sqrt/aa0d7a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/sqrt/aa0d7a.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%sqrt_aa0d7a = func():void -> %b2 {
-  %b2 = block {
+%sqrt_aa0d7a = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %4:vec4<f32> = load %arg_0
     %5:vec4<f32> = sqrt %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %sqrt_aa0d7a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %sqrt_aa0d7a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %sqrt_aa0d7a
     ret
   }
diff --git a/test/tint/builtins/gen/var/sqrt/d9ab4d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/sqrt/d9ab4d.wgsl.expected.ir.msl
index 39e0a8a..32d4546 100644
--- a/test/tint/builtins/gen/var/sqrt/d9ab4d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/sqrt/d9ab4d.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%sqrt_d9ab4d = func():void -> %b2 {
-  %b2 = block {
+%sqrt_d9ab4d = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %4:vec2<f16> = load %arg_0
     %5:vec2<f16> = sqrt %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %sqrt_d9ab4d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %sqrt_d9ab4d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %sqrt_d9ab4d
     ret
   }
diff --git a/test/tint/builtins/gen/var/sqrt/ec33e9.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/sqrt/ec33e9.wgsl.expected.ir.msl
index e1ed549..14e52ff 100644
--- a/test/tint/builtins/gen/var/sqrt/ec33e9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/sqrt/ec33e9.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%sqrt_ec33e9 = func():void -> %b2 {
-  %b2 = block {
+%sqrt_ec33e9 = func():void {
+  $B2: {
     %arg_0:ptr<function, f16, read_write> = var, 1.0h
     %4:f16 = load %arg_0
     %5:f16 = sqrt %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %sqrt_ec33e9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %sqrt_ec33e9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %sqrt_ec33e9
     ret
   }
diff --git a/test/tint/builtins/gen/var/sqrt/f8c59a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/sqrt/f8c59a.wgsl.expected.ir.msl
index d4ac308..6f6b5c9 100644
--- a/test/tint/builtins/gen/var/sqrt/f8c59a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/sqrt/f8c59a.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%sqrt_f8c59a = func():void -> %b2 {
-  %b2 = block {
+%sqrt_f8c59a = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %4:vec3<f32> = load %arg_0
     %5:vec3<f32> = sqrt %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %sqrt_f8c59a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %sqrt_f8c59a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %sqrt_f8c59a
     ret
   }
diff --git a/test/tint/builtins/gen/var/step/07cb06.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/step/07cb06.wgsl.expected.ir.msl
index 6dcbbca..b47ef2e 100644
--- a/test/tint/builtins/gen/var/step/07cb06.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/step/07cb06.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%step_07cb06 = func():void -> %b2 {
-  %b2 = block {
+%step_07cb06 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %arg_1:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %5:vec2<f16> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %step_07cb06
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %step_07cb06
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %step_07cb06
     ret
   }
diff --git a/test/tint/builtins/gen/var/step/0b073b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/step/0b073b.wgsl.expected.ir.msl
index 954c79c..d7e2286 100644
--- a/test/tint/builtins/gen/var/step/0b073b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/step/0b073b.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%step_0b073b = func():void -> %b2 {
-  %b2 = block {
+%step_0b073b = func():void {
+  $B2: {
     %arg_0:ptr<function, f32, read_write> = var, 1.0f
     %arg_1:ptr<function, f32, read_write> = var, 1.0f
     %5:f32 = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %step_0b073b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %step_0b073b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %step_0b073b
     ret
   }
diff --git a/test/tint/builtins/gen/var/step/19accd.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/step/19accd.wgsl.expected.ir.msl
index 82efced..67bcf1b 100644
--- a/test/tint/builtins/gen/var/step/19accd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/step/19accd.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%step_19accd = func():void -> %b2 {
-  %b2 = block {
+%step_19accd = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_1:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %5:vec2<f32> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %step_19accd
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %step_19accd
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %step_19accd
     ret
   }
diff --git a/test/tint/builtins/gen/var/step/334303.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/step/334303.wgsl.expected.ir.msl
index 836b6cf..4c972d9 100644
--- a/test/tint/builtins/gen/var/step/334303.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/step/334303.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%step_334303 = func():void -> %b2 {
-  %b2 = block {
+%step_334303 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_1:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %5:vec3<f32> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %step_334303
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %step_334303
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %step_334303
     ret
   }
diff --git a/test/tint/builtins/gen/var/step/630d07.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/step/630d07.wgsl.expected.ir.msl
index 58d4ff3..96e266c 100644
--- a/test/tint/builtins/gen/var/step/630d07.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/step/630d07.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%step_630d07 = func():void -> %b2 {
-  %b2 = block {
+%step_630d07 = func():void {
+  $B2: {
     %arg_0:ptr<function, f16, read_write> = var, 1.0h
     %arg_1:ptr<function, f16, read_write> = var, 1.0h
     %5:f16 = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %step_630d07
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %step_630d07
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %step_630d07
     ret
   }
diff --git a/test/tint/builtins/gen/var/step/baa320.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/step/baa320.wgsl.expected.ir.msl
index a2c0b87..ac9ea8f 100644
--- a/test/tint/builtins/gen/var/step/baa320.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/step/baa320.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%step_baa320 = func():void -> %b2 {
-  %b2 = block {
+%step_baa320 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %arg_1:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %5:vec4<f16> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %step_baa320
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %step_baa320
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %step_baa320
     ret
   }
diff --git a/test/tint/builtins/gen/var/step/cc6b61.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/step/cc6b61.wgsl.expected.ir.msl
index e9fad23..f4e39fb 100644
--- a/test/tint/builtins/gen/var/step/cc6b61.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/step/cc6b61.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%step_cc6b61 = func():void -> %b2 {
-  %b2 = block {
+%step_cc6b61 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %arg_1:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %5:vec3<f16> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %step_cc6b61
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %step_cc6b61
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %step_cc6b61
     ret
   }
diff --git a/test/tint/builtins/gen/var/step/e2b337.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/step/e2b337.wgsl.expected.ir.msl
index 8867606..5c957da 100644
--- a/test/tint/builtins/gen/var/step/e2b337.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/step/e2b337.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%step_e2b337 = func():void -> %b2 {
-  %b2 = block {
+%step_e2b337 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %arg_1:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %5:vec4<f32> = load %arg_0
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %step_e2b337
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %step_e2b337
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %step_e2b337
     ret
   }
diff --git a/test/tint/builtins/gen/var/storageBarrier/d87211.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/storageBarrier/d87211.wgsl.expected.ir.msl
index 06ccebb..ec0ade4 100644
--- a/test/tint/builtins/gen/var/storageBarrier/d87211.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/storageBarrier/d87211.wgsl.expected.ir.msl
@@ -1,9 +1,9 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: storageBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void storageBarrier_d87211() {
+  threadgroup_barrier(mem_flags::mem_device);
+}
+kernel void compute_main() {
+  storageBarrier_d87211();
+}
diff --git a/test/tint/builtins/gen/var/subgroupBallot/7e6d0e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/subgroupBallot/7e6d0e.wgsl.expected.ir.msl
index 5bf6eab..c9de677 100644
--- a/test/tint/builtins/gen/var/subgroupBallot/7e6d0e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/subgroupBallot/7e6d0e.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%subgroupBallot_7e6d0e = func():void -> %b2 {
-  %b2 = block {
+%subgroupBallot_7e6d0e = func():void {
+  $B2: {
     %3:vec4<u32> = subgroupBallot
     %res:ptr<function, vec4<u32>, read_write> = var, %3
     %5:vec4<u32> = load %res
@@ -13,8 +13,8 @@
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %7:void = call %subgroupBallot_7e6d0e
     ret
   }
diff --git a/test/tint/builtins/gen/var/subgroupBroadcast/07e2d8.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/subgroupBroadcast/07e2d8.wgsl.expected.ir.msl
new file mode 100644
index 0000000..5b5d7df
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupBroadcast/07e2d8.wgsl.expected.ir.msl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
+}
+
+%subgroupBroadcast_07e2d8 = func():void {
+  $B2: {
+    %arg_0:ptr<function, f16, read_write> = var, 1.0h
+    %4:f16 = load %arg_0
+    %5:f16 = subgroupBroadcast %4, 1u
+    %res:ptr<function, f16, read_write> = var, %5
+    %7:f16 = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
+    %9:void = call %subgroupBroadcast_07e2d8
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/subgroupBroadcast/08beca.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/subgroupBroadcast/08beca.wgsl.expected.ir.msl
index a85f12b..379fa27 100644
--- a/test/tint/builtins/gen/var/subgroupBroadcast/08beca.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/subgroupBroadcast/08beca.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%subgroupBroadcast_08beca = func():void -> %b2 {
-  %b2 = block {
+%subgroupBroadcast_08beca = func():void {
+  $B2: {
     %arg_0:ptr<function, f32, read_write> = var, 1.0f
     %4:f32 = load %arg_0
     %5:f32 = subgroupBroadcast %4, 1u
@@ -15,8 +15,8 @@
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %9:void = call %subgroupBroadcast_08beca
     ret
   }
diff --git a/test/tint/builtins/gen/var/subgroupBroadcast/0f44e2.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/subgroupBroadcast/0f44e2.wgsl.expected.ir.msl
new file mode 100644
index 0000000..170bb64
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupBroadcast/0f44e2.wgsl.expected.ir.msl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
+}
+
+%subgroupBroadcast_0f44e2 = func():void {
+  $B2: {
+    %arg_0:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
+    %4:vec4<f16> = load %arg_0
+    %5:vec4<f16> = subgroupBroadcast %4, 1u
+    %res:ptr<function, vec4<f16>, read_write> = var, %5
+    %7:vec4<f16> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
+    %9:void = call %subgroupBroadcast_0f44e2
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/subgroupBroadcast/13f36c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/subgroupBroadcast/13f36c.wgsl.expected.ir.msl
new file mode 100644
index 0000000..d9cba9e
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupBroadcast/13f36c.wgsl.expected.ir.msl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
+}
+
+%subgroupBroadcast_13f36c = func():void {
+  $B2: {
+    %arg_0:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
+    %4:vec2<f16> = load %arg_0
+    %5:vec2<f16> = subgroupBroadcast %4, 1u
+    %res:ptr<function, vec2<f16>, read_write> = var, %5
+    %7:vec2<f16> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
+    %9:void = call %subgroupBroadcast_13f36c
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/subgroupBroadcast/1d79c7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/subgroupBroadcast/1d79c7.wgsl.expected.ir.msl
index d4a401f..844ebfd 100644
--- a/test/tint/builtins/gen/var/subgroupBroadcast/1d79c7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/subgroupBroadcast/1d79c7.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%subgroupBroadcast_1d79c7 = func():void -> %b2 {
-  %b2 = block {
+%subgroupBroadcast_1d79c7 = func():void {
+  $B2: {
     %arg_0:ptr<function, i32, read_write> = var, 1i
     %4:i32 = load %arg_0
     %5:i32 = subgroupBroadcast %4, 1u
@@ -15,8 +15,8 @@
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %9:void = call %subgroupBroadcast_1d79c7
     ret
   }
diff --git a/test/tint/builtins/gen/var/subgroupBroadcast/279027.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/subgroupBroadcast/279027.wgsl.expected.ir.msl
new file mode 100644
index 0000000..aac624f
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupBroadcast/279027.wgsl.expected.ir.msl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
+}
+
+%subgroupBroadcast_279027 = func():void {
+  $B2: {
+    %arg_0:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
+    %4:vec4<u32> = load %arg_0
+    %5:vec4<u32> = subgroupBroadcast %4, 1u
+    %res:ptr<function, vec4<u32>, read_write> = var, %5
+    %7:vec4<u32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
+    %9:void = call %subgroupBroadcast_279027
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/subgroupBroadcast/34fa3d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/subgroupBroadcast/34fa3d.wgsl.expected.ir.msl
new file mode 100644
index 0000000..0ad39ef
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupBroadcast/34fa3d.wgsl.expected.ir.msl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
+}
+
+%subgroupBroadcast_34fa3d = func():void {
+  $B2: {
+    %arg_0:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
+    %4:vec3<u32> = load %arg_0
+    %5:vec3<u32> = subgroupBroadcast %4, 1u
+    %res:ptr<function, vec3<u32>, read_write> = var, %5
+    %7:vec3<u32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
+    %9:void = call %subgroupBroadcast_34fa3d
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/subgroupBroadcast/3e6879.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/subgroupBroadcast/3e6879.wgsl.expected.ir.msl
new file mode 100644
index 0000000..4a15724
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupBroadcast/3e6879.wgsl.expected.ir.msl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec2<i32>, read_write> = var @binding_point(2, 0)
+}
+
+%subgroupBroadcast_3e6879 = func():void {
+  $B2: {
+    %arg_0:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
+    %4:vec2<i32> = load %arg_0
+    %5:vec2<i32> = subgroupBroadcast %4, 1u
+    %res:ptr<function, vec2<i32>, read_write> = var, %5
+    %7:vec2<i32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
+    %9:void = call %subgroupBroadcast_3e6879
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/subgroupBroadcast/41e5d7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/subgroupBroadcast/41e5d7.wgsl.expected.ir.msl
new file mode 100644
index 0000000..aac9e92
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupBroadcast/41e5d7.wgsl.expected.ir.msl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
+}
+
+%subgroupBroadcast_41e5d7 = func():void {
+  $B2: {
+    %arg_0:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
+    %4:vec3<f16> = load %arg_0
+    %5:vec3<f16> = subgroupBroadcast %4, 1u
+    %res:ptr<function, vec3<f16>, read_write> = var, %5
+    %7:vec3<f16> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
+    %9:void = call %subgroupBroadcast_41e5d7
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/subgroupBroadcast/4a4334.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/subgroupBroadcast/4a4334.wgsl.expected.ir.msl
new file mode 100644
index 0000000..84907de
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupBroadcast/4a4334.wgsl.expected.ir.msl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
+}
+
+%subgroupBroadcast_4a4334 = func():void {
+  $B2: {
+    %arg_0:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
+    %4:vec2<u32> = load %arg_0
+    %5:vec2<u32> = subgroupBroadcast %4, 1u
+    %res:ptr<function, vec2<u32>, read_write> = var, %5
+    %7:vec2<u32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
+    %9:void = call %subgroupBroadcast_4a4334
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/subgroupBroadcast/5196c8.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/subgroupBroadcast/5196c8.wgsl.expected.ir.msl
new file mode 100644
index 0000000..8ac7365
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupBroadcast/5196c8.wgsl.expected.ir.msl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%subgroupBroadcast_5196c8 = func():void {
+  $B2: {
+    %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
+    %4:vec2<f32> = load %arg_0
+    %5:vec2<f32> = subgroupBroadcast %4, 1u
+    %res:ptr<function, vec2<f32>, read_write> = var, %5
+    %7:vec2<f32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
+    %9:void = call %subgroupBroadcast_5196c8
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/subgroupBroadcast/912ff5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/subgroupBroadcast/912ff5.wgsl.expected.ir.msl
new file mode 100644
index 0000000..5881aad
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupBroadcast/912ff5.wgsl.expected.ir.msl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%subgroupBroadcast_912ff5 = func():void {
+  $B2: {
+    %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
+    %4:vec3<f32> = load %arg_0
+    %5:vec3<f32> = subgroupBroadcast %4, 1u
+    %res:ptr<function, vec3<f32>, read_write> = var, %5
+    %7:vec3<f32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
+    %9:void = call %subgroupBroadcast_912ff5
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/subgroupBroadcast/b7e93b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/subgroupBroadcast/b7e93b.wgsl.expected.ir.msl
new file mode 100644
index 0000000..be4e672
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupBroadcast/b7e93b.wgsl.expected.ir.msl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%subgroupBroadcast_b7e93b = func():void {
+  $B2: {
+    %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
+    %4:vec4<f32> = load %arg_0
+    %5:vec4<f32> = subgroupBroadcast %4, 1u
+    %res:ptr<function, vec4<f32>, read_write> = var, %5
+    %7:vec4<f32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
+    %9:void = call %subgroupBroadcast_b7e93b
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/subgroupBroadcast/c36fe1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/subgroupBroadcast/c36fe1.wgsl.expected.ir.msl
index 65e1b35..ce1b390 100644
--- a/test/tint/builtins/gen/var/subgroupBroadcast/c36fe1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/subgroupBroadcast/c36fe1.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%subgroupBroadcast_c36fe1 = func():void -> %b2 {
-  %b2 = block {
+%subgroupBroadcast_c36fe1 = func():void {
+  $B2: {
     %arg_0:ptr<function, u32, read_write> = var, 1u
     %4:u32 = load %arg_0
     %5:u32 = subgroupBroadcast %4, 1u
@@ -15,8 +15,8 @@
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %9:void = call %subgroupBroadcast_c36fe1
     ret
   }
diff --git a/test/tint/builtins/gen/var/subgroupBroadcast/e275c8.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/subgroupBroadcast/e275c8.wgsl.expected.ir.msl
new file mode 100644
index 0000000..b243846
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupBroadcast/e275c8.wgsl.expected.ir.msl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec3<i32>, read_write> = var @binding_point(2, 0)
+}
+
+%subgroupBroadcast_e275c8 = func():void {
+  $B2: {
+    %arg_0:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
+    %4:vec3<i32> = load %arg_0
+    %5:vec3<i32> = subgroupBroadcast %4, 1u
+    %res:ptr<function, vec3<i32>, read_write> = var, %5
+    %7:vec3<i32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
+    %9:void = call %subgroupBroadcast_e275c8
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/subgroupBroadcast/f637f9.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/subgroupBroadcast/f637f9.wgsl.expected.ir.msl
new file mode 100644
index 0000000..2dda944
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupBroadcast/f637f9.wgsl.expected.ir.msl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
+}
+
+%subgroupBroadcast_f637f9 = func():void {
+  $B2: {
+    %arg_0:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
+    %4:vec4<i32> = load %arg_0
+    %5:vec4<i32> = subgroupBroadcast %4, 1u
+    %res:ptr<function, vec4<i32>, read_write> = var, %5
+    %7:vec4<i32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
+    %9:void = call %subgroupBroadcast_f637f9
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/tan/244e2a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/tan/244e2a.wgsl.expected.ir.msl
index 115e444..5b86f72 100644
--- a/test/tint/builtins/gen/var/tan/244e2a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/tan/244e2a.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%tan_244e2a = func():void -> %b2 {
-  %b2 = block {
+%tan_244e2a = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %4:vec4<f32> = load %arg_0
     %5:vec4<f32> = tan %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %tan_244e2a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %tan_244e2a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %tan_244e2a
     ret
   }
diff --git a/test/tint/builtins/gen/var/tan/2f030e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/tan/2f030e.wgsl.expected.ir.msl
index 9189830..f1b9e9c 100644
--- a/test/tint/builtins/gen/var/tan/2f030e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/tan/2f030e.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%tan_2f030e = func():void -> %b2 {
-  %b2 = block {
+%tan_2f030e = func():void {
+  $B2: {
     %arg_0:ptr<function, f32, read_write> = var, 1.0f
     %4:f32 = load %arg_0
     %5:f32 = tan %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %tan_2f030e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %tan_2f030e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %tan_2f030e
     ret
   }
diff --git a/test/tint/builtins/gen/var/tan/539e54.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/tan/539e54.wgsl.expected.ir.msl
index 22f7322..a03f089 100644
--- a/test/tint/builtins/gen/var/tan/539e54.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/tan/539e54.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%tan_539e54 = func():void -> %b2 {
-  %b2 = block {
+%tan_539e54 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %4:vec4<f16> = load %arg_0
     %5:vec4<f16> = tan %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %tan_539e54
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %tan_539e54
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %tan_539e54
     ret
   }
diff --git a/test/tint/builtins/gen/var/tan/7ea104.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/tan/7ea104.wgsl.expected.ir.msl
index 9bbcd2d..a77fd63 100644
--- a/test/tint/builtins/gen/var/tan/7ea104.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/tan/7ea104.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%tan_7ea104 = func():void -> %b2 {
-  %b2 = block {
+%tan_7ea104 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %4:vec3<f32> = load %arg_0
     %5:vec3<f32> = tan %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %tan_7ea104
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %tan_7ea104
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %tan_7ea104
     ret
   }
diff --git a/test/tint/builtins/gen/var/tan/8ce3e9.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/tan/8ce3e9.wgsl.expected.ir.msl
index 162ebe2..3faa8c9 100644
--- a/test/tint/builtins/gen/var/tan/8ce3e9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/tan/8ce3e9.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%tan_8ce3e9 = func():void -> %b2 {
-  %b2 = block {
+%tan_8ce3e9 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %4:vec2<f32> = load %arg_0
     %5:vec2<f32> = tan %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %tan_8ce3e9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %tan_8ce3e9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %tan_8ce3e9
     ret
   }
diff --git a/test/tint/builtins/gen/var/tan/9f7c9c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/tan/9f7c9c.wgsl.expected.ir.msl
index 5e3f50c..43387ff 100644
--- a/test/tint/builtins/gen/var/tan/9f7c9c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/tan/9f7c9c.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%tan_9f7c9c = func():void -> %b2 {
-  %b2 = block {
+%tan_9f7c9c = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %4:vec2<f16> = load %arg_0
     %5:vec2<f16> = tan %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %tan_9f7c9c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %tan_9f7c9c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %tan_9f7c9c
     ret
   }
diff --git a/test/tint/builtins/gen/var/tan/d4d491.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/tan/d4d491.wgsl.expected.ir.msl
index a3b9ff4..d3b03ca 100644
--- a/test/tint/builtins/gen/var/tan/d4d491.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/tan/d4d491.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%tan_d4d491 = func():void -> %b2 {
-  %b2 = block {
+%tan_d4d491 = func():void {
+  $B2: {
     %arg_0:ptr<function, f16, read_write> = var, 1.0h
     %4:f16 = load %arg_0
     %5:f16 = tan %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %tan_d4d491
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %tan_d4d491
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %tan_d4d491
     ret
   }
diff --git a/test/tint/builtins/gen/var/tan/db0456.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/tan/db0456.wgsl.expected.ir.msl
index 6f51fa7..289579e 100644
--- a/test/tint/builtins/gen/var/tan/db0456.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/tan/db0456.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%tan_db0456 = func():void -> %b2 {
-  %b2 = block {
+%tan_db0456 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %4:vec3<f16> = load %arg_0
     %5:vec3<f16> = tan %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %tan_db0456
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %tan_db0456
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %tan_db0456
     ret
   }
diff --git a/test/tint/builtins/gen/var/tanh/06a4fe.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/tanh/06a4fe.wgsl.expected.ir.msl
index 78cf024..f9ce377 100644
--- a/test/tint/builtins/gen/var/tanh/06a4fe.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/tanh/06a4fe.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%tanh_06a4fe = func():void -> %b2 {
-  %b2 = block {
+%tanh_06a4fe = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.0h)
     %4:vec3<f16> = load %arg_0
     %5:vec3<f16> = tanh %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %tanh_06a4fe
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %tanh_06a4fe
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %tanh_06a4fe
     ret
   }
diff --git a/test/tint/builtins/gen/var/tanh/5663c5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/tanh/5663c5.wgsl.expected.ir.msl
index 6698f73..f7c0d06 100644
--- a/test/tint/builtins/gen/var/tanh/5663c5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/tanh/5663c5.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%tanh_5663c5 = func():void -> %b2 {
-  %b2 = block {
+%tanh_5663c5 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %4:vec4<f32> = load %arg_0
     %5:vec4<f32> = tanh %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %tanh_5663c5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %tanh_5663c5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %tanh_5663c5
     ret
   }
diff --git a/test/tint/builtins/gen/var/tanh/5724b3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/tanh/5724b3.wgsl.expected.ir.msl
index deadc3f..9b2f253 100644
--- a/test/tint/builtins/gen/var/tanh/5724b3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/tanh/5724b3.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%tanh_5724b3 = func():void -> %b2 {
-  %b2 = block {
+%tanh_5724b3 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %4:vec2<f32> = load %arg_0
     %5:vec2<f32> = tanh %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %tanh_5724b3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %tanh_5724b3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %tanh_5724b3
     ret
   }
diff --git a/test/tint/builtins/gen/var/tanh/5b19af.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/tanh/5b19af.wgsl.expected.ir.msl
index 84fcdcf..3d455c3 100644
--- a/test/tint/builtins/gen/var/tanh/5b19af.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/tanh/5b19af.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%tanh_5b19af = func():void -> %b2 {
-  %b2 = block {
+%tanh_5b19af = func():void {
+  $B2: {
     %arg_0:ptr<function, f16, read_write> = var, 1.0h
     %4:f16 = load %arg_0
     %5:f16 = tanh %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %tanh_5b19af
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %tanh_5b19af
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %tanh_5b19af
     ret
   }
diff --git a/test/tint/builtins/gen/var/tanh/6d105a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/tanh/6d105a.wgsl.expected.ir.msl
index 79428ed..a0a001f 100644
--- a/test/tint/builtins/gen/var/tanh/6d105a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/tanh/6d105a.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%tanh_6d105a = func():void -> %b2 {
-  %b2 = block {
+%tanh_6d105a = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.0h)
     %4:vec2<f16> = load %arg_0
     %5:vec2<f16> = tanh %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %tanh_6d105a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %tanh_6d105a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %tanh_6d105a
     ret
   }
diff --git a/test/tint/builtins/gen/var/tanh/9f9fb9.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/tanh/9f9fb9.wgsl.expected.ir.msl
index 8e341a2..2880a7e 100644
--- a/test/tint/builtins/gen/var/tanh/9f9fb9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/tanh/9f9fb9.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%tanh_9f9fb9 = func():void -> %b2 {
-  %b2 = block {
+%tanh_9f9fb9 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %4:vec3<f32> = load %arg_0
     %5:vec3<f32> = tanh %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %tanh_9f9fb9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %tanh_9f9fb9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %tanh_9f9fb9
     ret
   }
diff --git a/test/tint/builtins/gen/var/tanh/c15fdb.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/tanh/c15fdb.wgsl.expected.ir.msl
index 1429384..115b35d 100644
--- a/test/tint/builtins/gen/var/tanh/c15fdb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/tanh/c15fdb.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%tanh_c15fdb = func():void -> %b2 {
-  %b2 = block {
+%tanh_c15fdb = func():void {
+  $B2: {
     %arg_0:ptr<function, f32, read_write> = var, 1.0f
     %4:f32 = load %arg_0
     %5:f32 = tanh %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %tanh_c15fdb
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %tanh_c15fdb
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %tanh_c15fdb
     ret
   }
diff --git a/test/tint/builtins/gen/var/tanh/e8efb3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/tanh/e8efb3.wgsl.expected.ir.msl
index fc8e221..5f17487 100644
--- a/test/tint/builtins/gen/var/tanh/e8efb3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/tanh/e8efb3.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%tanh_e8efb3 = func():void -> %b2 {
-  %b2 = block {
+%tanh_e8efb3 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.0h)
     %4:vec4<f16> = load %arg_0
     %5:vec4<f16> = tanh %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %tanh_e8efb3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %tanh_e8efb3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %tanh_e8efb3
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureBarrier/3d0f7e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureBarrier/3d0f7e.wgsl.expected.ir.msl
index cdf158b..f556d81 100644
--- a/test/tint/builtins/gen/var/textureBarrier/3d0f7e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureBarrier/3d0f7e.wgsl.expected.ir.msl
@@ -1,9 +1,9 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureBarrier_3d0f7e() {
+  threadgroup_barrier(mem_flags::mem_texture);
+}
+kernel void compute_main() {
+  textureBarrier_3d0f7e();
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/00229f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/00229f.wgsl.expected.ir.msl
new file mode 100644
index 0000000..849a6c6
--- /dev/null
+++ b/test/tint/builtins/gen/var/textureDimensions/00229f.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_3d<r8unorm, read>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
+}
+
+%textureDimensions_00229f = func():void {
+  $B2: {
+    %4:texture_storage_3d<r8unorm, read> = load %arg_0
+    %5:vec3<u32> = textureDimensions %4
+    %res:ptr<function, vec3<u32>, read_write> = var, %5
+    %7:vec3<u32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %textureDimensions_00229f
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %textureDimensions_00229f
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %textureDimensions_00229f
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/textureDimensions/00348c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/00348c.wgsl.expected.ir.msl
index 8d68a23..6e14327 100644
--- a/test/tint/builtins/gen/var/textureDimensions/00348c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/00348c.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_multisampled_2d<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_00348c = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_00348c = func():void {
+  $B2: {
     %4:texture_multisampled_2d<i32> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_00348c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_00348c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_00348c
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/01e21e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/01e21e.wgsl.expected.ir.msl
index ffa7c60..4ef958d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/01e21e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/01e21e.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rg32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_01e21e = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_01e21e = func():void {
+  $B2: {
     %4:texture_storage_1d<rg32uint, read_write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_01e21e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_01e21e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_01e21e
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/01edb1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/01edb1.wgsl.expected.ir.msl
index f60ef0a..76d62ec 100644
--- a/test/tint/builtins/gen/var/textureDimensions/01edb1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/01edb1.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_01edb1 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_01edb1 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba8uint, read_write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_01edb1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_01edb1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_01edb1
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/022903.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/022903.wgsl.expected.ir.msl
index 8aa7d89..b11b4aa 100644
--- a/test/tint/builtins/gen/var/textureDimensions/022903.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/022903.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_1d<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_022903 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_022903 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:texture_1d<i32> = load %arg_0
     %6:u32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureDimensions_022903
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureDimensions_022903
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureDimensions_022903
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/0276ec.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/0276ec.wgsl.expected.ir.msl
index 4566e1d..4cfbfbf 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0276ec.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/0276ec.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba16uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_0276ec = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_0276ec = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba16uint, read_write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_0276ec
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_0276ec
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_0276ec
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/029589.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/029589.wgsl.expected.ir.msl
index 757d7e1..b729de4 100644
--- a/test/tint/builtins/gen/var/textureDimensions/029589.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/029589.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_029589 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_029589 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rg32float, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_029589
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_029589
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_029589
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/0329b0.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/0329b0.wgsl.expected.ir.msl
index 8a14bb0..e8cd0aa 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0329b0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/0329b0.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba16sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_0329b0 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_0329b0 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba16sint, read> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_0329b0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_0329b0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_0329b0
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/033195.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/033195.wgsl.expected.ir.msl
index e49dfb0..66ff65b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/033195.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/033195.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba16float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_033195 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_033195 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba16float, read_write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_033195
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_033195
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_033195
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/033ea7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/033ea7.wgsl.expected.ir.msl
index 4c507bc..94e7998 100644
--- a/test/tint/builtins/gen/var/textureDimensions/033ea7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/033ea7.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8unorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_033ea7 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_033ea7 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba8unorm, read> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_033ea7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_033ea7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_033ea7
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/038847.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/038847.wgsl.expected.ir.msl
index 1a095bd..095c18f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/038847.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/038847.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_038847 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_038847 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba8sint, read_write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_038847
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_038847
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_038847
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/03f81e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/03f81e.wgsl.expected.ir.msl
index 34ff61d..2c6ddcf 100644
--- a/test/tint/builtins/gen/var/textureDimensions/03f81e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/03f81e.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_03f81e = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_03f81e = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba8snorm, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_03f81e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_03f81e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_03f81e
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/07f1ba.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/07f1ba.wgsl.expected.ir.msl
index 0aa01df..7bd43fe 100644
--- a/test/tint/builtins/gen/var/textureDimensions/07f1ba.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/07f1ba.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba16float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_07f1ba = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_07f1ba = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba16float, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_07f1ba
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_07f1ba
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_07f1ba
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/088918.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/088918.wgsl.expected.ir.msl
index 9fa6c50..8b222cb 100644
--- a/test/tint/builtins/gen/var/textureDimensions/088918.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/088918.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8unorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_088918 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_088918 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba8unorm, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_088918
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_088918
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_088918
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/0890c6.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/0890c6.wgsl.expected.ir.msl
index e4c3082..6cec13e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0890c6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/0890c6.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_0890c6 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_0890c6 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:texture_3d<f32> = load %arg_0
     %6:u32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureDimensions_0890c6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureDimensions_0890c6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureDimensions_0890c6
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/08e371.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/08e371.wgsl.expected.ir.msl
index d5226e8..b091661 100644
--- a/test/tint/builtins/gen/var/textureDimensions/08e371.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/08e371.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rg32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_08e371 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_08e371 = func():void {
+  $B2: {
     %4:texture_storage_2d<rg32sint, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_08e371
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_08e371
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_08e371
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/09140b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/09140b.wgsl.expected.ir.msl
index d24c56c..7cecfa5 100644
--- a/test/tint/builtins/gen/var/textureDimensions/09140b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/09140b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba32uint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_09140b = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_09140b = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba32uint, write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_09140b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_09140b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_09140b
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/0973c9.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/0973c9.wgsl.expected.ir.msl
index 8ab572f..939d739 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0973c9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/0973c9.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba16uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_0973c9 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_0973c9 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba16uint, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_0973c9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_0973c9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_0973c9
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/0baa0d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/0baa0d.wgsl.expected.ir.msl
index 7d67b05..3fe3ba8 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0baa0d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/0baa0d.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<r32float, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_0baa0d = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_0baa0d = func():void {
+  $B2: {
     %4:texture_storage_2d<r32float, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_0baa0d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_0baa0d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_0baa0d
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/0c0b0c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/0c0b0c.wgsl.expected.ir.msl
index de886b1..2b0db04 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0c0b0c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/0c0b0c.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba16float, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_0c0b0c = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_0c0b0c = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba16float, write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_0c0b0c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_0c0b0c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_0c0b0c
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/0d4a7c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/0d4a7c.wgsl.expected.ir.msl
index 1ca0ae8..587df6b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0d4a7c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/0d4a7c.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_0d4a7c = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_0d4a7c = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba32uint, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_0d4a7c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_0d4a7c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_0d4a7c
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/0de70c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/0de70c.wgsl.expected.ir.msl
index 7a8d115..6abd491 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0de70c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/0de70c.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_0de70c = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_0de70c = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba8unorm, read_write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_0de70c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_0de70c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_0de70c
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/0ff9a4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/0ff9a4.wgsl.expected.ir.msl
index b8ac386..9674681 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0ff9a4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/0ff9a4.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_cube_array, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_0ff9a4 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_0ff9a4 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:texture_depth_cube_array = load %arg_0
     %6:i32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureDimensions_0ff9a4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureDimensions_0ff9a4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureDimensions_0ff9a4
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/135176.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/135176.wgsl.expected.ir.msl
index fec379a..8bf1674 100644
--- a/test/tint/builtins/gen/var/textureDimensions/135176.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/135176.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_135176 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_135176 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<r32float, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_135176
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_135176
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_135176
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/13f8db.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/13f8db.wgsl.expected.ir.msl
index 3ecb6ef..8bf539b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/13f8db.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/13f8db.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_13f8db = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_13f8db = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:texture_2d<f32> = load %arg_0
     %6:u32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureDimensions_13f8db
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureDimensions_13f8db
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureDimensions_13f8db
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/1417dd.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/1417dd.wgsl.expected.ir.msl
index 29807be..8a98008 100644
--- a/test/tint/builtins/gen/var/textureDimensions/1417dd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/1417dd.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba16sint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_1417dd = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_1417dd = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba16sint, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_1417dd
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_1417dd
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_1417dd
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/15aa17.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/15aa17.wgsl.expected.ir.msl
index 2409c0a..0d1b2e3 100644
--- a/test/tint/builtins/gen/var/textureDimensions/15aa17.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/15aa17.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba32sint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_15aa17 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_15aa17 = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba32sint, write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_15aa17
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_15aa17
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_15aa17
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/15b577.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/15b577.wgsl.expected.ir.msl
index 1942ee8..df6e3c2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/15b577.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/15b577.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_15b577 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_15b577 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:texture_2d<u32> = load %arg_0
     %6:i32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureDimensions_15b577
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureDimensions_15b577
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureDimensions_15b577
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/18160d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/18160d.wgsl.expected.ir.msl
new file mode 100644
index 0000000..6c1d710
--- /dev/null
+++ b/test/tint/builtins/gen/var/textureDimensions/18160d.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_2d<r8unorm, read_write>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
+}
+
+%textureDimensions_18160d = func():void {
+  $B2: {
+    %4:texture_storage_2d<r8unorm, read_write> = load %arg_0
+    %5:vec2<u32> = textureDimensions %4
+    %res:ptr<function, vec2<u32>, read_write> = var, %5
+    %7:vec2<u32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %textureDimensions_18160d
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %textureDimensions_18160d
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %textureDimensions_18160d
+    ret
+  }
+}
+
+invalid access control for storage texture
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/textureDimensions/18f19f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/18f19f.wgsl.expected.ir.msl
new file mode 100644
index 0000000..5c1e999
--- /dev/null
+++ b/test/tint/builtins/gen/var/textureDimensions/18f19f.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_2d<r8unorm, write>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
+}
+
+%textureDimensions_18f19f = func():void {
+  $B2: {
+    %4:texture_storage_2d<r8unorm, write> = load %arg_0
+    %5:vec2<u32> = textureDimensions %4
+    %res:ptr<function, vec2<u32>, read_write> = var, %5
+    %7:vec2<u32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %textureDimensions_18f19f
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %textureDimensions_18f19f
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %textureDimensions_18f19f
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/textureDimensions/1a2be7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/1a2be7.wgsl.expected.ir.msl
index 7cd2b86..f4d7661 100644
--- a/test/tint/builtins/gen/var/textureDimensions/1a2be7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/1a2be7.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_1a2be7 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_1a2be7 = func():void {
+  $B2: {
     %4:texture_3d<i32> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_1a2be7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_1a2be7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_1a2be7
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/1b720f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/1b720f.wgsl.expected.ir.msl
index a738c11..087679b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/1b720f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/1b720f.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba16sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_1b720f = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_1b720f = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba16sint, read> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_1b720f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_1b720f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_1b720f
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/1bc428.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/1bc428.wgsl.expected.ir.msl
index a68b1dd..f731c83 100644
--- a/test/tint/builtins/gen/var/textureDimensions/1bc428.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/1bc428.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_1bc428 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_1bc428 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:texture_3d<f32> = load %arg_0
     %6:i32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureDimensions_1bc428
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureDimensions_1bc428
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureDimensions_1bc428
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/1bd78c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/1bd78c.wgsl.expected.ir.msl
index 8e949e2..ceb7d16 100644
--- a/test/tint/builtins/gen/var/textureDimensions/1bd78c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/1bd78c.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_1bd78c = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_1bd78c = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:texture_2d<f32> = load %arg_0
     %6:i32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureDimensions_1bd78c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureDimensions_1bd78c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureDimensions_1bd78c
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/1e4024.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/1e4024.wgsl.expected.ir.msl
index 1a146fc..e098f08 100644
--- a/test/tint/builtins/gen/var/textureDimensions/1e4024.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/1e4024.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<r32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_1e4024 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_1e4024 = func():void {
+  $B2: {
     %4:texture_storage_2d<r32float, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_1e4024
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_1e4024
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_1e4024
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/20eaad.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/20eaad.wgsl.expected.ir.msl
index 46a827c..f40f3ce 100644
--- a/test/tint/builtins/gen/var/textureDimensions/20eaad.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/20eaad.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba16sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_20eaad = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_20eaad = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba16sint, read_write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_20eaad
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_20eaad
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_20eaad
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/20ecef.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/20ecef.wgsl.expected.ir.msl
index c4765b3..a316b4f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/20ecef.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/20ecef.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<r32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_20ecef = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_20ecef = func():void {
+  $B2: {
     %4:texture_storage_1d<r32float, read_write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_20ecef
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_20ecef
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_20ecef
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/212362.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/212362.wgsl.expected.ir.msl
index d514f3c..9ae2b94 100644
--- a/test/tint/builtins/gen/var/textureDimensions/212362.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/212362.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<r32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_212362 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_212362 = func():void {
+  $B2: {
     %4:texture_storage_1d<r32float, read> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_212362
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_212362
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_212362
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/224113.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/224113.wgsl.expected.ir.msl
index f0a7bc7..01a873d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/224113.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/224113.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8unorm, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_224113 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_224113 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba8unorm, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_224113
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_224113
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_224113
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/22b5b6.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/22b5b6.wgsl.expected.ir.msl
index f9989c1..448dd16 100644
--- a/test/tint/builtins/gen/var/textureDimensions/22b5b6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/22b5b6.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube_array<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_22b5b6 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_22b5b6 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:texture_cube_array<u32> = load %arg_0
     %6:i32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureDimensions_22b5b6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureDimensions_22b5b6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureDimensions_22b5b6
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/24db07.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/24db07.wgsl.expected.ir.msl
index d8558ea..a6dfb5c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/24db07.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/24db07.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_24db07 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_24db07 = func():void {
+  $B2: {
     %4:texture_2d<f32> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_24db07
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_24db07
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_24db07
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/25d284.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/25d284.wgsl.expected.ir.msl
new file mode 100644
index 0000000..0da591d
--- /dev/null
+++ b/test/tint/builtins/gen/var/textureDimensions/25d284.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_2d_array<r8unorm, write>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
+}
+
+%textureDimensions_25d284 = func():void {
+  $B2: {
+    %4:texture_storage_2d_array<r8unorm, write> = load %arg_0
+    %5:vec2<u32> = textureDimensions %4
+    %res:ptr<function, vec2<u32>, read_write> = var, %5
+    %7:vec2<u32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %textureDimensions_25d284
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %textureDimensions_25d284
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %textureDimensions_25d284
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/textureDimensions/2674d8.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/2674d8.wgsl.expected.ir.msl
index 3f48aee..d004de9 100644
--- a/test/tint/builtins/gen/var/textureDimensions/2674d8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/2674d8.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32uint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_2674d8 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_2674d8 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rg32uint, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_2674d8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_2674d8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_2674d8
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/268ddb.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/268ddb.wgsl.expected.ir.msl
index 40f698d..f3ace0c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/268ddb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/268ddb.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_268ddb = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_268ddb = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba32uint, read> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_268ddb
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_268ddb
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_268ddb
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/26d6bf.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/26d6bf.wgsl.expected.ir.msl
index 029b3f6..c1f845d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/26d6bf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/26d6bf.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_1d<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_26d6bf = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_26d6bf = func():void {
+  $B2: {
     %4:texture_1d<f32> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_26d6bf
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_26d6bf
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_26d6bf
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/282978.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/282978.wgsl.expected.ir.msl
new file mode 100644
index 0000000..44c95a1
--- /dev/null
+++ b/test/tint/builtins/gen/var/textureDimensions/282978.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_3d<r8unorm, read_write>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
+}
+
+%textureDimensions_282978 = func():void {
+  $B2: {
+    %4:texture_storage_3d<r8unorm, read_write> = load %arg_0
+    %5:vec3<u32> = textureDimensions %4
+    %res:ptr<function, vec3<u32>, read_write> = var, %5
+    %7:vec3<u32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %textureDimensions_282978
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %textureDimensions_282978
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %textureDimensions_282978
+    ret
+  }
+}
+
+invalid access control for storage texture
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/textureDimensions/283b58.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/283b58.wgsl.expected.ir.msl
index 60f523a..e76cc22 100644
--- a/test/tint/builtins/gen/var/textureDimensions/283b58.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/283b58.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_283b58 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_283b58 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba32float, read_write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_283b58
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_283b58
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_283b58
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/284c27.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/284c27.wgsl.expected.ir.msl
index 84f17ba..7d0faea 100644
--- a/test/tint/builtins/gen/var/textureDimensions/284c27.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/284c27.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rg32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_284c27 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_284c27 = func():void {
+  $B2: {
     %4:texture_storage_1d<rg32float, read> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_284c27
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_284c27
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_284c27
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/2a58b7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/2a58b7.wgsl.expected.ir.msl
index fedce92..ccf4364 100644
--- a/test/tint/builtins/gen/var/textureDimensions/2a58b7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/2a58b7.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_2a58b7 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_2a58b7 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba16sint, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_2a58b7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_2a58b7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_2a58b7
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/2bafdf.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/2bafdf.wgsl.expected.ir.msl
index 8e066e4..9760498 100644
--- a/test/tint/builtins/gen/var/textureDimensions/2bafdf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/2bafdf.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<bgra8unorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_2bafdf = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_2bafdf = func():void {
+  $B2: {
     %4:texture_storage_1d<bgra8unorm, read> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_2bafdf
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_2bafdf
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_2bafdf
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/2dc5c5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/2dc5c5.wgsl.expected.ir.msl
index d183f63..a95e06f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/2dc5c5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/2dc5c5.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_2dc5c5 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_2dc5c5 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba8uint, read> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_2dc5c5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_2dc5c5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_2dc5c5
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/2e443d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/2e443d.wgsl.expected.ir.msl
index 74fd598..e43cfec 100644
--- a/test/tint/builtins/gen/var/textureDimensions/2e443d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/2e443d.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_2e443d = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_2e443d = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:texture_2d<i32> = load %arg_0
     %6:i32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureDimensions_2e443d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureDimensions_2e443d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureDimensions_2e443d
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/2fd2a4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/2fd2a4.wgsl.expected.ir.msl
index 9db47a5..d3407e6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/2fd2a4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/2fd2a4.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_2fd2a4 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_2fd2a4 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:texture_2d_array<f32> = load %arg_0
     %6:i32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureDimensions_2fd2a4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureDimensions_2fd2a4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureDimensions_2fd2a4
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/2ff32a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/2ff32a.wgsl.expected.ir.msl
index 61ffb89..5d4bba5 100644
--- a/test/tint/builtins/gen/var/textureDimensions/2ff32a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/2ff32a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<r32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_2ff32a = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_2ff32a = func():void {
+  $B2: {
     %4:texture_storage_3d<r32float, read> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_2ff32a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_2ff32a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_2ff32a
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/305dd5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/305dd5.wgsl.expected.ir.msl
index 09ecd93..7ebfbd1 100644
--- a/test/tint/builtins/gen/var/textureDimensions/305dd5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/305dd5.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_305dd5 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_305dd5 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<r32uint, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_305dd5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_305dd5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_305dd5
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/31799c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/31799c.wgsl.expected.ir.msl
index da2c208..fb3c196 100644
--- a/test/tint/builtins/gen/var/textureDimensions/31799c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/31799c.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<r32uint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_31799c = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_31799c = func():void {
+  $B2: {
     %4:texture_storage_3d<r32uint, write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_31799c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_31799c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_31799c
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/31d00d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/31d00d.wgsl.expected.ir.msl
index a3dc5be..01b52fd 100644
--- a/test/tint/builtins/gen/var/textureDimensions/31d00d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/31d00d.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<r32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_31d00d = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_31d00d = func():void {
+  $B2: {
     %4:texture_storage_3d<r32uint, read_write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_31d00d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_31d00d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_31d00d
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/325338.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/325338.wgsl.expected.ir.msl
index c92b5fa..6163677 100644
--- a/test/tint/builtins/gen/var/textureDimensions/325338.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/325338.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_325338 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_325338 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba32sint, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_325338
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_325338
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_325338
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/346fee.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/346fee.wgsl.expected.ir.msl
index ca1efaf..35f9e32 100644
--- a/test/tint/builtins/gen/var/textureDimensions/346fee.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/346fee.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube_array<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_346fee = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_346fee = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:texture_cube_array<u32> = load %arg_0
     %6:u32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureDimensions_346fee
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureDimensions_346fee
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureDimensions_346fee
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/35a7e5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/35a7e5.wgsl.expected.ir.msl
index 0673369..dac4208 100644
--- a/test/tint/builtins/gen/var/textureDimensions/35a7e5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/35a7e5.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba16uint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_35a7e5 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_35a7e5 = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba16uint, write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_35a7e5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_35a7e5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_35a7e5
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/35ee69.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/35ee69.wgsl.expected.ir.msl
index cec6f94..2d3dfdc 100644
--- a/test/tint/builtins/gen/var/textureDimensions/35ee69.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/35ee69.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rg32uint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_35ee69 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_35ee69 = func():void {
+  $B2: {
     %4:texture_storage_3d<rg32uint, write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_35ee69
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_35ee69
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_35ee69
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/36eeb7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/36eeb7.wgsl.expected.ir.msl
index 63bd17a..62d243b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/36eeb7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/36eeb7.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_36eeb7 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_36eeb7 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba32uint, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_36eeb7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_36eeb7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_36eeb7
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/378a65.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/378a65.wgsl.expected.ir.msl
index 697e131..3900345 100644
--- a/test/tint/builtins/gen/var/textureDimensions/378a65.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/378a65.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8sint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_378a65 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_378a65 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba8sint, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_378a65
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_378a65
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_378a65
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/382b16.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/382b16.wgsl.expected.ir.msl
index ee50c25..4ca193c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/382b16.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/382b16.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_382b16 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_382b16 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:texture_cube<f32> = load %arg_0
     %6:u32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureDimensions_382b16
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureDimensions_382b16
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureDimensions_382b16
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/3834f8.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/3834f8.wgsl.expected.ir.msl
index 29b7ff2..258694e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3834f8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/3834f8.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_3834f8 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_3834f8 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<r32sint, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_3834f8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_3834f8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_3834f8
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/38c9ca.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/38c9ca.wgsl.expected.ir.msl
index 168752a..0a6c1af 100644
--- a/test/tint/builtins/gen/var/textureDimensions/38c9ca.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/38c9ca.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_38c9ca = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_38c9ca = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba16float, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_38c9ca
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_38c9ca
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_38c9ca
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/3963d0.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/3963d0.wgsl.expected.ir.msl
index f04c426..ca082b8 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3963d0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/3963d0.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube_array<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_3963d0 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_3963d0 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:texture_cube_array<i32> = load %arg_0
     %6:u32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureDimensions_3963d0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureDimensions_3963d0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureDimensions_3963d0
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/397dab.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/397dab.wgsl.expected.ir.msl
index f1c6b33..1e11e55 100644
--- a/test/tint/builtins/gen/var/textureDimensions/397dab.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/397dab.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_397dab = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_397dab = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8uint, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_397dab
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_397dab
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_397dab
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/3a5bb1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/3a5bb1.wgsl.expected.ir.msl
index e5e0108..a025279 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3a5bb1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/3a5bb1.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba32float, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_3a5bb1 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_3a5bb1 = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba32float, write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_3a5bb1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_3a5bb1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_3a5bb1
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/3a7b69.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/3a7b69.wgsl.expected.ir.msl
index 3a5a0d0..120e276 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3a7b69.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/3a7b69.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8unorm, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_3a7b69 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_3a7b69 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8unorm, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_3a7b69
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_3a7b69
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_3a7b69
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/3af3e7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/3af3e7.wgsl.expected.ir.msl
index ba19efe..c68bbe6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3af3e7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/3af3e7.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8unorm, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_3af3e7 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_3af3e7 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba8unorm, write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_3af3e7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_3af3e7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_3af3e7
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/3b38f6.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/3b38f6.wgsl.expected.ir.msl
index d85b497..6dacb37 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3b38f6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/3b38f6.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_3b38f6 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_3b38f6 = func():void {
+  $B2: {
     %4:texture_depth_2d = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_3b38f6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_3b38f6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_3b38f6
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/3baab5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/3baab5.wgsl.expected.ir.msl
index be36858..0b67c6a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3baab5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/3baab5.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8uint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_3baab5 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_3baab5 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8uint, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_3baab5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_3baab5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_3baab5
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/3bf12a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/3bf12a.wgsl.expected.ir.msl
index 86ed6ea..6d8c462 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3bf12a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/3bf12a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_3bf12a = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_3bf12a = func():void {
+  $B2: {
     %4:texture_storage_2d_array<r32float, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_3bf12a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_3bf12a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_3bf12a
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/3c66f0.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/3c66f0.wgsl.expected.ir.msl
index 069f91c..2c15c17 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3c66f0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/3c66f0.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube_array<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_3c66f0 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_3c66f0 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:texture_cube_array<i32> = load %arg_0
     %6:i32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureDimensions_3c66f0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureDimensions_3c66f0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureDimensions_3c66f0
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/3f3474.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/3f3474.wgsl.expected.ir.msl
index 3a31398..4bf0dfb 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3f3474.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/3f3474.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_multisampled_2d<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_3f3474 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_3f3474 = func():void {
+  $B2: {
     %4:texture_multisampled_2d<f32> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_3f3474
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_3f3474
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_3f3474
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/3fc3dc.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/3fc3dc.wgsl.expected.ir.msl
index 00b3e10..54978b2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3fc3dc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/3fc3dc.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_3fc3dc = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_3fc3dc = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:texture_2d_array<f32> = load %arg_0
     %6:u32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureDimensions_3fc3dc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureDimensions_3fc3dc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureDimensions_3fc3dc
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/3ff0a5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/3ff0a5.wgsl.expected.ir.msl
index 886cdeb..c51a938 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3ff0a5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/3ff0a5.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_3ff0a5 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_3ff0a5 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<r32sint, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_3ff0a5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_3ff0a5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_3ff0a5
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/40c671.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/40c671.wgsl.expected.ir.msl
index 2530c03..25a3c15 100644
--- a/test/tint/builtins/gen/var/textureDimensions/40c671.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/40c671.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8sint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_40c671 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_40c671 = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba8sint, write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_40c671
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_40c671
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_40c671
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/40da20.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/40da20.wgsl.expected.ir.msl
new file mode 100644
index 0000000..208291e
--- /dev/null
+++ b/test/tint/builtins/gen/var/textureDimensions/40da20.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_2d<r8unorm, read>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
+}
+
+%textureDimensions_40da20 = func():void {
+  $B2: {
+    %4:texture_storage_2d<r8unorm, read> = load %arg_0
+    %5:vec2<u32> = textureDimensions %4
+    %res:ptr<function, vec2<u32>, read_write> = var, %5
+    %7:vec2<u32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %textureDimensions_40da20
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %textureDimensions_40da20
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %textureDimensions_40da20
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/textureDimensions/40ecf4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/40ecf4.wgsl.expected.ir.msl
index d33ac2d..c705907 100644
--- a/test/tint/builtins/gen/var/textureDimensions/40ecf4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/40ecf4.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16uint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_40ecf4 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_40ecf4 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba16uint, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_40ecf4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_40ecf4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_40ecf4
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/41545f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/41545f.wgsl.expected.ir.msl
index fc02b5c..2fa16a6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/41545f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/41545f.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32uint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_41545f = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_41545f = func():void {
+  $B2: {
     %4:texture_storage_2d_array<r32uint, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_41545f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_41545f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_41545f
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/423519.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/423519.wgsl.expected.ir.msl
index c5ab335..53deb29 100644
--- a/test/tint/builtins/gen/var/textureDimensions/423519.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/423519.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<r32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_423519 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_423519 = func():void {
+  $B2: {
     %4:texture_storage_3d<r32uint, read> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_423519
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_423519
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_423519
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/427f92.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/427f92.wgsl.expected.ir.msl
index 2be9ad1..656fd03 100644
--- a/test/tint/builtins/gen/var/textureDimensions/427f92.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/427f92.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_427f92 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_427f92 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba16uint, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_427f92
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_427f92
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_427f92
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/439651.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/439651.wgsl.expected.ir.msl
index 094d43a..0217d47 100644
--- a/test/tint/builtins/gen/var/textureDimensions/439651.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/439651.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rg32sint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_439651 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_439651 = func():void {
+  $B2: {
     %4:texture_storage_2d<rg32sint, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_439651
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_439651
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_439651
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/445376.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/445376.wgsl.expected.ir.msl
index a13d727..a204183 100644
--- a/test/tint/builtins/gen/var/textureDimensions/445376.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/445376.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_445376 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_445376 = func():void {
+  $B2: {
     %4:texture_2d_array<u32> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_445376
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_445376
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_445376
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/44b358.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/44b358.wgsl.expected.ir.msl
index a21e3e8..43f5263 100644
--- a/test/tint/builtins/gen/var/textureDimensions/44b358.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/44b358.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba32uint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_44b358 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_44b358 = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba32uint, write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_44b358
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_44b358
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_44b358
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/452fc1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/452fc1.wgsl.expected.ir.msl
index 2bf2104..5745a04 100644
--- a/test/tint/builtins/gen/var/textureDimensions/452fc1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/452fc1.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32uint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_452fc1 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_452fc1 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba32uint, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_452fc1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_452fc1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_452fc1
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/46f0fc.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/46f0fc.wgsl.expected.ir.msl
index 8cbb4ad..c3a792c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/46f0fc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/46f0fc.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_46f0fc = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_46f0fc = func():void {
+  $B2: {
     %4:texture_2d_array<f32> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_46f0fc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_46f0fc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_46f0fc
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/4716a4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/4716a4.wgsl.expected.ir.msl
index 4b6334a..fd0adfb 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4716a4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/4716a4.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_4716a4 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_4716a4 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8sint, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_4716a4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_4716a4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_4716a4
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/475c10.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/475c10.wgsl.expected.ir.msl
index b3328f8..ef7d399 100644
--- a/test/tint/builtins/gen/var/textureDimensions/475c10.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/475c10.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_475c10 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_475c10 = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba8uint, read> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_475c10
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_475c10
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_475c10
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/49a067.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/49a067.wgsl.expected.ir.msl
index d385d94..4794aa5 100644
--- a/test/tint/builtins/gen/var/textureDimensions/49a067.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/49a067.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_49a067 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_49a067 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:texture_cube<f32> = load %arg_0
     %6:i32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureDimensions_49a067
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureDimensions_49a067
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureDimensions_49a067
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/4acec7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/4acec7.wgsl.expected.ir.msl
index 3c18d12..3c1c43b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4acec7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/4acec7.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32float, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_4acec7 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_4acec7 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rg32float, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_4acec7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_4acec7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_4acec7
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/4b26ef.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/4b26ef.wgsl.expected.ir.msl
index 8c84fc2..50f413f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4b26ef.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/4b26ef.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8unorm, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_4b26ef = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_4b26ef = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba8unorm, write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_4b26ef
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_4b26ef
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_4b26ef
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/4be71b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/4be71b.wgsl.expected.ir.msl
index fadfcf3..11f227a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4be71b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/4be71b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_4be71b = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_4be71b = func():void {
+  $B2: {
     %4:texture_2d<u32> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_4be71b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_4be71b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_4be71b
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/4d1f71.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/4d1f71.wgsl.expected.ir.msl
index a7e1b4e..0dba440 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4d1f71.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/4d1f71.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_4d1f71 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_4d1f71 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rg32uint, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_4d1f71
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_4d1f71
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_4d1f71
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/4d27b3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/4d27b3.wgsl.expected.ir.msl
index 367ee2b..825c86d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4d27b3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/4d27b3.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<r32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_4d27b3 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_4d27b3 = func():void {
+  $B2: {
     %4:texture_storage_3d<r32sint, read_write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_4d27b3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_4d27b3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_4d27b3
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/4df14c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/4df14c.wgsl.expected.ir.msl
index 70e4cd7..d79244a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4df14c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/4df14c.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rg32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_4df14c = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_4df14c = func():void {
+  $B2: {
     %4:texture_storage_3d<rg32uint, read_write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_4df14c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_4df14c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_4df14c
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/4e540a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/4e540a.wgsl.expected.ir.msl
index 0b2237b..17dadcf 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4e540a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/4e540a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<r32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_4e540a = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_4e540a = func():void {
+  $B2: {
     %4:texture_storage_1d<r32sint, read_write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_4e540a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_4e540a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_4e540a
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/528c0e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/528c0e.wgsl.expected.ir.msl
index da85e15..ea69984 100644
--- a/test/tint/builtins/gen/var/textureDimensions/528c0e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/528c0e.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_528c0e = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_528c0e = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:texture_2d_array<u32> = load %arg_0
     %6:u32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureDimensions_528c0e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureDimensions_528c0e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureDimensions_528c0e
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/52cf60.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/52cf60.wgsl.expected.ir.msl
index 75a1fec..531b168 100644
--- a/test/tint/builtins/gen/var/textureDimensions/52cf60.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/52cf60.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rg32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_52cf60 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_52cf60 = func():void {
+  $B2: {
     %4:texture_storage_2d<rg32float, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_52cf60
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_52cf60
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_52cf60
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/534ef8.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/534ef8.wgsl.expected.ir.msl
index 174cbc8..f968e3c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/534ef8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/534ef8.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_534ef8 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_534ef8 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba8sint, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_534ef8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_534ef8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_534ef8
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/542c62.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/542c62.wgsl.expected.ir.msl
new file mode 100644
index 0000000..ecbc4a0
--- /dev/null
+++ b/test/tint/builtins/gen/var/textureDimensions/542c62.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_1d<r8unorm, write>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
+}
+
+%textureDimensions_542c62 = func():void {
+  $B2: {
+    %4:texture_storage_1d<r8unorm, write> = load %arg_0
+    %5:u32 = textureDimensions %4
+    %res:ptr<function, u32, read_write> = var, %5
+    %7:u32 = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %textureDimensions_542c62
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %textureDimensions_542c62
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %textureDimensions_542c62
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/textureDimensions/55fdeb.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/55fdeb.wgsl.expected.ir.msl
index b8de1d8..7ca2b12 100644
--- a/test/tint/builtins/gen/var/textureDimensions/55fdeb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/55fdeb.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_55fdeb = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_55fdeb = func():void {
+  $B2: {
     %4:texture_storage_2d<bgra8unorm, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_55fdeb
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_55fdeb
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_55fdeb
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/5703b3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/5703b3.wgsl.expected.ir.msl
index 818d6fc..c407cc0 100644
--- a/test/tint/builtins/gen/var/textureDimensions/5703b3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/5703b3.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_5703b3 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_5703b3 = func():void {
+  $B2: {
     %4:texture_storage_1d<bgra8unorm, read_write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_5703b3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_5703b3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_5703b3
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/578e75.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/578e75.wgsl.expected.ir.msl
new file mode 100644
index 0000000..2e4dcc34
--- /dev/null
+++ b/test/tint/builtins/gen/var/textureDimensions/578e75.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_2d_array<r8unorm, read_write>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
+}
+
+%textureDimensions_578e75 = func():void {
+  $B2: {
+    %4:texture_storage_2d_array<r8unorm, read_write> = load %arg_0
+    %5:vec2<u32> = textureDimensions %4
+    %res:ptr<function, vec2<u32>, read_write> = var, %5
+    %7:vec2<u32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %textureDimensions_578e75
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %textureDimensions_578e75
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %textureDimensions_578e75
+    ret
+  }
+}
+
+invalid access control for storage texture
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/textureDimensions/579eee.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/579eee.wgsl.expected.ir.msl
index ca4afb5..5753859 100644
--- a/test/tint/builtins/gen/var/textureDimensions/579eee.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/579eee.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_579eee = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_579eee = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba32uint, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_579eee
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_579eee
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_579eee
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/58a82d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/58a82d.wgsl.expected.ir.msl
index 7993c20..2e1f885 100644
--- a/test/tint/builtins/gen/var/textureDimensions/58a82d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/58a82d.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba16uint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_58a82d = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_58a82d = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba16uint, write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_58a82d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_58a82d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_58a82d
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/591981.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/591981.wgsl.expected.ir.msl
index 0ff517d..97fd934 100644
--- a/test/tint/builtins/gen/var/textureDimensions/591981.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/591981.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba16sint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_591981 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_591981 = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba16sint, write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_591981
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_591981
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_591981
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/599ab5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/599ab5.wgsl.expected.ir.msl
index 20826ef..25db417 100644
--- a/test/tint/builtins/gen/var/textureDimensions/599ab5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/599ab5.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba16float, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_599ab5 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_599ab5 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba16float, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_599ab5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_599ab5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_599ab5
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/5b4b10.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/5b4b10.wgsl.expected.ir.msl
index a343aac..5d70969 100644
--- a/test/tint/builtins/gen/var/textureDimensions/5b4b10.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/5b4b10.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<bgra8unorm, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_5b4b10 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_5b4b10 = func():void {
+  $B2: {
     %4:texture_storage_3d<bgra8unorm, write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_5b4b10
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_5b4b10
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_5b4b10
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/5df042.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/5df042.wgsl.expected.ir.msl
index 291311a..18e817d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/5df042.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/5df042.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_1d<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_5df042 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_5df042 = func():void {
+  $B2: {
     %4:texture_1d<i32> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_5df042
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_5df042
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_5df042
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/607979.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/607979.wgsl.expected.ir.msl
index 2d07a54..9e9f649 100644
--- a/test/tint/builtins/gen/var/textureDimensions/607979.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/607979.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<r32sint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_607979 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_607979 = func():void {
+  $B2: {
     %4:texture_storage_1d<r32sint, write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_607979
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_607979
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_607979
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/609d34.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/609d34.wgsl.expected.ir.msl
index 785cf3c..2a9cae2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/609d34.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/609d34.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8snorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_609d34 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_609d34 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8snorm, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_609d34
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_609d34
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_609d34
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/617dc8.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/617dc8.wgsl.expected.ir.msl
index b3e28e5..a85f2fe 100644
--- a/test/tint/builtins/gen/var/textureDimensions/617dc8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/617dc8.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<r32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_617dc8 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_617dc8 = func():void {
+  $B2: {
     %4:texture_storage_3d<r32float, read_write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_617dc8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_617dc8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_617dc8
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/62cb5a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/62cb5a.wgsl.expected.ir.msl
index 372dd86..3131f5a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/62cb5a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/62cb5a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_62cb5a = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_62cb5a = func():void {
+  $B2: {
     %4:texture_2d_array<i32> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_62cb5a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_62cb5a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_62cb5a
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/62e7ae.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/62e7ae.wgsl.expected.ir.msl
index 594fa94..4216195 100644
--- a/test/tint/builtins/gen/var/textureDimensions/62e7ae.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/62e7ae.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_62e7ae = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_62e7ae = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba8uint, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_62e7ae
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_62e7ae
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_62e7ae
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/64dc74.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/64dc74.wgsl.expected.ir.msl
index c6ee3d2..09cccb3 100644
--- a/test/tint/builtins/gen/var/textureDimensions/64dc74.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/64dc74.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_64dc74 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_64dc74 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:texture_cube<i32> = load %arg_0
     %6:u32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureDimensions_64dc74
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureDimensions_64dc74
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureDimensions_64dc74
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/674058.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/674058.wgsl.expected.ir.msl
index a41c70f..01f1ff4 100644
--- a/test/tint/builtins/gen/var/textureDimensions/674058.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/674058.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32sint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_674058 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_674058 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<r32sint, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_674058
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_674058
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_674058
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/6dae40.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/6dae40.wgsl.expected.ir.msl
index 4630605..adb7d86 100644
--- a/test/tint/builtins/gen/var/textureDimensions/6dae40.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/6dae40.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rg32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_6dae40 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_6dae40 = func():void {
+  $B2: {
     %4:texture_storage_3d<rg32float, read> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_6dae40
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_6dae40
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_6dae40
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/6dbef4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/6dbef4.wgsl.expected.ir.msl
index f0a139a..824418f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/6dbef4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/6dbef4.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rg32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_6dbef4 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_6dbef4 = func():void {
+  $B2: {
     %4:texture_storage_3d<rg32sint, read> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_6dbef4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_6dbef4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_6dbef4
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/6e6c7a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/6e6c7a.wgsl.expected.ir.msl
index 74e82ba..f03e383 100644
--- a/test/tint/builtins/gen/var/textureDimensions/6e6c7a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/6e6c7a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_6e6c7a = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_6e6c7a = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:texture_3d<u32> = load %arg_0
     %6:u32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureDimensions_6e6c7a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureDimensions_6e6c7a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureDimensions_6e6c7a
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/6e72c5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/6e72c5.wgsl.expected.ir.msl
index dc42636..6b1da73 100644
--- a/test/tint/builtins/gen/var/textureDimensions/6e72c5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/6e72c5.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<r32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_6e72c5 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_6e72c5 = func():void {
+  $B2: {
     %4:texture_storage_2d<r32float, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_6e72c5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_6e72c5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_6e72c5
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/6f1b5d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/6f1b5d.wgsl.expected.ir.msl
index 68d2da4..b6fe6bf 100644
--- a/test/tint/builtins/gen/var/textureDimensions/6f1b5d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/6f1b5d.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_6f1b5d = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_6f1b5d = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:texture_depth_2d = load %arg_0
     %6:i32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureDimensions_6f1b5d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureDimensions_6f1b5d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureDimensions_6f1b5d
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/709357.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/709357.wgsl.expected.ir.msl
index 10e9fd9..61d2869 100644
--- a/test/tint/builtins/gen/var/textureDimensions/709357.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/709357.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba16uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_709357 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_709357 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba16uint, read> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_709357
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_709357
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_709357
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/70dd33.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/70dd33.wgsl.expected.ir.msl
index 947df4d..84e759d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/70dd33.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/70dd33.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_70dd33 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_70dd33 = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba32sint, read_write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_70dd33
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_70dd33
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_70dd33
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/715917.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/715917.wgsl.expected.ir.msl
index ec49950..6e0c466 100644
--- a/test/tint/builtins/gen/var/textureDimensions/715917.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/715917.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_715917 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_715917 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<bgra8unorm, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_715917
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_715917
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_715917
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/7228de.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/7228de.wgsl.expected.ir.msl
index 36d88d6..79806b5 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7228de.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/7228de.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<r32uint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_7228de = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_7228de = func():void {
+  $B2: {
     %4:texture_storage_1d<r32uint, write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_7228de
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_7228de
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_7228de
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/7327fa.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/7327fa.wgsl.expected.ir.msl
index f9fabcb..16fb52c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7327fa.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/7327fa.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8snorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_7327fa = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_7327fa = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba8snorm, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_7327fa
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_7327fa
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_7327fa
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/740e7c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/740e7c.wgsl.expected.ir.msl
index 1e31a38..24b58d8 100644
--- a/test/tint/builtins/gen/var/textureDimensions/740e7c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/740e7c.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rg32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_740e7c = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_740e7c = func():void {
+  $B2: {
     %4:texture_storage_1d<rg32sint, read_write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_740e7c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_740e7c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_740e7c
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/756031.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/756031.wgsl.expected.ir.msl
index b385506..3bf5462 100644
--- a/test/tint/builtins/gen/var/textureDimensions/756031.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/756031.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_756031 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_756031 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:texture_3d<i32> = load %arg_0
     %6:i32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureDimensions_756031
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureDimensions_756031
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureDimensions_756031
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/756304.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/756304.wgsl.expected.ir.msl
index b44d9f6..b11235e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/756304.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/756304.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32float, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_756304 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_756304 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<r32float, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_756304
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_756304
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_756304
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/790e57.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/790e57.wgsl.expected.ir.msl
index 276dc5a..ac9fe31 100644
--- a/test/tint/builtins/gen/var/textureDimensions/790e57.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/790e57.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_790e57 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_790e57 = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba8sint, read> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_790e57
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_790e57
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_790e57
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/795fbb.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/795fbb.wgsl.expected.ir.msl
index cfc7070..265b2d8 100644
--- a/test/tint/builtins/gen/var/textureDimensions/795fbb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/795fbb.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_795fbb = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_795fbb = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8unorm, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_795fbb
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_795fbb
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_795fbb
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/797c30.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/797c30.wgsl.expected.ir.msl
index d970bd8..5363267 100644
--- a/test/tint/builtins/gen/var/textureDimensions/797c30.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/797c30.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_797c30 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_797c30 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba32uint, read> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_797c30
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_797c30
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_797c30
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/79d168.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/79d168.wgsl.expected.ir.msl
index 56c3654..b3b95cf 100644
--- a/test/tint/builtins/gen/var/textureDimensions/79d168.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/79d168.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_cube, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_79d168 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_79d168 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:texture_depth_cube = load %arg_0
     %6:i32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureDimensions_79d168
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureDimensions_79d168
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureDimensions_79d168
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/7a3890.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/7a3890.wgsl.expected.ir.msl
index 836ec32..4bacd6e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7a3890.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/7a3890.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_7a3890 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_7a3890 = func():void {
+  $B2: {
     %4:texture_3d<u32> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_7a3890
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_7a3890
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_7a3890
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/7a9e30.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/7a9e30.wgsl.expected.ir.msl
index 8a20526..58f4d8e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7a9e30.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/7a9e30.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_7a9e30 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_7a9e30 = func():void {
+  $B2: {
     %4:texture_cube<u32> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_7a9e30
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_7a9e30
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_7a9e30
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/7c753b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/7c753b.wgsl.expected.ir.msl
index 32063f2..d4ae4d4 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7c753b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/7c753b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_7c753b = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_7c753b = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba32float, read> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_7c753b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_7c753b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_7c753b
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/7c7c64.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/7c7c64.wgsl.expected.ir.msl
index 87f54bb..081b6f4 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7c7c64.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/7c7c64.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_7c7c64 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_7c7c64 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rg32sint, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_7c7c64
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_7c7c64
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_7c7c64
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/7d8439.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/7d8439.wgsl.expected.ir.msl
index d03fe02..88fcff8 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7d8439.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/7d8439.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rg32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_7d8439 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_7d8439 = func():void {
+  $B2: {
     %4:texture_storage_1d<rg32uint, read> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_7d8439
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_7d8439
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_7d8439
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/7ea4b5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/7ea4b5.wgsl.expected.ir.msl
index d0cb535..c97f9a9 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7ea4b5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/7ea4b5.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_7ea4b5 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_7ea4b5 = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba8sint, read_write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_7ea4b5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_7ea4b5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_7ea4b5
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/7edb05.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/7edb05.wgsl.expected.ir.msl
index 1cc1ef1..eb022fb 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7edb05.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/7edb05.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_7edb05 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_7edb05 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba16uint, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_7edb05
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_7edb05
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_7edb05
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/8057cb.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/8057cb.wgsl.expected.ir.msl
index 1bc5c53..c1ab7fe 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8057cb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/8057cb.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<bgra8unorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_8057cb = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_8057cb = func():void {
+  $B2: {
     %4:texture_storage_3d<bgra8unorm, read> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_8057cb
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_8057cb
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_8057cb
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/8243a1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/8243a1.wgsl.expected.ir.msl
index f4e27e1..1ce6264 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8243a1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/8243a1.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_8243a1 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_8243a1 = func():void {
+  $B2: {
     %4:texture_storage_3d<bgra8unorm, read_write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_8243a1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_8243a1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_8243a1
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/835f90.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/835f90.wgsl.expected.ir.msl
index e8eb00f..7cf9323 100644
--- a/test/tint/builtins/gen/var/textureDimensions/835f90.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/835f90.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rg32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_835f90 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_835f90 = func():void {
+  $B2: {
     %4:texture_storage_2d<rg32sint, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_835f90
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_835f90
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_835f90
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/841ebe.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/841ebe.wgsl.expected.ir.msl
index 16fd29d..17df82a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/841ebe.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/841ebe.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_841ebe = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_841ebe = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba8sint, read> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_841ebe
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_841ebe
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_841ebe
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/84f363.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/84f363.wgsl.expected.ir.msl
index 54b0340..aa9df4d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/84f363.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/84f363.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<bgra8unorm, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_84f363 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_84f363 = func():void {
+  $B2: {
     %4:texture_storage_1d<bgra8unorm, write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_84f363
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_84f363
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_84f363
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/867ead.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/867ead.wgsl.expected.ir.msl
index 200a725..617e797 100644
--- a/test/tint/builtins/gen/var/textureDimensions/867ead.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/867ead.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8snorm, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_867ead = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_867ead = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8snorm, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_867ead
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_867ead
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_867ead
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/879b73.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/879b73.wgsl.expected.ir.msl
index 903525f..746ecfc 100644
--- a/test/tint/builtins/gen/var/textureDimensions/879b73.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/879b73.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube_array<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_879b73 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_879b73 = func():void {
+  $B2: {
     %4:texture_cube_array<f32> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_879b73
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_879b73
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_879b73
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/87b42d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/87b42d.wgsl.expected.ir.msl
index 4fdf484..8f63c38 100644
--- a/test/tint/builtins/gen/var/textureDimensions/87b42d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/87b42d.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_87b42d = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_87b42d = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba32uint, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_87b42d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_87b42d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_87b42d
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/881dd4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/881dd4.wgsl.expected.ir.msl
index c0bffc9..74863db 100644
--- a/test/tint/builtins/gen/var/textureDimensions/881dd4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/881dd4.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8unorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_881dd4 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_881dd4 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8unorm, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_881dd4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_881dd4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_881dd4
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/8a2b17.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/8a2b17.wgsl.expected.ir.msl
index 15e9426..18da2e6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8a2b17.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/8a2b17.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_8a2b17 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_8a2b17 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba32sint, read_write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_8a2b17
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_8a2b17
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_8a2b17
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/8a35f9.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/8a35f9.wgsl.expected.ir.msl
index 42d933c..c071be2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8a35f9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/8a35f9.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rg32float, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_8a35f9 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_8a35f9 = func():void {
+  $B2: {
     %4:texture_storage_2d<rg32float, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_8a35f9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_8a35f9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_8a35f9
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/8af728.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/8af728.wgsl.expected.ir.msl
new file mode 100644
index 0000000..8934ef5
--- /dev/null
+++ b/test/tint/builtins/gen/var/textureDimensions/8af728.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_2d_array<r8unorm, read>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
+}
+
+%textureDimensions_8af728 = func():void {
+  $B2: {
+    %4:texture_storage_2d_array<r8unorm, read> = load %arg_0
+    %5:vec2<u32> = textureDimensions %4
+    %res:ptr<function, vec2<u32>, read_write> = var, %5
+    %7:vec2<u32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %textureDimensions_8af728
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %textureDimensions_8af728
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %textureDimensions_8af728
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/textureDimensions/8b9906.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/8b9906.wgsl.expected.ir.msl
index 9413450..2fc2c6a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8b9906.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/8b9906.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_8b9906 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_8b9906 = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba8uint, read_write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_8b9906
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_8b9906
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_8b9906
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/8bd369.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/8bd369.wgsl.expected.ir.msl
index 729d131..42dbc03 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8bd369.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/8bd369.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_8bd369 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_8bd369 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8snorm, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_8bd369
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_8bd369
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_8bd369
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/8e15f4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/8e15f4.wgsl.expected.ir.msl
index 65d5cd0..07f2d52 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8e15f4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/8e15f4.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rg32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_8e15f4 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_8e15f4 = func():void {
+  $B2: {
     %4:texture_storage_2d<rg32uint, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_8e15f4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_8e15f4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_8e15f4
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/8e5de6.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/8e5de6.wgsl.expected.ir.msl
index 4a653cc..5b50de8 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8e5de6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/8e5de6.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<r32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_8e5de6 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_8e5de6 = func():void {
+  $B2: {
     %4:texture_storage_1d<r32sint, read> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_8e5de6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_8e5de6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_8e5de6
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/8efd47.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/8efd47.wgsl.expected.ir.msl
index 9c785b5..20db69d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8efd47.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/8efd47.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba32sint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_8efd47 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_8efd47 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba32sint, write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_8efd47
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_8efd47
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_8efd47
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/902179.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/902179.wgsl.expected.ir.msl
index 67628d1..b32850f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/902179.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/902179.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<r32float, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_902179 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_902179 = func():void {
+  $B2: {
     %4:texture_storage_3d<r32float, write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_902179
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_902179
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_902179
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/904b0f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/904b0f.wgsl.expected.ir.msl
index 8cca4cb..936e48b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/904b0f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/904b0f.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_904b0f = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_904b0f = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba16sint, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_904b0f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_904b0f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_904b0f
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/90dd74.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/90dd74.wgsl.expected.ir.msl
index 7d1dfe6..98ef490 100644
--- a/test/tint/builtins/gen/var/textureDimensions/90dd74.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/90dd74.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16sint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_90dd74 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_90dd74 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba16sint, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_90dd74
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_90dd74
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_90dd74
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/91e3b4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/91e3b4.wgsl.expected.ir.msl
index ea729a6..f4e12c7 100644
--- a/test/tint/builtins/gen/var/textureDimensions/91e3b4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/91e3b4.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rg32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_91e3b4 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_91e3b4 = func():void {
+  $B2: {
     %4:texture_storage_3d<rg32sint, read_write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_91e3b4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_91e3b4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_91e3b4
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/920006.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/920006.wgsl.expected.ir.msl
index e849f573..956be95 100644
--- a/test/tint/builtins/gen/var/textureDimensions/920006.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/920006.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_1d<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_920006 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_920006 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:texture_1d<u32> = load %arg_0
     %6:i32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureDimensions_920006
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureDimensions_920006
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureDimensions_920006
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/92552e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/92552e.wgsl.expected.ir.msl
index c3f86df..94b54b9 100644
--- a/test/tint/builtins/gen/var/textureDimensions/92552e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/92552e.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8sint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_92552e = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_92552e = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba8sint, write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_92552e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_92552e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_92552e
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/9573f3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/9573f3.wgsl.expected.ir.msl
index 813087d..f3de2e7 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9573f3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/9573f3.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rg32uint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_9573f3 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_9573f3 = func():void {
+  $B2: {
     %4:texture_storage_2d<rg32uint, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_9573f3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_9573f3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_9573f3
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/965645.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/965645.wgsl.expected.ir.msl
index 50c5d56..69d9637 100644
--- a/test/tint/builtins/gen/var/textureDimensions/965645.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/965645.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_1d<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_965645 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_965645 = func():void {
+  $B2: {
     %4:texture_1d<u32> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_965645
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_965645
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_965645
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/98b2d3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/98b2d3.wgsl.expected.ir.msl
index 99191cf..0d26142 100644
--- a/test/tint/builtins/gen/var/textureDimensions/98b2d3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/98b2d3.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube_array<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_98b2d3 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_98b2d3 = func():void {
+  $B2: {
     %4:texture_cube_array<i32> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_98b2d3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_98b2d3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_98b2d3
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/991ea9.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/991ea9.wgsl.expected.ir.msl
index 25ccb7b..534a380 100644
--- a/test/tint/builtins/gen/var/textureDimensions/991ea9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/991ea9.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_991ea9 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_991ea9 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:texture_depth_2d = load %arg_0
     %6:u32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureDimensions_991ea9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureDimensions_991ea9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureDimensions_991ea9
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/9944d5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/9944d5.wgsl.expected.ir.msl
index 54aa83e..ef2628f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9944d5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/9944d5.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<r32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_9944d5 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_9944d5 = func():void {
+  $B2: {
     %4:texture_storage_1d<r32uint, read_write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_9944d5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_9944d5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_9944d5
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/9b10a0.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/9b10a0.wgsl.expected.ir.msl
index 6241d58..d9e55ec 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9b10a0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/9b10a0.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<bgra8unorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_9b10a0 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_9b10a0 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<bgra8unorm, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_9b10a0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_9b10a0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_9b10a0
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/9b223b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/9b223b.wgsl.expected.ir.msl
index ccea5f1..cfd4e1e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9b223b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/9b223b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_9b223b = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_9b223b = func():void {
+  $B2: {
     %4:texture_cube<f32> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_9b223b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_9b223b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_9b223b
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/9baf27.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/9baf27.wgsl.expected.ir.msl
index 38cafb5..3e47169 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9baf27.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/9baf27.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_9baf27 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_9baf27 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:texture_cube<u32> = load %arg_0
     %6:u32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureDimensions_9baf27
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureDimensions_9baf27
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureDimensions_9baf27
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/9c7a00.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/9c7a00.wgsl.expected.ir.msl
index 0f60737..04ab59b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9c7a00.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/9c7a00.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_1d<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_9c7a00 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_9c7a00 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:texture_1d<u32> = load %arg_0
     %6:u32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureDimensions_9c7a00
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureDimensions_9c7a00
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureDimensions_9c7a00
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/9cd4ca.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/9cd4ca.wgsl.expected.ir.msl
index 7736080..e1be989 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9cd4ca.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/9cd4ca.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_9cd4ca = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_9cd4ca = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:texture_cube<u32> = load %arg_0
     %6:i32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureDimensions_9cd4ca
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureDimensions_9cd4ca
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureDimensions_9cd4ca
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/9cd8ad.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/9cd8ad.wgsl.expected.ir.msl
index 8371919..2cafaac 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9cd8ad.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/9cd8ad.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rg32float, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_9cd8ad = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_9cd8ad = func():void {
+  $B2: {
     %4:texture_storage_3d<rg32float, write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_9cd8ad
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_9cd8ad
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_9cd8ad
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/9d0bac.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/9d0bac.wgsl.expected.ir.msl
index e1c7026..112a8d0 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9d0bac.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/9d0bac.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_9d0bac = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_9d0bac = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba32float, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_9d0bac
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_9d0bac
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_9d0bac
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/9d68b8.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/9d68b8.wgsl.expected.ir.msl
index 38a6fd4..72d63e4 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9d68b8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/9d68b8.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8snorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_9d68b8 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_9d68b8 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba8snorm, read> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_9d68b8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_9d68b8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_9d68b8
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/9dc27a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/9dc27a.wgsl.expected.ir.msl
index 921b3fd..69c15a9 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9dc27a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/9dc27a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_9dc27a = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_9dc27a = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rg32float, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_9dc27a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_9dc27a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_9dc27a
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/9e0794.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/9e0794.wgsl.expected.ir.msl
index 6cba563..0f787e3 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9e0794.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/9e0794.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_9e0794 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_9e0794 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:texture_2d_array<u32> = load %arg_0
     %6:i32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureDimensions_9e0794
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureDimensions_9e0794
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureDimensions_9e0794
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/9fcc3b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/9fcc3b.wgsl.expected.ir.msl
index 64d4fb9..e3ad776 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9fcc3b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/9fcc3b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_cube_array, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_9fcc3b = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_9fcc3b = func():void {
+  $B2: {
     %4:texture_depth_cube_array = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_9fcc3b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_9fcc3b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_9fcc3b
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/a105a5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/a105a5.wgsl.expected.ir.msl
index b42152d..2655353 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a105a5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/a105a5.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_a105a5 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_a105a5 = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba32uint, read_write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_a105a5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_a105a5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_a105a5
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/a14386.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/a14386.wgsl.expected.ir.msl
index b65acf2..24e838d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a14386.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/a14386.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba16float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_a14386 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_a14386 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba16float, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_a14386
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_a14386
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_a14386
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/a1598a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/a1598a.wgsl.expected.ir.msl
index 329db7f..fd21c6f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a1598a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/a1598a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube_array<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_a1598a = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_a1598a = func():void {
+  $B2: {
     %4:texture_cube_array<u32> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_a1598a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_a1598a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_a1598a
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/a20ba2.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/a20ba2.wgsl.expected.ir.msl
new file mode 100644
index 0000000..fd6e2c5
--- /dev/null
+++ b/test/tint/builtins/gen/var/textureDimensions/a20ba2.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_3d<r8unorm, write>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
+}
+
+%textureDimensions_a20ba2 = func():void {
+  $B2: {
+    %4:texture_storage_3d<r8unorm, write> = load %arg_0
+    %5:vec3<u32> = textureDimensions %4
+    %res:ptr<function, vec3<u32>, read_write> = var, %5
+    %7:vec3<u32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %textureDimensions_a20ba2
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %textureDimensions_a20ba2
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %textureDimensions_a20ba2
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/textureDimensions/a25d9b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/a25d9b.wgsl.expected.ir.msl
index 8a7a2b3..0bb63bb 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a25d9b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/a25d9b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8unorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_a25d9b = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_a25d9b = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba8unorm, read> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_a25d9b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_a25d9b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_a25d9b
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/a2ba5e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/a2ba5e.wgsl.expected.ir.msl
index 237925f..42501a7 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a2ba5e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/a2ba5e.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_a2ba5e = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_a2ba5e = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:texture_cube<i32> = load %arg_0
     %6:i32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureDimensions_a2ba5e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureDimensions_a2ba5e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureDimensions_a2ba5e
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/a3ea91.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/a3ea91.wgsl.expected.ir.msl
index 63f4178..0686639 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a3ea91.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/a3ea91.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba16float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_a3ea91 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_a3ea91 = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba16float, read> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_a3ea91
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_a3ea91
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_a3ea91
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/a48049.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/a48049.wgsl.expected.ir.msl
index ddfbfac..902d599 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a48049.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/a48049.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_a48049 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_a48049 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:texture_2d<i32> = load %arg_0
     %6:u32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureDimensions_a48049
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureDimensions_a48049
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureDimensions_a48049
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/a4cd56.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/a4cd56.wgsl.expected.ir.msl
index c3d5b6b..4961dc8 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a4cd56.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/a4cd56.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_a4cd56 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_a4cd56 = func():void {
+  $B2: {
     %4:texture_depth_2d_array = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_a4cd56
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_a4cd56
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_a4cd56
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/a65776.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/a65776.wgsl.expected.ir.msl
index d24df3e..2a10b20 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a65776.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/a65776.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba16sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_a65776 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_a65776 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba16sint, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_a65776
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_a65776
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_a65776
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/a7ae4c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/a7ae4c.wgsl.expected.ir.msl
index b2ab621..5ff70c5 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a7ae4c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/a7ae4c.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_a7ae4c = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_a7ae4c = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba8snorm, read_write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_a7ae4c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_a7ae4c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_a7ae4c
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/aa4353.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/aa4353.wgsl.expected.ir.msl
index 11b3405..8f68441 100644
--- a/test/tint/builtins/gen/var/textureDimensions/aa4353.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/aa4353.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba32sint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_aa4353 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_aa4353 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba32sint, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_aa4353
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_aa4353
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_aa4353
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/aac604.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/aac604.wgsl.expected.ir.msl
index b87d4eb..93050c6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/aac604.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/aac604.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_1d<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_aac604 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_aac604 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:texture_1d<f32> = load %arg_0
     %6:u32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureDimensions_aac604
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureDimensions_aac604
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureDimensions_aac604
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/ad7d3b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/ad7d3b.wgsl.expected.ir.msl
index 25f0baf..1a0e6ca 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ad7d3b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/ad7d3b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8uint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_ad7d3b = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_ad7d3b = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba8uint, write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_ad7d3b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_ad7d3b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_ad7d3b
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/ae4595.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/ae4595.wgsl.expected.ir.msl
index dfecd22..84b0b21 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ae4595.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/ae4595.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rg32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_ae4595 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_ae4595 = func():void {
+  $B2: {
     %4:texture_storage_3d<rg32float, read_write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_ae4595
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_ae4595
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_ae4595
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/ae75a7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/ae75a7.wgsl.expected.ir.msl
index 3ca8324..efbeeed 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ae75a7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/ae75a7.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba16uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_ae75a7 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_ae75a7 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba16uint, read_write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_ae75a7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_ae75a7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_ae75a7
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/af46ab.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/af46ab.wgsl.expected.ir.msl
index a11470a..949d892 100644
--- a/test/tint/builtins/gen/var/textureDimensions/af46ab.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/af46ab.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32sint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_af46ab = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_af46ab = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rg32sint, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_af46ab
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_af46ab
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_af46ab
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/b16352.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/b16352.wgsl.expected.ir.msl
index 1336990..c75fa3e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b16352.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/b16352.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba16sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_b16352 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_b16352 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba16sint, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_b16352
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_b16352
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_b16352
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/b284b8.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/b284b8.wgsl.expected.ir.msl
index bd5d7c1..55267cb 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b284b8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/b284b8.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_b284b8 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_b284b8 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba8sint, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_b284b8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_b284b8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_b284b8
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/b3ab5e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/b3ab5e.wgsl.expected.ir.msl
index 9e81001..9677743 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b3ab5e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/b3ab5e.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube_array<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_b3ab5e = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_b3ab5e = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:texture_cube_array<f32> = load %arg_0
     %6:i32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureDimensions_b3ab5e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureDimensions_b3ab5e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureDimensions_b3ab5e
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/b46d97.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/b46d97.wgsl.expected.ir.msl
index f14197e..4c390fb 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b46d97.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/b46d97.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_1d<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_b46d97 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_b46d97 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:texture_1d<i32> = load %arg_0
     %6:i32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureDimensions_b46d97
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureDimensions_b46d97
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureDimensions_b46d97
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/b51345.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/b51345.wgsl.expected.ir.msl
index 16221ed..e4f0554 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b51345.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/b51345.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rg32float, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_b51345 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_b51345 = func():void {
+  $B2: {
     %4:texture_storage_1d<rg32float, write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_b51345
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_b51345
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_b51345
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/b56112.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/b56112.wgsl.expected.ir.msl
index a346ecd..60af298 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b56112.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/b56112.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<r32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_b56112 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_b56112 = func():void {
+  $B2: {
     %4:texture_storage_2d<r32uint, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_b56112
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_b56112
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_b56112
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/b5ba03.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/b5ba03.wgsl.expected.ir.msl
index 82cfa14..34d233d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b5ba03.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/b5ba03.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba16float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_b5ba03 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_b5ba03 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba16float, read> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_b5ba03
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_b5ba03
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_b5ba03
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/b5d68e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/b5d68e.wgsl.expected.ir.msl
index eb4dd20..7075ee4 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b5d68e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/b5d68e.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_b5d68e = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_b5d68e = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba32sint, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_b5d68e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_b5d68e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_b5d68e
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/b6bbf4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/b6bbf4.wgsl.expected.ir.msl
index f1da8c9..e676ab1 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b6bbf4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/b6bbf4.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba16uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_b6bbf4 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_b6bbf4 = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba16uint, read> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_b6bbf4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_b6bbf4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_b6bbf4
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/b8287f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/b8287f.wgsl.expected.ir.msl
index 0f97f51..8a9bb43 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b8287f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/b8287f.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_b8287f = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_b8287f = func():void {
+  $B2: {
     %4:texture_storage_2d_array<r32uint, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_b8287f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_b8287f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_b8287f
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/b9e7ef.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/b9e7ef.wgsl.expected.ir.msl
index 1d3252f..2489e6e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b9e7ef.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/b9e7ef.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_b9e7ef = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_b9e7ef = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba32sint, read> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_b9e7ef
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_b9e7ef
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_b9e7ef
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/bb95d9.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/bb95d9.wgsl.expected.ir.msl
index 39de294..70d133a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/bb95d9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/bb95d9.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_bb95d9 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_bb95d9 = func():void {
+  $B2: {
     %4:texture_3d<f32> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_bb95d9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_bb95d9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_bb95d9
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/bbe285.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/bbe285.wgsl.expected.ir.msl
index de9d6ef..499807d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/bbe285.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/bbe285.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8sint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_bbe285 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_bbe285 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8sint, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_bbe285
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_bbe285
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_bbe285
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/bc96f6.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/bc96f6.wgsl.expected.ir.msl
index 4454816..0734d41 100644
--- a/test/tint/builtins/gen/var/textureDimensions/bc96f6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/bc96f6.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_bc96f6 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_bc96f6 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba32float, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_bc96f6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_bc96f6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_bc96f6
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/bd94c8.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/bd94c8.wgsl.expected.ir.msl
index b277d1a..2ea5677 100644
--- a/test/tint/builtins/gen/var/textureDimensions/bd94c8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/bd94c8.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_cube_array, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_bd94c8 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_bd94c8 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:texture_depth_cube_array = load %arg_0
     %6:u32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureDimensions_bd94c8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureDimensions_bd94c8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureDimensions_bd94c8
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/bec716.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/bec716.wgsl.expected.ir.msl
index 0726507..5a4f560 100644
--- a/test/tint/builtins/gen/var/textureDimensions/bec716.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/bec716.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_bec716 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_bec716 = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba32float, read> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_bec716
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_bec716
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_bec716
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/bf9170.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/bf9170.wgsl.expected.ir.msl
index 6846af3..c83ca85 100644
--- a/test/tint/builtins/gen/var/textureDimensions/bf9170.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/bf9170.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8snorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_bf9170 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_bf9170 = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba8snorm, read> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_bf9170
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_bf9170
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_bf9170
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/c1189e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/c1189e.wgsl.expected.ir.msl
index a45498e..d2615a1 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c1189e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/c1189e.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_c1189e = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_c1189e = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba32float, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_c1189e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_c1189e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_c1189e
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/c1dbf6.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/c1dbf6.wgsl.expected.ir.msl
index dac5f33..514e05f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c1dbf6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/c1dbf6.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8uint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_c1dbf6 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_c1dbf6 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba8uint, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_c1dbf6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_c1dbf6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_c1dbf6
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/c27466.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/c27466.wgsl.expected.ir.msl
index c66c698..4d04623 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c27466.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/c27466.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba16sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_c27466 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_c27466 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba16sint, read_write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_c27466
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_c27466
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_c27466
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/c2cdd3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/c2cdd3.wgsl.expected.ir.msl
index 1a455f3..9688623 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c2cdd3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/c2cdd3.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_multisampled_2d, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_c2cdd3 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_c2cdd3 = func():void {
+  $B2: {
     %4:texture_depth_multisampled_2d = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_c2cdd3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_c2cdd3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_c2cdd3
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/c44fc1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/c44fc1.wgsl.expected.ir.msl
index f616817..9ea7ecd 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c44fc1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/c44fc1.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32sint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_c44fc1 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_c44fc1 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba32sint, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_c44fc1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_c44fc1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_c44fc1
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/c5a36e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/c5a36e.wgsl.expected.ir.msl
index c3fe0f8..36f79de 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c5a36e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/c5a36e.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_cube, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_c5a36e = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_c5a36e = func():void {
+  $B2: {
     %4:texture_depth_cube = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_c5a36e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_c5a36e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_c5a36e
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/c6b44c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/c6b44c.wgsl.expected.ir.msl
index ea1a673..c81c192 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c6b44c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/c6b44c.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<r32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_c6b44c = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_c6b44c = func():void {
+  $B2: {
     %4:texture_storage_2d<r32sint, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_c6b44c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_c6b44c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_c6b44c
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/c6b985.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/c6b985.wgsl.expected.ir.msl
new file mode 100644
index 0000000..b645805
--- /dev/null
+++ b/test/tint/builtins/gen/var/textureDimensions/c6b985.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_1d<r8unorm, read_write>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
+}
+
+%textureDimensions_c6b985 = func():void {
+  $B2: {
+    %4:texture_storage_1d<r8unorm, read_write> = load %arg_0
+    %5:u32 = textureDimensions %4
+    %res:ptr<function, u32, read_write> = var, %5
+    %7:u32 = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %textureDimensions_c6b985
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %textureDimensions_c6b985
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %textureDimensions_c6b985
+    ret
+  }
+}
+
+invalid access control for storage texture
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/textureDimensions/c7ea63.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/c7ea63.wgsl.expected.ir.msl
index 3b1f4ea..7be61e1 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c7ea63.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/c7ea63.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rg32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_c7ea63 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_c7ea63 = func():void {
+  $B2: {
     %4:texture_storage_1d<rg32float, read_write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_c7ea63
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_c7ea63
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_c7ea63
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/c82420.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/c82420.wgsl.expected.ir.msl
index 37abb03..a886b56 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c82420.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/c82420.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rg32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_c82420 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_c82420 = func():void {
+  $B2: {
     %4:texture_storage_2d<rg32uint, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_c82420
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_c82420
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_c82420
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/c871f3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/c871f3.wgsl.expected.ir.msl
index 88285d4..272ba89 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c871f3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/c871f3.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_c871f3 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_c871f3 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:texture_3d<i32> = load %arg_0
     %6:u32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureDimensions_c871f3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureDimensions_c871f3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureDimensions_c871f3
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/ca10cc.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/ca10cc.wgsl.expected.ir.msl
index e2e6476..d198f46 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ca10cc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/ca10cc.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_ca10cc = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_ca10cc = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8uint, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_ca10cc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_ca10cc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_ca10cc
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/cad3b7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/cad3b7.wgsl.expected.ir.msl
index 0edeec9..d8afa22 100644
--- a/test/tint/builtins/gen/var/textureDimensions/cad3b7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/cad3b7.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<r32sint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_cad3b7 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_cad3b7 = func():void {
+  $B2: {
     %4:texture_storage_2d<r32sint, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_cad3b7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_cad3b7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_cad3b7
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/cc947b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/cc947b.wgsl.expected.ir.msl
index de2abf0..3f96199 100644
--- a/test/tint/builtins/gen/var/textureDimensions/cc947b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/cc947b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8snorm, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_cc947b = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_cc947b = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba8snorm, write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_cc947b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_cc947b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_cc947b
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/cd3033.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/cd3033.wgsl.expected.ir.msl
index 4d501f1..8b882cd 100644
--- a/test/tint/builtins/gen/var/textureDimensions/cd3033.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/cd3033.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_cd3033 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_cd3033 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rg32sint, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_cd3033
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_cd3033
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_cd3033
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/cdc6c9.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/cdc6c9.wgsl.expected.ir.msl
index 3623164..897a716 100644
--- a/test/tint/builtins/gen/var/textureDimensions/cdc6c9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/cdc6c9.wgsl.expected.ir.msl
@@ -1,43 +1,29 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1057 internal compiler error: %b1 = block {  # root
-  %arg_0:ptr<handle, texture_external, read> = var @binding_point(1, 0)
-  %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
+
+@group(1) @binding(0) var arg_0 : texture_external;
+
+fn textureDimensions_cdc6c9() {
+  var res : vec2<u32> = textureDimensions(arg_0);
+  prevent_dce = res;
 }
 
-%textureDimensions_cdc6c9 = func():void -> %b2 {
-  %b2 = block {
-    %4:texture_external = load %arg_0
-    %5:vec2<u32> = textureDimensions %4
-    %res:ptr<function, vec2<u32>, read_write> = var, %5
-    %7:vec2<u32> = load %res
-    store %prevent_dce, %7
-    ret
-  }
-}
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %9:void = call %textureDimensions_cdc6c9
-    ret vec4<f32>(0.0f)
-  }
-}
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %11:void = call %textureDimensions_cdc6c9
-    ret
-  }
-}
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %13:void = call %textureDimensions_cdc6c9
-    ret
-  }
+@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
+
+@vertex
+fn vertex_main() -> @builtin(position) vec4<f32> {
+  textureDimensions_cdc6c9();
+  return vec4<f32>();
 }
 
-Multiplanar external texture transform was not run.
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+@fragment
+fn fragment_main() {
+  textureDimensions_cdc6c9();
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+  textureDimensions_cdc6c9();
+}
+
+Failed to generate: error: ExternalTextureOptions missing binding entry for [group: 1, binding: 0]
diff --git a/test/tint/builtins/gen/var/textureDimensions/cedabd.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/cedabd.wgsl.expected.ir.msl
index d735d96..16fab76 100644
--- a/test/tint/builtins/gen/var/textureDimensions/cedabd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/cedabd.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rg32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_cedabd = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_cedabd = func():void {
+  $B2: {
     %4:texture_storage_1d<rg32sint, read> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_cedabd
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_cedabd
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_cedabd
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/cf2b50.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/cf2b50.wgsl.expected.ir.msl
index 3179be5..f76754e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/cf2b50.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/cf2b50.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube_array<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_cf2b50 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_cf2b50 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:texture_cube_array<f32> = load %arg_0
     %6:u32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureDimensions_cf2b50
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureDimensions_cf2b50
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureDimensions_cf2b50
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/d0778e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/d0778e.wgsl.expected.ir.msl
index 45666e4..2766e73 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d0778e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/d0778e.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rg32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_d0778e = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_d0778e = func():void {
+  $B2: {
     %4:texture_storage_3d<rg32uint, read> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_d0778e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_d0778e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_d0778e
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/d08a94.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/d08a94.wgsl.expected.ir.msl
index 69b50c4..2409557 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d08a94.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/d08a94.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba16sint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_d08a94 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_d08a94 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba16sint, write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_d08a94
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_d08a94
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_d08a94
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/d1b882.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/d1b882.wgsl.expected.ir.msl
index af9946a..01afc41 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d1b882.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/d1b882.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<bgra8unorm, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_d1b882 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_d1b882 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<bgra8unorm, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_d1b882
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_d1b882
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_d1b882
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/d3accd.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/d3accd.wgsl.expected.ir.msl
index d153dd9..21b96b3 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d3accd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/d3accd.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_cube, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_d3accd = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_d3accd = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:texture_depth_cube = load %arg_0
     %6:u32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureDimensions_d3accd
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureDimensions_d3accd
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureDimensions_d3accd
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/d44ac3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/d44ac3.wgsl.expected.ir.msl
index 30118d1..54c3236 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d44ac3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/d44ac3.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<bgra8unorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_d44ac3 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_d44ac3 = func():void {
+  $B2: {
     %4:texture_storage_2d<bgra8unorm, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_d44ac3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_d44ac3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_d44ac3
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/d44dd1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/d44dd1.wgsl.expected.ir.msl
index 364a79d..3bd1f75 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d44dd1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/d44dd1.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba16uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_d44dd1 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_d44dd1 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba16uint, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_d44dd1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_d44dd1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_d44dd1
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/d63c28.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/d63c28.wgsl.expected.ir.msl
index 4de5cb9..5a40033 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d63c28.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/d63c28.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32float, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_d63c28 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_d63c28 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba32float, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_d63c28
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_d63c28
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_d63c28
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/d6f3cf.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/d6f3cf.wgsl.expected.ir.msl
index 07430fc..3db25b3 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d6f3cf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/d6f3cf.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<r32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_d6f3cf = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_d6f3cf = func():void {
+  $B2: {
     %4:texture_storage_2d<r32sint, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_d6f3cf
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_d6f3cf
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_d6f3cf
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/d8ba68.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/d8ba68.wgsl.expected.ir.msl
index ec3713d..a06d2a2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d8ba68.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/d8ba68.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba32uint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_d8ba68 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_d8ba68 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba32uint, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_d8ba68
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_d8ba68
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_d8ba68
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/d8f887.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/d8f887.wgsl.expected.ir.msl
index 0b33a4c..ae94e9a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d8f887.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/d8f887.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8uint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_d8f887 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_d8f887 = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba8uint, write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_d8f887
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_d8f887
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_d8f887
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/da30d2.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/da30d2.wgsl.expected.ir.msl
index f6a0b51..39888a1 100644
--- a/test/tint/builtins/gen/var/textureDimensions/da30d2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/da30d2.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba32float, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_da30d2 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_da30d2 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba32float, write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_da30d2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_da30d2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_da30d2
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/daf0fe.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/daf0fe.wgsl.expected.ir.msl
index 8711ebe..5df2122 100644
--- a/test/tint/builtins/gen/var/textureDimensions/daf0fe.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/daf0fe.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_daf0fe = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_daf0fe = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba16float, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_daf0fe
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_daf0fe
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_daf0fe
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/db7131.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/db7131.wgsl.expected.ir.msl
index a4a403e..9ad882b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/db7131.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/db7131.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<r32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_db7131 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_db7131 = func():void {
+  $B2: {
     %4:texture_storage_3d<r32sint, read> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_db7131
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_db7131
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_db7131
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/dc83ce.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/dc83ce.wgsl.expected.ir.msl
index 1fc8070..fe3c647 100644
--- a/test/tint/builtins/gen/var/textureDimensions/dc83ce.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/dc83ce.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<r32uint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_dc83ce = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_dc83ce = func():void {
+  $B2: {
     %4:texture_storage_2d<r32uint, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_dc83ce
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_dc83ce
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_dc83ce
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/de03c6.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/de03c6.wgsl.expected.ir.msl
index bde0adc..9078219 100644
--- a/test/tint/builtins/gen/var/textureDimensions/de03c6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/de03c6.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<r32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_de03c6 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_de03c6 = func():void {
+  $B2: {
     %4:texture_storage_1d<r32uint, read> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_de03c6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_de03c6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_de03c6
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/deb3c0.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/deb3c0.wgsl.expected.ir.msl
index 6426348..adf6260 100644
--- a/test/tint/builtins/gen/var/textureDimensions/deb3c0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/deb3c0.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba16float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_deb3c0 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_deb3c0 = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba16float, read_write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_deb3c0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_deb3c0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_deb3c0
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/dee461.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/dee461.wgsl.expected.ir.msl
index f90b14b..5f041ee 100644
--- a/test/tint/builtins/gen/var/textureDimensions/dee461.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/dee461.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8snorm, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_dee461 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_dee461 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba8snorm, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_dee461
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_dee461
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_dee461
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/dfdc32.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/dfdc32.wgsl.expected.ir.msl
index 5df58e7..fced1c6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/dfdc32.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/dfdc32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_dfdc32 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_dfdc32 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:texture_depth_2d_array = load %arg_0
     %6:i32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureDimensions_dfdc32
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureDimensions_dfdc32
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureDimensions_dfdc32
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/e122fe.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/e122fe.wgsl.expected.ir.msl
index 41a608b..9fa70a2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e122fe.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/e122fe.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8snorm, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_e122fe = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_e122fe = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba8snorm, write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_e122fe
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_e122fe
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_e122fe
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/e18a8b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/e18a8b.wgsl.expected.ir.msl
index 6f40cd0..3e5f9f9 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e18a8b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/e18a8b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_e18a8b = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_e18a8b = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:texture_2d<u32> = load %arg_0
     %6:u32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureDimensions_e18a8b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureDimensions_e18a8b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureDimensions_e18a8b
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/e4bfd2.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/e4bfd2.wgsl.expected.ir.msl
index bd02c6d..fb143d2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e4bfd2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/e4bfd2.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_multisampled_2d<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_e4bfd2 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_e4bfd2 = func():void {
+  $B2: {
     %4:texture_multisampled_2d<u32> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_e4bfd2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_e4bfd2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_e4bfd2
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/e4e310.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/e4e310.wgsl.expected.ir.msl
index d29e1ce..971041e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e4e310.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/e4e310.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_e4e310 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_e4e310 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:texture_2d_array<i32> = load %arg_0
     %6:u32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureDimensions_e4e310
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureDimensions_e4e310
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureDimensions_e4e310
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/e4f021.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/e4f021.wgsl.expected.ir.msl
index cd67d4f..687f5e4 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e4f021.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/e4f021.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_e4f021 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_e4f021 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba32float, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_e4f021
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_e4f021
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_e4f021
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/e50eb8.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/e50eb8.wgsl.expected.ir.msl
index f00ed8b..015b749 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e50eb8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/e50eb8.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_e50eb8 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_e50eb8 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba8uint, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_e50eb8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_e50eb8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_e50eb8
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/e5a203.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/e5a203.wgsl.expected.ir.msl
index cdb9b93..eb65aa1 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e5a203.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/e5a203.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_e5a203 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_e5a203 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:texture_3d<u32> = load %arg_0
     %6:i32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureDimensions_e5a203
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureDimensions_e5a203
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureDimensions_e5a203
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/e738f4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/e738f4.wgsl.expected.ir.msl
index 998f7c6..b50314a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e738f4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/e738f4.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rg32sint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_e738f4 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_e738f4 = func():void {
+  $B2: {
     %4:texture_storage_3d<rg32sint, write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_e738f4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_e738f4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_e738f4
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/e824b6.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/e824b6.wgsl.expected.ir.msl
index c80e930..f8c1124 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e824b6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/e824b6.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_e824b6 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_e824b6 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rg32uint, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_e824b6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_e824b6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_e824b6
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/e99308.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/e99308.wgsl.expected.ir.msl
index 3fe8d5a..4f612d8 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e99308.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/e99308.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba16uint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_e99308 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_e99308 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba16uint, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_e99308
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_e99308
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_e99308
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/ea066c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/ea066c.wgsl.expected.ir.msl
index fe39c3e..9a38d3b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ea066c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/ea066c.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<r32float, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_ea066c = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_ea066c = func():void {
+  $B2: {
     %4:texture_storage_1d<r32float, write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_ea066c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_ea066c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_ea066c
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/ea25bc.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/ea25bc.wgsl.expected.ir.msl
index e249406..3941694 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ea25bc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/ea25bc.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rg32uint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_ea25bc = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_ea25bc = func():void {
+  $B2: {
     %4:texture_storage_1d<rg32uint, write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_ea25bc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_ea25bc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_ea25bc
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/eafe19.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/eafe19.wgsl.expected.ir.msl
index 31c8f1f..14ca50f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/eafe19.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/eafe19.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_eafe19 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_eafe19 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:texture_depth_2d_array = load %arg_0
     %6:u32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureDimensions_eafe19
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureDimensions_eafe19
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureDimensions_eafe19
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/eb03b1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/eb03b1.wgsl.expected.ir.msl
index 5491a5a..2f2c4deb 100644
--- a/test/tint/builtins/gen/var/textureDimensions/eb03b1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/eb03b1.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16float, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_eb03b1 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_eb03b1 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba16float, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_eb03b1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_eb03b1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_eb03b1
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/eb10d6.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/eb10d6.wgsl.expected.ir.msl
index 9935888..009453b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/eb10d6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/eb10d6.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_eb10d6 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_eb10d6 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba8unorm, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_eb10d6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_eb10d6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_eb10d6
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/eb1249.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/eb1249.wgsl.expected.ir.msl
index c503142..1f20f91 100644
--- a/test/tint/builtins/gen/var/textureDimensions/eb1249.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/eb1249.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_eb1249 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_eb1249 = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba32uint, read_write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_eb1249
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_eb1249
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_eb1249
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/eb9f4d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/eb9f4d.wgsl.expected.ir.msl
index c12ee15..92df375 100644
--- a/test/tint/builtins/gen/var/textureDimensions/eb9f4d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/eb9f4d.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_eb9f4d = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_eb9f4d = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8sint, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_eb9f4d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_eb9f4d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_eb9f4d
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/ed1030.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/ed1030.wgsl.expected.ir.msl
index 9306ad7..74ea7f7 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ed1030.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/ed1030.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<r32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_ed1030 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_ed1030 = func():void {
+  $B2: {
     %4:texture_storage_2d<r32uint, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_ed1030
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_ed1030
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_ed1030
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/ef2e58.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/ef2e58.wgsl.expected.ir.msl
index 6e97d5e..1568ae4 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ef2e58.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/ef2e58.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<r32sint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_ef2e58 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_ef2e58 = func():void {
+  $B2: {
     %4:texture_storage_3d<r32sint, write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_ef2e58
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_ef2e58
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_ef2e58
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/f17acd.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/f17acd.wgsl.expected.ir.msl
index c1af3d4..e047280 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f17acd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/f17acd.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_1d<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_f17acd = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_f17acd = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:texture_1d<f32> = load %arg_0
     %6:i32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureDimensions_f17acd
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureDimensions_f17acd
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureDimensions_f17acd
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/f264a3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/f264a3.wgsl.expected.ir.msl
index 30fb118..645e567 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f264a3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/f264a3.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rg32sint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_f264a3 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_f264a3 = func():void {
+  $B2: {
     %4:texture_storage_1d<rg32sint, write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_f264a3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_f264a3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_f264a3
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/f3a2ac.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/f3a2ac.wgsl.expected.ir.msl
index 6b43a8f..6724bae 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f3a2ac.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/f3a2ac.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba16float, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_f3a2ac = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_f3a2ac = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba16float, write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_f3a2ac
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_f3a2ac
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_f3a2ac
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/f406ff.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/f406ff.wgsl.expected.ir.msl
index c019323..77a9dc8 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f406ff.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/f406ff.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_f406ff = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_f406ff = func():void {
+  $B2: {
     %4:texture_storage_1d<rgba8unorm, read_write> = load %arg_0
     %5:u32 = textureDimensions %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_f406ff
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_f406ff
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_f406ff
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/f4321c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/f4321c.wgsl.expected.ir.msl
index 87e3a27..6380af3 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f4321c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/f4321c.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_f4321c = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_f4321c = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba32sint, read> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_f4321c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_f4321c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_f4321c
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/f48886.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/f48886.wgsl.expected.ir.msl
index c82f533..3080663 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f48886.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/f48886.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_f48886 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_f48886 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba32sint, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_f48886
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_f48886
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_f48886
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/f4e469.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/f4e469.wgsl.expected.ir.msl
index f21daf5..b5b0589 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f4e469.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/f4e469.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba32float, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_f4e469 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_f4e469 = func():void {
+  $B2: {
     %4:texture_storage_2d<rgba32float, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_f4e469
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_f4e469
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_f4e469
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/f55a94.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/f55a94.wgsl.expected.ir.msl
index 35c77f2..157d160 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f55a94.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/f55a94.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_f55a94 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_f55a94 = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba8snorm, read_write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_f55a94
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_f55a94
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_f55a94
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/f626b3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/f626b3.wgsl.expected.ir.msl
index 7de3d5f..f7a92d3 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f626b3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/f626b3.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_f626b3 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_f626b3 = func():void {
+  $B2: {
     %4:texture_cube<i32> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_f626b3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_f626b3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_f626b3
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/f7bac5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/f7bac5.wgsl.expected.ir.msl
index 77d78f9..fa54e1e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f7bac5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/f7bac5.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_f7bac5 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_f7bac5 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba32sint, read> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_f7bac5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_f7bac5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_f7bac5
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/f8522e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/f8522e.wgsl.expected.ir.msl
index 5771f3e..c56b6b9 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f8522e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/f8522e.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_f8522e = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_f8522e = func():void {
+  $B2: {
     %4:texture_2d<i32> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_f8522e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_f8522e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_f8522e
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/f93ece.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/f93ece.wgsl.expected.ir.msl
index db60c65..f0c1f58 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f93ece.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/f93ece.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec3<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_f93ece = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_f93ece = func():void {
+  $B2: {
     %4:texture_storage_3d<rgba32float, read_write> = load %arg_0
     %5:vec3<u32> = textureDimensions %4
     %res:ptr<function, vec3<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_f93ece
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_f93ece
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_f93ece
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/f94e55.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/f94e55.wgsl.expected.ir.msl
index ae414ed..1b8912c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f94e55.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/f94e55.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rg32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_f94e55 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_f94e55 = func():void {
+  $B2: {
     %4:texture_storage_2d<rg32float, read_write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_f94e55
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_f94e55
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_f94e55
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/fbb15a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/fbb15a.wgsl.expected.ir.msl
index 8aa87ad..2e6dd38 100644
--- a/test/tint/builtins/gen/var/textureDimensions/fbb15a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/fbb15a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<bgra8unorm, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_fbb15a = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_fbb15a = func():void {
+  $B2: {
     %4:texture_storage_2d<bgra8unorm, write> = load %arg_0
     %5:vec2<u32> = textureDimensions %4
     %res:ptr<function, vec2<u32>, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureDimensions_fbb15a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureDimensions_fbb15a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureDimensions_fbb15a
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureDimensions/fdbae8.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/fdbae8.wgsl.expected.ir.msl
new file mode 100644
index 0000000..3b9fcc6
--- /dev/null
+++ b/test/tint/builtins/gen/var/textureDimensions/fdbae8.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_1d<r8unorm, read>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
+}
+
+%textureDimensions_fdbae8 = func():void {
+  $B2: {
+    %4:texture_storage_1d<r8unorm, read> = load %arg_0
+    %5:u32 = textureDimensions %4
+    %res:ptr<function, u32, read_write> = var, %5
+    %7:u32 = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %textureDimensions_fdbae8
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %textureDimensions_fdbae8
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %textureDimensions_fdbae8
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/textureDimensions/fdf6e9.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureDimensions/fdf6e9.wgsl.expected.ir.msl
index 64ed017..7f04ceb 100644
--- a/test/tint/builtins/gen/var/textureDimensions/fdf6e9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/fdf6e9.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec2<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureDimensions_fdf6e9 = func():void -> %b2 {
-  %b2 = block {
+%textureDimensions_fdf6e9 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:texture_2d_array<i32> = load %arg_0
     %6:i32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureDimensions_fdf6e9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureDimensions_fdf6e9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureDimensions_fdf6e9
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/0166ec.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/0166ec.wgsl.expected.ir.msl
index fd85250..0a0d1d0 100644
--- a/test/tint/builtins/gen/var/textureGather/0166ec.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/0166ec.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_cube<i32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_0166ec = func():void -> %b2 {
-  %b2 = block {
+%textureGather_0166ec = func():void {
+  $B2: {
     %arg_3:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %6:texture_cube<i32> = load %arg_1
     %7:sampler = load %arg_2
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureGather_0166ec
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureGather_0166ec
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureGather_0166ec
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/04fa78.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/04fa78.wgsl.expected.ir.msl
index 81c3b65..229bbe9 100644
--- a/test/tint/builtins/gen/var/textureGather/04fa78.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/04fa78.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_cube_array<i32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_04fa78 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_04fa78 = func():void {
+  $B2: {
     %arg_3:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_4:ptr<function, u32, read_write> = var, 1u
     %7:texture_cube_array<i32> = load %arg_1
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureGather_04fa78
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureGather_04fa78
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureGather_04fa78
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/10c554.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/10c554.wgsl.expected.ir.msl
index c83f2f3..ef033bf 100644
--- a/test/tint/builtins/gen/var/textureGather/10c554.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/10c554.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_cube, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_10c554 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_10c554 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %6:texture_depth_cube = load %arg_0
     %7:sampler = load %arg_1
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureGather_10c554
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureGather_10c554
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureGather_10c554
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/11b2db.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/11b2db.wgsl.expected.ir.msl
index cdc3850..b11b306 100644
--- a/test/tint/builtins/gen/var/textureGather/11b2db.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/11b2db.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_cube<f32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_11b2db = func():void -> %b2 {
-  %b2 = block {
+%textureGather_11b2db = func():void {
+  $B2: {
     %arg_3:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %6:texture_cube<f32> = load %arg_1
     %7:sampler = load %arg_2
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureGather_11b2db
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureGather_11b2db
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureGather_11b2db
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/17baac.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/17baac.wgsl.expected.ir.msl
index f8d22ce..6aa26dc 100644
--- a/test/tint/builtins/gen/var/textureGather/17baac.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/17baac.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_17baac = func():void -> %b2 {
-  %b2 = block {
+%textureGather_17baac = func():void {
+  $B2: {
     %arg_3:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_4:ptr<function, u32, read_write> = var, 1u
     %7:texture_2d_array<f32> = load %arg_1
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureGather_17baac
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureGather_17baac
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureGather_17baac
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/1bf0ab.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/1bf0ab.wgsl.expected.ir.msl
index 0267737..0d2e909 100644
--- a/test/tint/builtins/gen/var/textureGather/1bf0ab.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/1bf0ab.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d_array<u32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_1bf0ab = func():void -> %b2 {
-  %b2 = block {
+%textureGather_1bf0ab = func():void {
+  $B2: {
     %arg_3:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_4:ptr<function, u32, read_write> = var, 1u
     %7:texture_2d_array<u32> = load %arg_1
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureGather_1bf0ab
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureGather_1bf0ab
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureGather_1bf0ab
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/1f7f6b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/1f7f6b.wgsl.expected.ir.msl
index 153d797..ff53ee2 100644
--- a/test/tint/builtins/gen/var/textureGather/1f7f6b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/1f7f6b.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_1f7f6b = func():void -> %b2 {
-  %b2 = block {
+%textureGather_1f7f6b = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %6:texture_depth_2d = load %arg_0
     %7:sampler = load %arg_1
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureGather_1f7f6b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureGather_1f7f6b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureGather_1f7f6b
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/22e930.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/22e930.wgsl.expected.ir.msl
index 79e6e79..c5ad7ea 100644
--- a/test/tint/builtins/gen/var/textureGather/22e930.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/22e930.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_22e930 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_22e930 = func():void {
+  $B2: {
     %arg_3:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_4:ptr<function, i32, read_write> = var, 1i
     %7:texture_2d_array<f32> = load %arg_1
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureGather_22e930
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureGather_22e930
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureGather_22e930
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/238ec4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/238ec4.wgsl.expected.ir.msl
index 94767c0..f0fc8ea 100644
--- a/test/tint/builtins/gen/var/textureGather/238ec4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/238ec4.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_238ec4 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_238ec4 = func():void {
+  $B2: {
     %arg_3:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_4:ptr<function, u32, read_write> = var, 1u
     %7:texture_2d_array<f32> = load %arg_1
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureGather_238ec4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureGather_238ec4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureGather_238ec4
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/24b0bd.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/24b0bd.wgsl.expected.ir.msl
index 8393693..727d472 100644
--- a/test/tint/builtins/gen/var/textureGather/24b0bd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/24b0bd.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_24b0bd = func():void -> %b2 {
-  %b2 = block {
+%textureGather_24b0bd = func():void {
+  $B2: {
     %arg_3:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_4:ptr<function, i32, read_write> = var, 1i
     %7:texture_2d_array<f32> = load %arg_1
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureGather_24b0bd
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureGather_24b0bd
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureGather_24b0bd
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/269250.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/269250.wgsl.expected.ir.msl
index 23aa451..b0630eb 100644
--- a/test/tint/builtins/gen/var/textureGather/269250.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/269250.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d_array<i32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_269250 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_269250 = func():void {
+  $B2: {
     %arg_3:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_4:ptr<function, u32, read_write> = var, 1u
     %7:texture_2d_array<i32> = load %arg_1
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureGather_269250
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureGather_269250
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureGather_269250
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/2a4f40.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/2a4f40.wgsl.expected.ir.msl
index cf4cf94..01eb908 100644
--- a/test/tint/builtins/gen/var/textureGather/2a4f40.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/2a4f40.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_2a4f40 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_2a4f40 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_3:ptr<function, u32, read_write> = var, 1u
     %7:texture_depth_2d_array = load %arg_0
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureGather_2a4f40
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureGather_2a4f40
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureGather_2a4f40
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/2cc066.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/2cc066.wgsl.expected.ir.msl
index ed58bc5..7ab8ec2 100644
--- a/test/tint/builtins/gen/var/textureGather/2cc066.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/2cc066.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d_array<u32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_2cc066 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_2cc066 = func():void {
+  $B2: {
     %arg_3:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_4:ptr<function, i32, read_write> = var, 1i
     %7:texture_2d_array<u32> = load %arg_1
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureGather_2cc066
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureGather_2cc066
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureGather_2cc066
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/2e0ed5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/2e0ed5.wgsl.expected.ir.msl
index bb65cc2..a7d28dd 100644
--- a/test/tint/builtins/gen/var/textureGather/2e0ed5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/2e0ed5.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_2e0ed5 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_2e0ed5 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %6:texture_depth_2d = load %arg_0
     %7:sampler = load %arg_1
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureGather_2e0ed5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureGather_2e0ed5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureGather_2e0ed5
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/32c4e8.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/32c4e8.wgsl.expected.ir.msl
index fb4a7d5..cb030a7 100644
--- a/test/tint/builtins/gen/var/textureGather/32c4e8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/32c4e8.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_cube<f32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_32c4e8 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_32c4e8 = func():void {
+  $B2: {
     %arg_3:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %6:texture_cube<f32> = load %arg_1
     %7:sampler = load %arg_2
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureGather_32c4e8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureGather_32c4e8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureGather_32c4e8
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/3b32cc.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/3b32cc.wgsl.expected.ir.msl
index c7f048d..982d4be 100644
--- a/test/tint/builtins/gen/var/textureGather/3b32cc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/3b32cc.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_cube<u32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_3b32cc = func():void -> %b2 {
-  %b2 = block {
+%textureGather_3b32cc = func():void {
+  $B2: {
     %arg_3:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %6:texture_cube<u32> = load %arg_1
     %7:sampler = load %arg_2
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureGather_3b32cc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureGather_3b32cc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureGather_3b32cc
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/43025d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/43025d.wgsl.expected.ir.msl
index e6cad7b..81c0970 100644
--- a/test/tint/builtins/gen/var/textureGather/43025d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/43025d.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_cube_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_43025d = func():void -> %b2 {
-  %b2 = block {
+%textureGather_43025d = func():void {
+  $B2: {
     %arg_2:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_3:ptr<function, i32, read_write> = var, 1i
     %7:texture_depth_cube_array = load %arg_0
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureGather_43025d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureGather_43025d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureGather_43025d
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/445793.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/445793.wgsl.expected.ir.msl
index 49652c2..4553438 100644
--- a/test/tint/builtins/gen/var/textureGather/445793.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/445793.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d_array<i32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_445793 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_445793 = func():void {
+  $B2: {
     %arg_3:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_4:ptr<function, i32, read_write> = var, 1i
     %7:texture_2d_array<i32> = load %arg_1
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureGather_445793
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureGather_445793
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureGather_445793
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/49b07f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/49b07f.wgsl.expected.ir.msl
index 3daeb14..8a1cf74 100644
--- a/test/tint/builtins/gen/var/textureGather/49b07f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/49b07f.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d<u32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_49b07f = func():void -> %b2 {
-  %b2 = block {
+%textureGather_49b07f = func():void {
+  $B2: {
     %arg_3:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %6:texture_2d<u32> = load %arg_1
     %7:sampler = load %arg_2
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureGather_49b07f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureGather_49b07f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureGather_49b07f
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/4b8103.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/4b8103.wgsl.expected.ir.msl
index 98b58e2..9c6c33c 100644
--- a/test/tint/builtins/gen/var/textureGather/4b8103.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/4b8103.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_4b8103 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_4b8103 = func():void {
+  $B2: {
     %arg_3:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_4:ptr<function, i32, read_write> = var, 1i
     %7:texture_2d_array<f32> = load %arg_1
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureGather_4b8103
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureGather_4b8103
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureGather_4b8103
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/4e8ac5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/4e8ac5.wgsl.expected.ir.msl
index e91fc75..27a67e6 100644
--- a/test/tint/builtins/gen/var/textureGather/4e8ac5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/4e8ac5.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d_array<i32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_4e8ac5 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_4e8ac5 = func():void {
+  $B2: {
     %arg_3:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_4:ptr<function, u32, read_write> = var, 1u
     %7:texture_2d_array<i32> = load %arg_1
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureGather_4e8ac5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureGather_4e8ac5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureGather_4e8ac5
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/5266da.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/5266da.wgsl.expected.ir.msl
index d62b781..8cf9066 100644
--- a/test/tint/builtins/gen/var/textureGather/5266da.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/5266da.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d<f32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_5266da = func():void -> %b2 {
-  %b2 = block {
+%textureGather_5266da = func():void {
+  $B2: {
     %arg_3:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %6:texture_2d<f32> = load %arg_1
     %7:sampler = load %arg_2
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureGather_5266da
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureGather_5266da
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureGather_5266da
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/59372a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/59372a.wgsl.expected.ir.msl
index b2df564..e87ec4c 100644
--- a/test/tint/builtins/gen/var/textureGather/59372a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/59372a.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_59372a = func():void -> %b2 {
-  %b2 = block {
+%textureGather_59372a = func():void {
+  $B2: {
     %arg_3:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_4:ptr<function, u32, read_write> = var, 1u
     %7:texture_2d_array<f32> = load %arg_1
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureGather_59372a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureGather_59372a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureGather_59372a
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/5ba85f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/5ba85f.wgsl.expected.ir.msl
index 9cfb5db..69aaac6 100644
--- a/test/tint/builtins/gen/var/textureGather/5ba85f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/5ba85f.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_cube<i32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_5ba85f = func():void -> %b2 {
-  %b2 = block {
+%textureGather_5ba85f = func():void {
+  $B2: {
     %arg_3:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %6:texture_cube<i32> = load %arg_1
     %7:sampler = load %arg_2
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureGather_5ba85f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureGather_5ba85f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureGather_5ba85f
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/5bd491.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/5bd491.wgsl.expected.ir.msl
index 5e0ebf8..d378fdc 100644
--- a/test/tint/builtins/gen/var/textureGather/5bd491.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/5bd491.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d<u32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_5bd491 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_5bd491 = func():void {
+  $B2: {
     %arg_3:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %6:texture_2d<u32> = load %arg_1
     %7:sampler = load %arg_2
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureGather_5bd491
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureGather_5bd491
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureGather_5bd491
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/6b7b74.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/6b7b74.wgsl.expected.ir.msl
index 968908e..7319534 100644
--- a/test/tint/builtins/gen/var/textureGather/6b7b74.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/6b7b74.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d_array<u32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_6b7b74 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_6b7b74 = func():void {
+  $B2: {
     %arg_3:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_4:ptr<function, u32, read_write> = var, 1u
     %7:texture_2d_array<u32> = load %arg_1
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureGather_6b7b74
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureGather_6b7b74
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureGather_6b7b74
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/751f8a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/751f8a.wgsl.expected.ir.msl
index 12337f4..59a73ac 100644
--- a/test/tint/builtins/gen/var/textureGather/751f8a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/751f8a.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_cube_array<f32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_751f8a = func():void -> %b2 {
-  %b2 = block {
+%textureGather_751f8a = func():void {
+  $B2: {
     %arg_3:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_4:ptr<function, i32, read_write> = var, 1i
     %7:texture_cube_array<f32> = load %arg_1
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureGather_751f8a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureGather_751f8a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureGather_751f8a
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/788010.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/788010.wgsl.expected.ir.msl
index f93202d..7a0e7a3 100644
--- a/test/tint/builtins/gen/var/textureGather/788010.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/788010.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_cube_array<i32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_788010 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_788010 = func():void {
+  $B2: {
     %arg_3:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_4:ptr<function, u32, read_write> = var, 1u
     %7:texture_cube_array<i32> = load %arg_1
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureGather_788010
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureGather_788010
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureGather_788010
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/7c3828.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/7c3828.wgsl.expected.ir.msl
index 1c0d8bf..f5a0d69 100644
--- a/test/tint/builtins/gen/var/textureGather/7c3828.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/7c3828.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d<i32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_7c3828 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_7c3828 = func():void {
+  $B2: {
     %arg_3:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %6:texture_2d<i32> = load %arg_1
     %7:sampler = load %arg_2
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureGather_7c3828
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureGather_7c3828
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureGather_7c3828
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/7dd226.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/7dd226.wgsl.expected.ir.msl
index 3ce4abc..860315c 100644
--- a/test/tint/builtins/gen/var/textureGather/7dd226.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/7dd226.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_cube_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_7dd226 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_7dd226 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_3:ptr<function, u32, read_write> = var, 1u
     %7:texture_depth_cube_array = load %arg_0
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureGather_7dd226
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureGather_7dd226
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureGather_7dd226
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/829357.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/829357.wgsl.expected.ir.msl
index 106c368..8bab0a9 100644
--- a/test/tint/builtins/gen/var/textureGather/829357.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/829357.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_cube_array<f32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_829357 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_829357 = func():void {
+  $B2: {
     %arg_3:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_4:ptr<function, u32, read_write> = var, 1u
     %7:texture_cube_array<f32> = load %arg_1
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureGather_829357
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureGather_829357
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureGather_829357
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/831549.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/831549.wgsl.expected.ir.msl
index aaa451f..ce87c7e 100644
--- a/test/tint/builtins/gen/var/textureGather/831549.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/831549.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_831549 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_831549 = func():void {
+  $B2: {
     %arg_3:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_4:ptr<function, i32, read_write> = var, 1i
     %7:texture_2d_array<f32> = load %arg_1
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureGather_831549
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureGather_831549
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureGather_831549
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/8578bc.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/8578bc.wgsl.expected.ir.msl
index 555d6f8..027b3b5 100644
--- a/test/tint/builtins/gen/var/textureGather/8578bc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/8578bc.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_cube_array<f32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_8578bc = func():void -> %b2 {
-  %b2 = block {
+%textureGather_8578bc = func():void {
+  $B2: {
     %arg_3:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_4:ptr<function, u32, read_write> = var, 1u
     %7:texture_cube_array<f32> = load %arg_1
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureGather_8578bc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureGather_8578bc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureGather_8578bc
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/89680f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/89680f.wgsl.expected.ir.msl
index 6b27647..e8db19a 100644
--- a/test/tint/builtins/gen/var/textureGather/89680f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/89680f.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_cube<u32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_89680f = func():void -> %b2 {
-  %b2 = block {
+%textureGather_89680f = func():void {
+  $B2: {
     %arg_3:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %6:texture_cube<u32> = load %arg_1
     %7:sampler = load %arg_2
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureGather_89680f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureGather_89680f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureGather_89680f
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/8b754c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/8b754c.wgsl.expected.ir.msl
index 591fc0e..3660d14 100644
--- a/test/tint/builtins/gen/var/textureGather/8b754c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/8b754c.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d_array<i32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_8b754c = func():void -> %b2 {
-  %b2 = block {
+%textureGather_8b754c = func():void {
+  $B2: {
     %arg_3:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_4:ptr<function, i32, read_write> = var, 1i
     %7:texture_2d_array<i32> = load %arg_1
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureGather_8b754c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureGather_8b754c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureGather_8b754c
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/8fae00.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/8fae00.wgsl.expected.ir.msl
index 151e267..4b6fea4 100644
--- a/test/tint/builtins/gen/var/textureGather/8fae00.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/8fae00.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d<u32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_8fae00 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_8fae00 = func():void {
+  $B2: {
     %arg_3:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %6:texture_2d<u32> = load %arg_1
     %7:sampler = load %arg_2
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureGather_8fae00
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureGather_8fae00
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureGather_8fae00
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/92ea47.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/92ea47.wgsl.expected.ir.msl
index f0cca42..b18e2e9 100644
--- a/test/tint/builtins/gen/var/textureGather/92ea47.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/92ea47.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d_array<u32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_92ea47 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_92ea47 = func():void {
+  $B2: {
     %arg_3:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_4:ptr<function, i32, read_write> = var, 1i
     %7:texture_2d_array<u32> = load %arg_1
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureGather_92ea47
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureGather_92ea47
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureGather_92ea47
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/986700.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/986700.wgsl.expected.ir.msl
index ddd1c46..726c7b1 100644
--- a/test/tint/builtins/gen/var/textureGather/986700.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/986700.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d<u32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_986700 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_986700 = func():void {
+  $B2: {
     %arg_3:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %6:texture_2d<u32> = load %arg_1
     %7:sampler = load %arg_2
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureGather_986700
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureGather_986700
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureGather_986700
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/9a6358.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/9a6358.wgsl.expected.ir.msl
index 598d6fe..75afaa1 100644
--- a/test/tint/builtins/gen/var/textureGather/9a6358.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/9a6358.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_9a6358 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_9a6358 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_3:ptr<function, i32, read_write> = var, 1i
     %7:texture_depth_2d_array = load %arg_0
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureGather_9a6358
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureGather_9a6358
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureGather_9a6358
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/9ab41e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/9ab41e.wgsl.expected.ir.msl
index d3c54e4..1427357d 100644
--- a/test/tint/builtins/gen/var/textureGather/9ab41e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/9ab41e.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d_array<i32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_9ab41e = func():void -> %b2 {
-  %b2 = block {
+%textureGather_9ab41e = func():void {
+  $B2: {
     %arg_3:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_4:ptr<function, i32, read_write> = var, 1i
     %7:texture_2d_array<i32> = load %arg_1
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureGather_9ab41e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureGather_9ab41e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureGather_9ab41e
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/a0372b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/a0372b.wgsl.expected.ir.msl
index 3418f60..b3062d0 100644
--- a/test/tint/builtins/gen/var/textureGather/a0372b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/a0372b.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d_array<u32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_a0372b = func():void -> %b2 {
-  %b2 = block {
+%textureGather_a0372b = func():void {
+  $B2: {
     %arg_3:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_4:ptr<function, u32, read_write> = var, 1u
     %7:texture_2d_array<u32> = load %arg_1
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureGather_a0372b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureGather_a0372b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureGather_a0372b
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/a68027.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/a68027.wgsl.expected.ir.msl
index cf1f4fa..0d51eda 100644
--- a/test/tint/builtins/gen/var/textureGather/a68027.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/a68027.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_a68027 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_a68027 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_3:ptr<function, u32, read_write> = var, 1u
     %7:texture_depth_2d_array = load %arg_0
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureGather_a68027
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureGather_a68027
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureGather_a68027
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/aaf6bd.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/aaf6bd.wgsl.expected.ir.msl
index aa21993..5397c2b 100644
--- a/test/tint/builtins/gen/var/textureGather/aaf6bd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/aaf6bd.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_cube_array<i32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_aaf6bd = func():void -> %b2 {
-  %b2 = block {
+%textureGather_aaf6bd = func():void {
+  $B2: {
     %arg_3:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_4:ptr<function, i32, read_write> = var, 1i
     %7:texture_cube_array<i32> = load %arg_1
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureGather_aaf6bd
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureGather_aaf6bd
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureGather_aaf6bd
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/af55b3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/af55b3.wgsl.expected.ir.msl
index 727f603..a0b980f 100644
--- a/test/tint/builtins/gen/var/textureGather/af55b3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/af55b3.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d<f32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_af55b3 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_af55b3 = func():void {
+  $B2: {
     %arg_3:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %6:texture_2d<f32> = load %arg_1
     %7:sampler = load %arg_2
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureGather_af55b3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureGather_af55b3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureGather_af55b3
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/bb3ac5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/bb3ac5.wgsl.expected.ir.msl
index b2dfc9c..62ae680 100644
--- a/test/tint/builtins/gen/var/textureGather/bb3ac5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/bb3ac5.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d<i32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_bb3ac5 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_bb3ac5 = func():void {
+  $B2: {
     %arg_3:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %6:texture_2d<i32> = load %arg_1
     %7:sampler = load %arg_2
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureGather_bb3ac5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureGather_bb3ac5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureGather_bb3ac5
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/bd33b6.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/bd33b6.wgsl.expected.ir.msl
index 96a1737..8a55701 100644
--- a/test/tint/builtins/gen/var/textureGather/bd33b6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/bd33b6.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d_array<i32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_bd33b6 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_bd33b6 = func():void {
+  $B2: {
     %arg_3:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_4:ptr<function, u32, read_write> = var, 1u
     %7:texture_2d_array<i32> = load %arg_1
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureGather_bd33b6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureGather_bd33b6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureGather_bd33b6
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/be276f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/be276f.wgsl.expected.ir.msl
index c33bb62..fb74bf3 100644
--- a/test/tint/builtins/gen/var/textureGather/be276f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/be276f.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_cube_array<u32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_be276f = func():void -> %b2 {
-  %b2 = block {
+%textureGather_be276f = func():void {
+  $B2: {
     %arg_3:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_4:ptr<function, u32, read_write> = var, 1u
     %7:texture_cube_array<u32> = load %arg_1
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureGather_be276f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureGather_be276f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureGather_be276f
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/c0640c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/c0640c.wgsl.expected.ir.msl
index 5cad5e6..e5c2304 100644
--- a/test/tint/builtins/gen/var/textureGather/c0640c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/c0640c.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_cube_array<i32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_c0640c = func():void -> %b2 {
-  %b2 = block {
+%textureGather_c0640c = func():void {
+  $B2: {
     %arg_3:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_4:ptr<function, i32, read_write> = var, 1i
     %7:texture_cube_array<i32> = load %arg_1
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureGather_c0640c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureGather_c0640c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureGather_c0640c
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/ccadde.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/ccadde.wgsl.expected.ir.msl
index 1f1a751..a5c5323 100644
--- a/test/tint/builtins/gen/var/textureGather/ccadde.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/ccadde.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d<i32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_ccadde = func():void -> %b2 {
-  %b2 = block {
+%textureGather_ccadde = func():void {
+  $B2: {
     %arg_3:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %6:texture_2d<i32> = load %arg_1
     %7:sampler = load %arg_2
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureGather_ccadde
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureGather_ccadde
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureGather_ccadde
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/ce5578.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/ce5578.wgsl.expected.ir.msl
index e9eabf7..4204735 100644
--- a/test/tint/builtins/gen/var/textureGather/ce5578.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/ce5578.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d_array<u32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_ce5578 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_ce5578 = func():void {
+  $B2: {
     %arg_3:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_4:ptr<function, u32, read_write> = var, 1u
     %7:texture_2d_array<u32> = load %arg_1
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureGather_ce5578
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureGather_ce5578
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureGather_ce5578
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/cf9112.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/cf9112.wgsl.expected.ir.msl
index ac08a80..fa90e63 100644
--- a/test/tint/builtins/gen/var/textureGather/cf9112.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/cf9112.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d_array<i32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_cf9112 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_cf9112 = func():void {
+  $B2: {
     %arg_3:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_4:ptr<function, u32, read_write> = var, 1u
     %7:texture_2d_array<i32> = load %arg_1
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureGather_cf9112
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureGather_cf9112
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureGather_cf9112
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/d1f187.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/d1f187.wgsl.expected.ir.msl
index 907660e..8fe8b33 100644
--- a/test/tint/builtins/gen/var/textureGather/d1f187.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/d1f187.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d_array<u32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_d1f187 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_d1f187 = func():void {
+  $B2: {
     %arg_3:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_4:ptr<function, i32, read_write> = var, 1i
     %7:texture_2d_array<u32> = load %arg_1
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureGather_d1f187
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureGather_d1f187
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureGather_d1f187
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/d4b5c6.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/d4b5c6.wgsl.expected.ir.msl
index 04b8911..2113aa6 100644
--- a/test/tint/builtins/gen/var/textureGather/d4b5c6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/d4b5c6.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_cube_array<u32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_d4b5c6 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_d4b5c6 = func():void {
+  $B2: {
     %arg_3:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_4:ptr<function, i32, read_write> = var, 1i
     %7:texture_cube_array<u32> = load %arg_1
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureGather_d4b5c6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureGather_d4b5c6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureGather_d4b5c6
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/d6507c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/d6507c.wgsl.expected.ir.msl
index a21a995..61f568d 100644
--- a/test/tint/builtins/gen/var/textureGather/d6507c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/d6507c.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d<f32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_d6507c = func():void -> %b2 {
-  %b2 = block {
+%textureGather_d6507c = func():void {
+  $B2: {
     %arg_3:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %6:texture_2d<f32> = load %arg_1
     %7:sampler = load %arg_2
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureGather_d6507c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureGather_d6507c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureGather_d6507c
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/d8e958.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/d8e958.wgsl.expected.ir.msl
index 23e90be..f4203cb 100644
--- a/test/tint/builtins/gen/var/textureGather/d8e958.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/d8e958.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d<f32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_d8e958 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_d8e958 = func():void {
+  $B2: {
     %arg_3:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %6:texture_2d<f32> = load %arg_1
     %7:sampler = load %arg_2
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureGather_d8e958
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureGather_d8e958
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureGather_d8e958
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/d90605.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/d90605.wgsl.expected.ir.msl
index dce6889..a9b0cce 100644
--- a/test/tint/builtins/gen/var/textureGather/d90605.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/d90605.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_d90605 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_d90605 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_3:ptr<function, i32, read_write> = var, 1i
     %7:texture_depth_2d_array = load %arg_0
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureGather_d90605
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureGather_d90605
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureGather_d90605
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/d98d59.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/d98d59.wgsl.expected.ir.msl
index 47b37c2..c14280e 100644
--- a/test/tint/builtins/gen/var/textureGather/d98d59.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/d98d59.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_cube_array<f32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_d98d59 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_d98d59 = func():void {
+  $B2: {
     %arg_3:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_4:ptr<function, i32, read_write> = var, 1i
     %7:texture_cube_array<f32> = load %arg_1
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureGather_d98d59
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureGather_d98d59
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureGather_d98d59
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/dc6661.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/dc6661.wgsl.expected.ir.msl
index a131224..d100c7f 100644
--- a/test/tint/builtins/gen/var/textureGather/dc6661.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/dc6661.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d<i32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_dc6661 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_dc6661 = func():void {
+  $B2: {
     %arg_3:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %6:texture_2d<i32> = load %arg_1
     %7:sampler = load %arg_2
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureGather_dc6661
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureGather_dc6661
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureGather_dc6661
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/e2acac.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/e2acac.wgsl.expected.ir.msl
index 32aa737..c1f105d 100644
--- a/test/tint/builtins/gen/var/textureGather/e2acac.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/e2acac.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_cube_array<u32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_e2acac = func():void -> %b2 {
-  %b2 = block {
+%textureGather_e2acac = func():void {
+  $B2: {
     %arg_3:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_4:ptr<function, u32, read_write> = var, 1u
     %7:texture_cube_array<u32> = load %arg_1
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureGather_e2acac
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureGather_e2acac
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureGather_e2acac
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/e3165f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/e3165f.wgsl.expected.ir.msl
index 16226f0..cfcd183 100644
--- a/test/tint/builtins/gen/var/textureGather/e3165f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/e3165f.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d_array<u32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_e3165f = func():void -> %b2 {
-  %b2 = block {
+%textureGather_e3165f = func():void {
+  $B2: {
     %arg_3:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_4:ptr<function, i32, read_write> = var, 1i
     %7:texture_2d_array<u32> = load %arg_1
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureGather_e3165f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureGather_e3165f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureGather_e3165f
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/e9d390.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/e9d390.wgsl.expected.ir.msl
index 3851687..a863aab 100644
--- a/test/tint/builtins/gen/var/textureGather/e9d390.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/e9d390.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d_array<i32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_e9d390 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_e9d390 = func():void {
+  $B2: {
     %arg_3:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_4:ptr<function, i32, read_write> = var, 1i
     %7:texture_2d_array<i32> = load %arg_1
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureGather_e9d390
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureGather_e9d390
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureGather_e9d390
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/ea8eb4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/ea8eb4.wgsl.expected.ir.msl
index 0271793..ffc8493 100644
--- a/test/tint/builtins/gen/var/textureGather/ea8eb4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/ea8eb4.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_ea8eb4 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_ea8eb4 = func():void {
+  $B2: {
     %arg_3:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_4:ptr<function, u32, read_write> = var, 1u
     %7:texture_2d_array<f32> = load %arg_1
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureGather_ea8eb4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureGather_ea8eb4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureGather_ea8eb4
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGather/f2c6e3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGather/f2c6e3.wgsl.expected.ir.msl
index af007b1..53444e8 100644
--- a/test/tint/builtins/gen/var/textureGather/f2c6e3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGather/f2c6e3.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_1:ptr<handle, texture_cube_array<u32>, read> = var @binding_point(1, 1)
   %arg_2:ptr<handle, sampler, read> = var @binding_point(1, 2)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGather_f2c6e3 = func():void -> %b2 {
-  %b2 = block {
+%textureGather_f2c6e3 = func():void {
+  $B2: {
     %arg_3:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_4:ptr<function, i32, read_write> = var, 1i
     %7:texture_cube_array<u32> = load %arg_1
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureGather_f2c6e3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureGather_f2c6e3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureGather_f2c6e3
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGatherCompare/144a9a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGatherCompare/144a9a.wgsl.expected.ir.msl
index 87cf08e..f4983aa 100644
--- a/test/tint/builtins/gen/var/textureGatherCompare/144a9a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGatherCompare/144a9a.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler_comparison, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGatherCompare_144a9a = func():void -> %b2 {
-  %b2 = block {
+%textureGatherCompare_144a9a = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_3:ptr<function, u32, read_write> = var, 1u
     %arg_4:ptr<function, f32, read_write> = var, 1.0f
@@ -23,20 +23,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %17:void = call %textureGatherCompare_144a9a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %19:void = call %textureGatherCompare_144a9a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %21:void = call %textureGatherCompare_144a9a
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGatherCompare/182fd4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGatherCompare/182fd4.wgsl.expected.ir.msl
index c3df8cb..0ff52f9 100644
--- a/test/tint/builtins/gen/var/textureGatherCompare/182fd4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGatherCompare/182fd4.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_cube, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler_comparison, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGatherCompare_182fd4 = func():void -> %b2 {
-  %b2 = block {
+%textureGatherCompare_182fd4 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_3:ptr<function, f32, read_write> = var, 1.0f
     %7:texture_depth_cube = load %arg_0
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureGatherCompare_182fd4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureGatherCompare_182fd4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureGatherCompare_182fd4
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGatherCompare/2e409c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGatherCompare/2e409c.wgsl.expected.ir.msl
index c0bf526..c182aed 100644
--- a/test/tint/builtins/gen/var/textureGatherCompare/2e409c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGatherCompare/2e409c.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_cube_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler_comparison, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGatherCompare_2e409c = func():void -> %b2 {
-  %b2 = block {
+%textureGatherCompare_2e409c = func():void {
+  $B2: {
     %arg_2:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_3:ptr<function, u32, read_write> = var, 1u
     %arg_4:ptr<function, f32, read_write> = var, 1.0f
@@ -23,20 +23,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %17:void = call %textureGatherCompare_2e409c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %19:void = call %textureGatherCompare_2e409c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %21:void = call %textureGatherCompare_2e409c
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGatherCompare/313add.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGatherCompare/313add.wgsl.expected.ir.msl
index a0de746..76a8459 100644
--- a/test/tint/builtins/gen/var/textureGatherCompare/313add.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGatherCompare/313add.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler_comparison, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGatherCompare_313add = func():void -> %b2 {
-  %b2 = block {
+%textureGatherCompare_313add = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_3:ptr<function, f32, read_write> = var, 1.0f
     %7:texture_depth_2d = load %arg_0
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureGatherCompare_313add
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureGatherCompare_313add
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureGatherCompare_313add
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGatherCompare/60d2d1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGatherCompare/60d2d1.wgsl.expected.ir.msl
index 4d8a5c9..049f816 100644
--- a/test/tint/builtins/gen/var/textureGatherCompare/60d2d1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGatherCompare/60d2d1.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_cube_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler_comparison, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGatherCompare_60d2d1 = func():void -> %b2 {
-  %b2 = block {
+%textureGatherCompare_60d2d1 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_3:ptr<function, i32, read_write> = var, 1i
     %arg_4:ptr<function, f32, read_write> = var, 1.0f
@@ -23,20 +23,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %17:void = call %textureGatherCompare_60d2d1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %19:void = call %textureGatherCompare_60d2d1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %21:void = call %textureGatherCompare_60d2d1
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGatherCompare/6d9352.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGatherCompare/6d9352.wgsl.expected.ir.msl
index aca419f..063b409 100644
--- a/test/tint/builtins/gen/var/textureGatherCompare/6d9352.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGatherCompare/6d9352.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler_comparison, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGatherCompare_6d9352 = func():void -> %b2 {
-  %b2 = block {
+%textureGatherCompare_6d9352 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_3:ptr<function, f32, read_write> = var, 1.0f
     %7:texture_depth_2d = load %arg_0
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureGatherCompare_6d9352
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureGatherCompare_6d9352
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureGatherCompare_6d9352
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGatherCompare/783e65.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGatherCompare/783e65.wgsl.expected.ir.msl
index 3648790..8be1f8f 100644
--- a/test/tint/builtins/gen/var/textureGatherCompare/783e65.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGatherCompare/783e65.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler_comparison, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGatherCompare_783e65 = func():void -> %b2 {
-  %b2 = block {
+%textureGatherCompare_783e65 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_3:ptr<function, i32, read_write> = var, 1i
     %arg_4:ptr<function, f32, read_write> = var, 1.0f
@@ -23,20 +23,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %17:void = call %textureGatherCompare_783e65
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %19:void = call %textureGatherCompare_783e65
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %21:void = call %textureGatherCompare_783e65
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGatherCompare/b5bc43.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGatherCompare/b5bc43.wgsl.expected.ir.msl
index 0fe3aab..32f6841 100644
--- a/test/tint/builtins/gen/var/textureGatherCompare/b5bc43.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGatherCompare/b5bc43.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler_comparison, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGatherCompare_b5bc43 = func():void -> %b2 {
-  %b2 = block {
+%textureGatherCompare_b5bc43 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_3:ptr<function, u32, read_write> = var, 1u
     %arg_4:ptr<function, f32, read_write> = var, 1.0f
@@ -23,20 +23,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %17:void = call %textureGatherCompare_b5bc43
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %19:void = call %textureGatherCompare_b5bc43
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %21:void = call %textureGatherCompare_b5bc43
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureGatherCompare/f585cc.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureGatherCompare/f585cc.wgsl.expected.ir.msl
index e0d3f69..cea3df6 100644
--- a/test/tint/builtins/gen/var/textureGatherCompare/f585cc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureGatherCompare/f585cc.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler_comparison, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureGatherCompare_f585cc = func():void -> %b2 {
-  %b2 = block {
+%textureGatherCompare_f585cc = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_3:ptr<function, i32, read_write> = var, 1i
     %arg_4:ptr<function, f32, read_write> = var, 1.0f
@@ -23,20 +23,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %17:void = call %textureGatherCompare_f585cc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %19:void = call %textureGatherCompare_f585cc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %21:void = call %textureGatherCompare_f585cc
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/012e11.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/012e11.wgsl.expected.ir.msl
index 2f377ff..cc8429b 100644
--- a/test/tint/builtins/gen/var/textureLoad/012e11.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/012e11.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_012e11 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_012e11 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %5:texture_storage_3d<rgba8unorm, read_write> = load %arg_0
     %6:vec3<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_012e11
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_012e11
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_012e11
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/019da0.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/019da0.wgsl.expected.ir.msl
index b765d71..115b8cb 100644
--- a/test/tint/builtins/gen/var/textureLoad/019da0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/019da0.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_019da0 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_019da0 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_3d<f32> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_019da0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_019da0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_019da0
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/01cd01.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/01cd01.wgsl.expected.ir.msl
index 81e3ff2..c922f21 100644
--- a/test/tint/builtins/gen/var/textureLoad/01cd01.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/01cd01.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_01cd01 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_01cd01 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<r32sint, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_01cd01
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_01cd01
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_01cd01
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/026217.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/026217.wgsl.expected.ir.msl
index 993c3b1..dbe5f5d 100644
--- a/test/tint/builtins/gen/var/textureLoad/026217.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/026217.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_026217 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_026217 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %arg_3:ptr<function, i32, read_write> = var, 1i
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureLoad_026217
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureLoad_026217
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureLoad_026217
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/02c48d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/02c48d.wgsl.expected.ir.msl
index 19d99ec..17f4ca1 100644
--- a/test/tint/builtins/gen/var/textureLoad/02c48d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/02c48d.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba16uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_02c48d = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_02c48d = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %5:texture_storage_3d<rgba16uint, read_write> = load %arg_0
     %6:vec3<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_02c48d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_02c48d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_02c48d
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/02ef1f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/02ef1f.wgsl.expected.ir.msl
index 9bad2bf..1181c7e 100644
--- a/test/tint/builtins/gen/var/textureLoad/02ef1f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/02ef1f.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<r32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_02ef1f = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_02ef1f = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %5:texture_storage_2d<r32uint, read_write> = load %arg_0
     %6:vec2<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_02ef1f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_02ef1f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_02ef1f
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/03e03e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/03e03e.wgsl.expected.ir.msl
index e4ef4e9..6d76c99 100644
--- a/test/tint/builtins/gen/var/textureLoad/03e03e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/03e03e.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba16sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_03e03e = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_03e03e = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %5:texture_storage_3d<rgba16sint, read_write> = load %arg_0
     %6:vec3<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_03e03e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_03e03e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_03e03e
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/045ec9.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/045ec9.wgsl.expected.ir.msl
index 6b10039..8af7b14 100644
--- a/test/tint/builtins/gen/var/textureLoad/045ec9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/045ec9.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_045ec9 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_045ec9 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %5:texture_storage_3d<rgba8sint, read> = load %arg_0
     %6:vec3<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_045ec9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_045ec9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_045ec9
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/04b911.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/04b911.wgsl.expected.ir.msl
index 4c00f7e..f1ccaea 100644
--- a/test/tint/builtins/gen/var/textureLoad/04b911.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/04b911.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_04b911 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_04b911 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %arg_3:ptr<function, u32, read_write> = var, 1u
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureLoad_04b911
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureLoad_04b911
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureLoad_04b911
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/050c33.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/050c33.wgsl.expected.ir.msl
index 7a47d9f..130e39b 100644
--- a/test/tint/builtins/gen/var/textureLoad/050c33.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/050c33.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rg32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_050c33 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_050c33 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %5:texture_storage_2d<rg32uint, read> = load %arg_0
     %6:vec2<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_050c33
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_050c33
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_050c33
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/054350.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/054350.wgsl.expected.ir.msl
index dec349b..eefdc77 100644
--- a/test/tint/builtins/gen/var/textureLoad/054350.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/054350.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_054350 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_054350 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:texture_storage_1d<rgba8uint, read_write> = load %arg_0
     %6:u32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_054350
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_054350
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_054350
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/0674b1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/0674b1.wgsl.expected.ir.msl
index 058ee6a..5472f2c 100644
--- a/test/tint/builtins/gen/var/textureLoad/0674b1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/0674b1.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8snorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_0674b1 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_0674b1 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %5:texture_storage_3d<rgba8snorm, read> = load %arg_0
     %6:vec3<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_0674b1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_0674b1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_0674b1
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/06ac37.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/06ac37.wgsl.expected.ir.msl
index a4760e0..66800f6 100644
--- a/test/tint/builtins/gen/var/textureLoad/06ac37.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/06ac37.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_06ac37 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_06ac37 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<rgba32float, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_06ac37
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_06ac37
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_06ac37
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/072e26.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/072e26.wgsl.expected.ir.msl
index 1946ed5..9783701 100644
--- a/test/tint/builtins/gen/var/textureLoad/072e26.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/072e26.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8snorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_072e26 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_072e26 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<rgba8snorm, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_072e26
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_072e26
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_072e26
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/078bc4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/078bc4.wgsl.expected.ir.msl
index 929f3d6..8874238 100644
--- a/test/tint/builtins/gen/var/textureLoad/078bc4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/078bc4.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8snorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_078bc4 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_078bc4 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %5:texture_storage_2d<rgba8snorm, read> = load %arg_0
     %6:vec2<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_078bc4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_078bc4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_078bc4
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/0b515a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/0b515a.wgsl.expected.ir.msl
index 3a9e12b..6ed4eb2 100644
--- a/test/tint/builtins/gen/var/textureLoad/0b515a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/0b515a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_0b515a = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_0b515a = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<rgba16sint, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_0b515a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_0b515a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_0b515a
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/0cb698.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/0cb698.wgsl.expected.ir.msl
index 79e3996..d0b6e50 100644
--- a/test/tint/builtins/gen/var/textureLoad/0cb698.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/0cb698.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_1d<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_0cb698 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_0cb698 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_1d<i32> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_0cb698
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_0cb698
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_0cb698
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/10db82.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/10db82.wgsl.expected.ir.msl
index 17d02d3..73feb04 100644
--- a/test/tint/builtins/gen/var/textureLoad/10db82.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/10db82.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_10db82 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_10db82 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<rgba16float, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_10db82
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_10db82
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_10db82
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/126466.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/126466.wgsl.expected.ir.msl
index fa81220..5b13617 100644
--- a/test/tint/builtins/gen/var/textureLoad/126466.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/126466.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rg32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_126466 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_126466 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %5:texture_storage_3d<rg32float, read_write> = load %arg_0
     %6:vec3<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_126466
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_126466
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_126466
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/127e12.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/127e12.wgsl.expected.ir.msl
index 87436f9..ff1ffb8 100644
--- a/test/tint/builtins/gen/var/textureLoad/127e12.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/127e12.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_127e12 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_127e12 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<rgba16uint, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_127e12
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_127e12
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_127e12
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/1373dc.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/1373dc.wgsl.expected.ir.msl
index 7862102..d6ceef6 100644
--- a/test/tint/builtins/gen/var/textureLoad/1373dc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/1373dc.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_1d<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_1373dc = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_1373dc = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_1d<f32> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_1373dc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_1373dc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_1373dc
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/13d539.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/13d539.wgsl.expected.ir.msl
index bb5e517..4cf24d8 100644
--- a/test/tint/builtins/gen/var/textureLoad/13d539.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/13d539.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_13d539 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_13d539 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<rgba16sint, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_13d539
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_13d539
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_13d539
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/13e90c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/13e90c.wgsl.expected.ir.msl
index e54f7c8..ae3236f 100644
--- a/test/tint/builtins/gen/var/textureLoad/13e90c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/13e90c.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_13e90c = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_13e90c = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<rgba16float, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_13e90c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_13e90c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_13e90c
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/143d84.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/143d84.wgsl.expected.ir.msl
index 6b2994f7..b9c267f 100644
--- a/test/tint/builtins/gen/var/textureLoad/143d84.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/143d84.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_143d84 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_143d84 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<rg32float, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_143d84
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_143d84
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_143d84
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/1471b8.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/1471b8.wgsl.expected.ir.msl
index 8164f87..0e19713 100644
--- a/test/tint/builtins/gen/var/textureLoad/1471b8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/1471b8.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_1471b8 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_1471b8 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<rgba32sint, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_1471b8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_1471b8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_1471b8
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/14cc4c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/14cc4c.wgsl.expected.ir.msl
index 5621fe8..8536f98 100644
--- a/test/tint/builtins/gen/var/textureLoad/14cc4c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/14cc4c.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_14cc4c = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_14cc4c = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %5:texture_storage_2d<rgba8unorm, read_write> = load %arg_0
     %6:vec2<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_14cc4c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_14cc4c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_14cc4c
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/1561a7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/1561a7.wgsl.expected.ir.msl
index c4ee29a..ceef1a7 100644
--- a/test/tint/builtins/gen/var/textureLoad/1561a7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/1561a7.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<r32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_1561a7 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_1561a7 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:texture_storage_1d<r32uint, read> = load %arg_0
     %6:i32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_1561a7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_1561a7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_1561a7
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/15e675.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/15e675.wgsl.expected.ir.msl
index ac4150a..c1bd4e8 100644
--- a/test/tint/builtins/gen/var/textureLoad/15e675.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/15e675.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_15e675 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_15e675 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<rgba8uint, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_15e675
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_15e675
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_15e675
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/1619bf.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/1619bf.wgsl.expected.ir.msl
index 7aec287..fe32a9c 100644
--- a/test/tint/builtins/gen/var/textureLoad/1619bf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/1619bf.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_1619bf = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_1619bf = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<r32sint, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_1619bf
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_1619bf
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_1619bf
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/168dc8.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/168dc8.wgsl.expected.ir.msl
index 4c70abe..8e096de 100644
--- a/test/tint/builtins/gen/var/textureLoad/168dc8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/168dc8.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_168dc8 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_168dc8 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %arg_3:ptr<function, i32, read_write> = var, 1i
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureLoad_168dc8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureLoad_168dc8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureLoad_168dc8
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/170593.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/170593.wgsl.expected.ir.msl
index d792bb7..157e4d2 100644
--- a/test/tint/builtins/gen/var/textureLoad/170593.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/170593.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_170593 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_170593 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %5:texture_storage_2d<rgba32uint, read_write> = load %arg_0
     %6:vec2<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_170593
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_170593
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_170593
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/17095b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/17095b.wgsl.expected.ir.msl
index 08cfbfd..801b064 100644
--- a/test/tint/builtins/gen/var/textureLoad/17095b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/17095b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_17095b = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_17095b = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:texture_storage_1d<rgba32uint, read_write> = load %arg_0
     %6:u32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_17095b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_17095b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_17095b
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/18ac11.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/18ac11.wgsl.expected.ir.msl
index a8f6d99..589efd0 100644
--- a/test/tint/builtins/gen/var/textureLoad/18ac11.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/18ac11.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rg32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_18ac11 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_18ac11 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:texture_storage_1d<rg32sint, read> = load %arg_0
     %6:u32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_18ac11
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_18ac11
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_18ac11
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/19cf87.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/19cf87.wgsl.expected.ir.msl
index 71e7c52..b24852b 100644
--- a/test/tint/builtins/gen/var/textureLoad/19cf87.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/19cf87.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_19cf87 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_19cf87 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_depth_2d = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_19cf87
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_19cf87
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_19cf87
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/19d6be.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/19d6be.wgsl.expected.ir.msl
index d0f3623..f6596bd 100644
--- a/test/tint/builtins/gen/var/textureLoad/19d6be.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/19d6be.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<r32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_19d6be = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_19d6be = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %5:texture_storage_3d<r32uint, read_write> = load %arg_0
     %6:vec3<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_19d6be
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_19d6be
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_19d6be
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/19e5ca.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/19e5ca.wgsl.expected.ir.msl
new file mode 100644
index 0000000..763cd86
--- /dev/null
+++ b/test/tint/builtins/gen/var/textureLoad/19e5ca.wgsl.expected.ir.msl
@@ -0,0 +1,47 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_2d_array<r8unorm, read>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%textureLoad_19e5ca = func():void {
+  $B2: {
+    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
+    %arg_2:ptr<function, u32, read_write> = var, 1u
+    %6:texture_storage_2d_array<r8unorm, read> = load %arg_0
+    %7:vec2<i32> = load %arg_1
+    %8:u32 = load %arg_2
+    %9:vec4<f32> = textureLoad %6, %7, %8
+    %res:ptr<function, vec4<f32>, read_write> = var, %9
+    %11:vec4<f32> = load %res
+    store %prevent_dce, %11
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %13:void = call %textureLoad_19e5ca
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %15:void = call %textureLoad_19e5ca
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %17:void = call %textureLoad_19e5ca
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/textureLoad/1a062f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/1a062f.wgsl.expected.ir.msl
index 64cc199..791991d 100644
--- a/test/tint/builtins/gen/var/textureLoad/1a062f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/1a062f.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_1a062f = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_1a062f = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<rgba16float, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_1a062f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_1a062f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_1a062f
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/1a8452.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/1a8452.wgsl.expected.ir.msl
index 82fea84..c90adee 100644
--- a/test/tint/builtins/gen/var/textureLoad/1a8452.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/1a8452.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_1a8452 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_1a8452 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:texture_storage_1d<rgba8uint, read> = load %arg_0
     %6:i32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_1a8452
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_1a8452
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_1a8452
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/1aa950.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/1aa950.wgsl.expected.ir.msl
index 91196b3..8af08f3 100644
--- a/test/tint/builtins/gen/var/textureLoad/1aa950.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/1aa950.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_1aa950 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_1aa950 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<rgba32sint, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_1aa950
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_1aa950
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_1aa950
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/1b051f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/1b051f.wgsl.expected.ir.msl
index 0ba13a4..777589c 100644
--- a/test/tint/builtins/gen/var/textureLoad/1b051f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/1b051f.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_1b051f = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_1b051f = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %arg_3:ptr<function, u32, read_write> = var, 1u
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureLoad_1b051f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureLoad_1b051f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureLoad_1b051f
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/1b4332.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/1b4332.wgsl.expected.ir.msl
index cbf629d..605d7a5 100644
--- a/test/tint/builtins/gen/var/textureLoad/1b4332.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/1b4332.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<r32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_1b4332 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_1b4332 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %5:texture_storage_3d<r32uint, read_write> = load %arg_0
     %6:vec3<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_1b4332
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_1b4332
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_1b4332
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/1b8588.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/1b8588.wgsl.expected.ir.msl
index 4137734..a8637a6 100644
--- a/test/tint/builtins/gen/var/textureLoad/1b8588.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/1b8588.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_1d<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_1b8588 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_1b8588 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_1d<u32> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_1b8588
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_1b8588
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_1b8588
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/1bc5ab.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/1bc5ab.wgsl.expected.ir.msl
index 4e1c2fe..05e6d8b 100644
--- a/test/tint/builtins/gen/var/textureLoad/1bc5ab.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/1bc5ab.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_1bc5ab = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_1bc5ab = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %5:texture_storage_3d<rgba8snorm, read_write> = load %arg_0
     %6:vec3<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_1bc5ab
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_1bc5ab
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_1bc5ab
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/1bfdfb.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/1bfdfb.wgsl.expected.ir.msl
index 846e5c0..2dce6f8 100644
--- a/test/tint/builtins/gen/var/textureLoad/1bfdfb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/1bfdfb.wgsl.expected.ir.msl
@@ -1,45 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1057 internal compiler error: %b1 = block {  # root
-  %arg_0:ptr<handle, texture_external, read> = var @binding_point(1, 0)
-  %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
+
+@group(1) @binding(0) var arg_0 : texture_external;
+
+fn textureLoad_1bfdfb() {
+  var arg_1 = vec2<u32>(1u);
+  var res : vec4<f32> = textureLoad(arg_0, arg_1);
+  prevent_dce = res;
 }
 
-%textureLoad_1bfdfb = func():void -> %b2 {
-  %b2 = block {
-    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
-    %5:texture_external = load %arg_0
-    %6:vec2<u32> = load %arg_1
-    %7:vec4<f32> = textureLoad %5, %6
-    %res:ptr<function, vec4<f32>, read_write> = var, %7
-    %9:vec4<f32> = load %res
-    store %prevent_dce, %9
-    ret
-  }
-}
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %11:void = call %textureLoad_1bfdfb
-    ret vec4<f32>(0.0f)
-  }
-}
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %13:void = call %textureLoad_1bfdfb
-    ret
-  }
-}
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %15:void = call %textureLoad_1bfdfb
-    ret
-  }
+@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+@vertex
+fn vertex_main() -> @builtin(position) vec4<f32> {
+  textureLoad_1bfdfb();
+  return vec4<f32>();
 }
 
-Multiplanar external texture transform was not run.
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+@fragment
+fn fragment_main() {
+  textureLoad_1bfdfb();
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+  textureLoad_1bfdfb();
+}
+
+Failed to generate: error: ExternalTextureOptions missing binding entry for [group: 1, binding: 0]
diff --git a/test/tint/builtins/gen/var/textureLoad/1c562a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/1c562a.wgsl.expected.ir.msl
index 2f5d432..c789701 100644
--- a/test/tint/builtins/gen/var/textureLoad/1c562a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/1c562a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_1c562a = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_1c562a = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_3d<u32> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_1c562a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_1c562a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_1c562a
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/1d43ae.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/1d43ae.wgsl.expected.ir.msl
index 59c5be6..53e49cf 100644
--- a/test/tint/builtins/gen/var/textureLoad/1d43ae.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/1d43ae.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_1d43ae = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_1d43ae = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:texture_storage_1d<rgba32sint, read_write> = load %arg_0
     %6:i32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_1d43ae
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_1d43ae
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_1d43ae
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/1e6baa.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/1e6baa.wgsl.expected.ir.msl
index ca38c2b..71bbae9 100644
--- a/test/tint/builtins/gen/var/textureLoad/1e6baa.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/1e6baa.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rg32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_1e6baa = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_1e6baa = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:texture_storage_1d<rg32float, read_write> = load %arg_0
     %6:u32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_1e6baa
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_1e6baa
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_1e6baa
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/1eb93f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/1eb93f.wgsl.expected.ir.msl
index 30e2a58..eec8787 100644
--- a/test/tint/builtins/gen/var/textureLoad/1eb93f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/1eb93f.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rg32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_1eb93f = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_1eb93f = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %5:texture_storage_2d<rg32float, read> = load %arg_0
     %6:vec2<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_1eb93f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_1eb93f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_1eb93f
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/1f2016.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/1f2016.wgsl.expected.ir.msl
index 7e66056..459c3fc 100644
--- a/test/tint/builtins/gen/var/textureLoad/1f2016.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/1f2016.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_1f2016 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_1f2016 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_3d<f32> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_1f2016
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_1f2016
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_1f2016
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/1fde63.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/1fde63.wgsl.expected.ir.msl
new file mode 100644
index 0000000..60474a4
--- /dev/null
+++ b/test/tint/builtins/gen/var/textureLoad/1fde63.wgsl.expected.ir.msl
@@ -0,0 +1,45 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_3d<r8unorm, read_write>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%textureLoad_1fde63 = func():void {
+  $B2: {
+    %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
+    %5:texture_storage_3d<r8unorm, read_write> = load %arg_0
+    %6:vec3<u32> = load %arg_1
+    %7:vec4<f32> = textureLoad %5, %6
+    %res:ptr<function, vec4<f32>, read_write> = var, %7
+    %9:vec4<f32> = load %res
+    store %prevent_dce, %9
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %11:void = call %textureLoad_1fde63
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %13:void = call %textureLoad_1fde63
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %15:void = call %textureLoad_1fde63
+    ret
+  }
+}
+
+invalid access control for storage texture
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/textureLoad/206a08.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/206a08.wgsl.expected.ir.msl
index d462fcf..46a7dba 100644
--- a/test/tint/builtins/gen/var/textureLoad/206a08.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/206a08.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_206a08 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_206a08 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:texture_storage_1d<rgba8uint, read> = load %arg_0
     %6:u32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_206a08
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_206a08
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_206a08
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/20fa2f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/20fa2f.wgsl.expected.ir.msl
index 8449099..5436f2c 100644
--- a/test/tint/builtins/gen/var/textureLoad/20fa2f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/20fa2f.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_20fa2f = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_20fa2f = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<rg32float, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_20fa2f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_20fa2f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_20fa2f
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/216c37.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/216c37.wgsl.expected.ir.msl
index 7ec21e5..8a5d801 100644
--- a/test/tint/builtins/gen/var/textureLoad/216c37.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/216c37.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_1d<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_216c37 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_216c37 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_1d<u32> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_216c37
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_216c37
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_216c37
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/21d1c4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/21d1c4.wgsl.expected.ir.msl
index 4a30866..83ac922 100644
--- a/test/tint/builtins/gen/var/textureLoad/21d1c4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/21d1c4.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_21d1c4 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_21d1c4 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_3d<f32> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_21d1c4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_21d1c4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_21d1c4
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/223246.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/223246.wgsl.expected.ir.msl
index 0ce4dae..5f04918 100644
--- a/test/tint/builtins/gen/var/textureLoad/223246.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/223246.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_223246 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_223246 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_3d<i32> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_223246
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_223246
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_223246
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/22e963.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/22e963.wgsl.expected.ir.msl
index 75cc17d..236ceba 100644
--- a/test/tint/builtins/gen/var/textureLoad/22e963.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/22e963.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_22e963 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_22e963 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<r32uint, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_22e963
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_22e963
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_22e963
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/23007a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/23007a.wgsl.expected.ir.msl
index 483e849..e21be84 100644
--- a/test/tint/builtins/gen/var/textureLoad/23007a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/23007a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_23007a = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_23007a = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<rg32float, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_23007a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_23007a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_23007a
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/2363be.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/2363be.wgsl.expected.ir.msl
index c55533c..12cf3ea 100644
--- a/test/tint/builtins/gen/var/textureLoad/2363be.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/2363be.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_2363be = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_2363be = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %arg_3:ptr<function, u32, read_write> = var, 1u
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureLoad_2363be
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureLoad_2363be
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureLoad_2363be
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/23ff89.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/23ff89.wgsl.expected.ir.msl
index 17267c3..f64b6de 100644
--- a/test/tint/builtins/gen/var/textureLoad/23ff89.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/23ff89.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_23ff89 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_23ff89 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<rgba16uint, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_23ff89
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_23ff89
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_23ff89
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/25b67f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/25b67f.wgsl.expected.ir.msl
index d1bf58e..dc80cf5 100644
--- a/test/tint/builtins/gen/var/textureLoad/25b67f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/25b67f.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_25b67f = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_25b67f = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %5:texture_storage_2d<rgba8uint, read_write> = load %arg_0
     %6:vec2<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_25b67f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_25b67f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_25b67f
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/26b8f6.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/26b8f6.wgsl.expected.ir.msl
index 9dd4d92..6087d97 100644
--- a/test/tint/builtins/gen/var/textureLoad/26b8f6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/26b8f6.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_26b8f6 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_26b8f6 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %5:texture_storage_3d<rgba8uint, read_write> = load %arg_0
     %6:vec3<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_26b8f6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_26b8f6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_26b8f6
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/26c4f8.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/26c4f8.wgsl.expected.ir.msl
index 0fc9bf8..4160cbf 100644
--- a/test/tint/builtins/gen/var/textureLoad/26c4f8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/26c4f8.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<bgra8unorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_26c4f8 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_26c4f8 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %5:texture_storage_2d<bgra8unorm, read> = load %arg_0
     %6:vec2<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_26c4f8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_26c4f8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_26c4f8
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/26d7f1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/26d7f1.wgsl.expected.ir.msl
index 38a53e4..b723bdc 100644
--- a/test/tint/builtins/gen/var/textureLoad/26d7f1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/26d7f1.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_26d7f1 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_26d7f1 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<rg32uint, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_26d7f1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_26d7f1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_26d7f1
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/272e7a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/272e7a.wgsl.expected.ir.msl
index a3e186e..23c0818 100644
--- a/test/tint/builtins/gen/var/textureLoad/272e7a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/272e7a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<r32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_272e7a = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_272e7a = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %5:texture_storage_3d<r32float, read_write> = load %arg_0
     %6:vec3<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_272e7a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_272e7a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_272e7a
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/276643.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/276643.wgsl.expected.ir.msl
new file mode 100644
index 0000000..e317b52
--- /dev/null
+++ b/test/tint/builtins/gen/var/textureLoad/276643.wgsl.expected.ir.msl
@@ -0,0 +1,45 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_1d<r8unorm, read>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%textureLoad_276643 = func():void {
+  $B2: {
+    %arg_1:ptr<function, u32, read_write> = var, 1u
+    %5:texture_storage_1d<r8unorm, read> = load %arg_0
+    %6:u32 = load %arg_1
+    %7:vec4<f32> = textureLoad %5, %6
+    %res:ptr<function, vec4<f32>, read_write> = var, %7
+    %9:vec4<f32> = load %res
+    store %prevent_dce, %9
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %11:void = call %textureLoad_276643
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %13:void = call %textureLoad_276643
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %15:void = call %textureLoad_276643
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/textureLoad/276a2c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/276a2c.wgsl.expected.ir.msl
index b689ccc..d3ef2b8 100644
--- a/test/tint/builtins/gen/var/textureLoad/276a2c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/276a2c.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_276a2c = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_276a2c = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:texture_storage_1d<rgba32uint, read> = load %arg_0
     %6:i32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_276a2c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_276a2c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_276a2c
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/2887d7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/2887d7.wgsl.expected.ir.msl
index 6247d6a..17f1b0c 100644
--- a/test/tint/builtins/gen/var/textureLoad/2887d7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/2887d7.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_2887d7 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_2887d7 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:texture_storage_1d<rgba32float, read> = load %arg_0
     %6:i32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_2887d7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_2887d7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_2887d7
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/2a82d9.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/2a82d9.wgsl.expected.ir.msl
index e23b23b..8bd0afd 100644
--- a/test/tint/builtins/gen/var/textureLoad/2a82d9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/2a82d9.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_2a82d9 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_2a82d9 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<rgba32sint, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_2a82d9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_2a82d9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_2a82d9
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/2ae485.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/2ae485.wgsl.expected.ir.msl
index 64e1b80..3bbd27f 100644
--- a/test/tint/builtins/gen/var/textureLoad/2ae485.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/2ae485.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba16sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_2ae485 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_2ae485 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %5:texture_storage_2d<rgba16sint, read> = load %arg_0
     %6:vec2<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_2ae485
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_2ae485
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_2ae485
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/2c72ae.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/2c72ae.wgsl.expected.ir.msl
index 58f11e4..329f1f4 100644
--- a/test/tint/builtins/gen/var/textureLoad/2c72ae.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/2c72ae.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_2c72ae = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_2c72ae = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %5:texture_storage_2d<rgba32sint, read> = load %arg_0
     %6:vec2<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_2c72ae
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_2c72ae
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_2c72ae
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/2cee30.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/2cee30.wgsl.expected.ir.msl
index 7eb82bf..3f05ea7 100644
--- a/test/tint/builtins/gen/var/textureLoad/2cee30.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/2cee30.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_2cee30 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_2cee30 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<rgba32sint, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_2cee30
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_2cee30
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_2cee30
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/2d479c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/2d479c.wgsl.expected.ir.msl
index a822db0..c3965ac 100644
--- a/test/tint/builtins/gen/var/textureLoad/2d479c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/2d479c.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_2d479c = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_2d479c = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_2d<f32> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_2d479c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_2d479c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_2d479c
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/2d6cf7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/2d6cf7.wgsl.expected.ir.msl
index 75e559b..0b67a02 100644
--- a/test/tint/builtins/gen/var/textureLoad/2d6cf7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/2d6cf7.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rg32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_2d6cf7 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_2d6cf7 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:texture_storage_1d<rg32sint, read> = load %arg_0
     %6:i32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_2d6cf7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_2d6cf7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_2d6cf7
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/2dbfc2.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/2dbfc2.wgsl.expected.ir.msl
index 13dde32..f150f56 100644
--- a/test/tint/builtins/gen/var/textureLoad/2dbfc2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/2dbfc2.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_2dbfc2 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_2dbfc2 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<bgra8unorm, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_2dbfc2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_2dbfc2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_2dbfc2
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/2e09aa.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/2e09aa.wgsl.expected.ir.msl
index 9723222..7fc52c4 100644
--- a/test/tint/builtins/gen/var/textureLoad/2e09aa.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/2e09aa.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_multisampled_2d<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_2e09aa = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_2e09aa = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_multisampled_2d<f32> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_2e09aa
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_2e09aa
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_2e09aa
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/2e3552.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/2e3552.wgsl.expected.ir.msl
index 52e3202..b13796f 100644
--- a/test/tint/builtins/gen/var/textureLoad/2e3552.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/2e3552.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_2e3552 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_2e3552 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<r32float, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_2e3552
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_2e3552
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_2e3552
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/2eaf31.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/2eaf31.wgsl.expected.ir.msl
index 06c268d..bfcaf9f 100644
--- a/test/tint/builtins/gen/var/textureLoad/2eaf31.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/2eaf31.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rg32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_2eaf31 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_2eaf31 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %5:texture_storage_2d<rg32sint, read_write> = load %arg_0
     %6:vec2<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_2eaf31
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_2eaf31
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_2eaf31
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/313c73.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/313c73.wgsl.expected.ir.msl
index c44bc1d..893b74b 100644
--- a/test/tint/builtins/gen/var/textureLoad/313c73.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/313c73.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_313c73 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_313c73 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<rgba16sint, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_313c73
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_313c73
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_313c73
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/31db4b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/31db4b.wgsl.expected.ir.msl
index 8af9080..34289a5 100644
--- a/test/tint/builtins/gen/var/textureLoad/31db4b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/31db4b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<r32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_31db4b = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_31db4b = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:texture_storage_1d<r32uint, read> = load %arg_0
     %6:u32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_31db4b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_31db4b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_31db4b
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/321210.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/321210.wgsl.expected.ir.msl
index 5199187..bfd37c7 100644
--- a/test/tint/builtins/gen/var/textureLoad/321210.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/321210.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_321210 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_321210 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<rgba16uint, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_321210
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_321210
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_321210
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/32a7b8.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/32a7b8.wgsl.expected.ir.msl
index b3483e7..5d17ae5 100644
--- a/test/tint/builtins/gen/var/textureLoad/32a7b8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/32a7b8.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_32a7b8 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_32a7b8 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<rgba8sint, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_32a7b8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_32a7b8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_32a7b8
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/33d3aa.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/33d3aa.wgsl.expected.ir.msl
index 20ecdb5..014c93a 100644
--- a/test/tint/builtins/gen/var/textureLoad/33d3aa.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/33d3aa.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_33d3aa = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_33d3aa = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:texture_storage_1d<rgba32sint, read> = load %arg_0
     %6:u32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_33d3aa
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_33d3aa
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_33d3aa
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/348827.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/348827.wgsl.expected.ir.msl
index 815cfd6..a4c328b 100644
--- a/test/tint/builtins/gen/var/textureLoad/348827.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/348827.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_348827 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_348827 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<rgba32uint, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_348827
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_348827
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_348827
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/34d97c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/34d97c.wgsl.expected.ir.msl
index 92af813..1c3443a 100644
--- a/test/tint/builtins/gen/var/textureLoad/34d97c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/34d97c.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_34d97c = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_34d97c = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<rg32uint, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_34d97c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_34d97c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_34d97c
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/35a5e2.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/35a5e2.wgsl.expected.ir.msl
new file mode 100644
index 0000000..38eac06
--- /dev/null
+++ b/test/tint/builtins/gen/var/textureLoad/35a5e2.wgsl.expected.ir.msl
@@ -0,0 +1,45 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_1d<r8unorm, read_write>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%textureLoad_35a5e2 = func():void {
+  $B2: {
+    %arg_1:ptr<function, i32, read_write> = var, 1i
+    %5:texture_storage_1d<r8unorm, read_write> = load %arg_0
+    %6:i32 = load %arg_1
+    %7:vec4<f32> = textureLoad %5, %6
+    %res:ptr<function, vec4<f32>, read_write> = var, %7
+    %9:vec4<f32> = load %res
+    store %prevent_dce, %9
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %11:void = call %textureLoad_35a5e2
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %13:void = call %textureLoad_35a5e2
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %15:void = call %textureLoad_35a5e2
+    ret
+  }
+}
+
+invalid access control for storage texture
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/textureLoad/35d464.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/35d464.wgsl.expected.ir.msl
new file mode 100644
index 0000000..e3fbc9b
--- /dev/null
+++ b/test/tint/builtins/gen/var/textureLoad/35d464.wgsl.expected.ir.msl
@@ -0,0 +1,47 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_2d_array<r8unorm, read>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%textureLoad_35d464 = func():void {
+  $B2: {
+    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
+    %arg_2:ptr<function, i32, read_write> = var, 1i
+    %6:texture_storage_2d_array<r8unorm, read> = load %arg_0
+    %7:vec2<i32> = load %arg_1
+    %8:i32 = load %arg_2
+    %9:vec4<f32> = textureLoad %6, %7, %8
+    %res:ptr<function, vec4<f32>, read_write> = var, %9
+    %11:vec4<f32> = load %res
+    store %prevent_dce, %11
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %13:void = call %textureLoad_35d464
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %15:void = call %textureLoad_35d464
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %17:void = call %textureLoad_35d464
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/textureLoad/374351.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/374351.wgsl.expected.ir.msl
index 81dc6f8..7499b44 100644
--- a/test/tint/builtins/gen/var/textureLoad/374351.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/374351.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba16uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_374351 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_374351 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %5:texture_storage_3d<rgba16uint, read> = load %arg_0
     %6:vec3<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_374351
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_374351
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_374351
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/388688.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/388688.wgsl.expected.ir.msl
index c7030fe..55e16d7 100644
--- a/test/tint/builtins/gen/var/textureLoad/388688.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/388688.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8snorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_388688 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_388688 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:texture_storage_1d<rgba8snorm, read> = load %arg_0
     %6:u32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_388688
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_388688
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_388688
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/38f8ab.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/38f8ab.wgsl.expected.ir.msl
index f8779c5..dd24f9f 100644
--- a/test/tint/builtins/gen/var/textureLoad/38f8ab.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/38f8ab.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_multisampled_2d<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_38f8ab = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_38f8ab = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_multisampled_2d<i32> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_38f8ab
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_38f8ab
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_38f8ab
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/39016c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/39016c.wgsl.expected.ir.msl
index 088fab7..284a48d 100644
--- a/test/tint/builtins/gen/var/textureLoad/39016c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/39016c.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_39016c = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_39016c = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %5:texture_storage_2d<rgba8snorm, read_write> = load %arg_0
     %6:vec2<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_39016c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_39016c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_39016c
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/395447.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/395447.wgsl.expected.ir.msl
index 3c1415c..83a083d 100644
--- a/test/tint/builtins/gen/var/textureLoad/395447.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/395447.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_395447 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_395447 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %5:texture_storage_2d<rgba32float, read_write> = load %arg_0
     %6:vec2<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_395447
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_395447
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_395447
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/39ef40.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/39ef40.wgsl.expected.ir.msl
index 96e258d..a8d5922 100644
--- a/test/tint/builtins/gen/var/textureLoad/39ef40.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/39ef40.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba16float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_39ef40 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_39ef40 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:texture_storage_1d<rgba16float, read> = load %arg_0
     %6:u32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_39ef40
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_39ef40
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_39ef40
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/3a2350.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/3a2350.wgsl.expected.ir.msl
index 9f650f2..7402469 100644
--- a/test/tint/builtins/gen/var/textureLoad/3a2350.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/3a2350.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_3a2350 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_3a2350 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<rgba16uint, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_3a2350
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_3a2350
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_3a2350
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/3aea13.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/3aea13.wgsl.expected.ir.msl
index 687976d..3b8b443 100644
--- a/test/tint/builtins/gen/var/textureLoad/3aea13.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/3aea13.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_3aea13 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_3aea13 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<r32sint, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_3aea13
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_3aea13
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_3aea13
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/3bbc2b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/3bbc2b.wgsl.expected.ir.msl
index 637eb46..092c140 100644
--- a/test/tint/builtins/gen/var/textureLoad/3bbc2b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/3bbc2b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<r32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_3bbc2b = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_3bbc2b = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:texture_storage_1d<r32float, read_write> = load %arg_0
     %6:i32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_3bbc2b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_3bbc2b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_3bbc2b
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/3c0d9e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/3c0d9e.wgsl.expected.ir.msl
index 9b70d71..56c9743 100644
--- a/test/tint/builtins/gen/var/textureLoad/3c0d9e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/3c0d9e.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_3c0d9e = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_3c0d9e = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %5:texture_storage_2d<rgba8uint, read> = load %arg_0
     %6:vec2<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_3c0d9e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_3c0d9e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_3c0d9e
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/3c9587.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/3c9587.wgsl.expected.ir.msl
index 8b18af1..e671e36 100644
--- a/test/tint/builtins/gen/var/textureLoad/3c9587.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/3c9587.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8unorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_3c9587 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_3c9587 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %5:texture_storage_2d<rgba8unorm, read> = load %arg_0
     %6:vec2<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_3c9587
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_3c9587
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_3c9587
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/3c96e8.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/3c96e8.wgsl.expected.ir.msl
index ac9d595..38b717e 100644
--- a/test/tint/builtins/gen/var/textureLoad/3c96e8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/3c96e8.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_3c96e8 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_3c96e8 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %arg_3:ptr<function, u32, read_write> = var, 1u
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureLoad_3c96e8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureLoad_3c96e8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureLoad_3c96e8
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/3cfb9c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/3cfb9c.wgsl.expected.ir.msl
index 49788d2..177df6e 100644
--- a/test/tint/builtins/gen/var/textureLoad/3cfb9c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/3cfb9c.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_3cfb9c = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_3cfb9c = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %5:texture_storage_3d<rgba8uint, read_write> = load %arg_0
     %6:vec3<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_3cfb9c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_3cfb9c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_3cfb9c
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/3d001b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/3d001b.wgsl.expected.ir.msl
index 3775d0b..ee2833b 100644
--- a/test/tint/builtins/gen/var/textureLoad/3d001b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/3d001b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_3d001b = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_3d001b = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %5:texture_storage_3d<rgba8sint, read> = load %arg_0
     %6:vec3<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_3d001b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_3d001b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_3d001b
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/3d3fd1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/3d3fd1.wgsl.expected.ir.msl
index 930a8e0..3880586 100644
--- a/test/tint/builtins/gen/var/textureLoad/3d3fd1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/3d3fd1.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_3d3fd1 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_3d3fd1 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %arg_3:ptr<function, i32, read_write> = var, 1i
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureLoad_3d3fd1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureLoad_3d3fd1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureLoad_3d3fd1
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/3d9c90.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/3d9c90.wgsl.expected.ir.msl
index d09f96a..b2074e3 100644
--- a/test/tint/builtins/gen/var/textureLoad/3d9c90.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/3d9c90.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_3d9c90 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_3d9c90 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %5:texture_storage_3d<rgba32float, read> = load %arg_0
     %6:vec3<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_3d9c90
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_3d9c90
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_3d9c90
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/3da3ed.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/3da3ed.wgsl.expected.ir.msl
index 6c0ffd3..e2fd7b8 100644
--- a/test/tint/builtins/gen/var/textureLoad/3da3ed.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/3da3ed.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_1d<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_3da3ed = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_3da3ed = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_1d<f32> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_3da3ed
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_3da3ed
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_3da3ed
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/3e16a8.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/3e16a8.wgsl.expected.ir.msl
new file mode 100644
index 0000000..25463ec
--- /dev/null
+++ b/test/tint/builtins/gen/var/textureLoad/3e16a8.wgsl.expected.ir.msl
@@ -0,0 +1,45 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_2d<r8unorm, read_write>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%textureLoad_3e16a8 = func():void {
+  $B2: {
+    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
+    %5:texture_storage_2d<r8unorm, read_write> = load %arg_0
+    %6:vec2<i32> = load %arg_1
+    %7:vec4<f32> = textureLoad %5, %6
+    %res:ptr<function, vec4<f32>, read_write> = var, %7
+    %9:vec4<f32> = load %res
+    store %prevent_dce, %9
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %11:void = call %textureLoad_3e16a8
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %13:void = call %textureLoad_3e16a8
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %15:void = call %textureLoad_3e16a8
+    ret
+  }
+}
+
+invalid access control for storage texture
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/textureLoad/3e5f6a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/3e5f6a.wgsl.expected.ir.msl
index 9d440e9..da1add5 100644
--- a/test/tint/builtins/gen/var/textureLoad/3e5f6a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/3e5f6a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba16float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_3e5f6a = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_3e5f6a = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %5:texture_storage_2d<rgba16float, read> = load %arg_0
     %6:vec2<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_3e5f6a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_3e5f6a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_3e5f6a
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/40ee8b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/40ee8b.wgsl.expected.ir.msl
index 02a4d2e..fce3062 100644
--- a/test/tint/builtins/gen/var/textureLoad/40ee8b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/40ee8b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_40ee8b = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_40ee8b = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<rgba32sint, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_40ee8b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_40ee8b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_40ee8b
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/4212a1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/4212a1.wgsl.expected.ir.msl
index e77f7b3..07c3f7f 100644
--- a/test/tint/builtins/gen/var/textureLoad/4212a1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/4212a1.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_4212a1 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_4212a1 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %5:texture_storage_2d<rgba32sint, read_write> = load %arg_0
     %6:vec2<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_4212a1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_4212a1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_4212a1
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/424afd.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/424afd.wgsl.expected.ir.msl
index c9cf251..310bcdd 100644
--- a/test/tint/builtins/gen/var/textureLoad/424afd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/424afd.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_424afd = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_424afd = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<rg32sint, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_424afd
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_424afd
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_424afd
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/42a631.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/42a631.wgsl.expected.ir.msl
index 944fff7..5756f18 100644
--- a/test/tint/builtins/gen/var/textureLoad/42a631.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/42a631.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba16float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_42a631 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_42a631 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:texture_storage_1d<rgba16float, read_write> = load %arg_0
     %6:i32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_42a631
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_42a631
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_42a631
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/43484a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/43484a.wgsl.expected.ir.msl
index 25d30d4..28224ea 100644
--- a/test/tint/builtins/gen/var/textureLoad/43484a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/43484a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_43484a = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_43484a = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<r32float, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_43484a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_43484a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_43484a
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/439e2a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/439e2a.wgsl.expected.ir.msl
index d5244ea..de367b2 100644
--- a/test/tint/builtins/gen/var/textureLoad/439e2a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/439e2a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_439e2a = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_439e2a = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_2d<f32> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_439e2a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_439e2a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_439e2a
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/43cd86.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/43cd86.wgsl.expected.ir.msl
index f2d793d..b42780e 100644
--- a/test/tint/builtins/gen/var/textureLoad/43cd86.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/43cd86.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_43cd86 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_43cd86 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %5:texture_storage_2d<rgba8snorm, read_write> = load %arg_0
     %6:vec2<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_43cd86
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_43cd86
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_43cd86
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/44c826.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/44c826.wgsl.expected.ir.msl
index a7af8b9..4f7c8df 100644
--- a/test/tint/builtins/gen/var/textureLoad/44c826.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/44c826.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rg32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_44c826 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_44c826 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:texture_storage_1d<rg32uint, read> = load %arg_0
     %6:u32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_44c826
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_44c826
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_44c826
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/4542ae.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/4542ae.wgsl.expected.ir.msl
index 29e2f36..559a3ca 100644
--- a/test/tint/builtins/gen/var/textureLoad/4542ae.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/4542ae.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_4542ae = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_4542ae = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<rgba8unorm, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_4542ae
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_4542ae
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_4542ae
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/454347.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/454347.wgsl.expected.ir.msl
index 10be7b0..cfcc76b 100644
--- a/test/tint/builtins/gen/var/textureLoad/454347.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/454347.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_454347 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_454347 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:texture_storage_1d<rgba32uint, read> = load %arg_0
     %6:u32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_454347
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_454347
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_454347
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/4638a0.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/4638a0.wgsl.expected.ir.msl
index 1a08a8e..574a520 100644
--- a/test/tint/builtins/gen/var/textureLoad/4638a0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/4638a0.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_4638a0 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_4638a0 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<rgba16sint, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_4638a0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_4638a0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_4638a0
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/469912.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/469912.wgsl.expected.ir.msl
index daf1e16..1b6aa80 100644
--- a/test/tint/builtins/gen/var/textureLoad/469912.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/469912.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rg32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_469912 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_469912 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:texture_storage_1d<rg32sint, read_write> = load %arg_0
     %6:i32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_469912
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_469912
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_469912
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/46a93f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/46a93f.wgsl.expected.ir.msl
index b996b4e..d66db07 100644
--- a/test/tint/builtins/gen/var/textureLoad/46a93f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/46a93f.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_46a93f = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_46a93f = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %arg_3:ptr<function, u32, read_write> = var, 1u
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureLoad_46a93f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureLoad_46a93f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureLoad_46a93f
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/46dbf5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/46dbf5.wgsl.expected.ir.msl
index d9ac1c9..e30f515 100644
--- a/test/tint/builtins/gen/var/textureLoad/46dbf5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/46dbf5.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8unorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_46dbf5 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_46dbf5 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %5:texture_storage_3d<rgba8unorm, read> = load %arg_0
     %6:vec3<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_46dbf5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_46dbf5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_46dbf5
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/473d3e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/473d3e.wgsl.expected.ir.msl
index ec973c2..1d47fd3 100644
--- a/test/tint/builtins/gen/var/textureLoad/473d3e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/473d3e.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_473d3e = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_473d3e = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %5:texture_storage_3d<rgba32float, read_write> = load %arg_0
     %6:vec3<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_473d3e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_473d3e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_473d3e
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/47e818.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/47e818.wgsl.expected.ir.msl
index dc80f67..8720931 100644
--- a/test/tint/builtins/gen/var/textureLoad/47e818.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/47e818.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_47e818 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_47e818 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_3d<i32> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_47e818
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_47e818
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_47e818
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/482627.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/482627.wgsl.expected.ir.msl
index f55ab58..30f8c21 100644
--- a/test/tint/builtins/gen/var/textureLoad/482627.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/482627.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_482627 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_482627 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<rg32float, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_482627
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_482627
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_482627
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/484344.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/484344.wgsl.expected.ir.msl
index c54a31d..8102f2a 100644
--- a/test/tint/builtins/gen/var/textureLoad/484344.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/484344.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_484344 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_484344 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_2d<f32> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_484344
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_484344
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_484344
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/4951bb.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/4951bb.wgsl.expected.ir.msl
new file mode 100644
index 0000000..cdd33b6
--- /dev/null
+++ b/test/tint/builtins/gen/var/textureLoad/4951bb.wgsl.expected.ir.msl
@@ -0,0 +1,47 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_2d_array<r8unorm, read>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%textureLoad_4951bb = func():void {
+  $B2: {
+    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
+    %arg_2:ptr<function, i32, read_write> = var, 1i
+    %6:texture_storage_2d_array<r8unorm, read> = load %arg_0
+    %7:vec2<u32> = load %arg_1
+    %8:i32 = load %arg_2
+    %9:vec4<f32> = textureLoad %6, %7, %8
+    %res:ptr<function, vec4<f32>, read_write> = var, %9
+    %11:vec4<f32> = load %res
+    store %prevent_dce, %11
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %13:void = call %textureLoad_4951bb
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %15:void = call %textureLoad_4951bb
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %17:void = call %textureLoad_4951bb
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/textureLoad/49f76f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/49f76f.wgsl.expected.ir.msl
index cef642f..1584dfd 100644
--- a/test/tint/builtins/gen/var/textureLoad/49f76f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/49f76f.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_multisampled_2d<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_49f76f = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_49f76f = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_multisampled_2d<u32> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_49f76f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_49f76f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_49f76f
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/4a5c55.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/4a5c55.wgsl.expected.ir.msl
index c8c984c..13d184b 100644
--- a/test/tint/builtins/gen/var/textureLoad/4a5c55.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/4a5c55.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_4a5c55 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_4a5c55 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %5:texture_storage_3d<rgba8sint, read_write> = load %arg_0
     %6:vec3<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_4a5c55
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_4a5c55
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_4a5c55
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/4acb64.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/4acb64.wgsl.expected.ir.msl
index a67b351..b2fc88a 100644
--- a/test/tint/builtins/gen/var/textureLoad/4acb64.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/4acb64.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_4acb64 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_4acb64 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %arg_3:ptr<function, i32, read_write> = var, 1i
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureLoad_4acb64
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureLoad_4acb64
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureLoad_4acb64
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/4c15b2.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/4c15b2.wgsl.expected.ir.msl
index b4d118e..3cf1040 100644
--- a/test/tint/builtins/gen/var/textureLoad/4c15b2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/4c15b2.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_4c15b2 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_4c15b2 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<rgba32float, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_4c15b2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_4c15b2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_4c15b2
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/4c1a1e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/4c1a1e.wgsl.expected.ir.msl
index 093bae2..e9c823d 100644
--- a/test/tint/builtins/gen/var/textureLoad/4c1a1e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/4c1a1e.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rg32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_4c1a1e = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_4c1a1e = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %5:texture_storage_3d<rg32uint, read_write> = load %arg_0
     %6:vec3<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_4c1a1e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_4c1a1e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_4c1a1e
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/4c423f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/4c423f.wgsl.expected.ir.msl
index dde71e6..e4b523a 100644
--- a/test/tint/builtins/gen/var/textureLoad/4c423f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/4c423f.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_1d<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_4c423f = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_4c423f = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_1d<i32> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_4c423f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_4c423f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_4c423f
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/4c67be.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/4c67be.wgsl.expected.ir.msl
index 5281860..4d50435 100644
--- a/test/tint/builtins/gen/var/textureLoad/4c67be.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/4c67be.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<r32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_4c67be = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_4c67be = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %5:texture_storage_2d<r32float, read> = load %arg_0
     %6:vec2<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_4c67be
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_4c67be
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_4c67be
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/4ccf9a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/4ccf9a.wgsl.expected.ir.msl
index 416facc..415d25f 100644
--- a/test/tint/builtins/gen/var/textureLoad/4ccf9a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/4ccf9a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rg32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_4ccf9a = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_4ccf9a = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %5:texture_storage_3d<rg32uint, read_write> = load %arg_0
     %6:vec3<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_4ccf9a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_4ccf9a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_4ccf9a
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/4cdca5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/4cdca5.wgsl.expected.ir.msl
index d75b6df..5fbe847 100644
--- a/test/tint/builtins/gen/var/textureLoad/4cdca5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/4cdca5.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_4cdca5 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_4cdca5 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<rgba8sint, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_4cdca5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_4cdca5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_4cdca5
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/4db25c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/4db25c.wgsl.expected.ir.msl
index 20238124..8312b88 100644
--- a/test/tint/builtins/gen/var/textureLoad/4db25c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/4db25c.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_multisampled_2d, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_4db25c = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_4db25c = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_depth_multisampled_2d = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_4db25c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_4db25c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_4db25c
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/4e2c5c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/4e2c5c.wgsl.expected.ir.msl
index 60955f6..d0fc62d 100644
--- a/test/tint/builtins/gen/var/textureLoad/4e2c5c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/4e2c5c.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_4e2c5c = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_4e2c5c = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<rgba16float, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_4e2c5c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_4e2c5c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_4e2c5c
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/4f5496.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/4f5496.wgsl.expected.ir.msl
index 3ccab53..3af0548 100644
--- a/test/tint/builtins/gen/var/textureLoad/4f5496.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/4f5496.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_4f5496 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_4f5496 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<r32uint, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_4f5496
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_4f5496
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_4f5496
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/4f90bb.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/4f90bb.wgsl.expected.ir.msl
index d218696..9dd0f75 100644
--- a/test/tint/builtins/gen/var/textureLoad/4f90bb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/4f90bb.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_4f90bb = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_4f90bb = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %5:texture_storage_2d<bgra8unorm, read_write> = load %arg_0
     %6:vec2<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_4f90bb
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_4f90bb
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_4f90bb
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/4fa6ae.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/4fa6ae.wgsl.expected.ir.msl
index 08157a2..2a0ac64 100644
--- a/test/tint/builtins/gen/var/textureLoad/4fa6ae.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/4fa6ae.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<bgra8unorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_4fa6ae = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_4fa6ae = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %5:texture_storage_3d<bgra8unorm, read> = load %arg_0
     %6:vec3<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_4fa6ae
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_4fa6ae
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_4fa6ae
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/4fd803.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/4fd803.wgsl.expected.ir.msl
index f2ef633..c94237e 100644
--- a/test/tint/builtins/gen/var/textureLoad/4fd803.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/4fd803.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_4fd803 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_4fd803 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_3d<i32> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_4fd803
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_4fd803
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_4fd803
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/505aa2.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/505aa2.wgsl.expected.ir.msl
index ea25526..2c6c194 100644
--- a/test/tint/builtins/gen/var/textureLoad/505aa2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/505aa2.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<r32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_505aa2 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_505aa2 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %5:texture_storage_3d<r32sint, read> = load %arg_0
     %6:vec3<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_505aa2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_505aa2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_505aa2
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/50915c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/50915c.wgsl.expected.ir.msl
index cc35cc9..2c967e5 100644
--- a/test/tint/builtins/gen/var/textureLoad/50915c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/50915c.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_50915c = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_50915c = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %5:texture_storage_3d<rgba8uint, read> = load %arg_0
     %6:vec3<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_50915c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_50915c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_50915c
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/5154e1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/5154e1.wgsl.expected.ir.msl
index ddb5c8d..f486810 100644
--- a/test/tint/builtins/gen/var/textureLoad/5154e1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/5154e1.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_5154e1 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_5154e1 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %5:texture_storage_2d<rgba32float, read_write> = load %arg_0
     %6:vec2<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_5154e1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_5154e1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_5154e1
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/519ab5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/519ab5.wgsl.expected.ir.msl
index 224f347..b2aec90 100644
--- a/test/tint/builtins/gen/var/textureLoad/519ab5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/519ab5.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8unorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_519ab5 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_519ab5 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:texture_storage_1d<rgba8unorm, read> = load %arg_0
     %6:i32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_519ab5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_519ab5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_519ab5
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/53378a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/53378a.wgsl.expected.ir.msl
index 81a8466..a4fafa6 100644
--- a/test/tint/builtins/gen/var/textureLoad/53378a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/53378a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rg32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_53378a = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_53378a = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %5:texture_storage_2d<rg32sint, read> = load %arg_0
     %6:vec2<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_53378a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_53378a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_53378a
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/53941c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/53941c.wgsl.expected.ir.msl
index 324e3c7..7f0ae96 100644
--- a/test/tint/builtins/gen/var/textureLoad/53941c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/53941c.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_53941c = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_53941c = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<rgba32sint, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_53941c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_53941c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_53941c
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/53e142.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/53e142.wgsl.expected.ir.msl
index 44e4d9c..a94c0c1 100644
--- a/test/tint/builtins/gen/var/textureLoad/53e142.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/53e142.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_53e142 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_53e142 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %arg_3:ptr<function, i32, read_write> = var, 1i
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureLoad_53e142
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureLoad_53e142
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureLoad_53e142
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/54a59b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/54a59b.wgsl.expected.ir.msl
index eb907a4..c1f318a 100644
--- a/test/tint/builtins/gen/var/textureLoad/54a59b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/54a59b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_54a59b = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_54a59b = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %arg_3:ptr<function, i32, read_write> = var, 1i
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureLoad_54a59b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureLoad_54a59b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureLoad_54a59b
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/54e0ce.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/54e0ce.wgsl.expected.ir.msl
index b009e8c..360ae48 100644
--- a/test/tint/builtins/gen/var/textureLoad/54e0ce.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/54e0ce.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<bgra8unorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_54e0ce = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_54e0ce = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %5:texture_storage_2d<bgra8unorm, read> = load %arg_0
     %6:vec2<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_54e0ce
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_54e0ce
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_54e0ce
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/54fb38.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/54fb38.wgsl.expected.ir.msl
index d3e863d..66fff71 100644
--- a/test/tint/builtins/gen/var/textureLoad/54fb38.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/54fb38.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_54fb38 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_54fb38 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<rg32uint, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_54fb38
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_54fb38
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_54fb38
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/55e745.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/55e745.wgsl.expected.ir.msl
index 24f14f0..efb7192 100644
--- a/test/tint/builtins/gen/var/textureLoad/55e745.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/55e745.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_55e745 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_55e745 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<r32sint, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_55e745
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_55e745
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_55e745
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/560573.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/560573.wgsl.expected.ir.msl
index 50ebbc6..68ac74a 100644
--- a/test/tint/builtins/gen/var/textureLoad/560573.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/560573.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_560573 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_560573 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<r32sint, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_560573
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_560573
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_560573
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/56a000.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/56a000.wgsl.expected.ir.msl
index 8f6d99b..fb9f9ce 100644
--- a/test/tint/builtins/gen/var/textureLoad/56a000.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/56a000.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rg32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_56a000 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_56a000 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:texture_storage_1d<rg32float, read_write> = load %arg_0
     %6:i32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_56a000
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_56a000
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_56a000
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/582015.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/582015.wgsl.expected.ir.msl
index a8ecc86..39ab9c1 100644
--- a/test/tint/builtins/gen/var/textureLoad/582015.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/582015.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_582015 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_582015 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<rgba8sint, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_582015
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_582015
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_582015
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/589eaa.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/589eaa.wgsl.expected.ir.msl
index ca742a1..bec7f7a 100644
--- a/test/tint/builtins/gen/var/textureLoad/589eaa.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/589eaa.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba16float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_589eaa = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_589eaa = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %5:texture_storage_3d<rgba16float, read> = load %arg_0
     %6:vec3<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_589eaa
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_589eaa
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_589eaa
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/5a2f9d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/5a2f9d.wgsl.expected.ir.msl
index 82b0920..219ef48 100644
--- a/test/tint/builtins/gen/var/textureLoad/5a2f9d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/5a2f9d.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_1d<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_5a2f9d = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_5a2f9d = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_1d<i32> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_5a2f9d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_5a2f9d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_5a2f9d
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/5abbf2.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/5abbf2.wgsl.expected.ir.msl
index a61a0a5..719d934 100644
--- a/test/tint/builtins/gen/var/textureLoad/5abbf2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/5abbf2.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rg32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_5abbf2 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_5abbf2 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:texture_storage_1d<rg32float, read> = load %arg_0
     %6:u32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_5abbf2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_5abbf2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_5abbf2
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/5b0f5b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/5b0f5b.wgsl.expected.ir.msl
index ab7d2b6..76637c0 100644
--- a/test/tint/builtins/gen/var/textureLoad/5b0f5b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/5b0f5b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba16uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_5b0f5b = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_5b0f5b = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %5:texture_storage_3d<rgba16uint, read_write> = load %arg_0
     %6:vec3<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_5b0f5b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_5b0f5b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_5b0f5b
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/5b4947.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/5b4947.wgsl.expected.ir.msl
index 3d52b11..31ba638 100644
--- a/test/tint/builtins/gen/var/textureLoad/5b4947.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/5b4947.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_5b4947 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_5b4947 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %5:texture_storage_3d<bgra8unorm, read_write> = load %arg_0
     %6:vec3<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_5b4947
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_5b4947
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_5b4947
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/5bb7fb.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/5bb7fb.wgsl.expected.ir.msl
index 78c4a87..e6713b8 100644
--- a/test/tint/builtins/gen/var/textureLoad/5bb7fb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/5bb7fb.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rg32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_5bb7fb = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_5bb7fb = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:texture_storage_1d<rg32uint, read> = load %arg_0
     %6:i32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_5bb7fb
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_5bb7fb
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_5bb7fb
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/5c69f8.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/5c69f8.wgsl.expected.ir.msl
index 6950826..ea3adc9 100644
--- a/test/tint/builtins/gen/var/textureLoad/5c69f8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/5c69f8.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_5c69f8 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_5c69f8 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %5:texture_storage_3d<bgra8unorm, read_write> = load %arg_0
     %6:vec3<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_5c69f8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_5c69f8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_5c69f8
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/5cd3fc.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/5cd3fc.wgsl.expected.ir.msl
index 3830fb7..b585143 100644
--- a/test/tint/builtins/gen/var/textureLoad/5cd3fc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/5cd3fc.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<r32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_5cd3fc = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_5cd3fc = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %5:texture_storage_2d<r32sint, read_write> = load %arg_0
     %6:vec2<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_5cd3fc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_5cd3fc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_5cd3fc
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/5cee3b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/5cee3b.wgsl.expected.ir.msl
index 81f968a..0daed4f 100644
--- a/test/tint/builtins/gen/var/textureLoad/5cee3b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/5cee3b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<r32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_5cee3b = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_5cee3b = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %5:texture_storage_3d<r32uint, read> = load %arg_0
     %6:vec3<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_5cee3b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_5cee3b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_5cee3b
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/5d0a2f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/5d0a2f.wgsl.expected.ir.msl
index 029755e..a7c3d77 100644
--- a/test/tint/builtins/gen/var/textureLoad/5d0a2f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/5d0a2f.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_5d0a2f = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_5d0a2f = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<r32uint, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_5d0a2f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_5d0a2f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_5d0a2f
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/5d4042.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/5d4042.wgsl.expected.ir.msl
index 7632186..dcef503 100644
--- a/test/tint/builtins/gen/var/textureLoad/5d4042.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/5d4042.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_5d4042 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_5d4042 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<rgba32float, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_5d4042
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_5d4042
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_5d4042
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/5dd4c7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/5dd4c7.wgsl.expected.ir.msl
new file mode 100644
index 0000000..b840a43
--- /dev/null
+++ b/test/tint/builtins/gen/var/textureLoad/5dd4c7.wgsl.expected.ir.msl
@@ -0,0 +1,45 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_2d<r8unorm, read>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%textureLoad_5dd4c7 = func():void {
+  $B2: {
+    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
+    %5:texture_storage_2d<r8unorm, read> = load %arg_0
+    %6:vec2<i32> = load %arg_1
+    %7:vec4<f32> = textureLoad %5, %6
+    %res:ptr<function, vec4<f32>, read_write> = var, %7
+    %9:vec4<f32> = load %res
+    store %prevent_dce, %9
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %11:void = call %textureLoad_5dd4c7
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %13:void = call %textureLoad_5dd4c7
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %15:void = call %textureLoad_5dd4c7
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/textureLoad/5e17a7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/5e17a7.wgsl.expected.ir.msl
index 32a80e2..f93484c 100644
--- a/test/tint/builtins/gen/var/textureLoad/5e17a7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/5e17a7.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_5e17a7 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_5e17a7 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:texture_storage_1d<rgba8sint, read_write> = load %arg_0
     %6:i32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_5e17a7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_5e17a7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_5e17a7
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/5e1843.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/5e1843.wgsl.expected.ir.msl
index 051c981..bb5aac6 100644
--- a/test/tint/builtins/gen/var/textureLoad/5e1843.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/5e1843.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_5e1843 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_5e1843 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<rgba16uint, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_5e1843
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_5e1843
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_5e1843
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/5e8d3f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/5e8d3f.wgsl.expected.ir.msl
index 1cb327d..58c5c84 100644
--- a/test/tint/builtins/gen/var/textureLoad/5e8d3f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/5e8d3f.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<r32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_5e8d3f = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_5e8d3f = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %5:texture_storage_3d<r32sint, read> = load %arg_0
     %6:vec3<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_5e8d3f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_5e8d3f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_5e8d3f
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/5ed6ad.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/5ed6ad.wgsl.expected.ir.msl
new file mode 100644
index 0000000..d6b3f48
--- /dev/null
+++ b/test/tint/builtins/gen/var/textureLoad/5ed6ad.wgsl.expected.ir.msl
@@ -0,0 +1,47 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_2d_array<r8unorm, read>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%textureLoad_5ed6ad = func():void {
+  $B2: {
+    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
+    %arg_2:ptr<function, u32, read_write> = var, 1u
+    %6:texture_storage_2d_array<r8unorm, read> = load %arg_0
+    %7:vec2<u32> = load %arg_1
+    %8:u32 = load %arg_2
+    %9:vec4<f32> = textureLoad %6, %7, %8
+    %res:ptr<function, vec4<f32>, read_write> = var, %9
+    %11:vec4<f32> = load %res
+    store %prevent_dce, %11
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %13:void = call %textureLoad_5ed6ad
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %15:void = call %textureLoad_5ed6ad
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %17:void = call %textureLoad_5ed6ad
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/textureLoad/5f4473.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/5f4473.wgsl.expected.ir.msl
index 678cf98..f9f13bf 100644
--- a/test/tint/builtins/gen/var/textureLoad/5f4473.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/5f4473.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_5f4473 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_5f4473 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %5:texture_storage_3d<rgba32uint, read> = load %arg_0
     %6:vec3<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_5f4473
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_5f4473
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_5f4473
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/5feb4d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/5feb4d.wgsl.expected.ir.msl
index c6a3283..d61bb5b 100644
--- a/test/tint/builtins/gen/var/textureLoad/5feb4d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/5feb4d.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<r32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_5feb4d = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_5feb4d = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:texture_storage_1d<r32float, read> = load %arg_0
     %6:u32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_5feb4d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_5feb4d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_5feb4d
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/6154d4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/6154d4.wgsl.expected.ir.msl
index 2a26949..d2c4dd7 100644
--- a/test/tint/builtins/gen/var/textureLoad/6154d4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/6154d4.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_6154d4 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_6154d4 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_2d<u32> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_6154d4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_6154d4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_6154d4
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/61e2e8.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/61e2e8.wgsl.expected.ir.msl
index bfd0aaf..8611505 100644
--- a/test/tint/builtins/gen/var/textureLoad/61e2e8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/61e2e8.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rg32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_61e2e8 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_61e2e8 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %5:texture_storage_3d<rg32sint, read_write> = load %arg_0
     %6:vec3<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_61e2e8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_61e2e8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_61e2e8
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/620caa.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/620caa.wgsl.expected.ir.msl
index cd1501c..2fae076 100644
--- a/test/tint/builtins/gen/var/textureLoad/620caa.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/620caa.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rg32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_620caa = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_620caa = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %5:texture_storage_2d<rg32sint, read> = load %arg_0
     %6:vec2<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_620caa
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_620caa
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_620caa
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/622278.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/622278.wgsl.expected.ir.msl
index 6664389..40ec67f 100644
--- a/test/tint/builtins/gen/var/textureLoad/622278.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/622278.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_622278 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_622278 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %5:texture_storage_3d<rgba32uint, read_write> = load %arg_0
     %6:vec3<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_622278
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_622278
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_622278
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/6273b1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/6273b1.wgsl.expected.ir.msl
index 97d5bed..ce48978 100644
--- a/test/tint/builtins/gen/var/textureLoad/6273b1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/6273b1.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_multisampled_2d, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_6273b1 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_6273b1 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_depth_multisampled_2d = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_6273b1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_6273b1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_6273b1
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/62d125.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/62d125.wgsl.expected.ir.msl
index 2f3ff896..ed92598 100644
--- a/test/tint/builtins/gen/var/textureLoad/62d125.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/62d125.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8snorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_62d125 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_62d125 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %5:texture_storage_3d<rgba8snorm, read> = load %arg_0
     %6:vec3<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_62d125
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_62d125
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_62d125
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/62d1de.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/62d1de.wgsl.expected.ir.msl
index 432a7b9..ad3258d 100644
--- a/test/tint/builtins/gen/var/textureLoad/62d1de.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/62d1de.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_1d<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_62d1de = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_62d1de = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_1d<i32> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_62d1de
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_62d1de
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_62d1de
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/639962.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/639962.wgsl.expected.ir.msl
index 8b8dc98..dda2571 100644
--- a/test/tint/builtins/gen/var/textureLoad/639962.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/639962.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_multisampled_2d<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_639962 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_639962 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_multisampled_2d<i32> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_639962
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_639962
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_639962
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/63be18.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/63be18.wgsl.expected.ir.msl
index dd4adcd..04aba10 100644
--- a/test/tint/builtins/gen/var/textureLoad/63be18.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/63be18.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_63be18 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_63be18 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<rg32sint, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_63be18
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_63be18
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_63be18
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/64c372.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/64c372.wgsl.expected.ir.msl
index 4380853..07b5c2c 100644
--- a/test/tint/builtins/gen/var/textureLoad/64c372.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/64c372.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_64c372 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_64c372 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<rgba16uint, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_64c372
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_64c372
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_64c372
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/656d76.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/656d76.wgsl.expected.ir.msl
index c5b9584..e069fae 100644
--- a/test/tint/builtins/gen/var/textureLoad/656d76.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/656d76.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_656d76 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_656d76 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %arg_3:ptr<function, u32, read_write> = var, 1u
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureLoad_656d76
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureLoad_656d76
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureLoad_656d76
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/65a4d0.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/65a4d0.wgsl.expected.ir.msl
index 230f1ec..38d79fe 100644
--- a/test/tint/builtins/gen/var/textureLoad/65a4d0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/65a4d0.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8unorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_65a4d0 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_65a4d0 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<rgba8unorm, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_65a4d0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_65a4d0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_65a4d0
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/666010.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/666010.wgsl.expected.ir.msl
index 4bb0abf..0524b7b 100644
--- a/test/tint/builtins/gen/var/textureLoad/666010.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/666010.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_666010 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_666010 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:texture_storage_1d<rgba8unorm, read_write> = load %arg_0
     %6:u32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_666010
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_666010
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_666010
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/6678b6.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/6678b6.wgsl.expected.ir.msl
index 06d70bb..505ab3b 100644
--- a/test/tint/builtins/gen/var/textureLoad/6678b6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/6678b6.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba16sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_6678b6 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_6678b6 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:texture_storage_1d<rgba16sint, read> = load %arg_0
     %6:i32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_6678b6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_6678b6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_6678b6
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/66be47.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/66be47.wgsl.expected.ir.msl
index 32e6a6c..09fb9fe 100644
--- a/test/tint/builtins/gen/var/textureLoad/66be47.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/66be47.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_66be47 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_66be47 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %arg_3:ptr<function, u32, read_write> = var, 1u
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureLoad_66be47
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureLoad_66be47
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureLoad_66be47
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/67d826.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/67d826.wgsl.expected.ir.msl
index 778b7f0..756e595 100644
--- a/test/tint/builtins/gen/var/textureLoad/67d826.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/67d826.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_67d826 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_67d826 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<r32float, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_67d826
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_67d826
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_67d826
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/67edca.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/67edca.wgsl.expected.ir.msl
index 39df1fd..523719c 100644
--- a/test/tint/builtins/gen/var/textureLoad/67edca.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/67edca.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_67edca = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_67edca = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %5:texture_storage_3d<rgba32uint, read> = load %arg_0
     %6:vec3<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_67edca
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_67edca
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_67edca
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/68d273.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/68d273.wgsl.expected.ir.msl
index e0b90d1..8276858 100644
--- a/test/tint/builtins/gen/var/textureLoad/68d273.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/68d273.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba16sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_68d273 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_68d273 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %5:texture_storage_3d<rgba16sint, read_write> = load %arg_0
     %6:vec3<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_68d273
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_68d273
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_68d273
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/6925bc.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/6925bc.wgsl.expected.ir.msl
index 5764735..c0e775a 100644
--- a/test/tint/builtins/gen/var/textureLoad/6925bc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/6925bc.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_multisampled_2d, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_6925bc = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_6925bc = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_depth_multisampled_2d = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_6925bc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_6925bc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_6925bc
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/69fee5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/69fee5.wgsl.expected.ir.msl
index ed89f68c6..65eb84e 100644
--- a/test/tint/builtins/gen/var/textureLoad/69fee5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/69fee5.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_69fee5 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_69fee5 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<r32float, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_69fee5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_69fee5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_69fee5
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/6a6871.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/6a6871.wgsl.expected.ir.msl
index 1f572e1..48854d2 100644
--- a/test/tint/builtins/gen/var/textureLoad/6a6871.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/6a6871.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_6a6871 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_6a6871 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %5:texture_storage_3d<rgba32float, read_write> = load %arg_0
     %6:vec3<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_6a6871
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_6a6871
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_6a6871
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/6b77d4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/6b77d4.wgsl.expected.ir.msl
index d37ae09..66a9d20 100644
--- a/test/tint/builtins/gen/var/textureLoad/6b77d4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/6b77d4.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_1d<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_6b77d4 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_6b77d4 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_1d<u32> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_6b77d4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_6b77d4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_6b77d4
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/6b8ba6.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/6b8ba6.wgsl.expected.ir.msl
index d32e0f4..27d97c9 100644
--- a/test/tint/builtins/gen/var/textureLoad/6b8ba6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/6b8ba6.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_6b8ba6 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_6b8ba6 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<rgba16float, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_6b8ba6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_6b8ba6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_6b8ba6
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/6ba9ab.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/6ba9ab.wgsl.expected.ir.msl
index 9a912b9..5e431d2 100644
--- a/test/tint/builtins/gen/var/textureLoad/6ba9ab.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/6ba9ab.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_6ba9ab = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_6ba9ab = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<rgba8unorm, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_6ba9ab
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_6ba9ab
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_6ba9ab
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/6bf3e2.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/6bf3e2.wgsl.expected.ir.msl
index 837ee79..f0542fe 100644
--- a/test/tint/builtins/gen/var/textureLoad/6bf3e2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/6bf3e2.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_6bf3e2 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_6bf3e2 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<bgra8unorm, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_6bf3e2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_6bf3e2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_6bf3e2
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/6bf4b7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/6bf4b7.wgsl.expected.ir.msl
index 1e73c75..5ead07e 100644
--- a/test/tint/builtins/gen/var/textureLoad/6bf4b7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/6bf4b7.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_6bf4b7 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_6bf4b7 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_3d<u32> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_6bf4b7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_6bf4b7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_6bf4b7
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/6d1fb4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/6d1fb4.wgsl.expected.ir.msl
index 5e10c2b..25444b7 100644
--- a/test/tint/builtins/gen/var/textureLoad/6d1fb4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/6d1fb4.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_6d1fb4 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_6d1fb4 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<r32uint, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_6d1fb4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_6d1fb4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_6d1fb4
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/6d376a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/6d376a.wgsl.expected.ir.msl
index bbcde81..49cf4c6 100644
--- a/test/tint/builtins/gen/var/textureLoad/6d376a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/6d376a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_1d<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_6d376a = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_6d376a = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_1d<f32> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_6d376a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_6d376a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_6d376a
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/6d7bb5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/6d7bb5.wgsl.expected.ir.msl
index cc9c729..8ebb6f0 100644
--- a/test/tint/builtins/gen/var/textureLoad/6d7bb5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/6d7bb5.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_6d7bb5 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_6d7bb5 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<rgba8unorm, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_6d7bb5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_6d7bb5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_6d7bb5
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/6e903f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/6e903f.wgsl.expected.ir.msl
index c15583e..2110de9 100644
--- a/test/tint/builtins/gen/var/textureLoad/6e903f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/6e903f.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_6e903f = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_6e903f = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %5:texture_storage_3d<rgba8sint, read_write> = load %arg_0
     %6:vec3<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_6e903f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_6e903f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_6e903f
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/6f0370.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/6f0370.wgsl.expected.ir.msl
new file mode 100644
index 0000000..226165f
--- /dev/null
+++ b/test/tint/builtins/gen/var/textureLoad/6f0370.wgsl.expected.ir.msl
@@ -0,0 +1,45 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_3d<r8unorm, read>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%textureLoad_6f0370 = func():void {
+  $B2: {
+    %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
+    %5:texture_storage_3d<r8unorm, read> = load %arg_0
+    %6:vec3<u32> = load %arg_1
+    %7:vec4<f32> = textureLoad %5, %6
+    %res:ptr<function, vec4<f32>, read_write> = var, %7
+    %9:vec4<f32> = load %res
+    store %prevent_dce, %9
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %11:void = call %textureLoad_6f0370
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %13:void = call %textureLoad_6f0370
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %15:void = call %textureLoad_6f0370
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/textureLoad/6f0ea8.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/6f0ea8.wgsl.expected.ir.msl
index 82293fa..6307856 100644
--- a/test/tint/builtins/gen/var/textureLoad/6f0ea8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/6f0ea8.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba16float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_6f0ea8 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_6f0ea8 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %5:texture_storage_3d<rgba16float, read_write> = load %arg_0
     %6:vec3<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_6f0ea8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_6f0ea8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_6f0ea8
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/6f1750.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/6f1750.wgsl.expected.ir.msl
index 8c5e752..873d5a4 100644
--- a/test/tint/builtins/gen/var/textureLoad/6f1750.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/6f1750.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_6f1750 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_6f1750 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<r32float, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_6f1750
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_6f1750
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_6f1750
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/6f8927.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/6f8927.wgsl.expected.ir.msl
index b43d644..db63453 100644
--- a/test/tint/builtins/gen/var/textureLoad/6f8927.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/6f8927.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_6f8927 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_6f8927 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<rgba32float, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_6f8927
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_6f8927
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_6f8927
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/714471.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/714471.wgsl.expected.ir.msl
index 4adac1a..eaac8b7 100644
--- a/test/tint/builtins/gen/var/textureLoad/714471.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/714471.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_714471 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_714471 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_2d<i32> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_714471
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_714471
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_714471
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/72bb3c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/72bb3c.wgsl.expected.ir.msl
index 4bcf00d..f861597 100644
--- a/test/tint/builtins/gen/var/textureLoad/72bb3c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/72bb3c.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8snorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_72bb3c = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_72bb3c = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<rgba8snorm, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_72bb3c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_72bb3c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_72bb3c
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/72c9c3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/72c9c3.wgsl.expected.ir.msl
new file mode 100644
index 0000000..ada8331
--- /dev/null
+++ b/test/tint/builtins/gen/var/textureLoad/72c9c3.wgsl.expected.ir.msl
@@ -0,0 +1,47 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_2d_array<r8unorm, read_write>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%textureLoad_72c9c3 = func():void {
+  $B2: {
+    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
+    %arg_2:ptr<function, u32, read_write> = var, 1u
+    %6:texture_storage_2d_array<r8unorm, read_write> = load %arg_0
+    %7:vec2<i32> = load %arg_1
+    %8:u32 = load %arg_2
+    %9:vec4<f32> = textureLoad %6, %7, %8
+    %res:ptr<function, vec4<f32>, read_write> = var, %9
+    %11:vec4<f32> = load %res
+    store %prevent_dce, %11
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %13:void = call %textureLoad_72c9c3
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %15:void = call %textureLoad_72c9c3
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %17:void = call %textureLoad_72c9c3
+    ret
+  }
+}
+
+invalid access control for storage texture
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/textureLoad/742f1b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/742f1b.wgsl.expected.ir.msl
index 5274d70..726dab2 100644
--- a/test/tint/builtins/gen/var/textureLoad/742f1b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/742f1b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba16float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_742f1b = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_742f1b = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %5:texture_storage_3d<rgba16float, read_write> = load %arg_0
     %6:vec3<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_742f1b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_742f1b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_742f1b
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/749704.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/749704.wgsl.expected.ir.msl
index 0c1ebec..f05d19c 100644
--- a/test/tint/builtins/gen/var/textureLoad/749704.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/749704.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<r32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_749704 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_749704 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %5:texture_storage_2d<r32uint, read> = load %arg_0
     %6:vec2<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_749704
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_749704
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_749704
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/74a387.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/74a387.wgsl.expected.ir.msl
index c6abca8..d6ba41d 100644
--- a/test/tint/builtins/gen/var/textureLoad/74a387.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/74a387.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_74a387 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_74a387 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:texture_storage_1d<rgba8sint, read_write> = load %arg_0
     %6:u32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_74a387
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_74a387
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_74a387
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/773c46.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/773c46.wgsl.expected.ir.msl
index ee9aca0..1cccab3 100644
--- a/test/tint/builtins/gen/var/textureLoad/773c46.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/773c46.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rg32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_773c46 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_773c46 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %5:texture_storage_2d<rg32uint, read> = load %arg_0
     %6:vec2<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_773c46
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_773c46
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_773c46
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/789045.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/789045.wgsl.expected.ir.msl
index b5e8c94..d969e01 100644
--- a/test/tint/builtins/gen/var/textureLoad/789045.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/789045.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_789045 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_789045 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %arg_3:ptr<function, u32, read_write> = var, 1u
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureLoad_789045
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureLoad_789045
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureLoad_789045
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/79e697.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/79e697.wgsl.expected.ir.msl
index 699bc00..a22a214 100644
--- a/test/tint/builtins/gen/var/textureLoad/79e697.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/79e697.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_79e697 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_79e697 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %arg_3:ptr<function, i32, read_write> = var, 1i
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureLoad_79e697
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureLoad_79e697
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureLoad_79e697
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/7ab4df.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/7ab4df.wgsl.expected.ir.msl
index 70ad554..c447fb6 100644
--- a/test/tint/builtins/gen/var/textureLoad/7ab4df.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/7ab4df.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_7ab4df = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_7ab4df = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %arg_3:ptr<function, i32, read_write> = var, 1i
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureLoad_7ab4df
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureLoad_7ab4df
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureLoad_7ab4df
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/7b63e0.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/7b63e0.wgsl.expected.ir.msl
index f49e891..84eae31 100644
--- a/test/tint/builtins/gen/var/textureLoad/7b63e0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/7b63e0.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_7b63e0 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_7b63e0 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %arg_3:ptr<function, u32, read_write> = var, 1u
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureLoad_7b63e0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureLoad_7b63e0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureLoad_7b63e0
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/7bee94.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/7bee94.wgsl.expected.ir.msl
index c933c65..1f30506 100644
--- a/test/tint/builtins/gen/var/textureLoad/7bee94.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/7bee94.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_multisampled_2d<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_7bee94 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_7bee94 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_multisampled_2d<i32> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_7bee94
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_7bee94
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_7bee94
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/7c90e5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/7c90e5.wgsl.expected.ir.msl
index a81a524..3f6532c 100644
--- a/test/tint/builtins/gen/var/textureLoad/7c90e5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/7c90e5.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_7c90e5 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_7c90e5 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %arg_3:ptr<function, i32, read_write> = var, 1i
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureLoad_7c90e5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureLoad_7c90e5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureLoad_7c90e5
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/7dab57.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/7dab57.wgsl.expected.ir.msl
index 260a330..9e66eec 100644
--- a/test/tint/builtins/gen/var/textureLoad/7dab57.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/7dab57.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_7dab57 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_7dab57 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<rg32sint, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_7dab57
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_7dab57
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_7dab57
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/7dd3d5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/7dd3d5.wgsl.expected.ir.msl
new file mode 100644
index 0000000..b08d6d9
--- /dev/null
+++ b/test/tint/builtins/gen/var/textureLoad/7dd3d5.wgsl.expected.ir.msl
@@ -0,0 +1,47 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_2d_array<r8unorm, read_write>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%textureLoad_7dd3d5 = func():void {
+  $B2: {
+    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
+    %arg_2:ptr<function, i32, read_write> = var, 1i
+    %6:texture_storage_2d_array<r8unorm, read_write> = load %arg_0
+    %7:vec2<i32> = load %arg_1
+    %8:i32 = load %arg_2
+    %9:vec4<f32> = textureLoad %6, %7, %8
+    %res:ptr<function, vec4<f32>, read_write> = var, %9
+    %11:vec4<f32> = load %res
+    store %prevent_dce, %11
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %13:void = call %textureLoad_7dd3d5
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %15:void = call %textureLoad_7dd3d5
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %17:void = call %textureLoad_7dd3d5
+    ret
+  }
+}
+
+invalid access control for storage texture
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/textureLoad/7e5cbc.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/7e5cbc.wgsl.expected.ir.msl
index 7e28c85..9cd480d 100644
--- a/test/tint/builtins/gen/var/textureLoad/7e5cbc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/7e5cbc.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_7e5cbc = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_7e5cbc = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:texture_storage_1d<bgra8unorm, read_write> = load %arg_0
     %6:u32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_7e5cbc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_7e5cbc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_7e5cbc
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/7fd822.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/7fd822.wgsl.expected.ir.msl
index c05fa86..52b39ce 100644
--- a/test/tint/builtins/gen/var/textureLoad/7fd822.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/7fd822.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_7fd822 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_7fd822 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_depth_2d = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_7fd822
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_7fd822
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_7fd822
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/80dae1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/80dae1.wgsl.expected.ir.msl
index aac6702..e74885f 100644
--- a/test/tint/builtins/gen/var/textureLoad/80dae1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/80dae1.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba16sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_80dae1 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_80dae1 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:texture_storage_1d<rgba16sint, read_write> = load %arg_0
     %6:u32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_80dae1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_80dae1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_80dae1
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/81c381.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/81c381.wgsl.expected.ir.msl
index 213d612..1f19de3 100644
--- a/test/tint/builtins/gen/var/textureLoad/81c381.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/81c381.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_1d<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_81c381 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_81c381 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_1d<f32> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_81c381
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_81c381
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_81c381
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/83162f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/83162f.wgsl.expected.ir.msl
index 3c6da0f..1e37af2 100644
--- a/test/tint/builtins/gen/var/textureLoad/83162f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/83162f.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rg32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_83162f = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_83162f = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %5:texture_storage_3d<rg32float, read> = load %arg_0
     %6:vec3<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_83162f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_83162f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_83162f
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/83cea4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/83cea4.wgsl.expected.ir.msl
index 8db86e0..ceaa9b2 100644
--- a/test/tint/builtins/gen/var/textureLoad/83cea4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/83cea4.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba16uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_83cea4 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_83cea4 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:texture_storage_1d<rgba16uint, read> = load %arg_0
     %6:i32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_83cea4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_83cea4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_83cea4
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/83d6e3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/83d6e3.wgsl.expected.ir.msl
index 47bdb06..fde7e44 100644
--- a/test/tint/builtins/gen/var/textureLoad/83d6e3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/83d6e3.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<r32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_83d6e3 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_83d6e3 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:texture_storage_1d<r32uint, read_write> = load %arg_0
     %6:i32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_83d6e3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_83d6e3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_83d6e3
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/848d85.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/848d85.wgsl.expected.ir.msl
index f2e6346..72691f1 100644
--- a/test/tint/builtins/gen/var/textureLoad/848d85.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/848d85.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba16float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_848d85 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_848d85 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %5:texture_storage_2d<rgba16float, read_write> = load %arg_0
     %6:vec2<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_848d85
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_848d85
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_848d85
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/84a438.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/84a438.wgsl.expected.ir.msl
index dc4cb31..f65d0bd 100644
--- a/test/tint/builtins/gen/var/textureLoad/84a438.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/84a438.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_84a438 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_84a438 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %5:texture_storage_2d<rgba8uint, read_write> = load %arg_0
     %6:vec2<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_84a438
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_84a438
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_84a438
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/84c728.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/84c728.wgsl.expected.ir.msl
index defa345..8d22db2 100644
--- a/test/tint/builtins/gen/var/textureLoad/84c728.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/84c728.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_84c728 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_84c728 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:texture_storage_1d<rgba32float, read> = load %arg_0
     %6:u32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_84c728
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_84c728
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_84c728
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/84dee1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/84dee1.wgsl.expected.ir.msl
index fc9239f..8ca984c 100644
--- a/test/tint/builtins/gen/var/textureLoad/84dee1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/84dee1.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_84dee1 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_84dee1 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_2d<f32> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_84dee1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_84dee1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_84dee1
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/8527b1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/8527b1.wgsl.expected.ir.msl
index 3fb1962..ee3e1c3 100644
--- a/test/tint/builtins/gen/var/textureLoad/8527b1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/8527b1.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_8527b1 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_8527b1 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %arg_3:ptr<function, u32, read_write> = var, 1u
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureLoad_8527b1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureLoad_8527b1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureLoad_8527b1
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/862833.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/862833.wgsl.expected.ir.msl
index 4b1a1dc..1bda51e 100644
--- a/test/tint/builtins/gen/var/textureLoad/862833.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/862833.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_862833 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_862833 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<rgba32float, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_862833
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_862833
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_862833
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/878e24.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/878e24.wgsl.expected.ir.msl
index 4db1e22..4006d28 100644
--- a/test/tint/builtins/gen/var/textureLoad/878e24.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/878e24.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_878e24 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_878e24 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<rgba32float, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_878e24
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_878e24
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_878e24
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/87be85.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/87be85.wgsl.expected.ir.msl
index e0e6dad..f6af7c4 100644
--- a/test/tint/builtins/gen/var/textureLoad/87be85.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/87be85.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_87be85 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_87be85 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %arg_3:ptr<function, i32, read_write> = var, 1i
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureLoad_87be85
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureLoad_87be85
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureLoad_87be85
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/87f0a6.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/87f0a6.wgsl.expected.ir.msl
index fb877ad..1c855b1 100644
--- a/test/tint/builtins/gen/var/textureLoad/87f0a6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/87f0a6.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_87f0a6 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_87f0a6 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<rgba8uint, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_87f0a6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_87f0a6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_87f0a6
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/881349.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/881349.wgsl.expected.ir.msl
index f122edd..cf18074 100644
--- a/test/tint/builtins/gen/var/textureLoad/881349.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/881349.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_881349 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_881349 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<rg32float, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_881349
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_881349
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_881349
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/89620b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/89620b.wgsl.expected.ir.msl
index e7bc195..4af7e77 100644
--- a/test/tint/builtins/gen/var/textureLoad/89620b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/89620b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<bgra8unorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_89620b = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_89620b = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<bgra8unorm, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_89620b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_89620b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_89620b
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/897cf3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/897cf3.wgsl.expected.ir.msl
index a9a6b93..4cfdc84 100644
--- a/test/tint/builtins/gen/var/textureLoad/897cf3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/897cf3.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_897cf3 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_897cf3 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_2d<u32> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_897cf3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_897cf3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_897cf3
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/8a291b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/8a291b.wgsl.expected.ir.msl
index c7c73e1..4613819 100644
--- a/test/tint/builtins/gen/var/textureLoad/8a291b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/8a291b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<bgra8unorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_8a291b = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_8a291b = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<bgra8unorm, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_8a291b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_8a291b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_8a291b
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/8a9988.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/8a9988.wgsl.expected.ir.msl
index 1bccc49..3ca9e7f 100644
--- a/test/tint/builtins/gen/var/textureLoad/8a9988.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/8a9988.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rg32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_8a9988 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_8a9988 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %5:texture_storage_3d<rg32sint, read> = load %arg_0
     %6:vec3<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_8a9988
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_8a9988
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_8a9988
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/8acf41.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/8acf41.wgsl.expected.ir.msl
index 11b3b55..26574a5 100644
--- a/test/tint/builtins/gen/var/textureLoad/8acf41.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/8acf41.wgsl.expected.ir.msl
@@ -1,45 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1057 internal compiler error: %b1 = block {  # root
-  %arg_0:ptr<handle, texture_external, read> = var @binding_point(1, 0)
-  %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
+
+@group(1) @binding(0) var arg_0 : texture_external;
+
+fn textureLoad_8acf41() {
+  var arg_1 = vec2<i32>(1i);
+  var res : vec4<f32> = textureLoad(arg_0, arg_1);
+  prevent_dce = res;
 }
 
-%textureLoad_8acf41 = func():void -> %b2 {
-  %b2 = block {
-    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
-    %5:texture_external = load %arg_0
-    %6:vec2<i32> = load %arg_1
-    %7:vec4<f32> = textureLoad %5, %6
-    %res:ptr<function, vec4<f32>, read_write> = var, %7
-    %9:vec4<f32> = load %res
-    store %prevent_dce, %9
-    ret
-  }
-}
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %11:void = call %textureLoad_8acf41
-    ret vec4<f32>(0.0f)
-  }
-}
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %13:void = call %textureLoad_8acf41
-    ret
-  }
-}
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %15:void = call %textureLoad_8acf41
-    ret
-  }
+@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+@vertex
+fn vertex_main() -> @builtin(position) vec4<f32> {
+  textureLoad_8acf41();
+  return vec4<f32>();
 }
 
-Multiplanar external texture transform was not run.
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+@fragment
+fn fragment_main() {
+  textureLoad_8acf41();
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+  textureLoad_8acf41();
+}
+
+Failed to generate: error: ExternalTextureOptions missing binding entry for [group: 1, binding: 0]
diff --git a/test/tint/builtins/gen/var/textureLoad/8b62fb.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/8b62fb.wgsl.expected.ir.msl
index e5c54ff..00b512d 100644
--- a/test/tint/builtins/gen/var/textureLoad/8b62fb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/8b62fb.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_8b62fb = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_8b62fb = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %5:texture_storage_2d<bgra8unorm, read_write> = load %arg_0
     %6:vec2<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_8b62fb
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_8b62fb
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_8b62fb
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/8bf8c2.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/8bf8c2.wgsl.expected.ir.msl
index 0aba4f3..98214c5 100644
--- a/test/tint/builtins/gen/var/textureLoad/8bf8c2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/8bf8c2.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<r32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_8bf8c2 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_8bf8c2 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:texture_storage_1d<r32float, read_write> = load %arg_0
     %6:u32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_8bf8c2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_8bf8c2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_8bf8c2
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/8c6176.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/8c6176.wgsl.expected.ir.msl
index 03cdb17..fb5ce82 100644
--- a/test/tint/builtins/gen/var/textureLoad/8c6176.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/8c6176.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rg32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_8c6176 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_8c6176 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %5:texture_storage_2d<rg32uint, read_write> = load %arg_0
     %6:vec2<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_8c6176
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_8c6176
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_8c6176
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/8ccbe3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/8ccbe3.wgsl.expected.ir.msl
index 9ec22fe..7bcf6ce 100644
--- a/test/tint/builtins/gen/var/textureLoad/8ccbe3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/8ccbe3.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_8ccbe3 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_8ccbe3 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_depth_2d = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_8ccbe3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_8ccbe3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_8ccbe3
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/8d64c3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/8d64c3.wgsl.expected.ir.msl
index d562443..7c0ae6a 100644
--- a/test/tint/builtins/gen/var/textureLoad/8d64c3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/8d64c3.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rg32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_8d64c3 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_8d64c3 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %5:texture_storage_2d<rg32uint, read_write> = load %arg_0
     %6:vec2<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_8d64c3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_8d64c3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_8d64c3
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/8db0ce.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/8db0ce.wgsl.expected.ir.msl
index 8dbcbf7..25f3b07 100644
--- a/test/tint/builtins/gen/var/textureLoad/8db0ce.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/8db0ce.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_8db0ce = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_8db0ce = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<r32sint, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_8db0ce
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_8db0ce
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_8db0ce
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/8e5032.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/8e5032.wgsl.expected.ir.msl
index 2779c9e..e693dc8 100644
--- a/test/tint/builtins/gen/var/textureLoad/8e5032.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/8e5032.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_8e5032 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_8e5032 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<rg32uint, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_8e5032
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_8e5032
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_8e5032
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/8e68c9.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/8e68c9.wgsl.expected.ir.msl
index 74288d9..8b07739 100644
--- a/test/tint/builtins/gen/var/textureLoad/8e68c9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/8e68c9.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_8e68c9 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_8e68c9 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %5:texture_storage_3d<rgba32sint, read_write> = load %arg_0
     %6:vec3<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_8e68c9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_8e68c9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_8e68c9
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/8fc29b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/8fc29b.wgsl.expected.ir.msl
index 089076d..e6cd140 100644
--- a/test/tint/builtins/gen/var/textureLoad/8fc29b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/8fc29b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_8fc29b = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_8fc29b = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:texture_storage_1d<rgba8unorm, read_write> = load %arg_0
     %6:i32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_8fc29b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_8fc29b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_8fc29b
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/8ff033.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/8ff033.wgsl.expected.ir.msl
index fe47948..de89b7a 100644
--- a/test/tint/builtins/gen/var/textureLoad/8ff033.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/8ff033.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8snorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_8ff033 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_8ff033 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %5:texture_storage_2d<rgba8snorm, read> = load %arg_0
     %6:vec2<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_8ff033
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_8ff033
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_8ff033
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/91ede5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/91ede5.wgsl.expected.ir.msl
index fc5aacb..cd617e4 100644
--- a/test/tint/builtins/gen/var/textureLoad/91ede5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/91ede5.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rg32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_91ede5 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_91ede5 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %5:texture_storage_3d<rg32float, read_write> = load %arg_0
     %6:vec3<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_91ede5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_91ede5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_91ede5
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/9242e7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/9242e7.wgsl.expected.ir.msl
index 8a6e3c9..1f0910d 100644
--- a/test/tint/builtins/gen/var/textureLoad/9242e7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/9242e7.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba16uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_9242e7 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_9242e7 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %5:texture_storage_2d<rgba16uint, read_write> = load %arg_0
     %6:vec2<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_9242e7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_9242e7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_9242e7
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/92dd61.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/92dd61.wgsl.expected.ir.msl
new file mode 100644
index 0000000..400f5a3
--- /dev/null
+++ b/test/tint/builtins/gen/var/textureLoad/92dd61.wgsl.expected.ir.msl
@@ -0,0 +1,45 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_1d<r8unorm, read_write>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%textureLoad_92dd61 = func():void {
+  $B2: {
+    %arg_1:ptr<function, u32, read_write> = var, 1u
+    %5:texture_storage_1d<r8unorm, read_write> = load %arg_0
+    %6:u32 = load %arg_1
+    %7:vec4<f32> = textureLoad %5, %6
+    %res:ptr<function, vec4<f32>, read_write> = var, %7
+    %9:vec4<f32> = load %res
+    store %prevent_dce, %9
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %11:void = call %textureLoad_92dd61
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %13:void = call %textureLoad_92dd61
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %15:void = call %textureLoad_92dd61
+    ret
+  }
+}
+
+invalid access control for storage texture
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/textureLoad/92eb1f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/92eb1f.wgsl.expected.ir.msl
index 157a746..e605ac2 100644
--- a/test/tint/builtins/gen/var/textureLoad/92eb1f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/92eb1f.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_92eb1f = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_92eb1f = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_3d<u32> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_92eb1f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_92eb1f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_92eb1f
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/936952.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/936952.wgsl.expected.ir.msl
index a466be7..8eff80d 100644
--- a/test/tint/builtins/gen/var/textureLoad/936952.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/936952.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_936952 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_936952 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<rgba32float, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_936952
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_936952
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_936952
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/93f23e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/93f23e.wgsl.expected.ir.msl
index b85b678..16f79c0 100644
--- a/test/tint/builtins/gen/var/textureLoad/93f23e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/93f23e.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<r32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_93f23e = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_93f23e = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %5:texture_storage_2d<r32uint, read_write> = load %arg_0
     %6:vec2<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_93f23e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_93f23e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_93f23e
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/947107.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/947107.wgsl.expected.ir.msl
new file mode 100644
index 0000000..eb75db0
--- /dev/null
+++ b/test/tint/builtins/gen/var/textureLoad/947107.wgsl.expected.ir.msl
@@ -0,0 +1,45 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_1d<r8unorm, read>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%textureLoad_947107 = func():void {
+  $B2: {
+    %arg_1:ptr<function, i32, read_write> = var, 1i
+    %5:texture_storage_1d<r8unorm, read> = load %arg_0
+    %6:i32 = load %arg_1
+    %7:vec4<f32> = textureLoad %5, %6
+    %res:ptr<function, vec4<f32>, read_write> = var, %7
+    %9:vec4<f32> = load %res
+    store %prevent_dce, %9
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %11:void = call %textureLoad_947107
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %13:void = call %textureLoad_947107
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %15:void = call %textureLoad_947107
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/textureLoad/96efd5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/96efd5.wgsl.expected.ir.msl
index 2903d7f..633abfc 100644
--- a/test/tint/builtins/gen/var/textureLoad/96efd5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/96efd5.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_96efd5 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_96efd5 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %arg_3:ptr<function, u32, read_write> = var, 1u
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureLoad_96efd5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureLoad_96efd5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureLoad_96efd5
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/970308.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/970308.wgsl.expected.ir.msl
index 1ada896..fea9ec7 100644
--- a/test/tint/builtins/gen/var/textureLoad/970308.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/970308.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_970308 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_970308 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<r32uint, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_970308
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_970308
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_970308
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/9885b0.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/9885b0.wgsl.expected.ir.msl
index 3569aac..929fd7b 100644
--- a/test/tint/builtins/gen/var/textureLoad/9885b0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/9885b0.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_9885b0 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_9885b0 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %arg_3:ptr<function, u32, read_write> = var, 1u
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureLoad_9885b0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureLoad_9885b0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureLoad_9885b0
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/99d8fa.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/99d8fa.wgsl.expected.ir.msl
new file mode 100644
index 0000000..da7ff57
--- /dev/null
+++ b/test/tint/builtins/gen/var/textureLoad/99d8fa.wgsl.expected.ir.msl
@@ -0,0 +1,45 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_3d<r8unorm, read_write>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%textureLoad_99d8fa = func():void {
+  $B2: {
+    %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
+    %5:texture_storage_3d<r8unorm, read_write> = load %arg_0
+    %6:vec3<i32> = load %arg_1
+    %7:vec4<f32> = textureLoad %5, %6
+    %res:ptr<function, vec4<f32>, read_write> = var, %7
+    %9:vec4<f32> = load %res
+    store %prevent_dce, %9
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %11:void = call %textureLoad_99d8fa
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %13:void = call %textureLoad_99d8fa
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %15:void = call %textureLoad_99d8fa
+    ret
+  }
+}
+
+invalid access control for storage texture
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/textureLoad/9a7c90.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/9a7c90.wgsl.expected.ir.msl
index a9449ec..ae7761f 100644
--- a/test/tint/builtins/gen/var/textureLoad/9a7c90.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/9a7c90.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_9a7c90 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_9a7c90 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %5:texture_storage_3d<rgba8uint, read> = load %arg_0
     %6:vec3<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_9a7c90
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_9a7c90
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_9a7c90
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/9a8c1e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/9a8c1e.wgsl.expected.ir.msl
index e769bdb..0573637 100644
--- a/test/tint/builtins/gen/var/textureLoad/9a8c1e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/9a8c1e.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_9a8c1e = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_9a8c1e = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<rgba8sint, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_9a8c1e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_9a8c1e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_9a8c1e
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/9aa733.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/9aa733.wgsl.expected.ir.msl
index 1253ab2..754b55b 100644
--- a/test/tint/builtins/gen/var/textureLoad/9aa733.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/9aa733.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_9aa733 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_9aa733 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_2d<i32> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_9aa733
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_9aa733
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_9aa733
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/9b2667.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/9b2667.wgsl.expected.ir.msl
index c069fe6..3b4aef7 100644
--- a/test/tint/builtins/gen/var/textureLoad/9b2667.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/9b2667.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_9b2667 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_9b2667 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %arg_3:ptr<function, i32, read_write> = var, 1i
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureLoad_9b2667
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureLoad_9b2667
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureLoad_9b2667
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/9b5343.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/9b5343.wgsl.expected.ir.msl
index 4850cfd..c2c2c48 100644
--- a/test/tint/builtins/gen/var/textureLoad/9b5343.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/9b5343.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_9b5343 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_9b5343 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<rgba16uint, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_9b5343
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_9b5343
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_9b5343
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/9c2376.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/9c2376.wgsl.expected.ir.msl
index 584c474..f8f3967 100644
--- a/test/tint/builtins/gen/var/textureLoad/9c2376.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/9c2376.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_9c2376 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_9c2376 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<r32float, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_9c2376
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_9c2376
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_9c2376
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/9c2a14.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/9c2a14.wgsl.expected.ir.msl
index a4f3703..29782a6 100644
--- a/test/tint/builtins/gen/var/textureLoad/9c2a14.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/9c2a14.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rg32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_9c2a14 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_9c2a14 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %5:texture_storage_2d<rg32float, read> = load %arg_0
     %6:vec2<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_9c2a14
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_9c2a14
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_9c2a14
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/9cf7df.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/9cf7df.wgsl.expected.ir.msl
index 136c090..e4f14a7 100644
--- a/test/tint/builtins/gen/var/textureLoad/9cf7df.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/9cf7df.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_9cf7df = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_9cf7df = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<rg32sint, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_9cf7df
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_9cf7df
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_9cf7df
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/9d70e9.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/9d70e9.wgsl.expected.ir.msl
index 312df02..2b42333 100644
--- a/test/tint/builtins/gen/var/textureLoad/9d70e9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/9d70e9.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_9d70e9 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_9d70e9 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %arg_3:ptr<function, u32, read_write> = var, 1u
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureLoad_9d70e9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureLoad_9d70e9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureLoad_9d70e9
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/9de6f5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/9de6f5.wgsl.expected.ir.msl
index 13cc552..287934c 100644
--- a/test/tint/builtins/gen/var/textureLoad/9de6f5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/9de6f5.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8snorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_9de6f5 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_9de6f5 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<rgba8snorm, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_9de6f5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_9de6f5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_9de6f5
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/9ed19e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/9ed19e.wgsl.expected.ir.msl
index 49c5be0..f2ff8a3 100644
--- a/test/tint/builtins/gen/var/textureLoad/9ed19e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/9ed19e.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_9ed19e = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_9ed19e = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_depth_2d = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_9ed19e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_9ed19e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_9ed19e
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/9fa9fd.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/9fa9fd.wgsl.expected.ir.msl
index 4ce4933..2466663 100644
--- a/test/tint/builtins/gen/var/textureLoad/9fa9fd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/9fa9fd.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_9fa9fd = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_9fa9fd = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %5:texture_storage_3d<rgba32uint, read_write> = load %arg_0
     %6:vec3<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_9fa9fd
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_9fa9fd
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_9fa9fd
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/9fbfd9.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/9fbfd9.wgsl.expected.ir.msl
index e30a16c..8458741 100644
--- a/test/tint/builtins/gen/var/textureLoad/9fbfd9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/9fbfd9.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_9fbfd9 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_9fbfd9 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %arg_3:ptr<function, u32, read_write> = var, 1u
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureLoad_9fbfd9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureLoad_9fbfd9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureLoad_9fbfd9
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/9fd7be.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/9fd7be.wgsl.expected.ir.msl
index 94859ff..9847543 100644
--- a/test/tint/builtins/gen/var/textureLoad/9fd7be.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/9fd7be.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_9fd7be = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_9fd7be = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<rgba32uint, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_9fd7be
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_9fd7be
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_9fd7be
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/a03af1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/a03af1.wgsl.expected.ir.msl
index 1989c6d..eb3b0d5 100644
--- a/test/tint/builtins/gen/var/textureLoad/a03af1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/a03af1.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8unorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_a03af1 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_a03af1 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<rgba8unorm, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_a03af1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_a03af1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_a03af1
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/a24be1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/a24be1.wgsl.expected.ir.msl
index 9679763..260dc40 100644
--- a/test/tint/builtins/gen/var/textureLoad/a24be1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/a24be1.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_a24be1 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_a24be1 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %arg_3:ptr<function, u32, read_write> = var, 1u
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureLoad_a24be1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureLoad_a24be1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureLoad_a24be1
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/a2b3f4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/a2b3f4.wgsl.expected.ir.msl
index e6bd334..c001e1e 100644
--- a/test/tint/builtins/gen/var/textureLoad/a2b3f4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/a2b3f4.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_a2b3f4 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_a2b3f4 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<rgba8uint, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_a2b3f4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_a2b3f4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_a2b3f4
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/a3733f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/a3733f.wgsl.expected.ir.msl
index db54efe..753ef45 100644
--- a/test/tint/builtins/gen/var/textureLoad/a3733f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/a3733f.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba16uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_a3733f = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_a3733f = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %5:texture_storage_2d<rgba16uint, read_write> = load %arg_0
     %6:vec2<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_a3733f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_a3733f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_a3733f
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/a3f122.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/a3f122.wgsl.expected.ir.msl
index e4bd225..ff4e250 100644
--- a/test/tint/builtins/gen/var/textureLoad/a3f122.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/a3f122.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_a3f122 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_a3f122 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<rgba32uint, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_a3f122
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_a3f122
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_a3f122
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/a548a8.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/a548a8.wgsl.expected.ir.msl
index b880de0..195d6a5 100644
--- a/test/tint/builtins/gen/var/textureLoad/a548a8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/a548a8.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_a548a8 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_a548a8 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:texture_storage_1d<rgba8uint, read_write> = load %arg_0
     %6:i32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_a548a8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_a548a8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_a548a8
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/a54e11.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/a54e11.wgsl.expected.ir.msl
index bea3a67..f21fdf5 100644
--- a/test/tint/builtins/gen/var/textureLoad/a54e11.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/a54e11.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_a54e11 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_a54e11 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<rgba8sint, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_a54e11
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_a54e11
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_a54e11
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/a583c9.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/a583c9.wgsl.expected.ir.msl
index babf865..b204085 100644
--- a/test/tint/builtins/gen/var/textureLoad/a583c9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/a583c9.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_multisampled_2d<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_a583c9 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_a583c9 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_multisampled_2d<f32> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_a583c9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_a583c9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_a583c9
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/a5c4e2.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/a5c4e2.wgsl.expected.ir.msl
index 390e7cc..67956bf 100644
--- a/test/tint/builtins/gen/var/textureLoad/a5c4e2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/a5c4e2.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rg32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_a5c4e2 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_a5c4e2 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:texture_storage_1d<rg32uint, read_write> = load %arg_0
     %6:i32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_a5c4e2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_a5c4e2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_a5c4e2
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/a5e0a5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/a5e0a5.wgsl.expected.ir.msl
index 1588146..8087106 100644
--- a/test/tint/builtins/gen/var/textureLoad/a5e0a5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/a5e0a5.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<r32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_a5e0a5 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_a5e0a5 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %5:texture_storage_2d<r32float, read_write> = load %arg_0
     %6:vec2<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_a5e0a5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_a5e0a5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_a5e0a5
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/a64b1d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/a64b1d.wgsl.expected.ir.msl
index 9281d39..fa37dbd 100644
--- a/test/tint/builtins/gen/var/textureLoad/a64b1d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/a64b1d.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_a64b1d = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_a64b1d = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %5:texture_storage_3d<rgba8unorm, read_write> = load %arg_0
     %6:vec3<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_a64b1d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_a64b1d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_a64b1d
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/a6a85a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/a6a85a.wgsl.expected.ir.msl
index d42282e..52221b6 100644
--- a/test/tint/builtins/gen/var/textureLoad/a6a85a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/a6a85a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8unorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_a6a85a = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_a6a85a = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %5:texture_storage_3d<rgba8unorm, read> = load %arg_0
     %6:vec3<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_a6a85a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_a6a85a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_a6a85a
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/a6b61d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/a6b61d.wgsl.expected.ir.msl
index a0e79fe..d3777d7 100644
--- a/test/tint/builtins/gen/var/textureLoad/a6b61d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/a6b61d.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_a6b61d = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_a6b61d = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<rgba32sint, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_a6b61d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_a6b61d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_a6b61d
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/a7444c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/a7444c.wgsl.expected.ir.msl
index f58055b..10a9447 100644
--- a/test/tint/builtins/gen/var/textureLoad/a7444c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/a7444c.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_a7444c = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_a7444c = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<rgba8uint, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_a7444c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_a7444c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_a7444c
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/a7a3c3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/a7a3c3.wgsl.expected.ir.msl
index b0127b2..fd6522a 100644
--- a/test/tint/builtins/gen/var/textureLoad/a7a3c3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/a7a3c3.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba16sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_a7a3c3 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_a7a3c3 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %5:texture_storage_3d<rgba16sint, read> = load %arg_0
     %6:vec3<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_a7a3c3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_a7a3c3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_a7a3c3
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/a7bcb4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/a7bcb4.wgsl.expected.ir.msl
index 0c2a284..6b85d93 100644
--- a/test/tint/builtins/gen/var/textureLoad/a7bcb4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/a7bcb4.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_a7bcb4 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_a7bcb4 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:texture_storage_1d<rgba8snorm, read_write> = load %arg_0
     %6:u32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_a7bcb4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_a7bcb4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_a7bcb4
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/a7c171.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/a7c171.wgsl.expected.ir.msl
index 1ed08a3..01c1c2d 100644
--- a/test/tint/builtins/gen/var/textureLoad/a7c171.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/a7c171.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba16sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_a7c171 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_a7c171 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %5:texture_storage_2d<rgba16sint, read_write> = load %arg_0
     %6:vec2<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_a7c171
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_a7c171
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_a7c171
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/a8549b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/a8549b.wgsl.expected.ir.msl
index 96fc788..492a6d8 100644
--- a/test/tint/builtins/gen/var/textureLoad/a8549b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/a8549b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_a8549b = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_a8549b = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %5:texture_storage_3d<rgba32float, read> = load %arg_0
     %6:vec3<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_a8549b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_a8549b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_a8549b
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/a92b18.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/a92b18.wgsl.expected.ir.msl
index 6ce27a3..4262762 100644
--- a/test/tint/builtins/gen/var/textureLoad/a92b18.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/a92b18.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_a92b18 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_a92b18 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<rgba32float, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_a92b18
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_a92b18
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_a92b18
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/a9a9f5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/a9a9f5.wgsl.expected.ir.msl
index 3138f39..25ac913 100644
--- a/test/tint/builtins/gen/var/textureLoad/a9a9f5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/a9a9f5.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_a9a9f5 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_a9a9f5 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_3d<u32> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_a9a9f5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_a9a9f5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_a9a9f5
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/aa2579.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/aa2579.wgsl.expected.ir.msl
index aa1291c..bd211b6 100644
--- a/test/tint/builtins/gen/var/textureLoad/aa2579.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/aa2579.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_aa2579 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_aa2579 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<rgba32uint, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_aa2579
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_aa2579
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_aa2579
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/aa6130.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/aa6130.wgsl.expected.ir.msl
index c4560ff..62ac9db 100644
--- a/test/tint/builtins/gen/var/textureLoad/aa6130.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/aa6130.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rg32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_aa6130 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_aa6130 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %5:texture_storage_2d<rg32sint, read_write> = load %arg_0
     %6:vec2<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_aa6130
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_aa6130
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_aa6130
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/aa8a0d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/aa8a0d.wgsl.expected.ir.msl
index 3447310..514d7c1 100644
--- a/test/tint/builtins/gen/var/textureLoad/aa8a0d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/aa8a0d.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba16uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_aa8a0d = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_aa8a0d = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %5:texture_storage_2d<rgba16uint, read> = load %arg_0
     %6:vec2<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_aa8a0d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_aa8a0d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_aa8a0d
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/aae7f6.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/aae7f6.wgsl.expected.ir.msl
index 7b4bff4..0fb1fa5 100644
--- a/test/tint/builtins/gen/var/textureLoad/aae7f6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/aae7f6.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_aae7f6 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_aae7f6 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<r32sint, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_aae7f6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_aae7f6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_aae7f6
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/aae9c3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/aae9c3.wgsl.expected.ir.msl
index f8e3164..83b9e49 100644
--- a/test/tint/builtins/gen/var/textureLoad/aae9c3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/aae9c3.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_aae9c3 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_aae9c3 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<rgba8snorm, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_aae9c3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_aae9c3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_aae9c3
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/ac64f7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/ac64f7.wgsl.expected.ir.msl
index 405b123..f491ce0 100644
--- a/test/tint/builtins/gen/var/textureLoad/ac64f7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/ac64f7.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<bgra8unorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_ac64f7 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_ac64f7 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<bgra8unorm, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_ac64f7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_ac64f7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_ac64f7
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/acf22f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/acf22f.wgsl.expected.ir.msl
index f38c7a5..2e623a5 100644
--- a/test/tint/builtins/gen/var/textureLoad/acf22f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/acf22f.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba16float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_acf22f = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_acf22f = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:texture_storage_1d<rgba16float, read_write> = load %arg_0
     %6:u32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_acf22f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_acf22f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_acf22f
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/ad551e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/ad551e.wgsl.expected.ir.msl
index 3254d65..1fb1bac 100644
--- a/test/tint/builtins/gen/var/textureLoad/ad551e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/ad551e.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<r32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_ad551e = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_ad551e = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:texture_storage_1d<r32uint, read_write> = load %arg_0
     %6:u32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_ad551e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_ad551e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_ad551e
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/aeae73.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/aeae73.wgsl.expected.ir.msl
index 0e91818..d7cf912 100644
--- a/test/tint/builtins/gen/var/textureLoad/aeae73.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/aeae73.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_aeae73 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_aeae73 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<r32uint, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_aeae73
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_aeae73
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_aeae73
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/aebc09.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/aebc09.wgsl.expected.ir.msl
index 68ebe7e..3e5635e 100644
--- a/test/tint/builtins/gen/var/textureLoad/aebc09.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/aebc09.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba16uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_aebc09 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_aebc09 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:texture_storage_1d<rgba16uint, read> = load %arg_0
     %6:u32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_aebc09
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_aebc09
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_aebc09
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/af0507.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/af0507.wgsl.expected.ir.msl
index 59a632b..500c8c4 100644
--- a/test/tint/builtins/gen/var/textureLoad/af0507.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/af0507.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_af0507 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_af0507 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<rg32float, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_af0507
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_af0507
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_af0507
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/b1bf79.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/b1bf79.wgsl.expected.ir.msl
index 2a09c66..55bbd47 100644
--- a/test/tint/builtins/gen/var/textureLoad/b1bf79.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/b1bf79.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_b1bf79 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_b1bf79 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %5:texture_storage_3d<rgba32sint, read> = load %arg_0
     %6:vec3<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_b1bf79
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_b1bf79
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_b1bf79
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/b1ca35.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/b1ca35.wgsl.expected.ir.msl
index 16fdfa3..29673be 100644
--- a/test/tint/builtins/gen/var/textureLoad/b1ca35.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/b1ca35.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_b1ca35 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_b1ca35 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<rg32sint, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_b1ca35
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_b1ca35
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_b1ca35
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/b24d27.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/b24d27.wgsl.expected.ir.msl
index 7028ab8..5ded4ff 100644
--- a/test/tint/builtins/gen/var/textureLoad/b24d27.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/b24d27.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_b24d27 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_b24d27 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %5:texture_storage_2d<rgba8sint, read> = load %arg_0
     %6:vec2<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_b24d27
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_b24d27
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_b24d27
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/b25644.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/b25644.wgsl.expected.ir.msl
index e4a426b..07190e1 100644
--- a/test/tint/builtins/gen/var/textureLoad/b25644.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/b25644.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_b25644 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_b25644 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<r32uint, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_b25644
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_b25644
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_b25644
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/b27c33.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/b27c33.wgsl.expected.ir.msl
index 7396c20..9f00df9 100644
--- a/test/tint/builtins/gen/var/textureLoad/b27c33.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/b27c33.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<r32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_b27c33 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_b27c33 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %5:texture_storage_3d<r32sint, read_write> = load %arg_0
     %6:vec3<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_b27c33
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_b27c33
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_b27c33
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/b29f71.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/b29f71.wgsl.expected.ir.msl
index 64733fa..d6c5a15 100644
--- a/test/tint/builtins/gen/var/textureLoad/b29f71.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/b29f71.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_b29f71 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_b29f71 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %arg_3:ptr<function, i32, read_write> = var, 1i
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureLoad_b29f71
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureLoad_b29f71
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureLoad_b29f71
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/b4d6c4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/b4d6c4.wgsl.expected.ir.msl
index a278b90..2a63f15 100644
--- a/test/tint/builtins/gen/var/textureLoad/b4d6c4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/b4d6c4.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rg32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_b4d6c4 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_b4d6c4 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %5:texture_storage_2d<rg32float, read_write> = load %arg_0
     %6:vec2<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_b4d6c4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_b4d6c4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_b4d6c4
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/b58c6d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/b58c6d.wgsl.expected.ir.msl
index f7acf18..4c63ed9 100644
--- a/test/tint/builtins/gen/var/textureLoad/b58c6d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/b58c6d.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_b58c6d = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_b58c6d = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<r32float, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_b58c6d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_b58c6d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_b58c6d
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/b60a86.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/b60a86.wgsl.expected.ir.msl
index e3eeedd..0fd499b 100644
--- a/test/tint/builtins/gen/var/textureLoad/b60a86.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/b60a86.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_b60a86 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_b60a86 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:texture_storage_1d<rgba32uint, read_write> = load %arg_0
     %6:i32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_b60a86
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_b60a86
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_b60a86
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/b60db7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/b60db7.wgsl.expected.ir.msl
index 2d57a9d..2bbf773 100644
--- a/test/tint/builtins/gen/var/textureLoad/b60db7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/b60db7.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_b60db7 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_b60db7 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<bgra8unorm, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_b60db7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_b60db7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_b60db7
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/b6ba5d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/b6ba5d.wgsl.expected.ir.msl
index bcb1f3f..9c1e62f 100644
--- a/test/tint/builtins/gen/var/textureLoad/b6ba5d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/b6ba5d.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_b6ba5d = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_b6ba5d = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %arg_3:ptr<function, i32, read_write> = var, 1i
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureLoad_b6ba5d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureLoad_b6ba5d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureLoad_b6ba5d
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/b6c458.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/b6c458.wgsl.expected.ir.msl
index f2a38f1..d574d5a 100644
--- a/test/tint/builtins/gen/var/textureLoad/b6c458.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/b6c458.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_b6c458 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_b6c458 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %5:texture_storage_2d<rgba32uint, read> = load %arg_0
     %6:vec2<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_b6c458
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_b6c458
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_b6c458
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/b73f6b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/b73f6b.wgsl.expected.ir.msl
index 8a91005..6bee101 100644
--- a/test/tint/builtins/gen/var/textureLoad/b73f6b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/b73f6b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_b73f6b = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_b73f6b = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_2d<u32> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_b73f6b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_b73f6b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_b73f6b
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/b75c8f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/b75c8f.wgsl.expected.ir.msl
index 5a60d4f..4d5f8d6 100644
--- a/test/tint/builtins/gen/var/textureLoad/b75c8f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/b75c8f.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<r32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_b75c8f = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_b75c8f = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %5:texture_storage_2d<r32sint, read_write> = load %arg_0
     %6:vec2<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_b75c8f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_b75c8f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_b75c8f
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/b75d4a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/b75d4a.wgsl.expected.ir.msl
index 9c84d58..2a38e81 100644
--- a/test/tint/builtins/gen/var/textureLoad/b75d4a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/b75d4a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_multisampled_2d<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_b75d4a = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_b75d4a = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_multisampled_2d<f32> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_b75d4a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_b75d4a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_b75d4a
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/b7f74f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/b7f74f.wgsl.expected.ir.msl
index 9f78a74..773975c 100644
--- a/test/tint/builtins/gen/var/textureLoad/b7f74f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/b7f74f.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<bgra8unorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_b7f74f = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_b7f74f = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:texture_storage_1d<bgra8unorm, read> = load %arg_0
     %6:u32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_b7f74f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_b7f74f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_b7f74f
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/b80e7e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/b80e7e.wgsl.expected.ir.msl
index acc979c..8460602 100644
--- a/test/tint/builtins/gen/var/textureLoad/b80e7e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/b80e7e.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_b80e7e = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_b80e7e = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<rgba16float, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_b80e7e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_b80e7e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_b80e7e
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/b94d15.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/b94d15.wgsl.expected.ir.msl
index d941dd5..ab28022 100644
--- a/test/tint/builtins/gen/var/textureLoad/b94d15.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/b94d15.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_b94d15 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_b94d15 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<rgba8uint, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_b94d15
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_b94d15
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_b94d15
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/ba023a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/ba023a.wgsl.expected.ir.msl
index f8c43a1..45263f4 100644
--- a/test/tint/builtins/gen/var/textureLoad/ba023a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/ba023a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_ba023a = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_ba023a = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<r32sint, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_ba023a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_ba023a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_ba023a
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/ba74b2.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/ba74b2.wgsl.expected.ir.msl
index 0b51e24..6343376 100644
--- a/test/tint/builtins/gen/var/textureLoad/ba74b2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/ba74b2.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_ba74b2 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_ba74b2 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<rgba32sint, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_ba74b2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_ba74b2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_ba74b2
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/babdf3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/babdf3.wgsl.expected.ir.msl
index 7aec5b3..6859935 100644
--- a/test/tint/builtins/gen/var/textureLoad/babdf3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/babdf3.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba16uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_babdf3 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_babdf3 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:texture_storage_1d<rgba16uint, read_write> = load %arg_0
     %6:u32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_babdf3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_babdf3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_babdf3
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/bba04a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/bba04a.wgsl.expected.ir.msl
index fe73bfe..54c5d35 100644
--- a/test/tint/builtins/gen/var/textureLoad/bba04a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/bba04a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rg32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_bba04a = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_bba04a = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:texture_storage_1d<rg32uint, read_write> = load %arg_0
     %6:u32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_bba04a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_bba04a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_bba04a
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/bbb762.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/bbb762.wgsl.expected.ir.msl
index 0a49fb9..e42cc5f 100644
--- a/test/tint/builtins/gen/var/textureLoad/bbb762.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/bbb762.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_bbb762 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_bbb762 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %5:texture_storage_2d<rgba32sint, read_write> = load %arg_0
     %6:vec2<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_bbb762
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_bbb762
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_bbb762
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/bc3201.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/bc3201.wgsl.expected.ir.msl
index fb1c320..f1ef492 100644
--- a/test/tint/builtins/gen/var/textureLoad/bc3201.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/bc3201.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_1d<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_bc3201 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_bc3201 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_1d<u32> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_bc3201
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_bc3201
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_bc3201
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/bc882d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/bc882d.wgsl.expected.ir.msl
new file mode 100644
index 0000000..23ed61d
--- /dev/null
+++ b/test/tint/builtins/gen/var/textureLoad/bc882d.wgsl.expected.ir.msl
@@ -0,0 +1,47 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_2d_array<r8unorm, read_write>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%textureLoad_bc882d = func():void {
+  $B2: {
+    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
+    %arg_2:ptr<function, i32, read_write> = var, 1i
+    %6:texture_storage_2d_array<r8unorm, read_write> = load %arg_0
+    %7:vec2<u32> = load %arg_1
+    %8:i32 = load %arg_2
+    %9:vec4<f32> = textureLoad %6, %7, %8
+    %res:ptr<function, vec4<f32>, read_write> = var, %9
+    %11:vec4<f32> = load %res
+    store %prevent_dce, %11
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %13:void = call %textureLoad_bc882d
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %15:void = call %textureLoad_bc882d
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %17:void = call %textureLoad_bc882d
+    ret
+  }
+}
+
+invalid access control for storage texture
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/textureLoad/bcbb3c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/bcbb3c.wgsl.expected.ir.msl
index 13daa15..1aab06f 100644
--- a/test/tint/builtins/gen/var/textureLoad/bcbb3c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/bcbb3c.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_bcbb3c = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_bcbb3c = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_3d<f32> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_bcbb3c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_bcbb3c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_bcbb3c
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/bd990a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/bd990a.wgsl.expected.ir.msl
index 4053e83..69af03a 100644
--- a/test/tint/builtins/gen/var/textureLoad/bd990a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/bd990a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_bd990a = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_bd990a = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<rgba8uint, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_bd990a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_bd990a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_bd990a
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/bdc67a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/bdc67a.wgsl.expected.ir.msl
index 44b925c..eaabb36 100644
--- a/test/tint/builtins/gen/var/textureLoad/bdc67a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/bdc67a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_bdc67a = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_bdc67a = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<rg32float, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_bdc67a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_bdc67a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_bdc67a
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/bfd154.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/bfd154.wgsl.expected.ir.msl
index 6bcbe8a..25f57b2 100644
--- a/test/tint/builtins/gen/var/textureLoad/bfd154.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/bfd154.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<r32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_bfd154 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_bfd154 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %5:texture_storage_3d<r32uint, read> = load %arg_0
     %6:vec3<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_bfd154
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_bfd154
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_bfd154
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/c02b74.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/c02b74.wgsl.expected.ir.msl
index 4ddf1cd..54adc0e 100644
--- a/test/tint/builtins/gen/var/textureLoad/c02b74.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/c02b74.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba16float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_c02b74 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_c02b74 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:texture_storage_1d<rgba16float, read> = load %arg_0
     %6:i32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_c02b74
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_c02b74
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_c02b74
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/c07013.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/c07013.wgsl.expected.ir.msl
index def6560..1df9d3b 100644
--- a/test/tint/builtins/gen/var/textureLoad/c07013.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/c07013.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<r32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_c07013 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_c07013 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %5:texture_storage_2d<r32float, read> = load %arg_0
     %6:vec2<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_c07013
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_c07013
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_c07013
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/c16e00.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/c16e00.wgsl.expected.ir.msl
index 22267ad..e227263 100644
--- a/test/tint/builtins/gen/var/textureLoad/c16e00.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/c16e00.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_c16e00 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_c16e00 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %arg_3:ptr<function, i32, read_write> = var, 1i
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureLoad_c16e00
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureLoad_c16e00
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureLoad_c16e00
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/c21b33.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/c21b33.wgsl.expected.ir.msl
index 997ce95..101bb89 100644
--- a/test/tint/builtins/gen/var/textureLoad/c21b33.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/c21b33.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_c21b33 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_c21b33 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<rgba32uint, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_c21b33
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_c21b33
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_c21b33
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/c2a480.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/c2a480.wgsl.expected.ir.msl
index 1f920e4..7740f66 100644
--- a/test/tint/builtins/gen/var/textureLoad/c2a480.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/c2a480.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_c2a480 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_c2a480 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_2d<i32> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_c2a480
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_c2a480
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_c2a480
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/c2d09a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/c2d09a.wgsl.expected.ir.msl
index c44cb52..b95ee4f 100644
--- a/test/tint/builtins/gen/var/textureLoad/c2d09a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/c2d09a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_c2d09a = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_c2d09a = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<r32uint, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_c2d09a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_c2d09a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_c2d09a
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/c378ee.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/c378ee.wgsl.expected.ir.msl
index 706fd7f..31eafe6 100644
--- a/test/tint/builtins/gen/var/textureLoad/c378ee.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/c378ee.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_multisampled_2d<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_c378ee = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_c378ee = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_multisampled_2d<u32> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_c378ee
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_c378ee
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_c378ee
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/c40dcb.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/c40dcb.wgsl.expected.ir.msl
index b6d2251..ea46d64 100644
--- a/test/tint/builtins/gen/var/textureLoad/c40dcb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/c40dcb.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_c40dcb = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_c40dcb = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<rgba32uint, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_c40dcb
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_c40dcb
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_c40dcb
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/c456bc.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/c456bc.wgsl.expected.ir.msl
index 088c69d..7634a64 100644
--- a/test/tint/builtins/gen/var/textureLoad/c456bc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/c456bc.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<r32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_c456bc = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_c456bc = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %5:texture_storage_3d<r32float, read> = load %arg_0
     %6:vec3<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_c456bc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_c456bc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_c456bc
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/c5791b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/c5791b.wgsl.expected.ir.msl
index 3add21c..20e4a6c 100644
--- a/test/tint/builtins/gen/var/textureLoad/c5791b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/c5791b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba16sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_c5791b = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_c5791b = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %5:texture_storage_2d<rgba16sint, read> = load %arg_0
     %6:vec2<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_c5791b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_c5791b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_c5791b
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/c5c86d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/c5c86d.wgsl.expected.ir.msl
index 8a6e9b4..49fbf15 100644
--- a/test/tint/builtins/gen/var/textureLoad/c5c86d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/c5c86d.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_c5c86d = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_c5c86d = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<rgba16sint, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_c5c86d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_c5c86d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_c5c86d
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/c66b20.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/c66b20.wgsl.expected.ir.msl
index e5f1d3e..fad3f79 100644
--- a/test/tint/builtins/gen/var/textureLoad/c66b20.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/c66b20.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<r32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_c66b20 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_c66b20 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %5:texture_storage_2d<r32sint, read> = load %arg_0
     %6:vec2<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_c66b20
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_c66b20
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_c66b20
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/c7cbed.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/c7cbed.wgsl.expected.ir.msl
index 8ecc3e4..b2ec05b 100644
--- a/test/tint/builtins/gen/var/textureLoad/c7cbed.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/c7cbed.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<r32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_c7cbed = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_c7cbed = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:texture_storage_1d<r32float, read> = load %arg_0
     %6:i32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_c7cbed
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_c7cbed
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_c7cbed
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/c7e313.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/c7e313.wgsl.expected.ir.msl
index fac7b08..eabe65c 100644
--- a/test/tint/builtins/gen/var/textureLoad/c7e313.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/c7e313.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_c7e313 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_c7e313 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %5:texture_storage_2d<rgba32uint, read_write> = load %arg_0
     %6:vec2<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_c7e313
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_c7e313
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_c7e313
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/c80691.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/c80691.wgsl.expected.ir.msl
index f6327e8..479441c 100644
--- a/test/tint/builtins/gen/var/textureLoad/c80691.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/c80691.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<r32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_c80691 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_c80691 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:texture_storage_1d<r32sint, read_write> = load %arg_0
     %6:u32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_c80691
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_c80691
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_c80691
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/c8ed19.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/c8ed19.wgsl.expected.ir.msl
index 572c189..6a6cf44 100644
--- a/test/tint/builtins/gen/var/textureLoad/c8ed19.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/c8ed19.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_c8ed19 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_c8ed19 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<rg32uint, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_c8ed19
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_c8ed19
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_c8ed19
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/c98bf4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/c98bf4.wgsl.expected.ir.msl
index 81ec0d1..9d4020f 100644
--- a/test/tint/builtins/gen/var/textureLoad/c98bf4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/c98bf4.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_c98bf4 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_c98bf4 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %5:texture_storage_3d<rgba8snorm, read_write> = load %arg_0
     %6:vec3<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_c98bf4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_c98bf4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_c98bf4
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/c9b083.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/c9b083.wgsl.expected.ir.msl
index dcc662b..aedda19 100644
--- a/test/tint/builtins/gen/var/textureLoad/c9b083.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/c9b083.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_c9b083 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_c9b083 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<rgba16sint, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_c9b083
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_c9b083
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_c9b083
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/c9cc40.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/c9cc40.wgsl.expected.ir.msl
index 26def5c..5ca9499 100644
--- a/test/tint/builtins/gen/var/textureLoad/c9cc40.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/c9cc40.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_c9cc40 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_c9cc40 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:texture_storage_1d<rgba8sint, read> = load %arg_0
     %6:i32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_c9cc40
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_c9cc40
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_c9cc40
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/c9f310.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/c9f310.wgsl.expected.ir.msl
index e682956..07f6707 100644
--- a/test/tint/builtins/gen/var/textureLoad/c9f310.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/c9f310.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<r32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_c9f310 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_c9f310 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:texture_storage_1d<r32sint, read_write> = load %arg_0
     %6:i32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_c9f310
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_c9f310
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_c9f310
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/cac876.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/cac876.wgsl.expected.ir.msl
index 5ea7fe5..559f6ce 100644
--- a/test/tint/builtins/gen/var/textureLoad/cac876.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/cac876.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_cac876 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_cac876 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:texture_storage_1d<rgba32sint, read_write> = load %arg_0
     %6:u32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_cac876
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_cac876
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_cac876
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/cad5f2.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/cad5f2.wgsl.expected.ir.msl
index de55b70..113adbf 100644
--- a/test/tint/builtins/gen/var/textureLoad/cad5f2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/cad5f2.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_multisampled_2d<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_cad5f2 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_cad5f2 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_multisampled_2d<u32> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_cad5f2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_cad5f2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_cad5f2
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/cb57c2.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/cb57c2.wgsl.expected.ir.msl
index 58b69cb..cdb18f3 100644
--- a/test/tint/builtins/gen/var/textureLoad/cb57c2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/cb57c2.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_cb57c2 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_cb57c2 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %arg_3:ptr<function, i32, read_write> = var, 1i
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureLoad_cb57c2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureLoad_cb57c2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureLoad_cb57c2
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/cdbcf6.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/cdbcf6.wgsl.expected.ir.msl
index 41b3a1a..5362734 100644
--- a/test/tint/builtins/gen/var/textureLoad/cdbcf6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/cdbcf6.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_cdbcf6 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_cdbcf6 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<rgba8snorm, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_cdbcf6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_cdbcf6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_cdbcf6
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/cdccd2.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/cdccd2.wgsl.expected.ir.msl
index 65711bf..1457bd5 100644
--- a/test/tint/builtins/gen/var/textureLoad/cdccd2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/cdccd2.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_cdccd2 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_cdccd2 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<rg32uint, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_cdccd2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_cdccd2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_cdccd2
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/cdd343.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/cdd343.wgsl.expected.ir.msl
index c05f8c7..d4c19e4 100644
--- a/test/tint/builtins/gen/var/textureLoad/cdd343.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/cdd343.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_cdd343 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_cdd343 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<rgba32uint, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_cdd343
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_cdd343
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_cdd343
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/cddf6b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/cddf6b.wgsl.expected.ir.msl
index 12debc0..75b807c 100644
--- a/test/tint/builtins/gen/var/textureLoad/cddf6b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/cddf6b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_cddf6b = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_cddf6b = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %5:texture_storage_2d<rgba8unorm, read_write> = load %arg_0
     %6:vec2<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_cddf6b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_cddf6b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_cddf6b
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/cec477.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/cec477.wgsl.expected.ir.msl
index 271891a..4fcff4c 100644
--- a/test/tint/builtins/gen/var/textureLoad/cec477.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/cec477.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<r32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_cec477 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_cec477 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %5:texture_storage_3d<r32sint, read_write> = load %arg_0
     %6:vec3<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_cec477
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_cec477
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_cec477
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/cece6c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/cece6c.wgsl.expected.ir.msl
new file mode 100644
index 0000000..bf7321d
--- /dev/null
+++ b/test/tint/builtins/gen/var/textureLoad/cece6c.wgsl.expected.ir.msl
@@ -0,0 +1,45 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_3d<r8unorm, read>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%textureLoad_cece6c = func():void {
+  $B2: {
+    %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
+    %5:texture_storage_3d<r8unorm, read> = load %arg_0
+    %6:vec3<i32> = load %arg_1
+    %7:vec4<f32> = textureLoad %5, %6
+    %res:ptr<function, vec4<f32>, read_write> = var, %7
+    %9:vec4<f32> = load %res
+    store %prevent_dce, %9
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %11:void = call %textureLoad_cece6c
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %13:void = call %textureLoad_cece6c
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %15:void = call %textureLoad_cece6c
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/textureLoad/d02afc.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/d02afc.wgsl.expected.ir.msl
index 585d862..48435c2 100644
--- a/test/tint/builtins/gen/var/textureLoad/d02afc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/d02afc.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_d02afc = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_d02afc = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %5:texture_storage_3d<rgba32sint, read> = load %arg_0
     %6:vec3<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_d02afc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_d02afc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_d02afc
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/d0e351.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/d0e351.wgsl.expected.ir.msl
index bc3c307..aea3df2 100644
--- a/test/tint/builtins/gen/var/textureLoad/d0e351.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/d0e351.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_d0e351 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_d0e351 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<rg32uint, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_d0e351
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_d0e351
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_d0e351
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/d357bb.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/d357bb.wgsl.expected.ir.msl
index 1aa4a8c..686e9fd 100644
--- a/test/tint/builtins/gen/var/textureLoad/d357bb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/d357bb.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<bgra8unorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_d357bb = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_d357bb = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:texture_storage_1d<bgra8unorm, read> = load %arg_0
     %6:i32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_d357bb
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_d357bb
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_d357bb
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/d37a08.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/d37a08.wgsl.expected.ir.msl
index 3591fe0..27fa1fc 100644
--- a/test/tint/builtins/gen/var/textureLoad/d37a08.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/d37a08.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_d37a08 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_d37a08 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<rgba8uint, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_d37a08
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_d37a08
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_d37a08
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/d3d8fc.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/d3d8fc.wgsl.expected.ir.msl
index df4aa1c..d60134e 100644
--- a/test/tint/builtins/gen/var/textureLoad/d3d8fc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/d3d8fc.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_d3d8fc = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_d3d8fc = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<rgba16sint, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_d3d8fc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_d3d8fc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_d3d8fc
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/d41c72.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/d41c72.wgsl.expected.ir.msl
index 2b66488..506b6c2 100644
--- a/test/tint/builtins/gen/var/textureLoad/d41c72.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/d41c72.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rg32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_d41c72 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_d41c72 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %5:texture_storage_3d<rg32sint, read_write> = load %arg_0
     %6:vec3<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_d41c72
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_d41c72
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_d41c72
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/d4df19.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/d4df19.wgsl.expected.ir.msl
index e722502..c28b1a9 100644
--- a/test/tint/builtins/gen/var/textureLoad/d4df19.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/d4df19.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<r32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_d4df19 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_d4df19 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %5:texture_storage_2d<r32uint, read> = load %arg_0
     %6:vec2<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_d4df19
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_d4df19
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_d4df19
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/d5c48d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/d5c48d.wgsl.expected.ir.msl
index df99495..808f810 100644
--- a/test/tint/builtins/gen/var/textureLoad/d5c48d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/d5c48d.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_d5c48d = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_d5c48d = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %5:texture_storage_2d<rgba32float, read> = load %arg_0
     %6:vec2<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_d5c48d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_d5c48d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_d5c48d
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/d72de9.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/d72de9.wgsl.expected.ir.msl
index 2a1d180..c1d3360 100644
--- a/test/tint/builtins/gen/var/textureLoad/d72de9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/d72de9.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_d72de9 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_d72de9 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %5:texture_storage_2d<rgba8sint, read_write> = load %arg_0
     %6:vec2<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_d72de9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_d72de9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_d72de9
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/d7996a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/d7996a.wgsl.expected.ir.msl
index 33325ce..cd015fb 100644
--- a/test/tint/builtins/gen/var/textureLoad/d7996a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/d7996a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_d7996a = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_d7996a = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %5:texture_storage_3d<rgba32sint, read_write> = load %arg_0
     %6:vec3<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_d7996a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_d7996a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_d7996a
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/d79c5c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/d79c5c.wgsl.expected.ir.msl
index 306d38a..78179ba 100644
--- a/test/tint/builtins/gen/var/textureLoad/d79c5c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/d79c5c.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba16uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_d79c5c = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_d79c5c = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:texture_storage_1d<rgba16uint, read_write> = load %arg_0
     %6:i32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_d79c5c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_d79c5c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_d79c5c
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/d80ff3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/d80ff3.wgsl.expected.ir.msl
index 282ae15..f87db72 100644
--- a/test/tint/builtins/gen/var/textureLoad/d80ff3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/d80ff3.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_d80ff3 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_d80ff3 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:texture_storage_1d<bgra8unorm, read_write> = load %arg_0
     %6:i32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_d80ff3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_d80ff3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_d80ff3
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/d81c57.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/d81c57.wgsl.expected.ir.msl
index c7980ab..27f3156 100644
--- a/test/tint/builtins/gen/var/textureLoad/d81c57.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/d81c57.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rg32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_d81c57 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_d81c57 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:texture_storage_1d<rg32float, read> = load %arg_0
     %6:i32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_d81c57
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_d81c57
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_d81c57
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/d85d61.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/d85d61.wgsl.expected.ir.msl
index 5538821..fa8e6d4 100644
--- a/test/tint/builtins/gen/var/textureLoad/d85d61.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/d85d61.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_d85d61 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_d85d61 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %5:texture_storage_2d<rgba32uint, read> = load %arg_0
     %6:vec2<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_d85d61
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_d85d61
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_d85d61
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/d8617f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/d8617f.wgsl.expected.ir.msl
index 2d4ca31..1d9e51f 100644
--- a/test/tint/builtins/gen/var/textureLoad/d8617f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/d8617f.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_d8617f = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_d8617f = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<rg32sint, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_d8617f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_d8617f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_d8617f
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/d8be5a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/d8be5a.wgsl.expected.ir.msl
index d68fce5..485bfca 100644
--- a/test/tint/builtins/gen/var/textureLoad/d8be5a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/d8be5a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba16sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_d8be5a = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_d8be5a = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:texture_storage_1d<rgba16sint, read_write> = load %arg_0
     %6:i32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_d8be5a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_d8be5a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_d8be5a
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/d91f37.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/d91f37.wgsl.expected.ir.msl
index 2e644d2..962c4ae 100644
--- a/test/tint/builtins/gen/var/textureLoad/d91f37.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/d91f37.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_d91f37 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_d91f37 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<rgba8unorm, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_d91f37
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_d91f37
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_d91f37
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/dab04f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/dab04f.wgsl.expected.ir.msl
index 6a2e0ea..6c4e9b7 100644
--- a/test/tint/builtins/gen/var/textureLoad/dab04f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/dab04f.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_dab04f = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_dab04f = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<bgra8unorm, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_dab04f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_dab04f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_dab04f
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/dbd554.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/dbd554.wgsl.expected.ir.msl
index b38d29a..fce81ec 100644
--- a/test/tint/builtins/gen/var/textureLoad/dbd554.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/dbd554.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_dbd554 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_dbd554 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %5:texture_storage_2d<rgba32sint, read> = load %arg_0
     %6:vec2<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_dbd554
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_dbd554
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_dbd554
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/dd5859.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/dd5859.wgsl.expected.ir.msl
index eae7e46..9e694b4 100644
--- a/test/tint/builtins/gen/var/textureLoad/dd5859.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/dd5859.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_dd5859 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_dd5859 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<rgba16float, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_dd5859
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_dd5859
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_dd5859
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/dd8776.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/dd8776.wgsl.expected.ir.msl
index c55d7bc..7a702b8 100644
--- a/test/tint/builtins/gen/var/textureLoad/dd8776.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/dd8776.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_dd8776 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_dd8776 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<rg32float, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_dd8776
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_dd8776
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_dd8776
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/ddeed3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/ddeed3.wgsl.expected.ir.msl
index 8984247..6fd3ed8 100644
--- a/test/tint/builtins/gen/var/textureLoad/ddeed3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/ddeed3.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_ddeed3 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_ddeed3 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:texture_storage_1d<rgba32sint, read> = load %arg_0
     %6:i32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_ddeed3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_ddeed3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_ddeed3
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/de5a0e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/de5a0e.wgsl.expected.ir.msl
index 57148d0..b51169f 100644
--- a/test/tint/builtins/gen/var/textureLoad/de5a0e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/de5a0e.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_de5a0e = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_de5a0e = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<rgba8sint, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_de5a0e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_de5a0e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_de5a0e
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/dee8e7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/dee8e7.wgsl.expected.ir.msl
index 78b7bbe..f387280 100644
--- a/test/tint/builtins/gen/var/textureLoad/dee8e7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/dee8e7.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_dee8e7 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_dee8e7 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %5:texture_storage_2d<rgba8sint, read> = load %arg_0
     %6:vec2<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_dee8e7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_dee8e7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_dee8e7
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/defd9a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/defd9a.wgsl.expected.ir.msl
index f133328..caa579a 100644
--- a/test/tint/builtins/gen/var/textureLoad/defd9a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/defd9a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rg32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_defd9a = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_defd9a = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %5:texture_storage_2d<rg32float, read_write> = load %arg_0
     %6:vec2<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_defd9a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_defd9a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_defd9a
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/dfdf3b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/dfdf3b.wgsl.expected.ir.msl
index 328f9b3..03f3405 100644
--- a/test/tint/builtins/gen/var/textureLoad/dfdf3b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/dfdf3b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_dfdf3b = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_dfdf3b = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<rgba8sint, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_dfdf3b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_dfdf3b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_dfdf3b
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/e1c3cf.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/e1c3cf.wgsl.expected.ir.msl
index f2e6232..ef26697 100644
--- a/test/tint/builtins/gen/var/textureLoad/e1c3cf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/e1c3cf.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba16float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_e1c3cf = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_e1c3cf = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %5:texture_storage_2d<rgba16float, read_write> = load %arg_0
     %6:vec2<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_e1c3cf
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_e1c3cf
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_e1c3cf
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/e2292f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/e2292f.wgsl.expected.ir.msl
index 9b69191..5573478 100644
--- a/test/tint/builtins/gen/var/textureLoad/e2292f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/e2292f.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<r32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_e2292f = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_e2292f = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:texture_storage_1d<r32sint, read> = load %arg_0
     %6:u32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_e2292f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_e2292f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_e2292f
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/e2b3a1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/e2b3a1.wgsl.expected.ir.msl
index d792efd..fa62d98 100644
--- a/test/tint/builtins/gen/var/textureLoad/e2b3a1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/e2b3a1.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_e2b3a1 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_e2b3a1 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<rg32sint, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_e2b3a1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_e2b3a1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_e2b3a1
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/e2d7da.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/e2d7da.wgsl.expected.ir.msl
index 83ae5e4..9e4dd89 100644
--- a/test/tint/builtins/gen/var/textureLoad/e2d7da.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/e2d7da.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_e2d7da = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_e2d7da = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<rgba16float, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_e2d7da
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_e2d7da
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_e2d7da
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/e33285.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/e33285.wgsl.expected.ir.msl
index 88ecbb0..e700e9d 100644
--- a/test/tint/builtins/gen/var/textureLoad/e33285.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/e33285.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba16sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_e33285 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_e33285 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %5:texture_storage_2d<rgba16sint, read_write> = load %arg_0
     %6:vec2<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_e33285
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_e33285
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_e33285
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/e35f72.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/e35f72.wgsl.expected.ir.msl
index af8caf8..e2865b4 100644
--- a/test/tint/builtins/gen/var/textureLoad/e35f72.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/e35f72.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_e35f72 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_e35f72 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_3d<i32> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_e35f72
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_e35f72
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_e35f72
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/e3b08b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/e3b08b.wgsl.expected.ir.msl
index c809f33..4bc276f 100644
--- a/test/tint/builtins/gen/var/textureLoad/e3b08b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/e3b08b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<r32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_e3b08b = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_e3b08b = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %5:texture_storage_3d<r32float, read> = load %arg_0
     %6:vec3<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_e3b08b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_e3b08b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_e3b08b
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/e3d2cc.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/e3d2cc.wgsl.expected.ir.msl
index ffbf55a..401481a 100644
--- a/test/tint/builtins/gen/var/textureLoad/e3d2cc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/e3d2cc.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_multisampled_2d<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_e3d2cc = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_e3d2cc = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_multisampled_2d<i32> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_e3d2cc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_e3d2cc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_e3d2cc
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/e4051a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/e4051a.wgsl.expected.ir.msl
new file mode 100644
index 0000000..8ae583b
--- /dev/null
+++ b/test/tint/builtins/gen/var/textureLoad/e4051a.wgsl.expected.ir.msl
@@ -0,0 +1,45 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_2d<r8unorm, read_write>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%textureLoad_e4051a = func():void {
+  $B2: {
+    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
+    %5:texture_storage_2d<r8unorm, read_write> = load %arg_0
+    %6:vec2<u32> = load %arg_1
+    %7:vec4<f32> = textureLoad %5, %6
+    %res:ptr<function, vec4<f32>, read_write> = var, %7
+    %9:vec4<f32> = load %res
+    store %prevent_dce, %9
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %11:void = call %textureLoad_e4051a
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %13:void = call %textureLoad_e4051a
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %15:void = call %textureLoad_e4051a
+    ret
+  }
+}
+
+invalid access control for storage texture
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/textureLoad/e57e92.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/e57e92.wgsl.expected.ir.msl
index 3e0c217..048eb9c 100644
--- a/test/tint/builtins/gen/var/textureLoad/e57e92.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/e57e92.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<bgra8unorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_e57e92 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_e57e92 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<bgra8unorm, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_e57e92
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_e57e92
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_e57e92
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/e59fdf.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/e59fdf.wgsl.expected.ir.msl
index f8c053e..a5ed438 100644
--- a/test/tint/builtins/gen/var/textureLoad/e59fdf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/e59fdf.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rg32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_e59fdf = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_e59fdf = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %5:texture_storage_3d<rg32uint, read> = load %arg_0
     %6:vec3<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_e59fdf
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_e59fdf
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_e59fdf
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/e65916.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/e65916.wgsl.expected.ir.msl
index b1c5333..234d806 100644
--- a/test/tint/builtins/gen/var/textureLoad/e65916.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/e65916.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rg32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_e65916 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_e65916 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %5:texture_storage_3d<rg32sint, read> = load %arg_0
     %6:vec3<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_e65916
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_e65916
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_e65916
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/e893d7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/e893d7.wgsl.expected.ir.msl
index d37d708..bfdda0a 100644
--- a/test/tint/builtins/gen/var/textureLoad/e893d7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/e893d7.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba16float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_e893d7 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_e893d7 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %5:texture_storage_2d<rgba16float, read> = load %arg_0
     %6:vec2<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_e893d7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_e893d7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_e893d7
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/e92dd0.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/e92dd0.wgsl.expected.ir.msl
index a1f0c02..a892000 100644
--- a/test/tint/builtins/gen/var/textureLoad/e92dd0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/e92dd0.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8unorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_e92dd0 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_e92dd0 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:texture_storage_1d<rgba8unorm, read> = load %arg_0
     %6:u32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_e92dd0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_e92dd0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_e92dd0
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/e9eb65.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/e9eb65.wgsl.expected.ir.msl
index cae4ac1..472db5b 100644
--- a/test/tint/builtins/gen/var/textureLoad/e9eb65.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/e9eb65.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_e9eb65 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_e9eb65 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<rgba16uint, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_e9eb65
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_e9eb65
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_e9eb65
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/ea2abd.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/ea2abd.wgsl.expected.ir.msl
index da01092..c2670fc 100644
--- a/test/tint/builtins/gen/var/textureLoad/ea2abd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/ea2abd.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_ea2abd = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_ea2abd = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %5:texture_storage_2d<rgba32float, read> = load %arg_0
     %6:vec2<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_ea2abd
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_ea2abd
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_ea2abd
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/eb573b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/eb573b.wgsl.expected.ir.msl
index d7e02e6..e7347a7 100644
--- a/test/tint/builtins/gen/var/textureLoad/eb573b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/eb573b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<r32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_eb573b = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_eb573b = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %5:texture_storage_2d<r32sint, read> = load %arg_0
     %6:vec2<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_eb573b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_eb573b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_eb573b
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/ebfb92.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/ebfb92.wgsl.expected.ir.msl
index 9705d67..cf516cb 100644
--- a/test/tint/builtins/gen/var/textureLoad/ebfb92.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/ebfb92.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_ebfb92 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_ebfb92 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_2d<u32> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_ebfb92
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_ebfb92
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_ebfb92
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/ecc823.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/ecc823.wgsl.expected.ir.msl
index 4a7221d..c849d86 100644
--- a/test/tint/builtins/gen/var/textureLoad/ecc823.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/ecc823.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba16uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_ecc823 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_ecc823 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %5:texture_storage_2d<rgba16uint, read> = load %arg_0
     %6:vec2<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_ecc823
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_ecc823
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_ecc823
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/ed55a8.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/ed55a8.wgsl.expected.ir.msl
index 2e58223..2385f1d 100644
--- a/test/tint/builtins/gen/var/textureLoad/ed55a8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/ed55a8.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_ed55a8 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_ed55a8 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<rg32sint, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_ed55a8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_ed55a8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_ed55a8
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/ee33c5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/ee33c5.wgsl.expected.ir.msl
index 0a3fc33..0957634 100644
--- a/test/tint/builtins/gen/var/textureLoad/ee33c5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/ee33c5.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba16sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_ee33c5 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_ee33c5 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %5:texture_storage_3d<rgba16sint, read> = load %arg_0
     %6:vec3<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_ee33c5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_ee33c5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_ee33c5
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/eecf7d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/eecf7d.wgsl.expected.ir.msl
index 3dd69e5..c98de05 100644
--- a/test/tint/builtins/gen/var/textureLoad/eecf7d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/eecf7d.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_eecf7d = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_eecf7d = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<rg32uint, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_eecf7d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_eecf7d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_eecf7d
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/ef2ec3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/ef2ec3.wgsl.expected.ir.msl
index 1dc2e04..b706fca 100644
--- a/test/tint/builtins/gen/var/textureLoad/ef2ec3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/ef2ec3.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rg32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_ef2ec3 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_ef2ec3 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:texture_storage_1d<rg32sint, read_write> = load %arg_0
     %6:u32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_ef2ec3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_ef2ec3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_ef2ec3
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/ef5405.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/ef5405.wgsl.expected.ir.msl
index a4e2e80..bfedc28 100644
--- a/test/tint/builtins/gen/var/textureLoad/ef5405.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/ef5405.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rg32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_ef5405 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_ef5405 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %5:texture_storage_3d<rg32uint, read> = load %arg_0
     %6:vec3<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_ef5405
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_ef5405
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_ef5405
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/efa787.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/efa787.wgsl.expected.ir.msl
index 3322251..72c600f 100644
--- a/test/tint/builtins/gen/var/textureLoad/efa787.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/efa787.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8unorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_efa787 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_efa787 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<rgba8unorm, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_efa787
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_efa787
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_efa787
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/f0514a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/f0514a.wgsl.expected.ir.msl
index e15bbed..c72eb33 100644
--- a/test/tint/builtins/gen/var/textureLoad/f0514a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/f0514a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_f0514a = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_f0514a = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:texture_storage_1d<rgba32float, read_write> = load %arg_0
     %6:i32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_f0514a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_f0514a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_f0514a
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/f06b69.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/f06b69.wgsl.expected.ir.msl
index f441c22..d13fdab 100644
--- a/test/tint/builtins/gen/var/textureLoad/f06b69.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/f06b69.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<r32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_f06b69 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_f06b69 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:texture_storage_1d<r32sint, read> = load %arg_0
     %6:i32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_f06b69
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_f06b69
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_f06b69
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/f0abad.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/f0abad.wgsl.expected.ir.msl
index da1eef3..ff4e4bb 100644
--- a/test/tint/builtins/gen/var/textureLoad/f0abad.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/f0abad.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_multisampled_2d<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_f0abad = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_f0abad = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_multisampled_2d<f32> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_f0abad
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_f0abad
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_f0abad
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/f1c549.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/f1c549.wgsl.expected.ir.msl
index 89ce434..ff63ef5 100644
--- a/test/tint/builtins/gen/var/textureLoad/f1c549.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/f1c549.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<r32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_f1c549 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_f1c549 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %5:texture_storage_3d<r32float, read_write> = load %arg_0
     %6:vec3<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_f1c549
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_f1c549
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_f1c549
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/f2a7ff.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/f2a7ff.wgsl.expected.ir.msl
index 2d7c04e..96a5ccb 100644
--- a/test/tint/builtins/gen/var/textureLoad/f2a7ff.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/f2a7ff.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8unorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_f2a7ff = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_f2a7ff = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %5:texture_storage_2d<rgba8unorm, read> = load %arg_0
     %6:vec2<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_f2a7ff
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_f2a7ff
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_f2a7ff
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/f2bdd4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/f2bdd4.wgsl.expected.ir.msl
new file mode 100644
index 0000000..1d01b14
--- /dev/null
+++ b/test/tint/builtins/gen/var/textureLoad/f2bdd4.wgsl.expected.ir.msl
@@ -0,0 +1,47 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_2d_array<r8unorm, read_write>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%textureLoad_f2bdd4 = func():void {
+  $B2: {
+    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
+    %arg_2:ptr<function, u32, read_write> = var, 1u
+    %6:texture_storage_2d_array<r8unorm, read_write> = load %arg_0
+    %7:vec2<u32> = load %arg_1
+    %8:u32 = load %arg_2
+    %9:vec4<f32> = textureLoad %6, %7, %8
+    %res:ptr<function, vec4<f32>, read_write> = var, %9
+    %11:vec4<f32> = load %res
+    store %prevent_dce, %11
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %13:void = call %textureLoad_f2bdd4
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %15:void = call %textureLoad_f2bdd4
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %17:void = call %textureLoad_f2bdd4
+    ret
+  }
+}
+
+invalid access control for storage texture
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/textureLoad/f2c311.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/f2c311.wgsl.expected.ir.msl
index 27dac46..07381d1 100644
--- a/test/tint/builtins/gen/var/textureLoad/f2c311.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/f2c311.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_f2c311 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_f2c311 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<rgba8sint, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_f2c311
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_f2c311
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_f2c311
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/f348d9.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/f348d9.wgsl.expected.ir.msl
index 5cb50ac..8493181 100644
--- a/test/tint/builtins/gen/var/textureLoad/f348d9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/f348d9.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_f348d9 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_f348d9 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %arg_3:ptr<function, i32, read_write> = var, 1i
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureLoad_f348d9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureLoad_f348d9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureLoad_f348d9
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/f35ac7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/f35ac7.wgsl.expected.ir.msl
index ebc161f..87d6a3a 100644
--- a/test/tint/builtins/gen/var/textureLoad/f35ac7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/f35ac7.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_f35ac7 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_f35ac7 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:texture_storage_1d<rgba8sint, read> = load %arg_0
     %6:u32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_f35ac7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_f35ac7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_f35ac7
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/f379e2.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/f379e2.wgsl.expected.ir.msl
index b06414c..d44374f 100644
--- a/test/tint/builtins/gen/var/textureLoad/f379e2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/f379e2.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8unorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_f379e2 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_f379e2 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<rgba8unorm, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_f379e2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_f379e2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_f379e2
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/f56e6f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/f56e6f.wgsl.expected.ir.msl
index 5cf32a9..bb5a4f4 100644
--- a/test/tint/builtins/gen/var/textureLoad/f56e6f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/f56e6f.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba16uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_f56e6f = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_f56e6f = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %5:texture_storage_3d<rgba16uint, read> = load %arg_0
     %6:vec3<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_f56e6f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_f56e6f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_f56e6f
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/f5aee2.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/f5aee2.wgsl.expected.ir.msl
new file mode 100644
index 0000000..1fcd15f
--- /dev/null
+++ b/test/tint/builtins/gen/var/textureLoad/f5aee2.wgsl.expected.ir.msl
@@ -0,0 +1,45 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_2d<r8unorm, read>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
+}
+
+%textureLoad_f5aee2 = func():void {
+  $B2: {
+    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
+    %5:texture_storage_2d<r8unorm, read> = load %arg_0
+    %6:vec2<u32> = load %arg_1
+    %7:vec4<f32> = textureLoad %5, %6
+    %res:ptr<function, vec4<f32>, read_write> = var, %7
+    %9:vec4<f32> = load %res
+    store %prevent_dce, %9
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %11:void = call %textureLoad_f5aee2
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %13:void = call %textureLoad_f5aee2
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %15:void = call %textureLoad_f5aee2
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/textureLoad/f5fbc6.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/f5fbc6.wgsl.expected.ir.msl
index b8d6499..847d2f6 100644
--- a/test/tint/builtins/gen/var/textureLoad/f5fbc6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/f5fbc6.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_f5fbc6 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_f5fbc6 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<rgba8snorm, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_f5fbc6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_f5fbc6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_f5fbc6
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/f74bd8.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/f74bd8.wgsl.expected.ir.msl
index 0c244f4..c0379c2 100644
--- a/test/tint/builtins/gen/var/textureLoad/f74bd8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/f74bd8.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rg32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_f74bd8 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_f74bd8 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %5:texture_storage_3d<rg32float, read> = load %arg_0
     %6:vec3<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_f74bd8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_f74bd8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_f74bd8
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/f7f3bc.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/f7f3bc.wgsl.expected.ir.msl
index 200d34a..95bb81d 100644
--- a/test/tint/builtins/gen/var/textureLoad/f7f3bc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/f7f3bc.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_f7f3bc = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_f7f3bc = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:texture_storage_1d<rgba8snorm, read_write> = load %arg_0
     %6:i32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_f7f3bc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_f7f3bc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_f7f3bc
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/f7f936.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/f7f936.wgsl.expected.ir.msl
index 4dc6b46..538e6e7 100644
--- a/test/tint/builtins/gen/var/textureLoad/f7f936.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/f7f936.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8snorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_f7f936 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_f7f936 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<rgba8snorm, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_f7f936
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_f7f936
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_f7f936
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/f81792.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/f81792.wgsl.expected.ir.msl
index f640849..cea8440 100644
--- a/test/tint/builtins/gen/var/textureLoad/f81792.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/f81792.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_f81792 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_f81792 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<r32float, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_f81792
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_f81792
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_f81792
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/f82eb2.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/f82eb2.wgsl.expected.ir.msl
index e7a05fe..66f2493 100644
--- a/test/tint/builtins/gen/var/textureLoad/f82eb2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/f82eb2.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_f82eb2 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_f82eb2 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:texture_storage_1d<rgba32float, read_write> = load %arg_0
     %6:u32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_f82eb2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_f82eb2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_f82eb2
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/f85291.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/f85291.wgsl.expected.ir.msl
index bd33ab0..78bff90 100644
--- a/test/tint/builtins/gen/var/textureLoad/f85291.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/f85291.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_f85291 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_f85291 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_2d<i32> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_f85291
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_f85291
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_f85291
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/f8a2e8.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/f8a2e8.wgsl.expected.ir.msl
index b4e85aa..10129f1 100644
--- a/test/tint/builtins/gen/var/textureLoad/f8a2e8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/f8a2e8.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<bgra8unorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_f8a2e8 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_f8a2e8 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %5:texture_storage_3d<bgra8unorm, read> = load %arg_0
     %6:vec3<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_f8a2e8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_f8a2e8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_f8a2e8
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/f92c2d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/f92c2d.wgsl.expected.ir.msl
index a97446e..d847959 100644
--- a/test/tint/builtins/gen/var/textureLoad/f92c2d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/f92c2d.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<r32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_f92c2d = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_f92c2d = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %5:texture_storage_2d<r32float, read_write> = load %arg_0
     %6:vec2<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_f92c2d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_f92c2d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_f92c2d
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/f9eaaf.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/f9eaaf.wgsl.expected.ir.msl
index e829079..4a754b3 100644
--- a/test/tint/builtins/gen/var/textureLoad/f9eaaf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/f9eaaf.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba16sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_f9eaaf = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_f9eaaf = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %5:texture_storage_1d<rgba16sint, read> = load %arg_0
     %6:u32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_f9eaaf
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_f9eaaf
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_f9eaaf
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/fc47ff.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/fc47ff.wgsl.expected.ir.msl
index be393c4..a9928a8 100644
--- a/test/tint/builtins/gen/var/textureLoad/fc47ff.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/fc47ff.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_fc47ff = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_fc47ff = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %5:texture_storage_2d<rgba8sint, read_write> = load %arg_0
     %6:vec2<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_fc47ff
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_fc47ff
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_fc47ff
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/fc6d36.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/fc6d36.wgsl.expected.ir.msl
index e93f537..c9c8500 100644
--- a/test/tint/builtins/gen/var/textureLoad/fc6d36.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/fc6d36.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_fc6d36 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_fc6d36 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<rgba16sint, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_fc6d36
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_fc6d36
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_fc6d36
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/fcd23d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/fcd23d.wgsl.expected.ir.msl
index c1d46d6..3a75af4 100644
--- a/test/tint/builtins/gen/var/textureLoad/fcd23d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/fcd23d.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_multisampled_2d, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_fcd23d = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_fcd23d = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_depth_multisampled_2d = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_fcd23d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_fcd23d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_fcd23d
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/fd6442.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/fd6442.wgsl.expected.ir.msl
index a466c1a5..07459d5 100644
--- a/test/tint/builtins/gen/var/textureLoad/fd6442.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/fd6442.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_fd6442 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_fd6442 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %5:texture_storage_2d<rgba8uint, read> = load %arg_0
     %6:vec2<u32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_fd6442
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_fd6442
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_fd6442
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/fd9606.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/fd9606.wgsl.expected.ir.msl
index f48dadb..c3aaff8 100644
--- a/test/tint/builtins/gen/var/textureLoad/fd9606.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/fd9606.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_fd9606 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_fd9606 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<rgba8snorm, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_fd9606
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_fd9606
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_fd9606
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/fdebd0.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/fdebd0.wgsl.expected.ir.msl
index 8713d91..5050a7c 100644
--- a/test/tint/builtins/gen/var/textureLoad/fdebd0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/fdebd0.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_fdebd0 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_fdebd0 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_storage_2d_array<rgba8uint, read> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_fdebd0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_fdebd0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_fdebd0
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/fe0565.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/fe0565.wgsl.expected.ir.msl
index 8bbb780..498b3f5 100644
--- a/test/tint/builtins/gen/var/textureLoad/fe0565.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/fe0565.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_multisampled_2d<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_fe0565 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_fe0565 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %6:texture_multisampled_2d<u32> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_fe0565
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_fe0565
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_fe0565
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/fe222a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/fe222a.wgsl.expected.ir.msl
index d78e914..11b2e44 100644
--- a/test/tint/builtins/gen/var/textureLoad/fe222a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/fe222a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8snorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_fe222a = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_fe222a = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %5:texture_storage_1d<rgba8snorm, read> = load %arg_0
     %6:i32 = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_fe222a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_fe222a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_fe222a
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/fe2c1b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/fe2c1b.wgsl.expected.ir.msl
index ce90a34..e9a98c6 100644
--- a/test/tint/builtins/gen/var/textureLoad/fe2c1b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/fe2c1b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_fe2c1b = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_fe2c1b = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %6:texture_storage_2d_array<rgba32uint, read_write> = load %arg_0
@@ -19,20 +19,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %13:void = call %textureLoad_fe2c1b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %15:void = call %textureLoad_fe2c1b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %17:void = call %textureLoad_fe2c1b
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/feab99.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/feab99.wgsl.expected.ir.msl
index d8a15c2..ba0c9ec 100644
--- a/test/tint/builtins/gen/var/textureLoad/feab99.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/feab99.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba16float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_feab99 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_feab99 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %5:texture_storage_3d<rgba16float, read> = load %arg_0
     %6:vec3<i32> = load %arg_1
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %11:void = call %textureLoad_feab99
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %13:void = call %textureLoad_feab99
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %15:void = call %textureLoad_feab99
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureLoad/ff1119.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/ff1119.wgsl.expected.ir.msl
index 6d80b41..33a7cfe 100644
--- a/test/tint/builtins/gen/var/textureLoad/ff1119.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/ff1119.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureLoad_ff1119 = func():void -> %b2 {
-  %b2 = block {
+%textureLoad_ff1119 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %arg_3:ptr<function, u32, read_write> = var, 1u
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureLoad_ff1119
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureLoad_ff1119
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureLoad_ff1119
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLayers/014a3b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/014a3b.wgsl.expected.ir.msl
index 0fb4467..9281d71 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/014a3b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLayers/014a3b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16uint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_014a3b = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_014a3b = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba16uint, write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_014a3b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_014a3b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_014a3b
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLayers/071ebc.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/071ebc.wgsl.expected.ir.msl
index d8c57e4..9550c71 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/071ebc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLayers/071ebc.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32uint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_071ebc = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_071ebc = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rg32uint, write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_071ebc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_071ebc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_071ebc
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLayers/0856ae.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/0856ae.wgsl.expected.ir.msl
index c3e4aa9..68eca19 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/0856ae.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLayers/0856ae.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_0856ae = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_0856ae = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba16float, read_write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_0856ae
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_0856ae
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_0856ae
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLayers/0ec222.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/0ec222.wgsl.expected.ir.msl
index 5f6ac22..3523e3c 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/0ec222.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLayers/0ec222.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_0ec222 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_0ec222 = func():void {
+  $B2: {
     %4:texture_2d_array<f32> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_0ec222
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_0ec222
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_0ec222
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLayers/0fe8dc.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/0fe8dc.wgsl.expected.ir.msl
index 3d4483f..87cf3db 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/0fe8dc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLayers/0fe8dc.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_0fe8dc = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_0fe8dc = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba32float, read> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_0fe8dc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_0fe8dc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_0fe8dc
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLayers/17ccad.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/17ccad.wgsl.expected.ir.msl
index 602e6ce..33363af 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/17ccad.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLayers/17ccad.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_17ccad = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_17ccad = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rg32float, read_write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_17ccad
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_17ccad
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_17ccad
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLayers/1f858a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/1f858a.wgsl.expected.ir.msl
index 14b4671..c6bbf24 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/1f858a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLayers/1f858a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<bgra8unorm, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_1f858a = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_1f858a = func():void {
+  $B2: {
     %4:texture_storage_2d_array<bgra8unorm, write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_1f858a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_1f858a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_1f858a
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLayers/24d572.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/24d572.wgsl.expected.ir.msl
index 0d09b42..94a6240 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/24d572.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLayers/24d572.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_24d572 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_24d572 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rg32uint, read_write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_24d572
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_24d572
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_24d572
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLayers/26c9f9.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/26c9f9.wgsl.expected.ir.msl
index 4bc2217..ff5efc6 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/26c9f9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLayers/26c9f9.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_26c9f9 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_26c9f9 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<r32sint, read> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_26c9f9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_26c9f9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_26c9f9
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLayers/2a48dc.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/2a48dc.wgsl.expected.ir.msl
index 504cd1e..6ec8cad 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/2a48dc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLayers/2a48dc.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_2a48dc = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_2a48dc = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba32uint, read_write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_2a48dc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_2a48dc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_2a48dc
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLayers/2d95ea.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/2d95ea.wgsl.expected.ir.msl
index f6417fc..7694de3 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/2d95ea.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLayers/2d95ea.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_2d95ea = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_2d95ea = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rg32uint, read> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_2d95ea
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_2d95ea
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_2d95ea
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLayers/327d70.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/327d70.wgsl.expected.ir.msl
index 353c19b..7dbf2d3 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/327d70.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLayers/327d70.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_327d70 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_327d70 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba16uint, read_write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_327d70
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_327d70
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_327d70
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLayers/32ca10.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/32ca10.wgsl.expected.ir.msl
index 609eb8e..af43135 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/32ca10.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLayers/32ca10.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_32ca10 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_32ca10 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8uint, read_write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_32ca10
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_32ca10
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_32ca10
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLayers/3465ec.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/3465ec.wgsl.expected.ir.msl
index 0330bd1..cc22260 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/3465ec.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLayers/3465ec.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32float, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_3465ec = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_3465ec = func():void {
+  $B2: {
     %4:texture_storage_2d_array<r32float, write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_3465ec
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_3465ec
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_3465ec
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLayers/34cefa.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/34cefa.wgsl.expected.ir.msl
index c2e34b0..b0a4cfa 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/34cefa.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLayers/34cefa.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube_array<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_34cefa = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_34cefa = func():void {
+  $B2: {
     %4:texture_cube_array<f32> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_34cefa
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_34cefa
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_34cefa
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLayers/3580ab.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/3580ab.wgsl.expected.ir.msl
index 86480f4..1a0d751 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/3580ab.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLayers/3580ab.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32sint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_3580ab = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_3580ab = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rg32sint, write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_3580ab
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_3580ab
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_3580ab
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLayers/379cc5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/379cc5.wgsl.expected.ir.msl
index 260b649..a5c5c2e 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/379cc5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLayers/379cc5.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_379cc5 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_379cc5 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<r32float, read> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_379cc5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_379cc5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_379cc5
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLayers/37bc8a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/37bc8a.wgsl.expected.ir.msl
index 8479b30..463d2f6 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/37bc8a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLayers/37bc8a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_37bc8a = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_37bc8a = func():void {
+  $B2: {
     %4:texture_storage_2d_array<r32float, read_write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_37bc8a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_37bc8a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_37bc8a
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLayers/380a60.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/380a60.wgsl.expected.ir.msl
index e3d0f43..71f562e 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/380a60.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLayers/380a60.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_380a60 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_380a60 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8sint, read_write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_380a60
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_380a60
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_380a60
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLayers/3ad143.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/3ad143.wgsl.expected.ir.msl
index e88ff34..8949315f0 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/3ad143.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLayers/3ad143.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_3ad143 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_3ad143 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8sint, read> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_3ad143
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_3ad143
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_3ad143
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLayers/3eff89.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/3eff89.wgsl.expected.ir.msl
index 230a024..ebc5e74 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/3eff89.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLayers/3eff89.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8unorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_3eff89 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_3eff89 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8unorm, read> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_3eff89
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_3eff89
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_3eff89
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLayers/485774.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/485774.wgsl.expected.ir.msl
index 7f7f953..50ccfdd 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/485774.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLayers/485774.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<bgra8unorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_485774 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_485774 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<bgra8unorm, read> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_485774
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_485774
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_485774
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLayers/48ef47.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/48ef47.wgsl.expected.ir.msl
index daf683a..398ad9e 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/48ef47.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLayers/48ef47.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_cube_array, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_48ef47 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_48ef47 = func():void {
+  $B2: {
     %4:texture_depth_cube_array = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_48ef47
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_48ef47
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_48ef47
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLayers/4adaad.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/4adaad.wgsl.expected.ir.msl
index 9b34cd3..a34320e 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/4adaad.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLayers/4adaad.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_4adaad = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_4adaad = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba32sint, read> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_4adaad
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_4adaad
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_4adaad
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLayers/4c4333.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/4c4333.wgsl.expected.ir.msl
index 9295af0..f0f4aef 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/4c4333.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLayers/4c4333.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8snorm, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_4c4333 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_4c4333 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8snorm, write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_4c4333
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_4c4333
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_4c4333
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLayers/520086.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/520086.wgsl.expected.ir.msl
index ec06518..93cd92d 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/520086.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLayers/520086.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32uint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_520086 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_520086 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<r32uint, read_write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_520086
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_520086
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_520086
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLayers/52dfc5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/52dfc5.wgsl.expected.ir.msl
index b23e61c..628dfa8 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/52dfc5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLayers/52dfc5.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_52dfc5 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_52dfc5 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba16sint, read> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_52dfc5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_52dfc5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_52dfc5
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLayers/54a654.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/54a654.wgsl.expected.ir.msl
index 403b305..4172f70 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/54a654.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLayers/54a654.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_54a654 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_54a654 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba16sint, read_write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_54a654
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_54a654
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_54a654
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLayers/555f67.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/555f67.wgsl.expected.ir.msl
index ec1e35a..67d85a3 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/555f67.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLayers/555f67.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_555f67 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_555f67 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba16uint, read> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_555f67
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_555f67
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_555f67
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLayers/59cc27.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/59cc27.wgsl.expected.ir.msl
new file mode 100644
index 0000000..31c332d
--- /dev/null
+++ b/test/tint/builtins/gen/var/textureNumLayers/59cc27.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_2d_array<r8unorm, read>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
+}
+
+%textureNumLayers_59cc27 = func():void {
+  $B2: {
+    %4:texture_storage_2d_array<r8unorm, read> = load %arg_0
+    %5:u32 = textureNumLayers %4
+    %res:ptr<function, u32, read_write> = var, %5
+    %7:u32 = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %textureNumLayers_59cc27
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %textureNumLayers_59cc27
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %textureNumLayers_59cc27
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/textureNumLayers/59eb57.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/59eb57.wgsl.expected.ir.msl
index 21c8365..ae46337 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/59eb57.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLayers/59eb57.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32sint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_59eb57 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_59eb57 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<r32sint, write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_59eb57
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_59eb57
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_59eb57
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLayers/5ee8f2.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/5ee8f2.wgsl.expected.ir.msl
index c3958c3..f6ecd8e 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/5ee8f2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLayers/5ee8f2.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32float, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_5ee8f2 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_5ee8f2 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba32float, read_write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_5ee8f2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_5ee8f2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_5ee8f2
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLayers/5f20d1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/5f20d1.wgsl.expected.ir.msl
index 7ea0e55..2cfeb83 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/5f20d1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLayers/5f20d1.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_5f20d1 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_5f20d1 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<r32uint, read> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_5f20d1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_5f20d1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_5f20d1
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLayers/61bd23.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/61bd23.wgsl.expected.ir.msl
index 0ba22a3..f132ef9 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/61bd23.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLayers/61bd23.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8uint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_61bd23 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_61bd23 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8uint, write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_61bd23
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_61bd23
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_61bd23
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLayers/622aa2.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/622aa2.wgsl.expected.ir.msl
index ab2e549..ad88e15 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/622aa2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLayers/622aa2.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_622aa2 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_622aa2 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rg32sint, read_write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_622aa2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_622aa2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_622aa2
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLayers/6b4321.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/6b4321.wgsl.expected.ir.msl
index f93dc1e..faa0303 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/6b4321.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLayers/6b4321.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube_array<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_6b4321 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_6b4321 = func():void {
+  $B2: {
     %4:texture_cube_array<i32> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_6b4321
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_6b4321
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_6b4321
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLayers/6da0eb.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/6da0eb.wgsl.expected.ir.msl
index dc1f22c..cfe2770 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/6da0eb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLayers/6da0eb.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_6da0eb = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_6da0eb = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8unorm, read_write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_6da0eb
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_6da0eb
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_6da0eb
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLayers/77be7b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/77be7b.wgsl.expected.ir.msl
index c3b006e..dd12182 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/77be7b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLayers/77be7b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_77be7b = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_77be7b = func():void {
+  $B2: {
     %4:texture_2d_array<i32> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_77be7b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_77be7b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_77be7b
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLayers/7895f4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/7895f4.wgsl.expected.ir.msl
index ac4abcf..e36e51d 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/7895f4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLayers/7895f4.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8snorm, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_7895f4 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_7895f4 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8snorm, read> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_7895f4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_7895f4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_7895f4
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLayers/7f28cf.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/7f28cf.wgsl.expected.ir.msl
index 14e579f..f6948ca 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/7f28cf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLayers/7f28cf.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32float, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_7f28cf = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_7f28cf = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rg32float, write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_7f28cf
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_7f28cf
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_7f28cf
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLayers/8356f7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/8356f7.wgsl.expected.ir.msl
new file mode 100644
index 0000000..1d18a30
--- /dev/null
+++ b/test/tint/builtins/gen/var/textureNumLayers/8356f7.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_2d_array<r8unorm, write>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
+}
+
+%textureNumLayers_8356f7 = func():void {
+  $B2: {
+    %4:texture_storage_2d_array<r8unorm, write> = load %arg_0
+    %5:u32 = textureNumLayers %4
+    %res:ptr<function, u32, read_write> = var, %5
+    %7:u32 = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %textureNumLayers_8356f7
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %textureNumLayers_8356f7
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %textureNumLayers_8356f7
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/textureNumLayers/878dea.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/878dea.wgsl.expected.ir.msl
index dece494..4b13efe 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/878dea.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLayers/878dea.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8sint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_878dea = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_878dea = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8sint, write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_878dea
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_878dea
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_878dea
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLayers/87faad.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/87faad.wgsl.expected.ir.msl
index b9c1c72..ad9cf95 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/87faad.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLayers/87faad.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32uint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_87faad = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_87faad = func():void {
+  $B2: {
     %4:texture_storage_2d_array<r32uint, write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_87faad
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_87faad
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_87faad
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLayers/8ac32a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/8ac32a.wgsl.expected.ir.msl
index dfb1202..0ff3e5a 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/8ac32a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLayers/8ac32a.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_8ac32a = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_8ac32a = func():void {
+  $B2: {
     %4:texture_2d_array<u32> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_8ac32a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_8ac32a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_8ac32a
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLayers/8bd987.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/8bd987.wgsl.expected.ir.msl
index 6ef41e6..a19cbca 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/8bd987.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLayers/8bd987.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32sint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_8bd987 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_8bd987 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba32sint, write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_8bd987
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_8bd987
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_8bd987
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLayers/8dbf23.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/8dbf23.wgsl.expected.ir.msl
index f1592e9..50af50b 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/8dbf23.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLayers/8dbf23.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8unorm, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_8dbf23 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_8dbf23 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8unorm, write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_8dbf23
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_8dbf23
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_8dbf23
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLayers/8e1bd0.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/8e1bd0.wgsl.expected.ir.msl
index 7585c82..24fbd07 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/8e1bd0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLayers/8e1bd0.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_8e1bd0 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_8e1bd0 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<r32sint, read_write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_8e1bd0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_8e1bd0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_8e1bd0
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLayers/90b8cc.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/90b8cc.wgsl.expected.ir.msl
index fd3222a..082e72b 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/90b8cc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLayers/90b8cc.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_90b8cc = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_90b8cc = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rg32float, read> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_90b8cc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_90b8cc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_90b8cc
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLayers/9695c6.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/9695c6.wgsl.expected.ir.msl
index 6cdb31d..9534498 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/9695c6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLayers/9695c6.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32uint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_9695c6 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_9695c6 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba32uint, write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_9695c6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_9695c6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_9695c6
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLayers/98a9cf.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/98a9cf.wgsl.expected.ir.msl
index 1bde369..d4ebae1 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/98a9cf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLayers/98a9cf.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16float, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_98a9cf = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_98a9cf = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba16float, write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_98a9cf
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_98a9cf
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_98a9cf
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLayers/9c60e3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/9c60e3.wgsl.expected.ir.msl
index d1146ee..020f2c2 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/9c60e3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLayers/9c60e3.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_9c60e3 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_9c60e3 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba32uint, read> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_9c60e3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_9c60e3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_9c60e3
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLayers/a54655.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/a54655.wgsl.expected.ir.msl
index dc774f4..7d7ae36 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/a54655.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLayers/a54655.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_a54655 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_a54655 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<bgra8unorm, read_write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_a54655
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_a54655
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_a54655
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLayers/a9d3f5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/a9d3f5.wgsl.expected.ir.msl
index a484d5a..596843d 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/a9d3f5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLayers/a9d3f5.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_a9d3f5 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_a9d3f5 = func():void {
+  $B2: {
     %4:texture_depth_2d_array = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_a9d3f5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_a9d3f5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_a9d3f5
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLayers/aac630.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/aac630.wgsl.expected.ir.msl
new file mode 100644
index 0000000..971a269
--- /dev/null
+++ b/test/tint/builtins/gen/var/textureNumLayers/aac630.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_2d_array<r8unorm, read_write>, read> = var @binding_point(1, 0)
+  %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
+}
+
+%textureNumLayers_aac630 = func():void {
+  $B2: {
+    %4:texture_storage_2d_array<r8unorm, read_write> = load %arg_0
+    %5:u32 = textureNumLayers %4
+    %res:ptr<function, u32, read_write> = var, %5
+    %7:u32 = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %textureNumLayers_aac630
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %textureNumLayers_aac630
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %textureNumLayers_aac630
+    ret
+  }
+}
+
+invalid access control for storage texture
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/textureNumLayers/bf2f76.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/bf2f76.wgsl.expected.ir.msl
index 62bb7e5..60413c7 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/bf2f76.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLayers/bf2f76.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32sint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_bf2f76 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_bf2f76 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rg32sint, read> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_bf2f76
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_bf2f76
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_bf2f76
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLayers/c1eca9.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/c1eca9.wgsl.expected.ir.msl
index 67e92b9..e34b6e8 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/c1eca9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLayers/c1eca9.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube_array<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_c1eca9 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_c1eca9 = func():void {
+  $B2: {
     %4:texture_cube_array<u32> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_c1eca9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_c1eca9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_c1eca9
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLayers/d3e21f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/d3e21f.wgsl.expected.ir.msl
index 8ccfa7b..541a1c1 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/d3e21f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLayers/d3e21f.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8uint, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_d3e21f = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_d3e21f = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8uint, read> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_d3e21f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_d3e21f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_d3e21f
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLayers/d3f655.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/d3f655.wgsl.expected.ir.msl
index 89fc94d..2658710 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/d3f655.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLayers/d3f655.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32sint, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_d3f655 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_d3f655 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba32sint, read_write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_d3f655
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_d3f655
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_d3f655
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLayers/d75a0b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/d75a0b.wgsl.expected.ir.msl
index 4aeac8b..411e681 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/d75a0b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLayers/d75a0b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32float, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_d75a0b = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_d75a0b = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba32float, write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_d75a0b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_d75a0b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_d75a0b
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLayers/de8087.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/de8087.wgsl.expected.ir.msl
index 5d387dd..e4517d4 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/de8087.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLayers/de8087.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16sint, write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_de8087 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_de8087 = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba16sint, write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_de8087
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_de8087
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_de8087
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLayers/e47aac.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/e47aac.wgsl.expected.ir.msl
index 72222a7..89f70d4 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/e47aac.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLayers/e47aac.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_e47aac = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_e47aac = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba8snorm, read_write> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_e47aac
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_e47aac
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_e47aac
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLayers/f1783f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLayers/f1783f.wgsl.expected.ir.msl
index c8ba250..55270ec 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/f1783f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLayers/f1783f.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16float, read>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLayers_f1783f = func():void -> %b2 {
-  %b2 = block {
+%textureNumLayers_f1783f = func():void {
+  $B2: {
     %4:texture_storage_2d_array<rgba16float, read> = load %arg_0
     %5:u32 = textureNumLayers %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLayers_f1783f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLayers_f1783f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLayers_f1783f
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLevels/181090.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLevels/181090.wgsl.expected.ir.msl
index adbe171..1d6870d 100644
--- a/test/tint/builtins/gen/var/textureNumLevels/181090.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLevels/181090.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLevels_181090 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLevels_181090 = func():void {
+  $B2: {
     %4:texture_2d_array<u32> = load %arg_0
     %5:u32 = textureNumLevels %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLevels_181090
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLevels_181090
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLevels_181090
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLevels/1a3fa9.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLevels/1a3fa9.wgsl.expected.ir.msl
index 130bc45..add0e08 100644
--- a/test/tint/builtins/gen/var/textureNumLevels/1a3fa9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLevels/1a3fa9.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLevels_1a3fa9 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLevels_1a3fa9 = func():void {
+  $B2: {
     %4:texture_2d<i32> = load %arg_0
     %5:u32 = textureNumLevels %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLevels_1a3fa9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLevels_1a3fa9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLevels_1a3fa9
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLevels/1a7fc3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLevels/1a7fc3.wgsl.expected.ir.msl
index 206b34d..0e2d138 100644
--- a/test/tint/builtins/gen/var/textureNumLevels/1a7fc3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLevels/1a7fc3.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_1d<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLevels_1a7fc3 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLevels_1a7fc3 = func():void {
+  $B2: {
     %4:texture_1d<u32> = load %arg_0
     %5:u32 = textureNumLevels %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLevels_1a7fc3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLevels_1a7fc3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLevels_1a7fc3
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLevels/2267d8.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLevels/2267d8.wgsl.expected.ir.msl
index c8278c6..b5543c7 100644
--- a/test/tint/builtins/gen/var/textureNumLevels/2267d8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLevels/2267d8.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLevels_2267d8 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLevels_2267d8 = func():void {
+  $B2: {
     %4:texture_cube<i32> = load %arg_0
     %5:u32 = textureNumLevels %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLevels_2267d8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLevels_2267d8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLevels_2267d8
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLevels/24b2c6.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLevels/24b2c6.wgsl.expected.ir.msl
index 49a6b03..df3f5f9 100644
--- a/test/tint/builtins/gen/var/textureNumLevels/24b2c6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLevels/24b2c6.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLevels_24b2c6 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLevels_24b2c6 = func():void {
+  $B2: {
     %4:texture_2d<f32> = load %arg_0
     %5:u32 = textureNumLevels %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLevels_24b2c6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLevels_24b2c6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLevels_24b2c6
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLevels/2bea6c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLevels/2bea6c.wgsl.expected.ir.msl
index b5cdd15..c2a98e4 100644
--- a/test/tint/builtins/gen/var/textureNumLevels/2bea6c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLevels/2bea6c.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_cube_array, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLevels_2bea6c = func():void -> %b2 {
-  %b2 = block {
+%textureNumLevels_2bea6c = func():void {
+  $B2: {
     %4:texture_depth_cube_array = load %arg_0
     %5:u32 = textureNumLevels %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLevels_2bea6c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLevels_2bea6c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLevels_2bea6c
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLevels/2df1ab.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLevels/2df1ab.wgsl.expected.ir.msl
index 53c278b..9562080 100644
--- a/test/tint/builtins/gen/var/textureNumLevels/2df1ab.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLevels/2df1ab.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLevels_2df1ab = func():void -> %b2 {
-  %b2 = block {
+%textureNumLevels_2df1ab = func():void {
+  $B2: {
     %4:texture_cube<f32> = load %arg_0
     %5:u32 = textureNumLevels %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLevels_2df1ab
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLevels_2df1ab
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLevels_2df1ab
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLevels/46dbd8.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLevels/46dbd8.wgsl.expected.ir.msl
index e793891..7cf81ff 100644
--- a/test/tint/builtins/gen/var/textureNumLevels/46dbd8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLevels/46dbd8.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLevels_46dbd8 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLevels_46dbd8 = func():void {
+  $B2: {
     %4:texture_2d_array<f32> = load %arg_0
     %5:u32 = textureNumLevels %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLevels_46dbd8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLevels_46dbd8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLevels_46dbd8
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLevels/60d9b8.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLevels/60d9b8.wgsl.expected.ir.msl
index 9803878..51be4e4 100644
--- a/test/tint/builtins/gen/var/textureNumLevels/60d9b8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLevels/60d9b8.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLevels_60d9b8 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLevels_60d9b8 = func():void {
+  $B2: {
     %4:texture_3d<u32> = load %arg_0
     %5:u32 = textureNumLevels %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLevels_60d9b8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLevels_60d9b8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLevels_60d9b8
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLevels/903920.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLevels/903920.wgsl.expected.ir.msl
index 8ce3591..cdb68aa 100644
--- a/test/tint/builtins/gen/var/textureNumLevels/903920.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLevels/903920.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube_array<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLevels_903920 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLevels_903920 = func():void {
+  $B2: {
     %4:texture_cube_array<i32> = load %arg_0
     %5:u32 = textureNumLevels %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLevels_903920
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLevels_903920
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLevels_903920
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLevels/9a1a65.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLevels/9a1a65.wgsl.expected.ir.msl
index 849c832..56868d8 100644
--- a/test/tint/builtins/gen/var/textureNumLevels/9a1a65.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLevels/9a1a65.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLevels_9a1a65 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLevels_9a1a65 = func():void {
+  $B2: {
     %4:texture_3d<i32> = load %arg_0
     %5:u32 = textureNumLevels %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLevels_9a1a65
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLevels_9a1a65
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLevels_9a1a65
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLevels/adc783.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLevels/adc783.wgsl.expected.ir.msl
index d86d8b3..358b38a 100644
--- a/test/tint/builtins/gen/var/textureNumLevels/adc783.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLevels/adc783.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLevels_adc783 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLevels_adc783 = func():void {
+  $B2: {
     %4:texture_2d_array<i32> = load %arg_0
     %5:u32 = textureNumLevels %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLevels_adc783
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLevels_adc783
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLevels_adc783
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLevels/ae911c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLevels/ae911c.wgsl.expected.ir.msl
index 49ed517..352fc7f 100644
--- a/test/tint/builtins/gen/var/textureNumLevels/ae911c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLevels/ae911c.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLevels_ae911c = func():void -> %b2 {
-  %b2 = block {
+%textureNumLevels_ae911c = func():void {
+  $B2: {
     %4:texture_depth_2d_array = load %arg_0
     %5:u32 = textureNumLevels %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLevels_ae911c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLevels_ae911c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLevels_ae911c
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLevels/c386c8.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLevels/c386c8.wgsl.expected.ir.msl
index 45c4581..a381977 100644
--- a/test/tint/builtins/gen/var/textureNumLevels/c386c8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLevels/c386c8.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLevels_c386c8 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLevels_c386c8 = func():void {
+  $B2: {
     %4:texture_cube<u32> = load %arg_0
     %5:u32 = textureNumLevels %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLevels_c386c8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLevels_c386c8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLevels_c386c8
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLevels/c399f9.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLevels/c399f9.wgsl.expected.ir.msl
index 627c314..ab8b06c 100644
--- a/test/tint/builtins/gen/var/textureNumLevels/c399f9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLevels/c399f9.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_1d<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLevels_c399f9 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLevels_c399f9 = func():void {
+  $B2: {
     %4:texture_1d<f32> = load %arg_0
     %5:u32 = textureNumLevels %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLevels_c399f9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLevels_c399f9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLevels_c399f9
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLevels/c8c25c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLevels/c8c25c.wgsl.expected.ir.msl
index 2c5037c..ac6bf19 100644
--- a/test/tint/builtins/gen/var/textureNumLevels/c8c25c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLevels/c8c25c.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_cube, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLevels_c8c25c = func():void -> %b2 {
-  %b2 = block {
+%textureNumLevels_c8c25c = func():void {
+  $B2: {
     %4:texture_depth_cube = load %arg_0
     %5:u32 = textureNumLevels %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLevels_c8c25c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLevels_c8c25c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLevels_c8c25c
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLevels/d63126.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLevels/d63126.wgsl.expected.ir.msl
index 5cb28c7..a3f9b35 100644
--- a/test/tint/builtins/gen/var/textureNumLevels/d63126.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLevels/d63126.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLevels_d63126 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLevels_d63126 = func():void {
+  $B2: {
     %4:texture_depth_2d = load %arg_0
     %5:u32 = textureNumLevels %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLevels_d63126
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLevels_d63126
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLevels_d63126
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLevels/d8f73b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLevels/d8f73b.wgsl.expected.ir.msl
index 0c5b086..73607e8 100644
--- a/test/tint/builtins/gen/var/textureNumLevels/d8f73b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLevels/d8f73b.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube_array<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLevels_d8f73b = func():void -> %b2 {
-  %b2 = block {
+%textureNumLevels_d8f73b = func():void {
+  $B2: {
     %4:texture_cube_array<f32> = load %arg_0
     %5:u32 = textureNumLevels %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLevels_d8f73b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLevels_d8f73b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLevels_d8f73b
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLevels/ef7944.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLevels/ef7944.wgsl.expected.ir.msl
index dacd1be..52292ff 100644
--- a/test/tint/builtins/gen/var/textureNumLevels/ef7944.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLevels/ef7944.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLevels_ef7944 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLevels_ef7944 = func():void {
+  $B2: {
     %4:texture_3d<f32> = load %arg_0
     %5:u32 = textureNumLevels %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLevels_ef7944
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLevels_ef7944
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLevels_ef7944
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLevels/efd6df.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLevels/efd6df.wgsl.expected.ir.msl
index ed91d52..0d6eac8 100644
--- a/test/tint/builtins/gen/var/textureNumLevels/efd6df.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLevels/efd6df.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLevels_efd6df = func():void -> %b2 {
-  %b2 = block {
+%textureNumLevels_efd6df = func():void {
+  $B2: {
     %4:texture_2d<u32> = load %arg_0
     %5:u32 = textureNumLevels %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLevels_efd6df
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLevels_efd6df
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLevels_efd6df
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLevels/f742c0.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLevels/f742c0.wgsl.expected.ir.msl
index 5a8b34c..d26c684 100644
--- a/test/tint/builtins/gen/var/textureNumLevels/f742c0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLevels/f742c0.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_1d<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLevels_f742c0 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLevels_f742c0 = func():void {
+  $B2: {
     %4:texture_1d<i32> = load %arg_0
     %5:u32 = textureNumLevels %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLevels_f742c0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLevels_f742c0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLevels_f742c0
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumLevels/fe2171.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumLevels/fe2171.wgsl.expected.ir.msl
index 699cb9a..7ee8eef 100644
--- a/test/tint/builtins/gen/var/textureNumLevels/fe2171.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumLevels/fe2171.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube_array<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumLevels_fe2171 = func():void -> %b2 {
-  %b2 = block {
+%textureNumLevels_fe2171 = func():void {
+  $B2: {
     %4:texture_cube_array<u32> = load %arg_0
     %5:u32 = textureNumLevels %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumLevels_fe2171
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumLevels_fe2171
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumLevels_fe2171
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumSamples/50f399.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumSamples/50f399.wgsl.expected.ir.msl
index 861bc63..2747d7a 100644
--- a/test/tint/builtins/gen/var/textureNumSamples/50f399.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumSamples/50f399.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_multisampled_2d<u32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumSamples_50f399 = func():void -> %b2 {
-  %b2 = block {
+%textureNumSamples_50f399 = func():void {
+  $B2: {
     %4:texture_multisampled_2d<u32> = load %arg_0
     %5:u32 = textureNumSamples %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumSamples_50f399
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumSamples_50f399
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumSamples_50f399
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumSamples/c1a777.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumSamples/c1a777.wgsl.expected.ir.msl
index 5b7e65d..78c82ff 100644
--- a/test/tint/builtins/gen/var/textureNumSamples/c1a777.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumSamples/c1a777.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_multisampled_2d<i32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumSamples_c1a777 = func():void -> %b2 {
-  %b2 = block {
+%textureNumSamples_c1a777 = func():void {
+  $B2: {
     %4:texture_multisampled_2d<i32> = load %arg_0
     %5:u32 = textureNumSamples %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumSamples_c1a777
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumSamples_c1a777
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumSamples_c1a777
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumSamples/dbb799.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumSamples/dbb799.wgsl.expected.ir.msl
index d3e0ac4..033d432 100644
--- a/test/tint/builtins/gen/var/textureNumSamples/dbb799.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumSamples/dbb799.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_multisampled_2d<f32>, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumSamples_dbb799 = func():void -> %b2 {
-  %b2 = block {
+%textureNumSamples_dbb799 = func():void {
+  $B2: {
     %4:texture_multisampled_2d<f32> = load %arg_0
     %5:u32 = textureNumSamples %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumSamples_dbb799
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumSamples_dbb799
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumSamples_dbb799
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureNumSamples/ecd321.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureNumSamples/ecd321.wgsl.expected.ir.msl
index 37385e4..c03f5a1 100644
--- a/test/tint/builtins/gen/var/textureNumSamples/ecd321.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureNumSamples/ecd321.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_multisampled_2d, read> = var @binding_point(1, 0)
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%textureNumSamples_ecd321 = func():void -> %b2 {
-  %b2 = block {
+%textureNumSamples_ecd321 = func():void {
+  $B2: {
     %4:texture_depth_multisampled_2d = load %arg_0
     %5:u32 = textureNumSamples %4
     %res:ptr<function, u32, read_write> = var, %5
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %textureNumSamples_ecd321
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %textureNumSamples_ecd321
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %textureNumSamples_ecd321
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSample/0dff6c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSample/0dff6c.wgsl.expected.ir.msl
index b1b6608..3c40846 100644
--- a/test/tint/builtins/gen/var/textureSample/0dff6c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSample/0dff6c.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSample_0dff6c = func():void -> %b2 {
-  %b2 = block {
+%textureSample_0dff6c = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %6:texture_depth_2d = load %arg_0
     %7:sampler = load %arg_1
@@ -19,8 +19,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %13:void = call %textureSample_0dff6c
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSample/17e988.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSample/17e988.wgsl.expected.ir.msl
index adb049b..5f62935 100644
--- a/test/tint/builtins/gen/var/textureSample/17e988.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSample/17e988.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSample_17e988 = func():void -> %b2 {
-  %b2 = block {
+%textureSample_17e988 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_3:ptr<function, i32, read_write> = var, 1i
     %7:texture_2d_array<f32> = load %arg_0
@@ -21,8 +21,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %15:void = call %textureSample_17e988
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSample/193203.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSample/193203.wgsl.expected.ir.msl
index 0f03297..b0393af 100644
--- a/test/tint/builtins/gen/var/textureSample/193203.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSample/193203.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSample_193203 = func():void -> %b2 {
-  %b2 = block {
+%textureSample_193203 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_3:ptr<function, u32, read_write> = var, 1u
     %7:texture_2d_array<f32> = load %arg_0
@@ -21,8 +21,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %15:void = call %textureSample_193203
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSample/1a4e1b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSample/1a4e1b.wgsl.expected.ir.msl
index 6f9ed7a..ddca6b6 100644
--- a/test/tint/builtins/gen/var/textureSample/1a4e1b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSample/1a4e1b.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSample_1a4e1b = func():void -> %b2 {
-  %b2 = block {
+%textureSample_1a4e1b = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_3:ptr<function, u32, read_write> = var, 1u
     %7:texture_depth_2d_array = load %arg_0
@@ -21,8 +21,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %15:void = call %textureSample_1a4e1b
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSample/2149ec.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSample/2149ec.wgsl.expected.ir.msl
index ba3da68..4ad8af4 100644
--- a/test/tint/builtins/gen/var/textureSample/2149ec.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSample/2149ec.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSample_2149ec = func():void -> %b2 {
-  %b2 = block {
+%textureSample_2149ec = func():void {
+  $B2: {
     %arg_2:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %6:texture_3d<f32> = load %arg_0
     %7:sampler = load %arg_1
@@ -19,8 +19,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %13:void = call %textureSample_2149ec
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSample/38bbb9.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSample/38bbb9.wgsl.expected.ir.msl
index 8f1f008..a113cd4 100644
--- a/test/tint/builtins/gen/var/textureSample/38bbb9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSample/38bbb9.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSample_38bbb9 = func():void -> %b2 {
-  %b2 = block {
+%textureSample_38bbb9 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %6:texture_depth_2d = load %arg_0
     %7:sampler = load %arg_1
@@ -19,8 +19,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %13:void = call %textureSample_38bbb9
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSample/3b50bd.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSample/3b50bd.wgsl.expected.ir.msl
index 4376c92..6e29909 100644
--- a/test/tint/builtins/gen/var/textureSample/3b50bd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSample/3b50bd.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSample_3b50bd = func():void -> %b2 {
-  %b2 = block {
+%textureSample_3b50bd = func():void {
+  $B2: {
     %arg_2:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %6:texture_3d<f32> = load %arg_0
     %7:sampler = load %arg_1
@@ -19,8 +19,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %13:void = call %textureSample_3b50bd
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSample/4703d0.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSample/4703d0.wgsl.expected.ir.msl
index e3689cb..17b17fa 100644
--- a/test/tint/builtins/gen/var/textureSample/4703d0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSample/4703d0.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSample_4703d0 = func():void -> %b2 {
-  %b2 = block {
+%textureSample_4703d0 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_3:ptr<function, u32, read_write> = var, 1u
     %7:texture_depth_2d_array = load %arg_0
@@ -21,8 +21,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %15:void = call %textureSample_4703d0
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSample/4dd1bf.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSample/4dd1bf.wgsl.expected.ir.msl
index 07fb9a4..b021b59 100644
--- a/test/tint/builtins/gen/var/textureSample/4dd1bf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSample/4dd1bf.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube_array<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSample_4dd1bf = func():void -> %b2 {
-  %b2 = block {
+%textureSample_4dd1bf = func():void {
+  $B2: {
     %arg_2:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_3:ptr<function, i32, read_write> = var, 1i
     %7:texture_cube_array<f32> = load %arg_0
@@ -21,8 +21,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %15:void = call %textureSample_4dd1bf
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSample/51b514.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSample/51b514.wgsl.expected.ir.msl
index 6b36397..aa66ed2 100644
--- a/test/tint/builtins/gen/var/textureSample/51b514.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSample/51b514.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSample_51b514 = func():void -> %b2 {
-  %b2 = block {
+%textureSample_51b514 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %6:texture_2d<f32> = load %arg_0
     %7:sampler = load %arg_1
@@ -19,8 +19,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %13:void = call %textureSample_51b514
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSample/60bf45.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSample/60bf45.wgsl.expected.ir.msl
index 5b584b6..31b95cf 100644
--- a/test/tint/builtins/gen/var/textureSample/60bf45.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSample/60bf45.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSample_60bf45 = func():void -> %b2 {
-  %b2 = block {
+%textureSample_60bf45 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_3:ptr<function, i32, read_write> = var, 1i
     %7:texture_depth_2d_array = load %arg_0
@@ -21,8 +21,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %15:void = call %textureSample_60bf45
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSample/6717ca.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSample/6717ca.wgsl.expected.ir.msl
index 79ad843..3adc780 100644
--- a/test/tint/builtins/gen/var/textureSample/6717ca.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSample/6717ca.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSample_6717ca = func():void -> %b2 {
-  %b2 = block {
+%textureSample_6717ca = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_3:ptr<function, i32, read_write> = var, 1i
     %7:texture_2d_array<f32> = load %arg_0
@@ -21,8 +21,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %15:void = call %textureSample_6717ca
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSample/6e64fb.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSample/6e64fb.wgsl.expected.ir.msl
index ca26ab0..2d7a629 100644
--- a/test/tint/builtins/gen/var/textureSample/6e64fb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSample/6e64fb.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_1d<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSample_6e64fb = func():void -> %b2 {
-  %b2 = block {
+%textureSample_6e64fb = func():void {
+  $B2: {
     %arg_2:ptr<function, f32, read_write> = var, 1.0f
     %6:texture_1d<f32> = load %arg_0
     %7:sampler = load %arg_1
@@ -19,8 +19,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %13:void = call %textureSample_6e64fb
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSample/7e9ffd.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSample/7e9ffd.wgsl.expected.ir.msl
index 5a7a2f9..2ff2807 100644
--- a/test/tint/builtins/gen/var/textureSample/7e9ffd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSample/7e9ffd.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSample_7e9ffd = func():void -> %b2 {
-  %b2 = block {
+%textureSample_7e9ffd = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_3:ptr<function, i32, read_write> = var, 1i
     %7:texture_depth_2d_array = load %arg_0
@@ -21,8 +21,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %15:void = call %textureSample_7e9ffd
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSample/7fd8cb.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSample/7fd8cb.wgsl.expected.ir.msl
index 41aea3a..cba8a48 100644
--- a/test/tint/builtins/gen/var/textureSample/7fd8cb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSample/7fd8cb.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_cube_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSample_7fd8cb = func():void -> %b2 {
-  %b2 = block {
+%textureSample_7fd8cb = func():void {
+  $B2: {
     %arg_2:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_3:ptr<function, u32, read_write> = var, 1u
     %7:texture_depth_cube_array = load %arg_0
@@ -21,8 +21,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %15:void = call %textureSample_7fd8cb
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSample/85c4ba.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSample/85c4ba.wgsl.expected.ir.msl
index dc58161..4515efb 100644
--- a/test/tint/builtins/gen/var/textureSample/85c4ba.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSample/85c4ba.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSample_85c4ba = func():void -> %b2 {
-  %b2 = block {
+%textureSample_85c4ba = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %6:texture_2d<f32> = load %arg_0
     %7:sampler = load %arg_1
@@ -19,8 +19,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %13:void = call %textureSample_85c4ba
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSample/bc7477.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSample/bc7477.wgsl.expected.ir.msl
index 5e2a01a..6f235ed 100644
--- a/test/tint/builtins/gen/var/textureSample/bc7477.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSample/bc7477.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube_array<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSample_bc7477 = func():void -> %b2 {
-  %b2 = block {
+%textureSample_bc7477 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_3:ptr<function, u32, read_write> = var, 1u
     %7:texture_cube_array<f32> = load %arg_0
@@ -21,8 +21,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %15:void = call %textureSample_bc7477
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSample/c2f4e8.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSample/c2f4e8.wgsl.expected.ir.msl
index 93d9f33..5e96887 100644
--- a/test/tint/builtins/gen/var/textureSample/c2f4e8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSample/c2f4e8.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_cube_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSample_c2f4e8 = func():void -> %b2 {
-  %b2 = block {
+%textureSample_c2f4e8 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_3:ptr<function, i32, read_write> = var, 1i
     %7:texture_depth_cube_array = load %arg_0
@@ -21,8 +21,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %15:void = call %textureSample_c2f4e8
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSample/d6b281.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSample/d6b281.wgsl.expected.ir.msl
index 9105ba9..465b0e7 100644
--- a/test/tint/builtins/gen/var/textureSample/d6b281.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSample/d6b281.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSample_d6b281 = func():void -> %b2 {
-  %b2 = block {
+%textureSample_d6b281 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_3:ptr<function, u32, read_write> = var, 1u
     %7:texture_2d_array<f32> = load %arg_0
@@ -21,8 +21,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %15:void = call %textureSample_d6b281
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSample/e53267.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSample/e53267.wgsl.expected.ir.msl
index d03c5f5..8c1cd90 100644
--- a/test/tint/builtins/gen/var/textureSample/e53267.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSample/e53267.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSample_e53267 = func():void -> %b2 {
-  %b2 = block {
+%textureSample_e53267 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %6:texture_cube<f32> = load %arg_0
     %7:sampler = load %arg_1
@@ -19,8 +19,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %13:void = call %textureSample_e53267
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSample/ea7030.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSample/ea7030.wgsl.expected.ir.msl
index ab38178..0962884 100644
--- a/test/tint/builtins/gen/var/textureSample/ea7030.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSample/ea7030.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_cube, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSample_ea7030 = func():void -> %b2 {
-  %b2 = block {
+%textureSample_ea7030 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %6:texture_depth_cube = load %arg_0
     %7:sampler = load %arg_1
@@ -19,8 +19,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %13:void = call %textureSample_ea7030
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleBaseClampToEdge/7c04e6.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleBaseClampToEdge/7c04e6.wgsl.expected.ir.msl
index 25d5993..2cba1d7 100644
--- a/test/tint/builtins/gen/var/textureSampleBaseClampToEdge/7c04e6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleBaseClampToEdge/7c04e6.wgsl.expected.ir.msl
@@ -1,47 +1,32 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1057 internal compiler error: %b1 = block {  # root
-  %arg_0:ptr<handle, texture_external, read> = var @binding_point(1, 0)
-  %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
-  %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
+
+@group(1) @binding(0) var arg_0 : texture_external;
+
+@group(1) @binding(1) var arg_1 : sampler;
+
+fn textureSampleBaseClampToEdge_7c04e6() {
+  var arg_2 = vec2<f32>(1.0f);
+  var res : vec4<f32> = textureSampleBaseClampToEdge(arg_0, arg_1, arg_2);
+  prevent_dce = res;
 }
 
-%textureSampleBaseClampToEdge_7c04e6 = func():void -> %b2 {
-  %b2 = block {
-    %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
-    %6:texture_external = load %arg_0
-    %7:sampler = load %arg_1
-    %8:vec2<f32> = load %arg_2
-    %9:vec4<f32> = textureSampleBaseClampToEdge %6, %7, %8
-    %res:ptr<function, vec4<f32>, read_write> = var, %9
-    %11:vec4<f32> = load %res
-    store %prevent_dce, %11
-    ret
-  }
-}
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %13:void = call %textureSampleBaseClampToEdge_7c04e6
-    ret vec4<f32>(0.0f)
-  }
-}
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %15:void = call %textureSampleBaseClampToEdge_7c04e6
-    ret
-  }
-}
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %17:void = call %textureSampleBaseClampToEdge_7c04e6
-    ret
-  }
+@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+@vertex
+fn vertex_main() -> @builtin(position) vec4<f32> {
+  textureSampleBaseClampToEdge_7c04e6();
+  return vec4<f32>();
 }
 
-Multiplanar external texture transform was not run.
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+@fragment
+fn fragment_main() {
+  textureSampleBaseClampToEdge_7c04e6();
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+  textureSampleBaseClampToEdge_7c04e6();
+}
+
+Failed to generate: error: ExternalTextureOptions missing binding entry for [group: 1, binding: 0]
diff --git a/test/tint/builtins/gen/var/textureSampleBaseClampToEdge/9ca02c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleBaseClampToEdge/9ca02c.wgsl.expected.ir.msl
index b788a4c..d3c8c2f 100644
--- a/test/tint/builtins/gen/var/textureSampleBaseClampToEdge/9ca02c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleBaseClampToEdge/9ca02c.wgsl.expected.ir.msl
@@ -1,39 +1,48 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleBaseClampToEdge_9ca02c = func():void -> %b2 {
-  %b2 = block {
+%textureSampleBaseClampToEdge_9ca02c = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %6:texture_2d<f32> = load %arg_0
-    %7:sampler = load %arg_1
-    %8:vec2<f32> = load %arg_2
-    %9:vec4<f32> = textureSampleBaseClampToEdge %6, %7, %8
-    %res:ptr<function, vec4<f32>, read_write> = var, %9
-    %11:vec4<f32> = load %res
-    store %prevent_dce, %11
+    %7:texture_2d<f32> = let %6
+    %8:sampler = load %arg_1
+    %9:sampler = let %8
+    %10:vec2<f32> = load %arg_2
+    %11:vec2<f32> = let %10
+    %12:vec2<u32> = textureDimensions %7
+    %13:vec2<f32> = convert %12
+    %14:vec2<f32> = div vec2<f32>(0.5f), %13
+    %15:vec2<f32> = let %14
+    %16:vec2<f32> = sub vec2<f32>(1.0f), %15
+    %17:vec2<f32> = clamp %11, %15, %16
+    %18:vec4<f32> = textureSampleLevel %7, %9, %17, 0.0f
+    %res:ptr<function, vec4<f32>, read_write> = var, %18
+    %20:vec4<f32> = load %res
+    store %prevent_dce, %20
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %13:void = call %textureSampleBaseClampToEdge_9ca02c
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %22:void = call %textureSampleBaseClampToEdge_9ca02c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %15:void = call %textureSampleBaseClampToEdge_9ca02c
+%fragment_main = @fragment func():void {
+  $B4: {
+    %24:void = call %textureSampleBaseClampToEdge_9ca02c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %17:void = call %textureSampleBaseClampToEdge_9ca02c
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %26:void = call %textureSampleBaseClampToEdge_9ca02c
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/textureSampleBias/1c707e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleBias/1c707e.wgsl.expected.ir.msl
index 33b4d81..ba32ce5 100644
--- a/test/tint/builtins/gen/var/textureSampleBias/1c707e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleBias/1c707e.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleBias_1c707e = func():void -> %b2 {
-  %b2 = block {
+%textureSampleBias_1c707e = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_3:ptr<function, u32, read_write> = var, 1u
     %arg_4:ptr<function, f32, read_write> = var, 1.0f
@@ -23,8 +23,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %17:void = call %textureSampleBias_1c707e
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleBias/53b9f7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleBias/53b9f7.wgsl.expected.ir.msl
index a1dab08..fdba1d3 100644
--- a/test/tint/builtins/gen/var/textureSampleBias/53b9f7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleBias/53b9f7.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleBias_53b9f7 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleBias_53b9f7 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_3:ptr<function, f32, read_write> = var, 1.0f
     %7:texture_cube<f32> = load %arg_0
@@ -21,8 +21,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %15:void = call %textureSampleBias_53b9f7
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleBias/594824.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleBias/594824.wgsl.expected.ir.msl
index 247e86e..042c9aa 100644
--- a/test/tint/builtins/gen/var/textureSampleBias/594824.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleBias/594824.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleBias_594824 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleBias_594824 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_3:ptr<function, f32, read_write> = var, 1.0f
     %7:texture_3d<f32> = load %arg_0
@@ -21,8 +21,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %15:void = call %textureSampleBias_594824
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleBias/6a9113.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleBias/6a9113.wgsl.expected.ir.msl
index dc8eb49..53bd2d1 100644
--- a/test/tint/builtins/gen/var/textureSampleBias/6a9113.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleBias/6a9113.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleBias_6a9113 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleBias_6a9113 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_3:ptr<function, f32, read_write> = var, 1.0f
     %7:texture_2d<f32> = load %arg_0
@@ -21,8 +21,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %15:void = call %textureSampleBias_6a9113
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleBias/80e579.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleBias/80e579.wgsl.expected.ir.msl
index 4183d65..aebc2fb 100644
--- a/test/tint/builtins/gen/var/textureSampleBias/80e579.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleBias/80e579.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleBias_80e579 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleBias_80e579 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_3:ptr<function, i32, read_write> = var, 1i
     %arg_4:ptr<function, f32, read_write> = var, 1.0f
@@ -23,8 +23,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %17:void = call %textureSampleBias_80e579
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleBias/87915c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleBias/87915c.wgsl.expected.ir.msl
index 8910a2b..de5f67f 100644
--- a/test/tint/builtins/gen/var/textureSampleBias/87915c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleBias/87915c.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleBias_87915c = func():void -> %b2 {
-  %b2 = block {
+%textureSampleBias_87915c = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_3:ptr<function, u32, read_write> = var, 1u
     %arg_4:ptr<function, f32, read_write> = var, 1.0f
@@ -23,8 +23,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %17:void = call %textureSampleBias_87915c
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleBias/9dbb51.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleBias/9dbb51.wgsl.expected.ir.msl
index 14602ed..c6c78c6 100644
--- a/test/tint/builtins/gen/var/textureSampleBias/9dbb51.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleBias/9dbb51.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleBias_9dbb51 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleBias_9dbb51 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_3:ptr<function, i32, read_write> = var, 1i
     %arg_4:ptr<function, f32, read_write> = var, 1.0f
@@ -23,8 +23,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %17:void = call %textureSampleBias_9dbb51
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleBias/a161cf.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleBias/a161cf.wgsl.expected.ir.msl
index 3f31c5d..f4a00b4 100644
--- a/test/tint/builtins/gen/var/textureSampleBias/a161cf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleBias/a161cf.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleBias_a161cf = func():void -> %b2 {
-  %b2 = block {
+%textureSampleBias_a161cf = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_3:ptr<function, f32, read_write> = var, 1.0f
     %7:texture_2d<f32> = load %arg_0
@@ -21,8 +21,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %15:void = call %textureSampleBias_a161cf
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleBias/c6953d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleBias/c6953d.wgsl.expected.ir.msl
index 6e1c4f6..6c59e32 100644
--- a/test/tint/builtins/gen/var/textureSampleBias/c6953d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleBias/c6953d.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube_array<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleBias_c6953d = func():void -> %b2 {
-  %b2 = block {
+%textureSampleBias_c6953d = func():void {
+  $B2: {
     %arg_2:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_3:ptr<function, u32, read_write> = var, 1u
     %arg_4:ptr<function, f32, read_write> = var, 1.0f
@@ -23,8 +23,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %17:void = call %textureSampleBias_c6953d
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleBias/d3fa1b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleBias/d3fa1b.wgsl.expected.ir.msl
index b71ef9c..36a611b 100644
--- a/test/tint/builtins/gen/var/textureSampleBias/d3fa1b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleBias/d3fa1b.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleBias_d3fa1b = func():void -> %b2 {
-  %b2 = block {
+%textureSampleBias_d3fa1b = func():void {
+  $B2: {
     %arg_2:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_3:ptr<function, f32, read_write> = var, 1.0f
     %7:texture_3d<f32> = load %arg_0
@@ -21,8 +21,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %15:void = call %textureSampleBias_d3fa1b
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleBias/eed7c4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleBias/eed7c4.wgsl.expected.ir.msl
index d1ae5b0..600eeb2 100644
--- a/test/tint/builtins/gen/var/textureSampleBias/eed7c4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleBias/eed7c4.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube_array<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleBias_eed7c4 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleBias_eed7c4 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_3:ptr<function, i32, read_write> = var, 1i
     %arg_4:ptr<function, f32, read_write> = var, 1.0f
@@ -23,8 +23,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %17:void = call %textureSampleBias_eed7c4
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleCompare/1912e5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleCompare/1912e5.wgsl.expected.ir.msl
index 08f3f89..6d43ab6 100644
--- a/test/tint/builtins/gen/var/textureSampleCompare/1912e5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleCompare/1912e5.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_cube_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler_comparison, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleCompare_1912e5 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleCompare_1912e5 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_3:ptr<function, u32, read_write> = var, 1u
     %arg_4:ptr<function, f32, read_write> = var, 1.0f
@@ -23,8 +23,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %17:void = call %textureSampleCompare_1912e5
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleCompare/3a5923.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleCompare/3a5923.wgsl.expected.ir.msl
index 710a2b2..54b7da4 100644
--- a/test/tint/builtins/gen/var/textureSampleCompare/3a5923.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleCompare/3a5923.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler_comparison, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleCompare_3a5923 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleCompare_3a5923 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_3:ptr<function, f32, read_write> = var, 1.0f
     %7:texture_depth_2d = load %arg_0
@@ -21,8 +21,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %15:void = call %textureSampleCompare_3a5923
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleCompare/63fb83.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleCompare/63fb83.wgsl.expected.ir.msl
index 43def4b..f613406 100644
--- a/test/tint/builtins/gen/var/textureSampleCompare/63fb83.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleCompare/63fb83.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_cube, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler_comparison, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleCompare_63fb83 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleCompare_63fb83 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_3:ptr<function, f32, read_write> = var, 1.0f
     %7:texture_depth_cube = load %arg_0
@@ -21,8 +21,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %15:void = call %textureSampleCompare_63fb83
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleCompare/7b5025.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleCompare/7b5025.wgsl.expected.ir.msl
index c787009..f429ece 100644
--- a/test/tint/builtins/gen/var/textureSampleCompare/7b5025.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleCompare/7b5025.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler_comparison, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleCompare_7b5025 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleCompare_7b5025 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_3:ptr<function, u32, read_write> = var, 1u
     %arg_4:ptr<function, f32, read_write> = var, 1.0f
@@ -23,8 +23,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %17:void = call %textureSampleCompare_7b5025
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleCompare/90ae56.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleCompare/90ae56.wgsl.expected.ir.msl
index b39cb06..9e4f6a8 100644
--- a/test/tint/builtins/gen/var/textureSampleCompare/90ae56.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleCompare/90ae56.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler_comparison, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleCompare_90ae56 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleCompare_90ae56 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_3:ptr<function, u32, read_write> = var, 1u
     %arg_4:ptr<function, f32, read_write> = var, 1.0f
@@ -23,8 +23,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %17:void = call %textureSampleCompare_90ae56
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleCompare/a3ca7e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleCompare/a3ca7e.wgsl.expected.ir.msl
index bb08d1f..00db39e 100644
--- a/test/tint/builtins/gen/var/textureSampleCompare/a3ca7e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleCompare/a3ca7e.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_cube_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler_comparison, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleCompare_a3ca7e = func():void -> %b2 {
-  %b2 = block {
+%textureSampleCompare_a3ca7e = func():void {
+  $B2: {
     %arg_2:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_3:ptr<function, i32, read_write> = var, 1i
     %arg_4:ptr<function, f32, read_write> = var, 1.0f
@@ -23,8 +23,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %17:void = call %textureSampleCompare_a3ca7e
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleCompare/af1051.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleCompare/af1051.wgsl.expected.ir.msl
index 7b538c7..19485be 100644
--- a/test/tint/builtins/gen/var/textureSampleCompare/af1051.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleCompare/af1051.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler_comparison, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleCompare_af1051 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleCompare_af1051 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_3:ptr<function, i32, read_write> = var, 1i
     %arg_4:ptr<function, f32, read_write> = var, 1.0f
@@ -23,8 +23,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %17:void = call %textureSampleCompare_af1051
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleCompare/dd431d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleCompare/dd431d.wgsl.expected.ir.msl
index 9b3f23c..a272cb7 100644
--- a/test/tint/builtins/gen/var/textureSampleCompare/dd431d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleCompare/dd431d.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler_comparison, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleCompare_dd431d = func():void -> %b2 {
-  %b2 = block {
+%textureSampleCompare_dd431d = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_3:ptr<function, i32, read_write> = var, 1i
     %arg_4:ptr<function, f32, read_write> = var, 1.0f
@@ -23,8 +23,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %17:void = call %textureSampleCompare_dd431d
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleCompare/dec064.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleCompare/dec064.wgsl.expected.ir.msl
index 3c7f472..e7bf2cd 100644
--- a/test/tint/builtins/gen/var/textureSampleCompare/dec064.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleCompare/dec064.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler_comparison, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleCompare_dec064 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleCompare_dec064 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_3:ptr<function, f32, read_write> = var, 1.0f
     %7:texture_depth_2d = load %arg_0
@@ -21,8 +21,8 @@
     ret
   }
 }
-%fragment_main = @fragment func():void -> %b3 {
-  %b3 = block {
+%fragment_main = @fragment func():void {
+  $B3: {
     %15:void = call %textureSampleCompare_dec064
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleCompareLevel/1116ed.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleCompareLevel/1116ed.wgsl.expected.ir.msl
index 4d57303..e858897 100644
--- a/test/tint/builtins/gen/var/textureSampleCompareLevel/1116ed.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleCompareLevel/1116ed.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler_comparison, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleCompareLevel_1116ed = func():void -> %b2 {
-  %b2 = block {
+%textureSampleCompareLevel_1116ed = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_3:ptr<function, i32, read_write> = var, 1i
     %arg_4:ptr<function, f32, read_write> = var, 1.0f
@@ -23,20 +23,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %17:void = call %textureSampleCompareLevel_1116ed
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %19:void = call %textureSampleCompareLevel_1116ed
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %21:void = call %textureSampleCompareLevel_1116ed
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleCompareLevel/1568e3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleCompareLevel/1568e3.wgsl.expected.ir.msl
index a0080ea..dca0fd3 100644
--- a/test/tint/builtins/gen/var/textureSampleCompareLevel/1568e3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleCompareLevel/1568e3.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_cube, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler_comparison, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleCompareLevel_1568e3 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleCompareLevel_1568e3 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_3:ptr<function, f32, read_write> = var, 1.0f
     %7:texture_depth_cube = load %arg_0
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureSampleCompareLevel_1568e3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureSampleCompareLevel_1568e3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureSampleCompareLevel_1568e3
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleCompareLevel/2ad2b1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleCompareLevel/2ad2b1.wgsl.expected.ir.msl
index 7de52b6..50be548 100644
--- a/test/tint/builtins/gen/var/textureSampleCompareLevel/2ad2b1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleCompareLevel/2ad2b1.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler_comparison, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleCompareLevel_2ad2b1 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleCompareLevel_2ad2b1 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_3:ptr<function, f32, read_write> = var, 1.0f
     %7:texture_depth_2d = load %arg_0
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureSampleCompareLevel_2ad2b1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureSampleCompareLevel_2ad2b1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureSampleCompareLevel_2ad2b1
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleCompareLevel/4cf3a2.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleCompareLevel/4cf3a2.wgsl.expected.ir.msl
index f505af9..4a9df88 100644
--- a/test/tint/builtins/gen/var/textureSampleCompareLevel/4cf3a2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleCompareLevel/4cf3a2.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_cube_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler_comparison, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleCompareLevel_4cf3a2 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleCompareLevel_4cf3a2 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_3:ptr<function, i32, read_write> = var, 1i
     %arg_4:ptr<function, f32, read_write> = var, 1.0f
@@ -23,20 +23,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %17:void = call %textureSampleCompareLevel_4cf3a2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %19:void = call %textureSampleCompareLevel_4cf3a2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %21:void = call %textureSampleCompareLevel_4cf3a2
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleCompareLevel/7dc3c0.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleCompareLevel/7dc3c0.wgsl.expected.ir.msl
index 6b8d3a1..8e6f626 100644
--- a/test/tint/builtins/gen/var/textureSampleCompareLevel/7dc3c0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleCompareLevel/7dc3c0.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler_comparison, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleCompareLevel_7dc3c0 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleCompareLevel_7dc3c0 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_3:ptr<function, u32, read_write> = var, 1u
     %arg_4:ptr<function, f32, read_write> = var, 1.0f
@@ -23,20 +23,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %17:void = call %textureSampleCompareLevel_7dc3c0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %19:void = call %textureSampleCompareLevel_7dc3c0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %21:void = call %textureSampleCompareLevel_7dc3c0
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleCompareLevel/7f2b9a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleCompareLevel/7f2b9a.wgsl.expected.ir.msl
index 162b998..b4e1932 100644
--- a/test/tint/builtins/gen/var/textureSampleCompareLevel/7f2b9a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleCompareLevel/7f2b9a.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler_comparison, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleCompareLevel_7f2b9a = func():void -> %b2 {
-  %b2 = block {
+%textureSampleCompareLevel_7f2b9a = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_3:ptr<function, f32, read_write> = var, 1.0f
     %7:texture_depth_2d = load %arg_0
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureSampleCompareLevel_7f2b9a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureSampleCompareLevel_7f2b9a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureSampleCompareLevel_7f2b9a
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleCompareLevel/958c87.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleCompareLevel/958c87.wgsl.expected.ir.msl
index d3a766d..e8e8d35 100644
--- a/test/tint/builtins/gen/var/textureSampleCompareLevel/958c87.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleCompareLevel/958c87.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_cube_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler_comparison, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleCompareLevel_958c87 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleCompareLevel_958c87 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_3:ptr<function, u32, read_write> = var, 1u
     %arg_4:ptr<function, f32, read_write> = var, 1.0f
@@ -23,20 +23,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %17:void = call %textureSampleCompareLevel_958c87
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %19:void = call %textureSampleCompareLevel_958c87
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %21:void = call %textureSampleCompareLevel_958c87
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleCompareLevel/b6e47c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleCompareLevel/b6e47c.wgsl.expected.ir.msl
index d6340df..7d63c65 100644
--- a/test/tint/builtins/gen/var/textureSampleCompareLevel/b6e47c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleCompareLevel/b6e47c.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler_comparison, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleCompareLevel_b6e47c = func():void -> %b2 {
-  %b2 = block {
+%textureSampleCompareLevel_b6e47c = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_3:ptr<function, i32, read_write> = var, 1i
     %arg_4:ptr<function, f32, read_write> = var, 1.0f
@@ -23,20 +23,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %17:void = call %textureSampleCompareLevel_b6e47c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %19:void = call %textureSampleCompareLevel_b6e47c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %21:void = call %textureSampleCompareLevel_b6e47c
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleCompareLevel/bcb3dd.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleCompareLevel/bcb3dd.wgsl.expected.ir.msl
index ede2e60..0eeb62e 100644
--- a/test/tint/builtins/gen/var/textureSampleCompareLevel/bcb3dd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleCompareLevel/bcb3dd.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler_comparison, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleCompareLevel_bcb3dd = func():void -> %b2 {
-  %b2 = block {
+%textureSampleCompareLevel_bcb3dd = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_3:ptr<function, u32, read_write> = var, 1u
     %arg_4:ptr<function, f32, read_write> = var, 1.0f
@@ -23,20 +23,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %17:void = call %textureSampleCompareLevel_bcb3dd
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %19:void = call %textureSampleCompareLevel_bcb3dd
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %21:void = call %textureSampleCompareLevel_bcb3dd
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleGrad/21402b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleGrad/21402b.wgsl.expected.ir.msl
index 9de32c8..13ed79d 100644
--- a/test/tint/builtins/gen/var/textureSampleGrad/21402b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleGrad/21402b.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleGrad_21402b = func():void -> %b2 {
-  %b2 = block {
+%textureSampleGrad_21402b = func():void {
+  $B2: {
     %arg_2:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_3:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_4:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
@@ -23,20 +23,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %17:void = call %textureSampleGrad_21402b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %19:void = call %textureSampleGrad_21402b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %21:void = call %textureSampleGrad_21402b
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleGrad/2ecd8f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleGrad/2ecd8f.wgsl.expected.ir.msl
index 5d21289..89150db 100644
--- a/test/tint/builtins/gen/var/textureSampleGrad/2ecd8f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleGrad/2ecd8f.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleGrad_2ecd8f = func():void -> %b2 {
-  %b2 = block {
+%textureSampleGrad_2ecd8f = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_3:ptr<function, i32, read_write> = var, 1i
     %arg_4:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
@@ -25,20 +25,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %19:void = call %textureSampleGrad_2ecd8f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %21:void = call %textureSampleGrad_2ecd8f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %23:void = call %textureSampleGrad_2ecd8f
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleGrad/521263.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleGrad/521263.wgsl.expected.ir.msl
index 88f3792..bd1624b 100644
--- a/test/tint/builtins/gen/var/textureSampleGrad/521263.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleGrad/521263.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleGrad_521263 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleGrad_521263 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_3:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_4:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
@@ -23,20 +23,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %17:void = call %textureSampleGrad_521263
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %19:void = call %textureSampleGrad_521263
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %21:void = call %textureSampleGrad_521263
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleGrad/5312f4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleGrad/5312f4.wgsl.expected.ir.msl
index 78e848b..2ade175 100644
--- a/test/tint/builtins/gen/var/textureSampleGrad/5312f4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleGrad/5312f4.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleGrad_5312f4 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleGrad_5312f4 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_3:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_4:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
@@ -23,20 +23,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %17:void = call %textureSampleGrad_5312f4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %19:void = call %textureSampleGrad_5312f4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %21:void = call %textureSampleGrad_5312f4
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleGrad/5884dd.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleGrad/5884dd.wgsl.expected.ir.msl
index f6395e1..13c6384 100644
--- a/test/tint/builtins/gen/var/textureSampleGrad/5884dd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleGrad/5884dd.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleGrad_5884dd = func():void -> %b2 {
-  %b2 = block {
+%textureSampleGrad_5884dd = func():void {
+  $B2: {
     %arg_2:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_3:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_4:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
@@ -23,20 +23,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %17:void = call %textureSampleGrad_5884dd
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %19:void = call %textureSampleGrad_5884dd
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %21:void = call %textureSampleGrad_5884dd
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleGrad/7cd6de.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleGrad/7cd6de.wgsl.expected.ir.msl
index 16f06ae..f08a74a 100644
--- a/test/tint/builtins/gen/var/textureSampleGrad/7cd6de.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleGrad/7cd6de.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleGrad_7cd6de = func():void -> %b2 {
-  %b2 = block {
+%textureSampleGrad_7cd6de = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_3:ptr<function, u32, read_write> = var, 1u
     %arg_4:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
@@ -25,20 +25,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %19:void = call %textureSampleGrad_7cd6de
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %21:void = call %textureSampleGrad_7cd6de
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %23:void = call %textureSampleGrad_7cd6de
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleGrad/a09131.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleGrad/a09131.wgsl.expected.ir.msl
index 34422ec..3109635 100644
--- a/test/tint/builtins/gen/var/textureSampleGrad/a09131.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleGrad/a09131.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleGrad_a09131 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleGrad_a09131 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_3:ptr<function, u32, read_write> = var, 1u
     %arg_4:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
@@ -25,20 +25,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %19:void = call %textureSampleGrad_a09131
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %21:void = call %textureSampleGrad_a09131
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %23:void = call %textureSampleGrad_a09131
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleGrad/bbb58f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleGrad/bbb58f.wgsl.expected.ir.msl
index 7d36750..aa6adf7 100644
--- a/test/tint/builtins/gen/var/textureSampleGrad/bbb58f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleGrad/bbb58f.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube_array<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleGrad_bbb58f = func():void -> %b2 {
-  %b2 = block {
+%textureSampleGrad_bbb58f = func():void {
+  $B2: {
     %arg_2:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_3:ptr<function, u32, read_write> = var, 1u
     %arg_4:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
@@ -25,20 +25,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %19:void = call %textureSampleGrad_bbb58f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %21:void = call %textureSampleGrad_bbb58f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %23:void = call %textureSampleGrad_bbb58f
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleGrad/d4e3c5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleGrad/d4e3c5.wgsl.expected.ir.msl
index abbd62b..82880bc 100644
--- a/test/tint/builtins/gen/var/textureSampleGrad/d4e3c5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleGrad/d4e3c5.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleGrad_d4e3c5 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleGrad_d4e3c5 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_3:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_4:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
@@ -23,20 +23,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %17:void = call %textureSampleGrad_d4e3c5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %19:void = call %textureSampleGrad_d4e3c5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %21:void = call %textureSampleGrad_d4e3c5
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleGrad/d65515.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleGrad/d65515.wgsl.expected.ir.msl
index b952e1c..ec8b2ec 100644
--- a/test/tint/builtins/gen/var/textureSampleGrad/d65515.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleGrad/d65515.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleGrad_d65515 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleGrad_d65515 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_3:ptr<function, i32, read_write> = var, 1i
     %arg_4:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
@@ -25,20 +25,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %19:void = call %textureSampleGrad_d65515
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %21:void = call %textureSampleGrad_d65515
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %23:void = call %textureSampleGrad_d65515
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleGrad/e383db.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleGrad/e383db.wgsl.expected.ir.msl
index cb9c9ff..34dfdff 100644
--- a/test/tint/builtins/gen/var/textureSampleGrad/e383db.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleGrad/e383db.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube_array<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleGrad_e383db = func():void -> %b2 {
-  %b2 = block {
+%textureSampleGrad_e383db = func():void {
+  $B2: {
     %arg_2:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_3:ptr<function, i32, read_write> = var, 1i
     %arg_4:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
@@ -25,20 +25,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %19:void = call %textureSampleGrad_e383db
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %21:void = call %textureSampleGrad_e383db
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %23:void = call %textureSampleGrad_e383db
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleLevel/02be59.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleLevel/02be59.wgsl.expected.ir.msl
index ebe3ad5..f636a1e 100644
--- a/test/tint/builtins/gen/var/textureSampleLevel/02be59.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleLevel/02be59.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleLevel_02be59 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleLevel_02be59 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_3:ptr<function, i32, read_write> = var, 1i
     %7:texture_depth_2d = load %arg_0
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureSampleLevel_02be59
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureSampleLevel_02be59
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureSampleLevel_02be59
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleLevel/0b0a1b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleLevel/0b0a1b.wgsl.expected.ir.msl
index 6329742..93c08bb 100644
--- a/test/tint/builtins/gen/var/textureSampleLevel/0b0a1b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleLevel/0b0a1b.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleLevel_0b0a1b = func():void -> %b2 {
-  %b2 = block {
+%textureSampleLevel_0b0a1b = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_3:ptr<function, f32, read_write> = var, 1.0f
     %7:texture_2d<f32> = load %arg_0
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureSampleLevel_0b0a1b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureSampleLevel_0b0a1b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureSampleLevel_0b0a1b
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleLevel/0bdd9a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleLevel/0bdd9a.wgsl.expected.ir.msl
index 5134101..26e7592 100644
--- a/test/tint/builtins/gen/var/textureSampleLevel/0bdd9a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleLevel/0bdd9a.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube_array<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleLevel_0bdd9a = func():void -> %b2 {
-  %b2 = block {
+%textureSampleLevel_0bdd9a = func():void {
+  $B2: {
     %arg_2:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_3:ptr<function, i32, read_write> = var, 1i
     %arg_4:ptr<function, f32, read_write> = var, 1.0f
@@ -23,20 +23,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %17:void = call %textureSampleLevel_0bdd9a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %19:void = call %textureSampleLevel_0bdd9a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %21:void = call %textureSampleLevel_0bdd9a
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleLevel/1b0291.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleLevel/1b0291.wgsl.expected.ir.msl
index 941fd91..493a608 100644
--- a/test/tint/builtins/gen/var/textureSampleLevel/1b0291.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleLevel/1b0291.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_cube, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleLevel_1b0291 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleLevel_1b0291 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_3:ptr<function, i32, read_write> = var, 1i
     %7:texture_depth_cube = load %arg_0
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureSampleLevel_1b0291
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureSampleLevel_1b0291
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureSampleLevel_1b0291
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleLevel/1bf73e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleLevel/1bf73e.wgsl.expected.ir.msl
index e94e664..ff9ed6a 100644
--- a/test/tint/builtins/gen/var/textureSampleLevel/1bf73e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleLevel/1bf73e.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleLevel_1bf73e = func():void -> %b2 {
-  %b2 = block {
+%textureSampleLevel_1bf73e = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_3:ptr<function, i32, read_write> = var, 1i
     %arg_4:ptr<function, i32, read_write> = var, 1i
@@ -23,20 +23,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %17:void = call %textureSampleLevel_1bf73e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %19:void = call %textureSampleLevel_1bf73e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %21:void = call %textureSampleLevel_1bf73e
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleLevel/265cc7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleLevel/265cc7.wgsl.expected.ir.msl
index 00fa751..ffe7d11 100644
--- a/test/tint/builtins/gen/var/textureSampleLevel/265cc7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleLevel/265cc7.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleLevel_265cc7 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleLevel_265cc7 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_3:ptr<function, u32, read_write> = var, 1u
     %arg_4:ptr<function, f32, read_write> = var, 1.0f
@@ -23,20 +23,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %17:void = call %textureSampleLevel_265cc7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %19:void = call %textureSampleLevel_265cc7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %21:void = call %textureSampleLevel_265cc7
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleLevel/2974eb.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleLevel/2974eb.wgsl.expected.ir.msl
index 508de8b..a00c0ab 100644
--- a/test/tint/builtins/gen/var/textureSampleLevel/2974eb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleLevel/2974eb.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleLevel_2974eb = func():void -> %b2 {
-  %b2 = block {
+%textureSampleLevel_2974eb = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_3:ptr<function, i32, read_write> = var, 1i
     %arg_4:ptr<function, u32, read_write> = var, 1u
@@ -23,20 +23,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %17:void = call %textureSampleLevel_2974eb
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %19:void = call %textureSampleLevel_2974eb
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %21:void = call %textureSampleLevel_2974eb
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleLevel/302be4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleLevel/302be4.wgsl.expected.ir.msl
index 147f11d..aa7c693 100644
--- a/test/tint/builtins/gen/var/textureSampleLevel/302be4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleLevel/302be4.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleLevel_302be4 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleLevel_302be4 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_3:ptr<function, i32, read_write> = var, 1i
     %arg_4:ptr<function, f32, read_write> = var, 1.0f
@@ -23,20 +23,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %17:void = call %textureSampleLevel_302be4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %19:void = call %textureSampleLevel_302be4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %21:void = call %textureSampleLevel_302be4
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleLevel/36780e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleLevel/36780e.wgsl.expected.ir.msl
index 1e5c00c..b277f87 100644
--- a/test/tint/builtins/gen/var/textureSampleLevel/36780e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleLevel/36780e.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleLevel_36780e = func():void -> %b2 {
-  %b2 = block {
+%textureSampleLevel_36780e = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_3:ptr<function, i32, read_write> = var, 1i
     %arg_4:ptr<function, i32, read_write> = var, 1i
@@ -23,20 +23,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %17:void = call %textureSampleLevel_36780e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %19:void = call %textureSampleLevel_36780e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %21:void = call %textureSampleLevel_36780e
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleLevel/36f0d3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleLevel/36f0d3.wgsl.expected.ir.msl
index b776c07..0767259 100644
--- a/test/tint/builtins/gen/var/textureSampleLevel/36f0d3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleLevel/36f0d3.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleLevel_36f0d3 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleLevel_36f0d3 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_3:ptr<function, i32, read_write> = var, 1i
     %arg_4:ptr<function, u32, read_write> = var, 1u
@@ -23,20 +23,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %17:void = call %textureSampleLevel_36f0d3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %19:void = call %textureSampleLevel_36f0d3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %21:void = call %textureSampleLevel_36f0d3
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleLevel/3c3442.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleLevel/3c3442.wgsl.expected.ir.msl
index d9b1b67..a36a9f6 100644
--- a/test/tint/builtins/gen/var/textureSampleLevel/3c3442.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleLevel/3c3442.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleLevel_3c3442 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleLevel_3c3442 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_3:ptr<function, u32, read_write> = var, 1u
     %arg_4:ptr<function, i32, read_write> = var, 1i
@@ -23,20 +23,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %17:void = call %textureSampleLevel_3c3442
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %19:void = call %textureSampleLevel_3c3442
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %21:void = call %textureSampleLevel_3c3442
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleLevel/615583.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleLevel/615583.wgsl.expected.ir.msl
index 8b708ad..18e6868 100644
--- a/test/tint/builtins/gen/var/textureSampleLevel/615583.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleLevel/615583.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleLevel_615583 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleLevel_615583 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_3:ptr<function, u32, read_write> = var, 1u
     %arg_4:ptr<function, u32, read_write> = var, 1u
@@ -23,20 +23,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %17:void = call %textureSampleLevel_615583
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %19:void = call %textureSampleLevel_615583
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %21:void = call %textureSampleLevel_615583
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleLevel/73e892.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleLevel/73e892.wgsl.expected.ir.msl
index e00afc4..0768be4 100644
--- a/test/tint/builtins/gen/var/textureSampleLevel/73e892.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleLevel/73e892.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleLevel_73e892 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleLevel_73e892 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_3:ptr<function, u32, read_write> = var, 1u
     %7:texture_depth_2d = load %arg_0
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureSampleLevel_73e892
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureSampleLevel_73e892
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureSampleLevel_73e892
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleLevel/749baf.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleLevel/749baf.wgsl.expected.ir.msl
index 74f15f7..c6ea513 100644
--- a/test/tint/builtins/gen/var/textureSampleLevel/749baf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleLevel/749baf.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleLevel_749baf = func():void -> %b2 {
-  %b2 = block {
+%textureSampleLevel_749baf = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_3:ptr<function, i32, read_write> = var, 1i
     %7:texture_depth_2d = load %arg_0
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureSampleLevel_749baf
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureSampleLevel_749baf
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureSampleLevel_749baf
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleLevel/941a53.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleLevel/941a53.wgsl.expected.ir.msl
index f85b91e..1646df6 100644
--- a/test/tint/builtins/gen/var/textureSampleLevel/941a53.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleLevel/941a53.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_cube_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleLevel_941a53 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleLevel_941a53 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_3:ptr<function, u32, read_write> = var, 1u
     %arg_4:ptr<function, u32, read_write> = var, 1u
@@ -23,20 +23,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %17:void = call %textureSampleLevel_941a53
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %19:void = call %textureSampleLevel_941a53
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %21:void = call %textureSampleLevel_941a53
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleLevel/a12142.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleLevel/a12142.wgsl.expected.ir.msl
index 6b7792a..f5fac29 100644
--- a/test/tint/builtins/gen/var/textureSampleLevel/a12142.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleLevel/a12142.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_cube_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleLevel_a12142 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleLevel_a12142 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_3:ptr<function, i32, read_write> = var, 1i
     %arg_4:ptr<function, u32, read_write> = var, 1u
@@ -23,20 +23,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %17:void = call %textureSampleLevel_a12142
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %19:void = call %textureSampleLevel_a12142
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %21:void = call %textureSampleLevel_a12142
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleLevel/aab3b9.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleLevel/aab3b9.wgsl.expected.ir.msl
index 51387a2..c9fa989 100644
--- a/test/tint/builtins/gen/var/textureSampleLevel/aab3b9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleLevel/aab3b9.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube_array<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleLevel_aab3b9 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleLevel_aab3b9 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_3:ptr<function, u32, read_write> = var, 1u
     %arg_4:ptr<function, f32, read_write> = var, 1.0f
@@ -23,20 +23,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %17:void = call %textureSampleLevel_aab3b9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %19:void = call %textureSampleLevel_aab3b9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %21:void = call %textureSampleLevel_aab3b9
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleLevel/abfcc0.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleLevel/abfcc0.wgsl.expected.ir.msl
index dfcc61c..794ad6f 100644
--- a/test/tint/builtins/gen/var/textureSampleLevel/abfcc0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleLevel/abfcc0.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleLevel_abfcc0 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleLevel_abfcc0 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_3:ptr<function, f32, read_write> = var, 1.0f
     %7:texture_3d<f32> = load %arg_0
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureSampleLevel_abfcc0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureSampleLevel_abfcc0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureSampleLevel_abfcc0
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleLevel/ae5e39.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleLevel/ae5e39.wgsl.expected.ir.msl
index 499712a..db5749f 100644
--- a/test/tint/builtins/gen/var/textureSampleLevel/ae5e39.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleLevel/ae5e39.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_cube_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleLevel_ae5e39 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleLevel_ae5e39 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_3:ptr<function, i32, read_write> = var, 1i
     %arg_4:ptr<function, i32, read_write> = var, 1i
@@ -23,20 +23,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %17:void = call %textureSampleLevel_ae5e39
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %19:void = call %textureSampleLevel_ae5e39
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %21:void = call %textureSampleLevel_ae5e39
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleLevel/ae92a2.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleLevel/ae92a2.wgsl.expected.ir.msl
index 51b488e..fee4a3e 100644
--- a/test/tint/builtins/gen/var/textureSampleLevel/ae92a2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleLevel/ae92a2.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_cube, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleLevel_ae92a2 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleLevel_ae92a2 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_3:ptr<function, u32, read_write> = var, 1u
     %7:texture_depth_cube = load %arg_0
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureSampleLevel_ae92a2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureSampleLevel_ae92a2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureSampleLevel_ae92a2
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleLevel/b7c55c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleLevel/b7c55c.wgsl.expected.ir.msl
index d0c9983..7d18dc0 100644
--- a/test/tint/builtins/gen/var/textureSampleLevel/b7c55c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleLevel/b7c55c.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleLevel_b7c55c = func():void -> %b2 {
-  %b2 = block {
+%textureSampleLevel_b7c55c = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_3:ptr<function, i32, read_write> = var, 1i
     %arg_4:ptr<function, f32, read_write> = var, 1.0f
@@ -23,20 +23,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %17:void = call %textureSampleLevel_b7c55c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %19:void = call %textureSampleLevel_b7c55c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %21:void = call %textureSampleLevel_b7c55c
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleLevel/c32df7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleLevel/c32df7.wgsl.expected.ir.msl
index 5ac545a..c0418b3 100644
--- a/test/tint/builtins/gen/var/textureSampleLevel/c32df7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleLevel/c32df7.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_cube<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleLevel_c32df7 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleLevel_c32df7 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_3:ptr<function, f32, read_write> = var, 1.0f
     %7:texture_cube<f32> = load %arg_0
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureSampleLevel_c32df7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureSampleLevel_c32df7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureSampleLevel_c32df7
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleLevel/c6aca6.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleLevel/c6aca6.wgsl.expected.ir.msl
index d1c0d09..ad808bc 100644
--- a/test/tint/builtins/gen/var/textureSampleLevel/c6aca6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleLevel/c6aca6.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleLevel_c6aca6 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleLevel_c6aca6 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_3:ptr<function, f32, read_write> = var, 1.0f
     %7:texture_2d<f32> = load %arg_0
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureSampleLevel_c6aca6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureSampleLevel_c6aca6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureSampleLevel_c6aca6
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleLevel/cdfe0f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleLevel/cdfe0f.wgsl.expected.ir.msl
index 3f5adb9..bf7cc92 100644
--- a/test/tint/builtins/gen/var/textureSampleLevel/cdfe0f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleLevel/cdfe0f.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleLevel_cdfe0f = func():void -> %b2 {
-  %b2 = block {
+%textureSampleLevel_cdfe0f = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_3:ptr<function, u32, read_write> = var, 1u
     %arg_4:ptr<function, u32, read_write> = var, 1u
@@ -23,20 +23,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %17:void = call %textureSampleLevel_cdfe0f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %19:void = call %textureSampleLevel_cdfe0f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %21:void = call %textureSampleLevel_cdfe0f
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleLevel/dcbecb.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleLevel/dcbecb.wgsl.expected.ir.msl
index 3cb29e8..d8ab40c 100644
--- a/test/tint/builtins/gen/var/textureSampleLevel/dcbecb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleLevel/dcbecb.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_3d<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleLevel_dcbecb = func():void -> %b2 {
-  %b2 = block {
+%textureSampleLevel_dcbecb = func():void {
+  $B2: {
     %arg_2:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_3:ptr<function, f32, read_write> = var, 1.0f
     %7:texture_3d<f32> = load %arg_0
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureSampleLevel_dcbecb
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureSampleLevel_dcbecb
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureSampleLevel_dcbecb
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleLevel/e6ce9e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleLevel/e6ce9e.wgsl.expected.ir.msl
index ce3c523..6dfcba4 100644
--- a/test/tint/builtins/gen/var/textureSampleLevel/e6ce9e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleLevel/e6ce9e.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleLevel_e6ce9e = func():void -> %b2 {
-  %b2 = block {
+%textureSampleLevel_e6ce9e = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_3:ptr<function, u32, read_write> = var, 1u
     %arg_4:ptr<function, i32, read_write> = var, 1i
@@ -23,20 +23,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %17:void = call %textureSampleLevel_e6ce9e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %19:void = call %textureSampleLevel_e6ce9e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %21:void = call %textureSampleLevel_e6ce9e
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleLevel/f3b2c8.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleLevel/f3b2c8.wgsl.expected.ir.msl
index 0588c68..4f84a49 100644
--- a/test/tint/builtins/gen/var/textureSampleLevel/f3b2c8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleLevel/f3b2c8.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_2d, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleLevel_f3b2c8 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleLevel_f3b2c8 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_3:ptr<function, u32, read_write> = var, 1u
     %7:texture_depth_2d = load %arg_0
@@ -21,20 +21,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %15:void = call %textureSampleLevel_f3b2c8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %17:void = call %textureSampleLevel_f3b2c8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %19:void = call %textureSampleLevel_f3b2c8
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleLevel/faa6d7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleLevel/faa6d7.wgsl.expected.ir.msl
index 294b071..0a6daf2 100644
--- a/test/tint/builtins/gen/var/textureSampleLevel/faa6d7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleLevel/faa6d7.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleLevel_faa6d7 = func():void -> %b2 {
-  %b2 = block {
+%textureSampleLevel_faa6d7 = func():void {
+  $B2: {
     %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
     %arg_3:ptr<function, u32, read_write> = var, 1u
     %arg_4:ptr<function, f32, read_write> = var, 1.0f
@@ -23,20 +23,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %17:void = call %textureSampleLevel_faa6d7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %19:void = call %textureSampleLevel_faa6d7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %21:void = call %textureSampleLevel_faa6d7
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureSampleLevel/ff11bc.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleLevel/ff11bc.wgsl.expected.ir.msl
index 55f69f5..548ac4e 100644
--- a/test/tint/builtins/gen/var/textureSampleLevel/ff11bc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleLevel/ff11bc.wgsl.expected.ir.msl
@@ -1,13 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_depth_cube_array, read> = var @binding_point(1, 0)
   %arg_1:ptr<handle, sampler, read> = var @binding_point(1, 1)
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%textureSampleLevel_ff11bc = func():void -> %b2 {
-  %b2 = block {
+%textureSampleLevel_ff11bc = func():void {
+  $B2: {
     %arg_2:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.0f)
     %arg_3:ptr<function, u32, read_write> = var, 1u
     %arg_4:ptr<function, i32, read_write> = var, 1i
@@ -23,20 +23,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %17:void = call %textureSampleLevel_ff11bc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %19:void = call %textureSampleLevel_ff11bc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %21:void = call %textureSampleLevel_ff11bc
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/00ca64.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/00ca64.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/00ca64.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/00ca64.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/0148bd.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/0148bd.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/0148bd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/0148bd.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/031506.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/031506.wgsl.expected.ir.msl
index e349c38..1a9f15b 100644
--- a/test/tint/builtins/gen/var/textureStore/031506.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/031506.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<r32float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_031506 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_031506 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %5:texture_storage_2d<r32float, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_031506
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_031506
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_031506
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/036d0e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/036d0e.wgsl.expected.ir.msl
index 1a42492..770b286 100644
--- a/test/tint/builtins/gen/var/textureStore/036d0e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/036d0e.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_036d0e = func():void -> %b2 {
-  %b2 = block {
+%textureStore_036d0e = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %5:texture_storage_3d<rgba8unorm, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_036d0e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_036d0e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_036d0e
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/03e7a0.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/03e7a0.wgsl.expected.ir.msl
index 7728329..49adaf9 100644
--- a/test/tint/builtins/gen/var/textureStore/03e7a0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/03e7a0.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba16uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_03e7a0 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_03e7a0 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
     %5:texture_storage_2d<rgba16uint, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_03e7a0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_03e7a0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_03e7a0
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/042b06.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/042b06.wgsl.expected.ir.msl
index 68fdef6..cd6458a 100644
--- a/test/tint/builtins/gen/var/textureStore/042b06.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/042b06.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_042b06 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_042b06 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_042b06
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_042b06
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_042b06
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/052a4e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/052a4e.wgsl.expected.ir.msl
index 6f0a754..dd07330 100644
--- a/test/tint/builtins/gen/var/textureStore/052a4e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/052a4e.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_052a4e = func():void -> %b2 {
-  %b2 = block {
+%textureStore_052a4e = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %5:texture_storage_1d<rgba8unorm, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_052a4e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_052a4e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_052a4e
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/053664.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/053664.wgsl.expected.ir.msl
index 40eb785..5f306fb 100644
--- a/test/tint/builtins/gen/var/textureStore/053664.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/053664.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_053664 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_053664 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_053664
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_053664
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_053664
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/05ce15.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/05ce15.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/05ce15.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/05ce15.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/064c7f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/064c7f.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/064c7f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/064c7f.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/068641.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/068641.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/068641.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/068641.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/06e49c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/06e49c.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/06e49c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/06e49c.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/07548b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/07548b.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/07548b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/07548b.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/09e4d5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/09e4d5.wgsl.expected.ir.msl
index a2cc970..3a40e3a 100644
--- a/test/tint/builtins/gen/var/textureStore/09e4d5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/09e4d5.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_09e4d5 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_09e4d5 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %5:texture_storage_1d<bgra8unorm, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_09e4d5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_09e4d5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_09e4d5
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/0a1a79.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/0a1a79.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/0a1a79.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/0a1a79.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/0ad124.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/0ad124.wgsl.expected.ir.msl
new file mode 100644
index 0000000..0d98c68
--- /dev/null
+++ b/test/tint/builtins/gen/var/textureStore/0ad124.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_1d<r8unorm, read_write>, read> = var @binding_point(1, 0)
+}
+
+%textureStore_0ad124 = func():void {
+  $B2: {
+    %arg_1:ptr<function, i32, read_write> = var, 1i
+    %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
+    %5:texture_storage_1d<r8unorm, read_write> = load %arg_0
+    %6:i32 = load %arg_1
+    %7:vec4<f32> = load %arg_2
+    %8:void = textureStore %5, %6, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %10:void = call %textureStore_0ad124
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %12:void = call %textureStore_0ad124
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %14:void = call %textureStore_0ad124
+    ret
+  }
+}
+
+invalid access control for storage texture
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/0ade9a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/0ade9a.wgsl.expected.ir.msl
index ac09e7e..b810d24 100644
--- a/test/tint/builtins/gen/var/textureStore/0ade9a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/0ade9a.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_0ade9a = func():void -> %b2 {
-  %b2 = block {
+%textureStore_0ade9a = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %arg_3:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_0ade9a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_0ade9a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_0ade9a
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/0af6b5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/0af6b5.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/0af6b5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/0af6b5.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/0c3dff.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/0c3dff.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/0c3dff.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/0c3dff.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/0cc825.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/0cc825.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/0cc825.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/0cc825.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/0ff97a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/0ff97a.wgsl.expected.ir.msl
index 6e1fb3c..8222399 100644
--- a/test/tint/builtins/gen/var/textureStore/0ff97a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/0ff97a.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_0ff97a = func():void -> %b2 {
-  %b2 = block {
+%textureStore_0ff97a = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_0ff97a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_0ff97a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_0ff97a
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/101325.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/101325.wgsl.expected.ir.msl
index cffe3b4..52e456f 100644
--- a/test/tint/builtins/gen/var/textureStore/101325.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/101325.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba16uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_101325 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_101325 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
     %5:texture_storage_3d<rgba16uint, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_101325
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_101325
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_101325
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/102722.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/102722.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/102722.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/102722.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/145061.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/145061.wgsl.expected.ir.msl
index 843037f..0048053 100644
--- a/test/tint/builtins/gen/var/textureStore/145061.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/145061.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba16uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_145061 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_145061 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
     %5:texture_storage_2d<rgba16uint, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_145061
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_145061
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_145061
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/158cf0.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/158cf0.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/158cf0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/158cf0.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/178e69.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/178e69.wgsl.expected.ir.msl
index 2100fdb..9c29733 100644
--- a/test/tint/builtins/gen/var/textureStore/178e69.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/178e69.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_178e69 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_178e69 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %5:texture_storage_1d<bgra8unorm, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_178e69
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_178e69
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_178e69
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/1839f2.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/1839f2.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/1839f2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/1839f2.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/195d1b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/195d1b.wgsl.expected.ir.msl
index 3dd1697..e19a985 100644
--- a/test/tint/builtins/gen/var/textureStore/195d1b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/195d1b.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba32float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_195d1b = func():void -> %b2 {
-  %b2 = block {
+%textureStore_195d1b = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %5:texture_storage_3d<rgba32float, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_195d1b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_195d1b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_195d1b
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/197637.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/197637.wgsl.expected.ir.msl
index 76b2ccc..cea31e8 100644
--- a/test/tint/builtins/gen/var/textureStore/197637.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/197637.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba32float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_197637 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_197637 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %5:texture_storage_1d<rgba32float, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_197637
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_197637
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_197637
     ret
   }
diff --git a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/1a264d.wgsl.expected.ir.msl
similarity index 75%
copy from test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.ir.msl
copy to test/tint/builtins/gen/var/textureStore/1a264d.wgsl.expected.ir.msl
index efdd3b1..877ebc6 100644
--- a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/1a264d.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/1a6c0b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/1a6c0b.wgsl.expected.ir.msl
index 77d2f58..0cdb6f7 100644
--- a/test/tint/builtins/gen/var/textureStore/1a6c0b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/1a6c0b.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_1a6c0b = func():void -> %b2 {
-  %b2 = block {
+%textureStore_1a6c0b = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %arg_3:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_1a6c0b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_1a6c0b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_1a6c0b
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/1a7d35.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/1a7d35.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/1a7d35.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/1a7d35.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/1af236.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/1af236.wgsl.expected.ir.msl
index eace132..4637a26 100644
--- a/test/tint/builtins/gen/var/textureStore/1af236.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/1af236.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_1af236 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_1af236 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_1af236
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_1af236
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_1af236
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/1bbd08.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/1bbd08.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/1bbd08.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/1bbd08.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/1c02e7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/1c02e7.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/1c02e7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/1c02e7.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/1dc954.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/1dc954.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/1dc954.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/1dc954.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/1e20f2.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/1e20f2.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/1e20f2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/1e20f2.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/1e79f0.wgsl.expected.ir.msl
similarity index 75%
copy from test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.ir.msl
copy to test/tint/builtins/gen/var/textureStore/1e79f0.wgsl.expected.ir.msl
index efdd3b1..877ebc6 100644
--- a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/1e79f0.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/1e9fbd.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/1e9fbd.wgsl.expected.ir.msl
index 24a8f95..8dbedec 100644
--- a/test/tint/builtins/gen/var/textureStore/1e9fbd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/1e9fbd.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_1e9fbd = func():void -> %b2 {
-  %b2 = block {
+%textureStore_1e9fbd = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %arg_3:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_1e9fbd
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_1e9fbd
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_1e9fbd
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/1efc36.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/1efc36.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/1efc36.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/1efc36.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/1f1ef8.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/1f1ef8.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/1f1ef8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/1f1ef8.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/1fef04.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/1fef04.wgsl.expected.ir.msl
index 0c27d5c..a03a8b97 100644
--- a/test/tint/builtins/gen/var/textureStore/1fef04.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/1fef04.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<r32sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_1fef04 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_1fef04 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %5:texture_storage_1d<r32sint, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_1fef04
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_1fef04
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_1fef04
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/2046db.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/2046db.wgsl.expected.ir.msl
index c57ec4b..e1856f1 100644
--- a/test/tint/builtins/gen/var/textureStore/2046db.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/2046db.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_2046db = func():void -> %b2 {
-  %b2 = block {
+%textureStore_2046db = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_2046db
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_2046db
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_2046db
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/207fdd.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/207fdd.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/207fdd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/207fdd.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/2173fd.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/2173fd.wgsl.expected.ir.msl
index 33b4ea7..eed9603 100644
--- a/test/tint/builtins/gen/var/textureStore/2173fd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/2173fd.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba32uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_2173fd = func():void -> %b2 {
-  %b2 = block {
+%textureStore_2173fd = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
     %5:texture_storage_1d<rgba32uint, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_2173fd
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_2173fd
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_2173fd
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/22d955.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/22d955.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/22d955.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/22d955.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/22f045.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/22f045.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/22f045.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/22f045.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/2383fc.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/2383fc.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/2383fc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/2383fc.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/24e6b7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/24e6b7.wgsl.expected.ir.msl
index 4c41eea..24c6eac 100644
--- a/test/tint/builtins/gen/var/textureStore/24e6b7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/24e6b7.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<r32sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_24e6b7 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_24e6b7 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %5:texture_storage_3d<r32sint, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_24e6b7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_24e6b7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_24e6b7
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/258ab0.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/258ab0.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/258ab0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/258ab0.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/26a26d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/26a26d.wgsl.expected.ir.msl
index 8bfc70c..14a1c69 100644
--- a/test/tint/builtins/gen/var/textureStore/26a26d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/26a26d.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_26a26d = func():void -> %b2 {
-  %b2 = block {
+%textureStore_26a26d = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %5:texture_storage_1d<rgba8snorm, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_26a26d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_26a26d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_26a26d
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/26bf70.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/26bf70.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/26bf70.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/26bf70.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/27063a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/27063a.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/27063a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/27063a.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/272f5a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/272f5a.wgsl.expected.ir.msl
new file mode 100644
index 0000000..eb6f06b
--- /dev/null
+++ b/test/tint/builtins/gen/var/textureStore/272f5a.wgsl.expected.ir.msl
@@ -0,0 +1,45 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_2d_array<r8unorm, read_write>, read> = var @binding_point(1, 0)
+}
+
+%textureStore_272f5a = func():void {
+  $B2: {
+    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
+    %arg_2:ptr<function, u32, read_write> = var, 1u
+    %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
+    %6:texture_storage_2d_array<r8unorm, read_write> = load %arg_0
+    %7:vec2<i32> = load %arg_1
+    %8:u32 = load %arg_2
+    %9:vec4<f32> = load %arg_3
+    %10:void = textureStore %6, %7, %8, %9
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %12:void = call %textureStore_272f5a
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %14:void = call %textureStore_272f5a
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %16:void = call %textureStore_272f5a
+    ret
+  }
+}
+
+invalid access control for storage texture
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/2796b4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/2796b4.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/2796b4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/2796b4.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/285218.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/285218.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/285218.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/285218.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/28a7ec.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/28a7ec.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/28a7ec.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/28a7ec.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/28e109.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/28e109.wgsl.expected.ir.msl
index 2e14f5c..232c6c1 100644
--- a/test/tint/builtins/gen/var/textureStore/28e109.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/28e109.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_28e109 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_28e109 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %5:texture_storage_2d<rgba8sint, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_28e109
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_28e109
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_28e109
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/2a60c9.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/2a60c9.wgsl.expected.ir.msl
index 5583dbf..28cb358 100644
--- a/test/tint/builtins/gen/var/textureStore/2a60c9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/2a60c9.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_2a60c9 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_2a60c9 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %arg_3:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_2a60c9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_2a60c9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_2a60c9
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/2ac6c7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/2ac6c7.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/2ac6c7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/2ac6c7.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/2addd6.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/2addd6.wgsl.expected.ir.msl
index 080beb5..6a12ad7 100644
--- a/test/tint/builtins/gen/var/textureStore/2addd6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/2addd6.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_2addd6 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_2addd6 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %arg_3:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_2addd6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_2addd6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_2addd6
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/2c76db.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/2c76db.wgsl.expected.ir.msl
index c6560e1..19654fb 100644
--- a/test/tint/builtins/gen/var/textureStore/2c76db.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/2c76db.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_2c76db = func():void -> %b2 {
-  %b2 = block {
+%textureStore_2c76db = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %5:texture_storage_2d<rgba8snorm, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_2c76db
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_2c76db
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_2c76db
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/2d2835.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/2d2835.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/2d2835.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/2d2835.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/2e4245.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/2e4245.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/2e4245.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/2e4245.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/2e512f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/2e512f.wgsl.expected.ir.msl
new file mode 100644
index 0000000..6eacff7
--- /dev/null
+++ b/test/tint/builtins/gen/var/textureStore/2e512f.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_2d<r8unorm, read_write>, read> = var @binding_point(1, 0)
+}
+
+%textureStore_2e512f = func():void {
+  $B2: {
+    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
+    %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
+    %5:texture_storage_2d<r8unorm, read_write> = load %arg_0
+    %6:vec2<u32> = load %arg_1
+    %7:vec4<f32> = load %arg_2
+    %8:void = textureStore %5, %6, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %10:void = call %textureStore_2e512f
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %12:void = call %textureStore_2e512f
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %14:void = call %textureStore_2e512f
+    ret
+  }
+}
+
+invalid access control for storage texture
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/2e6102.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/2e6102.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/2e6102.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/2e6102.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/2eb2a4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/2eb2a4.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/2eb2a4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/2eb2a4.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/2ed2a3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/2ed2a3.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/2ed2a3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/2ed2a3.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/2f29ea.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/2f29ea.wgsl.expected.ir.msl
index 327cf95..054d228 100644
--- a/test/tint/builtins/gen/var/textureStore/2f29ea.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/2f29ea.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba32sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_2f29ea = func():void -> %b2 {
-  %b2 = block {
+%textureStore_2f29ea = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %5:texture_storage_2d<rgba32sint, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_2f29ea
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_2f29ea
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_2f29ea
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/30b0b0.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/30b0b0.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/30b0b0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/30b0b0.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/312f27.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/312f27.wgsl.expected.ir.msl
index d4e52a0..f78ff10 100644
--- a/test/tint/builtins/gen/var/textureStore/312f27.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/312f27.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_312f27 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_312f27 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_312f27
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_312f27
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_312f27
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/31745b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/31745b.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/31745b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/31745b.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/319029.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/319029.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/319029.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/319029.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/32d3d6.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/32d3d6.wgsl.expected.ir.msl
index 0b46a7d..1df4ada 100644
--- a/test/tint/builtins/gen/var/textureStore/32d3d6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/32d3d6.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<r32uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_32d3d6 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_32d3d6 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
     %5:texture_storage_1d<r32uint, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_32d3d6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_32d3d6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_32d3d6
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/32f368.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/32f368.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/32f368.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/32f368.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/330b7c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/330b7c.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/330b7c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/330b7c.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/3310d3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/3310d3.wgsl.expected.ir.msl
index 00f2ff5..6e8e0c3 100644
--- a/test/tint/builtins/gen/var/textureStore/3310d3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/3310d3.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_3310d3 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_3310d3 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_3310d3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_3310d3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_3310d3
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/331aee.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/331aee.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/331aee.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/331aee.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/33cec0.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/33cec0.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/33cec0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/33cec0.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/345332.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/345332.wgsl.expected.ir.msl
index 6f0d3a1..84f5c73 100644
--- a/test/tint/builtins/gen/var/textureStore/345332.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/345332.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_345332 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_345332 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
     %5:texture_storage_2d<rgba8uint, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_345332
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_345332
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_345332
     ret
   }
diff --git a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/37eeef.wgsl.expected.ir.msl
similarity index 75%
copy from test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.ir.msl
copy to test/tint/builtins/gen/var/textureStore/37eeef.wgsl.expected.ir.msl
index efdd3b1..877ebc6 100644
--- a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/37eeef.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/37ffd4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/37ffd4.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/37ffd4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/37ffd4.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/38e8d7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/38e8d7.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/38e8d7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/38e8d7.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/3a52ac.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/3a52ac.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/3a52ac.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/3a52ac.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/3bb7a1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/3bb7a1.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/3bb7a1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/3bb7a1.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/3bec15.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/3bec15.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/3bec15.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/3bec15.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/3c1937.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/3c1937.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/3c1937.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/3c1937.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/3d1ebe.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/3d1ebe.wgsl.expected.ir.msl
index bf38e9c..3fc29a2 100644
--- a/test/tint/builtins/gen/var/textureStore/3d1ebe.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/3d1ebe.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<r32float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_3d1ebe = func():void -> %b2 {
-  %b2 = block {
+%textureStore_3d1ebe = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %5:texture_storage_2d<r32float, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_3d1ebe
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_3d1ebe
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_3d1ebe
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/3d6f01.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/3d6f01.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/3d6f01.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/3d6f01.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/3d96a4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/3d96a4.wgsl.expected.ir.msl
index aa55869..979d34ff 100644
--- a/test/tint/builtins/gen/var/textureStore/3d96a4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/3d96a4.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba32sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_3d96a4 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_3d96a4 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %5:texture_storage_3d<rgba32sint, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_3d96a4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_3d96a4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_3d96a4
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/3e0dc4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/3e0dc4.wgsl.expected.ir.msl
index e087fe0..3ed6786 100644
--- a/test/tint/builtins/gen/var/textureStore/3e0dc4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/3e0dc4.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_3e0dc4 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_3e0dc4 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_3e0dc4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_3e0dc4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_3e0dc4
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/3f61ca.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/3f61ca.wgsl.expected.ir.msl
index b176daa..2907fe9 100644
--- a/test/tint/builtins/gen/var/textureStore/3f61ca.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/3f61ca.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_3f61ca = func():void -> %b2 {
-  %b2 = block {
+%textureStore_3f61ca = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %5:texture_storage_3d<rgba8snorm, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_3f61ca
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_3f61ca
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_3f61ca
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/3fb31f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/3fb31f.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/3fb31f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/3fb31f.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/40c455.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/40c455.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/40c455.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/40c455.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/4288fc.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/4288fc.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/4288fc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/4288fc.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/43d1df.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/43d1df.wgsl.expected.ir.msl
new file mode 100644
index 0000000..4b1a6fc
--- /dev/null
+++ b/test/tint/builtins/gen/var/textureStore/43d1df.wgsl.expected.ir.msl
@@ -0,0 +1,45 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_2d_array<r8unorm, read_write>, read> = var @binding_point(1, 0)
+}
+
+%textureStore_43d1df = func():void {
+  $B2: {
+    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
+    %arg_2:ptr<function, i32, read_write> = var, 1i
+    %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
+    %6:texture_storage_2d_array<r8unorm, read_write> = load %arg_0
+    %7:vec2<i32> = load %arg_1
+    %8:i32 = load %arg_2
+    %9:vec4<f32> = load %arg_3
+    %10:void = textureStore %6, %7, %8, %9
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %12:void = call %textureStore_43d1df
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %14:void = call %textureStore_43d1df
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %16:void = call %textureStore_43d1df
+    ret
+  }
+}
+
+invalid access control for storage texture
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/441222.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/441222.wgsl.expected.ir.msl
index 693bb6c..b1bd42e 100644
--- a/test/tint/builtins/gen/var/textureStore/441222.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/441222.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba32sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_441222 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_441222 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %5:texture_storage_2d<rgba32sint, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_441222
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_441222
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_441222
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/441ba8.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/441ba8.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/441ba8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/441ba8.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/4483e7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/4483e7.wgsl.expected.ir.msl
index 7015713..5cfba14 100644
--- a/test/tint/builtins/gen/var/textureStore/4483e7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/4483e7.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba32sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_4483e7 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_4483e7 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %5:texture_storage_1d<rgba32sint, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_4483e7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_4483e7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_4483e7
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/44b372.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/44b372.wgsl.expected.ir.msl
index cacd44e..ca5c54b 100644
--- a/test/tint/builtins/gen/var/textureStore/44b372.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/44b372.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba16sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_44b372 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_44b372 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %5:texture_storage_2d<rgba16sint, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_44b372
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_44b372
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_44b372
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/44daa7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/44daa7.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/44daa7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/44daa7.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/473ead.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/473ead.wgsl.expected.ir.msl
index eba0155..31a9294 100644
--- a/test/tint/builtins/gen/var/textureStore/473ead.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/473ead.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rg32uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_473ead = func():void -> %b2 {
-  %b2 = block {
+%textureStore_473ead = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
     %5:texture_storage_3d<rg32uint, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_473ead
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_473ead
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_473ead
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/47bd70.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/47bd70.wgsl.expected.ir.msl
index 4a69401..be541c7 100644
--- a/test/tint/builtins/gen/var/textureStore/47bd70.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/47bd70.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_47bd70 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_47bd70 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %5:texture_storage_2d<rgba8unorm, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_47bd70
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_47bd70
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_47bd70
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/486500.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/486500.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/486500.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/486500.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/48cb56.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/48cb56.wgsl.expected.ir.msl
index 2ebf795..187eadd 100644
--- a/test/tint/builtins/gen/var/textureStore/48cb56.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/48cb56.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_48cb56 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_48cb56 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %arg_3:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_48cb56
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_48cb56
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_48cb56
     ret
   }
diff --git a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/48eae1.wgsl.expected.ir.msl
similarity index 75%
copy from test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.ir.msl
copy to test/tint/builtins/gen/var/textureStore/48eae1.wgsl.expected.ir.msl
index efdd3b1..877ebc6 100644
--- a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/48eae1.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/4bf1fd.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/4bf1fd.wgsl.expected.ir.msl
index b3cf4c3..0f638d7 100644
--- a/test/tint/builtins/gen/var/textureStore/4bf1fd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/4bf1fd.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<r32uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_4bf1fd = func():void -> %b2 {
-  %b2 = block {
+%textureStore_4bf1fd = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
     %5:texture_storage_2d<r32uint, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_4bf1fd
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_4bf1fd
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_4bf1fd
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/4c454f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/4c454f.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/4c454f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/4c454f.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/4c76b7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/4c76b7.wgsl.expected.ir.msl
index 9f20d43..a0c2b48 100644
--- a/test/tint/builtins/gen/var/textureStore/4c76b7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/4c76b7.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_4c76b7 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_4c76b7 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_4c76b7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_4c76b7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_4c76b7
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/4cce74.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/4cce74.wgsl.expected.ir.msl
index 7744e8a..1bdcc28 100644
--- a/test/tint/builtins/gen/var/textureStore/4cce74.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/4cce74.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rg32uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_4cce74 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_4cce74 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
     %5:texture_storage_1d<rg32uint, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_4cce74
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_4cce74
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_4cce74
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/4d359d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/4d359d.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/4d359d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/4d359d.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/4ddf52.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/4ddf52.wgsl.expected.ir.msl
index ff64d14..3a6ff7b 100644
--- a/test/tint/builtins/gen/var/textureStore/4ddf52.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/4ddf52.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba16sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_4ddf52 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_4ddf52 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %5:texture_storage_2d<rgba16sint, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_4ddf52
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_4ddf52
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_4ddf52
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/4e2b3a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/4e2b3a.wgsl.expected.ir.msl
index d6799c8..4876340 100644
--- a/test/tint/builtins/gen/var/textureStore/4e2b3a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/4e2b3a.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_4e2b3a = func():void -> %b2 {
-  %b2 = block {
+%textureStore_4e2b3a = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_4e2b3a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_4e2b3a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_4e2b3a
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/4fc057.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/4fc057.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/4fc057.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/4fc057.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/5030f5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/5030f5.wgsl.expected.ir.msl
index 1dda17b..658b24d 100644
--- a/test/tint/builtins/gen/var/textureStore/5030f5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/5030f5.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_5030f5 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_5030f5 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_5030f5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_5030f5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_5030f5
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/506a71.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/506a71.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/506a71.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/506a71.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/51ec82.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/51ec82.wgsl.expected.ir.msl
index 972d464..a352962 100644
--- a/test/tint/builtins/gen/var/textureStore/51ec82.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/51ec82.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rg32float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_51ec82 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_51ec82 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %5:texture_storage_1d<rg32float, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_51ec82
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_51ec82
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_51ec82
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/5246b4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/5246b4.wgsl.expected.ir.msl
index 803e019..5a0c87c 100644
--- a/test/tint/builtins/gen/var/textureStore/5246b4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/5246b4.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<r32uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_5246b4 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_5246b4 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
     %5:texture_storage_3d<r32uint, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_5246b4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_5246b4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_5246b4
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/52f503.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/52f503.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/52f503.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/52f503.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/53a68b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/53a68b.wgsl.expected.ir.msl
index 2f80d29..9bb503b 100644
--- a/test/tint/builtins/gen/var/textureStore/53a68b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/53a68b.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<r32uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_53a68b = func():void -> %b2 {
-  %b2 = block {
+%textureStore_53a68b = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
     %5:texture_storage_3d<r32uint, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_53a68b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_53a68b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_53a68b
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/5425ab.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/5425ab.wgsl.expected.ir.msl
index fae5827..248d50f 100644
--- a/test/tint/builtins/gen/var/textureStore/5425ab.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/5425ab.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rg32uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_5425ab = func():void -> %b2 {
-  %b2 = block {
+%textureStore_5425ab = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
     %5:texture_storage_2d<rg32uint, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_5425ab
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_5425ab
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_5425ab
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/544f06.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/544f06.wgsl.expected.ir.msl
index 9c7b97b..6b786d3 100644
--- a/test/tint/builtins/gen/var/textureStore/544f06.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/544f06.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_544f06 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_544f06 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %5:texture_storage_2d<bgra8unorm, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_544f06
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_544f06
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_544f06
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/55f9dc.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/55f9dc.wgsl.expected.ir.msl
index c23110f..3aef58f 100644
--- a/test/tint/builtins/gen/var/textureStore/55f9dc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/55f9dc.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_55f9dc = func():void -> %b2 {
-  %b2 = block {
+%textureStore_55f9dc = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_55f9dc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_55f9dc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_55f9dc
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/574a31.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/574a31.wgsl.expected.ir.msl
index 13d3405..59d8f7e 100644
--- a/test/tint/builtins/gen/var/textureStore/574a31.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/574a31.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rg32sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_574a31 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_574a31 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %5:texture_storage_1d<rg32sint, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_574a31
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_574a31
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_574a31
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/579b93.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/579b93.wgsl.expected.ir.msl
index e2f47df..c56c9fd 100644
--- a/test/tint/builtins/gen/var/textureStore/579b93.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/579b93.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<r32uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_579b93 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_579b93 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
     %5:texture_storage_2d<r32uint, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_579b93
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_579b93
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_579b93
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/5841f8.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/5841f8.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/5841f8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/5841f8.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/58fc35.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/58fc35.wgsl.expected.ir.msl
index 7e70197..ee3dda9 100644
--- a/test/tint/builtins/gen/var/textureStore/58fc35.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/58fc35.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba16float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_58fc35 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_58fc35 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %5:texture_storage_1d<rgba16float, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_58fc35
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_58fc35
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_58fc35
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/59a0ab.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/59a0ab.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/59a0ab.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/59a0ab.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/5a2f8f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/5a2f8f.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/5a2f8f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/5a2f8f.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/5a8b41.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/5a8b41.wgsl.expected.ir.msl
index 4b00360..28a696e 100644
--- a/test/tint/builtins/gen/var/textureStore/5a8b41.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/5a8b41.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_5a8b41 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_5a8b41 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_5a8b41
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_5a8b41
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_5a8b41
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/5b17eb.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/5b17eb.wgsl.expected.ir.msl
index d5e6f64..760b399 100644
--- a/test/tint/builtins/gen/var/textureStore/5b17eb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/5b17eb.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rg32float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_5b17eb = func():void -> %b2 {
-  %b2 = block {
+%textureStore_5b17eb = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %5:texture_storage_2d<rg32float, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_5b17eb
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_5b17eb
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_5b17eb
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/5b4522.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/5b4522.wgsl.expected.ir.msl
index 5761f4c..1eceebb 100644
--- a/test/tint/builtins/gen/var/textureStore/5b4522.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/5b4522.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_5b4522 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_5b4522 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
     %5:texture_storage_1d<rgba8uint, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_5b4522
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_5b4522
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_5b4522
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/5bc4f3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/5bc4f3.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/5bc4f3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/5bc4f3.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/5ddc61.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/5ddc61.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/5ddc61.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/5ddc61.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/5ec6b2.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/5ec6b2.wgsl.expected.ir.msl
index 22b86bc..8d754b2 100644
--- a/test/tint/builtins/gen/var/textureStore/5ec6b2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/5ec6b2.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<r32float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_5ec6b2 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_5ec6b2 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %5:texture_storage_3d<r32float, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_5ec6b2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_5ec6b2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_5ec6b2
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/5ee194.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/5ee194.wgsl.expected.ir.msl
index 9d69716..632e903 100644
--- a/test/tint/builtins/gen/var/textureStore/5ee194.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/5ee194.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_5ee194 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_5ee194 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_5ee194
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_5ee194
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_5ee194
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/5f9a49.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/5f9a49.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/5f9a49.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/5f9a49.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/602b5a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/602b5a.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/602b5a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/602b5a.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/60975f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/60975f.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/60975f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/60975f.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/614b58.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/614b58.wgsl.expected.ir.msl
index 0fb5db2..de843b2 100644
--- a/test/tint/builtins/gen/var/textureStore/614b58.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/614b58.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_614b58 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_614b58 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %arg_3:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_614b58
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_614b58
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_614b58
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/635584.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/635584.wgsl.expected.ir.msl
index b6bd850..d42b23d 100644
--- a/test/tint/builtins/gen/var/textureStore/635584.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/635584.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rg32float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_635584 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_635584 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %5:texture_storage_1d<rg32float, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_635584
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_635584
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_635584
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/63f34a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/63f34a.wgsl.expected.ir.msl
index 53f0903..bd4b7a2 100644
--- a/test/tint/builtins/gen/var/textureStore/63f34a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/63f34a.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rg32sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_63f34a = func():void -> %b2 {
-  %b2 = block {
+%textureStore_63f34a = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %5:texture_storage_2d<rg32sint, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_63f34a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_63f34a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_63f34a
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/646dbc.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/646dbc.wgsl.expected.ir.msl
index e1190de..311dd0a 100644
--- a/test/tint/builtins/gen/var/textureStore/646dbc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/646dbc.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba32sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_646dbc = func():void -> %b2 {
-  %b2 = block {
+%textureStore_646dbc = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %5:texture_storage_3d<rgba32sint, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_646dbc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_646dbc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_646dbc
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/658a74.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/658a74.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/658a74.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/658a74.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/65b6aa.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/65b6aa.wgsl.expected.ir.msl
index 4440f43..29ad191 100644
--- a/test/tint/builtins/gen/var/textureStore/65b6aa.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/65b6aa.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_65b6aa = func():void -> %b2 {
-  %b2 = block {
+%textureStore_65b6aa = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %5:texture_storage_1d<rgba8sint, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_65b6aa
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_65b6aa
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_65b6aa
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/65ba8b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/65ba8b.wgsl.expected.ir.msl
new file mode 100644
index 0000000..6ddedc4
--- /dev/null
+++ b/test/tint/builtins/gen/var/textureStore/65ba8b.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_2d<r8unorm, read_write>, read> = var @binding_point(1, 0)
+}
+
+%textureStore_65ba8b = func():void {
+  $B2: {
+    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
+    %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
+    %5:texture_storage_2d<r8unorm, read_write> = load %arg_0
+    %6:vec2<i32> = load %arg_1
+    %7:vec4<f32> = load %arg_2
+    %8:void = textureStore %5, %6, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %10:void = call %textureStore_65ba8b
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %12:void = call %textureStore_65ba8b
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %14:void = call %textureStore_65ba8b
+    ret
+  }
+}
+
+invalid access control for storage texture
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/682fd6.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/682fd6.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/682fd6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/682fd6.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/699a1b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/699a1b.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/699a1b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/699a1b.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/6b75c3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/6b75c3.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/6b75c3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/6b75c3.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/6b80d2.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/6b80d2.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/6b80d2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/6b80d2.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/6be9e0.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/6be9e0.wgsl.expected.ir.msl
index 14eefcc..8d9c752 100644
--- a/test/tint/builtins/gen/var/textureStore/6be9e0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/6be9e0.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<r32float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_6be9e0 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_6be9e0 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %5:texture_storage_3d<r32float, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_6be9e0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_6be9e0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_6be9e0
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/6c4a70.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/6c4a70.wgsl.expected.ir.msl
index e339e04..b2cea3d 100644
--- a/test/tint/builtins/gen/var/textureStore/6c4a70.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/6c4a70.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<r32sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_6c4a70 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_6c4a70 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %5:texture_storage_2d<r32sint, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_6c4a70
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_6c4a70
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_6c4a70
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/6cff2e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/6cff2e.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/6cff2e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/6cff2e.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/6d1809.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/6d1809.wgsl.expected.ir.msl
index 0a9db49..9f48a35 100644
--- a/test/tint/builtins/gen/var/textureStore/6d1809.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/6d1809.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_6d1809 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_6d1809 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_6d1809
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_6d1809
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_6d1809
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/6d259f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/6d259f.wgsl.expected.ir.msl
index e248aed..5dc1c35 100644
--- a/test/tint/builtins/gen/var/textureStore/6d259f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/6d259f.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba32uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_6d259f = func():void -> %b2 {
-  %b2 = block {
+%textureStore_6d259f = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
     %5:texture_storage_2d<rgba32uint, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_6d259f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_6d259f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_6d259f
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/6da692.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/6da692.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/6da692.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/6da692.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/6e6cc0.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/6e6cc0.wgsl.expected.ir.msl
index b9db9ad..493fb80 100644
--- a/test/tint/builtins/gen/var/textureStore/6e6cc0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/6e6cc0.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<r32float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_6e6cc0 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_6e6cc0 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %5:texture_storage_1d<r32float, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_6e6cc0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_6e6cc0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_6e6cc0
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/6f0c92.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/6f0c92.wgsl.expected.ir.msl
new file mode 100644
index 0000000..9fdb806
--- /dev/null
+++ b/test/tint/builtins/gen/var/textureStore/6f0c92.wgsl.expected.ir.msl
@@ -0,0 +1,45 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_2d_array<r8unorm, read_write>, read> = var @binding_point(1, 0)
+}
+
+%textureStore_6f0c92 = func():void {
+  $B2: {
+    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
+    %arg_2:ptr<function, i32, read_write> = var, 1i
+    %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
+    %6:texture_storage_2d_array<r8unorm, read_write> = load %arg_0
+    %7:vec2<u32> = load %arg_1
+    %8:i32 = load %arg_2
+    %9:vec4<f32> = load %arg_3
+    %10:void = textureStore %6, %7, %8, %9
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %12:void = call %textureStore_6f0c92
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %14:void = call %textureStore_6f0c92
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %16:void = call %textureStore_6f0c92
+    ret
+  }
+}
+
+invalid access control for storage texture
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/6f3542.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/6f3542.wgsl.expected.ir.msl
index 163295b..316f7e5 100644
--- a/test/tint/builtins/gen/var/textureStore/6f3542.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/6f3542.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba16uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_6f3542 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_6f3542 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
     %5:texture_storage_3d<rgba16uint, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_6f3542
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_6f3542
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_6f3542
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/6f8642.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/6f8642.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/6f8642.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/6f8642.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/6fb99b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/6fb99b.wgsl.expected.ir.msl
index d491e44..5b21ca4 100644
--- a/test/tint/builtins/gen/var/textureStore/6fb99b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/6fb99b.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba16float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_6fb99b = func():void -> %b2 {
-  %b2 = block {
+%textureStore_6fb99b = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %5:texture_storage_3d<rgba16float, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_6fb99b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_6fb99b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_6fb99b
     ret
   }
diff --git a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/6fd2b1.wgsl.expected.ir.msl
similarity index 75%
copy from test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.ir.msl
copy to test/tint/builtins/gen/var/textureStore/6fd2b1.wgsl.expected.ir.msl
index efdd3b1..877ebc6 100644
--- a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/6fd2b1.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/704e1f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/704e1f.wgsl.expected.ir.msl
index 74d67f6..b3d5e18 100644
--- a/test/tint/builtins/gen/var/textureStore/704e1f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/704e1f.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_704e1f = func():void -> %b2 {
-  %b2 = block {
+%textureStore_704e1f = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_704e1f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_704e1f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_704e1f
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/706236.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/706236.wgsl.expected.ir.msl
index 562e342..2d33612 100644
--- a/test/tint/builtins/gen/var/textureStore/706236.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/706236.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_706236 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_706236 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %5:texture_storage_1d<rgba8unorm, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_706236
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_706236
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_706236
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/706560.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/706560.wgsl.expected.ir.msl
index a125562..41aab47 100644
--- a/test/tint/builtins/gen/var/textureStore/706560.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/706560.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_706560 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_706560 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %arg_3:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_706560
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_706560
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_706560
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/726472.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/726472.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/726472.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/726472.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/726d6d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/726d6d.wgsl.expected.ir.msl
index 6efbf58..f869430 100644
--- a/test/tint/builtins/gen/var/textureStore/726d6d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/726d6d.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba16float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_726d6d = func():void -> %b2 {
-  %b2 = block {
+%textureStore_726d6d = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %5:texture_storage_2d<rgba16float, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_726d6d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_726d6d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_726d6d
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/72fa64.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/72fa64.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/72fa64.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/72fa64.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/731349.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/731349.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/731349.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/731349.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/73a735.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/73a735.wgsl.expected.ir.msl
index ffd496f..cdc8572 100644
--- a/test/tint/builtins/gen/var/textureStore/73a735.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/73a735.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_73a735 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_73a735 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %arg_3:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_73a735
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_73a735
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_73a735
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/73bbbc.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/73bbbc.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/73bbbc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/73bbbc.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/74886f.wgsl.expected.ir.msl
similarity index 75%
copy from test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.ir.msl
copy to test/tint/builtins/gen/var/textureStore/74886f.wgsl.expected.ir.msl
index efdd3b1..877ebc6 100644
--- a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/74886f.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/751256.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/751256.wgsl.expected.ir.msl
index 69d6ecdd..56b34f5 100644
--- a/test/tint/builtins/gen/var/textureStore/751256.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/751256.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba32uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_751256 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_751256 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
     %5:texture_storage_1d<rgba32uint, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_751256
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_751256
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_751256
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/752da6.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/752da6.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/752da6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/752da6.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/75bbd5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/75bbd5.wgsl.expected.ir.msl
index fcb23d0..9c6ff1a 100644
--- a/test/tint/builtins/gen/var/textureStore/75bbd5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/75bbd5.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_75bbd5 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_75bbd5 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %arg_3:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_75bbd5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_75bbd5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_75bbd5
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/76affd.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/76affd.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/76affd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/76affd.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/7792fa.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/7792fa.wgsl.expected.ir.msl
index d70c408..235dda1 100644
--- a/test/tint/builtins/gen/var/textureStore/7792fa.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/7792fa.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rg32sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_7792fa = func():void -> %b2 {
-  %b2 = block {
+%textureStore_7792fa = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %5:texture_storage_3d<rg32sint, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_7792fa
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_7792fa
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_7792fa
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/779d14.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/779d14.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/779d14.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/779d14.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/77c0ae.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/77c0ae.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/77c0ae.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/77c0ae.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/7b8f86.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/7b8f86.wgsl.expected.ir.msl
index 9b01cf0..5ffbb81 100644
--- a/test/tint/builtins/gen/var/textureStore/7b8f86.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/7b8f86.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rg32float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_7b8f86 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_7b8f86 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %5:texture_storage_3d<rg32float, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_7b8f86
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_7b8f86
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_7b8f86
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/7bb211.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/7bb211.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/7bb211.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/7bb211.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/7cec8d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/7cec8d.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/7cec8d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/7cec8d.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/7cf6e7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/7cf6e7.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/7cf6e7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/7cf6e7.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/7d10e0.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/7d10e0.wgsl.expected.ir.msl
index 1f39a83..1f417e6 100644
--- a/test/tint/builtins/gen/var/textureStore/7d10e0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/7d10e0.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba32float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_7d10e0 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_7d10e0 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %5:texture_storage_1d<rgba32float, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_7d10e0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_7d10e0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_7d10e0
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/7dd042.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/7dd042.wgsl.expected.ir.msl
index e277572..65df419 100644
--- a/test/tint/builtins/gen/var/textureStore/7dd042.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/7dd042.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_7dd042 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_7dd042 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %arg_3:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_7dd042
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_7dd042
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_7dd042
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/7e787a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/7e787a.wgsl.expected.ir.msl
index f59c20b..697cffc 100644
--- a/test/tint/builtins/gen/var/textureStore/7e787a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/7e787a.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba32float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_7e787a = func():void -> %b2 {
-  %b2 = block {
+%textureStore_7e787a = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %5:texture_storage_3d<rgba32float, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_7e787a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_7e787a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_7e787a
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/7f7fae.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/7f7fae.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/7f7fae.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/7f7fae.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/803a10.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/803a10.wgsl.expected.ir.msl
new file mode 100644
index 0000000..81af8cd
--- /dev/null
+++ b/test/tint/builtins/gen/var/textureStore/803a10.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_3d<r8unorm, read_write>, read> = var @binding_point(1, 0)
+}
+
+%textureStore_803a10 = func():void {
+  $B2: {
+    %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
+    %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
+    %5:texture_storage_3d<r8unorm, read_write> = load %arg_0
+    %6:vec3<u32> = load %arg_1
+    %7:vec4<f32> = load %arg_2
+    %8:void = textureStore %5, %6, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %10:void = call %textureStore_803a10
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %12:void = call %textureStore_803a10
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %14:void = call %textureStore_803a10
+    ret
+  }
+}
+
+invalid access control for storage texture
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/804942.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/804942.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/804942.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/804942.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/805dae.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/805dae.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/805dae.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/805dae.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/80bf1d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/80bf1d.wgsl.expected.ir.msl
index 7300e68..6a21585 100644
--- a/test/tint/builtins/gen/var/textureStore/80bf1d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/80bf1d.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rg32sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_80bf1d = func():void -> %b2 {
-  %b2 = block {
+%textureStore_80bf1d = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %5:texture_storage_2d<rg32sint, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_80bf1d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_80bf1d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_80bf1d
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/818df6.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/818df6.wgsl.expected.ir.msl
index 74d1612..c9e4cf1 100644
--- a/test/tint/builtins/gen/var/textureStore/818df6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/818df6.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba16float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_818df6 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_818df6 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %5:texture_storage_3d<rgba16float, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_818df6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_818df6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_818df6
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/81ae31.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/81ae31.wgsl.expected.ir.msl
index 5ff9e63..593c30e0 100644
--- a/test/tint/builtins/gen/var/textureStore/81ae31.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/81ae31.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_81ae31 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_81ae31 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_81ae31
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_81ae31
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_81ae31
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/820272.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/820272.wgsl.expected.ir.msl
index 8a4d54a..b8a9be7 100644
--- a/test/tint/builtins/gen/var/textureStore/820272.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/820272.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_820272 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_820272 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %arg_3:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_820272
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_820272
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_820272
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/83bcc1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/83bcc1.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/83bcc1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/83bcc1.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/84d435.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/84d435.wgsl.expected.ir.msl
index daab066..06aa231 100644
--- a/test/tint/builtins/gen/var/textureStore/84d435.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/84d435.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_84d435 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_84d435 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %arg_3:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_84d435
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_84d435
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_84d435
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/84f4f4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/84f4f4.wgsl.expected.ir.msl
index 369ee03..e72f8ea 100644
--- a/test/tint/builtins/gen/var/textureStore/84f4f4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/84f4f4.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_84f4f4 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_84f4f4 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %arg_3:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_84f4f4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_84f4f4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_84f4f4
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/8676c9.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/8676c9.wgsl.expected.ir.msl
index 1eba9ea..d08badd 100644
--- a/test/tint/builtins/gen/var/textureStore/8676c9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/8676c9.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<r32uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_8676c9 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_8676c9 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
     %5:texture_storage_1d<r32uint, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_8676c9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_8676c9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_8676c9
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/86f713.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/86f713.wgsl.expected.ir.msl
index 5461a48..97c7879 100644
--- a/test/tint/builtins/gen/var/textureStore/86f713.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/86f713.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba16sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_86f713 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_86f713 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %5:texture_storage_3d<rgba16sint, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_86f713
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_86f713
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_86f713
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/872747.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/872747.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/872747.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/872747.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/877c92.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/877c92.wgsl.expected.ir.msl
index 289f283..6eb3de5 100644
--- a/test/tint/builtins/gen/var/textureStore/877c92.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/877c92.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_877c92 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_877c92 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %5:texture_storage_1d<rgba8snorm, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_877c92
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_877c92
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_877c92
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/8815b1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/8815b1.wgsl.expected.ir.msl
index 0db24d8..dc5eea5 100644
--- a/test/tint/builtins/gen/var/textureStore/8815b1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/8815b1.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_8815b1 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_8815b1 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %arg_3:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_8815b1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_8815b1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_8815b1
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/885921.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/885921.wgsl.expected.ir.msl
index cd4f388..6a57211 100644
--- a/test/tint/builtins/gen/var/textureStore/885921.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/885921.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_885921 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_885921 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %5:texture_storage_3d<rgba8unorm, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_885921
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_885921
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_885921
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/88ce7e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/88ce7e.wgsl.expected.ir.msl
index 05ae2c5..57ad9c7 100644
--- a/test/tint/builtins/gen/var/textureStore/88ce7e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/88ce7e.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_88ce7e = func():void -> %b2 {
-  %b2 = block {
+%textureStore_88ce7e = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %5:texture_storage_3d<rgba8sint, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_88ce7e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_88ce7e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_88ce7e
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/8a16b0.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/8a16b0.wgsl.expected.ir.msl
index acd4c11..a6e5e09 100644
--- a/test/tint/builtins/gen/var/textureStore/8a16b0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/8a16b0.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_8a16b0 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_8a16b0 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %arg_3:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_8a16b0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_8a16b0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_8a16b0
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/8a46ff.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/8a46ff.wgsl.expected.ir.msl
index 71df8a8..01d8c5d 100644
--- a/test/tint/builtins/gen/var/textureStore/8a46ff.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/8a46ff.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba16float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_8a46ff = func():void -> %b2 {
-  %b2 = block {
+%textureStore_8a46ff = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %5:texture_storage_2d<rgba16float, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_8a46ff
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_8a46ff
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_8a46ff
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/8a85b9.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/8a85b9.wgsl.expected.ir.msl
index bbea7ee..fa89898 100644
--- a/test/tint/builtins/gen/var/textureStore/8a85b9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/8a85b9.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_8a85b9 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_8a85b9 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %arg_3:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_8a85b9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_8a85b9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_8a85b9
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/8a8681.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/8a8681.wgsl.expected.ir.msl
index 285b614..73faffe 100644
--- a/test/tint/builtins/gen/var/textureStore/8a8681.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/8a8681.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rg32uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_8a8681 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_8a8681 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
     %5:texture_storage_2d<rg32uint, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_8a8681
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_8a8681
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_8a8681
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/8ae0bc.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/8ae0bc.wgsl.expected.ir.msl
index f890d16..bc62be0 100644
--- a/test/tint/builtins/gen/var/textureStore/8ae0bc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/8ae0bc.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_8ae0bc = func():void -> %b2 {
-  %b2 = block {
+%textureStore_8ae0bc = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_8ae0bc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_8ae0bc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_8ae0bc
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/8b9310.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/8b9310.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/8b9310.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/8b9310.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/8bb287.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/8bb287.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/8bb287.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/8bb287.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/8c76e9.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/8c76e9.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/8c76e9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/8c76e9.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/8cd611.wgsl.expected.ir.msl
similarity index 75%
copy from test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.ir.msl
copy to test/tint/builtins/gen/var/textureStore/8cd611.wgsl.expected.ir.msl
index efdd3b1..877ebc6 100644
--- a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/8cd611.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/8cd841.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/8cd841.wgsl.expected.ir.msl
index 9864975..c3bb67f 100644
--- a/test/tint/builtins/gen/var/textureStore/8cd841.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/8cd841.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_8cd841 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_8cd841 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %arg_3:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_8cd841
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_8cd841
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_8cd841
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/8dc54f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/8dc54f.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/8dc54f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/8dc54f.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/8e0479.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/8e0479.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/8e0479.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/8e0479.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/8ebdc9.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/8ebdc9.wgsl.expected.ir.msl
index f1d3caa..e8185bd 100644
--- a/test/tint/builtins/gen/var/textureStore/8ebdc9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/8ebdc9.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_8ebdc9 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_8ebdc9 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_8ebdc9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_8ebdc9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_8ebdc9
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/8ed9f8.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/8ed9f8.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/8ed9f8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/8ed9f8.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/8f71a1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/8f71a1.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/8f71a1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/8f71a1.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/8ff674.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/8ff674.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/8ff674.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/8ff674.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/90960e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/90960e.wgsl.expected.ir.msl
index d6aad96..05a064d 100644
--- a/test/tint/builtins/gen/var/textureStore/90960e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/90960e.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba16float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_90960e = func():void -> %b2 {
-  %b2 = block {
+%textureStore_90960e = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %5:texture_storage_1d<rgba16float, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_90960e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_90960e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_90960e
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/90a553.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/90a553.wgsl.expected.ir.msl
index d02e681..09e53ea 100644
--- a/test/tint/builtins/gen/var/textureStore/90a553.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/90a553.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_90a553 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_90a553 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %arg_3:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_90a553
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_90a553
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_90a553
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/958353.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/958353.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/958353.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/958353.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/959d94.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/959d94.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/959d94.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/959d94.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/95e452.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/95e452.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/95e452.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/95e452.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/969534.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/969534.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/969534.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/969534.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/976636.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/976636.wgsl.expected.ir.msl
index 6179792..68a6ef1 100644
--- a/test/tint/builtins/gen/var/textureStore/976636.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/976636.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_976636 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_976636 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %5:texture_storage_1d<rgba8sint, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_976636
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_976636
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_976636
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/9938b7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/9938b7.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/9938b7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/9938b7.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/9a3ecc.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/9a3ecc.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/9a3ecc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/9a3ecc.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/9aedd3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/9aedd3.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/9aedd3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/9aedd3.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/9ba5c1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/9ba5c1.wgsl.expected.ir.msl
index a073882..8474c2a 100644
--- a/test/tint/builtins/gen/var/textureStore/9ba5c1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/9ba5c1.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba16uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_9ba5c1 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_9ba5c1 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
     %5:texture_storage_1d<rgba16uint, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_9ba5c1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_9ba5c1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_9ba5c1
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/9cea9e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/9cea9e.wgsl.expected.ir.msl
index abd147d..e2fd58c 100644
--- a/test/tint/builtins/gen/var/textureStore/9cea9e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/9cea9e.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_9cea9e = func():void -> %b2 {
-  %b2 = block {
+%textureStore_9cea9e = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %arg_3:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_9cea9e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_9cea9e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_9cea9e
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/9d7c62.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/9d7c62.wgsl.expected.ir.msl
index 0fcdab4..a3e9738 100644
--- a/test/tint/builtins/gen/var/textureStore/9d7c62.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/9d7c62.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba8uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_9d7c62 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_9d7c62 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
     %5:texture_storage_1d<rgba8uint, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_9d7c62
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_9d7c62
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_9d7c62
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/9d8668.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/9d8668.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/9d8668.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/9d8668.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/9d9cd5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/9d9cd5.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/9d9cd5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/9d9cd5.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/9e3ec5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/9e3ec5.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/9e3ec5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/9e3ec5.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/9e5bc2.wgsl.expected.ir.msl
similarity index 75%
copy from test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.ir.msl
copy to test/tint/builtins/gen/var/textureStore/9e5bc2.wgsl.expected.ir.msl
index efdd3b1..877ebc6 100644
--- a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/9e5bc2.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/9f5318.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/9f5318.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/9f5318.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/9f5318.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/9f7cea.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/9f7cea.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/9f7cea.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/9f7cea.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/a0022f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/a0022f.wgsl.expected.ir.msl
index 776dff5..c38b0f3 100644
--- a/test/tint/builtins/gen/var/textureStore/a0022f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/a0022f.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_a0022f = func():void -> %b2 {
-  %b2 = block {
+%textureStore_a0022f = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %arg_3:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_a0022f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_a0022f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_a0022f
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/a0f96e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/a0f96e.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/a0f96e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/a0f96e.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/a1352c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/a1352c.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/a1352c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/a1352c.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/a14041.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/a14041.wgsl.expected.ir.msl
index 8b3e1ac..0d50008 100644
--- a/test/tint/builtins/gen/var/textureStore/a14041.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/a14041.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba32sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_a14041 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_a14041 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %5:texture_storage_1d<rgba32sint, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_a14041
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_a14041
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_a14041
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/a165b8.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/a165b8.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/a165b8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/a165b8.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/a19a12.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/a19a12.wgsl.expected.ir.msl
index 218abcc..22c4ace 100644
--- a/test/tint/builtins/gen/var/textureStore/a19a12.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/a19a12.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba32uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_a19a12 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_a19a12 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
     %5:texture_storage_3d<rgba32uint, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_a19a12
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_a19a12
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_a19a12
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/a24491.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/a24491.wgsl.expected.ir.msl
index 50af0d1..3fceba8 100644
--- a/test/tint/builtins/gen/var/textureStore/a24491.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/a24491.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba32uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_a24491 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_a24491 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
     %5:texture_storage_2d<rgba32uint, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_a24491
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_a24491
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_a24491
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/a4c338.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/a4c338.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/a4c338.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/a4c338.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/a5b88e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/a5b88e.wgsl.expected.ir.msl
index 676ff61..358786b 100644
--- a/test/tint/builtins/gen/var/textureStore/a5b88e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/a5b88e.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba16sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_a5b88e = func():void -> %b2 {
-  %b2 = block {
+%textureStore_a5b88e = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %5:texture_storage_3d<rgba16sint, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_a5b88e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_a5b88e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_a5b88e
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/a5c925.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/a5c925.wgsl.expected.ir.msl
index f7b69db..5826dcd 100644
--- a/test/tint/builtins/gen/var/textureStore/a5c925.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/a5c925.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_a5c925 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_a5c925 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %5:texture_storage_3d<rgba8sint, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_a5c925
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_a5c925
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_a5c925
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/a5e80d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/a5e80d.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/a5e80d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/a5e80d.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/a66ca4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/a66ca4.wgsl.expected.ir.msl
index b7d4a25..ed7a079 100644
--- a/test/tint/builtins/gen/var/textureStore/a66ca4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/a66ca4.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_a66ca4 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_a66ca4 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %5:texture_storage_3d<bgra8unorm, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_a66ca4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_a66ca4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_a66ca4
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/a6a986.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/a6a986.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/a6a986.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/a6a986.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/a6e78f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/a6e78f.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/a6e78f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/a6e78f.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/a702b6.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/a702b6.wgsl.expected.ir.msl
index 82f2def..22dddfcd 100644
--- a/test/tint/builtins/gen/var/textureStore/a702b6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/a702b6.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_a702b6 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_a702b6 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %arg_3:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_a702b6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_a702b6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_a702b6
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/a7fc47.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/a7fc47.wgsl.expected.ir.msl
new file mode 100644
index 0000000..ec8286d
--- /dev/null
+++ b/test/tint/builtins/gen/var/textureStore/a7fc47.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_1d<r8unorm, read_write>, read> = var @binding_point(1, 0)
+}
+
+%textureStore_a7fc47 = func():void {
+  $B2: {
+    %arg_1:ptr<function, u32, read_write> = var, 1u
+    %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
+    %5:texture_storage_1d<r8unorm, read_write> = load %arg_0
+    %6:u32 = load %arg_1
+    %7:vec4<f32> = load %arg_2
+    %8:void = textureStore %5, %6, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %10:void = call %textureStore_a7fc47
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %12:void = call %textureStore_a7fc47
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %14:void = call %textureStore_a7fc47
+    ret
+  }
+}
+
+invalid access control for storage texture
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/a9298c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/a9298c.wgsl.expected.ir.msl
index 7c07e34..c17d72f 100644
--- a/test/tint/builtins/gen/var/textureStore/a9298c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/a9298c.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rg32uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_a9298c = func():void -> %b2 {
-  %b2 = block {
+%textureStore_a9298c = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
     %5:texture_storage_1d<rg32uint, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_a9298c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_a9298c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_a9298c
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/a9426c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/a9426c.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/a9426c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/a9426c.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/ab03b6.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/ab03b6.wgsl.expected.ir.msl
index 3f7bc5c..53e75cc 100644
--- a/test/tint/builtins/gen/var/textureStore/ab03b6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/ab03b6.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_ab03b6 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_ab03b6 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
     %5:texture_storage_3d<rgba8uint, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_ab03b6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_ab03b6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_ab03b6
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/ab788e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/ab788e.wgsl.expected.ir.msl
index 85b9d24..8fc165a 100644
--- a/test/tint/builtins/gen/var/textureStore/ab788e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/ab788e.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rg32float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_ab788e = func():void -> %b2 {
-  %b2 = block {
+%textureStore_ab788e = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %5:texture_storage_2d<rg32float, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_ab788e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_ab788e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_ab788e
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/abdd21.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/abdd21.wgsl.expected.ir.msl
index 5977758..290374d 100644
--- a/test/tint/builtins/gen/var/textureStore/abdd21.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/abdd21.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_abdd21 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_abdd21 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %arg_3:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_abdd21
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_abdd21
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_abdd21
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/ac0a55.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/ac0a55.wgsl.expected.ir.msl
index af0d753..3efd58c 100644
--- a/test/tint/builtins/gen/var/textureStore/ac0a55.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/ac0a55.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_ac0a55 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_ac0a55 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %arg_3:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_ac0a55
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_ac0a55
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_ac0a55
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/ac67aa.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/ac67aa.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/ac67aa.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/ac67aa.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/ae6a2a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/ae6a2a.wgsl.expected.ir.msl
new file mode 100644
index 0000000..1173988
--- /dev/null
+++ b/test/tint/builtins/gen/var/textureStore/ae6a2a.wgsl.expected.ir.msl
@@ -0,0 +1,45 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_2d_array<r8unorm, read_write>, read> = var @binding_point(1, 0)
+}
+
+%textureStore_ae6a2a = func():void {
+  $B2: {
+    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
+    %arg_2:ptr<function, u32, read_write> = var, 1u
+    %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
+    %6:texture_storage_2d_array<r8unorm, read_write> = load %arg_0
+    %7:vec2<u32> = load %arg_1
+    %8:u32 = load %arg_2
+    %9:vec4<f32> = load %arg_3
+    %10:void = textureStore %6, %7, %8, %9
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %12:void = call %textureStore_ae6a2a
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %14:void = call %textureStore_ae6a2a
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %16:void = call %textureStore_ae6a2a
+    ret
+  }
+}
+
+invalid access control for storage texture
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/aeb38a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/aeb38a.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/aeb38a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/aeb38a.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/aedea3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/aedea3.wgsl.expected.ir.msl
index 98b66d6..15c86a2 100644
--- a/test/tint/builtins/gen/var/textureStore/aedea3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/aedea3.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_aedea3 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_aedea3 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %arg_3:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_aedea3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_aedea3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_aedea3
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/b16110.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/b16110.wgsl.expected.ir.msl
index 45702b2..d929329 100644
--- a/test/tint/builtins/gen/var/textureStore/b16110.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/b16110.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_b16110 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_b16110 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %arg_3:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_b16110
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_b16110
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_b16110
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/b286b4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/b286b4.wgsl.expected.ir.msl
index c9cf444..258e7bd 100644
--- a/test/tint/builtins/gen/var/textureStore/b286b4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/b286b4.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_b286b4 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_b286b4 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %arg_3:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_b286b4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_b286b4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_b286b4
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/b36bc1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/b36bc1.wgsl.expected.ir.msl
index 1221d61..779c300 100644
--- a/test/tint/builtins/gen/var/textureStore/b36bc1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/b36bc1.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_b36bc1 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_b36bc1 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
     %5:texture_storage_3d<rgba8uint, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_b36bc1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_b36bc1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_b36bc1
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/b42fd3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/b42fd3.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/b42fd3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/b42fd3.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/b4389e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/b4389e.wgsl.expected.ir.msl
index 1febae8..c5974ca 100644
--- a/test/tint/builtins/gen/var/textureStore/b4389e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/b4389e.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_b4389e = func():void -> %b2 {
-  %b2 = block {
+%textureStore_b4389e = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %5:texture_storage_3d<bgra8unorm, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_b4389e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_b4389e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_b4389e
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/b706b1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/b706b1.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/b706b1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/b706b1.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/b70ded.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/b70ded.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/b70ded.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/b70ded.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/b71c13.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/b71c13.wgsl.expected.ir.msl
index 9b401c6..c382699 100644
--- a/test/tint/builtins/gen/var/textureStore/b71c13.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/b71c13.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_b71c13 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_b71c13 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_b71c13
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_b71c13
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_b71c13
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/b7232c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/b7232c.wgsl.expected.ir.msl
index 6967566..3ed1419 100644
--- a/test/tint/builtins/gen/var/textureStore/b7232c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/b7232c.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<r32float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_b7232c = func():void -> %b2 {
-  %b2 = block {
+%textureStore_b7232c = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %5:texture_storage_1d<r32float, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_b7232c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_b7232c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_b7232c
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/b76ff3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/b76ff3.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/b76ff3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/b76ff3.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/b77161.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/b77161.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/b77161.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/b77161.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/b89ffb.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/b89ffb.wgsl.expected.ir.msl
index 7e0fd89..2132dfa 100644
--- a/test/tint/builtins/gen/var/textureStore/b89ffb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/b89ffb.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_b89ffb = func():void -> %b2 {
-  %b2 = block {
+%textureStore_b89ffb = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_b89ffb
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_b89ffb
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_b89ffb
     ret
   }
diff --git a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/b91b86.wgsl.expected.ir.msl
similarity index 75%
copy from test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.ir.msl
copy to test/tint/builtins/gen/var/textureStore/b91b86.wgsl.expected.ir.msl
index efdd3b1..877ebc6 100644
--- a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/b91b86.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/b9c81a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/b9c81a.wgsl.expected.ir.msl
index 0fc35f2..d5d067c 100644
--- a/test/tint/builtins/gen/var/textureStore/b9c81a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/b9c81a.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rg32uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_b9c81a = func():void -> %b2 {
-  %b2 = block {
+%textureStore_b9c81a = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
     %5:texture_storage_3d<rg32uint, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_b9c81a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_b9c81a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_b9c81a
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/b9d863.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/b9d863.wgsl.expected.ir.msl
index 070d4f0..fe8edf3 100644
--- a/test/tint/builtins/gen/var/textureStore/b9d863.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/b9d863.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_b9d863 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_b9d863 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %arg_3:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_b9d863
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_b9d863
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_b9d863
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/bbcb7f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/bbcb7f.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/bbcb7f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/bbcb7f.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/bc1423.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/bc1423.wgsl.expected.ir.msl
index 609d67e..4053435 100644
--- a/test/tint/builtins/gen/var/textureStore/bc1423.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/bc1423.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_bc1423 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_bc1423 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %arg_3:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_bc1423
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_bc1423
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_bc1423
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/bcc97a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/bcc97a.wgsl.expected.ir.msl
index c5f4726..40aaf04 100644
--- a/test/tint/builtins/gen/var/textureStore/bcc97a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/bcc97a.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<r32sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_bcc97a = func():void -> %b2 {
-  %b2 = block {
+%textureStore_bcc97a = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %5:texture_storage_2d<r32sint, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_bcc97a
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_bcc97a
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_bcc97a
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/bd6602.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/bd6602.wgsl.expected.ir.msl
index fe365c0..4a04008 100644
--- a/test/tint/builtins/gen/var/textureStore/bd6602.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/bd6602.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_bd6602 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_bd6602 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %arg_3:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_bd6602
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_bd6602
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_bd6602
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/be6e30.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/be6e30.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/be6e30.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/be6e30.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/bedbfc.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/bedbfc.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/bedbfc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/bedbfc.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/bf775c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/bf775c.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/bf775c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/bf775c.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/c06463.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/c06463.wgsl.expected.ir.msl
index fd0b4a2..c1bfa49 100644
--- a/test/tint/builtins/gen/var/textureStore/c06463.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/c06463.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_c06463 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_c06463 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_c06463
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_c06463
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_c06463
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/c1c664.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/c1c664.wgsl.expected.ir.msl
index e0efb98..9664c4e 100644
--- a/test/tint/builtins/gen/var/textureStore/c1c664.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/c1c664.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba32float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_c1c664 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_c1c664 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %5:texture_storage_2d<rgba32float, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_c1c664
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_c1c664
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_c1c664
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/c1f29e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/c1f29e.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/c1f29e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/c1f29e.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/c1f760.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/c1f760.wgsl.expected.ir.msl
index 277d55f..0c47a39 100644
--- a/test/tint/builtins/gen/var/textureStore/c1f760.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/c1f760.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_c1f760 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_c1f760 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %arg_3:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_c1f760
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_c1f760
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_c1f760
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/c2ca46.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/c2ca46.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/c2ca46.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/c2ca46.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/c32905.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/c32905.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/c32905.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/c32905.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/c33478.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/c33478.wgsl.expected.ir.msl
index a988839..f692c7a 100644
--- a/test/tint/builtins/gen/var/textureStore/c33478.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/c33478.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rg32float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_c33478 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_c33478 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %5:texture_storage_3d<rg32float, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_c33478
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_c33478
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_c33478
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/c35268.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/c35268.wgsl.expected.ir.msl
index c29ed43..fedc056 100644
--- a/test/tint/builtins/gen/var/textureStore/c35268.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/c35268.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_c35268 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_c35268 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %arg_3:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_c35268
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_c35268
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_c35268
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/c5af1e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/c5af1e.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/c5af1e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/c5af1e.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/c63f05.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/c63f05.wgsl.expected.ir.msl
index 1d3dd99..fa0aeb6 100644
--- a/test/tint/builtins/gen/var/textureStore/c63f05.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/c63f05.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_c63f05 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_c63f05 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %arg_3:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_c63f05
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_c63f05
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_c63f05
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/c79451.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/c79451.wgsl.expected.ir.msl
index eae648d..c549203 100644
--- a/test/tint/builtins/gen/var/textureStore/c79451.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/c79451.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba16sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_c79451 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_c79451 = func():void {
+  $B2: {
     %arg_1:ptr<function, u32, read_write> = var, 1u
     %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %5:texture_storage_1d<rgba16sint, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_c79451
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_c79451
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_c79451
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/c863be.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/c863be.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/c863be.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/c863be.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/c9d780.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/c9d780.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/c9d780.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/c9d780.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/cb3b0b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/cb3b0b.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/cb3b0b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/cb3b0b.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/ccac20.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/ccac20.wgsl.expected.ir.msl
index 53dc735..f5d4d71 100644
--- a/test/tint/builtins/gen/var/textureStore/ccac20.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/ccac20.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba32float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_ccac20 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_ccac20 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %5:texture_storage_2d<rgba32float, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_ccac20
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_ccac20
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_ccac20
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/cd6755.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/cd6755.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/cd6755.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/cd6755.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/ceb832.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/ceb832.wgsl.expected.ir.msl
index b19f38c..a2cddf8 100644
--- a/test/tint/builtins/gen/var/textureStore/ceb832.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/ceb832.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_ceb832 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_ceb832 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %arg_3:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_ceb832
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_ceb832
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_ceb832
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/d0d62c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/d0d62c.wgsl.expected.ir.msl
index bc53eed..8a8aeae5 100644
--- a/test/tint/builtins/gen/var/textureStore/d0d62c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/d0d62c.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_d0d62c = func():void -> %b2 {
-  %b2 = block {
+%textureStore_d0d62c = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
     %5:texture_storage_2d<rgba8uint, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_d0d62c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_d0d62c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_d0d62c
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/d0fadc.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/d0fadc.wgsl.expected.ir.msl
index 8875e75..93b597d 100644
--- a/test/tint/builtins/gen/var/textureStore/d0fadc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/d0fadc.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_d0fadc = func():void -> %b2 {
-  %b2 = block {
+%textureStore_d0fadc = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_d0fadc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_d0fadc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_d0fadc
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/d19db4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/d19db4.wgsl.expected.ir.msl
index 55d0702..9731f92 100644
--- a/test/tint/builtins/gen/var/textureStore/d19db4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/d19db4.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rg32sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_d19db4 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_d19db4 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
     %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %5:texture_storage_3d<rg32sint, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_d19db4
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_d19db4
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_d19db4
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/d1ab82.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/d1ab82.wgsl.expected.ir.msl
index 8a9d678..dbf2afd 100644
--- a/test/tint/builtins/gen/var/textureStore/d1ab82.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/d1ab82.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_d1ab82 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_d1ab82 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %5:texture_storage_2d<rgba8unorm, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_d1ab82
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_d1ab82
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_d1ab82
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/d26166.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/d26166.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/d26166.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/d26166.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/d2b565.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/d2b565.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/d2b565.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/d2b565.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/d3a22b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/d3a22b.wgsl.expected.ir.msl
index edd30e8..b549a6d 100644
--- a/test/tint/builtins/gen/var/textureStore/d3a22b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/d3a22b.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba32uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_d3a22b = func():void -> %b2 {
-  %b2 = block {
+%textureStore_d3a22b = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
     %5:texture_storage_3d<rgba32uint, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_d3a22b
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_d3a22b
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_d3a22b
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/d4aa95.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/d4aa95.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/d4aa95.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/d4aa95.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/d55e65.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/d55e65.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/d55e65.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/d55e65.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/d73b5c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/d73b5c.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/d73b5c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/d73b5c.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/d82b0a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/d82b0a.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/d82b0a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/d82b0a.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/d86d33.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/d86d33.wgsl.expected.ir.msl
index 9655d33..55e1d40 100644
--- a/test/tint/builtins/gen/var/textureStore/d86d33.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/d86d33.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_d86d33 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_d86d33 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_d86d33
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_d86d33
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_d86d33
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/da530c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/da530c.wgsl.expected.ir.msl
index 8d65137..4119885 100644
--- a/test/tint/builtins/gen/var/textureStore/da530c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/da530c.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_da530c = func():void -> %b2 {
-  %b2 = block {
+%textureStore_da530c = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %5:texture_storage_2d<rgba8sint, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_da530c
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_da530c
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_da530c
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/db5128.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/db5128.wgsl.expected.ir.msl
index 0270ad3..1e12a3d 100644
--- a/test/tint/builtins/gen/var/textureStore/db5128.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/db5128.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_db5128 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_db5128 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %arg_3:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_db5128
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_db5128
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_db5128
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/db92a2.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/db92a2.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/db92a2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/db92a2.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/dce0e2.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/dce0e2.wgsl.expected.ir.msl
index 90c5098..cf76d73 100644
--- a/test/tint/builtins/gen/var/textureStore/dce0e2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/dce0e2.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<r32float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_dce0e2 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_dce0e2 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_dce0e2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_dce0e2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_dce0e2
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/dd7d81.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/dd7d81.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/dd7d81.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/dd7d81.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/dd8b29.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/dd8b29.wgsl.expected.ir.msl
index a363af6..3609c74 100644
--- a/test/tint/builtins/gen/var/textureStore/dd8b29.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/dd8b29.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_dd8b29 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_dd8b29 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %arg_3:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_dd8b29
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_dd8b29
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_dd8b29
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/dde364.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/dde364.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/dde364.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/dde364.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/de38e5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/de38e5.wgsl.expected.ir.msl
index 6dda126..e86a4f9 100644
--- a/test/tint/builtins/gen/var/textureStore/de38e5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/de38e5.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_de38e5 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_de38e5 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %5:texture_storage_3d<rgba8snorm, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_de38e5
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_de38e5
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_de38e5
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/de4b94.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/de4b94.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/de4b94.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/de4b94.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/df0c51.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/df0c51.wgsl.expected.ir.msl
index d47e934..fa083ce 100644
--- a/test/tint/builtins/gen/var/textureStore/df0c51.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/df0c51.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_3d<r32sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_df0c51 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_df0c51 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
     %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %5:texture_storage_3d<r32sint, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_df0c51
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_df0c51
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_df0c51
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/df2ca4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/df2ca4.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/df2ca4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/df2ca4.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/dfa9a1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/dfa9a1.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/dfa9a1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/dfa9a1.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/dffb13.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/dffb13.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/dffb13.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/dffb13.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/e077e7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/e077e7.wgsl.expected.ir.msl
index 6ae5e01..3778928 100644
--- a/test/tint/builtins/gen/var/textureStore/e077e7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/e077e7.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rg32sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_e077e7 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_e077e7 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %5:texture_storage_1d<rg32sint, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_e077e7
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_e077e7
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_e077e7
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/e0b666.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/e0b666.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/e0b666.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/e0b666.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/e1784d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/e1784d.wgsl.expected.ir.msl
index 3ba81ce..06d5068 100644
--- a/test/tint/builtins/gen/var/textureStore/e1784d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/e1784d.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_e1784d = func():void -> %b2 {
-  %b2 = block {
+%textureStore_e1784d = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_e1784d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_e1784d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_e1784d
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/e38281.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/e38281.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/e38281.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/e38281.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/e46fd8.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/e46fd8.wgsl.expected.ir.msl
index fc54acc..48ef92f 100644
--- a/test/tint/builtins/gen/var/textureStore/e46fd8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/e46fd8.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_e46fd8 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_e46fd8 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %5:texture_storage_2d<bgra8unorm, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_e46fd8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_e46fd8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_e46fd8
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/e72bdc.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/e72bdc.wgsl.expected.ir.msl
index 143063b..2c62ba2 100644
--- a/test/tint/builtins/gen/var/textureStore/e72bdc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/e72bdc.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba16float, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_e72bdc = func():void -> %b2 {
-  %b2 = block {
+%textureStore_e72bdc = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_e72bdc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_e72bdc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_e72bdc
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/e7c6d8.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/e7c6d8.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/e7c6d8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/e7c6d8.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/e87f6e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/e87f6e.wgsl.expected.ir.msl
index 3d3f1aa..4b22641 100644
--- a/test/tint/builtins/gen/var/textureStore/e87f6e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/e87f6e.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba16sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_e87f6e = func():void -> %b2 {
-  %b2 = block {
+%textureStore_e87f6e = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %5:texture_storage_1d<rgba16sint, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_e87f6e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_e87f6e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_e87f6e
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/e885e8.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/e885e8.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/e885e8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/e885e8.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/e8cbf7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/e8cbf7.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/e8cbf7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/e8cbf7.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/ea30d2.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/ea30d2.wgsl.expected.ir.msl
index c4f8cbc..62be2a5 100644
--- a/test/tint/builtins/gen/var/textureStore/ea30d2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/ea30d2.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rg32sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_ea30d2 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_ea30d2 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %arg_3:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_ea30d2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_ea30d2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_ea30d2
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/eb702f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/eb702f.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/eb702f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/eb702f.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/eb78b9.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/eb78b9.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/eb78b9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/eb78b9.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/ed6198.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/ed6198.wgsl.expected.ir.msl
new file mode 100644
index 0000000..ca81700
--- /dev/null
+++ b/test/tint/builtins/gen/var/textureStore/ed6198.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
+  %arg_0:ptr<handle, texture_storage_3d<r8unorm, read_write>, read> = var @binding_point(1, 0)
+}
+
+%textureStore_ed6198 = func():void {
+  $B2: {
+    %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
+    %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
+    %5:texture_storage_3d<r8unorm, read_write> = load %arg_0
+    %6:vec3<i32> = load %arg_1
+    %7:vec4<f32> = load %arg_2
+    %8:void = textureStore %5, %6, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %10:void = call %textureStore_ed6198
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %12:void = call %textureStore_ed6198
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %14:void = call %textureStore_ed6198
+    ret
+  }
+}
+
+invalid access control for storage texture
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/ee6acc.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/ee6acc.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/ee6acc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/ee6acc.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/ef9f2f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/ef9f2f.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/ef9f2f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/ef9f2f.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/f05928.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/f05928.wgsl.expected.ir.msl
index 3c30775..f8f8682 100644
--- a/test/tint/builtins/gen/var/textureStore/f05928.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/f05928.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_f05928 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_f05928 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, u32, read_write> = var, 1u
     %arg_3:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_f05928
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_f05928
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_f05928
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/f1e6d3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/f1e6d3.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/f1e6d3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/f1e6d3.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/f64d69.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/f64d69.wgsl.expected.ir.msl
index b3832f7..485768a 100644
--- a/test/tint/builtins/gen/var/textureStore/f64d69.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/f64d69.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<r32sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_f64d69 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_f64d69 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
     %5:texture_storage_1d<r32sint, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_f64d69
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_f64d69
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_f64d69
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/f6f392.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/f6f392.wgsl.expected.ir.msl
index a7dd882..145d90c 100644
--- a/test/tint/builtins/gen/var/textureStore/f6f392.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/f6f392.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_f6f392 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_f6f392 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_f6f392
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_f6f392
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_f6f392
     ret
   }
diff --git a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/f7b0ab.wgsl.expected.ir.msl
similarity index 75%
copy from test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.ir.msl
copy to test/tint/builtins/gen/var/textureStore/f7b0ab.wgsl.expected.ir.msl
index efdd3b1..877ebc6 100644
--- a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/f7b0ab.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/f8aaf9.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/f8aaf9.wgsl.expected.ir.msl
index 0751f30..1ed0c01 100644
--- a/test/tint/builtins/gen/var/textureStore/f8aaf9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/f8aaf9.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32sint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_f8aaf9 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_f8aaf9 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %arg_3:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_f8aaf9
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_f8aaf9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_f8aaf9
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/f8dead.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/f8dead.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/f8dead.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/f8dead.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/f975a0.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/f975a0.wgsl.expected.ir.msl
index 3f4afe3..8c3de5d 100644
--- a/test/tint/builtins/gen/var/textureStore/f975a0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/f975a0.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_f975a0 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_f975a0 = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
     %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
     %5:texture_storage_2d<rgba8snorm, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_f975a0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_f975a0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_f975a0
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/f9be83.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/f9be83.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/f9be83.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/f9be83.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/fb9a8f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/fb9a8f.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/fb9a8f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/fb9a8f.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/fbf53f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/fbf53f.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/fbf53f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/fbf53f.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/fc916e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/fc916e.wgsl.expected.ir.msl
index 87840e7..4453e5c 100644
--- a/test/tint/builtins/gen/var/textureStore/fc916e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/fc916e.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_2d_array<rgba32uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_fc916e = func():void -> %b2 {
-  %b2 = block {
+%textureStore_fc916e = func():void {
+  $B2: {
     %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
     %arg_2:ptr<function, i32, read_write> = var, 1i
     %arg_3:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
@@ -17,20 +17,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %12:void = call %textureStore_fc916e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %14:void = call %textureStore_fc916e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %16:void = call %textureStore_fc916e
     ret
   }
diff --git a/test/tint/builtins/gen/var/textureStore/fcbe66.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/fcbe66.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/fcbe66.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/fcbe66.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/fd350c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/fd350c.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/gen/var/textureStore/fd350c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/fd350c.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/textureStore/ff23b3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/ff23b3.wgsl.expected.ir.msl
index 5f6de3d..ce9e3bb 100644
--- a/test/tint/builtins/gen/var/textureStore/ff23b3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/ff23b3.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %arg_0:ptr<handle, texture_storage_1d<rgba16uint, read_write>, read> = var @binding_point(1, 0)
 }
 
-%textureStore_ff23b3 = func():void -> %b2 {
-  %b2 = block {
+%textureStore_ff23b3 = func():void {
+  $B2: {
     %arg_1:ptr<function, i32, read_write> = var, 1i
     %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
     %5:texture_storage_1d<rgba16uint, read_write> = load %arg_0
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %10:void = call %textureStore_ff23b3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %12:void = call %textureStore_ff23b3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %14:void = call %textureStore_ff23b3
     ret
   }
diff --git a/test/tint/builtins/gen/var/transpose/06794e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/transpose/06794e.wgsl.expected.ir.msl
index c183f92..261fed0 100644
--- a/test/tint/builtins/gen/var/transpose/06794e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/transpose/06794e.wgsl.expected.ir.msl
@@ -1,35 +1,49 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, mat3x3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%transpose_06794e = func():void -> %b2 {
-  %b2 = block {
+%transpose_06794e = func():void {
+  $B2: {
     %arg_0:ptr<function, mat3x3<f16>, read_write> = var, mat3x3<f16>(vec3<f16>(1.0h))
     %4:mat3x3<f16> = load %arg_0
     %5:mat3x3<f16> = transpose %4
     %res:ptr<function, mat3x3<f16>, read_write> = var, %5
     %7:mat3x3<f16> = load %res
-    store %prevent_dce, %7
+    %8:void = call %tint_store_and_preserve_padding, %prevent_dce, %7
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %9:void = call %transpose_06794e
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %11:void = call %transpose_06794e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %11:void = call %transpose_06794e
+%fragment_main = @fragment func():void {
+  $B4: {
+    %13:void = call %transpose_06794e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %13:void = call %transpose_06794e
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %15:void = call %transpose_06794e
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat3x3<f16>, read_write>, %value_param:mat3x3<f16>):void {
+  $B6: {
+    %18:ptr<storage, vec3<f16>, read_write> = access %target, 0u
+    %19:vec3<f16> = access %value_param, 0u
+    store %18, %19
+    %20:ptr<storage, vec3<f16>, read_write> = access %target, 1u
+    %21:vec3<f16> = access %value_param, 1u
+    store %20, %21
+    %22:ptr<storage, vec3<f16>, read_write> = access %target, 2u
+    %23:vec3<f16> = access %value_param, 2u
+    store %22, %23
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/transpose/2585cd.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/transpose/2585cd.wgsl.expected.ir.msl
index 80fb064..311ca78 100644
--- a/test/tint/builtins/gen/var/transpose/2585cd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/transpose/2585cd.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, mat3x4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%transpose_2585cd = func():void -> %b2 {
-  %b2 = block {
+%transpose_2585cd = func():void {
+  $B2: {
     %arg_0:ptr<function, mat4x3<f32>, read_write> = var, mat4x3<f32>(vec3<f32>(1.0f))
     %4:mat4x3<f32> = load %arg_0
     %5:mat3x4<f32> = transpose %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %transpose_2585cd
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %transpose_2585cd
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %transpose_2585cd
     ret
   }
diff --git a/test/tint/builtins/gen/var/transpose/31d679.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/transpose/31d679.wgsl.expected.ir.msl
index 42e7ce8..9263541 100644
--- a/test/tint/builtins/gen/var/transpose/31d679.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/transpose/31d679.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, mat2x2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%transpose_31d679 = func():void -> %b2 {
-  %b2 = block {
+%transpose_31d679 = func():void {
+  $B2: {
     %arg_0:ptr<function, mat2x2<f32>, read_write> = var, mat2x2<f32>(vec2<f32>(1.0f))
     %4:mat2x2<f32> = load %arg_0
     %5:mat2x2<f32> = transpose %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %transpose_31d679
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %transpose_31d679
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %transpose_31d679
     ret
   }
diff --git a/test/tint/builtins/gen/var/transpose/31e37e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/transpose/31e37e.wgsl.expected.ir.msl
index 9e9726a..6313de0 100644
--- a/test/tint/builtins/gen/var/transpose/31e37e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/transpose/31e37e.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, mat2x4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%transpose_31e37e = func():void -> %b2 {
-  %b2 = block {
+%transpose_31e37e = func():void {
+  $B2: {
     %arg_0:ptr<function, mat4x2<f32>, read_write> = var, mat4x2<f32>(vec2<f32>(1.0f))
     %4:mat4x2<f32> = load %arg_0
     %5:mat2x4<f32> = transpose %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %transpose_31e37e
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %transpose_31e37e
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %transpose_31e37e
     ret
   }
diff --git a/test/tint/builtins/gen/var/transpose/4ce359.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/transpose/4ce359.wgsl.expected.ir.msl
index db12a04..ad91d30 100644
--- a/test/tint/builtins/gen/var/transpose/4ce359.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/transpose/4ce359.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, mat4x2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%transpose_4ce359 = func():void -> %b2 {
-  %b2 = block {
+%transpose_4ce359 = func():void {
+  $B2: {
     %arg_0:ptr<function, mat2x4<f32>, read_write> = var, mat2x4<f32>(vec4<f32>(1.0f))
     %4:mat2x4<f32> = load %arg_0
     %5:mat4x2<f32> = transpose %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %transpose_4ce359
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %transpose_4ce359
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %transpose_4ce359
     ret
   }
diff --git a/test/tint/builtins/gen/var/transpose/4dc9a1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/transpose/4dc9a1.wgsl.expected.ir.msl
index 180cf5f..29afba3 100644
--- a/test/tint/builtins/gen/var/transpose/4dc9a1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/transpose/4dc9a1.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, mat3x2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%transpose_4dc9a1 = func():void -> %b2 {
-  %b2 = block {
+%transpose_4dc9a1 = func():void {
+  $B2: {
     %arg_0:ptr<function, mat2x3<f32>, read_write> = var, mat2x3<f32>(vec3<f32>(1.0f))
     %4:mat2x3<f32> = load %arg_0
     %5:mat3x2<f32> = transpose %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %transpose_4dc9a1
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %transpose_4dc9a1
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %transpose_4dc9a1
     ret
   }
diff --git a/test/tint/builtins/gen/var/transpose/5edd96.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/transpose/5edd96.wgsl.expected.ir.msl
index 79506a6..359592b 100644
--- a/test/tint/builtins/gen/var/transpose/5edd96.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/transpose/5edd96.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, mat2x4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%transpose_5edd96 = func():void -> %b2 {
-  %b2 = block {
+%transpose_5edd96 = func():void {
+  $B2: {
     %arg_0:ptr<function, mat4x2<f16>, read_write> = var, mat4x2<f16>(vec2<f16>(1.0h))
     %4:mat4x2<f16> = load %arg_0
     %5:mat2x4<f16> = transpose %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %transpose_5edd96
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %transpose_5edd96
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %transpose_5edd96
     ret
   }
diff --git a/test/tint/builtins/gen/var/transpose/5f36bf.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/transpose/5f36bf.wgsl.expected.ir.msl
index 06fac36..044ac83 100644
--- a/test/tint/builtins/gen/var/transpose/5f36bf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/transpose/5f36bf.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, mat3x4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%transpose_5f36bf = func():void -> %b2 {
-  %b2 = block {
+%transpose_5f36bf = func():void {
+  $B2: {
     %arg_0:ptr<function, mat4x3<f16>, read_write> = var, mat4x3<f16>(vec3<f16>(1.0h))
     %4:mat4x3<f16> = load %arg_0
     %5:mat3x4<f16> = transpose %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %transpose_5f36bf
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %transpose_5f36bf
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %transpose_5f36bf
     ret
   }
diff --git a/test/tint/builtins/gen/var/transpose/7be8b2.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/transpose/7be8b2.wgsl.expected.ir.msl
index bad8bed..8a1ed4f 100644
--- a/test/tint/builtins/gen/var/transpose/7be8b2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/transpose/7be8b2.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, mat2x2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%transpose_7be8b2 = func():void -> %b2 {
-  %b2 = block {
+%transpose_7be8b2 = func():void {
+  $B2: {
     %arg_0:ptr<function, mat2x2<f16>, read_write> = var, mat2x2<f16>(vec2<f16>(1.0h))
     %4:mat2x2<f16> = load %arg_0
     %5:mat2x2<f16> = transpose %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %transpose_7be8b2
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %transpose_7be8b2
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %transpose_7be8b2
     ret
   }
diff --git a/test/tint/builtins/gen/var/transpose/844869.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/transpose/844869.wgsl.expected.ir.msl
index e40f90b..e306750 100644
--- a/test/tint/builtins/gen/var/transpose/844869.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/transpose/844869.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, mat4x4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%transpose_844869 = func():void -> %b2 {
-  %b2 = block {
+%transpose_844869 = func():void {
+  $B2: {
     %arg_0:ptr<function, mat4x4<f16>, read_write> = var, mat4x4<f16>(vec4<f16>(1.0h))
     %4:mat4x4<f16> = load %arg_0
     %5:mat4x4<f16> = transpose %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %transpose_844869
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %transpose_844869
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %transpose_844869
     ret
   }
diff --git a/test/tint/builtins/gen/var/transpose/854336.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/transpose/854336.wgsl.expected.ir.msl
index e20d360..2657ea6 100644
--- a/test/tint/builtins/gen/var/transpose/854336.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/transpose/854336.wgsl.expected.ir.msl
@@ -1,35 +1,49 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, mat3x3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%transpose_854336 = func():void -> %b2 {
-  %b2 = block {
+%transpose_854336 = func():void {
+  $B2: {
     %arg_0:ptr<function, mat3x3<f32>, read_write> = var, mat3x3<f32>(vec3<f32>(1.0f))
     %4:mat3x3<f32> = load %arg_0
     %5:mat3x3<f32> = transpose %4
     %res:ptr<function, mat3x3<f32>, read_write> = var, %5
     %7:mat3x3<f32> = load %res
-    store %prevent_dce, %7
+    %8:void = call %tint_store_and_preserve_padding, %prevent_dce, %7
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %9:void = call %transpose_854336
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %11:void = call %transpose_854336
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %11:void = call %transpose_854336
+%fragment_main = @fragment func():void {
+  $B4: {
+    %13:void = call %transpose_854336
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %13:void = call %transpose_854336
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %15:void = call %transpose_854336
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat3x3<f32>, read_write>, %value_param:mat3x3<f32>):void {
+  $B6: {
+    %18:ptr<storage, vec3<f32>, read_write> = access %target, 0u
+    %19:vec3<f32> = access %value_param, 0u
+    store %18, %19
+    %20:ptr<storage, vec3<f32>, read_write> = access %target, 1u
+    %21:vec3<f32> = access %value_param, 1u
+    store %20, %21
+    %22:ptr<storage, vec3<f32>, read_write> = access %target, 2u
+    %23:vec3<f32> = access %value_param, 2u
+    store %22, %23
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/transpose/8c06ce.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/transpose/8c06ce.wgsl.expected.ir.msl
index f8be219..97b23bd 100644
--- a/test/tint/builtins/gen/var/transpose/8c06ce.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/transpose/8c06ce.wgsl.expected.ir.msl
@@ -1,35 +1,52 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, mat4x3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%transpose_8c06ce = func():void -> %b2 {
-  %b2 = block {
+%transpose_8c06ce = func():void {
+  $B2: {
     %arg_0:ptr<function, mat3x4<f16>, read_write> = var, mat3x4<f16>(vec4<f16>(1.0h))
     %4:mat3x4<f16> = load %arg_0
     %5:mat4x3<f16> = transpose %4
     %res:ptr<function, mat4x3<f16>, read_write> = var, %5
     %7:mat4x3<f16> = load %res
-    store %prevent_dce, %7
+    %8:void = call %tint_store_and_preserve_padding, %prevent_dce, %7
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %9:void = call %transpose_8c06ce
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %11:void = call %transpose_8c06ce
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %11:void = call %transpose_8c06ce
+%fragment_main = @fragment func():void {
+  $B4: {
+    %13:void = call %transpose_8c06ce
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %13:void = call %transpose_8c06ce
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %15:void = call %transpose_8c06ce
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat4x3<f16>, read_write>, %value_param:mat4x3<f16>):void {
+  $B6: {
+    %18:ptr<storage, vec3<f16>, read_write> = access %target, 0u
+    %19:vec3<f16> = access %value_param, 0u
+    store %18, %19
+    %20:ptr<storage, vec3<f16>, read_write> = access %target, 1u
+    %21:vec3<f16> = access %value_param, 1u
+    store %20, %21
+    %22:ptr<storage, vec3<f16>, read_write> = access %target, 2u
+    %23:vec3<f16> = access %value_param, 2u
+    store %22, %23
+    %24:ptr<storage, vec3<f16>, read_write> = access %target, 3u
+    %25:vec3<f16> = access %value_param, 3u
+    store %24, %25
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/transpose/b9ad1f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/transpose/b9ad1f.wgsl.expected.ir.msl
index 49c4ef8..78b0244 100644
--- a/test/tint/builtins/gen/var/transpose/b9ad1f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/transpose/b9ad1f.wgsl.expected.ir.msl
@@ -1,35 +1,46 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, mat2x3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%transpose_b9ad1f = func():void -> %b2 {
-  %b2 = block {
+%transpose_b9ad1f = func():void {
+  $B2: {
     %arg_0:ptr<function, mat3x2<f16>, read_write> = var, mat3x2<f16>(vec2<f16>(1.0h))
     %4:mat3x2<f16> = load %arg_0
     %5:mat2x3<f16> = transpose %4
     %res:ptr<function, mat2x3<f16>, read_write> = var, %5
     %7:mat2x3<f16> = load %res
-    store %prevent_dce, %7
+    %8:void = call %tint_store_and_preserve_padding, %prevent_dce, %7
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %9:void = call %transpose_b9ad1f
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %11:void = call %transpose_b9ad1f
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %11:void = call %transpose_b9ad1f
+%fragment_main = @fragment func():void {
+  $B4: {
+    %13:void = call %transpose_b9ad1f
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %13:void = call %transpose_b9ad1f
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %15:void = call %transpose_b9ad1f
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat2x3<f16>, read_write>, %value_param:mat2x3<f16>):void {
+  $B6: {
+    %18:ptr<storage, vec3<f16>, read_write> = access %target, 0u
+    %19:vec3<f16> = access %value_param, 0u
+    store %18, %19
+    %20:ptr<storage, vec3<f16>, read_write> = access %target, 1u
+    %21:vec3<f16> = access %value_param, 1u
+    store %20, %21
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/transpose/c1b600.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/transpose/c1b600.wgsl.expected.ir.msl
index 949e665..1efa863 100644
--- a/test/tint/builtins/gen/var/transpose/c1b600.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/transpose/c1b600.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, mat4x4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%transpose_c1b600 = func():void -> %b2 {
-  %b2 = block {
+%transpose_c1b600 = func():void {
+  $B2: {
     %arg_0:ptr<function, mat4x4<f32>, read_write> = var, mat4x4<f32>(vec4<f32>(1.0f))
     %4:mat4x4<f32> = load %arg_0
     %5:mat4x4<f32> = transpose %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %transpose_c1b600
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %transpose_c1b600
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %transpose_c1b600
     ret
   }
diff --git a/test/tint/builtins/gen/var/transpose/d6faec.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/transpose/d6faec.wgsl.expected.ir.msl
index 5711dd9..5356256 100644
--- a/test/tint/builtins/gen/var/transpose/d6faec.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/transpose/d6faec.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, mat3x2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%transpose_d6faec = func():void -> %b2 {
-  %b2 = block {
+%transpose_d6faec = func():void {
+  $B2: {
     %arg_0:ptr<function, mat2x3<f16>, read_write> = var, mat2x3<f16>(vec3<f16>(1.0h))
     %4:mat2x3<f16> = load %arg_0
     %5:mat3x2<f16> = transpose %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %transpose_d6faec
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %transpose_d6faec
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %transpose_d6faec
     ret
   }
diff --git a/test/tint/builtins/gen/var/transpose/d8f8ba.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/transpose/d8f8ba.wgsl.expected.ir.msl
index 30bb8e1..cec83cb 100644
--- a/test/tint/builtins/gen/var/transpose/d8f8ba.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/transpose/d8f8ba.wgsl.expected.ir.msl
@@ -1,35 +1,52 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, mat4x3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%transpose_d8f8ba = func():void -> %b2 {
-  %b2 = block {
+%transpose_d8f8ba = func():void {
+  $B2: {
     %arg_0:ptr<function, mat3x4<f32>, read_write> = var, mat3x4<f32>(vec4<f32>(1.0f))
     %4:mat3x4<f32> = load %arg_0
     %5:mat4x3<f32> = transpose %4
     %res:ptr<function, mat4x3<f32>, read_write> = var, %5
     %7:mat4x3<f32> = load %res
-    store %prevent_dce, %7
+    %8:void = call %tint_store_and_preserve_padding, %prevent_dce, %7
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %9:void = call %transpose_d8f8ba
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %11:void = call %transpose_d8f8ba
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %11:void = call %transpose_d8f8ba
+%fragment_main = @fragment func():void {
+  $B4: {
+    %13:void = call %transpose_d8f8ba
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %13:void = call %transpose_d8f8ba
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %15:void = call %transpose_d8f8ba
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat4x3<f32>, read_write>, %value_param:mat4x3<f32>):void {
+  $B6: {
+    %18:ptr<storage, vec3<f32>, read_write> = access %target, 0u
+    %19:vec3<f32> = access %value_param, 0u
+    store %18, %19
+    %20:ptr<storage, vec3<f32>, read_write> = access %target, 1u
+    %21:vec3<f32> = access %value_param, 1u
+    store %20, %21
+    %22:ptr<storage, vec3<f32>, read_write> = access %target, 2u
+    %23:vec3<f32> = access %value_param, 2u
+    store %22, %23
+    %24:ptr<storage, vec3<f32>, read_write> = access %target, 3u
+    %25:vec3<f32> = access %value_param, 3u
+    store %24, %25
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/transpose/ed4bdc.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/transpose/ed4bdc.wgsl.expected.ir.msl
index 4c57aaa..0959c68 100644
--- a/test/tint/builtins/gen/var/transpose/ed4bdc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/transpose/ed4bdc.wgsl.expected.ir.msl
@@ -1,35 +1,46 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, mat2x3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%transpose_ed4bdc = func():void -> %b2 {
-  %b2 = block {
+%transpose_ed4bdc = func():void {
+  $B2: {
     %arg_0:ptr<function, mat3x2<f32>, read_write> = var, mat3x2<f32>(vec2<f32>(1.0f))
     %4:mat3x2<f32> = load %arg_0
     %5:mat2x3<f32> = transpose %4
     %res:ptr<function, mat2x3<f32>, read_write> = var, %5
     %7:mat2x3<f32> = load %res
-    store %prevent_dce, %7
+    %8:void = call %tint_store_and_preserve_padding, %prevent_dce, %7
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
-    %9:void = call %transpose_ed4bdc
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %11:void = call %transpose_ed4bdc
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
-    %11:void = call %transpose_ed4bdc
+%fragment_main = @fragment func():void {
+  $B4: {
+    %13:void = call %transpose_ed4bdc
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %13:void = call %transpose_ed4bdc
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %15:void = call %transpose_ed4bdc
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat2x3<f32>, read_write>, %value_param:mat2x3<f32>):void {
+  $B6: {
+    %18:ptr<storage, vec3<f32>, read_write> = access %target, 0u
+    %19:vec3<f32> = access %value_param, 0u
+    store %18, %19
+    %20:ptr<storage, vec3<f32>, read_write> = access %target, 1u
+    %21:vec3<f32> = access %value_param, 1u
+    store %20, %21
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/transpose/faeb05.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/transpose/faeb05.wgsl.expected.ir.msl
index 47b0f85..5ad9494 100644
--- a/test/tint/builtins/gen/var/transpose/faeb05.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/transpose/faeb05.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, mat4x2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%transpose_faeb05 = func():void -> %b2 {
-  %b2 = block {
+%transpose_faeb05 = func():void {
+  $B2: {
     %arg_0:ptr<function, mat2x4<f16>, read_write> = var, mat2x4<f16>(vec4<f16>(1.0h))
     %4:mat2x4<f16> = load %arg_0
     %5:mat4x2<f16> = transpose %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %transpose_faeb05
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %transpose_faeb05
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %transpose_faeb05
     ret
   }
diff --git a/test/tint/builtins/gen/var/trunc/103ab8.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/trunc/103ab8.wgsl.expected.ir.msl
index a65d3b6..5d4dd5d 100644
--- a/test/tint/builtins/gen/var/trunc/103ab8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/trunc/103ab8.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%trunc_103ab8 = func():void -> %b2 {
-  %b2 = block {
+%trunc_103ab8 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f16>, read_write> = var, vec3<f16>(1.5h)
     %4:vec3<f16> = load %arg_0
     %5:vec3<f16> = trunc %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %trunc_103ab8
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %trunc_103ab8
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %trunc_103ab8
     ret
   }
diff --git a/test/tint/builtins/gen/var/trunc/562d05.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/trunc/562d05.wgsl.expected.ir.msl
index 2fd8f1c..b5a2a06 100644
--- a/test/tint/builtins/gen/var/trunc/562d05.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/trunc/562d05.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec3<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%trunc_562d05 = func():void -> %b2 {
-  %b2 = block {
+%trunc_562d05 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec3<f32>, read_write> = var, vec3<f32>(1.5f)
     %4:vec3<f32> = load %arg_0
     %5:vec3<f32> = trunc %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %trunc_562d05
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %trunc_562d05
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %trunc_562d05
     ret
   }
diff --git a/test/tint/builtins/gen/var/trunc/a56109.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/trunc/a56109.wgsl.expected.ir.msl
index 790a3c6..e5831e0 100644
--- a/test/tint/builtins/gen/var/trunc/a56109.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/trunc/a56109.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%trunc_a56109 = func():void -> %b2 {
-  %b2 = block {
+%trunc_a56109 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f16>, read_write> = var, vec2<f16>(1.5h)
     %4:vec2<f16> = load %arg_0
     %5:vec2<f16> = trunc %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %trunc_a56109
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %trunc_a56109
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %trunc_a56109
     ret
   }
diff --git a/test/tint/builtins/gen/var/trunc/cc2b0d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/trunc/cc2b0d.wgsl.expected.ir.msl
index ecb34c3..080e32e 100644
--- a/test/tint/builtins/gen/var/trunc/cc2b0d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/trunc/cc2b0d.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%trunc_cc2b0d = func():void -> %b2 {
-  %b2 = block {
+%trunc_cc2b0d = func():void {
+  $B2: {
     %arg_0:ptr<function, f16, read_write> = var, 1.5h
     %4:f16 = load %arg_0
     %5:f16 = trunc %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %trunc_cc2b0d
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %trunc_cc2b0d
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %trunc_cc2b0d
     ret
   }
diff --git a/test/tint/builtins/gen/var/trunc/ce7c17.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/trunc/ce7c17.wgsl.expected.ir.msl
index 432ef96..974ed09 100644
--- a/test/tint/builtins/gen/var/trunc/ce7c17.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/trunc/ce7c17.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f16>, read_write> = var @binding_point(2, 0)
 }
 
-%trunc_ce7c17 = func():void -> %b2 {
-  %b2 = block {
+%trunc_ce7c17 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f16>, read_write> = var, vec4<f16>(1.5h)
     %4:vec4<f16> = load %arg_0
     %5:vec4<f16> = trunc %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %trunc_ce7c17
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %trunc_ce7c17
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %trunc_ce7c17
     ret
   }
diff --git a/test/tint/builtins/gen/var/trunc/e183aa.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/trunc/e183aa.wgsl.expected.ir.msl
index ae0dc76..9147f0c 100644
--- a/test/tint/builtins/gen/var/trunc/e183aa.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/trunc/e183aa.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%trunc_e183aa = func():void -> %b2 {
-  %b2 = block {
+%trunc_e183aa = func():void {
+  $B2: {
     %arg_0:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.5f)
     %4:vec4<f32> = load %arg_0
     %5:vec4<f32> = trunc %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %trunc_e183aa
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %trunc_e183aa
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %trunc_e183aa
     ret
   }
diff --git a/test/tint/builtins/gen/var/trunc/eb83df.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/trunc/eb83df.wgsl.expected.ir.msl
index 375a5b3..5e9ad23 100644
--- a/test/tint/builtins/gen/var/trunc/eb83df.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/trunc/eb83df.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%trunc_eb83df = func():void -> %b2 {
-  %b2 = block {
+%trunc_eb83df = func():void {
+  $B2: {
     %arg_0:ptr<function, f32, read_write> = var, 1.5f
     %4:f32 = load %arg_0
     %5:f32 = trunc %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %trunc_eb83df
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %trunc_eb83df
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %trunc_eb83df
     ret
   }
diff --git a/test/tint/builtins/gen/var/trunc/f370d3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/trunc/f370d3.wgsl.expected.ir.msl
index 800a3f1..8be7106 100644
--- a/test/tint/builtins/gen/var/trunc/f370d3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/trunc/f370d3.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%trunc_f370d3 = func():void -> %b2 {
-  %b2 = block {
+%trunc_f370d3 = func():void {
+  $B2: {
     %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.5f)
     %4:vec2<f32> = load %arg_0
     %5:vec2<f32> = trunc %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %trunc_f370d3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %trunc_f370d3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %trunc_f370d3
     ret
   }
diff --git a/test/tint/builtins/gen/var/unpack2x16float/32a5cf.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/unpack2x16float/32a5cf.wgsl.expected.ir.msl
index 8fcb6bc..03355e9 100644
--- a/test/tint/builtins/gen/var/unpack2x16float/32a5cf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/unpack2x16float/32a5cf.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%unpack2x16float_32a5cf = func():void -> %b2 {
-  %b2 = block {
+%unpack2x16float_32a5cf = func():void {
+  $B2: {
     %arg_0:ptr<function, u32, read_write> = var, 1u
     %4:u32 = load %arg_0
     %5:vec2<f32> = unpack2x16float %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %unpack2x16float_32a5cf
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %unpack2x16float_32a5cf
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %unpack2x16float_32a5cf
     ret
   }
diff --git a/test/tint/builtins/gen/var/unpack2x16snorm/b4aea6.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/unpack2x16snorm/b4aea6.wgsl.expected.ir.msl
index 62de467..b1436dc 100644
--- a/test/tint/builtins/gen/var/unpack2x16snorm/b4aea6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/unpack2x16snorm/b4aea6.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%unpack2x16snorm_b4aea6 = func():void -> %b2 {
-  %b2 = block {
+%unpack2x16snorm_b4aea6 = func():void {
+  $B2: {
     %arg_0:ptr<function, u32, read_write> = var, 1u
     %4:u32 = load %arg_0
     %5:vec2<f32> = unpack2x16snorm %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %unpack2x16snorm_b4aea6
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %unpack2x16snorm_b4aea6
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %unpack2x16snorm_b4aea6
     ret
   }
diff --git a/test/tint/builtins/gen/var/unpack2x16unorm/7699c0.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/unpack2x16unorm/7699c0.wgsl.expected.ir.msl
index 1e32846..9e0567e 100644
--- a/test/tint/builtins/gen/var/unpack2x16unorm/7699c0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/unpack2x16unorm/7699c0.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec2<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%unpack2x16unorm_7699c0 = func():void -> %b2 {
-  %b2 = block {
+%unpack2x16unorm_7699c0 = func():void {
+  $B2: {
     %arg_0:ptr<function, u32, read_write> = var, 1u
     %4:u32 = load %arg_0
     %5:vec2<f32> = unpack2x16unorm %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %unpack2x16unorm_7699c0
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %unpack2x16unorm_7699c0
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %unpack2x16unorm_7699c0
     ret
   }
diff --git a/test/tint/builtins/gen/var/unpack4x8snorm/523fb3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/unpack4x8snorm/523fb3.wgsl.expected.ir.msl
index 6852926..555db7f 100644
--- a/test/tint/builtins/gen/var/unpack4x8snorm/523fb3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/unpack4x8snorm/523fb3.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%unpack4x8snorm_523fb3 = func():void -> %b2 {
-  %b2 = block {
+%unpack4x8snorm_523fb3 = func():void {
+  $B2: {
     %arg_0:ptr<function, u32, read_write> = var, 1u
     %4:u32 = load %arg_0
     %5:vec4<f32> = unpack4x8snorm %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %unpack4x8snorm_523fb3
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %unpack4x8snorm_523fb3
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %unpack4x8snorm_523fb3
     ret
   }
diff --git a/test/tint/builtins/gen/var/unpack4x8unorm/750c74.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/unpack4x8unorm/750c74.wgsl.expected.ir.msl
index 6116f3e..463fb4c 100644
--- a/test/tint/builtins/gen/var/unpack4x8unorm/750c74.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/unpack4x8unorm/750c74.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
 }
 
-%unpack4x8unorm_750c74 = func():void -> %b2 {
-  %b2 = block {
+%unpack4x8unorm_750c74 = func():void {
+  $B2: {
     %arg_0:ptr<function, u32, read_write> = var, 1u
     %4:u32 = load %arg_0
     %5:vec4<f32> = unpack4x8unorm %4
@@ -15,20 +15,20 @@
     ret
   }
 }
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
-  %b3 = block {
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
     %9:void = call %unpack4x8unorm_750c74
     ret vec4<f32>(0.0f)
   }
 }
-%fragment_main = @fragment func():void -> %b4 {
-  %b4 = block {
+%fragment_main = @fragment func():void {
+  $B4: {
     %11:void = call %unpack4x8unorm_750c74
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
     %13:void = call %unpack4x8unorm_750c74
     ret
   }
diff --git a/test/tint/builtins/gen/var/unpack4xI8/830900.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/unpack4xI8/830900.wgsl.expected.ir.msl
new file mode 100644
index 0000000..9aa3ccd
--- /dev/null
+++ b/test/tint/builtins/gen/var/unpack4xI8/830900.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec4<i32>, read_write> = var @binding_point(2, 0)
+}
+
+%unpack4xI8_830900 = func():void {
+  $B2: {
+    %arg_0:ptr<function, u32, read_write> = var, 1u
+    %4:u32 = load %arg_0
+    %5:vec4<i32> = unpack4xI8 %4
+    %res:ptr<function, vec4<i32>, read_write> = var, %5
+    %7:vec4<i32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %unpack4xI8_830900
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %unpack4xI8_830900
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %unpack4xI8_830900
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/unpack4xU8/a5ea55.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/unpack4xU8/a5ea55.wgsl.expected.ir.msl
new file mode 100644
index 0000000..c483088
--- /dev/null
+++ b/test/tint/builtins/gen/var/unpack4xU8/a5ea55.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %prevent_dce:ptr<storage, vec4<u32>, read_write> = var @binding_point(2, 0)
+}
+
+%unpack4xU8_a5ea55 = func():void {
+  $B2: {
+    %arg_0:ptr<function, u32, read_write> = var, 1u
+    %4:u32 = load %arg_0
+    %5:vec4<u32> = unpack4xU8 %4
+    %res:ptr<function, vec4<u32>, read_write> = var, %5
+    %7:vec4<u32> = load %res
+    store %prevent_dce, %7
+    ret
+  }
+}
+%vertex_main = @vertex func():vec4<f32> [@position] {
+  $B3: {
+    %9:void = call %unpack4xU8_a5ea55
+    ret vec4<f32>(0.0f)
+  }
+}
+%fragment_main = @fragment func():void {
+  $B4: {
+    %11:void = call %unpack4xU8_a5ea55
+    ret
+  }
+}
+%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %unpack4xU8_a5ea55
+    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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/var/workgroupBarrier/a17f7f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/workgroupBarrier/a17f7f.wgsl.expected.ir.msl
index c34ab0a..96b8d6d 100644
--- a/test/tint/builtins/gen/var/workgroupBarrier/a17f7f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/workgroupBarrier/a17f7f.wgsl.expected.ir.msl
@@ -1,9 +1,9 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void workgroupBarrier_a17f7f() {
+  threadgroup_barrier(mem_flags::mem_threadgroup);
+}
+kernel void compute_main() {
+  workgroupBarrier_a17f7f();
+}
diff --git a/test/tint/builtins/gen/var/workgroupUniformLoad/37307c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/workgroupUniformLoad/37307c.wgsl.expected.ir.msl
index 959bbd3..f8281db 100644
--- a/test/tint/builtins/gen/var/workgroupUniformLoad/37307c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/workgroupUniformLoad/37307c.wgsl.expected.ir.msl
@@ -1,24 +1,33 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<workgroup, u32, read_write> = var
   %prevent_dce:ptr<storage, u32, read_write> = var @binding_point(2, 0)
 }
 
-%workgroupUniformLoad_37307c = func():void -> %b2 {
-  %b2 = block {
-    %4:void = workgroupBarrier
+%workgroupUniformLoad_37307c = func():void {
+  $B2: {
+    %4:void = msl.threadgroup_barrier 4u
     %5:u32 = load %arg_0
-    %6:void = workgroupBarrier
-    %res:ptr<function, u32, read_write> = var, %5
-    %8:u32 = load %res
-    store %prevent_dce, %8
+    %6:u32 = let %5
+    %7:void = msl.threadgroup_barrier 4u
+    %res:ptr<function, u32, read_write> = var, %6
+    %9:u32 = load %res
+    store %prevent_dce, %9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
-    %10:void = call %workgroupUniformLoad_37307c
+%compute_main = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B3: {
+    %12:bool = eq %tint_local_index, 0u
+    if %12 [t: $B4] {  # if_1
+      $B4: {  # true
+        store %arg_0, 0u
+        exit_if  # if_1
+      }
+    }
+    %13:void = msl.threadgroup_barrier 4u
+    %14:void = call %workgroupUniformLoad_37307c
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/workgroupUniformLoad/7a857c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/workgroupUniformLoad/7a857c.wgsl.expected.ir.msl
index 2529246..e2eb2fb 100644
--- a/test/tint/builtins/gen/var/workgroupUniformLoad/7a857c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/workgroupUniformLoad/7a857c.wgsl.expected.ir.msl
@@ -1,24 +1,33 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<workgroup, f32, read_write> = var
   %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
 }
 
-%workgroupUniformLoad_7a857c = func():void -> %b2 {
-  %b2 = block {
-    %4:void = workgroupBarrier
+%workgroupUniformLoad_7a857c = func():void {
+  $B2: {
+    %4:void = msl.threadgroup_barrier 4u
     %5:f32 = load %arg_0
-    %6:void = workgroupBarrier
-    %res:ptr<function, f32, read_write> = var, %5
-    %8:f32 = load %res
-    store %prevent_dce, %8
+    %6:f32 = let %5
+    %7:void = msl.threadgroup_barrier 4u
+    %res:ptr<function, f32, read_write> = var, %6
+    %9:f32 = load %res
+    store %prevent_dce, %9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
-    %10:void = call %workgroupUniformLoad_7a857c
+%compute_main = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B3: {
+    %12:bool = eq %tint_local_index, 0u
+    if %12 [t: $B4] {  # if_1
+      $B4: {  # true
+        store %arg_0, 0.0f
+        exit_if  # if_1
+      }
+    }
+    %13:void = msl.threadgroup_barrier 4u
+    %14:void = call %workgroupUniformLoad_7a857c
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/workgroupUniformLoad/9d33de.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/workgroupUniformLoad/9d33de.wgsl.expected.ir.msl
index 89dabfa..3bb3f44 100644
--- a/test/tint/builtins/gen/var/workgroupUniformLoad/9d33de.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/workgroupUniformLoad/9d33de.wgsl.expected.ir.msl
@@ -1,24 +1,33 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<workgroup, i32, read_write> = var
   %prevent_dce:ptr<storage, i32, read_write> = var @binding_point(2, 0)
 }
 
-%workgroupUniformLoad_9d33de = func():void -> %b2 {
-  %b2 = block {
-    %4:void = workgroupBarrier
+%workgroupUniformLoad_9d33de = func():void {
+  $B2: {
+    %4:void = msl.threadgroup_barrier 4u
     %5:i32 = load %arg_0
-    %6:void = workgroupBarrier
-    %res:ptr<function, i32, read_write> = var, %5
-    %8:i32 = load %res
-    store %prevent_dce, %8
+    %6:i32 = let %5
+    %7:void = msl.threadgroup_barrier 4u
+    %res:ptr<function, i32, read_write> = var, %6
+    %9:i32 = load %res
+    store %prevent_dce, %9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
-    %10:void = call %workgroupUniformLoad_9d33de
+%compute_main = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B3: {
+    %12:bool = eq %tint_local_index, 0u
+    if %12 [t: $B4] {  # if_1
+      $B4: {  # true
+        store %arg_0, 0i
+        exit_if  # if_1
+      }
+    }
+    %13:void = msl.threadgroup_barrier 4u
+    %14:void = call %workgroupUniformLoad_9d33de
     ret
   }
 }
diff --git a/test/tint/builtins/gen/var/workgroupUniformLoad/e07d08.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/workgroupUniformLoad/e07d08.wgsl.expected.ir.msl
index 036773d..bd29073 100644
--- a/test/tint/builtins/gen/var/workgroupUniformLoad/e07d08.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/workgroupUniformLoad/e07d08.wgsl.expected.ir.msl
@@ -1,24 +1,33 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %arg_0:ptr<workgroup, f16, read_write> = var
   %prevent_dce:ptr<storage, f16, read_write> = var @binding_point(2, 0)
 }
 
-%workgroupUniformLoad_e07d08 = func():void -> %b2 {
-  %b2 = block {
-    %4:void = workgroupBarrier
+%workgroupUniformLoad_e07d08 = func():void {
+  $B2: {
+    %4:void = msl.threadgroup_barrier 4u
     %5:f16 = load %arg_0
-    %6:void = workgroupBarrier
-    %res:ptr<function, f16, read_write> = var, %5
-    %8:f16 = load %res
-    store %prevent_dce, %8
+    %6:f16 = let %5
+    %7:void = msl.threadgroup_barrier 4u
+    %res:ptr<function, f16, read_write> = var, %6
+    %9:f16 = load %res
+    store %prevent_dce, %9
     ret
   }
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
-    %10:void = call %workgroupUniformLoad_e07d08
+%compute_main = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B3: {
+    %12:bool = eq %tint_local_index, 0u
+    if %12 [t: $B4] {  # if_1
+      $B4: {  # true
+        store %arg_0, 0.0h
+        exit_if  # if_1
+      }
+    }
+    %13:void = msl.threadgroup_barrier 4u
+    %14:void = call %workgroupUniformLoad_e07d08
     ret
   }
 }
diff --git a/test/tint/builtins/insertBits/scalar/i32.spvasm.expected.ir.msl b/test/tint/builtins/insertBits/scalar/i32.spvasm.expected.ir.msl
index 8978199..40ec97c 100644
--- a/test/tint/builtins/insertBits/scalar/i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/insertBits/scalar/i32.spvasm.expected.ir.msl
@@ -1,13 +1,9 @@
-#include <metal_stdlib>
-using namespace metal;
+SKIP: FAILED
 
-void f_1() {
-  int v = 0;
-  int n = 0;
-  uint offset_1 = 0u;
-  uint count = 0u;
-  int const x_15 = insert_bits(v, n, offset_1, count);
-}
-kernel void f() {
-  f_1();
-}
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: min
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/builtins/insertBits/scalar/u32.spvasm.expected.ir.msl b/test/tint/builtins/insertBits/scalar/u32.spvasm.expected.ir.msl
index 0714695..40ec97c 100644
--- a/test/tint/builtins/insertBits/scalar/u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/insertBits/scalar/u32.spvasm.expected.ir.msl
@@ -1,13 +1,9 @@
-#include <metal_stdlib>
-using namespace metal;
+SKIP: FAILED
 
-void f_1() {
-  uint v = 0u;
-  uint n = 0u;
-  uint offset_1 = 0u;
-  uint count = 0u;
-  uint const x_12 = insert_bits(v, n, offset_1, count);
-}
-kernel void f() {
-  f_1();
-}
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: min
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/builtins/insertBits/vec3/i32.spvasm.expected.ir.msl b/test/tint/builtins/insertBits/vec3/i32.spvasm.expected.ir.msl
index d37365c..40ec97c 100644
--- a/test/tint/builtins/insertBits/vec3/i32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/insertBits/vec3/i32.spvasm.expected.ir.msl
@@ -1,13 +1,9 @@
-#include <metal_stdlib>
-using namespace metal;
+SKIP: FAILED
 
-void f_1() {
-  int3 v = int3(0);
-  int3 n = int3(0);
-  uint offset_1 = 0u;
-  uint count = 0u;
-  int3 const x_16 = insert_bits(v, n, offset_1, count);
-}
-kernel void f() {
-  f_1();
-}
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: min
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/builtins/insertBits/vec3/u32.spvasm.expected.ir.msl b/test/tint/builtins/insertBits/vec3/u32.spvasm.expected.ir.msl
index 60b6649..40ec97c 100644
--- a/test/tint/builtins/insertBits/vec3/u32.spvasm.expected.ir.msl
+++ b/test/tint/builtins/insertBits/vec3/u32.spvasm.expected.ir.msl
@@ -1,13 +1,9 @@
-#include <metal_stdlib>
-using namespace metal;
+SKIP: FAILED
 
-void f_1() {
-  uint3 v = uint3(0u);
-  uint3 n = uint3(0u);
-  uint offset_1 = 0u;
-  uint count = 0u;
-  uint3 const x_15 = insert_bits(v, n, offset_1, count);
-}
-kernel void f() {
-  f_1();
-}
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: min
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/builtins/modf/scalar/mixed.wgsl.expected.ir.msl b/test/tint/builtins/modf/scalar/mixed.wgsl.expected.ir.msl
index 03c2230..edd7e27e 100644
--- a/test/tint/builtins/modf/scalar/mixed.wgsl.expected.ir.msl
+++ b/test/tint/builtins/modf/scalar/mixed.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: modf
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: modf
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/modf/scalar/runtime.wgsl.expected.ir.msl b/test/tint/builtins/modf/scalar/runtime.wgsl.expected.ir.msl
index 03c2230..edd7e27e 100644
--- a/test/tint/builtins/modf/scalar/runtime.wgsl.expected.ir.msl
+++ b/test/tint/builtins/modf/scalar/runtime.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: modf
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: modf
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/modf/vector/mixed.wgsl.expected.ir.msl b/test/tint/builtins/modf/vector/mixed.wgsl.expected.ir.msl
index 03c2230..edd7e27e 100644
--- a/test/tint/builtins/modf/vector/mixed.wgsl.expected.ir.msl
+++ b/test/tint/builtins/modf/vector/mixed.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: modf
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: modf
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/modf/vector/runtime.wgsl.expected.ir.msl b/test/tint/builtins/modf/vector/runtime.wgsl.expected.ir.msl
index 03c2230..edd7e27e 100644
--- a/test/tint/builtins/modf/vector/runtime.wgsl.expected.ir.msl
+++ b/test/tint/builtins/modf/vector/runtime.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: modf
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: modf
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/radians.spvasm.expected.ir.msl b/test/tint/builtins/radians.spvasm.expected.ir.msl
index efdd3b1..8220f22 100644
--- a/test/tint/builtins/radians.spvasm.expected.ir.msl
+++ b/test/tint/builtins/radians.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: radians
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/repeated_use.wgsl.expected.ir.msl b/test/tint/builtins/repeated_use.wgsl.expected.ir.msl
index 2d453a7..52f1705 100644
--- a/test/tint/builtins/repeated_use.wgsl.expected.ir.msl
+++ b/test/tint/builtins/repeated_use.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: degrees
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: degrees
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/textureDimensions/depth_ms.spvasm.expected.ir.msl b/test/tint/builtins/textureDimensions/depth_ms.spvasm.expected.ir.msl
index b38060a..9a1e6cb 100644
--- a/test/tint/builtins/textureDimensions/depth_ms.spvasm.expected.ir.msl
+++ b/test/tint/builtins/textureDimensions/depth_ms.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureDimensions
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/textureGather/f32/alpha.wgsl.expected.ir.msl b/test/tint/builtins/textureGather/f32/alpha.wgsl.expected.ir.msl
index ed005c1..8de8451 100644
--- a/test/tint/builtins/textureGather/f32/alpha.wgsl.expected.ir.msl
+++ b/test/tint/builtins/textureGather/f32/alpha.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureGather
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureGather
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/textureGather/f32/blue.wgsl.expected.ir.msl b/test/tint/builtins/textureGather/f32/blue.wgsl.expected.ir.msl
index ed005c1..8de8451 100644
--- a/test/tint/builtins/textureGather/f32/blue.wgsl.expected.ir.msl
+++ b/test/tint/builtins/textureGather/f32/blue.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureGather
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureGather
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/textureGather/f32/green.wgsl.expected.ir.msl b/test/tint/builtins/textureGather/f32/green.wgsl.expected.ir.msl
index ed005c1..8de8451 100644
--- a/test/tint/builtins/textureGather/f32/green.wgsl.expected.ir.msl
+++ b/test/tint/builtins/textureGather/f32/green.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureGather
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureGather
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/textureGather/f32/red.wgsl.expected.ir.msl b/test/tint/builtins/textureGather/f32/red.wgsl.expected.ir.msl
index ed005c1..8de8451 100644
--- a/test/tint/builtins/textureGather/f32/red.wgsl.expected.ir.msl
+++ b/test/tint/builtins/textureGather/f32/red.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureGather
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureGather
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/textureGather/i32/alpha.wgsl.expected.ir.msl b/test/tint/builtins/textureGather/i32/alpha.wgsl.expected.ir.msl
index ed005c1..8de8451 100644
--- a/test/tint/builtins/textureGather/i32/alpha.wgsl.expected.ir.msl
+++ b/test/tint/builtins/textureGather/i32/alpha.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureGather
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureGather
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/textureGather/i32/blue.wgsl.expected.ir.msl b/test/tint/builtins/textureGather/i32/blue.wgsl.expected.ir.msl
index ed005c1..8de8451 100644
--- a/test/tint/builtins/textureGather/i32/blue.wgsl.expected.ir.msl
+++ b/test/tint/builtins/textureGather/i32/blue.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureGather
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureGather
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/textureGather/i32/green.wgsl.expected.ir.msl b/test/tint/builtins/textureGather/i32/green.wgsl.expected.ir.msl
index ed005c1..8de8451 100644
--- a/test/tint/builtins/textureGather/i32/green.wgsl.expected.ir.msl
+++ b/test/tint/builtins/textureGather/i32/green.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureGather
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureGather
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/textureGather/i32/red.wgsl.expected.ir.msl b/test/tint/builtins/textureGather/i32/red.wgsl.expected.ir.msl
index ed005c1..8de8451 100644
--- a/test/tint/builtins/textureGather/i32/red.wgsl.expected.ir.msl
+++ b/test/tint/builtins/textureGather/i32/red.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureGather
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureGather
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/textureGather/u32/alpha.wgsl.expected.ir.msl b/test/tint/builtins/textureGather/u32/alpha.wgsl.expected.ir.msl
index ed005c1..8de8451 100644
--- a/test/tint/builtins/textureGather/u32/alpha.wgsl.expected.ir.msl
+++ b/test/tint/builtins/textureGather/u32/alpha.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureGather
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureGather
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/textureGather/u32/blue.wgsl.expected.ir.msl b/test/tint/builtins/textureGather/u32/blue.wgsl.expected.ir.msl
index ed005c1..8de8451 100644
--- a/test/tint/builtins/textureGather/u32/blue.wgsl.expected.ir.msl
+++ b/test/tint/builtins/textureGather/u32/blue.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureGather
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureGather
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/textureGather/u32/green.wgsl.expected.ir.msl b/test/tint/builtins/textureGather/u32/green.wgsl.expected.ir.msl
index ed005c1..8de8451 100644
--- a/test/tint/builtins/textureGather/u32/green.wgsl.expected.ir.msl
+++ b/test/tint/builtins/textureGather/u32/green.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureGather
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureGather
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/textureGather/u32/red.wgsl.expected.ir.msl b/test/tint/builtins/textureGather/u32/red.wgsl.expected.ir.msl
index ed005c1..8de8451 100644
--- a/test/tint/builtins/textureGather/u32/red.wgsl.expected.ir.msl
+++ b/test/tint/builtins/textureGather/u32/red.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureGather
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureGather
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/textureLoad/depth_ms.spvasm.expected.ir.msl b/test/tint/builtins/textureLoad/depth_ms.spvasm.expected.ir.msl
index b38060a..ee65b2d 100644
--- a/test/tint/builtins/textureLoad/depth_ms.spvasm.expected.ir.msl
+++ b/test/tint/builtins/textureLoad/depth_ms.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureLoad
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/textureLoad/texture_external_param.wgsl.expected.ir.msl b/test/tint/builtins/textureLoad/texture_external_param.wgsl.expected.ir.msl
index 63ccb0d..f58a518 100644
--- a/test/tint/builtins/textureLoad/texture_external_param.wgsl.expected.ir.msl
+++ b/test/tint/builtins/textureLoad/texture_external_param.wgsl.expected.ir.msl
@@ -1,46 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1057 internal compiler error: %b1 = block {  # root
-  %arg_0:ptr<handle, texture_external, read> = var @binding_point(1, 0)
+
+@group(1) @binding(0) var arg_0 : texture_external;
+
+fn textureLoad2d(tint_symbol : texture_external, coords : vec2<i32>) -> vec4<f32> {
+  return textureLoad(tint_symbol, coords);
 }
 
-%textureLoad2d = func(%tint_symbol:texture_external, %coords:vec2<i32>):vec4<f32> -> %b2 {
-  %b2 = block {
-    %5:vec4<f32> = textureLoad %tint_symbol, %coords
-    ret %5
-  }
-}
-%doTextureLoad = func():void -> %b3 {
-  %b3 = block {
-    %7:texture_external = load %arg_0
-    %8:vec4<f32> = call %textureLoad2d, %7, vec2<i32>(0i)
-    %res:ptr<function, vec4<f32>, read_write> = var, %8
-    ret
-  }
-}
-%vertex_main = @vertex func():vec4<f32> [@position] -> %b4 {
-  %b4 = block {
-    %11:void = call %doTextureLoad
-    ret vec4<f32>(0.0f)
-  }
-}
-%fragment_main = @fragment func():void -> %b5 {
-  %b5 = block {
-    %13:void = call %doTextureLoad
-    ret
-  }
-}
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {
-  %b6 = block {
-    %15:void = call %doTextureLoad
-    ret
-  }
+fn doTextureLoad() {
+  var res : vec4<f32> = textureLoad2d(arg_0, vec2<i32>());
 }
 
-Multiplanar external texture transform was not run.
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+@vertex
+fn vertex_main() -> @builtin(position) vec4<f32> {
+  doTextureLoad();
+  return vec4<f32>();
+}
+
+@fragment
+fn fragment_main() {
+  doTextureLoad();
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+  doTextureLoad();
+}
+
+Failed to generate: error: ExternalTextureOptions missing binding entry for [group: 1, binding: 0]
diff --git a/test/tint/builtins/textureLoad/texture_param.wgsl.expected.ir.msl b/test/tint/builtins/textureLoad/texture_param.wgsl.expected.ir.msl
index b263553..ee65b2d 100644
--- a/test/tint/builtins/textureLoad/texture_param.wgsl.expected.ir.msl
+++ b/test/tint/builtins/textureLoad/texture_param.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureLoad
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureLoad
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/textureNumSamples/depth_ms.spvasm.expected.ir.msl b/test/tint/builtins/textureNumSamples/depth_ms.spvasm.expected.ir.msl
index b38060a..8b02481 100644
--- a/test/tint/builtins/textureNumSamples/depth_ms.spvasm.expected.ir.msl
+++ b/test/tint/builtins/textureNumSamples/depth_ms.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureNumSamples
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/textureStore/bgraunorm.wgsl.expected.ir.msl b/test/tint/builtins/textureStore/bgraunorm.wgsl.expected.ir.msl
index da59f48..877ebc6 100644
--- a/test/tint/builtins/textureStore/bgraunorm.wgsl.expected.ir.msl
+++ b/test/tint/builtins/textureStore/bgraunorm.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/textureStore/loop_continuing_read_write_texture.wgsl.expected.ir.msl b/test/tint/builtins/textureStore/loop_continuing_read_write_texture.wgsl.expected.ir.msl
index 5660214..d480901 100644
--- a/test/tint/builtins/textureStore/loop_continuing_read_write_texture.wgsl.expected.ir.msl
+++ b/test/tint/builtins/textureStore/loop_continuing_read_write_texture.wgsl.expected.ir.msl
@@ -1,33 +1,33 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:1110 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
   %tex:ptr<handle, texture_storage_2d<r32sint, read_write>, read> = var @binding_point(0, 2)
 }
 
-%foo = func():void -> %b2 {
-  %b2 = block {
-    loop [i: %b3, b: %b4, c: %b5] {  # loop_1
-      %b3 = block {  # initializer
+%foo = func():void {
+  $B2: {
+    loop [i: $B3, b: $B4, c: $B5] {  # loop_1
+      $B3: {  # initializer
         %i:ptr<function, i32, read_write> = var, 0i
-        next_iteration %b4
+        next_iteration  # -> $B4
       }
-      %b4 = block {  # body
+      $B4: {  # body
         %4:i32 = load %i
         %5:bool = lt %4, 3i
-        if %5 [t: %b6, f: %b7] {  # if_1
-          %b6 = block {  # true
+        if %5 [t: $B6, f: $B7] {  # if_1
+          $B6: {  # true
             exit_if  # if_1
           }
-          %b7 = block {  # false
+          $B7: {  # false
             exit_loop  # loop_1
           }
         }
-        continue %b5
+        continue  # -> $B5
       }
-      %b5 = block {  # continuing
+      $B5: {  # continuing
         %6:texture_storage_2d<r32sint, read_write> = load %tex
         %7:void = textureStore %6, vec2<i32>(0i), vec4<i32>(0i)
-        next_iteration %b4
+        next_iteration  # -> $B4
       }
     }
     ret
diff --git a/test/tint/builtins/workgroupUniformLoad/array.wgsl.expected.ir.msl b/test/tint/builtins/workgroupUniformLoad/array.wgsl.expected.ir.msl
index c34ab0a..a1f0594 100644
--- a/test/tint/builtins/workgroupUniformLoad/array.wgsl.expected.ir.msl
+++ b/test/tint/builtins/workgroupUniformLoad/array.wgsl.expected.ir.msl
@@ -1,9 +1,28 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#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];
+};
+
+
+threadgroup tint_array<int, 4> v;
+tint_array<int, 4> foo() {
+  threadgroup_barrier(mem_flags::mem_threadgroup);
+  tint_array<int, 4> const v_1 = v;
+  threadgroup_barrier(mem_flags::mem_threadgroup);
+  return v_1;
+}
+program_source:16:32: error: program scope variable must reside in constant address space
+threadgroup tint_array<int, 4> v;
+                               ^
+
diff --git a/test/tint/builtins/workgroupUniformLoad/array_overridable_count.wgsl.expected.ir.msl b/test/tint/builtins/workgroupUniformLoad/array_overridable_count.wgsl.expected.ir.msl
index c34ab0a..bdcbf5f 100644
--- a/test/tint/builtins/workgroupUniformLoad/array_overridable_count.wgsl.expected.ir.msl
+++ b/test/tint/builtins/workgroupUniformLoad/array_overridable_count.wgsl.expected.ir.msl
@@ -1,9 +1,28 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#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];
+};
+
+
+threadgroup tint_array<int, 128> v;
+int foo() {
+  threadgroup_barrier(mem_flags::mem_threadgroup);
+  tint_array<int, 128> const v_1 = v;
+  threadgroup_barrier(mem_flags::mem_threadgroup);
+  return v_1[0];
+}
+program_source:16:34: error: program scope variable must reside in constant address space
+threadgroup tint_array<int, 128> v;
+                                 ^
+
diff --git a/test/tint/builtins/workgroupUniformLoad/array_overridable_count_aliased.wgsl.expected.ir.msl b/test/tint/builtins/workgroupUniformLoad/array_overridable_count_aliased.wgsl.expected.ir.msl
index c34ab0a..bdcbf5f 100644
--- a/test/tint/builtins/workgroupUniformLoad/array_overridable_count_aliased.wgsl.expected.ir.msl
+++ b/test/tint/builtins/workgroupUniformLoad/array_overridable_count_aliased.wgsl.expected.ir.msl
@@ -1,9 +1,28 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#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];
+};
+
+
+threadgroup tint_array<int, 128> v;
+int foo() {
+  threadgroup_barrier(mem_flags::mem_threadgroup);
+  tint_array<int, 128> const v_1 = v;
+  threadgroup_barrier(mem_flags::mem_threadgroup);
+  return v_1[0];
+}
+program_source:16:34: error: program scope variable must reside in constant address space
+threadgroup tint_array<int, 128> v;
+                                 ^
+
diff --git a/test/tint/builtins/workgroupUniformLoad/bool.wgsl.expected.ir.msl b/test/tint/builtins/workgroupUniformLoad/bool.wgsl.expected.ir.msl
index c34ab0a..7fee66a 100644
--- a/test/tint/builtins/workgroupUniformLoad/bool.wgsl.expected.ir.msl
+++ b/test/tint/builtins/workgroupUniformLoad/bool.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+threadgroup bool v;
+bool foo() {
+  threadgroup_barrier(mem_flags::mem_threadgroup);
+  bool const v_1 = v;
+  threadgroup_barrier(mem_flags::mem_threadgroup);
+  return v_1;
+}
+program_source:4:18: error: program scope variable must reside in constant address space
+threadgroup bool v;
+                 ^
+
diff --git a/test/tint/builtins/workgroupUniformLoad/for_loop.wgsl.expected.ir.msl b/test/tint/builtins/workgroupUniformLoad/for_loop.wgsl.expected.ir.msl
index c34ab0a..644f07b 100644
--- a/test/tint/builtins/workgroupUniformLoad/for_loop.wgsl.expected.ir.msl
+++ b/test/tint/builtins/workgroupUniformLoad/for_loop.wgsl.expected.ir.msl
@@ -1,9 +1,34 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+threadgroup int a;
+threadgroup int b;
+void foo() {
+  {
+    int i = 0;
+    while(true) {
+      int const v = i;
+      threadgroup_barrier(mem_flags::mem_threadgroup);
+      int const v_1 = a;
+      threadgroup_barrier(mem_flags::mem_threadgroup);
+      if ((v < v_1)) {
+      } else {
+        break;
+      }
+      threadgroup_barrier(mem_flags::mem_threadgroup);
+      int const v_2 = b;
+      threadgroup_barrier(mem_flags::mem_threadgroup);
+      i = (i + v_2);
+      continue;
+    }
+  }
+}
+program_source:4:17: error: program scope variable must reside in constant address space
+threadgroup int a;
+                ^
+program_source:5:17: error: program scope variable must reside in constant address space
+threadgroup int b;
+                ^
+
diff --git a/test/tint/builtins/workgroupUniformLoad/if_condition.wgsl.expected.ir.msl b/test/tint/builtins/workgroupUniformLoad/if_condition.wgsl.expected.ir.msl
index c34ab0a..4184af3 100644
--- a/test/tint/builtins/workgroupUniformLoad/if_condition.wgsl.expected.ir.msl
+++ b/test/tint/builtins/workgroupUniformLoad/if_condition.wgsl.expected.ir.msl
@@ -1,9 +1,19 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+threadgroup bool v;
+int foo() {
+  threadgroup_barrier(mem_flags::mem_threadgroup);
+  bool const v_1 = v;
+  threadgroup_barrier(mem_flags::mem_threadgroup);
+  if (v_1) {
+    return 42;
+  }
+  return 0;
+}
+program_source:4:18: error: program scope variable must reside in constant address space
+threadgroup bool v;
+                 ^
+
diff --git a/test/tint/builtins/workgroupUniformLoad/matrix.wgsl.expected.ir.msl b/test/tint/builtins/workgroupUniformLoad/matrix.wgsl.expected.ir.msl
index c34ab0a..a0c6ee9 100644
--- a/test/tint/builtins/workgroupUniformLoad/matrix.wgsl.expected.ir.msl
+++ b/test/tint/builtins/workgroupUniformLoad/matrix.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+threadgroup float3x3 v;
+float3x3 foo() {
+  threadgroup_barrier(mem_flags::mem_threadgroup);
+  float3x3 const v_1 = v;
+  threadgroup_barrier(mem_flags::mem_threadgroup);
+  return v_1;
+}
+program_source:4:22: error: program scope variable must reside in constant address space
+threadgroup float3x3 v;
+                     ^
+
diff --git a/test/tint/builtins/workgroupUniformLoad/structures.wgsl.expected.ir.msl b/test/tint/builtins/workgroupUniformLoad/structures.wgsl.expected.ir.msl
index c34ab0a..4366a3a 100644
--- a/test/tint/builtins/workgroupUniformLoad/structures.wgsl.expected.ir.msl
+++ b/test/tint/builtins/workgroupUniformLoad/structures.wgsl.expected.ir.msl
@@ -1,9 +1,36 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#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];
+};
+
+struct Inner {
+  bool b;
+  int4 v;
+  float3x3 m;
+};
+struct Outer {
+  tint_array<Inner, 4> a;
+};
+
+threadgroup Outer v;
+Outer foo() {
+  threadgroup_barrier(mem_flags::mem_threadgroup);
+  Outer const v_1 = v;
+  threadgroup_barrier(mem_flags::mem_threadgroup);
+  return v_1;
+}
+program_source:24:19: error: program scope variable must reside in constant address space
+threadgroup Outer v;
+                  ^
+
diff --git a/test/tint/builtins/workgroupUniformLoad/vec.wgsl.expected.ir.msl b/test/tint/builtins/workgroupUniformLoad/vec.wgsl.expected.ir.msl
index c34ab0a..f1ea9ea 100644
--- a/test/tint/builtins/workgroupUniformLoad/vec.wgsl.expected.ir.msl
+++ b/test/tint/builtins/workgroupUniformLoad/vec.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+threadgroup float4 v;
+float4 foo() {
+  threadgroup_barrier(mem_flags::mem_threadgroup);
+  float4 const v_1 = v;
+  threadgroup_barrier(mem_flags::mem_threadgroup);
+  return v_1;
+}
+program_source:4:20: error: program scope variable must reside in constant address space
+threadgroup float4 v;
+                   ^
+
diff --git a/test/tint/builtins/workgroupUniformLoad/via_param.wgsl.expected.ir.msl b/test/tint/builtins/workgroupUniformLoad/via_param.wgsl.expected.ir.msl
index c34ab0a..849f561 100644
--- a/test/tint/builtins/workgroupUniformLoad/via_param.wgsl.expected.ir.msl
+++ b/test/tint/builtins/workgroupUniformLoad/via_param.wgsl.expected.ir.msl
@@ -1,9 +1,34 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:861 internal compiler error: TINT_UNREACHABLE unhandled: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#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];
+};
+
+
+threadgroup tint_array<int, 4> v;
+int foo(threadgroup int* const p) {
+  threadgroup_barrier(mem_flags::mem_threadgroup);
+  int const v_1 = p;
+  threadgroup_barrier(mem_flags::mem_threadgroup);
+  return v_1;
+}
+int bar() {
+  return foo(v[0]);
+}
+program_source:16:32: error: program scope variable must reside in constant address space
+threadgroup tint_array<int, 4> v;
+                               ^
+program_source:19:13: error: cannot initialize a variable of type 'const int' with an lvalue of type 'threadgroup int *const'
+  int const v_1 = p;
+            ^     ~
+
diff --git a/test/tint/diagnostic_filtering/case_body_attribute.wgsl.expected.ir.msl b/test/tint/diagnostic_filtering/case_body_attribute.wgsl.expected.ir.msl
index 8d9d5ed..14f9fde 100644
--- a/test/tint/diagnostic_filtering/case_body_attribute.wgsl.expected.ir.msl
+++ b/test/tint/diagnostic_filtering/case_body_attribute.wgsl.expected.ir.msl
@@ -12,7 +12,7 @@
   switch (i32(x)) {
               ^
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSample
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/diagnostic_filtering/compound_statement_attribute.wgsl.expected.ir.msl b/test/tint/diagnostic_filtering/compound_statement_attribute.wgsl.expected.ir.msl
index fba0915..36bb0939 100644
--- a/test/tint/diagnostic_filtering/compound_statement_attribute.wgsl.expected.ir.msl
+++ b/test/tint/diagnostic_filtering/compound_statement_attribute.wgsl.expected.ir.msl
@@ -12,7 +12,7 @@
     if (x > 0) {
         ^
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:270 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSample
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/diagnostic_filtering/default_case_body_attribute.wgsl.expected.ir.msl b/test/tint/diagnostic_filtering/default_case_body_attribute.wgsl.expected.ir.msl
index c295ae9..3790f50 100644
--- a/test/tint/diagnostic_filtering/default_case_body_attribute.wgsl.expected.ir.msl
+++ b/test/tint/diagnostic_filtering/default_case_body_attribute.wgsl.expected.ir.msl
@@ -12,7 +12,7 @@
   switch (i32(x)) {
               ^
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSample
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/diagnostic_filtering/directive.wgsl.expected.ir.msl b/test/tint/diagnostic_filtering/directive.wgsl.expected.ir.msl
index c0b06dd..5a1ef83 100644
--- a/test/tint/diagnostic_filtering/directive.wgsl.expected.ir.msl
+++ b/test/tint/diagnostic_filtering/directive.wgsl.expected.ir.msl
@@ -12,7 +12,7 @@
   if (x > 0) {
       ^
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:270 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSample
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/diagnostic_filtering/else_body_attribute.wgsl.expected.ir.msl b/test/tint/diagnostic_filtering/else_body_attribute.wgsl.expected.ir.msl
index d67bbbd..a49460b 100644
--- a/test/tint/diagnostic_filtering/else_body_attribute.wgsl.expected.ir.msl
+++ b/test/tint/diagnostic_filtering/else_body_attribute.wgsl.expected.ir.msl
@@ -12,7 +12,7 @@
   if (x > 0) {
       ^
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:270 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSample
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/diagnostic_filtering/else_if_body_attribute.wgsl.expected.ir.msl b/test/tint/diagnostic_filtering/else_if_body_attribute.wgsl.expected.ir.msl
index 62762b3..74ecb5a 100644
--- a/test/tint/diagnostic_filtering/else_if_body_attribute.wgsl.expected.ir.msl
+++ b/test/tint/diagnostic_filtering/else_if_body_attribute.wgsl.expected.ir.msl
@@ -12,7 +12,7 @@
   if (x > 0) {
       ^
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:270 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSample
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/diagnostic_filtering/for_loop_attribute.wgsl.expected.ir.msl b/test/tint/diagnostic_filtering/for_loop_attribute.wgsl.expected.ir.msl
index e5392a0..16c3b89 100644
--- a/test/tint/diagnostic_filtering/for_loop_attribute.wgsl.expected.ir.msl
+++ b/test/tint/diagnostic_filtering/for_loop_attribute.wgsl.expected.ir.msl
@@ -12,7 +12,7 @@
   for (; x > v.x && dpdx(1.0) > 0.0; ) {
                     ^^^^^^^^^
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
+../../src/tint/lang/msl/writer/printer/printer.cc:385 internal compiler error: Switch() matched no cases. Type: tint::core::ir::If
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/diagnostic_filtering/for_loop_body_attribute.wgsl.expected.ir.msl b/test/tint/diagnostic_filtering/for_loop_body_attribute.wgsl.expected.ir.msl
index 7186005..b0a68a3 100644
--- a/test/tint/diagnostic_filtering/for_loop_body_attribute.wgsl.expected.ir.msl
+++ b/test/tint/diagnostic_filtering/for_loop_body_attribute.wgsl.expected.ir.msl
@@ -12,7 +12,7 @@
     v = textureSample(t, s, vec2(0, 0));
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSample
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/diagnostic_filtering/function_attribute.wgsl.expected.ir.msl b/test/tint/diagnostic_filtering/function_attribute.wgsl.expected.ir.msl
index 747c93d..47e965a 100644
--- a/test/tint/diagnostic_filtering/function_attribute.wgsl.expected.ir.msl
+++ b/test/tint/diagnostic_filtering/function_attribute.wgsl.expected.ir.msl
@@ -12,7 +12,7 @@
   if (x > 0) {
       ^
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:270 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSample
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/diagnostic_filtering/function_body_attribute.wgsl.expected.ir.msl b/test/tint/diagnostic_filtering/function_body_attribute.wgsl.expected.ir.msl
index b2b4f25..2c424b1 100644
--- a/test/tint/diagnostic_filtering/function_body_attribute.wgsl.expected.ir.msl
+++ b/test/tint/diagnostic_filtering/function_body_attribute.wgsl.expected.ir.msl
@@ -12,7 +12,7 @@
   if (x > 0) {
       ^
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:270 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSample
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/diagnostic_filtering/if_body_attribute.wgsl.expected.ir.msl b/test/tint/diagnostic_filtering/if_body_attribute.wgsl.expected.ir.msl
index ff99c12..4e582b6 100644
--- a/test/tint/diagnostic_filtering/if_body_attribute.wgsl.expected.ir.msl
+++ b/test/tint/diagnostic_filtering/if_body_attribute.wgsl.expected.ir.msl
@@ -12,7 +12,7 @@
   if (x > 0) @diagnostic(warning, derivative_uniformity) {
       ^
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:270 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSample
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/diagnostic_filtering/if_statement_attribute.wgsl.expected.ir.msl b/test/tint/diagnostic_filtering/if_statement_attribute.wgsl.expected.ir.msl
index a07f2cc..c2ecf9b 100644
--- a/test/tint/diagnostic_filtering/if_statement_attribute.wgsl.expected.ir.msl
+++ b/test/tint/diagnostic_filtering/if_statement_attribute.wgsl.expected.ir.msl
@@ -12,10 +12,26 @@
   if (x > 0) {
       ^
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:270 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+texture2d<float, access::sample> t;
+sampler s;
+fragment void tint_symbol(float x) {
+  if ((x > 0.0f)) {
+  } else {
+    if ((dfdx(1.0f) > 0.0f)) {
+    }
+  }
+}
+program_source:4:34: error: program scope variable must reside in constant address space
+texture2d<float, access::sample> t;
+                                 ^
+program_source:5:1: error: constant sampler must be declared constexpr
+sampler s;
+^
+constexpr 
+program_source:6:27: error: invalid type 'float' for input declaration in a fragment function
+fragment void tint_symbol(float x) {
+                          ^~~~~~~
+
diff --git a/test/tint/diagnostic_filtering/loop_attribute.wgsl.expected.ir.msl b/test/tint/diagnostic_filtering/loop_attribute.wgsl.expected.ir.msl
index 1b4eddd..2f23951 100644
--- a/test/tint/diagnostic_filtering/loop_attribute.wgsl.expected.ir.msl
+++ b/test/tint/diagnostic_filtering/loop_attribute.wgsl.expected.ir.msl
@@ -12,10 +12,19 @@
       break if x > 0.0;
                ^
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+fragment void tint_symbol(float x) {
+  {
+    while(true) {
+      dfdx(1.0f);
+      if (x > 0.0f) { break; }
+      continue;
+    }
+  }
+}
+program_source:4:27: error: invalid type 'float' for input declaration in a fragment function
+fragment void tint_symbol(float x) {
+                          ^~~~~~~
+
diff --git a/test/tint/diagnostic_filtering/loop_body_attribute.wgsl.expected.ir.msl b/test/tint/diagnostic_filtering/loop_body_attribute.wgsl.expected.ir.msl
index 0f0f566..2e38f84 100644
--- a/test/tint/diagnostic_filtering/loop_body_attribute.wgsl.expected.ir.msl
+++ b/test/tint/diagnostic_filtering/loop_body_attribute.wgsl.expected.ir.msl
@@ -12,10 +12,19 @@
       break if x > 0.0;
                ^
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+fragment void tint_symbol(float x) {
+  {
+    while(true) {
+      dfdx(1.0f);
+      if (x > 0.0f) { break; }
+      continue;
+    }
+  }
+}
+program_source:4:27: error: invalid type 'float' for input declaration in a fragment function
+fragment void tint_symbol(float x) {
+                          ^~~~~~~
+
diff --git a/test/tint/diagnostic_filtering/loop_continuing_attribute.wgsl.expected.ir.msl b/test/tint/diagnostic_filtering/loop_continuing_attribute.wgsl.expected.ir.msl
index cc7391d..c5a7652 100644
--- a/test/tint/diagnostic_filtering/loop_continuing_attribute.wgsl.expected.ir.msl
+++ b/test/tint/diagnostic_filtering/loop_continuing_attribute.wgsl.expected.ir.msl
@@ -12,10 +12,19 @@
       break if x > 0.0;
                ^
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+fragment void tint_symbol(float x) {
+  {
+    while(true) {
+      dfdx(1.0f);
+      if (x > 0.0f) { break; }
+      continue;
+    }
+  }
+}
+program_source:4:27: error: invalid type 'float' for input declaration in a fragment function
+fragment void tint_symbol(float x) {
+                          ^~~~~~~
+
diff --git a/test/tint/diagnostic_filtering/switch_body_attribute.wgsl.expected.ir.msl b/test/tint/diagnostic_filtering/switch_body_attribute.wgsl.expected.ir.msl
index 3981779..18738cf 100644
--- a/test/tint/diagnostic_filtering/switch_body_attribute.wgsl.expected.ir.msl
+++ b/test/tint/diagnostic_filtering/switch_body_attribute.wgsl.expected.ir.msl
@@ -12,10 +12,22 @@
   switch (i32(x)) @diagnostic(warning, derivative_uniformity) {
               ^
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+fragment void tint_symbol(float x) {
+  switch(tint_f32_to_i32(x)) {
+    default:
+    {
+      dfdx(1.0f);
+      break;
+    }
+  }
+}
+int tint_f32_to_i32(float value) {
+  return select(2147483647, select((-2147483647 - 1), int(value), (value >= -2147483648.0f)), (value <= 2147483520.0f));
+}
+program_source:4:27: error: invalid type 'float' for input declaration in a fragment function
+fragment void tint_symbol(float x) {
+                          ^~~~~~~
+
diff --git a/test/tint/diagnostic_filtering/switch_statement_attribute.wgsl.expected.ir.msl b/test/tint/diagnostic_filtering/switch_statement_attribute.wgsl.expected.ir.msl
index d95b6c4..de7f4c6 100644
--- a/test/tint/diagnostic_filtering/switch_statement_attribute.wgsl.expected.ir.msl
+++ b/test/tint/diagnostic_filtering/switch_statement_attribute.wgsl.expected.ir.msl
@@ -4,15 +4,15 @@
   switch (i32(x == 0.0 && dpdx(1.0) == 0.0)) {
                           ^^^^^^^^^
 
-<dawn>/test/tint/diagnostic_filtering/switch_statement_attribute.wgsl:7:24 note: control flow depends on possibly non-uniform value
+<dawn>/test/tint/diagnostic_filtering/switch_statement_attribute.wgsl:7:15 note: control flow depends on possibly non-uniform value
   switch (i32(x == 0.0 && dpdx(1.0) == 0.0)) {
-                       ^^
+              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
 <dawn>/test/tint/diagnostic_filtering/switch_statement_attribute.wgsl:7:15 note: user-defined input 'x' of 'main' may be non-uniform
   switch (i32(x == 0.0 && dpdx(1.0) == 0.0)) {
               ^
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:270 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
+../../src/tint/lang/msl/writer/printer/printer.cc:385 internal compiler error: Switch() matched no cases. Type: tint::core::ir::If
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/diagnostic_filtering/while_loop_attribute.wgsl.expected.ir.msl b/test/tint/diagnostic_filtering/while_loop_attribute.wgsl.expected.ir.msl
index dd6a23a..92ffe0e 100644
--- a/test/tint/diagnostic_filtering/while_loop_attribute.wgsl.expected.ir.msl
+++ b/test/tint/diagnostic_filtering/while_loop_attribute.wgsl.expected.ir.msl
@@ -12,7 +12,7 @@
   while (x > 0.0 && dpdx(1.0) > 0.0)  {
                     ^^^^^^^^^
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
+../../src/tint/lang/msl/writer/printer/printer.cc:385 internal compiler error: Switch() matched no cases. Type: tint::core::ir::If
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/diagnostic_filtering/while_loop_body_attribute.wgsl.expected.ir.msl b/test/tint/diagnostic_filtering/while_loop_body_attribute.wgsl.expected.ir.msl
index 9e9a013..930218e 100644
--- a/test/tint/diagnostic_filtering/while_loop_body_attribute.wgsl.expected.ir.msl
+++ b/test/tint/diagnostic_filtering/while_loop_body_attribute.wgsl.expected.ir.msl
@@ -12,7 +12,7 @@
     v = textureSample(t, s, vec2(0, 0));
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSample
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/expressions/binary/div/scalar-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div/scalar-scalar/i32.wgsl.expected.ir.msl
index a46d769..cd92c60 100644
--- a/test/tint/expressions/binary/div/scalar-scalar/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div/scalar-scalar/i32.wgsl.expected.ir.msl
@@ -1,8 +1,17 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   int const a = 1;
   int const b = 2;
-  int const r = (a / b);
+  int const r = tint_div_i32(a, b);
 }
+int tint_div_i32(int lhs, int rhs) {
+  return (lhs / select(rhs, 1, ((rhs == 0) | ((lhs == (-2147483647 - 1)) & (rhs == -1)))));
+}
+program_source:7:17: error: use of undeclared identifier 'tint_div_i32'
+  int const r = tint_div_i32(a, b);
+                ^
+
diff --git a/test/tint/expressions/binary/div/scalar-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div/scalar-scalar/u32.wgsl.expected.ir.msl
index 38f4f2e..048f61e 100644
--- a/test/tint/expressions/binary/div/scalar-scalar/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div/scalar-scalar/u32.wgsl.expected.ir.msl
@@ -1,8 +1,17 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   uint const a = 1u;
   uint const b = 2u;
-  uint const r = (a / b);
+  uint const r = tint_div_u32(a, b);
 }
+uint tint_div_u32(uint lhs, uint rhs) {
+  return (lhs / select(rhs, 1u, (rhs == 0u)));
+}
+program_source:7:18: error: use of undeclared identifier 'tint_div_u32'
+  uint const r = tint_div_u32(a, b);
+                 ^
+
diff --git a/test/tint/expressions/binary/div/scalar-vec3/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div/scalar-vec3/i32.wgsl.expected.ir.msl
index 4530bf7..2fa961a 100644
--- a/test/tint/expressions/binary/div/scalar-vec3/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div/scalar-vec3/i32.wgsl.expected.ir.msl
@@ -1,8 +1,17 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   int const a = 4;
   int3 const b = int3(1, 2, 3);
-  int3 const r = (a / b);
+  int3 const r = tint_div_v3i32(int3(a), b);
 }
+int3 tint_div_v3i32(int3 lhs, int3 rhs) {
+  return (lhs / select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1))))));
+}
+program_source:7:18: error: use of undeclared identifier 'tint_div_v3i32'
+  int3 const r = tint_div_v3i32(int3(a), b);
+                 ^
+
diff --git a/test/tint/expressions/binary/div/scalar-vec3/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div/scalar-vec3/u32.wgsl.expected.ir.msl
index 0c2ddac..e836cce 100644
--- a/test/tint/expressions/binary/div/scalar-vec3/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div/scalar-vec3/u32.wgsl.expected.ir.msl
@@ -1,8 +1,17 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   uint const a = 4u;
   uint3 const b = uint3(1u, 2u, 3u);
-  uint3 const r = (a / b);
+  uint3 const r = tint_div_v3u32(uint3(a), b);
 }
+uint3 tint_div_v3u32(uint3 lhs, uint3 rhs) {
+  return (lhs / select(rhs, uint3(1u), (rhs == uint3(0u))));
+}
+program_source:7:19: error: use of undeclared identifier 'tint_div_v3u32'
+  uint3 const r = tint_div_v3u32(uint3(a), b);
+                  ^
+
diff --git a/test/tint/expressions/binary/div/vec3-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div/vec3-scalar/i32.wgsl.expected.ir.msl
index 3b2dc31..574b1c1 100644
--- a/test/tint/expressions/binary/div/vec3-scalar/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div/vec3-scalar/i32.wgsl.expected.ir.msl
@@ -1,8 +1,17 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   int3 const a = int3(1, 2, 3);
   int const b = 4;
-  int3 const r = (a / b);
+  int3 const r = tint_div_v3i32(a, int3(b));
 }
+int3 tint_div_v3i32(int3 lhs, int3 rhs) {
+  return (lhs / select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1))))));
+}
+program_source:7:18: error: use of undeclared identifier 'tint_div_v3i32'
+  int3 const r = tint_div_v3i32(a, int3(b));
+                 ^
+
diff --git a/test/tint/expressions/binary/div/vec3-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div/vec3-scalar/u32.wgsl.expected.ir.msl
index 5878f55..db9d145 100644
--- a/test/tint/expressions/binary/div/vec3-scalar/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div/vec3-scalar/u32.wgsl.expected.ir.msl
@@ -1,8 +1,17 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   uint3 const a = uint3(1u, 2u, 3u);
   uint const b = 4u;
-  uint3 const r = (a / b);
+  uint3 const r = tint_div_v3u32(a, uint3(b));
 }
+uint3 tint_div_v3u32(uint3 lhs, uint3 rhs) {
+  return (lhs / select(rhs, uint3(1u), (rhs == uint3(0u))));
+}
+program_source:7:19: error: use of undeclared identifier 'tint_div_v3u32'
+  uint3 const r = tint_div_v3u32(a, uint3(b));
+                  ^
+
diff --git a/test/tint/expressions/binary/div/vec3-vec3/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div/vec3-vec3/i32.wgsl.expected.ir.msl
index decef76..2755ecd 100644
--- a/test/tint/expressions/binary/div/vec3-vec3/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div/vec3-vec3/i32.wgsl.expected.ir.msl
@@ -1,8 +1,17 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   int3 const a = int3(1, 2, 3);
   int3 const b = int3(4, 5, 6);
-  int3 const r = (a / b);
+  int3 const r = tint_div_v3i32(a, b);
 }
+int3 tint_div_v3i32(int3 lhs, int3 rhs) {
+  return (lhs / select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1))))));
+}
+program_source:7:18: error: use of undeclared identifier 'tint_div_v3i32'
+  int3 const r = tint_div_v3i32(a, b);
+                 ^
+
diff --git a/test/tint/expressions/binary/div/vec3-vec3/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div/vec3-vec3/u32.wgsl.expected.ir.msl
index 72bb62d..1baed17 100644
--- a/test/tint/expressions/binary/div/vec3-vec3/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div/vec3-vec3/u32.wgsl.expected.ir.msl
@@ -1,8 +1,17 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   uint3 const a = uint3(1u, 2u, 3u);
   uint3 const b = uint3(4u, 5u, 6u);
-  uint3 const r = (a / b);
+  uint3 const r = tint_div_v3u32(a, b);
 }
+uint3 tint_div_v3u32(uint3 lhs, uint3 rhs) {
+  return (lhs / select(rhs, uint3(1u), (rhs == uint3(0u))));
+}
+program_source:7:19: error: use of undeclared identifier 'tint_div_v3u32'
+  uint3 const r = tint_div_v3u32(a, b);
+                  ^
+
diff --git a/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.ir.msl
index fe0ba8e..2266c21 100644
--- a/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.ir.msl
@@ -1,8 +1,17 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   int const a = 1;
   int const b = 0;
-  int const r = (a / b);
+  int const r = tint_div_i32(a, b);
 }
+int tint_div_i32(int lhs, int rhs) {
+  return (lhs / select(rhs, 1, ((rhs == 0) | ((lhs == (-2147483647 - 1)) & (rhs == -1)))));
+}
+program_source:7:17: error: use of undeclared identifier 'tint_div_i32'
+  int const r = tint_div_i32(a, b);
+                ^
+
diff --git a/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.ir.msl
index b68125b..738eeab 100644
--- a/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.ir.msl
@@ -1,8 +1,17 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   uint const a = 1u;
   uint const b = 0u;
-  uint const r = (a / b);
+  uint const r = tint_div_u32(a, b);
 }
+uint tint_div_u32(uint lhs, uint rhs) {
+  return (lhs / select(rhs, 1u, (rhs == 0u)));
+}
+program_source:7:18: error: use of undeclared identifier 'tint_div_u32'
+  uint const r = tint_div_u32(a, b);
+                 ^
+
diff --git a/test/tint/expressions/binary/div_by_zero/by_constant/scalar-vec3/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_constant/scalar-vec3/i32.wgsl.expected.ir.msl
index 0e80b79..162982e 100644
--- a/test/tint/expressions/binary/div_by_zero/by_constant/scalar-vec3/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div_by_zero/by_constant/scalar-vec3/i32.wgsl.expected.ir.msl
@@ -1,8 +1,17 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   int const a = 4;
   int3 const b = int3(0, 2, 0);
-  int3 const r = (a / b);
+  int3 const r = tint_div_v3i32(int3(a), b);
 }
+int3 tint_div_v3i32(int3 lhs, int3 rhs) {
+  return (lhs / select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1))))));
+}
+program_source:7:18: error: use of undeclared identifier 'tint_div_v3i32'
+  int3 const r = tint_div_v3i32(int3(a), b);
+                 ^
+
diff --git a/test/tint/expressions/binary/div_by_zero/by_constant/scalar-vec3/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_constant/scalar-vec3/u32.wgsl.expected.ir.msl
index af44bfe..0231a4e 100644
--- a/test/tint/expressions/binary/div_by_zero/by_constant/scalar-vec3/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div_by_zero/by_constant/scalar-vec3/u32.wgsl.expected.ir.msl
@@ -1,8 +1,17 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   uint const a = 4u;
   uint3 const b = uint3(0u, 2u, 0u);
-  uint3 const r = (a / b);
+  uint3 const r = tint_div_v3u32(uint3(a), b);
 }
+uint3 tint_div_v3u32(uint3 lhs, uint3 rhs) {
+  return (lhs / select(rhs, uint3(1u), (rhs == uint3(0u))));
+}
+program_source:7:19: error: use of undeclared identifier 'tint_div_v3u32'
+  uint3 const r = tint_div_v3u32(uint3(a), b);
+                  ^
+
diff --git a/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.ir.msl
index 2fa5c24..b96f324 100644
--- a/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.ir.msl
@@ -1,8 +1,17 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   int3 const a = int3(1, 2, 3);
   int const b = 0;
-  int3 const r = (a / b);
+  int3 const r = tint_div_v3i32(a, int3(b));
 }
+int3 tint_div_v3i32(int3 lhs, int3 rhs) {
+  return (lhs / select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1))))));
+}
+program_source:7:18: error: use of undeclared identifier 'tint_div_v3i32'
+  int3 const r = tint_div_v3i32(a, int3(b));
+                 ^
+
diff --git a/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.ir.msl
index 3c45515..8904fcc 100644
--- a/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.ir.msl
@@ -1,8 +1,17 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   uint3 const a = uint3(1u, 2u, 3u);
   uint const b = 0u;
-  uint3 const r = (a / b);
+  uint3 const r = tint_div_v3u32(a, uint3(b));
 }
+uint3 tint_div_v3u32(uint3 lhs, uint3 rhs) {
+  return (lhs / select(rhs, uint3(1u), (rhs == uint3(0u))));
+}
+program_source:7:19: error: use of undeclared identifier 'tint_div_v3u32'
+  uint3 const r = tint_div_v3u32(a, uint3(b));
+                  ^
+
diff --git a/test/tint/expressions/binary/div_by_zero/by_constant/vec3-vec3/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_constant/vec3-vec3/i32.wgsl.expected.ir.msl
index e6d18eb..3a14a9d 100644
--- a/test/tint/expressions/binary/div_by_zero/by_constant/vec3-vec3/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div_by_zero/by_constant/vec3-vec3/i32.wgsl.expected.ir.msl
@@ -1,8 +1,17 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   int3 const a = int3(1, 2, 3);
   int3 const b = int3(0, 5, 0);
-  int3 const r = (a / b);
+  int3 const r = tint_div_v3i32(a, b);
 }
+int3 tint_div_v3i32(int3 lhs, int3 rhs) {
+  return (lhs / select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1))))));
+}
+program_source:7:18: error: use of undeclared identifier 'tint_div_v3i32'
+  int3 const r = tint_div_v3i32(a, b);
+                 ^
+
diff --git a/test/tint/expressions/binary/div_by_zero/by_constant/vec3-vec3/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_constant/vec3-vec3/u32.wgsl.expected.ir.msl
index d9761ce..3c7663c 100644
--- a/test/tint/expressions/binary/div_by_zero/by_constant/vec3-vec3/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div_by_zero/by_constant/vec3-vec3/u32.wgsl.expected.ir.msl
@@ -1,8 +1,17 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   uint3 const a = uint3(1u, 2u, 3u);
   uint3 const b = uint3(0u, 5u, 0u);
-  uint3 const r = (a / b);
+  uint3 const r = tint_div_v3u32(a, b);
 }
+uint3 tint_div_v3u32(uint3 lhs, uint3 rhs) {
+  return (lhs / select(rhs, uint3(1u), (rhs == uint3(0u))));
+}
+program_source:7:19: error: use of undeclared identifier 'tint_div_v3u32'
+  uint3 const r = tint_div_v3u32(a, b);
+                  ^
+
diff --git a/test/tint/expressions/binary/div_by_zero/by_expression/scalar-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_expression/scalar-scalar/i32.wgsl.expected.ir.msl
index 5d5bce1..0c3ce11 100644
--- a/test/tint/expressions/binary/div_by_zero/by_expression/scalar-scalar/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div_by_zero/by_expression/scalar-scalar/i32.wgsl.expected.ir.msl
@@ -1,8 +1,17 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   int a = 1;
   int b = 0;
-  int const r = (a / (b + b));
+  int const r = tint_div_i32(a, (b + b));
 }
+int tint_div_i32(int lhs, int rhs) {
+  return (lhs / select(rhs, 1, ((rhs == 0) | ((lhs == (-2147483647 - 1)) & (rhs == -1)))));
+}
+program_source:7:17: error: use of undeclared identifier 'tint_div_i32'
+  int const r = tint_div_i32(a, (b + b));
+                ^
+
diff --git a/test/tint/expressions/binary/div_by_zero/by_expression/scalar-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_expression/scalar-scalar/u32.wgsl.expected.ir.msl
index b8f37ec..d0fe939 100644
--- a/test/tint/expressions/binary/div_by_zero/by_expression/scalar-scalar/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div_by_zero/by_expression/scalar-scalar/u32.wgsl.expected.ir.msl
@@ -1,8 +1,17 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   uint a = 1u;
   uint b = 0u;
-  uint const r = (a / (b + b));
+  uint const r = tint_div_u32(a, (b + b));
 }
+uint tint_div_u32(uint lhs, uint rhs) {
+  return (lhs / select(rhs, 1u, (rhs == 0u)));
+}
+program_source:7:18: error: use of undeclared identifier 'tint_div_u32'
+  uint const r = tint_div_u32(a, (b + b));
+                 ^
+
diff --git a/test/tint/expressions/binary/div_by_zero/by_expression/scalar-vec3/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_expression/scalar-vec3/i32.wgsl.expected.ir.msl
index 5053dcb..885624b 100644
--- a/test/tint/expressions/binary/div_by_zero/by_expression/scalar-vec3/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div_by_zero/by_expression/scalar-vec3/i32.wgsl.expected.ir.msl
@@ -1,8 +1,18 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   int a = 4;
   int3 b = int3(0, 2, 0);
-  int3 const r = (a / (b + b));
+  int3 const v = (b + b);
+  int3 const r = tint_div_v3i32(int3(a), v);
 }
+int3 tint_div_v3i32(int3 lhs, int3 rhs) {
+  return (lhs / select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1))))));
+}
+program_source:8:18: error: use of undeclared identifier 'tint_div_v3i32'
+  int3 const r = tint_div_v3i32(int3(a), v);
+                 ^
+
diff --git a/test/tint/expressions/binary/div_by_zero/by_expression/scalar-vec3/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_expression/scalar-vec3/u32.wgsl.expected.ir.msl
index 4dd10b9..8608a64 100644
--- a/test/tint/expressions/binary/div_by_zero/by_expression/scalar-vec3/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div_by_zero/by_expression/scalar-vec3/u32.wgsl.expected.ir.msl
@@ -1,8 +1,18 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   uint a = 4u;
   uint3 b = uint3(0u, 2u, 0u);
-  uint3 const r = (a / (b + b));
+  uint3 const v = (b + b);
+  uint3 const r = tint_div_v3u32(uint3(a), v);
 }
+uint3 tint_div_v3u32(uint3 lhs, uint3 rhs) {
+  return (lhs / select(rhs, uint3(1u), (rhs == uint3(0u))));
+}
+program_source:8:19: error: use of undeclared identifier 'tint_div_v3u32'
+  uint3 const r = tint_div_v3u32(uint3(a), v);
+                  ^
+
diff --git a/test/tint/expressions/binary/div_by_zero/by_expression/vec3-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_expression/vec3-scalar/i32.wgsl.expected.ir.msl
index 6fb6226..45a199e 100644
--- a/test/tint/expressions/binary/div_by_zero/by_expression/vec3-scalar/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div_by_zero/by_expression/vec3-scalar/i32.wgsl.expected.ir.msl
@@ -1,8 +1,18 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   int3 a = int3(1, 2, 3);
   int b = 0;
-  int3 const r = (a / (b + b));
+  int3 const v = a;
+  int3 const r = tint_div_v3i32(v, int3((b + b)));
 }
+int3 tint_div_v3i32(int3 lhs, int3 rhs) {
+  return (lhs / select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1))))));
+}
+program_source:8:18: error: use of undeclared identifier 'tint_div_v3i32'
+  int3 const r = tint_div_v3i32(v, int3((b + b)));
+                 ^
+
diff --git a/test/tint/expressions/binary/div_by_zero/by_expression/vec3-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_expression/vec3-scalar/u32.wgsl.expected.ir.msl
index 98d02fa..230534b 100644
--- a/test/tint/expressions/binary/div_by_zero/by_expression/vec3-scalar/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div_by_zero/by_expression/vec3-scalar/u32.wgsl.expected.ir.msl
@@ -1,8 +1,18 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   uint3 a = uint3(1u, 2u, 3u);
   uint b = 0u;
-  uint3 const r = (a / (b + b));
+  uint3 const v = a;
+  uint3 const r = tint_div_v3u32(v, uint3((b + b)));
 }
+uint3 tint_div_v3u32(uint3 lhs, uint3 rhs) {
+  return (lhs / select(rhs, uint3(1u), (rhs == uint3(0u))));
+}
+program_source:8:19: error: use of undeclared identifier 'tint_div_v3u32'
+  uint3 const r = tint_div_v3u32(v, uint3((b + b)));
+                  ^
+
diff --git a/test/tint/expressions/binary/div_by_zero/by_expression/vec3-vec3/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_expression/vec3-vec3/i32.wgsl.expected.ir.msl
index 337e13a..84fd79e 100644
--- a/test/tint/expressions/binary/div_by_zero/by_expression/vec3-vec3/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div_by_zero/by_expression/vec3-vec3/i32.wgsl.expected.ir.msl
@@ -1,8 +1,17 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   int3 a = int3(1, 2, 3);
   int3 b = int3(0, 5, 0);
-  int3 const r = (a / (b + b));
+  int3 const r = tint_div_v3i32(a, (b + b));
 }
+int3 tint_div_v3i32(int3 lhs, int3 rhs) {
+  return (lhs / select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1))))));
+}
+program_source:7:18: error: use of undeclared identifier 'tint_div_v3i32'
+  int3 const r = tint_div_v3i32(a, (b + b));
+                 ^
+
diff --git a/test/tint/expressions/binary/div_by_zero/by_expression/vec3-vec3/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_expression/vec3-vec3/u32.wgsl.expected.ir.msl
index dc7f626..f7d3fe3 100644
--- a/test/tint/expressions/binary/div_by_zero/by_expression/vec3-vec3/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div_by_zero/by_expression/vec3-vec3/u32.wgsl.expected.ir.msl
@@ -1,8 +1,17 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   uint3 a = uint3(1u, 2u, 3u);
   uint3 b = uint3(0u, 5u, 0u);
-  uint3 const r = (a / (b + b));
+  uint3 const r = tint_div_v3u32(a, (b + b));
 }
+uint3 tint_div_v3u32(uint3 lhs, uint3 rhs) {
+  return (lhs / select(rhs, uint3(1u), (rhs == uint3(0u))));
+}
+program_source:7:19: error: use of undeclared identifier 'tint_div_v3u32'
+  uint3 const r = tint_div_v3u32(a, (b + b));
+                  ^
+
diff --git a/test/tint/expressions/binary/div_by_zero/by_identifier/scalar-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_identifier/scalar-scalar/i32.wgsl.expected.ir.msl
index 4150d3c..b984663 100644
--- a/test/tint/expressions/binary/div_by_zero/by_identifier/scalar-scalar/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div_by_zero/by_identifier/scalar-scalar/i32.wgsl.expected.ir.msl
@@ -1,8 +1,17 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   int a = 1;
   int b = 0;
-  int const r = (a / b);
+  int const r = tint_div_i32(a, b);
 }
+int tint_div_i32(int lhs, int rhs) {
+  return (lhs / select(rhs, 1, ((rhs == 0) | ((lhs == (-2147483647 - 1)) & (rhs == -1)))));
+}
+program_source:7:17: error: use of undeclared identifier 'tint_div_i32'
+  int const r = tint_div_i32(a, b);
+                ^
+
diff --git a/test/tint/expressions/binary/div_by_zero/by_identifier/scalar-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_identifier/scalar-scalar/u32.wgsl.expected.ir.msl
index 68d8d84..9ca11a6 100644
--- a/test/tint/expressions/binary/div_by_zero/by_identifier/scalar-scalar/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div_by_zero/by_identifier/scalar-scalar/u32.wgsl.expected.ir.msl
@@ -1,8 +1,17 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   uint a = 1u;
   uint b = 0u;
-  uint const r = (a / b);
+  uint const r = tint_div_u32(a, b);
 }
+uint tint_div_u32(uint lhs, uint rhs) {
+  return (lhs / select(rhs, 1u, (rhs == 0u)));
+}
+program_source:7:18: error: use of undeclared identifier 'tint_div_u32'
+  uint const r = tint_div_u32(a, b);
+                 ^
+
diff --git a/test/tint/expressions/binary/div_by_zero/by_identifier/scalar-vec3/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_identifier/scalar-vec3/i32.wgsl.expected.ir.msl
index 647886e..e2bbf6c 100644
--- a/test/tint/expressions/binary/div_by_zero/by_identifier/scalar-vec3/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div_by_zero/by_identifier/scalar-vec3/i32.wgsl.expected.ir.msl
@@ -1,8 +1,18 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   int a = 4;
   int3 b = int3(0, 2, 0);
-  int3 const r = (a / b);
+  int3 const v = b;
+  int3 const r = tint_div_v3i32(int3(a), v);
 }
+int3 tint_div_v3i32(int3 lhs, int3 rhs) {
+  return (lhs / select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1))))));
+}
+program_source:8:18: error: use of undeclared identifier 'tint_div_v3i32'
+  int3 const r = tint_div_v3i32(int3(a), v);
+                 ^
+
diff --git a/test/tint/expressions/binary/div_by_zero/by_identifier/scalar-vec3/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_identifier/scalar-vec3/u32.wgsl.expected.ir.msl
index e3f0dc4..a3bfb50 100644
--- a/test/tint/expressions/binary/div_by_zero/by_identifier/scalar-vec3/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div_by_zero/by_identifier/scalar-vec3/u32.wgsl.expected.ir.msl
@@ -1,8 +1,18 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   uint a = 4u;
   uint3 b = uint3(0u, 2u, 0u);
-  uint3 const r = (a / b);
+  uint3 const v = b;
+  uint3 const r = tint_div_v3u32(uint3(a), v);
 }
+uint3 tint_div_v3u32(uint3 lhs, uint3 rhs) {
+  return (lhs / select(rhs, uint3(1u), (rhs == uint3(0u))));
+}
+program_source:8:19: error: use of undeclared identifier 'tint_div_v3u32'
+  uint3 const r = tint_div_v3u32(uint3(a), v);
+                  ^
+
diff --git a/test/tint/expressions/binary/div_by_zero/by_identifier/vec3-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_identifier/vec3-scalar/i32.wgsl.expected.ir.msl
index 0759f7d..4e52ba9 100644
--- a/test/tint/expressions/binary/div_by_zero/by_identifier/vec3-scalar/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div_by_zero/by_identifier/vec3-scalar/i32.wgsl.expected.ir.msl
@@ -1,8 +1,18 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   int3 a = int3(1, 2, 3);
   int b = 0;
-  int3 const r = (a / b);
+  int3 const v = a;
+  int3 const r = tint_div_v3i32(v, int3(b));
 }
+int3 tint_div_v3i32(int3 lhs, int3 rhs) {
+  return (lhs / select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1))))));
+}
+program_source:8:18: error: use of undeclared identifier 'tint_div_v3i32'
+  int3 const r = tint_div_v3i32(v, int3(b));
+                 ^
+
diff --git a/test/tint/expressions/binary/div_by_zero/by_identifier/vec3-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_identifier/vec3-scalar/u32.wgsl.expected.ir.msl
index b23b7b9..ea03857 100644
--- a/test/tint/expressions/binary/div_by_zero/by_identifier/vec3-scalar/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div_by_zero/by_identifier/vec3-scalar/u32.wgsl.expected.ir.msl
@@ -1,8 +1,18 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   uint3 a = uint3(1u, 2u, 3u);
   uint b = 0u;
-  uint3 const r = (a / b);
+  uint3 const v = a;
+  uint3 const r = tint_div_v3u32(v, uint3(b));
 }
+uint3 tint_div_v3u32(uint3 lhs, uint3 rhs) {
+  return (lhs / select(rhs, uint3(1u), (rhs == uint3(0u))));
+}
+program_source:8:19: error: use of undeclared identifier 'tint_div_v3u32'
+  uint3 const r = tint_div_v3u32(v, uint3(b));
+                  ^
+
diff --git a/test/tint/expressions/binary/div_by_zero/by_identifier/vec3-vec3/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_identifier/vec3-vec3/i32.wgsl.expected.ir.msl
index 0ee1a3b..f604b15 100644
--- a/test/tint/expressions/binary/div_by_zero/by_identifier/vec3-vec3/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div_by_zero/by_identifier/vec3-vec3/i32.wgsl.expected.ir.msl
@@ -1,8 +1,17 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   int3 a = int3(1, 2, 3);
   int3 b = int3(0, 5, 0);
-  int3 const r = (a / b);
+  int3 const r = tint_div_v3i32(a, b);
 }
+int3 tint_div_v3i32(int3 lhs, int3 rhs) {
+  return (lhs / select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1))))));
+}
+program_source:7:18: error: use of undeclared identifier 'tint_div_v3i32'
+  int3 const r = tint_div_v3i32(a, b);
+                 ^
+
diff --git a/test/tint/expressions/binary/div_by_zero/by_identifier/vec3-vec3/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_identifier/vec3-vec3/u32.wgsl.expected.ir.msl
index 9de2d1c..5b8af54 100644
--- a/test/tint/expressions/binary/div_by_zero/by_identifier/vec3-vec3/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div_by_zero/by_identifier/vec3-vec3/u32.wgsl.expected.ir.msl
@@ -1,8 +1,17 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   uint3 a = uint3(1u, 2u, 3u);
   uint3 b = uint3(0u, 5u, 0u);
-  uint3 const r = (a / b);
+  uint3 const r = tint_div_v3u32(a, b);
 }
+uint3 tint_div_v3u32(uint3 lhs, uint3 rhs) {
+  return (lhs / select(rhs, uint3(1u), (rhs == uint3(0u))));
+}
+program_source:7:19: error: use of undeclared identifier 'tint_div_v3u32'
+  uint3 const r = tint_div_v3u32(a, b);
+                  ^
+
diff --git a/test/tint/expressions/binary/mod/scalar-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod/scalar-scalar/i32.wgsl.expected.ir.msl
index e4f9a08..09b1ef2 100644
--- a/test/tint/expressions/binary/mod/scalar-scalar/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod/scalar-scalar/i32.wgsl.expected.ir.msl
@@ -1,8 +1,18 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   int const a = 1;
   int const b = 2;
-  int const r = (a % b);
+  int const r = tint_mod_i32(a, b);
 }
+int tint_mod_i32(int lhs, int rhs) {
+  int const v = select(rhs, 1, ((rhs == 0) | ((lhs == (-2147483647 - 1)) & (rhs == -1))));
+  return (lhs - ((lhs / v) * v));
+}
+program_source:7:17: error: use of undeclared identifier 'tint_mod_i32'
+  int const r = tint_mod_i32(a, b);
+                ^
+
diff --git a/test/tint/expressions/binary/mod/scalar-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod/scalar-scalar/u32.wgsl.expected.ir.msl
index 11edaf7..b1b4a6f 100644
--- a/test/tint/expressions/binary/mod/scalar-scalar/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod/scalar-scalar/u32.wgsl.expected.ir.msl
@@ -1,8 +1,18 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   uint const a = 1u;
   uint const b = 2u;
-  uint const r = (a % b);
+  uint const r = tint_mod_u32(a, b);
 }
+uint tint_mod_u32(uint lhs, uint rhs) {
+  uint const v = select(rhs, 1u, (rhs == 0u));
+  return (lhs - ((lhs / v) * v));
+}
+program_source:7:18: error: use of undeclared identifier 'tint_mod_u32'
+  uint const r = tint_mod_u32(a, b);
+                 ^
+
diff --git a/test/tint/expressions/binary/mod/scalar-vec3/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod/scalar-vec3/i32.wgsl.expected.ir.msl
index 3dc9d7d..d0ad189 100644
--- a/test/tint/expressions/binary/mod/scalar-vec3/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod/scalar-vec3/i32.wgsl.expected.ir.msl
@@ -1,8 +1,18 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   int const a = 4;
   int3 const b = int3(1, 2, 3);
-  int3 const r = (a % b);
+  int3 const r = tint_mod_v3i32(int3(a), b);
 }
+int3 tint_mod_v3i32(int3 lhs, int3 rhs) {
+  int3 const v = select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1)))));
+  return (lhs - ((lhs / v) * v));
+}
+program_source:7:18: error: use of undeclared identifier 'tint_mod_v3i32'
+  int3 const r = tint_mod_v3i32(int3(a), b);
+                 ^
+
diff --git a/test/tint/expressions/binary/mod/scalar-vec3/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod/scalar-vec3/u32.wgsl.expected.ir.msl
index f81a5c0..c0e4d0b 100644
--- a/test/tint/expressions/binary/mod/scalar-vec3/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod/scalar-vec3/u32.wgsl.expected.ir.msl
@@ -1,8 +1,18 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   uint const a = 4u;
   uint3 const b = uint3(1u, 2u, 3u);
-  uint3 const r = (a % b);
+  uint3 const r = tint_mod_v3u32(uint3(a), b);
 }
+uint3 tint_mod_v3u32(uint3 lhs, uint3 rhs) {
+  uint3 const v = select(rhs, uint3(1u), (rhs == uint3(0u)));
+  return (lhs - ((lhs / v) * v));
+}
+program_source:7:19: error: use of undeclared identifier 'tint_mod_v3u32'
+  uint3 const r = tint_mod_v3u32(uint3(a), b);
+                  ^
+
diff --git a/test/tint/expressions/binary/mod/vec3-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod/vec3-scalar/i32.wgsl.expected.ir.msl
index 5f229b2..8ac3f73 100644
--- a/test/tint/expressions/binary/mod/vec3-scalar/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod/vec3-scalar/i32.wgsl.expected.ir.msl
@@ -1,8 +1,18 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   int3 const a = int3(1, 2, 3);
   int const b = 4;
-  int3 const r = (a % b);
+  int3 const r = tint_mod_v3i32(a, int3(b));
 }
+int3 tint_mod_v3i32(int3 lhs, int3 rhs) {
+  int3 const v = select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1)))));
+  return (lhs - ((lhs / v) * v));
+}
+program_source:7:18: error: use of undeclared identifier 'tint_mod_v3i32'
+  int3 const r = tint_mod_v3i32(a, int3(b));
+                 ^
+
diff --git a/test/tint/expressions/binary/mod/vec3-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod/vec3-scalar/u32.wgsl.expected.ir.msl
index 4aae403..f815457 100644
--- a/test/tint/expressions/binary/mod/vec3-scalar/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod/vec3-scalar/u32.wgsl.expected.ir.msl
@@ -1,8 +1,18 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   uint3 const a = uint3(1u, 2u, 3u);
   uint const b = 4u;
-  uint3 const r = (a % b);
+  uint3 const r = tint_mod_v3u32(a, uint3(b));
 }
+uint3 tint_mod_v3u32(uint3 lhs, uint3 rhs) {
+  uint3 const v = select(rhs, uint3(1u), (rhs == uint3(0u)));
+  return (lhs - ((lhs / v) * v));
+}
+program_source:7:19: error: use of undeclared identifier 'tint_mod_v3u32'
+  uint3 const r = tint_mod_v3u32(a, uint3(b));
+                  ^
+
diff --git a/test/tint/expressions/binary/mod/vec3-vec3/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod/vec3-vec3/i32.wgsl.expected.ir.msl
index 2787c03..51bb608 100644
--- a/test/tint/expressions/binary/mod/vec3-vec3/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod/vec3-vec3/i32.wgsl.expected.ir.msl
@@ -1,8 +1,18 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   int3 const a = int3(1, 2, 3);
   int3 const b = int3(4, 5, 6);
-  int3 const r = (a % b);
+  int3 const r = tint_mod_v3i32(a, b);
 }
+int3 tint_mod_v3i32(int3 lhs, int3 rhs) {
+  int3 const v = select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1)))));
+  return (lhs - ((lhs / v) * v));
+}
+program_source:7:18: error: use of undeclared identifier 'tint_mod_v3i32'
+  int3 const r = tint_mod_v3i32(a, b);
+                 ^
+
diff --git a/test/tint/expressions/binary/mod/vec3-vec3/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod/vec3-vec3/u32.wgsl.expected.ir.msl
index 6b26bee..59cfca7 100644
--- a/test/tint/expressions/binary/mod/vec3-vec3/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod/vec3-vec3/u32.wgsl.expected.ir.msl
@@ -1,8 +1,18 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   uint3 const a = uint3(1u, 2u, 3u);
   uint3 const b = uint3(4u, 5u, 6u);
-  uint3 const r = (a % b);
+  uint3 const r = tint_mod_v3u32(a, b);
 }
+uint3 tint_mod_v3u32(uint3 lhs, uint3 rhs) {
+  uint3 const v = select(rhs, uint3(1u), (rhs == uint3(0u)));
+  return (lhs - ((lhs / v) * v));
+}
+program_source:7:19: error: use of undeclared identifier 'tint_mod_v3u32'
+  uint3 const r = tint_mod_v3u32(a, b);
+                  ^
+
diff --git a/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.ir.msl
index b1f22a6..39862e7 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.ir.msl
@@ -1,8 +1,18 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   int const a = 1;
   int const b = 0;
-  int const r = (a % b);
+  int const r = tint_mod_i32(a, b);
 }
+int tint_mod_i32(int lhs, int rhs) {
+  int const v = select(rhs, 1, ((rhs == 0) | ((lhs == (-2147483647 - 1)) & (rhs == -1))));
+  return (lhs - ((lhs / v) * v));
+}
+program_source:7:17: error: use of undeclared identifier 'tint_mod_i32'
+  int const r = tint_mod_i32(a, b);
+                ^
+
diff --git a/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.ir.msl
index e285831..d3132b1 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.ir.msl
@@ -1,8 +1,18 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   uint const a = 1u;
   uint const b = 0u;
-  uint const r = (a % b);
+  uint const r = tint_mod_u32(a, b);
 }
+uint tint_mod_u32(uint lhs, uint rhs) {
+  uint const v = select(rhs, 1u, (rhs == 0u));
+  return (lhs - ((lhs / v) * v));
+}
+program_source:7:18: error: use of undeclared identifier 'tint_mod_u32'
+  uint const r = tint_mod_u32(a, b);
+                 ^
+
diff --git a/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-vec3/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-vec3/i32.wgsl.expected.ir.msl
index 7094ad2..42118c6 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-vec3/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-vec3/i32.wgsl.expected.ir.msl
@@ -1,8 +1,18 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   int const a = 4;
   int3 const b = int3(0, 2, 0);
-  int3 const r = (a % b);
+  int3 const r = tint_mod_v3i32(int3(a), b);
 }
+int3 tint_mod_v3i32(int3 lhs, int3 rhs) {
+  int3 const v = select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1)))));
+  return (lhs - ((lhs / v) * v));
+}
+program_source:7:18: error: use of undeclared identifier 'tint_mod_v3i32'
+  int3 const r = tint_mod_v3i32(int3(a), b);
+                 ^
+
diff --git a/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-vec3/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-vec3/u32.wgsl.expected.ir.msl
index d04a463..175880b 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-vec3/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-vec3/u32.wgsl.expected.ir.msl
@@ -1,8 +1,18 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   uint const a = 4u;
   uint3 const b = uint3(0u, 2u, 0u);
-  uint3 const r = (a % b);
+  uint3 const r = tint_mod_v3u32(uint3(a), b);
 }
+uint3 tint_mod_v3u32(uint3 lhs, uint3 rhs) {
+  uint3 const v = select(rhs, uint3(1u), (rhs == uint3(0u)));
+  return (lhs - ((lhs / v) * v));
+}
+program_source:7:19: error: use of undeclared identifier 'tint_mod_v3u32'
+  uint3 const r = tint_mod_v3u32(uint3(a), b);
+                  ^
+
diff --git a/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.ir.msl
index 61e0d37..34063d1 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.ir.msl
@@ -1,8 +1,18 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   int3 const a = int3(1, 2, 3);
   int const b = 0;
-  int3 const r = (a % b);
+  int3 const r = tint_mod_v3i32(a, int3(b));
 }
+int3 tint_mod_v3i32(int3 lhs, int3 rhs) {
+  int3 const v = select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1)))));
+  return (lhs - ((lhs / v) * v));
+}
+program_source:7:18: error: use of undeclared identifier 'tint_mod_v3i32'
+  int3 const r = tint_mod_v3i32(a, int3(b));
+                 ^
+
diff --git a/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.ir.msl
index 3e576ac..ae9e090 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.ir.msl
@@ -1,8 +1,18 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   uint3 const a = uint3(1u, 2u, 3u);
   uint const b = 0u;
-  uint3 const r = (a % b);
+  uint3 const r = tint_mod_v3u32(a, uint3(b));
 }
+uint3 tint_mod_v3u32(uint3 lhs, uint3 rhs) {
+  uint3 const v = select(rhs, uint3(1u), (rhs == uint3(0u)));
+  return (lhs - ((lhs / v) * v));
+}
+program_source:7:19: error: use of undeclared identifier 'tint_mod_v3u32'
+  uint3 const r = tint_mod_v3u32(a, uint3(b));
+                  ^
+
diff --git a/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-vec3/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-vec3/i32.wgsl.expected.ir.msl
index 3516f0a..f7be78a 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-vec3/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-vec3/i32.wgsl.expected.ir.msl
@@ -1,8 +1,18 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   int3 const a = int3(1, 2, 3);
   int3 const b = int3(0, 5, 0);
-  int3 const r = (a % b);
+  int3 const r = tint_mod_v3i32(a, b);
 }
+int3 tint_mod_v3i32(int3 lhs, int3 rhs) {
+  int3 const v = select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1)))));
+  return (lhs - ((lhs / v) * v));
+}
+program_source:7:18: error: use of undeclared identifier 'tint_mod_v3i32'
+  int3 const r = tint_mod_v3i32(a, b);
+                 ^
+
diff --git a/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-vec3/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-vec3/u32.wgsl.expected.ir.msl
index 4ea3362..8e25d40 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-vec3/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-vec3/u32.wgsl.expected.ir.msl
@@ -1,8 +1,18 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   uint3 const a = uint3(1u, 2u, 3u);
   uint3 const b = uint3(0u, 5u, 0u);
-  uint3 const r = (a % b);
+  uint3 const r = tint_mod_v3u32(a, b);
 }
+uint3 tint_mod_v3u32(uint3 lhs, uint3 rhs) {
+  uint3 const v = select(rhs, uint3(1u), (rhs == uint3(0u)));
+  return (lhs - ((lhs / v) * v));
+}
+program_source:7:19: error: use of undeclared identifier 'tint_mod_v3u32'
+  uint3 const r = tint_mod_v3u32(a, b);
+                  ^
+
diff --git a/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-scalar/i32.wgsl.expected.ir.msl
index c03572b..42df4ee 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-scalar/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-scalar/i32.wgsl.expected.ir.msl
@@ -1,8 +1,18 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   int a = 1;
   int b = 0;
-  int const r = (a % (b + b));
+  int const r = tint_mod_i32(a, (b + b));
 }
+int tint_mod_i32(int lhs, int rhs) {
+  int const v = select(rhs, 1, ((rhs == 0) | ((lhs == (-2147483647 - 1)) & (rhs == -1))));
+  return (lhs - ((lhs / v) * v));
+}
+program_source:7:17: error: use of undeclared identifier 'tint_mod_i32'
+  int const r = tint_mod_i32(a, (b + b));
+                ^
+
diff --git a/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-scalar/u32.wgsl.expected.ir.msl
index 7674377..5f6496a 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-scalar/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-scalar/u32.wgsl.expected.ir.msl
@@ -1,8 +1,18 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   uint a = 1u;
   uint b = 0u;
-  uint const r = (a % (b + b));
+  uint const r = tint_mod_u32(a, (b + b));
 }
+uint tint_mod_u32(uint lhs, uint rhs) {
+  uint const v = select(rhs, 1u, (rhs == 0u));
+  return (lhs - ((lhs / v) * v));
+}
+program_source:7:18: error: use of undeclared identifier 'tint_mod_u32'
+  uint const r = tint_mod_u32(a, (b + b));
+                 ^
+
diff --git a/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-vec3/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-vec3/i32.wgsl.expected.ir.msl
index f8722fe..4395b07 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-vec3/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-vec3/i32.wgsl.expected.ir.msl
@@ -1,8 +1,19 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   int a = 4;
   int3 b = int3(0, 2, 0);
-  int3 const r = (a % (b + b));
+  int3 const v = (b + b);
+  int3 const r = tint_mod_v3i32(int3(a), v);
 }
+int3 tint_mod_v3i32(int3 lhs, int3 rhs) {
+  int3 const v_1 = select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1)))));
+  return (lhs - ((lhs / v_1) * v_1));
+}
+program_source:8:18: error: use of undeclared identifier 'tint_mod_v3i32'
+  int3 const r = tint_mod_v3i32(int3(a), v);
+                 ^
+
diff --git a/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-vec3/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-vec3/u32.wgsl.expected.ir.msl
index 37e677e..23fa120 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-vec3/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-vec3/u32.wgsl.expected.ir.msl
@@ -1,8 +1,19 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   uint a = 4u;
   uint3 b = uint3(0u, 2u, 0u);
-  uint3 const r = (a % (b + b));
+  uint3 const v = (b + b);
+  uint3 const r = tint_mod_v3u32(uint3(a), v);
 }
+uint3 tint_mod_v3u32(uint3 lhs, uint3 rhs) {
+  uint3 const v_1 = select(rhs, uint3(1u), (rhs == uint3(0u)));
+  return (lhs - ((lhs / v_1) * v_1));
+}
+program_source:8:19: error: use of undeclared identifier 'tint_mod_v3u32'
+  uint3 const r = tint_mod_v3u32(uint3(a), v);
+                  ^
+
diff --git a/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-scalar/i32.wgsl.expected.ir.msl
index 3614af6..b8ab3e9 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-scalar/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-scalar/i32.wgsl.expected.ir.msl
@@ -1,8 +1,19 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   int3 a = int3(1, 2, 3);
   int b = 0;
-  int3 const r = (a % (b + b));
+  int3 const v = a;
+  int3 const r = tint_mod_v3i32(v, int3((b + b)));
 }
+int3 tint_mod_v3i32(int3 lhs, int3 rhs) {
+  int3 const v_1 = select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1)))));
+  return (lhs - ((lhs / v_1) * v_1));
+}
+program_source:8:18: error: use of undeclared identifier 'tint_mod_v3i32'
+  int3 const r = tint_mod_v3i32(v, int3((b + b)));
+                 ^
+
diff --git a/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-scalar/u32.wgsl.expected.ir.msl
index 15e8303..c63c2cb 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-scalar/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-scalar/u32.wgsl.expected.ir.msl
@@ -1,8 +1,19 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   uint3 a = uint3(1u, 2u, 3u);
   uint b = 0u;
-  uint3 const r = (a % (b + b));
+  uint3 const v = a;
+  uint3 const r = tint_mod_v3u32(v, uint3((b + b)));
 }
+uint3 tint_mod_v3u32(uint3 lhs, uint3 rhs) {
+  uint3 const v_1 = select(rhs, uint3(1u), (rhs == uint3(0u)));
+  return (lhs - ((lhs / v_1) * v_1));
+}
+program_source:8:19: error: use of undeclared identifier 'tint_mod_v3u32'
+  uint3 const r = tint_mod_v3u32(v, uint3((b + b)));
+                  ^
+
diff --git a/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-vec3/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-vec3/i32.wgsl.expected.ir.msl
index b8d1373..a9eca17 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-vec3/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-vec3/i32.wgsl.expected.ir.msl
@@ -1,8 +1,18 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   int3 a = int3(1, 2, 3);
   int3 b = int3(0, 5, 0);
-  int3 const r = (a % (b + b));
+  int3 const r = tint_mod_v3i32(a, (b + b));
 }
+int3 tint_mod_v3i32(int3 lhs, int3 rhs) {
+  int3 const v = select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1)))));
+  return (lhs - ((lhs / v) * v));
+}
+program_source:7:18: error: use of undeclared identifier 'tint_mod_v3i32'
+  int3 const r = tint_mod_v3i32(a, (b + b));
+                 ^
+
diff --git a/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-vec3/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-vec3/u32.wgsl.expected.ir.msl
index 735dc67..8b388fa 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-vec3/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-vec3/u32.wgsl.expected.ir.msl
@@ -1,8 +1,18 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   uint3 a = uint3(1u, 2u, 3u);
   uint3 b = uint3(0u, 5u, 0u);
-  uint3 const r = (a % (b + b));
+  uint3 const r = tint_mod_v3u32(a, (b + b));
 }
+uint3 tint_mod_v3u32(uint3 lhs, uint3 rhs) {
+  uint3 const v = select(rhs, uint3(1u), (rhs == uint3(0u)));
+  return (lhs - ((lhs / v) * v));
+}
+program_source:7:19: error: use of undeclared identifier 'tint_mod_v3u32'
+  uint3 const r = tint_mod_v3u32(a, (b + b));
+                  ^
+
diff --git a/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/i32.wgsl.expected.ir.msl
index d9dcdcb..e6fd9e8 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/i32.wgsl.expected.ir.msl
@@ -1,8 +1,18 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   int a = 1;
   int b = 0;
-  int const r = (a % b);
+  int const r = tint_mod_i32(a, b);
 }
+int tint_mod_i32(int lhs, int rhs) {
+  int const v = select(rhs, 1, ((rhs == 0) | ((lhs == (-2147483647 - 1)) & (rhs == -1))));
+  return (lhs - ((lhs / v) * v));
+}
+program_source:7:17: error: use of undeclared identifier 'tint_mod_i32'
+  int const r = tint_mod_i32(a, b);
+                ^
+
diff --git a/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/u32.wgsl.expected.ir.msl
index 2d86764..bbd1107 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/u32.wgsl.expected.ir.msl
@@ -1,8 +1,18 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   uint a = 1u;
   uint b = 0u;
-  uint const r = (a % b);
+  uint const r = tint_mod_u32(a, b);
 }
+uint tint_mod_u32(uint lhs, uint rhs) {
+  uint const v = select(rhs, 1u, (rhs == 0u));
+  return (lhs - ((lhs / v) * v));
+}
+program_source:7:18: error: use of undeclared identifier 'tint_mod_u32'
+  uint const r = tint_mod_u32(a, b);
+                 ^
+
diff --git a/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-vec3/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-vec3/i32.wgsl.expected.ir.msl
index 4d180b6..2231a73 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-vec3/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-vec3/i32.wgsl.expected.ir.msl
@@ -1,8 +1,19 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   int a = 4;
   int3 b = int3(0, 2, 0);
-  int3 const r = (a % b);
+  int3 const v = b;
+  int3 const r = tint_mod_v3i32(int3(a), v);
 }
+int3 tint_mod_v3i32(int3 lhs, int3 rhs) {
+  int3 const v_1 = select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1)))));
+  return (lhs - ((lhs / v_1) * v_1));
+}
+program_source:8:18: error: use of undeclared identifier 'tint_mod_v3i32'
+  int3 const r = tint_mod_v3i32(int3(a), v);
+                 ^
+
diff --git a/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-vec3/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-vec3/u32.wgsl.expected.ir.msl
index f222dd4..5b1ca58 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-vec3/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-vec3/u32.wgsl.expected.ir.msl
@@ -1,8 +1,19 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   uint a = 4u;
   uint3 b = uint3(0u, 2u, 0u);
-  uint3 const r = (a % b);
+  uint3 const v = b;
+  uint3 const r = tint_mod_v3u32(uint3(a), v);
 }
+uint3 tint_mod_v3u32(uint3 lhs, uint3 rhs) {
+  uint3 const v_1 = select(rhs, uint3(1u), (rhs == uint3(0u)));
+  return (lhs - ((lhs / v_1) * v_1));
+}
+program_source:8:19: error: use of undeclared identifier 'tint_mod_v3u32'
+  uint3 const r = tint_mod_v3u32(uint3(a), v);
+                  ^
+
diff --git a/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-scalar/i32.wgsl.expected.ir.msl
index ddf4813..a6017c7 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-scalar/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-scalar/i32.wgsl.expected.ir.msl
@@ -1,8 +1,19 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   int3 a = int3(1, 2, 3);
   int b = 0;
-  int3 const r = (a % b);
+  int3 const v = a;
+  int3 const r = tint_mod_v3i32(v, int3(b));
 }
+int3 tint_mod_v3i32(int3 lhs, int3 rhs) {
+  int3 const v_1 = select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1)))));
+  return (lhs - ((lhs / v_1) * v_1));
+}
+program_source:8:18: error: use of undeclared identifier 'tint_mod_v3i32'
+  int3 const r = tint_mod_v3i32(v, int3(b));
+                 ^
+
diff --git a/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-scalar/u32.wgsl.expected.ir.msl
index c732010..96355d9 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-scalar/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-scalar/u32.wgsl.expected.ir.msl
@@ -1,8 +1,19 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   uint3 a = uint3(1u, 2u, 3u);
   uint b = 0u;
-  uint3 const r = (a % b);
+  uint3 const v = a;
+  uint3 const r = tint_mod_v3u32(v, uint3(b));
 }
+uint3 tint_mod_v3u32(uint3 lhs, uint3 rhs) {
+  uint3 const v_1 = select(rhs, uint3(1u), (rhs == uint3(0u)));
+  return (lhs - ((lhs / v_1) * v_1));
+}
+program_source:8:19: error: use of undeclared identifier 'tint_mod_v3u32'
+  uint3 const r = tint_mod_v3u32(v, uint3(b));
+                  ^
+
diff --git a/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/i32.wgsl.expected.ir.msl
index 7deac92..a7c66f5 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/i32.wgsl.expected.ir.msl
@@ -1,8 +1,18 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   int3 a = int3(1, 2, 3);
   int3 b = int3(0, 5, 0);
-  int3 const r = (a % b);
+  int3 const r = tint_mod_v3i32(a, b);
 }
+int3 tint_mod_v3i32(int3 lhs, int3 rhs) {
+  int3 const v = select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1)))));
+  return (lhs - ((lhs / v) * v));
+}
+program_source:7:18: error: use of undeclared identifier 'tint_mod_v3i32'
+  int3 const r = tint_mod_v3i32(a, b);
+                 ^
+
diff --git a/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/u32.wgsl.expected.ir.msl
index ef26674..60ddeeb 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/u32.wgsl.expected.ir.msl
@@ -1,8 +1,18 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
 kernel void f() {
   uint3 a = uint3(1u, 2u, 3u);
   uint3 b = uint3(0u, 5u, 0u);
-  uint3 const r = (a % b);
+  uint3 const r = tint_mod_v3u32(a, b);
 }
+uint3 tint_mod_v3u32(uint3 lhs, uint3 rhs) {
+  uint3 const v = select(rhs, uint3(1u), (rhs == uint3(0u)));
+  return (lhs - ((lhs / v) * v));
+}
+program_source:7:19: error: use of undeclared identifier 'tint_mod_v3u32'
+  uint3 const r = tint_mod_v3u32(a, b);
+                  ^
+
diff --git a/test/tint/expressions/binary/mul/mat3x2-vec3/f16.wgsl.expected.ir.msl b/test/tint/expressions/binary/mul/mat3x2-vec3/f16.wgsl.expected.ir.msl
index c341420..cc9d7eb 100644
--- a/test/tint/expressions/binary/mul/mat3x2-vec3/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mul/mat3x2-vec3/f16.wgsl.expected.ir.msl
@@ -1,21 +1,22 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:383 internal compiler error: S = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(8) {
   tint_symbol:mat3x2<f16> @offset(0)
   vector:vec3<f16> @offset(16)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %data:ptr<uniform, S, read> = var @binding_point(0, 0)
 }
 
-%tint_symbol_1 = @fragment func():void -> %b2 {
-  %b2 = block {
+%tint_symbol_1 = @fragment func():void {
+  $B2: {
     %3:ptr<uniform, mat3x2<f16>, read> = access %data, 0u
     %4:mat3x2<f16> = load %3
     %5:ptr<uniform, vec3<f16>, read> = access %data, 1u
     %6:vec3<f16> = load %5
-    %x:vec2<f16> = mul %4, %6
+    %7:vec2<f16> = mul %4, %6
+    %x:vec2<f16> = let %7
     ret
   }
 }
diff --git a/test/tint/expressions/binary/mul/mat3x2-vec3/f32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mul/mat3x2-vec3/f32.wgsl.expected.ir.msl
index d036b32..d076ee9 100644
--- a/test/tint/expressions/binary/mul/mat3x2-vec3/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mul/mat3x2-vec3/f32.wgsl.expected.ir.msl
@@ -1,21 +1,22 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:383 internal compiler error: S = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(16) {
   tint_symbol:mat3x2<f32> @offset(0)
   vector:vec3<f32> @offset(32)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %data:ptr<uniform, S, read> = var @binding_point(0, 0)
 }
 
-%tint_symbol_1 = @fragment func():void -> %b2 {
-  %b2 = block {
+%tint_symbol_1 = @fragment func():void {
+  $B2: {
     %3:ptr<uniform, mat3x2<f32>, read> = access %data, 0u
     %4:mat3x2<f32> = load %3
     %5:ptr<uniform, vec3<f32>, read> = access %data, 1u
     %6:vec3<f32> = load %5
-    %x:vec2<f32> = mul %4, %6
+    %7:vec2<f32> = mul %4, %6
+    %x:vec2<f32> = let %7
     ret
   }
 }
diff --git a/test/tint/expressions/binary/mul/mat3x3-vec3/f16.wgsl.expected.ir.msl b/test/tint/expressions/binary/mul/mat3x3-vec3/f16.wgsl.expected.ir.msl
index e7299d2..63113e5 100644
--- a/test/tint/expressions/binary/mul/mat3x3-vec3/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mul/mat3x3-vec3/f16.wgsl.expected.ir.msl
@@ -1,21 +1,22 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:383 internal compiler error: S = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(8) {
   tint_symbol:mat3x3<f16> @offset(0)
   vector:vec3<f16> @offset(24)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %data:ptr<uniform, S, read> = var @binding_point(0, 0)
 }
 
-%tint_symbol_1 = @fragment func():void -> %b2 {
-  %b2 = block {
+%tint_symbol_1 = @fragment func():void {
+  $B2: {
     %3:ptr<uniform, mat3x3<f16>, read> = access %data, 0u
     %4:mat3x3<f16> = load %3
     %5:ptr<uniform, vec3<f16>, read> = access %data, 1u
     %6:vec3<f16> = load %5
-    %x:vec3<f16> = mul %4, %6
+    %7:vec3<f16> = mul %4, %6
+    %x:vec3<f16> = let %7
     ret
   }
 }
diff --git a/test/tint/expressions/binary/mul/mat3x3-vec3/f32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mul/mat3x3-vec3/f32.wgsl.expected.ir.msl
index 3e4f5ff..bfc5a7a 100644
--- a/test/tint/expressions/binary/mul/mat3x3-vec3/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mul/mat3x3-vec3/f32.wgsl.expected.ir.msl
@@ -1,21 +1,22 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:383 internal compiler error: S = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(16) {
   tint_symbol:mat3x3<f32> @offset(0)
   vector:vec3<f32> @offset(48)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %data:ptr<uniform, S, read> = var @binding_point(0, 0)
 }
 
-%tint_symbol_1 = @fragment func():void -> %b2 {
-  %b2 = block {
+%tint_symbol_1 = @fragment func():void {
+  $B2: {
     %3:ptr<uniform, mat3x3<f32>, read> = access %data, 0u
     %4:mat3x3<f32> = load %3
     %5:ptr<uniform, vec3<f32>, read> = access %data, 1u
     %6:vec3<f32> = load %5
-    %x:vec3<f32> = mul %4, %6
+    %7:vec3<f32> = mul %4, %6
+    %x:vec3<f32> = let %7
     ret
   }
 }
diff --git a/test/tint/expressions/binary/mul/vec3-mat3x3/f16.wgsl.expected.ir.msl b/test/tint/expressions/binary/mul/vec3-mat3x3/f16.wgsl.expected.ir.msl
index 2ceba0e..860bcf5 100644
--- a/test/tint/expressions/binary/mul/vec3-mat3x3/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mul/vec3-mat3x3/f16.wgsl.expected.ir.msl
@@ -1,21 +1,22 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:383 internal compiler error: S = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(8) {
   tint_symbol:mat3x3<f16> @offset(0)
   vector:vec3<f16> @offset(24)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %data:ptr<uniform, S, read> = var @binding_point(0, 0)
 }
 
-%tint_symbol_1 = @fragment func():void -> %b2 {
-  %b2 = block {
+%tint_symbol_1 = @fragment func():void {
+  $B2: {
     %3:ptr<uniform, vec3<f16>, read> = access %data, 1u
     %4:vec3<f16> = load %3
     %5:ptr<uniform, mat3x3<f16>, read> = access %data, 0u
     %6:mat3x3<f16> = load %5
-    %x:vec3<f16> = mul %4, %6
+    %7:vec3<f16> = mul %4, %6
+    %x:vec3<f16> = let %7
     ret
   }
 }
diff --git a/test/tint/expressions/binary/mul/vec3-mat3x3/f32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mul/vec3-mat3x3/f32.wgsl.expected.ir.msl
index 4e38b05..7f4cc24 100644
--- a/test/tint/expressions/binary/mul/vec3-mat3x3/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mul/vec3-mat3x3/f32.wgsl.expected.ir.msl
@@ -1,21 +1,22 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:383 internal compiler error: S = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(16) {
   tint_symbol:mat3x3<f32> @offset(0)
   vector:vec3<f32> @offset(48)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %data:ptr<uniform, S, read> = var @binding_point(0, 0)
 }
 
-%tint_symbol_1 = @fragment func():void -> %b2 {
-  %b2 = block {
+%tint_symbol_1 = @fragment func():void {
+  $B2: {
     %3:ptr<uniform, vec3<f32>, read> = access %data, 1u
     %4:vec3<f32> = load %3
     %5:ptr<uniform, mat3x3<f32>, read> = access %data, 0u
     %6:mat3x3<f32> = load %5
-    %x:vec3<f32> = mul %4, %6
+    %7:vec3<f32> = mul %4, %6
+    %x:vec3<f32> = let %7
     ret
   }
 }
diff --git a/test/tint/expressions/binary/mul/vec3-mat4x3/f16.wgsl.expected.ir.msl b/test/tint/expressions/binary/mul/vec3-mat4x3/f16.wgsl.expected.ir.msl
index ddd9a22..8af14af 100644
--- a/test/tint/expressions/binary/mul/vec3-mat4x3/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mul/vec3-mat4x3/f16.wgsl.expected.ir.msl
@@ -1,21 +1,22 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:383 internal compiler error: S = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(8) {
   tint_symbol:mat4x3<f16> @offset(0)
   vector:vec3<f16> @offset(32)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %data:ptr<uniform, S, read> = var @binding_point(0, 0)
 }
 
-%tint_symbol_1 = @fragment func():void -> %b2 {
-  %b2 = block {
+%tint_symbol_1 = @fragment func():void {
+  $B2: {
     %3:ptr<uniform, vec3<f16>, read> = access %data, 1u
     %4:vec3<f16> = load %3
     %5:ptr<uniform, mat4x3<f16>, read> = access %data, 0u
     %6:mat4x3<f16> = load %5
-    %x:vec4<f16> = mul %4, %6
+    %7:vec4<f16> = mul %4, %6
+    %x:vec4<f16> = let %7
     ret
   }
 }
diff --git a/test/tint/expressions/binary/mul/vec3-mat4x3/f32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mul/vec3-mat4x3/f32.wgsl.expected.ir.msl
index 4c5ce73..09ac2b9 100644
--- a/test/tint/expressions/binary/mul/vec3-mat4x3/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mul/vec3-mat4x3/f32.wgsl.expected.ir.msl
@@ -1,21 +1,22 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:383 internal compiler error: S = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(16) {
   tint_symbol:mat4x3<f32> @offset(0)
   vector:vec3<f32> @offset(64)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %data:ptr<uniform, S, read> = var @binding_point(0, 0)
 }
 
-%tint_symbol_1 = @fragment func():void -> %b2 {
-  %b2 = block {
+%tint_symbol_1 = @fragment func():void {
+  $B2: {
     %3:ptr<uniform, vec3<f32>, read> = access %data, 1u
     %4:vec3<f32> = load %3
     %5:ptr<uniform, mat4x3<f32>, read> = access %data, 0u
     %6:mat4x3<f32> = load %5
-    %x:vec4<f32> = mul %4, %6
+    %7:vec4<f32> = mul %4, %6
+    %x:vec4<f32> = let %7
     ret
   }
 }
diff --git a/test/tint/expressions/swizzle/read/packed_vec3/f16.wgsl.expected.ir.msl b/test/tint/expressions/swizzle/read/packed_vec3/f16.wgsl.expected.ir.msl
index 2125482..06e17d1 100644
--- a/test/tint/expressions/swizzle/read/packed_vec3/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/swizzle/read/packed_vec3/f16.wgsl.expected.ir.msl
@@ -1,15 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:458 internal compiler error: S = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(8) {
   v:vec3<f16> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %U:ptr<uniform, S, read> = var @binding_point(0, 0)
 }
 
-%f = func():void -> %b2 {
-  %b2 = block {
+%f = func():void {
+  $B2: {
     %3:ptr<uniform, vec3<f16>, read> = access %U, 0u
     %4:vec3<f16> = load %3
     %v:ptr<function, vec3<f16>, read_write> = var, %4
diff --git a/test/tint/expressions/swizzle/read/packed_vec3/f32.wgsl.expected.ir.msl b/test/tint/expressions/swizzle/read/packed_vec3/f32.wgsl.expected.ir.msl
index cedacce..b5bdd28 100644
--- a/test/tint/expressions/swizzle/read/packed_vec3/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/swizzle/read/packed_vec3/f32.wgsl.expected.ir.msl
@@ -1,15 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:458 internal compiler error: S = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(16) {
   v:vec3<f32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %U:ptr<uniform, S, read> = var @binding_point(0, 0)
 }
 
-%f = func():void -> %b2 {
-  %b2 = block {
+%f = func():void {
+  $B2: {
     %3:ptr<uniform, vec3<f32>, read> = access %U, 0u
     %4:vec3<f32> = load %3
     %v:ptr<function, vec3<f32>, read_write> = var, %4
diff --git a/test/tint/expressions/swizzle/read/packed_vec3/i32.wgsl.expected.ir.msl b/test/tint/expressions/swizzle/read/packed_vec3/i32.wgsl.expected.ir.msl
index 59aa9d0..37e6cd7 100644
--- a/test/tint/expressions/swizzle/read/packed_vec3/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/swizzle/read/packed_vec3/i32.wgsl.expected.ir.msl
@@ -1,15 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:458 internal compiler error: S = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(16) {
   v:vec3<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %U:ptr<uniform, S, read> = var @binding_point(0, 0)
 }
 
-%f = func():void -> %b2 {
-  %b2 = block {
+%f = func():void {
+  $B2: {
     %3:ptr<uniform, vec3<i32>, read> = access %U, 0u
     %4:vec3<i32> = load %3
     %v:ptr<function, vec3<i32>, read_write> = var, %4
diff --git a/test/tint/expressions/swizzle/read/packed_vec3/u32.wgsl.expected.ir.msl b/test/tint/expressions/swizzle/read/packed_vec3/u32.wgsl.expected.ir.msl
index c744736..5e60691 100644
--- a/test/tint/expressions/swizzle/read/packed_vec3/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/swizzle/read/packed_vec3/u32.wgsl.expected.ir.msl
@@ -1,15 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:458 internal compiler error: S = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(16) {
   v:vec3<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %U:ptr<uniform, S, read> = var @binding_point(0, 0)
 }
 
-%f = func():void -> %b2 {
-  %b2 = block {
+%f = func():void {
+  $B2: {
     %3:ptr<uniform, vec3<u32>, read> = access %U, 0u
     %4:vec3<u32> = load %3
     %v:ptr<function, vec3<u32>, read_write> = var, %4
diff --git a/test/tint/expressions/swizzle/write/packed_vec3/f16.wgsl.expected.ir.msl b/test/tint/expressions/swizzle/write/packed_vec3/f16.wgsl.expected.ir.msl
index 75b0647..d020c19 100644
--- a/test/tint/expressions/swizzle/write/packed_vec3/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/swizzle/write/packed_vec3/f16.wgsl.expected.ir.msl
@@ -1,15 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:458 internal compiler error: S = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(8) {
   v:vec3<f16> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %U:ptr<storage, S, read_write> = var @binding_point(0, 0)
 }
 
-%f = func():void -> %b2 {
-  %b2 = block {
+%f = func():void {
+  $B2: {
     %3:ptr<storage, vec3<f16>, read_write> = access %U, 0u
     store %3, vec3<f16>(1.0h, 2.0h, 3.0h)
     %4:ptr<storage, vec3<f16>, read_write> = access %U, 0u
diff --git a/test/tint/expressions/swizzle/write/packed_vec3/f32.wgsl.expected.ir.msl b/test/tint/expressions/swizzle/write/packed_vec3/f32.wgsl.expected.ir.msl
index 9409642..aec9b83 100644
--- a/test/tint/expressions/swizzle/write/packed_vec3/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/swizzle/write/packed_vec3/f32.wgsl.expected.ir.msl
@@ -1,15 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:458 internal compiler error: S = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(16) {
   v:vec3<f32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %U:ptr<storage, S, read_write> = var @binding_point(0, 0)
 }
 
-%f = func():void -> %b2 {
-  %b2 = block {
+%f = func():void {
+  $B2: {
     %3:ptr<storage, vec3<f32>, read_write> = access %U, 0u
     store %3, vec3<f32>(1.0f, 2.0f, 3.0f)
     %4:ptr<storage, vec3<f32>, read_write> = access %U, 0u
diff --git a/test/tint/expressions/swizzle/write/packed_vec3/i32.wgsl.expected.ir.msl b/test/tint/expressions/swizzle/write/packed_vec3/i32.wgsl.expected.ir.msl
index b71cd03..8384aa5 100644
--- a/test/tint/expressions/swizzle/write/packed_vec3/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/swizzle/write/packed_vec3/i32.wgsl.expected.ir.msl
@@ -1,15 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:458 internal compiler error: S = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(16) {
   v:vec3<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %U:ptr<storage, S, read_write> = var @binding_point(0, 0)
 }
 
-%f = func():void -> %b2 {
-  %b2 = block {
+%f = func():void {
+  $B2: {
     %3:ptr<storage, vec3<i32>, read_write> = access %U, 0u
     store %3, vec3<i32>(1i, 2i, 3i)
     %4:ptr<storage, vec3<i32>, read_write> = access %U, 0u
diff --git a/test/tint/expressions/swizzle/write/packed_vec3/u32.wgsl.expected.ir.msl b/test/tint/expressions/swizzle/write/packed_vec3/u32.wgsl.expected.ir.msl
index 0919737..eb26cf5 100644
--- a/test/tint/expressions/swizzle/write/packed_vec3/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/swizzle/write/packed_vec3/u32.wgsl.expected.ir.msl
@@ -1,15 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:458 internal compiler error: S = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(16) {
   v:vec3<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %U:ptr<storage, S, read_write> = var @binding_point(0, 0)
 }
 
-%f = func():void -> %b2 {
-  %b2 = block {
+%f = func():void {
+  $B2: {
     %3:ptr<storage, vec3<u32>, read_write> = access %U, 0u
     store %3, vec3<u32>(1u, 2u, 3u)
     %4:ptr<storage, vec3<u32>, read_write> = access %U, 0u
diff --git a/test/tint/expressions/type_conv/mat2x2/function/f16-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat2x2/function/f16-f32.wgsl.expected.ir.msl
index efdd3b1..6c452e1 100644
--- a/test/tint/expressions/type_conv/mat2x2/function/f16-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/mat2x2/function/f16-f32.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread half t = 0.0h;
+half2x2 m() {
+  t = (t + 1.0h);
+  return half2x2(half2(1.0h, 2.0h), half2(3.0h, 4.0h));
+}
+void f() {
+  float2x2 v = float2x2(m());
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread half t = 0.0h;
+            ^
+program_source:10:12: warning: unused variable 'v' [-Wunused-variable]
+  float2x2 v = float2x2(m());
+           ^
+
diff --git a/test/tint/expressions/type_conv/mat2x2/function/f32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat2x2/function/f32-f16.wgsl.expected.ir.msl
index efdd3b1..6db60e1 100644
--- a/test/tint/expressions/type_conv/mat2x2/function/f32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/mat2x2/function/f32-f16.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float t = 0.0f;
+float2x2 m() {
+  t = (t + 1.0f);
+  return float2x2(float2(1.0f, 2.0f), float2(3.0f, 4.0f));
+}
+void f() {
+  half2x2 v = half2x2(m());
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread float t = 0.0f;
+             ^
+program_source:10:11: warning: unused variable 'v' [-Wunused-variable]
+  half2x2 v = half2x2(m());
+          ^
+
diff --git a/test/tint/expressions/type_conv/mat2x2/literal/f16-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat2x2/literal/f16-f32.wgsl.expected.ir.msl
index f476304..5627742 100644
--- a/test/tint/expressions/type_conv/mat2x2/literal/f16-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/mat2x2/literal/f16-f32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread float2x2 u = float2x2(float2(1.0f, 2.0f), float2(3.0f, 4.0f));
+program_source:4:17: error: program scope variable must reside in constant address space
+thread float2x2 u = float2x2(float2(1.0f, 2.0f), float2(3.0f, 4.0f));
+                ^
+
diff --git a/test/tint/expressions/type_conv/mat2x2/literal/f32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat2x2/literal/f32-f16.wgsl.expected.ir.msl
index 32c02a5..bf5ccd5 100644
--- a/test/tint/expressions/type_conv/mat2x2/literal/f32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/mat2x2/literal/f32-f16.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread half2x2 u = half2x2(half2(1.0h, 2.0h), half2(3.0h, 4.0h));
+program_source:4:16: error: program scope variable must reside in constant address space
+thread half2x2 u = half2x2(half2(1.0h, 2.0h), half2(3.0h, 4.0h));
+               ^
+
diff --git a/test/tint/expressions/type_conv/mat2x2/var/f16-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat2x2/var/f16-f32.wgsl.expected.ir.msl
index 47c8fbc..8c6dba6 100644
--- a/test/tint/expressions/type_conv/mat2x2/var/f16-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/mat2x2/var/f16-f32.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread half2x2 u = half2x2(half2(1.0h, 2.0h), half2(3.0h, 4.0h));
+void f() {
+  float2x2 v = float2x2(u);
+}
+program_source:4:16: error: program scope variable must reside in constant address space
+thread half2x2 u = half2x2(half2(1.0h, 2.0h), half2(3.0h, 4.0h));
+               ^
+program_source:6:12: warning: unused variable 'v' [-Wunused-variable]
+  float2x2 v = float2x2(u);
+           ^
+
diff --git a/test/tint/expressions/type_conv/mat2x2/var/f32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat2x2/var/f32-f16.wgsl.expected.ir.msl
index 47c8fbc..a8a49ff 100644
--- a/test/tint/expressions/type_conv/mat2x2/var/f32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/mat2x2/var/f32-f16.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float2x2 u = float2x2(float2(1.0f, 2.0f), float2(3.0f, 4.0f));
+void f() {
+  half2x2 v = half2x2(u);
+}
+program_source:4:17: error: program scope variable must reside in constant address space
+thread float2x2 u = float2x2(float2(1.0f, 2.0f), float2(3.0f, 4.0f));
+                ^
+program_source:6:11: warning: unused variable 'v' [-Wunused-variable]
+  half2x2 v = half2x2(u);
+          ^
+
diff --git a/test/tint/expressions/type_conv/mat2x3/function/f16-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat2x3/function/f16-f32.wgsl.expected.ir.msl
index efdd3b1..23033dd 100644
--- a/test/tint/expressions/type_conv/mat2x3/function/f16-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/mat2x3/function/f16-f32.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread half t = 0.0h;
+half2x3 m() {
+  t = (t + 1.0h);
+  return half2x3(half3(1.0h, 2.0h, 3.0h), half3(4.0h, 5.0h, 6.0h));
+}
+void f() {
+  float2x3 v = float2x3(m());
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread half t = 0.0h;
+            ^
+program_source:10:12: warning: unused variable 'v' [-Wunused-variable]
+  float2x3 v = float2x3(m());
+           ^
+
diff --git a/test/tint/expressions/type_conv/mat2x3/function/f32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat2x3/function/f32-f16.wgsl.expected.ir.msl
index efdd3b1..6920b55 100644
--- a/test/tint/expressions/type_conv/mat2x3/function/f32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/mat2x3/function/f32-f16.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float t = 0.0f;
+float2x3 m() {
+  t = (t + 1.0f);
+  return float2x3(float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f));
+}
+void f() {
+  half2x3 v = half2x3(m());
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread float t = 0.0f;
+             ^
+program_source:10:11: warning: unused variable 'v' [-Wunused-variable]
+  half2x3 v = half2x3(m());
+          ^
+
diff --git a/test/tint/expressions/type_conv/mat2x3/literal/f16-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat2x3/literal/f16-f32.wgsl.expected.ir.msl
index e275a8b..3395466 100644
--- a/test/tint/expressions/type_conv/mat2x3/literal/f16-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/mat2x3/literal/f16-f32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread float2x3 u = float2x3(float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f));
+program_source:4:17: error: program scope variable must reside in constant address space
+thread float2x3 u = float2x3(float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f));
+                ^
+
diff --git a/test/tint/expressions/type_conv/mat2x3/literal/f32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat2x3/literal/f32-f16.wgsl.expected.ir.msl
index 112f78c..0a827c4 100644
--- a/test/tint/expressions/type_conv/mat2x3/literal/f32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/mat2x3/literal/f32-f16.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread half2x3 u = half2x3(half3(1.0h, 2.0h, 3.0h), half3(4.0h, 5.0h, 6.0h));
+program_source:4:16: error: program scope variable must reside in constant address space
+thread half2x3 u = half2x3(half3(1.0h, 2.0h, 3.0h), half3(4.0h, 5.0h, 6.0h));
+               ^
+
diff --git a/test/tint/expressions/type_conv/mat2x3/var/f16-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat2x3/var/f16-f32.wgsl.expected.ir.msl
index 47c8fbc..d2ce968 100644
--- a/test/tint/expressions/type_conv/mat2x3/var/f16-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/mat2x3/var/f16-f32.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread half2x3 u = half2x3(half3(1.0h, 2.0h, 3.0h), half3(4.0h, 5.0h, 6.0h));
+void f() {
+  float2x3 v = float2x3(u);
+}
+program_source:4:16: error: program scope variable must reside in constant address space
+thread half2x3 u = half2x3(half3(1.0h, 2.0h, 3.0h), half3(4.0h, 5.0h, 6.0h));
+               ^
+program_source:6:12: warning: unused variable 'v' [-Wunused-variable]
+  float2x3 v = float2x3(u);
+           ^
+
diff --git a/test/tint/expressions/type_conv/mat2x3/var/f32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat2x3/var/f32-f16.wgsl.expected.ir.msl
index 47c8fbc..d214a8a 100644
--- a/test/tint/expressions/type_conv/mat2x3/var/f32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/mat2x3/var/f32-f16.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float2x3 u = float2x3(float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f));
+void f() {
+  half2x3 v = half2x3(u);
+}
+program_source:4:17: error: program scope variable must reside in constant address space
+thread float2x3 u = float2x3(float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f));
+                ^
+program_source:6:11: warning: unused variable 'v' [-Wunused-variable]
+  half2x3 v = half2x3(u);
+          ^
+
diff --git a/test/tint/expressions/type_conv/mat2x4/function/f16-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat2x4/function/f16-f32.wgsl.expected.ir.msl
index efdd3b1..7932d8f 100644
--- a/test/tint/expressions/type_conv/mat2x4/function/f16-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/mat2x4/function/f16-f32.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread half t = 0.0h;
+half2x4 m() {
+  t = (t + 1.0h);
+  return half2x4(half4(1.0h, 2.0h, 3.0h, 4.0h), half4(5.0h, 6.0h, 7.0h, 8.0h));
+}
+void f() {
+  float2x4 v = float2x4(m());
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread half t = 0.0h;
+            ^
+program_source:10:12: warning: unused variable 'v' [-Wunused-variable]
+  float2x4 v = float2x4(m());
+           ^
+
diff --git a/test/tint/expressions/type_conv/mat2x4/function/f32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat2x4/function/f32-f16.wgsl.expected.ir.msl
index efdd3b1..90ec16c 100644
--- a/test/tint/expressions/type_conv/mat2x4/function/f32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/mat2x4/function/f32-f16.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float t = 0.0f;
+float2x4 m() {
+  t = (t + 1.0f);
+  return float2x4(float4(1.0f, 2.0f, 3.0f, 4.0f), float4(5.0f, 6.0f, 7.0f, 8.0f));
+}
+void f() {
+  half2x4 v = half2x4(m());
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread float t = 0.0f;
+             ^
+program_source:10:11: warning: unused variable 'v' [-Wunused-variable]
+  half2x4 v = half2x4(m());
+          ^
+
diff --git a/test/tint/expressions/type_conv/mat2x4/literal/f16-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat2x4/literal/f16-f32.wgsl.expected.ir.msl
index 4989270..95e1ff1 100644
--- a/test/tint/expressions/type_conv/mat2x4/literal/f16-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/mat2x4/literal/f16-f32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread float2x4 u = float2x4(float4(1.0f, 2.0f, 3.0f, 4.0f), float4(5.0f, 6.0f, 7.0f, 8.0f));
+program_source:4:17: error: program scope variable must reside in constant address space
+thread float2x4 u = float2x4(float4(1.0f, 2.0f, 3.0f, 4.0f), float4(5.0f, 6.0f, 7.0f, 8.0f));
+                ^
+
diff --git a/test/tint/expressions/type_conv/mat2x4/literal/f32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat2x4/literal/f32-f16.wgsl.expected.ir.msl
index 5e79b85..4d3818b 100644
--- a/test/tint/expressions/type_conv/mat2x4/literal/f32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/mat2x4/literal/f32-f16.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread half2x4 u = half2x4(half4(1.0h, 2.0h, 3.0h, 4.0h), half4(5.0h, 6.0h, 7.0h, 8.0h));
+program_source:4:16: error: program scope variable must reside in constant address space
+thread half2x4 u = half2x4(half4(1.0h, 2.0h, 3.0h, 4.0h), half4(5.0h, 6.0h, 7.0h, 8.0h));
+               ^
+
diff --git a/test/tint/expressions/type_conv/mat2x4/var/f16-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat2x4/var/f16-f32.wgsl.expected.ir.msl
index 47c8fbc..e32b520 100644
--- a/test/tint/expressions/type_conv/mat2x4/var/f16-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/mat2x4/var/f16-f32.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread half2x4 u = half2x4(half4(1.0h, 2.0h, 3.0h, 4.0h), half4(5.0h, 6.0h, 7.0h, 8.0h));
+void f() {
+  float2x4 v = float2x4(u);
+}
+program_source:4:16: error: program scope variable must reside in constant address space
+thread half2x4 u = half2x4(half4(1.0h, 2.0h, 3.0h, 4.0h), half4(5.0h, 6.0h, 7.0h, 8.0h));
+               ^
+program_source:6:12: warning: unused variable 'v' [-Wunused-variable]
+  float2x4 v = float2x4(u);
+           ^
+
diff --git a/test/tint/expressions/type_conv/mat2x4/var/f32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat2x4/var/f32-f16.wgsl.expected.ir.msl
index 47c8fbc..7808a05 100644
--- a/test/tint/expressions/type_conv/mat2x4/var/f32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/mat2x4/var/f32-f16.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float2x4 u = float2x4(float4(1.0f, 2.0f, 3.0f, 4.0f), float4(5.0f, 6.0f, 7.0f, 8.0f));
+void f() {
+  half2x4 v = half2x4(u);
+}
+program_source:4:17: error: program scope variable must reside in constant address space
+thread float2x4 u = float2x4(float4(1.0f, 2.0f, 3.0f, 4.0f), float4(5.0f, 6.0f, 7.0f, 8.0f));
+                ^
+program_source:6:11: warning: unused variable 'v' [-Wunused-variable]
+  half2x4 v = half2x4(u);
+          ^
+
diff --git a/test/tint/expressions/type_conv/mat3x2/function/f16-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat3x2/function/f16-f32.wgsl.expected.ir.msl
index efdd3b1..190aac7 100644
--- a/test/tint/expressions/type_conv/mat3x2/function/f16-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/mat3x2/function/f16-f32.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread half t = 0.0h;
+half3x2 m() {
+  t = (t + 1.0h);
+  return half3x2(half2(1.0h, 2.0h), half2(3.0h, 4.0h), half2(5.0h, 6.0h));
+}
+void f() {
+  float3x2 v = float3x2(m());
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread half t = 0.0h;
+            ^
+program_source:10:12: warning: unused variable 'v' [-Wunused-variable]
+  float3x2 v = float3x2(m());
+           ^
+
diff --git a/test/tint/expressions/type_conv/mat3x2/function/f32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat3x2/function/f32-f16.wgsl.expected.ir.msl
index efdd3b1..86f0ba9 100644
--- a/test/tint/expressions/type_conv/mat3x2/function/f32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/mat3x2/function/f32-f16.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float t = 0.0f;
+float3x2 m() {
+  t = (t + 1.0f);
+  return float3x2(float2(1.0f, 2.0f), float2(3.0f, 4.0f), float2(5.0f, 6.0f));
+}
+void f() {
+  half3x2 v = half3x2(m());
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread float t = 0.0f;
+             ^
+program_source:10:11: warning: unused variable 'v' [-Wunused-variable]
+  half3x2 v = half3x2(m());
+          ^
+
diff --git a/test/tint/expressions/type_conv/mat3x2/literal/f16-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat3x2/literal/f16-f32.wgsl.expected.ir.msl
index 109ca80..8459fa6 100644
--- a/test/tint/expressions/type_conv/mat3x2/literal/f16-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/mat3x2/literal/f16-f32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread float3x2 u = float3x2(float2(1.0f, 2.0f), float2(3.0f, 4.0f), float2(5.0f, 6.0f));
+program_source:4:17: error: program scope variable must reside in constant address space
+thread float3x2 u = float3x2(float2(1.0f, 2.0f), float2(3.0f, 4.0f), float2(5.0f, 6.0f));
+                ^
+
diff --git a/test/tint/expressions/type_conv/mat3x2/literal/f32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat3x2/literal/f32-f16.wgsl.expected.ir.msl
index 7f3eb76..a1ea545 100644
--- a/test/tint/expressions/type_conv/mat3x2/literal/f32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/mat3x2/literal/f32-f16.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread half3x2 u = half3x2(half2(1.0h, 2.0h), half2(3.0h, 4.0h), half2(5.0h, 6.0h));
+program_source:4:16: error: program scope variable must reside in constant address space
+thread half3x2 u = half3x2(half2(1.0h, 2.0h), half2(3.0h, 4.0h), half2(5.0h, 6.0h));
+               ^
+
diff --git a/test/tint/expressions/type_conv/mat3x2/var/f16-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat3x2/var/f16-f32.wgsl.expected.ir.msl
index 47c8fbc..3c8fe4f 100644
--- a/test/tint/expressions/type_conv/mat3x2/var/f16-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/mat3x2/var/f16-f32.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread half3x2 u = half3x2(half2(1.0h, 2.0h), half2(3.0h, 4.0h), half2(5.0h, 6.0h));
+void f() {
+  float3x2 v = float3x2(u);
+}
+program_source:4:16: error: program scope variable must reside in constant address space
+thread half3x2 u = half3x2(half2(1.0h, 2.0h), half2(3.0h, 4.0h), half2(5.0h, 6.0h));
+               ^
+program_source:6:12: warning: unused variable 'v' [-Wunused-variable]
+  float3x2 v = float3x2(u);
+           ^
+
diff --git a/test/tint/expressions/type_conv/mat3x2/var/f32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat3x2/var/f32-f16.wgsl.expected.ir.msl
index 47c8fbc..9d715d3 100644
--- a/test/tint/expressions/type_conv/mat3x2/var/f32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/mat3x2/var/f32-f16.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float3x2 u = float3x2(float2(1.0f, 2.0f), float2(3.0f, 4.0f), float2(5.0f, 6.0f));
+void f() {
+  half3x2 v = half3x2(u);
+}
+program_source:4:17: error: program scope variable must reside in constant address space
+thread float3x2 u = float3x2(float2(1.0f, 2.0f), float2(3.0f, 4.0f), float2(5.0f, 6.0f));
+                ^
+program_source:6:11: warning: unused variable 'v' [-Wunused-variable]
+  half3x2 v = half3x2(u);
+          ^
+
diff --git a/test/tint/expressions/type_conv/mat3x3/function/f16-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat3x3/function/f16-f32.wgsl.expected.ir.msl
index efdd3b1..3e4edfc 100644
--- a/test/tint/expressions/type_conv/mat3x3/function/f16-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/mat3x3/function/f16-f32.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread half t = 0.0h;
+half3x3 m() {
+  t = (t + 1.0h);
+  return half3x3(half3(1.0h, 2.0h, 3.0h), half3(4.0h, 5.0h, 6.0h), half3(7.0h, 8.0h, 9.0h));
+}
+void f() {
+  float3x3 v = float3x3(m());
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread half t = 0.0h;
+            ^
+program_source:10:12: warning: unused variable 'v' [-Wunused-variable]
+  float3x3 v = float3x3(m());
+           ^
+
diff --git a/test/tint/expressions/type_conv/mat3x3/function/f32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat3x3/function/f32-f16.wgsl.expected.ir.msl
index efdd3b1..05ec66a 100644
--- a/test/tint/expressions/type_conv/mat3x3/function/f32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/mat3x3/function/f32-f16.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float t = 0.0f;
+float3x3 m() {
+  t = (t + 1.0f);
+  return float3x3(float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f));
+}
+void f() {
+  half3x3 v = half3x3(m());
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread float t = 0.0f;
+             ^
+program_source:10:11: warning: unused variable 'v' [-Wunused-variable]
+  half3x3 v = half3x3(m());
+          ^
+
diff --git a/test/tint/expressions/type_conv/mat3x3/literal/f16-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat3x3/literal/f16-f32.wgsl.expected.ir.msl
index 98944b6..26e06c0 100644
--- a/test/tint/expressions/type_conv/mat3x3/literal/f16-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/mat3x3/literal/f16-f32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread float3x3 u = float3x3(float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f));
+program_source:4:17: error: program scope variable must reside in constant address space
+thread float3x3 u = float3x3(float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f));
+                ^
+
diff --git a/test/tint/expressions/type_conv/mat3x3/literal/f32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat3x3/literal/f32-f16.wgsl.expected.ir.msl
index 7f70be3..18e1af4 100644
--- a/test/tint/expressions/type_conv/mat3x3/literal/f32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/mat3x3/literal/f32-f16.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread half3x3 u = half3x3(half3(1.0h, 2.0h, 3.0h), half3(4.0h, 5.0h, 6.0h), half3(7.0h, 8.0h, 9.0h));
+program_source:4:16: error: program scope variable must reside in constant address space
+thread half3x3 u = half3x3(half3(1.0h, 2.0h, 3.0h), half3(4.0h, 5.0h, 6.0h), half3(7.0h, 8.0h, 9.0h));
+               ^
+
diff --git a/test/tint/expressions/type_conv/mat3x3/var/f16-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat3x3/var/f16-f32.wgsl.expected.ir.msl
index 47c8fbc..28b1b91 100644
--- a/test/tint/expressions/type_conv/mat3x3/var/f16-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/mat3x3/var/f16-f32.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread half3x3 u = half3x3(half3(1.0h, 2.0h, 3.0h), half3(4.0h, 5.0h, 6.0h), half3(7.0h, 8.0h, 9.0h));
+void f() {
+  float3x3 v = float3x3(u);
+}
+program_source:4:16: error: program scope variable must reside in constant address space
+thread half3x3 u = half3x3(half3(1.0h, 2.0h, 3.0h), half3(4.0h, 5.0h, 6.0h), half3(7.0h, 8.0h, 9.0h));
+               ^
+program_source:6:12: warning: unused variable 'v' [-Wunused-variable]
+  float3x3 v = float3x3(u);
+           ^
+
diff --git a/test/tint/expressions/type_conv/mat3x3/var/f32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat3x3/var/f32-f16.wgsl.expected.ir.msl
index 47c8fbc..67868da 100644
--- a/test/tint/expressions/type_conv/mat3x3/var/f32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/mat3x3/var/f32-f16.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float3x3 u = float3x3(float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f));
+void f() {
+  half3x3 v = half3x3(u);
+}
+program_source:4:17: error: program scope variable must reside in constant address space
+thread float3x3 u = float3x3(float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f));
+                ^
+program_source:6:11: warning: unused variable 'v' [-Wunused-variable]
+  half3x3 v = half3x3(u);
+          ^
+
diff --git a/test/tint/expressions/type_conv/mat3x4/function/f16-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat3x4/function/f16-f32.wgsl.expected.ir.msl
index efdd3b1..334d887 100644
--- a/test/tint/expressions/type_conv/mat3x4/function/f16-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/mat3x4/function/f16-f32.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread half t = 0.0h;
+half3x4 m() {
+  t = (t + 1.0h);
+  return half3x4(half4(1.0h, 2.0h, 3.0h, 4.0h), half4(5.0h, 6.0h, 7.0h, 8.0h), half4(9.0h, 10.0h, 11.0h, 12.0h));
+}
+void f() {
+  float3x4 v = float3x4(m());
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread half t = 0.0h;
+            ^
+program_source:10:12: warning: unused variable 'v' [-Wunused-variable]
+  float3x4 v = float3x4(m());
+           ^
+
diff --git a/test/tint/expressions/type_conv/mat3x4/function/f32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat3x4/function/f32-f16.wgsl.expected.ir.msl
index efdd3b1..8d8625c 100644
--- a/test/tint/expressions/type_conv/mat3x4/function/f32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/mat3x4/function/f32-f16.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float t = 0.0f;
+float3x4 m() {
+  t = (t + 1.0f);
+  return float3x4(float4(1.0f, 2.0f, 3.0f, 4.0f), float4(5.0f, 6.0f, 7.0f, 8.0f), float4(9.0f, 10.0f, 11.0f, 12.0f));
+}
+void f() {
+  half3x4 v = half3x4(m());
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread float t = 0.0f;
+             ^
+program_source:10:11: warning: unused variable 'v' [-Wunused-variable]
+  half3x4 v = half3x4(m());
+          ^
+
diff --git a/test/tint/expressions/type_conv/mat3x4/literal/f16-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat3x4/literal/f16-f32.wgsl.expected.ir.msl
index 6a0cf8e..1e799db 100644
--- a/test/tint/expressions/type_conv/mat3x4/literal/f16-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/mat3x4/literal/f16-f32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread float3x4 u = float3x4(float4(1.0f, 2.0f, 3.0f, 4.0f), float4(5.0f, 6.0f, 7.0f, 8.0f), float4(9.0f, 10.0f, 11.0f, 12.0f));
+program_source:4:17: error: program scope variable must reside in constant address space
+thread float3x4 u = float3x4(float4(1.0f, 2.0f, 3.0f, 4.0f), float4(5.0f, 6.0f, 7.0f, 8.0f), float4(9.0f, 10.0f, 11.0f, 12.0f));
+                ^
+
diff --git a/test/tint/expressions/type_conv/mat3x4/literal/f32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat3x4/literal/f32-f16.wgsl.expected.ir.msl
index 9edd653..87b4e1d 100644
--- a/test/tint/expressions/type_conv/mat3x4/literal/f32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/mat3x4/literal/f32-f16.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread half3x4 u = half3x4(half4(1.0h, 2.0h, 3.0h, 4.0h), half4(5.0h, 6.0h, 7.0h, 8.0h), half4(9.0h, 10.0h, 11.0h, 12.0h));
+program_source:4:16: error: program scope variable must reside in constant address space
+thread half3x4 u = half3x4(half4(1.0h, 2.0h, 3.0h, 4.0h), half4(5.0h, 6.0h, 7.0h, 8.0h), half4(9.0h, 10.0h, 11.0h, 12.0h));
+               ^
+
diff --git a/test/tint/expressions/type_conv/mat3x4/var/f16-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat3x4/var/f16-f32.wgsl.expected.ir.msl
index 47c8fbc..d043073 100644
--- a/test/tint/expressions/type_conv/mat3x4/var/f16-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/mat3x4/var/f16-f32.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread half3x4 u = half3x4(half4(1.0h, 2.0h, 3.0h, 4.0h), half4(5.0h, 6.0h, 7.0h, 8.0h), half4(9.0h, 10.0h, 11.0h, 12.0h));
+void f() {
+  float3x4 v = float3x4(u);
+}
+program_source:4:16: error: program scope variable must reside in constant address space
+thread half3x4 u = half3x4(half4(1.0h, 2.0h, 3.0h, 4.0h), half4(5.0h, 6.0h, 7.0h, 8.0h), half4(9.0h, 10.0h, 11.0h, 12.0h));
+               ^
+program_source:6:12: warning: unused variable 'v' [-Wunused-variable]
+  float3x4 v = float3x4(u);
+           ^
+
diff --git a/test/tint/expressions/type_conv/mat3x4/var/f32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat3x4/var/f32-f16.wgsl.expected.ir.msl
index 47c8fbc..8b3da37 100644
--- a/test/tint/expressions/type_conv/mat3x4/var/f32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/mat3x4/var/f32-f16.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float3x4 u = float3x4(float4(1.0f, 2.0f, 3.0f, 4.0f), float4(5.0f, 6.0f, 7.0f, 8.0f), float4(9.0f, 10.0f, 11.0f, 12.0f));
+void f() {
+  half3x4 v = half3x4(u);
+}
+program_source:4:17: error: program scope variable must reside in constant address space
+thread float3x4 u = float3x4(float4(1.0f, 2.0f, 3.0f, 4.0f), float4(5.0f, 6.0f, 7.0f, 8.0f), float4(9.0f, 10.0f, 11.0f, 12.0f));
+                ^
+program_source:6:11: warning: unused variable 'v' [-Wunused-variable]
+  half3x4 v = half3x4(u);
+          ^
+
diff --git a/test/tint/expressions/type_conv/mat4x2/function/f16-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat4x2/function/f16-f32.wgsl.expected.ir.msl
index efdd3b1..f25d56b 100644
--- a/test/tint/expressions/type_conv/mat4x2/function/f16-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/mat4x2/function/f16-f32.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread half t = 0.0h;
+half4x2 m() {
+  t = (t + 1.0h);
+  return half4x2(half2(1.0h, 2.0h), half2(3.0h, 4.0h), half2(5.0h, 6.0h), half2(7.0h, 8.0h));
+}
+void f() {
+  float4x2 v = float4x2(m());
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread half t = 0.0h;
+            ^
+program_source:10:12: warning: unused variable 'v' [-Wunused-variable]
+  float4x2 v = float4x2(m());
+           ^
+
diff --git a/test/tint/expressions/type_conv/mat4x2/function/f32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat4x2/function/f32-f16.wgsl.expected.ir.msl
index efdd3b1..88b0d2c 100644
--- a/test/tint/expressions/type_conv/mat4x2/function/f32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/mat4x2/function/f32-f16.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float t = 0.0f;
+float4x2 m() {
+  t = (t + 1.0f);
+  return float4x2(float2(1.0f, 2.0f), float2(3.0f, 4.0f), float2(5.0f, 6.0f), float2(7.0f, 8.0f));
+}
+void f() {
+  half4x2 v = half4x2(m());
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread float t = 0.0f;
+             ^
+program_source:10:11: warning: unused variable 'v' [-Wunused-variable]
+  half4x2 v = half4x2(m());
+          ^
+
diff --git a/test/tint/expressions/type_conv/mat4x2/literal/f16-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat4x2/literal/f16-f32.wgsl.expected.ir.msl
index eea749f..cd3acca 100644
--- a/test/tint/expressions/type_conv/mat4x2/literal/f16-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/mat4x2/literal/f16-f32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread float4x2 u = float4x2(float2(1.0f, 2.0f), float2(3.0f, 4.0f), float2(5.0f, 6.0f), float2(7.0f, 8.0f));
+program_source:4:17: error: program scope variable must reside in constant address space
+thread float4x2 u = float4x2(float2(1.0f, 2.0f), float2(3.0f, 4.0f), float2(5.0f, 6.0f), float2(7.0f, 8.0f));
+                ^
+
diff --git a/test/tint/expressions/type_conv/mat4x2/literal/f32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat4x2/literal/f32-f16.wgsl.expected.ir.msl
index 30e3527..e8dcd7d 100644
--- a/test/tint/expressions/type_conv/mat4x2/literal/f32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/mat4x2/literal/f32-f16.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread half4x2 u = half4x2(half2(1.0h, 2.0h), half2(3.0h, 4.0h), half2(5.0h, 6.0h), half2(7.0h, 8.0h));
+program_source:4:16: error: program scope variable must reside in constant address space
+thread half4x2 u = half4x2(half2(1.0h, 2.0h), half2(3.0h, 4.0h), half2(5.0h, 6.0h), half2(7.0h, 8.0h));
+               ^
+
diff --git a/test/tint/expressions/type_conv/mat4x2/var/f16-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat4x2/var/f16-f32.wgsl.expected.ir.msl
index 47c8fbc..1f0f180 100644
--- a/test/tint/expressions/type_conv/mat4x2/var/f16-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/mat4x2/var/f16-f32.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread half4x2 u = half4x2(half2(1.0h, 2.0h), half2(3.0h, 4.0h), half2(5.0h, 6.0h), half2(7.0h, 8.0h));
+void f() {
+  float4x2 v = float4x2(u);
+}
+program_source:4:16: error: program scope variable must reside in constant address space
+thread half4x2 u = half4x2(half2(1.0h, 2.0h), half2(3.0h, 4.0h), half2(5.0h, 6.0h), half2(7.0h, 8.0h));
+               ^
+program_source:6:12: warning: unused variable 'v' [-Wunused-variable]
+  float4x2 v = float4x2(u);
+           ^
+
diff --git a/test/tint/expressions/type_conv/mat4x2/var/f32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat4x2/var/f32-f16.wgsl.expected.ir.msl
index 47c8fbc..71a5408 100644
--- a/test/tint/expressions/type_conv/mat4x2/var/f32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/mat4x2/var/f32-f16.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float4x2 u = float4x2(float2(1.0f, 2.0f), float2(3.0f, 4.0f), float2(5.0f, 6.0f), float2(7.0f, 8.0f));
+void f() {
+  half4x2 v = half4x2(u);
+}
+program_source:4:17: error: program scope variable must reside in constant address space
+thread float4x2 u = float4x2(float2(1.0f, 2.0f), float2(3.0f, 4.0f), float2(5.0f, 6.0f), float2(7.0f, 8.0f));
+                ^
+program_source:6:11: warning: unused variable 'v' [-Wunused-variable]
+  half4x2 v = half4x2(u);
+          ^
+
diff --git a/test/tint/expressions/type_conv/mat4x3/function/f16-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat4x3/function/f16-f32.wgsl.expected.ir.msl
index efdd3b1..73a9b26 100644
--- a/test/tint/expressions/type_conv/mat4x3/function/f16-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/mat4x3/function/f16-f32.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread half t = 0.0h;
+half4x3 m() {
+  t = (t + 1.0h);
+  return half4x3(half3(1.0h, 2.0h, 3.0h), half3(4.0h, 5.0h, 6.0h), half3(7.0h, 8.0h, 9.0h), half3(10.0h, 11.0h, 12.0h));
+}
+void f() {
+  float4x3 v = float4x3(m());
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread half t = 0.0h;
+            ^
+program_source:10:12: warning: unused variable 'v' [-Wunused-variable]
+  float4x3 v = float4x3(m());
+           ^
+
diff --git a/test/tint/expressions/type_conv/mat4x3/function/f32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat4x3/function/f32-f16.wgsl.expected.ir.msl
index efdd3b1..d114c7e 100644
--- a/test/tint/expressions/type_conv/mat4x3/function/f32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/mat4x3/function/f32-f16.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float t = 0.0f;
+float4x3 m() {
+  t = (t + 1.0f);
+  return float4x3(float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f), float3(10.0f, 11.0f, 12.0f));
+}
+void f() {
+  half4x3 v = half4x3(m());
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread float t = 0.0f;
+             ^
+program_source:10:11: warning: unused variable 'v' [-Wunused-variable]
+  half4x3 v = half4x3(m());
+          ^
+
diff --git a/test/tint/expressions/type_conv/mat4x3/literal/f16-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat4x3/literal/f16-f32.wgsl.expected.ir.msl
index 67a2e51..ae07c18 100644
--- a/test/tint/expressions/type_conv/mat4x3/literal/f16-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/mat4x3/literal/f16-f32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread float4x3 u = float4x3(float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f), float3(10.0f, 11.0f, 12.0f));
+program_source:4:17: error: program scope variable must reside in constant address space
+thread float4x3 u = float4x3(float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f), float3(10.0f, 11.0f, 12.0f));
+                ^
+
diff --git a/test/tint/expressions/type_conv/mat4x3/literal/f32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat4x3/literal/f32-f16.wgsl.expected.ir.msl
index ffb2c81..3b45939 100644
--- a/test/tint/expressions/type_conv/mat4x3/literal/f32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/mat4x3/literal/f32-f16.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread half4x3 u = half4x3(half3(1.0h, 2.0h, 3.0h), half3(4.0h, 5.0h, 6.0h), half3(7.0h, 8.0h, 9.0h), half3(10.0h, 11.0h, 12.0h));
+program_source:4:16: error: program scope variable must reside in constant address space
+thread half4x3 u = half4x3(half3(1.0h, 2.0h, 3.0h), half3(4.0h, 5.0h, 6.0h), half3(7.0h, 8.0h, 9.0h), half3(10.0h, 11.0h, 12.0h));
+               ^
+
diff --git a/test/tint/expressions/type_conv/mat4x3/var/f16-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat4x3/var/f16-f32.wgsl.expected.ir.msl
index 47c8fbc..194b990 100644
--- a/test/tint/expressions/type_conv/mat4x3/var/f16-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/mat4x3/var/f16-f32.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread half4x3 u = half4x3(half3(1.0h, 2.0h, 3.0h), half3(4.0h, 5.0h, 6.0h), half3(7.0h, 8.0h, 9.0h), half3(10.0h, 11.0h, 12.0h));
+void f() {
+  float4x3 v = float4x3(u);
+}
+program_source:4:16: error: program scope variable must reside in constant address space
+thread half4x3 u = half4x3(half3(1.0h, 2.0h, 3.0h), half3(4.0h, 5.0h, 6.0h), half3(7.0h, 8.0h, 9.0h), half3(10.0h, 11.0h, 12.0h));
+               ^
+program_source:6:12: warning: unused variable 'v' [-Wunused-variable]
+  float4x3 v = float4x3(u);
+           ^
+
diff --git a/test/tint/expressions/type_conv/mat4x3/var/f32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat4x3/var/f32-f16.wgsl.expected.ir.msl
index 47c8fbc..14eb949 100644
--- a/test/tint/expressions/type_conv/mat4x3/var/f32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/mat4x3/var/f32-f16.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float4x3 u = float4x3(float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f), float3(10.0f, 11.0f, 12.0f));
+void f() {
+  half4x3 v = half4x3(u);
+}
+program_source:4:17: error: program scope variable must reside in constant address space
+thread float4x3 u = float4x3(float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f), float3(10.0f, 11.0f, 12.0f));
+                ^
+program_source:6:11: warning: unused variable 'v' [-Wunused-variable]
+  half4x3 v = half4x3(u);
+          ^
+
diff --git a/test/tint/expressions/type_conv/mat4x4/function/f16-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat4x4/function/f16-f32.wgsl.expected.ir.msl
index efdd3b1..3a778cc 100644
--- a/test/tint/expressions/type_conv/mat4x4/function/f16-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/mat4x4/function/f16-f32.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread half t = 0.0h;
+half4x4 m() {
+  t = (t + 1.0h);
+  return half4x4(half4(1.0h, 2.0h, 3.0h, 4.0h), half4(5.0h, 6.0h, 7.0h, 8.0h), half4(9.0h, 10.0h, 11.0h, 12.0h), half4(13.0h, 14.0h, 15.0h, 16.0h));
+}
+void f() {
+  float4x4 v = float4x4(m());
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread half t = 0.0h;
+            ^
+program_source:10:12: warning: unused variable 'v' [-Wunused-variable]
+  float4x4 v = float4x4(m());
+           ^
+
diff --git a/test/tint/expressions/type_conv/mat4x4/function/f32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat4x4/function/f32-f16.wgsl.expected.ir.msl
index efdd3b1..7a1413d 100644
--- a/test/tint/expressions/type_conv/mat4x4/function/f32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/mat4x4/function/f32-f16.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float t = 0.0f;
+float4x4 m() {
+  t = (t + 1.0f);
+  return float4x4(float4(1.0f, 2.0f, 3.0f, 4.0f), float4(5.0f, 6.0f, 7.0f, 8.0f), float4(9.0f, 10.0f, 11.0f, 12.0f), float4(13.0f, 14.0f, 15.0f, 16.0f));
+}
+void f() {
+  half4x4 v = half4x4(m());
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread float t = 0.0f;
+             ^
+program_source:10:11: warning: unused variable 'v' [-Wunused-variable]
+  half4x4 v = half4x4(m());
+          ^
+
diff --git a/test/tint/expressions/type_conv/mat4x4/literal/f16-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat4x4/literal/f16-f32.wgsl.expected.ir.msl
index 675c2ec..776b0de 100644
--- a/test/tint/expressions/type_conv/mat4x4/literal/f16-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/mat4x4/literal/f16-f32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread float4x4 u = float4x4(float4(1.0f, 2.0f, 3.0f, 4.0f), float4(5.0f, 6.0f, 7.0f, 8.0f), float4(9.0f, 10.0f, 11.0f, 12.0f), float4(13.0f, 14.0f, 15.0f, 16.0f));
+program_source:4:17: error: program scope variable must reside in constant address space
+thread float4x4 u = float4x4(float4(1.0f, 2.0f, 3.0f, 4.0f), float4(5.0f, 6.0f, 7.0f, 8.0f), float4(9.0f, 10.0f, 11.0f, 12.0f), float4(13.0f, 14.0f, 15.0f, 16.0f));
+                ^
+
diff --git a/test/tint/expressions/type_conv/mat4x4/literal/f32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat4x4/literal/f32-f16.wgsl.expected.ir.msl
index 1b90074..5b7f4b4 100644
--- a/test/tint/expressions/type_conv/mat4x4/literal/f32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/mat4x4/literal/f32-f16.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread half4x4 u = half4x4(half4(1.0h, 2.0h, 3.0h, 4.0h), half4(5.0h, 6.0h, 7.0h, 8.0h), half4(9.0h, 10.0h, 11.0h, 12.0h), half4(13.0h, 14.0h, 15.0h, 16.0h));
+program_source:4:16: error: program scope variable must reside in constant address space
+thread half4x4 u = half4x4(half4(1.0h, 2.0h, 3.0h, 4.0h), half4(5.0h, 6.0h, 7.0h, 8.0h), half4(9.0h, 10.0h, 11.0h, 12.0h), half4(13.0h, 14.0h, 15.0h, 16.0h));
+               ^
+
diff --git a/test/tint/expressions/type_conv/mat4x4/var/f16-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat4x4/var/f16-f32.wgsl.expected.ir.msl
index 47c8fbc..b61f23a 100644
--- a/test/tint/expressions/type_conv/mat4x4/var/f16-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/mat4x4/var/f16-f32.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread half4x4 u = half4x4(half4(1.0h, 2.0h, 3.0h, 4.0h), half4(5.0h, 6.0h, 7.0h, 8.0h), half4(9.0h, 10.0h, 11.0h, 12.0h), half4(13.0h, 14.0h, 15.0h, 16.0h));
+void f() {
+  float4x4 v = float4x4(u);
+}
+program_source:4:16: error: program scope variable must reside in constant address space
+thread half4x4 u = half4x4(half4(1.0h, 2.0h, 3.0h, 4.0h), half4(5.0h, 6.0h, 7.0h, 8.0h), half4(9.0h, 10.0h, 11.0h, 12.0h), half4(13.0h, 14.0h, 15.0h, 16.0h));
+               ^
+program_source:6:12: warning: unused variable 'v' [-Wunused-variable]
+  float4x4 v = float4x4(u);
+           ^
+
diff --git a/test/tint/expressions/type_conv/mat4x4/var/f32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/mat4x4/var/f32-f16.wgsl.expected.ir.msl
index 47c8fbc..c7875aa3 100644
--- a/test/tint/expressions/type_conv/mat4x4/var/f32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/mat4x4/var/f32-f16.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float4x4 u = float4x4(float4(1.0f, 2.0f, 3.0f, 4.0f), float4(5.0f, 6.0f, 7.0f, 8.0f), float4(9.0f, 10.0f, 11.0f, 12.0f), float4(13.0f, 14.0f, 15.0f, 16.0f));
+void f() {
+  half4x4 v = half4x4(u);
+}
+program_source:4:17: error: program scope variable must reside in constant address space
+thread float4x4 u = float4x4(float4(1.0f, 2.0f, 3.0f, 4.0f), float4(5.0f, 6.0f, 7.0f, 8.0f), float4(9.0f, 10.0f, 11.0f, 12.0f), float4(13.0f, 14.0f, 15.0f, 16.0f));
+                ^
+program_source:6:11: warning: unused variable 'v' [-Wunused-variable]
+  half4x4 v = half4x4(u);
+          ^
+
diff --git a/test/tint/expressions/type_conv/scalar/function/bool-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/function/bool-f16.wgsl.expected.ir.msl
index efdd3b1..78dcb64 100644
--- a/test/tint/expressions/type_conv/scalar/function/bool-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/scalar/function/bool-f16.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool t = false;
+bool m() {
+  t = true;
+  return bool(t);
+}
+void f() {
+  half v = half(m());
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread bool t = false;
+            ^
+program_source:10:8: warning: unused variable 'v' [-Wunused-variable]
+  half v = half(m());
+       ^
+
diff --git a/test/tint/expressions/type_conv/scalar/function/bool-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/function/bool-f32.wgsl.expected.ir.msl
index efdd3b1..24c12d2 100644
--- a/test/tint/expressions/type_conv/scalar/function/bool-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/scalar/function/bool-f32.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool t = false;
+bool m() {
+  t = true;
+  return bool(t);
+}
+void f() {
+  float v = float(m());
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread bool t = false;
+            ^
+program_source:10:9: warning: unused variable 'v' [-Wunused-variable]
+  float v = float(m());
+        ^
+
diff --git a/test/tint/expressions/type_conv/scalar/function/bool-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/function/bool-i32.wgsl.expected.ir.msl
index efdd3b1..d514d77 100644
--- a/test/tint/expressions/type_conv/scalar/function/bool-i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/scalar/function/bool-i32.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool t = false;
+bool m() {
+  t = true;
+  return bool(t);
+}
+void f() {
+  int v = int(m());
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread bool t = false;
+            ^
+program_source:10:7: warning: unused variable 'v' [-Wunused-variable]
+  int v = int(m());
+      ^
+
diff --git a/test/tint/expressions/type_conv/scalar/function/bool-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/function/bool-u32.wgsl.expected.ir.msl
index efdd3b1..96dea8f 100644
--- a/test/tint/expressions/type_conv/scalar/function/bool-u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/scalar/function/bool-u32.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool t = false;
+bool m() {
+  t = true;
+  return bool(t);
+}
+void f() {
+  uint v = uint(m());
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread bool t = false;
+            ^
+program_source:10:8: warning: unused variable 'v' [-Wunused-variable]
+  uint v = uint(m());
+       ^
+
diff --git a/test/tint/expressions/type_conv/scalar/function/f16-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/function/f16-bool.wgsl.expected.ir.msl
index efdd3b1..d3ee187 100644
--- a/test/tint/expressions/type_conv/scalar/function/f16-bool.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/scalar/function/f16-bool.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread half t = 0.0h;
+half m() {
+  t = 1.0h;
+  return half(t);
+}
+void f() {
+  bool v = bool(m());
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread half t = 0.0h;
+            ^
+program_source:10:8: warning: unused variable 'v' [-Wunused-variable]
+  bool v = bool(m());
+       ^
+
diff --git a/test/tint/expressions/type_conv/scalar/function/f16-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/function/f16-f32.wgsl.expected.ir.msl
index efdd3b1..564ef4d 100644
--- a/test/tint/expressions/type_conv/scalar/function/f16-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/scalar/function/f16-f32.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread half t = 0.0h;
+half m() {
+  t = 1.0h;
+  return half(t);
+}
+void f() {
+  float v = float(m());
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread half t = 0.0h;
+            ^
+program_source:10:9: warning: unused variable 'v' [-Wunused-variable]
+  float v = float(m());
+        ^
+
diff --git a/test/tint/expressions/type_conv/scalar/function/f16-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/function/f16-i32.wgsl.expected.ir.msl
index efdd3b1..e68341c 100644
--- a/test/tint/expressions/type_conv/scalar/function/f16-i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/scalar/function/f16-i32.wgsl.expected.ir.msl
@@ -1,9 +1,23 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread half t = 0.0h;
+half m() {
+  t = 1.0h;
+  return half(t);
+}
+void f() {
+  int v = tint_f16_to_i32(m());
+}
+int tint_f16_to_i32(half value) {
+  return select(2147483647, select((-2147483647 - 1), int(value), (value >= -65504.0h)), (value <= 65504.0h));
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread half t = 0.0h;
+            ^
+program_source:10:11: error: use of undeclared identifier 'tint_f16_to_i32'
+  int v = tint_f16_to_i32(m());
+          ^
+
diff --git a/test/tint/expressions/type_conv/scalar/function/f16-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/function/f16-u32.wgsl.expected.ir.msl
index efdd3b1..68eb209 100644
--- a/test/tint/expressions/type_conv/scalar/function/f16-u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/scalar/function/f16-u32.wgsl.expected.ir.msl
@@ -1,9 +1,23 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread half t = 0.0h;
+half m() {
+  t = 1.0h;
+  return half(t);
+}
+void f() {
+  uint v = tint_f16_to_u32(m());
+}
+uint tint_f16_to_u32(half value) {
+  return select(4294967295u, select(0u, uint(value), (value >= 0.0h)), (value <= 65504.0h));
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread half t = 0.0h;
+            ^
+program_source:10:12: error: use of undeclared identifier 'tint_f16_to_u32'
+  uint v = tint_f16_to_u32(m());
+           ^
+
diff --git a/test/tint/expressions/type_conv/scalar/function/f32-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/function/f32-bool.wgsl.expected.ir.msl
index efdd3b1..ad3f327 100644
--- a/test/tint/expressions/type_conv/scalar/function/f32-bool.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/scalar/function/f32-bool.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float t = 0.0f;
+float m() {
+  t = 1.0f;
+  return float(t);
+}
+void f() {
+  bool v = bool(m());
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread float t = 0.0f;
+             ^
+program_source:10:8: warning: unused variable 'v' [-Wunused-variable]
+  bool v = bool(m());
+       ^
+
diff --git a/test/tint/expressions/type_conv/scalar/function/f32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/function/f32-f16.wgsl.expected.ir.msl
index efdd3b1..aa75a86 100644
--- a/test/tint/expressions/type_conv/scalar/function/f32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/scalar/function/f32-f16.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float t = 0.0f;
+float m() {
+  t = 1.0f;
+  return float(t);
+}
+void f() {
+  half v = half(m());
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread float t = 0.0f;
+             ^
+program_source:10:8: warning: unused variable 'v' [-Wunused-variable]
+  half v = half(m());
+       ^
+
diff --git a/test/tint/expressions/type_conv/scalar/function/f32-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/function/f32-i32.wgsl.expected.ir.msl
index efdd3b1..adb9d94 100644
--- a/test/tint/expressions/type_conv/scalar/function/f32-i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/scalar/function/f32-i32.wgsl.expected.ir.msl
@@ -1,9 +1,23 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float t = 0.0f;
+float m() {
+  t = 1.0f;
+  return float(t);
+}
+void f() {
+  int v = tint_f32_to_i32(m());
+}
+int tint_f32_to_i32(float value) {
+  return select(2147483647, select((-2147483647 - 1), int(value), (value >= -2147483648.0f)), (value <= 2147483520.0f));
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread float t = 0.0f;
+             ^
+program_source:10:11: error: use of undeclared identifier 'tint_f32_to_i32'
+  int v = tint_f32_to_i32(m());
+          ^
+
diff --git a/test/tint/expressions/type_conv/scalar/function/f32-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/function/f32-u32.wgsl.expected.ir.msl
index efdd3b1..39a5e78 100644
--- a/test/tint/expressions/type_conv/scalar/function/f32-u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/scalar/function/f32-u32.wgsl.expected.ir.msl
@@ -1,9 +1,23 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float t = 0.0f;
+float m() {
+  t = 1.0f;
+  return float(t);
+}
+void f() {
+  uint v = tint_f32_to_u32(m());
+}
+uint tint_f32_to_u32(float value) {
+  return select(4294967295u, select(0u, uint(value), (value >= 0.0f)), (value <= 4294967040.0f));
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread float t = 0.0f;
+             ^
+program_source:10:12: error: use of undeclared identifier 'tint_f32_to_u32'
+  uint v = tint_f32_to_u32(m());
+           ^
+
diff --git a/test/tint/expressions/type_conv/scalar/function/i32-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/function/i32-bool.wgsl.expected.ir.msl
index efdd3b1..5612162 100644
--- a/test/tint/expressions/type_conv/scalar/function/i32-bool.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/scalar/function/i32-bool.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread int t = 0;
+int m() {
+  t = 1;
+  return int(t);
+}
+void f() {
+  bool v = bool(m());
+}
+program_source:4:12: error: program scope variable must reside in constant address space
+thread int t = 0;
+           ^
+program_source:10:8: warning: unused variable 'v' [-Wunused-variable]
+  bool v = bool(m());
+       ^
+
diff --git a/test/tint/expressions/type_conv/scalar/function/i32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/function/i32-f16.wgsl.expected.ir.msl
index efdd3b1..5fd4bbe 100644
--- a/test/tint/expressions/type_conv/scalar/function/i32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/scalar/function/i32-f16.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread int t = 0;
+int m() {
+  t = 1;
+  return int(t);
+}
+void f() {
+  half v = half(m());
+}
+program_source:4:12: error: program scope variable must reside in constant address space
+thread int t = 0;
+           ^
+program_source:10:8: warning: unused variable 'v' [-Wunused-variable]
+  half v = half(m());
+       ^
+
diff --git a/test/tint/expressions/type_conv/scalar/function/i32-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/function/i32-f32.wgsl.expected.ir.msl
index efdd3b1..ee12374 100644
--- a/test/tint/expressions/type_conv/scalar/function/i32-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/scalar/function/i32-f32.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread int t = 0;
+int m() {
+  t = 1;
+  return int(t);
+}
+void f() {
+  float v = float(m());
+}
+program_source:4:12: error: program scope variable must reside in constant address space
+thread int t = 0;
+           ^
+program_source:10:9: warning: unused variable 'v' [-Wunused-variable]
+  float v = float(m());
+        ^
+
diff --git a/test/tint/expressions/type_conv/scalar/function/i32-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/function/i32-u32.wgsl.expected.ir.msl
index efdd3b1..02f7b22 100644
--- a/test/tint/expressions/type_conv/scalar/function/i32-u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/scalar/function/i32-u32.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread int t = 0;
+int m() {
+  t = 1;
+  return int(t);
+}
+void f() {
+  uint v = uint(m());
+}
+program_source:4:12: error: program scope variable must reside in constant address space
+thread int t = 0;
+           ^
+program_source:10:8: warning: unused variable 'v' [-Wunused-variable]
+  uint v = uint(m());
+       ^
+
diff --git a/test/tint/expressions/type_conv/scalar/function/u32-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/function/u32-bool.wgsl.expected.ir.msl
index efdd3b1..1d846fd 100644
--- a/test/tint/expressions/type_conv/scalar/function/u32-bool.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/scalar/function/u32-bool.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint t = 0u;
+uint m() {
+  t = 1u;
+  return uint(t);
+}
+void f() {
+  bool v = bool(m());
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint t = 0u;
+            ^
+program_source:10:8: warning: unused variable 'v' [-Wunused-variable]
+  bool v = bool(m());
+       ^
+
diff --git a/test/tint/expressions/type_conv/scalar/function/u32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/function/u32-f16.wgsl.expected.ir.msl
index efdd3b1..fc7c978 100644
--- a/test/tint/expressions/type_conv/scalar/function/u32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/scalar/function/u32-f16.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint t = 0u;
+uint m() {
+  t = 1u;
+  return uint(t);
+}
+void f() {
+  half v = half(m());
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint t = 0u;
+            ^
+program_source:10:8: warning: unused variable 'v' [-Wunused-variable]
+  half v = half(m());
+       ^
+
diff --git a/test/tint/expressions/type_conv/scalar/function/u32-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/function/u32-f32.wgsl.expected.ir.msl
index efdd3b1..3e47710 100644
--- a/test/tint/expressions/type_conv/scalar/function/u32-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/scalar/function/u32-f32.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint t = 0u;
+uint m() {
+  t = 1u;
+  return uint(t);
+}
+void f() {
+  float v = float(m());
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint t = 0u;
+            ^
+program_source:10:9: warning: unused variable 'v' [-Wunused-variable]
+  float v = float(m());
+        ^
+
diff --git a/test/tint/expressions/type_conv/scalar/function/u32-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/function/u32-i32.wgsl.expected.ir.msl
index efdd3b1..17d1d2d 100644
--- a/test/tint/expressions/type_conv/scalar/function/u32-i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/scalar/function/u32-i32.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint t = 0u;
+uint m() {
+  t = 1u;
+  return uint(t);
+}
+void f() {
+  int v = int(m());
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint t = 0u;
+            ^
+program_source:10:7: warning: unused variable 'v' [-Wunused-variable]
+  int v = int(m());
+      ^
+
diff --git a/test/tint/expressions/type_conv/scalar/literal/bool-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/literal/bool-f16.wgsl.expected.ir.msl
index 570be9b..0537133 100644
--- a/test/tint/expressions/type_conv/scalar/literal/bool-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/scalar/literal/bool-f16.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread half u = 1.0h;
+program_source:4:13: error: program scope variable must reside in constant address space
+thread half u = 1.0h;
+            ^
+
diff --git a/test/tint/expressions/type_conv/scalar/literal/bool-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/literal/bool-f32.wgsl.expected.ir.msl
index 9db9db8..98e1b9e 100644
--- a/test/tint/expressions/type_conv/scalar/literal/bool-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/scalar/literal/bool-f32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread float u = 1.0f;
+program_source:4:14: error: program scope variable must reside in constant address space
+thread float u = 1.0f;
+             ^
+
diff --git a/test/tint/expressions/type_conv/scalar/literal/bool-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/literal/bool-i32.wgsl.expected.ir.msl
index 47bca0d..909370a 100644
--- a/test/tint/expressions/type_conv/scalar/literal/bool-i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/scalar/literal/bool-i32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread int u = 1;
+program_source:4:12: error: program scope variable must reside in constant address space
+thread int u = 1;
+           ^
+
diff --git a/test/tint/expressions/type_conv/scalar/literal/bool-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/literal/bool-u32.wgsl.expected.ir.msl
index 3126801..92c1dc7 100644
--- a/test/tint/expressions/type_conv/scalar/literal/bool-u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/scalar/literal/bool-u32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread uint u = 1u;
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint u = 1u;
+            ^
+
diff --git a/test/tint/expressions/type_conv/scalar/literal/f16-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/literal/f16-bool.wgsl.expected.ir.msl
index c4b1953..741bd6e 100644
--- a/test/tint/expressions/type_conv/scalar/literal/f16-bool.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/scalar/literal/f16-bool.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread bool u = true;
+program_source:4:13: error: program scope variable must reside in constant address space
+thread bool u = true;
+            ^
+
diff --git a/test/tint/expressions/type_conv/scalar/literal/f16-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/literal/f16-f32.wgsl.expected.ir.msl
index 9db9db8..98e1b9e 100644
--- a/test/tint/expressions/type_conv/scalar/literal/f16-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/scalar/literal/f16-f32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread float u = 1.0f;
+program_source:4:14: error: program scope variable must reside in constant address space
+thread float u = 1.0f;
+             ^
+
diff --git a/test/tint/expressions/type_conv/scalar/literal/f16-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/literal/f16-i32.wgsl.expected.ir.msl
index 47bca0d..909370a 100644
--- a/test/tint/expressions/type_conv/scalar/literal/f16-i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/scalar/literal/f16-i32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread int u = 1;
+program_source:4:12: error: program scope variable must reside in constant address space
+thread int u = 1;
+           ^
+
diff --git a/test/tint/expressions/type_conv/scalar/literal/f16-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/literal/f16-u32.wgsl.expected.ir.msl
index 3126801..92c1dc7 100644
--- a/test/tint/expressions/type_conv/scalar/literal/f16-u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/scalar/literal/f16-u32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread uint u = 1u;
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint u = 1u;
+            ^
+
diff --git a/test/tint/expressions/type_conv/scalar/literal/f32-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/literal/f32-bool.wgsl.expected.ir.msl
index c4b1953..741bd6e 100644
--- a/test/tint/expressions/type_conv/scalar/literal/f32-bool.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/scalar/literal/f32-bool.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread bool u = true;
+program_source:4:13: error: program scope variable must reside in constant address space
+thread bool u = true;
+            ^
+
diff --git a/test/tint/expressions/type_conv/scalar/literal/f32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/literal/f32-f16.wgsl.expected.ir.msl
index 570be9b..0537133 100644
--- a/test/tint/expressions/type_conv/scalar/literal/f32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/scalar/literal/f32-f16.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread half u = 1.0h;
+program_source:4:13: error: program scope variable must reside in constant address space
+thread half u = 1.0h;
+            ^
+
diff --git a/test/tint/expressions/type_conv/scalar/literal/f32-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/literal/f32-i32.wgsl.expected.ir.msl
index 47bca0d..909370a 100644
--- a/test/tint/expressions/type_conv/scalar/literal/f32-i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/scalar/literal/f32-i32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread int u = 1;
+program_source:4:12: error: program scope variable must reside in constant address space
+thread int u = 1;
+           ^
+
diff --git a/test/tint/expressions/type_conv/scalar/literal/f32-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/literal/f32-u32.wgsl.expected.ir.msl
index 3126801..92c1dc7 100644
--- a/test/tint/expressions/type_conv/scalar/literal/f32-u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/scalar/literal/f32-u32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread uint u = 1u;
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint u = 1u;
+            ^
+
diff --git a/test/tint/expressions/type_conv/scalar/literal/i32-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/literal/i32-bool.wgsl.expected.ir.msl
index c4b1953..741bd6e 100644
--- a/test/tint/expressions/type_conv/scalar/literal/i32-bool.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/scalar/literal/i32-bool.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread bool u = true;
+program_source:4:13: error: program scope variable must reside in constant address space
+thread bool u = true;
+            ^
+
diff --git a/test/tint/expressions/type_conv/scalar/literal/i32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/literal/i32-f16.wgsl.expected.ir.msl
index 570be9b..0537133 100644
--- a/test/tint/expressions/type_conv/scalar/literal/i32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/scalar/literal/i32-f16.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread half u = 1.0h;
+program_source:4:13: error: program scope variable must reside in constant address space
+thread half u = 1.0h;
+            ^
+
diff --git a/test/tint/expressions/type_conv/scalar/literal/i32-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/literal/i32-f32.wgsl.expected.ir.msl
index 9db9db8..98e1b9e 100644
--- a/test/tint/expressions/type_conv/scalar/literal/i32-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/scalar/literal/i32-f32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread float u = 1.0f;
+program_source:4:14: error: program scope variable must reside in constant address space
+thread float u = 1.0f;
+             ^
+
diff --git a/test/tint/expressions/type_conv/scalar/literal/i32-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/literal/i32-u32.wgsl.expected.ir.msl
index 3126801..92c1dc7 100644
--- a/test/tint/expressions/type_conv/scalar/literal/i32-u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/scalar/literal/i32-u32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread uint u = 1u;
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint u = 1u;
+            ^
+
diff --git a/test/tint/expressions/type_conv/scalar/literal/u32-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/literal/u32-bool.wgsl.expected.ir.msl
index c4b1953..741bd6e 100644
--- a/test/tint/expressions/type_conv/scalar/literal/u32-bool.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/scalar/literal/u32-bool.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread bool u = true;
+program_source:4:13: error: program scope variable must reside in constant address space
+thread bool u = true;
+            ^
+
diff --git a/test/tint/expressions/type_conv/scalar/literal/u32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/literal/u32-f16.wgsl.expected.ir.msl
index 570be9b..0537133 100644
--- a/test/tint/expressions/type_conv/scalar/literal/u32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/scalar/literal/u32-f16.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread half u = 1.0h;
+program_source:4:13: error: program scope variable must reside in constant address space
+thread half u = 1.0h;
+            ^
+
diff --git a/test/tint/expressions/type_conv/scalar/literal/u32-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/literal/u32-f32.wgsl.expected.ir.msl
index 9db9db8..98e1b9e 100644
--- a/test/tint/expressions/type_conv/scalar/literal/u32-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/scalar/literal/u32-f32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread float u = 1.0f;
+program_source:4:14: error: program scope variable must reside in constant address space
+thread float u = 1.0f;
+             ^
+
diff --git a/test/tint/expressions/type_conv/scalar/literal/u32-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/literal/u32-i32.wgsl.expected.ir.msl
index 47bca0d..909370a 100644
--- a/test/tint/expressions/type_conv/scalar/literal/u32-i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/scalar/literal/u32-i32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread int u = 1;
+program_source:4:12: error: program scope variable must reside in constant address space
+thread int u = 1;
+           ^
+
diff --git a/test/tint/expressions/type_conv/scalar/var/bool-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/var/bool-f16.wgsl.expected.ir.msl
index 47c8fbc..9a7c7a3 100644
--- a/test/tint/expressions/type_conv/scalar/var/bool-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/scalar/var/bool-f16.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool u = true;
+void f() {
+  half const v = half(u);
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread bool u = true;
+            ^
+program_source:6:14: warning: unused variable 'v' [-Wunused-variable]
+  half const v = half(u);
+             ^
+
diff --git a/test/tint/expressions/type_conv/scalar/var/bool-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/var/bool-f32.wgsl.expected.ir.msl
index 47c8fbc..7a39c4e 100644
--- a/test/tint/expressions/type_conv/scalar/var/bool-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/scalar/var/bool-f32.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool u = true;
+void f() {
+  float const v = float(u);
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread bool u = true;
+            ^
+program_source:6:15: warning: unused variable 'v' [-Wunused-variable]
+  float const v = float(u);
+              ^
+
diff --git a/test/tint/expressions/type_conv/scalar/var/bool-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/var/bool-i32.wgsl.expected.ir.msl
index 47c8fbc..a1bd4a1 100644
--- a/test/tint/expressions/type_conv/scalar/var/bool-i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/scalar/var/bool-i32.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool u = true;
+void f() {
+  int const v = int(u);
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread bool u = true;
+            ^
+program_source:6:13: warning: unused variable 'v' [-Wunused-variable]
+  int const v = int(u);
+            ^
+
diff --git a/test/tint/expressions/type_conv/scalar/var/bool-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/var/bool-u32.wgsl.expected.ir.msl
index 47c8fbc..6ac5d0b 100644
--- a/test/tint/expressions/type_conv/scalar/var/bool-u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/scalar/var/bool-u32.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool u = true;
+void f() {
+  uint const v = uint(u);
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread bool u = true;
+            ^
+program_source:6:14: warning: unused variable 'v' [-Wunused-variable]
+  uint const v = uint(u);
+             ^
+
diff --git a/test/tint/expressions/type_conv/scalar/var/f16-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/var/f16-bool.wgsl.expected.ir.msl
index 47c8fbc..c47e547 100644
--- a/test/tint/expressions/type_conv/scalar/var/f16-bool.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/scalar/var/f16-bool.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread half u = 1.0h;
+void f() {
+  bool const v = bool(u);
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread half u = 1.0h;
+            ^
+program_source:6:14: warning: unused variable 'v' [-Wunused-variable]
+  bool const v = bool(u);
+             ^
+
diff --git a/test/tint/expressions/type_conv/scalar/var/f16-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/var/f16-f32.wgsl.expected.ir.msl
index 47c8fbc..5cae5f8 100644
--- a/test/tint/expressions/type_conv/scalar/var/f16-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/scalar/var/f16-f32.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread half u = 1.0h;
+void f() {
+  float const v = float(u);
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread half u = 1.0h;
+            ^
+program_source:6:15: warning: unused variable 'v' [-Wunused-variable]
+  float const v = float(u);
+              ^
+
diff --git a/test/tint/expressions/type_conv/scalar/var/f16-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/var/f16-i32.wgsl.expected.ir.msl
index 47c8fbc..1ac2537 100644
--- a/test/tint/expressions/type_conv/scalar/var/f16-i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/scalar/var/f16-i32.wgsl.expected.ir.msl
@@ -1,9 +1,19 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread half u = 1.0h;
+void f() {
+  int const v = tint_f16_to_i32(u);
+}
+int tint_f16_to_i32(half value) {
+  return select(2147483647, select((-2147483647 - 1), int(value), (value >= -65504.0h)), (value <= 65504.0h));
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread half u = 1.0h;
+            ^
+program_source:6:13: warning: unused variable 'v' [-Wunused-variable]
+  int const v = tint_f16_to_i32(u);
+            ^
+
diff --git a/test/tint/expressions/type_conv/scalar/var/f16-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/var/f16-u32.wgsl.expected.ir.msl
index 47c8fbc..15500f0 100644
--- a/test/tint/expressions/type_conv/scalar/var/f16-u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/scalar/var/f16-u32.wgsl.expected.ir.msl
@@ -1,9 +1,19 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread half u = 1.0h;
+void f() {
+  uint const v = tint_f16_to_u32(u);
+}
+uint tint_f16_to_u32(half value) {
+  return select(4294967295u, select(0u, uint(value), (value >= 0.0h)), (value <= 65504.0h));
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread half u = 1.0h;
+            ^
+program_source:6:14: warning: unused variable 'v' [-Wunused-variable]
+  uint const v = tint_f16_to_u32(u);
+             ^
+
diff --git a/test/tint/expressions/type_conv/scalar/var/f32-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/var/f32-bool.wgsl.expected.ir.msl
index 47c8fbc..f08bb37 100644
--- a/test/tint/expressions/type_conv/scalar/var/f32-bool.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/scalar/var/f32-bool.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float u = 1.0f;
+void f() {
+  bool const v = bool(u);
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread float u = 1.0f;
+             ^
+program_source:6:14: warning: unused variable 'v' [-Wunused-variable]
+  bool const v = bool(u);
+             ^
+
diff --git a/test/tint/expressions/type_conv/scalar/var/f32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/var/f32-f16.wgsl.expected.ir.msl
index 47c8fbc..416fc94 100644
--- a/test/tint/expressions/type_conv/scalar/var/f32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/scalar/var/f32-f16.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float u = 1.0f;
+void f() {
+  half const v = half(u);
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread float u = 1.0f;
+             ^
+program_source:6:14: warning: unused variable 'v' [-Wunused-variable]
+  half const v = half(u);
+             ^
+
diff --git a/test/tint/expressions/type_conv/scalar/var/f32-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/var/f32-i32.wgsl.expected.ir.msl
index 47c8fbc..0b8ec9b 100644
--- a/test/tint/expressions/type_conv/scalar/var/f32-i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/scalar/var/f32-i32.wgsl.expected.ir.msl
@@ -1,9 +1,19 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float u = 1.0f;
+void f() {
+  int const v = tint_f32_to_i32(u);
+}
+int tint_f32_to_i32(float value) {
+  return select(2147483647, select((-2147483647 - 1), int(value), (value >= -2147483648.0f)), (value <= 2147483520.0f));
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread float u = 1.0f;
+             ^
+program_source:6:13: warning: unused variable 'v' [-Wunused-variable]
+  int const v = tint_f32_to_i32(u);
+            ^
+
diff --git a/test/tint/expressions/type_conv/scalar/var/f32-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/var/f32-u32.wgsl.expected.ir.msl
index 47c8fbc..63e7c30 100644
--- a/test/tint/expressions/type_conv/scalar/var/f32-u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/scalar/var/f32-u32.wgsl.expected.ir.msl
@@ -1,9 +1,19 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float u = 1.0f;
+void f() {
+  uint const v = tint_f32_to_u32(u);
+}
+uint tint_f32_to_u32(float value) {
+  return select(4294967295u, select(0u, uint(value), (value >= 0.0f)), (value <= 4294967040.0f));
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread float u = 1.0f;
+             ^
+program_source:6:14: warning: unused variable 'v' [-Wunused-variable]
+  uint const v = tint_f32_to_u32(u);
+             ^
+
diff --git a/test/tint/expressions/type_conv/scalar/var/i32-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/var/i32-bool.wgsl.expected.ir.msl
index 47c8fbc..a7223d2 100644
--- a/test/tint/expressions/type_conv/scalar/var/i32-bool.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/scalar/var/i32-bool.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread int u = 1;
+void f() {
+  bool const v = bool(u);
+}
+program_source:4:12: error: program scope variable must reside in constant address space
+thread int u = 1;
+           ^
+program_source:6:14: warning: unused variable 'v' [-Wunused-variable]
+  bool const v = bool(u);
+             ^
+
diff --git a/test/tint/expressions/type_conv/scalar/var/i32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/var/i32-f16.wgsl.expected.ir.msl
index 47c8fbc..c3c8bd3 100644
--- a/test/tint/expressions/type_conv/scalar/var/i32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/scalar/var/i32-f16.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread int u = 1;
+void f() {
+  half const v = half(u);
+}
+program_source:4:12: error: program scope variable must reside in constant address space
+thread int u = 1;
+           ^
+program_source:6:14: warning: unused variable 'v' [-Wunused-variable]
+  half const v = half(u);
+             ^
+
diff --git a/test/tint/expressions/type_conv/scalar/var/i32-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/var/i32-f32.wgsl.expected.ir.msl
index 47c8fbc..2ed4a9f 100644
--- a/test/tint/expressions/type_conv/scalar/var/i32-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/scalar/var/i32-f32.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread int u = 1;
+void f() {
+  float const v = float(u);
+}
+program_source:4:12: error: program scope variable must reside in constant address space
+thread int u = 1;
+           ^
+program_source:6:15: warning: unused variable 'v' [-Wunused-variable]
+  float const v = float(u);
+              ^
+
diff --git a/test/tint/expressions/type_conv/scalar/var/i32-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/var/i32-u32.wgsl.expected.ir.msl
index 47c8fbc..60d815a 100644
--- a/test/tint/expressions/type_conv/scalar/var/i32-u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/scalar/var/i32-u32.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread int u = 1;
+void f() {
+  uint const v = uint(u);
+}
+program_source:4:12: error: program scope variable must reside in constant address space
+thread int u = 1;
+           ^
+program_source:6:14: warning: unused variable 'v' [-Wunused-variable]
+  uint const v = uint(u);
+             ^
+
diff --git a/test/tint/expressions/type_conv/scalar/var/u32-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/var/u32-bool.wgsl.expected.ir.msl
index 47c8fbc..eb0f0cf 100644
--- a/test/tint/expressions/type_conv/scalar/var/u32-bool.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/scalar/var/u32-bool.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint u = 1u;
+void f() {
+  bool const v = bool(u);
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint u = 1u;
+            ^
+program_source:6:14: warning: unused variable 'v' [-Wunused-variable]
+  bool const v = bool(u);
+             ^
+
diff --git a/test/tint/expressions/type_conv/scalar/var/u32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/var/u32-f16.wgsl.expected.ir.msl
index 47c8fbc..a78cc38 100644
--- a/test/tint/expressions/type_conv/scalar/var/u32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/scalar/var/u32-f16.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint u = 1u;
+void f() {
+  half const v = half(u);
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint u = 1u;
+            ^
+program_source:6:14: warning: unused variable 'v' [-Wunused-variable]
+  half const v = half(u);
+             ^
+
diff --git a/test/tint/expressions/type_conv/scalar/var/u32-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/var/u32-f32.wgsl.expected.ir.msl
index 47c8fbc..4c78dc5 100644
--- a/test/tint/expressions/type_conv/scalar/var/u32-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/scalar/var/u32-f32.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint u = 1u;
+void f() {
+  float const v = float(u);
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint u = 1u;
+            ^
+program_source:6:15: warning: unused variable 'v' [-Wunused-variable]
+  float const v = float(u);
+              ^
+
diff --git a/test/tint/expressions/type_conv/scalar/var/u32-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/scalar/var/u32-i32.wgsl.expected.ir.msl
index 47c8fbc..64fe8bd 100644
--- a/test/tint/expressions/type_conv/scalar/var/u32-i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/scalar/var/u32-i32.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint u = 1u;
+void f() {
+  int const v = int(u);
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint u = 1u;
+            ^
+program_source:6:13: warning: unused variable 'v' [-Wunused-variable]
+  int const v = int(u);
+            ^
+
diff --git a/test/tint/expressions/type_conv/vec2/function/bool-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/function/bool-f16.wgsl.expected.ir.msl
index efdd3b1..c262dd1 100644
--- a/test/tint/expressions/type_conv/vec2/function/bool-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec2/function/bool-f16.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool t = false;
+bool2 m() {
+  t = true;
+  return bool2(t);
+}
+void f() {
+  half2 v = half2(m());
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread bool t = false;
+            ^
+program_source:10:9: warning: unused variable 'v' [-Wunused-variable]
+  half2 v = half2(m());
+        ^
+
diff --git a/test/tint/expressions/type_conv/vec2/function/bool-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/function/bool-f32.wgsl.expected.ir.msl
index efdd3b1..ca2cdfd 100644
--- a/test/tint/expressions/type_conv/vec2/function/bool-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec2/function/bool-f32.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool t = false;
+bool2 m() {
+  t = true;
+  return bool2(t);
+}
+void f() {
+  float2 v = float2(m());
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread bool t = false;
+            ^
+program_source:10:10: warning: unused variable 'v' [-Wunused-variable]
+  float2 v = float2(m());
+         ^
+
diff --git a/test/tint/expressions/type_conv/vec2/function/bool-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/function/bool-i32.wgsl.expected.ir.msl
index efdd3b1..3e19b0d 100644
--- a/test/tint/expressions/type_conv/vec2/function/bool-i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec2/function/bool-i32.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool t = false;
+bool2 m() {
+  t = true;
+  return bool2(t);
+}
+void f() {
+  int2 v = int2(m());
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread bool t = false;
+            ^
+program_source:10:8: warning: unused variable 'v' [-Wunused-variable]
+  int2 v = int2(m());
+       ^
+
diff --git a/test/tint/expressions/type_conv/vec2/function/bool-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/function/bool-u32.wgsl.expected.ir.msl
index efdd3b1..43dba17 100644
--- a/test/tint/expressions/type_conv/vec2/function/bool-u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec2/function/bool-u32.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool t = false;
+bool2 m() {
+  t = true;
+  return bool2(t);
+}
+void f() {
+  uint2 v = uint2(m());
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread bool t = false;
+            ^
+program_source:10:9: warning: unused variable 'v' [-Wunused-variable]
+  uint2 v = uint2(m());
+        ^
+
diff --git a/test/tint/expressions/type_conv/vec2/function/f16-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/function/f16-bool.wgsl.expected.ir.msl
index efdd3b1..f8b94b4 100644
--- a/test/tint/expressions/type_conv/vec2/function/f16-bool.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec2/function/f16-bool.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread half t = 0.0h;
+half2 m() {
+  t = 1.0h;
+  return half2(t);
+}
+void f() {
+  bool2 v = bool2(m());
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread half t = 0.0h;
+            ^
+program_source:10:9: warning: unused variable 'v' [-Wunused-variable]
+  bool2 v = bool2(m());
+        ^
+
diff --git a/test/tint/expressions/type_conv/vec2/function/f16-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/function/f16-f32.wgsl.expected.ir.msl
index efdd3b1..fece1f4 100644
--- a/test/tint/expressions/type_conv/vec2/function/f16-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec2/function/f16-f32.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread half t = 0.0h;
+half2 m() {
+  t = 1.0h;
+  return half2(t);
+}
+void f() {
+  float2 v = float2(m());
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread half t = 0.0h;
+            ^
+program_source:10:10: warning: unused variable 'v' [-Wunused-variable]
+  float2 v = float2(m());
+         ^
+
diff --git a/test/tint/expressions/type_conv/vec2/function/f16-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/function/f16-i32.wgsl.expected.ir.msl
index efdd3b1..c0e0044 100644
--- a/test/tint/expressions/type_conv/vec2/function/f16-i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec2/function/f16-i32.wgsl.expected.ir.msl
@@ -1,9 +1,23 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread half t = 0.0h;
+half2 m() {
+  t = 1.0h;
+  return half2(t);
+}
+void f() {
+  int2 v = tint_v2f16_to_v2i32(m());
+}
+int2 tint_v2f16_to_v2i32(half2 value) {
+  return select(int2(2147483647), select(int2((-2147483647 - 1)), int2(value), (value >= half2(-65504.0h))), (value <= half2(65504.0h)));
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread half t = 0.0h;
+            ^
+program_source:10:12: error: use of undeclared identifier 'tint_v2f16_to_v2i32'
+  int2 v = tint_v2f16_to_v2i32(m());
+           ^
+
diff --git a/test/tint/expressions/type_conv/vec2/function/f16-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/function/f16-u32.wgsl.expected.ir.msl
index efdd3b1..cbb012e 100644
--- a/test/tint/expressions/type_conv/vec2/function/f16-u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec2/function/f16-u32.wgsl.expected.ir.msl
@@ -1,9 +1,23 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread half t = 0.0h;
+half2 m() {
+  t = 1.0h;
+  return half2(t);
+}
+void f() {
+  uint2 v = tint_v2f16_to_v2u32(m());
+}
+uint2 tint_v2f16_to_v2u32(half2 value) {
+  return select(uint2(4294967295u), select(uint2(0u), uint2(value), (value >= half2(0.0h))), (value <= half2(65504.0h)));
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread half t = 0.0h;
+            ^
+program_source:10:13: error: use of undeclared identifier 'tint_v2f16_to_v2u32'
+  uint2 v = tint_v2f16_to_v2u32(m());
+            ^
+
diff --git a/test/tint/expressions/type_conv/vec2/function/f32-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/function/f32-bool.wgsl.expected.ir.msl
index efdd3b1..04cd450 100644
--- a/test/tint/expressions/type_conv/vec2/function/f32-bool.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec2/function/f32-bool.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float t = 0.0f;
+float2 m() {
+  t = 1.0f;
+  return float2(t);
+}
+void f() {
+  bool2 v = bool2(m());
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread float t = 0.0f;
+             ^
+program_source:10:9: warning: unused variable 'v' [-Wunused-variable]
+  bool2 v = bool2(m());
+        ^
+
diff --git a/test/tint/expressions/type_conv/vec2/function/f32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/function/f32-f16.wgsl.expected.ir.msl
index efdd3b1..0facd6b 100644
--- a/test/tint/expressions/type_conv/vec2/function/f32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec2/function/f32-f16.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float t = 0.0f;
+float2 m() {
+  t = 1.0f;
+  return float2(t);
+}
+void f() {
+  half2 v = half2(m());
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread float t = 0.0f;
+             ^
+program_source:10:9: warning: unused variable 'v' [-Wunused-variable]
+  half2 v = half2(m());
+        ^
+
diff --git a/test/tint/expressions/type_conv/vec2/function/f32-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/function/f32-i32.wgsl.expected.ir.msl
index efdd3b1..dfc7adb 100644
--- a/test/tint/expressions/type_conv/vec2/function/f32-i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec2/function/f32-i32.wgsl.expected.ir.msl
@@ -1,9 +1,23 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float t = 0.0f;
+float2 m() {
+  t = 1.0f;
+  return float2(t);
+}
+void f() {
+  int2 v = tint_v2f32_to_v2i32(m());
+}
+int2 tint_v2f32_to_v2i32(float2 value) {
+  return select(int2(2147483647), select(int2((-2147483647 - 1)), int2(value), (value >= float2(-2147483648.0f))), (value <= float2(2147483520.0f)));
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread float t = 0.0f;
+             ^
+program_source:10:12: error: use of undeclared identifier 'tint_v2f32_to_v2i32'
+  int2 v = tint_v2f32_to_v2i32(m());
+           ^
+
diff --git a/test/tint/expressions/type_conv/vec2/function/f32-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/function/f32-u32.wgsl.expected.ir.msl
index efdd3b1..3d47e8d 100644
--- a/test/tint/expressions/type_conv/vec2/function/f32-u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec2/function/f32-u32.wgsl.expected.ir.msl
@@ -1,9 +1,23 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float t = 0.0f;
+float2 m() {
+  t = 1.0f;
+  return float2(t);
+}
+void f() {
+  uint2 v = tint_v2f32_to_v2u32(m());
+}
+uint2 tint_v2f32_to_v2u32(float2 value) {
+  return select(uint2(4294967295u), select(uint2(0u), uint2(value), (value >= float2(0.0f))), (value <= float2(4294967040.0f)));
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread float t = 0.0f;
+             ^
+program_source:10:13: error: use of undeclared identifier 'tint_v2f32_to_v2u32'
+  uint2 v = tint_v2f32_to_v2u32(m());
+            ^
+
diff --git a/test/tint/expressions/type_conv/vec2/function/i32-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/function/i32-bool.wgsl.expected.ir.msl
index efdd3b1..a9f5542 100644
--- a/test/tint/expressions/type_conv/vec2/function/i32-bool.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec2/function/i32-bool.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread int t = 0;
+int2 m() {
+  t = 1;
+  return int2(t);
+}
+void f() {
+  bool2 v = bool2(m());
+}
+program_source:4:12: error: program scope variable must reside in constant address space
+thread int t = 0;
+           ^
+program_source:10:9: warning: unused variable 'v' [-Wunused-variable]
+  bool2 v = bool2(m());
+        ^
+
diff --git a/test/tint/expressions/type_conv/vec2/function/i32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/function/i32-f16.wgsl.expected.ir.msl
index efdd3b1..efb482f 100644
--- a/test/tint/expressions/type_conv/vec2/function/i32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec2/function/i32-f16.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread int t = 0;
+int2 m() {
+  t = 1;
+  return int2(t);
+}
+void f() {
+  half2 v = half2(m());
+}
+program_source:4:12: error: program scope variable must reside in constant address space
+thread int t = 0;
+           ^
+program_source:10:9: warning: unused variable 'v' [-Wunused-variable]
+  half2 v = half2(m());
+        ^
+
diff --git a/test/tint/expressions/type_conv/vec2/function/i32-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/function/i32-f32.wgsl.expected.ir.msl
index efdd3b1..6c9a42f 100644
--- a/test/tint/expressions/type_conv/vec2/function/i32-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec2/function/i32-f32.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread int t = 0;
+int2 m() {
+  t = 1;
+  return int2(t);
+}
+void f() {
+  float2 v = float2(m());
+}
+program_source:4:12: error: program scope variable must reside in constant address space
+thread int t = 0;
+           ^
+program_source:10:10: warning: unused variable 'v' [-Wunused-variable]
+  float2 v = float2(m());
+         ^
+
diff --git a/test/tint/expressions/type_conv/vec2/function/i32-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/function/i32-u32.wgsl.expected.ir.msl
index efdd3b1..b5a1283 100644
--- a/test/tint/expressions/type_conv/vec2/function/i32-u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec2/function/i32-u32.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread int t = 0;
+int2 m() {
+  t = 1;
+  return int2(t);
+}
+void f() {
+  uint2 v = uint2(m());
+}
+program_source:4:12: error: program scope variable must reside in constant address space
+thread int t = 0;
+           ^
+program_source:10:9: warning: unused variable 'v' [-Wunused-variable]
+  uint2 v = uint2(m());
+        ^
+
diff --git a/test/tint/expressions/type_conv/vec2/function/u32-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/function/u32-bool.wgsl.expected.ir.msl
index efdd3b1..e986a96 100644
--- a/test/tint/expressions/type_conv/vec2/function/u32-bool.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec2/function/u32-bool.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint t = 0u;
+uint2 m() {
+  t = 1u;
+  return uint2(t);
+}
+void f() {
+  bool2 v = bool2(m());
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint t = 0u;
+            ^
+program_source:10:9: warning: unused variable 'v' [-Wunused-variable]
+  bool2 v = bool2(m());
+        ^
+
diff --git a/test/tint/expressions/type_conv/vec2/function/u32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/function/u32-f16.wgsl.expected.ir.msl
index efdd3b1..8ca1118 100644
--- a/test/tint/expressions/type_conv/vec2/function/u32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec2/function/u32-f16.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint t = 0u;
+uint2 m() {
+  t = 1u;
+  return uint2(t);
+}
+void f() {
+  half2 v = half2(m());
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint t = 0u;
+            ^
+program_source:10:9: warning: unused variable 'v' [-Wunused-variable]
+  half2 v = half2(m());
+        ^
+
diff --git a/test/tint/expressions/type_conv/vec2/function/u32-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/function/u32-f32.wgsl.expected.ir.msl
index efdd3b1..25abd48 100644
--- a/test/tint/expressions/type_conv/vec2/function/u32-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec2/function/u32-f32.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint t = 0u;
+uint2 m() {
+  t = 1u;
+  return uint2(t);
+}
+void f() {
+  float2 v = float2(m());
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint t = 0u;
+            ^
+program_source:10:10: warning: unused variable 'v' [-Wunused-variable]
+  float2 v = float2(m());
+         ^
+
diff --git a/test/tint/expressions/type_conv/vec2/function/u32-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/function/u32-i32.wgsl.expected.ir.msl
index efdd3b1..57e6e8d 100644
--- a/test/tint/expressions/type_conv/vec2/function/u32-i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec2/function/u32-i32.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint t = 0u;
+uint2 m() {
+  t = 1u;
+  return uint2(t);
+}
+void f() {
+  int2 v = int2(m());
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint t = 0u;
+            ^
+program_source:10:8: warning: unused variable 'v' [-Wunused-variable]
+  int2 v = int2(m());
+       ^
+
diff --git a/test/tint/expressions/type_conv/vec2/literal/bool-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/literal/bool-f16.wgsl.expected.ir.msl
index 7bf2352..c40812b 100644
--- a/test/tint/expressions/type_conv/vec2/literal/bool-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec2/literal/bool-f16.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread half2 u = half2(1.0h);
+program_source:4:14: error: program scope variable must reside in constant address space
+thread half2 u = half2(1.0h);
+             ^
+
diff --git a/test/tint/expressions/type_conv/vec2/literal/bool-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/literal/bool-f32.wgsl.expected.ir.msl
index b470051..8fbe300 100644
--- a/test/tint/expressions/type_conv/vec2/literal/bool-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec2/literal/bool-f32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread float2 u = float2(1.0f);
+program_source:4:15: error: program scope variable must reside in constant address space
+thread float2 u = float2(1.0f);
+              ^
+
diff --git a/test/tint/expressions/type_conv/vec2/literal/bool-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/literal/bool-i32.wgsl.expected.ir.msl
index a32b883..b792e98 100644
--- a/test/tint/expressions/type_conv/vec2/literal/bool-i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec2/literal/bool-i32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread int2 u = int2(1);
+program_source:4:13: error: program scope variable must reside in constant address space
+thread int2 u = int2(1);
+            ^
+
diff --git a/test/tint/expressions/type_conv/vec2/literal/bool-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/literal/bool-u32.wgsl.expected.ir.msl
index 6bfac8e..c263abf 100644
--- a/test/tint/expressions/type_conv/vec2/literal/bool-u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec2/literal/bool-u32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread uint2 u = uint2(1u);
+program_source:4:14: error: program scope variable must reside in constant address space
+thread uint2 u = uint2(1u);
+             ^
+
diff --git a/test/tint/expressions/type_conv/vec2/literal/f16-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/literal/f16-bool.wgsl.expected.ir.msl
index a616059..fe06240 100644
--- a/test/tint/expressions/type_conv/vec2/literal/f16-bool.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec2/literal/f16-bool.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread bool2 u = bool2(true);
+program_source:4:14: error: program scope variable must reside in constant address space
+thread bool2 u = bool2(true);
+             ^
+
diff --git a/test/tint/expressions/type_conv/vec2/literal/f16-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/literal/f16-f32.wgsl.expected.ir.msl
index b470051..8fbe300 100644
--- a/test/tint/expressions/type_conv/vec2/literal/f16-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec2/literal/f16-f32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread float2 u = float2(1.0f);
+program_source:4:15: error: program scope variable must reside in constant address space
+thread float2 u = float2(1.0f);
+              ^
+
diff --git a/test/tint/expressions/type_conv/vec2/literal/f16-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/literal/f16-i32.wgsl.expected.ir.msl
index a32b883..b792e98 100644
--- a/test/tint/expressions/type_conv/vec2/literal/f16-i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec2/literal/f16-i32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread int2 u = int2(1);
+program_source:4:13: error: program scope variable must reside in constant address space
+thread int2 u = int2(1);
+            ^
+
diff --git a/test/tint/expressions/type_conv/vec2/literal/f16-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/literal/f16-u32.wgsl.expected.ir.msl
index 6bfac8e..c263abf 100644
--- a/test/tint/expressions/type_conv/vec2/literal/f16-u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec2/literal/f16-u32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread uint2 u = uint2(1u);
+program_source:4:14: error: program scope variable must reside in constant address space
+thread uint2 u = uint2(1u);
+             ^
+
diff --git a/test/tint/expressions/type_conv/vec2/literal/f32-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/literal/f32-bool.wgsl.expected.ir.msl
index a616059..fe06240 100644
--- a/test/tint/expressions/type_conv/vec2/literal/f32-bool.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec2/literal/f32-bool.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread bool2 u = bool2(true);
+program_source:4:14: error: program scope variable must reside in constant address space
+thread bool2 u = bool2(true);
+             ^
+
diff --git a/test/tint/expressions/type_conv/vec2/literal/f32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/literal/f32-f16.wgsl.expected.ir.msl
index 7bf2352..c40812b 100644
--- a/test/tint/expressions/type_conv/vec2/literal/f32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec2/literal/f32-f16.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread half2 u = half2(1.0h);
+program_source:4:14: error: program scope variable must reside in constant address space
+thread half2 u = half2(1.0h);
+             ^
+
diff --git a/test/tint/expressions/type_conv/vec2/literal/f32-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/literal/f32-i32.wgsl.expected.ir.msl
index a32b883..b792e98 100644
--- a/test/tint/expressions/type_conv/vec2/literal/f32-i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec2/literal/f32-i32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread int2 u = int2(1);
+program_source:4:13: error: program scope variable must reside in constant address space
+thread int2 u = int2(1);
+            ^
+
diff --git a/test/tint/expressions/type_conv/vec2/literal/f32-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/literal/f32-u32.wgsl.expected.ir.msl
index 6bfac8e..c263abf 100644
--- a/test/tint/expressions/type_conv/vec2/literal/f32-u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec2/literal/f32-u32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread uint2 u = uint2(1u);
+program_source:4:14: error: program scope variable must reside in constant address space
+thread uint2 u = uint2(1u);
+             ^
+
diff --git a/test/tint/expressions/type_conv/vec2/literal/i32-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/literal/i32-bool.wgsl.expected.ir.msl
index a616059..fe06240 100644
--- a/test/tint/expressions/type_conv/vec2/literal/i32-bool.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec2/literal/i32-bool.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread bool2 u = bool2(true);
+program_source:4:14: error: program scope variable must reside in constant address space
+thread bool2 u = bool2(true);
+             ^
+
diff --git a/test/tint/expressions/type_conv/vec2/literal/i32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/literal/i32-f16.wgsl.expected.ir.msl
index 7bf2352..c40812b 100644
--- a/test/tint/expressions/type_conv/vec2/literal/i32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec2/literal/i32-f16.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread half2 u = half2(1.0h);
+program_source:4:14: error: program scope variable must reside in constant address space
+thread half2 u = half2(1.0h);
+             ^
+
diff --git a/test/tint/expressions/type_conv/vec2/literal/i32-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/literal/i32-f32.wgsl.expected.ir.msl
index b470051..8fbe300 100644
--- a/test/tint/expressions/type_conv/vec2/literal/i32-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec2/literal/i32-f32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread float2 u = float2(1.0f);
+program_source:4:15: error: program scope variable must reside in constant address space
+thread float2 u = float2(1.0f);
+              ^
+
diff --git a/test/tint/expressions/type_conv/vec2/literal/i32-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/literal/i32-u32.wgsl.expected.ir.msl
index 6bfac8e..c263abf 100644
--- a/test/tint/expressions/type_conv/vec2/literal/i32-u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec2/literal/i32-u32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread uint2 u = uint2(1u);
+program_source:4:14: error: program scope variable must reside in constant address space
+thread uint2 u = uint2(1u);
+             ^
+
diff --git a/test/tint/expressions/type_conv/vec2/literal/u32-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/literal/u32-bool.wgsl.expected.ir.msl
index a616059..fe06240 100644
--- a/test/tint/expressions/type_conv/vec2/literal/u32-bool.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec2/literal/u32-bool.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread bool2 u = bool2(true);
+program_source:4:14: error: program scope variable must reside in constant address space
+thread bool2 u = bool2(true);
+             ^
+
diff --git a/test/tint/expressions/type_conv/vec2/literal/u32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/literal/u32-f16.wgsl.expected.ir.msl
index 7bf2352..c40812b 100644
--- a/test/tint/expressions/type_conv/vec2/literal/u32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec2/literal/u32-f16.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread half2 u = half2(1.0h);
+program_source:4:14: error: program scope variable must reside in constant address space
+thread half2 u = half2(1.0h);
+             ^
+
diff --git a/test/tint/expressions/type_conv/vec2/literal/u32-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/literal/u32-f32.wgsl.expected.ir.msl
index b470051..8fbe300 100644
--- a/test/tint/expressions/type_conv/vec2/literal/u32-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec2/literal/u32-f32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread float2 u = float2(1.0f);
+program_source:4:15: error: program scope variable must reside in constant address space
+thread float2 u = float2(1.0f);
+              ^
+
diff --git a/test/tint/expressions/type_conv/vec2/literal/u32-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/literal/u32-i32.wgsl.expected.ir.msl
index a32b883..b792e98 100644
--- a/test/tint/expressions/type_conv/vec2/literal/u32-i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec2/literal/u32-i32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread int2 u = int2(1);
+program_source:4:13: error: program scope variable must reside in constant address space
+thread int2 u = int2(1);
+            ^
+
diff --git a/test/tint/expressions/type_conv/vec2/var/bool-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/var/bool-f16.wgsl.expected.ir.msl
index 47c8fbc..1a5995a 100644
--- a/test/tint/expressions/type_conv/vec2/var/bool-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec2/var/bool-f16.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool2 u = bool2(true);
+void f() {
+  half2 const v = half2(u);
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread bool2 u = bool2(true);
+             ^
+program_source:6:15: warning: unused variable 'v' [-Wunused-variable]
+  half2 const v = half2(u);
+              ^
+
diff --git a/test/tint/expressions/type_conv/vec2/var/bool-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/var/bool-f32.wgsl.expected.ir.msl
index 47c8fbc..e706de1 100644
--- a/test/tint/expressions/type_conv/vec2/var/bool-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec2/var/bool-f32.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool2 u = bool2(true);
+void f() {
+  float2 const v = float2(u);
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread bool2 u = bool2(true);
+             ^
+program_source:6:16: warning: unused variable 'v' [-Wunused-variable]
+  float2 const v = float2(u);
+               ^
+
diff --git a/test/tint/expressions/type_conv/vec2/var/bool-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/var/bool-i32.wgsl.expected.ir.msl
index 47c8fbc..5fc4c3a 100644
--- a/test/tint/expressions/type_conv/vec2/var/bool-i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec2/var/bool-i32.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool2 u = bool2(true);
+void f() {
+  int2 const v = int2(u);
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread bool2 u = bool2(true);
+             ^
+program_source:6:14: warning: unused variable 'v' [-Wunused-variable]
+  int2 const v = int2(u);
+             ^
+
diff --git a/test/tint/expressions/type_conv/vec2/var/bool-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/var/bool-u32.wgsl.expected.ir.msl
index 47c8fbc..109a7aa 100644
--- a/test/tint/expressions/type_conv/vec2/var/bool-u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec2/var/bool-u32.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool2 u = bool2(true);
+void f() {
+  uint2 const v = uint2(u);
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread bool2 u = bool2(true);
+             ^
+program_source:6:15: warning: unused variable 'v' [-Wunused-variable]
+  uint2 const v = uint2(u);
+              ^
+
diff --git a/test/tint/expressions/type_conv/vec2/var/f16-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/var/f16-bool.wgsl.expected.ir.msl
index 47c8fbc..9201bc2 100644
--- a/test/tint/expressions/type_conv/vec2/var/f16-bool.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec2/var/f16-bool.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread half2 u = half2(1.0h);
+void f() {
+  bool2 const v = bool2(u);
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread half2 u = half2(1.0h);
+             ^
+program_source:6:15: warning: unused variable 'v' [-Wunused-variable]
+  bool2 const v = bool2(u);
+              ^
+
diff --git a/test/tint/expressions/type_conv/vec2/var/f16-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/var/f16-f32.wgsl.expected.ir.msl
index 47c8fbc..87084ed 100644
--- a/test/tint/expressions/type_conv/vec2/var/f16-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec2/var/f16-f32.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread half2 u = half2(1.0h);
+void f() {
+  float2 const v = float2(u);
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread half2 u = half2(1.0h);
+             ^
+program_source:6:16: warning: unused variable 'v' [-Wunused-variable]
+  float2 const v = float2(u);
+               ^
+
diff --git a/test/tint/expressions/type_conv/vec2/var/f16-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/var/f16-i32.wgsl.expected.ir.msl
index 47c8fbc..5b84480 100644
--- a/test/tint/expressions/type_conv/vec2/var/f16-i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec2/var/f16-i32.wgsl.expected.ir.msl
@@ -1,9 +1,19 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread half2 u = half2(1.0h);
+void f() {
+  int2 const v = tint_v2f16_to_v2i32(u);
+}
+int2 tint_v2f16_to_v2i32(half2 value) {
+  return select(int2(2147483647), select(int2((-2147483647 - 1)), int2(value), (value >= half2(-65504.0h))), (value <= half2(65504.0h)));
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread half2 u = half2(1.0h);
+             ^
+program_source:6:14: warning: unused variable 'v' [-Wunused-variable]
+  int2 const v = tint_v2f16_to_v2i32(u);
+             ^
+
diff --git a/test/tint/expressions/type_conv/vec2/var/f16-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/var/f16-u32.wgsl.expected.ir.msl
index 47c8fbc..e95e7b0 100644
--- a/test/tint/expressions/type_conv/vec2/var/f16-u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec2/var/f16-u32.wgsl.expected.ir.msl
@@ -1,9 +1,19 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread half2 u = half2(1.0h);
+void f() {
+  uint2 const v = tint_v2f16_to_v2u32(u);
+}
+uint2 tint_v2f16_to_v2u32(half2 value) {
+  return select(uint2(4294967295u), select(uint2(0u), uint2(value), (value >= half2(0.0h))), (value <= half2(65504.0h)));
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread half2 u = half2(1.0h);
+             ^
+program_source:6:15: warning: unused variable 'v' [-Wunused-variable]
+  uint2 const v = tint_v2f16_to_v2u32(u);
+              ^
+
diff --git a/test/tint/expressions/type_conv/vec2/var/f32-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/var/f32-bool.wgsl.expected.ir.msl
index 47c8fbc..ed83e61 100644
--- a/test/tint/expressions/type_conv/vec2/var/f32-bool.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec2/var/f32-bool.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float2 u = float2(1.0f);
+void f() {
+  bool2 const v = bool2(u);
+}
+program_source:4:15: error: program scope variable must reside in constant address space
+thread float2 u = float2(1.0f);
+              ^
+program_source:6:15: warning: unused variable 'v' [-Wunused-variable]
+  bool2 const v = bool2(u);
+              ^
+
diff --git a/test/tint/expressions/type_conv/vec2/var/f32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/var/f32-f16.wgsl.expected.ir.msl
index 47c8fbc..8c74b04 100644
--- a/test/tint/expressions/type_conv/vec2/var/f32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec2/var/f32-f16.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float2 u = float2(1.0f);
+void f() {
+  half2 const v = half2(u);
+}
+program_source:4:15: error: program scope variable must reside in constant address space
+thread float2 u = float2(1.0f);
+              ^
+program_source:6:15: warning: unused variable 'v' [-Wunused-variable]
+  half2 const v = half2(u);
+              ^
+
diff --git a/test/tint/expressions/type_conv/vec2/var/f32-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/var/f32-i32.wgsl.expected.ir.msl
index 47c8fbc..9a98687 100644
--- a/test/tint/expressions/type_conv/vec2/var/f32-i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec2/var/f32-i32.wgsl.expected.ir.msl
@@ -1,9 +1,19 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float2 u = float2(1.0f);
+void f() {
+  int2 const v = tint_v2f32_to_v2i32(u);
+}
+int2 tint_v2f32_to_v2i32(float2 value) {
+  return select(int2(2147483647), select(int2((-2147483647 - 1)), int2(value), (value >= float2(-2147483648.0f))), (value <= float2(2147483520.0f)));
+}
+program_source:4:15: error: program scope variable must reside in constant address space
+thread float2 u = float2(1.0f);
+              ^
+program_source:6:14: warning: unused variable 'v' [-Wunused-variable]
+  int2 const v = tint_v2f32_to_v2i32(u);
+             ^
+
diff --git a/test/tint/expressions/type_conv/vec2/var/f32-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/var/f32-u32.wgsl.expected.ir.msl
index 47c8fbc..5b30270 100644
--- a/test/tint/expressions/type_conv/vec2/var/f32-u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec2/var/f32-u32.wgsl.expected.ir.msl
@@ -1,9 +1,19 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float2 u = float2(1.0f);
+void f() {
+  uint2 const v = tint_v2f32_to_v2u32(u);
+}
+uint2 tint_v2f32_to_v2u32(float2 value) {
+  return select(uint2(4294967295u), select(uint2(0u), uint2(value), (value >= float2(0.0f))), (value <= float2(4294967040.0f)));
+}
+program_source:4:15: error: program scope variable must reside in constant address space
+thread float2 u = float2(1.0f);
+              ^
+program_source:6:15: warning: unused variable 'v' [-Wunused-variable]
+  uint2 const v = tint_v2f32_to_v2u32(u);
+              ^
+
diff --git a/test/tint/expressions/type_conv/vec2/var/i32-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/var/i32-bool.wgsl.expected.ir.msl
index 47c8fbc..30d4554 100644
--- a/test/tint/expressions/type_conv/vec2/var/i32-bool.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec2/var/i32-bool.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread int2 u = int2(1);
+void f() {
+  bool2 const v = bool2(u);
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread int2 u = int2(1);
+            ^
+program_source:6:15: warning: unused variable 'v' [-Wunused-variable]
+  bool2 const v = bool2(u);
+              ^
+
diff --git a/test/tint/expressions/type_conv/vec2/var/i32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/var/i32-f16.wgsl.expected.ir.msl
index 47c8fbc..e24f750 100644
--- a/test/tint/expressions/type_conv/vec2/var/i32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec2/var/i32-f16.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread int2 u = int2(1);
+void f() {
+  half2 const v = half2(u);
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread int2 u = int2(1);
+            ^
+program_source:6:15: warning: unused variable 'v' [-Wunused-variable]
+  half2 const v = half2(u);
+              ^
+
diff --git a/test/tint/expressions/type_conv/vec2/var/i32-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/var/i32-f32.wgsl.expected.ir.msl
index 47c8fbc..ef6c69a 100644
--- a/test/tint/expressions/type_conv/vec2/var/i32-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec2/var/i32-f32.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread int2 u = int2(1);
+void f() {
+  float2 const v = float2(u);
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread int2 u = int2(1);
+            ^
+program_source:6:16: warning: unused variable 'v' [-Wunused-variable]
+  float2 const v = float2(u);
+               ^
+
diff --git a/test/tint/expressions/type_conv/vec2/var/i32-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/var/i32-u32.wgsl.expected.ir.msl
index 47c8fbc..7ece230 100644
--- a/test/tint/expressions/type_conv/vec2/var/i32-u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec2/var/i32-u32.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread int2 u = int2(1);
+void f() {
+  uint2 const v = uint2(u);
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread int2 u = int2(1);
+            ^
+program_source:6:15: warning: unused variable 'v' [-Wunused-variable]
+  uint2 const v = uint2(u);
+              ^
+
diff --git a/test/tint/expressions/type_conv/vec2/var/u32-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/var/u32-bool.wgsl.expected.ir.msl
index 47c8fbc..80d56d6 100644
--- a/test/tint/expressions/type_conv/vec2/var/u32-bool.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec2/var/u32-bool.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint2 u = uint2(1u);
+void f() {
+  bool2 const v = bool2(u);
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread uint2 u = uint2(1u);
+             ^
+program_source:6:15: warning: unused variable 'v' [-Wunused-variable]
+  bool2 const v = bool2(u);
+              ^
+
diff --git a/test/tint/expressions/type_conv/vec2/var/u32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/var/u32-f16.wgsl.expected.ir.msl
index 47c8fbc..8f4df73 100644
--- a/test/tint/expressions/type_conv/vec2/var/u32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec2/var/u32-f16.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint2 u = uint2(1u);
+void f() {
+  half2 const v = half2(u);
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread uint2 u = uint2(1u);
+             ^
+program_source:6:15: warning: unused variable 'v' [-Wunused-variable]
+  half2 const v = half2(u);
+              ^
+
diff --git a/test/tint/expressions/type_conv/vec2/var/u32-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/var/u32-f32.wgsl.expected.ir.msl
index 47c8fbc..9f13f4f 100644
--- a/test/tint/expressions/type_conv/vec2/var/u32-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec2/var/u32-f32.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint2 u = uint2(1u);
+void f() {
+  float2 const v = float2(u);
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread uint2 u = uint2(1u);
+             ^
+program_source:6:16: warning: unused variable 'v' [-Wunused-variable]
+  float2 const v = float2(u);
+               ^
+
diff --git a/test/tint/expressions/type_conv/vec2/var/u32-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec2/var/u32-i32.wgsl.expected.ir.msl
index 47c8fbc..ae43f15 100644
--- a/test/tint/expressions/type_conv/vec2/var/u32-i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec2/var/u32-i32.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint2 u = uint2(1u);
+void f() {
+  int2 const v = int2(u);
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread uint2 u = uint2(1u);
+             ^
+program_source:6:14: warning: unused variable 'v' [-Wunused-variable]
+  int2 const v = int2(u);
+             ^
+
diff --git a/test/tint/expressions/type_conv/vec3/function/bool-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/function/bool-f16.wgsl.expected.ir.msl
index efdd3b1..bf54750 100644
--- a/test/tint/expressions/type_conv/vec3/function/bool-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec3/function/bool-f16.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool t = false;
+bool3 m() {
+  t = true;
+  return bool3(t);
+}
+void f() {
+  half3 v = half3(m());
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread bool t = false;
+            ^
+program_source:10:9: warning: unused variable 'v' [-Wunused-variable]
+  half3 v = half3(m());
+        ^
+
diff --git a/test/tint/expressions/type_conv/vec3/function/bool-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/function/bool-f32.wgsl.expected.ir.msl
index efdd3b1..bb165f6 100644
--- a/test/tint/expressions/type_conv/vec3/function/bool-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec3/function/bool-f32.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool t = false;
+bool3 m() {
+  t = true;
+  return bool3(t);
+}
+void f() {
+  float3 v = float3(m());
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread bool t = false;
+            ^
+program_source:10:10: warning: unused variable 'v' [-Wunused-variable]
+  float3 v = float3(m());
+         ^
+
diff --git a/test/tint/expressions/type_conv/vec3/function/bool-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/function/bool-i32.wgsl.expected.ir.msl
index efdd3b1..844ae7a 100644
--- a/test/tint/expressions/type_conv/vec3/function/bool-i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec3/function/bool-i32.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool t = false;
+bool3 m() {
+  t = true;
+  return bool3(t);
+}
+void f() {
+  int3 v = int3(m());
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread bool t = false;
+            ^
+program_source:10:8: warning: unused variable 'v' [-Wunused-variable]
+  int3 v = int3(m());
+       ^
+
diff --git a/test/tint/expressions/type_conv/vec3/function/bool-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/function/bool-u32.wgsl.expected.ir.msl
index efdd3b1..2f0b369 100644
--- a/test/tint/expressions/type_conv/vec3/function/bool-u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec3/function/bool-u32.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool t = false;
+bool3 m() {
+  t = true;
+  return bool3(t);
+}
+void f() {
+  uint3 v = uint3(m());
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread bool t = false;
+            ^
+program_source:10:9: warning: unused variable 'v' [-Wunused-variable]
+  uint3 v = uint3(m());
+        ^
+
diff --git a/test/tint/expressions/type_conv/vec3/function/f16-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/function/f16-bool.wgsl.expected.ir.msl
index efdd3b1..3def4e4 100644
--- a/test/tint/expressions/type_conv/vec3/function/f16-bool.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec3/function/f16-bool.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread half t = 0.0h;
+half3 m() {
+  t = 1.0h;
+  return half3(t);
+}
+void f() {
+  bool3 v = bool3(m());
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread half t = 0.0h;
+            ^
+program_source:10:9: warning: unused variable 'v' [-Wunused-variable]
+  bool3 v = bool3(m());
+        ^
+
diff --git a/test/tint/expressions/type_conv/vec3/function/f16-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/function/f16-f32.wgsl.expected.ir.msl
index efdd3b1..0ae8001 100644
--- a/test/tint/expressions/type_conv/vec3/function/f16-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec3/function/f16-f32.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread half t = 0.0h;
+half3 m() {
+  t = 1.0h;
+  return half3(t);
+}
+void f() {
+  float3 v = float3(m());
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread half t = 0.0h;
+            ^
+program_source:10:10: warning: unused variable 'v' [-Wunused-variable]
+  float3 v = float3(m());
+         ^
+
diff --git a/test/tint/expressions/type_conv/vec3/function/f16-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/function/f16-i32.wgsl.expected.ir.msl
index efdd3b1..d4bc367 100644
--- a/test/tint/expressions/type_conv/vec3/function/f16-i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec3/function/f16-i32.wgsl.expected.ir.msl
@@ -1,9 +1,23 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread half t = 0.0h;
+half3 m() {
+  t = 1.0h;
+  return half3(t);
+}
+void f() {
+  int3 v = tint_v3f16_to_v3i32(m());
+}
+int3 tint_v3f16_to_v3i32(half3 value) {
+  return select(int3(2147483647), select(int3((-2147483647 - 1)), int3(value), (value >= half3(-65504.0h))), (value <= half3(65504.0h)));
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread half t = 0.0h;
+            ^
+program_source:10:12: error: use of undeclared identifier 'tint_v3f16_to_v3i32'
+  int3 v = tint_v3f16_to_v3i32(m());
+           ^
+
diff --git a/test/tint/expressions/type_conv/vec3/function/f16-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/function/f16-u32.wgsl.expected.ir.msl
index efdd3b1..1efe82d 100644
--- a/test/tint/expressions/type_conv/vec3/function/f16-u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec3/function/f16-u32.wgsl.expected.ir.msl
@@ -1,9 +1,23 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread half t = 0.0h;
+half3 m() {
+  t = 1.0h;
+  return half3(t);
+}
+void f() {
+  uint3 v = tint_v3f16_to_v3u32(m());
+}
+uint3 tint_v3f16_to_v3u32(half3 value) {
+  return select(uint3(4294967295u), select(uint3(0u), uint3(value), (value >= half3(0.0h))), (value <= half3(65504.0h)));
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread half t = 0.0h;
+            ^
+program_source:10:13: error: use of undeclared identifier 'tint_v3f16_to_v3u32'
+  uint3 v = tint_v3f16_to_v3u32(m());
+            ^
+
diff --git a/test/tint/expressions/type_conv/vec3/function/f32-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/function/f32-bool.wgsl.expected.ir.msl
index efdd3b1..13c4b62 100644
--- a/test/tint/expressions/type_conv/vec3/function/f32-bool.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec3/function/f32-bool.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float t = 0.0f;
+float3 m() {
+  t = 1.0f;
+  return float3(t);
+}
+void f() {
+  bool3 v = bool3(m());
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread float t = 0.0f;
+             ^
+program_source:10:9: warning: unused variable 'v' [-Wunused-variable]
+  bool3 v = bool3(m());
+        ^
+
diff --git a/test/tint/expressions/type_conv/vec3/function/f32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/function/f32-f16.wgsl.expected.ir.msl
index efdd3b1..0ea1407 100644
--- a/test/tint/expressions/type_conv/vec3/function/f32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec3/function/f32-f16.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float t = 0.0f;
+float3 m() {
+  t = 1.0f;
+  return float3(t);
+}
+void f() {
+  half3 v = half3(m());
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread float t = 0.0f;
+             ^
+program_source:10:9: warning: unused variable 'v' [-Wunused-variable]
+  half3 v = half3(m());
+        ^
+
diff --git a/test/tint/expressions/type_conv/vec3/function/f32-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/function/f32-i32.wgsl.expected.ir.msl
index efdd3b1..fe64085 100644
--- a/test/tint/expressions/type_conv/vec3/function/f32-i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec3/function/f32-i32.wgsl.expected.ir.msl
@@ -1,9 +1,23 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float t = 0.0f;
+float3 m() {
+  t = 1.0f;
+  return float3(t);
+}
+void f() {
+  int3 v = tint_v3f32_to_v3i32(m());
+}
+int3 tint_v3f32_to_v3i32(float3 value) {
+  return select(int3(2147483647), select(int3((-2147483647 - 1)), int3(value), (value >= float3(-2147483648.0f))), (value <= float3(2147483520.0f)));
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread float t = 0.0f;
+             ^
+program_source:10:12: error: use of undeclared identifier 'tint_v3f32_to_v3i32'
+  int3 v = tint_v3f32_to_v3i32(m());
+           ^
+
diff --git a/test/tint/expressions/type_conv/vec3/function/f32-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/function/f32-u32.wgsl.expected.ir.msl
index efdd3b1..15b7591 100644
--- a/test/tint/expressions/type_conv/vec3/function/f32-u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec3/function/f32-u32.wgsl.expected.ir.msl
@@ -1,9 +1,23 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float t = 0.0f;
+float3 m() {
+  t = 1.0f;
+  return float3(t);
+}
+void f() {
+  uint3 v = tint_v3f32_to_v3u32(m());
+}
+uint3 tint_v3f32_to_v3u32(float3 value) {
+  return select(uint3(4294967295u), select(uint3(0u), uint3(value), (value >= float3(0.0f))), (value <= float3(4294967040.0f)));
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread float t = 0.0f;
+             ^
+program_source:10:13: error: use of undeclared identifier 'tint_v3f32_to_v3u32'
+  uint3 v = tint_v3f32_to_v3u32(m());
+            ^
+
diff --git a/test/tint/expressions/type_conv/vec3/function/i32-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/function/i32-bool.wgsl.expected.ir.msl
index efdd3b1..0266ae4 100644
--- a/test/tint/expressions/type_conv/vec3/function/i32-bool.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec3/function/i32-bool.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread int t = 0;
+int3 m() {
+  t = 1;
+  return int3(t);
+}
+void f() {
+  bool3 v = bool3(m());
+}
+program_source:4:12: error: program scope variable must reside in constant address space
+thread int t = 0;
+           ^
+program_source:10:9: warning: unused variable 'v' [-Wunused-variable]
+  bool3 v = bool3(m());
+        ^
+
diff --git a/test/tint/expressions/type_conv/vec3/function/i32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/function/i32-f16.wgsl.expected.ir.msl
index efdd3b1..39dccf2 100644
--- a/test/tint/expressions/type_conv/vec3/function/i32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec3/function/i32-f16.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread int t = 0;
+int3 m() {
+  t = 1;
+  return int3(t);
+}
+void f() {
+  half3 v = half3(m());
+}
+program_source:4:12: error: program scope variable must reside in constant address space
+thread int t = 0;
+           ^
+program_source:10:9: warning: unused variable 'v' [-Wunused-variable]
+  half3 v = half3(m());
+        ^
+
diff --git a/test/tint/expressions/type_conv/vec3/function/i32-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/function/i32-f32.wgsl.expected.ir.msl
index efdd3b1..e6eded8 100644
--- a/test/tint/expressions/type_conv/vec3/function/i32-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec3/function/i32-f32.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread int t = 0;
+int3 m() {
+  t = 1;
+  return int3(t);
+}
+void f() {
+  float3 v = float3(m());
+}
+program_source:4:12: error: program scope variable must reside in constant address space
+thread int t = 0;
+           ^
+program_source:10:10: warning: unused variable 'v' [-Wunused-variable]
+  float3 v = float3(m());
+         ^
+
diff --git a/test/tint/expressions/type_conv/vec3/function/i32-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/function/i32-u32.wgsl.expected.ir.msl
index efdd3b1..a08fb57 100644
--- a/test/tint/expressions/type_conv/vec3/function/i32-u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec3/function/i32-u32.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread int t = 0;
+int3 m() {
+  t = 1;
+  return int3(t);
+}
+void f() {
+  uint3 v = uint3(m());
+}
+program_source:4:12: error: program scope variable must reside in constant address space
+thread int t = 0;
+           ^
+program_source:10:9: warning: unused variable 'v' [-Wunused-variable]
+  uint3 v = uint3(m());
+        ^
+
diff --git a/test/tint/expressions/type_conv/vec3/function/u32-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/function/u32-bool.wgsl.expected.ir.msl
index efdd3b1..e7557f0 100644
--- a/test/tint/expressions/type_conv/vec3/function/u32-bool.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec3/function/u32-bool.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint t = 0u;
+uint3 m() {
+  t = 1u;
+  return uint3(t);
+}
+void f() {
+  bool3 v = bool3(m());
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint t = 0u;
+            ^
+program_source:10:9: warning: unused variable 'v' [-Wunused-variable]
+  bool3 v = bool3(m());
+        ^
+
diff --git a/test/tint/expressions/type_conv/vec3/function/u32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/function/u32-f16.wgsl.expected.ir.msl
index efdd3b1..3a19e1c 100644
--- a/test/tint/expressions/type_conv/vec3/function/u32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec3/function/u32-f16.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint t = 0u;
+uint3 m() {
+  t = 1u;
+  return uint3(t);
+}
+void f() {
+  half3 v = half3(m());
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint t = 0u;
+            ^
+program_source:10:9: warning: unused variable 'v' [-Wunused-variable]
+  half3 v = half3(m());
+        ^
+
diff --git a/test/tint/expressions/type_conv/vec3/function/u32-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/function/u32-f32.wgsl.expected.ir.msl
index efdd3b1..d17e18e 100644
--- a/test/tint/expressions/type_conv/vec3/function/u32-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec3/function/u32-f32.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint t = 0u;
+uint3 m() {
+  t = 1u;
+  return uint3(t);
+}
+void f() {
+  float3 v = float3(m());
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint t = 0u;
+            ^
+program_source:10:10: warning: unused variable 'v' [-Wunused-variable]
+  float3 v = float3(m());
+         ^
+
diff --git a/test/tint/expressions/type_conv/vec3/function/u32-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/function/u32-i32.wgsl.expected.ir.msl
index efdd3b1..0dda7ac 100644
--- a/test/tint/expressions/type_conv/vec3/function/u32-i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec3/function/u32-i32.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint t = 0u;
+uint3 m() {
+  t = 1u;
+  return uint3(t);
+}
+void f() {
+  int3 v = int3(m());
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint t = 0u;
+            ^
+program_source:10:8: warning: unused variable 'v' [-Wunused-variable]
+  int3 v = int3(m());
+       ^
+
diff --git a/test/tint/expressions/type_conv/vec3/literal/bool-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/literal/bool-f16.wgsl.expected.ir.msl
index 1fe00b9..8b87f52 100644
--- a/test/tint/expressions/type_conv/vec3/literal/bool-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec3/literal/bool-f16.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread half3 u = half3(1.0h);
+program_source:4:14: error: program scope variable must reside in constant address space
+thread half3 u = half3(1.0h);
+             ^
+
diff --git a/test/tint/expressions/type_conv/vec3/literal/bool-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/literal/bool-f32.wgsl.expected.ir.msl
index b47b481..b56bf5e 100644
--- a/test/tint/expressions/type_conv/vec3/literal/bool-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec3/literal/bool-f32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread float3 u = float3(1.0f);
+program_source:4:15: error: program scope variable must reside in constant address space
+thread float3 u = float3(1.0f);
+              ^
+
diff --git a/test/tint/expressions/type_conv/vec3/literal/bool-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/literal/bool-i32.wgsl.expected.ir.msl
index 5c2d75f..d496a7d 100644
--- a/test/tint/expressions/type_conv/vec3/literal/bool-i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec3/literal/bool-i32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread int3 u = int3(1);
+program_source:4:13: error: program scope variable must reside in constant address space
+thread int3 u = int3(1);
+            ^
+
diff --git a/test/tint/expressions/type_conv/vec3/literal/bool-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/literal/bool-u32.wgsl.expected.ir.msl
index ac08e95..1a58077 100644
--- a/test/tint/expressions/type_conv/vec3/literal/bool-u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec3/literal/bool-u32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread uint3 u = uint3(1u);
+program_source:4:14: error: program scope variable must reside in constant address space
+thread uint3 u = uint3(1u);
+             ^
+
diff --git a/test/tint/expressions/type_conv/vec3/literal/f16-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/literal/f16-bool.wgsl.expected.ir.msl
index 9256549..11124d1 100644
--- a/test/tint/expressions/type_conv/vec3/literal/f16-bool.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec3/literal/f16-bool.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread bool3 u = bool3(true);
+program_source:4:14: error: program scope variable must reside in constant address space
+thread bool3 u = bool3(true);
+             ^
+
diff --git a/test/tint/expressions/type_conv/vec3/literal/f16-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/literal/f16-f32.wgsl.expected.ir.msl
index b47b481..b56bf5e 100644
--- a/test/tint/expressions/type_conv/vec3/literal/f16-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec3/literal/f16-f32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread float3 u = float3(1.0f);
+program_source:4:15: error: program scope variable must reside in constant address space
+thread float3 u = float3(1.0f);
+              ^
+
diff --git a/test/tint/expressions/type_conv/vec3/literal/f16-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/literal/f16-i32.wgsl.expected.ir.msl
index 5c2d75f..d496a7d 100644
--- a/test/tint/expressions/type_conv/vec3/literal/f16-i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec3/literal/f16-i32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread int3 u = int3(1);
+program_source:4:13: error: program scope variable must reside in constant address space
+thread int3 u = int3(1);
+            ^
+
diff --git a/test/tint/expressions/type_conv/vec3/literal/f16-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/literal/f16-u32.wgsl.expected.ir.msl
index ac08e95..1a58077 100644
--- a/test/tint/expressions/type_conv/vec3/literal/f16-u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec3/literal/f16-u32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread uint3 u = uint3(1u);
+program_source:4:14: error: program scope variable must reside in constant address space
+thread uint3 u = uint3(1u);
+             ^
+
diff --git a/test/tint/expressions/type_conv/vec3/literal/f32-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/literal/f32-bool.wgsl.expected.ir.msl
index 9256549..11124d1 100644
--- a/test/tint/expressions/type_conv/vec3/literal/f32-bool.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec3/literal/f32-bool.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread bool3 u = bool3(true);
+program_source:4:14: error: program scope variable must reside in constant address space
+thread bool3 u = bool3(true);
+             ^
+
diff --git a/test/tint/expressions/type_conv/vec3/literal/f32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/literal/f32-f16.wgsl.expected.ir.msl
index 1fe00b9..8b87f52 100644
--- a/test/tint/expressions/type_conv/vec3/literal/f32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec3/literal/f32-f16.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread half3 u = half3(1.0h);
+program_source:4:14: error: program scope variable must reside in constant address space
+thread half3 u = half3(1.0h);
+             ^
+
diff --git a/test/tint/expressions/type_conv/vec3/literal/f32-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/literal/f32-i32.wgsl.expected.ir.msl
index 5c2d75f..d496a7d 100644
--- a/test/tint/expressions/type_conv/vec3/literal/f32-i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec3/literal/f32-i32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread int3 u = int3(1);
+program_source:4:13: error: program scope variable must reside in constant address space
+thread int3 u = int3(1);
+            ^
+
diff --git a/test/tint/expressions/type_conv/vec3/literal/f32-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/literal/f32-u32.wgsl.expected.ir.msl
index ac08e95..1a58077 100644
--- a/test/tint/expressions/type_conv/vec3/literal/f32-u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec3/literal/f32-u32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread uint3 u = uint3(1u);
+program_source:4:14: error: program scope variable must reside in constant address space
+thread uint3 u = uint3(1u);
+             ^
+
diff --git a/test/tint/expressions/type_conv/vec3/literal/i32-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/literal/i32-bool.wgsl.expected.ir.msl
index 9256549..11124d1 100644
--- a/test/tint/expressions/type_conv/vec3/literal/i32-bool.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec3/literal/i32-bool.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread bool3 u = bool3(true);
+program_source:4:14: error: program scope variable must reside in constant address space
+thread bool3 u = bool3(true);
+             ^
+
diff --git a/test/tint/expressions/type_conv/vec3/literal/i32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/literal/i32-f16.wgsl.expected.ir.msl
index 1fe00b9..8b87f52 100644
--- a/test/tint/expressions/type_conv/vec3/literal/i32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec3/literal/i32-f16.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread half3 u = half3(1.0h);
+program_source:4:14: error: program scope variable must reside in constant address space
+thread half3 u = half3(1.0h);
+             ^
+
diff --git a/test/tint/expressions/type_conv/vec3/literal/i32-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/literal/i32-f32.wgsl.expected.ir.msl
index b47b481..b56bf5e 100644
--- a/test/tint/expressions/type_conv/vec3/literal/i32-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec3/literal/i32-f32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread float3 u = float3(1.0f);
+program_source:4:15: error: program scope variable must reside in constant address space
+thread float3 u = float3(1.0f);
+              ^
+
diff --git a/test/tint/expressions/type_conv/vec3/literal/i32-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/literal/i32-u32.wgsl.expected.ir.msl
index ac08e95..1a58077 100644
--- a/test/tint/expressions/type_conv/vec3/literal/i32-u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec3/literal/i32-u32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread uint3 u = uint3(1u);
+program_source:4:14: error: program scope variable must reside in constant address space
+thread uint3 u = uint3(1u);
+             ^
+
diff --git a/test/tint/expressions/type_conv/vec3/literal/u32-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/literal/u32-bool.wgsl.expected.ir.msl
index 9256549..11124d1 100644
--- a/test/tint/expressions/type_conv/vec3/literal/u32-bool.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec3/literal/u32-bool.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread bool3 u = bool3(true);
+program_source:4:14: error: program scope variable must reside in constant address space
+thread bool3 u = bool3(true);
+             ^
+
diff --git a/test/tint/expressions/type_conv/vec3/literal/u32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/literal/u32-f16.wgsl.expected.ir.msl
index 1fe00b9..8b87f52 100644
--- a/test/tint/expressions/type_conv/vec3/literal/u32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec3/literal/u32-f16.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread half3 u = half3(1.0h);
+program_source:4:14: error: program scope variable must reside in constant address space
+thread half3 u = half3(1.0h);
+             ^
+
diff --git a/test/tint/expressions/type_conv/vec3/literal/u32-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/literal/u32-f32.wgsl.expected.ir.msl
index b47b481..b56bf5e 100644
--- a/test/tint/expressions/type_conv/vec3/literal/u32-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec3/literal/u32-f32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread float3 u = float3(1.0f);
+program_source:4:15: error: program scope variable must reside in constant address space
+thread float3 u = float3(1.0f);
+              ^
+
diff --git a/test/tint/expressions/type_conv/vec3/literal/u32-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/literal/u32-i32.wgsl.expected.ir.msl
index 5c2d75f..d496a7d 100644
--- a/test/tint/expressions/type_conv/vec3/literal/u32-i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec3/literal/u32-i32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread int3 u = int3(1);
+program_source:4:13: error: program scope variable must reside in constant address space
+thread int3 u = int3(1);
+            ^
+
diff --git a/test/tint/expressions/type_conv/vec3/var/bool-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/var/bool-f16.wgsl.expected.ir.msl
index 47c8fbc..d64b875 100644
--- a/test/tint/expressions/type_conv/vec3/var/bool-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec3/var/bool-f16.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool3 u = bool3(true);
+void f() {
+  half3 const v = half3(u);
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread bool3 u = bool3(true);
+             ^
+program_source:6:15: warning: unused variable 'v' [-Wunused-variable]
+  half3 const v = half3(u);
+              ^
+
diff --git a/test/tint/expressions/type_conv/vec3/var/bool-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/var/bool-f32.wgsl.expected.ir.msl
index 47c8fbc..0c66595 100644
--- a/test/tint/expressions/type_conv/vec3/var/bool-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec3/var/bool-f32.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool3 u = bool3(true);
+void f() {
+  float3 const v = float3(u);
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread bool3 u = bool3(true);
+             ^
+program_source:6:16: warning: unused variable 'v' [-Wunused-variable]
+  float3 const v = float3(u);
+               ^
+
diff --git a/test/tint/expressions/type_conv/vec3/var/bool-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/var/bool-i32.wgsl.expected.ir.msl
index 47c8fbc..54dc6c7 100644
--- a/test/tint/expressions/type_conv/vec3/var/bool-i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec3/var/bool-i32.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool3 u = bool3(true);
+void f() {
+  int3 const v = int3(u);
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread bool3 u = bool3(true);
+             ^
+program_source:6:14: warning: unused variable 'v' [-Wunused-variable]
+  int3 const v = int3(u);
+             ^
+
diff --git a/test/tint/expressions/type_conv/vec3/var/bool-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/var/bool-u32.wgsl.expected.ir.msl
index 47c8fbc..b9c2e9f 100644
--- a/test/tint/expressions/type_conv/vec3/var/bool-u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec3/var/bool-u32.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool3 u = bool3(true);
+void f() {
+  uint3 const v = uint3(u);
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread bool3 u = bool3(true);
+             ^
+program_source:6:15: warning: unused variable 'v' [-Wunused-variable]
+  uint3 const v = uint3(u);
+              ^
+
diff --git a/test/tint/expressions/type_conv/vec3/var/f16-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/var/f16-bool.wgsl.expected.ir.msl
index 47c8fbc..db580cb 100644
--- a/test/tint/expressions/type_conv/vec3/var/f16-bool.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec3/var/f16-bool.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread half3 u = half3(1.0h);
+void f() {
+  bool3 const v = bool3(u);
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread half3 u = half3(1.0h);
+             ^
+program_source:6:15: warning: unused variable 'v' [-Wunused-variable]
+  bool3 const v = bool3(u);
+              ^
+
diff --git a/test/tint/expressions/type_conv/vec3/var/f16-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/var/f16-f32.wgsl.expected.ir.msl
index 47c8fbc..fa83c74 100644
--- a/test/tint/expressions/type_conv/vec3/var/f16-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec3/var/f16-f32.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread half3 u = half3(1.0h);
+void f() {
+  float3 const v = float3(u);
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread half3 u = half3(1.0h);
+             ^
+program_source:6:16: warning: unused variable 'v' [-Wunused-variable]
+  float3 const v = float3(u);
+               ^
+
diff --git a/test/tint/expressions/type_conv/vec3/var/f16-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/var/f16-i32.wgsl.expected.ir.msl
index 47c8fbc..bdd22f9 100644
--- a/test/tint/expressions/type_conv/vec3/var/f16-i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec3/var/f16-i32.wgsl.expected.ir.msl
@@ -1,9 +1,19 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread half3 u = half3(1.0h);
+void f() {
+  int3 const v = tint_v3f16_to_v3i32(u);
+}
+int3 tint_v3f16_to_v3i32(half3 value) {
+  return select(int3(2147483647), select(int3((-2147483647 - 1)), int3(value), (value >= half3(-65504.0h))), (value <= half3(65504.0h)));
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread half3 u = half3(1.0h);
+             ^
+program_source:6:14: warning: unused variable 'v' [-Wunused-variable]
+  int3 const v = tint_v3f16_to_v3i32(u);
+             ^
+
diff --git a/test/tint/expressions/type_conv/vec3/var/f16-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/var/f16-u32.wgsl.expected.ir.msl
index 47c8fbc..6ef6399 100644
--- a/test/tint/expressions/type_conv/vec3/var/f16-u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec3/var/f16-u32.wgsl.expected.ir.msl
@@ -1,9 +1,19 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread half3 u = half3(1.0h);
+void f() {
+  uint3 const v = tint_v3f16_to_v3u32(u);
+}
+uint3 tint_v3f16_to_v3u32(half3 value) {
+  return select(uint3(4294967295u), select(uint3(0u), uint3(value), (value >= half3(0.0h))), (value <= half3(65504.0h)));
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread half3 u = half3(1.0h);
+             ^
+program_source:6:15: warning: unused variable 'v' [-Wunused-variable]
+  uint3 const v = tint_v3f16_to_v3u32(u);
+              ^
+
diff --git a/test/tint/expressions/type_conv/vec3/var/f32-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/var/f32-bool.wgsl.expected.ir.msl
index 47c8fbc..6e61818 100644
--- a/test/tint/expressions/type_conv/vec3/var/f32-bool.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec3/var/f32-bool.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float3 u = float3(1.0f);
+void f() {
+  bool3 const v = bool3(u);
+}
+program_source:4:15: error: program scope variable must reside in constant address space
+thread float3 u = float3(1.0f);
+              ^
+program_source:6:15: warning: unused variable 'v' [-Wunused-variable]
+  bool3 const v = bool3(u);
+              ^
+
diff --git a/test/tint/expressions/type_conv/vec3/var/f32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/var/f32-f16.wgsl.expected.ir.msl
index 47c8fbc..fce9964 100644
--- a/test/tint/expressions/type_conv/vec3/var/f32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec3/var/f32-f16.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float3 u = float3(1.0f);
+void f() {
+  half3 const v = half3(u);
+}
+program_source:4:15: error: program scope variable must reside in constant address space
+thread float3 u = float3(1.0f);
+              ^
+program_source:6:15: warning: unused variable 'v' [-Wunused-variable]
+  half3 const v = half3(u);
+              ^
+
diff --git a/test/tint/expressions/type_conv/vec3/var/f32-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/var/f32-i32.wgsl.expected.ir.msl
index 47c8fbc..90a82a1 100644
--- a/test/tint/expressions/type_conv/vec3/var/f32-i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec3/var/f32-i32.wgsl.expected.ir.msl
@@ -1,9 +1,19 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float3 u = float3(1.0f);
+void f() {
+  int3 const v = tint_v3f32_to_v3i32(u);
+}
+int3 tint_v3f32_to_v3i32(float3 value) {
+  return select(int3(2147483647), select(int3((-2147483647 - 1)), int3(value), (value >= float3(-2147483648.0f))), (value <= float3(2147483520.0f)));
+}
+program_source:4:15: error: program scope variable must reside in constant address space
+thread float3 u = float3(1.0f);
+              ^
+program_source:6:14: warning: unused variable 'v' [-Wunused-variable]
+  int3 const v = tint_v3f32_to_v3i32(u);
+             ^
+
diff --git a/test/tint/expressions/type_conv/vec3/var/f32-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/var/f32-u32.wgsl.expected.ir.msl
index 47c8fbc..08f0a5f 100644
--- a/test/tint/expressions/type_conv/vec3/var/f32-u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec3/var/f32-u32.wgsl.expected.ir.msl
@@ -1,9 +1,19 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float3 u = float3(1.0f);
+void f() {
+  uint3 const v = tint_v3f32_to_v3u32(u);
+}
+uint3 tint_v3f32_to_v3u32(float3 value) {
+  return select(uint3(4294967295u), select(uint3(0u), uint3(value), (value >= float3(0.0f))), (value <= float3(4294967040.0f)));
+}
+program_source:4:15: error: program scope variable must reside in constant address space
+thread float3 u = float3(1.0f);
+              ^
+program_source:6:15: warning: unused variable 'v' [-Wunused-variable]
+  uint3 const v = tint_v3f32_to_v3u32(u);
+              ^
+
diff --git a/test/tint/expressions/type_conv/vec3/var/i32-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/var/i32-bool.wgsl.expected.ir.msl
index 47c8fbc..75afebc 100644
--- a/test/tint/expressions/type_conv/vec3/var/i32-bool.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec3/var/i32-bool.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread int3 u = int3(1);
+void f() {
+  bool3 const v = bool3(u);
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread int3 u = int3(1);
+            ^
+program_source:6:15: warning: unused variable 'v' [-Wunused-variable]
+  bool3 const v = bool3(u);
+              ^
+
diff --git a/test/tint/expressions/type_conv/vec3/var/i32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/var/i32-f16.wgsl.expected.ir.msl
index 47c8fbc..322ccfe 100644
--- a/test/tint/expressions/type_conv/vec3/var/i32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec3/var/i32-f16.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread int3 u = int3(1);
+void f() {
+  half3 const v = half3(u);
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread int3 u = int3(1);
+            ^
+program_source:6:15: warning: unused variable 'v' [-Wunused-variable]
+  half3 const v = half3(u);
+              ^
+
diff --git a/test/tint/expressions/type_conv/vec3/var/i32-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/var/i32-f32.wgsl.expected.ir.msl
index 47c8fbc..87f86ab 100644
--- a/test/tint/expressions/type_conv/vec3/var/i32-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec3/var/i32-f32.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread int3 u = int3(1);
+void f() {
+  float3 const v = float3(u);
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread int3 u = int3(1);
+            ^
+program_source:6:16: warning: unused variable 'v' [-Wunused-variable]
+  float3 const v = float3(u);
+               ^
+
diff --git a/test/tint/expressions/type_conv/vec3/var/i32-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/var/i32-u32.wgsl.expected.ir.msl
index 47c8fbc..b054a1c 100644
--- a/test/tint/expressions/type_conv/vec3/var/i32-u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec3/var/i32-u32.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread int3 u = int3(1);
+void f() {
+  uint3 const v = uint3(u);
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread int3 u = int3(1);
+            ^
+program_source:6:15: warning: unused variable 'v' [-Wunused-variable]
+  uint3 const v = uint3(u);
+              ^
+
diff --git a/test/tint/expressions/type_conv/vec3/var/u32-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/var/u32-bool.wgsl.expected.ir.msl
index 47c8fbc..f46bf61 100644
--- a/test/tint/expressions/type_conv/vec3/var/u32-bool.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec3/var/u32-bool.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint3 u = uint3(1u);
+void f() {
+  bool3 const v = bool3(u);
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread uint3 u = uint3(1u);
+             ^
+program_source:6:15: warning: unused variable 'v' [-Wunused-variable]
+  bool3 const v = bool3(u);
+              ^
+
diff --git a/test/tint/expressions/type_conv/vec3/var/u32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/var/u32-f16.wgsl.expected.ir.msl
index 47c8fbc..267905c 100644
--- a/test/tint/expressions/type_conv/vec3/var/u32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec3/var/u32-f16.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint3 u = uint3(1u);
+void f() {
+  half3 const v = half3(u);
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread uint3 u = uint3(1u);
+             ^
+program_source:6:15: warning: unused variable 'v' [-Wunused-variable]
+  half3 const v = half3(u);
+              ^
+
diff --git a/test/tint/expressions/type_conv/vec3/var/u32-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/var/u32-f32.wgsl.expected.ir.msl
index 47c8fbc..3991655 100644
--- a/test/tint/expressions/type_conv/vec3/var/u32-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec3/var/u32-f32.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint3 u = uint3(1u);
+void f() {
+  float3 const v = float3(u);
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread uint3 u = uint3(1u);
+             ^
+program_source:6:16: warning: unused variable 'v' [-Wunused-variable]
+  float3 const v = float3(u);
+               ^
+
diff --git a/test/tint/expressions/type_conv/vec3/var/u32-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec3/var/u32-i32.wgsl.expected.ir.msl
index 47c8fbc..0d5302d 100644
--- a/test/tint/expressions/type_conv/vec3/var/u32-i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec3/var/u32-i32.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint3 u = uint3(1u);
+void f() {
+  int3 const v = int3(u);
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread uint3 u = uint3(1u);
+             ^
+program_source:6:14: warning: unused variable 'v' [-Wunused-variable]
+  int3 const v = int3(u);
+             ^
+
diff --git a/test/tint/expressions/type_conv/vec4/function/bool-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/function/bool-f16.wgsl.expected.ir.msl
index efdd3b1..f80ff7a 100644
--- a/test/tint/expressions/type_conv/vec4/function/bool-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec4/function/bool-f16.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool t = false;
+bool4 m() {
+  t = true;
+  return bool4(t);
+}
+void f() {
+  half4 v = half4(m());
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread bool t = false;
+            ^
+program_source:10:9: warning: unused variable 'v' [-Wunused-variable]
+  half4 v = half4(m());
+        ^
+
diff --git a/test/tint/expressions/type_conv/vec4/function/bool-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/function/bool-f32.wgsl.expected.ir.msl
index efdd3b1..2eabe06 100644
--- a/test/tint/expressions/type_conv/vec4/function/bool-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec4/function/bool-f32.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool t = false;
+bool4 m() {
+  t = true;
+  return bool4(t);
+}
+void f() {
+  float4 v = float4(m());
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread bool t = false;
+            ^
+program_source:10:10: warning: unused variable 'v' [-Wunused-variable]
+  float4 v = float4(m());
+         ^
+
diff --git a/test/tint/expressions/type_conv/vec4/function/bool-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/function/bool-i32.wgsl.expected.ir.msl
index efdd3b1..85816d1 100644
--- a/test/tint/expressions/type_conv/vec4/function/bool-i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec4/function/bool-i32.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool t = false;
+bool4 m() {
+  t = true;
+  return bool4(t);
+}
+void f() {
+  int4 v = int4(m());
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread bool t = false;
+            ^
+program_source:10:8: warning: unused variable 'v' [-Wunused-variable]
+  int4 v = int4(m());
+       ^
+
diff --git a/test/tint/expressions/type_conv/vec4/function/bool-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/function/bool-u32.wgsl.expected.ir.msl
index efdd3b1..7635de9 100644
--- a/test/tint/expressions/type_conv/vec4/function/bool-u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec4/function/bool-u32.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool t = false;
+bool4 m() {
+  t = true;
+  return bool4(t);
+}
+void f() {
+  uint4 v = uint4(m());
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread bool t = false;
+            ^
+program_source:10:9: warning: unused variable 'v' [-Wunused-variable]
+  uint4 v = uint4(m());
+        ^
+
diff --git a/test/tint/expressions/type_conv/vec4/function/f16-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/function/f16-bool.wgsl.expected.ir.msl
index efdd3b1..79b149a 100644
--- a/test/tint/expressions/type_conv/vec4/function/f16-bool.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec4/function/f16-bool.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread half t = 0.0h;
+half4 m() {
+  t = 1.0h;
+  return half4(t);
+}
+void f() {
+  bool4 v = bool4(m());
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread half t = 0.0h;
+            ^
+program_source:10:9: warning: unused variable 'v' [-Wunused-variable]
+  bool4 v = bool4(m());
+        ^
+
diff --git a/test/tint/expressions/type_conv/vec4/function/f16-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/function/f16-f32.wgsl.expected.ir.msl
index efdd3b1..21dac4d 100644
--- a/test/tint/expressions/type_conv/vec4/function/f16-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec4/function/f16-f32.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread half t = 0.0h;
+half4 m() {
+  t = 1.0h;
+  return half4(t);
+}
+void f() {
+  float4 v = float4(m());
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread half t = 0.0h;
+            ^
+program_source:10:10: warning: unused variable 'v' [-Wunused-variable]
+  float4 v = float4(m());
+         ^
+
diff --git a/test/tint/expressions/type_conv/vec4/function/f16-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/function/f16-i32.wgsl.expected.ir.msl
index efdd3b1..8b1cd78 100644
--- a/test/tint/expressions/type_conv/vec4/function/f16-i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec4/function/f16-i32.wgsl.expected.ir.msl
@@ -1,9 +1,23 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread half t = 0.0h;
+half4 m() {
+  t = 1.0h;
+  return half4(t);
+}
+void f() {
+  int4 v = tint_v4f16_to_v4i32(m());
+}
+int4 tint_v4f16_to_v4i32(half4 value) {
+  return select(int4(2147483647), select(int4((-2147483647 - 1)), int4(value), (value >= half4(-65504.0h))), (value <= half4(65504.0h)));
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread half t = 0.0h;
+            ^
+program_source:10:12: error: use of undeclared identifier 'tint_v4f16_to_v4i32'
+  int4 v = tint_v4f16_to_v4i32(m());
+           ^
+
diff --git a/test/tint/expressions/type_conv/vec4/function/f16-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/function/f16-u32.wgsl.expected.ir.msl
index efdd3b1..719daff 100644
--- a/test/tint/expressions/type_conv/vec4/function/f16-u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec4/function/f16-u32.wgsl.expected.ir.msl
@@ -1,9 +1,23 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread half t = 0.0h;
+half4 m() {
+  t = 1.0h;
+  return half4(t);
+}
+void f() {
+  uint4 v = tint_v4f16_to_v4u32(m());
+}
+uint4 tint_v4f16_to_v4u32(half4 value) {
+  return select(uint4(4294967295u), select(uint4(0u), uint4(value), (value >= half4(0.0h))), (value <= half4(65504.0h)));
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread half t = 0.0h;
+            ^
+program_source:10:13: error: use of undeclared identifier 'tint_v4f16_to_v4u32'
+  uint4 v = tint_v4f16_to_v4u32(m());
+            ^
+
diff --git a/test/tint/expressions/type_conv/vec4/function/f32-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/function/f32-bool.wgsl.expected.ir.msl
index efdd3b1..d13ad6f 100644
--- a/test/tint/expressions/type_conv/vec4/function/f32-bool.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec4/function/f32-bool.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float t = 0.0f;
+float4 m() {
+  t = 1.0f;
+  return float4(t);
+}
+void f() {
+  bool4 v = bool4(m());
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread float t = 0.0f;
+             ^
+program_source:10:9: warning: unused variable 'v' [-Wunused-variable]
+  bool4 v = bool4(m());
+        ^
+
diff --git a/test/tint/expressions/type_conv/vec4/function/f32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/function/f32-f16.wgsl.expected.ir.msl
index efdd3b1..ede73c8 100644
--- a/test/tint/expressions/type_conv/vec4/function/f32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec4/function/f32-f16.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float t = 0.0f;
+float4 m() {
+  t = 1.0f;
+  return float4(t);
+}
+void f() {
+  half4 v = half4(m());
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread float t = 0.0f;
+             ^
+program_source:10:9: warning: unused variable 'v' [-Wunused-variable]
+  half4 v = half4(m());
+        ^
+
diff --git a/test/tint/expressions/type_conv/vec4/function/f32-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/function/f32-i32.wgsl.expected.ir.msl
index efdd3b1..7b854b5 100644
--- a/test/tint/expressions/type_conv/vec4/function/f32-i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec4/function/f32-i32.wgsl.expected.ir.msl
@@ -1,9 +1,23 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float t = 0.0f;
+float4 m() {
+  t = 1.0f;
+  return float4(t);
+}
+void f() {
+  int4 v = tint_v4f32_to_v4i32(m());
+}
+int4 tint_v4f32_to_v4i32(float4 value) {
+  return select(int4(2147483647), select(int4((-2147483647 - 1)), int4(value), (value >= float4(-2147483648.0f))), (value <= float4(2147483520.0f)));
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread float t = 0.0f;
+             ^
+program_source:10:12: error: use of undeclared identifier 'tint_v4f32_to_v4i32'
+  int4 v = tint_v4f32_to_v4i32(m());
+           ^
+
diff --git a/test/tint/expressions/type_conv/vec4/function/f32-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/function/f32-u32.wgsl.expected.ir.msl
index efdd3b1..6279399 100644
--- a/test/tint/expressions/type_conv/vec4/function/f32-u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec4/function/f32-u32.wgsl.expected.ir.msl
@@ -1,9 +1,23 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float t = 0.0f;
+float4 m() {
+  t = 1.0f;
+  return float4(t);
+}
+void f() {
+  uint4 v = tint_v4f32_to_v4u32(m());
+}
+uint4 tint_v4f32_to_v4u32(float4 value) {
+  return select(uint4(4294967295u), select(uint4(0u), uint4(value), (value >= float4(0.0f))), (value <= float4(4294967040.0f)));
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread float t = 0.0f;
+             ^
+program_source:10:13: error: use of undeclared identifier 'tint_v4f32_to_v4u32'
+  uint4 v = tint_v4f32_to_v4u32(m());
+            ^
+
diff --git a/test/tint/expressions/type_conv/vec4/function/i32-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/function/i32-bool.wgsl.expected.ir.msl
index efdd3b1..ad0f1ac 100644
--- a/test/tint/expressions/type_conv/vec4/function/i32-bool.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec4/function/i32-bool.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread int t = 0;
+int4 m() {
+  t = 1;
+  return int4(t);
+}
+void f() {
+  bool4 v = bool4(m());
+}
+program_source:4:12: error: program scope variable must reside in constant address space
+thread int t = 0;
+           ^
+program_source:10:9: warning: unused variable 'v' [-Wunused-variable]
+  bool4 v = bool4(m());
+        ^
+
diff --git a/test/tint/expressions/type_conv/vec4/function/i32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/function/i32-f16.wgsl.expected.ir.msl
index efdd3b1..055382a 100644
--- a/test/tint/expressions/type_conv/vec4/function/i32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec4/function/i32-f16.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread int t = 0;
+int4 m() {
+  t = 1;
+  return int4(t);
+}
+void f() {
+  half4 v = half4(m());
+}
+program_source:4:12: error: program scope variable must reside in constant address space
+thread int t = 0;
+           ^
+program_source:10:9: warning: unused variable 'v' [-Wunused-variable]
+  half4 v = half4(m());
+        ^
+
diff --git a/test/tint/expressions/type_conv/vec4/function/i32-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/function/i32-f32.wgsl.expected.ir.msl
index efdd3b1..4ea3701 100644
--- a/test/tint/expressions/type_conv/vec4/function/i32-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec4/function/i32-f32.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread int t = 0;
+int4 m() {
+  t = 1;
+  return int4(t);
+}
+void f() {
+  float4 v = float4(m());
+}
+program_source:4:12: error: program scope variable must reside in constant address space
+thread int t = 0;
+           ^
+program_source:10:10: warning: unused variable 'v' [-Wunused-variable]
+  float4 v = float4(m());
+         ^
+
diff --git a/test/tint/expressions/type_conv/vec4/function/i32-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/function/i32-u32.wgsl.expected.ir.msl
index efdd3b1..c930eac 100644
--- a/test/tint/expressions/type_conv/vec4/function/i32-u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec4/function/i32-u32.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread int t = 0;
+int4 m() {
+  t = 1;
+  return int4(t);
+}
+void f() {
+  uint4 v = uint4(m());
+}
+program_source:4:12: error: program scope variable must reside in constant address space
+thread int t = 0;
+           ^
+program_source:10:9: warning: unused variable 'v' [-Wunused-variable]
+  uint4 v = uint4(m());
+        ^
+
diff --git a/test/tint/expressions/type_conv/vec4/function/u32-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/function/u32-bool.wgsl.expected.ir.msl
index efdd3b1..5f41f0f 100644
--- a/test/tint/expressions/type_conv/vec4/function/u32-bool.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec4/function/u32-bool.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint t = 0u;
+uint4 m() {
+  t = 1u;
+  return uint4(t);
+}
+void f() {
+  bool4 v = bool4(m());
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint t = 0u;
+            ^
+program_source:10:9: warning: unused variable 'v' [-Wunused-variable]
+  bool4 v = bool4(m());
+        ^
+
diff --git a/test/tint/expressions/type_conv/vec4/function/u32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/function/u32-f16.wgsl.expected.ir.msl
index efdd3b1..c553f60 100644
--- a/test/tint/expressions/type_conv/vec4/function/u32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec4/function/u32-f16.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint t = 0u;
+uint4 m() {
+  t = 1u;
+  return uint4(t);
+}
+void f() {
+  half4 v = half4(m());
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint t = 0u;
+            ^
+program_source:10:9: warning: unused variable 'v' [-Wunused-variable]
+  half4 v = half4(m());
+        ^
+
diff --git a/test/tint/expressions/type_conv/vec4/function/u32-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/function/u32-f32.wgsl.expected.ir.msl
index efdd3b1..e547733 100644
--- a/test/tint/expressions/type_conv/vec4/function/u32-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec4/function/u32-f32.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint t = 0u;
+uint4 m() {
+  t = 1u;
+  return uint4(t);
+}
+void f() {
+  float4 v = float4(m());
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint t = 0u;
+            ^
+program_source:10:10: warning: unused variable 'v' [-Wunused-variable]
+  float4 v = float4(m());
+         ^
+
diff --git a/test/tint/expressions/type_conv/vec4/function/u32-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/function/u32-i32.wgsl.expected.ir.msl
index efdd3b1..33b2a17 100644
--- a/test/tint/expressions/type_conv/vec4/function/u32-i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec4/function/u32-i32.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint t = 0u;
+uint4 m() {
+  t = 1u;
+  return uint4(t);
+}
+void f() {
+  int4 v = int4(m());
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint t = 0u;
+            ^
+program_source:10:8: warning: unused variable 'v' [-Wunused-variable]
+  int4 v = int4(m());
+       ^
+
diff --git a/test/tint/expressions/type_conv/vec4/literal/bool-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/literal/bool-f16.wgsl.expected.ir.msl
index 7d9d594..d6d554f 100644
--- a/test/tint/expressions/type_conv/vec4/literal/bool-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec4/literal/bool-f16.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread half4 u = half4(1.0h);
+program_source:4:14: error: program scope variable must reside in constant address space
+thread half4 u = half4(1.0h);
+             ^
+
diff --git a/test/tint/expressions/type_conv/vec4/literal/bool-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/literal/bool-f32.wgsl.expected.ir.msl
index a87ee3f..b8efcf6 100644
--- a/test/tint/expressions/type_conv/vec4/literal/bool-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec4/literal/bool-f32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread float4 u = float4(1.0f);
+program_source:4:15: error: program scope variable must reside in constant address space
+thread float4 u = float4(1.0f);
+              ^
+
diff --git a/test/tint/expressions/type_conv/vec4/literal/bool-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/literal/bool-i32.wgsl.expected.ir.msl
index 785cd97..f2de93d 100644
--- a/test/tint/expressions/type_conv/vec4/literal/bool-i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec4/literal/bool-i32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread int4 u = int4(1);
+program_source:4:13: error: program scope variable must reside in constant address space
+thread int4 u = int4(1);
+            ^
+
diff --git a/test/tint/expressions/type_conv/vec4/literal/bool-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/literal/bool-u32.wgsl.expected.ir.msl
index d1e3c40..0dabadb 100644
--- a/test/tint/expressions/type_conv/vec4/literal/bool-u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec4/literal/bool-u32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread uint4 u = uint4(1u);
+program_source:4:14: error: program scope variable must reside in constant address space
+thread uint4 u = uint4(1u);
+             ^
+
diff --git a/test/tint/expressions/type_conv/vec4/literal/f16-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/literal/f16-bool.wgsl.expected.ir.msl
index df7652e..7757036 100644
--- a/test/tint/expressions/type_conv/vec4/literal/f16-bool.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec4/literal/f16-bool.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread bool4 u = bool4(true);
+program_source:4:14: error: program scope variable must reside in constant address space
+thread bool4 u = bool4(true);
+             ^
+
diff --git a/test/tint/expressions/type_conv/vec4/literal/f16-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/literal/f16-f32.wgsl.expected.ir.msl
index a87ee3f..b8efcf6 100644
--- a/test/tint/expressions/type_conv/vec4/literal/f16-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec4/literal/f16-f32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread float4 u = float4(1.0f);
+program_source:4:15: error: program scope variable must reside in constant address space
+thread float4 u = float4(1.0f);
+              ^
+
diff --git a/test/tint/expressions/type_conv/vec4/literal/f16-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/literal/f16-i32.wgsl.expected.ir.msl
index 785cd97..f2de93d 100644
--- a/test/tint/expressions/type_conv/vec4/literal/f16-i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec4/literal/f16-i32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread int4 u = int4(1);
+program_source:4:13: error: program scope variable must reside in constant address space
+thread int4 u = int4(1);
+            ^
+
diff --git a/test/tint/expressions/type_conv/vec4/literal/f16-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/literal/f16-u32.wgsl.expected.ir.msl
index d1e3c40..0dabadb 100644
--- a/test/tint/expressions/type_conv/vec4/literal/f16-u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec4/literal/f16-u32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread uint4 u = uint4(1u);
+program_source:4:14: error: program scope variable must reside in constant address space
+thread uint4 u = uint4(1u);
+             ^
+
diff --git a/test/tint/expressions/type_conv/vec4/literal/f32-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/literal/f32-bool.wgsl.expected.ir.msl
index df7652e..7757036 100644
--- a/test/tint/expressions/type_conv/vec4/literal/f32-bool.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec4/literal/f32-bool.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread bool4 u = bool4(true);
+program_source:4:14: error: program scope variable must reside in constant address space
+thread bool4 u = bool4(true);
+             ^
+
diff --git a/test/tint/expressions/type_conv/vec4/literal/f32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/literal/f32-f16.wgsl.expected.ir.msl
index 7d9d594..d6d554f 100644
--- a/test/tint/expressions/type_conv/vec4/literal/f32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec4/literal/f32-f16.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread half4 u = half4(1.0h);
+program_source:4:14: error: program scope variable must reside in constant address space
+thread half4 u = half4(1.0h);
+             ^
+
diff --git a/test/tint/expressions/type_conv/vec4/literal/f32-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/literal/f32-i32.wgsl.expected.ir.msl
index 785cd97..f2de93d 100644
--- a/test/tint/expressions/type_conv/vec4/literal/f32-i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec4/literal/f32-i32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread int4 u = int4(1);
+program_source:4:13: error: program scope variable must reside in constant address space
+thread int4 u = int4(1);
+            ^
+
diff --git a/test/tint/expressions/type_conv/vec4/literal/f32-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/literal/f32-u32.wgsl.expected.ir.msl
index d1e3c40..0dabadb 100644
--- a/test/tint/expressions/type_conv/vec4/literal/f32-u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec4/literal/f32-u32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread uint4 u = uint4(1u);
+program_source:4:14: error: program scope variable must reside in constant address space
+thread uint4 u = uint4(1u);
+             ^
+
diff --git a/test/tint/expressions/type_conv/vec4/literal/i32-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/literal/i32-bool.wgsl.expected.ir.msl
index df7652e..7757036 100644
--- a/test/tint/expressions/type_conv/vec4/literal/i32-bool.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec4/literal/i32-bool.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread bool4 u = bool4(true);
+program_source:4:14: error: program scope variable must reside in constant address space
+thread bool4 u = bool4(true);
+             ^
+
diff --git a/test/tint/expressions/type_conv/vec4/literal/i32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/literal/i32-f16.wgsl.expected.ir.msl
index 7d9d594..d6d554f 100644
--- a/test/tint/expressions/type_conv/vec4/literal/i32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec4/literal/i32-f16.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread half4 u = half4(1.0h);
+program_source:4:14: error: program scope variable must reside in constant address space
+thread half4 u = half4(1.0h);
+             ^
+
diff --git a/test/tint/expressions/type_conv/vec4/literal/i32-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/literal/i32-f32.wgsl.expected.ir.msl
index a87ee3f..b8efcf6 100644
--- a/test/tint/expressions/type_conv/vec4/literal/i32-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec4/literal/i32-f32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread float4 u = float4(1.0f);
+program_source:4:15: error: program scope variable must reside in constant address space
+thread float4 u = float4(1.0f);
+              ^
+
diff --git a/test/tint/expressions/type_conv/vec4/literal/i32-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/literal/i32-u32.wgsl.expected.ir.msl
index d1e3c40..0dabadb 100644
--- a/test/tint/expressions/type_conv/vec4/literal/i32-u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec4/literal/i32-u32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread uint4 u = uint4(1u);
+program_source:4:14: error: program scope variable must reside in constant address space
+thread uint4 u = uint4(1u);
+             ^
+
diff --git a/test/tint/expressions/type_conv/vec4/literal/u32-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/literal/u32-bool.wgsl.expected.ir.msl
index df7652e..7757036 100644
--- a/test/tint/expressions/type_conv/vec4/literal/u32-bool.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec4/literal/u32-bool.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread bool4 u = bool4(true);
+program_source:4:14: error: program scope variable must reside in constant address space
+thread bool4 u = bool4(true);
+             ^
+
diff --git a/test/tint/expressions/type_conv/vec4/literal/u32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/literal/u32-f16.wgsl.expected.ir.msl
index 7d9d594..d6d554f 100644
--- a/test/tint/expressions/type_conv/vec4/literal/u32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec4/literal/u32-f16.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread half4 u = half4(1.0h);
+program_source:4:14: error: program scope variable must reside in constant address space
+thread half4 u = half4(1.0h);
+             ^
+
diff --git a/test/tint/expressions/type_conv/vec4/literal/u32-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/literal/u32-f32.wgsl.expected.ir.msl
index a87ee3f..b8efcf6 100644
--- a/test/tint/expressions/type_conv/vec4/literal/u32-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec4/literal/u32-f32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread float4 u = float4(1.0f);
+program_source:4:15: error: program scope variable must reside in constant address space
+thread float4 u = float4(1.0f);
+              ^
+
diff --git a/test/tint/expressions/type_conv/vec4/literal/u32-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/literal/u32-i32.wgsl.expected.ir.msl
index 785cd97..f2de93d 100644
--- a/test/tint/expressions/type_conv/vec4/literal/u32-i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec4/literal/u32-i32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread int4 u = int4(1);
+program_source:4:13: error: program scope variable must reside in constant address space
+thread int4 u = int4(1);
+            ^
+
diff --git a/test/tint/expressions/type_conv/vec4/var/bool-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/var/bool-f16.wgsl.expected.ir.msl
index 47c8fbc..80e5be0 100644
--- a/test/tint/expressions/type_conv/vec4/var/bool-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec4/var/bool-f16.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool4 u = bool4(true);
+void f() {
+  half4 const v = half4(u);
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread bool4 u = bool4(true);
+             ^
+program_source:6:15: warning: unused variable 'v' [-Wunused-variable]
+  half4 const v = half4(u);
+              ^
+
diff --git a/test/tint/expressions/type_conv/vec4/var/bool-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/var/bool-f32.wgsl.expected.ir.msl
index 47c8fbc..2835fc0f 100644
--- a/test/tint/expressions/type_conv/vec4/var/bool-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec4/var/bool-f32.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool4 u = bool4(true);
+void f() {
+  float4 const v = float4(u);
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread bool4 u = bool4(true);
+             ^
+program_source:6:16: warning: unused variable 'v' [-Wunused-variable]
+  float4 const v = float4(u);
+               ^
+
diff --git a/test/tint/expressions/type_conv/vec4/var/bool-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/var/bool-i32.wgsl.expected.ir.msl
index 47c8fbc..0b2308e 100644
--- a/test/tint/expressions/type_conv/vec4/var/bool-i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec4/var/bool-i32.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool4 u = bool4(true);
+void f() {
+  int4 const v = int4(u);
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread bool4 u = bool4(true);
+             ^
+program_source:6:14: warning: unused variable 'v' [-Wunused-variable]
+  int4 const v = int4(u);
+             ^
+
diff --git a/test/tint/expressions/type_conv/vec4/var/bool-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/var/bool-u32.wgsl.expected.ir.msl
index 47c8fbc..209ce75 100644
--- a/test/tint/expressions/type_conv/vec4/var/bool-u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec4/var/bool-u32.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool4 u = bool4(true);
+void f() {
+  uint4 const v = uint4(u);
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread bool4 u = bool4(true);
+             ^
+program_source:6:15: warning: unused variable 'v' [-Wunused-variable]
+  uint4 const v = uint4(u);
+              ^
+
diff --git a/test/tint/expressions/type_conv/vec4/var/f16-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/var/f16-bool.wgsl.expected.ir.msl
index 47c8fbc..6b7ba30 100644
--- a/test/tint/expressions/type_conv/vec4/var/f16-bool.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec4/var/f16-bool.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread half4 u = half4(1.0h);
+void f() {
+  bool4 const v = bool4(u);
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread half4 u = half4(1.0h);
+             ^
+program_source:6:15: warning: unused variable 'v' [-Wunused-variable]
+  bool4 const v = bool4(u);
+              ^
+
diff --git a/test/tint/expressions/type_conv/vec4/var/f16-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/var/f16-f32.wgsl.expected.ir.msl
index 47c8fbc..3a602fd 100644
--- a/test/tint/expressions/type_conv/vec4/var/f16-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec4/var/f16-f32.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread half4 u = half4(1.0h);
+void f() {
+  float4 const v = float4(u);
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread half4 u = half4(1.0h);
+             ^
+program_source:6:16: warning: unused variable 'v' [-Wunused-variable]
+  float4 const v = float4(u);
+               ^
+
diff --git a/test/tint/expressions/type_conv/vec4/var/f16-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/var/f16-i32.wgsl.expected.ir.msl
index 47c8fbc..06fec5e 100644
--- a/test/tint/expressions/type_conv/vec4/var/f16-i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec4/var/f16-i32.wgsl.expected.ir.msl
@@ -1,9 +1,19 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread half4 u = half4(1.0h);
+void f() {
+  int4 const v = tint_v4f16_to_v4i32(u);
+}
+int4 tint_v4f16_to_v4i32(half4 value) {
+  return select(int4(2147483647), select(int4((-2147483647 - 1)), int4(value), (value >= half4(-65504.0h))), (value <= half4(65504.0h)));
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread half4 u = half4(1.0h);
+             ^
+program_source:6:14: warning: unused variable 'v' [-Wunused-variable]
+  int4 const v = tint_v4f16_to_v4i32(u);
+             ^
+
diff --git a/test/tint/expressions/type_conv/vec4/var/f16-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/var/f16-u32.wgsl.expected.ir.msl
index 47c8fbc..4e96090 100644
--- a/test/tint/expressions/type_conv/vec4/var/f16-u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec4/var/f16-u32.wgsl.expected.ir.msl
@@ -1,9 +1,19 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread half4 u = half4(1.0h);
+void f() {
+  uint4 const v = tint_v4f16_to_v4u32(u);
+}
+uint4 tint_v4f16_to_v4u32(half4 value) {
+  return select(uint4(4294967295u), select(uint4(0u), uint4(value), (value >= half4(0.0h))), (value <= half4(65504.0h)));
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread half4 u = half4(1.0h);
+             ^
+program_source:6:15: warning: unused variable 'v' [-Wunused-variable]
+  uint4 const v = tint_v4f16_to_v4u32(u);
+              ^
+
diff --git a/test/tint/expressions/type_conv/vec4/var/f32-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/var/f32-bool.wgsl.expected.ir.msl
index 47c8fbc..cd08f418 100644
--- a/test/tint/expressions/type_conv/vec4/var/f32-bool.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec4/var/f32-bool.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float4 u = float4(1.0f);
+void f() {
+  bool4 const v = bool4(u);
+}
+program_source:4:15: error: program scope variable must reside in constant address space
+thread float4 u = float4(1.0f);
+              ^
+program_source:6:15: warning: unused variable 'v' [-Wunused-variable]
+  bool4 const v = bool4(u);
+              ^
+
diff --git a/test/tint/expressions/type_conv/vec4/var/f32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/var/f32-f16.wgsl.expected.ir.msl
index 47c8fbc..ff7720d 100644
--- a/test/tint/expressions/type_conv/vec4/var/f32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec4/var/f32-f16.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float4 u = float4(1.0f);
+void f() {
+  half4 const v = half4(u);
+}
+program_source:4:15: error: program scope variable must reside in constant address space
+thread float4 u = float4(1.0f);
+              ^
+program_source:6:15: warning: unused variable 'v' [-Wunused-variable]
+  half4 const v = half4(u);
+              ^
+
diff --git a/test/tint/expressions/type_conv/vec4/var/f32-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/var/f32-i32.wgsl.expected.ir.msl
index 47c8fbc..03dd661 100644
--- a/test/tint/expressions/type_conv/vec4/var/f32-i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec4/var/f32-i32.wgsl.expected.ir.msl
@@ -1,9 +1,19 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float4 u = float4(1.0f);
+void f() {
+  int4 const v = tint_v4f32_to_v4i32(u);
+}
+int4 tint_v4f32_to_v4i32(float4 value) {
+  return select(int4(2147483647), select(int4((-2147483647 - 1)), int4(value), (value >= float4(-2147483648.0f))), (value <= float4(2147483520.0f)));
+}
+program_source:4:15: error: program scope variable must reside in constant address space
+thread float4 u = float4(1.0f);
+              ^
+program_source:6:14: warning: unused variable 'v' [-Wunused-variable]
+  int4 const v = tint_v4f32_to_v4i32(u);
+             ^
+
diff --git a/test/tint/expressions/type_conv/vec4/var/f32-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/var/f32-u32.wgsl.expected.ir.msl
index 47c8fbc..bbdd99a 100644
--- a/test/tint/expressions/type_conv/vec4/var/f32-u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec4/var/f32-u32.wgsl.expected.ir.msl
@@ -1,9 +1,19 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float4 u = float4(1.0f);
+void f() {
+  uint4 const v = tint_v4f32_to_v4u32(u);
+}
+uint4 tint_v4f32_to_v4u32(float4 value) {
+  return select(uint4(4294967295u), select(uint4(0u), uint4(value), (value >= float4(0.0f))), (value <= float4(4294967040.0f)));
+}
+program_source:4:15: error: program scope variable must reside in constant address space
+thread float4 u = float4(1.0f);
+              ^
+program_source:6:15: warning: unused variable 'v' [-Wunused-variable]
+  uint4 const v = tint_v4f32_to_v4u32(u);
+              ^
+
diff --git a/test/tint/expressions/type_conv/vec4/var/i32-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/var/i32-bool.wgsl.expected.ir.msl
index 47c8fbc..b7ad5c7 100644
--- a/test/tint/expressions/type_conv/vec4/var/i32-bool.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec4/var/i32-bool.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread int4 u = int4(1);
+void f() {
+  bool4 const v = bool4(u);
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread int4 u = int4(1);
+            ^
+program_source:6:15: warning: unused variable 'v' [-Wunused-variable]
+  bool4 const v = bool4(u);
+              ^
+
diff --git a/test/tint/expressions/type_conv/vec4/var/i32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/var/i32-f16.wgsl.expected.ir.msl
index 47c8fbc..eab4e3c 100644
--- a/test/tint/expressions/type_conv/vec4/var/i32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec4/var/i32-f16.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread int4 u = int4(1);
+void f() {
+  half4 const v = half4(u);
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread int4 u = int4(1);
+            ^
+program_source:6:15: warning: unused variable 'v' [-Wunused-variable]
+  half4 const v = half4(u);
+              ^
+
diff --git a/test/tint/expressions/type_conv/vec4/var/i32-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/var/i32-f32.wgsl.expected.ir.msl
index 47c8fbc..7f6383b 100644
--- a/test/tint/expressions/type_conv/vec4/var/i32-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec4/var/i32-f32.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread int4 u = int4(1);
+void f() {
+  float4 const v = float4(u);
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread int4 u = int4(1);
+            ^
+program_source:6:16: warning: unused variable 'v' [-Wunused-variable]
+  float4 const v = float4(u);
+               ^
+
diff --git a/test/tint/expressions/type_conv/vec4/var/i32-u32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/var/i32-u32.wgsl.expected.ir.msl
index 47c8fbc..8fabc17 100644
--- a/test/tint/expressions/type_conv/vec4/var/i32-u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec4/var/i32-u32.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread int4 u = int4(1);
+void f() {
+  uint4 const v = uint4(u);
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread int4 u = int4(1);
+            ^
+program_source:6:15: warning: unused variable 'v' [-Wunused-variable]
+  uint4 const v = uint4(u);
+              ^
+
diff --git a/test/tint/expressions/type_conv/vec4/var/u32-bool.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/var/u32-bool.wgsl.expected.ir.msl
index 47c8fbc..64fd31c 100644
--- a/test/tint/expressions/type_conv/vec4/var/u32-bool.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec4/var/u32-bool.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint4 u = uint4(1u);
+void f() {
+  bool4 const v = bool4(u);
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread uint4 u = uint4(1u);
+             ^
+program_source:6:15: warning: unused variable 'v' [-Wunused-variable]
+  bool4 const v = bool4(u);
+              ^
+
diff --git a/test/tint/expressions/type_conv/vec4/var/u32-f16.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/var/u32-f16.wgsl.expected.ir.msl
index 47c8fbc..740a71e 100644
--- a/test/tint/expressions/type_conv/vec4/var/u32-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec4/var/u32-f16.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint4 u = uint4(1u);
+void f() {
+  half4 const v = half4(u);
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread uint4 u = uint4(1u);
+             ^
+program_source:6:15: warning: unused variable 'v' [-Wunused-variable]
+  half4 const v = half4(u);
+              ^
+
diff --git a/test/tint/expressions/type_conv/vec4/var/u32-f32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/var/u32-f32.wgsl.expected.ir.msl
index 47c8fbc..739a9f3 100644
--- a/test/tint/expressions/type_conv/vec4/var/u32-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec4/var/u32-f32.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint4 u = uint4(1u);
+void f() {
+  float4 const v = float4(u);
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread uint4 u = uint4(1u);
+             ^
+program_source:6:16: warning: unused variable 'v' [-Wunused-variable]
+  float4 const v = float4(u);
+               ^
+
diff --git a/test/tint/expressions/type_conv/vec4/var/u32-i32.wgsl.expected.ir.msl b/test/tint/expressions/type_conv/vec4/var/u32-i32.wgsl.expected.ir.msl
index 47c8fbc..bec07b0 100644
--- a/test/tint/expressions/type_conv/vec4/var/u32-i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_conv/vec4/var/u32-i32.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint4 u = uint4(1u);
+void f() {
+  int4 const v = int4(u);
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread uint4 u = uint4(1u);
+             ^
+program_source:6:14: warning: unused variable 'v' [-Wunused-variable]
+  int4 const v = int4(u);
+             ^
+
diff --git a/test/tint/expressions/type_ctor/array/explicit/abstract.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/array/explicit/abstract.wgsl.expected.ir.msl
index a9a8928..c81ca4f 100644
--- a/test/tint/expressions/type_ctor/array/explicit/abstract.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/array/explicit/abstract.wgsl.expected.ir.msl
@@ -19,3 +19,10 @@
 void f() {
   tint_array<float, 2> v = arr;
 }
+program_source:16:29: error: program scope variable must reside in constant address space
+thread tint_array<float, 2> arr = tint_array<float, 2>{1.0f, 2.0f};
+                            ^
+program_source:18:24: warning: unused variable 'v' [-Wunused-variable]
+  tint_array<float, 2> v = arr;
+                       ^
+
diff --git a/test/tint/expressions/type_ctor/array/explicit/array/abstract.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/array/explicit/array/abstract.wgsl.expected.ir.msl
index 308730b..b447ff1 100644
--- a/test/tint/expressions/type_ctor/array/explicit/array/abstract.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/array/explicit/array/abstract.wgsl.expected.ir.msl
@@ -19,3 +19,10 @@
 void f() {
   tint_array<tint_array<float, 2>, 2> v = arr;
 }
+program_source:16:44: error: program scope variable must reside in constant address space
+thread tint_array<tint_array<float, 2>, 2> arr = tint_array<tint_array<float, 2>, 2>{tint_array<float, 2>{1.0f, 2.0f}, tint_array<float, 2>{3.0f, 4.0f}};
+                                           ^
+program_source:18:39: warning: unused variable 'v' [-Wunused-variable]
+  tint_array<tint_array<float, 2>, 2> v = arr;
+                                      ^
+
diff --git a/test/tint/expressions/type_ctor/array/explicit/array/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/array/explicit/array/f32.wgsl.expected.ir.msl
index 308730b..b447ff1 100644
--- a/test/tint/expressions/type_ctor/array/explicit/array/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/array/explicit/array/f32.wgsl.expected.ir.msl
@@ -19,3 +19,10 @@
 void f() {
   tint_array<tint_array<float, 2>, 2> v = arr;
 }
+program_source:16:44: error: program scope variable must reside in constant address space
+thread tint_array<tint_array<float, 2>, 2> arr = tint_array<tint_array<float, 2>, 2>{tint_array<float, 2>{1.0f, 2.0f}, tint_array<float, 2>{3.0f, 4.0f}};
+                                           ^
+program_source:18:39: warning: unused variable 'v' [-Wunused-variable]
+  tint_array<tint_array<float, 2>, 2> v = arr;
+                                      ^
+
diff --git a/test/tint/expressions/type_ctor/array/explicit/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/array/explicit/f32.wgsl.expected.ir.msl
index a9a8928..c81ca4f 100644
--- a/test/tint/expressions/type_ctor/array/explicit/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/array/explicit/f32.wgsl.expected.ir.msl
@@ -19,3 +19,10 @@
 void f() {
   tint_array<float, 2> v = arr;
 }
+program_source:16:29: error: program scope variable must reside in constant address space
+thread tint_array<float, 2> arr = tint_array<float, 2>{1.0f, 2.0f};
+                            ^
+program_source:18:24: warning: unused variable 'v' [-Wunused-variable]
+  tint_array<float, 2> v = arr;
+                       ^
+
diff --git a/test/tint/expressions/type_ctor/array/explicit/i32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/array/explicit/i32.wgsl.expected.ir.msl
index ff91c2d..74ea049 100644
--- a/test/tint/expressions/type_ctor/array/explicit/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/array/explicit/i32.wgsl.expected.ir.msl
@@ -19,3 +19,10 @@
 void f() {
   tint_array<int, 2> v = arr;
 }
+program_source:16:27: error: program scope variable must reside in constant address space
+thread tint_array<int, 2> arr = tint_array<int, 2>{1, 2};
+                          ^
+program_source:18:22: warning: unused variable 'v' [-Wunused-variable]
+  tint_array<int, 2> v = arr;
+                     ^
+
diff --git a/test/tint/expressions/type_ctor/array/explicit/mat2x2/abstract.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/array/explicit/mat2x2/abstract.wgsl.expected.ir.msl
index eebeaad..2e3b058 100644
--- a/test/tint/expressions/type_ctor/array/explicit/mat2x2/abstract.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/array/explicit/mat2x2/abstract.wgsl.expected.ir.msl
@@ -19,3 +19,7 @@
 void f() {
   tint_array<float2x2, 2> v = arr;
 }
+program_source:16:32: error: program scope variable must reside in constant address space
+thread tint_array<float2x2, 2> arr = tint_array<float2x2, 2>{float2x2(float2(1.0f, 2.0f), float2(3.0f, 4.0f)), float2x2(float2(5.0f, 6.0f), float2(7.0f, 8.0f))};
+                               ^
+
diff --git a/test/tint/expressions/type_ctor/array/explicit/mat2x2/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/array/explicit/mat2x2/f32.wgsl.expected.ir.msl
index eebeaad..2e3b058 100644
--- a/test/tint/expressions/type_ctor/array/explicit/mat2x2/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/array/explicit/mat2x2/f32.wgsl.expected.ir.msl
@@ -19,3 +19,7 @@
 void f() {
   tint_array<float2x2, 2> v = arr;
 }
+program_source:16:32: error: program scope variable must reside in constant address space
+thread tint_array<float2x2, 2> arr = tint_array<float2x2, 2>{float2x2(float2(1.0f, 2.0f), float2(3.0f, 4.0f)), float2x2(float2(5.0f, 6.0f), float2(7.0f, 8.0f))};
+                               ^
+
diff --git a/test/tint/expressions/type_ctor/array/explicit/u32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/array/explicit/u32.wgsl.expected.ir.msl
index 7c73df8..16cfda7 100644
--- a/test/tint/expressions/type_ctor/array/explicit/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/array/explicit/u32.wgsl.expected.ir.msl
@@ -19,3 +19,10 @@
 void f() {
   tint_array<uint, 2> v = arr;
 }
+program_source:16:28: error: program scope variable must reside in constant address space
+thread tint_array<uint, 2> arr = tint_array<uint, 2>{1u, 2u};
+                           ^
+program_source:18:23: warning: unused variable 'v' [-Wunused-variable]
+  tint_array<uint, 2> v = arr;
+                      ^
+
diff --git a/test/tint/expressions/type_ctor/array/explicit/vec2/abstract.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/array/explicit/vec2/abstract.wgsl.expected.ir.msl
index fe1c892..c97df58 100644
--- a/test/tint/expressions/type_ctor/array/explicit/vec2/abstract.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/array/explicit/vec2/abstract.wgsl.expected.ir.msl
@@ -19,3 +19,10 @@
 void f() {
   tint_array<float2, 2> v = arr;
 }
+program_source:16:30: error: program scope variable must reside in constant address space
+thread tint_array<float2, 2> arr = tint_array<float2, 2>{float2(1.0f), float2(2.0f)};
+                             ^
+program_source:18:25: warning: unused variable 'v' [-Wunused-variable]
+  tint_array<float2, 2> v = arr;
+                        ^
+
diff --git a/test/tint/expressions/type_ctor/array/explicit/vec2/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/array/explicit/vec2/f32.wgsl.expected.ir.msl
index fe1c892..c97df58 100644
--- a/test/tint/expressions/type_ctor/array/explicit/vec2/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/array/explicit/vec2/f32.wgsl.expected.ir.msl
@@ -19,3 +19,10 @@
 void f() {
   tint_array<float2, 2> v = arr;
 }
+program_source:16:30: error: program scope variable must reside in constant address space
+thread tint_array<float2, 2> arr = tint_array<float2, 2>{float2(1.0f), float2(2.0f)};
+                             ^
+program_source:18:25: warning: unused variable 'v' [-Wunused-variable]
+  tint_array<float2, 2> v = arr;
+                        ^
+
diff --git a/test/tint/expressions/type_ctor/array/explicit/vec2/i32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/array/explicit/vec2/i32.wgsl.expected.ir.msl
index 44f2746..a679881 100644
--- a/test/tint/expressions/type_ctor/array/explicit/vec2/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/array/explicit/vec2/i32.wgsl.expected.ir.msl
@@ -19,3 +19,10 @@
 void f() {
   tint_array<int2, 2> v = arr;
 }
+program_source:16:28: error: program scope variable must reside in constant address space
+thread tint_array<int2, 2> arr = tint_array<int2, 2>{int2(1), int2(2)};
+                           ^
+program_source:18:23: warning: unused variable 'v' [-Wunused-variable]
+  tint_array<int2, 2> v = arr;
+                      ^
+
diff --git a/test/tint/expressions/type_ctor/array/explicit/vec2/u32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/array/explicit/vec2/u32.wgsl.expected.ir.msl
index e7de8f2..fc73b45 100644
--- a/test/tint/expressions/type_ctor/array/explicit/vec2/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/array/explicit/vec2/u32.wgsl.expected.ir.msl
@@ -19,3 +19,10 @@
 void f() {
   tint_array<uint2, 2> v = arr;
 }
+program_source:16:29: error: program scope variable must reside in constant address space
+thread tint_array<uint2, 2> arr = tint_array<uint2, 2>{uint2(1u), uint2(2u)};
+                            ^
+program_source:18:24: warning: unused variable 'v' [-Wunused-variable]
+  tint_array<uint2, 2> v = arr;
+                       ^
+
diff --git a/test/tint/expressions/type_ctor/array/inferred/abstract.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/array/inferred/abstract.wgsl.expected.ir.msl
index ff91c2d..74ea049 100644
--- a/test/tint/expressions/type_ctor/array/inferred/abstract.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/array/inferred/abstract.wgsl.expected.ir.msl
@@ -19,3 +19,10 @@
 void f() {
   tint_array<int, 2> v = arr;
 }
+program_source:16:27: error: program scope variable must reside in constant address space
+thread tint_array<int, 2> arr = tint_array<int, 2>{1, 2};
+                          ^
+program_source:18:22: warning: unused variable 'v' [-Wunused-variable]
+  tint_array<int, 2> v = arr;
+                     ^
+
diff --git a/test/tint/expressions/type_ctor/array/inferred/array/abstract.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/array/inferred/array/abstract.wgsl.expected.ir.msl
index 6373c40..1fac236 100644
--- a/test/tint/expressions/type_ctor/array/inferred/array/abstract.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/array/inferred/array/abstract.wgsl.expected.ir.msl
@@ -19,3 +19,10 @@
 void f() {
   tint_array<tint_array<int, 2>, 2> v = arr;
 }
+program_source:16:42: error: program scope variable must reside in constant address space
+thread tint_array<tint_array<int, 2>, 2> arr = tint_array<tint_array<int, 2>, 2>{tint_array<int, 2>{1, 2}, tint_array<int, 2>{3, 4}};
+                                         ^
+program_source:18:37: warning: unused variable 'v' [-Wunused-variable]
+  tint_array<tint_array<int, 2>, 2> v = arr;
+                                    ^
+
diff --git a/test/tint/expressions/type_ctor/array/inferred/array/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/array/inferred/array/f32.wgsl.expected.ir.msl
index 308730b..b447ff1 100644
--- a/test/tint/expressions/type_ctor/array/inferred/array/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/array/inferred/array/f32.wgsl.expected.ir.msl
@@ -19,3 +19,10 @@
 void f() {
   tint_array<tint_array<float, 2>, 2> v = arr;
 }
+program_source:16:44: error: program scope variable must reside in constant address space
+thread tint_array<tint_array<float, 2>, 2> arr = tint_array<tint_array<float, 2>, 2>{tint_array<float, 2>{1.0f, 2.0f}, tint_array<float, 2>{3.0f, 4.0f}};
+                                           ^
+program_source:18:39: warning: unused variable 'v' [-Wunused-variable]
+  tint_array<tint_array<float, 2>, 2> v = arr;
+                                      ^
+
diff --git a/test/tint/expressions/type_ctor/array/inferred/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/array/inferred/f32.wgsl.expected.ir.msl
index a9a8928..c81ca4f 100644
--- a/test/tint/expressions/type_ctor/array/inferred/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/array/inferred/f32.wgsl.expected.ir.msl
@@ -19,3 +19,10 @@
 void f() {
   tint_array<float, 2> v = arr;
 }
+program_source:16:29: error: program scope variable must reside in constant address space
+thread tint_array<float, 2> arr = tint_array<float, 2>{1.0f, 2.0f};
+                            ^
+program_source:18:24: warning: unused variable 'v' [-Wunused-variable]
+  tint_array<float, 2> v = arr;
+                       ^
+
diff --git a/test/tint/expressions/type_ctor/array/inferred/i32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/array/inferred/i32.wgsl.expected.ir.msl
index ff91c2d..74ea049 100644
--- a/test/tint/expressions/type_ctor/array/inferred/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/array/inferred/i32.wgsl.expected.ir.msl
@@ -19,3 +19,10 @@
 void f() {
   tint_array<int, 2> v = arr;
 }
+program_source:16:27: error: program scope variable must reside in constant address space
+thread tint_array<int, 2> arr = tint_array<int, 2>{1, 2};
+                          ^
+program_source:18:22: warning: unused variable 'v' [-Wunused-variable]
+  tint_array<int, 2> v = arr;
+                     ^
+
diff --git a/test/tint/expressions/type_ctor/array/inferred/mat2x2/abstract.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/array/inferred/mat2x2/abstract.wgsl.expected.ir.msl
index eebeaad..2e3b058 100644
--- a/test/tint/expressions/type_ctor/array/inferred/mat2x2/abstract.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/array/inferred/mat2x2/abstract.wgsl.expected.ir.msl
@@ -19,3 +19,7 @@
 void f() {
   tint_array<float2x2, 2> v = arr;
 }
+program_source:16:32: error: program scope variable must reside in constant address space
+thread tint_array<float2x2, 2> arr = tint_array<float2x2, 2>{float2x2(float2(1.0f, 2.0f), float2(3.0f, 4.0f)), float2x2(float2(5.0f, 6.0f), float2(7.0f, 8.0f))};
+                               ^
+
diff --git a/test/tint/expressions/type_ctor/array/inferred/mat2x2/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/array/inferred/mat2x2/f32.wgsl.expected.ir.msl
index eebeaad..2e3b058 100644
--- a/test/tint/expressions/type_ctor/array/inferred/mat2x2/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/array/inferred/mat2x2/f32.wgsl.expected.ir.msl
@@ -19,3 +19,7 @@
 void f() {
   tint_array<float2x2, 2> v = arr;
 }
+program_source:16:32: error: program scope variable must reside in constant address space
+thread tint_array<float2x2, 2> arr = tint_array<float2x2, 2>{float2x2(float2(1.0f, 2.0f), float2(3.0f, 4.0f)), float2x2(float2(5.0f, 6.0f), float2(7.0f, 8.0f))};
+                               ^
+
diff --git a/test/tint/expressions/type_ctor/array/inferred/u32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/array/inferred/u32.wgsl.expected.ir.msl
index 7c73df8..16cfda7 100644
--- a/test/tint/expressions/type_ctor/array/inferred/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/array/inferred/u32.wgsl.expected.ir.msl
@@ -19,3 +19,10 @@
 void f() {
   tint_array<uint, 2> v = arr;
 }
+program_source:16:28: error: program scope variable must reside in constant address space
+thread tint_array<uint, 2> arr = tint_array<uint, 2>{1u, 2u};
+                           ^
+program_source:18:23: warning: unused variable 'v' [-Wunused-variable]
+  tint_array<uint, 2> v = arr;
+                      ^
+
diff --git a/test/tint/expressions/type_ctor/array/inferred/vec2/abstract.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/array/inferred/vec2/abstract.wgsl.expected.ir.msl
index fe1c892..c97df58 100644
--- a/test/tint/expressions/type_ctor/array/inferred/vec2/abstract.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/array/inferred/vec2/abstract.wgsl.expected.ir.msl
@@ -19,3 +19,10 @@
 void f() {
   tint_array<float2, 2> v = arr;
 }
+program_source:16:30: error: program scope variable must reside in constant address space
+thread tint_array<float2, 2> arr = tint_array<float2, 2>{float2(1.0f), float2(2.0f)};
+                             ^
+program_source:18:25: warning: unused variable 'v' [-Wunused-variable]
+  tint_array<float2, 2> v = arr;
+                        ^
+
diff --git a/test/tint/expressions/type_ctor/array/inferred/vec2/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/array/inferred/vec2/f32.wgsl.expected.ir.msl
index fe1c892..c97df58 100644
--- a/test/tint/expressions/type_ctor/array/inferred/vec2/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/array/inferred/vec2/f32.wgsl.expected.ir.msl
@@ -19,3 +19,10 @@
 void f() {
   tint_array<float2, 2> v = arr;
 }
+program_source:16:30: error: program scope variable must reside in constant address space
+thread tint_array<float2, 2> arr = tint_array<float2, 2>{float2(1.0f), float2(2.0f)};
+                             ^
+program_source:18:25: warning: unused variable 'v' [-Wunused-variable]
+  tint_array<float2, 2> v = arr;
+                        ^
+
diff --git a/test/tint/expressions/type_ctor/array/inferred/vec2/i32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/array/inferred/vec2/i32.wgsl.expected.ir.msl
index 44f2746..a679881 100644
--- a/test/tint/expressions/type_ctor/array/inferred/vec2/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/array/inferred/vec2/i32.wgsl.expected.ir.msl
@@ -19,3 +19,10 @@
 void f() {
   tint_array<int2, 2> v = arr;
 }
+program_source:16:28: error: program scope variable must reside in constant address space
+thread tint_array<int2, 2> arr = tint_array<int2, 2>{int2(1), int2(2)};
+                           ^
+program_source:18:23: warning: unused variable 'v' [-Wunused-variable]
+  tint_array<int2, 2> v = arr;
+                      ^
+
diff --git a/test/tint/expressions/type_ctor/array/inferred/vec2/u32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/array/inferred/vec2/u32.wgsl.expected.ir.msl
index e7de8f2..fc73b45 100644
--- a/test/tint/expressions/type_ctor/array/inferred/vec2/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/array/inferred/vec2/u32.wgsl.expected.ir.msl
@@ -19,3 +19,10 @@
 void f() {
   tint_array<uint2, 2> v = arr;
 }
+program_source:16:29: error: program scope variable must reside in constant address space
+thread tint_array<uint2, 2> arr = tint_array<uint2, 2>{uint2(1u), uint2(2u)};
+                            ^
+program_source:18:24: warning: unused variable 'v' [-Wunused-variable]
+  tint_array<uint2, 2> v = arr;
+                       ^
+
diff --git a/test/tint/expressions/type_ctor/mat2x2/explicit/identity/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat2x2/explicit/identity/f16.wgsl.expected.ir.msl
index 1b8138d..281487e 100644
--- a/test/tint/expressions/type_ctor/mat2x2/explicit/identity/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat2x2/explicit/identity/f16.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat2x2<f16>, read_write> = var, mat2x2<f16>(vec2<f16>(0.0h, 1.0h), vec2<f16>(2.0h, 3.0h))
   %out:ptr<storage, mat2x2<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat2x2<f16> = load %m
     %5:mat2x2<f16> = construct %4
     store %out, %5
diff --git a/test/tint/expressions/type_ctor/mat2x2/explicit/identity/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat2x2/explicit/identity/f32.wgsl.expected.ir.msl
index af87ad3..4dda801 100644
--- a/test/tint/expressions/type_ctor/mat2x2/explicit/identity/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat2x2/explicit/identity/f32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat2x2<f32>, read_write> = var, mat2x2<f32>(vec2<f32>(0.0f, 1.0f), vec2<f32>(2.0f, 3.0f))
   %out:ptr<storage, mat2x2<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat2x2<f32> = load %m
     %5:mat2x2<f32> = construct %4
     store %out, %5
diff --git a/test/tint/expressions/type_ctor/mat2x2/explicit/scalars/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat2x2/explicit/scalars/f16.wgsl.expected.ir.msl
index dbcfc76..42b86c1 100644
--- a/test/tint/expressions/type_ctor/mat2x2/explicit/scalars/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat2x2/explicit/scalars/f16.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat2x2<f16>, read_write> = var, mat2x2<f16>(vec2<f16>(0.0h, 1.0h), vec2<f16>(2.0h, 3.0h))
   %out:ptr<storage, mat2x2<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat2x2<f16> = load %m
     store %out, %4
     ret
diff --git a/test/tint/expressions/type_ctor/mat2x2/explicit/scalars/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat2x2/explicit/scalars/f32.wgsl.expected.ir.msl
index 19f7708..3f4a245 100644
--- a/test/tint/expressions/type_ctor/mat2x2/explicit/scalars/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat2x2/explicit/scalars/f32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat2x2<f32>, read_write> = var, mat2x2<f32>(vec2<f32>(0.0f, 1.0f), vec2<f32>(2.0f, 3.0f))
   %out:ptr<storage, mat2x2<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat2x2<f32> = load %m
     store %out, %4
     ret
diff --git a/test/tint/expressions/type_ctor/mat2x2/explicit/vectors/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat2x2/explicit/vectors/f16.wgsl.expected.ir.msl
index dbcfc76..42b86c1 100644
--- a/test/tint/expressions/type_ctor/mat2x2/explicit/vectors/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat2x2/explicit/vectors/f16.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat2x2<f16>, read_write> = var, mat2x2<f16>(vec2<f16>(0.0h, 1.0h), vec2<f16>(2.0h, 3.0h))
   %out:ptr<storage, mat2x2<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat2x2<f16> = load %m
     store %out, %4
     ret
diff --git a/test/tint/expressions/type_ctor/mat2x2/explicit/vectors/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat2x2/explicit/vectors/f32.wgsl.expected.ir.msl
index 19f7708..3f4a245 100644
--- a/test/tint/expressions/type_ctor/mat2x2/explicit/vectors/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat2x2/explicit/vectors/f32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat2x2<f32>, read_write> = var, mat2x2<f32>(vec2<f32>(0.0f, 1.0f), vec2<f32>(2.0f, 3.0f))
   %out:ptr<storage, mat2x2<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat2x2<f32> = load %m
     store %out, %4
     ret
diff --git a/test/tint/expressions/type_ctor/mat2x2/inferred/identity/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat2x2/inferred/identity/f16.wgsl.expected.ir.msl
index 1b8138d..281487e 100644
--- a/test/tint/expressions/type_ctor/mat2x2/inferred/identity/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat2x2/inferred/identity/f16.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat2x2<f16>, read_write> = var, mat2x2<f16>(vec2<f16>(0.0h, 1.0h), vec2<f16>(2.0h, 3.0h))
   %out:ptr<storage, mat2x2<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat2x2<f16> = load %m
     %5:mat2x2<f16> = construct %4
     store %out, %5
diff --git a/test/tint/expressions/type_ctor/mat2x2/inferred/identity/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat2x2/inferred/identity/f32.wgsl.expected.ir.msl
index af87ad3..4dda801 100644
--- a/test/tint/expressions/type_ctor/mat2x2/inferred/identity/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat2x2/inferred/identity/f32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat2x2<f32>, read_write> = var, mat2x2<f32>(vec2<f32>(0.0f, 1.0f), vec2<f32>(2.0f, 3.0f))
   %out:ptr<storage, mat2x2<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat2x2<f32> = load %m
     %5:mat2x2<f32> = construct %4
     store %out, %5
diff --git a/test/tint/expressions/type_ctor/mat2x2/inferred/scalars/abstract-float.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat2x2/inferred/scalars/abstract-float.wgsl.expected.ir.msl
index 7dbf1ae..d7f3dcc 100644
--- a/test/tint/expressions/type_ctor/mat2x2/inferred/scalars/abstract-float.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat2x2/inferred/scalars/abstract-float.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %out:ptr<storage, mat2x2<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     store %out, mat2x2<f32>(vec2<f32>(0.0f, 1.0f), vec2<f32>(2.0f, 3.0f))
     ret
   }
diff --git a/test/tint/expressions/type_ctor/mat2x2/inferred/scalars/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat2x2/inferred/scalars/f16.wgsl.expected.ir.msl
index dbcfc76..42b86c1 100644
--- a/test/tint/expressions/type_ctor/mat2x2/inferred/scalars/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat2x2/inferred/scalars/f16.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat2x2<f16>, read_write> = var, mat2x2<f16>(vec2<f16>(0.0h, 1.0h), vec2<f16>(2.0h, 3.0h))
   %out:ptr<storage, mat2x2<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat2x2<f16> = load %m
     store %out, %4
     ret
diff --git a/test/tint/expressions/type_ctor/mat2x2/inferred/scalars/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat2x2/inferred/scalars/f32.wgsl.expected.ir.msl
index 19f7708..3f4a245 100644
--- a/test/tint/expressions/type_ctor/mat2x2/inferred/scalars/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat2x2/inferred/scalars/f32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat2x2<f32>, read_write> = var, mat2x2<f32>(vec2<f32>(0.0f, 1.0f), vec2<f32>(2.0f, 3.0f))
   %out:ptr<storage, mat2x2<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat2x2<f32> = load %m
     store %out, %4
     ret
diff --git a/test/tint/expressions/type_ctor/mat2x2/inferred/vectors/abstract-float.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat2x2/inferred/vectors/abstract-float.wgsl.expected.ir.msl
index 7dbf1ae..d7f3dcc 100644
--- a/test/tint/expressions/type_ctor/mat2x2/inferred/vectors/abstract-float.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat2x2/inferred/vectors/abstract-float.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %out:ptr<storage, mat2x2<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     store %out, mat2x2<f32>(vec2<f32>(0.0f, 1.0f), vec2<f32>(2.0f, 3.0f))
     ret
   }
diff --git a/test/tint/expressions/type_ctor/mat2x2/inferred/vectors/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat2x2/inferred/vectors/f16.wgsl.expected.ir.msl
index dbcfc76..42b86c1 100644
--- a/test/tint/expressions/type_ctor/mat2x2/inferred/vectors/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat2x2/inferred/vectors/f16.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat2x2<f16>, read_write> = var, mat2x2<f16>(vec2<f16>(0.0h, 1.0h), vec2<f16>(2.0h, 3.0h))
   %out:ptr<storage, mat2x2<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat2x2<f16> = load %m
     store %out, %4
     ret
diff --git a/test/tint/expressions/type_ctor/mat2x2/inferred/vectors/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat2x2/inferred/vectors/f32.wgsl.expected.ir.msl
index 19f7708..3f4a245 100644
--- a/test/tint/expressions/type_ctor/mat2x2/inferred/vectors/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat2x2/inferred/vectors/f32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat2x2<f32>, read_write> = var, mat2x2<f32>(vec2<f32>(0.0f, 1.0f), vec2<f32>(2.0f, 3.0f))
   %out:ptr<storage, mat2x2<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat2x2<f32> = load %m
     store %out, %4
     ret
diff --git a/test/tint/expressions/type_ctor/mat2x2/load/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat2x2/load/f16.wgsl.expected.ir.msl
index 21d5876..9363978 100644
--- a/test/tint/expressions/type_ctor/mat2x2/load/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat2x2/load/f16.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %out:ptr<storage, mat2x2<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %m:ptr<function, mat2x2<f16>, read_write> = var, mat2x2<f16>(vec2<f16>(0.0h))
     %4:mat2x2<f16> = load %m
     %5:mat2x2<f16> = construct %4
diff --git a/test/tint/expressions/type_ctor/mat2x2/load/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat2x2/load/f32.wgsl.expected.ir.msl
index ee37481..c0e5971 100644
--- a/test/tint/expressions/type_ctor/mat2x2/load/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat2x2/load/f32.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %out:ptr<storage, mat2x2<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %m:ptr<function, mat2x2<f32>, read_write> = var, mat2x2<f32>(vec2<f32>(0.0f))
     %4:mat2x2<f32> = load %m
     %5:mat2x2<f32> = construct %4
diff --git a/test/tint/expressions/type_ctor/mat2x2/zero/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat2x2/zero/f16.wgsl.expected.ir.msl
index 7a8f45b..4099885 100644
--- a/test/tint/expressions/type_ctor/mat2x2/zero/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat2x2/zero/f16.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat2x2<f16>, read_write> = var, mat2x2<f16>(vec2<f16>(0.0h))
   %out:ptr<storage, mat2x2<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat2x2<f16> = load %m
     store %out, %4
     ret
diff --git a/test/tint/expressions/type_ctor/mat2x2/zero/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat2x2/zero/f32.wgsl.expected.ir.msl
index 433bac4..0680fbe 100644
--- a/test/tint/expressions/type_ctor/mat2x2/zero/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat2x2/zero/f32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat2x2<f32>, read_write> = var, mat2x2<f32>(vec2<f32>(0.0f))
   %out:ptr<storage, mat2x2<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat2x2<f32> = load %m
     store %out, %4
     ret
diff --git a/test/tint/expressions/type_ctor/mat2x3/explicit/identity/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat2x3/explicit/identity/f16.wgsl.expected.ir.msl
index 48571dc..2619ee2 100644
--- a/test/tint/expressions/type_ctor/mat2x3/explicit/identity/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat2x3/explicit/identity/f16.wgsl.expected.ir.msl
@@ -1,15 +1,26 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat2x3<f16>, read_write> = var, mat2x3<f16>(vec3<f16>(0.0h, 1.0h, 2.0h), vec3<f16>(3.0h, 4.0h, 5.0h))
   %out:ptr<storage, mat2x3<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat2x3<f16> = load %m
     %5:mat2x3<f16> = construct %4
-    store %out, %5
+    %6:void = call %tint_store_and_preserve_padding, %out, %5
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat2x3<f16>, read_write>, %value_param:mat2x3<f16>):void {
+  $B3: {
+    %10:ptr<storage, vec3<f16>, read_write> = access %target, 0u
+    %11:vec3<f16> = access %value_param, 0u
+    store %10, %11
+    %12:ptr<storage, vec3<f16>, read_write> = access %target, 1u
+    %13:vec3<f16> = access %value_param, 1u
+    store %12, %13
     ret
   }
 }
diff --git a/test/tint/expressions/type_ctor/mat2x3/explicit/identity/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat2x3/explicit/identity/f32.wgsl.expected.ir.msl
index a1ec7ea..3bdeb77 100644
--- a/test/tint/expressions/type_ctor/mat2x3/explicit/identity/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat2x3/explicit/identity/f32.wgsl.expected.ir.msl
@@ -1,15 +1,26 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat2x3<f32>, read_write> = var, mat2x3<f32>(vec3<f32>(0.0f, 1.0f, 2.0f), vec3<f32>(3.0f, 4.0f, 5.0f))
   %out:ptr<storage, mat2x3<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat2x3<f32> = load %m
     %5:mat2x3<f32> = construct %4
-    store %out, %5
+    %6:void = call %tint_store_and_preserve_padding, %out, %5
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat2x3<f32>, read_write>, %value_param:mat2x3<f32>):void {
+  $B3: {
+    %10:ptr<storage, vec3<f32>, read_write> = access %target, 0u
+    %11:vec3<f32> = access %value_param, 0u
+    store %10, %11
+    %12:ptr<storage, vec3<f32>, read_write> = access %target, 1u
+    %13:vec3<f32> = access %value_param, 1u
+    store %12, %13
     ret
   }
 }
diff --git a/test/tint/expressions/type_ctor/mat2x3/explicit/scalars/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat2x3/explicit/scalars/f16.wgsl.expected.ir.msl
index b3b7e3b..8bd65fe 100644
--- a/test/tint/expressions/type_ctor/mat2x3/explicit/scalars/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat2x3/explicit/scalars/f16.wgsl.expected.ir.msl
@@ -1,14 +1,25 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat2x3<f16>, read_write> = var, mat2x3<f16>(vec3<f16>(0.0h, 1.0h, 2.0h), vec3<f16>(3.0h, 4.0h, 5.0h))
   %out:ptr<storage, mat2x3<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat2x3<f16> = load %m
-    store %out, %4
+    %5:void = call %tint_store_and_preserve_padding, %out, %4
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat2x3<f16>, read_write>, %value_param:mat2x3<f16>):void {
+  $B3: {
+    %9:ptr<storage, vec3<f16>, read_write> = access %target, 0u
+    %10:vec3<f16> = access %value_param, 0u
+    store %9, %10
+    %11:ptr<storage, vec3<f16>, read_write> = access %target, 1u
+    %12:vec3<f16> = access %value_param, 1u
+    store %11, %12
     ret
   }
 }
diff --git a/test/tint/expressions/type_ctor/mat2x3/explicit/scalars/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat2x3/explicit/scalars/f32.wgsl.expected.ir.msl
index 99c7a2c..6de92fb 100644
--- a/test/tint/expressions/type_ctor/mat2x3/explicit/scalars/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat2x3/explicit/scalars/f32.wgsl.expected.ir.msl
@@ -1,14 +1,25 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat2x3<f32>, read_write> = var, mat2x3<f32>(vec3<f32>(0.0f, 1.0f, 2.0f), vec3<f32>(3.0f, 4.0f, 5.0f))
   %out:ptr<storage, mat2x3<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat2x3<f32> = load %m
-    store %out, %4
+    %5:void = call %tint_store_and_preserve_padding, %out, %4
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat2x3<f32>, read_write>, %value_param:mat2x3<f32>):void {
+  $B3: {
+    %9:ptr<storage, vec3<f32>, read_write> = access %target, 0u
+    %10:vec3<f32> = access %value_param, 0u
+    store %9, %10
+    %11:ptr<storage, vec3<f32>, read_write> = access %target, 1u
+    %12:vec3<f32> = access %value_param, 1u
+    store %11, %12
     ret
   }
 }
diff --git a/test/tint/expressions/type_ctor/mat2x3/explicit/vectors/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat2x3/explicit/vectors/f16.wgsl.expected.ir.msl
index b3b7e3b..8bd65fe 100644
--- a/test/tint/expressions/type_ctor/mat2x3/explicit/vectors/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat2x3/explicit/vectors/f16.wgsl.expected.ir.msl
@@ -1,14 +1,25 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat2x3<f16>, read_write> = var, mat2x3<f16>(vec3<f16>(0.0h, 1.0h, 2.0h), vec3<f16>(3.0h, 4.0h, 5.0h))
   %out:ptr<storage, mat2x3<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat2x3<f16> = load %m
-    store %out, %4
+    %5:void = call %tint_store_and_preserve_padding, %out, %4
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat2x3<f16>, read_write>, %value_param:mat2x3<f16>):void {
+  $B3: {
+    %9:ptr<storage, vec3<f16>, read_write> = access %target, 0u
+    %10:vec3<f16> = access %value_param, 0u
+    store %9, %10
+    %11:ptr<storage, vec3<f16>, read_write> = access %target, 1u
+    %12:vec3<f16> = access %value_param, 1u
+    store %11, %12
     ret
   }
 }
diff --git a/test/tint/expressions/type_ctor/mat2x3/explicit/vectors/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat2x3/explicit/vectors/f32.wgsl.expected.ir.msl
index 99c7a2c..6de92fb 100644
--- a/test/tint/expressions/type_ctor/mat2x3/explicit/vectors/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat2x3/explicit/vectors/f32.wgsl.expected.ir.msl
@@ -1,14 +1,25 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat2x3<f32>, read_write> = var, mat2x3<f32>(vec3<f32>(0.0f, 1.0f, 2.0f), vec3<f32>(3.0f, 4.0f, 5.0f))
   %out:ptr<storage, mat2x3<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat2x3<f32> = load %m
-    store %out, %4
+    %5:void = call %tint_store_and_preserve_padding, %out, %4
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat2x3<f32>, read_write>, %value_param:mat2x3<f32>):void {
+  $B3: {
+    %9:ptr<storage, vec3<f32>, read_write> = access %target, 0u
+    %10:vec3<f32> = access %value_param, 0u
+    store %9, %10
+    %11:ptr<storage, vec3<f32>, read_write> = access %target, 1u
+    %12:vec3<f32> = access %value_param, 1u
+    store %11, %12
     ret
   }
 }
diff --git a/test/tint/expressions/type_ctor/mat2x3/inferred/identity/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat2x3/inferred/identity/f16.wgsl.expected.ir.msl
index 48571dc..2619ee2 100644
--- a/test/tint/expressions/type_ctor/mat2x3/inferred/identity/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat2x3/inferred/identity/f16.wgsl.expected.ir.msl
@@ -1,15 +1,26 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat2x3<f16>, read_write> = var, mat2x3<f16>(vec3<f16>(0.0h, 1.0h, 2.0h), vec3<f16>(3.0h, 4.0h, 5.0h))
   %out:ptr<storage, mat2x3<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat2x3<f16> = load %m
     %5:mat2x3<f16> = construct %4
-    store %out, %5
+    %6:void = call %tint_store_and_preserve_padding, %out, %5
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat2x3<f16>, read_write>, %value_param:mat2x3<f16>):void {
+  $B3: {
+    %10:ptr<storage, vec3<f16>, read_write> = access %target, 0u
+    %11:vec3<f16> = access %value_param, 0u
+    store %10, %11
+    %12:ptr<storage, vec3<f16>, read_write> = access %target, 1u
+    %13:vec3<f16> = access %value_param, 1u
+    store %12, %13
     ret
   }
 }
diff --git a/test/tint/expressions/type_ctor/mat2x3/inferred/identity/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat2x3/inferred/identity/f32.wgsl.expected.ir.msl
index a1ec7ea..3bdeb77 100644
--- a/test/tint/expressions/type_ctor/mat2x3/inferred/identity/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat2x3/inferred/identity/f32.wgsl.expected.ir.msl
@@ -1,15 +1,26 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat2x3<f32>, read_write> = var, mat2x3<f32>(vec3<f32>(0.0f, 1.0f, 2.0f), vec3<f32>(3.0f, 4.0f, 5.0f))
   %out:ptr<storage, mat2x3<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat2x3<f32> = load %m
     %5:mat2x3<f32> = construct %4
-    store %out, %5
+    %6:void = call %tint_store_and_preserve_padding, %out, %5
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat2x3<f32>, read_write>, %value_param:mat2x3<f32>):void {
+  $B3: {
+    %10:ptr<storage, vec3<f32>, read_write> = access %target, 0u
+    %11:vec3<f32> = access %value_param, 0u
+    store %10, %11
+    %12:ptr<storage, vec3<f32>, read_write> = access %target, 1u
+    %13:vec3<f32> = access %value_param, 1u
+    store %12, %13
     ret
   }
 }
diff --git a/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/abstract-float.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/abstract-float.wgsl.expected.ir.msl
index add2812..ae5af58 100644
--- a/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/abstract-float.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/abstract-float.wgsl.expected.ir.msl
@@ -1,12 +1,23 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %out:ptr<storage, mat2x3<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    store %out, mat2x3<f32>(vec3<f32>(0.0f, 1.0f, 2.0f), vec3<f32>(3.0f, 4.0f, 5.0f))
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %3:void = call %tint_store_and_preserve_padding, %out, mat2x3<f32>(vec3<f32>(0.0f, 1.0f, 2.0f), vec3<f32>(3.0f, 4.0f, 5.0f))
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat2x3<f32>, read_write>, %value_param:mat2x3<f32>):void {
+  $B3: {
+    %7:ptr<storage, vec3<f32>, read_write> = access %target, 0u
+    %8:vec3<f32> = access %value_param, 0u
+    store %7, %8
+    %9:ptr<storage, vec3<f32>, read_write> = access %target, 1u
+    %10:vec3<f32> = access %value_param, 1u
+    store %9, %10
     ret
   }
 }
diff --git a/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/f16.wgsl.expected.ir.msl
index b3b7e3b..8bd65fe 100644
--- a/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/f16.wgsl.expected.ir.msl
@@ -1,14 +1,25 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat2x3<f16>, read_write> = var, mat2x3<f16>(vec3<f16>(0.0h, 1.0h, 2.0h), vec3<f16>(3.0h, 4.0h, 5.0h))
   %out:ptr<storage, mat2x3<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat2x3<f16> = load %m
-    store %out, %4
+    %5:void = call %tint_store_and_preserve_padding, %out, %4
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat2x3<f16>, read_write>, %value_param:mat2x3<f16>):void {
+  $B3: {
+    %9:ptr<storage, vec3<f16>, read_write> = access %target, 0u
+    %10:vec3<f16> = access %value_param, 0u
+    store %9, %10
+    %11:ptr<storage, vec3<f16>, read_write> = access %target, 1u
+    %12:vec3<f16> = access %value_param, 1u
+    store %11, %12
     ret
   }
 }
diff --git a/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/f32.wgsl.expected.ir.msl
index 99c7a2c..6de92fb 100644
--- a/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat2x3/inferred/scalars/f32.wgsl.expected.ir.msl
@@ -1,14 +1,25 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat2x3<f32>, read_write> = var, mat2x3<f32>(vec3<f32>(0.0f, 1.0f, 2.0f), vec3<f32>(3.0f, 4.0f, 5.0f))
   %out:ptr<storage, mat2x3<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat2x3<f32> = load %m
-    store %out, %4
+    %5:void = call %tint_store_and_preserve_padding, %out, %4
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat2x3<f32>, read_write>, %value_param:mat2x3<f32>):void {
+  $B3: {
+    %9:ptr<storage, vec3<f32>, read_write> = access %target, 0u
+    %10:vec3<f32> = access %value_param, 0u
+    store %9, %10
+    %11:ptr<storage, vec3<f32>, read_write> = access %target, 1u
+    %12:vec3<f32> = access %value_param, 1u
+    store %11, %12
     ret
   }
 }
diff --git a/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/abstract-float.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/abstract-float.wgsl.expected.ir.msl
index add2812..ae5af58 100644
--- a/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/abstract-float.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/abstract-float.wgsl.expected.ir.msl
@@ -1,12 +1,23 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %out:ptr<storage, mat2x3<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    store %out, mat2x3<f32>(vec3<f32>(0.0f, 1.0f, 2.0f), vec3<f32>(3.0f, 4.0f, 5.0f))
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %3:void = call %tint_store_and_preserve_padding, %out, mat2x3<f32>(vec3<f32>(0.0f, 1.0f, 2.0f), vec3<f32>(3.0f, 4.0f, 5.0f))
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat2x3<f32>, read_write>, %value_param:mat2x3<f32>):void {
+  $B3: {
+    %7:ptr<storage, vec3<f32>, read_write> = access %target, 0u
+    %8:vec3<f32> = access %value_param, 0u
+    store %7, %8
+    %9:ptr<storage, vec3<f32>, read_write> = access %target, 1u
+    %10:vec3<f32> = access %value_param, 1u
+    store %9, %10
     ret
   }
 }
diff --git a/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/f16.wgsl.expected.ir.msl
index b3b7e3b..8bd65fe 100644
--- a/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/f16.wgsl.expected.ir.msl
@@ -1,14 +1,25 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat2x3<f16>, read_write> = var, mat2x3<f16>(vec3<f16>(0.0h, 1.0h, 2.0h), vec3<f16>(3.0h, 4.0h, 5.0h))
   %out:ptr<storage, mat2x3<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat2x3<f16> = load %m
-    store %out, %4
+    %5:void = call %tint_store_and_preserve_padding, %out, %4
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat2x3<f16>, read_write>, %value_param:mat2x3<f16>):void {
+  $B3: {
+    %9:ptr<storage, vec3<f16>, read_write> = access %target, 0u
+    %10:vec3<f16> = access %value_param, 0u
+    store %9, %10
+    %11:ptr<storage, vec3<f16>, read_write> = access %target, 1u
+    %12:vec3<f16> = access %value_param, 1u
+    store %11, %12
     ret
   }
 }
diff --git a/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/f32.wgsl.expected.ir.msl
index 99c7a2c..6de92fb 100644
--- a/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat2x3/inferred/vectors/f32.wgsl.expected.ir.msl
@@ -1,14 +1,25 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat2x3<f32>, read_write> = var, mat2x3<f32>(vec3<f32>(0.0f, 1.0f, 2.0f), vec3<f32>(3.0f, 4.0f, 5.0f))
   %out:ptr<storage, mat2x3<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat2x3<f32> = load %m
-    store %out, %4
+    %5:void = call %tint_store_and_preserve_padding, %out, %4
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat2x3<f32>, read_write>, %value_param:mat2x3<f32>):void {
+  $B3: {
+    %9:ptr<storage, vec3<f32>, read_write> = access %target, 0u
+    %10:vec3<f32> = access %value_param, 0u
+    store %9, %10
+    %11:ptr<storage, vec3<f32>, read_write> = access %target, 1u
+    %12:vec3<f32> = access %value_param, 1u
+    store %11, %12
     ret
   }
 }
diff --git a/test/tint/expressions/type_ctor/mat2x3/load/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat2x3/load/f16.wgsl.expected.ir.msl
index 3b62155..cfbb960 100644
--- a/test/tint/expressions/type_ctor/mat2x3/load/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat2x3/load/f16.wgsl.expected.ir.msl
@@ -1,15 +1,26 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %out:ptr<storage, mat2x3<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %m:ptr<function, mat2x3<f16>, read_write> = var, mat2x3<f16>(vec3<f16>(0.0h))
     %4:mat2x3<f16> = load %m
     %5:mat2x3<f16> = construct %4
-    store %out, %5
+    %6:void = call %tint_store_and_preserve_padding, %out, %5
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat2x3<f16>, read_write>, %value_param:mat2x3<f16>):void {
+  $B3: {
+    %10:ptr<storage, vec3<f16>, read_write> = access %target, 0u
+    %11:vec3<f16> = access %value_param, 0u
+    store %10, %11
+    %12:ptr<storage, vec3<f16>, read_write> = access %target, 1u
+    %13:vec3<f16> = access %value_param, 1u
+    store %12, %13
     ret
   }
 }
diff --git a/test/tint/expressions/type_ctor/mat2x3/load/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat2x3/load/f32.wgsl.expected.ir.msl
index 244cd44..32137a0 100644
--- a/test/tint/expressions/type_ctor/mat2x3/load/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat2x3/load/f32.wgsl.expected.ir.msl
@@ -1,15 +1,26 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %out:ptr<storage, mat2x3<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %m:ptr<function, mat2x3<f32>, read_write> = var, mat2x3<f32>(vec3<f32>(0.0f))
     %4:mat2x3<f32> = load %m
     %5:mat2x3<f32> = construct %4
-    store %out, %5
+    %6:void = call %tint_store_and_preserve_padding, %out, %5
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat2x3<f32>, read_write>, %value_param:mat2x3<f32>):void {
+  $B3: {
+    %10:ptr<storage, vec3<f32>, read_write> = access %target, 0u
+    %11:vec3<f32> = access %value_param, 0u
+    store %10, %11
+    %12:ptr<storage, vec3<f32>, read_write> = access %target, 1u
+    %13:vec3<f32> = access %value_param, 1u
+    store %12, %13
     ret
   }
 }
diff --git a/test/tint/expressions/type_ctor/mat2x3/zero/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat2x3/zero/f16.wgsl.expected.ir.msl
index dbfa2ab..f77c475 100644
--- a/test/tint/expressions/type_ctor/mat2x3/zero/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat2x3/zero/f16.wgsl.expected.ir.msl
@@ -1,14 +1,25 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat2x3<f16>, read_write> = var, mat2x3<f16>(vec3<f16>(0.0h))
   %out:ptr<storage, mat2x3<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat2x3<f16> = load %m
-    store %out, %4
+    %5:void = call %tint_store_and_preserve_padding, %out, %4
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat2x3<f16>, read_write>, %value_param:mat2x3<f16>):void {
+  $B3: {
+    %9:ptr<storage, vec3<f16>, read_write> = access %target, 0u
+    %10:vec3<f16> = access %value_param, 0u
+    store %9, %10
+    %11:ptr<storage, vec3<f16>, read_write> = access %target, 1u
+    %12:vec3<f16> = access %value_param, 1u
+    store %11, %12
     ret
   }
 }
diff --git a/test/tint/expressions/type_ctor/mat2x3/zero/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat2x3/zero/f32.wgsl.expected.ir.msl
index 629f609..70ad078 100644
--- a/test/tint/expressions/type_ctor/mat2x3/zero/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat2x3/zero/f32.wgsl.expected.ir.msl
@@ -1,14 +1,25 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat2x3<f32>, read_write> = var, mat2x3<f32>(vec3<f32>(0.0f))
   %out:ptr<storage, mat2x3<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat2x3<f32> = load %m
-    store %out, %4
+    %5:void = call %tint_store_and_preserve_padding, %out, %4
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat2x3<f32>, read_write>, %value_param:mat2x3<f32>):void {
+  $B3: {
+    %9:ptr<storage, vec3<f32>, read_write> = access %target, 0u
+    %10:vec3<f32> = access %value_param, 0u
+    store %9, %10
+    %11:ptr<storage, vec3<f32>, read_write> = access %target, 1u
+    %12:vec3<f32> = access %value_param, 1u
+    store %11, %12
     ret
   }
 }
diff --git a/test/tint/expressions/type_ctor/mat2x4/explicit/identity/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat2x4/explicit/identity/f16.wgsl.expected.ir.msl
index 2f53f28..1597cd9 100644
--- a/test/tint/expressions/type_ctor/mat2x4/explicit/identity/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat2x4/explicit/identity/f16.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat2x4<f16>, read_write> = var, mat2x4<f16>(vec4<f16>(0.0h, 1.0h, 2.0h, 3.0h), vec4<f16>(4.0h, 5.0h, 6.0h, 7.0h))
   %out:ptr<storage, mat2x4<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat2x4<f16> = load %m
     %5:mat2x4<f16> = construct %4
     store %out, %5
diff --git a/test/tint/expressions/type_ctor/mat2x4/explicit/identity/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat2x4/explicit/identity/f32.wgsl.expected.ir.msl
index f0cccab..602e3f6 100644
--- a/test/tint/expressions/type_ctor/mat2x4/explicit/identity/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat2x4/explicit/identity/f32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat2x4<f32>, read_write> = var, mat2x4<f32>(vec4<f32>(0.0f, 1.0f, 2.0f, 3.0f), vec4<f32>(4.0f, 5.0f, 6.0f, 7.0f))
   %out:ptr<storage, mat2x4<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat2x4<f32> = load %m
     %5:mat2x4<f32> = construct %4
     store %out, %5
diff --git a/test/tint/expressions/type_ctor/mat2x4/explicit/scalars/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat2x4/explicit/scalars/f16.wgsl.expected.ir.msl
index f4def4f..483754b 100644
--- a/test/tint/expressions/type_ctor/mat2x4/explicit/scalars/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat2x4/explicit/scalars/f16.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat2x4<f16>, read_write> = var, mat2x4<f16>(vec4<f16>(0.0h, 1.0h, 2.0h, 3.0h), vec4<f16>(4.0h, 5.0h, 6.0h, 7.0h))
   %out:ptr<storage, mat2x4<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat2x4<f16> = load %m
     store %out, %4
     ret
diff --git a/test/tint/expressions/type_ctor/mat2x4/explicit/scalars/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat2x4/explicit/scalars/f32.wgsl.expected.ir.msl
index dccd922..a902608 100644
--- a/test/tint/expressions/type_ctor/mat2x4/explicit/scalars/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat2x4/explicit/scalars/f32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat2x4<f32>, read_write> = var, mat2x4<f32>(vec4<f32>(0.0f, 1.0f, 2.0f, 3.0f), vec4<f32>(4.0f, 5.0f, 6.0f, 7.0f))
   %out:ptr<storage, mat2x4<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat2x4<f32> = load %m
     store %out, %4
     ret
diff --git a/test/tint/expressions/type_ctor/mat2x4/explicit/vectors/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat2x4/explicit/vectors/f16.wgsl.expected.ir.msl
index f4def4f..483754b 100644
--- a/test/tint/expressions/type_ctor/mat2x4/explicit/vectors/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat2x4/explicit/vectors/f16.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat2x4<f16>, read_write> = var, mat2x4<f16>(vec4<f16>(0.0h, 1.0h, 2.0h, 3.0h), vec4<f16>(4.0h, 5.0h, 6.0h, 7.0h))
   %out:ptr<storage, mat2x4<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat2x4<f16> = load %m
     store %out, %4
     ret
diff --git a/test/tint/expressions/type_ctor/mat2x4/explicit/vectors/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat2x4/explicit/vectors/f32.wgsl.expected.ir.msl
index dccd922..a902608 100644
--- a/test/tint/expressions/type_ctor/mat2x4/explicit/vectors/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat2x4/explicit/vectors/f32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat2x4<f32>, read_write> = var, mat2x4<f32>(vec4<f32>(0.0f, 1.0f, 2.0f, 3.0f), vec4<f32>(4.0f, 5.0f, 6.0f, 7.0f))
   %out:ptr<storage, mat2x4<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat2x4<f32> = load %m
     store %out, %4
     ret
diff --git a/test/tint/expressions/type_ctor/mat2x4/inferred/identity/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat2x4/inferred/identity/f16.wgsl.expected.ir.msl
index 2f53f28..1597cd9 100644
--- a/test/tint/expressions/type_ctor/mat2x4/inferred/identity/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat2x4/inferred/identity/f16.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat2x4<f16>, read_write> = var, mat2x4<f16>(vec4<f16>(0.0h, 1.0h, 2.0h, 3.0h), vec4<f16>(4.0h, 5.0h, 6.0h, 7.0h))
   %out:ptr<storage, mat2x4<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat2x4<f16> = load %m
     %5:mat2x4<f16> = construct %4
     store %out, %5
diff --git a/test/tint/expressions/type_ctor/mat2x4/inferred/identity/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat2x4/inferred/identity/f32.wgsl.expected.ir.msl
index f0cccab..602e3f6 100644
--- a/test/tint/expressions/type_ctor/mat2x4/inferred/identity/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat2x4/inferred/identity/f32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat2x4<f32>, read_write> = var, mat2x4<f32>(vec4<f32>(0.0f, 1.0f, 2.0f, 3.0f), vec4<f32>(4.0f, 5.0f, 6.0f, 7.0f))
   %out:ptr<storage, mat2x4<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat2x4<f32> = load %m
     %5:mat2x4<f32> = construct %4
     store %out, %5
diff --git a/test/tint/expressions/type_ctor/mat2x4/inferred/scalars/abstract-float.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat2x4/inferred/scalars/abstract-float.wgsl.expected.ir.msl
index e7021c0..fae26aa 100644
--- a/test/tint/expressions/type_ctor/mat2x4/inferred/scalars/abstract-float.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat2x4/inferred/scalars/abstract-float.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %out:ptr<storage, mat2x4<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     store %out, mat2x4<f32>(vec4<f32>(0.0f, 1.0f, 2.0f, 3.0f), vec4<f32>(4.0f, 5.0f, 6.0f, 7.0f))
     ret
   }
diff --git a/test/tint/expressions/type_ctor/mat2x4/inferred/scalars/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat2x4/inferred/scalars/f16.wgsl.expected.ir.msl
index f4def4f..483754b 100644
--- a/test/tint/expressions/type_ctor/mat2x4/inferred/scalars/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat2x4/inferred/scalars/f16.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat2x4<f16>, read_write> = var, mat2x4<f16>(vec4<f16>(0.0h, 1.0h, 2.0h, 3.0h), vec4<f16>(4.0h, 5.0h, 6.0h, 7.0h))
   %out:ptr<storage, mat2x4<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat2x4<f16> = load %m
     store %out, %4
     ret
diff --git a/test/tint/expressions/type_ctor/mat2x4/inferred/scalars/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat2x4/inferred/scalars/f32.wgsl.expected.ir.msl
index dccd922..a902608 100644
--- a/test/tint/expressions/type_ctor/mat2x4/inferred/scalars/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat2x4/inferred/scalars/f32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat2x4<f32>, read_write> = var, mat2x4<f32>(vec4<f32>(0.0f, 1.0f, 2.0f, 3.0f), vec4<f32>(4.0f, 5.0f, 6.0f, 7.0f))
   %out:ptr<storage, mat2x4<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat2x4<f32> = load %m
     store %out, %4
     ret
diff --git a/test/tint/expressions/type_ctor/mat2x4/inferred/vectors/abstract-float.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat2x4/inferred/vectors/abstract-float.wgsl.expected.ir.msl
index e7021c0..fae26aa 100644
--- a/test/tint/expressions/type_ctor/mat2x4/inferred/vectors/abstract-float.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat2x4/inferred/vectors/abstract-float.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %out:ptr<storage, mat2x4<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     store %out, mat2x4<f32>(vec4<f32>(0.0f, 1.0f, 2.0f, 3.0f), vec4<f32>(4.0f, 5.0f, 6.0f, 7.0f))
     ret
   }
diff --git a/test/tint/expressions/type_ctor/mat2x4/inferred/vectors/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat2x4/inferred/vectors/f16.wgsl.expected.ir.msl
index f4def4f..483754b 100644
--- a/test/tint/expressions/type_ctor/mat2x4/inferred/vectors/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat2x4/inferred/vectors/f16.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat2x4<f16>, read_write> = var, mat2x4<f16>(vec4<f16>(0.0h, 1.0h, 2.0h, 3.0h), vec4<f16>(4.0h, 5.0h, 6.0h, 7.0h))
   %out:ptr<storage, mat2x4<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat2x4<f16> = load %m
     store %out, %4
     ret
diff --git a/test/tint/expressions/type_ctor/mat2x4/inferred/vectors/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat2x4/inferred/vectors/f32.wgsl.expected.ir.msl
index dccd922..a902608 100644
--- a/test/tint/expressions/type_ctor/mat2x4/inferred/vectors/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat2x4/inferred/vectors/f32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat2x4<f32>, read_write> = var, mat2x4<f32>(vec4<f32>(0.0f, 1.0f, 2.0f, 3.0f), vec4<f32>(4.0f, 5.0f, 6.0f, 7.0f))
   %out:ptr<storage, mat2x4<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat2x4<f32> = load %m
     store %out, %4
     ret
diff --git a/test/tint/expressions/type_ctor/mat2x4/load/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat2x4/load/f16.wgsl.expected.ir.msl
index 45742ff..515c6cf 100644
--- a/test/tint/expressions/type_ctor/mat2x4/load/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat2x4/load/f16.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %out:ptr<storage, mat2x4<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %m:ptr<function, mat2x4<f16>, read_write> = var, mat2x4<f16>(vec4<f16>(0.0h))
     %4:mat2x4<f16> = load %m
     %5:mat2x4<f16> = construct %4
diff --git a/test/tint/expressions/type_ctor/mat2x4/load/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat2x4/load/f32.wgsl.expected.ir.msl
index 5139465..83c77f5 100644
--- a/test/tint/expressions/type_ctor/mat2x4/load/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat2x4/load/f32.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %out:ptr<storage, mat2x4<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %m:ptr<function, mat2x4<f32>, read_write> = var, mat2x4<f32>(vec4<f32>(0.0f))
     %4:mat2x4<f32> = load %m
     %5:mat2x4<f32> = construct %4
diff --git a/test/tint/expressions/type_ctor/mat2x4/zero/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat2x4/zero/f16.wgsl.expected.ir.msl
index 5269b43..18cc1f7 100644
--- a/test/tint/expressions/type_ctor/mat2x4/zero/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat2x4/zero/f16.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat2x4<f16>, read_write> = var, mat2x4<f16>(vec4<f16>(0.0h))
   %out:ptr<storage, mat2x4<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat2x4<f16> = load %m
     store %out, %4
     ret
diff --git a/test/tint/expressions/type_ctor/mat2x4/zero/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat2x4/zero/f32.wgsl.expected.ir.msl
index 3c27509..7225b73 100644
--- a/test/tint/expressions/type_ctor/mat2x4/zero/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat2x4/zero/f32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat2x4<f32>, read_write> = var, mat2x4<f32>(vec4<f32>(0.0f))
   %out:ptr<storage, mat2x4<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat2x4<f32> = load %m
     store %out, %4
     ret
diff --git a/test/tint/expressions/type_ctor/mat3x2/explicit/identity/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat3x2/explicit/identity/f16.wgsl.expected.ir.msl
index 7dfd287..68d8372b 100644
--- a/test/tint/expressions/type_ctor/mat3x2/explicit/identity/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat3x2/explicit/identity/f16.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat3x2<f16>, read_write> = var, mat3x2<f16>(vec2<f16>(0.0h, 1.0h), vec2<f16>(2.0h, 3.0h), vec2<f16>(4.0h, 5.0h))
   %out:ptr<storage, mat3x2<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat3x2<f16> = load %m
     %5:mat3x2<f16> = construct %4
     store %out, %5
diff --git a/test/tint/expressions/type_ctor/mat3x2/explicit/identity/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat3x2/explicit/identity/f32.wgsl.expected.ir.msl
index 761084b..e0de70d 100644
--- a/test/tint/expressions/type_ctor/mat3x2/explicit/identity/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat3x2/explicit/identity/f32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat3x2<f32>, read_write> = var, mat3x2<f32>(vec2<f32>(0.0f, 1.0f), vec2<f32>(2.0f, 3.0f), vec2<f32>(4.0f, 5.0f))
   %out:ptr<storage, mat3x2<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat3x2<f32> = load %m
     %5:mat3x2<f32> = construct %4
     store %out, %5
diff --git a/test/tint/expressions/type_ctor/mat3x2/explicit/scalars/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat3x2/explicit/scalars/f16.wgsl.expected.ir.msl
index 8c4a5a0..a0d7871 100644
--- a/test/tint/expressions/type_ctor/mat3x2/explicit/scalars/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat3x2/explicit/scalars/f16.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat3x2<f16>, read_write> = var, mat3x2<f16>(vec2<f16>(0.0h, 1.0h), vec2<f16>(2.0h, 3.0h), vec2<f16>(4.0h, 5.0h))
   %out:ptr<storage, mat3x2<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat3x2<f16> = load %m
     store %out, %4
     ret
diff --git a/test/tint/expressions/type_ctor/mat3x2/explicit/scalars/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat3x2/explicit/scalars/f32.wgsl.expected.ir.msl
index da69e9d..53e8af3 100644
--- a/test/tint/expressions/type_ctor/mat3x2/explicit/scalars/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat3x2/explicit/scalars/f32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat3x2<f32>, read_write> = var, mat3x2<f32>(vec2<f32>(0.0f, 1.0f), vec2<f32>(2.0f, 3.0f), vec2<f32>(4.0f, 5.0f))
   %out:ptr<storage, mat3x2<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat3x2<f32> = load %m
     store %out, %4
     ret
diff --git a/test/tint/expressions/type_ctor/mat3x2/explicit/vectors/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat3x2/explicit/vectors/f16.wgsl.expected.ir.msl
index 8c4a5a0..a0d7871 100644
--- a/test/tint/expressions/type_ctor/mat3x2/explicit/vectors/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat3x2/explicit/vectors/f16.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat3x2<f16>, read_write> = var, mat3x2<f16>(vec2<f16>(0.0h, 1.0h), vec2<f16>(2.0h, 3.0h), vec2<f16>(4.0h, 5.0h))
   %out:ptr<storage, mat3x2<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat3x2<f16> = load %m
     store %out, %4
     ret
diff --git a/test/tint/expressions/type_ctor/mat3x2/explicit/vectors/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat3x2/explicit/vectors/f32.wgsl.expected.ir.msl
index da69e9d..53e8af3 100644
--- a/test/tint/expressions/type_ctor/mat3x2/explicit/vectors/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat3x2/explicit/vectors/f32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat3x2<f32>, read_write> = var, mat3x2<f32>(vec2<f32>(0.0f, 1.0f), vec2<f32>(2.0f, 3.0f), vec2<f32>(4.0f, 5.0f))
   %out:ptr<storage, mat3x2<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat3x2<f32> = load %m
     store %out, %4
     ret
diff --git a/test/tint/expressions/type_ctor/mat3x2/inferred/identity/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat3x2/inferred/identity/f16.wgsl.expected.ir.msl
index 7dfd287..68d8372b 100644
--- a/test/tint/expressions/type_ctor/mat3x2/inferred/identity/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat3x2/inferred/identity/f16.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat3x2<f16>, read_write> = var, mat3x2<f16>(vec2<f16>(0.0h, 1.0h), vec2<f16>(2.0h, 3.0h), vec2<f16>(4.0h, 5.0h))
   %out:ptr<storage, mat3x2<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat3x2<f16> = load %m
     %5:mat3x2<f16> = construct %4
     store %out, %5
diff --git a/test/tint/expressions/type_ctor/mat3x2/inferred/identity/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat3x2/inferred/identity/f32.wgsl.expected.ir.msl
index 761084b..e0de70d 100644
--- a/test/tint/expressions/type_ctor/mat3x2/inferred/identity/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat3x2/inferred/identity/f32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat3x2<f32>, read_write> = var, mat3x2<f32>(vec2<f32>(0.0f, 1.0f), vec2<f32>(2.0f, 3.0f), vec2<f32>(4.0f, 5.0f))
   %out:ptr<storage, mat3x2<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat3x2<f32> = load %m
     %5:mat3x2<f32> = construct %4
     store %out, %5
diff --git a/test/tint/expressions/type_ctor/mat3x2/inferred/scalars/abstract-float.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat3x2/inferred/scalars/abstract-float.wgsl.expected.ir.msl
index 59128da..35f38c8 100644
--- a/test/tint/expressions/type_ctor/mat3x2/inferred/scalars/abstract-float.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat3x2/inferred/scalars/abstract-float.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %out:ptr<storage, mat3x2<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     store %out, mat3x2<f32>(vec2<f32>(0.0f, 1.0f), vec2<f32>(2.0f, 3.0f), vec2<f32>(4.0f, 5.0f))
     ret
   }
diff --git a/test/tint/expressions/type_ctor/mat3x2/inferred/scalars/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat3x2/inferred/scalars/f16.wgsl.expected.ir.msl
index 8c4a5a0..a0d7871 100644
--- a/test/tint/expressions/type_ctor/mat3x2/inferred/scalars/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat3x2/inferred/scalars/f16.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat3x2<f16>, read_write> = var, mat3x2<f16>(vec2<f16>(0.0h, 1.0h), vec2<f16>(2.0h, 3.0h), vec2<f16>(4.0h, 5.0h))
   %out:ptr<storage, mat3x2<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat3x2<f16> = load %m
     store %out, %4
     ret
diff --git a/test/tint/expressions/type_ctor/mat3x2/inferred/scalars/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat3x2/inferred/scalars/f32.wgsl.expected.ir.msl
index da69e9d..53e8af3 100644
--- a/test/tint/expressions/type_ctor/mat3x2/inferred/scalars/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat3x2/inferred/scalars/f32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat3x2<f32>, read_write> = var, mat3x2<f32>(vec2<f32>(0.0f, 1.0f), vec2<f32>(2.0f, 3.0f), vec2<f32>(4.0f, 5.0f))
   %out:ptr<storage, mat3x2<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat3x2<f32> = load %m
     store %out, %4
     ret
diff --git a/test/tint/expressions/type_ctor/mat3x2/inferred/vectors/abstract-float.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat3x2/inferred/vectors/abstract-float.wgsl.expected.ir.msl
index 59128da..35f38c8 100644
--- a/test/tint/expressions/type_ctor/mat3x2/inferred/vectors/abstract-float.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat3x2/inferred/vectors/abstract-float.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %out:ptr<storage, mat3x2<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     store %out, mat3x2<f32>(vec2<f32>(0.0f, 1.0f), vec2<f32>(2.0f, 3.0f), vec2<f32>(4.0f, 5.0f))
     ret
   }
diff --git a/test/tint/expressions/type_ctor/mat3x2/inferred/vectors/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat3x2/inferred/vectors/f16.wgsl.expected.ir.msl
index 8c4a5a0..a0d7871 100644
--- a/test/tint/expressions/type_ctor/mat3x2/inferred/vectors/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat3x2/inferred/vectors/f16.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat3x2<f16>, read_write> = var, mat3x2<f16>(vec2<f16>(0.0h, 1.0h), vec2<f16>(2.0h, 3.0h), vec2<f16>(4.0h, 5.0h))
   %out:ptr<storage, mat3x2<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat3x2<f16> = load %m
     store %out, %4
     ret
diff --git a/test/tint/expressions/type_ctor/mat3x2/inferred/vectors/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat3x2/inferred/vectors/f32.wgsl.expected.ir.msl
index da69e9d..53e8af3 100644
--- a/test/tint/expressions/type_ctor/mat3x2/inferred/vectors/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat3x2/inferred/vectors/f32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat3x2<f32>, read_write> = var, mat3x2<f32>(vec2<f32>(0.0f, 1.0f), vec2<f32>(2.0f, 3.0f), vec2<f32>(4.0f, 5.0f))
   %out:ptr<storage, mat3x2<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat3x2<f32> = load %m
     store %out, %4
     ret
diff --git a/test/tint/expressions/type_ctor/mat3x2/load/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat3x2/load/f16.wgsl.expected.ir.msl
index 6bfe91c..9c00151 100644
--- a/test/tint/expressions/type_ctor/mat3x2/load/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat3x2/load/f16.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %out:ptr<storage, mat3x2<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %m:ptr<function, mat3x2<f16>, read_write> = var, mat3x2<f16>(vec2<f16>(0.0h))
     %4:mat3x2<f16> = load %m
     %5:mat3x2<f16> = construct %4
diff --git a/test/tint/expressions/type_ctor/mat3x2/load/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat3x2/load/f32.wgsl.expected.ir.msl
index cb339a9..82b31bb 100644
--- a/test/tint/expressions/type_ctor/mat3x2/load/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat3x2/load/f32.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %out:ptr<storage, mat3x2<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %m:ptr<function, mat3x2<f32>, read_write> = var, mat3x2<f32>(vec2<f32>(0.0f))
     %4:mat3x2<f32> = load %m
     %5:mat3x2<f32> = construct %4
diff --git a/test/tint/expressions/type_ctor/mat3x2/zero/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat3x2/zero/f16.wgsl.expected.ir.msl
index 9e000bd..de3e5f4 100644
--- a/test/tint/expressions/type_ctor/mat3x2/zero/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat3x2/zero/f16.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat3x2<f16>, read_write> = var, mat3x2<f16>(vec2<f16>(0.0h))
   %out:ptr<storage, mat3x2<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat3x2<f16> = load %m
     store %out, %4
     ret
diff --git a/test/tint/expressions/type_ctor/mat3x2/zero/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat3x2/zero/f32.wgsl.expected.ir.msl
index da12c60..81a9b6d 100644
--- a/test/tint/expressions/type_ctor/mat3x2/zero/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat3x2/zero/f32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat3x2<f32>, read_write> = var, mat3x2<f32>(vec2<f32>(0.0f))
   %out:ptr<storage, mat3x2<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat3x2<f32> = load %m
     store %out, %4
     ret
diff --git a/test/tint/expressions/type_ctor/mat3x3/explicit/identity/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat3x3/explicit/identity/f16.wgsl.expected.ir.msl
index 9b9fcc7..713b725 100644
--- a/test/tint/expressions/type_ctor/mat3x3/explicit/identity/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat3x3/explicit/identity/f16.wgsl.expected.ir.msl
@@ -1,15 +1,29 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat3x3<f16>, read_write> = var, mat3x3<f16>(vec3<f16>(0.0h, 1.0h, 2.0h), vec3<f16>(3.0h, 4.0h, 5.0h), vec3<f16>(6.0h, 7.0h, 8.0h))
   %out:ptr<storage, mat3x3<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat3x3<f16> = load %m
     %5:mat3x3<f16> = construct %4
-    store %out, %5
+    %6:void = call %tint_store_and_preserve_padding, %out, %5
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat3x3<f16>, read_write>, %value_param:mat3x3<f16>):void {
+  $B3: {
+    %10:ptr<storage, vec3<f16>, read_write> = access %target, 0u
+    %11:vec3<f16> = access %value_param, 0u
+    store %10, %11
+    %12:ptr<storage, vec3<f16>, read_write> = access %target, 1u
+    %13:vec3<f16> = access %value_param, 1u
+    store %12, %13
+    %14:ptr<storage, vec3<f16>, read_write> = access %target, 2u
+    %15:vec3<f16> = access %value_param, 2u
+    store %14, %15
     ret
   }
 }
diff --git a/test/tint/expressions/type_ctor/mat3x3/explicit/identity/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat3x3/explicit/identity/f32.wgsl.expected.ir.msl
index 0962c0c..b261ad3 100644
--- a/test/tint/expressions/type_ctor/mat3x3/explicit/identity/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat3x3/explicit/identity/f32.wgsl.expected.ir.msl
@@ -1,15 +1,29 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat3x3<f32>, read_write> = var, mat3x3<f32>(vec3<f32>(0.0f, 1.0f, 2.0f), vec3<f32>(3.0f, 4.0f, 5.0f), vec3<f32>(6.0f, 7.0f, 8.0f))
   %out:ptr<storage, mat3x3<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat3x3<f32> = load %m
     %5:mat3x3<f32> = construct %4
-    store %out, %5
+    %6:void = call %tint_store_and_preserve_padding, %out, %5
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat3x3<f32>, read_write>, %value_param:mat3x3<f32>):void {
+  $B3: {
+    %10:ptr<storage, vec3<f32>, read_write> = access %target, 0u
+    %11:vec3<f32> = access %value_param, 0u
+    store %10, %11
+    %12:ptr<storage, vec3<f32>, read_write> = access %target, 1u
+    %13:vec3<f32> = access %value_param, 1u
+    store %12, %13
+    %14:ptr<storage, vec3<f32>, read_write> = access %target, 2u
+    %15:vec3<f32> = access %value_param, 2u
+    store %14, %15
     ret
   }
 }
diff --git a/test/tint/expressions/type_ctor/mat3x3/explicit/scalars/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat3x3/explicit/scalars/f16.wgsl.expected.ir.msl
index d9cf8a6..d193a29 100644
--- a/test/tint/expressions/type_ctor/mat3x3/explicit/scalars/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat3x3/explicit/scalars/f16.wgsl.expected.ir.msl
@@ -1,14 +1,28 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat3x3<f16>, read_write> = var, mat3x3<f16>(vec3<f16>(0.0h, 1.0h, 2.0h), vec3<f16>(3.0h, 4.0h, 5.0h), vec3<f16>(6.0h, 7.0h, 8.0h))
   %out:ptr<storage, mat3x3<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat3x3<f16> = load %m
-    store %out, %4
+    %5:void = call %tint_store_and_preserve_padding, %out, %4
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat3x3<f16>, read_write>, %value_param:mat3x3<f16>):void {
+  $B3: {
+    %9:ptr<storage, vec3<f16>, read_write> = access %target, 0u
+    %10:vec3<f16> = access %value_param, 0u
+    store %9, %10
+    %11:ptr<storage, vec3<f16>, read_write> = access %target, 1u
+    %12:vec3<f16> = access %value_param, 1u
+    store %11, %12
+    %13:ptr<storage, vec3<f16>, read_write> = access %target, 2u
+    %14:vec3<f16> = access %value_param, 2u
+    store %13, %14
     ret
   }
 }
diff --git a/test/tint/expressions/type_ctor/mat3x3/explicit/scalars/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat3x3/explicit/scalars/f32.wgsl.expected.ir.msl
index caa41f6..671fd01 100644
--- a/test/tint/expressions/type_ctor/mat3x3/explicit/scalars/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat3x3/explicit/scalars/f32.wgsl.expected.ir.msl
@@ -1,14 +1,28 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat3x3<f32>, read_write> = var, mat3x3<f32>(vec3<f32>(0.0f, 1.0f, 2.0f), vec3<f32>(3.0f, 4.0f, 5.0f), vec3<f32>(6.0f, 7.0f, 8.0f))
   %out:ptr<storage, mat3x3<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat3x3<f32> = load %m
-    store %out, %4
+    %5:void = call %tint_store_and_preserve_padding, %out, %4
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat3x3<f32>, read_write>, %value_param:mat3x3<f32>):void {
+  $B3: {
+    %9:ptr<storage, vec3<f32>, read_write> = access %target, 0u
+    %10:vec3<f32> = access %value_param, 0u
+    store %9, %10
+    %11:ptr<storage, vec3<f32>, read_write> = access %target, 1u
+    %12:vec3<f32> = access %value_param, 1u
+    store %11, %12
+    %13:ptr<storage, vec3<f32>, read_write> = access %target, 2u
+    %14:vec3<f32> = access %value_param, 2u
+    store %13, %14
     ret
   }
 }
diff --git a/test/tint/expressions/type_ctor/mat3x3/explicit/vectors/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat3x3/explicit/vectors/f16.wgsl.expected.ir.msl
index d9cf8a6..d193a29 100644
--- a/test/tint/expressions/type_ctor/mat3x3/explicit/vectors/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat3x3/explicit/vectors/f16.wgsl.expected.ir.msl
@@ -1,14 +1,28 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat3x3<f16>, read_write> = var, mat3x3<f16>(vec3<f16>(0.0h, 1.0h, 2.0h), vec3<f16>(3.0h, 4.0h, 5.0h), vec3<f16>(6.0h, 7.0h, 8.0h))
   %out:ptr<storage, mat3x3<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat3x3<f16> = load %m
-    store %out, %4
+    %5:void = call %tint_store_and_preserve_padding, %out, %4
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat3x3<f16>, read_write>, %value_param:mat3x3<f16>):void {
+  $B3: {
+    %9:ptr<storage, vec3<f16>, read_write> = access %target, 0u
+    %10:vec3<f16> = access %value_param, 0u
+    store %9, %10
+    %11:ptr<storage, vec3<f16>, read_write> = access %target, 1u
+    %12:vec3<f16> = access %value_param, 1u
+    store %11, %12
+    %13:ptr<storage, vec3<f16>, read_write> = access %target, 2u
+    %14:vec3<f16> = access %value_param, 2u
+    store %13, %14
     ret
   }
 }
diff --git a/test/tint/expressions/type_ctor/mat3x3/explicit/vectors/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat3x3/explicit/vectors/f32.wgsl.expected.ir.msl
index caa41f6..671fd01 100644
--- a/test/tint/expressions/type_ctor/mat3x3/explicit/vectors/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat3x3/explicit/vectors/f32.wgsl.expected.ir.msl
@@ -1,14 +1,28 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat3x3<f32>, read_write> = var, mat3x3<f32>(vec3<f32>(0.0f, 1.0f, 2.0f), vec3<f32>(3.0f, 4.0f, 5.0f), vec3<f32>(6.0f, 7.0f, 8.0f))
   %out:ptr<storage, mat3x3<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat3x3<f32> = load %m
-    store %out, %4
+    %5:void = call %tint_store_and_preserve_padding, %out, %4
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat3x3<f32>, read_write>, %value_param:mat3x3<f32>):void {
+  $B3: {
+    %9:ptr<storage, vec3<f32>, read_write> = access %target, 0u
+    %10:vec3<f32> = access %value_param, 0u
+    store %9, %10
+    %11:ptr<storage, vec3<f32>, read_write> = access %target, 1u
+    %12:vec3<f32> = access %value_param, 1u
+    store %11, %12
+    %13:ptr<storage, vec3<f32>, read_write> = access %target, 2u
+    %14:vec3<f32> = access %value_param, 2u
+    store %13, %14
     ret
   }
 }
diff --git a/test/tint/expressions/type_ctor/mat3x3/inferred/identity/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat3x3/inferred/identity/f16.wgsl.expected.ir.msl
index 9b9fcc7..713b725 100644
--- a/test/tint/expressions/type_ctor/mat3x3/inferred/identity/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat3x3/inferred/identity/f16.wgsl.expected.ir.msl
@@ -1,15 +1,29 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat3x3<f16>, read_write> = var, mat3x3<f16>(vec3<f16>(0.0h, 1.0h, 2.0h), vec3<f16>(3.0h, 4.0h, 5.0h), vec3<f16>(6.0h, 7.0h, 8.0h))
   %out:ptr<storage, mat3x3<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat3x3<f16> = load %m
     %5:mat3x3<f16> = construct %4
-    store %out, %5
+    %6:void = call %tint_store_and_preserve_padding, %out, %5
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat3x3<f16>, read_write>, %value_param:mat3x3<f16>):void {
+  $B3: {
+    %10:ptr<storage, vec3<f16>, read_write> = access %target, 0u
+    %11:vec3<f16> = access %value_param, 0u
+    store %10, %11
+    %12:ptr<storage, vec3<f16>, read_write> = access %target, 1u
+    %13:vec3<f16> = access %value_param, 1u
+    store %12, %13
+    %14:ptr<storage, vec3<f16>, read_write> = access %target, 2u
+    %15:vec3<f16> = access %value_param, 2u
+    store %14, %15
     ret
   }
 }
diff --git a/test/tint/expressions/type_ctor/mat3x3/inferred/identity/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat3x3/inferred/identity/f32.wgsl.expected.ir.msl
index 0962c0c..b261ad3 100644
--- a/test/tint/expressions/type_ctor/mat3x3/inferred/identity/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat3x3/inferred/identity/f32.wgsl.expected.ir.msl
@@ -1,15 +1,29 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat3x3<f32>, read_write> = var, mat3x3<f32>(vec3<f32>(0.0f, 1.0f, 2.0f), vec3<f32>(3.0f, 4.0f, 5.0f), vec3<f32>(6.0f, 7.0f, 8.0f))
   %out:ptr<storage, mat3x3<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat3x3<f32> = load %m
     %5:mat3x3<f32> = construct %4
-    store %out, %5
+    %6:void = call %tint_store_and_preserve_padding, %out, %5
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat3x3<f32>, read_write>, %value_param:mat3x3<f32>):void {
+  $B3: {
+    %10:ptr<storage, vec3<f32>, read_write> = access %target, 0u
+    %11:vec3<f32> = access %value_param, 0u
+    store %10, %11
+    %12:ptr<storage, vec3<f32>, read_write> = access %target, 1u
+    %13:vec3<f32> = access %value_param, 1u
+    store %12, %13
+    %14:ptr<storage, vec3<f32>, read_write> = access %target, 2u
+    %15:vec3<f32> = access %value_param, 2u
+    store %14, %15
     ret
   }
 }
diff --git a/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/abstract-float.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/abstract-float.wgsl.expected.ir.msl
index d2f234f..d51d719 100644
--- a/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/abstract-float.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/abstract-float.wgsl.expected.ir.msl
@@ -1,12 +1,26 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %out:ptr<storage, mat3x3<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    store %out, mat3x3<f32>(vec3<f32>(0.0f, 1.0f, 2.0f), vec3<f32>(3.0f, 4.0f, 5.0f), vec3<f32>(6.0f, 7.0f, 8.0f))
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %3:void = call %tint_store_and_preserve_padding, %out, mat3x3<f32>(vec3<f32>(0.0f, 1.0f, 2.0f), vec3<f32>(3.0f, 4.0f, 5.0f), vec3<f32>(6.0f, 7.0f, 8.0f))
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat3x3<f32>, read_write>, %value_param:mat3x3<f32>):void {
+  $B3: {
+    %7:ptr<storage, vec3<f32>, read_write> = access %target, 0u
+    %8:vec3<f32> = access %value_param, 0u
+    store %7, %8
+    %9:ptr<storage, vec3<f32>, read_write> = access %target, 1u
+    %10:vec3<f32> = access %value_param, 1u
+    store %9, %10
+    %11:ptr<storage, vec3<f32>, read_write> = access %target, 2u
+    %12:vec3<f32> = access %value_param, 2u
+    store %11, %12
     ret
   }
 }
diff --git a/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/f16.wgsl.expected.ir.msl
index d9cf8a6..d193a29 100644
--- a/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/f16.wgsl.expected.ir.msl
@@ -1,14 +1,28 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat3x3<f16>, read_write> = var, mat3x3<f16>(vec3<f16>(0.0h, 1.0h, 2.0h), vec3<f16>(3.0h, 4.0h, 5.0h), vec3<f16>(6.0h, 7.0h, 8.0h))
   %out:ptr<storage, mat3x3<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat3x3<f16> = load %m
-    store %out, %4
+    %5:void = call %tint_store_and_preserve_padding, %out, %4
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat3x3<f16>, read_write>, %value_param:mat3x3<f16>):void {
+  $B3: {
+    %9:ptr<storage, vec3<f16>, read_write> = access %target, 0u
+    %10:vec3<f16> = access %value_param, 0u
+    store %9, %10
+    %11:ptr<storage, vec3<f16>, read_write> = access %target, 1u
+    %12:vec3<f16> = access %value_param, 1u
+    store %11, %12
+    %13:ptr<storage, vec3<f16>, read_write> = access %target, 2u
+    %14:vec3<f16> = access %value_param, 2u
+    store %13, %14
     ret
   }
 }
diff --git a/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/f32.wgsl.expected.ir.msl
index caa41f6..671fd01 100644
--- a/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat3x3/inferred/scalars/f32.wgsl.expected.ir.msl
@@ -1,14 +1,28 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat3x3<f32>, read_write> = var, mat3x3<f32>(vec3<f32>(0.0f, 1.0f, 2.0f), vec3<f32>(3.0f, 4.0f, 5.0f), vec3<f32>(6.0f, 7.0f, 8.0f))
   %out:ptr<storage, mat3x3<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat3x3<f32> = load %m
-    store %out, %4
+    %5:void = call %tint_store_and_preserve_padding, %out, %4
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat3x3<f32>, read_write>, %value_param:mat3x3<f32>):void {
+  $B3: {
+    %9:ptr<storage, vec3<f32>, read_write> = access %target, 0u
+    %10:vec3<f32> = access %value_param, 0u
+    store %9, %10
+    %11:ptr<storage, vec3<f32>, read_write> = access %target, 1u
+    %12:vec3<f32> = access %value_param, 1u
+    store %11, %12
+    %13:ptr<storage, vec3<f32>, read_write> = access %target, 2u
+    %14:vec3<f32> = access %value_param, 2u
+    store %13, %14
     ret
   }
 }
diff --git a/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/abstract-float.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/abstract-float.wgsl.expected.ir.msl
index d2f234f..d51d719 100644
--- a/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/abstract-float.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/abstract-float.wgsl.expected.ir.msl
@@ -1,12 +1,26 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %out:ptr<storage, mat3x3<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    store %out, mat3x3<f32>(vec3<f32>(0.0f, 1.0f, 2.0f), vec3<f32>(3.0f, 4.0f, 5.0f), vec3<f32>(6.0f, 7.0f, 8.0f))
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %3:void = call %tint_store_and_preserve_padding, %out, mat3x3<f32>(vec3<f32>(0.0f, 1.0f, 2.0f), vec3<f32>(3.0f, 4.0f, 5.0f), vec3<f32>(6.0f, 7.0f, 8.0f))
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat3x3<f32>, read_write>, %value_param:mat3x3<f32>):void {
+  $B3: {
+    %7:ptr<storage, vec3<f32>, read_write> = access %target, 0u
+    %8:vec3<f32> = access %value_param, 0u
+    store %7, %8
+    %9:ptr<storage, vec3<f32>, read_write> = access %target, 1u
+    %10:vec3<f32> = access %value_param, 1u
+    store %9, %10
+    %11:ptr<storage, vec3<f32>, read_write> = access %target, 2u
+    %12:vec3<f32> = access %value_param, 2u
+    store %11, %12
     ret
   }
 }
diff --git a/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/f16.wgsl.expected.ir.msl
index d9cf8a6..d193a29 100644
--- a/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/f16.wgsl.expected.ir.msl
@@ -1,14 +1,28 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat3x3<f16>, read_write> = var, mat3x3<f16>(vec3<f16>(0.0h, 1.0h, 2.0h), vec3<f16>(3.0h, 4.0h, 5.0h), vec3<f16>(6.0h, 7.0h, 8.0h))
   %out:ptr<storage, mat3x3<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat3x3<f16> = load %m
-    store %out, %4
+    %5:void = call %tint_store_and_preserve_padding, %out, %4
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat3x3<f16>, read_write>, %value_param:mat3x3<f16>):void {
+  $B3: {
+    %9:ptr<storage, vec3<f16>, read_write> = access %target, 0u
+    %10:vec3<f16> = access %value_param, 0u
+    store %9, %10
+    %11:ptr<storage, vec3<f16>, read_write> = access %target, 1u
+    %12:vec3<f16> = access %value_param, 1u
+    store %11, %12
+    %13:ptr<storage, vec3<f16>, read_write> = access %target, 2u
+    %14:vec3<f16> = access %value_param, 2u
+    store %13, %14
     ret
   }
 }
diff --git a/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/f32.wgsl.expected.ir.msl
index caa41f6..671fd01 100644
--- a/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat3x3/inferred/vectors/f32.wgsl.expected.ir.msl
@@ -1,14 +1,28 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat3x3<f32>, read_write> = var, mat3x3<f32>(vec3<f32>(0.0f, 1.0f, 2.0f), vec3<f32>(3.0f, 4.0f, 5.0f), vec3<f32>(6.0f, 7.0f, 8.0f))
   %out:ptr<storage, mat3x3<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat3x3<f32> = load %m
-    store %out, %4
+    %5:void = call %tint_store_and_preserve_padding, %out, %4
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat3x3<f32>, read_write>, %value_param:mat3x3<f32>):void {
+  $B3: {
+    %9:ptr<storage, vec3<f32>, read_write> = access %target, 0u
+    %10:vec3<f32> = access %value_param, 0u
+    store %9, %10
+    %11:ptr<storage, vec3<f32>, read_write> = access %target, 1u
+    %12:vec3<f32> = access %value_param, 1u
+    store %11, %12
+    %13:ptr<storage, vec3<f32>, read_write> = access %target, 2u
+    %14:vec3<f32> = access %value_param, 2u
+    store %13, %14
     ret
   }
 }
diff --git a/test/tint/expressions/type_ctor/mat3x3/load/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat3x3/load/f16.wgsl.expected.ir.msl
index 58fa955..2d84436 100644
--- a/test/tint/expressions/type_ctor/mat3x3/load/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat3x3/load/f16.wgsl.expected.ir.msl
@@ -1,15 +1,29 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %out:ptr<storage, mat3x3<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %m:ptr<function, mat3x3<f16>, read_write> = var, mat3x3<f16>(vec3<f16>(0.0h))
     %4:mat3x3<f16> = load %m
     %5:mat3x3<f16> = construct %4
-    store %out, %5
+    %6:void = call %tint_store_and_preserve_padding, %out, %5
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat3x3<f16>, read_write>, %value_param:mat3x3<f16>):void {
+  $B3: {
+    %10:ptr<storage, vec3<f16>, read_write> = access %target, 0u
+    %11:vec3<f16> = access %value_param, 0u
+    store %10, %11
+    %12:ptr<storage, vec3<f16>, read_write> = access %target, 1u
+    %13:vec3<f16> = access %value_param, 1u
+    store %12, %13
+    %14:ptr<storage, vec3<f16>, read_write> = access %target, 2u
+    %15:vec3<f16> = access %value_param, 2u
+    store %14, %15
     ret
   }
 }
diff --git a/test/tint/expressions/type_ctor/mat3x3/load/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat3x3/load/f32.wgsl.expected.ir.msl
index fc07dc5..4835e49 100644
--- a/test/tint/expressions/type_ctor/mat3x3/load/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat3x3/load/f32.wgsl.expected.ir.msl
@@ -1,15 +1,29 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %out:ptr<storage, mat3x3<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %m:ptr<function, mat3x3<f32>, read_write> = var, mat3x3<f32>(vec3<f32>(0.0f))
     %4:mat3x3<f32> = load %m
     %5:mat3x3<f32> = construct %4
-    store %out, %5
+    %6:void = call %tint_store_and_preserve_padding, %out, %5
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat3x3<f32>, read_write>, %value_param:mat3x3<f32>):void {
+  $B3: {
+    %10:ptr<storage, vec3<f32>, read_write> = access %target, 0u
+    %11:vec3<f32> = access %value_param, 0u
+    store %10, %11
+    %12:ptr<storage, vec3<f32>, read_write> = access %target, 1u
+    %13:vec3<f32> = access %value_param, 1u
+    store %12, %13
+    %14:ptr<storage, vec3<f32>, read_write> = access %target, 2u
+    %15:vec3<f32> = access %value_param, 2u
+    store %14, %15
     ret
   }
 }
diff --git a/test/tint/expressions/type_ctor/mat3x3/zero/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat3x3/zero/f16.wgsl.expected.ir.msl
index 8bf3ec3..6aaeeca 100644
--- a/test/tint/expressions/type_ctor/mat3x3/zero/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat3x3/zero/f16.wgsl.expected.ir.msl
@@ -1,14 +1,28 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat3x3<f16>, read_write> = var, mat3x3<f16>(vec3<f16>(0.0h))
   %out:ptr<storage, mat3x3<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat3x3<f16> = load %m
-    store %out, %4
+    %5:void = call %tint_store_and_preserve_padding, %out, %4
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat3x3<f16>, read_write>, %value_param:mat3x3<f16>):void {
+  $B3: {
+    %9:ptr<storage, vec3<f16>, read_write> = access %target, 0u
+    %10:vec3<f16> = access %value_param, 0u
+    store %9, %10
+    %11:ptr<storage, vec3<f16>, read_write> = access %target, 1u
+    %12:vec3<f16> = access %value_param, 1u
+    store %11, %12
+    %13:ptr<storage, vec3<f16>, read_write> = access %target, 2u
+    %14:vec3<f16> = access %value_param, 2u
+    store %13, %14
     ret
   }
 }
diff --git a/test/tint/expressions/type_ctor/mat3x3/zero/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat3x3/zero/f32.wgsl.expected.ir.msl
index e1c1c6e..4b7f717 100644
--- a/test/tint/expressions/type_ctor/mat3x3/zero/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat3x3/zero/f32.wgsl.expected.ir.msl
@@ -1,14 +1,28 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat3x3<f32>, read_write> = var, mat3x3<f32>(vec3<f32>(0.0f))
   %out:ptr<storage, mat3x3<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat3x3<f32> = load %m
-    store %out, %4
+    %5:void = call %tint_store_and_preserve_padding, %out, %4
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat3x3<f32>, read_write>, %value_param:mat3x3<f32>):void {
+  $B3: {
+    %9:ptr<storage, vec3<f32>, read_write> = access %target, 0u
+    %10:vec3<f32> = access %value_param, 0u
+    store %9, %10
+    %11:ptr<storage, vec3<f32>, read_write> = access %target, 1u
+    %12:vec3<f32> = access %value_param, 1u
+    store %11, %12
+    %13:ptr<storage, vec3<f32>, read_write> = access %target, 2u
+    %14:vec3<f32> = access %value_param, 2u
+    store %13, %14
     ret
   }
 }
diff --git a/test/tint/expressions/type_ctor/mat3x4/explicit/identity/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat3x4/explicit/identity/f16.wgsl.expected.ir.msl
index abd23cb..b2749f3 100644
--- a/test/tint/expressions/type_ctor/mat3x4/explicit/identity/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat3x4/explicit/identity/f16.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat3x4<f16>, read_write> = var, mat3x4<f16>(vec4<f16>(0.0h, 1.0h, 2.0h, 3.0h), vec4<f16>(4.0h, 5.0h, 6.0h, 7.0h), vec4<f16>(8.0h, 9.0h, 10.0h, 11.0h))
   %out:ptr<storage, mat3x4<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat3x4<f16> = load %m
     %5:mat3x4<f16> = construct %4
     store %out, %5
diff --git a/test/tint/expressions/type_ctor/mat3x4/explicit/identity/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat3x4/explicit/identity/f32.wgsl.expected.ir.msl
index 2ad890b..bfad518 100644
--- a/test/tint/expressions/type_ctor/mat3x4/explicit/identity/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat3x4/explicit/identity/f32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat3x4<f32>, read_write> = var, mat3x4<f32>(vec4<f32>(0.0f, 1.0f, 2.0f, 3.0f), vec4<f32>(4.0f, 5.0f, 6.0f, 7.0f), vec4<f32>(8.0f, 9.0f, 10.0f, 11.0f))
   %out:ptr<storage, mat3x4<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat3x4<f32> = load %m
     %5:mat3x4<f32> = construct %4
     store %out, %5
diff --git a/test/tint/expressions/type_ctor/mat3x4/explicit/scalars/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat3x4/explicit/scalars/f16.wgsl.expected.ir.msl
index 835ab69..622dcd5 100644
--- a/test/tint/expressions/type_ctor/mat3x4/explicit/scalars/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat3x4/explicit/scalars/f16.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat3x4<f16>, read_write> = var, mat3x4<f16>(vec4<f16>(0.0h, 1.0h, 2.0h, 3.0h), vec4<f16>(4.0h, 5.0h, 6.0h, 7.0h), vec4<f16>(8.0h, 9.0h, 10.0h, 11.0h))
   %out:ptr<storage, mat3x4<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat3x4<f16> = load %m
     store %out, %4
     ret
diff --git a/test/tint/expressions/type_ctor/mat3x4/explicit/scalars/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat3x4/explicit/scalars/f32.wgsl.expected.ir.msl
index 581b29f..eabe5e4 100644
--- a/test/tint/expressions/type_ctor/mat3x4/explicit/scalars/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat3x4/explicit/scalars/f32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat3x4<f32>, read_write> = var, mat3x4<f32>(vec4<f32>(0.0f, 1.0f, 2.0f, 3.0f), vec4<f32>(4.0f, 5.0f, 6.0f, 7.0f), vec4<f32>(8.0f, 9.0f, 10.0f, 11.0f))
   %out:ptr<storage, mat3x4<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat3x4<f32> = load %m
     store %out, %4
     ret
diff --git a/test/tint/expressions/type_ctor/mat3x4/explicit/vectors/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat3x4/explicit/vectors/f16.wgsl.expected.ir.msl
index 835ab69..622dcd5 100644
--- a/test/tint/expressions/type_ctor/mat3x4/explicit/vectors/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat3x4/explicit/vectors/f16.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat3x4<f16>, read_write> = var, mat3x4<f16>(vec4<f16>(0.0h, 1.0h, 2.0h, 3.0h), vec4<f16>(4.0h, 5.0h, 6.0h, 7.0h), vec4<f16>(8.0h, 9.0h, 10.0h, 11.0h))
   %out:ptr<storage, mat3x4<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat3x4<f16> = load %m
     store %out, %4
     ret
diff --git a/test/tint/expressions/type_ctor/mat3x4/explicit/vectors/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat3x4/explicit/vectors/f32.wgsl.expected.ir.msl
index 581b29f..eabe5e4 100644
--- a/test/tint/expressions/type_ctor/mat3x4/explicit/vectors/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat3x4/explicit/vectors/f32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat3x4<f32>, read_write> = var, mat3x4<f32>(vec4<f32>(0.0f, 1.0f, 2.0f, 3.0f), vec4<f32>(4.0f, 5.0f, 6.0f, 7.0f), vec4<f32>(8.0f, 9.0f, 10.0f, 11.0f))
   %out:ptr<storage, mat3x4<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat3x4<f32> = load %m
     store %out, %4
     ret
diff --git a/test/tint/expressions/type_ctor/mat3x4/inferred/identity/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat3x4/inferred/identity/f16.wgsl.expected.ir.msl
index abd23cb..b2749f3 100644
--- a/test/tint/expressions/type_ctor/mat3x4/inferred/identity/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat3x4/inferred/identity/f16.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat3x4<f16>, read_write> = var, mat3x4<f16>(vec4<f16>(0.0h, 1.0h, 2.0h, 3.0h), vec4<f16>(4.0h, 5.0h, 6.0h, 7.0h), vec4<f16>(8.0h, 9.0h, 10.0h, 11.0h))
   %out:ptr<storage, mat3x4<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat3x4<f16> = load %m
     %5:mat3x4<f16> = construct %4
     store %out, %5
diff --git a/test/tint/expressions/type_ctor/mat3x4/inferred/identity/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat3x4/inferred/identity/f32.wgsl.expected.ir.msl
index 2ad890b..bfad518 100644
--- a/test/tint/expressions/type_ctor/mat3x4/inferred/identity/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat3x4/inferred/identity/f32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat3x4<f32>, read_write> = var, mat3x4<f32>(vec4<f32>(0.0f, 1.0f, 2.0f, 3.0f), vec4<f32>(4.0f, 5.0f, 6.0f, 7.0f), vec4<f32>(8.0f, 9.0f, 10.0f, 11.0f))
   %out:ptr<storage, mat3x4<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat3x4<f32> = load %m
     %5:mat3x4<f32> = construct %4
     store %out, %5
diff --git a/test/tint/expressions/type_ctor/mat3x4/inferred/scalars/abstract-float.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat3x4/inferred/scalars/abstract-float.wgsl.expected.ir.msl
index 2c7b060..ba5564e 100644
--- a/test/tint/expressions/type_ctor/mat3x4/inferred/scalars/abstract-float.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat3x4/inferred/scalars/abstract-float.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %out:ptr<storage, mat3x4<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     store %out, mat3x4<f32>(vec4<f32>(0.0f, 1.0f, 2.0f, 3.0f), vec4<f32>(4.0f, 5.0f, 6.0f, 7.0f), vec4<f32>(8.0f, 9.0f, 10.0f, 11.0f))
     ret
   }
diff --git a/test/tint/expressions/type_ctor/mat3x4/inferred/scalars/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat3x4/inferred/scalars/f16.wgsl.expected.ir.msl
index 835ab69..622dcd5 100644
--- a/test/tint/expressions/type_ctor/mat3x4/inferred/scalars/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat3x4/inferred/scalars/f16.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat3x4<f16>, read_write> = var, mat3x4<f16>(vec4<f16>(0.0h, 1.0h, 2.0h, 3.0h), vec4<f16>(4.0h, 5.0h, 6.0h, 7.0h), vec4<f16>(8.0h, 9.0h, 10.0h, 11.0h))
   %out:ptr<storage, mat3x4<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat3x4<f16> = load %m
     store %out, %4
     ret
diff --git a/test/tint/expressions/type_ctor/mat3x4/inferred/scalars/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat3x4/inferred/scalars/f32.wgsl.expected.ir.msl
index 581b29f..eabe5e4 100644
--- a/test/tint/expressions/type_ctor/mat3x4/inferred/scalars/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat3x4/inferred/scalars/f32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat3x4<f32>, read_write> = var, mat3x4<f32>(vec4<f32>(0.0f, 1.0f, 2.0f, 3.0f), vec4<f32>(4.0f, 5.0f, 6.0f, 7.0f), vec4<f32>(8.0f, 9.0f, 10.0f, 11.0f))
   %out:ptr<storage, mat3x4<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat3x4<f32> = load %m
     store %out, %4
     ret
diff --git a/test/tint/expressions/type_ctor/mat3x4/inferred/vectors/abstract-float.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat3x4/inferred/vectors/abstract-float.wgsl.expected.ir.msl
index 2c7b060..ba5564e 100644
--- a/test/tint/expressions/type_ctor/mat3x4/inferred/vectors/abstract-float.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat3x4/inferred/vectors/abstract-float.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %out:ptr<storage, mat3x4<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     store %out, mat3x4<f32>(vec4<f32>(0.0f, 1.0f, 2.0f, 3.0f), vec4<f32>(4.0f, 5.0f, 6.0f, 7.0f), vec4<f32>(8.0f, 9.0f, 10.0f, 11.0f))
     ret
   }
diff --git a/test/tint/expressions/type_ctor/mat3x4/inferred/vectors/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat3x4/inferred/vectors/f16.wgsl.expected.ir.msl
index 835ab69..622dcd5 100644
--- a/test/tint/expressions/type_ctor/mat3x4/inferred/vectors/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat3x4/inferred/vectors/f16.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat3x4<f16>, read_write> = var, mat3x4<f16>(vec4<f16>(0.0h, 1.0h, 2.0h, 3.0h), vec4<f16>(4.0h, 5.0h, 6.0h, 7.0h), vec4<f16>(8.0h, 9.0h, 10.0h, 11.0h))
   %out:ptr<storage, mat3x4<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat3x4<f16> = load %m
     store %out, %4
     ret
diff --git a/test/tint/expressions/type_ctor/mat3x4/inferred/vectors/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat3x4/inferred/vectors/f32.wgsl.expected.ir.msl
index 581b29f..eabe5e4 100644
--- a/test/tint/expressions/type_ctor/mat3x4/inferred/vectors/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat3x4/inferred/vectors/f32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat3x4<f32>, read_write> = var, mat3x4<f32>(vec4<f32>(0.0f, 1.0f, 2.0f, 3.0f), vec4<f32>(4.0f, 5.0f, 6.0f, 7.0f), vec4<f32>(8.0f, 9.0f, 10.0f, 11.0f))
   %out:ptr<storage, mat3x4<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat3x4<f32> = load %m
     store %out, %4
     ret
diff --git a/test/tint/expressions/type_ctor/mat3x4/load/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat3x4/load/f16.wgsl.expected.ir.msl
index 7892ddd..eee4a1e 100644
--- a/test/tint/expressions/type_ctor/mat3x4/load/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat3x4/load/f16.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %out:ptr<storage, mat3x4<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %m:ptr<function, mat3x4<f16>, read_write> = var, mat3x4<f16>(vec4<f16>(0.0h))
     %4:mat3x4<f16> = load %m
     %5:mat3x4<f16> = construct %4
diff --git a/test/tint/expressions/type_ctor/mat3x4/load/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat3x4/load/f32.wgsl.expected.ir.msl
index 3e168ef..0a1a884 100644
--- a/test/tint/expressions/type_ctor/mat3x4/load/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat3x4/load/f32.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %out:ptr<storage, mat3x4<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %m:ptr<function, mat3x4<f32>, read_write> = var, mat3x4<f32>(vec4<f32>(0.0f))
     %4:mat3x4<f32> = load %m
     %5:mat3x4<f32> = construct %4
diff --git a/test/tint/expressions/type_ctor/mat3x4/zero/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat3x4/zero/f16.wgsl.expected.ir.msl
index 400ec40..02d09d0 100644
--- a/test/tint/expressions/type_ctor/mat3x4/zero/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat3x4/zero/f16.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat3x4<f16>, read_write> = var, mat3x4<f16>(vec4<f16>(0.0h))
   %out:ptr<storage, mat3x4<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat3x4<f16> = load %m
     store %out, %4
     ret
diff --git a/test/tint/expressions/type_ctor/mat3x4/zero/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat3x4/zero/f32.wgsl.expected.ir.msl
index 011460f..cdc34e6 100644
--- a/test/tint/expressions/type_ctor/mat3x4/zero/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat3x4/zero/f32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat3x4<f32>, read_write> = var, mat3x4<f32>(vec4<f32>(0.0f))
   %out:ptr<storage, mat3x4<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat3x4<f32> = load %m
     store %out, %4
     ret
diff --git a/test/tint/expressions/type_ctor/mat4x2/explicit/identity/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat4x2/explicit/identity/f16.wgsl.expected.ir.msl
index c4a58925..838e0cf 100644
--- a/test/tint/expressions/type_ctor/mat4x2/explicit/identity/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat4x2/explicit/identity/f16.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat4x2<f16>, read_write> = var, mat4x2<f16>(vec2<f16>(0.0h, 1.0h), vec2<f16>(2.0h, 3.0h), vec2<f16>(4.0h, 5.0h), vec2<f16>(6.0h, 7.0h))
   %out:ptr<storage, mat4x2<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat4x2<f16> = load %m
     %5:mat4x2<f16> = construct %4
     store %out, %5
diff --git a/test/tint/expressions/type_ctor/mat4x2/explicit/identity/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat4x2/explicit/identity/f32.wgsl.expected.ir.msl
index 27c966d..635f09a 100644
--- a/test/tint/expressions/type_ctor/mat4x2/explicit/identity/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat4x2/explicit/identity/f32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat4x2<f32>, read_write> = var, mat4x2<f32>(vec2<f32>(0.0f, 1.0f), vec2<f32>(2.0f, 3.0f), vec2<f32>(4.0f, 5.0f), vec2<f32>(6.0f, 7.0f))
   %out:ptr<storage, mat4x2<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat4x2<f32> = load %m
     %5:mat4x2<f32> = construct %4
     store %out, %5
diff --git a/test/tint/expressions/type_ctor/mat4x2/explicit/scalars/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat4x2/explicit/scalars/f16.wgsl.expected.ir.msl
index d6cf5fd..2a6e7ab 100644
--- a/test/tint/expressions/type_ctor/mat4x2/explicit/scalars/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat4x2/explicit/scalars/f16.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat4x2<f16>, read_write> = var, mat4x2<f16>(vec2<f16>(0.0h, 1.0h), vec2<f16>(2.0h, 3.0h), vec2<f16>(4.0h, 5.0h), vec2<f16>(6.0h, 7.0h))
   %out:ptr<storage, mat4x2<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat4x2<f16> = load %m
     store %out, %4
     ret
diff --git a/test/tint/expressions/type_ctor/mat4x2/explicit/scalars/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat4x2/explicit/scalars/f32.wgsl.expected.ir.msl
index 8bc52e2..aa889aa 100644
--- a/test/tint/expressions/type_ctor/mat4x2/explicit/scalars/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat4x2/explicit/scalars/f32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat4x2<f32>, read_write> = var, mat4x2<f32>(vec2<f32>(0.0f, 1.0f), vec2<f32>(2.0f, 3.0f), vec2<f32>(4.0f, 5.0f), vec2<f32>(6.0f, 7.0f))
   %out:ptr<storage, mat4x2<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat4x2<f32> = load %m
     store %out, %4
     ret
diff --git a/test/tint/expressions/type_ctor/mat4x2/explicit/vectors/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat4x2/explicit/vectors/f16.wgsl.expected.ir.msl
index d6cf5fd..2a6e7ab 100644
--- a/test/tint/expressions/type_ctor/mat4x2/explicit/vectors/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat4x2/explicit/vectors/f16.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat4x2<f16>, read_write> = var, mat4x2<f16>(vec2<f16>(0.0h, 1.0h), vec2<f16>(2.0h, 3.0h), vec2<f16>(4.0h, 5.0h), vec2<f16>(6.0h, 7.0h))
   %out:ptr<storage, mat4x2<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat4x2<f16> = load %m
     store %out, %4
     ret
diff --git a/test/tint/expressions/type_ctor/mat4x2/explicit/vectors/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat4x2/explicit/vectors/f32.wgsl.expected.ir.msl
index 8bc52e2..aa889aa 100644
--- a/test/tint/expressions/type_ctor/mat4x2/explicit/vectors/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat4x2/explicit/vectors/f32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat4x2<f32>, read_write> = var, mat4x2<f32>(vec2<f32>(0.0f, 1.0f), vec2<f32>(2.0f, 3.0f), vec2<f32>(4.0f, 5.0f), vec2<f32>(6.0f, 7.0f))
   %out:ptr<storage, mat4x2<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat4x2<f32> = load %m
     store %out, %4
     ret
diff --git a/test/tint/expressions/type_ctor/mat4x2/inferred/identity/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat4x2/inferred/identity/f16.wgsl.expected.ir.msl
index c4a58925..838e0cf 100644
--- a/test/tint/expressions/type_ctor/mat4x2/inferred/identity/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat4x2/inferred/identity/f16.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat4x2<f16>, read_write> = var, mat4x2<f16>(vec2<f16>(0.0h, 1.0h), vec2<f16>(2.0h, 3.0h), vec2<f16>(4.0h, 5.0h), vec2<f16>(6.0h, 7.0h))
   %out:ptr<storage, mat4x2<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat4x2<f16> = load %m
     %5:mat4x2<f16> = construct %4
     store %out, %5
diff --git a/test/tint/expressions/type_ctor/mat4x2/inferred/identity/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat4x2/inferred/identity/f32.wgsl.expected.ir.msl
index 27c966d..635f09a 100644
--- a/test/tint/expressions/type_ctor/mat4x2/inferred/identity/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat4x2/inferred/identity/f32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat4x2<f32>, read_write> = var, mat4x2<f32>(vec2<f32>(0.0f, 1.0f), vec2<f32>(2.0f, 3.0f), vec2<f32>(4.0f, 5.0f), vec2<f32>(6.0f, 7.0f))
   %out:ptr<storage, mat4x2<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat4x2<f32> = load %m
     %5:mat4x2<f32> = construct %4
     store %out, %5
diff --git a/test/tint/expressions/type_ctor/mat4x2/inferred/scalars/abstract-float.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat4x2/inferred/scalars/abstract-float.wgsl.expected.ir.msl
index 2e06ac1..343fbe3 100644
--- a/test/tint/expressions/type_ctor/mat4x2/inferred/scalars/abstract-float.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat4x2/inferred/scalars/abstract-float.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %out:ptr<storage, mat4x2<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     store %out, mat4x2<f32>(vec2<f32>(0.0f, 1.0f), vec2<f32>(2.0f, 3.0f), vec2<f32>(4.0f, 5.0f), vec2<f32>(6.0f, 7.0f))
     ret
   }
diff --git a/test/tint/expressions/type_ctor/mat4x2/inferred/scalars/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat4x2/inferred/scalars/f16.wgsl.expected.ir.msl
index d6cf5fd..2a6e7ab 100644
--- a/test/tint/expressions/type_ctor/mat4x2/inferred/scalars/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat4x2/inferred/scalars/f16.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat4x2<f16>, read_write> = var, mat4x2<f16>(vec2<f16>(0.0h, 1.0h), vec2<f16>(2.0h, 3.0h), vec2<f16>(4.0h, 5.0h), vec2<f16>(6.0h, 7.0h))
   %out:ptr<storage, mat4x2<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat4x2<f16> = load %m
     store %out, %4
     ret
diff --git a/test/tint/expressions/type_ctor/mat4x2/inferred/scalars/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat4x2/inferred/scalars/f32.wgsl.expected.ir.msl
index 8bc52e2..aa889aa 100644
--- a/test/tint/expressions/type_ctor/mat4x2/inferred/scalars/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat4x2/inferred/scalars/f32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat4x2<f32>, read_write> = var, mat4x2<f32>(vec2<f32>(0.0f, 1.0f), vec2<f32>(2.0f, 3.0f), vec2<f32>(4.0f, 5.0f), vec2<f32>(6.0f, 7.0f))
   %out:ptr<storage, mat4x2<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat4x2<f32> = load %m
     store %out, %4
     ret
diff --git a/test/tint/expressions/type_ctor/mat4x2/inferred/vectors/abstract-float.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat4x2/inferred/vectors/abstract-float.wgsl.expected.ir.msl
index 2e06ac1..343fbe3 100644
--- a/test/tint/expressions/type_ctor/mat4x2/inferred/vectors/abstract-float.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat4x2/inferred/vectors/abstract-float.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %out:ptr<storage, mat4x2<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     store %out, mat4x2<f32>(vec2<f32>(0.0f, 1.0f), vec2<f32>(2.0f, 3.0f), vec2<f32>(4.0f, 5.0f), vec2<f32>(6.0f, 7.0f))
     ret
   }
diff --git a/test/tint/expressions/type_ctor/mat4x2/inferred/vectors/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat4x2/inferred/vectors/f16.wgsl.expected.ir.msl
index d6cf5fd..2a6e7ab 100644
--- a/test/tint/expressions/type_ctor/mat4x2/inferred/vectors/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat4x2/inferred/vectors/f16.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat4x2<f16>, read_write> = var, mat4x2<f16>(vec2<f16>(0.0h, 1.0h), vec2<f16>(2.0h, 3.0h), vec2<f16>(4.0h, 5.0h), vec2<f16>(6.0h, 7.0h))
   %out:ptr<storage, mat4x2<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat4x2<f16> = load %m
     store %out, %4
     ret
diff --git a/test/tint/expressions/type_ctor/mat4x2/inferred/vectors/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat4x2/inferred/vectors/f32.wgsl.expected.ir.msl
index 8bc52e2..aa889aa 100644
--- a/test/tint/expressions/type_ctor/mat4x2/inferred/vectors/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat4x2/inferred/vectors/f32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat4x2<f32>, read_write> = var, mat4x2<f32>(vec2<f32>(0.0f, 1.0f), vec2<f32>(2.0f, 3.0f), vec2<f32>(4.0f, 5.0f), vec2<f32>(6.0f, 7.0f))
   %out:ptr<storage, mat4x2<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat4x2<f32> = load %m
     store %out, %4
     ret
diff --git a/test/tint/expressions/type_ctor/mat4x2/load/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat4x2/load/f16.wgsl.expected.ir.msl
index 651d527..588c5c4 100644
--- a/test/tint/expressions/type_ctor/mat4x2/load/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat4x2/load/f16.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %out:ptr<storage, mat4x2<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %m:ptr<function, mat4x2<f16>, read_write> = var, mat4x2<f16>(vec2<f16>(0.0h))
     %4:mat4x2<f16> = load %m
     %5:mat4x2<f16> = construct %4
diff --git a/test/tint/expressions/type_ctor/mat4x2/load/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat4x2/load/f32.wgsl.expected.ir.msl
index 1ad8293..de58a0b 100644
--- a/test/tint/expressions/type_ctor/mat4x2/load/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat4x2/load/f32.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %out:ptr<storage, mat4x2<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %m:ptr<function, mat4x2<f32>, read_write> = var, mat4x2<f32>(vec2<f32>(0.0f))
     %4:mat4x2<f32> = load %m
     %5:mat4x2<f32> = construct %4
diff --git a/test/tint/expressions/type_ctor/mat4x2/zero/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat4x2/zero/f16.wgsl.expected.ir.msl
index 7b6b4bc..f6160a4 100644
--- a/test/tint/expressions/type_ctor/mat4x2/zero/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat4x2/zero/f16.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat4x2<f16>, read_write> = var, mat4x2<f16>(vec2<f16>(0.0h))
   %out:ptr<storage, mat4x2<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat4x2<f16> = load %m
     store %out, %4
     ret
diff --git a/test/tint/expressions/type_ctor/mat4x2/zero/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat4x2/zero/f32.wgsl.expected.ir.msl
index aaefcf7..f001a30 100644
--- a/test/tint/expressions/type_ctor/mat4x2/zero/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat4x2/zero/f32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat4x2<f32>, read_write> = var, mat4x2<f32>(vec2<f32>(0.0f))
   %out:ptr<storage, mat4x2<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat4x2<f32> = load %m
     store %out, %4
     ret
diff --git a/test/tint/expressions/type_ctor/mat4x3/explicit/identity/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat4x3/explicit/identity/f16.wgsl.expected.ir.msl
index aad66ee..84cc74e 100644
--- a/test/tint/expressions/type_ctor/mat4x3/explicit/identity/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat4x3/explicit/identity/f16.wgsl.expected.ir.msl
@@ -1,15 +1,32 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat4x3<f16>, read_write> = var, mat4x3<f16>(vec3<f16>(0.0h, 1.0h, 2.0h), vec3<f16>(3.0h, 4.0h, 5.0h), vec3<f16>(6.0h, 7.0h, 8.0h), vec3<f16>(9.0h, 10.0h, 11.0h))
   %out:ptr<storage, mat4x3<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat4x3<f16> = load %m
     %5:mat4x3<f16> = construct %4
-    store %out, %5
+    %6:void = call %tint_store_and_preserve_padding, %out, %5
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat4x3<f16>, read_write>, %value_param:mat4x3<f16>):void {
+  $B3: {
+    %10:ptr<storage, vec3<f16>, read_write> = access %target, 0u
+    %11:vec3<f16> = access %value_param, 0u
+    store %10, %11
+    %12:ptr<storage, vec3<f16>, read_write> = access %target, 1u
+    %13:vec3<f16> = access %value_param, 1u
+    store %12, %13
+    %14:ptr<storage, vec3<f16>, read_write> = access %target, 2u
+    %15:vec3<f16> = access %value_param, 2u
+    store %14, %15
+    %16:ptr<storage, vec3<f16>, read_write> = access %target, 3u
+    %17:vec3<f16> = access %value_param, 3u
+    store %16, %17
     ret
   }
 }
diff --git a/test/tint/expressions/type_ctor/mat4x3/explicit/identity/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat4x3/explicit/identity/f32.wgsl.expected.ir.msl
index 382d216..e834e13 100644
--- a/test/tint/expressions/type_ctor/mat4x3/explicit/identity/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat4x3/explicit/identity/f32.wgsl.expected.ir.msl
@@ -1,15 +1,32 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat4x3<f32>, read_write> = var, mat4x3<f32>(vec3<f32>(0.0f, 1.0f, 2.0f), vec3<f32>(3.0f, 4.0f, 5.0f), vec3<f32>(6.0f, 7.0f, 8.0f), vec3<f32>(9.0f, 10.0f, 11.0f))
   %out:ptr<storage, mat4x3<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat4x3<f32> = load %m
     %5:mat4x3<f32> = construct %4
-    store %out, %5
+    %6:void = call %tint_store_and_preserve_padding, %out, %5
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat4x3<f32>, read_write>, %value_param:mat4x3<f32>):void {
+  $B3: {
+    %10:ptr<storage, vec3<f32>, read_write> = access %target, 0u
+    %11:vec3<f32> = access %value_param, 0u
+    store %10, %11
+    %12:ptr<storage, vec3<f32>, read_write> = access %target, 1u
+    %13:vec3<f32> = access %value_param, 1u
+    store %12, %13
+    %14:ptr<storage, vec3<f32>, read_write> = access %target, 2u
+    %15:vec3<f32> = access %value_param, 2u
+    store %14, %15
+    %16:ptr<storage, vec3<f32>, read_write> = access %target, 3u
+    %17:vec3<f32> = access %value_param, 3u
+    store %16, %17
     ret
   }
 }
diff --git a/test/tint/expressions/type_ctor/mat4x3/explicit/scalars/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat4x3/explicit/scalars/f16.wgsl.expected.ir.msl
index 2d5ff92..df6b7ce 100644
--- a/test/tint/expressions/type_ctor/mat4x3/explicit/scalars/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat4x3/explicit/scalars/f16.wgsl.expected.ir.msl
@@ -1,14 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat4x3<f16>, read_write> = var, mat4x3<f16>(vec3<f16>(0.0h, 1.0h, 2.0h), vec3<f16>(3.0h, 4.0h, 5.0h), vec3<f16>(6.0h, 7.0h, 8.0h), vec3<f16>(9.0h, 10.0h, 11.0h))
   %out:ptr<storage, mat4x3<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat4x3<f16> = load %m
-    store %out, %4
+    %5:void = call %tint_store_and_preserve_padding, %out, %4
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat4x3<f16>, read_write>, %value_param:mat4x3<f16>):void {
+  $B3: {
+    %9:ptr<storage, vec3<f16>, read_write> = access %target, 0u
+    %10:vec3<f16> = access %value_param, 0u
+    store %9, %10
+    %11:ptr<storage, vec3<f16>, read_write> = access %target, 1u
+    %12:vec3<f16> = access %value_param, 1u
+    store %11, %12
+    %13:ptr<storage, vec3<f16>, read_write> = access %target, 2u
+    %14:vec3<f16> = access %value_param, 2u
+    store %13, %14
+    %15:ptr<storage, vec3<f16>, read_write> = access %target, 3u
+    %16:vec3<f16> = access %value_param, 3u
+    store %15, %16
     ret
   }
 }
diff --git a/test/tint/expressions/type_ctor/mat4x3/explicit/scalars/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat4x3/explicit/scalars/f32.wgsl.expected.ir.msl
index def93a3..e65757c 100644
--- a/test/tint/expressions/type_ctor/mat4x3/explicit/scalars/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat4x3/explicit/scalars/f32.wgsl.expected.ir.msl
@@ -1,14 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat4x3<f32>, read_write> = var, mat4x3<f32>(vec3<f32>(0.0f, 1.0f, 2.0f), vec3<f32>(3.0f, 4.0f, 5.0f), vec3<f32>(6.0f, 7.0f, 8.0f), vec3<f32>(9.0f, 10.0f, 11.0f))
   %out:ptr<storage, mat4x3<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat4x3<f32> = load %m
-    store %out, %4
+    %5:void = call %tint_store_and_preserve_padding, %out, %4
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat4x3<f32>, read_write>, %value_param:mat4x3<f32>):void {
+  $B3: {
+    %9:ptr<storage, vec3<f32>, read_write> = access %target, 0u
+    %10:vec3<f32> = access %value_param, 0u
+    store %9, %10
+    %11:ptr<storage, vec3<f32>, read_write> = access %target, 1u
+    %12:vec3<f32> = access %value_param, 1u
+    store %11, %12
+    %13:ptr<storage, vec3<f32>, read_write> = access %target, 2u
+    %14:vec3<f32> = access %value_param, 2u
+    store %13, %14
+    %15:ptr<storage, vec3<f32>, read_write> = access %target, 3u
+    %16:vec3<f32> = access %value_param, 3u
+    store %15, %16
     ret
   }
 }
diff --git a/test/tint/expressions/type_ctor/mat4x3/explicit/vectors/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat4x3/explicit/vectors/f16.wgsl.expected.ir.msl
index 2d5ff92..df6b7ce 100644
--- a/test/tint/expressions/type_ctor/mat4x3/explicit/vectors/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat4x3/explicit/vectors/f16.wgsl.expected.ir.msl
@@ -1,14 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat4x3<f16>, read_write> = var, mat4x3<f16>(vec3<f16>(0.0h, 1.0h, 2.0h), vec3<f16>(3.0h, 4.0h, 5.0h), vec3<f16>(6.0h, 7.0h, 8.0h), vec3<f16>(9.0h, 10.0h, 11.0h))
   %out:ptr<storage, mat4x3<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat4x3<f16> = load %m
-    store %out, %4
+    %5:void = call %tint_store_and_preserve_padding, %out, %4
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat4x3<f16>, read_write>, %value_param:mat4x3<f16>):void {
+  $B3: {
+    %9:ptr<storage, vec3<f16>, read_write> = access %target, 0u
+    %10:vec3<f16> = access %value_param, 0u
+    store %9, %10
+    %11:ptr<storage, vec3<f16>, read_write> = access %target, 1u
+    %12:vec3<f16> = access %value_param, 1u
+    store %11, %12
+    %13:ptr<storage, vec3<f16>, read_write> = access %target, 2u
+    %14:vec3<f16> = access %value_param, 2u
+    store %13, %14
+    %15:ptr<storage, vec3<f16>, read_write> = access %target, 3u
+    %16:vec3<f16> = access %value_param, 3u
+    store %15, %16
     ret
   }
 }
diff --git a/test/tint/expressions/type_ctor/mat4x3/explicit/vectors/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat4x3/explicit/vectors/f32.wgsl.expected.ir.msl
index def93a3..e65757c 100644
--- a/test/tint/expressions/type_ctor/mat4x3/explicit/vectors/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat4x3/explicit/vectors/f32.wgsl.expected.ir.msl
@@ -1,14 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat4x3<f32>, read_write> = var, mat4x3<f32>(vec3<f32>(0.0f, 1.0f, 2.0f), vec3<f32>(3.0f, 4.0f, 5.0f), vec3<f32>(6.0f, 7.0f, 8.0f), vec3<f32>(9.0f, 10.0f, 11.0f))
   %out:ptr<storage, mat4x3<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat4x3<f32> = load %m
-    store %out, %4
+    %5:void = call %tint_store_and_preserve_padding, %out, %4
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat4x3<f32>, read_write>, %value_param:mat4x3<f32>):void {
+  $B3: {
+    %9:ptr<storage, vec3<f32>, read_write> = access %target, 0u
+    %10:vec3<f32> = access %value_param, 0u
+    store %9, %10
+    %11:ptr<storage, vec3<f32>, read_write> = access %target, 1u
+    %12:vec3<f32> = access %value_param, 1u
+    store %11, %12
+    %13:ptr<storage, vec3<f32>, read_write> = access %target, 2u
+    %14:vec3<f32> = access %value_param, 2u
+    store %13, %14
+    %15:ptr<storage, vec3<f32>, read_write> = access %target, 3u
+    %16:vec3<f32> = access %value_param, 3u
+    store %15, %16
     ret
   }
 }
diff --git a/test/tint/expressions/type_ctor/mat4x3/inferred/identity/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat4x3/inferred/identity/f16.wgsl.expected.ir.msl
index aad66ee..84cc74e 100644
--- a/test/tint/expressions/type_ctor/mat4x3/inferred/identity/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat4x3/inferred/identity/f16.wgsl.expected.ir.msl
@@ -1,15 +1,32 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat4x3<f16>, read_write> = var, mat4x3<f16>(vec3<f16>(0.0h, 1.0h, 2.0h), vec3<f16>(3.0h, 4.0h, 5.0h), vec3<f16>(6.0h, 7.0h, 8.0h), vec3<f16>(9.0h, 10.0h, 11.0h))
   %out:ptr<storage, mat4x3<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat4x3<f16> = load %m
     %5:mat4x3<f16> = construct %4
-    store %out, %5
+    %6:void = call %tint_store_and_preserve_padding, %out, %5
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat4x3<f16>, read_write>, %value_param:mat4x3<f16>):void {
+  $B3: {
+    %10:ptr<storage, vec3<f16>, read_write> = access %target, 0u
+    %11:vec3<f16> = access %value_param, 0u
+    store %10, %11
+    %12:ptr<storage, vec3<f16>, read_write> = access %target, 1u
+    %13:vec3<f16> = access %value_param, 1u
+    store %12, %13
+    %14:ptr<storage, vec3<f16>, read_write> = access %target, 2u
+    %15:vec3<f16> = access %value_param, 2u
+    store %14, %15
+    %16:ptr<storage, vec3<f16>, read_write> = access %target, 3u
+    %17:vec3<f16> = access %value_param, 3u
+    store %16, %17
     ret
   }
 }
diff --git a/test/tint/expressions/type_ctor/mat4x3/inferred/identity/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat4x3/inferred/identity/f32.wgsl.expected.ir.msl
index 382d216..e834e13 100644
--- a/test/tint/expressions/type_ctor/mat4x3/inferred/identity/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat4x3/inferred/identity/f32.wgsl.expected.ir.msl
@@ -1,15 +1,32 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat4x3<f32>, read_write> = var, mat4x3<f32>(vec3<f32>(0.0f, 1.0f, 2.0f), vec3<f32>(3.0f, 4.0f, 5.0f), vec3<f32>(6.0f, 7.0f, 8.0f), vec3<f32>(9.0f, 10.0f, 11.0f))
   %out:ptr<storage, mat4x3<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat4x3<f32> = load %m
     %5:mat4x3<f32> = construct %4
-    store %out, %5
+    %6:void = call %tint_store_and_preserve_padding, %out, %5
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat4x3<f32>, read_write>, %value_param:mat4x3<f32>):void {
+  $B3: {
+    %10:ptr<storage, vec3<f32>, read_write> = access %target, 0u
+    %11:vec3<f32> = access %value_param, 0u
+    store %10, %11
+    %12:ptr<storage, vec3<f32>, read_write> = access %target, 1u
+    %13:vec3<f32> = access %value_param, 1u
+    store %12, %13
+    %14:ptr<storage, vec3<f32>, read_write> = access %target, 2u
+    %15:vec3<f32> = access %value_param, 2u
+    store %14, %15
+    %16:ptr<storage, vec3<f32>, read_write> = access %target, 3u
+    %17:vec3<f32> = access %value_param, 3u
+    store %16, %17
     ret
   }
 }
diff --git a/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/abstract-float.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/abstract-float.wgsl.expected.ir.msl
index 40594c0..9ac57da 100644
--- a/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/abstract-float.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/abstract-float.wgsl.expected.ir.msl
@@ -1,12 +1,29 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %out:ptr<storage, mat4x3<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    store %out, mat4x3<f32>(vec3<f32>(0.0f, 1.0f, 2.0f), vec3<f32>(3.0f, 4.0f, 5.0f), vec3<f32>(6.0f, 7.0f, 8.0f), vec3<f32>(9.0f, 10.0f, 11.0f))
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %3:void = call %tint_store_and_preserve_padding, %out, mat4x3<f32>(vec3<f32>(0.0f, 1.0f, 2.0f), vec3<f32>(3.0f, 4.0f, 5.0f), vec3<f32>(6.0f, 7.0f, 8.0f), vec3<f32>(9.0f, 10.0f, 11.0f))
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat4x3<f32>, read_write>, %value_param:mat4x3<f32>):void {
+  $B3: {
+    %7:ptr<storage, vec3<f32>, read_write> = access %target, 0u
+    %8:vec3<f32> = access %value_param, 0u
+    store %7, %8
+    %9:ptr<storage, vec3<f32>, read_write> = access %target, 1u
+    %10:vec3<f32> = access %value_param, 1u
+    store %9, %10
+    %11:ptr<storage, vec3<f32>, read_write> = access %target, 2u
+    %12:vec3<f32> = access %value_param, 2u
+    store %11, %12
+    %13:ptr<storage, vec3<f32>, read_write> = access %target, 3u
+    %14:vec3<f32> = access %value_param, 3u
+    store %13, %14
     ret
   }
 }
diff --git a/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/f16.wgsl.expected.ir.msl
index 2d5ff92..df6b7ce 100644
--- a/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/f16.wgsl.expected.ir.msl
@@ -1,14 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat4x3<f16>, read_write> = var, mat4x3<f16>(vec3<f16>(0.0h, 1.0h, 2.0h), vec3<f16>(3.0h, 4.0h, 5.0h), vec3<f16>(6.0h, 7.0h, 8.0h), vec3<f16>(9.0h, 10.0h, 11.0h))
   %out:ptr<storage, mat4x3<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat4x3<f16> = load %m
-    store %out, %4
+    %5:void = call %tint_store_and_preserve_padding, %out, %4
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat4x3<f16>, read_write>, %value_param:mat4x3<f16>):void {
+  $B3: {
+    %9:ptr<storage, vec3<f16>, read_write> = access %target, 0u
+    %10:vec3<f16> = access %value_param, 0u
+    store %9, %10
+    %11:ptr<storage, vec3<f16>, read_write> = access %target, 1u
+    %12:vec3<f16> = access %value_param, 1u
+    store %11, %12
+    %13:ptr<storage, vec3<f16>, read_write> = access %target, 2u
+    %14:vec3<f16> = access %value_param, 2u
+    store %13, %14
+    %15:ptr<storage, vec3<f16>, read_write> = access %target, 3u
+    %16:vec3<f16> = access %value_param, 3u
+    store %15, %16
     ret
   }
 }
diff --git a/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/f32.wgsl.expected.ir.msl
index def93a3..e65757c 100644
--- a/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat4x3/inferred/scalars/f32.wgsl.expected.ir.msl
@@ -1,14 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat4x3<f32>, read_write> = var, mat4x3<f32>(vec3<f32>(0.0f, 1.0f, 2.0f), vec3<f32>(3.0f, 4.0f, 5.0f), vec3<f32>(6.0f, 7.0f, 8.0f), vec3<f32>(9.0f, 10.0f, 11.0f))
   %out:ptr<storage, mat4x3<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat4x3<f32> = load %m
-    store %out, %4
+    %5:void = call %tint_store_and_preserve_padding, %out, %4
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat4x3<f32>, read_write>, %value_param:mat4x3<f32>):void {
+  $B3: {
+    %9:ptr<storage, vec3<f32>, read_write> = access %target, 0u
+    %10:vec3<f32> = access %value_param, 0u
+    store %9, %10
+    %11:ptr<storage, vec3<f32>, read_write> = access %target, 1u
+    %12:vec3<f32> = access %value_param, 1u
+    store %11, %12
+    %13:ptr<storage, vec3<f32>, read_write> = access %target, 2u
+    %14:vec3<f32> = access %value_param, 2u
+    store %13, %14
+    %15:ptr<storage, vec3<f32>, read_write> = access %target, 3u
+    %16:vec3<f32> = access %value_param, 3u
+    store %15, %16
     ret
   }
 }
diff --git a/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/abstract-float.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/abstract-float.wgsl.expected.ir.msl
index 40594c0..9ac57da 100644
--- a/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/abstract-float.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/abstract-float.wgsl.expected.ir.msl
@@ -1,12 +1,29 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %out:ptr<storage, mat4x3<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    store %out, mat4x3<f32>(vec3<f32>(0.0f, 1.0f, 2.0f), vec3<f32>(3.0f, 4.0f, 5.0f), vec3<f32>(6.0f, 7.0f, 8.0f), vec3<f32>(9.0f, 10.0f, 11.0f))
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %3:void = call %tint_store_and_preserve_padding, %out, mat4x3<f32>(vec3<f32>(0.0f, 1.0f, 2.0f), vec3<f32>(3.0f, 4.0f, 5.0f), vec3<f32>(6.0f, 7.0f, 8.0f), vec3<f32>(9.0f, 10.0f, 11.0f))
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat4x3<f32>, read_write>, %value_param:mat4x3<f32>):void {
+  $B3: {
+    %7:ptr<storage, vec3<f32>, read_write> = access %target, 0u
+    %8:vec3<f32> = access %value_param, 0u
+    store %7, %8
+    %9:ptr<storage, vec3<f32>, read_write> = access %target, 1u
+    %10:vec3<f32> = access %value_param, 1u
+    store %9, %10
+    %11:ptr<storage, vec3<f32>, read_write> = access %target, 2u
+    %12:vec3<f32> = access %value_param, 2u
+    store %11, %12
+    %13:ptr<storage, vec3<f32>, read_write> = access %target, 3u
+    %14:vec3<f32> = access %value_param, 3u
+    store %13, %14
     ret
   }
 }
diff --git a/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/f16.wgsl.expected.ir.msl
index 2d5ff92..df6b7ce 100644
--- a/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/f16.wgsl.expected.ir.msl
@@ -1,14 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat4x3<f16>, read_write> = var, mat4x3<f16>(vec3<f16>(0.0h, 1.0h, 2.0h), vec3<f16>(3.0h, 4.0h, 5.0h), vec3<f16>(6.0h, 7.0h, 8.0h), vec3<f16>(9.0h, 10.0h, 11.0h))
   %out:ptr<storage, mat4x3<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat4x3<f16> = load %m
-    store %out, %4
+    %5:void = call %tint_store_and_preserve_padding, %out, %4
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat4x3<f16>, read_write>, %value_param:mat4x3<f16>):void {
+  $B3: {
+    %9:ptr<storage, vec3<f16>, read_write> = access %target, 0u
+    %10:vec3<f16> = access %value_param, 0u
+    store %9, %10
+    %11:ptr<storage, vec3<f16>, read_write> = access %target, 1u
+    %12:vec3<f16> = access %value_param, 1u
+    store %11, %12
+    %13:ptr<storage, vec3<f16>, read_write> = access %target, 2u
+    %14:vec3<f16> = access %value_param, 2u
+    store %13, %14
+    %15:ptr<storage, vec3<f16>, read_write> = access %target, 3u
+    %16:vec3<f16> = access %value_param, 3u
+    store %15, %16
     ret
   }
 }
diff --git a/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/f32.wgsl.expected.ir.msl
index def93a3..e65757c 100644
--- a/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat4x3/inferred/vectors/f32.wgsl.expected.ir.msl
@@ -1,14 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat4x3<f32>, read_write> = var, mat4x3<f32>(vec3<f32>(0.0f, 1.0f, 2.0f), vec3<f32>(3.0f, 4.0f, 5.0f), vec3<f32>(6.0f, 7.0f, 8.0f), vec3<f32>(9.0f, 10.0f, 11.0f))
   %out:ptr<storage, mat4x3<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat4x3<f32> = load %m
-    store %out, %4
+    %5:void = call %tint_store_and_preserve_padding, %out, %4
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat4x3<f32>, read_write>, %value_param:mat4x3<f32>):void {
+  $B3: {
+    %9:ptr<storage, vec3<f32>, read_write> = access %target, 0u
+    %10:vec3<f32> = access %value_param, 0u
+    store %9, %10
+    %11:ptr<storage, vec3<f32>, read_write> = access %target, 1u
+    %12:vec3<f32> = access %value_param, 1u
+    store %11, %12
+    %13:ptr<storage, vec3<f32>, read_write> = access %target, 2u
+    %14:vec3<f32> = access %value_param, 2u
+    store %13, %14
+    %15:ptr<storage, vec3<f32>, read_write> = access %target, 3u
+    %16:vec3<f32> = access %value_param, 3u
+    store %15, %16
     ret
   }
 }
diff --git a/test/tint/expressions/type_ctor/mat4x3/load/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat4x3/load/f16.wgsl.expected.ir.msl
index fae6ba5..b2d5c8a 100644
--- a/test/tint/expressions/type_ctor/mat4x3/load/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat4x3/load/f16.wgsl.expected.ir.msl
@@ -1,15 +1,32 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %out:ptr<storage, mat4x3<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %m:ptr<function, mat4x3<f16>, read_write> = var, mat4x3<f16>(vec3<f16>(0.0h))
     %4:mat4x3<f16> = load %m
     %5:mat4x3<f16> = construct %4
-    store %out, %5
+    %6:void = call %tint_store_and_preserve_padding, %out, %5
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat4x3<f16>, read_write>, %value_param:mat4x3<f16>):void {
+  $B3: {
+    %10:ptr<storage, vec3<f16>, read_write> = access %target, 0u
+    %11:vec3<f16> = access %value_param, 0u
+    store %10, %11
+    %12:ptr<storage, vec3<f16>, read_write> = access %target, 1u
+    %13:vec3<f16> = access %value_param, 1u
+    store %12, %13
+    %14:ptr<storage, vec3<f16>, read_write> = access %target, 2u
+    %15:vec3<f16> = access %value_param, 2u
+    store %14, %15
+    %16:ptr<storage, vec3<f16>, read_write> = access %target, 3u
+    %17:vec3<f16> = access %value_param, 3u
+    store %16, %17
     ret
   }
 }
diff --git a/test/tint/expressions/type_ctor/mat4x3/load/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat4x3/load/f32.wgsl.expected.ir.msl
index f53ee99..e70076e 100644
--- a/test/tint/expressions/type_ctor/mat4x3/load/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat4x3/load/f32.wgsl.expected.ir.msl
@@ -1,15 +1,32 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %out:ptr<storage, mat4x3<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %m:ptr<function, mat4x3<f32>, read_write> = var, mat4x3<f32>(vec3<f32>(0.0f))
     %4:mat4x3<f32> = load %m
     %5:mat4x3<f32> = construct %4
-    store %out, %5
+    %6:void = call %tint_store_and_preserve_padding, %out, %5
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat4x3<f32>, read_write>, %value_param:mat4x3<f32>):void {
+  $B3: {
+    %10:ptr<storage, vec3<f32>, read_write> = access %target, 0u
+    %11:vec3<f32> = access %value_param, 0u
+    store %10, %11
+    %12:ptr<storage, vec3<f32>, read_write> = access %target, 1u
+    %13:vec3<f32> = access %value_param, 1u
+    store %12, %13
+    %14:ptr<storage, vec3<f32>, read_write> = access %target, 2u
+    %15:vec3<f32> = access %value_param, 2u
+    store %14, %15
+    %16:ptr<storage, vec3<f32>, read_write> = access %target, 3u
+    %17:vec3<f32> = access %value_param, 3u
+    store %16, %17
     ret
   }
 }
diff --git a/test/tint/expressions/type_ctor/mat4x3/zero/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat4x3/zero/f16.wgsl.expected.ir.msl
index 7819e7a..c92d020 100644
--- a/test/tint/expressions/type_ctor/mat4x3/zero/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat4x3/zero/f16.wgsl.expected.ir.msl
@@ -1,14 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat4x3<f16>, read_write> = var, mat4x3<f16>(vec3<f16>(0.0h))
   %out:ptr<storage, mat4x3<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat4x3<f16> = load %m
-    store %out, %4
+    %5:void = call %tint_store_and_preserve_padding, %out, %4
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat4x3<f16>, read_write>, %value_param:mat4x3<f16>):void {
+  $B3: {
+    %9:ptr<storage, vec3<f16>, read_write> = access %target, 0u
+    %10:vec3<f16> = access %value_param, 0u
+    store %9, %10
+    %11:ptr<storage, vec3<f16>, read_write> = access %target, 1u
+    %12:vec3<f16> = access %value_param, 1u
+    store %11, %12
+    %13:ptr<storage, vec3<f16>, read_write> = access %target, 2u
+    %14:vec3<f16> = access %value_param, 2u
+    store %13, %14
+    %15:ptr<storage, vec3<f16>, read_write> = access %target, 3u
+    %16:vec3<f16> = access %value_param, 3u
+    store %15, %16
     ret
   }
 }
diff --git a/test/tint/expressions/type_ctor/mat4x3/zero/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat4x3/zero/f32.wgsl.expected.ir.msl
index eb3927a..e9865f9 100644
--- a/test/tint/expressions/type_ctor/mat4x3/zero/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat4x3/zero/f32.wgsl.expected.ir.msl
@@ -1,14 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat4x3<f32>, read_write> = var, mat4x3<f32>(vec3<f32>(0.0f))
   %out:ptr<storage, mat4x3<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat4x3<f32> = load %m
-    store %out, %4
+    %5:void = call %tint_store_and_preserve_padding, %out, %4
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, mat4x3<f32>, read_write>, %value_param:mat4x3<f32>):void {
+  $B3: {
+    %9:ptr<storage, vec3<f32>, read_write> = access %target, 0u
+    %10:vec3<f32> = access %value_param, 0u
+    store %9, %10
+    %11:ptr<storage, vec3<f32>, read_write> = access %target, 1u
+    %12:vec3<f32> = access %value_param, 1u
+    store %11, %12
+    %13:ptr<storage, vec3<f32>, read_write> = access %target, 2u
+    %14:vec3<f32> = access %value_param, 2u
+    store %13, %14
+    %15:ptr<storage, vec3<f32>, read_write> = access %target, 3u
+    %16:vec3<f32> = access %value_param, 3u
+    store %15, %16
     ret
   }
 }
diff --git a/test/tint/expressions/type_ctor/mat4x4/explicit/identity/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat4x4/explicit/identity/f16.wgsl.expected.ir.msl
index 5a1ae8f..3eba67e 100644
--- a/test/tint/expressions/type_ctor/mat4x4/explicit/identity/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat4x4/explicit/identity/f16.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat4x4<f16>, read_write> = var, mat4x4<f16>(vec4<f16>(0.0h, 1.0h, 2.0h, 3.0h), vec4<f16>(4.0h, 5.0h, 6.0h, 7.0h), vec4<f16>(8.0h, 9.0h, 10.0h, 11.0h), vec4<f16>(12.0h, 13.0h, 14.0h, 15.0h))
   %out:ptr<storage, mat4x4<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat4x4<f16> = load %m
     %5:mat4x4<f16> = construct %4
     store %out, %5
diff --git a/test/tint/expressions/type_ctor/mat4x4/explicit/identity/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat4x4/explicit/identity/f32.wgsl.expected.ir.msl
index 2375b5c..250a01c 100644
--- a/test/tint/expressions/type_ctor/mat4x4/explicit/identity/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat4x4/explicit/identity/f32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat4x4<f32>, read_write> = var, mat4x4<f32>(vec4<f32>(0.0f, 1.0f, 2.0f, 3.0f), vec4<f32>(4.0f, 5.0f, 6.0f, 7.0f), vec4<f32>(8.0f, 9.0f, 10.0f, 11.0f), vec4<f32>(12.0f, 13.0f, 14.0f, 15.0f))
   %out:ptr<storage, mat4x4<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat4x4<f32> = load %m
     %5:mat4x4<f32> = construct %4
     store %out, %5
diff --git a/test/tint/expressions/type_ctor/mat4x4/explicit/scalars/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat4x4/explicit/scalars/f16.wgsl.expected.ir.msl
index 04103f0..e8a0c48 100644
--- a/test/tint/expressions/type_ctor/mat4x4/explicit/scalars/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat4x4/explicit/scalars/f16.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat4x4<f16>, read_write> = var, mat4x4<f16>(vec4<f16>(0.0h, 1.0h, 2.0h, 3.0h), vec4<f16>(4.0h, 5.0h, 6.0h, 7.0h), vec4<f16>(8.0h, 9.0h, 10.0h, 11.0h), vec4<f16>(12.0h, 13.0h, 14.0h, 15.0h))
   %out:ptr<storage, mat4x4<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat4x4<f16> = load %m
     store %out, %4
     ret
diff --git a/test/tint/expressions/type_ctor/mat4x4/explicit/scalars/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat4x4/explicit/scalars/f32.wgsl.expected.ir.msl
index 35d7bd1..b143f20 100644
--- a/test/tint/expressions/type_ctor/mat4x4/explicit/scalars/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat4x4/explicit/scalars/f32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat4x4<f32>, read_write> = var, mat4x4<f32>(vec4<f32>(0.0f, 1.0f, 2.0f, 3.0f), vec4<f32>(4.0f, 5.0f, 6.0f, 7.0f), vec4<f32>(8.0f, 9.0f, 10.0f, 11.0f), vec4<f32>(12.0f, 13.0f, 14.0f, 15.0f))
   %out:ptr<storage, mat4x4<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat4x4<f32> = load %m
     store %out, %4
     ret
diff --git a/test/tint/expressions/type_ctor/mat4x4/explicit/vectors/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat4x4/explicit/vectors/f16.wgsl.expected.ir.msl
index 04103f0..e8a0c48 100644
--- a/test/tint/expressions/type_ctor/mat4x4/explicit/vectors/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat4x4/explicit/vectors/f16.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat4x4<f16>, read_write> = var, mat4x4<f16>(vec4<f16>(0.0h, 1.0h, 2.0h, 3.0h), vec4<f16>(4.0h, 5.0h, 6.0h, 7.0h), vec4<f16>(8.0h, 9.0h, 10.0h, 11.0h), vec4<f16>(12.0h, 13.0h, 14.0h, 15.0h))
   %out:ptr<storage, mat4x4<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat4x4<f16> = load %m
     store %out, %4
     ret
diff --git a/test/tint/expressions/type_ctor/mat4x4/explicit/vectors/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat4x4/explicit/vectors/f32.wgsl.expected.ir.msl
index 35d7bd1..b143f20 100644
--- a/test/tint/expressions/type_ctor/mat4x4/explicit/vectors/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat4x4/explicit/vectors/f32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat4x4<f32>, read_write> = var, mat4x4<f32>(vec4<f32>(0.0f, 1.0f, 2.0f, 3.0f), vec4<f32>(4.0f, 5.0f, 6.0f, 7.0f), vec4<f32>(8.0f, 9.0f, 10.0f, 11.0f), vec4<f32>(12.0f, 13.0f, 14.0f, 15.0f))
   %out:ptr<storage, mat4x4<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat4x4<f32> = load %m
     store %out, %4
     ret
diff --git a/test/tint/expressions/type_ctor/mat4x4/inferred/identity/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat4x4/inferred/identity/f16.wgsl.expected.ir.msl
index 5a1ae8f..3eba67e 100644
--- a/test/tint/expressions/type_ctor/mat4x4/inferred/identity/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat4x4/inferred/identity/f16.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat4x4<f16>, read_write> = var, mat4x4<f16>(vec4<f16>(0.0h, 1.0h, 2.0h, 3.0h), vec4<f16>(4.0h, 5.0h, 6.0h, 7.0h), vec4<f16>(8.0h, 9.0h, 10.0h, 11.0h), vec4<f16>(12.0h, 13.0h, 14.0h, 15.0h))
   %out:ptr<storage, mat4x4<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat4x4<f16> = load %m
     %5:mat4x4<f16> = construct %4
     store %out, %5
diff --git a/test/tint/expressions/type_ctor/mat4x4/inferred/identity/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat4x4/inferred/identity/f32.wgsl.expected.ir.msl
index 2375b5c..250a01c 100644
--- a/test/tint/expressions/type_ctor/mat4x4/inferred/identity/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat4x4/inferred/identity/f32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat4x4<f32>, read_write> = var, mat4x4<f32>(vec4<f32>(0.0f, 1.0f, 2.0f, 3.0f), vec4<f32>(4.0f, 5.0f, 6.0f, 7.0f), vec4<f32>(8.0f, 9.0f, 10.0f, 11.0f), vec4<f32>(12.0f, 13.0f, 14.0f, 15.0f))
   %out:ptr<storage, mat4x4<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat4x4<f32> = load %m
     %5:mat4x4<f32> = construct %4
     store %out, %5
diff --git a/test/tint/expressions/type_ctor/mat4x4/inferred/scalars/abstract-float.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat4x4/inferred/scalars/abstract-float.wgsl.expected.ir.msl
index 72097b7..c0e6669 100644
--- a/test/tint/expressions/type_ctor/mat4x4/inferred/scalars/abstract-float.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat4x4/inferred/scalars/abstract-float.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %out:ptr<storage, mat4x4<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     store %out, mat4x4<f32>(vec4<f32>(0.0f, 1.0f, 2.0f, 3.0f), vec4<f32>(4.0f, 5.0f, 6.0f, 7.0f), vec4<f32>(8.0f, 9.0f, 10.0f, 11.0f), vec4<f32>(12.0f, 13.0f, 14.0f, 15.0f))
     ret
   }
diff --git a/test/tint/expressions/type_ctor/mat4x4/inferred/scalars/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat4x4/inferred/scalars/f16.wgsl.expected.ir.msl
index 04103f0..e8a0c48 100644
--- a/test/tint/expressions/type_ctor/mat4x4/inferred/scalars/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat4x4/inferred/scalars/f16.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat4x4<f16>, read_write> = var, mat4x4<f16>(vec4<f16>(0.0h, 1.0h, 2.0h, 3.0h), vec4<f16>(4.0h, 5.0h, 6.0h, 7.0h), vec4<f16>(8.0h, 9.0h, 10.0h, 11.0h), vec4<f16>(12.0h, 13.0h, 14.0h, 15.0h))
   %out:ptr<storage, mat4x4<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat4x4<f16> = load %m
     store %out, %4
     ret
diff --git a/test/tint/expressions/type_ctor/mat4x4/inferred/scalars/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat4x4/inferred/scalars/f32.wgsl.expected.ir.msl
index 35d7bd1..b143f20 100644
--- a/test/tint/expressions/type_ctor/mat4x4/inferred/scalars/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat4x4/inferred/scalars/f32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat4x4<f32>, read_write> = var, mat4x4<f32>(vec4<f32>(0.0f, 1.0f, 2.0f, 3.0f), vec4<f32>(4.0f, 5.0f, 6.0f, 7.0f), vec4<f32>(8.0f, 9.0f, 10.0f, 11.0f), vec4<f32>(12.0f, 13.0f, 14.0f, 15.0f))
   %out:ptr<storage, mat4x4<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat4x4<f32> = load %m
     store %out, %4
     ret
diff --git a/test/tint/expressions/type_ctor/mat4x4/inferred/vectors/abstract-float.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat4x4/inferred/vectors/abstract-float.wgsl.expected.ir.msl
index 72097b7..c0e6669 100644
--- a/test/tint/expressions/type_ctor/mat4x4/inferred/vectors/abstract-float.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat4x4/inferred/vectors/abstract-float.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %out:ptr<storage, mat4x4<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     store %out, mat4x4<f32>(vec4<f32>(0.0f, 1.0f, 2.0f, 3.0f), vec4<f32>(4.0f, 5.0f, 6.0f, 7.0f), vec4<f32>(8.0f, 9.0f, 10.0f, 11.0f), vec4<f32>(12.0f, 13.0f, 14.0f, 15.0f))
     ret
   }
diff --git a/test/tint/expressions/type_ctor/mat4x4/inferred/vectors/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat4x4/inferred/vectors/f16.wgsl.expected.ir.msl
index 04103f0..e8a0c48 100644
--- a/test/tint/expressions/type_ctor/mat4x4/inferred/vectors/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat4x4/inferred/vectors/f16.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat4x4<f16>, read_write> = var, mat4x4<f16>(vec4<f16>(0.0h, 1.0h, 2.0h, 3.0h), vec4<f16>(4.0h, 5.0h, 6.0h, 7.0h), vec4<f16>(8.0h, 9.0h, 10.0h, 11.0h), vec4<f16>(12.0h, 13.0h, 14.0h, 15.0h))
   %out:ptr<storage, mat4x4<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat4x4<f16> = load %m
     store %out, %4
     ret
diff --git a/test/tint/expressions/type_ctor/mat4x4/inferred/vectors/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat4x4/inferred/vectors/f32.wgsl.expected.ir.msl
index 35d7bd1..b143f20 100644
--- a/test/tint/expressions/type_ctor/mat4x4/inferred/vectors/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat4x4/inferred/vectors/f32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat4x4<f32>, read_write> = var, mat4x4<f32>(vec4<f32>(0.0f, 1.0f, 2.0f, 3.0f), vec4<f32>(4.0f, 5.0f, 6.0f, 7.0f), vec4<f32>(8.0f, 9.0f, 10.0f, 11.0f), vec4<f32>(12.0f, 13.0f, 14.0f, 15.0f))
   %out:ptr<storage, mat4x4<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat4x4<f32> = load %m
     store %out, %4
     ret
diff --git a/test/tint/expressions/type_ctor/mat4x4/load/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat4x4/load/f16.wgsl.expected.ir.msl
index 466b7f4..1c8cd6e 100644
--- a/test/tint/expressions/type_ctor/mat4x4/load/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat4x4/load/f16.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %out:ptr<storage, mat4x4<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %m:ptr<function, mat4x4<f16>, read_write> = var, mat4x4<f16>(vec4<f16>(0.0h))
     %4:mat4x4<f16> = load %m
     %5:mat4x4<f16> = construct %4
diff --git a/test/tint/expressions/type_ctor/mat4x4/load/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat4x4/load/f32.wgsl.expected.ir.msl
index 33844f4..46c9871 100644
--- a/test/tint/expressions/type_ctor/mat4x4/load/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat4x4/load/f32.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %out:ptr<storage, mat4x4<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %m:ptr<function, mat4x4<f32>, read_write> = var, mat4x4<f32>(vec4<f32>(0.0f))
     %4:mat4x4<f32> = load %m
     %5:mat4x4<f32> = construct %4
diff --git a/test/tint/expressions/type_ctor/mat4x4/zero/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat4x4/zero/f16.wgsl.expected.ir.msl
index 1a01a44..c8a0634 100644
--- a/test/tint/expressions/type_ctor/mat4x4/zero/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat4x4/zero/f16.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat4x4<f16>, read_write> = var, mat4x4<f16>(vec4<f16>(0.0h))
   %out:ptr<storage, mat4x4<f16>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat4x4<f16> = load %m
     store %out, %4
     ret
diff --git a/test/tint/expressions/type_ctor/mat4x4/zero/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/mat4x4/zero/f32.wgsl.expected.ir.msl
index 7e841a0..4d5a209 100644
--- a/test/tint/expressions/type_ctor/mat4x4/zero/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/mat4x4/zero/f32.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %m:ptr<private, mat4x4<f32>, read_write> = var, mat4x4<f32>(vec4<f32>(0.0f))
   %out:ptr<storage, mat4x4<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %4:mat4x4<f32> = load %m
     store %out, %4
     ret
diff --git a/test/tint/expressions/type_ctor/vec2/explicit/bool.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec2/explicit/bool.wgsl.expected.ir.msl
index 33cf2d8..7b62745 100644
--- a/test/tint/expressions/type_ctor/vec2/explicit/bool.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/vec2/explicit/bool.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread bool2 v = bool2(false, true);
+program_source:4:14: error: program scope variable must reside in constant address space
+thread bool2 v = bool2(false, true);
+             ^
+
diff --git a/test/tint/expressions/type_ctor/vec2/explicit/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec2/explicit/f16.wgsl.expected.ir.msl
index 1159ffb..5987ec4 100644
--- a/test/tint/expressions/type_ctor/vec2/explicit/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/vec2/explicit/f16.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread half2 v = half2(0.0h, 1.0h);
+program_source:4:14: error: program scope variable must reside in constant address space
+thread half2 v = half2(0.0h, 1.0h);
+             ^
+
diff --git a/test/tint/expressions/type_ctor/vec2/explicit/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec2/explicit/f32.wgsl.expected.ir.msl
index 956ec80..bdf0225 100644
--- a/test/tint/expressions/type_ctor/vec2/explicit/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/vec2/explicit/f32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread float2 v = float2(0.0f, 1.0f);
+program_source:4:15: error: program scope variable must reside in constant address space
+thread float2 v = float2(0.0f, 1.0f);
+              ^
+
diff --git a/test/tint/expressions/type_ctor/vec2/explicit/i32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec2/explicit/i32.wgsl.expected.ir.msl
index 0ddb857..55694ee 100644
--- a/test/tint/expressions/type_ctor/vec2/explicit/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/vec2/explicit/i32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread int2 v = int2(0, 1);
+program_source:4:13: error: program scope variable must reside in constant address space
+thread int2 v = int2(0, 1);
+            ^
+
diff --git a/test/tint/expressions/type_ctor/vec2/explicit/u32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec2/explicit/u32.wgsl.expected.ir.msl
index ece0809..b401bc2 100644
--- a/test/tint/expressions/type_ctor/vec2/explicit/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/vec2/explicit/u32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread uint2 v = uint2(0u, 1u);
+program_source:4:14: error: program scope variable must reside in constant address space
+thread uint2 v = uint2(0u, 1u);
+             ^
+
diff --git a/test/tint/expressions/type_ctor/vec2/inferred/abstract-float.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec2/inferred/abstract-float.wgsl.expected.ir.msl
index 956ec80..bdf0225 100644
--- a/test/tint/expressions/type_ctor/vec2/inferred/abstract-float.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/vec2/inferred/abstract-float.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread float2 v = float2(0.0f, 1.0f);
+program_source:4:15: error: program scope variable must reside in constant address space
+thread float2 v = float2(0.0f, 1.0f);
+              ^
+
diff --git a/test/tint/expressions/type_ctor/vec2/inferred/abstract-int.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec2/inferred/abstract-int.wgsl.expected.ir.msl
index 0ddb857..55694ee 100644
--- a/test/tint/expressions/type_ctor/vec2/inferred/abstract-int.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/vec2/inferred/abstract-int.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread int2 v = int2(0, 1);
+program_source:4:13: error: program scope variable must reside in constant address space
+thread int2 v = int2(0, 1);
+            ^
+
diff --git a/test/tint/expressions/type_ctor/vec2/inferred/bool.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec2/inferred/bool.wgsl.expected.ir.msl
index 33cf2d8..7b62745 100644
--- a/test/tint/expressions/type_ctor/vec2/inferred/bool.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/vec2/inferred/bool.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread bool2 v = bool2(false, true);
+program_source:4:14: error: program scope variable must reside in constant address space
+thread bool2 v = bool2(false, true);
+             ^
+
diff --git a/test/tint/expressions/type_ctor/vec2/inferred/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec2/inferred/f16.wgsl.expected.ir.msl
index 1159ffb..5987ec4 100644
--- a/test/tint/expressions/type_ctor/vec2/inferred/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/vec2/inferred/f16.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread half2 v = half2(0.0h, 1.0h);
+program_source:4:14: error: program scope variable must reside in constant address space
+thread half2 v = half2(0.0h, 1.0h);
+             ^
+
diff --git a/test/tint/expressions/type_ctor/vec2/inferred/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec2/inferred/f32.wgsl.expected.ir.msl
index 956ec80..bdf0225 100644
--- a/test/tint/expressions/type_ctor/vec2/inferred/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/vec2/inferred/f32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread float2 v = float2(0.0f, 1.0f);
+program_source:4:15: error: program scope variable must reside in constant address space
+thread float2 v = float2(0.0f, 1.0f);
+              ^
+
diff --git a/test/tint/expressions/type_ctor/vec2/inferred/i32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec2/inferred/i32.wgsl.expected.ir.msl
index 0ddb857..55694ee 100644
--- a/test/tint/expressions/type_ctor/vec2/inferred/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/vec2/inferred/i32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread int2 v = int2(0, 1);
+program_source:4:13: error: program scope variable must reside in constant address space
+thread int2 v = int2(0, 1);
+            ^
+
diff --git a/test/tint/expressions/type_ctor/vec2/inferred/u32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec2/inferred/u32.wgsl.expected.ir.msl
index ece0809..b401bc2 100644
--- a/test/tint/expressions/type_ctor/vec2/inferred/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/vec2/inferred/u32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread uint2 v = uint2(0u, 1u);
+program_source:4:14: error: program scope variable must reside in constant address space
+thread uint2 v = uint2(0u, 1u);
+             ^
+
diff --git a/test/tint/expressions/type_ctor/vec2/inferred/zero.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec2/inferred/zero.wgsl.expected.ir.msl
index 1254737..318d3c8 100644
--- a/test/tint/expressions/type_ctor/vec2/inferred/zero.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/vec2/inferred/zero.wgsl.expected.ir.msl
@@ -6,3 +6,13 @@
 thread float2 f = float2(0.0f);
 thread int2 i = int2(0);
 thread uint2 u = uint2(0u);
+program_source:4:15: error: program scope variable must reside in constant address space
+thread float2 f = float2(0.0f);
+              ^
+program_source:5:13: error: program scope variable must reside in constant address space
+thread int2 i = int2(0);
+            ^
+program_source:6:14: error: program scope variable must reside in constant address space
+thread uint2 u = uint2(0u);
+             ^
+
diff --git a/test/tint/expressions/type_ctor/vec3/explicit/bool.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec3/explicit/bool.wgsl.expected.ir.msl
index 885d513..fda0abd 100644
--- a/test/tint/expressions/type_ctor/vec3/explicit/bool.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/vec3/explicit/bool.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread bool3 v = bool3(false, true, false);
+program_source:4:14: error: program scope variable must reside in constant address space
+thread bool3 v = bool3(false, true, false);
+             ^
+
diff --git a/test/tint/expressions/type_ctor/vec3/explicit/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec3/explicit/f16.wgsl.expected.ir.msl
index 0cb8cf8..4878360 100644
--- a/test/tint/expressions/type_ctor/vec3/explicit/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/vec3/explicit/f16.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread half3 v = half3(0.0h, 1.0h, 2.0h);
+program_source:4:14: error: program scope variable must reside in constant address space
+thread half3 v = half3(0.0h, 1.0h, 2.0h);
+             ^
+
diff --git a/test/tint/expressions/type_ctor/vec3/explicit/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec3/explicit/f32.wgsl.expected.ir.msl
index 4101d05..ae4219e 100644
--- a/test/tint/expressions/type_ctor/vec3/explicit/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/vec3/explicit/f32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread float3 v = float3(0.0f, 1.0f, 2.0f);
+program_source:4:15: error: program scope variable must reside in constant address space
+thread float3 v = float3(0.0f, 1.0f, 2.0f);
+              ^
+
diff --git a/test/tint/expressions/type_ctor/vec3/explicit/i32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec3/explicit/i32.wgsl.expected.ir.msl
index b49329d..5926229 100644
--- a/test/tint/expressions/type_ctor/vec3/explicit/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/vec3/explicit/i32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread int3 v = int3(0, 1, 2);
+program_source:4:13: error: program scope variable must reside in constant address space
+thread int3 v = int3(0, 1, 2);
+            ^
+
diff --git a/test/tint/expressions/type_ctor/vec3/explicit/u32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec3/explicit/u32.wgsl.expected.ir.msl
index 4815de2..85e3de6 100644
--- a/test/tint/expressions/type_ctor/vec3/explicit/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/vec3/explicit/u32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread uint3 v = uint3(0u, 1u, 2u);
+program_source:4:14: error: program scope variable must reside in constant address space
+thread uint3 v = uint3(0u, 1u, 2u);
+             ^
+
diff --git a/test/tint/expressions/type_ctor/vec3/inferred/abstract-float.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec3/inferred/abstract-float.wgsl.expected.ir.msl
index 4101d05..ae4219e 100644
--- a/test/tint/expressions/type_ctor/vec3/inferred/abstract-float.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/vec3/inferred/abstract-float.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread float3 v = float3(0.0f, 1.0f, 2.0f);
+program_source:4:15: error: program scope variable must reside in constant address space
+thread float3 v = float3(0.0f, 1.0f, 2.0f);
+              ^
+
diff --git a/test/tint/expressions/type_ctor/vec3/inferred/abstract-int.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec3/inferred/abstract-int.wgsl.expected.ir.msl
index b49329d..5926229 100644
--- a/test/tint/expressions/type_ctor/vec3/inferred/abstract-int.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/vec3/inferred/abstract-int.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread int3 v = int3(0, 1, 2);
+program_source:4:13: error: program scope variable must reside in constant address space
+thread int3 v = int3(0, 1, 2);
+            ^
+
diff --git a/test/tint/expressions/type_ctor/vec3/inferred/bool.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec3/inferred/bool.wgsl.expected.ir.msl
index 885d513..fda0abd 100644
--- a/test/tint/expressions/type_ctor/vec3/inferred/bool.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/vec3/inferred/bool.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread bool3 v = bool3(false, true, false);
+program_source:4:14: error: program scope variable must reside in constant address space
+thread bool3 v = bool3(false, true, false);
+             ^
+
diff --git a/test/tint/expressions/type_ctor/vec3/inferred/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec3/inferred/f16.wgsl.expected.ir.msl
index 0cb8cf8..4878360 100644
--- a/test/tint/expressions/type_ctor/vec3/inferred/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/vec3/inferred/f16.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread half3 v = half3(0.0h, 1.0h, 2.0h);
+program_source:4:14: error: program scope variable must reside in constant address space
+thread half3 v = half3(0.0h, 1.0h, 2.0h);
+             ^
+
diff --git a/test/tint/expressions/type_ctor/vec3/inferred/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec3/inferred/f32.wgsl.expected.ir.msl
index 4101d05..ae4219e 100644
--- a/test/tint/expressions/type_ctor/vec3/inferred/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/vec3/inferred/f32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread float3 v = float3(0.0f, 1.0f, 2.0f);
+program_source:4:15: error: program scope variable must reside in constant address space
+thread float3 v = float3(0.0f, 1.0f, 2.0f);
+              ^
+
diff --git a/test/tint/expressions/type_ctor/vec3/inferred/i32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec3/inferred/i32.wgsl.expected.ir.msl
index b49329d..5926229 100644
--- a/test/tint/expressions/type_ctor/vec3/inferred/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/vec3/inferred/i32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread int3 v = int3(0, 1, 2);
+program_source:4:13: error: program scope variable must reside in constant address space
+thread int3 v = int3(0, 1, 2);
+            ^
+
diff --git a/test/tint/expressions/type_ctor/vec3/inferred/u32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec3/inferred/u32.wgsl.expected.ir.msl
index 4815de2..85e3de6 100644
--- a/test/tint/expressions/type_ctor/vec3/inferred/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/vec3/inferred/u32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread uint3 v = uint3(0u, 1u, 2u);
+program_source:4:14: error: program scope variable must reside in constant address space
+thread uint3 v = uint3(0u, 1u, 2u);
+             ^
+
diff --git a/test/tint/expressions/type_ctor/vec3/inferred/zero.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec3/inferred/zero.wgsl.expected.ir.msl
index 93371a1..616e341 100644
--- a/test/tint/expressions/type_ctor/vec3/inferred/zero.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/vec3/inferred/zero.wgsl.expected.ir.msl
@@ -6,3 +6,13 @@
 thread float3 f = float3(0.0f);
 thread int3 i = int3(0);
 thread uint3 u = uint3(0u);
+program_source:4:15: error: program scope variable must reside in constant address space
+thread float3 f = float3(0.0f);
+              ^
+program_source:5:13: error: program scope variable must reside in constant address space
+thread int3 i = int3(0);
+            ^
+program_source:6:14: error: program scope variable must reside in constant address space
+thread uint3 u = uint3(0u);
+             ^
+
diff --git a/test/tint/expressions/type_ctor/vec4/explicit/bool.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec4/explicit/bool.wgsl.expected.ir.msl
index 3a81db9..14791f3 100644
--- a/test/tint/expressions/type_ctor/vec4/explicit/bool.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/vec4/explicit/bool.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread bool4 v = bool4(false, true, false, true);
+program_source:4:14: error: program scope variable must reside in constant address space
+thread bool4 v = bool4(false, true, false, true);
+             ^
+
diff --git a/test/tint/expressions/type_ctor/vec4/explicit/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec4/explicit/f16.wgsl.expected.ir.msl
index 6847244..e921eea 100644
--- a/test/tint/expressions/type_ctor/vec4/explicit/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/vec4/explicit/f16.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread half4 v = half4(0.0h, 1.0h, 2.0h, 3.0h);
+program_source:4:14: error: program scope variable must reside in constant address space
+thread half4 v = half4(0.0h, 1.0h, 2.0h, 3.0h);
+             ^
+
diff --git a/test/tint/expressions/type_ctor/vec4/explicit/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec4/explicit/f32.wgsl.expected.ir.msl
index 7c24508..1f86fd9 100644
--- a/test/tint/expressions/type_ctor/vec4/explicit/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/vec4/explicit/f32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread float4 v = float4(0.0f, 1.0f, 2.0f, 3.0f);
+program_source:4:15: error: program scope variable must reside in constant address space
+thread float4 v = float4(0.0f, 1.0f, 2.0f, 3.0f);
+              ^
+
diff --git a/test/tint/expressions/type_ctor/vec4/explicit/i32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec4/explicit/i32.wgsl.expected.ir.msl
index d90e99d..9e7a354 100644
--- a/test/tint/expressions/type_ctor/vec4/explicit/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/vec4/explicit/i32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread int4 v = int4(0, 1, 2, 3);
+program_source:4:13: error: program scope variable must reside in constant address space
+thread int4 v = int4(0, 1, 2, 3);
+            ^
+
diff --git a/test/tint/expressions/type_ctor/vec4/explicit/u32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec4/explicit/u32.wgsl.expected.ir.msl
index 65cdb85..20aca2d 100644
--- a/test/tint/expressions/type_ctor/vec4/explicit/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/vec4/explicit/u32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread uint4 v = uint4(0u, 1u, 2u, 3u);
+program_source:4:14: error: program scope variable must reside in constant address space
+thread uint4 v = uint4(0u, 1u, 2u, 3u);
+             ^
+
diff --git a/test/tint/expressions/type_ctor/vec4/inferred/abstract-float.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec4/inferred/abstract-float.wgsl.expected.ir.msl
index 7c24508..1f86fd9 100644
--- a/test/tint/expressions/type_ctor/vec4/inferred/abstract-float.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/vec4/inferred/abstract-float.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread float4 v = float4(0.0f, 1.0f, 2.0f, 3.0f);
+program_source:4:15: error: program scope variable must reside in constant address space
+thread float4 v = float4(0.0f, 1.0f, 2.0f, 3.0f);
+              ^
+
diff --git a/test/tint/expressions/type_ctor/vec4/inferred/abstract-int.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec4/inferred/abstract-int.wgsl.expected.ir.msl
index d90e99d..9e7a354 100644
--- a/test/tint/expressions/type_ctor/vec4/inferred/abstract-int.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/vec4/inferred/abstract-int.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread int4 v = int4(0, 1, 2, 3);
+program_source:4:13: error: program scope variable must reside in constant address space
+thread int4 v = int4(0, 1, 2, 3);
+            ^
+
diff --git a/test/tint/expressions/type_ctor/vec4/inferred/bool.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec4/inferred/bool.wgsl.expected.ir.msl
index 3a81db9..14791f3 100644
--- a/test/tint/expressions/type_ctor/vec4/inferred/bool.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/vec4/inferred/bool.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread bool4 v = bool4(false, true, false, true);
+program_source:4:14: error: program scope variable must reside in constant address space
+thread bool4 v = bool4(false, true, false, true);
+             ^
+
diff --git a/test/tint/expressions/type_ctor/vec4/inferred/f16.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec4/inferred/f16.wgsl.expected.ir.msl
index 6847244..e921eea 100644
--- a/test/tint/expressions/type_ctor/vec4/inferred/f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/vec4/inferred/f16.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread half4 v = half4(0.0h, 1.0h, 2.0h, 3.0h);
+program_source:4:14: error: program scope variable must reside in constant address space
+thread half4 v = half4(0.0h, 1.0h, 2.0h, 3.0h);
+             ^
+
diff --git a/test/tint/expressions/type_ctor/vec4/inferred/f32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec4/inferred/f32.wgsl.expected.ir.msl
index 7c24508..1f86fd9 100644
--- a/test/tint/expressions/type_ctor/vec4/inferred/f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/vec4/inferred/f32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread float4 v = float4(0.0f, 1.0f, 2.0f, 3.0f);
+program_source:4:15: error: program scope variable must reside in constant address space
+thread float4 v = float4(0.0f, 1.0f, 2.0f, 3.0f);
+              ^
+
diff --git a/test/tint/expressions/type_ctor/vec4/inferred/i32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec4/inferred/i32.wgsl.expected.ir.msl
index d90e99d..9e7a354 100644
--- a/test/tint/expressions/type_ctor/vec4/inferred/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/vec4/inferred/i32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread int4 v = int4(0, 1, 2, 3);
+program_source:4:13: error: program scope variable must reside in constant address space
+thread int4 v = int4(0, 1, 2, 3);
+            ^
+
diff --git a/test/tint/expressions/type_ctor/vec4/inferred/u32.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec4/inferred/u32.wgsl.expected.ir.msl
index 65cdb85..20aca2d 100644
--- a/test/tint/expressions/type_ctor/vec4/inferred/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/vec4/inferred/u32.wgsl.expected.ir.msl
@@ -4,3 +4,7 @@
 using namespace metal;
 
 thread uint4 v = uint4(0u, 1u, 2u, 3u);
+program_source:4:14: error: program scope variable must reside in constant address space
+thread uint4 v = uint4(0u, 1u, 2u, 3u);
+             ^
+
diff --git a/test/tint/expressions/type_ctor/vec4/inferred/zero.wgsl.expected.ir.msl b/test/tint/expressions/type_ctor/vec4/inferred/zero.wgsl.expected.ir.msl
index acd7234..ab28cbc 100644
--- a/test/tint/expressions/type_ctor/vec4/inferred/zero.wgsl.expected.ir.msl
+++ b/test/tint/expressions/type_ctor/vec4/inferred/zero.wgsl.expected.ir.msl
@@ -6,3 +6,13 @@
 thread float4 f = float4(0.0f);
 thread int4 i = int4(0);
 thread uint4 u = uint4(0u);
+program_source:4:15: error: program scope variable must reside in constant address space
+thread float4 f = float4(0.0f);
+              ^
+program_source:5:13: error: program scope variable must reside in constant address space
+thread int4 i = int4(0);
+            ^
+program_source:6:14: error: program scope variable must reside in constant address space
+thread uint4 u = uint4(0u);
+             ^
+
diff --git a/test/tint/extensions/dual_source_blending/input_output.wgsl.expected.ir.msl b/test/tint/extensions/dual_source_blending/input_output.wgsl.expected.ir.msl
index 61be630..aec4537 100644
--- a/test/tint/extensions/dual_source_blending/input_output.wgsl.expected.ir.msl
+++ b/test/tint/extensions/dual_source_blending/input_output.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:775 internal compiler error: FragOutput = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: FragOutput = struct @align(16) {
   color:vec4<f32> @offset(0), @location(0)
   blend:vec4<f32> @offset(16), @location(0)
 }
@@ -10,8 +10,8 @@
   b:vec4<f32> @offset(16), @location(1)
 }
 
-%frag_main = @fragment func(%in:FragInput):FragOutput -> %b1 {
-  %b1 = block {
+%frag_main = @fragment func(%in:FragInput):FragOutput {
+  $B1: {
     %output:ptr<function, FragOutput, read_write> = var
     %4:ptr<function, vec4<f32>, read_write> = access %output, 0u
     %5:vec4<f32> = access %in, 0u
diff --git a/test/tint/extensions/dual_source_blending/output.wgsl.expected.ir.msl b/test/tint/extensions/dual_source_blending/output.wgsl.expected.ir.msl
index a84b419..fbf0e25 100644
--- a/test/tint/extensions/dual_source_blending/output.wgsl.expected.ir.msl
+++ b/test/tint/extensions/dual_source_blending/output.wgsl.expected.ir.msl
@@ -1,12 +1,12 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:775 internal compiler error: FragOutput = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: FragOutput = struct @align(16) {
   color:vec4<f32> @offset(0), @location(0)
   blend:vec4<f32> @offset(16), @location(0)
 }
 
-%frag_main = @fragment func():FragOutput -> %b1 {
-  %b1 = block {
+%frag_main = @fragment func():FragOutput {
+  $B1: {
     %output:ptr<function, FragOutput, read_write> = var
     %3:ptr<function, vec4<f32>, read_write> = access %output, 0u
     store %3, vec4<f32>(0.5f, 0.5f, 0.5f, 1.0f)
diff --git a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin.wgsl.expected.ir.msl b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin.wgsl.expected.ir.msl
index e7ada6e..daa7f40 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin.wgsl.expected.ir.msl
+++ b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin.wgsl.expected.ir.msl
@@ -1,26 +1,36 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: PixelLocal = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: PixelLocal = struct @align(4) {
   a:u32 @offset(0)
   b:i32 @offset(4)
   c:f32 @offset(8)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %P:ptr<pixel_local, PixelLocal, read_write> = var
 }
 
-%f = @fragment func(%pos:vec4<f32> [@position]):void -> %b2 {
-  %b2 = block {
+%f = @fragment func(%pos:vec4<f32> [@position]):void {
+  $B2: {
     %4:ptr<pixel_local, u32, read_write> = access %P, 0u
     %5:f32 = access %pos, 0u
-    %6:u32 = convert %5
-    %7:u32 = load %4
-    %8:u32 = add %7, %6
-    store %4, %8
+    %6:u32 = call %tint_f32_to_u32, %5
+    %8:u32 = load %4
+    %9:u32 = add %8, %6
+    store %4, %9
     ret
   }
 }
+%tint_f32_to_u32 = func(%value:f32):u32 {
+  $B3: {
+    %11:u32 = convert %value
+    %12:bool = gte %value, 0.0f
+    %13:u32 = select 0u, %11, %12
+    %14:bool = lte %value, 4294967040.0f
+    %15:u32 = select 4294967295u, %13, %14
+    ret %15
+  }
+}
 
 unhandled variable address space
 ********************************************************************
diff --git a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_and_location.wgsl.expected.ir.msl b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_and_location.wgsl.expected.ir.msl
index 40618a6..0fbaef7 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_and_location.wgsl.expected.ir.msl
+++ b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_and_location.wgsl.expected.ir.msl
@@ -1,29 +1,40 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: PixelLocal = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: PixelLocal = struct @align(4) {
   a:u32 @offset(0)
   b:i32 @offset(4)
   c:f32 @offset(8)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %P:ptr<pixel_local, PixelLocal, read_write> = var
 }
 
-%f = @fragment func(%pos:vec4<f32> [@position], %uv:vec4<f32> [@location(0)]):void -> %b2 {
-  %b2 = block {
+%f = @fragment func(%pos:vec4<f32> [@position], %uv:vec4<f32> [@location(0)]):void {
+  $B2: {
     %5:ptr<pixel_local, u32, read_write> = access %P, 0u
     %6:f32 = access %pos, 0u
-    %7:u32 = convert %6
-    %8:f32 = access %uv, 0u
-    %9:u32 = convert %8
-    %10:u32 = add %7, %9
-    %11:u32 = load %5
-    %12:u32 = add %11, %10
-    store %5, %12
+    %7:u32 = call %tint_f32_to_u32, %6
+    %9:u32 = let %7
+    %10:f32 = access %uv, 0u
+    %11:u32 = call %tint_f32_to_u32, %10
+    %12:u32 = add %9, %11
+    %13:u32 = load %5
+    %14:u32 = add %13, %12
+    store %5, %14
     ret
   }
 }
+%tint_f32_to_u32 = func(%value:f32):u32 {
+  $B3: {
+    %16:u32 = convert %value
+    %17:bool = gte %value, 0.0f
+    %18:u32 = select 0u, %16, %17
+    %19:bool = lte %value, 4294967040.0f
+    %20:u32 = select 4294967295u, %18, %19
+    ret %20
+  }
+}
 
 unhandled variable address space
 ********************************************************************
diff --git a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_and_location_in_struct.wgsl.expected.ir.msl b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_and_location_in_struct.wgsl.expected.ir.msl
index 7775417..01f4152 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_and_location_in_struct.wgsl.expected.ir.msl
+++ b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_and_location_in_struct.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: PixelLocal = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: PixelLocal = struct @align(4) {
   a:u32 @offset(0)
   b:i32 @offset(4)
   c:f32 @offset(8)
@@ -10,24 +10,35 @@
   uv:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %P:ptr<pixel_local, PixelLocal, read_write> = var
 }
 
-%f = @fragment func(%pos:vec4<f32> [@position], %in:In):void -> %b2 {
-  %b2 = block {
+%f = @fragment func(%pos:vec4<f32> [@position], %in:In):void {
+  $B2: {
     %5:ptr<pixel_local, u32, read_write> = access %P, 0u
     %6:f32 = access %pos, 0u
-    %7:u32 = convert %6
-    %8:f32 = access %in, 0u, 0u
-    %9:u32 = convert %8
-    %10:u32 = add %7, %9
-    %11:u32 = load %5
-    %12:u32 = add %11, %10
-    store %5, %12
+    %7:u32 = call %tint_f32_to_u32, %6
+    %9:u32 = let %7
+    %10:f32 = access %in, 0u, 0u
+    %11:u32 = call %tint_f32_to_u32, %10
+    %12:u32 = add %9, %11
+    %13:u32 = load %5
+    %14:u32 = add %13, %12
+    store %5, %14
     ret
   }
 }
+%tint_f32_to_u32 = func(%value:f32):u32 {
+  $B3: {
+    %16:u32 = convert %value
+    %17:bool = gte %value, 0.0f
+    %18:u32 = select 0u, %16, %17
+    %19:bool = lte %value, 4294967040.0f
+    %20:u32 = select 4294967295u, %18, %19
+    ret %20
+  }
+}
 
 unhandled variable address space
 ********************************************************************
diff --git a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct.wgsl.expected.ir.msl b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct.wgsl.expected.ir.msl
index 3381a8c..1a5f2b1 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct.wgsl.expected.ir.msl
+++ b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: PixelLocal = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: PixelLocal = struct @align(4) {
   a:u32 @offset(0)
   b:i32 @offset(4)
   c:f32 @offset(8)
@@ -10,21 +10,31 @@
   pos:vec4<f32> @offset(0), @builtin(position)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %P:ptr<pixel_local, PixelLocal, read_write> = var
 }
 
-%f = @fragment func(%in:In):void -> %b2 {
-  %b2 = block {
+%f = @fragment func(%in:In):void {
+  $B2: {
     %4:ptr<pixel_local, u32, read_write> = access %P, 0u
     %5:f32 = access %in, 0u, 0u
-    %6:u32 = convert %5
-    %7:u32 = load %4
-    %8:u32 = add %7, %6
-    store %4, %8
+    %6:u32 = call %tint_f32_to_u32, %5
+    %8:u32 = load %4
+    %9:u32 = add %8, %6
+    store %4, %9
     ret
   }
 }
+%tint_f32_to_u32 = func(%value:f32):u32 {
+  $B3: {
+    %11:u32 = convert %value
+    %12:bool = gte %value, 0.0f
+    %13:u32 = select 0u, %11, %12
+    %14:bool = lte %value, 4294967040.0f
+    %15:u32 = select 4294967295u, %13, %14
+    ret %15
+  }
+}
 
 unhandled variable address space
 ********************************************************************
diff --git a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct_and_location.wgsl.expected.ir.msl b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct_and_location.wgsl.expected.ir.msl
index 16b3bd2..cc9f265 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct_and_location.wgsl.expected.ir.msl
+++ b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct_and_location.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: PixelLocal = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: PixelLocal = struct @align(4) {
   a:u32 @offset(0)
   b:i32 @offset(4)
   c:f32 @offset(8)
@@ -10,24 +10,35 @@
   pos:vec4<f32> @offset(0), @builtin(position)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %P:ptr<pixel_local, PixelLocal, read_write> = var
 }
 
-%f = @fragment func(%in:In, %uv:vec4<f32> [@location(0)]):void -> %b2 {
-  %b2 = block {
+%f = @fragment func(%in:In, %uv:vec4<f32> [@location(0)]):void {
+  $B2: {
     %5:ptr<pixel_local, u32, read_write> = access %P, 0u
     %6:f32 = access %in, 0u, 0u
-    %7:u32 = convert %6
-    %8:f32 = access %uv, 0u
-    %9:u32 = convert %8
-    %10:u32 = add %7, %9
-    %11:u32 = load %5
-    %12:u32 = add %11, %10
-    store %5, %12
+    %7:u32 = call %tint_f32_to_u32, %6
+    %9:u32 = let %7
+    %10:f32 = access %uv, 0u
+    %11:u32 = call %tint_f32_to_u32, %10
+    %12:u32 = add %9, %11
+    %13:u32 = load %5
+    %14:u32 = add %13, %12
+    store %5, %14
     ret
   }
 }
+%tint_f32_to_u32 = func(%value:f32):u32 {
+  $B3: {
+    %16:u32 = convert %value
+    %17:bool = gte %value, 0.0f
+    %18:u32 = select 0u, %16, %17
+    %19:bool = lte %value, 4294967040.0f
+    %20:u32 = select 4294967295u, %18, %19
+    ret %20
+  }
+}
 
 unhandled variable address space
 ********************************************************************
diff --git a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct_and_location_in_struct.wgsl.expected.ir.msl b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct_and_location_in_struct.wgsl.expected.ir.msl
index 1bb2067..2a1a2d6 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct_and_location_in_struct.wgsl.expected.ir.msl
+++ b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct_and_location_in_struct.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: PixelLocal = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: PixelLocal = struct @align(4) {
   a:u32 @offset(0)
   b:i32 @offset(4)
   c:f32 @offset(8)
@@ -11,24 +11,35 @@
   uv:vec4<f32> @offset(16), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %P:ptr<pixel_local, PixelLocal, read_write> = var
 }
 
-%f = @fragment func(%in:In):void -> %b2 {
-  %b2 = block {
+%f = @fragment func(%in:In):void {
+  $B2: {
     %4:ptr<pixel_local, u32, read_write> = access %P, 0u
     %5:f32 = access %in, 0u, 0u
-    %6:u32 = convert %5
-    %7:f32 = access %in, 1u, 0u
-    %8:u32 = convert %7
-    %9:u32 = add %6, %8
-    %10:u32 = load %4
-    %11:u32 = add %10, %9
-    store %4, %11
+    %6:u32 = call %tint_f32_to_u32, %5
+    %8:u32 = let %6
+    %9:f32 = access %in, 1u, 0u
+    %10:u32 = call %tint_f32_to_u32, %9
+    %11:u32 = add %8, %10
+    %12:u32 = load %4
+    %13:u32 = add %12, %11
+    store %4, %13
     ret
   }
 }
+%tint_f32_to_u32 = func(%value:f32):u32 {
+  $B3: {
+    %15:u32 = convert %value
+    %16:bool = gte %value, 0.0f
+    %17:u32 = select 0u, %15, %16
+    %18:bool = lte %value, 4294967040.0f
+    %19:u32 = select 4294967295u, %17, %18
+    ret %19
+  }
+}
 
 unhandled variable address space
 ********************************************************************
diff --git a/test/tint/extensions/pixel_local/entry_point_use/additional_params/invariant_builtin.wgsl.expected.ir.msl b/test/tint/extensions/pixel_local/entry_point_use/additional_params/invariant_builtin.wgsl.expected.ir.msl
index 8878b91..202fd6e 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/additional_params/invariant_builtin.wgsl.expected.ir.msl
+++ b/test/tint/extensions/pixel_local/entry_point_use/additional_params/invariant_builtin.wgsl.expected.ir.msl
@@ -1,26 +1,36 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: PixelLocal = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: PixelLocal = struct @align(4) {
   a:u32 @offset(0)
   b:i32 @offset(4)
   c:f32 @offset(8)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %P:ptr<pixel_local, PixelLocal, read_write> = var
 }
 
-%f = @fragment func(%pos:vec4<f32> [@invariant, @position]):void -> %b2 {
-  %b2 = block {
+%f = @fragment func(%pos:vec4<f32> [@invariant, @position]):void {
+  $B2: {
     %4:ptr<pixel_local, u32, read_write> = access %P, 0u
     %5:f32 = access %pos, 0u
-    %6:u32 = convert %5
-    %7:u32 = load %4
-    %8:u32 = add %7, %6
-    store %4, %8
+    %6:u32 = call %tint_f32_to_u32, %5
+    %8:u32 = load %4
+    %9:u32 = add %8, %6
+    store %4, %9
     ret
   }
 }
+%tint_f32_to_u32 = func(%value:f32):u32 {
+  $B3: {
+    %11:u32 = convert %value
+    %12:bool = gte %value, 0.0f
+    %13:u32 = select 0u, %11, %12
+    %14:bool = lte %value, 4294967040.0f
+    %15:u32 = select 4294967295u, %13, %14
+    ret %15
+  }
+}
 
 unhandled variable address space
 ********************************************************************
diff --git a/test/tint/extensions/pixel_local/entry_point_use/additional_params/invariant_builtin_in_struct.wgsl.expected.ir.msl b/test/tint/extensions/pixel_local/entry_point_use/additional_params/invariant_builtin_in_struct.wgsl.expected.ir.msl
index ae557e8..25b2032 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/additional_params/invariant_builtin_in_struct.wgsl.expected.ir.msl
+++ b/test/tint/extensions/pixel_local/entry_point_use/additional_params/invariant_builtin_in_struct.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: PixelLocal = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: PixelLocal = struct @align(4) {
   a:u32 @offset(0)
   b:i32 @offset(4)
   c:f32 @offset(8)
@@ -10,21 +10,31 @@
   pos:vec4<f32> @offset(0), @invariant, @builtin(position)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %P:ptr<pixel_local, PixelLocal, read_write> = var
 }
 
-%f = @fragment func(%in:In):void -> %b2 {
-  %b2 = block {
+%f = @fragment func(%in:In):void {
+  $B2: {
     %4:ptr<pixel_local, u32, read_write> = access %P, 0u
     %5:f32 = access %in, 0u, 0u
-    %6:u32 = convert %5
-    %7:u32 = load %4
-    %8:u32 = add %7, %6
-    store %4, %8
+    %6:u32 = call %tint_f32_to_u32, %5
+    %8:u32 = load %4
+    %9:u32 = add %8, %6
+    store %4, %9
     ret
   }
 }
+%tint_f32_to_u32 = func(%value:f32):u32 {
+  $B3: {
+    %11:u32 = convert %value
+    %12:bool = gte %value, 0.0f
+    %13:u32 = select 0u, %11, %12
+    %14:bool = lte %value, 4294967040.0f
+    %15:u32 = select 4294967295u, %13, %14
+    ret %15
+  }
+}
 
 unhandled variable address space
 ********************************************************************
diff --git a/test/tint/extensions/pixel_local/entry_point_use/additional_params/location.wgsl.expected.ir.msl b/test/tint/extensions/pixel_local/entry_point_use/additional_params/location.wgsl.expected.ir.msl
index 7431847..2eec7ef 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/additional_params/location.wgsl.expected.ir.msl
+++ b/test/tint/extensions/pixel_local/entry_point_use/additional_params/location.wgsl.expected.ir.msl
@@ -1,29 +1,40 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: PixelLocal = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: PixelLocal = struct @align(4) {
   a:u32 @offset(0)
   b:i32 @offset(4)
   c:f32 @offset(8)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %P:ptr<pixel_local, PixelLocal, read_write> = var
 }
 
-%f = @fragment func(%a:vec4<f32> [@location(0)], %b:vec4<f32> [@location(1), @interpolate(flat)]):void -> %b2 {
-  %b2 = block {
+%f = @fragment func(%a:vec4<f32> [@location(0)], %b:vec4<f32> [@location(1), @interpolate(flat)]):void {
+  $B2: {
     %5:ptr<pixel_local, u32, read_write> = access %P, 0u
     %6:f32 = access %a, 0u
-    %7:u32 = convert %6
-    %8:f32 = access %b, 1u
-    %9:u32 = convert %8
-    %10:u32 = add %7, %9
-    %11:u32 = load %5
-    %12:u32 = add %11, %10
-    store %5, %12
+    %7:u32 = call %tint_f32_to_u32, %6
+    %9:u32 = let %7
+    %10:f32 = access %b, 1u
+    %11:u32 = call %tint_f32_to_u32, %10
+    %12:u32 = add %9, %11
+    %13:u32 = load %5
+    %14:u32 = add %13, %12
+    store %5, %14
     ret
   }
 }
+%tint_f32_to_u32 = func(%value:f32):u32 {
+  $B3: {
+    %16:u32 = convert %value
+    %17:bool = gte %value, 0.0f
+    %18:u32 = select 0u, %16, %17
+    %19:bool = lte %value, 4294967040.0f
+    %20:u32 = select 4294967295u, %18, %19
+    ret %20
+  }
+}
 
 unhandled variable address space
 ********************************************************************
diff --git a/test/tint/extensions/pixel_local/entry_point_use/additional_params/location_in_struct.wgsl.expected.ir.msl b/test/tint/extensions/pixel_local/entry_point_use/additional_params/location_in_struct.wgsl.expected.ir.msl
index d049786..9dcd924 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/additional_params/location_in_struct.wgsl.expected.ir.msl
+++ b/test/tint/extensions/pixel_local/entry_point_use/additional_params/location_in_struct.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: PixelLocal = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: PixelLocal = struct @align(4) {
   a:u32 @offset(0)
   b:i32 @offset(4)
   c:f32 @offset(8)
@@ -11,24 +11,35 @@
   b:vec4<f32> @offset(16), @location(1), @interpolate(flat)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %P:ptr<pixel_local, PixelLocal, read_write> = var
 }
 
-%f = @fragment func(%in:In):void -> %b2 {
-  %b2 = block {
+%f = @fragment func(%in:In):void {
+  $B2: {
     %4:ptr<pixel_local, u32, read_write> = access %P, 0u
     %5:f32 = access %in, 0u, 0u
-    %6:u32 = convert %5
-    %7:f32 = access %in, 1u, 1u
-    %8:u32 = convert %7
-    %9:u32 = add %6, %8
-    %10:u32 = load %4
-    %11:u32 = add %10, %9
-    store %4, %11
+    %6:u32 = call %tint_f32_to_u32, %5
+    %8:u32 = let %6
+    %9:f32 = access %in, 1u, 1u
+    %10:u32 = call %tint_f32_to_u32, %9
+    %11:u32 = add %8, %10
+    %12:u32 = load %4
+    %13:u32 = add %12, %11
+    store %4, %13
     ret
   }
 }
+%tint_f32_to_u32 = func(%value:f32):u32 {
+  $B3: {
+    %15:u32 = convert %value
+    %16:bool = gte %value, 0.0f
+    %17:u32 = select 0u, %15, %16
+    %18:bool = lte %value, 4294967040.0f
+    %19:u32 = select 4294967295u, %17, %18
+    ret %19
+  }
+}
 
 unhandled variable address space
 ********************************************************************
diff --git a/test/tint/extensions/pixel_local/entry_point_use/multiple_outputs/multiple_attachments.wgsl.expected.ir.msl b/test/tint/extensions/pixel_local/entry_point_use/multiple_outputs/multiple_attachments.wgsl.expected.ir.msl
index cf623cd..fac2676 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/multiple_outputs/multiple_attachments.wgsl.expected.ir.msl
+++ b/test/tint/extensions/pixel_local/entry_point_use/multiple_outputs/multiple_attachments.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: PixelLocal = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: PixelLocal = struct @align(4) {
   a:u32 @offset(0)
   b:i32 @offset(4)
   c:f32 @offset(8)
@@ -12,12 +12,12 @@
   z:vec4<f32> @offset(32), @location(4)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %P:ptr<pixel_local, PixelLocal, read_write> = var
 }
 
-%f = @fragment func():Out -> %b2 {
-  %b2 = block {
+%f = @fragment func():Out {
+  $B2: {
     %3:ptr<pixel_local, u32, read_write> = access %P, 0u
     %4:u32 = load %3
     %5:u32 = add %4, 42u
diff --git a/test/tint/extensions/pixel_local/entry_point_use/multiple_outputs/single_attachment.wgsl.expected.ir.msl b/test/tint/extensions/pixel_local/entry_point_use/multiple_outputs/single_attachment.wgsl.expected.ir.msl
index 9158200..0bc6ae6 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/multiple_outputs/single_attachment.wgsl.expected.ir.msl
+++ b/test/tint/extensions/pixel_local/entry_point_use/multiple_outputs/single_attachment.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: PixelLocal = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: PixelLocal = struct @align(4) {
   a:u32 @offset(0)
 }
 
@@ -10,12 +10,12 @@
   z:vec4<f32> @offset(32), @location(3)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %P:ptr<pixel_local, PixelLocal, read_write> = var
 }
 
-%f = @fragment func():Out -> %b2 {
-  %b2 = block {
+%f = @fragment func():Out {
+  $B2: {
     %3:ptr<pixel_local, u32, read_write> = access %P, 0u
     %4:u32 = load %3
     %5:u32 = add %4, 42u
diff --git a/test/tint/extensions/pixel_local/entry_point_use/one_output/multiple_attachments.wgsl.expected.ir.msl b/test/tint/extensions/pixel_local/entry_point_use/one_output/multiple_attachments.wgsl.expected.ir.msl
index 4bdd79e..d347bf0 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/one_output/multiple_attachments.wgsl.expected.ir.msl
+++ b/test/tint/extensions/pixel_local/entry_point_use/one_output/multiple_attachments.wgsl.expected.ir.msl
@@ -1,17 +1,17 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: PixelLocal = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: PixelLocal = struct @align(4) {
   a:u32 @offset(0)
   b:i32 @offset(4)
   c:f32 @offset(8)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %P:ptr<pixel_local, PixelLocal, read_write> = var
 }
 
-%f = @fragment func():vec4<f32> [@location(0)] -> %b2 {
-  %b2 = block {
+%f = @fragment func():vec4<f32> [@location(0)] {
+  $B2: {
     %3:ptr<pixel_local, u32, read_write> = access %P, 0u
     %4:u32 = load %3
     %5:u32 = add %4, 42u
diff --git a/test/tint/extensions/pixel_local/entry_point_use/one_output/single_attachment.wgsl.expected.ir.msl b/test/tint/extensions/pixel_local/entry_point_use/one_output/single_attachment.wgsl.expected.ir.msl
index 363261a..e156d14 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/one_output/single_attachment.wgsl.expected.ir.msl
+++ b/test/tint/extensions/pixel_local/entry_point_use/one_output/single_attachment.wgsl.expected.ir.msl
@@ -1,15 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: PixelLocal = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: PixelLocal = struct @align(4) {
   a:u32 @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %P:ptr<pixel_local, PixelLocal, read_write> = var
 }
 
-%f = @fragment func():vec4<f32> [@location(0)] -> %b2 {
-  %b2 = block {
+%f = @fragment func():vec4<f32> [@location(0)] {
+  $B2: {
     %3:ptr<pixel_local, u32, read_write> = access %P, 0u
     %4:u32 = load %3
     %5:u32 = add %4, 42u
diff --git a/test/tint/extensions/pixel_local/entry_point_use/zero_outputs/multiple_attachments.wgsl.expected.ir.msl b/test/tint/extensions/pixel_local/entry_point_use/zero_outputs/multiple_attachments.wgsl.expected.ir.msl
index 3c112b4..8a944e4 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/zero_outputs/multiple_attachments.wgsl.expected.ir.msl
+++ b/test/tint/extensions/pixel_local/entry_point_use/zero_outputs/multiple_attachments.wgsl.expected.ir.msl
@@ -1,17 +1,17 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: PixelLocal = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: PixelLocal = struct @align(4) {
   a:u32 @offset(0)
   b:i32 @offset(4)
   c:f32 @offset(8)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %P:ptr<pixel_local, PixelLocal, read_write> = var
 }
 
-%f = @fragment func():void -> %b2 {
-  %b2 = block {
+%f = @fragment func():void {
+  $B2: {
     %3:ptr<pixel_local, u32, read_write> = access %P, 0u
     %4:u32 = load %3
     %5:u32 = add %4, 42u
diff --git a/test/tint/extensions/pixel_local/entry_point_use/zero_outputs/single_attachment.wgsl.expected.ir.msl b/test/tint/extensions/pixel_local/entry_point_use/zero_outputs/single_attachment.wgsl.expected.ir.msl
index 1a481e2..9238a99 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/zero_outputs/single_attachment.wgsl.expected.ir.msl
+++ b/test/tint/extensions/pixel_local/entry_point_use/zero_outputs/single_attachment.wgsl.expected.ir.msl
@@ -1,15 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: PixelLocal = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: PixelLocal = struct @align(4) {
   a:u32 @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %P:ptr<pixel_local, PixelLocal, read_write> = var
 }
 
-%f = @fragment func():void -> %b2 {
-  %b2 = block {
+%f = @fragment func():void {
+  $B2: {
     %3:ptr<pixel_local, u32, read_write> = access %P, 0u
     %4:u32 = load %3
     %5:u32 = add %4, 42u
diff --git a/test/tint/extensions/pixel_local/indirect_use/multiple_outputs/multiple_attachments.wgsl.expected.ir.msl b/test/tint/extensions/pixel_local/indirect_use/multiple_outputs/multiple_attachments.wgsl.expected.ir.msl
index 343fecb..e5098f2 100644
--- a/test/tint/extensions/pixel_local/indirect_use/multiple_outputs/multiple_attachments.wgsl.expected.ir.msl
+++ b/test/tint/extensions/pixel_local/indirect_use/multiple_outputs/multiple_attachments.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: PixelLocal = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: PixelLocal = struct @align(4) {
   a:u32 @offset(0)
   b:i32 @offset(4)
   c:f32 @offset(8)
@@ -12,12 +12,12 @@
   z:vec4<f32> @offset(32), @location(4)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %P:ptr<pixel_local, PixelLocal, read_write> = var
 }
 
-%f0 = func():void -> %b2 {
-  %b2 = block {
+%f0 = func():void {
+  $B2: {
     %3:ptr<pixel_local, u32, read_write> = access %P, 0u
     %4:u32 = load %3
     %5:u32 = add %4, 9u
@@ -25,8 +25,8 @@
     ret
   }
 }
-%f1 = func():void -> %b3 {
-  %b3 = block {
+%f1 = func():void {
+  $B3: {
     %7:void = call %f0
     %8:ptr<pixel_local, u32, read_write> = access %P, 0u
     %9:u32 = load %8
@@ -35,8 +35,8 @@
     ret
   }
 }
-%f2 = func():void -> %b4 {
-  %b4 = block {
+%f2 = func():void {
+  $B4: {
     %12:ptr<pixel_local, u32, read_write> = access %P, 0u
     %13:u32 = load %12
     %14:u32 = add %13, 7u
@@ -45,8 +45,8 @@
     ret
   }
 }
-%f = @fragment func():Out -> %b5 {
-  %b5 = block {
+%f = @fragment func():Out {
+  $B5: {
     %17:void = call %f2
     ret Out(vec4<f32>(10.0f), vec4<f32>(20.0f), vec4<f32>(30.0f))
   }
diff --git a/test/tint/extensions/pixel_local/indirect_use/multiple_outputs/single_attachment.wgsl.expected.ir.msl b/test/tint/extensions/pixel_local/indirect_use/multiple_outputs/single_attachment.wgsl.expected.ir.msl
index 4b7a792..4c01294 100644
--- a/test/tint/extensions/pixel_local/indirect_use/multiple_outputs/single_attachment.wgsl.expected.ir.msl
+++ b/test/tint/extensions/pixel_local/indirect_use/multiple_outputs/single_attachment.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: PixelLocal = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: PixelLocal = struct @align(4) {
   a:u32 @offset(0)
 }
 
@@ -10,12 +10,12 @@
   z:vec4<f32> @offset(32), @location(3)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %P:ptr<pixel_local, PixelLocal, read_write> = var
 }
 
-%f0 = func():void -> %b2 {
-  %b2 = block {
+%f0 = func():void {
+  $B2: {
     %3:ptr<pixel_local, u32, read_write> = access %P, 0u
     %4:u32 = load %3
     %5:u32 = add %4, 9u
@@ -23,8 +23,8 @@
     ret
   }
 }
-%f1 = func():void -> %b3 {
-  %b3 = block {
+%f1 = func():void {
+  $B3: {
     %7:void = call %f0
     %8:ptr<pixel_local, u32, read_write> = access %P, 0u
     %9:u32 = load %8
@@ -33,8 +33,8 @@
     ret
   }
 }
-%f2 = func():void -> %b4 {
-  %b4 = block {
+%f2 = func():void {
+  $B4: {
     %12:ptr<pixel_local, u32, read_write> = access %P, 0u
     %13:u32 = load %12
     %14:u32 = add %13, 7u
@@ -43,8 +43,8 @@
     ret
   }
 }
-%f = @fragment func():Out -> %b5 {
-  %b5 = block {
+%f = @fragment func():Out {
+  $B5: {
     %17:void = call %f2
     ret Out(vec4<f32>(10.0f), vec4<f32>(20.0f), vec4<f32>(30.0f))
   }
diff --git a/test/tint/extensions/pixel_local/indirect_use/one_output/multiple_attachments.wgsl.expected.ir.msl b/test/tint/extensions/pixel_local/indirect_use/one_output/multiple_attachments.wgsl.expected.ir.msl
index bb9a04c..e834677 100644
--- a/test/tint/extensions/pixel_local/indirect_use/one_output/multiple_attachments.wgsl.expected.ir.msl
+++ b/test/tint/extensions/pixel_local/indirect_use/one_output/multiple_attachments.wgsl.expected.ir.msl
@@ -1,17 +1,17 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: PixelLocal = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: PixelLocal = struct @align(4) {
   a:u32 @offset(0)
   b:i32 @offset(4)
   c:f32 @offset(8)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %P:ptr<pixel_local, PixelLocal, read_write> = var
 }
 
-%f0 = func():void -> %b2 {
-  %b2 = block {
+%f0 = func():void {
+  $B2: {
     %3:ptr<pixel_local, u32, read_write> = access %P, 0u
     %4:u32 = load %3
     %5:u32 = add %4, 9u
@@ -19,8 +19,8 @@
     ret
   }
 }
-%f1 = func():void -> %b3 {
-  %b3 = block {
+%f1 = func():void {
+  $B3: {
     %7:void = call %f0
     %8:ptr<pixel_local, u32, read_write> = access %P, 0u
     %9:u32 = load %8
@@ -29,8 +29,8 @@
     ret
   }
 }
-%f2 = func():void -> %b4 {
-  %b4 = block {
+%f2 = func():void {
+  $B4: {
     %12:ptr<pixel_local, u32, read_write> = access %P, 0u
     %13:u32 = load %12
     %14:u32 = add %13, 7u
@@ -39,8 +39,8 @@
     ret
   }
 }
-%f = @fragment func():vec4<f32> [@location(0)] -> %b5 {
-  %b5 = block {
+%f = @fragment func():vec4<f32> [@location(0)] {
+  $B5: {
     %17:void = call %f2
     ret vec4<f32>(2.0f)
   }
diff --git a/test/tint/extensions/pixel_local/indirect_use/one_output/single_attachment.wgsl.expected.ir.msl b/test/tint/extensions/pixel_local/indirect_use/one_output/single_attachment.wgsl.expected.ir.msl
index 353ceff..f43997e 100644
--- a/test/tint/extensions/pixel_local/indirect_use/one_output/single_attachment.wgsl.expected.ir.msl
+++ b/test/tint/extensions/pixel_local/indirect_use/one_output/single_attachment.wgsl.expected.ir.msl
@@ -1,15 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: PixelLocal = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: PixelLocal = struct @align(4) {
   a:u32 @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %P:ptr<pixel_local, PixelLocal, read_write> = var
 }
 
-%f0 = func():void -> %b2 {
-  %b2 = block {
+%f0 = func():void {
+  $B2: {
     %3:ptr<pixel_local, u32, read_write> = access %P, 0u
     %4:u32 = load %3
     %5:u32 = add %4, 9u
@@ -17,8 +17,8 @@
     ret
   }
 }
-%f1 = func():void -> %b3 {
-  %b3 = block {
+%f1 = func():void {
+  $B3: {
     %7:void = call %f0
     %8:ptr<pixel_local, u32, read_write> = access %P, 0u
     %9:u32 = load %8
@@ -27,8 +27,8 @@
     ret
   }
 }
-%f2 = func():void -> %b4 {
-  %b4 = block {
+%f2 = func():void {
+  $B4: {
     %12:ptr<pixel_local, u32, read_write> = access %P, 0u
     %13:u32 = load %12
     %14:u32 = add %13, 7u
@@ -37,8 +37,8 @@
     ret
   }
 }
-%f = @fragment func():vec4<f32> [@location(0)] -> %b5 {
-  %b5 = block {
+%f = @fragment func():vec4<f32> [@location(0)] {
+  $B5: {
     %17:void = call %f2
     ret vec4<f32>(2.0f)
   }
diff --git a/test/tint/extensions/pixel_local/indirect_use/zero_outputs/multiple_attachments.wgsl.expected.ir.msl b/test/tint/extensions/pixel_local/indirect_use/zero_outputs/multiple_attachments.wgsl.expected.ir.msl
index 98b3e61..7de01ba 100644
--- a/test/tint/extensions/pixel_local/indirect_use/zero_outputs/multiple_attachments.wgsl.expected.ir.msl
+++ b/test/tint/extensions/pixel_local/indirect_use/zero_outputs/multiple_attachments.wgsl.expected.ir.msl
@@ -1,17 +1,17 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: PixelLocal = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: PixelLocal = struct @align(4) {
   a:u32 @offset(0)
   b:i32 @offset(4)
   c:f32 @offset(8)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %P:ptr<pixel_local, PixelLocal, read_write> = var
 }
 
-%f0 = func():void -> %b2 {
-  %b2 = block {
+%f0 = func():void {
+  $B2: {
     %3:ptr<pixel_local, u32, read_write> = access %P, 0u
     %4:u32 = load %3
     %5:u32 = add %4, 9u
@@ -19,8 +19,8 @@
     ret
   }
 }
-%f1 = func():void -> %b3 {
-  %b3 = block {
+%f1 = func():void {
+  $B3: {
     %7:void = call %f0
     %8:ptr<pixel_local, u32, read_write> = access %P, 0u
     %9:u32 = load %8
@@ -29,8 +29,8 @@
     ret
   }
 }
-%f2 = func():void -> %b4 {
-  %b4 = block {
+%f2 = func():void {
+  $B4: {
     %12:ptr<pixel_local, u32, read_write> = access %P, 0u
     %13:u32 = load %12
     %14:u32 = add %13, 7u
@@ -39,8 +39,8 @@
     ret
   }
 }
-%f = @fragment func():void -> %b5 {
-  %b5 = block {
+%f = @fragment func():void {
+  $B5: {
     %17:void = call %f2
     ret
   }
diff --git a/test/tint/extensions/pixel_local/indirect_use/zero_outputs/single_attachment.wgsl.expected.ir.msl b/test/tint/extensions/pixel_local/indirect_use/zero_outputs/single_attachment.wgsl.expected.ir.msl
index 1c86fd3..709ddbe 100644
--- a/test/tint/extensions/pixel_local/indirect_use/zero_outputs/single_attachment.wgsl.expected.ir.msl
+++ b/test/tint/extensions/pixel_local/indirect_use/zero_outputs/single_attachment.wgsl.expected.ir.msl
@@ -1,15 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: PixelLocal = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: PixelLocal = struct @align(4) {
   a:u32 @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %P:ptr<pixel_local, PixelLocal, read_write> = var
 }
 
-%f0 = func():void -> %b2 {
-  %b2 = block {
+%f0 = func():void {
+  $B2: {
     %3:ptr<pixel_local, u32, read_write> = access %P, 0u
     %4:u32 = load %3
     %5:u32 = add %4, 9u
@@ -17,8 +17,8 @@
     ret
   }
 }
-%f1 = func():void -> %b3 {
-  %b3 = block {
+%f1 = func():void {
+  $B3: {
     %7:void = call %f0
     %8:ptr<pixel_local, u32, read_write> = access %P, 0u
     %9:u32 = load %8
@@ -27,8 +27,8 @@
     ret
   }
 }
-%f2 = func():void -> %b4 {
-  %b4 = block {
+%f2 = func():void {
+  $B4: {
     %12:ptr<pixel_local, u32, read_write> = access %P, 0u
     %13:u32 = load %12
     %14:u32 = add %13, 7u
@@ -37,8 +37,8 @@
     ret
   }
 }
-%f = @fragment func():void -> %b5 {
-  %b5 = block {
+%f = @fragment func():void {
+  $B5: {
     %17:void = call %f2
     ret
   }
diff --git a/test/tint/extensions/pixel_local/ptr/local.wgsl.expected.ir.msl b/test/tint/extensions/pixel_local/ptr/local.wgsl.expected.ir.msl
index 997f37f..e8d531e 100644
--- a/test/tint/extensions/pixel_local/ptr/local.wgsl.expected.ir.msl
+++ b/test/tint/extensions/pixel_local/ptr/local.wgsl.expected.ir.msl
@@ -1,15 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: PixelLocal = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: PixelLocal = struct @align(4) {
   a:u32 @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %V:ptr<pixel_local, PixelLocal, read_write> = var
 }
 
-%f = @fragment func():void -> %b2 {
-  %b2 = block {
+%f = @fragment func():void {
+  $B2: {
     %p:ptr<pixel_local, PixelLocal, read_write> = let %V
     %4:ptr<pixel_local, u32, read_write> = access %p, 0u
     store %4, 42u
diff --git a/test/tint/extensions/texel_fetch/additional_params/a.wgsl.expected.ir.msl b/test/tint/extensions/texel_fetch/additional_params/a.wgsl.expected.ir.msl
index e6213cf..814dc06 100644
--- a/test/tint/extensions/texel_fetch/additional_params/a.wgsl.expected.ir.msl
+++ b/test/tint/extensions/texel_fetch/additional_params/a.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/wgsl/reader/program_to_ir/program_to_ir.cc:463 internal compiler error: TINT_UNIMPLEMENTED IR does not currently support texel fetch extension
+../../src/tint/lang/wgsl/reader/program_to_ir/program_to_ir.cc:384 internal compiler error: TINT_UNIMPLEMENTED IR does not currently support texel fetch extension
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/extensions/texel_fetch/additional_params/b.wgsl.expected.ir.msl b/test/tint/extensions/texel_fetch/additional_params/b.wgsl.expected.ir.msl
index e6213cf..814dc06 100644
--- a/test/tint/extensions/texel_fetch/additional_params/b.wgsl.expected.ir.msl
+++ b/test/tint/extensions/texel_fetch/additional_params/b.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/wgsl/reader/program_to_ir/program_to_ir.cc:463 internal compiler error: TINT_UNIMPLEMENTED IR does not currently support texel fetch extension
+../../src/tint/lang/wgsl/reader/program_to_ir/program_to_ir.cc:384 internal compiler error: TINT_UNIMPLEMENTED IR does not currently support texel fetch extension
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/extensions/texel_fetch/additional_params/c.wgsl.expected.ir.msl b/test/tint/extensions/texel_fetch/additional_params/c.wgsl.expected.ir.msl
index 28251dc..0871e97 100644
--- a/test/tint/extensions/texel_fetch/additional_params/c.wgsl.expected.ir.msl
+++ b/test/tint/extensions/texel_fetch/additional_params/c.wgsl.expected.ir.msl
@@ -1,6 +1,27 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: In = struct @align(16) {
+  pos:vec4<f32> @offset(0), @builtin(position)
+  uv:vec4<f32> @offset(16), @location(0)
+  fbf:vec4<f32> @offset(32)
+}
+
+%g = func(%a:f32, %b:f32, %c:f32):void {
+  $B1: {
+    ret
+  }
+}
+%f = @fragment func(%in:In):void {
+  $B2: {
+    %7:f32 = access %in, 0u, 0u
+    %8:f32 = access %in, 1u, 0u
+    %9:f32 = access %in, 2u, 1u
+    %10:void = call %g, %7, %8, %9
+    ret
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/extensions/texel_fetch/additional_params/d.wgsl.expected.ir.msl b/test/tint/extensions/texel_fetch/additional_params/d.wgsl.expected.ir.msl
index e6213cf..814dc06 100644
--- a/test/tint/extensions/texel_fetch/additional_params/d.wgsl.expected.ir.msl
+++ b/test/tint/extensions/texel_fetch/additional_params/d.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/wgsl/reader/program_to_ir/program_to_ir.cc:463 internal compiler error: TINT_UNIMPLEMENTED IR does not currently support texel fetch extension
+../../src/tint/lang/wgsl/reader/program_to_ir/program_to_ir.cc:384 internal compiler error: TINT_UNIMPLEMENTED IR does not currently support texel fetch extension
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/extensions/texel_fetch/additional_params/e.wgsl.expected.ir.msl b/test/tint/extensions/texel_fetch/additional_params/e.wgsl.expected.ir.msl
index 28251dc..45e271b 100644
--- a/test/tint/extensions/texel_fetch/additional_params/e.wgsl.expected.ir.msl
+++ b/test/tint/extensions/texel_fetch/additional_params/e.wgsl.expected.ir.msl
@@ -1,9 +1,21 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct In {
+  int4 fbf;
+  float4 pos [[position]];
+};
+
+void g(int a, float b) {
+}
+fragment void f(In in) {
+  g(in.fbf[3u], in.pos[0u]);
+}
+program_source:10:17: error: invalid type 'In' for input declaration in a fragment function
+fragment void f(In in) {
+                ^~~~~
+program_source:5:3: note: type 'float4' (vector of 4 'float' values) cannot be used in struct of resources/colors
+  float4 pos [[position]];
+  ^
+
diff --git a/test/tint/extensions/texel_fetch/additional_params/f.wgsl.expected.ir.msl b/test/tint/extensions/texel_fetch/additional_params/f.wgsl.expected.ir.msl
index e6213cf..814dc06 100644
--- a/test/tint/extensions/texel_fetch/additional_params/f.wgsl.expected.ir.msl
+++ b/test/tint/extensions/texel_fetch/additional_params/f.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/wgsl/reader/program_to_ir/program_to_ir.cc:463 internal compiler error: TINT_UNIMPLEMENTED IR does not currently support texel fetch extension
+../../src/tint/lang/wgsl/reader/program_to_ir/program_to_ir.cc:384 internal compiler error: TINT_UNIMPLEMENTED IR does not currently support texel fetch extension
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/extensions/texel_fetch/additional_params/g.wgsl.expected.ir.msl b/test/tint/extensions/texel_fetch/additional_params/g.wgsl.expected.ir.msl
index e6213cf..814dc06 100644
--- a/test/tint/extensions/texel_fetch/additional_params/g.wgsl.expected.ir.msl
+++ b/test/tint/extensions/texel_fetch/additional_params/g.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/wgsl/reader/program_to_ir/program_to_ir.cc:463 internal compiler error: TINT_UNIMPLEMENTED IR does not currently support texel fetch extension
+../../src/tint/lang/wgsl/reader/program_to_ir/program_to_ir.cc:384 internal compiler error: TINT_UNIMPLEMENTED IR does not currently support texel fetch extension
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/extensions/texel_fetch/additional_params/h.wgsl.expected.ir.msl b/test/tint/extensions/texel_fetch/additional_params/h.wgsl.expected.ir.msl
index 28251dc..59f332f 100644
--- a/test/tint/extensions/texel_fetch/additional_params/h.wgsl.expected.ir.msl
+++ b/test/tint/extensions/texel_fetch/additional_params/h.wgsl.expected.ir.msl
@@ -1,9 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct FBF {
+  float4 c1;
+  int4 c3;
+};
+
+void g(float a, float b, int c) {
+}
+fragment void f(float4 pos [[position]], FBF fbf) {
+  g(fbf.c1[0u], pos[1u], fbf.c3[2u]);
+}
+program_source:10:42: error: invalid type 'FBF' for input declaration in a fragment function
+fragment void f(float4 pos [[position]], FBF fbf) {
+                                         ^~~~~~~
+program_source:4:10: note: 'color' attribute must be made explicit
+  float4 c1;
+         ^
+program_source:5:8: note: 'color' attribute must be made explicit
+  int4 c3;
+       ^
+
diff --git a/test/tint/extensions/texel_fetch/additional_params/i.wgsl.expected.ir.msl b/test/tint/extensions/texel_fetch/additional_params/i.wgsl.expected.ir.msl
index 28251dc..c3951f8 100644
--- a/test/tint/extensions/texel_fetch/additional_params/i.wgsl.expected.ir.msl
+++ b/test/tint/extensions/texel_fetch/additional_params/i.wgsl.expected.ir.msl
@@ -1,6 +1,27 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: In = struct @align(16) {
+  a:vec4<f32> @offset(0), @location(0)
+  b:vec4<f32> @offset(16), @location(1), @interpolate(flat)
+  fbf:vec4<i32> @offset(32)
+}
+
+%g = func(%a:f32, %b:f32, %c:i32):void {
+  $B1: {
+    ret
+  }
+}
+%f = @fragment func(%in:In):void {
+  $B2: {
+    %7:f32 = access %in, 0u, 0u
+    %8:f32 = access %in, 1u, 1u
+    %9:i32 = access %in, 2u, 0u
+    %10:void = call %g, %7, %8, %9
+    ret
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/extensions/texel_fetch/additional_params/j.wgsl.expected.ir.msl b/test/tint/extensions/texel_fetch/additional_params/j.wgsl.expected.ir.msl
index e6213cf..814dc06 100644
--- a/test/tint/extensions/texel_fetch/additional_params/j.wgsl.expected.ir.msl
+++ b/test/tint/extensions/texel_fetch/additional_params/j.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/wgsl/reader/program_to_ir/program_to_ir.cc:463 internal compiler error: TINT_UNIMPLEMENTED IR does not currently support texel fetch extension
+../../src/tint/lang/wgsl/reader/program_to_ir/program_to_ir.cc:384 internal compiler error: TINT_UNIMPLEMENTED IR does not currently support texel fetch extension
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/extensions/texel_fetch/multiple_outputs/multiple_inputs.wgsl.expected.ir.msl b/test/tint/extensions/texel_fetch/multiple_outputs/multiple_inputs.wgsl.expected.ir.msl
index e6213cf..814dc06 100644
--- a/test/tint/extensions/texel_fetch/multiple_outputs/multiple_inputs.wgsl.expected.ir.msl
+++ b/test/tint/extensions/texel_fetch/multiple_outputs/multiple_inputs.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/wgsl/reader/program_to_ir/program_to_ir.cc:463 internal compiler error: TINT_UNIMPLEMENTED IR does not currently support texel fetch extension
+../../src/tint/lang/wgsl/reader/program_to_ir/program_to_ir.cc:384 internal compiler error: TINT_UNIMPLEMENTED IR does not currently support texel fetch extension
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/extensions/texel_fetch/multiple_outputs/single_input.wgsl.expected.ir.msl b/test/tint/extensions/texel_fetch/multiple_outputs/single_input.wgsl.expected.ir.msl
index e6213cf..814dc06 100644
--- a/test/tint/extensions/texel_fetch/multiple_outputs/single_input.wgsl.expected.ir.msl
+++ b/test/tint/extensions/texel_fetch/multiple_outputs/single_input.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/wgsl/reader/program_to_ir/program_to_ir.cc:463 internal compiler error: TINT_UNIMPLEMENTED IR does not currently support texel fetch extension
+../../src/tint/lang/wgsl/reader/program_to_ir/program_to_ir.cc:384 internal compiler error: TINT_UNIMPLEMENTED IR does not currently support texel fetch extension
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/extensions/texel_fetch/one_output/multiple_inputs.wgsl.expected.ir.msl b/test/tint/extensions/texel_fetch/one_output/multiple_inputs.wgsl.expected.ir.msl
index e6213cf..814dc06 100644
--- a/test/tint/extensions/texel_fetch/one_output/multiple_inputs.wgsl.expected.ir.msl
+++ b/test/tint/extensions/texel_fetch/one_output/multiple_inputs.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/wgsl/reader/program_to_ir/program_to_ir.cc:463 internal compiler error: TINT_UNIMPLEMENTED IR does not currently support texel fetch extension
+../../src/tint/lang/wgsl/reader/program_to_ir/program_to_ir.cc:384 internal compiler error: TINT_UNIMPLEMENTED IR does not currently support texel fetch extension
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/extensions/texel_fetch/one_output/single_input.wgsl.expected.ir.msl b/test/tint/extensions/texel_fetch/one_output/single_input.wgsl.expected.ir.msl
index e6213cf..814dc06 100644
--- a/test/tint/extensions/texel_fetch/one_output/single_input.wgsl.expected.ir.msl
+++ b/test/tint/extensions/texel_fetch/one_output/single_input.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/wgsl/reader/program_to_ir/program_to_ir.cc:463 internal compiler error: TINT_UNIMPLEMENTED IR does not currently support texel fetch extension
+../../src/tint/lang/wgsl/reader/program_to_ir/program_to_ir.cc:384 internal compiler error: TINT_UNIMPLEMENTED IR does not currently support texel fetch extension
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/extensions/texel_fetch/zero_outputs/multiple_inputs.wgsl.expected.ir.msl b/test/tint/extensions/texel_fetch/zero_outputs/multiple_inputs.wgsl.expected.ir.msl
index e6213cf..814dc06 100644
--- a/test/tint/extensions/texel_fetch/zero_outputs/multiple_inputs.wgsl.expected.ir.msl
+++ b/test/tint/extensions/texel_fetch/zero_outputs/multiple_inputs.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/wgsl/reader/program_to_ir/program_to_ir.cc:463 internal compiler error: TINT_UNIMPLEMENTED IR does not currently support texel fetch extension
+../../src/tint/lang/wgsl/reader/program_to_ir/program_to_ir.cc:384 internal compiler error: TINT_UNIMPLEMENTED IR does not currently support texel fetch extension
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/extensions/texel_fetch/zero_outputs/single_input.wgsl.expected.ir.msl b/test/tint/extensions/texel_fetch/zero_outputs/single_input.wgsl.expected.ir.msl
index e6213cf..814dc06 100644
--- a/test/tint/extensions/texel_fetch/zero_outputs/single_input.wgsl.expected.ir.msl
+++ b/test/tint/extensions/texel_fetch/zero_outputs/single_input.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/wgsl/reader/program_to_ir/program_to_ir.cc:463 internal compiler error: TINT_UNIMPLEMENTED IR does not currently support texel fetch extension
+../../src/tint/lang/wgsl/reader/program_to_ir/program_to_ir.cc:384 internal compiler error: TINT_UNIMPLEMENTED IR does not currently support texel fetch extension
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/identifiers/underscore/double/alias.wgsl.expected.ir.msl b/test/tint/identifiers/underscore/double/alias.wgsl.expected.ir.msl
index e815e60..02ab5e8 100644
--- a/test/tint/identifiers/underscore/double/alias.wgsl.expected.ir.msl
+++ b/test/tint/identifiers/underscore/double/alias.wgsl.expected.ir.msl
@@ -1,7 +1,25 @@
-#include <metal_stdlib>
-using namespace metal;
+SKIP: FAILED
 
-void f() {
-  int c = 0;
-  int d = 0;
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %s:ptr<storage, i32, read_write> = var @binding_point(0, 0)
 }
+
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %c:ptr<function, i32, read_write> = var
+    %d:ptr<function, i32, read_write> = var
+    %5:i32 = load %c
+    %6:i32 = load %d
+    %7:i32 = add %5, %6
+    store %s, %7
+    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.  *
+********************************************************************
diff --git a/test/tint/identifiers/underscore/double/const.wgsl.expected.ir.msl b/test/tint/identifiers/underscore/double/const.wgsl.expected.ir.msl
index 0f7ec1f..2414db8 100644
--- a/test/tint/identifiers/underscore/double/const.wgsl.expected.ir.msl
+++ b/test/tint/identifiers/underscore/double/const.wgsl.expected.ir.msl
@@ -1,5 +1,20 @@
-#include <metal_stdlib>
-using namespace metal;
+SKIP: FAILED
 
-void f() {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %s:ptr<storage, i32, read_write> = var @binding_point(0, 0)
 }
+
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    store %s, 3i
+    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.  *
+********************************************************************
diff --git a/test/tint/identifiers/underscore/double/fn.wgsl.expected.ir.msl b/test/tint/identifiers/underscore/double/fn.wgsl.expected.ir.msl
index 220cfbf..368b677 100644
--- a/test/tint/identifiers/underscore/double/fn.wgsl.expected.ir.msl
+++ b/test/tint/identifiers/underscore/double/fn.wgsl.expected.ir.msl
@@ -11,3 +11,7 @@
 void b__() {
   a__();
 }
+kernel void tint_symbol() {
+  b();
+  b__();
+}
diff --git a/test/tint/identifiers/underscore/double/let.wgsl.expected.ir.msl b/test/tint/identifiers/underscore/double/let.wgsl.expected.ir.msl
index 1fb355b..d4a08cd 100644
--- a/test/tint/identifiers/underscore/double/let.wgsl.expected.ir.msl
+++ b/test/tint/identifiers/underscore/double/let.wgsl.expected.ir.msl
@@ -1,9 +1,27 @@
-#include <metal_stdlib>
-using namespace metal;
+SKIP: FAILED
 
-void f() {
-  int const a = 1;
-  int const a__ = a;
-  int const b = a;
-  int const b__ = a__;
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %s:ptr<storage, i32, read_write> = var @binding_point(0, 0)
 }
+
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %a:i32 = let 1i
+    %a__:i32 = let %a
+    %b:i32 = let %a
+    %b__:i32 = let %a__
+    %7:i32 = add %a, %a__
+    %8:i32 = add %7, %b
+    %9:i32 = add %8, %b__
+    store %s, %9
+    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.  *
+********************************************************************
diff --git a/test/tint/identifiers/underscore/double/parameter.wgsl.expected.ir.msl b/test/tint/identifiers/underscore/double/parameter.wgsl.expected.ir.msl
index d66f9b2..14a631f 100644
--- a/test/tint/identifiers/underscore/double/parameter.wgsl.expected.ir.msl
+++ b/test/tint/identifiers/underscore/double/parameter.wgsl.expected.ir.msl
@@ -1,6 +1,27 @@
-#include <metal_stdlib>
-using namespace metal;
+SKIP: FAILED
 
-void f(int a__) {
-  int const b = a__;
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %s:ptr<storage, i32, read_write> = var @binding_point(0, 0)
 }
+
+%f = func(%a__:i32):void {
+  $B2: {
+    %b:i32 = let %a__
+    store %s, %b
+    ret
+  }
+}
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
+    %6:void = call %f, 1i
+    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.  *
+********************************************************************
diff --git a/test/tint/identifiers/underscore/double/struct.wgsl.expected.ir.msl b/test/tint/identifiers/underscore/double/struct.wgsl.expected.ir.msl
index 30fd019..16e0624 100644
--- a/test/tint/identifiers/underscore/double/struct.wgsl.expected.ir.msl
+++ b/test/tint/identifiers/underscore/double/struct.wgsl.expected.ir.msl
@@ -1,10 +1,29 @@
-#include <metal_stdlib>
-using namespace metal;
-struct a__ {
-  int b__;
-};
+SKIP: FAILED
 
-void f() {
-  a__ const c = a__{};
-  int const d = c.b__;
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: a__ = struct @align(4) {
+  b__:i32 @offset(0)
 }
+
+$B1: {  # root
+  %s:ptr<storage, i32, read_write> = var @binding_point(0, 0)
+}
+
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %c:a__ = let a__(0i)
+    %4:i32 = access %c, 0u
+    %d:i32 = let %4
+    %6:i32 = access %c, 0u
+    %7:i32 = add %6, %d
+    store %s, %7
+    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.  *
+********************************************************************
diff --git a/test/tint/identifiers/underscore/double/var.wgsl.expected.ir.msl b/test/tint/identifiers/underscore/double/var.wgsl.expected.ir.msl
index 5ff7f9f..d017af5 100644
--- a/test/tint/identifiers/underscore/double/var.wgsl.expected.ir.msl
+++ b/test/tint/identifiers/underscore/double/var.wgsl.expected.ir.msl
@@ -1,11 +1,29 @@
 SKIP: FAILED
 
-#include <metal_stdlib>
-using namespace metal;
-
-thread int a = 1;
-thread int a__ = 2;
-void f() {
-  int b = a;
-  int b__ = a__;
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %s:ptr<storage, i32, read_write> = var @binding_point(0, 0)
+  %a:ptr<private, i32, read_write> = var, 1i
+  %a__:ptr<private, i32, read_write> = var, 2i
 }
+
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %5:i32 = load %a
+    %b:ptr<function, i32, read_write> = var, %5
+    %7:i32 = load %a__
+    %b__:ptr<function, i32, read_write> = var, %7
+    %9:i32 = load %b
+    %10:i32 = load %b__
+    %11:i32 = add %9, %10
+    store %s, %11
+    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.  *
+********************************************************************
diff --git a/test/tint/identifiers/underscore/prefix/lower/alias.wgsl.expected.ir.msl b/test/tint/identifiers/underscore/prefix/lower/alias.wgsl.expected.ir.msl
index e815e60..02ab5e8 100644
--- a/test/tint/identifiers/underscore/prefix/lower/alias.wgsl.expected.ir.msl
+++ b/test/tint/identifiers/underscore/prefix/lower/alias.wgsl.expected.ir.msl
@@ -1,7 +1,25 @@
-#include <metal_stdlib>
-using namespace metal;
+SKIP: FAILED
 
-void f() {
-  int c = 0;
-  int d = 0;
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %s:ptr<storage, i32, read_write> = var @binding_point(0, 0)
 }
+
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %c:ptr<function, i32, read_write> = var
+    %d:ptr<function, i32, read_write> = var
+    %5:i32 = load %c
+    %6:i32 = load %d
+    %7:i32 = add %5, %6
+    store %s, %7
+    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.  *
+********************************************************************
diff --git a/test/tint/identifiers/underscore/prefix/lower/const.wgsl.expected.ir.msl b/test/tint/identifiers/underscore/prefix/lower/const.wgsl.expected.ir.msl
index 0f7ec1f..2414db8 100644
--- a/test/tint/identifiers/underscore/prefix/lower/const.wgsl.expected.ir.msl
+++ b/test/tint/identifiers/underscore/prefix/lower/const.wgsl.expected.ir.msl
@@ -1,5 +1,20 @@
-#include <metal_stdlib>
-using namespace metal;
+SKIP: FAILED
 
-void f() {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %s:ptr<storage, i32, read_write> = var @binding_point(0, 0)
 }
+
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    store %s, 3i
+    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.  *
+********************************************************************
diff --git a/test/tint/identifiers/underscore/prefix/lower/fn.wgsl.expected.ir.msl b/test/tint/identifiers/underscore/prefix/lower/fn.wgsl.expected.ir.msl
index 52a673e..b638f54 100644
--- a/test/tint/identifiers/underscore/prefix/lower/fn.wgsl.expected.ir.msl
+++ b/test/tint/identifiers/underscore/prefix/lower/fn.wgsl.expected.ir.msl
@@ -11,3 +11,7 @@
 void _b() {
   _a();
 }
+kernel void tint_symbol() {
+  b();
+  _b();
+}
diff --git a/test/tint/identifiers/underscore/prefix/lower/let.wgsl.expected.ir.msl b/test/tint/identifiers/underscore/prefix/lower/let.wgsl.expected.ir.msl
index 41a3f3d..1a3ece5 100644
--- a/test/tint/identifiers/underscore/prefix/lower/let.wgsl.expected.ir.msl
+++ b/test/tint/identifiers/underscore/prefix/lower/let.wgsl.expected.ir.msl
@@ -1,9 +1,27 @@
-#include <metal_stdlib>
-using namespace metal;
+SKIP: FAILED
 
-void f() {
-  int const a = 1;
-  int const _a = a;
-  int const b = a;
-  int const _b = _a;
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %s:ptr<storage, i32, read_write> = var @binding_point(0, 0)
 }
+
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %a:i32 = let 1i
+    %_a:i32 = let %a
+    %b:i32 = let %a
+    %_b:i32 = let %_a
+    %7:i32 = add %a, %_a
+    %8:i32 = add %7, %b
+    %9:i32 = add %8, %_b
+    store %s, %9
+    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.  *
+********************************************************************
diff --git a/test/tint/identifiers/underscore/prefix/lower/parameter.wgsl.expected.ir.msl b/test/tint/identifiers/underscore/prefix/lower/parameter.wgsl.expected.ir.msl
index 7c012b7..6e35dc2 100644
--- a/test/tint/identifiers/underscore/prefix/lower/parameter.wgsl.expected.ir.msl
+++ b/test/tint/identifiers/underscore/prefix/lower/parameter.wgsl.expected.ir.msl
@@ -1,6 +1,27 @@
-#include <metal_stdlib>
-using namespace metal;
+SKIP: FAILED
 
-void f(int _a) {
-  int const b = _a;
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %s:ptr<storage, i32, read_write> = var @binding_point(0, 0)
 }
+
+%f = func(%_a:i32):void {
+  $B2: {
+    %b:i32 = let %_a
+    store %s, %b
+    ret
+  }
+}
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
+    %6:void = call %f, 1i
+    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.  *
+********************************************************************
diff --git a/test/tint/identifiers/underscore/prefix/lower/struct.wgsl.expected.ir.msl b/test/tint/identifiers/underscore/prefix/lower/struct.wgsl.expected.ir.msl
index 6af4145..b13e311 100644
--- a/test/tint/identifiers/underscore/prefix/lower/struct.wgsl.expected.ir.msl
+++ b/test/tint/identifiers/underscore/prefix/lower/struct.wgsl.expected.ir.msl
@@ -1,10 +1,29 @@
-#include <metal_stdlib>
-using namespace metal;
-struct _a {
-  int _b;
-};
+SKIP: FAILED
 
-void f() {
-  _a const c = _a{};
-  int const d = c._b;
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: _a = struct @align(4) {
+  _b:i32 @offset(0)
 }
+
+$B1: {  # root
+  %s:ptr<storage, i32, read_write> = var @binding_point(0, 0)
+}
+
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %c:_a = let _a(0i)
+    %4:i32 = access %c, 0u
+    %d:i32 = let %4
+    %6:i32 = access %c, 0u
+    %7:i32 = add %6, %d
+    store %s, %7
+    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.  *
+********************************************************************
diff --git a/test/tint/identifiers/underscore/prefix/lower/var.wgsl.expected.ir.msl b/test/tint/identifiers/underscore/prefix/lower/var.wgsl.expected.ir.msl
index f00abbc..9605c8b 100644
--- a/test/tint/identifiers/underscore/prefix/lower/var.wgsl.expected.ir.msl
+++ b/test/tint/identifiers/underscore/prefix/lower/var.wgsl.expected.ir.msl
@@ -1,11 +1,29 @@
 SKIP: FAILED
 
-#include <metal_stdlib>
-using namespace metal;
-
-thread int a = 1;
-thread int _a = 2;
-void f() {
-  int b = a;
-  int _b = _a;
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %s:ptr<storage, i32, read_write> = var @binding_point(0, 0)
+  %a:ptr<private, i32, read_write> = var, 1i
+  %_a:ptr<private, i32, read_write> = var, 2i
 }
+
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %5:i32 = load %a
+    %b:ptr<function, i32, read_write> = var, %5
+    %7:i32 = load %_a
+    %_b:ptr<function, i32, read_write> = var, %7
+    %9:i32 = load %b
+    %10:i32 = load %_b
+    %11:i32 = add %9, %10
+    store %s, %11
+    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.  *
+********************************************************************
diff --git a/test/tint/identifiers/underscore/prefix/upper/alias.wgsl.expected.ir.msl b/test/tint/identifiers/underscore/prefix/upper/alias.wgsl.expected.ir.msl
index e815e60..02ab5e8 100644
--- a/test/tint/identifiers/underscore/prefix/upper/alias.wgsl.expected.ir.msl
+++ b/test/tint/identifiers/underscore/prefix/upper/alias.wgsl.expected.ir.msl
@@ -1,7 +1,25 @@
-#include <metal_stdlib>
-using namespace metal;
+SKIP: FAILED
 
-void f() {
-  int c = 0;
-  int d = 0;
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %s:ptr<storage, i32, read_write> = var @binding_point(0, 0)
 }
+
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %c:ptr<function, i32, read_write> = var
+    %d:ptr<function, i32, read_write> = var
+    %5:i32 = load %c
+    %6:i32 = load %d
+    %7:i32 = add %5, %6
+    store %s, %7
+    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.  *
+********************************************************************
diff --git a/test/tint/identifiers/underscore/prefix/upper/fn.wgsl.expected.ir.msl b/test/tint/identifiers/underscore/prefix/upper/fn.wgsl.expected.ir.msl
index c6e0288..216dd43 100644
--- a/test/tint/identifiers/underscore/prefix/upper/fn.wgsl.expected.ir.msl
+++ b/test/tint/identifiers/underscore/prefix/upper/fn.wgsl.expected.ir.msl
@@ -11,3 +11,7 @@
 void _B() {
   _A();
 }
+kernel void tint_symbol() {
+  B();
+  _B();
+}
diff --git a/test/tint/identifiers/underscore/prefix/upper/let.wgsl.expected.ir.msl b/test/tint/identifiers/underscore/prefix/upper/let.wgsl.expected.ir.msl
index ec0d03b..7eee399 100644
--- a/test/tint/identifiers/underscore/prefix/upper/let.wgsl.expected.ir.msl
+++ b/test/tint/identifiers/underscore/prefix/upper/let.wgsl.expected.ir.msl
@@ -1,9 +1,27 @@
-#include <metal_stdlib>
-using namespace metal;
+SKIP: FAILED
 
-void f() {
-  int const A = 1;
-  int const _A = 2;
-  int const B = A;
-  int const _B = _A;
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %s:ptr<storage, i32, read_write> = var @binding_point(0, 0)
 }
+
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %A:i32 = let 1i
+    %_A:i32 = let 2i
+    %B:i32 = let %A
+    %_B:i32 = let %_A
+    %7:i32 = add %A, %_A
+    %8:i32 = add %7, %B
+    %9:i32 = add %8, %_B
+    store %s, %9
+    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.  *
+********************************************************************
diff --git a/test/tint/identifiers/underscore/prefix/upper/parameter.wgsl.expected.ir.msl b/test/tint/identifiers/underscore/prefix/upper/parameter.wgsl.expected.ir.msl
index fff4151..db464a8 100644
--- a/test/tint/identifiers/underscore/prefix/upper/parameter.wgsl.expected.ir.msl
+++ b/test/tint/identifiers/underscore/prefix/upper/parameter.wgsl.expected.ir.msl
@@ -1,6 +1,27 @@
-#include <metal_stdlib>
-using namespace metal;
+SKIP: FAILED
 
-void f(int _A) {
-  int const B = _A;
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %s:ptr<storage, i32, read_write> = var @binding_point(0, 0)
 }
+
+%f = func(%_A:i32):void {
+  $B2: {
+    %B:i32 = let %_A
+    store %s, %B
+    ret
+  }
+}
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
+    %6:void = call %f, 1i
+    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.  *
+********************************************************************
diff --git a/test/tint/identifiers/underscore/prefix/upper/struct.wgsl.expected.ir.msl b/test/tint/identifiers/underscore/prefix/upper/struct.wgsl.expected.ir.msl
index 853b504..b912fa9 100644
--- a/test/tint/identifiers/underscore/prefix/upper/struct.wgsl.expected.ir.msl
+++ b/test/tint/identifiers/underscore/prefix/upper/struct.wgsl.expected.ir.msl
@@ -1,10 +1,29 @@
-#include <metal_stdlib>
-using namespace metal;
-struct _A {
-  int _B;
-};
+SKIP: FAILED
 
-void f() {
-  _A const c = _A{};
-  int const d = c._B;
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: _A = struct @align(4) {
+  _B:i32 @offset(0)
 }
+
+$B1: {  # root
+  %s:ptr<storage, i32, read_write> = var @binding_point(0, 0)
+}
+
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %c:_A = let _A(0i)
+    %4:i32 = access %c, 0u
+    %d:i32 = let %4
+    %6:i32 = access %c, 0u
+    %7:i32 = add %6, %d
+    store %s, %7
+    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.  *
+********************************************************************
diff --git a/test/tint/identifiers/underscore/prefix/upper/var.wgsl.expected.ir.msl b/test/tint/identifiers/underscore/prefix/upper/var.wgsl.expected.ir.msl
index a588ec6..7c016a8 100644
--- a/test/tint/identifiers/underscore/prefix/upper/var.wgsl.expected.ir.msl
+++ b/test/tint/identifiers/underscore/prefix/upper/var.wgsl.expected.ir.msl
@@ -1,11 +1,29 @@
 SKIP: FAILED
 
-#include <metal_stdlib>
-using namespace metal;
-
-thread int A = 1;
-thread int _A = 2;
-void f() {
-  int B = A;
-  int _B = _A;
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %s:ptr<storage, i32, read_write> = var @binding_point(0, 0)
+  %A:ptr<private, i32, read_write> = var, 1i
+  %_A:ptr<private, i32, read_write> = var, 2i
 }
+
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %5:i32 = load %A
+    %B:ptr<function, i32, read_write> = var, %5
+    %7:i32 = load %_A
+    %_B:ptr<function, i32, read_write> = var, %7
+    %9:i32 = load %B
+    %10:i32 = load %_B
+    %11:i32 = add %9, %10
+    store %s, %11
+    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.  *
+********************************************************************
diff --git a/test/tint/layout/storage/mat2x2/f32.wgsl.expected.ir.msl b/test/tint/layout/storage/mat2x2/f32.wgsl.expected.ir.msl
index d366fbc..8429213 100644
--- a/test/tint/layout/storage/mat2x2/f32.wgsl.expected.ir.msl
+++ b/test/tint/layout/storage/mat2x2/f32.wgsl.expected.ir.msl
@@ -1,19 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: SSBO = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SSBO = struct @align(8) {
   m:mat2x2<f32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %ssbo:ptr<storage, SSBO, read_write> = var @binding_point(0, 0)
 }
 
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %3:ptr<storage, mat2x2<f32>, read_write> = access %ssbo, 0u
-    %v:mat2x2<f32> = load %3
-    %5:ptr<storage, mat2x2<f32>, read_write> = access %ssbo, 0u
-    store %5, %v
+    %4:mat2x2<f32> = load %3
+    %v:mat2x2<f32> = let %4
+    %6:ptr<storage, mat2x2<f32>, read_write> = access %ssbo, 0u
+    store %6, %v
     ret
   }
 }
diff --git a/test/tint/layout/storage/mat2x2/stride/16.spvasm.expected.ir.msl b/test/tint/layout/storage/mat2x2/stride/16.spvasm.expected.ir.msl
index 37ab89e..503c46a 100644
--- a/test/tint/layout/storage/mat2x2/stride/16.spvasm.expected.ir.msl
+++ b/test/tint/layout/storage/mat2x2/stride/16.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(8) {
   el:vec2<f32> @offset(0)
 }
 
@@ -8,42 +8,77 @@
   m:array<strided_arr, 2> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %ssbo:ptr<storage, SSBO, read_write> = var @binding_point(0, 0)
 }
 
-%mat2x2_stride_16_to_arr = func(%m:mat2x2<f32>):array<strided_arr, 2> -> %b2 {
-  %b2 = block {
+%mat2x2_stride_16_to_arr = func(%m:mat2x2<f32>):array<strided_arr, 2> {
+  $B2: {
     %4:vec2<f32> = access %m, 0u
     %5:strided_arr = construct %4
-    %6:vec2<f32> = access %m, 1u
-    %7:strided_arr = construct %6
-    %8:array<strided_arr, 2> = construct %5, %7
-    ret %8
+    %6:strided_arr = let %5
+    %7:vec2<f32> = access %m, 1u
+    %8:strided_arr = construct %7
+    %9:array<strided_arr, 2> = construct %6, %8
+    ret %9
   }
 }
-%arr_to_mat2x2_stride_16 = func(%arr:array<strided_arr, 2>):mat2x2<f32> -> %b3 {
-  %b3 = block {
-    %11:vec2<f32> = access %arr, 0u, 0u
-    %12:vec2<f32> = access %arr, 1u, 0u
-    %13:mat2x2<f32> = construct %11, %12
-    ret %13
+%arr_to_mat2x2_stride_16 = func(%arr:array<strided_arr, 2>):mat2x2<f32> {
+  $B3: {
+    %12:vec2<f32> = access %arr, 0u, 0u
+    %13:vec2<f32> = access %arr, 1u, 0u
+    %14:mat2x2<f32> = construct %12, %13
+    ret %14
   }
 }
-%f_1 = func():void -> %b4 {
-  %b4 = block {
-    %15:ptr<storage, array<strided_arr, 2>, read_write> = access %ssbo, 0u
+%f_1 = func():void {
+  $B4: {
     %16:ptr<storage, array<strided_arr, 2>, read_write> = access %ssbo, 0u
-    %17:array<strided_arr, 2> = load %16
-    %18:mat2x2<f32> = call %arr_to_mat2x2_stride_16, %17
-    %19:array<strided_arr, 2> = call %mat2x2_stride_16_to_arr, %18
-    store %15, %19
+    %17:ptr<storage, array<strided_arr, 2>, read_write> = access %ssbo, 0u
+    %18:array<strided_arr, 2> = load %17
+    %19:mat2x2<f32> = call %arr_to_mat2x2_stride_16, %18
+    %20:array<strided_arr, 2> = call %mat2x2_stride_16_to_arr, %19
+    %21:void = call %tint_store_and_preserve_padding, %16, %20
     ret
   }
 }
-%f = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %21:void = call %f_1
+%f = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %24:void = call %f_1
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, array<strided_arr, 2>, read_write>, %value_param:array<strided_arr, 2>):void {
+  $B6: {
+    loop [i: $B7, b: $B8, c: $B9] {  # loop_1
+      $B7: {  # initializer
+        next_iteration 0u  # -> $B8
+      }
+      $B8 (%idx:u32): {  # body
+        %28:bool = gte %idx, 2u
+        if %28 [t: $B10] {  # if_1
+          $B10: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %29:ptr<storage, strided_arr, read_write> = access %target, %idx
+        %30:strided_arr = access %value_param, %idx
+        %31:void = call %tint_store_and_preserve_padding_1, %29, %30
+        continue  # -> $B9
+      }
+      $B9: {  # continuing
+        %33:u32 = add %idx, 1u
+        next_iteration %33  # -> $B8
+      }
+    }
+    ret
+  }
+}
+%tint_store_and_preserve_padding_1 = func(%target_1:ptr<storage, strided_arr, read_write>, %value_param_1:strided_arr):void {  # %tint_store_and_preserve_padding_1: 'tint_store_and_preserve_padding', %target_1: 'target', %value_param_1: 'value_param'
+  $B11: {
+    %36:ptr<storage, vec2<f32>, read_write> = access %target_1, 0u
+    %37:vec2<f32> = access %value_param_1, 0u
+    store %36, %37
     ret
   }
 }
diff --git a/test/tint/loops/nested_loops.wgsl.expected.ir.msl b/test/tint/loops/nested_loops.wgsl.expected.ir.msl
index 4721280..70b1c91 100644
--- a/test/tint/loops/nested_loops.wgsl.expected.ir.msl
+++ b/test/tint/loops/nested_loops.wgsl.expected.ir.msl
@@ -19,7 +19,7 @@
           continue;
         }
       }
-      continue;
+      /* unreachable */
     }
   }
   /* unreachable */
diff --git a/test/tint/loops/nested_loops_with_continuing.wgsl.expected.ir.msl b/test/tint/loops/nested_loops_with_continuing.wgsl.expected.ir.msl
index 7fcf68c..8f07396 100644
--- a/test/tint/loops/nested_loops_with_continuing.wgsl.expected.ir.msl
+++ b/test/tint/loops/nested_loops_with_continuing.wgsl.expected.ir.msl
@@ -18,8 +18,7 @@
           continue;
         }
       }
-      i = (i + 1);
-      continue;
+      /* unreachable */
     }
   }
   /* unreachable */
diff --git a/test/tint/out_of_order_decls/array/alias.wgsl.expected.ir.msl b/test/tint/out_of_order_decls/array/alias.wgsl.expected.ir.msl
index 28251dc..61afed3 100644
--- a/test/tint/out_of_order_decls/array/alias.wgsl.expected.ir.msl
+++ b/test/tint/out_of_order_decls/array/alias.wgsl.expected.ir.msl
@@ -1,9 +1,25 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#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];
+};
+
+
+thread tint_array<int, 4> A = {};
+fragment void f() {
+  A[0] = 1;
+}
+program_source:16:27: error: program scope variable must reside in constant address space
+thread tint_array<int, 4> A = {};
+                          ^
+
diff --git a/test/tint/out_of_order_decls/array/struct.wgsl.expected.ir.msl b/test/tint/out_of_order_decls/array/struct.wgsl.expected.ir.msl
index 28251dc..6a4b89d 100644
--- a/test/tint/out_of_order_decls/array/struct.wgsl.expected.ir.msl
+++ b/test/tint/out_of_order_decls/array/struct.wgsl.expected.ir.msl
@@ -1,9 +1,28 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#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];
+};
+
+struct S {
+  int m;
+};
+
+thread tint_array<S, 4> A = {};
+fragment void f() {
+  A[0] = S{.m=1};
+}
+program_source:19:25: error: program scope variable must reside in constant address space
+thread tint_array<S, 4> A = {};
+                        ^
+
diff --git a/test/tint/out_of_order_decls/func/var.wgsl.expected.ir.msl b/test/tint/out_of_order_decls/func/var.wgsl.expected.ir.msl
index 5c23e22..afda7c5 100644
--- a/test/tint/out_of_order_decls/func/var.wgsl.expected.ir.msl
+++ b/test/tint/out_of_order_decls/func/var.wgsl.expected.ir.msl
@@ -4,5 +4,13 @@
 using namespace metal;
 
 thread int a = 1;
-void f() {
+fragment void f() {
+  int const b = a;
 }
+program_source:4:12: error: program scope variable must reside in constant address space
+thread int a = 1;
+           ^
+program_source:6:13: warning: unused variable 'b' [-Wunused-variable]
+  int const b = a;
+            ^
+
diff --git a/test/tint/ptr_ref/access/matrix.wgsl.expected.ir.msl b/test/tint/ptr_ref/access/matrix.wgsl.expected.ir.msl
index 28251dc..ab4c76f 100644
--- a/test/tint/ptr_ref/access/matrix.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/access/matrix.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+kernel void tint_symbol() {
+  float3x3 m = float3x3(float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f));
+  thread float3* const v = m[1];
+  v = float3(5.0f);
+}
+program_source:6:24: error: cannot initialize a variable of type 'float3 *const' with an lvalue of type 'vec<float, 3>' (vector of 3 'float' values)
+  thread float3* const v = m[1];
+                       ^   ~~~~
+program_source:7:5: error: cannot assign to variable 'v' with const-qualified type 'float3 *const'
+  v = float3(5.0f);
+  ~ ^
+program_source:6:24: note: variable 'v' declared const here
+  thread float3* const v = m[1];
+  ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~
+
diff --git a/test/tint/ptr_ref/load/global/i32.spvasm.expected.ir.msl b/test/tint/ptr_ref/load/global/i32.spvasm.expected.ir.msl
index 792ab03..f08e7dd 100644
--- a/test/tint/ptr_ref/load/global/i32.spvasm.expected.ir.msl
+++ b/test/tint/ptr_ref/load/global/i32.spvasm.expected.ir.msl
@@ -1,9 +1,19 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread int I = 0;
+void main_1() {
+  int const x_11 = (I + 1);
+}
+kernel void tint_symbol() {
+  main_1();
+}
+program_source:4:12: error: program scope variable must reside in constant address space
+thread int I = 0;
+           ^
+program_source:6:13: warning: unused variable 'x_11' [-Wunused-variable]
+  int const x_11 = (I + 1);
+            ^
+
diff --git a/test/tint/ptr_ref/load/global/i32.wgsl.expected.ir.msl b/test/tint/ptr_ref/load/global/i32.wgsl.expected.ir.msl
index c81019f..48870d6 100644
--- a/test/tint/ptr_ref/load/global/i32.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/load/global/i32.wgsl.expected.ir.msl
@@ -4,5 +4,14 @@
 using namespace metal;
 
 thread int I = 0;
-void tint_symbol() {
+kernel void tint_symbol() {
+  int const i = I;
+  int const u = (i + 1);
 }
+program_source:4:12: error: program scope variable must reside in constant address space
+thread int I = 0;
+           ^
+program_source:7:13: warning: unused variable 'u' [-Wunused-variable]
+  int const u = (i + 1);
+            ^
+
diff --git a/test/tint/ptr_ref/load/global/struct_field.spvasm.expected.ir.msl b/test/tint/ptr_ref/load/global/struct_field.spvasm.expected.ir.msl
index 28251dc..ebcf5ae 100644
--- a/test/tint/ptr_ref/load/global/struct_field.spvasm.expected.ir.msl
+++ b/test/tint/ptr_ref/load/global/struct_field.spvasm.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct S {
+  int i;
+};
+
+thread S V = {};
+void main_1() {
+  int i = 0;
+  i = V.i;
+}
+kernel void tint_symbol() {
+  main_1();
+}
+program_source:7:10: error: program scope variable must reside in constant address space
+thread S V = {};
+         ^
+
diff --git a/test/tint/ptr_ref/load/global/struct_field.wgsl.expected.ir.msl b/test/tint/ptr_ref/load/global/struct_field.wgsl.expected.ir.msl
index 28251dc..5941748 100644
--- a/test/tint/ptr_ref/load/global/struct_field.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/load/global/struct_field.wgsl.expected.ir.msl
@@ -1,9 +1,19 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct S {
+  int i;
+};
+
+thread S V = {};
+kernel void tint_symbol() {
+  int const i = V.i;
+}
+program_source:7:10: error: program scope variable must reside in constant address space
+thread S V = {};
+         ^
+program_source:9:13: warning: unused variable 'i' [-Wunused-variable]
+  int const i = V.i;
+            ^
+
diff --git a/test/tint/ptr_ref/load/local/ptr_function.wgsl.expected.ir.msl b/test/tint/ptr_ref/load/local/ptr_function.wgsl.expected.ir.msl
index 5cf693f..7eab9cb 100644
--- a/test/tint/ptr_ref/load/local/ptr_function.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/load/local/ptr_function.wgsl.expected.ir.msl
@@ -3,7 +3,15 @@
 #include <metal_stdlib>
 using namespace metal;
 
-void tint_symbol() {
+kernel void tint_symbol() {
   int i = 123;
   thread int* const p = i;
+  int const u = (p + 1);
 }
+program_source:6:21: error: cannot initialize a variable of type 'int *const' with an lvalue of type 'int'
+  thread int* const p = i;
+                    ^   ~
+program_source:7:13: error: cannot initialize a variable of type 'const int' with an rvalue of type 'int *'
+  int const u = (p + 1);
+            ^   ~~~~~~~
+
diff --git a/test/tint/ptr_ref/load/local/ptr_private.wgsl.expected.ir.msl b/test/tint/ptr_ref/load/local/ptr_private.wgsl.expected.ir.msl
index 14bee98..1da1a69 100644
--- a/test/tint/ptr_ref/load/local/ptr_private.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/load/local/ptr_private.wgsl.expected.ir.msl
@@ -4,6 +4,14 @@
 using namespace metal;
 
 thread int i = 123;
-void tint_symbol() {
+kernel void tint_symbol() {
   thread int* const p = i;
+  int const u = (p + 1);
 }
+program_source:4:12: error: program scope variable must reside in constant address space
+thread int i = 123;
+           ^
+program_source:7:13: error: cannot initialize a variable of type 'const int' with an rvalue of type 'int *'
+  int const u = (p + 1);
+            ^   ~~~~~~~
+
diff --git a/test/tint/ptr_ref/load/local/ptr_storage.wgsl.expected.ir.msl b/test/tint/ptr_ref/load/local/ptr_storage.wgsl.expected.ir.msl
index 115bf6f..14e76e5 100644
--- a/test/tint/ptr_ref/load/local/ptr_storage.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/load/local/ptr_storage.wgsl.expected.ir.msl
@@ -1,18 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   a:i32 @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %v:ptr<storage, S, read_write> = var @binding_point(0, 0)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %p:ptr<storage, i32, read_write> = access %v, 0u
-    %4:i32 = load %p
-    %u:i32 = add %4, 1i
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %3:ptr<storage, i32, read_write> = access %v, 0u
+    %p:ptr<storage, i32, read_write> = let %3
+    %5:i32 = load %p
+    %6:i32 = add %5, 1i
+    %u:i32 = let %6
     ret
   }
 }
diff --git a/test/tint/ptr_ref/load/local/ptr_uniform.wgsl.expected.ir.msl b/test/tint/ptr_ref/load/local/ptr_uniform.wgsl.expected.ir.msl
index 80bdd95..b062550 100644
--- a/test/tint/ptr_ref/load/local/ptr_uniform.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/load/local/ptr_uniform.wgsl.expected.ir.msl
@@ -1,18 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   a:i32 @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %v:ptr<uniform, S, read> = var @binding_point(0, 0)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
-    %p:ptr<uniform, i32, read> = access %v, 0u
-    %4:i32 = load %p
-    %u:i32 = add %4, 1i
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %3:ptr<uniform, i32, read> = access %v, 0u
+    %p:ptr<uniform, i32, read> = let %3
+    %5:i32 = load %p
+    %6:i32 = add %5, 1i
+    %u:i32 = let %6
     ret
   }
 }
diff --git a/test/tint/ptr_ref/load/local/ptr_workgroup.wgsl.expected.ir.msl b/test/tint/ptr_ref/load/local/ptr_workgroup.wgsl.expected.ir.msl
index efdd3b1..5a6429d 100644
--- a/test/tint/ptr_ref/load/local/ptr_workgroup.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/load/local/ptr_workgroup.wgsl.expected.ir.msl
@@ -1,9 +1,32 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+threadgroup int i;
+kernel void tint_symbol(uint tint_local_index [[thread_index_in_threadgroup]]) {
+  if ((tint_local_index == 0u)) {
+    i = 0;
+  }
+  threadgroup_barrier(mem_flags::mem_threadgroup);
+  i = 123;
+  threadgroup int* const p = i;
+  int const u = (p + 1);
+}
+program_source:4:17: error: program scope variable must reside in constant address space
+threadgroup int i;
+                ^
+program_source:6:25: warning: equality comparison with extraneous parentheses [-Wparentheses-equality]
+  if ((tint_local_index == 0u)) {
+       ~~~~~~~~~~~~~~~~~^~~~~
+program_source:6:25: note: remove extraneous parentheses around the comparison to silence this warning
+  if ((tint_local_index == 0u)) {
+      ~                 ^    ~
+program_source:6:25: note: use '=' to turn this equality comparison into an assignment
+  if ((tint_local_index == 0u)) {
+                        ^~
+                        =
+program_source:12:13: error: cannot initialize a variable of type 'const int' with an rvalue of type 'threadgroup int *'
+  int const u = (p + 1);
+            ^   ~~~~~~~
+
diff --git a/test/tint/ptr_ref/load/param/function/array_in_struct.wgsl.expected.ir.msl b/test/tint/ptr_ref/load/param/function/array_in_struct.wgsl.expected.ir.msl
index 567c382..2206f2b 100644
--- a/test/tint/ptr_ref/load/param/function/array_in_struct.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/load/param/function/array_in_struct.wgsl.expected.ir.msl
@@ -1,9 +1,88 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:270 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#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];
+};
+
+struct str {
+  tint_array<int, 4> arr;
+};
+
+tint_array<int, 4> func(thread tint_array<int, 4>* const pointer) {
+  return pointer;
+}
+kernel void tint_symbol() {
+  str F = {};
+  tint_array<int, 4> const r = func(F.arr);
+}
+program_source:20:10: error: no viable conversion from returned value of type 'tint_array<int, 4> *const' to function return type 'tint_array<int, 4>'
+  return pointer;
+         ^~~~~~~
+program_source:4:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'tint_array<int, 4> *const' to 'const tint_array<int, 4> &' for 1st argument; dereference the argument with *
+struct tint_array {
+       ^
+program_source:4:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'tint_array<int, 4> *const' to 'const tint_array<int, 4> &' for 1st argument; dereference the argument with *
+struct tint_array {
+       ^
+program_source:4:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'tint_array<int, 4> *const' to 'const tint_array<int, 4> &' for 1st argument; dereference the argument with *
+struct tint_array {
+       ^
+program_source:4:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'tint_array<int, 4> *const' to 'const device tint_array<int, 4> &' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'tint_array<int, 4> *const' to 'const threadgroup tint_array<int, 4> &' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'tint_array<int, 4> *const' to 'const constant tint_array<int, 4> &' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'tint_array<int, 4> *const' to 'const device tint_array<int, 4> &' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'tint_array<int, 4> *const' to 'const threadgroup tint_array<int, 4> &' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'tint_array<int, 4> *const' to 'const constant tint_array<int, 4> &' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'tint_array<int, 4> *const' to 'const constant tint_array<int, 4> &' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'tint_array<int, 4> *const' to 'tint_array<int, 4> &&' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'tint_array<int, 4> *const' to 'device tint_array<int, 4> &&' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'tint_array<int, 4> *const' to 'threadgroup tint_array<int, 4> &&' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'tint_array<int, 4> *const' to 'tint_array<int, 4> &&' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'tint_array<int, 4> *const' to 'device tint_array<int, 4> &&' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'tint_array<int, 4> *const' to 'threadgroup tint_array<int, 4> &&' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'tint_array<int, 4> *const' to 'tint_array<int, 4> &&' for 1st argument
+struct tint_array {
+       ^
+program_source:24:32: error: no matching function for call to 'func'
+  tint_array<int, 4> const r = func(F.arr);
+                               ^~~~
+program_source:19:20: note: candidate function not viable: no known conversion from 'tint_array<int, 4>' to 'tint_array<int, 4> *const' for 1st argument; take the address of the argument with &
+tint_array<int, 4> func(thread tint_array<int, 4>* const pointer) {
+                   ^
+
diff --git a/test/tint/ptr_ref/load/param/function/i32.wgsl.expected.ir.msl b/test/tint/ptr_ref/load/param/function/i32.wgsl.expected.ir.msl
index 567c382..8fde8df 100644
--- a/test/tint/ptr_ref/load/param/function/i32.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/load/param/function/i32.wgsl.expected.ir.msl
@@ -1,9 +1,22 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:270 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+int func(thread int* const pointer) {
+  return pointer;
+}
+kernel void tint_symbol() {
+  int F = 0;
+  int const r = func(F);
+}
+program_source:5:10: error: cannot initialize return object of type 'int' with an lvalue of type 'int *const'
+  return pointer;
+         ^~~~~~~
+program_source:9:17: error: no matching function for call to 'func'
+  int const r = func(F);
+                ^~~~
+program_source:4:5: note: candidate function not viable: no known conversion from 'int' to 'int *const' for 1st argument; take the address of the argument with &
+int func(thread int* const pointer) {
+    ^
+
diff --git a/test/tint/ptr_ref/load/param/function/i32_in_struct.wgsl.expected.ir.msl b/test/tint/ptr_ref/load/param/function/i32_in_struct.wgsl.expected.ir.msl
index 567c382..f23c502 100644
--- a/test/tint/ptr_ref/load/param/function/i32_in_struct.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/load/param/function/i32_in_struct.wgsl.expected.ir.msl
@@ -1,9 +1,25 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:270 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct str {
+  int i;
+};
+
+int func(thread int* const pointer) {
+  return pointer;
+}
+kernel void tint_symbol() {
+  str F = {};
+  int const r = func(F.i);
+}
+program_source:8:10: error: cannot initialize return object of type 'int' with an lvalue of type 'int *const'
+  return pointer;
+         ^~~~~~~
+program_source:12:17: error: no matching function for call to 'func'
+  int const r = func(F.i);
+                ^~~~
+program_source:7:5: note: candidate function not viable: no known conversion from 'int' to 'int *const' for 1st argument; take the address of the argument with &
+int func(thread int* const pointer) {
+    ^
+
diff --git a/test/tint/ptr_ref/load/param/function/struct_in_array.wgsl.expected.ir.msl b/test/tint/ptr_ref/load/param/function/struct_in_array.wgsl.expected.ir.msl
index 567c382..af589aa 100644
--- a/test/tint/ptr_ref/load/param/function/struct_in_array.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/load/param/function/struct_in_array.wgsl.expected.ir.msl
@@ -1,9 +1,88 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:270 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct str {
+  int i;
+};
+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];
+};
+
+
+str func(thread str* const pointer) {
+  return pointer;
+}
+kernel void tint_symbol() {
+  tint_array<str, 4> F = {};
+  str const r = func(F[2]);
+}
+program_source:20:10: error: no viable conversion from returned value of type 'str *const' to function return type 'str'
+  return pointer;
+         ^~~~~~~
+program_source:3:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'str *const' to 'const str &' for 1st argument; dereference the argument with *
+struct str {
+       ^
+program_source:3:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'str *const' to 'const str &' for 1st argument; dereference the argument with *
+struct str {
+       ^
+program_source:3:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'str *const' to 'const str &' for 1st argument; dereference the argument with *
+struct str {
+       ^
+program_source:3:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'str *const' to 'const device str &' for 1st argument
+struct str {
+       ^
+program_source:3:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'str *const' to 'const threadgroup str &' for 1st argument
+struct str {
+       ^
+program_source:3:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'str *const' to 'const constant str &' for 1st argument
+struct str {
+       ^
+program_source:3:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'str *const' to 'const device str &' for 1st argument
+struct str {
+       ^
+program_source:3:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'str *const' to 'const threadgroup str &' for 1st argument
+struct str {
+       ^
+program_source:3:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'str *const' to 'const constant str &' for 1st argument
+struct str {
+       ^
+program_source:3:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'str *const' to 'const constant str &' for 1st argument
+struct str {
+       ^
+program_source:3:8: note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'str *const' to 'str &&' for 1st argument
+struct str {
+       ^
+program_source:3:8: note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'str *const' to 'device str &&' for 1st argument
+struct str {
+       ^
+program_source:3:8: note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'str *const' to 'threadgroup str &&' for 1st argument
+struct str {
+       ^
+program_source:3:8: note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'str *const' to 'str &&' for 1st argument
+struct str {
+       ^
+program_source:3:8: note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'str *const' to 'device str &&' for 1st argument
+struct str {
+       ^
+program_source:3:8: note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'str *const' to 'threadgroup str &&' for 1st argument
+struct str {
+       ^
+program_source:3:8: note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'str *const' to 'str &&' for 1st argument
+struct str {
+       ^
+program_source:24:17: error: no matching function for call to 'func'
+  str const r = func(F[2]);
+                ^~~~
+program_source:19:5: note: candidate function not viable: no known conversion from 'str' to 'str *const' for 1st argument; take the address of the argument with &
+str func(thread str* const pointer) {
+    ^
+
diff --git a/test/tint/ptr_ref/load/param/function/vec2_f32_in_mat2x2.wgsl.expected.ir.msl b/test/tint/ptr_ref/load/param/function/vec2_f32_in_mat2x2.wgsl.expected.ir.msl
index 567c382..a2b85d0 100644
--- a/test/tint/ptr_ref/load/param/function/vec2_f32_in_mat2x2.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/load/param/function/vec2_f32_in_mat2x2.wgsl.expected.ir.msl
@@ -1,9 +1,22 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:270 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+float2 func(thread float2* const pointer) {
+  return pointer;
+}
+kernel void tint_symbol() {
+  float2x2 F = float2x2(0.0f);
+  float2 const r = func(F[1]);
+}
+program_source:5:10: error: cannot initialize return object of type 'float2' (vector of 2 'float' values) with an lvalue of type 'float2 *const'
+  return pointer;
+         ^~~~~~~
+program_source:9:20: error: no matching function for call to 'func'
+  float2 const r = func(F[1]);
+                   ^~~~
+program_source:4:8: note: candidate function not viable: no known conversion from 'vec<float, 2>' (vector of 2 'float' values) to 'float2 *const' for 1st argument; take the address of the argument with &
+float2 func(thread float2* const pointer) {
+       ^
+
diff --git a/test/tint/ptr_ref/load/param/function/vec4_f32.wgsl.expected.ir.msl b/test/tint/ptr_ref/load/param/function/vec4_f32.wgsl.expected.ir.msl
index 567c382..b4e02d6 100644
--- a/test/tint/ptr_ref/load/param/function/vec4_f32.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/load/param/function/vec4_f32.wgsl.expected.ir.msl
@@ -1,9 +1,22 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:270 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+float4 func(thread float4* const pointer) {
+  return pointer;
+}
+kernel void tint_symbol() {
+  float4 F = 0.0f;
+  float4 const r = func(F);
+}
+program_source:5:10: error: cannot initialize return object of type 'float4' (vector of 4 'float' values) with an lvalue of type 'float4 *const'
+  return pointer;
+         ^~~~~~~
+program_source:9:20: error: no matching function for call to 'func'
+  float4 const r = func(F);
+                   ^~~~
+program_source:4:8: note: candidate function not viable: no known conversion from 'float4' (vector of 4 'float' values) to 'float4 *const' for 1st argument; take the address of the argument with &
+float4 func(thread float4* const pointer) {
+       ^
+
diff --git a/test/tint/ptr_ref/load/param/function/vec4_f32_in_mat2x4.wgsl.expected.ir.msl b/test/tint/ptr_ref/load/param/function/vec4_f32_in_mat2x4.wgsl.expected.ir.msl
index 567c382..fdb732b 100644
--- a/test/tint/ptr_ref/load/param/function/vec4_f32_in_mat2x4.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/load/param/function/vec4_f32_in_mat2x4.wgsl.expected.ir.msl
@@ -1,9 +1,22 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:270 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+float4 func(thread float4* const pointer) {
+  return pointer;
+}
+kernel void tint_symbol() {
+  float2x4 F = float2x4(0.0f);
+  float4 const r = func(F[1]);
+}
+program_source:5:10: error: cannot initialize return object of type 'float4' (vector of 4 'float' values) with an lvalue of type 'float4 *const'
+  return pointer;
+         ^~~~~~~
+program_source:9:20: error: no matching function for call to 'func'
+  float4 const r = func(F[1]);
+                   ^~~~
+program_source:4:8: note: candidate function not viable: no known conversion from 'vec<float, 4>' (vector of 4 'float' values) to 'float4 *const' for 1st argument; take the address of the argument with &
+float4 func(thread float4* const pointer) {
+       ^
+
diff --git a/test/tint/ptr_ref/load/param/function/vec4_f32_in_struct.wgsl.expected.ir.msl b/test/tint/ptr_ref/load/param/function/vec4_f32_in_struct.wgsl.expected.ir.msl
index 567c382..40bdda9 100644
--- a/test/tint/ptr_ref/load/param/function/vec4_f32_in_struct.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/load/param/function/vec4_f32_in_struct.wgsl.expected.ir.msl
@@ -1,9 +1,25 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:270 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct str {
+  float4 i;
+};
+
+float4 func(thread float4* const pointer) {
+  return pointer;
+}
+kernel void tint_symbol() {
+  str F = {};
+  float4 const r = func(F.i);
+}
+program_source:8:10: error: cannot initialize return object of type 'float4' (vector of 4 'float' values) with an lvalue of type 'float4 *const'
+  return pointer;
+         ^~~~~~~
+program_source:12:20: error: no matching function for call to 'func'
+  float4 const r = func(F.i);
+                   ^~~~
+program_source:7:8: note: candidate function not viable: no known conversion from 'float4' (vector of 4 'float' values) to 'float4 *const' for 1st argument; take the address of the argument with &
+float4 func(thread float4* const pointer) {
+       ^
+
diff --git a/test/tint/ptr_ref/load/param/private/array_in_struct.wgsl.expected.ir.msl b/test/tint/ptr_ref/load/param/private/array_in_struct.wgsl.expected.ir.msl
index 567c382..bccad69 100644
--- a/test/tint/ptr_ref/load/param/private/array_in_struct.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/load/param/private/array_in_struct.wgsl.expected.ir.msl
@@ -1,9 +1,88 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:270 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#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];
+};
+
+struct str {
+  tint_array<int, 4> arr;
+};
+
+thread str P = {};
+tint_array<int, 4> func(thread tint_array<int, 4>* const pointer) {
+  return pointer;
+}
+kernel void tint_symbol() {
+  tint_array<int, 4> const r = func(P.arr);
+}
+program_source:19:12: error: program scope variable must reside in constant address space
+thread str P = {};
+           ^
+program_source:21:10: error: no viable conversion from returned value of type 'tint_array<int, 4> *const' to function return type 'tint_array<int, 4>'
+  return pointer;
+         ^~~~~~~
+program_source:4:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'tint_array<int, 4> *const' to 'const tint_array<int, 4> &' for 1st argument; dereference the argument with *
+struct tint_array {
+       ^
+program_source:4:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'tint_array<int, 4> *const' to 'const tint_array<int, 4> &' for 1st argument; dereference the argument with *
+struct tint_array {
+       ^
+program_source:4:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'tint_array<int, 4> *const' to 'const tint_array<int, 4> &' for 1st argument; dereference the argument with *
+struct tint_array {
+       ^
+program_source:4:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'tint_array<int, 4> *const' to 'const device tint_array<int, 4> &' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'tint_array<int, 4> *const' to 'const threadgroup tint_array<int, 4> &' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'tint_array<int, 4> *const' to 'const constant tint_array<int, 4> &' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'tint_array<int, 4> *const' to 'const device tint_array<int, 4> &' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'tint_array<int, 4> *const' to 'const threadgroup tint_array<int, 4> &' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'tint_array<int, 4> *const' to 'const constant tint_array<int, 4> &' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'tint_array<int, 4> *const' to 'const constant tint_array<int, 4> &' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'tint_array<int, 4> *const' to 'tint_array<int, 4> &&' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'tint_array<int, 4> *const' to 'device tint_array<int, 4> &&' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'tint_array<int, 4> *const' to 'threadgroup tint_array<int, 4> &&' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'tint_array<int, 4> *const' to 'tint_array<int, 4> &&' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'tint_array<int, 4> *const' to 'device tint_array<int, 4> &&' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'tint_array<int, 4> *const' to 'threadgroup tint_array<int, 4> &&' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'tint_array<int, 4> *const' to 'tint_array<int, 4> &&' for 1st argument
+struct tint_array {
+       ^
+program_source:24:28: warning: unused variable 'r' [-Wunused-variable]
+  tint_array<int, 4> const r = func(P.arr);
+                           ^
+
diff --git a/test/tint/ptr_ref/load/param/private/i32.wgsl.expected.ir.msl b/test/tint/ptr_ref/load/param/private/i32.wgsl.expected.ir.msl
index 567c382..3788448 100644
--- a/test/tint/ptr_ref/load/param/private/i32.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/load/param/private/i32.wgsl.expected.ir.msl
@@ -1,9 +1,22 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:270 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread int P = 0;
+int func(thread int* const pointer) {
+  return pointer;
+}
+kernel void tint_symbol() {
+  int const r = func(P);
+}
+program_source:4:12: error: program scope variable must reside in constant address space
+thread int P = 0;
+           ^
+program_source:6:10: error: cannot initialize return object of type 'int' with an lvalue of type 'int *const'
+  return pointer;
+         ^~~~~~~
+program_source:9:13: warning: unused variable 'r' [-Wunused-variable]
+  int const r = func(P);
+            ^
+
diff --git a/test/tint/ptr_ref/load/param/private/i32_in_struct.wgsl.expected.ir.msl b/test/tint/ptr_ref/load/param/private/i32_in_struct.wgsl.expected.ir.msl
index 567c382..41906b5 100644
--- a/test/tint/ptr_ref/load/param/private/i32_in_struct.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/load/param/private/i32_in_struct.wgsl.expected.ir.msl
@@ -1,9 +1,25 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:270 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct str {
+  int i;
+};
+
+thread str P = {};
+int func(thread int* const pointer) {
+  return pointer;
+}
+kernel void tint_symbol() {
+  int const r = func(P.i);
+}
+program_source:7:12: error: program scope variable must reside in constant address space
+thread str P = {};
+           ^
+program_source:9:10: error: cannot initialize return object of type 'int' with an lvalue of type 'int *const'
+  return pointer;
+         ^~~~~~~
+program_source:12:13: warning: unused variable 'r' [-Wunused-variable]
+  int const r = func(P.i);
+            ^
+
diff --git a/test/tint/ptr_ref/load/param/private/struct_in_array.wgsl.expected.ir.msl b/test/tint/ptr_ref/load/param/private/struct_in_array.wgsl.expected.ir.msl
index 567c382..808d5b3 100644
--- a/test/tint/ptr_ref/load/param/private/struct_in_array.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/load/param/private/struct_in_array.wgsl.expected.ir.msl
@@ -1,9 +1,88 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:270 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#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];
+};
+
+struct str {
+  int i;
+};
+
+thread tint_array<str, 4> P = {};
+str func(thread str* const pointer) {
+  return pointer;
+}
+kernel void tint_symbol() {
+  str const r = func(P[2]);
+}
+program_source:19:27: error: program scope variable must reside in constant address space
+thread tint_array<str, 4> P = {};
+                          ^
+program_source:21:10: error: no viable conversion from returned value of type 'str *const' to function return type 'str'
+  return pointer;
+         ^~~~~~~
+program_source:15:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'str *const' to 'const str &' for 1st argument; dereference the argument with *
+struct str {
+       ^
+program_source:15:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'str *const' to 'const str &' for 1st argument; dereference the argument with *
+struct str {
+       ^
+program_source:15:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'str *const' to 'const str &' for 1st argument; dereference the argument with *
+struct str {
+       ^
+program_source:15:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'str *const' to 'const device str &' for 1st argument
+struct str {
+       ^
+program_source:15:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'str *const' to 'const threadgroup str &' for 1st argument
+struct str {
+       ^
+program_source:15:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'str *const' to 'const constant str &' for 1st argument
+struct str {
+       ^
+program_source:15:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'str *const' to 'const device str &' for 1st argument
+struct str {
+       ^
+program_source:15:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'str *const' to 'const threadgroup str &' for 1st argument
+struct str {
+       ^
+program_source:15:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'str *const' to 'const constant str &' for 1st argument
+struct str {
+       ^
+program_source:15:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'str *const' to 'const constant str &' for 1st argument
+struct str {
+       ^
+program_source:15:8: note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'str *const' to 'str &&' for 1st argument
+struct str {
+       ^
+program_source:15:8: note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'str *const' to 'device str &&' for 1st argument
+struct str {
+       ^
+program_source:15:8: note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'str *const' to 'threadgroup str &&' for 1st argument
+struct str {
+       ^
+program_source:15:8: note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'str *const' to 'str &&' for 1st argument
+struct str {
+       ^
+program_source:15:8: note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'str *const' to 'device str &&' for 1st argument
+struct str {
+       ^
+program_source:15:8: note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'str *const' to 'threadgroup str &&' for 1st argument
+struct str {
+       ^
+program_source:15:8: note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'str *const' to 'str &&' for 1st argument
+struct str {
+       ^
+program_source:24:13: warning: unused variable 'r' [-Wunused-variable]
+  str const r = func(P[2]);
+            ^
+
diff --git a/test/tint/ptr_ref/load/param/private/vec2_f32_in_mat2x2.wgsl.expected.ir.msl b/test/tint/ptr_ref/load/param/private/vec2_f32_in_mat2x2.wgsl.expected.ir.msl
index 567c382..27f0a3c 100644
--- a/test/tint/ptr_ref/load/param/private/vec2_f32_in_mat2x2.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/load/param/private/vec2_f32_in_mat2x2.wgsl.expected.ir.msl
@@ -1,9 +1,22 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:270 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float2x2 P = float2x2(0.0f);
+float2 func(thread float2* const pointer) {
+  return pointer;
+}
+kernel void tint_symbol() {
+  float2 const r = func(P[1]);
+}
+program_source:4:17: error: program scope variable must reside in constant address space
+thread float2x2 P = float2x2(0.0f);
+                ^
+program_source:6:10: error: cannot initialize return object of type 'float2' (vector of 2 'float' values) with an lvalue of type 'float2 *const'
+  return pointer;
+         ^~~~~~~
+program_source:9:16: warning: unused variable 'r' [-Wunused-variable]
+  float2 const r = func(P[1]);
+               ^
+
diff --git a/test/tint/ptr_ref/load/param/private/vec4_f32.wgsl.expected.ir.msl b/test/tint/ptr_ref/load/param/private/vec4_f32.wgsl.expected.ir.msl
index 567c382..f709c6a 100644
--- a/test/tint/ptr_ref/load/param/private/vec4_f32.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/load/param/private/vec4_f32.wgsl.expected.ir.msl
@@ -1,9 +1,22 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:270 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float4 P = 0.0f;
+float4 func(thread float4* const pointer) {
+  return pointer;
+}
+kernel void tint_symbol() {
+  float4 const r = func(P);
+}
+program_source:4:15: error: program scope variable must reside in constant address space
+thread float4 P = 0.0f;
+              ^
+program_source:6:10: error: cannot initialize return object of type 'float4' (vector of 4 'float' values) with an lvalue of type 'float4 *const'
+  return pointer;
+         ^~~~~~~
+program_source:9:16: warning: unused variable 'r' [-Wunused-variable]
+  float4 const r = func(P);
+               ^
+
diff --git a/test/tint/ptr_ref/load/param/private/vec4_f32_in_mat2x4.wgsl.expected.ir.msl b/test/tint/ptr_ref/load/param/private/vec4_f32_in_mat2x4.wgsl.expected.ir.msl
index 567c382..69bce59 100644
--- a/test/tint/ptr_ref/load/param/private/vec4_f32_in_mat2x4.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/load/param/private/vec4_f32_in_mat2x4.wgsl.expected.ir.msl
@@ -1,9 +1,22 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:270 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float2x4 P = float2x4(0.0f);
+float4 func(thread float4* const pointer) {
+  return pointer;
+}
+kernel void tint_symbol() {
+  float4 const r = func(P[1]);
+}
+program_source:4:17: error: program scope variable must reside in constant address space
+thread float2x4 P = float2x4(0.0f);
+                ^
+program_source:6:10: error: cannot initialize return object of type 'float4' (vector of 4 'float' values) with an lvalue of type 'float4 *const'
+  return pointer;
+         ^~~~~~~
+program_source:9:16: warning: unused variable 'r' [-Wunused-variable]
+  float4 const r = func(P[1]);
+               ^
+
diff --git a/test/tint/ptr_ref/load/param/private/vec4_f32_in_struct.wgsl.expected.ir.msl b/test/tint/ptr_ref/load/param/private/vec4_f32_in_struct.wgsl.expected.ir.msl
index 567c382..0e67ae3 100644
--- a/test/tint/ptr_ref/load/param/private/vec4_f32_in_struct.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/load/param/private/vec4_f32_in_struct.wgsl.expected.ir.msl
@@ -1,9 +1,25 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:270 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct str {
+  float4 i;
+};
+
+thread str P = {};
+float4 func(thread float4* const pointer) {
+  return pointer;
+}
+kernel void tint_symbol() {
+  float4 const r = func(P.i);
+}
+program_source:7:12: error: program scope variable must reside in constant address space
+thread str P = {};
+           ^
+program_source:9:10: error: cannot initialize return object of type 'float4' (vector of 4 'float' values) with an lvalue of type 'float4 *const'
+  return pointer;
+         ^~~~~~~
+program_source:12:16: warning: unused variable 'r' [-Wunused-variable]
+  float4 const r = func(P.i);
+               ^
+
diff --git a/test/tint/ptr_ref/load/param/ptr.spvasm.expected.ir.msl b/test/tint/ptr_ref/load/param/ptr.spvasm.expected.ir.msl
index 567c382..fe78d03 100644
--- a/test/tint/ptr_ref/load/param/ptr.spvasm.expected.ir.msl
+++ b/test/tint/ptr_ref/load/param/ptr.spvasm.expected.ir.msl
@@ -1,9 +1,28 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:270 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+int func(int value, thread int* const pointer) {
+  int const x_9 = pointer;
+  return (value + x_9);
+}
+void main_1() {
+  int i = 0;
+  i = 123;
+  int const x_19 = i;
+  int const x_18 = func(x_19, i);
+}
+kernel void tint_symbol() {
+  main_1();
+}
+program_source:5:13: error: cannot initialize a variable of type 'const int' with an lvalue of type 'int *const'
+  int const x_9 = pointer;
+            ^     ~~~~~~~
+program_source:12:20: error: no matching function for call to 'func'
+  int const x_18 = func(x_19, i);
+                   ^~~~
+program_source:4:5: note: candidate function not viable: no known conversion from 'int' to 'int *const' for 2nd argument; take the address of the argument with &
+int func(int value, thread int* const pointer) {
+    ^
+
diff --git a/test/tint/ptr_ref/load/param/ptr.wgsl.expected.ir.msl b/test/tint/ptr_ref/load/param/ptr.wgsl.expected.ir.msl
index 567c382..6d16285 100644
--- a/test/tint/ptr_ref/load/param/ptr.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/load/param/ptr.wgsl.expected.ir.msl
@@ -1,9 +1,22 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:270 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+int func(int value, thread int* const pointer) {
+  return (value + pointer);
+}
+kernel void tint_symbol() {
+  int i = 123;
+  int const r = func(i, i);
+}
+program_source:5:10: error: cannot initialize return object of type 'int' with an rvalue of type 'int *'
+  return (value + pointer);
+         ^~~~~~~~~~~~~~~~~
+program_source:9:17: error: no matching function for call to 'func'
+  int const r = func(i, i);
+                ^~~~
+program_source:4:5: note: candidate function not viable: no known conversion from 'int' to 'int *const' for 2nd argument; take the address of the argument with &
+int func(int value, thread int* const pointer) {
+    ^
+
diff --git a/test/tint/ptr_ref/load/param/storage/array_in_struct.wgsl.expected.ir.msl b/test/tint/ptr_ref/load/param/storage/array_in_struct.wgsl.expected.ir.msl
index 32298b1..6472c06 100644
--- a/test/tint/ptr_ref/load/param/storage/array_in_struct.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/load/param/storage/array_in_struct.wgsl.expected.ir.msl
@@ -1,23 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: str = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: str = struct @align(4) {
   arr:array<i32, 4> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %S:ptr<storage, str, read> = var @binding_point(0, 0)
 }
 
-%func = func(%pointer:ptr<storage, array<i32, 4>, read>):array<i32, 4> -> %b2 {
-  %b2 = block {
+%func = func(%pointer:ptr<storage, array<i32, 4>, read>):array<i32, 4> {
+  $B2: {
     %4:array<i32, 4> = load %pointer
     ret %4
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %6:ptr<storage, array<i32, 4>, read> = access %S, 0u
-    %r:array<i32, 4> = call %func, %6
+    %7:array<i32, 4> = call %func, %6
+    %r:array<i32, 4> = let %7
     ret
   }
 }
diff --git a/test/tint/ptr_ref/load/param/storage/i32.wgsl.expected.ir.msl b/test/tint/ptr_ref/load/param/storage/i32.wgsl.expected.ir.msl
index 639ebdb..b8fa44a 100644
--- a/test/tint/ptr_ref/load/param/storage/i32.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/load/param/storage/i32.wgsl.expected.ir.msl
@@ -1,18 +1,19 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %S:ptr<storage, i32, read> = var @binding_point(0, 0)
 }
 
-%func = func(%pointer:ptr<storage, i32, read>):i32 -> %b2 {
-  %b2 = block {
+%func = func(%pointer:ptr<storage, i32, read>):i32 {
+  $B2: {
     %4:i32 = load %pointer
     ret %4
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
-    %r:i32 = call %func, %S
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
+    %6:i32 = call %func, %S
+    %r:i32 = let %6
     ret
   }
 }
diff --git a/test/tint/ptr_ref/load/param/storage/i32_in_struct.wgsl.expected.ir.msl b/test/tint/ptr_ref/load/param/storage/i32_in_struct.wgsl.expected.ir.msl
index 0ea3e0f..0593dcd 100644
--- a/test/tint/ptr_ref/load/param/storage/i32_in_struct.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/load/param/storage/i32_in_struct.wgsl.expected.ir.msl
@@ -1,23 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: str = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: str = struct @align(4) {
   i:i32 @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %S:ptr<storage, str, read> = var @binding_point(0, 0)
 }
 
-%func = func(%pointer:ptr<storage, i32, read>):i32 -> %b2 {
-  %b2 = block {
+%func = func(%pointer:ptr<storage, i32, read>):i32 {
+  $B2: {
     %4:i32 = load %pointer
     ret %4
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %6:ptr<storage, i32, read> = access %S, 0u
-    %r:i32 = call %func, %6
+    %7:i32 = call %func, %6
+    %r:i32 = let %7
     ret
   }
 }
diff --git a/test/tint/ptr_ref/load/param/storage/struct_in_array.wgsl.expected.ir.msl b/test/tint/ptr_ref/load/param/storage/struct_in_array.wgsl.expected.ir.msl
index 7b014eb..3004ce1 100644
--- a/test/tint/ptr_ref/load/param/storage/struct_in_array.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/load/param/storage/struct_in_array.wgsl.expected.ir.msl
@@ -1,23 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: str = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: str = struct @align(4) {
   i:i32 @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %S:ptr<storage, array<str, 4>, read> = var @binding_point(0, 0)
 }
 
-%func = func(%pointer:ptr<storage, str, read>):str -> %b2 {
-  %b2 = block {
+%func = func(%pointer:ptr<storage, str, read>):str {
+  $B2: {
     %4:str = load %pointer
     ret %4
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %6:ptr<storage, str, read> = access %S, 2i
-    %r:str = call %func, %6
+    %7:str = call %func, %6
+    %r:str = let %7
     ret
   }
 }
diff --git a/test/tint/ptr_ref/load/param/storage/vec2_f32_in_mat2x2.wgsl.expected.ir.msl b/test/tint/ptr_ref/load/param/storage/vec2_f32_in_mat2x2.wgsl.expected.ir.msl
index 3d1831c..982f9f0 100644
--- a/test/tint/ptr_ref/load/param/storage/vec2_f32_in_mat2x2.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/load/param/storage/vec2_f32_in_mat2x2.wgsl.expected.ir.msl
@@ -1,19 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %S:ptr<storage, mat2x2<f32>, read> = var @binding_point(0, 0)
 }
 
-%func = func(%pointer:ptr<storage, vec2<f32>, read>):vec2<f32> -> %b2 {
-  %b2 = block {
+%func = func(%pointer:ptr<storage, vec2<f32>, read>):vec2<f32> {
+  $B2: {
     %4:vec2<f32> = load %pointer
     ret %4
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %6:ptr<storage, vec2<f32>, read> = access %S, 1i
-    %r:vec2<f32> = call %func, %6
+    %7:vec2<f32> = call %func, %6
+    %r:vec2<f32> = let %7
     ret
   }
 }
diff --git a/test/tint/ptr_ref/load/param/storage/vec4_f32.wgsl.expected.ir.msl b/test/tint/ptr_ref/load/param/storage/vec4_f32.wgsl.expected.ir.msl
index eafe2c3..8a1a501 100644
--- a/test/tint/ptr_ref/load/param/storage/vec4_f32.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/load/param/storage/vec4_f32.wgsl.expected.ir.msl
@@ -1,18 +1,19 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %S:ptr<storage, vec4<f32>, read> = var @binding_point(0, 0)
 }
 
-%func = func(%pointer:ptr<storage, vec4<f32>, read>):vec4<f32> -> %b2 {
-  %b2 = block {
+%func = func(%pointer:ptr<storage, vec4<f32>, read>):vec4<f32> {
+  $B2: {
     %4:vec4<f32> = load %pointer
     ret %4
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
-    %r:vec4<f32> = call %func, %S
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
+    %6:vec4<f32> = call %func, %S
+    %r:vec4<f32> = let %6
     ret
   }
 }
diff --git a/test/tint/ptr_ref/load/param/storage/vec4_f32_in_mat2x4.wgsl.expected.ir.msl b/test/tint/ptr_ref/load/param/storage/vec4_f32_in_mat2x4.wgsl.expected.ir.msl
index 122f86e..84f0808 100644
--- a/test/tint/ptr_ref/load/param/storage/vec4_f32_in_mat2x4.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/load/param/storage/vec4_f32_in_mat2x4.wgsl.expected.ir.msl
@@ -1,19 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %S:ptr<storage, mat2x4<f32>, read> = var @binding_point(0, 0)
 }
 
-%func = func(%pointer:ptr<storage, vec4<f32>, read>):vec4<f32> -> %b2 {
-  %b2 = block {
+%func = func(%pointer:ptr<storage, vec4<f32>, read>):vec4<f32> {
+  $B2: {
     %4:vec4<f32> = load %pointer
     ret %4
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %6:ptr<storage, vec4<f32>, read> = access %S, 1i
-    %r:vec4<f32> = call %func, %6
+    %7:vec4<f32> = call %func, %6
+    %r:vec4<f32> = let %7
     ret
   }
 }
diff --git a/test/tint/ptr_ref/load/param/storage/vec4_f32_in_struct.wgsl.expected.ir.msl b/test/tint/ptr_ref/load/param/storage/vec4_f32_in_struct.wgsl.expected.ir.msl
index cbafdd3..cada6c2 100644
--- a/test/tint/ptr_ref/load/param/storage/vec4_f32_in_struct.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/load/param/storage/vec4_f32_in_struct.wgsl.expected.ir.msl
@@ -1,23 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: str = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: str = struct @align(16) {
   i:vec4<f32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %S:ptr<storage, str, read> = var @binding_point(0, 0)
 }
 
-%func = func(%pointer:ptr<storage, vec4<f32>, read>):vec4<f32> -> %b2 {
-  %b2 = block {
+%func = func(%pointer:ptr<storage, vec4<f32>, read>):vec4<f32> {
+  $B2: {
     %4:vec4<f32> = load %pointer
     ret %4
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %6:ptr<storage, vec4<f32>, read> = access %S, 0u
-    %r:vec4<f32> = call %func, %6
+    %7:vec4<f32> = call %func, %6
+    %r:vec4<f32> = let %7
     ret
   }
 }
diff --git a/test/tint/ptr_ref/load/param/uniform/array_in_struct.wgsl.expected.ir.msl b/test/tint/ptr_ref/load/param/uniform/array_in_struct.wgsl.expected.ir.msl
index 3ce58b1..6218623 100644
--- a/test/tint/ptr_ref/load/param/uniform/array_in_struct.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/load/param/uniform/array_in_struct.wgsl.expected.ir.msl
@@ -1,23 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: str = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: str = struct @align(16) {
   arr:array<vec4<i32>, 4> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %S:ptr<uniform, str, read> = var @binding_point(0, 0)
 }
 
-%func = func(%pointer:ptr<uniform, array<vec4<i32>, 4>, read>):array<vec4<i32>, 4> -> %b2 {
-  %b2 = block {
+%func = func(%pointer:ptr<uniform, array<vec4<i32>, 4>, read>):array<vec4<i32>, 4> {
+  $B2: {
     %4:array<vec4<i32>, 4> = load %pointer
     ret %4
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %6:ptr<uniform, array<vec4<i32>, 4>, read> = access %S, 0u
-    %r:array<vec4<i32>, 4> = call %func, %6
+    %7:array<vec4<i32>, 4> = call %func, %6
+    %r:array<vec4<i32>, 4> = let %7
     ret
   }
 }
diff --git a/test/tint/ptr_ref/load/param/uniform/i32.wgsl.expected.ir.msl b/test/tint/ptr_ref/load/param/uniform/i32.wgsl.expected.ir.msl
index 309f657..2a0a0992 100644
--- a/test/tint/ptr_ref/load/param/uniform/i32.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/load/param/uniform/i32.wgsl.expected.ir.msl
@@ -1,18 +1,19 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %S:ptr<uniform, i32, read> = var @binding_point(0, 0)
 }
 
-%func = func(%pointer:ptr<uniform, i32, read>):i32 -> %b2 {
-  %b2 = block {
+%func = func(%pointer:ptr<uniform, i32, read>):i32 {
+  $B2: {
     %4:i32 = load %pointer
     ret %4
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
-    %r:i32 = call %func, %S
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
+    %6:i32 = call %func, %S
+    %r:i32 = let %6
     ret
   }
 }
diff --git a/test/tint/ptr_ref/load/param/uniform/i32_in_struct.wgsl.expected.ir.msl b/test/tint/ptr_ref/load/param/uniform/i32_in_struct.wgsl.expected.ir.msl
index e9da132..d3cb467 100644
--- a/test/tint/ptr_ref/load/param/uniform/i32_in_struct.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/load/param/uniform/i32_in_struct.wgsl.expected.ir.msl
@@ -1,23 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: str = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: str = struct @align(4) {
   i:i32 @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %S:ptr<uniform, str, read> = var @binding_point(0, 0)
 }
 
-%func = func(%pointer:ptr<uniform, i32, read>):i32 -> %b2 {
-  %b2 = block {
+%func = func(%pointer:ptr<uniform, i32, read>):i32 {
+  $B2: {
     %4:i32 = load %pointer
     ret %4
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %6:ptr<uniform, i32, read> = access %S, 0u
-    %r:i32 = call %func, %6
+    %7:i32 = call %func, %6
+    %r:i32 = let %7
     ret
   }
 }
diff --git a/test/tint/ptr_ref/load/param/uniform/struct_in_array.wgsl.expected.ir.msl b/test/tint/ptr_ref/load/param/uniform/struct_in_array.wgsl.expected.ir.msl
index fcbc717..e70fe7d 100644
--- a/test/tint/ptr_ref/load/param/uniform/struct_in_array.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/load/param/uniform/struct_in_array.wgsl.expected.ir.msl
@@ -1,23 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: str = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: str = struct @align(16) {
   i:vec4<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %S:ptr<uniform, array<str, 4>, read> = var @binding_point(0, 0)
 }
 
-%func = func(%pointer:ptr<uniform, str, read>):str -> %b2 {
-  %b2 = block {
+%func = func(%pointer:ptr<uniform, str, read>):str {
+  $B2: {
     %4:str = load %pointer
     ret %4
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %6:ptr<uniform, str, read> = access %S, 2i
-    %r:str = call %func, %6
+    %7:str = call %func, %6
+    %r:str = let %7
     ret
   }
 }
diff --git a/test/tint/ptr_ref/load/param/uniform/vec2_f32_in_mat2x2.wgsl.expected.ir.msl b/test/tint/ptr_ref/load/param/uniform/vec2_f32_in_mat2x2.wgsl.expected.ir.msl
index 862942b..7b92425 100644
--- a/test/tint/ptr_ref/load/param/uniform/vec2_f32_in_mat2x2.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/load/param/uniform/vec2_f32_in_mat2x2.wgsl.expected.ir.msl
@@ -1,19 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %S:ptr<uniform, mat2x2<f32>, read> = var @binding_point(0, 0)
 }
 
-%func = func(%pointer:ptr<uniform, vec2<f32>, read>):vec2<f32> -> %b2 {
-  %b2 = block {
+%func = func(%pointer:ptr<uniform, vec2<f32>, read>):vec2<f32> {
+  $B2: {
     %4:vec2<f32> = load %pointer
     ret %4
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %6:ptr<uniform, vec2<f32>, read> = access %S, 1i
-    %r:vec2<f32> = call %func, %6
+    %7:vec2<f32> = call %func, %6
+    %r:vec2<f32> = let %7
     ret
   }
 }
diff --git a/test/tint/ptr_ref/load/param/uniform/vec4_f32.wgsl.expected.ir.msl b/test/tint/ptr_ref/load/param/uniform/vec4_f32.wgsl.expected.ir.msl
index 18d662f..499fa01 100644
--- a/test/tint/ptr_ref/load/param/uniform/vec4_f32.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/load/param/uniform/vec4_f32.wgsl.expected.ir.msl
@@ -1,18 +1,19 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %S:ptr<uniform, vec4<f32>, read> = var @binding_point(0, 0)
 }
 
-%func = func(%pointer:ptr<uniform, vec4<f32>, read>):vec4<f32> -> %b2 {
-  %b2 = block {
+%func = func(%pointer:ptr<uniform, vec4<f32>, read>):vec4<f32> {
+  $B2: {
     %4:vec4<f32> = load %pointer
     ret %4
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
-    %r:vec4<f32> = call %func, %S
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
+    %6:vec4<f32> = call %func, %S
+    %r:vec4<f32> = let %6
     ret
   }
 }
diff --git a/test/tint/ptr_ref/load/param/uniform/vec4_f32_in_mat2x4.wgsl.expected.ir.msl b/test/tint/ptr_ref/load/param/uniform/vec4_f32_in_mat2x4.wgsl.expected.ir.msl
index 40c620f..4edcc1e 100644
--- a/test/tint/ptr_ref/load/param/uniform/vec4_f32_in_mat2x4.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/load/param/uniform/vec4_f32_in_mat2x4.wgsl.expected.ir.msl
@@ -1,19 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %S:ptr<uniform, mat2x4<f32>, read> = var @binding_point(0, 0)
 }
 
-%func = func(%pointer:ptr<uniform, vec4<f32>, read>):vec4<f32> -> %b2 {
-  %b2 = block {
+%func = func(%pointer:ptr<uniform, vec4<f32>, read>):vec4<f32> {
+  $B2: {
     %4:vec4<f32> = load %pointer
     ret %4
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %6:ptr<uniform, vec4<f32>, read> = access %S, 1i
-    %r:vec4<f32> = call %func, %6
+    %7:vec4<f32> = call %func, %6
+    %r:vec4<f32> = let %7
     ret
   }
 }
diff --git a/test/tint/ptr_ref/load/param/uniform/vec4_f32_in_struct.wgsl.expected.ir.msl b/test/tint/ptr_ref/load/param/uniform/vec4_f32_in_struct.wgsl.expected.ir.msl
index ff513fd..eb30111 100644
--- a/test/tint/ptr_ref/load/param/uniform/vec4_f32_in_struct.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/load/param/uniform/vec4_f32_in_struct.wgsl.expected.ir.msl
@@ -1,23 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: str = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: str = struct @align(16) {
   i:vec4<f32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %S:ptr<uniform, str, read> = var @binding_point(0, 0)
 }
 
-%func = func(%pointer:ptr<uniform, vec4<f32>, read>):vec4<f32> -> %b2 {
-  %b2 = block {
+%func = func(%pointer:ptr<uniform, vec4<f32>, read>):vec4<f32> {
+  $B2: {
     %4:vec4<f32> = load %pointer
     ret %4
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %6:ptr<uniform, vec4<f32>, read> = access %S, 0u
-    %r:vec4<f32> = call %func, %6
+    %7:vec4<f32> = call %func, %6
+    %r:vec4<f32> = let %7
     ret
   }
 }
diff --git a/test/tint/ptr_ref/load/param/workgroup/array_in_struct.wgsl.expected.ir.msl b/test/tint/ptr_ref/load/param/workgroup/array_in_struct.wgsl.expected.ir.msl
index 567c382..3fa6a4b 100644
--- a/test/tint/ptr_ref/load/param/workgroup/array_in_struct.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/load/param/workgroup/array_in_struct.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:270 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
+../../src/tint/lang/msl/writer/printer/printer.cc:388 internal compiler error: Switch() matched no cases. Type: tint::core::ir::BlockParam
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/ptr_ref/load/param/workgroup/i32.wgsl.expected.ir.msl b/test/tint/ptr_ref/load/param/workgroup/i32.wgsl.expected.ir.msl
index 567c382..25d79e7 100644
--- a/test/tint/ptr_ref/load/param/workgroup/i32.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/load/param/workgroup/i32.wgsl.expected.ir.msl
@@ -1,9 +1,36 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:270 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+threadgroup int S;
+int func(threadgroup int* const pointer) {
+  return pointer;
+}
+kernel void tint_symbol(uint tint_local_index [[thread_index_in_threadgroup]]) {
+  if ((tint_local_index == 0u)) {
+    S = 0;
+  }
+  threadgroup_barrier(mem_flags::mem_threadgroup);
+  int const r = func(S);
+}
+program_source:4:17: error: program scope variable must reside in constant address space
+threadgroup int S;
+                ^
+program_source:6:10: error: cannot initialize return object of type 'int' with an lvalue of type 'threadgroup int *const'
+  return pointer;
+         ^~~~~~~
+program_source:9:25: warning: equality comparison with extraneous parentheses [-Wparentheses-equality]
+  if ((tint_local_index == 0u)) {
+       ~~~~~~~~~~~~~~~~~^~~~~
+program_source:9:25: note: remove extraneous parentheses around the comparison to silence this warning
+  if ((tint_local_index == 0u)) {
+      ~                 ^    ~
+program_source:9:25: note: use '=' to turn this equality comparison into an assignment
+  if ((tint_local_index == 0u)) {
+                        ^~
+                        =
+program_source:13:13: warning: unused variable 'r' [-Wunused-variable]
+  int const r = func(S);
+            ^
+
diff --git a/test/tint/ptr_ref/load/param/workgroup/i32_in_struct.wgsl.expected.ir.msl b/test/tint/ptr_ref/load/param/workgroup/i32_in_struct.wgsl.expected.ir.msl
index 567c382..4be387c 100644
--- a/test/tint/ptr_ref/load/param/workgroup/i32_in_struct.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/load/param/workgroup/i32_in_struct.wgsl.expected.ir.msl
@@ -1,9 +1,39 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:270 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct str {
+  int i;
+};
+
+threadgroup str S;
+int func(threadgroup int* const pointer) {
+  return pointer;
+}
+kernel void tint_symbol(uint tint_local_index [[thread_index_in_threadgroup]]) {
+  if ((tint_local_index == 0u)) {
+    S = str{};
+  }
+  threadgroup_barrier(mem_flags::mem_threadgroup);
+  int const r = func(S.i);
+}
+program_source:7:17: error: program scope variable must reside in constant address space
+threadgroup str S;
+                ^
+program_source:9:10: error: cannot initialize return object of type 'int' with an lvalue of type 'threadgroup int *const'
+  return pointer;
+         ^~~~~~~
+program_source:12:25: warning: equality comparison with extraneous parentheses [-Wparentheses-equality]
+  if ((tint_local_index == 0u)) {
+       ~~~~~~~~~~~~~~~~~^~~~~
+program_source:12:25: note: remove extraneous parentheses around the comparison to silence this warning
+  if ((tint_local_index == 0u)) {
+      ~                 ^    ~
+program_source:12:25: note: use '=' to turn this equality comparison into an assignment
+  if ((tint_local_index == 0u)) {
+                        ^~
+                        =
+program_source:16:13: warning: unused variable 'r' [-Wunused-variable]
+  int const r = func(S.i);
+            ^
+
diff --git a/test/tint/ptr_ref/load/param/workgroup/struct_in_array.wgsl.expected.ir.msl b/test/tint/ptr_ref/load/param/workgroup/struct_in_array.wgsl.expected.ir.msl
index 567c382..3fa6a4b 100644
--- a/test/tint/ptr_ref/load/param/workgroup/struct_in_array.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/load/param/workgroup/struct_in_array.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:270 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
+../../src/tint/lang/msl/writer/printer/printer.cc:388 internal compiler error: Switch() matched no cases. Type: tint::core::ir::BlockParam
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/ptr_ref/load/param/workgroup/vec2_f32_in_mat2x2.wgsl.expected.ir.msl b/test/tint/ptr_ref/load/param/workgroup/vec2_f32_in_mat2x2.wgsl.expected.ir.msl
index 567c382..6866579 100644
--- a/test/tint/ptr_ref/load/param/workgroup/vec2_f32_in_mat2x2.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/load/param/workgroup/vec2_f32_in_mat2x2.wgsl.expected.ir.msl
@@ -1,9 +1,36 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:270 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+threadgroup float2x2 S;
+float2 func(threadgroup float2* const pointer) {
+  return pointer;
+}
+kernel void tint_symbol(uint tint_local_index [[thread_index_in_threadgroup]]) {
+  if ((tint_local_index == 0u)) {
+    S = float2x2(float2(0.0f), float2(0.0f));
+  }
+  threadgroup_barrier(mem_flags::mem_threadgroup);
+  float2 const r = func(S[1]);
+}
+program_source:4:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 S;
+                     ^
+program_source:6:10: error: cannot initialize return object of type 'float2' (vector of 2 'float' values) with an lvalue of type 'threadgroup float2 *const'
+  return pointer;
+         ^~~~~~~
+program_source:9:25: warning: equality comparison with extraneous parentheses [-Wparentheses-equality]
+  if ((tint_local_index == 0u)) {
+       ~~~~~~~~~~~~~~~~~^~~~~
+program_source:9:25: note: remove extraneous parentheses around the comparison to silence this warning
+  if ((tint_local_index == 0u)) {
+      ~                 ^    ~
+program_source:9:25: note: use '=' to turn this equality comparison into an assignment
+  if ((tint_local_index == 0u)) {
+                        ^~
+                        =
+program_source:13:16: warning: unused variable 'r' [-Wunused-variable]
+  float2 const r = func(S[1]);
+               ^
+
diff --git a/test/tint/ptr_ref/load/param/workgroup/vec4_f32.wgsl.expected.ir.msl b/test/tint/ptr_ref/load/param/workgroup/vec4_f32.wgsl.expected.ir.msl
index 567c382..1e11dc4 100644
--- a/test/tint/ptr_ref/load/param/workgroup/vec4_f32.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/load/param/workgroup/vec4_f32.wgsl.expected.ir.msl
@@ -1,9 +1,36 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:270 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+threadgroup float4 S;
+float4 func(threadgroup float4* const pointer) {
+  return pointer;
+}
+kernel void tint_symbol(uint tint_local_index [[thread_index_in_threadgroup]]) {
+  if ((tint_local_index == 0u)) {
+    S = float4(0.0f);
+  }
+  threadgroup_barrier(mem_flags::mem_threadgroup);
+  float4 const r = func(S);
+}
+program_source:4:20: error: program scope variable must reside in constant address space
+threadgroup float4 S;
+                   ^
+program_source:6:10: error: cannot initialize return object of type 'float4' (vector of 4 'float' values) with an lvalue of type 'threadgroup float4 *const'
+  return pointer;
+         ^~~~~~~
+program_source:9:25: warning: equality comparison with extraneous parentheses [-Wparentheses-equality]
+  if ((tint_local_index == 0u)) {
+       ~~~~~~~~~~~~~~~~~^~~~~
+program_source:9:25: note: remove extraneous parentheses around the comparison to silence this warning
+  if ((tint_local_index == 0u)) {
+      ~                 ^    ~
+program_source:9:25: note: use '=' to turn this equality comparison into an assignment
+  if ((tint_local_index == 0u)) {
+                        ^~
+                        =
+program_source:13:16: warning: unused variable 'r' [-Wunused-variable]
+  float4 const r = func(S);
+               ^
+
diff --git a/test/tint/ptr_ref/load/param/workgroup/vec4_f32_in_mat2x4.wgsl.expected.ir.msl b/test/tint/ptr_ref/load/param/workgroup/vec4_f32_in_mat2x4.wgsl.expected.ir.msl
index 567c382..a6f5b85 100644
--- a/test/tint/ptr_ref/load/param/workgroup/vec4_f32_in_mat2x4.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/load/param/workgroup/vec4_f32_in_mat2x4.wgsl.expected.ir.msl
@@ -1,9 +1,36 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:270 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+threadgroup float2x4 S;
+float4 func(threadgroup float4* const pointer) {
+  return pointer;
+}
+kernel void tint_symbol(uint tint_local_index [[thread_index_in_threadgroup]]) {
+  if ((tint_local_index == 0u)) {
+    S = float2x4(float4(0.0f), float4(0.0f));
+  }
+  threadgroup_barrier(mem_flags::mem_threadgroup);
+  float4 const r = func(S[1]);
+}
+program_source:4:22: error: program scope variable must reside in constant address space
+threadgroup float2x4 S;
+                     ^
+program_source:6:10: error: cannot initialize return object of type 'float4' (vector of 4 'float' values) with an lvalue of type 'threadgroup float4 *const'
+  return pointer;
+         ^~~~~~~
+program_source:9:25: warning: equality comparison with extraneous parentheses [-Wparentheses-equality]
+  if ((tint_local_index == 0u)) {
+       ~~~~~~~~~~~~~~~~~^~~~~
+program_source:9:25: note: remove extraneous parentheses around the comparison to silence this warning
+  if ((tint_local_index == 0u)) {
+      ~                 ^    ~
+program_source:9:25: note: use '=' to turn this equality comparison into an assignment
+  if ((tint_local_index == 0u)) {
+                        ^~
+                        =
+program_source:13:16: warning: unused variable 'r' [-Wunused-variable]
+  float4 const r = func(S[1]);
+               ^
+
diff --git a/test/tint/ptr_ref/load/param/workgroup/vec4_f32_in_struct.wgsl.expected.ir.msl b/test/tint/ptr_ref/load/param/workgroup/vec4_f32_in_struct.wgsl.expected.ir.msl
index 567c382..62142f9 100644
--- a/test/tint/ptr_ref/load/param/workgroup/vec4_f32_in_struct.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/load/param/workgroup/vec4_f32_in_struct.wgsl.expected.ir.msl
@@ -1,9 +1,39 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:270 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct str {
+  float4 i;
+};
+
+threadgroup str S;
+float4 func(threadgroup float4* const pointer) {
+  return pointer;
+}
+kernel void tint_symbol(uint tint_local_index [[thread_index_in_threadgroup]]) {
+  if ((tint_local_index == 0u)) {
+    S = str{};
+  }
+  threadgroup_barrier(mem_flags::mem_threadgroup);
+  float4 const r = func(S.i);
+}
+program_source:7:17: error: program scope variable must reside in constant address space
+threadgroup str S;
+                ^
+program_source:9:10: error: cannot initialize return object of type 'float4' (vector of 4 'float' values) with an lvalue of type 'threadgroup float4 *const'
+  return pointer;
+         ^~~~~~~
+program_source:12:25: warning: equality comparison with extraneous parentheses [-Wparentheses-equality]
+  if ((tint_local_index == 0u)) {
+       ~~~~~~~~~~~~~~~~~^~~~~
+program_source:12:25: note: remove extraneous parentheses around the comparison to silence this warning
+  if ((tint_local_index == 0u)) {
+      ~                 ^    ~
+program_source:12:25: note: use '=' to turn this equality comparison into an assignment
+  if ((tint_local_index == 0u)) {
+                        ^~
+                        =
+program_source:16:16: warning: unused variable 'r' [-Wunused-variable]
+  float4 const r = func(S.i);
+               ^
+
diff --git a/test/tint/ptr_ref/store/global/i32.spvasm.expected.ir.msl b/test/tint/ptr_ref/store/global/i32.spvasm.expected.ir.msl
index efdd3b1..9549b00 100644
--- a/test/tint/ptr_ref/store/global/i32.spvasm.expected.ir.msl
+++ b/test/tint/ptr_ref/store/global/i32.spvasm.expected.ir.msl
@@ -1,9 +1,17 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread int I = 0;
+void main_1() {
+  I = 123;
+  I = 123;
+}
+kernel void tint_symbol() {
+  main_1();
+}
+program_source:4:12: error: program scope variable must reside in constant address space
+thread int I = 0;
+           ^
+
diff --git a/test/tint/ptr_ref/store/global/i32.wgsl.expected.ir.msl b/test/tint/ptr_ref/store/global/i32.wgsl.expected.ir.msl
index efdd3b1..77f0be6 100644
--- a/test/tint/ptr_ref/store/global/i32.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/store/global/i32.wgsl.expected.ir.msl
@@ -1,9 +1,14 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread int I = 0;
+kernel void tint_symbol() {
+  I = 123;
+  I = 123;
+}
+program_source:4:12: error: program scope variable must reside in constant address space
+thread int I = 0;
+           ^
+
diff --git a/test/tint/ptr_ref/store/global/struct_field.spvasm.expected.ir.msl b/test/tint/ptr_ref/store/global/struct_field.spvasm.expected.ir.msl
index 28251dc..deec3d5 100644
--- a/test/tint/ptr_ref/store/global/struct_field.spvasm.expected.ir.msl
+++ b/test/tint/ptr_ref/store/global/struct_field.spvasm.expected.ir.msl
@@ -1,9 +1,19 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct S {
+  int i;
+};
+
+thread S V = {};
+void main_1() {
+  V.i = 5;
+}
+kernel void tint_symbol() {
+  main_1();
+}
+program_source:7:10: error: program scope variable must reside in constant address space
+thread S V = {};
+         ^
+
diff --git a/test/tint/ptr_ref/store/local/i32.wgsl.expected.ir.msl b/test/tint/ptr_ref/store/local/i32.wgsl.expected.ir.msl
index efdd3b1..aa60be5 100644
--- a/test/tint/ptr_ref/store/local/i32.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/store/local/i32.wgsl.expected.ir.msl
@@ -1,9 +1,27 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+kernel void tint_symbol() {
+  int i = 123;
+  thread int* const p = i;
+  p = 123;
+  p = 123;
+}
+program_source:6:21: error: cannot initialize a variable of type 'int *const' with an lvalue of type 'int'
+  thread int* const p = i;
+                    ^   ~
+program_source:7:5: error: cannot assign to variable 'p' with const-qualified type 'int *const'
+  p = 123;
+  ~ ^
+program_source:6:21: note: variable 'p' declared const here
+  thread int* const p = i;
+  ~~~~~~~~~~~~~~~~~~^~~~~
+program_source:8:5: error: cannot assign to variable 'p' with const-qualified type 'int *const'
+  p = 123;
+  ~ ^
+program_source:6:21: note: variable 'p' declared const here
+  thread int* const p = i;
+  ~~~~~~~~~~~~~~~~~~^~~~~
+
diff --git a/test/tint/ptr_ref/store/param/function/array_in_struct.wgsl.expected.ir.msl b/test/tint/ptr_ref/store/param/function/array_in_struct.wgsl.expected.ir.msl
index efdd3b1..5af32c9 100644
--- a/test/tint/ptr_ref/store/param/function/array_in_struct.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/store/param/function/array_in_struct.wgsl.expected.ir.msl
@@ -1,9 +1,40 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#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];
+};
+
+struct str {
+  tint_array<int, 4> arr;
+};
+
+void func(thread tint_array<int, 4>* const pointer) {
+  pointer = tint_array<int, 4>{};
+}
+kernel void tint_symbol() {
+  str F = {};
+  func(F.arr);
+}
+program_source:20:11: error: cannot assign to variable 'pointer' with const-qualified type 'tint_array<int, 4> *const'
+  pointer = tint_array<int, 4>{};
+  ~~~~~~~ ^
+program_source:19:44: note: variable 'pointer' declared const here
+void func(thread tint_array<int, 4>* const pointer) {
+          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~
+program_source:24:3: error: no matching function for call to 'func'
+  func(F.arr);
+  ^~~~
+program_source:19:6: note: candidate function not viable: no known conversion from 'tint_array<int, 4>' to 'tint_array<int, 4> *const' for 1st argument; take the address of the argument with &
+void func(thread tint_array<int, 4>* const pointer) {
+     ^
+
diff --git a/test/tint/ptr_ref/store/param/function/i32.wgsl.expected.ir.msl b/test/tint/ptr_ref/store/param/function/i32.wgsl.expected.ir.msl
index efdd3b1..55fb76d 100644
--- a/test/tint/ptr_ref/store/param/function/i32.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/store/param/function/i32.wgsl.expected.ir.msl
@@ -1,9 +1,25 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+void func(thread int* const pointer) {
+  pointer = 42;
+}
+kernel void tint_symbol() {
+  int F = 0;
+  func(F);
+}
+program_source:5:11: error: cannot assign to variable 'pointer' with const-qualified type 'int *const'
+  pointer = 42;
+  ~~~~~~~ ^
+program_source:4:29: note: variable 'pointer' declared const here
+void func(thread int* const pointer) {
+          ~~~~~~~~~~~~~~~~~~^~~~~~~
+program_source:9:3: error: no matching function for call to 'func'
+  func(F);
+  ^~~~
+program_source:4:6: note: candidate function not viable: no known conversion from 'int' to 'int *const' for 1st argument; take the address of the argument with &
+void func(thread int* const pointer) {
+     ^
+
diff --git a/test/tint/ptr_ref/store/param/function/i32_in_struct.wgsl.expected.ir.msl b/test/tint/ptr_ref/store/param/function/i32_in_struct.wgsl.expected.ir.msl
index efdd3b1..8fc6fb2 100644
--- a/test/tint/ptr_ref/store/param/function/i32_in_struct.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/store/param/function/i32_in_struct.wgsl.expected.ir.msl
@@ -1,9 +1,28 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct str {
+  int i;
+};
+
+void func(thread int* const pointer) {
+  pointer = 42;
+}
+kernel void tint_symbol() {
+  str F = {};
+  func(F.i);
+}
+program_source:8:11: error: cannot assign to variable 'pointer' with const-qualified type 'int *const'
+  pointer = 42;
+  ~~~~~~~ ^
+program_source:7:29: note: variable 'pointer' declared const here
+void func(thread int* const pointer) {
+          ~~~~~~~~~~~~~~~~~~^~~~~~~
+program_source:12:3: error: no matching function for call to 'func'
+  func(F.i);
+  ^~~~
+program_source:7:6: note: candidate function not viable: no known conversion from 'int' to 'int *const' for 1st argument; take the address of the argument with &
+void func(thread int* const pointer) {
+     ^
+
diff --git a/test/tint/ptr_ref/store/param/function/struct_in_array.wgsl.expected.ir.msl b/test/tint/ptr_ref/store/param/function/struct_in_array.wgsl.expected.ir.msl
index efdd3b1..99bf128 100644
--- a/test/tint/ptr_ref/store/param/function/struct_in_array.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/store/param/function/struct_in_array.wgsl.expected.ir.msl
@@ -1,9 +1,40 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct str {
+  int i;
+};
+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];
+};
+
+
+void func(thread str* const pointer) {
+  pointer = str{};
+}
+kernel void tint_symbol() {
+  tint_array<str, 4> F = {};
+  func(F[2]);
+}
+program_source:20:11: error: cannot assign to variable 'pointer' with const-qualified type 'str *const'
+  pointer = str{};
+  ~~~~~~~ ^
+program_source:19:29: note: variable 'pointer' declared const here
+void func(thread str* const pointer) {
+          ~~~~~~~~~~~~~~~~~~^~~~~~~
+program_source:24:3: error: no matching function for call to 'func'
+  func(F[2]);
+  ^~~~
+program_source:19:6: note: candidate function not viable: no known conversion from 'str' to 'str *const' for 1st argument; take the address of the argument with &
+void func(thread str* const pointer) {
+     ^
+
diff --git a/test/tint/ptr_ref/store/param/function/vec2_f32_in_mat2x2.wgsl.expected.ir.msl b/test/tint/ptr_ref/store/param/function/vec2_f32_in_mat2x2.wgsl.expected.ir.msl
index efdd3b1..d099190 100644
--- a/test/tint/ptr_ref/store/param/function/vec2_f32_in_mat2x2.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/store/param/function/vec2_f32_in_mat2x2.wgsl.expected.ir.msl
@@ -1,9 +1,25 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+void func(thread float2* const pointer) {
+  pointer = float2(0.0f);
+}
+kernel void tint_symbol() {
+  float2x2 F = float2x2(0.0f);
+  func(F[1]);
+}
+program_source:5:11: error: cannot assign to variable 'pointer' with const-qualified type 'float2 *const'
+  pointer = float2(0.0f);
+  ~~~~~~~ ^
+program_source:4:32: note: variable 'pointer' declared const here
+void func(thread float2* const pointer) {
+          ~~~~~~~~~~~~~~~~~~~~~^~~~~~~
+program_source:9:3: error: no matching function for call to 'func'
+  func(F[1]);
+  ^~~~
+program_source:4:6: note: candidate function not viable: no known conversion from 'vec<float, 2>' (vector of 2 'float' values) to 'float2 *const' for 1st argument; take the address of the argument with &
+void func(thread float2* const pointer) {
+     ^
+
diff --git a/test/tint/ptr_ref/store/param/function/vec4_f32.wgsl.expected.ir.msl b/test/tint/ptr_ref/store/param/function/vec4_f32.wgsl.expected.ir.msl
index efdd3b1..9d13429 100644
--- a/test/tint/ptr_ref/store/param/function/vec4_f32.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/store/param/function/vec4_f32.wgsl.expected.ir.msl
@@ -1,9 +1,25 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+void func(thread float4* const pointer) {
+  pointer = float4(0.0f);
+}
+kernel void tint_symbol() {
+  float4 F = 0.0f;
+  func(F);
+}
+program_source:5:11: error: cannot assign to variable 'pointer' with const-qualified type 'float4 *const'
+  pointer = float4(0.0f);
+  ~~~~~~~ ^
+program_source:4:32: note: variable 'pointer' declared const here
+void func(thread float4* const pointer) {
+          ~~~~~~~~~~~~~~~~~~~~~^~~~~~~
+program_source:9:3: error: no matching function for call to 'func'
+  func(F);
+  ^~~~
+program_source:4:6: note: candidate function not viable: no known conversion from 'float4' (vector of 4 'float' values) to 'float4 *const' for 1st argument; take the address of the argument with &
+void func(thread float4* const pointer) {
+     ^
+
diff --git a/test/tint/ptr_ref/store/param/function/vec4_f32_in_mat2x4.wgsl.expected.ir.msl b/test/tint/ptr_ref/store/param/function/vec4_f32_in_mat2x4.wgsl.expected.ir.msl
index efdd3b1..7769f44 100644
--- a/test/tint/ptr_ref/store/param/function/vec4_f32_in_mat2x4.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/store/param/function/vec4_f32_in_mat2x4.wgsl.expected.ir.msl
@@ -1,9 +1,25 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+void func(thread float4* const pointer) {
+  pointer = float4(0.0f);
+}
+kernel void tint_symbol() {
+  float2x4 F = float2x4(0.0f);
+  func(F[1]);
+}
+program_source:5:11: error: cannot assign to variable 'pointer' with const-qualified type 'float4 *const'
+  pointer = float4(0.0f);
+  ~~~~~~~ ^
+program_source:4:32: note: variable 'pointer' declared const here
+void func(thread float4* const pointer) {
+          ~~~~~~~~~~~~~~~~~~~~~^~~~~~~
+program_source:9:3: error: no matching function for call to 'func'
+  func(F[1]);
+  ^~~~
+program_source:4:6: note: candidate function not viable: no known conversion from 'vec<float, 4>' (vector of 4 'float' values) to 'float4 *const' for 1st argument; take the address of the argument with &
+void func(thread float4* const pointer) {
+     ^
+
diff --git a/test/tint/ptr_ref/store/param/function/vec4_f32_in_struct.wgsl.expected.ir.msl b/test/tint/ptr_ref/store/param/function/vec4_f32_in_struct.wgsl.expected.ir.msl
index efdd3b1..52ece14 100644
--- a/test/tint/ptr_ref/store/param/function/vec4_f32_in_struct.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/store/param/function/vec4_f32_in_struct.wgsl.expected.ir.msl
@@ -1,9 +1,28 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct str {
+  float4 i;
+};
+
+void func(thread float4* const pointer) {
+  pointer = float4(0.0f);
+}
+kernel void tint_symbol() {
+  str F = {};
+  func(F.i);
+}
+program_source:8:11: error: cannot assign to variable 'pointer' with const-qualified type 'float4 *const'
+  pointer = float4(0.0f);
+  ~~~~~~~ ^
+program_source:7:32: note: variable 'pointer' declared const here
+void func(thread float4* const pointer) {
+          ~~~~~~~~~~~~~~~~~~~~~^~~~~~~
+program_source:12:3: error: no matching function for call to 'func'
+  func(F.i);
+  ^~~~
+program_source:7:6: note: candidate function not viable: no known conversion from 'float4' (vector of 4 'float' values) to 'float4 *const' for 1st argument; take the address of the argument with &
+void func(thread float4* const pointer) {
+     ^
+
diff --git a/test/tint/ptr_ref/store/param/private/array_in_struct.wgsl.expected.ir.msl b/test/tint/ptr_ref/store/param/private/array_in_struct.wgsl.expected.ir.msl
index efdd3b1..65761d4 100644
--- a/test/tint/ptr_ref/store/param/private/array_in_struct.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/store/param/private/array_in_struct.wgsl.expected.ir.msl
@@ -1,9 +1,37 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#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];
+};
+
+struct str {
+  tint_array<int, 4> arr;
+};
+
+thread str P = {};
+void func(thread tint_array<int, 4>* const pointer) {
+  pointer = tint_array<int, 4>{};
+}
+kernel void tint_symbol() {
+  func(P.arr);
+}
+program_source:19:12: error: program scope variable must reside in constant address space
+thread str P = {};
+           ^
+program_source:21:11: error: cannot assign to variable 'pointer' with const-qualified type 'tint_array<int, 4> *const'
+  pointer = tint_array<int, 4>{};
+  ~~~~~~~ ^
+program_source:20:44: note: variable 'pointer' declared const here
+void func(thread tint_array<int, 4>* const pointer) {
+          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~
+
diff --git a/test/tint/ptr_ref/store/param/private/i32.wgsl.expected.ir.msl b/test/tint/ptr_ref/store/param/private/i32.wgsl.expected.ir.msl
index efdd3b1..cd72298 100644
--- a/test/tint/ptr_ref/store/param/private/i32.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/store/param/private/i32.wgsl.expected.ir.msl
@@ -1,9 +1,22 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread int P = 0;
+void func(thread int* const pointer) {
+  pointer = 42;
+}
+kernel void tint_symbol() {
+  func(P);
+}
+program_source:4:12: error: program scope variable must reside in constant address space
+thread int P = 0;
+           ^
+program_source:6:11: error: cannot assign to variable 'pointer' with const-qualified type 'int *const'
+  pointer = 42;
+  ~~~~~~~ ^
+program_source:5:29: note: variable 'pointer' declared const here
+void func(thread int* const pointer) {
+          ~~~~~~~~~~~~~~~~~~^~~~~~~
+
diff --git a/test/tint/ptr_ref/store/param/private/i32_in_struct.wgsl.expected.ir.msl b/test/tint/ptr_ref/store/param/private/i32_in_struct.wgsl.expected.ir.msl
index efdd3b1..b158e1e 100644
--- a/test/tint/ptr_ref/store/param/private/i32_in_struct.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/store/param/private/i32_in_struct.wgsl.expected.ir.msl
@@ -1,9 +1,25 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct str {
+  int i;
+};
+
+thread str P = {};
+void func(thread int* const pointer) {
+  pointer = 42;
+}
+kernel void tint_symbol() {
+  func(P.i);
+}
+program_source:7:12: error: program scope variable must reside in constant address space
+thread str P = {};
+           ^
+program_source:9:11: error: cannot assign to variable 'pointer' with const-qualified type 'int *const'
+  pointer = 42;
+  ~~~~~~~ ^
+program_source:8:29: note: variable 'pointer' declared const here
+void func(thread int* const pointer) {
+          ~~~~~~~~~~~~~~~~~~^~~~~~~
+
diff --git a/test/tint/ptr_ref/store/param/private/struct_in_array.wgsl.expected.ir.msl b/test/tint/ptr_ref/store/param/private/struct_in_array.wgsl.expected.ir.msl
index efdd3b1..1a51d5d 100644
--- a/test/tint/ptr_ref/store/param/private/struct_in_array.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/store/param/private/struct_in_array.wgsl.expected.ir.msl
@@ -1,9 +1,37 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#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];
+};
+
+struct str {
+  int i;
+};
+
+thread tint_array<str, 4> P = {};
+void func(thread str* const pointer) {
+  pointer = str{};
+}
+kernel void tint_symbol() {
+  func(P[2]);
+}
+program_source:19:27: error: program scope variable must reside in constant address space
+thread tint_array<str, 4> P = {};
+                          ^
+program_source:21:11: error: cannot assign to variable 'pointer' with const-qualified type 'str *const'
+  pointer = str{};
+  ~~~~~~~ ^
+program_source:20:29: note: variable 'pointer' declared const here
+void func(thread str* const pointer) {
+          ~~~~~~~~~~~~~~~~~~^~~~~~~
+
diff --git a/test/tint/ptr_ref/store/param/private/vec2_f32_in_mat2x2.wgsl.expected.ir.msl b/test/tint/ptr_ref/store/param/private/vec2_f32_in_mat2x2.wgsl.expected.ir.msl
index efdd3b1..4489f35 100644
--- a/test/tint/ptr_ref/store/param/private/vec2_f32_in_mat2x2.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/store/param/private/vec2_f32_in_mat2x2.wgsl.expected.ir.msl
@@ -1,9 +1,22 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float2x2 P = float2x2(0.0f);
+void func(thread float2* const pointer) {
+  pointer = float2(0.0f);
+}
+kernel void tint_symbol() {
+  func(P[1]);
+}
+program_source:4:17: error: program scope variable must reside in constant address space
+thread float2x2 P = float2x2(0.0f);
+                ^
+program_source:6:11: error: cannot assign to variable 'pointer' with const-qualified type 'float2 *const'
+  pointer = float2(0.0f);
+  ~~~~~~~ ^
+program_source:5:32: note: variable 'pointer' declared const here
+void func(thread float2* const pointer) {
+          ~~~~~~~~~~~~~~~~~~~~~^~~~~~~
+
diff --git a/test/tint/ptr_ref/store/param/private/vec4_f32.wgsl.expected.ir.msl b/test/tint/ptr_ref/store/param/private/vec4_f32.wgsl.expected.ir.msl
index efdd3b1..4f1b1bd 100644
--- a/test/tint/ptr_ref/store/param/private/vec4_f32.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/store/param/private/vec4_f32.wgsl.expected.ir.msl
@@ -1,9 +1,22 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float4 P = 0.0f;
+void func(thread float4* const pointer) {
+  pointer = float4(0.0f);
+}
+kernel void tint_symbol() {
+  func(P);
+}
+program_source:4:15: error: program scope variable must reside in constant address space
+thread float4 P = 0.0f;
+              ^
+program_source:6:11: error: cannot assign to variable 'pointer' with const-qualified type 'float4 *const'
+  pointer = float4(0.0f);
+  ~~~~~~~ ^
+program_source:5:32: note: variable 'pointer' declared const here
+void func(thread float4* const pointer) {
+          ~~~~~~~~~~~~~~~~~~~~~^~~~~~~
+
diff --git a/test/tint/ptr_ref/store/param/private/vec4_f32_in_mat2x4.wgsl.expected.ir.msl b/test/tint/ptr_ref/store/param/private/vec4_f32_in_mat2x4.wgsl.expected.ir.msl
index efdd3b1..3c1285d 100644
--- a/test/tint/ptr_ref/store/param/private/vec4_f32_in_mat2x4.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/store/param/private/vec4_f32_in_mat2x4.wgsl.expected.ir.msl
@@ -1,9 +1,22 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float2x4 P = float2x4(0.0f);
+void func(thread float4* const pointer) {
+  pointer = float4(0.0f);
+}
+kernel void tint_symbol() {
+  func(P[1]);
+}
+program_source:4:17: error: program scope variable must reside in constant address space
+thread float2x4 P = float2x4(0.0f);
+                ^
+program_source:6:11: error: cannot assign to variable 'pointer' with const-qualified type 'float4 *const'
+  pointer = float4(0.0f);
+  ~~~~~~~ ^
+program_source:5:32: note: variable 'pointer' declared const here
+void func(thread float4* const pointer) {
+          ~~~~~~~~~~~~~~~~~~~~~^~~~~~~
+
diff --git a/test/tint/ptr_ref/store/param/private/vec4_f32_in_struct.wgsl.expected.ir.msl b/test/tint/ptr_ref/store/param/private/vec4_f32_in_struct.wgsl.expected.ir.msl
index efdd3b1..6e2e7f8 100644
--- a/test/tint/ptr_ref/store/param/private/vec4_f32_in_struct.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/store/param/private/vec4_f32_in_struct.wgsl.expected.ir.msl
@@ -1,9 +1,25 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct str {
+  float4 i;
+};
+
+thread str P = {};
+void func(thread float4* const pointer) {
+  pointer = float4(0.0f);
+}
+kernel void tint_symbol() {
+  func(P.i);
+}
+program_source:7:12: error: program scope variable must reside in constant address space
+thread str P = {};
+           ^
+program_source:9:11: error: cannot assign to variable 'pointer' with const-qualified type 'float4 *const'
+  pointer = float4(0.0f);
+  ~~~~~~~ ^
+program_source:8:32: note: variable 'pointer' declared const here
+void func(thread float4* const pointer) {
+          ~~~~~~~~~~~~~~~~~~~~~^~~~~~~
+
diff --git a/test/tint/ptr_ref/store/param/ptr.wgsl.expected.ir.msl b/test/tint/ptr_ref/store/param/ptr.wgsl.expected.ir.msl
index efdd3b1..d91d1cd 100644
--- a/test/tint/ptr_ref/store/param/ptr.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/store/param/ptr.wgsl.expected.ir.msl
@@ -1,9 +1,25 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+void func(int value, thread int* const pointer) {
+  pointer = value;
+}
+kernel void tint_symbol() {
+  int i = 123;
+  func(123, i);
+}
+program_source:5:11: error: cannot assign to variable 'pointer' with const-qualified type 'int *const'
+  pointer = value;
+  ~~~~~~~ ^
+program_source:4:40: note: variable 'pointer' declared const here
+void func(int value, thread int* const pointer) {
+                     ~~~~~~~~~~~~~~~~~~^~~~~~~
+program_source:9:3: error: no matching function for call to 'func'
+  func(123, i);
+  ^~~~
+program_source:4:6: note: candidate function not viable: no known conversion from 'int' to 'int *const' for 2nd argument; take the address of the argument with &
+void func(int value, thread int* const pointer) {
+     ^
+
diff --git a/test/tint/ptr_ref/store/param/storage/array_in_struct.wgsl.expected.ir.msl b/test/tint/ptr_ref/store/param/storage/array_in_struct.wgsl.expected.ir.msl
index e4740af..1b861a3 100644
--- a/test/tint/ptr_ref/store/param/storage/array_in_struct.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/store/param/storage/array_in_struct.wgsl.expected.ir.msl
@@ -1,21 +1,21 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: str = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: str = struct @align(4) {
   arr:array<i32, 4> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %S:ptr<storage, str, read_write> = var @binding_point(0, 0)
 }
 
-%func = func(%pointer:ptr<storage, array<i32, 4>, read_write>):void -> %b2 {
-  %b2 = block {
+%func = func(%pointer:ptr<storage, array<i32, 4>, read_write>):void {
+  $B2: {
     store %pointer, array<i32, 4>(0i)
     ret
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %5:ptr<storage, array<i32, 4>, read_write> = access %S, 0u
     %6:void = call %func, %5
     ret
diff --git a/test/tint/ptr_ref/store/param/storage/i32.wgsl.expected.ir.msl b/test/tint/ptr_ref/store/param/storage/i32.wgsl.expected.ir.msl
index 9619674..fcdbb3b 100644
--- a/test/tint/ptr_ref/store/param/storage/i32.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/store/param/storage/i32.wgsl.expected.ir.msl
@@ -1,17 +1,17 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %S:ptr<storage, i32, read_write> = var @binding_point(0, 0)
 }
 
-%func = func(%pointer:ptr<storage, i32, read_write>):void -> %b2 {
-  %b2 = block {
+%func = func(%pointer:ptr<storage, i32, read_write>):void {
+  $B2: {
     store %pointer, 42i
     ret
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %5:void = call %func, %S
     ret
   }
diff --git a/test/tint/ptr_ref/store/param/storage/i32_in_struct.wgsl.expected.ir.msl b/test/tint/ptr_ref/store/param/storage/i32_in_struct.wgsl.expected.ir.msl
index 9f0eb01..4faa5a7 100644
--- a/test/tint/ptr_ref/store/param/storage/i32_in_struct.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/store/param/storage/i32_in_struct.wgsl.expected.ir.msl
@@ -1,21 +1,21 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: str = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: str = struct @align(4) {
   i:i32 @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %S:ptr<storage, str, read_write> = var @binding_point(0, 0)
 }
 
-%func = func(%pointer:ptr<storage, i32, read_write>):void -> %b2 {
-  %b2 = block {
+%func = func(%pointer:ptr<storage, i32, read_write>):void {
+  $B2: {
     store %pointer, 42i
     ret
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %5:ptr<storage, i32, read_write> = access %S, 0u
     %6:void = call %func, %5
     ret
diff --git a/test/tint/ptr_ref/store/param/storage/struct_in_array.wgsl.expected.ir.msl b/test/tint/ptr_ref/store/param/storage/struct_in_array.wgsl.expected.ir.msl
index 5e2f890..6fe5e92 100644
--- a/test/tint/ptr_ref/store/param/storage/struct_in_array.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/store/param/storage/struct_in_array.wgsl.expected.ir.msl
@@ -1,21 +1,21 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: str = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: str = struct @align(4) {
   i:i32 @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %S:ptr<storage, array<str, 4>, read_write> = var @binding_point(0, 0)
 }
 
-%func = func(%pointer:ptr<storage, str, read_write>):void -> %b2 {
-  %b2 = block {
+%func = func(%pointer:ptr<storage, str, read_write>):void {
+  $B2: {
     store %pointer, str(0i)
     ret
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %5:ptr<storage, str, read_write> = access %S, 2i
     %6:void = call %func, %5
     ret
diff --git a/test/tint/ptr_ref/store/param/storage/vec2_f32_in_mat2x2.wgsl.expected.ir.msl b/test/tint/ptr_ref/store/param/storage/vec2_f32_in_mat2x2.wgsl.expected.ir.msl
index 73ba227..32234ae 100644
--- a/test/tint/ptr_ref/store/param/storage/vec2_f32_in_mat2x2.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/store/param/storage/vec2_f32_in_mat2x2.wgsl.expected.ir.msl
@@ -1,17 +1,17 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %S:ptr<storage, mat2x2<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%func = func(%pointer:ptr<storage, vec2<f32>, read_write>):void -> %b2 {
-  %b2 = block {
+%func = func(%pointer:ptr<storage, vec2<f32>, read_write>):void {
+  $B2: {
     store %pointer, vec2<f32>(0.0f)
     ret
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %5:ptr<storage, vec2<f32>, read_write> = access %S, 1i
     %6:void = call %func, %5
     ret
diff --git a/test/tint/ptr_ref/store/param/storage/vec4_f32.wgsl.expected.ir.msl b/test/tint/ptr_ref/store/param/storage/vec4_f32.wgsl.expected.ir.msl
index bb2fd01..0d2a0ce 100644
--- a/test/tint/ptr_ref/store/param/storage/vec4_f32.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/store/param/storage/vec4_f32.wgsl.expected.ir.msl
@@ -1,17 +1,17 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %S:ptr<storage, vec4<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%func = func(%pointer:ptr<storage, vec4<f32>, read_write>):void -> %b2 {
-  %b2 = block {
+%func = func(%pointer:ptr<storage, vec4<f32>, read_write>):void {
+  $B2: {
     store %pointer, vec4<f32>(0.0f)
     ret
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %5:void = call %func, %S
     ret
   }
diff --git a/test/tint/ptr_ref/store/param/storage/vec4_f32_in_mat2x4.wgsl.expected.ir.msl b/test/tint/ptr_ref/store/param/storage/vec4_f32_in_mat2x4.wgsl.expected.ir.msl
index b316f50..b5c1b0f 100644
--- a/test/tint/ptr_ref/store/param/storage/vec4_f32_in_mat2x4.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/store/param/storage/vec4_f32_in_mat2x4.wgsl.expected.ir.msl
@@ -1,17 +1,17 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %S:ptr<storage, mat2x4<f32>, read_write> = var @binding_point(0, 0)
 }
 
-%func = func(%pointer:ptr<storage, vec4<f32>, read_write>):void -> %b2 {
-  %b2 = block {
+%func = func(%pointer:ptr<storage, vec4<f32>, read_write>):void {
+  $B2: {
     store %pointer, vec4<f32>(0.0f)
     ret
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %5:ptr<storage, vec4<f32>, read_write> = access %S, 1i
     %6:void = call %func, %5
     ret
diff --git a/test/tint/ptr_ref/store/param/storage/vec4_f32_in_struct.wgsl.expected.ir.msl b/test/tint/ptr_ref/store/param/storage/vec4_f32_in_struct.wgsl.expected.ir.msl
index 569ba51..bda7b20 100644
--- a/test/tint/ptr_ref/store/param/storage/vec4_f32_in_struct.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/store/param/storage/vec4_f32_in_struct.wgsl.expected.ir.msl
@@ -1,21 +1,21 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: str = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: str = struct @align(16) {
   i:vec4<f32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %S:ptr<storage, str, read_write> = var @binding_point(0, 0)
 }
 
-%func = func(%pointer:ptr<storage, vec4<f32>, read_write>):void -> %b2 {
-  %b2 = block {
+%func = func(%pointer:ptr<storage, vec4<f32>, read_write>):void {
+  $B2: {
     store %pointer, vec4<f32>(0.0f)
     ret
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %5:ptr<storage, vec4<f32>, read_write> = access %S, 0u
     %6:void = call %func, %5
     ret
diff --git a/test/tint/ptr_ref/store/param/workgroup/array_in_struct.wgsl.expected.ir.msl b/test/tint/ptr_ref/store/param/workgroup/array_in_struct.wgsl.expected.ir.msl
index efdd3b1..3fa6a4b 100644
--- a/test/tint/ptr_ref/store/param/workgroup/array_in_struct.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/store/param/workgroup/array_in_struct.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:388 internal compiler error: Switch() matched no cases. Type: tint::core::ir::BlockParam
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/ptr_ref/store/param/workgroup/i32.wgsl.expected.ir.msl b/test/tint/ptr_ref/store/param/workgroup/i32.wgsl.expected.ir.msl
index efdd3b1..b5cca68 100644
--- a/test/tint/ptr_ref/store/param/workgroup/i32.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/store/param/workgroup/i32.wgsl.expected.ir.msl
@@ -1,9 +1,36 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+threadgroup int S;
+void func(threadgroup int* const pointer) {
+  pointer = 42;
+}
+kernel void tint_symbol(uint tint_local_index [[thread_index_in_threadgroup]]) {
+  if ((tint_local_index == 0u)) {
+    S = 0;
+  }
+  threadgroup_barrier(mem_flags::mem_threadgroup);
+  func(S);
+}
+program_source:4:17: error: program scope variable must reside in constant address space
+threadgroup int S;
+                ^
+program_source:6:11: error: cannot assign to variable 'pointer' with const-qualified type 'threadgroup int *const'
+  pointer = 42;
+  ~~~~~~~ ^
+program_source:5:34: note: variable 'pointer' declared const here
+void func(threadgroup int* const pointer) {
+          ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~
+program_source:9:25: warning: equality comparison with extraneous parentheses [-Wparentheses-equality]
+  if ((tint_local_index == 0u)) {
+       ~~~~~~~~~~~~~~~~~^~~~~
+program_source:9:25: note: remove extraneous parentheses around the comparison to silence this warning
+  if ((tint_local_index == 0u)) {
+      ~                 ^    ~
+program_source:9:25: note: use '=' to turn this equality comparison into an assignment
+  if ((tint_local_index == 0u)) {
+                        ^~
+                        =
+
diff --git a/test/tint/ptr_ref/store/param/workgroup/i32_in_struct.wgsl.expected.ir.msl b/test/tint/ptr_ref/store/param/workgroup/i32_in_struct.wgsl.expected.ir.msl
index efdd3b1..cc3cff5 100644
--- a/test/tint/ptr_ref/store/param/workgroup/i32_in_struct.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/store/param/workgroup/i32_in_struct.wgsl.expected.ir.msl
@@ -1,9 +1,39 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct str {
+  int i;
+};
+
+threadgroup str S;
+void func(threadgroup int* const pointer) {
+  pointer = 42;
+}
+kernel void tint_symbol(uint tint_local_index [[thread_index_in_threadgroup]]) {
+  if ((tint_local_index == 0u)) {
+    S = str{};
+  }
+  threadgroup_barrier(mem_flags::mem_threadgroup);
+  func(S.i);
+}
+program_source:7:17: error: program scope variable must reside in constant address space
+threadgroup str S;
+                ^
+program_source:9:11: error: cannot assign to variable 'pointer' with const-qualified type 'threadgroup int *const'
+  pointer = 42;
+  ~~~~~~~ ^
+program_source:8:34: note: variable 'pointer' declared const here
+void func(threadgroup int* const pointer) {
+          ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~
+program_source:12:25: warning: equality comparison with extraneous parentheses [-Wparentheses-equality]
+  if ((tint_local_index == 0u)) {
+       ~~~~~~~~~~~~~~~~~^~~~~
+program_source:12:25: note: remove extraneous parentheses around the comparison to silence this warning
+  if ((tint_local_index == 0u)) {
+      ~                 ^    ~
+program_source:12:25: note: use '=' to turn this equality comparison into an assignment
+  if ((tint_local_index == 0u)) {
+                        ^~
+                        =
+
diff --git a/test/tint/ptr_ref/store/param/workgroup/struct_in_array.wgsl.expected.ir.msl b/test/tint/ptr_ref/store/param/workgroup/struct_in_array.wgsl.expected.ir.msl
index efdd3b1..3fa6a4b 100644
--- a/test/tint/ptr_ref/store/param/workgroup/struct_in_array.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/store/param/workgroup/struct_in_array.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:388 internal compiler error: Switch() matched no cases. Type: tint::core::ir::BlockParam
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/ptr_ref/store/param/workgroup/vec2_f32_in_mat2x2.wgsl.expected.ir.msl b/test/tint/ptr_ref/store/param/workgroup/vec2_f32_in_mat2x2.wgsl.expected.ir.msl
index efdd3b1..ef57e5a 100644
--- a/test/tint/ptr_ref/store/param/workgroup/vec2_f32_in_mat2x2.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/store/param/workgroup/vec2_f32_in_mat2x2.wgsl.expected.ir.msl
@@ -1,9 +1,36 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+threadgroup float2x2 S;
+void func(threadgroup float2* const pointer) {
+  pointer = float2(0.0f);
+}
+kernel void tint_symbol(uint tint_local_index [[thread_index_in_threadgroup]]) {
+  if ((tint_local_index == 0u)) {
+    S = float2x2(float2(0.0f), float2(0.0f));
+  }
+  threadgroup_barrier(mem_flags::mem_threadgroup);
+  func(S[1]);
+}
+program_source:4:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 S;
+                     ^
+program_source:6:11: error: cannot assign to variable 'pointer' with const-qualified type 'threadgroup float2 *const'
+  pointer = float2(0.0f);
+  ~~~~~~~ ^
+program_source:5:37: note: variable 'pointer' declared const here
+void func(threadgroup float2* const pointer) {
+          ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~
+program_source:9:25: warning: equality comparison with extraneous parentheses [-Wparentheses-equality]
+  if ((tint_local_index == 0u)) {
+       ~~~~~~~~~~~~~~~~~^~~~~
+program_source:9:25: note: remove extraneous parentheses around the comparison to silence this warning
+  if ((tint_local_index == 0u)) {
+      ~                 ^    ~
+program_source:9:25: note: use '=' to turn this equality comparison into an assignment
+  if ((tint_local_index == 0u)) {
+                        ^~
+                        =
+
diff --git a/test/tint/ptr_ref/store/param/workgroup/vec4_f32.wgsl.expected.ir.msl b/test/tint/ptr_ref/store/param/workgroup/vec4_f32.wgsl.expected.ir.msl
index efdd3b1..2de34c8 100644
--- a/test/tint/ptr_ref/store/param/workgroup/vec4_f32.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/store/param/workgroup/vec4_f32.wgsl.expected.ir.msl
@@ -1,9 +1,36 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+threadgroup float4 S;
+void func(threadgroup float4* const pointer) {
+  pointer = float4(0.0f);
+}
+kernel void tint_symbol(uint tint_local_index [[thread_index_in_threadgroup]]) {
+  if ((tint_local_index == 0u)) {
+    S = float4(0.0f);
+  }
+  threadgroup_barrier(mem_flags::mem_threadgroup);
+  func(S);
+}
+program_source:4:20: error: program scope variable must reside in constant address space
+threadgroup float4 S;
+                   ^
+program_source:6:11: error: cannot assign to variable 'pointer' with const-qualified type 'threadgroup float4 *const'
+  pointer = float4(0.0f);
+  ~~~~~~~ ^
+program_source:5:37: note: variable 'pointer' declared const here
+void func(threadgroup float4* const pointer) {
+          ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~
+program_source:9:25: warning: equality comparison with extraneous parentheses [-Wparentheses-equality]
+  if ((tint_local_index == 0u)) {
+       ~~~~~~~~~~~~~~~~~^~~~~
+program_source:9:25: note: remove extraneous parentheses around the comparison to silence this warning
+  if ((tint_local_index == 0u)) {
+      ~                 ^    ~
+program_source:9:25: note: use '=' to turn this equality comparison into an assignment
+  if ((tint_local_index == 0u)) {
+                        ^~
+                        =
+
diff --git a/test/tint/ptr_ref/store/param/workgroup/vec4_f32_in_mat2x4.wgsl.expected.ir.msl b/test/tint/ptr_ref/store/param/workgroup/vec4_f32_in_mat2x4.wgsl.expected.ir.msl
index efdd3b1..0f5c1cc 100644
--- a/test/tint/ptr_ref/store/param/workgroup/vec4_f32_in_mat2x4.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/store/param/workgroup/vec4_f32_in_mat2x4.wgsl.expected.ir.msl
@@ -1,9 +1,36 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+threadgroup float2x4 S;
+void func(threadgroup float4* const pointer) {
+  pointer = float4(0.0f);
+}
+kernel void tint_symbol(uint tint_local_index [[thread_index_in_threadgroup]]) {
+  if ((tint_local_index == 0u)) {
+    S = float2x4(float4(0.0f), float4(0.0f));
+  }
+  threadgroup_barrier(mem_flags::mem_threadgroup);
+  func(S[1]);
+}
+program_source:4:22: error: program scope variable must reside in constant address space
+threadgroup float2x4 S;
+                     ^
+program_source:6:11: error: cannot assign to variable 'pointer' with const-qualified type 'threadgroup float4 *const'
+  pointer = float4(0.0f);
+  ~~~~~~~ ^
+program_source:5:37: note: variable 'pointer' declared const here
+void func(threadgroup float4* const pointer) {
+          ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~
+program_source:9:25: warning: equality comparison with extraneous parentheses [-Wparentheses-equality]
+  if ((tint_local_index == 0u)) {
+       ~~~~~~~~~~~~~~~~~^~~~~
+program_source:9:25: note: remove extraneous parentheses around the comparison to silence this warning
+  if ((tint_local_index == 0u)) {
+      ~                 ^    ~
+program_source:9:25: note: use '=' to turn this equality comparison into an assignment
+  if ((tint_local_index == 0u)) {
+                        ^~
+                        =
+
diff --git a/test/tint/ptr_ref/store/param/workgroup/vec4_f32_in_struct.wgsl.expected.ir.msl b/test/tint/ptr_ref/store/param/workgroup/vec4_f32_in_struct.wgsl.expected.ir.msl
index efdd3b1..9017799 100644
--- a/test/tint/ptr_ref/store/param/workgroup/vec4_f32_in_struct.wgsl.expected.ir.msl
+++ b/test/tint/ptr_ref/store/param/workgroup/vec4_f32_in_struct.wgsl.expected.ir.msl
@@ -1,9 +1,39 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct str {
+  float4 i;
+};
+
+threadgroup str S;
+void func(threadgroup float4* const pointer) {
+  pointer = float4(0.0f);
+}
+kernel void tint_symbol(uint tint_local_index [[thread_index_in_threadgroup]]) {
+  if ((tint_local_index == 0u)) {
+    S = str{};
+  }
+  threadgroup_barrier(mem_flags::mem_threadgroup);
+  func(S.i);
+}
+program_source:7:17: error: program scope variable must reside in constant address space
+threadgroup str S;
+                ^
+program_source:9:11: error: cannot assign to variable 'pointer' with const-qualified type 'threadgroup float4 *const'
+  pointer = float4(0.0f);
+  ~~~~~~~ ^
+program_source:8:37: note: variable 'pointer' declared const here
+void func(threadgroup float4* const pointer) {
+          ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~
+program_source:12:25: warning: equality comparison with extraneous parentheses [-Wparentheses-equality]
+  if ((tint_local_index == 0u)) {
+       ~~~~~~~~~~~~~~~~~^~~~~
+program_source:12:25: note: remove extraneous parentheses around the comparison to silence this warning
+  if ((tint_local_index == 0u)) {
+      ~                 ^    ~
+program_source:12:25: note: use '=' to turn this equality comparison into an assignment
+  if ((tint_local_index == 0u)) {
+                        ^~
+                        =
+
diff --git a/test/tint/ptr_sugar/array.wgsl.expected.ir.msl b/test/tint/ptr_sugar/array.wgsl.expected.ir.msl
new file mode 100644
index 0000000..bdb6bf8
--- /dev/null
+++ b/test/tint/ptr_sugar/array.wgsl.expected.ir.msl
@@ -0,0 +1,330 @@
+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];
+};
+
+
+void deref_const() {
+  tint_array<int, 10> a = {};
+  thread tint_array<int, 10>* const p = a;
+  int b = p[0];
+  p[0] = 42;
+}
+void no_deref_const() {
+  tint_array<int, 10> a = {};
+  thread tint_array<int, 10>* const p = a;
+  int b = p[0];
+  p[0] = 42;
+}
+void deref_let() {
+  tint_array<int, 10> a = {};
+  thread tint_array<int, 10>* const p = a;
+  int const i = 0;
+  int b = p[i];
+  p[0] = 42;
+}
+void no_deref_let() {
+  tint_array<int, 10> a = {};
+  thread tint_array<int, 10>* const p = a;
+  int const i = 0;
+  int b = p[i];
+  p[0] = 42;
+}
+void deref_var() {
+  tint_array<int, 10> a = {};
+  thread tint_array<int, 10>* const p = a;
+  int i = 0;
+  int b = p[i];
+  p[0] = 42;
+}
+void no_deref_var() {
+  tint_array<int, 10> a = {};
+  thread tint_array<int, 10>* const p = a;
+  int i = 0;
+  int b = p[i];
+  p[0] = 42;
+}
+kernel void tint_symbol() {
+  deref_const();
+  no_deref_const();
+  deref_let();
+  no_deref_let();
+  deref_var();
+  no_deref_var();
+}
+program_source:18:37: error: no viable conversion from 'tint_array<int, 10>' to 'tint_array<int, 10> *const'
+  thread tint_array<int, 10>* const p = a;
+                                    ^   ~
+program_source:19:7: error: no viable conversion from 'tint_array<int, 10>' to 'int'
+  int b = p[0];
+      ^   ~~~~
+program_source:20:8: error: no viable overloaded '='
+  p[0] = 42;
+  ~~~~ ^ ~~
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: no known conversion from 'int' to 'const tint_array<int, 10>' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: no known conversion from 'int' to 'const device tint_array<int, 10> &' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: no known conversion from 'int' to 'const threadgroup tint_array<int, 10> &' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: no known conversion from 'int' to 'const constant tint_array<int, 10> &' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'device'
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'device'
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'device'
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'device'
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'threadgroup'
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'threadgroup'
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'threadgroup'
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'threadgroup'
+program_source:4:8: note: candidate function (the implicit move assignment operator) not viable: no known conversion from 'int' to 'tint_array<int, 10>' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate function (the implicit move assignment operator) not viable: no known conversion from 'int' to 'device tint_array<int, 10> &&' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate function (the implicit move assignment operator) not viable: no known conversion from 'int' to 'threadgroup tint_array<int, 10> &&' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate function (the implicit move assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'device'
+program_source:4:8: note: candidate function (the implicit move assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'device'
+program_source:4:8: note: candidate function (the implicit move assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'device'
+program_source:4:8: note: candidate function (the implicit move assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'threadgroup'
+program_source:4:8: note: candidate function (the implicit move assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'threadgroup'
+program_source:4:8: note: candidate function (the implicit move assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'threadgroup'
+program_source:24:37: error: no viable conversion from 'tint_array<int, 10>' to 'tint_array<int, 10> *const'
+  thread tint_array<int, 10>* const p = a;
+                                    ^   ~
+program_source:25:7: error: no viable conversion from 'tint_array<int, 10>' to 'int'
+  int b = p[0];
+      ^   ~~~~
+program_source:26:8: error: no viable overloaded '='
+  p[0] = 42;
+  ~~~~ ^ ~~
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: no known conversion from 'int' to 'const tint_array<int, 10>' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: no known conversion from 'int' to 'const device tint_array<int, 10> &' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: no known conversion from 'int' to 'const threadgroup tint_array<int, 10> &' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: no known conversion from 'int' to 'const constant tint_array<int, 10> &' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'device'
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'device'
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'device'
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'device'
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'threadgroup'
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'threadgroup'
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'threadgroup'
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'threadgroup'
+program_source:4:8: note: candidate function (the implicit move assignment operator) not viable: no known conversion from 'int' to 'tint_array<int, 10>' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate function (the implicit move assignment operator) not viable: no known conversion from 'int' to 'device tint_array<int, 10> &&' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate function (the implicit move assignment operator) not viable: no known conversion from 'int' to 'threadgroup tint_array<int, 10> &&' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate function (the implicit move assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'device'
+program_source:4:8: note: candidate function (the implicit move assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'device'
+program_source:4:8: note: candidate function (the implicit move assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'device'
+program_source:4:8: note: candidate function (the implicit move assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'threadgroup'
+program_source:4:8: note: candidate function (the implicit move assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'threadgroup'
+program_source:4:8: note: candidate function (the implicit move assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'threadgroup'
+program_source:30:37: error: no viable conversion from 'tint_array<int, 10>' to 'tint_array<int, 10> *const'
+  thread tint_array<int, 10>* const p = a;
+                                    ^   ~
+program_source:32:7: error: no viable conversion from 'tint_array<int, 10>' to 'int'
+  int b = p[i];
+      ^   ~~~~
+program_source:33:8: error: no viable overloaded '='
+  p[0] = 42;
+  ~~~~ ^ ~~
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: no known conversion from 'int' to 'const tint_array<int, 10>' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: no known conversion from 'int' to 'const device tint_array<int, 10> &' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: no known conversion from 'int' to 'const threadgroup tint_array<int, 10> &' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: no known conversion from 'int' to 'const constant tint_array<int, 10> &' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'device'
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'device'
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'device'
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'device'
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'threadgroup'
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'threadgroup'
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'threadgroup'
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'threadgroup'
+program_source:4:8: note: candidate function (the implicit move assignment operator) not viable: no known conversion from 'int' to 'tint_array<int, 10>' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate function (the implicit move assignment operator) not viable: no known conversion from 'int' to 'device tint_array<int, 10> &&' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate function (the implicit move assignment operator) not viable: no known conversion from 'int' to 'threadgroup tint_array<int, 10> &&' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate function (the implicit move assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'device'
+program_source:4:8: note: candidate function (the implicit move assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'device'
+program_source:4:8: note: candidate function (the implicit move assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'device'
+program_source:4:8: note: candidate function (the implicit move assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'threadgroup'
+program_source:4:8: note: candidate function (the implicit move assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'threadgroup'
+program_source:4:8: note: candidate function (the implicit move assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'threadgroup'
+program_source:37:37: error: no viable conversion from 'tint_array<int, 10>' to 'tint_array<int, 10> *const'
+  thread tint_array<int, 10>* const p = a;
+                                    ^   ~
+program_source:39:7: error: no viable conversion from 'tint_array<int, 10>' to 'int'
+  int b = p[i];
+      ^   ~~~~
+program_source:40:8: error: no viable overloaded '='
+  p[0] = 42;
+  ~~~~ ^ ~~
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: no known conversion from 'int' to 'const tint_array<int, 10>' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: no known conversion from 'int' to 'const device tint_array<int, 10> &' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: no known conversion from 'int' to 'const threadgroup tint_array<int, 10> &' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: no known conversion from 'int' to 'const constant tint_array<int, 10> &' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'device'
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'device'
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'device'
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'device'
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'threadgroup'
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'threadgroup'
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'threadgroup'
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'threadgroup'
+program_source:4:8: note: candidate function (the implicit move assignment operator) not viable: no known conversion from 'int' to 'tint_array<int, 10>' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate function (the implicit move assignment operator) not viable: no known conversion from 'int' to 'device tint_array<int, 10> &&' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate function (the implicit move assignment operator) not viable: no known conversion from 'int' to 'threadgroup tint_array<int, 10> &&' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate function (the implicit move assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'device'
+program_source:4:8: note: candidate function (the implicit move assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'device'
+program_source:4:8: note: candidate function (the implicit move assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'device'
+program_source:4:8: note: candidate function (the implicit move assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'threadgroup'
+program_source:4:8: note: candidate function (the implicit move assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'threadgroup'
+program_source:4:8: note: candidate function (the implicit move assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'threadgroup'
+program_source:44:37: error: no viable conversion from 'tint_array<int, 10>' to 'tint_array<int, 10> *const'
+  thread tint_array<int, 10>* const p = a;
+                                    ^   ~
+program_source:46:7: error: no viable conversion from 'tint_array<int, 10>' to 'int'
+  int b = p[i];
+      ^   ~~~~
+program_source:47:8: error: no viable overloaded '='
+  p[0] = 42;
+  ~~~~ ^ ~~
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: no known conversion from 'int' to 'const tint_array<int, 10>' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: no known conversion from 'int' to 'const device tint_array<int, 10> &' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: no known conversion from 'int' to 'const threadgroup tint_array<int, 10> &' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: no known conversion from 'int' to 'const constant tint_array<int, 10> &' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'device'
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'device'
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'device'
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'device'
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'threadgroup'
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'threadgroup'
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'threadgroup'
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'threadgroup'
+program_source:4:8: note: candidate function (the implicit move assignment operator) not viable: no known conversion from 'int' to 'tint_array<int, 10>' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate function (the implicit move assignment operator) not viable: no known conversion from 'int' to 'device tint_array<int, 10> &&' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate function (the implicit move assignment operator) not viable: no known conversion from 'int' to 'threadgroup tint_array<int, 10> &&' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate function (the implicit move assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'device'
+program_source:4:8: note: candidate function (the implicit move assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'device'
+program_source:4:8: note: candidate function (the implicit move assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'device'
+program_source:4:8: note: candidate function (the implicit move assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'threadgroup'
+program_source:4:8: note: candidate function (the implicit move assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'threadgroup'
+program_source:4:8: note: candidate function (the implicit move assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'threadgroup'
+program_source:51:37: error: no viable conversion from 'tint_array<int, 10>' to 'tint_array<int, 10> *const'
+  thread tint_array<int, 10>* const p = a;
+                                    ^   ~
+program_source:53:7: error: no viable conversion from 'tint_array<int, 10>' to 'int'
+  int b = p[i];
+      ^   ~~~~
+program_source:54:8: error: no viable overloaded '='
+  p[0] = 42;
+  ~~~~ ^ ~~
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: no known conversion from 'int' to 'const tint_array<int, 10>' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: no known conversion from 'int' to 'const device tint_array<int, 10> &' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: no known conversion from 'int' to 'const threadgroup tint_array<int, 10> &' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: no known conversion from 'int' to 'const constant tint_array<int, 10> &' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'device'
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'device'
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'device'
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'device'
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'threadgroup'
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'threadgroup'
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'threadgroup'
+program_source:4:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'threadgroup'
+program_source:4:8: note: candidate function (the implicit move assignment operator) not viable: no known conversion from 'int' to 'tint_array<int, 10>' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate function (the implicit move assignment operator) not viable: no known conversion from 'int' to 'device tint_array<int, 10> &&' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate function (the implicit move assignment operator) not viable: no known conversion from 'int' to 'threadgroup tint_array<int, 10> &&' for 1st argument
+struct tint_array {
+       ^
+program_source:4:8: note: candidate function (the implicit move assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'device'
+program_source:4:8: note: candidate function (the implicit move assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'device'
+program_source:4:8: note: candidate function (the implicit move assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'device'
+program_source:4:8: note: candidate function (the implicit move assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'threadgroup'
+program_source:4:8: note: candidate function (the implicit move assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'threadgroup'
+program_source:4:8: note: candidate function (the implicit move assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'threadgroup'
+
diff --git a/test/tint/ptr_sugar/builtin_struct.wgsl.expected.ir.msl b/test/tint/ptr_sugar/builtin_struct.wgsl.expected.ir.msl
new file mode 100644
index 0000000..2090c9a
--- /dev/null
+++ b/test/tint/ptr_sugar/builtin_struct.wgsl.expected.ir.msl
@@ -0,0 +1,88 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+struct modf_result_f32 {
+  float fract;
+  float whole;
+};
+struct frexp_result_f32 {
+  float fract;
+  int exp;
+};
+
+void deref_modf() {
+  modf_result_f32 a = modf_result_f32{.fract=0.5f, .whole=1.0f};
+  thread modf_result_f32* const p = a;
+  float fract = p.fract;
+  float whole = p.whole;
+}
+void no_deref_modf() {
+  modf_result_f32 a = modf_result_f32{.fract=0.5f, .whole=1.0f};
+  thread modf_result_f32* const p = a;
+  float fract = p.fract;
+  float whole = p.whole;
+}
+void deref_frexp() {
+  frexp_result_f32 a = frexp_result_f32{.fract=0.75f, .exp=1};
+  thread frexp_result_f32* const p = a;
+  float fract = p.fract;
+  int exp = p.exp;
+}
+void no_deref_frexp() {
+  frexp_result_f32 a = frexp_result_f32{.fract=0.75f, .exp=1};
+  thread frexp_result_f32* const p = a;
+  float fract = p.fract;
+  int exp = p.exp;
+}
+kernel void tint_symbol() {
+  deref_modf();
+  no_deref_modf();
+  deref_frexp();
+  no_deref_frexp();
+}
+program_source:14:33: error: no viable conversion from 'modf_result_f32' to 'modf_result_f32 *const'
+  thread modf_result_f32* const p = a;
+                                ^   ~
+program_source:15:18: error: member reference type 'modf_result_f32 *const' is a pointer; did you mean to use '->'?
+  float fract = p.fract;
+                ~^
+                 ->
+program_source:16:18: error: member reference type 'modf_result_f32 *const' is a pointer; did you mean to use '->'?
+  float whole = p.whole;
+                ~^
+                 ->
+program_source:20:33: error: no viable conversion from 'modf_result_f32' to 'modf_result_f32 *const'
+  thread modf_result_f32* const p = a;
+                                ^   ~
+program_source:21:18: error: member reference type 'modf_result_f32 *const' is a pointer; did you mean to use '->'?
+  float fract = p.fract;
+                ~^
+                 ->
+program_source:22:18: error: member reference type 'modf_result_f32 *const' is a pointer; did you mean to use '->'?
+  float whole = p.whole;
+                ~^
+                 ->
+program_source:26:34: error: no viable conversion from 'frexp_result_f32' to 'frexp_result_f32 *const'
+  thread frexp_result_f32* const p = a;
+                                 ^   ~
+program_source:27:18: error: member reference type 'frexp_result_f32 *const' is a pointer; did you mean to use '->'?
+  float fract = p.fract;
+                ~^
+                 ->
+program_source:28:14: error: member reference type 'frexp_result_f32 *const' is a pointer; did you mean to use '->'?
+  int exp = p.exp;
+            ~^
+             ->
+program_source:32:34: error: no viable conversion from 'frexp_result_f32' to 'frexp_result_f32 *const'
+  thread frexp_result_f32* const p = a;
+                                 ^   ~
+program_source:33:18: error: member reference type 'frexp_result_f32 *const' is a pointer; did you mean to use '->'?
+  float fract = p.fract;
+                ~^
+                 ->
+program_source:34:14: error: member reference type 'frexp_result_f32 *const' is a pointer; did you mean to use '->'?
+  int exp = p.exp;
+            ~^
+             ->
+
diff --git a/test/tint/ptr_sugar/compound_assign_index.wgsl.expected.ir.msl b/test/tint/ptr_sugar/compound_assign_index.wgsl.expected.ir.msl
new file mode 100644
index 0000000..7442043
--- /dev/null
+++ b/test/tint/ptr_sugar/compound_assign_index.wgsl.expected.ir.msl
@@ -0,0 +1,44 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void deref() {
+  int3 a = 0;
+  thread int3* const p = a;
+  p[0] = (p[0] + 42);
+}
+void no_deref() {
+  int3 a = 0;
+  thread int3* const p = a;
+  p[0] = (p[0] + 42);
+}
+void deref_inc() {
+  int3 a = 0;
+  thread int3* const p = a;
+  p[0] = (p[0] + 1);
+}
+void no_deref_inc() {
+  int3 a = 0;
+  thread int3* const p = a;
+  p[0] = (p[0] + 1);
+}
+kernel void tint_symbol() {
+  deref();
+  no_deref();
+  deref_inc();
+  no_deref_inc();
+}
+program_source:6:22: error: cannot initialize a variable of type 'int3 *const' with an lvalue of type 'int3' (vector of 3 'int' values)
+  thread int3* const p = a;
+                     ^   ~
+program_source:11:22: error: cannot initialize a variable of type 'int3 *const' with an lvalue of type 'int3' (vector of 3 'int' values)
+  thread int3* const p = a;
+                     ^   ~
+program_source:16:22: error: cannot initialize a variable of type 'int3 *const' with an lvalue of type 'int3' (vector of 3 'int' values)
+  thread int3* const p = a;
+                     ^   ~
+program_source:21:22: error: cannot initialize a variable of type 'int3 *const' with an lvalue of type 'int3' (vector of 3 'int' values)
+  thread int3* const p = a;
+                     ^   ~
+
diff --git a/test/tint/ptr_sugar/compound_assign_member.wgsl.expected.ir.msl b/test/tint/ptr_sugar/compound_assign_member.wgsl.expected.ir.msl
new file mode 100644
index 0000000..0c742d4
--- /dev/null
+++ b/test/tint/ptr_sugar/compound_assign_member.wgsl.expected.ir.msl
@@ -0,0 +1,26 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void deref() {
+  int3 a = 0;
+  thread int3* const p = a;
+  p[0u] = (p[0u] + 42);
+}
+void no_deref() {
+  int3 a = 0;
+  thread int3* const p = a;
+  p[0u] = (p[0u] + 42);
+}
+kernel void tint_symbol() {
+  deref();
+  no_deref();
+}
+program_source:6:22: error: cannot initialize a variable of type 'int3 *const' with an lvalue of type 'int3' (vector of 3 'int' values)
+  thread int3* const p = a;
+                     ^   ~
+program_source:11:22: error: cannot initialize a variable of type 'int3 *const' with an lvalue of type 'int3' (vector of 3 'int' values)
+  thread int3* const p = a;
+                     ^   ~
+
diff --git a/test/tint/ptr_sugar/matrix.wgsl.expected.ir.msl b/test/tint/ptr_sugar/matrix.wgsl.expected.ir.msl
new file mode 100644
index 0000000..b9a3275
--- /dev/null
+++ b/test/tint/ptr_sugar/matrix.wgsl.expected.ir.msl
@@ -0,0 +1,68 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void deref() {
+  float2x3 a = float2x3(0.0f);
+  thread float2x3* const p = a;
+  float3 b = p[0];
+  p[0] = float3(1.0f, 2.0f, 3.0f);
+}
+void no_deref() {
+  float2x3 a = float2x3(0.0f);
+  thread float2x3* const p = a;
+  float3 b = p[0];
+  p[0] = float3(1.0f, 2.0f, 3.0f);
+}
+kernel void tint_symbol() {
+  deref();
+  no_deref();
+}
+program_source:6:26: error: no viable conversion from 'metal::float2x3' (aka 'matrix<float, 2, 3>') to 'metal::float2x3 *const' (aka 'matrix<float, 2, 3> *const')
+  thread float2x3* const p = a;
+                         ^   ~
+program_source:7:10: error: no viable conversion from 'metal::float2x3' (aka 'matrix<float, 2, 3>') to 'float3' (vector of 3 'float' values)
+  float3 b = p[0];
+         ^   ~~~~
+program_source:8:8: error: no viable overloaded '='
+  p[0] = float3(1.0f, 2.0f, 3.0f);
+  ~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~
+/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/32023/Libraries/lib/clang/32023.194/include/metal/metal_matrix:21:8: note: candidate function (the implicit copy assignment operator) not viable: no known conversion from 'float3' (vector of 3 'float' values) to 'const metal::matrix<float, 2, 3, void>' for 1st argument
+struct matrix
+       ^
+/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/32023/Libraries/lib/clang/32023.194/include/metal/metal_matrix:21:8: note: candidate function (the implicit copy assignment operator) not viable: no known conversion from 'float3' (vector of 3 'float' values) to 'const device metal::matrix<float, 2, 3, void> &' for 1st argument
+/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/32023/Libraries/lib/clang/32023.194/include/metal/metal_matrix:21:8: note: candidate function (the implicit copy assignment operator) not viable: no known conversion from 'float3' (vector of 3 'float' values) to 'const threadgroup metal::matrix<float, 2, 3, void> &' for 1st argument
+/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/32023/Libraries/lib/clang/32023.194/include/metal/metal_matrix:21:8: note: candidate function (the implicit copy assignment operator) not viable: no known conversion from 'float3' (vector of 3 'float' values) to 'const constant metal::matrix<float, 2, 3, void> &' for 1st argument
+/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/32023/Libraries/lib/clang/32023.194/include/metal/metal_matrix:21:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'device'
+/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/32023/Libraries/lib/clang/32023.194/include/metal/metal_matrix:21:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'device'
+/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/32023/Libraries/lib/clang/32023.194/include/metal/metal_matrix:21:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'device'
+/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/32023/Libraries/lib/clang/32023.194/include/metal/metal_matrix:21:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'device'
+/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/32023/Libraries/lib/clang/32023.194/include/metal/metal_matrix:21:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'threadgroup'
+/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/32023/Libraries/lib/clang/32023.194/include/metal/metal_matrix:21:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'threadgroup'
+/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/32023/Libraries/lib/clang/32023.194/include/metal/metal_matrix:21:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'threadgroup'
+/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/32023/Libraries/lib/clang/32023.194/include/metal/metal_matrix:21:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'threadgroup'
+program_source:12:26: error: no viable conversion from 'metal::float2x3' (aka 'matrix<float, 2, 3>') to 'metal::float2x3 *const' (aka 'matrix<float, 2, 3> *const')
+  thread float2x3* const p = a;
+                         ^   ~
+program_source:13:10: error: no viable conversion from 'metal::float2x3' (aka 'matrix<float, 2, 3>') to 'float3' (vector of 3 'float' values)
+  float3 b = p[0];
+         ^   ~~~~
+program_source:14:8: error: no viable overloaded '='
+  p[0] = float3(1.0f, 2.0f, 3.0f);
+  ~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~
+/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/32023/Libraries/lib/clang/32023.194/include/metal/metal_matrix:21:8: note: candidate function (the implicit copy assignment operator) not viable: no known conversion from 'float3' (vector of 3 'float' values) to 'const metal::matrix<float, 2, 3, void>' for 1st argument
+struct matrix
+       ^
+/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/32023/Libraries/lib/clang/32023.194/include/metal/metal_matrix:21:8: note: candidate function (the implicit copy assignment operator) not viable: no known conversion from 'float3' (vector of 3 'float' values) to 'const device metal::matrix<float, 2, 3, void> &' for 1st argument
+/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/32023/Libraries/lib/clang/32023.194/include/metal/metal_matrix:21:8: note: candidate function (the implicit copy assignment operator) not viable: no known conversion from 'float3' (vector of 3 'float' values) to 'const threadgroup metal::matrix<float, 2, 3, void> &' for 1st argument
+/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/32023/Libraries/lib/clang/32023.194/include/metal/metal_matrix:21:8: note: candidate function (the implicit copy assignment operator) not viable: no known conversion from 'float3' (vector of 3 'float' values) to 'const constant metal::matrix<float, 2, 3, void> &' for 1st argument
+/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/32023/Libraries/lib/clang/32023.194/include/metal/metal_matrix:21:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'device'
+/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/32023/Libraries/lib/clang/32023.194/include/metal/metal_matrix:21:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'device'
+/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/32023/Libraries/lib/clang/32023.194/include/metal/metal_matrix:21:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'device'
+/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/32023/Libraries/lib/clang/32023.194/include/metal/metal_matrix:21:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'device'
+/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/32023/Libraries/lib/clang/32023.194/include/metal/metal_matrix:21:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'threadgroup'
+/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/32023/Libraries/lib/clang/32023.194/include/metal/metal_matrix:21:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'threadgroup'
+/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/32023/Libraries/lib/clang/32023.194/include/metal/metal_matrix:21:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'threadgroup'
+/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/32023/Libraries/lib/clang/32023.194/include/metal/metal_matrix:21:8: note: candidate function (the implicit copy assignment operator) not viable: 'this' object is in default address space, but method expects object in address space 'threadgroup'
+
diff --git a/test/tint/ptr_sugar/struct.wgsl.expected.ir.msl b/test/tint/ptr_sugar/struct.wgsl.expected.ir.msl
new file mode 100644
index 0000000..709c93d
--- /dev/null
+++ b/test/tint/ptr_sugar/struct.wgsl.expected.ir.msl
@@ -0,0 +1,47 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+struct S {
+  int x;
+};
+
+void deref() {
+  S a = {};
+  thread S* const p = a;
+  int b = p.x;
+  p.x = 42;
+}
+void no_deref() {
+  S a = {};
+  thread S* const p = a;
+  int b = p.x;
+  p.x = 42;
+}
+kernel void tint_symbol() {
+  deref();
+  no_deref();
+}
+program_source:9:19: error: no viable conversion from 'S' to 'S *const'
+  thread S* const p = a;
+                  ^   ~
+program_source:10:12: error: member reference type 'S *const' is a pointer; did you mean to use '->'?
+  int b = p.x;
+          ~^
+           ->
+program_source:11:4: error: member reference type 'S *const' is a pointer; did you mean to use '->'?
+  p.x = 42;
+  ~^
+   ->
+program_source:15:19: error: no viable conversion from 'S' to 'S *const'
+  thread S* const p = a;
+                  ^   ~
+program_source:16:12: error: member reference type 'S *const' is a pointer; did you mean to use '->'?
+  int b = p.x;
+          ~^
+           ->
+program_source:17:4: error: member reference type 'S *const' is a pointer; did you mean to use '->'?
+  p.x = 42;
+  ~^
+   ->
+
diff --git a/test/tint/ptr_sugar/vector_index.wgsl.expected.ir.msl b/test/tint/ptr_sugar/vector_index.wgsl.expected.ir.msl
new file mode 100644
index 0000000..8404a69
--- /dev/null
+++ b/test/tint/ptr_sugar/vector_index.wgsl.expected.ir.msl
@@ -0,0 +1,90 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void deref_const() {
+  int3 a = 0;
+  thread int3* const p = a;
+  int b = p[0];
+  p[0] = 42;
+}
+void no_deref_const() {
+  int3 a = 0;
+  thread int3* const p = a;
+  int b = p[0];
+  p[0] = 42;
+}
+void deref_let() {
+  int3 a = 0;
+  thread int3* const p = a;
+  int const i = 0;
+  int b = p[i];
+  p[0] = 42;
+}
+void no_deref_let() {
+  int3 a = 0;
+  thread int3* const p = a;
+  int const i = 0;
+  int b = p[i];
+  p[0] = 42;
+}
+void deref_var() {
+  int3 a = 0;
+  thread int3* const p = a;
+  int i = 0;
+  int b = p[i];
+  p[0] = 42;
+}
+void no_deref_var() {
+  int3 a = 0;
+  thread int3* const p = a;
+  int const i = 0;
+  int b = p[i];
+  p[0] = 42;
+}
+kernel void tint_symbol() {
+  deref_const();
+  no_deref_const();
+  deref_let();
+  no_deref_let();
+  deref_var();
+  no_deref_var();
+}
+program_source:6:22: error: cannot initialize a variable of type 'int3 *const' with an lvalue of type 'int3' (vector of 3 'int' values)
+  thread int3* const p = a;
+                     ^   ~
+program_source:7:7: error: cannot initialize a variable of type 'int' with an lvalue of type 'int3' (vector of 3 'int' values)
+  int b = p[0];
+      ^   ~~~~
+program_source:12:22: error: cannot initialize a variable of type 'int3 *const' with an lvalue of type 'int3' (vector of 3 'int' values)
+  thread int3* const p = a;
+                     ^   ~
+program_source:13:7: error: cannot initialize a variable of type 'int' with an lvalue of type 'int3' (vector of 3 'int' values)
+  int b = p[0];
+      ^   ~~~~
+program_source:18:22: error: cannot initialize a variable of type 'int3 *const' with an lvalue of type 'int3' (vector of 3 'int' values)
+  thread int3* const p = a;
+                     ^   ~
+program_source:20:7: error: cannot initialize a variable of type 'int' with an lvalue of type 'int3' (vector of 3 'int' values)
+  int b = p[i];
+      ^   ~~~~
+program_source:25:22: error: cannot initialize a variable of type 'int3 *const' with an lvalue of type 'int3' (vector of 3 'int' values)
+  thread int3* const p = a;
+                     ^   ~
+program_source:27:7: error: cannot initialize a variable of type 'int' with an lvalue of type 'int3' (vector of 3 'int' values)
+  int b = p[i];
+      ^   ~~~~
+program_source:32:22: error: cannot initialize a variable of type 'int3 *const' with an lvalue of type 'int3' (vector of 3 'int' values)
+  thread int3* const p = a;
+                     ^   ~
+program_source:34:7: error: cannot initialize a variable of type 'int' with an lvalue of type 'int3' (vector of 3 'int' values)
+  int b = p[i];
+      ^   ~~~~
+program_source:39:22: error: cannot initialize a variable of type 'int3 *const' with an lvalue of type 'int3' (vector of 3 'int' values)
+  thread int3* const p = a;
+                     ^   ~
+program_source:41:7: error: cannot initialize a variable of type 'int' with an lvalue of type 'int3' (vector of 3 'int' values)
+  int b = p[i];
+      ^   ~~~~
+
diff --git a/test/tint/ptr_sugar/vector_member.wgsl.expected.ir.msl b/test/tint/ptr_sugar/vector_member.wgsl.expected.ir.msl
new file mode 100644
index 0000000..4039c66
--- /dev/null
+++ b/test/tint/ptr_sugar/vector_member.wgsl.expected.ir.msl
@@ -0,0 +1,34 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+void deref() {
+  int3 a = 0;
+  thread int3* const p = a;
+  int b = p[0u];
+  p[0u] = 42;
+}
+void no_deref() {
+  int3 a = 0;
+  thread int3* const p = a;
+  int b = p[0u];
+  p[0u] = 42;
+}
+kernel void tint_symbol() {
+  deref();
+  no_deref();
+}
+program_source:6:22: error: cannot initialize a variable of type 'int3 *const' with an lvalue of type 'int3' (vector of 3 'int' values)
+  thread int3* const p = a;
+                     ^   ~
+program_source:7:7: error: cannot initialize a variable of type 'int' with an lvalue of type 'int3' (vector of 3 'int' values)
+  int b = p[0u];
+      ^   ~~~~~
+program_source:12:22: error: cannot initialize a variable of type 'int3 *const' with an lvalue of type 'int3' (vector of 3 'int' values)
+  thread int3* const p = a;
+                     ^   ~
+program_source:13:7: error: cannot initialize a variable of type 'int' with an lvalue of type 'int3' (vector of 3 'int' values)
+  int b = p[0u];
+      ^   ~~~~~
+
diff --git a/test/tint/samples/compute_boids.wgsl.expected.ir.msl b/test/tint/samples/compute_boids.wgsl.expected.ir.msl
index 413bbcb..6a0272f 100644
--- a/test/tint/samples/compute_boids.wgsl.expected.ir.msl
+++ b/test/tint/samples/compute_boids.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: SimParams = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: SimParams = struct @align(4) {
   deltaT:f32 @offset(0)
   rule1Distance:f32 @offset(4)
   rule2Distance:f32 @offset(8)
@@ -19,14 +19,14 @@
   particles:array<Particle, 5> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %params:ptr<uniform, SimParams, read> = var @binding_point(0, 0)
   %particlesA:ptr<storage, Particles, read_write> = var @binding_point(0, 1)
   %particlesB:ptr<storage, Particles, read_write> = var @binding_point(0, 2)
 }
 
-%vert_main = @vertex func(%a_particlePos:vec2<f32> [@location(0)], %a_particleVel:vec2<f32> [@location(1)], %a_pos:vec2<f32> [@location(2)]):vec4<f32> [@position] -> %b2 {
-  %b2 = block {
+%vert_main = @vertex func(%a_particlePos:vec2<f32> [@location(0)], %a_particleVel:vec2<f32> [@location(1)], %a_pos:vec2<f32> [@location(2)]):vec4<f32> [@position] {
+  $B2: {
     %8:f32 = access %a_particleVel, 0u
     %9:f32 = access %a_particleVel, 1u
     %10:f32 = atan2 %8, %9
@@ -36,52 +36,55 @@
     %14:f32 = load %angle
     %15:f32 = cos %14
     %16:f32 = mul %13, %15
-    %17:f32 = access %a_pos, 1u
-    %18:f32 = load %angle
-    %19:f32 = sin %18
-    %20:f32 = mul %17, %19
-    %21:f32 = sub %16, %20
-    %22:f32 = access %a_pos, 0u
-    %23:f32 = load %angle
-    %24:f32 = sin %23
-    %25:f32 = mul %22, %24
-    %26:f32 = access %a_pos, 1u
-    %27:f32 = load %angle
-    %28:f32 = cos %27
-    %29:f32 = mul %26, %28
-    %30:f32 = add %25, %29
-    %31:vec2<f32> = construct %21, %30
-    %pos:ptr<function, vec2<f32>, read_write> = var, %31
-    %33:vec2<f32> = load %pos
-    %34:vec2<f32> = add %33, %a_particlePos
-    %35:vec4<f32> = construct %34, 0.0f, 1.0f
-    ret %35
+    %17:f32 = let %16
+    %18:f32 = access %a_pos, 1u
+    %19:f32 = load %angle
+    %20:f32 = sin %19
+    %21:f32 = mul %18, %20
+    %22:f32 = sub %17, %21
+    %23:f32 = let %22
+    %24:f32 = access %a_pos, 0u
+    %25:f32 = load %angle
+    %26:f32 = sin %25
+    %27:f32 = mul %24, %26
+    %28:f32 = let %27
+    %29:f32 = access %a_pos, 1u
+    %30:f32 = load %angle
+    %31:f32 = cos %30
+    %32:f32 = mul %29, %31
+    %33:f32 = add %28, %32
+    %34:vec2<f32> = construct %23, %33
+    %pos:ptr<function, vec2<f32>, read_write> = var, %34
+    %36:vec2<f32> = load %pos
+    %37:vec2<f32> = add %36, %a_particlePos
+    %38:vec4<f32> = construct %37, 0.0f, 1.0f
+    ret %38
   }
 }
-%frag_main = @fragment func():vec4<f32> [@location(0)] -> %b3 {
-  %b3 = block {
+%frag_main = @fragment func():vec4<f32> [@location(0)] {
+  $B3: {
     ret vec4<f32>(1.0f)
   }
 }
-%comp_main = @compute @workgroup_size(1, 1, 1) func(%gl_GlobalInvocationID:vec3<u32> [@global_invocation_id]):void -> %b4 {
-  %b4 = block {
-    %39:u32 = access %gl_GlobalInvocationID, 0u
-    %index:ptr<function, u32, read_write> = var, %39
-    %41:u32 = load %index
-    %42:bool = gte %41, 5u
-    if %42 [t: %b5] {  # if_1
-      %b5 = block {  # true
+%comp_main = @compute @workgroup_size(1, 1, 1) func(%gl_GlobalInvocationID:vec3<u32> [@global_invocation_id]):void {
+  $B4: {
+    %42:u32 = access %gl_GlobalInvocationID, 0u
+    %index:ptr<function, u32, read_write> = var, %42
+    %44:u32 = load %index
+    %45:bool = gte %44, 5u
+    if %45 [t: $B5] {  # if_1
+      $B5: {  # true
         ret
       }
     }
-    %43:u32 = load %index
-    %44:ptr<storage, vec2<f32>, read_write> = access %particlesA, 0u, %43, 0u
-    %45:vec2<f32> = load %44
-    %vPos:ptr<function, vec2<f32>, read_write> = var, %45
-    %47:u32 = load %index
-    %48:ptr<storage, vec2<f32>, read_write> = access %particlesA, 0u, %47, 1u
-    %49:vec2<f32> = load %48
-    %vVel:ptr<function, vec2<f32>, read_write> = var, %49
+    %46:u32 = load %index
+    %47:ptr<storage, vec2<f32>, read_write> = access %particlesA, 0u, %46, 0u
+    %48:vec2<f32> = load %47
+    %vPos:ptr<function, vec2<f32>, read_write> = var, %48
+    %50:u32 = load %index
+    %51:ptr<storage, vec2<f32>, read_write> = access %particlesA, 0u, %50, 1u
+    %52:vec2<f32> = load %51
+    %vVel:ptr<function, vec2<f32>, read_write> = var, %52
     %cMass:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(0.0f)
     %cVel:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(0.0f)
     %colVel:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(0.0f)
@@ -89,205 +92,210 @@
     %cVelCount:ptr<function, i32, read_write> = var, 0i
     %pos_1:ptr<function, vec2<f32>, read_write> = var  # %pos_1: 'pos'
     %vel:ptr<function, vec2<f32>, read_write> = var
-    loop [i: %b6, b: %b7, c: %b8] {  # loop_1
-      %b6 = block {  # initializer
+    loop [i: $B6, b: $B7, c: $B8] {  # loop_1
+      $B6: {  # initializer
         %i:ptr<function, u32, read_write> = var, 0u
-        next_iteration %b7
+        next_iteration  # -> $B7
       }
-      %b7 = block {  # body
-        %59:u32 = load %i
-        %60:bool = lt %59, 5u
-        if %60 [t: %b9, f: %b10] {  # if_2
-          %b9 = block {  # true
+      $B7: {  # body
+        %62:u32 = load %i
+        %63:bool = lt %62, 5u
+        if %63 [t: $B9, f: $B10] {  # if_2
+          $B9: {  # true
             exit_if  # if_2
           }
-          %b10 = block {  # false
+          $B10: {  # false
             exit_loop  # loop_1
           }
         }
-        %61:u32 = load %i
-        %62:u32 = load %index
-        %63:bool = eq %61, %62
-        if %63 [t: %b11] {  # if_3
-          %b11 = block {  # true
-            continue %b8
+        %64:u32 = load %i
+        %65:u32 = load %index
+        %66:bool = eq %64, %65
+        if %66 [t: $B11] {  # if_3
+          $B11: {  # true
+            continue  # -> $B8
           }
         }
-        %64:u32 = load %i
-        %65:ptr<storage, vec2<f32>, read_write> = access %particlesA, 0u, %64, 0u
-        %66:vec2<f32> = load %65
-        %67:vec2<f32> = swizzle %66, xy
-        store %pos_1, %67
-        %68:u32 = load %i
-        %69:ptr<storage, vec2<f32>, read_write> = access %particlesA, 0u, %68, 1u
-        %70:vec2<f32> = load %69
-        %71:vec2<f32> = swizzle %70, xy
-        store %vel, %71
-        %72:vec2<f32> = load %pos_1
-        %73:vec2<f32> = load %vPos
-        %74:f32 = distance %72, %73
-        %75:ptr<uniform, f32, read> = access %params, 1u
-        %76:f32 = load %75
-        %77:bool = lt %74, %76
-        if %77 [t: %b12] {  # if_4
-          %b12 = block {  # true
-            %78:vec2<f32> = load %cMass
-            %79:vec2<f32> = load %pos_1
-            %80:vec2<f32> = add %78, %79
-            store %cMass, %80
-            %81:i32 = load %cMassCount
-            %82:i32 = add %81, 1i
-            store %cMassCount, %82
+        %67:u32 = load %i
+        %68:ptr<storage, vec2<f32>, read_write> = access %particlesA, 0u, %67, 0u
+        %69:vec2<f32> = load %68
+        %70:vec2<f32> = swizzle %69, xy
+        store %pos_1, %70
+        %71:u32 = load %i
+        %72:ptr<storage, vec2<f32>, read_write> = access %particlesA, 0u, %71, 1u
+        %73:vec2<f32> = load %72
+        %74:vec2<f32> = swizzle %73, xy
+        store %vel, %74
+        %75:vec2<f32> = load %pos_1
+        %76:vec2<f32> = load %vPos
+        %77:f32 = distance %75, %76
+        %78:ptr<uniform, f32, read> = access %params, 1u
+        %79:f32 = load %78
+        %80:bool = lt %77, %79
+        if %80 [t: $B12] {  # if_4
+          $B12: {  # true
+            %81:vec2<f32> = load %cMass
+            %82:vec2<f32> = load %pos_1
+            %83:vec2<f32> = add %81, %82
+            store %cMass, %83
+            %84:i32 = load %cMassCount
+            %85:i32 = add %84, 1i
+            store %cMassCount, %85
             exit_if  # if_4
           }
         }
-        %83:vec2<f32> = load %pos_1
-        %84:vec2<f32> = load %vPos
-        %85:f32 = distance %83, %84
-        %86:ptr<uniform, f32, read> = access %params, 2u
-        %87:f32 = load %86
-        %88:bool = lt %85, %87
-        if %88 [t: %b13] {  # if_5
-          %b13 = block {  # true
-            %89:vec2<f32> = load %colVel
-            %90:vec2<f32> = load %pos_1
-            %91:vec2<f32> = load %vPos
-            %92:vec2<f32> = sub %90, %91
-            %93:vec2<f32> = sub %89, %92
-            store %colVel, %93
+        %86:vec2<f32> = load %pos_1
+        %87:vec2<f32> = load %vPos
+        %88:f32 = distance %86, %87
+        %89:ptr<uniform, f32, read> = access %params, 2u
+        %90:f32 = load %89
+        %91:bool = lt %88, %90
+        if %91 [t: $B13] {  # if_5
+          $B13: {  # true
+            %92:vec2<f32> = load %colVel
+            %93:vec2<f32> = load %pos_1
+            %94:vec2<f32> = load %vPos
+            %95:vec2<f32> = sub %93, %94
+            %96:vec2<f32> = sub %92, %95
+            store %colVel, %96
             exit_if  # if_5
           }
         }
-        %94:vec2<f32> = load %pos_1
-        %95:vec2<f32> = load %vPos
-        %96:f32 = distance %94, %95
-        %97:ptr<uniform, f32, read> = access %params, 3u
-        %98:f32 = load %97
-        %99:bool = lt %96, %98
-        if %99 [t: %b14] {  # if_6
-          %b14 = block {  # true
-            %100:vec2<f32> = load %cVel
-            %101:vec2<f32> = load %vel
-            %102:vec2<f32> = add %100, %101
-            store %cVel, %102
-            %103:i32 = load %cVelCount
-            %104:i32 = add %103, 1i
-            store %cVelCount, %104
+        %97:vec2<f32> = load %pos_1
+        %98:vec2<f32> = load %vPos
+        %99:f32 = distance %97, %98
+        %100:ptr<uniform, f32, read> = access %params, 3u
+        %101:f32 = load %100
+        %102:bool = lt %99, %101
+        if %102 [t: $B14] {  # if_6
+          $B14: {  # true
+            %103:vec2<f32> = load %cVel
+            %104:vec2<f32> = load %vel
+            %105:vec2<f32> = add %103, %104
+            store %cVel, %105
+            %106:i32 = load %cVelCount
+            %107:i32 = add %106, 1i
+            store %cVelCount, %107
             exit_if  # if_6
           }
         }
-        continue %b8
+        continue  # -> $B8
       }
-      %b8 = block {  # continuing
-        %105:u32 = load %i
-        %106:u32 = add %105, 1u
-        store %i, %106
-        next_iteration %b7
+      $B8: {  # continuing
+        %108:u32 = load %i
+        %109:u32 = add %108, 1u
+        store %i, %109
+        next_iteration  # -> $B7
       }
     }
-    %107:i32 = load %cMassCount
-    %108:bool = gt %107, 0i
-    if %108 [t: %b15] {  # if_7
-      %b15 = block {  # true
-        %109:vec2<f32> = load %cMass
-        %110:i32 = load %cMassCount
-        %111:f32 = convert %110
-        %112:i32 = load %cMassCount
-        %113:f32 = convert %112
-        %114:vec2<f32> = construct %111, %113
-        %115:vec2<f32> = div %109, %114
-        %116:vec2<f32> = load %vPos
-        %117:vec2<f32> = sub %115, %116
-        store %cMass, %117
+    %110:i32 = load %cMassCount
+    %111:bool = gt %110, 0i
+    if %111 [t: $B15] {  # if_7
+      $B15: {  # true
+        %112:vec2<f32> = load %cMass
+        %113:vec2<f32> = let %112
+        %114:i32 = load %cMassCount
+        %115:f32 = convert %114
+        %116:f32 = let %115
+        %117:i32 = load %cMassCount
+        %118:f32 = convert %117
+        %119:vec2<f32> = construct %116, %118
+        %120:vec2<f32> = div %113, %119
+        %121:vec2<f32> = load %vPos
+        %122:vec2<f32> = sub %120, %121
+        store %cMass, %122
         exit_if  # if_7
       }
     }
-    %118:i32 = load %cVelCount
-    %119:bool = gt %118, 0i
-    if %119 [t: %b16] {  # if_8
-      %b16 = block {  # true
-        %120:vec2<f32> = load %cVel
-        %121:i32 = load %cVelCount
-        %122:f32 = convert %121
-        %123:i32 = load %cVelCount
-        %124:f32 = convert %123
-        %125:vec2<f32> = construct %122, %124
-        %126:vec2<f32> = div %120, %125
-        store %cVel, %126
+    %123:i32 = load %cVelCount
+    %124:bool = gt %123, 0i
+    if %124 [t: $B16] {  # if_8
+      $B16: {  # true
+        %125:vec2<f32> = load %cVel
+        %126:vec2<f32> = let %125
+        %127:i32 = load %cVelCount
+        %128:f32 = convert %127
+        %129:f32 = let %128
+        %130:i32 = load %cVelCount
+        %131:f32 = convert %130
+        %132:vec2<f32> = construct %129, %131
+        %133:vec2<f32> = div %126, %132
+        store %cVel, %133
         exit_if  # if_8
       }
     }
-    %127:vec2<f32> = load %vVel
-    %128:vec2<f32> = load %cMass
-    %129:ptr<uniform, f32, read> = access %params, 4u
-    %130:f32 = load %129
-    %131:vec2<f32> = mul %128, %130
-    %132:vec2<f32> = add %127, %131
-    %133:vec2<f32> = load %colVel
-    %134:ptr<uniform, f32, read> = access %params, 5u
-    %135:f32 = load %134
-    %136:vec2<f32> = mul %133, %135
-    %137:vec2<f32> = add %132, %136
-    %138:vec2<f32> = load %cVel
-    %139:ptr<uniform, f32, read> = access %params, 6u
-    %140:f32 = load %139
-    %141:vec2<f32> = mul %138, %140
-    %142:vec2<f32> = add %137, %141
-    store %vVel, %142
-    %143:vec2<f32> = load %vVel
-    %144:vec2<f32> = normalize %143
-    %145:vec2<f32> = load %vVel
-    %146:f32 = length %145
-    %147:f32 = clamp %146, 0.0f, 0.10000000149011611938f
-    %148:vec2<f32> = mul %144, %147
-    store %vVel, %148
-    %149:vec2<f32> = load %vPos
+    %134:vec2<f32> = load %vVel
+    %135:vec2<f32> = load %cMass
+    %136:ptr<uniform, f32, read> = access %params, 4u
+    %137:f32 = load %136
+    %138:vec2<f32> = mul %135, %137
+    %139:vec2<f32> = add %134, %138
+    %140:vec2<f32> = load %colVel
+    %141:ptr<uniform, f32, read> = access %params, 5u
+    %142:f32 = load %141
+    %143:vec2<f32> = mul %140, %142
+    %144:vec2<f32> = add %139, %143
+    %145:vec2<f32> = load %cVel
+    %146:ptr<uniform, f32, read> = access %params, 6u
+    %147:f32 = load %146
+    %148:vec2<f32> = mul %145, %147
+    %149:vec2<f32> = add %144, %148
+    store %vVel, %149
     %150:vec2<f32> = load %vVel
-    %151:ptr<uniform, f32, read> = access %params, 0u
-    %152:f32 = load %151
-    %153:vec2<f32> = mul %150, %152
-    %154:vec2<f32> = add %149, %153
-    store %vPos, %154
-    %155:f32 = load_vector_element %vPos, 0u
-    %156:bool = lt %155, -1.0f
-    if %156 [t: %b17] {  # if_9
-      %b17 = block {  # true
+    %151:vec2<f32> = normalize %150
+    %152:vec2<f32> = let %151
+    %153:vec2<f32> = load %vVel
+    %154:f32 = length %153
+    %155:f32 = clamp %154, 0.0f, 0.10000000149011611938f
+    %156:vec2<f32> = mul %152, %155
+    store %vVel, %156
+    %157:vec2<f32> = load %vPos
+    %158:vec2<f32> = load %vVel
+    %159:ptr<uniform, f32, read> = access %params, 0u
+    %160:f32 = load %159
+    %161:vec2<f32> = mul %158, %160
+    %162:vec2<f32> = add %157, %161
+    store %vPos, %162
+    %163:f32 = load_vector_element %vPos, 0u
+    %164:bool = lt %163, -1.0f
+    if %164 [t: $B17] {  # if_9
+      $B17: {  # true
         store_vector_element %vPos, 0u, 1.0f
         exit_if  # if_9
       }
     }
-    %157:f32 = load_vector_element %vPos, 0u
-    %158:bool = gt %157, 1.0f
-    if %158 [t: %b18] {  # if_10
-      %b18 = block {  # true
+    %165:f32 = load_vector_element %vPos, 0u
+    %166:bool = gt %165, 1.0f
+    if %166 [t: $B18] {  # if_10
+      $B18: {  # true
         store_vector_element %vPos, 0u, -1.0f
         exit_if  # if_10
       }
     }
-    %159:f32 = load_vector_element %vPos, 1u
-    %160:bool = lt %159, -1.0f
-    if %160 [t: %b19] {  # if_11
-      %b19 = block {  # true
+    %167:f32 = load_vector_element %vPos, 1u
+    %168:bool = lt %167, -1.0f
+    if %168 [t: $B19] {  # if_11
+      $B19: {  # true
         store_vector_element %vPos, 1u, 1.0f
         exit_if  # if_11
       }
     }
-    %161:f32 = load_vector_element %vPos, 1u
-    %162:bool = gt %161, 1.0f
-    if %162 [t: %b20] {  # if_12
-      %b20 = block {  # true
+    %169:f32 = load_vector_element %vPos, 1u
+    %170:bool = gt %169, 1.0f
+    if %170 [t: $B20] {  # if_12
+      $B20: {  # true
         store_vector_element %vPos, 1u, -1.0f
         exit_if  # if_12
       }
     }
-    %163:u32 = load %index
-    %164:ptr<storage, vec2<f32>, read_write> = access %particlesB, 0u, %163, 0u
-    %165:vec2<f32> = load %vPos
-    store %164, %165
-    %166:u32 = load %index
-    %167:ptr<storage, vec2<f32>, read_write> = access %particlesB, 0u, %166, 1u
-    %168:vec2<f32> = load %vVel
-    store %167, %168
+    %171:u32 = load %index
+    %172:ptr<storage, vec2<f32>, read_write> = access %particlesB, 0u, %171, 0u
+    %173:vec2<f32> = load %vPos
+    store %172, %173
+    %174:u32 = load %index
+    %175:ptr<storage, vec2<f32>, read_write> = access %particlesB, 0u, %174, 1u
+    %176:vec2<f32> = load %vVel
+    store %175, %176
     ret
   }
 }
diff --git a/test/tint/samples/cube.wgsl.expected.ir.msl b/test/tint/samples/cube.wgsl.expected.ir.msl
index 192894b..c869a00 100644
--- a/test/tint/samples/cube.wgsl.expected.ir.msl
+++ b/test/tint/samples/cube.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Uniforms = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Uniforms = struct @align(16) {
   modelViewProjectionMatrix:mat4x4<f32> @offset(0)
 }
 
@@ -14,12 +14,12 @@
   color:vec4<f32> @offset(16), @location(1)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %uniforms:ptr<uniform, Uniforms, read> = var @binding_point(0, 0)
 }
 
-%vtx_main = @vertex func(%input:VertexInput):VertexOutput -> %b2 {
-  %b2 = block {
+%vtx_main = @vertex func(%input:VertexInput):VertexOutput {
+  $B2: {
     %output:ptr<function, VertexOutput, read_write> = var
     %5:ptr<function, vec4<f32>, read_write> = access %output, 1u
     %6:ptr<uniform, mat4x4<f32>, read> = access %uniforms, 0u
@@ -34,8 +34,8 @@
     ret %12
   }
 }
-%frag_main = @fragment func(%fragColor:vec4<f32> [@location(0)]):vec4<f32> [@location(0)] -> %b3 {
-  %b3 = block {
+%frag_main = @fragment func(%fragColor:vec4<f32> [@location(0)]):vec4<f32> [@location(0)] {
+  $B3: {
     ret %fragColor
   }
 }
diff --git a/test/tint/samples/simple_vertex.spvasm.expected.ir.msl b/test/tint/samples/simple_vertex.spvasm.expected.ir.msl
index efdd3b1..7dba87b 100644
--- a/test/tint/samples/simple_vertex.spvasm.expected.ir.msl
+++ b/test/tint/samples/simple_vertex.spvasm.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct main_out {
+  float4 gl_Position [[position]];
+};
+
+thread float4 gl_Position = 0.0f;
+void main_1() {
+  gl_Position = float4(0.0f);
+}
+vertex main_out tint_symbol() {
+  main_1();
+  return {.gl_Position=gl_Position};
+}
+program_source:7:15: error: program scope variable must reside in constant address space
+thread float4 gl_Position = 0.0f;
+              ^
+
diff --git a/test/tint/samples/triangle.wgsl.expected.ir.msl b/test/tint/samples/triangle.wgsl.expected.ir.msl
index 28251dc..6f0c683 100644
--- a/test/tint/samples/triangle.wgsl.expected.ir.msl
+++ b/test/tint/samples/triangle.wgsl.expected.ir.msl
@@ -1,9 +1,27 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#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];
+};
+
+
+vertex float4 vtx_main(uint VertexIndex [[]]) {
+  return float4(tint_array<float2, 3>{float2(0.0f, 0.5f), float2(-0.5f), float2(0.5f, -0.5f)}[VertexIndex], 0.0f, 1.0f);
+}
+fragment float4 frag_main() {
+  return float4(1.0f, 0.0f, 0.0f, 1.0f);
+}
+program_source:16:24: error: invalid type 'uint' (aka 'unsigned int') for input declaration in a vertex function
+vertex float4 vtx_main(uint VertexIndex [[]]) {
+                       ^~~~~~~~~~~~~~~~
+
diff --git a/test/tint/shadowing/alias/let.wgsl.expected.ir.msl b/test/tint/shadowing/alias/let.wgsl.expected.ir.msl
index 8ccc0c2..8381a90 100644
--- a/test/tint/shadowing/alias/let.wgsl.expected.ir.msl
+++ b/test/tint/shadowing/alias/let.wgsl.expected.ir.msl
@@ -9,3 +9,16 @@
   int const a = 0;
   int const b = a;
 }
+program_source:7:13: error: redefinition of 'a'
+  int const a = 0;
+            ^
+program_source:5:13: note: previous definition is here
+  int const a = 0;
+            ^
+program_source:8:13: error: redefinition of 'b'
+  int const b = a;
+            ^
+program_source:6:13: note: previous definition is here
+  int const b = a;
+            ^
+
diff --git a/test/tint/shadowing/alias/var.wgsl.expected.ir.msl b/test/tint/shadowing/alias/var.wgsl.expected.ir.msl
index d76e035..935ca6c 100644
--- a/test/tint/shadowing/alias/var.wgsl.expected.ir.msl
+++ b/test/tint/shadowing/alias/var.wgsl.expected.ir.msl
@@ -9,3 +9,16 @@
   int a = 0;
   int b = a;
 }
+program_source:7:7: error: redefinition of 'a'
+  int a = 0;
+      ^
+program_source:5:7: note: previous definition is here
+  int a = 0;
+      ^
+program_source:8:7: error: redefinition of 'b'
+  int b = a;
+      ^
+program_source:6:7: note: previous definition is here
+  int b = a;
+      ^
+
diff --git a/test/tint/shadowing/function/let.wgsl.expected.ir.msl b/test/tint/shadowing/function/let.wgsl.expected.ir.msl
index c523995..3c9002b 100644
--- a/test/tint/shadowing/function/let.wgsl.expected.ir.msl
+++ b/test/tint/shadowing/function/let.wgsl.expected.ir.msl
@@ -9,3 +9,16 @@
   int const a = 1;
   int const b = a;
 }
+program_source:7:13: error: redefinition of 'a' with a different type: 'const int' vs 'int'
+  int const a = 1;
+            ^
+program_source:5:7: note: previous definition is here
+  int a = 1;
+      ^
+program_source:8:13: error: redefinition of 'b' with a different type: 'const int' vs 'int'
+  int const b = a;
+            ^
+program_source:6:7: note: previous definition is here
+  int b = a;
+      ^
+
diff --git a/test/tint/shadowing/function/var.wgsl.expected.ir.msl b/test/tint/shadowing/function/var.wgsl.expected.ir.msl
index 3def775..efcece0 100644
--- a/test/tint/shadowing/function/var.wgsl.expected.ir.msl
+++ b/test/tint/shadowing/function/var.wgsl.expected.ir.msl
@@ -12,3 +12,48 @@
   a a = a{};
   a b = a;
 }
+program_source:8:10: error: expected ';' at end of declaration
+  a a = a{};
+         ^
+         ;
+program_source:9:3: error: must use 'struct' tag to refer to type 'a' in this scope
+  a b = a;
+  ^
+  struct 
+program_source:8:5: note: struct 'a' is hidden by a non-type declaration of 'a' here
+  a a = a{};
+    ^
+program_source:10:3: error: must use 'struct' tag to refer to type 'a' in this scope
+  a a = a{};
+  ^
+  struct 
+program_source:8:5: note: struct 'a' is hidden by a non-type declaration of 'a' here
+  a a = a{};
+    ^
+program_source:10:5: error: redefinition of 'a'
+  a a = a{};
+    ^
+program_source:8:5: note: previous definition is here
+  a a = a{};
+    ^
+program_source:10:10: error: expected ';' at end of declaration
+  a a = a{};
+         ^
+         ;
+program_source:11:3: error: must use 'struct' tag to refer to type 'a' in this scope
+  a b = a;
+  ^
+  struct 
+program_source:8:5: note: struct 'a' is hidden by a non-type declaration of 'a' here
+  a a = a{};
+    ^
+program_source:11:5: error: redefinition of 'b'
+  a b = a;
+    ^
+program_source:9:5: note: previous definition is here
+  a b = a;
+    ^
+program_source:8:9: warning: variable 'a' is uninitialized when used within its own initialization [-Wuninitialized]
+  a a = a{};
+    ~   ^
+
diff --git a/test/tint/shadowing/param/function.wgsl.expected.ir.msl b/test/tint/shadowing/param/function.wgsl.expected.ir.msl
index 567c382..6994929 100644
--- a/test/tint/shadowing/param/function.wgsl.expected.ir.msl
+++ b/test/tint/shadowing/param/function.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:270 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+void a(int a) {
+  int a = a;
+  int b = a;
+}
+program_source:5:7: error: redefinition of 'a'
+  int a = a;
+      ^
+program_source:4:12: note: previous definition is here
+void a(int a) {
+           ^
+
diff --git a/test/tint/shadowing/param/let.wgsl.expected.ir.msl b/test/tint/shadowing/param/let.wgsl.expected.ir.msl
index 567c382..2a218ea 100644
--- a/test/tint/shadowing/param/let.wgsl.expected.ir.msl
+++ b/test/tint/shadowing/param/let.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:270 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+void f(int a) {
+  int const a = a;
+  int const b = a;
+}
+program_source:5:13: error: redefinition of 'a' with a different type: 'const int' vs 'int'
+  int const a = a;
+            ^
+program_source:4:12: note: previous definition is here
+void f(int a) {
+           ^
+
diff --git a/test/tint/shadowing/param/var.wgsl.expected.ir.msl b/test/tint/shadowing/param/var.wgsl.expected.ir.msl
index 567c382..af03ffc 100644
--- a/test/tint/shadowing/param/var.wgsl.expected.ir.msl
+++ b/test/tint/shadowing/param/var.wgsl.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:270 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+void f(int a) {
+  int a = a;
+  int b = a;
+}
+program_source:5:7: error: redefinition of 'a'
+  int a = a;
+      ^
+program_source:4:12: note: previous definition is here
+void f(int a) {
+           ^
+
diff --git a/test/tint/shadowing/short_names/renamer/function.wgsl.expected.ir.msl b/test/tint/shadowing/short_names/renamer/function.wgsl.expected.ir.msl
index 47c8fbc..27db5c1 100644
--- a/test/tint/shadowing/short_names/renamer/function.wgsl.expected.ir.msl
+++ b/test/tint/shadowing/short_names/renamer/function.wgsl.expected.ir.msl
@@ -1,9 +1,21 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+int vec4f() {
+  return 0;
+}
+float vec2f(int i) {
+  return float(i);
+}
+bool vec2i(float f) {
+  return bool(f);
+}
+vertex float4 tint_symbol(uint VertexIndex [[]]) {
+  return select(float4(0.0f), float4(1.0f), vec2i(vec2f(vec4f())));
+}
+program_source:13:27: error: invalid type 'uint' (aka 'unsigned int') for input declaration in a vertex function
+vertex float4 tint_symbol(uint VertexIndex [[]]) {
+                          ^~~~~~~~~~~~~~~~
+
diff --git a/test/tint/shadowing/short_names/renamer/renamer.wgsl.expected.ir.msl b/test/tint/shadowing/short_names/renamer/renamer.wgsl.expected.ir.msl
index 7be8f30..378203b 100644
--- a/test/tint/shadowing/short_names/renamer/renamer.wgsl.expected.ir.msl
+++ b/test/tint/shadowing/short_names/renamer/renamer.wgsl.expected.ir.msl
@@ -3,6 +3,10 @@
 #include <metal_stdlib>
 using namespace metal;
 
-float4 tint_symbol() {
+vertex float4 tint_symbol(uint VertexIndex [[]]) {
   return float4(0.0f, 0.0f, 0.0f, 1.0f);
 }
+program_source:4:27: error: invalid type 'uint' (aka 'unsigned int') for input declaration in a vertex function
+vertex float4 tint_symbol(uint VertexIndex [[]]) {
+                          ^~~~~~~~~~~~~~~~
+
diff --git a/test/tint/shadowing/short_names/renamer/type.wgsl.expected.ir.msl b/test/tint/shadowing/short_names/renamer/type.wgsl.expected.ir.msl
index 28251dc..4767398 100644
--- a/test/tint/shadowing/short_names/renamer/type.wgsl.expected.ir.msl
+++ b/test/tint/shadowing/short_names/renamer/type.wgsl.expected.ir.msl
@@ -1,9 +1,18 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct vec4f {
+  int i;
+};
+
+vertex float4 tint_symbol(uint VertexIndex [[]]) {
+  vec4f const s = vec4f{.i=1};
+  float const f = float(s.i);
+  bool const b = bool(f);
+  return select(float4(0.0f), float4(1.0f), b);
+}
+program_source:7:27: error: invalid type 'uint' (aka 'unsigned int') for input declaration in a vertex function
+vertex float4 tint_symbol(uint VertexIndex [[]]) {
+                          ^~~~~~~~~~~~~~~~
+
diff --git a/test/tint/shadowing/struct/let.wgsl.expected.ir.msl b/test/tint/shadowing/struct/let.wgsl.expected.ir.msl
index 2660268..b9a8650 100644
--- a/test/tint/shadowing/struct/let.wgsl.expected.ir.msl
+++ b/test/tint/shadowing/struct/let.wgsl.expected.ir.msl
@@ -12,3 +12,48 @@
   a const a = a{};
   a const b = a;
 }
+program_source:8:16: error: expected ';' at end of declaration
+  a const a = a{};
+               ^
+               ;
+program_source:9:4: error: expected ';' after expression
+  a const b = a;
+   ^
+   ;
+program_source:9:11: error: C++ requires a type specifier for all declarations
+  a const b = a;
+    ~~~~~ ^
+program_source:10:4: error: expected ';' after expression
+  a const a = a{};
+   ^
+   ;
+program_source:10:11: error: must use 'struct' tag to refer to type 'a' in this scope
+  a const a = a{};
+          ^
+          struct 
+program_source:8:11: note: struct 'a' is hidden by a non-type declaration of 'a' here
+  a const a = a{};
+          ^
+program_source:10:13: error: expected unqualified-id
+  a const a = a{};
+            ^
+program_source:11:4: error: expected ';' after expression
+  a const b = a;
+   ^
+   ;
+program_source:11:11: error: C++ requires a type specifier for all declarations
+  a const b = a;
+    ~~~~~ ^
+program_source:8:15: warning: variable 'a' is uninitialized when used within its own initialization [-Wuninitialized]
+  a const a = a{};
+          ~   ^
+program_source:9:3: warning: expression result unused [-Wunused-value]
+  a const b = a;
+  ^
+program_source:10:3: warning: expression result unused [-Wunused-value]
+  a const a = a{};
+  ^
+program_source:11:3: warning: expression result unused [-Wunused-value]
+  a const b = a;
+  ^
+
diff --git a/test/tint/shadowing/struct/param.wgsl.expected.ir.msl b/test/tint/shadowing/struct/param.wgsl.expected.ir.msl
index 567c382..30d3088 100644
--- a/test/tint/shadowing/struct/param.wgsl.expected.ir.msl
+++ b/test/tint/shadowing/struct/param.wgsl.expected.ir.msl
@@ -1,9 +1,22 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:270 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct a {
+  int a;
+};
+
+void f(a a) {
+  a const b = a;
+}
+program_source:8:4: error: expected ';' after expression
+  a const b = a;
+   ^
+   ;
+program_source:8:11: error: C++ requires a type specifier for all declarations
+  a const b = a;
+    ~~~~~ ^
+program_source:8:3: warning: expression result unused [-Wunused-value]
+  a const b = a;
+  ^
+
diff --git a/test/tint/shadowing/struct/var.wgsl.expected.ir.msl b/test/tint/shadowing/struct/var.wgsl.expected.ir.msl
index 3def775..efcece0 100644
--- a/test/tint/shadowing/struct/var.wgsl.expected.ir.msl
+++ b/test/tint/shadowing/struct/var.wgsl.expected.ir.msl
@@ -12,3 +12,48 @@
   a a = a{};
   a b = a;
 }
+program_source:8:10: error: expected ';' at end of declaration
+  a a = a{};
+         ^
+         ;
+program_source:9:3: error: must use 'struct' tag to refer to type 'a' in this scope
+  a b = a;
+  ^
+  struct 
+program_source:8:5: note: struct 'a' is hidden by a non-type declaration of 'a' here
+  a a = a{};
+    ^
+program_source:10:3: error: must use 'struct' tag to refer to type 'a' in this scope
+  a a = a{};
+  ^
+  struct 
+program_source:8:5: note: struct 'a' is hidden by a non-type declaration of 'a' here
+  a a = a{};
+    ^
+program_source:10:5: error: redefinition of 'a'
+  a a = a{};
+    ^
+program_source:8:5: note: previous definition is here
+  a a = a{};
+    ^
+program_source:10:10: error: expected ';' at end of declaration
+  a a = a{};
+         ^
+         ;
+program_source:11:3: error: must use 'struct' tag to refer to type 'a' in this scope
+  a b = a;
+  ^
+  struct 
+program_source:8:5: note: struct 'a' is hidden by a non-type declaration of 'a' here
+  a a = a{};
+    ^
+program_source:11:5: error: redefinition of 'b'
+  a b = a;
+    ^
+program_source:9:5: note: previous definition is here
+  a b = a;
+    ^
+program_source:8:9: warning: variable 'a' is uninitialized when used within its own initialization [-Wuninitialized]
+  a a = a{};
+    ~   ^
+
diff --git a/test/tint/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_body.wgsl.expected.ir.msl b/test/tint/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_body.wgsl.expected.ir.msl
index 95a5789..85fa6d0 100644
--- a/test/tint/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_body.wgsl.expected.ir.msl
+++ b/test/tint/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_body.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Uniforms = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Uniforms = struct @align(4) {
   i:u32 @offset(0)
 }
 
@@ -12,27 +12,27 @@
   a1:array<InnerS, 8> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %uniforms:ptr<uniform, Uniforms, read> = var @binding_point(1, 4)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %v:ptr<function, InnerS, read_write> = var
     %s1:ptr<function, OuterS, read_write> = var
-    loop [i: %b3, b: %b4, c: %b5] {  # loop_1
-      %b3 = block {  # initializer
+    loop [i: $B3, b: $B4, c: $B5] {  # loop_1
+      $B3: {  # initializer
         %i:ptr<function, i32, read_write> = var, 0i
-        next_iteration %b4
+        next_iteration  # -> $B4
       }
-      %b4 = block {  # body
+      $B4: {  # body
         %6:i32 = load %i
         %7:bool = lt %6, 4i
-        if %7 [t: %b6, f: %b7] {  # if_1
-          %b6 = block {  # true
+        if %7 [t: $B6, f: $B7] {  # if_1
+          $B6: {  # true
             exit_if  # if_1
           }
-          %b7 = block {  # false
+          $B7: {  # false
             exit_loop  # loop_1
           }
         }
@@ -41,13 +41,13 @@
         %10:ptr<function, InnerS, read_write> = access %s1, 0u, %9
         %11:InnerS = load %v
         store %10, %11
-        continue %b5
+        continue  # -> $B5
       }
-      %b5 = block {  # continuing
+      $B5: {  # continuing
         %12:i32 = load %i
         %13:i32 = add %12, 1i
         store %i, %13
-        next_iteration %b4
+        next_iteration  # -> $B4
       }
     }
     ret
diff --git a/test/tint/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_continuing.wgsl.expected.ir.msl b/test/tint/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_continuing.wgsl.expected.ir.msl
index d2344f1..1b45f1c 100644
--- a/test/tint/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_continuing.wgsl.expected.ir.msl
+++ b/test/tint/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_continuing.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Uniforms = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Uniforms = struct @align(4) {
   i:u32 @offset(0)
 }
 
@@ -12,42 +12,42 @@
   a1:array<InnerS, 8> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %uniforms:ptr<uniform, Uniforms, read> = var @binding_point(1, 4)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %v:ptr<function, InnerS, read_write> = var
     %s1:ptr<function, OuterS, read_write> = var
-    loop [i: %b3, b: %b4, c: %b5] {  # loop_1
-      %b3 = block {  # initializer
+    loop [i: $B3, b: $B4, c: $B5] {  # loop_1
+      $B3: {  # initializer
         %i:ptr<function, i32, read_write> = var, 0i
-        next_iteration %b4
+        next_iteration  # -> $B4
       }
-      %b4 = block {  # body
+      $B4: {  # body
         %6:i32 = load %i
         %7:bool = lt %6, 4i
-        if %7 [t: %b6, f: %b7] {  # if_1
-          %b6 = block {  # true
+        if %7 [t: $B6, f: $B7] {  # if_1
+          $B6: {  # true
             exit_if  # if_1
           }
-          %b7 = block {  # false
+          $B7: {  # false
             exit_loop  # loop_1
           }
         }
         %8:i32 = load %i
         %9:i32 = add %8, 1i
         store %i, %9
-        continue %b5
+        continue  # -> $B5
       }
-      %b5 = block {  # continuing
+      $B5: {  # continuing
         %10:ptr<uniform, u32, read> = access %uniforms, 0u
         %11:u32 = load %10
         %12:ptr<function, InnerS, read_write> = access %s1, 0u, %11
         %13:InnerS = load %v
         store %12, %13
-        next_iteration %b4
+        next_iteration  # -> $B4
       }
     }
     ret
diff --git a/test/tint/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_init.wgsl.expected.ir.msl b/test/tint/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_init.wgsl.expected.ir.msl
index 27368e5..67592eb 100644
--- a/test/tint/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_init.wgsl.expected.ir.msl
+++ b/test/tint/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_init.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Uniforms = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Uniforms = struct @align(4) {
   i:u32 @offset(0)
 }
 
@@ -12,42 +12,42 @@
   a1:array<InnerS, 8> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %uniforms:ptr<uniform, Uniforms, read> = var @binding_point(1, 4)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %v:ptr<function, InnerS, read_write> = var
     %s1:ptr<function, OuterS, read_write> = var
     %i:ptr<function, i32, read_write> = var, 0i
-    loop [i: %b3, b: %b4, c: %b5] {  # loop_1
-      %b3 = block {  # initializer
+    loop [i: $B3, b: $B4, c: $B5] {  # loop_1
+      $B3: {  # initializer
         %6:ptr<uniform, u32, read> = access %uniforms, 0u
         %7:u32 = load %6
         %8:ptr<function, InnerS, read_write> = access %s1, 0u, %7
         %9:InnerS = load %v
         store %8, %9
-        next_iteration %b4
+        next_iteration  # -> $B4
       }
-      %b4 = block {  # body
+      $B4: {  # body
         %10:i32 = load %i
         %11:bool = lt %10, 4i
-        if %11 [t: %b6, f: %b7] {  # if_1
-          %b6 = block {  # true
+        if %11 [t: $B6, f: $B7] {  # if_1
+          $B6: {  # true
             exit_if  # if_1
           }
-          %b7 = block {  # false
+          $B7: {  # false
             exit_loop  # loop_1
           }
         }
-        continue %b5
+        continue  # -> $B5
       }
-      %b5 = block {  # continuing
+      $B5: {  # continuing
         %12:i32 = load %i
         %13:i32 = add %12, 1i
         store %i, %13
-        next_iteration %b4
+        next_iteration  # -> $B4
       }
     }
     ret
diff --git a/test/tint/statements/assign/indexed_assign_to_array_in_struct/indexing_with_side_effect_func.wgsl.expected.ir.msl b/test/tint/statements/assign/indexed_assign_to_array_in_struct/indexing_with_side_effect_func.wgsl.expected.ir.msl
index 47576c6..f9ea47d 100644
--- a/test/tint/statements/assign/indexed_assign_to_array_in_struct/indexing_with_side_effect_func.wgsl.expected.ir.msl
+++ b/test/tint/statements/assign/indexed_assign_to_array_in_struct/indexing_with_side_effect_func.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Uniforms = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Uniforms = struct @align(4) {
   i:u32 @offset(0)
   j:u32 @offset(4)
 }
@@ -17,13 +17,13 @@
   a1:array<S1, 8> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %nextIndex:ptr<private, u32, read_write> = var
   %uniforms:ptr<uniform, Uniforms, read> = var @binding_point(1, 4)
 }
 
-%getNextIndex = func():u32 -> %b2 {
-  %b2 = block {
+%getNextIndex = func():u32 {
+  $B2: {
     %4:u32 = load %nextIndex
     %5:u32 = add %4, 1u
     store %nextIndex, %5
@@ -31,8 +31,8 @@
     ret %6
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %v:ptr<function, InnerS, read_write> = var
     %s:ptr<function, OuterS, read_write> = var
     %10:u32 = call %getNextIndex
diff --git a/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_array.wgsl.expected.ir.msl b/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_array.wgsl.expected.ir.msl
index fbe5543..d012c12 100644
--- a/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_array.wgsl.expected.ir.msl
+++ b/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_array.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Uniforms = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Uniforms = struct @align(4) {
   i:u32 @offset(0)
 }
 
@@ -12,12 +12,12 @@
   a1:array<InnerS, 8> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %uniforms:ptr<uniform, Uniforms, read> = var @binding_point(1, 4)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %v:ptr<function, InnerS, read_write> = var
     %s1:ptr<function, OuterS, read_write> = var
     %5:ptr<uniform, u32, read> = access %uniforms, 0u
diff --git a/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_array_array.wgsl.expected.ir.msl b/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_array_array.wgsl.expected.ir.msl
index c17a0bc..f0e4240 100644
--- a/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_array_array.wgsl.expected.ir.msl
+++ b/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_array_array.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Uniforms = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Uniforms = struct @align(4) {
   i:u32 @offset(0)
   j:u32 @offset(4)
 }
@@ -13,12 +13,12 @@
   a1:array<array<InnerS, 8>, 8> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %uniforms:ptr<uniform, Uniforms, read> = var @binding_point(1, 4)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %v:ptr<function, InnerS, read_write> = var
     %s1:ptr<function, OuterS, read_write> = var
     %5:ptr<uniform, u32, read> = access %uniforms, 0u
diff --git a/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_array_struct.wgsl.expected.ir.msl b/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_array_struct.wgsl.expected.ir.msl
index 99e50f7..9ae981a 100644
--- a/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_array_struct.wgsl.expected.ir.msl
+++ b/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_array_struct.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Uniforms = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Uniforms = struct @align(4) {
   i:u32 @offset(0)
 }
 
@@ -16,12 +16,12 @@
   a1:array<S1, 8> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %uniforms:ptr<uniform, Uniforms, read> = var @binding_point(1, 4)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %v:ptr<function, InnerS, read_write> = var
     %s1:ptr<function, OuterS, read_write> = var
     %5:ptr<uniform, u32, read> = access %uniforms, 0u
diff --git a/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_array_struct_array.wgsl.expected.ir.msl b/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_array_struct_array.wgsl.expected.ir.msl
index 189af0d..ef33361 100644
--- a/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_array_struct_array.wgsl.expected.ir.msl
+++ b/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_array_struct_array.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Uniforms = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Uniforms = struct @align(4) {
   i:u32 @offset(0)
   j:u32 @offset(4)
 }
@@ -17,12 +17,12 @@
   a1:array<S1, 8> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %uniforms:ptr<uniform, Uniforms, read> = var @binding_point(1, 4)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %v:ptr<function, InnerS, read_write> = var
     %s:ptr<function, OuterS, read_write> = var
     %5:ptr<uniform, u32, read> = access %uniforms, 0u
diff --git a/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_dynamic_array.wgsl.expected.ir.msl b/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_dynamic_array.wgsl.expected.ir.msl
index aa7ab75..35d20bc 100644
--- a/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_dynamic_array.wgsl.expected.ir.msl
+++ b/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_dynamic_array.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Uniforms = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Uniforms = struct @align(4) {
   i:u32 @offset(0)
 }
 
@@ -12,13 +12,13 @@
   a1:array<InnerS> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %uniforms:ptr<uniform, Uniforms, read> = var @binding_point(1, 4)
   %s1:ptr<storage, OuterS, read_write> = var @binding_point(0, 0)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %v:ptr<function, InnerS, read_write> = var
     %5:ptr<uniform, u32, read> = access %uniforms, 0u
     %6:u32 = load %5
diff --git a/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_dynamic_array_struct_array.wgsl.expected.ir.msl b/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_dynamic_array_struct_array.wgsl.expected.ir.msl
index e155666..52d754a 100644
--- a/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_dynamic_array_struct_array.wgsl.expected.ir.msl
+++ b/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_dynamic_array_struct_array.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Uniforms = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Uniforms = struct @align(4) {
   i:u32 @offset(0)
   j:u32 @offset(4)
 }
@@ -17,13 +17,13 @@
   a1:array<S1> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %uniforms:ptr<uniform, Uniforms, read> = var @binding_point(1, 4)
   %s:ptr<storage, OuterS, read_write> = var @binding_point(0, 0)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %v:ptr<function, InnerS, read_write> = var
     %5:ptr<uniform, u32, read> = access %uniforms, 0u
     %6:u32 = load %5
diff --git a/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_matrix.wgsl.expected.ir.msl b/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_matrix.wgsl.expected.ir.msl
index 42a6f9c..c09b9ac 100644
--- a/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_matrix.wgsl.expected.ir.msl
+++ b/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_matrix.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Uniforms = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Uniforms = struct @align(4) {
   i:u32 @offset(0)
 }
 
@@ -8,12 +8,12 @@
   m1:mat2x4<f32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %uniforms:ptr<uniform, Uniforms, read> = var @binding_point(1, 4)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %s1:ptr<function, OuterS, read_write> = var
     %4:ptr<uniform, u32, read> = access %uniforms, 0u
     %5:u32 = load %4
diff --git a/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_multiple_arrays.wgsl.expected.ir.msl b/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_multiple_arrays.wgsl.expected.ir.msl
index eb60a91..eebc54e 100644
--- a/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_multiple_arrays.wgsl.expected.ir.msl
+++ b/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_multiple_arrays.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Uniforms = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Uniforms = struct @align(4) {
   i:u32 @offset(0)
 }
 
@@ -13,12 +13,12 @@
   a2:array<InnerS, 8> @offset(32)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %uniforms:ptr<uniform, Uniforms, read> = var @binding_point(1, 4)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %v:ptr<function, InnerS, read_write> = var
     %s1:ptr<function, OuterS, read_write> = var
     %5:ptr<uniform, u32, read> = access %uniforms, 0u
diff --git a/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_struct_array.wgsl.expected.ir.msl b/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_struct_array.wgsl.expected.ir.msl
index e417912..b7fb051 100644
--- a/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_struct_array.wgsl.expected.ir.msl
+++ b/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_struct_array.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Uniforms = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Uniforms = struct @align(4) {
   i:u32 @offset(0)
 }
 
@@ -16,12 +16,12 @@
   s2:S1 @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %uniforms:ptr<uniform, Uniforms, read> = var @binding_point(1, 4)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %v:ptr<function, InnerS, read_write> = var
     %s1:ptr<function, OuterS, read_write> = var
     %5:ptr<uniform, u32, read> = access %uniforms, 0u
diff --git a/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_vector.wgsl.expected.ir.msl b/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_vector.wgsl.expected.ir.msl
index 996c480..d9e8175 100644
--- a/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_vector.wgsl.expected.ir.msl
+++ b/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_vector.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Uniforms = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Uniforms = struct @align(4) {
   i:u32 @offset(0)
 }
 
@@ -8,12 +8,12 @@
   v1:vec3<f32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %uniforms:ptr<uniform, Uniforms, read> = var @binding_point(1, 4)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %s1:ptr<function, OuterS, read_write> = var
     %4:ptr<function, vec3<f32>, read_write> = access %s1, 0u
     %5:ptr<uniform, u32, read> = access %uniforms, 0u
diff --git a/test/tint/statements/assign/indexed_assign_to_array_in_struct/vector_assign.wgsl.expected.ir.msl b/test/tint/statements/assign/indexed_assign_to_array_in_struct/vector_assign.wgsl.expected.ir.msl
index 3af72df..b136b18 100644
--- a/test/tint/statements/assign/indexed_assign_to_array_in_struct/vector_assign.wgsl.expected.ir.msl
+++ b/test/tint/statements/assign/indexed_assign_to_array_in_struct/vector_assign.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Uniforms = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Uniforms = struct @align(4) {
   i:u32 @offset(0)
 }
 
@@ -8,18 +8,18 @@
   a1:array<u32, 8> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %uniforms:ptr<uniform, Uniforms, read> = var @binding_point(1, 4)
 }
 
-%f = func(%i:u32):u32 -> %b2 {
-  %b2 = block {
+%f = func(%i:u32):u32 {
+  $B2: {
     %4:u32 = add %i, 1u
     ret %4
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %s1:ptr<function, OuterS, read_write> = var
     %v:ptr<function, vec3<f32>, read_write> = var
     %8:ptr<uniform, u32, read> = access %uniforms, 0u
diff --git a/test/tint/statements/assign/indexed_assign_to_array_in_struct/via_pointer.wgsl.expected.ir.msl b/test/tint/statements/assign/indexed_assign_to_array_in_struct/via_pointer.wgsl.expected.ir.msl
index 4a6da6b..bc00b8c 100644
--- a/test/tint/statements/assign/indexed_assign_to_array_in_struct/via_pointer.wgsl.expected.ir.msl
+++ b/test/tint/statements/assign/indexed_assign_to_array_in_struct/via_pointer.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Uniforms = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Uniforms = struct @align(4) {
   i:u32 @offset(0)
 }
 
@@ -12,19 +12,20 @@
   a1:array<InnerS, 8> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %uniforms:ptr<uniform, Uniforms, read> = var @binding_point(1, 4)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %v:ptr<function, InnerS, read_write> = var
     %s1:ptr<function, OuterS, read_write> = var
     %5:ptr<uniform, u32, read> = access %uniforms, 0u
     %6:u32 = load %5
-    %p:ptr<function, InnerS, read_write> = access %s1, 0u, %6
-    %8:InnerS = load %v
-    store %p, %8
+    %7:ptr<function, InnerS, read_write> = access %s1, 0u, %6
+    %p:ptr<function, InnerS, read_write> = let %7
+    %9:InnerS = load %v
+    store %p, %9
     ret
   }
 }
diff --git a/test/tint/statements/assign/indexed_assign_to_array_in_struct/via_pointer_arg.wgsl.expected.ir.msl b/test/tint/statements/assign/indexed_assign_to_array_in_struct/via_pointer_arg.wgsl.expected.ir.msl
index 01c44e2..281a01ca 100644
--- a/test/tint/statements/assign/indexed_assign_to_array_in_struct/via_pointer_arg.wgsl.expected.ir.msl
+++ b/test/tint/statements/assign/indexed_assign_to_array_in_struct/via_pointer_arg.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Uniforms = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Uniforms = struct @align(4) {
   i:u32 @offset(0)
 }
 
@@ -12,12 +12,12 @@
   a1:array<InnerS, 8> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %uniforms:ptr<uniform, Uniforms, read> = var @binding_point(1, 4)
 }
 
-%f = func(%p:ptr<function, OuterS, read_write>):void -> %b2 {
-  %b2 = block {
+%f = func(%p:ptr<function, OuterS, read_write>):void {
+  $B2: {
     %v:ptr<function, InnerS, read_write> = var
     %5:ptr<uniform, u32, read> = access %uniforms, 0u
     %6:u32 = load %5
@@ -27,8 +27,8 @@
     ret
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %s1:ptr<function, OuterS, read_write> = var
     %11:void = call %f, %s1
     ret
diff --git a/test/tint/statements/assign/phony/addr_of_non_constructable.wgsl.expected.ir.msl b/test/tint/statements/assign/phony/addr_of_non_constructable.wgsl.expected.ir.msl
index b9d5d0e..8a7cb59 100644
--- a/test/tint/statements/assign/phony/addr_of_non_constructable.wgsl.expected.ir.msl
+++ b/test/tint/statements/assign/phony/addr_of_non_constructable.wgsl.expected.ir.msl
@@ -1,15 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   arr:array<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %s:ptr<storage, S, read_write> = var @binding_point(0, 0)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     ret
   }
 }
diff --git a/test/tint/statements/assign/phony/addr_of_runtime_array.wgsl.expected.ir.msl b/test/tint/statements/assign/phony/addr_of_runtime_array.wgsl.expected.ir.msl
index 65507b9..862a349 100644
--- a/test/tint/statements/assign/phony/addr_of_runtime_array.wgsl.expected.ir.msl
+++ b/test/tint/statements/assign/phony/addr_of_runtime_array.wgsl.expected.ir.msl
@@ -1,15 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   arr:array<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %s:ptr<storage, S, read_write> = var @binding_point(0, 0)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %3:ptr<storage, array<i32>, read_write> = access %s, 0u
     ret
   }
diff --git a/test/tint/statements/assign/phony/storage_buffer.wgsl.expected.ir.msl b/test/tint/statements/assign/phony/storage_buffer.wgsl.expected.ir.msl
index 458845a..a176483 100644
--- a/test/tint/statements/assign/phony/storage_buffer.wgsl.expected.ir.msl
+++ b/test/tint/statements/assign/phony/storage_buffer.wgsl.expected.ir.msl
@@ -1,15 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   i:i32 @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %s:ptr<storage, S, read_write> = var @binding_point(0, 0)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %3:S = load %s
     %4:ptr<storage, i32, read_write> = access %s, 0u
     %5:i32 = load %4
diff --git a/test/tint/statements/assign/phony/uniform_buffer.wgsl.expected.ir.msl b/test/tint/statements/assign/phony/uniform_buffer.wgsl.expected.ir.msl
index 61ef3ab..d5ae925 100644
--- a/test/tint/statements/assign/phony/uniform_buffer.wgsl.expected.ir.msl
+++ b/test/tint/statements/assign/phony/uniform_buffer.wgsl.expected.ir.msl
@@ -1,15 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   i:i32 @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %u:ptr<uniform, S, read> = var @binding_point(0, 0)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
     %3:S = load %u
     %4:ptr<uniform, i32, read> = access %u, 0u
     %5:i32 = load %4
diff --git a/test/tint/statements/compound_assign/complex_lhs.wgsl.expected.ir.msl b/test/tint/statements/compound_assign/complex_lhs.wgsl.expected.ir.msl
index efdd3b1..5e20a80 100644
--- a/test/tint/statements/compound_assign/complex_lhs.wgsl.expected.ir.msl
+++ b/test/tint/statements/compound_assign/complex_lhs.wgsl.expected.ir.msl
@@ -1,9 +1,50 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#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];
+};
+
+struct S {
+  tint_array<int4, 4> a;
+};
+
+thread int counter = 0;
+int foo() {
+  counter = (counter + 1);
+  return counter;
+}
+int bar() {
+  counter = (counter + 2);
+  return counter;
+}
+void tint_symbol() {
+  S x = S{};
+  thread S* const p = x;
+  thread int4* const v = p.a[foo()];
+  int const v_1 = bar();
+  v[v_1] = (v[v_1] + 5);
+}
+program_source:19:12: error: program scope variable must reside in constant address space
+thread int counter = 0;
+           ^
+program_source:30:19: error: no viable conversion from 'S' to 'S *const'
+  thread S* const p = x;
+                  ^   ~
+program_source:31:27: error: member reference type 'S *const' is a pointer; did you mean to use '->'?
+  thread int4* const v = p.a[foo()];
+                         ~^
+                          ->
+program_source:31:22: error: cannot initialize a variable of type 'int4 *const' with an lvalue of type 'int __attribute__((ext_vector_type(4)))' (vector of 4 'int' values)
+  thread int4* const v = p.a[foo()];
+                     ^   ~~~~~~~~~~
+
diff --git a/test/tint/statements/compound_assign/divide_by_zero.wgsl.expected.ir.msl b/test/tint/statements/compound_assign/divide_by_zero.wgsl.expected.ir.msl
index efdd3b1..764b348 100644
--- a/test/tint/statements/compound_assign/divide_by_zero.wgsl.expected.ir.msl
+++ b/test/tint/statements/compound_assign/divide_by_zero.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread int a = 0;
+thread float b = 0.0f;
+void foo(int maybe_zero) {
+  a = tint_div_i32(a, 0);
+  a = tint_mod_i32(a, 0);
+  a = tint_div_i32(a, maybe_zero);
+  a = tint_mod_i32(a, maybe_zero);
+  b = (b / 0.0f);
+  b = (b % 0.0f);
+  b = (b / float(maybe_zero));
+  b = (b % float(maybe_zero));
+}
+int tint_div_i32(int lhs, int rhs) {
+  return (lhs / select(rhs, 1, ((rhs == 0) | ((lhs == (-2147483647 - 1)) & (rhs == -1)))));
+}
+int tint_mod_i32(int lhs, int rhs) {
+  int const v = select(rhs, 1, ((rhs == 0) | ((lhs == (-2147483647 - 1)) & (rhs == -1))));
+  return (lhs - ((lhs / v) * v));
+}
+program_source:4:12: error: program scope variable must reside in constant address space
+thread int a = 0;
+           ^
+program_source:5:14: error: program scope variable must reside in constant address space
+thread float b = 0.0f;
+             ^
+
diff --git a/test/tint/statements/compound_assign/for_loop.wgsl.expected.ir.msl b/test/tint/statements/compound_assign/for_loop.wgsl.expected.ir.msl
index 457c63a..0cad888 100644
--- a/test/tint/statements/compound_assign/for_loop.wgsl.expected.ir.msl
+++ b/test/tint/statements/compound_assign/for_loop.wgsl.expected.ir.msl
@@ -1,74 +1,76 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(16) {
   a:i32 @offset(0)
   b:vec4<f32> @offset(16)
   c:mat2x2<f32> @offset(32)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %v:ptr<storage, S, read_write> = var @binding_point(0, 0)
   %i:ptr<private, u32, read_write> = var
 }
 
-%idx1 = func():i32 -> %b2 {
-  %b2 = block {
+%idx1 = func():i32 {
+  $B2: {
     %4:u32 = load %i
     %5:u32 = add %4, 1u
     store %i, %5
     ret 1i
   }
 }
-%idx2 = func():i32 -> %b3 {
-  %b3 = block {
+%idx2 = func():i32 {
+  $B3: {
     %7:u32 = load %i
     %8:u32 = add %7, 2u
     store %i, %8
     ret 1i
   }
 }
-%idx3 = func():i32 -> %b4 {
-  %b4 = block {
+%idx3 = func():i32 {
+  $B4: {
     %10:u32 = load %i
     %11:u32 = add %10, 3u
     store %i, %11
     ret 1i
   }
 }
-%foo = func():void -> %b5 {
-  %b5 = block {
+%foo = func():void {
+  $B5: {
     %a:ptr<function, array<f32, 4>, read_write> = var, array<f32, 4>(0.0f)
-    loop [i: %b6, b: %b7, c: %b8] {  # loop_1
-      %b6 = block {  # initializer
+    loop [i: $B6, b: $B7, c: $B8] {  # loop_1
+      $B6: {  # initializer
         %14:i32 = call %idx1
         %15:ptr<function, f32, read_write> = access %a, %14
-        %16:f32 = load %15
-        %17:f32 = mul %16, 2.0f
-        store %15, %17
-        next_iteration %b7
+        %16:ptr<function, f32, read_write> = let %15
+        %17:f32 = load %16
+        %18:f32 = mul %17, 2.0f
+        store %16, %18
+        next_iteration  # -> $B7
       }
-      %b7 = block {  # body
-        %18:i32 = call %idx2
-        %19:ptr<function, f32, read_write> = access %a, %18
-        %20:f32 = load %19
-        %21:bool = lt %20, 10.0f
-        if %21 [t: %b9, f: %b10] {  # if_1
-          %b9 = block {  # true
+      $B7: {  # body
+        %19:i32 = call %idx2
+        %20:ptr<function, f32, read_write> = access %a, %19
+        %21:f32 = load %20
+        %22:bool = lt %21, 10.0f
+        if %22 [t: $B9, f: $B10] {  # if_1
+          $B9: {  # true
             exit_if  # if_1
           }
-          %b10 = block {  # false
+          $B10: {  # false
             exit_loop  # loop_1
           }
         }
-        continue %b8
+        continue  # -> $B8
       }
-      %b8 = block {  # continuing
-        %22:i32 = call %idx3
-        %23:ptr<function, f32, read_write> = access %a, %22
-        %24:f32 = load %23
-        %25:f32 = add %24, 1.0f
-        store %23, %25
-        next_iteration %b7
+      $B8: {  # continuing
+        %23:i32 = call %idx3
+        %24:ptr<function, f32, read_write> = access %a, %23
+        %25:ptr<function, f32, read_write> = let %24
+        %26:f32 = load %25
+        %27:f32 = add %26, 1.0f
+        store %25, %27
+        next_iteration  # -> $B7
       }
     }
     ret
diff --git a/test/tint/statements/compound_assign/function.wgsl.expected.ir.msl b/test/tint/statements/compound_assign/function.wgsl.expected.ir.msl
index 77453be..e7169f7 100644
--- a/test/tint/statements/compound_assign/function.wgsl.expected.ir.msl
+++ b/test/tint/statements/compound_assign/function.wgsl.expected.ir.msl
@@ -1,3 +1,5 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 
@@ -5,7 +7,14 @@
   int a = 0;
   float4 b = 0.0f;
   float2x2 c = float2x2(0.0f);
-  a = (a / 2);
+  a = tint_div_i32(a, 2);
   b = (b * float4x4(float4(0.0f), float4(0.0f), float4(0.0f), float4(0.0f)));
   c = (c * 2.0f);
 }
+int tint_div_i32(int lhs, int rhs) {
+  return (lhs / select(rhs, 1, ((rhs == 0) | ((lhs == (-2147483647 - 1)) & (rhs == -1)))));
+}
+program_source:8:7: error: use of undeclared identifier 'tint_div_i32'
+  a = tint_div_i32(a, 2);
+      ^
+
diff --git a/test/tint/statements/compound_assign/matrix/minus.wgsl.expected.ir.msl b/test/tint/statements/compound_assign/matrix/minus.wgsl.expected.ir.msl
index 4dedd5c..16766aa 100644
--- a/test/tint/statements/compound_assign/matrix/minus.wgsl.expected.ir.msl
+++ b/test/tint/statements/compound_assign/matrix/minus.wgsl.expected.ir.msl
@@ -1,15 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(16) {
   a:mat4x4<f32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %v:ptr<storage, S, read_write> = var @binding_point(0, 0)
 }
 
-%foo = func():void -> %b2 {
-  %b2 = block {
+%foo = func():void {
+  $B2: {
     %3:ptr<storage, mat4x4<f32>, read_write> = access %v, 0u
     %4:mat4x4<f32> = load %3
     %5:mat4x4<f32> = sub %4, mat4x4<f32>(vec4<f32>(0.0f))
diff --git a/test/tint/statements/compound_assign/matrix/plus.wgsl.expected.ir.msl b/test/tint/statements/compound_assign/matrix/plus.wgsl.expected.ir.msl
index 26799cf..618b4be 100644
--- a/test/tint/statements/compound_assign/matrix/plus.wgsl.expected.ir.msl
+++ b/test/tint/statements/compound_assign/matrix/plus.wgsl.expected.ir.msl
@@ -1,15 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(16) {
   a:mat4x4<f32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %v:ptr<storage, S, read_write> = var @binding_point(0, 0)
 }
 
-%foo = func():void -> %b2 {
-  %b2 = block {
+%foo = func():void {
+  $B2: {
     %3:ptr<storage, mat4x4<f32>, read_write> = access %v, 0u
     %4:mat4x4<f32> = load %3
     %5:mat4x4<f32> = add %4, mat4x4<f32>(vec4<f32>(0.0f))
diff --git a/test/tint/statements/compound_assign/matrix/times-scalar.wgsl.expected.ir.msl b/test/tint/statements/compound_assign/matrix/times-scalar.wgsl.expected.ir.msl
index 5c704ea..782a03f 100644
--- a/test/tint/statements/compound_assign/matrix/times-scalar.wgsl.expected.ir.msl
+++ b/test/tint/statements/compound_assign/matrix/times-scalar.wgsl.expected.ir.msl
@@ -1,15 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(16) {
   a:mat4x4<f32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %v:ptr<storage, S, read_write> = var @binding_point(0, 0)
 }
 
-%foo = func():void -> %b2 {
-  %b2 = block {
+%foo = func():void {
+  $B2: {
     %3:ptr<storage, mat4x4<f32>, read_write> = access %v, 0u
     %4:mat4x4<f32> = load %3
     %5:mat4x4<f32> = mul %4, 2.0f
diff --git a/test/tint/statements/compound_assign/matrix/times.wgsl.expected.ir.msl b/test/tint/statements/compound_assign/matrix/times.wgsl.expected.ir.msl
index c3c6578..82f7729 100644
--- a/test/tint/statements/compound_assign/matrix/times.wgsl.expected.ir.msl
+++ b/test/tint/statements/compound_assign/matrix/times.wgsl.expected.ir.msl
@@ -1,15 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(16) {
   a:mat4x4<f32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %v:ptr<storage, S, read_write> = var @binding_point(0, 0)
 }
 
-%foo = func():void -> %b2 {
-  %b2 = block {
+%foo = func():void {
+  $B2: {
     %3:ptr<storage, mat4x4<f32>, read_write> = access %v, 0u
     %4:mat4x4<f32> = load %3
     %5:mat4x4<f32> = mul %4, mat4x4<f32>(vec4<f32>(0.0f))
diff --git a/test/tint/statements/compound_assign/private.wgsl.expected.ir.msl b/test/tint/statements/compound_assign/private.wgsl.expected.ir.msl
index efdd3b1..acff416 100644
--- a/test/tint/statements/compound_assign/private.wgsl.expected.ir.msl
+++ b/test/tint/statements/compound_assign/private.wgsl.expected.ir.msl
@@ -1,9 +1,26 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread int a = 0;
+thread float4 b = 0.0f;
+thread float2x2 c = float2x2(0.0f);
+void foo() {
+  a = tint_div_i32(a, 2);
+  b = (b * float4x4(float4(0.0f), float4(0.0f), float4(0.0f), float4(0.0f)));
+  c = (c * 2.0f);
+}
+int tint_div_i32(int lhs, int rhs) {
+  return (lhs / select(rhs, 1, ((rhs == 0) | ((lhs == (-2147483647 - 1)) & (rhs == -1)))));
+}
+program_source:4:12: error: program scope variable must reside in constant address space
+thread int a = 0;
+           ^
+program_source:5:15: error: program scope variable must reside in constant address space
+thread float4 b = 0.0f;
+              ^
+program_source:6:17: error: program scope variable must reside in constant address space
+thread float2x2 c = float2x2(0.0f);
+                ^
+
diff --git a/test/tint/statements/compound_assign/scalar/and.wgsl.expected.ir.msl b/test/tint/statements/compound_assign/scalar/and.wgsl.expected.ir.msl
index 9320fb0..4fd5a35 100644
--- a/test/tint/statements/compound_assign/scalar/and.wgsl.expected.ir.msl
+++ b/test/tint/statements/compound_assign/scalar/and.wgsl.expected.ir.msl
@@ -1,15 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   a:i32 @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %v:ptr<storage, S, read_write> = var @binding_point(0, 0)
 }
 
-%foo = func():void -> %b2 {
-  %b2 = block {
+%foo = func():void {
+  $B2: {
     %3:ptr<storage, i32, read_write> = access %v, 0u
     %4:i32 = load %3
     %5:i32 = and %4, 2i
diff --git a/test/tint/statements/compound_assign/scalar/divide.wgsl.expected.ir.msl b/test/tint/statements/compound_assign/scalar/divide.wgsl.expected.ir.msl
index 54988fe..b447b48 100644
--- a/test/tint/statements/compound_assign/scalar/divide.wgsl.expected.ir.msl
+++ b/test/tint/statements/compound_assign/scalar/divide.wgsl.expected.ir.msl
@@ -1,22 +1,34 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   a:i32 @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %v:ptr<storage, S, read_write> = var @binding_point(0, 0)
 }
 
-%foo = func():void -> %b2 {
-  %b2 = block {
+%foo = func():void {
+  $B2: {
     %3:ptr<storage, i32, read_write> = access %v, 0u
     %4:i32 = load %3
-    %5:i32 = div %4, 2i
+    %5:i32 = call %tint_div_i32, %4, 2i
     store %3, %5
     ret
   }
 }
+%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B3: {
+    %9:bool = eq %rhs, 0i
+    %10:bool = eq %lhs, -2147483648i
+    %11:bool = eq %rhs, -1i
+    %12:bool = and %10, %11
+    %13:bool = or %9, %12
+    %14:i32 = select %rhs, 1i, %13
+    %15:i32 = div %lhs, %14
+    ret %15
+  }
+}
 
 unhandled variable address space
 ********************************************************************
diff --git a/test/tint/statements/compound_assign/scalar/minus.wgsl.expected.ir.msl b/test/tint/statements/compound_assign/scalar/minus.wgsl.expected.ir.msl
index a43b092..21b1ae8 100644
--- a/test/tint/statements/compound_assign/scalar/minus.wgsl.expected.ir.msl
+++ b/test/tint/statements/compound_assign/scalar/minus.wgsl.expected.ir.msl
@@ -1,15 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   a:i32 @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %v:ptr<storage, S, read_write> = var @binding_point(0, 0)
 }
 
-%foo = func():void -> %b2 {
-  %b2 = block {
+%foo = func():void {
+  $B2: {
     %3:ptr<storage, i32, read_write> = access %v, 0u
     %4:i32 = load %3
     %5:i32 = sub %4, 2i
diff --git a/test/tint/statements/compound_assign/scalar/modulo.wgsl.expected.ir.msl b/test/tint/statements/compound_assign/scalar/modulo.wgsl.expected.ir.msl
index f43c8d3..576802c 100644
--- a/test/tint/statements/compound_assign/scalar/modulo.wgsl.expected.ir.msl
+++ b/test/tint/statements/compound_assign/scalar/modulo.wgsl.expected.ir.msl
@@ -1,22 +1,37 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   a:i32 @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %v:ptr<storage, S, read_write> = var @binding_point(0, 0)
 }
 
-%foo = func():void -> %b2 {
-  %b2 = block {
+%foo = func():void {
+  $B2: {
     %3:ptr<storage, i32, read_write> = access %v, 0u
     %4:i32 = load %3
-    %5:i32 = mod %4, 2i
+    %5:i32 = call %tint_mod_i32, %4, 2i
     store %3, %5
     ret
   }
 }
+%tint_mod_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B3: {
+    %9:bool = eq %rhs, 0i
+    %10:bool = eq %lhs, -2147483648i
+    %11:bool = eq %rhs, -1i
+    %12:bool = and %10, %11
+    %13:bool = or %9, %12
+    %14:i32 = select %rhs, 1i, %13
+    %15:i32 = let %14
+    %16:i32 = div %lhs, %15
+    %17:i32 = mul %16, %15
+    %18:i32 = sub %lhs, %17
+    ret %18
+  }
+}
 
 unhandled variable address space
 ********************************************************************
diff --git a/test/tint/statements/compound_assign/scalar/or.wgsl.expected.ir.msl b/test/tint/statements/compound_assign/scalar/or.wgsl.expected.ir.msl
index ee64dbc..3a756ab 100644
--- a/test/tint/statements/compound_assign/scalar/or.wgsl.expected.ir.msl
+++ b/test/tint/statements/compound_assign/scalar/or.wgsl.expected.ir.msl
@@ -1,15 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   a:i32 @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %v:ptr<storage, S, read_write> = var @binding_point(0, 0)
 }
 
-%foo = func():void -> %b2 {
-  %b2 = block {
+%foo = func():void {
+  $B2: {
     %3:ptr<storage, i32, read_write> = access %v, 0u
     %4:i32 = load %3
     %5:i32 = or %4, 2i
diff --git a/test/tint/statements/compound_assign/scalar/plus.wgsl.expected.ir.msl b/test/tint/statements/compound_assign/scalar/plus.wgsl.expected.ir.msl
index 7ae3e40..9bd6a64 100644
--- a/test/tint/statements/compound_assign/scalar/plus.wgsl.expected.ir.msl
+++ b/test/tint/statements/compound_assign/scalar/plus.wgsl.expected.ir.msl
@@ -1,15 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   a:i32 @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %v:ptr<storage, S, read_write> = var @binding_point(0, 0)
 }
 
-%foo = func():void -> %b2 {
-  %b2 = block {
+%foo = func():void {
+  $B2: {
     %3:ptr<storage, i32, read_write> = access %v, 0u
     %4:i32 = load %3
     %5:i32 = add %4, 2i
diff --git a/test/tint/statements/compound_assign/scalar/shift_left.wgsl.expected.ir.msl b/test/tint/statements/compound_assign/scalar/shift_left.wgsl.expected.ir.msl
index 580d0a3..f51a6e5 100644
--- a/test/tint/statements/compound_assign/scalar/shift_left.wgsl.expected.ir.msl
+++ b/test/tint/statements/compound_assign/scalar/shift_left.wgsl.expected.ir.msl
@@ -1,19 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   a:i32 @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %v:ptr<storage, S, read_write> = var @binding_point(0, 0)
 }
 
-%foo = func():void -> %b2 {
-  %b2 = block {
+%foo = func():void {
+  $B2: {
     %3:ptr<storage, i32, read_write> = access %v, 0u
     %4:i32 = load %3
-    %5:i32 = shiftl %4, 2u
-    store %3, %5
+    %5:u32 = and 2u, 31u
+    %6:i32 = shl %4, %5
+    store %3, %6
     ret
   }
 }
diff --git a/test/tint/statements/compound_assign/scalar/shift_right.wgsl.expected.ir.msl b/test/tint/statements/compound_assign/scalar/shift_right.wgsl.expected.ir.msl
index 51d3bd5..1619a15 100644
--- a/test/tint/statements/compound_assign/scalar/shift_right.wgsl.expected.ir.msl
+++ b/test/tint/statements/compound_assign/scalar/shift_right.wgsl.expected.ir.msl
@@ -1,19 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   a:i32 @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %v:ptr<storage, S, read_write> = var @binding_point(0, 0)
 }
 
-%foo = func():void -> %b2 {
-  %b2 = block {
+%foo = func():void {
+  $B2: {
     %3:ptr<storage, i32, read_write> = access %v, 0u
     %4:i32 = load %3
-    %5:i32 = shiftr %4, 2u
-    store %3, %5
+    %5:u32 = and 2u, 31u
+    %6:i32 = shr %4, %5
+    store %3, %6
     ret
   }
 }
diff --git a/test/tint/statements/compound_assign/scalar/times.wgsl.expected.ir.msl b/test/tint/statements/compound_assign/scalar/times.wgsl.expected.ir.msl
index de73bd6..b32922d 100644
--- a/test/tint/statements/compound_assign/scalar/times.wgsl.expected.ir.msl
+++ b/test/tint/statements/compound_assign/scalar/times.wgsl.expected.ir.msl
@@ -1,15 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   a:i32 @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %v:ptr<storage, S, read_write> = var @binding_point(0, 0)
 }
 
-%foo = func():void -> %b2 {
-  %b2 = block {
+%foo = func():void {
+  $B2: {
     %3:ptr<storage, i32, read_write> = access %v, 0u
     %4:i32 = load %3
     %5:i32 = mul %4, 2i
diff --git a/test/tint/statements/compound_assign/scalar/xor.wgsl.expected.ir.msl b/test/tint/statements/compound_assign/scalar/xor.wgsl.expected.ir.msl
index d069bd7..b4259c7 100644
--- a/test/tint/statements/compound_assign/scalar/xor.wgsl.expected.ir.msl
+++ b/test/tint/statements/compound_assign/scalar/xor.wgsl.expected.ir.msl
@@ -1,15 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   a:i32 @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %v:ptr<storage, S, read_write> = var @binding_point(0, 0)
 }
 
-%foo = func():void -> %b2 {
-  %b2 = block {
+%foo = func():void {
+  $B2: {
     %3:ptr<storage, i32, read_write> = access %v, 0u
     %4:i32 = load %3
     %5:i32 = xor %4, 2i
diff --git a/test/tint/statements/compound_assign/vector/and.wgsl.expected.ir.msl b/test/tint/statements/compound_assign/vector/and.wgsl.expected.ir.msl
index 60f879e..c09bc08 100644
--- a/test/tint/statements/compound_assign/vector/and.wgsl.expected.ir.msl
+++ b/test/tint/statements/compound_assign/vector/and.wgsl.expected.ir.msl
@@ -1,15 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(16) {
   a:vec4<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %v:ptr<storage, S, read_write> = var @binding_point(0, 0)
 }
 
-%foo = func():void -> %b2 {
-  %b2 = block {
+%foo = func():void {
+  $B2: {
     %3:ptr<storage, vec4<i32>, read_write> = access %v, 0u
     %4:vec4<i32> = load %3
     %5:vec4<i32> = and %4, vec4<i32>(2i)
diff --git a/test/tint/statements/compound_assign/vector/divide-scalar.wgsl.expected.ir.msl b/test/tint/statements/compound_assign/vector/divide-scalar.wgsl.expected.ir.msl
index 37991b1..cbb1ce9 100644
--- a/test/tint/statements/compound_assign/vector/divide-scalar.wgsl.expected.ir.msl
+++ b/test/tint/statements/compound_assign/vector/divide-scalar.wgsl.expected.ir.msl
@@ -1,15 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(16) {
   a:vec4<f32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %v:ptr<storage, S, read_write> = var @binding_point(0, 0)
 }
 
-%foo = func():void -> %b2 {
-  %b2 = block {
+%foo = func():void {
+  $B2: {
     %3:ptr<storage, vec4<f32>, read_write> = access %v, 0u
     %4:vec4<f32> = load %3
     %5:vec4<f32> = div %4, 2.0f
diff --git a/test/tint/statements/compound_assign/vector/divide.wgsl.expected.ir.msl b/test/tint/statements/compound_assign/vector/divide.wgsl.expected.ir.msl
index 06612d6..8586de1 100644
--- a/test/tint/statements/compound_assign/vector/divide.wgsl.expected.ir.msl
+++ b/test/tint/statements/compound_assign/vector/divide.wgsl.expected.ir.msl
@@ -1,22 +1,34 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(16) {
   a:vec4<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %v:ptr<storage, S, read_write> = var @binding_point(0, 0)
 }
 
-%foo = func():void -> %b2 {
-  %b2 = block {
+%foo = func():void {
+  $B2: {
     %3:ptr<storage, vec4<i32>, read_write> = access %v, 0u
     %4:vec4<i32> = load %3
-    %5:vec4<i32> = div %4, vec4<i32>(2i)
+    %5:vec4<i32> = call %tint_div_v4i32, %4, vec4<i32>(2i)
     store %3, %5
     ret
   }
 }
+%tint_div_v4i32 = func(%lhs:vec4<i32>, %rhs:vec4<i32>):vec4<i32> {
+  $B3: {
+    %9:vec4<bool> = eq %rhs, vec4<i32>(0i)
+    %10:vec4<bool> = eq %lhs, vec4<i32>(-2147483648i)
+    %11:vec4<bool> = eq %rhs, vec4<i32>(-1i)
+    %12:vec4<bool> = and %10, %11
+    %13:vec4<bool> = or %9, %12
+    %14:vec4<i32> = select %rhs, vec4<i32>(1i), %13
+    %15:vec4<i32> = div %lhs, %14
+    ret %15
+  }
+}
 
 unhandled variable address space
 ********************************************************************
diff --git a/test/tint/statements/compound_assign/vector/minus-scalar.wgsl.expected.ir.msl b/test/tint/statements/compound_assign/vector/minus-scalar.wgsl.expected.ir.msl
index e478555..caa16e9 100644
--- a/test/tint/statements/compound_assign/vector/minus-scalar.wgsl.expected.ir.msl
+++ b/test/tint/statements/compound_assign/vector/minus-scalar.wgsl.expected.ir.msl
@@ -1,15 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(16) {
   a:vec4<f32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %v:ptr<storage, S, read_write> = var @binding_point(0, 0)
 }
 
-%foo = func():void -> %b2 {
-  %b2 = block {
+%foo = func():void {
+  $B2: {
     %3:ptr<storage, vec4<f32>, read_write> = access %v, 0u
     %4:vec4<f32> = load %3
     %5:vec4<f32> = sub %4, 2.0f
diff --git a/test/tint/statements/compound_assign/vector/minus.wgsl.expected.ir.msl b/test/tint/statements/compound_assign/vector/minus.wgsl.expected.ir.msl
index 52642e9..79432d8 100644
--- a/test/tint/statements/compound_assign/vector/minus.wgsl.expected.ir.msl
+++ b/test/tint/statements/compound_assign/vector/minus.wgsl.expected.ir.msl
@@ -1,15 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(16) {
   a:vec4<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %v:ptr<storage, S, read_write> = var @binding_point(0, 0)
 }
 
-%foo = func():void -> %b2 {
-  %b2 = block {
+%foo = func():void {
+  $B2: {
     %3:ptr<storage, vec4<i32>, read_write> = access %v, 0u
     %4:vec4<i32> = load %3
     %5:vec4<i32> = sub %4, vec4<i32>(2i)
diff --git a/test/tint/statements/compound_assign/vector/modulo-scalar.wgsl.expected.ir.msl b/test/tint/statements/compound_assign/vector/modulo-scalar.wgsl.expected.ir.msl
index 2709a13..8d83ed2 100644
--- a/test/tint/statements/compound_assign/vector/modulo-scalar.wgsl.expected.ir.msl
+++ b/test/tint/statements/compound_assign/vector/modulo-scalar.wgsl.expected.ir.msl
@@ -1,22 +1,39 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(16) {
   a:vec4<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %v:ptr<storage, S, read_write> = var @binding_point(0, 0)
 }
 
-%foo = func():void -> %b2 {
-  %b2 = block {
+%foo = func():void {
+  $B2: {
     %3:ptr<storage, vec4<i32>, read_write> = access %v, 0u
     %4:vec4<i32> = load %3
-    %5:vec4<i32> = mod %4, 2i
-    store %3, %5
+    %5:vec4<i32> = let %4
+    %6:vec4<i32> = construct 2i
+    %7:vec4<i32> = call %tint_mod_v4i32, %5, %6
+    store %3, %7
     ret
   }
 }
+%tint_mod_v4i32 = func(%lhs:vec4<i32>, %rhs:vec4<i32>):vec4<i32> {
+  $B3: {
+    %11:vec4<bool> = eq %rhs, vec4<i32>(0i)
+    %12:vec4<bool> = eq %lhs, vec4<i32>(-2147483648i)
+    %13:vec4<bool> = eq %rhs, vec4<i32>(-1i)
+    %14:vec4<bool> = and %12, %13
+    %15:vec4<bool> = or %11, %14
+    %16:vec4<i32> = select %rhs, vec4<i32>(1i), %15
+    %17:vec4<i32> = let %16
+    %18:vec4<i32> = div %lhs, %17
+    %19:vec4<i32> = mul %18, %17
+    %20:vec4<i32> = sub %lhs, %19
+    ret %20
+  }
+}
 
 unhandled variable address space
 ********************************************************************
diff --git a/test/tint/statements/compound_assign/vector/modulo.wgsl.expected.ir.msl b/test/tint/statements/compound_assign/vector/modulo.wgsl.expected.ir.msl
index f790983..391a18f 100644
--- a/test/tint/statements/compound_assign/vector/modulo.wgsl.expected.ir.msl
+++ b/test/tint/statements/compound_assign/vector/modulo.wgsl.expected.ir.msl
@@ -1,22 +1,37 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(16) {
   a:vec4<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %v:ptr<storage, S, read_write> = var @binding_point(0, 0)
 }
 
-%foo = func():void -> %b2 {
-  %b2 = block {
+%foo = func():void {
+  $B2: {
     %3:ptr<storage, vec4<i32>, read_write> = access %v, 0u
     %4:vec4<i32> = load %3
-    %5:vec4<i32> = mod %4, vec4<i32>(2i)
+    %5:vec4<i32> = call %tint_mod_v4i32, %4, vec4<i32>(2i)
     store %3, %5
     ret
   }
 }
+%tint_mod_v4i32 = func(%lhs:vec4<i32>, %rhs:vec4<i32>):vec4<i32> {
+  $B3: {
+    %9:vec4<bool> = eq %rhs, vec4<i32>(0i)
+    %10:vec4<bool> = eq %lhs, vec4<i32>(-2147483648i)
+    %11:vec4<bool> = eq %rhs, vec4<i32>(-1i)
+    %12:vec4<bool> = and %10, %11
+    %13:vec4<bool> = or %9, %12
+    %14:vec4<i32> = select %rhs, vec4<i32>(1i), %13
+    %15:vec4<i32> = let %14
+    %16:vec4<i32> = div %lhs, %15
+    %17:vec4<i32> = mul %16, %15
+    %18:vec4<i32> = sub %lhs, %17
+    ret %18
+  }
+}
 
 unhandled variable address space
 ********************************************************************
diff --git a/test/tint/statements/compound_assign/vector/or.wgsl.expected.ir.msl b/test/tint/statements/compound_assign/vector/or.wgsl.expected.ir.msl
index 699c875..c8f7bf1 100644
--- a/test/tint/statements/compound_assign/vector/or.wgsl.expected.ir.msl
+++ b/test/tint/statements/compound_assign/vector/or.wgsl.expected.ir.msl
@@ -1,15 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(16) {
   a:vec4<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %v:ptr<storage, S, read_write> = var @binding_point(0, 0)
 }
 
-%foo = func():void -> %b2 {
-  %b2 = block {
+%foo = func():void {
+  $B2: {
     %3:ptr<storage, vec4<i32>, read_write> = access %v, 0u
     %4:vec4<i32> = load %3
     %5:vec4<i32> = or %4, vec4<i32>(2i)
diff --git a/test/tint/statements/compound_assign/vector/plus-scalar.wgsl.expected.ir.msl b/test/tint/statements/compound_assign/vector/plus-scalar.wgsl.expected.ir.msl
index f09bd92..e5358ab 100644
--- a/test/tint/statements/compound_assign/vector/plus-scalar.wgsl.expected.ir.msl
+++ b/test/tint/statements/compound_assign/vector/plus-scalar.wgsl.expected.ir.msl
@@ -1,15 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(16) {
   a:vec4<f32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %v:ptr<storage, S, read_write> = var @binding_point(0, 0)
 }
 
-%foo = func():void -> %b2 {
-  %b2 = block {
+%foo = func():void {
+  $B2: {
     %3:ptr<storage, vec4<f32>, read_write> = access %v, 0u
     %4:vec4<f32> = load %3
     %5:vec4<f32> = add %4, 2.0f
diff --git a/test/tint/statements/compound_assign/vector/plus.wgsl.expected.ir.msl b/test/tint/statements/compound_assign/vector/plus.wgsl.expected.ir.msl
index b3ef263..6023992 100644
--- a/test/tint/statements/compound_assign/vector/plus.wgsl.expected.ir.msl
+++ b/test/tint/statements/compound_assign/vector/plus.wgsl.expected.ir.msl
@@ -1,15 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(16) {
   a:vec4<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %v:ptr<storage, S, read_write> = var @binding_point(0, 0)
 }
 
-%foo = func():void -> %b2 {
-  %b2 = block {
+%foo = func():void {
+  $B2: {
     %3:ptr<storage, vec4<i32>, read_write> = access %v, 0u
     %4:vec4<i32> = load %3
     %5:vec4<i32> = add %4, vec4<i32>(2i)
diff --git a/test/tint/statements/compound_assign/vector/shift_left.wgsl.expected.ir.msl b/test/tint/statements/compound_assign/vector/shift_left.wgsl.expected.ir.msl
index 10f65ae..176b2ed 100644
--- a/test/tint/statements/compound_assign/vector/shift_left.wgsl.expected.ir.msl
+++ b/test/tint/statements/compound_assign/vector/shift_left.wgsl.expected.ir.msl
@@ -1,19 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(16) {
   a:vec4<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %v:ptr<storage, S, read_write> = var @binding_point(0, 0)
 }
 
-%foo = func():void -> %b2 {
-  %b2 = block {
+%foo = func():void {
+  $B2: {
     %3:ptr<storage, vec4<i32>, read_write> = access %v, 0u
     %4:vec4<i32> = load %3
-    %5:vec4<i32> = shiftl %4, vec4<u32>(2u)
-    store %3, %5
+    %5:vec4<u32> = and vec4<u32>(2u), vec4<u32>(31u)
+    %6:vec4<i32> = shl %4, %5
+    store %3, %6
     ret
   }
 }
diff --git a/test/tint/statements/compound_assign/vector/shift_right.wgsl.expected.ir.msl b/test/tint/statements/compound_assign/vector/shift_right.wgsl.expected.ir.msl
index 0a81833..d5163d3 100644
--- a/test/tint/statements/compound_assign/vector/shift_right.wgsl.expected.ir.msl
+++ b/test/tint/statements/compound_assign/vector/shift_right.wgsl.expected.ir.msl
@@ -1,19 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(16) {
   a:vec4<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %v:ptr<storage, S, read_write> = var @binding_point(0, 0)
 }
 
-%foo = func():void -> %b2 {
-  %b2 = block {
+%foo = func():void {
+  $B2: {
     %3:ptr<storage, vec4<i32>, read_write> = access %v, 0u
     %4:vec4<i32> = load %3
-    %5:vec4<i32> = shiftr %4, vec4<u32>(2u)
-    store %3, %5
+    %5:vec4<u32> = and vec4<u32>(2u), vec4<u32>(31u)
+    %6:vec4<i32> = shr %4, %5
+    store %3, %6
     ret
   }
 }
diff --git a/test/tint/statements/compound_assign/vector/times-matrix.wgsl.expected.ir.msl b/test/tint/statements/compound_assign/vector/times-matrix.wgsl.expected.ir.msl
index 106f0e0..7b9ab58 100644
--- a/test/tint/statements/compound_assign/vector/times-matrix.wgsl.expected.ir.msl
+++ b/test/tint/statements/compound_assign/vector/times-matrix.wgsl.expected.ir.msl
@@ -1,15 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(16) {
   a:vec4<f32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %v:ptr<storage, S, read_write> = var @binding_point(0, 0)
 }
 
-%foo = func():void -> %b2 {
-  %b2 = block {
+%foo = func():void {
+  $B2: {
     %3:ptr<storage, vec4<f32>, read_write> = access %v, 0u
     %4:vec4<f32> = load %3
     %5:vec4<f32> = mul %4, mat4x4<f32>(vec4<f32>(0.0f))
diff --git a/test/tint/statements/compound_assign/vector/times-scalar.wgsl.expected.ir.msl b/test/tint/statements/compound_assign/vector/times-scalar.wgsl.expected.ir.msl
index c3598ed..bbaef43 100644
--- a/test/tint/statements/compound_assign/vector/times-scalar.wgsl.expected.ir.msl
+++ b/test/tint/statements/compound_assign/vector/times-scalar.wgsl.expected.ir.msl
@@ -1,15 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(16) {
   a:vec4<f32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %v:ptr<storage, S, read_write> = var @binding_point(0, 0)
 }
 
-%foo = func():void -> %b2 {
-  %b2 = block {
+%foo = func():void {
+  $B2: {
     %3:ptr<storage, vec4<f32>, read_write> = access %v, 0u
     %4:vec4<f32> = load %3
     %5:vec4<f32> = mul %4, 2.0f
diff --git a/test/tint/statements/compound_assign/vector/times.wgsl.expected.ir.msl b/test/tint/statements/compound_assign/vector/times.wgsl.expected.ir.msl
index 0d0e984..f77d642 100644
--- a/test/tint/statements/compound_assign/vector/times.wgsl.expected.ir.msl
+++ b/test/tint/statements/compound_assign/vector/times.wgsl.expected.ir.msl
@@ -1,15 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(16) {
   a:vec4<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %v:ptr<storage, S, read_write> = var @binding_point(0, 0)
 }
 
-%foo = func():void -> %b2 {
-  %b2 = block {
+%foo = func():void {
+  $B2: {
     %3:ptr<storage, vec4<i32>, read_write> = access %v, 0u
     %4:vec4<i32> = load %3
     %5:vec4<i32> = mul %4, vec4<i32>(2i)
diff --git a/test/tint/statements/compound_assign/vector/xor.wgsl.expected.ir.msl b/test/tint/statements/compound_assign/vector/xor.wgsl.expected.ir.msl
index 3212ca5..0f5c119 100644
--- a/test/tint/statements/compound_assign/vector/xor.wgsl.expected.ir.msl
+++ b/test/tint/statements/compound_assign/vector/xor.wgsl.expected.ir.msl
@@ -1,15 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(16) {
   a:vec4<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %v:ptr<storage, S, read_write> = var @binding_point(0, 0)
 }
 
-%foo = func():void -> %b2 {
-  %b2 = block {
+%foo = func():void {
+  $B2: {
     %3:ptr<storage, vec4<i32>, read_write> = access %v, 0u
     %4:vec4<i32> = load %3
     %5:vec4<i32> = xor %4, vec4<i32>(2i)
diff --git a/test/tint/statements/compound_assign/workgroup.wgsl.expected.ir.msl b/test/tint/statements/compound_assign/workgroup.wgsl.expected.ir.msl
index efdd3b1..e523a83 100644
--- a/test/tint/statements/compound_assign/workgroup.wgsl.expected.ir.msl
+++ b/test/tint/statements/compound_assign/workgroup.wgsl.expected.ir.msl
@@ -1,9 +1,26 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+threadgroup int a;
+threadgroup float4 b;
+threadgroup float2x2 c;
+void foo() {
+  a = tint_div_i32(a, 2);
+  b = (b * float4x4(float4(0.0f), float4(0.0f), float4(0.0f), float4(0.0f)));
+  c = (c * 2.0f);
+}
+int tint_div_i32(int lhs, int rhs) {
+  return (lhs / select(rhs, 1, ((rhs == 0) | ((lhs == (-2147483647 - 1)) & (rhs == -1)))));
+}
+program_source:4:17: error: program scope variable must reside in constant address space
+threadgroup int a;
+                ^
+program_source:5:20: error: program scope variable must reside in constant address space
+threadgroup float4 b;
+                   ^
+program_source:6:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 c;
+                     ^
+
diff --git a/test/tint/statements/decrement/array_element.wgsl.expected.ir.msl b/test/tint/statements/decrement/array_element.wgsl.expected.ir.msl
index 9f206da..3812675 100644
--- a/test/tint/statements/decrement/array_element.wgsl.expected.ir.msl
+++ b/test/tint/statements/decrement/array_element.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %a:ptr<storage, array<u32>, read_write> = var @binding_point(0, 0)
 }
 
-%tint_symbol = func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = func():void {
+  $B2: {
     %3:ptr<storage, u32, read_write> = access %a, 1i
     %4:u32 = load %3
     %5:u32 = sub %4, 1u
diff --git a/test/tint/statements/decrement/complex.wgsl.expected.ir.msl b/test/tint/statements/decrement/complex.wgsl.expected.ir.msl
index ab04e49..83c21fd 100644
--- a/test/tint/statements/decrement/complex.wgsl.expected.ir.msl
+++ b/test/tint/statements/decrement/complex.wgsl.expected.ir.msl
@@ -1,97 +1,103 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(16) {
   a:array<vec4<i32>, 4> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %tint_symbol:ptr<storage, array<S>, read_write> = var @binding_point(0, 0)
   %v:ptr<private, u32, read_write> = var
 }
 
-%idx1 = func():i32 -> %b2 {
-  %b2 = block {
+%idx1 = func():i32 {
+  $B2: {
     %4:u32 = load %v
     %5:u32 = sub %4, 1u
     store %v, %5
     ret 1i
   }
 }
-%idx2 = func():i32 -> %b3 {
-  %b3 = block {
+%idx2 = func():i32 {
+  $B3: {
     %7:u32 = load %v
     %8:u32 = sub %7, 1u
     store %v, %8
     ret 2i
   }
 }
-%idx3 = func():i32 -> %b4 {
-  %b4 = block {
+%idx3 = func():i32 {
+  $B4: {
     %10:u32 = load %v
     %11:u32 = sub %10, 1u
     store %v, %11
     ret 3i
   }
 }
-%idx4 = func():i32 -> %b5 {
-  %b5 = block {
+%idx4 = func():i32 {
+  $B5: {
     %13:u32 = load %v
     %14:u32 = sub %13, 1u
     store %v, %14
     ret 4i
   }
 }
-%idx5 = func():i32 -> %b6 {
-  %b6 = block {
+%idx5 = func():i32 {
+  $B6: {
     %16:u32 = load %v
     %17:u32 = sub %16, 1u
     store %v, %17
     ret 0i
   }
 }
-%idx6 = func():i32 -> %b7 {
-  %b7 = block {
+%idx6 = func():i32 {
+  $B7: {
     %19:u32 = load %v
     %20:u32 = sub %19, 1u
     store %v, %20
     ret 2i
   }
 }
-%tint_symbol_1 = func():void -> %b8 {
-  %b8 = block {
-    loop [i: %b9, b: %b10, c: %b11] {  # loop_1
-      %b9 = block {  # initializer
+%tint_symbol_1 = func():void {
+  $B8: {
+    loop [i: $B9, b: $B10, c: $B11] {  # loop_1
+      $B9: {  # initializer
         %22:i32 = call %idx1
-        %23:i32 = call %idx2
-        %24:ptr<storage, vec4<i32>, read_write> = access %tint_symbol, %22, 0u, %23
-        %25:i32 = call %idx3
-        %26:i32 = load_vector_element %24, %25
-        %27:i32 = sub %26, 1i
-        store_vector_element %24, %25, %27
-        next_iteration %b10
+        %23:i32 = let %22
+        %24:i32 = call %idx2
+        %25:ptr<storage, vec4<i32>, read_write> = access %tint_symbol, %23, 0u, %24
+        %26:ptr<storage, vec4<i32>, read_write> = let %25
+        %27:i32 = call %idx3
+        %28:i32 = let %27
+        %29:i32 = load_vector_element %26, %28
+        %30:i32 = sub %29, 1i
+        store_vector_element %26, %28, %30
+        next_iteration  # -> $B10
       }
-      %b10 = block {  # body
-        %28:u32 = load %v
-        %29:bool = lt %28, 10u
-        if %29 [t: %b12, f: %b13] {  # if_1
-          %b12 = block {  # true
+      $B10: {  # body
+        %31:u32 = load %v
+        %32:bool = lt %31, 10u
+        if %32 [t: $B12, f: $B13] {  # if_1
+          $B12: {  # true
             exit_if  # if_1
           }
-          %b13 = block {  # false
+          $B13: {  # false
             exit_loop  # loop_1
           }
         }
-        continue %b11
+        continue  # -> $B11
       }
-      %b11 = block {  # continuing
-        %30:i32 = call %idx4
-        %31:i32 = call %idx5
-        %32:ptr<storage, vec4<i32>, read_write> = access %tint_symbol, %30, 0u, %31
-        %33:i32 = call %idx6
-        %34:i32 = load_vector_element %32, %33
-        %35:i32 = sub %34, 1i
-        store_vector_element %32, %33, %35
-        next_iteration %b10
+      $B11: {  # continuing
+        %33:i32 = call %idx4
+        %34:i32 = let %33
+        %35:i32 = call %idx5
+        %36:ptr<storage, vec4<i32>, read_write> = access %tint_symbol, %34, 0u, %35
+        %37:ptr<storage, vec4<i32>, read_write> = let %36
+        %38:i32 = call %idx6
+        %39:i32 = let %38
+        %40:i32 = load_vector_element %37, %39
+        %41:i32 = sub %40, 1i
+        store_vector_element %37, %39, %41
+        next_iteration  # -> $B10
       }
     }
     ret
diff --git a/test/tint/statements/decrement/for_loop_continuing.wgsl.expected.ir.msl b/test/tint/statements/decrement/for_loop_continuing.wgsl.expected.ir.msl
index 321af9a..238e237 100644
--- a/test/tint/statements/decrement/for_loop_continuing.wgsl.expected.ir.msl
+++ b/test/tint/statements/decrement/for_loop_continuing.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %i:ptr<storage, u32, read_write> = var @binding_point(0, 0)
 }
 
-%tint_symbol = func():void -> %b2 {
-  %b2 = block {
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+%tint_symbol = func():void {
+  $B2: {
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %3:u32 = load %i
         %4:bool = lt %3, 10u
-        if %4 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %4 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
+      $B4: {  # continuing
         %5:u32 = load %i
         %6:u32 = sub %5, 1u
         store %i, %6
-        next_iteration %b3
+        next_iteration  # -> $B3
       }
     }
     ret
diff --git a/test/tint/statements/decrement/for_loop_initializer.wgsl.expected.ir.msl b/test/tint/statements/decrement/for_loop_initializer.wgsl.expected.ir.msl
index 5467d85..1288b7a 100644
--- a/test/tint/statements/decrement/for_loop_initializer.wgsl.expected.ir.msl
+++ b/test/tint/statements/decrement/for_loop_initializer.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %i:ptr<storage, u32, read_write> = var @binding_point(0, 0)
 }
 
-%tint_symbol = func():void -> %b2 {
-  %b2 = block {
-    loop [i: %b3, b: %b4] {  # loop_1
-      %b3 = block {  # initializer
+%tint_symbol = func():void {
+  $B2: {
+    loop [i: $B3, b: $B4] {  # loop_1
+      $B3: {  # initializer
         %3:u32 = load %i
         %4:u32 = sub %3, 1u
         store %i, %4
-        next_iteration %b4
+        next_iteration  # -> $B4
       }
-      %b4 = block {  # body
+      $B4: {  # body
         %5:u32 = load %i
         %6:bool = lt %5, 10u
-        if %6 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %6 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        continue %b7
+        continue  # -> $B7
       }
     }
     ret
diff --git a/test/tint/statements/decrement/private.wgsl.expected.ir.msl b/test/tint/statements/decrement/private.wgsl.expected.ir.msl
index efdd3b1..45fa6de 100644
--- a/test/tint/statements/decrement/private.wgsl.expected.ir.msl
+++ b/test/tint/statements/decrement/private.wgsl.expected.ir.msl
@@ -1,9 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread int i = 0;
+void tint_symbol() {
+  i = (i - 1);
+}
+program_source:4:12: error: program scope variable must reside in constant address space
+thread int i = 0;
+           ^
+
diff --git a/test/tint/statements/decrement/storage.wgsl.expected.ir.msl b/test/tint/statements/decrement/storage.wgsl.expected.ir.msl
index 920e263..2794193 100644
--- a/test/tint/statements/decrement/storage.wgsl.expected.ir.msl
+++ b/test/tint/statements/decrement/storage.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %i:ptr<storage, u32, read_write> = var @binding_point(0, 0)
 }
 
-%tint_symbol = func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = func():void {
+  $B2: {
     %3:u32 = load %i
     %4:u32 = sub %3, 1u
     store %i, %4
diff --git a/test/tint/statements/decrement/vector_component.wgsl.expected.ir.msl b/test/tint/statements/decrement/vector_component.wgsl.expected.ir.msl
index 808227b..8147c38 100644
--- a/test/tint/statements/decrement/vector_component.wgsl.expected.ir.msl
+++ b/test/tint/statements/decrement/vector_component.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %a:ptr<storage, vec4<u32>, read_write> = var @binding_point(0, 0)
 }
 
-%tint_symbol = func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = func():void {
+  $B2: {
     %3:u32 = load_vector_element %a, 1i
     %4:u32 = sub %3, 1u
     store_vector_element %a, 1i, %4
diff --git a/test/tint/statements/decrement/workgroup.wgsl.expected.ir.msl b/test/tint/statements/decrement/workgroup.wgsl.expected.ir.msl
index efdd3b1..8be9fea 100644
--- a/test/tint/statements/decrement/workgroup.wgsl.expected.ir.msl
+++ b/test/tint/statements/decrement/workgroup.wgsl.expected.ir.msl
@@ -1,9 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+threadgroup int i;
+void tint_symbol() {
+  i = (i - 1);
+}
+program_source:4:17: error: program scope variable must reside in constant address space
+threadgroup int i;
+                ^
+
diff --git a/test/tint/statements/discard/atomic_cmpxchg.wgsl.expected.ir.msl b/test/tint/statements/discard/atomic_cmpxchg.wgsl.expected.ir.msl
index 501e33c..69ed314 100644
--- a/test/tint/statements/discard/atomic_cmpxchg.wgsl.expected.ir.msl
+++ b/test/tint/statements/discard/atomic_cmpxchg.wgsl.expected.ir.msl
@@ -1,29 +1,45 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: __atomic_compare_exchange_result_i32 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: __atomic_compare_exchange_result_i32 = struct @align(4) {
   old_value:i32 @offset(0)
   exchanged:bool @offset(4)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %a:ptr<storage, atomic<i32>, read_write> = var @binding_point(0, 0)
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%foo = @fragment func():i32 [@location(0)] -> %b2 {
-  %b2 = block {
-    discard
+%foo = @fragment func():i32 [@location(0)] {
+  $B2: {
+    store %continue_execution, false
     %x:ptr<function, i32, read_write> = var, 0i
-    %result:__atomic_compare_exchange_result_i32 = atomicCompareExchangeWeak %a, 0i, 1i
-    %5:bool = access %result, 1u
-    if %5 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %6:i32 = access %result, 0u
-        store %x, %6
-        exit_if  # if_1
+    %5:bool = load %continue_execution
+    %6:__atomic_compare_exchange_result_i32 = if %5 [t: $B3] {  # if_1
+      $B3: {  # true
+        %7:__atomic_compare_exchange_result_i32 = atomicCompareExchangeWeak %a, 0i, 1i
+        exit_if %7  # if_1
+      }
+      # implicit false block: exit_if undef
+    }
+    %result:__atomic_compare_exchange_result_i32 = let %6
+    %9:bool = access %result, 1u
+    if %9 [t: $B4] {  # if_2
+      $B4: {  # true
+        %10:i32 = access %result, 0u
+        store %x, %10
+        exit_if  # if_2
       }
     }
-    %7:i32 = load %x
-    ret %7
+    %11:i32 = load %x
+    %12:bool = load %continue_execution
+    %13:bool = eq %12, false
+    if %13 [t: $B5] {  # if_3
+      $B5: {  # true
+        terminate_invocation
+      }
+    }
+    ret %11
   }
 }
 
diff --git a/test/tint/statements/discard/atomic_in_for_loop_continuing.wgsl.expected.ir.msl b/test/tint/statements/discard/atomic_in_for_loop_continuing.wgsl.expected.ir.msl
index edb6355..4a13f56 100644
--- a/test/tint/statements/discard/atomic_in_for_loop_continuing.wgsl.expected.ir.msl
+++ b/test/tint/statements/discard/atomic_in_for_loop_continuing.wgsl.expected.ir.msl
@@ -1,56 +1,81 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %t:ptr<handle, texture_2d<f32>, read> = var @binding_point(0, 0)
   %s:ptr<handle, sampler, read> = var @binding_point(0, 1)
   %a:ptr<storage, atomic<i32>, read_write> = var @binding_point(0, 2)
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%foo = @fragment func(%in:f32 [@location(0)], %coord:vec2<f32> [@location(1)]):i32 [@location(0)] -> %b2 {
-  %b2 = block {
-    %7:bool = eq %in, 0.0f
-    if %7 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        discard
+%foo = @fragment func(%in:f32 [@location(0)], %coord:vec2<f32> [@location(1)]):i32 [@location(0)] {
+  $B2: {
+    %8:bool = eq %in, 0.0f
+    if %8 [t: $B3] {  # if_1
+      $B3: {  # true
+        store %continue_execution, false
         exit_if  # if_1
       }
     }
-    %8:texture_2d<f32> = load %t
-    %9:sampler = load %s
-    %10:vec4<f32> = textureSample %8, %9, %coord
-    %11:f32 = access %10, 0u
-    %12:i32 = convert %11
-    %result:ptr<function, i32, read_write> = var, %12
-    loop [i: %b4, b: %b5, c: %b6] {  # loop_1
-      %b4 = block {  # initializer
+    %9:texture_2d<f32> = load %t
+    %10:sampler = load %s
+    %11:vec4<f32> = textureSample %9, %10, %coord
+    %12:f32 = access %11, 0u
+    %13:i32 = call %tint_f32_to_i32, %12
+    %result:ptr<function, i32, read_write> = var, %13
+    loop [i: $B4, b: $B5, c: $B6] {  # loop_1
+      $B4: {  # initializer
         %i:ptr<function, i32, read_write> = var, 0i
-        next_iteration %b5
+        next_iteration  # -> $B5
       }
-      %b5 = block {  # body
-        %15:i32 = load %i
-        %16:bool = lt %15, 10i
-        if %16 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
+      $B5: {  # body
+        %17:i32 = load %i
+        %18:bool = lt %17, 10i
+        if %18 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
             exit_if  # if_2
           }
-          %b8 = block {  # false
+          $B8: {  # false
             exit_loop  # loop_1
           }
         }
-        %17:i32 = load %i
-        %18:i32 = load %result
-        %19:i32 = add %18, %17
-        store %result, %19
-        continue %b6
+        %19:i32 = load %i
+        %20:i32 = load %result
+        %21:i32 = add %20, %19
+        store %result, %21
+        continue  # -> $B6
       }
-      %b6 = block {  # continuing
-        %20:i32 = atomicAdd %a, 1i
-        store %i, %20
-        next_iteration %b5
+      $B6: {  # continuing
+        %22:bool = load %continue_execution
+        %23:i32 = if %22 [t: $B9] {  # if_3
+          $B9: {  # true
+            %24:i32 = atomicAdd %a, 1i
+            exit_if %24  # if_3
+          }
+          # implicit false block: exit_if undef
+        }
+        store %i, %23
+        next_iteration  # -> $B5
       }
     }
-    %21:i32 = load %result
-    ret %21
+    %25:i32 = load %result
+    %26:bool = load %continue_execution
+    %27:bool = eq %26, false
+    if %27 [t: $B10] {  # if_4
+      $B10: {  # true
+        terminate_invocation
+      }
+    }
+    ret %25
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B11: {
+    %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
   }
 }
 
diff --git a/test/tint/statements/discard/discard_return.wgsl.expected.ir.msl b/test/tint/statements/discard/discard_return.wgsl.expected.ir.msl
new file mode 100644
index 0000000..2e04a91
--- /dev/null
+++ b/test/tint/statements/discard/discard_return.wgsl.expected.ir.msl
@@ -0,0 +1,13 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool continue_execution = true;
+void f() {
+  continue_execution = false;
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread bool continue_execution = true;
+            ^
+
diff --git a/test/tint/statements/discard/helper_functions.wgsl.expected.ir.msl b/test/tint/statements/discard/helper_functions.wgsl.expected.ir.msl
index 8f6bba6..3c42091 100644
--- a/test/tint/statements/discard/helper_functions.wgsl.expected.ir.msl
+++ b/test/tint/statements/discard/helper_functions.wgsl.expected.ir.msl
@@ -1,34 +1,49 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %non_uniform_global:ptr<storage, i32, read_write> = var @binding_point(0, 0)
   %output:ptr<storage, f32, read_write> = var @binding_point(0, 1)
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%foo = func():void -> %b2 {
-  %b2 = block {
-    %4:i32 = load %non_uniform_global
-    %5:bool = lt %4, 0i
-    if %5 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        discard
+%foo = func():void {
+  $B2: {
+    %5:i32 = load %non_uniform_global
+    %6:bool = lt %5, 0i
+    if %6 [t: $B3] {  # if_1
+      $B3: {  # true
+        store %continue_execution, false
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%bar = func():void -> %b4 {
-  %b4 = block {
-    %7:f32 = dpdx 1.0f
-    store %output, %7
+%bar = func():void {
+  $B4: {
+    %8:f32 = dpdx 1.0f
+    %9:f32 = let %8
+    %10:bool = load %continue_execution
+    if %10 [t: $B5] {  # if_2
+      $B5: {  # true
+        store %output, %9
+        exit_if  # if_2
+      }
+    }
     ret
   }
 }
-%tint_symbol = @fragment func():void -> %b5 {
-  %b5 = block {
-    %9:void = call %foo
-    %10:void = call %bar
+%tint_symbol = @fragment func():void {
+  $B6: {
+    %12:void = call %foo
+    %13:void = call %bar
+    %14:bool = load %continue_execution
+    %15:bool = eq %14, false
+    if %15 [t: $B7] {  # if_3
+      $B7: {  # true
+        terminate_invocation
+      }
+    }
     ret
   }
 }
diff --git a/test/tint/statements/discard/if_discard_return.wgsl.expected.ir.msl b/test/tint/statements/discard/if_discard_return.wgsl.expected.ir.msl
new file mode 100644
index 0000000..361b224
--- /dev/null
+++ b/test/tint/statements/discard/if_discard_return.wgsl.expected.ir.msl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool continue_execution = true;
+void f(bool cond) {
+  if (cond) {
+    continue_execution = false;
+    return;
+  }
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread bool continue_execution = true;
+            ^
+
diff --git a/test/tint/statements/discard/loop_discard_return.wgsl.expected.ir.msl b/test/tint/statements/discard/loop_discard_return.wgsl.expected.ir.msl
new file mode 100644
index 0000000..e9dfc0a
--- /dev/null
+++ b/test/tint/statements/discard/loop_discard_return.wgsl.expected.ir.msl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool continue_execution = true;
+void f() {
+  {
+    while(true) {
+      continue_execution = false;
+      return;
+    }
+  }
+  /* unreachable */
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread bool continue_execution = true;
+            ^
+
diff --git a/test/tint/statements/discard/multiple_returns.wgsl.expected.ir.msl b/test/tint/statements/discard/multiple_returns.wgsl.expected.ir.msl
index 06df248..b5636b4 100644
--- a/test/tint/statements/discard/multiple_returns.wgsl.expected.ir.msl
+++ b/test/tint/statements/discard/multiple_returns.wgsl.expected.ir.msl
@@ -1,55 +1,92 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %non_uniform_global:ptr<storage, i32, read_write> = var @binding_point(0, 0)
   %output:ptr<storage, f32, read_write> = var @binding_point(0, 1)
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%tint_symbol = @fragment func():void -> %b2 {
-  %b2 = block {
-    %4:i32 = load %non_uniform_global
-    %5:bool = lt %4, 0i
-    if %5 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        discard
+%tint_symbol = @fragment func():void {
+  $B2: {
+    %5:i32 = load %non_uniform_global
+    %6:bool = lt %5, 0i
+    if %6 [t: $B3] {  # if_1
+      $B3: {  # true
+        store %continue_execution, false
         exit_if  # if_1
       }
     }
-    %6:f32 = dpdx 1.0f
-    store %output, %6
-    %7:f32 = load %output
-    %8:bool = lt %7, 0.0f
-    if %8 [t: %b4] {  # if_2
-      %b4 = block {  # true
+    %7:f32 = dpdx 1.0f
+    %8:f32 = let %7
+    %9:bool = load %continue_execution
+    if %9 [t: $B4] {  # if_2
+      $B4: {  # true
+        store %output, %8
+        exit_if  # if_2
+      }
+    }
+    %10:f32 = load %output
+    %11:bool = lt %10, 0.0f
+    if %11 [t: $B5] {  # if_3
+      $B5: {  # true
         %i:ptr<function, i32, read_write> = var, 0i
-        loop [b: %b5, c: %b6] {  # loop_1
-          %b5 = block {  # body
-            %10:f32 = load %output
-            %11:i32 = load %i
-            %12:f32 = convert %11
-            %13:bool = gt %10, %12
-            if %13 [t: %b7] {  # if_3
-              %b7 = block {  # true
-                %14:i32 = load %i
-                %15:f32 = convert %14
-                store %output, %15
+        loop [b: $B6, c: $B7] {  # loop_1
+          $B6: {  # body
+            %13:f32 = load %output
+            %14:f32 = let %13
+            %15:i32 = load %i
+            %16:f32 = convert %15
+            %17:bool = gt %14, %16
+            if %17 [t: $B8] {  # if_4
+              $B8: {  # true
+                %18:i32 = load %i
+                %19:f32 = convert %18
+                %20:f32 = let %19
+                %21:bool = load %continue_execution
+                if %21 [t: $B9] {  # if_5
+                  $B9: {  # true
+                    store %output, %20
+                    exit_if  # if_5
+                  }
+                }
+                %22:bool = load %continue_execution
+                %23:bool = eq %22, false
+                if %23 [t: $B10] {  # if_6
+                  $B10: {  # true
+                    terminate_invocation
+                  }
+                }
                 ret
               }
             }
-            continue %b6
+            continue  # -> $B7
           }
-          %b6 = block {  # continuing
-            %16:i32 = load %i
-            %17:i32 = add %16, 1i
-            store %i, %17
-            %18:i32 = load %i
-            %19:bool = eq %18, 5i
-            break_if %19 %b5
+          $B7: {  # continuing
+            %24:i32 = load %i
+            %25:i32 = add %24, 1i
+            store %i, %25
+            %26:i32 = load %i
+            %27:bool = eq %26, 5i
+            break_if %27  # -> [t: exit_loop loop_1, f: $B6]
+          }
+        }
+        %28:bool = load %continue_execution
+        %29:bool = eq %28, false
+        if %29 [t: $B11] {  # if_7
+          $B11: {  # true
+            terminate_invocation
           }
         }
         ret
       }
     }
+    %30:bool = load %continue_execution
+    %31:bool = eq %30, false
+    if %31 [t: $B12] {  # if_8
+      $B12: {  # true
+        terminate_invocation
+      }
+    }
     ret
   }
 }
diff --git a/test/tint/statements/discard/nested_return.wgsl.expected.ir.msl b/test/tint/statements/discard/nested_return.wgsl.expected.ir.msl
index 56b1a4b..0e324d8 100644
--- a/test/tint/statements/discard/nested_return.wgsl.expected.ir.msl
+++ b/test/tint/statements/discard/nested_return.wgsl.expected.ir.msl
@@ -1,19 +1,27 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %non_uniform_global:ptr<storage, i32, read_write> = var @binding_point(0, 0)
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%tint_symbol = @fragment func():void -> %b2 {
-  %b2 = block {
-    %3:i32 = load %non_uniform_global
-    %4:bool = lt %3, 0i
-    if %4 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        discard
+%tint_symbol = @fragment func():void {
+  $B2: {
+    %4:i32 = load %non_uniform_global
+    %5:bool = lt %4, 0i
+    if %5 [t: $B3] {  # if_1
+      $B3: {  # true
+        store %continue_execution, false
         exit_if  # if_1
       }
     }
+    %6:bool = load %continue_execution
+    %7:bool = eq %6, false
+    if %7 [t: $B4] {  # if_2
+      $B4: {  # true
+        terminate_invocation
+      }
+    }
     ret
   }
 }
diff --git a/test/tint/statements/discard/non_uniform.wgsl.expected.ir.msl b/test/tint/statements/discard/non_uniform.wgsl.expected.ir.msl
index d0a0ee9..b3ed894 100644
--- a/test/tint/statements/discard/non_uniform.wgsl.expected.ir.msl
+++ b/test/tint/statements/discard/non_uniform.wgsl.expected.ir.msl
@@ -1,22 +1,37 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %non_uniform_global:ptr<storage, i32, read_write> = var @binding_point(0, 0)
   %output:ptr<storage, f32, read_write> = var @binding_point(0, 1)
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%tint_symbol = @fragment func():void -> %b2 {
-  %b2 = block {
-    %4:i32 = load %non_uniform_global
-    %5:bool = lt %4, 0i
-    if %5 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        discard
+%tint_symbol = @fragment func():void {
+  $B2: {
+    %5:i32 = load %non_uniform_global
+    %6:bool = lt %5, 0i
+    if %6 [t: $B3] {  # if_1
+      $B3: {  # true
+        store %continue_execution, false
         exit_if  # if_1
       }
     }
-    %6:f32 = dpdx 1.0f
-    store %output, %6
+    %7:f32 = dpdx 1.0f
+    %8:f32 = let %7
+    %9:bool = load %continue_execution
+    if %9 [t: $B4] {  # if_2
+      $B4: {  # true
+        store %output, %8
+        exit_if  # if_2
+      }
+    }
+    %10:bool = load %continue_execution
+    %11:bool = eq %10, false
+    if %11 [t: $B5] {  # if_3
+      $B5: {  # true
+        terminate_invocation
+      }
+    }
     ret
   }
 }
diff --git a/test/tint/statements/for/complex.wgsl.expected.ir.msl b/test/tint/statements/for/complex.wgsl.expected.ir.msl
index cdbf128..0e49291 100644
--- a/test/tint/statements/for/complex.wgsl.expected.ir.msl
+++ b/test/tint/statements/for/complex.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
+../../src/tint/lang/msl/writer/printer/printer.cc:385 internal compiler error: Switch() matched no cases. Type: tint::core::ir::If
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/statements/increment/array_element.wgsl.expected.ir.msl b/test/tint/statements/increment/array_element.wgsl.expected.ir.msl
index 6ed4076..9795a66 100644
--- a/test/tint/statements/increment/array_element.wgsl.expected.ir.msl
+++ b/test/tint/statements/increment/array_element.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %a:ptr<storage, array<u32>, read_write> = var @binding_point(0, 0)
 }
 
-%tint_symbol = func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = func():void {
+  $B2: {
     %3:ptr<storage, u32, read_write> = access %a, 1i
     %4:u32 = load %3
     %5:u32 = add %4, 1u
diff --git a/test/tint/statements/increment/complex.wgsl.expected.ir.msl b/test/tint/statements/increment/complex.wgsl.expected.ir.msl
index cfb842a..da42c84 100644
--- a/test/tint/statements/increment/complex.wgsl.expected.ir.msl
+++ b/test/tint/statements/increment/complex.wgsl.expected.ir.msl
@@ -1,97 +1,103 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(16) {
   a:array<vec4<i32>, 4> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %tint_symbol:ptr<storage, array<S>, read_write> = var @binding_point(0, 0)
   %v:ptr<private, u32, read_write> = var
 }
 
-%idx1 = func():i32 -> %b2 {
-  %b2 = block {
+%idx1 = func():i32 {
+  $B2: {
     %4:u32 = load %v
     %5:u32 = add %4, 1u
     store %v, %5
     ret 1i
   }
 }
-%idx2 = func():i32 -> %b3 {
-  %b3 = block {
+%idx2 = func():i32 {
+  $B3: {
     %7:u32 = load %v
     %8:u32 = add %7, 1u
     store %v, %8
     ret 2i
   }
 }
-%idx3 = func():i32 -> %b4 {
-  %b4 = block {
+%idx3 = func():i32 {
+  $B4: {
     %10:u32 = load %v
     %11:u32 = add %10, 1u
     store %v, %11
     ret 3i
   }
 }
-%idx4 = func():i32 -> %b5 {
-  %b5 = block {
+%idx4 = func():i32 {
+  $B5: {
     %13:u32 = load %v
     %14:u32 = add %13, 1u
     store %v, %14
     ret 4i
   }
 }
-%idx5 = func():i32 -> %b6 {
-  %b6 = block {
+%idx5 = func():i32 {
+  $B6: {
     %16:u32 = load %v
     %17:u32 = add %16, 1u
     store %v, %17
     ret 0i
   }
 }
-%idx6 = func():i32 -> %b7 {
-  %b7 = block {
+%idx6 = func():i32 {
+  $B7: {
     %19:u32 = load %v
     %20:u32 = add %19, 1u
     store %v, %20
     ret 2i
   }
 }
-%tint_symbol_1 = func():void -> %b8 {
-  %b8 = block {
-    loop [i: %b9, b: %b10, c: %b11] {  # loop_1
-      %b9 = block {  # initializer
+%tint_symbol_1 = func():void {
+  $B8: {
+    loop [i: $B9, b: $B10, c: $B11] {  # loop_1
+      $B9: {  # initializer
         %22:i32 = call %idx1
-        %23:i32 = call %idx2
-        %24:ptr<storage, vec4<i32>, read_write> = access %tint_symbol, %22, 0u, %23
-        %25:i32 = call %idx3
-        %26:i32 = load_vector_element %24, %25
-        %27:i32 = add %26, 1i
-        store_vector_element %24, %25, %27
-        next_iteration %b10
+        %23:i32 = let %22
+        %24:i32 = call %idx2
+        %25:ptr<storage, vec4<i32>, read_write> = access %tint_symbol, %23, 0u, %24
+        %26:ptr<storage, vec4<i32>, read_write> = let %25
+        %27:i32 = call %idx3
+        %28:i32 = let %27
+        %29:i32 = load_vector_element %26, %28
+        %30:i32 = add %29, 1i
+        store_vector_element %26, %28, %30
+        next_iteration  # -> $B10
       }
-      %b10 = block {  # body
-        %28:u32 = load %v
-        %29:bool = lt %28, 10u
-        if %29 [t: %b12, f: %b13] {  # if_1
-          %b12 = block {  # true
+      $B10: {  # body
+        %31:u32 = load %v
+        %32:bool = lt %31, 10u
+        if %32 [t: $B12, f: $B13] {  # if_1
+          $B12: {  # true
             exit_if  # if_1
           }
-          %b13 = block {  # false
+          $B13: {  # false
             exit_loop  # loop_1
           }
         }
-        continue %b11
+        continue  # -> $B11
       }
-      %b11 = block {  # continuing
-        %30:i32 = call %idx4
-        %31:i32 = call %idx5
-        %32:ptr<storage, vec4<i32>, read_write> = access %tint_symbol, %30, 0u, %31
-        %33:i32 = call %idx6
-        %34:i32 = load_vector_element %32, %33
-        %35:i32 = add %34, 1i
-        store_vector_element %32, %33, %35
-        next_iteration %b10
+      $B11: {  # continuing
+        %33:i32 = call %idx4
+        %34:i32 = let %33
+        %35:i32 = call %idx5
+        %36:ptr<storage, vec4<i32>, read_write> = access %tint_symbol, %34, 0u, %35
+        %37:ptr<storage, vec4<i32>, read_write> = let %36
+        %38:i32 = call %idx6
+        %39:i32 = let %38
+        %40:i32 = load_vector_element %37, %39
+        %41:i32 = add %40, 1i
+        store_vector_element %37, %39, %41
+        next_iteration  # -> $B10
       }
     }
     ret
diff --git a/test/tint/statements/increment/for_loop_continuing.wgsl.expected.ir.msl b/test/tint/statements/increment/for_loop_continuing.wgsl.expected.ir.msl
index d3167ff..f54b041 100644
--- a/test/tint/statements/increment/for_loop_continuing.wgsl.expected.ir.msl
+++ b/test/tint/statements/increment/for_loop_continuing.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %i:ptr<storage, u32, read_write> = var @binding_point(0, 0)
 }
 
-%tint_symbol = func():void -> %b2 {
-  %b2 = block {
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+%tint_symbol = func():void {
+  $B2: {
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %3:u32 = load %i
         %4:bool = lt %3, 10u
-        if %4 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %4 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
+      $B4: {  # continuing
         %5:u32 = load %i
         %6:u32 = add %5, 1u
         store %i, %6
-        next_iteration %b3
+        next_iteration  # -> $B3
       }
     }
     ret
diff --git a/test/tint/statements/increment/for_loop_initializer.wgsl.expected.ir.msl b/test/tint/statements/increment/for_loop_initializer.wgsl.expected.ir.msl
index c50c6b8..f24a049 100644
--- a/test/tint/statements/increment/for_loop_initializer.wgsl.expected.ir.msl
+++ b/test/tint/statements/increment/for_loop_initializer.wgsl.expected.ir.msl
@@ -1,30 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %i:ptr<storage, u32, read_write> = var @binding_point(0, 0)
 }
 
-%tint_symbol = func():void -> %b2 {
-  %b2 = block {
-    loop [i: %b3, b: %b4] {  # loop_1
-      %b3 = block {  # initializer
+%tint_symbol = func():void {
+  $B2: {
+    loop [i: $B3, b: $B4] {  # loop_1
+      $B3: {  # initializer
         %3:u32 = load %i
         %4:u32 = add %3, 1u
         store %i, %4
-        next_iteration %b4
+        next_iteration  # -> $B4
       }
-      %b4 = block {  # body
+      $B4: {  # body
         %5:u32 = load %i
         %6:bool = lt %5, 10u
-        if %6 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %6 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        continue %b7
+        continue  # -> $B7
       }
     }
     ret
diff --git a/test/tint/statements/increment/private.wgsl.expected.ir.msl b/test/tint/statements/increment/private.wgsl.expected.ir.msl
index efdd3b1..550fb50 100644
--- a/test/tint/statements/increment/private.wgsl.expected.ir.msl
+++ b/test/tint/statements/increment/private.wgsl.expected.ir.msl
@@ -1,9 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread int i = 0;
+void tint_symbol() {
+  i = (i + 1);
+}
+program_source:4:12: error: program scope variable must reside in constant address space
+thread int i = 0;
+           ^
+
diff --git a/test/tint/statements/increment/storage.wgsl.expected.ir.msl b/test/tint/statements/increment/storage.wgsl.expected.ir.msl
index d2d8eb5..b554868 100644
--- a/test/tint/statements/increment/storage.wgsl.expected.ir.msl
+++ b/test/tint/statements/increment/storage.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %i:ptr<storage, u32, read_write> = var @binding_point(0, 0)
 }
 
-%tint_symbol = func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = func():void {
+  $B2: {
     %3:u32 = load %i
     %4:u32 = add %3, 1u
     store %i, %4
diff --git a/test/tint/statements/increment/vector_component.wgsl.expected.ir.msl b/test/tint/statements/increment/vector_component.wgsl.expected.ir.msl
index d155d5d..28047f5 100644
--- a/test/tint/statements/increment/vector_component.wgsl.expected.ir.msl
+++ b/test/tint/statements/increment/vector_component.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %a:ptr<storage, vec4<u32>, read_write> = var @binding_point(0, 0)
 }
 
-%tint_symbol = func():void -> %b2 {
-  %b2 = block {
+%tint_symbol = func():void {
+  $B2: {
     %3:u32 = load_vector_element %a, 1i
     %4:u32 = add %3, 1u
     store_vector_element %a, 1i, %4
diff --git a/test/tint/statements/increment/workgroup.wgsl.expected.ir.msl b/test/tint/statements/increment/workgroup.wgsl.expected.ir.msl
index efdd3b1..29d6518 100644
--- a/test/tint/statements/increment/workgroup.wgsl.expected.ir.msl
+++ b/test/tint/statements/increment/workgroup.wgsl.expected.ir.msl
@@ -1,9 +1,13 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+threadgroup int i;
+void tint_symbol() {
+  i = (i + 1);
+}
+program_source:4:17: error: program scope variable must reside in constant address space
+threadgroup int i;
+                ^
+
diff --git a/test/tint/struct/type_initializer.wgsl.expected.ir.msl b/test/tint/struct/type_initializer.wgsl.expected.ir.msl
index 28251dc..5ceced0 100644
--- a/test/tint/struct/type_initializer.wgsl.expected.ir.msl
+++ b/test/tint/struct/type_initializer.wgsl.expected.ir.msl
@@ -1,9 +1,75 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct S1 {
+  int a;
+  int b;
+  int c;
+  int d;
+};
+struct S2 {
+  int e;
+  S1 f;
+};
+struct S3 {
+  int g;
+  S1 h;
+  S2 i;
+};
+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];
+};
+
+struct T {
+  tint_array<int, 2> a;
+};
+
+kernel void tint_symbol() {
+  int const x = 42;
+  S1 const empty = S1{};
+  S1 const nonempty = S1{.a=1, .b=2, .c=3, .d=4};
+  S1 const nonempty_with_expr = {.a=1, .b=x, .c=(x + 1), .d=nonempty.d};
+  S3 const nested_empty = S3{};
+  S3 const nested_nonempty = S3{.g=1, .h=S1{.a=2, .b=3, .c=4, .d=5}, .i=S2{.e=6, .f=S1{.a=7, .b=8, .c=9, .d=10}}};
+  S1 const v = {.a=2, .b=x, .c=(x + 1), .d=nested_nonempty.i.f.d};
+  S3 const nested_nonempty_with_expr = {.g=1, .h=v, .i={.e=6, .f=nonempty}};
+  int const subexpr_empty = 0;
+  int const subexpr_nonempty = 2;
+  int const subexpr_nonempty_with_expr = {.a=1, .b=x, .c=(x + 1), .d=nonempty.d}.c;
+  S1 const subexpr_nested_empty = S1{};
+  S1 const subexpr_nested_nonempty = S1{.a=2, .b=3, .c=4, .d=5};
+  S1 const subexpr_nested_nonempty_with_expr = {.e=1, .f={.a=2, .b=x, .c=(x + 1), .d=nested_nonempty.i.f.d}}.f;
+  tint_array<T, 2> const aosoa_empty = tint_array<T, 2>{};
+  tint_array<T, 2> const aosoa_nonempty = tint_array<T, 2>{T{.a=tint_array<int, 2>{1, 2}}, T{.a=tint_array<int, 2>{3, 4}}};
+  tint_array<T, 2> const aosoa_nonempty_with_expr = tint_array<T, 2>{{.a=tint_array<int, 2>{1, (aosoa_nonempty[0].a[0] + 1)}}, aosoa_nonempty[1]};
+}
+program_source:45:13: error: excess elements in scalar initializer
+  int const subexpr_nonempty_with_expr = {.a=1, .b=x, .c=(x + 1), .d=nonempty.d}.c;
+            ^                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+program_source:45:81: error: expected ';' at end of declaration
+  int const subexpr_nonempty_with_expr = {.a=1, .b=x, .c=(x + 1), .d=nonempty.d}.c;
+                                                                                ^
+                                                                                ;
+program_source:48:50: error: field designator 'e' does not refer to any field in type 'const S1'
+  S1 const subexpr_nested_nonempty_with_expr = {.e=1, .f={.a=2, .b=x, .c=(x + 1), .d=nested_nonempty.i.f.d}}.f;
+                                                 ^
+program_source:48:56: error: field designator 'f' does not refer to any field in type 'const S1'
+  S1 const subexpr_nested_nonempty_with_expr = {.e=1, .f={.a=2, .b=x, .c=(x + 1), .d=nested_nonempty.i.f.d}}.f;
+                                                       ^
+program_source:48:109: error: expected ';' at end of declaration
+  S1 const subexpr_nested_nonempty_with_expr = {.e=1, .f={.a=2, .b=x, .c=(x + 1), .d=nested_nonempty.i.f.d}}.f;
+                                                                                                            ^
+                                                                                                            ;
+program_source:51:71: error: field designator cannot initialize a non-class type 'T[2]'
+  tint_array<T, 2> const aosoa_nonempty_with_expr = tint_array<T, 2>{{.a=tint_array<int, 2>{1, (aosoa_nonempty[0].a[0] + 1)}}, aosoa_nonempty[1]};
+                                                                      ^
+
diff --git a/test/tint/types/buffers/storage.wgsl.expected.ir.msl b/test/tint/types/buffers/storage.wgsl.expected.ir.msl
new file mode 100644
index 0000000..be7c43f
--- /dev/null
+++ b/test/tint/types/buffers/storage.wgsl.expected.ir.msl
@@ -0,0 +1,22 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %weights:ptr<storage, array<f32>, read> = var @binding_point(0, 0)
+}
+
+%tint_symbol = @fragment func():void {
+  $B2: {
+    %3:ptr<storage, f32, read> = access %weights, 0i
+    %4:f32 = load %3
+    %a:ptr<function, f32, read_write> = var, %4
+    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.  *
+********************************************************************
diff --git a/test/tint/types/buffers/uniform.wgsl.expected.ir.msl b/test/tint/types/buffers/uniform.wgsl.expected.ir.msl
new file mode 100644
index 0000000..884bf09
--- /dev/null
+++ b/test/tint/types/buffers/uniform.wgsl.expected.ir.msl
@@ -0,0 +1,21 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %weights:ptr<uniform, vec2<f32>, read> = var @binding_point(0, 0)
+}
+
+%tint_symbol = @fragment func():void {
+  $B2: {
+    %3:f32 = load_vector_element %weights, 0i
+    %a:ptr<function, f32, read_write> = var, %3
+    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.  *
+********************************************************************
diff --git a/test/tint/types/function_scope_declarations.wgsl.expected.ir.msl b/test/tint/types/function_scope_declarations.wgsl.expected.ir.msl
index 73340f8..11a6ade 100644
--- a/test/tint/types/function_scope_declarations.wgsl.expected.ir.msl
+++ b/test/tint/types/function_scope_declarations.wgsl.expected.ir.msl
@@ -18,7 +18,7 @@
   float a;
 };
 
-void tint_symbol() {
+kernel void tint_symbol() {
   bool bool_var = false;
   bool const bool_let = false;
   int i32_var = 0;
@@ -43,3 +43,13 @@
   thread float4* const ptr_vec = v4f32_var;
   thread tint_array<float, 4>* const ptr_arr = arr_var;
 }
+program_source:40:23: error: cannot initialize a variable of type 'float *const' with an lvalue of type 'float'
+  thread float* const ptr_f32 = f32_var;
+                      ^         ~~~~~~~
+program_source:41:24: error: cannot initialize a variable of type 'float4 *const' with an lvalue of type 'float4' (vector of 4 'float' values)
+  thread float4* const ptr_vec = v4f32_var;
+                       ^         ~~~~~~~~~
+program_source:42:38: error: no viable conversion from 'tint_array<float, 4>' to 'tint_array<float, 4> *const'
+  thread tint_array<float, 4>* const ptr_arr = arr_var;
+                                     ^         ~~~~~~~
+
diff --git a/test/tint/types/functions/shader_io/compute_input_builtins_struct.wgsl.expected.ir.msl b/test/tint/types/functions/shader_io/compute_input_builtins_struct.wgsl.expected.ir.msl
index 28251dc..e0848ac 100644
--- a/test/tint/types/functions/shader_io/compute_input_builtins_struct.wgsl.expected.ir.msl
+++ b/test/tint/types/functions/shader_io/compute_input_builtins_struct.wgsl.expected.ir.msl
@@ -1,9 +1,49 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct ComputeInputs {
+  uint3 local_invocation_id [[thread_position_in_threadgroup]];
+  uint local_invocation_index [[thread_index_in_threadgroup]];
+  uint3 global_invocation_id [[thread_position_in_grid]];
+  uint3 workgroup_id [[threadgroup_position_in_grid]];
+  uint3 num_workgroups [[threadgroups_per_grid]];
+};
+
+kernel void tint_symbol(ComputeInputs inputs) {
+  uint const foo = ((((inputs.local_invocation_id[0u] + inputs.local_invocation_index) + inputs.global_invocation_id[0u]) + inputs.workgroup_id[0u]) + inputs.num_workgroups[0u]);
+}
+program_source:4:31: error: 'thread_position_in_threadgroup' attribute only applies to parameters and global builtin variables
+  uint3 local_invocation_id [[thread_position_in_threadgroup]];
+                              ^
+program_source:5:33: error: 'thread_index_in_threadgroup' attribute only applies to parameters and global builtin variables
+  uint local_invocation_index [[thread_index_in_threadgroup]];
+                                ^
+program_source:6:32: error: 'thread_position_in_grid' attribute only applies to parameters and global builtin variables
+  uint3 global_invocation_id [[thread_position_in_grid]];
+                               ^
+program_source:7:24: error: 'threadgroup_position_in_grid' attribute only applies to parameters and global builtin variables
+  uint3 workgroup_id [[threadgroup_position_in_grid]];
+                       ^
+program_source:8:26: error: 'threadgroups_per_grid' attribute only applies to parameters and global builtin variables
+  uint3 num_workgroups [[threadgroups_per_grid]];
+                         ^
+program_source:11:25: error: invalid type 'ComputeInputs' for input declaration in a kernel function
+kernel void tint_symbol(ComputeInputs inputs) {
+                        ^~~~~~~~~~~~~~~~~~~~
+program_source:4:3: note: type 'uint3' (vector of 3 'unsigned int' values) cannot be used in struct of resources/colors
+  uint3 local_invocation_id [[thread_position_in_threadgroup]];
+  ^
+program_source:5:3: note: type 'uint' (aka 'unsigned int') cannot be used in struct of resources/colors
+  uint local_invocation_index [[thread_index_in_threadgroup]];
+  ^
+program_source:6:3: note: type 'uint3' (vector of 3 'unsigned int' values) cannot be used in struct of resources/colors
+  uint3 global_invocation_id [[thread_position_in_grid]];
+  ^
+program_source:7:3: note: type 'uint3' (vector of 3 'unsigned int' values) cannot be used in struct of resources/colors
+  uint3 workgroup_id [[threadgroup_position_in_grid]];
+  ^
+program_source:8:3: note: type 'uint3' (vector of 3 'unsigned int' values) cannot be used in struct of resources/colors
+  uint3 num_workgroups [[threadgroups_per_grid]];
+  ^
+
diff --git a/test/tint/types/functions/shader_io/compute_input_mixed.wgsl.expected.ir.msl b/test/tint/types/functions/shader_io/compute_input_mixed.wgsl.expected.ir.msl
index 28251dc..cd0ca11 100644
--- a/test/tint/types/functions/shader_io/compute_input_mixed.wgsl.expected.ir.msl
+++ b/test/tint/types/functions/shader_io/compute_input_mixed.wgsl.expected.ir.msl
@@ -1,9 +1,33 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct ComputeInputs0 {
+  uint3 local_invocation_id [[thread_position_in_threadgroup]];
+};
+struct ComputeInputs1 {
+  uint3 workgroup_id [[threadgroup_position_in_grid]];
+};
+
+kernel void tint_symbol(ComputeInputs0 inputs0, uint local_invocation_index [[thread_index_in_threadgroup]], uint3 global_invocation_id [[thread_position_in_grid]], ComputeInputs1 inputs1) {
+  uint const foo = (((inputs0.local_invocation_id[0u] + local_invocation_index) + global_invocation_id[0u]) + inputs1.workgroup_id[0u]);
+}
+program_source:4:31: error: 'thread_position_in_threadgroup' attribute only applies to parameters and global builtin variables
+  uint3 local_invocation_id [[thread_position_in_threadgroup]];
+                              ^
+program_source:7:24: error: 'threadgroup_position_in_grid' attribute only applies to parameters and global builtin variables
+  uint3 workgroup_id [[threadgroup_position_in_grid]];
+                       ^
+program_source:10:25: error: invalid type 'ComputeInputs0' for input declaration in a kernel function
+kernel void tint_symbol(ComputeInputs0 inputs0, uint local_invocation_index [[thread_index_in_threadgroup]], uint3 global_invocation_id [[thread_position_in_grid]], ComputeInputs1 inputs1) {
+                        ^~~~~~~~~~~~~~~~~~~~~~
+program_source:4:3: note: type 'uint3' (vector of 3 'unsigned int' values) cannot be used in struct of resources/colors
+  uint3 local_invocation_id [[thread_position_in_threadgroup]];
+  ^
+program_source:10:166: error: invalid type 'ComputeInputs1' for input declaration in a kernel function
+kernel void tint_symbol(ComputeInputs0 inputs0, uint local_invocation_index [[thread_index_in_threadgroup]], uint3 global_invocation_id [[thread_position_in_grid]], ComputeInputs1 inputs1) {
+                                                                                                                                                                     ^~~~~~~~~~~~~~~~~~~~~~
+program_source:7:3: note: type 'uint3' (vector of 3 'unsigned int' values) cannot be used in struct of resources/colors
+  uint3 workgroup_id [[threadgroup_position_in_grid]];
+  ^
+
diff --git a/test/tint/types/functions/shader_io/compute_subgroup_builtins.wgsl.expected.ir.msl b/test/tint/types/functions/shader_io/compute_subgroup_builtins.wgsl.expected.ir.msl
index c5bb04d..00d40a5 100644
--- a/test/tint/types/functions/shader_io/compute_subgroup_builtins.wgsl.expected.ir.msl
+++ b/test/tint/types/functions/shader_io/compute_subgroup_builtins.wgsl.expected.ir.msl
@@ -1,11 +1,11 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %output:ptr<storage, array<u32>, read_write> = var @binding_point(0, 0)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%subgroup_invocation_id:u32 [@subgroup_invocation_id], %subgroup_size:u32 [@subgroup_size]):void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%subgroup_invocation_id:u32 [@subgroup_invocation_id], %subgroup_size:u32 [@subgroup_size]):void {
+  $B2: {
     %5:ptr<storage, u32, read_write> = access %output, %subgroup_invocation_id
     store %5, %subgroup_size
     ret
diff --git a/test/tint/types/functions/shader_io/compute_subgroup_builtins_struct.wgsl.expected.ir.msl b/test/tint/types/functions/shader_io/compute_subgroup_builtins_struct.wgsl.expected.ir.msl
index 8cbd2e9..44e90b8 100644
--- a/test/tint/types/functions/shader_io/compute_subgroup_builtins_struct.wgsl.expected.ir.msl
+++ b/test/tint/types/functions/shader_io/compute_subgroup_builtins_struct.wgsl.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: ComputeInputs = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: ComputeInputs = struct @align(4) {
   subgroup_invocation_id:u32 @offset(0), @builtin(subgroup_invocation_id)
   subgroup_size:u32 @offset(4), @builtin(subgroup_size)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %output:ptr<storage, array<u32>, read_write> = var @binding_point(0, 0)
 }
 
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%inputs:ComputeInputs):void -> %b2 {
-  %b2 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%inputs:ComputeInputs):void {
+  $B2: {
     %4:u32 = access %inputs, 0u
     %5:ptr<storage, u32, read_write> = access %output, %4
     %6:u32 = access %inputs, 1u
diff --git a/test/tint/types/functions/shader_io/fragment_f16_io_polyfill.wgsl.expected.ir.msl b/test/tint/types/functions/shader_io/fragment_f16_io_polyfill.wgsl.expected.ir.msl
new file mode 100644
index 0000000..90f4c65
--- /dev/null
+++ b/test/tint/types/functions/shader_io/fragment_f16_io_polyfill.wgsl.expected.ir.msl
@@ -0,0 +1,23 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: Outputs = struct @align(8) {
+  a:f16 @offset(0), @location(1)
+  b:vec4<f16> @offset(8), @location(2)
+}
+
+%frag_main = @fragment func(%loc1:f16 [@location(1)], %loc2:vec4<f16> [@location(2)]):Outputs {
+  $B1: {
+    %4:f16 = mul %loc1, 2.0h
+    %5:vec4<f16> = mul %loc2, 3.0h
+    %6:Outputs = construct %4, %5
+    ret %6
+  }
+}
+
+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/types/functions/shader_io/fragment_input_builtins_struct.wgsl.expected.ir.msl b/test/tint/types/functions/shader_io/fragment_input_builtins_struct.wgsl.expected.ir.msl
index 28251dc..6010b39 100644
--- a/test/tint/types/functions/shader_io/fragment_input_builtins_struct.wgsl.expected.ir.msl
+++ b/test/tint/types/functions/shader_io/fragment_input_builtins_struct.wgsl.expected.ir.msl
@@ -1,9 +1,39 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct FragmentInputs {
+  float4 position [[position]];
+  bool front_facing [[front_facing]];
+  uint sample_index [[sample_id]];
+  uint sample_mask [[sample_mask]];
+};
+
+fragment void tint_symbol(FragmentInputs inputs) {
+  if (inputs.front_facing) {
+    float4 const foo = inputs.position;
+    uint const bar = (inputs.sample_index + inputs.sample_mask);
+  }
+}
+program_source:10:27: error: invalid type 'FragmentInputs' for input declaration in a fragment function
+fragment void tint_symbol(FragmentInputs inputs) {
+                          ^~~~~~~~~~~~~~~~~~~~~
+program_source:4:3: note: type 'float4' (vector of 4 'float' values) cannot be used in struct of resources/colors
+  float4 position [[position]];
+  ^
+program_source:5:3: note: type 'bool' cannot be used in struct of resources/colors
+  bool front_facing [[front_facing]];
+  ^
+program_source:6:3: note: type 'uint' (aka 'unsigned int') cannot be used in struct of resources/colors
+  uint sample_index [[sample_id]];
+  ^
+program_source:7:3: note: type 'uint' (aka 'unsigned int') cannot be used in struct of resources/colors
+  uint sample_mask [[sample_mask]];
+  ^
+program_source:12:18: warning: unused variable 'foo' [-Wunused-variable]
+    float4 const foo = inputs.position;
+                 ^
+program_source:13:16: warning: unused variable 'bar' [-Wunused-variable]
+    uint const bar = (inputs.sample_index + inputs.sample_mask);
+               ^
+
diff --git a/test/tint/types/functions/shader_io/fragment_input_locations.wgsl.expected.ir.msl b/test/tint/types/functions/shader_io/fragment_input_locations.wgsl.expected.ir.msl
index 567c382..1604463 100644
--- a/test/tint/types/functions/shader_io/fragment_input_locations.wgsl.expected.ir.msl
+++ b/test/tint/types/functions/shader_io/fragment_input_locations.wgsl.expected.ir.msl
@@ -1,9 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:270 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+fragment void tint_symbol(int loc0, uint loc1, float loc2, float4 loc3) {
+  int const i = loc0;
+  uint const u = loc1;
+  float const f = loc2;
+  float4 const v = loc3;
+}
+program_source:4:27: error: invalid type 'int' for input declaration in a fragment function
+fragment void tint_symbol(int loc0, uint loc1, float loc2, float4 loc3) {
+                          ^~~~~~~~
+program_source:4:37: error: invalid type 'uint' (aka 'unsigned int') for input declaration in a fragment function
+fragment void tint_symbol(int loc0, uint loc1, float loc2, float4 loc3) {
+                                    ^~~~~~~~~
+program_source:4:48: error: invalid type 'float' for input declaration in a fragment function
+fragment void tint_symbol(int loc0, uint loc1, float loc2, float4 loc3) {
+                                               ^~~~~~~~~~
+program_source:4:60: error: invalid type 'float4' (vector of 4 'float' values) for input declaration in a fragment function
+fragment void tint_symbol(int loc0, uint loc1, float loc2, float4 loc3) {
+                                                           ^~~~~~~~~~~
+
diff --git a/test/tint/types/functions/shader_io/fragment_input_locations_f16.wgsl.expected.ir.msl b/test/tint/types/functions/shader_io/fragment_input_locations_f16.wgsl.expected.ir.msl
index 567c382..8f1f86c 100644
--- a/test/tint/types/functions/shader_io/fragment_input_locations_f16.wgsl.expected.ir.msl
+++ b/test/tint/types/functions/shader_io/fragment_input_locations_f16.wgsl.expected.ir.msl
@@ -1,9 +1,32 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:270 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+fragment void tint_symbol(int loc0, uint loc1, float loc2, float4 loc3, half loc4, half3 loc5) {
+  int const i = loc0;
+  uint const u = loc1;
+  float const f = loc2;
+  float4 const v = loc3;
+  half const x = loc4;
+  half3 const y = loc5;
+}
+program_source:4:27: error: invalid type 'int' for input declaration in a fragment function
+fragment void tint_symbol(int loc0, uint loc1, float loc2, float4 loc3, half loc4, half3 loc5) {
+                          ^~~~~~~~
+program_source:4:37: error: invalid type 'uint' (aka 'unsigned int') for input declaration in a fragment function
+fragment void tint_symbol(int loc0, uint loc1, float loc2, float4 loc3, half loc4, half3 loc5) {
+                                    ^~~~~~~~~
+program_source:4:48: error: invalid type 'float' for input declaration in a fragment function
+fragment void tint_symbol(int loc0, uint loc1, float loc2, float4 loc3, half loc4, half3 loc5) {
+                                               ^~~~~~~~~~
+program_source:4:60: error: invalid type 'float4' (vector of 4 'float' values) for input declaration in a fragment function
+fragment void tint_symbol(int loc0, uint loc1, float loc2, float4 loc3, half loc4, half3 loc5) {
+                                                           ^~~~~~~~~~~
+program_source:4:73: error: invalid type 'half' for input declaration in a fragment function
+fragment void tint_symbol(int loc0, uint loc1, float loc2, float4 loc3, half loc4, half3 loc5) {
+                                                                        ^~~~~~~~~
+program_source:4:84: error: invalid type 'half3' (vector of 3 'half' values) for input declaration in a fragment function
+fragment void tint_symbol(int loc0, uint loc1, float loc2, float4 loc3, half loc4, half3 loc5) {
+                                                                                   ^~~~~~~~~~
+
diff --git a/test/tint/types/functions/shader_io/fragment_input_locations_struct.wgsl.expected.ir.msl b/test/tint/types/functions/shader_io/fragment_input_locations_struct.wgsl.expected.ir.msl
index 28251dc..7bce765 100644
--- a/test/tint/types/functions/shader_io/fragment_input_locations_struct.wgsl.expected.ir.msl
+++ b/test/tint/types/functions/shader_io/fragment_input_locations_struct.wgsl.expected.ir.msl
@@ -1,6 +1,27 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: FragmentInputs = struct @align(16) {
+  loc0:i32 @offset(0), @location(0), @interpolate(flat)
+  loc1:u32 @offset(4), @location(1), @interpolate(flat)
+  loc2:f32 @offset(8), @location(2)
+  loc3:vec4<f32> @offset(16), @location(3)
+}
+
+%tint_symbol = @fragment func(%inputs:FragmentInputs):void {
+  $B1: {
+    %3:i32 = access %inputs, 0u
+    %i:i32 = let %3
+    %5:u32 = access %inputs, 1u
+    %u:u32 = let %5
+    %7:f32 = access %inputs, 2u
+    %f:f32 = let %7
+    %9:vec4<f32> = access %inputs, 3u
+    %v:vec4<f32> = let %9
+    ret
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/types/functions/shader_io/fragment_input_locations_struct_f16.wgsl.expected.ir.msl b/test/tint/types/functions/shader_io/fragment_input_locations_struct_f16.wgsl.expected.ir.msl
index 28251dc..f757f2d 100644
--- a/test/tint/types/functions/shader_io/fragment_input_locations_struct_f16.wgsl.expected.ir.msl
+++ b/test/tint/types/functions/shader_io/fragment_input_locations_struct_f16.wgsl.expected.ir.msl
@@ -1,6 +1,33 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: FragmentInputs = struct @align(16) {
+  loc0:i32 @offset(0), @location(0), @interpolate(flat)
+  loc1:u32 @offset(4), @location(1), @interpolate(flat)
+  loc2:f32 @offset(8), @location(2)
+  loc3:vec4<f32> @offset(16), @location(3)
+  loc4:f16 @offset(32), @location(4)
+  loc5:vec3<f16> @offset(40), @location(5)
+}
+
+%tint_symbol = @fragment func(%inputs:FragmentInputs):void {
+  $B1: {
+    %3:i32 = access %inputs, 0u
+    %i:i32 = let %3
+    %5:u32 = access %inputs, 1u
+    %u:u32 = let %5
+    %7:f32 = access %inputs, 2u
+    %f:f32 = let %7
+    %9:vec4<f32> = access %inputs, 3u
+    %v:vec4<f32> = let %9
+    %11:f16 = access %inputs, 4u
+    %x:f16 = let %11
+    %13:vec3<f16> = access %inputs, 5u
+    %y:vec3<f16> = let %13
+    ret
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/types/functions/shader_io/fragment_input_mixed.wgsl.expected.ir.msl b/test/tint/types/functions/shader_io/fragment_input_mixed.wgsl.expected.ir.msl
index 567c382..11fe312 100644
--- a/test/tint/types/functions/shader_io/fragment_input_mixed.wgsl.expected.ir.msl
+++ b/test/tint/types/functions/shader_io/fragment_input_mixed.wgsl.expected.ir.msl
@@ -1,6 +1,38 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:270 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: FragmentInputs0 = struct @align(16) {
+  position:vec4<f32> @offset(0), @builtin(position)
+  loc0:i32 @offset(16), @location(0), @interpolate(flat)
+}
+
+FragmentInputs1 = struct @align(16) {
+  loc3:vec4<f32> @offset(0), @location(3)
+  sample_mask:u32 @offset(16), @builtin(sample_mask)
+}
+
+%tint_symbol = @fragment func(%inputs0:FragmentInputs0, %front_facing:bool [@front_facing], %loc1:u32 [@location(1), @interpolate(flat)], %sample_index:u32 [@sample_index], %inputs1:FragmentInputs1, %loc2:f32 [@location(2)]):void {
+  $B1: {
+    if %front_facing [t: $B2] {  # if_1
+      $B2: {  # true
+        %8:vec4<f32> = access %inputs0, 0u
+        %foo:vec4<f32> = let %8
+        %10:u32 = access %inputs1, 1u
+        %11:u32 = add %sample_index, %10
+        %bar:u32 = let %11
+        %13:i32 = access %inputs0, 1u
+        %i:i32 = let %13
+        %u:u32 = let %loc1
+        %f:f32 = let %loc2
+        %17:vec4<f32> = access %inputs1, 0u
+        %v:vec4<f32> = let %17
+        exit_if  # if_1
+      }
+    }
+    ret
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/types/functions/shader_io/fragment_input_mixed_f16.wgsl.expected.ir.msl b/test/tint/types/functions/shader_io/fragment_input_mixed_f16.wgsl.expected.ir.msl
index 567c382..1eae703 100644
--- a/test/tint/types/functions/shader_io/fragment_input_mixed_f16.wgsl.expected.ir.msl
+++ b/test/tint/types/functions/shader_io/fragment_input_mixed_f16.wgsl.expected.ir.msl
@@ -1,6 +1,42 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:270 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: FragmentInputs0 = struct @align(16) {
+  position:vec4<f32> @offset(0), @builtin(position)
+  loc0:i32 @offset(16), @location(0), @interpolate(flat)
+}
+
+FragmentInputs1 = struct @align(16) {
+  loc3:vec4<f32> @offset(0), @location(3)
+  loc5:vec3<f16> @offset(16), @location(5)
+  sample_mask:u32 @offset(24), @builtin(sample_mask)
+}
+
+%tint_symbol = @fragment func(%inputs0:FragmentInputs0, %front_facing:bool [@front_facing], %loc1:u32 [@location(1), @interpolate(flat)], %sample_index:u32 [@sample_index], %inputs1:FragmentInputs1, %loc2:f32 [@location(2)], %loc4:f16 [@location(4)]):void {
+  $B1: {
+    if %front_facing [t: $B2] {  # if_1
+      $B2: {  # true
+        %9:vec4<f32> = access %inputs0, 0u
+        %foo:vec4<f32> = let %9
+        %11:u32 = access %inputs1, 2u
+        %12:u32 = add %sample_index, %11
+        %bar:u32 = let %12
+        %14:i32 = access %inputs0, 1u
+        %i:i32 = let %14
+        %u:u32 = let %loc1
+        %f:f32 = let %loc2
+        %18:vec4<f32> = access %inputs1, 0u
+        %v:vec4<f32> = let %18
+        %x:f16 = let %loc4
+        %21:vec3<f16> = access %inputs1, 1u
+        %y:vec3<f16> = let %21
+        exit_if  # if_1
+      }
+    }
+    ret
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/types/functions/shader_io/fragment_output_builtins.wgsl.expected.ir.msl b/test/tint/types/functions/shader_io/fragment_output_builtins.wgsl.expected.ir.msl
index 30e0bd9..f289cfb 100644
--- a/test/tint/types/functions/shader_io/fragment_output_builtins.wgsl.expected.ir.msl
+++ b/test/tint/types/functions/shader_io/fragment_output_builtins.wgsl.expected.ir.msl
@@ -1,7 +1,3 @@
-SKIP: FAILED
-
-### Missing output value
-
 #include <metal_stdlib>
 using namespace metal;
 
diff --git a/test/tint/types/functions/shader_io/fragment_output_locations.wgsl.expected.ir.msl b/test/tint/types/functions/shader_io/fragment_output_locations.wgsl.expected.ir.msl
index c26064f..6d20c629 100644
--- a/test/tint/types/functions/shader_io/fragment_output_locations.wgsl.expected.ir.msl
+++ b/test/tint/types/functions/shader_io/fragment_output_locations.wgsl.expected.ir.msl
@@ -1,7 +1,3 @@
-SKIP FAILED
-
-### Missing locations
-
 #include <metal_stdlib>
 using namespace metal;
 
diff --git a/test/tint/types/functions/shader_io/fragment_output_locations_f16.wgsl.expected.ir.msl b/test/tint/types/functions/shader_io/fragment_output_locations_f16.wgsl.expected.ir.msl
index 1e9c88b..148a978 100644
--- a/test/tint/types/functions/shader_io/fragment_output_locations_f16.wgsl.expected.ir.msl
+++ b/test/tint/types/functions/shader_io/fragment_output_locations_f16.wgsl.expected.ir.msl
@@ -1,7 +1,3 @@
-SKIP: FAILED
-
-### Missing locations
-
 #include <metal_stdlib>
 using namespace metal;
 
diff --git a/test/tint/types/functions/shader_io/fragment_output_locations_struct.wgsl.expected.ir.msl b/test/tint/types/functions/shader_io/fragment_output_locations_struct.wgsl.expected.ir.msl
index 3d43d26..6497ed5 100644
--- a/test/tint/types/functions/shader_io/fragment_output_locations_struct.wgsl.expected.ir.msl
+++ b/test/tint/types/functions/shader_io/fragment_output_locations_struct.wgsl.expected.ir.msl
@@ -1,14 +1,14 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:775 internal compiler error: FragmentOutputs = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: FragmentOutputs = struct @align(16) {
   loc0:i32 @offset(0), @location(0)
   loc1:u32 @offset(4), @location(1)
   loc2:f32 @offset(8), @location(2)
   loc3:vec4<f32> @offset(16), @location(3)
 }
 
-%tint_symbol = @fragment func():FragmentOutputs -> %b1 {
-  %b1 = block {
+%tint_symbol = @fragment func():FragmentOutputs {
+  $B1: {
     ret FragmentOutputs(1i, 1u, 1.0f, vec4<f32>(1.0f, 2.0f, 3.0f, 4.0f))
   }
 }
diff --git a/test/tint/types/functions/shader_io/fragment_output_locations_struct_f16.wgsl.expected.ir.msl b/test/tint/types/functions/shader_io/fragment_output_locations_struct_f16.wgsl.expected.ir.msl
index 5bc20a1..d88c911 100644
--- a/test/tint/types/functions/shader_io/fragment_output_locations_struct_f16.wgsl.expected.ir.msl
+++ b/test/tint/types/functions/shader_io/fragment_output_locations_struct_f16.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:775 internal compiler error: FragmentOutputs = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: FragmentOutputs = struct @align(16) {
   loc0:i32 @offset(0), @location(0)
   loc1:u32 @offset(4), @location(1)
   loc2:f32 @offset(8), @location(2)
@@ -9,8 +9,8 @@
   loc5:vec3<f16> @offset(40), @location(5)
 }
 
-%tint_symbol = @fragment func():FragmentOutputs -> %b1 {
-  %b1 = block {
+%tint_symbol = @fragment func():FragmentOutputs {
+  $B1: {
     ret FragmentOutputs(1i, 1u, 1.0f, vec4<f32>(1.0f, 2.0f, 3.0f, 4.0f), 2.25h, vec3<f16>(3.0h, 5.0h, 8.0h))
   }
 }
diff --git a/test/tint/types/functions/shader_io/fragment_output_mixed.wgsl.expected.ir.msl b/test/tint/types/functions/shader_io/fragment_output_mixed.wgsl.expected.ir.msl
index 33eb5fc..ecc9c82 100644
--- a/test/tint/types/functions/shader_io/fragment_output_mixed.wgsl.expected.ir.msl
+++ b/test/tint/types/functions/shader_io/fragment_output_mixed.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:775 internal compiler error: FragmentOutputs = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: FragmentOutputs = struct @align(16) {
   loc0:i32 @offset(0), @location(0)
   frag_depth:f32 @offset(4), @builtin(frag_depth)
   loc1:u32 @offset(8), @location(1)
@@ -9,8 +9,8 @@
   loc3:vec4<f32> @offset(32), @location(3)
 }
 
-%tint_symbol = @fragment func():FragmentOutputs -> %b1 {
-  %b1 = block {
+%tint_symbol = @fragment func():FragmentOutputs {
+  $B1: {
     ret FragmentOutputs(1i, 2.0f, 1u, 1.0f, 2u, vec4<f32>(1.0f, 2.0f, 3.0f, 4.0f))
   }
 }
diff --git a/test/tint/types/functions/shader_io/fragment_output_mixed_f16.wgsl.expected.ir.msl b/test/tint/types/functions/shader_io/fragment_output_mixed_f16.wgsl.expected.ir.msl
index d30fbb6..65c3bdc 100644
--- a/test/tint/types/functions/shader_io/fragment_output_mixed_f16.wgsl.expected.ir.msl
+++ b/test/tint/types/functions/shader_io/fragment_output_mixed_f16.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:775 internal compiler error: FragmentOutputs = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: FragmentOutputs = struct @align(16) {
   loc0:i32 @offset(0), @location(0)
   frag_depth:f32 @offset(4), @builtin(frag_depth)
   loc1:u32 @offset(8), @location(1)
@@ -11,8 +11,8 @@
   loc5:vec3<f16> @offset(56), @location(5)
 }
 
-%tint_symbol = @fragment func():FragmentOutputs -> %b1 {
-  %b1 = block {
+%tint_symbol = @fragment func():FragmentOutputs {
+  $B1: {
     ret FragmentOutputs(1i, 2.0f, 1u, 1.0f, 2u, vec4<f32>(1.0f, 2.0f, 3.0f, 4.0f), 2.25h, vec3<f16>(3.0h, 5.0h, 8.0h))
   }
 }
diff --git a/test/tint/types/functions/shader_io/interpolate_input_parameters.wgsl.expected.ir.msl b/test/tint/types/functions/shader_io/interpolate_input_parameters.wgsl.expected.ir.msl
index f925a33..b293228 100644
--- a/test/tint/types/functions/shader_io/interpolate_input_parameters.wgsl.expected.ir.msl
+++ b/test/tint/types/functions/shader_io/interpolate_input_parameters.wgsl.expected.ir.msl
@@ -3,5 +3,36 @@
 #include <metal_stdlib>
 using namespace metal;
 
-void tint_symbol() {
+fragment void tint_symbol(float none, float flat, float perspective_center, float perspective_centroid, float perspective_sample, float linear_center, float linear_centroid, float linear_sample, float perspective_default, float linear_default) {
 }
+program_source:4:27: error: invalid type 'float' for input declaration in a fragment function
+fragment void tint_symbol(float none, float flat, float perspective_center, float perspective_centroid, float perspective_sample, float linear_center, float linear_centroid, float linear_sample, float perspective_default, float linear_default) {
+                          ^~~~~~~~~~
+program_source:4:39: error: invalid type 'float' for input declaration in a fragment function
+fragment void tint_symbol(float none, float flat, float perspective_center, float perspective_centroid, float perspective_sample, float linear_center, float linear_centroid, float linear_sample, float perspective_default, float linear_default) {
+                                      ^~~~~~~~~~
+program_source:4:51: error: invalid type 'float' for input declaration in a fragment function
+fragment void tint_symbol(float none, float flat, float perspective_center, float perspective_centroid, float perspective_sample, float linear_center, float linear_centroid, float linear_sample, float perspective_default, float linear_default) {
+                                                  ^~~~~~~~~~~~~~~~~~~~~~~~
+program_source:4:77: error: invalid type 'float' for input declaration in a fragment function
+fragment void tint_symbol(float none, float flat, float perspective_center, float perspective_centroid, float perspective_sample, float linear_center, float linear_centroid, float linear_sample, float perspective_default, float linear_default) {
+                                                                            ^~~~~~~~~~~~~~~~~~~~~~~~~~
+program_source:4:105: error: invalid type 'float' for input declaration in a fragment function
+fragment void tint_symbol(float none, float flat, float perspective_center, float perspective_centroid, float perspective_sample, float linear_center, float linear_centroid, float linear_sample, float perspective_default, float linear_default) {
+                                                                                                        ^~~~~~~~~~~~~~~~~~~~~~~~
+program_source:4:131: error: invalid type 'float' for input declaration in a fragment function
+fragment void tint_symbol(float none, float flat, float perspective_center, float perspective_centroid, float perspective_sample, float linear_center, float linear_centroid, float linear_sample, float perspective_default, float linear_default) {
+                                                                                                                                  ^~~~~~~~~~~~~~~~~~~
+program_source:4:152: error: invalid type 'float' for input declaration in a fragment function
+fragment void tint_symbol(float none, float flat, float perspective_center, float perspective_centroid, float perspective_sample, float linear_center, float linear_centroid, float linear_sample, float perspective_default, float linear_default) {
+                                                                                                                                                       ^~~~~~~~~~~~~~~~~~~~~
+program_source:4:175: error: invalid type 'float' for input declaration in a fragment function
+fragment void tint_symbol(float none, float flat, float perspective_center, float perspective_centroid, float perspective_sample, float linear_center, float linear_centroid, float linear_sample, float perspective_default, float linear_default) {
+                                                                                                                                                                              ^~~~~~~~~~~~~~~~~~~
+program_source:4:196: error: invalid type 'float' for input declaration in a fragment function
+fragment void tint_symbol(float none, float flat, float perspective_center, float perspective_centroid, float perspective_sample, float linear_center, float linear_centroid, float linear_sample, float perspective_default, float linear_default) {
+                                                                                                                                                                                                   ^~~~~~~~~~~~~~~~~~~~~~~~~
+program_source:4:223: error: invalid type 'float' for input declaration in a fragment function
+fragment void tint_symbol(float none, float flat, float perspective_center, float perspective_centroid, float perspective_sample, float linear_center, float linear_centroid, float linear_sample, float perspective_default, float linear_default) {
+                                                                                                                                                                                                                              ^~~~~~~~~~~~~~~~~~~~
+
diff --git a/test/tint/types/functions/shader_io/interpolate_input_struct.wgsl.expected.ir.msl b/test/tint/types/functions/shader_io/interpolate_input_struct.wgsl.expected.ir.msl
index f925a33..e1d10c7 100644
--- a/test/tint/types/functions/shader_io/interpolate_input_struct.wgsl.expected.ir.msl
+++ b/test/tint/types/functions/shader_io/interpolate_input_struct.wgsl.expected.ir.msl
@@ -1,7 +1,28 @@
 SKIP: FAILED
 
-#include <metal_stdlib>
-using namespace metal;
-
-void tint_symbol() {
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: In = struct @align(4) {
+  none:f32 @offset(0), @location(0)
+  flat:f32 @offset(4), @location(1), @interpolate(flat)
+  perspective_center:f32 @offset(8), @location(2), @interpolate(perspective, center)
+  perspective_centroid:f32 @offset(12), @location(3), @interpolate(perspective, centroid)
+  perspective_sample:f32 @offset(16), @location(4), @interpolate(perspective, sample)
+  linear_center:f32 @offset(20), @location(5), @interpolate(linear, center)
+  linear_centroid:f32 @offset(24), @location(6), @interpolate(linear, centroid)
+  linear_sample:f32 @offset(28), @location(7), @interpolate(linear, sample)
+  perspective_default:f32 @offset(32), @location(8), @interpolate(perspective)
+  linear_default:f32 @offset(36), @location(9), @interpolate(linear)
 }
+
+%tint_symbol = @fragment func(%in:In):void {
+  $B1: {
+    ret
+  }
+}
+
+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/types/functions/shader_io/interpolate_integers.wgsl.expected.ir.msl b/test/tint/types/functions/shader_io/interpolate_integers.wgsl.expected.ir.msl
index 265ab26..6e4a62e 100644
--- a/test/tint/types/functions/shader_io/interpolate_integers.wgsl.expected.ir.msl
+++ b/test/tint/types/functions/shader_io/interpolate_integers.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:775 internal compiler error: Interface = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: Interface = struct @align(16) {
   i:i32 @offset(0), @location(0), @interpolate(flat)
   u:u32 @offset(4), @location(1), @interpolate(flat)
   vi:vec4<i32> @offset(16), @location(2), @interpolate(flat)
@@ -8,13 +8,13 @@
   pos:vec4<f32> @offset(48), @builtin(position)
 }
 
-%vert_main = @vertex func():Interface -> %b1 {
-  %b1 = block {
+%vert_main = @vertex func():Interface {
+  $B1: {
     ret Interface(0i, 0u, vec4<i32>(0i), vec4<u32>(0u), vec4<f32>(0.0f))
   }
 }
-%frag_main = @fragment func(%inputs:Interface):i32 [@location(0)] -> %b2 {
-  %b2 = block {
+%frag_main = @fragment func(%inputs:Interface):i32 [@location(0)] {
+  $B2: {
     %4:i32 = access %inputs, 0u
     ret %4
   }
diff --git a/test/tint/types/functions/shader_io/interpolate_return_struct.wgsl.expected.ir.msl b/test/tint/types/functions/shader_io/interpolate_return_struct.wgsl.expected.ir.msl
index e83a9ef..26d0382 100644
--- a/test/tint/types/functions/shader_io/interpolate_return_struct.wgsl.expected.ir.msl
+++ b/test/tint/types/functions/shader_io/interpolate_return_struct.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:775 internal compiler error: Out = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: Out = struct @align(16) {
   pos:vec4<f32> @offset(0), @builtin(position)
   none:f32 @offset(16), @location(0)
   flat:f32 @offset(20), @location(1), @interpolate(flat)
@@ -12,8 +12,8 @@
   linear_sample:f32 @offset(44), @location(7), @interpolate(linear, sample)
 }
 
-%tint_symbol = @vertex func():Out -> %b1 {
-  %b1 = block {
+%tint_symbol = @vertex func():Out {
+  $B1: {
     ret Out(vec4<f32>(0.0f), 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f)
   }
 }
diff --git a/test/tint/types/functions/shader_io/invariant.wgsl.expected.ir.msl b/test/tint/types/functions/shader_io/invariant.wgsl.expected.ir.msl
index 6cea9ca..453e2ef 100644
--- a/test/tint/types/functions/shader_io/invariant.wgsl.expected.ir.msl
+++ b/test/tint/types/functions/shader_io/invariant.wgsl.expected.ir.msl
@@ -1,7 +1,3 @@
-SKIP: FAILED
-
-### Missing invariant
-
 #include <metal_stdlib>
 using namespace metal;
 
diff --git a/test/tint/types/functions/shader_io/invariant_struct_member.wgsl.expected.ir.msl b/test/tint/types/functions/shader_io/invariant_struct_member.wgsl.expected.ir.msl
index db7f2fc..4189aec 100644
--- a/test/tint/types/functions/shader_io/invariant_struct_member.wgsl.expected.ir.msl
+++ b/test/tint/types/functions/shader_io/invariant_struct_member.wgsl.expected.ir.msl
@@ -6,6 +6,11 @@
   float4 pos [[position]] TINT_INVARIANT;
 };
 
-Out tint_symbol() {
+vertex Out tint_symbol() {
   return Out{};
 }
+program_source:4:26: error: expected ';' at end of declaration list
+  float4 pos [[position]] TINT_INVARIANT;
+                         ^
+                         ;
+
diff --git a/test/tint/types/functions/shader_io/shared_struct_different_stages.wgsl.expected.ir.msl b/test/tint/types/functions/shader_io/shared_struct_different_stages.wgsl.expected.ir.msl
index 2c4667c..8a9e1f0 100644
--- a/test/tint/types/functions/shader_io/shared_struct_different_stages.wgsl.expected.ir.msl
+++ b/test/tint/types/functions/shader_io/shared_struct_different_stages.wgsl.expected.ir.msl
@@ -1,20 +1,22 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:775 internal compiler error: Interface = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: Interface = struct @align(16) {
   col1:f32 @offset(0), @location(1)
   col2:f32 @offset(4), @location(2)
   pos:vec4<f32> @offset(16), @builtin(position)
 }
 
-%vert_main = @vertex func():Interface -> %b1 {
-  %b1 = block {
+%vert_main = @vertex func():Interface {
+  $B1: {
     ret Interface(0.40000000596046447754f, 0.60000002384185791016f, vec4<f32>(0.0f))
   }
 }
-%frag_main = @fragment func(%colors:Interface):void -> %b2 {
-  %b2 = block {
-    %r:f32 = access %colors, 0u
-    %g:f32 = access %colors, 1u
+%frag_main = @fragment func(%colors:Interface):void {
+  $B2: {
+    %4:f32 = access %colors, 0u
+    %r:f32 = let %4
+    %6:f32 = access %colors, 1u
+    %g:f32 = let %6
     ret
   }
 }
diff --git a/test/tint/types/functions/shader_io/shared_struct_different_stages_f16.wgsl.expected.ir.msl b/test/tint/types/functions/shader_io/shared_struct_different_stages_f16.wgsl.expected.ir.msl
index 0892dcd..3856fce 100644
--- a/test/tint/types/functions/shader_io/shared_struct_different_stages_f16.wgsl.expected.ir.msl
+++ b/test/tint/types/functions/shader_io/shared_struct_different_stages_f16.wgsl.expected.ir.msl
@@ -1,20 +1,22 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:775 internal compiler error: Interface = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: Interface = struct @align(16) {
   col1:f32 @offset(0), @location(1)
   col2:f16 @offset(4), @location(2)
   pos:vec4<f32> @offset(16), @builtin(position)
 }
 
-%vert_main = @vertex func():Interface -> %b1 {
-  %b1 = block {
+%vert_main = @vertex func():Interface {
+  $B1: {
     ret Interface(0.40000000596046447754f, 0.599609375h, vec4<f32>(0.0f))
   }
 }
-%frag_main = @fragment func(%colors:Interface):void -> %b2 {
-  %b2 = block {
-    %r:f32 = access %colors, 0u
-    %g:f16 = access %colors, 1u
+%frag_main = @fragment func(%colors:Interface):void {
+  $B2: {
+    %4:f32 = access %colors, 0u
+    %r:f32 = let %4
+    %6:f16 = access %colors, 1u
+    %g:f16 = let %6
     ret
   }
 }
diff --git a/test/tint/types/functions/shader_io/shared_struct_helper_function.wgsl.expected.ir.msl b/test/tint/types/functions/shader_io/shared_struct_helper_function.wgsl.expected.ir.msl
index 6fafce0..a1641db 100644
--- a/test/tint/types/functions/shader_io/shared_struct_helper_function.wgsl.expected.ir.msl
+++ b/test/tint/types/functions/shader_io/shared_struct_helper_function.wgsl.expected.ir.msl
@@ -1,25 +1,25 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:775 internal compiler error: VertexOutput = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: VertexOutput = struct @align(16) {
   pos:vec4<f32> @offset(0), @builtin(position)
   loc0:i32 @offset(16), @location(0), @interpolate(flat)
 }
 
-%foo = func(%x:f32):VertexOutput -> %b1 {
-  %b1 = block {
+%foo = func(%x:f32):VertexOutput {
+  $B1: {
     %3:vec4<f32> = construct %x, %x, %x, 1.0f
     %4:VertexOutput = construct %3, 42i
     ret %4
   }
 }
-%vert_main1 = @vertex func():VertexOutput -> %b2 {
-  %b2 = block {
+%vert_main1 = @vertex func():VertexOutput {
+  $B2: {
     %6:VertexOutput = call %foo, 0.5f
     ret %6
   }
 }
-%vert_main2 = @vertex func():VertexOutput -> %b3 {
-  %b3 = block {
+%vert_main2 = @vertex func():VertexOutput {
+  $B3: {
     %8:VertexOutput = call %foo, 0.25f
     ret %8
   }
diff --git a/test/tint/types/functions/shader_io/shared_struct_storage_buffer.wgsl.expected.ir.msl b/test/tint/types/functions/shader_io/shared_struct_storage_buffer.wgsl.expected.ir.msl
index ef5ab3a..6beb0b4 100644
--- a/test/tint/types/functions/shader_io/shared_struct_storage_buffer.wgsl.expected.ir.msl
+++ b/test/tint/types/functions/shader_io/shared_struct_storage_buffer.wgsl.expected.ir.msl
@@ -1,21 +1,38 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(128) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(128) {
   f:f32 @offset(0), @location(0)
   u:u32 @offset(4), @location(1), @interpolate(flat)
   v:vec4<f32> @offset(128), @builtin(position)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %output:ptr<storage, S, read_write> = var @binding_point(0, 0)
 }
 
-%frag_main = @fragment func(%input:S):void -> %b2 {
-  %b2 = block {
-    %f:f32 = access %input, 0u
-    %u:u32 = access %input, 1u
-    %v:vec4<f32> = access %input, 2u
-    store %output, %input
+%frag_main = @fragment func(%input:S):void {
+  $B2: {
+    %4:f32 = access %input, 0u
+    %f:f32 = let %4
+    %6:u32 = access %input, 1u
+    %u:u32 = let %6
+    %8:vec4<f32> = access %input, 2u
+    %v:vec4<f32> = let %8
+    %10:void = call %tint_store_and_preserve_padding, %output, %input
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, S, read_write>, %value_param:S):void {
+  $B3: {
+    %14:ptr<storage, f32, read_write> = access %target, 0u
+    %15:f32 = access %value_param, 0u
+    store %14, %15
+    %16:ptr<storage, u32, read_write> = access %target, 1u
+    %17:u32 = access %value_param, 1u
+    store %16, %17
+    %18:ptr<storage, vec4<f32>, read_write> = access %target, 2u
+    %19:vec4<f32> = access %value_param, 2u
+    store %18, %19
     ret
   }
 }
diff --git a/test/tint/types/functions/shader_io/shared_struct_storage_buffer_f16.wgsl.expected.ir.msl b/test/tint/types/functions/shader_io/shared_struct_storage_buffer_f16.wgsl.expected.ir.msl
index a74ca7f..d88216e 100644
--- a/test/tint/types/functions/shader_io/shared_struct_storage_buffer_f16.wgsl.expected.ir.msl
+++ b/test/tint/types/functions/shader_io/shared_struct_storage_buffer_f16.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(128) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(128) {
   f:f32 @offset(0), @location(0)
   u:u32 @offset(4), @location(1), @interpolate(flat)
   v:vec4<f32> @offset(128), @builtin(position)
@@ -8,18 +8,43 @@
   y:vec3<f16> @offset(192), @location(3)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %output:ptr<storage, S, read_write> = var @binding_point(0, 0)
 }
 
-%frag_main = @fragment func(%input:S):void -> %b2 {
-  %b2 = block {
-    %f:f32 = access %input, 0u
-    %u:u32 = access %input, 1u
-    %v:vec4<f32> = access %input, 2u
-    %x:f16 = access %input, 3u
-    %y:vec3<f16> = access %input, 4u
-    store %output, %input
+%frag_main = @fragment func(%input:S):void {
+  $B2: {
+    %4:f32 = access %input, 0u
+    %f:f32 = let %4
+    %6:u32 = access %input, 1u
+    %u:u32 = let %6
+    %8:vec4<f32> = access %input, 2u
+    %v:vec4<f32> = let %8
+    %10:f16 = access %input, 3u
+    %x:f16 = let %10
+    %12:vec3<f16> = access %input, 4u
+    %y:vec3<f16> = let %12
+    %14:void = call %tint_store_and_preserve_padding, %output, %input
+    ret
+  }
+}
+%tint_store_and_preserve_padding = func(%target:ptr<storage, S, read_write>, %value_param:S):void {
+  $B3: {
+    %18:ptr<storage, f32, read_write> = access %target, 0u
+    %19:f32 = access %value_param, 0u
+    store %18, %19
+    %20:ptr<storage, u32, read_write> = access %target, 1u
+    %21:u32 = access %value_param, 1u
+    store %20, %21
+    %22:ptr<storage, vec4<f32>, read_write> = access %target, 2u
+    %23:vec4<f32> = access %value_param, 2u
+    store %22, %23
+    %24:ptr<storage, f16, read_write> = access %target, 3u
+    %25:f16 = access %value_param, 3u
+    store %24, %25
+    %26:ptr<storage, vec3<f16>, read_write> = access %target, 4u
+    %27:vec3<f16> = access %value_param, 4u
+    store %26, %27
     ret
   }
 }
diff --git a/test/tint/types/functions/shader_io/vertex_input_builtins.wgsl.expected.ir.msl b/test/tint/types/functions/shader_io/vertex_input_builtins.wgsl.expected.ir.msl
index 9618b5e..9d003a2 100644
--- a/test/tint/types/functions/shader_io/vertex_input_builtins.wgsl.expected.ir.msl
+++ b/test/tint/types/functions/shader_io/vertex_input_builtins.wgsl.expected.ir.msl
@@ -3,6 +3,14 @@
 #include <metal_stdlib>
 using namespace metal;
 
-float4 tint_symbol() {
+vertex float4 tint_symbol(uint vertex_index [[]], uint instance_index [[]]) {
+  uint const foo = (vertex_index + instance_index);
   return float4(0.0f);
 }
+program_source:4:27: error: invalid type 'uint' (aka 'unsigned int') for input declaration in a vertex function
+vertex float4 tint_symbol(uint vertex_index [[]], uint instance_index [[]]) {
+                          ^~~~~~~~~~~~~~~~~
+program_source:4:51: error: invalid type 'uint' (aka 'unsigned int') for input declaration in a vertex function
+vertex float4 tint_symbol(uint vertex_index [[]], uint instance_index [[]]) {
+                                                  ^~~~~~~~~~~~~~~~~~~
+
diff --git a/test/tint/types/functions/shader_io/vertex_input_builtins_struct.wgsl.expected.ir.msl b/test/tint/types/functions/shader_io/vertex_input_builtins_struct.wgsl.expected.ir.msl
index 28251dc..823fe70 100644
--- a/test/tint/types/functions/shader_io/vertex_input_builtins_struct.wgsl.expected.ir.msl
+++ b/test/tint/types/functions/shader_io/vertex_input_builtins_struct.wgsl.expected.ir.msl
@@ -1,9 +1,29 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct VertexInputs {
+  uint vertex_index [[vertex_id]];
+  uint instance_index [[instance_id]];
+};
+
+vertex float4 tint_symbol(VertexInputs inputs) {
+  uint const foo = (inputs.vertex_index + inputs.instance_index);
+  return float4(0.0f);
+}
+program_source:4:23: error: 'vertex_id' attribute only applies to parameters
+  uint vertex_index [[vertex_id]];
+                      ^
+program_source:5:25: error: 'instance_id' attribute only applies to parameters
+  uint instance_index [[instance_id]];
+                        ^
+program_source:8:27: error: invalid type 'VertexInputs' for input declaration in a vertex function
+vertex float4 tint_symbol(VertexInputs inputs) {
+                          ^~~~~~~~~~~~~~~~~~~
+program_source:4:3: note: type 'uint' (aka 'unsigned int') cannot be used in struct of resources/colors
+  uint vertex_index [[vertex_id]];
+  ^
+program_source:5:3: note: type 'uint' (aka 'unsigned int') cannot be used in struct of resources/colors
+  uint instance_index [[instance_id]];
+  ^
+
diff --git a/test/tint/types/functions/shader_io/vertex_input_locations.wgsl.expected.ir.msl b/test/tint/types/functions/shader_io/vertex_input_locations.wgsl.expected.ir.msl
index 567c382..cebd0d9 100644
--- a/test/tint/types/functions/shader_io/vertex_input_locations.wgsl.expected.ir.msl
+++ b/test/tint/types/functions/shader_io/vertex_input_locations.wgsl.expected.ir.msl
@@ -1,9 +1,25 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:270 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+vertex float4 tint_symbol(int loc0, uint loc1, float loc2, float4 loc3) {
+  int const i = loc0;
+  uint const u = loc1;
+  float const f = loc2;
+  float4 const v = loc3;
+  return float4(0.0f);
+}
+program_source:4:27: error: invalid type 'int' for input declaration in a vertex function
+vertex float4 tint_symbol(int loc0, uint loc1, float loc2, float4 loc3) {
+                          ^~~~~~~~
+program_source:4:37: error: invalid type 'uint' (aka 'unsigned int') for input declaration in a vertex function
+vertex float4 tint_symbol(int loc0, uint loc1, float loc2, float4 loc3) {
+                                    ^~~~~~~~~
+program_source:4:48: error: invalid type 'float' for input declaration in a vertex function
+vertex float4 tint_symbol(int loc0, uint loc1, float loc2, float4 loc3) {
+                                               ^~~~~~~~~~
+program_source:4:60: error: invalid type 'float4' (vector of 4 'float' values) for input declaration in a vertex function
+vertex float4 tint_symbol(int loc0, uint loc1, float loc2, float4 loc3) {
+                                                           ^~~~~~~~~~~
+
diff --git a/test/tint/types/functions/shader_io/vertex_input_locations_f16.wgsl.expected.ir.msl b/test/tint/types/functions/shader_io/vertex_input_locations_f16.wgsl.expected.ir.msl
index 567c382..a544d6c 100644
--- a/test/tint/types/functions/shader_io/vertex_input_locations_f16.wgsl.expected.ir.msl
+++ b/test/tint/types/functions/shader_io/vertex_input_locations_f16.wgsl.expected.ir.msl
@@ -1,9 +1,33 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:270 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+vertex float4 tint_symbol(int loc0, uint loc1, float loc2, float4 loc3, half loc4, half3 loc5) {
+  int const i = loc0;
+  uint const u = loc1;
+  float const f = loc2;
+  float4 const v = loc3;
+  half const x = loc4;
+  half3 const y = loc5;
+  return float4(0.0f);
+}
+program_source:4:27: error: invalid type 'int' for input declaration in a vertex function
+vertex float4 tint_symbol(int loc0, uint loc1, float loc2, float4 loc3, half loc4, half3 loc5) {
+                          ^~~~~~~~
+program_source:4:37: error: invalid type 'uint' (aka 'unsigned int') for input declaration in a vertex function
+vertex float4 tint_symbol(int loc0, uint loc1, float loc2, float4 loc3, half loc4, half3 loc5) {
+                                    ^~~~~~~~~
+program_source:4:48: error: invalid type 'float' for input declaration in a vertex function
+vertex float4 tint_symbol(int loc0, uint loc1, float loc2, float4 loc3, half loc4, half3 loc5) {
+                                               ^~~~~~~~~~
+program_source:4:60: error: invalid type 'float4' (vector of 4 'float' values) for input declaration in a vertex function
+vertex float4 tint_symbol(int loc0, uint loc1, float loc2, float4 loc3, half loc4, half3 loc5) {
+                                                           ^~~~~~~~~~~
+program_source:4:73: error: invalid type 'half' for input declaration in a vertex function
+vertex float4 tint_symbol(int loc0, uint loc1, float loc2, float4 loc3, half loc4, half3 loc5) {
+                                                                        ^~~~~~~~~
+program_source:4:84: error: invalid type 'half3' (vector of 3 'half' values) for input declaration in a vertex function
+vertex float4 tint_symbol(int loc0, uint loc1, float loc2, float4 loc3, half loc4, half3 loc5) {
+                                                                                   ^~~~~~~~~~
+
diff --git a/test/tint/types/functions/shader_io/vertex_input_locations_struct.wgsl.expected.ir.msl b/test/tint/types/functions/shader_io/vertex_input_locations_struct.wgsl.expected.ir.msl
index 28251dc..4fa2af2 100644
--- a/test/tint/types/functions/shader_io/vertex_input_locations_struct.wgsl.expected.ir.msl
+++ b/test/tint/types/functions/shader_io/vertex_input_locations_struct.wgsl.expected.ir.msl
@@ -1,6 +1,27 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: VertexInputs = struct @align(16) {
+  loc0:i32 @offset(0), @location(0)
+  loc1:u32 @offset(4), @location(1)
+  loc2:f32 @offset(8), @location(2)
+  loc3:vec4<f32> @offset(16), @location(3)
+}
+
+%tint_symbol = @vertex func(%inputs:VertexInputs):vec4<f32> [@position] {
+  $B1: {
+    %3:i32 = access %inputs, 0u
+    %i:i32 = let %3
+    %5:u32 = access %inputs, 1u
+    %u:u32 = let %5
+    %7:f32 = access %inputs, 2u
+    %f:f32 = let %7
+    %9:vec4<f32> = access %inputs, 3u
+    %v:vec4<f32> = let %9
+    ret vec4<f32>(0.0f)
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/types/functions/shader_io/vertex_input_locations_struct_f16.wgsl.expected.ir.msl b/test/tint/types/functions/shader_io/vertex_input_locations_struct_f16.wgsl.expected.ir.msl
index 28251dc..ef6136c 100644
--- a/test/tint/types/functions/shader_io/vertex_input_locations_struct_f16.wgsl.expected.ir.msl
+++ b/test/tint/types/functions/shader_io/vertex_input_locations_struct_f16.wgsl.expected.ir.msl
@@ -1,6 +1,33 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: VertexInputs = struct @align(16) {
+  loc0:i32 @offset(0), @location(0)
+  loc1:u32 @offset(4), @location(1)
+  loc2:f32 @offset(8), @location(2)
+  loc3:vec4<f32> @offset(16), @location(3)
+  loc4:f16 @offset(32), @location(4)
+  loc5:vec3<f16> @offset(40), @location(5)
+}
+
+%tint_symbol = @vertex func(%inputs:VertexInputs):vec4<f32> [@position] {
+  $B1: {
+    %3:i32 = access %inputs, 0u
+    %i:i32 = let %3
+    %5:u32 = access %inputs, 1u
+    %u:u32 = let %5
+    %7:f32 = access %inputs, 2u
+    %f:f32 = let %7
+    %9:vec4<f32> = access %inputs, 3u
+    %v:vec4<f32> = let %9
+    %11:f16 = access %inputs, 4u
+    %x:f16 = let %11
+    %13:vec3<f16> = access %inputs, 5u
+    %y:vec3<f16> = let %13
+    ret vec4<f32>(0.0f)
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/types/functions/shader_io/vertex_input_mixed.wgsl.expected.ir.msl b/test/tint/types/functions/shader_io/vertex_input_mixed.wgsl.expected.ir.msl
index 28251dc..db54d4a 100644
--- a/test/tint/types/functions/shader_io/vertex_input_mixed.wgsl.expected.ir.msl
+++ b/test/tint/types/functions/shader_io/vertex_input_mixed.wgsl.expected.ir.msl
@@ -1,6 +1,32 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: VertexInputs0 = struct @align(4) {
+  vertex_index:u32 @offset(0), @builtin(vertex_index)
+  loc0:i32 @offset(4), @location(0)
+}
+
+VertexInputs1 = struct @align(16) {
+  loc2:f32 @offset(0), @location(2)
+  loc3:vec4<f32> @offset(16), @location(3)
+}
+
+%tint_symbol = @vertex func(%inputs0:VertexInputs0, %loc1:u32 [@location(1)], %instance_index:u32 [@instance_index], %inputs1:VertexInputs1):vec4<f32> [@position] {
+  $B1: {
+    %6:u32 = access %inputs0, 0u
+    %7:u32 = add %6, %instance_index
+    %foo:u32 = let %7
+    %9:i32 = access %inputs0, 1u
+    %i:i32 = let %9
+    %u:u32 = let %loc1
+    %12:f32 = access %inputs1, 0u
+    %f:f32 = let %12
+    %14:vec4<f32> = access %inputs1, 1u
+    %v:vec4<f32> = let %14
+    ret vec4<f32>(0.0f)
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/types/functions/shader_io/vertex_input_mixed_f16.wgsl.expected.ir.msl b/test/tint/types/functions/shader_io/vertex_input_mixed_f16.wgsl.expected.ir.msl
index 28251dc..d697490 100644
--- a/test/tint/types/functions/shader_io/vertex_input_mixed_f16.wgsl.expected.ir.msl
+++ b/test/tint/types/functions/shader_io/vertex_input_mixed_f16.wgsl.expected.ir.msl
@@ -1,6 +1,36 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: VertexInputs0 = struct @align(4) {
+  vertex_index:u32 @offset(0), @builtin(vertex_index)
+  loc0:i32 @offset(4), @location(0)
+}
+
+VertexInputs1 = struct @align(16) {
+  loc2:f32 @offset(0), @location(2)
+  loc3:vec4<f32> @offset(16), @location(3)
+  loc5:vec3<f16> @offset(32), @location(5)
+}
+
+%tint_symbol = @vertex func(%inputs0:VertexInputs0, %loc1:u32 [@location(1)], %instance_index:u32 [@instance_index], %inputs1:VertexInputs1, %loc4:f16 [@location(4)]):vec4<f32> [@position] {
+  $B1: {
+    %7:u32 = access %inputs0, 0u
+    %8:u32 = add %7, %instance_index
+    %foo:u32 = let %8
+    %10:i32 = access %inputs0, 1u
+    %i:i32 = let %10
+    %u:u32 = let %loc1
+    %13:f32 = access %inputs1, 0u
+    %f:f32 = let %13
+    %15:vec4<f32> = access %inputs1, 1u
+    %v:vec4<f32> = let %15
+    %x:f16 = let %loc4
+    %18:vec3<f16> = access %inputs1, 2u
+    %y:vec3<f16> = let %18
+    ret vec4<f32>(0.0f)
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/types/functions/shader_io/vertex_output_builtins.wgsl.expected.ir.msl b/test/tint/types/functions/shader_io/vertex_output_builtins.wgsl.expected.ir.msl
index 7db3005..8fa24ea 100644
--- a/test/tint/types/functions/shader_io/vertex_output_builtins.wgsl.expected.ir.msl
+++ b/test/tint/types/functions/shader_io/vertex_output_builtins.wgsl.expected.ir.msl
@@ -1,7 +1,3 @@
-SKIP: FAILED
-
-### Missing builtins
-
 #include <metal_stdlib>
 using namespace metal;
 
diff --git a/test/tint/types/functions/shader_io/vertex_output_locations_struct.wgsl.expected.ir.msl b/test/tint/types/functions/shader_io/vertex_output_locations_struct.wgsl.expected.ir.msl
index d6a72a1..b753a22 100644
--- a/test/tint/types/functions/shader_io/vertex_output_locations_struct.wgsl.expected.ir.msl
+++ b/test/tint/types/functions/shader_io/vertex_output_locations_struct.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:775 internal compiler error: VertexOutputs = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: VertexOutputs = struct @align(16) {
   loc0:i32 @offset(0), @location(0), @interpolate(flat)
   loc1:u32 @offset(4), @location(1), @interpolate(flat)
   loc2:f32 @offset(8), @location(2)
@@ -8,8 +8,8 @@
   position:vec4<f32> @offset(32), @builtin(position)
 }
 
-%tint_symbol = @vertex func():VertexOutputs -> %b1 {
-  %b1 = block {
+%tint_symbol = @vertex func():VertexOutputs {
+  $B1: {
     ret VertexOutputs(1i, 1u, 1.0f, vec4<f32>(1.0f, 2.0f, 3.0f, 4.0f), vec4<f32>(0.0f))
   }
 }
diff --git a/test/tint/types/functions/shader_io/vertex_output_locations_struct_f16.wgsl.expected.ir.msl b/test/tint/types/functions/shader_io/vertex_output_locations_struct_f16.wgsl.expected.ir.msl
index 1331fbc..5f83c26 100644
--- a/test/tint/types/functions/shader_io/vertex_output_locations_struct_f16.wgsl.expected.ir.msl
+++ b/test/tint/types/functions/shader_io/vertex_output_locations_struct_f16.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:775 internal compiler error: VertexOutputs = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: VertexOutputs = struct @align(16) {
   loc0:i32 @offset(0), @location(0), @interpolate(flat)
   loc1:u32 @offset(4), @location(1), @interpolate(flat)
   loc2:f32 @offset(8), @location(2)
@@ -10,8 +10,8 @@
   loc5:vec3<f16> @offset(56), @location(5)
 }
 
-%tint_symbol = @vertex func():VertexOutputs -> %b1 {
-  %b1 = block {
+%tint_symbol = @vertex func():VertexOutputs {
+  $B1: {
     ret VertexOutputs(1i, 1u, 1.0f, vec4<f32>(1.0f, 2.0f, 3.0f, 4.0f), vec4<f32>(0.0f), 2.25h, vec3<f16>(3.0h, 5.0h, 8.0h))
   }
 }
diff --git a/test/tint/types/module_scope_private_initializers.wgsl.expected.ir.msl b/test/tint/types/module_scope_private_initializers.wgsl.expected.ir.msl
new file mode 100644
index 0000000..7e87012
--- /dev/null
+++ b/test/tint/types/module_scope_private_initializers.wgsl.expected.ir.msl
@@ -0,0 +1,20 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread float a = 1.0f;
+thread float b = 0.0f;
+kernel void tint_symbol() {
+  float const x = (a + b);
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread float a = 1.0f;
+             ^
+program_source:5:14: error: program scope variable must reside in constant address space
+thread float b = 0.0f;
+             ^
+program_source:7:15: warning: unused variable 'x' [-Wunused-variable]
+  float const x = (a + b);
+              ^
+
diff --git a/test/tint/types/module_scope_used_in_functions.wgsl.expected.ir.msl b/test/tint/types/module_scope_used_in_functions.wgsl.expected.ir.msl
new file mode 100644
index 0000000..85e0261
--- /dev/null
+++ b/test/tint/types/module_scope_used_in_functions.wgsl.expected.ir.msl
@@ -0,0 +1,63 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %p:ptr<private, f32, read_write> = var
+  %w:ptr<workgroup, f32, read_write> = var
+  %uniforms:ptr<storage, vec2<f32>, read> = var @binding_point(0, 1)
+  %storages:ptr<storage, array<f32>, read_write> = var @binding_point(0, 0)
+}
+
+%no_uses = func():void {
+  $B2: {
+    ret
+  }
+}
+%zoo = func():void {
+  $B3: {
+    %7:f32 = load %p
+    %8:f32 = mul %7, 2.0f
+    store %p, %8
+    ret
+  }
+}
+%bar = func(%a:f32, %b:f32):void {
+  $B4: {
+    store %p, %a
+    store %w, %b
+    %12:ptr<storage, f32, read_write> = access %storages, 0i
+    %13:f32 = load_vector_element %uniforms, 0u
+    store %12, %13
+    %14:void = call %zoo
+    ret
+  }
+}
+%foo = func(%a_1:f32):void {  # %a_1: 'a'
+  $B5: {
+    %b_1:f32 = let 2.0f  # %b_1: 'b'
+    %18:void = call %bar, %a_1, %b_1
+    %19:void = call %no_uses
+    ret
+  }
+}
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%tint_local_index:u32 [@local_invocation_index]):void {
+  $B6: {
+    %22:bool = eq %tint_local_index, 0u
+    if %22 [t: $B7] {  # if_1
+      $B7: {  # true
+        store %w, 0.0f
+        exit_if  # if_1
+      }
+    }
+    %23:void = msl.threadgroup_barrier 4u
+    %24:void = call %foo, 1.0f
+    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.  *
+********************************************************************
diff --git a/test/tint/types/module_scope_var.wgsl.expected.ir.msl b/test/tint/types/module_scope_var.wgsl.expected.ir.msl
index efdd3b1..e3cf1cd 100644
--- a/test/tint/types/module_scope_var.wgsl.expected.ir.msl
+++ b/test/tint/types/module_scope_var.wgsl.expected.ir.msl
@@ -1,9 +1,92 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#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];
+};
+
+struct S {
+  float a;
+};
+
+thread bool bool_var = false;
+thread int i32_var = 0;
+thread uint u32_var = 0u;
+thread float f32_var = 0.0f;
+thread int2 v2i32_var = 0;
+thread uint3 v3u32_var = 0u;
+thread float4 v4f32_var = 0.0f;
+thread float2x3 m2x3_var = float2x3(0.0f);
+thread tint_array<float, 4> arr_var = {};
+thread S struct_var = {};
+threadgroup float wg_var;
+kernel void tint_symbol(uint tint_local_index [[thread_index_in_threadgroup]]) {
+  if ((tint_local_index == 0u)) {
+    wg_var = 0.0f;
+  }
+  threadgroup_barrier(mem_flags::mem_threadgroup);
+  bool_var = false;
+  i32_var = 0;
+  u32_var = 0u;
+  f32_var = 0.0f;
+  v2i32_var = int2(0);
+  v3u32_var = uint3(0u);
+  v4f32_var = float4(0.0f);
+  m2x3_var = float2x3(float3(0.0f), float3(0.0f));
+  arr_var = tint_array<float, 4>{};
+  struct_var = S{};
+  wg_var = 42.0f;
+}
+program_source:19:13: error: program scope variable must reside in constant address space
+thread bool bool_var = false;
+            ^
+program_source:20:12: error: program scope variable must reside in constant address space
+thread int i32_var = 0;
+           ^
+program_source:21:13: error: program scope variable must reside in constant address space
+thread uint u32_var = 0u;
+            ^
+program_source:22:14: error: program scope variable must reside in constant address space
+thread float f32_var = 0.0f;
+             ^
+program_source:23:13: error: program scope variable must reside in constant address space
+thread int2 v2i32_var = 0;
+            ^
+program_source:24:14: error: program scope variable must reside in constant address space
+thread uint3 v3u32_var = 0u;
+             ^
+program_source:25:15: error: program scope variable must reside in constant address space
+thread float4 v4f32_var = 0.0f;
+              ^
+program_source:26:17: error: program scope variable must reside in constant address space
+thread float2x3 m2x3_var = float2x3(0.0f);
+                ^
+program_source:27:29: error: program scope variable must reside in constant address space
+thread tint_array<float, 4> arr_var = {};
+                            ^
+program_source:28:10: error: program scope variable must reside in constant address space
+thread S struct_var = {};
+         ^
+program_source:29:19: error: program scope variable must reside in constant address space
+threadgroup float wg_var;
+                  ^
+program_source:31:25: warning: equality comparison with extraneous parentheses [-Wparentheses-equality]
+  if ((tint_local_index == 0u)) {
+       ~~~~~~~~~~~~~~~~~^~~~~
+program_source:31:25: note: remove extraneous parentheses around the comparison to silence this warning
+  if ((tint_local_index == 0u)) {
+      ~                 ^    ~
+program_source:31:25: note: use '=' to turn this equality comparison into an assignment
+  if ((tint_local_index == 0u)) {
+                        ^~
+                        =
+
diff --git a/test/tint/types/module_scope_var_conversions.wgsl.expected.ir.msl b/test/tint/types/module_scope_var_conversions.wgsl.expected.ir.msl
index efdd3b1..3487698 100644
--- a/test/tint/types/module_scope_var_conversions.wgsl.expected.ir.msl
+++ b/test/tint/types/module_scope_var_conversions.wgsl.expected.ir.msl
@@ -1,9 +1,108 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool bool_var1 = true;
+thread bool bool_var2 = true;
+thread bool bool_var3 = true;
+thread int i32_var1 = 1;
+thread int i32_var2 = 1;
+thread int i32_var3 = 1;
+thread uint u32_var1 = 1u;
+thread uint u32_var2 = 1u;
+thread uint u32_var3 = 1u;
+thread bool3 v3bool_var1 = bool3(true);
+thread bool3 v3bool_var2 = bool3(true);
+thread bool3 v3bool_var3 = bool3(true);
+thread int3 v3i32_var1 = int3(1);
+thread int3 v3i32_var2 = int3(1);
+thread int3 v3i32_var3 = int3(1);
+thread uint3 v3u32_var1 = uint3(1u);
+thread uint3 v3u32_var2 = uint3(1u);
+thread uint3 v3u32_var3 = uint3(1u);
+thread bool3 v3bool_var4 = bool3(true);
+thread bool4 v4bool_var5 = bool4(true, false, true, false);
+kernel void tint_symbol() {
+  bool_var1 = false;
+  bool_var2 = false;
+  bool_var3 = false;
+  i32_var1 = 0;
+  i32_var2 = 0;
+  i32_var3 = 0;
+  u32_var1 = 0u;
+  u32_var2 = 0u;
+  u32_var3 = 0u;
+  v3bool_var1 = bool3(false);
+  v3bool_var2 = bool3(false);
+  v3bool_var3 = bool3(false);
+  v3bool_var4 = bool3(false);
+  v4bool_var5 = bool4(false);
+  v3i32_var1 = int3(0);
+  v3i32_var2 = int3(0);
+  v3i32_var3 = int3(0);
+  v3u32_var1 = uint3(0u);
+  v3u32_var2 = uint3(0u);
+  v3u32_var3 = uint3(0u);
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread bool bool_var1 = true;
+            ^
+program_source:5:13: error: program scope variable must reside in constant address space
+thread bool bool_var2 = true;
+            ^
+program_source:6:13: error: program scope variable must reside in constant address space
+thread bool bool_var3 = true;
+            ^
+program_source:7:12: error: program scope variable must reside in constant address space
+thread int i32_var1 = 1;
+           ^
+program_source:8:12: error: program scope variable must reside in constant address space
+thread int i32_var2 = 1;
+           ^
+program_source:9:12: error: program scope variable must reside in constant address space
+thread int i32_var3 = 1;
+           ^
+program_source:10:13: error: program scope variable must reside in constant address space
+thread uint u32_var1 = 1u;
+            ^
+program_source:11:13: error: program scope variable must reside in constant address space
+thread uint u32_var2 = 1u;
+            ^
+program_source:12:13: error: program scope variable must reside in constant address space
+thread uint u32_var3 = 1u;
+            ^
+program_source:13:14: error: program scope variable must reside in constant address space
+thread bool3 v3bool_var1 = bool3(true);
+             ^
+program_source:14:14: error: program scope variable must reside in constant address space
+thread bool3 v3bool_var2 = bool3(true);
+             ^
+program_source:15:14: error: program scope variable must reside in constant address space
+thread bool3 v3bool_var3 = bool3(true);
+             ^
+program_source:16:13: error: program scope variable must reside in constant address space
+thread int3 v3i32_var1 = int3(1);
+            ^
+program_source:17:13: error: program scope variable must reside in constant address space
+thread int3 v3i32_var2 = int3(1);
+            ^
+program_source:18:13: error: program scope variable must reside in constant address space
+thread int3 v3i32_var3 = int3(1);
+            ^
+program_source:19:14: error: program scope variable must reside in constant address space
+thread uint3 v3u32_var1 = uint3(1u);
+             ^
+program_source:20:14: error: program scope variable must reside in constant address space
+thread uint3 v3u32_var2 = uint3(1u);
+             ^
+program_source:21:14: error: program scope variable must reside in constant address space
+thread uint3 v3u32_var3 = uint3(1u);
+             ^
+program_source:22:14: error: program scope variable must reside in constant address space
+thread bool3 v3bool_var4 = bool3(true);
+             ^
+program_source:23:14: error: program scope variable must reside in constant address space
+thread bool4 v4bool_var5 = bool4(true, false, true, false);
+             ^
+
diff --git a/test/tint/types/module_scope_var_initializers.wgsl.expected.ir.msl b/test/tint/types/module_scope_var_initializers.wgsl.expected.ir.msl
index efdd3b1..b889680 100644
--- a/test/tint/types/module_scope_var_initializers.wgsl.expected.ir.msl
+++ b/test/tint/types/module_scope_var_initializers.wgsl.expected.ir.msl
@@ -1,9 +1,73 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#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];
+};
+
+struct S {
+  float a;
+};
+
+thread bool bool_var = false;
+thread int i32_var = 0;
+thread uint u32_var = 0u;
+thread float f32_var = 0.0f;
+thread int2 v2i32_var = int2(0);
+thread uint3 v3u32_var = uint3(0u);
+thread float4 v4f32_var = float4(0.0f);
+thread float2x3 m2x3_var = float2x3(float3(0.0f), float3(0.0f));
+thread tint_array<float, 4> arr_var = tint_array<float, 4>{};
+thread S struct_var = S{};
+kernel void tint_symbol() {
+  bool_var = false;
+  i32_var = 0;
+  u32_var = 0u;
+  f32_var = 0.0f;
+  v2i32_var = int2(0);
+  v3u32_var = uint3(0u);
+  v4f32_var = float4(0.0f);
+  m2x3_var = float2x3(float3(0.0f), float3(0.0f));
+  arr_var = tint_array<float, 4>{};
+  struct_var = S{};
+}
+program_source:19:13: error: program scope variable must reside in constant address space
+thread bool bool_var = false;
+            ^
+program_source:20:12: error: program scope variable must reside in constant address space
+thread int i32_var = 0;
+           ^
+program_source:21:13: error: program scope variable must reside in constant address space
+thread uint u32_var = 0u;
+            ^
+program_source:22:14: error: program scope variable must reside in constant address space
+thread float f32_var = 0.0f;
+             ^
+program_source:23:13: error: program scope variable must reside in constant address space
+thread int2 v2i32_var = int2(0);
+            ^
+program_source:24:14: error: program scope variable must reside in constant address space
+thread uint3 v3u32_var = uint3(0u);
+             ^
+program_source:25:15: error: program scope variable must reside in constant address space
+thread float4 v4f32_var = float4(0.0f);
+              ^
+program_source:26:17: error: program scope variable must reside in constant address space
+thread float2x3 m2x3_var = float2x3(float3(0.0f), float3(0.0f));
+                ^
+program_source:27:29: error: program scope variable must reside in constant address space
+thread tint_array<float, 4> arr_var = tint_array<float, 4>{};
+                            ^
+program_source:28:10: error: program scope variable must reside in constant address space
+thread S struct_var = S{};
+         ^
+
diff --git a/test/tint/types/module_scope_vars_pointers.wgsl.expected.ir.msl b/test/tint/types/module_scope_vars_pointers.wgsl.expected.ir.msl
new file mode 100644
index 0000000..68d0820
--- /dev/null
+++ b/test/tint/types/module_scope_vars_pointers.wgsl.expected.ir.msl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+thread float p = 0.0f;
+threadgroup float w;
+kernel void tint_symbol(uint tint_local_index [[thread_index_in_threadgroup]]) {
+  if ((tint_local_index == 0u)) {
+    w = 0.0f;
+  }
+  threadgroup_barrier(mem_flags::mem_threadgroup);
+  thread float* const p_ptr = p;
+  threadgroup float* const w_ptr = w;
+  float const x = (p_ptr + w_ptr);
+  p_ptr = x;
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread float p = 0.0f;
+             ^
+program_source:5:19: error: program scope variable must reside in constant address space
+threadgroup float w;
+                  ^
+program_source:7:25: warning: equality comparison with extraneous parentheses [-Wparentheses-equality]
+  if ((tint_local_index == 0u)) {
+       ~~~~~~~~~~~~~~~~~^~~~~
+program_source:7:25: note: remove extraneous parentheses around the comparison to silence this warning
+  if ((tint_local_index == 0u)) {
+      ~                 ^    ~
+program_source:7:25: note: use '=' to turn this equality comparison into an assignment
+  if ((tint_local_index == 0u)) {
+                        ^~
+                        =
+program_source:13:26: error: invalid operands to binary expression ('float *const' and 'threadgroup float *const')
+  float const x = (p_ptr + w_ptr);
+                   ~~~~~ ^ ~~~~~
+program_source:14:9: error: cannot assign to variable 'p_ptr' with const-qualified type 'float *const'
+  p_ptr = x;
+  ~~~~~ ^
+program_source:11:23: note: variable 'p_ptr' declared const here
+  thread float* const p_ptr = p;
+  ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~
+
diff --git a/test/tint/types/sampler.wgsl.expected.ir.msl b/test/tint/types/sampler.wgsl.expected.ir.msl
index c3942d3..3543919 100644
--- a/test/tint/types/sampler.wgsl.expected.ir.msl
+++ b/test/tint/types/sampler.wgsl.expected.ir.msl
@@ -1,9 +1,9 @@
 SKIP: FAILED
 
-#include <metal_stdlib>
-using namespace metal;
-
-sampler s;
-sampler sc;
-void tint_symbol() {
-}
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSample
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/types/short_names/short_names.wgsl.expected.ir.msl b/test/tint/types/short_names/short_names.wgsl.expected.ir.msl
index 7be8f30..378203b 100644
--- a/test/tint/types/short_names/short_names.wgsl.expected.ir.msl
+++ b/test/tint/types/short_names/short_names.wgsl.expected.ir.msl
@@ -3,6 +3,10 @@
 #include <metal_stdlib>
 using namespace metal;
 
-float4 tint_symbol() {
+vertex float4 tint_symbol(uint VertexIndex [[]]) {
   return float4(0.0f, 0.0f, 0.0f, 1.0f);
 }
+program_source:4:27: error: invalid type 'uint' (aka 'unsigned int') for input declaration in a vertex function
+vertex float4 tint_symbol(uint VertexIndex [[]]) {
+                          ^~~~~~~~~~~~~~~~
+
diff --git a/test/tint/types/texture/depth/2d.wgsl.expected.ir.msl b/test/tint/types/texture/depth/2d.wgsl.expected.ir.msl
index df40174..9a1e6cb 100644
--- a/test/tint/types/texture/depth/2d.wgsl.expected.ir.msl
+++ b/test/tint/types/texture/depth/2d.wgsl.expected.ir.msl
@@ -1,8 +1,9 @@
 SKIP: FAILED
 
-#include <metal_stdlib>
-using namespace metal;
-
-depth2d<float, access::sample> t_f;
-void tint_symbol() {
-}
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureDimensions
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/types/texture/depth/2d_array.wgsl.expected.ir.msl b/test/tint/types/texture/depth/2d_array.wgsl.expected.ir.msl
index 864933a..9a1e6cb 100644
--- a/test/tint/types/texture/depth/2d_array.wgsl.expected.ir.msl
+++ b/test/tint/types/texture/depth/2d_array.wgsl.expected.ir.msl
@@ -1,8 +1,9 @@
 SKIP: FAILED
 
-#include <metal_stdlib>
-using namespace metal;
-
-depth2d_array<float, access::sample> t_f;
-void tint_symbol() {
-}
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureDimensions
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/types/texture/depth/cube.wgsl.expected.ir.msl b/test/tint/types/texture/depth/cube.wgsl.expected.ir.msl
index 35a54bc..9a1e6cb 100644
--- a/test/tint/types/texture/depth/cube.wgsl.expected.ir.msl
+++ b/test/tint/types/texture/depth/cube.wgsl.expected.ir.msl
@@ -1,8 +1,9 @@
 SKIP: FAILED
 
-#include <metal_stdlib>
-using namespace metal;
-
-depthcube<float, access::sample> t_f;
-void tint_symbol() {
-}
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureDimensions
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/types/texture/depth/cube_array.wgsl.expected.ir.msl b/test/tint/types/texture/depth/cube_array.wgsl.expected.ir.msl
index ae64100..9a1e6cb 100644
--- a/test/tint/types/texture/depth/cube_array.wgsl.expected.ir.msl
+++ b/test/tint/types/texture/depth/cube_array.wgsl.expected.ir.msl
@@ -1,8 +1,9 @@
 SKIP: FAILED
 
-#include <metal_stdlib>
-using namespace metal;
-
-depthcube_array<float, access::sample> t_f;
-void tint_symbol() {
-}
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureDimensions
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/types/texture/multisampled/2d.wgsl.expected.ir.msl b/test/tint/types/texture/multisampled/2d.wgsl.expected.ir.msl
index 7a873c5..9a1e6cb 100644
--- a/test/tint/types/texture/multisampled/2d.wgsl.expected.ir.msl
+++ b/test/tint/types/texture/multisampled/2d.wgsl.expected.ir.msl
@@ -1,10 +1,9 @@
 SKIP: FAILED
 
-#include <metal_stdlib>
-using namespace metal;
-
-texture2d_ms<float, access::read> t_f;
-texture2d_ms<int, access::read> t_i;
-texture2d_ms<uint, access::read> t_u;
-void tint_symbol() {
-}
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureDimensions
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/types/texture/sampled/1d.wgsl.expected.ir.msl b/test/tint/types/texture/sampled/1d.wgsl.expected.ir.msl
index de8963b..9a1e6cb 100644
--- a/test/tint/types/texture/sampled/1d.wgsl.expected.ir.msl
+++ b/test/tint/types/texture/sampled/1d.wgsl.expected.ir.msl
@@ -1,10 +1,9 @@
 SKIP: FAILED
 
-#include <metal_stdlib>
-using namespace metal;
-
-texture1d<float, access::sample> t_f;
-texture1d<int, access::sample> t_i;
-texture1d<uint, access::sample> t_u;
-void tint_symbol() {
-}
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureDimensions
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/types/texture/sampled/2d.wgsl.expected.ir.msl b/test/tint/types/texture/sampled/2d.wgsl.expected.ir.msl
index 249fc21..9a1e6cb 100644
--- a/test/tint/types/texture/sampled/2d.wgsl.expected.ir.msl
+++ b/test/tint/types/texture/sampled/2d.wgsl.expected.ir.msl
@@ -1,10 +1,9 @@
 SKIP: FAILED
 
-#include <metal_stdlib>
-using namespace metal;
-
-texture2d<float, access::sample> t_f;
-texture2d<int, access::sample> t_i;
-texture2d<uint, access::sample> t_u;
-void tint_symbol() {
-}
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureDimensions
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/types/texture/sampled/2d_array.wgsl.expected.ir.msl b/test/tint/types/texture/sampled/2d_array.wgsl.expected.ir.msl
index 5a91806..9a1e6cb 100644
--- a/test/tint/types/texture/sampled/2d_array.wgsl.expected.ir.msl
+++ b/test/tint/types/texture/sampled/2d_array.wgsl.expected.ir.msl
@@ -1,10 +1,9 @@
 SKIP: FAILED
 
-#include <metal_stdlib>
-using namespace metal;
-
-texture2d_array<float, access::sample> t_f;
-texture2d_array<int, access::sample> t_i;
-texture2d_array<uint, access::sample> t_u;
-void tint_symbol() {
-}
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureDimensions
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/types/texture/sampled/3d.wgsl.expected.ir.msl b/test/tint/types/texture/sampled/3d.wgsl.expected.ir.msl
index 16cef6c..9a1e6cb 100644
--- a/test/tint/types/texture/sampled/3d.wgsl.expected.ir.msl
+++ b/test/tint/types/texture/sampled/3d.wgsl.expected.ir.msl
@@ -1,10 +1,9 @@
 SKIP: FAILED
 
-#include <metal_stdlib>
-using namespace metal;
-
-texture3d<float, access::sample> t_f;
-texture3d<int, access::sample> t_i;
-texture3d<uint, access::sample> t_u;
-void tint_symbol() {
-}
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureDimensions
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/types/texture/sampled/cube.wgsl.expected.ir.msl b/test/tint/types/texture/sampled/cube.wgsl.expected.ir.msl
index a9be39c..9a1e6cb 100644
--- a/test/tint/types/texture/sampled/cube.wgsl.expected.ir.msl
+++ b/test/tint/types/texture/sampled/cube.wgsl.expected.ir.msl
@@ -1,8 +1,9 @@
-#include <metal_stdlib>
-using namespace metal;
+SKIP: FAILED
 
-texturecube<float, access::sample> t_f;
-texturecube<int, access::sample> t_i;
-texturecube<uint, access::sample> t_u;
-void tint_symbol() {
-}
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureDimensions
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/types/texture/sampled/cube_array.wgsl.expected.ir.msl b/test/tint/types/texture/sampled/cube_array.wgsl.expected.ir.msl
index 773b17f..9a1e6cb 100644
--- a/test/tint/types/texture/sampled/cube_array.wgsl.expected.ir.msl
+++ b/test/tint/types/texture/sampled/cube_array.wgsl.expected.ir.msl
@@ -1,10 +1,9 @@
 SKIP: FAILED
 
-#include <metal_stdlib>
-using namespace metal;
-
-texturecube_array<float, access::sample> t_f;
-texturecube_array<int, access::sample> t_i;
-texturecube_array<uint, access::sample> t_u;
-void tint_symbol() {
-}
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureDimensions
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/types/texture/storage/1d.wgsl.expected.ir.msl b/test/tint/types/texture/storage/1d.wgsl.expected.ir.msl
index c2b9c9d..9a1e6cb 100644
--- a/test/tint/types/texture/storage/1d.wgsl.expected.ir.msl
+++ b/test/tint/types/texture/storage/1d.wgsl.expected.ir.msl
@@ -1,23 +1,9 @@
 SKIP: FAILED
 
-#include <metal_stdlib>
-using namespace metal;
-
-texture1d<float, access::write> t_rgba8unorm;
-texture1d<float, access::write> t_rgba8snorm;
-texture1d<uint, access::write> t_rgba8uint;
-texture1d<int, access::write> t_rgba8sint;
-texture1d<uint, access::write> t_rgba16uint;
-texture1d<int, access::write> t_rgba16sint;
-texture1d<float, access::write> t_rgba16float;
-texture1d<uint, access::write> t_r32uint;
-texture1d<int, access::write> t_r32sint;
-texture1d<float, access::write> t_r32float;
-texture1d<uint, access::write> t_rg32uint;
-texture1d<int, access::write> t_rg32sint;
-texture1d<float, access::write> t_rg32float;
-texture1d<uint, access::write> t_rgba32uint;
-texture1d<int, access::write> t_rgba32sint;
-texture1d<float, access::write> t_rgba32float;
-void tint_symbol() {
-}
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureDimensions
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/types/texture/storage/2d.wgsl.expected.ir.msl b/test/tint/types/texture/storage/2d.wgsl.expected.ir.msl
index 597f501..9a1e6cb 100644
--- a/test/tint/types/texture/storage/2d.wgsl.expected.ir.msl
+++ b/test/tint/types/texture/storage/2d.wgsl.expected.ir.msl
@@ -1,23 +1,9 @@
 SKIP: FAILED
 
-#include <metal_stdlib>
-using namespace metal;
-
-texture2d<float, access::write> t_rgba8unorm;
-texture2d<float, access::write> t_rgba8snorm;
-texture2d<uint, access::write> t_rgba8uint;
-texture2d<int, access::write> t_rgba8sint;
-texture2d<uint, access::write> t_rgba16uint;
-texture2d<int, access::write> t_rgba16sint;
-texture2d<float, access::write> t_rgba16float;
-texture2d<uint, access::write> t_r32uint;
-texture2d<int, access::write> t_r32sint;
-texture2d<float, access::write> t_r32float;
-texture2d<uint, access::write> t_rg32uint;
-texture2d<int, access::write> t_rg32sint;
-texture2d<float, access::write> t_rg32float;
-texture2d<uint, access::write> t_rgba32uint;
-texture2d<int, access::write> t_rgba32sint;
-texture2d<float, access::write> t_rgba32float;
-void tint_symbol() {
-}
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureDimensions
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/types/texture/storage/2d_array.wgsl.expected.ir.msl b/test/tint/types/texture/storage/2d_array.wgsl.expected.ir.msl
index ed693ca..9a1e6cb 100644
--- a/test/tint/types/texture/storage/2d_array.wgsl.expected.ir.msl
+++ b/test/tint/types/texture/storage/2d_array.wgsl.expected.ir.msl
@@ -1,23 +1,9 @@
 SKIP: FAILED
 
-#include <metal_stdlib>
-using namespace metal;
-
-texture2d_array<float, access::write> t_rgba8unorm;
-texture2d_array<float, access::write> t_rgba8snorm;
-texture2d_array<uint, access::write> t_rgba8uint;
-texture2d_array<int, access::write> t_rgba8sint;
-texture2d_array<uint, access::write> t_rgba16uint;
-texture2d_array<int, access::write> t_rgba16sint;
-texture2d_array<float, access::write> t_rgba16float;
-texture2d_array<uint, access::write> t_r32uint;
-texture2d_array<int, access::write> t_r32sint;
-texture2d_array<float, access::write> t_r32float;
-texture2d_array<uint, access::write> t_rg32uint;
-texture2d_array<int, access::write> t_rg32sint;
-texture2d_array<float, access::write> t_rg32float;
-texture2d_array<uint, access::write> t_rgba32uint;
-texture2d_array<int, access::write> t_rgba32sint;
-texture2d_array<float, access::write> t_rgba32float;
-void tint_symbol() {
-}
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureDimensions
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/types/texture/storage/3d.wgsl.expected.ir.msl b/test/tint/types/texture/storage/3d.wgsl.expected.ir.msl
index 805775a..9a1e6cb 100644
--- a/test/tint/types/texture/storage/3d.wgsl.expected.ir.msl
+++ b/test/tint/types/texture/storage/3d.wgsl.expected.ir.msl
@@ -1,23 +1,9 @@
 SKIP: FAILED
 
-#include <metal_stdlib>
-using namespace metal;
-
-texture3d<float, access::write> t_rgba8unorm;
-texture3d<float, access::write> t_rgba8snorm;
-texture3d<uint, access::write> t_rgba8uint;
-texture3d<int, access::write> t_rgba8sint;
-texture3d<uint, access::write> t_rgba16uint;
-texture3d<int, access::write> t_rgba16sint;
-texture3d<float, access::write> t_rgba16float;
-texture3d<uint, access::write> t_r32uint;
-texture3d<int, access::write> t_r32sint;
-texture3d<float, access::write> t_r32float;
-texture3d<uint, access::write> t_rg32uint;
-texture3d<int, access::write> t_rg32sint;
-texture3d<float, access::write> t_rg32float;
-texture3d<uint, access::write> t_rgba32uint;
-texture3d<int, access::write> t_rgba32sint;
-texture3d<float, access::write> t_rgba32float;
-void tint_symbol() {
-}
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureDimensions
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl
index b38060a..ee65b2d 100644
--- a/test/tint/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureLoad
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl
index b38060a..ee65b2d 100644
--- a/test/tint/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureLoad
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.ir.msl
index b38060a..ee65b2d 100644
--- a/test/tint/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureLoad
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.ir.msl
index b38060a..ee65b2d 100644
--- a/test/tint/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureLoad
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.ir.msl
index b38060a..ee65b2d 100644
--- a/test/tint/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureLoad
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.ir.msl
index b38060a..ee65b2d 100644
--- a/test/tint/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureLoad
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_6.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_6.spvasm.expected.ir.msl
index b38060a..3543919 100644
--- a/test/tint/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_6.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_6.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSample
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ConvertUintCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ConvertUintCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.ir.msl
index 94e248c..ee65b2d 100644
--- a/test/tint/unittest/reader/spirv/ConvertUintCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ConvertUintCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Swizzle
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureLoad
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ConvertUintCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ConvertUintCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.ir.msl
index 94e248c..ee65b2d 100644
--- a/test/tint/unittest/reader/spirv/ConvertUintCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ConvertUintCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Swizzle
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureLoad
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ConvertUintCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ConvertUintCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.ir.msl
index 94e248c..877ebc6 100644
--- a/test/tint/unittest/reader/spirv/ConvertUintCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ConvertUintCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Swizzle
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.ir.msl
index b38060a..ee65b2d 100644
--- a/test/tint/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureLoad
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.ir.msl
index b38060a..ee65b2d 100644
--- a/test/tint/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureLoad
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.ir.msl
index 47c8fbc..877ebc6 100644
--- a/test/tint/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.ir.msl
index b38060a..ee65b2d 100644
--- a/test/tint/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureLoad
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_4.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_4.spvasm.expected.ir.msl
index b38060a..ee65b2d 100644
--- a/test/tint/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_4.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_4.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureLoad
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_5.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_5.spvasm.expected.ir.msl
index 47c8fbc..877ebc6 100644
--- a/test/tint/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_5.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_5.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Convert
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.ir.msl
index b38060a..3543919 100644
--- a/test/tint/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSample
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.ir.msl
index b38060a..3543919 100644
--- a/test/tint/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSample
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.ir.msl
index b38060a..3543919 100644
--- a/test/tint/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSample
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.ir.msl
index b38060a..3543919 100644
--- a/test/tint/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSample
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/Good_2DArray_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/Good_2DArray_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.ir.msl
index 94e248c..3543919 100644
--- a/test/tint/unittest/reader/spirv/Good_2DArray_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/Good_2DArray_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Swizzle
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSample
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/Good_2DArray_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/Good_2DArray_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.ir.msl
index 94e248c..3543919 100644
--- a/test/tint/unittest/reader/spirv/Good_2DArray_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/Good_2DArray_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Swizzle
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSample
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/Good_2D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/Good_2D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.ir.msl
index b38060a..3543919 100644
--- a/test/tint/unittest/reader/spirv/Good_2D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/Good_2D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSample
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/Good_2D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/Good_2D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.ir.msl
index b38060a..3543919 100644
--- a/test/tint/unittest/reader/spirv/Good_2D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/Good_2D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSample
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/Good_2D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/Good_2D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.ir.msl
index b38060a..3543919 100644
--- a/test/tint/unittest/reader/spirv/Good_2D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/Good_2D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSample
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/Good_3D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/Good_3D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.ir.msl
index b38060a..3543919 100644
--- a/test/tint/unittest/reader/spirv/Good_3D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/Good_3D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSample
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/Good_3D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/Good_3D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.ir.msl
index b38060a..3543919 100644
--- a/test/tint/unittest/reader/spirv/Good_3D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/Good_3D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSample
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/Good_CubeArray_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/Good_CubeArray_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.ir.msl
index 94e248c..3543919 100644
--- a/test/tint/unittest/reader/spirv/Good_CubeArray_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/Good_CubeArray_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Swizzle
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSample
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/Good_Cube_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/Good_Cube_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.ir.msl
index b38060a..3543919 100644
--- a/test/tint/unittest/reader/spirv/Good_Cube_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/Good_Cube_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSample
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/Good_Cube_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/Good_Cube_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.ir.msl
index b38060a..3543919 100644
--- a/test/tint/unittest/reader/spirv/Good_Cube_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/Good_Cube_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSample
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageFetch_DepthMultisampled_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageFetch_DepthMultisampled_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.ir.msl
index b38060a..ee65b2d 100644
--- a/test/tint/unittest/reader/spirv/ImageFetch_DepthMultisampled_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageFetch_DepthMultisampled_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureLoad
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageFetch_Depth_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageFetch_Depth_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.ir.msl
index b38060a..ee65b2d 100644
--- a/test/tint/unittest/reader/spirv/ImageFetch_Depth_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageFetch_Depth_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureLoad
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageFetch_Multisampled_ConvertSampleOperand_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageFetch_Multisampled_ConvertSampleOperand_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.ir.msl
index b38060a..ee65b2d 100644
--- a/test/tint/unittest/reader/spirv/ImageFetch_Multisampled_ConvertSampleOperand_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageFetch_Multisampled_ConvertSampleOperand_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureLoad
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageFetch_Multisampled_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageFetch_Multisampled_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.ir.msl
index b38060a..ee65b2d 100644
--- a/test/tint/unittest/reader/spirv/ImageFetch_Multisampled_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageFetch_Multisampled_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureLoad
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.ir.msl
index b38060a..ee65b2d 100644
--- a/test/tint/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureLoad
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.ir.msl
index b38060a..ee65b2d 100644
--- a/test/tint/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureLoad
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_2.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_2.spvasm.expected.ir.msl
index b38060a..ee65b2d 100644
--- a/test/tint/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_2.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_2.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureLoad
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_3.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_3.spvasm.expected.ir.msl
index b38060a..ee65b2d 100644
--- a/test/tint/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_3.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_3.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureLoad
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl
index b38060a..c341f8a 100644
--- a/test/tint/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureNumLevels
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl
index b38060a..c341f8a 100644
--- a/test/tint/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureNumLevels
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.ir.msl
index b38060a..c341f8a 100644
--- a/test/tint/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureNumLevels
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.ir.msl
index b38060a..c341f8a 100644
--- a/test/tint/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureNumLevels
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.ir.msl
index b38060a..c341f8a 100644
--- a/test/tint/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureNumLevels
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.ir.msl
index b38060a..c341f8a 100644
--- a/test/tint/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureNumLevels
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_6.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_6.spvasm.expected.ir.msl
index b38060a..c341f8a 100644
--- a/test/tint/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_6.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_6.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureNumLevels
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_7.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_7.spvasm.expected.ir.msl
index b38060a..c341f8a 100644
--- a/test/tint/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_7.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_7.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureNumLevels
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_8.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_8.spvasm.expected.ir.msl
index b38060a..c341f8a 100644
--- a/test/tint/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_8.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_8.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureNumLevels
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageQueryLevels_UnsignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageQueryLevels_UnsignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl
index b38060a..c341f8a 100644
--- a/test/tint/unittest/reader/spirv/ImageQueryLevels_UnsignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageQueryLevels_UnsignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureNumLevels
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageQuerySamples_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageQuerySamples_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl
index b38060a..8b02481 100644
--- a/test/tint/unittest/reader/spirv/ImageQuerySamples_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageQuerySamples_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureNumSamples
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageQuerySamples_UnsignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageQuerySamples_UnsignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl
index b38060a..8b02481 100644
--- a/test/tint/unittest/reader/spirv/ImageQuerySamples_UnsignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageQuerySamples_UnsignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureNumSamples
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl
index b38060a..9a1e6cb 100644
--- a/test/tint/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureDimensions
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl
index b38060a..9a1e6cb 100644
--- a/test/tint/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureDimensions
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.ir.msl
index b38060a..9a1e6cb 100644
--- a/test/tint/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureDimensions
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.ir.msl
index b38060a..9a1e6cb 100644
--- a/test/tint/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureDimensions
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl
index b38060a..9a1e6cb 100644
--- a/test/tint/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureDimensions
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.ir.msl
index b38060a..9a1e6cb 100644
--- a/test/tint/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureDimensions
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.ir.msl
index b38060a..9a1e6cb 100644
--- a/test/tint/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureDimensions
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.ir.msl
index b38060a..9a1e6cb 100644
--- a/test/tint/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureDimensions
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.ir.msl
index b38060a..9a1e6cb 100644
--- a/test/tint/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureDimensions
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageQuerySize_Arrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageQuerySize_Arrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl
index b38060a..9a1e6cb 100644
--- a/test/tint/unittest/reader/spirv/ImageQuerySize_Arrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageQuerySize_Arrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureDimensions
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageQuerySize_NonArrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageQuerySize_NonArrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl
index b38060a..9a1e6cb 100644
--- a/test/tint/unittest/reader/spirv/ImageQuerySize_NonArrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageQuerySize_NonArrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureDimensions
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageQuerySize_NonArrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageQuerySize_NonArrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.ir.msl
index b38060a..9a1e6cb 100644
--- a/test/tint/unittest/reader/spirv/ImageQuerySize_NonArrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageQuerySize_NonArrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureDimensions
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageQuerySize_NonArrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageQuerySize_NonArrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.ir.msl
index b38060a..9a1e6cb 100644
--- a/test/tint/unittest/reader/spirv/ImageQuerySize_NonArrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageQuerySize_NonArrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureDimensions
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageRead_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageRead_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.ir.msl
index b38060a..ee65b2d 100644
--- a/test/tint/unittest/reader/spirv/ImageRead_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageRead_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureLoad
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl
index b38060a..e9d3747 100644
--- a/test/tint/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSampleCompareLevel
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl
index 94e248c..e9d3747 100644
--- a/test/tint/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Swizzle
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSampleCompareLevel
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.ir.msl
index b38060a..e9d3747 100644
--- a/test/tint/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSampleCompareLevel
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.ir.msl
index 94e248c..e9d3747 100644
--- a/test/tint/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Swizzle
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSampleCompareLevel
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.ir.msl
index b38060a..e9d3747 100644
--- a/test/tint/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSampleCompareLevel
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.ir.msl
index 94e248c..e9d3747 100644
--- a/test/tint/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Swizzle
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSampleCompareLevel
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl
index b38060a..ca3ca5e 100644
--- a/test/tint/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSampleCompare
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl
index 94e248c..ca3ca5e 100644
--- a/test/tint/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Swizzle
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSampleCompare
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.ir.msl
index b38060a..ca3ca5e 100644
--- a/test/tint/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSampleCompare
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.ir.msl
index 94e248c..ca3ca5e 100644
--- a/test/tint/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Swizzle
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSampleCompare
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageSampleExplicitLod_DepthTexture_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageSampleExplicitLod_DepthTexture_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl
index b38060a..d62b699 100644
--- a/test/tint/unittest/reader/spirv/ImageSampleExplicitLod_DepthTexture_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageSampleExplicitLod_DepthTexture_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSampleLevel
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageSampleExplicitLod_DepthTexture_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageSampleExplicitLod_DepthTexture_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl
index b38060a..d62b699 100644
--- a/test/tint/unittest/reader/spirv/ImageSampleExplicitLod_DepthTexture_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageSampleExplicitLod_DepthTexture_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSampleLevel
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl
index b38060a..0241c1a 100644
--- a/test/tint/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSampleGrad
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl
index 94e248c..0241c1a 100644
--- a/test/tint/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Swizzle
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSampleGrad
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.ir.msl
index b38060a..0241c1a 100644
--- a/test/tint/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSampleGrad
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.ir.msl
index b38060a..0241c1a 100644
--- a/test/tint/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSampleGrad
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.ir.msl
index 94e248c..0241c1a 100644
--- a/test/tint/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Swizzle
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSampleGrad
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.ir.msl
index 94e248c..0241c1a 100644
--- a/test/tint/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Swizzle
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSampleGrad
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl
index b38060a..d62b699 100644
--- a/test/tint/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSampleLevel
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl
index 94e248c..d62b699 100644
--- a/test/tint/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Swizzle
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSampleLevel
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.ir.msl
index b38060a..d62b699 100644
--- a/test/tint/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSampleLevel
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.ir.msl
index b38060a..d62b699 100644
--- a/test/tint/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSampleLevel
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.ir.msl
index 94e248c..d62b699 100644
--- a/test/tint/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Swizzle
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSampleLevel
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageSampleImplicitLod_BothDrefAndNonDref_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageSampleImplicitLod_BothDrefAndNonDref_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl
index b38060a..3543919 100644
--- a/test/tint/unittest/reader/spirv/ImageSampleImplicitLod_BothDrefAndNonDref_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageSampleImplicitLod_BothDrefAndNonDref_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSample
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl
index b38060a..3543919 100644
--- a/test/tint/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSample
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl
index 94e248c..3543919 100644
--- a/test/tint/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Swizzle
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSample
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.ir.msl
index b38060a..3543919 100644
--- a/test/tint/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSample
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.ir.msl
index 94e248c..3543919 100644
--- a/test/tint/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Swizzle
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSample
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.ir.msl
index b38060a..10e5141 100644
--- a/test/tint/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSampleBias
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.ir.msl
index 94e248c..10e5141 100644
--- a/test/tint/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Swizzle
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSampleBias
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_6.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_6.spvasm.expected.ir.msl
index b38060a..10e5141 100644
--- a/test/tint/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_6.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_6.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSampleBias
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_7.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_7.spvasm.expected.ir.msl
index b38060a..10e5141 100644
--- a/test/tint/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_7.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_7.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSampleBias
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_8.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_8.spvasm.expected.ir.msl
index 94e248c..10e5141 100644
--- a/test/tint/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_8.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_8.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Swizzle
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSampleBias
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageSampleProjDrefExplicitLod_CheckForLod0_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageSampleProjDrefExplicitLod_CheckForLod0_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.ir.msl
index 94e248c..e9d3747 100644
--- a/test/tint/unittest/reader/spirv/ImageSampleProjDrefExplicitLod_CheckForLod0_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageSampleProjDrefExplicitLod_CheckForLod0_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Swizzle
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSampleCompareLevel
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageSampleProjDrefExplicitLod_CheckForLod0_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageSampleProjDrefExplicitLod_CheckForLod0_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.ir.msl
index 94e248c..e9d3747 100644
--- a/test/tint/unittest/reader/spirv/ImageSampleProjDrefExplicitLod_CheckForLod0_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageSampleProjDrefExplicitLod_CheckForLod0_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Swizzle
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSampleCompareLevel
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageSampleProjDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageSampleProjDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl
index 94e248c..ca3ca5e 100644
--- a/test/tint/unittest/reader/spirv/ImageSampleProjDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageSampleProjDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Swizzle
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSampleCompare
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageSampleProjDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageSampleProjDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl
index 94e248c..ca3ca5e 100644
--- a/test/tint/unittest/reader/spirv/ImageSampleProjDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageSampleProjDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Swizzle
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSampleCompare
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageSampleProjExplicitLod_Grad_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageSampleProjExplicitLod_Grad_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl
index 94e248c..0241c1a 100644
--- a/test/tint/unittest/reader/spirv/ImageSampleProjExplicitLod_Grad_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageSampleProjExplicitLod_Grad_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Swizzle
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSampleGrad
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageSampleProjExplicitLod_Grad_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageSampleProjExplicitLod_Grad_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl
index 94e248c..0241c1a 100644
--- a/test/tint/unittest/reader/spirv/ImageSampleProjExplicitLod_Grad_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageSampleProjExplicitLod_Grad_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Swizzle
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSampleGrad
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageSampleProjExplicitLod_Lod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageSampleProjExplicitLod_Lod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl
index 94e248c..d62b699 100644
--- a/test/tint/unittest/reader/spirv/ImageSampleProjExplicitLod_Lod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageSampleProjExplicitLod_Lod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Swizzle
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSampleLevel
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageSampleProjExplicitLod_Lod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageSampleProjExplicitLod_Lod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl
index 94e248c..d62b699 100644
--- a/test/tint/unittest/reader/spirv/ImageSampleProjExplicitLod_Lod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageSampleProjExplicitLod_Lod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Swizzle
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSampleLevel
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageSampleProjImplicitLod_Bias_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageSampleProjImplicitLod_Bias_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl
index 94e248c..10e5141 100644
--- a/test/tint/unittest/reader/spirv/ImageSampleProjImplicitLod_Bias_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageSampleProjImplicitLod_Bias_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Swizzle
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSampleBias
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageSampleProjImplicitLod_Bias_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageSampleProjImplicitLod_Bias_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl
index 94e248c..10e5141 100644
--- a/test/tint/unittest/reader/spirv/ImageSampleProjImplicitLod_Bias_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageSampleProjImplicitLod_Bias_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Swizzle
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSampleBias
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageSampleProjImplicitLod_Bias_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageSampleProjImplicitLod_Bias_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.ir.msl
index 94e248c..10e5141 100644
--- a/test/tint/unittest/reader/spirv/ImageSampleProjImplicitLod_Bias_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageSampleProjImplicitLod_Bias_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Swizzle
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSampleBias
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageSampleProjImplicitLod_DepthTexture_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageSampleProjImplicitLod_DepthTexture_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl
index 94e248c..3543919 100644
--- a/test/tint/unittest/reader/spirv/ImageSampleProjImplicitLod_DepthTexture_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageSampleProjImplicitLod_DepthTexture_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Swizzle
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSample
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageSampleProjImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageSampleProjImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl
index 28251dc..3543919 100644
--- a/test/tint/unittest/reader/spirv/ImageSampleProjImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageSampleProjImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSample
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageSampleProjImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageSampleProjImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl
index 94e248c..3543919 100644
--- a/test/tint/unittest/reader/spirv/ImageSampleProjImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageSampleProjImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Swizzle
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSample
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageSampleProjImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageSampleProjImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.ir.msl
index 94e248c..3543919 100644
--- a/test/tint/unittest/reader/spirv/ImageSampleProjImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageSampleProjImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Swizzle
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSample
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageSampleProjImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageSampleProjImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.ir.msl
index 94e248c..3543919 100644
--- a/test/tint/unittest/reader/spirv/ImageSampleProjImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageSampleProjImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Swizzle
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSample
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.ir.msl
index b38060a..877ebc6 100644
--- a/test/tint/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.ir.msl
index b38060a..877ebc6 100644
--- a/test/tint/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_2.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_2.spvasm.expected.ir.msl
index b38060a..877ebc6 100644
--- a/test/tint/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_2.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_2.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_3.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_3.spvasm.expected.ir.msl
index b38060a..877ebc6 100644
--- a/test/tint/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_3.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_3.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_4.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_4.spvasm.expected.ir.msl
index b38060a..877ebc6 100644
--- a/test/tint/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_4.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_4.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_5.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_5.spvasm.expected.ir.msl
index b38060a..877ebc6 100644
--- a/test/tint/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_5.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_5.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_6.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_6.spvasm.expected.ir.msl
index b38060a..877ebc6 100644
--- a/test/tint/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_6.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_6.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_7.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_7.spvasm.expected.ir.msl
index b38060a..877ebc6 100644
--- a/test/tint/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_7.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_7.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_SameSignedness_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_SameSignedness_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.ir.msl
index b38060a..877ebc6 100644
--- a/test/tint/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_SameSignedness_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_SameSignedness_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_SameSignedness_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_SameSignedness_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.ir.msl
index b38060a..877ebc6 100644
--- a/test/tint/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_SameSignedness_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_SameSignedness_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Signedness_AndWidening_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Signedness_AndWidening_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.ir.msl
index b38060a..877ebc6 100644
--- a/test/tint/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Signedness_AndWidening_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Signedness_AndWidening_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Signedness_AndWidening_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Signedness_AndWidening_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.ir.msl
index b38060a..877ebc6 100644
--- a/test/tint/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Signedness_AndWidening_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Signedness_AndWidening_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/ImageWrite_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/ImageWrite_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.ir.msl
index b38060a..877ebc6 100644
--- a/test/tint/unittest/reader/spirv/ImageWrite_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/ImageWrite_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/Images_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_0.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/Images_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_0.spvasm.expected.ir.msl
index 792ab03..6149064 100644
--- a/test/tint/unittest/reader/spirv/Images_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_0.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/Images_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_0.spvasm.expected.ir.msl
@@ -1,9 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+texture1d<float, access::sample> x_10;
+void main_1() {
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:34: error: program scope variable must reside in constant address space
+texture1d<float, access::sample> x_10;
+                                 ^
+
diff --git a/test/tint/unittest/reader/spirv/Images_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_1.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/Images_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_1.spvasm.expected.ir.msl
index 792ab03..6149064 100644
--- a/test/tint/unittest/reader/spirv/Images_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_1.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/Images_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_1.spvasm.expected.ir.msl
@@ -1,9 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+texture1d<float, access::sample> x_10;
+void main_1() {
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:34: error: program scope variable must reside in constant address space
+texture1d<float, access::sample> x_10;
+                                 ^
+
diff --git a/test/tint/unittest/reader/spirv/Images_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_2.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/Images_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_2.spvasm.expected.ir.msl
index 792ab03..6b7be62 100644
--- a/test/tint/unittest/reader/spirv/Images_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_2.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/Images_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_2.spvasm.expected.ir.msl
@@ -1,9 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+texture1d<float, access::write> x_10;
+void main_1() {
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:33: error: program scope variable must reside in constant address space
+texture1d<float, access::write> x_10;
+                                ^
+
diff --git a/test/tint/unittest/reader/spirv/Multisampled_Only2DNonArrayedIsValid_SpvParserHandleTest_ImageDeclTest_DeclareAndUseHandle_2.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/Multisampled_Only2DNonArrayedIsValid_SpvParserHandleTest_ImageDeclTest_DeclareAndUseHandle_2.spvasm.expected.ir.msl
index b38060a..8b02481 100644
--- a/test/tint/unittest/reader/spirv/Multisampled_Only2DNonArrayedIsValid_SpvParserHandleTest_ImageDeclTest_DeclareAndUseHandle_2.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/Multisampled_Only2DNonArrayedIsValid_SpvParserHandleTest_ImageDeclTest_DeclareAndUseHandle_2.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureNumSamples
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/PreserveFloatCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/PreserveFloatCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.ir.msl
index 94e248c..3543919 100644
--- a/test/tint/unittest/reader/spirv/PreserveFloatCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/PreserveFloatCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Swizzle
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSample
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/PreserveFloatCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/PreserveFloatCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.ir.msl
index 94e248c..d62b699 100644
--- a/test/tint/unittest/reader/spirv/PreserveFloatCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/PreserveFloatCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Swizzle
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSampleLevel
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/PreserveFloatCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/PreserveFloatCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.ir.msl
index 94e248c..ca3ca5e 100644
--- a/test/tint/unittest/reader/spirv/PreserveFloatCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/PreserveFloatCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Swizzle
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSampleCompare
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.ir.msl
index b38060a..3543919 100644
--- a/test/tint/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSample
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.ir.msl
index b38060a..3543919 100644
--- a/test/tint/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSample
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.ir.msl
index b38060a..d62b699 100644
--- a/test/tint/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSampleLevel
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_4.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_4.spvasm.expected.ir.msl
index b38060a..ca3ca5e 100644
--- a/test/tint/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_4.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_4.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSampleCompare
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/PreserveIntCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/PreserveIntCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.ir.msl
index 94e248c..ee65b2d 100644
--- a/test/tint/unittest/reader/spirv/PreserveIntCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/PreserveIntCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Swizzle
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureLoad
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/PreserveIntCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/PreserveIntCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.ir.msl
index 94e248c..ee65b2d 100644
--- a/test/tint/unittest/reader/spirv/PreserveIntCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/PreserveIntCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Swizzle
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureLoad
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/PreserveIntCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/PreserveIntCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.ir.msl
index 94e248c..877ebc6 100644
--- a/test/tint/unittest/reader/spirv/PreserveIntCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/PreserveIntCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Swizzle
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.ir.msl
index b38060a..ee65b2d 100644
--- a/test/tint/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureLoad
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.ir.msl
index b38060a..ee65b2d 100644
--- a/test/tint/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureLoad
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.ir.msl
index b38060a..877ebc6 100644
--- a/test/tint/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.ir.msl
index b38060a..ee65b2d 100644
--- a/test/tint/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureLoad
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_4.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_4.spvasm.expected.ir.msl
index b38060a..ee65b2d 100644
--- a/test/tint/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_4.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_4.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureLoad
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_5.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_5.spvasm.expected.ir.msl
index b38060a..877ebc6 100644
--- a/test/tint/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_5.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_5.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/Samplers_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_0.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/Samplers_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_0.spvasm.expected.ir.msl
index 792ab03..ff8fa45 100644
--- a/test/tint/unittest/reader/spirv/Samplers_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_0.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/Samplers_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_0.spvasm.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+sampler x_10;
+void main_1() {
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:1: error: constant sampler must be declared constexpr
+sampler x_10;
+^
+constexpr 
+
diff --git a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_0.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_0.spvasm.expected.ir.msl
index efdd3b1..44b8dae 100644
--- a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_0.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_0.spvasm.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint x_1 = 0u;
+void main_1() {
+  uint const x_2 = x_1;
+}
+kernel void tint_symbol(uint x_1_param [[thread_index_in_threadgroup]]) {
+  x_1 = x_1_param;
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint x_1 = 0u;
+            ^
+program_source:6:14: warning: unused variable 'x_2' [-Wunused-variable]
+  uint const x_2 = x_1;
+             ^
+
diff --git a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_1.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_1.spvasm.expected.ir.msl
index 7e344ef..19dc07f 100644
--- a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_1.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_1.spvasm.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread int x_1 = 0;
+void main_1() {
+  int const x_2 = x_1;
+}
+kernel void tint_symbol(uint x_1_param [[thread_index_in_threadgroup]]) {
+  x_1 = as_type<int>(x_1_param);
+  main_1();
+}
+program_source:4:12: error: program scope variable must reside in constant address space
+thread int x_1 = 0;
+           ^
+program_source:6:13: warning: unused variable 'x_2' [-Wunused-variable]
+  int const x_2 = x_1;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_2.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_2.spvasm.expected.ir.msl
index efdd3b1..7658eae 100644
--- a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_2.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_2.spvasm.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint3 x_1 = 0u;
+void main_1() {
+  uint3 const x_2 = x_1;
+}
+kernel void tint_symbol(uint3 x_1_param [[thread_position_in_threadgroup]]) {
+  x_1 = x_1_param;
+  main_1();
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread uint3 x_1 = 0u;
+             ^
+program_source:6:15: warning: unused variable 'x_2' [-Wunused-variable]
+  uint3 const x_2 = x_1;
+              ^
+
diff --git a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_3.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_3.spvasm.expected.ir.msl
index 7e344ef..49922e8 100644
--- a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_3.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_3.spvasm.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread int3 x_1 = 0;
+void main_1() {
+  int3 const x_2 = x_1;
+}
+kernel void tint_symbol(uint3 x_1_param [[thread_position_in_threadgroup]]) {
+  x_1 = as_type<int3>(x_1_param);
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread int3 x_1 = 0;
+            ^
+program_source:6:14: warning: unused variable 'x_2' [-Wunused-variable]
+  int3 const x_2 = x_1;
+             ^
+
diff --git a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_4.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_4.spvasm.expected.ir.msl
index efdd3b1..2d802fa 100644
--- a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_4.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_4.spvasm.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint3 x_1 = 0u;
+void main_1() {
+  uint3 const x_2 = x_1;
+}
+kernel void tint_symbol(uint3 x_1_param [[thread_position_in_grid]]) {
+  x_1 = x_1_param;
+  main_1();
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread uint3 x_1 = 0u;
+             ^
+program_source:6:15: warning: unused variable 'x_2' [-Wunused-variable]
+  uint3 const x_2 = x_1;
+              ^
+
diff --git a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_5.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_5.spvasm.expected.ir.msl
index 7e344ef..47e466f 100644
--- a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_5.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_5.spvasm.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread int3 x_1 = 0;
+void main_1() {
+  int3 const x_2 = x_1;
+}
+kernel void tint_symbol(uint3 x_1_param [[thread_position_in_grid]]) {
+  x_1 = as_type<int3>(x_1_param);
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread int3 x_1 = 0;
+            ^
+program_source:6:14: warning: unused variable 'x_2' [-Wunused-variable]
+  int3 const x_2 = x_1;
+             ^
+
diff --git a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_7.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_7.spvasm.expected.ir.msl
deleted file mode 100644
index 7e344ef..0000000
--- a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_7.spvasm.expected.ir.msl
+++ /dev/null
@@ -1,9 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_0.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_0.spvasm.expected.ir.msl
index efdd3b1..44b8dae 100644
--- a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_0.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_0.spvasm.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint x_1 = 0u;
+void main_1() {
+  uint const x_2 = x_1;
+}
+kernel void tint_symbol(uint x_1_param [[thread_index_in_threadgroup]]) {
+  x_1 = x_1_param;
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint x_1 = 0u;
+            ^
+program_source:6:14: warning: unused variable 'x_2' [-Wunused-variable]
+  uint const x_2 = x_1;
+             ^
+
diff --git a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_1.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_1.spvasm.expected.ir.msl
index 7e344ef..19dc07f 100644
--- a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_1.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_1.spvasm.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread int x_1 = 0;
+void main_1() {
+  int const x_2 = x_1;
+}
+kernel void tint_symbol(uint x_1_param [[thread_index_in_threadgroup]]) {
+  x_1 = as_type<int>(x_1_param);
+  main_1();
+}
+program_source:4:12: error: program scope variable must reside in constant address space
+thread int x_1 = 0;
+           ^
+program_source:6:13: warning: unused variable 'x_2' [-Wunused-variable]
+  int const x_2 = x_1;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_2.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_2.spvasm.expected.ir.msl
index efdd3b1..7658eae 100644
--- a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_2.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_2.spvasm.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint3 x_1 = 0u;
+void main_1() {
+  uint3 const x_2 = x_1;
+}
+kernel void tint_symbol(uint3 x_1_param [[thread_position_in_threadgroup]]) {
+  x_1 = x_1_param;
+  main_1();
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread uint3 x_1 = 0u;
+             ^
+program_source:6:15: warning: unused variable 'x_2' [-Wunused-variable]
+  uint3 const x_2 = x_1;
+              ^
+
diff --git a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_3.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_3.spvasm.expected.ir.msl
index 7e344ef..49922e8 100644
--- a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_3.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_3.spvasm.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread int3 x_1 = 0;
+void main_1() {
+  int3 const x_2 = x_1;
+}
+kernel void tint_symbol(uint3 x_1_param [[thread_position_in_threadgroup]]) {
+  x_1 = as_type<int3>(x_1_param);
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread int3 x_1 = 0;
+            ^
+program_source:6:14: warning: unused variable 'x_2' [-Wunused-variable]
+  int3 const x_2 = x_1;
+             ^
+
diff --git a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_4.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_4.spvasm.expected.ir.msl
index efdd3b1..2d802fa 100644
--- a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_4.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_4.spvasm.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint3 x_1 = 0u;
+void main_1() {
+  uint3 const x_2 = x_1;
+}
+kernel void tint_symbol(uint3 x_1_param [[thread_position_in_grid]]) {
+  x_1 = x_1_param;
+  main_1();
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread uint3 x_1 = 0u;
+             ^
+program_source:6:15: warning: unused variable 'x_2' [-Wunused-variable]
+  uint3 const x_2 = x_1;
+              ^
+
diff --git a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_5.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_5.spvasm.expected.ir.msl
index 7e344ef..47e466f 100644
--- a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_5.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_5.spvasm.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread int3 x_1 = 0;
+void main_1() {
+  int3 const x_2 = x_1;
+}
+kernel void tint_symbol(uint3 x_1_param [[thread_position_in_grid]]) {
+  x_1 = as_type<int3>(x_1_param);
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread int3 x_1 = 0;
+            ^
+program_source:6:14: warning: unused variable 'x_2' [-Wunused-variable]
+  int3 const x_2 = x_1;
+             ^
+
diff --git a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_6.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_6.spvasm.expected.ir.msl
deleted file mode 100644
index efdd3b1..0000000
--- a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_6.spvasm.expected.ir.msl
+++ /dev/null
@@ -1,9 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_7.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_7.spvasm.expected.ir.msl
deleted file mode 100644
index 7e344ef..0000000
--- a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_7.spvasm.expected.ir.msl
+++ /dev/null
@@ -1,9 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_0.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_0.spvasm.expected.ir.msl
index efdd3b1..44b8dae 100644
--- a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_0.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_0.spvasm.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint x_1 = 0u;
+void main_1() {
+  uint const x_2 = x_1;
+}
+kernel void tint_symbol(uint x_1_param [[thread_index_in_threadgroup]]) {
+  x_1 = x_1_param;
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint x_1 = 0u;
+            ^
+program_source:6:14: warning: unused variable 'x_2' [-Wunused-variable]
+  uint const x_2 = x_1;
+             ^
+
diff --git a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_1.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_1.spvasm.expected.ir.msl
index 7e344ef..19dc07f 100644
--- a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_1.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_1.spvasm.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread int x_1 = 0;
+void main_1() {
+  int const x_2 = x_1;
+}
+kernel void tint_symbol(uint x_1_param [[thread_index_in_threadgroup]]) {
+  x_1 = as_type<int>(x_1_param);
+  main_1();
+}
+program_source:4:12: error: program scope variable must reside in constant address space
+thread int x_1 = 0;
+           ^
+program_source:6:13: warning: unused variable 'x_2' [-Wunused-variable]
+  int const x_2 = x_1;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_2.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_2.spvasm.expected.ir.msl
index efdd3b1..7658eae 100644
--- a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_2.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_2.spvasm.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint3 x_1 = 0u;
+void main_1() {
+  uint3 const x_2 = x_1;
+}
+kernel void tint_symbol(uint3 x_1_param [[thread_position_in_threadgroup]]) {
+  x_1 = x_1_param;
+  main_1();
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread uint3 x_1 = 0u;
+             ^
+program_source:6:15: warning: unused variable 'x_2' [-Wunused-variable]
+  uint3 const x_2 = x_1;
+              ^
+
diff --git a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_3.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_3.spvasm.expected.ir.msl
index 7e344ef..49922e8 100644
--- a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_3.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_3.spvasm.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread int3 x_1 = 0;
+void main_1() {
+  int3 const x_2 = x_1;
+}
+kernel void tint_symbol(uint3 x_1_param [[thread_position_in_threadgroup]]) {
+  x_1 = as_type<int3>(x_1_param);
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread int3 x_1 = 0;
+            ^
+program_source:6:14: warning: unused variable 'x_2' [-Wunused-variable]
+  int3 const x_2 = x_1;
+             ^
+
diff --git a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_4.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_4.spvasm.expected.ir.msl
index efdd3b1..2d802fa 100644
--- a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_4.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_4.spvasm.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint3 x_1 = 0u;
+void main_1() {
+  uint3 const x_2 = x_1;
+}
+kernel void tint_symbol(uint3 x_1_param [[thread_position_in_grid]]) {
+  x_1 = x_1_param;
+  main_1();
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread uint3 x_1 = 0u;
+             ^
+program_source:6:15: warning: unused variable 'x_2' [-Wunused-variable]
+  uint3 const x_2 = x_1;
+              ^
+
diff --git a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_5.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_5.spvasm.expected.ir.msl
index 7e344ef..47e466f 100644
--- a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_5.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_5.spvasm.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread int3 x_1 = 0;
+void main_1() {
+  int3 const x_2 = x_1;
+}
+kernel void tint_symbol(uint3 x_1_param [[thread_position_in_grid]]) {
+  x_1 = as_type<int3>(x_1_param);
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread int3 x_1 = 0;
+            ^
+program_source:6:14: warning: unused variable 'x_2' [-Wunused-variable]
+  int3 const x_2 = x_1;
+             ^
+
diff --git a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_6.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_6.spvasm.expected.ir.msl
deleted file mode 100644
index efdd3b1..0000000
--- a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_6.spvasm.expected.ir.msl
+++ /dev/null
@@ -1,9 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_7.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_7.spvasm.expected.ir.msl
deleted file mode 100644
index 7e344ef..0000000
--- a/test/tint/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_7.spvasm.expected.ir.msl
+++ /dev/null
@@ -1,9 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_0.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_0.spvasm.expected.ir.msl
index b38060a..ee65b2d 100644
--- a/test/tint/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_0.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureLoad
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_1.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_1.spvasm.expected.ir.msl
index b38060a..877ebc6 100644
--- a/test/tint/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_1.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_2.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_2.spvasm.expected.ir.msl
index b38060a..ee65b2d 100644
--- a/test/tint/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_2.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_2.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureLoad
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_3.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_3.spvasm.expected.ir.msl
index b38060a..9a1e6cb 100644
--- a/test/tint/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_3.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_3.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureDimensions
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_4.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_4.spvasm.expected.ir.msl
index b38060a..9a1e6cb 100644
--- a/test/tint/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_4.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_4.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureDimensions
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_5.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_5.spvasm.expected.ir.msl
index b38060a..c341f8a 100644
--- a/test/tint/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_5.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_5.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureNumLevels
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_6.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_6.spvasm.expected.ir.msl
index b38060a..8b02481 100644
--- a/test/tint/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_6.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_6.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureNumSamples
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_2.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_2.spvasm.expected.ir.msl
index b38060a..3543919 100644
--- a/test/tint/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_2.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_2.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSample
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_3.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_3.spvasm.expected.ir.msl
index b38060a..d62b699 100644
--- a/test/tint/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_3.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_3.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSampleLevel
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_4.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_4.spvasm.expected.ir.msl
index b38060a..ca3ca5e 100644
--- a/test/tint/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_4.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_4.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSampleCompare
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_6.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_6.spvasm.expected.ir.msl
index b38060a..3543919 100644
--- a/test/tint/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_6.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_6.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSample
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_7.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_7.spvasm.expected.ir.msl
index b38060a..d62b699 100644
--- a/test/tint/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_7.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_7.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSampleLevel
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_8.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_8.spvasm.expected.ir.msl
index b38060a..ca3ca5e 100644
--- a/test/tint/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_8.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_8.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSampleCompare
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_9.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_9.spvasm.expected.ir.msl
index b38060a..e9d3747 100644
--- a/test/tint/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_9.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_9.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSampleCompareLevel
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_AnonWorkgroupVar.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_AnonWorkgroupVar.spvasm.expected.ir.msl
index 792ab03..b161ee6 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_AnonWorkgroupVar.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_AnonWorkgroupVar.spvasm.expected.ir.msl
@@ -1,9 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+threadgroup float x_52;
+void main_1() {
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:19: error: program scope variable must reside in constant address space
+threadgroup float x_52;
+                  ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_ArrayInitializer.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_ArrayInitializer.spvasm.expected.ir.msl
index 792ab03..2f1f4a4 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_ArrayInitializer.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_ArrayInitializer.spvasm.expected.ir.msl
@@ -1,9 +1,27 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#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];
+};
+
+
+thread tint_array<uint, 2> x_200 = tint_array<uint, 2>{1u, 2u};
+void main_1() {
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:16:28: error: program scope variable must reside in constant address space
+thread tint_array<uint, 2> x_200 = tint_array<uint, 2>{1u, 2u};
+                           ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_ArrayNullInitializer.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_ArrayNullInitializer.spvasm.expected.ir.msl
index 792ab03..9a7e534 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_ArrayNullInitializer.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_ArrayNullInitializer.spvasm.expected.ir.msl
@@ -1,9 +1,27 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#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];
+};
+
+
+thread tint_array<uint, 2> x_200 = tint_array<uint, 2>{};
+void main_1() {
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:16:28: error: program scope variable must reside in constant address space
+thread tint_array<uint, 2> x_200 = tint_array<uint, 2>{};
+                           ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_BindingDecoration_Valid.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_BindingDecoration_Valid.spvasm.expected.ir.msl
index 152c872..57c0c07 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_BindingDecoration_Valid.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_BindingDecoration_Valid.spvasm.expected.ir.msl
@@ -1,22 +1,22 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   field0:u32 @offset(0)
   field1:f32 @offset(4)
   field2:array<u32, 2> @offset(8)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_1:ptr<storage, S, read_write> = var @binding_point(0, 3)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     ret
   }
 }
-%tint_symbol = @fragment func():void -> %b3 {
-  %b3 = block {
+%tint_symbol = @fragment func():void {
+  $B3: {
     %4:void = call %main_1
     ret
   }
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_ReadReplaced_Vertex.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_ReadReplaced_Vertex.spvasm.expected.ir.msl
index efdd3b1..8b257a0 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_ReadReplaced_Vertex.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_ReadReplaced_Vertex.spvasm.expected.ir.msl
@@ -1,9 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct main_out {
+  float4 x_2_1 [[position]];
+};
+
+thread float4 x_2 = 0.0f;
+thread float x_900 = 0.0f;
+void main_1() {
+  x_900 = 1.0f;
+}
+vertex main_out tint_symbol() {
+  main_1();
+  return {.x_2_1=x_2};
+}
+program_source:7:15: error: program scope variable must reside in constant address space
+thread float4 x_2 = 0.0f;
+              ^
+program_source:8:14: error: program scope variable must reside in constant address space
+thread float x_900 = 0.0f;
+             ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_Write1_IsErased.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_Write1_IsErased.spvasm.expected.ir.msl
index 792ab03..c466e7d 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_Write1_IsErased.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_Write1_IsErased.spvasm.expected.ir.msl
@@ -1,9 +1,19 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct main_out {
+  float4 x_2_1 [[position]];
+};
+
+thread float4 x_2 = 0.0f;
+void main_1() {
+}
+vertex main_out tint_symbol() {
+  main_1();
+  return {.x_2_1=x_2};
+}
+program_source:7:15: error: program scope variable must reside in constant address space
+thread float4 x_2 = 0.0f;
+              ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_WriteViaCopyObjectPostAccessChainErased.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_WriteViaCopyObjectPostAccessChainErased.spvasm.expected.ir.msl
index 792ab03..c466e7d 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_WriteViaCopyObjectPostAccessChainErased.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_WriteViaCopyObjectPostAccessChainErased.spvasm.expected.ir.msl
@@ -1,9 +1,19 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct main_out {
+  float4 x_2_1 [[position]];
+};
+
+thread float4 x_2 = 0.0f;
+void main_1() {
+}
+vertex main_out tint_symbol() {
+  main_1();
+  return {.x_2_1=x_2};
+}
+program_source:7:15: error: program scope variable must reside in constant address space
+thread float4 x_2 = 0.0f;
+              ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_WriteViaCopyObjectPriorAccess_Erased.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_WriteViaCopyObjectPriorAccess_Erased.spvasm.expected.ir.msl
index 792ab03..c466e7d 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_WriteViaCopyObjectPriorAccess_Erased.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_WriteViaCopyObjectPriorAccess_Erased.spvasm.expected.ir.msl
@@ -1,9 +1,19 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct main_out {
+  float4 x_2_1 [[position]];
+};
+
+thread float4 x_2 = 0.0f;
+void main_1() {
+}
+vertex main_out tint_symbol() {
+  main_1();
+  return {.x_2_1=x_2};
+}
+program_source:7:15: error: program scope variable must reside in constant address space
+thread float4 x_2 = 0.0f;
+              ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_ReadReplaced.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_ReadReplaced.spvasm.expected.ir.msl
index efdd3b1..3bc136b 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_ReadReplaced.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_ReadReplaced.spvasm.expected.ir.msl
@@ -1,9 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct main_out {
+  float4 gl_Position [[position]];
+};
+
+thread float x_900 = 0.0f;
+thread float4 gl_Position = 0.0f;
+void main_1() {
+  x_900 = 1.0f;
+}
+vertex main_out tint_symbol() {
+  main_1();
+  return {.gl_Position=gl_Position};
+}
+program_source:7:14: error: program scope variable must reside in constant address space
+thread float x_900 = 0.0f;
+             ^
+program_source:8:15: error: program scope variable must reside in constant address space
+thread float4 gl_Position = 0.0f;
+              ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Write1_IsErased.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Write1_IsErased.spvasm.expected.ir.msl
index 792ab03..4644812 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Write1_IsErased.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Write1_IsErased.spvasm.expected.ir.msl
@@ -1,9 +1,19 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct main_out {
+  float4 gl_Position [[position]];
+};
+
+thread float4 gl_Position = 0.0f;
+void main_1() {
+}
+vertex main_out tint_symbol() {
+  main_1();
+  return {.gl_Position=gl_Position};
+}
+program_source:7:15: error: program scope variable must reside in constant address space
+thread float4 gl_Position = 0.0f;
+              ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_WriteViaCopyObjectPostAccessChainErased.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_WriteViaCopyObjectPostAccessChainErased.spvasm.expected.ir.msl
index 792ab03..4644812 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_WriteViaCopyObjectPostAccessChainErased.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_WriteViaCopyObjectPostAccessChainErased.spvasm.expected.ir.msl
@@ -1,9 +1,19 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct main_out {
+  float4 gl_Position [[position]];
+};
+
+thread float4 gl_Position = 0.0f;
+void main_1() {
+}
+vertex main_out tint_symbol() {
+  main_1();
+  return {.gl_Position=gl_Position};
+}
+program_source:7:15: error: program scope variable must reside in constant address space
+thread float4 gl_Position = 0.0f;
+              ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_BuiltIn_Position.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_BuiltIn_Position.spvasm.expected.ir.msl
index 792ab03..4644812 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_BuiltIn_Position.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_BuiltIn_Position.spvasm.expected.ir.msl
@@ -1,9 +1,19 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct main_out {
+  float4 gl_Position [[position]];
+};
+
+thread float4 gl_Position = 0.0f;
+void main_1() {
+}
+vertex main_out tint_symbol() {
+  main_1();
+  return {.gl_Position=gl_Position};
+}
+program_source:7:15: error: program scope variable must reside in constant address space
+thread float4 gl_Position = 0.0f;
+              ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_BuiltIn_Position_Initializer.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_BuiltIn_Position_Initializer.spvasm.expected.ir.msl
index 792ab03..d89d0b8 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_BuiltIn_Position_Initializer.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_BuiltIn_Position_Initializer.spvasm.expected.ir.msl
@@ -1,9 +1,19 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct main_out {
+  float4 gl_Position [[position]];
+};
+
+thread float4 gl_Position = float4(1.0f, 2.0f, 3.0f, 4.0f);
+void main_1() {
+}
+vertex main_out tint_symbol() {
+  main_1();
+  return {.gl_Position=gl_Position};
+}
+program_source:7:15: error: program scope variable must reside in constant address space
+thread float4 gl_Position = float4(1.0f, 2.0f, 3.0f, 4.0f);
+              ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePosition.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePosition.spvasm.expected.ir.msl
index efdd3b1..7dba87b 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePosition.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePosition.spvasm.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct main_out {
+  float4 gl_Position [[position]];
+};
+
+thread float4 gl_Position = 0.0f;
+void main_1() {
+  gl_Position = float4(0.0f);
+}
+vertex main_out tint_symbol() {
+  main_1();
+  return {.gl_Position=gl_Position};
+}
+program_source:7:15: error: program scope variable must reside in constant address space
+thread float4 gl_Position = 0.0f;
+              ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePositionMember_OneAccessChain.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePositionMember_OneAccessChain.spvasm.expected.ir.msl
index 3440042..17378a1 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePositionMember_OneAccessChain.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePositionMember_OneAccessChain.spvasm.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::StoreVectorElement
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct main_out {
+  float4 gl_Position [[position]];
+};
+
+thread float4 gl_Position = 0.0f;
+void main_1() {
+  gl_Position[1u] = 0.0f;
+}
+vertex main_out tint_symbol() {
+  main_1();
+  return {.gl_Position=gl_Position};
+}
+program_source:7:15: error: program scope variable must reside in constant address space
+thread float4 gl_Position = 0.0f;
+              ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePositionMember_TwoAccessChain.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePositionMember_TwoAccessChain.spvasm.expected.ir.msl
index 3440042..17378a1 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePositionMember_TwoAccessChain.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePositionMember_TwoAccessChain.spvasm.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::StoreVectorElement
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct main_out {
+  float4 gl_Position [[position]];
+};
+
+thread float4 gl_Position = 0.0f;
+void main_1() {
+  gl_Position[1u] = 0.0f;
+}
+vertex main_out tint_symbol() {
+  main_1();
+  return {.gl_Position=gl_Position};
+}
+program_source:7:15: error: program scope variable must reside in constant address space
+thread float4 gl_Position = 0.0f;
+              ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePosition_PerVertexStructOutOfOrderDecl.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePosition_PerVertexStructOutOfOrderDecl.spvasm.expected.ir.msl
index efdd3b1..7dba87b 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePosition_PerVertexStructOutOfOrderDecl.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePosition_PerVertexStructOutOfOrderDecl.spvasm.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct main_out {
+  float4 gl_Position [[position]];
+};
+
+thread float4 gl_Position = 0.0f;
+void main_1() {
+  gl_Position = float4(0.0f);
+}
+vertex main_out tint_symbol() {
+  main_1();
+  return {.gl_Position=gl_Position};
+}
+program_source:7:15: error: program scope variable must reside in constant address space
+thread float4 gl_Position = 0.0f;
+              ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinVertexIndex.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinVertexIndex.spvasm.expected.ir.msl
index efdd3b1..e28cd5b 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinVertexIndex.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinVertexIndex.spvasm.expected.ir.msl
@@ -1,9 +1,27 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct main_out {
+  float4 position_1_1 [[position]];
+};
+
+thread uint x_2 = 0u;
+thread float4 position_1 = 0.0f;
+void main_1() {
+}
+vertex main_out tint_symbol(uint x_2_param [[]]) {
+  x_2 = x_2_param;
+  main_1();
+  return {.position_1_1=position_1};
+}
+program_source:7:13: error: program scope variable must reside in constant address space
+thread uint x_2 = 0u;
+            ^
+program_source:8:15: error: program scope variable must reside in constant address space
+thread float4 position_1 = 0.0f;
+              ^
+program_source:11:29: error: invalid type 'uint' (aka 'unsigned int') for input declaration in a vertex function
+vertex main_out tint_symbol(uint x_2_param [[]]) {
+                            ^~~~~~~~~~~~~~
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Input_OppositeSignednessAsWGSL.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Input_OppositeSignednessAsWGSL.spvasm.expected.ir.msl
index 792ab03..6ae8046 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Input_OppositeSignednessAsWGSL.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Input_OppositeSignednessAsWGSL.spvasm.expected.ir.msl
@@ -1,9 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread int x_1 = 0;
+void main_1() {
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:12: error: program scope variable must reside in constant address space
+thread int x_1 = 0;
+           ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Input_SameSignednessAsWGSL.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Input_SameSignednessAsWGSL.spvasm.expected.ir.msl
index 792ab03..e31977d 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Input_SameSignednessAsWGSL.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Input_SameSignednessAsWGSL.spvasm.expected.ir.msl
@@ -1,9 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint x_1 = 0u;
+void main_1() {
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint x_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Output_Initializer_OppositeSignednessAsWGSL.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Output_Initializer_OppositeSignednessAsWGSL.spvasm.expected.ir.msl
index 792ab03..27ac679 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Output_Initializer_OppositeSignednessAsWGSL.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Output_Initializer_OppositeSignednessAsWGSL.spvasm.expected.ir.msl
@@ -1,9 +1,27 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#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];
+};
+
+
+thread tint_array<int, 1> x_1 = tint_array<int, 1>{14};
+void main_1() {
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:16:27: error: program scope variable must reside in constant address space
+thread tint_array<int, 1> x_1 = tint_array<int, 1>{14};
+                          ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Output_Initializer_SameSignednessAsWGSL.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Output_Initializer_SameSignednessAsWGSL.spvasm.expected.ir.msl
index 792ab03..f947593 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Output_Initializer_SameSignednessAsWGSL.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Output_Initializer_SameSignednessAsWGSL.spvasm.expected.ir.msl
@@ -1,9 +1,27 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#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];
+};
+
+
+thread tint_array<uint, 1> x_1 = tint_array<uint, 1>{2u};
+void main_1() {
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:16:28: error: program scope variable must reside in constant address space
+thread tint_array<uint, 1> x_1 = tint_array<uint, 1>{2u};
+                           ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_ColMajorDecoration_Dropped.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_ColMajorDecoration_Dropped.spvasm.expected.ir.msl
index 609fca4..86c0be0 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_ColMajorDecoration_Dropped.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_ColMajorDecoration_Dropped.spvasm.expected.ir.msl
@@ -1,20 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(8) {
   field0:mat3x2<f32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %myvar:ptr<storage, S, read_write> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     ret
   }
 }
-%tint_symbol = @fragment func():void -> %b3 {
-  %b3 = block {
+%tint_symbol = @fragment func():void {
+  $B3: {
     %4:void = call %main_1
     ret
   }
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_DescriptorGroupDecoration_Valid.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_DescriptorGroupDecoration_Valid.spvasm.expected.ir.msl
index 2c35b0a..a5a00d7 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_DescriptorGroupDecoration_Valid.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_DescriptorGroupDecoration_Valid.spvasm.expected.ir.msl
@@ -1,22 +1,22 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   field0:u32 @offset(0)
   field1:f32 @offset(4)
   field2:array<u32, 2> @offset(8)
 }
 
-%b1 = block {  # root
-  %x_1:ptr<storage, S, read_write> = var @binding_point(3, 9)
+$B1: {  # root
+  %x_1:ptr<storage, S, read_write> = var @binding_point(0, 9)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     ret
   }
 }
-%tint_symbol = @fragment func():void -> %b3 {
-  %b3 = block {
+%tint_symbol = @fragment func():void {
+  $B3: {
     %4:void = call %main_1
     ret
   }
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_FragDepth_Out_Initializer.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_FragDepth_Out_Initializer.spvasm.expected.ir.msl
index 792ab03..c308d35 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_FragDepth_Out_Initializer.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_FragDepth_Out_Initializer.spvasm.expected.ir.msl
@@ -1,9 +1,19 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct main_out {
+  float x_1_1 [[depth(any)]];
+};
+
+thread float x_1 = 0.0f;
+void main_1() {
+}
+fragment main_out tint_symbol() {
+  main_1();
+  return {.x_1_1=x_1};
+}
+program_source:7:14: error: program scope variable must reside in constant address space
+thread float x_1 = 0.0f;
+             ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_Input_OppositeSignedness.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_Input_OppositeSignedness.spvasm.expected.ir.msl
index 7e344ef..26b2fe4 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_Input_OppositeSignedness.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_Input_OppositeSignedness.spvasm.expected.ir.msl
@@ -1,9 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct main_out {
+  float4 x_1_1 [[position]];
+};
+
+thread int x_4 = 0;
+thread float4 x_1 = 0.0f;
+void main_1() {
+  int const x_2 = x_4;
+}
+vertex main_out tint_symbol(uint x_4_param [[]]) {
+  x_4 = as_type<int>(x_4_param);
+  main_1();
+  return {.x_1_1=x_1};
+}
+program_source:7:12: error: program scope variable must reside in constant address space
+thread int x_4 = 0;
+           ^
+program_source:8:15: error: program scope variable must reside in constant address space
+thread float4 x_1 = 0.0f;
+              ^
+program_source:10:13: warning: unused variable 'x_2' [-Wunused-variable]
+  int const x_2 = x_4;
+            ^
+program_source:12:29: error: invalid type 'uint' (aka 'unsigned int') for input declaration in a vertex function
+vertex main_out tint_symbol(uint x_4_param [[]]) {
+                            ^~~~~~~~~~~~~~
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_Input_SameSignedness.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_Input_SameSignedness.spvasm.expected.ir.msl
index efdd3b1..d8f55f7 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_Input_SameSignedness.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_Input_SameSignedness.spvasm.expected.ir.msl
@@ -1,9 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct main_out {
+  float4 x_4_1 [[position]];
+};
+
+thread uint x_1 = 0u;
+thread float4 x_4 = 0.0f;
+void main_1() {
+  uint const x_2 = x_1;
+}
+vertex main_out tint_symbol(uint x_1_param [[]]) {
+  x_1 = x_1_param;
+  main_1();
+  return {.x_4_1=x_4};
+}
+program_source:7:13: error: program scope variable must reside in constant address space
+thread uint x_1 = 0u;
+            ^
+program_source:8:15: error: program scope variable must reside in constant address space
+thread float4 x_4 = 0.0f;
+              ^
+program_source:10:14: warning: unused variable 'x_2' [-Wunused-variable]
+  uint const x_2 = x_1;
+             ^
+program_source:12:29: error: invalid type 'uint' (aka 'unsigned int') for input declaration in a vertex function
+vertex main_out tint_symbol(uint x_1_param [[]]) {
+                            ^~~~~~~~~~~~~~
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_In_Signed.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_In_Signed.spvasm.expected.ir.msl
index 28251dc..477924d 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_In_Signed.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_In_Signed.spvasm.expected.ir.msl
@@ -1,9 +1,28 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#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];
+};
+
+
+thread tint_array<int, 1> x_1 = {};
+void main_1() {
+}
+fragment void tint_symbol(uint x_1_param [[sample_mask]]) {
+  x_1[0] = as_type<int>(x_1_param);
+  main_1();
+}
+program_source:16:27: error: program scope variable must reside in constant address space
+thread tint_array<int, 1> x_1 = {};
+                          ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_In_Unsigned.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_In_Unsigned.spvasm.expected.ir.msl
index 28251dc..867570d 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_In_Unsigned.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_In_Unsigned.spvasm.expected.ir.msl
@@ -1,9 +1,28 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#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];
+};
+
+
+thread tint_array<uint, 1> x_1 = {};
+void main_1() {
+}
+fragment void tint_symbol(uint x_1_param [[sample_mask]]) {
+  x_1[0] = x_1_param;
+  main_1();
+}
+program_source:16:28: error: program scope variable must reside in constant address space
+thread tint_array<uint, 1> x_1 = {};
+                           ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_Out_Signed_Initializer.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_Out_Signed_Initializer.spvasm.expected.ir.msl
index 792ab03..4f1417f 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_Out_Signed_Initializer.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_Out_Signed_Initializer.spvasm.expected.ir.msl
@@ -1,9 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#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];
+};
+
+struct main_out {
+  uint x_1_1 [[sample_mask]];
+};
+
+thread tint_array<int, 1> x_1 = tint_array<int, 1>{};
+void main_1() {
+}
+fragment main_out tint_symbol() {
+  main_1();
+  return {.x_1_1=as_type<uint>(x_1[0])};
+}
+program_source:19:27: error: program scope variable must reside in constant address space
+thread tint_array<int, 1> x_1 = tint_array<int, 1>{};
+                          ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_Out_Unsigned_Initializer.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_Out_Unsigned_Initializer.spvasm.expected.ir.msl
index 792ab03..672fbd1 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_Out_Unsigned_Initializer.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_Out_Unsigned_Initializer.spvasm.expected.ir.msl
@@ -1,9 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#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];
+};
+
+struct main_out {
+  uint x_1_1 [[sample_mask]];
+};
+
+thread tint_array<uint, 1> x_1 = tint_array<uint, 1>{};
+void main_1() {
+}
+fragment main_out tint_symbol() {
+  main_1();
+  return {.x_1_1=x_1[0]};
+}
+program_source:19:28: error: program scope variable must reside in constant address space
+thread tint_array<uint, 1> x_1 = tint_array<uint, 1>{};
+                           ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Flatten_Interpolation_Flat_Fragment_In.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Flatten_Interpolation_Flat_Fragment_In.spvasm.expected.ir.msl
index 28251dc..44b3e4e 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Flatten_Interpolation_Flat_Fragment_In.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Flatten_Interpolation_Flat_Fragment_In.spvasm.expected.ir.msl
@@ -1,9 +1,51 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#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];
+};
+
+struct S {
+  float field0;
+  float field1;
+};
+
+thread tint_array<float, 2> x_1 = {};
+thread S x_2 = {};
+void main_1() {
+}
+fragment void tint_symbol(float x_1_param, float x_1_param_1, float x_2_param, float x_2_param_1) {
+  x_1[0] = x_1_param;
+  x_1[1] = x_1_param_1;
+  x_2.field0 = x_2_param;
+  x_2.field1 = x_2_param_1;
+  main_1();
+}
+program_source:20:29: error: program scope variable must reside in constant address space
+thread tint_array<float, 2> x_1 = {};
+                            ^
+program_source:21:10: error: program scope variable must reside in constant address space
+thread S x_2 = {};
+         ^
+program_source:24:27: error: invalid type 'float' for input declaration in a fragment function
+fragment void tint_symbol(float x_1_param, float x_1_param_1, float x_2_param, float x_2_param_1) {
+                          ^~~~~~~~~~~~~~~
+program_source:24:44: error: invalid type 'float' for input declaration in a fragment function
+fragment void tint_symbol(float x_1_param, float x_1_param_1, float x_2_param, float x_2_param_1) {
+                                           ^~~~~~~~~~~~~~~~~
+program_source:24:63: error: invalid type 'float' for input declaration in a fragment function
+fragment void tint_symbol(float x_1_param, float x_1_param_1, float x_2_param, float x_2_param_1) {
+                                                              ^~~~~~~~~~~~~~~
+program_source:24:80: error: invalid type 'float' for input declaration in a fragment function
+fragment void tint_symbol(float x_1_param, float x_1_param_1, float x_2_param, float x_2_param_1) {
+                                                                               ^~~~~~~~~~~~~~~~~
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Flatten_Interpolation_Floating_Fragment_In.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Flatten_Interpolation_Floating_Fragment_In.spvasm.expected.ir.msl
index 28251dc..3ca8ddf 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Flatten_Interpolation_Floating_Fragment_In.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Flatten_Interpolation_Floating_Fragment_In.spvasm.expected.ir.msl
@@ -1,9 +1,47 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct S {
+  float field0;
+  float field1;
+  float field2;
+  float field3;
+  float field4;
+  float field5;
+};
+
+thread S x_1 = {};
+void main_1() {
+}
+fragment void tint_symbol(float x_1_param, float x_1_param_1, float x_1_param_2, float x_1_param_3, float x_1_param_4, float x_1_param_5) {
+  x_1.field0 = x_1_param;
+  x_1.field1 = x_1_param_1;
+  x_1.field2 = x_1_param_2;
+  x_1.field3 = x_1_param_3;
+  x_1.field4 = x_1_param_4;
+  x_1.field5 = x_1_param_5;
+  main_1();
+}
+program_source:12:10: error: program scope variable must reside in constant address space
+thread S x_1 = {};
+         ^
+program_source:15:27: error: invalid type 'float' for input declaration in a fragment function
+fragment void tint_symbol(float x_1_param, float x_1_param_1, float x_1_param_2, float x_1_param_3, float x_1_param_4, float x_1_param_5) {
+                          ^~~~~~~~~~~~~~~
+program_source:15:44: error: invalid type 'float' for input declaration in a fragment function
+fragment void tint_symbol(float x_1_param, float x_1_param_1, float x_1_param_2, float x_1_param_3, float x_1_param_4, float x_1_param_5) {
+                                           ^~~~~~~~~~~~~~~~~
+program_source:15:63: error: invalid type 'float' for input declaration in a fragment function
+fragment void tint_symbol(float x_1_param, float x_1_param_1, float x_1_param_2, float x_1_param_3, float x_1_param_4, float x_1_param_5) {
+                                                              ^~~~~~~~~~~~~~~~~
+program_source:15:82: error: invalid type 'float' for input declaration in a fragment function
+fragment void tint_symbol(float x_1_param, float x_1_param_1, float x_1_param_2, float x_1_param_3, float x_1_param_4, float x_1_param_5) {
+                                                                                 ^~~~~~~~~~~~~~~~~
+program_source:15:101: error: invalid type 'float' for input declaration in a fragment function
+fragment void tint_symbol(float x_1_param, float x_1_param_1, float x_1_param_2, float x_1_param_3, float x_1_param_4, float x_1_param_5) {
+                                                                                                    ^~~~~~~~~~~~~~~~~
+program_source:15:120: error: invalid type 'float' for input declaration in a fragment function
+fragment void tint_symbol(float x_1_param, float x_1_param_1, float x_1_param_2, float x_1_param_3, float x_1_param_4, float x_1_param_5) {
+                                                                                                                       ^~~~~~~~~~~~~~~~~
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Flatten_Interpolation_Floating_Fragment_Out.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Flatten_Interpolation_Floating_Fragment_Out.spvasm.expected.ir.msl
index c1e9400..5810b6d 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Flatten_Interpolation_Floating_Fragment_Out.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Flatten_Interpolation_Floating_Fragment_Out.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:775 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: S = struct @align(4) {
   field0:f32 @offset(0)
   field1:f32 @offset(4)
   field2:f32 @offset(8)
@@ -18,17 +18,17 @@
   x_1_6:f32 @offset(20), @location(6), @interpolate(linear, sample)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_1:ptr<private, S, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b3 {
-  %b3 = block {
+%tint_symbol = @fragment func():main_out {
+  $B3: {
     %4:void = call %main_1
     %5:ptr<private, f32, read_write> = access %x_1, 0u
     %6:f32 = load %5
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_IOLocations.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_IOLocations.spvasm.expected.ir.msl
index 3c34d6f..babb809 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_IOLocations.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_IOLocations.spvasm.expected.ir.msl
@@ -1,24 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:775 internal compiler error: main_out = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(4) {
   x_2_1:u32 @offset(0), @location(0), @interpolate(flat)
   x_4_1:u32 @offset(4), @location(6), @interpolate(flat)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_1:ptr<private, u32, read_write> = var
   %x_2:ptr<private, u32, read_write> = var
   %x_3:ptr<private, u32, read_write> = var
   %x_4:ptr<private, u32, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     ret
   }
 }
-%tint_symbol = @fragment func(%x_1_param:u32 [@location(0), @interpolate(flat)], %x_3_param:u32 [@location(30), @interpolate(flat)]):main_out -> %b3 {
-  %b3 = block {
+%tint_symbol = @fragment func(%x_1_param:u32 [@location(0), @interpolate(flat)], %x_3_param:u32 [@location(30), @interpolate(flat)]):main_out {
+  $B3: {
     store %x_1, %x_1_param
     store %x_3, %x_3_param
     %9:void = call %main_1
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Interpolation_Flat_Vertex_Output.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Interpolation_Flat_Vertex_Output.spvasm.expected.ir.msl
index cf37ab0..fc2046ba 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Interpolation_Flat_Vertex_Output.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Interpolation_Flat_Vertex_Output.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:775 internal compiler error: main_out = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(16) {
   x_1_1:u32 @offset(0), @location(1), @interpolate(flat)
   x_2_1:vec2<u32> @offset(8), @location(2), @interpolate(flat)
   x_3_1:i32 @offset(16), @location(3), @interpolate(flat)
@@ -10,7 +10,7 @@
   x_8_1:vec4<f32> @offset(48), @builtin(position)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_1:ptr<private, u32, read_write> = var
   %x_2:ptr<private, vec2<u32>, read_write> = var
   %x_3:ptr<private, i32, read_write> = var
@@ -20,13 +20,13 @@
   %x_8:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     ret
   }
 }
-%tint_symbol = @vertex func():main_out -> %b3 {
-  %b3 = block {
+%tint_symbol = @vertex func():main_out {
+  $B3: {
     %10:void = call %main_1
     %11:u32 = load %x_1
     %12:vec2<u32> = load %x_2
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Interpolation_Floating_Fragment_In.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Interpolation_Floating_Fragment_In.spvasm.expected.ir.msl
index efdd3b1..5b47adb 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Interpolation_Floating_Fragment_In.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Interpolation_Floating_Fragment_In.spvasm.expected.ir.msl
@@ -1,9 +1,59 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float x_1 = 0.0f;
+thread float x_2 = 0.0f;
+thread float x_3 = 0.0f;
+thread float x_4 = 0.0f;
+thread float x_5 = 0.0f;
+thread float x_6 = 0.0f;
+void main_1() {
+}
+fragment void tint_symbol(float x_1_param, float x_2_param, float x_3_param, float x_4_param, float x_5_param, float x_6_param) {
+  x_1 = x_1_param;
+  x_2 = x_2_param;
+  x_3 = x_3_param;
+  x_4 = x_4_param;
+  x_5 = x_5_param;
+  x_6 = x_6_param;
+  main_1();
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread float x_1 = 0.0f;
+             ^
+program_source:5:14: error: program scope variable must reside in constant address space
+thread float x_2 = 0.0f;
+             ^
+program_source:6:14: error: program scope variable must reside in constant address space
+thread float x_3 = 0.0f;
+             ^
+program_source:7:14: error: program scope variable must reside in constant address space
+thread float x_4 = 0.0f;
+             ^
+program_source:8:14: error: program scope variable must reside in constant address space
+thread float x_5 = 0.0f;
+             ^
+program_source:9:14: error: program scope variable must reside in constant address space
+thread float x_6 = 0.0f;
+             ^
+program_source:12:27: error: invalid type 'float' for input declaration in a fragment function
+fragment void tint_symbol(float x_1_param, float x_2_param, float x_3_param, float x_4_param, float x_5_param, float x_6_param) {
+                          ^~~~~~~~~~~~~~~
+program_source:12:44: error: invalid type 'float' for input declaration in a fragment function
+fragment void tint_symbol(float x_1_param, float x_2_param, float x_3_param, float x_4_param, float x_5_param, float x_6_param) {
+                                           ^~~~~~~~~~~~~~~
+program_source:12:61: error: invalid type 'float' for input declaration in a fragment function
+fragment void tint_symbol(float x_1_param, float x_2_param, float x_3_param, float x_4_param, float x_5_param, float x_6_param) {
+                                                            ^~~~~~~~~~~~~~~
+program_source:12:78: error: invalid type 'float' for input declaration in a fragment function
+fragment void tint_symbol(float x_1_param, float x_2_param, float x_3_param, float x_4_param, float x_5_param, float x_6_param) {
+                                                                             ^~~~~~~~~~~~~~~
+program_source:12:95: error: invalid type 'float' for input declaration in a fragment function
+fragment void tint_symbol(float x_1_param, float x_2_param, float x_3_param, float x_4_param, float x_5_param, float x_6_param) {
+                                                                                              ^~~~~~~~~~~~~~~
+program_source:12:112: error: invalid type 'float' for input declaration in a fragment function
+fragment void tint_symbol(float x_1_param, float x_2_param, float x_3_param, float x_4_param, float x_5_param, float x_6_param) {
+                                                                                                               ^~~~~~~~~~~~~~~
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_FlattenStruct_LocOnMembers.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_FlattenStruct_LocOnMembers.spvasm.expected.ir.msl
index eaf415d..c60f491 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_FlattenStruct_LocOnMembers.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_FlattenStruct_LocOnMembers.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:775 internal compiler error: Communicators = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: Communicators = struct @align(16) {
   alice:f32 @offset(0)
   bob:vec4<f32> @offset(16)
 }
@@ -11,19 +11,19 @@
   x_3_2:vec4<f32> @offset(32), @location(11)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_1:ptr<private, Communicators, read_write> = var
   %x_3:ptr<private, Communicators, read_write> = var
   %x_2:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     ret
   }
 }
-%tint_symbol = @vertex func(%x_1_param:f32 [@location(9)], %x_1_param_1:vec4<f32> [@location(11)]):main_out -> %b3 {
-  %b3 = block {
+%tint_symbol = @vertex func(%x_1_param:f32 [@location(9)], %x_1_param_1:vec4<f32> [@location(11)]):main_out {
+  $B3: {
     %8:ptr<private, f32, read_write> = access %x_1, 0u
     store %8, %x_1_param
     %9:ptr<private, vec4<f32>, read_write> = access %x_1, 1u
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_InputVarsConvertedToPrivate.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_InputVarsConvertedToPrivate.spvasm.expected.ir.msl
index 792ab03..e31977d 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_InputVarsConvertedToPrivate.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_InputVarsConvertedToPrivate.spvasm.expected.ir.msl
@@ -1,9 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint x_1 = 0u;
+void main_1() {
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint x_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenArray_OneLevel.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenArray_OneLevel.spvasm.expected.ir.msl
index 28251dc..155c743 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenArray_OneLevel.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenArray_OneLevel.spvasm.expected.ir.msl
@@ -1,9 +1,47 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#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];
+};
+
+struct main_out {
+  float4 x_2_1 [[position]];
+};
+
+thread tint_array<float, 3> x_1 = {};
+thread float4 x_2 = 0.0f;
+void main_1() {
+}
+vertex main_out tint_symbol(float x_1_param, float x_1_param_1, float x_1_param_2) {
+  x_1[0] = x_1_param;
+  x_1[1] = x_1_param_1;
+  x_1[2] = x_1_param_2;
+  main_1();
+  return {.x_2_1=x_2};
+}
+program_source:19:29: error: program scope variable must reside in constant address space
+thread tint_array<float, 3> x_1 = {};
+                            ^
+program_source:20:15: error: program scope variable must reside in constant address space
+thread float4 x_2 = 0.0f;
+              ^
+program_source:23:29: error: invalid type 'float' for input declaration in a vertex function
+vertex main_out tint_symbol(float x_1_param, float x_1_param_1, float x_1_param_2) {
+                            ^~~~~~~~~~~~~~~
+program_source:23:46: error: invalid type 'float' for input declaration in a vertex function
+vertex main_out tint_symbol(float x_1_param, float x_1_param_1, float x_1_param_2) {
+                                             ^~~~~~~~~~~~~~~~~
+program_source:23:65: error: invalid type 'float' for input declaration in a vertex function
+vertex main_out tint_symbol(float x_1_param, float x_1_param_1, float x_1_param_2) {
+                                                                ^~~~~~~~~~~~~~~~~
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenMatrix.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenMatrix.spvasm.expected.ir.msl
index 28251dc..3481cc9 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenMatrix.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenMatrix.spvasm.expected.ir.msl
@@ -1,9 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct main_out {
+  float4 x_2_1 [[position]];
+};
+
+thread float2x4 x_1 = float2x4(0.0f);
+thread float4 x_2 = 0.0f;
+void main_1() {
+}
+vertex main_out tint_symbol(float4 x_1_param, float4 x_1_param_1) {
+  x_1[0] = x_1_param;
+  x_1[1] = x_1_param_1;
+  main_1();
+  return {.x_2_1=x_2};
+}
+program_source:7:17: error: program scope variable must reside in constant address space
+thread float2x4 x_1 = float2x4(0.0f);
+                ^
+program_source:8:15: error: program scope variable must reside in constant address space
+thread float4 x_2 = 0.0f;
+              ^
+program_source:11:29: error: invalid type 'float4' (vector of 4 'float' values) for input declaration in a vertex function
+vertex main_out tint_symbol(float4 x_1_param, float4 x_1_param_1) {
+                            ^~~~~~~~~~~~~~~~
+program_source:11:47: error: invalid type 'float4' (vector of 4 'float' values) for input declaration in a vertex function
+vertex main_out tint_symbol(float4 x_1_param, float4 x_1_param_1) {
+                                              ^~~~~~~~~~~~~~~~~~
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenNested.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenNested.spvasm.expected.ir.msl
index 28251dc..6587e16 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenNested.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenNested.spvasm.expected.ir.msl
@@ -1,9 +1,51 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#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];
+};
+
+struct main_out {
+  float4 x_2_1 [[position]];
+};
+
+thread tint_array<float2x4, 2> x_1 = {};
+thread float4 x_2 = 0.0f;
+void main_1() {
+}
+vertex main_out tint_symbol(float4 x_1_param, float4 x_1_param_1, float4 x_1_param_2, float4 x_1_param_3) {
+  x_1[0][0] = x_1_param;
+  x_1[0][1] = x_1_param_1;
+  x_1[1][0] = x_1_param_2;
+  x_1[1][1] = x_1_param_3;
+  main_1();
+  return {.x_2_1=x_2};
+}
+program_source:19:32: error: program scope variable must reside in constant address space
+thread tint_array<float2x4, 2> x_1 = {};
+                               ^
+program_source:20:15: error: program scope variable must reside in constant address space
+thread float4 x_2 = 0.0f;
+              ^
+program_source:23:29: error: invalid type 'float4' (vector of 4 'float' values) for input declaration in a vertex function
+vertex main_out tint_symbol(float4 x_1_param, float4 x_1_param_1, float4 x_1_param_2, float4 x_1_param_3) {
+                            ^~~~~~~~~~~~~~~~
+program_source:23:47: error: invalid type 'float4' (vector of 4 'float' values) for input declaration in a vertex function
+vertex main_out tint_symbol(float4 x_1_param, float4 x_1_param_1, float4 x_1_param_2, float4 x_1_param_3) {
+                                              ^~~~~~~~~~~~~~~~~~
+program_source:23:67: error: invalid type 'float4' (vector of 4 'float' values) for input declaration in a vertex function
+vertex main_out tint_symbol(float4 x_1_param, float4 x_1_param_1, float4 x_1_param_2, float4 x_1_param_3) {
+                                                                  ^~~~~~~~~~~~~~~~~~
+program_source:23:87: error: invalid type 'float4' (vector of 4 'float' values) for input declaration in a vertex function
+vertex main_out tint_symbol(float4 x_1_param, float4 x_1_param_1, float4 x_1_param_2, float4 x_1_param_3) {
+                                                                                      ^~~~~~~~~~~~~~~~~~
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenStruct_LocOnVariable.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenStruct_LocOnVariable.spvasm.expected.ir.msl
index 28251dc..37f6774 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenStruct_LocOnVariable.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenStruct_LocOnVariable.spvasm.expected.ir.msl
@@ -1,9 +1,35 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct Communicators {
+  float alice;
+  float4 bob;
+};
+struct main_out {
+  float4 x_2_1 [[position]];
+};
+
+thread Communicators x_1 = {};
+thread float4 x_2 = 0.0f;
+void main_1() {
+}
+vertex main_out tint_symbol(float x_1_param, float4 x_1_param_1) {
+  x_1.alice = x_1_param;
+  x_1.bob = x_1_param_1;
+  main_1();
+  return {.x_2_1=x_2};
+}
+program_source:11:22: error: program scope variable must reside in constant address space
+thread Communicators x_1 = {};
+                     ^
+program_source:12:15: error: program scope variable must reside in constant address space
+thread float4 x_2 = 0.0f;
+              ^
+program_source:15:29: error: invalid type 'float' for input declaration in a vertex function
+vertex main_out tint_symbol(float x_1_param, float4 x_1_param_1) {
+                            ^~~~~~~~~~~~~~~
+program_source:15:46: error: invalid type 'float4' (vector of 4 'float' values) for input declaration in a vertex function
+vertex main_out tint_symbol(float x_1_param, float4 x_1_param_1) {
+                                             ^~~~~~~~~~~~~~~~~~
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_I32_Load_AccessChain.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_I32_Load_AccessChain.spvasm.expected.ir.msl
index 7e344ef..530ef2f 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_I32_Load_AccessChain.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_I32_Load_AccessChain.spvasm.expected.ir.msl
@@ -1,9 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct main_out {
+  float4 position_1_1 [[position]];
+};
+
+thread int x_4 = 0;
+thread float4 position_1 = 0.0f;
+void main_1() {
+  int const x_2 = x_4;
+}
+vertex main_out tint_symbol(uint x_4_param [[]]) {
+  x_4 = as_type<int>(x_4_param);
+  main_1();
+  return {.position_1_1=position_1};
+}
+program_source:7:12: error: program scope variable must reside in constant address space
+thread int x_4 = 0;
+           ^
+program_source:8:15: error: program scope variable must reside in constant address space
+thread float4 position_1 = 0.0f;
+              ^
+program_source:10:13: warning: unused variable 'x_2' [-Wunused-variable]
+  int const x_2 = x_4;
+            ^
+program_source:12:29: error: invalid type 'uint' (aka 'unsigned int') for input declaration in a vertex function
+vertex main_out tint_symbol(uint x_4_param [[]]) {
+                            ^~~~~~~~~~~~~~
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_I32_Load_CopyObject.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_I32_Load_CopyObject.spvasm.expected.ir.msl
index 7e344ef..530ef2f 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_I32_Load_CopyObject.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_I32_Load_CopyObject.spvasm.expected.ir.msl
@@ -1,9 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct main_out {
+  float4 position_1_1 [[position]];
+};
+
+thread int x_4 = 0;
+thread float4 position_1 = 0.0f;
+void main_1() {
+  int const x_2 = x_4;
+}
+vertex main_out tint_symbol(uint x_4_param [[]]) {
+  x_4 = as_type<int>(x_4_param);
+  main_1();
+  return {.position_1_1=position_1};
+}
+program_source:7:12: error: program scope variable must reside in constant address space
+thread int x_4 = 0;
+           ^
+program_source:8:15: error: program scope variable must reside in constant address space
+thread float4 position_1 = 0.0f;
+              ^
+program_source:10:13: warning: unused variable 'x_2' [-Wunused-variable]
+  int const x_2 = x_4;
+            ^
+program_source:12:29: error: invalid type 'uint' (aka 'unsigned int') for input declaration in a vertex function
+vertex main_out tint_symbol(uint x_4_param [[]]) {
+                            ^~~~~~~~~~~~~~
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_I32_Load_Direct.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_I32_Load_Direct.spvasm.expected.ir.msl
index 7e344ef..530ef2f 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_I32_Load_Direct.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_I32_Load_Direct.spvasm.expected.ir.msl
@@ -1,9 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct main_out {
+  float4 position_1_1 [[position]];
+};
+
+thread int x_4 = 0;
+thread float4 position_1 = 0.0f;
+void main_1() {
+  int const x_2 = x_4;
+}
+vertex main_out tint_symbol(uint x_4_param [[]]) {
+  x_4 = as_type<int>(x_4_param);
+  main_1();
+  return {.position_1_1=position_1};
+}
+program_source:7:12: error: program scope variable must reside in constant address space
+thread int x_4 = 0;
+           ^
+program_source:8:15: error: program scope variable must reside in constant address space
+thread float4 position_1 = 0.0f;
+              ^
+program_source:10:13: warning: unused variable 'x_2' [-Wunused-variable]
+  int const x_2 = x_4;
+            ^
+program_source:12:29: error: invalid type 'uint' (aka 'unsigned int') for input declaration in a vertex function
+vertex main_out tint_symbol(uint x_4_param [[]]) {
+                            ^~~~~~~~~~~~~~
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_U32_Load_AccessChain.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_U32_Load_AccessChain.spvasm.expected.ir.msl
index efdd3b1..44dc2a7 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_U32_Load_AccessChain.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_U32_Load_AccessChain.spvasm.expected.ir.msl
@@ -1,9 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct main_out {
+  float4 position_1_1 [[position]];
+};
+
+thread uint x_4 = 0u;
+thread float4 position_1 = 0.0f;
+void main_1() {
+  uint const x_2 = x_4;
+}
+vertex main_out tint_symbol(uint x_4_param [[]]) {
+  x_4 = x_4_param;
+  main_1();
+  return {.position_1_1=position_1};
+}
+program_source:7:13: error: program scope variable must reside in constant address space
+thread uint x_4 = 0u;
+            ^
+program_source:8:15: error: program scope variable must reside in constant address space
+thread float4 position_1 = 0.0f;
+              ^
+program_source:10:14: warning: unused variable 'x_2' [-Wunused-variable]
+  uint const x_2 = x_4;
+             ^
+program_source:12:29: error: invalid type 'uint' (aka 'unsigned int') for input declaration in a vertex function
+vertex main_out tint_symbol(uint x_4_param [[]]) {
+                            ^~~~~~~~~~~~~~
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_U32_Load_CopyObject.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_U32_Load_CopyObject.spvasm.expected.ir.msl
index efdd3b1..44dc2a7 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_U32_Load_CopyObject.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_U32_Load_CopyObject.spvasm.expected.ir.msl
@@ -1,9 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct main_out {
+  float4 position_1_1 [[position]];
+};
+
+thread uint x_4 = 0u;
+thread float4 position_1 = 0.0f;
+void main_1() {
+  uint const x_2 = x_4;
+}
+vertex main_out tint_symbol(uint x_4_param [[]]) {
+  x_4 = x_4_param;
+  main_1();
+  return {.position_1_1=position_1};
+}
+program_source:7:13: error: program scope variable must reside in constant address space
+thread uint x_4 = 0u;
+            ^
+program_source:8:15: error: program scope variable must reside in constant address space
+thread float4 position_1 = 0.0f;
+              ^
+program_source:10:14: warning: unused variable 'x_2' [-Wunused-variable]
+  uint const x_2 = x_4;
+             ^
+program_source:12:29: error: invalid type 'uint' (aka 'unsigned int') for input declaration in a vertex function
+vertex main_out tint_symbol(uint x_4_param [[]]) {
+                            ^~~~~~~~~~~~~~
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_U32_Load_Direct.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_U32_Load_Direct.spvasm.expected.ir.msl
index efdd3b1..44dc2a7 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_U32_Load_Direct.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_U32_Load_Direct.spvasm.expected.ir.msl
@@ -1,9 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct main_out {
+  float4 position_1_1 [[position]];
+};
+
+thread uint x_4 = 0u;
+thread float4 position_1 = 0.0f;
+void main_1() {
+  uint const x_2 = x_4;
+}
+vertex main_out tint_symbol(uint x_4_param [[]]) {
+  x_4 = x_4_param;
+  main_1();
+  return {.position_1_1=position_1};
+}
+program_source:7:13: error: program scope variable must reside in constant address space
+thread uint x_4 = 0u;
+            ^
+program_source:8:15: error: program scope variable must reside in constant address space
+thread float4 position_1 = 0.0f;
+              ^
+program_source:10:14: warning: unused variable 'x_2' [-Wunused-variable]
+  uint const x_2 = x_4;
+             ^
+program_source:12:29: error: invalid type 'uint' (aka 'unsigned int') for input declaration in a vertex function
+vertex main_out tint_symbol(uint x_4_param [[]]) {
+                            ^~~~~~~~~~~~~~
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixInitializer.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixInitializer.spvasm.expected.ir.msl
index 792ab03..5814a1d 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixInitializer.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixInitializer.spvasm.expected.ir.msl
@@ -1,9 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float3x2 x_200 = float3x2(float2(1.5f, 2.0f), float2(2.0f, 3.0f), float2(3.0f, 4.0f));
+void main_1() {
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:17: error: program scope variable must reside in constant address space
+thread float3x2 x_200 = float3x2(float2(1.5f, 2.0f), float2(2.0f, 3.0f), float2(3.0f, 4.0f));
+                ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixNullInitializer.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixNullInitializer.spvasm.expected.ir.msl
index 792ab03..93d73d9 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixNullInitializer.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixNullInitializer.spvasm.expected.ir.msl
@@ -1,9 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float3x2 x_200 = float3x2(float2(0.0f), float2(0.0f), float2(0.0f));
+void main_1() {
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:17: error: program scope variable must reside in constant address space
+thread float3x2 x_200 = float3x2(float2(0.0f), float2(0.0f), float2(0.0f));
+                ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixStrideDecoration.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixStrideDecoration.spvasm.expected.ir.msl
index 58b7620..f6dd7a2 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixStrideDecoration.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixStrideDecoration.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(8) {
   el:vec2<f32> @offset(0)
 }
 
@@ -8,17 +8,17 @@
   field0:array<strided_arr, 3> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %myvar:ptr<storage, S, read_write> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     ret
   }
 }
-%tint_symbol = @fragment func():void -> %b3 {
-  %b3 = block {
+%tint_symbol = @fragment func():void {
+  $B3: {
     %4:void = call %main_1
     ret
   }
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixStrideDecoration_Dropped.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixStrideDecoration_Dropped.spvasm.expected.ir.msl
index 609fca4..86c0be0 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixStrideDecoration_Dropped.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixStrideDecoration_Dropped.spvasm.expected.ir.msl
@@ -1,20 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(8) {
   field0:mat3x2<f32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %myvar:ptr<storage, S, read_write> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     ret
   }
 }
-%tint_symbol = @fragment func():void -> %b3 {
-  %b3 = block {
+%tint_symbol = @fragment func():void {
+  $B3: {
     %4:void = call %main_1
     ret
   }
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixStrideDecoration_Natural_Dropped.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixStrideDecoration_Natural_Dropped.spvasm.expected.ir.msl
index 609fca4..86c0be0 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixStrideDecoration_Natural_Dropped.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixStrideDecoration_Natural_Dropped.spvasm.expected.ir.msl
@@ -1,20 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(8) {
   field0:mat3x2<f32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %myvar:ptr<storage, S, read_write> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     ret
   }
 }
-%tint_symbol = @fragment func():void -> %b3 {
-  %b3 = block {
+%tint_symbol = @fragment func():void {
+  $B3: {
     %4:void = call %main_1
     ret
   }
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_NamedWorkgroupVar.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_NamedWorkgroupVar.spvasm.expected.ir.msl
index 792ab03..abd7f35 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_NamedWorkgroupVar.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_NamedWorkgroupVar.spvasm.expected.ir.msl
@@ -1,9 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+threadgroup float the_counter;
+void main_1() {
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:19: error: program scope variable must reside in constant address space
+threadgroup float the_counter;
+                  ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_OutputVarsConvertedToPrivate.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_OutputVarsConvertedToPrivate.spvasm.expected.ir.msl
index 792ab03..e31977d 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_OutputVarsConvertedToPrivate.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_OutputVarsConvertedToPrivate.spvasm.expected.ir.msl
@@ -1,9 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint x_1 = 0u;
+void main_1() {
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint x_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_OutputVarsConvertedToPrivate_WithInitializer.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_OutputVarsConvertedToPrivate_WithInitializer.spvasm.expected.ir.msl
index 792ab03..6740c31 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_OutputVarsConvertedToPrivate_WithInitializer.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_OutputVarsConvertedToPrivate_WithInitializer.spvasm.expected.ir.msl
@@ -1,9 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint x_1 = 1u;
+void main_1() {
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint x_1 = 1u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_Output_FlattenArray_OneLevel.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_Output_FlattenArray_OneLevel.spvasm.expected.ir.msl
index 25d539b..3f3ae39 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_Output_FlattenArray_OneLevel.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_Output_FlattenArray_OneLevel.spvasm.expected.ir.msl
@@ -1,24 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:775 internal compiler error: main_out = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(16) {
   x_1_1:f32 @offset(0), @location(4)
   x_1_2:f32 @offset(4), @location(5)
   x_1_3:f32 @offset(8), @location(6)
   x_2_1:vec4<f32> @offset(16), @builtin(position)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_1:ptr<private, array<f32, 3>, read_write> = var
   %x_2:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     ret
   }
 }
-%tint_symbol = @vertex func():main_out -> %b3 {
-  %b3 = block {
+%tint_symbol = @vertex func():main_out {
+  $B3: {
     %5:void = call %main_1
     %6:ptr<private, f32, read_write> = access %x_1, 0i
     %7:f32 = load %6
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_Output_FlattenMatrix.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_Output_FlattenMatrix.spvasm.expected.ir.msl
index de939c4..f18b1a9 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_Output_FlattenMatrix.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_Output_FlattenMatrix.spvasm.expected.ir.msl
@@ -1,23 +1,23 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:775 internal compiler error: main_out = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(16) {
   x_1_1:vec4<f32> @offset(0), @location(9)
   x_1_2:vec4<f32> @offset(16), @location(10)
   x_2_1:vec4<f32> @offset(32), @builtin(position)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_1:ptr<private, mat2x4<f32>, read_write> = var
   %x_2:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     ret
   }
 }
-%tint_symbol = @vertex func():main_out -> %b3 {
-  %b3 = block {
+%tint_symbol = @vertex func():main_out {
+  $B3: {
     %5:void = call %main_1
     %6:ptr<private, vec4<f32>, read_write> = access %x_1, 0i
     %7:vec4<f32> = load %6
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_Output_FlattenStruct_LocOnVariable.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_Output_FlattenStruct_LocOnVariable.spvasm.expected.ir.msl
index cf35c0e..ff6f92b 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_Output_FlattenStruct_LocOnVariable.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_Output_FlattenStruct_LocOnVariable.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:775 internal compiler error: Communicators = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: Communicators = struct @align(16) {
   alice:f32 @offset(0)
   bob:vec4<f32> @offset(16)
 }
@@ -11,18 +11,18 @@
   x_2_1:vec4<f32> @offset(32), @builtin(position)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_1:ptr<private, Communicators, read_write> = var
   %x_2:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     ret
   }
 }
-%tint_symbol = @vertex func():main_out -> %b3 {
-  %b3 = block {
+%tint_symbol = @vertex func():main_out {
+  $B3: {
     %5:void = call %main_1
     %6:ptr<private, f32, read_write> = access %x_1, 0u
     %7:f32 = load %6
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_PrivateVar.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_PrivateVar.spvasm.expected.ir.msl
index 792ab03..1d1579a 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_PrivateVar.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_PrivateVar.spvasm.expected.ir.msl
@@ -1,9 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float my_own_private_idaho = 0.0f;
+void main_1() {
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread float my_own_private_idaho = 0.0f;
+             ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_AccessChain.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_AccessChain.spvasm.expected.ir.msl
index 7e344ef..30d865d 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_AccessChain.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_AccessChain.spvasm.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread int x_1 = 0;
+void main_1() {
+  int const x_2 = x_1;
+}
+fragment void tint_symbol(uint x_1_param [[sample_id]]) {
+  x_1 = as_type<int>(x_1_param);
+  main_1();
+}
+program_source:4:12: error: program scope variable must reside in constant address space
+thread int x_1 = 0;
+           ^
+program_source:6:13: warning: unused variable 'x_2' [-Wunused-variable]
+  int const x_2 = x_1;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_CopyObject.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_CopyObject.spvasm.expected.ir.msl
index 7e344ef..30d865d 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_CopyObject.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_CopyObject.spvasm.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread int x_1 = 0;
+void main_1() {
+  int const x_2 = x_1;
+}
+fragment void tint_symbol(uint x_1_param [[sample_id]]) {
+  x_1 = as_type<int>(x_1_param);
+  main_1();
+}
+program_source:4:12: error: program scope variable must reside in constant address space
+thread int x_1 = 0;
+           ^
+program_source:6:13: warning: unused variable 'x_2' [-Wunused-variable]
+  int const x_2 = x_1;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_Direct.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_Direct.spvasm.expected.ir.msl
index 7e344ef..30d865d 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_Direct.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_Direct.spvasm.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread int x_1 = 0;
+void main_1() {
+  int const x_2 = x_1;
+}
+fragment void tint_symbol(uint x_1_param [[sample_id]]) {
+  x_1 = as_type<int>(x_1_param);
+  main_1();
+}
+program_source:4:12: error: program scope variable must reside in constant address space
+thread int x_1 = 0;
+           ^
+program_source:6:13: warning: unused variable 'x_2' [-Wunused-variable]
+  int const x_2 = x_1;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_AccessChain.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_AccessChain.spvasm.expected.ir.msl
index efdd3b1..1179f38 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_AccessChain.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_AccessChain.spvasm.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint x_1 = 0u;
+void main_1() {
+  uint const x_2 = x_1;
+}
+fragment void tint_symbol(uint x_1_param [[sample_id]]) {
+  x_1 = x_1_param;
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint x_1 = 0u;
+            ^
+program_source:6:14: warning: unused variable 'x_2' [-Wunused-variable]
+  uint const x_2 = x_1;
+             ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_CopyObject.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_CopyObject.spvasm.expected.ir.msl
index efdd3b1..1179f38 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_CopyObject.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_CopyObject.spvasm.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint x_1 = 0u;
+void main_1() {
+  uint const x_2 = x_1;
+}
+fragment void tint_symbol(uint x_1_param [[sample_id]]) {
+  x_1 = x_1_param;
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint x_1 = 0u;
+            ^
+program_source:6:14: warning: unused variable 'x_2' [-Wunused-variable]
+  uint const x_2 = x_1;
+             ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_Direct.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_Direct.spvasm.expected.ir.msl
index efdd3b1..1179f38 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_Direct.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_Direct.spvasm.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint x_1 = 0u;
+void main_1() {
+  uint const x_2 = x_1;
+}
+fragment void tint_symbol(uint x_1_param [[sample_id]]) {
+  x_1 = x_1_param;
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint x_1 = 0u;
+            ^
+program_source:6:14: warning: unused variable 'x_2' [-Wunused-variable]
+  uint const x_2 = x_1;
+             ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_AccessChain.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_AccessChain.spvasm.expected.ir.msl
index 28251dc..73a87d1 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_AccessChain.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_AccessChain.spvasm.expected.ir.msl
@@ -1,9 +1,32 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#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];
+};
+
+
+thread tint_array<int, 1> x_1 = {};
+void main_1() {
+  int const x_4 = x_1[0];
+}
+fragment void tint_symbol(uint x_1_param [[sample_mask]]) {
+  x_1[0] = as_type<int>(x_1_param);
+  main_1();
+}
+program_source:16:27: error: program scope variable must reside in constant address space
+thread tint_array<int, 1> x_1 = {};
+                          ^
+program_source:18:13: warning: unused variable 'x_4' [-Wunused-variable]
+  int const x_4 = x_1[0];
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_CopyObject.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_CopyObject.spvasm.expected.ir.msl
index 28251dc..73a87d1 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_CopyObject.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_CopyObject.spvasm.expected.ir.msl
@@ -1,9 +1,32 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#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];
+};
+
+
+thread tint_array<int, 1> x_1 = {};
+void main_1() {
+  int const x_4 = x_1[0];
+}
+fragment void tint_symbol(uint x_1_param [[sample_mask]]) {
+  x_1[0] = as_type<int>(x_1_param);
+  main_1();
+}
+program_source:16:27: error: program scope variable must reside in constant address space
+thread tint_array<int, 1> x_1 = {};
+                          ^
+program_source:18:13: warning: unused variable 'x_4' [-Wunused-variable]
+  int const x_4 = x_1[0];
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_Direct.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_Direct.spvasm.expected.ir.msl
index 28251dc..a26b371 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_Direct.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_Direct.spvasm.expected.ir.msl
@@ -1,9 +1,32 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#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];
+};
+
+
+thread tint_array<int, 1> x_1 = {};
+void main_1() {
+  int const x_3 = x_1[0];
+}
+fragment void tint_symbol(uint x_1_param [[sample_mask]]) {
+  x_1[0] = as_type<int>(x_1_param);
+  main_1();
+}
+program_source:16:27: error: program scope variable must reside in constant address space
+thread tint_array<int, 1> x_1 = {};
+                          ^
+program_source:18:13: warning: unused variable 'x_3' [-Wunused-variable]
+  int const x_3 = x_1[0];
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_AccessChain.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_AccessChain.spvasm.expected.ir.msl
index 28251dc..cea308f 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_AccessChain.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_AccessChain.spvasm.expected.ir.msl
@@ -1,9 +1,32 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#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];
+};
+
+
+thread tint_array<uint, 1> x_1 = {};
+void main_1() {
+  uint const x_4 = x_1[0];
+}
+fragment void tint_symbol(uint x_1_param [[sample_mask]]) {
+  x_1[0] = x_1_param;
+  main_1();
+}
+program_source:16:28: error: program scope variable must reside in constant address space
+thread tint_array<uint, 1> x_1 = {};
+                           ^
+program_source:18:14: warning: unused variable 'x_4' [-Wunused-variable]
+  uint const x_4 = x_1[0];
+             ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_CopyObject.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_CopyObject.spvasm.expected.ir.msl
index 28251dc..cea308f 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_CopyObject.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_CopyObject.spvasm.expected.ir.msl
@@ -1,9 +1,32 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#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];
+};
+
+
+thread tint_array<uint, 1> x_1 = {};
+void main_1() {
+  uint const x_4 = x_1[0];
+}
+fragment void tint_symbol(uint x_1_param [[sample_mask]]) {
+  x_1[0] = x_1_param;
+  main_1();
+}
+program_source:16:28: error: program scope variable must reside in constant address space
+thread tint_array<uint, 1> x_1 = {};
+                           ^
+program_source:18:14: warning: unused variable 'x_4' [-Wunused-variable]
+  uint const x_4 = x_1[0];
+             ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_Direct.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_Direct.spvasm.expected.ir.msl
index 28251dc..514dce4 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_Direct.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_Direct.spvasm.expected.ir.msl
@@ -1,9 +1,32 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#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];
+};
+
+
+thread tint_array<uint, 1> x_1 = {};
+void main_1() {
+  uint const x_3 = x_1[0];
+}
+fragment void tint_symbol(uint x_1_param [[sample_mask]]) {
+  x_1[0] = x_1_param;
+  main_1();
+}
+program_source:16:28: error: program scope variable must reside in constant address space
+thread tint_array<uint, 1> x_1 = {};
+                           ^
+program_source:18:14: warning: unused variable 'x_3' [-Wunused-variable]
+  uint const x_3 = x_1[0];
+             ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_WithStride.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_WithStride.spvasm.expected.ir.msl
index 28251dc..514dce4 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_WithStride.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_WithStride.spvasm.expected.ir.msl
@@ -1,9 +1,32 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#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];
+};
+
+
+thread tint_array<uint, 1> x_1 = {};
+void main_1() {
+  uint const x_3 = x_1[0];
+}
+fragment void tint_symbol(uint x_1_param [[sample_mask]]) {
+  x_1[0] = x_1_param;
+  main_1();
+}
+program_source:16:28: error: program scope variable must reside in constant address space
+thread tint_array<uint, 1> x_1 = {};
+                           ^
+program_source:18:14: warning: unused variable 'x_3' [-Wunused-variable]
+  uint const x_3 = x_1[0];
+             ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_AccessChain.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_AccessChain.spvasm.expected.ir.msl
index 28251dc..6c43e76 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_AccessChain.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_AccessChain.spvasm.expected.ir.msl
@@ -1,9 +1,32 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#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];
+};
+
+struct main_out {
+  uint x_1_1 [[sample_mask]];
+};
+
+thread tint_array<int, 1> x_1 = {};
+void main_1() {
+  x_1[0] = 12;
+}
+fragment main_out tint_symbol() {
+  main_1();
+  return {.x_1_1=as_type<uint>(x_1[0])};
+}
+program_source:19:27: error: program scope variable must reside in constant address space
+thread tint_array<int, 1> x_1 = {};
+                          ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_CopyObject.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_CopyObject.spvasm.expected.ir.msl
index 28251dc..6c43e76 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_CopyObject.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_CopyObject.spvasm.expected.ir.msl
@@ -1,9 +1,32 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#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];
+};
+
+struct main_out {
+  uint x_1_1 [[sample_mask]];
+};
+
+thread tint_array<int, 1> x_1 = {};
+void main_1() {
+  x_1[0] = 12;
+}
+fragment main_out tint_symbol() {
+  main_1();
+  return {.x_1_1=as_type<uint>(x_1[0])};
+}
+program_source:19:27: error: program scope variable must reside in constant address space
+thread tint_array<int, 1> x_1 = {};
+                          ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_Direct.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_Direct.spvasm.expected.ir.msl
index 28251dc..6c43e76 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_Direct.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_Direct.spvasm.expected.ir.msl
@@ -1,9 +1,32 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#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];
+};
+
+struct main_out {
+  uint x_1_1 [[sample_mask]];
+};
+
+thread tint_array<int, 1> x_1 = {};
+void main_1() {
+  x_1[0] = 12;
+}
+fragment main_out tint_symbol() {
+  main_1();
+  return {.x_1_1=as_type<uint>(x_1[0])};
+}
+program_source:19:27: error: program scope variable must reside in constant address space
+thread tint_array<int, 1> x_1 = {};
+                          ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_AccessChain.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_AccessChain.spvasm.expected.ir.msl
index 28251dc..a9c8a36 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_AccessChain.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_AccessChain.spvasm.expected.ir.msl
@@ -1,9 +1,32 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#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];
+};
+
+struct main_out {
+  uint x_1_1 [[sample_mask]];
+};
+
+thread tint_array<uint, 1> x_1 = {};
+void main_1() {
+  x_1[0] = 0u;
+}
+fragment main_out tint_symbol() {
+  main_1();
+  return {.x_1_1=x_1[0]};
+}
+program_source:19:28: error: program scope variable must reside in constant address space
+thread tint_array<uint, 1> x_1 = {};
+                           ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_CopyObject.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_CopyObject.spvasm.expected.ir.msl
index 28251dc..a9c8a36 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_CopyObject.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_CopyObject.spvasm.expected.ir.msl
@@ -1,9 +1,32 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#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];
+};
+
+struct main_out {
+  uint x_1_1 [[sample_mask]];
+};
+
+thread tint_array<uint, 1> x_1 = {};
+void main_1() {
+  x_1[0] = 0u;
+}
+fragment main_out tint_symbol() {
+  main_1();
+  return {.x_1_1=x_1[0]};
+}
+program_source:19:28: error: program scope variable must reside in constant address space
+thread tint_array<uint, 1> x_1 = {};
+                           ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_Direct.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_Direct.spvasm.expected.ir.msl
index 28251dc..a9c8a36 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_Direct.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_Direct.spvasm.expected.ir.msl
@@ -1,9 +1,32 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#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];
+};
+
+struct main_out {
+  uint x_1_1 [[sample_mask]];
+};
+
+thread tint_array<uint, 1> x_1 = {};
+void main_1() {
+  x_1[0] = 0u;
+}
+fragment main_out tint_symbol() {
+  main_1();
+  return {.x_1_1=x_1[0]};
+}
+program_source:19:28: error: program scope variable must reside in constant address space
+thread tint_array<uint, 1> x_1 = {};
+                           ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_WithStride.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_WithStride.spvasm.expected.ir.msl
index 28251dc..a9c8a36 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_WithStride.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_WithStride.spvasm.expected.ir.msl
@@ -1,9 +1,32 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#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];
+};
+
+struct main_out {
+  uint x_1_1 [[sample_mask]];
+};
+
+thread tint_array<uint, 1> x_1 = {};
+void main_1() {
+  x_1[0] = 0u;
+}
+fragment main_out tint_symbol() {
+  main_1();
+  return {.x_1_1=x_1[0]};
+}
+program_source:19:28: error: program scope variable must reside in constant address space
+thread tint_array<uint, 1> x_1 = {};
+                           ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarInitializers.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarInitializers.spvasm.expected.ir.msl
index 792ab03..86d5c10 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarInitializers.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarInitializers.spvasm.expected.ir.msl
@@ -1,9 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool x_1 = true;
+thread bool x_2 = false;
+thread int x_3 = -1;
+thread uint x_4 = 1u;
+thread float x_5 = 1.5f;
+void main_1() {
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread bool x_1 = true;
+            ^
+program_source:5:13: error: program scope variable must reside in constant address space
+thread bool x_2 = false;
+            ^
+program_source:6:12: error: program scope variable must reside in constant address space
+thread int x_3 = -1;
+           ^
+program_source:7:13: error: program scope variable must reside in constant address space
+thread uint x_4 = 1u;
+            ^
+program_source:8:14: error: program scope variable must reside in constant address space
+thread float x_5 = 1.5f;
+             ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarNullInitializers.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarNullInitializers.spvasm.expected.ir.msl
index 792ab03..ae5c499 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarNullInitializers.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarNullInitializers.spvasm.expected.ir.msl
@@ -1,9 +1,27 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool x_1 = false;
+thread int x_2 = 0;
+thread uint x_3 = 0u;
+thread float x_4 = 0.0f;
+void main_1() {
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread bool x_1 = false;
+            ^
+program_source:5:12: error: program scope variable must reside in constant address space
+thread int x_2 = 0;
+           ^
+program_source:6:13: error: program scope variable must reside in constant address space
+thread uint x_3 = 0u;
+            ^
+program_source:7:14: error: program scope variable must reside in constant address space
+thread float x_4 = 0.0f;
+             ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_StorageBuffer_NonWritable_AllMembers.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_StorageBuffer_NonWritable_AllMembers.spvasm.expected.ir.msl
index de19871..a145007 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_StorageBuffer_NonWritable_AllMembers.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_StorageBuffer_NonWritable_AllMembers.spvasm.expected.ir.msl
@@ -1,21 +1,21 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   field0:f32 @offset(0)
   field1:f32 @offset(4)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_1:ptr<storage, S, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     ret
   }
 }
-%tint_symbol = @fragment func():void -> %b3 {
-  %b3 = block {
+%tint_symbol = @fragment func():void {
+  $B3: {
     %4:void = call %main_1
     ret
   }
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_StorageBuffer_NonWritable_NotAllMembers.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_StorageBuffer_NonWritable_NotAllMembers.spvasm.expected.ir.msl
index 4c74815..4e68937 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_StorageBuffer_NonWritable_NotAllMembers.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_StorageBuffer_NonWritable_NotAllMembers.spvasm.expected.ir.msl
@@ -1,21 +1,21 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   field0:f32 @offset(0)
   field1:f32 @offset(4)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_1:ptr<storage, S, read_write> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     ret
   }
 }
-%tint_symbol = @fragment func():void -> %b3 {
-  %b3 = block {
+%tint_symbol = @fragment func():void {
+  $B3: {
     %4:void = call %main_1
     ret
   }
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_StructInitializer.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_StructInitializer.spvasm.expected.ir.msl
index 792ab03..365e656 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_StructInitializer.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_StructInitializer.spvasm.expected.ir.msl
@@ -1,9 +1,32 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#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];
+};
+
+struct S {
+  uint field0;
+  float field1;
+  tint_array<uint, 2> field2;
+};
+
+thread S x_200 = S{.field0=1u, .field1=1.5f, .field2=tint_array<uint, 2>{1u, 2u}};
+void main_1() {
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:21:10: error: program scope variable must reside in constant address space
+thread S x_200 = S{.field0=1u, .field1=1.5f, .field2=tint_array<uint, 2>{1u, 2u}};
+         ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_StructMember_NonReadableDecoration_Dropped.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_StructMember_NonReadableDecoration_Dropped.spvasm.expected.ir.msl
index e10667b..01adc83 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_StructMember_NonReadableDecoration_Dropped.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_StructMember_NonReadableDecoration_Dropped.spvasm.expected.ir.msl
@@ -1,22 +1,22 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   field0:u32 @offset(0)
   field1:f32 @offset(4)
   field2:array<u32, 2> @offset(8)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_1:ptr<storage, S, read_write> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     ret
   }
 }
-%tint_symbol = @fragment func():void -> %b3 {
-  %b3 = block {
+%tint_symbol = @fragment func():void {
+  $B3: {
     %4:void = call %main_1
     ret
   }
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_StructNullInitializer.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_StructNullInitializer.spvasm.expected.ir.msl
index 792ab03..5d0837f 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_StructNullInitializer.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_StructNullInitializer.spvasm.expected.ir.msl
@@ -1,9 +1,32 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#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];
+};
+
+struct S {
+  uint field0;
+  float field1;
+  tint_array<uint, 2> field2;
+};
+
+thread S x_200 = S{};
+void main_1() {
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:21:10: error: program scope variable must reside in constant address space
+thread S x_200 = S{};
+         ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorBoolNullInitializer.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorBoolNullInitializer.spvasm.expected.ir.msl
index 792ab03..5128b8c 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorBoolNullInitializer.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorBoolNullInitializer.spvasm.expected.ir.msl
@@ -1,9 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread bool2 x_200 = bool2(false);
+void main_1() {
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread bool2 x_200 = bool2(false);
+             ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorFloatNullInitializer.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorFloatNullInitializer.spvasm.expected.ir.msl
index 792ab03..de2c791 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorFloatNullInitializer.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorFloatNullInitializer.spvasm.expected.ir.msl
@@ -1,9 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float2 x_200 = float2(0.0f);
+void main_1() {
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:15: error: program scope variable must reside in constant address space
+thread float2 x_200 = float2(0.0f);
+              ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorInitializer.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorInitializer.spvasm.expected.ir.msl
index 792ab03..c10b4e8 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorInitializer.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorInitializer.spvasm.expected.ir.msl
@@ -1,9 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float2 x_200 = float2(1.5f, 2.0f);
+void main_1() {
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:15: error: program scope variable must reside in constant address space
+thread float2 x_200 = float2(1.5f, 2.0f);
+              ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorIntNullInitializer.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorIntNullInitializer.spvasm.expected.ir.msl
index 792ab03..3ecf261 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorIntNullInitializer.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorIntNullInitializer.spvasm.expected.ir.msl
@@ -1,9 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread int2 x_200 = int2(0);
+void main_1() {
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread int2 x_200 = int2(0);
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorUintNullInitializer.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorUintNullInitializer.spvasm.expected.ir.msl
index 792ab03..710f436 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorUintNullInitializer.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorUintNullInitializer.spvasm.expected.ir.msl
@@ -1,9 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint2 x_200 = uint2(0u);
+void main_1() {
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread uint2 x_200 = uint2(0u);
+             ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_I32_Load_AccessChain.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_I32_Load_AccessChain.spvasm.expected.ir.msl
index 7e344ef..26b2fe4 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_I32_Load_AccessChain.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_I32_Load_AccessChain.spvasm.expected.ir.msl
@@ -1,9 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct main_out {
+  float4 x_1_1 [[position]];
+};
+
+thread int x_4 = 0;
+thread float4 x_1 = 0.0f;
+void main_1() {
+  int const x_2 = x_4;
+}
+vertex main_out tint_symbol(uint x_4_param [[]]) {
+  x_4 = as_type<int>(x_4_param);
+  main_1();
+  return {.x_1_1=x_1};
+}
+program_source:7:12: error: program scope variable must reside in constant address space
+thread int x_4 = 0;
+           ^
+program_source:8:15: error: program scope variable must reside in constant address space
+thread float4 x_1 = 0.0f;
+              ^
+program_source:10:13: warning: unused variable 'x_2' [-Wunused-variable]
+  int const x_2 = x_4;
+            ^
+program_source:12:29: error: invalid type 'uint' (aka 'unsigned int') for input declaration in a vertex function
+vertex main_out tint_symbol(uint x_4_param [[]]) {
+                            ^~~~~~~~~~~~~~
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_I32_Load_CopyObject.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_I32_Load_CopyObject.spvasm.expected.ir.msl
index 7e344ef..26b2fe4 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_I32_Load_CopyObject.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_I32_Load_CopyObject.spvasm.expected.ir.msl
@@ -1,9 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct main_out {
+  float4 x_1_1 [[position]];
+};
+
+thread int x_4 = 0;
+thread float4 x_1 = 0.0f;
+void main_1() {
+  int const x_2 = x_4;
+}
+vertex main_out tint_symbol(uint x_4_param [[]]) {
+  x_4 = as_type<int>(x_4_param);
+  main_1();
+  return {.x_1_1=x_1};
+}
+program_source:7:12: error: program scope variable must reside in constant address space
+thread int x_4 = 0;
+           ^
+program_source:8:15: error: program scope variable must reside in constant address space
+thread float4 x_1 = 0.0f;
+              ^
+program_source:10:13: warning: unused variable 'x_2' [-Wunused-variable]
+  int const x_2 = x_4;
+            ^
+program_source:12:29: error: invalid type 'uint' (aka 'unsigned int') for input declaration in a vertex function
+vertex main_out tint_symbol(uint x_4_param [[]]) {
+                            ^~~~~~~~~~~~~~
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_I32_Load_Direct.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_I32_Load_Direct.spvasm.expected.ir.msl
index 7e344ef..26b2fe4 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_I32_Load_Direct.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_I32_Load_Direct.spvasm.expected.ir.msl
@@ -1,9 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct main_out {
+  float4 x_1_1 [[position]];
+};
+
+thread int x_4 = 0;
+thread float4 x_1 = 0.0f;
+void main_1() {
+  int const x_2 = x_4;
+}
+vertex main_out tint_symbol(uint x_4_param [[]]) {
+  x_4 = as_type<int>(x_4_param);
+  main_1();
+  return {.x_1_1=x_1};
+}
+program_source:7:12: error: program scope variable must reside in constant address space
+thread int x_4 = 0;
+           ^
+program_source:8:15: error: program scope variable must reside in constant address space
+thread float4 x_1 = 0.0f;
+              ^
+program_source:10:13: warning: unused variable 'x_2' [-Wunused-variable]
+  int const x_2 = x_4;
+            ^
+program_source:12:29: error: invalid type 'uint' (aka 'unsigned int') for input declaration in a vertex function
+vertex main_out tint_symbol(uint x_4_param [[]]) {
+                            ^~~~~~~~~~~~~~
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_U32_Load_AccessChain.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_U32_Load_AccessChain.spvasm.expected.ir.msl
index efdd3b1..465cc9b 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_U32_Load_AccessChain.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_U32_Load_AccessChain.spvasm.expected.ir.msl
@@ -1,9 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct main_out {
+  float4 x_1_1 [[position]];
+};
+
+thread uint x_4 = 0u;
+thread float4 x_1 = 0.0f;
+void main_1() {
+  uint const x_2 = x_4;
+}
+vertex main_out tint_symbol(uint x_4_param [[]]) {
+  x_4 = x_4_param;
+  main_1();
+  return {.x_1_1=x_1};
+}
+program_source:7:13: error: program scope variable must reside in constant address space
+thread uint x_4 = 0u;
+            ^
+program_source:8:15: error: program scope variable must reside in constant address space
+thread float4 x_1 = 0.0f;
+              ^
+program_source:10:14: warning: unused variable 'x_2' [-Wunused-variable]
+  uint const x_2 = x_4;
+             ^
+program_source:12:29: error: invalid type 'uint' (aka 'unsigned int') for input declaration in a vertex function
+vertex main_out tint_symbol(uint x_4_param [[]]) {
+                            ^~~~~~~~~~~~~~
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_U32_Load_CopyObject.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_U32_Load_CopyObject.spvasm.expected.ir.msl
index efdd3b1..465cc9b 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_U32_Load_CopyObject.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_U32_Load_CopyObject.spvasm.expected.ir.msl
@@ -1,9 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct main_out {
+  float4 x_1_1 [[position]];
+};
+
+thread uint x_4 = 0u;
+thread float4 x_1 = 0.0f;
+void main_1() {
+  uint const x_2 = x_4;
+}
+vertex main_out tint_symbol(uint x_4_param [[]]) {
+  x_4 = x_4_param;
+  main_1();
+  return {.x_1_1=x_1};
+}
+program_source:7:13: error: program scope variable must reside in constant address space
+thread uint x_4 = 0u;
+            ^
+program_source:8:15: error: program scope variable must reside in constant address space
+thread float4 x_1 = 0.0f;
+              ^
+program_source:10:14: warning: unused variable 'x_2' [-Wunused-variable]
+  uint const x_2 = x_4;
+             ^
+program_source:12:29: error: invalid type 'uint' (aka 'unsigned int') for input declaration in a vertex function
+vertex main_out tint_symbol(uint x_4_param [[]]) {
+                            ^~~~~~~~~~~~~~
+
diff --git a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_U32_Load_Direct.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_U32_Load_Direct.spvasm.expected.ir.msl
index efdd3b1..465cc9b 100644
--- a/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_U32_Load_Direct.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_U32_Load_Direct.spvasm.expected.ir.msl
@@ -1,9 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct main_out {
+  float4 x_1_1 [[position]];
+};
+
+thread uint x_4 = 0u;
+thread float4 x_1 = 0.0f;
+void main_1() {
+  uint const x_2 = x_4;
+}
+vertex main_out tint_symbol(uint x_4_param [[]]) {
+  x_4 = x_4_param;
+  main_1();
+  return {.x_1_1=x_1};
+}
+program_source:7:13: error: program scope variable must reside in constant address space
+thread uint x_4 = 0u;
+            ^
+program_source:8:15: error: program scope variable must reside in constant address space
+thread float4 x_1 = 0.0f;
+              ^
+program_source:10:14: warning: unused variable 'x_2' [-Wunused-variable]
+  uint const x_2 = x_4;
+             ^
+program_source:12:29: error: invalid type 'uint' (aka 'unsigned int') for input declaration in a vertex function
+vertex main_out tint_symbol(uint x_4_param [[]]) {
+                            ^~~~~~~~~~~~~~
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_BackEdge_MultiBlockLoop_MultiBlockContinueConstruct_ContinueIsNotHeader.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_BackEdge_MultiBlockLoop_MultiBlockContinueConstruct_ContinueIsNotHeader.spvasm.expected.ir.msl
index cdbf128..8f0e2fb 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_BackEdge_MultiBlockLoop_MultiBlockContinueConstruct_ContinueIsNotHeader.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_BackEdge_MultiBlockLoop_MultiBlockContinueConstruct_ContinueIsNotHeader.spvasm.expected.ir.msl
@@ -1,9 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      if (false) {
+      } else {
+        break;
+      }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_BackEdge_MultiBlockLoop_SingleBlockContinueConstruct.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_BackEdge_MultiBlockLoop_SingleBlockContinueConstruct.spvasm.expected.ir.msl
index cdbf128..8f0e2fb 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_BackEdge_MultiBlockLoop_SingleBlockContinueConstruct.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_BackEdge_MultiBlockLoop_SingleBlockContinueConstruct.spvasm.expected.ir.msl
@@ -1,9 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      if (false) {
+      } else {
+        break;
+      }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_BackEdge_SingleBlockLoop.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_BackEdge_SingleBlockLoop.spvasm.expected.ir.msl
index cdbf128..8f0e2fb 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_BackEdge_SingleBlockLoop.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_BackEdge_SingleBlockLoop.spvasm.expected.ir.msl
@@ -1,9 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      if (false) {
+      } else {
+        break;
+      }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_IfToElse.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_IfToElse.spvasm.expected.ir.msl
index 792ab03..0282ee5 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_IfToElse.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_IfToElse.spvasm.expected.ir.msl
@@ -1,9 +1,17 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  if (false) {
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_IfToThen.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_IfToThen.spvasm.expected.ir.msl
index 792ab03..0282ee5 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_IfToThen.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_IfToThen.spvasm.expected.ir.msl
@@ -1,9 +1,17 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  if (false) {
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_LoopHeadToBody.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_LoopHeadToBody.spvasm.expected.ir.msl
index cdbf128..8f0e2fb 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_LoopHeadToBody.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_LoopHeadToBody.spvasm.expected.ir.msl
@@ -1,9 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      if (false) {
+      } else {
+        break;
+      }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_SwitchToCase.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_SwitchToCase.spvasm.expected.ir.msl
index 2b8690e..c611a2b 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_SwitchToCase.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_SwitchToCase.spvasm.expected.ir.msl
@@ -1,9 +1,25 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Switch
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  switch(42u) {
+    case 20u:
+    {
+      break;
+    }
+    default:
+    {
+      break;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_SwitchToDefaultNotMerge.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_SwitchToDefaultNotMerge.spvasm.expected.ir.msl
index 2b8690e..c611a2b 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_SwitchToDefaultNotMerge.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_SwitchToDefaultNotMerge.spvasm.expected.ir.msl
@@ -1,9 +1,25 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Switch
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  switch(42u) {
+    case 20u:
+    {
+      break;
+    }
+    default:
+    {
+      break;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromElse_ForwardWithinElse.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromElse_ForwardWithinElse.spvasm.expected.ir.msl
index efdd3b1..9746a4d 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromElse_ForwardWithinElse.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromElse_ForwardWithinElse.spvasm.expected.ir.msl
@@ -1,9 +1,28 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  bool guard10 = true;
+  if (false) {
+    guard10 = false;
+  } else {
+    if (guard10) {
+      if (true) {
+        guard10 = false;
+      }
+      if (guard10) {
+        guard10 = false;
+      }
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromIfHeader.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromIfHeader.spvasm.expected.ir.msl
index 792ab03..0282ee5 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromIfHeader.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromIfHeader.spvasm.expected.ir.msl
@@ -1,9 +1,17 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  if (false) {
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromIfThenElse.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromIfThenElse.spvasm.expected.ir.msl
index 792ab03..0282ee5 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromIfThenElse.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromIfThenElse.spvasm.expected.ir.msl
@@ -1,9 +1,17 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  if (false) {
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromThen_ForwardWithinThen.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromThen_ForwardWithinThen.spvasm.expected.ir.msl
index efdd3b1..ffa9f65 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromThen_ForwardWithinThen.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromThen_ForwardWithinThen.spvasm.expected.ir.msl
@@ -1,9 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  bool guard10 = true;
+  if (false) {
+    if (true) {
+      guard10 = false;
+    }
+    if (guard10) {
+      guard10 = false;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromContinueConstructHeader.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromContinueConstructHeader.spvasm.expected.ir.msl
index cdbf128..78425ed 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromContinueConstructHeader.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromContinueConstructHeader.spvasm.expected.ir.msl
@@ -1,9 +1,28 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      if (false) {
+      } else {
+        break;
+      }
+      if false { break; }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+program_source:12:10: error: expected '(' after 'if'
+      if false { break; }
+         ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromContinueConstructTail.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromContinueConstructTail.spvasm.expected.ir.msl
index cdbf128..78425ed 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromContinueConstructTail.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromContinueConstructTail.spvasm.expected.ir.msl
@@ -1,9 +1,28 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      if (false) {
+      } else {
+        break;
+      }
+      if false { break; }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+program_source:12:10: error: expected '(' after 'if'
+      if false { break; }
+         ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBody.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBody.spvasm.expected.ir.msl
index cdbf128..e98865c 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBody.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBody.spvasm.expected.ir.msl
@@ -1,9 +1,28 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      if (false) {
+      } else {
+        break;
+      }
+      if (true) {
+      } else {
+        break;
+      }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBodyDirect.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBodyDirect.spvasm.expected.ir.msl
index cdbf128..141bcf5 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBodyDirect.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBodyDirect.spvasm.expected.ir.msl
@@ -1,9 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      if (false) {
+      } else {
+        break;
+      }
+      break;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBodyNestedSelection_Conditional.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBodyNestedSelection_Conditional.spvasm.expected.ir.msl
index cdbf128..165d2f3 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBodyNestedSelection_Conditional.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBodyNestedSelection_Conditional.spvasm.expected.ir.msl
@@ -1,9 +1,29 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      if (false) {
+      } else {
+        break;
+      }
+      if (true) {
+        if (false) {
+          break;
+        }
+      }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBodyNestedSelection_Unconditional.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBodyNestedSelection_Unconditional.spvasm.expected.ir.msl
index cdbf128..be7a64d 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBodyNestedSelection_Unconditional.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBodyNestedSelection_Unconditional.spvasm.expected.ir.msl
@@ -1,9 +1,27 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      if (false) {
+      } else {
+        break;
+      }
+      if (true) {
+        break;
+      }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopHeader_MultiBlockLoop.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopHeader_MultiBlockLoop.spvasm.expected.ir.msl
index cdbf128..8f0e2fb 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopHeader_MultiBlockLoop.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopHeader_MultiBlockLoop.spvasm.expected.ir.msl
@@ -1,9 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      if (false) {
+      } else {
+        break;
+      }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopHeader_SingleBlockLoop_FalseBranch.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopHeader_SingleBlockLoop_FalseBranch.spvasm.expected.ir.msl
index cdbf128..8f0e2fb 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopHeader_SingleBlockLoop_FalseBranch.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopHeader_SingleBlockLoop_FalseBranch.spvasm.expected.ir.msl
@@ -1,9 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      if (false) {
+      } else {
+        break;
+      }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopHeader_SingleBlockLoop_TrueBranch.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopHeader_SingleBlockLoop_TrueBranch.spvasm.expected.ir.msl
index cdbf128..f7e927c 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopHeader_SingleBlockLoop_TrueBranch.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopHeader_SingleBlockLoop_TrueBranch.spvasm.expected.ir.msl
@@ -1,9 +1,23 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      if (false) {
+        break;
+      }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_ConditionalFromNestedIf.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_ConditionalFromNestedIf.spvasm.expected.ir.msl
index cdbf128..31012f3 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_ConditionalFromNestedIf.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_ConditionalFromNestedIf.spvasm.expected.ir.msl
@@ -1,9 +1,29 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      if (false) {
+      } else {
+        break;
+      }
+      if (true) {
+        if (true) {
+          continue;
+        }
+      }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedIf.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedIf.spvasm.expected.ir.msl
index cdbf128..5d7fa76 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedIf.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedIf.spvasm.expected.ir.msl
@@ -1,9 +1,27 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      if (false) {
+      } else {
+        break;
+      }
+      if (true) {
+        continue;
+      }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedSwitchCaseBody_Unconditional.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedSwitchCaseBody_Unconditional.spvasm.expected.ir.msl
index cdbf128..2c7e429 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedSwitchCaseBody_Unconditional.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedSwitchCaseBody_Unconditional.spvasm.expected.ir.msl
@@ -1,9 +1,34 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      if (false) {
+      } else {
+        break;
+      }
+      switch(42u) {
+        case 40u:
+        {
+          continue;
+        }
+        default:
+        {
+          break;
+        }
+      }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedSwitchDefaultBody_Conditional.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedSwitchDefaultBody_Conditional.spvasm.expected.ir.msl
index cdbf128..5890bb1 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedSwitchDefaultBody_Conditional.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedSwitchDefaultBody_Conditional.spvasm.expected.ir.msl
@@ -1,9 +1,37 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      if (false) {
+      } else {
+        break;
+      }
+      switch(42u) {
+        default:
+        {
+          if (true) {
+            continue;
+          }
+          break;
+        }
+        case 79u:
+        {
+          break;
+        }
+      }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedSwitchDefaultBody_Unconditional.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedSwitchDefaultBody_Unconditional.spvasm.expected.ir.msl
index cdbf128..cf1b356 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedSwitchDefaultBody_Unconditional.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedSwitchDefaultBody_Unconditional.spvasm.expected.ir.msl
@@ -1,9 +1,34 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      if (false) {
+      } else {
+        break;
+      }
+      switch(42u) {
+        default:
+        {
+          continue;
+        }
+        case 79u:
+        {
+          break;
+        }
+      }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_LoopBodyToContinue.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_LoopBodyToContinue.spvasm.expected.ir.msl
index cdbf128..8f0e2fb 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_LoopBodyToContinue.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_LoopBodyToContinue.spvasm.expected.ir.msl
@@ -1,9 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      if (false) {
+      } else {
+        break;
+      }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Pathological_Forward_Premerge.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Pathological_Forward_Premerge.spvasm.expected.ir.msl
index 792ab03..512d8bf 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Pathological_Forward_Premerge.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Pathological_Forward_Premerge.spvasm.expected.ir.msl
@@ -1,9 +1,19 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  if (false) {
+  }
+  if (true) {
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Pathological_Forward_Regardless.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Pathological_Forward_Regardless.spvasm.expected.ir.msl
index 792ab03..0282ee5 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Pathological_Forward_Regardless.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Pathological_Forward_Regardless.spvasm.expected.ir.msl
@@ -1,9 +1,17 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  if (false) {
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromNestedIf_Conditional.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromNestedIf_Conditional.spvasm.expected.ir.msl
index 2b8690e..aafb266 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromNestedIf_Conditional.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromNestedIf_Conditional.spvasm.expected.ir.msl
@@ -1,9 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Switch
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  switch(42u) {
+    case 20u:
+    {
+      if (false) {
+        if (true) {
+          break;
+        }
+      }
+      break;
+    }
+    default:
+    {
+      break;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromNestedIf_Unconditional.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromNestedIf_Unconditional.spvasm.expected.ir.msl
index 2b8690e..09c3acb 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromNestedIf_Unconditional.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromNestedIf_Unconditional.spvasm.expected.ir.msl
@@ -1,9 +1,28 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Switch
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  switch(42u) {
+    case 20u:
+    {
+      if (false) {
+        break;
+      }
+      break;
+    }
+    default:
+    {
+      break;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchCaseBody.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchCaseBody.spvasm.expected.ir.msl
index 2b8690e..c611a2b 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchCaseBody.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchCaseBody.spvasm.expected.ir.msl
@@ -1,9 +1,25 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Switch
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  switch(42u) {
+    case 20u:
+    {
+      break;
+    }
+    default:
+    {
+      break;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchCaseDirect.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchCaseDirect.spvasm.expected.ir.msl
index 2b8690e..fde6906 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchCaseDirect.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchCaseDirect.spvasm.expected.ir.msl
@@ -1,9 +1,25 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Switch
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  switch(42u) {
+    default:
+    {
+      break;
+    }
+    case 20u:
+    {
+      break;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchDefaultBody.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchDefaultBody.spvasm.expected.ir.msl
index 2b8690e..c611a2b 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchDefaultBody.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchDefaultBody.spvasm.expected.ir.msl
@@ -1,9 +1,25 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Switch
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  switch(42u) {
+    case 20u:
+    {
+      break;
+    }
+    default:
+    {
+      break;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchDefaultIsMerge.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchDefaultIsMerge.spvasm.expected.ir.msl
index 2b8690e..c611a2b 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchDefaultIsMerge.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchDefaultIsMerge.spvasm.expected.ir.msl
@@ -1,9 +1,25 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Switch
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  switch(42u) {
+    case 20u:
+    {
+      break;
+    }
+    default:
+    {
+      break;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_DupConditionalBranch.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_DupConditionalBranch.spvasm.expected.ir.msl
index 792ab03..0282ee5 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_DupConditionalBranch.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_DupConditionalBranch.spvasm.expected.ir.msl
@@ -1,9 +1,17 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  if (false) {
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_FalseOnlyBranch.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_FalseOnlyBranch.spvasm.expected.ir.msl
index 792ab03..0282ee5 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_FalseOnlyBranch.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_FalseOnlyBranch.spvasm.expected.ir.msl
@@ -1,9 +1,17 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  if (false) {
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_IgnoreStaticalyUnreachable.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_IgnoreStaticalyUnreachable.spvasm.expected.ir.msl
index 792ab03..fa708ac 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_IgnoreStaticalyUnreachable.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_IgnoreStaticalyUnreachable.spvasm.expected.ir.msl
@@ -1,9 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_KillIsDeadEnd.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_KillIsDeadEnd.spvasm.expected.ir.msl
index 792ab03..3efab94 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_KillIsDeadEnd.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_KillIsDeadEnd.spvasm.expected.ir.msl
@@ -1,9 +1,23 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+thread bool continue_execution = true;
+void main_1() {
+  continue_execution = false;
+}
+fragment void tint_symbol() {
+  main_1();
+  if (!(continue_execution)) {
+    discard_fragment();
+  }
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+program_source:5:13: error: program scope variable must reside in constant address space
+thread bool continue_execution = true;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasBreak.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasBreak.spvasm.expected.ir.msl
index cdbf128..141bcf5 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasBreak.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasBreak.spvasm.expected.ir.msl
@@ -1,9 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      if (false) {
+      } else {
+        break;
+      }
+      break;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasBreakIf.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasBreakIf.spvasm.expected.ir.msl
index cdbf128..be7a64d 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasBreakIf.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasBreakIf.spvasm.expected.ir.msl
@@ -1,9 +1,27 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      if (false) {
+      } else {
+        break;
+      }
+      if (true) {
+        break;
+      }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasBreakUnless.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasBreakUnless.spvasm.expected.ir.msl
index cdbf128..e98865c 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasBreakUnless.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasBreakUnless.spvasm.expected.ir.msl
@@ -1,9 +1,28 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      if (false) {
+      } else {
+        break;
+      }
+      if (true) {
+      } else {
+        break;
+      }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasContinueIf.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasContinueIf.spvasm.expected.ir.msl
index cdbf128..5d7fa76 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasContinueIf.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasContinueIf.spvasm.expected.ir.msl
@@ -1,9 +1,27 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      if (false) {
+      } else {
+        break;
+      }
+      if (true) {
+        continue;
+      }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasContinueUnless.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasContinueUnless.spvasm.expected.ir.msl
index cdbf128..41cad46 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasContinueUnless.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasContinueUnless.spvasm.expected.ir.msl
@@ -1,9 +1,28 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      if (false) {
+      } else {
+        break;
+      }
+      if (true) {
+      } else {
+        continue;
+      }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_If.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_If.spvasm.expected.ir.msl
index cdbf128..0a60e1a 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_If.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_If.spvasm.expected.ir.msl
@@ -1,9 +1,26 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      if (false) {
+      } else {
+        break;
+      }
+      if (true) {
+      }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_If_Break.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_If_Break.spvasm.expected.ir.msl
index cdbf128..be7a64d 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_If_Break.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_If_Break.spvasm.expected.ir.msl
@@ -1,9 +1,27 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      if (false) {
+      } else {
+        break;
+      }
+      if (true) {
+        break;
+      }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_If_Continue.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_If_Continue.spvasm.expected.ir.msl
index cdbf128..5d7fa76 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_If_Continue.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_If_Continue.spvasm.expected.ir.msl
@@ -1,9 +1,27 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      if (false) {
+      } else {
+        break;
+      }
+      if (true) {
+        continue;
+      }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_Switch.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_Switch.spvasm.expected.ir.msl
index cdbf128..43c9fd8 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_Switch.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_Switch.spvasm.expected.ir.msl
@@ -1,9 +1,38 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      if (false) {
+      } else {
+        break;
+      }
+      switch(42u) {
+        case 45u:
+        {
+          break;
+        }
+        case 40u:
+        {
+          break;
+        }
+        default:
+        {
+          break;
+        }
+      }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_Switch_CaseContinues.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_Switch_CaseContinues.spvasm.expected.ir.msl
index cdbf128..72755b4 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_Switch_CaseContinues.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_Switch_CaseContinues.spvasm.expected.ir.msl
@@ -1,9 +1,38 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      if (false) {
+      } else {
+        break;
+      }
+      switch(42u) {
+        case 45u:
+        {
+          break;
+        }
+        case 40u:
+        {
+          continue;
+        }
+        default:
+        {
+          break;
+        }
+      }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Continue_ContainsIf.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Continue_ContainsIf.spvasm.expected.ir.msl
index cdbf128..0a60e1a 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Continue_ContainsIf.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Continue_ContainsIf.spvasm.expected.ir.msl
@@ -1,9 +1,26 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      if (false) {
+      } else {
+        break;
+      }
+      if (true) {
+      }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Continue_HasBreakIf.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Continue_HasBreakIf.spvasm.expected.ir.msl
index cdbf128..65ae433 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Continue_HasBreakIf.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Continue_HasBreakIf.spvasm.expected.ir.msl
@@ -1,9 +1,28 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      if (false) {
+      } else {
+        break;
+      }
+      if true { break; }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+program_source:12:10: error: expected '(' after 'if'
+      if true { break; }
+         ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Continue_HasBreakUnless.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Continue_HasBreakUnless.spvasm.expected.ir.msl
index cdbf128..78425ed 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Continue_HasBreakUnless.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Continue_HasBreakUnless.spvasm.expected.ir.msl
@@ -1,9 +1,28 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      if (false) {
+      } else {
+        break;
+      }
+      if false { break; }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+program_source:12:10: error: expected '(' after 'if'
+      if false { break; }
+         ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Continue_Sequence.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Continue_Sequence.spvasm.expected.ir.msl
index cdbf128..8f0e2fb 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Continue_Sequence.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Continue_Sequence.spvasm.expected.ir.msl
@@ -1,9 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      if (false) {
+      } else {
+        break;
+      }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_HeaderHasBreakIf.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_HeaderHasBreakIf.spvasm.expected.ir.msl
index cdbf128..8f0e2fb 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_HeaderHasBreakIf.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_HeaderHasBreakIf.spvasm.expected.ir.msl
@@ -1,9 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      if (false) {
+      } else {
+        break;
+      }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_HeaderHasBreakUnless.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_HeaderHasBreakUnless.spvasm.expected.ir.msl
index cdbf128..f7e927c 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_HeaderHasBreakUnless.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_HeaderHasBreakUnless.spvasm.expected.ir.msl
@@ -1,9 +1,23 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      if (false) {
+        break;
+      }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop.spvasm.expected.ir.msl
index cdbf128..175cf2b 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop.spvasm.expected.ir.msl
@@ -1,9 +1,33 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      if (false) {
+      } else {
+        break;
+      }
+      {
+        while(true) {
+          if (true) {
+          } else {
+            break;
+          }
+          continue;
+        }
+      }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop_InnerBreak.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop_InnerBreak.spvasm.expected.ir.msl
index cdbf128..a9ee5984 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop_InnerBreak.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop_InnerBreak.spvasm.expected.ir.msl
@@ -1,9 +1,36 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      if (false) {
+      } else {
+        break;
+      }
+      {
+        while(true) {
+          if (true) {
+          } else {
+            break;
+          }
+          if (false) {
+            break;
+          }
+          continue;
+        }
+      }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop_InnerContinue.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop_InnerContinue.spvasm.expected.ir.msl
index cdbf128..b24dc6d 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop_InnerContinue.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop_InnerContinue.spvasm.expected.ir.msl
@@ -1,9 +1,37 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      if (false) {
+      } else {
+        break;
+      }
+      {
+        while(true) {
+          if (true) {
+          } else {
+            break;
+          }
+          if (false) {
+          } else {
+            break;
+          }
+          continue;
+        }
+      }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop_InnerContinueBreaks.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop_InnerContinueBreaks.spvasm.expected.ir.msl
index cdbf128..cc2c2b2 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop_InnerContinueBreaks.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop_InnerContinueBreaks.spvasm.expected.ir.msl
@@ -1,9 +1,37 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      if (false) {
+      } else {
+        break;
+      }
+      {
+        while(true) {
+          if (true) {
+          } else {
+            break;
+          }
+          if true { break; }
+          continue;
+        }
+      }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+program_source:18:14: error: expected '(' after 'if'
+          if true { break; }
+             ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_SingleBlock_Simple.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_SingleBlock_Simple.spvasm.expected.ir.msl
index cdbf128..8f0e2fb 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_SingleBlock_Simple.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_SingleBlock_Simple.spvasm.expected.ir.msl
@@ -1,9 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      if (false) {
+      } else {
+        break;
+      }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Nest_IfBreak_In_SwitchCase.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Nest_IfBreak_In_SwitchCase.spvasm.expected.ir.msl
index 2b8690e..5fc66c6 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Nest_IfBreak_In_SwitchCase.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Nest_IfBreak_In_SwitchCase.spvasm.expected.ir.msl
@@ -1,9 +1,33 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Switch
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  switch(42u) {
+    case 20u:
+    {
+      if (false) {
+        break;
+      }
+      break;
+    }
+    case 50u:
+    default:
+    {
+      if (false) {
+      } else {
+        break;
+      }
+      break;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Nest_If_Contains_If.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Nest_If_Contains_If.spvasm.expected.ir.msl
index 792ab03..6d4f650 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Nest_If_Contains_If.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Nest_If_Contains_If.spvasm.expected.ir.msl
@@ -1,9 +1,22 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  if (false) {
+    if (false) {
+    }
+  } else {
+    if (false) {
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Nest_If_In_SwitchCase.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Nest_If_In_SwitchCase.spvasm.expected.ir.msl
index 2b8690e..187f62f 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Nest_If_In_SwitchCase.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Nest_If_In_SwitchCase.spvasm.expected.ir.msl
@@ -1,9 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Switch
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  switch(42u) {
+    case 20u:
+    {
+      if (false) {
+      }
+      break;
+    }
+    case 50u:
+    default:
+    {
+      if (false) {
+      }
+      break;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_OneBlock.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_OneBlock.spvasm.expected.ir.msl
index 792ab03..fa708ac 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_OneBlock.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_OneBlock.spvasm.expected.ir.msl
@@ -1,9 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_ReorderSequence.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_ReorderSequence.spvasm.expected.ir.msl
index 792ab03..60a2ca8 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_ReorderSequence.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_ReorderSequence.spvasm.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  if (false) {
+  }
+  if (true) {
+    return;
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectConditionalBranchOrder.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectConditionalBranchOrder.spvasm.expected.ir.msl
index 792ab03..e83434a 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectConditionalBranchOrder.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectConditionalBranchOrder.spvasm.expected.ir.msl
@@ -1,9 +1,19 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  if (false) {
+  } else {
+    return;
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_SwitchOrderNaturallyReversed.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_SwitchOrderNaturallyReversed.spvasm.expected.ir.msl
index 2b8690e..b3c78bf 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_SwitchOrderNaturallyReversed.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_SwitchOrderNaturallyReversed.spvasm.expected.ir.msl
@@ -1,9 +1,29 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Switch
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  switch(42u) {
+    case 30u:
+    {
+      return;
+    }
+    case 20u:
+    {
+      break;
+    }
+    default:
+    {
+      break;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_SwitchWithDefaultOrderNaturallyReversed.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_SwitchWithDefaultOrderNaturallyReversed.spvasm.expected.ir.msl
index 2b8690e..b3c78bf 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_SwitchWithDefaultOrderNaturallyReversed.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_SwitchWithDefaultOrderNaturallyReversed.spvasm.expected.ir.msl
@@ -1,9 +1,29 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Switch
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  switch(42u) {
+    case 30u:
+    {
+      return;
+    }
+    case 20u:
+    {
+      break;
+    }
+    default:
+    {
+      break;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Switch_DefaultSameAsACase.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Switch_DefaultSameAsACase.spvasm.expected.ir.msl
index 2b8690e..5d0094e 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Switch_DefaultSameAsACase.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Switch_DefaultSameAsACase.spvasm.expected.ir.msl
@@ -1,9 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Switch
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  switch(42u) {
+    case 40u:
+    {
+      break;
+    }
+    case 20u:
+    {
+      break;
+    }
+    case 30u:
+    default:
+    {
+      break;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_TrueOnlyBranch.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_TrueOnlyBranch.spvasm.expected.ir.msl
index 792ab03..0282ee5 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_TrueOnlyBranch.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_TrueOnlyBranch.spvasm.expected.ir.msl
@@ -1,9 +1,17 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  if (false) {
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_UnreachableIsDeadEnd.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_UnreachableIsDeadEnd.spvasm.expected.ir.msl
index 792ab03..fa708ac 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_UnreachableIsDeadEnd.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_UnreachableIsDeadEnd.spvasm.expected.ir.msl
@@ -1,9 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_MultiBlock_LoopBreak_OnFalse.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_MultiBlock_LoopBreak_OnFalse.spvasm.expected.ir.msl
index efdd3b1..b8d2ef0 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_MultiBlock_LoopBreak_OnFalse.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_MultiBlock_LoopBreak_OnFalse.spvasm.expected.ir.msl
@@ -1,9 +1,27 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  var_1 = 0u;
+  {
+    while(true) {
+      var_1 = 1u;
+      if true { break; }
+      continue;
+    }
+  }
+  var_1 = 5u;
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+program_source:10:10: error: expected '(' after 'if'
+      if true { break; }
+         ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_MultiBlock_LoopBreak_OnTrue.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_MultiBlock_LoopBreak_OnTrue.spvasm.expected.ir.msl
index efdd3b1..83119f8 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_MultiBlock_LoopBreak_OnTrue.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_MultiBlock_LoopBreak_OnTrue.spvasm.expected.ir.msl
@@ -1,9 +1,27 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  var_1 = 0u;
+  {
+    while(true) {
+      var_1 = 1u;
+      if false { break; }
+      continue;
+    }
+  }
+  var_1 = 5u;
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+program_source:10:10: error: expected '(' after 'if'
+      if false { break; }
+         ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_SingleBlock_LoopBreak_OnFalse.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_SingleBlock_LoopBreak_OnFalse.spvasm.expected.ir.msl
index efdd3b1..78df30e 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_SingleBlock_LoopBreak_OnFalse.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_SingleBlock_LoopBreak_OnFalse.spvasm.expected.ir.msl
@@ -1,9 +1,27 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  var_1 = 0u;
+  {
+    while(true) {
+      var_1 = 1u;
+      if (false) {
+      } else {
+        break;
+      }
+      continue;
+    }
+  }
+  var_1 = 5u;
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_SingleBlock_LoopBreak_OnTrue.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_SingleBlock_LoopBreak_OnTrue.spvasm.expected.ir.msl
index efdd3b1..bb63b4d 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_SingleBlock_LoopBreak_OnTrue.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_SingleBlock_LoopBreak_OnTrue.spvasm.expected.ir.msl
@@ -1,9 +1,26 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  var_1 = 0u;
+  {
+    while(true) {
+      var_1 = 1u;
+      if (false) {
+        break;
+      }
+      continue;
+    }
+  }
+  var_1 = 5u;
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Forward_Forward_Same.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Forward_Forward_Same.spvasm.expected.ir.msl
index efdd3b1..325db3e 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Forward_Forward_Same.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Forward_Forward_Same.spvasm.expected.ir.msl
@@ -1,9 +1,17 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  var_1 = 1u;
+  var_1 = 2u;
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_IfBreak_IfBreak_Same.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_IfBreak_IfBreak_Same.spvasm.expected.ir.msl
index efdd3b1..92775e8 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_IfBreak_IfBreak_Same.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_IfBreak_IfBreak_Same.spvasm.expected.ir.msl
@@ -1,9 +1,19 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  var_1 = 0u;
+  if (false) {
+  }
+  var_1 = 5u;
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_Continue_OnFalse.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_Continue_OnFalse.spvasm.expected.ir.msl
index efdd3b1..ac791f1 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_Continue_OnFalse.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_Continue_OnFalse.spvasm.expected.ir.msl
@@ -1,9 +1,34 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  var_1 = 0u;
+  {
+    while(true) {
+      var_1 = 1u;
+      if (true) {
+        var_1 = 2u;
+        if (false) {
+          break;
+        } else {
+          var_1 = 4u;
+          continue;
+        }
+      }
+      var_1 = 3u;
+      var_1 = 4u;
+      continue;
+    }
+  }
+  var_1 = 5u;
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_Continue_OnTrue.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_Continue_OnTrue.spvasm.expected.ir.msl
index efdd3b1..0ba35db 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_Continue_OnTrue.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_Continue_OnTrue.spvasm.expected.ir.msl
@@ -1,9 +1,34 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  var_1 = 0u;
+  {
+    while(true) {
+      var_1 = 1u;
+      if (true) {
+        var_1 = 2u;
+        if (false) {
+          var_1 = 4u;
+          continue;
+        } else {
+          break;
+        }
+      }
+      var_1 = 3u;
+      var_1 = 4u;
+      continue;
+    }
+  }
+  var_1 = 5u;
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_Forward_OnFalse.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_Forward_OnFalse.spvasm.expected.ir.msl
index efdd3b1..f11023d 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_Forward_OnFalse.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_Forward_OnFalse.spvasm.expected.ir.msl
@@ -1,9 +1,29 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  var_1 = 0u;
+  {
+    while(true) {
+      var_1 = 1u;
+      var_1 = 2u;
+      if (false) {
+        break;
+      }
+      var_1 = 3u;
+      var_1 = 4u;
+      continue;
+    }
+  }
+  var_1 = 5u;
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_Forward_OnTrue.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_Forward_OnTrue.spvasm.expected.ir.msl
index efdd3b1..c382531 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_Forward_OnTrue.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_Forward_OnTrue.spvasm.expected.ir.msl
@@ -1,9 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  var_1 = 0u;
+  {
+    while(true) {
+      var_1 = 1u;
+      var_1 = 2u;
+      if (false) {
+      } else {
+        break;
+      }
+      var_1 = 3u;
+      var_1 = 4u;
+      continue;
+    }
+  }
+  var_1 = 5u;
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_MultiBlock_LoopBreak.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_MultiBlock_LoopBreak.spvasm.expected.ir.msl
index efdd3b1..991b423 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_MultiBlock_LoopBreak.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_MultiBlock_LoopBreak.spvasm.expected.ir.msl
@@ -1,9 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  var_1 = 0u;
+  {
+    while(true) {
+      var_1 = 1u;
+      var_1 = 2u;
+      break;
+    }
+  }
+  var_1 = 5u;
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_SingleBlock_LoopBreak.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_SingleBlock_LoopBreak.spvasm.expected.ir.msl
index efdd3b1..369d438 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_SingleBlock_LoopBreak.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_SingleBlock_LoopBreak.spvasm.expected.ir.msl
@@ -1,9 +1,23 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  var_1 = 0u;
+  {
+    while(true) {
+      var_1 = 1u;
+      break;
+    }
+  }
+  var_1 = 5u;
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Forward_OnFalse.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Forward_OnFalse.spvasm.expected.ir.msl
index efdd3b1..1920aa9 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Forward_OnFalse.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Forward_OnFalse.spvasm.expected.ir.msl
@@ -1,9 +1,32 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  var_1 = 1u;
+  switch(42u) {
+    case 20u:
+    {
+      var_1 = 20u;
+      if (false) {
+        break;
+      }
+      var_1 = 30u;
+      break;
+    }
+    default:
+    {
+      break;
+    }
+  }
+  var_1 = 8u;
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Forward_OnTrue.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Forward_OnTrue.spvasm.expected.ir.msl
index efdd3b1..78b9430 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Forward_OnTrue.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Forward_OnTrue.spvasm.expected.ir.msl
@@ -1,9 +1,33 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  var_1 = 1u;
+  switch(42u) {
+    case 20u:
+    {
+      var_1 = 20u;
+      if (false) {
+      } else {
+        break;
+      }
+      var_1 = 30u;
+      break;
+    }
+    default:
+    {
+      break;
+    }
+  }
+  var_1 = 8u;
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_SwitchBreak_LastInCase.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_SwitchBreak_LastInCase.spvasm.expected.ir.msl
index efdd3b1..608fd45 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_SwitchBreak_LastInCase.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_SwitchBreak_LastInCase.spvasm.expected.ir.msl
@@ -1,9 +1,28 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  var_1 = 1u;
+  switch(42u) {
+    case 20u:
+    {
+      var_1 = 20u;
+      break;
+    }
+    default:
+    {
+      break;
+    }
+  }
+  var_1 = 7u;
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_SwitchBreak_NotLastInCase.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_SwitchBreak_NotLastInCase.spvasm.expected.ir.msl
index efdd3b1..847475b 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_SwitchBreak_NotLastInCase.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_SwitchBreak_NotLastInCase.spvasm.expected.ir.msl
@@ -1,9 +1,33 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  var_1 = 1u;
+  switch(42u) {
+    case 20u:
+    {
+      var_1 = 20u;
+      if (false) {
+        var_1 = 40u;
+        break;
+      }
+      var_1 = 50u;
+      break;
+    }
+    default:
+    {
+      break;
+    }
+  }
+  var_1 = 7u;
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_Forward.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_Forward.spvasm.expected.ir.msl
index efdd3b1..325db3e 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_Forward.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_Forward.spvasm.expected.ir.msl
@@ -1,9 +1,17 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  var_1 = 1u;
+  var_1 = 2u;
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_IfBreak_FromElse.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_IfBreak_FromElse.spvasm.expected.ir.msl
index efdd3b1..f413dff 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_IfBreak_FromElse.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_IfBreak_FromElse.spvasm.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  if (false) {
+  } else {
+    var_1 = 1u;
+  }
+  var_1 = 2u;
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_IfBreak_FromThen.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_IfBreak_FromThen.spvasm.expected.ir.msl
index efdd3b1..6c47222 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_IfBreak_FromThen.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_IfBreak_FromThen.spvasm.expected.ir.msl
@@ -1,9 +1,19 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  if (false) {
+    var_1 = 1u;
+  }
+  var_1 = 2u;
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopBreak_MultiBlockLoop_FromBody.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopBreak_MultiBlockLoop_FromBody.spvasm.expected.ir.msl
index cdbf128..c2ca74b 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopBreak_MultiBlockLoop_FromBody.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopBreak_MultiBlockLoop_FromBody.spvasm.expected.ir.msl
@@ -1,9 +1,21 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      var_1 = 1u;
+      break;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopBreak_MultiBlockLoop_FromContinueConstructEnd_Conditional.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopBreak_MultiBlockLoop_FromContinueConstructEnd_Conditional.spvasm.expected.ir.msl
index cdbf128..048f51b 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopBreak_MultiBlockLoop_FromContinueConstructEnd_Conditional.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopBreak_MultiBlockLoop_FromContinueConstructEnd_Conditional.spvasm.expected.ir.msl
@@ -1,9 +1,25 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      var_1 = 1u;
+      if true { break; }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+program_source:9:10: error: expected '(' after 'if'
+      if true { break; }
+         ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_SwitchBreak_LastInCase.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_SwitchBreak_LastInCase.spvasm.expected.ir.msl
index efdd3b1..608fd45 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_SwitchBreak_LastInCase.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_SwitchBreak_LastInCase.spvasm.expected.ir.msl
@@ -1,9 +1,28 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  var_1 = 1u;
+  switch(42u) {
+    case 20u:
+    {
+      var_1 = 20u;
+      break;
+    }
+    default:
+    {
+      break;
+    }
+  }
+  var_1 = 7u;
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_SwitchBreak_NotLastInCase.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_SwitchBreak_NotLastInCase.spvasm.expected.ir.msl
index efdd3b1..847475b 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_SwitchBreak_NotLastInCase.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_SwitchBreak_NotLastInCase.spvasm.expected.ir.msl
@@ -1,9 +1,33 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  var_1 = 1u;
+  switch(42u) {
+    case 20u:
+    {
+      var_1 = 20u;
+      if (false) {
+        var_1 = 40u;
+        break;
+      }
+      var_1 = 50u;
+      break;
+    }
+    default:
+    {
+      break;
+    }
+  }
+  var_1 = 7u;
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_FalseBranch_LoopBreak.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_FalseBranch_LoopBreak.spvasm.expected.ir.msl
index cdbf128..8f0e2fb 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_FalseBranch_LoopBreak.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_FalseBranch_LoopBreak.spvasm.expected.ir.msl
@@ -1,9 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      if (false) {
+      } else {
+        break;
+      }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_FalseBranch_SwitchBreak.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_FalseBranch_SwitchBreak.spvasm.expected.ir.msl
index 2b8690e..45c9ba6 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_FalseBranch_SwitchBreak.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_FalseBranch_SwitchBreak.spvasm.expected.ir.msl
@@ -1,9 +1,29 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Switch
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  switch(20u) {
+    case 20u:
+    {
+      if (false) {
+      } else {
+        break;
+      }
+      break;
+    }
+    default:
+    {
+      break;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfBreak_FromElse_ForwardWithinElse.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfBreak_FromElse_ForwardWithinElse.spvasm.expected.ir.msl
index efdd3b1..7949a67 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfBreak_FromElse_ForwardWithinElse.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfBreak_FromElse_ForwardWithinElse.spvasm.expected.ir.msl
@@ -1,9 +1,33 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  var_1 = 1u;
+  bool guard10 = true;
+  if (false) {
+    var_1 = 2u;
+    guard10 = false;
+  } else {
+    if (guard10) {
+      var_1 = 3u;
+      if (true) {
+        guard10 = false;
+      }
+      if (guard10) {
+        var_1 = 4u;
+        guard10 = false;
+      }
+    }
+  }
+  var_1 = 5u;
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfBreak_FromThenWithForward_FromElseWithForward_AlsoPremerge.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfBreak_FromThenWithForward_FromElseWithForward_AlsoPremerge.spvasm.expected.ir.msl
index efdd3b1..9da2f13 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfBreak_FromThenWithForward_FromElseWithForward_AlsoPremerge.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfBreak_FromThenWithForward_FromElseWithForward_AlsoPremerge.spvasm.expected.ir.msl
@@ -1,9 +1,49 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  var_1 = 1u;
+  bool guard10 = true;
+  if (false) {
+    var_1 = 2u;
+    if (true) {
+    } else {
+      guard10 = false;
+    }
+    if (guard10) {
+      var_1 = 3u;
+    }
+  } else {
+    if (guard10) {
+      var_1 = 4u;
+      if (true) {
+        guard10 = false;
+      }
+      if (guard10) {
+        var_1 = 5u;
+      }
+    }
+  }
+  if (guard10) {
+    var_1 = 6u;
+    if (false) {
+    } else {
+      guard10 = false;
+    }
+    if (guard10) {
+      var_1 = 7u;
+      guard10 = false;
+    }
+  }
+  var_1 = 8u;
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfBreak_FromThen_ForwardWithinThen.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfBreak_FromThen_ForwardWithinThen.spvasm.expected.ir.msl
index efdd3b1..73224a6 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfBreak_FromThen_ForwardWithinThen.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfBreak_FromThen_ForwardWithinThen.spvasm.expected.ir.msl
@@ -1,9 +1,33 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  var_1 = 1u;
+  bool guard10 = true;
+  if (false) {
+    var_1 = 2u;
+    if (true) {
+      guard10 = false;
+    }
+    if (guard10) {
+      var_1 = 3u;
+      guard10 = false;
+    }
+  } else {
+    if (guard10) {
+      var_1 = 4u;
+      guard10 = false;
+    }
+  }
+  var_1 = 5u;
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfSelection_TrueBranch_LoopBreak.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfSelection_TrueBranch_LoopBreak.spvasm.expected.ir.msl
index cdbf128..f7e927c 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfSelection_TrueBranch_LoopBreak.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfSelection_TrueBranch_LoopBreak.spvasm.expected.ir.msl
@@ -1,9 +1,23 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      if (false) {
+        break;
+      }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Else_Premerge.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Else_Premerge.spvasm.expected.ir.msl
index efdd3b1..e95dde7 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Else_Premerge.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Else_Premerge.spvasm.expected.ir.msl
@@ -1,9 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  var_1 = 0u;
+  if (false) {
+  } else {
+    var_1 = 1u;
+  }
+  if (true) {
+    var_1 = 3u;
+  }
+  var_1 = 999u;
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Empty.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Empty.spvasm.expected.ir.msl
index 792ab03..0282ee5 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Empty.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Empty.spvasm.expected.ir.msl
@@ -1,9 +1,17 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  if (false) {
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Nest_If.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Nest_If.spvasm.expected.ir.msl
index efdd3b1..01230eb 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Nest_If.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Nest_If.spvasm.expected.ir.msl
@@ -1,9 +1,31 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  var_1 = 0u;
+  if (false) {
+    var_1 = 1u;
+    if (true) {
+      var_1 = 2u;
+    }
+    var_1 = 3u;
+  } else {
+    var_1 = 4u;
+    if (true) {
+    } else {
+      var_1 = 5u;
+    }
+    var_1 = 6u;
+  }
+  var_1 = 999u;
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_NoThen_Else.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_NoThen_Else.spvasm.expected.ir.msl
index efdd3b1..28528c9 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_NoThen_Else.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_NoThen_Else.spvasm.expected.ir.msl
@@ -1,9 +1,21 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  var_1 = 0u;
+  if (false) {
+  } else {
+    var_1 = 1u;
+  }
+  var_1 = 999u;
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_Else.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_Else.spvasm.expected.ir.msl
index efdd3b1..7c67b8b 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_Else.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_Else.spvasm.expected.ir.msl
@@ -1,9 +1,22 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  var_1 = 0u;
+  if (false) {
+    var_1 = 1u;
+  } else {
+    var_1 = 2u;
+  }
+  var_1 = 999u;
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_Else_Premerge.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_Else_Premerge.spvasm.expected.ir.msl
index efdd3b1..7c82786 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_Else_Premerge.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_Else_Premerge.spvasm.expected.ir.msl
@@ -1,9 +1,25 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  var_1 = 0u;
+  if (false) {
+    var_1 = 1u;
+  } else {
+    var_1 = 2u;
+  }
+  if (true) {
+    var_1 = 3u;
+  }
+  var_1 = 999u;
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_NoElse.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_NoElse.spvasm.expected.ir.msl
index efdd3b1..130801e 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_NoElse.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_NoElse.spvasm.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  var_1 = 0u;
+  if (false) {
+    var_1 = 1u;
+  }
+  var_1 = 999u;
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_Premerge.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_Premerge.spvasm.expected.ir.msl
index efdd3b1..24f931f 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_Premerge.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_Premerge.spvasm.expected.ir.msl
@@ -1,9 +1,23 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  var_1 = 0u;
+  if (false) {
+    var_1 = 1u;
+  }
+  if (true) {
+    var_1 = 3u;
+  }
+  var_1 = 999u;
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Kill_InsideIf.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Kill_InsideIf.spvasm.expected.ir.msl
index 792ab03..f2acce2 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Kill_InsideIf.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Kill_InsideIf.spvasm.expected.ir.msl
@@ -1,9 +1,26 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+thread bool continue_execution = true;
+void main_1() {
+  if (false) {
+    continue_execution = false;
+  }
+  continue_execution = false;
+}
+fragment void tint_symbol() {
+  main_1();
+  if (!(continue_execution)) {
+    discard_fragment();
+  }
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+program_source:5:13: error: program scope variable must reside in constant address space
+thread bool continue_execution = true;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Kill_TopLevel.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Kill_TopLevel.spvasm.expected.ir.msl
index 792ab03..3efab94 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Kill_TopLevel.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Kill_TopLevel.spvasm.expected.ir.msl
@@ -1,9 +1,23 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+thread bool continue_execution = true;
+void main_1() {
+  continue_execution = false;
+}
+fragment void tint_symbol() {
+  main_1();
+  if (!(continue_execution)) {
+    discard_fragment();
+  }
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+program_source:5:13: error: program scope variable must reside in constant address space
+thread bool continue_execution = true;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyAlwaysBreaks.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyAlwaysBreaks.spvasm.expected.ir.msl
index cdbf128..c2ca74b 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyAlwaysBreaks.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyAlwaysBreaks.spvasm.expected.ir.msl
@@ -1,9 +1,21 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      var_1 = 1u;
+      break;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyConditionallyBreaks_FromFalse.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyConditionallyBreaks_FromFalse.spvasm.expected.ir.msl
index cdbf128..c4b5587 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyConditionallyBreaks_FromFalse.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyConditionallyBreaks_FromFalse.spvasm.expected.ir.msl
@@ -1,9 +1,26 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      var_1 = 1u;
+      if (false) {
+      } else {
+        break;
+      }
+      var_1 = 2u;
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyConditionallyBreaks_FromFalse_Early.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyConditionallyBreaks_FromFalse_Early.spvasm.expected.ir.msl
index cdbf128..4a68870 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyConditionallyBreaks_FromFalse_Early.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyConditionallyBreaks_FromFalse_Early.spvasm.expected.ir.msl
@@ -1,9 +1,27 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      var_1 = 1u;
+      if (false) {
+      } else {
+        break;
+      }
+      var_1 = 3u;
+      var_1 = 2u;
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyConditionallyBreaks_FromTrue.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyConditionallyBreaks_FromTrue.spvasm.expected.ir.msl
index cdbf128..fc8bc94 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyConditionallyBreaks_FromTrue.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyConditionallyBreaks_FromTrue.spvasm.expected.ir.msl
@@ -1,9 +1,25 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      var_1 = 1u;
+      if (false) {
+        break;
+      }
+      var_1 = 2u;
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyConditionallyBreaks_FromTrue_Early.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyConditionallyBreaks_FromTrue_Early.spvasm.expected.ir.msl
index cdbf128..65067ed 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyConditionallyBreaks_FromTrue_Early.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyConditionallyBreaks_FromTrue_Early.spvasm.expected.ir.msl
@@ -1,9 +1,26 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      var_1 = 1u;
+      if (false) {
+        break;
+      }
+      var_1 = 3u;
+      var_1 = 2u;
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_FalseToBody_TrueBreaks.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_FalseToBody_TrueBreaks.spvasm.expected.ir.msl
index cdbf128..6b65e15 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_FalseToBody_TrueBreaks.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_FalseToBody_TrueBreaks.spvasm.expected.ir.msl
@@ -1,9 +1,28 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      var_1 = 1u;
+      if (false) {
+      } else {
+        break;
+      }
+      var_1 = 2u;
+      var_1 = 3u;
+      continue;
+    }
+  }
+  var_1 = 4u;
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Never.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Never.spvasm.expected.ir.msl
index cdbf128..82ff151 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Never.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Never.spvasm.expected.ir.msl
@@ -1,9 +1,22 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      var_1 = 1u;
+      break;
+    }
+  }
+  var_1 = 3u;
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_FalseBackedge.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_FalseBackedge.spvasm.expected.ir.msl
index efdd3b1..a0d777f 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_FalseBackedge.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_FalseBackedge.spvasm.expected.ir.msl
@@ -1,9 +1,26 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  var_1 = 0u;
+  {
+    while(true) {
+      var_1 = 1u;
+      if (false) {
+        break;
+      }
+      continue;
+    }
+  }
+  var_1 = 999u;
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_TrueBackedge.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_TrueBackedge.spvasm.expected.ir.msl
index efdd3b1..88c1d20 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_TrueBackedge.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_TrueBackedge.spvasm.expected.ir.msl
@@ -1,9 +1,27 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  var_1 = 0u;
+  {
+    while(true) {
+      var_1 = 1u;
+      if (false) {
+      } else {
+        break;
+      }
+      continue;
+    }
+  }
+  var_1 = 999u;
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_TrueToBody_FalseBreaks.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_TrueToBody_FalseBreaks.spvasm.expected.ir.msl
index cdbf128..6b65e15 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_TrueToBody_FalseBreaks.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_TrueToBody_FalseBreaks.spvasm.expected.ir.msl
@@ -1,9 +1,28 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      var_1 = 1u;
+      if (false) {
+      } else {
+        break;
+      }
+      var_1 = 2u;
+      var_1 = 3u;
+      continue;
+    }
+  }
+  var_1 = 4u;
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_ReturnValue_InsideIf.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_ReturnValue_InsideIf.spvasm.expected.ir.msl
index 792ab03..1016bf8 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_ReturnValue_InsideIf.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_ReturnValue_InsideIf.spvasm.expected.ir.msl
@@ -1,9 +1,25 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+uint x_200() {
+  if (false) {
+    return 2u;
+  }
+  return 3u;
+}
+void main_1() {
+  uint const x_11 = x_200();
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+program_source:12:14: warning: unused variable 'x_11' [-Wunused-variable]
+  uint const x_11 = x_200();
+             ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_ReturnValue_Loop.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_ReturnValue_Loop.spvasm.expected.ir.msl
index cdbf128..f5d433e 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_ReturnValue_Loop.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_ReturnValue_Loop.spvasm.expected.ir.msl
@@ -1,9 +1,27 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+uint x_200() {
+  {
+    while(true) {
+      return 2u;
+    }
+  }
+  /* unreachable */
+}
+void main_1() {
+  uint const x_11 = x_200();
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+program_source:14:14: warning: unused variable 'x_11' [-Wunused-variable]
+  uint const x_11 = x_200();
+             ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_ReturnValue_TopLevel.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_ReturnValue_TopLevel.spvasm.expected.ir.msl
index 792ab03..104a428 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_ReturnValue_TopLevel.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_ReturnValue_TopLevel.spvasm.expected.ir.msl
@@ -1,9 +1,22 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+uint x_200() {
+  return 2u;
+}
+void main_1() {
+  uint const x_11 = x_200();
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+program_source:9:14: warning: unused variable 'x_11' [-Wunused-variable]
+  uint const x_11 = x_200();
+             ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Return_InsideIf.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Return_InsideIf.spvasm.expected.ir.msl
index 792ab03..e5a47f3 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Return_InsideIf.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Return_InsideIf.spvasm.expected.ir.msl
@@ -1,9 +1,18 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  if (false) {
+    return;
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Return_InsideLoop.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Return_InsideLoop.spvasm.expected.ir.msl
index cdbf128..c857a56 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Return_InsideLoop.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Return_InsideLoop.spvasm.expected.ir.msl
@@ -1,9 +1,21 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      return;
+    }
+  }
+  /* unreachable */
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Return_TopLevel.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Return_TopLevel.spvasm.expected.ir.msl
index 792ab03..fa708ac 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Return_TopLevel.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Return_TopLevel.spvasm.expected.ir.msl
@@ -1,9 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_Case_SintValue.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_Case_SintValue.spvasm.expected.ir.msl
index efdd3b1..1f6278e 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_Case_SintValue.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_Case_SintValue.spvasm.expected.ir.msl
@@ -1,9 +1,38 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  var_1 = 1u;
+  switch(42) {
+    case -294967296:
+    {
+      var_1 = 40u;
+      break;
+    }
+    case 2000000000:
+    {
+      var_1 = 30u;
+      break;
+    }
+    case 20:
+    {
+      var_1 = 20u;
+      break;
+    }
+    default:
+    {
+      break;
+    }
+  }
+  var_1 = 7u;
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_Case_UintValue.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_Case_UintValue.spvasm.expected.ir.msl
index efdd3b1..46877d5 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_Case_UintValue.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_Case_UintValue.spvasm.expected.ir.msl
@@ -1,9 +1,38 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  var_1 = 1u;
+  switch(42u) {
+    case 50u:
+    {
+      var_1 = 40u;
+      break;
+    }
+    case 2000000000u:
+    {
+      var_1 = 30u;
+      break;
+    }
+    case 20u:
+    {
+      var_1 = 20u;
+      break;
+    }
+    default:
+    {
+      break;
+    }
+  }
+  var_1 = 7u;
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsCase_NoDupCases.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsCase_NoDupCases.spvasm.expected.ir.msl
index efdd3b1..d06442a 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsCase_NoDupCases.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsCase_NoDupCases.spvasm.expected.ir.msl
@@ -1,9 +1,34 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  var_1 = 1u;
+  switch(42u) {
+    case 40u:
+    {
+      var_1 = 40u;
+      break;
+    }
+    case 20u:
+    {
+      var_1 = 20u;
+      break;
+    }
+    default:
+    {
+      var_1 = 30u;
+      break;
+    }
+  }
+  var_1 = 7u;
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsCase_WithDupCase.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsCase_WithDupCase.spvasm.expected.ir.msl
index efdd3b1..d03b891 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsCase_WithDupCase.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsCase_WithDupCase.spvasm.expected.ir.msl
@@ -1,9 +1,35 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  var_1 = 1u;
+  switch(42u) {
+    case 40u:
+    {
+      var_1 = 40u;
+      break;
+    }
+    case 20u:
+    {
+      var_1 = 20u;
+      break;
+    }
+    case 30u:
+    default:
+    {
+      var_1 = 30u;
+      break;
+    }
+  }
+  var_1 = 7u;
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_CasesWithDup.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_CasesWithDup.spvasm.expected.ir.msl
index efdd3b1..f540627 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_CasesWithDup.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_CasesWithDup.spvasm.expected.ir.msl
@@ -1,9 +1,34 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  var_1 = 1u;
+  switch(42u) {
+    case 30u:
+    {
+      var_1 = 30u;
+      break;
+    }
+    case 20u:
+    case 40u:
+    {
+      var_1 = 20u;
+      break;
+    }
+    default:
+    {
+      break;
+    }
+  }
+  var_1 = 7u;
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_NoCases.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_NoCases.spvasm.expected.ir.msl
index efdd3b1..83e03bc 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_NoCases.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_NoCases.spvasm.expected.ir.msl
@@ -1,9 +1,23 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  var_1 = 1u;
+  switch(42u) {
+    default:
+    {
+      break;
+    }
+  }
+  var_1 = 7u;
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_OneCase.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_OneCase.spvasm.expected.ir.msl
index efdd3b1..608fd45 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_OneCase.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_OneCase.spvasm.expected.ir.msl
@@ -1,9 +1,28 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  var_1 = 1u;
+  switch(42u) {
+    case 20u:
+    {
+      var_1 = 20u;
+      break;
+    }
+    default:
+    {
+      break;
+    }
+  }
+  var_1 = 7u;
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_TwoCases.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_TwoCases.spvasm.expected.ir.msl
index efdd3b1..296ff46 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_TwoCases.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_TwoCases.spvasm.expected.ir.msl
@@ -1,9 +1,33 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  var_1 = 1u;
+  switch(42u) {
+    case 30u:
+    {
+      var_1 = 30u;
+      break;
+    }
+    case 20u:
+    {
+      var_1 = 20u;
+      break;
+    }
+    default:
+    {
+      break;
+    }
+  }
+  var_1 = 7u;
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_TrueBranch_SwitchBreak.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_TrueBranch_SwitchBreak.spvasm.expected.ir.msl
index 2b8690e..55f028d 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_TrueBranch_SwitchBreak.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_TrueBranch_SwitchBreak.spvasm.expected.ir.msl
@@ -1,9 +1,28 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Switch
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  switch(20u) {
+    case 20u:
+    {
+      if (false) {
+        break;
+      }
+      break;
+    }
+    default:
+    {
+      break;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_InNonVoidFunction.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_InNonVoidFunction.spvasm.expected.ir.msl
index 792ab03..3733ffd 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_InNonVoidFunction.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_InNonVoidFunction.spvasm.expected.ir.msl
@@ -1,9 +1,22 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+uint x_200() {
+  return 0u;
+}
+void main_1() {
+  uint const x_11 = x_200();
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+program_source:9:14: warning: unused variable 'x_11' [-Wunused-variable]
+  uint const x_11 = x_200();
+             ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_InsideIf.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_InsideIf.spvasm.expected.ir.msl
index 792ab03..e5a47f3 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_InsideIf.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_InsideIf.spvasm.expected.ir.msl
@@ -1,9 +1,18 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  if (false) {
+    return;
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_InsideLoop.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_InsideLoop.spvasm.expected.ir.msl
index cdbf128..c857a56 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_InsideLoop.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_InsideLoop.spvasm.expected.ir.msl
@@ -1,9 +1,21 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      return;
+    }
+  }
+  /* unreachable */
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_TopLevel.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_TopLevel.spvasm.expected.ir.msl
index 792ab03..fa708ac 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_TopLevel.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_TopLevel.spvasm.expected.ir.msl
@@ -1,9 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_ElseOnly.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_ElseOnly.spvasm.expected.ir.msl
index 792ab03..0282ee5 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_ElseOnly.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_ElseOnly.spvasm.expected.ir.msl
@@ -1,9 +1,17 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  if (false) {
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_FalseBranch_LoopBreak_Ok.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_FalseBranch_LoopBreak_Ok.spvasm.expected.ir.msl
index cdbf128..8f0e2fb 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_FalseBranch_LoopBreak_Ok.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_FalseBranch_LoopBreak_Ok.spvasm.expected.ir.msl
@@ -1,9 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      if (false) {
+      } else {
+        break;
+      }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_FalseBranch_SwitchBreak_Ok.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_FalseBranch_SwitchBreak_Ok.spvasm.expected.ir.msl
index 2b8690e..45c9ba6 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_FalseBranch_SwitchBreak_Ok.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_FalseBranch_SwitchBreak_Ok.spvasm.expected.ir.msl
@@ -1,9 +1,29 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Switch
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  switch(20u) {
+    case 20u:
+    {
+      if (false) {
+      } else {
+        break;
+      }
+      break;
+    }
+    default:
+    {
+      break;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_IfOnly.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_IfOnly.spvasm.expected.ir.msl
index 792ab03..0282ee5 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_IfOnly.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_IfOnly.spvasm.expected.ir.msl
@@ -1,9 +1,17 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  if (false) {
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_NoIf.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_NoIf.spvasm.expected.ir.msl
index 792ab03..fa708ac 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_NoIf.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_NoIf.spvasm.expected.ir.msl
@@ -1,9 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Premerge_ElseDirectToThen.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Premerge_ElseDirectToThen.spvasm.expected.ir.msl
index 792ab03..512d8bf 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Premerge_ElseDirectToThen.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Premerge_ElseDirectToThen.spvasm.expected.ir.msl
@@ -1,9 +1,19 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  if (false) {
+  }
+  if (true) {
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Premerge_Simple.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Premerge_Simple.spvasm.expected.ir.msl
index 792ab03..512d8bf 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Premerge_Simple.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Premerge_Simple.spvasm.expected.ir.msl
@@ -1,9 +1,19 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  if (false) {
+  }
+  if (true) {
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Premerge_ThenDirectToElse.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Premerge_ThenDirectToElse.spvasm.expected.ir.msl
index 792ab03..512d8bf 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Premerge_ThenDirectToElse.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Premerge_ThenDirectToElse.spvasm.expected.ir.msl
@@ -1,9 +1,19 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  if (false) {
+  }
+  if (true) {
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Regardless.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Regardless.spvasm.expected.ir.msl
index 792ab03..0282ee5 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Regardless.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Regardless.spvasm.expected.ir.msl
@@ -1,9 +1,17 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  if (false) {
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_ThenElse.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_ThenElse.spvasm.expected.ir.msl
index 792ab03..0282ee5 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_ThenElse.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_ThenElse.spvasm.expected.ir.msl
@@ -1,9 +1,17 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  if (false) {
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_TrueBranch_LoopBreak_Ok.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_TrueBranch_LoopBreak_Ok.spvasm.expected.ir.msl
index cdbf128..f7e927c 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_TrueBranch_LoopBreak_Ok.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_TrueBranch_LoopBreak_Ok.spvasm.expected.ir.msl
@@ -1,9 +1,23 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      if (false) {
+        break;
+      }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_TrueBranch_SwitchBreak_Ok.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_TrueBranch_SwitchBreak_Ok.spvasm.expected.ir.msl
index 2b8690e..55f028d 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_TrueBranch_SwitchBreak_Ok.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_TrueBranch_SwitchBreak_Ok.spvasm.expected.ir.msl
@@ -1,9 +1,28 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Switch
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  switch(20u) {
+    case 20u:
+    {
+      if (false) {
+        break;
+      }
+      break;
+    }
+    default:
+    {
+      break;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_CaseIsDefault.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_CaseIsDefault.spvasm.expected.ir.msl
index 2b8690e..9202ead 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_CaseIsDefault.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_CaseIsDefault.spvasm.expected.ir.msl
@@ -1,9 +1,22 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Switch
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  switch(42u) {
+    case 200u:
+    default:
+    {
+      break;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_CaseIsNotDefault.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_CaseIsNotDefault.spvasm.expected.ir.msl
index 2b8690e..2aae9b4 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_CaseIsNotDefault.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_CaseIsNotDefault.spvasm.expected.ir.msl
@@ -1,9 +1,25 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Switch
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  switch(42u) {
+    case 200u:
+    {
+      break;
+    }
+    default:
+    {
+      break;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_DefaultIsMerge.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_DefaultIsMerge.spvasm.expected.ir.msl
index 2b8690e..c611a2b 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_DefaultIsMerge.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_DefaultIsMerge.spvasm.expected.ir.msl
@@ -1,9 +1,25 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Switch
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  switch(42u) {
+    case 20u:
+    {
+      break;
+    }
+    default:
+    {
+      break;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_DefaultIsNotMerge.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_DefaultIsNotMerge.spvasm.expected.ir.msl
index 2b8690e..c611a2b 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_DefaultIsNotMerge.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_DefaultIsNotMerge.spvasm.expected.ir.msl
@@ -1,9 +1,25 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Switch
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  switch(42u) {
+    case 20u:
+    {
+      break;
+    }
+    default:
+    {
+      break;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_ManyValuesWithSameCase.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_ManyValuesWithSameCase.spvasm.expected.ir.msl
index 2b8690e..4dc3242 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_ManyValuesWithSameCase.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_ManyValuesWithSameCase.spvasm.expected.ir.msl
@@ -1,9 +1,26 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Switch
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  switch(42u) {
+    case 200u:
+    case 300u:
+    {
+      break;
+    }
+    default:
+    {
+      break;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_NoSwitch.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_NoSwitch.spvasm.expected.ir.msl
index 792ab03..fa708ac 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_NoSwitch.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_NoSwitch.spvasm.expected.ir.msl
@@ -1,9 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_FunctionIsOnlyIfSelectionAndItsMerge.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_FunctionIsOnlyIfSelectionAndItsMerge.spvasm.expected.ir.msl
index 792ab03..0282ee5 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_FunctionIsOnlyIfSelectionAndItsMerge.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_FunctionIsOnlyIfSelectionAndItsMerge.spvasm.expected.ir.msl
@@ -1,9 +1,17 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  if (false) {
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_MergeBlockIsAlsoMultiBlockLoopHeader.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_MergeBlockIsAlsoMultiBlockLoopHeader.spvasm.expected.ir.msl
index cdbf128..75e0c7d 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_MergeBlockIsAlsoMultiBlockLoopHeader.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_MergeBlockIsAlsoMultiBlockLoopHeader.spvasm.expected.ir.msl
@@ -1,9 +1,26 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  if (false) {
+  }
+  {
+    while(true) {
+      if (false) {
+      } else {
+        break;
+      }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_MergeBlockIsAlsoSingleBlockLoop.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_MergeBlockIsAlsoSingleBlockLoop.spvasm.expected.ir.msl
index cdbf128..75e0c7d 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_MergeBlockIsAlsoSingleBlockLoop.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_MergeBlockIsAlsoSingleBlockLoop.spvasm.expected.ir.msl
@@ -1,9 +1,26 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  if (false) {
+  }
+  {
+    while(true) {
+      if (false) {
+      } else {
+        break;
+      }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_MultiBlockLoop_HeaderIsNotContinue.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_MultiBlockLoop_HeaderIsNotContinue.spvasm.expected.ir.msl
index cdbf128..8f0e2fb 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_MultiBlockLoop_HeaderIsNotContinue.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_MultiBlockLoop_HeaderIsNotContinue.spvasm.expected.ir.msl
@@ -1,9 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      if (false) {
+      } else {
+        break;
+      }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_If.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_If.spvasm.expected.ir.msl
index 792ab03..6d4f650 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_If.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_If.spvasm.expected.ir.msl
@@ -1,9 +1,22 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  if (false) {
+    if (false) {
+    }
+  } else {
+    if (false) {
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_MultiBlockLoop.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_MultiBlockLoop.spvasm.expected.ir.msl
index cdbf128..7b2b9e7 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_MultiBlockLoop.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_MultiBlockLoop.spvasm.expected.ir.msl
@@ -1,9 +1,26 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  if (false) {
+    {
+      while(true) {
+        if (false) {
+        } else {
+          break;
+        }
+        continue;
+      }
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_SingleBlockLoop.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_SingleBlockLoop.spvasm.expected.ir.msl
index cdbf128..7b2b9e7 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_SingleBlockLoop.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_SingleBlockLoop.spvasm.expected.ir.msl
@@ -1,9 +1,26 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  if (false) {
+    {
+      while(true) {
+        if (false) {
+        } else {
+          break;
+        }
+        continue;
+      }
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_Switch.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_Switch.spvasm.expected.ir.msl
index 2b8690e..f8423a7 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_Switch.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_Switch.spvasm.expected.ir.msl
@@ -1,9 +1,27 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Switch
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  if (false) {
+    switch(42u) {
+      case 20u:
+      {
+        break;
+      }
+      default:
+      {
+        break;
+      }
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_LoopContinue_If.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_LoopContinue_If.spvasm.expected.ir.msl
index cdbf128..0a60e1a 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_LoopContinue_If.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_LoopContinue_If.spvasm.expected.ir.msl
@@ -1,9 +1,26 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      if (false) {
+      } else {
+        break;
+      }
+      if (true) {
+      }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_Loop_If.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_Loop_If.spvasm.expected.ir.msl
index cdbf128..0a60e1a 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_Loop_If.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_Loop_If.spvasm.expected.ir.msl
@@ -1,9 +1,26 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      if (false) {
+      } else {
+        break;
+      }
+      if (true) {
+      }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_Loop_Loop.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_Loop_Loop.spvasm.expected.ir.msl
index cdbf128..175cf2b 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_Loop_Loop.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_Loop_Loop.spvasm.expected.ir.msl
@@ -1,9 +1,33 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      if (false) {
+      } else {
+        break;
+      }
+      {
+        while(true) {
+          if (true) {
+          } else {
+            break;
+          }
+          continue;
+        }
+      }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_Switch_If.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_Switch_If.spvasm.expected.ir.msl
index 2b8690e..0d9ebc0 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_Switch_If.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_Switch_If.spvasm.expected.ir.msl
@@ -1,9 +1,33 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Switch
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  switch(42u) {
+    case 50u:
+    {
+      if (false) {
+      }
+      break;
+    }
+    case 20u:
+    {
+      if (false) {
+      }
+      break;
+    }
+    default:
+    {
+      break;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_OuterConstructIsFunction_MultiBlock.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_OuterConstructIsFunction_MultiBlock.spvasm.expected.ir.msl
index 792ab03..fa708ac 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_OuterConstructIsFunction_MultiBlock.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_OuterConstructIsFunction_MultiBlock.spvasm.expected.ir.msl
@@ -1,9 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_OuterConstructIsFunction_SingleBlock.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_OuterConstructIsFunction_SingleBlock.spvasm.expected.ir.msl
index 792ab03..fa708ac 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_OuterConstructIsFunction_SingleBlock.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_OuterConstructIsFunction_SingleBlock.spvasm.expected.ir.msl
@@ -1,9 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_PaddingBlocksBeforeAndAfterStructuredConstruct.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_PaddingBlocksBeforeAndAfterStructuredConstruct.spvasm.expected.ir.msl
index 792ab03..0282ee5 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_PaddingBlocksBeforeAndAfterStructuredConstruct.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_PaddingBlocksBeforeAndAfterStructuredConstruct.spvasm.expected.ir.msl
@@ -1,9 +1,17 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  if (false) {
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_SingleBlockLoop.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_SingleBlockLoop.spvasm.expected.ir.msl
index cdbf128..8f0e2fb 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_SingleBlockLoop.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_SingleBlockLoop.spvasm.expected.ir.msl
@@ -1,9 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      if (false) {
+      } else {
+        break;
+      }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_SwitchSelection.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_SwitchSelection.spvasm.expected.ir.msl
index 2b8690e..72b1d22 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_SwitchSelection.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_SwitchSelection.spvasm.expected.ir.msl
@@ -1,9 +1,29 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Switch
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  switch(42u) {
+    case 30u:
+    {
+      break;
+    }
+    case 20u:
+    {
+      break;
+    }
+    default:
+    {
+      break;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_MultiBlockLoop_ContinueIsNotHeader_Branch.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_MultiBlockLoop_ContinueIsNotHeader_Branch.spvasm.expected.ir.msl
index cdbf128..8f0e2fb 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_MultiBlockLoop_ContinueIsNotHeader_Branch.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_MultiBlockLoop_ContinueIsNotHeader_Branch.spvasm.expected.ir.msl
@@ -1,9 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      if (false) {
+      } else {
+        break;
+      }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_MultiBlockLoop_ContinueIsNotHeader_BranchConditional.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_MultiBlockLoop_ContinueIsNotHeader_BranchConditional.spvasm.expected.ir.msl
index cdbf128..8f0e2fb 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_MultiBlockLoop_ContinueIsNotHeader_BranchConditional.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_MultiBlockLoop_ContinueIsNotHeader_BranchConditional.spvasm.expected.ir.msl
@@ -1,9 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      if (false) {
+      } else {
+        break;
+      }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_SingleBlockLoop.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_SingleBlockLoop.spvasm.expected.ir.msl
index cdbf128..8f0e2fb 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_SingleBlockLoop.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_SingleBlockLoop.spvasm.expected.ir.msl
@@ -1,9 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      if (false) {
+      } else {
+        break;
+      }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodSelectionMerge_BranchConditional.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodSelectionMerge_BranchConditional.spvasm.expected.ir.msl
index 792ab03..0282ee5 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodSelectionMerge_BranchConditional.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodSelectionMerge_BranchConditional.spvasm.expected.ir.msl
@@ -1,9 +1,17 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  if (false) {
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodSelectionMerge_Switch.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodSelectionMerge_Switch.spvasm.expected.ir.msl
index 2b8690e..c611a2b 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodSelectionMerge_Switch.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodSelectionMerge_Switch.spvasm.expected.ir.msl
@@ -1,9 +1,25 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Switch
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  switch(42u) {
+    case 20u:
+    {
+      break;
+    }
+    default:
+    {
+      break;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_NoMerges.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_NoMerges.spvasm.expected.ir.msl
index 792ab03..fa708ac 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_NoMerges.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_NoMerges.spvasm.expected.ir.msl
@@ -1,9 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_HasSiblingLoop.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_HasSiblingLoop.spvasm.expected.ir.msl
index cdbf128..8f0e2fb 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_HasSiblingLoop.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_HasSiblingLoop.spvasm.expected.ir.msl
@@ -1,9 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      if (false) {
+      } else {
+        break;
+      }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_NotAContinue.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_NotAContinue.spvasm.expected.ir.msl
index 792ab03..fa708ac 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_NotAContinue.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_NotAContinue.spvasm.expected.ir.msl
@@ -1,9 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_Null.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_Null.spvasm.expected.ir.msl
index 792ab03..fa708ac 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_Null.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_Null.spvasm.expected.ir.msl
@@ -1,9 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_SingleBlockLoop.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_SingleBlockLoop.spvasm.expected.ir.msl
index cdbf128..8f0e2fb 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_SingleBlockLoop.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_SingleBlockLoop.spvasm.expected.ir.msl
@@ -1,9 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      if (false) {
+      } else {
+        break;
+      }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_If.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_If.spvasm.expected.ir.msl
index 792ab03..0282ee5 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_If.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_If.spvasm.expected.ir.msl
@@ -1,9 +1,17 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  if (false) {
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Kill.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Kill.spvasm.expected.ir.msl
index 792ab03..3efab94 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Kill.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Kill.spvasm.expected.ir.msl
@@ -1,9 +1,23 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+thread bool continue_execution = true;
+void main_1() {
+  continue_execution = false;
+}
+fragment void tint_symbol() {
+  main_1();
+  if (!(continue_execution)) {
+    discard_fragment();
+  }
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+program_source:5:13: error: program scope variable must reside in constant address space
+thread bool continue_execution = true;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Loop_Simple.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Loop_Simple.spvasm.expected.ir.msl
index cdbf128..8f0e2fb 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Loop_Simple.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Loop_Simple.spvasm.expected.ir.msl
@@ -1,9 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      if (false) {
+      } else {
+        break;
+      }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Loop_SingleBlock.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Loop_SingleBlock.spvasm.expected.ir.msl
index cdbf128..8f0e2fb 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Loop_SingleBlock.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Loop_SingleBlock.spvasm.expected.ir.msl
@@ -1,9 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      if (false) {
+      } else {
+        break;
+      }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Sequence.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Sequence.spvasm.expected.ir.msl
index 792ab03..fa708ac 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Sequence.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Sequence.spvasm.expected.ir.msl
@@ -1,9 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_SingleBlock.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_SingleBlock.spvasm.expected.ir.msl
index 792ab03..fa708ac 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_SingleBlock.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_SingleBlock.spvasm.expected.ir.msl
@@ -1,9 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Unreachable.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Unreachable.spvasm.expected.ir.msl
index 792ab03..fa708ac 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Unreachable.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Unreachable.spvasm.expected.ir.msl
@@ -1,9 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_VerifyHeaderContinueMergeOrder_MultiBlockLoop_Good.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_VerifyHeaderContinueMergeOrder_MultiBlockLoop_Good.spvasm.expected.ir.msl
index cdbf128..8f0e2fb 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_VerifyHeaderContinueMergeOrder_MultiBlockLoop_Good.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_VerifyHeaderContinueMergeOrder_MultiBlockLoop_Good.spvasm.expected.ir.msl
@@ -1,9 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      if (false) {
+      } else {
+        break;
+      }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_VerifyHeaderContinueMergeOrder_Selection_Good.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_VerifyHeaderContinueMergeOrder_Selection_Good.spvasm.expected.ir.msl
index 792ab03..0282ee5 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_VerifyHeaderContinueMergeOrder_Selection_Good.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_VerifyHeaderContinueMergeOrder_Selection_Good.spvasm.expected.ir.msl
@@ -1,9 +1,17 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  if (false) {
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserCFGTest_VerifyHeaderContinueMergeOrder_SingleBlockLoop_Good.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserCFGTest_VerifyHeaderContinueMergeOrder_SingleBlockLoop_Good.spvasm.expected.ir.msl
index cdbf128..8f0e2fb 100644
--- a/test/tint/unittest/reader/spirv/SpvParserCFGTest_VerifyHeaderContinueMergeOrder_SingleBlockLoop_Good.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserCFGTest_VerifyHeaderContinueMergeOrder_SingleBlockLoop_Good.spvasm.expected.ir.msl
@@ -1,9 +1,24 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint var_1 = 0u;
+void main_1() {
+  {
+    while(true) {
+      if (false) {
+      } else {
+        break;
+      }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint var_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_DefConstruct_DoesNotEncloseAllUses.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_DefConstruct_DoesNotEncloseAllUses.spvasm.expected.ir.msl
index efdd3b1..7825db0 100644
--- a/test/tint/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_DefConstruct_DoesNotEncloseAllUses.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_DefConstruct_DoesNotEncloseAllUses.spvasm.expected.ir.msl
@@ -1,9 +1,39 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint x_1 = 0u;
+void main_1() {
+  x_1 = 0u;
+  {
+    while(true) {
+      uint x_2 = 0u;
+      x_1 = 1u;
+      if (false) {
+        break;
+      }
+      x_1 = 3u;
+      if (true) {
+        x_2 = 2u;
+      } else {
+        return;
+      }
+      x_1 = x_2;
+      x_1 = 4u;
+      if false { break; }
+      continue;
+    }
+  }
+  x_1 = 5u;
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint x_1 = 0u;
+            ^
+program_source:22:10: error: expected '(' after 'if'
+      if false { break; }
+         ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_Hoisting_DefFirstBlockIf_InFunction.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_Hoisting_DefFirstBlockIf_InFunction.spvasm.expected.ir.msl
index efdd3b1..7bfb0d1 100644
--- a/test/tint/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_Hoisting_DefFirstBlockIf_InFunction.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_Hoisting_DefFirstBlockIf_InFunction.spvasm.expected.ir.msl
@@ -1,9 +1,19 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint x_200 = 0u;
+void main_1() {
+  uint const x_1 = 1u;
+  if (true) {
+  }
+  x_200 = x_1;
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint x_200 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_Hoisting_DefFirstBlockIf_InIf.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_Hoisting_DefFirstBlockIf_InIf.spvasm.expected.ir.msl
index efdd3b1..07175b6 100644
--- a/test/tint/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_Hoisting_DefFirstBlockIf_InIf.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_Hoisting_DefFirstBlockIf_InIf.spvasm.expected.ir.msl
@@ -1,9 +1,21 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint x_200 = 0u;
+void main_1() {
+  if (true) {
+    uint const x_1 = 1u;
+    if (true) {
+    }
+    x_200 = x_1;
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint x_200 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_Hoisting_DefFirstBlockSwitch_InIf.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_Hoisting_DefFirstBlockSwitch_InIf.spvasm.expected.ir.msl
index 2b8690e..bb9b93c 100644
--- a/test/tint/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_Hoisting_DefFirstBlockSwitch_InIf.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_Hoisting_DefFirstBlockSwitch_InIf.spvasm.expected.ir.msl
@@ -1,9 +1,29 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Switch
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint x_200 = 0u;
+void main_1() {
+  if (true) {
+    uint const x_1 = 1u;
+    switch(1u) {
+      case 0u:
+      {
+        break;
+      }
+      default:
+      {
+        break;
+      }
+    }
+    x_200 = x_1;
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint x_200 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_FromElseAndThen.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_FromElseAndThen.spvasm.expected.ir.msl
index cdbf128..a553db5 100644
--- a/test/tint/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_FromElseAndThen.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_FromElseAndThen.spvasm.expected.ir.msl
@@ -1,9 +1,43 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint x_1 = 0u;
+thread bool x_7 = false;
+thread bool x_8 = false;
+void main_1() {
+  bool const x_101 = x_7;
+  bool const x_102 = x_8;
+  {
+    while(true) {
+      uint x_2 = 0u;
+      if (x_101) {
+        break;
+      }
+      if (x_102) {
+        x_2 = 0u;
+        x_1 = x_2;
+        continue;
+      } else {
+        x_2 = 1u;
+        x_1 = x_2;
+        continue;
+      }
+      /* unreachable */
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint x_1 = 0u;
+            ^
+program_source:5:13: error: program scope variable must reside in constant address space
+thread bool x_7 = false;
+            ^
+program_source:6:13: error: program scope variable must reside in constant address space
+thread bool x_8 = false;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_FromHeaderAndThen.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_FromHeaderAndThen.spvasm.expected.ir.msl
index cdbf128..cfe0493 100644
--- a/test/tint/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_FromHeaderAndThen.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_FromHeaderAndThen.spvasm.expected.ir.msl
@@ -1,9 +1,43 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint x_1 = 0u;
+thread bool x_7 = false;
+thread bool x_8 = false;
+void main_1() {
+  bool const x_101 = x_7;
+  bool const x_102 = x_8;
+  {
+    while(true) {
+      uint x_2 = 0u;
+      if (x_101) {
+        break;
+      }
+      x_2 = 0u;
+      if (x_102) {
+        x_2 = 1u;
+        x_1 = x_2;
+        continue;
+      } else {
+        x_1 = x_2;
+        continue;
+      }
+      /* unreachable */
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint x_1 = 0u;
+            ^
+program_source:5:13: error: program scope variable must reside in constant address space
+thread bool x_7 = false;
+            ^
+program_source:6:13: error: program scope variable must reside in constant address space
+thread bool x_8 = false;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_MultiBlockLoopIndex.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_MultiBlockLoopIndex.spvasm.expected.ir.msl
index cdbf128..f0271db 100644
--- a/test/tint/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_MultiBlockLoopIndex.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_MultiBlockLoopIndex.spvasm.expected.ir.msl
@@ -1,9 +1,50 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint x_1 = 0u;
+thread bool x_7 = false;
+thread bool x_8 = false;
+void main_1() {
+  {
+    while(true) {
+      uint x_2 = 0u;
+      uint x_3 = 0u;
+      bool const x_101 = x_7;
+      bool const x_102 = x_8;
+      x_2 = 0u;
+      x_3 = 1u;
+      if (x_101) {
+        break;
+      }
+      {
+        while(true) {
+          uint x_4 = 0u;
+          if (x_102) {
+            break;
+          }
+          x_4 = (x_2 + 1u);
+          uint const x_3_c30 = x_3;
+          x_2 = x_4;
+          x_3 = x_3_c30;
+          continue;
+        }
+      }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint x_1 = 0u;
+            ^
+program_source:5:13: error: program scope variable must reside in constant address space
+thread bool x_7 = false;
+            ^
+program_source:6:13: error: program scope variable must reside in constant address space
+thread bool x_8 = false;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_SingleBlockLoopIndex.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_SingleBlockLoopIndex.spvasm.expected.ir.msl
index cdbf128..cf4d222 100644
--- a/test/tint/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_SingleBlockLoopIndex.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_SingleBlockLoopIndex.spvasm.expected.ir.msl
@@ -1,9 +1,48 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint x_1 = 0u;
+thread bool x_7 = false;
+thread bool x_8 = false;
+void main_1() {
+  {
+    while(true) {
+      uint x_2 = 0u;
+      uint x_3 = 0u;
+      bool const x_101 = x_7;
+      bool const x_102 = x_8;
+      x_2 = 0u;
+      x_3 = 1u;
+      if (x_101) {
+        break;
+      }
+      {
+        while(true) {
+          uint const x_3_c20 = x_3;
+          x_2 = (x_2 + 1u);
+          x_3 = x_3_c20;
+          if (x_102) {
+            break;
+          }
+          continue;
+        }
+      }
+      continue;
+    }
+  }
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint x_1 = 0u;
+            ^
+program_source:5:13: error: program scope variable must reside in constant address space
+thread bool x_7 = false;
+            ^
+program_source:6:13: error: program scope variable must reside in constant address space
+thread bool x_8 = false;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_CopyObject.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_CopyObject.spvasm.expected.ir.msl
index 792ab03..4cae946 100644
--- a/test/tint/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_CopyObject.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_CopyObject.spvasm.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+sampler x_10;
+texture1d<float, access::sample> x_20;
+void main_1() {
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:1: error: constant sampler must be declared constexpr
+sampler x_10;
+^
+constexpr 
+program_source:5:34: error: program scope variable must reside in constant address space
+texture1d<float, access::sample> x_20;
+                                 ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_Direct.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_Direct.spvasm.expected.ir.msl
index 792ab03..4cae946 100644
--- a/test/tint/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_Direct.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_Direct.spvasm.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+sampler x_10;
+texture1d<float, access::sample> x_20;
+void main_1() {
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:1: error: constant sampler must be declared constexpr
+sampler x_10;
+^
+constexpr 
+program_source:5:34: error: program scope variable must reside in constant address space
+texture1d<float, access::sample> x_20;
+                                 ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_Image.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_Image.spvasm.expected.ir.msl
index 792ab03..4cae946 100644
--- a/test/tint/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_Image.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_Image.spvasm.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+sampler x_10;
+texture1d<float, access::sample> x_20;
+void main_1() {
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:1: error: constant sampler must be declared constexpr
+sampler x_10;
+^
+constexpr 
+program_source:5:34: error: program scope variable must reside in constant address space
+texture1d<float, access::sample> x_20;
+                                 ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_Load.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_Load.spvasm.expected.ir.msl
index 792ab03..4cae946 100644
--- a/test/tint/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_Load.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_Load.spvasm.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+sampler x_10;
+texture1d<float, access::sample> x_20;
+void main_1() {
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:1: error: constant sampler must be declared constexpr
+sampler x_10;
+^
+constexpr 
+program_source:5:34: error: program scope variable must reside in constant address space
+texture1d<float, access::sample> x_20;
+                                 ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_SampledImage.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_SampledImage.spvasm.expected.ir.msl
index 792ab03..4cae946 100644
--- a/test/tint/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_SampledImage.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_SampledImage.spvasm.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+sampler x_10;
+texture1d<float, access::sample> x_20;
+void main_1() {
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:1: error: constant sampler must be declared constexpr
+sampler x_10;
+^
+constexpr 
+program_source:5:34: error: program scope variable must reside in constant address space
+texture1d<float, access::sample> x_20;
+                                 ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserHandleTest_NeverGenerateConstDeclForHandle_UseVariableDirectly.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserHandleTest_NeverGenerateConstDeclForHandle_UseVariableDirectly.spvasm.expected.ir.msl
index b38060a..3543919 100644
--- a/test/tint/unittest/reader/spirv/SpvParserHandleTest_NeverGenerateConstDeclForHandle_UseVariableDirectly.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserHandleTest_NeverGenerateConstDeclForHandle_UseVariableDirectly.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureSample
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/unittest/reader/spirv/SpvParserMemoryTest_ArrayLength_FromAccessChain.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserMemoryTest_ArrayLength_FromAccessChain.spvasm.expected.ir.msl
index c3e6052a..d0e3ec7 100644
--- a/test/tint/unittest/reader/spirv/SpvParserMemoryTest_ArrayLength_FromAccessChain.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserMemoryTest_ArrayLength_FromAccessChain.spvasm.expected.ir.msl
@@ -1,24 +1,25 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   first:u32 @offset(0)
   rtarr:array<u32> @offset(4)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %myvar:ptr<storage, S, read_write> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %3:ptr<storage, array<u32>, read_write> = access %myvar, 1u
-    %x_1:u32 = arrayLength %3
+    %4:u32 = arrayLength %3
+    %x_1:u32 = let %4
     ret
   }
 }
-%tint_symbol = @fragment func():void -> %b3 {
-  %b3 = block {
-    %6:void = call %main_1
+%tint_symbol = @fragment func():void {
+  $B3: {
+    %7:void = call %main_1
     ret
   }
 }
diff --git a/test/tint/unittest/reader/spirv/SpvParserMemoryTest_ArrayLength_FromVar.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserMemoryTest_ArrayLength_FromVar.spvasm.expected.ir.msl
index c3e6052a..d0e3ec7 100644
--- a/test/tint/unittest/reader/spirv/SpvParserMemoryTest_ArrayLength_FromVar.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserMemoryTest_ArrayLength_FromVar.spvasm.expected.ir.msl
@@ -1,24 +1,25 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   first:u32 @offset(0)
   rtarr:array<u32> @offset(4)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %myvar:ptr<storage, S, read_write> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %3:ptr<storage, array<u32>, read_write> = access %myvar, 1u
-    %x_1:u32 = arrayLength %3
+    %4:u32 = arrayLength %3
+    %x_1:u32 = let %4
     ret
   }
 }
-%tint_symbol = @fragment func():void -> %b3 {
-  %b3 = block {
-    %6:void = call %main_1
+%tint_symbol = @fragment func():void {
+  $B3: {
+    %7:void = call %main_1
     ret
   }
 }
diff --git a/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Array.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Array.spvasm.expected.ir.msl
index 28251dc..157278d 100644
--- a/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Array.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Array.spvasm.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float3x4 myvar = float3x4(0.0f);
+void main_1() {
+  myvar[2u] = float4(42.0f);
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:17: error: program scope variable must reside in constant address space
+thread float3x4 myvar = float3x4(0.0f);
+                ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Compound_Matrix_Vector.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Compound_Matrix_Vector.spvasm.expected.ir.msl
index 28251dc..ebc2e6e 100644
--- a/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Compound_Matrix_Vector.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Compound_Matrix_Vector.spvasm.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float3x4 myvar = float3x4(0.0f);
+void main_1() {
+  myvar[2u][3u] = 42.0f;
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:17: error: program scope variable must reside in constant address space
+thread float3x4 myvar = float3x4(0.0f);
+                ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_DereferenceBase.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_DereferenceBase.spvasm.expected.ir.msl
index 2e88a5f..75c2765 100644
--- a/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_DereferenceBase.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_DereferenceBase.spvasm.expected.ir.msl
@@ -1,9 +1,17 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::LoadVectorElement
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+void x_200(thread uint2* const x_1) {
+  uint const x_3 = x_1[0u];
+}
+void main_1() {
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:5:14: error: cannot initialize a variable of type 'const uint' (aka 'const unsigned int') with an lvalue of type 'uint2' (vector of 2 'unsigned int' values)
+  uint const x_3 = x_1[0u];
+             ^     ~~~~~~~
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Matrix.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Matrix.spvasm.expected.ir.msl
index 28251dc..157278d 100644
--- a/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Matrix.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Matrix.spvasm.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread float3x4 myvar = float3x4(0.0f);
+void main_1() {
+  myvar[2u] = float4(42.0f);
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:17: error: program scope variable must reside in constant address space
+thread float3x4 myvar = float3x4(0.0f);
+                ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Struct.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Struct.spvasm.expected.ir.msl
index 28251dc..54af741 100644
--- a/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Struct.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Struct.spvasm.expected.ir.msl
@@ -1,9 +1,20 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct S {
+  float field0;
+  float age;
+};
+
+thread S myvar = {};
+void main_1() {
+  myvar.age = 42.0f;
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:8:10: error: program scope variable must reside in constant address space
+thread S myvar = {};
+         ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Struct_DifferOnlyMemberName.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Struct_DifferOnlyMemberName.spvasm.expected.ir.msl
index 28251dc..0d90226 100644
--- a/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Struct_DifferOnlyMemberName.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Struct_DifferOnlyMemberName.spvasm.expected.ir.msl
@@ -1,9 +1,29 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct S {
+  float field0;
+  float age;
+};
+struct S_1 {
+  float field0;
+  float ancientness;
+};
+
+thread S myvar = {};
+thread S_1 myvar2 = {};
+void main_1() {
+  myvar.age = 42.0f;
+  myvar2.ancientness = 420.0f;
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:12:10: error: program scope variable must reside in constant address space
+thread S myvar = {};
+         ^
+program_source:13:12: error: program scope variable must reside in constant address space
+thread S_1 myvar2 = {};
+           ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Struct_RuntimeArray.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Struct_RuntimeArray.spvasm.expected.ir.msl
index 05a514a..9a4bd54 100644
--- a/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Struct_RuntimeArray.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Struct_RuntimeArray.spvasm.expected.ir.msl
@@ -1,23 +1,23 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   field0:f32 @offset(0)
   age:array<f32> @offset(4)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %myvar:ptr<storage, S, read_write> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %3:ptr<storage, f32, read_write> = access %myvar, 1u, 2u
     store %3, 42.0f
     ret
   }
 }
-%tint_symbol = @fragment func():void -> %b3 {
-  %b3 = block {
+%tint_symbol = @fragment func():void {
+  $B3: {
     %5:void = call %main_1
     ret
   }
diff --git a/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_VectorNonConstIndex.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_VectorNonConstIndex.spvasm.expected.ir.msl
index 2e88a5f..0d8d319 100644
--- a/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_VectorNonConstIndex.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_VectorNonConstIndex.spvasm.expected.ir.msl
@@ -1,9 +1,21 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::LoadVectorElement
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint4 myvar = 0u;
+thread uint4 x_10 = 0u;
+void main_1() {
+  uint const a_dynamic_index = x_10[2u];
+  myvar[a_dynamic_index] = 42u;
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread uint4 myvar = 0u;
+             ^
+program_source:5:14: error: program scope variable must reside in constant address space
+thread uint4 x_10 = 0u;
+             ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_VectorSwizzle.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_VectorSwizzle.spvasm.expected.ir.msl
index 3440042..366cfc3 100644
--- a/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_VectorSwizzle.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_VectorSwizzle.spvasm.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::StoreVectorElement
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint4 myvar = 0u;
+void main_1() {
+  myvar[2u] = 42u;
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:14: error: program scope variable must reside in constant address space
+thread uint4 myvar = 0u;
+             ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_CopyMemory_Scalar_Function_To_Private.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_CopyMemory_Scalar_Function_To_Private.spvasm.expected.ir.msl
index efdd3b1..80b39e4 100644
--- a/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_CopyMemory_Scalar_Function_To_Private.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_CopyMemory_Scalar_Function_To_Private.spvasm.expected.ir.msl
@@ -1,9 +1,17 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint x_2 = 0u;
+void main_1() {
+  uint x_1 = 0u;
+  x_2 = x_1;
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint x_2 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreToModuleScopeVar.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreToModuleScopeVar.spvasm.expected.ir.msl
index efdd3b1..fb8955a 100644
--- a/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreToModuleScopeVar.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreToModuleScopeVar.spvasm.expected.ir.msl
@@ -1,9 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread uint x_1 = 0u;
+void main_1() {
+  x_1 = 42u;
+}
+fragment void tint_symbol() {
+  main_1();
+}
+program_source:4:13: error: program scope variable must reside in constant address space
+thread uint x_1 = 0u;
+            ^
+
diff --git a/test/tint/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_ThroughAccessChain_Cascaded.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_ThroughAccessChain_Cascaded.spvasm.expected.ir.msl
index a81061d..8800a72 100644
--- a/test/tint/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_ThroughAccessChain_Cascaded.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_ThroughAccessChain_Cascaded.spvasm.expected.ir.msl
@@ -1,23 +1,23 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   field0:u32 @offset(0)
   field1:array<u32> @offset(4)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %myvar:ptr<storage, S, read_write> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %3:ptr<storage, u32, read_write> = access %myvar, 1u, 1u
     store %3, 0u
     ret
   }
 }
-%tint_symbol = @fragment func():void -> %b3 {
-  %b3 = block {
+%tint_symbol = @fragment func():void {
+  $B3: {
     %5:void = call %main_1
     ret
   }
diff --git a/test/tint/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_ThroughAccessChain_NonCascaded.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_ThroughAccessChain_NonCascaded.spvasm.expected.ir.msl
index 6d440b6..690eeb2 100644
--- a/test/tint/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_ThroughAccessChain_NonCascaded.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_ThroughAccessChain_NonCascaded.spvasm.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   field0:u32 @offset(0)
   field1:array<u32> @offset(4)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %myvar:ptr<storage, S, read_write> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %3:ptr<storage, u32, read_write> = access %myvar, 0u
     store %3, 0u
     %4:ptr<storage, u32, read_write> = access %myvar, 1u, 1u
@@ -18,8 +18,8 @@
     ret
   }
 }
-%tint_symbol = @fragment func():void -> %b3 {
-  %b3 = block {
+%tint_symbol = @fragment func():void {
+  $B3: {
     %6:void = call %main_1
     ret
   }
diff --git a/test/tint/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_ThroughAccessChain_NonCascaded_InBoundsAccessChain.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_ThroughAccessChain_NonCascaded_InBoundsAccessChain.spvasm.expected.ir.msl
index 6d440b6..690eeb2 100644
--- a/test/tint/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_ThroughAccessChain_NonCascaded_InBoundsAccessChain.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_ThroughAccessChain_NonCascaded_InBoundsAccessChain.spvasm.expected.ir.msl
@@ -1,16 +1,16 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   field0:u32 @offset(0)
   field1:array<u32> @offset(4)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %myvar:ptr<storage, S, read_write> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %3:ptr<storage, u32, read_write> = access %myvar, 0u
     store %3, 0u
     %4:ptr<storage, u32, read_write> = access %myvar, 1u, 1u
@@ -18,8 +18,8 @@
     ret
   }
 }
-%tint_symbol = @fragment func():void -> %b3 {
-  %b3 = block {
+%tint_symbol = @fragment func():void {
+  $B3: {
     %6:void = call %main_1
     ret
   }
diff --git a/test/tint/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_TypesAndVarDeclarations.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_TypesAndVarDeclarations.spvasm.expected.ir.msl
index 2cf4cf2..e543add 100644
--- a/test/tint/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_TypesAndVarDeclarations.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_TypesAndVarDeclarations.spvasm.expected.ir.msl
@@ -1,21 +1,21 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   field0:u32 @offset(0)
   field1:array<u32> @offset(4)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %myvar:ptr<storage, S, read_write> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     ret
   }
 }
-%tint_symbol = @fragment func():void -> %b3 {
-  %b3 = block {
+%tint_symbol = @fragment func():void {
+  $B3: {
     %4:void = call %main_1
     ret
   }
diff --git a/test/tint/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_Vertex.spvasm.expected.ir.msl b/test/tint/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_Vertex.spvasm.expected.ir.msl
index 792ab03..c466e7d 100644
--- a/test/tint/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_Vertex.spvasm.expected.ir.msl
+++ b/test/tint/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_Vertex.spvasm.expected.ir.msl
@@ -1,9 +1,19 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct main_out {
+  float4 x_2_1 [[position]];
+};
+
+thread float4 x_2 = 0.0f;
+void main_1() {
+}
+vertex main_out tint_symbol() {
+  main_1();
+  return {.x_2_1=x_2};
+}
+program_source:7:15: error: program scope variable must reside in constant address space
+thread float4 x_2 = 0.0f;
+              ^
+
diff --git a/test/tint/var/inferred/global.wgsl.expected.ir.msl b/test/tint/var/inferred/global.wgsl.expected.ir.msl
index b147a04..d60fbc5 100644
--- a/test/tint/var/inferred/global.wgsl.expected.ir.msl
+++ b/test/tint/var/inferred/global.wgsl.expected.ir.msl
@@ -34,5 +34,118 @@
 thread tint_array<float, 10> v14 = tint_array<float, 10>{};
 thread int3 v15 = int3(1, 2, 3);
 thread float3 v16 = float3(1.0f, 2.0f, 3.0f);
-void f() {
+kernel void f() {
+  int const l1 = v1;
+  uint const l2 = v2;
+  float const l3 = v3;
+  int3 const l4 = v4;
+  uint3 const l5 = v5;
+  float3 const l6 = v6;
+  MyStruct const l7 = v7;
+  tint_array<float, 10> const l8 = v8;
+  int const l9 = v9;
+  uint const l10 = v10;
+  float const l11 = v11;
+  MyStruct const l12 = v12;
+  MyStruct const l13 = v13;
+  tint_array<float, 10> const l14 = v14;
+  int3 const l15 = v15;
+  float3 const l16 = v16;
 }
+program_source:19:12: error: program scope variable must reside in constant address space
+thread int v1 = 1;
+           ^
+program_source:20:13: error: program scope variable must reside in constant address space
+thread uint v2 = 1u;
+            ^
+program_source:21:14: error: program scope variable must reside in constant address space
+thread float v3 = 1.0f;
+             ^
+program_source:22:13: error: program scope variable must reside in constant address space
+thread int3 v4 = int3(1);
+            ^
+program_source:23:14: error: program scope variable must reside in constant address space
+thread uint3 v5 = uint3(1u, 2u, 3u);
+             ^
+program_source:24:15: error: program scope variable must reside in constant address space
+thread float3 v6 = float3(1.0f, 2.0f, 3.0f);
+              ^
+program_source:25:17: error: program scope variable must reside in constant address space
+thread MyStruct v7 = MyStruct{.f1=1.0f};
+                ^
+program_source:26:30: error: program scope variable must reside in constant address space
+thread tint_array<float, 10> v8 = tint_array<float, 10>{};
+                             ^
+program_source:27:12: error: program scope variable must reside in constant address space
+thread int v9 = 0;
+           ^
+program_source:28:13: error: program scope variable must reside in constant address space
+thread uint v10 = 0u;
+            ^
+program_source:29:14: error: program scope variable must reside in constant address space
+thread float v11 = 0.0f;
+             ^
+program_source:30:17: error: program scope variable must reside in constant address space
+thread MyStruct v12 = MyStruct{};
+                ^
+program_source:31:17: error: program scope variable must reside in constant address space
+thread MyStruct v13 = MyStruct{};
+                ^
+program_source:32:30: error: program scope variable must reside in constant address space
+thread tint_array<float, 10> v14 = tint_array<float, 10>{};
+                             ^
+program_source:33:13: error: program scope variable must reside in constant address space
+thread int3 v15 = int3(1, 2, 3);
+            ^
+program_source:34:15: error: program scope variable must reside in constant address space
+thread float3 v16 = float3(1.0f, 2.0f, 3.0f);
+              ^
+program_source:36:13: warning: unused variable 'l1' [-Wunused-variable]
+  int const l1 = v1;
+            ^
+program_source:37:14: warning: unused variable 'l2' [-Wunused-variable]
+  uint const l2 = v2;
+             ^
+program_source:38:15: warning: unused variable 'l3' [-Wunused-variable]
+  float const l3 = v3;
+              ^
+program_source:39:14: warning: unused variable 'l4' [-Wunused-variable]
+  int3 const l4 = v4;
+             ^
+program_source:40:15: warning: unused variable 'l5' [-Wunused-variable]
+  uint3 const l5 = v5;
+              ^
+program_source:41:16: warning: unused variable 'l6' [-Wunused-variable]
+  float3 const l6 = v6;
+               ^
+program_source:42:18: warning: unused variable 'l7' [-Wunused-variable]
+  MyStruct const l7 = v7;
+                 ^
+program_source:43:31: warning: unused variable 'l8' [-Wunused-variable]
+  tint_array<float, 10> const l8 = v8;
+                              ^
+program_source:44:13: warning: unused variable 'l9' [-Wunused-variable]
+  int const l9 = v9;
+            ^
+program_source:45:14: warning: unused variable 'l10' [-Wunused-variable]
+  uint const l10 = v10;
+             ^
+program_source:46:15: warning: unused variable 'l11' [-Wunused-variable]
+  float const l11 = v11;
+              ^
+program_source:47:18: warning: unused variable 'l12' [-Wunused-variable]
+  MyStruct const l12 = v12;
+                 ^
+program_source:48:18: warning: unused variable 'l13' [-Wunused-variable]
+  MyStruct const l13 = v13;
+                 ^
+program_source:49:31: warning: unused variable 'l14' [-Wunused-variable]
+  tint_array<float, 10> const l14 = v14;
+                              ^
+program_source:50:14: warning: unused variable 'l15' [-Wunused-variable]
+  int3 const l15 = v15;
+             ^
+program_source:51:16: warning: unused variable 'l16' [-Wunused-variable]
+  float3 const l16 = v16;
+               ^
+
diff --git a/test/tint/var/initialization/function/nested_structs.wgsl.expected.ir.msl b/test/tint/var/initialization/function/nested_structs.wgsl.expected.ir.msl
new file mode 100644
index 0000000..ff8cfd2
--- /dev/null
+++ b/test/tint/var/initialization/function/nested_structs.wgsl.expected.ir.msl
@@ -0,0 +1,39 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S1 = struct @align(4) {
+  i:i32 @offset(0)
+}
+
+S2 = struct @align(4) {
+  s1:S1 @offset(0)
+}
+
+S3 = struct @align(4) {
+  s2:S2 @offset(0)
+}
+
+$B1: {  # root
+  %out:ptr<storage, i32, read_write> = var @binding_point(0, 0)
+}
+
+%f = func(%s3:S3):i32 {
+  $B2: {
+    %4:i32 = access %s3, 0u, 0u, 0u
+    ret %4
+  }
+}
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
+    %6:i32 = call %f, S3(S2(S1(42i)))
+    store %out, %6
+    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.  *
+********************************************************************
diff --git a/test/tint/var/initialization/private/array/array_i32.wgsl.expected.ir.msl b/test/tint/var/initialization/private/array/array_i32.wgsl.expected.ir.msl
index eec5fd3..9f98115 100644
--- a/test/tint/var/initialization/private/array/array_i32.wgsl.expected.ir.msl
+++ b/test/tint/var/initialization/private/array/array_i32.wgsl.expected.ir.msl
@@ -17,7 +17,20 @@
 
 thread tint_array<tint_array<int, 3>, 2> zero = {};
 thread tint_array<tint_array<int, 3>, 2> init = tint_array<tint_array<int, 3>, 2>{tint_array<int, 3>{1, 2, 3}, tint_array<int, 3>{4, 5, 6}};
-void tint_symbol() {
+kernel void tint_symbol() {
   tint_array<tint_array<int, 3>, 2> v0 = zero;
   tint_array<tint_array<int, 3>, 2> v1 = init;
 }
+program_source:16:42: error: program scope variable must reside in constant address space
+thread tint_array<tint_array<int, 3>, 2> zero = {};
+                                         ^
+program_source:17:42: error: program scope variable must reside in constant address space
+thread tint_array<tint_array<int, 3>, 2> init = tint_array<tint_array<int, 3>, 2>{tint_array<int, 3>{1, 2, 3}, tint_array<int, 3>{4, 5, 6}};
+                                         ^
+program_source:19:37: warning: unused variable 'v0' [-Wunused-variable]
+  tint_array<tint_array<int, 3>, 2> v0 = zero;
+                                    ^
+program_source:20:37: warning: unused variable 'v1' [-Wunused-variable]
+  tint_array<tint_array<int, 3>, 2> v1 = init;
+                                    ^
+
diff --git a/test/tint/var/initialization/private/array/i32.wgsl.expected.ir.msl b/test/tint/var/initialization/private/array/i32.wgsl.expected.ir.msl
index c1da198..92d7aa1 100644
--- a/test/tint/var/initialization/private/array/i32.wgsl.expected.ir.msl
+++ b/test/tint/var/initialization/private/array/i32.wgsl.expected.ir.msl
@@ -17,7 +17,20 @@
 
 thread tint_array<int, 3> zero = {};
 thread tint_array<int, 3> init = tint_array<int, 3>{1, 2, 3};
-void tint_symbol() {
+kernel void tint_symbol() {
   tint_array<int, 3> v0 = zero;
   tint_array<int, 3> v1 = init;
 }
+program_source:16:27: error: program scope variable must reside in constant address space
+thread tint_array<int, 3> zero = {};
+                          ^
+program_source:17:27: error: program scope variable must reside in constant address space
+thread tint_array<int, 3> init = tint_array<int, 3>{1, 2, 3};
+                          ^
+program_source:19:22: warning: unused variable 'v0' [-Wunused-variable]
+  tint_array<int, 3> v0 = zero;
+                     ^
+program_source:20:22: warning: unused variable 'v1' [-Wunused-variable]
+  tint_array<int, 3> v1 = init;
+                     ^
+
diff --git a/test/tint/var/initialization/private/matrix.wgsl.expected.ir.msl b/test/tint/var/initialization/private/matrix.wgsl.expected.ir.msl
index 187732e..13c597d 100644
--- a/test/tint/var/initialization/private/matrix.wgsl.expected.ir.msl
+++ b/test/tint/var/initialization/private/matrix.wgsl.expected.ir.msl
@@ -4,5 +4,9 @@
 using namespace metal;
 
 thread float2x3 v = float2x3(0.0f);
-void tint_symbol() {
+kernel void tint_symbol() {
 }
+program_source:4:17: error: program scope variable must reside in constant address space
+thread float2x3 v = float2x3(0.0f);
+                ^
+
diff --git a/test/tint/var/initialization/private/nested_structs.wgsl.expected.ir.msl b/test/tint/var/initialization/private/nested_structs.wgsl.expected.ir.msl
new file mode 100644
index 0000000..35028b3
--- /dev/null
+++ b/test/tint/var/initialization/private/nested_structs.wgsl.expected.ir.msl
@@ -0,0 +1,35 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S1 = struct @align(4) {
+  i:i32 @offset(0)
+}
+
+S2 = struct @align(4) {
+  s1:S1 @offset(0)
+}
+
+S3 = struct @align(4) {
+  s2:S2 @offset(0)
+}
+
+$B1: {  # root
+  %P:ptr<private, S3, read_write> = var, S3(S2(S1(42i)))
+  %out:ptr<storage, i32, read_write> = var @binding_point(0, 0)
+}
+
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B2: {
+    %4:ptr<private, i32, read_write> = access %P, 0u, 0u, 0u
+    %5:i32 = load %4
+    store %out, %5
+    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.  *
+********************************************************************
diff --git a/test/tint/var/initialization/private/scalar.wgsl.expected.ir.msl b/test/tint/var/initialization/private/scalar.wgsl.expected.ir.msl
index 2a27538..65ac9c4 100644
--- a/test/tint/var/initialization/private/scalar.wgsl.expected.ir.msl
+++ b/test/tint/var/initialization/private/scalar.wgsl.expected.ir.msl
@@ -4,5 +4,9 @@
 using namespace metal;
 
 thread int v = 0;
-void tint_symbol() {
+kernel void tint_symbol() {
 }
+program_source:4:12: error: program scope variable must reside in constant address space
+thread int v = 0;
+           ^
+
diff --git a/test/tint/var/initialization/private/struct.wgsl.expected.ir.msl b/test/tint/var/initialization/private/struct.wgsl.expected.ir.msl
index aeed8b1..9550c53 100644
--- a/test/tint/var/initialization/private/struct.wgsl.expected.ir.msl
+++ b/test/tint/var/initialization/private/struct.wgsl.expected.ir.msl
@@ -8,5 +8,9 @@
 };
 
 thread S v = {};
-void tint_symbol() {
+kernel void tint_symbol() {
 }
+program_source:8:10: error: program scope variable must reside in constant address space
+thread S v = {};
+         ^
+
diff --git a/test/tint/var/initialization/private/vector.wgsl.expected.ir.msl b/test/tint/var/initialization/private/vector.wgsl.expected.ir.msl
index cdca7cd..b18e5a5 100644
--- a/test/tint/var/initialization/private/vector.wgsl.expected.ir.msl
+++ b/test/tint/var/initialization/private/vector.wgsl.expected.ir.msl
@@ -4,5 +4,9 @@
 using namespace metal;
 
 thread int3 v = 0;
-void tint_symbol() {
+kernel void tint_symbol() {
 }
+program_source:4:13: error: program scope variable must reside in constant address space
+thread int3 v = 0;
+            ^
+
diff --git a/test/tint/var/initialization/workgroup/array/array_i32.wgsl.expected.ir.msl b/test/tint/var/initialization/workgroup/array/array_i32.wgsl.expected.ir.msl
index 031bb7c..3fa6a4b 100644
--- a/test/tint/var/initialization/workgroup/array/array_i32.wgsl.expected.ir.msl
+++ b/test/tint/var/initialization/workgroup/array/array_i32.wgsl.expected.ir.msl
@@ -1,21 +1,9 @@
 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];
-};
-
-
-threadgroup tint_array<tint_array<int, 3>, 2> zero;
-void tint_symbol() {
-  tint_array<tint_array<int, 3>, 2> v = zero;
-}
+../../src/tint/lang/msl/writer/printer/printer.cc:388 internal compiler error: Switch() matched no cases. Type: tint::core::ir::BlockParam
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/var/initialization/workgroup/array/i32.wgsl.expected.ir.msl b/test/tint/var/initialization/workgroup/array/i32.wgsl.expected.ir.msl
index 32c5bf6..3fa6a4b 100644
--- a/test/tint/var/initialization/workgroup/array/i32.wgsl.expected.ir.msl
+++ b/test/tint/var/initialization/workgroup/array/i32.wgsl.expected.ir.msl
@@ -1,21 +1,9 @@
 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];
-};
-
-
-threadgroup tint_array<int, 3> zero;
-void tint_symbol() {
-  tint_array<int, 3> v = zero;
-}
+../../src/tint/lang/msl/writer/printer/printer.cc:388 internal compiler error: Switch() matched no cases. Type: tint::core::ir::BlockParam
+********************************************************************
+*  The tint shader compiler has encountered an unexpected error.   *
+*                                                                  *
+*  Please help us fix this issue by submitting a bug report at     *
+*  crbug.com/tint with the source program that triggered the bug.  *
+********************************************************************
diff --git a/test/tint/var/initialization/workgroup/matrix.wgsl.expected.ir.msl b/test/tint/var/initialization/workgroup/matrix.wgsl.expected.ir.msl
index c034870..a1c80e0 100644
--- a/test/tint/var/initialization/workgroup/matrix.wgsl.expected.ir.msl
+++ b/test/tint/var/initialization/workgroup/matrix.wgsl.expected.ir.msl
@@ -4,5 +4,23 @@
 using namespace metal;
 
 threadgroup float2x3 v;
-void tint_symbol() {
+kernel void tint_symbol(uint tint_local_index [[thread_index_in_threadgroup]]) {
+  if ((tint_local_index == 0u)) {
+    v = float2x3(float3(0.0f), float3(0.0f));
+  }
+  threadgroup_barrier(mem_flags::mem_threadgroup);
 }
+program_source:4:22: error: program scope variable must reside in constant address space
+threadgroup float2x3 v;
+                     ^
+program_source:6:25: warning: equality comparison with extraneous parentheses [-Wparentheses-equality]
+  if ((tint_local_index == 0u)) {
+       ~~~~~~~~~~~~~~~~~^~~~~
+program_source:6:25: note: remove extraneous parentheses around the comparison to silence this warning
+  if ((tint_local_index == 0u)) {
+      ~                 ^    ~
+program_source:6:25: note: use '=' to turn this equality comparison into an assignment
+  if ((tint_local_index == 0u)) {
+                        ^~
+                        =
+
diff --git a/test/tint/var/initialization/workgroup/scalar.wgsl.expected.ir.msl b/test/tint/var/initialization/workgroup/scalar.wgsl.expected.ir.msl
index e655faa..e1f46e9 100644
--- a/test/tint/var/initialization/workgroup/scalar.wgsl.expected.ir.msl
+++ b/test/tint/var/initialization/workgroup/scalar.wgsl.expected.ir.msl
@@ -4,5 +4,27 @@
 using namespace metal;
 
 threadgroup int v;
-void tint_symbol() {
+kernel void tint_symbol(uint tint_local_index [[thread_index_in_threadgroup]]) {
+  if ((tint_local_index == 0u)) {
+    v = 0;
+  }
+  threadgroup_barrier(mem_flags::mem_threadgroup);
+  int const i = v;
 }
+program_source:4:17: error: program scope variable must reside in constant address space
+threadgroup int v;
+                ^
+program_source:6:25: warning: equality comparison with extraneous parentheses [-Wparentheses-equality]
+  if ((tint_local_index == 0u)) {
+       ~~~~~~~~~~~~~~~~~^~~~~
+program_source:6:25: note: remove extraneous parentheses around the comparison to silence this warning
+  if ((tint_local_index == 0u)) {
+      ~                 ^    ~
+program_source:6:25: note: use '=' to turn this equality comparison into an assignment
+  if ((tint_local_index == 0u)) {
+                        ^~
+                        =
+program_source:10:13: warning: unused variable 'i' [-Wunused-variable]
+  int const i = v;
+            ^
+
diff --git a/test/tint/var/initialization/workgroup/struct.wgsl.expected.ir.msl b/test/tint/var/initialization/workgroup/struct.wgsl.expected.ir.msl
index 90e81f0..6655af9 100644
--- a/test/tint/var/initialization/workgroup/struct.wgsl.expected.ir.msl
+++ b/test/tint/var/initialization/workgroup/struct.wgsl.expected.ir.msl
@@ -8,5 +8,23 @@
 };
 
 threadgroup S v;
-void tint_symbol() {
+kernel void tint_symbol(uint tint_local_index [[thread_index_in_threadgroup]]) {
+  if ((tint_local_index == 0u)) {
+    v = S{};
+  }
+  threadgroup_barrier(mem_flags::mem_threadgroup);
 }
+program_source:8:15: error: program scope variable must reside in constant address space
+threadgroup S v;
+              ^
+program_source:10:25: warning: equality comparison with extraneous parentheses [-Wparentheses-equality]
+  if ((tint_local_index == 0u)) {
+       ~~~~~~~~~~~~~~~~~^~~~~
+program_source:10:25: note: remove extraneous parentheses around the comparison to silence this warning
+  if ((tint_local_index == 0u)) {
+      ~                 ^    ~
+program_source:10:25: note: use '=' to turn this equality comparison into an assignment
+  if ((tint_local_index == 0u)) {
+                        ^~
+                        =
+
diff --git a/test/tint/var/initialization/workgroup/vector.wgsl.expected.ir.msl b/test/tint/var/initialization/workgroup/vector.wgsl.expected.ir.msl
index b55a175..a8308b3 100644
--- a/test/tint/var/initialization/workgroup/vector.wgsl.expected.ir.msl
+++ b/test/tint/var/initialization/workgroup/vector.wgsl.expected.ir.msl
@@ -4,5 +4,23 @@
 using namespace metal;
 
 threadgroup int3 v;
-void tint_symbol() {
+kernel void tint_symbol(uint tint_local_index [[thread_index_in_threadgroup]]) {
+  if ((tint_local_index == 0u)) {
+    v = int3(0);
+  }
+  threadgroup_barrier(mem_flags::mem_threadgroup);
 }
+program_source:4:18: error: program scope variable must reside in constant address space
+threadgroup int3 v;
+                 ^
+program_source:6:25: warning: equality comparison with extraneous parentheses [-Wparentheses-equality]
+  if ((tint_local_index == 0u)) {
+       ~~~~~~~~~~~~~~~~~^~~~~
+program_source:6:25: note: remove extraneous parentheses around the comparison to silence this warning
+  if ((tint_local_index == 0u)) {
+      ~                 ^    ~
+program_source:6:25: note: use '=' to turn this equality comparison into an assignment
+  if ((tint_local_index == 0u)) {
+                        ^~
+                        =
+
diff --git a/test/tint/var/uses/instance_index.wgsl.expected.ir.msl b/test/tint/var/uses/instance_index.wgsl.expected.ir.msl
new file mode 100644
index 0000000..69f37a7
--- /dev/null
+++ b/test/tint/var/uses/instance_index.wgsl.expected.ir.msl
@@ -0,0 +1,12 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+using namespace metal;
+
+vertex float4 tint_symbol(uint b [[]]) {
+  return float4(float(b));
+}
+program_source:4:27: error: invalid type 'uint' (aka 'unsigned int') for input declaration in a vertex function
+vertex float4 tint_symbol(uint b [[]]) {
+                          ^~~~~~
+
diff --git a/test/tint/var/uses/many_workgroup_vars.wgsl.expected.ir.msl b/test/tint/var/uses/many_workgroup_vars.wgsl.expected.ir.msl
index 28251dc..81f00cc 100644
--- a/test/tint/var/uses/many_workgroup_vars.wgsl.expected.ir.msl
+++ b/test/tint/var/uses/many_workgroup_vars.wgsl.expected.ir.msl
@@ -1,9 +1,621 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+threadgroup float2x2 m00;
+threadgroup float2x2 m01;
+threadgroup float2x2 m02;
+threadgroup float2x2 m03;
+threadgroup float2x2 m04;
+threadgroup float2x2 m05;
+threadgroup float2x2 m06;
+threadgroup float2x2 m07;
+threadgroup float2x2 m08;
+threadgroup float2x2 m09;
+threadgroup float2x2 m10;
+threadgroup float2x2 m11;
+threadgroup float2x2 m12;
+threadgroup float2x2 m13;
+threadgroup float2x2 m14;
+threadgroup float2x2 m15;
+threadgroup float2x2 m16;
+threadgroup float2x2 m17;
+threadgroup float2x2 m18;
+threadgroup float2x2 m19;
+threadgroup float2x2 m20;
+threadgroup float2x2 m21;
+threadgroup float2x2 m22;
+threadgroup float2x2 m23;
+threadgroup float2x2 m24;
+threadgroup float2x2 m25;
+threadgroup float2x2 m26;
+threadgroup float2x2 m27;
+threadgroup float2x2 m28;
+threadgroup float2x2 m29;
+threadgroup float2x2 m30;
+threadgroup float2x2 m31;
+threadgroup float2x2 m32;
+threadgroup float2x2 m33;
+threadgroup float2x2 m34;
+threadgroup float2x2 m35;
+threadgroup float2x2 m36;
+threadgroup float2x2 m37;
+threadgroup float2x2 m38;
+threadgroup float2x2 m39;
+threadgroup float2x2 m40;
+threadgroup float2x2 m41;
+threadgroup float2x2 m42;
+threadgroup float2x2 m43;
+threadgroup float2x2 m44;
+threadgroup float2x2 m45;
+threadgroup float2x2 m46;
+threadgroup float2x2 m47;
+threadgroup float2x2 m48;
+threadgroup float2x2 m49;
+threadgroup float2x2 m50;
+threadgroup float2x2 m51;
+threadgroup float2x2 m52;
+threadgroup float2x2 m53;
+threadgroup float2x2 m54;
+threadgroup float2x2 m55;
+threadgroup float2x2 m56;
+threadgroup float2x2 m57;
+threadgroup float2x2 m58;
+threadgroup float2x2 m59;
+threadgroup float2x2 m60;
+threadgroup float2x2 m61;
+threadgroup float2x2 m62;
+threadgroup float2x2 m63;
+threadgroup float2x2 m64;
+threadgroup float2x2 m65;
+threadgroup float2x2 m66;
+threadgroup float2x2 m67;
+threadgroup float2x2 m68;
+threadgroup float2x2 m69;
+threadgroup float2x2 m70;
+threadgroup float2x2 m71;
+threadgroup float2x2 m72;
+threadgroup float2x2 m73;
+threadgroup float2x2 m74;
+threadgroup float2x2 m75;
+threadgroup float2x2 m76;
+threadgroup float2x2 m77;
+threadgroup float2x2 m78;
+threadgroup float2x2 m79;
+threadgroup float2x2 m80;
+threadgroup float2x2 m81;
+threadgroup float2x2 m82;
+threadgroup float2x2 m83;
+threadgroup float2x2 m84;
+threadgroup float2x2 m85;
+threadgroup float2x2 m86;
+threadgroup float2x2 m87;
+threadgroup float2x2 m88;
+threadgroup float2x2 m89;
+threadgroup float2x2 m90;
+threadgroup float2x2 m91;
+threadgroup float2x2 m92;
+threadgroup float2x2 m93;
+threadgroup float2x2 m94;
+threadgroup float2x2 m95;
+threadgroup float2x2 m96;
+threadgroup float2x2 m97;
+threadgroup float2x2 m98;
+threadgroup float2x2 m99;
+kernel void tint_symbol(uint idx [[thread_index_in_threadgroup]]) {
+  if ((idx == 0u)) {
+    m00 = float2x2(float2(0.0f), float2(0.0f));
+    m01 = float2x2(float2(0.0f), float2(0.0f));
+    m02 = float2x2(float2(0.0f), float2(0.0f));
+    m03 = float2x2(float2(0.0f), float2(0.0f));
+    m04 = float2x2(float2(0.0f), float2(0.0f));
+    m05 = float2x2(float2(0.0f), float2(0.0f));
+    m06 = float2x2(float2(0.0f), float2(0.0f));
+    m07 = float2x2(float2(0.0f), float2(0.0f));
+    m08 = float2x2(float2(0.0f), float2(0.0f));
+    m09 = float2x2(float2(0.0f), float2(0.0f));
+    m10 = float2x2(float2(0.0f), float2(0.0f));
+    m11 = float2x2(float2(0.0f), float2(0.0f));
+    m12 = float2x2(float2(0.0f), float2(0.0f));
+    m13 = float2x2(float2(0.0f), float2(0.0f));
+    m14 = float2x2(float2(0.0f), float2(0.0f));
+    m15 = float2x2(float2(0.0f), float2(0.0f));
+    m16 = float2x2(float2(0.0f), float2(0.0f));
+    m17 = float2x2(float2(0.0f), float2(0.0f));
+    m18 = float2x2(float2(0.0f), float2(0.0f));
+    m19 = float2x2(float2(0.0f), float2(0.0f));
+    m20 = float2x2(float2(0.0f), float2(0.0f));
+    m21 = float2x2(float2(0.0f), float2(0.0f));
+    m22 = float2x2(float2(0.0f), float2(0.0f));
+    m23 = float2x2(float2(0.0f), float2(0.0f));
+    m24 = float2x2(float2(0.0f), float2(0.0f));
+    m25 = float2x2(float2(0.0f), float2(0.0f));
+    m26 = float2x2(float2(0.0f), float2(0.0f));
+    m27 = float2x2(float2(0.0f), float2(0.0f));
+    m28 = float2x2(float2(0.0f), float2(0.0f));
+    m29 = float2x2(float2(0.0f), float2(0.0f));
+    m30 = float2x2(float2(0.0f), float2(0.0f));
+    m31 = float2x2(float2(0.0f), float2(0.0f));
+    m32 = float2x2(float2(0.0f), float2(0.0f));
+    m33 = float2x2(float2(0.0f), float2(0.0f));
+    m34 = float2x2(float2(0.0f), float2(0.0f));
+    m35 = float2x2(float2(0.0f), float2(0.0f));
+    m36 = float2x2(float2(0.0f), float2(0.0f));
+    m37 = float2x2(float2(0.0f), float2(0.0f));
+    m38 = float2x2(float2(0.0f), float2(0.0f));
+    m39 = float2x2(float2(0.0f), float2(0.0f));
+    m40 = float2x2(float2(0.0f), float2(0.0f));
+    m41 = float2x2(float2(0.0f), float2(0.0f));
+    m42 = float2x2(float2(0.0f), float2(0.0f));
+    m43 = float2x2(float2(0.0f), float2(0.0f));
+    m44 = float2x2(float2(0.0f), float2(0.0f));
+    m45 = float2x2(float2(0.0f), float2(0.0f));
+    m46 = float2x2(float2(0.0f), float2(0.0f));
+    m47 = float2x2(float2(0.0f), float2(0.0f));
+    m48 = float2x2(float2(0.0f), float2(0.0f));
+    m49 = float2x2(float2(0.0f), float2(0.0f));
+    m50 = float2x2(float2(0.0f), float2(0.0f));
+    m51 = float2x2(float2(0.0f), float2(0.0f));
+    m52 = float2x2(float2(0.0f), float2(0.0f));
+    m53 = float2x2(float2(0.0f), float2(0.0f));
+    m54 = float2x2(float2(0.0f), float2(0.0f));
+    m55 = float2x2(float2(0.0f), float2(0.0f));
+    m56 = float2x2(float2(0.0f), float2(0.0f));
+    m57 = float2x2(float2(0.0f), float2(0.0f));
+    m58 = float2x2(float2(0.0f), float2(0.0f));
+    m59 = float2x2(float2(0.0f), float2(0.0f));
+    m60 = float2x2(float2(0.0f), float2(0.0f));
+    m61 = float2x2(float2(0.0f), float2(0.0f));
+    m62 = float2x2(float2(0.0f), float2(0.0f));
+    m63 = float2x2(float2(0.0f), float2(0.0f));
+    m64 = float2x2(float2(0.0f), float2(0.0f));
+    m65 = float2x2(float2(0.0f), float2(0.0f));
+    m66 = float2x2(float2(0.0f), float2(0.0f));
+    m67 = float2x2(float2(0.0f), float2(0.0f));
+    m68 = float2x2(float2(0.0f), float2(0.0f));
+    m69 = float2x2(float2(0.0f), float2(0.0f));
+    m70 = float2x2(float2(0.0f), float2(0.0f));
+    m71 = float2x2(float2(0.0f), float2(0.0f));
+    m72 = float2x2(float2(0.0f), float2(0.0f));
+    m73 = float2x2(float2(0.0f), float2(0.0f));
+    m74 = float2x2(float2(0.0f), float2(0.0f));
+    m75 = float2x2(float2(0.0f), float2(0.0f));
+    m76 = float2x2(float2(0.0f), float2(0.0f));
+    m77 = float2x2(float2(0.0f), float2(0.0f));
+    m78 = float2x2(float2(0.0f), float2(0.0f));
+    m79 = float2x2(float2(0.0f), float2(0.0f));
+    m80 = float2x2(float2(0.0f), float2(0.0f));
+    m81 = float2x2(float2(0.0f), float2(0.0f));
+    m82 = float2x2(float2(0.0f), float2(0.0f));
+    m83 = float2x2(float2(0.0f), float2(0.0f));
+    m84 = float2x2(float2(0.0f), float2(0.0f));
+    m85 = float2x2(float2(0.0f), float2(0.0f));
+    m86 = float2x2(float2(0.0f), float2(0.0f));
+    m87 = float2x2(float2(0.0f), float2(0.0f));
+    m88 = float2x2(float2(0.0f), float2(0.0f));
+    m89 = float2x2(float2(0.0f), float2(0.0f));
+    m90 = float2x2(float2(0.0f), float2(0.0f));
+    m91 = float2x2(float2(0.0f), float2(0.0f));
+    m92 = float2x2(float2(0.0f), float2(0.0f));
+    m93 = float2x2(float2(0.0f), float2(0.0f));
+    m94 = float2x2(float2(0.0f), float2(0.0f));
+    m95 = float2x2(float2(0.0f), float2(0.0f));
+    m96 = float2x2(float2(0.0f), float2(0.0f));
+    m97 = float2x2(float2(0.0f), float2(0.0f));
+    m98 = float2x2(float2(0.0f), float2(0.0f));
+    m99 = float2x2(float2(0.0f), float2(0.0f));
+  }
+  threadgroup_barrier(mem_flags::mem_threadgroup);
+  m00[0][0] = 1.0f;
+  m01[0][0] = 1.0f;
+  m02[0][0] = 1.0f;
+  m03[0][0] = 1.0f;
+  m04[0][0] = 1.0f;
+  m05[0][0] = 1.0f;
+  m06[0][0] = 1.0f;
+  m07[0][0] = 1.0f;
+  m08[0][0] = 1.0f;
+  m09[0][0] = 1.0f;
+  m10[0][0] = 1.0f;
+  m11[0][0] = 1.0f;
+  m12[0][0] = 1.0f;
+  m13[0][0] = 1.0f;
+  m14[0][0] = 1.0f;
+  m15[0][0] = 1.0f;
+  m16[0][0] = 1.0f;
+  m17[0][0] = 1.0f;
+  m18[0][0] = 1.0f;
+  m19[0][0] = 1.0f;
+  m20[0][0] = 1.0f;
+  m21[0][0] = 1.0f;
+  m22[0][0] = 1.0f;
+  m23[0][0] = 1.0f;
+  m24[0][0] = 1.0f;
+  m25[0][0] = 1.0f;
+  m26[0][0] = 1.0f;
+  m27[0][0] = 1.0f;
+  m28[0][0] = 1.0f;
+  m29[0][0] = 1.0f;
+  m30[0][0] = 1.0f;
+  m31[0][0] = 1.0f;
+  m32[0][0] = 1.0f;
+  m33[0][0] = 1.0f;
+  m34[0][0] = 1.0f;
+  m35[0][0] = 1.0f;
+  m36[0][0] = 1.0f;
+  m37[0][0] = 1.0f;
+  m38[0][0] = 1.0f;
+  m39[0][0] = 1.0f;
+  m40[0][0] = 1.0f;
+  m41[0][0] = 1.0f;
+  m42[0][0] = 1.0f;
+  m43[0][0] = 1.0f;
+  m44[0][0] = 1.0f;
+  m45[0][0] = 1.0f;
+  m46[0][0] = 1.0f;
+  m47[0][0] = 1.0f;
+  m48[0][0] = 1.0f;
+  m49[0][0] = 1.0f;
+  m50[0][0] = 1.0f;
+  m51[0][0] = 1.0f;
+  m52[0][0] = 1.0f;
+  m53[0][0] = 1.0f;
+  m54[0][0] = 1.0f;
+  m55[0][0] = 1.0f;
+  m56[0][0] = 1.0f;
+  m57[0][0] = 1.0f;
+  m58[0][0] = 1.0f;
+  m59[0][0] = 1.0f;
+  m60[0][0] = 1.0f;
+  m61[0][0] = 1.0f;
+  m62[0][0] = 1.0f;
+  m63[0][0] = 1.0f;
+  m64[0][0] = 1.0f;
+  m65[0][0] = 1.0f;
+  m66[0][0] = 1.0f;
+  m67[0][0] = 1.0f;
+  m68[0][0] = 1.0f;
+  m69[0][0] = 1.0f;
+  m70[0][0] = 1.0f;
+  m71[0][0] = 1.0f;
+  m72[0][0] = 1.0f;
+  m73[0][0] = 1.0f;
+  m74[0][0] = 1.0f;
+  m75[0][0] = 1.0f;
+  m76[0][0] = 1.0f;
+  m77[0][0] = 1.0f;
+  m78[0][0] = 1.0f;
+  m79[0][0] = 1.0f;
+  m80[0][0] = 1.0f;
+  m81[0][0] = 1.0f;
+  m82[0][0] = 1.0f;
+  m83[0][0] = 1.0f;
+  m84[0][0] = 1.0f;
+  m85[0][0] = 1.0f;
+  m86[0][0] = 1.0f;
+  m87[0][0] = 1.0f;
+  m88[0][0] = 1.0f;
+  m89[0][0] = 1.0f;
+  m90[0][0] = 1.0f;
+  m91[0][0] = 1.0f;
+  m92[0][0] = 1.0f;
+  m93[0][0] = 1.0f;
+  m94[0][0] = 1.0f;
+  m95[0][0] = 1.0f;
+  m96[0][0] = 1.0f;
+  m97[0][0] = 1.0f;
+  m98[0][0] = 1.0f;
+  m99[0][0] = 1.0f;
+}
+program_source:4:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m00;
+                     ^
+program_source:5:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m01;
+                     ^
+program_source:6:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m02;
+                     ^
+program_source:7:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m03;
+                     ^
+program_source:8:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m04;
+                     ^
+program_source:9:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m05;
+                     ^
+program_source:10:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m06;
+                     ^
+program_source:11:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m07;
+                     ^
+program_source:12:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m08;
+                     ^
+program_source:13:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m09;
+                     ^
+program_source:14:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m10;
+                     ^
+program_source:15:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m11;
+                     ^
+program_source:16:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m12;
+                     ^
+program_source:17:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m13;
+                     ^
+program_source:18:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m14;
+                     ^
+program_source:19:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m15;
+                     ^
+program_source:20:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m16;
+                     ^
+program_source:21:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m17;
+                     ^
+program_source:22:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m18;
+                     ^
+program_source:23:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m19;
+                     ^
+program_source:24:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m20;
+                     ^
+program_source:25:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m21;
+                     ^
+program_source:26:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m22;
+                     ^
+program_source:27:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m23;
+                     ^
+program_source:28:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m24;
+                     ^
+program_source:29:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m25;
+                     ^
+program_source:30:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m26;
+                     ^
+program_source:31:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m27;
+                     ^
+program_source:32:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m28;
+                     ^
+program_source:33:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m29;
+                     ^
+program_source:34:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m30;
+                     ^
+program_source:35:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m31;
+                     ^
+program_source:36:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m32;
+                     ^
+program_source:37:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m33;
+                     ^
+program_source:38:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m34;
+                     ^
+program_source:39:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m35;
+                     ^
+program_source:40:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m36;
+                     ^
+program_source:41:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m37;
+                     ^
+program_source:42:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m38;
+                     ^
+program_source:43:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m39;
+                     ^
+program_source:44:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m40;
+                     ^
+program_source:45:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m41;
+                     ^
+program_source:46:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m42;
+                     ^
+program_source:47:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m43;
+                     ^
+program_source:48:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m44;
+                     ^
+program_source:49:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m45;
+                     ^
+program_source:50:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m46;
+                     ^
+program_source:51:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m47;
+                     ^
+program_source:52:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m48;
+                     ^
+program_source:53:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m49;
+                     ^
+program_source:54:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m50;
+                     ^
+program_source:55:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m51;
+                     ^
+program_source:56:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m52;
+                     ^
+program_source:57:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m53;
+                     ^
+program_source:58:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m54;
+                     ^
+program_source:59:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m55;
+                     ^
+program_source:60:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m56;
+                     ^
+program_source:61:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m57;
+                     ^
+program_source:62:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m58;
+                     ^
+program_source:63:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m59;
+                     ^
+program_source:64:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m60;
+                     ^
+program_source:65:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m61;
+                     ^
+program_source:66:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m62;
+                     ^
+program_source:67:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m63;
+                     ^
+program_source:68:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m64;
+                     ^
+program_source:69:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m65;
+                     ^
+program_source:70:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m66;
+                     ^
+program_source:71:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m67;
+                     ^
+program_source:72:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m68;
+                     ^
+program_source:73:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m69;
+                     ^
+program_source:74:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m70;
+                     ^
+program_source:75:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m71;
+                     ^
+program_source:76:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m72;
+                     ^
+program_source:77:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m73;
+                     ^
+program_source:78:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m74;
+                     ^
+program_source:79:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m75;
+                     ^
+program_source:80:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m76;
+                     ^
+program_source:81:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m77;
+                     ^
+program_source:82:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m78;
+                     ^
+program_source:83:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m79;
+                     ^
+program_source:84:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m80;
+                     ^
+program_source:85:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m81;
+                     ^
+program_source:86:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m82;
+                     ^
+program_source:87:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m83;
+                     ^
+program_source:88:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m84;
+                     ^
+program_source:89:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m85;
+                     ^
+program_source:90:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m86;
+                     ^
+program_source:91:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m87;
+                     ^
+program_source:92:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m88;
+                     ^
+program_source:93:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m89;
+                     ^
+program_source:94:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m90;
+                     ^
+program_source:95:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m91;
+                     ^
+program_source:96:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m92;
+                     ^
+program_source:97:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m93;
+                     ^
+program_source:98:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m94;
+                     ^
+program_source:99:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m95;
+                     ^
+program_source:100:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m96;
+                     ^
+program_source:101:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m97;
+                     ^
+program_source:102:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m98;
+                     ^
+program_source:103:22: error: program scope variable must reside in constant address space
+threadgroup float2x2 m99;
+                     ^
+program_source:105:12: warning: equality comparison with extraneous parentheses [-Wparentheses-equality]
+  if ((idx == 0u)) {
+       ~~~~^~~~~
+program_source:105:12: note: remove extraneous parentheses around the comparison to silence this warning
+  if ((idx == 0u)) {
+      ~    ^    ~
+program_source:105:12: note: use '=' to turn this equality comparison into an assignment
+  if ((idx == 0u)) {
+           ^~
+           =
+
diff --git a/test/tint/var/uses/private.wgsl.expected.ir.msl b/test/tint/var/uses/private.wgsl.expected.ir.msl
index efdd3b1..76b0ba4 100644
--- a/test/tint/var/uses/private.wgsl.expected.ir.msl
+++ b/test/tint/var/uses/private.wgsl.expected.ir.msl
@@ -1,9 +1,51 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+thread int a = 0;
+thread int b = 0;
+thread int c = 0;
+void uses_a() {
+  a = (a + 1);
+}
+void uses_b() {
+  b = (b * 2);
+}
+void uses_a_and_b() {
+  b = a;
+}
+void no_uses() {
+}
+void outer() {
+  a = 0;
+  uses_a();
+  uses_a_and_b();
+  uses_b();
+  no_uses();
+}
+kernel void main1() {
+  a = 42;
+  uses_a();
+}
+kernel void main2() {
+  b = 7;
+  uses_b();
+}
+kernel void main3() {
+  outer();
+  no_uses();
+}
+kernel void main4() {
+  no_uses();
+}
+program_source:4:12: error: program scope variable must reside in constant address space
+thread int a = 0;
+           ^
+program_source:5:12: error: program scope variable must reside in constant address space
+thread int b = 0;
+           ^
+program_source:6:12: error: program scope variable must reside in constant address space
+thread int c = 0;
+           ^
+
diff --git a/test/tint/var/uses/push_constant.wgsl.expected.ir.msl b/test/tint/var/uses/push_constant.wgsl.expected.ir.msl
index 09c2a25..1d684b4 100644
--- a/test/tint/var/uses/push_constant.wgsl.expected.ir.msl
+++ b/test/tint/var/uses/push_constant.wgsl.expected.ir.msl
@@ -1,49 +1,51 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
   %a:ptr<push_constant, i32, read_write> = var
   %b:ptr<push_constant, i32, read_write> = var
   %c:ptr<push_constant, i32, read_write> = var
 }
 
-%uses_a = func():void -> %b2 {
-  %b2 = block {
-    %foo:i32 = load %a
+%uses_a = func():void {
+  $B2: {
+    %5:i32 = load %a
+    %foo:i32 = let %5
     ret
   }
 }
-%uses_uses_a = func():void -> %b3 {
-  %b3 = block {
-    %7:void = call %uses_a
+%uses_uses_a = func():void {
+  $B3: {
+    %8:void = call %uses_a
     ret
   }
 }
-%uses_b = func():void -> %b4 {
-  %b4 = block {
-    %foo_1:i32 = load %b  # %foo_1: 'foo'
+%uses_b = func():void {
+  $B4: {
+    %10:i32 = load %b
+    %foo_1:i32 = let %10  # %foo_1: 'foo'
     ret
   }
 }
-%main1 = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
-  %b5 = block {
-    %11:void = call %uses_a
+%main1 = @compute @workgroup_size(1, 1, 1) func():void {
+  $B5: {
+    %13:void = call %uses_a
     ret
   }
 }
-%main2 = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {
-  %b6 = block {
-    %13:void = call %uses_uses_a
+%main2 = @compute @workgroup_size(1, 1, 1) func():void {
+  $B6: {
+    %15:void = call %uses_uses_a
     ret
   }
 }
-%main3 = @compute @workgroup_size(1, 1, 1) func():void -> %b7 {
-  %b7 = block {
-    %15:void = call %uses_b
+%main3 = @compute @workgroup_size(1, 1, 1) func():void {
+  $B7: {
+    %17:void = call %uses_b
     ret
   }
 }
-%main4 = @compute @workgroup_size(1, 1, 1) func():void -> %b8 {
-  %b8 = block {
+%main4 = @compute @workgroup_size(1, 1, 1) func():void {
+  $B8: {
     ret
   }
 }
diff --git a/test/tint/var/uses/push_constant_and_instance_index.wgsl.expected.ir.msl b/test/tint/var/uses/push_constant_and_instance_index.wgsl.expected.ir.msl
new file mode 100644
index 0000000..9d5b08e
--- /dev/null
+++ b/test/tint/var/uses/push_constant_and_instance_index.wgsl.expected.ir.msl
@@ -0,0 +1,24 @@
+SKIP: FAILED
+
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
+  %a:ptr<push_constant, f32, read_write> = var
+}
+
+%tint_symbol = @vertex func(%b:u32 [@instance_index]):vec4<f32> [@position] {
+  $B2: {
+    %4:f32 = load %a
+    %5:f32 = let %4
+    %6:f32 = convert %b
+    %7:f32 = add %5, %6
+    %8:vec4<f32> = construct %7
+    ret %8
+  }
+}
+
+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/var/uses/workgroup.wgsl.expected.ir.msl b/test/tint/var/uses/workgroup.wgsl.expected.ir.msl
index efdd3b1..2d8fe86 100644
--- a/test/tint/var/uses/workgroup.wgsl.expected.ir.msl
+++ b/test/tint/var/uses/workgroup.wgsl.expected.ir.msl
@@ -1,9 +1,94 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+
+threadgroup int a;
+threadgroup int b;
+threadgroup int c;
+void uses_a() {
+  a = (a + 1);
+}
+void uses_b() {
+  b = (b * 2);
+}
+void uses_a_and_b() {
+  b = a;
+}
+void no_uses() {
+}
+void outer() {
+  a = 0;
+  uses_a();
+  uses_a_and_b();
+  uses_b();
+  no_uses();
+}
+kernel void main1(uint tint_local_index [[thread_index_in_threadgroup]]) {
+  if ((tint_local_index == 0u)) {
+    a = 0;
+  }
+  threadgroup_barrier(mem_flags::mem_threadgroup);
+  a = 42;
+  uses_a();
+}
+kernel void main2(uint tint_local_index [[thread_index_in_threadgroup]]) {
+  if ((tint_local_index == 0u)) {
+    b = 0;
+  }
+  threadgroup_barrier(mem_flags::mem_threadgroup);
+  b = 7;
+  uses_b();
+}
+kernel void main3(uint tint_local_index [[thread_index_in_threadgroup]]) {
+  if ((tint_local_index == 0u)) {
+    a = 0;
+    b = 0;
+  }
+  threadgroup_barrier(mem_flags::mem_threadgroup);
+  outer();
+  no_uses();
+}
+kernel void main4() {
+  no_uses();
+}
+program_source:4:17: error: program scope variable must reside in constant address space
+threadgroup int a;
+                ^
+program_source:5:17: error: program scope variable must reside in constant address space
+threadgroup int b;
+                ^
+program_source:6:17: error: program scope variable must reside in constant address space
+threadgroup int c;
+                ^
+program_source:26:25: warning: equality comparison with extraneous parentheses [-Wparentheses-equality]
+  if ((tint_local_index == 0u)) {
+       ~~~~~~~~~~~~~~~~~^~~~~
+program_source:26:25: note: remove extraneous parentheses around the comparison to silence this warning
+  if ((tint_local_index == 0u)) {
+      ~                 ^    ~
+program_source:26:25: note: use '=' to turn this equality comparison into an assignment
+  if ((tint_local_index == 0u)) {
+                        ^~
+                        =
+program_source:34:25: warning: equality comparison with extraneous parentheses [-Wparentheses-equality]
+  if ((tint_local_index == 0u)) {
+       ~~~~~~~~~~~~~~~~~^~~~~
+program_source:34:25: note: remove extraneous parentheses around the comparison to silence this warning
+  if ((tint_local_index == 0u)) {
+      ~                 ^    ~
+program_source:34:25: note: use '=' to turn this equality comparison into an assignment
+  if ((tint_local_index == 0u)) {
+                        ^~
+                        =
+program_source:42:25: warning: equality comparison with extraneous parentheses [-Wparentheses-equality]
+  if ((tint_local_index == 0u)) {
+       ~~~~~~~~~~~~~~~~~^~~~~
+program_source:42:25: note: remove extraneous parentheses around the comparison to silence this warning
+  if ((tint_local_index == 0u)) {
+      ~                 ^    ~
+program_source:42:25: note: use '=' to turn this equality comparison into an assignment
+  if ((tint_local_index == 0u)) {
+                        ^~
+                        =
+
diff --git a/test/tint/vk-gl-cts/api/descriptor_set/descriptor_set_layout_binding/layout_binding_order/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/api/descriptor_set/descriptor_set_layout_binding/layout_binding_order/0.spvasm.expected.ir.msl
index 2a2e113..9fbc5d1 100644
--- a/test/tint/vk-gl-cts/api/descriptor_set/descriptor_set_layout_binding/layout_binding_order/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/api/descriptor_set/descriptor_set_layout_binding/layout_binding_order/0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: result = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: result = struct @align(4) {
   res0:i32 @offset(0)
   res1:i32 @offset(4)
   res2:i32 @offset(8)
@@ -18,15 +18,15 @@
   data2:i32 @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_4:ptr<storage, result, read_write> = var @binding_point(0, 3)
   %x_6:ptr<uniform, block0, read> = var @binding_point(0, 0)
   %x_8:ptr<uniform, block1, read> = var @binding_point(0, 1)
   %x_10:ptr<uniform, block2, read> = var @binding_point(0, 2)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %6:ptr<storage, i32, read_write> = access %x_4, 0u
     %7:ptr<uniform, i32, read> = access %x_6, 0u
     %8:i32 = load %7
@@ -42,8 +42,8 @@
     ret
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %16:void = call %main_1
     ret
   }
diff --git a/test/tint/vk-gl-cts/api/descriptor_set/descriptor_set_layout_binding/layout_binding_order/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/api/descriptor_set/descriptor_set_layout_binding/layout_binding_order/0.wgsl.expected.ir.msl
index 69ea851..11752b8 100644
--- a/test/tint/vk-gl-cts/api/descriptor_set/descriptor_set_layout_binding/layout_binding_order/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/api/descriptor_set/descriptor_set_layout_binding/layout_binding_order/0.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: result = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: result = struct @align(4) {
   res0:i32 @offset(0)
   res1:i32 @offset(4)
   res2:i32 @offset(8)
@@ -18,33 +18,36 @@
   data2:i32 @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_4:ptr<storage, result, read_write> = var @binding_point(0, 3)
   %x_6:ptr<uniform, block0, read> = var @binding_point(0, 0)
   %x_8:ptr<uniform, block1, read> = var @binding_point(0, 1)
   %x_10:ptr<uniform, block2, read> = var @binding_point(0, 2)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %6:ptr<uniform, i32, read> = access %x_6, 0u
-    %x_25:i32 = load %6
-    %8:ptr<storage, i32, read_write> = access %x_4, 0u
-    store %8, %x_25
-    %9:ptr<uniform, i32, read> = access %x_8, 0u
-    %x_28:i32 = load %9
-    %11:ptr<storage, i32, read_write> = access %x_4, 1u
-    store %11, %x_28
-    %12:ptr<uniform, i32, read> = access %x_10, 0u
-    %x_31:i32 = load %12
-    %14:ptr<storage, i32, read_write> = access %x_4, 2u
-    store %14, %x_31
+    %7:i32 = load %6
+    %x_25:i32 = let %7
+    %9:ptr<storage, i32, read_write> = access %x_4, 0u
+    store %9, %x_25
+    %10:ptr<uniform, i32, read> = access %x_8, 0u
+    %11:i32 = load %10
+    %x_28:i32 = let %11
+    %13:ptr<storage, i32, read_write> = access %x_4, 1u
+    store %13, %x_28
+    %14:ptr<uniform, i32, read> = access %x_10, 0u
+    %15:i32 = load %14
+    %x_31:i32 = let %15
+    %17:ptr<storage, i32, read_write> = access %x_4, 2u
+    store %17, %x_31
     ret
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
-    %16:void = call %main_1
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
+    %19:void = call %main_1
     ret
   }
 }
diff --git a/test/tint/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_compute/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_compute/0.spvasm.expected.ir.msl
index 23a32b4..2cee44b 100644
--- a/test/tint/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_compute/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_compute/0.spvasm.expected.ir.msl
@@ -1,22 +1,22 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: block0 = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: block0 = struct @align(16) {
   data:vec4<f32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_4:ptr<storage, block0, read_write> = var @binding_point(0, 1)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %3:ptr<storage, vec4<f32>, read_write> = access %x_4, 0u
     store %3, vec4<f32>(1.0f, 2.0f, 3.0f, 4.0f)
     ret
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %5:void = call %main_1
     ret
   }
diff --git a/test/tint/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_compute/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_compute/0.wgsl.expected.ir.msl
index 23a32b4..2cee44b 100644
--- a/test/tint/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_compute/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_compute/0.wgsl.expected.ir.msl
@@ -1,22 +1,22 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: block0 = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: block0 = struct @align(16) {
   data:vec4<f32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_4:ptr<storage, block0, read_write> = var @binding_point(0, 1)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %3:ptr<storage, vec4<f32>, read_write> = access %x_4, 0u
     store %3, vec4<f32>(1.0f, 2.0f, 3.0f, 4.0f)
     ret
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b3 {
-  %b3 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B3: {
     %5:void = call %main_1
     ret
   }
diff --git a/test/tint/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/0.spvasm.expected.ir.msl
index b35e11c..f0eaa7c 100644
--- a/test/tint/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: block0 = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: block0 = struct @align(16) {
   in_color:vec4<f32> @offset(0)
 }
 
@@ -9,15 +9,15 @@
   frag_color_1:vec4<f32> @offset(16), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %position_1:ptr<private, vec4<f32>, read_write> = var
   %frag_color:ptr<private, vec4<f32>, read_write> = var
   %x_8:ptr<uniform, block0, read> = var @binding_point(0, 1)
   %gl_Position:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %6:vec4<f32> = load %position_1
     store %gl_Position, %6
     %7:ptr<uniform, vec4<f32>, read> = access %x_8, 0u
@@ -26,8 +26,8 @@
     ret
   }
 }
-%tint_symbol = @vertex func(%position_1_param:vec4<f32> [@location(0)]):main_out -> %b3 {
-  %b3 = block {
+%tint_symbol = @vertex func(%position_1_param:vec4<f32> [@location(0)]):main_out {
+  $B3: {
     store %position_1, %position_1_param
     %11:void = call %main_1
     %12:vec4<f32> = load %gl_Position
diff --git a/test/tint/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/0.wgsl.expected.ir.msl
index b239463..90abc54 100644
--- a/test/tint/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/0.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: block0 = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: block0 = struct @align(16) {
   in_color:vec4<f32> @offset(0)
 }
 
@@ -9,31 +9,33 @@
   frag_color_1:vec4<f32> @offset(16), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %pos:ptr<private, vec4<f32>, read_write> = var
   %frag_color:ptr<private, vec4<f32>, read_write> = var
   %x_8:ptr<uniform, block0, read> = var @binding_point(0, 1)
   %gl_Position:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
-    %x_24:vec4<f32> = load %pos
+%main_1 = func():void {
+  $B2: {
+    %6:vec4<f32> = load %pos
+    %x_24:vec4<f32> = let %6
     store %gl_Position, %x_24
-    %7:ptr<uniform, vec4<f32>, read> = access %x_8, 0u
-    %x_27:vec4<f32> = load %7
+    %8:ptr<uniform, vec4<f32>, read> = access %x_8, 0u
+    %9:vec4<f32> = load %8
+    %x_27:vec4<f32> = let %9
     store %frag_color, %x_27
     ret
   }
 }
-%tint_symbol = @vertex func(%position_param:vec4<f32> [@location(0)]):main_out -> %b3 {
-  %b3 = block {
+%tint_symbol = @vertex func(%position_param:vec4<f32> [@location(0)]):main_out {
+  $B3: {
     store %pos, %position_param
-    %11:void = call %main_1
-    %12:vec4<f32> = load %gl_Position
-    %13:vec4<f32> = load %frag_color
-    %14:main_out = construct %12, %13
-    ret %14
+    %13:void = call %main_1
+    %14:vec4<f32> = load %gl_Position
+    %15:vec4<f32> = load %frag_color
+    %16:main_out = construct %14, %15
+    ret %16
   }
 }
 
diff --git a/test/tint/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/1.spvasm.expected.ir.msl
index efdd3b1..992ba70 100644
--- a/test/tint/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/1.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/1.spvasm.expected.ir.msl
@@ -1,6 +1,32 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(16) {
+  final_color_1:vec4<f32> @offset(0), @location(0)
+}
+
+$B1: {  # root
+  %final_color:ptr<private, vec4<f32>, read_write> = var
+  %frag_color:ptr<private, vec4<f32>, read_write> = var
+}
+
+%main_1 = func():void {
+  $B2: {
+    %4:vec4<f32> = load %frag_color
+    store %final_color, %4
+    ret
+  }
+}
+%tint_symbol = @fragment func(%frag_color_param:vec4<f32> [@location(0)]):main_out {
+  $B3: {
+    store %frag_color, %frag_color_param
+    %7:void = call %main_1
+    %8:vec4<f32> = load %final_color
+    %9:main_out = construct %8
+    ret %9
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/1.wgsl.expected.ir.msl
index efdd3b1..08031a5 100644
--- a/test/tint/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/1.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/1.wgsl.expected.ir.msl
@@ -1,6 +1,33 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(16) {
+  final_color_1:vec4<f32> @offset(0), @location(0)
+}
+
+$B1: {  # root
+  %final_color:ptr<private, vec4<f32>, read_write> = var
+  %frag_color:ptr<private, vec4<f32>, read_write> = var
+}
+
+%main_1 = func():void {
+  $B2: {
+    %4:vec4<f32> = load %frag_color
+    %x_12:vec4<f32> = let %4
+    store %final_color, %x_12
+    ret
+  }
+}
+%tint_symbol = @fragment func(%frag_color_param:vec4<f32> [@location(0)]):main_out {
+  $B3: {
+    store %frag_color, %frag_color_param
+    %8:void = call %main_1
+    %9:vec4<f32> = load %final_color
+    %10:main_out = construct %9
+    ret %10
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/combined_operations/negintdivand/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/combined_operations/negintdivand/0-opt.spvasm.expected.ir.msl
index efdd3b1..a3036cb 100644
--- a/test/tint/vk-gl-cts/combined_operations/negintdivand/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/combined_operations/negintdivand/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,38 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(16) {
+  gl_Position:vec4<f32> @offset(0), @builtin(position)
+  frag_color_1:vec4<f32> @offset(16), @location(1)
+}
+
+$B1: {  # root
+  %position_1:ptr<private, vec4<f32>, read_write> = var
+  %frag_color:ptr<private, vec4<f32>, read_write> = var
+  %gl_Position:ptr<private, vec4<f32>, read_write> = var
+}
+
+%main_1 = func():void {
+  $B2: {
+    %5:vec4<f32> = load %position_1
+    store %gl_Position, %5
+    %6:vec4<f32> = load %position_1
+    %7:vec4<f32> = mul %6, 0.5f
+    store %frag_color, %7
+    ret
+  }
+}
+%tint_symbol = @vertex func(%position_1_param:vec4<f32> [@location(0)]):main_out {
+  $B3: {
+    store %position_1, %position_1_param
+    %10:void = call %main_1
+    %11:vec4<f32> = load %gl_Position
+    %12:vec4<f32> = load %frag_color
+    %13:main_out = construct %11, %12
+    ret %13
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/combined_operations/negintdivand/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/combined_operations/negintdivand/0-opt.wgsl.expected.ir.msl
index efdd3b1..b4d04a0 100644
--- a/test/tint/vk-gl-cts/combined_operations/negintdivand/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/combined_operations/negintdivand/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,40 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(16) {
+  gl_Position:vec4<f32> @offset(0), @builtin(position)
+  frag_color_1:vec4<f32> @offset(16), @location(1)
+}
+
+$B1: {  # root
+  %pos:ptr<private, vec4<f32>, read_write> = var
+  %frag_color:ptr<private, vec4<f32>, read_write> = var
+  %gl_Position:ptr<private, vec4<f32>, read_write> = var
+}
+
+%main_1 = func():void {
+  $B2: {
+    %5:vec4<f32> = load %pos
+    %x_21:vec4<f32> = let %5
+    store %gl_Position, %x_21
+    %7:vec4<f32> = load %pos
+    %x_23:vec4<f32> = let %7
+    %9:vec4<f32> = mul %x_23, 0.5f
+    store %frag_color, %9
+    ret
+  }
+}
+%tint_symbol = @vertex func(%position_param:vec4<f32> [@location(0)]):main_out {
+  $B3: {
+    store %pos, %position_param
+    %12:void = call %main_1
+    %13:vec4<f32> = load %gl_Position
+    %14:vec4<f32> = load %frag_color
+    %15:main_out = construct %13, %14
+    ret %15
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/combined_operations/negintdivand/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/combined_operations/negintdivand/1.spvasm.expected.ir.msl
index 94e248c..3562db2 100644
--- a/test/tint/vk-gl-cts/combined_operations/negintdivand/1.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/combined_operations/negintdivand/1.spvasm.expected.ir.msl
@@ -1,6 +1,72 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Swizzle
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(16) {
+  color_out_1:vec4<f32> @offset(0), @location(0)
+}
+
+$B1: {  # root
+  %frag_color:ptr<private, vec4<f32>, read_write> = var
+  %color_out:ptr<private, vec4<f32>, read_write> = var
+}
+
+%main_1 = func():void {
+  $B2: {
+    %iv:ptr<function, vec2<i32>, read_write> = var
+    %5:vec4<f32> = load %frag_color
+    %6:vec2<f32> = swizzle %5, xy
+    %7:vec2<f32> = mul %6, 256.0f
+    %8:vec2<i32> = call %tint_v2f32_to_v2i32, %7
+    store %iv, %8
+    %10:i32 = load_vector_element %iv, 1u
+    %11:i32 = call %tint_div_i32, %10, 2i
+    %13:i32 = and %11, 64i
+    %14:bool = eq %13, 64i
+    if %14 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        store %color_out, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        exit_if  # if_1
+      }
+      $B4: {  # false
+        store %color_out, vec4<f32>(0.0f, 1.0f, 1.0f, 1.0f)
+        exit_if  # if_1
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func(%frag_color_param:vec4<f32> [@location(1)]):main_out {
+  $B5: {
+    store %frag_color, %frag_color_param
+    %17:void = call %main_1
+    %18:vec4<f32> = load %color_out
+    %19:main_out = construct %18
+    ret %19
+  }
+}
+%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B6: {
+    %22:bool = eq %rhs, 0i
+    %23:bool = eq %lhs, -2147483648i
+    %24:bool = eq %rhs, -1i
+    %25:bool = and %23, %24
+    %26:bool = or %22, %25
+    %27:i32 = select %rhs, 1i, %26
+    %28:i32 = div %lhs, %27
+    ret %28
+  }
+}
+%tint_v2f32_to_v2i32 = func(%value:vec2<f32>):vec2<i32> {
+  $B7: {
+    %30:vec2<i32> = convert %value
+    %31:vec2<bool> = gte %value, vec2<f32>(-2147483648.0f)
+    %32:vec2<i32> = select vec2<i32>(-2147483648i), %30, %31
+    %33:vec2<bool> = lte %value, vec2<f32>(2147483520.0f)
+    %34:vec2<i32> = select vec2<i32>(2147483647i), %32, %33
+    ret %34
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/combined_operations/negintdivand/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/combined_operations/negintdivand/1.wgsl.expected.ir.msl
index 28251dc..792cc4a 100644
--- a/test/tint/vk-gl-cts/combined_operations/negintdivand/1.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/combined_operations/negintdivand/1.wgsl.expected.ir.msl
@@ -1,6 +1,76 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(16) {
+  color_out_1:vec4<f32> @offset(0), @location(0)
+}
+
+$B1: {  # root
+  %frag_color:ptr<private, vec4<f32>, read_write> = var
+  %color_out:ptr<private, vec4<f32>, read_write> = var
+}
+
+%main_1 = func():void {
+  $B2: {
+    %iv:ptr<function, vec2<i32>, read_write> = var
+    %5:vec4<f32> = load %frag_color
+    %x_28:vec4<f32> = let %5
+    %7:f32 = access %x_28, 0u
+    %8:f32 = access %x_28, 1u
+    %9:vec2<f32> = construct %7, %8
+    %10:vec2<f32> = mul %9, 256.0f
+    %11:vec2<i32> = call %tint_v2f32_to_v2i32, %10
+    store %iv, %11
+    %13:i32 = load_vector_element %iv, 1u
+    %x_33:i32 = let %13
+    %15:i32 = call %tint_div_i32, %x_33, 2i
+    %17:i32 = and %15, 64i
+    %18:bool = eq %17, 64i
+    if %18 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        store %color_out, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        exit_if  # if_1
+      }
+      $B4: {  # false
+        store %color_out, vec4<f32>(0.0f, 1.0f, 1.0f, 1.0f)
+        exit_if  # if_1
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func(%frag_color_param:vec4<f32> [@location(1)]):main_out {
+  $B5: {
+    store %frag_color, %frag_color_param
+    %21:void = call %main_1
+    %22:vec4<f32> = load %color_out
+    %23:main_out = construct %22
+    ret %23
+  }
+}
+%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B6: {
+    %26:bool = eq %rhs, 0i
+    %27:bool = eq %lhs, -2147483648i
+    %28:bool = eq %rhs, -1i
+    %29:bool = and %27, %28
+    %30:bool = or %26, %29
+    %31:i32 = select %rhs, 1i, %30
+    %32:i32 = div %lhs, %31
+    ret %32
+  }
+}
+%tint_v2f32_to_v2i32 = func(%value:vec2<f32>):vec2<i32> {
+  $B7: {
+    %34:vec2<i32> = convert %value
+    %35:vec2<bool> = gte %value, vec2<f32>(-2147483648.0f)
+    %36:vec2<i32> = select vec2<i32>(-2147483648i), %34, %35
+    %37:vec2<bool> = lte %value, vec2<f32>(2147483520.0f)
+    %38:vec2<i32> = select vec2<i32>(2147483647i), %36, %37
+    ret %38
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/access-new-vector-inside-if-condition/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/access-new-vector-inside-if-condition/0-opt.spvasm.expected.ir.msl
index efdd3b1..40ec97c 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/access-new-vector-inside-if-condition/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/access-new-vector-inside-if-condition/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: min
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/access-new-vector-inside-if-condition/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/access-new-vector-inside-if-condition/0-opt.wgsl.expected.ir.msl
index efdd3b1..40ec97c 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/access-new-vector-inside-if-condition/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/access-new-vector-inside-if-condition/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: min
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/always-discarding-function/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/always-discarding-function/0-opt.spvasm.expected.ir.msl
index 2918302..0a7eaed 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/always-discarding-function/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/always-discarding-function/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -12,13 +12,14 @@
   nmb:array<i32, 1> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_11:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %x_24:ptr<function, array<i32, 1>, read_write> = var
     %x_68:ptr<function, bool, read_write> = var, false
     %x_17:ptr<function, i32, read_write> = var
@@ -28,49 +29,52 @@
     %x_69:ptr<function, bool, read_write> = var, false
     %tmp_float:ptr<function, f32, read_write> = var
     %color:ptr<function, vec3<f32>, read_write> = var
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3] {  # loop_1
+      $B3: {  # body
         %x_79:ptr<function, bool, read_write> = var
         %x_25:ptr<function, i32, read_write> = var
         %x_26:ptr<function, i32, read_write> = var
         %x_101:ptr<function, vec3<f32>, read_write> = var
-        %17:ptr<uniform, vec2<f32>, read> = access %x_11, 0u
-        %x_75:f32 = load_vector_element %17, 1u
+        %18:ptr<uniform, vec2<f32>, read> = access %x_11, 0u
+        %19:f32 = load_vector_element %18, 1u
+        %x_75:f32 = let %19
         store %tmp_float, %x_75
-        %x_76:vec3<f32> = construct %x_75
+        %21:vec3<f32> = construct %x_75
+        %x_76:vec3<f32> = let %21
         store %color, %x_76
         store %x_24, array<i32, 1>(0i)
         store %x_68, false
         store %x_79, false
-        loop [b: %b5, c: %b6] {  # loop_2
-          %b5 = block {  # body
+        loop [b: $B4] {  # loop_2
+          $B4: {  # body
             %x_21:ptr<function, i32, read_write> = var
             %x_93:ptr<function, bool, read_write> = var
             store %x_18, 1i
             store %x_21, 1i
-            loop [b: %b7, c: %b8] {  # loop_3
-              %b7 = block {  # body
+            loop [b: $B5, c: $B6] {  # loop_3
+              $B5: {  # body
                 store %x_25, 0i
-                %22:bool = load %x_79
-                store %x_93, %22
-                %23:i32 = load %x_21
-                %24:bool = gt %23, 10i
-                if %24 [t: %b9, f: %b10] {  # if_1
-                  %b9 = block {  # true
+                %25:bool = load %x_79
+                store %x_93, %25
+                %26:i32 = load %x_21
+                %27:bool = gt %26, 10i
+                if %27 [t: $B7, f: $B8] {  # if_1
+                  $B7: {  # true
                     exit_if  # if_1
                   }
-                  %b10 = block {  # false
+                  $B8: {  # false
                     exit_loop  # loop_3
                   }
                 }
-                %25:i32 = load %x_21
-                %x_22:i32 = sub %25, 1i
+                %28:i32 = load %x_21
+                %29:i32 = sub %28, 1i
+                %x_22:i32 = let %29
                 store %x_19, %x_22
-                %27:ptr<function, i32, read_write> = access %x_24, %x_22
-                %28:i32 = load %27
-                %29:bool = eq %28, 1i
-                if %29 [t: %b11] {  # if_2
-                  %b11 = block {  # true
+                %31:ptr<function, i32, read_write> = access %x_24, %x_22
+                %32:i32 = load %31
+                %33:bool = eq %32, 1i
+                if %33 [t: $B9] {  # if_2
+                  $B9: {  # true
                     store %x_68, true
                     store %x_17, 1i
                     store %x_25, 1i
@@ -79,18 +83,18 @@
                   }
                 }
                 store %x_18, %x_22
-                continue %b8
+                continue  # -> $B6
               }
-              %b8 = block {  # continuing
+              $B6: {  # continuing
                 store %x_21, %x_22
-                next_iteration %b7
+                next_iteration  # -> $B5
               }
             }
-            %30:i32 = load %x_25
-            store %x_26, %30
-            %31:bool = load %x_93
-            if %31 [t: %b12] {  # if_3
-              %b12 = block {  # true
+            %34:i32 = load %x_25
+            store %x_26, %34
+            %35:bool = load %x_93
+            if %35 [t: $B10] {  # if_3
+              $B10: {  # true
                 exit_loop  # loop_2
               }
             }
@@ -99,35 +103,31 @@
             store %x_26, -1i
             exit_loop  # loop_2
           }
-          %b6 = block {  # continuing
-            store %x_79, false
-            next_iteration %b5
-          }
         }
-        %32:i32 = load %x_26
-        store %x_20, %32
-        %33:i32 = load %x_26
-        %34:bool = eq %33, -1i
-        if %34 [t: %b13, f: %b14] {  # if_4
-          %b13 = block {  # true
-            discard
+        %36:i32 = load %x_26
+        store %x_20, %36
+        %37:i32 = load %x_26
+        %38:bool = eq %37, -1i
+        if %38 [t: $B11, f: $B12] {  # if_4
+          $B11: {  # true
+            store %continue_execution, false
             exit_if  # if_4
           }
-          %b14 = block {  # false
+          $B12: {  # false
             store %x_GLF_color, vec4<f32>(0.0f)
-            %35:f32 = access %x_76, 0u
-            %36:vec2<f32> = swizzle %x_76, yz
-            %37:vec2<f32> = add %36, vec2<f32>(1.0f)
-            %38:vec2<f32> = swizzle %37, xy
-            %39:vec3<f32> = construct %35, %38
-            store %x_101, %39
-            %40:vec3<f32> = load %x_101
-            store %color, %40
-            %41:ptr<uniform, vec2<f32>, read> = access %x_11, 0u
-            %42:f32 = load_vector_element %41, 0u
-            %43:bool = gt %42, 1.0f
-            if %43 [t: %b15] {  # if_5
-              %b15 = block {  # true
+            %39:f32 = access %x_76, 0u
+            %40:vec2<f32> = swizzle %x_76, yz
+            %41:vec2<f32> = add %40, vec2<f32>(1.0f)
+            %42:vec2<f32> = swizzle %41, xy
+            %43:vec3<f32> = construct %39, %42
+            store %x_101, %43
+            %44:vec3<f32> = load %x_101
+            store %color, %44
+            %45:ptr<uniform, vec2<f32>, read> = access %x_11, 0u
+            %46:f32 = load_vector_element %45, 0u
+            %47:bool = gt %46, 1.0f
+            if %47 [t: $B13] {  # if_5
+              $B13: {  # true
                 store %x_69, true
                 exit_loop  # loop_1
               }
@@ -135,31 +135,35 @@
             exit_if  # if_4
           }
         }
-        %44:f32 = load_vector_element %x_101, 0u
-        %45:f32 = load_vector_element %x_101, 1u
-        %46:f32 = load_vector_element %x_101, 2u
-        %47:vec4<f32> = construct %44, %45, %46, 1.0f
-        store %x_GLF_color, %47
+        %48:f32 = load_vector_element %x_101, 0u
+        %49:f32 = load_vector_element %x_101, 1u
+        %50:f32 = load_vector_element %x_101, 2u
+        %51:vec4<f32> = construct %48, %49, %50, 1.0f
+        store %x_GLF_color, %51
         store %x_69, true
         exit_loop  # loop_1
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
-      }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b16 {
-  %b16 = block {
-    %49:void = call %main_1
-    %50:vec4<f32> = load %x_GLF_color
-    %51:main_out = construct %50
-    ret %51
+%tint_symbol = @fragment func():main_out {
+  $B14: {
+    %53:void = call %main_1
+    %54:vec4<f32> = load %x_GLF_color
+    %55:main_out = construct %54
+    %56:bool = load %continue_execution
+    %57:bool = eq %56, false
+    if %57 [t: $B15] {  # if_6
+      $B15: {  # true
+        terminate_invocation
+      }
+    }
+    ret %55
   }
 }
-%binarySearch_struct_tmp_struct_i1_1_1_ = func(%obj:ptr<function, tmp_struct, read_write>):i32 -> %b17 {
-  %b17 = block {
+%binarySearch_struct_tmp_struct_i1_1_1_ = func(%obj:ptr<function, tmp_struct, read_write>):i32 {
+  $B16: {
     %x_112:ptr<function, bool, read_write> = var, false
     %x_16:ptr<function, i32, read_write> = var
     %one:ptr<function, i32, read_write> = var
@@ -168,35 +172,36 @@
     %x_27:ptr<function, i32, read_write> = var
     %x_28:ptr<function, i32, read_write> = var
     store %x_114, false
-    loop [b: %b18, c: %b19] {  # loop_4
-      %b18 = block {  # body
+    loop [b: $B17] {  # loop_4
+      $B17: {  # body
         %x_15:ptr<function, i32, read_write> = var
         %x_128:ptr<function, bool, read_write> = var
         store %one, 1i
         store %x_15, 1i
-        loop [b: %b20, c: %b21] {  # loop_5
-          %b20 = block {  # body
+        loop [b: $B18, c: $B19] {  # loop_5
+          $B18: {  # body
             store %x_27, 0i
-            %63:bool = load %x_114
-            store %x_128, %63
-            %64:i32 = load %x_15
-            %65:bool = gt %64, 10i
-            if %65 [t: %b22, f: %b23] {  # if_6
-              %b22 = block {  # true
-                exit_if  # if_6
+            %69:bool = load %x_114
+            store %x_128, %69
+            %70:i32 = load %x_15
+            %71:bool = gt %70, 10i
+            if %71 [t: $B20, f: $B21] {  # if_7
+              $B20: {  # true
+                exit_if  # if_7
               }
-              %b23 = block {  # false
+              $B21: {  # false
                 exit_loop  # loop_5
               }
             }
-            %66:i32 = load %x_15
-            %x_13:i32 = sub %66, 1i
+            %72:i32 = load %x_15
+            %73:i32 = sub %72, 1i
+            %x_13:i32 = let %73
             store %zero, %x_13
-            %68:ptr<function, i32, read_write> = access %obj, 0u, %x_13
-            %69:i32 = load %68
-            %70:bool = eq %69, 1i
-            if %70 [t: %b24] {  # if_7
-              %b24 = block {  # true
+            %75:ptr<function, i32, read_write> = access %obj, 0u, %x_13
+            %76:i32 = load %75
+            %77:bool = eq %76, 1i
+            if %77 [t: $B22] {  # if_8
+              $B22: {  # true
                 store %x_112, true
                 store %x_16, 1i
                 store %x_27, 1i
@@ -205,18 +210,18 @@
               }
             }
             store %one, %x_13
-            continue %b21
+            continue  # -> $B19
           }
-          %b21 = block {  # continuing
+          $B19: {  # continuing
             store %x_15, %x_13
-            next_iteration %b20
+            next_iteration  # -> $B18
           }
         }
-        %71:i32 = load %x_27
-        store %x_28, %71
-        %72:bool = load %x_128
-        if %72 [t: %b25] {  # if_8
-          %b25 = block {  # true
+        %78:i32 = load %x_27
+        store %x_28, %78
+        %79:bool = load %x_128
+        if %79 [t: $B23] {  # if_9
+          $B23: {  # true
             exit_loop  # loop_4
           }
         }
@@ -225,13 +230,9 @@
         store %x_28, -1i
         exit_loop  # loop_4
       }
-      %b19 = block {  # continuing
-        store %x_114, false
-        next_iteration %b18
-      }
     }
-    %73:i32 = load %x_28
-    ret %73
+    %80:i32 = load %x_28
+    ret %80
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/always-discarding-function/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/always-discarding-function/0-opt.wgsl.expected.ir.msl
index 5bc8e15..eeebc2a 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/always-discarding-function/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/always-discarding-function/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -12,13 +12,14 @@
   nmb:array<i32, 1> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_11:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %x_24:ptr<function, array<i32, 1>, read_write> = var
     %x_68:ptr<function, bool, read_write> = var, false
     %x_17:ptr<function, i32, read_write> = var
@@ -28,49 +29,55 @@
     %x_69:ptr<function, bool, read_write> = var, false
     %tmp_float:ptr<function, f32, read_write> = var
     %color:ptr<function, vec3<f32>, read_write> = var
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3] {  # loop_1
+      $B3: {  # body
         %x_25:ptr<function, i32, read_write> = var
         %x_101:ptr<function, vec3<f32>, read_write> = var
         %x_79_phi:ptr<function, bool, read_write> = var
         %x_26_phi:ptr<function, i32, read_write> = var
-        %17:ptr<uniform, vec2<f32>, read> = access %x_11, 0u
-        %x_75:f32 = load_vector_element %17, 1u
+        %18:ptr<uniform, vec2<f32>, read> = access %x_11, 0u
+        %19:f32 = load_vector_element %18, 1u
+        %x_75:f32 = let %19
         store %tmp_float, %x_75
-        %x_76:vec3<f32> = construct %x_75, %x_75, %x_75
+        %21:vec3<f32> = construct %x_75, %x_75, %x_75
+        %x_76:vec3<f32> = let %21
         store %color, %x_76
         store %x_24, array<i32, 1>(0i)
         store %x_68, false
         store %x_79_phi, false
-        loop [b: %b5, c: %b6] {  # loop_2
-          %b5 = block {  # body
+        loop [b: $B4] {  # loop_2
+          $B4: {  # body
             %x_21_phi:ptr<function, i32, read_write> = var
             %x_25_phi:ptr<function, i32, read_write> = var
             %x_93_phi:ptr<function, bool, read_write> = var
-            %x_79:bool = load %x_79_phi
+            %26:bool = load %x_79_phi
+            %x_79:bool = let %26
             store %x_18, 1i
             store %x_21_phi, 1i
-            loop [b: %b7, c: %b8] {  # loop_3
-              %b7 = block {  # body
-                %x_21:i32 = load %x_21_phi
+            loop [b: $B5, c: $B6] {  # loop_3
+              $B5: {  # body
+                %28:i32 = load %x_21_phi
+                %x_21:i32 = let %28
                 store %x_25_phi, 0i
                 store %x_93_phi, %x_79
-                %25:bool = gt %x_21, 10i
-                if %25 [t: %b9, f: %b10] {  # if_1
-                  %b9 = block {  # true
+                %30:bool = gt %x_21, 10i
+                if %30 [t: $B7, f: $B8] {  # if_1
+                  $B7: {  # true
                     exit_if  # if_1
                   }
-                  %b10 = block {  # false
+                  $B8: {  # false
                     exit_loop  # loop_3
                   }
                 }
-                %x_22:i32 = sub %x_21, 1i
+                %31:i32 = sub %x_21, 1i
+                %x_22:i32 = let %31
                 store %x_19, %x_22
-                %27:ptr<function, i32, read_write> = access %x_24, %x_22
-                %x_23:i32 = load %27
-                %29:bool = eq %x_23, 1i
-                if %29 [t: %b11] {  # if_2
-                  %b11 = block {  # true
+                %33:ptr<function, i32, read_write> = access %x_24, %x_22
+                %34:i32 = load %33
+                %x_23:i32 = let %34
+                %36:bool = eq %x_23, 1i
+                if %36 [t: $B9] {  # if_2
+                  $B9: {  # true
                     store %x_68, true
                     store %x_17, 1i
                     store %x_25_phi, 1i
@@ -79,20 +86,21 @@
                   }
                 }
                 store %x_18, %x_22
-                continue %b8
+                continue  # -> $B6
               }
-              %b8 = block {  # continuing
+              $B6: {  # continuing
                 store %x_21_phi, %x_22
-                next_iteration %b7
+                next_iteration  # -> $B5
               }
             }
-            %30:i32 = load %x_25_phi
-            store %x_25, %30
-            %x_93:bool = load %x_93_phi
-            %32:i32 = load %x_25
-            store %x_26_phi, %32
-            if %x_93 [t: %b12] {  # if_3
-              %b12 = block {  # true
+            %37:i32 = load %x_25_phi
+            store %x_25, %37
+            %38:bool = load %x_93_phi
+            %x_93:bool = let %38
+            %40:i32 = load %x_25
+            store %x_26_phi, %40
+            if %x_93 [t: $B10] {  # if_3
+              $B10: {  # true
                 exit_loop  # loop_2
               }
             }
@@ -101,37 +109,36 @@
             store %x_26_phi, -1i
             exit_loop  # loop_2
           }
-          %b6 = block {  # continuing
-            store %x_79_phi, false
-            next_iteration %b5
-          }
         }
-        %x_26:i32 = load %x_26_phi
+        %41:i32 = load %x_26_phi
+        %x_26:i32 = let %41
         store %x_20, %x_26
-        %34:bool = eq %x_26, -1i
-        if %34 [t: %b13, f: %b14] {  # if_4
-          %b13 = block {  # true
-            discard
+        %43:bool = eq %x_26, -1i
+        if %43 [t: $B11, f: $B12] {  # if_4
+          $B11: {  # true
+            store %continue_execution, false
             exit_if  # if_4
           }
-          %b14 = block {  # false
+          $B12: {  # false
             store %x_GLF_color, vec4<f32>(0.0f)
-            %35:f32 = access %x_76, 1u
-            %36:f32 = access %x_76, 2u
-            %37:vec2<f32> = construct %35, %36
-            %x_100:vec2<f32> = add %37, vec2<f32>(1.0f)
-            %39:f32 = access %x_76, 0u
-            %40:f32 = access %x_100, 0u
-            %41:f32 = access %x_100, 1u
-            %42:vec3<f32> = construct %39, %40, %41
-            store %x_101, %42
-            %43:vec3<f32> = load %x_101
-            store %color, %43
-            %44:ptr<uniform, vec2<f32>, read> = access %x_11, 0u
-            %x_103:f32 = load_vector_element %44, 0u
-            %46:bool = gt %x_103, 1.0f
-            if %46 [t: %b15] {  # if_5
-              %b15 = block {  # true
+            %44:f32 = access %x_76, 1u
+            %45:f32 = access %x_76, 2u
+            %46:vec2<f32> = construct %44, %45
+            %47:vec2<f32> = add %46, vec2<f32>(1.0f)
+            %x_100:vec2<f32> = let %47
+            %49:f32 = access %x_76, 0u
+            %50:f32 = access %x_100, 0u
+            %51:f32 = access %x_100, 1u
+            %52:vec3<f32> = construct %49, %50, %51
+            store %x_101, %52
+            %53:vec3<f32> = load %x_101
+            store %color, %53
+            %54:ptr<uniform, vec2<f32>, read> = access %x_11, 0u
+            %55:f32 = load_vector_element %54, 0u
+            %x_103:f32 = let %55
+            %57:bool = gt %x_103, 1.0f
+            if %57 [t: $B13] {  # if_5
+              $B13: {  # true
                 store %x_69, true
                 exit_loop  # loop_1
               }
@@ -139,31 +146,35 @@
             exit_if  # if_4
           }
         }
-        %47:f32 = load_vector_element %x_101, 0u
-        %48:f32 = load_vector_element %x_101, 1u
-        %49:f32 = load_vector_element %x_101, 2u
-        %50:vec4<f32> = construct %47, %48, %49, 1.0f
-        store %x_GLF_color, %50
+        %58:f32 = load_vector_element %x_101, 0u
+        %59:f32 = load_vector_element %x_101, 1u
+        %60:f32 = load_vector_element %x_101, 2u
+        %61:vec4<f32> = construct %58, %59, %60, 1.0f
+        store %x_GLF_color, %61
         store %x_69, true
         exit_loop  # loop_1
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
-      }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b16 {
-  %b16 = block {
-    %52:void = call %main_1
-    %53:vec4<f32> = load %x_GLF_color
-    %54:main_out = construct %53
-    ret %54
+%tint_symbol = @fragment func():main_out {
+  $B14: {
+    %63:void = call %main_1
+    %64:vec4<f32> = load %x_GLF_color
+    %65:main_out = construct %64
+    %66:bool = load %continue_execution
+    %67:bool = eq %66, false
+    if %67 [t: $B15] {  # if_6
+      $B15: {  # true
+        terminate_invocation
+      }
+    }
+    ret %65
   }
 }
-%binarySearch_struct_tmp_struct_i1_1_1_ = func(%obj:ptr<function, tmp_struct, read_write>):i32 -> %b17 {
-  %b17 = block {
+%binarySearch_struct_tmp_struct_i1_1_1_ = func(%obj:ptr<function, tmp_struct, read_write>):i32 {
+  $B16: {
     %x_112:ptr<function, bool, read_write> = var, false
     %x_16:ptr<function, i32, read_write> = var
     %one:ptr<function, i32, read_write> = var
@@ -172,35 +183,39 @@
     %x_114_phi:ptr<function, bool, read_write> = var
     %x_28_phi:ptr<function, i32, read_write> = var
     store %x_114_phi, false
-    loop [b: %b18, c: %b19] {  # loop_4
-      %b18 = block {  # body
+    loop [b: $B17] {  # loop_4
+      $B17: {  # body
         %x_15_phi:ptr<function, i32, read_write> = var
         %x_27_phi:ptr<function, i32, read_write> = var
         %x_128_phi:ptr<function, bool, read_write> = var
-        %x_114:bool = load %x_114_phi
+        %80:bool = load %x_114_phi
+        %x_114:bool = let %80
         store %one, 1i
         store %x_15_phi, 1i
-        loop [b: %b20, c: %b21] {  # loop_5
-          %b20 = block {  # body
-            %x_15:i32 = load %x_15_phi
+        loop [b: $B18, c: $B19] {  # loop_5
+          $B18: {  # body
+            %82:i32 = load %x_15_phi
+            %x_15:i32 = let %82
             store %x_27_phi, 0i
             store %x_128_phi, %x_114
-            %69:bool = gt %x_15, 10i
-            if %69 [t: %b22, f: %b23] {  # if_6
-              %b22 = block {  # true
-                exit_if  # if_6
+            %84:bool = gt %x_15, 10i
+            if %84 [t: $B20, f: $B21] {  # if_7
+              $B20: {  # true
+                exit_if  # if_7
               }
-              %b23 = block {  # false
+              $B21: {  # false
                 exit_loop  # loop_5
               }
             }
-            %x_13:i32 = sub %x_15, 1i
+            %85:i32 = sub %x_15, 1i
+            %x_13:i32 = let %85
             store %zero, %x_13
-            %71:ptr<function, i32, read_write> = access %obj, 0u, %x_13
-            %x_14:i32 = load %71
-            %73:bool = eq %x_14, 1i
-            if %73 [t: %b24] {  # if_7
-              %b24 = block {  # true
+            %87:ptr<function, i32, read_write> = access %obj, 0u, %x_13
+            %88:i32 = load %87
+            %x_14:i32 = let %88
+            %90:bool = eq %x_14, 1i
+            if %90 [t: $B22] {  # if_8
+              $B22: {  # true
                 store %x_112, true
                 store %x_16, 1i
                 store %x_27_phi, 1i
@@ -209,20 +224,21 @@
               }
             }
             store %one, %x_13
-            continue %b21
+            continue  # -> $B19
           }
-          %b21 = block {  # continuing
+          $B19: {  # continuing
             store %x_15_phi, %x_13
-            next_iteration %b20
+            next_iteration  # -> $B18
           }
         }
-        %74:i32 = load %x_27_phi
-        store %x_27, %74
-        %x_128:bool = load %x_128_phi
-        %76:i32 = load %x_27
-        store %x_28_phi, %76
-        if %x_128 [t: %b25] {  # if_8
-          %b25 = block {  # true
+        %91:i32 = load %x_27_phi
+        store %x_27, %91
+        %92:bool = load %x_128_phi
+        %x_128:bool = let %92
+        %94:i32 = load %x_27
+        store %x_28_phi, %94
+        if %x_128 [t: $B23] {  # if_9
+          $B23: {  # true
             exit_loop  # loop_4
           }
         }
@@ -231,12 +247,9 @@
         store %x_28_phi, -1i
         exit_loop  # loop_4
       }
-      %b19 = block {  # continuing
-        store %x_114_phi, false
-        next_iteration %b18
-      }
     }
-    %x_28:i32 = load %x_28_phi
+    %95:i32 = load %x_28_phi
+    %x_28:i32 = let %95
     ret %x_28
   }
 }
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/arr-value-set-to-arr-value-squared/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/arr-value-set-to-arr-value-squared/0-opt.spvasm.expected.ir.msl
index 3398f27..d5c6ad1 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/arr-value-set-to-arr-value-squared/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/arr-value-set-to-arr-value-squared/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: QuicksortObject = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: QuicksortObject = struct @align(4) {
   numbers:array<i32, 10> @offset(0)
 }
 
@@ -12,34 +12,36 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %obj:ptr<private, QuicksortObject, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_30:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%swap_i1_i1_ = func(%i:ptr<function, i32, read_write>, %j:ptr<function, i32, read_write>):void -> %b2 {
-  %b2 = block {
+%swap_i1_i1_ = func(%i:ptr<function, i32, read_write>, %j:ptr<function, i32, read_write>):void {
+  $B2: {
     %temp:ptr<function, i32, read_write> = var
     %8:i32 = load %i
     %9:ptr<private, i32, read_write> = access %obj, 0u, %8
     %10:i32 = load %9
     store %temp, %10
-    %x_95:i32 = load %i
-    %12:ptr<private, i32, read_write> = access %obj, 0u, %x_95
-    %13:i32 = load %j
-    %14:ptr<private, i32, read_write> = access %obj, 0u, %13
-    %15:i32 = load %14
-    store %12, %15
-    %x_100:i32 = load %j
-    %17:ptr<private, i32, read_write> = access %obj, 0u, %x_100
-    %18:i32 = load %temp
-    store %17, %18
+    %11:i32 = load %i
+    %x_95:i32 = let %11
+    %13:ptr<private, i32, read_write> = access %obj, 0u, %x_95
+    %14:i32 = load %j
+    %15:ptr<private, i32, read_write> = access %obj, 0u, %14
+    %16:i32 = load %15
+    store %13, %16
+    %17:i32 = load %j
+    %x_100:i32 = let %17
+    %19:ptr<private, i32, read_write> = access %obj, 0u, %x_100
+    %20:i32 = load %temp
+    store %19, %20
     ret
   }
 }
-%performPartition_i1_i1_ = func(%l:ptr<function, i32, read_write>, %h:ptr<function, i32, read_write>):i32 -> %b3 {
-  %b3 = block {
+%performPartition_i1_i1_ = func(%l:ptr<function, i32, read_write>, %h:ptr<function, i32, read_write>):i32 {
+  $B3: {
     %pivot:ptr<function, i32, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
     %j_1:ptr<function, i32, read_write> = var
@@ -47,69 +49,70 @@
     %param_1:ptr<function, i32, read_write> = var
     %param_2:ptr<function, i32, read_write> = var
     %param_3:ptr<function, i32, read_write> = var
-    %29:i32 = load %h
-    %30:ptr<private, i32, read_write> = access %obj, 0u, %29
-    %31:i32 = load %30
-    store %pivot, %31
-    %32:i32 = load %l
-    %33:i32 = sub %32, 1i
-    store %i_1, %33
+    %31:i32 = load %h
+    %32:ptr<private, i32, read_write> = access %obj, 0u, %31
+    %33:i32 = load %32
+    store %pivot, %33
     %34:i32 = load %l
-    store %j_1, %34
-    loop [b: %b4, c: %b5] {  # loop_1
-      %b4 = block {  # body
-        %35:i32 = load %j_1
-        %36:i32 = load %h
-        %37:i32 = sub %36, 1i
-        %38:bool = lte %35, %37
-        if %38 [t: %b6, f: %b7] {  # if_1
-          %b6 = block {  # true
+    %35:i32 = sub %34, 1i
+    store %i_1, %35
+    %36:i32 = load %l
+    store %j_1, %36
+    loop [b: $B4, c: $B5] {  # loop_1
+      $B4: {  # body
+        %37:i32 = load %j_1
+        %38:i32 = load %h
+        %39:i32 = sub %38, 1i
+        %40:bool = lte %37, %39
+        if %40 [t: $B6, f: $B7] {  # if_1
+          $B6: {  # true
             exit_if  # if_1
           }
-          %b7 = block {  # false
+          $B7: {  # false
             exit_loop  # loop_1
           }
         }
-        %39:i32 = load %j_1
-        %40:ptr<private, i32, read_write> = access %obj, 0u, %39
-        %41:i32 = load %40
-        %42:i32 = load %pivot
-        %43:bool = lte %41, %42
-        if %43 [t: %b8] {  # if_2
-          %b8 = block {  # true
-            %44:i32 = load %i_1
-            %45:i32 = add %44, 1i
-            store %i_1, %45
+        %41:i32 = load %j_1
+        %42:ptr<private, i32, read_write> = access %obj, 0u, %41
+        %43:i32 = load %42
+        %44:i32 = load %pivot
+        %45:bool = lte %43, %44
+        if %45 [t: $B8] {  # if_2
+          $B8: {  # true
             %46:i32 = load %i_1
-            store %param, %46
-            %47:i32 = load %j_1
-            store %param_1, %47
-            %48:void = call %swap_i1_i1_, %param, %param_1
+            %47:i32 = add %46, 1i
+            store %i_1, %47
+            %48:i32 = load %i_1
+            store %param, %48
+            %49:i32 = load %j_1
+            store %param_1, %49
+            %50:void = call %swap_i1_i1_, %param, %param_1
             exit_if  # if_2
           }
         }
-        continue %b5
+        continue  # -> $B5
       }
-      %b5 = block {  # continuing
-        %49:i32 = load %j_1
-        %50:i32 = add %49, 1i
-        store %j_1, %50
-        next_iteration %b4
+      $B5: {  # continuing
+        %51:i32 = load %j_1
+        %52:i32 = add %51, 1i
+        store %j_1, %52
+        next_iteration  # -> $B4
       }
     }
-    %51:i32 = load %i_1
-    %52:i32 = add %51, 1i
-    store %param_2, %52
-    %53:i32 = load %h
-    store %param_3, %53
-    %54:void = call %swap_i1_i1_, %param_2, %param_3
-    %x_137:i32 = load %i_1
-    %56:i32 = add %x_137, 1i
-    ret %56
+    %53:i32 = load %i_1
+    %54:i32 = add %53, 1i
+    store %param_2, %54
+    %55:i32 = load %h
+    store %param_3, %55
+    %56:void = call %swap_i1_i1_, %param_2, %param_3
+    %57:i32 = load %i_1
+    %x_137:i32 = let %57
+    %59:i32 = add %x_137, 1i
+    ret %59
   }
 }
-%quicksort_ = func():void -> %b9 {
-  %b9 = block {
+%quicksort_ = func():void {
+  $B9: {
     %l_1:ptr<function, i32, read_write> = var
     %h_1:ptr<function, i32, read_write> = var
     %top:ptr<function, i32, read_write> = var
@@ -120,155 +123,166 @@
     store %l_1, 0i
     store %h_1, 9i
     store %top, -1i
-    %65:i32 = load %top
-    %x_141:i32 = add %65, 1i
+    %68:i32 = load %top
+    %69:i32 = add %68, 1i
+    %x_141:i32 = let %69
     store %top, %x_141
-    %67:ptr<function, i32, read_write> = access %stack, %x_141
-    %68:i32 = load %l_1
-    store %67, %68
-    %69:i32 = load %top
-    %x_145:i32 = add %69, 1i
-    store %top, %x_145
-    %71:ptr<function, i32, read_write> = access %stack, %x_145
-    %72:i32 = load %h_1
+    %71:ptr<function, i32, read_write> = access %stack, %x_141
+    %72:i32 = load %l_1
     store %71, %72
-    loop [b: %b10, c: %b11] {  # loop_2
-      %b10 = block {  # body
-        %73:i32 = load %top
-        %74:bool = gte %73, 0i
-        if %74 [t: %b12, f: %b13] {  # if_3
-          %b12 = block {  # true
+    %73:i32 = load %top
+    %74:i32 = add %73, 1i
+    %x_145:i32 = let %74
+    store %top, %x_145
+    %76:ptr<function, i32, read_write> = access %stack, %x_145
+    %77:i32 = load %h_1
+    store %76, %77
+    loop [b: $B10, c: $B11] {  # loop_2
+      $B10: {  # body
+        %78:i32 = load %top
+        %79:bool = gte %78, 0i
+        if %79 [t: $B12, f: $B13] {  # if_3
+          $B12: {  # true
             exit_if  # if_3
           }
-          %b13 = block {  # false
+          $B13: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_155:i32 = load %top
-        %76:i32 = load %top
-        %77:i32 = sub %76, 1i
-        store %top, %77
-        %78:ptr<function, i32, read_write> = access %stack, %x_155
-        %79:i32 = load %78
-        store %h_1, %79
-        %x_159:i32 = load %top
-        %81:i32 = load %top
-        %82:i32 = sub %81, 1i
-        store %top, %82
-        %83:ptr<function, i32, read_write> = access %stack, %x_159
-        %84:i32 = load %83
-        store %l_1, %84
-        %85:i32 = load %l_1
-        store %param_4, %85
-        %86:i32 = load %h_1
-        store %param_5, %86
-        %x_165:i32 = call %performPartition_i1_i1_, %param_4, %param_5
-        store %p, %x_165
-        %88:i32 = load %p
+        %80:i32 = load %top
+        %x_155:i32 = let %80
+        %82:i32 = load %top
+        %83:i32 = sub %82, 1i
+        store %top, %83
+        %84:ptr<function, i32, read_write> = access %stack, %x_155
+        %85:i32 = load %84
+        store %h_1, %85
+        %86:i32 = load %top
+        %x_159:i32 = let %86
+        %88:i32 = load %top
         %89:i32 = sub %88, 1i
-        %90:i32 = load %l_1
-        %91:bool = gt %89, %90
-        if %91 [t: %b14] {  # if_4
-          %b14 = block {  # true
-            %92:i32 = load %top
-            %x_173:i32 = add %92, 1i
+        store %top, %89
+        %90:ptr<function, i32, read_write> = access %stack, %x_159
+        %91:i32 = load %90
+        store %l_1, %91
+        %92:i32 = load %l_1
+        store %param_4, %92
+        %93:i32 = load %h_1
+        store %param_5, %93
+        %94:i32 = call %performPartition_i1_i1_, %param_4, %param_5
+        %x_165:i32 = let %94
+        store %p, %x_165
+        %96:i32 = load %p
+        %97:i32 = sub %96, 1i
+        %98:i32 = load %l_1
+        %99:bool = gt %97, %98
+        if %99 [t: $B14] {  # if_4
+          $B14: {  # true
+            %100:i32 = load %top
+            %101:i32 = add %100, 1i
+            %x_173:i32 = let %101
             store %top, %x_173
-            %94:ptr<function, i32, read_write> = access %stack, %x_173
-            %95:i32 = load %l_1
-            store %94, %95
-            %96:i32 = load %top
-            %x_177:i32 = add %96, 1i
+            %103:ptr<function, i32, read_write> = access %stack, %x_173
+            %104:i32 = load %l_1
+            store %103, %104
+            %105:i32 = load %top
+            %106:i32 = add %105, 1i
+            %x_177:i32 = let %106
             store %top, %x_177
-            %98:ptr<function, i32, read_write> = access %stack, %x_177
-            %99:i32 = load %p
-            %100:i32 = sub %99, 1i
-            store %98, %100
+            %108:ptr<function, i32, read_write> = access %stack, %x_177
+            %109:i32 = load %p
+            %110:i32 = sub %109, 1i
+            store %108, %110
             exit_if  # if_4
           }
         }
-        %101:i32 = load %p
-        %102:i32 = add %101, 1i
-        %103:i32 = load %h_1
-        %104:bool = lt %102, %103
-        if %104 [t: %b15] {  # if_5
-          %b15 = block {  # true
-            %105:i32 = load %top
-            %x_188:i32 = add %105, 1i
+        %111:i32 = load %p
+        %112:i32 = add %111, 1i
+        %113:i32 = load %h_1
+        %114:bool = lt %112, %113
+        if %114 [t: $B15] {  # if_5
+          $B15: {  # true
+            %115:i32 = load %top
+            %116:i32 = add %115, 1i
+            %x_188:i32 = let %116
             store %top, %x_188
-            %107:ptr<function, i32, read_write> = access %stack, %x_188
-            %108:i32 = load %p
-            %109:i32 = add %108, 1i
-            store %107, %109
-            %110:i32 = load %top
-            %x_193:i32 = add %110, 1i
+            %118:ptr<function, i32, read_write> = access %stack, %x_188
+            %119:i32 = load %p
+            %120:i32 = add %119, 1i
+            store %118, %120
+            %121:i32 = load %top
+            %122:i32 = add %121, 1i
+            %x_193:i32 = let %122
             store %top, %x_193
-            %112:ptr<function, i32, read_write> = access %stack, %x_193
-            %113:i32 = load %h_1
-            store %112, %113
+            %124:ptr<function, i32, read_write> = access %stack, %x_193
+            %125:i32 = load %h_1
+            store %124, %125
             exit_if  # if_5
           }
         }
-        continue %b11
+        continue  # -> $B11
       }
-      %b11 = block {  # continuing
-        next_iteration %b10
+      $B11: {  # continuing
+        next_iteration  # -> $B10
       }
     }
     ret
   }
 }
-%main_1 = func():void -> %b16 {
-  %b16 = block {
+%main_1 = func():void {
+  $B16: {
     %i_2:ptr<function, i32, read_write> = var
     store %i_2, 0i
-    loop [b: %b17, c: %b18] {  # loop_3
-      %b17 = block {  # body
-        %116:i32 = load %i_2
-        %117:bool = lt %116, 10i
-        if %117 [t: %b19, f: %b20] {  # if_6
-          %b19 = block {  # true
+    loop [b: $B17, c: $B18] {  # loop_3
+      $B17: {  # body
+        %128:i32 = load %i_2
+        %129:bool = lt %128, 10i
+        if %129 [t: $B19, f: $B20] {  # if_6
+          $B19: {  # true
             exit_if  # if_6
           }
-          %b20 = block {  # false
+          $B20: {  # false
             exit_loop  # loop_3
           }
         }
-        %x_67:i32 = load %i_2
-        %119:ptr<private, i32, read_write> = access %obj, 0u, %x_67
-        %120:i32 = load %i_2
-        %121:i32 = sub 10i, %120
-        store %119, %121
-        %x_71:i32 = load %i_2
-        %123:ptr<private, i32, read_write> = access %obj, 0u, %x_71
-        %124:i32 = load %i_2
-        %125:ptr<private, i32, read_write> = access %obj, 0u, %124
-        %126:i32 = load %125
-        %127:i32 = load %i_2
-        %128:ptr<private, i32, read_write> = access %obj, 0u, %127
-        %129:i32 = load %128
-        %130:i32 = mul %126, %129
-        store %123, %130
-        continue %b18
+        %130:i32 = load %i_2
+        %x_67:i32 = let %130
+        %132:ptr<private, i32, read_write> = access %obj, 0u, %x_67
+        %133:i32 = load %i_2
+        %134:i32 = sub 10i, %133
+        store %132, %134
+        %135:i32 = load %i_2
+        %x_71:i32 = let %135
+        %137:ptr<private, i32, read_write> = access %obj, 0u, %x_71
+        %138:i32 = load %i_2
+        %139:ptr<private, i32, read_write> = access %obj, 0u, %138
+        %140:i32 = load %139
+        %141:i32 = load %i_2
+        %142:ptr<private, i32, read_write> = access %obj, 0u, %141
+        %143:i32 = load %142
+        %144:i32 = mul %140, %143
+        store %137, %144
+        continue  # -> $B18
       }
-      %b18 = block {  # continuing
-        %131:i32 = load %i_2
-        %132:i32 = add %131, 1i
-        store %i_2, %132
-        next_iteration %b17
+      $B18: {  # continuing
+        %145:i32 = load %i_2
+        %146:i32 = add %145, 1i
+        store %i_2, %146
+        next_iteration  # -> $B17
       }
     }
-    %133:void = call %quicksort_
-    %134:ptr<private, i32, read_write> = access %obj, 0u, 0i
-    %135:i32 = load %134
-    %136:ptr<private, i32, read_write> = access %obj, 0u, 4i
-    %137:i32 = load %136
-    %138:bool = lt %135, %137
-    if %138 [t: %b21, f: %b22] {  # if_7
-      %b21 = block {  # true
+    %147:void = call %quicksort_
+    %148:ptr<private, i32, read_write> = access %obj, 0u, 0i
+    %149:i32 = load %148
+    %150:ptr<private, i32, read_write> = access %obj, 0u, 4i
+    %151:i32 = load %150
+    %152:bool = lt %149, %151
+    if %152 [t: $B21, f: $B22] {  # if_7
+      $B21: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_7
       }
-      %b22 = block {  # false
+      $B22: {  # false
         store %x_GLF_color, vec4<f32>(0.0f, 1.0f, 0.0f, 1.0f)
         exit_if  # if_7
       }
@@ -276,12 +290,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b23 {
-  %b23 = block {
-    %140:void = call %main_1
-    %141:vec4<f32> = load %x_GLF_color
-    %142:main_out = construct %141
-    ret %142
+%tint_symbol = @fragment func():main_out {
+  $B23: {
+    %154:void = call %main_1
+    %155:vec4<f32> = load %x_GLF_color
+    %156:main_out = construct %155
+    ret %156
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/arr-value-set-to-arr-value-squared/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/arr-value-set-to-arr-value-squared/0-opt.wgsl.expected.ir.msl
index c08d3e0..67e4926 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/arr-value-set-to-arr-value-squared/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/arr-value-set-to-arr-value-squared/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: QuicksortObject = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: QuicksortObject = struct @align(4) {
   numbers:array<i32, 10> @offset(0)
 }
 
@@ -12,34 +12,41 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %obj:ptr<private, QuicksortObject, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_30:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%swap_i1_i1_ = func(%i:ptr<function, i32, read_write>, %j:ptr<function, i32, read_write>):void -> %b2 {
-  %b2 = block {
+%swap_i1_i1_ = func(%i:ptr<function, i32, read_write>, %j:ptr<function, i32, read_write>):void {
+  $B2: {
     %temp:ptr<function, i32, read_write> = var
-    %x_92:i32 = load %i
-    %9:ptr<private, i32, read_write> = access %obj, 0u, %x_92
-    %x_94:i32 = load %9
+    %8:i32 = load %i
+    %x_92:i32 = let %8
+    %10:ptr<private, i32, read_write> = access %obj, 0u, %x_92
+    %11:i32 = load %10
+    %x_94:i32 = let %11
     store %temp, %x_94
-    %x_95:i32 = load %i
-    %x_96:i32 = load %j
-    %13:ptr<private, i32, read_write> = access %obj, 0u, %x_96
-    %x_98:i32 = load %13
-    %15:ptr<private, i32, read_write> = access %obj, 0u, %x_95
-    store %15, %x_98
-    %x_100:i32 = load %j
-    %x_101:i32 = load %temp
-    %18:ptr<private, i32, read_write> = access %obj, 0u, %x_100
-    store %18, %x_101
+    %13:i32 = load %i
+    %x_95:i32 = let %13
+    %15:i32 = load %j
+    %x_96:i32 = let %15
+    %17:ptr<private, i32, read_write> = access %obj, 0u, %x_96
+    %18:i32 = load %17
+    %x_98:i32 = let %18
+    %20:ptr<private, i32, read_write> = access %obj, 0u, %x_95
+    store %20, %x_98
+    %21:i32 = load %j
+    %x_100:i32 = let %21
+    %23:i32 = load %temp
+    %x_101:i32 = let %23
+    %25:ptr<private, i32, read_write> = access %obj, 0u, %x_100
+    store %25, %x_101
     ret
   }
 }
-%performPartition_i1_i1_ = func(%l:ptr<function, i32, read_write>, %h:ptr<function, i32, read_write>):i32 -> %b3 {
-  %b3 = block {
+%performPartition_i1_i1_ = func(%l:ptr<function, i32, read_write>, %h:ptr<function, i32, read_write>):i32 {
+  $B3: {
     %pivot:ptr<function, i32, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
     %j_1:ptr<function, i32, read_write> = var
@@ -47,69 +54,85 @@
     %param_1:ptr<function, i32, read_write> = var
     %param_2:ptr<function, i32, read_write> = var
     %param_3:ptr<function, i32, read_write> = var
-    %x_104:i32 = load %h
-    %30:ptr<private, i32, read_write> = access %obj, 0u, %x_104
-    %x_106:i32 = load %30
+    %36:i32 = load %h
+    %x_104:i32 = let %36
+    %38:ptr<private, i32, read_write> = access %obj, 0u, %x_104
+    %39:i32 = load %38
+    %x_106:i32 = let %39
     store %pivot, %x_106
-    %x_107:i32 = load %l
-    %33:i32 = sub %x_107, 1i
-    store %i_1, %33
-    %x_109:i32 = load %l
+    %41:i32 = load %l
+    %x_107:i32 = let %41
+    %43:i32 = sub %x_107, 1i
+    store %i_1, %43
+    %44:i32 = load %l
+    %x_109:i32 = let %44
     store %j_1, %x_109
-    loop [b: %b4, c: %b5] {  # loop_1
-      %b4 = block {  # body
-        %x_114:i32 = load %j_1
-        %x_115:i32 = load %h
-        %37:i32 = sub %x_115, 1i
-        %38:bool = lte %x_114, %37
-        if %38 [t: %b6, f: %b7] {  # if_1
-          %b6 = block {  # true
+    loop [b: $B4, c: $B5] {  # loop_1
+      $B4: {  # body
+        %46:i32 = load %j_1
+        %x_114:i32 = let %46
+        %48:i32 = load %h
+        %x_115:i32 = let %48
+        %50:i32 = sub %x_115, 1i
+        %51:bool = lte %x_114, %50
+        if %51 [t: $B6, f: $B7] {  # if_1
+          $B6: {  # true
             exit_if  # if_1
           }
-          %b7 = block {  # false
+          $B7: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_119:i32 = load %j_1
-        %40:ptr<private, i32, read_write> = access %obj, 0u, %x_119
-        %x_121:i32 = load %40
-        %x_122:i32 = load %pivot
-        %43:bool = lte %x_121, %x_122
-        if %43 [t: %b8] {  # if_2
-          %b8 = block {  # true
-            %x_126:i32 = load %i_1
-            %45:i32 = add %x_126, 1i
-            store %i_1, %45
-            %x_128:i32 = load %i_1
+        %52:i32 = load %j_1
+        %x_119:i32 = let %52
+        %54:ptr<private, i32, read_write> = access %obj, 0u, %x_119
+        %55:i32 = load %54
+        %x_121:i32 = let %55
+        %57:i32 = load %pivot
+        %x_122:i32 = let %57
+        %59:bool = lte %x_121, %x_122
+        if %59 [t: $B8] {  # if_2
+          $B8: {  # true
+            %60:i32 = load %i_1
+            %x_126:i32 = let %60
+            %62:i32 = add %x_126, 1i
+            store %i_1, %62
+            %63:i32 = load %i_1
+            %x_128:i32 = let %63
             store %param, %x_128
-            %x_129:i32 = load %j_1
+            %65:i32 = load %j_1
+            %x_129:i32 = let %65
             store %param_1, %x_129
-            %48:void = call %swap_i1_i1_, %param, %param_1
+            %67:void = call %swap_i1_i1_, %param, %param_1
             exit_if  # if_2
           }
         }
-        continue %b5
+        continue  # -> $B5
       }
-      %b5 = block {  # continuing
-        %x_131:i32 = load %j_1
-        %50:i32 = add %x_131, 1i
-        store %j_1, %50
-        next_iteration %b4
+      $B5: {  # continuing
+        %68:i32 = load %j_1
+        %x_131:i32 = let %68
+        %70:i32 = add %x_131, 1i
+        store %j_1, %70
+        next_iteration  # -> $B4
       }
     }
-    %x_133:i32 = load %i_1
-    %52:i32 = add %x_133, 1i
-    store %param_2, %52
-    %x_135:i32 = load %h
+    %71:i32 = load %i_1
+    %x_133:i32 = let %71
+    %73:i32 = add %x_133, 1i
+    store %param_2, %73
+    %74:i32 = load %h
+    %x_135:i32 = let %74
     store %param_3, %x_135
-    %54:void = call %swap_i1_i1_, %param_2, %param_3
-    %x_137:i32 = load %i_1
-    %56:i32 = add %x_137, 1i
-    ret %56
+    %76:void = call %swap_i1_i1_, %param_2, %param_3
+    %77:i32 = load %i_1
+    %x_137:i32 = let %77
+    %79:i32 = add %x_137, 1i
+    ret %79
   }
 }
-%quicksort_ = func():void -> %b9 {
-  %b9 = block {
+%quicksort_ = func():void {
+  $B9: {
     %l_1:ptr<function, i32, read_write> = var
     %h_1:ptr<function, i32, read_write> = var
     %top:ptr<function, i32, read_write> = var
@@ -120,153 +143,194 @@
     store %l_1, 0i
     store %h_1, 9i
     store %top, -1i
-    %x_140:i32 = load %top
-    %x_141:i32 = add %x_140, 1i
+    %88:i32 = load %top
+    %x_140:i32 = let %88
+    %90:i32 = add %x_140, 1i
+    %x_141:i32 = let %90
     store %top, %x_141
-    %x_142:i32 = load %l_1
-    %68:ptr<function, i32, read_write> = access %stack, %x_141
-    store %68, %x_142
-    %x_144:i32 = load %top
-    %x_145:i32 = add %x_144, 1i
+    %92:i32 = load %l_1
+    %x_142:i32 = let %92
+    %94:ptr<function, i32, read_write> = access %stack, %x_141
+    store %94, %x_142
+    %95:i32 = load %top
+    %x_144:i32 = let %95
+    %97:i32 = add %x_144, 1i
+    %x_145:i32 = let %97
     store %top, %x_145
-    %x_146:i32 = load %h_1
-    %72:ptr<function, i32, read_write> = access %stack, %x_145
-    store %72, %x_146
-    loop [b: %b10, c: %b11] {  # loop_2
-      %b10 = block {  # body
-        %x_152:i32 = load %top
-        %74:bool = gte %x_152, 0i
-        if %74 [t: %b12, f: %b13] {  # if_3
-          %b12 = block {  # true
+    %99:i32 = load %h_1
+    %x_146:i32 = let %99
+    %101:ptr<function, i32, read_write> = access %stack, %x_145
+    store %101, %x_146
+    loop [b: $B10, c: $B11] {  # loop_2
+      $B10: {  # body
+        %102:i32 = load %top
+        %x_152:i32 = let %102
+        %104:bool = gte %x_152, 0i
+        if %104 [t: $B12, f: $B13] {  # if_3
+          $B12: {  # true
             exit_if  # if_3
           }
-          %b13 = block {  # false
+          $B13: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_155:i32 = load %top
-        %76:i32 = sub %x_155, 1i
-        store %top, %76
-        %77:ptr<function, i32, read_write> = access %stack, %x_155
-        %x_158:i32 = load %77
+        %105:i32 = load %top
+        %x_155:i32 = let %105
+        %107:i32 = sub %x_155, 1i
+        store %top, %107
+        %108:ptr<function, i32, read_write> = access %stack, %x_155
+        %109:i32 = load %108
+        %x_158:i32 = let %109
         store %h_1, %x_158
-        %x_159:i32 = load %top
-        %80:i32 = sub %x_159, 1i
-        store %top, %80
-        %81:ptr<function, i32, read_write> = access %stack, %x_159
-        %x_162:i32 = load %81
+        %111:i32 = load %top
+        %x_159:i32 = let %111
+        %113:i32 = sub %x_159, 1i
+        store %top, %113
+        %114:ptr<function, i32, read_write> = access %stack, %x_159
+        %115:i32 = load %114
+        %x_162:i32 = let %115
         store %l_1, %x_162
-        %x_163:i32 = load %l_1
+        %117:i32 = load %l_1
+        %x_163:i32 = let %117
         store %param_4, %x_163
-        %x_164:i32 = load %h_1
+        %119:i32 = load %h_1
+        %x_164:i32 = let %119
         store %param_5, %x_164
-        %x_165:i32 = call %performPartition_i1_i1_, %param_4, %param_5
+        %121:i32 = call %performPartition_i1_i1_, %param_4, %param_5
+        %x_165:i32 = let %121
         store %p, %x_165
-        %x_166:i32 = load %p
-        %x_168:i32 = load %l_1
-        %88:i32 = sub %x_166, 1i
-        %89:bool = gt %88, %x_168
-        if %89 [t: %b14] {  # if_4
-          %b14 = block {  # true
-            %x_172:i32 = load %top
-            %x_173:i32 = add %x_172, 1i
+        %123:i32 = load %p
+        %x_166:i32 = let %123
+        %125:i32 = load %l_1
+        %x_168:i32 = let %125
+        %127:i32 = sub %x_166, 1i
+        %128:bool = gt %127, %x_168
+        if %128 [t: $B14] {  # if_4
+          $B14: {  # true
+            %129:i32 = load %top
+            %x_172:i32 = let %129
+            %131:i32 = add %x_172, 1i
+            %x_173:i32 = let %131
             store %top, %x_173
-            %x_174:i32 = load %l_1
-            %93:ptr<function, i32, read_write> = access %stack, %x_173
-            store %93, %x_174
-            %x_176:i32 = load %top
-            %x_177:i32 = add %x_176, 1i
+            %133:i32 = load %l_1
+            %x_174:i32 = let %133
+            %135:ptr<function, i32, read_write> = access %stack, %x_173
+            store %135, %x_174
+            %136:i32 = load %top
+            %x_176:i32 = let %136
+            %138:i32 = add %x_176, 1i
+            %x_177:i32 = let %138
             store %top, %x_177
-            %x_178:i32 = load %p
-            %97:ptr<function, i32, read_write> = access %stack, %x_177
-            %98:i32 = sub %x_178, 1i
-            store %97, %98
+            %140:i32 = load %p
+            %x_178:i32 = let %140
+            %142:ptr<function, i32, read_write> = access %stack, %x_177
+            %143:i32 = sub %x_178, 1i
+            store %142, %143
             exit_if  # if_4
           }
         }
-        %x_181:i32 = load %p
-        %x_183:i32 = load %h_1
-        %101:i32 = add %x_181, 1i
-        %102:bool = lt %101, %x_183
-        if %102 [t: %b15] {  # if_5
-          %b15 = block {  # true
-            %x_187:i32 = load %top
-            %x_188:i32 = add %x_187, 1i
+        %144:i32 = load %p
+        %x_181:i32 = let %144
+        %146:i32 = load %h_1
+        %x_183:i32 = let %146
+        %148:i32 = add %x_181, 1i
+        %149:bool = lt %148, %x_183
+        if %149 [t: $B15] {  # if_5
+          $B15: {  # true
+            %150:i32 = load %top
+            %x_187:i32 = let %150
+            %152:i32 = add %x_187, 1i
+            %x_188:i32 = let %152
             store %top, %x_188
-            %x_189:i32 = load %p
-            %106:ptr<function, i32, read_write> = access %stack, %x_188
-            %107:i32 = add %x_189, 1i
-            store %106, %107
-            %x_192:i32 = load %top
-            %x_193:i32 = add %x_192, 1i
+            %154:i32 = load %p
+            %x_189:i32 = let %154
+            %156:ptr<function, i32, read_write> = access %stack, %x_188
+            %157:i32 = add %x_189, 1i
+            store %156, %157
+            %158:i32 = load %top
+            %x_192:i32 = let %158
+            %160:i32 = add %x_192, 1i
+            %x_193:i32 = let %160
             store %top, %x_193
-            %x_194:i32 = load %h_1
-            %111:ptr<function, i32, read_write> = access %stack, %x_193
-            store %111, %x_194
+            %162:i32 = load %h_1
+            %x_194:i32 = let %162
+            %164:ptr<function, i32, read_write> = access %stack, %x_193
+            store %164, %x_194
             exit_if  # if_5
           }
         }
-        continue %b11
+        continue  # -> $B11
       }
-      %b11 = block {  # continuing
-        next_iteration %b10
+      $B11: {  # continuing
+        next_iteration  # -> $B10
       }
     }
     ret
   }
 }
-%main_1 = func():void -> %b16 {
-  %b16 = block {
+%main_1 = func():void {
+  $B16: {
     %i_2:ptr<function, i32, read_write> = var
     store %i_2, 0i
-    loop [b: %b17, c: %b18] {  # loop_3
-      %b17 = block {  # body
-        %x_64:i32 = load %i_2
-        %115:bool = lt %x_64, 10i
-        if %115 [t: %b19, f: %b20] {  # if_6
-          %b19 = block {  # true
+    loop [b: $B17, c: $B18] {  # loop_3
+      $B17: {  # body
+        %167:i32 = load %i_2
+        %x_64:i32 = let %167
+        %169:bool = lt %x_64, 10i
+        if %169 [t: $B19, f: $B20] {  # if_6
+          $B19: {  # true
             exit_if  # if_6
           }
-          %b20 = block {  # false
+          $B20: {  # false
             exit_loop  # loop_3
           }
         }
-        %x_67:i32 = load %i_2
-        %x_68:i32 = load %i_2
-        %118:ptr<private, i32, read_write> = access %obj, 0u, %x_67
-        %119:i32 = sub 10i, %x_68
-        store %118, %119
-        %x_71:i32 = load %i_2
-        %x_72:i32 = load %i_2
-        %122:ptr<private, i32, read_write> = access %obj, 0u, %x_72
-        %x_74:i32 = load %122
-        %x_75:i32 = load %i_2
-        %125:ptr<private, i32, read_write> = access %obj, 0u, %x_75
-        %x_77:i32 = load %125
-        %127:ptr<private, i32, read_write> = access %obj, 0u, %x_71
-        %128:i32 = mul %x_74, %x_77
-        store %127, %128
-        continue %b18
+        %170:i32 = load %i_2
+        %x_67:i32 = let %170
+        %172:i32 = load %i_2
+        %x_68:i32 = let %172
+        %174:ptr<private, i32, read_write> = access %obj, 0u, %x_67
+        %175:i32 = sub 10i, %x_68
+        store %174, %175
+        %176:i32 = load %i_2
+        %x_71:i32 = let %176
+        %178:i32 = load %i_2
+        %x_72:i32 = let %178
+        %180:ptr<private, i32, read_write> = access %obj, 0u, %x_72
+        %181:i32 = load %180
+        %x_74:i32 = let %181
+        %183:i32 = load %i_2
+        %x_75:i32 = let %183
+        %185:ptr<private, i32, read_write> = access %obj, 0u, %x_75
+        %186:i32 = load %185
+        %x_77:i32 = let %186
+        %188:ptr<private, i32, read_write> = access %obj, 0u, %x_71
+        %189:i32 = mul %x_74, %x_77
+        store %188, %189
+        continue  # -> $B18
       }
-      %b18 = block {  # continuing
-        %x_80:i32 = load %i_2
-        %130:i32 = add %x_80, 1i
-        store %i_2, %130
-        next_iteration %b17
+      $B18: {  # continuing
+        %190:i32 = load %i_2
+        %x_80:i32 = let %190
+        %192:i32 = add %x_80, 1i
+        store %i_2, %192
+        next_iteration  # -> $B17
       }
     }
-    %131:void = call %quicksort_
-    %132:ptr<private, i32, read_write> = access %obj, 0u, 0i
-    %x_84:i32 = load %132
-    %134:ptr<private, i32, read_write> = access %obj, 0u, 4i
-    %x_86:i32 = load %134
-    %136:bool = lt %x_84, %x_86
-    if %136 [t: %b21, f: %b22] {  # if_7
-      %b21 = block {  # true
+    %193:void = call %quicksort_
+    %194:ptr<private, i32, read_write> = access %obj, 0u, 0i
+    %195:i32 = load %194
+    %x_84:i32 = let %195
+    %197:ptr<private, i32, read_write> = access %obj, 0u, 4i
+    %198:i32 = load %197
+    %x_86:i32 = let %198
+    %200:bool = lt %x_84, %x_86
+    if %200 [t: $B21, f: $B22] {  # if_7
+      $B21: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_7
       }
-      %b22 = block {  # false
+      $B22: {  # false
         store %x_GLF_color, vec4<f32>(0.0f, 1.0f, 0.0f, 1.0f)
         exit_if  # if_7
       }
@@ -274,12 +338,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b23 {
-  %b23 = block {
-    %138:void = call %main_1
-    %139:vec4<f32> = load %x_GLF_color
-    %140:main_out = construct %139
-    ret %140
+%tint_symbol = @fragment func():main_out {
+  $B23: {
+    %202:void = call %main_1
+    %203:vec4<f32> = load %x_GLF_color
+    %204:main_out = construct %203
+    ret %204
   }
 }
 
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
index 42dd95e..e3753ab 100644
--- 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
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,19 +8,19 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%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 = block {  # true
+    if %7 [t: $B3] {  # if_1
+      $B3: {  # true
         ret 5.0f
       }
     }
@@ -29,145 +29,162 @@
     %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 = block {  # true
+    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 = convert %14
+    %15:i32 = call %tint_f32_to_i32, %14
     store %x, %15
-    %16:i32 = load %x
-    %17:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-    %18:f32 = load_vector_element %17, 0u
-    %19:f32 = clamp %18, 0.0f, 1.0f
-    %20:i32 = convert %19
-    %21:i32 = mul %20, 3i
-    %22:i32 = add %16, %21
-    store %x, %22
-    %x_120:i32 = load %x
-    %24:f32 = convert %x_120
-    %25:f32 = add 5.0f, %24
-    ret %25
+    %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 {
-  %b5 = block {
+%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 = block {  # body
-        %30:i32 = load %i
-        %31:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-        %32:f32 = load_vector_element %31, 0u
-        %33:i32 = convert %32
-        %34:i32 = add 4i, %33
-        %35:bool = lt %30, %34
-        if %35 [t: %b8, f: %b9] {  # if_3
-          %b8 = block {  # true
+    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 = block {  # false
+          $B9: {  # false
             exit_loop  # loop_1
           }
         }
-        %36:f32 = load_vector_element %gl_FragCoord, 0u
-        %37:bool = gte %36, 0.0f
-        if %37 [t: %b10] {  # if_4
-          %b10 = block {  # true
+        %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 = block {  # body
+            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
-                %40:i32 = load %j
-                %41:bool = lt %40, 4i
-                if %41 [t: %b13, f: %b14] {  # if_5
-                  %b13 = block {  # true
+                %44:i32 = load %j
+                %45:bool = lt %44, 4i
+                if %45 [t: $B13, f: $B14] {  # if_5
+                  $B13: {  # true
                     exit_if  # if_5
                   }
-                  %b14 = block {  # false
+                  $B14: {  # false
                     exit_loop  # loop_2
                   }
                 }
-                %x_67:i32 = load %j
-                %x_69:i32 = load %i
-                %x_71:f32 = call %func_
-                %45:i32 = mul 4i, %x_67
-                %46:i32 = add %45, %x_69
-                %47:ptr<function, vec2<f32>, read_write> = access %data, %46
-                store_vector_element %47, 0u, %x_71
-                %48:ptr<function, vec2<f32>, read_write> = access %data, 0i
-                %49:f32 = load_vector_element %48, 0u
-                %x_75:bool = eq %49, 5.0f
+                %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
-                %51:bool = eq %x_75, false
-                if %51 [t: %b15] {  # if_6
-                  %b15 = block {  # true
-                    %52:ptr<function, vec2<f32>, read_write> = access %data, 15i
-                    %53:f32 = load_vector_element %52, 0u
-                    %54:bool = eq %53, 5.0f
-                    store %x_81, %54
-                    %55:bool = load %x_81
-                    store %x_82, %55
+                %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
                   }
                 }
-                %56:bool = load %x_82
-                if %56 [t: %b16, f: %b17] {  # if_7
-                  %b16 = block {  # true
+                %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 = block {  # false
+                  $B17: {  # false
                     store %x_GLF_color, vec4<f32>(0.0f)
                     exit_if  # if_7
                   }
                 }
-                %57:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-                %58:f32 = load_vector_element %57, 0u
-                %59:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-                %60:f32 = load_vector_element %59, 1u
-                %61:bool = gt %58, %60
-                if %61 [t: %b18] {  # if_8
-                  %b18 = block {  # true
+                %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
+                continue  # -> $B12
               }
-              %b12 = block {  # continuing
-                %62:i32 = load %j
-                %63:i32 = add %62, 1i
-                store %j, %63
-                next_iteration %b11
+              $B12: {  # continuing
+                %70:i32 = load %j
+                %71:i32 = add %70, 1i
+                store %j, %71
+                next_iteration  # -> $B11
               }
             }
             exit_if  # if_4
           }
         }
-        continue %b7
+        continue  # -> $B7
       }
-      %b7 = block {  # continuing
-        %64:i32 = load %i
-        %65:i32 = add %64, 1i
-        store %i, %65
-        next_iteration %b6
+      $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 {
-  %b19 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B19: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %68:void = call %main_1
-    %69:vec4<f32> = load %x_GLF_color
-    %70:main_out = construct %69
-    ret %70
+    %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
   }
 }
 
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
index 59880b5..82260ba 100644
--- 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
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,166 +8,198 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%func_ = func():f32 {
+  $B2: {
     %x:ptr<function, i32, read_write> = var
-    %x_99:f32 = load_vector_element %gl_FragCoord, 0u
-    %7:bool = lt %x_99, 1.0f
-    if %7 [t: %b3] {  # if_1
-      %b3 = block {  # true
+    %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
       }
     }
-    %8:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-    %x_104:f32 = load_vector_element %8, 0u
-    %10:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-    %x_106:f32 = load_vector_element %10, 1u
-    %12:bool = gt %x_104, %x_106
-    if %12 [t: %b4] {  # if_2
-      %b4 = block {  # true
+    %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
       }
     }
-    %13:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-    %x_111:f32 = load_vector_element %13, 0u
-    %15:i32 = convert %x_111
-    store %x, %15
     %16:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-    %x_114:f32 = load_vector_element %16, 0u
-    %x_118:i32 = load %x
-    %19:f32 = clamp %x_114, 0.0f, 1.0f
-    %20:i32 = convert %19
-    %21:i32 = mul %20, 3i
-    %22:i32 = add %x_118, %21
-    store %x, %22
-    %x_120:i32 = load %x
-    %24:f32 = convert %x_120
-    %25:f32 = add 5.0f, %24
-    ret %25
+    %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 {
-  %b5 = block {
+%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 = block {  # body
-        %x_48:i32 = load %i
-        %31:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-        %x_50:f32 = load_vector_element %31, 0u
-        %33:i32 = convert %x_50
-        %34:i32 = add 4i, %33
-        %35:bool = lt %x_48, %34
-        if %35 [t: %b8, f: %b9] {  # if_3
-          %b8 = block {  # true
+    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 = block {  # false
+          $B9: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_56:f32 = load_vector_element %gl_FragCoord, 0u
-        %37:bool = gte %x_56, 0.0f
-        if %37 [t: %b10] {  # if_4
-          %b10 = block {  # true
+        %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 = block {  # body
+            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
-                %x_64:i32 = load %j
-                %41:bool = lt %x_64, 4i
-                if %41 [t: %b13, f: %b14] {  # if_5
-                  %b13 = block {  # true
+                %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 = block {  # false
+                  $B14: {  # false
                     exit_loop  # loop_2
                   }
                 }
-                %x_67:i32 = load %j
-                %x_69:i32 = load %i
-                %x_71:f32 = call %func_
-                %45:i32 = mul 4i, %x_67
-                %46:i32 = add %45, %x_69
-                %47:ptr<function, vec2<f32>, read_write> = access %data, %46
-                store_vector_element %47, 0u, %x_71
-                %48:ptr<function, vec2<f32>, read_write> = access %data, 0i
-                %x_74:f32 = load_vector_element %48, 0u
-                %x_75:bool = eq %x_74, 5.0f
+                %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
-                %51:bool = eq %x_75, false
-                if %51 [t: %b15] {  # if_6
-                  %b15 = block {  # true
-                    %52:ptr<function, vec2<f32>, read_write> = access %data, 15i
-                    %x_80:f32 = load_vector_element %52, 0u
-                    %54:bool = eq %x_80, 5.0f
-                    store %x_81, %54
-                    %55:bool = load %x_81
-                    store %x_82_phi, %55
+                %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
                   }
                 }
-                %x_82:bool = load %x_82_phi
-                if %x_82 [t: %b16, f: %b17] {  # if_7
-                  %b16 = block {  # true
+                %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 = block {  # false
+                  $B17: {  # false
                     store %x_GLF_color, vec4<f32>(0.0f)
                     exit_if  # if_7
                   }
                 }
-                %57:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-                %x_87:f32 = load_vector_element %57, 0u
-                %59:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-                %x_89:f32 = load_vector_element %59, 1u
-                %61:bool = gt %x_87, %x_89
-                if %61 [t: %b18] {  # if_8
-                  %b18 = block {  # true
+                %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
+                continue  # -> $B12
               }
-              %b12 = block {  # continuing
-                %x_93:i32 = load %j
-                %63:i32 = add %x_93, 1i
-                store %j, %63
-                next_iteration %b11
+              $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
+        continue  # -> $B7
       }
-      %b7 = block {  # continuing
-        %x_95:i32 = load %i
-        %65:i32 = add %x_95, 1i
-        store %i, %65
-        next_iteration %b6
+      $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 {
-  %b19 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B19: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %68:void = call %main_1
-    %69:vec4<f32> = load %x_GLF_color
-    %70:main_out = construct %69
-    ret %70
+    %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
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array-2/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array-2/0-opt.spvasm.expected.ir.msl
index efdd3b1..dec6571 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array-2/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array-2/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,193 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+  %data:ptr<private, array<i32, 9>, read_write> = var
+  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
+  %temp:ptr<private, array<i32, 7>, read_write> = var
+  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+}
+
+%func_i1_ = func(%a:ptr<function, i32, read_write>):f32 {
+  $B2: {
+    %b:ptr<function, i32, read_write> = var
+    %i:ptr<function, i32, read_write> = var
+    %x_115:ptr<function, bool, read_write> = var
+    %x_116:ptr<function, bool, read_write> = var
+    store %b, 0i
+    %11:ptr<private, i32, read_write> = access %data, 0i
+    store %11, 5i
+    %12:ptr<private, i32, read_write> = access %data, 2i
+    store %12, 0i
+    %13:ptr<private, i32, read_write> = access %data, 4i
+    store %13, 0i
+    %14:ptr<private, i32, read_write> = access %data, 6i
+    store %14, 0i
+    %15:ptr<private, i32, read_write> = access %data, 8i
+    store %15, 0i
+    %16:f32 = load_vector_element %gl_FragCoord, 0u
+    %17:bool = gte %16, 0.0f
+    if %17 [t: $B3] {  # if_1
+      $B3: {  # true
+        loop [b: $B4, c: $B5] {  # loop_1
+          $B4: {  # body
+            %18:i32 = load %b
+            %19:i32 = load %a
+            %20:bool = lte %18, %19
+            if %20 [t: $B6, f: $B7] {  # if_2
+              $B6: {  # true
+                exit_if  # if_2
+              }
+              $B7: {  # false
+                exit_loop  # loop_1
+              }
+            }
+            %21:i32 = load %b
+            %22:bool = lte %21, 5i
+            if %22 [t: $B8] {  # if_3
+              $B8: {  # true
+                %23:i32 = load %b
+                %x_87:i32 = let %23
+                %25:ptr<private, i32, read_write> = access %temp, %x_87
+                %26:i32 = load %b
+                %27:ptr<private, i32, read_write> = access %data, %26
+                %28:i32 = load %27
+                store %25, %28
+                %29:i32 = load %b
+                %30:i32 = add %29, 2i
+                store %b, %30
+                exit_if  # if_3
+              }
+            }
+            continue  # -> $B5
+          }
+          $B5: {  # continuing
+            next_iteration  # -> $B4
+          }
+        }
+        exit_if  # if_1
+      }
+    }
+    store %i, 0i
+    loop [b: $B9, c: $B10] {  # loop_2
+      $B9: {  # body
+        %31:i32 = load %i
+        %32:bool = lt %31, 3i
+        if %32 [t: $B11, f: $B12] {  # if_4
+          $B11: {  # true
+            exit_if  # if_4
+          }
+          $B12: {  # false
+            exit_loop  # loop_2
+          }
+        }
+        %33:i32 = load %i
+        %x_101:i32 = let %33
+        %35:ptr<private, i32, read_write> = access %data, %x_101
+        %36:ptr<private, i32, read_write> = access %temp, 0i
+        %37:i32 = load %36
+        %38:i32 = add %37, 1i
+        store %35, %38
+        continue  # -> $B10
+      }
+      $B10: {  # continuing
+        %39:i32 = load %i
+        %40:i32 = add %39, 1i
+        store %i, %40
+        next_iteration  # -> $B9
+      }
+    }
+    %41:ptr<private, i32, read_write> = access %temp, 0i
+    %42:i32 = load %41
+    %43:bool = eq %42, 5i
+    %x_110:bool = let %43
+    store %x_116, %x_110
+    if %x_110 [t: $B13] {  # if_5
+      $B13: {  # true
+        %45:ptr<private, i32, read_write> = access %data, 0i
+        %46:i32 = load %45
+        %47:bool = eq %46, 6i
+        store %x_115, %47
+        %48:bool = load %x_115
+        store %x_116, %48
+        exit_if  # if_5
+      }
+    }
+    %49:bool = load %x_116
+    if %49 [t: $B14, f: $B15] {  # if_6
+      $B14: {  # true
+        ret 1.0f
+      }
+      $B15: {  # false
+        ret 0.0f
+      }
+    }
+    unreachable
+  }
+}
+%main_1 = func():void {
+  $B16: {
+    %i_1:ptr<function, i32, read_write> = var
+    %param:ptr<function, i32, read_write> = var
+    %param_1:ptr<function, i32, read_write> = var
+    store %i_1, 0i
+    loop [b: $B17, c: $B18] {  # loop_3
+      $B17: {  # body
+        %54:i32 = load %i_1
+        %55:bool = lt %54, 6i
+        if %55 [t: $B19, f: $B20] {  # if_7
+          $B19: {  # true
+            exit_if  # if_7
+          }
+          $B20: {  # false
+            exit_loop  # loop_3
+          }
+        }
+        %56:i32 = load %i_1
+        store %param, %56
+        %57:f32 = call %func_i1_, %param
+        %x_55:f32 = let %57
+        %59:i32 = load %i_1
+        store %param_1, %59
+        %60:f32 = call %func_i1_, %param_1
+        %x_57:f32 = let %60
+        %62:bool = eq %x_57, 1.0f
+        if %62 [t: $B21, f: $B22] {  # if_8
+          $B21: {  # true
+            store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+            exit_if  # if_8
+          }
+          $B22: {  # false
+            store %x_GLF_color, vec4<f32>(0.0f)
+            exit_if  # if_8
+          }
+        }
+        continue  # -> $B18
+      }
+      $B18: {  # continuing
+        %63:i32 = load %i_1
+        %64:i32 = add %63, 1i
+        store %i_1, %64
+        next_iteration  # -> $B17
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B23: {
+    store %gl_FragCoord, %gl_FragCoord_param
+    %67:void = call %main_1
+    %68:vec4<f32> = load %x_GLF_color
+    %69:main_out = construct %68
+    ret %69
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array-2/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array-2/0-opt.wgsl.expected.ir.msl
index efdd3b1..7e94404 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array-2/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array-2/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,210 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+  %data:ptr<private, array<i32, 9>, read_write> = var
+  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
+  %temp:ptr<private, array<i32, 7>, read_write> = var
+  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+}
+
+%func_i1_ = func(%a:ptr<function, i32, read_write>):f32 {
+  $B2: {
+    %b:ptr<function, i32, read_write> = var
+    %i:ptr<function, i32, read_write> = var
+    %x_115:ptr<function, bool, read_write> = var
+    %x_116_phi:ptr<function, bool, read_write> = var
+    store %b, 0i
+    %11:ptr<private, i32, read_write> = access %data, 0i
+    store %11, 5i
+    %12:ptr<private, i32, read_write> = access %data, 2i
+    store %12, 0i
+    %13:ptr<private, i32, read_write> = access %data, 4i
+    store %13, 0i
+    %14:ptr<private, i32, read_write> = access %data, 6i
+    store %14, 0i
+    %15:ptr<private, i32, read_write> = access %data, 8i
+    store %15, 0i
+    %16:f32 = load_vector_element %gl_FragCoord, 0u
+    %x_71:f32 = let %16
+    %18:bool = gte %x_71, 0.0f
+    if %18 [t: $B3] {  # if_1
+      $B3: {  # true
+        loop [b: $B4, c: $B5] {  # loop_1
+          $B4: {  # body
+            %19:i32 = load %b
+            %x_79:i32 = let %19
+            %21:i32 = load %a
+            %x_80:i32 = let %21
+            %23:bool = lte %x_79, %x_80
+            if %23 [t: $B6, f: $B7] {  # if_2
+              $B6: {  # true
+                exit_if  # if_2
+              }
+              $B7: {  # false
+                exit_loop  # loop_1
+              }
+            }
+            %24:i32 = load %b
+            %x_83:i32 = let %24
+            %26:bool = lte %x_83, 5i
+            if %26 [t: $B8] {  # if_3
+              $B8: {  # true
+                %27:i32 = load %b
+                %x_87:i32 = let %27
+                %29:i32 = load %b
+                %x_88:i32 = let %29
+                %31:ptr<private, i32, read_write> = access %data, %x_88
+                %32:i32 = load %31
+                %x_90:i32 = let %32
+                %34:ptr<private, i32, read_write> = access %temp, %x_87
+                store %34, %x_90
+                %35:i32 = load %b
+                %x_92:i32 = let %35
+                %37:i32 = add %x_92, 2i
+                store %b, %37
+                exit_if  # if_3
+              }
+            }
+            continue  # -> $B5
+          }
+          $B5: {  # continuing
+            next_iteration  # -> $B4
+          }
+        }
+        exit_if  # if_1
+      }
+    }
+    store %i, 0i
+    loop [b: $B9, c: $B10] {  # loop_2
+      $B9: {  # body
+        %38:i32 = load %i
+        %x_98:i32 = let %38
+        %40:bool = lt %x_98, 3i
+        if %40 [t: $B11, f: $B12] {  # if_4
+          $B11: {  # true
+            exit_if  # if_4
+          }
+          $B12: {  # false
+            exit_loop  # loop_2
+          }
+        }
+        %41:i32 = load %i
+        %x_101:i32 = let %41
+        %43:ptr<private, i32, read_write> = access %temp, 0i
+        %44:i32 = load %43
+        %x_103:i32 = let %44
+        %46:ptr<private, i32, read_write> = access %data, %x_101
+        %47:i32 = add %x_103, 1i
+        store %46, %47
+        continue  # -> $B10
+      }
+      $B10: {  # continuing
+        %48:i32 = load %i
+        %x_106:i32 = let %48
+        %50:i32 = add %x_106, 1i
+        store %i, %50
+        next_iteration  # -> $B9
+      }
+    }
+    %51:ptr<private, i32, read_write> = access %temp, 0i
+    %52:i32 = load %51
+    %x_109:i32 = let %52
+    %54:bool = eq %x_109, 5i
+    %x_110:bool = let %54
+    store %x_116_phi, %x_110
+    if %x_110 [t: $B13] {  # if_5
+      $B13: {  # true
+        %56:ptr<private, i32, read_write> = access %data, 0i
+        %57:i32 = load %56
+        %x_114:i32 = let %57
+        %59:bool = eq %x_114, 6i
+        store %x_115, %59
+        %60:bool = load %x_115
+        store %x_116_phi, %60
+        exit_if  # if_5
+      }
+    }
+    %61:bool = load %x_116_phi
+    %x_116:bool = let %61
+    if %x_116 [t: $B14, f: $B15] {  # if_6
+      $B14: {  # true
+        ret 1.0f
+      }
+      $B15: {  # false
+        ret 0.0f
+      }
+    }
+    unreachable
+  }
+}
+%main_1 = func():void {
+  $B16: {
+    %i_1:ptr<function, i32, read_write> = var
+    %param:ptr<function, i32, read_write> = var
+    %param_1:ptr<function, i32, read_write> = var
+    store %i_1, 0i
+    loop [b: $B17, c: $B18] {  # loop_3
+      $B17: {  # body
+        %67:i32 = load %i_1
+        %x_51:i32 = let %67
+        %69:bool = lt %x_51, 6i
+        if %69 [t: $B19, f: $B20] {  # if_7
+          $B19: {  # true
+            exit_if  # if_7
+          }
+          $B20: {  # false
+            exit_loop  # loop_3
+          }
+        }
+        %70:i32 = load %i_1
+        %x_54:i32 = let %70
+        store %param, %x_54
+        %72:f32 = call %func_i1_, %param
+        %x_55:f32 = let %72
+        %74:i32 = load %i_1
+        %x_56:i32 = let %74
+        store %param_1, %x_56
+        %76:f32 = call %func_i1_, %param_1
+        %x_57:f32 = let %76
+        %78:bool = eq %x_57, 1.0f
+        if %78 [t: $B21, f: $B22] {  # if_8
+          $B21: {  # true
+            store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+            exit_if  # if_8
+          }
+          $B22: {  # false
+            store %x_GLF_color, vec4<f32>(0.0f)
+            exit_if  # if_8
+          }
+        }
+        continue  # -> $B18
+      }
+      $B18: {  # continuing
+        %79:i32 = load %i_1
+        %x_62:i32 = let %79
+        %81:i32 = add %x_62, 1i
+        store %i_1, %81
+        next_iteration  # -> $B17
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B23: {
+    store %gl_FragCoord, %gl_FragCoord_param
+    %84:void = call %main_1
+    %85:vec4<f32> = load %x_GLF_color
+    %86:main_out = construct %85
+    ret %86
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array/0-opt.spvasm.expected.ir.msl
index efdd3b1..40ec97c 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: min
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array/0-opt.wgsl.expected.ir.msl
index efdd3b1..40ec97c 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: min
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/break-in-do-while-with-nested-if/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/break-in-do-while-with-nested-if/0-opt.spvasm.expected.ir.msl
index a6bf2d8..40762c2 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/break-in-do-while-with-nested-if/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/break-in-do-while-with-nested-if/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,30 +8,30 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %GLF_live12c5:ptr<function, bool, read_write> = var
     store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %5:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
         %6:f32 = load_vector_element %5, 1u
         %7:bool = lt %6, 0.0f
-        if %7 [t: %b5] {  # if_1
-          %b5 = block {  # true
+        if %7 [t: $B5] {  # if_1
+          $B5: {  # true
             store %GLF_live12c5, false
             %8:bool = load %GLF_live12c5
-            if %8 [t: %b6, f: %b7] {  # if_2
-              %b6 = block {  # true
-                continue %b4
+            if %8 [t: $B6, f: $B7] {  # if_2
+              $B6: {  # true
+                continue  # -> $B4
               }
-              %b7 = block {  # false
-                continue %b4
+              $B7: {  # false
+                continue  # -> $B4
               }
             }
             exit_if  # if_1
@@ -39,15 +39,15 @@
         }
         exit_loop  # loop_1
       }
-      %b4 = block {  # continuing
-        break_if true %b3
+      $B4: {  # continuing
+        break_if true  # -> [t: exit_loop loop_1, f: $B3]
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b8 {
-  %b8 = block {
+%tint_symbol = @fragment func():main_out {
+  $B8: {
     %10:void = call %main_1
     %11:vec4<f32> = load %x_GLF_color
     %12:main_out = construct %11
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/break-in-do-while-with-nested-if/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/break-in-do-while-with-nested-if/0-opt.wgsl.expected.ir.msl
index 67cf7b6..721ee9c 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/break-in-do-while-with-nested-if/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/break-in-do-while-with-nested-if/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,30 +8,32 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %GLF_live12c5:ptr<function, bool, read_write> = var
     store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %5:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
-        %x_31:f32 = load_vector_element %5, 1u
-        %7:bool = lt %x_31, 0.0f
-        if %7 [t: %b5] {  # if_1
-          %b5 = block {  # true
+        %6:f32 = load_vector_element %5, 1u
+        %x_31:f32 = let %6
+        %8:bool = lt %x_31, 0.0f
+        if %8 [t: $B5] {  # if_1
+          $B5: {  # true
             store %GLF_live12c5, false
-            %x_35:bool = load %GLF_live12c5
-            if %x_35 [t: %b6, f: %b7] {  # if_2
-              %b6 = block {  # true
-                continue %b4
+            %9:bool = load %GLF_live12c5
+            %x_35:bool = let %9
+            if %x_35 [t: $B6, f: $B7] {  # if_2
+              $B6: {  # true
+                continue  # -> $B4
               }
-              %b7 = block {  # false
-                continue %b4
+              $B7: {  # false
+                continue  # -> $B4
               }
             }
             exit_if  # if_1
@@ -39,19 +41,19 @@
         }
         exit_loop  # loop_1
       }
-      %b4 = block {  # continuing
-        break_if true %b3
+      $B4: {  # continuing
+        break_if true  # -> [t: exit_loop loop_1, f: $B3]
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b8 {
-  %b8 = block {
-    %10:void = call %main_1
-    %11:vec4<f32> = load %x_GLF_color
-    %12:main_out = construct %11
-    ret %12
+%tint_symbol = @fragment func():main_out {
+  $B8: {
+    %12:void = call %main_1
+    %13:vec4<f32> = load %x_GLF_color
+    %14:main_out = construct %13
+    ret %14
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/call-function-with-discard/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/call-function-with-discard/0-opt.spvasm.expected.ir.msl
index 83ac9c4..d1d328e 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/call-function-with-discard/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/call-function-with-discard/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:f32 @offset(0)
 }
 
@@ -8,55 +8,63 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%func_ = func():void -> %b2 {
-  %b2 = block {
-    %4:ptr<uniform, f32, read> = access %x_6, 0u
-    %5:f32 = load %4
-    %6:bool = gt 1.0f, %5
-    if %6 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        discard
+%func_ = func():void {
+  $B2: {
+    %5:ptr<uniform, f32, read> = access %x_6, 0u
+    %6:f32 = load %5
+    %7:bool = gt 1.0f, %6
+    if %7 [t: $B3] {  # if_1
+      $B3: {  # true
+        store %continue_execution, false
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%main_1 = func():void -> %b4 {
-  %b4 = block {
+%main_1 = func():void {
+  $B4: {
     store %x_GLF_color, vec4<f32>(0.0f)
-    loop [b: %b5, c: %b6] {  # loop_1
-      %b5 = block {  # body
-        %8:void = call %func_
-        if false [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
+    loop [b: $B5, c: $B6] {  # loop_1
+      $B5: {  # body
+        %9:void = call %func_
+        if false [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
             exit_if  # if_2
           }
-          %b8 = block {  # false
+          $B8: {  # false
             exit_loop  # loop_1
           }
         }
-        continue %b6
+        continue  # -> $B6
       }
-      %b6 = block {  # continuing
-        next_iteration %b5
+      $B6: {  # continuing
+        next_iteration  # -> $B5
       }
     }
     store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b9 {
-  %b9 = block {
-    %10:void = call %main_1
-    %11:vec4<f32> = load %x_GLF_color
-    %12:main_out = construct %11
-    ret %12
+%tint_symbol = @fragment func():main_out {
+  $B9: {
+    %11:void = call %main_1
+    %12:vec4<f32> = load %x_GLF_color
+    %13:main_out = construct %12
+    %14:bool = load %continue_execution
+    %15:bool = eq %14, false
+    if %15 [t: $B10] {  # if_3
+      $B10: {  # true
+        terminate_invocation
+      }
+    }
+    ret %13
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/call-function-with-discard/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/call-function-with-discard/0-opt.wgsl.expected.ir.msl
index 6b609e2..37b38b9 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/call-function-with-discard/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/call-function-with-discard/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:f32 @offset(0)
 }
 
@@ -8,55 +8,64 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%func_ = func():void -> %b2 {
-  %b2 = block {
-    %4:ptr<uniform, f32, read> = access %x_6, 0u
-    %x_28:f32 = load %4
-    %6:bool = gt 1.0f, %x_28
-    if %6 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        discard
+%func_ = func():void {
+  $B2: {
+    %5:ptr<uniform, f32, read> = access %x_6, 0u
+    %6:f32 = load %5
+    %x_28:f32 = let %6
+    %8:bool = gt 1.0f, %x_28
+    if %8 [t: $B3] {  # if_1
+      $B3: {  # true
+        store %continue_execution, false
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%main_1 = func():void -> %b4 {
-  %b4 = block {
+%main_1 = func():void {
+  $B4: {
     store %x_GLF_color, vec4<f32>(0.0f)
-    loop [b: %b5, c: %b6] {  # loop_1
-      %b5 = block {  # body
-        %8:void = call %func_
-        if false [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
+    loop [b: $B5, c: $B6] {  # loop_1
+      $B5: {  # body
+        %10:void = call %func_
+        if false [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
             exit_if  # if_2
           }
-          %b8 = block {  # false
+          $B8: {  # false
             exit_loop  # loop_1
           }
         }
-        continue %b6
+        continue  # -> $B6
       }
-      %b6 = block {  # continuing
-        next_iteration %b5
+      $B6: {  # continuing
+        next_iteration  # -> $B5
       }
     }
     store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b9 {
-  %b9 = block {
-    %10:void = call %main_1
-    %11:vec4<f32> = load %x_GLF_color
-    %12:main_out = construct %11
-    ret %12
+%tint_symbol = @fragment func():main_out {
+  $B9: {
+    %12:void = call %main_1
+    %13:vec4<f32> = load %x_GLF_color
+    %14:main_out = construct %13
+    %15:bool = load %continue_execution
+    %16:bool = eq %15, false
+    if %16 [t: $B10] {  # if_3
+      $B10: {  # true
+        terminate_invocation
+      }
+    }
+    ret %14
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/color-set-in-for-loop/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/color-set-in-for-loop/0-opt.wgsl.expected.ir.msl
index e4a351b..dca61b7 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/color-set-in-for-loop/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/color-set-in-for-loop/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,26 +8,24 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %4:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
-    %x_26:f32 = load_vector_element %4, 0u
-    %6:bool = gt %x_26, 1.0f
-    if %6 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        loop [b: %b4, c: %b5] {  # loop_1
-          %b4 = block {  # body
+    %5:f32 = load_vector_element %4, 0u
+    %x_26:f32 = let %5
+    %7:bool = gt %x_26, 1.0f
+    if %7 [t: $B3] {  # if_1
+      $B3: {  # true
+        loop [b: $B4] {  # loop_1
+          $B4: {  # body
             store %x_GLF_color, vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f)
             exit_loop  # loop_1
           }
-          %b5 = block {  # continuing
-            next_iteration %b4
-          }
         }
         ret
       }
@@ -36,12 +34,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b6 {
-  %b6 = block {
-    %8:void = call %main_1
-    %9:vec4<f32> = load %x_GLF_color
-    %10:main_out = construct %9
-    ret %10
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %9:void = call %main_1
+    %10:vec4<f32> = load %x_GLF_color
+    %11:main_out = construct %10
+    ret %11
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/color-write-in-loop/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/color-write-in-loop/0.spvasm.expected.ir.msl
index cdbf128..78d98a1 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/color-write-in-loop/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/color-write-in-loop/0.spvasm.expected.ir.msl
@@ -1,6 +1,121 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: S = struct @align(16) {
+  f0:i32 @offset(0)
+  f1:mat4x3<f32> @offset(16)
+}
+
+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_GLF_color:ptr<private, vec4<f32>, read_write> = var
+}
+
+%main_1 = func():void {
+  $B2: {
+    %x_51:ptr<function, i32, read_write> = var
+    %x_12:ptr<function, i32, read_write> = var
+    loop [b: $B3] {  # loop_1
+      $B3: {  # body
+        %x_45:ptr<function, S, read_write> = var
+        %x_11:ptr<function, i32, read_write> = var
+        store %x_45, S(0i, mat4x3<f32>(vec3<f32>(1.0f, 0.0f, 0.0f), vec3<f32>(0.0f, 1.0f, 0.0f), vec3<f32>(0.0f, 0.0f, 1.0f), vec3<f32>(0.0f)))
+        store %x_11, 0i
+        loop [b: $B4, c: $B5] {  # loop_2
+          $B4: {  # body
+            %x_46:ptr<function, S, read_write> = var
+            %x_9:ptr<function, i32, read_write> = var
+            %10:f32 = load_vector_element %gl_FragCoord, 0u
+            %11:bool = eq %10, 0.0f
+            %12:i32 = select 2i, 1i, %11
+            store %x_51, %12
+            %13:i32 = load %x_11
+            %14:i32 = load %x_51
+            %15:bool = lt %13, %14
+            if %15 [t: $B6, f: $B7] {  # if_1
+              $B6: {  # true
+                exit_if  # if_1
+              }
+              $B7: {  # false
+                exit_loop  # loop_2
+              }
+            }
+            continue  # -> $B5
+          }
+          $B5: {  # continuing
+            store %x_GLF_color, vec4<f32>(1.0f)
+            %16:S = load %x_45
+            store %x_46, %16
+            %17:ptr<function, i32, read_write> = access %x_46, 0u
+            %18:ptr<function, i32, read_write> = access %x_45, 0u
+            %19:i32 = load %18
+            %20:i32 = add %19, 1i
+            store %17, %20
+            %21:i32 = load %x_11
+            %22:i32 = add %21, 1i
+            store %x_9, %22
+            %23:S = load %x_46
+            store %x_45, %23
+            %24:i32 = load %x_9
+            store %x_11, %24
+            next_iteration  # -> $B4
+          }
+        }
+        %25:ptr<function, i32, read_write> = access %x_45, 0u
+        %26:i32 = load %25
+        %27:bool = lt %26, 1000i
+        if %27 [t: $B8] {  # if_2
+          $B8: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        exit_loop  # loop_1
+      }
+    }
+    store %x_12, 0i
+    loop [b: $B9, c: $B10] {  # loop_3
+      $B9: {  # body
+        %x_6:ptr<function, i32, read_write> = var
+        %29:i32 = load %x_12
+        %30:i32 = load %x_51
+        %31:bool = lt %29, %30
+        if %31 [t: $B11, f: $B12] {  # if_3
+          $B11: {  # true
+            exit_if  # if_3
+          }
+          $B12: {  # false
+            exit_loop  # loop_3
+          }
+        }
+        continue  # -> $B10
+      }
+      $B10: {  # continuing
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        %32:i32 = load %x_12
+        %33:i32 = add %32, 1i
+        store %x_6, %33
+        %34:i32 = load %x_6
+        store %x_12, %34
+        next_iteration  # -> $B9
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B13: {
+    store %gl_FragCoord, %gl_FragCoord_param
+    %37:void = call %main_1
+    %38:vec4<f32> = load %x_GLF_color
+    %39:main_out = construct %38
+    ret %39
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/color-write-in-loop/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/color-write-in-loop/0.wgsl.expected.ir.msl
index cdbf128..a8ab4b0 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/color-write-in-loop/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/color-write-in-loop/0.wgsl.expected.ir.msl
@@ -1,6 +1,125 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: S = struct @align(16) {
+  f0:i32 @offset(0)
+  f1:mat4x3<f32> @offset(16)
+}
+
+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_GLF_color:ptr<private, vec4<f32>, read_write> = var
+}
+
+%main_1 = func():void {
+  $B2: {
+    %x_51:ptr<function, i32, read_write> = var
+    %x_12_phi:ptr<function, i32, read_write> = var
+    loop [b: $B3] {  # loop_1
+      $B3: {  # body
+        %x_45:ptr<function, S, read_write> = var
+        %x_45_phi:ptr<function, S, read_write> = var
+        %x_11_phi:ptr<function, i32, read_write> = var
+        store %x_45_phi, S(0i, mat4x3<f32>(vec3<f32>(1.0f, 0.0f, 0.0f), vec3<f32>(0.0f, 1.0f, 0.0f), vec3<f32>(0.0f, 0.0f, 1.0f), vec3<f32>(0.0f)))
+        store %x_11_phi, 0i
+        loop [b: $B4, c: $B5] {  # loop_2
+          $B4: {  # body
+            %x_46:ptr<function, S, read_write> = var
+            %x_9:ptr<function, i32, read_write> = var
+            %11:S = load %x_45_phi
+            store %x_45, %11
+            %12:i32 = load %x_11_phi
+            %x_11:i32 = let %12
+            %14:f32 = load_vector_element %gl_FragCoord, 0u
+            %x_49:f32 = let %14
+            %16:bool = eq %x_49, 0.0f
+            %17:i32 = select 2i, 1i, %16
+            store %x_51, %17
+            %18:i32 = load %x_51
+            %19:bool = lt %x_11, %18
+            if %19 [t: $B6, f: $B7] {  # if_1
+              $B6: {  # true
+                exit_if  # if_1
+              }
+              $B7: {  # false
+                exit_loop  # loop_2
+              }
+            }
+            continue  # -> $B5
+          }
+          $B5: {  # continuing
+            store %x_GLF_color, vec4<f32>(1.0f)
+            %20:S = load %x_45
+            store %x_46, %20
+            %21:ptr<function, i32, read_write> = access %x_46, 0u
+            %22:ptr<function, i32, read_write> = access %x_45, 0u
+            %23:i32 = load %22
+            %24:i32 = add %23, 1i
+            store %21, %24
+            %25:i32 = add %x_11, 1i
+            store %x_9, %25
+            %26:S = load %x_46
+            store %x_45_phi, %26
+            %27:i32 = load %x_9
+            store %x_11_phi, %27
+            next_iteration  # -> $B4
+          }
+        }
+        %28:ptr<function, i32, read_write> = access %x_45, 0u
+        %29:i32 = load %28
+        %30:bool = lt %29, 1000i
+        if %30 [t: $B8] {  # if_2
+          $B8: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        exit_loop  # loop_1
+      }
+    }
+    store %x_12_phi, 0i
+    loop [b: $B9, c: $B10] {  # loop_3
+      $B9: {  # body
+        %x_6:ptr<function, i32, read_write> = var
+        %32:i32 = load %x_12_phi
+        %x_12:i32 = let %32
+        %34:i32 = load %x_51
+        %35:bool = lt %x_12, %34
+        if %35 [t: $B11, f: $B12] {  # if_3
+          $B11: {  # true
+            exit_if  # if_3
+          }
+          $B12: {  # false
+            exit_loop  # loop_3
+          }
+        }
+        continue  # -> $B10
+      }
+      $B10: {  # continuing
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        %36:i32 = add %x_12, 1i
+        store %x_6, %36
+        %37:i32 = load %x_6
+        store %x_12_phi, %37
+        next_iteration  # -> $B9
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B13: {
+    store %gl_FragCoord, %gl_FragCoord_param
+    %40:void = call %main_1
+    %41:vec4<f32> = load %x_GLF_color
+    %42:main_out = construct %41
+    ret %42
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/conditional-return-in-infinite-while/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/conditional-return-in-infinite-while/0-opt.spvasm.expected.ir.msl
index 932579f..9b7a2f3 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/conditional-return-in-infinite-while/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/conditional-return-in-infinite-while/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,24 +8,24 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %GLF_live6tree:ptr<private, array<i32, 10>, read_write> = var
   %x_9:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%GLF_live6search_ = func():i32 -> %b2 {
-  %b2 = block {
+%GLF_live6search_ = func():i32 {
+  $B2: {
     %GLF_live6index:ptr<function, i32, read_write> = var
     %GLF_live6currentNode:ptr<function, i32, read_write> = var
     store %GLF_live6index, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        if true [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        if true [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
@@ -35,29 +35,30 @@
         store %GLF_live6currentNode, %9
         %10:i32 = load %GLF_live6currentNode
         %11:bool = neq %10, 1i
-        if %11 [t: %b7] {  # if_2
-          %b7 = block {  # true
+        if %11 [t: $B7] {  # if_2
+          $B7: {  # true
             ret 1i
           }
         }
         store %GLF_live6index, 1i
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
     ret 1i
   }
 }
-%main_1 = func():void -> %b8 {
-  %b8 = block {
+%main_1 = func():void {
+  $B8: {
     %13:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
     %14:f32 = load_vector_element %13, 0u
     %15:bool = gt %14, 1.0f
-    if %15 [t: %b9] {  # if_3
-      %b9 = block {  # true
-        %x_13:i32 = call %GLF_live6search_
+    if %15 [t: $B9] {  # if_3
+      $B9: {  # true
+        %16:i32 = call %GLF_live6search_
+        %x_13:i32 = let %16
         exit_if  # if_3
       }
     }
@@ -65,12 +66,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b10 {
-  %b10 = block {
-    %18:void = call %main_1
-    %19:vec4<f32> = load %x_GLF_color
-    %20:main_out = construct %19
-    ret %20
+%tint_symbol = @fragment func():main_out {
+  $B10: {
+    %19:void = call %main_1
+    %20:vec4<f32> = load %x_GLF_color
+    %21:main_out = construct %20
+    ret %21
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/conditional-return-in-infinite-while/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/conditional-return-in-infinite-while/0-opt.wgsl.expected.ir.msl
index 2461ede..5d2305a 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/conditional-return-in-infinite-while/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/conditional-return-in-infinite-while/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,56 +8,61 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %GLF_live6tree:ptr<private, array<i32, 10>, read_write> = var
   %x_9:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%GLF_live6search_ = func():i32 -> %b2 {
-  %b2 = block {
+%GLF_live6search_ = func():i32 {
+  $B2: {
     %GLF_live6index:ptr<function, i32, read_write> = var
     %GLF_live6currentNode:ptr<function, i32, read_write> = var
     store %GLF_live6index, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        if true [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        if true [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_10:i32 = load %GLF_live6index
-        %8:ptr<private, i32, read_write> = access %GLF_live6tree, %x_10
-        %x_11:i32 = load %8
+        %7:i32 = load %GLF_live6index
+        %x_10:i32 = let %7
+        %9:ptr<private, i32, read_write> = access %GLF_live6tree, %x_10
+        %10:i32 = load %9
+        %x_11:i32 = let %10
         store %GLF_live6currentNode, %x_11
-        %x_12:i32 = load %GLF_live6currentNode
-        %11:bool = neq %x_12, 1i
-        if %11 [t: %b7] {  # if_2
-          %b7 = block {  # true
+        %12:i32 = load %GLF_live6currentNode
+        %x_12:i32 = let %12
+        %14:bool = neq %x_12, 1i
+        if %14 [t: $B7] {  # if_2
+          $B7: {  # true
             ret 1i
           }
         }
         store %GLF_live6index, 1i
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
     ret 1i
   }
 }
-%main_1 = func():void -> %b8 {
-  %b8 = block {
-    %13:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
-    %x_40:f32 = load_vector_element %13, 0u
-    %15:bool = gt %x_40, 1.0f
-    if %15 [t: %b9] {  # if_3
-      %b9 = block {  # true
-        %x_13:i32 = call %GLF_live6search_
+%main_1 = func():void {
+  $B8: {
+    %16:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
+    %17:f32 = load_vector_element %16, 0u
+    %x_40:f32 = let %17
+    %19:bool = gt %x_40, 1.0f
+    if %19 [t: $B9] {  # if_3
+      $B9: {  # true
+        %20:i32 = call %GLF_live6search_
+        %x_13:i32 = let %20
         exit_if  # if_3
       }
     }
@@ -65,12 +70,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b10 {
-  %b10 = block {
-    %18:void = call %main_1
-    %19:vec4<f32> = load %x_GLF_color
-    %20:main_out = construct %19
-    ret %20
+%tint_symbol = @fragment func():main_out {
+  $B10: {
+    %23:void = call %main_1
+    %24:vec4<f32> = load %x_GLF_color
+    %25:main_out = construct %24
+    ret %25
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/control-flow-in-function/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/control-flow-in-function/0-opt.spvasm.expected.ir.msl
index 60c4b27..22296ab 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/control-flow-in-function/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/control-flow-in-function/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,14 +8,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_25:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%drawShape_vf2_ = func(%pos:ptr<function, vec2<f32>, read_write>):vec3<f32> -> %b2 {
-  %b2 = block {
+%drawShape_vf2_ = func(%pos:ptr<function, vec2<f32>, read_write>):vec3<f32> {
+  $B2: {
     %c2:ptr<function, bool, read_write> = var
     %c3:ptr<function, bool, read_write> = var
     %c4:ptr<function, bool, read_write> = var
@@ -46,8 +46,8 @@
     %33:bool = gt %32, 1.0f
     store %c2, %33
     %34:bool = load %c2
-    if %34 [t: %b3] {  # if_1
-      %b3 = block {  # true
+    if %34 [t: $B3] {  # if_1
+      $B3: {  # true
         ret vec3<f32>(1.0f)
       }
     }
@@ -55,8 +55,8 @@
     %36:bool = lt %35, 1.0f
     store %c3, %36
     %37:bool = load %c3
-    if %37 [t: %b4] {  # if_2
-      %b4 = block {  # true
+    if %37 [t: $B4] {  # if_2
+      $B4: {  # true
         ret vec3<f32>(1.0f)
       }
     }
@@ -64,8 +64,8 @@
     %39:bool = gt %38, 1.0f
     store %c4, %39
     %40:bool = load %c4
-    if %40 [t: %b5] {  # if_3
-      %b5 = block {  # true
+    if %40 [t: $B5] {  # if_3
+      $B5: {  # true
         ret vec3<f32>(1.0f)
       }
     }
@@ -73,8 +73,8 @@
     %42:bool = lt %41, 1.0f
     store %c5, %42
     %43:bool = load %c5
-    if %43 [t: %b6] {  # if_4
-      %b6 = block {  # true
+    if %43 [t: $B6] {  # if_4
+      $B6: {  # true
         ret vec3<f32>(1.0f)
       }
     }
@@ -83,28 +83,28 @@
     %46:bool = gt %45, 1.0f
     store %c6, %46
     %47:bool = load %c6
-    if %47 [t: %b7] {  # if_5
-      %b7 = block {  # true
+    if %47 [t: $B7] {  # if_5
+      $B7: {  # true
         ret vec3<f32>(1.0f)
       }
     }
     store %GLF_live4i, 0i
-    loop [b: %b8, c: %b9] {  # loop_1
-      %b8 = block {  # body
+    loop [b: $B8, c: $B9] {  # loop_1
+      $B8: {  # body
         %48:i32 = load %GLF_live4i
         %49:bool = lt %48, 4i
-        if %49 [t: %b10, f: %b11] {  # if_6
-          %b10 = block {  # true
+        if %49 [t: $B10, f: $B11] {  # if_6
+          $B10: {  # true
             exit_if  # if_6
           }
-          %b11 = block {  # false
+          $B11: {  # false
             exit_loop  # loop_1
           }
         }
         %50:i32 = load %GLF_live4_looplimiter5
         %51:bool = gte %50, 7i
-        if %51 [t: %b12] {  # if_7
-          %b12 = block {  # true
+        if %51 [t: $B12] {  # if_7
+          $B12: {  # true
             exit_loop  # loop_1
           }
         }
@@ -114,22 +114,22 @@
         store %GLF_live7m42, mat4x2<f32>(vec2<f32>(1.0f, 0.0f), vec2<f32>(0.0f, 1.0f), vec2<f32>(0.0f), vec2<f32>(1.0f, 0.0f))
         store %GLF_live7m33, mat3x3<f32>(vec3<f32>(1.0f, 0.0f, 0.0f), vec3<f32>(0.0f, 1.0f, 0.0f), vec3<f32>(0.0f, 0.0f, 1.0f))
         store %GLF_live7cols, 2i
-        loop [b: %b13, c: %b14] {  # loop_2
-          %b13 = block {  # body
+        loop [b: $B13, c: $B14] {  # loop_2
+          $B13: {  # body
             %54:i32 = load %GLF_live7cols
             %55:bool = lt %54, 4i
-            if %55 [t: %b15, f: %b16] {  # if_8
-              %b15 = block {  # true
+            if %55 [t: $B15, f: $B16] {  # if_8
+              $B15: {  # true
                 exit_if  # if_8
               }
-              %b16 = block {  # false
+              $B16: {  # false
                 exit_loop  # loop_2
               }
             }
             %56:i32 = load %GLF_live7_looplimiter3
             %57:bool = gte %56, 7i
-            if %57 [t: %b17] {  # if_9
-              %b17 = block {  # true
+            if %57 [t: $B17] {  # if_9
+              $B17: {  # true
                 exit_loop  # loop_2
               }
             }
@@ -137,22 +137,22 @@
             %59:i32 = add %58, 1i
             store %GLF_live7_looplimiter3, %59
             store %GLF_live7rows, 2i
-            loop [b: %b18, c: %b19] {  # loop_3
-              %b18 = block {  # body
+            loop [b: $B18, c: $B19] {  # loop_3
+              $B18: {  # body
                 %60:i32 = load %GLF_live7rows
                 %61:bool = lt %60, 4i
-                if %61 [t: %b20, f: %b21] {  # if_10
-                  %b20 = block {  # true
+                if %61 [t: $B20, f: $B21] {  # if_10
+                  $B20: {  # true
                     exit_if  # if_10
                   }
-                  %b21 = block {  # false
+                  $B21: {  # false
                     exit_loop  # loop_3
                   }
                 }
                 %62:i32 = load %GLF_live7_looplimiter2
                 %63:bool = gte %62, 7i
-                if %63 [t: %b22] {  # if_11
-                  %b22 = block {  # true
+                if %63 [t: $B22] {  # if_11
+                  $B22: {  # true
                     exit_loop  # loop_3
                   }
                 }
@@ -161,22 +161,22 @@
                 store %GLF_live7_looplimiter2, %65
                 store %GLF_live7_looplimiter1, 0i
                 store %GLF_live7c, 0i
-                loop [b: %b23, c: %b24] {  # loop_4
-                  %b23 = block {  # body
+                loop [b: $B23, c: $B24] {  # loop_4
+                  $B23: {  # body
                     %66:i32 = load %GLF_live7c
                     %67:bool = lt %66, 3i
-                    if %67 [t: %b25, f: %b26] {  # if_12
-                      %b25 = block {  # true
+                    if %67 [t: $B25, f: $B26] {  # if_12
+                      $B25: {  # true
                         exit_if  # if_12
                       }
-                      %b26 = block {  # false
+                      $B26: {  # false
                         exit_loop  # loop_4
                       }
                     }
                     %68:i32 = load %GLF_live7_looplimiter1
                     %69:bool = gte %68, 7i
-                    if %69 [t: %b27] {  # if_13
-                      %b27 = block {  # true
+                    if %69 [t: $B27] {  # if_13
+                      $B27: {  # true
                         exit_loop  # loop_4
                       }
                     }
@@ -184,306 +184,332 @@
                     %71:i32 = add %70, 1i
                     store %GLF_live7_looplimiter1, %71
                     store %GLF_live7r, 0i
-                    loop [b: %b28, c: %b29] {  # loop_5
-                      %b28 = block {  # body
+                    loop [b: $B28, c: $B29] {  # loop_5
+                      $B28: {  # body
                         %72:i32 = load %GLF_live7r
                         %73:bool = lt %72, 2i
-                        if %73 [t: %b30, f: %b31] {  # if_14
-                          %b30 = block {  # true
+                        if %73 [t: $B30, f: $B31] {  # if_14
+                          $B30: {  # true
                             exit_if  # if_14
                           }
-                          %b31 = block {  # false
+                          $B31: {  # false
                             exit_loop  # loop_5
                           }
                         }
                         %74:i32 = load %GLF_live7_looplimiter0
                         %75:bool = gte %74, 7i
-                        if %75 [t: %b32] {  # if_15
-                          %b32 = block {  # true
+                        if %75 [t: $B32] {  # if_15
+                          $B32: {  # true
                             exit_loop  # loop_5
                           }
                         }
                         %76:i32 = load %GLF_live7_looplimiter0
                         %77:i32 = add %76, 1i
                         store %GLF_live7_looplimiter0, %77
-                        %x_59:i32 = load %GLF_live7c
-                        %x_60:i32 = load %GLF_live7c
-                        %x_61:i32 = load %GLF_live7c
-                        %x_62:i32 = load %GLF_live7r
-                        %x_63:i32 = load %GLF_live7r
-                        %x_64:i32 = load %GLF_live7r
-                        %84:bool = gte %x_59, 0i
-                        %85:bool = lt %x_60, 3i
-                        %86:bool = and %84, %85
-                        %87:i32 = select 0i, %x_61, %86
-                        %88:ptr<function, vec3<f32>, read_write> = access %GLF_live7m33, %87
-                        %89:bool = gte %x_62, 0i
-                        %90:bool = lt %x_63, 3i
-                        %91:bool = and %89, %90
-                        %92:i32 = select 0i, %x_64, %91
-                        store_vector_element %88, %92, 1.0f
-                        %93:ptr<uniform, vec2<f32>, read> = access %x_25, 0u
-                        %94:f32 = load_vector_element %93, 1u
-                        %95:bool = gt 0.0f, %94
-                        if %95 [t: %b33, f: %b34] {  # if_16
-                          %b33 = block {  # true
+                        %78:i32 = load %GLF_live7c
+                        %x_59:i32 = let %78
+                        %80:i32 = load %GLF_live7c
+                        %x_60:i32 = let %80
+                        %82:i32 = load %GLF_live7c
+                        %x_61:i32 = let %82
+                        %84:i32 = load %GLF_live7r
+                        %x_62:i32 = let %84
+                        %86:i32 = load %GLF_live7r
+                        %x_63:i32 = let %86
+                        %88:i32 = load %GLF_live7r
+                        %x_64:i32 = let %88
+                        %90:bool = gte %x_59, 0i
+                        %91:bool = lt %x_60, 3i
+                        %92:bool = and %90, %91
+                        %93:i32 = select 0i, %x_61, %92
+                        %94:ptr<function, vec3<f32>, read_write> = access %GLF_live7m33, %93
+                        %95:ptr<function, vec3<f32>, read_write> = let %94
+                        %96:bool = gte %x_62, 0i
+                        %97:bool = lt %x_63, 3i
+                        %98:bool = and %96, %97
+                        %99:i32 = select 0i, %x_64, %98
+                        store_vector_element %95, %99, 1.0f
+                        %100:ptr<uniform, vec2<f32>, read> = access %x_25, 0u
+                        %101:f32 = load_vector_element %100, 1u
+                        %102:bool = gt 0.0f, %101
+                        if %102 [t: $B33, f: $B34] {  # if_16
+                          $B33: {  # true
                             exit_if  # if_16
                           }
-                          %b34 = block {  # false
-                            %x_65:i32 = load %GLF_live7c
-                            %x_66:i32 = load %GLF_live7c
-                            %x_67:i32 = load %GLF_live7c
-                            %x_68:i32 = load %GLF_live7r
-                            %x_69:i32 = load %GLF_live7r
-                            %x_70:i32 = load %GLF_live7r
-                            %102:bool = gte %x_65, 0i
-                            %103:bool = lt %x_66, 4i
-                            %104:bool = and %102, %103
-                            %105:i32 = select 0i, %x_67, %104
-                            %106:ptr<function, vec2<f32>, read_write> = access %GLF_live7m42, %105
-                            %107:bool = gte %x_68, 0i
-                            %108:bool = lt %x_69, 2i
-                            %109:bool = and %107, %108
-                            %110:i32 = select 0i, %x_70, %109
-                            store_vector_element %106, %110, 1.0f
+                          $B34: {  # false
+                            %103:i32 = load %GLF_live7c
+                            %x_65:i32 = let %103
+                            %105:i32 = load %GLF_live7c
+                            %x_66:i32 = let %105
+                            %107:i32 = load %GLF_live7c
+                            %x_67:i32 = let %107
+                            %109:i32 = load %GLF_live7r
+                            %x_68:i32 = let %109
+                            %111:i32 = load %GLF_live7r
+                            %x_69:i32 = let %111
+                            %113:i32 = load %GLF_live7r
+                            %x_70:i32 = let %113
+                            %115:bool = gte %x_65, 0i
+                            %116:bool = lt %x_66, 4i
+                            %117:bool = and %115, %116
+                            %118:i32 = select 0i, %x_67, %117
+                            %119:ptr<function, vec2<f32>, read_write> = access %GLF_live7m42, %118
+                            %120:ptr<function, vec2<f32>, read_write> = let %119
+                            %121:bool = gte %x_68, 0i
+                            %122:bool = lt %x_69, 2i
+                            %123:bool = and %121, %122
+                            %124:i32 = select 0i, %x_70, %123
+                            store_vector_element %120, %124, 1.0f
                             exit_if  # if_16
                           }
                         }
-                        continue %b29
+                        continue  # -> $B29
                       }
-                      %b29 = block {  # continuing
-                        %111:i32 = load %GLF_live7r
-                        %112:i32 = add %111, 1i
-                        store %GLF_live7r, %112
-                        next_iteration %b28
+                      $B29: {  # continuing
+                        %125:i32 = load %GLF_live7r
+                        %126:i32 = add %125, 1i
+                        store %GLF_live7r, %126
+                        next_iteration  # -> $B28
                       }
                     }
-                    continue %b24
+                    continue  # -> $B24
                   }
-                  %b24 = block {  # continuing
-                    %113:i32 = load %GLF_live7c
-                    %114:i32 = add %113, 1i
-                    store %GLF_live7c, %114
-                    next_iteration %b23
+                  $B24: {  # continuing
+                    %127:i32 = load %GLF_live7c
+                    %128:i32 = add %127, 1i
+                    store %GLF_live7c, %128
+                    next_iteration  # -> $B23
                   }
                 }
-                continue %b19
+                continue  # -> $B19
               }
-              %b19 = block {  # continuing
-                %115:i32 = load %GLF_live7rows
-                %116:i32 = add %115, 1i
-                store %GLF_live7rows, %116
-                next_iteration %b18
+              $B19: {  # continuing
+                %129:i32 = load %GLF_live7rows
+                %130:i32 = add %129, 1i
+                store %GLF_live7rows, %130
+                next_iteration  # -> $B18
               }
             }
-            continue %b14
+            continue  # -> $B14
           }
-          %b14 = block {  # continuing
-            %117:i32 = load %GLF_live7cols
-            %118:i32 = add %117, 1i
-            store %GLF_live7cols, %118
-            next_iteration %b13
+          $B14: {  # continuing
+            %131:i32 = load %GLF_live7cols
+            %132:i32 = add %131, 1i
+            store %GLF_live7cols, %132
+            next_iteration  # -> $B13
           }
         }
         store %GLF_live7sum_index, 0i
         store %GLF_live7_looplimiter7, 0i
         store %GLF_live7cols_1, 2i
-        loop [b: %b35, c: %b36] {  # loop_6
-          %b35 = block {  # body
-            %119:i32 = load %GLF_live7cols_1
-            %120:bool = lt %119, 4i
-            if %120 [t: %b37, f: %b38] {  # if_17
-              %b37 = block {  # true
+        loop [b: $B35, c: $B36] {  # loop_6
+          $B35: {  # body
+            %133:i32 = load %GLF_live7cols_1
+            %134:bool = lt %133, 4i
+            if %134 [t: $B37, f: $B38] {  # if_17
+              $B37: {  # true
                 exit_if  # if_17
               }
-              %b38 = block {  # false
+              $B38: {  # false
                 exit_loop  # loop_6
               }
             }
-            %121:i32 = load %GLF_live7_looplimiter7
-            %122:bool = gte %121, 7i
-            if %122 [t: %b39] {  # if_18
-              %b39 = block {  # true
+            %135:i32 = load %GLF_live7_looplimiter7
+            %136:bool = gte %135, 7i
+            if %136 [t: $B39] {  # if_18
+              $B39: {  # true
                 exit_loop  # loop_6
               }
             }
-            %123:i32 = load %GLF_live7_looplimiter7
-            %124:i32 = add %123, 1i
-            store %GLF_live7_looplimiter7, %124
+            %137:i32 = load %GLF_live7_looplimiter7
+            %138:i32 = add %137, 1i
+            store %GLF_live7_looplimiter7, %138
             store %GLF_live7rows_1, 2i
-            %x_83:i32 = load %GLF_live7sum_index
-            %x_84:i32 = load %GLF_live7sum_index
-            %x_85:i32 = load %GLF_live7sum_index
-            %128:bool = gte %x_83, 0i
-            %129:bool = lt %x_84, 9i
-            %130:bool = and %128, %129
-            %131:i32 = select 0i, %x_85, %130
-            %132:ptr<function, f32, read_write> = access %GLF_live7sums, %131
-            store %132, 0.0f
+            %139:i32 = load %GLF_live7sum_index
+            %x_83:i32 = let %139
+            %141:i32 = load %GLF_live7sum_index
+            %x_84:i32 = let %141
+            %143:i32 = load %GLF_live7sum_index
+            %x_85:i32 = let %143
+            %145:bool = gte %x_83, 0i
+            %146:bool = lt %x_84, 9i
+            %147:bool = and %145, %146
+            %148:i32 = select 0i, %x_85, %147
+            %149:ptr<function, f32, read_write> = access %GLF_live7sums, %148
+            store %149, 0.0f
             store %GLF_live7c_1, 0i
-            loop [b: %b40, c: %b41] {  # loop_7
-              %b40 = block {  # body
-                %133:i32 = load %GLF_live7c_1
-                %134:bool = lt %133, 1i
-                if %134 [t: %b42, f: %b43] {  # if_19
-                  %b42 = block {  # true
+            loop [b: $B40, c: $B41] {  # loop_7
+              $B40: {  # body
+                %150:i32 = load %GLF_live7c_1
+                %151:bool = lt %150, 1i
+                if %151 [t: $B42, f: $B43] {  # if_19
+                  $B42: {  # true
                     exit_if  # if_19
                   }
-                  %b43 = block {  # false
+                  $B43: {  # false
                     exit_loop  # loop_7
                   }
                 }
                 store %GLF_live7r_1, 0i
-                loop [b: %b44, c: %b45] {  # loop_8
-                  %b44 = block {  # body
-                    %135:i32 = load %GLF_live7r_1
-                    %136:i32 = load %GLF_live7rows_1
-                    %137:bool = lt %135, %136
-                    if %137 [t: %b46, f: %b47] {  # if_20
-                      %b46 = block {  # true
+                loop [b: $B44, c: $B45] {  # loop_8
+                  $B44: {  # body
+                    %152:i32 = load %GLF_live7r_1
+                    %153:i32 = load %GLF_live7rows_1
+                    %154:bool = lt %152, %153
+                    if %154 [t: $B46, f: $B47] {  # if_20
+                      $B46: {  # true
                         exit_if  # if_20
                       }
-                      %b47 = block {  # false
+                      $B47: {  # false
                         exit_loop  # loop_8
                       }
                     }
-                    %138:i32 = load %GLF_live7sum_index
-                    %139:i32 = load %GLF_live7sum_index
-                    %140:bool = gte %139, 0i
-                    %141:i32 = load %GLF_live7sum_index
-                    %142:bool = lt %141, 9i
-                    %143:bool = and %140, %142
-                    %x_310:i32 = select 0i, %138, %143
-                    %145:mat3x3<f32> = load %GLF_live7m33
-                    %x_312:mat3x3<f32> = transpose %145
-                    %147:i32 = load %GLF_live7c_1
-                    %148:bool = lt %147, 3i
-                    if %148 [t: %b48, f: %b49] {  # if_21
-                      %b48 = block {  # true
+                    %155:i32 = load %GLF_live7sum_index
+                    %156:i32 = load %GLF_live7sum_index
+                    %157:bool = gte %156, 0i
+                    %158:i32 = load %GLF_live7sum_index
+                    %159:bool = lt %158, 9i
+                    %160:bool = and %157, %159
+                    %161:i32 = select 0i, %155, %160
+                    %x_310:i32 = let %161
+                    %163:mat3x3<f32> = load %GLF_live7m33
+                    %164:mat3x3<f32> = transpose %163
+                    %x_312:mat3x3<f32> = let %164
+                    %166:i32 = load %GLF_live7c_1
+                    %167:bool = lt %166, 3i
+                    if %167 [t: $B48, f: $B49] {  # if_21
+                      $B48: {  # true
                         store %x_180, 1i
                         exit_if  # if_21
                       }
-                      %b49 = block {  # false
-                        %149:ptr<uniform, vec2<f32>, read> = access %x_25, 0u
-                        %150:f32 = load_vector_element %149, 0u
-                        %151:i32 = convert %150
-                        store %x_180, %151
+                      $B49: {  # false
+                        %168:ptr<uniform, vec2<f32>, read> = access %x_25, 0u
+                        %169:f32 = load_vector_element %168, 0u
+                        %170:i32 = call %tint_f32_to_i32, %169
+                        store %x_180, %170
                         exit_if  # if_21
                       }
                     }
-                    %x_320:i32 = load %x_180
-                    %x_93:i32 = load %GLF_live7r_1
+                    %172:i32 = load %x_180
+                    %x_320:i32 = let %172
+                    %174:i32 = load %GLF_live7r_1
+                    %x_93:i32 = let %174
                     store %indexable, %x_312
-                    %154:ptr<function, f32, read_write> = access %GLF_live7sums, %x_310
-                    %155:ptr<function, f32, read_write> = access %GLF_live7sums, %x_310
-                    %156:f32 = load %155
-                    %157:ptr<function, vec3<f32>, read_write> = access %indexable, %x_320
-                    %158:bool = lt %x_93, 3i
-                    %159:i32 = select 0i, 1i, %158
-                    %160:f32 = load_vector_element %157, %159
-                    %161:f32 = add %156, %160
-                    store %154, %161
-                    %162:i32 = load %GLF_live7sum_index
-                    %163:i32 = load %GLF_live7sum_index
-                    %164:bool = gte %163, 0i
-                    %165:i32 = load %GLF_live7sum_index
-                    %166:bool = lt %165, 9i
-                    %167:bool = and %164, %166
-                    %x_332:i32 = select 0i, %162, %167
-                    %169:ptr<function, f32, read_write> = access %GLF_live7sums, %x_332
-                    %170:ptr<function, f32, read_write> = access %GLF_live7sums, %x_332
-                    %171:f32 = load %170
-                    %172:ptr<function, vec2<f32>, read_write> = access %GLF_live7m42, 1i
-                    %173:i32 = load %GLF_live7r_1
-                    %174:f32 = load_vector_element %172, %173
-                    %175:f32 = add %171, %174
-                    store %169, %175
-                    continue %b45
+                    %176:ptr<function, f32, read_write> = access %GLF_live7sums, %x_310
+                    %177:ptr<function, f32, read_write> = access %GLF_live7sums, %x_310
+                    %178:f32 = load %177
+                    %179:f32 = let %178
+                    %180:ptr<function, vec3<f32>, read_write> = access %indexable, %x_320
+                    %181:bool = lt %x_93, 3i
+                    %182:i32 = select 0i, 1i, %181
+                    %183:f32 = load_vector_element %180, %182
+                    %184:f32 = add %179, %183
+                    store %176, %184
+                    %185:i32 = load %GLF_live7sum_index
+                    %186:i32 = load %GLF_live7sum_index
+                    %187:bool = gte %186, 0i
+                    %188:i32 = load %GLF_live7sum_index
+                    %189:bool = lt %188, 9i
+                    %190:bool = and %187, %189
+                    %191:i32 = select 0i, %185, %190
+                    %x_332:i32 = let %191
+                    %193:ptr<function, f32, read_write> = access %GLF_live7sums, %x_332
+                    %194:ptr<function, f32, read_write> = access %GLF_live7sums, %x_332
+                    %195:f32 = load %194
+                    %196:ptr<function, vec2<f32>, read_write> = access %GLF_live7m42, 1i
+                    %197:i32 = load %GLF_live7r_1
+                    %198:f32 = load_vector_element %196, %197
+                    %199:f32 = add %195, %198
+                    store %193, %199
+                    continue  # -> $B45
                   }
-                  %b45 = block {  # continuing
-                    %176:i32 = load %GLF_live7r_1
-                    %177:i32 = add %176, 1i
-                    store %GLF_live7r_1, %177
-                    next_iteration %b44
+                  $B45: {  # continuing
+                    %200:i32 = load %GLF_live7r_1
+                    %201:i32 = add %200, 1i
+                    store %GLF_live7r_1, %201
+                    next_iteration  # -> $B44
                   }
                 }
-                continue %b41
+                continue  # -> $B41
               }
-              %b41 = block {  # continuing
-                %178:i32 = load %GLF_live7c_1
-                %179:i32 = add %178, 1i
-                store %GLF_live7c_1, %179
-                next_iteration %b40
+              $B41: {  # continuing
+                %202:i32 = load %GLF_live7c_1
+                %203:i32 = add %202, 1i
+                store %GLF_live7c_1, %203
+                next_iteration  # -> $B40
               }
             }
-            %180:i32 = load %GLF_live7sum_index
-            %181:i32 = add %180, 1i
-            store %GLF_live7sum_index, %181
-            continue %b36
+            %204:i32 = load %GLF_live7sum_index
+            %205:i32 = add %204, 1i
+            store %GLF_live7sum_index, %205
+            continue  # -> $B36
           }
-          %b36 = block {  # continuing
-            %182:i32 = load %GLF_live7cols_1
-            %183:i32 = add %182, 1i
-            store %GLF_live7cols_1, %183
-            next_iteration %b35
+          $B36: {  # continuing
+            %206:i32 = load %GLF_live7cols_1
+            %207:i32 = add %206, 1i
+            store %GLF_live7cols_1, %207
+            next_iteration  # -> $B35
           }
         }
-        continue %b9
+        continue  # -> $B9
       }
-      %b9 = block {  # continuing
-        %184:i32 = load %GLF_live4i
-        %185:i32 = add %184, 1i
-        store %GLF_live4i, %185
-        next_iteration %b8
+      $B9: {  # continuing
+        %208:i32 = load %GLF_live4i
+        %209:i32 = add %208, 1i
+        store %GLF_live4i, %209
+        next_iteration  # -> $B8
       }
     }
     ret vec3<f32>(1.0f)
   }
 }
-%main_1 = func():void -> %b50 {
-  %b50 = block {
+%main_1 = func():void {
+  $B50: {
     %position_1:ptr<function, vec2<f32>, read_write> = var
     %param:ptr<function, vec2<f32>, read_write> = var
     %param_1:ptr<function, vec2<f32>, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %param_2:ptr<function, vec2<f32>, read_write> = var
-    %192:ptr<uniform, vec2<f32>, read> = access %x_25, 0u
-    %193:f32 = load_vector_element %192, 0u
-    %194:bool = gte %193, 2.0f
-    if %194 [t: %b51] {  # if_22
-      %b51 = block {  # true
-        %195:vec4<f32> = load %gl_FragCoord
-        %196:vec2<f32> = swizzle %195, xy
-        store %position_1, %196
-        %197:vec2<f32> = load %position_1
-        store %param, %197
-        %x_168:vec3<f32> = call %drawShape_vf2_, %param
-        %199:vec2<f32> = load %position_1
-        store %param_1, %199
-        %x_170:vec3<f32> = call %drawShape_vf2_, %param_1
+    %216:ptr<uniform, vec2<f32>, read> = access %x_25, 0u
+    %217:f32 = load_vector_element %216, 0u
+    %218:bool = gte %217, 2.0f
+    if %218 [t: $B51] {  # if_22
+      $B51: {  # true
+        %219:vec4<f32> = load %gl_FragCoord
+        %220:vec2<f32> = swizzle %219, xy
+        store %position_1, %220
+        %221:vec2<f32> = load %position_1
+        store %param, %221
+        %222:vec3<f32> = call %drawShape_vf2_, %param
+        %x_168:vec3<f32> = let %222
+        %224:vec2<f32> = load %position_1
+        store %param_1, %224
+        %225:vec3<f32> = call %drawShape_vf2_, %param_1
+        %x_170:vec3<f32> = let %225
         store %i, 25i
-        loop [b: %b52, c: %b53] {  # loop_9
-          %b52 = block {  # body
-            %201:i32 = load %i
-            %202:bool = gt %201, 0i
-            if %202 [t: %b54, f: %b55] {  # if_23
-              %b54 = block {  # true
+        loop [b: $B52, c: $B53] {  # loop_9
+          $B52: {  # body
+            %227:i32 = load %i
+            %228:bool = gt %227, 0i
+            if %228 [t: $B54, f: $B55] {  # if_23
+              $B54: {  # true
                 exit_if  # if_23
               }
-              %b55 = block {  # false
+              $B55: {  # false
                 exit_loop  # loop_9
               }
             }
-            %203:vec2<f32> = load %position_1
-            store %param_2, %203
-            %x_178:vec3<f32> = call %drawShape_vf2_, %param_2
-            continue %b53
+            %229:vec2<f32> = load %position_1
+            store %param_2, %229
+            %230:vec3<f32> = call %drawShape_vf2_, %param_2
+            %x_178:vec3<f32> = let %230
+            continue  # -> $B53
           }
-          %b53 = block {  # continuing
-            %205:i32 = load %i
-            %206:i32 = sub %205, 1i
-            store %i, %206
-            next_iteration %b52
+          $B53: {  # continuing
+            %232:i32 = load %i
+            %233:i32 = sub %232, 1i
+            store %i, %233
+            next_iteration  # -> $B52
           }
         }
         exit_if  # if_22
@@ -493,13 +519,23 @@
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b56 {
-  %b56 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B56: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %209:void = call %main_1
-    %210:vec4<f32> = load %x_GLF_color
-    %211:main_out = construct %210
-    ret %211
+    %236:void = call %main_1
+    %237:vec4<f32> = load %x_GLF_color
+    %238:main_out = construct %237
+    ret %238
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B57: {
+    %240:i32 = convert %value
+    %241:bool = gte %value, -2147483648.0f
+    %242:i32 = select -2147483648i, %240, %241
+    %243:bool = lte %value, 2147483520.0f
+    %244:i32 = select 2147483647i, %242, %243
+    ret %244
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/control-flow-in-function/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/control-flow-in-function/0-opt.wgsl.expected.ir.msl
index 54c2790..0d82f34 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/control-flow-in-function/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/control-flow-in-function/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,14 +8,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_25:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%drawShape_vf2_ = func(%pos:ptr<function, vec2<f32>, read_write>):vec3<f32> -> %b2 {
-  %b2 = block {
+%drawShape_vf2_ = func(%pos:ptr<function, vec2<f32>, read_write>):vec3<f32> {
+  $B2: {
     %c2:ptr<function, bool, read_write> = var
     %c3:ptr<function, bool, read_write> = var
     %c4:ptr<function, bool, read_write> = var
@@ -42,450 +42,537 @@
     %GLF_live7r_1:ptr<function, i32, read_write> = var
     %x_180:ptr<function, i32, read_write> = var
     %indexable:ptr<function, mat3x3<f32>, read_write> = var
-    %x_182:f32 = load_vector_element %pos, 0u
-    %33:bool = gt %x_182, 1.0f
-    store %c2, %33
-    %x_184:bool = load %c2
-    if %x_184 [t: %b3] {  # if_1
-      %b3 = block {  # true
+    %32:f32 = load_vector_element %pos, 0u
+    %x_182:f32 = let %32
+    %34:bool = gt %x_182, 1.0f
+    store %c2, %34
+    %35:bool = load %c2
+    %x_184:bool = let %35
+    if %x_184 [t: $B3] {  # if_1
+      $B3: {  # true
         ret vec3<f32>(1.0f)
       }
     }
-    %x_188:f32 = load_vector_element %pos, 1u
-    %36:bool = lt %x_188, 1.0f
-    store %c3, %36
-    %x_190:bool = load %c3
-    if %x_190 [t: %b4] {  # if_2
-      %b4 = block {  # true
+    %37:f32 = load_vector_element %pos, 1u
+    %x_188:f32 = let %37
+    %39:bool = lt %x_188, 1.0f
+    store %c3, %39
+    %40:bool = load %c3
+    %x_190:bool = let %40
+    if %x_190 [t: $B4] {  # if_2
+      $B4: {  # true
         ret vec3<f32>(1.0f)
       }
     }
-    %x_194:f32 = load_vector_element %pos, 1u
-    %39:bool = gt %x_194, 1.0f
-    store %c4, %39
-    %x_196:bool = load %c4
-    if %x_196 [t: %b5] {  # if_3
-      %b5 = block {  # true
+    %42:f32 = load_vector_element %pos, 1u
+    %x_194:f32 = let %42
+    %44:bool = gt %x_194, 1.0f
+    store %c4, %44
+    %45:bool = load %c4
+    %x_196:bool = let %45
+    if %x_196 [t: $B5] {  # if_3
+      $B5: {  # true
         ret vec3<f32>(1.0f)
       }
     }
-    %x_200:f32 = load_vector_element %pos, 0u
-    %42:bool = lt %x_200, 1.0f
-    store %c5, %42
-    %x_202:bool = load %c5
-    if %x_202 [t: %b6] {  # if_4
-      %b6 = block {  # true
+    %47:f32 = load_vector_element %pos, 0u
+    %x_200:f32 = let %47
+    %49:bool = lt %x_200, 1.0f
+    store %c5, %49
+    %50:bool = load %c5
+    %x_202:bool = let %50
+    if %x_202 [t: $B6] {  # if_4
+      $B6: {  # true
         ret vec3<f32>(1.0f)
       }
     }
-    %x_206:f32 = load_vector_element %pos, 0u
-    %45:f32 = add %x_206, 1.0f
-    %46:bool = gt %45, 1.0f
-    store %c6, %46
-    %x_209:bool = load %c6
-    if %x_209 [t: %b7] {  # if_5
-      %b7 = block {  # true
+    %52:f32 = load_vector_element %pos, 0u
+    %x_206:f32 = let %52
+    %54:f32 = add %x_206, 1.0f
+    %55:bool = gt %54, 1.0f
+    store %c6, %55
+    %56:bool = load %c6
+    %x_209:bool = let %56
+    if %x_209 [t: $B7] {  # if_5
+      $B7: {  # true
         ret vec3<f32>(1.0f)
       }
     }
     store %GLF_live4i, 0i
-    loop [b: %b8, c: %b9] {  # loop_1
-      %b8 = block {  # body
-        %x_39:i32 = load %GLF_live4i
-        %49:bool = lt %x_39, 4i
-        if %49 [t: %b10, f: %b11] {  # if_6
-          %b10 = block {  # true
+    loop [b: $B8, c: $B9] {  # loop_1
+      $B8: {  # body
+        %58:i32 = load %GLF_live4i
+        %x_39:i32 = let %58
+        %60:bool = lt %x_39, 4i
+        if %60 [t: $B10, f: $B11] {  # if_6
+          $B10: {  # true
             exit_if  # if_6
           }
-          %b11 = block {  # false
+          $B11: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_40:i32 = load %GLF_live4_looplimiter5
-        %51:bool = gte %x_40, 7i
-        if %51 [t: %b12] {  # if_7
-          %b12 = block {  # true
+        %61:i32 = load %GLF_live4_looplimiter5
+        %x_40:i32 = let %61
+        %63:bool = gte %x_40, 7i
+        if %63 [t: $B12] {  # if_7
+          $B12: {  # true
             exit_loop  # loop_1
           }
         }
-        %x_41:i32 = load %GLF_live4_looplimiter5
-        %53:i32 = add %x_41, 1i
-        store %GLF_live4_looplimiter5, %53
+        %64:i32 = load %GLF_live4_looplimiter5
+        %x_41:i32 = let %64
+        %66:i32 = add %x_41, 1i
+        store %GLF_live4_looplimiter5, %66
         store %GLF_live7m42, mat4x2<f32>(vec2<f32>(1.0f, 0.0f), vec2<f32>(0.0f, 1.0f), vec2<f32>(0.0f), vec2<f32>(1.0f, 0.0f))
         store %GLF_live7m33, mat3x3<f32>(vec3<f32>(1.0f, 0.0f, 0.0f), vec3<f32>(0.0f, 1.0f, 0.0f), vec3<f32>(0.0f, 0.0f, 1.0f))
         store %GLF_live7cols, 2i
-        loop [b: %b13, c: %b14] {  # loop_2
-          %b13 = block {  # body
-            %x_43:i32 = load %GLF_live7cols
-            %55:bool = lt %x_43, 4i
-            if %55 [t: %b15, f: %b16] {  # if_8
-              %b15 = block {  # true
+        loop [b: $B13, c: $B14] {  # loop_2
+          $B13: {  # body
+            %67:i32 = load %GLF_live7cols
+            %x_43:i32 = let %67
+            %69:bool = lt %x_43, 4i
+            if %69 [t: $B15, f: $B16] {  # if_8
+              $B15: {  # true
                 exit_if  # if_8
               }
-              %b16 = block {  # false
+              $B16: {  # false
                 exit_loop  # loop_2
               }
             }
-            %x_44:i32 = load %GLF_live7_looplimiter3
-            %57:bool = gte %x_44, 7i
-            if %57 [t: %b17] {  # if_9
-              %b17 = block {  # true
+            %70:i32 = load %GLF_live7_looplimiter3
+            %x_44:i32 = let %70
+            %72:bool = gte %x_44, 7i
+            if %72 [t: $B17] {  # if_9
+              $B17: {  # true
                 exit_loop  # loop_2
               }
             }
-            %x_45:i32 = load %GLF_live7_looplimiter3
-            %59:i32 = add %x_45, 1i
-            store %GLF_live7_looplimiter3, %59
+            %73:i32 = load %GLF_live7_looplimiter3
+            %x_45:i32 = let %73
+            %75:i32 = add %x_45, 1i
+            store %GLF_live7_looplimiter3, %75
             store %GLF_live7rows, 2i
-            loop [b: %b18, c: %b19] {  # loop_3
-              %b18 = block {  # body
-                %x_47:i32 = load %GLF_live7rows
-                %61:bool = lt %x_47, 4i
-                if %61 [t: %b20, f: %b21] {  # if_10
-                  %b20 = block {  # true
+            loop [b: $B18, c: $B19] {  # loop_3
+              $B18: {  # body
+                %76:i32 = load %GLF_live7rows
+                %x_47:i32 = let %76
+                %78:bool = lt %x_47, 4i
+                if %78 [t: $B20, f: $B21] {  # if_10
+                  $B20: {  # true
                     exit_if  # if_10
                   }
-                  %b21 = block {  # false
+                  $B21: {  # false
                     exit_loop  # loop_3
                   }
                 }
-                %x_48:i32 = load %GLF_live7_looplimiter2
-                %63:bool = gte %x_48, 7i
-                if %63 [t: %b22] {  # if_11
-                  %b22 = block {  # true
+                %79:i32 = load %GLF_live7_looplimiter2
+                %x_48:i32 = let %79
+                %81:bool = gte %x_48, 7i
+                if %81 [t: $B22] {  # if_11
+                  $B22: {  # true
                     exit_loop  # loop_3
                   }
                 }
-                %x_49:i32 = load %GLF_live7_looplimiter2
-                %65:i32 = add %x_49, 1i
-                store %GLF_live7_looplimiter2, %65
+                %82:i32 = load %GLF_live7_looplimiter2
+                %x_49:i32 = let %82
+                %84:i32 = add %x_49, 1i
+                store %GLF_live7_looplimiter2, %84
                 store %GLF_live7_looplimiter1, 0i
                 store %GLF_live7c, 0i
-                loop [b: %b23, c: %b24] {  # loop_4
-                  %b23 = block {  # body
-                    %x_51:i32 = load %GLF_live7c
-                    %67:bool = lt %x_51, 3i
-                    if %67 [t: %b25, f: %b26] {  # if_12
-                      %b25 = block {  # true
+                loop [b: $B23, c: $B24] {  # loop_4
+                  $B23: {  # body
+                    %85:i32 = load %GLF_live7c
+                    %x_51:i32 = let %85
+                    %87:bool = lt %x_51, 3i
+                    if %87 [t: $B25, f: $B26] {  # if_12
+                      $B25: {  # true
                         exit_if  # if_12
                       }
-                      %b26 = block {  # false
+                      $B26: {  # false
                         exit_loop  # loop_4
                       }
                     }
-                    %x_52:i32 = load %GLF_live7_looplimiter1
-                    %69:bool = gte %x_52, 7i
-                    if %69 [t: %b27] {  # if_13
-                      %b27 = block {  # true
+                    %88:i32 = load %GLF_live7_looplimiter1
+                    %x_52:i32 = let %88
+                    %90:bool = gte %x_52, 7i
+                    if %90 [t: $B27] {  # if_13
+                      $B27: {  # true
                         exit_loop  # loop_4
                       }
                     }
-                    %x_53:i32 = load %GLF_live7_looplimiter1
-                    %71:i32 = add %x_53, 1i
-                    store %GLF_live7_looplimiter1, %71
+                    %91:i32 = load %GLF_live7_looplimiter1
+                    %x_53:i32 = let %91
+                    %93:i32 = add %x_53, 1i
+                    store %GLF_live7_looplimiter1, %93
                     store %GLF_live7r, 0i
-                    loop [b: %b28, c: %b29] {  # loop_5
-                      %b28 = block {  # body
-                        %x_55:i32 = load %GLF_live7r
-                        %73:bool = lt %x_55, 2i
-                        if %73 [t: %b30, f: %b31] {  # if_14
-                          %b30 = block {  # true
+                    loop [b: $B28, c: $B29] {  # loop_5
+                      $B28: {  # body
+                        %94:i32 = load %GLF_live7r
+                        %x_55:i32 = let %94
+                        %96:bool = lt %x_55, 2i
+                        if %96 [t: $B30, f: $B31] {  # if_14
+                          $B30: {  # true
                             exit_if  # if_14
                           }
-                          %b31 = block {  # false
+                          $B31: {  # false
                             exit_loop  # loop_5
                           }
                         }
-                        %x_56:i32 = load %GLF_live7_looplimiter0
-                        %75:bool = gte %x_56, 7i
-                        if %75 [t: %b32] {  # if_15
-                          %b32 = block {  # true
+                        %97:i32 = load %GLF_live7_looplimiter0
+                        %x_56:i32 = let %97
+                        %99:bool = gte %x_56, 7i
+                        if %99 [t: $B32] {  # if_15
+                          $B32: {  # true
                             exit_loop  # loop_5
                           }
                         }
-                        %x_57:i32 = load %GLF_live7_looplimiter0
-                        %77:i32 = add %x_57, 1i
-                        store %GLF_live7_looplimiter0, %77
-                        %x_59:i32 = load %GLF_live7c
-                        %x_60:i32 = load %GLF_live7c
-                        %x_61:i32 = load %GLF_live7c
-                        %x_62:i32 = load %GLF_live7r
-                        %x_63:i32 = load %GLF_live7r
-                        %x_64:i32 = load %GLF_live7r
-                        %84:bool = gte %x_59, 0i
-                        %85:bool = lt %x_60, 3i
-                        %86:bool = and %84, %85
-                        %87:i32 = select 0i, %x_61, %86
-                        %88:ptr<function, vec3<f32>, read_write> = access %GLF_live7m33, %87
-                        %89:bool = gte %x_62, 0i
-                        %90:bool = lt %x_63, 3i
-                        %91:bool = and %89, %90
-                        %92:i32 = select 0i, %x_64, %91
-                        store_vector_element %88, %92, 1.0f
-                        %93:ptr<uniform, vec2<f32>, read> = access %x_25, 0u
-                        %x_267:f32 = load_vector_element %93, 1u
-                        %95:bool = gt 0.0f, %x_267
-                        if %95 [t: %b33, f: %b34] {  # if_16
-                          %b33 = block {  # true
+                        %100:i32 = load %GLF_live7_looplimiter0
+                        %x_57:i32 = let %100
+                        %102:i32 = add %x_57, 1i
+                        store %GLF_live7_looplimiter0, %102
+                        %103:i32 = load %GLF_live7c
+                        %x_59:i32 = let %103
+                        %105:i32 = load %GLF_live7c
+                        %x_60:i32 = let %105
+                        %107:i32 = load %GLF_live7c
+                        %x_61:i32 = let %107
+                        %109:i32 = load %GLF_live7r
+                        %x_62:i32 = let %109
+                        %111:i32 = load %GLF_live7r
+                        %x_63:i32 = let %111
+                        %113:i32 = load %GLF_live7r
+                        %x_64:i32 = let %113
+                        %115:bool = gte %x_59, 0i
+                        %116:bool = lt %x_60, 3i
+                        %117:bool = and %115, %116
+                        %118:i32 = select 0i, %x_61, %117
+                        %119:ptr<function, vec3<f32>, read_write> = access %GLF_live7m33, %118
+                        %120:ptr<function, vec3<f32>, read_write> = let %119
+                        %121:bool = gte %x_62, 0i
+                        %122:bool = lt %x_63, 3i
+                        %123:bool = and %121, %122
+                        %124:i32 = select 0i, %x_64, %123
+                        store_vector_element %120, %124, 1.0f
+                        %125:ptr<uniform, vec2<f32>, read> = access %x_25, 0u
+                        %126:f32 = load_vector_element %125, 1u
+                        %x_267:f32 = let %126
+                        %128:bool = gt 0.0f, %x_267
+                        if %128 [t: $B33, f: $B34] {  # if_16
+                          $B33: {  # true
                             exit_if  # if_16
                           }
-                          %b34 = block {  # false
-                            %x_65:i32 = load %GLF_live7c
-                            %x_66:i32 = load %GLF_live7c
-                            %x_67:i32 = load %GLF_live7c
-                            %x_68:i32 = load %GLF_live7r
-                            %x_69:i32 = load %GLF_live7r
-                            %x_70:i32 = load %GLF_live7r
-                            %102:bool = gte %x_65, 0i
-                            %103:bool = lt %x_66, 4i
-                            %104:bool = and %102, %103
-                            %105:i32 = select 0i, %x_67, %104
-                            %106:ptr<function, vec2<f32>, read_write> = access %GLF_live7m42, %105
-                            %107:bool = gte %x_68, 0i
-                            %108:bool = lt %x_69, 2i
-                            %109:bool = and %107, %108
-                            %110:i32 = select 0i, %x_70, %109
-                            store_vector_element %106, %110, 1.0f
+                          $B34: {  # false
+                            %129:i32 = load %GLF_live7c
+                            %x_65:i32 = let %129
+                            %131:i32 = load %GLF_live7c
+                            %x_66:i32 = let %131
+                            %133:i32 = load %GLF_live7c
+                            %x_67:i32 = let %133
+                            %135:i32 = load %GLF_live7r
+                            %x_68:i32 = let %135
+                            %137:i32 = load %GLF_live7r
+                            %x_69:i32 = let %137
+                            %139:i32 = load %GLF_live7r
+                            %x_70:i32 = let %139
+                            %141:bool = gte %x_65, 0i
+                            %142:bool = lt %x_66, 4i
+                            %143:bool = and %141, %142
+                            %144:i32 = select 0i, %x_67, %143
+                            %145:ptr<function, vec2<f32>, read_write> = access %GLF_live7m42, %144
+                            %146:ptr<function, vec2<f32>, read_write> = let %145
+                            %147:bool = gte %x_68, 0i
+                            %148:bool = lt %x_69, 2i
+                            %149:bool = and %147, %148
+                            %150:i32 = select 0i, %x_70, %149
+                            store_vector_element %146, %150, 1.0f
                             exit_if  # if_16
                           }
                         }
-                        continue %b29
+                        continue  # -> $B29
                       }
-                      %b29 = block {  # continuing
-                        %x_71:i32 = load %GLF_live7r
-                        %112:i32 = add %x_71, 1i
-                        store %GLF_live7r, %112
-                        next_iteration %b28
+                      $B29: {  # continuing
+                        %151:i32 = load %GLF_live7r
+                        %x_71:i32 = let %151
+                        %153:i32 = add %x_71, 1i
+                        store %GLF_live7r, %153
+                        next_iteration  # -> $B28
                       }
                     }
-                    continue %b24
+                    continue  # -> $B24
                   }
-                  %b24 = block {  # continuing
-                    %x_73:i32 = load %GLF_live7c
-                    %114:i32 = add %x_73, 1i
-                    store %GLF_live7c, %114
-                    next_iteration %b23
+                  $B24: {  # continuing
+                    %154:i32 = load %GLF_live7c
+                    %x_73:i32 = let %154
+                    %156:i32 = add %x_73, 1i
+                    store %GLF_live7c, %156
+                    next_iteration  # -> $B23
                   }
                 }
-                continue %b19
+                continue  # -> $B19
               }
-              %b19 = block {  # continuing
-                %x_75:i32 = load %GLF_live7rows
-                %116:i32 = add %x_75, 1i
-                store %GLF_live7rows, %116
-                next_iteration %b18
+              $B19: {  # continuing
+                %157:i32 = load %GLF_live7rows
+                %x_75:i32 = let %157
+                %159:i32 = add %x_75, 1i
+                store %GLF_live7rows, %159
+                next_iteration  # -> $B18
               }
             }
-            continue %b14
+            continue  # -> $B14
           }
-          %b14 = block {  # continuing
-            %x_77:i32 = load %GLF_live7cols
-            %118:i32 = add %x_77, 1i
-            store %GLF_live7cols, %118
-            next_iteration %b13
+          $B14: {  # continuing
+            %160:i32 = load %GLF_live7cols
+            %x_77:i32 = let %160
+            %162:i32 = add %x_77, 1i
+            store %GLF_live7cols, %162
+            next_iteration  # -> $B13
           }
         }
         store %GLF_live7sum_index, 0i
         store %GLF_live7_looplimiter7, 0i
         store %GLF_live7cols_1, 2i
-        loop [b: %b35, c: %b36] {  # loop_6
-          %b35 = block {  # body
-            %x_79:i32 = load %GLF_live7cols_1
-            %120:bool = lt %x_79, 4i
-            if %120 [t: %b37, f: %b38] {  # if_17
-              %b37 = block {  # true
+        loop [b: $B35, c: $B36] {  # loop_6
+          $B35: {  # body
+            %163:i32 = load %GLF_live7cols_1
+            %x_79:i32 = let %163
+            %165:bool = lt %x_79, 4i
+            if %165 [t: $B37, f: $B38] {  # if_17
+              $B37: {  # true
                 exit_if  # if_17
               }
-              %b38 = block {  # false
+              $B38: {  # false
                 exit_loop  # loop_6
               }
             }
-            %x_80:i32 = load %GLF_live7_looplimiter7
-            %122:bool = gte %x_80, 7i
-            if %122 [t: %b39] {  # if_18
-              %b39 = block {  # true
+            %166:i32 = load %GLF_live7_looplimiter7
+            %x_80:i32 = let %166
+            %168:bool = gte %x_80, 7i
+            if %168 [t: $B39] {  # if_18
+              $B39: {  # true
                 exit_loop  # loop_6
               }
             }
-            %x_81:i32 = load %GLF_live7_looplimiter7
-            %124:i32 = add %x_81, 1i
-            store %GLF_live7_looplimiter7, %124
+            %169:i32 = load %GLF_live7_looplimiter7
+            %x_81:i32 = let %169
+            %171:i32 = add %x_81, 1i
+            store %GLF_live7_looplimiter7, %171
             store %GLF_live7rows_1, 2i
-            %x_83:i32 = load %GLF_live7sum_index
-            %x_84:i32 = load %GLF_live7sum_index
-            %x_85:i32 = load %GLF_live7sum_index
-            %128:bool = gte %x_83, 0i
-            %129:bool = lt %x_84, 9i
-            %130:bool = and %128, %129
-            %131:i32 = select 0i, %x_85, %130
-            %132:ptr<function, f32, read_write> = access %GLF_live7sums, %131
-            store %132, 0.0f
+            %172:i32 = load %GLF_live7sum_index
+            %x_83:i32 = let %172
+            %174:i32 = load %GLF_live7sum_index
+            %x_84:i32 = let %174
+            %176:i32 = load %GLF_live7sum_index
+            %x_85:i32 = let %176
+            %178:bool = gte %x_83, 0i
+            %179:bool = lt %x_84, 9i
+            %180:bool = and %178, %179
+            %181:i32 = select 0i, %x_85, %180
+            %182:ptr<function, f32, read_write> = access %GLF_live7sums, %181
+            store %182, 0.0f
             store %GLF_live7c_1, 0i
-            loop [b: %b40, c: %b41] {  # loop_7
-              %b40 = block {  # body
-                %x_86:i32 = load %GLF_live7c_1
-                %134:bool = lt %x_86, 1i
-                if %134 [t: %b42, f: %b43] {  # if_19
-                  %b42 = block {  # true
+            loop [b: $B40, c: $B41] {  # loop_7
+              $B40: {  # body
+                %183:i32 = load %GLF_live7c_1
+                %x_86:i32 = let %183
+                %185:bool = lt %x_86, 1i
+                if %185 [t: $B42, f: $B43] {  # if_19
+                  $B42: {  # true
                     exit_if  # if_19
                   }
-                  %b43 = block {  # false
+                  $B43: {  # false
                     exit_loop  # loop_7
                   }
                 }
                 store %GLF_live7r_1, 0i
-                loop [b: %b44, c: %b45] {  # loop_8
-                  %b44 = block {  # body
-                    %x_87:i32 = load %GLF_live7r_1
-                    %x_88:i32 = load %GLF_live7rows_1
-                    %137:bool = lt %x_87, %x_88
-                    if %137 [t: %b46, f: %b47] {  # if_20
-                      %b46 = block {  # true
+                loop [b: $B44, c: $B45] {  # loop_8
+                  $B44: {  # body
+                    %186:i32 = load %GLF_live7r_1
+                    %x_87:i32 = let %186
+                    %188:i32 = load %GLF_live7rows_1
+                    %x_88:i32 = let %188
+                    %190:bool = lt %x_87, %x_88
+                    if %190 [t: $B46, f: $B47] {  # if_20
+                      $B46: {  # true
                         exit_if  # if_20
                       }
-                      %b47 = block {  # false
+                      $B47: {  # false
                         exit_loop  # loop_8
                       }
                     }
-                    %x_89:i32 = load %GLF_live7sum_index
-                    %x_90:i32 = load %GLF_live7sum_index
-                    %x_91:i32 = load %GLF_live7sum_index
-                    %141:bool = gte %x_89, 0i
-                    %142:bool = lt %x_90, 9i
-                    %143:bool = and %141, %142
-                    %x_310:i32 = select 0i, %x_91, %143
-                    %x_311:mat3x3<f32> = load %GLF_live7m33
-                    %x_312:mat3x3<f32> = transpose %x_311
-                    %x_92:i32 = load %GLF_live7c_1
-                    %148:bool = lt %x_92, 3i
-                    if %148 [t: %b48, f: %b49] {  # if_21
-                      %b48 = block {  # true
+                    %191:i32 = load %GLF_live7sum_index
+                    %x_89:i32 = let %191
+                    %193:i32 = load %GLF_live7sum_index
+                    %x_90:i32 = let %193
+                    %195:i32 = load %GLF_live7sum_index
+                    %x_91:i32 = let %195
+                    %197:bool = gte %x_89, 0i
+                    %198:bool = lt %x_90, 9i
+                    %199:bool = and %197, %198
+                    %200:i32 = select 0i, %x_91, %199
+                    %x_310:i32 = let %200
+                    %202:mat3x3<f32> = load %GLF_live7m33
+                    %x_311:mat3x3<f32> = let %202
+                    %204:mat3x3<f32> = transpose %x_311
+                    %x_312:mat3x3<f32> = let %204
+                    %206:i32 = load %GLF_live7c_1
+                    %x_92:i32 = let %206
+                    %208:bool = lt %x_92, 3i
+                    if %208 [t: $B48, f: $B49] {  # if_21
+                      $B48: {  # true
                         store %x_180, 1i
                         exit_if  # if_21
                       }
-                      %b49 = block {  # false
-                        %149:ptr<uniform, vec2<f32>, read> = access %x_25, 0u
-                        %x_318:f32 = load_vector_element %149, 0u
-                        %151:i32 = convert %x_318
-                        store %x_180, %151
+                      $B49: {  # false
+                        %209:ptr<uniform, vec2<f32>, read> = access %x_25, 0u
+                        %210:f32 = load_vector_element %209, 0u
+                        %x_318:f32 = let %210
+                        %212:i32 = call %tint_f32_to_i32, %x_318
+                        store %x_180, %212
                         exit_if  # if_21
                       }
                     }
-                    %x_320:i32 = load %x_180
-                    %x_93:i32 = load %GLF_live7r_1
+                    %214:i32 = load %x_180
+                    %x_320:i32 = let %214
+                    %216:i32 = load %GLF_live7r_1
+                    %x_93:i32 = let %216
                     store %indexable, %x_312
-                    %154:ptr<function, vec3<f32>, read_write> = access %indexable, %x_320
-                    %155:bool = lt %x_93, 3i
-                    %156:i32 = select 0i, 1i, %155
-                    %x_324:f32 = load_vector_element %154, %156
-                    %158:ptr<function, f32, read_write> = access %GLF_live7sums, %x_310
-                    %x_326:f32 = load %158
-                    %160:ptr<function, f32, read_write> = access %GLF_live7sums, %x_310
-                    %161:f32 = add %x_326, %x_324
-                    store %160, %161
-                    %x_94:i32 = load %GLF_live7sum_index
-                    %x_95:i32 = load %GLF_live7sum_index
-                    %x_96:i32 = load %GLF_live7sum_index
-                    %165:bool = gte %x_94, 0i
-                    %166:bool = lt %x_95, 9i
-                    %167:bool = and %165, %166
-                    %x_332:i32 = select 0i, %x_96, %167
-                    %x_97:i32 = load %GLF_live7r_1
-                    %170:ptr<function, vec2<f32>, read_write> = access %GLF_live7m42, 1i
-                    %x_334:f32 = load_vector_element %170, %x_97
-                    %172:ptr<function, f32, read_write> = access %GLF_live7sums, %x_332
-                    %x_336:f32 = load %172
-                    %174:ptr<function, f32, read_write> = access %GLF_live7sums, %x_332
-                    %175:f32 = add %x_336, %x_334
-                    store %174, %175
-                    continue %b45
+                    %218:ptr<function, vec3<f32>, read_write> = access %indexable, %x_320
+                    %219:bool = lt %x_93, 3i
+                    %220:i32 = select 0i, 1i, %219
+                    %221:f32 = load_vector_element %218, %220
+                    %x_324:f32 = let %221
+                    %223:ptr<function, f32, read_write> = access %GLF_live7sums, %x_310
+                    %224:f32 = load %223
+                    %x_326:f32 = let %224
+                    %226:ptr<function, f32, read_write> = access %GLF_live7sums, %x_310
+                    %227:f32 = add %x_326, %x_324
+                    store %226, %227
+                    %228:i32 = load %GLF_live7sum_index
+                    %x_94:i32 = let %228
+                    %230:i32 = load %GLF_live7sum_index
+                    %x_95:i32 = let %230
+                    %232:i32 = load %GLF_live7sum_index
+                    %x_96:i32 = let %232
+                    %234:bool = gte %x_94, 0i
+                    %235:bool = lt %x_95, 9i
+                    %236:bool = and %234, %235
+                    %237:i32 = select 0i, %x_96, %236
+                    %x_332:i32 = let %237
+                    %239:i32 = load %GLF_live7r_1
+                    %x_97:i32 = let %239
+                    %241:ptr<function, vec2<f32>, read_write> = access %GLF_live7m42, 1i
+                    %242:f32 = load_vector_element %241, %x_97
+                    %x_334:f32 = let %242
+                    %244:ptr<function, f32, read_write> = access %GLF_live7sums, %x_332
+                    %245:f32 = load %244
+                    %x_336:f32 = let %245
+                    %247:ptr<function, f32, read_write> = access %GLF_live7sums, %x_332
+                    %248:f32 = add %x_336, %x_334
+                    store %247, %248
+                    continue  # -> $B45
                   }
-                  %b45 = block {  # continuing
-                    %x_98:i32 = load %GLF_live7r_1
-                    %177:i32 = add %x_98, 1i
-                    store %GLF_live7r_1, %177
-                    next_iteration %b44
+                  $B45: {  # continuing
+                    %249:i32 = load %GLF_live7r_1
+                    %x_98:i32 = let %249
+                    %251:i32 = add %x_98, 1i
+                    store %GLF_live7r_1, %251
+                    next_iteration  # -> $B44
                   }
                 }
-                continue %b41
+                continue  # -> $B41
               }
-              %b41 = block {  # continuing
-                %x_100:i32 = load %GLF_live7c_1
-                %179:i32 = add %x_100, 1i
-                store %GLF_live7c_1, %179
-                next_iteration %b40
+              $B41: {  # continuing
+                %252:i32 = load %GLF_live7c_1
+                %x_100:i32 = let %252
+                %254:i32 = add %x_100, 1i
+                store %GLF_live7c_1, %254
+                next_iteration  # -> $B40
               }
             }
-            %x_102:i32 = load %GLF_live7sum_index
-            %181:i32 = add %x_102, 1i
-            store %GLF_live7sum_index, %181
-            continue %b36
+            %255:i32 = load %GLF_live7sum_index
+            %x_102:i32 = let %255
+            %257:i32 = add %x_102, 1i
+            store %GLF_live7sum_index, %257
+            continue  # -> $B36
           }
-          %b36 = block {  # continuing
-            %x_104:i32 = load %GLF_live7cols_1
-            %183:i32 = add %x_104, 1i
-            store %GLF_live7cols_1, %183
-            next_iteration %b35
+          $B36: {  # continuing
+            %258:i32 = load %GLF_live7cols_1
+            %x_104:i32 = let %258
+            %260:i32 = add %x_104, 1i
+            store %GLF_live7cols_1, %260
+            next_iteration  # -> $B35
           }
         }
-        continue %b9
+        continue  # -> $B9
       }
-      %b9 = block {  # continuing
-        %x_106:i32 = load %GLF_live4i
-        %185:i32 = add %x_106, 1i
-        store %GLF_live4i, %185
-        next_iteration %b8
+      $B9: {  # continuing
+        %261:i32 = load %GLF_live4i
+        %x_106:i32 = let %261
+        %263:i32 = add %x_106, 1i
+        store %GLF_live4i, %263
+        next_iteration  # -> $B8
       }
     }
     ret vec3<f32>(1.0f)
   }
 }
-%main_1 = func():void -> %b50 {
-  %b50 = block {
+%main_1 = func():void {
+  $B50: {
     %position:ptr<function, vec2<f32>, read_write> = var
     %param:ptr<function, vec2<f32>, read_write> = var
     %param_1:ptr<function, vec2<f32>, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %param_2:ptr<function, vec2<f32>, read_write> = var
-    %192:ptr<uniform, vec2<f32>, read> = access %x_25, 0u
-    %x_161:f32 = load_vector_element %192, 0u
-    %194:bool = gte %x_161, 2.0f
-    if %194 [t: %b51] {  # if_22
-      %b51 = block {  # true
-        %x_165:vec4<f32> = load %gl_FragCoord
-        %196:f32 = access %x_165, 0u
-        %197:f32 = access %x_165, 1u
-        %198:vec2<f32> = construct %196, %197
-        store %position, %198
-        %x_167:vec2<f32> = load %position
+    %270:ptr<uniform, vec2<f32>, read> = access %x_25, 0u
+    %271:f32 = load_vector_element %270, 0u
+    %x_161:f32 = let %271
+    %273:bool = gte %x_161, 2.0f
+    if %273 [t: $B51] {  # if_22
+      $B51: {  # true
+        %274:vec4<f32> = load %gl_FragCoord
+        %x_165:vec4<f32> = let %274
+        %276:f32 = access %x_165, 0u
+        %277:f32 = access %x_165, 1u
+        %278:vec2<f32> = construct %276, %277
+        store %position, %278
+        %279:vec2<f32> = load %position
+        %x_167:vec2<f32> = let %279
         store %param, %x_167
-        %x_168:vec3<f32> = call %drawShape_vf2_, %param
-        %x_169:vec2<f32> = load %position
+        %281:vec3<f32> = call %drawShape_vf2_, %param
+        %x_168:vec3<f32> = let %281
+        %283:vec2<f32> = load %position
+        %x_169:vec2<f32> = let %283
         store %param_1, %x_169
-        %x_170:vec3<f32> = call %drawShape_vf2_, %param_1
+        %285:vec3<f32> = call %drawShape_vf2_, %param_1
+        %x_170:vec3<f32> = let %285
         store %i, 25i
-        loop [b: %b52, c: %b53] {  # loop_9
-          %b52 = block {  # body
-            %x_108:i32 = load %i
-            %204:bool = gt %x_108, 0i
-            if %204 [t: %b54, f: %b55] {  # if_23
-              %b54 = block {  # true
+        loop [b: $B52, c: $B53] {  # loop_9
+          $B52: {  # body
+            %287:i32 = load %i
+            %x_108:i32 = let %287
+            %289:bool = gt %x_108, 0i
+            if %289 [t: $B54, f: $B55] {  # if_23
+              $B54: {  # true
                 exit_if  # if_23
               }
-              %b55 = block {  # false
+              $B55: {  # false
                 exit_loop  # loop_9
               }
             }
-            %x_177:vec2<f32> = load %position
+            %290:vec2<f32> = load %position
+            %x_177:vec2<f32> = let %290
             store %param_2, %x_177
-            %x_178:vec3<f32> = call %drawShape_vf2_, %param_2
-            continue %b53
+            %292:vec3<f32> = call %drawShape_vf2_, %param_2
+            %x_178:vec3<f32> = let %292
+            continue  # -> $B53
           }
-          %b53 = block {  # continuing
-            %x_109:i32 = load %i
-            %208:i32 = sub %x_109, 1i
-            store %i, %208
-            next_iteration %b52
+          $B53: {  # continuing
+            %294:i32 = load %i
+            %x_109:i32 = let %294
+            %296:i32 = sub %x_109, 1i
+            store %i, %296
+            next_iteration  # -> $B52
           }
         }
         exit_if  # if_22
@@ -495,13 +582,23 @@
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b56 {
-  %b56 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B56: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %211:void = call %main_1
-    %212:vec4<f32> = load %x_GLF_color
-    %213:main_out = construct %212
-    ret %213
+    %299:void = call %main_1
+    %300:vec4<f32> = load %x_GLF_color
+    %301:main_out = construct %300
+    ret %301
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B57: {
+    %303:i32 = convert %value
+    %304:bool = gte %value, -2147483648.0f
+    %305:i32 = select -2147483648i, %303, %304
+    %306:bool = lte %value, 2147483520.0f
+    %307:i32 = select 2147483647i, %305, %306
+    ret %307
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-access-array-dot/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-access-array-dot/0-opt.spvasm.expected.ir.msl
index 5938e04..c627809 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-access-array-dot/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-access-array-dot/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,95 +20,103 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_9:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %numbers:ptr<function, array<i32, 3>, read_write> = var
     %a:ptr<function, vec2<f32>, read_write> = var
     %b:ptr<function, f32, read_write> = var
     %8:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_38:i32 = load %8
-    %10:ptr<function, i32, read_write> = access %numbers, %x_38
-    %11:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %12:i32 = load %11
-    store %10, %12
-    %13:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_43:i32 = load %13
-    %15:ptr<function, i32, read_write> = access %numbers, %x_43
-    %16:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %17:i32 = load %16
-    store %15, %17
-    %18:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_48:i32 = load %18
-    %20:ptr<function, i32, read_write> = access %numbers, %x_48
-    %21:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %22:i32 = load %21
-    store %20, %22
-    %23:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %24:i32 = load %23
-    %25:f32 = convert %24
-    %26:ptr<uniform, f32, read> = access %x_9, 0u, 2i, 0u
-    %27:f32 = load %26
-    %28:bool = lt 0.0f, %27
-    %29:i32 = select 2i, 1i, %28
-    %30:ptr<function, i32, read_write> = access %numbers, %29
-    %31:i32 = load %30
-    %32:f32 = convert %31
-    %33:vec2<f32> = construct %25, %32
-    store %a, %33
-    %34:vec2<f32> = load %a
-    %35:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
-    %36:f32 = load %35
-    %37:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
-    %38:f32 = load %37
-    %39:vec2<f32> = construct %36, %38
-    %40:f32 = dot %34, %39
-    store %b, %40
-    %41:f32 = load %b
-    %42:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
+    %9:i32 = load %8
+    %x_38:i32 = let %9
+    %11:ptr<function, i32, read_write> = access %numbers, %x_38
+    %12:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %13:i32 = load %12
+    store %11, %13
+    %14:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %15:i32 = load %14
+    %x_43:i32 = let %15
+    %17:ptr<function, i32, read_write> = access %numbers, %x_43
+    %18:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %19:i32 = load %18
+    store %17, %19
+    %20:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %21:i32 = load %20
+    %x_48:i32 = let %21
+    %23:ptr<function, i32, read_write> = access %numbers, %x_48
+    %24:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %25:i32 = load %24
+    store %23, %25
+    %26:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %27:i32 = load %26
+    %28:f32 = convert %27
+    %29:f32 = let %28
+    %30:ptr<uniform, f32, read> = access %x_9, 0u, 2i, 0u
+    %31:f32 = load %30
+    %32:bool = lt 0.0f, %31
+    %33:i32 = select 2i, 1i, %32
+    %34:ptr<function, i32, read_write> = access %numbers, %33
+    %35:i32 = load %34
+    %36:f32 = convert %35
+    %37:vec2<f32> = construct %29, %36
+    store %a, %37
+    %38:vec2<f32> = load %a
+    %39:vec2<f32> = let %38
+    %40:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
+    %41:f32 = load %40
+    %42:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
     %43:f32 = load %42
-    %44:bool = eq %41, %43
-    if %44 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %45:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %46:i32 = load %45
-        %47:f32 = convert %46
-        %48:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %49:i32 = load %48
-        %50:f32 = convert %49
-        %51:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %52:i32 = load %51
-        %53:f32 = convert %52
-        %54:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %44:vec2<f32> = construct %41, %43
+    %45:f32 = dot %39, %44
+    store %b, %45
+    %46:f32 = load %b
+    %47:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
+    %48:f32 = load %47
+    %49:bool = eq %46, %48
+    if %49 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %50:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %51:i32 = load %50
+        %52:f32 = convert %51
+        %53:f32 = let %52
+        %54:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
         %55:i32 = load %54
         %56:f32 = convert %55
-        %57:vec4<f32> = construct %47, %50, %53, %56
-        store %x_GLF_color, %57
-        exit_if  # if_1
-      }
-      %b4 = block {  # false
+        %57:f32 = let %56
         %58:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
         %59:i32 = load %58
         %60:f32 = convert %59
-        %61:vec4<f32> = construct %60
-        store %x_GLF_color, %61
+        %61:f32 = let %60
+        %62:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %63:i32 = load %62
+        %64:f32 = convert %63
+        %65:vec4<f32> = construct %53, %57, %61, %64
+        store %x_GLF_color, %65
+        exit_if  # if_1
+      }
+      $B4: {  # false
+        %66:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %67:i32 = load %66
+        %68:f32 = convert %67
+        %69:vec4<f32> = construct %68
+        store %x_GLF_color, %69
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %63:void = call %main_1
-    %64:vec4<f32> = load %x_GLF_color
-    %65:main_out = construct %64
-    ret %65
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %71:void = call %main_1
+    %72:vec4<f32> = load %x_GLF_color
+    %73:main_out = construct %72
+    ret %73
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-access-array-dot/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-access-array-dot/0-opt.wgsl.expected.ir.msl
index 008b825..bdac3c1 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-access-array-dot/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-access-array-dot/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,95 +20,119 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_9:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %numbers:ptr<function, array<i32, 3>, read_write> = var
     %a:ptr<function, vec2<f32>, read_write> = var
     %b:ptr<function, f32, read_write> = var
     %8:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_38:i32 = load %8
-    %10:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_40:i32 = load %10
-    %12:ptr<function, i32, read_write> = access %numbers, %x_38
-    store %12, %x_40
-    %13:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_43:i32 = load %13
+    %9:i32 = load %8
+    %x_38:i32 = let %9
+    %11:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %12:i32 = load %11
+    %x_40:i32 = let %12
+    %14:ptr<function, i32, read_write> = access %numbers, %x_38
+    store %14, %x_40
     %15:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_45:i32 = load %15
-    %17:ptr<function, i32, read_write> = access %numbers, %x_43
-    store %17, %x_45
-    %18:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_48:i32 = load %18
-    %20:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_50:i32 = load %20
-    %22:ptr<function, i32, read_write> = access %numbers, %x_48
-    store %22, %x_50
-    %23:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_53:i32 = load %23
-    %25:ptr<uniform, f32, read> = access %x_9, 0u, 2i, 0u
-    %x_56:f32 = load %25
-    %27:bool = lt 0.0f, %x_56
-    %28:i32 = select 2i, 1i, %27
-    %29:ptr<function, i32, read_write> = access %numbers, %28
-    %x_60:i32 = load %29
-    %31:f32 = convert %x_53
-    %32:f32 = convert %x_60
-    %33:vec2<f32> = construct %31, %32
-    store %a, %33
-    %x_63:vec2<f32> = load %a
-    %35:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
-    %x_65:f32 = load %35
-    %37:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
-    %x_67:f32 = load %37
-    %39:vec2<f32> = construct %x_65, %x_67
-    %40:f32 = dot %x_63, %39
-    store %b, %40
-    %x_70:f32 = load %b
-    %42:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
-    %x_72:f32 = load %42
-    %44:bool = eq %x_70, %x_72
-    if %44 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %45:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_78:i32 = load %45
-        %47:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_81:i32 = load %47
-        %49:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_84:i32 = load %49
-        %51:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_87:i32 = load %51
-        %53:f32 = convert %x_78
-        %54:f32 = convert %x_81
-        %55:f32 = convert %x_84
-        %56:f32 = convert %x_87
-        %57:vec4<f32> = construct %53, %54, %55, %56
-        store %x_GLF_color, %57
+    %16:i32 = load %15
+    %x_43:i32 = let %16
+    %18:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %19:i32 = load %18
+    %x_45:i32 = let %19
+    %21:ptr<function, i32, read_write> = access %numbers, %x_43
+    store %21, %x_45
+    %22:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %23:i32 = load %22
+    %x_48:i32 = let %23
+    %25:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %26:i32 = load %25
+    %x_50:i32 = let %26
+    %28:ptr<function, i32, read_write> = access %numbers, %x_48
+    store %28, %x_50
+    %29:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %30:i32 = load %29
+    %x_53:i32 = let %30
+    %32:ptr<uniform, f32, read> = access %x_9, 0u, 2i, 0u
+    %33:f32 = load %32
+    %x_56:f32 = let %33
+    %35:bool = lt 0.0f, %x_56
+    %36:i32 = select 2i, 1i, %35
+    %37:ptr<function, i32, read_write> = access %numbers, %36
+    %38:i32 = load %37
+    %x_60:i32 = let %38
+    %40:f32 = convert %x_53
+    %41:f32 = let %40
+    %42:f32 = convert %x_60
+    %43:vec2<f32> = construct %41, %42
+    store %a, %43
+    %44:vec2<f32> = load %a
+    %x_63:vec2<f32> = let %44
+    %46:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
+    %47:f32 = load %46
+    %x_65:f32 = let %47
+    %49:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
+    %50:f32 = load %49
+    %x_67:f32 = let %50
+    %52:vec2<f32> = construct %x_65, %x_67
+    %53:f32 = dot %x_63, %52
+    store %b, %53
+    %54:f32 = load %b
+    %x_70:f32 = let %54
+    %56:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
+    %57:f32 = load %56
+    %x_72:f32 = let %57
+    %59:bool = eq %x_70, %x_72
+    if %59 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %60:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %61:i32 = load %60
+        %x_78:i32 = let %61
+        %63:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %64:i32 = load %63
+        %x_81:i32 = let %64
+        %66:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %67:i32 = load %66
+        %x_84:i32 = let %67
+        %69:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %70:i32 = load %69
+        %x_87:i32 = let %70
+        %72:f32 = convert %x_78
+        %73:f32 = let %72
+        %74:f32 = convert %x_81
+        %75:f32 = let %74
+        %76:f32 = convert %x_84
+        %77:f32 = let %76
+        %78:f32 = convert %x_87
+        %79:vec4<f32> = construct %73, %75, %77, %78
+        store %x_GLF_color, %79
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %58:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_91:i32 = load %58
-        %x_92:f32 = convert %x_91
-        %61:vec4<f32> = construct %x_92, %x_92, %x_92, %x_92
-        store %x_GLF_color, %61
+      $B4: {  # false
+        %80:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %81:i32 = load %80
+        %x_91:i32 = let %81
+        %83:f32 = convert %x_91
+        %x_92:f32 = let %83
+        %85:vec4<f32> = construct %x_92, %x_92, %x_92, %x_92
+        store %x_GLF_color, %85
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %63:void = call %main_1
-    %64:vec4<f32> = load %x_GLF_color
-    %65:main_out = construct %64
-    ret %65
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %87:void = call %main_1
+    %88:vec4<f32> = load %x_GLF_color
+    %89:main_out = construct %88
+    ret %89
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-analysis-reachable-from-many/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-analysis-reachable-from-many/0-opt.spvasm.expected.ir.msl
index 32bcd37..9b0b8cd 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-analysis-reachable-from-many/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-analysis-reachable-from-many/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   zero:i32 @offset(0)
 }
 
@@ -8,95 +8,99 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_8:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%func_ = func():f32 -> %b2 {
-  %b2 = block {
+%func_ = func():f32 {
+  $B2: {
     %s:ptr<function, f32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %j:ptr<function, i32, read_write> = var
     store %s, 2.0f
     store %i, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %7:i32 = load %i
-        %8:ptr<uniform, i32, read> = access %x_8, 0u
-        %9:i32 = load %8
-        %10:i32 = add %9, 1i
-        %11:bool = lt %7, %10
-        if %11 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %8:i32 = load %i
+        %9:ptr<uniform, i32, read> = access %x_8, 0u
+        %10:i32 = load %9
+        %11:i32 = add %10, 1i
+        %12:bool = lt %8, %11
+        if %12 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %12:f32 = load %s
-        %13:f32 = add %12, 3.0f
-        store %s, %13
+        %13:f32 = load %s
+        %14:f32 = add %13, 3.0f
+        store %s, %14
         store %j, 0i
-        loop [b: %b7, c: %b8] {  # loop_2
-          %b7 = block {  # body
-            %14:i32 = load %j
-            %15:bool = lt %14, 10i
-            if %15 [t: %b9, f: %b10] {  # if_2
-              %b9 = block {  # true
+        loop [b: $B7, c: $B8] {  # loop_2
+          $B7: {  # body
+            %15:i32 = load %j
+            %16:bool = lt %15, 10i
+            if %16 [t: $B9, f: $B10] {  # if_2
+              $B9: {  # true
                 exit_if  # if_2
               }
-              %b10 = block {  # false
+              $B10: {  # false
                 exit_loop  # loop_2
               }
             }
-            %16:ptr<uniform, i32, read> = access %x_8, 0u
-            %17:i32 = load %16
-            %18:bool = eq %17, 1i
-            if %18 [t: %b11] {  # if_3
-              %b11 = block {  # true
-                discard
+            %17:ptr<uniform, i32, read> = access %x_8, 0u
+            %18:i32 = load %17
+            %19:bool = eq %18, 1i
+            if %19 [t: $B11] {  # if_3
+              $B11: {  # true
+                store %continue_execution, false
                 exit_if  # if_3
               }
             }
-            continue %b8
+            continue  # -> $B8
           }
-          %b8 = block {  # continuing
-            %19:i32 = load %j
-            %20:i32 = add %19, 1i
-            store %j, %20
-            next_iteration %b7
+          $B8: {  # continuing
+            %20:i32 = load %j
+            %21:i32 = add %20, 1i
+            store %j, %21
+            next_iteration  # -> $B7
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %21:i32 = load %i
-        %22:i32 = add %21, 1i
-        store %i, %22
-        next_iteration %b3
+      $B4: {  # continuing
+        %22:i32 = load %i
+        %23:i32 = add %22, 1i
+        store %i, %23
+        next_iteration  # -> $B3
       }
     }
-    %x_71:f32 = load %s
+    %24:f32 = load %s
+    %x_71:f32 = let %24
     ret %x_71
   }
 }
-%main_1 = func():void -> %b12 {
-  %b12 = block {
+%main_1 = func():void {
+  $B12: {
     %c:ptr<function, vec4<f32>, read_write> = var
-    %x_34:f32 = call %func_
-    %27:vec4<f32> = construct %x_34, 0.0f, 0.0f, 1.0f
-    store %c, %27
-    %x_36:f32 = call %func_
-    %29:bool = eq %x_36, 5.0f
-    if %29 [t: %b13, f: %b14] {  # if_4
-      %b13 = block {  # true
-        %30:vec4<f32> = load %c
-        store %x_GLF_color, %30
+    %28:f32 = call %func_
+    %x_34:f32 = let %28
+    %30:vec4<f32> = construct %x_34, 0.0f, 0.0f, 1.0f
+    store %c, %30
+    %31:f32 = call %func_
+    %x_36:f32 = let %31
+    %33:bool = eq %x_36, 5.0f
+    if %33 [t: $B13, f: $B14] {  # if_4
+      $B13: {  # true
+        %34:vec4<f32> = load %c
+        store %x_GLF_color, %34
         exit_if  # if_4
       }
-      %b14 = block {  # false
+      $B14: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_4
       }
@@ -104,12 +108,19 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b15 {
-  %b15 = block {
-    %32:void = call %main_1
-    %33:vec4<f32> = load %x_GLF_color
-    %34:main_out = construct %33
-    ret %34
+%tint_symbol = @fragment func():main_out {
+  $B15: {
+    %36:void = call %main_1
+    %37:vec4<f32> = load %x_GLF_color
+    %38:main_out = construct %37
+    %39:bool = load %continue_execution
+    %40:bool = eq %39, false
+    if %40 [t: $B16] {  # if_5
+      $B16: {  # true
+        terminate_invocation
+      }
+    }
+    ret %38
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-analysis-reachable-from-many/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-analysis-reachable-from-many/0-opt.wgsl.expected.ir.msl
index 555d0bc..407c888 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-analysis-reachable-from-many/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-analysis-reachable-from-many/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   zero:i32 @offset(0)
 }
 
@@ -8,95 +8,107 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_8:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%func_ = func():f32 -> %b2 {
-  %b2 = block {
+%func_ = func():f32 {
+  $B2: {
     %s:ptr<function, f32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %j:ptr<function, i32, read_write> = var
     store %s, 2.0f
     store %i, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_47:i32 = load %i
-        %8:ptr<uniform, i32, read> = access %x_8, 0u
-        %x_49:i32 = load %8
-        %10:i32 = add %x_49, 1i
-        %11:bool = lt %x_47, %10
-        if %11 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %8:i32 = load %i
+        %x_47:i32 = let %8
+        %10:ptr<uniform, i32, read> = access %x_8, 0u
+        %11:i32 = load %10
+        %x_49:i32 = let %11
+        %13:i32 = add %x_49, 1i
+        %14:bool = lt %x_47, %13
+        if %14 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_53:f32 = load %s
-        %13:f32 = add %x_53, 3.0f
-        store %s, %13
+        %15:f32 = load %s
+        %x_53:f32 = let %15
+        %17:f32 = add %x_53, 3.0f
+        store %s, %17
         store %j, 0i
-        loop [b: %b7, c: %b8] {  # loop_2
-          %b7 = block {  # body
-            %x_59:i32 = load %j
-            %15:bool = lt %x_59, 10i
-            if %15 [t: %b9, f: %b10] {  # if_2
-              %b9 = block {  # true
+        loop [b: $B7, c: $B8] {  # loop_2
+          $B7: {  # body
+            %18:i32 = load %j
+            %x_59:i32 = let %18
+            %20:bool = lt %x_59, 10i
+            if %20 [t: $B9, f: $B10] {  # if_2
+              $B9: {  # true
                 exit_if  # if_2
               }
-              %b10 = block {  # false
+              $B10: {  # false
                 exit_loop  # loop_2
               }
             }
-            %16:ptr<uniform, i32, read> = access %x_8, 0u
-            %x_63:i32 = load %16
-            %18:bool = eq %x_63, 1i
-            if %18 [t: %b11] {  # if_3
-              %b11 = block {  # true
-                discard
+            %21:ptr<uniform, i32, read> = access %x_8, 0u
+            %22:i32 = load %21
+            %x_63:i32 = let %22
+            %24:bool = eq %x_63, 1i
+            if %24 [t: $B11] {  # if_3
+              $B11: {  # true
+                store %continue_execution, false
                 exit_if  # if_3
               }
             }
-            continue %b8
+            continue  # -> $B8
           }
-          %b8 = block {  # continuing
-            %x_67:i32 = load %j
-            %20:i32 = add %x_67, 1i
-            store %j, %20
-            next_iteration %b7
+          $B8: {  # continuing
+            %25:i32 = load %j
+            %x_67:i32 = let %25
+            %27:i32 = add %x_67, 1i
+            store %j, %27
+            next_iteration  # -> $B7
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_69:i32 = load %i
-        %22:i32 = add %x_69, 1i
-        store %i, %22
-        next_iteration %b3
+      $B4: {  # continuing
+        %28:i32 = load %i
+        %x_69:i32 = let %28
+        %30:i32 = add %x_69, 1i
+        store %i, %30
+        next_iteration  # -> $B3
       }
     }
-    %x_71:f32 = load %s
+    %31:f32 = load %s
+    %x_71:f32 = let %31
     ret %x_71
   }
 }
-%main_1 = func():void -> %b12 {
-  %b12 = block {
+%main_1 = func():void {
+  $B12: {
     %c:ptr<function, vec4<f32>, read_write> = var
-    %x_34:f32 = call %func_
-    %27:vec4<f32> = construct %x_34, 0.0f, 0.0f, 1.0f
-    store %c, %27
-    %x_36:f32 = call %func_
-    %29:bool = eq %x_36, 5.0f
-    if %29 [t: %b13, f: %b14] {  # if_4
-      %b13 = block {  # true
-        %x_41:vec4<f32> = load %c
+    %35:f32 = call %func_
+    %x_34:f32 = let %35
+    %37:vec4<f32> = construct %x_34, 0.0f, 0.0f, 1.0f
+    store %c, %37
+    %38:f32 = call %func_
+    %x_36:f32 = let %38
+    %40:bool = eq %x_36, 5.0f
+    if %40 [t: $B13, f: $B14] {  # if_4
+      $B13: {  # true
+        %41:vec4<f32> = load %c
+        %x_41:vec4<f32> = let %41
         store %x_GLF_color, %x_41
         exit_if  # if_4
       }
-      %b14 = block {  # false
+      $B14: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_4
       }
@@ -104,12 +116,19 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b15 {
-  %b15 = block {
-    %32:void = call %main_1
-    %33:vec4<f32> = load %x_GLF_color
-    %34:main_out = construct %33
-    ret %34
+%tint_symbol = @fragment func():main_out {
+  $B15: {
+    %44:void = call %main_1
+    %45:vec4<f32> = load %x_GLF_color
+    %46:main_out = construct %45
+    %47:bool = load %continue_execution
+    %48:bool = eq %47, false
+    if %48 [t: $B16] {  # if_5
+      $B16: {  # true
+        terminate_invocation
+      }
+    }
+    ret %46
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-and-even-numbers-from-fragcoord/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-and-even-numbers-from-fragcoord/0-opt.spvasm.expected.ir.msl
index 771d7ba..4ffda10 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-and-even-numbers-from-fragcoord/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-and-even-numbers-from-fragcoord/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,22 +20,22 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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_8:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %v:ptr<function, vec2<i32>, read_write> = var
     %7:f32 = load_vector_element %gl_FragCoord, 1u
     %8:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
     %9:f32 = load %8
     %10:bool = lt %7, %9
-    if %10 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    if %10 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         %11:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
         %12:i32 = load %11
         %13:f32 = convert %12
@@ -43,52 +43,65 @@
         store %x_GLF_color, %14
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         %15:vec4<f32> = load %gl_FragCoord
         %16:vec2<f32> = swizzle %15, xy
-        %17:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-        %18:f32 = load %17
-        %19:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-        %20:f32 = load %19
-        %21:vec2<f32> = construct %18, %20
-        %22:vec2<f32> = sub %16, %21
-        %23:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
-        %24:f32 = load %23
-        %25:vec2<f32> = mul %22, %24
-        %26:vec2<i32> = convert %25
-        store %v, %26
-        %27:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-        %28:f32 = load %27
-        %29:i32 = load_vector_element %v, 1u
-        %30:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-        %31:i32 = load %30
-        %32:i32 = sub %29, %31
+        %17:vec2<f32> = let %16
+        %18:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+        %19:f32 = load %18
+        %20:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+        %21:f32 = load %20
+        %22:vec2<f32> = construct %19, %21
+        %23:vec2<f32> = sub %17, %22
+        %24:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
+        %25:f32 = load %24
+        %26:vec2<f32> = mul %23, %25
+        %27:vec2<i32> = call %tint_v2f32_to_v2i32, %26
+        store %v, %27
+        %29:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+        %30:f32 = load %29
+        %31:f32 = let %30
+        %32:i32 = load_vector_element %v, 1u
         %33:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
         %34:i32 = load %33
-        %35:i32 = and %32, %34
-        %36:f32 = convert %35
-        %37:i32 = load_vector_element %v, 0u
-        %38:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-        %39:i32 = load %38
-        %40:i32 = and %37, %39
-        %41:f32 = convert %40
-        %42:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-        %43:f32 = load %42
-        %44:vec4<f32> = construct %28, %36, %41, %43
-        store %x_GLF_color, %44
+        %35:i32 = sub %32, %34
+        %36:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+        %37:i32 = load %36
+        %38:i32 = and %35, %37
+        %39:f32 = convert %38
+        %40:f32 = let %39
+        %41:i32 = load_vector_element %v, 0u
+        %42:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+        %43:i32 = load %42
+        %44:i32 = and %41, %43
+        %45:f32 = convert %44
+        %46:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+        %47:f32 = load %46
+        %48:vec4<f32> = construct %31, %40, %45, %47
+        store %x_GLF_color, %48
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b5 {
-  %b5 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B5: {
     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
+    %51:void = call %main_1
+    %52:vec4<f32> = load %x_GLF_color
+    %53:main_out = construct %52
+    ret %53
+  }
+}
+%tint_v2f32_to_v2i32 = func(%value:vec2<f32>):vec2<i32> {
+  $B6: {
+    %55:vec2<i32> = convert %value
+    %56:vec2<bool> = gte %value, vec2<f32>(-2147483648.0f)
+    %57:vec2<i32> = select vec2<i32>(-2147483648i), %55, %56
+    %58:vec2<bool> = lte %value, vec2<f32>(2147483520.0f)
+    %59:vec2<i32> = select vec2<i32>(2147483647i), %57, %58
+    ret %59
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-and-even-numbers-from-fragcoord/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-and-even-numbers-from-fragcoord/0-opt.wgsl.expected.ir.msl
index 1c9b5a0..5976c12 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-and-even-numbers-from-fragcoord/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-and-even-numbers-from-fragcoord/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,77 +20,104 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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_8:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %v:ptr<function, vec2<i32>, read_write> = var
-    %x_39:f32 = load_vector_element %gl_FragCoord, 1u
-    %8:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_41:f32 = load %8
-    %10:bool = lt %x_39, %x_41
-    if %10 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %11:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-        %x_47:i32 = load %11
-        %x_48:f32 = convert %x_47
-        %14:vec4<f32> = construct %x_48, %x_48, %x_48, %x_48
-        store %x_GLF_color, %14
+    %7:f32 = load_vector_element %gl_FragCoord, 1u
+    %x_39:f32 = let %7
+    %9:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %10:f32 = load %9
+    %x_41:f32 = let %10
+    %12:bool = lt %x_39, %x_41
+    if %12 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %13:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+        %14:i32 = load %13
+        %x_47:i32 = let %14
+        %16:f32 = convert %x_47
+        %x_48:f32 = let %16
+        %18:vec4<f32> = construct %x_48, %x_48, %x_48, %x_48
+        store %x_GLF_color, %18
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %x_50:vec4<f32> = load %gl_FragCoord
-        %16:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-        %x_53:f32 = load %16
-        %18:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-        %x_55:f32 = load %18
-        %20:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
-        %x_59:f32 = load %20
-        %22:f32 = access %x_50, 0u
-        %23:f32 = access %x_50, 1u
-        %24:vec2<f32> = construct %22, %23
-        %25:vec2<f32> = construct %x_53, %x_55
-        %26:vec2<f32> = sub %24, %25
-        %27:vec2<f32> = mul %26, %x_59
-        %28:vec2<i32> = convert %27
-        store %v, %28
-        %29:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-        %x_63:f32 = load %29
-        %x_65:i32 = load_vector_element %v, 1u
-        %32:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-        %x_67:i32 = load %32
-        %34:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-        %x_70:i32 = load %34
-        %x_74:i32 = load_vector_element %v, 0u
-        %37:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-        %x_76:i32 = load %37
+      $B4: {  # false
+        %19:vec4<f32> = load %gl_FragCoord
+        %x_50:vec4<f32> = let %19
+        %21:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+        %22:f32 = load %21
+        %x_53:f32 = let %22
+        %24:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+        %25:f32 = load %24
+        %x_55:f32 = let %25
+        %27:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
+        %28:f32 = load %27
+        %x_59:f32 = let %28
+        %30:f32 = access %x_50, 0u
+        %31:f32 = access %x_50, 1u
+        %32:vec2<f32> = construct %30, %31
+        %33:vec2<f32> = let %32
+        %34:vec2<f32> = construct %x_53, %x_55
+        %35:vec2<f32> = sub %33, %34
+        %36:vec2<f32> = mul %35, %x_59
+        %37:vec2<i32> = call %tint_v2f32_to_v2i32, %36
+        store %v, %37
         %39:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-        %x_80:f32 = load %39
-        %41:i32 = sub %x_65, %x_67
-        %42:i32 = and %41, %x_70
-        %43:f32 = convert %42
-        %44:i32 = and %x_74, %x_76
-        %45:f32 = convert %44
-        %46:vec4<f32> = construct %x_63, %43, %45, %x_80
-        store %x_GLF_color, %46
+        %40:f32 = load %39
+        %x_63:f32 = let %40
+        %42:i32 = load_vector_element %v, 1u
+        %x_65:i32 = let %42
+        %44:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+        %45:i32 = load %44
+        %x_67:i32 = let %45
+        %47:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+        %48:i32 = load %47
+        %x_70:i32 = let %48
+        %50:i32 = load_vector_element %v, 0u
+        %x_74:i32 = let %50
+        %52:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+        %53:i32 = load %52
+        %x_76:i32 = let %53
+        %55:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+        %56:f32 = load %55
+        %x_80:f32 = let %56
+        %58:i32 = sub %x_65, %x_67
+        %59:i32 = and %58, %x_70
+        %60:f32 = convert %59
+        %61:f32 = let %60
+        %62:i32 = and %x_74, %x_76
+        %63:f32 = convert %62
+        %64:vec4<f32> = construct %x_63, %61, %63, %x_80
+        store %x_GLF_color, %64
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b5 {
-  %b5 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B5: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %49:void = call %main_1
-    %50:vec4<f32> = load %x_GLF_color
-    %51:main_out = construct %50
-    ret %51
+    %67:void = call %main_1
+    %68:vec4<f32> = load %x_GLF_color
+    %69:main_out = construct %68
+    ret %69
+  }
+}
+%tint_v2f32_to_v2i32 = func(%value:vec2<f32>):vec2<i32> {
+  $B6: {
+    %71:vec2<i32> = convert %value
+    %72:vec2<bool> = gte %value, vec2<f32>(-2147483648.0f)
+    %73:vec2<i32> = select vec2<i32>(-2147483648i), %71, %72
+    %74:vec2<bool> = lte %value, vec2<f32>(2147483520.0f)
+    %75:vec2<i32> = select vec2<i32>(2147483647i), %73, %74
+    ret %75
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-apfloat-acos-ldexp/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-apfloat-acos-ldexp/0-opt.spvasm.expected.ir.msl
index 412297b..3621034 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-apfloat-acos-ldexp/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-apfloat-acos-ldexp/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   two:i32 @offset(0)
 }
 
@@ -8,13 +8,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %v:ptr<function, vec2<f32>, read_write> = var
     %d:ptr<function, f32, read_write> = var
     %6:ptr<uniform, i32, read> = access %x_6, 0u
@@ -28,12 +28,12 @@
     store %d, %12
     %13:f32 = load %d
     %14:bool = lt %13, 0.00999999977648258209f
-    if %14 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    if %14 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
@@ -41,8 +41,8 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
+%tint_symbol = @fragment func():main_out {
+  $B5: {
     %16:void = call %main_1
     %17:vec4<f32> = load %x_GLF_color
     %18:main_out = construct %17
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-apfloat-acos-ldexp/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-apfloat-acos-ldexp/0-opt.wgsl.expected.ir.msl
index 7a56ae2..4e0bafd 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-apfloat-acos-ldexp/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-apfloat-acos-ldexp/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   two:i32 @offset(0)
 }
 
@@ -8,32 +8,35 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %v:ptr<function, vec2<f32>, read_write> = var
     %d:ptr<function, f32, read_write> = var
     %6:ptr<uniform, i32, read> = access %x_6, 0u
-    %x_35:i32 = load %6
-    %8:vec2<i32> = construct %x_35, 3i
-    %9:vec2<f32> = ldexp vec2<f32>(0.10000000149011611938f), %8
-    %10:vec2<f32> = acos %9
-    store %v, %10
-    %x_39:vec2<f32> = load %v
-    %12:f32 = distance %x_39, vec2<f32>(1.15927994251251220703f, 0.64349997043609619141f)
-    store %d, %12
-    %x_41:f32 = load %d
-    %14:bool = lt %x_41, 0.00999999977648258209f
-    if %14 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    %7:i32 = load %6
+    %x_35:i32 = let %7
+    %9:vec2<i32> = construct %x_35, 3i
+    %10:vec2<f32> = ldexp vec2<f32>(0.10000000149011611938f), %9
+    %11:vec2<f32> = acos %10
+    store %v, %11
+    %12:vec2<f32> = load %v
+    %x_39:vec2<f32> = let %12
+    %14:f32 = distance %x_39, vec2<f32>(1.15927994251251220703f, 0.64349997043609619141f)
+    store %d, %14
+    %15:f32 = load %d
+    %x_41:f32 = let %15
+    %17:bool = lt %x_41, 0.00999999977648258209f
+    if %17 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
@@ -41,12 +44,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %16:void = call %main_1
-    %17:vec4<f32> = load %x_GLF_color
-    %18:main_out = construct %17
-    ret %18
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %19:void = call %main_1
+    %20:vec4<f32> = load %x_GLF_color
+    %21:main_out = construct %20
+    ret %21
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-apfloat-mod-zero/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-apfloat-mod-zero/0-opt.spvasm.expected.ir.msl
index c823ef1..42cc65e 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-apfloat-mod-zero/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-apfloat-mod-zero/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,14 +20,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %undefined:ptr<function, f32, read_write> = var
     %x_51:ptr<function, bool, read_write> = var
     %x_52:ptr<function, bool, read_write> = var
@@ -39,58 +39,62 @@
     %12:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
     %13:i32 = load %12
     %14:i32 = add %11, %13
-    %x_44:bool = eq %9, %14
+    %15:bool = eq %9, %14
+    %x_44:bool = let %15
     store %x_52, %x_44
-    %16:bool = eq %x_44, false
-    if %16 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %17:f32 = load %undefined
-        %18:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-        %19:f32 = load %18
-        %20:bool = gt %17, %19
-        store %x_51, %20
-        %21:bool = load %x_51
-        store %x_52, %21
+    %17:bool = eq %x_44, false
+    if %17 [t: $B3] {  # if_1
+      $B3: {  # true
+        %18:f32 = load %undefined
+        %19:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+        %20:f32 = load %19
+        %21:bool = gt %18, %20
+        store %x_51, %21
+        %22:bool = load %x_51
+        store %x_52, %22
         exit_if  # if_1
       }
     }
-    %22:bool = load %x_52
-    if %22 [t: %b4, f: %b5] {  # if_2
-      %b4 = block {  # true
-        %23:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %24:i32 = load %23
-        %25:f32 = convert %24
-        %26:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %27:i32 = load %26
-        %28:f32 = convert %27
-        %29:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %30:i32 = load %29
-        %31:f32 = convert %30
-        %32:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %23:bool = load %x_52
+    if %23 [t: $B4, f: $B5] {  # if_2
+      $B4: {  # true
+        %24:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %25:i32 = load %24
+        %26:f32 = convert %25
+        %27:f32 = let %26
+        %28:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %29:i32 = load %28
+        %30:f32 = convert %29
+        %31:f32 = let %30
+        %32:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
         %33:i32 = load %32
         %34:f32 = convert %33
-        %35:vec4<f32> = construct %25, %28, %31, %34
-        store %x_GLF_color, %35
-        exit_if  # if_2
-      }
-      %b5 = block {  # false
-        %36:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %35:f32 = let %34
+        %36:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
         %37:i32 = load %36
         %38:f32 = convert %37
-        %39:vec4<f32> = construct %38
+        %39:vec4<f32> = construct %27, %31, %35, %38
         store %x_GLF_color, %39
         exit_if  # if_2
       }
+      $B5: {  # false
+        %40:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %41:i32 = load %40
+        %42:f32 = convert %41
+        %43:vec4<f32> = construct %42
+        store %x_GLF_color, %43
+        exit_if  # if_2
+      }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b6 {
-  %b6 = block {
-    %41:void = call %main_1
-    %42:vec4<f32> = load %x_GLF_color
-    %43:main_out = construct %42
-    ret %43
+%tint_symbol = @fragment func():main_out {
+  $B6: {
+    %45:void = call %main_1
+    %46:vec4<f32> = load %x_GLF_color
+    %47:main_out = construct %46
+    ret %47
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-apfloat-mod-zero/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-apfloat-mod-zero/0-opt.wgsl.expected.ir.msl
index c82e579..c09a209 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-apfloat-mod-zero/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-apfloat-mod-zero/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,77 +20,93 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %undefined:ptr<function, f32, read_write> = var
     %x_51:ptr<function, bool, read_write> = var
     %x_52_phi:ptr<function, bool, read_write> = var
     store %undefined, 5.0f
     %8:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_10:i32 = load %8
-    %10:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_11:i32 = load %10
-    %12:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_12:i32 = load %12
-    %14:i32 = add %x_11, %x_12
-    %x_44:bool = eq %x_10, %14
+    %9:i32 = load %8
+    %x_10:i32 = let %9
+    %11:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %12:i32 = load %11
+    %x_11:i32 = let %12
+    %14:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %15:i32 = load %14
+    %x_12:i32 = let %15
+    %17:i32 = add %x_11, %x_12
+    %18:bool = eq %x_10, %17
+    %x_44:bool = let %18
     store %x_52_phi, %x_44
-    %16:bool = eq %x_44, false
-    if %16 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %x_48:f32 = load %undefined
-        %18:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-        %x_50:f32 = load %18
-        %20:bool = gt %x_48, %x_50
-        store %x_51, %20
-        %21:bool = load %x_51
-        store %x_52_phi, %21
+    %20:bool = eq %x_44, false
+    if %20 [t: $B3] {  # if_1
+      $B3: {  # true
+        %21:f32 = load %undefined
+        %x_48:f32 = let %21
+        %23:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+        %24:f32 = load %23
+        %x_50:f32 = let %24
+        %26:bool = gt %x_48, %x_50
+        store %x_51, %26
+        %27:bool = load %x_51
+        store %x_52_phi, %27
         exit_if  # if_1
       }
     }
-    %x_52:bool = load %x_52_phi
-    if %x_52 [t: %b4, f: %b5] {  # if_2
-      %b4 = block {  # true
-        %23:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_15:i32 = load %23
-        %25:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_16:i32 = load %25
-        %27:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_17:i32 = load %27
-        %29:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_18:i32 = load %29
-        %31:f32 = convert %x_15
-        %32:f32 = convert %x_16
-        %33:f32 = convert %x_17
-        %34:f32 = convert %x_18
-        %35:vec4<f32> = construct %31, %32, %33, %34
-        store %x_GLF_color, %35
+    %28:bool = load %x_52_phi
+    %x_52:bool = let %28
+    if %x_52 [t: $B4, f: $B5] {  # if_2
+      $B4: {  # true
+        %30:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %31:i32 = load %30
+        %x_15:i32 = let %31
+        %33:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %34:i32 = load %33
+        %x_16:i32 = let %34
+        %36:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %37:i32 = load %36
+        %x_17:i32 = let %37
+        %39:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %40:i32 = load %39
+        %x_18:i32 = let %40
+        %42:f32 = convert %x_15
+        %43:f32 = let %42
+        %44:f32 = convert %x_16
+        %45:f32 = let %44
+        %46:f32 = convert %x_17
+        %47:f32 = let %46
+        %48:f32 = convert %x_18
+        %49:vec4<f32> = construct %43, %45, %47, %48
+        store %x_GLF_color, %49
         exit_if  # if_2
       }
-      %b5 = block {  # false
-        %36:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_19:i32 = load %36
-        %x_66:f32 = convert %x_19
-        %39:vec4<f32> = construct %x_66, %x_66, %x_66, %x_66
-        store %x_GLF_color, %39
+      $B5: {  # false
+        %50:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %51:i32 = load %50
+        %x_19:i32 = let %51
+        %53:f32 = convert %x_19
+        %x_66:f32 = let %53
+        %55:vec4<f32> = construct %x_66, %x_66, %x_66, %x_66
+        store %x_GLF_color, %55
         exit_if  # if_2
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b6 {
-  %b6 = block {
-    %41:void = call %main_1
-    %42:vec4<f32> = load %x_GLF_color
-    %43:main_out = construct %42
-    ret %43
+%tint_symbol = @fragment func():main_out {
+  $B6: {
+    %57:void = call %main_1
+    %58:vec4<f32> = load %x_GLF_color
+    %59:main_out = construct %58
+    ret %59
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-apfloat-reflect-denorm/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-apfloat-reflect-denorm/0-opt.spvasm.expected.ir.msl
index 473acf7..81acf81 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-apfloat-reflect-denorm/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-apfloat-reflect-denorm/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,14 +20,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_9:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %I:ptr<function, vec4<f32>, read_write> = var
     %N:ptr<function, vec4<f32>, read_write> = var
     %R:ptr<function, vec4<f32>, read_write> = var
@@ -35,75 +35,83 @@
     %9:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
     %10:i32 = load %9
     %11:u32 = bitcast %10
-    %12:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-    %13:i32 = load %12
-    %14:u32 = bitcast %13
-    %15:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
-    %16:i32 = load %15
-    %17:u32 = bitcast %16
-    %18:vec4<u32> = construct %11, %14, %17, 92985u
-    %19:vec4<f32> = bitcast %18
-    store %I, %19
-    %20:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
-    %21:f32 = load %20
-    %22:vec4<f32> = construct %21
-    store %N, %22
-    %23:vec4<f32> = load %I
-    %24:vec4<f32> = reflect %23, vec4<f32>(0.5f)
-    store %R, %24
+    %12:u32 = let %11
+    %13:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+    %14:i32 = load %13
+    %15:u32 = bitcast %14
+    %16:u32 = let %15
+    %17:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
+    %18:i32 = load %17
+    %19:u32 = bitcast %18
+    %20:vec4<u32> = construct %12, %16, %19, 92985u
+    %21:vec4<f32> = bitcast %20
+    store %I, %21
+    %22:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
+    %23:f32 = load %22
+    %24:vec4<f32> = construct %23
+    store %N, %24
     %25:vec4<f32> = load %I
-    %26:vec4<f32> = load %N
-    %27:ptr<uniform, f32, read> = access %x_9, 0u, 2i, 0u
-    %28:f32 = load %27
+    %26:vec4<f32> = reflect %25, vec4<f32>(0.5f)
+    store %R, %26
+    %27:vec4<f32> = load %I
+    %28:vec4<f32> = let %27
     %29:vec4<f32> = load %N
-    %30:vec4<f32> = load %I
-    %31:f32 = dot %29, %30
-    %32:f32 = mul %28, %31
-    %33:vec4<f32> = mul %26, %32
-    %34:vec4<f32> = sub %25, %33
-    store %r, %34
-    %35:vec4<f32> = load %R
-    %36:vec4<f32> = load %r
-    %37:f32 = distance %35, %36
-    %38:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
-    %39:f32 = load %38
-    %40:bool = lt %37, %39
-    if %40 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %41:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %42:i32 = load %41
-        %43:f32 = convert %42
-        %44:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %45:i32 = load %44
-        %46:f32 = convert %45
-        %47:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %48:i32 = load %47
-        %49:f32 = convert %48
-        %50:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %30:vec4<f32> = let %29
+    %31:ptr<uniform, f32, read> = access %x_9, 0u, 2i, 0u
+    %32:f32 = load %31
+    %33:f32 = let %32
+    %34:vec4<f32> = load %N
+    %35:vec4<f32> = load %I
+    %36:f32 = dot %34, %35
+    %37:f32 = mul %33, %36
+    %38:vec4<f32> = mul %30, %37
+    %39:vec4<f32> = sub %28, %38
+    store %r, %39
+    %40:vec4<f32> = load %R
+    %41:vec4<f32> = load %r
+    %42:f32 = distance %40, %41
+    %43:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
+    %44:f32 = load %43
+    %45:bool = lt %42, %44
+    if %45 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %46:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %47:i32 = load %46
+        %48:f32 = convert %47
+        %49:f32 = let %48
+        %50:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
         %51:i32 = load %50
         %52:f32 = convert %51
-        %53:vec4<f32> = construct %43, %46, %49, %52
-        store %x_GLF_color, %53
-        exit_if  # if_1
-      }
-      %b4 = block {  # false
+        %53:f32 = let %52
         %54:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
         %55:i32 = load %54
         %56:f32 = convert %55
-        %57:vec4<f32> = construct %56
-        store %x_GLF_color, %57
+        %57:f32 = let %56
+        %58:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %59:i32 = load %58
+        %60:f32 = convert %59
+        %61:vec4<f32> = construct %49, %53, %57, %60
+        store %x_GLF_color, %61
+        exit_if  # if_1
+      }
+      $B4: {  # false
+        %62:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %63:i32 = load %62
+        %64:f32 = convert %63
+        %65:vec4<f32> = construct %64
+        store %x_GLF_color, %65
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %59:void = call %main_1
-    %60:vec4<f32> = load %x_GLF_color
-    %61:main_out = construct %60
-    ret %61
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %67:void = call %main_1
+    %68:vec4<f32> = load %x_GLF_color
+    %69:main_out = construct %68
+    ret %69
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-apfloat-reflect-denorm/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-apfloat-reflect-denorm/0-opt.wgsl.expected.ir.msl
index f17773a..59492a1 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-apfloat-reflect-denorm/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-apfloat-reflect-denorm/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,90 +20,114 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_9:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %I:ptr<function, vec4<f32>, read_write> = var
     %N:ptr<function, vec4<f32>, read_write> = var
     %R:ptr<function, vec4<f32>, read_write> = var
     %r:ptr<function, vec4<f32>, read_write> = var
     %9:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_40:i32 = load %9
-    %11:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-    %x_43:i32 = load %11
-    %13:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
-    %x_46:i32 = load %13
-    %15:u32 = bitcast %x_40
-    %16:u32 = bitcast %x_43
-    %17:u32 = bitcast %x_46
-    %18:vec4<u32> = construct %15, %16, %17, 92985u
-    %19:vec4<f32> = bitcast %18
-    store %I, %19
-    %20:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
-    %x_51:f32 = load %20
-    %22:vec4<f32> = construct %x_51, %x_51, %x_51, %x_51
-    store %N, %22
-    %x_53:vec4<f32> = load %I
-    %24:vec4<f32> = reflect %x_53, vec4<f32>(0.5f)
-    store %R, %24
-    %x_55:vec4<f32> = load %I
-    %26:ptr<uniform, f32, read> = access %x_9, 0u, 2i, 0u
-    %x_57:f32 = load %26
-    %x_58:vec4<f32> = load %N
-    %x_59:vec4<f32> = load %I
-    %x_62:vec4<f32> = load %N
-    %31:f32 = dot %x_58, %x_59
-    %32:f32 = mul %x_57, %31
-    %33:vec4<f32> = mul %x_62, %32
-    %34:vec4<f32> = sub %x_55, %33
-    store %r, %34
-    %x_65:vec4<f32> = load %R
-    %x_66:vec4<f32> = load %r
-    %37:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
-    %x_69:f32 = load %37
-    %39:f32 = distance %x_65, %x_66
-    %40:bool = lt %39, %x_69
-    if %40 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %41:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_75:i32 = load %41
-        %43:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_78:i32 = load %43
-        %45:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_81:i32 = load %45
-        %47:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_84:i32 = load %47
-        %49:f32 = convert %x_75
-        %50:f32 = convert %x_78
-        %51:f32 = convert %x_81
-        %52:f32 = convert %x_84
-        %53:vec4<f32> = construct %49, %50, %51, %52
-        store %x_GLF_color, %53
+    %10:i32 = load %9
+    %x_40:i32 = let %10
+    %12:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+    %13:i32 = load %12
+    %x_43:i32 = let %13
+    %15:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
+    %16:i32 = load %15
+    %x_46:i32 = let %16
+    %18:u32 = bitcast %x_40
+    %19:u32 = let %18
+    %20:u32 = bitcast %x_43
+    %21:u32 = let %20
+    %22:u32 = bitcast %x_46
+    %23:vec4<u32> = construct %19, %21, %22, 92985u
+    %24:vec4<f32> = bitcast %23
+    store %I, %24
+    %25:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
+    %26:f32 = load %25
+    %x_51:f32 = let %26
+    %28:vec4<f32> = construct %x_51, %x_51, %x_51, %x_51
+    store %N, %28
+    %29:vec4<f32> = load %I
+    %x_53:vec4<f32> = let %29
+    %31:vec4<f32> = reflect %x_53, vec4<f32>(0.5f)
+    store %R, %31
+    %32:vec4<f32> = load %I
+    %x_55:vec4<f32> = let %32
+    %34:ptr<uniform, f32, read> = access %x_9, 0u, 2i, 0u
+    %35:f32 = load %34
+    %x_57:f32 = let %35
+    %37:vec4<f32> = load %N
+    %x_58:vec4<f32> = let %37
+    %39:vec4<f32> = load %I
+    %x_59:vec4<f32> = let %39
+    %41:vec4<f32> = load %N
+    %x_62:vec4<f32> = let %41
+    %43:f32 = dot %x_58, %x_59
+    %44:f32 = mul %x_57, %43
+    %45:vec4<f32> = mul %x_62, %44
+    %46:vec4<f32> = sub %x_55, %45
+    store %r, %46
+    %47:vec4<f32> = load %R
+    %x_65:vec4<f32> = let %47
+    %49:vec4<f32> = load %r
+    %x_66:vec4<f32> = let %49
+    %51:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
+    %52:f32 = load %51
+    %x_69:f32 = let %52
+    %54:f32 = distance %x_65, %x_66
+    %55:bool = lt %54, %x_69
+    if %55 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %56:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %57:i32 = load %56
+        %x_75:i32 = let %57
+        %59:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %60:i32 = load %59
+        %x_78:i32 = let %60
+        %62:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %63:i32 = load %62
+        %x_81:i32 = let %63
+        %65:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %66:i32 = load %65
+        %x_84:i32 = let %66
+        %68:f32 = convert %x_75
+        %69:f32 = let %68
+        %70:f32 = convert %x_78
+        %71:f32 = let %70
+        %72:f32 = convert %x_81
+        %73:f32 = let %72
+        %74:f32 = convert %x_84
+        %75:vec4<f32> = construct %69, %71, %73, %74
+        store %x_GLF_color, %75
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %54:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_88:i32 = load %54
-        %x_89:f32 = convert %x_88
-        %57:vec4<f32> = construct %x_89, %x_89, %x_89, %x_89
-        store %x_GLF_color, %57
+      $B4: {  # false
+        %76:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %77:i32 = load %76
+        %x_88:i32 = let %77
+        %79:f32 = convert %x_88
+        %x_89:f32 = let %79
+        %81:vec4<f32> = construct %x_89, %x_89, %x_89, %x_89
+        store %x_GLF_color, %81
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %59:void = call %main_1
-    %60:vec4<f32> = load %x_GLF_color
-    %61:main_out = construct %60
-    ret %61
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %83:void = call %main_1
+    %84:vec4<f32> = load %x_GLF_color
+    %85:main_out = construct %84
+    ret %85
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-apfloat-sinh-negative-log2/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-apfloat-sinh-negative-log2/0-opt.spvasm.expected.ir.msl
index 8da40f0..285e784 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-apfloat-sinh-negative-log2/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-apfloat-sinh-negative-log2/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,72 +20,76 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_8:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %undefined:ptr<function, f32, read_write> = var
     %x_45:ptr<function, bool, read_write> = var
     %x_46:ptr<function, bool, read_write> = var
     store %undefined, 1.17520117759704589844f
     %8:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
     %9:i32 = load %8
-    %x_38:bool = eq 1i, %9
+    %10:bool = eq 1i, %9
+    %x_38:bool = let %10
     store %x_46, %x_38
-    %11:bool = eq %x_38, false
-    if %11 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %12:f32 = load %undefined
-        %13:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-        %14:f32 = load %13
-        %15:bool = gt %12, %14
-        store %x_45, %15
-        %16:bool = load %x_45
-        store %x_46, %16
+    %12:bool = eq %x_38, false
+    if %12 [t: $B3] {  # if_1
+      $B3: {  # true
+        %13:f32 = load %undefined
+        %14:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+        %15:f32 = load %14
+        %16:bool = gt %13, %15
+        store %x_45, %16
+        %17:bool = load %x_45
+        store %x_46, %17
         exit_if  # if_1
       }
     }
-    %17:bool = load %x_46
-    if %17 [t: %b4, f: %b5] {  # if_2
-      %b4 = block {  # true
-        %18:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %19:i32 = load %18
-        %20:f32 = convert %19
-        %21:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %22:i32 = load %21
-        %23:f32 = convert %22
-        %24:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %25:i32 = load %24
-        %26:f32 = convert %25
-        %27:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %18:bool = load %x_46
+    if %18 [t: $B4, f: $B5] {  # if_2
+      $B4: {  # true
+        %19:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %20:i32 = load %19
+        %21:f32 = convert %20
+        %22:f32 = let %21
+        %23:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %24:i32 = load %23
+        %25:f32 = convert %24
+        %26:f32 = let %25
+        %27:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
         %28:i32 = load %27
         %29:f32 = convert %28
-        %30:vec4<f32> = construct %20, %23, %26, %29
-        store %x_GLF_color, %30
-        exit_if  # if_2
-      }
-      %b5 = block {  # false
-        %31:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %30:f32 = let %29
+        %31:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
         %32:i32 = load %31
         %33:f32 = convert %32
-        %34:vec4<f32> = construct %33
+        %34:vec4<f32> = construct %22, %26, %30, %33
         store %x_GLF_color, %34
         exit_if  # if_2
       }
+      $B5: {  # false
+        %35:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %36:i32 = load %35
+        %37:f32 = convert %36
+        %38:vec4<f32> = construct %37
+        store %x_GLF_color, %38
+        exit_if  # if_2
+      }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b6 {
-  %b6 = block {
-    %36:void = call %main_1
-    %37:vec4<f32> = load %x_GLF_color
-    %38:main_out = construct %37
-    ret %38
+%tint_symbol = @fragment func():main_out {
+  $B6: {
+    %40:void = call %main_1
+    %41:vec4<f32> = load %x_GLF_color
+    %42:main_out = construct %41
+    ret %42
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-apfloat-sinh-negative-log2/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-apfloat-sinh-negative-log2/0-opt.wgsl.expected.ir.msl
index 45e073b..624a150 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-apfloat-sinh-negative-log2/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-apfloat-sinh-negative-log2/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,72 +20,86 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_8:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %undefined:ptr<function, f32, read_write> = var
     %x_45:ptr<function, bool, read_write> = var
     %x_46_phi:ptr<function, bool, read_write> = var
     store %undefined, 1.17520117759704589844f
     %8:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_10:i32 = load %8
-    %x_38:bool = eq 1i, %x_10
+    %9:i32 = load %8
+    %x_10:i32 = let %9
+    %11:bool = eq 1i, %x_10
+    %x_38:bool = let %11
     store %x_46_phi, %x_38
-    %11:bool = eq %x_38, false
-    if %11 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %x_42:f32 = load %undefined
-        %13:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-        %x_44:f32 = load %13
-        %15:bool = gt %x_42, %x_44
-        store %x_45, %15
-        %16:bool = load %x_45
-        store %x_46_phi, %16
+    %13:bool = eq %x_38, false
+    if %13 [t: $B3] {  # if_1
+      $B3: {  # true
+        %14:f32 = load %undefined
+        %x_42:f32 = let %14
+        %16:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+        %17:f32 = load %16
+        %x_44:f32 = let %17
+        %19:bool = gt %x_42, %x_44
+        store %x_45, %19
+        %20:bool = load %x_45
+        store %x_46_phi, %20
         exit_if  # if_1
       }
     }
-    %x_46:bool = load %x_46_phi
-    if %x_46 [t: %b4, f: %b5] {  # if_2
-      %b4 = block {  # true
-        %18:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_12:i32 = load %18
-        %20:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_13:i32 = load %20
-        %22:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_14:i32 = load %22
-        %24:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_15:i32 = load %24
-        %26:f32 = convert %x_12
-        %27:f32 = convert %x_13
-        %28:f32 = convert %x_14
-        %29:f32 = convert %x_15
-        %30:vec4<f32> = construct %26, %27, %28, %29
-        store %x_GLF_color, %30
+    %21:bool = load %x_46_phi
+    %x_46:bool = let %21
+    if %x_46 [t: $B4, f: $B5] {  # if_2
+      $B4: {  # true
+        %23:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %24:i32 = load %23
+        %x_12:i32 = let %24
+        %26:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %27:i32 = load %26
+        %x_13:i32 = let %27
+        %29:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %30:i32 = load %29
+        %x_14:i32 = let %30
+        %32:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %33:i32 = load %32
+        %x_15:i32 = let %33
+        %35:f32 = convert %x_12
+        %36:f32 = let %35
+        %37:f32 = convert %x_13
+        %38:f32 = let %37
+        %39:f32 = convert %x_14
+        %40:f32 = let %39
+        %41:f32 = convert %x_15
+        %42:vec4<f32> = construct %36, %38, %40, %41
+        store %x_GLF_color, %42
         exit_if  # if_2
       }
-      %b5 = block {  # false
-        %31:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_16:i32 = load %31
-        %x_60:f32 = convert %x_16
-        %34:vec4<f32> = construct %x_60, %x_60, %x_60, %x_60
-        store %x_GLF_color, %34
+      $B5: {  # false
+        %43:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %44:i32 = load %43
+        %x_16:i32 = let %44
+        %46:f32 = convert %x_16
+        %x_60:f32 = let %46
+        %48:vec4<f32> = construct %x_60, %x_60, %x_60, %x_60
+        store %x_GLF_color, %48
         exit_if  # if_2
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b6 {
-  %b6 = block {
-    %36:void = call %main_1
-    %37:vec4<f32> = load %x_GLF_color
-    %38:main_out = construct %37
-    ret %38
+%tint_symbol = @fragment func():main_out {
+  $B6: {
+    %50:void = call %main_1
+    %51:vec4<f32> = load %x_GLF_color
+    %52:main_out = construct %51
+    ret %52
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-apfloat-tanh/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-apfloat-tanh/0-opt.spvasm.expected.ir.msl
index efdd3b1..71c5ec1 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-apfloat-tanh/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-apfloat-tanh/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: distance
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-apfloat-tanh/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-apfloat-tanh/0-opt.wgsl.expected.ir.msl
index efdd3b1..71c5ec1 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-apfloat-tanh/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-apfloat-tanh/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: distance
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-apfloat-undefined-matrix-mul/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-apfloat-undefined-matrix-mul/0-opt.spvasm.expected.ir.msl
index f3c299b..d504532 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-apfloat-undefined-matrix-mul/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-apfloat-undefined-matrix-mul/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,14 +20,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_15:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %m0:ptr<function, mat3x4<f32>, read_write> = var
     %m1:ptr<function, mat3x4<f32>, read_write> = var
     %undefined:ptr<function, vec3<f32>, read_write> = var
@@ -39,122 +39,138 @@
     %13:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
     %14:i32 = load %13
     %15:f32 = convert %14
-    %16:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
-    %17:i32 = load %16
-    %18:f32 = convert %17
-    %19:ptr<uniform, i32, read> = access %x_6, 0u, 6i, 0u
-    %20:i32 = load %19
-    %21:f32 = convert %20
-    %22:vec4<f32> = construct %15, %18, %21, 4.0f
-    %23:ptr<uniform, i32, read> = access %x_6, 0u, 10i, 0u
-    %24:i32 = load %23
-    %25:f32 = convert %24
-    %26:ptr<uniform, i32, read> = access %x_6, 0u, 7i, 0u
+    %16:f32 = let %15
+    %17:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
+    %18:i32 = load %17
+    %19:f32 = convert %18
+    %20:f32 = let %19
+    %21:ptr<uniform, i32, read> = access %x_6, 0u, 6i, 0u
+    %22:i32 = load %21
+    %23:f32 = convert %22
+    %24:vec4<f32> = construct %16, %20, %23, 4.0f
+    %25:vec4<f32> = let %24
+    %26:ptr<uniform, i32, read> = access %x_6, 0u, 10i, 0u
     %27:i32 = load %26
     %28:f32 = convert %27
-    %29:ptr<uniform, i32, read> = access %x_6, 0u, 8i, 0u
-    %30:i32 = load %29
-    %31:f32 = convert %30
-    %32:vec4<f32> = construct %25, %28, %31, 8.0f
-    %33:ptr<uniform, i32, read> = access %x_6, 0u, 11i, 0u
-    %34:i32 = load %33
-    %35:f32 = convert %34
-    %36:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %37:i32 = load %36
-    %38:f32 = convert %37
-    %39:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %29:f32 = let %28
+    %30:ptr<uniform, i32, read> = access %x_6, 0u, 7i, 0u
+    %31:i32 = load %30
+    %32:f32 = convert %31
+    %33:f32 = let %32
+    %34:ptr<uniform, i32, read> = access %x_6, 0u, 8i, 0u
+    %35:i32 = load %34
+    %36:f32 = convert %35
+    %37:vec4<f32> = construct %29, %33, %36, 8.0f
+    %38:vec4<f32> = let %37
+    %39:ptr<uniform, i32, read> = access %x_6, 0u, 11i, 0u
     %40:i32 = load %39
     %41:f32 = convert %40
-    %42:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-    %43:i32 = load %42
-    %44:f32 = convert %43
-    %45:vec4<f32> = construct %35, %38, %41, %44
-    %46:mat3x4<f32> = construct %22, %32, %45
-    store %m0, %46
-    %47:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
+    %42:f32 = let %41
+    %43:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %44:i32 = load %43
+    %45:f32 = convert %44
+    %46:f32 = let %45
+    %47:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
     %48:i32 = load %47
-    %x_104:f32 = convert %48
-    %50:vec4<f32> = construct %x_104, 0.0f, 0.0f, 0.0f
-    %51:vec4<f32> = construct 0.0f, %x_104, 0.0f, 0.0f
-    %52:vec4<f32> = construct 0.0f, 0.0f, %x_104, 0.0f
-    %53:mat3x4<f32> = construct %50, %51, %52
-    store %m1, %53
+    %49:f32 = convert %48
+    %50:f32 = let %49
+    %51:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+    %52:i32 = load %51
+    %53:f32 = convert %52
+    %54:vec4<f32> = construct %42, %46, %50, %53
+    %55:mat3x4<f32> = construct %25, %38, %54
+    store %m0, %55
+    %56:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
+    %57:i32 = load %56
+    %58:f32 = convert %57
+    %x_104:f32 = let %58
+    %60:vec4<f32> = construct %x_104, 0.0f, 0.0f, 0.0f
+    %61:vec4<f32> = let %60
+    %62:vec4<f32> = construct 0.0f, %x_104, 0.0f, 0.0f
+    %63:vec4<f32> = let %62
+    %64:vec4<f32> = construct 0.0f, 0.0f, %x_104, 0.0f
+    %65:mat3x4<f32> = construct %61, %63, %64
+    store %m1, %65
     store %undefined, vec3<f32>(2.0f)
-    %54:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
-    %55:i32 = load %54
-    %56:f32 = convert %55
-    %57:vec3<f32> = construct %56
-    %58:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %59:i32 = load %58
-    %60:vec3<i32> = construct %59
-    %61:vec3<f32> = ldexp %57, %60
-    store %defined, %61
-    %62:mat3x4<f32> = load %m0
-    %63:vec3<f32> = load %undefined
-    %64:vec4<f32> = mul %62, %63
-    store %v0, %64
-    %65:mat3x4<f32> = load %m1
-    %66:vec3<f32> = load %undefined
-    %67:vec4<f32> = mul %65, %66
-    store %v1, %67
-    %68:mat3x4<f32> = load %m0
-    %69:vec3<f32> = load %defined
-    %70:vec4<f32> = mul %68, %69
-    store %v2, %70
-    %71:mat3x4<f32> = load %m1
-    %72:vec3<f32> = load %defined
-    %73:vec4<f32> = mul %71, %72
-    store %v3, %73
-    %74:f32 = load_vector_element %v2, 0u
-    %75:f32 = load_vector_element %v3, 0u
-    %76:bool = gt %74, %75
-    if %76 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %77:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
-        %78:i32 = load %77
-        %79:f32 = convert %78
-        %80:ptr<uniform, i32, read> = access %x_6, 0u, 9i, 0u
-        %81:i32 = load %80
-        %82:f32 = convert %81
-        %83:ptr<uniform, i32, read> = access %x_6, 0u, 9i, 0u
-        %84:i32 = load %83
-        %85:f32 = convert %84
-        %86:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
-        %87:i32 = load %86
-        %88:f32 = convert %87
-        %89:vec4<f32> = construct %79, %82, %85, %88
-        store %x_GLF_color, %89
-        exit_if  # if_1
-      }
-      %b4 = block {  # false
-        %90:ptr<uniform, i32, read> = access %x_6, 0u, 9i, 0u
+    %66:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
+    %67:i32 = load %66
+    %68:f32 = convert %67
+    %69:vec3<f32> = construct %68
+    %70:vec3<f32> = let %69
+    %71:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %72:i32 = load %71
+    %73:vec3<i32> = construct %72
+    %74:vec3<f32> = ldexp %70, %73
+    store %defined, %74
+    %75:mat3x4<f32> = load %m0
+    %76:vec3<f32> = load %undefined
+    %77:vec4<f32> = mul %75, %76
+    store %v0, %77
+    %78:mat3x4<f32> = load %m1
+    %79:vec3<f32> = load %undefined
+    %80:vec4<f32> = mul %78, %79
+    store %v1, %80
+    %81:mat3x4<f32> = load %m0
+    %82:vec3<f32> = load %defined
+    %83:vec4<f32> = mul %81, %82
+    store %v2, %83
+    %84:mat3x4<f32> = load %m1
+    %85:vec3<f32> = load %defined
+    %86:vec4<f32> = mul %84, %85
+    store %v3, %86
+    %87:f32 = load_vector_element %v2, 0u
+    %88:f32 = load_vector_element %v3, 0u
+    %89:bool = gt %87, %88
+    if %89 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %90:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
         %91:i32 = load %90
         %92:f32 = convert %91
-        %93:vec4<f32> = construct %92
-        store %x_GLF_color, %93
+        %93:f32 = let %92
+        %94:ptr<uniform, i32, read> = access %x_6, 0u, 9i, 0u
+        %95:i32 = load %94
+        %96:f32 = convert %95
+        %97:f32 = let %96
+        %98:ptr<uniform, i32, read> = access %x_6, 0u, 9i, 0u
+        %99:i32 = load %98
+        %100:f32 = convert %99
+        %101:f32 = let %100
+        %102:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
+        %103:i32 = load %102
+        %104:f32 = convert %103
+        %105:vec4<f32> = construct %93, %97, %101, %104
+        store %x_GLF_color, %105
+        exit_if  # if_1
+      }
+      $B4: {  # false
+        %106:ptr<uniform, i32, read> = access %x_6, 0u, 9i, 0u
+        %107:i32 = load %106
+        %108:f32 = convert %107
+        %109:vec4<f32> = construct %108
+        store %x_GLF_color, %109
         exit_if  # if_1
       }
     }
-    %94:f32 = load_vector_element %v0, 0u
-    %95:f32 = load_vector_element %v1, 0u
-    %96:bool = lt %94, %95
-    if %96 [t: %b5] {  # if_2
-      %b5 = block {  # true
-        %97:ptr<uniform, f32, read> = access %x_15, 0u, 0i, 0u
-        %98:f32 = load %97
-        store_vector_element %x_GLF_color, 1u, %98
+    %110:f32 = load_vector_element %v0, 0u
+    %111:f32 = load_vector_element %v1, 0u
+    %112:bool = lt %110, %111
+    if %112 [t: $B5] {  # if_2
+      $B5: {  # true
+        %113:ptr<uniform, f32, read> = access %x_15, 0u, 0i, 0u
+        %114:f32 = load %113
+        store_vector_element %x_GLF_color, 1u, %114
         exit_if  # if_2
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b6 {
-  %b6 = block {
-    %100:void = call %main_1
-    %101:vec4<f32> = load %x_GLF_color
-    %102:main_out = construct %101
-    ret %102
+%tint_symbol = @fragment func():main_out {
+  $B6: {
+    %116:void = call %main_1
+    %117:vec4<f32> = load %x_GLF_color
+    %118:main_out = construct %117
+    ret %118
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-apfloat-undefined-matrix-mul/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-apfloat-undefined-matrix-mul/0-opt.wgsl.expected.ir.msl
index b16e7e0..233ec3c 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-apfloat-undefined-matrix-mul/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-apfloat-undefined-matrix-mul/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,14 +20,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_15:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %m0:ptr<function, mat3x4<f32>, read_write> = var
     %m1:ptr<function, mat3x4<f32>, read_write> = var
     %undefined:ptr<function, vec3<f32>, read_write> = var
@@ -37,111 +37,160 @@
     %v2:ptr<function, vec4<f32>, read_write> = var
     %v3:ptr<function, vec4<f32>, read_write> = var
     %13:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
-    %x_17:i32 = load %13
-    %15:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
-    %x_18:i32 = load %15
-    %17:ptr<uniform, i32, read> = access %x_6, 0u, 6i, 0u
-    %x_19:i32 = load %17
-    %19:ptr<uniform, i32, read> = access %x_6, 0u, 10i, 0u
-    %x_20:i32 = load %19
-    %21:ptr<uniform, i32, read> = access %x_6, 0u, 7i, 0u
-    %x_21:i32 = load %21
-    %23:ptr<uniform, i32, read> = access %x_6, 0u, 8i, 0u
-    %x_22:i32 = load %23
-    %25:ptr<uniform, i32, read> = access %x_6, 0u, 11i, 0u
-    %x_23:i32 = load %25
-    %27:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_24:i32 = load %27
-    %29:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_25:i32 = load %29
-    %31:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-    %x_26:i32 = load %31
-    %33:f32 = convert %x_17
-    %34:f32 = convert %x_18
-    %35:f32 = convert %x_19
-    %36:vec4<f32> = construct %33, %34, %35, 4.0f
-    %37:f32 = convert %x_20
-    %38:f32 = convert %x_21
-    %39:f32 = convert %x_22
-    %40:vec4<f32> = construct %37, %38, %39, 8.0f
-    %41:f32 = convert %x_23
-    %42:f32 = convert %x_24
-    %43:f32 = convert %x_25
-    %44:f32 = convert %x_26
-    %45:vec4<f32> = construct %41, %42, %43, %44
-    %46:mat3x4<f32> = construct %36, %40, %45
-    store %m0, %46
-    %47:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
-    %x_27:i32 = load %47
-    %x_104:f32 = convert %x_27
-    %50:vec4<f32> = construct %x_104, 0.0f, 0.0f, 0.0f
-    %51:vec4<f32> = construct 0.0f, %x_104, 0.0f, 0.0f
-    %52:vec4<f32> = construct 0.0f, 0.0f, %x_104, 0.0f
-    %53:mat3x4<f32> = construct %50, %51, %52
-    store %m1, %53
+    %14:i32 = load %13
+    %x_17:i32 = let %14
+    %16:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
+    %17:i32 = load %16
+    %x_18:i32 = let %17
+    %19:ptr<uniform, i32, read> = access %x_6, 0u, 6i, 0u
+    %20:i32 = load %19
+    %x_19:i32 = let %20
+    %22:ptr<uniform, i32, read> = access %x_6, 0u, 10i, 0u
+    %23:i32 = load %22
+    %x_20:i32 = let %23
+    %25:ptr<uniform, i32, read> = access %x_6, 0u, 7i, 0u
+    %26:i32 = load %25
+    %x_21:i32 = let %26
+    %28:ptr<uniform, i32, read> = access %x_6, 0u, 8i, 0u
+    %29:i32 = load %28
+    %x_22:i32 = let %29
+    %31:ptr<uniform, i32, read> = access %x_6, 0u, 11i, 0u
+    %32:i32 = load %31
+    %x_23:i32 = let %32
+    %34:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %35:i32 = load %34
+    %x_24:i32 = let %35
+    %37:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %38:i32 = load %37
+    %x_25:i32 = let %38
+    %40:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+    %41:i32 = load %40
+    %x_26:i32 = let %41
+    %43:f32 = convert %x_17
+    %44:f32 = let %43
+    %45:f32 = convert %x_18
+    %46:f32 = let %45
+    %47:f32 = convert %x_19
+    %48:vec4<f32> = construct %44, %46, %47, 4.0f
+    %49:vec4<f32> = let %48
+    %50:f32 = convert %x_20
+    %51:f32 = let %50
+    %52:f32 = convert %x_21
+    %53:f32 = let %52
+    %54:f32 = convert %x_22
+    %55:vec4<f32> = construct %51, %53, %54, 8.0f
+    %56:vec4<f32> = let %55
+    %57:f32 = convert %x_23
+    %58:f32 = let %57
+    %59:f32 = convert %x_24
+    %60:f32 = let %59
+    %61:f32 = convert %x_25
+    %62:f32 = let %61
+    %63:f32 = convert %x_26
+    %64:vec4<f32> = construct %58, %60, %62, %63
+    %65:mat3x4<f32> = construct %49, %56, %64
+    store %m0, %65
+    %66:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
+    %67:i32 = load %66
+    %x_27:i32 = let %67
+    %69:f32 = convert %x_27
+    %x_104:f32 = let %69
+    %71:vec4<f32> = construct %x_104, 0.0f, 0.0f, 0.0f
+    %72:vec4<f32> = let %71
+    %73:vec4<f32> = construct 0.0f, %x_104, 0.0f, 0.0f
+    %74:vec4<f32> = let %73
+    %75:vec4<f32> = construct 0.0f, 0.0f, %x_104, 0.0f
+    %76:mat3x4<f32> = construct %72, %74, %75
+    store %m1, %76
     store %undefined, vec3<f32>(2.0f)
-    %54:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
-    %x_28:i32 = load %54
-    %x_111:f32 = convert %x_28
-    %57:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_29:i32 = load %57
-    %59:vec3<f32> = construct %x_111, %x_111, %x_111
-    %60:vec3<i32> = construct %x_29, %x_29, %x_29
-    %61:vec3<f32> = ldexp %59, %60
-    store %defined, %61
-    %x_116:mat3x4<f32> = load %m0
-    %x_117:vec3<f32> = load %undefined
-    %64:vec4<f32> = mul %x_116, %x_117
-    store %v0, %64
-    %x_119:mat3x4<f32> = load %m1
-    %x_120:vec3<f32> = load %undefined
-    %67:vec4<f32> = mul %x_119, %x_120
-    store %v1, %67
-    %x_122:mat3x4<f32> = load %m0
-    %x_123:vec3<f32> = load %defined
-    %70:vec4<f32> = mul %x_122, %x_123
-    store %v2, %70
-    %x_125:mat3x4<f32> = load %m1
-    %x_126:vec3<f32> = load %defined
-    %73:vec4<f32> = mul %x_125, %x_126
-    store %v3, %73
-    %x_129:f32 = load_vector_element %v2, 0u
-    %x_131:f32 = load_vector_element %v3, 0u
-    %76:bool = gt %x_129, %x_131
-    if %76 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %77:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
-        %x_30:i32 = load %77
-        %79:ptr<uniform, i32, read> = access %x_6, 0u, 9i, 0u
-        %x_31:i32 = load %79
-        %81:ptr<uniform, i32, read> = access %x_6, 0u, 9i, 0u
-        %x_32:i32 = load %81
-        %83:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
-        %x_33:i32 = load %83
-        %85:f32 = convert %x_30
-        %86:f32 = convert %x_31
-        %87:f32 = convert %x_32
-        %88:f32 = convert %x_33
-        %89:vec4<f32> = construct %85, %86, %87, %88
-        store %x_GLF_color, %89
+    %77:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
+    %78:i32 = load %77
+    %x_28:i32 = let %78
+    %80:f32 = convert %x_28
+    %x_111:f32 = let %80
+    %82:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %83:i32 = load %82
+    %x_29:i32 = let %83
+    %85:vec3<f32> = construct %x_111, %x_111, %x_111
+    %86:vec3<f32> = let %85
+    %87:vec3<i32> = construct %x_29, %x_29, %x_29
+    %88:vec3<f32> = ldexp %86, %87
+    store %defined, %88
+    %89:mat3x4<f32> = load %m0
+    %x_116:mat3x4<f32> = let %89
+    %91:vec3<f32> = load %undefined
+    %x_117:vec3<f32> = let %91
+    %93:vec4<f32> = mul %x_116, %x_117
+    store %v0, %93
+    %94:mat3x4<f32> = load %m1
+    %x_119:mat3x4<f32> = let %94
+    %96:vec3<f32> = load %undefined
+    %x_120:vec3<f32> = let %96
+    %98:vec4<f32> = mul %x_119, %x_120
+    store %v1, %98
+    %99:mat3x4<f32> = load %m0
+    %x_122:mat3x4<f32> = let %99
+    %101:vec3<f32> = load %defined
+    %x_123:vec3<f32> = let %101
+    %103:vec4<f32> = mul %x_122, %x_123
+    store %v2, %103
+    %104:mat3x4<f32> = load %m1
+    %x_125:mat3x4<f32> = let %104
+    %106:vec3<f32> = load %defined
+    %x_126:vec3<f32> = let %106
+    %108:vec4<f32> = mul %x_125, %x_126
+    store %v3, %108
+    %109:f32 = load_vector_element %v2, 0u
+    %x_129:f32 = let %109
+    %111:f32 = load_vector_element %v3, 0u
+    %x_131:f32 = let %111
+    %113:bool = gt %x_129, %x_131
+    if %113 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %114:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
+        %115:i32 = load %114
+        %x_30:i32 = let %115
+        %117:ptr<uniform, i32, read> = access %x_6, 0u, 9i, 0u
+        %118:i32 = load %117
+        %x_31:i32 = let %118
+        %120:ptr<uniform, i32, read> = access %x_6, 0u, 9i, 0u
+        %121:i32 = load %120
+        %x_32:i32 = let %121
+        %123:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
+        %124:i32 = load %123
+        %x_33:i32 = let %124
+        %126:f32 = convert %x_30
+        %127:f32 = let %126
+        %128:f32 = convert %x_31
+        %129:f32 = let %128
+        %130:f32 = convert %x_32
+        %131:f32 = let %130
+        %132:f32 = convert %x_33
+        %133:vec4<f32> = construct %127, %129, %131, %132
+        store %x_GLF_color, %133
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %90:ptr<uniform, i32, read> = access %x_6, 0u, 9i, 0u
-        %x_34:i32 = load %90
-        %x_146:f32 = convert %x_34
-        %93:vec4<f32> = construct %x_146, %x_146, %x_146, %x_146
-        store %x_GLF_color, %93
+      $B4: {  # false
+        %134:ptr<uniform, i32, read> = access %x_6, 0u, 9i, 0u
+        %135:i32 = load %134
+        %x_34:i32 = let %135
+        %137:f32 = convert %x_34
+        %x_146:f32 = let %137
+        %139:vec4<f32> = construct %x_146, %x_146, %x_146, %x_146
+        store %x_GLF_color, %139
         exit_if  # if_1
       }
     }
-    %x_149:f32 = load_vector_element %v0, 0u
-    %x_151:f32 = load_vector_element %v1, 0u
-    %96:bool = lt %x_149, %x_151
-    if %96 [t: %b5] {  # if_2
-      %b5 = block {  # true
-        %97:ptr<uniform, f32, read> = access %x_15, 0u, 0i, 0u
-        %x_156:f32 = load %97
+    %140:f32 = load_vector_element %v0, 0u
+    %x_149:f32 = let %140
+    %142:f32 = load_vector_element %v1, 0u
+    %x_151:f32 = let %142
+    %144:bool = lt %x_149, %x_151
+    if %144 [t: $B5] {  # if_2
+      $B5: {  # true
+        %145:ptr<uniform, f32, read> = access %x_15, 0u, 0i, 0u
+        %146:f32 = load %145
+        %x_156:f32 = let %146
         store_vector_element %x_GLF_color, 1u, %x_156
         exit_if  # if_2
       }
@@ -149,12 +198,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b6 {
-  %b6 = block {
-    %100:void = call %main_1
-    %101:vec4<f32> = load %x_GLF_color
-    %102:main_out = construct %101
-    ret %102
+%tint_symbol = @fragment func():main_out {
+  $B6: {
+    %149:void = call %main_1
+    %150:vec4<f32> = load %x_GLF_color
+    %151:main_out = construct %150
+    ret %151
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-apfloat-unpackunorm-loop/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-apfloat-unpackunorm-loop/0-opt.spvasm.expected.ir.msl
index 2362bd1..ea04e59 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-apfloat-unpackunorm-loop/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-apfloat-unpackunorm-loop/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,79 +12,92 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %i:ptr<function, i32, read_write> = var
     %v:ptr<function, vec4<f32>, read_write> = var
     %6:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
     %7:i32 = load %6
     store %i, %7
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %8:i32 = load %i
         %9:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
         %10:i32 = load %9
         %11:bool = lt %8, %10
-        if %11 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %11 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
         store %v, vec4<f32>(0.39215686917304992676f, 0.0f, 0.0f, 0.0f)
         %12:f32 = load_vector_element %v, 0u
-        %13:i32 = convert %12
-        %14:i32 = load %i
-        %15:bool = gt %13, %14
-        if %15 [t: %b7] {  # if_2
-          %b7 = block {  # true
-            %16:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-            %17:i32 = load %16
-            %18:f32 = convert %17
-            %19:vec4<f32> = construct %18
-            store %x_GLF_color, %19
+        %13:i32 = call %tint_f32_to_i32, %12
+        %15:i32 = load %i
+        %16:bool = gt %13, %15
+        if %16 [t: $B7] {  # if_2
+          $B7: {  # true
+            %17:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+            %18:i32 = load %17
+            %19:f32 = convert %18
+            %20:vec4<f32> = construct %19
+            store %x_GLF_color, %20
             ret
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %20:i32 = load %i
-        %21:i32 = add %20, 1i
-        store %i, %21
-        next_iteration %b3
+      $B4: {  # continuing
+        %21:i32 = load %i
+        %22:i32 = add %21, 1i
+        store %i, %22
+        next_iteration  # -> $B3
       }
     }
-    %22:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %23:i32 = load %22
-    %24:f32 = convert %23
-    %25:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %26:i32 = load %25
-    %27:f32 = convert %26
-    %28:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %29:i32 = load %28
-    %30:f32 = convert %29
-    %31:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %23:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %24:i32 = load %23
+    %25:f32 = convert %24
+    %26:f32 = let %25
+    %27:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %28:i32 = load %27
+    %29:f32 = convert %28
+    %30:f32 = let %29
+    %31:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
     %32:i32 = load %31
     %33:f32 = convert %32
-    %34:vec4<f32> = construct %24, %27, %30, %33
-    store %x_GLF_color, %34
+    %34:f32 = let %33
+    %35:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %36:i32 = load %35
+    %37:f32 = convert %36
+    %38:vec4<f32> = construct %26, %30, %34, %37
+    store %x_GLF_color, %38
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b8 {
-  %b8 = block {
-    %36:void = call %main_1
-    %37:vec4<f32> = load %x_GLF_color
-    %38:main_out = construct %37
-    ret %38
+%tint_symbol = @fragment func():main_out {
+  $B8: {
+    %40:void = call %main_1
+    %41:vec4<f32> = load %x_GLF_color
+    %42:main_out = construct %41
+    ret %42
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B9: {
+    %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
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-apfloat-unpackunorm-loop/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-apfloat-unpackunorm-loop/0-opt.wgsl.expected.ir.msl
index 89116ae..1f86fe3 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-apfloat-unpackunorm-loop/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-apfloat-unpackunorm-loop/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,79 +12,104 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %i:ptr<function, i32, read_write> = var
     %v:ptr<function, vec4<f32>, read_write> = var
     %6:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_30:i32 = load %6
+    %7:i32 = load %6
+    %x_30:i32 = let %7
     store %i, %x_30
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_35:i32 = load %i
-        %9:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %x_37:i32 = load %9
-        %11:bool = lt %x_35, %x_37
-        if %11 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %9:i32 = load %i
+        %x_35:i32 = let %9
+        %11:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %12:i32 = load %11
+        %x_37:i32 = let %12
+        %14:bool = lt %x_35, %x_37
+        if %14 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
         store %v, vec4<f32>(0.39215686917304992676f, 0.0f, 0.0f, 0.0f)
-        %x_42:f32 = load_vector_element %v, 0u
-        %x_44:i32 = load %i
-        %14:i32 = convert %x_42
-        %15:bool = gt %14, %x_44
-        if %15 [t: %b7] {  # if_2
-          %b7 = block {  # true
-            %16:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-            %x_49:i32 = load %16
-            %x_50:f32 = convert %x_49
-            %19:vec4<f32> = construct %x_50, %x_50, %x_50, %x_50
-            store %x_GLF_color, %19
+        %15:f32 = load_vector_element %v, 0u
+        %x_42:f32 = let %15
+        %17:i32 = load %i
+        %x_44:i32 = let %17
+        %19:i32 = call %tint_f32_to_i32, %x_42
+        %21:bool = gt %19, %x_44
+        if %21 [t: $B7] {  # if_2
+          $B7: {  # true
+            %22:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+            %23:i32 = load %22
+            %x_49:i32 = let %23
+            %25:f32 = convert %x_49
+            %x_50:f32 = let %25
+            %27:vec4<f32> = construct %x_50, %x_50, %x_50, %x_50
+            store %x_GLF_color, %27
             ret
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_52:i32 = load %i
-        %21:i32 = add %x_52, 1i
-        store %i, %21
-        next_iteration %b3
+      $B4: {  # continuing
+        %28:i32 = load %i
+        %x_52:i32 = let %28
+        %30:i32 = add %x_52, 1i
+        store %i, %30
+        next_iteration  # -> $B3
       }
     }
-    %22:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_55:i32 = load %22
-    %24:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_58:i32 = load %24
-    %26:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_61:i32 = load %26
-    %28:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_64:i32 = load %28
-    %30:f32 = convert %x_55
-    %31:f32 = convert %x_58
-    %32:f32 = convert %x_61
-    %33:f32 = convert %x_64
-    %34:vec4<f32> = construct %30, %31, %32, %33
-    store %x_GLF_color, %34
+    %31:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %32:i32 = load %31
+    %x_55:i32 = let %32
+    %34:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %35:i32 = load %34
+    %x_58:i32 = let %35
+    %37:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %38:i32 = load %37
+    %x_61:i32 = let %38
+    %40:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %41:i32 = load %40
+    %x_64:i32 = let %41
+    %43:f32 = convert %x_55
+    %44:f32 = let %43
+    %45:f32 = convert %x_58
+    %46:f32 = let %45
+    %47:f32 = convert %x_61
+    %48:f32 = let %47
+    %49:f32 = convert %x_64
+    %50:vec4<f32> = construct %44, %46, %48, %49
+    store %x_GLF_color, %50
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b8 {
-  %b8 = block {
-    %36:void = call %main_1
-    %37:vec4<f32> = load %x_GLF_color
-    %38:main_out = construct %37
-    ret %38
+%tint_symbol = @fragment func():main_out {
+  $B8: {
+    %52:void = call %main_1
+    %53:vec4<f32> = load %x_GLF_color
+    %54:main_out = construct %53
+    ret %54
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B9: {
+    %56:i32 = convert %value
+    %57:bool = gte %value, -2147483648.0f
+    %58:i32 = select -2147483648i, %56, %57
+    %59:bool = lte %value, 2147483520.0f
+    %60:i32 = select 2147483647i, %58, %59
+    ret %60
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-array-accesses-clamp/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-array-accesses-clamp/0-opt.spvasm.expected.ir.msl
index 62f23cf..2d68e86 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-array-accesses-clamp/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-array-accesses-clamp/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,15 +20,15 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_11:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %arr:ptr<function, array<i32, 3>, read_write> = var
     %a:ptr<function, i32, read_write> = var
     %b:ptr<function, i32, read_write> = var
@@ -53,8 +53,8 @@
     %24:ptr<uniform, f32, read> = access %x_11, 0u, 0i, 0u
     %25:f32 = load %24
     %26:bool = lt %23, %25
-    if %26 [t: %b3] {  # if_1
-      %b3 = block {  # true
+    if %26 [t: $B3] {  # if_1
+      $B3: {  # true
         %27:i32 = load %b
         %28:i32 = add %27, 1i
         store %b, %28
@@ -64,47 +64,54 @@
     %29:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
     %30:i32 = load %29
     store %c, %30
-    %x_63:i32 = load %c
-    %32:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-    %x_65:i32 = load %32
-    %34:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
-    %x_67:i32 = load %34
-    %36:i32 = clamp %x_63, %x_65, %x_67
-    %37:ptr<function, i32, read_write> = access %arr, %36
-    %38:i32 = load %b
-    store %37, %38
-    %39:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-    %40:i32 = load %39
+    %31:i32 = load %c
+    %x_63:i32 = let %31
+    %33:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+    %34:i32 = load %33
+    %x_65:i32 = let %34
+    %36:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
+    %37:i32 = load %36
+    %x_67:i32 = let %37
+    %39:i32 = max %x_63, %x_65
+    %40:i32 = min %39, %x_67
     %41:ptr<function, i32, read_write> = access %arr, %40
-    %42:i32 = load %41
-    %43:f32 = convert %42
-    %44:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-    %45:i32 = load %44
-    %46:ptr<function, i32, read_write> = access %arr, %45
-    %47:i32 = load %46
-    %48:f32 = convert %47
+    %42:i32 = load %b
+    store %41, %42
+    %43:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+    %44:i32 = load %43
+    %45:ptr<function, i32, read_write> = access %arr, %44
+    %46:i32 = load %45
+    %47:f32 = convert %46
+    %48:f32 = let %47
     %49:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
     %50:i32 = load %49
     %51:ptr<function, i32, read_write> = access %arr, %50
     %52:i32 = load %51
     %53:f32 = convert %52
-    %54:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
-    %55:i32 = load %54
-    %56:ptr<function, i32, read_write> = access %arr, %55
-    %57:i32 = load %56
-    %58:f32 = convert %57
-    %59:vec4<f32> = construct %43, %48, %53, %58
-    store %x_GLF_color, %59
+    %54:f32 = let %53
+    %55:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+    %56:i32 = load %55
+    %57:ptr<function, i32, read_write> = access %arr, %56
+    %58:i32 = load %57
+    %59:f32 = convert %58
+    %60:f32 = let %59
+    %61:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
+    %62:i32 = load %61
+    %63:ptr<function, i32, read_write> = access %arr, %62
+    %64:i32 = load %63
+    %65:f32 = convert %64
+    %66:vec4<f32> = construct %48, %54, %60, %65
+    store %x_GLF_color, %66
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b4 {
-  %b4 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B4: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %62:void = call %main_1
-    %63:vec4<f32> = load %x_GLF_color
-    %64:main_out = construct %63
-    ret %64
+    %69:void = call %main_1
+    %70:vec4<f32> = load %x_GLF_color
+    %71:main_out = construct %70
+    ret %71
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-array-accesses-clamp/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-array-accesses-clamp/0-opt.wgsl.expected.ir.msl
index 3273a1e..2b88ee9 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-array-accesses-clamp/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-array-accesses-clamp/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,91 +20,117 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_11:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %arr:ptr<function, array<i32, 3>, read_write> = var
     %a:ptr<function, i32, read_write> = var
     %b:ptr<function, i32, read_write> = var
     %c:ptr<function, i32, read_write> = var
     %10:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-    %x_40:i32 = load %10
-    %12:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-    %x_42:i32 = load %12
-    %14:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-    %x_44:i32 = load %14
-    %16:array<i32, 3> = construct %x_40, %x_42, %x_44
-    store %arr, %16
-    %17:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-    %x_47:i32 = load %17
-    %19:ptr<function, i32, read_write> = access %arr, %x_47
-    %x_49:i32 = load %19
+    %11:i32 = load %10
+    %x_40:i32 = let %11
+    %13:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+    %14:i32 = load %13
+    %x_42:i32 = let %14
+    %16:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+    %17:i32 = load %16
+    %x_44:i32 = let %17
+    %19:array<i32, 3> = construct %x_40, %x_42, %x_44
+    store %arr, %19
+    %20:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+    %21:i32 = load %20
+    %x_47:i32 = let %21
+    %23:ptr<function, i32, read_write> = access %arr, %x_47
+    %24:i32 = load %23
+    %x_49:i32 = let %24
     store %a, %x_49
-    %x_50:i32 = load %a
-    %22:i32 = sub %x_50, 1i
-    store %b, %22
-    %x_53:f32 = load_vector_element %gl_FragCoord, 0u
-    %24:ptr<uniform, f32, read> = access %x_11, 0u, 0i, 0u
-    %x_55:f32 = load %24
-    %26:bool = lt %x_53, %x_55
-    if %26 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %x_59:i32 = load %b
-        %28:i32 = add %x_59, 1i
-        store %b, %28
+    %26:i32 = load %a
+    %x_50:i32 = let %26
+    %28:i32 = sub %x_50, 1i
+    store %b, %28
+    %29:f32 = load_vector_element %gl_FragCoord, 0u
+    %x_53:f32 = let %29
+    %31:ptr<uniform, f32, read> = access %x_11, 0u, 0i, 0u
+    %32:f32 = load %31
+    %x_55:f32 = let %32
+    %34:bool = lt %x_53, %x_55
+    if %34 [t: $B3] {  # if_1
+      $B3: {  # true
+        %35:i32 = load %b
+        %x_59:i32 = let %35
+        %37:i32 = add %x_59, 1i
+        store %b, %37
         exit_if  # if_1
       }
     }
-    %29:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-    %x_62:i32 = load %29
+    %38:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+    %39:i32 = load %38
+    %x_62:i32 = let %39
     store %c, %x_62
-    %x_63:i32 = load %c
-    %32:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-    %x_65:i32 = load %32
-    %34:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
-    %x_67:i32 = load %34
-    %x_69:i32 = load %b
-    %37:i32 = clamp %x_63, %x_65, %x_67
-    %38:ptr<function, i32, read_write> = access %arr, %37
-    store %38, %x_69
-    %39:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-    %x_72:i32 = load %39
-    %41:ptr<function, i32, read_write> = access %arr, %x_72
-    %x_74:i32 = load %41
+    %41:i32 = load %c
+    %x_63:i32 = let %41
     %43:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-    %x_77:i32 = load %43
-    %45:ptr<function, i32, read_write> = access %arr, %x_77
-    %x_79:i32 = load %45
-    %47:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-    %x_82:i32 = load %47
-    %49:ptr<function, i32, read_write> = access %arr, %x_82
-    %x_84:i32 = load %49
-    %51:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
-    %x_87:i32 = load %51
-    %53:ptr<function, i32, read_write> = access %arr, %x_87
-    %x_89:i32 = load %53
-    %55:f32 = convert %x_74
-    %56:f32 = convert %x_79
-    %57:f32 = convert %x_84
-    %58:f32 = convert %x_89
-    %59:vec4<f32> = construct %55, %56, %57, %58
-    store %x_GLF_color, %59
+    %44:i32 = load %43
+    %x_65:i32 = let %44
+    %46:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
+    %47:i32 = load %46
+    %x_67:i32 = let %47
+    %49:i32 = load %b
+    %x_69:i32 = let %49
+    %51:i32 = max %x_63, %x_65
+    %52:i32 = min %51, %x_67
+    %53:ptr<function, i32, read_write> = access %arr, %52
+    store %53, %x_69
+    %54:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+    %55:i32 = load %54
+    %x_72:i32 = let %55
+    %57:ptr<function, i32, read_write> = access %arr, %x_72
+    %58:i32 = load %57
+    %x_74:i32 = let %58
+    %60:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+    %61:i32 = load %60
+    %x_77:i32 = let %61
+    %63:ptr<function, i32, read_write> = access %arr, %x_77
+    %64:i32 = load %63
+    %x_79:i32 = let %64
+    %66:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+    %67:i32 = load %66
+    %x_82:i32 = let %67
+    %69:ptr<function, i32, read_write> = access %arr, %x_82
+    %70:i32 = load %69
+    %x_84:i32 = let %70
+    %72:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
+    %73:i32 = load %72
+    %x_87:i32 = let %73
+    %75:ptr<function, i32, read_write> = access %arr, %x_87
+    %76:i32 = load %75
+    %x_89:i32 = let %76
+    %78:f32 = convert %x_74
+    %79:f32 = let %78
+    %80:f32 = convert %x_79
+    %81:f32 = let %80
+    %82:f32 = convert %x_84
+    %83:f32 = let %82
+    %84:f32 = convert %x_89
+    %85:vec4<f32> = construct %79, %81, %83, %84
+    store %x_GLF_color, %85
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b4 {
-  %b4 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B4: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %62:void = call %main_1
-    %63:vec4<f32> = load %x_GLF_color
-    %64:main_out = construct %63
-    ret %64
+    %88:void = call %main_1
+    %89:vec4<f32> = load %x_GLF_color
+    %90:main_out = construct %89
+    ret %90
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-array-copies-loops-with-limiters/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-array-copies-loops-with-limiters/0-opt.spvasm.expected.ir.msl
index d136454..a059df6 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-array-copies-loops-with-limiters/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-array-copies-loops-with-limiters/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -16,14 +16,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_19:ptr<uniform, buf1, read> = var @binding_point(0, 1)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %arr0:ptr<function, array<i32, 10>, read_write> = var
     %arr1:ptr<function, array<i32, 10>, read_write> = var
     %a:ptr<function, i32, read_write> = var
@@ -83,34 +83,34 @@
     %59:ptr<uniform, i32, read> = access %x_6, 0u, 8i, 0u
     %60:i32 = load %59
     store %a, %60
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %61:i32 = load %a
         %62:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
         %63:i32 = load %62
         %64:bool = lt %61, %63
-        if %64 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %64 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
         %65:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
         %66:i32 = load %65
         store %limiter0, %66
-        loop [b: %b7, c: %b8] {  # loop_2
-          %b7 = block {  # body
+        loop [b: $B7, c: $B8] {  # loop_2
+          $B7: {  # body
             %67:i32 = load %limiter0
             %68:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
             %69:i32 = load %68
             %70:bool = lt %67, %69
-            if %70 [t: %b9, f: %b10] {  # if_2
-              %b9 = block {  # true
+            if %70 [t: $B9, f: $B10] {  # if_2
+              $B9: {  # true
                 exit_if  # if_2
               }
-              %b10 = block {  # false
+              $B10: {  # false
                 exit_loop  # loop_2
               }
             }
@@ -123,17 +123,17 @@
             %75:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
             %76:i32 = load %75
             store %b, %76
-            loop [b: %b11, c: %b12] {  # loop_3
-              %b11 = block {  # body
+            loop [b: $B11, c: $B12] {  # loop_3
+              $B11: {  # body
                 %77:i32 = load %b
                 %78:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
                 %79:i32 = load %78
                 %80:bool = lt %77, %79
-                if %80 [t: %b13, f: %b14] {  # if_3
-                  %b13 = block {  # true
+                if %80 [t: $B13, f: $B14] {  # if_3
+                  $B13: {  # true
                     exit_if  # if_3
                   }
-                  %b14 = block {  # false
+                  $B14: {  # false
                     exit_loop  # loop_3
                   }
                 }
@@ -141,253 +141,261 @@
                 %82:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
                 %83:i32 = load %82
                 %84:bool = gt %81, %83
-                if %84 [t: %b15] {  # if_4
-                  %b15 = block {  # true
+                if %84 [t: $B15] {  # if_4
+                  $B15: {  # true
                     exit_loop  # loop_3
                   }
                 }
                 %85:i32 = load %limiter1
                 %86:i32 = add %85, 1i
                 store %limiter1, %86
-                %x_145:i32 = load %b
-                %88:ptr<function, i32, read_write> = access %arr0, %x_145
-                %89:i32 = load %a
-                %90:ptr<function, i32, read_write> = access %arr1, %89
-                %91:i32 = load %90
-                store %88, %91
-                continue %b12
+                %87:i32 = load %b
+                %x_145:i32 = let %87
+                %89:ptr<function, i32, read_write> = access %arr0, %x_145
+                %90:i32 = load %a
+                %91:ptr<function, i32, read_write> = access %arr1, %90
+                %92:i32 = load %91
+                store %89, %92
+                continue  # -> $B12
               }
-              %b12 = block {  # continuing
-                %92:i32 = load %b
-                %93:i32 = add %92, 1i
-                store %b, %93
-                next_iteration %b11
+              $B12: {  # continuing
+                %93:i32 = load %b
+                %94:i32 = add %93, 1i
+                store %b, %94
+                next_iteration  # -> $B11
               }
             }
-            continue %b8
+            continue  # -> $B8
           }
-          %b8 = block {  # continuing
-            next_iteration %b7
+          $B8: {  # continuing
+            next_iteration  # -> $B7
           }
         }
         store %limiter2, 0i
-        loop [b: %b16, c: %b17] {  # loop_4
-          %b16 = block {  # body
-            %94:i32 = load %limiter2
-            %95:bool = lt %94, 5i
-            if %95 [t: %b18, f: %b19] {  # if_5
-              %b18 = block {  # true
+        loop [b: $B16, c: $B17] {  # loop_4
+          $B16: {  # body
+            %95:i32 = load %limiter2
+            %96:bool = lt %95, 5i
+            if %96 [t: $B18, f: $B19] {  # if_5
+              $B18: {  # true
                 exit_if  # if_5
               }
-              %b19 = block {  # false
+              $B19: {  # false
                 exit_loop  # loop_4
               }
             }
-            %96:i32 = load %limiter2
-            %97:i32 = add %96, 1i
-            store %limiter2, %97
-            %98:ptr<function, i32, read_write> = access %arr0, 1i
-            %99:ptr<function, i32, read_write> = access %arr1, 1i
-            %100:i32 = load %99
-            store %98, %100
-            continue %b17
+            %97:i32 = load %limiter2
+            %98:i32 = add %97, 1i
+            store %limiter2, %98
+            %99:ptr<function, i32, read_write> = access %arr0, 1i
+            %100:ptr<function, i32, read_write> = access %arr1, 1i
+            %101:i32 = load %100
+            store %99, %101
+            continue  # -> $B17
           }
-          %b17 = block {  # continuing
-            next_iteration %b16
+          $B17: {  # continuing
+            next_iteration  # -> $B16
           }
         }
-        loop [b: %b20, c: %b21] {  # loop_5
-          %b20 = block {  # body
+        loop [b: $B20, c: $B21] {  # loop_5
+          $B20: {  # body
             store %limiter3, 0i
             store %d, 0i
-            loop [b: %b22, c: %b23] {  # loop_6
-              %b22 = block {  # body
-                %101:i32 = load %d
-                %102:bool = lt %101, 10i
-                if %102 [t: %b24, f: %b25] {  # if_6
-                  %b24 = block {  # true
+            loop [b: $B22, c: $B23] {  # loop_6
+              $B22: {  # body
+                %102:i32 = load %d
+                %103:bool = lt %102, 10i
+                if %103 [t: $B24, f: $B25] {  # if_6
+                  $B24: {  # true
                     exit_if  # if_6
                   }
-                  %b25 = block {  # false
+                  $B25: {  # false
                     exit_loop  # loop_6
                   }
                 }
-                %103:i32 = load %limiter3
-                %104:bool = gt %103, 4i
-                if %104 [t: %b26] {  # if_7
-                  %b26 = block {  # true
+                %104:i32 = load %limiter3
+                %105:bool = gt %104, 4i
+                if %105 [t: $B26] {  # if_7
+                  $B26: {  # true
                     exit_loop  # loop_6
                   }
                 }
-                %105:i32 = load %limiter3
-                %106:i32 = add %105, 1i
-                store %limiter3, %106
-                %x_181:i32 = load %d
-                %108:ptr<function, i32, read_write> = access %arr1, %x_181
-                %109:i32 = load %d
-                %110:ptr<function, i32, read_write> = access %arr0, %109
-                %111:i32 = load %110
-                store %108, %111
-                continue %b23
+                %106:i32 = load %limiter3
+                %107:i32 = add %106, 1i
+                store %limiter3, %107
+                %108:i32 = load %d
+                %x_181:i32 = let %108
+                %110:ptr<function, i32, read_write> = access %arr1, %x_181
+                %111:i32 = load %d
+                %112:ptr<function, i32, read_write> = access %arr0, %111
+                %113:i32 = load %112
+                store %110, %113
+                continue  # -> $B23
               }
-              %b23 = block {  # continuing
-                %112:i32 = load %d
-                %113:i32 = add %112, 1i
-                store %d, %113
-                next_iteration %b22
+              $B23: {  # continuing
+                %114:i32 = load %d
+                %115:i32 = add %114, 1i
+                store %d, %115
+                next_iteration  # -> $B22
               }
             }
-            continue %b21
+            continue  # -> $B21
           }
-          %b21 = block {  # continuing
-            %114:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-            %x_189:i32 = load %114
-            %116:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-            %x_191:i32 = load %116
-            %118:bool = eq %x_189, %x_191
-            %119:bool = eq %118, false
-            break_if %119 %b20
+          $B21: {  # continuing
+            %116:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+            %117:i32 = load %116
+            %x_189:i32 = let %117
+            %119:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+            %120:i32 = load %119
+            %x_191:i32 = let %120
+            %122:bool = eq %x_189, %x_191
+            %123:bool = eq %122, false
+            break_if %123  # -> [t: exit_loop loop_5, f: $B20]
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %120:i32 = load %a
-        %121:i32 = add %120, 1i
-        store %a, %121
-        next_iteration %b3
+      $B4: {  # continuing
+        %124:i32 = load %a
+        %125:i32 = add %124, 1i
+        store %a, %125
+        next_iteration  # -> $B3
       }
     }
-    %122:ptr<uniform, i32, read> = access %x_6, 0u, 11i, 0u
-    %123:i32 = load %122
-    %124:ptr<uniform, i32, read> = access %x_6, 0u, 12i, 0u
-    %125:i32 = load %124
     %126:ptr<uniform, i32, read> = access %x_6, 0u, 11i, 0u
     %127:i32 = load %126
-    %128:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
+    %128:ptr<uniform, i32, read> = access %x_6, 0u, 12i, 0u
     %129:i32 = load %128
-    %130:ptr<uniform, i32, read> = access %x_6, 0u, 6i, 0u
+    %130:ptr<uniform, i32, read> = access %x_6, 0u, 11i, 0u
     %131:i32 = load %130
-    %132:ptr<uniform, i32, read> = access %x_6, 0u, 7i, 0u
+    %132:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
     %133:i32 = load %132
-    %134:ptr<uniform, i32, read> = access %x_6, 0u, 8i, 0u
+    %134:ptr<uniform, i32, read> = access %x_6, 0u, 6i, 0u
     %135:i32 = load %134
-    %136:ptr<uniform, i32, read> = access %x_6, 0u, 9i, 0u
+    %136:ptr<uniform, i32, read> = access %x_6, 0u, 7i, 0u
     %137:i32 = load %136
-    %138:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %138:ptr<uniform, i32, read> = access %x_6, 0u, 8i, 0u
     %139:i32 = load %138
-    %140:ptr<uniform, i32, read> = access %x_6, 0u, 10i, 0u
+    %140:ptr<uniform, i32, read> = access %x_6, 0u, 9i, 0u
     %141:i32 = load %140
-    %142:array<i32, 10> = construct %123, %125, %127, %129, %131, %133, %135, %137, %139, %141
-    store %ref0, %142
-    %143:ptr<uniform, i32, read> = access %x_6, 0u, 11i, 0u
-    %144:i32 = load %143
-    %145:ptr<uniform, i32, read> = access %x_6, 0u, 12i, 0u
-    %146:i32 = load %145
+    %142:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %143:i32 = load %142
+    %144:ptr<uniform, i32, read> = access %x_6, 0u, 10i, 0u
+    %145:i32 = load %144
+    %146:array<i32, 10> = construct %127, %129, %131, %133, %135, %137, %139, %141, %143, %145
+    store %ref0, %146
     %147:ptr<uniform, i32, read> = access %x_6, 0u, 11i, 0u
     %148:i32 = load %147
-    %149:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
+    %149:ptr<uniform, i32, read> = access %x_6, 0u, 12i, 0u
     %150:i32 = load %149
-    %151:ptr<uniform, i32, read> = access %x_6, 0u, 6i, 0u
+    %151:ptr<uniform, i32, read> = access %x_6, 0u, 11i, 0u
     %152:i32 = load %151
-    %153:ptr<uniform, i32, read> = access %x_6, 0u, 13i, 0u
+    %153:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
     %154:i32 = load %153
-    %155:ptr<uniform, i32, read> = access %x_6, 0u, 14i, 0u
+    %155:ptr<uniform, i32, read> = access %x_6, 0u, 6i, 0u
     %156:i32 = load %155
-    %157:ptr<uniform, i32, read> = access %x_6, 0u, 11i, 0u
+    %157:ptr<uniform, i32, read> = access %x_6, 0u, 13i, 0u
     %158:i32 = load %157
-    %159:ptr<uniform, i32, read> = access %x_6, 0u, 18i, 0u
+    %159:ptr<uniform, i32, read> = access %x_6, 0u, 14i, 0u
     %160:i32 = load %159
-    %161:ptr<uniform, i32, read> = access %x_6, 0u, 19i, 0u
+    %161:ptr<uniform, i32, read> = access %x_6, 0u, 11i, 0u
     %162:i32 = load %161
-    %163:array<i32, 10> = construct %144, %146, %148, %150, %152, %154, %156, %158, %160, %162
-    store %ref1, %163
-    %164:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %165:i32 = load %164
-    %166:f32 = convert %165
-    %167:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-    %168:i32 = load %167
-    %169:f32 = convert %168
-    %170:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-    %171:i32 = load %170
-    %172:f32 = convert %171
-    %173:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %174:i32 = load %173
-    %175:f32 = convert %174
-    %176:vec4<f32> = construct %166, %169, %172, %175
-    store %x_GLF_color, %176
-    %177:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-    %178:i32 = load %177
-    store %i, %178
-    loop [b: %b27, c: %b28] {  # loop_7
-      %b27 = block {  # body
+    %163:ptr<uniform, i32, read> = access %x_6, 0u, 18i, 0u
+    %164:i32 = load %163
+    %165:ptr<uniform, i32, read> = access %x_6, 0u, 19i, 0u
+    %166:i32 = load %165
+    %167:array<i32, 10> = construct %148, %150, %152, %154, %156, %158, %160, %162, %164, %166
+    store %ref1, %167
+    %168:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %169:i32 = load %168
+    %170:f32 = convert %169
+    %171:f32 = let %170
+    %172:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+    %173:i32 = load %172
+    %174:f32 = convert %173
+    %175:f32 = let %174
+    %176:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+    %177:i32 = load %176
+    %178:f32 = convert %177
+    %179:f32 = let %178
+    %180:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %181:i32 = load %180
+    %182:f32 = convert %181
+    %183:vec4<f32> = construct %171, %175, %179, %182
+    store %x_GLF_color, %183
+    %184:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+    %185:i32 = load %184
+    store %i, %185
+    loop [b: $B27, c: $B28] {  # loop_7
+      $B27: {  # body
         %x_277:ptr<function, bool, read_write> = var
         %x_278:ptr<function, bool, read_write> = var
-        %181:i32 = load %i
-        %182:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %183:i32 = load %182
-        %184:bool = lt %181, %183
-        if %184 [t: %b29, f: %b30] {  # if_8
-          %b29 = block {  # true
+        %188:i32 = load %i
+        %189:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %190:i32 = load %189
+        %191:bool = lt %188, %190
+        if %191 [t: $B29, f: $B30] {  # if_8
+          $B29: {  # true
             exit_if  # if_8
           }
-          %b30 = block {  # false
+          $B30: {  # false
             exit_loop  # loop_7
           }
         }
-        %185:i32 = load %i
-        %186:ptr<function, i32, read_write> = access %arr0, %185
-        %187:i32 = load %186
-        %188:i32 = load %i
-        %189:ptr<function, i32, read_write> = access %ref0, %188
-        %190:i32 = load %189
-        %x_267:bool = neq %187, %190
+        %192:i32 = load %i
+        %193:ptr<function, i32, read_write> = access %arr0, %192
+        %194:i32 = load %193
+        %195:i32 = load %i
+        %196:ptr<function, i32, read_write> = access %ref0, %195
+        %197:i32 = load %196
+        %198:bool = neq %194, %197
+        %x_267:bool = let %198
         store %x_278, %x_267
-        %192:bool = eq %x_267, false
-        if %192 [t: %b31] {  # if_9
-          %b31 = block {  # true
-            %193:i32 = load %i
-            %194:ptr<function, i32, read_write> = access %arr1, %193
-            %195:i32 = load %194
-            %196:i32 = load %i
-            %197:ptr<function, i32, read_write> = access %ref1, %196
-            %198:i32 = load %197
-            %199:bool = neq %195, %198
-            store %x_277, %199
-            %200:bool = load %x_277
-            store %x_278, %200
+        %200:bool = eq %x_267, false
+        if %200 [t: $B31] {  # if_9
+          $B31: {  # true
+            %201:i32 = load %i
+            %202:ptr<function, i32, read_write> = access %arr1, %201
+            %203:i32 = load %202
+            %204:i32 = load %i
+            %205:ptr<function, i32, read_write> = access %ref1, %204
+            %206:i32 = load %205
+            %207:bool = neq %203, %206
+            store %x_277, %207
+            %208:bool = load %x_277
+            store %x_278, %208
             exit_if  # if_9
           }
         }
-        %201:bool = load %x_278
-        if %201 [t: %b32] {  # if_10
-          %b32 = block {  # true
-            %202:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-            %203:i32 = load %202
-            %204:f32 = convert %203
-            %205:vec4<f32> = construct %204
-            store %x_GLF_color, %205
+        %209:bool = load %x_278
+        if %209 [t: $B32] {  # if_10
+          $B32: {  # true
+            %210:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+            %211:i32 = load %210
+            %212:f32 = convert %211
+            %213:vec4<f32> = construct %212
+            store %x_GLF_color, %213
             exit_if  # if_10
           }
         }
-        continue %b28
+        continue  # -> $B28
       }
-      %b28 = block {  # continuing
-        %206:i32 = load %i
-        %207:i32 = add %206, 1i
-        store %i, %207
-        next_iteration %b27
+      $B28: {  # continuing
+        %214:i32 = load %i
+        %215:i32 = add %214, 1i
+        store %i, %215
+        next_iteration  # -> $B27
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b33 {
-  %b33 = block {
-    %209:void = call %main_1
-    %210:vec4<f32> = load %x_GLF_color
-    %211:main_out = construct %210
-    ret %211
+%tint_symbol = @fragment func():main_out {
+  $B33: {
+    %217:void = call %main_1
+    %218:vec4<f32> = load %x_GLF_color
+    %219:main_out = construct %218
+    ret %219
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-array-copies-loops-with-limiters/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-array-copies-loops-with-limiters/0-opt.wgsl.expected.ir.msl
index fa567da..e491eec 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-array-copies-loops-with-limiters/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-array-copies-loops-with-limiters/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -16,14 +16,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_19:ptr<uniform, buf1, read> = var @binding_point(0, 1)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %arr0:ptr<function, array<i32, 10>, read_write> = var
     %arr1:ptr<function, array<i32, 10>, read_write> = var
     %a:ptr<function, i32, read_write> = var
@@ -37,357 +37,451 @@
     %ref1:ptr<function, array<i32, 10>, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %17:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-    %x_59:i32 = load %17
-    %19:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_61:i32 = load %19
-    %21:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
-    %x_63:i32 = load %21
-    %23:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
-    %x_65:i32 = load %23
-    %25:ptr<uniform, i32, read> = access %x_6, 0u, 6i, 0u
-    %x_67:i32 = load %25
-    %27:ptr<uniform, i32, read> = access %x_6, 0u, 7i, 0u
-    %x_69:i32 = load %27
-    %29:ptr<uniform, i32, read> = access %x_6, 0u, 8i, 0u
-    %x_71:i32 = load %29
-    %31:ptr<uniform, i32, read> = access %x_6, 0u, 9i, 0u
-    %x_73:i32 = load %31
-    %33:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_75:i32 = load %33
-    %35:ptr<uniform, i32, read> = access %x_6, 0u, 10i, 0u
-    %x_77:i32 = load %35
-    %37:array<i32, 10> = construct %x_59, %x_61, %x_63, %x_65, %x_67, %x_69, %x_71, %x_73, %x_75, %x_77
-    store %arr0, %37
-    %38:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_80:i32 = load %38
-    %40:ptr<uniform, i32, read> = access %x_6, 0u, 12i, 0u
-    %x_82:i32 = load %40
-    %42:ptr<uniform, i32, read> = access %x_6, 0u, 15i, 0u
-    %x_84:i32 = load %42
-    %44:ptr<uniform, i32, read> = access %x_6, 0u, 16i, 0u
-    %x_86:i32 = load %44
-    %46:ptr<uniform, i32, read> = access %x_6, 0u, 17i, 0u
-    %x_88:i32 = load %46
-    %48:ptr<uniform, i32, read> = access %x_6, 0u, 13i, 0u
-    %x_90:i32 = load %48
-    %50:ptr<uniform, i32, read> = access %x_6, 0u, 14i, 0u
-    %x_92:i32 = load %50
-    %52:ptr<uniform, i32, read> = access %x_6, 0u, 11i, 0u
-    %x_94:i32 = load %52
-    %54:ptr<uniform, i32, read> = access %x_6, 0u, 18i, 0u
-    %x_96:i32 = load %54
-    %56:ptr<uniform, i32, read> = access %x_6, 0u, 19i, 0u
-    %x_98:i32 = load %56
-    %58:array<i32, 10> = construct %x_80, %x_82, %x_84, %x_86, %x_88, %x_90, %x_92, %x_94, %x_96, %x_98
-    store %arr1, %58
-    %59:ptr<uniform, i32, read> = access %x_6, 0u, 8i, 0u
-    %x_101:i32 = load %59
+    %18:i32 = load %17
+    %x_59:i32 = let %18
+    %20:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %21:i32 = load %20
+    %x_61:i32 = let %21
+    %23:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
+    %24:i32 = load %23
+    %x_63:i32 = let %24
+    %26:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
+    %27:i32 = load %26
+    %x_65:i32 = let %27
+    %29:ptr<uniform, i32, read> = access %x_6, 0u, 6i, 0u
+    %30:i32 = load %29
+    %x_67:i32 = let %30
+    %32:ptr<uniform, i32, read> = access %x_6, 0u, 7i, 0u
+    %33:i32 = load %32
+    %x_69:i32 = let %33
+    %35:ptr<uniform, i32, read> = access %x_6, 0u, 8i, 0u
+    %36:i32 = load %35
+    %x_71:i32 = let %36
+    %38:ptr<uniform, i32, read> = access %x_6, 0u, 9i, 0u
+    %39:i32 = load %38
+    %x_73:i32 = let %39
+    %41:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %42:i32 = load %41
+    %x_75:i32 = let %42
+    %44:ptr<uniform, i32, read> = access %x_6, 0u, 10i, 0u
+    %45:i32 = load %44
+    %x_77:i32 = let %45
+    %47:array<i32, 10> = construct %x_59, %x_61, %x_63, %x_65, %x_67, %x_69, %x_71, %x_73, %x_75, %x_77
+    store %arr0, %47
+    %48:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %49:i32 = load %48
+    %x_80:i32 = let %49
+    %51:ptr<uniform, i32, read> = access %x_6, 0u, 12i, 0u
+    %52:i32 = load %51
+    %x_82:i32 = let %52
+    %54:ptr<uniform, i32, read> = access %x_6, 0u, 15i, 0u
+    %55:i32 = load %54
+    %x_84:i32 = let %55
+    %57:ptr<uniform, i32, read> = access %x_6, 0u, 16i, 0u
+    %58:i32 = load %57
+    %x_86:i32 = let %58
+    %60:ptr<uniform, i32, read> = access %x_6, 0u, 17i, 0u
+    %61:i32 = load %60
+    %x_88:i32 = let %61
+    %63:ptr<uniform, i32, read> = access %x_6, 0u, 13i, 0u
+    %64:i32 = load %63
+    %x_90:i32 = let %64
+    %66:ptr<uniform, i32, read> = access %x_6, 0u, 14i, 0u
+    %67:i32 = load %66
+    %x_92:i32 = let %67
+    %69:ptr<uniform, i32, read> = access %x_6, 0u, 11i, 0u
+    %70:i32 = load %69
+    %x_94:i32 = let %70
+    %72:ptr<uniform, i32, read> = access %x_6, 0u, 18i, 0u
+    %73:i32 = load %72
+    %x_96:i32 = let %73
+    %75:ptr<uniform, i32, read> = access %x_6, 0u, 19i, 0u
+    %76:i32 = load %75
+    %x_98:i32 = let %76
+    %78:array<i32, 10> = construct %x_80, %x_82, %x_84, %x_86, %x_88, %x_90, %x_92, %x_94, %x_96, %x_98
+    store %arr1, %78
+    %79:ptr<uniform, i32, read> = access %x_6, 0u, 8i, 0u
+    %80:i32 = load %79
+    %x_101:i32 = let %80
     store %a, %x_101
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_106:i32 = load %a
-        %62:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_108:i32 = load %62
-        %64:bool = lt %x_106, %x_108
-        if %64 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %82:i32 = load %a
+        %x_106:i32 = let %82
+        %84:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %85:i32 = load %84
+        %x_108:i32 = let %85
+        %87:bool = lt %x_106, %x_108
+        if %87 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %65:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-        %x_112:i32 = load %65
+        %88:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+        %89:i32 = load %88
+        %x_112:i32 = let %89
         store %limiter0, %x_112
-        loop [b: %b7, c: %b8] {  # loop_2
-          %b7 = block {  # body
-            %x_117:i32 = load %limiter0
-            %68:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
-            %x_119:i32 = load %68
-            %70:bool = lt %x_117, %x_119
-            if %70 [t: %b9, f: %b10] {  # if_2
-              %b9 = block {  # true
+        loop [b: $B7, c: $B8] {  # loop_2
+          $B7: {  # body
+            %91:i32 = load %limiter0
+            %x_117:i32 = let %91
+            %93:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
+            %94:i32 = load %93
+            %x_119:i32 = let %94
+            %96:bool = lt %x_117, %x_119
+            if %96 [t: $B9, f: $B10] {  # if_2
+              $B9: {  # true
                 exit_if  # if_2
               }
-              %b10 = block {  # false
+              $B10: {  # false
                 exit_loop  # loop_2
               }
             }
-            %x_122:i32 = load %limiter0
-            %72:i32 = add %x_122, 1i
-            store %limiter0, %72
-            %73:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-            %x_125:i32 = load %73
+            %97:i32 = load %limiter0
+            %x_122:i32 = let %97
+            %99:i32 = add %x_122, 1i
+            store %limiter0, %99
+            %100:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+            %101:i32 = load %100
+            %x_125:i32 = let %101
             store %limiter1, %x_125
-            %75:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-            %x_127:i32 = load %75
+            %103:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+            %104:i32 = load %103
+            %x_127:i32 = let %104
             store %b, %x_127
-            loop [b: %b11, c: %b12] {  # loop_3
-              %b11 = block {  # body
-                %x_132:i32 = load %b
-                %78:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-                %x_134:i32 = load %78
-                %80:bool = lt %x_132, %x_134
-                if %80 [t: %b13, f: %b14] {  # if_3
-                  %b13 = block {  # true
+            loop [b: $B11, c: $B12] {  # loop_3
+              $B11: {  # body
+                %106:i32 = load %b
+                %x_132:i32 = let %106
+                %108:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+                %109:i32 = load %108
+                %x_134:i32 = let %109
+                %111:bool = lt %x_132, %x_134
+                if %111 [t: $B13, f: $B14] {  # if_3
+                  $B13: {  # true
                     exit_if  # if_3
                   }
-                  %b14 = block {  # false
+                  $B14: {  # false
                     exit_loop  # loop_3
                   }
                 }
-                %x_137:i32 = load %limiter1
-                %82:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
-                %x_139:i32 = load %82
-                %84:bool = gt %x_137, %x_139
-                if %84 [t: %b15] {  # if_4
-                  %b15 = block {  # true
+                %112:i32 = load %limiter1
+                %x_137:i32 = let %112
+                %114:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
+                %115:i32 = load %114
+                %x_139:i32 = let %115
+                %117:bool = gt %x_137, %x_139
+                if %117 [t: $B15] {  # if_4
+                  $B15: {  # true
                     exit_loop  # loop_3
                   }
                 }
-                %x_143:i32 = load %limiter1
-                %86:i32 = add %x_143, 1i
-                store %limiter1, %86
-                %x_145:i32 = load %b
-                %x_146:i32 = load %a
-                %89:ptr<function, i32, read_write> = access %arr1, %x_146
-                %x_148:i32 = load %89
-                %91:ptr<function, i32, read_write> = access %arr0, %x_145
-                store %91, %x_148
-                continue %b12
+                %118:i32 = load %limiter1
+                %x_143:i32 = let %118
+                %120:i32 = add %x_143, 1i
+                store %limiter1, %120
+                %121:i32 = load %b
+                %x_145:i32 = let %121
+                %123:i32 = load %a
+                %x_146:i32 = let %123
+                %125:ptr<function, i32, read_write> = access %arr1, %x_146
+                %126:i32 = load %125
+                %x_148:i32 = let %126
+                %128:ptr<function, i32, read_write> = access %arr0, %x_145
+                store %128, %x_148
+                continue  # -> $B12
               }
-              %b12 = block {  # continuing
-                %x_150:i32 = load %b
-                %93:i32 = add %x_150, 1i
-                store %b, %93
-                next_iteration %b11
+              $B12: {  # continuing
+                %129:i32 = load %b
+                %x_150:i32 = let %129
+                %131:i32 = add %x_150, 1i
+                store %b, %131
+                next_iteration  # -> $B11
               }
             }
-            continue %b8
+            continue  # -> $B8
           }
-          %b8 = block {  # continuing
-            next_iteration %b7
+          $B8: {  # continuing
+            next_iteration  # -> $B7
           }
         }
         store %limiter2, 0i
-        loop [b: %b16, c: %b17] {  # loop_4
-          %b16 = block {  # body
-            %x_156:i32 = load %limiter2
-            %95:bool = lt %x_156, 5i
-            if %95 [t: %b18, f: %b19] {  # if_5
-              %b18 = block {  # true
+        loop [b: $B16, c: $B17] {  # loop_4
+          $B16: {  # body
+            %132:i32 = load %limiter2
+            %x_156:i32 = let %132
+            %134:bool = lt %x_156, 5i
+            if %134 [t: $B18, f: $B19] {  # if_5
+              $B18: {  # true
                 exit_if  # if_5
               }
-              %b19 = block {  # false
+              $B19: {  # false
                 exit_loop  # loop_4
               }
             }
-            %x_159:i32 = load %limiter2
-            %97:i32 = add %x_159, 1i
-            store %limiter2, %97
-            %98:ptr<function, i32, read_write> = access %arr1, 1i
-            %x_162:i32 = load %98
-            %100:ptr<function, i32, read_write> = access %arr0, 1i
-            store %100, %x_162
-            continue %b17
+            %135:i32 = load %limiter2
+            %x_159:i32 = let %135
+            %137:i32 = add %x_159, 1i
+            store %limiter2, %137
+            %138:ptr<function, i32, read_write> = access %arr1, 1i
+            %139:i32 = load %138
+            %x_162:i32 = let %139
+            %141:ptr<function, i32, read_write> = access %arr0, 1i
+            store %141, %x_162
+            continue  # -> $B17
           }
-          %b17 = block {  # continuing
-            next_iteration %b16
+          $B17: {  # continuing
+            next_iteration  # -> $B16
           }
         }
-        loop [b: %b20, c: %b21] {  # loop_5
-          %b20 = block {  # body
+        loop [b: $B20, c: $B21] {  # loop_5
+          $B20: {  # body
             store %limiter3, 0i
             store %d, 0i
-            loop [b: %b22, c: %b23] {  # loop_6
-              %b22 = block {  # body
-                %x_172:i32 = load %d
-                %102:bool = lt %x_172, 10i
-                if %102 [t: %b24, f: %b25] {  # if_6
-                  %b24 = block {  # true
+            loop [b: $B22, c: $B23] {  # loop_6
+              $B22: {  # body
+                %142:i32 = load %d
+                %x_172:i32 = let %142
+                %144:bool = lt %x_172, 10i
+                if %144 [t: $B24, f: $B25] {  # if_6
+                  $B24: {  # true
                     exit_if  # if_6
                   }
-                  %b25 = block {  # false
+                  $B25: {  # false
                     exit_loop  # loop_6
                   }
                 }
-                %x_175:i32 = load %limiter3
-                %104:bool = gt %x_175, 4i
-                if %104 [t: %b26] {  # if_7
-                  %b26 = block {  # true
+                %145:i32 = load %limiter3
+                %x_175:i32 = let %145
+                %147:bool = gt %x_175, 4i
+                if %147 [t: $B26] {  # if_7
+                  $B26: {  # true
                     exit_loop  # loop_6
                   }
                 }
-                %x_179:i32 = load %limiter3
-                %106:i32 = add %x_179, 1i
-                store %limiter3, %106
-                %x_181:i32 = load %d
-                %x_182:i32 = load %d
-                %109:ptr<function, i32, read_write> = access %arr0, %x_182
-                %x_184:i32 = load %109
-                %111:ptr<function, i32, read_write> = access %arr1, %x_181
-                store %111, %x_184
-                continue %b23
+                %148:i32 = load %limiter3
+                %x_179:i32 = let %148
+                %150:i32 = add %x_179, 1i
+                store %limiter3, %150
+                %151:i32 = load %d
+                %x_181:i32 = let %151
+                %153:i32 = load %d
+                %x_182:i32 = let %153
+                %155:ptr<function, i32, read_write> = access %arr0, %x_182
+                %156:i32 = load %155
+                %x_184:i32 = let %156
+                %158:ptr<function, i32, read_write> = access %arr1, %x_181
+                store %158, %x_184
+                continue  # -> $B23
               }
-              %b23 = block {  # continuing
-                %x_186:i32 = load %d
-                %113:i32 = add %x_186, 1i
-                store %d, %113
-                next_iteration %b22
+              $B23: {  # continuing
+                %159:i32 = load %d
+                %x_186:i32 = let %159
+                %161:i32 = add %x_186, 1i
+                store %d, %161
+                next_iteration  # -> $B22
               }
             }
-            continue %b21
+            continue  # -> $B21
           }
-          %b21 = block {  # continuing
-            %114:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-            %x_189:i32 = load %114
-            %116:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-            %x_191:i32 = load %116
-            %118:bool = eq %x_189, %x_191
-            %119:bool = eq %118, false
-            break_if %119 %b20
+          $B21: {  # continuing
+            %162:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+            %163:i32 = load %162
+            %x_189:i32 = let %163
+            %165:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+            %166:i32 = load %165
+            %x_191:i32 = let %166
+            %168:bool = eq %x_189, %x_191
+            %169:bool = eq %168, false
+            break_if %169  # -> [t: exit_loop loop_5, f: $B20]
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_193:i32 = load %a
-        %121:i32 = add %x_193, 1i
-        store %a, %121
-        next_iteration %b3
+      $B4: {  # continuing
+        %170:i32 = load %a
+        %x_193:i32 = let %170
+        %172:i32 = add %x_193, 1i
+        store %a, %172
+        next_iteration  # -> $B3
       }
     }
-    %122:ptr<uniform, i32, read> = access %x_6, 0u, 11i, 0u
-    %x_196:i32 = load %122
-    %124:ptr<uniform, i32, read> = access %x_6, 0u, 12i, 0u
-    %x_198:i32 = load %124
-    %126:ptr<uniform, i32, read> = access %x_6, 0u, 11i, 0u
-    %x_200:i32 = load %126
-    %128:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
-    %x_202:i32 = load %128
-    %130:ptr<uniform, i32, read> = access %x_6, 0u, 6i, 0u
-    %x_204:i32 = load %130
-    %132:ptr<uniform, i32, read> = access %x_6, 0u, 7i, 0u
-    %x_206:i32 = load %132
-    %134:ptr<uniform, i32, read> = access %x_6, 0u, 8i, 0u
-    %x_208:i32 = load %134
-    %136:ptr<uniform, i32, read> = access %x_6, 0u, 9i, 0u
-    %x_210:i32 = load %136
-    %138:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_212:i32 = load %138
-    %140:ptr<uniform, i32, read> = access %x_6, 0u, 10i, 0u
-    %x_214:i32 = load %140
-    %142:array<i32, 10> = construct %x_196, %x_198, %x_200, %x_202, %x_204, %x_206, %x_208, %x_210, %x_212, %x_214
-    store %ref0, %142
-    %143:ptr<uniform, i32, read> = access %x_6, 0u, 11i, 0u
-    %x_217:i32 = load %143
-    %145:ptr<uniform, i32, read> = access %x_6, 0u, 12i, 0u
-    %x_219:i32 = load %145
-    %147:ptr<uniform, i32, read> = access %x_6, 0u, 11i, 0u
-    %x_221:i32 = load %147
-    %149:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
-    %x_223:i32 = load %149
-    %151:ptr<uniform, i32, read> = access %x_6, 0u, 6i, 0u
-    %x_225:i32 = load %151
-    %153:ptr<uniform, i32, read> = access %x_6, 0u, 13i, 0u
-    %x_227:i32 = load %153
-    %155:ptr<uniform, i32, read> = access %x_6, 0u, 14i, 0u
-    %x_229:i32 = load %155
-    %157:ptr<uniform, i32, read> = access %x_6, 0u, 11i, 0u
-    %x_231:i32 = load %157
-    %159:ptr<uniform, i32, read> = access %x_6, 0u, 18i, 0u
-    %x_233:i32 = load %159
-    %161:ptr<uniform, i32, read> = access %x_6, 0u, 19i, 0u
-    %x_235:i32 = load %161
-    %163:array<i32, 10> = construct %x_217, %x_219, %x_221, %x_223, %x_225, %x_227, %x_229, %x_231, %x_233, %x_235
-    store %ref1, %163
-    %164:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_238:i32 = load %164
-    %166:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-    %x_241:i32 = load %166
-    %168:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-    %x_244:i32 = load %168
-    %170:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_247:i32 = load %170
-    %172:f32 = convert %x_238
-    %173:f32 = convert %x_241
-    %174:f32 = convert %x_244
-    %175:f32 = convert %x_247
-    %176:vec4<f32> = construct %172, %173, %174, %175
-    store %x_GLF_color, %176
-    %177:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-    %x_251:i32 = load %177
+    %173:ptr<uniform, i32, read> = access %x_6, 0u, 11i, 0u
+    %174:i32 = load %173
+    %x_196:i32 = let %174
+    %176:ptr<uniform, i32, read> = access %x_6, 0u, 12i, 0u
+    %177:i32 = load %176
+    %x_198:i32 = let %177
+    %179:ptr<uniform, i32, read> = access %x_6, 0u, 11i, 0u
+    %180:i32 = load %179
+    %x_200:i32 = let %180
+    %182:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
+    %183:i32 = load %182
+    %x_202:i32 = let %183
+    %185:ptr<uniform, i32, read> = access %x_6, 0u, 6i, 0u
+    %186:i32 = load %185
+    %x_204:i32 = let %186
+    %188:ptr<uniform, i32, read> = access %x_6, 0u, 7i, 0u
+    %189:i32 = load %188
+    %x_206:i32 = let %189
+    %191:ptr<uniform, i32, read> = access %x_6, 0u, 8i, 0u
+    %192:i32 = load %191
+    %x_208:i32 = let %192
+    %194:ptr<uniform, i32, read> = access %x_6, 0u, 9i, 0u
+    %195:i32 = load %194
+    %x_210:i32 = let %195
+    %197:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %198:i32 = load %197
+    %x_212:i32 = let %198
+    %200:ptr<uniform, i32, read> = access %x_6, 0u, 10i, 0u
+    %201:i32 = load %200
+    %x_214:i32 = let %201
+    %203:array<i32, 10> = construct %x_196, %x_198, %x_200, %x_202, %x_204, %x_206, %x_208, %x_210, %x_212, %x_214
+    store %ref0, %203
+    %204:ptr<uniform, i32, read> = access %x_6, 0u, 11i, 0u
+    %205:i32 = load %204
+    %x_217:i32 = let %205
+    %207:ptr<uniform, i32, read> = access %x_6, 0u, 12i, 0u
+    %208:i32 = load %207
+    %x_219:i32 = let %208
+    %210:ptr<uniform, i32, read> = access %x_6, 0u, 11i, 0u
+    %211:i32 = load %210
+    %x_221:i32 = let %211
+    %213:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
+    %214:i32 = load %213
+    %x_223:i32 = let %214
+    %216:ptr<uniform, i32, read> = access %x_6, 0u, 6i, 0u
+    %217:i32 = load %216
+    %x_225:i32 = let %217
+    %219:ptr<uniform, i32, read> = access %x_6, 0u, 13i, 0u
+    %220:i32 = load %219
+    %x_227:i32 = let %220
+    %222:ptr<uniform, i32, read> = access %x_6, 0u, 14i, 0u
+    %223:i32 = load %222
+    %x_229:i32 = let %223
+    %225:ptr<uniform, i32, read> = access %x_6, 0u, 11i, 0u
+    %226:i32 = load %225
+    %x_231:i32 = let %226
+    %228:ptr<uniform, i32, read> = access %x_6, 0u, 18i, 0u
+    %229:i32 = load %228
+    %x_233:i32 = let %229
+    %231:ptr<uniform, i32, read> = access %x_6, 0u, 19i, 0u
+    %232:i32 = load %231
+    %x_235:i32 = let %232
+    %234:array<i32, 10> = construct %x_217, %x_219, %x_221, %x_223, %x_225, %x_227, %x_229, %x_231, %x_233, %x_235
+    store %ref1, %234
+    %235:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %236:i32 = load %235
+    %x_238:i32 = let %236
+    %238:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+    %239:i32 = load %238
+    %x_241:i32 = let %239
+    %241:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+    %242:i32 = load %241
+    %x_244:i32 = let %242
+    %244:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %245:i32 = load %244
+    %x_247:i32 = let %245
+    %247:f32 = convert %x_238
+    %248:f32 = let %247
+    %249:f32 = convert %x_241
+    %250:f32 = let %249
+    %251:f32 = convert %x_244
+    %252:f32 = let %251
+    %253:f32 = convert %x_247
+    %254:vec4<f32> = construct %248, %250, %252, %253
+    store %x_GLF_color, %254
+    %255:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+    %256:i32 = load %255
+    %x_251:i32 = let %256
     store %i, %x_251
-    loop [b: %b27, c: %b28] {  # loop_7
-      %b27 = block {  # body
+    loop [b: $B27, c: $B28] {  # loop_7
+      $B27: {  # body
         %x_277:ptr<function, bool, read_write> = var
         %x_278_phi:ptr<function, bool, read_write> = var
-        %x_256:i32 = load %i
-        %182:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_258:i32 = load %182
-        %184:bool = lt %x_256, %x_258
-        if %184 [t: %b29, f: %b30] {  # if_8
-          %b29 = block {  # true
+        %260:i32 = load %i
+        %x_256:i32 = let %260
+        %262:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %263:i32 = load %262
+        %x_258:i32 = let %263
+        %265:bool = lt %x_256, %x_258
+        if %265 [t: $B29, f: $B30] {  # if_8
+          $B29: {  # true
             exit_if  # if_8
           }
-          %b30 = block {  # false
+          $B30: {  # false
             exit_loop  # loop_7
           }
         }
-        %x_261:i32 = load %i
-        %186:ptr<function, i32, read_write> = access %arr0, %x_261
-        %x_263:i32 = load %186
-        %x_264:i32 = load %i
-        %189:ptr<function, i32, read_write> = access %ref0, %x_264
-        %x_266:i32 = load %189
-        %x_267:bool = neq %x_263, %x_266
+        %266:i32 = load %i
+        %x_261:i32 = let %266
+        %268:ptr<function, i32, read_write> = access %arr0, %x_261
+        %269:i32 = load %268
+        %x_263:i32 = let %269
+        %271:i32 = load %i
+        %x_264:i32 = let %271
+        %273:ptr<function, i32, read_write> = access %ref0, %x_264
+        %274:i32 = load %273
+        %x_266:i32 = let %274
+        %276:bool = neq %x_263, %x_266
+        %x_267:bool = let %276
         store %x_278_phi, %x_267
-        %192:bool = eq %x_267, false
-        if %192 [t: %b31] {  # if_9
-          %b31 = block {  # true
-            %x_271:i32 = load %i
-            %194:ptr<function, i32, read_write> = access %arr1, %x_271
-            %x_273:i32 = load %194
-            %x_274:i32 = load %i
-            %197:ptr<function, i32, read_write> = access %ref1, %x_274
-            %x_276:i32 = load %197
-            %199:bool = neq %x_273, %x_276
-            store %x_277, %199
-            %200:bool = load %x_277
-            store %x_278_phi, %200
+        %278:bool = eq %x_267, false
+        if %278 [t: $B31] {  # if_9
+          $B31: {  # true
+            %279:i32 = load %i
+            %x_271:i32 = let %279
+            %281:ptr<function, i32, read_write> = access %arr1, %x_271
+            %282:i32 = load %281
+            %x_273:i32 = let %282
+            %284:i32 = load %i
+            %x_274:i32 = let %284
+            %286:ptr<function, i32, read_write> = access %ref1, %x_274
+            %287:i32 = load %286
+            %x_276:i32 = let %287
+            %289:bool = neq %x_273, %x_276
+            store %x_277, %289
+            %290:bool = load %x_277
+            store %x_278_phi, %290
             exit_if  # if_9
           }
         }
-        %x_278:bool = load %x_278_phi
-        if %x_278 [t: %b32] {  # if_10
-          %b32 = block {  # true
-            %202:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-            %x_282:i32 = load %202
-            %x_283:f32 = convert %x_282
-            %205:vec4<f32> = construct %x_283, %x_283, %x_283, %x_283
-            store %x_GLF_color, %205
+        %291:bool = load %x_278_phi
+        %x_278:bool = let %291
+        if %x_278 [t: $B32] {  # if_10
+          $B32: {  # true
+            %293:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+            %294:i32 = load %293
+            %x_282:i32 = let %294
+            %296:f32 = convert %x_282
+            %x_283:f32 = let %296
+            %298:vec4<f32> = construct %x_283, %x_283, %x_283, %x_283
+            store %x_GLF_color, %298
             exit_if  # if_10
           }
         }
-        continue %b28
+        continue  # -> $B28
       }
-      %b28 = block {  # continuing
-        %x_285:i32 = load %i
-        %207:i32 = add %x_285, 1i
-        store %i, %207
-        next_iteration %b27
+      $B28: {  # continuing
+        %299:i32 = load %i
+        %x_285:i32 = let %299
+        %301:i32 = add %x_285, 1i
+        store %i, %301
+        next_iteration  # -> $B27
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b33 {
-  %b33 = block {
-    %209:void = call %main_1
-    %210:vec4<f32> = load %x_GLF_color
-    %211:main_out = construct %210
-    ret %211
+%tint_symbol = @fragment func():main_out {
+  $B33: {
+    %303:void = call %main_1
+    %304:vec4<f32> = load %x_GLF_color
+    %305:main_out = construct %304
+    ret %305
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-asin-undefined-smoothstep/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-asin-undefined-smoothstep/0-opt.spvasm.expected.ir.msl
index a28f9da..992fba1 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-asin-undefined-smoothstep/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-asin-undefined-smoothstep/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -12,13 +12,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %v1:ptr<function, vec4<f32>, read_write> = var
     %v2:ptr<function, vec4<f32>, read_write> = var
     %v3:ptr<function, vec4<f32>, read_write> = var
@@ -57,97 +57,98 @@
     %34:f32 = load_vector_element %v4, 0u
     %35:ptr<uniform, f32, read> = access %x_6, 0u, 4i, 0u
     %36:f32 = load %35
-    %x_62:bool = gt %34, %36
+    %37:bool = gt %34, %36
+    %x_62:bool = let %37
     store %x_70, %x_62
-    if %x_62 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %38:f32 = load_vector_element %v4, 0u
-        %39:ptr<uniform, f32, read> = access %x_6, 0u, 5i, 0u
-        %40:f32 = load %39
-        %41:bool = lt %38, %40
-        store %x_69, %41
-        %42:bool = load %x_69
-        store %x_70, %42
+    if %x_62 [t: $B3] {  # if_1
+      $B3: {  # true
+        %39:f32 = load_vector_element %v4, 0u
+        %40:ptr<uniform, f32, read> = access %x_6, 0u, 5i, 0u
+        %41:f32 = load %40
+        %42:bool = lt %39, %41
+        store %x_69, %42
+        %43:bool = load %x_69
+        store %x_70, %43
         exit_if  # if_1
       }
     }
-    %43:bool = load %x_70
-    store %x_78, %43
     %44:bool = load %x_70
-    if %44 [t: %b4] {  # if_2
-      %b4 = block {  # true
-        %45:f32 = load_vector_element %v4, 1u
-        %46:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
-        %47:f32 = load %46
-        %48:bool = gt %45, %47
-        store %x_77, %48
-        %49:bool = load %x_77
-        store %x_78, %49
+    store %x_78, %44
+    %45:bool = load %x_70
+    if %45 [t: $B4] {  # if_2
+      $B4: {  # true
+        %46:f32 = load_vector_element %v4, 1u
+        %47:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
+        %48:f32 = load %47
+        %49:bool = gt %46, %48
+        store %x_77, %49
+        %50:bool = load %x_77
+        store %x_78, %50
         exit_if  # if_2
       }
     }
-    %50:bool = load %x_78
-    store %x_86, %50
     %51:bool = load %x_78
-    if %51 [t: %b5] {  # if_3
-      %b5 = block {  # true
-        %52:f32 = load_vector_element %v4, 1u
-        %53:ptr<uniform, f32, read> = access %x_6, 0u, 6i, 0u
-        %54:f32 = load %53
-        %55:bool = lt %52, %54
-        store %x_85, %55
-        %56:bool = load %x_85
-        store %x_86, %56
+    store %x_86, %51
+    %52:bool = load %x_78
+    if %52 [t: $B5] {  # if_3
+      $B5: {  # true
+        %53:f32 = load_vector_element %v4, 1u
+        %54:ptr<uniform, f32, read> = access %x_6, 0u, 6i, 0u
+        %55:f32 = load %54
+        %56:bool = lt %53, %55
+        store %x_85, %56
+        %57:bool = load %x_85
+        store %x_86, %57
         exit_if  # if_3
       }
     }
-    %57:bool = load %x_86
-    store %x_94, %57
     %58:bool = load %x_86
-    if %58 [t: %b6] {  # if_4
-      %b6 = block {  # true
-        %59:f32 = load_vector_element %v4, 3u
-        %60:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-        %61:f32 = load %60
-        %62:bool = eq %59, %61
-        store %x_93, %62
-        %63:bool = load %x_93
-        store %x_94, %63
+    store %x_94, %58
+    %59:bool = load %x_86
+    if %59 [t: $B6] {  # if_4
+      $B6: {  # true
+        %60:f32 = load_vector_element %v4, 3u
+        %61:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+        %62:f32 = load %61
+        %63:bool = eq %60, %62
+        store %x_93, %63
+        %64:bool = load %x_93
+        store %x_94, %64
         exit_if  # if_4
       }
     }
-    %64:bool = load %x_94
-    if %64 [t: %b7, f: %b8] {  # if_5
-      %b7 = block {  # true
-        %65:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-        %66:f32 = load %65
-        %67:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-        %68:f32 = load %67
-        %69:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-        %70:f32 = load %69
-        %71:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-        %72:f32 = load %71
-        %73:vec4<f32> = construct %66, %68, %70, %72
-        store %x_GLF_color, %73
+    %65:bool = load %x_94
+    if %65 [t: $B7, f: $B8] {  # if_5
+      $B7: {  # true
+        %66:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+        %67:f32 = load %66
+        %68:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+        %69:f32 = load %68
+        %70:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+        %71:f32 = load %70
+        %72:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+        %73:f32 = load %72
+        %74:vec4<f32> = construct %67, %69, %71, %73
+        store %x_GLF_color, %74
         exit_if  # if_5
       }
-      %b8 = block {  # false
-        %74:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-        %75:f32 = load %74
-        %76:vec4<f32> = construct %75
-        store %x_GLF_color, %76
+      $B8: {  # false
+        %75:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+        %76:f32 = load %75
+        %77:vec4<f32> = construct %76
+        store %x_GLF_color, %77
         exit_if  # if_5
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b9 {
-  %b9 = block {
-    %78:void = call %main_1
-    %79:vec4<f32> = load %x_GLF_color
-    %80:main_out = construct %79
-    ret %80
+%tint_symbol = @fragment func():main_out {
+  $B9: {
+    %79:void = call %main_1
+    %80:vec4<f32> = load %x_GLF_color
+    %81:main_out = construct %80
+    ret %81
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-asin-undefined-smoothstep/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-asin-undefined-smoothstep/0-opt.wgsl.expected.ir.msl
index 2cb4587..e8cc271 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-asin-undefined-smoothstep/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-asin-undefined-smoothstep/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -12,13 +12,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %v1:ptr<function, vec4<f32>, read_write> = var
     %v2:ptr<function, vec4<f32>, read_write> = var
     %v3:ptr<function, vec4<f32>, read_write> = var
@@ -32,123 +32,152 @@
     %x_86_phi:ptr<function, bool, read_write> = var
     %x_94_phi:ptr<function, bool, read_write> = var
     %16:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
-    %x_41:f32 = load %16
-    %18:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
-    %x_43:f32 = load %18
-    %20:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_45:f32 = load %20
-    %22:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
-    %x_47:f32 = load %22
-    %24:vec4<f32> = construct %x_41, %x_43, %x_45, %x_47
-    store %v1, %24
+    %17:f32 = load %16
+    %x_41:f32 = let %17
+    %19:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
+    %20:f32 = load %19
+    %x_43:f32 = let %20
+    %22:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %23:f32 = load %22
+    %x_45:f32 = let %23
+    %25:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
+    %26:f32 = load %25
+    %x_47:f32 = let %26
+    %28:vec4<f32> = construct %x_41, %x_43, %x_45, %x_47
+    store %v1, %28
     store %v2, vec4<f32>(1.57079637050628662109f, 1.11976957321166992188f, 1.0f, 0.92729520797729492188f)
-    %25:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_50:f32 = load %25
-    %27:vec4<f32> = construct %x_50, %x_50, %x_50, %x_50
-    store %v3, %27
-    %x_52:vec4<f32> = load %v1
-    %x_53:vec4<f32> = load %v2
-    %x_54:vec4<f32> = load %v3
-    %31:vec4<f32> = smoothstep %x_52, %x_53, %x_54
-    store %v4, %31
-    %x_56:vec4<f32> = load %v4
-    %33:f32 = access %x_56, 0u
-    %34:f32 = access %x_56, 1u
-    %35:f32 = access %x_56, 3u
-    %36:f32 = access %x_56, 0u
-    %37:vec4<f32> = construct %33, %34, %35, %36
-    store %x_GLF_color, %37
-    %x_59:f32 = load_vector_element %v4, 0u
-    %39:ptr<uniform, f32, read> = access %x_6, 0u, 4i, 0u
-    %x_61:f32 = load %39
-    %x_62:bool = gt %x_59, %x_61
+    %29:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %30:f32 = load %29
+    %x_50:f32 = let %30
+    %32:vec4<f32> = construct %x_50, %x_50, %x_50, %x_50
+    store %v3, %32
+    %33:vec4<f32> = load %v1
+    %x_52:vec4<f32> = let %33
+    %35:vec4<f32> = load %v2
+    %x_53:vec4<f32> = let %35
+    %37:vec4<f32> = load %v3
+    %x_54:vec4<f32> = let %37
+    %39:vec4<f32> = smoothstep %x_52, %x_53, %x_54
+    store %v4, %39
+    %40:vec4<f32> = load %v4
+    %x_56:vec4<f32> = let %40
+    %42:f32 = access %x_56, 0u
+    %43:f32 = access %x_56, 1u
+    %44:f32 = access %x_56, 3u
+    %45:f32 = access %x_56, 0u
+    %46:vec4<f32> = construct %42, %43, %44, %45
+    store %x_GLF_color, %46
+    %47:f32 = load_vector_element %v4, 0u
+    %x_59:f32 = let %47
+    %49:ptr<uniform, f32, read> = access %x_6, 0u, 4i, 0u
+    %50:f32 = load %49
+    %x_61:f32 = let %50
+    %52:bool = gt %x_59, %x_61
+    %x_62:bool = let %52
     store %x_70_phi, %x_62
-    if %x_62 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %x_66:f32 = load_vector_element %v4, 0u
-        %43:ptr<uniform, f32, read> = access %x_6, 0u, 5i, 0u
-        %x_68:f32 = load %43
-        %45:bool = lt %x_66, %x_68
-        store %x_69, %45
-        %46:bool = load %x_69
-        store %x_70_phi, %46
+    if %x_62 [t: $B3] {  # if_1
+      $B3: {  # true
+        %54:f32 = load_vector_element %v4, 0u
+        %x_66:f32 = let %54
+        %56:ptr<uniform, f32, read> = access %x_6, 0u, 5i, 0u
+        %57:f32 = load %56
+        %x_68:f32 = let %57
+        %59:bool = lt %x_66, %x_68
+        store %x_69, %59
+        %60:bool = load %x_69
+        store %x_70_phi, %60
         exit_if  # if_1
       }
     }
-    %x_70:bool = load %x_70_phi
+    %61:bool = load %x_70_phi
+    %x_70:bool = let %61
     store %x_78_phi, %x_70
-    if %x_70 [t: %b4] {  # if_2
-      %b4 = block {  # true
-        %x_74:f32 = load_vector_element %v4, 1u
-        %49:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
-        %x_76:f32 = load %49
-        %51:bool = gt %x_74, %x_76
-        store %x_77, %51
-        %52:bool = load %x_77
-        store %x_78_phi, %52
+    if %x_70 [t: $B4] {  # if_2
+      $B4: {  # true
+        %63:f32 = load_vector_element %v4, 1u
+        %x_74:f32 = let %63
+        %65:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
+        %66:f32 = load %65
+        %x_76:f32 = let %66
+        %68:bool = gt %x_74, %x_76
+        store %x_77, %68
+        %69:bool = load %x_77
+        store %x_78_phi, %69
         exit_if  # if_2
       }
     }
-    %x_78:bool = load %x_78_phi
+    %70:bool = load %x_78_phi
+    %x_78:bool = let %70
     store %x_86_phi, %x_78
-    if %x_78 [t: %b5] {  # if_3
-      %b5 = block {  # true
-        %x_82:f32 = load_vector_element %v4, 1u
-        %55:ptr<uniform, f32, read> = access %x_6, 0u, 6i, 0u
-        %x_84:f32 = load %55
-        %57:bool = lt %x_82, %x_84
-        store %x_85, %57
-        %58:bool = load %x_85
-        store %x_86_phi, %58
+    if %x_78 [t: $B5] {  # if_3
+      $B5: {  # true
+        %72:f32 = load_vector_element %v4, 1u
+        %x_82:f32 = let %72
+        %74:ptr<uniform, f32, read> = access %x_6, 0u, 6i, 0u
+        %75:f32 = load %74
+        %x_84:f32 = let %75
+        %77:bool = lt %x_82, %x_84
+        store %x_85, %77
+        %78:bool = load %x_85
+        store %x_86_phi, %78
         exit_if  # if_3
       }
     }
-    %x_86:bool = load %x_86_phi
+    %79:bool = load %x_86_phi
+    %x_86:bool = let %79
     store %x_94_phi, %x_86
-    if %x_86 [t: %b6] {  # if_4
-      %b6 = block {  # true
-        %x_90:f32 = load_vector_element %v4, 3u
-        %61:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-        %x_92:f32 = load %61
-        %63:bool = eq %x_90, %x_92
-        store %x_93, %63
-        %64:bool = load %x_93
-        store %x_94_phi, %64
+    if %x_86 [t: $B6] {  # if_4
+      $B6: {  # true
+        %81:f32 = load_vector_element %v4, 3u
+        %x_90:f32 = let %81
+        %83:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+        %84:f32 = load %83
+        %x_92:f32 = let %84
+        %86:bool = eq %x_90, %x_92
+        store %x_93, %86
+        %87:bool = load %x_93
+        store %x_94_phi, %87
         exit_if  # if_4
       }
     }
-    %x_94:bool = load %x_94_phi
-    if %x_94 [t: %b7, f: %b8] {  # if_5
-      %b7 = block {  # true
-        %66:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-        %x_99:f32 = load %66
-        %68:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-        %x_101:f32 = load %68
-        %70:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-        %x_103:f32 = load %70
-        %72:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-        %x_105:f32 = load %72
-        %74:vec4<f32> = construct %x_99, %x_101, %x_103, %x_105
-        store %x_GLF_color, %74
+    %88:bool = load %x_94_phi
+    %x_94:bool = let %88
+    if %x_94 [t: $B7, f: $B8] {  # if_5
+      $B7: {  # true
+        %90:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+        %91:f32 = load %90
+        %x_99:f32 = let %91
+        %93:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+        %94:f32 = load %93
+        %x_101:f32 = let %94
+        %96:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+        %97:f32 = load %96
+        %x_103:f32 = let %97
+        %99:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+        %100:f32 = load %99
+        %x_105:f32 = let %100
+        %102:vec4<f32> = construct %x_99, %x_101, %x_103, %x_105
+        store %x_GLF_color, %102
         exit_if  # if_5
       }
-      %b8 = block {  # false
-        %75:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-        %x_108:f32 = load %75
-        %77:vec4<f32> = construct %x_108, %x_108, %x_108, %x_108
-        store %x_GLF_color, %77
+      $B8: {  # false
+        %103:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+        %104:f32 = load %103
+        %x_108:f32 = let %104
+        %106:vec4<f32> = construct %x_108, %x_108, %x_108, %x_108
+        store %x_GLF_color, %106
         exit_if  # if_5
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b9 {
-  %b9 = block {
-    %79:void = call %main_1
-    %80:vec4<f32> = load %x_GLF_color
-    %81:main_out = construct %80
-    ret %81
+%tint_symbol = @fragment func():main_out {
+  $B9: {
+    %108:void = call %main_1
+    %109:vec4<f32> = load %x_GLF_color
+    %110:main_out = construct %109
+    ret %110
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-atan-trunc-vec4/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-atan-trunc-vec4/0-opt.spvasm.expected.ir.msl
index d106aa1..b6b6c05 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-atan-trunc-vec4/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-atan-trunc-vec4/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,14 +20,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_9:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %v:ptr<function, vec4<f32>, read_write> = var
     %f:ptr<function, f32, read_write> = var
     %x_56:ptr<function, bool, read_write> = var
@@ -35,75 +35,81 @@
     %9:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
     %10:i32 = load %9
     %11:f32 = convert %10
-    %12:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %13:i32 = load %12
-    %14:f32 = convert %13
-    %15:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %16:i32 = load %15
-    %17:f32 = convert %16
-    %18:vec4<f32> = construct %11, %14, -621.59600830078125f, %17
-    store %v, %18
-    %19:vec4<f32> = load %v
-    %20:vec4<f32> = trunc %19
-    %21:vec4<f32> = atan %20
-    %22:f32 = access %21, 2u
-    store %f, %22
-    %23:f32 = load %f
-    %24:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
-    %25:f32 = load %24
-    %26:f32 = negation %25
-    %x_49:bool = gt %23, %26
+    %12:f32 = let %11
+    %13:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %14:i32 = load %13
+    %15:f32 = convert %14
+    %16:f32 = let %15
+    %17:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %18:i32 = load %17
+    %19:f32 = convert %18
+    %20:vec4<f32> = construct %12, %16, -621.59600830078125f, %19
+    store %v, %20
+    %21:vec4<f32> = load %v
+    %22:vec4<f32> = trunc %21
+    %23:vec4<f32> = atan %22
+    %24:f32 = access %23, 2u
+    store %f, %24
+    %25:f32 = load %f
+    %26:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
+    %27:f32 = load %26
+    %28:f32 = negation %27
+    %29:bool = gt %25, %28
+    %x_49:bool = let %29
     store %x_57, %x_49
-    if %x_49 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %28:f32 = load %f
-        %29:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
-        %30:f32 = load %29
-        %31:f32 = negation %30
-        %32:bool = lt %28, %31
-        store %x_56, %32
-        %33:bool = load %x_56
-        store %x_57, %33
+    if %x_49 [t: $B3] {  # if_1
+      $B3: {  # true
+        %31:f32 = load %f
+        %32:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
+        %33:f32 = load %32
+        %34:f32 = negation %33
+        %35:bool = lt %31, %34
+        store %x_56, %35
+        %36:bool = load %x_56
+        store %x_57, %36
         exit_if  # if_1
       }
     }
-    %34:bool = load %x_57
-    if %34 [t: %b4, f: %b5] {  # if_2
-      %b4 = block {  # true
-        %35:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %36:i32 = load %35
-        %37:f32 = convert %36
-        %38:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %37:bool = load %x_57
+    if %37 [t: $B4, f: $B5] {  # if_2
+      $B4: {  # true
+        %38:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
         %39:i32 = load %38
         %40:f32 = convert %39
-        %41:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %42:i32 = load %41
-        %43:f32 = convert %42
-        %44:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %45:i32 = load %44
-        %46:f32 = convert %45
-        %47:vec4<f32> = construct %37, %40, %43, %46
-        store %x_GLF_color, %47
+        %41:f32 = let %40
+        %42:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %43:i32 = load %42
+        %44:f32 = convert %43
+        %45:f32 = let %44
+        %46:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %47:i32 = load %46
+        %48:f32 = convert %47
+        %49:f32 = let %48
+        %50:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %51:i32 = load %50
+        %52:f32 = convert %51
+        %53:vec4<f32> = construct %41, %45, %49, %52
+        store %x_GLF_color, %53
         exit_if  # if_2
       }
-      %b5 = block {  # false
-        %48:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %49:i32 = load %48
-        %50:f32 = convert %49
-        %51:vec4<f32> = construct %50
-        store %x_GLF_color, %51
+      $B5: {  # false
+        %54:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %55:i32 = load %54
+        %56:f32 = convert %55
+        %57:vec4<f32> = construct %56
+        store %x_GLF_color, %57
         exit_if  # if_2
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b6 {
-  %b6 = block {
-    %53:void = call %main_1
-    %54:vec4<f32> = load %x_GLF_color
-    %55:main_out = construct %54
-    ret %55
+%tint_symbol = @fragment func():main_out {
+  $B6: {
+    %59:void = call %main_1
+    %60:vec4<f32> = load %x_GLF_color
+    %61:main_out = construct %60
+    ret %61
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-atan-trunc-vec4/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-atan-trunc-vec4/0-opt.wgsl.expected.ir.msl
index 3d057c0..e9f9284 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-atan-trunc-vec4/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-atan-trunc-vec4/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,90 +20,111 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_9:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %v:ptr<function, vec4<f32>, read_write> = var
     %f:ptr<function, f32, read_write> = var
     %x_56:ptr<function, bool, read_write> = var
     %x_57_phi:ptr<function, bool, read_write> = var
     %9:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_32:i32 = load %9
-    %11:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_35:i32 = load %11
-    %13:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_38:i32 = load %13
-    %15:f32 = convert %x_32
-    %16:f32 = convert %x_35
-    %17:f32 = convert %x_38
-    %18:vec4<f32> = construct %15, %16, -621.59600830078125f, %17
-    store %v, %18
-    %x_41:vec4<f32> = load %v
-    %20:vec4<f32> = trunc %x_41
-    %21:vec4<f32> = atan %20
-    %22:f32 = access %21, 2u
-    store %f, %22
-    %x_45:f32 = load %f
-    %24:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
-    %x_47:f32 = load %24
-    %26:f32 = negation %x_47
-    %x_49:bool = gt %x_45, %26
+    %10:i32 = load %9
+    %x_32:i32 = let %10
+    %12:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %13:i32 = load %12
+    %x_35:i32 = let %13
+    %15:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %16:i32 = load %15
+    %x_38:i32 = let %16
+    %18:f32 = convert %x_32
+    %19:f32 = let %18
+    %20:f32 = convert %x_35
+    %21:f32 = let %20
+    %22:f32 = convert %x_38
+    %23:vec4<f32> = construct %19, %21, -621.59600830078125f, %22
+    store %v, %23
+    %24:vec4<f32> = load %v
+    %x_41:vec4<f32> = let %24
+    %26:vec4<f32> = trunc %x_41
+    %27:vec4<f32> = atan %26
+    %28:f32 = access %27, 2u
+    store %f, %28
+    %29:f32 = load %f
+    %x_45:f32 = let %29
+    %31:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
+    %32:f32 = load %31
+    %x_47:f32 = let %32
+    %34:f32 = negation %x_47
+    %35:bool = gt %x_45, %34
+    %x_49:bool = let %35
     store %x_57_phi, %x_49
-    if %x_49 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %x_52:f32 = load %f
-        %29:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
-        %x_54:f32 = load %29
-        %31:f32 = negation %x_54
-        %32:bool = lt %x_52, %31
-        store %x_56, %32
-        %33:bool = load %x_56
-        store %x_57_phi, %33
+    if %x_49 [t: $B3] {  # if_1
+      $B3: {  # true
+        %37:f32 = load %f
+        %x_52:f32 = let %37
+        %39:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
+        %40:f32 = load %39
+        %x_54:f32 = let %40
+        %42:f32 = negation %x_54
+        %43:bool = lt %x_52, %42
+        store %x_56, %43
+        %44:bool = load %x_56
+        store %x_57_phi, %44
         exit_if  # if_1
       }
     }
-    %x_57:bool = load %x_57_phi
-    if %x_57 [t: %b4, f: %b5] {  # if_2
-      %b4 = block {  # true
-        %35:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_62:i32 = load %35
-        %37:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_65:i32 = load %37
-        %39:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_68:i32 = load %39
-        %41:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_71:i32 = load %41
-        %43:f32 = convert %x_62
-        %44:f32 = convert %x_65
-        %45:f32 = convert %x_68
-        %46:f32 = convert %x_71
-        %47:vec4<f32> = construct %43, %44, %45, %46
-        store %x_GLF_color, %47
+    %45:bool = load %x_57_phi
+    %x_57:bool = let %45
+    if %x_57 [t: $B4, f: $B5] {  # if_2
+      $B4: {  # true
+        %47:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %48:i32 = load %47
+        %x_62:i32 = let %48
+        %50:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %51:i32 = load %50
+        %x_65:i32 = let %51
+        %53:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %54:i32 = load %53
+        %x_68:i32 = let %54
+        %56:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %57:i32 = load %56
+        %x_71:i32 = let %57
+        %59:f32 = convert %x_62
+        %60:f32 = let %59
+        %61:f32 = convert %x_65
+        %62:f32 = let %61
+        %63:f32 = convert %x_68
+        %64:f32 = let %63
+        %65:f32 = convert %x_71
+        %66:vec4<f32> = construct %60, %62, %64, %65
+        store %x_GLF_color, %66
         exit_if  # if_2
       }
-      %b5 = block {  # false
-        %48:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_75:i32 = load %48
-        %x_76:f32 = convert %x_75
-        %51:vec4<f32> = construct %x_76, %x_76, %x_76, %x_76
-        store %x_GLF_color, %51
+      $B5: {  # false
+        %67:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %68:i32 = load %67
+        %x_75:i32 = let %68
+        %70:f32 = convert %x_75
+        %x_76:f32 = let %70
+        %72:vec4<f32> = construct %x_76, %x_76, %x_76, %x_76
+        store %x_GLF_color, %72
         exit_if  # if_2
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b6 {
-  %b6 = block {
-    %53:void = call %main_1
-    %54:vec4<f32> = load %x_GLF_color
-    %55:main_out = construct %54
-    ret %55
+%tint_symbol = @fragment func():main_out {
+  $B6: {
+    %74:void = call %main_1
+    %75:vec4<f32> = load %x_GLF_color
+    %76:main_out = construct %75
+    ret %76
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-basic-block-discard-in-function/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-basic-block-discard-in-function/0-opt.spvasm.expected.ir.msl
index 2a45dc4..774d05d 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-basic-block-discard-in-function/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-basic-block-discard-in-function/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   zero:i32 @offset(0)
 }
 
@@ -8,72 +8,76 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_9:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%func_i1_ = func(%x:ptr<function, i32, read_write>):i32 -> %b2 {
-  %b2 = block {
-    %5:i32 = load %x
-    %6:bool = eq %5, 10i
-    if %6 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        discard
+%func_i1_ = func(%x:ptr<function, i32, read_write>):i32 {
+  $B2: {
+    %6:i32 = load %x
+    %7:bool = eq %6, 10i
+    if %7 [t: $B3] {  # if_1
+      $B3: {  # true
+        store %continue_execution, false
         exit_if  # if_1
       }
     }
-    %x_49:i32 = load %x
+    %8:i32 = load %x
+    %x_49:i32 = let %8
     ret %x_49
   }
 }
-%main_1 = func():void -> %b4 {
-  %b4 = block {
+%main_1 = func():void {
+  $B4: {
     %a:ptr<function, i32, read_write> = var
     %b:ptr<function, i32, read_write> = var
     %param:ptr<function, i32, read_write> = var
     %x_35:ptr<function, i32, read_write> = var
     %x_37:ptr<function, i32, read_write> = var
     store %a, 0i
-    %14:ptr<uniform, i32, read> = access %x_9, 0u
-    %x_33:i32 = load %14
+    %16:ptr<uniform, i32, read> = access %x_9, 0u
+    %17:i32 = load %16
+    %x_33:i32 = let %17
     store %b, %x_33
     store %x_35, %x_33
-    loop [b: %b5, c: %b6] {  # loop_1
-      %b5 = block {  # body
-        %16:i32 = load %x_35
-        store %param, %16
-        %17:i32 = call %func_i1_, %param
-        store %x_37, %17
-        %18:i32 = load %x_37
-        store %a, %18
+    loop [b: $B5, c: $B6] {  # loop_1
+      $B5: {  # body
         %19:i32 = load %x_35
-        %x_36:i32 = add %19, 1i
+        store %param, %19
+        %20:i32 = call %func_i1_, %param
+        store %x_37, %20
+        %21:i32 = load %x_37
+        store %a, %21
+        %22:i32 = load %x_35
+        %23:i32 = add %22, 1i
+        %x_36:i32 = let %23
         store %b, %x_36
         store %x_35, %x_36
-        %21:bool = lt %x_36, 4i
-        if %21 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
+        %25:bool = lt %x_36, 4i
+        if %25 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
             exit_if  # if_2
           }
-          %b8 = block {  # false
+          $B8: {  # false
             exit_loop  # loop_1
           }
         }
-        continue %b6
+        continue  # -> $B6
       }
-      %b6 = block {  # continuing
-        next_iteration %b5
+      $B6: {  # continuing
+        next_iteration  # -> $B5
       }
     }
-    %22:i32 = load %x_37
-    %23:bool = eq %22, 3i
-    if %23 [t: %b9, f: %b10] {  # if_3
-      %b9 = block {  # true
+    %26:i32 = load %x_37
+    %27:bool = eq %26, 3i
+    if %27 [t: $B9, f: $B10] {  # if_3
+      $B9: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_3
       }
-      %b10 = block {  # false
+      $B10: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_3
       }
@@ -81,12 +85,19 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b11 {
-  %b11 = block {
-    %25:void = call %main_1
-    %26:vec4<f32> = load %x_GLF_color
-    %27:main_out = construct %26
-    ret %27
+%tint_symbol = @fragment func():main_out {
+  $B11: {
+    %29:void = call %main_1
+    %30:vec4<f32> = load %x_GLF_color
+    %31:main_out = construct %30
+    %32:bool = load %continue_execution
+    %33:bool = eq %32, false
+    if %33 [t: $B12] {  # if_4
+      $B12: {  # true
+        terminate_invocation
+      }
+    }
+    ret %31
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-basic-block-discard-in-function/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-basic-block-discard-in-function/0-opt.wgsl.expected.ir.msl
index 95960d1..c991ad9 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-basic-block-discard-in-function/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-basic-block-discard-in-function/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   zero:i32 @offset(0)
 }
 
@@ -8,71 +8,77 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_9:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%func_i1_ = func(%x:ptr<function, i32, read_write>):i32 -> %b2 {
-  %b2 = block {
-    %x_45:i32 = load %x
-    %6:bool = eq %x_45, 10i
-    if %6 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        discard
+%func_i1_ = func(%x:ptr<function, i32, read_write>):i32 {
+  $B2: {
+    %6:i32 = load %x
+    %x_45:i32 = let %6
+    %8:bool = eq %x_45, 10i
+    if %8 [t: $B3] {  # if_1
+      $B3: {  # true
+        store %continue_execution, false
         exit_if  # if_1
       }
     }
-    %x_49:i32 = load %x
+    %9:i32 = load %x
+    %x_49:i32 = let %9
     ret %x_49
   }
 }
-%main_1 = func():void -> %b4 {
-  %b4 = block {
+%main_1 = func():void {
+  $B4: {
     %a:ptr<function, i32, read_write> = var
     %b:ptr<function, i32, read_write> = var
     %param:ptr<function, i32, read_write> = var
     %x_37:ptr<function, i32, read_write> = var
     %x_35_phi:ptr<function, i32, read_write> = var
     store %a, 0i
-    %14:ptr<uniform, i32, read> = access %x_9, 0u
-    %x_33:i32 = load %14
+    %17:ptr<uniform, i32, read> = access %x_9, 0u
+    %18:i32 = load %17
+    %x_33:i32 = let %18
     store %b, %x_33
     store %x_35_phi, %x_33
-    loop [b: %b5, c: %b6] {  # loop_1
-      %b5 = block {  # body
-        %x_35:i32 = load %x_35_phi
+    loop [b: $B5, c: $B6] {  # loop_1
+      $B5: {  # body
+        %20:i32 = load %x_35_phi
+        %x_35:i32 = let %20
         store %param, %x_35
-        %17:i32 = call %func_i1_, %param
-        store %x_37, %17
-        %18:i32 = load %x_37
-        store %a, %18
-        %x_36:i32 = add %x_35, 1i
+        %22:i32 = call %func_i1_, %param
+        store %x_37, %22
+        %23:i32 = load %x_37
+        store %a, %23
+        %24:i32 = add %x_35, 1i
+        %x_36:i32 = let %24
         store %b, %x_36
         store %x_35_phi, %x_36
-        %20:bool = lt %x_36, 4i
-        if %20 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
+        %26:bool = lt %x_36, 4i
+        if %26 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
             exit_if  # if_2
           }
-          %b8 = block {  # false
+          $B8: {  # false
             exit_loop  # loop_1
           }
         }
-        continue %b6
+        continue  # -> $B6
       }
-      %b6 = block {  # continuing
-        next_iteration %b5
+      $B6: {  # continuing
+        next_iteration  # -> $B5
       }
     }
-    %21:i32 = load %x_37
-    %22:bool = eq %21, 3i
-    if %22 [t: %b9, f: %b10] {  # if_3
-      %b9 = block {  # true
+    %27:i32 = load %x_37
+    %28:bool = eq %27, 3i
+    if %28 [t: $B9, f: $B10] {  # if_3
+      $B9: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_3
       }
-      %b10 = block {  # false
+      $B10: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_3
       }
@@ -80,12 +86,19 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b11 {
-  %b11 = block {
-    %24:void = call %main_1
-    %25:vec4<f32> = load %x_GLF_color
-    %26:main_out = construct %25
-    ret %26
+%tint_symbol = @fragment func():main_out {
+  $B11: {
+    %30:void = call %main_1
+    %31:vec4<f32> = load %x_GLF_color
+    %32:main_out = construct %31
+    %33:bool = load %continue_execution
+    %34:bool = eq %33, false
+    if %34 [t: $B12] {  # if_4
+      $B12: {  # true
+        terminate_invocation
+      }
+    }
+    ret %32
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-bitcount/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-bitcount/0-opt.spvasm.expected.ir.msl
index e0d0933..c0df4e0 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-bitcount/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-bitcount/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,15 +20,15 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_8:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_11:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%f1_ = func():i32 -> %b2 {
-  %b2 = block {
+%f1_ = func():i32 {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     store %a, 256i
@@ -36,8 +36,8 @@
     %9:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
     %10:f32 = load %9
     %11:bool = gt %8, %10
-    if %11 [t: %b3] {  # if_1
-      %b3 = block {  # true
+    if %11 [t: $B3] {  # if_1
+      $B3: {  # true
         %12:i32 = load %a
         %13:i32 = add %12, 1i
         store %a, %13
@@ -51,63 +51,69 @@
     %17:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
     %18:i32 = load %17
     %19:bool = lt %16, %18
-    if %19 [t: %b4] {  # if_2
-      %b4 = block {  # true
+    if %19 [t: $B4] {  # if_2
+      $B4: {  # true
         %20:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
-        %x_82:i32 = load %20
+        %21:i32 = load %20
+        %x_82:i32 = let %21
         ret %x_82
       }
     }
-    %x_83:i32 = load %i
+    %23:i32 = load %i
+    %x_83:i32 = let %23
     ret %x_83
   }
 }
-%main_1 = func():void -> %b5 {
-  %b5 = block {
+%main_1 = func():void {
+  $B5: {
     %a_1:ptr<function, i32, read_write> = var
-    %x_38:i32 = call %f1_
+    %27:i32 = call %f1_
+    %x_38:i32 = let %27
     store %a_1, %x_38
-    %26:i32 = load %a_1
-    %27:ptr<uniform, i32, read> = access %x_11, 0u, 2i, 0u
-    %28:i32 = load %27
-    %29:bool = eq %26, %28
-    if %29 [t: %b6, f: %b7] {  # if_3
-      %b6 = block {  # true
-        %30:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
-        %31:i32 = load %30
-        %32:f32 = convert %31
-        %33:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
+    %29:i32 = load %a_1
+    %30:ptr<uniform, i32, read> = access %x_11, 0u, 2i, 0u
+    %31:i32 = load %30
+    %32:bool = eq %29, %31
+    if %32 [t: $B6, f: $B7] {  # if_3
+      $B6: {  # true
+        %33:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
         %34:i32 = load %33
         %35:f32 = convert %34
-        %36:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
-        %37:i32 = load %36
-        %38:f32 = convert %37
-        %39:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
-        %40:i32 = load %39
-        %41:f32 = convert %40
-        %42:vec4<f32> = construct %32, %35, %38, %41
-        store %x_GLF_color, %42
+        %36:f32 = let %35
+        %37:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
+        %38:i32 = load %37
+        %39:f32 = convert %38
+        %40:f32 = let %39
+        %41:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
+        %42:i32 = load %41
+        %43:f32 = convert %42
+        %44:f32 = let %43
+        %45:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
+        %46:i32 = load %45
+        %47:f32 = convert %46
+        %48:vec4<f32> = construct %36, %40, %44, %47
+        store %x_GLF_color, %48
         exit_if  # if_3
       }
-      %b7 = block {  # false
-        %43:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
-        %44:i32 = load %43
-        %45:f32 = convert %44
-        %46:vec4<f32> = construct %45
-        store %x_GLF_color, %46
+      $B7: {  # false
+        %49:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
+        %50:i32 = load %49
+        %51:f32 = convert %50
+        %52:vec4<f32> = construct %51
+        store %x_GLF_color, %52
         exit_if  # if_3
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b8 {
-  %b8 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B8: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %49:void = call %main_1
-    %50:vec4<f32> = load %x_GLF_color
-    %51:main_out = construct %50
-    ret %51
+    %55:void = call %main_1
+    %56:vec4<f32> = load %x_GLF_color
+    %57:main_out = construct %56
+    ret %57
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-bitcount/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-bitcount/0-opt.wgsl.expected.ir.msl
index 7100815..dcb7d6b 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-bitcount/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-bitcount/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,94 +20,114 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_8:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_11:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%f1_ = func():i32 -> %b2 {
-  %b2 = block {
+%f1_ = func():i32 {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     store %a, 256i
-    %x_65:f32 = load_vector_element %gl_FragCoord, 1u
-    %9:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-    %x_67:f32 = load %9
-    %11:bool = gt %x_65, %x_67
-    if %11 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %x_71:i32 = load %a
-        %13:i32 = add %x_71, 1i
-        store %a, %13
+    %8:f32 = load_vector_element %gl_FragCoord, 1u
+    %x_65:f32 = let %8
+    %10:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+    %11:f32 = load %10
+    %x_67:f32 = let %11
+    %13:bool = gt %x_65, %x_67
+    if %13 [t: $B3] {  # if_1
+      $B3: {  # true
+        %14:i32 = load %a
+        %x_71:i32 = let %14
+        %16:i32 = add %x_71, 1i
+        store %a, %16
         exit_if  # if_1
       }
     }
-    %x_73:i32 = load %a
-    %15:i32 = countOneBits %x_73
-    store %i, %15
-    %x_75:i32 = load %i
-    %17:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
-    %x_77:i32 = load %17
-    %19:bool = lt %x_75, %x_77
-    if %19 [t: %b4] {  # if_2
-      %b4 = block {  # true
-        %20:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
-        %x_82:i32 = load %20
+    %17:i32 = load %a
+    %x_73:i32 = let %17
+    %19:i32 = countOneBits %x_73
+    store %i, %19
+    %20:i32 = load %i
+    %x_75:i32 = let %20
+    %22:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
+    %23:i32 = load %22
+    %x_77:i32 = let %23
+    %25:bool = lt %x_75, %x_77
+    if %25 [t: $B4] {  # if_2
+      $B4: {  # true
+        %26:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
+        %27:i32 = load %26
+        %x_82:i32 = let %27
         ret %x_82
       }
     }
-    %x_83:i32 = load %i
+    %29:i32 = load %i
+    %x_83:i32 = let %29
     ret %x_83
   }
 }
-%main_1 = func():void -> %b5 {
-  %b5 = block {
+%main_1 = func():void {
+  $B5: {
     %a_1:ptr<function, i32, read_write> = var
-    %x_38:i32 = call %f1_
+    %33:i32 = call %f1_
+    %x_38:i32 = let %33
     store %a_1, %x_38
-    %x_39:i32 = load %a_1
-    %27:ptr<uniform, i32, read> = access %x_11, 0u, 2i, 0u
-    %x_41:i32 = load %27
-    %29:bool = eq %x_39, %x_41
-    if %29 [t: %b6, f: %b7] {  # if_3
-      %b6 = block {  # true
-        %30:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
-        %x_47:i32 = load %30
-        %32:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
-        %x_50:i32 = load %32
-        %34:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
-        %x_53:i32 = load %34
-        %36:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
-        %x_56:i32 = load %36
-        %38:f32 = convert %x_47
-        %39:f32 = convert %x_50
-        %40:f32 = convert %x_53
-        %41:f32 = convert %x_56
-        %42:vec4<f32> = construct %38, %39, %40, %41
-        store %x_GLF_color, %42
+    %35:i32 = load %a_1
+    %x_39:i32 = let %35
+    %37:ptr<uniform, i32, read> = access %x_11, 0u, 2i, 0u
+    %38:i32 = load %37
+    %x_41:i32 = let %38
+    %40:bool = eq %x_39, %x_41
+    if %40 [t: $B6, f: $B7] {  # if_3
+      $B6: {  # true
+        %41:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
+        %42:i32 = load %41
+        %x_47:i32 = let %42
+        %44:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
+        %45:i32 = load %44
+        %x_50:i32 = let %45
+        %47:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
+        %48:i32 = load %47
+        %x_53:i32 = let %48
+        %50:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
+        %51:i32 = load %50
+        %x_56:i32 = let %51
+        %53:f32 = convert %x_47
+        %54:f32 = let %53
+        %55:f32 = convert %x_50
+        %56:f32 = let %55
+        %57:f32 = convert %x_53
+        %58:f32 = let %57
+        %59:f32 = convert %x_56
+        %60:vec4<f32> = construct %54, %56, %58, %59
+        store %x_GLF_color, %60
         exit_if  # if_3
       }
-      %b7 = block {  # false
-        %43:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
-        %x_60:i32 = load %43
-        %x_61:f32 = convert %x_60
-        %46:vec4<f32> = construct %x_61, %x_61, %x_61, %x_61
-        store %x_GLF_color, %46
+      $B7: {  # false
+        %61:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
+        %62:i32 = load %61
+        %x_60:i32 = let %62
+        %64:f32 = convert %x_60
+        %x_61:f32 = let %64
+        %66:vec4<f32> = construct %x_61, %x_61, %x_61, %x_61
+        store %x_GLF_color, %66
         exit_if  # if_3
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b8 {
-  %b8 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B8: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %49:void = call %main_1
-    %50:vec4<f32> = load %x_GLF_color
-    %51:main_out = construct %50
-    ret %51
+    %69:void = call %main_1
+    %70:vec4<f32> = load %x_GLF_color
+    %71:main_out = construct %70
+    ret %71
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-bitfieldreverse-loop-limit-underflow/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-bitfieldreverse-loop-limit-underflow/0.spvasm.expected.ir.msl
index 8dc4287..f9f3ca5 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-bitfieldreverse-loop-limit-underflow/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-bitfieldreverse-loop-limit-underflow/0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,13 +12,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %x_28:ptr<function, i32, read_write> = var
     %x_31:ptr<function, i32, read_write> = var
     %x_29:ptr<function, i32, read_write> = var
@@ -28,19 +28,19 @@
     %10:i32 = load %9
     store %x_28, %10
     store %x_31, 1i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %x_32:ptr<function, i32, read_write> = var
         %12:i32 = load %x_28
         store %x_42, %12
         %13:i32 = load %x_31
         %14:i32 = sub %x_24, 1i
         %15:bool = lte %13, %14
-        if %15 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %15 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
@@ -51,16 +51,16 @@
         %19:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
         %20:i32 = load %19
         %21:bool = eq %20, 1i
-        if %21 [t: %b7] {  # if_2
-          %b7 = block {  # true
+        if %21 [t: $B7] {  # if_2
+          $B7: {  # true
             %22:i32 = load %x_29
             store %x_42, %22
             exit_loop  # loop_1
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
+      $B4: {  # continuing
         %23:i32 = load %x_31
         %24:i32 = add %23, 1i
         store %x_32, %24
@@ -68,43 +68,45 @@
         store %x_28, %25
         %26:i32 = load %x_32
         store %x_31, %26
-        next_iteration %b3
+        next_iteration  # -> $B3
       }
     }
     %27:i32 = load %x_42
     %28:ptr<uniform, i32, read> = access %x_5, 0u, 2i, 0u
     %29:i32 = load %28
     %30:bool = eq %27, %29
-    if %30 [t: %b8, f: %b9] {  # if_3
-      %b8 = block {  # true
+    if %30 [t: $B8, f: $B9] {  # if_3
+      $B8: {  # true
         %31:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
         %32:i32 = load %31
-        %x_51:f32 = convert %32
-        %34:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
-        %35:i32 = load %34
-        %x_54:f32 = convert %35
-        %37:vec4<f32> = construct %x_51, %x_54, %x_54, %x_51
-        store %x_GLF_color, %37
+        %33:f32 = convert %32
+        %x_51:f32 = let %33
+        %35:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
+        %36:i32 = load %35
+        %37:f32 = convert %36
+        %x_54:f32 = let %37
+        %39:vec4<f32> = construct %x_51, %x_54, %x_54, %x_51
+        store %x_GLF_color, %39
         exit_if  # if_3
       }
-      %b9 = block {  # false
-        %38:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
-        %39:i32 = load %38
-        %40:f32 = convert %39
-        %41:vec4<f32> = construct %40
-        store %x_GLF_color, %41
+      $B9: {  # false
+        %40:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
+        %41:i32 = load %40
+        %42:f32 = convert %41
+        %43:vec4<f32> = construct %42
+        store %x_GLF_color, %43
         exit_if  # if_3
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b10 {
-  %b10 = block {
-    %43:void = call %main_1
-    %44:vec4<f32> = load %x_GLF_color
-    %45:main_out = construct %44
-    ret %45
+%tint_symbol = @fragment func():main_out {
+  $B10: {
+    %45:void = call %main_1
+    %46:vec4<f32> = load %x_GLF_color
+    %47:main_out = construct %46
+    ret %47
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-bitfieldreverse-loop-limit-underflow/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-bitfieldreverse-loop-limit-underflow/0.wgsl.expected.ir.msl
index 354cb39..08eda31 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-bitfieldreverse-loop-limit-underflow/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-bitfieldreverse-loop-limit-underflow/0.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,13 +12,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %x_28:ptr<function, i32, read_write> = var
     %x_29:ptr<function, i32, read_write> = var
     %x_28_phi:ptr<function, i32, read_write> = var
@@ -26,88 +26,100 @@
     %x_42_phi:ptr<function, i32, read_write> = var
     %x_24:i32 = let -2147483648i
     %10:ptr<uniform, i32, read> = access %x_5, 0u, 3i, 0u
-    %x_26:i32 = load %10
+    %11:i32 = load %10
+    %x_26:i32 = let %11
     store %x_28_phi, %x_26
     store %x_31_phi, 1i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %x_32:ptr<function, i32, read_write> = var
-        %13:i32 = load %x_28_phi
-        store %x_28, %13
-        %x_31:i32 = load %x_31_phi
-        %15:i32 = load %x_28
-        store %x_42_phi, %15
-        %16:i32 = sub %x_24, 1i
-        %17:bool = lte %x_31, %16
-        if %17 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %14:i32 = load %x_28_phi
+        store %x_28, %14
+        %15:i32 = load %x_31_phi
+        %x_31:i32 = let %15
+        %17:i32 = load %x_28
+        store %x_42_phi, %17
+        %18:i32 = sub %x_24, 1i
+        %19:bool = lte %x_31, %18
+        if %19 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %18:i32 = load %x_28
-        %19:i32 = bitcast %x_31
-        %20:i32 = add %18, %19
-        %21:i32 = bitcast %20
-        store %x_29, %21
-        %22:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
-        %x_38:i32 = load %22
-        %24:bool = eq %x_38, 1i
-        if %24 [t: %b7] {  # if_2
-          %b7 = block {  # true
-            %25:i32 = load %x_29
-            store %x_42_phi, %25
+        %20:i32 = load %x_28
+        %21:i32 = let %20
+        %22:i32 = bitcast %x_31
+        %23:i32 = add %21, %22
+        %24:i32 = bitcast %23
+        store %x_29, %24
+        %25:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
+        %26:i32 = load %25
+        %x_38:i32 = let %26
+        %28:bool = eq %x_38, 1i
+        if %28 [t: $B7] {  # if_2
+          $B7: {  # true
+            %29:i32 = load %x_29
+            store %x_42_phi, %29
             exit_loop  # loop_1
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %26:i32 = add %x_31, 1i
-        store %x_32, %26
-        %27:i32 = load %x_29
-        store %x_28_phi, %27
-        %28:i32 = load %x_32
-        store %x_31_phi, %28
-        next_iteration %b3
+      $B4: {  # continuing
+        %30:i32 = add %x_31, 1i
+        store %x_32, %30
+        %31:i32 = load %x_29
+        store %x_28_phi, %31
+        %32:i32 = load %x_32
+        store %x_31_phi, %32
+        next_iteration  # -> $B3
       }
     }
-    %x_42:i32 = load %x_42_phi
-    %30:ptr<uniform, i32, read> = access %x_5, 0u, 2i, 0u
-    %x_44:i32 = load %30
-    %32:bool = eq %x_42, %x_44
-    if %32 [t: %b8, f: %b9] {  # if_3
-      %b8 = block {  # true
-        %33:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
-        %x_50:i32 = load %33
-        %x_51:f32 = convert %x_50
-        %36:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
-        %x_53:i32 = load %36
-        %x_54:f32 = convert %x_53
-        %39:vec4<f32> = construct %x_51, %x_54, %x_54, %x_51
-        store %x_GLF_color, %39
+    %33:i32 = load %x_42_phi
+    %x_42:i32 = let %33
+    %35:ptr<uniform, i32, read> = access %x_5, 0u, 2i, 0u
+    %36:i32 = load %35
+    %x_44:i32 = let %36
+    %38:bool = eq %x_42, %x_44
+    if %38 [t: $B8, f: $B9] {  # if_3
+      $B8: {  # true
+        %39:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
+        %40:i32 = load %39
+        %x_50:i32 = let %40
+        %42:f32 = convert %x_50
+        %x_51:f32 = let %42
+        %44:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
+        %45:i32 = load %44
+        %x_53:i32 = let %45
+        %47:f32 = convert %x_53
+        %x_54:f32 = let %47
+        %49:vec4<f32> = construct %x_51, %x_54, %x_54, %x_51
+        store %x_GLF_color, %49
         exit_if  # if_3
       }
-      %b9 = block {  # false
-        %40:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
-        %x_57:i32 = load %40
-        %x_58:f32 = convert %x_57
-        %43:vec4<f32> = construct %x_58, %x_58, %x_58, %x_58
-        store %x_GLF_color, %43
+      $B9: {  # false
+        %50:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
+        %51:i32 = load %50
+        %x_57:i32 = let %51
+        %53:f32 = convert %x_57
+        %x_58:f32 = let %53
+        %55:vec4<f32> = construct %x_58, %x_58, %x_58, %x_58
+        store %x_GLF_color, %55
         exit_if  # if_3
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b10 {
-  %b10 = block {
-    %45:void = call %main_1
-    %46:vec4<f32> = load %x_GLF_color
-    %47:main_out = construct %46
-    ret %47
+%tint_symbol = @fragment func():main_out {
+  $B10: {
+    %57:void = call %main_1
+    %58:vec4<f32> = load %x_GLF_color
+    %59:main_out = construct %58
+    ret %59
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-bitwise-inverse-uniform-condition/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-bitwise-inverse-uniform-condition/0-opt.spvasm.expected.ir.msl
index b37552a..22d5a9d 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-bitwise-inverse-uniform-condition/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-bitwise-inverse-uniform-condition/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf2 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf2 = struct @align(4) {
   zero:f32 @offset(0)
 }
 
@@ -24,15 +24,15 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf2, read> = var @binding_point(0, 2)
   %x_8:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_10:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %x_32:ptr<function, i32, read_write> = var
     %8:ptr<uniform, f32, read> = access %x_6, 0u
@@ -40,14 +40,14 @@
     %10:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
     %11:f32 = load %10
     %12:bool = lt %9, %11
-    if %12 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    if %12 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         %13:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
         %14:i32 = load %13
         store %x_32, %14
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         %15:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
         %16:i32 = load %15
         store %x_32, %16
@@ -63,42 +63,45 @@
     %22:i32 = load %21
     %23:i32 = complement %22
     %24:bool = eq %20, %23
-    if %24 [t: %b5, f: %b6] {  # if_2
-      %b5 = block {  # true
+    if %24 [t: $B5, f: $B6] {  # if_2
+      $B5: {  # true
         %25:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
         %26:i32 = load %25
         %27:f32 = convert %26
-        %28:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %29:i32 = load %28
-        %30:f32 = convert %29
-        %31:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %32:i32 = load %31
-        %33:f32 = convert %32
-        %34:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %35:i32 = load %34
-        %36:f32 = convert %35
-        %37:vec4<f32> = construct %27, %30, %33, %36
-        store %x_GLF_color, %37
+        %28:f32 = let %27
+        %29:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %30:i32 = load %29
+        %31:f32 = convert %30
+        %32:f32 = let %31
+        %33:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %34:i32 = load %33
+        %35:f32 = convert %34
+        %36:f32 = let %35
+        %37:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %38:i32 = load %37
+        %39:f32 = convert %38
+        %40:vec4<f32> = construct %28, %32, %36, %39
+        store %x_GLF_color, %40
         exit_if  # if_2
       }
-      %b6 = block {  # false
-        %38:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %39:i32 = load %38
-        %40:f32 = convert %39
-        %41:vec4<f32> = construct %40
-        store %x_GLF_color, %41
+      $B6: {  # false
+        %41:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %42:i32 = load %41
+        %43:f32 = convert %42
+        %44:vec4<f32> = construct %43
+        store %x_GLF_color, %44
         exit_if  # if_2
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b7 {
-  %b7 = block {
-    %43:void = call %main_1
-    %44:vec4<f32> = load %x_GLF_color
-    %45:main_out = construct %44
-    ret %45
+%tint_symbol = @fragment func():main_out {
+  $B7: {
+    %46:void = call %main_1
+    %47:vec4<f32> = load %x_GLF_color
+    %48:main_out = construct %47
+    ret %48
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-bitwise-inverse-uniform-condition/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-bitwise-inverse-uniform-condition/0-opt.wgsl.expected.ir.msl
index 412cb3d..c81e042 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-bitwise-inverse-uniform-condition/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-bitwise-inverse-uniform-condition/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf2 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf2 = struct @align(4) {
   zero:f32 @offset(0)
 }
 
@@ -24,81 +24,97 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf2, read> = var @binding_point(0, 2)
   %x_8:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_10:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %x_32:ptr<function, i32, read_write> = var
     %8:ptr<uniform, f32, read> = access %x_6, 0u
-    %x_34:f32 = load %8
-    %10:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-    %x_36:f32 = load %10
-    %12:bool = lt %x_34, %x_36
-    if %12 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %13:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %x_42:i32 = load %13
+    %9:f32 = load %8
+    %x_34:f32 = let %9
+    %11:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+    %12:f32 = load %11
+    %x_36:f32 = let %12
+    %14:bool = lt %x_34, %x_36
+    if %14 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %15:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %16:i32 = load %15
+        %x_42:i32 = let %16
         store %x_32, %x_42
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %15:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %x_44:i32 = load %15
+      $B4: {  # false
+        %18:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %19:i32 = load %18
+        %x_44:i32 = let %19
         store %x_32, %x_44
         exit_if  # if_1
       }
     }
-    %x_45:i32 = load %x_32
-    %18:i32 = or %x_45, 1i
-    %19:i32 = complement %18
-    store %a, %19
-    %x_48:i32 = load %a
-    %21:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-    %x_50:i32 = load %21
-    %23:i32 = complement %x_50
-    %24:bool = eq %x_48, %23
-    if %24 [t: %b5, f: %b6] {  # if_2
-      %b5 = block {  # true
-        %25:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %x_57:i32 = load %25
-        %27:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %x_60:i32 = load %27
-        %29:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %x_63:i32 = load %29
-        %31:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %x_66:i32 = load %31
-        %33:f32 = convert %x_57
-        %34:f32 = convert %x_60
-        %35:f32 = convert %x_63
-        %36:f32 = convert %x_66
-        %37:vec4<f32> = construct %33, %34, %35, %36
-        store %x_GLF_color, %37
+    %21:i32 = load %x_32
+    %x_45:i32 = let %21
+    %23:i32 = or %x_45, 1i
+    %24:i32 = complement %23
+    store %a, %24
+    %25:i32 = load %a
+    %x_48:i32 = let %25
+    %27:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+    %28:i32 = load %27
+    %x_50:i32 = let %28
+    %30:i32 = complement %x_50
+    %31:bool = eq %x_48, %30
+    if %31 [t: $B5, f: $B6] {  # if_2
+      $B5: {  # true
+        %32:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %33:i32 = load %32
+        %x_57:i32 = let %33
+        %35:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %36:i32 = load %35
+        %x_60:i32 = let %36
+        %38:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %39:i32 = load %38
+        %x_63:i32 = let %39
+        %41:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %42:i32 = load %41
+        %x_66:i32 = let %42
+        %44:f32 = convert %x_57
+        %45:f32 = let %44
+        %46:f32 = convert %x_60
+        %47:f32 = let %46
+        %48:f32 = convert %x_63
+        %49:f32 = let %48
+        %50:f32 = convert %x_66
+        %51:vec4<f32> = construct %45, %47, %49, %50
+        store %x_GLF_color, %51
         exit_if  # if_2
       }
-      %b6 = block {  # false
-        %38:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %x_70:i32 = load %38
-        %x_71:f32 = convert %x_70
-        %41:vec4<f32> = construct %x_71, %x_71, %x_71, %x_71
-        store %x_GLF_color, %41
+      $B6: {  # false
+        %52:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %53:i32 = load %52
+        %x_70:i32 = let %53
+        %55:f32 = convert %x_70
+        %x_71:f32 = let %55
+        %57:vec4<f32> = construct %x_71, %x_71, %x_71, %x_71
+        store %x_GLF_color, %57
         exit_if  # if_2
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b7 {
-  %b7 = block {
-    %43:void = call %main_1
-    %44:vec4<f32> = load %x_GLF_color
-    %45:main_out = construct %44
-    ret %45
+%tint_symbol = @fragment func():main_out {
+  $B7: {
+    %59:void = call %main_1
+    %60:vec4<f32> = load %x_GLF_color
+    %61:main_out = construct %60
+    ret %61
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-blockfrequency-several-for-loops/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-blockfrequency-several-for-loops/0-opt.spvasm.expected.ir.msl
index efdd3b1..c5bff06 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-blockfrequency-several-for-loops/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-blockfrequency-several-for-loops/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,250 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
+  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+}
+
+%main_1 = func():void {
+  $B2: {
+    %c:ptr<function, vec4<f32>, read_write> = var
+    %a:ptr<function, i32, read_write> = var
+    %i1:ptr<function, i32, read_write> = var
+    %i2:ptr<function, i32, read_write> = var
+    %i3:ptr<function, i32, read_write> = var
+    %i4:ptr<function, i32, read_write> = var
+    %i5:ptr<function, i32, read_write> = var
+    %i6:ptr<function, i32, read_write> = var
+    %i7:ptr<function, i32, read_write> = var
+    %i8_1:ptr<function, i32, read_write> = var
+    store %c, vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f)
+    store %a, 0i
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        loop [b: $B5, c: $B6] {  # loop_2
+          $B5: {  # body
+            %14:i32 = load %a
+            %x_46:i32 = let %14
+            store_vector_element %c, %x_46, 1.0f
+            store %i1, 0i
+            loop [b: $B7, c: $B8] {  # loop_3
+              $B7: {  # body
+                %16:i32 = load %i1
+                %17:bool = lt %16, 1i
+                if %17 [t: $B9, f: $B10] {  # if_1
+                  $B9: {  # true
+                    exit_if  # if_1
+                  }
+                  $B10: {  # false
+                    exit_loop  # loop_3
+                  }
+                }
+                store %i2, 0i
+                loop [b: $B11, c: $B12] {  # loop_4
+                  $B11: {  # body
+                    %18:i32 = load %i2
+                    %19:bool = lt %18, 1i
+                    if %19 [t: $B13, f: $B14] {  # if_2
+                      $B13: {  # true
+                        exit_if  # if_2
+                      }
+                      $B14: {  # false
+                        exit_loop  # loop_4
+                      }
+                    }
+                    store %i3, 0i
+                    loop [b: $B15, c: $B16] {  # loop_5
+                      $B15: {  # body
+                        %20:i32 = load %i3
+                        %21:bool = lt %20, 1i
+                        if %21 [t: $B17, f: $B18] {  # if_3
+                          $B17: {  # true
+                            exit_if  # if_3
+                          }
+                          $B18: {  # false
+                            exit_loop  # loop_5
+                          }
+                        }
+                        store %i4, 0i
+                        loop [b: $B19, c: $B20] {  # loop_6
+                          $B19: {  # body
+                            %22:i32 = load %i4
+                            %23:bool = lt %22, 1i
+                            if %23 [t: $B21, f: $B22] {  # if_4
+                              $B21: {  # true
+                                exit_if  # if_4
+                              }
+                              $B22: {  # false
+                                exit_loop  # loop_6
+                              }
+                            }
+                            store %i5, 0i
+                            loop [b: $B23, c: $B24] {  # loop_7
+                              $B23: {  # body
+                                %24:i32 = load %i5
+                                %25:bool = lt %24, 1i
+                                if %25 [t: $B25, f: $B26] {  # if_5
+                                  $B25: {  # true
+                                    exit_if  # if_5
+                                  }
+                                  $B26: {  # false
+                                    exit_loop  # loop_7
+                                  }
+                                }
+                                store %i6, 0i
+                                loop [b: $B27, c: $B28] {  # loop_8
+                                  $B27: {  # body
+                                    %26:i32 = load %i6
+                                    %27:bool = lt %26, 1i
+                                    if %27 [t: $B29, f: $B30] {  # if_6
+                                      $B29: {  # true
+                                        exit_if  # if_6
+                                      }
+                                      $B30: {  # false
+                                        exit_loop  # loop_8
+                                      }
+                                    }
+                                    store %i7, 0i
+                                    loop [b: $B31, c: $B32] {  # loop_9
+                                      $B31: {  # body
+                                        %28:i32 = load %i7
+                                        %29:bool = lt %28, 1i
+                                        if %29 [t: $B33, f: $B34] {  # if_7
+                                          $B33: {  # true
+                                            exit_if  # if_7
+                                          }
+                                          $B34: {  # false
+                                            exit_loop  # loop_9
+                                          }
+                                        }
+                                        store %i8_1, 0i
+                                        loop [b: $B35, c: $B36] {  # loop_10
+                                          $B35: {  # body
+                                            %30:i32 = load %i8_1
+                                            %31:bool = lt %30, 17i
+                                            if %31 [t: $B37, f: $B38] {  # if_8
+                                              $B37: {  # true
+                                                exit_if  # if_8
+                                              }
+                                              $B38: {  # false
+                                                exit_loop  # loop_10
+                                              }
+                                            }
+                                            %32:i32 = load %a
+                                            %33:i32 = add %32, 1i
+                                            store %a, %33
+                                            continue  # -> $B36
+                                          }
+                                          $B36: {  # continuing
+                                            %34:i32 = load %i8_1
+                                            %35:i32 = add %34, 1i
+                                            store %i8_1, %35
+                                            next_iteration  # -> $B35
+                                          }
+                                        }
+                                        continue  # -> $B32
+                                      }
+                                      $B32: {  # continuing
+                                        %36:i32 = load %i7
+                                        %37:i32 = add %36, 1i
+                                        store %i7, %37
+                                        next_iteration  # -> $B31
+                                      }
+                                    }
+                                    continue  # -> $B28
+                                  }
+                                  $B28: {  # continuing
+                                    %38:i32 = load %i6
+                                    %39:i32 = add %38, 1i
+                                    store %i6, %39
+                                    next_iteration  # -> $B27
+                                  }
+                                }
+                                continue  # -> $B24
+                              }
+                              $B24: {  # continuing
+                                %40:i32 = load %i5
+                                %41:i32 = add %40, 1i
+                                store %i5, %41
+                                next_iteration  # -> $B23
+                              }
+                            }
+                            continue  # -> $B20
+                          }
+                          $B20: {  # continuing
+                            %42:i32 = load %i4
+                            %43:i32 = add %42, 1i
+                            store %i4, %43
+                            next_iteration  # -> $B19
+                          }
+                        }
+                        continue  # -> $B16
+                      }
+                      $B16: {  # continuing
+                        %44:i32 = load %i3
+                        %45:i32 = add %44, 1i
+                        store %i3, %45
+                        next_iteration  # -> $B15
+                      }
+                    }
+                    continue  # -> $B12
+                  }
+                  $B12: {  # continuing
+                    %46:i32 = load %i2
+                    %47:i32 = add %46, 1i
+                    store %i2, %47
+                    next_iteration  # -> $B11
+                  }
+                }
+                continue  # -> $B8
+              }
+              $B8: {  # continuing
+                %48:i32 = load %i1
+                %49:i32 = add %48, 1i
+                store %i1, %49
+                next_iteration  # -> $B7
+              }
+            }
+            continue  # -> $B6
+          }
+          $B6: {  # continuing
+            %50:f32 = load_vector_element %gl_FragCoord, 0u
+            %x_123:f32 = let %50
+            %52:bool = lt %x_123, -1.0f
+            %53:bool = eq %52, false
+            break_if %53  # -> [t: exit_loop loop_2, f: $B5]
+          }
+        }
+        continue  # -> $B4
+      }
+      $B4: {  # continuing
+        %54:f32 = load_vector_element %gl_FragCoord, 1u
+        %x_126:f32 = let %54
+        %56:bool = lt %x_126, -1.0f
+        %57:bool = eq %56, false
+        break_if %57  # -> [t: exit_loop loop_1, f: $B3]
+      }
+    }
+    %58:vec4<f32> = load %c
+    store %x_GLF_color, %58
+    ret
+  }
+}
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B39: {
+    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
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-blockfrequency-several-for-loops/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-blockfrequency-several-for-loops/0-opt.wgsl.expected.ir.msl
index efdd3b1..321bd02 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-blockfrequency-several-for-loops/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-blockfrequency-several-for-loops/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,268 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
+  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+}
+
+%main_1 = func():void {
+  $B2: {
+    %c:ptr<function, vec4<f32>, read_write> = var
+    %a:ptr<function, i32, read_write> = var
+    %i1:ptr<function, i32, read_write> = var
+    %i2:ptr<function, i32, read_write> = var
+    %i3:ptr<function, i32, read_write> = var
+    %i4:ptr<function, i32, read_write> = var
+    %i5:ptr<function, i32, read_write> = var
+    %i6:ptr<function, i32, read_write> = var
+    %i7:ptr<function, i32, read_write> = var
+    %i8_1:ptr<function, i32, read_write> = var
+    store %c, vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f)
+    store %a, 0i
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        loop [b: $B5, c: $B6] {  # loop_2
+          $B5: {  # body
+            %14:i32 = load %a
+            %x_46:i32 = let %14
+            store_vector_element %c, %x_46, 1.0f
+            store %i1, 0i
+            loop [b: $B7, c: $B8] {  # loop_3
+              $B7: {  # body
+                %16:i32 = load %i1
+                %x_52:i32 = let %16
+                %18:bool = lt %x_52, 1i
+                if %18 [t: $B9, f: $B10] {  # if_1
+                  $B9: {  # true
+                    exit_if  # if_1
+                  }
+                  $B10: {  # false
+                    exit_loop  # loop_3
+                  }
+                }
+                store %i2, 0i
+                loop [b: $B11, c: $B12] {  # loop_4
+                  $B11: {  # body
+                    %19:i32 = load %i2
+                    %x_59:i32 = let %19
+                    %21:bool = lt %x_59, 1i
+                    if %21 [t: $B13, f: $B14] {  # if_2
+                      $B13: {  # true
+                        exit_if  # if_2
+                      }
+                      $B14: {  # false
+                        exit_loop  # loop_4
+                      }
+                    }
+                    store %i3, 0i
+                    loop [b: $B15, c: $B16] {  # loop_5
+                      $B15: {  # body
+                        %22:i32 = load %i3
+                        %x_66:i32 = let %22
+                        %24:bool = lt %x_66, 1i
+                        if %24 [t: $B17, f: $B18] {  # if_3
+                          $B17: {  # true
+                            exit_if  # if_3
+                          }
+                          $B18: {  # false
+                            exit_loop  # loop_5
+                          }
+                        }
+                        store %i4, 0i
+                        loop [b: $B19, c: $B20] {  # loop_6
+                          $B19: {  # body
+                            %25:i32 = load %i4
+                            %x_73:i32 = let %25
+                            %27:bool = lt %x_73, 1i
+                            if %27 [t: $B21, f: $B22] {  # if_4
+                              $B21: {  # true
+                                exit_if  # if_4
+                              }
+                              $B22: {  # false
+                                exit_loop  # loop_6
+                              }
+                            }
+                            store %i5, 0i
+                            loop [b: $B23, c: $B24] {  # loop_7
+                              $B23: {  # body
+                                %28:i32 = load %i5
+                                %x_80:i32 = let %28
+                                %30:bool = lt %x_80, 1i
+                                if %30 [t: $B25, f: $B26] {  # if_5
+                                  $B25: {  # true
+                                    exit_if  # if_5
+                                  }
+                                  $B26: {  # false
+                                    exit_loop  # loop_7
+                                  }
+                                }
+                                store %i6, 0i
+                                loop [b: $B27, c: $B28] {  # loop_8
+                                  $B27: {  # body
+                                    %31:i32 = load %i6
+                                    %x_87:i32 = let %31
+                                    %33:bool = lt %x_87, 1i
+                                    if %33 [t: $B29, f: $B30] {  # if_6
+                                      $B29: {  # true
+                                        exit_if  # if_6
+                                      }
+                                      $B30: {  # false
+                                        exit_loop  # loop_8
+                                      }
+                                    }
+                                    store %i7, 0i
+                                    loop [b: $B31, c: $B32] {  # loop_9
+                                      $B31: {  # body
+                                        %34:i32 = load %i7
+                                        %x_94:i32 = let %34
+                                        %36:bool = lt %x_94, 1i
+                                        if %36 [t: $B33, f: $B34] {  # if_7
+                                          $B33: {  # true
+                                            exit_if  # if_7
+                                          }
+                                          $B34: {  # false
+                                            exit_loop  # loop_9
+                                          }
+                                        }
+                                        store %i8_1, 0i
+                                        loop [b: $B35, c: $B36] {  # loop_10
+                                          $B35: {  # body
+                                            %37:i32 = load %i8_1
+                                            %x_101:i32 = let %37
+                                            %39:bool = lt %x_101, 17i
+                                            if %39 [t: $B37, f: $B38] {  # if_8
+                                              $B37: {  # true
+                                                exit_if  # if_8
+                                              }
+                                              $B38: {  # false
+                                                exit_loop  # loop_10
+                                              }
+                                            }
+                                            %40:i32 = load %a
+                                            %x_104:i32 = let %40
+                                            %42:i32 = add %x_104, 1i
+                                            store %a, %42
+                                            continue  # -> $B36
+                                          }
+                                          $B36: {  # continuing
+                                            %43:i32 = load %i8_1
+                                            %x_106:i32 = let %43
+                                            %45:i32 = add %x_106, 1i
+                                            store %i8_1, %45
+                                            next_iteration  # -> $B35
+                                          }
+                                        }
+                                        continue  # -> $B32
+                                      }
+                                      $B32: {  # continuing
+                                        %46:i32 = load %i7
+                                        %x_108:i32 = let %46
+                                        %48:i32 = add %x_108, 1i
+                                        store %i7, %48
+                                        next_iteration  # -> $B31
+                                      }
+                                    }
+                                    continue  # -> $B28
+                                  }
+                                  $B28: {  # continuing
+                                    %49:i32 = load %i6
+                                    %x_110:i32 = let %49
+                                    %51:i32 = add %x_110, 1i
+                                    store %i6, %51
+                                    next_iteration  # -> $B27
+                                  }
+                                }
+                                continue  # -> $B24
+                              }
+                              $B24: {  # continuing
+                                %52:i32 = load %i5
+                                %x_112:i32 = let %52
+                                %54:i32 = add %x_112, 1i
+                                store %i5, %54
+                                next_iteration  # -> $B23
+                              }
+                            }
+                            continue  # -> $B20
+                          }
+                          $B20: {  # continuing
+                            %55:i32 = load %i4
+                            %x_114:i32 = let %55
+                            %57:i32 = add %x_114, 1i
+                            store %i4, %57
+                            next_iteration  # -> $B19
+                          }
+                        }
+                        continue  # -> $B16
+                      }
+                      $B16: {  # continuing
+                        %58:i32 = load %i3
+                        %x_116:i32 = let %58
+                        %60:i32 = add %x_116, 1i
+                        store %i3, %60
+                        next_iteration  # -> $B15
+                      }
+                    }
+                    continue  # -> $B12
+                  }
+                  $B12: {  # continuing
+                    %61:i32 = load %i2
+                    %x_118:i32 = let %61
+                    %63:i32 = add %x_118, 1i
+                    store %i2, %63
+                    next_iteration  # -> $B11
+                  }
+                }
+                continue  # -> $B8
+              }
+              $B8: {  # continuing
+                %64:i32 = load %i1
+                %x_120:i32 = let %64
+                %66:i32 = add %x_120, 1i
+                store %i1, %66
+                next_iteration  # -> $B7
+              }
+            }
+            continue  # -> $B6
+          }
+          $B6: {  # continuing
+            %67:f32 = load_vector_element %gl_FragCoord, 0u
+            %x_123:f32 = let %67
+            %69:bool = lt %x_123, -1.0f
+            %70:bool = eq %69, false
+            break_if %70  # -> [t: exit_loop loop_2, f: $B5]
+          }
+        }
+        continue  # -> $B4
+      }
+      $B4: {  # continuing
+        %71:f32 = load_vector_element %gl_FragCoord, 1u
+        %x_126:f32 = let %71
+        %73:bool = lt %x_126, -1.0f
+        %74:bool = eq %73, false
+        break_if %74  # -> [t: exit_loop loop_1, f: $B3]
+      }
+    }
+    %75:vec4<f32> = load %c
+    %x_128:vec4<f32> = let %75
+    store %x_GLF_color, %x_128
+    ret
+  }
+}
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B39: {
+    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
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-branch-probability-identity-matrix/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-branch-probability-identity-matrix/0-opt.spvasm.expected.ir.msl
index 2b69a06..3ac89bb 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-branch-probability-identity-matrix/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-branch-probability-identity-matrix/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,14 +20,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %sums:ptr<function, array<f32, 2>, read_write> = var
     %a:ptr<function, i32, read_write> = var
     %b:ptr<function, i32, read_write> = var
@@ -38,215 +38,231 @@
     %x_158:ptr<function, bool, read_write> = var
     %x_159:ptr<function, bool, read_write> = var
     %14:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_16:i32 = load %14
-    %16:ptr<function, f32, read_write> = access %sums, %x_16
-    %17:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-    %18:f32 = load %17
-    %19:f32 = negation %18
-    store %16, %19
-    %20:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_18:i32 = load %20
-    %22:ptr<function, f32, read_write> = access %sums, %x_18
-    %23:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-    %24:f32 = load %23
-    %25:f32 = negation %24
-    store %22, %25
-    %26:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %27:i32 = load %26
-    store %a, %27
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %28:i32 = load %a
-        %29:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %30:i32 = load %29
-        %31:bool = lt %28, %30
-        if %31 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    %15:i32 = load %14
+    %x_16:i32 = let %15
+    %17:ptr<function, f32, read_write> = access %sums, %x_16
+    %18:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+    %19:f32 = load %18
+    %20:f32 = negation %19
+    store %17, %20
+    %21:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %22:i32 = load %21
+    %x_18:i32 = let %22
+    %24:ptr<function, f32, read_write> = access %sums, %x_18
+    %25:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+    %26:f32 = load %25
+    %27:f32 = negation %26
+    store %24, %27
+    %28:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %29:i32 = load %28
+    store %a, %29
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %30:i32 = load %a
+        %31:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %32:i32 = load %31
+        %33:bool = lt %30, %32
+        if %33 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %32:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %33:i32 = load %32
-        store %b, %33
-        loop [b: %b7, c: %b8] {  # loop_2
-          %b7 = block {  # body
-            %34:i32 = load %b
-            %35:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-            %36:i32 = load %35
-            %37:bool = lt %34, %36
-            if %37 [t: %b9, f: %b10] {  # if_2
-              %b9 = block {  # true
+        %34:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %35:i32 = load %34
+        store %b, %35
+        loop [b: $B7, c: $B8] {  # loop_2
+          $B7: {  # body
+            %36:i32 = load %b
+            %37:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+            %38:i32 = load %37
+            %39:bool = lt %36, %38
+            if %39 [t: $B9, f: $B10] {  # if_2
+              $B9: {  # true
                 exit_if  # if_2
               }
-              %b10 = block {  # false
+              $B10: {  # false
                 exit_loop  # loop_2
               }
             }
-            %38:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-            %39:i32 = load %38
-            store %c, %39
-            loop [b: %b11, c: %b12] {  # loop_3
-              %b11 = block {  # body
-                %40:i32 = load %c
-                %41:i32 = load %a
-                %42:bool = lte %40, %41
-                if %42 [t: %b13, f: %b14] {  # if_3
-                  %b13 = block {  # true
+            %40:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+            %41:i32 = load %40
+            store %c, %41
+            loop [b: $B11, c: $B12] {  # loop_3
+              $B11: {  # body
+                %42:i32 = load %c
+                %43:i32 = load %a
+                %44:bool = lte %42, %43
+                if %44 [t: $B13, f: $B14] {  # if_3
+                  $B13: {  # true
                     exit_if  # if_3
                   }
-                  %b14 = block {  # false
+                  $B14: {  # false
                     exit_loop  # loop_3
                   }
                 }
-                %43:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-                %44:i32 = load %43
-                store %d, %44
-                loop [b: %b15, c: %b16] {  # loop_4
-                  %b15 = block {  # body
-                    %45:i32 = load %d
-                    %46:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-                    %47:i32 = load %46
-                    %48:bool = lt %45, %47
-                    if %48 [t: %b17, f: %b18] {  # if_4
-                      %b17 = block {  # true
+                %45:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+                %46:i32 = load %45
+                store %d, %46
+                loop [b: $B15, c: $B16] {  # loop_4
+                  $B15: {  # body
+                    %47:i32 = load %d
+                    %48:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+                    %49:i32 = load %48
+                    %50:bool = lt %47, %49
+                    if %50 [t: $B17, f: $B18] {  # if_4
+                      $B17: {  # true
                         exit_if  # if_4
                       }
-                      %b18 = block {  # false
+                      $B18: {  # false
                         exit_loop  # loop_4
                       }
                     }
-                    %x_31:i32 = load %a
-                    %50:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-                    %51:i32 = load %50
-                    %x_125:f32 = convert %51
-                    %x_33:i32 = load %c
-                    %54:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-                    %x_34:i32 = load %54
-                    %56:vec2<f32> = construct %x_125, 0.0f
-                    %57:vec2<f32> = construct 0.0f, %x_125
-                    %58:mat2x2<f32> = construct %56, %57
-                    store %indexable, %58
-                    %59:ptr<function, f32, read_write> = access %sums, %x_31
-                    %60:ptr<function, vec2<f32>, read_write> = access %indexable, %x_33
-                    %61:f32 = load_vector_element %60, %x_34
-                    store %59, %61
-                    %x_35:i32 = load %a
-                    %63:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-                    %64:i32 = load %63
-                    %x_134:f32 = convert %64
-                    %x_37:i32 = load %c
-                    %67:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-                    %x_38:i32 = load %67
-                    %69:vec2<f32> = construct %x_134, 0.0f
-                    %70:vec2<f32> = construct 0.0f, %x_134
-                    %71:mat2x2<f32> = construct %69, %70
-                    store %indexable_1, %71
-                    %72:ptr<function, f32, read_write> = access %sums, %x_35
-                    %73:ptr<function, f32, read_write> = access %sums, %x_35
-                    %74:f32 = load %73
-                    %75:ptr<function, vec2<f32>, read_write> = access %indexable_1, %x_37
-                    %76:f32 = load_vector_element %75, %x_38
-                    %77:f32 = add %74, %76
-                    store %72, %77
-                    continue %b16
+                    %51:i32 = load %a
+                    %x_31:i32 = let %51
+                    %53:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+                    %54:i32 = load %53
+                    %55:f32 = convert %54
+                    %x_125:f32 = let %55
+                    %57:i32 = load %c
+                    %x_33:i32 = let %57
+                    %59:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+                    %60:i32 = load %59
+                    %x_34:i32 = let %60
+                    %62:vec2<f32> = construct %x_125, 0.0f
+                    %63:vec2<f32> = let %62
+                    %64:vec2<f32> = construct 0.0f, %x_125
+                    %65:mat2x2<f32> = construct %63, %64
+                    store %indexable, %65
+                    %66:ptr<function, f32, read_write> = access %sums, %x_31
+                    %67:ptr<function, vec2<f32>, read_write> = access %indexable, %x_33
+                    %68:f32 = load_vector_element %67, %x_34
+                    store %66, %68
+                    %69:i32 = load %a
+                    %x_35:i32 = let %69
+                    %71:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+                    %72:i32 = load %71
+                    %73:f32 = convert %72
+                    %x_134:f32 = let %73
+                    %75:i32 = load %c
+                    %x_37:i32 = let %75
+                    %77:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+                    %78:i32 = load %77
+                    %x_38:i32 = let %78
+                    %80:vec2<f32> = construct %x_134, 0.0f
+                    %81:vec2<f32> = let %80
+                    %82:vec2<f32> = construct 0.0f, %x_134
+                    %83:mat2x2<f32> = construct %81, %82
+                    store %indexable_1, %83
+                    %84:ptr<function, f32, read_write> = access %sums, %x_35
+                    %85:ptr<function, f32, read_write> = access %sums, %x_35
+                    %86:f32 = load %85
+                    %87:ptr<function, vec2<f32>, read_write> = access %indexable_1, %x_37
+                    %88:f32 = load_vector_element %87, %x_38
+                    %89:f32 = add %86, %88
+                    store %84, %89
+                    continue  # -> $B16
                   }
-                  %b16 = block {  # continuing
-                    %78:i32 = load %d
-                    %79:i32 = add %78, 1i
-                    store %d, %79
-                    next_iteration %b15
+                  $B16: {  # continuing
+                    %90:i32 = load %d
+                    %91:i32 = add %90, 1i
+                    store %d, %91
+                    next_iteration  # -> $B15
                   }
                 }
-                continue %b12
+                continue  # -> $B12
               }
-              %b12 = block {  # continuing
-                %80:i32 = load %c
-                %81:i32 = add %80, 1i
-                store %c, %81
-                next_iteration %b11
+              $B12: {  # continuing
+                %92:i32 = load %c
+                %93:i32 = add %92, 1i
+                store %c, %93
+                next_iteration  # -> $B11
               }
             }
-            continue %b8
+            continue  # -> $B8
           }
-          %b8 = block {  # continuing
-            %82:i32 = load %b
-            %83:i32 = add %82, 1i
-            store %b, %83
-            next_iteration %b7
+          $B8: {  # continuing
+            %94:i32 = load %b
+            %95:i32 = add %94, 1i
+            store %b, %95
+            next_iteration  # -> $B7
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %84:i32 = load %a
-        %85:i32 = add %84, 1i
-        store %a, %85
-        next_iteration %b3
+      $B4: {  # continuing
+        %96:i32 = load %a
+        %97:i32 = add %96, 1i
+        store %a, %97
+        next_iteration  # -> $B3
       }
     }
-    %86:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %87:i32 = load %86
-    %88:ptr<function, f32, read_write> = access %sums, %87
-    %89:f32 = load %88
-    %90:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
-    %91:f32 = load %90
-    %x_150:bool = eq %89, %91
+    %98:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %99:i32 = load %98
+    %100:ptr<function, f32, read_write> = access %sums, %99
+    %101:f32 = load %100
+    %102:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
+    %103:f32 = load %102
+    %104:bool = eq %101, %103
+    %x_150:bool = let %104
     store %x_159, %x_150
-    if %x_150 [t: %b19] {  # if_5
-      %b19 = block {  # true
-        %93:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %94:i32 = load %93
-        %95:ptr<function, f32, read_write> = access %sums, %94
-        %96:f32 = load %95
-        %97:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
-        %98:f32 = load %97
-        %99:bool = eq %96, %98
-        store %x_158, %99
-        %100:bool = load %x_158
-        store %x_159, %100
+    if %x_150 [t: $B19] {  # if_5
+      $B19: {  # true
+        %106:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %107:i32 = load %106
+        %108:ptr<function, f32, read_write> = access %sums, %107
+        %109:f32 = load %108
+        %110:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
+        %111:f32 = load %110
+        %112:bool = eq %109, %111
+        store %x_158, %112
+        %113:bool = load %x_158
+        store %x_159, %113
         exit_if  # if_5
       }
     }
-    %101:bool = load %x_159
-    if %101 [t: %b20, f: %b21] {  # if_6
-      %b20 = block {  # true
-        %102:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %103:i32 = load %102
-        %104:f32 = convert %103
-        %105:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %106:i32 = load %105
-        %107:f32 = convert %106
-        %108:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %109:i32 = load %108
-        %110:f32 = convert %109
-        %111:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %112:i32 = load %111
-        %113:f32 = convert %112
-        %114:vec4<f32> = construct %104, %107, %110, %113
-        store %x_GLF_color, %114
-        exit_if  # if_6
-      }
-      %b21 = block {  # false
-        %115:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %114:bool = load %x_159
+    if %114 [t: $B20, f: $B21] {  # if_6
+      $B20: {  # true
+        %115:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
         %116:i32 = load %115
         %117:f32 = convert %116
-        %118:vec4<f32> = construct %117
-        store %x_GLF_color, %118
+        %118:f32 = let %117
+        %119:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %120:i32 = load %119
+        %121:f32 = convert %120
+        %122:f32 = let %121
+        %123:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %124:i32 = load %123
+        %125:f32 = convert %124
+        %126:f32 = let %125
+        %127:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %128:i32 = load %127
+        %129:f32 = convert %128
+        %130:vec4<f32> = construct %118, %122, %126, %129
+        store %x_GLF_color, %130
+        exit_if  # if_6
+      }
+      $B21: {  # false
+        %131:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %132:i32 = load %131
+        %133:f32 = convert %132
+        %134:vec4<f32> = construct %133
+        store %x_GLF_color, %134
         exit_if  # if_6
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b22 {
-  %b22 = block {
-    %120:void = call %main_1
-    %121:vec4<f32> = load %x_GLF_color
-    %122:main_out = construct %121
-    ret %122
+%tint_symbol = @fragment func():main_out {
+  $B22: {
+    %136:void = call %main_1
+    %137:vec4<f32> = load %x_GLF_color
+    %138:main_out = construct %137
+    ret %138
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-branch-probability-identity-matrix/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-branch-probability-identity-matrix/0-opt.wgsl.expected.ir.msl
index c9e8ed6..6955099 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-branch-probability-identity-matrix/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-branch-probability-identity-matrix/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,14 +20,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %sums:ptr<function, array<f32, 2>, read_write> = var
     %a:ptr<function, i32, read_write> = var
     %b:ptr<function, i32, read_write> = var
@@ -38,215 +38,267 @@
     %x_158:ptr<function, bool, read_write> = var
     %x_159_phi:ptr<function, bool, read_write> = var
     %14:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_16:i32 = load %14
-    %16:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-    %x_85:f32 = load %16
-    %18:ptr<function, f32, read_write> = access %sums, %x_16
-    %19:f32 = negation %x_85
-    store %18, %19
-    %20:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_18:i32 = load %20
-    %22:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-    %x_90:f32 = load %22
-    %24:ptr<function, f32, read_write> = access %sums, %x_18
-    %25:f32 = negation %x_90
-    store %24, %25
-    %26:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_19:i32 = load %26
+    %15:i32 = load %14
+    %x_16:i32 = let %15
+    %17:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+    %18:f32 = load %17
+    %x_85:f32 = let %18
+    %20:ptr<function, f32, read_write> = access %sums, %x_16
+    %21:f32 = negation %x_85
+    store %20, %21
+    %22:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %23:i32 = load %22
+    %x_18:i32 = let %23
+    %25:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+    %26:f32 = load %25
+    %x_90:f32 = let %26
+    %28:ptr<function, f32, read_write> = access %sums, %x_18
+    %29:f32 = negation %x_90
+    store %28, %29
+    %30:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %31:i32 = load %30
+    %x_19:i32 = let %31
     store %a, %x_19
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_20:i32 = load %a
-        %29:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_21:i32 = load %29
-        %31:bool = lt %x_20, %x_21
-        if %31 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %33:i32 = load %a
+        %x_20:i32 = let %33
+        %35:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %36:i32 = load %35
+        %x_21:i32 = let %36
+        %38:bool = lt %x_20, %x_21
+        if %38 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %32:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_22:i32 = load %32
+        %39:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %40:i32 = load %39
+        %x_22:i32 = let %40
         store %b, %x_22
-        loop [b: %b7, c: %b8] {  # loop_2
-          %b7 = block {  # body
-            %x_23:i32 = load %b
-            %35:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-            %x_24:i32 = load %35
-            %37:bool = lt %x_23, %x_24
-            if %37 [t: %b9, f: %b10] {  # if_2
-              %b9 = block {  # true
+        loop [b: $B7, c: $B8] {  # loop_2
+          $B7: {  # body
+            %42:i32 = load %b
+            %x_23:i32 = let %42
+            %44:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+            %45:i32 = load %44
+            %x_24:i32 = let %45
+            %47:bool = lt %x_23, %x_24
+            if %47 [t: $B9, f: $B10] {  # if_2
+              $B9: {  # true
                 exit_if  # if_2
               }
-              %b10 = block {  # false
+              $B10: {  # false
                 exit_loop  # loop_2
               }
             }
-            %38:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-            %x_25:i32 = load %38
+            %48:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+            %49:i32 = load %48
+            %x_25:i32 = let %49
             store %c, %x_25
-            loop [b: %b11, c: %b12] {  # loop_3
-              %b11 = block {  # body
-                %x_26:i32 = load %c
-                %x_27:i32 = load %a
-                %42:bool = lte %x_26, %x_27
-                if %42 [t: %b13, f: %b14] {  # if_3
-                  %b13 = block {  # true
+            loop [b: $B11, c: $B12] {  # loop_3
+              $B11: {  # body
+                %51:i32 = load %c
+                %x_26:i32 = let %51
+                %53:i32 = load %a
+                %x_27:i32 = let %53
+                %55:bool = lte %x_26, %x_27
+                if %55 [t: $B13, f: $B14] {  # if_3
+                  $B13: {  # true
                     exit_if  # if_3
                   }
-                  %b14 = block {  # false
+                  $B14: {  # false
                     exit_loop  # loop_3
                   }
                 }
-                %43:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-                %x_28:i32 = load %43
+                %56:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+                %57:i32 = load %56
+                %x_28:i32 = let %57
                 store %d, %x_28
-                loop [b: %b15, c: %b16] {  # loop_4
-                  %b15 = block {  # body
-                    %x_29:i32 = load %d
-                    %46:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-                    %x_30:i32 = load %46
-                    %48:bool = lt %x_29, %x_30
-                    if %48 [t: %b17, f: %b18] {  # if_4
-                      %b17 = block {  # true
+                loop [b: $B15, c: $B16] {  # loop_4
+                  $B15: {  # body
+                    %59:i32 = load %d
+                    %x_29:i32 = let %59
+                    %61:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+                    %62:i32 = load %61
+                    %x_30:i32 = let %62
+                    %64:bool = lt %x_29, %x_30
+                    if %64 [t: $B17, f: $B18] {  # if_4
+                      $B17: {  # true
                         exit_if  # if_4
                       }
-                      %b18 = block {  # false
+                      $B18: {  # false
                         exit_loop  # loop_4
                       }
                     }
-                    %x_31:i32 = load %a
-                    %50:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-                    %x_32:i32 = load %50
-                    %x_125:f32 = convert %x_32
-                    %x_33:i32 = load %c
-                    %54:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-                    %x_34:i32 = load %54
-                    %56:vec2<f32> = construct %x_125, 0.0f
-                    %57:vec2<f32> = construct 0.0f, %x_125
-                    %58:mat2x2<f32> = construct %56, %57
-                    store %indexable, %58
-                    %59:ptr<function, vec2<f32>, read_write> = access %indexable, %x_33
-                    %x_131:f32 = load_vector_element %59, %x_34
-                    %61:ptr<function, f32, read_write> = access %sums, %x_31
-                    store %61, %x_131
-                    %x_35:i32 = load %a
-                    %63:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-                    %x_36:i32 = load %63
-                    %x_134:f32 = convert %x_36
-                    %x_37:i32 = load %c
+                    %65:i32 = load %a
+                    %x_31:i32 = let %65
                     %67:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-                    %x_38:i32 = load %67
-                    %69:vec2<f32> = construct %x_134, 0.0f
-                    %70:vec2<f32> = construct 0.0f, %x_134
-                    %71:mat2x2<f32> = construct %69, %70
-                    store %indexable_1, %71
-                    %72:ptr<function, vec2<f32>, read_write> = access %indexable_1, %x_37
-                    %x_140:f32 = load_vector_element %72, %x_38
-                    %74:ptr<function, f32, read_write> = access %sums, %x_35
-                    %x_142:f32 = load %74
-                    %76:ptr<function, f32, read_write> = access %sums, %x_35
-                    %77:f32 = add %x_142, %x_140
-                    store %76, %77
-                    continue %b16
+                    %68:i32 = load %67
+                    %x_32:i32 = let %68
+                    %70:f32 = convert %x_32
+                    %x_125:f32 = let %70
+                    %72:i32 = load %c
+                    %x_33:i32 = let %72
+                    %74:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+                    %75:i32 = load %74
+                    %x_34:i32 = let %75
+                    %77:vec2<f32> = construct %x_125, 0.0f
+                    %78:vec2<f32> = let %77
+                    %79:vec2<f32> = construct 0.0f, %x_125
+                    %80:mat2x2<f32> = construct %78, %79
+                    store %indexable, %80
+                    %81:ptr<function, vec2<f32>, read_write> = access %indexable, %x_33
+                    %82:f32 = load_vector_element %81, %x_34
+                    %x_131:f32 = let %82
+                    %84:ptr<function, f32, read_write> = access %sums, %x_31
+                    store %84, %x_131
+                    %85:i32 = load %a
+                    %x_35:i32 = let %85
+                    %87:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+                    %88:i32 = load %87
+                    %x_36:i32 = let %88
+                    %90:f32 = convert %x_36
+                    %x_134:f32 = let %90
+                    %92:i32 = load %c
+                    %x_37:i32 = let %92
+                    %94:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+                    %95:i32 = load %94
+                    %x_38:i32 = let %95
+                    %97:vec2<f32> = construct %x_134, 0.0f
+                    %98:vec2<f32> = let %97
+                    %99:vec2<f32> = construct 0.0f, %x_134
+                    %100:mat2x2<f32> = construct %98, %99
+                    store %indexable_1, %100
+                    %101:ptr<function, vec2<f32>, read_write> = access %indexable_1, %x_37
+                    %102:f32 = load_vector_element %101, %x_38
+                    %x_140:f32 = let %102
+                    %104:ptr<function, f32, read_write> = access %sums, %x_35
+                    %105:f32 = load %104
+                    %x_142:f32 = let %105
+                    %107:ptr<function, f32, read_write> = access %sums, %x_35
+                    %108:f32 = add %x_142, %x_140
+                    store %107, %108
+                    continue  # -> $B16
                   }
-                  %b16 = block {  # continuing
-                    %x_39:i32 = load %d
-                    %79:i32 = add %x_39, 1i
-                    store %d, %79
-                    next_iteration %b15
+                  $B16: {  # continuing
+                    %109:i32 = load %d
+                    %x_39:i32 = let %109
+                    %111:i32 = add %x_39, 1i
+                    store %d, %111
+                    next_iteration  # -> $B15
                   }
                 }
-                continue %b12
+                continue  # -> $B12
               }
-              %b12 = block {  # continuing
-                %x_41:i32 = load %c
-                %81:i32 = add %x_41, 1i
-                store %c, %81
-                next_iteration %b11
+              $B12: {  # continuing
+                %112:i32 = load %c
+                %x_41:i32 = let %112
+                %114:i32 = add %x_41, 1i
+                store %c, %114
+                next_iteration  # -> $B11
               }
             }
-            continue %b8
+            continue  # -> $B8
           }
-          %b8 = block {  # continuing
-            %x_43:i32 = load %b
-            %83:i32 = add %x_43, 1i
-            store %b, %83
-            next_iteration %b7
+          $B8: {  # continuing
+            %115:i32 = load %b
+            %x_43:i32 = let %115
+            %117:i32 = add %x_43, 1i
+            store %b, %117
+            next_iteration  # -> $B7
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_45:i32 = load %a
-        %85:i32 = add %x_45, 1i
-        store %a, %85
-        next_iteration %b3
+      $B4: {  # continuing
+        %118:i32 = load %a
+        %x_45:i32 = let %118
+        %120:i32 = add %x_45, 1i
+        store %a, %120
+        next_iteration  # -> $B3
       }
     }
-    %86:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_47:i32 = load %86
-    %88:ptr<function, f32, read_write> = access %sums, %x_47
-    %x_147:f32 = load %88
-    %90:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
-    %x_149:f32 = load %90
-    %x_150:bool = eq %x_147, %x_149
+    %121:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %122:i32 = load %121
+    %x_47:i32 = let %122
+    %124:ptr<function, f32, read_write> = access %sums, %x_47
+    %125:f32 = load %124
+    %x_147:f32 = let %125
+    %127:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
+    %128:f32 = load %127
+    %x_149:f32 = let %128
+    %130:bool = eq %x_147, %x_149
+    %x_150:bool = let %130
     store %x_159_phi, %x_150
-    if %x_150 [t: %b19] {  # if_5
-      %b19 = block {  # true
-        %93:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %x_48:i32 = load %93
-        %95:ptr<function, f32, read_write> = access %sums, %x_48
-        %x_155:f32 = load %95
-        %97:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
-        %x_157:f32 = load %97
-        %99:bool = eq %x_155, %x_157
-        store %x_158, %99
-        %100:bool = load %x_158
-        store %x_159_phi, %100
+    if %x_150 [t: $B19] {  # if_5
+      $B19: {  # true
+        %132:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %133:i32 = load %132
+        %x_48:i32 = let %133
+        %135:ptr<function, f32, read_write> = access %sums, %x_48
+        %136:f32 = load %135
+        %x_155:f32 = let %136
+        %138:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
+        %139:f32 = load %138
+        %x_157:f32 = let %139
+        %141:bool = eq %x_155, %x_157
+        store %x_158, %141
+        %142:bool = load %x_158
+        store %x_159_phi, %142
         exit_if  # if_5
       }
     }
-    %x_159:bool = load %x_159_phi
-    if %x_159 [t: %b20, f: %b21] {  # if_6
-      %b20 = block {  # true
-        %102:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %x_49:i32 = load %102
-        %104:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_50:i32 = load %104
-        %106:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_51:i32 = load %106
-        %108:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %x_52:i32 = load %108
-        %110:f32 = convert %x_49
-        %111:f32 = convert %x_50
-        %112:f32 = convert %x_51
-        %113:f32 = convert %x_52
-        %114:vec4<f32> = construct %110, %111, %112, %113
-        store %x_GLF_color, %114
+    %143:bool = load %x_159_phi
+    %x_159:bool = let %143
+    if %x_159 [t: $B20, f: $B21] {  # if_6
+      $B20: {  # true
+        %145:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %146:i32 = load %145
+        %x_49:i32 = let %146
+        %148:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %149:i32 = load %148
+        %x_50:i32 = let %149
+        %151:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %152:i32 = load %151
+        %x_51:i32 = let %152
+        %154:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %155:i32 = load %154
+        %x_52:i32 = let %155
+        %157:f32 = convert %x_49
+        %158:f32 = let %157
+        %159:f32 = convert %x_50
+        %160:f32 = let %159
+        %161:f32 = convert %x_51
+        %162:f32 = let %161
+        %163:f32 = convert %x_52
+        %164:vec4<f32> = construct %158, %160, %162, %163
+        store %x_GLF_color, %164
         exit_if  # if_6
       }
-      %b21 = block {  # false
-        %115:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_53:i32 = load %115
-        %x_173:f32 = convert %x_53
-        %118:vec4<f32> = construct %x_173, %x_173, %x_173, %x_173
-        store %x_GLF_color, %118
+      $B21: {  # false
+        %165:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %166:i32 = load %165
+        %x_53:i32 = let %166
+        %168:f32 = convert %x_53
+        %x_173:f32 = let %168
+        %170:vec4<f32> = construct %x_173, %x_173, %x_173, %x_173
+        store %x_GLF_color, %170
         exit_if  # if_6
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b22 {
-  %b22 = block {
-    %120:void = call %main_1
-    %121:vec4<f32> = load %x_GLF_color
-    %122:main_out = construct %121
-    ret %122
+%tint_symbol = @fragment func():main_out {
+  $B22: {
+    %172:void = call %main_1
+    %173:vec4<f32> = load %x_GLF_color
+    %174:main_out = construct %173
+    ret %174
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-cast-float-to-int-and-back/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-cast-float-to-int-and-back/0-opt.spvasm.expected.ir.msl
index 99c379c..0ecc189 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-cast-float-to-int-and-back/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-cast-float-to-int-and-back/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,55 +12,68 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %f:ptr<function, f32, read_write> = var
     store %f, 142.6999969482421875f
     %5:f32 = load %f
-    %6:i32 = convert %5
-    %7:f32 = convert %6
-    %8:bool = gt %7, 100.0f
-    if %8 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %9:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %10:i32 = load %9
-        %11:f32 = convert %10
-        %12:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %13:i32 = load %12
-        %14:f32 = convert %13
-        %15:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %16:i32 = load %15
-        %17:f32 = convert %16
-        %18:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %6:i32 = call %tint_f32_to_i32, %5
+    %8:f32 = convert %6
+    %9:bool = gt %8, 100.0f
+    if %9 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %10:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %11:i32 = load %10
+        %12:f32 = convert %11
+        %13:f32 = let %12
+        %14:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %15:i32 = load %14
+        %16:f32 = convert %15
+        %17:f32 = let %16
+        %18:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
         %19:i32 = load %18
         %20:f32 = convert %19
-        %21:vec4<f32> = construct %11, %14, %17, %20
-        store %x_GLF_color, %21
-        exit_if  # if_1
-      }
-      %b4 = block {  # false
-        %22:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %21:f32 = let %20
+        %22:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
         %23:i32 = load %22
         %24:f32 = convert %23
-        %25:vec4<f32> = construct %24
+        %25:vec4<f32> = construct %13, %17, %21, %24
         store %x_GLF_color, %25
         exit_if  # if_1
       }
+      $B4: {  # false
+        %26:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %27:i32 = load %26
+        %28:f32 = convert %27
+        %29:vec4<f32> = construct %28
+        store %x_GLF_color, %29
+        exit_if  # if_1
+      }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %27:void = call %main_1
-    %28:vec4<f32> = load %x_GLF_color
-    %29:main_out = construct %28
-    ret %29
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %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 {
+  $B6: {
+    %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
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-cast-float-to-int-and-back/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-cast-float-to-int-and-back/0-opt.wgsl.expected.ir.msl
index fa66a67..17a722e 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-cast-float-to-int-and-back/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-cast-float-to-int-and-back/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,55 +12,75 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %f:ptr<function, f32, read_write> = var
     store %f, 142.6999969482421875f
-    %x_25:f32 = load %f
-    %6:i32 = convert %x_25
-    %7:f32 = convert %6
-    %8:bool = gt %7, 100.0f
-    if %8 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %9:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_33:i32 = load %9
-        %11:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_36:i32 = load %11
-        %13:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_39:i32 = load %13
-        %15:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_42:i32 = load %15
-        %17:f32 = convert %x_33
-        %18:f32 = convert %x_36
-        %19:f32 = convert %x_39
-        %20:f32 = convert %x_42
-        %21:vec4<f32> = construct %17, %18, %19, %20
-        store %x_GLF_color, %21
+    %5:f32 = load %f
+    %x_25:f32 = let %5
+    %7:i32 = call %tint_f32_to_i32, %x_25
+    %9:f32 = convert %7
+    %10:bool = gt %9, 100.0f
+    if %10 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %11:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %12:i32 = load %11
+        %x_33:i32 = let %12
+        %14:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %15:i32 = load %14
+        %x_36:i32 = let %15
+        %17:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %18:i32 = load %17
+        %x_39:i32 = let %18
+        %20:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %21:i32 = load %20
+        %x_42:i32 = let %21
+        %23:f32 = convert %x_33
+        %24:f32 = let %23
+        %25:f32 = convert %x_36
+        %26:f32 = let %25
+        %27:f32 = convert %x_39
+        %28:f32 = let %27
+        %29:f32 = convert %x_42
+        %30:vec4<f32> = construct %24, %26, %28, %29
+        store %x_GLF_color, %30
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %22:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_46:i32 = load %22
-        %x_47:f32 = convert %x_46
-        %25:vec4<f32> = construct %x_47, %x_47, %x_47, %x_47
-        store %x_GLF_color, %25
+      $B4: {  # false
+        %31:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %32:i32 = load %31
+        %x_46:i32 = let %32
+        %34:f32 = convert %x_46
+        %x_47:f32 = let %34
+        %36:vec4<f32> = construct %x_47, %x_47, %x_47, %x_47
+        store %x_GLF_color, %36
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %27:void = call %main_1
-    %28:vec4<f32> = load %x_GLF_color
-    %29:main_out = construct %28
-    ret %29
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %38:void = call %main_1
+    %39:vec4<f32> = load %x_GLF_color
+    %40:main_out = construct %39
+    ret %40
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B6: {
+    %42:i32 = convert %value
+    %43:bool = gte %value, -2147483648.0f
+    %44:i32 = select -2147483648i, %42, %43
+    %45:bool = lte %value, 2147483520.0f
+    %46:i32 = select 2147483647i, %44, %45
+    ret %46
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-clamp-loop-limit-increment-float-array/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-clamp-loop-limit-increment-float-array/0-opt.spvasm.expected.ir.msl
index a4b4880..c1f061a 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-clamp-loop-limit-increment-float-array/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-clamp-loop-limit-increment-float-array/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,14 +20,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_9:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %sums:ptr<function, array<f32, 3>, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %indexable:ptr<function, mat2x4<f32>, read_write> = var
@@ -40,93 +40,103 @@
     %14:array<f32, 3> = construct %9, %11, %13
     store %sums, %14
     store %i, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %15:i32 = load %i
-        %16:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %17:i32 = load %16
-        %18:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %19:i32 = load %18
-        %20:i32 = clamp %17, %19, 2i
-        %21:bool = lt %15, %20
-        if %21 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %16:i32 = let %15
+        %17:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+        %18:i32 = load %17
+        %19:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+        %20:i32 = load %19
+        %21:i32 = max %18, %20
+        %22:i32 = min %21, 2i
+        %23:bool = lt %16, %22
+        if %23 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %22:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
-        %x_59:i32 = load %22
-        %24:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-        %x_61:f32 = load %24
-        %x_65:i32 = load %i
-        %27:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %x_67:i32 = load %27
-        %29:vec4<f32> = construct %x_61, 0.0f, 0.0f, 0.0f
-        %30:vec4<f32> = construct 0.0f, %x_61, 0.0f, 0.0f
-        %31:mat2x4<f32> = construct %29, %30
-        store %indexable, %31
-        %32:ptr<function, f32, read_write> = access %sums, %x_59
-        %33:ptr<function, f32, read_write> = access %sums, %x_59
-        %34:f32 = load %33
-        %35:ptr<function, vec4<f32>, read_write> = access %indexable, %x_65
-        %36:f32 = load_vector_element %35, %x_67
-        %37:f32 = add %34, %36
-        store %32, %37
-        continue %b4
+        %24:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
+        %25:i32 = load %24
+        %x_59:i32 = let %25
+        %27:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+        %28:f32 = load %27
+        %x_61:f32 = let %28
+        %30:i32 = load %i
+        %x_65:i32 = let %30
+        %32:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %33:i32 = load %32
+        %x_67:i32 = let %33
+        %35:vec4<f32> = construct %x_61, 0.0f, 0.0f, 0.0f
+        %36:vec4<f32> = let %35
+        %37:vec4<f32> = construct 0.0f, %x_61, 0.0f, 0.0f
+        %38:mat2x4<f32> = construct %36, %37
+        store %indexable, %38
+        %39:ptr<function, f32, read_write> = access %sums, %x_59
+        %40:ptr<function, f32, read_write> = access %sums, %x_59
+        %41:f32 = load %40
+        %42:ptr<function, vec4<f32>, read_write> = access %indexable, %x_65
+        %43:f32 = load_vector_element %42, %x_67
+        %44:f32 = add %41, %43
+        store %39, %44
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %38:i32 = load %i
-        %39:i32 = add %38, 1i
-        store %i, %39
-        next_iteration %b3
+      $B4: {  # continuing
+        %45:i32 = load %i
+        %46:i32 = add %45, 1i
+        store %i, %46
+        next_iteration  # -> $B3
       }
     }
-    %40:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
-    %41:i32 = load %40
-    %42:ptr<function, f32, read_write> = access %sums, %41
-    %43:f32 = load %42
-    %44:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-    %45:f32 = load %44
-    %46:bool = eq %43, %45
-    if %46 [t: %b7, f: %b8] {  # if_2
-      %b7 = block {  # true
-        %47:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %48:i32 = load %47
-        %49:f32 = convert %48
-        %50:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %51:i32 = load %50
-        %52:f32 = convert %51
-        %53:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %54:i32 = load %53
-        %55:f32 = convert %54
-        %56:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %57:i32 = load %56
-        %58:f32 = convert %57
-        %59:vec4<f32> = construct %49, %52, %55, %58
-        store %x_GLF_color, %59
+    %47:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
+    %48:i32 = load %47
+    %49:ptr<function, f32, read_write> = access %sums, %48
+    %50:f32 = load %49
+    %51:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+    %52:f32 = load %51
+    %53:bool = eq %50, %52
+    if %53 [t: $B7, f: $B8] {  # if_2
+      $B7: {  # true
+        %54:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+        %55:i32 = load %54
+        %56:f32 = convert %55
+        %57:f32 = let %56
+        %58:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %59:i32 = load %58
+        %60:f32 = convert %59
+        %61:f32 = let %60
+        %62:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %63:i32 = load %62
+        %64:f32 = convert %63
+        %65:f32 = let %64
+        %66:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+        %67:i32 = load %66
+        %68:f32 = convert %67
+        %69:vec4<f32> = construct %57, %61, %65, %68
+        store %x_GLF_color, %69
         exit_if  # if_2
       }
-      %b8 = block {  # false
-        %60:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %61:i32 = load %60
-        %62:f32 = convert %61
-        %63:vec4<f32> = construct %62
-        store %x_GLF_color, %63
+      $B8: {  # false
+        %70:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %71:i32 = load %70
+        %72:f32 = convert %71
+        %73:vec4<f32> = construct %72
+        store %x_GLF_color, %73
         exit_if  # if_2
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b9 {
-  %b9 = block {
-    %65:void = call %main_1
-    %66:vec4<f32> = load %x_GLF_color
-    %67:main_out = construct %66
-    ret %67
+%tint_symbol = @fragment func():main_out {
+  $B9: {
+    %75:void = call %main_1
+    %76:vec4<f32> = load %x_GLF_color
+    %77:main_out = construct %76
+    ret %77
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-clamp-loop-limit-increment-float-array/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-clamp-loop-limit-increment-float-array/0-opt.wgsl.expected.ir.msl
index b1382f5..0bc6229 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-clamp-loop-limit-increment-float-array/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-clamp-loop-limit-increment-float-array/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,113 +20,140 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_9:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %sums:ptr<function, array<f32, 3>, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %indexable:ptr<function, mat2x4<f32>, read_write> = var
     %8:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_40:f32 = load %8
-    %10:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_42:f32 = load %10
-    %12:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_44:f32 = load %12
-    %14:array<f32, 3> = construct %x_40, %x_42, %x_44
-    store %sums, %14
+    %9:f32 = load %8
+    %x_40:f32 = let %9
+    %11:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %12:f32 = load %11
+    %x_42:f32 = let %12
+    %14:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %15:f32 = load %14
+    %x_44:f32 = let %15
+    %17:array<f32, 3> = construct %x_40, %x_42, %x_44
+    store %sums, %17
     store %i, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_50:i32 = load %i
-        %16:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %x_52:i32 = load %16
-        %18:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %x_54:i32 = load %18
-        %20:i32 = clamp %x_52, %x_54, 2i
-        %21:bool = lt %x_50, %20
-        if %21 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %18:i32 = load %i
+        %x_50:i32 = let %18
+        %20:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+        %21:i32 = load %20
+        %x_52:i32 = let %21
+        %23:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+        %24:i32 = load %23
+        %x_54:i32 = let %24
+        %26:i32 = max %x_52, %x_54
+        %27:i32 = min %26, 2i
+        %28:bool = lt %x_50, %27
+        if %28 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %22:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
-        %x_59:i32 = load %22
-        %24:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-        %x_61:f32 = load %24
-        %x_65:i32 = load %i
-        %27:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %x_67:i32 = load %27
-        %29:vec4<f32> = construct %x_61, 0.0f, 0.0f, 0.0f
-        %30:vec4<f32> = construct 0.0f, %x_61, 0.0f, 0.0f
-        %31:mat2x4<f32> = construct %29, %30
-        store %indexable, %31
-        %32:ptr<function, vec4<f32>, read_write> = access %indexable, %x_65
-        %x_69:f32 = load_vector_element %32, %x_67
-        %34:ptr<function, f32, read_write> = access %sums, %x_59
-        %x_71:f32 = load %34
-        %36:ptr<function, f32, read_write> = access %sums, %x_59
-        %37:f32 = add %x_71, %x_69
-        store %36, %37
-        continue %b4
+        %29:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
+        %30:i32 = load %29
+        %x_59:i32 = let %30
+        %32:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+        %33:f32 = load %32
+        %x_61:f32 = let %33
+        %35:i32 = load %i
+        %x_65:i32 = let %35
+        %37:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %38:i32 = load %37
+        %x_67:i32 = let %38
+        %40:vec4<f32> = construct %x_61, 0.0f, 0.0f, 0.0f
+        %41:vec4<f32> = let %40
+        %42:vec4<f32> = construct 0.0f, %x_61, 0.0f, 0.0f
+        %43:mat2x4<f32> = construct %41, %42
+        store %indexable, %43
+        %44:ptr<function, vec4<f32>, read_write> = access %indexable, %x_65
+        %45:f32 = load_vector_element %44, %x_67
+        %x_69:f32 = let %45
+        %47:ptr<function, f32, read_write> = access %sums, %x_59
+        %48:f32 = load %47
+        %x_71:f32 = let %48
+        %50:ptr<function, f32, read_write> = access %sums, %x_59
+        %51:f32 = add %x_71, %x_69
+        store %50, %51
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_74:i32 = load %i
-        %39:i32 = add %x_74, 1i
-        store %i, %39
-        next_iteration %b3
+      $B4: {  # continuing
+        %52:i32 = load %i
+        %x_74:i32 = let %52
+        %54:i32 = add %x_74, 1i
+        store %i, %54
+        next_iteration  # -> $B3
       }
     }
-    %40:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
-    %x_77:i32 = load %40
-    %42:ptr<function, f32, read_write> = access %sums, %x_77
-    %x_79:f32 = load %42
-    %44:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-    %x_81:f32 = load %44
-    %46:bool = eq %x_79, %x_81
-    if %46 [t: %b7, f: %b8] {  # if_2
-      %b7 = block {  # true
-        %47:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %x_87:i32 = load %47
-        %49:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %x_90:i32 = load %49
-        %51:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %x_93:i32 = load %51
-        %53:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %x_96:i32 = load %53
-        %55:f32 = convert %x_87
-        %56:f32 = convert %x_90
-        %57:f32 = convert %x_93
-        %58:f32 = convert %x_96
-        %59:vec4<f32> = construct %55, %56, %57, %58
-        store %x_GLF_color, %59
+    %55:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
+    %56:i32 = load %55
+    %x_77:i32 = let %56
+    %58:ptr<function, f32, read_write> = access %sums, %x_77
+    %59:f32 = load %58
+    %x_79:f32 = let %59
+    %61:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+    %62:f32 = load %61
+    %x_81:f32 = let %62
+    %64:bool = eq %x_79, %x_81
+    if %64 [t: $B7, f: $B8] {  # if_2
+      $B7: {  # true
+        %65:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+        %66:i32 = load %65
+        %x_87:i32 = let %66
+        %68:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %69:i32 = load %68
+        %x_90:i32 = let %69
+        %71:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %72:i32 = load %71
+        %x_93:i32 = let %72
+        %74:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+        %75:i32 = load %74
+        %x_96:i32 = let %75
+        %77:f32 = convert %x_87
+        %78:f32 = let %77
+        %79:f32 = convert %x_90
+        %80:f32 = let %79
+        %81:f32 = convert %x_93
+        %82:f32 = let %81
+        %83:f32 = convert %x_96
+        %84:vec4<f32> = construct %78, %80, %82, %83
+        store %x_GLF_color, %84
         exit_if  # if_2
       }
-      %b8 = block {  # false
-        %60:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %x_100:i32 = load %60
-        %x_101:f32 = convert %x_100
-        %63:vec4<f32> = construct %x_101, %x_101, %x_101, %x_101
-        store %x_GLF_color, %63
+      $B8: {  # false
+        %85:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %86:i32 = load %85
+        %x_100:i32 = let %86
+        %88:f32 = convert %x_100
+        %x_101:f32 = let %88
+        %90:vec4<f32> = construct %x_101, %x_101, %x_101, %x_101
+        store %x_GLF_color, %90
         exit_if  # if_2
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b9 {
-  %b9 = block {
-    %65:void = call %main_1
-    %66:vec4<f32> = load %x_GLF_color
-    %67:main_out = construct %66
-    ret %67
+%tint_symbol = @fragment func():main_out {
+  $B9: {
+    %92:void = call %main_1
+    %93:vec4<f32> = load %x_GLF_color
+    %94:main_out = construct %93
+    ret %94
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-clamp-lower-limit-from-always-false/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-clamp-lower-limit-from-always-false/0-opt.spvasm.expected.ir.msl
index 74f3920..a49b0ed 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-clamp-lower-limit-from-always-false/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-clamp-lower-limit-from-always-false/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,64 +20,68 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_7: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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, f32, read_write> = var
     %b:ptr<function, f32, read_write> = var
     store %a, 1.0f
     %7:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
     %8:f32 = load %7
-    %9:f32 = load %a
-    %10:f32 = select 0.0f, %9, false
-    %11:f32 = clamp %8, %10, 1.0f
-    store %b, %11
-    %12:f32 = load %b
-    %13:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
-    %14:f32 = load %13
-    %15:bool = eq %12, %14
-    if %15 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %16:f32 = load %b
-        %17:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-        %18:f32 = load %17
-        %19:f32 = mul %16, %18
-        %20:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %21:i32 = load %20
-        %22:f32 = convert %21
-        %23:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %24:i32 = load %23
-        %25:f32 = convert %24
-        %26:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+    %9:f32 = let %8
+    %10:f32 = load %a
+    %11:f32 = select 0.0f, %10, false
+    %12:f32 = clamp %9, %11, 1.0f
+    store %b, %12
+    %13:f32 = load %b
+    %14:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
+    %15:f32 = load %14
+    %16:bool = eq %13, %15
+    if %16 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %17:f32 = load %b
+        %18:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
+        %19:f32 = load %18
+        %20:f32 = mul %17, %19
+        %21:f32 = let %20
+        %22:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+        %23:i32 = load %22
+        %24:f32 = convert %23
+        %25:f32 = let %24
+        %26:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
         %27:i32 = load %26
         %28:f32 = convert %27
-        %29:vec4<f32> = construct %19, %22, %25, %28
-        store %x_GLF_color, %29
-        exit_if  # if_1
-      }
-      %b4 = block {  # false
-        %30:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+        %29:f32 = let %28
+        %30:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
         %31:i32 = load %30
         %32:f32 = convert %31
-        %33:vec4<f32> = construct %32
+        %33:vec4<f32> = construct %21, %25, %29, %32
         store %x_GLF_color, %33
         exit_if  # if_1
       }
+      $B4: {  # false
+        %34:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+        %35:i32 = load %34
+        %36:f32 = convert %35
+        %37:vec4<f32> = construct %36
+        store %x_GLF_color, %37
+        exit_if  # if_1
+      }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %35:void = call %main_1
-    %36:vec4<f32> = load %x_GLF_color
-    %37:main_out = construct %36
-    ret %37
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %39:void = call %main_1
+    %40:vec4<f32> = load %x_GLF_color
+    %41:main_out = construct %40
+    ret %41
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-clamp-lower-limit-from-always-false/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-clamp-lower-limit-from-always-false/0-opt.wgsl.expected.ir.msl
index 5752f7f..cd54be7 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-clamp-lower-limit-from-always-false/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-clamp-lower-limit-from-always-false/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,64 +20,77 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_7: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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, f32, read_write> = var
     %b:ptr<function, f32, read_write> = var
     store %a, 1.0f
     %7:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
-    %x_33:f32 = load %7
-    %x_34:f32 = load %a
-    %10:f32 = select 0.0f, %x_34, false
-    %11:f32 = clamp %x_33, %10, 1.0f
-    store %b, %11
-    %x_37:f32 = load %b
-    %13:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
-    %x_39:f32 = load %13
-    %15:bool = eq %x_37, %x_39
-    if %15 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %x_44:f32 = load %b
-        %17:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-        %x_46:f32 = load %17
-        %19:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %x_49:i32 = load %19
-        %21:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %x_52:i32 = load %21
-        %23:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %x_55:i32 = load %23
-        %25:f32 = mul %x_44, %x_46
-        %26:f32 = convert %x_49
-        %27:f32 = convert %x_52
-        %28:f32 = convert %x_55
-        %29:vec4<f32> = construct %25, %26, %27, %28
-        store %x_GLF_color, %29
+    %8:f32 = load %7
+    %x_33:f32 = let %8
+    %10:f32 = load %a
+    %x_34:f32 = let %10
+    %12:f32 = select 0.0f, %x_34, false
+    %13:f32 = clamp %x_33, %12, 1.0f
+    store %b, %13
+    %14:f32 = load %b
+    %x_37:f32 = let %14
+    %16:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
+    %17:f32 = load %16
+    %x_39:f32 = let %17
+    %19:bool = eq %x_37, %x_39
+    if %19 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %20:f32 = load %b
+        %x_44:f32 = let %20
+        %22:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
+        %23:f32 = load %22
+        %x_46:f32 = let %23
+        %25:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+        %26:i32 = load %25
+        %x_49:i32 = let %26
+        %28:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+        %29:i32 = load %28
+        %x_52:i32 = let %29
+        %31:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %32:i32 = load %31
+        %x_55:i32 = let %32
+        %34:f32 = mul %x_44, %x_46
+        %35:f32 = convert %x_49
+        %36:f32 = let %35
+        %37:f32 = convert %x_52
+        %38:f32 = let %37
+        %39:f32 = convert %x_55
+        %40:vec4<f32> = construct %34, %36, %38, %39
+        store %x_GLF_color, %40
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %30:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %x_59:i32 = load %30
-        %x_60:f32 = convert %x_59
-        %33:vec4<f32> = construct %x_60, %x_60, %x_60, %x_60
-        store %x_GLF_color, %33
+      $B4: {  # false
+        %41:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+        %42:i32 = load %41
+        %x_59:i32 = let %42
+        %44:f32 = convert %x_59
+        %x_60:f32 = let %44
+        %46:vec4<f32> = construct %x_60, %x_60, %x_60, %x_60
+        store %x_GLF_color, %46
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %35:void = call %main_1
-    %36:vec4<f32> = load %x_GLF_color
-    %37:main_out = construct %36
-    ret %37
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %48:void = call %main_1
+    %49:vec4<f32> = load %x_GLF_color
+    %50:main_out = construct %49
+    ret %50
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-clamp-vector-component-condition-using-matrix/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-clamp-vector-component-condition-using-matrix/0-opt.spvasm.expected.ir.msl
index fe83ec1..27bf85e 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-clamp-vector-component-condition-using-matrix/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-clamp-vector-component-condition-using-matrix/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,143 +20,156 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_9:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %v:ptr<function, vec4<f32>, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %7:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
     %8:i32 = load %7
     %9:f32 = convert %8
-    %10:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %11:i32 = load %10
-    %12:f32 = convert %11
-    %13:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-    %14:i32 = load %13
-    %15:f32 = convert %14
-    %16:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %17:i32 = load %16
-    %18:f32 = convert %17
-    %19:vec4<f32> = construct %9, %12, %15, %18
-    store %v, %19
-    %20:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
-    %21:i32 = load %20
-    store %i, %21
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %22:i32 = load %i
-        %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 = block {  # true
+    %10:f32 = let %9
+    %11:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %12:i32 = load %11
+    %13:f32 = convert %12
+    %14:f32 = let %13
+    %15:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+    %16:i32 = load %15
+    %17:f32 = convert %16
+    %18:f32 = let %17
+    %19:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %20:i32 = load %19
+    %21:f32 = convert %20
+    %22:vec4<f32> = construct %10, %14, %18, %21
+    store %v, %22
+    %23:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
+    %24:i32 = load %23
+    store %i, %24
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %25:i32 = load %i
+        %26:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %27:i32 = load %26
+        %28:bool = lt %25, %27
+        if %28 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %26:f32 = load_vector_element %v, 0u
-        %27:f32 = load_vector_element %v, 1u
-        %28:f32 = load_vector_element %v, 2u
-        %29:f32 = load_vector_element %v, 3u
-        %30:vec4<f32> = construct %26, %27, %28, %29
-        %31:f32 = load_vector_element %v, 0u
-        %32:f32 = load_vector_element %v, 1u
-        %33:f32 = load_vector_element %v, 2u
-        %34:f32 = load_vector_element %v, 3u
-        %35:vec4<f32> = construct %31, %32, %33, %34
-        %36:f32 = load_vector_element %v, 0u
-        %37:f32 = load_vector_element %v, 1u
-        %38:f32 = load_vector_element %v, 2u
-        %39:f32 = load_vector_element %v, 3u
-        %40:vec4<f32> = construct %36, %37, %38, %39
+        %29:f32 = load_vector_element %v, 0u
+        %30:f32 = load_vector_element %v, 1u
+        %31:f32 = load_vector_element %v, 2u
+        %32:f32 = load_vector_element %v, 3u
+        %33:vec4<f32> = construct %29, %30, %31, %32
+        %34:vec4<f32> = let %33
+        %35:f32 = load_vector_element %v, 0u
+        %36:f32 = load_vector_element %v, 1u
+        %37:f32 = load_vector_element %v, 2u
+        %38:f32 = load_vector_element %v, 3u
+        %39:vec4<f32> = construct %35, %36, %37, %38
+        %40:vec4<f32> = let %39
         %41:f32 = load_vector_element %v, 0u
         %42:f32 = load_vector_element %v, 1u
         %43:f32 = load_vector_element %v, 2u
         %44:f32 = load_vector_element %v, 3u
         %45:vec4<f32> = construct %41, %42, %43, %44
-        %46:mat4x4<f32> = construct %30, %35, %40, %45
-        %47:i32 = load %i
-        %48:f32 = access %46, 0u, %47
-        %49:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
-        %50:f32 = load %49
-        %51:bool = gt %48, %50
-        if %51 [t: %b7] {  # if_2
-          %b7 = block {  # true
-            %x_96:i32 = load %i
-            %53:vec4<f32> = load %v
-            %54:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
-            %55:f32 = load %54
-            %56:vec4<f32> = construct %55
-            %57:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
-            %58:f32 = load %57
-            %59:vec4<f32> = construct %58
-            %60:vec4<f32> = clamp %53, %56, %59
-            %61:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-            %62:i32 = load %61
-            %63:f32 = access %60, %62
-            store_vector_element %v, %x_96, %63
+        %46:vec4<f32> = let %45
+        %47:f32 = load_vector_element %v, 0u
+        %48:f32 = load_vector_element %v, 1u
+        %49:f32 = load_vector_element %v, 2u
+        %50:f32 = load_vector_element %v, 3u
+        %51:vec4<f32> = construct %47, %48, %49, %50
+        %52:mat4x4<f32> = construct %34, %40, %46, %51
+        %53:i32 = load %i
+        %54:f32 = access %52, 0u, %53
+        %55:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
+        %56:f32 = load %55
+        %57:bool = gt %54, %56
+        if %57 [t: $B7] {  # if_2
+          $B7: {  # true
+            %58:i32 = load %i
+            %x_96:i32 = let %58
+            %60:vec4<f32> = load %v
+            %61:vec4<f32> = let %60
+            %62:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
+            %63:f32 = load %62
+            %64:vec4<f32> = construct %63
+            %65:vec4<f32> = let %64
+            %66:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
+            %67:f32 = load %66
+            %68:vec4<f32> = construct %67
+            %69:vec4<f32> = clamp %61, %65, %68
+            %70:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+            %71:i32 = load %70
+            %72:f32 = access %69, %71
+            store_vector_element %v, %x_96, %72
             exit_if  # if_2
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %64:i32 = load %i
-        %65:i32 = add %64, 1i
-        store %i, %65
-        next_iteration %b3
+      $B4: {  # continuing
+        %73:i32 = load %i
+        %74:i32 = add %73, 1i
+        store %i, %74
+        next_iteration  # -> $B3
       }
     }
-    %66:vec4<f32> = load %v
-    %67:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %68:i32 = load %67
-    %69:f32 = convert %68
-    %70:vec4<f32> = construct %69
-    %71:vec4<bool> = eq %66, %70
-    %72:bool = all %71
-    if %72 [t: %b8, f: %b9] {  # if_3
-      %b8 = block {  # true
-        %73:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %74:i32 = load %73
-        %75:f32 = convert %74
-        %76:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
-        %77:i32 = load %76
-        %78:f32 = convert %77
-        %79:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
-        %80:i32 = load %79
-        %81:f32 = convert %80
-        %82:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %83:i32 = load %82
-        %84:f32 = convert %83
-        %85:vec4<f32> = construct %75, %78, %81, %84
-        store %x_GLF_color, %85
+    %75:vec4<f32> = load %v
+    %76:vec4<f32> = let %75
+    %77:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %78:i32 = load %77
+    %79:f32 = convert %78
+    %80:vec4<f32> = construct %79
+    %81:vec4<bool> = eq %76, %80
+    %82:bool = all %81
+    if %82 [t: $B8, f: $B9] {  # if_3
+      $B8: {  # true
+        %83:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %84:i32 = load %83
+        %85:f32 = convert %84
+        %86:f32 = let %85
+        %87:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
+        %88:i32 = load %87
+        %89:f32 = convert %88
+        %90:f32 = let %89
+        %91:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
+        %92:i32 = load %91
+        %93:f32 = convert %92
+        %94:f32 = let %93
+        %95:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %96:i32 = load %95
+        %97:f32 = convert %96
+        %98:vec4<f32> = construct %86, %90, %94, %97
+        store %x_GLF_color, %98
         exit_if  # if_3
       }
-      %b9 = block {  # false
-        %86:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
-        %87:i32 = load %86
-        %88:f32 = convert %87
-        %89:vec4<f32> = construct %88
-        store %x_GLF_color, %89
+      $B9: {  # false
+        %99:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
+        %100:i32 = load %99
+        %101:f32 = convert %100
+        %102:vec4<f32> = construct %101
+        store %x_GLF_color, %102
         exit_if  # if_3
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b10 {
-  %b10 = block {
-    %91:void = call %main_1
-    %92:vec4<f32> = load %x_GLF_color
-    %93:main_out = construct %92
-    ret %93
+%tint_symbol = @fragment func():main_out {
+  $B10: {
+    %104:void = call %main_1
+    %105:vec4<f32> = load %x_GLF_color
+    %106:main_out = construct %105
+    ret %106
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-clamp-vector-component-condition-using-matrix/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-clamp-vector-component-condition-using-matrix/0-opt.wgsl.expected.ir.msl
index 203245d..98664db 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-clamp-vector-component-condition-using-matrix/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-clamp-vector-component-condition-using-matrix/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,147 +20,185 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_9:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %v:ptr<function, vec4<f32>, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %7:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_40:i32 = load %7
-    %9:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_43:i32 = load %9
-    %11:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-    %x_46:i32 = load %11
-    %13:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_49:i32 = load %13
-    %15:f32 = convert %x_40
-    %16:f32 = convert %x_43
-    %17:f32 = convert %x_46
-    %18:f32 = convert %x_49
-    %19:vec4<f32> = construct %15, %16, %17, %18
-    store %v, %19
-    %20:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
-    %x_53:i32 = load %20
+    %8:i32 = load %7
+    %x_40:i32 = let %8
+    %10:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %11:i32 = load %10
+    %x_43:i32 = let %11
+    %13:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+    %14:i32 = load %13
+    %x_46:i32 = let %14
+    %16:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %17:i32 = load %16
+    %x_49:i32 = let %17
+    %19:f32 = convert %x_40
+    %20:f32 = let %19
+    %21:f32 = convert %x_43
+    %22:f32 = let %21
+    %23:f32 = convert %x_46
+    %24:f32 = let %23
+    %25:f32 = convert %x_49
+    %26:vec4<f32> = construct %20, %22, %24, %25
+    store %v, %26
+    %27:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
+    %28:i32 = load %27
+    %x_53:i32 = let %28
     store %i, %x_53
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_58:i32 = load %i
-        %23:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_60:i32 = load %23
-        %25:bool = lt %x_58, %x_60
-        if %25 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %30:i32 = load %i
+        %x_58:i32 = let %30
+        %32:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %33:i32 = load %32
+        %x_60:i32 = let %33
+        %35:bool = lt %x_58, %x_60
+        if %35 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_63:vec4<f32> = load %v
-        %x_64:vec4<f32> = load %v
-        %x_65:vec4<f32> = load %v
-        %x_66:vec4<f32> = load %v
-        %x_88:i32 = load %i
-        %31:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
-        %x_92:f32 = load %31
-        %33:f32 = access %x_63, 0u
-        %34:f32 = access %x_63, 1u
-        %35:f32 = access %x_63, 2u
-        %36:f32 = access %x_63, 3u
-        %37:vec4<f32> = construct %33, %34, %35, %36
-        %38:f32 = access %x_64, 0u
-        %39:f32 = access %x_64, 1u
-        %40:f32 = access %x_64, 2u
-        %41:f32 = access %x_64, 3u
-        %42:vec4<f32> = construct %38, %39, %40, %41
-        %43:f32 = access %x_65, 0u
-        %44:f32 = access %x_65, 1u
-        %45:f32 = access %x_65, 2u
-        %46:f32 = access %x_65, 3u
-        %47:vec4<f32> = construct %43, %44, %45, %46
-        %48:f32 = access %x_66, 0u
-        %49:f32 = access %x_66, 1u
-        %50:f32 = access %x_66, 2u
-        %51:f32 = access %x_66, 3u
-        %52:vec4<f32> = construct %48, %49, %50, %51
-        %53:mat4x4<f32> = construct %37, %42, %47, %52
-        %54:f32 = access %53, 0u, %x_88
-        %55:bool = gt %54, %x_92
-        if %55 [t: %b7] {  # if_2
-          %b7 = block {  # true
-            %x_96:i32 = load %i
-            %x_97:vec4<f32> = load %v
-            %58:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
-            %x_99:f32 = load %58
-            %60:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
-            %x_102:f32 = load %60
-            %62:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-            %x_106:i32 = load %62
-            %64:vec4<f32> = construct %x_99, %x_99, %x_99, %x_99
-            %65:vec4<f32> = construct %x_102, %x_102, %x_102, %x_102
-            %66:vec4<f32> = clamp %x_97, %64, %65
-            %67:f32 = access %66, %x_106
-            store_vector_element %v, %x_96, %67
+        %36:vec4<f32> = load %v
+        %x_63:vec4<f32> = let %36
+        %38:vec4<f32> = load %v
+        %x_64:vec4<f32> = let %38
+        %40:vec4<f32> = load %v
+        %x_65:vec4<f32> = let %40
+        %42:vec4<f32> = load %v
+        %x_66:vec4<f32> = let %42
+        %44:i32 = load %i
+        %x_88:i32 = let %44
+        %46:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
+        %47:f32 = load %46
+        %x_92:f32 = let %47
+        %49:f32 = access %x_63, 0u
+        %50:f32 = access %x_63, 1u
+        %51:f32 = access %x_63, 2u
+        %52:f32 = access %x_63, 3u
+        %53:vec4<f32> = construct %49, %50, %51, %52
+        %54:vec4<f32> = let %53
+        %55:f32 = access %x_64, 0u
+        %56:f32 = access %x_64, 1u
+        %57:f32 = access %x_64, 2u
+        %58:f32 = access %x_64, 3u
+        %59:vec4<f32> = construct %55, %56, %57, %58
+        %60:vec4<f32> = let %59
+        %61:f32 = access %x_65, 0u
+        %62:f32 = access %x_65, 1u
+        %63:f32 = access %x_65, 2u
+        %64:f32 = access %x_65, 3u
+        %65:vec4<f32> = construct %61, %62, %63, %64
+        %66:vec4<f32> = let %65
+        %67:f32 = access %x_66, 0u
+        %68:f32 = access %x_66, 1u
+        %69:f32 = access %x_66, 2u
+        %70:f32 = access %x_66, 3u
+        %71:vec4<f32> = construct %67, %68, %69, %70
+        %72:mat4x4<f32> = construct %54, %60, %66, %71
+        %73:f32 = access %72, 0u, %x_88
+        %74:bool = gt %73, %x_92
+        if %74 [t: $B7] {  # if_2
+          $B7: {  # true
+            %75:i32 = load %i
+            %x_96:i32 = let %75
+            %77:vec4<f32> = load %v
+            %x_97:vec4<f32> = let %77
+            %79:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
+            %80:f32 = load %79
+            %x_99:f32 = let %80
+            %82:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
+            %83:f32 = load %82
+            %x_102:f32 = let %83
+            %85:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+            %86:i32 = load %85
+            %x_106:i32 = let %86
+            %88:vec4<f32> = construct %x_99, %x_99, %x_99, %x_99
+            %89:vec4<f32> = let %88
+            %90:vec4<f32> = construct %x_102, %x_102, %x_102, %x_102
+            %91:vec4<f32> = clamp %x_97, %89, %90
+            %92:f32 = access %91, %x_106
+            store_vector_element %v, %x_96, %92
             exit_if  # if_2
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_109:i32 = load %i
-        %69:i32 = add %x_109, 1i
-        store %i, %69
-        next_iteration %b3
+      $B4: {  # continuing
+        %93:i32 = load %i
+        %x_109:i32 = let %93
+        %95:i32 = add %x_109, 1i
+        store %i, %95
+        next_iteration  # -> $B3
       }
     }
-    %x_111:vec4<f32> = load %v
-    %71:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_113:i32 = load %71
-    %x_114:f32 = convert %x_113
-    %74:vec4<f32> = construct %x_114, %x_114, %x_114, %x_114
-    %75:vec4<bool> = eq %x_111, %74
-    %76:bool = all %75
-    if %76 [t: %b8, f: %b9] {  # if_3
-      %b8 = block {  # true
-        %77:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_122:i32 = load %77
-        %79:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
-        %x_125:i32 = load %79
-        %81:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
-        %x_128:i32 = load %81
-        %83:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_131:i32 = load %83
-        %85:f32 = convert %x_122
-        %86:f32 = convert %x_125
-        %87:f32 = convert %x_128
-        %88:f32 = convert %x_131
-        %89:vec4<f32> = construct %85, %86, %87, %88
-        store %x_GLF_color, %89
+    %96:vec4<f32> = load %v
+    %x_111:vec4<f32> = let %96
+    %98:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %99:i32 = load %98
+    %x_113:i32 = let %99
+    %101:f32 = convert %x_113
+    %x_114:f32 = let %101
+    %103:vec4<f32> = construct %x_114, %x_114, %x_114, %x_114
+    %104:vec4<bool> = eq %x_111, %103
+    %105:bool = all %104
+    if %105 [t: $B8, f: $B9] {  # if_3
+      $B8: {  # true
+        %106:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %107:i32 = load %106
+        %x_122:i32 = let %107
+        %109:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
+        %110:i32 = load %109
+        %x_125:i32 = let %110
+        %112:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
+        %113:i32 = load %112
+        %x_128:i32 = let %113
+        %115:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %116:i32 = load %115
+        %x_131:i32 = let %116
+        %118:f32 = convert %x_122
+        %119:f32 = let %118
+        %120:f32 = convert %x_125
+        %121:f32 = let %120
+        %122:f32 = convert %x_128
+        %123:f32 = let %122
+        %124:f32 = convert %x_131
+        %125:vec4<f32> = construct %119, %121, %123, %124
+        store %x_GLF_color, %125
         exit_if  # if_3
       }
-      %b9 = block {  # false
-        %90:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
-        %x_135:i32 = load %90
-        %x_136:f32 = convert %x_135
-        %93:vec4<f32> = construct %x_136, %x_136, %x_136, %x_136
-        store %x_GLF_color, %93
+      $B9: {  # false
+        %126:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
+        %127:i32 = load %126
+        %x_135:i32 = let %127
+        %129:f32 = convert %x_135
+        %x_136:f32 = let %129
+        %131:vec4<f32> = construct %x_136, %x_136, %x_136, %x_136
+        store %x_GLF_color, %131
         exit_if  # if_3
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b10 {
-  %b10 = block {
-    %95:void = call %main_1
-    %96:vec4<f32> = load %x_GLF_color
-    %97:main_out = construct %96
-    ret %97
+%tint_symbol = @fragment func():main_out {
+  $B10: {
+    %133:void = call %main_1
+    %134:vec4<f32> = load %x_GLF_color
+    %135:main_out = construct %134
+    ret %135
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-clamp-vector-element-ceil-negative/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-clamp-vector-element-ceil-negative/0-opt.spvasm.expected.ir.msl
index 234af99..e8e1e22 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-clamp-vector-element-ceil-negative/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-clamp-vector-element-ceil-negative/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,14 +20,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %v0:ptr<function, vec2<f32>, read_write> = var
     %v1:ptr<function, vec2<f32>, read_write> = var
     %7:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
@@ -36,53 +36,57 @@
     store %v0, %9
     %10:vec2<f32> = load %v0
     %11:vec2<f32> = ceil %10
-    %12:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %13:f32 = load %12
-    %14:f32 = negation %13
-    %15:vec2<f32> = construct %14
-    %16:vec2<f32> = clamp %11, %15, vec2<f32>(100.0f)
-    store %v1, %16
-    %17:f32 = load_vector_element %v1, 1u
-    %18:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %19:f32 = load %18
-    %20:f32 = negation %19
-    %21:bool = eq %17, %20
-    if %21 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %22:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %23:i32 = load %22
-        %24:f32 = convert %23
-        %25:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %26:i32 = load %25
-        %27:f32 = convert %26
-        %28:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %29:i32 = load %28
-        %30:f32 = convert %29
-        %31:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+    %12:vec2<f32> = let %11
+    %13:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %14:f32 = load %13
+    %15:f32 = negation %14
+    %16:vec2<f32> = construct %15
+    %17:vec2<f32> = clamp %12, %16, vec2<f32>(100.0f)
+    store %v1, %17
+    %18:f32 = load_vector_element %v1, 1u
+    %19:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %20:f32 = load %19
+    %21:f32 = negation %20
+    %22:bool = eq %18, %21
+    if %22 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %23:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+        %24:i32 = load %23
+        %25:f32 = convert %24
+        %26:f32 = let %25
+        %27:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %28:i32 = load %27
+        %29:f32 = convert %28
+        %30:f32 = let %29
+        %31:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
         %32:i32 = load %31
         %33:f32 = convert %32
-        %34:vec4<f32> = construct %24, %27, %30, %33
-        store %x_GLF_color, %34
-        exit_if  # if_1
-      }
-      %b4 = block {  # false
-        %35:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %34:f32 = let %33
+        %35:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
         %36:i32 = load %35
         %37:f32 = convert %36
-        %38:vec4<f32> = construct %37
+        %38:vec4<f32> = construct %26, %30, %34, %37
         store %x_GLF_color, %38
         exit_if  # if_1
       }
+      $B4: {  # false
+        %39:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %40:i32 = load %39
+        %41:f32 = convert %40
+        %42:vec4<f32> = construct %41
+        store %x_GLF_color, %42
+        exit_if  # if_1
+      }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %40:void = call %main_1
-    %41:vec4<f32> = load %x_GLF_color
-    %42:main_out = construct %41
-    ret %42
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %44:void = call %main_1
+    %45:vec4<f32> = load %x_GLF_color
+    %46:main_out = construct %45
+    ret %46
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-clamp-vector-element-ceil-negative/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-clamp-vector-element-ceil-negative/0-opt.wgsl.expected.ir.msl
index 7227d5a..f28dec6 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-clamp-vector-element-ceil-negative/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-clamp-vector-element-ceil-negative/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,69 +20,85 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %v0:ptr<function, vec2<f32>, read_write> = var
     %v1:ptr<function, vec2<f32>, read_write> = var
     %7:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-    %x_36:f32 = load %7
-    %9:vec2<f32> = construct %x_36, -580.0150146484375f
-    store %v0, %9
-    %x_38:vec2<f32> = load %v0
-    %11:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_41:f32 = load %11
-    %x_42:f32 = negation %x_41
-    %14:vec2<f32> = ceil %x_38
-    %15:vec2<f32> = construct %x_42, %x_42
-    %16:vec2<f32> = clamp %14, %15, vec2<f32>(100.0f)
-    store %v1, %16
-    %x_46:f32 = load_vector_element %v1, 1u
-    %18:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_48:f32 = load %18
-    %20:f32 = negation %x_48
-    %21:bool = eq %x_46, %20
-    if %21 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %22:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %x_55:i32 = load %22
-        %24:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %x_58:i32 = load %24
-        %26:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %x_61:i32 = load %26
-        %28:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %x_64:i32 = load %28
-        %30:f32 = convert %x_55
-        %31:f32 = convert %x_58
-        %32:f32 = convert %x_61
-        %33:f32 = convert %x_64
-        %34:vec4<f32> = construct %30, %31, %32, %33
-        store %x_GLF_color, %34
+    %8:f32 = load %7
+    %x_36:f32 = let %8
+    %10:vec2<f32> = construct %x_36, -580.0150146484375f
+    store %v0, %10
+    %11:vec2<f32> = load %v0
+    %x_38:vec2<f32> = let %11
+    %13:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %14:f32 = load %13
+    %x_41:f32 = let %14
+    %16:f32 = negation %x_41
+    %x_42:f32 = let %16
+    %18:vec2<f32> = ceil %x_38
+    %19:vec2<f32> = let %18
+    %20:vec2<f32> = construct %x_42, %x_42
+    %21:vec2<f32> = clamp %19, %20, vec2<f32>(100.0f)
+    store %v1, %21
+    %22:f32 = load_vector_element %v1, 1u
+    %x_46:f32 = let %22
+    %24:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %25:f32 = load %24
+    %x_48:f32 = let %25
+    %27:f32 = negation %x_48
+    %28:bool = eq %x_46, %27
+    if %28 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %29:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+        %30:i32 = load %29
+        %x_55:i32 = let %30
+        %32:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %33:i32 = load %32
+        %x_58:i32 = let %33
+        %35:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %36:i32 = load %35
+        %x_61:i32 = let %36
+        %38:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+        %39:i32 = load %38
+        %x_64:i32 = let %39
+        %41:f32 = convert %x_55
+        %42:f32 = let %41
+        %43:f32 = convert %x_58
+        %44:f32 = let %43
+        %45:f32 = convert %x_61
+        %46:f32 = let %45
+        %47:f32 = convert %x_64
+        %48:vec4<f32> = construct %42, %44, %46, %47
+        store %x_GLF_color, %48
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %35:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %x_68:i32 = load %35
-        %x_69:f32 = convert %x_68
-        %38:vec4<f32> = construct %x_69, %x_69, %x_69, %x_69
-        store %x_GLF_color, %38
+      $B4: {  # false
+        %49:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %50:i32 = load %49
+        %x_68:i32 = let %50
+        %52:f32 = convert %x_68
+        %x_69:f32 = let %52
+        %54:vec4<f32> = construct %x_69, %x_69, %x_69, %x_69
+        store %x_GLF_color, %54
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %40:void = call %main_1
-    %41:vec4<f32> = load %x_GLF_color
-    %42:main_out = construct %41
-    ret %42
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %56:void = call %main_1
+    %57:vec4<f32> = load %x_GLF_color
+    %58:main_out = construct %57
+    ret %58
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-clamp-vector-variable-negative-offset/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-clamp-vector-variable-negative-offset/0-opt.spvasm.expected.ir.msl
index a3d3f99..d2fcbbd 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-clamp-vector-variable-negative-offset/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-clamp-vector-variable-negative-offset/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,14 +20,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %v0:ptr<function, vec2<f32>, read_write> = var
     %v1:ptr<function, vec2<f32>, read_write> = var
     %7:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
@@ -36,55 +36,60 @@
     store %v0, %9
     %10:vec2<f32> = load %v0
     %11:vec2<f32> = sub %10, vec2<f32>(1.0f)
-    %12:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-    %13:f32 = load %12
-    %14:vec2<f32> = construct %13
-    %15:vec2<f32> = clamp %11, vec2<f32>(0.0f), %14
-    store %v1, %15
-    %16:vec2<f32> = load %v1
-    %17:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %18:f32 = load %17
-    %19:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+    %12:vec2<f32> = let %11
+    %13:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+    %14:f32 = load %13
+    %15:vec2<f32> = construct %14
+    %16:vec2<f32> = clamp %12, vec2<f32>(0.0f), %15
+    store %v1, %16
+    %17:vec2<f32> = load %v1
+    %18:vec2<f32> = let %17
+    %19:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
     %20:f32 = load %19
-    %21:vec2<f32> = construct %18, %20
-    %22:vec2<bool> = eq %16, %21
-    %23:bool = all %22
-    if %23 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %24:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %25:i32 = load %24
-        %26:f32 = convert %25
-        %27:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %28:i32 = load %27
-        %29:f32 = convert %28
+    %21:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+    %22:f32 = load %21
+    %23:vec2<f32> = construct %20, %22
+    %24:vec2<bool> = eq %18, %23
+    %25:bool = all %24
+    if %25 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %26:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+        %27:i32 = load %26
+        %28:f32 = convert %27
+        %29:f32 = let %28
         %30:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
         %31:i32 = load %30
         %32:f32 = convert %31
-        %33:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %34:i32 = load %33
-        %35:f32 = convert %34
-        %36:vec4<f32> = construct %26, %29, %32, %35
-        store %x_GLF_color, %36
+        %33:f32 = let %32
+        %34:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %35:i32 = load %34
+        %36:f32 = convert %35
+        %37:f32 = let %36
+        %38:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+        %39:i32 = load %38
+        %40:f32 = convert %39
+        %41:vec4<f32> = construct %29, %33, %37, %40
+        store %x_GLF_color, %41
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %37:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %38:i32 = load %37
-        %39:f32 = convert %38
-        %40:vec4<f32> = construct %39
-        store %x_GLF_color, %40
+      $B4: {  # false
+        %42:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %43:i32 = load %42
+        %44:f32 = convert %43
+        %45:vec4<f32> = construct %44
+        store %x_GLF_color, %45
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %42:void = call %main_1
-    %43:vec4<f32> = load %x_GLF_color
-    %44:main_out = construct %43
-    ret %44
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %47:void = call %main_1
+    %48:vec4<f32> = load %x_GLF_color
+    %49:main_out = construct %48
+    ret %49
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-clamp-vector-variable-negative-offset/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-clamp-vector-variable-negative-offset/0-opt.wgsl.expected.ir.msl
index 02f689a..6e6ecf5 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-clamp-vector-variable-negative-offset/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-clamp-vector-variable-negative-offset/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,71 +20,86 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %v0:ptr<function, vec2<f32>, read_write> = var
     %v1:ptr<function, vec2<f32>, read_write> = var
     %7:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
-    %x_37:f32 = load %7
-    %9:vec2<f32> = construct %x_37, 3.79999995231628417969f
-    store %v0, %9
-    %x_39:vec2<f32> = load %v0
-    %11:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-    %x_43:f32 = load %11
-    %13:vec2<f32> = sub %x_39, vec2<f32>(1.0f)
-    %14:vec2<f32> = construct %x_43, %x_43
-    %15:vec2<f32> = clamp %13, vec2<f32>(0.0f), %14
-    store %v1, %15
-    %x_47:vec2<f32> = load %v1
-    %17:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_49:f32 = load %17
-    %19:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-    %x_51:f32 = load %19
-    %21:vec2<f32> = construct %x_49, %x_51
-    %22:vec2<bool> = eq %x_47, %21
-    %23:bool = all %22
-    if %23 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %24:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %x_59:i32 = load %24
-        %26:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %x_62:i32 = load %26
-        %28:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %x_65:i32 = load %28
+    %8:f32 = load %7
+    %x_37:f32 = let %8
+    %10:vec2<f32> = construct %x_37, 3.79999995231628417969f
+    store %v0, %10
+    %11:vec2<f32> = load %v0
+    %x_39:vec2<f32> = let %11
+    %13:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+    %14:f32 = load %13
+    %x_43:f32 = let %14
+    %16:vec2<f32> = sub %x_39, vec2<f32>(1.0f)
+    %17:vec2<f32> = construct %x_43, %x_43
+    %18:vec2<f32> = clamp %16, vec2<f32>(0.0f), %17
+    store %v1, %18
+    %19:vec2<f32> = load %v1
+    %x_47:vec2<f32> = let %19
+    %21:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %22:f32 = load %21
+    %x_49:f32 = let %22
+    %24:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+    %25:f32 = load %24
+    %x_51:f32 = let %25
+    %27:vec2<f32> = construct %x_49, %x_51
+    %28:vec2<bool> = eq %x_47, %27
+    %29:bool = all %28
+    if %29 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         %30:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %x_68:i32 = load %30
-        %32:f32 = convert %x_59
-        %33:f32 = convert %x_62
-        %34:f32 = convert %x_65
-        %35:f32 = convert %x_68
-        %36:vec4<f32> = construct %32, %33, %34, %35
-        store %x_GLF_color, %36
+        %31:i32 = load %30
+        %x_59:i32 = let %31
+        %33:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %34:i32 = load %33
+        %x_62:i32 = let %34
+        %36:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %37:i32 = load %36
+        %x_65:i32 = let %37
+        %39:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+        %40:i32 = load %39
+        %x_68:i32 = let %40
+        %42:f32 = convert %x_59
+        %43:f32 = let %42
+        %44:f32 = convert %x_62
+        %45:f32 = let %44
+        %46:f32 = convert %x_65
+        %47:f32 = let %46
+        %48:f32 = convert %x_68
+        %49:vec4<f32> = construct %43, %45, %47, %48
+        store %x_GLF_color, %49
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %37:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %x_72:i32 = load %37
-        %x_73:f32 = convert %x_72
-        %40:vec4<f32> = construct %x_73, %x_73, %x_73, %x_73
-        store %x_GLF_color, %40
+      $B4: {  # false
+        %50:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %51:i32 = load %50
+        %x_72:i32 = let %51
+        %53:f32 = convert %x_72
+        %x_73:f32 = let %53
+        %55:vec4<f32> = construct %x_73, %x_73, %x_73, %x_73
+        store %x_GLF_color, %55
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %42:void = call %main_1
-    %43:vec4<f32> = load %x_GLF_color
-    %44:main_out = construct %43
-    ret %44
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %57:void = call %main_1
+    %58:vec4<f32> = load %x_GLF_color
+    %59:main_out = construct %58
+    ret %59
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-clear-yz-inside-condition/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-clear-yz-inside-condition/0-opt.spvasm.expected.ir.msl
index e3d58bc..0cc2753 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-clear-yz-inside-condition/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-clear-yz-inside-condition/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -16,72 +16,81 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_9:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %v0:ptr<function, vec2<f32>, read_write> = var
     %v1:ptr<function, vec4<f32>, read_write> = var
     %x_57:ptr<function, vec4<f32>, read_write> = var
-    %8:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %9:f32 = load %8
-    %10:vec2<f32> = construct %9
-    store %v0, %10
-    %11:f32 = load_vector_element %v0, 0u
-    %x_36:vec4<f32> = construct %11
+    %9:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %10:f32 = load %9
+    %11:vec2<f32> = construct %10
+    store %v0, %11
+    %12:f32 = load_vector_element %v0, 0u
+    %13:vec4<f32> = construct %12
+    %x_36:vec4<f32> = let %13
     store %v1, %x_36
-    %13:ptr<uniform, f32, read> = access %x_9, 0u
-    %14:f32 = load %13
-    %15:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %15:ptr<uniform, f32, read> = access %x_9, 0u
     %16:f32 = load %15
-    %17:bool = eq %14, %16
-    %18:bool = eq %17, false
-    if %18 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %19:ptr<uniform, f32, read> = access %x_9, 0u
-        %20:f32 = load %19
-        %21:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+    %17:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %18:f32 = load %17
+    %19:bool = eq %16, %18
+    %20:bool = eq %19, false
+    if %20 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %21:ptr<uniform, f32, read> = access %x_9, 0u
         %22:f32 = load %21
-        %23:bool = eq %20, %22
-        if %23 [t: %b5] {  # if_2
-          %b5 = block {  # true
+        %23:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+        %24:f32 = load %23
+        %25:bool = eq %22, %24
+        if %25 [t: $B5] {  # if_2
+          $B5: {  # true
             ret
           }
         }
-        %24:f32 = access %x_36, 0u
-        %25:vec2<f32> = swizzle %x_36, yz
-        %26:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-        %27:f32 = load %26
-        %28:vec2<f32> = construct %27
-        %29:vec2<f32> = sub %25, %28
-        %30:vec2<f32> = swizzle %29, xy
-        %31:f32 = access %x_36, 3u
-        %32:vec4<f32> = construct %24, %30, %31
-        store %x_57, %32
-        %33:vec4<f32> = load %x_57
-        store %v1, %33
+        %26:f32 = access %x_36, 0u
+        %27:vec2<f32> = swizzle %x_36, yz
+        %28:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+        %29:f32 = load %28
+        %30:vec2<f32> = construct %29
+        %31:vec2<f32> = sub %27, %30
+        %32:vec2<f32> = swizzle %31, xy
+        %33:f32 = access %x_36, 3u
+        %34:vec4<f32> = construct %26, %32, %33
+        store %x_57, %34
+        %35:vec4<f32> = load %x_57
+        store %v1, %35
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        discard
+      $B4: {  # false
+        store %continue_execution, false
         exit_if  # if_1
       }
     }
-    %34:vec4<f32> = load %x_57
-    store %x_GLF_color, %34
+    %36:vec4<f32> = load %x_57
+    store %x_GLF_color, %36
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b6 {
-  %b6 = block {
-    %36:void = call %main_1
-    %37:vec4<f32> = load %x_GLF_color
-    %38:main_out = construct %37
-    ret %38
+%tint_symbol = @fragment func():main_out {
+  $B6: {
+    %38:void = call %main_1
+    %39:vec4<f32> = load %x_GLF_color
+    %40:main_out = construct %39
+    %41:bool = load %continue_execution
+    %42:bool = eq %41, false
+    if %42 [t: $B7] {  # if_3
+      $B7: {  # true
+        terminate_invocation
+      }
+    }
+    ret %40
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-clear-yz-inside-condition/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-clear-yz-inside-condition/0-opt.wgsl.expected.ir.msl
index 58e9bb9..68dd348 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-clear-yz-inside-condition/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-clear-yz-inside-condition/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -16,75 +16,93 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_9:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %v0:ptr<function, vec2<f32>, read_write> = var
     %v1:ptr<function, vec4<f32>, read_write> = var
     %x_57:ptr<function, vec4<f32>, read_write> = var
-    %8:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_32:f32 = load %8
-    %10:vec2<f32> = construct %x_32, %x_32
-    store %v0, %10
-    %x_35:f32 = load_vector_element %v0, 0u
-    %x_36:vec4<f32> = construct %x_35, %x_35, %x_35, %x_35
+    %9:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %10:f32 = load %9
+    %x_32:f32 = let %10
+    %12:vec2<f32> = construct %x_32, %x_32
+    store %v0, %12
+    %13:f32 = load_vector_element %v0, 0u
+    %x_35:f32 = let %13
+    %15:vec4<f32> = construct %x_35, %x_35, %x_35, %x_35
+    %x_36:vec4<f32> = let %15
     store %v1, %x_36
-    %13:ptr<uniform, f32, read> = access %x_9, 0u
-    %x_38:f32 = load %13
-    %15:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_40:f32 = load %15
-    %17:bool = eq %x_38, %x_40
-    %18:bool = eq %17, false
-    if %18 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %19:ptr<uniform, f32, read> = access %x_9, 0u
-        %x_46:f32 = load %19
-        %21:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-        %x_48:f32 = load %21
-        %23:bool = eq %x_46, %x_48
-        if %23 [t: %b5] {  # if_2
-          %b5 = block {  # true
+    %17:ptr<uniform, f32, read> = access %x_9, 0u
+    %18:f32 = load %17
+    %x_38:f32 = let %18
+    %20:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %21:f32 = load %20
+    %x_40:f32 = let %21
+    %23:bool = eq %x_38, %x_40
+    %24:bool = eq %23, false
+    if %24 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %25:ptr<uniform, f32, read> = access %x_9, 0u
+        %26:f32 = load %25
+        %x_46:f32 = let %26
+        %28:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+        %29:f32 = load %28
+        %x_48:f32 = let %29
+        %31:bool = eq %x_46, %x_48
+        if %31 [t: $B5] {  # if_2
+          $B5: {  # true
             ret
           }
         }
-        %24:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-        %x_53:f32 = load %24
-        %26:f32 = access %x_36, 1u
-        %27:f32 = access %x_36, 2u
-        %28:vec2<f32> = construct %26, %27
-        %29:vec2<f32> = construct %x_53, %x_53
-        %x_56:vec2<f32> = sub %28, %29
-        %31:f32 = access %x_36, 0u
-        %32:f32 = access %x_56, 0u
-        %33:f32 = access %x_56, 1u
-        %34:f32 = access %x_36, 3u
-        %35:vec4<f32> = construct %31, %32, %33, %34
-        store %x_57, %35
-        %36:vec4<f32> = load %x_57
-        store %v1, %36
+        %32:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+        %33:f32 = load %32
+        %x_53:f32 = let %33
+        %35:f32 = access %x_36, 1u
+        %36:f32 = access %x_36, 2u
+        %37:vec2<f32> = construct %35, %36
+        %38:vec2<f32> = let %37
+        %39:vec2<f32> = construct %x_53, %x_53
+        %40:vec2<f32> = sub %38, %39
+        %x_56:vec2<f32> = let %40
+        %42:f32 = access %x_36, 0u
+        %43:f32 = access %x_56, 0u
+        %44:f32 = access %x_56, 1u
+        %45:f32 = access %x_36, 3u
+        %46:vec4<f32> = construct %42, %43, %44, %45
+        store %x_57, %46
+        %47:vec4<f32> = load %x_57
+        store %v1, %47
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        discard
+      $B4: {  # false
+        store %continue_execution, false
         exit_if  # if_1
       }
     }
-    %37:vec4<f32> = load %x_57
-    store %x_GLF_color, %37
+    %48:vec4<f32> = load %x_57
+    store %x_GLF_color, %48
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b6 {
-  %b6 = block {
-    %39:void = call %main_1
-    %40:vec4<f32> = load %x_GLF_color
-    %41:main_out = construct %40
-    ret %41
+%tint_symbol = @fragment func():main_out {
+  $B6: {
+    %50:void = call %main_1
+    %51:vec4<f32> = load %x_GLF_color
+    %52:main_out = construct %51
+    %53:bool = load %continue_execution
+    %54:bool = eq %53, false
+    if %54 [t: $B7] {  # if_3
+      $B7: {  # true
+        terminate_invocation
+      }
+    }
+    ret %52
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-color-output-undefined-in-unexecuted-branch/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-color-output-undefined-in-unexecuted-branch/0-opt.spvasm.expected.ir.msl
index f604119..aa82d4d 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-color-output-undefined-in-unexecuted-branch/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-color-output-undefined-in-unexecuted-branch/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -32,7 +32,7 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_8:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
@@ -41,15 +41,15 @@
   %x_16:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%func0_ = func():void -> %b2 {
-  %b2 = block {
+%func0_ = func():void {
+  $B2: {
     %tmp:ptr<function, vec4<f32>, read_write> = var
     %9:f32 = load_vector_element %gl_FragCoord, 0u
     %10:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
     %11:f32 = load %10
     %12:bool = gt %9, %11
-    if %12 [t: %b3] {  # if_1
-      %b3 = block {  # true
+    if %12 [t: $B3] {  # if_1
+      $B3: {  # true
         %13:vec4<f32> = load %x_GLF_color
         store %tmp, %13
         exit_if  # if_1
@@ -60,23 +60,23 @@
     ret
   }
 }
-%func1_ = func():i32 -> %b4 {
-  %b4 = block {
+%func1_ = func():i32 {
+  $B4: {
     %a:ptr<function, i32, read_write> = var
     %17:ptr<uniform, i32, read> = access %x_12, 0u, 1i, 0u
     %18:i32 = load %17
     store %a, %18
-    loop [b: %b5, c: %b6] {  # loop_1
-      %b5 = block {  # body
+    loop [b: $B5, c: $B6] {  # loop_1
+      $B5: {  # body
         %19:i32 = load %a
         %20:ptr<uniform, i32, read> = access %x_12, 0u, 3i, 0u
         %21:i32 = load %20
         %22:bool = lt %19, %21
-        if %22 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
+        if %22 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
             exit_if  # if_2
           }
-          %b8 = block {  # false
+          $B8: {  # false
             exit_loop  # loop_1
           }
         }
@@ -85,135 +85,137 @@
         %25:ptr<uniform, i32, read> = access %x_12, 0u, 1i, 0u
         %26:i32 = load %25
         %27:bool = gt %24, %26
-        if %27 [t: %b9, f: %b10] {  # if_3
-          %b9 = block {  # true
+        if %27 [t: $B9, f: $B10] {  # if_3
+          $B9: {  # true
             %28:void = call %func0_
             %29:ptr<uniform, i32, read> = access %x_12, 0u, 3i, 0u
             %30:i32 = load %29
             store %a, %30
             exit_if  # if_3
           }
-          %b10 = block {  # false
+          $B10: {  # false
             %31:void = call %func0_
             exit_if  # if_3
           }
         }
-        continue %b6
+        continue  # -> $B6
       }
-      %b6 = block {  # continuing
-        next_iteration %b5
+      $B6: {  # continuing
+        next_iteration  # -> $B5
       }
     }
-    %x_144:i32 = load %a
+    %32:i32 = load %a
+    %x_144:i32 = let %32
     ret %x_144
   }
 }
-%main_1 = func():void -> %b11 {
-  %b11 = block {
+%main_1 = func():void {
+  $B11: {
     %a_1:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %j:ptr<function, i32, read_write> = var
-    %37:f32 = load_vector_element %gl_FragCoord, 0u
-    %38:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
-    %39:f32 = load %38
-    %40:bool = gt %37, %39
-    if %40 [t: %b12, f: %b13] {  # if_4
-      %b12 = block {  # true
-        %41:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-        %42:f32 = load %41
-        %43:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
-        %44:f32 = load %43
-        %45:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-        %46:f32 = load %45
-        %47:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
-        %48:f32 = load %47
-        %49:vec4<f32> = construct %42, %44, %46, %48
-        store %x_GLF_color, %49
+    %38:f32 = load_vector_element %gl_FragCoord, 0u
+    %39:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
+    %40:f32 = load %39
+    %41:bool = gt %38, %40
+    if %41 [t: $B12, f: $B13] {  # if_4
+      $B12: {  # true
+        %42:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+        %43:f32 = load %42
+        %44:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
+        %45:f32 = load %44
+        %46:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+        %47:f32 = load %46
+        %48:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
+        %49:f32 = load %48
+        %50:vec4<f32> = construct %43, %45, %47, %49
+        store %x_GLF_color, %50
         exit_if  # if_4
       }
-      %b13 = block {  # false
-        %50:ptr<uniform, u32, read> = access %x_16, 0u, 0i, 0u
-        %51:u32 = load %50
-        %52:vec4<f32> = unpack4x8snorm %51
-        store %x_GLF_color, %52
+      $B13: {  # false
+        %51:ptr<uniform, u32, read> = access %x_16, 0u, 0i, 0u
+        %52:u32 = load %51
+        %53:vec4<f32> = unpack4x8snorm %52
+        store %x_GLF_color, %53
         exit_if  # if_4
       }
     }
-    %53:ptr<uniform, i32, read> = access %x_12, 0u, 2i, 0u
-    %54:i32 = load %53
-    store %a_1, %54
+    %54:ptr<uniform, i32, read> = access %x_12, 0u, 2i, 0u
+    %55:i32 = load %54
+    store %a_1, %55
     store %i, 0i
-    loop [b: %b14, c: %b15] {  # loop_2
-      %b14 = block {  # body
-        %55:i32 = load %i
-        %56:bool = lt %55, 5i
-        if %56 [t: %b16, f: %b17] {  # if_5
-          %b16 = block {  # true
+    loop [b: $B14, c: $B15] {  # loop_2
+      $B14: {  # body
+        %56:i32 = load %i
+        %57:bool = lt %56, 5i
+        if %57 [t: $B16, f: $B17] {  # if_5
+          $B16: {  # true
             exit_if  # if_5
           }
-          %b17 = block {  # false
+          $B17: {  # false
             exit_loop  # loop_2
           }
         }
         store %j, 0i
-        loop [b: %b18, c: %b19] {  # loop_3
-          %b18 = block {  # body
-            %57:i32 = load %j
-            %58:bool = lt %57, 2i
-            if %58 [t: %b20, f: %b21] {  # if_6
-              %b20 = block {  # true
+        loop [b: $B18, c: $B19] {  # loop_3
+          $B18: {  # body
+            %58:i32 = load %j
+            %59:bool = lt %58, 2i
+            if %59 [t: $B20, f: $B21] {  # if_6
+              $B20: {  # true
                 exit_if  # if_6
               }
-              %b21 = block {  # false
+              $B21: {  # false
                 exit_loop  # loop_3
               }
             }
-            %x_91:i32 = call %func1_
-            %60:i32 = load %a_1
-            %61:i32 = add %60, %x_91
-            store %a_1, %61
-            continue %b19
+            %60:i32 = call %func1_
+            %x_91:i32 = let %60
+            %62:i32 = load %a_1
+            %63:i32 = add %62, %x_91
+            store %a_1, %63
+            continue  # -> $B19
           }
-          %b19 = block {  # continuing
-            %62:i32 = load %j
-            %63:i32 = add %62, 1i
-            store %j, %63
-            next_iteration %b18
+          $B19: {  # continuing
+            %64:i32 = load %j
+            %65:i32 = add %64, 1i
+            store %j, %65
+            next_iteration  # -> $B18
           }
         }
-        continue %b15
+        continue  # -> $B15
       }
-      %b15 = block {  # continuing
-        %64:i32 = load %i
-        %65:i32 = add %64, 1i
-        store %i, %65
-        next_iteration %b14
+      $B15: {  # continuing
+        %66:i32 = load %i
+        %67:i32 = add %66, 1i
+        store %i, %67
+        next_iteration  # -> $B14
       }
     }
-    %66:i32 = load %a_1
-    %67:ptr<uniform, i32, read> = access %x_12, 0u, 0i, 0u
-    %68:i32 = load %67
-    %69:bool = eq %66, %68
-    if %69 [t: %b22] {  # if_7
-      %b22 = block {  # true
-        %70:f32 = load_vector_element %x_GLF_color, 2u
-        %71:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-        %72:f32 = load %71
-        %73:f32 = sub %70, %72
-        store_vector_element %x_GLF_color, 2u, %73
+    %68:i32 = load %a_1
+    %69:ptr<uniform, i32, read> = access %x_12, 0u, 0i, 0u
+    %70:i32 = load %69
+    %71:bool = eq %68, %70
+    if %71 [t: $B22] {  # if_7
+      $B22: {  # true
+        %72:f32 = load_vector_element %x_GLF_color, 2u
+        %73:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+        %74:f32 = load %73
+        %75:f32 = sub %72, %74
+        store_vector_element %x_GLF_color, 2u, %75
         exit_if  # if_7
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b23 {
-  %b23 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B23: {
     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
+    %78:void = call %main_1
+    %79:vec4<f32> = load %x_GLF_color
+    %80:main_out = construct %79
+    ret %80
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-color-output-undefined-in-unexecuted-branch/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-color-output-undefined-in-unexecuted-branch/0-opt.wgsl.expected.ir.msl
index 0a80ccc..a520842 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-color-output-undefined-in-unexecuted-branch/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-color-output-undefined-in-unexecuted-branch/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -32,7 +32,7 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_8:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
@@ -41,179 +41,208 @@
   %x_16:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%func0_ = func():void -> %b2 {
-  %b2 = block {
+%func0_ = func():void {
+  $B2: {
     %tmp:ptr<function, vec4<f32>, read_write> = var
-    %x_112:f32 = load_vector_element %gl_FragCoord, 0u
-    %10:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
-    %x_114:f32 = load %10
-    %12:bool = gt %x_112, %x_114
-    if %12 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %x_118:vec4<f32> = load %x_GLF_color
+    %9:f32 = load_vector_element %gl_FragCoord, 0u
+    %x_112:f32 = let %9
+    %11:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
+    %12:f32 = load %11
+    %x_114:f32 = let %12
+    %14:bool = gt %x_112, %x_114
+    if %14 [t: $B3] {  # if_1
+      $B3: {  # true
+        %15:vec4<f32> = load %x_GLF_color
+        %x_118:vec4<f32> = let %15
         store %tmp, %x_118
         exit_if  # if_1
       }
     }
-    %x_119:vec4<f32> = load %tmp
+    %17:vec4<f32> = load %tmp
+    %x_119:vec4<f32> = let %17
     store %x_GLF_color, %x_119
     ret
   }
 }
-%func1_ = func():i32 -> %b4 {
-  %b4 = block {
+%func1_ = func():i32 {
+  $B4: {
     %a:ptr<function, i32, read_write> = var
-    %17:ptr<uniform, i32, read> = access %x_12, 0u, 1i, 0u
-    %x_122:i32 = load %17
+    %21:ptr<uniform, i32, read> = access %x_12, 0u, 1i, 0u
+    %22:i32 = load %21
+    %x_122:i32 = let %22
     store %a, %x_122
-    loop [b: %b5, c: %b6] {  # loop_1
-      %b5 = block {  # body
-        %x_127:i32 = load %a
-        %20:ptr<uniform, i32, read> = access %x_12, 0u, 3i, 0u
-        %x_129:i32 = load %20
-        %22:bool = lt %x_127, %x_129
-        if %22 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
+    loop [b: $B5, c: $B6] {  # loop_1
+      $B5: {  # body
+        %24:i32 = load %a
+        %x_127:i32 = let %24
+        %26:ptr<uniform, i32, read> = access %x_12, 0u, 3i, 0u
+        %27:i32 = load %26
+        %x_129:i32 = let %27
+        %29:bool = lt %x_127, %x_129
+        if %29 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
             exit_if  # if_2
           }
-          %b8 = block {  # false
+          $B8: {  # false
             exit_loop  # loop_1
           }
         }
-        %23:ptr<uniform, i32, read> = access %x_14, 0u
-        %x_133:i32 = load %23
-        %25:ptr<uniform, i32, read> = access %x_12, 0u, 1i, 0u
-        %x_135:i32 = load %25
-        %27:bool = gt %x_133, %x_135
-        if %27 [t: %b9, f: %b10] {  # if_3
-          %b9 = block {  # true
-            %28:void = call %func0_
-            %29:ptr<uniform, i32, read> = access %x_12, 0u, 3i, 0u
-            %x_142:i32 = load %29
+        %30:ptr<uniform, i32, read> = access %x_14, 0u
+        %31:i32 = load %30
+        %x_133:i32 = let %31
+        %33:ptr<uniform, i32, read> = access %x_12, 0u, 1i, 0u
+        %34:i32 = load %33
+        %x_135:i32 = let %34
+        %36:bool = gt %x_133, %x_135
+        if %36 [t: $B9, f: $B10] {  # if_3
+          $B9: {  # true
+            %37:void = call %func0_
+            %38:ptr<uniform, i32, read> = access %x_12, 0u, 3i, 0u
+            %39:i32 = load %38
+            %x_142:i32 = let %39
             store %a, %x_142
             exit_if  # if_3
           }
-          %b10 = block {  # false
-            %31:void = call %func0_
+          $B10: {  # false
+            %41:void = call %func0_
             exit_if  # if_3
           }
         }
-        continue %b6
+        continue  # -> $B6
       }
-      %b6 = block {  # continuing
-        next_iteration %b5
+      $B6: {  # continuing
+        next_iteration  # -> $B5
       }
     }
-    %x_144:i32 = load %a
+    %42:i32 = load %a
+    %x_144:i32 = let %42
     ret %x_144
   }
 }
-%main_1 = func():void -> %b11 {
-  %b11 = block {
+%main_1 = func():void {
+  $B11: {
     %a_1:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %j:ptr<function, i32, read_write> = var
-    %x_56:f32 = load_vector_element %gl_FragCoord, 0u
-    %38:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
-    %x_58:f32 = load %38
-    %40:bool = gt %x_56, %x_58
-    if %40 [t: %b12, f: %b13] {  # if_4
-      %b12 = block {  # true
-        %41:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-        %x_64:f32 = load %41
-        %43:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
-        %x_66:f32 = load %43
-        %45:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-        %x_68:f32 = load %45
-        %47:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
-        %x_70:f32 = load %47
-        %49:vec4<f32> = construct %x_64, %x_66, %x_68, %x_70
-        store %x_GLF_color, %49
+    %48:f32 = load_vector_element %gl_FragCoord, 0u
+    %x_56:f32 = let %48
+    %50:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
+    %51:f32 = load %50
+    %x_58:f32 = let %51
+    %53:bool = gt %x_56, %x_58
+    if %53 [t: $B12, f: $B13] {  # if_4
+      $B12: {  # true
+        %54:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+        %55:f32 = load %54
+        %x_64:f32 = let %55
+        %57:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
+        %58:f32 = load %57
+        %x_66:f32 = let %58
+        %60:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+        %61:f32 = load %60
+        %x_68:f32 = let %61
+        %63:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
+        %64:f32 = load %63
+        %x_70:f32 = let %64
+        %66:vec4<f32> = construct %x_64, %x_66, %x_68, %x_70
+        store %x_GLF_color, %66
         exit_if  # if_4
       }
-      %b13 = block {  # false
-        %50:ptr<uniform, u32, read> = access %x_16, 0u, 0i, 0u
-        %x_73:u32 = load %50
-        %52:vec4<f32> = unpack4x8snorm %x_73
-        store %x_GLF_color, %52
+      $B13: {  # false
+        %67:ptr<uniform, u32, read> = access %x_16, 0u, 0i, 0u
+        %68:u32 = load %67
+        %x_73:u32 = let %68
+        %70:vec4<f32> = unpack4x8snorm %x_73
+        store %x_GLF_color, %70
         exit_if  # if_4
       }
     }
-    %53:ptr<uniform, i32, read> = access %x_12, 0u, 2i, 0u
-    %x_76:i32 = load %53
+    %71:ptr<uniform, i32, read> = access %x_12, 0u, 2i, 0u
+    %72:i32 = load %71
+    %x_76:i32 = let %72
     store %a_1, %x_76
     store %i, 0i
-    loop [b: %b14, c: %b15] {  # loop_2
-      %b14 = block {  # body
-        %x_81:i32 = load %i
-        %56:bool = lt %x_81, 5i
-        if %56 [t: %b16, f: %b17] {  # if_5
-          %b16 = block {  # true
+    loop [b: $B14, c: $B15] {  # loop_2
+      $B14: {  # body
+        %74:i32 = load %i
+        %x_81:i32 = let %74
+        %76:bool = lt %x_81, 5i
+        if %76 [t: $B16, f: $B17] {  # if_5
+          $B16: {  # true
             exit_if  # if_5
           }
-          %b17 = block {  # false
+          $B17: {  # false
             exit_loop  # loop_2
           }
         }
         store %j, 0i
-        loop [b: %b18, c: %b19] {  # loop_3
-          %b18 = block {  # body
-            %x_88:i32 = load %j
-            %58:bool = lt %x_88, 2i
-            if %58 [t: %b20, f: %b21] {  # if_6
-              %b20 = block {  # true
+        loop [b: $B18, c: $B19] {  # loop_3
+          $B18: {  # body
+            %77:i32 = load %j
+            %x_88:i32 = let %77
+            %79:bool = lt %x_88, 2i
+            if %79 [t: $B20, f: $B21] {  # if_6
+              $B20: {  # true
                 exit_if  # if_6
               }
-              %b21 = block {  # false
+              $B21: {  # false
                 exit_loop  # loop_3
               }
             }
-            %x_91:i32 = call %func1_
-            %x_92:i32 = load %a_1
-            %61:i32 = add %x_92, %x_91
-            store %a_1, %61
-            continue %b19
+            %80:i32 = call %func1_
+            %x_91:i32 = let %80
+            %82:i32 = load %a_1
+            %x_92:i32 = let %82
+            %84:i32 = add %x_92, %x_91
+            store %a_1, %84
+            continue  # -> $B19
           }
-          %b19 = block {  # continuing
-            %x_94:i32 = load %j
-            %63:i32 = add %x_94, 1i
-            store %j, %63
-            next_iteration %b18
+          $B19: {  # continuing
+            %85:i32 = load %j
+            %x_94:i32 = let %85
+            %87:i32 = add %x_94, 1i
+            store %j, %87
+            next_iteration  # -> $B18
           }
         }
-        continue %b15
+        continue  # -> $B15
       }
-      %b15 = block {  # continuing
-        %x_96:i32 = load %i
-        %65:i32 = add %x_96, 1i
-        store %i, %65
-        next_iteration %b14
+      $B15: {  # continuing
+        %88:i32 = load %i
+        %x_96:i32 = let %88
+        %90:i32 = add %x_96, 1i
+        store %i, %90
+        next_iteration  # -> $B14
       }
     }
-    %x_98:i32 = load %a_1
-    %67:ptr<uniform, i32, read> = access %x_12, 0u, 0i, 0u
-    %x_100:i32 = load %67
-    %69:bool = eq %x_98, %x_100
-    if %69 [t: %b22] {  # if_7
-      %b22 = block {  # true
-        %70:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-        %x_105:f32 = load %70
-        %x_107:f32 = load_vector_element %x_GLF_color, 2u
-        %73:f32 = sub %x_107, %x_105
-        store_vector_element %x_GLF_color, 2u, %73
+    %91:i32 = load %a_1
+    %x_98:i32 = let %91
+    %93:ptr<uniform, i32, read> = access %x_12, 0u, 0i, 0u
+    %94:i32 = load %93
+    %x_100:i32 = let %94
+    %96:bool = eq %x_98, %x_100
+    if %96 [t: $B22] {  # if_7
+      $B22: {  # true
+        %97:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+        %98:f32 = load %97
+        %x_105:f32 = let %98
+        %100:f32 = load_vector_element %x_GLF_color, 2u
+        %x_107:f32 = let %100
+        %102:f32 = sub %x_107, %x_105
+        store_vector_element %x_GLF_color, 2u, %102
         exit_if  # if_7
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b23 {
-  %b23 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B23: {
     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
+    %105:void = call %main_1
+    %106:vec4<f32> = load %x_GLF_color
+    %107:main_out = construct %106
+    ret %107
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-color-overwrite-identity-matrix-multiply/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-color-overwrite-identity-matrix-multiply/0.spvasm.expected.ir.msl
index 4f7620e..bfb8275 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-color-overwrite-identity-matrix-multiply/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-color-overwrite-identity-matrix-multiply/0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -12,64 +12,69 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %5:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_35:f32 = load %5
-    %7:f32 = load_vector_element %gl_FragCoord, 0u
-    %8:bool = gt %7, %x_35
-    if %8 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %9:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
-        %10:f32 = load %9
-        %11:vec4<f32> = construct %10
-        store %x_GLF_color, %11
-        %12:f32 = load_vector_element %gl_FragCoord, 1u
-        %13:bool = gt %12, %x_35
-        if %13 [t: %b4] {  # if_2
-          %b4 = block {  # true
-            %14:ptr<uniform, f32, read> = access %x_6, 0u, 4i, 0u
-            %15:f32 = load %14
-            %16:vec4<f32> = construct %15
-            store %x_GLF_color, %16
+    %6:f32 = load %5
+    %x_35:f32 = let %6
+    %8:f32 = load_vector_element %gl_FragCoord, 0u
+    %9:bool = gt %8, %x_35
+    if %9 [t: $B3] {  # if_1
+      $B3: {  # true
+        %10:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
+        %11:f32 = load %10
+        %12:vec4<f32> = construct %11
+        store %x_GLF_color, %12
+        %13:f32 = load_vector_element %gl_FragCoord, 1u
+        %14:bool = gt %13, %x_35
+        if %14 [t: $B4] {  # if_2
+          $B4: {  # true
+            %15:ptr<uniform, f32, read> = access %x_6, 0u, 4i, 0u
+            %16:f32 = load %15
+            %17:vec4<f32> = construct %16
+            store %x_GLF_color, %17
             exit_if  # if_2
           }
         }
-        %17:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
-        %18:f32 = load %17
-        %19:vec4<f32> = construct %18
-        store %x_GLF_color, %19
+        %18:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
+        %19:f32 = load %18
+        %20:vec4<f32> = construct %19
+        store %x_GLF_color, %20
         exit_if  # if_1
       }
     }
-    %20:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-    %x_54:f32 = load %20
-    %22:vec4<f32> = construct %x_35, %x_54, %x_54, 10.0f
-    store %x_GLF_color, %22
-    %23:vec4<f32> = construct %x_35, 0.0f, 0.0f, 0.0f
-    %24:vec4<f32> = construct 0.0f, %x_35, 0.0f, 0.0f
-    %25:vec4<f32> = construct 0.0f, 0.0f, %x_35, 0.0f
-    %26:vec4<f32> = construct 0.0f, 0.0f, 0.0f, %x_35
-    %27:mat4x4<f32> = construct %23, %24, %25, %26
-    %28:vec4<f32> = load %x_GLF_color
-    %29:vec4<f32> = mul %27, %28
-    store %x_GLF_color, %29
+    %21:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+    %22:f32 = load %21
+    %x_54:f32 = let %22
+    %24:vec4<f32> = construct %x_35, %x_54, %x_54, 10.0f
+    store %x_GLF_color, %24
+    %25:vec4<f32> = construct %x_35, 0.0f, 0.0f, 0.0f
+    %26:vec4<f32> = let %25
+    %27:vec4<f32> = construct 0.0f, %x_35, 0.0f, 0.0f
+    %28:vec4<f32> = let %27
+    %29:vec4<f32> = construct 0.0f, 0.0f, %x_35, 0.0f
+    %30:vec4<f32> = let %29
+    %31:vec4<f32> = construct 0.0f, 0.0f, 0.0f, %x_35
+    %32:mat4x4<f32> = construct %26, %28, %30, %31
+    %33:vec4<f32> = load %x_GLF_color
+    %34:vec4<f32> = mul %32, %33
+    store %x_GLF_color, %34
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b5 {
-  %b5 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B5: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %32:void = call %main_1
-    %33:vec4<f32> = load %x_GLF_color
-    %34:main_out = construct %33
-    ret %34
+    %37:void = call %main_1
+    %38:vec4<f32> = load %x_GLF_color
+    %39:main_out = construct %38
+    ret %39
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-color-overwrite-identity-matrix-multiply/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-color-overwrite-identity-matrix-multiply/0.wgsl.expected.ir.msl
index dff3955..4bb0658 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-color-overwrite-identity-matrix-multiply/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-color-overwrite-identity-matrix-multiply/0.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -12,64 +12,75 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
-    %x_33:f32 = load_vector_element %gl_FragCoord, 0u
-    %6:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_35:f32 = load %6
-    %8:bool = gt %x_33, %x_35
-    if %8 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %9:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
-        %x_40:f32 = load %9
-        %11:vec4<f32> = construct %x_40, %x_40, %x_40, %x_40
-        store %x_GLF_color, %11
-        %x_43:f32 = load_vector_element %gl_FragCoord, 1u
-        %13:bool = gt %x_43, %x_35
-        if %13 [t: %b4] {  # if_2
-          %b4 = block {  # true
-            %14:ptr<uniform, f32, read> = access %x_6, 0u, 4i, 0u
-            %x_48:f32 = load %14
-            %16:vec4<f32> = construct %x_48, %x_48, %x_48, %x_48
-            store %x_GLF_color, %16
+%main_1 = func():void {
+  $B2: {
+    %5:f32 = load_vector_element %gl_FragCoord, 0u
+    %x_33:f32 = let %5
+    %7:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %8:f32 = load %7
+    %x_35:f32 = let %8
+    %10:bool = gt %x_33, %x_35
+    if %10 [t: $B3] {  # if_1
+      $B3: {  # true
+        %11:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
+        %12:f32 = load %11
+        %x_40:f32 = let %12
+        %14:vec4<f32> = construct %x_40, %x_40, %x_40, %x_40
+        store %x_GLF_color, %14
+        %15:f32 = load_vector_element %gl_FragCoord, 1u
+        %x_43:f32 = let %15
+        %17:bool = gt %x_43, %x_35
+        if %17 [t: $B4] {  # if_2
+          $B4: {  # true
+            %18:ptr<uniform, f32, read> = access %x_6, 0u, 4i, 0u
+            %19:f32 = load %18
+            %x_48:f32 = let %19
+            %21:vec4<f32> = construct %x_48, %x_48, %x_48, %x_48
+            store %x_GLF_color, %21
             exit_if  # if_2
           }
         }
-        %17:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
-        %x_51:f32 = load %17
-        %19:vec4<f32> = construct %x_51, %x_51, %x_51, %x_51
-        store %x_GLF_color, %19
+        %22:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
+        %23:f32 = load %22
+        %x_51:f32 = let %23
+        %25:vec4<f32> = construct %x_51, %x_51, %x_51, %x_51
+        store %x_GLF_color, %25
         exit_if  # if_1
       }
     }
-    %20:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-    %x_54:f32 = load %20
-    %22:vec4<f32> = construct %x_35, %x_54, %x_54, 10.0f
-    store %x_GLF_color, %22
-    %x_61:vec4<f32> = load %x_GLF_color
-    %24:vec4<f32> = construct %x_35, 0.0f, 0.0f, 0.0f
-    %25:vec4<f32> = construct 0.0f, %x_35, 0.0f, 0.0f
-    %26:vec4<f32> = construct 0.0f, 0.0f, %x_35, 0.0f
-    %27:vec4<f32> = construct 0.0f, 0.0f, 0.0f, %x_35
-    %28:mat4x4<f32> = construct %24, %25, %26, %27
-    %29:vec4<f32> = mul %28, %x_61
+    %26:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+    %27:f32 = load %26
+    %x_54:f32 = let %27
+    %29:vec4<f32> = construct %x_35, %x_54, %x_54, 10.0f
     store %x_GLF_color, %29
+    %30:vec4<f32> = load %x_GLF_color
+    %x_61:vec4<f32> = let %30
+    %32:vec4<f32> = construct %x_35, 0.0f, 0.0f, 0.0f
+    %33:vec4<f32> = let %32
+    %34:vec4<f32> = construct 0.0f, %x_35, 0.0f, 0.0f
+    %35:vec4<f32> = let %34
+    %36:vec4<f32> = construct 0.0f, 0.0f, %x_35, 0.0f
+    %37:vec4<f32> = let %36
+    %38:vec4<f32> = construct 0.0f, 0.0f, 0.0f, %x_35
+    %39:mat4x4<f32> = construct %33, %35, %37, %38
+    %40:vec4<f32> = mul %39, %x_61
+    store %x_GLF_color, %40
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b5 {
-  %b5 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B5: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %32:void = call %main_1
-    %33:vec4<f32> = load %x_GLF_color
-    %34:main_out = construct %33
-    ret %34
+    %43:void = call %main_1
+    %44:vec4<f32> = load %x_GLF_color
+    %45:main_out = construct %44
+    ret %45
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-combine-and-or-xor-gt-lt/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-combine-and-or-xor-gt-lt/0-opt.spvasm.expected.ir.msl
index f66909a..528a968 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-combine-and-or-xor-gt-lt/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-combine-and-or-xor-gt-lt/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf1 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf1 = struct @align(8) {
   v1:vec2<f32> @offset(0)
 }
 
@@ -16,14 +16,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_8:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %b:ptr<function, bool, read_write> = var
     store %b, true
     %6:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
@@ -31,15 +31,15 @@
     %8:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
     %9:f32 = load_vector_element %8, 1u
     %10:bool = gt %7, %9
-    if %10 [t: %b3] {  # if_1
-      %b3 = block {  # true
+    if %10 [t: $B3] {  # if_1
+      $B3: {  # true
         %11:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
         %12:f32 = load_vector_element %11, 0u
         %13:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
         %14:f32 = load_vector_element %13, 1u
         %15:bool = lt %12, %14
-        if %15 [t: %b4] {  # if_2
-          %b4 = block {  # true
+        if %15 [t: $B4] {  # if_2
+          $B4: {  # true
             store %b, false
             exit_if  # if_2
           }
@@ -48,42 +48,45 @@
       }
     }
     %16:bool = load %b
-    if %16 [t: %b5, f: %b6] {  # if_3
-      %b5 = block {  # true
+    if %16 [t: $B5, f: $B6] {  # if_3
+      $B5: {  # true
         %17:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
         %18:i32 = load %17
         %19:f32 = convert %18
-        %20:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-        %21:i32 = load %20
-        %22:f32 = convert %21
-        %23:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-        %24:i32 = load %23
-        %25:f32 = convert %24
-        %26:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-        %27:i32 = load %26
-        %28:f32 = convert %27
-        %29:vec4<f32> = construct %19, %22, %25, %28
-        store %x_GLF_color, %29
+        %20:f32 = let %19
+        %21:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+        %22:i32 = load %21
+        %23:f32 = convert %22
+        %24:f32 = let %23
+        %25:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+        %26:i32 = load %25
+        %27:f32 = convert %26
+        %28:f32 = let %27
+        %29:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+        %30:i32 = load %29
+        %31:f32 = convert %30
+        %32:vec4<f32> = construct %20, %24, %28, %31
+        store %x_GLF_color, %32
         exit_if  # if_3
       }
-      %b6 = block {  # false
-        %30:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-        %31:i32 = load %30
-        %32:f32 = convert %31
-        %33:vec4<f32> = construct %32
-        store %x_GLF_color, %33
+      $B6: {  # false
+        %33:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+        %34:i32 = load %33
+        %35:f32 = convert %34
+        %36:vec4<f32> = construct %35
+        store %x_GLF_color, %36
         exit_if  # if_3
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b7 {
-  %b7 = block {
-    %35:void = call %main_1
-    %36:vec4<f32> = load %x_GLF_color
-    %37:main_out = construct %36
-    ret %37
+%tint_symbol = @fragment func():main_out {
+  $B7: {
+    %38:void = call %main_1
+    %39:vec4<f32> = load %x_GLF_color
+    %40:main_out = construct %39
+    ret %40
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-combine-and-or-xor-gt-lt/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-combine-and-or-xor-gt-lt/0-opt.wgsl.expected.ir.msl
index bd3f87f..fed6e18 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-combine-and-or-xor-gt-lt/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-combine-and-or-xor-gt-lt/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf1 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf1 = struct @align(8) {
   v1:vec2<f32> @offset(0)
 }
 
@@ -16,30 +16,34 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_8:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %b:ptr<function, bool, read_write> = var
     store %b, true
     %6:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %x_38:f32 = load_vector_element %6, 0u
-    %8:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %x_40:f32 = load_vector_element %8, 1u
-    %10:bool = gt %x_38, %x_40
-    if %10 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %11:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-        %x_45:f32 = load_vector_element %11, 0u
+    %7:f32 = load_vector_element %6, 0u
+    %x_38:f32 = let %7
+    %9:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
+    %10:f32 = load_vector_element %9, 1u
+    %x_40:f32 = let %10
+    %12:bool = gt %x_38, %x_40
+    if %12 [t: $B3] {  # if_1
+      $B3: {  # true
         %13:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-        %x_47:f32 = load_vector_element %13, 1u
-        %15:bool = lt %x_45, %x_47
-        if %15 [t: %b4] {  # if_2
-          %b4 = block {  # true
+        %14:f32 = load_vector_element %13, 0u
+        %x_45:f32 = let %14
+        %16:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
+        %17:f32 = load_vector_element %16, 1u
+        %x_47:f32 = let %17
+        %19:bool = lt %x_45, %x_47
+        if %19 [t: $B4] {  # if_2
+          $B4: {  # true
             store %b, false
             exit_if  # if_2
           }
@@ -47,43 +51,53 @@
         exit_if  # if_1
       }
     }
-    %x_51:bool = load %b
-    if %x_51 [t: %b5, f: %b6] {  # if_3
-      %b5 = block {  # true
-        %17:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-        %x_10:i32 = load %17
-        %19:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-        %x_11:i32 = load %19
-        %21:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-        %x_12:i32 = load %21
-        %23:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-        %x_13:i32 = load %23
-        %25:f32 = convert %x_10
-        %26:f32 = convert %x_11
-        %27:f32 = convert %x_12
-        %28:f32 = convert %x_13
-        %29:vec4<f32> = construct %25, %26, %27, %28
-        store %x_GLF_color, %29
+    %20:bool = load %b
+    %x_51:bool = let %20
+    if %x_51 [t: $B5, f: $B6] {  # if_3
+      $B5: {  # true
+        %22:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+        %23:i32 = load %22
+        %x_10:i32 = let %23
+        %25:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+        %26:i32 = load %25
+        %x_11:i32 = let %26
+        %28:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+        %29:i32 = load %28
+        %x_12:i32 = let %29
+        %31:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+        %32:i32 = load %31
+        %x_13:i32 = let %32
+        %34:f32 = convert %x_10
+        %35:f32 = let %34
+        %36:f32 = convert %x_11
+        %37:f32 = let %36
+        %38:f32 = convert %x_12
+        %39:f32 = let %38
+        %40:f32 = convert %x_13
+        %41:vec4<f32> = construct %35, %37, %39, %40
+        store %x_GLF_color, %41
         exit_if  # if_3
       }
-      %b6 = block {  # false
-        %30:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-        %x_14:i32 = load %30
-        %x_65:f32 = convert %x_14
-        %33:vec4<f32> = construct %x_65, %x_65, %x_65, %x_65
-        store %x_GLF_color, %33
+      $B6: {  # false
+        %42:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+        %43:i32 = load %42
+        %x_14:i32 = let %43
+        %45:f32 = convert %x_14
+        %x_65:f32 = let %45
+        %47:vec4<f32> = construct %x_65, %x_65, %x_65, %x_65
+        store %x_GLF_color, %47
         exit_if  # if_3
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b7 {
-  %b7 = block {
-    %35:void = call %main_1
-    %36:vec4<f32> = load %x_GLF_color
-    %37:main_out = construct %36
-    ret %37
+%tint_symbol = @fragment func():main_out {
+  $B7: {
+    %49:void = call %main_1
+    %50:vec4<f32> = load %x_GLF_color
+    %51:main_out = construct %50
+    ret %51
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-condition-loop-index-bitwise-not/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-condition-loop-index-bitwise-not/0-opt.spvasm.expected.ir.msl
index b10dd50..638bd67 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-condition-loop-index-bitwise-not/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-condition-loop-index-bitwise-not/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,13 +12,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %6:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
@@ -27,80 +27,83 @@
     %8:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
     %9:i32 = load %8
     store %i, %9
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %10:i32 = load %i
         %11:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
         %12:i32 = load %11
         %13:bool = lt %10, %12
-        if %13 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %13 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
         %14:i32 = load %i
         %15:i32 = complement %14
         %16:bool = neq %15, 0i
-        if %16 [t: %b7] {  # if_2
-          %b7 = block {  # true
+        if %16 [t: $B7] {  # if_2
+          $B7: {  # true
             %17:i32 = load %a
             %18:i32 = add %17, 1i
             store %a, %18
             exit_if  # if_2
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
+      $B4: {  # continuing
         %19:i32 = load %i
         %20:i32 = add %19, 1i
         store %i, %20
-        next_iteration %b3
+        next_iteration  # -> $B3
       }
     }
     %21:i32 = load %a
     %22:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
     %23:i32 = load %22
     %24:bool = eq %21, %23
-    if %24 [t: %b8, f: %b9] {  # if_3
-      %b8 = block {  # true
+    if %24 [t: $B8, f: $B9] {  # if_3
+      $B8: {  # true
         %25:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
         %26:i32 = load %25
         %27:f32 = convert %26
-        %28:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %29:i32 = load %28
-        %30:f32 = convert %29
-        %31:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %32:i32 = load %31
-        %33:f32 = convert %32
-        %34:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %35:i32 = load %34
-        %36:f32 = convert %35
-        %37:vec4<f32> = construct %27, %30, %33, %36
-        store %x_GLF_color, %37
+        %28:f32 = let %27
+        %29:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %30:i32 = load %29
+        %31:f32 = convert %30
+        %32:f32 = let %31
+        %33:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %34:i32 = load %33
+        %35:f32 = convert %34
+        %36:f32 = let %35
+        %37:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %38:i32 = load %37
+        %39:f32 = convert %38
+        %40:vec4<f32> = construct %28, %32, %36, %39
+        store %x_GLF_color, %40
         exit_if  # if_3
       }
-      %b9 = block {  # false
-        %38:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %39:i32 = load %38
-        %40:f32 = convert %39
-        %41:vec4<f32> = construct %40
-        store %x_GLF_color, %41
+      $B9: {  # false
+        %41:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %42:i32 = load %41
+        %43:f32 = convert %42
+        %44:vec4<f32> = construct %43
+        store %x_GLF_color, %44
         exit_if  # if_3
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b10 {
-  %b10 = block {
-    %43:void = call %main_1
-    %44:vec4<f32> = load %x_GLF_color
-    %45:main_out = construct %44
-    ret %45
+%tint_symbol = @fragment func():main_out {
+  $B10: {
+    %46:void = call %main_1
+    %47:vec4<f32> = load %x_GLF_color
+    %48:main_out = construct %47
+    ret %48
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-condition-loop-index-bitwise-not/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-condition-loop-index-bitwise-not/0-opt.wgsl.expected.ir.msl
index 67e9a0f..05da0e5 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-condition-loop-index-bitwise-not/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-condition-loop-index-bitwise-not/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,95 +12,113 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %6:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_26:i32 = load %6
+    %7:i32 = load %6
+    %x_26:i32 = let %7
     store %a, %x_26
-    %8:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_28:i32 = load %8
+    %9:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %10:i32 = load %9
+    %x_28:i32 = let %10
     store %i, %x_28
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_33:i32 = load %i
-        %11:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %x_35:i32 = load %11
-        %13:bool = lt %x_33, %x_35
-        if %13 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %12:i32 = load %i
+        %x_33:i32 = let %12
+        %14:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %15:i32 = load %14
+        %x_35:i32 = let %15
+        %17:bool = lt %x_33, %x_35
+        if %17 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_38:i32 = load %i
-        %15:i32 = complement %x_38
-        %16:bool = neq %15, 0i
-        if %16 [t: %b7] {  # if_2
-          %b7 = block {  # true
-            %x_43:i32 = load %a
-            %18:i32 = add %x_43, 1i
-            store %a, %18
+        %18:i32 = load %i
+        %x_38:i32 = let %18
+        %20:i32 = complement %x_38
+        %21:bool = neq %20, 0i
+        if %21 [t: $B7] {  # if_2
+          $B7: {  # true
+            %22:i32 = load %a
+            %x_43:i32 = let %22
+            %24:i32 = add %x_43, 1i
+            store %a, %24
             exit_if  # if_2
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_45:i32 = load %i
-        %20:i32 = add %x_45, 1i
-        store %i, %20
-        next_iteration %b3
+      $B4: {  # continuing
+        %25:i32 = load %i
+        %x_45:i32 = let %25
+        %27:i32 = add %x_45, 1i
+        store %i, %27
+        next_iteration  # -> $B3
       }
     }
-    %x_47:i32 = load %a
-    %22:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_49:i32 = load %22
-    %24:bool = eq %x_47, %x_49
-    if %24 [t: %b8, f: %b9] {  # if_3
-      %b8 = block {  # true
-        %25:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_55:i32 = load %25
-        %27:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_58:i32 = load %27
-        %29:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_61:i32 = load %29
-        %31:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_64:i32 = load %31
-        %33:f32 = convert %x_55
-        %34:f32 = convert %x_58
-        %35:f32 = convert %x_61
-        %36:f32 = convert %x_64
-        %37:vec4<f32> = construct %33, %34, %35, %36
-        store %x_GLF_color, %37
+    %28:i32 = load %a
+    %x_47:i32 = let %28
+    %30:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %31:i32 = load %30
+    %x_49:i32 = let %31
+    %33:bool = eq %x_47, %x_49
+    if %33 [t: $B8, f: $B9] {  # if_3
+      $B8: {  # true
+        %34:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %35:i32 = load %34
+        %x_55:i32 = let %35
+        %37:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %38:i32 = load %37
+        %x_58:i32 = let %38
+        %40:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %41:i32 = load %40
+        %x_61:i32 = let %41
+        %43:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %44:i32 = load %43
+        %x_64:i32 = let %44
+        %46:f32 = convert %x_55
+        %47:f32 = let %46
+        %48:f32 = convert %x_58
+        %49:f32 = let %48
+        %50:f32 = convert %x_61
+        %51:f32 = let %50
+        %52:f32 = convert %x_64
+        %53:vec4<f32> = construct %47, %49, %51, %52
+        store %x_GLF_color, %53
         exit_if  # if_3
       }
-      %b9 = block {  # false
-        %38:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_68:i32 = load %38
-        %x_69:f32 = convert %x_68
-        %41:vec4<f32> = construct %x_69, %x_69, %x_69, %x_69
-        store %x_GLF_color, %41
+      $B9: {  # false
+        %54:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %55:i32 = load %54
+        %x_68:i32 = let %55
+        %57:f32 = convert %x_68
+        %x_69:f32 = let %57
+        %59:vec4<f32> = construct %x_69, %x_69, %x_69, %x_69
+        store %x_GLF_color, %59
         exit_if  # if_3
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b10 {
-  %b10 = block {
-    %43:void = call %main_1
-    %44:vec4<f32> = load %x_GLF_color
-    %45:main_out = construct %44
-    ret %45
+%tint_symbol = @fragment func():main_out {
+  $B10: {
+    %61:void = call %main_1
+    %62:vec4<f32> = load %x_GLF_color
+    %63:main_out = construct %62
+    ret %63
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-conditional-discard-inside-loop/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-conditional-discard-inside-loop/0-opt.spvasm.expected.ir.msl
index 8a40bfd..8ea76f0 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-conditional-discard-inside-loop/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-conditional-discard-inside-loop/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -24,88 +24,100 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_9:ptr<uniform, buf2, read> = var @binding_point(0, 2)
   %x_11:ptr<uniform, buf1, read> = var @binding_point(0, 1)
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     store %a, 1i
-    %8:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %9:i32 = load %8
-    %10:f32 = convert %9
-    %11:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %12:i32 = load %11
-    %13:f32 = convert %12
-    %14:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %15:i32 = load %14
-    %16:f32 = convert %15
-    %17:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %9:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %10:i32 = load %9
+    %11:f32 = convert %10
+    %12:f32 = let %11
+    %13:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %14:i32 = load %13
+    %15:f32 = convert %14
+    %16:f32 = let %15
+    %17:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
     %18:i32 = load %17
     %19:f32 = convert %18
-    %20:vec4<f32> = construct %10, %13, %16, %19
-    store %x_GLF_color, %20
-    %21:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %20:f32 = let %19
+    %21:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
     %22:i32 = load %21
-    store %i, %22
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %23:i32 = load %i
-        %24:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %25:i32 = load %24
-        %26:bool = lt %23, %25
-        if %26 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    %23:f32 = convert %22
+    %24:vec4<f32> = construct %12, %16, %20, %23
+    store %x_GLF_color, %24
+    %25:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %26:i32 = load %25
+    store %i, %26
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %27:i32 = load %i
+        %28:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %29:i32 = load %28
+        %30:bool = lt %27, %29
+        if %30 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_61:i32 = load %a
-        %28:i32 = load %a
-        %29:i32 = add %28, 1i
-        store %a, %29
-        %30:bool = gt %x_61, 3i
-        if %30 [t: %b7] {  # if_2
-          %b7 = block {  # true
+        %31:i32 = load %a
+        %x_61:i32 = let %31
+        %33:i32 = load %a
+        %34:i32 = add %33, 1i
+        store %a, %34
+        %35:bool = gt %x_61, 3i
+        if %35 [t: $B7] {  # if_2
+          $B7: {  # true
             exit_loop  # loop_1
           }
         }
-        %31:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
-        %32:f32 = load_vector_element %31, 0u
-        %33:ptr<uniform, f32, read> = access %x_11, 0u, 0i, 0u
-        %34:f32 = load %33
-        %35:bool = gt %32, %34
-        if %35 [t: %b8] {  # if_3
-          %b8 = block {  # true
-            discard
+        %36:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
+        %37:f32 = load_vector_element %36, 0u
+        %38:ptr<uniform, f32, read> = access %x_11, 0u, 0i, 0u
+        %39:f32 = load %38
+        %40:bool = gt %37, %39
+        if %40 [t: $B8] {  # if_3
+          $B8: {  # true
+            store %continue_execution, false
             exit_if  # if_3
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %36:i32 = load %i
-        %37:i32 = add %36, 1i
-        store %i, %37
-        next_iteration %b3
+      $B4: {  # continuing
+        %41:i32 = load %i
+        %42:i32 = add %41, 1i
+        store %i, %42
+        next_iteration  # -> $B3
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b9 {
-  %b9 = block {
-    %39:void = call %main_1
-    %40:vec4<f32> = load %x_GLF_color
-    %41:main_out = construct %40
-    ret %41
+%tint_symbol = @fragment func():main_out {
+  $B9: {
+    %44:void = call %main_1
+    %45:vec4<f32> = load %x_GLF_color
+    %46:main_out = construct %45
+    %47:bool = load %continue_execution
+    %48:bool = eq %47, false
+    if %48 [t: $B10] {  # if_4
+      $B10: {  # true
+        terminate_invocation
+      }
+    }
+    ret %46
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-conditional-discard-inside-loop/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-conditional-discard-inside-loop/0-opt.wgsl.expected.ir.msl
index cc0f6a9..e9bc577 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-conditional-discard-inside-loop/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-conditional-discard-inside-loop/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -24,87 +24,109 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_9:ptr<uniform, buf2, read> = var @binding_point(0, 2)
   %x_11:ptr<uniform, buf1, read> = var @binding_point(0, 1)
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     store %a, 1i
-    %8:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_38:i32 = load %8
-    %10:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_41:i32 = load %10
+    %9:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %10:i32 = load %9
+    %x_38:i32 = let %10
     %12:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_44:i32 = load %12
-    %14:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_47:i32 = load %14
-    %16:f32 = convert %x_38
-    %17:f32 = convert %x_41
-    %18:f32 = convert %x_44
-    %19:f32 = convert %x_47
-    %20:vec4<f32> = construct %16, %17, %18, %19
-    store %x_GLF_color, %20
-    %21:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_51:i32 = load %21
+    %13:i32 = load %12
+    %x_41:i32 = let %13
+    %15:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %16:i32 = load %15
+    %x_44:i32 = let %16
+    %18:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %19:i32 = load %18
+    %x_47:i32 = let %19
+    %21:f32 = convert %x_38
+    %22:f32 = let %21
+    %23:f32 = convert %x_41
+    %24:f32 = let %23
+    %25:f32 = convert %x_44
+    %26:f32 = let %25
+    %27:f32 = convert %x_47
+    %28:vec4<f32> = construct %22, %24, %26, %27
+    store %x_GLF_color, %28
+    %29:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %30:i32 = load %29
+    %x_51:i32 = let %30
     store %i, %x_51
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_56:i32 = load %i
-        %24:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %x_58:i32 = load %24
-        %26:bool = lt %x_56, %x_58
-        if %26 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %32:i32 = load %i
+        %x_56:i32 = let %32
+        %34:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %35:i32 = load %34
+        %x_58:i32 = let %35
+        %37:bool = lt %x_56, %x_58
+        if %37 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_61:i32 = load %a
-        %28:i32 = add %x_61, 1i
-        store %a, %28
-        %29:bool = gt %x_61, 3i
-        if %29 [t: %b7] {  # if_2
-          %b7 = block {  # true
+        %38:i32 = load %a
+        %x_61:i32 = let %38
+        %40:i32 = add %x_61, 1i
+        store %a, %40
+        %41:bool = gt %x_61, 3i
+        if %41 [t: $B7] {  # if_2
+          $B7: {  # true
             exit_loop  # loop_1
           }
         }
-        %30:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
-        %x_67:f32 = load_vector_element %30, 0u
-        %32:ptr<uniform, f32, read> = access %x_11, 0u, 0i, 0u
-        %x_69:f32 = load %32
-        %34:bool = gt %x_67, %x_69
-        if %34 [t: %b8] {  # if_3
-          %b8 = block {  # true
-            discard
+        %42:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
+        %43:f32 = load_vector_element %42, 0u
+        %x_67:f32 = let %43
+        %45:ptr<uniform, f32, read> = access %x_11, 0u, 0i, 0u
+        %46:f32 = load %45
+        %x_69:f32 = let %46
+        %48:bool = gt %x_67, %x_69
+        if %48 [t: $B8] {  # if_3
+          $B8: {  # true
+            store %continue_execution, false
             exit_if  # if_3
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_73:i32 = load %i
-        %36:i32 = add %x_73, 1i
-        store %i, %36
-        next_iteration %b3
+      $B4: {  # continuing
+        %49:i32 = load %i
+        %x_73:i32 = let %49
+        %51:i32 = add %x_73, 1i
+        store %i, %51
+        next_iteration  # -> $B3
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b9 {
-  %b9 = block {
-    %38:void = call %main_1
-    %39:vec4<f32> = load %x_GLF_color
-    %40:main_out = construct %39
-    ret %40
+%tint_symbol = @fragment func():main_out {
+  $B9: {
+    %53:void = call %main_1
+    %54:vec4<f32> = load %x_GLF_color
+    %55:main_out = construct %54
+    %56:bool = load %continue_execution
+    %57:bool = eq %56, false
+    if %57 [t: $B10] {  # if_4
+      $B10: {  # true
+        terminate_invocation
+      }
+    }
+    ret %55
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-ceil-vec4/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-ceil-vec4/0-opt.spvasm.expected.ir.msl
index 0c0c661..d6f5b52 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-ceil-vec4/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-ceil-vec4/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   quarter:f32 @offset(0)
 }
 
@@ -8,13 +8,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %v:ptr<function, vec4<f32>, read_write> = var
     %5:ptr<uniform, f32, read> = access %x_6, 0u
     %6:f32 = load %5
@@ -24,12 +24,12 @@
     %9:vec4<f32> = load %v
     %10:vec4<bool> = eq %9, vec4<f32>(425.0f, 1.0f, 2.0f, 20.0f)
     %11:bool = all %10
-    if %11 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    if %11 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
@@ -37,8 +37,8 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
+%tint_symbol = @fragment func():main_out {
+  $B5: {
     %13:void = call %main_1
     %14:vec4<f32> = load %x_GLF_color
     %15:main_out = construct %14
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-ceil-vec4/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-ceil-vec4/0-opt.wgsl.expected.ir.msl
index c77e92e..1205de9 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-ceil-vec4/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-ceil-vec4/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   quarter:f32 @offset(0)
 }
 
@@ -8,28 +8,30 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %v:ptr<function, vec4<f32>, read_write> = var
     %5:ptr<uniform, f32, read> = access %x_6, 0u
-    %x_32:f32 = load %5
-    %7:vec4<f32> = construct 424.113006591796875f, %x_32, 1.29999995231628417969f, 19.6200008392333984375f
-    %8:vec4<f32> = ceil %7
-    store %v, %8
-    %x_35:vec4<f32> = load %v
-    %10:vec4<bool> = eq %x_35, vec4<f32>(425.0f, 1.0f, 2.0f, 20.0f)
-    %11:bool = all %10
-    if %11 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    %6:f32 = load %5
+    %x_32:f32 = let %6
+    %8:vec4<f32> = construct 424.113006591796875f, %x_32, 1.29999995231628417969f, 19.6200008392333984375f
+    %9:vec4<f32> = ceil %8
+    store %v, %9
+    %10:vec4<f32> = load %v
+    %x_35:vec4<f32> = let %10
+    %12:vec4<bool> = eq %x_35, vec4<f32>(425.0f, 1.0f, 2.0f, 20.0f)
+    %13:bool = all %12
+    if %13 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
@@ -37,12 +39,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %13:void = call %main_1
-    %14:vec4<f32> = load %x_GLF_color
-    %15:main_out = construct %14
-    ret %15
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %15:void = call %main_1
+    %16:vec4<f32> = load %x_GLF_color
+    %17:main_out = construct %16
+    ret %17
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-inside-while/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-inside-while/0-opt.spvasm.expected.ir.msl
index efdd3b1..40ec97c 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-inside-while/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-inside-while/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: min
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-inside-while/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-inside-while/0-opt.wgsl.expected.ir.msl
index efdd3b1..40ec97c 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-inside-while/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-inside-while/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: min
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-min/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-min/0-opt.spvasm.expected.ir.msl
index 30f98f3..a3781d3 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-min/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-min/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   zero:f32 @offset(0)
 }
 
@@ -8,28 +8,29 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %4:ptr<uniform, f32, read> = access %x_5, 0u
     %5:f32 = load %4
     %6:f32 = clamp 2.0f, %5, 1.0f
-    %7:ptr<uniform, f32, read> = access %x_5, 0u
-    %8:f32 = load %7
-    %9:f32 = clamp -1.0f, 0.0f, %8
-    %10:vec4<f32> = construct %6, %9, 0.0f, 1.0f
-    %11:vec4<bool> = neq %10, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
-    %12:bool = any %11
-    if %12 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    %7:f32 = let %6
+    %8:ptr<uniform, f32, read> = access %x_5, 0u
+    %9:f32 = load %8
+    %10:f32 = clamp -1.0f, 0.0f, %9
+    %11:vec4<f32> = construct %7, %10, 0.0f, 1.0f
+    %12:vec4<bool> = neq %11, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+    %13:bool = any %12
+    if %13 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_1
       }
@@ -37,12 +38,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %14:void = call %main_1
-    %15:vec4<f32> = load %x_GLF_color
-    %16:main_out = construct %15
-    ret %16
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %15:void = call %main_1
+    %16:vec4<f32> = load %x_GLF_color
+    %17:main_out = construct %16
+    ret %17
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-min/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-min/0-opt.wgsl.expected.ir.msl
index b50cf16..b75c2d0 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-min/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-min/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   zero:f32 @offset(0)
 }
 
@@ -8,28 +8,31 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %4:ptr<uniform, f32, read> = access %x_5, 0u
-    %x_25:f32 = load %4
-    %6:ptr<uniform, f32, read> = access %x_5, 0u
-    %x_28:f32 = load %6
-    %8:f32 = clamp 2.0f, %x_25, 1.0f
-    %9:f32 = clamp -1.0f, 0.0f, %x_28
-    %10:vec4<f32> = construct %8, %9, 0.0f, 1.0f
-    %11:vec4<bool> = neq %10, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
-    %12:bool = any %11
-    if %12 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    %5:f32 = load %4
+    %x_25:f32 = let %5
+    %7:ptr<uniform, f32, read> = access %x_5, 0u
+    %8:f32 = load %7
+    %x_28:f32 = let %8
+    %10:f32 = clamp 2.0f, %x_25, 1.0f
+    %11:f32 = let %10
+    %12:f32 = clamp -1.0f, 0.0f, %x_28
+    %13:vec4<f32> = construct %11, %12, 0.0f, 1.0f
+    %14:vec4<bool> = neq %13, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+    %15:bool = any %14
+    if %15 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_1
       }
@@ -37,12 +40,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %14:void = call %main_1
-    %15:vec4<f32> = load %x_GLF_color
-    %16:main_out = construct %15
-    ret %16
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %17:void = call %main_1
+    %18:vec4<f32> = load %x_GLF_color
+    %19:main_out = construct %18
+    ret %19
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-vs-original/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-vs-original/0-opt.spvasm.expected.ir.msl
index d87e38b..8c7a37c 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-vs-original/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-vs-original/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:f32 @offset(0)
 }
 
@@ -8,13 +8,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %f:ptr<function, f32, read_write> = var
     store %x_GLF_color, vec4<f32>(0.0f)
     %5:ptr<uniform, f32, read> = access %x_6, 0u
@@ -25,12 +25,12 @@
     %9:ptr<uniform, f32, read> = access %x_6, 0u
     %10:f32 = load %9
     %11:bool = gt %8, %10
-    if %11 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    if %11 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         %12:f32 = load %f
         %13:vec4<f32> = construct %12, 0.0f, 0.0f, 1.0f
         store %x_GLF_color, %13
@@ -40,8 +40,8 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
+%tint_symbol = @fragment func():main_out {
+  $B5: {
     %15:void = call %main_1
     %16:vec4<f32> = load %x_GLF_color
     %17:main_out = construct %16
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-vs-original/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-vs-original/0-opt.wgsl.expected.ir.msl
index 5335a88..7df7c0f 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-vs-original/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-vs-original/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:f32 @offset(0)
 }
 
@@ -8,44 +8,48 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %f:ptr<function, f32, read_write> = var
     store %x_GLF_color, vec4<f32>(0.0f)
     %5:ptr<uniform, f32, read> = access %x_6, 0u
-    %x_23:f32 = load %5
-    %7:f32 = clamp %x_23, 1.0f, 1.0f
-    store %f, %7
-    %x_25:f32 = load %f
-    %9:ptr<uniform, f32, read> = access %x_6, 0u
-    %x_27:f32 = load %9
-    %11:bool = gt %x_25, %x_27
-    if %11 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    %6:f32 = load %5
+    %x_23:f32 = let %6
+    %8:f32 = clamp %x_23, 1.0f, 1.0f
+    store %f, %8
+    %9:f32 = load %f
+    %x_25:f32 = let %9
+    %11:ptr<uniform, f32, read> = access %x_6, 0u
+    %12:f32 = load %11
+    %x_27:f32 = let %12
+    %14:bool = gt %x_25, %x_27
+    if %14 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %x_32:f32 = load %f
-        %13:vec4<f32> = construct %x_32, 0.0f, 0.0f, 1.0f
-        store %x_GLF_color, %13
+      $B4: {  # false
+        %15:f32 = load %f
+        %x_32:f32 = let %15
+        %17:vec4<f32> = construct %x_32, 0.0f, 0.0f, 1.0f
+        store %x_GLF_color, %17
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %15:void = call %main_1
-    %16:vec4<f32> = load %x_GLF_color
-    %17:main_out = construct %16
-    ret %17
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %19:void = call %main_1
+    %20:vec4<f32> = load %x_GLF_color
+    %21:main_out = construct %20
+    ret %21
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp/0-opt.spvasm.expected.ir.msl
index 8b83677..9a115ae 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   fourtytwo:f32 @offset(0)
 }
 
@@ -8,13 +8,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %x_36:ptr<function, bool, read_write> = var
     %x_37:ptr<function, bool, read_write> = var
     %6:ptr<uniform, f32, read> = access %x_5, 0u
@@ -22,30 +22,31 @@
     %8:ptr<uniform, f32, read> = access %x_5, 0u
     %9:f32 = load %8
     %10:f32 = clamp 1.0f, %7, %9
-    %x_27:bool = gt %10, 42.0f
+    %11:bool = gt %10, 42.0f
+    %x_27:bool = let %11
     store %x_37, %x_27
-    %12:bool = eq %x_27, false
-    if %12 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %13:ptr<uniform, f32, read> = access %x_5, 0u
-        %14:f32 = load %13
-        %15:ptr<uniform, f32, read> = access %x_5, 0u
-        %16:f32 = load %15
-        %17:f32 = clamp 1.0f, %14, %16
-        %18:bool = lt %17, 42.0f
-        store %x_36, %18
-        %19:bool = load %x_36
-        store %x_37, %19
+    %13:bool = eq %x_27, false
+    if %13 [t: $B3] {  # if_1
+      $B3: {  # true
+        %14:ptr<uniform, f32, read> = access %x_5, 0u
+        %15:f32 = load %14
+        %16:ptr<uniform, f32, read> = access %x_5, 0u
+        %17:f32 = load %16
+        %18:f32 = clamp 1.0f, %15, %17
+        %19:bool = lt %18, 42.0f
+        store %x_36, %19
+        %20:bool = load %x_36
+        store %x_37, %20
         exit_if  # if_1
       }
     }
-    %20:bool = load %x_37
-    if %20 [t: %b4, f: %b5] {  # if_2
-      %b4 = block {  # true
+    %21:bool = load %x_37
+    if %21 [t: $B4, f: $B5] {  # if_2
+      $B4: {  # true
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_2
       }
-      %b5 = block {  # false
+      $B5: {  # false
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_2
       }
@@ -53,12 +54,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b6 {
-  %b6 = block {
-    %22:void = call %main_1
-    %23:vec4<f32> = load %x_GLF_color
-    %24:main_out = construct %23
-    ret %24
+%tint_symbol = @fragment func():main_out {
+  $B6: {
+    %23:void = call %main_1
+    %24:vec4<f32> = load %x_GLF_color
+    %25:main_out = construct %24
+    ret %25
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp/0-opt.wgsl.expected.ir.msl
index 97ad25f..de6f3ec 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   fourtytwo:f32 @offset(0)
 }
 
@@ -8,44 +8,50 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %x_36:ptr<function, bool, read_write> = var
     %x_37_phi:ptr<function, bool, read_write> = var
     %6:ptr<uniform, f32, read> = access %x_5, 0u
-    %x_23:f32 = load %6
-    %8:ptr<uniform, f32, read> = access %x_5, 0u
-    %x_25:f32 = load %8
-    %10:f32 = clamp 1.0f, %x_23, %x_25
-    %x_27:bool = gt %10, 42.0f
+    %7:f32 = load %6
+    %x_23:f32 = let %7
+    %9:ptr<uniform, f32, read> = access %x_5, 0u
+    %10:f32 = load %9
+    %x_25:f32 = let %10
+    %12:f32 = clamp 1.0f, %x_23, %x_25
+    %13:bool = gt %12, 42.0f
+    %x_27:bool = let %13
     store %x_37_phi, %x_27
-    %12:bool = eq %x_27, false
-    if %12 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %13:ptr<uniform, f32, read> = access %x_5, 0u
-        %x_32:f32 = load %13
-        %15:ptr<uniform, f32, read> = access %x_5, 0u
-        %x_34:f32 = load %15
-        %17:f32 = clamp 1.0f, %x_32, %x_34
-        %18:bool = lt %17, 42.0f
-        store %x_36, %18
-        %19:bool = load %x_36
-        store %x_37_phi, %19
+    %15:bool = eq %x_27, false
+    if %15 [t: $B3] {  # if_1
+      $B3: {  # true
+        %16:ptr<uniform, f32, read> = access %x_5, 0u
+        %17:f32 = load %16
+        %x_32:f32 = let %17
+        %19:ptr<uniform, f32, read> = access %x_5, 0u
+        %20:f32 = load %19
+        %x_34:f32 = let %20
+        %22:f32 = clamp 1.0f, %x_32, %x_34
+        %23:bool = lt %22, 42.0f
+        store %x_36, %23
+        %24:bool = load %x_36
+        store %x_37_phi, %24
         exit_if  # if_1
       }
     }
-    %x_37:bool = load %x_37_phi
-    if %x_37 [t: %b4, f: %b5] {  # if_2
-      %b4 = block {  # true
+    %25:bool = load %x_37_phi
+    %x_37:bool = let %25
+    if %x_37 [t: $B4, f: $B5] {  # if_2
+      $B4: {  # true
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_2
       }
-      %b5 = block {  # false
+      $B5: {  # false
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_2
       }
@@ -53,12 +59,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b6 {
-  %b6 = block {
-    %22:void = call %main_1
-    %23:vec4<f32> = load %x_GLF_color
-    %24:main_out = construct %23
-    ret %24
+%tint_symbol = @fragment func():main_out {
+  $B6: {
+    %28:void = call %main_1
+    %29:vec4<f32> = load %x_GLF_color
+    %30:main_out = construct %29
+    ret %30
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-dot-condition-true/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-dot-condition-true/0-opt.spvasm.expected.ir.msl
index efdd3b1..0bfdeba 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-dot-condition-true/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-dot-condition-true/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: dot
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-dot-condition-true/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-dot-condition-true/0-opt.wgsl.expected.ir.msl
index efdd3b1..0bfdeba 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-dot-condition-true/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-dot-condition-true/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: dot
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-gte-const-first/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-gte-const-first/0.spvasm.expected.ir.msl
index 7edbef7..2a5511a 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-gte-const-first/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-gte-const-first/0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:f32 @offset(0)
 }
 
@@ -8,26 +8,26 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %5:f32 = load_vector_element %gl_FragCoord, 0u
     %6:ptr<uniform, f32, read> = access %x_6, 0u
     %7:f32 = load %6
     %8:f32 = add 2.0f, %7
     %9:f32 = clamp %5, 1.0f, %8
     %10:bool = gte 3.0f, %9
-    if %10 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    if %10 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
@@ -35,8 +35,8 @@
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b5 {
-  %b5 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B5: {
     store %gl_FragCoord, %gl_FragCoord_param
     %13:void = call %main_1
     %14:vec4<f32> = load %x_GLF_color
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-gte-const-first/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-gte-const-first/0.wgsl.expected.ir.msl
index c509e16..a353623 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-gte-const-first/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-gte-const-first/0.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:f32 @offset(0)
 }
 
@@ -8,26 +8,28 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
-    %x_29:f32 = load_vector_element %gl_FragCoord, 0u
-    %6:ptr<uniform, f32, read> = access %x_6, 0u
-    %x_31:f32 = load %6
-    %8:f32 = add 2.0f, %x_31
-    %9:f32 = clamp %x_29, 1.0f, %8
-    %10:bool = gte 3.0f, %9
-    if %10 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+%main_1 = func():void {
+  $B2: {
+    %5:f32 = load_vector_element %gl_FragCoord, 0u
+    %x_29:f32 = let %5
+    %7:ptr<uniform, f32, read> = access %x_6, 0u
+    %8:f32 = load %7
+    %x_31:f32 = let %8
+    %10:f32 = add 2.0f, %x_31
+    %11:f32 = clamp %x_29, 1.0f, %10
+    %12:bool = gte 3.0f, %11
+    if %12 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
@@ -35,13 +37,13 @@
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b5 {
-  %b5 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B5: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %13:void = call %main_1
-    %14:vec4<f32> = load %x_GLF_color
-    %15:main_out = construct %14
-    ret %15
+    %15:void = call %main_1
+    %16:vec4<f32> = load %x_GLF_color
+    %17:main_out = construct %16
+    ret %17
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-min-as-loop-range/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-min-as-loop-range/0-opt.spvasm.expected.ir.msl
index 5765707..739c8c3 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-min-as-loop-range/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-min-as-loop-range/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   zero:i32 @offset(0)
 }
 
@@ -8,13 +8,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %highSigned:ptr<function, i32, read_write> = var
     %highUnsigned:ptr<function, u32, read_write> = var
     %i:ptr<function, i32, read_write> = var
@@ -25,88 +25,94 @@
     store %highSigned, 1i
     store %highUnsigned, 2u
     store %i, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %11:i32 = load %i
-        %12:i32 = load %highSigned
-        %13:i32 = min 10i, %12
-        %14:ptr<uniform, i32, read> = access %x_8, 0u
-        %15:i32 = load %14
-        %16:i32 = add %13, %15
-        %17:bool = lt %11, %16
-        if %17 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %12:i32 = let %11
+        %13:i32 = load %highSigned
+        %14:i32 = min 10i, %13
+        %15:ptr<uniform, i32, read> = access %x_8, 0u
+        %16:i32 = load %15
+        %17:i32 = add %14, %16
+        %18:bool = lt %12, %17
+        if %18 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_50:i32 = load %i
-        %19:ptr<function, i32, read_write> = access %data, %x_50
-        store %19, 5i
-        continue %b4
+        %19:i32 = load %i
+        %x_50:i32 = let %19
+        %21:ptr<function, i32, read_write> = access %data, %x_50
+        store %21, 5i
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %20:i32 = load %i
-        %21:i32 = add %20, 1i
-        store %i, %21
-        next_iteration %b3
+      $B4: {  # continuing
+        %22:i32 = load %i
+        %23:i32 = add %22, 1i
+        store %i, %23
+        next_iteration  # -> $B3
       }
     }
     store %i_1, 1u
-    loop [b: %b7, c: %b8] {  # loop_2
-      %b7 = block {  # body
-        %22:u32 = load %i_1
-        %23:u32 = load %highUnsigned
-        %24:u32 = min 10u, %23
-        %25:ptr<uniform, i32, read> = access %x_8, 0u
-        %26:i32 = load %25
-        %27:u32 = bitcast %26
-        %28:u32 = add %24, %27
-        %29:bool = lt %22, %28
-        if %29 [t: %b9, f: %b10] {  # if_2
-          %b9 = block {  # true
+    loop [b: $B7, c: $B8] {  # loop_2
+      $B7: {  # body
+        %24:u32 = load %i_1
+        %25:u32 = let %24
+        %26:u32 = load %highUnsigned
+        %27:u32 = min 10u, %26
+        %28:u32 = let %27
+        %29:ptr<uniform, i32, read> = access %x_8, 0u
+        %30:i32 = load %29
+        %31:u32 = bitcast %30
+        %32:u32 = add %28, %31
+        %33:bool = lt %25, %32
+        if %33 [t: $B9, f: $B10] {  # if_2
+          $B9: {  # true
             exit_if  # if_2
           }
-          %b10 = block {  # false
+          $B10: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_67:u32 = load %i_1
-        %31:ptr<function, i32, read_write> = access %data, %x_67
-        store %31, 6i
-        continue %b8
+        %34:u32 = load %i_1
+        %x_67:u32 = let %34
+        %36:ptr<function, i32, read_write> = access %data, %x_67
+        store %36, 6i
+        continue  # -> $B8
       }
-      %b8 = block {  # continuing
-        %32:u32 = load %i_1
-        %33:u32 = add %32, 1u
-        store %i_1, %33
-        next_iteration %b7
+      $B8: {  # continuing
+        %37:u32 = load %i_1
+        %38:u32 = add %37, 1u
+        store %i_1, %38
+        next_iteration  # -> $B7
       }
     }
-    %34:ptr<function, i32, read_write> = access %data, 0i
-    %35:i32 = load %34
-    %x_73:bool = eq %35, 5i
+    %39:ptr<function, i32, read_write> = access %data, 0i
+    %40:i32 = load %39
+    %41:bool = eq %40, 5i
+    %x_73:bool = let %41
     store %x_79, %x_73
-    if %x_73 [t: %b11] {  # if_3
-      %b11 = block {  # true
-        %37:ptr<function, i32, read_write> = access %data, 1i
-        %38:i32 = load %37
-        %39:bool = eq %38, 6i
-        store %x_78, %39
-        %40:bool = load %x_78
-        store %x_79, %40
+    if %x_73 [t: $B11] {  # if_3
+      $B11: {  # true
+        %43:ptr<function, i32, read_write> = access %data, 1i
+        %44:i32 = load %43
+        %45:bool = eq %44, 6i
+        store %x_78, %45
+        %46:bool = load %x_78
+        store %x_79, %46
         exit_if  # if_3
       }
     }
-    %41:bool = load %x_79
-    if %41 [t: %b12, f: %b13] {  # if_4
-      %b12 = block {  # true
+    %47:bool = load %x_79
+    if %47 [t: $B12, f: $B13] {  # if_4
+      $B12: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_4
       }
-      %b13 = block {  # false
+      $B13: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_4
       }
@@ -114,12 +120,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b14 {
-  %b14 = block {
-    %43:void = call %main_1
-    %44:vec4<f32> = load %x_GLF_color
-    %45:main_out = construct %44
-    ret %45
+%tint_symbol = @fragment func():main_out {
+  $B14: {
+    %49:void = call %main_1
+    %50:vec4<f32> = load %x_GLF_color
+    %51:main_out = construct %50
+    ret %51
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-min-as-loop-range/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-min-as-loop-range/0-opt.wgsl.expected.ir.msl
index c7ea801..6cdc344 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-min-as-loop-range/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-min-as-loop-range/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   zero:i32 @offset(0)
 }
 
@@ -8,13 +8,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %highSigned:ptr<function, i32, read_write> = var
     %highUnsigned:ptr<function, u32, read_write> = var
     %i:ptr<function, i32, read_write> = var
@@ -25,88 +25,103 @@
     store %highSigned, 1i
     store %highUnsigned, 2u
     store %i, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_42:i32 = load %i
-        %x_43:i32 = load %highSigned
-        %13:ptr<uniform, i32, read> = access %x_8, 0u
-        %x_46:i32 = load %13
-        %15:i32 = min 10i, %x_43
-        %16:i32 = add %15, %x_46
-        %17:bool = lt %x_42, %16
-        if %17 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %11:i32 = load %i
+        %x_42:i32 = let %11
+        %13:i32 = load %highSigned
+        %x_43:i32 = let %13
+        %15:ptr<uniform, i32, read> = access %x_8, 0u
+        %16:i32 = load %15
+        %x_46:i32 = let %16
+        %18:i32 = min 10i, %x_43
+        %19:i32 = add %18, %x_46
+        %20:bool = lt %x_42, %19
+        if %20 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_50:i32 = load %i
-        %19:ptr<function, i32, read_write> = access %data, %x_50
-        store %19, 5i
-        continue %b4
+        %21:i32 = load %i
+        %x_50:i32 = let %21
+        %23:ptr<function, i32, read_write> = access %data, %x_50
+        store %23, 5i
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_52:i32 = load %i
-        %21:i32 = add %x_52, 1i
-        store %i, %21
-        next_iteration %b3
+      $B4: {  # continuing
+        %24:i32 = load %i
+        %x_52:i32 = let %24
+        %26:i32 = add %x_52, 1i
+        store %i, %26
+        next_iteration  # -> $B3
       }
     }
     store %i_1, 1u
-    loop [b: %b7, c: %b8] {  # loop_2
-      %b7 = block {  # body
-        %x_58:u32 = load %i_1
-        %x_59:u32 = load %highUnsigned
-        %24:ptr<uniform, i32, read> = access %x_8, 0u
-        %x_62:i32 = load %24
-        %26:u32 = min 10u, %x_59
-        %27:u32 = bitcast %x_62
-        %28:u32 = add %26, %27
-        %29:bool = lt %x_58, %28
-        if %29 [t: %b9, f: %b10] {  # if_2
-          %b9 = block {  # true
+    loop [b: $B7, c: $B8] {  # loop_2
+      $B7: {  # body
+        %27:u32 = load %i_1
+        %x_58:u32 = let %27
+        %29:u32 = load %highUnsigned
+        %x_59:u32 = let %29
+        %31:ptr<uniform, i32, read> = access %x_8, 0u
+        %32:i32 = load %31
+        %x_62:i32 = let %32
+        %34:u32 = min 10u, %x_59
+        %35:u32 = let %34
+        %36:u32 = bitcast %x_62
+        %37:u32 = add %35, %36
+        %38:bool = lt %x_58, %37
+        if %38 [t: $B9, f: $B10] {  # if_2
+          $B9: {  # true
             exit_if  # if_2
           }
-          %b10 = block {  # false
+          $B10: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_67:u32 = load %i_1
-        %31:ptr<function, i32, read_write> = access %data, %x_67
-        store %31, 6i
-        continue %b8
+        %39:u32 = load %i_1
+        %x_67:u32 = let %39
+        %41:ptr<function, i32, read_write> = access %data, %x_67
+        store %41, 6i
+        continue  # -> $B8
       }
-      %b8 = block {  # continuing
-        %x_69:u32 = load %i_1
-        %33:u32 = add %x_69, 1u
-        store %i_1, %33
-        next_iteration %b7
+      $B8: {  # continuing
+        %42:u32 = load %i_1
+        %x_69:u32 = let %42
+        %44:u32 = add %x_69, 1u
+        store %i_1, %44
+        next_iteration  # -> $B7
       }
     }
-    %34:ptr<function, i32, read_write> = access %data, 0i
-    %x_72:i32 = load %34
-    %x_73:bool = eq %x_72, 5i
+    %45:ptr<function, i32, read_write> = access %data, 0i
+    %46:i32 = load %45
+    %x_72:i32 = let %46
+    %48:bool = eq %x_72, 5i
+    %x_73:bool = let %48
     store %x_79_phi, %x_73
-    if %x_73 [t: %b11] {  # if_3
-      %b11 = block {  # true
-        %37:ptr<function, i32, read_write> = access %data, 1i
-        %x_77:i32 = load %37
-        %39:bool = eq %x_77, 6i
-        store %x_78, %39
-        %40:bool = load %x_78
-        store %x_79_phi, %40
+    if %x_73 [t: $B11] {  # if_3
+      $B11: {  # true
+        %50:ptr<function, i32, read_write> = access %data, 1i
+        %51:i32 = load %50
+        %x_77:i32 = let %51
+        %53:bool = eq %x_77, 6i
+        store %x_78, %53
+        %54:bool = load %x_78
+        store %x_79_phi, %54
         exit_if  # if_3
       }
     }
-    %x_79:bool = load %x_79_phi
-    if %x_79 [t: %b12, f: %b13] {  # if_4
-      %b12 = block {  # true
+    %55:bool = load %x_79_phi
+    %x_79:bool = let %55
+    if %x_79 [t: $B12, f: $B13] {  # if_4
+      $B12: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_4
       }
-      %b13 = block {  # false
+      $B13: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_4
       }
@@ -114,12 +129,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b14 {
-  %b14 = block {
-    %43:void = call %main_1
-    %44:vec4<f32> = load %x_GLF_color
-    %45:main_out = construct %44
-    ret %45
+%tint_symbol = @fragment func():main_out {
+  $B14: {
+    %58:void = call %main_1
+    %59:vec4<f32> = load %x_GLF_color
+    %60:main_out = construct %59
+    ret %60
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-mod-one-one-lte/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-mod-one-one-lte/0-opt.spvasm.expected.ir.msl
index 1c5f1fa..f6827e5 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-mod-one-one-lte/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-mod-one-one-lte/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,46 +12,48 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
-    if true [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+%main_1 = func():void {
+  $B2: {
+    if true [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         %4:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
         %5:i32 = load %4
         %6:f32 = convert %5
-        %7:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
-        %8:i32 = load %7
-        %9:f32 = convert %8
-        %10:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
-        %11:i32 = load %10
-        %12:f32 = convert %11
-        %13:vec4<f32> = construct 1.0f, %6, %9, %12
-        store %x_GLF_color, %13
+        %7:f32 = let %6
+        %8:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
+        %9:i32 = load %8
+        %10:f32 = convert %9
+        %11:f32 = let %10
+        %12:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
+        %13:i32 = load %12
+        %14:f32 = convert %13
+        %15:vec4<f32> = construct 1.0f, %7, %11, %14
+        store %x_GLF_color, %15
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %14:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
-        %15:i32 = load %14
-        %16:f32 = convert %15
-        %17:vec4<f32> = construct %16
-        store %x_GLF_color, %17
+      $B4: {  # false
+        %16:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
+        %17:i32 = load %16
+        %18:f32 = convert %17
+        %19:vec4<f32> = construct %18
+        store %x_GLF_color, %19
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %19:void = call %main_1
-    %20:vec4<f32> = load %x_GLF_color
-    %21:main_out = construct %20
-    ret %21
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %21:void = call %main_1
+    %22:vec4<f32> = load %x_GLF_color
+    %23:main_out = construct %22
+    ret %23
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-mod-one-one-lte/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-mod-one-one-lte/0-opt.wgsl.expected.ir.msl
index 916c106..8839763 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-mod-one-one-lte/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-mod-one-one-lte/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,46 +12,53 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
-    if true [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+%main_1 = func():void {
+  $B2: {
+    if true [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         %4:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
-        %x_29:i32 = load %4
-        %6:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
-        %x_32:i32 = load %6
-        %8:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
-        %x_35:i32 = load %8
-        %10:f32 = convert %x_29
-        %11:f32 = convert %x_32
-        %12:f32 = convert %x_35
-        %13:vec4<f32> = construct 1.0f, %10, %11, %12
-        store %x_GLF_color, %13
+        %5:i32 = load %4
+        %x_29:i32 = let %5
+        %7:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
+        %8:i32 = load %7
+        %x_32:i32 = let %8
+        %10:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
+        %11:i32 = load %10
+        %x_35:i32 = let %11
+        %13:f32 = convert %x_29
+        %14:f32 = let %13
+        %15:f32 = convert %x_32
+        %16:f32 = let %15
+        %17:f32 = convert %x_35
+        %18:vec4<f32> = construct 1.0f, %14, %16, %17
+        store %x_GLF_color, %18
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %14:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
-        %x_39:i32 = load %14
-        %x_40:f32 = convert %x_39
-        %17:vec4<f32> = construct %x_40, %x_40, %x_40, %x_40
-        store %x_GLF_color, %17
+      $B4: {  # false
+        %19:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
+        %20:i32 = load %19
+        %x_39:i32 = let %20
+        %22:f32 = convert %x_39
+        %x_40:f32 = let %22
+        %24:vec4<f32> = construct %x_40, %x_40, %x_40, %x_40
+        store %x_GLF_color, %24
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %19:void = call %main_1
-    %20:vec4<f32> = load %x_GLF_color
-    %21:main_out = construct %20
-    ret %21
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %26:void = call %main_1
+    %27:vec4<f32> = load %x_GLF_color
+    %28:main_out = construct %27
+    ret %28
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-pow-large-exp/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-pow-large-exp/0-opt.spvasm.expected.ir.msl
index f871052..7f460cd 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-pow-large-exp/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-pow-large-exp/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,14 +20,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_8:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %f:ptr<function, f32, read_write> = var
     %x_48:ptr<function, bool, read_write> = var
     %x_49:ptr<function, bool, read_write> = var
@@ -39,58 +39,62 @@
     %12:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
     %13:i32 = load %12
     %14:i32 = add %11, %13
-    %x_41:bool = eq %9, %14
+    %15:bool = eq %9, %14
+    %x_41:bool = let %15
     store %x_49, %x_41
-    %16:bool = eq %x_41, false
-    if %16 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %17:f32 = load %f
-        %18:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-        %19:f32 = load %18
-        %20:bool = gt %17, %19
-        store %x_48, %20
-        %21:bool = load %x_48
-        store %x_49, %21
+    %17:bool = eq %x_41, false
+    if %17 [t: $B3] {  # if_1
+      $B3: {  # true
+        %18:f32 = load %f
+        %19:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+        %20:f32 = load %19
+        %21:bool = gt %18, %20
+        store %x_48, %21
+        %22:bool = load %x_48
+        store %x_49, %22
         exit_if  # if_1
       }
     }
-    %22:bool = load %x_49
-    if %22 [t: %b4, f: %b5] {  # if_2
-      %b4 = block {  # true
-        %23:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %24:i32 = load %23
-        %25:f32 = convert %24
-        %26:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %27:i32 = load %26
-        %28:f32 = convert %27
-        %29:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %30:i32 = load %29
-        %31:f32 = convert %30
-        %32:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %23:bool = load %x_49
+    if %23 [t: $B4, f: $B5] {  # if_2
+      $B4: {  # true
+        %24:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %25:i32 = load %24
+        %26:f32 = convert %25
+        %27:f32 = let %26
+        %28:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %29:i32 = load %28
+        %30:f32 = convert %29
+        %31:f32 = let %30
+        %32:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
         %33:i32 = load %32
         %34:f32 = convert %33
-        %35:vec4<f32> = construct %25, %28, %31, %34
-        store %x_GLF_color, %35
-        exit_if  # if_2
-      }
-      %b5 = block {  # false
-        %36:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %35:f32 = let %34
+        %36:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
         %37:i32 = load %36
         %38:f32 = convert %37
-        %39:vec4<f32> = construct %38
+        %39:vec4<f32> = construct %27, %31, %35, %38
         store %x_GLF_color, %39
         exit_if  # if_2
       }
+      $B5: {  # false
+        %40:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %41:i32 = load %40
+        %42:f32 = convert %41
+        %43:vec4<f32> = construct %42
+        store %x_GLF_color, %43
+        exit_if  # if_2
+      }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b6 {
-  %b6 = block {
-    %41:void = call %main_1
-    %42:vec4<f32> = load %x_GLF_color
-    %43:main_out = construct %42
-    ret %43
+%tint_symbol = @fragment func():main_out {
+  $B6: {
+    %45:void = call %main_1
+    %46:vec4<f32> = load %x_GLF_color
+    %47:main_out = construct %46
+    ret %47
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-pow-large-exp/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-pow-large-exp/0-opt.wgsl.expected.ir.msl
index abe9cfd..140da70 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-pow-large-exp/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-pow-large-exp/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,77 +20,93 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_8:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %f:ptr<function, f32, read_write> = var
     %x_48:ptr<function, bool, read_write> = var
     %x_49_phi:ptr<function, bool, read_write> = var
     store %f, 1626.509033203125f
     %8:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_35:i32 = load %8
-    %10:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_37:i32 = load %10
-    %12:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_39:i32 = load %12
-    %14:i32 = add %x_37, %x_39
-    %x_41:bool = eq %x_35, %14
+    %9:i32 = load %8
+    %x_35:i32 = let %9
+    %11:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %12:i32 = load %11
+    %x_37:i32 = let %12
+    %14:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %15:i32 = load %14
+    %x_39:i32 = let %15
+    %17:i32 = add %x_37, %x_39
+    %18:bool = eq %x_35, %17
+    %x_41:bool = let %18
     store %x_49_phi, %x_41
-    %16:bool = eq %x_41, false
-    if %16 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %x_45:f32 = load %f
-        %18:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-        %x_47:f32 = load %18
-        %20:bool = gt %x_45, %x_47
-        store %x_48, %20
-        %21:bool = load %x_48
-        store %x_49_phi, %21
+    %20:bool = eq %x_41, false
+    if %20 [t: $B3] {  # if_1
+      $B3: {  # true
+        %21:f32 = load %f
+        %x_45:f32 = let %21
+        %23:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+        %24:f32 = load %23
+        %x_47:f32 = let %24
+        %26:bool = gt %x_45, %x_47
+        store %x_48, %26
+        %27:bool = load %x_48
+        store %x_49_phi, %27
         exit_if  # if_1
       }
     }
-    %x_49:bool = load %x_49_phi
-    if %x_49 [t: %b4, f: %b5] {  # if_2
-      %b4 = block {  # true
-        %23:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_54:i32 = load %23
-        %25:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_57:i32 = load %25
-        %27:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_60:i32 = load %27
-        %29:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_63:i32 = load %29
-        %31:f32 = convert %x_54
-        %32:f32 = convert %x_57
-        %33:f32 = convert %x_60
-        %34:f32 = convert %x_63
-        %35:vec4<f32> = construct %31, %32, %33, %34
-        store %x_GLF_color, %35
+    %28:bool = load %x_49_phi
+    %x_49:bool = let %28
+    if %x_49 [t: $B4, f: $B5] {  # if_2
+      $B4: {  # true
+        %30:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %31:i32 = load %30
+        %x_54:i32 = let %31
+        %33:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %34:i32 = load %33
+        %x_57:i32 = let %34
+        %36:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %37:i32 = load %36
+        %x_60:i32 = let %37
+        %39:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %40:i32 = load %39
+        %x_63:i32 = let %40
+        %42:f32 = convert %x_54
+        %43:f32 = let %42
+        %44:f32 = convert %x_57
+        %45:f32 = let %44
+        %46:f32 = convert %x_60
+        %47:f32 = let %46
+        %48:f32 = convert %x_63
+        %49:vec4<f32> = construct %43, %45, %47, %48
+        store %x_GLF_color, %49
         exit_if  # if_2
       }
-      %b5 = block {  # false
-        %36:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_67:i32 = load %36
-        %x_68:f32 = convert %x_67
-        %39:vec4<f32> = construct %x_68, %x_68, %x_68, %x_68
-        store %x_GLF_color, %39
+      $B5: {  # false
+        %50:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %51:i32 = load %50
+        %x_67:i32 = let %51
+        %53:f32 = convert %x_67
+        %x_68:f32 = let %53
+        %55:vec4<f32> = construct %x_68, %x_68, %x_68, %x_68
+        store %x_GLF_color, %55
         exit_if  # if_2
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b6 {
-  %b6 = block {
-    %41:void = call %main_1
-    %42:vec4<f32> = load %x_GLF_color
-    %43:main_out = construct %42
-    ret %43
+%tint_symbol = @fragment func():main_out {
+  $B6: {
+    %57:void = call %main_1
+    %58:vec4<f32> = load %x_GLF_color
+    %59:main_out = construct %58
+    ret %59
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-same-condition/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-same-condition/0-opt.spvasm.expected.ir.msl
index b1220a7..970346c 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-same-condition/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-same-condition/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:f32 @offset(0)
 }
 
@@ -8,66 +8,64 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %x_30:ptr<function, bool, read_write> = var
     %x_31:ptr<function, bool, read_write> = var
     store %x_GLF_color, vec4<f32>(0.0f)
     %6:ptr<uniform, f32, read> = access %x_5, 0u
     %7:f32 = load %6
-    %x_24:bool = lt %7, 0.0f
+    %8:bool = lt %7, 0.0f
+    %x_24:bool = let %8
     store %x_31, %x_24
-    %9:bool = eq %x_24, false
-    if %9 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %10:ptr<uniform, f32, read> = access %x_5, 0u
-        %11:f32 = load %10
-        %12:bool = lt %11, 1.0f
-        store %x_30, %12
-        %13:bool = load %x_30
-        store %x_31, %13
+    %10:bool = eq %x_24, false
+    if %10 [t: $B3] {  # if_1
+      $B3: {  # true
+        %11:ptr<uniform, f32, read> = access %x_5, 0u
+        %12:f32 = load %11
+        %13:bool = lt %12, 1.0f
+        store %x_30, %13
+        %14:bool = load %x_30
+        store %x_31, %14
         exit_if  # if_1
       }
     }
-    %14:bool = load %x_31
-    if %14 [t: %b4] {  # if_2
-      %b4 = block {  # true
+    %15:bool = load %x_31
+    if %15 [t: $B4] {  # if_2
+      $B4: {  # true
         ret
       }
     }
-    %15:ptr<uniform, f32, read> = access %x_5, 0u
-    %16:f32 = load %15
-    %17:bool = lt %16, 0.0f
-    if %17 [t: %b5, f: %b6] {  # if_3
-      %b5 = block {  # true
-        loop [b: %b7, c: %b8] {  # loop_1
-          %b7 = block {  # body
-            %18:ptr<uniform, f32, read> = access %x_5, 0u
-            %19:f32 = load %18
-            %20:bool = lt %19, 0.0f
-            if %20 [t: %b9, f: %b10] {  # if_4
-              %b9 = block {  # true
+    %16:ptr<uniform, f32, read> = access %x_5, 0u
+    %17:f32 = load %16
+    %18:bool = lt %17, 0.0f
+    if %18 [t: $B5, f: $B6] {  # if_3
+      $B5: {  # true
+        loop [b: $B7] {  # loop_1
+          $B7: {  # body
+            %19:ptr<uniform, f32, read> = access %x_5, 0u
+            %20:f32 = load %19
+            %21:bool = lt %20, 0.0f
+            if %21 [t: $B8, f: $B9] {  # if_4
+              $B8: {  # true
                 exit_if  # if_4
               }
-              %b10 = block {  # false
+              $B9: {  # false
                 exit_loop  # loop_1
               }
             }
             store %x_GLF_color, vec4<f32>(1.0f)
             exit_loop  # loop_1
           }
-          %b8 = block {  # continuing
-            next_iteration %b7
-          }
         }
         exit_if  # if_3
       }
-      %b6 = block {  # false
+      $B6: {  # false
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_3
       }
@@ -75,12 +73,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b11 {
-  %b11 = block {
-    %22:void = call %main_1
-    %23:vec4<f32> = load %x_GLF_color
-    %24:main_out = construct %23
-    ret %24
+%tint_symbol = @fragment func():main_out {
+  $B10: {
+    %23:void = call %main_1
+    %24:vec4<f32> = load %x_GLF_color
+    %25:main_out = construct %24
+    ret %25
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-same-condition/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-same-condition/0-opt.wgsl.expected.ir.msl
index c2891ba..11ca372 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-same-condition/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-same-condition/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:f32 @offset(0)
 }
 
@@ -8,66 +8,69 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %x_30:ptr<function, bool, read_write> = var
     %x_31_phi:ptr<function, bool, read_write> = var
     store %x_GLF_color, vec4<f32>(0.0f)
     %6:ptr<uniform, f32, read> = access %x_5, 0u
-    %x_23:f32 = load %6
-    %x_24:bool = lt %x_23, 0.0f
+    %7:f32 = load %6
+    %x_23:f32 = let %7
+    %9:bool = lt %x_23, 0.0f
+    %x_24:bool = let %9
     store %x_31_phi, %x_24
-    %9:bool = eq %x_24, false
-    if %9 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %10:ptr<uniform, f32, read> = access %x_5, 0u
-        %x_29:f32 = load %10
-        %12:bool = lt %x_29, 1.0f
-        store %x_30, %12
-        %13:bool = load %x_30
-        store %x_31_phi, %13
+    %11:bool = eq %x_24, false
+    if %11 [t: $B3] {  # if_1
+      $B3: {  # true
+        %12:ptr<uniform, f32, read> = access %x_5, 0u
+        %13:f32 = load %12
+        %x_29:f32 = let %13
+        %15:bool = lt %x_29, 1.0f
+        store %x_30, %15
+        %16:bool = load %x_30
+        store %x_31_phi, %16
         exit_if  # if_1
       }
     }
-    %x_31:bool = load %x_31_phi
-    if %x_31 [t: %b4] {  # if_2
-      %b4 = block {  # true
+    %17:bool = load %x_31_phi
+    %x_31:bool = let %17
+    if %x_31 [t: $B4] {  # if_2
+      $B4: {  # true
         ret
       }
     }
-    %15:ptr<uniform, f32, read> = access %x_5, 0u
-    %x_35:f32 = load %15
-    %17:bool = lt %x_35, 0.0f
-    if %17 [t: %b5, f: %b6] {  # if_3
-      %b5 = block {  # true
-        loop [b: %b7, c: %b8] {  # loop_1
-          %b7 = block {  # body
-            %18:ptr<uniform, f32, read> = access %x_5, 0u
-            %x_45:f32 = load %18
-            %20:bool = lt %x_45, 0.0f
-            if %20 [t: %b9, f: %b10] {  # if_4
-              %b9 = block {  # true
+    %19:ptr<uniform, f32, read> = access %x_5, 0u
+    %20:f32 = load %19
+    %x_35:f32 = let %20
+    %22:bool = lt %x_35, 0.0f
+    if %22 [t: $B5, f: $B6] {  # if_3
+      $B5: {  # true
+        loop [b: $B7] {  # loop_1
+          $B7: {  # body
+            %23:ptr<uniform, f32, read> = access %x_5, 0u
+            %24:f32 = load %23
+            %x_45:f32 = let %24
+            %26:bool = lt %x_45, 0.0f
+            if %26 [t: $B8, f: $B9] {  # if_4
+              $B8: {  # true
                 exit_if  # if_4
               }
-              %b10 = block {  # false
+              $B9: {  # false
                 exit_loop  # loop_1
               }
             }
             store %x_GLF_color, vec4<f32>(1.0f)
             exit_loop  # loop_1
           }
-          %b8 = block {  # continuing
-            next_iteration %b7
-          }
         }
         exit_if  # if_3
       }
-      %b6 = block {  # false
+      $B6: {  # false
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_3
       }
@@ -75,12 +78,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b11 {
-  %b11 = block {
-    %22:void = call %main_1
-    %23:vec4<f32> = load %x_GLF_color
-    %24:main_out = construct %23
-    ret %24
+%tint_symbol = @fragment func():main_out {
+  $B10: {
+    %28:void = call %main_1
+    %29:vec4<f32> = load %x_GLF_color
+    %30:main_out = construct %29
+    ret %30
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-vector-shuffle/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-vector-shuffle/0.spvasm.expected.ir.msl
index efdd3b1..0232881 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-vector-shuffle/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-vector-shuffle/0.spvasm.expected.ir.msl
@@ -1,6 +1,92 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+}
+
+%main_1 = func():void {
+  $B2: {
+    %x_26:ptr<function, vec2<f32>, read_write> = var
+    %x_5:ptr<function, i32, read_write> = var
+    %x_39:ptr<function, bool, read_write> = var
+    %x_40:ptr<function, bool, read_write> = var
+    store %x_26, vec2<f32>(0.0f)
+    store %x_5, 2i
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %x_27:ptr<function, vec2<f32>, read_write> = var
+        %x_4:ptr<function, i32, read_write> = var
+        %9:i32 = load %x_5
+        %10:bool = lt %9, 3i
+        if %10 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
+            exit_if  # if_1
+          }
+          $B6: {  # false
+            exit_loop  # loop_1
+          }
+        }
+        continue  # -> $B4
+      }
+      $B4: {  # continuing
+        %11:i32 = load %x_5
+        %12:f32 = convert %11
+        %13:vec2<f32> = construct 1.0f, %12
+        %14:vec2<f32> = swizzle %13, xy
+        store %x_27, %14
+        %15:i32 = load %x_5
+        %16:i32 = add %15, 1i
+        store %x_4, %16
+        %17:vec2<f32> = load %x_27
+        store %x_26, %17
+        %18:i32 = load %x_4
+        store %x_5, %18
+        next_iteration  # -> $B3
+      }
+    }
+    %19:f32 = load_vector_element %x_26, 0u
+    %20:bool = neq %19, 1.0f
+    %x_34:bool = let %20
+    store %x_40, %x_34
+    %22:bool = eq %x_34, false
+    if %22 [t: $B7] {  # if_2
+      $B7: {  # true
+        %23:f32 = load_vector_element %x_26, 1u
+        %24:bool = neq %23, 2.0f
+        store %x_39, %24
+        %25:bool = load %x_39
+        store %x_40, %25
+        exit_if  # if_2
+      }
+    }
+    %26:bool = load %x_40
+    if %26 [t: $B8, f: $B9] {  # if_3
+      $B8: {  # true
+        store %x_GLF_color, vec4<f32>(0.0f)
+        exit_if  # if_3
+      }
+      $B9: {  # false
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        exit_if  # if_3
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B10: {
+    %28:void = call %main_1
+    %29:vec4<f32> = load %x_GLF_color
+    %30:main_out = construct %29
+    ret %30
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-vector-shuffle/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-vector-shuffle/0.wgsl.expected.ir.msl
index efdd3b1..03d781c 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-vector-shuffle/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-const-folding-vector-shuffle/0.wgsl.expected.ir.msl
@@ -1,6 +1,98 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+}
+
+%main_1 = func():void {
+  $B2: {
+    %x_26:ptr<function, vec2<f32>, read_write> = var
+    %x_39:ptr<function, bool, read_write> = var
+    %x_26_phi:ptr<function, vec2<f32>, read_write> = var
+    %x_5_phi:ptr<function, i32, read_write> = var
+    %x_40_phi:ptr<function, bool, read_write> = var
+    store %x_26_phi, vec2<f32>(0.0f)
+    store %x_5_phi, 2i
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %x_27:ptr<function, vec2<f32>, read_write> = var
+        %x_4:ptr<function, i32, read_write> = var
+        %10:vec2<f32> = load %x_26_phi
+        store %x_26, %10
+        %11:i32 = load %x_5_phi
+        %x_5:i32 = let %11
+        %13:bool = lt %x_5, 3i
+        if %13 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
+            exit_if  # if_1
+          }
+          $B6: {  # false
+            exit_loop  # loop_1
+          }
+        }
+        continue  # -> $B4
+      }
+      $B4: {  # continuing
+        %14:f32 = convert %x_5
+        %15:vec2<f32> = construct 1.0f, %14
+        %x_32:vec2<f32> = let %15
+        %17:f32 = access %x_32, 0u
+        %18:f32 = access %x_32, 1u
+        %19:vec2<f32> = construct %17, %18
+        store %x_27, %19
+        %20:i32 = add %x_5, 1i
+        store %x_4, %20
+        %21:vec2<f32> = load %x_27
+        store %x_26_phi, %21
+        %22:i32 = load %x_4
+        store %x_5_phi, %22
+        next_iteration  # -> $B3
+      }
+    }
+    %23:f32 = load_vector_element %x_26, 0u
+    %24:bool = neq %23, 1.0f
+    %x_34:bool = let %24
+    store %x_40_phi, %x_34
+    %26:bool = eq %x_34, false
+    if %26 [t: $B7] {  # if_2
+      $B7: {  # true
+        %27:f32 = load_vector_element %x_26, 1u
+        %28:bool = neq %27, 2.0f
+        store %x_39, %28
+        %29:bool = load %x_39
+        store %x_40_phi, %29
+        exit_if  # if_2
+      }
+    }
+    %30:bool = load %x_40_phi
+    %x_40:bool = let %30
+    if %x_40 [t: $B8, f: $B9] {  # if_3
+      $B8: {  # true
+        store %x_GLF_color, vec4<f32>(0.0f)
+        exit_if  # if_3
+      }
+      $B9: {  # false
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        exit_if  # if_3
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B10: {
+    %33:void = call %main_1
+    %34:vec4<f32> = load %x_GLF_color
+    %35:main_out = construct %34
+    ret %35
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-constant-folding-atan-over-tanh/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-constant-folding-atan-over-tanh/0-opt.spvasm.expected.ir.msl
index efdd3b1..5a0e1c0 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-constant-folding-atan-over-tanh/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-constant-folding-atan-over-tanh/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,45 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+}
+
+%main_1 = func():void {
+  $B2: {
+    %f:ptr<function, f32, read_write> = var
+    store %f, 0.9199161529541015625f
+    %4:f32 = load %f
+    %5:bool = gt %4, 0.91000002622604370117f
+    %6:f32 = load %f
+    %7:bool = lt %6, 0.93000000715255737305f
+    %8:bool = and %5, %7
+    if %8 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        exit_if  # if_1
+      }
+      $B4: {  # false
+        store %x_GLF_color, vec4<f32>(0.0f)
+        exit_if  # if_1
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %10:void = call %main_1
+    %11:vec4<f32> = load %x_GLF_color
+    %12:main_out = construct %11
+    ret %12
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-constant-folding-atan-over-tanh/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-constant-folding-atan-over-tanh/0-opt.wgsl.expected.ir.msl
index efdd3b1..88f603e 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-constant-folding-atan-over-tanh/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-constant-folding-atan-over-tanh/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,47 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+}
+
+%main_1 = func():void {
+  $B2: {
+    %f:ptr<function, f32, read_write> = var
+    store %f, 0.9199161529541015625f
+    %4:f32 = load %f
+    %x_21:f32 = let %4
+    %6:f32 = load %f
+    %x_23:f32 = let %6
+    %8:bool = gt %x_21, 0.91000002622604370117f
+    %9:bool = lt %x_23, 0.93000000715255737305f
+    %10:bool = and %8, %9
+    if %10 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        exit_if  # if_1
+      }
+      $B4: {  # false
+        store %x_GLF_color, vec4<f32>(0.0f)
+        exit_if  # if_1
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %12:void = call %main_1
+    %13:vec4<f32> = load %x_GLF_color
+    %14:main_out = construct %13
+    ret %14
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-constants-combine-add-sub/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-constants-combine-add-sub/0-opt.spvasm.expected.ir.msl
index 94a54f7..880baac 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-constants-combine-add-sub/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-constants-combine-add-sub/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,13 +12,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_8:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%func_f1_ = func(%f:ptr<function, f32, read_write>):i32 -> %b2 {
-  %b2 = block {
+%func_f1_ = func(%f:ptr<function, f32, read_write>):i32 {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %b:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
@@ -31,17 +31,17 @@
     %12:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
     %13:i32 = load %12
     store %i, %13
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %14:i32 = load %i
         %15:ptr<uniform, i32, read> = access %x_8, 0u, 4i, 0u
         %16:i32 = load %15
         %17:bool = lt %14, %16
-        if %17 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %17 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
@@ -49,95 +49,124 @@
         %19:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
         %20:i32 = load %19
         %21:bool = gt %18, %20
-        if %21 [t: %b7] {  # if_2
-          %b7 = block {  # true
+        if %21 [t: $B7] {  # if_2
+          $B7: {  # true
             exit_loop  # loop_1
           }
         }
         %22:f32 = load %f
-        %23:i32 = convert %22
-        %24:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-        %25:i32 = load %24
-        %26:i32 = div %25, 2i
-        %27:i32 = sub %23, %26
-        %28:i32 = load %i
-        %29:i32 = add %27, %28
-        store %a, %29
-        %30:i32 = load %b
-        %31:i32 = add %30, 1i
-        store %b, %31
-        continue %b4
+        %23:i32 = call %tint_f32_to_i32, %22
+        %25:i32 = let %23
+        %26:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+        %27:i32 = load %26
+        %28:i32 = call %tint_div_i32, %27, 2i
+        %30:i32 = sub %25, %28
+        %31:i32 = load %i
+        %32:i32 = add %30, %31
+        store %a, %32
+        %33:i32 = load %b
+        %34:i32 = add %33, 1i
+        store %b, %34
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %32:i32 = load %i
-        %33:i32 = add %32, 1i
-        store %i, %33
-        next_iteration %b3
+      $B4: {  # continuing
+        %35:i32 = load %i
+        %36:i32 = add %35, 1i
+        store %i, %36
+        next_iteration  # -> $B3
       }
     }
-    %34:i32 = load %b
-    %35:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-    %36:i32 = load %35
-    %37:bool = eq %34, %36
-    if %37 [t: %b8, f: %b9] {  # if_3
-      %b8 = block {  # true
-        %38:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-        %x_100:i32 = load %38
+    %37:i32 = load %b
+    %38:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+    %39:i32 = load %38
+    %40:bool = eq %37, %39
+    if %40 [t: $B8, f: $B9] {  # if_3
+      $B8: {  # true
+        %41:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+        %42:i32 = load %41
+        %x_100:i32 = let %42
         ret %x_100
       }
-      %b9 = block {  # false
-        %40:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
-        %x_102:i32 = load %40
+      $B9: {  # false
+        %44:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
+        %45:i32 = load %44
+        %x_102:i32 = let %45
         ret %x_102
       }
     }
     unreachable
   }
 }
-%main_1 = func():void -> %b10 {
-  %b10 = block {
+%main_1 = func():void {
+  $B10: {
     %param:ptr<function, f32, read_write> = var
     store %param, 0.69999998807907104492f
-    %x_34:i32 = call %func_f1_, %param
-    %45:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-    %46:i32 = load %45
-    %47:bool = eq %x_34, %46
-    if %47 [t: %b11, f: %b12] {  # if_4
-      %b11 = block {  # true
-        %48:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-        %49:i32 = load %48
-        %50:f32 = convert %49
-        %51:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
-        %52:i32 = load %51
-        %53:f32 = convert %52
-        %54:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
+    %49:i32 = call %func_f1_, %param
+    %x_34:i32 = let %49
+    %51:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+    %52:i32 = load %51
+    %53:bool = eq %x_34, %52
+    if %53 [t: $B11, f: $B12] {  # if_4
+      $B11: {  # true
+        %54:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
         %55:i32 = load %54
         %56:f32 = convert %55
-        %57:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-        %58:i32 = load %57
-        %59:f32 = convert %58
-        %60:vec4<f32> = construct %50, %53, %56, %59
-        store %x_GLF_color, %60
+        %57:f32 = let %56
+        %58:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
+        %59:i32 = load %58
+        %60:f32 = convert %59
+        %61:f32 = let %60
+        %62:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
+        %63:i32 = load %62
+        %64:f32 = convert %63
+        %65:f32 = let %64
+        %66:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+        %67:i32 = load %66
+        %68:f32 = convert %67
+        %69:vec4<f32> = construct %57, %61, %65, %68
+        store %x_GLF_color, %69
         exit_if  # if_4
       }
-      %b12 = block {  # false
-        %61:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
-        %62:i32 = load %61
-        %63:f32 = convert %62
-        %64:vec4<f32> = construct %63
-        store %x_GLF_color, %64
+      $B12: {  # false
+        %70:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
+        %71:i32 = load %70
+        %72:f32 = convert %71
+        %73:vec4<f32> = construct %72
+        store %x_GLF_color, %73
         exit_if  # if_4
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b13 {
-  %b13 = block {
-    %66:void = call %main_1
-    %67:vec4<f32> = load %x_GLF_color
-    %68:main_out = construct %67
-    ret %68
+%tint_symbol = @fragment func():main_out {
+  $B13: {
+    %75:void = call %main_1
+    %76:vec4<f32> = load %x_GLF_color
+    %77:main_out = construct %76
+    ret %77
+  }
+}
+%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B14: {
+    %80:bool = eq %rhs, 0i
+    %81:bool = eq %lhs, -2147483648i
+    %82:bool = eq %rhs, -1i
+    %83:bool = and %81, %82
+    %84:bool = or %80, %83
+    %85:i32 = select %rhs, 1i, %84
+    %86:i32 = div %lhs, %85
+    ret %86
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B15: {
+    %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
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-constants-combine-add-sub/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-constants-combine-add-sub/0-opt.wgsl.expected.ir.msl
index 21eadef..5e9ae59 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-constants-combine-add-sub/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-constants-combine-add-sub/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,132 +12,182 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_8:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%func_f1_ = func(%f:ptr<function, f32, read_write>):i32 -> %b2 {
-  %b2 = block {
+%func_f1_ = func(%f:ptr<function, f32, read_write>):i32 {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %b:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %8:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-    %x_60:i32 = load %8
+    %9:i32 = load %8
+    %x_60:i32 = let %9
     store %a, %x_60
-    %10:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
-    %x_62:i32 = load %10
+    %11:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
+    %12:i32 = load %11
+    %x_62:i32 = let %12
     store %b, %x_62
-    %12:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
-    %x_64:i32 = load %12
+    %14:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
+    %15:i32 = load %14
+    %x_64:i32 = let %15
     store %i, %x_64
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_69:i32 = load %i
-        %15:ptr<uniform, i32, read> = access %x_8, 0u, 4i, 0u
-        %x_71:i32 = load %15
-        %17:bool = lt %x_69, %x_71
-        if %17 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %17:i32 = load %i
+        %x_69:i32 = let %17
+        %19:ptr<uniform, i32, read> = access %x_8, 0u, 4i, 0u
+        %20:i32 = load %19
+        %x_71:i32 = let %20
+        %22:bool = lt %x_69, %x_71
+        if %22 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_74:i32 = load %a
-        %19:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
-        %x_76:i32 = load %19
-        %21:bool = gt %x_74, %x_76
-        if %21 [t: %b7] {  # if_2
-          %b7 = block {  # true
+        %23:i32 = load %a
+        %x_74:i32 = let %23
+        %25:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
+        %26:i32 = load %25
+        %x_76:i32 = let %26
+        %28:bool = gt %x_74, %x_76
+        if %28 [t: $B7] {  # if_2
+          $B7: {  # true
             exit_loop  # loop_1
           }
         }
-        %x_80:f32 = load %f
-        %23:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-        %x_83:i32 = load %23
-        %x_86:i32 = load %i
-        %26:i32 = convert %x_80
-        %27:i32 = div %x_83, 2i
-        %28:i32 = sub %26, %27
-        %29:i32 = add %28, %x_86
-        store %a, %29
-        %x_88:i32 = load %b
-        %31:i32 = add %x_88, 1i
-        store %b, %31
-        continue %b4
+        %29:f32 = load %f
+        %x_80:f32 = let %29
+        %31:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+        %32:i32 = load %31
+        %x_83:i32 = let %32
+        %34:i32 = load %i
+        %x_86:i32 = let %34
+        %36:i32 = call %tint_f32_to_i32, %x_80
+        %38:i32 = let %36
+        %39:i32 = call %tint_div_i32, %x_83, 2i
+        %41:i32 = sub %38, %39
+        %42:i32 = add %41, %x_86
+        store %a, %42
+        %43:i32 = load %b
+        %x_88:i32 = let %43
+        %45:i32 = add %x_88, 1i
+        store %b, %45
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_90:i32 = load %i
-        %33:i32 = add %x_90, 1i
-        store %i, %33
-        next_iteration %b3
+      $B4: {  # continuing
+        %46:i32 = load %i
+        %x_90:i32 = let %46
+        %48:i32 = add %x_90, 1i
+        store %i, %48
+        next_iteration  # -> $B3
       }
     }
-    %x_92:i32 = load %b
-    %35:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-    %x_94:i32 = load %35
-    %37:bool = eq %x_92, %x_94
-    if %37 [t: %b8, f: %b9] {  # if_3
-      %b8 = block {  # true
-        %38:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-        %x_100:i32 = load %38
+    %49:i32 = load %b
+    %x_92:i32 = let %49
+    %51:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+    %52:i32 = load %51
+    %x_94:i32 = let %52
+    %54:bool = eq %x_92, %x_94
+    if %54 [t: $B8, f: $B9] {  # if_3
+      $B8: {  # true
+        %55:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+        %56:i32 = load %55
+        %x_100:i32 = let %56
         ret %x_100
       }
-      %b9 = block {  # false
-        %40:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
-        %x_102:i32 = load %40
+      $B9: {  # false
+        %58:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
+        %59:i32 = load %58
+        %x_102:i32 = let %59
         ret %x_102
       }
     }
     unreachable
   }
 }
-%main_1 = func():void -> %b10 {
-  %b10 = block {
+%main_1 = func():void {
+  $B10: {
     %param:ptr<function, f32, read_write> = var
     store %param, 0.69999998807907104492f
-    %x_34:i32 = call %func_f1_, %param
-    %45:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-    %x_36:i32 = load %45
-    %47:bool = eq %x_34, %x_36
-    if %47 [t: %b11, f: %b12] {  # if_4
-      %b11 = block {  # true
-        %48:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-        %x_42:i32 = load %48
-        %50:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
-        %x_45:i32 = load %50
-        %52:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
-        %x_48:i32 = load %52
-        %54:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-        %x_51:i32 = load %54
-        %56:f32 = convert %x_42
-        %57:f32 = convert %x_45
-        %58:f32 = convert %x_48
-        %59:f32 = convert %x_51
-        %60:vec4<f32> = construct %56, %57, %58, %59
-        store %x_GLF_color, %60
+    %63:i32 = call %func_f1_, %param
+    %x_34:i32 = let %63
+    %65:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+    %66:i32 = load %65
+    %x_36:i32 = let %66
+    %68:bool = eq %x_34, %x_36
+    if %68 [t: $B11, f: $B12] {  # if_4
+      $B11: {  # true
+        %69:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+        %70:i32 = load %69
+        %x_42:i32 = let %70
+        %72:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
+        %73:i32 = load %72
+        %x_45:i32 = let %73
+        %75:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
+        %76:i32 = load %75
+        %x_48:i32 = let %76
+        %78:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+        %79:i32 = load %78
+        %x_51:i32 = let %79
+        %81:f32 = convert %x_42
+        %82:f32 = let %81
+        %83:f32 = convert %x_45
+        %84:f32 = let %83
+        %85:f32 = convert %x_48
+        %86:f32 = let %85
+        %87:f32 = convert %x_51
+        %88:vec4<f32> = construct %82, %84, %86, %87
+        store %x_GLF_color, %88
         exit_if  # if_4
       }
-      %b12 = block {  # false
-        %61:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
-        %x_55:i32 = load %61
-        %x_56:f32 = convert %x_55
-        %64:vec4<f32> = construct %x_56, %x_56, %x_56, %x_56
-        store %x_GLF_color, %64
+      $B12: {  # false
+        %89:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
+        %90:i32 = load %89
+        %x_55:i32 = let %90
+        %92:f32 = convert %x_55
+        %x_56:f32 = let %92
+        %94:vec4<f32> = construct %x_56, %x_56, %x_56, %x_56
+        store %x_GLF_color, %94
         exit_if  # if_4
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b13 {
-  %b13 = block {
-    %66:void = call %main_1
-    %67:vec4<f32> = load %x_GLF_color
-    %68:main_out = construct %67
-    ret %68
+%tint_symbol = @fragment func():main_out {
+  $B13: {
+    %96:void = call %main_1
+    %97:vec4<f32> = load %x_GLF_color
+    %98:main_out = construct %97
+    ret %98
+  }
+}
+%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B14: {
+    %101:bool = eq %rhs, 0i
+    %102:bool = eq %lhs, -2147483648i
+    %103:bool = eq %rhs, -1i
+    %104:bool = and %102, %103
+    %105:bool = or %101, %104
+    %106:i32 = select %rhs, 1i, %105
+    %107:i32 = div %lhs, %106
+    ret %107
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B15: {
+    %109:i32 = convert %value
+    %110:bool = gte %value, -2147483648.0f
+    %111:i32 = select -2147483648i, %109, %110
+    %112:bool = lte %value, 2147483520.0f
+    %113:i32 = select 2147483647i, %111, %112
+    ret %113
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-constants-mix-uniform/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-constants-mix-uniform/0-opt.spvasm.expected.ir.msl
index ec5ba1a..0a98a9c 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-constants-mix-uniform/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-constants-mix-uniform/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   one:vec2<f32> @offset(0)
 }
 
@@ -8,13 +8,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %mixed:ptr<function, vec2<f32>, read_write> = var
     %5:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
     %6:vec2<f32> = load %5
@@ -23,14 +23,14 @@
     %8:vec2<f32> = load %mixed
     %9:vec2<bool> = eq %8, vec2<f32>(1.0f)
     %10:bool = all %9
-    if %10 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    if %10 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         %11:f32 = load_vector_element %mixed, 0u
         %12:vec4<f32> = construct %11, 0.0f, 0.0f, 1.0f
         store %x_GLF_color, %12
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
@@ -38,8 +38,8 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
+%tint_symbol = @fragment func():main_out {
+  $B5: {
     %14:void = call %main_1
     %15:vec4<f32> = load %x_GLF_color
     %16:main_out = construct %15
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-constants-mix-uniform/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-constants-mix-uniform/0-opt.wgsl.expected.ir.msl
index 48ef682..13bef3c 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-constants-mix-uniform/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-constants-mix-uniform/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   one:vec2<f32> @offset(0)
 }
 
@@ -8,29 +8,32 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %mixed:ptr<function, vec2<f32>, read_write> = var
     %5:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %x_30:vec2<f32> = load %5
-    %7:vec2<f32> = mix vec2<f32>(1.0f), %x_30, vec2<f32>(0.5f)
-    store %mixed, %7
-    %x_33:vec2<f32> = load %mixed
-    %9:vec2<bool> = eq %x_33, vec2<f32>(1.0f)
-    %10:bool = all %9
-    if %10 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %x_40:f32 = load_vector_element %mixed, 0u
-        %12:vec4<f32> = construct %x_40, 0.0f, 0.0f, 1.0f
-        store %x_GLF_color, %12
+    %6:vec2<f32> = load %5
+    %x_30:vec2<f32> = let %6
+    %8:vec2<f32> = mix vec2<f32>(1.0f), %x_30, vec2<f32>(0.5f)
+    store %mixed, %8
+    %9:vec2<f32> = load %mixed
+    %x_33:vec2<f32> = let %9
+    %11:vec2<bool> = eq %x_33, vec2<f32>(1.0f)
+    %12:bool = all %11
+    if %12 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %13:f32 = load_vector_element %mixed, 0u
+        %x_40:f32 = let %13
+        %15:vec4<f32> = construct %x_40, 0.0f, 0.0f, 1.0f
+        store %x_GLF_color, %15
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
@@ -38,12 +41,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %14:void = call %main_1
-    %15:vec4<f32> = load %x_GLF_color
-    %16:main_out = construct %15
-    ret %16
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %17:void = call %main_1
+    %18:vec4<f32> = load %x_GLF_color
+    %19:main_out = construct %18
+    ret %19
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-continue-break-discard-return-in-loop/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-continue-break-discard-return-in-loop/0-opt.spvasm.expected.ir.msl
index ea22f1c..0fbd9c0 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-continue-break-discard-return-in-loop/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-continue-break-discard-return-in-loop/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -16,81 +16,92 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_7:ptr<uniform, buf1, read> = var @binding_point(0, 1)
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
-    %5:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
-    %6:i32 = load %5
-    %7:f32 = convert %6
-    %8:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
-    %9:i32 = load %8
-    %10:f32 = convert %9
-    %11:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
-    %12:i32 = load %11
-    %13:f32 = convert %12
-    %14:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
+%main_1 = func():void {
+  $B2: {
+    %6:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
+    %7:i32 = load %6
+    %8:f32 = convert %7
+    %9:f32 = let %8
+    %10:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
+    %11:i32 = load %10
+    %12:f32 = convert %11
+    %13:f32 = let %12
+    %14:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
     %15:i32 = load %14
     %16:f32 = convert %15
-    %17:vec4<f32> = construct %7, %10, %13, %16
-    store %x_GLF_color, %17
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %18:ptr<uniform, i32, read> = access %x_7, 0u
-        %19:i32 = load %18
-        %20:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
-        %21:i32 = load %20
-        %22:bool = eq %19, %21
-        if %22 [t: %b5] {  # if_1
-          %b5 = block {  # true
-            continue %b4
+    %17:f32 = let %16
+    %18:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
+    %19:i32 = load %18
+    %20:f32 = convert %19
+    %21:vec4<f32> = construct %9, %13, %17, %20
+    store %x_GLF_color, %21
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %22:ptr<uniform, i32, read> = access %x_7, 0u
+        %23:i32 = load %22
+        %24:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
+        %25:i32 = load %24
+        %26:bool = eq %23, %25
+        if %26 [t: $B5] {  # if_1
+          $B5: {  # true
+            continue  # -> $B4
           }
         }
-        %23:ptr<uniform, i32, read> = access %x_7, 0u
-        %24:i32 = load %23
-        %25:ptr<uniform, i32, read> = access %x_5, 0u, 2i, 0u
-        %26:i32 = load %25
-        %27:bool = eq %24, %26
-        if %27 [t: %b6] {  # if_2
-          %b6 = block {  # true
+        %27:ptr<uniform, i32, read> = access %x_7, 0u
+        %28:i32 = load %27
+        %29:ptr<uniform, i32, read> = access %x_5, 0u, 2i, 0u
+        %30:i32 = load %29
+        %31:bool = eq %28, %30
+        if %31 [t: $B6] {  # if_2
+          $B6: {  # true
             exit_loop  # loop_1
           }
         }
-        %28:ptr<uniform, i32, read> = access %x_7, 0u
-        %29:i32 = load %28
-        %30:ptr<uniform, i32, read> = access %x_5, 0u, 3i, 0u
-        %31:i32 = load %30
-        %32:bool = eq %29, %31
-        if %32 [t: %b7] {  # if_3
-          %b7 = block {  # true
-            discard
+        %32:ptr<uniform, i32, read> = access %x_7, 0u
+        %33:i32 = load %32
+        %34:ptr<uniform, i32, read> = access %x_5, 0u, 3i, 0u
+        %35:i32 = load %34
+        %36:bool = eq %33, %35
+        if %36 [t: $B7] {  # if_3
+          $B7: {  # true
+            store %continue_execution, false
             exit_if  # if_3
           }
         }
         ret
       }
-      %b4 = block {  # continuing
-        break_if true %b3
+      $B4: {  # continuing
+        break_if true  # -> [t: exit_loop loop_1, f: $B3]
       }
     }
-    %33:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
-    %34:i32 = load %33
-    %35:f32 = convert %34
-    %36:vec4<f32> = construct %35
-    store %x_GLF_color, %36
+    %37:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
+    %38:i32 = load %37
+    %39:f32 = convert %38
+    %40:vec4<f32> = construct %39
+    store %x_GLF_color, %40
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b8 {
-  %b8 = block {
-    %38:void = call %main_1
-    %39:vec4<f32> = load %x_GLF_color
-    %40:main_out = construct %39
-    ret %40
+%tint_symbol = @fragment func():main_out {
+  $B8: {
+    %42:void = call %main_1
+    %43:vec4<f32> = load %x_GLF_color
+    %44:main_out = construct %43
+    %45:bool = load %continue_execution
+    %46:bool = eq %45, false
+    if %46 [t: $B9] {  # if_4
+      $B9: {  # true
+        terminate_invocation
+      }
+    }
+    ret %44
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-continue-break-discard-return-in-loop/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-continue-break-discard-return-in-loop/0-opt.wgsl.expected.ir.msl
index f4b6dc6..13f9dec 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-continue-break-discard-return-in-loop/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-continue-break-discard-return-in-loop/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -16,81 +16,104 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_7:ptr<uniform, buf1, read> = var @binding_point(0, 1)
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
-    %5:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
-    %x_28:i32 = load %5
-    %7:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
-    %x_31:i32 = load %7
+%main_1 = func():void {
+  $B2: {
+    %6:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
+    %7:i32 = load %6
+    %x_28:i32 = let %7
     %9:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
-    %x_34:i32 = load %9
-    %11:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
-    %x_37:i32 = load %11
-    %13:f32 = convert %x_28
-    %14:f32 = convert %x_31
-    %15:f32 = convert %x_34
-    %16:f32 = convert %x_37
-    %17:vec4<f32> = construct %13, %14, %15, %16
-    store %x_GLF_color, %17
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %18:ptr<uniform, i32, read> = access %x_7, 0u
-        %x_45:i32 = load %18
-        %20:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
-        %x_47:i32 = load %20
-        %22:bool = eq %x_45, %x_47
-        if %22 [t: %b5] {  # if_1
-          %b5 = block {  # true
-            continue %b4
+    %10:i32 = load %9
+    %x_31:i32 = let %10
+    %12:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
+    %13:i32 = load %12
+    %x_34:i32 = let %13
+    %15:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
+    %16:i32 = load %15
+    %x_37:i32 = let %16
+    %18:f32 = convert %x_28
+    %19:f32 = let %18
+    %20:f32 = convert %x_31
+    %21:f32 = let %20
+    %22:f32 = convert %x_34
+    %23:f32 = let %22
+    %24:f32 = convert %x_37
+    %25:vec4<f32> = construct %19, %21, %23, %24
+    store %x_GLF_color, %25
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %26:ptr<uniform, i32, read> = access %x_7, 0u
+        %27:i32 = load %26
+        %x_45:i32 = let %27
+        %29:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
+        %30:i32 = load %29
+        %x_47:i32 = let %30
+        %32:bool = eq %x_45, %x_47
+        if %32 [t: $B5] {  # if_1
+          $B5: {  # true
+            continue  # -> $B4
           }
         }
-        %23:ptr<uniform, i32, read> = access %x_7, 0u
-        %x_52:i32 = load %23
-        %25:ptr<uniform, i32, read> = access %x_5, 0u, 2i, 0u
-        %x_54:i32 = load %25
-        %27:bool = eq %x_52, %x_54
-        if %27 [t: %b6] {  # if_2
-          %b6 = block {  # true
+        %33:ptr<uniform, i32, read> = access %x_7, 0u
+        %34:i32 = load %33
+        %x_52:i32 = let %34
+        %36:ptr<uniform, i32, read> = access %x_5, 0u, 2i, 0u
+        %37:i32 = load %36
+        %x_54:i32 = let %37
+        %39:bool = eq %x_52, %x_54
+        if %39 [t: $B6] {  # if_2
+          $B6: {  # true
             exit_loop  # loop_1
           }
         }
-        %28:ptr<uniform, i32, read> = access %x_7, 0u
-        %x_59:i32 = load %28
-        %30:ptr<uniform, i32, read> = access %x_5, 0u, 3i, 0u
-        %x_61:i32 = load %30
-        %32:bool = eq %x_59, %x_61
-        if %32 [t: %b7] {  # if_3
-          %b7 = block {  # true
-            discard
+        %40:ptr<uniform, i32, read> = access %x_7, 0u
+        %41:i32 = load %40
+        %x_59:i32 = let %41
+        %43:ptr<uniform, i32, read> = access %x_5, 0u, 3i, 0u
+        %44:i32 = load %43
+        %x_61:i32 = let %44
+        %46:bool = eq %x_59, %x_61
+        if %46 [t: $B7] {  # if_3
+          $B7: {  # true
+            store %continue_execution, false
             exit_if  # if_3
           }
         }
         ret
       }
-      %b4 = block {  # continuing
-        break_if true %b3
+      $B4: {  # continuing
+        break_if true  # -> [t: exit_loop loop_1, f: $B3]
       }
     }
-    %33:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
-    %x_66:i32 = load %33
-    %x_67:f32 = convert %x_66
-    %36:vec4<f32> = construct %x_67, %x_67, %x_67, %x_67
-    store %x_GLF_color, %36
+    %47:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
+    %48:i32 = load %47
+    %x_66:i32 = let %48
+    %50:f32 = convert %x_66
+    %x_67:f32 = let %50
+    %52:vec4<f32> = construct %x_67, %x_67, %x_67, %x_67
+    store %x_GLF_color, %52
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b8 {
-  %b8 = block {
-    %38:void = call %main_1
-    %39:vec4<f32> = load %x_GLF_color
-    %40:main_out = construct %39
-    ret %40
+%tint_symbol = @fragment func():main_out {
+  $B8: {
+    %54:void = call %main_1
+    %55:vec4<f32> = load %x_GLF_color
+    %56:main_out = construct %55
+    %57:bool = load %continue_execution
+    %58:bool = eq %57, false
+    if %58 [t: $B9] {  # if_4
+      $B9: {  # true
+        terminate_invocation
+      }
+    }
+    ret %56
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-func-argument/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-func-argument/0-opt.spvasm.expected.ir.msl
index d8d38df..8791a28 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-func-argument/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-func-argument/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   zero:i32 @offset(0)
 }
 
@@ -12,13 +12,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %x_50:ptr<function, bool, read_write> = var, false
     %x_15:ptr<function, i32, read_write> = var
     %x_16:ptr<function, i32, read_write> = var
@@ -27,18 +27,18 @@
     %x_20:ptr<function, i32, read_write> = var
     store %param, Array(array<i32, 2>(0i))
     store %x_50, false
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3] {  # loop_1
+      $B3: {  # body
         %x_63:ptr<function, bool, read_write> = var
-        loop [b: %b5, c: %b6] {  # loop_2
-          %b5 = block {  # body
+        loop [b: $B4] {  # loop_2
+          $B4: {  # body
             %11:ptr<uniform, i32, read> = access %x_8, 0u
             %12:i32 = load %11
             %13:ptr<function, i32, read_write> = access %param, 0u, %12
             %14:i32 = load %13
             %15:bool = eq %14, 1i
-            if %15 [t: %b7] {  # if_1
-              %b7 = block {  # true
+            if %15 [t: $B5] {  # if_1
+              $B5: {  # true
                 store %x_50, true
                 store %x_15, 1i
                 store %x_19, 1i
@@ -50,15 +50,12 @@
             store %x_63, false
             exit_loop  # loop_2
           }
-          %b6 = block {  # continuing
-            next_iteration %b5
-          }
         }
         %16:i32 = load %x_19
         store %x_20, %16
         %17:bool = load %x_63
-        if %17 [t: %b8] {  # if_2
-          %b8 = block {  # true
+        if %17 [t: $B6] {  # if_2
+          $B6: {  # true
             exit_loop  # loop_1
           }
         }
@@ -67,20 +64,17 @@
         store %x_20, 1i
         exit_loop  # loop_1
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
-      }
     }
     %18:i32 = load %x_20
     store %x_16, %18
     %19:i32 = load %x_20
     %20:bool = eq %19, 1i
-    if %20 [t: %b9, f: %b10] {  # if_3
-      %b9 = block {  # true
+    if %20 [t: $B7, f: $B8] {  # if_3
+      $B7: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_3
       }
-      %b10 = block {  # false
+      $B8: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_3
       }
@@ -88,37 +82,37 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b11 {
-  %b11 = block {
+%tint_symbol = @fragment func():main_out {
+  $B9: {
     %22:void = call %main_1
     %23:vec4<f32> = load %x_GLF_color
     %24:main_out = construct %23
     ret %24
   }
 }
-%func_struct_Array_i1_2_1_ = func(%a:ptr<function, Array, read_write>):i32 -> %b12 {
-  %b12 = block {
+%func_struct_Array_i1_2_1_ = func(%a:ptr<function, Array, read_write>):i32 {
+  $B10: {
     %x_70:ptr<function, bool, read_write> = var, false
     %x_12:ptr<function, i32, read_write> = var
     %x_72:ptr<function, bool, read_write> = var
     %x_13:ptr<function, i32, read_write> = var
     %x_14:ptr<function, i32, read_write> = var
     store %x_72, false
-    loop [b: %b13, c: %b14] {  # loop_3
-      %b13 = block {  # body
+    loop [b: $B11] {  # loop_3
+      $B11: {  # body
         %x_77:ptr<function, bool, read_write> = var
         %x_87:ptr<function, bool, read_write> = var
         %34:bool = load %x_72
         store %x_77, %34
-        loop [b: %b15, c: %b16] {  # loop_4
-          %b15 = block {  # body
+        loop [b: $B12] {  # loop_4
+          $B12: {  # body
             %35:ptr<uniform, i32, read> = access %x_8, 0u
             %36:i32 = load %35
             %37:ptr<function, i32, read_write> = access %a, 0u, %36
             %38:i32 = load %37
             %39:bool = eq %38, 1i
-            if %39 [t: %b17] {  # if_4
-              %b17 = block {  # true
+            if %39 [t: $B13] {  # if_4
+              $B13: {  # true
                 store %x_70, true
                 store %x_12, 1i
                 store %x_13, 1i
@@ -131,16 +125,12 @@
             store %x_87, %40
             exit_loop  # loop_4
           }
-          %b16 = block {  # continuing
-            store %x_77, false
-            next_iteration %b15
-          }
         }
         %41:i32 = load %x_13
         store %x_14, %41
         %42:bool = load %x_87
-        if %42 [t: %b18] {  # if_5
-          %b18 = block {  # true
+        if %42 [t: $B14] {  # if_5
+          $B14: {  # true
             exit_loop  # loop_3
           }
         }
@@ -149,10 +139,6 @@
         store %x_14, 1i
         exit_loop  # loop_3
       }
-      %b14 = block {  # continuing
-        store %x_72, false
-        next_iteration %b13
-      }
     }
     %43:i32 = load %x_14
     ret %43
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-func-argument/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-func-argument/0-opt.wgsl.expected.ir.msl
index a4c26b0..79909e4 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-func-argument/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-func-argument/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   zero:i32 @offset(0)
 }
 
@@ -12,13 +12,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %x_50:ptr<function, bool, read_write> = var, false
     %x_15:ptr<function, i32, read_write> = var
     %x_16:ptr<function, i32, read_write> = var
@@ -27,19 +27,21 @@
     %x_20_phi:ptr<function, i32, read_write> = var
     store %param, Array(array<i32, 2>(0i))
     store %x_50, false
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3] {  # loop_1
+      $B3: {  # body
         %x_19_phi:ptr<function, i32, read_write> = var
         %x_63_phi:ptr<function, bool, read_write> = var
-        loop [b: %b5, c: %b6] {  # loop_2
-          %b5 = block {  # body
+        loop [b: $B4] {  # loop_2
+          $B4: {  # body
             %12:ptr<uniform, i32, read> = access %x_8, 0u
-            %x_17:i32 = load %12
-            %14:ptr<function, i32, read_write> = access %param, 0u, %x_17
-            %x_18:i32 = load %14
-            %16:bool = eq %x_18, 1i
-            if %16 [t: %b7] {  # if_1
-              %b7 = block {  # true
+            %13:i32 = load %12
+            %x_17:i32 = let %13
+            %15:ptr<function, i32, read_write> = access %param, 0u, %x_17
+            %16:i32 = load %15
+            %x_18:i32 = let %16
+            %18:bool = eq %x_18, 1i
+            if %18 [t: $B5] {  # if_1
+              $B5: {  # true
                 store %x_50, true
                 store %x_15, 1i
                 store %x_19_phi, 1i
@@ -51,17 +53,15 @@
             store %x_63_phi, false
             exit_loop  # loop_2
           }
-          %b6 = block {  # continuing
-            next_iteration %b5
-          }
         }
-        %17:i32 = load %x_19_phi
-        store %x_19, %17
-        %x_63:bool = load %x_63_phi
-        %19:i32 = load %x_19
-        store %x_20_phi, %19
-        if %x_63 [t: %b8] {  # if_2
-          %b8 = block {  # true
+        %19:i32 = load %x_19_phi
+        store %x_19, %19
+        %20:bool = load %x_63_phi
+        %x_63:bool = let %20
+        %22:i32 = load %x_19
+        store %x_20_phi, %22
+        if %x_63 [t: $B6] {  # if_2
+          $B6: {  # true
             exit_loop  # loop_1
           }
         }
@@ -70,19 +70,17 @@
         store %x_20_phi, 1i
         exit_loop  # loop_1
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
-      }
     }
-    %x_20:i32 = load %x_20_phi
+    %23:i32 = load %x_20_phi
+    %x_20:i32 = let %23
     store %x_16, %x_20
-    %21:bool = eq %x_20, 1i
-    if %21 [t: %b9, f: %b10] {  # if_3
-      %b9 = block {  # true
+    %25:bool = eq %x_20, 1i
+    if %25 [t: $B7, f: $B8] {  # if_3
+      $B7: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_3
       }
-      %b10 = block {  # false
+      $B8: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_3
       }
@@ -90,41 +88,44 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b11 {
-  %b11 = block {
-    %23:void = call %main_1
-    %24:vec4<f32> = load %x_GLF_color
-    %25:main_out = construct %24
-    ret %25
+%tint_symbol = @fragment func():main_out {
+  $B9: {
+    %27:void = call %main_1
+    %28:vec4<f32> = load %x_GLF_color
+    %29:main_out = construct %28
+    ret %29
   }
 }
-%func_struct_Array_i1_2_1_ = func(%a:ptr<function, Array, read_write>):i32 -> %b12 {
-  %b12 = block {
+%func_struct_Array_i1_2_1_ = func(%a:ptr<function, Array, read_write>):i32 {
+  $B10: {
     %x_70:ptr<function, bool, read_write> = var, false
     %x_12:ptr<function, i32, read_write> = var
     %x_13:ptr<function, i32, read_write> = var
     %x_72_phi:ptr<function, bool, read_write> = var
     %x_14_phi:ptr<function, i32, read_write> = var
     store %x_72_phi, false
-    loop [b: %b13, c: %b14] {  # loop_3
-      %b13 = block {  # body
+    loop [b: $B11] {  # loop_3
+      $B11: {  # body
         %x_77:ptr<function, bool, read_write> = var
         %x_77_phi:ptr<function, bool, read_write> = var
         %x_13_phi:ptr<function, i32, read_write> = var
         %x_87_phi:ptr<function, bool, read_write> = var
-        %x_72:bool = load %x_72_phi
+        %41:bool = load %x_72_phi
+        %x_72:bool = let %41
         store %x_77_phi, %x_72
-        loop [b: %b15, c: %b16] {  # loop_4
-          %b15 = block {  # body
-            %38:bool = load %x_77_phi
-            store %x_77, %38
-            %39:ptr<uniform, i32, read> = access %x_8, 0u
-            %x_10:i32 = load %39
-            %41:ptr<function, i32, read_write> = access %a, 0u, %x_10
-            %x_11:i32 = load %41
-            %43:bool = eq %x_11, 1i
-            if %43 [t: %b17] {  # if_4
-              %b17 = block {  # true
+        loop [b: $B12] {  # loop_4
+          $B12: {  # body
+            %43:bool = load %x_77_phi
+            store %x_77, %43
+            %44:ptr<uniform, i32, read> = access %x_8, 0u
+            %45:i32 = load %44
+            %x_10:i32 = let %45
+            %47:ptr<function, i32, read_write> = access %a, 0u, %x_10
+            %48:i32 = load %47
+            %x_11:i32 = let %48
+            %50:bool = eq %x_11, 1i
+            if %50 [t: $B13] {  # if_4
+              $B13: {  # true
                 store %x_70, true
                 store %x_12, 1i
                 store %x_13_phi, 1i
@@ -133,22 +134,19 @@
               }
             }
             store %x_13_phi, 0i
-            %44:bool = load %x_77
-            store %x_87_phi, %44
+            %51:bool = load %x_77
+            store %x_87_phi, %51
             exit_loop  # loop_4
           }
-          %b16 = block {  # continuing
-            store %x_77_phi, false
-            next_iteration %b15
-          }
         }
-        %45:i32 = load %x_13_phi
-        store %x_13, %45
-        %x_87:bool = load %x_87_phi
-        %47:i32 = load %x_13
-        store %x_14_phi, %47
-        if %x_87 [t: %b18] {  # if_5
-          %b18 = block {  # true
+        %52:i32 = load %x_13_phi
+        store %x_13, %52
+        %53:bool = load %x_87_phi
+        %x_87:bool = let %53
+        %55:i32 = load %x_13
+        store %x_14_phi, %55
+        if %x_87 [t: $B14] {  # if_5
+          $B14: {  # true
             exit_loop  # loop_3
           }
         }
@@ -157,12 +155,9 @@
         store %x_14_phi, 1i
         exit_loop  # loop_3
       }
-      %b14 = block {  # continuing
-        store %x_72_phi, false
-        next_iteration %b13
-      }
     }
-    %x_14:i32 = load %x_14_phi
+    %56:i32 = load %x_14_phi
+    %x_14:i32 = let %56
     ret %x_14
   }
 }
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-no-stores/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-no-stores/0-opt.spvasm.expected.ir.msl
index 79b6ff0..cbffb97 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-no-stores/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-no-stores/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   zero:i32 @offset(0)
 }
 
@@ -12,46 +12,47 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, Array, read_write> = var
     %b:ptr<function, Array, read_write> = var
     %one:ptr<function, f32, read_write> = var
     %7:ptr<uniform, i32, read> = access %x_7, 0u
-    %x_10:i32 = load %7
-    %9:ptr<function, i32, read_write> = access %a, 0u, %x_10
-    store %9, 1i
-    %10:Array = load %a
-    store %b, %10
+    %8:i32 = load %7
+    %x_10:i32 = let %8
+    %10:ptr<function, i32, read_write> = access %a, 0u, %x_10
+    store %10, 1i
+    %11:Array = load %a
+    store %b, %11
     store %one, 0.0f
-    %11:ptr<uniform, i32, read> = access %x_7, 0u
-    %12:i32 = load %11
-    %13:ptr<function, i32, read_write> = access %b, 0u, %12
-    %14:i32 = load %13
-    %15:bool = eq %14, 1i
-    if %15 [t: %b3] {  # if_1
-      %b3 = block {  # true
+    %12:ptr<uniform, i32, read> = access %x_7, 0u
+    %13:i32 = load %12
+    %14:ptr<function, i32, read_write> = access %b, 0u, %13
+    %15:i32 = load %14
+    %16:bool = eq %15, 1i
+    if %16 [t: $B3] {  # if_1
+      $B3: {  # true
         store %one, 1.0f
         exit_if  # if_1
       }
     }
-    %16:f32 = load %one
-    %17:vec4<f32> = construct %16, 0.0f, 0.0f, 1.0f
-    store %x_GLF_color, %17
+    %17:f32 = load %one
+    %18:vec4<f32> = construct %17, 0.0f, 0.0f, 1.0f
+    store %x_GLF_color, %18
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b4 {
-  %b4 = block {
-    %19:void = call %main_1
-    %20:vec4<f32> = load %x_GLF_color
-    %21:main_out = construct %20
-    ret %21
+%tint_symbol = @fragment func():main_out {
+  $B4: {
+    %20:void = call %main_1
+    %21:vec4<f32> = load %x_GLF_color
+    %22:main_out = construct %21
+    ret %22
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-no-stores/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-no-stores/0-opt.wgsl.expected.ir.msl
index f437821..9748830 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-no-stores/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-no-stores/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   zero:i32 @offset(0)
 }
 
@@ -12,46 +12,51 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, Array, read_write> = var
     %b:ptr<function, Array, read_write> = var
     %one:ptr<function, f32, read_write> = var
     %7:ptr<uniform, i32, read> = access %x_7, 0u
-    %x_10:i32 = load %7
-    %9:ptr<function, i32, read_write> = access %a, 0u, %x_10
-    store %9, 1i
-    %x_35:Array = load %a
+    %8:i32 = load %7
+    %x_10:i32 = let %8
+    %10:ptr<function, i32, read_write> = access %a, 0u, %x_10
+    store %10, 1i
+    %11:Array = load %a
+    %x_35:Array = let %11
     store %b, %x_35
     store %one, 0.0f
-    %11:ptr<uniform, i32, read> = access %x_7, 0u
-    %x_11:i32 = load %11
-    %13:ptr<function, i32, read_write> = access %b, 0u, %x_11
-    %x_12:i32 = load %13
-    %15:bool = eq %x_12, 1i
-    if %15 [t: %b3] {  # if_1
-      %b3 = block {  # true
+    %13:ptr<uniform, i32, read> = access %x_7, 0u
+    %14:i32 = load %13
+    %x_11:i32 = let %14
+    %16:ptr<function, i32, read_write> = access %b, 0u, %x_11
+    %17:i32 = load %16
+    %x_12:i32 = let %17
+    %19:bool = eq %x_12, 1i
+    if %19 [t: $B3] {  # if_1
+      $B3: {  # true
         store %one, 1.0f
         exit_if  # if_1
       }
     }
-    %x_41:f32 = load %one
-    %17:vec4<f32> = construct %x_41, 0.0f, 0.0f, 1.0f
-    store %x_GLF_color, %17
+    %20:f32 = load %one
+    %x_41:f32 = let %20
+    %22:vec4<f32> = construct %x_41, 0.0f, 0.0f, 1.0f
+    store %x_GLF_color, %22
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b4 {
-  %b4 = block {
-    %19:void = call %main_1
-    %20:vec4<f32> = load %x_GLF_color
-    %21:main_out = construct %20
-    ret %21
+%tint_symbol = @fragment func():main_out {
+  $B4: {
+    %24:void = call %main_1
+    %25:vec4<f32> = load %x_GLF_color
+    %26:main_out = construct %25
+    ret %26
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-param-uniform/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-param-uniform/0-opt.spvasm.expected.ir.msl
index a354e414..288667c 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-param-uniform/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-param-uniform/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   zero:i32 @offset(0)
 }
 
@@ -12,13 +12,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %x_52:ptr<function, bool, read_write> = var, false
     %x_17:ptr<function, i32, read_write> = var
     %x_18:ptr<function, i32, read_write> = var
@@ -27,27 +27,29 @@
     %x_20:ptr<function, i32, read_write> = var
     %x_21:ptr<function, i32, read_write> = var
     %11:ptr<uniform, i32, read> = access %x_8, 0u
-    %x_12:i32 = load %11
-    %x_22:array<i32, 2> = load %x_16
+    %12:i32 = load %11
+    %x_12:i32 = let %12
+    %14:array<i32, 2> = load %x_16
+    %x_22:array<i32, 2> = let %14
     %x_23_1:ptr<function, array<i32, 2>, read_write> = var, %x_22
-    %15:ptr<function, i32, read_write> = access %x_23_1, 0u
-    store %15, %x_12
-    %16:array<i32, 2> = load %x_23_1
-    store %x_16, %16
-    %17:array<i32, 2> = load %x_16
-    %18:Array = construct %17
-    store %param, %18
+    %17:ptr<function, i32, read_write> = access %x_23_1, 0u
+    store %17, %x_12
+    %18:array<i32, 2> = load %x_23_1
+    store %x_16, %18
+    %19:array<i32, 2> = load %x_16
+    %20:Array = construct %19
+    store %param, %20
     store %x_52, false
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3] {  # loop_1
+      $B3: {  # body
         %x_67:ptr<function, bool, read_write> = var
-        loop [b: %b5, c: %b6] {  # loop_2
-          %b5 = block {  # body
-            %20:ptr<function, i32, read_write> = access %param, 0u, %x_12
-            %21:i32 = load %20
-            %22:bool = eq %21, 0i
-            if %22 [t: %b7] {  # if_1
-              %b7 = block {  # true
+        loop [b: $B4] {  # loop_2
+          $B4: {  # body
+            %22:ptr<function, i32, read_write> = access %param, 0u, %x_12
+            %23:i32 = load %22
+            %24:bool = eq %23, 0i
+            if %24 [t: $B5] {  # if_1
+              $B5: {  # true
                 store %x_52, true
                 store %x_17, 42i
                 store %x_20, 42i
@@ -59,15 +61,12 @@
             store %x_67, false
             exit_loop  # loop_2
           }
-          %b6 = block {  # continuing
-            next_iteration %b5
-          }
         }
-        %23:i32 = load %x_20
-        store %x_21, %23
-        %24:bool = load %x_67
-        if %24 [t: %b8] {  # if_2
-          %b8 = block {  # true
+        %25:i32 = load %x_20
+        store %x_21, %25
+        %26:bool = load %x_67
+        if %26 [t: $B6] {  # if_2
+          $B6: {  # true
             exit_loop  # loop_1
           }
         }
@@ -76,20 +75,17 @@
         store %x_21, 42i
         exit_loop  # loop_1
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
-      }
     }
-    %25:i32 = load %x_21
-    store %x_18, %25
-    %26:i32 = load %x_21
-    %27:bool = eq %26, 42i
-    if %27 [t: %b9, f: %b10] {  # if_3
-      %b9 = block {  # true
+    %27:i32 = load %x_21
+    store %x_18, %27
+    %28:i32 = load %x_21
+    %29:bool = eq %28, 42i
+    if %29 [t: $B7, f: $B8] {  # if_3
+      $B7: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_3
       }
-      %b10 = block {  # false
+      $B8: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_3
       }
@@ -97,37 +93,37 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b11 {
-  %b11 = block {
-    %29:void = call %main_1
-    %30:vec4<f32> = load %x_GLF_color
-    %31:main_out = construct %30
-    ret %31
+%tint_symbol = @fragment func():main_out {
+  $B9: {
+    %31:void = call %main_1
+    %32:vec4<f32> = load %x_GLF_color
+    %33:main_out = construct %32
+    ret %33
   }
 }
-%func_struct_Array_i1_2_1_ = func(%a:ptr<function, Array, read_write>):i32 -> %b12 {
-  %b12 = block {
+%func_struct_Array_i1_2_1_ = func(%a:ptr<function, Array, read_write>):i32 {
+  $B10: {
     %x_74:ptr<function, bool, read_write> = var, false
     %x_13:ptr<function, i32, read_write> = var
     %x_76:ptr<function, bool, read_write> = var
     %x_14:ptr<function, i32, read_write> = var
     %x_15:ptr<function, i32, read_write> = var
     store %x_76, false
-    loop [b: %b13, c: %b14] {  # loop_3
-      %b13 = block {  # body
+    loop [b: $B11] {  # loop_3
+      $B11: {  # body
         %x_81:ptr<function, bool, read_write> = var
         %x_91:ptr<function, bool, read_write> = var
-        %41:bool = load %x_76
-        store %x_81, %41
-        loop [b: %b15, c: %b16] {  # loop_4
-          %b15 = block {  # body
-            %42:ptr<uniform, i32, read> = access %x_8, 0u
-            %43:i32 = load %42
-            %44:ptr<function, i32, read_write> = access %a, 0u, %43
+        %43:bool = load %x_76
+        store %x_81, %43
+        loop [b: $B12] {  # loop_4
+          $B12: {  # body
+            %44:ptr<uniform, i32, read> = access %x_8, 0u
             %45:i32 = load %44
-            %46:bool = eq %45, 0i
-            if %46 [t: %b17] {  # if_4
-              %b17 = block {  # true
+            %46:ptr<function, i32, read_write> = access %a, 0u, %45
+            %47:i32 = load %46
+            %48:bool = eq %47, 0i
+            if %48 [t: $B13] {  # if_4
+              $B13: {  # true
                 store %x_74, true
                 store %x_13, 42i
                 store %x_14, 42i
@@ -136,20 +132,16 @@
               }
             }
             store %x_14, 0i
-            %47:bool = load %x_81
-            store %x_91, %47
+            %49:bool = load %x_81
+            store %x_91, %49
             exit_loop  # loop_4
           }
-          %b16 = block {  # continuing
-            store %x_81, false
-            next_iteration %b15
-          }
         }
-        %48:i32 = load %x_14
-        store %x_15, %48
-        %49:bool = load %x_91
-        if %49 [t: %b18] {  # if_5
-          %b18 = block {  # true
+        %50:i32 = load %x_14
+        store %x_15, %50
+        %51:bool = load %x_91
+        if %51 [t: $B14] {  # if_5
+          $B14: {  # true
             exit_loop  # loop_3
           }
         }
@@ -158,13 +150,9 @@
         store %x_15, 42i
         exit_loop  # loop_3
       }
-      %b14 = block {  # continuing
-        store %x_76, false
-        next_iteration %b13
-      }
     }
-    %50:i32 = load %x_15
-    ret %50
+    %52:i32 = load %x_15
+    ret %52
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-param-uniform/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-param-uniform/0-opt.wgsl.expected.ir.msl
index 5158781..be518ca 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-param-uniform/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-param-uniform/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   zero:i32 @offset(0)
 }
 
@@ -12,13 +12,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %x_52:ptr<function, bool, read_write> = var, false
     %x_17:ptr<function, i32, read_write> = var
     %x_18:ptr<function, i32, read_write> = var
@@ -27,28 +27,33 @@
     %x_20:ptr<function, i32, read_write> = var
     %x_21_phi:ptr<function, i32, read_write> = var
     %11:ptr<uniform, i32, read> = access %x_8, 0u
-    %x_12:i32 = load %11
-    %x_22:array<i32, 2> = load %x_16
+    %12:i32 = load %11
+    %x_12:i32 = let %12
+    %14:array<i32, 2> = load %x_16
+    %x_22:array<i32, 2> = let %14
     %x_23_1:ptr<function, array<i32, 2>, read_write> = var, %x_22
-    %15:ptr<function, i32, read_write> = access %x_23_1, 0u
-    store %15, %x_12
-    %x_23:array<i32, 2> = load %x_23_1
+    %17:ptr<function, i32, read_write> = access %x_23_1, 0u
+    store %17, %x_12
+    %18:array<i32, 2> = load %x_23_1
+    %x_23:array<i32, 2> = let %18
     store %x_16, %x_23
-    %x_54:array<i32, 2> = load %x_16
-    %18:Array = construct %x_54
-    store %param, %18
+    %20:array<i32, 2> = load %x_16
+    %x_54:array<i32, 2> = let %20
+    %22:Array = construct %x_54
+    store %param, %22
     store %x_52, false
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3] {  # loop_1
+      $B3: {  # body
         %x_20_phi:ptr<function, i32, read_write> = var
         %x_67_phi:ptr<function, bool, read_write> = var
-        loop [b: %b5, c: %b6] {  # loop_2
-          %b5 = block {  # body
-            %21:ptr<function, i32, read_write> = access %param, 0u, %x_12
-            %x_19:i32 = load %21
-            %23:bool = eq %x_19, 0i
-            if %23 [t: %b7] {  # if_1
-              %b7 = block {  # true
+        loop [b: $B4] {  # loop_2
+          $B4: {  # body
+            %25:ptr<function, i32, read_write> = access %param, 0u, %x_12
+            %26:i32 = load %25
+            %x_19:i32 = let %26
+            %28:bool = eq %x_19, 0i
+            if %28 [t: $B5] {  # if_1
+              $B5: {  # true
                 store %x_52, true
                 store %x_17, 42i
                 store %x_20_phi, 42i
@@ -60,17 +65,15 @@
             store %x_67_phi, false
             exit_loop  # loop_2
           }
-          %b6 = block {  # continuing
-            next_iteration %b5
-          }
         }
-        %24:i32 = load %x_20_phi
-        store %x_20, %24
-        %x_67:bool = load %x_67_phi
-        %26:i32 = load %x_20
-        store %x_21_phi, %26
-        if %x_67 [t: %b8] {  # if_2
-          %b8 = block {  # true
+        %29:i32 = load %x_20_phi
+        store %x_20, %29
+        %30:bool = load %x_67_phi
+        %x_67:bool = let %30
+        %32:i32 = load %x_20
+        store %x_21_phi, %32
+        if %x_67 [t: $B6] {  # if_2
+          $B6: {  # true
             exit_loop  # loop_1
           }
         }
@@ -79,19 +82,17 @@
         store %x_21_phi, 42i
         exit_loop  # loop_1
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
-      }
     }
-    %x_21:i32 = load %x_21_phi
+    %33:i32 = load %x_21_phi
+    %x_21:i32 = let %33
     store %x_18, %x_21
-    %28:bool = eq %x_21, 42i
-    if %28 [t: %b9, f: %b10] {  # if_3
-      %b9 = block {  # true
+    %35:bool = eq %x_21, 42i
+    if %35 [t: $B7, f: $B8] {  # if_3
+      $B7: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_3
       }
-      %b10 = block {  # false
+      $B8: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_3
       }
@@ -99,41 +100,44 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b11 {
-  %b11 = block {
-    %30:void = call %main_1
-    %31:vec4<f32> = load %x_GLF_color
-    %32:main_out = construct %31
-    ret %32
+%tint_symbol = @fragment func():main_out {
+  $B9: {
+    %37:void = call %main_1
+    %38:vec4<f32> = load %x_GLF_color
+    %39:main_out = construct %38
+    ret %39
   }
 }
-%func_struct_Array_i1_2_1_ = func(%a:ptr<function, Array, read_write>):i32 -> %b12 {
-  %b12 = block {
+%func_struct_Array_i1_2_1_ = func(%a:ptr<function, Array, read_write>):i32 {
+  $B10: {
     %x_74:ptr<function, bool, read_write> = var, false
     %x_13:ptr<function, i32, read_write> = var
     %x_14:ptr<function, i32, read_write> = var
     %x_76_phi:ptr<function, bool, read_write> = var
     %x_15_phi:ptr<function, i32, read_write> = var
     store %x_76_phi, false
-    loop [b: %b13, c: %b14] {  # loop_3
-      %b13 = block {  # body
+    loop [b: $B11] {  # loop_3
+      $B11: {  # body
         %x_81:ptr<function, bool, read_write> = var
         %x_81_phi:ptr<function, bool, read_write> = var
         %x_14_phi:ptr<function, i32, read_write> = var
         %x_91_phi:ptr<function, bool, read_write> = var
-        %x_76:bool = load %x_76_phi
+        %51:bool = load %x_76_phi
+        %x_76:bool = let %51
         store %x_81_phi, %x_76
-        loop [b: %b15, c: %b16] {  # loop_4
-          %b15 = block {  # body
-            %45:bool = load %x_81_phi
-            store %x_81, %45
-            %46:ptr<uniform, i32, read> = access %x_8, 0u
-            %x_10:i32 = load %46
-            %48:ptr<function, i32, read_write> = access %a, 0u, %x_10
-            %x_11:i32 = load %48
-            %50:bool = eq %x_11, 0i
-            if %50 [t: %b17] {  # if_4
-              %b17 = block {  # true
+        loop [b: $B12] {  # loop_4
+          $B12: {  # body
+            %53:bool = load %x_81_phi
+            store %x_81, %53
+            %54:ptr<uniform, i32, read> = access %x_8, 0u
+            %55:i32 = load %54
+            %x_10:i32 = let %55
+            %57:ptr<function, i32, read_write> = access %a, 0u, %x_10
+            %58:i32 = load %57
+            %x_11:i32 = let %58
+            %60:bool = eq %x_11, 0i
+            if %60 [t: $B13] {  # if_4
+              $B13: {  # true
                 store %x_74, true
                 store %x_13, 42i
                 store %x_14_phi, 42i
@@ -142,22 +146,19 @@
               }
             }
             store %x_14_phi, 0i
-            %51:bool = load %x_81
-            store %x_91_phi, %51
+            %61:bool = load %x_81
+            store %x_91_phi, %61
             exit_loop  # loop_4
           }
-          %b16 = block {  # continuing
-            store %x_81_phi, false
-            next_iteration %b15
-          }
         }
-        %52:i32 = load %x_14_phi
-        store %x_14, %52
-        %x_91:bool = load %x_91_phi
-        %54:i32 = load %x_14
-        store %x_15_phi, %54
-        if %x_91 [t: %b18] {  # if_5
-          %b18 = block {  # true
+        %62:i32 = load %x_14_phi
+        store %x_14, %62
+        %63:bool = load %x_91_phi
+        %x_91:bool = let %63
+        %65:i32 = load %x_14
+        store %x_15_phi, %65
+        if %x_91 [t: $B14] {  # if_5
+          $B14: {  # true
             exit_loop  # loop_3
           }
         }
@@ -166,12 +167,9 @@
         store %x_15_phi, 42i
         exit_loop  # loop_3
       }
-      %b14 = block {  # continuing
-        store %x_76_phi, false
-        next_iteration %b13
-      }
     }
-    %x_15:i32 = load %x_15_phi
+    %66:i32 = load %x_15_phi
+    %x_15:i32 = let %66
     ret %x_15
   }
 }
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-cosh-clamped-to-one/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-cosh-clamped-to-one/0-opt.spvasm.expected.ir.msl
index 39f34ab..63c429c 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-cosh-clamped-to-one/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-cosh-clamped-to-one/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,39 +20,41 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_8:ptr<uniform, buf1, read> = var @binding_point(0, 1)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %v:ptr<function, vec4<f32>, read_write> = var
     %6:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
     %7:f32 = load %6
     %8:vec4<f32> = construct %7
-    %9:vec4<f32> = clamp vec4<f32>(1.54308056831359863281f), %8, vec4<f32>(1.0f)
+    %9:vec4<f32> = clamp vec4<f32>(1.54308068752288818359f), %8, vec4<f32>(1.0f)
     store %v, %9
     %10:f32 = load_vector_element %v, 0u
-    %11:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-    %12:i32 = load %11
-    %13:f32 = convert %12
-    %14:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-    %15:i32 = load %14
-    %16:f32 = convert %15
-    %17:f32 = load_vector_element %v, 2u
-    %18:vec4<f32> = construct %10, %13, %16, %17
-    store %x_GLF_color, %18
+    %11:f32 = let %10
+    %12:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+    %13:i32 = load %12
+    %14:f32 = convert %13
+    %15:f32 = let %14
+    %16:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+    %17:i32 = load %16
+    %18:f32 = convert %17
+    %19:f32 = load_vector_element %v, 2u
+    %20:vec4<f32> = construct %11, %15, %18, %19
+    store %x_GLF_color, %20
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b3 {
-  %b3 = block {
-    %20:void = call %main_1
-    %21:vec4<f32> = load %x_GLF_color
-    %22:main_out = construct %21
-    ret %22
+%tint_symbol = @fragment func():main_out {
+  $B3: {
+    %22:void = call %main_1
+    %23:vec4<f32> = load %x_GLF_color
+    %24:main_out = construct %23
+    ret %24
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-cosh-clamped-to-one/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-cosh-clamped-to-one/0-opt.wgsl.expected.ir.msl
index f749a4c..9d98882 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-cosh-clamped-to-one/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-cosh-clamped-to-one/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,39 +20,45 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_8:ptr<uniform, buf1, read> = var @binding_point(0, 1)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %v:ptr<function, vec4<f32>, read_write> = var
     %6:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_33:f32 = load %6
-    %8:vec4<f32> = construct %x_33, %x_33, %x_33, %x_33
-    %9:vec4<f32> = clamp vec4<f32>(1.54308056831359863281f), %8, vec4<f32>(1.0f)
-    store %v, %9
-    %x_38:f32 = load_vector_element %v, 0u
-    %11:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-    %x_40:i32 = load %11
+    %7:f32 = load %6
+    %x_33:f32 = let %7
+    %9:vec4<f32> = construct %x_33, %x_33, %x_33, %x_33
+    %10:vec4<f32> = clamp vec4<f32>(1.54308068752288818359f), %9, vec4<f32>(1.0f)
+    store %v, %10
+    %11:f32 = load_vector_element %v, 0u
+    %x_38:f32 = let %11
     %13:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-    %x_43:i32 = load %13
-    %x_46:f32 = load_vector_element %v, 2u
-    %16:f32 = convert %x_40
-    %17:f32 = convert %x_43
-    %18:vec4<f32> = construct %x_38, %16, %17, %x_46
-    store %x_GLF_color, %18
+    %14:i32 = load %13
+    %x_40:i32 = let %14
+    %16:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+    %17:i32 = load %16
+    %x_43:i32 = let %17
+    %19:f32 = load_vector_element %v, 2u
+    %x_46:f32 = let %19
+    %21:f32 = convert %x_40
+    %22:f32 = let %21
+    %23:f32 = convert %x_43
+    %24:vec4<f32> = construct %x_38, %22, %23, %x_46
+    store %x_GLF_color, %24
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b3 {
-  %b3 = block {
-    %20:void = call %main_1
-    %21:vec4<f32> = load %x_GLF_color
-    %22:main_out = construct %21
-    ret %22
+%tint_symbol = @fragment func():main_out {
+  $B3: {
+    %26:void = call %main_1
+    %27:vec4<f32> = load %x_GLF_color
+    %28:main_out = construct %27
+    ret %28
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/0-opt.spvasm.expected.ir.msl
index 1da115f..9e115cf 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,13 +12,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %b:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
@@ -39,17 +39,17 @@
     %18:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
     %19:i32 = load %18
     store %i, %19
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %20:i32 = load %i
         %21:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
         %22:i32 = load %21
         %23:bool = lt %20, %22
-        if %23 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %23 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
@@ -57,35 +57,32 @@
         %25:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
         %26:i32 = load %25
         %27:bool = gt %24, %26
-        if %27 [t: %b7] {  # if_2
-          %b7 = block {  # true
+        if %27 [t: $B7] {  # if_2
+          $B7: {  # true
             %28:i32 = load %a
             %29:i32 = add %28, 1i
             store %a, %29
-            if false [t: %b8] {  # if_3
-              %b8 = block {  # true
+            if false [t: $B8] {  # if_3
+              $B8: {  # true
                 %30:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
                 %31:i32 = load %30
                 store %i_1, %31
-                loop [b: %b9, c: %b10] {  # loop_2
-                  %b9 = block {  # body
+                loop [b: $B9] {  # loop_2
+                  $B9: {  # body
                     %32:i32 = load %i_1
                     %33:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
                     %34:i32 = load %33
                     %35:bool = lt %32, %34
-                    if %35 [t: %b11, f: %b12] {  # if_4
-                      %b11 = block {  # true
+                    if %35 [t: $B10, f: $B11] {  # if_4
+                      $B10: {  # true
                         exit_if  # if_4
                       }
-                      %b12 = block {  # false
+                      $B11: {  # false
                         exit_loop  # loop_2
                       }
                     }
                     ret
                   }
-                  %b10 = block {  # continuing
-                    next_iteration %b9
-                  }
                 }
                 exit_if  # if_3
               }
@@ -93,85 +90,89 @@
             exit_if  # if_2
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
+      $B4: {  # continuing
         %36:i32 = load %i
         %37:i32 = add %36, 1i
         store %i, %37
-        next_iteration %b3
+        next_iteration  # -> $B3
       }
     }
     %38:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
     %39:i32 = load %38
     store %i_2, %39
-    loop [b: %b13, c: %b14] {  # loop_3
-      %b13 = block {  # body
+    loop [b: $B12, c: $B13] {  # loop_3
+      $B12: {  # body
         %40:i32 = load %i_2
         %41:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
         %42:i32 = load %41
         %43:bool = lt %40, %42
-        if %43 [t: %b15, f: %b16] {  # if_5
-          %b15 = block {  # true
+        if %43 [t: $B14, f: $B15] {  # if_5
+          $B14: {  # true
             exit_if  # if_5
           }
-          %b16 = block {  # false
+          $B15: {  # false
             exit_loop  # loop_3
           }
         }
-        %x_93:i32 = load %b
-        %45:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-        %46:i32 = load %45
-        %47:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
-        %48:i32 = load %47
-        %49:array<i32, 2> = construct %46, %48
-        store %indexable, %49
-        %50:i32 = load %a
-        %51:ptr<function, i32, read_write> = access %indexable, %x_93
-        %52:i32 = load %51
-        %53:i32 = add %50, %52
-        store %a, %53
-        continue %b14
+        %44:i32 = load %b
+        %x_93:i32 = let %44
+        %46:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+        %47:i32 = load %46
+        %48:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
+        %49:i32 = load %48
+        %50:array<i32, 2> = construct %47, %49
+        store %indexable, %50
+        %51:i32 = load %a
+        %52:ptr<function, i32, read_write> = access %indexable, %x_93
+        %53:i32 = load %52
+        %54:i32 = add %51, %53
+        store %a, %54
+        continue  # -> $B13
       }
-      %b14 = block {  # continuing
-        %54:i32 = load %i_2
-        %55:i32 = add %54, 1i
-        store %i_2, %55
-        next_iteration %b13
+      $B13: {  # continuing
+        %55:i32 = load %i_2
+        %56:i32 = add %55, 1i
+        store %i_2, %56
+        next_iteration  # -> $B12
       }
     }
-    %56:i32 = load %a
-    %57:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %58:i32 = load %57
-    %59:bool = eq %56, %58
-    if %59 [t: %b17] {  # if_6
-      %b17 = block {  # true
-        %60:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-        %61:i32 = load %60
-        %62:f32 = convert %61
-        %63:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %64:i32 = load %63
-        %65:f32 = convert %64
-        %66:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %67:i32 = load %66
-        %68:f32 = convert %67
-        %69:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+    %57:i32 = load %a
+    %58:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %59:i32 = load %58
+    %60:bool = eq %57, %59
+    if %60 [t: $B16] {  # if_6
+      $B16: {  # true
+        %61:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+        %62:i32 = load %61
+        %63:f32 = convert %62
+        %64:f32 = let %63
+        %65:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %66:i32 = load %65
+        %67:f32 = convert %66
+        %68:f32 = let %67
+        %69:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
         %70:i32 = load %69
         %71:f32 = convert %70
-        %72:vec4<f32> = construct %62, %65, %68, %71
-        store %x_GLF_color, %72
+        %72:f32 = let %71
+        %73:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+        %74:i32 = load %73
+        %75:f32 = convert %74
+        %76:vec4<f32> = construct %64, %68, %72, %75
+        store %x_GLF_color, %76
         exit_if  # if_6
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b18 {
-  %b18 = block {
-    %74:void = call %main_1
-    %75:vec4<f32> = load %x_GLF_color
-    %76:main_out = construct %75
-    ret %76
+%tint_symbol = @fragment func():main_out {
+  $B17: {
+    %78:void = call %main_1
+    %79:vec4<f32> = load %x_GLF_color
+    %80:main_out = construct %79
+    ret %80
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/0-opt.wgsl.expected.ir.msl
index 9188359..9c13e96 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,13 +12,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %b:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
@@ -26,66 +26,76 @@
     %i_2:ptr<function, i32, read_write> = var
     %indexable:ptr<function, array<i32, 2>, read_write> = var
     %10:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_36:i32 = load %10
+    %11:i32 = load %10
+    %x_36:i32 = let %11
     store %a, %x_36
-    %12:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-    %x_38:i32 = load %12
+    %13:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+    %14:i32 = load %13
+    %x_38:i32 = let %14
     store %b, %x_38
-    %14:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_40:i32 = load %14
-    %x_41:f32 = convert %x_40
-    %17:vec4<f32> = construct %x_41, %x_41, %x_41, %x_41
-    store %x_GLF_color, %17
-    %18:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_44:i32 = load %18
+    %16:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %17:i32 = load %16
+    %x_40:i32 = let %17
+    %19:f32 = convert %x_40
+    %x_41:f32 = let %19
+    %21:vec4<f32> = construct %x_41, %x_41, %x_41, %x_41
+    store %x_GLF_color, %21
+    %22:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %23:i32 = load %22
+    %x_44:i32 = let %23
     store %i, %x_44
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_49:i32 = load %i
-        %21:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_51:i32 = load %21
-        %23:bool = lt %x_49, %x_51
-        if %23 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %25:i32 = load %i
+        %x_49:i32 = let %25
+        %27:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %28:i32 = load %27
+        %x_51:i32 = let %28
+        %30:bool = lt %x_49, %x_51
+        if %30 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_54:i32 = load %i
-        %25:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-        %x_56:i32 = load %25
-        %27:bool = gt %x_54, %x_56
-        if %27 [t: %b7] {  # if_2
-          %b7 = block {  # true
-            %x_60:i32 = load %a
-            %29:i32 = add %x_60, 1i
-            store %a, %29
-            if false [t: %b8] {  # if_3
-              %b8 = block {  # true
-                %30:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-                %x_65:i32 = load %30
+        %31:i32 = load %i
+        %x_54:i32 = let %31
+        %33:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+        %34:i32 = load %33
+        %x_56:i32 = let %34
+        %36:bool = gt %x_54, %x_56
+        if %36 [t: $B7] {  # if_2
+          $B7: {  # true
+            %37:i32 = load %a
+            %x_60:i32 = let %37
+            %39:i32 = add %x_60, 1i
+            store %a, %39
+            if false [t: $B8] {  # if_3
+              $B8: {  # true
+                %40:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+                %41:i32 = load %40
+                %x_65:i32 = let %41
                 store %i_1, %x_65
-                loop [b: %b9, c: %b10] {  # loop_2
-                  %b9 = block {  # body
-                    %x_70:i32 = load %i_1
-                    %33:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-                    %x_72:i32 = load %33
-                    %35:bool = lt %x_70, %x_72
-                    if %35 [t: %b11, f: %b12] {  # if_4
-                      %b11 = block {  # true
+                loop [b: $B9] {  # loop_2
+                  $B9: {  # body
+                    %43:i32 = load %i_1
+                    %x_70:i32 = let %43
+                    %45:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+                    %46:i32 = load %45
+                    %x_72:i32 = let %46
+                    %48:bool = lt %x_70, %x_72
+                    if %48 [t: $B10, f: $B11] {  # if_4
+                      $B10: {  # true
                         exit_if  # if_4
                       }
-                      %b12 = block {  # false
+                      $B11: {  # false
                         exit_loop  # loop_2
                       }
                     }
                     ret
                   }
-                  %b10 = block {  # continuing
-                    next_iteration %b9
-                  }
                 }
                 exit_if  # if_3
               }
@@ -93,85 +103,104 @@
             exit_if  # if_2
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_75:i32 = load %i
-        %37:i32 = add %x_75, 1i
-        store %i, %37
-        next_iteration %b3
+      $B4: {  # continuing
+        %49:i32 = load %i
+        %x_75:i32 = let %49
+        %51:i32 = add %x_75, 1i
+        store %i, %51
+        next_iteration  # -> $B3
       }
     }
-    %38:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_78:i32 = load %38
+    %52:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %53:i32 = load %52
+    %x_78:i32 = let %53
     store %i_2, %x_78
-    loop [b: %b13, c: %b14] {  # loop_3
-      %b13 = block {  # body
-        %x_83:i32 = load %i_2
-        %41:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_85:i32 = load %41
-        %43:bool = lt %x_83, %x_85
-        if %43 [t: %b15, f: %b16] {  # if_5
-          %b15 = block {  # true
+    loop [b: $B12, c: $B13] {  # loop_3
+      $B12: {  # body
+        %55:i32 = load %i_2
+        %x_83:i32 = let %55
+        %57:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %58:i32 = load %57
+        %x_85:i32 = let %58
+        %60:bool = lt %x_83, %x_85
+        if %60 [t: $B14, f: $B15] {  # if_5
+          $B14: {  # true
             exit_if  # if_5
           }
-          %b16 = block {  # false
+          $B15: {  # false
             exit_loop  # loop_3
           }
         }
-        %44:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-        %x_89:i32 = load %44
-        %46:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
-        %x_91:i32 = load %46
-        %x_93:i32 = load %b
-        %49:array<i32, 2> = construct %x_89, %x_91
-        store %indexable, %49
-        %50:ptr<function, i32, read_write> = access %indexable, %x_93
-        %x_95:i32 = load %50
-        %x_96:i32 = load %a
-        %53:i32 = add %x_96, %x_95
-        store %a, %53
-        continue %b14
+        %61:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+        %62:i32 = load %61
+        %x_89:i32 = let %62
+        %64:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
+        %65:i32 = load %64
+        %x_91:i32 = let %65
+        %67:i32 = load %b
+        %x_93:i32 = let %67
+        %69:array<i32, 2> = construct %x_89, %x_91
+        store %indexable, %69
+        %70:ptr<function, i32, read_write> = access %indexable, %x_93
+        %71:i32 = load %70
+        %x_95:i32 = let %71
+        %73:i32 = load %a
+        %x_96:i32 = let %73
+        %75:i32 = add %x_96, %x_95
+        store %a, %75
+        continue  # -> $B13
       }
-      %b14 = block {  # continuing
-        %x_98:i32 = load %i_2
-        %55:i32 = add %x_98, 1i
-        store %i_2, %55
-        next_iteration %b13
+      $B13: {  # continuing
+        %76:i32 = load %i_2
+        %x_98:i32 = let %76
+        %78:i32 = add %x_98, 1i
+        store %i_2, %78
+        next_iteration  # -> $B12
       }
     }
-    %x_100:i32 = load %a
-    %57:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_102:i32 = load %57
-    %59:bool = eq %x_100, %x_102
-    if %59 [t: %b17] {  # if_6
-      %b17 = block {  # true
-        %60:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-        %x_107:i32 = load %60
-        %62:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %x_110:i32 = load %62
-        %64:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %x_113:i32 = load %64
-        %66:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-        %x_116:i32 = load %66
-        %68:f32 = convert %x_107
-        %69:f32 = convert %x_110
-        %70:f32 = convert %x_113
-        %71:f32 = convert %x_116
-        %72:vec4<f32> = construct %68, %69, %70, %71
-        store %x_GLF_color, %72
+    %79:i32 = load %a
+    %x_100:i32 = let %79
+    %81:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %82:i32 = load %81
+    %x_102:i32 = let %82
+    %84:bool = eq %x_100, %x_102
+    if %84 [t: $B16] {  # if_6
+      $B16: {  # true
+        %85:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+        %86:i32 = load %85
+        %x_107:i32 = let %86
+        %88:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %89:i32 = load %88
+        %x_110:i32 = let %89
+        %91:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %92:i32 = load %91
+        %x_113:i32 = let %92
+        %94:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+        %95:i32 = load %94
+        %x_116:i32 = let %95
+        %97:f32 = convert %x_107
+        %98:f32 = let %97
+        %99:f32 = convert %x_110
+        %100:f32 = let %99
+        %101:f32 = convert %x_113
+        %102:f32 = let %101
+        %103:f32 = convert %x_116
+        %104:vec4<f32> = construct %98, %100, %102, %103
+        store %x_GLF_color, %104
         exit_if  # if_6
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b18 {
-  %b18 = block {
-    %74:void = call %main_1
-    %75:vec4<f32> = load %x_GLF_color
-    %76:main_out = construct %75
-    ret %76
+%tint_symbol = @fragment func():main_out {
+  $B17: {
+    %106:void = call %main_1
+    %107:vec4<f32> = load %x_GLF_color
+    %108:main_out = construct %107
+    ret %108
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/1.spvasm.expected.ir.msl
index efdd3b1..cc8713f 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/1.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/1.spvasm.expected.ir.msl
@@ -1,6 +1,128 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+}
+
+%main_1 = func():void {
+  $B2: {
+    %a:ptr<function, i32, read_write> = var
+    %b:ptr<function, i32, read_write> = var
+    %i:ptr<function, i32, read_write> = var
+    %i_1:ptr<function, i32, read_write> = var
+    %i_2:ptr<function, i32, read_write> = var
+    %indexable:ptr<function, array<i32, 2>, read_write> = var
+    store %a, 0i
+    store %b, 1i
+    store %x_GLF_color, vec4<f32>(0.0f)
+    store %i, 0i
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %9:i32 = load %i
+        %10:bool = lt %9, 10i
+        if %10 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
+            exit_if  # if_1
+          }
+          $B6: {  # false
+            exit_loop  # loop_1
+          }
+        }
+        %11:i32 = load %i
+        %12:bool = gt %11, 1i
+        if %12 [t: $B7] {  # if_2
+          $B7: {  # true
+            %13:i32 = load %a
+            %14:i32 = add %13, 1i
+            store %a, %14
+            if false [t: $B8] {  # if_3
+              $B8: {  # true
+                store %i_1, 0i
+                loop [b: $B9] {  # loop_2
+                  $B9: {  # body
+                    %15:i32 = load %i_1
+                    %16:bool = lt %15, 10i
+                    if %16 [t: $B10, f: $B11] {  # if_4
+                      $B10: {  # true
+                        exit_if  # if_4
+                      }
+                      $B11: {  # false
+                        exit_loop  # loop_2
+                      }
+                    }
+                    ret
+                  }
+                }
+                exit_if  # if_3
+              }
+            }
+            exit_if  # if_2
+          }
+        }
+        continue  # -> $B4
+      }
+      $B4: {  # continuing
+        %17:i32 = load %i
+        %18:i32 = add %17, 1i
+        store %i, %18
+        next_iteration  # -> $B3
+      }
+    }
+    store %i_2, 0i
+    loop [b: $B12, c: $B13] {  # loop_3
+      $B12: {  # body
+        %19:i32 = load %i_2
+        %20:bool = lt %19, 10i
+        if %20 [t: $B14, f: $B15] {  # if_5
+          $B14: {  # true
+            exit_if  # if_5
+          }
+          $B15: {  # false
+            exit_loop  # loop_3
+          }
+        }
+        %21:i32 = load %b
+        %x_65:i32 = let %21
+        store %indexable, array<i32, 2>(1i, 2i)
+        %23:i32 = load %a
+        %24:ptr<function, i32, read_write> = access %indexable, %x_65
+        %25:i32 = load %24
+        %26:i32 = add %23, %25
+        store %a, %26
+        continue  # -> $B13
+      }
+      $B13: {  # continuing
+        %27:i32 = load %i_2
+        %28:i32 = add %27, 1i
+        store %i_2, %28
+        next_iteration  # -> $B12
+      }
+    }
+    %29:i32 = load %a
+    %30:bool = eq %29, 28i
+    if %30 [t: $B16] {  # if_6
+      $B16: {  # true
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        exit_if  # if_6
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B17: {
+    %32:void = call %main_1
+    %33:vec4<f32> = load %x_GLF_color
+    %34:main_out = construct %33
+    ret %34
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/1.wgsl.expected.ir.msl
index efdd3b1..23764d3 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/1.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/1.wgsl.expected.ir.msl
@@ -1,6 +1,138 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+}
+
+%main_1 = func():void {
+  $B2: {
+    %a:ptr<function, i32, read_write> = var
+    %b:ptr<function, i32, read_write> = var
+    %i:ptr<function, i32, read_write> = var
+    %i_1:ptr<function, i32, read_write> = var
+    %i_2:ptr<function, i32, read_write> = var
+    %indexable:ptr<function, array<i32, 2>, read_write> = var
+    store %a, 0i
+    store %b, 1i
+    store %x_GLF_color, vec4<f32>(0.0f)
+    store %i, 0i
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %9:i32 = load %i
+        %x_38:i32 = let %9
+        %11:bool = lt %x_38, 10i
+        if %11 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
+            exit_if  # if_1
+          }
+          $B6: {  # false
+            exit_loop  # loop_1
+          }
+        }
+        %12:i32 = load %i
+        %x_41:i32 = let %12
+        %14:bool = gt %x_41, 1i
+        if %14 [t: $B7] {  # if_2
+          $B7: {  # true
+            %15:i32 = load %a
+            %x_45:i32 = let %15
+            %17:i32 = add %x_45, 1i
+            store %a, %17
+            if false [t: $B8] {  # if_3
+              $B8: {  # true
+                store %i_1, 0i
+                loop [b: $B9] {  # loop_2
+                  $B9: {  # body
+                    %18:i32 = load %i_1
+                    %x_53:i32 = let %18
+                    %20:bool = lt %x_53, 10i
+                    if %20 [t: $B10, f: $B11] {  # if_4
+                      $B10: {  # true
+                        exit_if  # if_4
+                      }
+                      $B11: {  # false
+                        exit_loop  # loop_2
+                      }
+                    }
+                    ret
+                  }
+                }
+                exit_if  # if_3
+              }
+            }
+            exit_if  # if_2
+          }
+        }
+        continue  # -> $B4
+      }
+      $B4: {  # continuing
+        %21:i32 = load %i
+        %x_56:i32 = let %21
+        %23:i32 = add %x_56, 1i
+        store %i, %23
+        next_iteration  # -> $B3
+      }
+    }
+    store %i_2, 0i
+    loop [b: $B12, c: $B13] {  # loop_3
+      $B12: {  # body
+        %24:i32 = load %i_2
+        %x_62:i32 = let %24
+        %26:bool = lt %x_62, 10i
+        if %26 [t: $B14, f: $B15] {  # if_5
+          $B14: {  # true
+            exit_if  # if_5
+          }
+          $B15: {  # false
+            exit_loop  # loop_3
+          }
+        }
+        %27:i32 = load %b
+        %x_65:i32 = let %27
+        store %indexable, array<i32, 2>(1i, 2i)
+        %29:ptr<function, i32, read_write> = access %indexable, %x_65
+        %30:i32 = load %29
+        %x_67:i32 = let %30
+        %32:i32 = load %a
+        %x_68:i32 = let %32
+        %34:i32 = add %x_68, %x_67
+        store %a, %34
+        continue  # -> $B13
+      }
+      $B13: {  # continuing
+        %35:i32 = load %i_2
+        %x_70:i32 = let %35
+        %37:i32 = add %x_70, 1i
+        store %i_2, %37
+        next_iteration  # -> $B12
+      }
+    }
+    %38:i32 = load %a
+    %x_72:i32 = let %38
+    %40:bool = eq %x_72, 28i
+    if %40 [t: $B16] {  # if_6
+      $B16: {  # true
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        exit_if  # if_6
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B17: {
+    %42:void = call %main_1
+    %43:vec4<f32> = load %x_GLF_color
+    %44:main_out = construct %43
+    ret %44
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-dag-combiner-clamp-undefined-access-array/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-dag-combiner-clamp-undefined-access-array/0-opt.spvasm.expected.ir.msl
index 3b2d2a2..d7e7882 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-dag-combiner-clamp-undefined-access-array/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-dag-combiner-clamp-undefined-access-array/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,14 +20,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_9:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %A1:ptr<function, array<f32, 3>, read_write> = var
     %a:ptr<function, i32, read_write> = var
     %b:ptr<function, f32, read_write> = var
@@ -47,83 +47,90 @@
     %20:i32 = load %19
     %21:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
     %22:i32 = load %21
-    %23:i32 = clamp %18, %20, %22
-    store %a, %23
-    %24:i32 = load %a
-    %25:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-    %26:i32 = load %25
-    %27:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+    %23:i32 = let %22
+    %24:i32 = max %18, %20
+    %25:i32 = min %24, %23
+    store %a, %25
+    %26:i32 = load %a
+    %27:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
     %28:i32 = load %27
-    %29:i32 = clamp %24, %26, %28
-    %30:ptr<function, f32, read_write> = access %A1, %29
-    %31:f32 = load %30
-    store %b, %31
-    %32:f32 = load %b
-    %33:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-    %34:i32 = load %33
-    %35:ptr<function, f32, read_write> = access %A1, %34
-    %36:f32 = load %35
-    %37:bool = lt %32, %36
-    if %37 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %38:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-        %39:f32 = load %38
-        %40:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
-        %41:f32 = load %40
-        %42:bool = gt %39, %41
-        store %x_36, %42
+    %29:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+    %30:i32 = load %29
+    %31:i32 = let %30
+    %32:i32 = max %26, %28
+    %33:i32 = min %32, %31
+    %34:ptr<function, f32, read_write> = access %A1, %33
+    %35:f32 = load %34
+    store %b, %35
+    %36:f32 = load %b
+    %37:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+    %38:i32 = load %37
+    %39:ptr<function, f32, read_write> = access %A1, %38
+    %40:f32 = load %39
+    %41:bool = lt %36, %40
+    if %41 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %42:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+        %43:f32 = load %42
+        %44:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
+        %45:f32 = load %44
+        %46:bool = gt %43, %45
+        store %x_36, %46
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %43:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-        %44:f32 = load %43
-        %45:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
-        %46:i32 = load %45
-        %47:ptr<function, f32, read_write> = access %A1, %46
+      $B4: {  # false
+        %47:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
         %48:f32 = load %47
-        %49:bool = lt %44, %48
-        store %x_36, %49
+        %49:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
+        %50:i32 = load %49
+        %51:ptr<function, f32, read_write> = access %A1, %50
+        %52:f32 = load %51
+        %53:bool = lt %48, %52
+        store %x_36, %53
         exit_if  # if_1
       }
     }
-    %50:bool = load %x_36
-    store %c, %50
-    %51:bool = load %c
-    if %51 [t: %b5, f: %b6] {  # if_2
-      %b5 = block {  # true
-        %52:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %53:i32 = load %52
-        %54:f32 = convert %53
-        %55:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %56:i32 = load %55
-        %57:f32 = convert %56
-        %58:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %59:i32 = load %58
-        %60:f32 = convert %59
-        %61:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %62:i32 = load %61
-        %63:f32 = convert %62
-        %64:vec4<f32> = construct %54, %57, %60, %63
-        store %x_GLF_color, %64
+    %54:bool = load %x_36
+    store %c, %54
+    %55:bool = load %c
+    if %55 [t: $B5, f: $B6] {  # if_2
+      $B5: {  # true
+        %56:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+        %57:i32 = load %56
+        %58:f32 = convert %57
+        %59:f32 = let %58
+        %60:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %61:i32 = load %60
+        %62:f32 = convert %61
+        %63:f32 = let %62
+        %64:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %65:i32 = load %64
+        %66:f32 = convert %65
+        %67:f32 = let %66
+        %68:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+        %69:i32 = load %68
+        %70:f32 = convert %69
+        %71:vec4<f32> = construct %59, %63, %67, %70
+        store %x_GLF_color, %71
         exit_if  # if_2
       }
-      %b6 = block {  # false
-        %65:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-        %66:f32 = load %65
-        %67:vec4<f32> = construct %66
-        store %x_GLF_color, %67
+      $B6: {  # false
+        %72:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+        %73:f32 = load %72
+        %74:vec4<f32> = construct %73
+        store %x_GLF_color, %74
         exit_if  # if_2
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b7 {
-  %b7 = block {
-    %69:void = call %main_1
-    %70:vec4<f32> = load %x_GLF_color
-    %71:main_out = construct %70
-    ret %71
+%tint_symbol = @fragment func():main_out {
+  $B7: {
+    %76:void = call %main_1
+    %77:vec4<f32> = load %x_GLF_color
+    %78:main_out = construct %77
+    ret %78
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-dag-combiner-clamp-undefined-access-array/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-dag-combiner-clamp-undefined-access-array/0-opt.wgsl.expected.ir.msl
index cf6927c..3f98729 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-dag-combiner-clamp-undefined-access-array/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-dag-combiner-clamp-undefined-access-array/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,110 +20,140 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_9:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %A1:ptr<function, array<f32, 3>, read_write> = var
     %a:ptr<function, i32, read_write> = var
     %b:ptr<function, f32, read_write> = var
     %c:ptr<function, bool, read_write> = var
     %x_36:ptr<function, bool, read_write> = var
     %10:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
-    %x_38:f32 = load %10
-    %12:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_40:f32 = load %12
-    %14:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-    %x_42:f32 = load %14
-    %16:array<f32, 3> = construct %x_38, %x_40, %x_42
-    store %A1, %16
-    %17:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-    %x_45:i32 = load %17
-    %19:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-    %x_47:i32 = load %19
-    %21:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-    %x_49:i32 = load %21
-    %23:i32 = clamp %x_45, %x_47, %x_49
-    store %a, %23
-    %x_51:i32 = load %a
-    %25:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-    %x_53:i32 = load %25
-    %27:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-    %x_55:i32 = load %27
-    %29:i32 = clamp %x_51, %x_53, %x_55
-    %30:ptr<function, f32, read_write> = access %A1, %29
-    %x_58:f32 = load %30
-    store %b, %x_58
-    %x_59:f32 = load %b
+    %11:f32 = load %10
+    %x_38:f32 = let %11
+    %13:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %14:f32 = load %13
+    %x_40:f32 = let %14
+    %16:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+    %17:f32 = load %16
+    %x_42:f32 = let %17
+    %19:array<f32, 3> = construct %x_38, %x_40, %x_42
+    store %A1, %19
+    %20:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+    %21:i32 = load %20
+    %x_45:i32 = let %21
+    %23:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+    %24:i32 = load %23
+    %x_47:i32 = let %24
+    %26:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+    %27:i32 = load %26
+    %x_49:i32 = let %27
+    %29:i32 = max %x_45, %x_47
+    %30:i32 = min %29, %x_49
+    store %a, %30
+    %31:i32 = load %a
+    %x_51:i32 = let %31
     %33:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-    %x_61:i32 = load %33
-    %35:ptr<function, f32, read_write> = access %A1, %x_61
-    %x_63:f32 = load %35
-    %37:bool = lt %x_59, %x_63
-    if %37 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %38:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-        %x_69:f32 = load %38
-        %40:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
-        %x_71:f32 = load %40
-        %42:bool = gt %x_69, %x_71
-        store %x_36, %42
+    %34:i32 = load %33
+    %x_53:i32 = let %34
+    %36:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+    %37:i32 = load %36
+    %x_55:i32 = let %37
+    %39:i32 = max %x_51, %x_53
+    %40:i32 = min %39, %x_55
+    %41:ptr<function, f32, read_write> = access %A1, %40
+    %42:f32 = load %41
+    %x_58:f32 = let %42
+    store %b, %x_58
+    %44:f32 = load %b
+    %x_59:f32 = let %44
+    %46:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+    %47:i32 = load %46
+    %x_61:i32 = let %47
+    %49:ptr<function, f32, read_write> = access %A1, %x_61
+    %50:f32 = load %49
+    %x_63:f32 = let %50
+    %52:bool = lt %x_59, %x_63
+    if %52 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %53:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+        %54:f32 = load %53
+        %x_69:f32 = let %54
+        %56:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
+        %57:f32 = load %56
+        %x_71:f32 = let %57
+        %59:bool = gt %x_69, %x_71
+        store %x_36, %59
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %43:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-        %x_74:f32 = load %43
-        %45:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
-        %x_76:i32 = load %45
-        %47:ptr<function, f32, read_write> = access %A1, %x_76
-        %x_78:f32 = load %47
-        %49:bool = lt %x_74, %x_78
-        store %x_36, %49
+      $B4: {  # false
+        %60:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+        %61:f32 = load %60
+        %x_74:f32 = let %61
+        %63:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
+        %64:i32 = load %63
+        %x_76:i32 = let %64
+        %66:ptr<function, f32, read_write> = access %A1, %x_76
+        %67:f32 = load %66
+        %x_78:f32 = let %67
+        %69:bool = lt %x_74, %x_78
+        store %x_36, %69
         exit_if  # if_1
       }
     }
-    %x_80:bool = load %x_36
+    %70:bool = load %x_36
+    %x_80:bool = let %70
     store %c, %x_80
-    %x_81:bool = load %c
-    if %x_81 [t: %b5, f: %b6] {  # if_2
-      %b5 = block {  # true
-        %52:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %x_86:i32 = load %52
-        %54:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %x_89:i32 = load %54
-        %56:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %x_92:i32 = load %56
-        %58:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %x_95:i32 = load %58
-        %60:f32 = convert %x_86
-        %61:f32 = convert %x_89
-        %62:f32 = convert %x_92
-        %63:f32 = convert %x_95
-        %64:vec4<f32> = construct %60, %61, %62, %63
-        store %x_GLF_color, %64
+    %72:bool = load %c
+    %x_81:bool = let %72
+    if %x_81 [t: $B5, f: $B6] {  # if_2
+      $B5: {  # true
+        %74:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+        %75:i32 = load %74
+        %x_86:i32 = let %75
+        %77:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %78:i32 = load %77
+        %x_89:i32 = let %78
+        %80:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %81:i32 = load %80
+        %x_92:i32 = let %81
+        %83:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+        %84:i32 = load %83
+        %x_95:i32 = let %84
+        %86:f32 = convert %x_86
+        %87:f32 = let %86
+        %88:f32 = convert %x_89
+        %89:f32 = let %88
+        %90:f32 = convert %x_92
+        %91:f32 = let %90
+        %92:f32 = convert %x_95
+        %93:vec4<f32> = construct %87, %89, %91, %92
+        store %x_GLF_color, %93
         exit_if  # if_2
       }
-      %b6 = block {  # false
-        %65:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-        %x_99:f32 = load %65
-        %67:vec4<f32> = construct %x_99, %x_99, %x_99, %x_99
-        store %x_GLF_color, %67
+      $B6: {  # false
+        %94:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+        %95:f32 = load %94
+        %x_99:f32 = let %95
+        %97:vec4<f32> = construct %x_99, %x_99, %x_99, %x_99
+        store %x_GLF_color, %97
         exit_if  # if_2
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b7 {
-  %b7 = block {
-    %69:void = call %main_1
-    %70:vec4<f32> = load %x_GLF_color
-    %71:main_out = construct %70
-    ret %71
+%tint_symbol = @fragment func():main_out {
+  $B7: {
+    %99:void = call %main_1
+    %100:vec4<f32> = load %x_GLF_color
+    %101:main_out = construct %100
+    ret %101
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-dag-combiner-combine-casts-legalize-vector-types-xyz-swizzle-for-loop/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-dag-combiner-combine-casts-legalize-vector-types-xyz-swizzle-for-loop/0-opt.spvasm.expected.ir.msl
index 206d997..07464b8 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-dag-combiner-combine-casts-legalize-vector-types-xyz-swizzle-for-loop/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-dag-combiner-combine-casts-legalize-vector-types-xyz-swizzle-for-loop/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,13 +12,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %v:ptr<function, vec4<f32>, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %6:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
@@ -29,86 +29,94 @@
     %10:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
     %11:i32 = load %10
     store %i, %11
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %12:i32 = load %i
         %13:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
         %14:i32 = load %13
         %15:bool = lt %12, %14
-        if %15 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %15 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_50:i32 = load %i
-        %17:u32 = access vec3<u32>(0u, 1u, 2u), %x_50
-        %18:i32 = load %i
-        %19:f32 = convert %18
-        store_vector_element %v, %17, %19
-        continue %b4
+        %16:i32 = load %i
+        %x_50:i32 = let %16
+        %18:u32 = access vec3<u32>(0u, 1u, 2u), %x_50
+        %19:i32 = load %i
+        %20:f32 = convert %19
+        store_vector_element %v, %18, %20
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %20:i32 = load %i
-        %21:i32 = add %20, 1i
-        store %i, %21
-        next_iteration %b3
+      $B4: {  # continuing
+        %21:i32 = load %i
+        %22:i32 = add %21, 1i
+        store %i, %22
+        next_iteration  # -> $B3
       }
     }
-    %22:vec4<f32> = load %v
-    %23:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %24:i32 = load %23
-    %25:f32 = convert %24
-    %26:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %27:i32 = load %26
-    %28:f32 = convert %27
-    %29:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %23:vec4<f32> = load %v
+    %24:vec4<f32> = let %23
+    %25:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %26:i32 = load %25
+    %27:f32 = convert %26
+    %28:f32 = let %27
+    %29:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
     %30:i32 = load %29
     %31:f32 = convert %30
-    %32:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-    %33:i32 = load %32
-    %34:f32 = convert %33
-    %35:vec4<f32> = construct %25, %28, %31, %34
-    %36:vec4<bool> = eq %22, %35
-    %37:bool = all %36
-    if %37 [t: %b7, f: %b8] {  # if_2
-      %b7 = block {  # true
-        %38:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %39:i32 = load %38
-        %40:f32 = convert %39
-        %41:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %42:i32 = load %41
-        %43:f32 = convert %42
-        %44:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %45:i32 = load %44
-        %46:f32 = convert %45
-        %47:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %32:f32 = let %31
+    %33:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %34:i32 = load %33
+    %35:f32 = convert %34
+    %36:f32 = let %35
+    %37:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+    %38:i32 = load %37
+    %39:f32 = convert %38
+    %40:vec4<f32> = construct %28, %32, %36, %39
+    %41:vec4<bool> = eq %24, %40
+    %42:bool = all %41
+    if %42 [t: $B7, f: $B8] {  # if_2
+      $B7: {  # true
+        %43:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %44:i32 = load %43
+        %45:f32 = convert %44
+        %46:f32 = let %45
+        %47:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
         %48:i32 = load %47
         %49:f32 = convert %48
-        %50:vec4<f32> = construct %40, %43, %46, %49
-        store %x_GLF_color, %50
-        exit_if  # if_2
-      }
-      %b8 = block {  # false
+        %50:f32 = let %49
         %51:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
         %52:i32 = load %51
         %53:f32 = convert %52
-        %54:vec4<f32> = construct %53
-        store %x_GLF_color, %54
+        %54:f32 = let %53
+        %55:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %56:i32 = load %55
+        %57:f32 = convert %56
+        %58:vec4<f32> = construct %46, %50, %54, %57
+        store %x_GLF_color, %58
+        exit_if  # if_2
+      }
+      $B8: {  # false
+        %59:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %60:i32 = load %59
+        %61:f32 = convert %60
+        %62:vec4<f32> = construct %61
+        store %x_GLF_color, %62
         exit_if  # if_2
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b9 {
-  %b9 = block {
-    %56:void = call %main_1
-    %57:vec4<f32> = load %x_GLF_color
-    %58:main_out = construct %57
-    ret %58
+%tint_symbol = @fragment func():main_out {
+  $B9: {
+    %64:void = call %main_1
+    %65:vec4<f32> = load %x_GLF_color
+    %66:main_out = construct %65
+    ret %66
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-dag-combiner-combine-casts-legalize-vector-types-xyz-swizzle-for-loop/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-dag-combiner-combine-casts-legalize-vector-types-xyz-swizzle-for-loop/0-opt.wgsl.expected.ir.msl
index 5fca3a6..a0b862b 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-dag-combiner-combine-casts-legalize-vector-types-xyz-swizzle-for-loop/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-dag-combiner-combine-casts-legalize-vector-types-xyz-swizzle-for-loop/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,103 +12,128 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %v:ptr<function, vec4<f32>, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %6:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-    %x_36:i32 = load %6
-    %x_37:f32 = convert %x_36
-    %9:vec4<f32> = construct %x_37, %x_37, %x_37, %x_37
-    store %v, %9
-    %10:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_40:i32 = load %10
+    %7:i32 = load %6
+    %x_36:i32 = let %7
+    %9:f32 = convert %x_36
+    %x_37:f32 = let %9
+    %11:vec4<f32> = construct %x_37, %x_37, %x_37, %x_37
+    store %v, %11
+    %12:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %13:i32 = load %12
+    %x_40:i32 = let %13
     store %i, %x_40
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_45:i32 = load %i
-        %13:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-        %x_47:i32 = load %13
-        %15:bool = lt %x_45, %x_47
-        if %15 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %15:i32 = load %i
+        %x_45:i32 = let %15
+        %17:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+        %18:i32 = load %17
+        %x_47:i32 = let %18
+        %20:bool = lt %x_45, %x_47
+        if %20 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_50:i32 = load %i
-        %x_51:i32 = load %i
-        %18:u32 = access vec3<u32>(0u, 1u, 2u), %x_50
-        %19:f32 = convert %x_51
-        store_vector_element %v, %18, %19
-        continue %b4
+        %21:i32 = load %i
+        %x_50:i32 = let %21
+        %23:i32 = load %i
+        %x_51:i32 = let %23
+        %25:u32 = access vec3<u32>(0u, 1u, 2u), %x_50
+        %26:f32 = convert %x_51
+        store_vector_element %v, %25, %26
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_55:i32 = load %i
-        %21:i32 = add %x_55, 1i
-        store %i, %21
-        next_iteration %b3
+      $B4: {  # continuing
+        %27:i32 = load %i
+        %x_55:i32 = let %27
+        %29:i32 = add %x_55, 1i
+        store %i, %29
+        next_iteration  # -> $B3
       }
     }
-    %x_57:vec4<f32> = load %v
-    %23:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_59:i32 = load %23
-    %25:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_62:i32 = load %25
-    %27:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_65:i32 = load %27
-    %29:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-    %x_68:i32 = load %29
-    %31:f32 = convert %x_59
-    %32:f32 = convert %x_62
-    %33:f32 = convert %x_65
-    %34:f32 = convert %x_68
-    %35:vec4<f32> = construct %31, %32, %33, %34
-    %36:vec4<bool> = eq %x_57, %35
-    %37:bool = all %36
-    if %37 [t: %b7, f: %b8] {  # if_2
-      %b7 = block {  # true
-        %38:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_77:i32 = load %38
-        %40:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_80:i32 = load %40
-        %42:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_83:i32 = load %42
-        %44:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_86:i32 = load %44
-        %46:f32 = convert %x_77
-        %47:f32 = convert %x_80
-        %48:f32 = convert %x_83
-        %49:f32 = convert %x_86
-        %50:vec4<f32> = construct %46, %47, %48, %49
-        store %x_GLF_color, %50
+    %30:vec4<f32> = load %v
+    %x_57:vec4<f32> = let %30
+    %32:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %33:i32 = load %32
+    %x_59:i32 = let %33
+    %35:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %36:i32 = load %35
+    %x_62:i32 = let %36
+    %38:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %39:i32 = load %38
+    %x_65:i32 = let %39
+    %41:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+    %42:i32 = load %41
+    %x_68:i32 = let %42
+    %44:f32 = convert %x_59
+    %45:f32 = let %44
+    %46:f32 = convert %x_62
+    %47:f32 = let %46
+    %48:f32 = convert %x_65
+    %49:f32 = let %48
+    %50:f32 = convert %x_68
+    %51:vec4<f32> = construct %45, %47, %49, %50
+    %52:vec4<bool> = eq %x_57, %51
+    %53:bool = all %52
+    if %53 [t: $B7, f: $B8] {  # if_2
+      $B7: {  # true
+        %54:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %55:i32 = load %54
+        %x_77:i32 = let %55
+        %57:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %58:i32 = load %57
+        %x_80:i32 = let %58
+        %60:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %61:i32 = load %60
+        %x_83:i32 = let %61
+        %63:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %64:i32 = load %63
+        %x_86:i32 = let %64
+        %66:f32 = convert %x_77
+        %67:f32 = let %66
+        %68:f32 = convert %x_80
+        %69:f32 = let %68
+        %70:f32 = convert %x_83
+        %71:f32 = let %70
+        %72:f32 = convert %x_86
+        %73:vec4<f32> = construct %67, %69, %71, %72
+        store %x_GLF_color, %73
         exit_if  # if_2
       }
-      %b8 = block {  # false
-        %51:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_90:i32 = load %51
-        %x_91:f32 = convert %x_90
-        %54:vec4<f32> = construct %x_91, %x_91, %x_91, %x_91
-        store %x_GLF_color, %54
+      $B8: {  # false
+        %74:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %75:i32 = load %74
+        %x_90:i32 = let %75
+        %77:f32 = convert %x_90
+        %x_91:f32 = let %77
+        %79:vec4<f32> = construct %x_91, %x_91, %x_91, %x_91
+        store %x_GLF_color, %79
         exit_if  # if_2
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b9 {
-  %b9 = block {
-    %56:void = call %main_1
-    %57:vec4<f32> = load %x_GLF_color
-    %58:main_out = construct %57
-    ret %58
+%tint_symbol = @fragment func():main_out {
+  $B9: {
+    %81:void = call %main_1
+    %82:vec4<f32> = load %x_GLF_color
+    %83:main_out = construct %82
+    ret %83
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-dag-combiner-glf_color/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-dag-combiner-glf_color/0-opt.spvasm.expected.ir.msl
index 7a289c4..2c145df 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-dag-combiner-glf_color/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-dag-combiner-glf_color/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,14 +20,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_7:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_12:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%func_f1_ = func(%b:ptr<function, f32, read_write>):f32 -> %b2 {
-  %b2 = block {
+%func_f1_ = func(%b:ptr<function, f32, read_write>):f32 {
+  $B2: {
     %6:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
     %7:f32 = load %6
     %8:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
@@ -42,102 +42,111 @@
     %15:f32 = load %14
     %16:f32 = load %b
     %17:bool = gte %15, %16
-    if %17 [t: %b3] {  # if_1
-      %b3 = block {  # true
+    if %17 [t: $B3] {  # if_1
+      $B3: {  # true
         %18:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-        %x_104:f32 = load %18
+        %19:f32 = load %18
+        %x_104:f32 = let %19
         ret %x_104
       }
     }
-    %20:ptr<uniform, f32, read> = access %x_7, 0u, 2i, 0u
-    %x_106:f32 = load %20
+    %21:ptr<uniform, f32, read> = access %x_7, 0u, 2i, 0u
+    %22:f32 = load %21
+    %x_106:f32 = let %22
     ret %x_106
   }
 }
-%main_1 = func():void -> %b4 {
-  %b4 = block {
+%main_1 = func():void {
+  $B4: {
     %a:ptr<function, f32, read_write> = var
     %param:ptr<function, f32, read_write> = var
     %param_1:ptr<function, f32, read_write> = var
     %x_71:ptr<function, bool, read_write> = var
     %x_72:ptr<function, bool, read_write> = var
-    %28:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-    %29:f32 = load %28
-    store %param, %29
-    %x_45:f32 = call %func_f1_, %param
+    %30:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
+    %31:f32 = load %30
+    store %param, %31
+    %32:f32 = call %func_f1_, %param
+    %x_45:f32 = let %32
     store %a, %x_45
-    %31:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-    %32:f32 = load %31
-    %33:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-    %34:f32 = load %33
-    %35:f32 = add %32, %34
-    store %param_1, %35
-    %x_51:f32 = call %func_f1_, %param_1
-    %37:f32 = load %a
-    %38:f32 = add %37, %x_51
-    store %a, %38
-    %39:f32 = load %a
-    %40:ptr<uniform, f32, read> = access %x_7, 0u, 3i, 0u
-    %41:f32 = load %40
-    %x_57:bool = eq %39, %41
+    %34:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
+    %35:f32 = load %34
+    %36:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
+    %37:f32 = load %36
+    %38:f32 = add %35, %37
+    store %param_1, %38
+    %39:f32 = call %func_f1_, %param_1
+    %x_51:f32 = let %39
+    %41:f32 = load %a
+    %42:f32 = add %41, %x_51
+    store %a, %42
+    %43:f32 = load %a
+    %44:ptr<uniform, f32, read> = access %x_7, 0u, 3i, 0u
+    %45:f32 = load %44
+    %46:bool = eq %43, %45
+    %x_57:bool = let %46
     store %x_72, %x_57
-    if %x_57 [t: %b5] {  # if_2
-      %b5 = block {  # true
-        %43:vec4<f32> = load %x_GLF_color
-        %44:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-        %45:f32 = load %44
-        %46:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-        %47:f32 = load %46
-        %48:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
-        %49:f32 = load %48
+    if %x_57 [t: $B5] {  # if_2
+      $B5: {  # true
+        %48:vec4<f32> = load %x_GLF_color
+        %49:vec4<f32> = let %48
         %50:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
         %51:f32 = load %50
-        %52:vec4<f32> = construct %45, %47, %49, %51
-        %53:vec4<bool> = eq %43, %52
-        %54:bool = all %53
-        store %x_71, %54
-        %55:bool = load %x_71
-        store %x_72, %55
+        %52:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
+        %53:f32 = load %52
+        %54:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
+        %55:f32 = load %54
+        %56:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
+        %57:f32 = load %56
+        %58:vec4<f32> = construct %51, %53, %55, %57
+        %59:vec4<bool> = eq %49, %58
+        %60:bool = all %59
+        store %x_71, %60
+        %61:bool = load %x_71
+        store %x_72, %61
         exit_if  # if_2
       }
     }
-    %56:bool = load %x_72
-    if %56 [t: %b6, f: %b7] {  # if_3
-      %b6 = block {  # true
-        %57:ptr<uniform, i32, read> = access %x_12, 0u, 0i, 0u
-        %58:i32 = load %57
-        %59:f32 = convert %58
-        %60:ptr<uniform, i32, read> = access %x_12, 0u, 1i, 0u
-        %61:i32 = load %60
-        %62:f32 = convert %61
-        %63:ptr<uniform, i32, read> = access %x_12, 0u, 1i, 0u
+    %62:bool = load %x_72
+    if %62 [t: $B6, f: $B7] {  # if_3
+      $B6: {  # true
+        %63:ptr<uniform, i32, read> = access %x_12, 0u, 0i, 0u
         %64:i32 = load %63
         %65:f32 = convert %64
-        %66:ptr<uniform, i32, read> = access %x_12, 0u, 0i, 0u
-        %67:i32 = load %66
-        %68:f32 = convert %67
-        %69:vec4<f32> = construct %59, %62, %65, %68
-        store %x_GLF_color, %69
+        %66:f32 = let %65
+        %67:ptr<uniform, i32, read> = access %x_12, 0u, 1i, 0u
+        %68:i32 = load %67
+        %69:f32 = convert %68
+        %70:f32 = let %69
+        %71:ptr<uniform, i32, read> = access %x_12, 0u, 1i, 0u
+        %72:i32 = load %71
+        %73:f32 = convert %72
+        %74:f32 = let %73
+        %75:ptr<uniform, i32, read> = access %x_12, 0u, 0i, 0u
+        %76:i32 = load %75
+        %77:f32 = convert %76
+        %78:vec4<f32> = construct %66, %70, %74, %77
+        store %x_GLF_color, %78
         exit_if  # if_3
       }
-      %b7 = block {  # false
-        %70:ptr<uniform, i32, read> = access %x_12, 0u, 1i, 0u
-        %71:i32 = load %70
-        %72:f32 = convert %71
-        %73:vec4<f32> = construct %72
-        store %x_GLF_color, %73
+      $B7: {  # false
+        %79:ptr<uniform, i32, read> = access %x_12, 0u, 1i, 0u
+        %80:i32 = load %79
+        %81:f32 = convert %80
+        %82:vec4<f32> = construct %81
+        store %x_GLF_color, %82
         exit_if  # if_3
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b8 {
-  %b8 = block {
-    %75:void = call %main_1
-    %76:vec4<f32> = load %x_GLF_color
-    %77:main_out = construct %76
-    ret %77
+%tint_symbol = @fragment func():main_out {
+  $B8: {
+    %84:void = call %main_1
+    %85:vec4<f32> = load %x_GLF_color
+    %86:main_out = construct %85
+    ret %86
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-dag-combiner-glf_color/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-dag-combiner-glf_color/0-opt.wgsl.expected.ir.msl
index 283ac53..79ff783 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-dag-combiner-glf_color/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-dag-combiner-glf_color/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,124 +20,156 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_7:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_12:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%func_f1_ = func(%b:ptr<function, f32, read_write>):f32 -> %b2 {
-  %b2 = block {
+%func_f1_ = func(%b:ptr<function, f32, read_write>):f32 {
+  $B2: {
     %6:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-    %x_90:f32 = load %6
-    %8:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-    %x_92:f32 = load %8
-    %10:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
-    %x_94:f32 = load %10
-    %12:vec4<f32> = construct %x_90, %x_92, %x_94, 1.0f
-    store %x_GLF_color, %12
-    %x_96:vec4<f32> = load %x_GLF_color
+    %7:f32 = load %6
+    %x_90:f32 = let %7
+    %9:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
+    %10:f32 = load %9
+    %x_92:f32 = let %10
+    %12:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
+    %13:f32 = load %12
+    %x_94:f32 = let %13
+    %15:vec4<f32> = construct %x_90, %x_92, %x_94, 1.0f
+    store %x_GLF_color, %15
+    %16:vec4<f32> = load %x_GLF_color
+    %x_96:vec4<f32> = let %16
     store %x_GLF_color, %x_96
-    %14:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-    %x_98:f32 = load %14
-    %x_99:f32 = load %b
-    %17:bool = gte %x_98, %x_99
-    if %17 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %18:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-        %x_104:f32 = load %18
+    %18:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
+    %19:f32 = load %18
+    %x_98:f32 = let %19
+    %21:f32 = load %b
+    %x_99:f32 = let %21
+    %23:bool = gte %x_98, %x_99
+    if %23 [t: $B3] {  # if_1
+      $B3: {  # true
+        %24:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
+        %25:f32 = load %24
+        %x_104:f32 = let %25
         ret %x_104
       }
     }
-    %20:ptr<uniform, f32, read> = access %x_7, 0u, 2i, 0u
-    %x_106:f32 = load %20
+    %27:ptr<uniform, f32, read> = access %x_7, 0u, 2i, 0u
+    %28:f32 = load %27
+    %x_106:f32 = let %28
     ret %x_106
   }
 }
-%main_1 = func():void -> %b4 {
-  %b4 = block {
+%main_1 = func():void {
+  $B4: {
     %a:ptr<function, f32, read_write> = var
     %param:ptr<function, f32, read_write> = var
     %param_1:ptr<function, f32, read_write> = var
     %x_71:ptr<function, bool, read_write> = var
     %x_72_phi:ptr<function, bool, read_write> = var
-    %28:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-    %x_44:f32 = load %28
+    %36:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
+    %37:f32 = load %36
+    %x_44:f32 = let %37
     store %param, %x_44
-    %x_45:f32 = call %func_f1_, %param
+    %39:f32 = call %func_f1_, %param
+    %x_45:f32 = let %39
     store %a, %x_45
-    %31:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-    %x_47:f32 = load %31
-    %33:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-    %x_49:f32 = load %33
-    %35:f32 = add %x_47, %x_49
-    store %param_1, %35
-    %x_51:f32 = call %func_f1_, %param_1
-    %x_52:f32 = load %a
-    %38:f32 = add %x_52, %x_51
-    store %a, %38
-    %x_54:f32 = load %a
-    %40:ptr<uniform, f32, read> = access %x_7, 0u, 3i, 0u
-    %x_56:f32 = load %40
-    %x_57:bool = eq %x_54, %x_56
+    %41:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
+    %42:f32 = load %41
+    %x_47:f32 = let %42
+    %44:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
+    %45:f32 = load %44
+    %x_49:f32 = let %45
+    %47:f32 = add %x_47, %x_49
+    store %param_1, %47
+    %48:f32 = call %func_f1_, %param_1
+    %x_51:f32 = let %48
+    %50:f32 = load %a
+    %x_52:f32 = let %50
+    %52:f32 = add %x_52, %x_51
+    store %a, %52
+    %53:f32 = load %a
+    %x_54:f32 = let %53
+    %55:ptr<uniform, f32, read> = access %x_7, 0u, 3i, 0u
+    %56:f32 = load %55
+    %x_56:f32 = let %56
+    %58:bool = eq %x_54, %x_56
+    %x_57:bool = let %58
     store %x_72_phi, %x_57
-    if %x_57 [t: %b5] {  # if_2
-      %b5 = block {  # true
-        %x_60:vec4<f32> = load %x_GLF_color
-        %44:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-        %x_62:f32 = load %44
-        %46:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-        %x_64:f32 = load %46
-        %48:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
-        %x_66:f32 = load %48
-        %50:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-        %x_68:f32 = load %50
-        %52:vec4<f32> = construct %x_62, %x_64, %x_66, %x_68
-        %53:vec4<bool> = eq %x_60, %52
-        %54:bool = all %53
-        store %x_71, %54
-        %55:bool = load %x_71
-        store %x_72_phi, %55
+    if %x_57 [t: $B5] {  # if_2
+      $B5: {  # true
+        %60:vec4<f32> = load %x_GLF_color
+        %x_60:vec4<f32> = let %60
+        %62:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
+        %63:f32 = load %62
+        %x_62:f32 = let %63
+        %65:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
+        %66:f32 = load %65
+        %x_64:f32 = let %66
+        %68:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
+        %69:f32 = load %68
+        %x_66:f32 = let %69
+        %71:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
+        %72:f32 = load %71
+        %x_68:f32 = let %72
+        %74:vec4<f32> = construct %x_62, %x_64, %x_66, %x_68
+        %75:vec4<bool> = eq %x_60, %74
+        %76:bool = all %75
+        store %x_71, %76
+        %77:bool = load %x_71
+        store %x_72_phi, %77
         exit_if  # if_2
       }
     }
-    %x_72:bool = load %x_72_phi
-    if %x_72 [t: %b6, f: %b7] {  # if_3
-      %b6 = block {  # true
-        %57:ptr<uniform, i32, read> = access %x_12, 0u, 0i, 0u
-        %x_15:i32 = load %57
-        %59:ptr<uniform, i32, read> = access %x_12, 0u, 1i, 0u
-        %x_16:i32 = load %59
-        %61:ptr<uniform, i32, read> = access %x_12, 0u, 1i, 0u
-        %x_17:i32 = load %61
-        %63:ptr<uniform, i32, read> = access %x_12, 0u, 0i, 0u
-        %x_18:i32 = load %63
-        %65:f32 = convert %x_15
-        %66:f32 = convert %x_16
-        %67:f32 = convert %x_17
-        %68:f32 = convert %x_18
-        %69:vec4<f32> = construct %65, %66, %67, %68
-        store %x_GLF_color, %69
+    %78:bool = load %x_72_phi
+    %x_72:bool = let %78
+    if %x_72 [t: $B6, f: $B7] {  # if_3
+      $B6: {  # true
+        %80:ptr<uniform, i32, read> = access %x_12, 0u, 0i, 0u
+        %81:i32 = load %80
+        %x_15:i32 = let %81
+        %83:ptr<uniform, i32, read> = access %x_12, 0u, 1i, 0u
+        %84:i32 = load %83
+        %x_16:i32 = let %84
+        %86:ptr<uniform, i32, read> = access %x_12, 0u, 1i, 0u
+        %87:i32 = load %86
+        %x_17:i32 = let %87
+        %89:ptr<uniform, i32, read> = access %x_12, 0u, 0i, 0u
+        %90:i32 = load %89
+        %x_18:i32 = let %90
+        %92:f32 = convert %x_15
+        %93:f32 = let %92
+        %94:f32 = convert %x_16
+        %95:f32 = let %94
+        %96:f32 = convert %x_17
+        %97:f32 = let %96
+        %98:f32 = convert %x_18
+        %99:vec4<f32> = construct %93, %95, %97, %98
+        store %x_GLF_color, %99
         exit_if  # if_3
       }
-      %b7 = block {  # false
-        %70:ptr<uniform, i32, read> = access %x_12, 0u, 1i, 0u
-        %x_19:i32 = load %70
-        %x_86:f32 = convert %x_19
-        %73:vec4<f32> = construct %x_86, %x_86, %x_86, %x_86
-        store %x_GLF_color, %73
+      $B7: {  # false
+        %100:ptr<uniform, i32, read> = access %x_12, 0u, 1i, 0u
+        %101:i32 = load %100
+        %x_19:i32 = let %101
+        %103:f32 = convert %x_19
+        %x_86:f32 = let %103
+        %105:vec4<f32> = construct %x_86, %x_86, %x_86, %x_86
+        store %x_GLF_color, %105
         exit_if  # if_3
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b8 {
-  %b8 = block {
-    %75:void = call %main_1
-    %76:vec4<f32> = load %x_GLF_color
-    %77:main_out = construct %76
-    ret %77
+%tint_symbol = @fragment func():main_out {
+  $B8: {
+    %107:void = call %main_1
+    %108:vec4<f32> = load %x_GLF_color
+    %109:main_out = construct %108
+    ret %109
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-dag-combiner-increment-color/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-dag-combiner-increment-color/0-opt.spvasm.expected.ir.msl
index 61f2c9f..164bde3 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-dag-combiner-increment-color/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-dag-combiner-increment-color/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -12,13 +12,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, f32, read_write> = var
     %5:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
     %6:f32 = load %5
@@ -28,8 +28,8 @@
     %9:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
     %10:f32 = load %9
     %11:bool = gt %8, %10
-    if %11 [t: %b3] {  # if_1
-      %b3 = block {  # true
+    if %11 [t: $B3] {  # if_1
+      $B3: {  # true
         %12:f32 = load %a
         %13:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
         %14:f32 = load %13
@@ -43,8 +43,8 @@
         %20:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
         %21:f32 = load %20
         %22:bool = gt %19, %21
-        if %22 [t: %b4] {  # if_2
-          %b4 = block {  # true
+        if %22 [t: $B4] {  # if_2
+          $B4: {  # true
             %23:f32 = load %a
             %24:f32 = load_vector_element %x_GLF_color, 0u
             %25:f32 = add %23, %24
@@ -65,8 +65,8 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
+%tint_symbol = @fragment func():main_out {
+  $B5: {
     %32:void = call %main_1
     %33:vec4<f32> = load %x_GLF_color
     %34:main_out = construct %33
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-dag-combiner-increment-color/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-dag-combiner-increment-color/0-opt.wgsl.expected.ir.msl
index 28c7b73..3e1850c 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-dag-combiner-increment-color/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-dag-combiner-increment-color/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -12,65 +12,77 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, f32, read_write> = var
     %5:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-    %x_30:f32 = load %5
+    %6:f32 = load %5
+    %x_30:f32 = let %6
     store %a, %x_30
-    %7:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
-    %x_32:f32 = load %7
-    %9:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_34:f32 = load %9
-    %11:bool = gt %x_32, %x_34
-    if %11 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %12:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-        %x_39:f32 = load %12
-        %x_40:f32 = load %a
-        %15:f32 = add %x_40, %x_39
-        store %a, %15
-        %x_42:f32 = load %a
-        %17:vec4<f32> = construct %x_42, %x_42, %x_42, %x_42
-        store %x_GLF_color, %17
-        %18:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
-        %x_45:f32 = load %18
-        %20:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-        %x_47:f32 = load %20
-        %22:bool = gt %x_45, %x_47
-        if %22 [t: %b4] {  # if_2
-          %b4 = block {  # true
-            %x_52:f32 = load_vector_element %x_GLF_color, 0u
-            %x_53:f32 = load %a
-            %25:f32 = add %x_53, %x_52
-            store %a, %25
-            %26:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
-            %x_56:f32 = load %26
-            %28:vec4<f32> = construct %x_56, %x_56, %x_56, %x_56
-            store %x_GLF_color, %28
+    %8:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
+    %9:f32 = load %8
+    %x_32:f32 = let %9
+    %11:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %12:f32 = load %11
+    %x_34:f32 = let %12
+    %14:bool = gt %x_32, %x_34
+    if %14 [t: $B3] {  # if_1
+      $B3: {  # true
+        %15:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+        %16:f32 = load %15
+        %x_39:f32 = let %16
+        %18:f32 = load %a
+        %x_40:f32 = let %18
+        %20:f32 = add %x_40, %x_39
+        store %a, %20
+        %21:f32 = load %a
+        %x_42:f32 = let %21
+        %23:vec4<f32> = construct %x_42, %x_42, %x_42, %x_42
+        store %x_GLF_color, %23
+        %24:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
+        %25:f32 = load %24
+        %x_45:f32 = let %25
+        %27:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+        %28:f32 = load %27
+        %x_47:f32 = let %28
+        %30:bool = gt %x_45, %x_47
+        if %30 [t: $B4] {  # if_2
+          $B4: {  # true
+            %31:f32 = load_vector_element %x_GLF_color, 0u
+            %x_52:f32 = let %31
+            %33:f32 = load %a
+            %x_53:f32 = let %33
+            %35:f32 = add %x_53, %x_52
+            store %a, %35
+            %36:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
+            %37:f32 = load %36
+            %x_56:f32 = let %37
+            %39:vec4<f32> = construct %x_56, %x_56, %x_56, %x_56
+            store %x_GLF_color, %39
             exit_if  # if_2
           }
         }
         exit_if  # if_1
       }
     }
-    %x_58:f32 = load %a
-    %30:vec4<f32> = construct %x_58, 0.0f, 0.0f, 1.0f
-    store %x_GLF_color, %30
+    %40:f32 = load %a
+    %x_58:f32 = let %40
+    %42:vec4<f32> = construct %x_58, 0.0f, 0.0f, 1.0f
+    store %x_GLF_color, %42
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %32:void = call %main_1
-    %33:vec4<f32> = load %x_GLF_color
-    %34:main_out = construct %33
-    ret %34
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %44:void = call %main_1
+    %45:vec4<f32> = load %x_GLF_color
+    %46:main_out = construct %45
+    ret %46
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-dag-combiner-loop-bitfieldreverse/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-dag-combiner-loop-bitfieldreverse/0-opt.spvasm.expected.ir.msl
index e6e37cc..2e085c6 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-dag-combiner-loop-bitfieldreverse/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-dag-combiner-loop-bitfieldreverse/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,13 +12,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %6:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
@@ -28,72 +28,76 @@
     %9:i32 = load %8
     %10:i32 = negation %9
     store %i, %10
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %11:i32 = load %i
-        %x_36:i32 = add %11, 1i
+        %12:i32 = add %11, 1i
+        %x_36:i32 = let %12
         store %i, %x_36
-        %13:i32 = reverseBits %x_36
-        %14:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %15:i32 = load %14
-        %16:bool = lte %13, %15
-        if %16 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %14:i32 = reverseBits %x_36
+        %15:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %16:i32 = load %15
+        %17:bool = lte %14, %16
+        if %17 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %17:i32 = load %a
-        %18:i32 = add %17, 1i
-        store %a, %18
-        continue %b4
+        %18:i32 = load %a
+        %19:i32 = add %18, 1i
+        store %a, %19
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
-    %19:i32 = load %a
-    %20:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %21:i32 = load %20
-    %22:bool = eq %19, %21
-    if %22 [t: %b7, f: %b8] {  # if_2
-      %b7 = block {  # true
-        %23:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %24:i32 = load %23
-        %25:f32 = convert %24
-        %26:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %27:i32 = load %26
-        %28:f32 = convert %27
-        %29:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %30:i32 = load %29
-        %31:f32 = convert %30
-        %32:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %20:i32 = load %a
+    %21:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %22:i32 = load %21
+    %23:bool = eq %20, %22
+    if %23 [t: $B7, f: $B8] {  # if_2
+      $B7: {  # true
+        %24:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %25:i32 = load %24
+        %26:f32 = convert %25
+        %27:f32 = let %26
+        %28:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %29:i32 = load %28
+        %30:f32 = convert %29
+        %31:f32 = let %30
+        %32:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
         %33:i32 = load %32
         %34:f32 = convert %33
-        %35:vec4<f32> = construct %25, %28, %31, %34
-        store %x_GLF_color, %35
-        exit_if  # if_2
-      }
-      %b8 = block {  # false
-        %36:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %35:f32 = let %34
+        %36:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
         %37:i32 = load %36
         %38:f32 = convert %37
-        %39:vec4<f32> = construct %38
+        %39:vec4<f32> = construct %27, %31, %35, %38
         store %x_GLF_color, %39
         exit_if  # if_2
       }
+      $B8: {  # false
+        %40:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %41:i32 = load %40
+        %42:f32 = convert %41
+        %43:vec4<f32> = construct %42
+        store %x_GLF_color, %43
+        exit_if  # if_2
+      }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b9 {
-  %b9 = block {
-    %41:void = call %main_1
-    %42:vec4<f32> = load %x_GLF_color
-    %43:main_out = construct %42
-    ret %43
+%tint_symbol = @fragment func():main_out {
+  $B9: {
+    %45:void = call %main_1
+    %46:vec4<f32> = load %x_GLF_color
+    %47:main_out = construct %46
+    ret %47
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-dag-combiner-loop-bitfieldreverse/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-dag-combiner-loop-bitfieldreverse/0-opt.wgsl.expected.ir.msl
index 9a7f8d1..4ed32e7 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-dag-combiner-loop-bitfieldreverse/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-dag-combiner-loop-bitfieldreverse/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,88 +12,105 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %6:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_27:i32 = load %6
+    %7:i32 = load %6
+    %x_27:i32 = let %7
     store %a, %x_27
-    %8:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-    %x_29:i32 = load %8
-    %10:i32 = negation %x_29
-    store %i, %10
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_35:i32 = load %i
-        %x_36:i32 = add %x_35, 1i
+    %9:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+    %10:i32 = load %9
+    %x_29:i32 = let %10
+    %12:i32 = negation %x_29
+    store %i, %12
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %13:i32 = load %i
+        %x_35:i32 = let %13
+        %15:i32 = add %x_35, 1i
+        %x_36:i32 = let %15
         store %i, %x_36
-        %13:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %x_39:i32 = load %13
-        %15:i32 = reverseBits %x_36
-        %16:bool = lte %15, %x_39
-        if %16 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %17:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %18:i32 = load %17
+        %x_39:i32 = let %18
+        %20:i32 = reverseBits %x_36
+        %21:bool = lte %20, %x_39
+        if %21 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_42:i32 = load %a
-        %18:i32 = add %x_42, 1i
-        store %a, %18
-        continue %b4
+        %22:i32 = load %a
+        %x_42:i32 = let %22
+        %24:i32 = add %x_42, 1i
+        store %a, %24
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
-    %x_44:i32 = load %a
-    %20:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_46:i32 = load %20
-    %22:bool = eq %x_44, %x_46
-    if %22 [t: %b7, f: %b8] {  # if_2
-      %b7 = block {  # true
-        %23:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %x_52:i32 = load %23
-        %25:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_55:i32 = load %25
-        %27:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_58:i32 = load %27
-        %29:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %x_61:i32 = load %29
-        %31:f32 = convert %x_52
-        %32:f32 = convert %x_55
-        %33:f32 = convert %x_58
-        %34:f32 = convert %x_61
-        %35:vec4<f32> = construct %31, %32, %33, %34
-        store %x_GLF_color, %35
+    %25:i32 = load %a
+    %x_44:i32 = let %25
+    %27:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %28:i32 = load %27
+    %x_46:i32 = let %28
+    %30:bool = eq %x_44, %x_46
+    if %30 [t: $B7, f: $B8] {  # if_2
+      $B7: {  # true
+        %31:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %32:i32 = load %31
+        %x_52:i32 = let %32
+        %34:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %35:i32 = load %34
+        %x_55:i32 = let %35
+        %37:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %38:i32 = load %37
+        %x_58:i32 = let %38
+        %40:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %41:i32 = load %40
+        %x_61:i32 = let %41
+        %43:f32 = convert %x_52
+        %44:f32 = let %43
+        %45:f32 = convert %x_55
+        %46:f32 = let %45
+        %47:f32 = convert %x_58
+        %48:f32 = let %47
+        %49:f32 = convert %x_61
+        %50:vec4<f32> = construct %44, %46, %48, %49
+        store %x_GLF_color, %50
         exit_if  # if_2
       }
-      %b8 = block {  # false
-        %36:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_65:i32 = load %36
-        %x_66:f32 = convert %x_65
-        %39:vec4<f32> = construct %x_66, %x_66, %x_66, %x_66
-        store %x_GLF_color, %39
+      $B8: {  # false
+        %51:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %52:i32 = load %51
+        %x_65:i32 = let %52
+        %54:f32 = convert %x_65
+        %x_66:f32 = let %54
+        %56:vec4<f32> = construct %x_66, %x_66, %x_66, %x_66
+        store %x_GLF_color, %56
         exit_if  # if_2
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b9 {
-  %b9 = block {
-    %41:void = call %main_1
-    %42:vec4<f32> = load %x_GLF_color
-    %43:main_out = construct %42
-    ret %43
+%tint_symbol = @fragment func():main_out {
+  $B9: {
+    %58:void = call %main_1
+    %59:vec4<f32> = load %x_GLF_color
+    %60:main_out = construct %59
+    ret %60
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-dag-combiner-neg-div-pow2/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-dag-combiner-neg-div-pow2/0-opt.spvasm.expected.ir.msl
index ce2d277..755d8a2 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-dag-combiner-neg-div-pow2/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-dag-combiner-neg-div-pow2/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf1 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf1 = struct @align(4) {
   ten:i32 @offset(0)
 }
 
@@ -12,67 +12,68 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_8: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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %b:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     store %a, 0i
     store %b, 0i
     store %i, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %8:i32 = load %i
         %9:ptr<uniform, i32, read> = access %x_8, 0u
         %10:i32 = load %9
         %11:bool = lt %8, %10
-        if %11 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %11 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
         %12:i32 = load %a
         %13:bool = gt %12, 5i
-        if %13 [t: %b7] {  # if_2
-          %b7 = block {  # true
+        if %13 [t: $B7] {  # if_2
+          $B7: {  # true
             exit_loop  # loop_1
           }
         }
         %14:i32 = load %a
-        %15:ptr<uniform, i32, read> = access %x_10, 0u
-        %16:i32 = load %15
-        %17:i32 = div %16, -4i
-        %18:i32 = add %14, %17
-        store %a, %18
-        %19:i32 = load %b
-        %20:i32 = add %19, 1i
-        store %b, %20
-        continue %b4
-      }
-      %b4 = block {  # continuing
-        %21:i32 = load %i
+        %15:i32 = let %14
+        %16:ptr<uniform, i32, read> = access %x_10, 0u
+        %17:i32 = load %16
+        %18:i32 = call %tint_div_i32, %17, -4i
+        %20:i32 = add %15, %18
+        store %a, %20
+        %21:i32 = load %b
         %22:i32 = add %21, 1i
-        store %i, %22
-        next_iteration %b3
+        store %b, %22
+        continue  # -> $B4
+      }
+      $B4: {  # continuing
+        %23:i32 = load %i
+        %24:i32 = add %23, 1i
+        store %i, %24
+        next_iteration  # -> $B3
       }
     }
-    %23:i32 = load %b
-    %24:bool = eq %23, 3i
-    if %24 [t: %b8, f: %b9] {  # if_3
-      %b8 = block {  # true
+    %25:i32 = load %b
+    %26:bool = eq %25, 3i
+    if %26 [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 = block {  # false
+      $B9: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_3
       }
@@ -80,12 +81,24 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b10 {
-  %b10 = block {
-    %26:void = call %main_1
-    %27:vec4<f32> = load %x_GLF_color
-    %28:main_out = construct %27
-    ret %28
+%tint_symbol = @fragment func():main_out {
+  $B10: {
+    %28:void = call %main_1
+    %29:vec4<f32> = load %x_GLF_color
+    %30:main_out = construct %29
+    ret %30
+  }
+}
+%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B11: {
+    %33:bool = eq %rhs, 0i
+    %34:bool = eq %lhs, -2147483648i
+    %35:bool = eq %rhs, -1i
+    %36:bool = and %34, %35
+    %37:bool = or %33, %36
+    %38:i32 = select %rhs, 1i, %37
+    %39:i32 = div %lhs, %38
+    ret %39
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-dag-combiner-neg-div-pow2/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-dag-combiner-neg-div-pow2/0-opt.wgsl.expected.ir.msl
index 641b671..95a6e89 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-dag-combiner-neg-div-pow2/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-dag-combiner-neg-div-pow2/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf1 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf1 = struct @align(4) {
   ten:i32 @offset(0)
 }
 
@@ -12,67 +12,75 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_8: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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %b:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     store %a, 0i
     store %b, 0i
     store %i, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_36:i32 = load %i
-        %9:ptr<uniform, i32, read> = access %x_8, 0u
-        %x_38:i32 = load %9
-        %11:bool = lt %x_36, %x_38
-        if %11 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %8:i32 = load %i
+        %x_36:i32 = let %8
+        %10:ptr<uniform, i32, read> = access %x_8, 0u
+        %11:i32 = load %10
+        %x_38:i32 = let %11
+        %13:bool = lt %x_36, %x_38
+        if %13 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_41:i32 = load %a
-        %13:bool = gt %x_41, 5i
-        if %13 [t: %b7] {  # if_2
-          %b7 = block {  # true
+        %14:i32 = load %a
+        %x_41:i32 = let %14
+        %16:bool = gt %x_41, 5i
+        if %16 [t: $B7] {  # if_2
+          $B7: {  # true
             exit_loop  # loop_1
           }
         }
-        %14:ptr<uniform, i32, read> = access %x_10, 0u
-        %x_46:i32 = load %14
-        %x_48:i32 = load %a
-        %17:i32 = div %x_46, -4i
-        %18:i32 = add %x_48, %17
-        store %a, %18
-        %x_50:i32 = load %b
-        %20:i32 = add %x_50, 1i
-        store %b, %20
-        continue %b4
+        %17:ptr<uniform, i32, read> = access %x_10, 0u
+        %18:i32 = load %17
+        %x_46:i32 = let %18
+        %20:i32 = load %a
+        %x_48:i32 = let %20
+        %22:i32 = call %tint_div_i32, %x_46, -4i
+        %24:i32 = add %x_48, %22
+        store %a, %24
+        %25:i32 = load %b
+        %x_50:i32 = let %25
+        %27:i32 = add %x_50, 1i
+        store %b, %27
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_52:i32 = load %i
-        %22:i32 = add %x_52, 1i
-        store %i, %22
-        next_iteration %b3
+      $B4: {  # continuing
+        %28:i32 = load %i
+        %x_52:i32 = let %28
+        %30:i32 = add %x_52, 1i
+        store %i, %30
+        next_iteration  # -> $B3
       }
     }
-    %x_54:i32 = load %b
-    %24:bool = eq %x_54, 3i
-    if %24 [t: %b8, f: %b9] {  # if_3
-      %b8 = block {  # true
+    %31:i32 = load %b
+    %x_54:i32 = let %31
+    %33:bool = eq %x_54, 3i
+    if %33 [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 = block {  # false
+      $B9: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_3
       }
@@ -80,12 +88,24 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b10 {
-  %b10 = block {
-    %26:void = call %main_1
-    %27:vec4<f32> = load %x_GLF_color
-    %28:main_out = construct %27
-    ret %28
+%tint_symbol = @fragment func():main_out {
+  $B10: {
+    %35:void = call %main_1
+    %36:vec4<f32> = load %x_GLF_color
+    %37:main_out = construct %36
+    ret %37
+  }
+}
+%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B11: {
+    %40:bool = eq %rhs, 0i
+    %41:bool = eq %lhs, -2147483648i
+    %42:bool = eq %rhs, -1i
+    %43:bool = and %41, %42
+    %44:bool = or %40, %43
+    %45:i32 = select %rhs, 1i, %44
+    %46:i32 = div %lhs, %45
+    ret %46
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-dag-combiner-same-cond-nested/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-dag-combiner-same-cond-nested/0-opt.spvasm.expected.ir.msl
index 52e8acb..1ecfa8f 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-dag-combiner-same-cond-nested/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-dag-combiner-same-cond-nested/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:f32 @offset(0)
 }
 
@@ -8,13 +8,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %f:ptr<function, f32, read_write> = var
     %a:ptr<function, i32, read_write> = var
     %b:ptr<function, i32, read_write> = var
@@ -28,59 +28,64 @@
     store %b, 0i
     store %c, 1i
     store %i, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %12:i32 = load %i
         %13:bool = lt %12, 3i
-        if %13 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %13 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_50:i32 = load %i
-        %15:f32 = load %f
-        %16:i32 = load %i
-        %17:f32 = convert %16
-        %18:f32 = add %15, %17
-        store_vector_element %v, %x_50, %18
-        continue %b4
+        %14:i32 = load %i
+        %x_50:i32 = let %14
+        %16:f32 = load %f
+        %17:f32 = let %16
+        %18:i32 = load %i
+        %19:f32 = convert %18
+        %20:f32 = add %17, %19
+        store_vector_element %v, %x_50, %20
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %19:i32 = load %i
-        %20:i32 = add %19, 1i
-        store %i, %20
-        next_iteration %b3
+      $B4: {  # continuing
+        %21:i32 = load %i
+        %22:i32 = add %21, 1i
+        store %i, %22
+        next_iteration  # -> $B3
       }
     }
-    %21:ptr<uniform, f32, read> = access %x_6, 0u
-    %22:f32 = load %21
-    %23:bool = eq %22, 1.0f
-    if %23 [t: %b7] {  # if_2
-      %b7 = block {  # true
-        loop [b: %b8, c: %b9] {  # loop_2
-          %b8 = block {  # body
+    %23:ptr<uniform, f32, read> = access %x_6, 0u
+    %24:f32 = load %23
+    %25:bool = eq %24, 1.0f
+    if %25 [t: $B7] {  # if_2
+      $B7: {  # true
+        loop [b: $B8, c: $B9] {  # loop_2
+          $B8: {  # body
             store %x_GLF_color, vec4<f32>(0.0f)
-            continue %b9
+            continue  # -> $B9
           }
-          %b9 = block {  # continuing
-            %x_67:i32 = load %c
-            %x_68:i32 = load %a
-            %x_69:i32 = load %b
-            %27:i32 = or %x_68, %x_69
-            %28:i32 = and %x_67, %27
-            %29:bool = eq %28, 0i
-            %30:bool = eq %29, false
-            break_if %30 %b8
+          $B9: {  # continuing
+            %26:i32 = load %c
+            %x_67:i32 = let %26
+            %28:i32 = load %a
+            %x_68:i32 = let %28
+            %30:i32 = load %b
+            %x_69:i32 = let %30
+            %32:i32 = or %x_68, %x_69
+            %33:i32 = and %x_67, %32
+            %34:bool = eq %33, 0i
+            %35:bool = eq %34, false
+            break_if %35  # -> [t: exit_loop loop_2, f: $B8]
           }
         }
-        %31:ptr<uniform, f32, read> = access %x_6, 0u
-        %32:f32 = load %31
-        %33:bool = eq %32, 1.0f
-        if %33 [t: %b10] {  # if_3
-          %b10 = block {  # true
+        %36:ptr<uniform, f32, read> = access %x_6, 0u
+        %37:f32 = load %36
+        %38:bool = eq %37, 1.0f
+        if %38 [t: $B10] {  # if_3
+          $B10: {  # true
             store %x_GLF_color, vec4<f32>(1.0f)
             exit_if  # if_3
           }
@@ -88,30 +93,32 @@
         exit_if  # if_2
       }
     }
-    %34:f32 = load_vector_element %v, 0u
-    %35:bool = eq %34, 1.0f
-    %36:f32 = select 0.0f, 1.0f, %35
-    %37:f32 = load_vector_element %v, 1u
-    %38:bool = eq %37, 2.0f
-    %39:f32 = select 1.0f, 0.0f, %38
-    %40:f32 = load_vector_element %v, 2u
-    %41:bool = eq %40, 3.0f
-    %42:f32 = select 1.0f, 0.0f, %41
-    %43:vec3<f32> = construct %36, %39, %42
-    %44:vec3<f32> = swizzle %43, xyz
-    %45:f32 = load_vector_element %x_GLF_color, 3u
-    %46:vec4<f32> = construct %44, %45
-    store %x_GLF_color, %46
+    %39:f32 = load_vector_element %v, 0u
+    %40:bool = eq %39, 1.0f
+    %41:f32 = select 0.0f, 1.0f, %40
+    %42:f32 = let %41
+    %43:f32 = load_vector_element %v, 1u
+    %44:bool = eq %43, 2.0f
+    %45:f32 = select 1.0f, 0.0f, %44
+    %46:f32 = let %45
+    %47:f32 = load_vector_element %v, 2u
+    %48:bool = eq %47, 3.0f
+    %49:f32 = select 1.0f, 0.0f, %48
+    %50:vec3<f32> = construct %42, %46, %49
+    %51:vec3<f32> = swizzle %50, xyz
+    %52:f32 = load_vector_element %x_GLF_color, 3u
+    %53:vec4<f32> = construct %51, %52
+    store %x_GLF_color, %53
     store_vector_element %x_GLF_color, 3u, 1.0f
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b11 {
-  %b11 = block {
-    %48:void = call %main_1
-    %49:vec4<f32> = load %x_GLF_color
-    %50:main_out = construct %49
-    ret %50
+%tint_symbol = @fragment func():main_out {
+  $B11: {
+    %55:void = call %main_1
+    %56:vec4<f32> = load %x_GLF_color
+    %57:main_out = construct %56
+    ret %57
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-dag-combiner-same-cond-nested/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-dag-combiner-same-cond-nested/0-opt.wgsl.expected.ir.msl
index 56e5362..fa684c9 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-dag-combiner-same-cond-nested/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-dag-combiner-same-cond-nested/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:f32 @offset(0)
 }
 
@@ -8,13 +8,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %f:ptr<function, f32, read_write> = var
     %a:ptr<function, i32, read_write> = var
     %b:ptr<function, i32, read_write> = var
@@ -22,65 +22,76 @@
     %i:ptr<function, i32, read_write> = var
     %v:ptr<function, vec3<f32>, read_write> = var
     %10:ptr<uniform, f32, read> = access %x_6, 0u
-    %x_42:f32 = load %10
+    %11:f32 = load %10
+    %x_42:f32 = let %11
     store %f, %x_42
     store %a, 1i
     store %b, 0i
     store %c, 1i
     store %i, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_47:i32 = load %i
-        %13:bool = lt %x_47, 3i
-        if %13 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %13:i32 = load %i
+        %x_47:i32 = let %13
+        %15:bool = lt %x_47, 3i
+        if %15 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_50:i32 = load %i
-        %x_51:f32 = load %f
-        %x_52:i32 = load %i
-        %17:f32 = convert %x_52
-        %18:f32 = add %x_51, %17
-        store_vector_element %v, %x_50, %18
-        continue %b4
+        %16:i32 = load %i
+        %x_50:i32 = let %16
+        %18:f32 = load %f
+        %x_51:f32 = let %18
+        %20:i32 = load %i
+        %x_52:i32 = let %20
+        %22:f32 = convert %x_52
+        %23:f32 = add %x_51, %22
+        store_vector_element %v, %x_50, %23
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_56:i32 = load %i
-        %20:i32 = add %x_56, 1i
-        store %i, %20
-        next_iteration %b3
+      $B4: {  # continuing
+        %24:i32 = load %i
+        %x_56:i32 = let %24
+        %26:i32 = add %x_56, 1i
+        store %i, %26
+        next_iteration  # -> $B3
       }
     }
-    %21:ptr<uniform, f32, read> = access %x_6, 0u
-    %x_59:f32 = load %21
-    %23:bool = eq %x_59, 1.0f
-    if %23 [t: %b7] {  # if_2
-      %b7 = block {  # true
-        loop [b: %b8, c: %b9] {  # loop_2
-          %b8 = block {  # body
+    %27:ptr<uniform, f32, read> = access %x_6, 0u
+    %28:f32 = load %27
+    %x_59:f32 = let %28
+    %30:bool = eq %x_59, 1.0f
+    if %30 [t: $B7] {  # if_2
+      $B7: {  # true
+        loop [b: $B8, c: $B9] {  # loop_2
+          $B8: {  # body
             store %x_GLF_color, vec4<f32>(0.0f)
-            continue %b9
+            continue  # -> $B9
           }
-          %b9 = block {  # continuing
-            %x_67:i32 = load %c
-            %x_68:i32 = load %a
-            %x_69:i32 = load %b
-            %27:i32 = or %x_68, %x_69
-            %28:i32 = and %x_67, %27
-            %29:bool = eq %28, 0i
-            %30:bool = eq %29, false
-            break_if %30 %b8
+          $B9: {  # continuing
+            %31:i32 = load %c
+            %x_67:i32 = let %31
+            %33:i32 = load %a
+            %x_68:i32 = let %33
+            %35:i32 = load %b
+            %x_69:i32 = let %35
+            %37:i32 = or %x_68, %x_69
+            %38:i32 = and %x_67, %37
+            %39:bool = eq %38, 0i
+            %40:bool = eq %39, false
+            break_if %40  # -> [t: exit_loop loop_2, f: $B8]
           }
         }
-        %31:ptr<uniform, f32, read> = access %x_6, 0u
-        %x_74:f32 = load %31
-        %33:bool = eq %x_74, 1.0f
-        if %33 [t: %b10] {  # if_3
-          %b10 = block {  # true
+        %41:ptr<uniform, f32, read> = access %x_6, 0u
+        %42:f32 = load %41
+        %x_74:f32 = let %42
+        %44:bool = eq %x_74, 1.0f
+        if %44 [t: $B10] {  # if_3
+          $B10: {  # true
             store %x_GLF_color, vec4<f32>(1.0f)
             exit_if  # if_3
           }
@@ -88,33 +99,40 @@
         exit_if  # if_2
       }
     }
-    %x_79:f32 = load_vector_element %v, 0u
-    %x_83:f32 = load_vector_element %v, 1u
-    %x_87:f32 = load_vector_element %v, 2u
-    %37:bool = eq %x_79, 1.0f
-    %38:f32 = select 0.0f, 1.0f, %37
-    %39:bool = eq %x_83, 2.0f
-    %40:f32 = select 1.0f, 0.0f, %39
-    %41:bool = eq %x_87, 3.0f
-    %42:f32 = select 1.0f, 0.0f, %41
-    %x_90:vec3<f32> = construct %38, %40, %42
-    %x_91:vec4<f32> = load %x_GLF_color
-    %45:f32 = access %x_90, 0u
-    %46:f32 = access %x_90, 1u
-    %47:f32 = access %x_90, 2u
-    %48:f32 = access %x_91, 3u
-    %49:vec4<f32> = construct %45, %46, %47, %48
-    store %x_GLF_color, %49
+    %45:f32 = load_vector_element %v, 0u
+    %x_79:f32 = let %45
+    %47:f32 = load_vector_element %v, 1u
+    %x_83:f32 = let %47
+    %49:f32 = load_vector_element %v, 2u
+    %x_87:f32 = let %49
+    %51:bool = eq %x_79, 1.0f
+    %52:f32 = select 0.0f, 1.0f, %51
+    %53:f32 = let %52
+    %54:bool = eq %x_83, 2.0f
+    %55:f32 = select 1.0f, 0.0f, %54
+    %56:f32 = let %55
+    %57:bool = eq %x_87, 3.0f
+    %58:f32 = select 1.0f, 0.0f, %57
+    %59:vec3<f32> = construct %53, %56, %58
+    %x_90:vec3<f32> = let %59
+    %61:vec4<f32> = load %x_GLF_color
+    %x_91:vec4<f32> = let %61
+    %63:f32 = access %x_90, 0u
+    %64:f32 = access %x_90, 1u
+    %65:f32 = access %x_90, 2u
+    %66:f32 = access %x_91, 3u
+    %67:vec4<f32> = construct %63, %64, %65, %66
+    store %x_GLF_color, %67
     store_vector_element %x_GLF_color, 3u, 1.0f
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b11 {
-  %b11 = block {
-    %51:void = call %main_1
-    %52:vec4<f32> = load %x_GLF_color
-    %53:main_out = construct %52
-    ret %53
+%tint_symbol = @fragment func():main_out {
+  $B11: {
+    %69:void = call %main_1
+    %70:vec4<f32> = load %x_GLF_color
+    %71:main_out = construct %70
+    ret %71
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-derivative-uniform-vector-global-loop-count/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-derivative-uniform-vector-global-loop-count/0-opt.spvasm.expected.ir.msl
index fcf1a62..c27e09f8 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-derivative-uniform-vector-global-loop-count/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-derivative-uniform-vector-global-loop-count/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -24,7 +24,7 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_global_loop_count:ptr<private, i32, read_write> = var
   %x_7:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_10:ptr<uniform, buf0, read> = var @binding_point(0, 0)
@@ -32,8 +32,8 @@
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %f:ptr<function, f32, read_write> = var
     %r:ptr<function, i32, read_write> = var
     store %x_GLF_global_loop_count, 0i
@@ -43,105 +43,110 @@
     %11:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
     %12:i32 = load %11
     store %r, %12
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %13:i32 = load %r
         %14:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
         %15:i32 = load %14
         %16:bool = lt %13, %15
-        if %16 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %16 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
         %17:i32 = load %x_GLF_global_loop_count
         %18:i32 = add %17, 1i
         store %x_GLF_global_loop_count, %18
-        %19:f32 = load %f
-        %20:ptr<uniform, vec2<f32>, read> = access %x_12, 0u
-        %21:vec2<f32> = load %20
-        %22:vec2<f32> = dpdx %21
-        %23:f32 = access %22, 1u
-        %24:f32 = add %19, %23
-        store %f, %24
-        continue %b4
+        %19:ptr<uniform, vec2<f32>, read> = access %x_12, 0u
+        %20:vec2<f32> = load %19
+        %x_57:vec2<f32> = let %20
+        %22:f32 = load %f
+        %x_60:f32 = let %22
+        %24:vec2<f32> = dpdx %x_57
+        %25:f32 = access %24, 1u
+        %26:f32 = add %x_60, %25
+        store %f, %26
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %25:i32 = load %r
-        %26:i32 = add %25, 1i
-        store %r, %26
-        next_iteration %b3
+      $B4: {  # continuing
+        %27:i32 = load %r
+        %28:i32 = add %27, 1i
+        store %r, %28
+        next_iteration  # -> $B3
       }
     }
-    loop [b: %b7, c: %b8] {  # loop_2
-      %b7 = block {  # body
-        %27:i32 = load %x_GLF_global_loop_count
-        %28:bool = lt %27, 100i
-        if %28 [t: %b9, f: %b10] {  # if_2
-          %b9 = block {  # true
+    loop [b: $B7, c: $B8] {  # loop_2
+      $B7: {  # body
+        %29:i32 = load %x_GLF_global_loop_count
+        %30:bool = lt %29, 100i
+        if %30 [t: $B9, f: $B10] {  # if_2
+          $B9: {  # true
             exit_if  # if_2
           }
-          %b10 = block {  # false
+          $B10: {  # false
             exit_loop  # loop_2
           }
         }
-        %29:i32 = load %x_GLF_global_loop_count
-        %30:i32 = add %29, 1i
-        store %x_GLF_global_loop_count, %30
-        %31:f32 = load %f
-        %32:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-        %33:f32 = load %32
-        %34:f32 = add %31, %33
-        store %f, %34
-        continue %b8
+        %31:i32 = load %x_GLF_global_loop_count
+        %32:i32 = add %31, 1i
+        store %x_GLF_global_loop_count, %32
+        %33:f32 = load %f
+        %34:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
+        %35:f32 = load %34
+        %36:f32 = add %33, %35
+        store %f, %36
+        continue  # -> $B8
       }
-      %b8 = block {  # continuing
-        next_iteration %b7
+      $B8: {  # continuing
+        next_iteration  # -> $B7
       }
     }
-    %35:f32 = load %f
-    %36:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
-    %37:f32 = load %36
-    %38:bool = eq %35, %37
-    if %38 [t: %b11, f: %b12] {  # if_3
-      %b11 = block {  # true
-        %39:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %40:i32 = load %39
-        %41:f32 = convert %40
-        %42:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %43:i32 = load %42
-        %44:f32 = convert %43
+    %37:f32 = load %f
+    %38:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
+    %39:f32 = load %38
+    %40:bool = eq %37, %39
+    if %40 [t: $B11, f: $B12] {  # if_3
+      $B11: {  # true
+        %41:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %42:i32 = load %41
+        %43:f32 = convert %42
+        %44:f32 = let %43
         %45:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
         %46:i32 = load %45
         %47:f32 = convert %46
-        %48:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %49:i32 = load %48
-        %50:f32 = convert %49
-        %51:vec4<f32> = construct %41, %44, %47, %50
-        store %x_GLF_color, %51
+        %48:f32 = let %47
+        %49:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %50:i32 = load %49
+        %51:f32 = convert %50
+        %52:f32 = let %51
+        %53:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %54:i32 = load %53
+        %55:f32 = convert %54
+        %56:vec4<f32> = construct %44, %48, %52, %55
+        store %x_GLF_color, %56
         exit_if  # if_3
       }
-      %b12 = block {  # false
-        %52:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %53:i32 = load %52
-        %54:f32 = convert %53
-        %55:vec4<f32> = construct %54
-        store %x_GLF_color, %55
+      $B12: {  # false
+        %57:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %58:i32 = load %57
+        %59:f32 = convert %58
+        %60:vec4<f32> = construct %59
+        store %x_GLF_color, %60
         exit_if  # if_3
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b13 {
-  %b13 = block {
-    %57:void = call %main_1
-    %58:vec4<f32> = load %x_GLF_color
-    %59:main_out = construct %58
-    ret %59
+%tint_symbol = @fragment func():main_out {
+  $B13: {
+    %62:void = call %main_1
+    %63:vec4<f32> = load %x_GLF_color
+    %64:main_out = construct %63
+    ret %64
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-derivative-uniform-vector-global-loop-count/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-derivative-uniform-vector-global-loop-count/0-opt.wgsl.expected.ir.msl
index b4968c5..8457771 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-derivative-uniform-vector-global-loop-count/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-derivative-uniform-vector-global-loop-count/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -24,7 +24,7 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_global_loop_count:ptr<private, i32, read_write> = var
   %x_7:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_10:ptr<uniform, buf0, read> = var @binding_point(0, 0)
@@ -32,116 +32,139 @@
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %f:ptr<function, f32, read_write> = var
     %r:ptr<function, i32, read_write> = var
     store %x_GLF_global_loop_count, 0i
     %9:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-    %x_42:f32 = load %9
+    %10:f32 = load %9
+    %x_42:f32 = let %10
     store %f, %x_42
-    %11:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-    %x_44:i32 = load %11
+    %12:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+    %13:i32 = load %12
+    %x_44:i32 = let %13
     store %r, %x_44
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_49:i32 = load %r
-        %14:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-        %x_51:i32 = load %14
-        %16:bool = lt %x_49, %x_51
-        if %16 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %15:i32 = load %r
+        %x_49:i32 = let %15
+        %17:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+        %18:i32 = load %17
+        %x_51:i32 = let %18
+        %20:bool = lt %x_49, %x_51
+        if %20 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_54:i32 = load %x_GLF_global_loop_count
-        %18:i32 = add %x_54, 1i
-        store %x_GLF_global_loop_count, %18
-        %19:ptr<uniform, vec2<f32>, read> = access %x_12, 0u
-        %x_57:vec2<f32> = load %19
-        %x_60:f32 = load %f
-        %22:vec2<f32> = dpdx %x_57
-        %23:f32 = access %22, 1u
-        %24:f32 = add %x_60, %23
-        store %f, %24
-        continue %b4
+        %21:i32 = load %x_GLF_global_loop_count
+        %x_54:i32 = let %21
+        %23:i32 = add %x_54, 1i
+        store %x_GLF_global_loop_count, %23
+        %24:ptr<uniform, vec2<f32>, read> = access %x_12, 0u
+        %25:vec2<f32> = load %24
+        %x_57:vec2<f32> = let %25
+        %27:f32 = load %f
+        %x_60:f32 = let %27
+        %29:vec2<f32> = dpdx %x_57
+        %30:f32 = access %29, 1u
+        %31:f32 = add %x_60, %30
+        store %f, %31
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_62:i32 = load %r
-        %26:i32 = add %x_62, 1i
-        store %r, %26
-        next_iteration %b3
+      $B4: {  # continuing
+        %32:i32 = load %r
+        %x_62:i32 = let %32
+        %34:i32 = add %x_62, 1i
+        store %r, %34
+        next_iteration  # -> $B3
       }
     }
-    loop [b: %b7, c: %b8] {  # loop_2
-      %b7 = block {  # body
-        %x_68:i32 = load %x_GLF_global_loop_count
-        %28:bool = lt %x_68, 100i
-        if %28 [t: %b9, f: %b10] {  # if_2
-          %b9 = block {  # true
+    loop [b: $B7, c: $B8] {  # loop_2
+      $B7: {  # body
+        %35:i32 = load %x_GLF_global_loop_count
+        %x_68:i32 = let %35
+        %37:bool = lt %x_68, 100i
+        if %37 [t: $B9, f: $B10] {  # if_2
+          $B9: {  # true
             exit_if  # if_2
           }
-          %b10 = block {  # false
+          $B10: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_71:i32 = load %x_GLF_global_loop_count
-        %30:i32 = add %x_71, 1i
-        store %x_GLF_global_loop_count, %30
-        %31:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-        %x_74:f32 = load %31
-        %x_75:f32 = load %f
-        %34:f32 = add %x_75, %x_74
-        store %f, %34
-        continue %b8
+        %38:i32 = load %x_GLF_global_loop_count
+        %x_71:i32 = let %38
+        %40:i32 = add %x_71, 1i
+        store %x_GLF_global_loop_count, %40
+        %41:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
+        %42:f32 = load %41
+        %x_74:f32 = let %42
+        %44:f32 = load %f
+        %x_75:f32 = let %44
+        %46:f32 = add %x_75, %x_74
+        store %f, %46
+        continue  # -> $B8
       }
-      %b8 = block {  # continuing
-        next_iteration %b7
+      $B8: {  # continuing
+        next_iteration  # -> $B7
       }
     }
-    %x_77:f32 = load %f
-    %36:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
-    %x_79:f32 = load %36
-    %38:bool = eq %x_77, %x_79
-    if %38 [t: %b11, f: %b12] {  # if_3
-      %b11 = block {  # true
-        %39:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %x_85:i32 = load %39
-        %41:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %x_88:i32 = load %41
-        %43:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %x_91:i32 = load %43
-        %45:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %x_94:i32 = load %45
-        %47:f32 = convert %x_85
-        %48:f32 = convert %x_88
-        %49:f32 = convert %x_91
-        %50:f32 = convert %x_94
-        %51:vec4<f32> = construct %47, %48, %49, %50
-        store %x_GLF_color, %51
+    %47:f32 = load %f
+    %x_77:f32 = let %47
+    %49:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
+    %50:f32 = load %49
+    %x_79:f32 = let %50
+    %52:bool = eq %x_77, %x_79
+    if %52 [t: $B11, f: $B12] {  # if_3
+      $B11: {  # true
+        %53:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %54:i32 = load %53
+        %x_85:i32 = let %54
+        %56:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %57:i32 = load %56
+        %x_88:i32 = let %57
+        %59:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %60:i32 = load %59
+        %x_91:i32 = let %60
+        %62:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %63:i32 = load %62
+        %x_94:i32 = let %63
+        %65:f32 = convert %x_85
+        %66:f32 = let %65
+        %67:f32 = convert %x_88
+        %68:f32 = let %67
+        %69:f32 = convert %x_91
+        %70:f32 = let %69
+        %71:f32 = convert %x_94
+        %72:vec4<f32> = construct %66, %68, %70, %71
+        store %x_GLF_color, %72
         exit_if  # if_3
       }
-      %b12 = block {  # false
-        %52:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %x_98:i32 = load %52
-        %x_99:f32 = convert %x_98
-        %55:vec4<f32> = construct %x_99, %x_99, %x_99, %x_99
-        store %x_GLF_color, %55
+      $B12: {  # false
+        %73:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %74:i32 = load %73
+        %x_98:i32 = let %74
+        %76:f32 = convert %x_98
+        %x_99:f32 = let %76
+        %78:vec4<f32> = construct %x_99, %x_99, %x_99, %x_99
+        store %x_GLF_color, %78
         exit_if  # if_3
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b13 {
-  %b13 = block {
-    %57:void = call %main_1
-    %58:vec4<f32> = load %x_GLF_color
-    %59:main_out = construct %58
-    ret %59
+%tint_symbol = @fragment func():main_out {
+  $B13: {
+    %80:void = call %main_1
+    %81:vec4<f32> = load %x_GLF_color
+    %82:main_out = construct %81
+    ret %82
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-descending-loop-min-max-always-zero/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-descending-loop-min-max-always-zero/0-opt.spvasm.expected.ir.msl
index adfcb43..d8b15a3 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-descending-loop-min-max-always-zero/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-descending-loop-min-max-always-zero/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,14 +20,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_9:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %f:ptr<function, f32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %a:ptr<function, f32, read_write> = var
@@ -37,17 +37,17 @@
     %10:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
     %11:i32 = load %10
     store %i, %11
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %12:i32 = load %i
         %13:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
         %14:i32 = load %13
         %15:bool = gt %12, %14
-        if %15 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %15 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
@@ -60,33 +60,35 @@
         %21:f32 = max %20, 0.0f
         %22:f32 = min %21, 0.0f
         store %f, %22
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
+      $B4: {  # continuing
         %23:i32 = load %i
         %24:i32 = sub %23, 1i
         store %i, %24
-        next_iteration %b3
+        next_iteration  # -> $B3
       }
     }
     %25:f32 = load %f
     %26:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
     %27:f32 = load %26
     %28:bool = eq %25, %27
-    if %28 [t: %b7, f: %b8] {  # if_2
-      %b7 = block {  # true
+    if %28 [t: $B7, f: $B8] {  # if_2
+      $B7: {  # true
         %29:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
         %30:i32 = load %29
         %31:f32 = convert %30
-        %32:f32 = load %f
-        %33:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %34:i32 = load %33
-        %35:f32 = convert %34
-        %36:vec4<f32> = construct %31, %32, %35, 1.0f
-        store %x_GLF_color, %36
+        %32:f32 = let %31
+        %33:f32 = load %f
+        %34:f32 = let %33
+        %35:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+        %36:i32 = load %35
+        %37:f32 = convert %36
+        %38:vec4<f32> = construct %32, %34, %37, 1.0f
+        store %x_GLF_color, %38
         exit_if  # if_2
       }
-      %b8 = block {  # false
+      $B8: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_2
       }
@@ -94,12 +96,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b9 {
-  %b9 = block {
-    %38:void = call %main_1
-    %39:vec4<f32> = load %x_GLF_color
-    %40:main_out = construct %39
-    ret %40
+%tint_symbol = @fragment func():main_out {
+  $B9: {
+    %40:void = call %main_1
+    %41:vec4<f32> = load %x_GLF_color
+    %42:main_out = construct %41
+    ret %42
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-descending-loop-min-max-always-zero/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-descending-loop-min-max-always-zero/0-opt.wgsl.expected.ir.msl
index d39b642..7ec7d9b 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-descending-loop-min-max-always-zero/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-descending-loop-min-max-always-zero/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,73 +20,86 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_9:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %f:ptr<function, f32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %a:ptr<function, f32, read_write> = var
     %8:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-    %x_37:f32 = load %8
+    %9:f32 = load %8
+    %x_37:f32 = let %9
     store %f, %x_37
-    %10:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-    %x_39:i32 = load %10
+    %11:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+    %12:i32 = load %11
+    %x_39:i32 = let %12
     store %i, %x_39
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_44:i32 = load %i
-        %13:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %x_46:i32 = load %13
-        %15:bool = gt %x_44, %x_46
-        if %15 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %14:i32 = load %i
+        %x_44:i32 = let %14
+        %16:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+        %17:i32 = load %16
+        %x_46:i32 = let %17
+        %19:bool = gt %x_44, %x_46
+        if %19 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_49:i32 = load %i
-        %17:f32 = convert %x_49
-        %18:f32 = max 1.0f, %17
-        %19:f32 = sub 1.0f, %18
-        store %a, %19
-        %x_53:f32 = load %a
-        %21:f32 = max %x_53, 0.0f
-        %22:f32 = min %21, 0.0f
-        store %f, %22
-        continue %b4
+        %20:i32 = load %i
+        %x_49:i32 = let %20
+        %22:f32 = convert %x_49
+        %23:f32 = max 1.0f, %22
+        %24:f32 = sub 1.0f, %23
+        store %a, %24
+        %25:f32 = load %a
+        %x_53:f32 = let %25
+        %27:f32 = max %x_53, 0.0f
+        %28:f32 = min %27, 0.0f
+        store %f, %28
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_56:i32 = load %i
-        %24:i32 = sub %x_56, 1i
-        store %i, %24
-        next_iteration %b3
+      $B4: {  # continuing
+        %29:i32 = load %i
+        %x_56:i32 = let %29
+        %31:i32 = sub %x_56, 1i
+        store %i, %31
+        next_iteration  # -> $B3
       }
     }
-    %x_58:f32 = load %f
-    %26:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_60:f32 = load %26
-    %28:bool = eq %x_58, %x_60
-    if %28 [t: %b7, f: %b8] {  # if_2
-      %b7 = block {  # true
-        %29:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
-        %x_66:i32 = load %29
-        %x_68:f32 = load %f
-        %32:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %x_70:i32 = load %32
-        %34:f32 = convert %x_66
-        %35:f32 = convert %x_70
-        %36:vec4<f32> = construct %34, %x_68, %35, 1.0f
-        store %x_GLF_color, %36
+    %32:f32 = load %f
+    %x_58:f32 = let %32
+    %34:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %35:f32 = load %34
+    %x_60:f32 = let %35
+    %37:bool = eq %x_58, %x_60
+    if %37 [t: $B7, f: $B8] {  # if_2
+      $B7: {  # true
+        %38:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
+        %39:i32 = load %38
+        %x_66:i32 = let %39
+        %41:f32 = load %f
+        %x_68:f32 = let %41
+        %43:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+        %44:i32 = load %43
+        %x_70:i32 = let %44
+        %46:f32 = convert %x_66
+        %47:f32 = let %46
+        %48:f32 = convert %x_70
+        %49:vec4<f32> = construct %47, %x_68, %48, 1.0f
+        store %x_GLF_color, %49
         exit_if  # if_2
       }
-      %b8 = block {  # false
+      $B8: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_2
       }
@@ -94,12 +107,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b9 {
-  %b9 = block {
-    %38:void = call %main_1
-    %39:vec4<f32> = load %x_GLF_color
-    %40:main_out = construct %39
-    ret %40
+%tint_symbol = @fragment func():main_out {
+  $B9: {
+    %51:void = call %main_1
+    %52:vec4<f32> = load %x_GLF_color
+    %53:main_out = construct %52
+    ret %53
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-divide-matrix-transpose-by-constant/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-divide-matrix-transpose-by-constant/0-opt.spvasm.expected.ir.msl
index efdd3b1..d638bb3 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-divide-matrix-transpose-by-constant/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-divide-matrix-transpose-by-constant/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,50 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+}
+
+%main_1 = func():void {
+  $B2: {
+    %m:ptr<function, mat2x2<f32>, read_write> = var
+    store %m, mat2x2<f32>(vec2<f32>(0.5f, 1.5f), vec2<f32>(1.0f, 2.0f))
+    %4:ptr<function, vec2<f32>, read_write> = access %m, 0u
+    %5:vec2<f32> = load %4
+    %6:vec2<bool> = eq %5, vec2<f32>(0.5f, 1.5f)
+    %7:bool = all %6
+    %8:bool = let %7
+    %9:ptr<function, vec2<f32>, read_write> = access %m, 1u
+    %10:vec2<f32> = load %9
+    %11:vec2<bool> = eq %10, vec2<f32>(1.0f, 2.0f)
+    %12:bool = all %11
+    %13:bool = and %8, %12
+    if %13 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        exit_if  # if_1
+      }
+      $B4: {  # false
+        store %x_GLF_color, vec4<f32>(0.0f)
+        exit_if  # if_1
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %15:void = call %main_1
+    %16:vec4<f32> = load %x_GLF_color
+    %17:main_out = construct %16
+    ret %17
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-divide-matrix-transpose-by-constant/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-divide-matrix-transpose-by-constant/0-opt.wgsl.expected.ir.msl
index efdd3b1..c18303b 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-divide-matrix-transpose-by-constant/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-divide-matrix-transpose-by-constant/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,50 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+}
+
+%main_1 = func():void {
+  $B2: {
+    %m:ptr<function, mat2x2<f32>, read_write> = var
+    store %m, mat2x2<f32>(vec2<f32>(0.5f, 1.5f), vec2<f32>(1.0f, 2.0f))
+    %4:mat2x2<f32> = load %m
+    %x_33:mat2x2<f32> = let %4
+    %6:vec2<f32> = access %x_33, 0u
+    %7:vec2<bool> = eq %6, vec2<f32>(0.5f, 1.5f)
+    %8:bool = all %7
+    %9:bool = let %8
+    %10:vec2<f32> = access %x_33, 1u
+    %11:vec2<bool> = eq %10, vec2<f32>(1.0f, 2.0f)
+    %12:bool = all %11
+    %13:bool = and %9, %12
+    if %13 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        exit_if  # if_1
+      }
+      $B4: {  # false
+        store %x_GLF_color, vec4<f32>(0.0f)
+        exit_if  # if_1
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %15:void = call %main_1
+    %16:vec4<f32> = load %x_GLF_color
+    %17:main_out = construct %16
+    ret %17
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-double-if-true-in-loop/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-double-if-true-in-loop/0-opt.spvasm.expected.ir.msl
index 7966c89..c3ed181 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-double-if-true-in-loop/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-double-if-true-in-loop/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,92 +12,100 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%func_ = func():i32 -> %b2 {
-  %b2 = block {
+%func_ = func():i32 {
+  $B2: {
     %i:ptr<function, i32, read_write> = var
     %5:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
     %6:i32 = load %5
     store %i, %6
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %7:i32 = load %i
         %8:i32 = add %7, 1i
         store %i, %8
-        if true [t: %b5] {  # if_1
-          %b5 = block {  # true
-            if true [t: %b6] {  # if_2
-              %b6 = block {  # true
+        if true [t: $B5] {  # if_1
+          $B5: {  # true
+            if true [t: $B6] {  # if_2
+              $B6: {  # true
                 %9:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
-                %x_65:i32 = load %9
+                %10:i32 = load %9
+                %x_65:i32 = let %10
                 ret %x_65
               }
             }
             exit_if  # if_1
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_66:i32 = load %i
-        %12:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %x_68:i32 = load %12
-        %14:bool = lt %x_66, %x_68
-        %15:bool = eq %14, false
-        break_if %15 %b3
+      $B4: {  # continuing
+        %12:i32 = load %i
+        %x_66:i32 = let %12
+        %14:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %15:i32 = load %14
+        %x_68:i32 = let %15
+        %17:bool = lt %x_66, %x_68
+        %18:bool = eq %17, false
+        break_if %18  # -> [t: exit_loop loop_1, f: $B3]
       }
     }
-    %16:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-    %x_71:i32 = load %16
+    %19:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+    %20:i32 = load %19
+    %x_71:i32 = let %20
     ret %x_71
   }
 }
-%main_1 = func():void -> %b7 {
-  %b7 = block {
-    %x_27:i32 = call %func_
-    %20:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
-    %21:i32 = load %20
-    %22:bool = eq %x_27, %21
-    if %22 [t: %b8, f: %b9] {  # if_3
-      %b8 = block {  # true
-        %23:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
-        %24:i32 = load %23
-        %25:f32 = convert %24
-        %26:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %27:i32 = load %26
-        %28:f32 = convert %27
-        %29:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %30:i32 = load %29
-        %31:f32 = convert %30
-        %32:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
+%main_1 = func():void {
+  $B7: {
+    %23:i32 = call %func_
+    %x_27:i32 = let %23
+    %25:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
+    %26:i32 = load %25
+    %27:bool = eq %x_27, %26
+    if %27 [t: $B8, f: $B9] {  # if_3
+      $B8: {  # true
+        %28:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
+        %29:i32 = load %28
+        %30:f32 = convert %29
+        %31:f32 = let %30
+        %32:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
         %33:i32 = load %32
         %34:f32 = convert %33
-        %35:vec4<f32> = construct %25, %28, %31, %34
-        store %x_GLF_color, %35
-        exit_if  # if_3
-      }
-      %b9 = block {  # false
+        %35:f32 = let %34
         %36:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
         %37:i32 = load %36
         %38:f32 = convert %37
-        %39:vec4<f32> = construct %38
-        store %x_GLF_color, %39
+        %39:f32 = let %38
+        %40:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
+        %41:i32 = load %40
+        %42:f32 = convert %41
+        %43:vec4<f32> = construct %31, %35, %39, %42
+        store %x_GLF_color, %43
+        exit_if  # if_3
+      }
+      $B9: {  # false
+        %44:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %45:i32 = load %44
+        %46:f32 = convert %45
+        %47:vec4<f32> = construct %46
+        store %x_GLF_color, %47
         exit_if  # if_3
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b10 {
-  %b10 = block {
-    %41:void = call %main_1
-    %42:vec4<f32> = load %x_GLF_color
-    %43:main_out = construct %42
-    ret %43
+%tint_symbol = @fragment func():main_out {
+  $B10: {
+    %49:void = call %main_1
+    %50:vec4<f32> = load %x_GLF_color
+    %51:main_out = construct %50
+    ret %51
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-double-if-true-in-loop/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-double-if-true-in-loop/0-opt.wgsl.expected.ir.msl
index 9cf45b3..784016f 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-double-if-true-in-loop/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-double-if-true-in-loop/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,92 +12,109 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%func_ = func():i32 -> %b2 {
-  %b2 = block {
+%func_ = func():i32 {
+  $B2: {
     %i:ptr<function, i32, read_write> = var
     %5:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-    %x_53:i32 = load %5
+    %6:i32 = load %5
+    %x_53:i32 = let %6
     store %i, %x_53
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_58:i32 = load %i
-        %8:i32 = add %x_58, 1i
-        store %i, %8
-        if true [t: %b5] {  # if_1
-          %b5 = block {  # true
-            if true [t: %b6] {  # if_2
-              %b6 = block {  # true
-                %9:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
-                %x_65:i32 = load %9
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %8:i32 = load %i
+        %x_58:i32 = let %8
+        %10:i32 = add %x_58, 1i
+        store %i, %10
+        if true [t: $B5] {  # if_1
+          $B5: {  # true
+            if true [t: $B6] {  # if_2
+              $B6: {  # true
+                %11:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
+                %12:i32 = load %11
+                %x_65:i32 = let %12
                 ret %x_65
               }
             }
             exit_if  # if_1
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_66:i32 = load %i
-        %12:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %x_68:i32 = load %12
-        %14:bool = lt %x_66, %x_68
-        %15:bool = eq %14, false
-        break_if %15 %b3
+      $B4: {  # continuing
+        %14:i32 = load %i
+        %x_66:i32 = let %14
+        %16:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %17:i32 = load %16
+        %x_68:i32 = let %17
+        %19:bool = lt %x_66, %x_68
+        %20:bool = eq %19, false
+        break_if %20  # -> [t: exit_loop loop_1, f: $B3]
       }
     }
-    %16:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-    %x_71:i32 = load %16
+    %21:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+    %22:i32 = load %21
+    %x_71:i32 = let %22
     ret %x_71
   }
 }
-%main_1 = func():void -> %b7 {
-  %b7 = block {
-    %x_27:i32 = call %func_
-    %20:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
-    %x_29:i32 = load %20
-    %22:bool = eq %x_27, %x_29
-    if %22 [t: %b8, f: %b9] {  # if_3
-      %b8 = block {  # true
-        %23:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
-        %x_35:i32 = load %23
-        %25:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %x_38:i32 = load %25
-        %27:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %x_41:i32 = load %27
-        %29:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
-        %x_44:i32 = load %29
-        %31:f32 = convert %x_35
-        %32:f32 = convert %x_38
-        %33:f32 = convert %x_41
-        %34:f32 = convert %x_44
-        %35:vec4<f32> = construct %31, %32, %33, %34
-        store %x_GLF_color, %35
+%main_1 = func():void {
+  $B7: {
+    %25:i32 = call %func_
+    %x_27:i32 = let %25
+    %27:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
+    %28:i32 = load %27
+    %x_29:i32 = let %28
+    %30:bool = eq %x_27, %x_29
+    if %30 [t: $B8, f: $B9] {  # if_3
+      $B8: {  # true
+        %31:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
+        %32:i32 = load %31
+        %x_35:i32 = let %32
+        %34:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %35:i32 = load %34
+        %x_38:i32 = let %35
+        %37:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %38:i32 = load %37
+        %x_41:i32 = let %38
+        %40:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
+        %41:i32 = load %40
+        %x_44:i32 = let %41
+        %43:f32 = convert %x_35
+        %44:f32 = let %43
+        %45:f32 = convert %x_38
+        %46:f32 = let %45
+        %47:f32 = convert %x_41
+        %48:f32 = let %47
+        %49:f32 = convert %x_44
+        %50:vec4<f32> = construct %44, %46, %48, %49
+        store %x_GLF_color, %50
         exit_if  # if_3
       }
-      %b9 = block {  # false
-        %36:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %x_48:i32 = load %36
-        %x_49:f32 = convert %x_48
-        %39:vec4<f32> = construct %x_49, %x_49, %x_49, %x_49
-        store %x_GLF_color, %39
+      $B9: {  # false
+        %51:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %52:i32 = load %51
+        %x_48:i32 = let %52
+        %54:f32 = convert %x_48
+        %x_49:f32 = let %54
+        %56:vec4<f32> = construct %x_49, %x_49, %x_49, %x_49
+        store %x_GLF_color, %56
         exit_if  # if_3
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b10 {
-  %b10 = block {
-    %41:void = call %main_1
-    %42:vec4<f32> = load %x_GLF_color
-    %43:main_out = construct %42
-    ret %43
+%tint_symbol = @fragment func():main_out {
+  $B10: {
+    %58:void = call %main_1
+    %59:vec4<f32> = load %x_GLF_color
+    %60:main_out = construct %59
+    ret %60
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-empty-loop-minus-one-modulo-variable-one/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-empty-loop-minus-one-modulo-variable-one/0-opt.spvasm.expected.ir.msl
index 209f879..6443320 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-empty-loop-minus-one-modulo-variable-one/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-empty-loop-minus-one-modulo-variable-one/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,13 +12,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %arr:ptr<function, array<i32, 10>, read_write> = var
     %a:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
@@ -29,32 +29,32 @@
     %9:ptr<function, i32, read_write> = access %arr, %8
     %10:i32 = load %9
     %11:bool = eq %10, 2i
-    if %11 [t: %b3] {  # if_1
-      %b3 = block {  # true
+    if %11 [t: $B3] {  # if_1
+      $B3: {  # true
         %12:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
         %13:i32 = load %12
         store %i, %13
-        loop [b: %b4, c: %b5] {  # loop_1
-          %b4 = block {  # body
+        loop [b: $B4, c: $B5] {  # loop_1
+          $B4: {  # body
             %14:i32 = load %i
             %15:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
             %16:i32 = load %15
             %17:bool = lt %14, %16
-            if %17 [t: %b6, f: %b7] {  # if_2
-              %b6 = block {  # true
+            if %17 [t: $B6, f: $B7] {  # if_2
+              $B6: {  # true
                 exit_if  # if_2
               }
-              %b7 = block {  # false
+              $B7: {  # false
                 exit_loop  # loop_1
               }
             }
-            continue %b5
+            continue  # -> $B5
           }
-          %b5 = block {  # continuing
+          $B5: {  # continuing
             %18:i32 = load %i
             %19:i32 = add %18, 1i
             store %i, %19
-            next_iteration %b4
+            next_iteration  # -> $B4
           }
         }
         %20:i32 = load %a
@@ -64,66 +64,85 @@
       }
     }
     %22:i32 = load %a
-    %23:i32 = mod -1i, %22
-    %24:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
-    %25:i32 = load %24
-    %26:bool = eq %23, %25
-    if %26 [t: %b8] {  # if_3
-      %b8 = block {  # true
-        %27:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %x_71:i32 = load %27
-        %29:vec2<i32> = construct %x_71
-        %30:i32 = access %29, 1u
-        %31:ptr<function, i32, read_write> = access %arr, %30
-        %32:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
-        %33:i32 = load %32
-        store %31, %33
+    %23:i32 = call %tint_mod_i32, -1i, %22
+    %25:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
+    %26:i32 = load %25
+    %27:bool = eq %23, %26
+    if %27 [t: $B8] {  # if_3
+      $B8: {  # true
+        %28:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %29:i32 = load %28
+        %x_71:i32 = let %29
+        %31:vec2<i32> = construct %x_71
+        %32:i32 = access %31, 1u
+        %33:ptr<function, i32, read_write> = access %arr, %32
+        %34:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
+        %35:i32 = load %34
+        store %33, %35
         exit_if  # if_3
       }
     }
-    %34:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-    %35:i32 = load %34
-    %36:ptr<function, i32, read_write> = access %arr, %35
+    %36:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
     %37:i32 = load %36
-    %38:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
+    %38:ptr<function, i32, read_write> = access %arr, %37
     %39:i32 = load %38
-    %40:bool = eq %37, %39
-    if %40 [t: %b9, f: %b10] {  # if_4
-      %b9 = block {  # true
-        %41:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %42:i32 = load %41
-        %43:f32 = convert %42
-        %44:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
-        %45:i32 = load %44
-        %46:f32 = convert %45
+    %40:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
+    %41:i32 = load %40
+    %42:bool = eq %39, %41
+    if %42 [t: $B9, f: $B10] {  # if_4
+      $B9: {  # true
+        %43:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %44:i32 = load %43
+        %45:f32 = convert %44
+        %46:f32 = let %45
         %47:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
         %48:i32 = load %47
         %49:f32 = convert %48
-        %50:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %51:i32 = load %50
-        %52:f32 = convert %51
-        %53:vec4<f32> = construct %43, %46, %49, %52
-        store %x_GLF_color, %53
+        %50:f32 = let %49
+        %51:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
+        %52:i32 = load %51
+        %53:f32 = convert %52
+        %54:f32 = let %53
+        %55:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %56:i32 = load %55
+        %57:f32 = convert %56
+        %58:vec4<f32> = construct %46, %50, %54, %57
+        store %x_GLF_color, %58
         exit_if  # if_4
       }
-      %b10 = block {  # false
-        %54:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
-        %55:i32 = load %54
-        %56:f32 = convert %55
-        %57:vec4<f32> = construct %56
-        store %x_GLF_color, %57
+      $B10: {  # false
+        %59:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
+        %60:i32 = load %59
+        %61:f32 = convert %60
+        %62:vec4<f32> = construct %61
+        store %x_GLF_color, %62
         exit_if  # if_4
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b11 {
-  %b11 = block {
-    %59:void = call %main_1
-    %60:vec4<f32> = load %x_GLF_color
-    %61:main_out = construct %60
-    ret %61
+%tint_symbol = @fragment func():main_out {
+  $B11: {
+    %64:void = call %main_1
+    %65:vec4<f32> = load %x_GLF_color
+    %66:main_out = construct %65
+    ret %66
+  }
+}
+%tint_mod_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B12: {
+    %69:bool = eq %rhs, 0i
+    %70:bool = eq %lhs, -2147483648i
+    %71:bool = eq %rhs, -1i
+    %72:bool = and %70, %71
+    %73:bool = or %69, %72
+    %74:i32 = select %rhs, 1i, %73
+    %75:i32 = let %74
+    %76:i32 = div %lhs, %75
+    %77:i32 = mul %76, %75
+    %78:i32 = sub %lhs, %77
+    ret %78
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-empty-loop-minus-one-modulo-variable-one/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-empty-loop-minus-one-modulo-variable-one/0-opt.wgsl.expected.ir.msl
index a84e711..510c0bb 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-empty-loop-minus-one-modulo-variable-one/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-empty-loop-minus-one-modulo-variable-one/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,118 +12,156 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %arr:ptr<function, array<i32, 10>, read_write> = var
     %a:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     store %arr, array<i32, 10>(1i, 2i, 3i, 4i, 5i, 6i, 7i, 8i, 9i, 10i)
     store %a, 0i
     %7:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-    %x_42:i32 = load %7
-    %9:ptr<function, i32, read_write> = access %arr, %x_42
-    %x_44:i32 = load %9
-    %11:bool = eq %x_44, 2i
-    if %11 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %12:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
-        %x_49:i32 = load %12
+    %8:i32 = load %7
+    %x_42:i32 = let %8
+    %10:ptr<function, i32, read_write> = access %arr, %x_42
+    %11:i32 = load %10
+    %x_44:i32 = let %11
+    %13:bool = eq %x_44, 2i
+    if %13 [t: $B3] {  # if_1
+      $B3: {  # true
+        %14:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
+        %15:i32 = load %14
+        %x_49:i32 = let %15
         store %i, %x_49
-        loop [b: %b4, c: %b5] {  # loop_1
-          %b4 = block {  # body
-            %x_54:i32 = load %i
-            %15:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-            %x_56:i32 = load %15
-            %17:bool = lt %x_54, %x_56
-            if %17 [t: %b6, f: %b7] {  # if_2
-              %b6 = block {  # true
+        loop [b: $B4, c: $B5] {  # loop_1
+          $B4: {  # body
+            %17:i32 = load %i
+            %x_54:i32 = let %17
+            %19:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+            %20:i32 = load %19
+            %x_56:i32 = let %20
+            %22:bool = lt %x_54, %x_56
+            if %22 [t: $B6, f: $B7] {  # if_2
+              $B6: {  # true
                 exit_if  # if_2
               }
-              %b7 = block {  # false
+              $B7: {  # false
                 exit_loop  # loop_1
               }
             }
-            continue %b5
+            continue  # -> $B5
           }
-          %b5 = block {  # continuing
-            %x_59:i32 = load %i
-            %19:i32 = add %x_59, 1i
-            store %i, %19
-            next_iteration %b4
+          $B5: {  # continuing
+            %23:i32 = load %i
+            %x_59:i32 = let %23
+            %25:i32 = add %x_59, 1i
+            store %i, %25
+            next_iteration  # -> $B4
           }
         }
-        %x_61:i32 = load %a
-        %21:i32 = add %x_61, 1i
-        store %a, %21
+        %26:i32 = load %a
+        %x_61:i32 = let %26
+        %28:i32 = add %x_61, 1i
+        store %a, %28
         exit_if  # if_1
       }
     }
-    %x_63:i32 = load %a
-    %23:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
-    %x_66:i32 = load %23
-    %25:i32 = mod -1i, %x_63
-    %26:bool = eq %25, %x_66
-    if %26 [t: %b8] {  # if_3
-      %b8 = block {  # true
-        %27:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %x_71:i32 = load %27
-        %29:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
-        %x_75:i32 = load %29
-        %31:vec2<i32> = construct %x_71, %x_71
-        %32:i32 = access %31, 1u
-        %33:ptr<function, i32, read_write> = access %arr, %32
-        store %33, %x_75
+    %29:i32 = load %a
+    %x_63:i32 = let %29
+    %31:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
+    %32:i32 = load %31
+    %x_66:i32 = let %32
+    %34:i32 = call %tint_mod_i32, -1i, %x_63
+    %36:bool = eq %34, %x_66
+    if %36 [t: $B8] {  # if_3
+      $B8: {  # true
+        %37:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %38:i32 = load %37
+        %x_71:i32 = let %38
+        %40:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
+        %41:i32 = load %40
+        %x_75:i32 = let %41
+        %43:vec2<i32> = construct %x_71, %x_71
+        %44:i32 = access %43, 1u
+        %45:ptr<function, i32, read_write> = access %arr, %44
+        store %45, %x_75
         exit_if  # if_3
       }
     }
-    %34:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-    %x_78:i32 = load %34
-    %36:ptr<function, i32, read_write> = access %arr, %x_78
-    %x_80:i32 = load %36
-    %38:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
-    %x_82:i32 = load %38
-    %40:bool = eq %x_80, %x_82
-    if %40 [t: %b9, f: %b10] {  # if_4
-      %b9 = block {  # true
-        %41:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %x_88:i32 = load %41
-        %43:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
-        %x_91:i32 = load %43
-        %45:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
-        %x_94:i32 = load %45
-        %47:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %x_97:i32 = load %47
-        %49:f32 = convert %x_88
-        %50:f32 = convert %x_91
-        %51:f32 = convert %x_94
-        %52:f32 = convert %x_97
-        %53:vec4<f32> = construct %49, %50, %51, %52
-        store %x_GLF_color, %53
+    %46:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+    %47:i32 = load %46
+    %x_78:i32 = let %47
+    %49:ptr<function, i32, read_write> = access %arr, %x_78
+    %50:i32 = load %49
+    %x_80:i32 = let %50
+    %52:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
+    %53:i32 = load %52
+    %x_82:i32 = let %53
+    %55:bool = eq %x_80, %x_82
+    if %55 [t: $B9, f: $B10] {  # if_4
+      $B9: {  # true
+        %56:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %57:i32 = load %56
+        %x_88:i32 = let %57
+        %59:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
+        %60:i32 = load %59
+        %x_91:i32 = let %60
+        %62:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
+        %63:i32 = load %62
+        %x_94:i32 = let %63
+        %65:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %66:i32 = load %65
+        %x_97:i32 = let %66
+        %68:f32 = convert %x_88
+        %69:f32 = let %68
+        %70:f32 = convert %x_91
+        %71:f32 = let %70
+        %72:f32 = convert %x_94
+        %73:f32 = let %72
+        %74:f32 = convert %x_97
+        %75:vec4<f32> = construct %69, %71, %73, %74
+        store %x_GLF_color, %75
         exit_if  # if_4
       }
-      %b10 = block {  # false
-        %54:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
-        %x_101:i32 = load %54
-        %x_102:f32 = convert %x_101
-        %57:vec4<f32> = construct %x_102, %x_102, %x_102, %x_102
-        store %x_GLF_color, %57
+      $B10: {  # false
+        %76:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
+        %77:i32 = load %76
+        %x_101:i32 = let %77
+        %79:f32 = convert %x_101
+        %x_102:f32 = let %79
+        %81:vec4<f32> = construct %x_102, %x_102, %x_102, %x_102
+        store %x_GLF_color, %81
         exit_if  # if_4
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b11 {
-  %b11 = block {
-    %59:void = call %main_1
-    %60:vec4<f32> = load %x_GLF_color
-    %61:main_out = construct %60
-    ret %61
+%tint_symbol = @fragment func():main_out {
+  $B11: {
+    %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 {
+  $B12: {
+    %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
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-exp2-two/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-exp2-two/0-opt.spvasm.expected.ir.msl
index efdd3b1..9e5eeef 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-exp2-two/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-exp2-two/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,43 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+}
+
+%main_1 = func():void {
+  $B2: {
+    %f:ptr<function, f32, read_write> = var
+    store %f, 2.0f
+    %4:f32 = load %f
+    %5:f32 = exp2 %4
+    %6:bool = eq %5, 4.0f
+    if %6 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        exit_if  # if_1
+      }
+      $B4: {  # false
+        store %x_GLF_color, vec4<f32>(0.0f)
+        exit_if  # if_1
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %8:void = call %main_1
+    %9:vec4<f32> = load %x_GLF_color
+    %10:main_out = construct %9
+    ret %10
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-exp2-two/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-exp2-two/0-opt.wgsl.expected.ir.msl
index efdd3b1..6450660 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-exp2-two/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-exp2-two/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,44 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+}
+
+%main_1 = func():void {
+  $B2: {
+    %f:ptr<function, f32, read_write> = var
+    store %f, 2.0f
+    %4:f32 = load %f
+    %x_19:f32 = let %4
+    %6:f32 = exp2 %x_19
+    %7:bool = eq %6, 4.0f
+    if %7 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        exit_if  # if_1
+      }
+      $B4: {  # false
+        store %x_GLF_color, vec4<f32>(0.0f)
+        exit_if  # if_1
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %9:void = call %main_1
+    %10:vec4<f32> = load %x_GLF_color
+    %11:main_out = construct %10
+    ret %11
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-float-array-init-pow/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-float-array-init-pow/0-opt.spvasm.expected.ir.msl
index 8bfce5a..c263fb7 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-float-array-init-pow/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-float-array-init-pow/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,85 +20,105 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_7:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_9:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %f:ptr<function, f32, read_write> = var
     %arr:ptr<function, array<f32, 10>, read_write> = var
     store %f, 2.0f
     %7:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
     %8:f32 = load %7
-    %9:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-    %10:f32 = load %9
-    %11:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-    %12:f32 = load %11
+    %9:f32 = let %8
+    %10:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
+    %11:f32 = load %10
+    %12:f32 = let %11
     %13:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
     %14:f32 = load %13
-    %15:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-    %16:f32 = load %15
-    %17:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-    %18:f32 = load %17
+    %15:f32 = let %14
+    %16:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
+    %17:f32 = load %16
+    %18:f32 = let %17
     %19:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
     %20:f32 = load %19
-    %21:f32 = load %f
-    %22:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
+    %21:f32 = let %20
+    %22:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
     %23:f32 = load %22
-    %24:f32 = pow %21, %23
+    %24:f32 = let %23
     %25:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
     %26:f32 = load %25
-    %27:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-    %28:f32 = load %27
-    %29:array<f32, 10> = construct %8, %10, %12, %14, %16, %18, %20, %24, %26, %28
-    store %arr, %29
-    %30:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-    %31:i32 = load %30
-    %32:ptr<function, f32, read_write> = access %arr, %31
+    %27:f32 = let %26
+    %28:f32 = load %f
+    %29:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
+    %30:f32 = load %29
+    %31:f32 = pow %28, %30
+    %32:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
     %33:f32 = load %32
-    %34:i32 = convert %33
-    %35:ptr<uniform, i32, read> = access %x_9, 0u, 3i, 0u
-    %36:i32 = load %35
-    %37:bool = eq %34, %36
-    if %37 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %38:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %39:i32 = load %38
-        %40:f32 = convert %39
-        %41:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
-        %42:i32 = load %41
-        %43:f32 = convert %42
-        %44:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
-        %45:i32 = load %44
-        %46:f32 = convert %45
-        %47:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %48:i32 = load %47
-        %49:f32 = convert %48
-        %50:vec4<f32> = construct %40, %43, %46, %49
-        store %x_GLF_color, %50
+    %34:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
+    %35:f32 = load %34
+    %36:array<f32, 10> = construct %9, %12, %15, %18, %21, %24, %27, %31, %33, %35
+    store %arr, %36
+    %37:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+    %38:i32 = load %37
+    %39:ptr<function, f32, read_write> = access %arr, %38
+    %40:f32 = load %39
+    %41:i32 = call %tint_f32_to_i32, %40
+    %43:ptr<uniform, i32, read> = access %x_9, 0u, 3i, 0u
+    %44:i32 = load %43
+    %45:bool = eq %41, %44
+    if %45 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %46:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %47:i32 = load %46
+        %48:f32 = convert %47
+        %49:f32 = let %48
+        %50:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
+        %51:i32 = load %50
+        %52:f32 = convert %51
+        %53:f32 = let %52
+        %54:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
+        %55:i32 = load %54
+        %56:f32 = convert %55
+        %57:f32 = let %56
+        %58:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %59:i32 = load %58
+        %60:f32 = convert %59
+        %61:vec4<f32> = construct %49, %53, %57, %60
+        store %x_GLF_color, %61
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %51:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
-        %52:i32 = load %51
-        %53:f32 = convert %52
-        %54:vec4<f32> = construct %53
-        store %x_GLF_color, %54
+      $B4: {  # false
+        %62:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
+        %63:i32 = load %62
+        %64:f32 = convert %63
+        %65:vec4<f32> = construct %64
+        store %x_GLF_color, %65
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %56:void = call %main_1
-    %57:vec4<f32> = load %x_GLF_color
-    %58:main_out = construct %57
-    ret %58
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %67:void = call %main_1
+    %68:vec4<f32> = load %x_GLF_color
+    %69:main_out = construct %68
+    ret %69
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B6: {
+    %71:i32 = convert %value
+    %72:bool = gte %value, -2147483648.0f
+    %73:i32 = select -2147483648i, %71, %72
+    %74:bool = lte %value, 2147483520.0f
+    %75:i32 = select 2147483647i, %73, %74
+    ret %75
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-float-array-init-pow/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-float-array-init-pow/0-opt.wgsl.expected.ir.msl
index b6c14ef..aab0055 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-float-array-init-pow/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-float-array-init-pow/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,85 +20,118 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_7:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_9:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %f:ptr<function, f32, read_write> = var
     %arr:ptr<function, array<f32, 10>, read_write> = var
     store %f, 2.0f
     %7:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-    %x_37:f32 = load %7
-    %9:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-    %x_39:f32 = load %9
-    %11:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-    %x_41:f32 = load %11
+    %8:f32 = load %7
+    %x_37:f32 = let %8
+    %10:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
+    %11:f32 = load %10
+    %x_39:f32 = let %11
     %13:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-    %x_43:f32 = load %13
-    %15:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-    %x_45:f32 = load %15
-    %17:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-    %x_47:f32 = load %17
+    %14:f32 = load %13
+    %x_41:f32 = let %14
+    %16:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
+    %17:f32 = load %16
+    %x_43:f32 = let %17
     %19:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-    %x_49:f32 = load %19
-    %x_50:f32 = load %f
-    %22:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
-    %x_52:f32 = load %22
-    %24:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-    %x_55:f32 = load %24
-    %26:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-    %x_57:f32 = load %26
-    %28:f32 = pow %x_50, %x_52
-    %29:array<f32, 10> = construct %x_37, %x_39, %x_41, %x_43, %x_45, %x_47, %x_49, %28, %x_55, %x_57
-    store %arr, %29
-    %30:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-    %x_60:i32 = load %30
-    %32:ptr<function, f32, read_write> = access %arr, %x_60
-    %x_62:f32 = load %32
-    %34:ptr<uniform, i32, read> = access %x_9, 0u, 3i, 0u
-    %x_65:i32 = load %34
-    %36:i32 = convert %x_62
-    %37:bool = eq %36, %x_65
-    if %37 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %38:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %x_71:i32 = load %38
-        %40:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
-        %x_74:i32 = load %40
-        %42:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
-        %x_77:i32 = load %42
-        %44:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %x_80:i32 = load %44
-        %46:f32 = convert %x_71
-        %47:f32 = convert %x_74
-        %48:f32 = convert %x_77
-        %49:f32 = convert %x_80
-        %50:vec4<f32> = construct %46, %47, %48, %49
-        store %x_GLF_color, %50
+    %20:f32 = load %19
+    %x_45:f32 = let %20
+    %22:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
+    %23:f32 = load %22
+    %x_47:f32 = let %23
+    %25:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
+    %26:f32 = load %25
+    %x_49:f32 = let %26
+    %28:f32 = load %f
+    %x_50:f32 = let %28
+    %30:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
+    %31:f32 = load %30
+    %x_52:f32 = let %31
+    %33:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
+    %34:f32 = load %33
+    %x_55:f32 = let %34
+    %36:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
+    %37:f32 = load %36
+    %x_57:f32 = let %37
+    %39:f32 = pow %x_50, %x_52
+    %40:array<f32, 10> = construct %x_37, %x_39, %x_41, %x_43, %x_45, %x_47, %x_49, %39, %x_55, %x_57
+    store %arr, %40
+    %41:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+    %42:i32 = load %41
+    %x_60:i32 = let %42
+    %44:ptr<function, f32, read_write> = access %arr, %x_60
+    %45:f32 = load %44
+    %x_62:f32 = let %45
+    %47:ptr<uniform, i32, read> = access %x_9, 0u, 3i, 0u
+    %48:i32 = load %47
+    %x_65:i32 = let %48
+    %50:i32 = call %tint_f32_to_i32, %x_62
+    %52:bool = eq %50, %x_65
+    if %52 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %53:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %54:i32 = load %53
+        %x_71:i32 = let %54
+        %56:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
+        %57:i32 = load %56
+        %x_74:i32 = let %57
+        %59:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
+        %60:i32 = load %59
+        %x_77:i32 = let %60
+        %62:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %63:i32 = load %62
+        %x_80:i32 = let %63
+        %65:f32 = convert %x_71
+        %66:f32 = let %65
+        %67:f32 = convert %x_74
+        %68:f32 = let %67
+        %69:f32 = convert %x_77
+        %70:f32 = let %69
+        %71:f32 = convert %x_80
+        %72:vec4<f32> = construct %66, %68, %70, %71
+        store %x_GLF_color, %72
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %51:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
-        %x_84:i32 = load %51
-        %x_85:f32 = convert %x_84
-        %54:vec4<f32> = construct %x_85, %x_85, %x_85, %x_85
-        store %x_GLF_color, %54
+      $B4: {  # false
+        %73:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
+        %74:i32 = load %73
+        %x_84:i32 = let %74
+        %76:f32 = convert %x_84
+        %x_85:f32 = let %76
+        %78:vec4<f32> = construct %x_85, %x_85, %x_85, %x_85
+        store %x_GLF_color, %78
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %56:void = call %main_1
-    %57:vec4<f32> = load %x_GLF_color
-    %58:main_out = construct %57
-    ret %58
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %80:void = call %main_1
+    %81:vec4<f32> = load %x_GLF_color
+    %82:main_out = construct %81
+    ret %82
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B6: {
+    %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
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-and-in-for-loop-range/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-and-in-for-loop-range/0-opt.spvasm.expected.ir.msl
index 89893bb..228b688 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-and-in-for-loop-range/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-and-in-for-loop-range/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:i32 @offset(0)
 }
 
@@ -8,59 +8,61 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_8:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%func_ = func():i32 -> %b2 {
-  %b2 = block {
+%func_ = func():i32 {
+  $B2: {
     %ret:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     store %ret, 0i
     store %i, 3i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %6:i32 = load %i
         %7:i32 = load %i
         %8:i32 = and %7, 1i
         %9:bool = gt %6, %8
-        if %9 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %9 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
         %10:i32 = load %ret
         %11:i32 = add %10, 1i
         store %ret, %11
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
+      $B4: {  # continuing
         %12:i32 = load %i
         %13:ptr<uniform, i32, read> = access %x_8, 0u
         %14:i32 = load %13
         %15:i32 = sub %12, %14
         store %i, %15
-        next_iteration %b3
+        next_iteration  # -> $B3
       }
     }
-    %x_50:i32 = load %ret
+    %16:i32 = load %ret
+    %x_50:i32 = let %16
     ret %x_50
   }
 }
-%main_1 = func():void -> %b7 {
-  %b7 = block {
-    %x_29:i32 = call %func_
-    %19:bool = eq %x_29, 2i
-    if %19 [t: %b8, f: %b9] {  # if_2
-      %b8 = block {  # true
+%main_1 = func():void {
+  $B7: {
+    %19:i32 = call %func_
+    %x_29:i32 = let %19
+    %21:bool = eq %x_29, 2i
+    if %21 [t: $B8, f: $B9] {  # if_2
+      $B8: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_2
       }
-      %b9 = block {  # false
+      $B9: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_2
       }
@@ -68,12 +70,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b10 {
-  %b10 = block {
-    %21:void = call %main_1
-    %22:vec4<f32> = load %x_GLF_color
-    %23:main_out = construct %22
-    ret %23
+%tint_symbol = @fragment func():main_out {
+  $B10: {
+    %23:void = call %main_1
+    %24:vec4<f32> = load %x_GLF_color
+    %25:main_out = construct %24
+    ret %25
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-and-in-for-loop-range/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-and-in-for-loop-range/0-opt.wgsl.expected.ir.msl
index e88ec34..5778cc5 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-and-in-for-loop-range/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-and-in-for-loop-range/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:i32 @offset(0)
 }
 
@@ -8,59 +8,66 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_8:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%func_ = func():i32 -> %b2 {
-  %b2 = block {
+%func_ = func():i32 {
+  $B2: {
     %ret:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     store %ret, 0i
     store %i, 3i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_39:i32 = load %i
-        %x_40:i32 = load %i
-        %8:i32 = and %x_40, 1i
-        %9:bool = gt %x_39, %8
-        if %9 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %6:i32 = load %i
+        %x_39:i32 = let %6
+        %8:i32 = load %i
+        %x_40:i32 = let %8
+        %10:i32 = and %x_40, 1i
+        %11:bool = gt %x_39, %10
+        if %11 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_44:i32 = load %ret
-        %11:i32 = add %x_44, 1i
-        store %ret, %11
-        continue %b4
+        %12:i32 = load %ret
+        %x_44:i32 = let %12
+        %14:i32 = add %x_44, 1i
+        store %ret, %14
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %12:ptr<uniform, i32, read> = access %x_8, 0u
-        %x_47:i32 = load %12
-        %x_48:i32 = load %i
-        %15:i32 = sub %x_48, %x_47
-        store %i, %15
-        next_iteration %b3
+      $B4: {  # continuing
+        %15:ptr<uniform, i32, read> = access %x_8, 0u
+        %16:i32 = load %15
+        %x_47:i32 = let %16
+        %18:i32 = load %i
+        %x_48:i32 = let %18
+        %20:i32 = sub %x_48, %x_47
+        store %i, %20
+        next_iteration  # -> $B3
       }
     }
-    %x_50:i32 = load %ret
+    %21:i32 = load %ret
+    %x_50:i32 = let %21
     ret %x_50
   }
 }
-%main_1 = func():void -> %b7 {
-  %b7 = block {
-    %x_29:i32 = call %func_
-    %19:bool = eq %x_29, 2i
-    if %19 [t: %b8, f: %b9] {  # if_2
-      %b8 = block {  # true
+%main_1 = func():void {
+  $B7: {
+    %24:i32 = call %func_
+    %x_29:i32 = let %24
+    %26:bool = eq %x_29, 2i
+    if %26 [t: $B8, f: $B9] {  # if_2
+      $B8: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_2
       }
-      %b9 = block {  # false
+      $B9: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_2
       }
@@ -68,12 +75,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b10 {
-  %b10 = block {
-    %21:void = call %main_1
-    %22:vec4<f32> = load %x_GLF_color
-    %23:main_out = construct %22
-    ret %23
+%tint_symbol = @fragment func():main_out {
+  $B10: {
+    %28:void = call %main_1
+    %29:vec4<f32> = load %x_GLF_color
+    %30:main_out = construct %29
+    ret %30
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-and-zero/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-and-zero/0.spvasm.expected.ir.msl
index db599b6..df7be41 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-and-zero/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-and-zero/0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:i32 @offset(0)
 }
 
@@ -8,23 +8,23 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %4:ptr<uniform, i32, read> = access %x_5, 0u
     %5:i32 = load %4
     %6:i32 = and %5, 0i
     %7:bool = eq %6, 0i
-    if %7 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    if %7 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
@@ -32,8 +32,8 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
+%tint_symbol = @fragment func():main_out {
+  $B5: {
     %9:void = call %main_1
     %10:vec4<f32> = load %x_GLF_color
     %11:main_out = construct %10
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-and-zero/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-and-zero/0.wgsl.expected.ir.msl
index b075b62..e3ebc6f 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-and-zero/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-and-zero/0.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:i32 @offset(0)
 }
 
@@ -8,23 +8,24 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %4:ptr<uniform, i32, read> = access %x_5, 0u
-    %x_22:i32 = load %4
-    %6:i32 = and %x_22, 0i
-    %7:bool = eq %6, 0i
-    if %7 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    %5:i32 = load %4
+    %x_22:i32 = let %5
+    %7:i32 = and %x_22, 0i
+    %8:bool = eq %7, 0i
+    if %8 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
@@ -32,12 +33,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %9:void = call %main_1
-    %10:vec4<f32> = load %x_GLF_color
-    %11:main_out = construct %10
-    ret %11
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %10:void = call %main_1
+    %11:vec4<f32> = load %x_GLF_color
+    %12:main_out = construct %11
+    ret %12
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-or-full-mask/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-or-full-mask/0.spvasm.expected.ir.msl
index 6b9d2b1..01a723f 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-or-full-mask/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-or-full-mask/0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:i32 @offset(0)
 }
 
@@ -8,23 +8,23 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %4:ptr<uniform, i32, read> = access %x_5, 0u
     %5:i32 = load %4
     %6:i32 = or -1i, %5
     %7:bool = eq %6, -1i
-    if %7 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    if %7 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
@@ -32,8 +32,8 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
+%tint_symbol = @fragment func():main_out {
+  $B5: {
     %9:void = call %main_1
     %10:vec4<f32> = load %x_GLF_color
     %11:main_out = construct %10
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-or-full-mask/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-or-full-mask/0.wgsl.expected.ir.msl
index e391db6..15a57e1 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-or-full-mask/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-or-full-mask/0.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:i32 @offset(0)
 }
 
@@ -8,23 +8,24 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %4:ptr<uniform, i32, read> = access %x_5, 0u
-    %x_23:i32 = load %4
-    %6:i32 = or -1i, %x_23
-    %7:bool = eq %6, -1i
-    if %7 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    %5:i32 = load %4
+    %x_23:i32 = let %5
+    %7:i32 = or -1i, %x_23
+    %8:bool = eq %7, -1i
+    if %8 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
@@ -32,12 +33,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %9:void = call %main_1
-    %10:vec4<f32> = load %x_GLF_color
-    %11:main_out = construct %10
-    ret %11
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %10:void = call %main_1
+    %11:vec4<f32> = load %x_GLF_color
+    %12:main_out = construct %11
+    ret %12
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-xor/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-xor/0-opt.spvasm.expected.ir.msl
index efdd3b1..c570343 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-xor/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-xor/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,46 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+}
+
+%main_1 = func():void {
+  $B2: {
+    %a:ptr<function, i32, read_write> = var
+    %b:ptr<function, i32, read_write> = var
+    store %a, 6i
+    store %b, 5i
+    %5:i32 = load %a
+    %6:i32 = load %b
+    %7:i32 = xor %5, %6
+    %8:bool = neq %7, 3i
+    if %8 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        store %x_GLF_color, vec4<f32>(0.0f)
+        exit_if  # if_1
+      }
+      $B4: {  # false
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        exit_if  # if_1
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %10:void = call %main_1
+    %11:vec4<f32> = load %x_GLF_color
+    %12:main_out = construct %11
+    ret %12
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-xor/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-xor/0-opt.wgsl.expected.ir.msl
index efdd3b1..0ba2210 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-xor/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-xor/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,48 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+}
+
+%main_1 = func():void {
+  $B2: {
+    %a:ptr<function, i32, read_write> = var
+    %b:ptr<function, i32, read_write> = var
+    store %a, 6i
+    store %b, 5i
+    %5:i32 = load %a
+    %x_6:i32 = let %5
+    %7:i32 = load %b
+    %x_7:i32 = let %7
+    %9:i32 = xor %x_6, %x_7
+    %10:bool = neq %9, 3i
+    if %10 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        store %x_GLF_color, vec4<f32>(0.0f)
+        exit_if  # if_1
+      }
+      $B4: {  # false
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        exit_if  # if_1
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %12:void = call %main_1
+    %13:vec4<f32> = load %x_GLF_color
+    %14:main_out = construct %13
+    ret %14
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-const-variable/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-const-variable/0.spvasm.expected.ir.msl
index efdd3b1..09fb149 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-const-variable/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-const-variable/0.spvasm.expected.ir.msl
@@ -1,6 +1,42 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+}
+
+%main_1 = func():void {
+  $B2: {
+    %a:ptr<function, bool, read_write> = var
+    store %a, false
+    %4:bool = load %a
+    %5:bool = and true, %4
+    if %5 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        store %x_GLF_color, vec4<f32>(0.0f)
+        exit_if  # if_1
+      }
+      $B4: {  # false
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        exit_if  # if_1
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %7:void = call %main_1
+    %8:vec4<f32> = load %x_GLF_color
+    %9:main_out = construct %8
+    ret %9
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-const-variable/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-const-variable/0.wgsl.expected.ir.msl
index efdd3b1..ab1a312 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-const-variable/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-const-variable/0.wgsl.expected.ir.msl
@@ -1,6 +1,43 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+}
+
+%main_1 = func():void {
+  $B2: {
+    %a:ptr<function, bool, read_write> = var
+    store %a, false
+    %4:bool = load %a
+    %x_19:bool = let %4
+    %6:bool = and true, %x_19
+    if %6 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        store %x_GLF_color, vec4<f32>(0.0f)
+        exit_if  # if_1
+      }
+      $B4: {  # false
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        exit_if  # if_1
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %8:void = call %main_1
+    %9:vec4<f32> = load %x_GLF_color
+    %10:main_out = construct %9
+    ret %10
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-constant/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-constant/0-opt.spvasm.expected.ir.msl
index efdd3b1..e2a8ed1 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-constant/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-constant/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,60 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
+  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+}
+
+%main_1 = func():void {
+  $B2: {
+    %i:ptr<function, i32, read_write> = var
+    store %i, 2i
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %5:i32 = load %i
+        %6:i32 = add %5, 1i
+        store %i, %6
+        continue  # -> $B4
+      }
+      $B4: {  # continuing
+        %7:f32 = load_vector_element %gl_FragCoord, 0u
+        %x_35:f32 = let %7
+        %9:bool = gte %x_35, 0.0f
+        %10:bool = and %9, false
+        %11:bool = eq %10, false
+        break_if %11  # -> [t: exit_loop loop_1, f: $B3]
+      }
+    }
+    %12:i32 = load %i
+    %13:bool = eq %12, 3i
+    if %13 [t: $B5, f: $B6] {  # if_1
+      $B5: {  # true
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        exit_if  # if_1
+      }
+      $B6: {  # false
+        store %x_GLF_color, vec4<f32>(0.0f)
+        exit_if  # if_1
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B7: {
+    store %gl_FragCoord, %gl_FragCoord_param
+    %16:void = call %main_1
+    %17:vec4<f32> = load %x_GLF_color
+    %18:main_out = construct %17
+    ret %18
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-constant/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-constant/0-opt.wgsl.expected.ir.msl
index efdd3b1..0c4cd9b 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-constant/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-constant/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,62 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
+  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+}
+
+%main_1 = func():void {
+  $B2: {
+    %i:ptr<function, i32, read_write> = var
+    store %i, 2i
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %5:i32 = load %i
+        %x_6:i32 = let %5
+        %7:i32 = add %x_6, 1i
+        store %i, %7
+        continue  # -> $B4
+      }
+      $B4: {  # continuing
+        %8:f32 = load_vector_element %gl_FragCoord, 0u
+        %x_35:f32 = let %8
+        %10:bool = gte %x_35, 0.0f
+        %11:bool = and %10, false
+        %12:bool = eq %11, false
+        break_if %12  # -> [t: exit_loop loop_1, f: $B3]
+      }
+    }
+    %13:i32 = load %i
+    %x_8:i32 = let %13
+    %15:bool = eq %x_8, 3i
+    if %15 [t: $B5, f: $B6] {  # if_1
+      $B5: {  # true
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        exit_if  # if_1
+      }
+      $B6: {  # false
+        store %x_GLF_color, vec4<f32>(0.0f)
+        exit_if  # if_1
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B7: {
+    store %gl_FragCoord, %gl_FragCoord_param
+    %18:void = call %main_1
+    %19:vec4<f32> = load %x_GLF_color
+    %20:main_out = construct %19
+    ret %20
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-logical-or-constant/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-logical-or-constant/0.spvasm.expected.ir.msl
index 2e88a5f..68624bd 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-logical-or-constant/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-logical-or-constant/0.spvasm.expected.ir.msl
@@ -1,6 +1,43 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::LoadVectorElement
+../../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
+  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
+  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+}
+
+%main_1 = func():void {
+  $B2: {
+    %4:f32 = load_vector_element %gl_FragCoord, 0u
+    %5:bool = lt %4, 0.0f
+    %6:bool = or %5, true
+    if %6 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        exit_if  # if_1
+      }
+      $B4: {  # false
+        store %x_GLF_color, vec4<f32>(0.0f)
+        exit_if  # if_1
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B5: {
+    store %gl_FragCoord, %gl_FragCoord_param
+    %9:void = call %main_1
+    %10:vec4<f32> = load %x_GLF_color
+    %11:main_out = construct %10
+    ret %11
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-logical-or-constant/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-logical-or-constant/0.wgsl.expected.ir.msl
index 2e88a5f..ab3f95c 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-logical-or-constant/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-logical-or-constant/0.wgsl.expected.ir.msl
@@ -1,6 +1,44 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::LoadVectorElement
+../../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
+  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
+  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+}
+
+%main_1 = func():void {
+  $B2: {
+    %4:f32 = load_vector_element %gl_FragCoord, 0u
+    %x_22:f32 = let %4
+    %6:bool = lt %x_22, 0.0f
+    %7:bool = or %6, true
+    if %7 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        exit_if  # if_1
+      }
+      $B4: {  # false
+        store %x_GLF_color, vec4<f32>(0.0f)
+        exit_if  # if_1
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B5: {
+    store %gl_FragCoord, %gl_FragCoord_param
+    %10:void = call %main_1
+    %11:vec4<f32> = load %x_GLF_color
+    %12:main_out = construct %11
+    ret %12
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-negate-min-int-value/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-negate-min-int-value/0-opt.spvasm.expected.ir.msl
index 2406016..f70289a 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-negate-min-int-value/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-negate-min-int-value/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   minusOne:i32 @offset(0)
 }
 
@@ -8,13 +8,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %minValue:ptr<function, i32, read_write> = var
     %negMinValue:ptr<function, i32, read_write> = var
     store %minValue, -2147483648i
@@ -27,12 +27,12 @@
     %11:i32 = load %10
     %12:i32 = mul %9, %11
     %13:bool = eq %8, %12
-    if %13 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    if %13 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
@@ -40,8 +40,8 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
+%tint_symbol = @fragment func():main_out {
+  $B5: {
     %15:void = call %main_1
     %16:vec4<f32> = load %x_GLF_color
     %17:main_out = construct %16
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-negate-min-int-value/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-negate-min-int-value/0-opt.wgsl.expected.ir.msl
index b808aad..e876f4d 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-negate-min-int-value/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-negate-min-int-value/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   minusOne:i32 @offset(0)
 }
 
@@ -8,31 +8,35 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %minValue:ptr<function, i32, read_write> = var
     %negMinValue:ptr<function, i32, read_write> = var
     store %minValue, -2147483648i
-    %x_25:i32 = load %minValue
-    %7:i32 = negation %x_25
-    store %negMinValue, %7
-    %x_27:i32 = load %negMinValue
-    %x_28:i32 = load %minValue
-    %10:ptr<uniform, i32, read> = access %x_7, 0u
-    %x_30:i32 = load %10
-    %12:i32 = mul %x_28, %x_30
-    %13:bool = eq %x_27, %12
-    if %13 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    %6:i32 = load %minValue
+    %x_25:i32 = let %6
+    %8:i32 = negation %x_25
+    store %negMinValue, %8
+    %9:i32 = load %negMinValue
+    %x_27:i32 = let %9
+    %11:i32 = load %minValue
+    %x_28:i32 = let %11
+    %13:ptr<uniform, i32, read> = access %x_7, 0u
+    %14:i32 = load %13
+    %x_30:i32 = let %14
+    %16:i32 = mul %x_28, %x_30
+    %17:bool = eq %x_27, %16
+    if %17 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
@@ -40,12 +44,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %15:void = call %main_1
-    %16:vec4<f32> = load %x_GLF_color
-    %17:main_out = construct %16
-    ret %17
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %19:void = call %main_1
+    %20:vec4<f32> = load %x_GLF_color
+    %21:main_out = construct %20
+    ret %21
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-negate-variable/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-negate-variable/0.spvasm.expected.ir.msl
index efdd3b1..4ca3915 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-negate-variable/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-negate-variable/0.spvasm.expected.ir.msl
@@ -1,6 +1,43 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+}
+
+%main_1 = func():void {
+  $B2: {
+    %i:ptr<function, i32, read_write> = var
+    store %i, 3i
+    %4:i32 = load %i
+    %5:i32 = complement %4
+    %6:bool = eq %5, -4i
+    if %6 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        exit_if  # if_1
+      }
+      $B4: {  # false
+        store %x_GLF_color, vec4<f32>(0.0f)
+        exit_if  # if_1
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %8:void = call %main_1
+    %9:vec4<f32> = load %x_GLF_color
+    %10:main_out = construct %9
+    ret %10
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-negate-variable/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-negate-variable/0.wgsl.expected.ir.msl
index efdd3b1..d788c0c 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-negate-variable/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-negate-variable/0.wgsl.expected.ir.msl
@@ -1,6 +1,44 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+}
+
+%main_1 = func():void {
+  $B2: {
+    %i:ptr<function, i32, read_write> = var
+    store %i, 3i
+    %4:i32 = load %i
+    %x_5:i32 = let %4
+    %6:i32 = complement %x_5
+    %7:bool = eq %6, -4i
+    if %7 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        exit_if  # if_1
+      }
+      $B4: {  # false
+        store %x_GLF_color, vec4<f32>(0.0f)
+        exit_if  # if_1
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %9:void = call %main_1
+    %10:vec4<f32> = load %x_GLF_color
+    %11:main_out = construct %10
+    ret %11
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-shift-gte32/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-shift-gte32/0.spvasm.expected.ir.msl
index 17382da..a7332fd 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-shift-gte32/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-shift-gte32/0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:u32 @offset(0)
 }
 
@@ -8,13 +8,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, u32, read_write> = var
     %b:ptr<function, u32, read_write> = var
     %c:ptr<function, u32, read_write> = var
@@ -24,104 +24,110 @@
     %10:ptr<uniform, u32, read> = access %x_6, 0u
     %11:u32 = load %10
     %12:u32 = add 77u, %11
-    %13:u32 = shiftr %12, 32u
-    store %a, %13
-    %14:ptr<uniform, u32, read> = access %x_6, 0u
-    %15:u32 = load %14
-    %16:u32 = add 3243u, %15
-    %17:u32 = shiftr %16, 33u
-    store %b, %17
-    %18:ptr<uniform, u32, read> = access %x_6, 0u
-    %19:u32 = load %18
-    %20:u32 = add 23u, %19
-    %21:u32 = shiftr %20, 345u
-    store %c, %21
-    %22:ptr<uniform, u32, read> = access %x_6, 0u
-    %23:u32 = load %22
-    %24:u32 = add 2395u, %23
-    %25:u32 = shiftl %24, 32u
-    store %d, %25
-    %26:ptr<uniform, u32, read> = access %x_6, 0u
-    %27:u32 = load %26
-    %28:u32 = add 290485u, %27
-    %29:u32 = shiftl %28, 33u
-    store %e, %29
+    %13:u32 = and 32u, 31u
+    %14:u32 = shr %12, %13
+    store %a, %14
+    %15:ptr<uniform, u32, read> = access %x_6, 0u
+    %16:u32 = load %15
+    %17:u32 = add 3243u, %16
+    %18:u32 = and 33u, 31u
+    %19:u32 = shr %17, %18
+    store %b, %19
+    %20:ptr<uniform, u32, read> = access %x_6, 0u
+    %21:u32 = load %20
+    %22:u32 = add 23u, %21
+    %23:u32 = and 345u, 31u
+    %24:u32 = shr %22, %23
+    store %c, %24
+    %25:ptr<uniform, u32, read> = access %x_6, 0u
+    %26:u32 = load %25
+    %27:u32 = add 2395u, %26
+    %28:u32 = and 32u, 31u
+    %29:u32 = shl %27, %28
+    store %d, %29
     %30:ptr<uniform, u32, read> = access %x_6, 0u
     %31:u32 = load %30
-    %32:u32 = add 44321u, %31
-    %33:u32 = shiftl %32, 345u
-    store %f, %33
-    %34:u32 = load %a
-    %35:bool = neq %34, 1u
-    if %35 [t: %b3] {  # if_1
-      %b3 = block {  # true
+    %32:u32 = add 290485u, %31
+    %33:u32 = and 33u, 31u
+    %34:u32 = shl %32, %33
+    store %e, %34
+    %35:ptr<uniform, u32, read> = access %x_6, 0u
+    %36:u32 = load %35
+    %37:u32 = add 44321u, %36
+    %38:u32 = and 345u, 31u
+    %39:u32 = shl %37, %38
+    store %f, %39
+    %40:u32 = load %a
+    %41:bool = neq %40, 1u
+    if %41 [t: $B3] {  # if_1
+      $B3: {  # true
         store %a, 1u
         exit_if  # if_1
       }
     }
-    %36:u32 = load %b
-    %37:bool = neq %36, 0u
-    if %37 [t: %b4] {  # if_2
-      %b4 = block {  # true
+    %42:u32 = load %b
+    %43:bool = neq %42, 0u
+    if %43 [t: $B4] {  # if_2
+      $B4: {  # true
         store %b, 0u
         exit_if  # if_2
       }
     }
-    %38:u32 = load %c
-    %39:bool = neq %38, 1u
-    if %39 [t: %b5] {  # if_3
-      %b5 = block {  # true
+    %44:u32 = load %c
+    %45:bool = neq %44, 1u
+    if %45 [t: $B5] {  # if_3
+      $B5: {  # true
         store %c, 1u
         exit_if  # if_3
       }
     }
-    %40:u32 = load %d
-    %41:bool = neq %40, 0u
-    if %41 [t: %b6] {  # if_4
-      %b6 = block {  # true
+    %46:u32 = load %d
+    %47:bool = neq %46, 0u
+    if %47 [t: $B6] {  # if_4
+      $B6: {  # true
         store %d, 0u
         exit_if  # if_4
       }
     }
-    %42:u32 = load %e
-    %43:bool = neq %42, 1u
-    if %43 [t: %b7] {  # if_5
-      %b7 = block {  # true
+    %48:u32 = load %e
+    %49:bool = neq %48, 1u
+    if %49 [t: $B7] {  # if_5
+      $B7: {  # true
         store %e, 1u
         exit_if  # if_5
       }
     }
-    %44:u32 = load %f
-    %45:bool = neq %44, 0u
-    if %45 [t: %b8] {  # if_6
-      %b8 = block {  # true
+    %50:u32 = load %f
+    %51:bool = neq %50, 0u
+    if %51 [t: $B8] {  # if_6
+      $B8: {  # true
         store %f, 0u
         exit_if  # if_6
       }
     }
-    %46:u32 = load %a
-    %47:bool = eq %46, 1u
-    %48:u32 = load %b
-    %49:bool = eq %48, 0u
-    %50:bool = and %47, %49
-    %51:u32 = load %c
-    %52:bool = eq %51, 1u
-    %53:bool = and %50, %52
-    %54:u32 = load %d
+    %52:u32 = load %a
+    %53:bool = eq %52, 1u
+    %54:u32 = load %b
     %55:bool = eq %54, 0u
     %56:bool = and %53, %55
-    %57:u32 = load %e
+    %57:u32 = load %c
     %58:bool = eq %57, 1u
     %59:bool = and %56, %58
-    %60:u32 = load %f
+    %60:u32 = load %d
     %61:bool = eq %60, 0u
     %62:bool = and %59, %61
-    if %62 [t: %b9, f: %b10] {  # if_7
-      %b9 = block {  # true
+    %63:u32 = load %e
+    %64:bool = eq %63, 1u
+    %65:bool = and %62, %64
+    %66:u32 = load %f
+    %67:bool = eq %66, 0u
+    %68:bool = and %65, %67
+    if %68 [t: $B9, f: $B10] {  # if_7
+      $B9: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_7
       }
-      %b10 = block {  # false
+      $B10: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_7
       }
@@ -129,12 +135,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b11 {
-  %b11 = block {
-    %64:void = call %main_1
-    %65:vec4<f32> = load %x_GLF_color
-    %66:main_out = construct %65
-    ret %66
+%tint_symbol = @fragment func():main_out {
+  $B11: {
+    %70:void = call %main_1
+    %71:vec4<f32> = load %x_GLF_color
+    %72:main_out = construct %71
+    ret %72
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-shift-gte32/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-shift-gte32/0.wgsl.expected.ir.msl
index 8053fd5..af720ec 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-shift-gte32/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-shift-gte32/0.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:u32 @offset(0)
 }
 
@@ -8,13 +8,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, u32, read_write> = var
     %b:ptr<function, u32, read_write> = var
     %c:ptr<function, u32, read_write> = var
@@ -22,106 +22,130 @@
     %e:ptr<function, u32, read_write> = var
     %f:ptr<function, u32, read_write> = var
     %10:ptr<uniform, u32, read> = access %x_6, 0u
-    %x_41:u32 = load %10
-    %12:u32 = add 77u, %x_41
-    %13:u32 = shiftr %12, 32u
-    store %a, %13
-    %14:ptr<uniform, u32, read> = access %x_6, 0u
-    %x_45:u32 = load %14
-    %16:u32 = add 3243u, %x_45
-    %17:u32 = shiftr %16, 33u
-    store %b, %17
-    %18:ptr<uniform, u32, read> = access %x_6, 0u
-    %x_49:u32 = load %18
-    %20:u32 = add 23u, %x_49
-    %21:u32 = shiftr %20, 345u
-    store %c, %21
+    %11:u32 = load %10
+    %x_41:u32 = let %11
+    %13:u32 = add 77u, %x_41
+    %14:u32 = and 32u, 31u
+    %15:u32 = shr %13, %14
+    store %a, %15
+    %16:ptr<uniform, u32, read> = access %x_6, 0u
+    %17:u32 = load %16
+    %x_45:u32 = let %17
+    %19:u32 = add 3243u, %x_45
+    %20:u32 = and 33u, 31u
+    %21:u32 = shr %19, %20
+    store %b, %21
     %22:ptr<uniform, u32, read> = access %x_6, 0u
-    %x_53:u32 = load %22
-    %24:u32 = add 2395u, %x_53
-    %25:u32 = shiftl %24, 32u
-    store %d, %25
-    %26:ptr<uniform, u32, read> = access %x_6, 0u
-    %x_57:u32 = load %26
-    %28:u32 = add 290485u, %x_57
-    %29:u32 = shiftl %28, 33u
-    store %e, %29
-    %30:ptr<uniform, u32, read> = access %x_6, 0u
-    %x_61:u32 = load %30
-    %32:u32 = add 44321u, %x_61
-    %33:u32 = shiftl %32, 345u
-    store %f, %33
-    %x_64:u32 = load %a
-    %35:bool = neq %x_64, 1u
-    if %35 [t: %b3] {  # if_1
-      %b3 = block {  # true
+    %23:u32 = load %22
+    %x_49:u32 = let %23
+    %25:u32 = add 23u, %x_49
+    %26:u32 = and 345u, 31u
+    %27:u32 = shr %25, %26
+    store %c, %27
+    %28:ptr<uniform, u32, read> = access %x_6, 0u
+    %29:u32 = load %28
+    %x_53:u32 = let %29
+    %31:u32 = add 2395u, %x_53
+    %32:u32 = and 32u, 31u
+    %33:u32 = shl %31, %32
+    store %d, %33
+    %34:ptr<uniform, u32, read> = access %x_6, 0u
+    %35:u32 = load %34
+    %x_57:u32 = let %35
+    %37:u32 = add 290485u, %x_57
+    %38:u32 = and 33u, 31u
+    %39:u32 = shl %37, %38
+    store %e, %39
+    %40:ptr<uniform, u32, read> = access %x_6, 0u
+    %41:u32 = load %40
+    %x_61:u32 = let %41
+    %43:u32 = add 44321u, %x_61
+    %44:u32 = and 345u, 31u
+    %45:u32 = shl %43, %44
+    store %f, %45
+    %46:u32 = load %a
+    %x_64:u32 = let %46
+    %48:bool = neq %x_64, 1u
+    if %48 [t: $B3] {  # if_1
+      $B3: {  # true
         store %a, 1u
         exit_if  # if_1
       }
     }
-    %x_68:u32 = load %b
-    %37:bool = neq %x_68, 0u
-    if %37 [t: %b4] {  # if_2
-      %b4 = block {  # true
+    %49:u32 = load %b
+    %x_68:u32 = let %49
+    %51:bool = neq %x_68, 0u
+    if %51 [t: $B4] {  # if_2
+      $B4: {  # true
         store %b, 0u
         exit_if  # if_2
       }
     }
-    %x_72:u32 = load %c
-    %39:bool = neq %x_72, 1u
-    if %39 [t: %b5] {  # if_3
-      %b5 = block {  # true
+    %52:u32 = load %c
+    %x_72:u32 = let %52
+    %54:bool = neq %x_72, 1u
+    if %54 [t: $B5] {  # if_3
+      $B5: {  # true
         store %c, 1u
         exit_if  # if_3
       }
     }
-    %x_76:u32 = load %d
-    %41:bool = neq %x_76, 0u
-    if %41 [t: %b6] {  # if_4
-      %b6 = block {  # true
+    %55:u32 = load %d
+    %x_76:u32 = let %55
+    %57:bool = neq %x_76, 0u
+    if %57 [t: $B6] {  # if_4
+      $B6: {  # true
         store %d, 0u
         exit_if  # if_4
       }
     }
-    %x_80:u32 = load %e
-    %43:bool = neq %x_80, 1u
-    if %43 [t: %b7] {  # if_5
-      %b7 = block {  # true
+    %58:u32 = load %e
+    %x_80:u32 = let %58
+    %60:bool = neq %x_80, 1u
+    if %60 [t: $B7] {  # if_5
+      $B7: {  # true
         store %e, 1u
         exit_if  # if_5
       }
     }
-    %x_84:u32 = load %f
-    %45:bool = neq %x_84, 0u
-    if %45 [t: %b8] {  # if_6
-      %b8 = block {  # true
+    %61:u32 = load %f
+    %x_84:u32 = let %61
+    %63:bool = neq %x_84, 0u
+    if %63 [t: $B8] {  # if_6
+      $B8: {  # true
         store %f, 0u
         exit_if  # if_6
       }
     }
-    %x_88:u32 = load %a
-    %x_90:u32 = load %b
-    %x_93:u32 = load %c
-    %x_96:u32 = load %d
-    %x_99:u32 = load %e
-    %x_102:u32 = load %f
-    %52:bool = eq %x_88, 1u
-    %53:bool = eq %x_90, 0u
-    %54:bool = and %52, %53
-    %55:bool = eq %x_93, 1u
-    %56:bool = and %54, %55
-    %57:bool = eq %x_96, 0u
-    %58:bool = and %56, %57
-    %59:bool = eq %x_99, 1u
-    %60:bool = and %58, %59
-    %61:bool = eq %x_102, 0u
-    %62:bool = and %60, %61
-    if %62 [t: %b9, f: %b10] {  # if_7
-      %b9 = block {  # true
+    %64:u32 = load %a
+    %x_88:u32 = let %64
+    %66:u32 = load %b
+    %x_90:u32 = let %66
+    %68:u32 = load %c
+    %x_93:u32 = let %68
+    %70:u32 = load %d
+    %x_96:u32 = let %70
+    %72:u32 = load %e
+    %x_99:u32 = let %72
+    %74:u32 = load %f
+    %x_102:u32 = let %74
+    %76:bool = eq %x_88, 1u
+    %77:bool = eq %x_90, 0u
+    %78:bool = and %76, %77
+    %79:bool = eq %x_93, 1u
+    %80:bool = and %78, %79
+    %81:bool = eq %x_96, 0u
+    %82:bool = and %80, %81
+    %83:bool = eq %x_99, 1u
+    %84:bool = and %82, %83
+    %85:bool = eq %x_102, 0u
+    %86:bool = and %84, %85
+    if %86 [t: $B9, f: $B10] {  # if_7
+      $B9: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_7
       }
-      %b10 = block {  # false
+      $B10: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_7
       }
@@ -129,12 +153,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b11 {
-  %b11 = block {
-    %64:void = call %main_1
-    %65:vec4<f32> = load %x_GLF_color
-    %66:main_out = construct %65
-    ret %66
+%tint_symbol = @fragment func():main_out {
+  $B11: {
+    %88:void = call %main_1
+    %89:vec4<f32> = load %x_GLF_color
+    %90:main_out = construct %89
+    ret %90
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-shift-right-arithmetic/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-shift-right-arithmetic/0.spvasm.expected.ir.msl
index efdd3b1..2fe5ea4 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-shift-right-arithmetic/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-shift-right-arithmetic/0.spvasm.expected.ir.msl
@@ -1,6 +1,44 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+}
+
+%main_1 = func():void {
+  $B2: {
+    %i:ptr<function, i32, read_write> = var
+    store %i, 5i
+    %4:i32 = load %i
+    %5:u32 = and 1u, 31u
+    %6:i32 = shr %4, %5
+    %7:bool = neq %6, 2i
+    if %7 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        store %x_GLF_color, vec4<f32>(0.0f)
+        exit_if  # if_1
+      }
+      $B4: {  # false
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        exit_if  # if_1
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %9:void = call %main_1
+    %10:vec4<f32> = load %x_GLF_color
+    %11:main_out = construct %10
+    ret %11
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-shift-right-arithmetic/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-shift-right-arithmetic/0.wgsl.expected.ir.msl
index efdd3b1..d28bdb9 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-shift-right-arithmetic/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-shift-right-arithmetic/0.wgsl.expected.ir.msl
@@ -1,6 +1,45 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+}
+
+%main_1 = func():void {
+  $B2: {
+    %i:ptr<function, i32, read_write> = var
+    store %i, 5i
+    %4:i32 = load %i
+    %x_5:i32 = let %4
+    %6:u32 = and 1u, 31u
+    %7:i32 = shr %x_5, %6
+    %8:bool = neq %7, 2i
+    if %8 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        store %x_GLF_color, vec4<f32>(0.0f)
+        exit_if  # if_1
+      }
+      $B4: {  # false
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        exit_if  # if_1
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %10:void = call %main_1
+    %11:vec4<f32> = load %x_GLF_color
+    %12:main_out = construct %11
+    ret %12
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-switch-udiv/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-switch-udiv/0.spvasm.expected.ir.msl
index efdd3b1..386846d 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-switch-udiv/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-switch-udiv/0.spvasm.expected.ir.msl
@@ -1,6 +1,51 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+}
+
+%main_1 = func():void {
+  $B2: {
+    %a:ptr<function, u32, read_write> = var
+    store %a, 4u
+    %4:u32 = load %a
+    %x_5:u32 = let %4
+    %6:u32 = call %tint_div_u32, %x_5, 2u
+    switch %6 [c: (2u, $B3), c: (default, $B4)] {  # switch_1
+      $B3: {  # case
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        exit_switch  # switch_1
+      }
+      $B4: {  # case
+        store %x_GLF_color, vec4<f32>(0.0f)
+        exit_switch  # switch_1
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %9:void = call %main_1
+    %10:vec4<f32> = load %x_GLF_color
+    %11:main_out = construct %10
+    ret %11
+  }
+}
+%tint_div_u32 = func(%lhs:u32, %rhs:u32):u32 {
+  $B6: {
+    %14:bool = eq %rhs, 0u
+    %15:u32 = select %rhs, 1u, %14
+    %16:u32 = div %lhs, %15
+    ret %16
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-switch-udiv/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-switch-udiv/0.wgsl.expected.ir.msl
index efdd3b1..386846d 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-switch-udiv/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-switch-udiv/0.wgsl.expected.ir.msl
@@ -1,6 +1,51 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+}
+
+%main_1 = func():void {
+  $B2: {
+    %a:ptr<function, u32, read_write> = var
+    store %a, 4u
+    %4:u32 = load %a
+    %x_5:u32 = let %4
+    %6:u32 = call %tint_div_u32, %x_5, 2u
+    switch %6 [c: (2u, $B3), c: (default, $B4)] {  # switch_1
+      $B3: {  # case
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        exit_switch  # switch_1
+      }
+      $B4: {  # case
+        store %x_GLF_color, vec4<f32>(0.0f)
+        exit_switch  # switch_1
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %9:void = call %main_1
+    %10:vec4<f32> = load %x_GLF_color
+    %11:main_out = construct %10
+    ret %11
+  }
+}
+%tint_div_u32 = func(%lhs:u32, %rhs:u32):u32 {
+  $B6: {
+    %14:bool = eq %rhs, 0u
+    %15:u32 = select %rhs, 1u, %14
+    %16:u32 = div %lhs, %15
+    ret %16
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-clamp-cmp-const-first/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-clamp-cmp-const-first/0-opt.spvasm.expected.ir.msl
index 62e70ad..4f5b151 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-clamp-cmp-const-first/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-clamp-cmp-const-first/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:f32 @offset(0)
 }
 
@@ -8,43 +8,45 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %f:ptr<function, f32, read_write> = var
     store %f, 1.0f
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %5:f32 = load %f
         %6:ptr<uniform, f32, read> = access %x_6, 0u
         %7:f32 = load %6
         %8:f32 = add %5, %7
         store %f, %8
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_34:f32 = load %f
-        %10:ptr<uniform, f32, read> = access %x_6, 0u
-        %x_36:f32 = load %10
-        %12:f32 = add 9.0f, %x_36
-        %13:f32 = clamp %x_34, 8.0f, %12
-        %14:bool = gt 10.0f, %13
-        %15:bool = eq %14, false
-        break_if %15 %b3
+      $B4: {  # continuing
+        %9:f32 = load %f
+        %x_34:f32 = let %9
+        %11:ptr<uniform, f32, read> = access %x_6, 0u
+        %12:f32 = load %11
+        %x_36:f32 = let %12
+        %14:f32 = add 9.0f, %x_36
+        %15:f32 = clamp %x_34, 8.0f, %14
+        %16:bool = gt 10.0f, %15
+        %17:bool = eq %16, false
+        break_if %17  # -> [t: exit_loop loop_1, f: $B3]
       }
     }
-    %16:f32 = load %f
-    %17:bool = eq %16, 10.0f
-    if %17 [t: %b5, f: %b6] {  # if_1
-      %b5 = block {  # true
+    %18:f32 = load %f
+    %19:bool = eq %18, 10.0f
+    if %19 [t: $B5, f: $B6] {  # if_1
+      $B5: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_1
       }
-      %b6 = block {  # false
+      $B6: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
@@ -52,12 +54,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b7 {
-  %b7 = block {
-    %19:void = call %main_1
-    %20:vec4<f32> = load %x_GLF_color
-    %21:main_out = construct %20
-    ret %21
+%tint_symbol = @fragment func():main_out {
+  $B7: {
+    %21:void = call %main_1
+    %22:vec4<f32> = load %x_GLF_color
+    %23:main_out = construct %22
+    ret %23
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-clamp-cmp-const-first/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-clamp-cmp-const-first/0-opt.wgsl.expected.ir.msl
index 9b23937..2424647 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-clamp-cmp-const-first/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-clamp-cmp-const-first/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:f32 @offset(0)
 }
 
@@ -8,43 +8,48 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %f:ptr<function, f32, read_write> = var
     store %f, 1.0f
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %5:ptr<uniform, f32, read> = access %x_6, 0u
-        %x_31:f32 = load %5
-        %x_32:f32 = load %f
-        %8:f32 = add %x_32, %x_31
-        store %f, %8
-        continue %b4
+        %6:f32 = load %5
+        %x_31:f32 = let %6
+        %8:f32 = load %f
+        %x_32:f32 = let %8
+        %10:f32 = add %x_32, %x_31
+        store %f, %10
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_34:f32 = load %f
-        %10:ptr<uniform, f32, read> = access %x_6, 0u
-        %x_36:f32 = load %10
-        %12:f32 = add 9.0f, %x_36
-        %13:f32 = clamp %x_34, 8.0f, %12
-        %14:bool = gt 10.0f, %13
-        %15:bool = eq %14, false
-        break_if %15 %b3
+      $B4: {  # continuing
+        %11:f32 = load %f
+        %x_34:f32 = let %11
+        %13:ptr<uniform, f32, read> = access %x_6, 0u
+        %14:f32 = load %13
+        %x_36:f32 = let %14
+        %16:f32 = add 9.0f, %x_36
+        %17:f32 = clamp %x_34, 8.0f, %16
+        %18:bool = gt 10.0f, %17
+        %19:bool = eq %18, false
+        break_if %19  # -> [t: exit_loop loop_1, f: $B3]
       }
     }
-    %x_40:f32 = load %f
-    %17:bool = eq %x_40, 10.0f
-    if %17 [t: %b5, f: %b6] {  # if_1
-      %b5 = block {  # true
+    %20:f32 = load %f
+    %x_40:f32 = let %20
+    %22:bool = eq %x_40, 10.0f
+    if %22 [t: $B5, f: $B6] {  # if_1
+      $B5: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_1
       }
-      %b6 = block {  # false
+      $B6: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
@@ -52,12 +57,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b7 {
-  %b7 = block {
-    %19:void = call %main_1
-    %20:vec4<f32> = load %x_GLF_color
-    %21:main_out = construct %20
-    ret %21
+%tint_symbol = @fragment func():main_out {
+  $B7: {
+    %24:void = call %main_1
+    %25:vec4<f32> = load %x_GLF_color
+    %26:main_out = construct %25
+    ret %26
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-merge-add-sub-uniform/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-merge-add-sub-uniform/0-opt.spvasm.expected.ir.msl
index 2d4b8b6..7e52a3c 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-merge-add-sub-uniform/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-merge-add-sub-uniform/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:i32 @offset(0)
 }
 
@@ -8,24 +8,24 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %4:ptr<uniform, i32, read> = access %x_5, 0u
     %5:i32 = load %4
     %6:i32 = sub 3i, %5
     %7:i32 = add 1i, %6
     %8:bool = eq %7, 3i
-    if %8 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    if %8 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
@@ -33,8 +33,8 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
+%tint_symbol = @fragment func():main_out {
+  $B5: {
     %10:void = call %main_1
     %11:vec4<f32> = load %x_GLF_color
     %12:main_out = construct %11
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-merge-add-sub-uniform/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-merge-add-sub-uniform/0-opt.wgsl.expected.ir.msl
index e854c43..d0b5bfc 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-merge-add-sub-uniform/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-merge-add-sub-uniform/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:i32 @offset(0)
 }
 
@@ -8,24 +8,25 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %4:ptr<uniform, i32, read> = access %x_5, 0u
-    %x_24:i32 = load %4
-    %6:i32 = sub 3i, %x_24
-    %7:i32 = add 1i, %6
-    %8:bool = eq %7, 3i
-    if %8 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    %5:i32 = load %4
+    %x_24:i32 = let %5
+    %7:i32 = sub 3i, %x_24
+    %8:i32 = add 1i, %7
+    %9:bool = eq %8, 3i
+    if %9 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
@@ -33,12 +34,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %10:void = call %main_1
-    %11:vec4<f32> = load %x_GLF_color
-    %12:main_out = construct %11
-    ret %12
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %11:void = call %main_1
+    %12:vec4<f32> = load %x_GLF_color
+    %13:main_out = construct %12
+    ret %13
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-construct-extract/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-construct-extract/0-opt.spvasm.expected.ir.msl
index 2114f17..4446eea 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-construct-extract/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-construct-extract/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   twoandthree:vec2<f32> @offset(0)
 }
 
@@ -8,13 +8,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, vec2<f32>, read_write> = var
     %b:ptr<function, vec2<f32>, read_write> = var
     %x_46:ptr<function, bool, read_write> = var
@@ -23,31 +23,33 @@
     %9:vec2<f32> = load %8
     store %a, %9
     %10:f32 = load_vector_element %a, 0u
-    %11:vec2<f32> = load %a
-    %12:vec2<f32> = clamp %11, vec2<f32>(1.0f), vec2<f32>(1.0f)
-    %13:f32 = access %12, 1u
-    %14:vec2<f32> = construct %10, %13
-    store %b, %14
-    %15:f32 = load_vector_element %b, 0u
-    %x_41:bool = eq %15, 2.0f
+    %11:f32 = let %10
+    %12:vec2<f32> = load %a
+    %13:vec2<f32> = clamp %12, vec2<f32>(1.0f), vec2<f32>(1.0f)
+    %14:f32 = access %13, 1u
+    %15:vec2<f32> = construct %11, %14
+    store %b, %15
+    %16:f32 = load_vector_element %b, 0u
+    %17:bool = eq %16, 2.0f
+    %x_41:bool = let %17
     store %x_47, %x_41
-    if %x_41 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %17:f32 = load_vector_element %b, 1u
-        %18:bool = eq %17, 1.0f
-        store %x_46, %18
-        %19:bool = load %x_46
-        store %x_47, %19
+    if %x_41 [t: $B3] {  # if_1
+      $B3: {  # true
+        %19:f32 = load_vector_element %b, 1u
+        %20:bool = eq %19, 1.0f
+        store %x_46, %20
+        %21:bool = load %x_46
+        store %x_47, %21
         exit_if  # if_1
       }
     }
-    %20:bool = load %x_47
-    if %20 [t: %b4, f: %b5] {  # if_2
-      %b4 = block {  # true
+    %22:bool = load %x_47
+    if %22 [t: $B4, f: $B5] {  # if_2
+      $B4: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_2
       }
-      %b5 = block {  # false
+      $B5: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_2
       }
@@ -55,12 +57,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b6 {
-  %b6 = block {
-    %22:void = call %main_1
-    %23:vec4<f32> = load %x_GLF_color
-    %24:main_out = construct %23
-    ret %24
+%tint_symbol = @fragment func():main_out {
+  $B6: {
+    %24:void = call %main_1
+    %25:vec4<f32> = load %x_GLF_color
+    %26:main_out = construct %25
+    ret %26
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-construct-extract/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-construct-extract/0-opt.wgsl.expected.ir.msl
index a6f363d..3908d94 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-construct-extract/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-construct-extract/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   twoandthree:vec2<f32> @offset(0)
 }
 
@@ -8,46 +8,53 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, vec2<f32>, read_write> = var
     %b:ptr<function, vec2<f32>, read_write> = var
     %x_46:ptr<function, bool, read_write> = var
     %x_47_phi:ptr<function, bool, read_write> = var
     %8:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %x_32:vec2<f32> = load %8
+    %9:vec2<f32> = load %8
+    %x_32:vec2<f32> = let %9
     store %a, %x_32
-    %x_34:f32 = load_vector_element %a, 0u
-    %x_35:vec2<f32> = load %a
-    %12:vec2<f32> = clamp %x_35, vec2<f32>(1.0f), vec2<f32>(1.0f)
-    %13:f32 = access %12, 1u
-    %14:vec2<f32> = construct %x_34, %13
-    store %b, %14
-    %x_40:f32 = load_vector_element %b, 0u
-    %x_41:bool = eq %x_40, 2.0f
+    %11:f32 = load_vector_element %a, 0u
+    %x_34:f32 = let %11
+    %13:vec2<f32> = load %a
+    %x_35:vec2<f32> = let %13
+    %15:vec2<f32> = clamp %x_35, vec2<f32>(1.0f), vec2<f32>(1.0f)
+    %16:f32 = access %15, 1u
+    %17:vec2<f32> = construct %x_34, %16
+    store %b, %17
+    %18:f32 = load_vector_element %b, 0u
+    %x_40:f32 = let %18
+    %20:bool = eq %x_40, 2.0f
+    %x_41:bool = let %20
     store %x_47_phi, %x_41
-    if %x_41 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %x_45:f32 = load_vector_element %b, 1u
-        %18:bool = eq %x_45, 1.0f
-        store %x_46, %18
-        %19:bool = load %x_46
-        store %x_47_phi, %19
+    if %x_41 [t: $B3] {  # if_1
+      $B3: {  # true
+        %22:f32 = load_vector_element %b, 1u
+        %x_45:f32 = let %22
+        %24:bool = eq %x_45, 1.0f
+        store %x_46, %24
+        %25:bool = load %x_46
+        store %x_47_phi, %25
         exit_if  # if_1
       }
     }
-    %x_47:bool = load %x_47_phi
-    if %x_47 [t: %b4, f: %b5] {  # if_2
-      %b4 = block {  # true
+    %26:bool = load %x_47_phi
+    %x_47:bool = let %26
+    if %x_47 [t: $B4, f: $B5] {  # if_2
+      $B4: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_2
       }
-      %b5 = block {  # false
+      $B5: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_2
       }
@@ -55,12 +62,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b6 {
-  %b6 = block {
-    %22:void = call %main_1
-    %23:vec4<f32> = load %x_GLF_color
-    %24:main_out = construct %23
-    ret %24
+%tint_symbol = @fragment func():main_out {
+  $B6: {
+    %29:void = call %main_1
+    %30:vec4<f32> = load %x_GLF_color
+    %31:main_out = construct %30
+    ret %31
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-extract/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-extract/0-opt.spvasm.expected.ir.msl
index 910311f..00c893c 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-extract/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-extract/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   three:f32 @offset(0)
 }
 
@@ -8,24 +8,24 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %4:ptr<uniform, f32, read> = access %x_5, 0u
     %5:f32 = load %4
     %6:vec4<f32> = construct 1.0f, 2.0f, %5, 4.0f
     %7:f32 = dot %6, vec4<f32>(0.0f, 1.0f, 0.0f, 0.0f)
     %8:bool = eq %7, 2.0f
-    if %8 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    if %8 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
@@ -33,8 +33,8 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
+%tint_symbol = @fragment func():main_out {
+  $B5: {
     %10:void = call %main_1
     %11:vec4<f32> = load %x_GLF_color
     %12:main_out = construct %11
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-extract/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-extract/0-opt.wgsl.expected.ir.msl
index 4d19d92..ea147f4 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-extract/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-extract/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   three:f32 @offset(0)
 }
 
@@ -8,24 +8,25 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %4:ptr<uniform, f32, read> = access %x_5, 0u
-    %x_25:f32 = load %4
-    %6:vec4<f32> = construct 1.0f, 2.0f, %x_25, 4.0f
-    %7:f32 = dot %6, vec4<f32>(0.0f, 1.0f, 0.0f, 0.0f)
-    %8:bool = eq %7, 2.0f
-    if %8 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    %5:f32 = load %4
+    %x_25:f32 = let %5
+    %7:vec4<f32> = construct 1.0f, 2.0f, %x_25, 4.0f
+    %8:f32 = dot %7, vec4<f32>(0.0f, 1.0f, 0.0f, 0.0f)
+    %9:bool = eq %8, 2.0f
+    if %9 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
@@ -33,12 +34,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %10:void = call %main_1
-    %11:vec4<f32> = load %x_GLF_color
-    %12:main_out = construct %11
-    ret %12
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %11:void = call %main_1
+    %12:vec4<f32> = load %x_GLF_color
+    %13:main_out = construct %12
+    ret %13
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-no-extract/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-no-extract/0.spvasm.expected.ir.msl
index 400a700..58496e6 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-no-extract/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-no-extract/0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   three:f32 @offset(0)
 }
 
@@ -8,24 +8,24 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %4:ptr<uniform, f32, read> = access %x_5, 0u
     %5:f32 = load %4
     %6:vec2<f32> = construct 2.0f, %5
     %7:f32 = dot %6, vec2<f32>(0.0f, 2.0f)
     %8:bool = eq %7, 6.0f
-    if %8 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    if %8 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
@@ -33,8 +33,8 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
+%tint_symbol = @fragment func():main_out {
+  $B5: {
     %10:void = call %main_1
     %11:vec4<f32> = load %x_GLF_color
     %12:main_out = construct %11
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-no-extract/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-no-extract/0.wgsl.expected.ir.msl
index 4bd782a..5eeba9e 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-no-extract/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-no-extract/0.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   three:f32 @offset(0)
 }
 
@@ -8,24 +8,25 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %4:ptr<uniform, f32, read> = access %x_5, 0u
-    %x_26:f32 = load %4
-    %6:vec2<f32> = construct 2.0f, %x_26
-    %7:f32 = dot %6, vec2<f32>(0.0f, 2.0f)
-    %8:bool = eq %7, 6.0f
-    if %8 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    %5:f32 = load %4
+    %x_26:f32 = let %5
+    %7:vec2<f32> = construct 2.0f, %x_26
+    %8:f32 = dot %7, vec2<f32>(0.0f, 2.0f)
+    %9:bool = eq %8, 6.0f
+    if %9 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
@@ -33,12 +34,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %10:void = call %main_1
-    %11:vec4<f32> = load %x_GLF_color
-    %12:main_out = construct %11
-    ret %12
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %11:void = call %main_1
+    %12:vec4<f32> = load %x_GLF_color
+    %13:main_out = construct %12
+    ret %13
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-add-sub/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-add-sub/0-opt.spvasm.expected.ir.msl
index efdd3b1..64bc726 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-add-sub/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-add-sub/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,66 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+}
+
+%main_1 = func():void {
+  $B2: {
+    %i:ptr<function, i32, read_write> = var
+    store %i, 5i
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %4:i32 = load %i
+        %5:bool = gte %4, 0i
+        if %5 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
+            exit_if  # if_1
+          }
+          $B6: {  # false
+            exit_loop  # loop_1
+          }
+        }
+        %6:i32 = load %i
+        %7:i32 = sub %6, 3i
+        store %i, %7
+        %8:i32 = load %i
+        %9:i32 = add %8, 1i
+        store %i, %9
+        continue  # -> $B4
+      }
+      $B4: {  # continuing
+        next_iteration  # -> $B3
+      }
+    }
+    %10:i32 = load %i
+    %11:bool = eq %10, -1i
+    if %11 [t: $B7, f: $B8] {  # if_2
+      $B7: {  # true
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        exit_if  # if_2
+      }
+      $B8: {  # false
+        store %x_GLF_color, vec4<f32>(0.0f)
+        exit_if  # if_2
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B9: {
+    %13:void = call %main_1
+    %14:vec4<f32> = load %x_GLF_color
+    %15:main_out = construct %14
+    ret %15
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-add-sub/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-add-sub/0-opt.wgsl.expected.ir.msl
index efdd3b1..5b40832 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-add-sub/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-add-sub/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,70 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+}
+
+%main_1 = func():void {
+  $B2: {
+    %i:ptr<function, i32, read_write> = var
+    store %i, 5i
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %4:i32 = load %i
+        %x_5:i32 = let %4
+        %6:bool = gte %x_5, 0i
+        if %6 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
+            exit_if  # if_1
+          }
+          $B6: {  # false
+            exit_loop  # loop_1
+          }
+        }
+        %7:i32 = load %i
+        %x_6:i32 = let %7
+        %9:i32 = sub %x_6, 3i
+        store %i, %9
+        %10:i32 = load %i
+        %x_8:i32 = let %10
+        %12:i32 = add %x_8, 1i
+        store %i, %12
+        continue  # -> $B4
+      }
+      $B4: {  # continuing
+        next_iteration  # -> $B3
+      }
+    }
+    %13:i32 = load %i
+    %x_10:i32 = let %13
+    %15:bool = eq %x_10, -1i
+    if %15 [t: $B7, f: $B8] {  # if_2
+      $B7: {  # true
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        exit_if  # if_2
+      }
+      $B8: {  # false
+        store %x_GLF_color, vec4<f32>(0.0f)
+        exit_if  # if_2
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B9: {
+    %17:void = call %main_1
+    %18:vec4<f32> = load %x_GLF_color
+    %19:main_out = construct %18
+    ret %19
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-div-mul/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-div-mul/0-opt.spvasm.expected.ir.msl
index 621f52b..5501f58 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-div-mul/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-div-mul/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:f32 @offset(0)
 }
 
@@ -8,13 +8,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %f:ptr<function, f32, read_write> = var
     %5:ptr<uniform, f32, read> = access %x_6, 0u
     %6:f32 = load %5
@@ -26,12 +26,12 @@
     %11:f32 = load %f
     %12:bool = lt %11, 2.09999990463256835938f
     %13:bool = and %10, %12
-    if %13 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    if %13 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
@@ -39,8 +39,8 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
+%tint_symbol = @fragment func():main_out {
+  $B5: {
     %15:void = call %main_1
     %16:vec4<f32> = load %x_GLF_color
     %17:main_out = construct %16
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-div-mul/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-div-mul/0-opt.wgsl.expected.ir.msl
index e793225..f397383 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-div-mul/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-div-mul/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:f32 @offset(0)
 }
 
@@ -8,30 +8,33 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %f:ptr<function, f32, read_write> = var
     %5:ptr<uniform, f32, read> = access %x_6, 0u
-    %x_28:f32 = load %5
-    %7:f32 = mul 2.0f, %x_28
-    %8:f32 = div 4.0f, %7
-    store %f, %8
-    %x_31:f32 = load %f
-    %x_33:f32 = load %f
-    %11:bool = gt %x_31, 1.89999997615814208984f
-    %12:bool = lt %x_33, 2.09999990463256835938f
-    %13:bool = and %11, %12
-    if %13 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    %6:f32 = load %5
+    %x_28:f32 = let %6
+    %8:f32 = mul 2.0f, %x_28
+    %9:f32 = div 4.0f, %8
+    store %f, %9
+    %10:f32 = load %f
+    %x_31:f32 = let %10
+    %12:f32 = load %f
+    %x_33:f32 = let %12
+    %14:bool = gt %x_31, 1.89999997615814208984f
+    %15:bool = lt %x_33, 2.09999990463256835938f
+    %16:bool = and %14, %15
+    if %16 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
@@ -39,12 +42,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %15:void = call %main_1
-    %16:vec4<f32> = load %x_GLF_color
-    %17:main_out = construct %16
-    ret %17
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %18:void = call %main_1
+    %19:vec4<f32> = load %x_GLF_color
+    %20:main_out = construct %19
+    ret %20
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-divs/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-divs/0-opt.spvasm.expected.ir.msl
index 5574d42..dbf950c 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-divs/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-divs/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   four:f32 @offset(0)
 }
 
@@ -8,13 +8,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, f32, read_write> = var
     %5:ptr<uniform, f32, read> = access %x_6, 0u
     %6:f32 = load %5
@@ -26,12 +26,12 @@
     %11:f32 = load %a
     %12:bool = lt %11, 8.1000003814697265625f
     %13:bool = and %10, %12
-    if %13 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    if %13 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
@@ -39,8 +39,8 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
+%tint_symbol = @fragment func():main_out {
+  $B5: {
     %15:void = call %main_1
     %16:vec4<f32> = load %x_GLF_color
     %17:main_out = construct %16
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-divs/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-divs/0-opt.wgsl.expected.ir.msl
index 19f864c..d3e5445 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-divs/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-divs/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   four:f32 @offset(0)
 }
 
@@ -8,30 +8,33 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, f32, read_write> = var
     %5:ptr<uniform, f32, read> = access %x_6, 0u
-    %x_27:f32 = load %5
-    %7:f32 = div 1.0f, %x_27
-    %8:f32 = div 2.0f, %7
-    store %a, %8
-    %x_30:f32 = load %a
-    %x_32:f32 = load %a
-    %11:bool = gt %x_30, 7.90000009536743164062f
-    %12:bool = lt %x_32, 8.1000003814697265625f
-    %13:bool = and %11, %12
-    if %13 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    %6:f32 = load %5
+    %x_27:f32 = let %6
+    %8:f32 = div 1.0f, %x_27
+    %9:f32 = div 2.0f, %8
+    store %a, %9
+    %10:f32 = load %a
+    %x_30:f32 = let %10
+    %12:f32 = load %a
+    %x_32:f32 = let %12
+    %14:bool = gt %x_30, 7.90000009536743164062f
+    %15:bool = lt %x_32, 8.1000003814697265625f
+    %16:bool = and %14, %15
+    if %16 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
@@ -39,12 +42,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %15:void = call %main_1
-    %16:vec4<f32> = load %x_GLF_color
-    %17:main_out = construct %16
-    ret %17
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %18:void = call %main_1
+    %19:vec4<f32> = load %x_GLF_color
+    %20:main_out = construct %19
+    ret %20
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-mul-div/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-mul-div/0-opt.spvasm.expected.ir.msl
index 2e41d63..684b9a9 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-mul-div/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-mul-div/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:f32 @offset(0)
 }
 
@@ -8,13 +8,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %f:ptr<function, f32, read_write> = var
     %5:ptr<uniform, f32, read> = access %x_6, 0u
     %6:f32 = load %5
@@ -26,12 +26,12 @@
     %11:f32 = load %f
     %12:bool = lt %11, 8.1000003814697265625f
     %13:bool = and %10, %12
-    if %13 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    if %13 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
@@ -39,8 +39,8 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
+%tint_symbol = @fragment func():main_out {
+  $B5: {
     %15:void = call %main_1
     %16:vec4<f32> = load %x_GLF_color
     %17:main_out = construct %16
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-mul-div/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-mul-div/0-opt.wgsl.expected.ir.msl
index b6a6d6c..645c7c5 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-mul-div/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-mul-div/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:f32 @offset(0)
 }
 
@@ -8,30 +8,33 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %f:ptr<function, f32, read_write> = var
     %5:ptr<uniform, f32, read> = access %x_6, 0u
-    %x_28:f32 = load %5
-    %7:f32 = div 2.0f, %x_28
-    %8:f32 = mul 4.0f, %7
-    store %f, %8
-    %x_31:f32 = load %f
-    %x_33:f32 = load %f
-    %11:bool = gt %x_31, 7.90000009536743164062f
-    %12:bool = lt %x_33, 8.1000003814697265625f
-    %13:bool = and %11, %12
-    if %13 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    %6:f32 = load %5
+    %x_28:f32 = let %6
+    %8:f32 = div 2.0f, %x_28
+    %9:f32 = mul 4.0f, %8
+    store %f, %9
+    %10:f32 = load %f
+    %x_31:f32 = let %10
+    %12:f32 = load %f
+    %x_33:f32 = let %12
+    %14:bool = gt %x_31, 7.90000009536743164062f
+    %15:bool = lt %x_33, 8.1000003814697265625f
+    %16:bool = and %14, %15
+    if %16 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
@@ -39,12 +42,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %15:void = call %main_1
-    %16:vec4<f32> = load %x_GLF_color
-    %17:main_out = construct %16
-    ret %17
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %18:void = call %main_1
+    %19:vec4<f32> = load %x_GLF_color
+    %20:main_out = construct %19
+    ret %20
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-add/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-add/0-opt.spvasm.expected.ir.msl
index efdd3b1..6e28183 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-add/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-add/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,78 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+}
+
+%main_1 = func():void {
+  $B2: {
+    %b:ptr<function, bool, read_write> = var
+    %i:ptr<function, i32, read_write> = var
+    %a:ptr<function, f32, read_write> = var
+    store %b, false
+    store %i, 1i
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %6:i32 = load %i
+        %7:bool = gt %6, 0i
+        if %7 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
+            exit_if  # if_1
+          }
+          $B6: {  # false
+            exit_loop  # loop_1
+          }
+        }
+        %8:i32 = load %i
+        %9:f32 = convert %8
+        %10:f32 = add 1.0f, %9
+        store %a, %10
+        %11:f32 = load %a
+        %12:f32 = sub 2.0f, %11
+        %13:bool = eq %12, 0.0f
+        if %13 [t: $B7] {  # if_2
+          $B7: {  # true
+            store %b, true
+            exit_if  # if_2
+          }
+        }
+        continue  # -> $B4
+      }
+      $B4: {  # continuing
+        %14:i32 = load %i
+        %15:i32 = sub %14, 1i
+        store %i, %15
+        next_iteration  # -> $B3
+      }
+    }
+    %16:bool = load %b
+    if %16 [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: {
+    %18:void = call %main_1
+    %19:vec4<f32> = load %x_GLF_color
+    %20:main_out = construct %19
+    ret %20
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-add/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-add/0-opt.wgsl.expected.ir.msl
index efdd3b1..159a513 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-add/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-add/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,83 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+}
+
+%main_1 = func():void {
+  $B2: {
+    %b:ptr<function, bool, read_write> = var
+    %i:ptr<function, i32, read_write> = var
+    %a:ptr<function, f32, read_write> = var
+    store %b, false
+    store %i, 1i
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %6:i32 = load %i
+        %x_7:i32 = let %6
+        %8:bool = gt %x_7, 0i
+        if %8 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
+            exit_if  # if_1
+          }
+          $B6: {  # false
+            exit_loop  # loop_1
+          }
+        }
+        %9:i32 = load %i
+        %x_8:i32 = let %9
+        %11:f32 = convert %x_8
+        %12:f32 = add 1.0f, %11
+        store %a, %12
+        %13:f32 = load %a
+        %x_39:f32 = let %13
+        %15:f32 = sub 2.0f, %x_39
+        %16:bool = eq %15, 0.0f
+        if %16 [t: $B7] {  # if_2
+          $B7: {  # true
+            store %b, true
+            exit_if  # if_2
+          }
+        }
+        continue  # -> $B4
+      }
+      $B4: {  # continuing
+        %17:i32 = load %i
+        %x_9:i32 = let %17
+        %19:i32 = sub %x_9, 1i
+        store %i, %19
+        next_iteration  # -> $B3
+      }
+    }
+    %20:bool = load %b
+    %x_44:bool = let %20
+    if %x_44 [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: {
+    %23:void = call %main_1
+    %24:vec4<f32> = load %x_GLF_color
+    %25:main_out = construct %24
+    ret %25
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-sub/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-sub/0-opt.spvasm.expected.ir.msl
index efdd3b1..4f55947 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-sub/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-sub/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,78 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+}
+
+%main_1 = func():void {
+  $B2: {
+    %b:ptr<function, bool, read_write> = var
+    %i:ptr<function, i32, read_write> = var
+    %a:ptr<function, f32, read_write> = var
+    store %b, false
+    store %i, 1i
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %6:i32 = load %i
+        %7:bool = gt %6, 0i
+        if %7 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
+            exit_if  # if_1
+          }
+          $B6: {  # false
+            exit_loop  # loop_1
+          }
+        }
+        %8:i32 = load %i
+        %9:f32 = convert %8
+        %10:f32 = sub 3.0f, %9
+        store %a, %10
+        %11:f32 = load %a
+        %12:f32 = sub 2.0f, %11
+        %13:bool = eq %12, 0.0f
+        if %13 [t: $B7] {  # if_2
+          $B7: {  # true
+            store %b, true
+            exit_if  # if_2
+          }
+        }
+        continue  # -> $B4
+      }
+      $B4: {  # continuing
+        %14:i32 = load %i
+        %15:i32 = sub %14, 1i
+        store %i, %15
+        next_iteration  # -> $B3
+      }
+    }
+    %16:bool = load %b
+    if %16 [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: {
+    %18:void = call %main_1
+    %19:vec4<f32> = load %x_GLF_color
+    %20:main_out = construct %19
+    ret %20
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-sub/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-sub/0-opt.wgsl.expected.ir.msl
index efdd3b1..8f16a37 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-sub/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-sub/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,83 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+}
+
+%main_1 = func():void {
+  $B2: {
+    %b:ptr<function, bool, read_write> = var
+    %i:ptr<function, i32, read_write> = var
+    %a:ptr<function, f32, read_write> = var
+    store %b, false
+    store %i, 1i
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %6:i32 = load %i
+        %x_7:i32 = let %6
+        %8:bool = gt %x_7, 0i
+        if %8 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
+            exit_if  # if_1
+          }
+          $B6: {  # false
+            exit_loop  # loop_1
+          }
+        }
+        %9:i32 = load %i
+        %x_8:i32 = let %9
+        %11:f32 = convert %x_8
+        %12:f32 = sub 3.0f, %11
+        store %a, %12
+        %13:f32 = load %a
+        %x_40:f32 = let %13
+        %15:f32 = sub 2.0f, %x_40
+        %16:bool = eq %15, 0.0f
+        if %16 [t: $B7] {  # if_2
+          $B7: {  # true
+            store %b, true
+            exit_if  # if_2
+          }
+        }
+        continue  # -> $B4
+      }
+      $B4: {  # continuing
+        %17:i32 = load %i
+        %x_9:i32 = let %17
+        %19:i32 = sub %x_9, 1i
+        store %i, %19
+        next_iteration  # -> $B3
+      }
+    }
+    %20:bool = load %b
+    %x_45:bool = let %20
+    if %x_45 [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: {
+    %23:void = call %main_1
+    %24:vec4<f32> = load %x_GLF_color
+    %25:main_out = construct %24
+    ret %25
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-var-sub/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-var-sub/0-opt.spvasm.expected.ir.msl
index 260689d..6418107 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-var-sub/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-var-sub/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   five:i32 @offset(0)
 }
 
@@ -8,26 +8,26 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %i:ptr<function, i32, read_write> = var
     %5:ptr<uniform, i32, read> = access %x_6, 0u
     %6:i32 = load %5
     store %i, %6
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %7:i32 = load %i
         %8:bool = gt %7, 0i
-        if %8 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %8 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
@@ -37,20 +37,20 @@
         %11:i32 = load %i
         %12:i32 = sub %11, 1i
         store %i, %12
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
     %13:i32 = load %i
     %14:bool = eq %13, -1i
-    if %14 [t: %b7, f: %b8] {  # if_2
-      %b7 = block {  # true
+    if %14 [t: $B7, f: $B8] {  # if_2
+      $B7: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_2
       }
-      %b8 = block {  # false
+      $B8: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_2
       }
@@ -58,8 +58,8 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b9 {
-  %b9 = block {
+%tint_symbol = @fragment func():main_out {
+  $B9: {
     %16:void = call %main_1
     %17:vec4<f32> = load %x_GLF_color
     %18:main_out = construct %17
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-var-sub/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-var-sub/0-opt.wgsl.expected.ir.msl
index 43ad1be..d26ab3b 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-var-sub/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-var-sub/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   five:i32 @offset(0)
 }
 
@@ -8,49 +8,54 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %i:ptr<function, i32, read_write> = var
     %5:ptr<uniform, i32, read> = access %x_6, 0u
-    %x_26:i32 = load %5
+    %6:i32 = load %5
+    %x_26:i32 = let %6
     store %i, %x_26
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_31:i32 = load %i
-        %8:bool = gt %x_31, 0i
-        if %8 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %8:i32 = load %i
+        %x_31:i32 = let %8
+        %10:bool = gt %x_31, 0i
+        if %10 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_34:i32 = load %i
-        %10:i32 = sub %x_34, 1i
-        store %i, %10
-        %x_36:i32 = load %i
-        %12:i32 = sub %x_36, 1i
-        store %i, %12
-        continue %b4
+        %11:i32 = load %i
+        %x_34:i32 = let %11
+        %13:i32 = sub %x_34, 1i
+        store %i, %13
+        %14:i32 = load %i
+        %x_36:i32 = let %14
+        %16:i32 = sub %x_36, 1i
+        store %i, %16
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
-    %x_38:i32 = load %i
-    %14:bool = eq %x_38, -1i
-    if %14 [t: %b7, f: %b8] {  # if_2
-      %b7 = block {  # true
+    %17:i32 = load %i
+    %x_38:i32 = let %17
+    %19:bool = eq %x_38, -1i
+    if %19 [t: $B7, f: $B8] {  # if_2
+      $B7: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_2
       }
-      %b8 = block {  # false
+      $B8: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_2
       }
@@ -58,12 +63,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b9 {
-  %b9 = block {
-    %16:void = call %main_1
-    %17:vec4<f32> = load %x_GLF_color
-    %18:main_out = construct %17
-    ret %18
+%tint_symbol = @fragment func():main_out {
+  $B9: {
+    %21:void = call %main_1
+    %22:vec4<f32> = load %x_GLF_color
+    %23:main_out = construct %22
+    ret %23
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-mix-uniform-weight/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-mix-uniform-weight/0-opt.spvasm.expected.ir.msl
index dc94ae1..9f6eba1 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-mix-uniform-weight/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-mix-uniform-weight/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:f32 @offset(0)
 }
 
@@ -8,13 +8,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %v:ptr<function, vec3<f32>, read_write> = var
     %d:ptr<function, f32, read_write> = var
     %6:ptr<uniform, f32, read> = access %x_6, 0u
@@ -27,14 +27,14 @@
     store %d, %11
     %12:f32 = load %d
     %13:bool = lt %12, 0.10000000149011611938f
-    if %13 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    if %13 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         %14:f32 = load_vector_element %v, 0u
         %15:vec4<f32> = construct %14, 0.0f, 0.0f, 1.0f
         store %x_GLF_color, %15
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
@@ -42,8 +42,8 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
+%tint_symbol = @fragment func():main_out {
+  $B5: {
     %17:void = call %main_1
     %18:vec4<f32> = load %x_GLF_color
     %19:main_out = construct %18
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-mix-uniform-weight/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-mix-uniform-weight/0-opt.wgsl.expected.ir.msl
index d6f6a24..601ba78 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-mix-uniform-weight/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-mix-uniform-weight/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:f32 @offset(0)
 }
 
@@ -8,33 +8,37 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %v:ptr<function, vec3<f32>, read_write> = var
     %d:ptr<function, f32, read_write> = var
     %6:ptr<uniform, f32, read> = access %x_6, 0u
-    %x_36:f32 = load %6
-    %8:vec3<f32> = construct %x_36, %x_36, %x_36
-    %9:vec3<f32> = mix vec3<f32>(5.0f, 8.0f, -12.19999980926513671875f), vec3<f32>(1.0f, 4.90000009536743164062f, -2.09999990463256835938f), %8
-    store %v, %9
-    %x_39:vec3<f32> = load %v
-    %11:f32 = distance %x_39, vec3<f32>(1.0f, 4.90000009536743164062f, -2.09999990463256835938f)
-    store %d, %11
-    %x_41:f32 = load %d
-    %13:bool = lt %x_41, 0.10000000149011611938f
-    if %13 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %x_47:f32 = load_vector_element %v, 0u
-        %15:vec4<f32> = construct %x_47, 0.0f, 0.0f, 1.0f
-        store %x_GLF_color, %15
+    %7:f32 = load %6
+    %x_36:f32 = let %7
+    %9:vec3<f32> = construct %x_36, %x_36, %x_36
+    %10:vec3<f32> = mix vec3<f32>(5.0f, 8.0f, -12.19999980926513671875f), vec3<f32>(1.0f, 4.90000009536743164062f, -2.09999990463256835938f), %9
+    store %v, %10
+    %11:vec3<f32> = load %v
+    %x_39:vec3<f32> = let %11
+    %13:f32 = distance %x_39, vec3<f32>(1.0f, 4.90000009536743164062f, -2.09999990463256835938f)
+    store %d, %13
+    %14:f32 = load %d
+    %x_41:f32 = let %14
+    %16:bool = lt %x_41, 0.10000000149011611938f
+    if %16 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %17:f32 = load_vector_element %v, 0u
+        %x_47:f32 = let %17
+        %19:vec4<f32> = construct %x_47, 0.0f, 0.0f, 1.0f
+        store %x_GLF_color, %19
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
@@ -42,12 +46,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %17:void = call %main_1
-    %18:vec4<f32> = load %x_GLF_color
-    %19:main_out = construct %18
-    ret %19
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %21:void = call %main_1
+    %22:vec4<f32> = load %x_GLF_color
+    %23:main_out = construct %22
+    ret %23
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-div/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-div/0-opt.spvasm.expected.ir.msl
index d3e8ffe..21a6e3a 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-div/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-div/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   four:i32 @offset(0)
 }
 
@@ -8,24 +8,24 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %4:ptr<uniform, i32, read> = access %x_5, 0u
     %5:i32 = load %4
-    %6:i32 = div %5, 2i
-    %7:i32 = negation %6
-    %8:bool = eq %7, -2i
-    if %8 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    %6:i32 = call %tint_div_i32, %5, 2i
+    %8:i32 = negation %6
+    %9:bool = eq %8, -2i
+    if %9 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
@@ -33,12 +33,24 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %10:void = call %main_1
-    %11:vec4<f32> = load %x_GLF_color
-    %12:main_out = construct %11
-    ret %12
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %11:void = call %main_1
+    %12:vec4<f32> = load %x_GLF_color
+    %13:main_out = construct %12
+    ret %13
+  }
+}
+%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B6: {
+    %16:bool = eq %rhs, 0i
+    %17:bool = eq %lhs, -2147483648i
+    %18:bool = eq %rhs, -1i
+    %19:bool = and %17, %18
+    %20:bool = or %16, %19
+    %21:i32 = select %rhs, 1i, %20
+    %22:i32 = div %lhs, %21
+    ret %22
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-div/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-div/0-opt.wgsl.expected.ir.msl
index b7eac82..008ef01 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-div/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-div/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   four:i32 @offset(0)
 }
 
@@ -8,24 +8,25 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %4:ptr<uniform, i32, read> = access %x_5, 0u
-    %x_6:i32 = load %4
-    %6:i32 = div %x_6, 2i
-    %7:i32 = negation %6
-    %8:bool = eq %7, -2i
-    if %8 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    %5:i32 = load %4
+    %x_6:i32 = let %5
+    %7:i32 = call %tint_div_i32, %x_6, 2i
+    %9:i32 = negation %7
+    %10:bool = eq %9, -2i
+    if %10 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
@@ -33,12 +34,24 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %10:void = call %main_1
-    %11:vec4<f32> = load %x_GLF_color
-    %12:main_out = construct %11
-    ret %12
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %12:void = call %main_1
+    %13:vec4<f32> = load %x_GLF_color
+    %14:main_out = construct %13
+    ret %14
+  }
+}
+%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B6: {
+    %17:bool = eq %rhs, 0i
+    %18:bool = eq %lhs, -2147483648i
+    %19:bool = eq %rhs, -1i
+    %20:bool = and %18, %19
+    %21:bool = or %17, %20
+    %22:i32 = select %rhs, 1i, %21
+    %23:i32 = div %lhs, %22
+    ret %23
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-sub/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-sub/0-opt.spvasm.expected.ir.msl
index 6f91c16..3b1186d 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-sub/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-sub/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:i32 @offset(0)
 }
 
@@ -8,13 +8,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %x:ptr<function, i32, read_write> = var
     %5:ptr<uniform, i32, read> = access %x_6, 0u
     %6:i32 = load %5
@@ -23,12 +23,12 @@
     store %x, %8
     %9:i32 = load %x
     %10:bool = eq %9, -4i
-    if %10 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    if %10 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
@@ -36,8 +36,8 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
+%tint_symbol = @fragment func():main_out {
+  $B5: {
     %12:void = call %main_1
     %13:vec4<f32> = load %x_GLF_color
     %14:main_out = construct %13
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-sub/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-sub/0-opt.wgsl.expected.ir.msl
index 3264457..4e65344 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-sub/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-sub/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:i32 @offset(0)
 }
 
@@ -8,27 +8,29 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %x:ptr<function, i32, read_write> = var
     %5:ptr<uniform, i32, read> = access %x_6, 0u
-    %x_26:i32 = load %5
-    %7:i32 = sub 5i, %x_26
-    %8:i32 = negation %7
-    store %x, %8
-    %x_29:i32 = load %x
-    %10:bool = eq %x_29, -4i
-    if %10 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    %6:i32 = load %5
+    %x_26:i32 = let %6
+    %8:i32 = sub 5i, %x_26
+    %9:i32 = negation %8
+    store %x, %9
+    %10:i32 = load %x
+    %x_29:i32 = let %10
+    %12:bool = eq %x_29, -4i
+    if %12 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
@@ -36,12 +38,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %12:void = call %main_1
-    %13:vec4<f32> = load %x_GLF_color
-    %14:main_out = construct %13
-    ret %14
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %14:void = call %main_1
+    %15:vec4<f32> = load %x_GLF_color
+    %16:main_out = construct %15
+    ret %16
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-redundant-mix/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-redundant-mix/0-opt.spvasm.expected.ir.msl
index 42697ad..b69a1fc 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-redundant-mix/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-redundant-mix/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,24 +8,24 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %4:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
     %5:vec2<f32> = load %4
     %6:vec2<f32> = mix %5, vec2<f32>(1.0f), vec2<f32>(0.0f)
     %7:vec2<bool> = eq %6, vec2<f32>(0.0f, 1.0f)
     %8:bool = all %7
-    if %8 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    if %8 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
@@ -33,8 +33,8 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
+%tint_symbol = @fragment func():main_out {
+  $B5: {
     %10:void = call %main_1
     %11:vec4<f32> = load %x_GLF_color
     %12:main_out = construct %11
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-redundant-mix/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-redundant-mix/0-opt.wgsl.expected.ir.msl
index 9d62bb2..d2a614f 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-redundant-mix/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-redundant-mix/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,24 +8,25 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %4:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
-    %x_27:vec2<f32> = load %4
-    %6:vec2<f32> = mix %x_27, vec2<f32>(1.0f), vec2<f32>(0.0f)
-    %7:vec2<bool> = eq %6, vec2<f32>(0.0f, 1.0f)
-    %8:bool = all %7
-    if %8 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    %5:vec2<f32> = load %4
+    %x_27:vec2<f32> = let %5
+    %7:vec2<f32> = mix %x_27, vec2<f32>(1.0f), vec2<f32>(0.0f)
+    %8:vec2<bool> = eq %7, vec2<f32>(0.0f, 1.0f)
+    %9:bool = all %8
+    if %9 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
@@ -33,12 +34,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %10:void = call %main_1
-    %11:vec4<f32> = load %x_GLF_color
-    %12:main_out = construct %11
-    ret %12
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %11:void = call %main_1
+    %12:vec4<f32> = load %x_GLF_color
+    %13:main_out = construct %12
+    ret %13
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-extract/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-extract/0-opt.spvasm.expected.ir.msl
index a8eb2fa..2d8052a 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-extract/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-extract/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,24 +8,24 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %4:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
     %5:vec2<f32> = load %4
     %6:vec2<f32> = select %5, vec2<f32>(1.0f), vec2<bool>(false)
     %7:f32 = access %6, 0u
     %8:bool = eq %7, 0.0f
-    if %8 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    if %8 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
@@ -33,8 +33,8 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
+%tint_symbol = @fragment func():main_out {
+  $B5: {
     %10:void = call %main_1
     %11:vec4<f32> = load %x_GLF_color
     %12:main_out = construct %11
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-extract/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-extract/0-opt.wgsl.expected.ir.msl
index 38c1cab..54e7da0 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-extract/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-extract/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,24 +8,25 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %4:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
-    %x_29:vec2<f32> = load %4
-    %6:vec2<f32> = select %x_29, vec2<f32>(1.0f), vec2<bool>(false)
-    %7:f32 = access %6, 0u
-    %8:bool = eq %7, 0.0f
-    if %8 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    %5:vec2<f32> = load %4
+    %x_29:vec2<f32> = let %5
+    %7:vec2<f32> = select %x_29, vec2<f32>(1.0f), vec2<bool>(false)
+    %8:f32 = access %7, 0u
+    %9:bool = eq %8, 0.0f
+    if %9 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
@@ -33,12 +34,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %10:void = call %main_1
-    %11:vec4<f32> = load %x_GLF_color
-    %12:main_out = construct %11
-    ret %12
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %11:void = call %main_1
+    %12:vec4<f32> = load %x_GLF_color
+    %13:main_out = construct %12
+    ret %13
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-mix/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-mix/0-opt.spvasm.expected.ir.msl
index 719a012..01b399b 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-mix/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-mix/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   threeandfour:vec2<f32> @offset(0)
 }
 
@@ -8,13 +8,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %v:ptr<function, vec4<f32>, read_write> = var
     store %v, vec4<f32>(2.0f, 3.0f, 4.0f, 5.0f)
     %5:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
@@ -29,12 +29,12 @@
     %13:vec4<f32> = load %v
     %14:vec4<bool> = eq %13, vec4<f32>(1.0f, 6.0f, 4.0f, 5.0f)
     %15:bool = all %14
-    if %15 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    if %15 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
@@ -42,8 +42,8 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
+%tint_symbol = @fragment func():main_out {
+  $B5: {
     %17:void = call %main_1
     %18:vec4<f32> = load %x_GLF_color
     %19:main_out = construct %18
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-mix/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-mix/0-opt.wgsl.expected.ir.msl
index 7545fce..a7d5cfc 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-mix/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-mix/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   threeandfour:vec2<f32> @offset(0)
 }
 
@@ -8,35 +8,39 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %v:ptr<function, vec4<f32>, read_write> = var
     store %v, vec4<f32>(2.0f, 3.0f, 4.0f, 5.0f)
     %5:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %x_40:f32 = load_vector_element %5, 1u
-    %7:vec2<f32> = construct 1.0f, %x_40
-    %x_42:vec2<f32> = select vec2<f32>(2.0f, 6.0f), %7, vec2<bool>(true, false)
-    %x_43:vec4<f32> = load %v
-    %10:f32 = access %x_42, 0u
-    %11:f32 = access %x_42, 1u
-    %12:f32 = access %x_43, 2u
-    %13:f32 = access %x_43, 3u
-    %14:vec4<f32> = construct %10, %11, %12, %13
-    store %v, %14
-    %x_45:vec4<f32> = load %v
-    %16:vec4<bool> = eq %x_45, vec4<f32>(1.0f, 6.0f, 4.0f, 5.0f)
-    %17:bool = all %16
-    if %17 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    %6:f32 = load_vector_element %5, 1u
+    %x_40:f32 = let %6
+    %8:vec2<f32> = construct 1.0f, %x_40
+    %9:vec2<f32> = select vec2<f32>(2.0f, 6.0f), %8, vec2<bool>(true, false)
+    %x_42:vec2<f32> = let %9
+    %11:vec4<f32> = load %v
+    %x_43:vec4<f32> = let %11
+    %13:f32 = access %x_42, 0u
+    %14:f32 = access %x_42, 1u
+    %15:f32 = access %x_43, 2u
+    %16:f32 = access %x_43, 3u
+    %17:vec4<f32> = construct %13, %14, %15, %16
+    store %v, %17
+    %18:vec4<f32> = load %v
+    %x_45:vec4<f32> = let %18
+    %20:vec4<bool> = eq %x_45, vec4<f32>(1.0f, 6.0f, 4.0f, 5.0f)
+    %21:bool = all %20
+    if %21 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
@@ -44,12 +48,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %19:void = call %main_1
-    %20:vec4<f32> = load %x_GLF_color
-    %21:main_out = construct %20
-    ret %21
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %23:void = call %main_1
+    %24:vec4<f32> = load %x_GLF_color
+    %25:main_out = construct %24
+    ret %25
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-split-vector-init/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-split-vector-init/0-opt.spvasm.expected.ir.msl
index 94e248c..52366d8 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-split-vector-init/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-split-vector-init/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,50 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Swizzle
+../../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
+}
+
+%main_1 = func():void {
+  $B2: {
+    %v:ptr<function, vec4<f32>, read_write> = var
+    %4:vec4<f32> = load %v
+    %5:vec2<f32> = swizzle %4, zw
+    %6:vec4<f32> = construct vec2<f32>(1.0f), %5
+    store %v, %6
+    %7:vec4<f32> = load %v
+    %8:vec2<f32> = swizzle %7, xy
+    %9:vec4<f32> = construct %8, vec2<f32>(2.0f)
+    store %v, %9
+    %10:vec4<f32> = load %v
+    %11:vec4<bool> = eq %10, vec4<f32>(1.0f, 1.0f, 2.0f, 2.0f)
+    %12:bool = all %11
+    if %12 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        exit_if  # if_1
+      }
+      $B4: {  # false
+        store %x_GLF_color, vec4<f32>(0.0f)
+        exit_if  # if_1
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %14:void = call %main_1
+    %15:vec4<f32> = load %x_GLF_color
+    %16:main_out = construct %15
+    ret %16
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-split-vector-init/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-split-vector-init/0-opt.wgsl.expected.ir.msl
index 28251dc..de748c6 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-split-vector-init/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-split-vector-init/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,55 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
+../../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
+}
+
+%main_1 = func():void {
+  $B2: {
+    %v:ptr<function, vec4<f32>, read_write> = var
+    %4:vec4<f32> = load %v
+    %x_23:vec4<f32> = let %4
+    %6:f32 = access %x_23, 2u
+    %7:f32 = access %x_23, 3u
+    %8:vec4<f32> = construct 1.0f, 1.0f, %6, %7
+    store %v, %8
+    %9:vec4<f32> = load %v
+    %x_25:vec4<f32> = let %9
+    %11:f32 = access %x_25, 0u
+    %12:f32 = access %x_25, 1u
+    %13:vec4<f32> = construct %11, %12, 2.0f, 2.0f
+    store %v, %13
+    %14:vec4<f32> = load %v
+    %x_27:vec4<f32> = let %14
+    %16:vec4<bool> = eq %x_27, vec4<f32>(1.0f, 1.0f, 2.0f, 2.0f)
+    %17:bool = all %16
+    if %17 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        exit_if  # if_1
+      }
+      $B4: {  # false
+        store %x_GLF_color, vec4<f32>(0.0f)
+        exit_if  # if_1
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %19:void = call %main_1
+    %20:vec4<f32> = load %x_GLF_color
+    %21:main_out = construct %20
+    ret %21
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-vec-mix-uniform/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-vec-mix-uniform/0-opt.spvasm.expected.ir.msl
index d52d40d..56f034c 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-vec-mix-uniform/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-vec-mix-uniform/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   zeroOne:vec2<f32> @offset(0)
 }
 
@@ -8,13 +8,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %v:ptr<function, vec2<f32>, read_write> = var
     %d:ptr<function, f32, read_write> = var
     %6:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
@@ -26,8 +26,8 @@
     store %d, %10
     %11:f32 = load %d
     %12:bool = lt %11, 0.10000000149011611938f
-    if %12 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    if %12 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         %13:f32 = load_vector_element %v, 0u
         %14:f32 = sub %13, 1.0f
         %15:f32 = load_vector_element %v, 1u
@@ -36,7 +36,7 @@
         store %x_GLF_color, %17
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
@@ -44,8 +44,8 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
+%tint_symbol = @fragment func():main_out {
+  $B5: {
     %19:void = call %main_1
     %20:vec4<f32> = load %x_GLF_color
     %21:main_out = construct %20
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-vec-mix-uniform/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-vec-mix-uniform/0-opt.wgsl.expected.ir.msl
index c996cb9..a74ee08 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-vec-mix-uniform/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-rules-vec-mix-uniform/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   zeroOne:vec2<f32> @offset(0)
 }
 
@@ -8,35 +8,40 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %v:ptr<function, vec2<f32>, read_write> = var
     %d:ptr<function, f32, read_write> = var
     %6:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %x_37:vec2<f32> = load %6
-    %8:vec2<f32> = mix vec2<f32>(2.0f, 3.0f), vec2<f32>(4.0f, 5.0f), %x_37
-    store %v, %8
-    %x_39:vec2<f32> = load %v
-    %10:f32 = distance %x_39, vec2<f32>(2.0f, 5.0f)
-    store %d, %10
-    %x_41:f32 = load %d
-    %12:bool = lt %x_41, 0.10000000149011611938f
-    if %12 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %x_47:f32 = load_vector_element %v, 0u
-        %x_50:f32 = load_vector_element %v, 1u
-        %15:f32 = sub %x_47, 1.0f
-        %16:f32 = sub %x_50, 5.0f
-        %17:vec4<f32> = construct %15, %16, 0.0f, 1.0f
-        store %x_GLF_color, %17
+    %7:vec2<f32> = load %6
+    %x_37:vec2<f32> = let %7
+    %9:vec2<f32> = mix vec2<f32>(2.0f, 3.0f), vec2<f32>(4.0f, 5.0f), %x_37
+    store %v, %9
+    %10:vec2<f32> = load %v
+    %x_39:vec2<f32> = let %10
+    %12:f32 = distance %x_39, vec2<f32>(2.0f, 5.0f)
+    store %d, %12
+    %13:f32 = load %d
+    %x_41:f32 = let %13
+    %15:bool = lt %x_41, 0.10000000149011611938f
+    if %15 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %16:f32 = load_vector_element %v, 0u
+        %x_47:f32 = let %16
+        %18:f32 = load_vector_element %v, 1u
+        %x_50:f32 = let %18
+        %20:f32 = sub %x_47, 1.0f
+        %21:f32 = sub %x_50, 5.0f
+        %22:vec4<f32> = construct %20, %21, 0.0f, 1.0f
+        store %x_GLF_color, %22
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
@@ -44,12 +49,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %19:void = call %main_1
-    %20:vec4<f32> = load %x_GLF_color
-    %21:main_out = construct %20
-    ret %21
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %24:void = call %main_1
+    %25:vec4<f32> = load %x_GLF_color
+    %26:main_out = construct %25
+    ret %26
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-for-array-initializing-modulo/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-for-array-initializing-modulo/0-opt.spvasm.expected.ir.msl
index 347342e..bafcd62 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-for-array-initializing-modulo/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-for-array-initializing-modulo/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,79 +12,99 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %i:ptr<function, i32, read_write> = var
     %a:ptr<function, array<i32, 2>, read_write> = var
     %6:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
     %7:i32 = load %6
     store %i, %7
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %8:i32 = load %i
         %9:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
         %10:i32 = load %9
         %11:bool = lt %8, %10
-        if %11 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %11 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
         %12:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
         %13:i32 = load %12
-        %14:i32 = load %i
-        %15:vec2<i32> = construct %14
-        %16:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-        %17:i32 = load %16
-        %18:vec2<i32> = construct 3i, %17
-        %19:vec2<i32> = mod %15, %18
-        %20:i32 = access %19, 1u
-        %21:array<i32, 2> = construct %13, %20
-        store %a, %21
-        continue %b4
+        %14:i32 = let %13
+        %15:i32 = load %i
+        %16:vec2<i32> = construct %15
+        %17:vec2<i32> = let %16
+        %18:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+        %19:i32 = load %18
+        %20:vec2<i32> = construct 3i, %19
+        %21:vec2<i32> = call %tint_mod_v2i32, %17, %20
+        %23:i32 = access %21, 1u
+        %24:array<i32, 2> = construct %14, %23
+        store %a, %24
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %22:i32 = load %i
-        %23:i32 = add %22, 1i
-        store %i, %23
-        next_iteration %b3
+      $B4: {  # continuing
+        %25:i32 = load %i
+        %26:i32 = add %25, 1i
+        store %i, %26
+        next_iteration  # -> $B3
       }
     }
-    %24:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %25:i32 = load %24
-    %26:ptr<function, i32, read_write> = access %a, %25
-    %27:i32 = load %26
-    %28:f32 = convert %27
-    %29:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %27:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %28:i32 = load %27
+    %29:ptr<function, i32, read_write> = access %a, %28
     %30:i32 = load %29
     %31:f32 = convert %30
-    %32:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %33:i32 = load %32
-    %34:f32 = convert %33
-    %35:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %36:i32 = load %35
-    %37:ptr<function, i32, read_write> = access %a, %36
+    %32:f32 = let %31
+    %33:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %34:i32 = load %33
+    %35:f32 = convert %34
+    %36:f32 = let %35
+    %37:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
     %38:i32 = load %37
     %39:f32 = convert %38
-    %40:vec4<f32> = construct %28, %31, %34, %39
-    store %x_GLF_color, %40
+    %40:f32 = let %39
+    %41:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %42:i32 = load %41
+    %43:ptr<function, i32, read_write> = access %a, %42
+    %44:i32 = load %43
+    %45:f32 = convert %44
+    %46:vec4<f32> = construct %32, %36, %40, %45
+    store %x_GLF_color, %46
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b7 {
-  %b7 = block {
-    %42:void = call %main_1
-    %43:vec4<f32> = load %x_GLF_color
-    %44:main_out = construct %43
-    ret %44
+%tint_symbol = @fragment func():main_out {
+  $B7: {
+    %48:void = call %main_1
+    %49:vec4<f32> = load %x_GLF_color
+    %50:main_out = construct %49
+    ret %50
+  }
+}
+%tint_mod_v2i32 = func(%lhs:vec2<i32>, %rhs:vec2<i32>):vec2<i32> {
+  $B8: {
+    %53:vec2<bool> = eq %rhs, vec2<i32>(0i)
+    %54:vec2<bool> = eq %lhs, vec2<i32>(-2147483648i)
+    %55:vec2<bool> = eq %rhs, vec2<i32>(-1i)
+    %56:vec2<bool> = and %54, %55
+    %57:vec2<bool> = or %53, %56
+    %58:vec2<i32> = select %rhs, vec2<i32>(1i), %57
+    %59:vec2<i32> = let %58
+    %60:vec2<i32> = div %lhs, %59
+    %61:vec2<i32> = mul %60, %59
+    %62:vec2<i32> = sub %lhs, %61
+    ret %62
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-for-array-initializing-modulo/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-for-array-initializing-modulo/0-opt.wgsl.expected.ir.msl
index baf6744..da02580 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-for-array-initializing-modulo/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-for-array-initializing-modulo/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,79 +12,111 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %i:ptr<function, i32, read_write> = var
     %a:ptr<function, array<i32, 2>, read_write> = var
     %6:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_32:i32 = load %6
+    %7:i32 = load %6
+    %x_32:i32 = let %7
     store %i, %x_32
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_37:i32 = load %i
-        %9:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_39:i32 = load %9
-        %11:bool = lt %x_37, %x_39
-        if %11 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %9:i32 = load %i
+        %x_37:i32 = let %9
+        %11:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %12:i32 = load %11
+        %x_39:i32 = let %12
+        %14:bool = lt %x_37, %x_39
+        if %14 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %12:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_43:i32 = load %12
-        %x_44:i32 = load %i
-        %15:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-        %x_46:i32 = load %15
-        %17:vec2<i32> = construct %x_44, %x_44
-        %18:vec2<i32> = construct 3i, %x_46
-        %19:vec2<i32> = mod %17, %18
-        %20:i32 = access %19, 1u
-        %21:array<i32, 2> = construct %x_43, %20
-        store %a, %21
-        continue %b4
+        %15:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %16:i32 = load %15
+        %x_43:i32 = let %16
+        %18:i32 = load %i
+        %x_44:i32 = let %18
+        %20:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+        %21:i32 = load %20
+        %x_46:i32 = let %21
+        %23:vec2<i32> = construct %x_44, %x_44
+        %24:vec2<i32> = let %23
+        %25:vec2<i32> = construct 3i, %x_46
+        %26:vec2<i32> = call %tint_mod_v2i32, %24, %25
+        %28:i32 = access %26, 1u
+        %29:array<i32, 2> = construct %x_43, %28
+        store %a, %29
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_52:i32 = load %i
-        %23:i32 = add %x_52, 1i
-        store %i, %23
-        next_iteration %b3
+      $B4: {  # continuing
+        %30:i32 = load %i
+        %x_52:i32 = let %30
+        %32:i32 = add %x_52, 1i
+        store %i, %32
+        next_iteration  # -> $B3
       }
     }
-    %24:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_55:i32 = load %24
-    %26:ptr<function, i32, read_write> = access %a, %x_55
-    %x_57:i32 = load %26
-    %28:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_60:i32 = load %28
-    %30:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_63:i32 = load %30
-    %32:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_66:i32 = load %32
-    %34:ptr<function, i32, read_write> = access %a, %x_66
-    %x_68:i32 = load %34
-    %36:f32 = convert %x_57
-    %37:f32 = convert %x_60
-    %38:f32 = convert %x_63
-    %39:f32 = convert %x_68
-    %40:vec4<f32> = construct %36, %37, %38, %39
-    store %x_GLF_color, %40
+    %33:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %34:i32 = load %33
+    %x_55:i32 = let %34
+    %36:ptr<function, i32, read_write> = access %a, %x_55
+    %37:i32 = load %36
+    %x_57:i32 = let %37
+    %39:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %40:i32 = load %39
+    %x_60:i32 = let %40
+    %42:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %43:i32 = load %42
+    %x_63:i32 = let %43
+    %45:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %46:i32 = load %45
+    %x_66:i32 = let %46
+    %48:ptr<function, i32, read_write> = access %a, %x_66
+    %49:i32 = load %48
+    %x_68:i32 = let %49
+    %51:f32 = convert %x_57
+    %52:f32 = let %51
+    %53:f32 = convert %x_60
+    %54:f32 = let %53
+    %55:f32 = convert %x_63
+    %56:f32 = let %55
+    %57:f32 = convert %x_68
+    %58:vec4<f32> = construct %52, %54, %56, %57
+    store %x_GLF_color, %58
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b7 {
-  %b7 = block {
-    %42:void = call %main_1
-    %43:vec4<f32> = load %x_GLF_color
-    %44:main_out = construct %43
-    ret %44
+%tint_symbol = @fragment func():main_out {
+  $B7: {
+    %60:void = call %main_1
+    %61:vec4<f32> = load %x_GLF_color
+    %62:main_out = construct %61
+    ret %62
+  }
+}
+%tint_mod_v2i32 = func(%lhs:vec2<i32>, %rhs:vec2<i32>):vec2<i32> {
+  $B8: {
+    %65:vec2<bool> = eq %rhs, vec2<i32>(0i)
+    %66:vec2<bool> = eq %lhs, vec2<i32>(-2147483648i)
+    %67:vec2<bool> = eq %rhs, vec2<i32>(-1i)
+    %68:vec2<bool> = and %66, %67
+    %69:vec2<bool> = or %65, %68
+    %70:vec2<i32> = select %rhs, vec2<i32>(1i), %69
+    %71:vec2<i32> = let %70
+    %72:vec2<i32> = div %lhs, %71
+    %73:vec2<i32> = mul %72, %71
+    %74:vec2<i32> = sub %lhs, %73
+    ret %74
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-for-loop-min-increment-array-element/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-for-loop-min-increment-array-element/0-opt.spvasm.expected.ir.msl
index 3474e2a..3731cb6 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-for-loop-min-increment-array-element/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-for-loop-min-increment-array-element/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,14 +20,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_9:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %arr:ptr<function, array<f32, 3>, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %7:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
@@ -39,82 +39,87 @@
     %13:array<f32, 3> = construct %8, %10, %12
     store %arr, %13
     store %i, 1i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %14:i32 = load %i
-        %15:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
-        %16:i32 = load %15
-        %17:i32 = min %16, 3i
-        %18:bool = lt %14, %17
-        if %18 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %15:i32 = let %14
+        %16:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
+        %17:i32 = load %16
+        %18:i32 = min %17, 3i
+        %19:bool = lt %15, %18
+        if %19 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %19:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
-        %x_53:i32 = load %19
-        %21:ptr<function, f32, read_write> = access %arr, %x_53
-        %22:ptr<function, f32, read_write> = access %arr, %x_53
-        %23:f32 = load %22
-        %24:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+        %20:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
+        %21:i32 = load %20
+        %x_53:i32 = let %21
+        %23:ptr<function, f32, read_write> = access %arr, %x_53
+        %24:ptr<function, f32, read_write> = access %arr, %x_53
         %25:f32 = load %24
-        %26:f32 = add %23, %25
-        store %21, %26
-        continue %b4
+        %26:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+        %27:f32 = load %26
+        %28:f32 = add %25, %27
+        store %23, %28
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %27:i32 = load %i
-        %28:i32 = add %27, 1i
-        store %i, %28
-        next_iteration %b3
+      $B4: {  # continuing
+        %29:i32 = load %i
+        %30:i32 = add %29, 1i
+        store %i, %30
+        next_iteration  # -> $B3
       }
     }
-    %29:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
-    %30:i32 = load %29
-    %31:ptr<function, f32, read_write> = access %arr, %30
-    %32:f32 = load %31
-    %33:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
+    %31:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
+    %32:i32 = load %31
+    %33:ptr<function, f32, read_write> = access %arr, %32
     %34:f32 = load %33
-    %35:bool = eq %32, %34
-    if %35 [t: %b7, f: %b8] {  # if_2
-      %b7 = block {  # true
-        %36:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %37:i32 = load %36
-        %38:f32 = convert %37
-        %39:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %40:i32 = load %39
-        %41:f32 = convert %40
+    %35:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
+    %36:f32 = load %35
+    %37:bool = eq %34, %36
+    if %37 [t: $B7, f: $B8] {  # if_2
+      $B7: {  # true
+        %38:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %39:i32 = load %38
+        %40:f32 = convert %39
+        %41:f32 = let %40
         %42:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
         %43:i32 = load %42
         %44:f32 = convert %43
-        %45:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %46:i32 = load %45
-        %47:f32 = convert %46
-        %48:vec4<f32> = construct %38, %41, %44, %47
-        store %x_GLF_color, %48
+        %45:f32 = let %44
+        %46:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+        %47:i32 = load %46
+        %48:f32 = convert %47
+        %49:f32 = let %48
+        %50:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %51:i32 = load %50
+        %52:f32 = convert %51
+        %53:vec4<f32> = construct %41, %45, %49, %52
+        store %x_GLF_color, %53
         exit_if  # if_2
       }
-      %b8 = block {  # false
-        %49:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %50:i32 = load %49
-        %51:f32 = convert %50
-        %52:vec4<f32> = construct %51
-        store %x_GLF_color, %52
+      $B8: {  # false
+        %54:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+        %55:i32 = load %54
+        %56:f32 = convert %55
+        %57:vec4<f32> = construct %56
+        store %x_GLF_color, %57
         exit_if  # if_2
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b9 {
-  %b9 = block {
-    %54:void = call %main_1
-    %55:vec4<f32> = load %x_GLF_color
-    %56:main_out = construct %55
-    ret %56
+%tint_symbol = @fragment func():main_out {
+  $B9: {
+    %59:void = call %main_1
+    %60:vec4<f32> = load %x_GLF_color
+    %61:main_out = construct %60
+    ret %61
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-for-loop-min-increment-array-element/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-for-loop-min-increment-array-element/0-opt.wgsl.expected.ir.msl
index 9f6d8c7..7a09e81 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-for-loop-min-increment-array-element/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-for-loop-min-increment-array-element/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,101 +20,122 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_9:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %arr:ptr<function, array<f32, 3>, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %7:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_36:f32 = load %7
-    %9:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-    %x_38:f32 = load %9
-    %11:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
-    %x_40:f32 = load %11
-    %13:array<f32, 3> = construct %x_36, %x_38, %x_40
-    store %arr, %13
+    %8:f32 = load %7
+    %x_36:f32 = let %8
+    %10:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+    %11:f32 = load %10
+    %x_38:f32 = let %11
+    %13:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
+    %14:f32 = load %13
+    %x_40:f32 = let %14
+    %16:array<f32, 3> = construct %x_36, %x_38, %x_40
+    store %arr, %16
     store %i, 1i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_46:i32 = load %i
-        %15:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
-        %x_48:i32 = load %15
-        %17:i32 = min %x_48, 3i
-        %18:bool = lt %x_46, %17
-        if %18 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %17:i32 = load %i
+        %x_46:i32 = let %17
+        %19:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
+        %20:i32 = load %19
+        %x_48:i32 = let %20
+        %22:i32 = min %x_48, 3i
+        %23:bool = lt %x_46, %22
+        if %23 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %19:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
-        %x_53:i32 = load %19
-        %21:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-        %x_55:f32 = load %21
-        %23:ptr<function, f32, read_write> = access %arr, %x_53
-        %x_57:f32 = load %23
-        %25:ptr<function, f32, read_write> = access %arr, %x_53
-        %26:f32 = add %x_57, %x_55
-        store %25, %26
-        continue %b4
+        %24:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
+        %25:i32 = load %24
+        %x_53:i32 = let %25
+        %27:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+        %28:f32 = load %27
+        %x_55:f32 = let %28
+        %30:ptr<function, f32, read_write> = access %arr, %x_53
+        %31:f32 = load %30
+        %x_57:f32 = let %31
+        %33:ptr<function, f32, read_write> = access %arr, %x_53
+        %34:f32 = add %x_57, %x_55
+        store %33, %34
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_60:i32 = load %i
-        %28:i32 = add %x_60, 1i
-        store %i, %28
-        next_iteration %b3
+      $B4: {  # continuing
+        %35:i32 = load %i
+        %x_60:i32 = let %35
+        %37:i32 = add %x_60, 1i
+        store %i, %37
+        next_iteration  # -> $B3
       }
     }
-    %29:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
-    %x_63:i32 = load %29
-    %31:ptr<function, f32, read_write> = access %arr, %x_63
-    %x_65:f32 = load %31
-    %33:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
-    %x_67:f32 = load %33
-    %35:bool = eq %x_65, %x_67
-    if %35 [t: %b7, f: %b8] {  # if_2
-      %b7 = block {  # true
-        %36:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %x_73:i32 = load %36
-        %38:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %x_76:i32 = load %38
-        %40:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %x_79:i32 = load %40
-        %42:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %x_82:i32 = load %42
-        %44:f32 = convert %x_73
-        %45:f32 = convert %x_76
-        %46:f32 = convert %x_79
-        %47:f32 = convert %x_82
-        %48:vec4<f32> = construct %44, %45, %46, %47
-        store %x_GLF_color, %48
+    %38:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
+    %39:i32 = load %38
+    %x_63:i32 = let %39
+    %41:ptr<function, f32, read_write> = access %arr, %x_63
+    %42:f32 = load %41
+    %x_65:f32 = let %42
+    %44:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
+    %45:f32 = load %44
+    %x_67:f32 = let %45
+    %47:bool = eq %x_65, %x_67
+    if %47 [t: $B7, f: $B8] {  # if_2
+      $B7: {  # true
+        %48:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %49:i32 = load %48
+        %x_73:i32 = let %49
+        %51:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+        %52:i32 = load %51
+        %x_76:i32 = let %52
+        %54:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+        %55:i32 = load %54
+        %x_79:i32 = let %55
+        %57:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %58:i32 = load %57
+        %x_82:i32 = let %58
+        %60:f32 = convert %x_73
+        %61:f32 = let %60
+        %62:f32 = convert %x_76
+        %63:f32 = let %62
+        %64:f32 = convert %x_79
+        %65:f32 = let %64
+        %66:f32 = convert %x_82
+        %67:vec4<f32> = construct %61, %63, %65, %66
+        store %x_GLF_color, %67
         exit_if  # if_2
       }
-      %b8 = block {  # false
-        %49:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %x_86:i32 = load %49
-        %x_87:f32 = convert %x_86
-        %52:vec4<f32> = construct %x_87, %x_87, %x_87, %x_87
-        store %x_GLF_color, %52
+      $B8: {  # false
+        %68:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+        %69:i32 = load %68
+        %x_86:i32 = let %69
+        %71:f32 = convert %x_86
+        %x_87:f32 = let %71
+        %73:vec4<f32> = construct %x_87, %x_87, %x_87, %x_87
+        store %x_GLF_color, %73
         exit_if  # if_2
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b9 {
-  %b9 = block {
-    %54:void = call %main_1
-    %55:vec4<f32> = load %x_GLF_color
-    %56:main_out = construct %55
-    ret %56
+%tint_symbol = @fragment func():main_out {
+  $B9: {
+    %75:void = call %main_1
+    %76:vec4<f32> = load %x_GLF_color
+    %77:main_out = construct %76
+    ret %77
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-for-switch-fallthrough/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-for-switch-fallthrough/0-opt.spvasm.expected.ir.msl
index 18ec30f..6c938de 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-for-switch-fallthrough/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-for-switch-fallthrough/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,13 +12,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %6:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
@@ -27,81 +27,85 @@
     %8:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
     %9:i32 = load %8
     store %i, %9
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %10:i32 = load %i
         %11:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
         %12:i32 = load %11
         %13:bool = lt %10, %12
-        if %13 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %13 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_38:i32 = load %i
-        switch %x_38 [c: (0i -1i, %b7), c: (default, %b8)] {  # switch_1
-          %b7 = block {  # case
-            %15:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-            %16:i32 = load %15
-            store %a, %16
+        %14:i32 = load %i
+        %x_38:i32 = let %14
+        switch %x_38 [c: (0i -1i, $B7), c: (default, $B8)] {  # switch_1
+          $B7: {  # case
+            %16:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+            %17:i32 = load %16
+            store %a, %17
             exit_switch  # switch_1
           }
-          %b8 = block {  # case
+          $B8: {  # case
             exit_switch  # switch_1
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %17:i32 = load %i
-        %18:i32 = add %17, 1i
-        store %i, %18
-        next_iteration %b3
+      $B4: {  # continuing
+        %18:i32 = load %i
+        %19:i32 = add %18, 1i
+        store %i, %19
+        next_iteration  # -> $B3
       }
     }
-    %19:i32 = load %a
-    %20:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %21:i32 = load %20
-    %22:bool = eq %19, %21
-    if %22 [t: %b9, f: %b10] {  # if_2
-      %b9 = block {  # true
-        %23:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %24:i32 = load %23
-        %25:f32 = convert %24
-        %26:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %27:i32 = load %26
-        %28:f32 = convert %27
-        %29:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %30:i32 = load %29
-        %31:f32 = convert %30
-        %32:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %20:i32 = load %a
+    %21:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %22:i32 = load %21
+    %23:bool = eq %20, %22
+    if %23 [t: $B9, f: $B10] {  # if_2
+      $B9: {  # true
+        %24:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %25:i32 = load %24
+        %26:f32 = convert %25
+        %27:f32 = let %26
+        %28:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %29:i32 = load %28
+        %30:f32 = convert %29
+        %31:f32 = let %30
+        %32:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
         %33:i32 = load %32
         %34:f32 = convert %33
-        %35:vec4<f32> = construct %25, %28, %31, %34
-        store %x_GLF_color, %35
-        exit_if  # if_2
-      }
-      %b10 = block {  # false
-        %36:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %35:f32 = let %34
+        %36:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
         %37:i32 = load %36
         %38:f32 = convert %37
-        %39:vec4<f32> = construct %38
+        %39:vec4<f32> = construct %27, %31, %35, %38
         store %x_GLF_color, %39
         exit_if  # if_2
       }
+      $B10: {  # false
+        %40:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %41:i32 = load %40
+        %42:f32 = convert %41
+        %43:vec4<f32> = construct %42
+        store %x_GLF_color, %43
+        exit_if  # if_2
+      }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b11 {
-  %b11 = block {
-    %41:void = call %main_1
-    %42:vec4<f32> = load %x_GLF_color
-    %43:main_out = construct %42
-    ret %43
+%tint_symbol = @fragment func():main_out {
+  $B11: {
+    %45:void = call %main_1
+    %46:vec4<f32> = load %x_GLF_color
+    %47:main_out = construct %46
+    ret %47
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-for-switch-fallthrough/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-for-switch-fallthrough/0-opt.wgsl.expected.ir.msl
index 9c18d5c..b100cf2 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-for-switch-fallthrough/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-for-switch-fallthrough/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,96 +12,114 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %6:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_26:i32 = load %6
+    %7:i32 = load %6
+    %x_26:i32 = let %7
     store %a, %x_26
-    %8:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_28:i32 = load %8
+    %9:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %10:i32 = load %9
+    %x_28:i32 = let %10
     store %i, %x_28
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_33:i32 = load %i
-        %11:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_35:i32 = load %11
-        %13:bool = lt %x_33, %x_35
-        if %13 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %12:i32 = load %i
+        %x_33:i32 = let %12
+        %14:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %15:i32 = load %14
+        %x_35:i32 = let %15
+        %17:bool = lt %x_33, %x_35
+        if %17 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_38:i32 = load %i
-        switch %x_38 [c: (0i -1i, %b7), c: (default, %b8)] {  # switch_1
-          %b7 = block {  # case
-            %15:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-            %x_42:i32 = load %15
+        %18:i32 = load %i
+        %x_38:i32 = let %18
+        switch %x_38 [c: (0i -1i, $B7), c: (default, $B8)] {  # switch_1
+          $B7: {  # case
+            %20:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+            %21:i32 = load %20
+            %x_42:i32 = let %21
             store %a, %x_42
             exit_switch  # switch_1
           }
-          %b8 = block {  # case
+          $B8: {  # case
             exit_switch  # switch_1
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_43:i32 = load %i
-        %18:i32 = add %x_43, 1i
-        store %i, %18
-        next_iteration %b3
+      $B4: {  # continuing
+        %23:i32 = load %i
+        %x_43:i32 = let %23
+        %25:i32 = add %x_43, 1i
+        store %i, %25
+        next_iteration  # -> $B3
       }
     }
-    %x_45:i32 = load %a
-    %20:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_47:i32 = load %20
-    %22:bool = eq %x_45, %x_47
-    if %22 [t: %b9, f: %b10] {  # if_2
-      %b9 = block {  # true
-        %23:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_53:i32 = load %23
-        %25:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %x_56:i32 = load %25
-        %27:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %x_59:i32 = load %27
-        %29:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_62:i32 = load %29
-        %31:f32 = convert %x_53
-        %32:f32 = convert %x_56
-        %33:f32 = convert %x_59
-        %34:f32 = convert %x_62
-        %35:vec4<f32> = construct %31, %32, %33, %34
-        store %x_GLF_color, %35
+    %26:i32 = load %a
+    %x_45:i32 = let %26
+    %28:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %29:i32 = load %28
+    %x_47:i32 = let %29
+    %31:bool = eq %x_45, %x_47
+    if %31 [t: $B9, f: $B10] {  # if_2
+      $B9: {  # true
+        %32:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %33:i32 = load %32
+        %x_53:i32 = let %33
+        %35:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %36:i32 = load %35
+        %x_56:i32 = let %36
+        %38:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %39:i32 = load %38
+        %x_59:i32 = let %39
+        %41:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %42:i32 = load %41
+        %x_62:i32 = let %42
+        %44:f32 = convert %x_53
+        %45:f32 = let %44
+        %46:f32 = convert %x_56
+        %47:f32 = let %46
+        %48:f32 = convert %x_59
+        %49:f32 = let %48
+        %50:f32 = convert %x_62
+        %51:vec4<f32> = construct %45, %47, %49, %50
+        store %x_GLF_color, %51
         exit_if  # if_2
       }
-      %b10 = block {  # false
-        %36:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %x_66:i32 = load %36
-        %x_67:f32 = convert %x_66
-        %39:vec4<f32> = construct %x_67, %x_67, %x_67, %x_67
-        store %x_GLF_color, %39
+      $B10: {  # false
+        %52:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %53:i32 = load %52
+        %x_66:i32 = let %53
+        %55:f32 = convert %x_66
+        %x_67:f32 = let %55
+        %57:vec4<f32> = construct %x_67, %x_67, %x_67, %x_67
+        store %x_GLF_color, %57
         exit_if  # if_2
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b11 {
-  %b11 = block {
-    %41:void = call %main_1
-    %42:vec4<f32> = load %x_GLF_color
-    %43:main_out = construct %42
-    ret %43
+%tint_symbol = @fragment func():main_out {
+  $B11: {
+    %59:void = call %main_1
+    %60:vec4<f32> = load %x_GLF_color
+    %61:main_out = construct %60
+    ret %61
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-fract-asin-undefined-never-used/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-fract-asin-undefined-never-used/0-opt.spvasm.expected.ir.msl
index b894ac0..2a56e0c 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-fract-asin-undefined-never-used/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-fract-asin-undefined-never-used/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,15 +20,15 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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
   %x_10:ptr<uniform, buf1, read> = var @binding_point(0, 1)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %f0:ptr<function, f32, read_write> = var
     %f1:ptr<function, f32, read_write> = var
     store %f0, 1.0f
@@ -39,41 +39,44 @@
     %11:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
     %12:f32 = load %11
     %13:bool = gt %10, %12
-    if %13 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    if %13 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         %14:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
         %15:i32 = load %14
         %16:f32 = convert %15
-        %17:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %18:i32 = load %17
-        %19:f32 = convert %18
-        %20:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %21:i32 = load %20
-        %22:f32 = convert %21
-        %23:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %24:i32 = load %23
-        %25:f32 = convert %24
-        %26:vec4<f32> = construct %16, %19, %22, %25
-        store %x_GLF_color, %26
+        %17:f32 = let %16
+        %18:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %19:i32 = load %18
+        %20:f32 = convert %19
+        %21:f32 = let %20
+        %22:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %23:i32 = load %22
+        %24:f32 = convert %23
+        %25:f32 = let %24
+        %26:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %27:i32 = load %26
+        %28:f32 = convert %27
+        %29:vec4<f32> = construct %17, %21, %25, %28
+        store %x_GLF_color, %29
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %27:f32 = load %f1
-        %28:vec4<f32> = construct %27
-        store %x_GLF_color, %28
+      $B4: {  # false
+        %30:f32 = load %f1
+        %31:vec4<f32> = construct %30
+        store %x_GLF_color, %31
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b5 {
-  %b5 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B5: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %31:void = call %main_1
-    %32:vec4<f32> = load %x_GLF_color
-    %33:main_out = construct %32
-    ret %33
+    %34:void = call %main_1
+    %35:vec4<f32> = load %x_GLF_color
+    %36:main_out = construct %35
+    ret %36
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-fract-asin-undefined-never-used/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-fract-asin-undefined-never-used/0-opt.wgsl.expected.ir.msl
index 35b26df..666da3c 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-fract-asin-undefined-never-used/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-fract-asin-undefined-never-used/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,60 +20,71 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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
   %x_10:ptr<uniform, buf1, read> = var @binding_point(0, 1)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %f0:ptr<function, f32, read_write> = var
     %f1:ptr<function, f32, read_write> = var
     store %f0, 1.0f
-    %x_35:f32 = load %f0
-    %9:f32 = fract %x_35
-    store %f1, %9
-    %x_38:f32 = load_vector_element %gl_FragCoord, 0u
-    %11:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-    %x_40:f32 = load %11
-    %13:bool = gt %x_38, %x_40
-    if %13 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %14:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %x_46:i32 = load %14
-        %16:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %x_49:i32 = load %16
-        %18:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %x_52:i32 = load %18
-        %20:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %x_55:i32 = load %20
-        %22:f32 = convert %x_46
-        %23:f32 = convert %x_49
-        %24:f32 = convert %x_52
-        %25:f32 = convert %x_55
-        %26:vec4<f32> = construct %22, %23, %24, %25
-        store %x_GLF_color, %26
+    %8:f32 = load %f0
+    %x_35:f32 = let %8
+    %10:f32 = fract %x_35
+    store %f1, %10
+    %11:f32 = load_vector_element %gl_FragCoord, 0u
+    %x_38:f32 = let %11
+    %13:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+    %14:f32 = load %13
+    %x_40:f32 = let %14
+    %16:bool = gt %x_38, %x_40
+    if %16 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %17:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %18:i32 = load %17
+        %x_46:i32 = let %18
+        %20:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %21:i32 = load %20
+        %x_49:i32 = let %21
+        %23:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %24:i32 = load %23
+        %x_52:i32 = let %24
+        %26:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %27:i32 = load %26
+        %x_55:i32 = let %27
+        %29:f32 = convert %x_46
+        %30:f32 = let %29
+        %31:f32 = convert %x_49
+        %32:f32 = let %31
+        %33:f32 = convert %x_52
+        %34:f32 = let %33
+        %35:f32 = convert %x_55
+        %36:vec4<f32> = construct %30, %32, %34, %35
+        store %x_GLF_color, %36
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %x_58:f32 = load %f1
-        %28:vec4<f32> = construct %x_58, %x_58, %x_58, %x_58
-        store %x_GLF_color, %28
+      $B4: {  # false
+        %37:f32 = load %f1
+        %x_58:f32 = let %37
+        %39:vec4<f32> = construct %x_58, %x_58, %x_58, %x_58
+        store %x_GLF_color, %39
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b5 {
-  %b5 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B5: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %31:void = call %main_1
-    %32:vec4<f32> = load %x_GLF_color
-    %33:main_out = construct %32
-    ret %33
+    %42:void = call %main_1
+    %43:vec4<f32> = load %x_GLF_color
+    %44:main_out = construct %43
+    ret %44
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-fract-smoothstep-undefined/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-fract-smoothstep-undefined/0-opt.spvasm.expected.ir.msl
index 03001f0..5cc82ae 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-fract-smoothstep-undefined/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-fract-smoothstep-undefined/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -12,13 +12,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %v1:ptr<function, vec2<f32>, read_write> = var
     %b:ptr<function, vec2<f32>, read_write> = var
     %a:ptr<function, f32, read_write> = var
@@ -44,48 +44,49 @@
     %23:vec4<f32> = construct %18, %19, %20, %22
     store %x_GLF_color, %23
     %24:f32 = load_vector_element %b, 0u
-    %x_46:bool = lt %24, 1.0f
+    %25:bool = lt %24, 1.0f
+    %x_46:bool = let %25
     store %x_52, %x_46
-    if %x_46 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %26:f32 = load_vector_element %b, 1u
-        %27:bool = lt %26, 1.0f
-        store %x_51, %27
-        %28:bool = load %x_51
-        store %x_52, %28
+    if %x_46 [t: $B3] {  # if_1
+      $B3: {  # true
+        %27:f32 = load_vector_element %b, 1u
+        %28:bool = lt %27, 1.0f
+        store %x_51, %28
+        %29:bool = load %x_51
+        store %x_52, %29
         exit_if  # if_1
       }
     }
-    %29:bool = load %x_52
-    if %29 [t: %b4, f: %b5] {  # if_2
-      %b4 = block {  # true
-        %30:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-        %31:f32 = load %30
-        %32:f32 = load_vector_element %b, 0u
-        %33:f32 = load_vector_element %b, 1u
-        %34:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-        %35:f32 = load %34
-        %36:vec4<f32> = construct %31, %32, %33, %35
-        store %x_GLF_color, %36
+    %30:bool = load %x_52
+    if %30 [t: $B4, f: $B5] {  # if_2
+      $B4: {  # true
+        %31:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+        %32:f32 = load %31
+        %33:f32 = load_vector_element %b, 0u
+        %34:f32 = load_vector_element %b, 1u
+        %35:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+        %36:f32 = load %35
+        %37:vec4<f32> = construct %32, %33, %34, %36
+        store %x_GLF_color, %37
         exit_if  # if_2
       }
-      %b5 = block {  # false
-        %37:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-        %38:f32 = load %37
-        %39:vec4<f32> = construct %38
-        store %x_GLF_color, %39
+      $B5: {  # false
+        %38:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+        %39:f32 = load %38
+        %40:vec4<f32> = construct %39
+        store %x_GLF_color, %40
         exit_if  # if_2
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b6 {
-  %b6 = block {
-    %41:void = call %main_1
-    %42:vec4<f32> = load %x_GLF_color
-    %43:main_out = construct %42
-    ret %43
+%tint_symbol = @fragment func():main_out {
+  $B6: {
+    %42:void = call %main_1
+    %43:vec4<f32> = load %x_GLF_color
+    %44:main_out = construct %43
+    ret %44
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-fract-smoothstep-undefined/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-fract-smoothstep-undefined/0-opt.wgsl.expected.ir.msl
index 17f3355..fbb13dd 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-fract-smoothstep-undefined/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-fract-smoothstep-undefined/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -12,80 +12,96 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %v1:ptr<function, vec2<f32>, read_write> = var
     %b:ptr<function, vec2<f32>, read_write> = var
     %a:ptr<function, f32, read_write> = var
     %x_51:ptr<function, bool, read_write> = var
     %x_52_phi:ptr<function, bool, read_write> = var
     %9:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_30:f32 = load %9
-    %11:vec2<f32> = construct %x_30, %x_30
-    store %v1, %11
-    %x_32:vec2<f32> = load %v1
-    %13:vec2<f32> = fract %x_32
-    store %b, %13
-    %x_34:vec2<f32> = load %b
-    %15:vec2<f32> = smoothstep vec2<f32>(1.0f), vec2<f32>(1.0f), %x_34
-    %16:f32 = access %15, 0u
-    store %a, %16
-    %17:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_38:f32 = load %17
-    %x_39:f32 = load %a
-    %x_40:f32 = load %a
-    %21:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_42:f32 = load %21
-    %23:vec4<f32> = construct %x_38, %x_39, %x_40, %x_42
-    store %x_GLF_color, %23
-    %x_45:f32 = load_vector_element %b, 0u
-    %x_46:bool = lt %x_45, 1.0f
+    %10:f32 = load %9
+    %x_30:f32 = let %10
+    %12:vec2<f32> = construct %x_30, %x_30
+    store %v1, %12
+    %13:vec2<f32> = load %v1
+    %x_32:vec2<f32> = let %13
+    %15:vec2<f32> = fract %x_32
+    store %b, %15
+    %16:vec2<f32> = load %b
+    %x_34:vec2<f32> = let %16
+    %18:vec2<f32> = smoothstep vec2<f32>(1.0f), vec2<f32>(1.0f), %x_34
+    %19:f32 = access %18, 0u
+    store %a, %19
+    %20:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %21:f32 = load %20
+    %x_38:f32 = let %21
+    %23:f32 = load %a
+    %x_39:f32 = let %23
+    %25:f32 = load %a
+    %x_40:f32 = let %25
+    %27:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %28:f32 = load %27
+    %x_42:f32 = let %28
+    %30:vec4<f32> = construct %x_38, %x_39, %x_40, %x_42
+    store %x_GLF_color, %30
+    %31:f32 = load_vector_element %b, 0u
+    %x_45:f32 = let %31
+    %33:bool = lt %x_45, 1.0f
+    %x_46:bool = let %33
     store %x_52_phi, %x_46
-    if %x_46 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %x_50:f32 = load_vector_element %b, 1u
-        %27:bool = lt %x_50, 1.0f
-        store %x_51, %27
-        %28:bool = load %x_51
-        store %x_52_phi, %28
+    if %x_46 [t: $B3] {  # if_1
+      $B3: {  # true
+        %35:f32 = load_vector_element %b, 1u
+        %x_50:f32 = let %35
+        %37:bool = lt %x_50, 1.0f
+        store %x_51, %37
+        %38:bool = load %x_51
+        store %x_52_phi, %38
         exit_if  # if_1
       }
     }
-    %x_52:bool = load %x_52_phi
-    if %x_52 [t: %b4, f: %b5] {  # if_2
-      %b4 = block {  # true
-        %30:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-        %x_57:f32 = load %30
-        %x_59:f32 = load_vector_element %b, 0u
-        %x_61:f32 = load_vector_element %b, 1u
-        %34:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-        %x_63:f32 = load %34
-        %36:vec4<f32> = construct %x_57, %x_59, %x_61, %x_63
-        store %x_GLF_color, %36
+    %39:bool = load %x_52_phi
+    %x_52:bool = let %39
+    if %x_52 [t: $B4, f: $B5] {  # if_2
+      $B4: {  # true
+        %41:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+        %42:f32 = load %41
+        %x_57:f32 = let %42
+        %44:f32 = load_vector_element %b, 0u
+        %x_59:f32 = let %44
+        %46:f32 = load_vector_element %b, 1u
+        %x_61:f32 = let %46
+        %48:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+        %49:f32 = load %48
+        %x_63:f32 = let %49
+        %51:vec4<f32> = construct %x_57, %x_59, %x_61, %x_63
+        store %x_GLF_color, %51
         exit_if  # if_2
       }
-      %b5 = block {  # false
-        %37:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-        %x_66:f32 = load %37
-        %39:vec4<f32> = construct %x_66, %x_66, %x_66, %x_66
-        store %x_GLF_color, %39
+      $B5: {  # false
+        %52:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+        %53:f32 = load %52
+        %x_66:f32 = let %53
+        %55:vec4<f32> = construct %x_66, %x_66, %x_66, %x_66
+        store %x_GLF_color, %55
         exit_if  # if_2
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b6 {
-  %b6 = block {
-    %41:void = call %main_1
-    %42:vec4<f32> = load %x_GLF_color
-    %43:main_out = construct %42
-    ret %43
+%tint_symbol = @fragment func():main_out {
+  $B6: {
+    %57:void = call %main_1
+    %58:vec4<f32> = load %x_GLF_color
+    %59:main_out = construct %58
+    ret %59
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-fragcoord-bitwise-not/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-fragcoord-bitwise-not/0-opt.spvasm.expected.ir.msl
index f025ca1..7a08e3b 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-fragcoord-bitwise-not/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-fragcoord-bitwise-not/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,70 +12,83 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %6:f32 = load_vector_element %gl_FragCoord, 0u
-    %7:i32 = convert %6
+    %7:i32 = call %tint_f32_to_i32, %6
     store %a, %7
-    %8:i32 = load %a
-    %9:i32 = complement %8
-    %10:bool = lt %9, 0i
-    if %10 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %11:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %12:i32 = load %11
-        store %a, %12
+    %9:i32 = load %a
+    %10:i32 = complement %9
+    %11:bool = lt %10, 0i
+    if %11 [t: $B3] {  # if_1
+      $B3: {  # true
+        %12:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %13:i32 = load %12
+        store %a, %13
         exit_if  # if_1
       }
     }
-    %13:i32 = load %a
-    %14:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-    %15:i32 = load %14
-    %16:bool = eq %13, %15
-    if %16 [t: %b4, f: %b5] {  # if_2
-      %b4 = block {  # true
-        %17:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %18:i32 = load %17
-        %19:f32 = convert %18
-        %20:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %21:i32 = load %20
-        %22:f32 = convert %21
-        %23:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %24:i32 = load %23
-        %25:f32 = convert %24
-        %26:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+    %14:i32 = load %a
+    %15:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+    %16:i32 = load %15
+    %17:bool = eq %14, %16
+    if %17 [t: $B4, f: $B5] {  # if_2
+      $B4: {  # true
+        %18:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %19:i32 = load %18
+        %20:f32 = convert %19
+        %21:f32 = let %20
+        %22:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %23:i32 = load %22
+        %24:f32 = convert %23
+        %25:f32 = let %24
+        %26:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
         %27:i32 = load %26
         %28:f32 = convert %27
-        %29:vec4<f32> = construct %19, %22, %25, %28
-        store %x_GLF_color, %29
-        exit_if  # if_2
-      }
-      %b5 = block {  # false
-        %30:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %29:f32 = let %28
+        %30:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
         %31:i32 = load %30
         %32:f32 = convert %31
-        %33:vec4<f32> = construct %32
+        %33:vec4<f32> = construct %21, %25, %29, %32
         store %x_GLF_color, %33
         exit_if  # if_2
       }
+      $B5: {  # false
+        %34:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %35:i32 = load %34
+        %36:f32 = convert %35
+        %37:vec4<f32> = construct %36
+        store %x_GLF_color, %37
+        exit_if  # if_2
+      }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b6 {
-  %b6 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B6: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %36:void = call %main_1
-    %37:vec4<f32> = load %x_GLF_color
-    %38:main_out = construct %37
-    ret %38
+    %40:void = call %main_1
+    %41:vec4<f32> = load %x_GLF_color
+    %42:main_out = construct %41
+    ret %42
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B7: {
+    %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
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-fragcoord-bitwise-not/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-fragcoord-bitwise-not/0-opt.wgsl.expected.ir.msl
index 0735afa..05b3c84 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-fragcoord-bitwise-not/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-fragcoord-bitwise-not/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,70 +12,94 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
-    %x_28:f32 = load_vector_element %gl_FragCoord, 0u
-    %7:i32 = convert %x_28
-    store %a, %7
-    %x_30:i32 = load %a
-    %9:i32 = complement %x_30
-    %10:bool = lt %9, 0i
-    if %10 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %11:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %x_36:i32 = load %11
+    %6:f32 = load_vector_element %gl_FragCoord, 0u
+    %x_28:f32 = let %6
+    %8:i32 = call %tint_f32_to_i32, %x_28
+    store %a, %8
+    %10:i32 = load %a
+    %x_30:i32 = let %10
+    %12:i32 = complement %x_30
+    %13:bool = lt %12, 0i
+    if %13 [t: $B3] {  # if_1
+      $B3: {  # true
+        %14:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %15:i32 = load %14
+        %x_36:i32 = let %15
         store %a, %x_36
         exit_if  # if_1
       }
     }
-    %x_37:i32 = load %a
-    %14:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-    %x_39:i32 = load %14
-    %16:bool = eq %x_37, %x_39
-    if %16 [t: %b4, f: %b5] {  # if_2
-      %b4 = block {  # true
-        %17:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %x_45:i32 = load %17
-        %19:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %x_48:i32 = load %19
-        %21:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %x_51:i32 = load %21
+    %17:i32 = load %a
+    %x_37:i32 = let %17
+    %19:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+    %20:i32 = load %19
+    %x_39:i32 = let %20
+    %22:bool = eq %x_37, %x_39
+    if %22 [t: $B4, f: $B5] {  # if_2
+      $B4: {  # true
         %23:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %x_54:i32 = load %23
-        %25:f32 = convert %x_45
-        %26:f32 = convert %x_48
-        %27:f32 = convert %x_51
-        %28:f32 = convert %x_54
-        %29:vec4<f32> = construct %25, %26, %27, %28
-        store %x_GLF_color, %29
+        %24:i32 = load %23
+        %x_45:i32 = let %24
+        %26:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %27:i32 = load %26
+        %x_48:i32 = let %27
+        %29:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %30:i32 = load %29
+        %x_51:i32 = let %30
+        %32:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %33:i32 = load %32
+        %x_54:i32 = let %33
+        %35:f32 = convert %x_45
+        %36:f32 = let %35
+        %37:f32 = convert %x_48
+        %38:f32 = let %37
+        %39:f32 = convert %x_51
+        %40:f32 = let %39
+        %41:f32 = convert %x_54
+        %42:vec4<f32> = construct %36, %38, %40, %41
+        store %x_GLF_color, %42
         exit_if  # if_2
       }
-      %b5 = block {  # false
-        %30:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %x_58:i32 = load %30
-        %x_59:f32 = convert %x_58
-        %33:vec4<f32> = construct %x_59, %x_59, %x_59, %x_59
-        store %x_GLF_color, %33
+      $B5: {  # false
+        %43:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %44:i32 = load %43
+        %x_58:i32 = let %44
+        %46:f32 = convert %x_58
+        %x_59:f32 = let %46
+        %48:vec4<f32> = construct %x_59, %x_59, %x_59, %x_59
+        store %x_GLF_color, %48
         exit_if  # if_2
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b6 {
-  %b6 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B6: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %36:void = call %main_1
-    %37:vec4<f32> = load %x_GLF_color
-    %38:main_out = construct %37
-    ret %38
+    %51:void = call %main_1
+    %52:vec4<f32> = load %x_GLF_color
+    %53:main_out = construct %52
+    ret %53
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B7: {
+    %55:i32 = convert %value
+    %56:bool = gte %value, -2147483648.0f
+    %57:i32 = select -2147483648i, %55, %56
+    %58:bool = lte %value, 2147483520.0f
+    %59:i32 = select 2147483647i, %57, %58
+    ret %59
   }
 }
 
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
index 6f27f8e..c15daf7 100644
--- 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
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,15 +20,15 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%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
@@ -36,130 +36,155 @@
     %10:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
     %11:f32 = load %10
     %12:vec4<f32> = construct %11
-    %13:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-    %14:f32 = load %13
-    %15:vec4<f32> = construct %14
-    %16:array<vec4<f32>, 2> = construct %12, %15
-    store %data, %16
-    %17:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-    %18:i32 = load %17
-    store %b, %18
-    %19:f32 = load_vector_element %gl_FragCoord, 1u
-    %20:i32 = convert %19
-    %21:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-    %22:i32 = load %21
-    %23:f32 = load_vector_element %gl_FragCoord, 1u
-    %24:i32 = convert %23
-    %25:i32 = or %22, %24
-    %26:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-    %27:i32 = load %26
-    %28:i32 = clamp %20, %25, %27
-    store %y, %28
-    %29:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-    %30:i32 = load %29
-    store %i, %30
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    %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
-        %33:i32 = load %i
-        %34:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %35:i32 = load %34
-        %36:bool = lt %33, %35
-        if %36 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %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 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %37:i32 = load %b
-        %38:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %39:i32 = load %38
-        %x_76:bool = gt %37, %39
+        %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 = block {  # true
-            %41:i32 = load %y
-            %42:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-            %43:i32 = load %42
-            %44:bool = gt %41, %43
-            store %x_82, %44
-            %45:bool = load %x_82
-            store %x_83, %45
+        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
           }
         }
-        %46:bool = load %x_83
-        if %46 [t: %b8] {  # if_3
-          %b8 = block {  # true
+        %53:bool = load %x_83
+        if %53 [t: $B8] {  # if_3
+          $B8: {  # true
             exit_loop  # loop_1
           }
         }
-        %47:i32 = load %b
-        %48:i32 = add %47, 1i
-        store %b, %48
-        continue %b4
+        %54:i32 = load %b
+        %55:i32 = add %54, 1i
+        store %b, %55
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %49:i32 = load %i
-        %50:i32 = add %49, 1i
-        store %i, %50
-        next_iteration %b3
+      $B4: {  # continuing
+        %56:i32 = load %i
+        %57:i32 = add %56, 1i
+        store %i, %57
+        next_iteration  # -> $B3
       }
     }
-    %51:i32 = load %b
-    %52:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-    %53:i32 = load %52
-    %54:bool = eq %51, %53
-    if %54 [t: %b9] {  # if_4
-      %b9 = block {  # true
-        %55:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-        %x_97:i32 = load %55
-        %57:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %x_99:i32 = load %57
-        %59:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
-        %x_101:i32 = load %59
-        %61:i32 = clamp %x_97, %x_99, %x_101
-        %62:ptr<function, vec4<f32>, read_write> = access %data, %61
-        %63:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %64:i32 = load %63
-        %65:f32 = convert %64
-        %66:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-        %67:i32 = load %66
-        %68:f32 = convert %67
-        %69:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-        %70:i32 = load %69
-        %71:f32 = convert %70
-        %72:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %73:i32 = load %72
-        %74:f32 = convert %73
-        %75:vec4<f32> = construct %65, %68, %71, %74
-        store %62, %75
+    %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
       }
     }
-    %76:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-    %77:i32 = load %76
-    %78:ptr<function, vec4<f32>, read_write> = access %data, %77
-    %x_120:vec4<f32> = load %78
-    %80:f32 = access %x_120, 0u
-    %81:f32 = access %x_120, 1u
-    %82:f32 = access %x_120, 2u
-    %83:f32 = access %x_120, 3u
-    %84:vec4<f32> = construct %80, %81, %82, %83
-    store %x_GLF_color, %84
+    %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 {
-  %b10 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B10: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %87:void = call %main_1
-    %88:vec4<f32> = load %x_GLF_color
-    %89:main_out = construct %88
-    ret %89
+    %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
   }
 }
 
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
index 3141b06..8142215 100644
--- 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
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,146 +20,193 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%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
-    %x_42:f32 = load %10
-    %12:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-    %x_45:f32 = load %12
-    %14:vec4<f32> = construct %x_42, %x_42, %x_42, %x_42
-    %15:vec4<f32> = construct %x_45, %x_45, %x_45, %x_45
-    %16:array<vec4<f32>, 2> = construct %14, %15
-    store %data, %16
-    %17:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-    %x_49:i32 = load %17
-    store %b, %x_49
-    %x_51:f32 = load_vector_element %gl_FragCoord, 1u
+    %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
-    %x_54:i32 = load %20
-    %x_56:f32 = load_vector_element %gl_FragCoord, 1u
-    %23:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-    %x_60:i32 = load %23
-    %25:i32 = convert %x_51
-    %26:i32 = convert %x_56
-    %27:i32 = or %x_54, %26
-    %28:i32 = clamp %25, %27, %x_60
-    store %y, %28
-    %29:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-    %x_63:i32 = load %29
+    %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 = block {  # body
+    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
-        %x_68:i32 = load %i
-        %34:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %x_70:i32 = load %34
-        %36:bool = lt %x_68, %x_70
-        if %36 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %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 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_73:i32 = load %b
-        %38:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %x_75:i32 = load %38
-        %x_76:bool = gt %x_73, %x_75
+        %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 = block {  # true
-            %x_79:i32 = load %y
-            %42:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-            %x_81:i32 = load %42
-            %44:bool = gt %x_79, %x_81
-            store %x_82, %44
-            %45:bool = load %x_82
-            store %x_83_phi, %45
+        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
           }
         }
-        %x_83:bool = load %x_83_phi
-        if %x_83 [t: %b8] {  # if_3
-          %b8 = block {  # true
+        %65:bool = load %x_83_phi
+        %x_83:bool = let %65
+        if %x_83 [t: $B8] {  # if_3
+          $B8: {  # true
             exit_loop  # loop_1
           }
         }
-        %x_86:i32 = load %b
-        %48:i32 = add %x_86, 1i
-        store %b, %48
-        continue %b4
+        %67:i32 = load %b
+        %x_86:i32 = let %67
+        %69:i32 = add %x_86, 1i
+        store %b, %69
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_88:i32 = load %i
-        %50:i32 = add %x_88, 1i
-        store %i, %50
-        next_iteration %b3
+      $B4: {  # continuing
+        %70:i32 = load %i
+        %x_88:i32 = let %70
+        %72:i32 = add %x_88, 1i
+        store %i, %72
+        next_iteration  # -> $B3
       }
     }
-    %x_90:i32 = load %b
-    %52:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-    %x_92:i32 = load %52
-    %54:bool = eq %x_90, %x_92
-    if %54 [t: %b9] {  # if_4
-      %b9 = block {  # true
-        %55:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-        %x_97:i32 = load %55
-        %57:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %x_99:i32 = load %57
-        %59:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
-        %x_101:i32 = load %59
-        %61:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %x_104:i32 = load %61
-        %63:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-        %x_107:i32 = load %63
-        %65:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-        %x_110:i32 = load %65
-        %67:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %x_113:i32 = load %67
-        %69:i32 = clamp %x_97, %x_99, %x_101
-        %70:ptr<function, vec4<f32>, read_write> = access %data, %69
-        %71:f32 = convert %x_104
-        %72:f32 = convert %x_107
-        %73:f32 = convert %x_110
-        %74:f32 = convert %x_113
-        %75:vec4<f32> = construct %71, %72, %73, %74
-        store %70, %75
+    %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
       }
     }
-    %76:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-    %x_118:i32 = load %76
-    %78:ptr<function, vec4<f32>, read_write> = access %data, %x_118
-    %x_120:vec4<f32> = load %78
-    %80:f32 = access %x_120, 0u
-    %81:f32 = access %x_120, 1u
-    %82:f32 = access %x_120, 2u
-    %83:f32 = access %x_120, 3u
-    %84:vec4<f32> = construct %80, %81, %82, %83
-    store %x_GLF_color, %84
+    %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 {
-  %b10 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B10: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %87:void = call %main_1
-    %88:vec4<f32> = load %x_GLF_color
-    %89:main_out = construct %88
-    ret %89
+    %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
   }
 }
 
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
index a38aaab..c6a3ce3 100644
--- 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
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,15 +20,15 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%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
@@ -39,90 +39,107 @@
     %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 = block {  # true
+    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:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-        %22:f32 = load %21
-        %23:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
-        %24:f32 = load %23
-        %25:vec2<f32> = construct %22, %24
-        %26:vec2<f32> = sub %20, %25
-        %27:vec2<i32> = convert %26
-        store %icoord, %27
-        %28:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
-        %x_65:f32 = load %28
-        %30:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
-        %x_67:f32 = load %30
-        %32:i32 = load_vector_element %icoord, 0u
-        %33:i32 = load_vector_element %icoord, 1u
-        %34:i32 = mul %32, %33
-        %35:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %36:i32 = load %35
-        %37:bool = neq %34, %36
-        if %37 [t: %b5, f: %b6] {  # if_2
-          %b5 = block {  # true
-            %38:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
-            %39:f32 = load %38
-            store %x_40, %39
+        %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 = block {  # false
-            %40:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
-            %41:f32 = load %40
-            store %x_40, %41
+          $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
           }
         }
-        %42:f32 = load %x_40
-        %43:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %44:i32 = load %43
-        %45:f32 = convert %44
-        %46:vec4<f32> = construct %x_65, %x_67, %42, %45
-        store %x_GLF_color, %46
+        %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 = block {  # false
-        %47:vec4<f32> = load %gl_FragCoord
-        %48:vec2<f32> = swizzle %47, xy
-        %49:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-        %50:f32 = load %49
-        %51:vec2<f32> = mul %48, %50
-        %52:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-        %53:f32 = load %52
-        %54:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
+      $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> = construct %53, %55
-        %57:vec2<f32> = sub %51, %56
-        %58:vec2<i32> = convert %57
-        store %icoord_1, %58
-        %59:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
-        %60:f32 = load %59
-        %61:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
-        %62:f32 = load %61
-        %63:i32 = load_vector_element %icoord_1, 0u
-        %64:f32 = convert %63
+        %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:vec4<f32> = construct %60, %62, %64, %66
-        store %x_GLF_color, %67
+        %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 {
-  %b7 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B7: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %70:void = call %main_1
-    %71:vec4<f32> = load %x_GLF_color
-    %72:main_out = construct %71
-    ret %72
+    %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
   }
 }
 
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
index a136ca7..466f330 100644
--- 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
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,113 +20,149 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%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
-    %x_42:f32 = load_vector_element %gl_FragCoord, 0u
-    %10:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-    %x_44:f32 = load %10
-    %12:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_47:f32 = load %12
-    %14:f32 = mul %x_42, %x_44
-    %15:bool = gt %14, %x_47
-    if %15 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %x_52:vec4<f32> = load %gl_FragCoord
-        %17:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-        %x_55:f32 = load %17
-        %19:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-        %x_58:f32 = load %19
-        %21:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
-        %x_60:f32 = load %21
-        %23:f32 = access %x_52, 0u
-        %24:f32 = access %x_52, 1u
-        %25:vec2<f32> = construct %23, %24
-        %26:vec2<f32> = mul %25, %x_55
-        %27:vec2<f32> = construct %x_58, %x_60
-        %28:vec2<f32> = sub %26, %27
-        %29:vec2<i32> = convert %28
-        store %icoord, %29
-        %30:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
-        %x_65:f32 = load %30
-        %32:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
-        %x_67:f32 = load %32
-        %x_69:i32 = load_vector_element %icoord, 0u
-        %x_71:i32 = load_vector_element %icoord, 1u
-        %36:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %x_74:i32 = load %36
-        %38:i32 = mul %x_69, %x_71
-        %39:bool = neq %38, %x_74
-        if %39 [t: %b5, f: %b6] {  # if_2
-          %b5 = block {  # true
-            %40:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
-            %x_80:f32 = load %40
+    %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 = block {  # false
-            %42:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
-            %x_82:f32 = load %42
+          $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
           }
         }
-        %x_83:f32 = load %x_40
-        %45:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %x_85:i32 = load %45
-        %47:f32 = convert %x_85
-        %48:vec4<f32> = construct %x_65, %x_67, %x_83, %47
-        store %x_GLF_color, %48
+        %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 = block {  # false
-        %x_88:vec4<f32> = load %gl_FragCoord
-        %50:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-        %x_91:f32 = load %50
-        %52:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-        %x_94:f32 = load %52
-        %54:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
-        %x_96:f32 = load %54
-        %56:f32 = access %x_88, 0u
-        %57:f32 = access %x_88, 1u
-        %58:vec2<f32> = construct %56, %57
-        %59:vec2<f32> = mul %58, %x_91
-        %60:vec2<f32> = construct %x_94, %x_96
-        %61:vec2<f32> = sub %59, %60
-        %62:vec2<i32> = convert %61
-        store %icoord_1, %62
-        %63:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
-        %x_101:f32 = load %63
-        %65:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
-        %x_103:f32 = load %65
-        %x_105:i32 = load_vector_element %icoord_1, 0u
-        %68:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
-        %x_108:f32 = load %68
-        %70:f32 = convert %x_105
-        %71:vec4<f32> = construct %x_101, %x_103, %70, %x_108
-        store %x_GLF_color, %71
+      $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 {
-  %b7 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B7: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %74:void = call %main_1
-    %75:vec4<f32> = load %x_GLF_color
-    %76:main_out = construct %75
-    ret %76
+    %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
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-function-fragcoord-condition-always-return/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-function-fragcoord-condition-always-return/0-opt.spvasm.expected.ir.msl
index 1de782d..14d220e 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-function-fragcoord-condition-always-return/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-function-fragcoord-condition-always-return/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,128 +20,138 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_8:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_11:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%func_f1_ = func(%x:ptr<function, f32, read_write>):f32 -> %b2 {
-  %b2 = block {
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        if true [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+%func_f1_ = func(%x:ptr<function, f32, read_write>):f32 {
+  $B2: {
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        if true [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        loop [b: %b7, c: %b8] {  # loop_2
-          %b7 = block {  # body
+        loop [b: $B7, c: $B8] {  # loop_2
+          $B7: {  # body
             %7:f32 = load_vector_element %gl_FragCoord, 1u
             %8:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
             %9:f32 = load %8
             %10:bool = lt %7, %9
-            if %10 [t: %b9] {  # if_2
-              %b9 = block {  # true
-                loop [b: %b10, c: %b11] {  # loop_3
-                  %b10 = block {  # body
-                    continue %b11
+            if %10 [t: $B9] {  # if_2
+              $B9: {  # true
+                loop [b: $B10, c: $B11] {  # loop_3
+                  $B10: {  # body
+                    continue  # -> $B11
                   }
-                  %b11 = block {  # continuing
-                    %x_88:f32 = load_vector_element %gl_FragCoord, 0u
-                    %12:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
-                    %x_90:f32 = load %12
-                    %14:bool = lt %x_88, %x_90
-                    %15:bool = eq %14, false
-                    break_if %15 %b10
+                  $B11: {  # continuing
+                    %11:f32 = load_vector_element %gl_FragCoord, 0u
+                    %x_88:f32 = let %11
+                    %13:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
+                    %14:f32 = load %13
+                    %x_90:f32 = let %14
+                    %16:bool = lt %x_88, %x_90
+                    %17:bool = eq %16, false
+                    break_if %17  # -> [t: exit_loop loop_3, f: $B10]
                   }
                 }
                 exit_if  # if_2
               }
             }
-            %16:f32 = load %x
-            %17:ptr<uniform, f32, read> = access %x_8, 0u, 3i, 0u
-            %18:f32 = load %17
-            %19:bool = lt %16, %18
-            if %19 [t: %b12] {  # if_3
-              %b12 = block {  # true
-                %20:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
-                %x_99:f32 = load %20
+            %18:f32 = load %x
+            %19:ptr<uniform, f32, read> = access %x_8, 0u, 3i, 0u
+            %20:f32 = load %19
+            %21:bool = lt %18, %20
+            if %21 [t: $B12] {  # if_3
+              $B12: {  # true
+                %22:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
+                %23:f32 = load %22
+                %x_99:f32 = let %23
                 ret %x_99
               }
             }
-            continue %b8
+            continue  # -> $B8
           }
-          %b8 = block {  # continuing
-            %x_101:f32 = load_vector_element %gl_FragCoord, 1u
-            %23:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
-            %x_103:f32 = load %23
-            %25:bool = lt %x_101, %x_103
-            %26:bool = eq %25, false
-            break_if %26 %b7
+          $B8: {  # continuing
+            %25:f32 = load_vector_element %gl_FragCoord, 1u
+            %x_101:f32 = let %25
+            %27:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
+            %28:f32 = load %27
+            %x_103:f32 = let %28
+            %30:bool = lt %x_101, %x_103
+            %31:bool = eq %30, false
+            break_if %31  # -> [t: exit_loop loop_2, f: $B7]
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
-    %27:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-    %x_106:f32 = load %27
+    %32:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+    %33:f32 = load %32
+    %x_106:f32 = let %33
     ret %x_106
   }
 }
-%main_1 = func():void -> %b13 {
-  %b13 = block {
+%main_1 = func():void {
+  $B13: {
     %param:ptr<function, f32, read_write> = var
-    %31:f32 = load_vector_element %gl_FragCoord, 0u
-    store %param, %31
-    %x_42:f32 = call %func_f1_, %param
-    %33:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
-    %34:f32 = load %33
-    %35:bool = eq %x_42, %34
-    if %35 [t: %b14, f: %b15] {  # if_4
-      %b14 = block {  # true
-        %36:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
-        %37:i32 = load %36
-        %38:f32 = convert %37
-        %39:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
-        %40:i32 = load %39
-        %41:f32 = convert %40
-        %42:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
-        %43:i32 = load %42
-        %44:f32 = convert %43
-        %45:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
-        %46:i32 = load %45
-        %47:f32 = convert %46
-        %48:vec4<f32> = construct %38, %41, %44, %47
-        store %x_GLF_color, %48
+    %37:f32 = load_vector_element %gl_FragCoord, 0u
+    store %param, %37
+    %38:f32 = call %func_f1_, %param
+    %x_42:f32 = let %38
+    %40:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
+    %41:f32 = load %40
+    %42:bool = eq %x_42, %41
+    if %42 [t: $B14, f: $B15] {  # if_4
+      $B14: {  # true
+        %43:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
+        %44:i32 = load %43
+        %45:f32 = convert %44
+        %46:f32 = let %45
+        %47:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
+        %48:i32 = load %47
+        %49:f32 = convert %48
+        %50:f32 = let %49
+        %51:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
+        %52:i32 = load %51
+        %53:f32 = convert %52
+        %54:f32 = let %53
+        %55:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
+        %56:i32 = load %55
+        %57:f32 = convert %56
+        %58:vec4<f32> = construct %46, %50, %54, %57
+        store %x_GLF_color, %58
         exit_if  # if_4
       }
-      %b15 = block {  # false
-        %49:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
-        %50:i32 = load %49
-        %51:f32 = convert %50
-        %52:vec4<f32> = construct %51
-        store %x_GLF_color, %52
+      $B15: {  # false
+        %59:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
+        %60:i32 = load %59
+        %61:f32 = convert %60
+        %62:vec4<f32> = construct %61
+        store %x_GLF_color, %62
         exit_if  # if_4
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b16 {
-  %b16 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B16: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %55:void = call %main_1
-    %56:vec4<f32> = load %x_GLF_color
-    %57:main_out = construct %56
-    ret %57
+    %65:void = call %main_1
+    %66:vec4<f32> = load %x_GLF_color
+    %67:main_out = construct %66
+    ret %67
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-function-fragcoord-condition-always-return/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-function-fragcoord-condition-always-return/0-opt.wgsl.expected.ir.msl
index 947b26e..ab2d96b 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-function-fragcoord-condition-always-return/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-function-fragcoord-condition-always-return/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,128 +20,150 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_8:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_11:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%func_f1_ = func(%x:ptr<function, f32, read_write>):f32 -> %b2 {
-  %b2 = block {
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        if true [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+%func_f1_ = func(%x:ptr<function, f32, read_write>):f32 {
+  $B2: {
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        if true [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        loop [b: %b7, c: %b8] {  # loop_2
-          %b7 = block {  # body
-            %x_77:f32 = load_vector_element %gl_FragCoord, 1u
-            %8:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
-            %x_79:f32 = load %8
-            %10:bool = lt %x_77, %x_79
-            if %10 [t: %b9] {  # if_2
-              %b9 = block {  # true
-                loop [b: %b10, c: %b11] {  # loop_3
-                  %b10 = block {  # body
-                    continue %b11
+        loop [b: $B7, c: $B8] {  # loop_2
+          $B7: {  # body
+            %7:f32 = load_vector_element %gl_FragCoord, 1u
+            %x_77:f32 = let %7
+            %9:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
+            %10:f32 = load %9
+            %x_79:f32 = let %10
+            %12:bool = lt %x_77, %x_79
+            if %12 [t: $B9] {  # if_2
+              $B9: {  # true
+                loop [b: $B10, c: $B11] {  # loop_3
+                  $B10: {  # body
+                    continue  # -> $B11
                   }
-                  %b11 = block {  # continuing
-                    %x_88:f32 = load_vector_element %gl_FragCoord, 0u
-                    %12:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
-                    %x_90:f32 = load %12
-                    %14:bool = lt %x_88, %x_90
-                    %15:bool = eq %14, false
-                    break_if %15 %b10
+                  $B11: {  # continuing
+                    %13:f32 = load_vector_element %gl_FragCoord, 0u
+                    %x_88:f32 = let %13
+                    %15:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
+                    %16:f32 = load %15
+                    %x_90:f32 = let %16
+                    %18:bool = lt %x_88, %x_90
+                    %19:bool = eq %18, false
+                    break_if %19  # -> [t: exit_loop loop_3, f: $B10]
                   }
                 }
                 exit_if  # if_2
               }
             }
-            %x_92:f32 = load %x
-            %17:ptr<uniform, f32, read> = access %x_8, 0u, 3i, 0u
-            %x_94:f32 = load %17
-            %19:bool = lt %x_92, %x_94
-            if %19 [t: %b12] {  # if_3
-              %b12 = block {  # true
-                %20:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
-                %x_99:f32 = load %20
+            %20:f32 = load %x
+            %x_92:f32 = let %20
+            %22:ptr<uniform, f32, read> = access %x_8, 0u, 3i, 0u
+            %23:f32 = load %22
+            %x_94:f32 = let %23
+            %25:bool = lt %x_92, %x_94
+            if %25 [t: $B12] {  # if_3
+              $B12: {  # true
+                %26:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
+                %27:f32 = load %26
+                %x_99:f32 = let %27
                 ret %x_99
               }
             }
-            continue %b8
+            continue  # -> $B8
           }
-          %b8 = block {  # continuing
-            %x_101:f32 = load_vector_element %gl_FragCoord, 1u
-            %23:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
-            %x_103:f32 = load %23
-            %25:bool = lt %x_101, %x_103
-            %26:bool = eq %25, false
-            break_if %26 %b7
+          $B8: {  # continuing
+            %29:f32 = load_vector_element %gl_FragCoord, 1u
+            %x_101:f32 = let %29
+            %31:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
+            %32:f32 = load %31
+            %x_103:f32 = let %32
+            %34:bool = lt %x_101, %x_103
+            %35:bool = eq %34, false
+            break_if %35  # -> [t: exit_loop loop_2, f: $B7]
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
-    %27:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-    %x_106:f32 = load %27
+    %36:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+    %37:f32 = load %36
+    %x_106:f32 = let %37
     ret %x_106
   }
 }
-%main_1 = func():void -> %b13 {
-  %b13 = block {
+%main_1 = func():void {
+  $B13: {
     %param:ptr<function, f32, read_write> = var
-    %x_41:f32 = load_vector_element %gl_FragCoord, 0u
+    %41:f32 = load_vector_element %gl_FragCoord, 0u
+    %x_41:f32 = let %41
     store %param, %x_41
-    %x_42:f32 = call %func_f1_, %param
-    %33:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
-    %x_44:f32 = load %33
-    %35:bool = eq %x_42, %x_44
-    if %35 [t: %b14, f: %b15] {  # if_4
-      %b14 = block {  # true
-        %36:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
-        %x_50:i32 = load %36
-        %38:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
-        %x_53:i32 = load %38
-        %40:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
-        %x_56:i32 = load %40
-        %42:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
-        %x_59:i32 = load %42
-        %44:f32 = convert %x_50
-        %45:f32 = convert %x_53
-        %46:f32 = convert %x_56
-        %47:f32 = convert %x_59
-        %48:vec4<f32> = construct %44, %45, %46, %47
-        store %x_GLF_color, %48
+    %43:f32 = call %func_f1_, %param
+    %x_42:f32 = let %43
+    %45:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
+    %46:f32 = load %45
+    %x_44:f32 = let %46
+    %48:bool = eq %x_42, %x_44
+    if %48 [t: $B14, f: $B15] {  # if_4
+      $B14: {  # true
+        %49:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
+        %50:i32 = load %49
+        %x_50:i32 = let %50
+        %52:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
+        %53:i32 = load %52
+        %x_53:i32 = let %53
+        %55:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
+        %56:i32 = load %55
+        %x_56:i32 = let %56
+        %58:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
+        %59:i32 = load %58
+        %x_59:i32 = let %59
+        %61:f32 = convert %x_50
+        %62:f32 = let %61
+        %63:f32 = convert %x_53
+        %64:f32 = let %63
+        %65:f32 = convert %x_56
+        %66:f32 = let %65
+        %67:f32 = convert %x_59
+        %68:vec4<f32> = construct %62, %64, %66, %67
+        store %x_GLF_color, %68
         exit_if  # if_4
       }
-      %b15 = block {  # false
-        %49:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
-        %x_63:i32 = load %49
-        %x_64:f32 = convert %x_63
-        %52:vec4<f32> = construct %x_64, %x_64, %x_64, %x_64
-        store %x_GLF_color, %52
+      $B15: {  # false
+        %69:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
+        %70:i32 = load %69
+        %x_63:i32 = let %70
+        %72:f32 = convert %x_63
+        %x_64:f32 = let %72
+        %74:vec4<f32> = construct %x_64, %x_64, %x_64, %x_64
+        store %x_GLF_color, %74
         exit_if  # if_4
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b16 {
-  %b16 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B16: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %55:void = call %main_1
-    %56:vec4<f32> = load %x_GLF_color
-    %57:main_out = construct %56
-    ret %57
+    %77:void = call %main_1
+    %78:vec4<f32> = load %x_GLF_color
+    %79:main_out = construct %78
+    ret %79
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-function-vec2-never-discard/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-function-vec2-never-discard/0-opt.spvasm.expected.ir.msl
index b15b95e..530cd47 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-function-vec2-never-discard/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-function-vec2-never-discard/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -24,84 +24,96 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_8:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_10:ptr<uniform, buf2, read> = var @binding_point(0, 2)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_13:ptr<uniform, buf0, read> = var @binding_point(0, 0)
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%func_vf2_ = func(%pos:ptr<function, vec2<f32>, read_write>):bool -> %b2 {
-  %b2 = block {
-    %8:f32 = load_vector_element %pos, 0u
-    %9:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-    %10:f32 = load %9
-    %11:bool = lt %8, %10
-    if %11 [t: %b3] {  # if_1
-      %b3 = block {  # true
+%func_vf2_ = func(%pos:ptr<function, vec2<f32>, read_write>):bool {
+  $B2: {
+    %9:f32 = load_vector_element %pos, 0u
+    %10:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+    %11:f32 = load %10
+    %12:bool = lt %9, %11
+    if %12 [t: $B3] {  # if_1
+      $B3: {  # true
         ret true
       }
     }
-    %12:f32 = load_vector_element %pos, 1u
-    %13:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-    %14:f32 = load %13
-    %15:bool = gt %12, %14
-    if %15 [t: %b4] {  # if_2
-      %b4 = block {  # true
+    %13:f32 = load_vector_element %pos, 1u
+    %14:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+    %15:f32 = load %14
+    %16:bool = gt %13, %15
+    if %16 [t: $B4] {  # if_2
+      $B4: {  # true
         ret false
       }
     }
-    %16:ptr<uniform, f32, read> = access %x_10, 0u
-    %17:f32 = load %16
-    %18:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
-    %19:f32 = load %18
-    %20:bool = gt %17, %19
-    if %20 [t: %b5] {  # if_3
-      %b5 = block {  # true
+    %17:ptr<uniform, f32, read> = access %x_10, 0u
+    %18:f32 = load %17
+    %19:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
+    %20:f32 = load %19
+    %21:bool = gt %18, %20
+    if %21 [t: $B5] {  # if_3
+      $B5: {  # true
         ret true
       }
     }
     ret true
   }
 }
-%main_1 = func():void -> %b6 {
-  %b6 = block {
+%main_1 = func():void {
+  $B6: {
     %param:ptr<function, vec2<f32>, read_write> = var
-    %23:vec4<f32> = load %gl_FragCoord
-    %24:vec2<f32> = swizzle %23, xy
-    store %param, %24
-    %x_44:bool = call %func_vf2_, %param
-    if %x_44 [t: %b7] {  # if_4
-      %b7 = block {  # true
-        discard
+    %24:vec4<f32> = load %gl_FragCoord
+    %25:vec2<f32> = swizzle %24, xy
+    store %param, %25
+    %26:bool = call %func_vf2_, %param
+    %x_44:bool = let %26
+    if %x_44 [t: $B7] {  # if_4
+      $B7: {  # true
+        store %continue_execution, false
         exit_if  # if_4
       }
     }
-    %26:ptr<uniform, i32, read> = access %x_13, 0u, 0i, 0u
-    %27:i32 = load %26
-    %28:f32 = convert %27
-    %29:ptr<uniform, i32, read> = access %x_13, 0u, 1i, 0u
-    %30:i32 = load %29
-    %31:f32 = convert %30
+    %28:ptr<uniform, i32, read> = access %x_13, 0u, 0i, 0u
+    %29:i32 = load %28
+    %30:f32 = convert %29
+    %31:f32 = let %30
     %32:ptr<uniform, i32, read> = access %x_13, 0u, 1i, 0u
     %33:i32 = load %32
     %34:f32 = convert %33
-    %35:ptr<uniform, i32, read> = access %x_13, 0u, 0i, 0u
-    %36:i32 = load %35
-    %37:f32 = convert %36
-    %38:vec4<f32> = construct %28, %31, %34, %37
-    store %x_GLF_color, %38
+    %35:f32 = let %34
+    %36:ptr<uniform, i32, read> = access %x_13, 0u, 1i, 0u
+    %37:i32 = load %36
+    %38:f32 = convert %37
+    %39:f32 = let %38
+    %40:ptr<uniform, i32, read> = access %x_13, 0u, 0i, 0u
+    %41:i32 = load %40
+    %42:f32 = convert %41
+    %43:vec4<f32> = construct %31, %35, %39, %42
+    store %x_GLF_color, %43
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b8 {
-  %b8 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B8: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %41:void = call %main_1
-    %42:vec4<f32> = load %x_GLF_color
-    %43:main_out = construct %42
-    ret %43
+    %46:void = call %main_1
+    %47:vec4<f32> = load %x_GLF_color
+    %48:main_out = construct %47
+    %49:bool = load %continue_execution
+    %50:bool = eq %49, false
+    if %50 [t: $B9] {  # if_5
+      $B9: {  # true
+        terminate_invocation
+      }
+    }
+    ret %48
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-function-vec2-never-discard/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-function-vec2-never-discard/0-opt.wgsl.expected.ir.msl
index 0d80953..81f9299 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-function-vec2-never-discard/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-function-vec2-never-discard/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -24,86 +24,109 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_8:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_10:ptr<uniform, buf2, read> = var @binding_point(0, 2)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_13:ptr<uniform, buf0, read> = var @binding_point(0, 0)
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%func_vf2_ = func(%pos:ptr<function, vec2<f32>, read_write>):bool -> %b2 {
-  %b2 = block {
-    %x_62:f32 = load_vector_element %pos, 0u
-    %9:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-    %x_64:f32 = load %9
-    %11:bool = lt %x_62, %x_64
-    if %11 [t: %b3] {  # if_1
-      %b3 = block {  # true
+%func_vf2_ = func(%pos:ptr<function, vec2<f32>, read_write>):bool {
+  $B2: {
+    %9:f32 = load_vector_element %pos, 0u
+    %x_62:f32 = let %9
+    %11:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+    %12:f32 = load %11
+    %x_64:f32 = let %12
+    %14:bool = lt %x_62, %x_64
+    if %14 [t: $B3] {  # if_1
+      $B3: {  # true
         ret true
       }
     }
-    %x_69:f32 = load_vector_element %pos, 1u
-    %13:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-    %x_71:f32 = load %13
-    %15:bool = gt %x_69, %x_71
-    if %15 [t: %b4] {  # if_2
-      %b4 = block {  # true
+    %15:f32 = load_vector_element %pos, 1u
+    %x_69:f32 = let %15
+    %17:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+    %18:f32 = load %17
+    %x_71:f32 = let %18
+    %20:bool = gt %x_69, %x_71
+    if %20 [t: $B4] {  # if_2
+      $B4: {  # true
         ret false
       }
     }
-    %16:ptr<uniform, f32, read> = access %x_10, 0u
-    %x_76:f32 = load %16
-    %18:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
-    %x_78:f32 = load %18
-    %20:bool = gt %x_76, %x_78
-    if %20 [t: %b5] {  # if_3
-      %b5 = block {  # true
+    %21:ptr<uniform, f32, read> = access %x_10, 0u
+    %22:f32 = load %21
+    %x_76:f32 = let %22
+    %24:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
+    %25:f32 = load %24
+    %x_78:f32 = let %25
+    %27:bool = gt %x_76, %x_78
+    if %27 [t: $B5] {  # if_3
+      $B5: {  # true
         ret true
       }
     }
     ret true
   }
 }
-%main_1 = func():void -> %b6 {
-  %b6 = block {
+%main_1 = func():void {
+  $B6: {
     %param:ptr<function, vec2<f32>, read_write> = var
-    %x_42:vec4<f32> = load %gl_FragCoord
-    %24:f32 = access %x_42, 0u
-    %25:f32 = access %x_42, 1u
-    %26:vec2<f32> = construct %24, %25
-    store %param, %26
-    %x_44:bool = call %func_vf2_, %param
-    if %x_44 [t: %b7] {  # if_4
-      %b7 = block {  # true
-        discard
+    %30:vec4<f32> = load %gl_FragCoord
+    %x_42:vec4<f32> = let %30
+    %32:f32 = access %x_42, 0u
+    %33:f32 = access %x_42, 1u
+    %34:vec2<f32> = construct %32, %33
+    store %param, %34
+    %35:bool = call %func_vf2_, %param
+    %x_44:bool = let %35
+    if %x_44 [t: $B7] {  # if_4
+      $B7: {  # true
+        store %continue_execution, false
         exit_if  # if_4
       }
     }
-    %28:ptr<uniform, i32, read> = access %x_13, 0u, 0i, 0u
-    %x_48:i32 = load %28
-    %30:ptr<uniform, i32, read> = access %x_13, 0u, 1i, 0u
-    %x_51:i32 = load %30
-    %32:ptr<uniform, i32, read> = access %x_13, 0u, 1i, 0u
-    %x_54:i32 = load %32
-    %34:ptr<uniform, i32, read> = access %x_13, 0u, 0i, 0u
-    %x_57:i32 = load %34
-    %36:f32 = convert %x_48
-    %37:f32 = convert %x_51
-    %38:f32 = convert %x_54
-    %39:f32 = convert %x_57
-    %40:vec4<f32> = construct %36, %37, %38, %39
-    store %x_GLF_color, %40
+    %37:ptr<uniform, i32, read> = access %x_13, 0u, 0i, 0u
+    %38:i32 = load %37
+    %x_48:i32 = let %38
+    %40:ptr<uniform, i32, read> = access %x_13, 0u, 1i, 0u
+    %41:i32 = load %40
+    %x_51:i32 = let %41
+    %43:ptr<uniform, i32, read> = access %x_13, 0u, 1i, 0u
+    %44:i32 = load %43
+    %x_54:i32 = let %44
+    %46:ptr<uniform, i32, read> = access %x_13, 0u, 0i, 0u
+    %47:i32 = load %46
+    %x_57:i32 = let %47
+    %49:f32 = convert %x_48
+    %50:f32 = let %49
+    %51:f32 = convert %x_51
+    %52:f32 = let %51
+    %53:f32 = convert %x_54
+    %54:f32 = let %53
+    %55:f32 = convert %x_57
+    %56:vec4<f32> = construct %50, %52, %54, %55
+    store %x_GLF_color, %56
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b8 {
-  %b8 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B8: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %43:void = call %main_1
-    %44:vec4<f32> = load %x_GLF_color
-    %45:main_out = construct %44
-    ret %45
+    %59:void = call %main_1
+    %60:vec4<f32> = load %x_GLF_color
+    %61:main_out = construct %60
+    %62:bool = load %continue_execution
+    %63:bool = eq %62, false
+    if %63 [t: $B9] {  # if_5
+      $B9: {  # true
+        terminate_invocation
+      }
+    }
+    ret %61
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-global-loop-bound-true-logical-or/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-global-loop-bound-true-logical-or/0-opt.spvasm.expected.ir.msl
index d1a119e..cd40180 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-global-loop-bound-true-logical-or/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-global-loop-bound-true-logical-or/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,108 +12,111 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_global_loop_count:ptr<private, i32, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     store %x_GLF_global_loop_count, 0i
     %5:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
     %6:i32 = load %5
     %7:f32 = convert %6
-    %8:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %9:i32 = load %8
-    %10:f32 = convert %9
-    %11:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %12:i32 = load %11
-    %13:f32 = convert %12
-    %14:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %15:i32 = load %14
-    %16:f32 = convert %15
-    %17:vec4<f32> = construct %7, %10, %13, %16
-    store %x_GLF_color, %17
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    %8:f32 = let %7
+    %9:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %10:i32 = load %9
+    %11:f32 = convert %10
+    %12:f32 = let %11
+    %13:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %14:i32 = load %13
+    %15:f32 = convert %14
+    %16:f32 = let %15
+    %17:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %18:i32 = load %17
+    %19:f32 = convert %18
+    %20:vec4<f32> = construct %8, %12, %16, %19
+    store %x_GLF_color, %20
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %x_54:ptr<function, bool, read_write> = var
         %x_55:ptr<function, bool, read_write> = var
-        %20:i32 = load %x_GLF_global_loop_count
-        %21:bool = lt %20, 100i
-        if %21 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %23:i32 = load %x_GLF_global_loop_count
+        %24:bool = lt %23, 100i
+        if %24 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %22:i32 = load %x_GLF_global_loop_count
-        %23:i32 = add %22, 1i
-        store %x_GLF_global_loop_count, %23
+        %25:i32 = load %x_GLF_global_loop_count
+        %26:i32 = add %25, 1i
+        store %x_GLF_global_loop_count, %26
         store %x_55, true
-        if false [t: %b7] {  # if_2
-          %b7 = block {  # true
-            %24:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-            %25:i32 = load %24
-            %26:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-            %27:i32 = load %26
-            %28:bool = eq %25, %27
-            store %x_54, %28
-            %29:bool = load %x_54
-            store %x_55, %29
+        if false [t: $B7] {  # if_2
+          $B7: {  # true
+            %27:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+            %28:i32 = load %27
+            %29:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+            %30:i32 = load %29
+            %31:bool = eq %28, %30
+            store %x_54, %31
+            %32:bool = load %x_54
+            store %x_55, %32
             exit_if  # if_2
           }
         }
-        %30:bool = load %x_55
-        %31:bool = eq %30, false
-        if %31 [t: %b8] {  # if_3
-          %b8 = block {  # true
+        %33:bool = load %x_55
+        %34:bool = eq %33, false
+        if %34 [t: $B8] {  # if_3
+          $B8: {  # true
             exit_loop  # loop_1
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
-    loop [b: %b9, c: %b10] {  # loop_2
-      %b9 = block {  # body
-        %32:i32 = load %x_GLF_global_loop_count
-        %33:bool = lt %32, 100i
-        if %33 [t: %b11, f: %b12] {  # if_4
-          %b11 = block {  # true
+    loop [b: $B9, c: $B10] {  # loop_2
+      $B9: {  # body
+        %35:i32 = load %x_GLF_global_loop_count
+        %36:bool = lt %35, 100i
+        if %36 [t: $B11, f: $B12] {  # if_4
+          $B11: {  # true
             exit_if  # if_4
           }
-          %b12 = block {  # false
+          $B12: {  # false
             exit_loop  # loop_2
           }
         }
-        %34:i32 = load %x_GLF_global_loop_count
-        %35:i32 = add %34, 1i
-        store %x_GLF_global_loop_count, %35
-        %36:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %37:i32 = load %36
-        %38:f32 = convert %37
-        %39:vec4<f32> = construct %38
-        store %x_GLF_color, %39
-        continue %b10
+        %37:i32 = load %x_GLF_global_loop_count
+        %38:i32 = add %37, 1i
+        store %x_GLF_global_loop_count, %38
+        %39:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %40:i32 = load %39
+        %41:f32 = convert %40
+        %42:vec4<f32> = construct %41
+        store %x_GLF_color, %42
+        continue  # -> $B10
       }
-      %b10 = block {  # continuing
-        next_iteration %b9
+      $B10: {  # continuing
+        next_iteration  # -> $B9
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b13 {
-  %b13 = block {
-    %41:void = call %main_1
-    %42:vec4<f32> = load %x_GLF_color
-    %43:main_out = construct %42
-    ret %43
+%tint_symbol = @fragment func():main_out {
+  $B13: {
+    %44:void = call %main_1
+    %45:vec4<f32> = load %x_GLF_color
+    %46:main_out = construct %45
+    ret %46
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-global-loop-bound-true-logical-or/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-global-loop-bound-true-logical-or/0-opt.wgsl.expected.ir.msl
index e7e42b3..7a9ed6b 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-global-loop-bound-true-logical-or/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-global-loop-bound-true-logical-or/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,108 +12,124 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_global_loop_count:ptr<private, i32, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     store %x_GLF_global_loop_count, 0i
     %5:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_26:i32 = load %5
-    %7:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_29:i32 = load %7
-    %9:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_32:i32 = load %9
-    %11:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_35:i32 = load %11
-    %13:f32 = convert %x_26
-    %14:f32 = convert %x_29
-    %15:f32 = convert %x_32
-    %16:f32 = convert %x_35
-    %17:vec4<f32> = construct %13, %14, %15, %16
-    store %x_GLF_color, %17
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    %6:i32 = load %5
+    %x_26:i32 = let %6
+    %8:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %9:i32 = load %8
+    %x_29:i32 = let %9
+    %11:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %12:i32 = load %11
+    %x_32:i32 = let %12
+    %14:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %15:i32 = load %14
+    %x_35:i32 = let %15
+    %17:f32 = convert %x_26
+    %18:f32 = let %17
+    %19:f32 = convert %x_29
+    %20:f32 = let %19
+    %21:f32 = convert %x_32
+    %22:f32 = let %21
+    %23:f32 = convert %x_35
+    %24:vec4<f32> = construct %18, %20, %22, %23
+    store %x_GLF_color, %24
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %x_54:ptr<function, bool, read_write> = var
         %x_55_phi:ptr<function, bool, read_write> = var
-        %x_42:i32 = load %x_GLF_global_loop_count
-        %21:bool = lt %x_42, 100i
-        if %21 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %27:i32 = load %x_GLF_global_loop_count
+        %x_42:i32 = let %27
+        %29:bool = lt %x_42, 100i
+        if %29 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_45:i32 = load %x_GLF_global_loop_count
-        %23:i32 = add %x_45, 1i
-        store %x_GLF_global_loop_count, %23
+        %30:i32 = load %x_GLF_global_loop_count
+        %x_45:i32 = let %30
+        %32:i32 = add %x_45, 1i
+        store %x_GLF_global_loop_count, %32
         store %x_55_phi, true
-        if false [t: %b7] {  # if_2
-          %b7 = block {  # true
-            %24:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-            %x_51:i32 = load %24
-            %26:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-            %x_53:i32 = load %26
-            %28:bool = eq %x_51, %x_53
-            store %x_54, %28
-            %29:bool = load %x_54
-            store %x_55_phi, %29
+        if false [t: $B7] {  # if_2
+          $B7: {  # true
+            %33:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+            %34:i32 = load %33
+            %x_51:i32 = let %34
+            %36:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+            %37:i32 = load %36
+            %x_53:i32 = let %37
+            %39:bool = eq %x_51, %x_53
+            store %x_54, %39
+            %40:bool = load %x_54
+            store %x_55_phi, %40
             exit_if  # if_2
           }
         }
-        %x_55:bool = load %x_55_phi
-        %31:bool = eq %x_55, false
-        if %31 [t: %b8] {  # if_3
-          %b8 = block {  # true
+        %41:bool = load %x_55_phi
+        %x_55:bool = let %41
+        %43:bool = eq %x_55, false
+        if %43 [t: $B8] {  # if_3
+          $B8: {  # true
             exit_loop  # loop_1
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
-    loop [b: %b9, c: %b10] {  # loop_2
-      %b9 = block {  # body
-        %x_63:i32 = load %x_GLF_global_loop_count
-        %33:bool = lt %x_63, 100i
-        if %33 [t: %b11, f: %b12] {  # if_4
-          %b11 = block {  # true
+    loop [b: $B9, c: $B10] {  # loop_2
+      $B9: {  # body
+        %44:i32 = load %x_GLF_global_loop_count
+        %x_63:i32 = let %44
+        %46:bool = lt %x_63, 100i
+        if %46 [t: $B11, f: $B12] {  # if_4
+          $B11: {  # true
             exit_if  # if_4
           }
-          %b12 = block {  # false
+          $B12: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_66:i32 = load %x_GLF_global_loop_count
-        %35:i32 = add %x_66, 1i
-        store %x_GLF_global_loop_count, %35
-        %36:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_69:i32 = load %36
-        %x_70:f32 = convert %x_69
-        %39:vec4<f32> = construct %x_70, %x_70, %x_70, %x_70
-        store %x_GLF_color, %39
-        continue %b10
+        %47:i32 = load %x_GLF_global_loop_count
+        %x_66:i32 = let %47
+        %49:i32 = add %x_66, 1i
+        store %x_GLF_global_loop_count, %49
+        %50:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %51:i32 = load %50
+        %x_69:i32 = let %51
+        %53:f32 = convert %x_69
+        %x_70:f32 = let %53
+        %55:vec4<f32> = construct %x_70, %x_70, %x_70, %x_70
+        store %x_GLF_color, %55
+        continue  # -> $B10
       }
-      %b10 = block {  # continuing
-        next_iteration %b9
+      $B10: {  # continuing
+        next_iteration  # -> $B9
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b13 {
-  %b13 = block {
-    %41:void = call %main_1
-    %42:vec4<f32> = load %x_GLF_color
-    %43:main_out = construct %42
-    ret %43
+%tint_symbol = @fragment func():main_out {
+  $B13: {
+    %57:void = call %main_1
+    %58:vec4<f32> = load %x_GLF_color
+    %59:main_out = construct %58
+    ret %59
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-float-accumulate-matrix/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-float-accumulate-matrix/0-opt.spvasm.expected.ir.msl
index 62dbd34..2424c60 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-float-accumulate-matrix/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-float-accumulate-matrix/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -24,16 +24,17 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_global_loop_count:ptr<private, i32, read_write> = var
   %x_7:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_12:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_15:ptr<uniform, buf2, read> = var @binding_point(0, 2)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %m:ptr<function, mat4x4<f32>, read_write> = var
     %v:ptr<function, vec4<f32>, read_write> = var
     %f:ptr<function, f32, read_write> = var
@@ -41,191 +42,211 @@
     %b:ptr<function, i32, read_write> = var
     %zero:ptr<function, f32, read_write> = var
     store %x_GLF_global_loop_count, 0i
-    %13:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
-    %14:f32 = load %13
-    %15:ptr<uniform, f32, read> = access %x_7, 0u, 2i, 0u
-    %16:f32 = load %15
-    %17:ptr<uniform, f32, read> = access %x_7, 0u, 3i, 0u
-    %18:f32 = load %17
-    %19:ptr<uniform, f32, read> = access %x_7, 0u, 4i, 0u
-    %20:f32 = load %19
-    %21:vec4<f32> = construct %14, %16, %18, %20
-    %22:ptr<uniform, f32, read> = access %x_7, 0u, 5i, 0u
-    %23:f32 = load %22
-    %24:ptr<uniform, f32, read> = access %x_7, 0u, 6i, 0u
+    %14:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
+    %15:f32 = load %14
+    %16:ptr<uniform, f32, read> = access %x_7, 0u, 2i, 0u
+    %17:f32 = load %16
+    %18:ptr<uniform, f32, read> = access %x_7, 0u, 3i, 0u
+    %19:f32 = load %18
+    %20:ptr<uniform, f32, read> = access %x_7, 0u, 4i, 0u
+    %21:f32 = load %20
+    %22:vec4<f32> = construct %15, %17, %19, %21
+    %23:vec4<f32> = let %22
+    %24:ptr<uniform, f32, read> = access %x_7, 0u, 5i, 0u
     %25:f32 = load %24
-    %26:ptr<uniform, f32, read> = access %x_7, 0u, 7i, 0u
+    %26:ptr<uniform, f32, read> = access %x_7, 0u, 6i, 0u
     %27:f32 = load %26
-    %28:ptr<uniform, f32, read> = access %x_7, 0u, 8i, 0u
+    %28:ptr<uniform, f32, read> = access %x_7, 0u, 7i, 0u
     %29:f32 = load %28
-    %30:vec4<f32> = construct %23, %25, %27, %29
-    %31:ptr<uniform, f32, read> = access %x_7, 0u, 9i, 0u
-    %32:f32 = load %31
-    %33:ptr<uniform, f32, read> = access %x_7, 0u, 10i, 0u
-    %34:f32 = load %33
-    %35:ptr<uniform, f32, read> = access %x_7, 0u, 11i, 0u
-    %36:f32 = load %35
-    %37:ptr<uniform, f32, read> = access %x_7, 0u, 12i, 0u
-    %38:f32 = load %37
-    %39:vec4<f32> = construct %32, %34, %36, %38
-    %40:ptr<uniform, f32, read> = access %x_7, 0u, 13i, 0u
+    %30:ptr<uniform, f32, read> = access %x_7, 0u, 8i, 0u
+    %31:f32 = load %30
+    %32:vec4<f32> = construct %25, %27, %29, %31
+    %33:vec4<f32> = let %32
+    %34:ptr<uniform, f32, read> = access %x_7, 0u, 9i, 0u
+    %35:f32 = load %34
+    %36:ptr<uniform, f32, read> = access %x_7, 0u, 10i, 0u
+    %37:f32 = load %36
+    %38:ptr<uniform, f32, read> = access %x_7, 0u, 11i, 0u
+    %39:f32 = load %38
+    %40:ptr<uniform, f32, read> = access %x_7, 0u, 12i, 0u
     %41:f32 = load %40
-    %42:ptr<uniform, f32, read> = access %x_7, 0u, 14i, 0u
-    %43:f32 = load %42
-    %44:ptr<uniform, f32, read> = access %x_7, 0u, 15i, 0u
+    %42:vec4<f32> = construct %35, %37, %39, %41
+    %43:vec4<f32> = let %42
+    %44:ptr<uniform, f32, read> = access %x_7, 0u, 13i, 0u
     %45:f32 = load %44
-    %46:ptr<uniform, f32, read> = access %x_7, 0u, 16i, 0u
+    %46:ptr<uniform, f32, read> = access %x_7, 0u, 14i, 0u
     %47:f32 = load %46
-    %48:vec4<f32> = construct %41, %43, %45, %47
-    %49:mat4x4<f32> = construct %21, %30, %39, %48
-    store %m, %49
-    %50:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
+    %48:ptr<uniform, f32, read> = access %x_7, 0u, 15i, 0u
+    %49:f32 = load %48
+    %50:ptr<uniform, f32, read> = access %x_7, 0u, 16i, 0u
     %51:f32 = load %50
-    %52:ptr<uniform, f32, read> = access %x_7, 0u, 2i, 0u
-    %53:f32 = load %52
-    %54:ptr<uniform, f32, read> = access %x_7, 0u, 3i, 0u
+    %52:vec4<f32> = construct %45, %47, %49, %51
+    %53:mat4x4<f32> = construct %23, %33, %43, %52
+    store %m, %53
+    %54:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
     %55:f32 = load %54
-    %56:ptr<uniform, f32, read> = access %x_7, 0u, 4i, 0u
+    %56:ptr<uniform, f32, read> = access %x_7, 0u, 2i, 0u
     %57:f32 = load %56
-    %58:vec4<f32> = construct %51, %53, %55, %57
-    store %v, %58
-    %59:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
-    %60:f32 = load %59
-    store %f, %60
-    %61:ptr<uniform, i32, read> = access %x_12, 0u, 0i, 0u
-    %62:i32 = load %61
-    store %a, %62
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %63:i32 = load %x_GLF_global_loop_count
-        %64:bool = lt %63, 10i
-        if %64 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    %58:ptr<uniform, f32, read> = access %x_7, 0u, 3i, 0u
+    %59:f32 = load %58
+    %60:ptr<uniform, f32, read> = access %x_7, 0u, 4i, 0u
+    %61:f32 = load %60
+    %62:vec4<f32> = construct %55, %57, %59, %61
+    store %v, %62
+    %63:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
+    %64:f32 = load %63
+    store %f, %64
+    %65:ptr<uniform, i32, read> = access %x_12, 0u, 0i, 0u
+    %66:i32 = load %65
+    store %a, %66
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %67:i32 = load %x_GLF_global_loop_count
+        %68:bool = lt %67, 10i
+        if %68 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %65:i32 = load %x_GLF_global_loop_count
-        %66:i32 = add %65, 1i
-        store %x_GLF_global_loop_count, %66
-        %67:i32 = load %a
-        %x_121:i32 = clamp %67, 0i, 3i
-        %69:f32 = load_vector_element %v, %x_121
-        %70:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
-        %71:f32 = load %70
-        %72:f32 = add %69, %71
-        store_vector_element %v, %x_121, %72
-        %73:ptr<uniform, i32, read> = access %x_12, 0u, 2i, 0u
-        %74:i32 = load %73
-        store %b, %74
-        loop [b: %b7, c: %b8] {  # loop_2
-          %b7 = block {  # body
-            %75:i32 = load %x_GLF_global_loop_count
-            %76:bool = lt %75, 10i
-            if %76 [t: %b9, f: %b10] {  # if_2
-              %b9 = block {  # true
+        %69:i32 = load %x_GLF_global_loop_count
+        %70:i32 = add %69, 1i
+        store %x_GLF_global_loop_count, %70
+        %71:i32 = load %a
+        %72:i32 = max %71, 0i
+        %73:i32 = min %72, 3i
+        %x_121:i32 = let %73
+        %75:f32 = load_vector_element %v, %x_121
+        %76:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
+        %77:f32 = load %76
+        %78:f32 = add %75, %77
+        store_vector_element %v, %x_121, %78
+        %79:ptr<uniform, i32, read> = access %x_12, 0u, 2i, 0u
+        %80:i32 = load %79
+        store %b, %80
+        loop [b: $B7, c: $B8] {  # loop_2
+          $B7: {  # body
+            %81:i32 = load %x_GLF_global_loop_count
+            %82:bool = lt %81, 10i
+            if %82 [t: $B9, f: $B10] {  # if_2
+              $B9: {  # true
                 exit_if  # if_2
               }
-              %b10 = block {  # false
+              $B10: {  # false
                 exit_loop  # loop_2
               }
             }
-            %77:i32 = load %x_GLF_global_loop_count
-            %78:i32 = add %77, 1i
-            store %x_GLF_global_loop_count, %78
-            %79:f32 = load %f
-            %80:i32 = load %b
-            %81:i32 = clamp %80, 0i, 3i
-            %82:f32 = load_vector_element %v, %81
-            %83:i32 = load %b
-            %84:i32 = clamp %83, 0i, 3i
-            %85:ptr<function, vec4<f32>, read_write> = access %m, %84
-            %86:i32 = load %a
-            %87:f32 = load_vector_element %85, %86
-            %88:f32 = mul %82, %87
-            %89:f32 = add %79, %88
-            store %f, %89
-            continue %b8
+            %83:i32 = load %x_GLF_global_loop_count
+            %84:i32 = add %83, 1i
+            store %x_GLF_global_loop_count, %84
+            %85:f32 = load %f
+            %86:f32 = let %85
+            %87:i32 = load %b
+            %88:i32 = max %87, 0i
+            %89:i32 = min %88, 3i
+            %90:f32 = load_vector_element %v, %89
+            %91:f32 = let %90
+            %92:i32 = load %b
+            %93:i32 = max %92, 0i
+            %94:i32 = min %93, 3i
+            %95:ptr<function, vec4<f32>, read_write> = access %m, %94
+            %96:i32 = load %a
+            %97:f32 = load_vector_element %95, %96
+            %98:f32 = mul %91, %97
+            %99:f32 = add %86, %98
+            store %f, %99
+            continue  # -> $B8
           }
-          %b8 = block {  # continuing
-            %90:i32 = load %b
-            %91:i32 = sub %90, 1i
-            store %b, %91
-            next_iteration %b7
+          $B8: {  # continuing
+            %100:i32 = load %b
+            %101:i32 = sub %100, 1i
+            store %b, %101
+            next_iteration  # -> $B7
           }
         }
-        %x_153:i32 = load %a
-        %93:ptr<function, vec4<f32>, read_write> = access %m, 1i
-        %94:i32 = clamp %x_153, 0i, 3i
-        %95:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
-        %96:f32 = load %95
-        store_vector_element %93, %94, %96
-        %97:ptr<uniform, i32, read> = access %x_15, 0u
-        %98:i32 = load %97
-        %99:ptr<uniform, i32, read> = access %x_12, 0u, 0i, 0u
-        %100:i32 = load %99
-        %101:bool = eq %98, %100
-        if %101 [t: %b11] {  # if_3
-          %b11 = block {  # true
-            discard
+        %102:i32 = load %a
+        %x_153:i32 = let %102
+        %104:ptr<function, vec4<f32>, read_write> = access %m, 1i
+        %105:i32 = max %x_153, 0i
+        %106:i32 = min %105, 3i
+        %107:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
+        %108:f32 = load %107
+        store_vector_element %104, %106, %108
+        %109:ptr<uniform, i32, read> = access %x_15, 0u
+        %110:i32 = load %109
+        %111:ptr<uniform, i32, read> = access %x_12, 0u, 0i, 0u
+        %112:i32 = load %111
+        %113:bool = eq %110, %112
+        if %113 [t: $B11] {  # if_3
+          $B11: {  # true
+            store %continue_execution, false
             exit_if  # if_3
           }
         }
-        %102:ptr<uniform, i32, read> = access %x_15, 0u
-        %103:i32 = load %102
-        %104:ptr<uniform, i32, read> = access %x_12, 0u, 1i, 0u
-        %105:i32 = load %104
-        %106:bool = eq %103, %105
-        if %106 [t: %b12] {  # if_4
-          %b12 = block {  # true
-            discard
+        %114:ptr<uniform, i32, read> = access %x_15, 0u
+        %115:i32 = load %114
+        %116:ptr<uniform, i32, read> = access %x_12, 0u, 1i, 0u
+        %117:i32 = load %116
+        %118:bool = eq %115, %117
+        if %118 [t: $B12] {  # if_4
+          $B12: {  # true
+            store %continue_execution, false
             exit_if  # if_4
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %107:i32 = load %a
-        %108:i32 = add %107, 1i
-        store %a, %108
-        next_iteration %b3
+      $B4: {  # continuing
+        %119:i32 = load %a
+        %120:i32 = add %119, 1i
+        store %a, %120
+        next_iteration  # -> $B3
       }
     }
-    %109:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-    %110:f32 = load %109
-    store %zero, %110
-    %111:f32 = load %f
-    %112:ptr<uniform, f32, read> = access %x_7, 0u, 17i, 0u
-    %113:f32 = load %112
-    %114:bool = eq %111, %113
-    %115:bool = eq %114, false
-    if %115 [t: %b13] {  # if_5
-      %b13 = block {  # true
-        %116:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
-        %117:f32 = load %116
-        store %zero, %117
+    %121:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
+    %122:f32 = load %121
+    store %zero, %122
+    %123:f32 = load %f
+    %124:ptr<uniform, f32, read> = access %x_7, 0u, 17i, 0u
+    %125:f32 = load %124
+    %126:bool = eq %123, %125
+    %127:bool = eq %126, false
+    if %127 [t: $B13] {  # if_5
+      $B13: {  # true
+        %128:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
+        %129:f32 = load %128
+        store %zero, %129
         exit_if  # if_5
       }
     }
-    %118:f32 = load %f
-    %119:f32 = load %zero
-    %120:ptr<uniform, i32, read> = access %x_12, 0u, 0i, 0u
-    %121:i32 = load %120
-    %122:f32 = convert %121
-    %123:f32 = load %f
-    %124:vec4<f32> = construct %118, %119, %122, %123
-    store %x_GLF_color, %124
+    %130:f32 = load %f
+    %131:f32 = let %130
+    %132:f32 = load %zero
+    %133:f32 = let %132
+    %134:ptr<uniform, i32, read> = access %x_12, 0u, 0i, 0u
+    %135:i32 = load %134
+    %136:f32 = convert %135
+    %137:f32 = load %f
+    %138:vec4<f32> = construct %131, %133, %136, %137
+    store %x_GLF_color, %138
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b14 {
-  %b14 = block {
-    %126:void = call %main_1
-    %127:vec4<f32> = load %x_GLF_color
-    %128:main_out = construct %127
-    ret %128
+%tint_symbol = @fragment func():main_out {
+  $B14: {
+    %140:void = call %main_1
+    %141:vec4<f32> = load %x_GLF_color
+    %142:main_out = construct %141
+    %143:bool = load %continue_execution
+    %144:bool = eq %143, false
+    if %144 [t: $B15] {  # if_6
+      $B15: {  # true
+        terminate_invocation
+      }
+    }
+    ret %142
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-float-accumulate-matrix/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-float-accumulate-matrix/0-opt.wgsl.expected.ir.msl
index 2e73ca0..d7a7b95 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-float-accumulate-matrix/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-float-accumulate-matrix/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -24,16 +24,17 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_global_loop_count:ptr<private, i32, read_write> = var
   %x_7:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_12:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_15:ptr<uniform, buf2, read> = var @binding_point(0, 2)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %m:ptr<function, mat4x4<f32>, read_write> = var
     %v:ptr<function, vec4<f32>, read_write> = var
     %f:ptr<function, f32, read_write> = var
@@ -41,191 +42,258 @@
     %b:ptr<function, i32, read_write> = var
     %zero:ptr<function, f32, read_write> = var
     store %x_GLF_global_loop_count, 0i
-    %13:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
-    %x_62:f32 = load %13
-    %15:ptr<uniform, f32, read> = access %x_7, 0u, 2i, 0u
-    %x_64:f32 = load %15
-    %17:ptr<uniform, f32, read> = access %x_7, 0u, 3i, 0u
-    %x_66:f32 = load %17
-    %19:ptr<uniform, f32, read> = access %x_7, 0u, 4i, 0u
-    %x_68:f32 = load %19
-    %21:ptr<uniform, f32, read> = access %x_7, 0u, 5i, 0u
-    %x_70:f32 = load %21
-    %23:ptr<uniform, f32, read> = access %x_7, 0u, 6i, 0u
-    %x_72:f32 = load %23
-    %25:ptr<uniform, f32, read> = access %x_7, 0u, 7i, 0u
-    %x_74:f32 = load %25
-    %27:ptr<uniform, f32, read> = access %x_7, 0u, 8i, 0u
-    %x_76:f32 = load %27
-    %29:ptr<uniform, f32, read> = access %x_7, 0u, 9i, 0u
-    %x_78:f32 = load %29
-    %31:ptr<uniform, f32, read> = access %x_7, 0u, 10i, 0u
-    %x_80:f32 = load %31
-    %33:ptr<uniform, f32, read> = access %x_7, 0u, 11i, 0u
-    %x_82:f32 = load %33
-    %35:ptr<uniform, f32, read> = access %x_7, 0u, 12i, 0u
-    %x_84:f32 = load %35
-    %37:ptr<uniform, f32, read> = access %x_7, 0u, 13i, 0u
-    %x_86:f32 = load %37
-    %39:ptr<uniform, f32, read> = access %x_7, 0u, 14i, 0u
-    %x_88:f32 = load %39
-    %41:ptr<uniform, f32, read> = access %x_7, 0u, 15i, 0u
-    %x_90:f32 = load %41
-    %43:ptr<uniform, f32, read> = access %x_7, 0u, 16i, 0u
-    %x_92:f32 = load %43
-    %45:vec4<f32> = construct %x_62, %x_64, %x_66, %x_68
-    %46:vec4<f32> = construct %x_70, %x_72, %x_74, %x_76
-    %47:vec4<f32> = construct %x_78, %x_80, %x_82, %x_84
-    %48:vec4<f32> = construct %x_86, %x_88, %x_90, %x_92
-    %49:mat4x4<f32> = construct %45, %46, %47, %48
-    store %m, %49
-    %50:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
-    %x_99:f32 = load %50
-    %52:ptr<uniform, f32, read> = access %x_7, 0u, 2i, 0u
-    %x_101:f32 = load %52
-    %54:ptr<uniform, f32, read> = access %x_7, 0u, 3i, 0u
-    %x_103:f32 = load %54
-    %56:ptr<uniform, f32, read> = access %x_7, 0u, 4i, 0u
-    %x_105:f32 = load %56
-    %58:vec4<f32> = construct %x_99, %x_101, %x_103, %x_105
-    store %v, %58
-    %59:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
-    %x_108:f32 = load %59
+    %14:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
+    %15:f32 = load %14
+    %x_62:f32 = let %15
+    %17:ptr<uniform, f32, read> = access %x_7, 0u, 2i, 0u
+    %18:f32 = load %17
+    %x_64:f32 = let %18
+    %20:ptr<uniform, f32, read> = access %x_7, 0u, 3i, 0u
+    %21:f32 = load %20
+    %x_66:f32 = let %21
+    %23:ptr<uniform, f32, read> = access %x_7, 0u, 4i, 0u
+    %24:f32 = load %23
+    %x_68:f32 = let %24
+    %26:ptr<uniform, f32, read> = access %x_7, 0u, 5i, 0u
+    %27:f32 = load %26
+    %x_70:f32 = let %27
+    %29:ptr<uniform, f32, read> = access %x_7, 0u, 6i, 0u
+    %30:f32 = load %29
+    %x_72:f32 = let %30
+    %32:ptr<uniform, f32, read> = access %x_7, 0u, 7i, 0u
+    %33:f32 = load %32
+    %x_74:f32 = let %33
+    %35:ptr<uniform, f32, read> = access %x_7, 0u, 8i, 0u
+    %36:f32 = load %35
+    %x_76:f32 = let %36
+    %38:ptr<uniform, f32, read> = access %x_7, 0u, 9i, 0u
+    %39:f32 = load %38
+    %x_78:f32 = let %39
+    %41:ptr<uniform, f32, read> = access %x_7, 0u, 10i, 0u
+    %42:f32 = load %41
+    %x_80:f32 = let %42
+    %44:ptr<uniform, f32, read> = access %x_7, 0u, 11i, 0u
+    %45:f32 = load %44
+    %x_82:f32 = let %45
+    %47:ptr<uniform, f32, read> = access %x_7, 0u, 12i, 0u
+    %48:f32 = load %47
+    %x_84:f32 = let %48
+    %50:ptr<uniform, f32, read> = access %x_7, 0u, 13i, 0u
+    %51:f32 = load %50
+    %x_86:f32 = let %51
+    %53:ptr<uniform, f32, read> = access %x_7, 0u, 14i, 0u
+    %54:f32 = load %53
+    %x_88:f32 = let %54
+    %56:ptr<uniform, f32, read> = access %x_7, 0u, 15i, 0u
+    %57:f32 = load %56
+    %x_90:f32 = let %57
+    %59:ptr<uniform, f32, read> = access %x_7, 0u, 16i, 0u
+    %60:f32 = load %59
+    %x_92:f32 = let %60
+    %62:vec4<f32> = construct %x_62, %x_64, %x_66, %x_68
+    %63:vec4<f32> = let %62
+    %64:vec4<f32> = construct %x_70, %x_72, %x_74, %x_76
+    %65:vec4<f32> = let %64
+    %66:vec4<f32> = construct %x_78, %x_80, %x_82, %x_84
+    %67:vec4<f32> = let %66
+    %68:vec4<f32> = construct %x_86, %x_88, %x_90, %x_92
+    %69:mat4x4<f32> = construct %63, %65, %67, %68
+    store %m, %69
+    %70:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
+    %71:f32 = load %70
+    %x_99:f32 = let %71
+    %73:ptr<uniform, f32, read> = access %x_7, 0u, 2i, 0u
+    %74:f32 = load %73
+    %x_101:f32 = let %74
+    %76:ptr<uniform, f32, read> = access %x_7, 0u, 3i, 0u
+    %77:f32 = load %76
+    %x_103:f32 = let %77
+    %79:ptr<uniform, f32, read> = access %x_7, 0u, 4i, 0u
+    %80:f32 = load %79
+    %x_105:f32 = let %80
+    %82:vec4<f32> = construct %x_99, %x_101, %x_103, %x_105
+    store %v, %82
+    %83:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
+    %84:f32 = load %83
+    %x_108:f32 = let %84
     store %f, %x_108
-    %61:ptr<uniform, i32, read> = access %x_12, 0u, 0i, 0u
-    %x_110:i32 = load %61
+    %86:ptr<uniform, i32, read> = access %x_12, 0u, 0i, 0u
+    %87:i32 = load %86
+    %x_110:i32 = let %87
     store %a, %x_110
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_115:i32 = load %x_GLF_global_loop_count
-        %64:bool = lt %x_115, 10i
-        if %64 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %89:i32 = load %x_GLF_global_loop_count
+        %x_115:i32 = let %89
+        %91:bool = lt %x_115, 10i
+        if %91 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_118:i32 = load %x_GLF_global_loop_count
-        %66:i32 = add %x_118, 1i
-        store %x_GLF_global_loop_count, %66
-        %x_120:i32 = load %a
-        %x_121:i32 = clamp %x_120, 0i, 3i
-        %69:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
-        %x_123:f32 = load %69
-        %x_125:f32 = load_vector_element %v, %x_121
-        %72:f32 = add %x_125, %x_123
-        store_vector_element %v, %x_121, %72
-        %73:ptr<uniform, i32, read> = access %x_12, 0u, 2i, 0u
-        %x_129:i32 = load %73
+        %92:i32 = load %x_GLF_global_loop_count
+        %x_118:i32 = let %92
+        %94:i32 = add %x_118, 1i
+        store %x_GLF_global_loop_count, %94
+        %95:i32 = load %a
+        %x_120:i32 = let %95
+        %97:i32 = max %x_120, 0i
+        %98:i32 = min %97, 3i
+        %x_121:i32 = let %98
+        %100:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
+        %101:f32 = load %100
+        %x_123:f32 = let %101
+        %103:f32 = load_vector_element %v, %x_121
+        %x_125:f32 = let %103
+        %105:f32 = add %x_125, %x_123
+        store_vector_element %v, %x_121, %105
+        %106:ptr<uniform, i32, read> = access %x_12, 0u, 2i, 0u
+        %107:i32 = load %106
+        %x_129:i32 = let %107
         store %b, %x_129
-        loop [b: %b7, c: %b8] {  # loop_2
-          %b7 = block {  # body
-            %x_134:i32 = load %x_GLF_global_loop_count
-            %76:bool = lt %x_134, 10i
-            if %76 [t: %b9, f: %b10] {  # if_2
-              %b9 = block {  # true
+        loop [b: $B7, c: $B8] {  # loop_2
+          $B7: {  # body
+            %109:i32 = load %x_GLF_global_loop_count
+            %x_134:i32 = let %109
+            %111:bool = lt %x_134, 10i
+            if %111 [t: $B9, f: $B10] {  # if_2
+              $B9: {  # true
                 exit_if  # if_2
               }
-              %b10 = block {  # false
+              $B10: {  # false
                 exit_loop  # loop_2
               }
             }
-            %x_137:i32 = load %x_GLF_global_loop_count
-            %78:i32 = add %x_137, 1i
-            store %x_GLF_global_loop_count, %78
-            %x_139:i32 = load %b
-            %80:i32 = clamp %x_139, 0i, 3i
-            %x_142:f32 = load_vector_element %v, %80
-            %x_143:i32 = load %b
-            %x_145:i32 = load %a
-            %84:i32 = clamp %x_143, 0i, 3i
-            %85:ptr<function, vec4<f32>, read_write> = access %m, %84
-            %x_147:f32 = load_vector_element %85, %x_145
-            %x_149:f32 = load %f
-            %88:f32 = mul %x_142, %x_147
-            %89:f32 = add %x_149, %88
-            store %f, %89
-            continue %b8
+            %112:i32 = load %x_GLF_global_loop_count
+            %x_137:i32 = let %112
+            %114:i32 = add %x_137, 1i
+            store %x_GLF_global_loop_count, %114
+            %115:i32 = load %b
+            %x_139:i32 = let %115
+            %117:i32 = max %x_139, 0i
+            %118:i32 = min %117, 3i
+            %119:f32 = load_vector_element %v, %118
+            %x_142:f32 = let %119
+            %121:i32 = load %b
+            %x_143:i32 = let %121
+            %123:i32 = load %a
+            %x_145:i32 = let %123
+            %125:i32 = max %x_143, 0i
+            %126:i32 = min %125, 3i
+            %127:ptr<function, vec4<f32>, read_write> = access %m, %126
+            %128:f32 = load_vector_element %127, %x_145
+            %x_147:f32 = let %128
+            %130:f32 = load %f
+            %x_149:f32 = let %130
+            %132:f32 = mul %x_142, %x_147
+            %133:f32 = add %x_149, %132
+            store %f, %133
+            continue  # -> $B8
           }
-          %b8 = block {  # continuing
-            %x_151:i32 = load %b
-            %91:i32 = sub %x_151, 1i
-            store %b, %91
-            next_iteration %b7
+          $B8: {  # continuing
+            %134:i32 = load %b
+            %x_151:i32 = let %134
+            %136:i32 = sub %x_151, 1i
+            store %b, %136
+            next_iteration  # -> $B7
           }
         }
-        %x_153:i32 = load %a
-        %93:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
-        %x_156:f32 = load %93
-        %95:ptr<function, vec4<f32>, read_write> = access %m, 1i
-        %96:i32 = clamp %x_153, 0i, 3i
-        store_vector_element %95, %96, %x_156
-        %97:ptr<uniform, i32, read> = access %x_15, 0u
-        %x_159:i32 = load %97
-        %99:ptr<uniform, i32, read> = access %x_12, 0u, 0i, 0u
-        %x_161:i32 = load %99
-        %101:bool = eq %x_159, %x_161
-        if %101 [t: %b11] {  # if_3
-          %b11 = block {  # true
-            discard
+        %137:i32 = load %a
+        %x_153:i32 = let %137
+        %139:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
+        %140:f32 = load %139
+        %x_156:f32 = let %140
+        %142:ptr<function, vec4<f32>, read_write> = access %m, 1i
+        %143:i32 = max %x_153, 0i
+        %144:i32 = min %143, 3i
+        store_vector_element %142, %144, %x_156
+        %145:ptr<uniform, i32, read> = access %x_15, 0u
+        %146:i32 = load %145
+        %x_159:i32 = let %146
+        %148:ptr<uniform, i32, read> = access %x_12, 0u, 0i, 0u
+        %149:i32 = load %148
+        %x_161:i32 = let %149
+        %151:bool = eq %x_159, %x_161
+        if %151 [t: $B11] {  # if_3
+          $B11: {  # true
+            store %continue_execution, false
             exit_if  # if_3
           }
         }
-        %102:ptr<uniform, i32, read> = access %x_15, 0u
-        %x_166:i32 = load %102
-        %104:ptr<uniform, i32, read> = access %x_12, 0u, 1i, 0u
-        %x_168:i32 = load %104
-        %106:bool = eq %x_166, %x_168
-        if %106 [t: %b12] {  # if_4
-          %b12 = block {  # true
-            discard
+        %152:ptr<uniform, i32, read> = access %x_15, 0u
+        %153:i32 = load %152
+        %x_166:i32 = let %153
+        %155:ptr<uniform, i32, read> = access %x_12, 0u, 1i, 0u
+        %156:i32 = load %155
+        %x_168:i32 = let %156
+        %158:bool = eq %x_166, %x_168
+        if %158 [t: $B12] {  # if_4
+          $B12: {  # true
+            store %continue_execution, false
             exit_if  # if_4
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_172:i32 = load %a
-        %108:i32 = add %x_172, 1i
-        store %a, %108
-        next_iteration %b3
+      $B4: {  # continuing
+        %159:i32 = load %a
+        %x_172:i32 = let %159
+        %161:i32 = add %x_172, 1i
+        store %a, %161
+        next_iteration  # -> $B3
       }
     }
-    %109:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-    %x_175:f32 = load %109
+    %162:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
+    %163:f32 = load %162
+    %x_175:f32 = let %163
     store %zero, %x_175
-    %x_176:f32 = load %f
-    %112:ptr<uniform, f32, read> = access %x_7, 0u, 17i, 0u
-    %x_178:f32 = load %112
-    %114:bool = eq %x_176, %x_178
-    %115:bool = eq %114, false
-    if %115 [t: %b13] {  # if_5
-      %b13 = block {  # true
-        %116:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
-        %x_183:f32 = load %116
+    %165:f32 = load %f
+    %x_176:f32 = let %165
+    %167:ptr<uniform, f32, read> = access %x_7, 0u, 17i, 0u
+    %168:f32 = load %167
+    %x_178:f32 = let %168
+    %170:bool = eq %x_176, %x_178
+    %171:bool = eq %170, false
+    if %171 [t: $B13] {  # if_5
+      $B13: {  # true
+        %172:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
+        %173:f32 = load %172
+        %x_183:f32 = let %173
         store %zero, %x_183
         exit_if  # if_5
       }
     }
-    %x_184:f32 = load %f
-    %x_185:f32 = load %zero
-    %120:ptr<uniform, i32, read> = access %x_12, 0u, 0i, 0u
-    %x_187:i32 = load %120
-    %x_189:f32 = load %f
-    %123:f32 = convert %x_187
-    %124:vec4<f32> = construct %x_184, %x_185, %123, %x_189
-    store %x_GLF_color, %124
+    %175:f32 = load %f
+    %x_184:f32 = let %175
+    %177:f32 = load %zero
+    %x_185:f32 = let %177
+    %179:ptr<uniform, i32, read> = access %x_12, 0u, 0i, 0u
+    %180:i32 = load %179
+    %x_187:i32 = let %180
+    %182:f32 = load %f
+    %x_189:f32 = let %182
+    %184:f32 = convert %x_187
+    %185:vec4<f32> = construct %x_184, %x_185, %184, %x_189
+    store %x_GLF_color, %185
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b14 {
-  %b14 = block {
-    %126:void = call %main_1
-    %127:vec4<f32> = load %x_GLF_color
-    %128:main_out = construct %127
-    ret %128
+%tint_symbol = @fragment func():main_out {
+  $B14: {
+    %187:void = call %main_1
+    %188:vec4<f32> = load %x_GLF_color
+    %189:main_out = construct %188
+    %190:bool = load %continue_execution
+    %191:bool = eq %190, false
+    if %191 [t: $B15] {  # if_6
+      $B15: {  # true
+        terminate_invocation
+      }
+    }
+    ret %189
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-main-function-call/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-main-function-call/0-opt.spvasm.expected.ir.msl
index e577e4a..7b4dd4e 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-main-function-call/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-main-function-call/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,23 +12,23 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_global_loop_count:ptr<private, i32, 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():i32 -> %b2 {
-  %b2 = block {
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+%func_ = func():i32 {
+  $B2: {
+    loop [b: $B3] {  # loop_1
+      $B3: {  # body
         %5:i32 = load %x_GLF_global_loop_count
         %6:bool = lt %5, 100i
-        if %6 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %6 [t: $B4, f: $B5] {  # if_1
+          $B4: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B5: {  # false
             exit_loop  # loop_1
           }
         }
@@ -36,84 +36,88 @@
         %8:i32 = add %7, 1i
         store %x_GLF_global_loop_count, %8
         %9:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %x_78:i32 = load %9
+        %10:i32 = load %9
+        %x_78:i32 = let %10
         ret %x_78
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
-      }
     }
-    %11:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
-    %x_80:i32 = load %11
+    %12:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
+    %13:i32 = load %12
+    %x_80:i32 = let %13
     ret %x_80
   }
 }
-%main_1 = func():void -> %b7 {
-  %b7 = block {
+%main_1 = func():void {
+  $B6: {
     %a:ptr<function, i32, read_write> = var
     store %x_GLF_global_loop_count, 0i
-    loop [b: %b8, c: %b9] {  # loop_2
-      %b8 = block {  # body
-        %15:i32 = load %x_GLF_global_loop_count
-        %16:i32 = add %15, 1i
-        store %x_GLF_global_loop_count, %16
-        if false [t: %b10] {  # if_2
-          %b10 = block {  # true
+    loop [b: $B7, c: $B8] {  # loop_2
+      $B7: {  # body
+        %17:i32 = load %x_GLF_global_loop_count
+        %18:i32 = add %17, 1i
+        store %x_GLF_global_loop_count, %18
+        if false [t: $B9] {  # if_2
+          $B9: {  # true
             ret
           }
         }
-        continue %b9
+        continue  # -> $B8
       }
-      %b9 = block {  # continuing
-        %x_39:i32 = load %x_GLF_global_loop_count
-        %18:bool = lt %x_39, 100i
-        %19:bool = and true, %18
-        %20:bool = eq %19, false
-        break_if %20 %b8
+      $B8: {  # continuing
+        %19:i32 = load %x_GLF_global_loop_count
+        %x_39:i32 = let %19
+        %21:bool = lt %x_39, 100i
+        %22:bool = and true, %21
+        %23:bool = eq %22, false
+        break_if %23  # -> [t: exit_loop loop_2, f: $B7]
       }
     }
-    %x_42:i32 = call %func_
+    %24:i32 = call %func_
+    %x_42:i32 = let %24
     store %a, %x_42
-    %22:i32 = load %a
-    %23:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
-    %24:i32 = load %23
-    %25:bool = eq %22, %24
-    if %25 [t: %b11, f: %b12] {  # if_3
-      %b11 = block {  # true
-        %26:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %27:i32 = load %26
-        %28:f32 = convert %27
-        %29:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %30:i32 = load %29
-        %31:f32 = convert %30
-        %32:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %33:i32 = load %32
-        %34:f32 = convert %33
-        %35:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %36:i32 = load %35
-        %37:f32 = convert %36
-        %38:vec4<f32> = construct %28, %31, %34, %37
-        store %x_GLF_color, %38
+    %26:i32 = load %a
+    %27:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
+    %28:i32 = load %27
+    %29:bool = eq %26, %28
+    if %29 [t: $B10, f: $B11] {  # if_3
+      $B10: {  # true
+        %30:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %31:i32 = load %30
+        %32:f32 = convert %31
+        %33:f32 = let %32
+        %34:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %35:i32 = load %34
+        %36:f32 = convert %35
+        %37:f32 = let %36
+        %38:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %39:i32 = load %38
+        %40:f32 = convert %39
+        %41:f32 = let %40
+        %42:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %43:i32 = load %42
+        %44:f32 = convert %43
+        %45:vec4<f32> = construct %33, %37, %41, %44
+        store %x_GLF_color, %45
         exit_if  # if_3
       }
-      %b12 = block {  # false
-        %39:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %40:i32 = load %39
-        %41:f32 = convert %40
-        %42:vec4<f32> = construct %41
-        store %x_GLF_color, %42
+      $B11: {  # false
+        %46:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %47:i32 = load %46
+        %48:f32 = convert %47
+        %49:vec4<f32> = construct %48
+        store %x_GLF_color, %49
         exit_if  # if_3
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b13 {
-  %b13 = block {
-    %44:void = call %main_1
-    %45:vec4<f32> = load %x_GLF_color
-    %46:main_out = construct %45
-    ret %46
+%tint_symbol = @fragment func():main_out {
+  $B12: {
+    %51:void = call %main_1
+    %52:vec4<f32> = load %x_GLF_color
+    %53:main_out = construct %52
+    ret %53
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-main-function-call/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-main-function-call/0-opt.wgsl.expected.ir.msl
index 8a82f81..d1530bf 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-main-function-call/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-main-function-call/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,108 +12,123 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_global_loop_count:ptr<private, i32, 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():i32 -> %b2 {
-  %b2 = block {
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_72:i32 = load %x_GLF_global_loop_count
-        %6:bool = lt %x_72, 100i
-        if %6 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+%func_ = func():i32 {
+  $B2: {
+    loop [b: $B3] {  # loop_1
+      $B3: {  # body
+        %5:i32 = load %x_GLF_global_loop_count
+        %x_72:i32 = let %5
+        %7:bool = lt %x_72, 100i
+        if %7 [t: $B4, f: $B5] {  # if_1
+          $B4: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B5: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_75:i32 = load %x_GLF_global_loop_count
-        %8:i32 = add %x_75, 1i
-        store %x_GLF_global_loop_count, %8
-        %9:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %x_78:i32 = load %9
+        %8:i32 = load %x_GLF_global_loop_count
+        %x_75:i32 = let %8
+        %10:i32 = add %x_75, 1i
+        store %x_GLF_global_loop_count, %10
+        %11:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %12:i32 = load %11
+        %x_78:i32 = let %12
         ret %x_78
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
-      }
     }
-    %11:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
-    %x_80:i32 = load %11
+    %14:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
+    %15:i32 = load %14
+    %x_80:i32 = let %15
     ret %x_80
   }
 }
-%main_1 = func():void -> %b7 {
-  %b7 = block {
+%main_1 = func():void {
+  $B6: {
     %a:ptr<function, i32, read_write> = var
     store %x_GLF_global_loop_count, 0i
-    loop [b: %b8, c: %b9] {  # loop_2
-      %b8 = block {  # body
-        %x_35:i32 = load %x_GLF_global_loop_count
-        %16:i32 = add %x_35, 1i
-        store %x_GLF_global_loop_count, %16
-        if false [t: %b10] {  # if_2
-          %b10 = block {  # true
+    loop [b: $B7, c: $B8] {  # loop_2
+      $B7: {  # body
+        %19:i32 = load %x_GLF_global_loop_count
+        %x_35:i32 = let %19
+        %21:i32 = add %x_35, 1i
+        store %x_GLF_global_loop_count, %21
+        if false [t: $B9] {  # if_2
+          $B9: {  # true
             ret
           }
         }
-        continue %b9
+        continue  # -> $B8
       }
-      %b9 = block {  # continuing
-        %x_39:i32 = load %x_GLF_global_loop_count
-        %18:bool = lt %x_39, 100i
-        %19:bool = and true, %18
-        %20:bool = eq %19, false
-        break_if %20 %b8
+      $B8: {  # continuing
+        %22:i32 = load %x_GLF_global_loop_count
+        %x_39:i32 = let %22
+        %24:bool = lt %x_39, 100i
+        %25:bool = and true, %24
+        %26:bool = eq %25, false
+        break_if %26  # -> [t: exit_loop loop_2, f: $B7]
       }
     }
-    %x_42:i32 = call %func_
+    %27:i32 = call %func_
+    %x_42:i32 = let %27
     store %a, %x_42
-    %x_43:i32 = load %a
-    %23:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
-    %x_45:i32 = load %23
-    %25:bool = eq %x_43, %x_45
-    if %25 [t: %b11, f: %b12] {  # if_3
-      %b11 = block {  # true
-        %26:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %x_51:i32 = load %26
-        %28:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %x_54:i32 = load %28
-        %30:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %x_57:i32 = load %30
-        %32:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %x_60:i32 = load %32
-        %34:f32 = convert %x_51
-        %35:f32 = convert %x_54
-        %36:f32 = convert %x_57
-        %37:f32 = convert %x_60
-        %38:vec4<f32> = construct %34, %35, %36, %37
-        store %x_GLF_color, %38
+    %29:i32 = load %a
+    %x_43:i32 = let %29
+    %31:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
+    %32:i32 = load %31
+    %x_45:i32 = let %32
+    %34:bool = eq %x_43, %x_45
+    if %34 [t: $B10, f: $B11] {  # if_3
+      $B10: {  # true
+        %35:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %36:i32 = load %35
+        %x_51:i32 = let %36
+        %38:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %39:i32 = load %38
+        %x_54:i32 = let %39
+        %41:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %42:i32 = load %41
+        %x_57:i32 = let %42
+        %44:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %45:i32 = load %44
+        %x_60:i32 = let %45
+        %47:f32 = convert %x_51
+        %48:f32 = let %47
+        %49:f32 = convert %x_54
+        %50:f32 = let %49
+        %51:f32 = convert %x_57
+        %52:f32 = let %51
+        %53:f32 = convert %x_60
+        %54:vec4<f32> = construct %48, %50, %52, %53
+        store %x_GLF_color, %54
         exit_if  # if_3
       }
-      %b12 = block {  # false
-        %39:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %x_64:i32 = load %39
-        %x_65:f32 = convert %x_64
-        %42:vec4<f32> = construct %x_65, %x_65, %x_65, %x_65
-        store %x_GLF_color, %42
+      $B11: {  # false
+        %55:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %56:i32 = load %55
+        %x_64:i32 = let %56
+        %58:f32 = convert %x_64
+        %x_65:f32 = let %58
+        %60:vec4<f32> = construct %x_65, %x_65, %x_65, %x_65
+        store %x_GLF_color, %60
         exit_if  # if_3
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b13 {
-  %b13 = block {
-    %44:void = call %main_1
-    %45:vec4<f32> = load %x_GLF_color
-    %46:main_out = construct %45
-    ret %46
+%tint_symbol = @fragment func():main_out {
+  $B12: {
+    %62:void = call %main_1
+    %63:vec4<f32> = load %x_GLF_color
+    %64:main_out = construct %63
+    ret %64
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-multiply-one-minus/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-multiply-one-minus/0.spvasm.expected.ir.msl
index af8def1..8ac4bd7 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-multiply-one-minus/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-multiply-one-minus/0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,20 +12,20 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %x_23:ptr<function, i32, read_write> = var
     %x_27:ptr<function, i32, read_write> = var
     %x_37:ptr<function, i32, read_write> = var
     %x_45:ptr<function, i32, read_write> = var
     store %x_23, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %x_24:ptr<function, i32, read_write> = var
         %9:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
         %10:i32 = load %9
@@ -34,99 +34,102 @@
         %12:i32 = load %x_27
         %13:i32 = sub 100i, %12
         %14:bool = lt %11, %13
-        if %14 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %14 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
+      $B4: {  # continuing
         %15:i32 = load %x_23
         %16:i32 = add %15, 1i
         store %x_24, %16
         %17:i32 = load %x_24
         store %x_23, %17
-        next_iteration %b3
+        next_iteration  # -> $B3
       }
     }
     %x_40:ptr<function, i32, read_write> = var
     %19:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
-    %x_32:i32 = load %19
+    %20:i32 = load %19
+    %x_32:i32 = let %20
     store %x_45, 1i
-    %21:bool = eq %x_32, 0i
-    if %21 [t: %b7] {  # if_2
-      %b7 = block {  # true
+    %22:bool = eq %x_32, 0i
+    if %22 [t: $B7] {  # if_2
+      $B7: {  # true
         store %x_37, 1i
-        %22:i32 = load %x_23
-        store %x_40, %22
-        loop [b: %b8, c: %b9] {  # loop_2
-          %b8 = block {  # body
+        %23:i32 = load %x_23
+        store %x_40, %23
+        loop [b: $B8, c: $B9] {  # loop_2
+          $B8: {  # body
             %x_41:ptr<function, i32, read_write> = var
             %x_38:ptr<function, i32, read_write> = var
-            %25:i32 = load %x_40
-            %26:bool = lt %25, 100i
-            if %26 [t: %b10, f: %b11] {  # if_3
-              %b10 = block {  # true
+            %26:i32 = load %x_40
+            %27:bool = lt %26, 100i
+            if %27 [t: $B10, f: $B11] {  # if_3
+              $B10: {  # true
                 exit_if  # if_3
               }
-              %b11 = block {  # false
+              $B11: {  # false
                 exit_loop  # loop_2
               }
             }
-            continue %b9
+            continue  # -> $B9
           }
-          %b9 = block {  # continuing
-            %27:i32 = load %x_40
-            %28:i32 = add %27, 1i
-            store %x_41, %28
-            %29:i32 = load %x_37
+          $B9: {  # continuing
+            %28:i32 = load %x_40
+            %29:i32 = add %28, 1i
+            store %x_41, %29
             %30:i32 = load %x_37
-            %31:i32 = sub 1i, %30
-            %32:i32 = mul %29, %31
-            store %x_38, %32
-            %33:i32 = load %x_38
-            store %x_37, %33
-            %34:i32 = load %x_41
-            store %x_40, %34
-            next_iteration %b8
+            %31:i32 = load %x_37
+            %32:i32 = sub 1i, %31
+            %33:i32 = mul %30, %32
+            store %x_38, %33
+            %34:i32 = load %x_38
+            store %x_37, %34
+            %35:i32 = load %x_41
+            store %x_40, %35
+            next_iteration  # -> $B8
           }
         }
-        %35:i32 = load %x_37
-        store %x_45, %35
+        %36:i32 = load %x_37
+        store %x_45, %36
         exit_if  # if_2
       }
     }
-    %36:i32 = load %x_45
-    %37:bool = eq %36, %x_32
-    if %37 [t: %b12, f: %b13] {  # if_4
-      %b12 = block {  # true
-        %38:i32 = load %x_27
-        %x_50:f32 = convert %38
-        %x_51:f32 = convert %x_32
-        %41:vec4<f32> = construct %x_50, %x_51, %x_51, %x_50
-        store %x_GLF_color, %41
+    %37:i32 = load %x_45
+    %38:bool = eq %37, %x_32
+    if %38 [t: $B12, f: $B13] {  # if_4
+      $B12: {  # true
+        %39:i32 = load %x_27
+        %40:f32 = convert %39
+        %x_50:f32 = let %40
+        %42:f32 = convert %x_32
+        %x_51:f32 = let %42
+        %44:vec4<f32> = construct %x_50, %x_51, %x_51, %x_50
+        store %x_GLF_color, %44
         exit_if  # if_4
       }
-      %b13 = block {  # false
-        %42:f32 = convert %x_32
-        %43:vec4<f32> = construct %42
-        store %x_GLF_color, %43
+      $B13: {  # false
+        %45:f32 = convert %x_32
+        %46:vec4<f32> = construct %45
+        store %x_GLF_color, %46
         exit_if  # if_4
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b14 {
-  %b14 = block {
-    %45:void = call %main_1
-    %46:vec4<f32> = load %x_GLF_color
-    %47:main_out = construct %46
-    ret %47
+%tint_symbol = @fragment func():main_out {
+  $B14: {
+    %48:void = call %main_1
+    %49:vec4<f32> = load %x_GLF_color
+    %50:main_out = construct %49
+    ret %50
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-multiply-one-minus/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-multiply-one-minus/0.wgsl.expected.ir.msl
index 76b5b82..b83f013 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-multiply-one-minus/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-multiply-one-minus/0.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,21 +12,21 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %x_23:ptr<function, i32, read_write> = var
     %x_27:ptr<function, i32, read_write> = var
     %x_37:ptr<function, i32, read_write> = var
     %x_23_phi:ptr<function, i32, read_write> = var
     %x_45_phi:ptr<function, i32, read_write> = var
     store %x_23_phi, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %x_24:ptr<function, i32, read_write> = var
         %10:i32 = load %x_23_phi
         store %x_23, %10
@@ -34,109 +34,117 @@
         %12:i32 = load %11
         store %x_27, %12
         %13:i32 = load %x_23
-        %14:i32 = load %x_27
-        %15:i32 = bitcast %14
-        %16:i32 = sub 100i, %15
-        %17:bool = lt %13, %16
-        if %17 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %14:i32 = let %13
+        %15:i32 = load %x_27
+        %16:i32 = bitcast %15
+        %17:i32 = sub 100i, %16
+        %18:bool = lt %14, %17
+        if %18 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %18:i32 = load %x_23
-        %19:i32 = add %18, 1i
-        %20:i32 = bitcast %19
-        store %x_24, %20
-        %21:i32 = load %x_24
-        store %x_23_phi, %21
-        next_iteration %b3
+      $B4: {  # continuing
+        %19:i32 = load %x_23
+        %20:i32 = add %19, 1i
+        %21:i32 = bitcast %20
+        store %x_24, %21
+        %22:i32 = load %x_24
+        store %x_23_phi, %22
+        next_iteration  # -> $B3
       }
     }
     %x_37_phi:ptr<function, i32, read_write> = var
     %x_40_phi:ptr<function, i32, read_write> = var
-    %24:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
-    %x_32:i32 = load %24
+    %25:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
+    %26:i32 = load %25
+    %x_32:i32 = let %26
     store %x_45_phi, 1i
-    %26:bool = eq %x_32, 0i
-    if %26 [t: %b7] {  # if_2
-      %b7 = block {  # true
+    %28:bool = eq %x_32, 0i
+    if %28 [t: $B7] {  # if_2
+      $B7: {  # true
         store %x_37_phi, 1i
-        %27:i32 = load %x_23
-        store %x_40_phi, %27
-        loop [b: %b8, c: %b9] {  # loop_2
-          %b8 = block {  # body
+        %29:i32 = load %x_23
+        store %x_40_phi, %29
+        loop [b: $B8, c: $B9] {  # loop_2
+          $B8: {  # body
             %x_41:ptr<function, i32, read_write> = var
             %x_38:ptr<function, i32, read_write> = var
-            %30:i32 = load %x_37_phi
-            store %x_37, %30
-            %x_40:i32 = load %x_40_phi
-            %32:bool = lt %x_40, 100i
-            if %32 [t: %b10, f: %b11] {  # if_3
-              %b10 = block {  # true
+            %32:i32 = load %x_37_phi
+            store %x_37, %32
+            %33:i32 = load %x_40_phi
+            %x_40:i32 = let %33
+            %35:bool = lt %x_40, 100i
+            if %35 [t: $B10, f: $B11] {  # if_3
+              $B10: {  # true
                 exit_if  # if_3
               }
-              %b11 = block {  # false
+              $B11: {  # false
                 exit_loop  # loop_2
               }
             }
-            continue %b9
+            continue  # -> $B9
           }
-          %b9 = block {  # continuing
-            %33:i32 = add %x_40, 1i
-            store %x_41, %33
-            %34:i32 = load %x_37
-            %35:i32 = load %x_37
-            %36:i32 = bitcast %35
-            %37:i32 = sub 1i, %36
-            %38:i32 = bitcast %37
-            %39:i32 = mul %34, %38
+          $B9: {  # continuing
+            %36:i32 = add %x_40, 1i
+            store %x_41, %36
+            %37:i32 = load %x_37
+            %38:i32 = let %37
+            %39:i32 = load %x_37
             %40:i32 = bitcast %39
-            store %x_38, %40
-            %41:i32 = load %x_38
-            store %x_37_phi, %41
-            %42:i32 = load %x_41
-            store %x_40_phi, %42
-            next_iteration %b8
+            %41:i32 = sub 1i, %40
+            %42:i32 = bitcast %41
+            %43:i32 = mul %38, %42
+            %44:i32 = bitcast %43
+            store %x_38, %44
+            %45:i32 = load %x_38
+            store %x_37_phi, %45
+            %46:i32 = load %x_41
+            store %x_40_phi, %46
+            next_iteration  # -> $B8
           }
         }
-        %43:i32 = load %x_37
-        store %x_45_phi, %43
+        %47:i32 = load %x_37
+        store %x_45_phi, %47
         exit_if  # if_2
       }
     }
-    %x_45:i32 = load %x_45_phi
-    %45:bool = eq %x_45, %x_32
-    if %45 [t: %b12, f: %b13] {  # if_4
-      %b12 = block {  # true
-        %46:i32 = load %x_27
-        %x_50:f32 = convert %46
-        %x_51:f32 = convert %x_32
-        %49:vec4<f32> = construct %x_50, %x_51, %x_51, %x_50
-        store %x_GLF_color, %49
+    %48:i32 = load %x_45_phi
+    %x_45:i32 = let %48
+    %50:bool = eq %x_45, %x_32
+    if %50 [t: $B12, f: $B13] {  # if_4
+      $B12: {  # true
+        %51:i32 = load %x_27
+        %52:f32 = convert %51
+        %x_50:f32 = let %52
+        %54:f32 = convert %x_32
+        %x_51:f32 = let %54
+        %56:vec4<f32> = construct %x_50, %x_51, %x_51, %x_50
+        store %x_GLF_color, %56
         exit_if  # if_4
       }
-      %b13 = block {  # false
-        %x_53:f32 = convert %x_32
-        %51:vec4<f32> = construct %x_53, %x_53, %x_53, %x_53
-        store %x_GLF_color, %51
+      $B13: {  # false
+        %57:f32 = convert %x_32
+        %x_53:f32 = let %57
+        %59:vec4<f32> = construct %x_53, %x_53, %x_53, %x_53
+        store %x_GLF_color, %59
         exit_if  # if_4
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b14 {
-  %b14 = block {
-    %53:void = call %main_1
-    %54:vec4<f32> = load %x_GLF_color
-    %55:main_out = construct %54
-    ret %55
+%tint_symbol = @fragment func():main_out {
+  $B14: {
+    %61:void = call %main_1
+    %62:vec4<f32> = load %x_GLF_color
+    %63:main_out = construct %62
+    ret %63
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-squared-comparison/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-squared-comparison/0-opt.spvasm.expected.ir.msl
index 1d82f36..fc7d680 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-squared-comparison/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-squared-comparison/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,24 +12,24 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_global_loop_count:ptr<private, i32, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     store %x_GLF_global_loop_count, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %5:i32 = load %x_GLF_global_loop_count
         %6:bool = lt %5, 100i
-        if %6 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %6 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
@@ -40,55 +40,58 @@
         %10:i32 = load %x_GLF_global_loop_count
         %11:i32 = mul %9, %10
         %12:bool = gt %11, 10i
-        if %12 [t: %b7] {  # if_2
-          %b7 = block {  # true
+        if %12 [t: $B7] {  # if_2
+          $B7: {  # true
             exit_loop  # loop_1
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
     %13:i32 = load %x_GLF_global_loop_count
     %14:bool = eq %13, 4i
-    if %14 [t: %b8, f: %b9] {  # if_3
-      %b8 = block {  # true
+    if %14 [t: $B8, f: $B9] {  # if_3
+      $B8: {  # true
         %15:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
         %16:i32 = load %15
         %17:f32 = convert %16
-        %18:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %19:i32 = load %18
-        %20:f32 = convert %19
-        %21:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %22:i32 = load %21
-        %23:f32 = convert %22
-        %24:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %25:i32 = load %24
-        %26:f32 = convert %25
-        %27:vec4<f32> = construct %17, %20, %23, %26
-        store %x_GLF_color, %27
+        %18:f32 = let %17
+        %19:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %20:i32 = load %19
+        %21:f32 = convert %20
+        %22:f32 = let %21
+        %23:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %24:i32 = load %23
+        %25:f32 = convert %24
+        %26:f32 = let %25
+        %27:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %28:i32 = load %27
+        %29:f32 = convert %28
+        %30:vec4<f32> = construct %18, %22, %26, %29
+        store %x_GLF_color, %30
         exit_if  # if_3
       }
-      %b9 = block {  # false
-        %28:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %29:i32 = load %28
-        %30:f32 = convert %29
-        %31:vec4<f32> = construct %30
-        store %x_GLF_color, %31
+      $B9: {  # false
+        %31:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %32:i32 = load %31
+        %33:f32 = convert %32
+        %34:vec4<f32> = construct %33
+        store %x_GLF_color, %34
         exit_if  # if_3
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b10 {
-  %b10 = block {
-    %33:void = call %main_1
-    %34:vec4<f32> = load %x_GLF_color
-    %35:main_out = construct %34
-    ret %35
+%tint_symbol = @fragment func():main_out {
+  $B10: {
+    %36:void = call %main_1
+    %37:vec4<f32> = load %x_GLF_color
+    %38:main_out = construct %37
+    ret %38
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-squared-comparison/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-squared-comparison/0-opt.wgsl.expected.ir.msl
index 93e31d3..15e542b 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-squared-comparison/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-squared-comparison/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,83 +12,97 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_global_loop_count:ptr<private, i32, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     store %x_GLF_global_loop_count, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_30:i32 = load %x_GLF_global_loop_count
-        %6:bool = lt %x_30, 100i
-        if %6 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %5:i32 = load %x_GLF_global_loop_count
+        %x_30:i32 = let %5
+        %7:bool = lt %x_30, 100i
+        if %7 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_33:i32 = load %x_GLF_global_loop_count
-        %8:i32 = add %x_33, 1i
-        store %x_GLF_global_loop_count, %8
-        %x_35:i32 = load %x_GLF_global_loop_count
-        %x_36:i32 = load %x_GLF_global_loop_count
-        %11:i32 = mul %x_35, %x_36
-        %12:bool = gt %11, 10i
-        if %12 [t: %b7] {  # if_2
-          %b7 = block {  # true
+        %8:i32 = load %x_GLF_global_loop_count
+        %x_33:i32 = let %8
+        %10:i32 = add %x_33, 1i
+        store %x_GLF_global_loop_count, %10
+        %11:i32 = load %x_GLF_global_loop_count
+        %x_35:i32 = let %11
+        %13:i32 = load %x_GLF_global_loop_count
+        %x_36:i32 = let %13
+        %15:i32 = mul %x_35, %x_36
+        %16:bool = gt %15, 10i
+        if %16 [t: $B7] {  # if_2
+          $B7: {  # true
             exit_loop  # loop_1
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
-    %x_41:i32 = load %x_GLF_global_loop_count
-    %14:bool = eq %x_41, 4i
-    if %14 [t: %b8, f: %b9] {  # if_3
-      %b8 = block {  # true
-        %15:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_47:i32 = load %15
-        %17:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_50:i32 = load %17
-        %19:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_53:i32 = load %19
-        %21:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_56:i32 = load %21
-        %23:f32 = convert %x_47
-        %24:f32 = convert %x_50
-        %25:f32 = convert %x_53
-        %26:f32 = convert %x_56
-        %27:vec4<f32> = construct %23, %24, %25, %26
-        store %x_GLF_color, %27
+    %17:i32 = load %x_GLF_global_loop_count
+    %x_41:i32 = let %17
+    %19:bool = eq %x_41, 4i
+    if %19 [t: $B8, f: $B9] {  # if_3
+      $B8: {  # true
+        %20:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %21:i32 = load %20
+        %x_47:i32 = let %21
+        %23:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %24:i32 = load %23
+        %x_50:i32 = let %24
+        %26:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %27:i32 = load %26
+        %x_53:i32 = let %27
+        %29:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %30:i32 = load %29
+        %x_56:i32 = let %30
+        %32:f32 = convert %x_47
+        %33:f32 = let %32
+        %34:f32 = convert %x_50
+        %35:f32 = let %34
+        %36:f32 = convert %x_53
+        %37:f32 = let %36
+        %38:f32 = convert %x_56
+        %39:vec4<f32> = construct %33, %35, %37, %38
+        store %x_GLF_color, %39
         exit_if  # if_3
       }
-      %b9 = block {  # false
-        %28:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_60:i32 = load %28
-        %x_61:f32 = convert %x_60
-        %31:vec4<f32> = construct %x_61, %x_61, %x_61, %x_61
-        store %x_GLF_color, %31
+      $B9: {  # false
+        %40:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %41:i32 = load %40
+        %x_60:i32 = let %41
+        %43:f32 = convert %x_60
+        %x_61:f32 = let %43
+        %45:vec4<f32> = construct %x_61, %x_61, %x_61, %x_61
+        store %x_GLF_color, %45
         exit_if  # if_3
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b10 {
-  %b10 = block {
-    %33:void = call %main_1
-    %34:vec4<f32> = load %x_GLF_color
-    %35:main_out = construct %34
-    ret %35
+%tint_symbol = @fragment func():main_out {
+  $B10: {
+    %47:void = call %main_1
+    %48:vec4<f32> = load %x_GLF_color
+    %49:main_out = construct %48
+    ret %49
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-if-conversion-identical-branches/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-if-conversion-identical-branches/0-opt.spvasm.expected.ir.msl
index 27a4026..4c00e04 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-if-conversion-identical-branches/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-if-conversion-identical-branches/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   zero:i32 @offset(0)
 }
 
@@ -8,27 +8,27 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %5:ptr<uniform, i32, read> = access %x_6, 0u
     %6:i32 = load %5
     store %a, %6
     %7:i32 = load %a
     %8:bool = eq %7, 0i
-    if %8 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    if %8 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         %9:i32 = load %a
         %10:i32 = add %9, 1i
         store %a, %10
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         %11:i32 = load %a
         %12:i32 = add %11, 1i
         store %a, %12
@@ -37,12 +37,12 @@
     }
     %13:i32 = load %a
     %14:bool = eq %13, 1i
-    if %14 [t: %b5, f: %b6] {  # if_2
-      %b5 = block {  # true
+    if %14 [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 = block {  # false
+      $B6: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_2
       }
@@ -50,8 +50,8 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b7 {
-  %b7 = block {
+%tint_symbol = @fragment func():main_out {
+  $B7: {
     %16:void = call %main_1
     %17:vec4<f32> = load %x_GLF_color
     %18:main_out = construct %17
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-if-conversion-identical-branches/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-if-conversion-identical-branches/0-opt.wgsl.expected.ir.msl
index 7debedb..5124d47 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-if-conversion-identical-branches/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-if-conversion-identical-branches/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   zero:i32 @offset(0)
 }
 
@@ -8,41 +8,46 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %5:ptr<uniform, i32, read> = access %x_6, 0u
-    %x_25:i32 = load %5
+    %6:i32 = load %5
+    %x_25:i32 = let %6
     store %a, %x_25
-    %x_26:i32 = load %a
-    %8:bool = eq %x_26, 0i
-    if %8 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %x_31:i32 = load %a
-        %10:i32 = add %x_31, 1i
-        store %a, %10
+    %8:i32 = load %a
+    %x_26:i32 = let %8
+    %10:bool = eq %x_26, 0i
+    if %10 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %11:i32 = load %a
+        %x_31:i32 = let %11
+        %13:i32 = add %x_31, 1i
+        store %a, %13
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %x_33:i32 = load %a
-        %12:i32 = add %x_33, 1i
-        store %a, %12
+      $B4: {  # false
+        %14:i32 = load %a
+        %x_33:i32 = let %14
+        %16:i32 = add %x_33, 1i
+        store %a, %16
         exit_if  # if_1
       }
     }
-    %x_35:i32 = load %a
-    %14:bool = eq %x_35, 1i
-    if %14 [t: %b5, f: %b6] {  # if_2
-      %b5 = block {  # true
+    %17:i32 = load %a
+    %x_35:i32 = let %17
+    %19:bool = eq %x_35, 1i
+    if %19 [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 = block {  # false
+      $B6: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_2
       }
@@ -50,12 +55,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b7 {
-  %b7 = block {
-    %16:void = call %main_1
-    %17:vec4<f32> = load %x_GLF_color
-    %18:main_out = construct %17
-    ret %18
+%tint_symbol = @fragment func():main_out {
+  $B7: {
+    %21:void = call %main_1
+    %22:vec4<f32> = load %x_GLF_color
+    %23:main_out = construct %22
+    ret %23
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-if-switch-fallthrough/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-if-switch-fallthrough/0.spvasm.expected.ir.msl
index 3a2c99a..def65b7 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-if-switch-fallthrough/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-if-switch-fallthrough/0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,66 +20,70 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_8:ptr<uniform, buf1, read> = var @binding_point(0, 1)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %6:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
     %7:f32 = load %6
     %8:vec4<f32> = construct %7
     store %x_GLF_color, %8
     %9:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_36:f32 = load %9
-    %11:f32 = load_vector_element %gl_FragCoord, 1u
-    %12:bool = gte %11, %x_36
-    if %12 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %13:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-        %x_41:i32 = load %13
-        switch %x_41 [c: (0i 16i, %b4), c: (default, %b5)] {  # switch_1
-          %b4 = block {  # case
-            %15:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-            %16:i32 = load %15
-            %x_46:f32 = convert %16
-            %x_47:f32 = convert %x_41
-            %19:vec4<f32> = construct %x_46, %x_47, %x_47, %x_46
-            store %x_GLF_color, %19
+    %10:f32 = load %9
+    %x_36:f32 = let %10
+    %12:f32 = load_vector_element %gl_FragCoord, 1u
+    %13:bool = gte %12, %x_36
+    if %13 [t: $B3] {  # if_1
+      $B3: {  # true
+        %14:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+        %15:i32 = load %14
+        %x_41:i32 = let %15
+        switch %x_41 [c: (0i 16i, $B4), c: (default, $B5)] {  # switch_1
+          $B4: {  # case
+            %17:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+            %18:i32 = load %17
+            %19:f32 = convert %18
+            %x_46:f32 = let %19
+            %21:f32 = convert %x_41
+            %x_47:f32 = let %21
+            %23:vec4<f32> = construct %x_46, %x_47, %x_47, %x_46
+            store %x_GLF_color, %23
             exit_switch  # switch_1
           }
-          %b5 = block {  # case
+          $B5: {  # case
             exit_switch  # switch_1
           }
         }
         exit_if  # if_1
       }
     }
-    %20:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-    %21:i32 = load %20
-    %22:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-    %23:i32 = load %22
-    %24:bool = eq %21, %23
-    if %24 [t: %b6] {  # if_2
-      %b6 = block {  # true
-        %25:vec4<f32> = construct %x_36
-        store %x_GLF_color, %25
+    %24:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+    %25:i32 = load %24
+    %26:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+    %27:i32 = load %26
+    %28:bool = eq %25, %27
+    if %28 [t: $B6] {  # if_2
+      $B6: {  # true
+        %29:vec4<f32> = construct %x_36
+        store %x_GLF_color, %29
         exit_if  # if_2
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b7 {
-  %b7 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B7: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %28:void = call %main_1
-    %29:vec4<f32> = load %x_GLF_color
-    %30:main_out = construct %29
-    ret %30
+    %32:void = call %main_1
+    %33:vec4<f32> = load %x_GLF_color
+    %34:main_out = construct %33
+    ret %34
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-if-switch-fallthrough/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-if-switch-fallthrough/0.wgsl.expected.ir.msl
index c21056c..c0836ed 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-if-switch-fallthrough/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-if-switch-fallthrough/0.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,66 +20,75 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_8:ptr<uniform, buf1, read> = var @binding_point(0, 1)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %6:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-    %x_31:f32 = load %6
-    %8:vec4<f32> = construct %x_31, %x_31, %x_31, %x_31
-    store %x_GLF_color, %8
-    %x_34:f32 = load_vector_element %gl_FragCoord, 1u
-    %10:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_36:f32 = load %10
-    %12:bool = gte %x_34, %x_36
-    if %12 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %13:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-        %x_41:i32 = load %13
-        switch %x_41 [c: (0i 16i, %b4), c: (default, %b5)] {  # switch_1
-          %b4 = block {  # case
-            %15:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-            %x_45:i32 = load %15
-            %x_46:f32 = convert %x_45
-            %x_47:f32 = convert %x_41
-            %19:vec4<f32> = construct %x_46, %x_47, %x_47, %x_46
-            store %x_GLF_color, %19
+    %7:f32 = load %6
+    %x_31:f32 = let %7
+    %9:vec4<f32> = construct %x_31, %x_31, %x_31, %x_31
+    store %x_GLF_color, %9
+    %10:f32 = load_vector_element %gl_FragCoord, 1u
+    %x_34:f32 = let %10
+    %12:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %13:f32 = load %12
+    %x_36:f32 = let %13
+    %15:bool = gte %x_34, %x_36
+    if %15 [t: $B3] {  # if_1
+      $B3: {  # true
+        %16:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+        %17:i32 = load %16
+        %x_41:i32 = let %17
+        switch %x_41 [c: (0i 16i, $B4), c: (default, $B5)] {  # switch_1
+          $B4: {  # case
+            %19:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+            %20:i32 = load %19
+            %x_45:i32 = let %20
+            %22:f32 = convert %x_45
+            %x_46:f32 = let %22
+            %24:f32 = convert %x_41
+            %x_47:f32 = let %24
+            %26:vec4<f32> = construct %x_46, %x_47, %x_47, %x_46
+            store %x_GLF_color, %26
             exit_switch  # switch_1
           }
-          %b5 = block {  # case
+          $B5: {  # case
             exit_switch  # switch_1
           }
         }
         exit_if  # if_1
       }
     }
-    %20:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-    %x_50:i32 = load %20
-    %22:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-    %x_52:i32 = load %22
-    %24:bool = eq %x_50, %x_52
-    if %24 [t: %b6] {  # if_2
-      %b6 = block {  # true
-        %25:vec4<f32> = construct %x_36, %x_36, %x_36, %x_36
-        store %x_GLF_color, %25
+    %27:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+    %28:i32 = load %27
+    %x_50:i32 = let %28
+    %30:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+    %31:i32 = load %30
+    %x_52:i32 = let %31
+    %33:bool = eq %x_50, %x_52
+    if %33 [t: $B6] {  # if_2
+      $B6: {  # true
+        %34:vec4<f32> = construct %x_36, %x_36, %x_36, %x_36
+        store %x_GLF_color, %34
         exit_if  # if_2
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b7 {
-  %b7 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B7: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %28:void = call %main_1
-    %29:vec4<f32> = load %x_GLF_color
-    %30:main_out = construct %29
-    ret %30
+    %37:void = call %main_1
+    %38:vec4<f32> = load %x_GLF_color
+    %39:main_out = construct %38
+    ret %39
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-if-true-continue/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-if-true-continue/0-opt.spvasm.expected.ir.msl
index 35562ef..f36b6b2 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-if-true-continue/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-if-true-continue/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,13 +12,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %b:ptr<function, i32, read_write> = var
     %c:ptr<function, i32, read_write> = var
@@ -33,16 +33,16 @@
     %13:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
     %14:i32 = load %13
     store %c, %14
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %15:i32 = load %a
         %16:i32 = load %b
         %17:bool = lt %15, %16
-        if %17 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %17 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
@@ -53,8 +53,8 @@
         %21:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
         %22:i32 = load %21
         %23:bool = eq %20, %22
-        if %23 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
+        if %23 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
             %24:i32 = load %c
             %25:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
             %26:i32 = load %25
@@ -62,74 +62,78 @@
             store %c, %27
             exit_if  # if_2
           }
-          %b8 = block {  # false
-            if true [t: %b9] {  # if_3
-              %b9 = block {  # true
-                continue %b4
+          $B8: {  # false
+            if true [t: $B9] {  # if_3
+              $B9: {  # true
+                continue  # -> $B4
               }
             }
             exit_if  # if_2
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
     %28:i32 = load %a
     %29:i32 = load %b
-    %x_59:bool = eq %28, %29
+    %30:bool = eq %28, %29
+    %x_59:bool = let %30
     store %x_66, %x_59
-    if %x_59 [t: %b10] {  # if_4
-      %b10 = block {  # true
-        %31:i32 = load %c
-        %32:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-        %33:i32 = load %32
-        %34:bool = eq %31, %33
-        store %x_65, %34
-        %35:bool = load %x_65
-        store %x_66, %35
+    if %x_59 [t: $B10] {  # if_4
+      $B10: {  # true
+        %32:i32 = load %c
+        %33:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+        %34:i32 = load %33
+        %35:bool = eq %32, %34
+        store %x_65, %35
+        %36:bool = load %x_65
+        store %x_66, %36
         exit_if  # if_4
       }
     }
-    %36:bool = load %x_66
-    if %36 [t: %b11, f: %b12] {  # if_5
-      %b11 = block {  # true
-        %37:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %38:i32 = load %37
-        %39:f32 = convert %38
-        %40:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %41:i32 = load %40
-        %42:f32 = convert %41
-        %43:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %44:i32 = load %43
-        %45:f32 = convert %44
-        %46:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %37:bool = load %x_66
+    if %37 [t: $B11, f: $B12] {  # if_5
+      $B11: {  # true
+        %38:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %39:i32 = load %38
+        %40:f32 = convert %39
+        %41:f32 = let %40
+        %42:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %43:i32 = load %42
+        %44:f32 = convert %43
+        %45:f32 = let %44
+        %46:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
         %47:i32 = load %46
         %48:f32 = convert %47
-        %49:vec4<f32> = construct %39, %42, %45, %48
-        store %x_GLF_color, %49
-        exit_if  # if_5
-      }
-      %b12 = block {  # false
-        %50:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %49:f32 = let %48
+        %50:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
         %51:i32 = load %50
         %52:f32 = convert %51
-        %53:vec4<f32> = construct %52
+        %53:vec4<f32> = construct %41, %45, %49, %52
         store %x_GLF_color, %53
         exit_if  # if_5
       }
+      $B12: {  # false
+        %54:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %55:i32 = load %54
+        %56:f32 = convert %55
+        %57:vec4<f32> = construct %56
+        store %x_GLF_color, %57
+        exit_if  # if_5
+      }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b13 {
-  %b13 = block {
-    %55:void = call %main_1
-    %56:vec4<f32> = load %x_GLF_color
-    %57:main_out = construct %56
-    ret %57
+%tint_symbol = @fragment func():main_out {
+  $B13: {
+    %59:void = call %main_1
+    %60:vec4<f32> = load %x_GLF_color
+    %61:main_out = construct %60
+    ret %61
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-if-true-continue/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-if-true-continue/0-opt.wgsl.expected.ir.msl
index 4bc7b18..dd3f4f0 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-if-true-continue/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-if-true-continue/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,124 +12,149 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %b:ptr<function, i32, read_write> = var
     %c:ptr<function, i32, read_write> = var
     %x_65:ptr<function, bool, read_write> = var
     %x_66_phi:ptr<function, bool, read_write> = var
     %9:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_29:i32 = load %9
+    %10:i32 = load %9
+    %x_29:i32 = let %10
     store %a, %x_29
-    %11:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_31:i32 = load %11
+    %12:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %13:i32 = load %12
+    %x_31:i32 = let %13
     store %b, %x_31
-    %13:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_33:i32 = load %13
+    %15:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %16:i32 = load %15
+    %x_33:i32 = let %16
     store %c, %x_33
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_38:i32 = load %a
-        %x_39:i32 = load %b
-        %17:bool = lt %x_38, %x_39
-        if %17 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %18:i32 = load %a
+        %x_38:i32 = let %18
+        %20:i32 = load %b
+        %x_39:i32 = let %20
+        %22:bool = lt %x_38, %x_39
+        if %22 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_42:i32 = load %a
-        %19:i32 = add %x_42, 1i
-        store %a, %19
-        %x_44:i32 = load %c
-        %21:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %x_46:i32 = load %21
-        %23:bool = eq %x_44, %x_46
-        if %23 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
-            %24:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-            %x_52:i32 = load %24
-            %x_53:i32 = load %c
-            %27:i32 = mul %x_53, %x_52
-            store %c, %27
+        %23:i32 = load %a
+        %x_42:i32 = let %23
+        %25:i32 = add %x_42, 1i
+        store %a, %25
+        %26:i32 = load %c
+        %x_44:i32 = let %26
+        %28:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %29:i32 = load %28
+        %x_46:i32 = let %29
+        %31:bool = eq %x_44, %x_46
+        if %31 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
+            %32:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+            %33:i32 = load %32
+            %x_52:i32 = let %33
+            %35:i32 = load %c
+            %x_53:i32 = let %35
+            %37:i32 = mul %x_53, %x_52
+            store %c, %37
             exit_if  # if_2
           }
-          %b8 = block {  # false
-            if true [t: %b9] {  # if_3
-              %b9 = block {  # true
-                continue %b4
+          $B8: {  # false
+            if true [t: $B9] {  # if_3
+              $B9: {  # true
+                continue  # -> $B4
               }
             }
             exit_if  # if_2
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
-    %x_57:i32 = load %a
-    %x_58:i32 = load %b
-    %x_59:bool = eq %x_57, %x_58
+    %38:i32 = load %a
+    %x_57:i32 = let %38
+    %40:i32 = load %b
+    %x_58:i32 = let %40
+    %42:bool = eq %x_57, %x_58
+    %x_59:bool = let %42
     store %x_66_phi, %x_59
-    if %x_59 [t: %b10] {  # if_4
-      %b10 = block {  # true
-        %x_62:i32 = load %c
-        %32:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-        %x_64:i32 = load %32
-        %34:bool = eq %x_62, %x_64
-        store %x_65, %34
-        %35:bool = load %x_65
-        store %x_66_phi, %35
+    if %x_59 [t: $B10] {  # if_4
+      $B10: {  # true
+        %44:i32 = load %c
+        %x_62:i32 = let %44
+        %46:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+        %47:i32 = load %46
+        %x_64:i32 = let %47
+        %49:bool = eq %x_62, %x_64
+        store %x_65, %49
+        %50:bool = load %x_65
+        store %x_66_phi, %50
         exit_if  # if_4
       }
     }
-    %x_66:bool = load %x_66_phi
-    if %x_66 [t: %b11, f: %b12] {  # if_5
-      %b11 = block {  # true
-        %37:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %x_71:i32 = load %37
-        %39:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_74:i32 = load %39
-        %41:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_77:i32 = load %41
-        %43:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %x_80:i32 = load %43
-        %45:f32 = convert %x_71
-        %46:f32 = convert %x_74
-        %47:f32 = convert %x_77
-        %48:f32 = convert %x_80
-        %49:vec4<f32> = construct %45, %46, %47, %48
-        store %x_GLF_color, %49
+    %51:bool = load %x_66_phi
+    %x_66:bool = let %51
+    if %x_66 [t: $B11, f: $B12] {  # if_5
+      $B11: {  # true
+        %53:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %54:i32 = load %53
+        %x_71:i32 = let %54
+        %56:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %57:i32 = load %56
+        %x_74:i32 = let %57
+        %59:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %60:i32 = load %59
+        %x_77:i32 = let %60
+        %62:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %63:i32 = load %62
+        %x_80:i32 = let %63
+        %65:f32 = convert %x_71
+        %66:f32 = let %65
+        %67:f32 = convert %x_74
+        %68:f32 = let %67
+        %69:f32 = convert %x_77
+        %70:f32 = let %69
+        %71:f32 = convert %x_80
+        %72:vec4<f32> = construct %66, %68, %70, %71
+        store %x_GLF_color, %72
         exit_if  # if_5
       }
-      %b12 = block {  # false
-        %50:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_84:i32 = load %50
-        %x_85:f32 = convert %x_84
-        %53:vec4<f32> = construct %x_85, %x_85, %x_85, %x_85
-        store %x_GLF_color, %53
+      $B12: {  # false
+        %73:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %74:i32 = load %73
+        %x_84:i32 = let %74
+        %76:f32 = convert %x_84
+        %x_85:f32 = let %76
+        %78:vec4<f32> = construct %x_85, %x_85, %x_85, %x_85
+        store %x_GLF_color, %78
         exit_if  # if_5
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b13 {
-  %b13 = block {
-    %55:void = call %main_1
-    %56:vec4<f32> = load %x_GLF_color
-    %57:main_out = construct %56
-    ret %57
+%tint_symbol = @fragment func():main_out {
+  $B13: {
+    %80:void = call %main_1
+    %81:vec4<f32> = load %x_GLF_color
+    %82:main_out = construct %81
+    ret %82
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-if-true-discard-in-do-while-never-reached/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-if-true-discard-in-do-while-never-reached/0-opt.spvasm.expected.ir.msl
index 15d2ea5..a82c966 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-if-true-discard-in-do-while-never-reached/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-if-true-discard-in-do-while-never-reached/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,79 +12,90 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     store %a, 1i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %5:i32 = load %a
-        %6:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %7:i32 = load %6
-        %8:bool = gte %5, %7
-        if %8 [t: %b5] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %6:i32 = load %a
+        %7:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %8:i32 = load %7
+        %9:bool = gte %6, %8
+        if %9 [t: $B5] {  # if_1
+          $B5: {  # true
             exit_loop  # loop_1
           }
         }
-        if true [t: %b6] {  # if_2
-          %b6 = block {  # true
-            discard
+        if true [t: $B6] {  # if_2
+          $B6: {  # true
+            store %continue_execution, false
             exit_if  # if_2
           }
         }
-        %9:i32 = load %a
-        %10:i32 = add %9, 1i
-        store %a, %10
-        continue %b4
+        %10:i32 = load %a
+        %11:i32 = add %10, 1i
+        store %a, %11
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_39:i32 = load %a
-        %12:bool = neq %x_39, 1i
-        %13:bool = eq %12, false
-        break_if %13 %b3
+      $B4: {  # continuing
+        %12:i32 = load %a
+        %x_39:i32 = let %12
+        %14:bool = neq %x_39, 1i
+        %15:bool = eq %14, false
+        break_if %15  # -> [t: exit_loop loop_1, f: $B3]
       }
     }
-    %14:i32 = load %a
-    %15:bool = eq %14, 1i
-    if %15 [t: %b7, f: %b8] {  # if_3
-      %b7 = block {  # true
-        %16:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %17:i32 = load %16
-        %18:f32 = convert %17
-        %19:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %20:i32 = load %19
-        %21:f32 = convert %20
-        %22:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %16:i32 = load %a
+    %17:bool = eq %16, 1i
+    if %17 [t: $B7, f: $B8] {  # if_3
+      $B7: {  # true
+        %18:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %19:i32 = load %18
+        %20:f32 = convert %19
+        %21:f32 = let %20
+        %22:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
         %23:i32 = load %22
         %24:f32 = convert %23
-        %25:vec4<f32> = construct 1.0f, %18, %21, %24
-        store %x_GLF_color, %25
-        exit_if  # if_3
-      }
-      %b8 = block {  # false
-        %26:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %25:f32 = let %24
+        %26:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
         %27:i32 = load %26
         %28:f32 = convert %27
-        %29:vec4<f32> = construct %28
+        %29:vec4<f32> = construct 1.0f, %21, %25, %28
         store %x_GLF_color, %29
         exit_if  # if_3
       }
+      $B8: {  # false
+        %30:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %31:i32 = load %30
+        %32:f32 = convert %31
+        %33:vec4<f32> = construct %32
+        store %x_GLF_color, %33
+        exit_if  # if_3
+      }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b9 {
-  %b9 = block {
-    %31:void = call %main_1
-    %32:vec4<f32> = load %x_GLF_color
-    %33:main_out = construct %32
-    ret %33
+%tint_symbol = @fragment func():main_out {
+  $B9: {
+    %35:void = call %main_1
+    %36:vec4<f32> = load %x_GLF_color
+    %37:main_out = construct %36
+    %38:bool = load %continue_execution
+    %39:bool = eq %38, false
+    if %39 [t: $B10] {  # if_4
+      $B10: {  # true
+        terminate_invocation
+      }
+    }
+    ret %37
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-if-true-discard-in-do-while-never-reached/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-if-true-discard-in-do-while-never-reached/0-opt.wgsl.expected.ir.msl
index 3a4824c..de228ef 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-if-true-discard-in-do-while-never-reached/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-if-true-discard-in-do-while-never-reached/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,79 +12,99 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     store %a, 1i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_29:i32 = load %a
-        %6:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_31:i32 = load %6
-        %8:bool = gte %x_29, %x_31
-        if %8 [t: %b5] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %6:i32 = load %a
+        %x_29:i32 = let %6
+        %8:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %9:i32 = load %8
+        %x_31:i32 = let %9
+        %11:bool = gte %x_29, %x_31
+        if %11 [t: $B5] {  # if_1
+          $B5: {  # true
             exit_loop  # loop_1
           }
         }
-        if true [t: %b6] {  # if_2
-          %b6 = block {  # true
-            discard
+        if true [t: $B6] {  # if_2
+          $B6: {  # true
+            store %continue_execution, false
             exit_if  # if_2
           }
         }
-        %x_37:i32 = load %a
-        %10:i32 = add %x_37, 1i
-        store %a, %10
-        continue %b4
+        %12:i32 = load %a
+        %x_37:i32 = let %12
+        %14:i32 = add %x_37, 1i
+        store %a, %14
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_39:i32 = load %a
-        %12:bool = neq %x_39, 1i
-        %13:bool = eq %12, false
-        break_if %13 %b3
+      $B4: {  # continuing
+        %15:i32 = load %a
+        %x_39:i32 = let %15
+        %17:bool = neq %x_39, 1i
+        %18:bool = eq %17, false
+        break_if %18  # -> [t: exit_loop loop_1, f: $B3]
       }
     }
-    %x_41:i32 = load %a
-    %15:bool = eq %x_41, 1i
-    if %15 [t: %b7, f: %b8] {  # if_3
-      %b7 = block {  # true
-        %16:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_47:i32 = load %16
-        %18:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_50:i32 = load %18
-        %20:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_53:i32 = load %20
-        %22:f32 = convert %x_47
-        %23:f32 = convert %x_50
-        %24:f32 = convert %x_53
-        %25:vec4<f32> = construct 1.0f, %22, %23, %24
-        store %x_GLF_color, %25
+    %19:i32 = load %a
+    %x_41:i32 = let %19
+    %21:bool = eq %x_41, 1i
+    if %21 [t: $B7, f: $B8] {  # if_3
+      $B7: {  # true
+        %22:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %23:i32 = load %22
+        %x_47:i32 = let %23
+        %25:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %26:i32 = load %25
+        %x_50:i32 = let %26
+        %28:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %29:i32 = load %28
+        %x_53:i32 = let %29
+        %31:f32 = convert %x_47
+        %32:f32 = let %31
+        %33:f32 = convert %x_50
+        %34:f32 = let %33
+        %35:f32 = convert %x_53
+        %36:vec4<f32> = construct 1.0f, %32, %34, %35
+        store %x_GLF_color, %36
         exit_if  # if_3
       }
-      %b8 = block {  # false
-        %26:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_57:i32 = load %26
-        %x_58:f32 = convert %x_57
-        %29:vec4<f32> = construct %x_58, %x_58, %x_58, %x_58
-        store %x_GLF_color, %29
+      $B8: {  # false
+        %37:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %38:i32 = load %37
+        %x_57:i32 = let %38
+        %40:f32 = convert %x_57
+        %x_58:f32 = let %40
+        %42:vec4<f32> = construct %x_58, %x_58, %x_58, %x_58
+        store %x_GLF_color, %42
         exit_if  # if_3
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b9 {
-  %b9 = block {
-    %31:void = call %main_1
-    %32:vec4<f32> = load %x_GLF_color
-    %33:main_out = construct %32
-    ret %33
+%tint_symbol = @fragment func():main_out {
+  $B9: {
+    %44:void = call %main_1
+    %45:vec4<f32> = load %x_GLF_color
+    %46:main_out = construct %45
+    %47:bool = load %continue_execution
+    %48:bool = eq %47, false
+    if %48 [t: $B10] {  # if_4
+      $B10: {  # true
+        terminate_invocation
+      }
+    }
+    ret %46
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-inc-inside-switch-and-for/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-inc-inside-switch-and-for/0-opt.spvasm.expected.ir.msl
index ff350fd..83e9bb9 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-inc-inside-switch-and-for/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-inc-inside-switch-and-for/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   three:i32 @offset(0)
 }
 
@@ -8,61 +8,62 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%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 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %6:i32 = load %i
         %7:ptr<uniform, i32, read> = access %x_7, 0u
         %8:i32 = load %7
         %9:i32 = add 7i, %8
         %10:bool = lt %6, %9
-        if %10 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %10 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_37:i32 = load %i
-        switch %x_37 [c: (7i 8i, %b7), c: (default, %b8)] {  # switch_1
-          %b7 = block {  # case
-            %12:i32 = load %a
-            %13:i32 = add %12, 1i
-            store %a, %13
+        %11:i32 = load %i
+        %x_37:i32 = let %11
+        switch %x_37 [c: (7i 8i, $B7), c: (default, $B8)] {  # switch_1
+          $B7: {  # case
+            %13:i32 = load %a
+            %14:i32 = add %13, 1i
+            store %a, %14
             exit_switch  # switch_1
           }
-          %b8 = block {  # case
+          $B8: {  # case
             exit_switch  # switch_1
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %14:i32 = load %i
-        %15:i32 = add %14, 1i
-        store %i, %15
-        next_iteration %b3
+      $B4: {  # continuing
+        %15:i32 = load %i
+        %16:i32 = add %15, 1i
+        store %i, %16
+        next_iteration  # -> $B3
       }
     }
-    %16:i32 = load %a
-    %17:bool = eq %16, 2i
-    if %17 [t: %b9, f: %b10] {  # if_2
-      %b9 = block {  # true
+    %17:i32 = load %a
+    %18:bool = eq %17, 2i
+    if %18 [t: $B9, f: $B10] {  # if_2
+      $B9: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_2
       }
-      %b10 = block {  # false
+      $B10: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_2
       }
@@ -70,12 +71,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b11 {
-  %b11 = block {
-    %19:void = call %main_1
-    %20:vec4<f32> = load %x_GLF_color
-    %21:main_out = construct %20
-    ret %21
+%tint_symbol = @fragment func():main_out {
+  $B11: {
+    %20:void = call %main_1
+    %21:vec4<f32> = load %x_GLF_color
+    %22:main_out = construct %21
+    ret %22
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-inc-inside-switch-and-for/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-inc-inside-switch-and-for/0-opt.wgsl.expected.ir.msl
index 13e34a6..cfccad2 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-inc-inside-switch-and-for/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-inc-inside-switch-and-for/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   three:i32 @offset(0)
 }
 
@@ -8,61 +8,67 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%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 = block {  # body
-        %x_31:i32 = load %i
-        %7:ptr<uniform, i32, read> = access %x_7, 0u
-        %x_33:i32 = load %7
-        %9:i32 = add 7i, %x_33
-        %10:bool = lt %x_31, %9
-        if %10 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %6:i32 = load %i
+        %x_31:i32 = let %6
+        %8:ptr<uniform, i32, read> = access %x_7, 0u
+        %9:i32 = load %8
+        %x_33:i32 = let %9
+        %11:i32 = add 7i, %x_33
+        %12:bool = lt %x_31, %11
+        if %12 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_37:i32 = load %i
-        switch %x_37 [c: (7i 8i, %b7), c: (default, %b8)] {  # switch_1
-          %b7 = block {  # case
-            %x_40:i32 = load %a
-            %13:i32 = add %x_40, 1i
-            store %a, %13
+        %13:i32 = load %i
+        %x_37:i32 = let %13
+        switch %x_37 [c: (7i 8i, $B7), c: (default, $B8)] {  # switch_1
+          $B7: {  # case
+            %15:i32 = load %a
+            %x_40:i32 = let %15
+            %17:i32 = add %x_40, 1i
+            store %a, %17
             exit_switch  # switch_1
           }
-          %b8 = block {  # case
+          $B8: {  # case
             exit_switch  # switch_1
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_42:i32 = load %i
-        %15:i32 = add %x_42, 1i
-        store %i, %15
-        next_iteration %b3
+      $B4: {  # continuing
+        %18:i32 = load %i
+        %x_42:i32 = let %18
+        %20:i32 = add %x_42, 1i
+        store %i, %20
+        next_iteration  # -> $B3
       }
     }
-    %x_44:i32 = load %a
-    %17:bool = eq %x_44, 2i
-    if %17 [t: %b9, f: %b10] {  # if_2
-      %b9 = block {  # true
+    %21:i32 = load %a
+    %x_44:i32 = let %21
+    %23:bool = eq %x_44, 2i
+    if %23 [t: $B9, f: $B10] {  # if_2
+      $B9: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_2
       }
-      %b10 = block {  # false
+      $B10: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_2
       }
@@ -70,12 +76,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b11 {
-  %b11 = block {
-    %19:void = call %main_1
-    %20:vec4<f32> = load %x_GLF_color
-    %21:main_out = construct %20
-    ret %21
+%tint_symbol = @fragment func():main_out {
+  $B11: {
+    %25:void = call %main_1
+    %26:vec4<f32> = load %x_GLF_color
+    %27:main_out = construct %26
+    ret %27
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-array-element-in-loop/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-array-element-in-loop/0-opt.spvasm.expected.ir.msl
index 53a68a5..9de0d02 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-array-element-in-loop/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-array-element-in-loop/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,14 +20,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_9:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %arr:ptr<function, array<f32, 3>, read_write> = var
     %a:ptr<function, i32, read_write> = var
     %x_69:ptr<function, bool, read_write> = var
@@ -43,109 +43,111 @@
     %17:array<f32, 3> = construct %12, %14, %16
     store %arr, %17
     store %a, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %18:i32 = load %a
         %19:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
         %20:i32 = load %19
         %21:bool = lte %18, %20
-        if %21 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %21 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_49:i32 = load %a
-        %23:i32 = load %a
-        %24:i32 = add %23, 1i
-        store %a, %24
-        %25:ptr<function, f32, read_write> = access %arr, %x_49
-        %26:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-        %27:f32 = load %26
-        store %25, %27
-        continue %b4
+        %22:i32 = load %a
+        %x_49:i32 = let %22
+        %24:i32 = load %a
+        %25:i32 = add %24, 1i
+        store %a, %25
+        %26:ptr<function, f32, read_write> = access %arr, %x_49
+        %27:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+        %28:f32 = load %27
+        store %26, %28
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
-    %28:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-    %29:i32 = load %28
-    %30:ptr<function, f32, read_write> = access %arr, %29
-    %31:f32 = load %30
-    %32:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %33:f32 = load %32
-    %x_60:bool = eq %31, %33
+    %29:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+    %30:i32 = load %29
+    %31:ptr<function, f32, read_write> = access %arr, %30
+    %32:f32 = load %31
+    %33:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %34:f32 = load %33
+    %35:bool = eq %32, %34
+    %x_60:bool = let %35
     store %x_70, %x_60
-    if %x_60 [t: %b7] {  # if_2
-      %b7 = block {  # true
-        %35:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
-        %36:i32 = load %35
-        %37:ptr<function, f32, read_write> = access %arr, %36
-        %38:f32 = load %37
-        %39:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    if %x_60 [t: $B7] {  # if_2
+      $B7: {  # true
+        %37:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
+        %38:i32 = load %37
+        %39:ptr<function, f32, read_write> = access %arr, %38
         %40:f32 = load %39
-        %41:bool = eq %38, %40
-        store %x_69, %41
-        %42:bool = load %x_69
-        store %x_70, %42
+        %41:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+        %42:f32 = load %41
+        %43:bool = eq %40, %42
+        store %x_69, %43
+        %44:bool = load %x_69
+        store %x_70, %44
         exit_if  # if_2
       }
     }
-    %43:bool = load %x_70
-    store %x_80, %43
-    %44:bool = load %x_70
-    if %44 [t: %b8] {  # if_3
-      %b8 = block {  # true
-        %45:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %46:i32 = load %45
-        %47:ptr<function, f32, read_write> = access %arr, %46
-        %48:f32 = load %47
-        %49:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
+    %45:bool = load %x_70
+    store %x_80, %45
+    %46:bool = load %x_70
+    if %46 [t: $B8] {  # if_3
+      $B8: {  # true
+        %47:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+        %48:i32 = load %47
+        %49:ptr<function, f32, read_write> = access %arr, %48
         %50:f32 = load %49
-        %51:bool = eq %48, %50
-        store %x_79, %51
-        %52:bool = load %x_79
-        store %x_80, %52
+        %51:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
+        %52:f32 = load %51
+        %53:bool = eq %50, %52
+        store %x_79, %53
+        %54:bool = load %x_79
+        store %x_80, %54
         exit_if  # if_3
       }
     }
-    %53:bool = load %x_80
-    if %53 [t: %b9, f: %b10] {  # if_4
-      %b9 = block {  # true
-        %54:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %55:i32 = load %54
-        %56:ptr<function, f32, read_write> = access %arr, %55
-        %57:f32 = load %56
-        %58:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+    %55:bool = load %x_80
+    if %55 [t: $B9, f: $B10] {  # if_4
+      $B9: {  # true
+        %56:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %57:i32 = load %56
+        %58:ptr<function, f32, read_write> = access %arr, %57
         %59:f32 = load %58
         %60:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
         %61:f32 = load %60
-        %62:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+        %62:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
         %63:f32 = load %62
-        %64:vec4<f32> = construct %57, %59, %61, %63
-        store %x_GLF_color, %64
+        %64:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+        %65:f32 = load %64
+        %66:vec4<f32> = construct %59, %61, %63, %65
+        store %x_GLF_color, %66
         exit_if  # if_4
       }
-      %b10 = block {  # false
-        %65:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-        %66:f32 = load %65
-        %67:vec4<f32> = construct %66
-        store %x_GLF_color, %67
+      $B10: {  # false
+        %67:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+        %68:f32 = load %67
+        %69:vec4<f32> = construct %68
+        store %x_GLF_color, %69
         exit_if  # if_4
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b11 {
-  %b11 = block {
-    %69:void = call %main_1
-    %70:vec4<f32> = load %x_GLF_color
-    %71:main_out = construct %70
-    ret %71
+%tint_symbol = @fragment func():main_out {
+  $B11: {
+    %71:void = call %main_1
+    %72:vec4<f32> = load %x_GLF_color
+    %73:main_out = construct %72
+    ret %73
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-array-element-in-loop/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-array-element-in-loop/0-opt.wgsl.expected.ir.msl
index 3aa1490..d5c7ca5 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-array-element-in-loop/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-array-element-in-loop/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,14 +20,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_9:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %arr:ptr<function, array<f32, 3>, read_write> = var
     %a:ptr<function, i32, read_write> = var
     %x_69:ptr<function, bool, read_write> = var
@@ -35,115 +35,140 @@
     %x_70_phi:ptr<function, bool, read_write> = var
     %x_80_phi:ptr<function, bool, read_write> = var
     %11:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-    %x_34:f32 = load %11
-    %13:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_36:f32 = load %13
-    %15:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
-    %x_38:f32 = load %15
-    %17:array<f32, 3> = construct %x_34, %x_36, %x_38
-    store %arr, %17
+    %12:f32 = load %11
+    %x_34:f32 = let %12
+    %14:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %15:f32 = load %14
+    %x_36:f32 = let %15
+    %17:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
+    %18:f32 = load %17
+    %x_38:f32 = let %18
+    %20:array<f32, 3> = construct %x_34, %x_36, %x_38
+    store %arr, %20
     store %a, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_44:i32 = load %a
-        %19:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %x_46:i32 = load %19
-        %21:bool = lte %x_44, %x_46
-        if %21 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %21:i32 = load %a
+        %x_44:i32 = let %21
+        %23:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %24:i32 = load %23
+        %x_46:i32 = let %24
+        %26:bool = lte %x_44, %x_46
+        if %26 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_49:i32 = load %a
-        %23:i32 = add %x_49, 1i
-        store %a, %23
-        %24:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-        %x_52:f32 = load %24
-        %26:ptr<function, f32, read_write> = access %arr, %x_49
-        store %26, %x_52
-        continue %b4
+        %27:i32 = load %a
+        %x_49:i32 = let %27
+        %29:i32 = add %x_49, 1i
+        store %a, %29
+        %30:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+        %31:f32 = load %30
+        %x_52:f32 = let %31
+        %33:ptr<function, f32, read_write> = access %arr, %x_49
+        store %33, %x_52
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
-    %27:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-    %x_55:i32 = load %27
-    %29:ptr<function, f32, read_write> = access %arr, %x_55
-    %x_57:f32 = load %29
-    %31:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_59:f32 = load %31
-    %x_60:bool = eq %x_57, %x_59
+    %34:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+    %35:i32 = load %34
+    %x_55:i32 = let %35
+    %37:ptr<function, f32, read_write> = access %arr, %x_55
+    %38:f32 = load %37
+    %x_57:f32 = let %38
+    %40:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %41:f32 = load %40
+    %x_59:f32 = let %41
+    %43:bool = eq %x_57, %x_59
+    %x_60:bool = let %43
     store %x_70_phi, %x_60
-    if %x_60 [t: %b7] {  # if_2
-      %b7 = block {  # true
-        %34:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
-        %x_64:i32 = load %34
-        %36:ptr<function, f32, read_write> = access %arr, %x_64
-        %x_66:f32 = load %36
-        %38:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-        %x_68:f32 = load %38
-        %40:bool = eq %x_66, %x_68
-        store %x_69, %40
-        %41:bool = load %x_69
-        store %x_70_phi, %41
+    if %x_60 [t: $B7] {  # if_2
+      $B7: {  # true
+        %45:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
+        %46:i32 = load %45
+        %x_64:i32 = let %46
+        %48:ptr<function, f32, read_write> = access %arr, %x_64
+        %49:f32 = load %48
+        %x_66:f32 = let %49
+        %51:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+        %52:f32 = load %51
+        %x_68:f32 = let %52
+        %54:bool = eq %x_66, %x_68
+        store %x_69, %54
+        %55:bool = load %x_69
+        store %x_70_phi, %55
         exit_if  # if_2
       }
     }
-    %x_70:bool = load %x_70_phi
+    %56:bool = load %x_70_phi
+    %x_70:bool = let %56
     store %x_80_phi, %x_70
-    if %x_70 [t: %b8] {  # if_3
-      %b8 = block {  # true
-        %43:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %x_74:i32 = load %43
-        %45:ptr<function, f32, read_write> = access %arr, %x_74
-        %x_76:f32 = load %45
-        %47:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
-        %x_78:f32 = load %47
-        %49:bool = eq %x_76, %x_78
-        store %x_79, %49
-        %50:bool = load %x_79
-        store %x_80_phi, %50
+    if %x_70 [t: $B8] {  # if_3
+      $B8: {  # true
+        %58:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+        %59:i32 = load %58
+        %x_74:i32 = let %59
+        %61:ptr<function, f32, read_write> = access %arr, %x_74
+        %62:f32 = load %61
+        %x_76:f32 = let %62
+        %64:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
+        %65:f32 = load %64
+        %x_78:f32 = let %65
+        %67:bool = eq %x_76, %x_78
+        store %x_79, %67
+        %68:bool = load %x_79
+        store %x_80_phi, %68
         exit_if  # if_3
       }
     }
-    %x_80:bool = load %x_80_phi
-    if %x_80 [t: %b9, f: %b10] {  # if_4
-      %b9 = block {  # true
-        %52:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %x_85:i32 = load %52
-        %54:ptr<function, f32, read_write> = access %arr, %x_85
-        %x_87:f32 = load %54
-        %56:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-        %x_89:f32 = load %56
-        %58:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-        %x_91:f32 = load %58
-        %60:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-        %x_93:f32 = load %60
-        %62:vec4<f32> = construct %x_87, %x_89, %x_91, %x_93
-        store %x_GLF_color, %62
+    %69:bool = load %x_80_phi
+    %x_80:bool = let %69
+    if %x_80 [t: $B9, f: $B10] {  # if_4
+      $B9: {  # true
+        %71:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %72:i32 = load %71
+        %x_85:i32 = let %72
+        %74:ptr<function, f32, read_write> = access %arr, %x_85
+        %75:f32 = load %74
+        %x_87:f32 = let %75
+        %77:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+        %78:f32 = load %77
+        %x_89:f32 = let %78
+        %80:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+        %81:f32 = load %80
+        %x_91:f32 = let %81
+        %83:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+        %84:f32 = load %83
+        %x_93:f32 = let %84
+        %86:vec4<f32> = construct %x_87, %x_89, %x_91, %x_93
+        store %x_GLF_color, %86
         exit_if  # if_4
       }
-      %b10 = block {  # false
-        %63:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-        %x_96:f32 = load %63
-        %65:vec4<f32> = construct %x_96, %x_96, %x_96, %x_96
-        store %x_GLF_color, %65
+      $B10: {  # false
+        %87:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+        %88:f32 = load %87
+        %x_96:f32 = let %88
+        %90:vec4<f32> = construct %x_96, %x_96, %x_96, %x_96
+        store %x_GLF_color, %90
         exit_if  # if_4
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b11 {
-  %b11 = block {
-    %67:void = call %main_1
-    %68:vec4<f32> = load %x_GLF_color
-    %69:main_out = construct %68
-    ret %69
+%tint_symbol = @fragment func():main_out {
+  $B11: {
+    %92:void = call %main_1
+    %93:vec4<f32> = load %x_GLF_color
+    %94:main_out = construct %93
+    ret %94
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-float-in-loop-abs/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-float-in-loop-abs/0-opt.spvasm.expected.ir.msl
index 9d7fbbc..51275f6 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-float-in-loop-abs/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-float-in-loop-abs/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,14 +20,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_10:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %f0:ptr<function, f32, read_write> = var
     %f1:ptr<function, f32, read_write> = var
     %i:ptr<function, i32, read_write> = var
@@ -42,17 +42,17 @@
     %14:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
     %15:i32 = load %14
     store %i, %15
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %16:i32 = load %i
         %17:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
         %18:i32 = load %17
         %19:bool = lt %16, %18
-        if %19 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %19 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
@@ -62,69 +62,73 @@
         store %f0, %22
         %23:f32 = load %f0
         store %f1, %23
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
+      $B4: {  # continuing
         %24:i32 = load %i
         %25:i32 = add %24, 1i
         store %i, %25
-        next_iteration %b3
+        next_iteration  # -> $B3
       }
     }
     %26:f32 = load %f1
     %27:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
     %28:f32 = load %27
-    %x_57:bool = gt %26, %28
+    %29:bool = gt %26, %28
+    %x_57:bool = let %29
     store %x_64, %x_57
-    if %x_57 [t: %b7] {  # if_2
-      %b7 = block {  # true
-        %30:f32 = load %f1
-        %31:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
-        %32:f32 = load %31
-        %33:bool = lt %30, %32
-        store %x_63, %33
-        %34:bool = load %x_63
-        store %x_64, %34
+    if %x_57 [t: $B7] {  # if_2
+      $B7: {  # true
+        %31:f32 = load %f1
+        %32:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
+        %33:f32 = load %32
+        %34:bool = lt %31, %33
+        store %x_63, %34
+        %35:bool = load %x_63
+        store %x_64, %35
         exit_if  # if_2
       }
     }
-    %35:bool = load %x_64
-    if %35 [t: %b8, f: %b9] {  # if_3
-      %b8 = block {  # true
-        %36:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-        %37:i32 = load %36
-        %38:f32 = convert %37
-        %39:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %40:i32 = load %39
-        %41:f32 = convert %40
-        %42:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %43:i32 = load %42
-        %44:f32 = convert %43
-        %45:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+    %36:bool = load %x_64
+    if %36 [t: $B8, f: $B9] {  # if_3
+      $B8: {  # true
+        %37:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+        %38:i32 = load %37
+        %39:f32 = convert %38
+        %40:f32 = let %39
+        %41:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %42:i32 = load %41
+        %43:f32 = convert %42
+        %44:f32 = let %43
+        %45:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
         %46:i32 = load %45
         %47:f32 = convert %46
-        %48:vec4<f32> = construct %38, %41, %44, %47
-        store %x_GLF_color, %48
-        exit_if  # if_3
-      }
-      %b9 = block {  # false
-        %49:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %48:f32 = let %47
+        %49:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
         %50:i32 = load %49
         %51:f32 = convert %50
-        %52:vec4<f32> = construct %51
+        %52:vec4<f32> = construct %40, %44, %48, %51
         store %x_GLF_color, %52
         exit_if  # if_3
       }
+      $B9: {  # false
+        %53:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %54:i32 = load %53
+        %55:f32 = convert %54
+        %56:vec4<f32> = construct %55
+        store %x_GLF_color, %56
+        exit_if  # if_3
+      }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b10 {
-  %b10 = block {
-    %54:void = call %main_1
-    %55:vec4<f32> = load %x_GLF_color
-    %56:main_out = construct %55
-    ret %56
+%tint_symbol = @fragment func():main_out {
+  $B10: {
+    %58:void = call %main_1
+    %59:vec4<f32> = load %x_GLF_color
+    %60:main_out = construct %59
+    ret %60
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-float-in-loop-abs/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-float-in-loop-abs/0-opt.wgsl.expected.ir.msl
index 24f28be..97fb893 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-float-in-loop-abs/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-float-in-loop-abs/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,111 +20,134 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_10:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %f0:ptr<function, f32, read_write> = var
     %f1:ptr<function, f32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %x_63:ptr<function, bool, read_write> = var
     %x_64_phi:ptr<function, bool, read_write> = var
     %10:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_34:f32 = load %10
+    %11:f32 = load %10
+    %x_34:f32 = let %11
     store %f0, %x_34
-    %12:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_36:f32 = load %12
+    %13:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %14:f32 = load %13
+    %x_36:f32 = let %14
     store %f1, %x_36
-    %14:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-    %x_38:i32 = load %14
+    %16:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+    %17:i32 = load %16
+    %x_38:i32 = let %17
     store %i, %x_38
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_43:i32 = load %i
-        %17:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %x_45:i32 = load %17
-        %19:bool = lt %x_43, %x_45
-        if %19 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %19:i32 = load %i
+        %x_43:i32 = let %19
+        %21:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %22:i32 = load %21
+        %x_45:i32 = let %22
+        %24:bool = lt %x_43, %x_45
+        if %24 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_48:f32 = load %f0
-        %21:f32 = mul 1.10000002384185791016f, %x_48
-        %22:f32 = abs %21
-        store %f0, %22
-        %x_51:f32 = load %f0
+        %25:f32 = load %f0
+        %x_48:f32 = let %25
+        %27:f32 = mul 1.10000002384185791016f, %x_48
+        %28:f32 = abs %27
+        store %f0, %28
+        %29:f32 = load %f0
+        %x_51:f32 = let %29
         store %f1, %x_51
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_52:i32 = load %i
-        %25:i32 = add %x_52, 1i
-        store %i, %25
-        next_iteration %b3
+      $B4: {  # continuing
+        %31:i32 = load %i
+        %x_52:i32 = let %31
+        %33:i32 = add %x_52, 1i
+        store %i, %33
+        next_iteration  # -> $B3
       }
     }
-    %x_54:f32 = load %f1
-    %27:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-    %x_56:f32 = load %27
-    %x_57:bool = gt %x_54, %x_56
+    %34:f32 = load %f1
+    %x_54:f32 = let %34
+    %36:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+    %37:f32 = load %36
+    %x_56:f32 = let %37
+    %39:bool = gt %x_54, %x_56
+    %x_57:bool = let %39
     store %x_64_phi, %x_57
-    if %x_57 [t: %b7] {  # if_2
-      %b7 = block {  # true
-        %x_60:f32 = load %f1
-        %31:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
-        %x_62:f32 = load %31
-        %33:bool = lt %x_60, %x_62
-        store %x_63, %33
-        %34:bool = load %x_63
-        store %x_64_phi, %34
+    if %x_57 [t: $B7] {  # if_2
+      $B7: {  # true
+        %41:f32 = load %f1
+        %x_60:f32 = let %41
+        %43:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
+        %44:f32 = load %43
+        %x_62:f32 = let %44
+        %46:bool = lt %x_60, %x_62
+        store %x_63, %46
+        %47:bool = load %x_63
+        store %x_64_phi, %47
         exit_if  # if_2
       }
     }
-    %x_64:bool = load %x_64_phi
-    if %x_64 [t: %b8, f: %b9] {  # if_3
-      %b8 = block {  # true
-        %36:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-        %x_69:i32 = load %36
-        %38:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %x_72:i32 = load %38
-        %40:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %x_75:i32 = load %40
-        %42:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-        %x_78:i32 = load %42
-        %44:f32 = convert %x_69
-        %45:f32 = convert %x_72
-        %46:f32 = convert %x_75
-        %47:f32 = convert %x_78
-        %48:vec4<f32> = construct %44, %45, %46, %47
-        store %x_GLF_color, %48
+    %48:bool = load %x_64_phi
+    %x_64:bool = let %48
+    if %x_64 [t: $B8, f: $B9] {  # if_3
+      $B8: {  # true
+        %50:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+        %51:i32 = load %50
+        %x_69:i32 = let %51
+        %53:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %54:i32 = load %53
+        %x_72:i32 = let %54
+        %56:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %57:i32 = load %56
+        %x_75:i32 = let %57
+        %59:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+        %60:i32 = load %59
+        %x_78:i32 = let %60
+        %62:f32 = convert %x_69
+        %63:f32 = let %62
+        %64:f32 = convert %x_72
+        %65:f32 = let %64
+        %66:f32 = convert %x_75
+        %67:f32 = let %66
+        %68:f32 = convert %x_78
+        %69:vec4<f32> = construct %63, %65, %67, %68
+        store %x_GLF_color, %69
         exit_if  # if_3
       }
-      %b9 = block {  # false
-        %49:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %x_82:i32 = load %49
-        %x_83:f32 = convert %x_82
-        %52:vec4<f32> = construct %x_83, %x_83, %x_83, %x_83
-        store %x_GLF_color, %52
+      $B9: {  # false
+        %70:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %71:i32 = load %70
+        %x_82:i32 = let %71
+        %73:f32 = convert %x_82
+        %x_83:f32 = let %73
+        %75:vec4<f32> = construct %x_83, %x_83, %x_83, %x_83
+        store %x_GLF_color, %75
         exit_if  # if_3
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b10 {
-  %b10 = block {
-    %54:void = call %main_1
-    %55:vec4<f32> = load %x_GLF_color
-    %56:main_out = construct %55
-    ret %56
+%tint_symbol = @fragment func():main_out {
+  $B10: {
+    %77:void = call %main_1
+    %78:vec4<f32> = load %x_GLF_color
+    %79:main_out = construct %78
+    ret %79
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-global-counter-loop-function/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-global-counter-loop-function/0-opt.spvasm.expected.ir.msl
index fb5132e..aa42001 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-global-counter-loop-function/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-global-counter-loop-function/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,138 +12,141 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_global_loop_count:ptr<private, i32, 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():void -> %b2 {
-  %b2 = block {
+%func_ = func():void {
+  $B2: {
     %x_66:ptr<function, i32, read_write> = var
     %6:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-    %x_62:i32 = load %6
-    %8:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-    %9:i32 = load %8
-    store %x_66, %9
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    %7:i32 = load %6
+    %x_62:i32 = let %7
+    %9:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+    %10:i32 = load %9
+    store %x_66, %10
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %x_67:ptr<function, i32, read_write> = var
-        %11:i32 = load %x_66
-        %12:ptr<uniform, i32, read> = access %x_7, 0u, 3i, 0u
-        %13:i32 = load %12
-        %14:bool = lt %11, %13
-        if %14 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %12:i32 = load %x_66
+        %13:ptr<uniform, i32, read> = access %x_7, 0u, 3i, 0u
+        %14:i32 = load %13
+        %15:bool = lt %12, %14
+        if %15 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %15:i32 = load %x_GLF_global_loop_count
-        %16:i32 = add %15, 1i
-        store %x_GLF_global_loop_count, %16
-        %17:i32 = load %x_66
-        %18:i32 = add %17, 1i
-        store %x_67, %18
-        %19:i32 = load %x_67
-        store %x_66, %19
-        next_iteration %b3
+      $B4: {  # continuing
+        %16:i32 = load %x_GLF_global_loop_count
+        %17:i32 = add %16, 1i
+        store %x_GLF_global_loop_count, %17
+        %18:i32 = load %x_66
+        %19:i32 = add %18, 1i
+        store %x_67, %19
+        %20:i32 = load %x_67
+        store %x_66, %20
+        next_iteration  # -> $B3
       }
     }
-    %20:bool = lt %x_62, %x_62
-    if %20 [t: %b7] {  # if_2
-      %b7 = block {  # true
+    %21:bool = lt %x_62, %x_62
+    if %21 [t: $B7] {  # if_2
+      $B7: {  # true
         ret
       }
     }
     ret
   }
 }
-%main_1 = func():void -> %b8 {
-  %b8 = block {
+%main_1 = func():void {
+  $B8: {
     store %x_GLF_global_loop_count, 0i
-    loop [b: %b9, c: %b10] {  # loop_2
-      %b9 = block {  # body
-        %22:i32 = load %x_GLF_global_loop_count
-        %23:bool = lt %22, 10i
-        if %23 [t: %b11, f: %b12] {  # if_3
-          %b11 = block {  # true
+    loop [b: $B9, c: $B10] {  # loop_2
+      $B9: {  # body
+        %23:i32 = load %x_GLF_global_loop_count
+        %24:bool = lt %23, 10i
+        if %24 [t: $B11, f: $B12] {  # if_3
+          $B11: {  # true
             exit_if  # if_3
           }
-          %b12 = block {  # false
+          $B12: {  # false
             exit_loop  # loop_2
           }
         }
-        continue %b10
+        continue  # -> $B10
       }
-      %b10 = block {  # continuing
-        %24:i32 = load %x_GLF_global_loop_count
-        %25:i32 = add %24, 1i
-        store %x_GLF_global_loop_count, %25
-        %26:void = call %func_
-        next_iteration %b9
+      $B10: {  # continuing
+        %25:i32 = load %x_GLF_global_loop_count
+        %26:i32 = add %25, 1i
+        store %x_GLF_global_loop_count, %26
+        %27:void = call %func_
+        next_iteration  # -> $B9
       }
     }
-    loop [b: %b13, c: %b14] {  # loop_3
-      %b13 = block {  # body
-        %27:i32 = load %x_GLF_global_loop_count
-        %28:bool = lt %27, 10i
-        if %28 [t: %b15, f: %b16] {  # if_4
-          %b15 = block {  # true
+    loop [b: $B13, c: $B14] {  # loop_3
+      $B13: {  # body
+        %28:i32 = load %x_GLF_global_loop_count
+        %29:bool = lt %28, 10i
+        if %29 [t: $B15, f: $B16] {  # if_4
+          $B15: {  # true
             exit_if  # if_4
           }
-          %b16 = block {  # false
+          $B16: {  # false
             exit_loop  # loop_3
           }
         }
-        continue %b14
+        continue  # -> $B14
       }
-      %b14 = block {  # continuing
-        %29:i32 = load %x_GLF_global_loop_count
-        %30:i32 = add %29, 1i
-        store %x_GLF_global_loop_count, %30
-        next_iteration %b13
+      $B14: {  # continuing
+        %30:i32 = load %x_GLF_global_loop_count
+        %31:i32 = add %30, 1i
+        store %x_GLF_global_loop_count, %31
+        next_iteration  # -> $B13
       }
     }
-    %31:i32 = load %x_GLF_global_loop_count
-    %32:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
-    %33:i32 = load %32
-    %34:bool = eq %31, %33
-    if %34 [t: %b17, f: %b18] {  # if_5
-      %b17 = block {  # true
-        %35:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %36:i32 = load %35
-        %x_51:f32 = convert %36
-        %38:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %39:i32 = load %38
-        %x_54:f32 = convert %39
-        %41:vec4<f32> = construct %x_51, %x_54, %x_54, %x_51
-        store %x_GLF_color, %41
+    %32:i32 = load %x_GLF_global_loop_count
+    %33:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
+    %34:i32 = load %33
+    %35:bool = eq %32, %34
+    if %35 [t: $B17, f: $B18] {  # if_5
+      $B17: {  # true
+        %36:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %37:i32 = load %36
+        %38:f32 = convert %37
+        %x_51:f32 = let %38
+        %40:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %41:i32 = load %40
+        %42:f32 = convert %41
+        %x_54:f32 = let %42
+        %44:vec4<f32> = construct %x_51, %x_54, %x_54, %x_51
+        store %x_GLF_color, %44
         exit_if  # if_5
       }
-      %b18 = block {  # false
-        %42:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %43:i32 = load %42
-        %44:f32 = convert %43
-        %45:vec4<f32> = construct %44
-        store %x_GLF_color, %45
+      $B18: {  # false
+        %45:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %46:i32 = load %45
+        %47:f32 = convert %46
+        %48:vec4<f32> = construct %47
+        store %x_GLF_color, %48
         exit_if  # if_5
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b19 {
-  %b19 = block {
-    %47:void = call %main_1
-    %48:vec4<f32> = load %x_GLF_color
-    %49:main_out = construct %48
-    ret %49
+%tint_symbol = @fragment func():main_out {
+  $B19: {
+    %50:void = call %main_1
+    %51:vec4<f32> = load %x_GLF_color
+    %52:main_out = construct %51
+    ret %52
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-global-counter-loop-function/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-global-counter-loop-function/0-opt.wgsl.expected.ir.msl
index 2a61f20..de389c1 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-global-counter-loop-function/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-global-counter-loop-function/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,137 +12,154 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_global_loop_count:ptr<private, i32, 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():void -> %b2 {
-  %b2 = block {
+%func_ = func():void {
+  $B2: {
     %x_66_phi:ptr<function, i32, read_write> = var
     %6:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-    %x_62:i32 = load %6
-    %8:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-    %x_64:i32 = load %8
+    %7:i32 = load %6
+    %x_62:i32 = let %7
+    %9:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+    %10:i32 = load %9
+    %x_64:i32 = let %10
     store %x_66_phi, %x_64
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %x_67:ptr<function, i32, read_write> = var
-        %x_66:i32 = load %x_66_phi
-        %12:ptr<uniform, i32, read> = access %x_7, 0u, 3i, 0u
-        %x_70:i32 = load %12
-        %14:bool = lt %x_66, %x_70
-        if %14 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %13:i32 = load %x_66_phi
+        %x_66:i32 = let %13
+        %15:ptr<uniform, i32, read> = access %x_7, 0u, 3i, 0u
+        %16:i32 = load %15
+        %x_70:i32 = let %16
+        %18:bool = lt %x_66, %x_70
+        if %18 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_73:i32 = load %x_GLF_global_loop_count
-        %16:i32 = add %x_73, 1i
-        store %x_GLF_global_loop_count, %16
-        %17:i32 = add %x_66, 1i
-        store %x_67, %17
-        %18:i32 = load %x_67
-        store %x_66_phi, %18
-        next_iteration %b3
+      $B4: {  # continuing
+        %19:i32 = load %x_GLF_global_loop_count
+        %x_73:i32 = let %19
+        %21:i32 = add %x_73, 1i
+        store %x_GLF_global_loop_count, %21
+        %22:i32 = add %x_66, 1i
+        store %x_67, %22
+        %23:i32 = load %x_67
+        store %x_66_phi, %23
+        next_iteration  # -> $B3
       }
     }
-    %19:bool = lt %x_62, %x_62
-    if %19 [t: %b7] {  # if_2
-      %b7 = block {  # true
+    %24:bool = lt %x_62, %x_62
+    if %24 [t: $B7] {  # if_2
+      $B7: {  # true
         ret
       }
     }
     ret
   }
 }
-%main_1 = func():void -> %b8 {
-  %b8 = block {
+%main_1 = func():void {
+  $B8: {
     store %x_GLF_global_loop_count, 0i
-    loop [b: %b9, c: %b10] {  # loop_2
-      %b9 = block {  # body
-        %x_28:i32 = load %x_GLF_global_loop_count
-        %22:bool = lt %x_28, 10i
-        if %22 [t: %b11, f: %b12] {  # if_3
-          %b11 = block {  # true
+    loop [b: $B9, c: $B10] {  # loop_2
+      $B9: {  # body
+        %26:i32 = load %x_GLF_global_loop_count
+        %x_28:i32 = let %26
+        %28:bool = lt %x_28, 10i
+        if %28 [t: $B11, f: $B12] {  # if_3
+          $B11: {  # true
             exit_if  # if_3
           }
-          %b12 = block {  # false
+          $B12: {  # false
             exit_loop  # loop_2
           }
         }
-        continue %b10
+        continue  # -> $B10
       }
-      %b10 = block {  # continuing
-        %x_32:i32 = load %x_GLF_global_loop_count
-        %24:i32 = add %x_32, 1i
-        store %x_GLF_global_loop_count, %24
-        %25:void = call %func_
-        next_iteration %b9
+      $B10: {  # continuing
+        %29:i32 = load %x_GLF_global_loop_count
+        %x_32:i32 = let %29
+        %31:i32 = add %x_32, 1i
+        store %x_GLF_global_loop_count, %31
+        %32:void = call %func_
+        next_iteration  # -> $B9
       }
     }
-    loop [b: %b13, c: %b14] {  # loop_3
-      %b13 = block {  # body
-        %x_36:i32 = load %x_GLF_global_loop_count
-        %27:bool = lt %x_36, 10i
-        if %27 [t: %b15, f: %b16] {  # if_4
-          %b15 = block {  # true
+    loop [b: $B13, c: $B14] {  # loop_3
+      $B13: {  # body
+        %33:i32 = load %x_GLF_global_loop_count
+        %x_36:i32 = let %33
+        %35:bool = lt %x_36, 10i
+        if %35 [t: $B15, f: $B16] {  # if_4
+          $B15: {  # true
             exit_if  # if_4
           }
-          %b16 = block {  # false
+          $B16: {  # false
             exit_loop  # loop_3
           }
         }
-        continue %b14
+        continue  # -> $B14
       }
-      %b14 = block {  # continuing
-        %x_40:i32 = load %x_GLF_global_loop_count
-        %29:i32 = add %x_40, 1i
-        store %x_GLF_global_loop_count, %29
-        next_iteration %b13
+      $B14: {  # continuing
+        %36:i32 = load %x_GLF_global_loop_count
+        %x_40:i32 = let %36
+        %38:i32 = add %x_40, 1i
+        store %x_GLF_global_loop_count, %38
+        next_iteration  # -> $B13
       }
     }
-    %x_42:i32 = load %x_GLF_global_loop_count
-    %31:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
-    %x_44:i32 = load %31
-    %33:bool = eq %x_42, %x_44
-    if %33 [t: %b17, f: %b18] {  # if_5
-      %b17 = block {  # true
-        %34:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %x_50:i32 = load %34
-        %x_51:f32 = convert %x_50
-        %37:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %x_53:i32 = load %37
-        %x_54:f32 = convert %x_53
-        %40:vec4<f32> = construct %x_51, %x_54, %x_54, %x_51
-        store %x_GLF_color, %40
+    %39:i32 = load %x_GLF_global_loop_count
+    %x_42:i32 = let %39
+    %41:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
+    %42:i32 = load %41
+    %x_44:i32 = let %42
+    %44:bool = eq %x_42, %x_44
+    if %44 [t: $B17, f: $B18] {  # if_5
+      $B17: {  # true
+        %45:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %46:i32 = load %45
+        %x_50:i32 = let %46
+        %48:f32 = convert %x_50
+        %x_51:f32 = let %48
+        %50:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %51:i32 = load %50
+        %x_53:i32 = let %51
+        %53:f32 = convert %x_53
+        %x_54:f32 = let %53
+        %55:vec4<f32> = construct %x_51, %x_54, %x_54, %x_51
+        store %x_GLF_color, %55
         exit_if  # if_5
       }
-      %b18 = block {  # false
-        %41:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %x_57:i32 = load %41
-        %x_58:f32 = convert %x_57
-        %44:vec4<f32> = construct %x_58, %x_58, %x_58, %x_58
-        store %x_GLF_color, %44
+      $B18: {  # false
+        %56:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %57:i32 = load %56
+        %x_57:i32 = let %57
+        %59:f32 = convert %x_57
+        %x_58:f32 = let %59
+        %61:vec4<f32> = construct %x_58, %x_58, %x_58, %x_58
+        store %x_GLF_color, %61
         exit_if  # if_5
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b19 {
-  %b19 = block {
-    %46:void = call %main_1
-    %47:vec4<f32> = load %x_GLF_color
-    %48:main_out = construct %47
-    ret %48
+%tint_symbol = @fragment func():main_out {
+  $B19: {
+    %63:void = call %main_1
+    %64:vec4<f32> = load %x_GLF_color
+    %65:main_out = construct %64
+    ret %65
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-inside-clamp/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-inside-clamp/0-opt.spvasm.expected.ir.msl
index bd4e628..15a70d7 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-inside-clamp/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-inside-clamp/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:i32 @offset(0)
 }
 
@@ -8,13 +8,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, array<i32, 3>, read_write> = var
     %b:ptr<function, i32, read_write> = var
     %c:ptr<function, i32, read_write> = var
@@ -32,8 +32,8 @@
     store %c, %13
     %14:i32 = load %c
     %15:bool = gt %14, 1i
-    if %15 [t: %b3] {  # if_1
-      %b3 = block {  # true
+    if %15 [t: $B3] {  # if_1
+      $B3: {  # true
         store %x_GLF_color, vec4<f32>(0.0f, 1.0f, 1.0f, 0.0f)
         %16:i32 = load %b
         %17:i32 = add %16, 1i
@@ -42,23 +42,26 @@
       }
     }
     %18:i32 = load %b
-    %x_48:i32 = add %18, 1i
+    %19:i32 = add %18, 1i
+    %x_48:i32 = let %19
     store %b, %x_48
-    %x_50_save:i32 = clamp %x_48, 0i, 2i
-    %21:ptr<function, i32, read_write> = access %a, %x_50_save
-    %22:ptr<function, i32, read_write> = access %a, %x_50_save
-    %23:i32 = load %22
-    %24:i32 = add %23, 1i
-    store %21, %24
-    %25:ptr<function, i32, read_write> = access %a, 2i
+    %21:i32 = max %x_48, 0i
+    %22:i32 = min %21, 2i
+    %x_50_save:i32 = let %22
+    %24:ptr<function, i32, read_write> = access %a, %x_50_save
+    %25:ptr<function, i32, read_write> = access %a, %x_50_save
     %26:i32 = load %25
-    %27:bool = eq %26, 4i
-    if %27 [t: %b4, f: %b5] {  # if_2
-      %b4 = block {  # true
+    %27:i32 = add %26, 1i
+    store %24, %27
+    %28:ptr<function, i32, read_write> = access %a, 2i
+    %29:i32 = load %28
+    %30:bool = eq %29, 4i
+    if %30 [t: $B4, f: $B5] {  # if_2
+      $B4: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_2
       }
-      %b5 = block {  # false
+      $B5: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_2
       }
@@ -66,12 +69,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b6 {
-  %b6 = block {
-    %29:void = call %main_1
-    %30:vec4<f32> = load %x_GLF_color
-    %31:main_out = construct %30
-    ret %31
+%tint_symbol = @fragment func():main_out {
+  $B6: {
+    %32:void = call %main_1
+    %33:vec4<f32> = load %x_GLF_color
+    %34:main_out = construct %33
+    ret %34
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-inside-clamp/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-inside-clamp/0-opt.wgsl.expected.ir.msl
index 93bcf80..2e314ab 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-inside-clamp/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-inside-clamp/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:i32 @offset(0)
 }
 
@@ -8,13 +8,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, array<i32, 3>, read_write> = var
     %b:ptr<function, i32, read_write> = var
     %c:ptr<function, i32, read_write> = var
@@ -26,39 +26,49 @@
     store %9, 3i
     store %b, 0i
     %10:ptr<uniform, i32, read> = access %x_8, 0u
-    %x_38:i32 = load %10
-    %12:ptr<function, i32, read_write> = access %a, %x_38
-    %x_40:i32 = load %12
+    %11:i32 = load %10
+    %x_38:i32 = let %11
+    %13:ptr<function, i32, read_write> = access %a, %x_38
+    %14:i32 = load %13
+    %x_40:i32 = let %14
     store %c, %x_40
-    %x_41:i32 = load %c
-    %15:bool = gt %x_41, 1i
-    if %15 [t: %b3] {  # if_1
-      %b3 = block {  # true
+    %16:i32 = load %c
+    %x_41:i32 = let %16
+    %18:bool = gt %x_41, 1i
+    if %18 [t: $B3] {  # if_1
+      $B3: {  # true
         store %x_GLF_color, vec4<f32>(0.0f, 1.0f, 1.0f, 0.0f)
-        %x_45:i32 = load %b
-        %17:i32 = add %x_45, 1i
-        store %b, %17
+        %19:i32 = load %b
+        %x_45:i32 = let %19
+        %21:i32 = add %x_45, 1i
+        store %b, %21
         exit_if  # if_1
       }
     }
-    %x_47:i32 = load %b
-    %x_48:i32 = add %x_47, 1i
+    %22:i32 = load %b
+    %x_47:i32 = let %22
+    %24:i32 = add %x_47, 1i
+    %x_48:i32 = let %24
     store %b, %x_48
-    %x_50_save:i32 = clamp %x_48, 0i, 2i
-    %21:ptr<function, i32, read_write> = access %a, %x_50_save
-    %x_51:i32 = load %21
-    %23:ptr<function, i32, read_write> = access %a, %x_50_save
-    %24:i32 = add %x_51, 1i
-    store %23, %24
-    %25:ptr<function, i32, read_write> = access %a, 2i
-    %x_54:i32 = load %25
-    %27:bool = eq %x_54, 4i
-    if %27 [t: %b4, f: %b5] {  # if_2
-      %b4 = block {  # true
+    %26:i32 = max %x_48, 0i
+    %27:i32 = min %26, 2i
+    %x_50_save:i32 = let %27
+    %29:ptr<function, i32, read_write> = access %a, %x_50_save
+    %30:i32 = load %29
+    %x_51:i32 = let %30
+    %32:ptr<function, i32, read_write> = access %a, %x_50_save
+    %33:i32 = add %x_51, 1i
+    store %32, %33
+    %34:ptr<function, i32, read_write> = access %a, 2i
+    %35:i32 = load %34
+    %x_54:i32 = let %35
+    %37:bool = eq %x_54, 4i
+    if %37 [t: $B4, f: $B5] {  # if_2
+      $B4: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_2
       }
-      %b5 = block {  # false
+      $B5: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_2
       }
@@ -66,12 +76,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b6 {
-  %b6 = block {
-    %29:void = call %main_1
-    %30:vec4<f32> = load %x_GLF_color
-    %31:main_out = construct %30
-    ret %31
+%tint_symbol = @fragment func():main_out {
+  $B6: {
+    %39:void = call %main_1
+    %40:vec4<f32> = load %x_GLF_color
+    %41:main_out = construct %40
+    ret %41
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-int-loop-counter-mod-array/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-int-loop-counter-mod-array/0-opt.spvasm.expected.ir.msl
index eec9f46..b09e012 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-int-loop-counter-mod-array/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-int-loop-counter-mod-array/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,13 +12,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %indexable:ptr<function, array<i32, 9>, read_write> = var
@@ -28,79 +28,100 @@
     %9:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
     %10:i32 = load %9
     store %i, %10
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %11:i32 = load %i
         %12:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
         %13:i32 = load %12
         %14:bool = lt %11, %13
-        if %14 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %14 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_50:i32 = load %i
-        %16:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
-        %x_52:i32 = load %16
+        %15:i32 = load %i
+        %x_50:i32 = let %15
+        %17:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
+        %18:i32 = load %17
+        %x_52:i32 = let %18
         store %indexable, array<i32, 9>(1i, 2i, 3i, 4i, 5i, 6i, 7i, 8i, 9i)
-        %18:i32 = load %a
-        %19:i32 = mod %x_50, %x_52
-        %20:ptr<function, i32, read_write> = access %indexable, %19
-        %21:i32 = load %20
-        %22:i32 = add %18, %21
-        store %a, %22
-        continue %b4
+        %20:i32 = load %a
+        %21:i32 = let %20
+        %22:i32 = call %tint_mod_i32, %x_50, %x_52
+        %24:ptr<function, i32, read_write> = access %indexable, %22
+        %25:i32 = load %24
+        %26:i32 = add %21, %25
+        store %a, %26
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %23:i32 = load %i
-        %24:i32 = add %23, 1i
-        store %i, %24
-        next_iteration %b3
+      $B4: {  # continuing
+        %27:i32 = load %i
+        %28:i32 = add %27, 1i
+        store %i, %28
+        next_iteration  # -> $B3
       }
     }
-    %25:i32 = load %a
-    %26:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %27:i32 = load %26
-    %28:bool = eq %25, %27
-    if %28 [t: %b7, f: %b8] {  # if_2
-      %b7 = block {  # true
-        %29:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %30:i32 = load %29
-        %31:f32 = convert %30
-        %32:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-        %33:i32 = load %32
-        %34:f32 = convert %33
-        %35:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-        %36:i32 = load %35
-        %37:f32 = convert %36
-        %38:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %39:i32 = load %38
-        %40:f32 = convert %39
-        %41:vec4<f32> = construct %31, %34, %37, %40
-        store %x_GLF_color, %41
+    %29:i32 = load %a
+    %30:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %31:i32 = load %30
+    %32:bool = eq %29, %31
+    if %32 [t: $B7, f: $B8] {  # if_2
+      $B7: {  # true
+        %33:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %34:i32 = load %33
+        %35:f32 = convert %34
+        %36:f32 = let %35
+        %37:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+        %38:i32 = load %37
+        %39:f32 = convert %38
+        %40:f32 = let %39
+        %41:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+        %42:i32 = load %41
+        %43:f32 = convert %42
+        %44:f32 = let %43
+        %45:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %46:i32 = load %45
+        %47:f32 = convert %46
+        %48:vec4<f32> = construct %36, %40, %44, %47
+        store %x_GLF_color, %48
         exit_if  # if_2
       }
-      %b8 = block {  # false
-        %42:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-        %43:i32 = load %42
-        %44:f32 = convert %43
-        %45:vec4<f32> = construct %44
-        store %x_GLF_color, %45
+      $B8: {  # false
+        %49:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+        %50:i32 = load %49
+        %51:f32 = convert %50
+        %52:vec4<f32> = construct %51
+        store %x_GLF_color, %52
         exit_if  # if_2
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b9 {
-  %b9 = block {
-    %47:void = call %main_1
-    %48:vec4<f32> = load %x_GLF_color
-    %49:main_out = construct %48
-    ret %49
+%tint_symbol = @fragment func():main_out {
+  $B9: {
+    %54:void = call %main_1
+    %55:vec4<f32> = load %x_GLF_color
+    %56:main_out = construct %55
+    ret %56
+  }
+}
+%tint_mod_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B10: {
+    %59:bool = eq %rhs, 0i
+    %60:bool = eq %lhs, -2147483648i
+    %61:bool = eq %rhs, -1i
+    %62:bool = and %60, %61
+    %63:bool = or %59, %62
+    %64:i32 = select %rhs, 1i, %63
+    %65:i32 = let %64
+    %66:i32 = div %lhs, %65
+    %67:i32 = mul %66, %65
+    %68:i32 = sub %lhs, %67
+    ret %68
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-int-loop-counter-mod-array/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-int-loop-counter-mod-array/0-opt.wgsl.expected.ir.msl
index caf67bd..1e54f10 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-int-loop-counter-mod-array/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-int-loop-counter-mod-array/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,95 +12,130 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %indexable:ptr<function, array<i32, 9>, read_write> = var
     %7:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_38:i32 = load %7
+    %8:i32 = load %7
+    %x_38:i32 = let %8
     store %a, %x_38
-    %9:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-    %x_40:i32 = load %9
+    %10:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+    %11:i32 = load %10
+    %x_40:i32 = let %11
     store %i, %x_40
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_45:i32 = load %i
-        %12:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_47:i32 = load %12
-        %14:bool = lt %x_45, %x_47
-        if %14 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %13:i32 = load %i
+        %x_45:i32 = let %13
+        %15:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %16:i32 = load %15
+        %x_47:i32 = let %16
+        %18:bool = lt %x_45, %x_47
+        if %18 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_50:i32 = load %i
-        %16:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
-        %x_52:i32 = load %16
+        %19:i32 = load %i
+        %x_50:i32 = let %19
+        %21:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
+        %22:i32 = load %21
+        %x_52:i32 = let %22
         store %indexable, array<i32, 9>(1i, 2i, 3i, 4i, 5i, 6i, 7i, 8i, 9i)
-        %18:i32 = mod %x_50, %x_52
-        %19:ptr<function, i32, read_write> = access %indexable, %18
-        %x_55:i32 = load %19
-        %x_56:i32 = load %a
-        %22:i32 = add %x_56, %x_55
-        store %a, %22
-        continue %b4
+        %24:i32 = call %tint_mod_i32, %x_50, %x_52
+        %26:ptr<function, i32, read_write> = access %indexable, %24
+        %27:i32 = load %26
+        %x_55:i32 = let %27
+        %29:i32 = load %a
+        %x_56:i32 = let %29
+        %31:i32 = add %x_56, %x_55
+        store %a, %31
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_58:i32 = load %i
-        %24:i32 = add %x_58, 1i
-        store %i, %24
-        next_iteration %b3
+      $B4: {  # continuing
+        %32:i32 = load %i
+        %x_58:i32 = let %32
+        %34:i32 = add %x_58, 1i
+        store %i, %34
+        next_iteration  # -> $B3
       }
     }
-    %x_60:i32 = load %a
-    %26:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_62:i32 = load %26
-    %28:bool = eq %x_60, %x_62
-    if %28 [t: %b7, f: %b8] {  # if_2
-      %b7 = block {  # true
-        %29:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %x_68:i32 = load %29
-        %31:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-        %x_71:i32 = load %31
-        %33:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-        %x_74:i32 = load %33
-        %35:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %x_77:i32 = load %35
-        %37:f32 = convert %x_68
-        %38:f32 = convert %x_71
-        %39:f32 = convert %x_74
-        %40:f32 = convert %x_77
-        %41:vec4<f32> = construct %37, %38, %39, %40
-        store %x_GLF_color, %41
+    %35:i32 = load %a
+    %x_60:i32 = let %35
+    %37:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %38:i32 = load %37
+    %x_62:i32 = let %38
+    %40:bool = eq %x_60, %x_62
+    if %40 [t: $B7, f: $B8] {  # if_2
+      $B7: {  # true
+        %41:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %42:i32 = load %41
+        %x_68:i32 = let %42
+        %44:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+        %45:i32 = load %44
+        %x_71:i32 = let %45
+        %47:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+        %48:i32 = load %47
+        %x_74:i32 = let %48
+        %50:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %51:i32 = load %50
+        %x_77:i32 = let %51
+        %53:f32 = convert %x_68
+        %54:f32 = let %53
+        %55:f32 = convert %x_71
+        %56:f32 = let %55
+        %57:f32 = convert %x_74
+        %58:f32 = let %57
+        %59:f32 = convert %x_77
+        %60:vec4<f32> = construct %54, %56, %58, %59
+        store %x_GLF_color, %60
         exit_if  # if_2
       }
-      %b8 = block {  # false
-        %42:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-        %x_81:i32 = load %42
-        %x_82:f32 = convert %x_81
-        %45:vec4<f32> = construct %x_82, %x_82, %x_82, %x_82
-        store %x_GLF_color, %45
+      $B8: {  # false
+        %61:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+        %62:i32 = load %61
+        %x_81:i32 = let %62
+        %64:f32 = convert %x_81
+        %x_82:f32 = let %64
+        %66:vec4<f32> = construct %x_82, %x_82, %x_82, %x_82
+        store %x_GLF_color, %66
         exit_if  # if_2
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b9 {
-  %b9 = block {
-    %47:void = call %main_1
-    %48:vec4<f32> = load %x_GLF_color
-    %49:main_out = construct %48
-    ret %49
+%tint_symbol = @fragment func():main_out {
+  $B9: {
+    %68:void = call %main_1
+    %69:vec4<f32> = load %x_GLF_color
+    %70:main_out = construct %69
+    ret %70
+  }
+}
+%tint_mod_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B10: {
+    %73:bool = eq %rhs, 0i
+    %74:bool = eq %lhs, -2147483648i
+    %75:bool = eq %rhs, -1i
+    %76:bool = and %74, %75
+    %77:bool = or %73, %76
+    %78:i32 = select %rhs, 1i, %77
+    %79:i32 = let %78
+    %80:i32 = div %lhs, %79
+    %81:i32 = mul %80, %79
+    %82:i32 = sub %lhs, %81
+    ret %82
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-multiple-integers/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-multiple-integers/0-opt.spvasm.expected.ir.msl
index 4207cce..8c7e5c8 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-multiple-integers/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-multiple-integers/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,13 +12,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %b:ptr<function, i32, read_write> = var
     %c:ptr<function, i32, read_write> = var
@@ -33,8 +33,8 @@
     %14:i32 = load %13
     store %b, %14
     store %c, 1i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %15:i32 = load %b
         %16:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
         %17:i32 = load %16
@@ -42,18 +42,18 @@
         %19:i32 = load %a
         %20:bool = lt %19, 10i
         %21:bool = and %18, %20
-        if %21 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %21 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
         %22:i32 = load %c
         %23:bool = gt %22, 5i
-        if %23 [t: %b7] {  # if_2
-          %b7 = block {  # true
+        if %23 [t: $B7] {  # if_2
+          $B7: {  # true
             exit_loop  # loop_1
           }
         }
@@ -66,104 +66,108 @@
         %28:i32 = load %b
         %29:i32 = add %28, 1i
         store %b, %29
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
-    loop [b: %b8, c: %b9] {  # loop_2
-      %b8 = block {  # body
+    loop [b: $B8, c: $B9] {  # loop_2
+      $B8: {  # body
         %30:i32 = load %a
         %31:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
         %32:i32 = load %31
         %33:bool = lt %30, %32
-        if %33 [t: %b10, f: %b11] {  # if_3
-          %b10 = block {  # true
+        if %33 [t: $B10, f: $B11] {  # if_3
+          $B10: {  # true
             exit_if  # if_3
           }
-          %b11 = block {  # false
+          $B11: {  # false
             exit_loop  # loop_2
           }
         }
-        continue %b9
+        continue  # -> $B9
       }
-      %b9 = block {  # continuing
+      $B9: {  # continuing
         %34:i32 = load %a
         %35:i32 = add %34, 1i
         store %a, %35
-        next_iteration %b8
+        next_iteration  # -> $B8
       }
     }
     %36:i32 = load %a
     %37:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
     %38:i32 = load %37
-    %x_70:bool = eq %36, %38
+    %39:bool = eq %36, %38
+    %x_70:bool = let %39
     store %x_77, %x_70
-    if %x_70 [t: %b12] {  # if_4
-      %b12 = block {  # true
-        %40:i32 = load %b
-        %41:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-        %42:i32 = load %41
-        %43:bool = eq %40, %42
-        store %x_76, %43
-        %44:bool = load %x_76
-        store %x_77, %44
+    if %x_70 [t: $B12] {  # if_4
+      $B12: {  # true
+        %41:i32 = load %b
+        %42:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+        %43:i32 = load %42
+        %44:bool = eq %41, %43
+        store %x_76, %44
+        %45:bool = load %x_76
+        store %x_77, %45
         exit_if  # if_4
       }
     }
-    %45:bool = load %x_77
-    store %x_84, %45
     %46:bool = load %x_77
-    if %46 [t: %b13] {  # if_5
-      %b13 = block {  # true
-        %47:i32 = load %c
-        %48:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-        %49:i32 = load %48
-        %50:bool = eq %47, %49
-        store %x_83, %50
-        %51:bool = load %x_83
-        store %x_84, %51
+    store %x_84, %46
+    %47:bool = load %x_77
+    if %47 [t: $B13] {  # if_5
+      $B13: {  # true
+        %48:i32 = load %c
+        %49:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+        %50:i32 = load %49
+        %51:bool = eq %48, %50
+        store %x_83, %51
+        %52:bool = load %x_83
+        store %x_84, %52
         exit_if  # if_5
       }
     }
-    %52:bool = load %x_84
-    if %52 [t: %b14, f: %b15] {  # if_6
-      %b14 = block {  # true
-        %53:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %54:i32 = load %53
-        %55:f32 = convert %54
-        %56:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %57:i32 = load %56
-        %58:f32 = convert %57
-        %59:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %60:i32 = load %59
-        %61:f32 = convert %60
-        %62:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %53:bool = load %x_84
+    if %53 [t: $B14, f: $B15] {  # if_6
+      $B14: {  # true
+        %54:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %55:i32 = load %54
+        %56:f32 = convert %55
+        %57:f32 = let %56
+        %58:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %59:i32 = load %58
+        %60:f32 = convert %59
+        %61:f32 = let %60
+        %62:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
         %63:i32 = load %62
         %64:f32 = convert %63
-        %65:vec4<f32> = construct %55, %58, %61, %64
-        store %x_GLF_color, %65
-        exit_if  # if_6
-      }
-      %b15 = block {  # false
-        %66:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %65:f32 = let %64
+        %66:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
         %67:i32 = load %66
         %68:f32 = convert %67
-        %69:vec4<f32> = construct %68
+        %69:vec4<f32> = construct %57, %61, %65, %68
         store %x_GLF_color, %69
         exit_if  # if_6
       }
+      $B15: {  # false
+        %70:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %71:i32 = load %70
+        %72:f32 = convert %71
+        %73:vec4<f32> = construct %72
+        store %x_GLF_color, %73
+        exit_if  # if_6
+      }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b16 {
-  %b16 = block {
-    %71:void = call %main_1
-    %72:vec4<f32> = load %x_GLF_color
-    %73:main_out = construct %72
-    ret %73
+%tint_symbol = @fragment func():main_out {
+  $B16: {
+    %75:void = call %main_1
+    %76:vec4<f32> = load %x_GLF_color
+    %77:main_out = construct %76
+    ret %77
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-multiple-integers/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-multiple-integers/0-opt.wgsl.expected.ir.msl
index 1b70c4d..2391ad1 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-multiple-integers/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-multiple-integers/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,13 +12,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %b:ptr<function, i32, read_write> = var
     %c:ptr<function, i32, read_write> = var
@@ -27,142 +27,172 @@
     %x_77_phi:ptr<function, bool, read_write> = var
     %x_84_phi:ptr<function, bool, read_write> = var
     %11:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_31:i32 = load %11
+    %12:i32 = load %11
+    %x_31:i32 = let %12
     store %a, %x_31
-    %13:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_33:i32 = load %13
+    %14:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %15:i32 = load %14
+    %x_33:i32 = let %15
     store %b, %x_33
     store %c, 1i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_38:i32 = load %b
-        %16:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
-        %x_40:i32 = load %16
-        %x_42:i32 = load %a
-        %19:bool = lt %x_38, %x_40
-        %20:bool = lt %x_42, 10i
-        %21:bool = and %19, %20
-        if %21 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %17:i32 = load %b
+        %x_38:i32 = let %17
+        %19:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
+        %20:i32 = load %19
+        %x_40:i32 = let %20
+        %22:i32 = load %a
+        %x_42:i32 = let %22
+        %24:bool = lt %x_38, %x_40
+        %25:bool = lt %x_42, 10i
+        %26:bool = and %24, %25
+        if %26 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_46:i32 = load %c
-        %23:bool = gt %x_46, 5i
-        if %23 [t: %b7] {  # if_2
-          %b7 = block {  # true
+        %27:i32 = load %c
+        %x_46:i32 = let %27
+        %29:bool = gt %x_46, 5i
+        if %29 [t: $B7] {  # if_2
+          $B7: {  # true
             exit_loop  # loop_1
           }
         }
-        %x_50:i32 = load %a
-        %25:i32 = add %x_50, 1i
-        store %a, %25
-        %x_52:i32 = load %c
-        %27:i32 = add %x_52, 1i
-        store %c, %27
-        %x_54:i32 = load %b
-        %29:i32 = add %x_54, 1i
-        store %b, %29
-        continue %b4
+        %30:i32 = load %a
+        %x_50:i32 = let %30
+        %32:i32 = add %x_50, 1i
+        store %a, %32
+        %33:i32 = load %c
+        %x_52:i32 = let %33
+        %35:i32 = add %x_52, 1i
+        store %c, %35
+        %36:i32 = load %b
+        %x_54:i32 = let %36
+        %38:i32 = add %x_54, 1i
+        store %b, %38
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
-    loop [b: %b8, c: %b9] {  # loop_2
-      %b8 = block {  # body
-        %x_60:i32 = load %a
-        %31:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_62:i32 = load %31
-        %33:bool = lt %x_60, %x_62
-        if %33 [t: %b10, f: %b11] {  # if_3
-          %b10 = block {  # true
+    loop [b: $B8, c: $B9] {  # loop_2
+      $B8: {  # body
+        %39:i32 = load %a
+        %x_60:i32 = let %39
+        %41:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %42:i32 = load %41
+        %x_62:i32 = let %42
+        %44:bool = lt %x_60, %x_62
+        if %44 [t: $B10, f: $B11] {  # if_3
+          $B10: {  # true
             exit_if  # if_3
           }
-          %b11 = block {  # false
+          $B11: {  # false
             exit_loop  # loop_2
           }
         }
-        continue %b9
+        continue  # -> $B9
       }
-      %b9 = block {  # continuing
-        %x_65:i32 = load %a
-        %35:i32 = add %x_65, 1i
-        store %a, %35
-        next_iteration %b8
+      $B9: {  # continuing
+        %45:i32 = load %a
+        %x_65:i32 = let %45
+        %47:i32 = add %x_65, 1i
+        store %a, %47
+        next_iteration  # -> $B8
       }
     }
-    %x_67:i32 = load %a
-    %37:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_69:i32 = load %37
-    %x_70:bool = eq %x_67, %x_69
+    %48:i32 = load %a
+    %x_67:i32 = let %48
+    %50:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %51:i32 = load %50
+    %x_69:i32 = let %51
+    %53:bool = eq %x_67, %x_69
+    %x_70:bool = let %53
     store %x_77_phi, %x_70
-    if %x_70 [t: %b12] {  # if_4
-      %b12 = block {  # true
-        %x_73:i32 = load %b
-        %41:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-        %x_75:i32 = load %41
-        %43:bool = eq %x_73, %x_75
-        store %x_76, %43
-        %44:bool = load %x_76
-        store %x_77_phi, %44
+    if %x_70 [t: $B12] {  # if_4
+      $B12: {  # true
+        %55:i32 = load %b
+        %x_73:i32 = let %55
+        %57:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+        %58:i32 = load %57
+        %x_75:i32 = let %58
+        %60:bool = eq %x_73, %x_75
+        store %x_76, %60
+        %61:bool = load %x_76
+        store %x_77_phi, %61
         exit_if  # if_4
       }
     }
-    %x_77:bool = load %x_77_phi
+    %62:bool = load %x_77_phi
+    %x_77:bool = let %62
     store %x_84_phi, %x_77
-    if %x_77 [t: %b13] {  # if_5
-      %b13 = block {  # true
-        %x_80:i32 = load %c
-        %47:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-        %x_82:i32 = load %47
-        %49:bool = eq %x_80, %x_82
-        store %x_83, %49
-        %50:bool = load %x_83
-        store %x_84_phi, %50
+    if %x_77 [t: $B13] {  # if_5
+      $B13: {  # true
+        %64:i32 = load %c
+        %x_80:i32 = let %64
+        %66:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+        %67:i32 = load %66
+        %x_82:i32 = let %67
+        %69:bool = eq %x_80, %x_82
+        store %x_83, %69
+        %70:bool = load %x_83
+        store %x_84_phi, %70
         exit_if  # if_5
       }
     }
-    %x_84:bool = load %x_84_phi
-    if %x_84 [t: %b14, f: %b15] {  # if_6
-      %b14 = block {  # true
-        %52:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %x_89:i32 = load %52
-        %54:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_92:i32 = load %54
-        %56:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_95:i32 = load %56
-        %58:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %x_98:i32 = load %58
-        %60:f32 = convert %x_89
-        %61:f32 = convert %x_92
-        %62:f32 = convert %x_95
-        %63:f32 = convert %x_98
-        %64:vec4<f32> = construct %60, %61, %62, %63
-        store %x_GLF_color, %64
+    %71:bool = load %x_84_phi
+    %x_84:bool = let %71
+    if %x_84 [t: $B14, f: $B15] {  # if_6
+      $B14: {  # true
+        %73:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %74:i32 = load %73
+        %x_89:i32 = let %74
+        %76:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %77:i32 = load %76
+        %x_92:i32 = let %77
+        %79:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %80:i32 = load %79
+        %x_95:i32 = let %80
+        %82:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %83:i32 = load %82
+        %x_98:i32 = let %83
+        %85:f32 = convert %x_89
+        %86:f32 = let %85
+        %87:f32 = convert %x_92
+        %88:f32 = let %87
+        %89:f32 = convert %x_95
+        %90:f32 = let %89
+        %91:f32 = convert %x_98
+        %92:vec4<f32> = construct %86, %88, %90, %91
+        store %x_GLF_color, %92
         exit_if  # if_6
       }
-      %b15 = block {  # false
-        %65:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_102:i32 = load %65
-        %x_103:f32 = convert %x_102
-        %68:vec4<f32> = construct %x_103, %x_103, %x_103, %x_103
-        store %x_GLF_color, %68
+      $B15: {  # false
+        %93:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %94:i32 = load %93
+        %x_102:i32 = let %94
+        %96:f32 = convert %x_102
+        %x_103:f32 = let %96
+        %98:vec4<f32> = construct %x_103, %x_103, %x_103, %x_103
+        store %x_GLF_color, %98
         exit_if  # if_6
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b16 {
-  %b16 = block {
-    %70:void = call %main_1
-    %71:vec4<f32> = load %x_GLF_color
-    %72:main_out = construct %71
-    ret %72
+%tint_symbol = @fragment func():main_out {
+  $B16: {
+    %100:void = call %main_1
+    %101:vec4<f32> = load %x_GLF_color
+    %102:main_out = construct %101
+    ret %102
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-vector-array-matrix-element/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-vector-array-matrix-element/0-opt.spvasm.expected.ir.msl
index d8484bf..c284e21 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-vector-array-matrix-element/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-vector-array-matrix-element/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,100 +20,111 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_9:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %m:ptr<function, mat3x3<f32>, read_write> = var
     %a:ptr<function, i32, read_write> = var
     %arr:ptr<function, array<vec3<f32>, 2>, read_write> = var
     %v:ptr<function, vec3<f32>, read_write> = var
     %9:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
     %10:i32 = load %9
-    %x_46:f32 = convert %10
-    %12:vec3<f32> = construct %x_46, 0.0f, 0.0f
-    %13:vec3<f32> = construct 0.0f, %x_46, 0.0f
-    %14:vec3<f32> = construct 0.0f, 0.0f, %x_46
-    %15:mat3x3<f32> = construct %12, %13, %14
-    store %m, %15
-    %16:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %17:i32 = load %16
-    store %a, %17
-    %x_53:i32 = load %a
-    %x_54:i32 = load %a
-    %20:ptr<function, vec3<f32>, read_write> = access %m, %x_53
-    %21:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
-    %22:f32 = load %21
-    store_vector_element %20, %x_54, %22
-    %23:ptr<function, vec3<f32>, read_write> = access %m, 1i
-    %24:vec3<f32> = load %23
-    %25:ptr<function, vec3<f32>, read_write> = access %m, 1i
-    %26:vec3<f32> = load %25
-    %27:array<vec3<f32>, 2> = construct %24, %26
-    store %arr, %27
-    %28:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
-    %29:f32 = load %28
-    %30:vec3<f32> = construct %29
-    store %v, %30
-    %31:vec3<f32> = load %v
-    %32:i32 = load %a
-    %33:ptr<function, vec3<f32>, read_write> = access %arr, %32
-    %34:vec3<f32> = load %33
-    %35:vec3<f32> = add %31, %34
+    %11:f32 = convert %10
+    %x_46:f32 = let %11
+    %13:vec3<f32> = construct %x_46, 0.0f, 0.0f
+    %14:vec3<f32> = let %13
+    %15:vec3<f32> = construct 0.0f, %x_46, 0.0f
+    %16:vec3<f32> = let %15
+    %17:vec3<f32> = construct 0.0f, 0.0f, %x_46
+    %18:mat3x3<f32> = construct %14, %16, %17
+    store %m, %18
+    %19:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %20:i32 = load %19
+    store %a, %20
+    %21:i32 = load %a
+    %x_53:i32 = let %21
+    %23:i32 = load %a
+    %x_54:i32 = let %23
+    %25:ptr<function, vec3<f32>, read_write> = access %m, %x_53
+    %26:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
+    %27:f32 = load %26
+    store_vector_element %25, %x_54, %27
+    %28:ptr<function, vec3<f32>, read_write> = access %m, 1i
+    %29:vec3<f32> = load %28
+    %30:ptr<function, vec3<f32>, read_write> = access %m, 1i
+    %31:vec3<f32> = load %30
+    %32:array<vec3<f32>, 2> = construct %29, %31
+    store %arr, %32
+    %33:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
+    %34:f32 = load %33
+    %35:vec3<f32> = construct %34
     store %v, %35
     %36:vec3<f32> = load %v
-    %37:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %38:i32 = load %37
-    %39:f32 = convert %38
-    %40:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %41:i32 = load %40
-    %42:f32 = convert %41
+    %37:i32 = load %a
+    %38:ptr<function, vec3<f32>, read_write> = access %arr, %37
+    %39:vec3<f32> = load %38
+    %40:vec3<f32> = add %36, %39
+    store %v, %40
+    %41:vec3<f32> = load %v
+    %42:vec3<f32> = let %41
     %43:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
     %44:i32 = load %43
     %45:f32 = convert %44
-    %46:vec3<f32> = construct %39, %42, %45
-    %47:vec3<bool> = eq %36, %46
-    %48:bool = all %47
-    if %48 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %49:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %50:i32 = load %49
-        %51:f32 = convert %50
-        %52:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-        %53:i32 = load %52
-        %54:f32 = convert %53
-        %55:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-        %56:i32 = load %55
-        %57:f32 = convert %56
-        %58:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %59:i32 = load %58
-        %60:f32 = convert %59
-        %61:vec4<f32> = construct %51, %54, %57, %60
-        store %x_GLF_color, %61
+    %46:f32 = let %45
+    %47:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %48:i32 = load %47
+    %49:f32 = convert %48
+    %50:f32 = let %49
+    %51:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %52:i32 = load %51
+    %53:f32 = convert %52
+    %54:vec3<f32> = construct %46, %50, %53
+    %55:vec3<bool> = eq %42, %54
+    %56:bool = all %55
+    if %56 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %57:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %58:i32 = load %57
+        %59:f32 = convert %58
+        %60:f32 = let %59
+        %61:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+        %62:i32 = load %61
+        %63:f32 = convert %62
+        %64:f32 = let %63
+        %65:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+        %66:i32 = load %65
+        %67:f32 = convert %66
+        %68:f32 = let %67
+        %69:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %70:i32 = load %69
+        %71:f32 = convert %70
+        %72:vec4<f32> = construct %60, %64, %68, %71
+        store %x_GLF_color, %72
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %62:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-        %63:i32 = load %62
-        %64:f32 = convert %63
-        %65:vec4<f32> = construct %64
-        store %x_GLF_color, %65
+      $B4: {  # false
+        %73:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+        %74:i32 = load %73
+        %75:f32 = convert %74
+        %76:vec4<f32> = construct %75
+        store %x_GLF_color, %76
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %67:void = call %main_1
-    %68:vec4<f32> = load %x_GLF_color
-    %69:main_out = construct %68
-    ret %69
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %78:void = call %main_1
+    %79:vec4<f32> = load %x_GLF_color
+    %80:main_out = construct %79
+    ret %80
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-vector-array-matrix-element/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-vector-array-matrix-element/0-opt.wgsl.expected.ir.msl
index bd5aae5..69044dc 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-vector-array-matrix-element/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-vector-array-matrix-element/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,100 +20,129 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_9:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %m:ptr<function, mat3x3<f32>, read_write> = var
     %a:ptr<function, i32, read_write> = var
     %arr:ptr<function, array<vec3<f32>, 2>, read_write> = var
     %v:ptr<function, vec3<f32>, read_write> = var
     %9:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_45:i32 = load %9
-    %x_46:f32 = convert %x_45
-    %12:vec3<f32> = construct %x_46, 0.0f, 0.0f
-    %13:vec3<f32> = construct 0.0f, %x_46, 0.0f
-    %14:vec3<f32> = construct 0.0f, 0.0f, %x_46
-    %15:mat3x3<f32> = construct %12, %13, %14
-    store %m, %15
-    %16:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_52:i32 = load %16
+    %10:i32 = load %9
+    %x_45:i32 = let %10
+    %12:f32 = convert %x_45
+    %x_46:f32 = let %12
+    %14:vec3<f32> = construct %x_46, 0.0f, 0.0f
+    %15:vec3<f32> = let %14
+    %16:vec3<f32> = construct 0.0f, %x_46, 0.0f
+    %17:vec3<f32> = let %16
+    %18:vec3<f32> = construct 0.0f, 0.0f, %x_46
+    %19:mat3x3<f32> = construct %15, %17, %18
+    store %m, %19
+    %20:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %21:i32 = load %20
+    %x_52:i32 = let %21
     store %a, %x_52
-    %x_53:i32 = load %a
-    %x_54:i32 = load %a
-    %20:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
-    %x_56:f32 = load %20
-    %22:ptr<function, vec3<f32>, read_write> = access %m, %x_53
-    store_vector_element %22, %x_54, %x_56
-    %23:ptr<function, vec3<f32>, read_write> = access %m, 1i
-    %x_59:vec3<f32> = load %23
-    %25:ptr<function, vec3<f32>, read_write> = access %m, 1i
-    %x_61:vec3<f32> = load %25
-    %27:array<vec3<f32>, 2> = construct %x_59, %x_61
-    store %arr, %27
-    %28:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
-    %x_64:f32 = load %28
-    %30:vec3<f32> = construct %x_64, %x_64, %x_64
-    store %v, %30
-    %x_66:i32 = load %a
-    %32:ptr<function, vec3<f32>, read_write> = access %arr, %x_66
-    %x_68:vec3<f32> = load %32
-    %x_69:vec3<f32> = load %v
-    %35:vec3<f32> = add %x_69, %x_68
-    store %v, %35
-    %x_71:vec3<f32> = load %v
-    %37:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_73:i32 = load %37
-    %39:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_76:i32 = load %39
-    %41:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_79:i32 = load %41
-    %43:f32 = convert %x_73
-    %44:f32 = convert %x_76
-    %45:f32 = convert %x_79
-    %46:vec3<f32> = construct %43, %44, %45
-    %47:vec3<bool> = eq %x_71, %46
-    %48:bool = all %47
-    if %48 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %49:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_88:i32 = load %49
-        %51:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-        %x_91:i32 = load %51
-        %53:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-        %x_94:i32 = load %53
-        %55:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_97:i32 = load %55
-        %57:f32 = convert %x_88
-        %58:f32 = convert %x_91
-        %59:f32 = convert %x_94
-        %60:f32 = convert %x_97
-        %61:vec4<f32> = construct %57, %58, %59, %60
-        store %x_GLF_color, %61
+    %23:i32 = load %a
+    %x_53:i32 = let %23
+    %25:i32 = load %a
+    %x_54:i32 = let %25
+    %27:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
+    %28:f32 = load %27
+    %x_56:f32 = let %28
+    %30:ptr<function, vec3<f32>, read_write> = access %m, %x_53
+    store_vector_element %30, %x_54, %x_56
+    %31:ptr<function, vec3<f32>, read_write> = access %m, 1i
+    %32:vec3<f32> = load %31
+    %x_59:vec3<f32> = let %32
+    %34:ptr<function, vec3<f32>, read_write> = access %m, 1i
+    %35:vec3<f32> = load %34
+    %x_61:vec3<f32> = let %35
+    %37:array<vec3<f32>, 2> = construct %x_59, %x_61
+    store %arr, %37
+    %38:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
+    %39:f32 = load %38
+    %x_64:f32 = let %39
+    %41:vec3<f32> = construct %x_64, %x_64, %x_64
+    store %v, %41
+    %42:i32 = load %a
+    %x_66:i32 = let %42
+    %44:ptr<function, vec3<f32>, read_write> = access %arr, %x_66
+    %45:vec3<f32> = load %44
+    %x_68:vec3<f32> = let %45
+    %47:vec3<f32> = load %v
+    %x_69:vec3<f32> = let %47
+    %49:vec3<f32> = add %x_69, %x_68
+    store %v, %49
+    %50:vec3<f32> = load %v
+    %x_71:vec3<f32> = let %50
+    %52:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %53:i32 = load %52
+    %x_73:i32 = let %53
+    %55:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %56:i32 = load %55
+    %x_76:i32 = let %56
+    %58:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %59:i32 = load %58
+    %x_79:i32 = let %59
+    %61:f32 = convert %x_73
+    %62:f32 = let %61
+    %63:f32 = convert %x_76
+    %64:f32 = let %63
+    %65:f32 = convert %x_79
+    %66:vec3<f32> = construct %62, %64, %65
+    %67:vec3<bool> = eq %x_71, %66
+    %68:bool = all %67
+    if %68 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %69:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %70:i32 = load %69
+        %x_88:i32 = let %70
+        %72:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+        %73:i32 = load %72
+        %x_91:i32 = let %73
+        %75:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+        %76:i32 = load %75
+        %x_94:i32 = let %76
+        %78:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %79:i32 = load %78
+        %x_97:i32 = let %79
+        %81:f32 = convert %x_88
+        %82:f32 = let %81
+        %83:f32 = convert %x_91
+        %84:f32 = let %83
+        %85:f32 = convert %x_94
+        %86:f32 = let %85
+        %87:f32 = convert %x_97
+        %88:vec4<f32> = construct %82, %84, %86, %87
+        store %x_GLF_color, %88
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %62:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-        %x_101:i32 = load %62
-        %x_102:f32 = convert %x_101
-        %65:vec4<f32> = construct %x_102, %x_102, %x_102, %x_102
-        store %x_GLF_color, %65
+      $B4: {  # false
+        %89:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+        %90:i32 = load %89
+        %x_101:i32 = let %90
+        %92:f32 = convert %x_101
+        %x_102:f32 = let %92
+        %94:vec4<f32> = construct %x_102, %x_102, %x_102, %x_102
+        store %x_GLF_color, %94
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %67:void = call %main_1
-    %68:vec4<f32> = load %x_GLF_color
-    %69:main_out = construct %68
-    ret %69
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %96:void = call %main_1
+    %97:vec4<f32> = load %x_GLF_color
+    %98:main_out = construct %97
+    ret %98
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-vector-component-with-matrix-copy/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-vector-component-with-matrix-copy/0-opt.spvasm.expected.ir.msl
index fe56ef2..00103d7 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-vector-component-with-matrix-copy/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-vector-component-with-matrix-copy/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,14 +20,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_9:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %v:ptr<function, vec4<f32>, read_write> = var
     %m:ptr<function, mat3x4<f32>, read_write> = var
@@ -40,95 +40,108 @@
     %13:vec4<f32> = construct %12
     store %v, %13
     %14:ptr<uniform, f32, read> = access %x_9, 0u, 3i, 0u
-    %x_49:f32 = load %14
-    %16:vec4<f32> = construct %x_49, 0.0f, 0.0f, 0.0f
-    %17:vec4<f32> = construct 0.0f, %x_49, 0.0f, 0.0f
-    %18:vec4<f32> = construct 0.0f, 0.0f, %x_49, 0.0f
-    %19:mat3x4<f32> = construct %16, %17, %18
-    store %m, %19
-    %x_54:i32 = load %a
-    %x_55:i32 = load %a
-    %22:ptr<function, vec4<f32>, read_write> = access %m, %x_54
-    %23:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
-    %24:f32 = load %23
-    store_vector_element %22, %x_55, %24
-    %x_59:i32 = load %a
-    %x_78:i32 = load %a
-    %x_79:i32 = load %a
-    %28:ptr<function, vec4<f32>, read_write> = access %m, 0u
-    %29:f32 = load_vector_element %28, 0u
-    %30:ptr<function, vec4<f32>, read_write> = access %m, 0u
-    %31:f32 = load_vector_element %30, 1u
-    %32:ptr<function, vec4<f32>, read_write> = access %m, 0u
-    %33:f32 = load_vector_element %32, 2u
-    %34:ptr<function, vec4<f32>, read_write> = access %m, 0u
-    %35:f32 = load_vector_element %34, 3u
-    %36:vec4<f32> = construct %29, %31, %33, %35
-    %37:ptr<function, vec4<f32>, read_write> = access %m, 1u
-    %38:f32 = load_vector_element %37, 0u
-    %39:ptr<function, vec4<f32>, read_write> = access %m, 1u
-    %40:f32 = load_vector_element %39, 1u
-    %41:ptr<function, vec4<f32>, read_write> = access %m, 1u
-    %42:f32 = load_vector_element %41, 2u
-    %43:ptr<function, vec4<f32>, read_write> = access %m, 1u
-    %44:f32 = load_vector_element %43, 3u
-    %45:vec4<f32> = construct %38, %40, %42, %44
-    %46:ptr<function, vec4<f32>, read_write> = access %m, 2u
+    %15:f32 = load %14
+    %x_49:f32 = let %15
+    %17:vec4<f32> = construct %x_49, 0.0f, 0.0f, 0.0f
+    %18:vec4<f32> = let %17
+    %19:vec4<f32> = construct 0.0f, %x_49, 0.0f, 0.0f
+    %20:vec4<f32> = let %19
+    %21:vec4<f32> = construct 0.0f, 0.0f, %x_49, 0.0f
+    %22:mat3x4<f32> = construct %18, %20, %21
+    store %m, %22
+    %23:i32 = load %a
+    %x_54:i32 = let %23
+    %25:i32 = load %a
+    %x_55:i32 = let %25
+    %27:ptr<function, vec4<f32>, read_write> = access %m, %x_54
+    %28:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
+    %29:f32 = load %28
+    store_vector_element %27, %x_55, %29
+    %30:i32 = load %a
+    %x_59:i32 = let %30
+    %32:i32 = load %a
+    %x_78:i32 = let %32
+    %34:i32 = load %a
+    %x_79:i32 = let %34
+    %36:ptr<function, vec4<f32>, read_write> = access %m, 0u
+    %37:f32 = load_vector_element %36, 0u
+    %38:ptr<function, vec4<f32>, read_write> = access %m, 0u
+    %39:f32 = load_vector_element %38, 1u
+    %40:ptr<function, vec4<f32>, read_write> = access %m, 0u
+    %41:f32 = load_vector_element %40, 2u
+    %42:ptr<function, vec4<f32>, read_write> = access %m, 0u
+    %43:f32 = load_vector_element %42, 3u
+    %44:vec4<f32> = construct %37, %39, %41, %43
+    %45:vec4<f32> = let %44
+    %46:ptr<function, vec4<f32>, read_write> = access %m, 1u
     %47:f32 = load_vector_element %46, 0u
-    %48:ptr<function, vec4<f32>, read_write> = access %m, 2u
+    %48:ptr<function, vec4<f32>, read_write> = access %m, 1u
     %49:f32 = load_vector_element %48, 1u
-    %50:ptr<function, vec4<f32>, read_write> = access %m, 2u
+    %50:ptr<function, vec4<f32>, read_write> = access %m, 1u
     %51:f32 = load_vector_element %50, 2u
-    %52:ptr<function, vec4<f32>, read_write> = access %m, 2u
+    %52:ptr<function, vec4<f32>, read_write> = access %m, 1u
     %53:f32 = load_vector_element %52, 3u
     %54:vec4<f32> = construct %47, %49, %51, %53
-    %55:mat4x4<f32> = construct %36, %45, %54, vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f)
-    store %indexable, %55
-    %56:f32 = load_vector_element %v, %x_59
-    %57:ptr<function, vec4<f32>, read_write> = access %indexable, %x_78
-    %58:f32 = load_vector_element %57, %x_79
-    %59:f32 = add %56, %58
-    store_vector_element %v, %x_59, %59
-    %60:f32 = load_vector_element %v, 1u
-    %61:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
-    %62:f32 = load %61
-    %63:bool = eq %60, %62
-    if %63 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %64:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %65:i32 = load %64
-        %66:f32 = convert %65
-        %67:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %68:i32 = load %67
-        %69:f32 = convert %68
-        %70:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %71:i32 = load %70
-        %72:f32 = convert %71
-        %73:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %74:i32 = load %73
-        %75:f32 = convert %74
-        %76:vec4<f32> = construct %66, %69, %72, %75
-        store %x_GLF_color, %76
+    %55:vec4<f32> = let %54
+    %56:ptr<function, vec4<f32>, read_write> = access %m, 2u
+    %57:f32 = load_vector_element %56, 0u
+    %58:ptr<function, vec4<f32>, read_write> = access %m, 2u
+    %59:f32 = load_vector_element %58, 1u
+    %60:ptr<function, vec4<f32>, read_write> = access %m, 2u
+    %61:f32 = load_vector_element %60, 2u
+    %62:ptr<function, vec4<f32>, read_write> = access %m, 2u
+    %63:f32 = load_vector_element %62, 3u
+    %64:vec4<f32> = construct %57, %59, %61, %63
+    %65:mat4x4<f32> = construct %45, %55, %64, vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f)
+    store %indexable, %65
+    %66:f32 = load_vector_element %v, %x_59
+    %67:ptr<function, vec4<f32>, read_write> = access %indexable, %x_78
+    %68:f32 = load_vector_element %67, %x_79
+    %69:f32 = add %66, %68
+    store_vector_element %v, %x_59, %69
+    %70:f32 = load_vector_element %v, 1u
+    %71:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
+    %72:f32 = load %71
+    %73:bool = eq %70, %72
+    if %73 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %74:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %75:i32 = load %74
+        %76:f32 = convert %75
+        %77:f32 = let %76
+        %78:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %79:i32 = load %78
+        %80:f32 = convert %79
+        %81:f32 = let %80
+        %82:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %83:i32 = load %82
+        %84:f32 = convert %83
+        %85:f32 = let %84
+        %86:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %87:i32 = load %86
+        %88:f32 = convert %87
+        %89:vec4<f32> = construct %77, %81, %85, %88
+        store %x_GLF_color, %89
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %77:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %78:i32 = load %77
-        %79:f32 = convert %78
-        %80:vec4<f32> = construct %79
-        store %x_GLF_color, %80
+      $B4: {  # false
+        %90:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %91:i32 = load %90
+        %92:f32 = convert %91
+        %93:vec4<f32> = construct %92
+        store %x_GLF_color, %93
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %82:void = call %main_1
-    %83:vec4<f32> = load %x_GLF_color
-    %84:main_out = construct %83
-    ret %84
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %95:void = call %main_1
+    %96:vec4<f32> = load %x_GLF_color
+    %97:main_out = construct %96
+    ret %97
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-vector-component-with-matrix-copy/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-vector-component-with-matrix-copy/0-opt.wgsl.expected.ir.msl
index f6b96e9..a2d3634 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-vector-component-with-matrix-copy/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-increment-vector-component-with-matrix-copy/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,104 +20,131 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_9:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %v:ptr<function, vec4<f32>, read_write> = var
     %m:ptr<function, mat3x4<f32>, read_write> = var
     %indexable:ptr<function, mat4x4<f32>, read_write> = var
     %9:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_44:i32 = load %9
+    %10:i32 = load %9
+    %x_44:i32 = let %10
     store %a, %x_44
-    %11:ptr<uniform, f32, read> = access %x_9, 0u, 2i, 0u
-    %x_46:f32 = load %11
-    %13:vec4<f32> = construct %x_46, %x_46, %x_46, %x_46
-    store %v, %13
-    %14:ptr<uniform, f32, read> = access %x_9, 0u, 3i, 0u
-    %x_49:f32 = load %14
-    %16:vec4<f32> = construct %x_49, 0.0f, 0.0f, 0.0f
-    %17:vec4<f32> = construct 0.0f, %x_49, 0.0f, 0.0f
-    %18:vec4<f32> = construct 0.0f, 0.0f, %x_49, 0.0f
-    %19:mat3x4<f32> = construct %16, %17, %18
-    store %m, %19
-    %x_54:i32 = load %a
-    %x_55:i32 = load %a
-    %22:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
-    %x_57:f32 = load %22
-    %24:ptr<function, vec4<f32>, read_write> = access %m, %x_54
-    store_vector_element %24, %x_55, %x_57
-    %x_59:i32 = load %a
-    %x_60:mat3x4<f32> = load %m
-    %x_78:i32 = load %a
-    %x_79:i32 = load %a
-    %29:f32 = access %x_60, 0u, 0u
-    %30:f32 = access %x_60, 0u, 1u
-    %31:f32 = access %x_60, 0u, 2u
-    %32:f32 = access %x_60, 0u, 3u
-    %33:vec4<f32> = construct %29, %30, %31, %32
-    %34:f32 = access %x_60, 1u, 0u
-    %35:f32 = access %x_60, 1u, 1u
-    %36:f32 = access %x_60, 1u, 2u
-    %37:f32 = access %x_60, 1u, 3u
-    %38:vec4<f32> = construct %34, %35, %36, %37
-    %39:f32 = access %x_60, 2u, 0u
-    %40:f32 = access %x_60, 2u, 1u
-    %41:f32 = access %x_60, 2u, 2u
-    %42:f32 = access %x_60, 2u, 3u
-    %43:vec4<f32> = construct %39, %40, %41, %42
-    %44:mat4x4<f32> = construct %33, %38, %43, vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f)
-    store %indexable, %44
-    %45:ptr<function, vec4<f32>, read_write> = access %indexable, %x_78
-    %x_81:f32 = load_vector_element %45, %x_79
-    %x_83:f32 = load_vector_element %v, %x_59
-    %48:f32 = add %x_83, %x_81
-    store_vector_element %v, %x_59, %48
-    %x_87:f32 = load_vector_element %v, 1u
-    %50:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
-    %x_89:f32 = load %50
-    %52:bool = eq %x_87, %x_89
-    if %52 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %53:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_95:i32 = load %53
-        %55:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_98:i32 = load %55
-        %57:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_101:i32 = load %57
-        %59:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_104:i32 = load %59
-        %61:f32 = convert %x_95
-        %62:f32 = convert %x_98
-        %63:f32 = convert %x_101
-        %64:f32 = convert %x_104
-        %65:vec4<f32> = construct %61, %62, %63, %64
-        store %x_GLF_color, %65
+    %12:ptr<uniform, f32, read> = access %x_9, 0u, 2i, 0u
+    %13:f32 = load %12
+    %x_46:f32 = let %13
+    %15:vec4<f32> = construct %x_46, %x_46, %x_46, %x_46
+    store %v, %15
+    %16:ptr<uniform, f32, read> = access %x_9, 0u, 3i, 0u
+    %17:f32 = load %16
+    %x_49:f32 = let %17
+    %19:vec4<f32> = construct %x_49, 0.0f, 0.0f, 0.0f
+    %20:vec4<f32> = let %19
+    %21:vec4<f32> = construct 0.0f, %x_49, 0.0f, 0.0f
+    %22:vec4<f32> = let %21
+    %23:vec4<f32> = construct 0.0f, 0.0f, %x_49, 0.0f
+    %24:mat3x4<f32> = construct %20, %22, %23
+    store %m, %24
+    %25:i32 = load %a
+    %x_54:i32 = let %25
+    %27:i32 = load %a
+    %x_55:i32 = let %27
+    %29:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
+    %30:f32 = load %29
+    %x_57:f32 = let %30
+    %32:ptr<function, vec4<f32>, read_write> = access %m, %x_54
+    store_vector_element %32, %x_55, %x_57
+    %33:i32 = load %a
+    %x_59:i32 = let %33
+    %35:mat3x4<f32> = load %m
+    %x_60:mat3x4<f32> = let %35
+    %37:i32 = load %a
+    %x_78:i32 = let %37
+    %39:i32 = load %a
+    %x_79:i32 = let %39
+    %41:f32 = access %x_60, 0u, 0u
+    %42:f32 = access %x_60, 0u, 1u
+    %43:f32 = access %x_60, 0u, 2u
+    %44:f32 = access %x_60, 0u, 3u
+    %45:vec4<f32> = construct %41, %42, %43, %44
+    %46:vec4<f32> = let %45
+    %47:f32 = access %x_60, 1u, 0u
+    %48:f32 = access %x_60, 1u, 1u
+    %49:f32 = access %x_60, 1u, 2u
+    %50:f32 = access %x_60, 1u, 3u
+    %51:vec4<f32> = construct %47, %48, %49, %50
+    %52:vec4<f32> = let %51
+    %53:f32 = access %x_60, 2u, 0u
+    %54:f32 = access %x_60, 2u, 1u
+    %55:f32 = access %x_60, 2u, 2u
+    %56:f32 = access %x_60, 2u, 3u
+    %57:vec4<f32> = construct %53, %54, %55, %56
+    %58:mat4x4<f32> = construct %46, %52, %57, vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f)
+    store %indexable, %58
+    %59:ptr<function, vec4<f32>, read_write> = access %indexable, %x_78
+    %60:f32 = load_vector_element %59, %x_79
+    %x_81:f32 = let %60
+    %62:f32 = load_vector_element %v, %x_59
+    %x_83:f32 = let %62
+    %64:f32 = add %x_83, %x_81
+    store_vector_element %v, %x_59, %64
+    %65:f32 = load_vector_element %v, 1u
+    %x_87:f32 = let %65
+    %67:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
+    %68:f32 = load %67
+    %x_89:f32 = let %68
+    %70:bool = eq %x_87, %x_89
+    if %70 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %71:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %72:i32 = load %71
+        %x_95:i32 = let %72
+        %74:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %75:i32 = load %74
+        %x_98:i32 = let %75
+        %77:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %78:i32 = load %77
+        %x_101:i32 = let %78
+        %80:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %81:i32 = load %80
+        %x_104:i32 = let %81
+        %83:f32 = convert %x_95
+        %84:f32 = let %83
+        %85:f32 = convert %x_98
+        %86:f32 = let %85
+        %87:f32 = convert %x_101
+        %88:f32 = let %87
+        %89:f32 = convert %x_104
+        %90:vec4<f32> = construct %84, %86, %88, %89
+        store %x_GLF_color, %90
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %66:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_108:i32 = load %66
-        %x_109:f32 = convert %x_108
-        %69:vec4<f32> = construct %x_109, %x_109, %x_109, %x_109
-        store %x_GLF_color, %69
+      $B4: {  # false
+        %91:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %92:i32 = load %91
+        %x_108:i32 = let %92
+        %94:f32 = convert %x_108
+        %x_109:f32 = let %94
+        %96:vec4<f32> = construct %x_109, %x_109, %x_109, %x_109
+        store %x_GLF_color, %96
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %71:void = call %main_1
-    %72:vec4<f32> = load %x_GLF_color
-    %73:main_out = construct %72
-    ret %73
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %98:void = call %main_1
+    %99:vec4<f32> = load %x_GLF_color
+    %100:main_out = construct %99
+    ret %100
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-inline-pass-empty-block/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-inline-pass-empty-block/0-opt.spvasm.expected.ir.msl
index efdd3b1..1b8d21e 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-inline-pass-empty-block/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-inline-pass-empty-block/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,68 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
+  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+}
+
+%func_ = func():vec4<f32> {
+  $B2: {
+    %x:ptr<function, f32, read_write> = var
+    store %x, 1.0f
+    %5:f32 = load_vector_element %gl_FragCoord, 0u
+    %6:bool = lt %5, 0.0f
+    if %6 [t: $B3] {  # if_1
+      $B3: {  # true
+        store %x, 0.5f
+        exit_if  # if_1
+      }
+    }
+    %7:f32 = load %x
+    %x_34:f32 = let %7
+    %9:vec4<f32> = construct %x_34, 0.0f, 0.0f, 1.0f
+    ret %9
+  }
+}
+%main_1 = func():void {
+  $B4: {
+    store %x_GLF_color, vec4<f32>(0.0f)
+    loop [b: $B5, c: $B6] {  # loop_1
+      $B5: {  # body
+        %11:vec4<f32> = call %func_
+        %x_26:vec4<f32> = let %11
+        store %x_GLF_color, %x_26
+        if false [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
+            exit_if  # if_2
+          }
+          $B8: {  # false
+            exit_loop  # loop_1
+          }
+        }
+        continue  # -> $B6
+      }
+      $B6: {  # continuing
+        next_iteration  # -> $B5
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B9: {
+    store %gl_FragCoord, %gl_FragCoord_param
+    %15:void = call %main_1
+    %16:vec4<f32> = load %x_GLF_color
+    %17:main_out = construct %16
+    ret %17
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-inline-pass-empty-block/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-inline-pass-empty-block/0-opt.wgsl.expected.ir.msl
index efdd3b1..e0d14f7 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-inline-pass-empty-block/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-inline-pass-empty-block/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,69 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
+  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+}
+
+%func_ = func():vec4<f32> {
+  $B2: {
+    %x:ptr<function, f32, read_write> = var
+    store %x, 1.0f
+    %5:f32 = load_vector_element %gl_FragCoord, 0u
+    %x_30:f32 = let %5
+    %7:bool = lt %x_30, 0.0f
+    if %7 [t: $B3] {  # if_1
+      $B3: {  # true
+        store %x, 0.5f
+        exit_if  # if_1
+      }
+    }
+    %8:f32 = load %x
+    %x_34:f32 = let %8
+    %10:vec4<f32> = construct %x_34, 0.0f, 0.0f, 1.0f
+    ret %10
+  }
+}
+%main_1 = func():void {
+  $B4: {
+    store %x_GLF_color, vec4<f32>(0.0f)
+    loop [b: $B5, c: $B6] {  # loop_1
+      $B5: {  # body
+        %12:vec4<f32> = call %func_
+        %x_26:vec4<f32> = let %12
+        store %x_GLF_color, %x_26
+        if false [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
+            exit_if  # if_2
+          }
+          $B8: {  # false
+            exit_loop  # loop_1
+          }
+        }
+        continue  # -> $B6
+      }
+      $B6: {  # continuing
+        next_iteration  # -> $B5
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B9: {
+    store %gl_FragCoord, %gl_FragCoord_param
+    %16:void = call %main_1
+    %17:vec4<f32> = load %x_GLF_color
+    %18:main_out = construct %17
+    ret %18
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-inline-pass-nested-loops/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-inline-pass-nested-loops/0-opt.spvasm.expected.ir.msl
index ec5f8fa..0871913 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-inline-pass-nested-loops/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-inline-pass-nested-loops/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   zero:i32 @offset(0)
 }
 
@@ -8,27 +8,27 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%returnRed_ = func():vec4<f32> -> %b2 {
-  %b2 = block {
+%returnRed_ = func():vec4<f32> {
+  $B2: {
     %x_33:ptr<function, bool, read_write> = var, false
     %x_34:ptr<function, vec4<f32>, read_write> = var
     %x_48:ptr<function, vec4<f32>, read_write> = var
     %x_51:ptr<function, vec4<f32>, read_write> = var
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3] {  # loop_1
+      $B3: {  # body
         %x_49:ptr<function, bool, read_write> = var
-        loop [b: %b5, c: %b6] {  # loop_2
-          %b5 = block {  # body
+        loop [b: $B4, c: $B5] {  # loop_2
+          $B4: {  # body
             %9:ptr<uniform, i32, read> = access %x_6, 0u
             %10:i32 = load %9
             %11:bool = eq %10, 1i
-            if %11 [t: %b7] {  # if_1
-              %b7 = block {  # true
+            if %11 [t: $B6] {  # if_1
+              $B6: {  # true
                 store %x_33, true
                 store %x_34, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
                 store %x_48, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
@@ -36,19 +36,19 @@
                 exit_loop  # loop_2
               }
             }
-            continue %b6
+            continue  # -> $B5
           }
-          %b6 = block {  # continuing
+          $B5: {  # continuing
             store %x_48, vec4<f32>(0.0f)
             store %x_49, false
-            break_if true %b5
+            break_if true  # -> [t: exit_loop loop_2, f: $B4]
           }
         }
         %12:vec4<f32> = load %x_48
         store %x_51, %12
         %13:bool = load %x_49
-        if %13 [t: %b8] {  # if_2
-          %b8 = block {  # true
+        if %13 [t: $B7] {  # if_2
+          $B7: {  # true
             exit_loop  # loop_1
           }
         }
@@ -57,43 +57,41 @@
         store %x_51, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_loop  # loop_1
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
-      }
     }
     %14:vec4<f32> = load %x_51
     ret %14
   }
 }
-%main_1 = func():void -> %b9 {
-  %b9 = block {
-    loop [b: %b10, c: %b11] {  # loop_3
-      %b10 = block {  # body
-        %x_30:vec4<f32> = call %returnRed_
+%main_1 = func():void {
+  $B8: {
+    loop [b: $B9, c: $B10] {  # loop_3
+      $B9: {  # body
+        %16:vec4<f32> = call %returnRed_
+        %x_30:vec4<f32> = let %16
         store %x_GLF_color, %x_30
-        if false [t: %b12, f: %b13] {  # if_3
-          %b12 = block {  # true
+        if false [t: $B11, f: $B12] {  # if_3
+          $B11: {  # true
             exit_if  # if_3
           }
-          %b13 = block {  # false
+          $B12: {  # false
             exit_loop  # loop_3
           }
         }
-        continue %b11
+        continue  # -> $B10
       }
-      %b11 = block {  # continuing
-        next_iteration %b10
+      $B10: {  # continuing
+        next_iteration  # -> $B9
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b14 {
-  %b14 = block {
-    %18:void = call %main_1
-    %19:vec4<f32> = load %x_GLF_color
-    %20:main_out = construct %19
-    ret %20
+%tint_symbol = @fragment func():main_out {
+  $B13: {
+    %19:void = call %main_1
+    %20:vec4<f32> = load %x_GLF_color
+    %21:main_out = construct %20
+    ret %21
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-inline-pass-nested-loops/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-inline-pass-nested-loops/0-opt.wgsl.expected.ir.msl
index e47ec85..4425789 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-inline-pass-nested-loops/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-inline-pass-nested-loops/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   zero:i32 @offset(0)
 }
 
@@ -8,31 +8,33 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%returnRed_ = func():vec4<f32> -> %b2 {
-  %b2 = block {
+%returnRed_ = func():vec4<f32> {
+  $B2: {
     %x_33:ptr<function, bool, read_write> = var, false
     %x_34:ptr<function, vec4<f32>, read_write> = var
     %x_48:ptr<function, vec4<f32>, read_write> = var
     %x_36_phi:ptr<function, bool, read_write> = var
     %x_51_phi:ptr<function, vec4<f32>, read_write> = var
     store %x_36_phi, false
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3] {  # loop_1
+      $B3: {  # body
         %x_48_phi:ptr<function, vec4<f32>, read_write> = var
         %x_49_phi:ptr<function, bool, read_write> = var
-        %x_36:bool = load %x_36_phi
-        loop [b: %b5, c: %b6] {  # loop_2
-          %b5 = block {  # body
-            %12:ptr<uniform, i32, read> = access %x_6, 0u
-            %x_44:i32 = load %12
-            %14:bool = eq %x_44, 1i
-            if %14 [t: %b7] {  # if_1
-              %b7 = block {  # true
+        %11:bool = load %x_36_phi
+        %x_36:bool = let %11
+        loop [b: $B4, c: $B5] {  # loop_2
+          $B4: {  # body
+            %13:ptr<uniform, i32, read> = access %x_6, 0u
+            %14:i32 = load %13
+            %x_44:i32 = let %14
+            %16:bool = eq %x_44, 1i
+            if %16 [t: $B6] {  # if_1
+              $B6: {  # true
                 store %x_33, true
                 store %x_34, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
                 store %x_48_phi, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
@@ -40,21 +42,22 @@
                 exit_loop  # loop_2
               }
             }
-            continue %b6
+            continue  # -> $B5
           }
-          %b6 = block {  # continuing
+          $B5: {  # continuing
             store %x_48_phi, vec4<f32>(0.0f)
             store %x_49_phi, false
-            break_if true %b5
+            break_if true  # -> [t: exit_loop loop_2, f: $B4]
           }
         }
-        %15:vec4<f32> = load %x_48_phi
-        store %x_48, %15
-        %x_49:bool = load %x_49_phi
-        %17:vec4<f32> = load %x_48
-        store %x_51_phi, %17
-        if %x_49 [t: %b8] {  # if_2
-          %b8 = block {  # true
+        %17:vec4<f32> = load %x_48_phi
+        store %x_48, %17
+        %18:bool = load %x_49_phi
+        %x_49:bool = let %18
+        %20:vec4<f32> = load %x_48
+        store %x_51_phi, %20
+        if %x_49 [t: $B7] {  # if_2
+          $B7: {  # true
             exit_loop  # loop_1
           }
         }
@@ -63,44 +66,42 @@
         store %x_51_phi, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_loop  # loop_1
       }
-      %b4 = block {  # continuing
-        store %x_36_phi, false
-        next_iteration %b3
-      }
     }
-    %x_51:vec4<f32> = load %x_51_phi
+    %21:vec4<f32> = load %x_51_phi
+    %x_51:vec4<f32> = let %21
     ret %x_51
   }
 }
-%main_1 = func():void -> %b9 {
-  %b9 = block {
-    loop [b: %b10, c: %b11] {  # loop_3
-      %b10 = block {  # body
-        %x_30:vec4<f32> = call %returnRed_
+%main_1 = func():void {
+  $B8: {
+    loop [b: $B9, c: $B10] {  # loop_3
+      $B9: {  # body
+        %24:vec4<f32> = call %returnRed_
+        %x_30:vec4<f32> = let %24
         store %x_GLF_color, %x_30
-        if false [t: %b12, f: %b13] {  # if_3
-          %b12 = block {  # true
+        if false [t: $B11, f: $B12] {  # if_3
+          $B11: {  # true
             exit_if  # if_3
           }
-          %b13 = block {  # false
+          $B12: {  # false
             exit_loop  # loop_3
           }
         }
-        continue %b11
+        continue  # -> $B10
       }
-      %b11 = block {  # continuing
-        next_iteration %b10
+      $B10: {  # continuing
+        next_iteration  # -> $B9
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b14 {
-  %b14 = block {
-    %22:void = call %main_1
-    %23:vec4<f32> = load %x_GLF_color
-    %24:main_out = construct %23
-    ret %24
+%tint_symbol = @fragment func():main_out {
+  $B13: {
+    %27:void = call %main_1
+    %28:vec4<f32> = load %x_GLF_color
+    %29:main_out = construct %28
+    ret %29
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-inline-pass-return-in-loop/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-inline-pass-return-in-loop/0-opt.spvasm.expected.ir.msl
index efdd3b1..b24dbf3 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-inline-pass-return-in-loop/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-inline-pass-return-in-loop/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,86 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+}
+
+%func_ = func():f32 {
+  $B2: {
+    %i:ptr<function, i32, read_write> = var
+    store %i, 0i
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %4:i32 = load %i
+        %5:bool = lt %4, 10i
+        if %5 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
+            exit_if  # if_1
+          }
+          $B6: {  # false
+            exit_loop  # loop_1
+          }
+        }
+        %6:i32 = load %i
+        %7:bool = gt %6, 5i
+        if %7 [t: $B7] {  # if_2
+          $B7: {  # true
+            %8:i32 = load %i
+            %9:i32 = add %8, 1i
+            store %i, %9
+            exit_if  # if_2
+          }
+        }
+        %10:i32 = load %i
+        %11:bool = gt %10, 8i
+        if %11 [t: $B8] {  # if_3
+          $B8: {  # true
+            ret 0.0f
+          }
+        }
+        continue  # -> $B4
+      }
+      $B4: {  # continuing
+        %12:i32 = load %i
+        %13:i32 = add %12, 1i
+        store %i, %13
+        next_iteration  # -> $B3
+      }
+    }
+    ret 1.0f
+  }
+}
+%main_1 = func():void {
+  $B9: {
+    if false [t: $B10, f: $B11] {  # if_4
+      $B10: {  # true
+        %15:f32 = call %func_
+        %x_28:f32 = let %15
+        %17:vec4<f32> = construct %x_28
+        store %x_GLF_color, %17
+        exit_if  # if_4
+      }
+      $B11: {  # false
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        exit_if  # if_4
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B12: {
+    %19:void = call %main_1
+    %20:vec4<f32> = load %x_GLF_color
+    %21:main_out = construct %20
+    ret %21
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-inline-pass-return-in-loop/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-inline-pass-return-in-loop/0-opt.wgsl.expected.ir.msl
index efdd3b1..6257abf 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-inline-pass-return-in-loop/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-inline-pass-return-in-loop/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,91 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+}
+
+%func_ = func():f32 {
+  $B2: {
+    %i:ptr<function, i32, read_write> = var
+    store %i, 0i
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %4:i32 = load %i
+        %x_35:i32 = let %4
+        %6:bool = lt %x_35, 10i
+        if %6 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
+            exit_if  # if_1
+          }
+          $B6: {  # false
+            exit_loop  # loop_1
+          }
+        }
+        %7:i32 = load %i
+        %x_38:i32 = let %7
+        %9:bool = gt %x_38, 5i
+        if %9 [t: $B7] {  # if_2
+          $B7: {  # true
+            %10:i32 = load %i
+            %x_42:i32 = let %10
+            %12:i32 = add %x_42, 1i
+            store %i, %12
+            exit_if  # if_2
+          }
+        }
+        %13:i32 = load %i
+        %x_44:i32 = let %13
+        %15:bool = gt %x_44, 8i
+        if %15 [t: $B8] {  # if_3
+          $B8: {  # true
+            ret 0.0f
+          }
+        }
+        continue  # -> $B4
+      }
+      $B4: {  # continuing
+        %16:i32 = load %i
+        %x_48:i32 = let %16
+        %18:i32 = add %x_48, 1i
+        store %i, %18
+        next_iteration  # -> $B3
+      }
+    }
+    ret 1.0f
+  }
+}
+%main_1 = func():void {
+  $B9: {
+    if false [t: $B10, f: $B11] {  # if_4
+      $B10: {  # true
+        %20:f32 = call %func_
+        %x_28:f32 = let %20
+        %22:vec4<f32> = construct %x_28, %x_28, %x_28, %x_28
+        store %x_GLF_color, %22
+        exit_if  # if_4
+      }
+      $B11: {  # false
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        exit_if  # if_4
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B12: {
+    %24:void = call %main_1
+    %25:vec4<f32> = load %x_GLF_color
+    %26:main_out = construct %25
+    ret %26
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-inline-pass-unreachable-func/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-inline-pass-unreachable-func/0-opt.spvasm.expected.ir.msl
index efdd3b1..c7ec7ce 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-inline-pass-unreachable-func/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-inline-pass-unreachable-func/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,69 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
+  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+}
+
+%func_ = func():f32 {
+  $B2: {
+    %x:ptr<function, f32, read_write> = var
+    store %x, 2.0f
+    %5:f32 = load_vector_element %gl_FragCoord, 0u
+    %6:bool = eq %5, 12.0f
+    if %6 [t: $B3] {  # if_1
+      $B3: {  # true
+        %7:f32 = load_vector_element %gl_FragCoord, 1u
+        %8:bool = eq %7, 13.0f
+        if %8 [t: $B4] {  # if_2
+          $B4: {  # true
+            %9:f32 = load %x
+            %10:f32 = add %9, 1.0f
+            store %x, %10
+            exit_if  # if_2
+          }
+        }
+        %11:f32 = load %x
+        %x_46:f32 = let %11
+        ret %x_46
+      }
+    }
+    ret 1.0f
+  }
+}
+%main_1 = func():void {
+  $B5: {
+    if false [t: $B6, f: $B7] {  # if_3
+      $B6: {  # true
+        %14:f32 = call %func_
+        %x_31:f32 = let %14
+        %16:vec4<f32> = construct %x_31
+        store %x_GLF_color, %16
+        exit_if  # if_3
+      }
+      $B7: {  # false
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        exit_if  # if_3
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B8: {
+    store %gl_FragCoord, %gl_FragCoord_param
+    %19:void = call %main_1
+    %20:vec4<f32> = load %x_GLF_color
+    %21:main_out = construct %20
+    ret %21
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-inline-pass-unreachable-func/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-inline-pass-unreachable-func/0-opt.wgsl.expected.ir.msl
index efdd3b1..1796b0a 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-inline-pass-unreachable-func/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-inline-pass-unreachable-func/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,72 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
+  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+}
+
+%func_ = func():f32 {
+  $B2: {
+    %x:ptr<function, f32, read_write> = var
+    store %x, 2.0f
+    %5:f32 = load_vector_element %gl_FragCoord, 0u
+    %x_35:f32 = let %5
+    %7:bool = eq %x_35, 12.0f
+    if %7 [t: $B3] {  # if_1
+      $B3: {  # true
+        %8:f32 = load_vector_element %gl_FragCoord, 1u
+        %x_40:f32 = let %8
+        %10:bool = eq %x_40, 13.0f
+        if %10 [t: $B4] {  # if_2
+          $B4: {  # true
+            %11:f32 = load %x
+            %x_44:f32 = let %11
+            %13:f32 = add %x_44, 1.0f
+            store %x, %13
+            exit_if  # if_2
+          }
+        }
+        %14:f32 = load %x
+        %x_46:f32 = let %14
+        ret %x_46
+      }
+    }
+    ret 1.0f
+  }
+}
+%main_1 = func():void {
+  $B5: {
+    if false [t: $B6, f: $B7] {  # if_3
+      $B6: {  # true
+        %17:f32 = call %func_
+        %x_31:f32 = let %17
+        %19:vec4<f32> = construct %x_31, %x_31, %x_31, %x_31
+        store %x_GLF_color, %19
+        exit_if  # if_3
+      }
+      $B7: {  # false
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        exit_if  # if_3
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B8: {
+    store %gl_FragCoord, %gl_FragCoord_param
+    %22:void = call %main_1
+    %23:vec4<f32> = load %x_GLF_color
+    %24:main_out = construct %23
+    ret %24
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-increase-negative/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-increase-negative/0-opt.spvasm.expected.ir.msl
index 6587b3a..765d6e6 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-increase-negative/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-increase-negative/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,116 +20,122 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_7:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_11:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %i:ptr<function, i32, read_write> = var
     %arr:ptr<function, array<i32, 2>, read_write> = var
     %a:ptr<function, i32, read_write> = var
     %9:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
     %10:i32 = load %9
     store %i, %10
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %11:i32 = load %i
         %12:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
         %13:i32 = load %12
         %14:bool = lt %11, %13
-        if %14 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %14 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_50:i32 = load %i
-        %16:ptr<function, i32, read_write> = access %arr, %x_50
-        %17:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %18:i32 = load %17
-        store %16, %18
-        continue %b4
+        %15:i32 = load %i
+        %x_50:i32 = let %15
+        %17:ptr<function, i32, read_write> = access %arr, %x_50
+        %18:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %19:i32 = load %18
+        store %17, %19
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %19:i32 = load %i
-        %20:i32 = add %19, 1i
-        store %i, %20
-        next_iteration %b3
+      $B4: {  # continuing
+        %20:i32 = load %i
+        %21:i32 = add %20, 1i
+        store %i, %21
+        next_iteration  # -> $B3
       }
     }
     store %a, -1i
-    %21:f32 = load_vector_element %gl_FragCoord, 1u
-    %22:ptr<uniform, f32, read> = access %x_11, 0u, 0i, 0u
-    %23:f32 = load %22
-    %24:bool = lt %21, %23
-    %25:bool = eq %24, false
-    if %25 [t: %b7] {  # if_2
-      %b7 = block {  # true
-        %26:i32 = load %a
-        %x_65:i32 = add %26, 1i
+    %22:f32 = load_vector_element %gl_FragCoord, 1u
+    %23:ptr<uniform, f32, read> = access %x_11, 0u, 0i, 0u
+    %24:f32 = load %23
+    %25:bool = lt %22, %24
+    %26:bool = eq %25, false
+    if %26 [t: $B7] {  # if_2
+      $B7: {  # true
+        %27:i32 = load %a
+        %28:i32 = add %27, 1i
+        %x_65:i32 = let %28
         store %a, %x_65
-        %28:ptr<function, i32, read_write> = access %arr, %x_65
-        %29:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %30:i32 = load %29
-        store %28, %30
+        %30:ptr<function, i32, read_write> = access %arr, %x_65
+        %31:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %32:i32 = load %31
+        store %30, %32
         exit_if  # if_2
       }
     }
-    %31:i32 = load %a
-    %x_70:i32 = add %31, 1i
+    %33:i32 = load %a
+    %34:i32 = add %33, 1i
+    %x_70:i32 = let %34
     store %a, %x_70
-    %33:ptr<function, i32, read_write> = access %arr, %x_70
-    %34:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
-    %35:i32 = load %34
-    store %33, %35
-    %36:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-    %37:i32 = load %36
-    %38:ptr<function, i32, read_write> = access %arr, %37
-    %39:i32 = load %38
-    %40:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-    %41:i32 = load %40
-    %42:bool = eq %39, %41
-    if %42 [t: %b8, f: %b9] {  # if_3
-      %b8 = block {  # true
-        %43:i32 = load %a
-        %44:f32 = convert %43
-        %45:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %46:i32 = load %45
+    %36:ptr<function, i32, read_write> = access %arr, %x_70
+    %37:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
+    %38:i32 = load %37
+    store %36, %38
+    %39:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+    %40:i32 = load %39
+    %41:ptr<function, i32, read_write> = access %arr, %40
+    %42:i32 = load %41
+    %43:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+    %44:i32 = load %43
+    %45:bool = eq %42, %44
+    if %45 [t: $B8, f: $B9] {  # if_3
+      $B8: {  # true
+        %46:i32 = load %a
         %47:f32 = convert %46
-        %48:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %49:i32 = load %48
-        %50:f32 = convert %49
-        %51:i32 = load %a
-        %52:f32 = convert %51
-        %53:vec4<f32> = construct %44, %47, %50, %52
-        store %x_GLF_color, %53
+        %48:f32 = let %47
+        %49:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %50:i32 = load %49
+        %51:f32 = convert %50
+        %52:f32 = let %51
+        %53:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %54:i32 = load %53
+        %55:f32 = convert %54
+        %56:f32 = let %55
+        %57:i32 = load %a
+        %58:f32 = convert %57
+        %59:vec4<f32> = construct %48, %52, %56, %58
+        store %x_GLF_color, %59
         exit_if  # if_3
       }
-      %b9 = block {  # false
-        %54:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %55:i32 = load %54
-        %56:f32 = convert %55
-        %57:vec4<f32> = construct %56
-        store %x_GLF_color, %57
+      $B9: {  # false
+        %60:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %61:i32 = load %60
+        %62:f32 = convert %61
+        %63:vec4<f32> = construct %62
+        store %x_GLF_color, %63
         exit_if  # if_3
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b10 {
-  %b10 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B10: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %60:void = call %main_1
-    %61:vec4<f32> = load %x_GLF_color
-    %62:main_out = construct %61
-    ret %62
+    %66:void = call %main_1
+    %67:vec4<f32> = load %x_GLF_color
+    %68:main_out = construct %67
+    ret %68
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-increase-negative/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-increase-negative/0-opt.wgsl.expected.ir.msl
index f19d5bb..6865f9d 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-increase-negative/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-increase-negative/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,116 +20,142 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_7:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_11:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %i:ptr<function, i32, read_write> = var
     %arr:ptr<function, array<i32, 2>, read_write> = var
     %a:ptr<function, i32, read_write> = var
     %9:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-    %x_40:i32 = load %9
+    %10:i32 = load %9
+    %x_40:i32 = let %10
     store %i, %x_40
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_45:i32 = load %i
-        %12:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
-        %x_47:i32 = load %12
-        %14:bool = lt %x_45, %x_47
-        if %14 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %12:i32 = load %i
+        %x_45:i32 = let %12
+        %14:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
+        %15:i32 = load %14
+        %x_47:i32 = let %15
+        %17:bool = lt %x_45, %x_47
+        if %17 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_50:i32 = load %i
-        %16:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %x_52:i32 = load %16
-        %18:ptr<function, i32, read_write> = access %arr, %x_50
-        store %18, %x_52
-        continue %b4
+        %18:i32 = load %i
+        %x_50:i32 = let %18
+        %20:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %21:i32 = load %20
+        %x_52:i32 = let %21
+        %23:ptr<function, i32, read_write> = access %arr, %x_50
+        store %23, %x_52
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_54:i32 = load %i
-        %20:i32 = add %x_54, 1i
-        store %i, %20
-        next_iteration %b3
+      $B4: {  # continuing
+        %24:i32 = load %i
+        %x_54:i32 = let %24
+        %26:i32 = add %x_54, 1i
+        store %i, %26
+        next_iteration  # -> $B3
       }
     }
     store %a, -1i
-    %x_57:f32 = load_vector_element %gl_FragCoord, 1u
-    %22:ptr<uniform, f32, read> = access %x_11, 0u, 0i, 0u
-    %x_59:f32 = load %22
-    %24:bool = lt %x_57, %x_59
-    %25:bool = eq %24, false
-    if %25 [t: %b7] {  # if_2
-      %b7 = block {  # true
-        %x_64:i32 = load %a
-        %x_65:i32 = add %x_64, 1i
+    %27:f32 = load_vector_element %gl_FragCoord, 1u
+    %x_57:f32 = let %27
+    %29:ptr<uniform, f32, read> = access %x_11, 0u, 0i, 0u
+    %30:f32 = load %29
+    %x_59:f32 = let %30
+    %32:bool = lt %x_57, %x_59
+    %33:bool = eq %32, false
+    if %33 [t: $B7] {  # if_2
+      $B7: {  # true
+        %34:i32 = load %a
+        %x_64:i32 = let %34
+        %36:i32 = add %x_64, 1i
+        %x_65:i32 = let %36
         store %a, %x_65
-        %28:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %x_67:i32 = load %28
-        %30:ptr<function, i32, read_write> = access %arr, %x_65
-        store %30, %x_67
+        %38:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %39:i32 = load %38
+        %x_67:i32 = let %39
+        %41:ptr<function, i32, read_write> = access %arr, %x_65
+        store %41, %x_67
         exit_if  # if_2
       }
     }
-    %x_69:i32 = load %a
-    %x_70:i32 = add %x_69, 1i
+    %42:i32 = load %a
+    %x_69:i32 = let %42
+    %44:i32 = add %x_69, 1i
+    %x_70:i32 = let %44
     store %a, %x_70
-    %33:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
-    %x_72:i32 = load %33
-    %35:ptr<function, i32, read_write> = access %arr, %x_70
-    store %35, %x_72
-    %36:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-    %x_75:i32 = load %36
-    %38:ptr<function, i32, read_write> = access %arr, %x_75
-    %x_77:i32 = load %38
-    %40:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-    %x_79:i32 = load %40
-    %42:bool = eq %x_77, %x_79
-    if %42 [t: %b8, f: %b9] {  # if_3
-      %b8 = block {  # true
-        %x_84:i32 = load %a
-        %44:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %x_87:i32 = load %44
-        %46:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %x_90:i32 = load %46
-        %x_92:i32 = load %a
-        %49:f32 = convert %x_84
-        %50:f32 = convert %x_87
-        %51:f32 = convert %x_90
-        %52:f32 = convert %x_92
-        %53:vec4<f32> = construct %49, %50, %51, %52
-        store %x_GLF_color, %53
+    %46:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
+    %47:i32 = load %46
+    %x_72:i32 = let %47
+    %49:ptr<function, i32, read_write> = access %arr, %x_70
+    store %49, %x_72
+    %50:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+    %51:i32 = load %50
+    %x_75:i32 = let %51
+    %53:ptr<function, i32, read_write> = access %arr, %x_75
+    %54:i32 = load %53
+    %x_77:i32 = let %54
+    %56:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+    %57:i32 = load %56
+    %x_79:i32 = let %57
+    %59:bool = eq %x_77, %x_79
+    if %59 [t: $B8, f: $B9] {  # if_3
+      $B8: {  # true
+        %60:i32 = load %a
+        %x_84:i32 = let %60
+        %62:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %63:i32 = load %62
+        %x_87:i32 = let %63
+        %65:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %66:i32 = load %65
+        %x_90:i32 = let %66
+        %68:i32 = load %a
+        %x_92:i32 = let %68
+        %70:f32 = convert %x_84
+        %71:f32 = let %70
+        %72:f32 = convert %x_87
+        %73:f32 = let %72
+        %74:f32 = convert %x_90
+        %75:f32 = let %74
+        %76:f32 = convert %x_92
+        %77:vec4<f32> = construct %71, %73, %75, %76
+        store %x_GLF_color, %77
         exit_if  # if_3
       }
-      %b9 = block {  # false
-        %54:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %x_96:i32 = load %54
-        %x_97:f32 = convert %x_96
-        %57:vec4<f32> = construct %x_97, %x_97, %x_97, %x_97
-        store %x_GLF_color, %57
+      $B9: {  # false
+        %78:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %79:i32 = load %78
+        %x_96:i32 = let %79
+        %81:f32 = convert %x_96
+        %x_97:f32 = let %81
+        %83:vec4<f32> = construct %x_97, %x_97, %x_97, %x_97
+        store %x_GLF_color, %83
         exit_if  # if_3
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b10 {
-  %b10 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B10: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %60:void = call %main_1
-    %61:vec4<f32> = load %x_GLF_color
-    %62:main_out = construct %61
-    ret %62
+    %86:void = call %main_1
+    %87:vec4<f32> = load %x_GLF_color
+    %88:main_out = construct %87
+    ret %88
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-ldexp/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-ldexp/0-opt.spvasm.expected.ir.msl
index ea06141..f21cc9a 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-ldexp/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-ldexp/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,14 +20,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %b:ptr<function, f32, read_write> = var
@@ -40,17 +40,17 @@
     %12:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
     %13:i32 = load %12
     store %i, %13
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %14:i32 = load %i
         %15:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
         %16:i32 = load %15
         %17:bool = lt %14, %16
-        if %17 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %17 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
@@ -60,53 +60,56 @@
         %21:i32 = negation %20
         %22:f32 = ldexp %19, %21
         store %b, %22
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
+      $B4: {  # continuing
         %23:i32 = load %i
         %24:i32 = add %23, 1i
         store %i, %24
-        next_iteration %b3
+        next_iteration  # -> $B3
       }
     }
     %25:f32 = load %b
     %26:ptr<uniform, f32, read> = access %x_10, 0u, 0i, 0u
     %27:f32 = load %26
     %28:bool = eq %25, %27
-    if %28 [t: %b7, f: %b8] {  # if_2
-      %b7 = block {  # true
+    if %28 [t: $B7, f: $B8] {  # if_2
+      $B7: {  # true
         %29:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
         %30:i32 = load %29
         %31:f32 = convert %30
-        %32:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %33:i32 = load %32
-        %34:f32 = convert %33
-        %35:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %36:i32 = load %35
-        %37:f32 = convert %36
-        %38:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %39:i32 = load %38
-        %40:f32 = convert %39
-        %41:vec4<f32> = construct %31, %34, %37, %40
-        store %x_GLF_color, %41
+        %32:f32 = let %31
+        %33:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %34:i32 = load %33
+        %35:f32 = convert %34
+        %36:f32 = let %35
+        %37:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %38:i32 = load %37
+        %39:f32 = convert %38
+        %40:f32 = let %39
+        %41:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %42:i32 = load %41
+        %43:f32 = convert %42
+        %44:vec4<f32> = construct %32, %36, %40, %43
+        store %x_GLF_color, %44
         exit_if  # if_2
       }
-      %b8 = block {  # false
-        %42:f32 = load %b
-        %43:vec4<f32> = construct %42
-        store %x_GLF_color, %43
+      $B8: {  # false
+        %45:f32 = load %b
+        %46:vec4<f32> = construct %45
+        store %x_GLF_color, %46
         exit_if  # if_2
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b9 {
-  %b9 = block {
-    %45:void = call %main_1
-    %46:vec4<f32> = load %x_GLF_color
-    %47:main_out = construct %46
-    ret %47
+%tint_symbol = @fragment func():main_out {
+  $B9: {
+    %48:void = call %main_1
+    %49:vec4<f32> = load %x_GLF_color
+    %50:main_out = construct %49
+    ret %50
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-ldexp/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-ldexp/0-opt.wgsl.expected.ir.msl
index 1acb09f..4ab269b 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-ldexp/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-ldexp/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,93 +20,111 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %b:ptr<function, f32, read_write> = var
     %8:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_34:i32 = load %8
+    %9:i32 = load %8
+    %x_34:i32 = let %9
     store %a, %x_34
-    %x_35:i32 = load %a
-    %11:i32 = add %x_35, 1i
-    store %a, %11
-    %12:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_38:i32 = load %12
+    %11:i32 = load %a
+    %x_35:i32 = let %11
+    %13:i32 = add %x_35, 1i
+    store %a, %13
+    %14:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %15:i32 = load %14
+    %x_38:i32 = let %15
     store %i, %x_38
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_43:i32 = load %i
-        %15:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_45:i32 = load %15
-        %17:bool = lt %x_43, %x_45
-        if %17 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %17:i32 = load %i
+        %x_43:i32 = let %17
+        %19:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %20:i32 = load %19
+        %x_45:i32 = let %20
+        %22:bool = lt %x_43, %x_45
+        if %22 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_48:i32 = load %i
-        %x_50:i32 = load %a
-        %20:f32 = convert %x_48
-        %21:i32 = negation %x_50
-        %22:f32 = ldexp %20, %21
-        store %b, %22
-        continue %b4
+        %23:i32 = load %i
+        %x_48:i32 = let %23
+        %25:i32 = load %a
+        %x_50:i32 = let %25
+        %27:f32 = convert %x_48
+        %28:i32 = negation %x_50
+        %29:f32 = ldexp %27, %28
+        store %b, %29
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_53:i32 = load %i
-        %24:i32 = add %x_53, 1i
-        store %i, %24
-        next_iteration %b3
+      $B4: {  # continuing
+        %30:i32 = load %i
+        %x_53:i32 = let %30
+        %32:i32 = add %x_53, 1i
+        store %i, %32
+        next_iteration  # -> $B3
       }
     }
-    %x_55:f32 = load %b
-    %26:ptr<uniform, f32, read> = access %x_10, 0u, 0i, 0u
-    %x_57:f32 = load %26
-    %28:bool = eq %x_55, %x_57
-    if %28 [t: %b7, f: %b8] {  # if_2
-      %b7 = block {  # true
-        %29:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %x_63:i32 = load %29
-        %31:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_66:i32 = load %31
-        %33:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_69:i32 = load %33
-        %35:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %x_72:i32 = load %35
-        %37:f32 = convert %x_63
-        %38:f32 = convert %x_66
-        %39:f32 = convert %x_69
-        %40:f32 = convert %x_72
-        %41:vec4<f32> = construct %37, %38, %39, %40
-        store %x_GLF_color, %41
+    %33:f32 = load %b
+    %x_55:f32 = let %33
+    %35:ptr<uniform, f32, read> = access %x_10, 0u, 0i, 0u
+    %36:f32 = load %35
+    %x_57:f32 = let %36
+    %38:bool = eq %x_55, %x_57
+    if %38 [t: $B7, f: $B8] {  # if_2
+      $B7: {  # true
+        %39:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %40:i32 = load %39
+        %x_63:i32 = let %40
+        %42:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %43:i32 = load %42
+        %x_66:i32 = let %43
+        %45:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %46:i32 = load %45
+        %x_69:i32 = let %46
+        %48:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %49:i32 = load %48
+        %x_72:i32 = let %49
+        %51:f32 = convert %x_63
+        %52:f32 = let %51
+        %53:f32 = convert %x_66
+        %54:f32 = let %53
+        %55:f32 = convert %x_69
+        %56:f32 = let %55
+        %57:f32 = convert %x_72
+        %58:vec4<f32> = construct %52, %54, %56, %57
+        store %x_GLF_color, %58
         exit_if  # if_2
       }
-      %b8 = block {  # false
-        %x_75:f32 = load %b
-        %43:vec4<f32> = construct %x_75, %x_75, %x_75, %x_75
-        store %x_GLF_color, %43
+      $B8: {  # false
+        %59:f32 = load %b
+        %x_75:f32 = let %59
+        %61:vec4<f32> = construct %x_75, %x_75, %x_75, %x_75
+        store %x_GLF_color, %61
         exit_if  # if_2
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b9 {
-  %b9 = block {
-    %45:void = call %main_1
-    %46:vec4<f32> = load %x_GLF_color
-    %47:main_out = construct %46
-    ret %47
+%tint_symbol = @fragment func():main_out {
+  $B9: {
+    %63:void = call %main_1
+    %64:vec4<f32> = load %x_GLF_color
+    %65:main_out = construct %64
+    ret %65
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-neg-func-arg/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-neg-func-arg/0-opt.spvasm.expected.ir.msl
index 30d8867..78cc86b 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-neg-func-arg/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-neg-func-arg/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,13 +12,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_8:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%func_f1_ = func(%f:ptr<function, f32, read_write>):i32 -> %b2 {
-  %b2 = block {
+%func_f1_ = func(%f:ptr<function, f32, read_write>):i32 {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %b:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
@@ -31,17 +31,17 @@
     %12:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
     %13:i32 = load %12
     store %i, %13
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %14:i32 = load %i
         %15:ptr<uniform, i32, read> = access %x_8, 0u, 4i, 0u
         %16:i32 = load %15
         %17:bool = lt %14, %16
-        if %17 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %17 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
@@ -49,95 +49,111 @@
         %19:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
         %20:i32 = load %19
         %21:bool = gt %18, %20
-        if %21 [t: %b7] {  # if_2
-          %b7 = block {  # true
+        if %21 [t: $B7] {  # if_2
+          $B7: {  # true
             exit_loop  # loop_1
           }
         }
         %22:f32 = load %f
-        %23:i32 = convert %22
-        %24:i32 = sub %23, 1i
-        %25:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-        %26:i32 = load %25
-        %27:i32 = sub %24, %26
-        %28:i32 = load %i
-        %29:i32 = add %27, %28
-        store %a, %29
-        %30:i32 = load %b
-        %31:i32 = add %30, 1i
-        store %b, %31
-        continue %b4
+        %23:i32 = call %tint_f32_to_i32, %22
+        %25:i32 = sub %23, 1i
+        %26:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+        %27:i32 = load %26
+        %28:i32 = sub %25, %27
+        %29:i32 = load %i
+        %30:i32 = add %28, %29
+        store %a, %30
+        %31:i32 = load %b
+        %32:i32 = add %31, 1i
+        store %b, %32
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %32:i32 = load %i
-        %33:i32 = add %32, 1i
-        store %i, %33
-        next_iteration %b3
+      $B4: {  # continuing
+        %33:i32 = load %i
+        %34:i32 = add %33, 1i
+        store %i, %34
+        next_iteration  # -> $B3
       }
     }
-    %34:i32 = load %b
-    %35:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-    %36:i32 = load %35
-    %37:bool = eq %34, %36
-    if %37 [t: %b8, f: %b9] {  # if_3
-      %b8 = block {  # true
-        %38:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-        %x_100:i32 = load %38
+    %35:i32 = load %b
+    %36:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+    %37:i32 = load %36
+    %38:bool = eq %35, %37
+    if %38 [t: $B8, f: $B9] {  # if_3
+      $B8: {  # true
+        %39:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+        %40:i32 = load %39
+        %x_100:i32 = let %40
         ret %x_100
       }
-      %b9 = block {  # false
-        %40:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
-        %x_102:i32 = load %40
+      $B9: {  # false
+        %42:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
+        %43:i32 = load %42
+        %x_102:i32 = let %43
         ret %x_102
       }
     }
     unreachable
   }
 }
-%main_1 = func():void -> %b10 {
-  %b10 = block {
+%main_1 = func():void {
+  $B10: {
     %param:ptr<function, f32, read_write> = var
     store %param, 0.69999998807907104492f
-    %x_34:i32 = call %func_f1_, %param
-    %45:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-    %46:i32 = load %45
-    %47:bool = eq %x_34, %46
-    if %47 [t: %b11, f: %b12] {  # if_4
-      %b11 = block {  # true
-        %48:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-        %49:i32 = load %48
-        %50:f32 = convert %49
-        %51:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
-        %52:i32 = load %51
-        %53:f32 = convert %52
-        %54:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
-        %55:i32 = load %54
-        %56:f32 = convert %55
-        %57:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-        %58:i32 = load %57
-        %59:f32 = convert %58
-        %60:vec4<f32> = construct %50, %53, %56, %59
-        store %x_GLF_color, %60
+    %47:i32 = call %func_f1_, %param
+    %x_34:i32 = let %47
+    %49:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+    %50:i32 = load %49
+    %51:bool = eq %x_34, %50
+    if %51 [t: $B11, f: $B12] {  # if_4
+      $B11: {  # true
+        %52:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+        %53:i32 = load %52
+        %54:f32 = convert %53
+        %55:f32 = let %54
+        %56:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
+        %57:i32 = load %56
+        %58:f32 = convert %57
+        %59:f32 = let %58
+        %60:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
+        %61:i32 = load %60
+        %62:f32 = convert %61
+        %63:f32 = let %62
+        %64:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+        %65:i32 = load %64
+        %66:f32 = convert %65
+        %67:vec4<f32> = construct %55, %59, %63, %66
+        store %x_GLF_color, %67
         exit_if  # if_4
       }
-      %b12 = block {  # false
-        %61:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
-        %62:i32 = load %61
-        %63:f32 = convert %62
-        %64:vec4<f32> = construct %63
-        store %x_GLF_color, %64
+      $B12: {  # false
+        %68:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
+        %69:i32 = load %68
+        %70:f32 = convert %69
+        %71:vec4<f32> = construct %70
+        store %x_GLF_color, %71
         exit_if  # if_4
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b13 {
-  %b13 = block {
-    %66:void = call %main_1
-    %67:vec4<f32> = load %x_GLF_color
-    %68:main_out = construct %67
-    ret %68
+%tint_symbol = @fragment func():main_out {
+  $B13: {
+    %73:void = call %main_1
+    %74:vec4<f32> = load %x_GLF_color
+    %75:main_out = construct %74
+    ret %75
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B14: {
+    %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
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-neg-func-arg/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-neg-func-arg/0-opt.wgsl.expected.ir.msl
index 87b03d4b..e1476e4 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-neg-func-arg/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-neg-func-arg/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,132 +12,169 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_8:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%func_f1_ = func(%f:ptr<function, f32, read_write>):i32 -> %b2 {
-  %b2 = block {
+%func_f1_ = func(%f:ptr<function, f32, read_write>):i32 {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %b:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %8:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-    %x_60:i32 = load %8
+    %9:i32 = load %8
+    %x_60:i32 = let %9
     store %a, %x_60
-    %10:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
-    %x_62:i32 = load %10
+    %11:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
+    %12:i32 = load %11
+    %x_62:i32 = let %12
     store %b, %x_62
-    %12:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
-    %x_64:i32 = load %12
+    %14:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
+    %15:i32 = load %14
+    %x_64:i32 = let %15
     store %i, %x_64
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_69:i32 = load %i
-        %15:ptr<uniform, i32, read> = access %x_8, 0u, 4i, 0u
-        %x_71:i32 = load %15
-        %17:bool = lt %x_69, %x_71
-        if %17 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %17:i32 = load %i
+        %x_69:i32 = let %17
+        %19:ptr<uniform, i32, read> = access %x_8, 0u, 4i, 0u
+        %20:i32 = load %19
+        %x_71:i32 = let %20
+        %22:bool = lt %x_69, %x_71
+        if %22 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_74:i32 = load %a
-        %19:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
-        %x_76:i32 = load %19
-        %21:bool = gt %x_74, %x_76
-        if %21 [t: %b7] {  # if_2
-          %b7 = block {  # true
+        %23:i32 = load %a
+        %x_74:i32 = let %23
+        %25:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
+        %26:i32 = load %25
+        %x_76:i32 = let %26
+        %28:bool = gt %x_74, %x_76
+        if %28 [t: $B7] {  # if_2
+          $B7: {  # true
             exit_loop  # loop_1
           }
         }
-        %x_80:f32 = load %f
-        %23:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-        %x_84:i32 = load %23
-        %x_86:i32 = load %i
-        %26:i32 = convert %x_80
-        %27:i32 = sub %26, 1i
-        %28:i32 = sub %27, %x_84
-        %29:i32 = add %28, %x_86
-        store %a, %29
-        %x_88:i32 = load %b
-        %31:i32 = add %x_88, 1i
-        store %b, %31
-        continue %b4
+        %29:f32 = load %f
+        %x_80:f32 = let %29
+        %31:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+        %32:i32 = load %31
+        %x_84:i32 = let %32
+        %34:i32 = load %i
+        %x_86:i32 = let %34
+        %36:i32 = call %tint_f32_to_i32, %x_80
+        %38:i32 = sub %36, 1i
+        %39:i32 = sub %38, %x_84
+        %40:i32 = add %39, %x_86
+        store %a, %40
+        %41:i32 = load %b
+        %x_88:i32 = let %41
+        %43:i32 = add %x_88, 1i
+        store %b, %43
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_90:i32 = load %i
-        %33:i32 = add %x_90, 1i
-        store %i, %33
-        next_iteration %b3
+      $B4: {  # continuing
+        %44:i32 = load %i
+        %x_90:i32 = let %44
+        %46:i32 = add %x_90, 1i
+        store %i, %46
+        next_iteration  # -> $B3
       }
     }
-    %x_92:i32 = load %b
-    %35:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-    %x_94:i32 = load %35
-    %37:bool = eq %x_92, %x_94
-    if %37 [t: %b8, f: %b9] {  # if_3
-      %b8 = block {  # true
-        %38:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-        %x_100:i32 = load %38
+    %47:i32 = load %b
+    %x_92:i32 = let %47
+    %49:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+    %50:i32 = load %49
+    %x_94:i32 = let %50
+    %52:bool = eq %x_92, %x_94
+    if %52 [t: $B8, f: $B9] {  # if_3
+      $B8: {  # true
+        %53:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+        %54:i32 = load %53
+        %x_100:i32 = let %54
         ret %x_100
       }
-      %b9 = block {  # false
-        %40:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
-        %x_102:i32 = load %40
+      $B9: {  # false
+        %56:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
+        %57:i32 = load %56
+        %x_102:i32 = let %57
         ret %x_102
       }
     }
     unreachable
   }
 }
-%main_1 = func():void -> %b10 {
-  %b10 = block {
+%main_1 = func():void {
+  $B10: {
     %param:ptr<function, f32, read_write> = var
     store %param, 0.69999998807907104492f
-    %x_34:i32 = call %func_f1_, %param
-    %45:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-    %x_36:i32 = load %45
-    %47:bool = eq %x_34, %x_36
-    if %47 [t: %b11, f: %b12] {  # if_4
-      %b11 = block {  # true
-        %48:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-        %x_42:i32 = load %48
-        %50:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
-        %x_45:i32 = load %50
-        %52:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
-        %x_48:i32 = load %52
-        %54:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-        %x_51:i32 = load %54
-        %56:f32 = convert %x_42
-        %57:f32 = convert %x_45
-        %58:f32 = convert %x_48
-        %59:f32 = convert %x_51
-        %60:vec4<f32> = construct %56, %57, %58, %59
-        store %x_GLF_color, %60
+    %61:i32 = call %func_f1_, %param
+    %x_34:i32 = let %61
+    %63:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+    %64:i32 = load %63
+    %x_36:i32 = let %64
+    %66:bool = eq %x_34, %x_36
+    if %66 [t: $B11, f: $B12] {  # if_4
+      $B11: {  # true
+        %67:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+        %68:i32 = load %67
+        %x_42:i32 = let %68
+        %70:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
+        %71:i32 = load %70
+        %x_45:i32 = let %71
+        %73:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
+        %74:i32 = load %73
+        %x_48:i32 = let %74
+        %76:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+        %77:i32 = load %76
+        %x_51:i32 = let %77
+        %79:f32 = convert %x_42
+        %80:f32 = let %79
+        %81:f32 = convert %x_45
+        %82:f32 = let %81
+        %83:f32 = convert %x_48
+        %84:f32 = let %83
+        %85:f32 = convert %x_51
+        %86:vec4<f32> = construct %80, %82, %84, %85
+        store %x_GLF_color, %86
         exit_if  # if_4
       }
-      %b12 = block {  # false
-        %61:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
-        %x_55:i32 = load %61
-        %x_56:f32 = convert %x_55
-        %64:vec4<f32> = construct %x_56, %x_56, %x_56, %x_56
-        store %x_GLF_color, %64
+      $B12: {  # false
+        %87:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
+        %88:i32 = load %87
+        %x_55:i32 = let %88
+        %90:f32 = convert %x_55
+        %x_56:f32 = let %90
+        %92:vec4<f32> = construct %x_56, %x_56, %x_56, %x_56
+        store %x_GLF_color, %92
         exit_if  # if_4
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b13 {
-  %b13 = block {
-    %66:void = call %main_1
-    %67:vec4<f32> = load %x_GLF_color
-    %68:main_out = construct %67
-    ret %68
+%tint_symbol = @fragment func():main_out {
+  $B13: {
+    %94:void = call %main_1
+    %95:vec4<f32> = load %x_GLF_color
+    %96:main_out = construct %95
+    ret %96
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B14: {
+    %98:i32 = convert %value
+    %99:bool = gte %value, -2147483648.0f
+    %100:i32 = select -2147483648i, %98, %99
+    %101:bool = lte %value, 2147483520.0f
+    %102:i32 = select 2147483647i, %100, %101
+    ret %102
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-pre-increase/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-pre-increase/0-opt.spvasm.expected.ir.msl
index fd6c252..85d7b48 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-pre-increase/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-pre-increase/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,118 +20,127 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_8:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_12:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%f1_ = func():i32 -> %b2 {
-  %b2 = block {
+%f1_ = func():i32 {
+  $B2: {
     %i:ptr<function, i32, read_write> = var
     %A:ptr<function, array<i32, 10>, read_write> = var
     %a:ptr<function, i32, read_write> = var
     %9:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
     %10:i32 = load %9
     store %i, %10
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %11:i32 = load %i
         %12:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
         %13:i32 = load %12
         %14:bool = lt %11, %13
-        if %14 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %14 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_66:i32 = load %i
-        %16:ptr<function, i32, read_write> = access %A, %x_66
-        %17:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
-        %18:i32 = load %17
-        store %16, %18
-        continue %b4
+        %15:i32 = load %i
+        %x_66:i32 = let %15
+        %17:ptr<function, i32, read_write> = access %A, %x_66
+        %18:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
+        %19:i32 = load %18
+        store %17, %19
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %19:i32 = load %i
-        %20:i32 = add %19, 1i
-        store %i, %20
-        next_iteration %b3
+      $B4: {  # continuing
+        %20:i32 = load %i
+        %21:i32 = add %20, 1i
+        store %i, %21
+        next_iteration  # -> $B3
       }
     }
     store %a, -1i
-    %21:f32 = load_vector_element %gl_FragCoord, 1u
-    %22:ptr<uniform, f32, read> = access %x_12, 0u, 0i, 0u
-    %23:f32 = load %22
-    %24:bool = gte %21, %23
-    if %24 [t: %b7] {  # if_2
-      %b7 = block {  # true
-        %25:i32 = load %a
-        %x_80:i32 = add %25, 1i
+    %22:f32 = load_vector_element %gl_FragCoord, 1u
+    %23:ptr<uniform, f32, read> = access %x_12, 0u, 0i, 0u
+    %24:f32 = load %23
+    %25:bool = gte %22, %24
+    if %25 [t: $B7] {  # if_2
+      $B7: {  # true
+        %26:i32 = load %a
+        %27:i32 = add %26, 1i
+        %x_80:i32 = let %27
         store %a, %x_80
-        %27:ptr<function, i32, read_write> = access %A, %x_80
-        %28:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-        %29:i32 = load %28
-        store %27, %29
+        %29:ptr<function, i32, read_write> = access %A, %x_80
+        %30:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+        %31:i32 = load %30
+        store %29, %31
         exit_if  # if_2
       }
     }
-    %30:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
-    %31:i32 = load %30
-    %32:ptr<function, i32, read_write> = access %A, %31
+    %32:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
     %33:i32 = load %32
-    %34:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+    %34:ptr<function, i32, read_write> = access %A, %33
     %35:i32 = load %34
-    %36:bool = eq %33, %35
-    if %36 [t: %b8, f: %b9] {  # if_3
-      %b8 = block {  # true
-        %37:i32 = load %a
-        %x_95:i32 = add %37, 1i
+    %36:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+    %37:i32 = load %36
+    %38:bool = eq %35, %37
+    if %38 [t: $B8, f: $B9] {  # if_3
+      $B8: {  # true
+        %39:i32 = load %a
+        %40:i32 = add %39, 1i
+        %x_95:i32 = let %40
         store %a, %x_95
-        %39:ptr<function, i32, read_write> = access %A, %x_95
-        %x_97:i32 = load %39
+        %42:ptr<function, i32, read_write> = access %A, %x_95
+        %43:i32 = load %42
+        %x_97:i32 = let %43
         ret %x_97
       }
-      %b9 = block {  # false
-        %41:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-        %x_99:i32 = load %41
+      $B9: {  # false
+        %45:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+        %46:i32 = load %45
+        %x_99:i32 = let %46
         ret %x_99
       }
     }
     unreachable
   }
 }
-%main_1 = func():void -> %b10 {
-  %b10 = block {
+%main_1 = func():void {
+  $B10: {
     %i_1:ptr<function, i32, read_write> = var
-    %x_42:i32 = call %f1_
+    %50:i32 = call %f1_
+    %x_42:i32 = let %50
     store %i_1, %x_42
-    %46:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-    %47:i32 = load %46
-    %48:f32 = convert %47
-    %49:i32 = load %i_1
-    %50:f32 = convert %49
-    %51:i32 = load %i_1
-    %52:f32 = convert %51
-    %53:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-    %54:i32 = load %53
-    %55:f32 = convert %54
-    %56:vec4<f32> = construct %48, %50, %52, %55
-    store %x_GLF_color, %56
+    %52:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+    %53:i32 = load %52
+    %54:f32 = convert %53
+    %55:f32 = let %54
+    %56:i32 = load %i_1
+    %57:f32 = convert %56
+    %58:f32 = let %57
+    %59:i32 = load %i_1
+    %60:f32 = convert %59
+    %61:f32 = let %60
+    %62:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+    %63:i32 = load %62
+    %64:f32 = convert %63
+    %65:vec4<f32> = construct %55, %58, %61, %64
+    store %x_GLF_color, %65
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b11 {
-  %b11 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B11: {
     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
+    %68:void = call %main_1
+    %69:vec4<f32> = load %x_GLF_color
+    %70:main_out = construct %69
+    ret %70
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-pre-increase/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-pre-increase/0-opt.wgsl.expected.ir.msl
index 3320d8c..ad65d17 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-pre-increase/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-pre-increase/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,118 +20,144 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_8:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_12:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%f1_ = func():i32 -> %b2 {
-  %b2 = block {
+%f1_ = func():i32 {
+  $B2: {
     %i:ptr<function, i32, read_write> = var
     %A:ptr<function, array<i32, 10>, read_write> = var
     %a:ptr<function, i32, read_write> = var
     %9:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
-    %x_56:i32 = load %9
+    %10:i32 = load %9
+    %x_56:i32 = let %10
     store %i, %x_56
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_61:i32 = load %i
-        %12:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-        %x_63:i32 = load %12
-        %14:bool = lt %x_61, %x_63
-        if %14 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %12:i32 = load %i
+        %x_61:i32 = let %12
+        %14:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+        %15:i32 = load %14
+        %x_63:i32 = let %15
+        %17:bool = lt %x_61, %x_63
+        if %17 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_66:i32 = load %i
-        %16:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
-        %x_68:i32 = load %16
-        %18:ptr<function, i32, read_write> = access %A, %x_66
-        store %18, %x_68
-        continue %b4
+        %18:i32 = load %i
+        %x_66:i32 = let %18
+        %20:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
+        %21:i32 = load %20
+        %x_68:i32 = let %21
+        %23:ptr<function, i32, read_write> = access %A, %x_66
+        store %23, %x_68
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_70:i32 = load %i
-        %20:i32 = add %x_70, 1i
-        store %i, %20
-        next_iteration %b3
+      $B4: {  # continuing
+        %24:i32 = load %i
+        %x_70:i32 = let %24
+        %26:i32 = add %x_70, 1i
+        store %i, %26
+        next_iteration  # -> $B3
       }
     }
     store %a, -1i
-    %x_73:f32 = load_vector_element %gl_FragCoord, 1u
-    %22:ptr<uniform, f32, read> = access %x_12, 0u, 0i, 0u
-    %x_75:f32 = load %22
-    %24:bool = gte %x_73, %x_75
-    if %24 [t: %b7] {  # if_2
-      %b7 = block {  # true
-        %x_79:i32 = load %a
-        %x_80:i32 = add %x_79, 1i
+    %27:f32 = load_vector_element %gl_FragCoord, 1u
+    %x_73:f32 = let %27
+    %29:ptr<uniform, f32, read> = access %x_12, 0u, 0i, 0u
+    %30:f32 = load %29
+    %x_75:f32 = let %30
+    %32:bool = gte %x_73, %x_75
+    if %32 [t: $B7] {  # if_2
+      $B7: {  # true
+        %33:i32 = load %a
+        %x_79:i32 = let %33
+        %35:i32 = add %x_79, 1i
+        %x_80:i32 = let %35
         store %a, %x_80
-        %27:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-        %x_82:i32 = load %27
-        %29:ptr<function, i32, read_write> = access %A, %x_80
-        store %29, %x_82
+        %37:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+        %38:i32 = load %37
+        %x_82:i32 = let %38
+        %40:ptr<function, i32, read_write> = access %A, %x_80
+        store %40, %x_82
         exit_if  # if_2
       }
     }
-    %30:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
-    %x_85:i32 = load %30
-    %32:ptr<function, i32, read_write> = access %A, %x_85
-    %x_87:i32 = load %32
-    %34:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-    %x_89:i32 = load %34
-    %36:bool = eq %x_87, %x_89
-    if %36 [t: %b8, f: %b9] {  # if_3
-      %b8 = block {  # true
-        %x_94:i32 = load %a
-        %x_95:i32 = add %x_94, 1i
+    %41:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
+    %42:i32 = load %41
+    %x_85:i32 = let %42
+    %44:ptr<function, i32, read_write> = access %A, %x_85
+    %45:i32 = load %44
+    %x_87:i32 = let %45
+    %47:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+    %48:i32 = load %47
+    %x_89:i32 = let %48
+    %50:bool = eq %x_87, %x_89
+    if %50 [t: $B8, f: $B9] {  # if_3
+      $B8: {  # true
+        %51:i32 = load %a
+        %x_94:i32 = let %51
+        %53:i32 = add %x_94, 1i
+        %x_95:i32 = let %53
         store %a, %x_95
-        %39:ptr<function, i32, read_write> = access %A, %x_95
-        %x_97:i32 = load %39
+        %55:ptr<function, i32, read_write> = access %A, %x_95
+        %56:i32 = load %55
+        %x_97:i32 = let %56
         ret %x_97
       }
-      %b9 = block {  # false
-        %41:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-        %x_99:i32 = load %41
+      $B9: {  # false
+        %58:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+        %59:i32 = load %58
+        %x_99:i32 = let %59
         ret %x_99
       }
     }
     unreachable
   }
 }
-%main_1 = func():void -> %b10 {
-  %b10 = block {
+%main_1 = func():void {
+  $B10: {
     %i_1:ptr<function, i32, read_write> = var
-    %x_42:i32 = call %f1_
+    %63:i32 = call %f1_
+    %x_42:i32 = let %63
     store %i_1, %x_42
-    %46:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-    %x_44:i32 = load %46
-    %x_46:i32 = load %i_1
-    %x_48:i32 = load %i_1
-    %50:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-    %x_51:i32 = load %50
-    %52:f32 = convert %x_44
-    %53:f32 = convert %x_46
-    %54:f32 = convert %x_48
-    %55:f32 = convert %x_51
-    %56:vec4<f32> = construct %52, %53, %54, %55
-    store %x_GLF_color, %56
+    %65:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+    %66:i32 = load %65
+    %x_44:i32 = let %66
+    %68:i32 = load %i_1
+    %x_46:i32 = let %68
+    %70:i32 = load %i_1
+    %x_48:i32 = let %70
+    %72:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+    %73:i32 = load %72
+    %x_51:i32 = let %73
+    %75:f32 = convert %x_44
+    %76:f32 = let %75
+    %77:f32 = convert %x_46
+    %78:f32 = let %77
+    %79:f32 = convert %x_48
+    %80:f32 = let %79
+    %81:f32 = convert %x_51
+    %82:vec4<f32> = construct %76, %78, %80, %81
+    store %x_GLF_color, %82
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b11 {
-  %b11 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B11: {
     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
+    %85:void = call %main_1
+    %86:vec4<f32> = load %x_GLF_color
+    %87:main_out = construct %86
+    ret %87
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-pack-unpack/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-pack-unpack/0-opt.spvasm.expected.ir.msl
index 41ad07b..ad04582 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-pack-unpack/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-pack-unpack/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,14 +20,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_10:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, u32, read_write> = var
     %v1:ptr<function, vec4<f32>, read_write> = var
     %r:ptr<function, vec4<f32>, read_write> = var
@@ -77,96 +77,100 @@
     %48:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
     %49:i32 = load %48
     %50:f32 = load_vector_element %r, %49
-    %x_74:bool = eq %47, %50
+    %51:bool = eq %47, %50
+    %x_74:bool = let %51
     store %x_86, %x_74
-    if %x_74 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %52:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
-        %53:i32 = load %52
-        %54:f32 = load_vector_element %v1, %53
-        %55:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-        %56:i32 = load %55
-        %57:f32 = load_vector_element %r, %56
-        %58:bool = eq %54, %57
-        store %x_85, %58
-        %59:bool = load %x_85
-        store %x_86, %59
+    if %x_74 [t: $B3] {  # if_1
+      $B3: {  # true
+        %53:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
+        %54:i32 = load %53
+        %55:f32 = load_vector_element %v1, %54
+        %56:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+        %57:i32 = load %56
+        %58:f32 = load_vector_element %r, %57
+        %59:bool = eq %55, %58
+        store %x_85, %59
+        %60:bool = load %x_85
+        store %x_86, %60
         exit_if  # if_1
       }
     }
-    %60:bool = load %x_86
-    store %x_98, %60
     %61:bool = load %x_86
-    if %61 [t: %b4] {  # if_2
-      %b4 = block {  # true
-        %62:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-        %63:i32 = load %62
-        %64:f32 = load_vector_element %v1, %63
-        %65:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
-        %66:i32 = load %65
-        %67:f32 = load_vector_element %r, %66
-        %68:bool = eq %64, %67
-        store %x_97, %68
-        %69:bool = load %x_97
-        store %x_98, %69
+    store %x_98, %61
+    %62:bool = load %x_86
+    if %62 [t: $B4] {  # if_2
+      $B4: {  # true
+        %63:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+        %64:i32 = load %63
+        %65:f32 = load_vector_element %v1, %64
+        %66:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
+        %67:i32 = load %66
+        %68:f32 = load_vector_element %r, %67
+        %69:bool = eq %65, %68
+        store %x_97, %69
+        %70:bool = load %x_97
+        store %x_98, %70
         exit_if  # if_2
       }
     }
-    %70:bool = load %x_98
-    store %x_110, %70
     %71:bool = load %x_98
-    if %71 [t: %b5] {  # if_3
-      %b5 = block {  # true
-        %72:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %73:i32 = load %72
-        %74:f32 = load_vector_element %v1, %73
-        %75:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %76:i32 = load %75
-        %77:f32 = load_vector_element %r, %76
-        %78:bool = eq %74, %77
-        store %x_109, %78
-        %79:bool = load %x_109
-        store %x_110, %79
+    store %x_110, %71
+    %72:bool = load %x_98
+    if %72 [t: $B5] {  # if_3
+      $B5: {  # true
+        %73:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %74:i32 = load %73
+        %75:f32 = load_vector_element %v1, %74
+        %76:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %77:i32 = load %76
+        %78:f32 = load_vector_element %r, %77
+        %79:bool = eq %75, %78
+        store %x_109, %79
+        %80:bool = load %x_109
+        store %x_110, %80
         exit_if  # if_3
       }
     }
-    %80:bool = load %x_110
-    if %80 [t: %b6, f: %b7] {  # if_4
-      %b6 = block {  # true
-        %81:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
-        %82:i32 = load %81
-        %83:f32 = convert %82
-        %84:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %85:i32 = load %84
-        %86:f32 = convert %85
-        %87:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %88:i32 = load %87
-        %89:f32 = convert %88
-        %90:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
+    %81:bool = load %x_110
+    if %81 [t: $B6, f: $B7] {  # if_4
+      $B6: {  # true
+        %82:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
+        %83:i32 = load %82
+        %84:f32 = convert %83
+        %85:f32 = let %84
+        %86:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %87:i32 = load %86
+        %88:f32 = convert %87
+        %89:f32 = let %88
+        %90:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
         %91:i32 = load %90
         %92:f32 = convert %91
-        %93:vec4<f32> = construct %83, %86, %89, %92
-        store %x_GLF_color, %93
+        %93:f32 = let %92
+        %94:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
+        %95:i32 = load %94
+        %96:f32 = convert %95
+        %97:vec4<f32> = construct %85, %89, %93, %96
+        store %x_GLF_color, %97
         exit_if  # if_4
       }
-      %b7 = block {  # false
-        %94:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %95:i32 = load %94
-        %96:f32 = load_vector_element %v1, %95
-        %97:vec4<f32> = construct %96
-        store %x_GLF_color, %97
+      $B7: {  # false
+        %98:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %99:i32 = load %98
+        %100:f32 = load_vector_element %v1, %99
+        %101:vec4<f32> = construct %100
+        store %x_GLF_color, %101
         exit_if  # if_4
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b8 {
-  %b8 = block {
-    %99:void = call %main_1
-    %100:vec4<f32> = load %x_GLF_color
-    %101:main_out = construct %100
-    ret %101
+%tint_symbol = @fragment func():main_out {
+  $B8: {
+    %103:void = call %main_1
+    %104:vec4<f32> = load %x_GLF_color
+    %105:main_out = construct %104
+    ret %105
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-pack-unpack/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-pack-unpack/0-opt.wgsl.expected.ir.msl
index 59a8932..00eb81df 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-pack-unpack/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-pack-unpack/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,14 +20,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_10:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, u32, read_write> = var
     %v1:ptr<function, vec4<f32>, read_write> = var
     %r:ptr<function, vec4<f32>, read_write> = var
@@ -38,133 +38,172 @@
     %x_98_phi:ptr<function, bool, read_write> = var
     %x_110_phi:ptr<function, bool, read_write> = var
     %14:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_36:f32 = load %14
-    %16:vec4<f32> = construct %x_36, %x_36, %x_36, %x_36
-    %17:u32 = pack4x8unorm %16
-    store %a, %17
-    %x_39:u32 = load %a
-    %19:vec4<f32> = unpack4x8snorm %x_39
-    store %v1, %19
-    %20:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_42:f32 = load %20
-    %22:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-    %x_45:f32 = load %22
-    %24:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_48:f32 = load %24
-    %26:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-    %x_51:f32 = load %26
+    %15:f32 = load %14
+    %x_36:f32 = let %15
+    %17:vec4<f32> = construct %x_36, %x_36, %x_36, %x_36
+    %18:u32 = pack4x8unorm %17
+    store %a, %18
+    %19:u32 = load %a
+    %x_39:u32 = let %19
+    %21:vec4<f32> = unpack4x8snorm %x_39
+    store %v1, %21
+    %22:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %23:f32 = load %22
+    %x_42:f32 = let %23
+    %25:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+    %26:f32 = load %25
+    %x_45:f32 = let %26
     %28:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_54:f32 = load %28
-    %30:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-    %x_57:f32 = load %30
-    %32:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_60:f32 = load %32
-    %34:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-    %x_63:f32 = load %34
-    %36:f32 = negation %x_42
-    %37:f32 = div %36, %x_45
-    %38:f32 = negation %x_48
-    %39:f32 = div %38, %x_51
-    %40:f32 = negation %x_54
-    %41:f32 = div %40, %x_57
-    %42:f32 = negation %x_60
-    %43:f32 = div %42, %x_63
-    %44:vec4<f32> = construct %37, %39, %41, %43
-    store %r, %44
-    %45:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-    %x_67:i32 = load %45
-    %x_69:f32 = load_vector_element %v1, %x_67
-    %48:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-    %x_71:i32 = load %48
-    %x_73:f32 = load_vector_element %r, %x_71
-    %x_74:bool = eq %x_69, %x_73
+    %29:f32 = load %28
+    %x_48:f32 = let %29
+    %31:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+    %32:f32 = load %31
+    %x_51:f32 = let %32
+    %34:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %35:f32 = load %34
+    %x_54:f32 = let %35
+    %37:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+    %38:f32 = load %37
+    %x_57:f32 = let %38
+    %40:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %41:f32 = load %40
+    %x_60:f32 = let %41
+    %43:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+    %44:f32 = load %43
+    %x_63:f32 = let %44
+    %46:f32 = negation %x_42
+    %47:f32 = div %46, %x_45
+    %48:f32 = negation %x_48
+    %49:f32 = div %48, %x_51
+    %50:f32 = negation %x_54
+    %51:f32 = div %50, %x_57
+    %52:f32 = negation %x_60
+    %53:f32 = div %52, %x_63
+    %54:vec4<f32> = construct %47, %49, %51, %53
+    store %r, %54
+    %55:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+    %56:i32 = load %55
+    %x_67:i32 = let %56
+    %58:f32 = load_vector_element %v1, %x_67
+    %x_69:f32 = let %58
+    %60:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+    %61:i32 = load %60
+    %x_71:i32 = let %61
+    %63:f32 = load_vector_element %r, %x_71
+    %x_73:f32 = let %63
+    %65:bool = eq %x_69, %x_73
+    %x_74:bool = let %65
     store %x_86_phi, %x_74
-    if %x_74 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %52:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
-        %x_78:i32 = load %52
-        %x_80:f32 = load_vector_element %v1, %x_78
-        %55:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-        %x_82:i32 = load %55
-        %x_84:f32 = load_vector_element %r, %x_82
-        %58:bool = eq %x_80, %x_84
-        store %x_85, %58
-        %59:bool = load %x_85
-        store %x_86_phi, %59
+    if %x_74 [t: $B3] {  # if_1
+      $B3: {  # true
+        %67:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
+        %68:i32 = load %67
+        %x_78:i32 = let %68
+        %70:f32 = load_vector_element %v1, %x_78
+        %x_80:f32 = let %70
+        %72:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+        %73:i32 = load %72
+        %x_82:i32 = let %73
+        %75:f32 = load_vector_element %r, %x_82
+        %x_84:f32 = let %75
+        %77:bool = eq %x_80, %x_84
+        store %x_85, %77
+        %78:bool = load %x_85
+        store %x_86_phi, %78
         exit_if  # if_1
       }
     }
-    %x_86:bool = load %x_86_phi
+    %79:bool = load %x_86_phi
+    %x_86:bool = let %79
     store %x_98_phi, %x_86
-    if %x_86 [t: %b4] {  # if_2
-      %b4 = block {  # true
-        %61:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-        %x_90:i32 = load %61
-        %x_92:f32 = load_vector_element %v1, %x_90
-        %64:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
-        %x_94:i32 = load %64
-        %x_96:f32 = load_vector_element %r, %x_94
-        %67:bool = eq %x_92, %x_96
-        store %x_97, %67
-        %68:bool = load %x_97
-        store %x_98_phi, %68
+    if %x_86 [t: $B4] {  # if_2
+      $B4: {  # true
+        %81:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+        %82:i32 = load %81
+        %x_90:i32 = let %82
+        %84:f32 = load_vector_element %v1, %x_90
+        %x_92:f32 = let %84
+        %86:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
+        %87:i32 = load %86
+        %x_94:i32 = let %87
+        %89:f32 = load_vector_element %r, %x_94
+        %x_96:f32 = let %89
+        %91:bool = eq %x_92, %x_96
+        store %x_97, %91
+        %92:bool = load %x_97
+        store %x_98_phi, %92
         exit_if  # if_2
       }
     }
-    %x_98:bool = load %x_98_phi
+    %93:bool = load %x_98_phi
+    %x_98:bool = let %93
     store %x_110_phi, %x_98
-    if %x_98 [t: %b5] {  # if_3
-      %b5 = block {  # true
-        %70:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %x_102:i32 = load %70
-        %x_104:f32 = load_vector_element %v1, %x_102
-        %73:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %x_106:i32 = load %73
-        %x_108:f32 = load_vector_element %r, %x_106
-        %76:bool = eq %x_104, %x_108
-        store %x_109, %76
-        %77:bool = load %x_109
-        store %x_110_phi, %77
+    if %x_98 [t: $B5] {  # if_3
+      $B5: {  # true
+        %95:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %96:i32 = load %95
+        %x_102:i32 = let %96
+        %98:f32 = load_vector_element %v1, %x_102
+        %x_104:f32 = let %98
+        %100:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %101:i32 = load %100
+        %x_106:i32 = let %101
+        %103:f32 = load_vector_element %r, %x_106
+        %x_108:f32 = let %103
+        %105:bool = eq %x_104, %x_108
+        store %x_109, %105
+        %106:bool = load %x_109
+        store %x_110_phi, %106
         exit_if  # if_3
       }
     }
-    %x_110:bool = load %x_110_phi
-    if %x_110 [t: %b6, f: %b7] {  # if_4
-      %b6 = block {  # true
-        %79:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
-        %x_115:i32 = load %79
-        %81:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %x_118:i32 = load %81
-        %83:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %x_121:i32 = load %83
-        %85:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
-        %x_124:i32 = load %85
-        %87:f32 = convert %x_115
-        %88:f32 = convert %x_118
-        %89:f32 = convert %x_121
-        %90:f32 = convert %x_124
-        %91:vec4<f32> = construct %87, %88, %89, %90
-        store %x_GLF_color, %91
+    %107:bool = load %x_110_phi
+    %x_110:bool = let %107
+    if %x_110 [t: $B6, f: $B7] {  # if_4
+      $B6: {  # true
+        %109:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
+        %110:i32 = load %109
+        %x_115:i32 = let %110
+        %112:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %113:i32 = load %112
+        %x_118:i32 = let %113
+        %115:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %116:i32 = load %115
+        %x_121:i32 = let %116
+        %118:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
+        %119:i32 = load %118
+        %x_124:i32 = let %119
+        %121:f32 = convert %x_115
+        %122:f32 = let %121
+        %123:f32 = convert %x_118
+        %124:f32 = let %123
+        %125:f32 = convert %x_121
+        %126:f32 = let %125
+        %127:f32 = convert %x_124
+        %128:vec4<f32> = construct %122, %124, %126, %127
+        store %x_GLF_color, %128
         exit_if  # if_4
       }
-      %b7 = block {  # false
-        %92:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %x_128:i32 = load %92
-        %x_130:f32 = load_vector_element %v1, %x_128
-        %95:vec4<f32> = construct %x_130, %x_130, %x_130, %x_130
-        store %x_GLF_color, %95
+      $B7: {  # false
+        %129:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %130:i32 = load %129
+        %x_128:i32 = let %130
+        %132:f32 = load_vector_element %v1, %x_128
+        %x_130:f32 = let %132
+        %134:vec4<f32> = construct %x_130, %x_130, %x_130, %x_130
+        store %x_GLF_color, %134
         exit_if  # if_4
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b8 {
-  %b8 = block {
-    %97:void = call %main_1
-    %98:vec4<f32> = load %x_GLF_color
-    %99:main_out = construct %98
-    ret %99
+%tint_symbol = @fragment func():main_out {
+  $B8: {
+    %136:void = call %main_1
+    %137:vec4<f32> = load %x_GLF_color
+    %138:main_out = construct %137
+    ret %138
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-xor-add/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-xor-add/0-opt.spvasm.expected.ir.msl
index 119277b..9f4b05c 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-xor-add/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-xor-add/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,70 +20,72 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_8:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %data:ptr<function, array<f32, 2>, read_write> = var
     %a:ptr<function, f32, read_write> = var
     %7:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_33:i32 = load %7
-    %9:ptr<function, f32, read_write> = access %data, %x_33
-    %10:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-    %11:f32 = load %10
-    store %9, %11
-    %12:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_38:i32 = load %12
-    %14:ptr<function, f32, read_write> = access %data, %x_38
-    %15:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
-    %16:f32 = load %15
-    store %14, %16
-    %17:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %18:i32 = load %17
-    %19:i32 = and %18, 2i
-    %20:i32 = xor 1i, %19
-    %21:ptr<function, f32, read_write> = access %data, %20
-    %22:f32 = load %21
-    store %a, %22
-    %23:f32 = load %a
-    %24:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
-    %25:f32 = load %24
-    %26:bool = eq %23, %25
-    if %26 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %27:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
-        %28:f32 = load %27
-        %29:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+    %8:i32 = load %7
+    %x_33:i32 = let %8
+    %10:ptr<function, f32, read_write> = access %data, %x_33
+    %11:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+    %12:f32 = load %11
+    store %10, %12
+    %13:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %14:i32 = load %13
+    %x_38:i32 = let %14
+    %16:ptr<function, f32, read_write> = access %data, %x_38
+    %17:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
+    %18:f32 = load %17
+    store %16, %18
+    %19:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %20:i32 = load %19
+    %21:i32 = and %20, 2i
+    %22:i32 = xor 1i, %21
+    %23:ptr<function, f32, read_write> = access %data, %22
+    %24:f32 = load %23
+    store %a, %24
+    %25:f32 = load %a
+    %26:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
+    %27:f32 = load %26
+    %28:bool = eq %25, %27
+    if %28 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %29:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
         %30:f32 = load %29
         %31:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
         %32:f32 = load %31
-        %33:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
+        %33:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
         %34:f32 = load %33
-        %35:vec4<f32> = construct %28, %30, %32, %34
-        store %x_GLF_color, %35
+        %35:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
+        %36:f32 = load %35
+        %37:vec4<f32> = construct %30, %32, %34, %36
+        store %x_GLF_color, %37
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %36:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-        %37:f32 = load %36
-        %38:vec4<f32> = construct %37
-        store %x_GLF_color, %38
+      $B4: {  # false
+        %38:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+        %39:f32 = load %38
+        %40:vec4<f32> = construct %39
+        store %x_GLF_color, %40
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %40:void = call %main_1
-    %41:vec4<f32> = load %x_GLF_color
-    %42:main_out = construct %41
-    ret %42
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %42:void = call %main_1
+    %43:vec4<f32> = load %x_GLF_color
+    %44:main_out = construct %43
+    ret %44
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-xor-add/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-xor-add/0-opt.wgsl.expected.ir.msl
index 16f89d1..0ccfe22 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-xor-add/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-xor-add/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,70 +20,83 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_8:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %data:ptr<function, array<f32, 2>, read_write> = var
     %a:ptr<function, f32, read_write> = var
     %7:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_33:i32 = load %7
-    %9:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-    %x_35:f32 = load %9
-    %11:ptr<function, f32, read_write> = access %data, %x_33
-    store %11, %x_35
-    %12:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_38:i32 = load %12
-    %14:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
-    %x_40:f32 = load %14
-    %16:ptr<function, f32, read_write> = access %data, %x_38
-    store %16, %x_40
-    %17:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_43:i32 = load %17
-    %19:i32 = and %x_43, 2i
-    %20:i32 = xor 1i, %19
-    %21:ptr<function, f32, read_write> = access %data, %20
-    %x_47:f32 = load %21
+    %8:i32 = load %7
+    %x_33:i32 = let %8
+    %10:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+    %11:f32 = load %10
+    %x_35:f32 = let %11
+    %13:ptr<function, f32, read_write> = access %data, %x_33
+    store %13, %x_35
+    %14:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %15:i32 = load %14
+    %x_38:i32 = let %15
+    %17:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
+    %18:f32 = load %17
+    %x_40:f32 = let %18
+    %20:ptr<function, f32, read_write> = access %data, %x_38
+    store %20, %x_40
+    %21:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %22:i32 = load %21
+    %x_43:i32 = let %22
+    %24:i32 = and %x_43, 2i
+    %25:i32 = xor 1i, %24
+    %26:ptr<function, f32, read_write> = access %data, %25
+    %27:f32 = load %26
+    %x_47:f32 = let %27
     store %a, %x_47
-    %x_48:f32 = load %a
-    %24:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
-    %x_50:f32 = load %24
-    %26:bool = eq %x_48, %x_50
-    if %26 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %27:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
-        %x_56:f32 = load %27
-        %29:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-        %x_58:f32 = load %29
-        %31:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-        %x_60:f32 = load %31
-        %33:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
-        %x_62:f32 = load %33
-        %35:vec4<f32> = construct %x_56, %x_58, %x_60, %x_62
-        store %x_GLF_color, %35
+    %29:f32 = load %a
+    %x_48:f32 = let %29
+    %31:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
+    %32:f32 = load %31
+    %x_50:f32 = let %32
+    %34:bool = eq %x_48, %x_50
+    if %34 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %35:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
+        %36:f32 = load %35
+        %x_56:f32 = let %36
+        %38:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+        %39:f32 = load %38
+        %x_58:f32 = let %39
+        %41:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+        %42:f32 = load %41
+        %x_60:f32 = let %42
+        %44:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
+        %45:f32 = load %44
+        %x_62:f32 = let %45
+        %47:vec4<f32> = construct %x_56, %x_58, %x_60, %x_62
+        store %x_GLF_color, %47
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %36:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-        %x_65:f32 = load %36
-        %38:vec4<f32> = construct %x_65, %x_65, %x_65, %x_65
-        store %x_GLF_color, %38
+      $B4: {  # false
+        %48:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+        %49:f32 = load %48
+        %x_65:f32 = let %49
+        %51:vec4<f32> = construct %x_65, %x_65, %x_65, %x_65
+        store %x_GLF_color, %51
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %40:void = call %main_1
-    %41:vec4<f32> = load %x_GLF_color
-    %42:main_out = construct %41
-    ret %42
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %53:void = call %main_1
+    %54:vec4<f32> = load %x_GLF_color
+    %55:main_out = construct %54
+    ret %55
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ldexp/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ldexp/0-opt.spvasm.expected.ir.msl
index 227c604..53a36a5 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ldexp/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ldexp/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,65 +20,71 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_7:ptr<uniform, buf1, read> = var @binding_point(0, 1)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %5:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
     %6:f32 = load %5
     %7:f32 = ldexp %6, 10000i
     %8:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
     %9:f32 = load %8
     %10:bool = eq %7, %9
-    if %10 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    if %10 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         %11:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
         %12:i32 = load %11
         %13:f32 = convert %12
-        %14:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %15:i32 = load %14
-        %16:f32 = convert %15
-        %17:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %18:i32 = load %17
-        %19:f32 = convert %18
-        %20:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %21:i32 = load %20
-        %22:f32 = convert %21
-        %23:vec4<f32> = construct %13, %16, %19, %22
-        store %x_GLF_color, %23
+        %14:f32 = let %13
+        %15:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %16:i32 = load %15
+        %17:f32 = convert %16
+        %18:f32 = let %17
+        %19:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %20:i32 = load %19
+        %21:f32 = convert %20
+        %22:f32 = let %21
+        %23:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %24:i32 = load %23
+        %25:f32 = convert %24
+        %26:vec4<f32> = construct %14, %18, %22, %25
+        store %x_GLF_color, %26
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %24:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %25:i32 = load %24
-        %26:f32 = convert %25
-        %27:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+      $B4: {  # false
+        %27:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
         %28:i32 = load %27
         %29:f32 = convert %28
-        %30:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %31:i32 = load %30
-        %32:f32 = convert %31
-        %33:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %34:i32 = load %33
-        %35:f32 = convert %34
-        %36:vec4<f32> = construct %26, %29, %32, %35
-        store %x_GLF_color, %36
+        %30:f32 = let %29
+        %31:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %32:i32 = load %31
+        %33:f32 = convert %32
+        %34:f32 = let %33
+        %35:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %36:i32 = load %35
+        %37:f32 = convert %36
+        %38:f32 = let %37
+        %39:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %40:i32 = load %39
+        %41:f32 = convert %40
+        %42:vec4<f32> = construct %30, %34, %38, %41
+        store %x_GLF_color, %42
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %38:void = call %main_1
-    %39:vec4<f32> = load %x_GLF_color
-    %40:main_out = construct %39
-    ret %40
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %44:void = call %main_1
+    %45:vec4<f32> = load %x_GLF_color
+    %46:main_out = construct %45
+    ret %46
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ldexp/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ldexp/0-opt.wgsl.expected.ir.msl
index 6bdace5..a0b8ffd 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ldexp/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ldexp/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,65 +20,81 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_7:ptr<uniform, buf1, read> = var @binding_point(0, 1)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %5:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
-    %x_29:f32 = load %5
-    %7:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
-    %x_32:f32 = load %7
-    %9:f32 = ldexp %x_29, 10000i
-    %10:bool = eq %9, %x_32
-    if %10 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %11:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %x_38:i32 = load %11
-        %13:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %x_41:i32 = load %13
-        %15:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %x_44:i32 = load %15
-        %17:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %x_47:i32 = load %17
-        %19:f32 = convert %x_38
-        %20:f32 = convert %x_41
-        %21:f32 = convert %x_44
-        %22:f32 = convert %x_47
-        %23:vec4<f32> = construct %19, %20, %21, %22
-        store %x_GLF_color, %23
+    %6:f32 = load %5
+    %x_29:f32 = let %6
+    %8:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
+    %9:f32 = load %8
+    %x_32:f32 = let %9
+    %11:f32 = ldexp %x_29, 10000i
+    %12:bool = eq %11, %x_32
+    if %12 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %13:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %14:i32 = load %13
+        %x_38:i32 = let %14
+        %16:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %17:i32 = load %16
+        %x_41:i32 = let %17
+        %19:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %20:i32 = load %19
+        %x_44:i32 = let %20
+        %22:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %23:i32 = load %22
+        %x_47:i32 = let %23
+        %25:f32 = convert %x_38
+        %26:f32 = let %25
+        %27:f32 = convert %x_41
+        %28:f32 = let %27
+        %29:f32 = convert %x_44
+        %30:f32 = let %29
+        %31:f32 = convert %x_47
+        %32:vec4<f32> = construct %26, %28, %30, %31
+        store %x_GLF_color, %32
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %24:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %x_51:i32 = load %24
-        %26:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %x_54:i32 = load %26
-        %28:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %x_57:i32 = load %28
-        %30:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %x_60:i32 = load %30
-        %32:f32 = convert %x_51
-        %33:f32 = convert %x_54
-        %34:f32 = convert %x_57
-        %35:f32 = convert %x_60
-        %36:vec4<f32> = construct %32, %33, %34, %35
-        store %x_GLF_color, %36
+      $B4: {  # false
+        %33:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %34:i32 = load %33
+        %x_51:i32 = let %34
+        %36:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %37:i32 = load %36
+        %x_54:i32 = let %37
+        %39:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %40:i32 = load %39
+        %x_57:i32 = let %40
+        %42:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %43:i32 = load %42
+        %x_60:i32 = let %43
+        %45:f32 = convert %x_51
+        %46:f32 = let %45
+        %47:f32 = convert %x_54
+        %48:f32 = let %47
+        %49:f32 = convert %x_57
+        %50:f32 = let %49
+        %51:f32 = convert %x_60
+        %52:vec4<f32> = construct %46, %48, %50, %51
+        store %x_GLF_color, %52
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %38:void = call %main_1
-    %39:vec4<f32> = load %x_GLF_color
-    %40:main_out = construct %39
-    ret %40
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %54:void = call %main_1
+    %55:vec4<f32> = load %x_GLF_color
+    %56:main_out = construct %55
+    ret %56
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-pre-increment-clamp/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-pre-increment-clamp/0-opt.spvasm.expected.ir.msl
index b9f17fb..95eac61 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-pre-increment-clamp/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-pre-increment-clamp/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,15 +20,15 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_9:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_14:ptr<uniform, buf1, read> = var @binding_point(0, 1)
 }
 
-%f1_f1_ = func(%a:ptr<function, f32, read_write>):f32 -> %b2 {
-  %b2 = block {
+%f1_f1_ = func(%a:ptr<function, f32, read_write>):f32 {
+  $B2: {
     %b:ptr<function, i32, read_write> = var
     %c:ptr<function, f32, read_write> = var
     store %b, 8i
@@ -36,8 +36,8 @@
     %10:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
     %11:f32 = load %10
     %12:bool = gte %9, %11
-    if %12 [t: %b3] {  # if_1
-      %b3 = block {  # true
+    if %12 [t: $B3] {  # if_1
+      $B3: {  # true
         %13:i32 = load %b
         %14:i32 = add %13, 1i
         store %b, %14
@@ -51,71 +51,78 @@
     %18:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
     %19:f32 = load %18
     %20:bool = lt %17, %19
-    if %20 [t: %b4] {  # if_2
-      %b4 = block {  # true
+    if %20 [t: $B4] {  # if_2
+      $B4: {  # true
         %21:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
-        %x_88:f32 = load %21
+        %22:f32 = load %21
+        %x_88:f32 = let %22
         ret %x_88
       }
     }
-    %23:i32 = load %b
-    %24:i32 = clamp %23, 0i, 2i
-    %25:f32 = convert %24
-    store %c, %25
-    %x_92:f32 = load %c
+    %24:i32 = load %b
+    %25:i32 = max %24, 0i
+    %26:i32 = min %25, 2i
+    %27:f32 = convert %26
+    store %c, %27
+    %28:f32 = load %c
+    %x_92:f32 = let %28
     ret %x_92
   }
 }
-%main_1 = func():void -> %b5 {
-  %b5 = block {
+%main_1 = func():void {
+  $B5: {
     %a_1:ptr<function, f32, read_write> = var
     %param:ptr<function, f32, read_write> = var
-    %30:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
-    %31:f32 = load %30
-    store %param, %31
-    %x_44:f32 = call %f1_f1_, %param
+    %33:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
+    %34:f32 = load %33
+    store %param, %34
+    %35:f32 = call %f1_f1_, %param
+    %x_44:f32 = let %35
     store %a_1, %x_44
-    %33:f32 = load %a_1
-    %34:ptr<uniform, f32, read> = access %x_9, 0u, 2i, 0u
-    %35:f32 = load %34
-    %36:bool = eq %33, %35
-    if %36 [t: %b6, f: %b7] {  # if_3
-      %b6 = block {  # true
-        %37:ptr<uniform, i32, read> = access %x_14, 0u, 1i, 0u
-        %38:i32 = load %37
-        %39:f32 = convert %38
-        %40:ptr<uniform, i32, read> = access %x_14, 0u, 0i, 0u
-        %41:i32 = load %40
-        %42:f32 = convert %41
-        %43:ptr<uniform, i32, read> = access %x_14, 0u, 0i, 0u
-        %44:i32 = load %43
-        %45:f32 = convert %44
-        %46:ptr<uniform, i32, read> = access %x_14, 0u, 1i, 0u
-        %47:i32 = load %46
-        %48:f32 = convert %47
-        %49:vec4<f32> = construct %39, %42, %45, %48
-        store %x_GLF_color, %49
+    %37:f32 = load %a_1
+    %38:ptr<uniform, f32, read> = access %x_9, 0u, 2i, 0u
+    %39:f32 = load %38
+    %40:bool = eq %37, %39
+    if %40 [t: $B6, f: $B7] {  # if_3
+      $B6: {  # true
+        %41:ptr<uniform, i32, read> = access %x_14, 0u, 1i, 0u
+        %42:i32 = load %41
+        %43:f32 = convert %42
+        %44:f32 = let %43
+        %45:ptr<uniform, i32, read> = access %x_14, 0u, 0i, 0u
+        %46:i32 = load %45
+        %47:f32 = convert %46
+        %48:f32 = let %47
+        %49:ptr<uniform, i32, read> = access %x_14, 0u, 0i, 0u
+        %50:i32 = load %49
+        %51:f32 = convert %50
+        %52:f32 = let %51
+        %53:ptr<uniform, i32, read> = access %x_14, 0u, 1i, 0u
+        %54:i32 = load %53
+        %55:f32 = convert %54
+        %56:vec4<f32> = construct %44, %48, %52, %55
+        store %x_GLF_color, %56
         exit_if  # if_3
       }
-      %b7 = block {  # false
-        %50:ptr<uniform, i32, read> = access %x_14, 0u, 0i, 0u
-        %51:i32 = load %50
-        %52:f32 = convert %51
-        %53:vec4<f32> = construct %52
-        store %x_GLF_color, %53
+      $B7: {  # false
+        %57:ptr<uniform, i32, read> = access %x_14, 0u, 0i, 0u
+        %58:i32 = load %57
+        %59:f32 = convert %58
+        %60:vec4<f32> = construct %59
+        store %x_GLF_color, %60
         exit_if  # if_3
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b8 {
-  %b8 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B8: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %56:void = call %main_1
-    %57:vec4<f32> = load %x_GLF_color
-    %58:main_out = construct %57
-    ret %58
+    %63:void = call %main_1
+    %64:vec4<f32> = load %x_GLF_color
+    %65:main_out = construct %64
+    ret %65
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-pre-increment-clamp/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-pre-increment-clamp/0-opt.wgsl.expected.ir.msl
index 3d14efa..57c2a3d 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-pre-increment-clamp/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-pre-increment-clamp/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,102 +20,125 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_9:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_14:ptr<uniform, buf1, read> = var @binding_point(0, 1)
 }
 
-%f1_f1_ = func(%a:ptr<function, f32, read_write>):f32 -> %b2 {
-  %b2 = block {
+%f1_f1_ = func(%a:ptr<function, f32, read_write>):f32 {
+  $B2: {
     %b:ptr<function, i32, read_write> = var
     %c:ptr<function, f32, read_write> = var
     store %b, 8i
-    %x_71:f32 = load_vector_element %gl_FragCoord, 1u
-    %10:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
-    %x_73:f32 = load %10
-    %12:bool = gte %x_71, %x_73
-    if %12 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %x_77:i32 = load %b
-        %14:i32 = add %x_77, 1i
-        store %b, %14
-        %x_79:i32 = load %b
-        %16:i32 = add %x_79, 1i
-        store %b, %16
+    %9:f32 = load_vector_element %gl_FragCoord, 1u
+    %x_71:f32 = let %9
+    %11:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
+    %12:f32 = load %11
+    %x_73:f32 = let %12
+    %14:bool = gte %x_71, %x_73
+    if %14 [t: $B3] {  # if_1
+      $B3: {  # true
+        %15:i32 = load %b
+        %x_77:i32 = let %15
+        %17:i32 = add %x_77, 1i
+        store %b, %17
+        %18:i32 = load %b
+        %x_79:i32 = let %18
+        %20:i32 = add %x_79, 1i
+        store %b, %20
         exit_if  # if_1
       }
     }
-    %x_81:f32 = load %a
-    %18:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
-    %x_83:f32 = load %18
-    %20:bool = lt %x_81, %x_83
-    if %20 [t: %b4] {  # if_2
-      %b4 = block {  # true
-        %21:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
-        %x_88:f32 = load %21
+    %21:f32 = load %a
+    %x_81:f32 = let %21
+    %23:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
+    %24:f32 = load %23
+    %x_83:f32 = let %24
+    %26:bool = lt %x_81, %x_83
+    if %26 [t: $B4] {  # if_2
+      $B4: {  # true
+        %27:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
+        %28:f32 = load %27
+        %x_88:f32 = let %28
         ret %x_88
       }
     }
-    %x_89:i32 = load %b
-    %24:i32 = clamp %x_89, 0i, 2i
-    %25:f32 = convert %24
-    store %c, %25
-    %x_92:f32 = load %c
+    %30:i32 = load %b
+    %x_89:i32 = let %30
+    %32:i32 = max %x_89, 0i
+    %33:i32 = min %32, 2i
+    %34:f32 = convert %33
+    store %c, %34
+    %35:f32 = load %c
+    %x_92:f32 = let %35
     ret %x_92
   }
 }
-%main_1 = func():void -> %b5 {
-  %b5 = block {
+%main_1 = func():void {
+  $B5: {
     %a_1:ptr<function, f32, read_write> = var
     %param:ptr<function, f32, read_write> = var
-    %30:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
-    %x_43:f32 = load %30
+    %40:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
+    %41:f32 = load %40
+    %x_43:f32 = let %41
     store %param, %x_43
-    %x_44:f32 = call %f1_f1_, %param
+    %43:f32 = call %f1_f1_, %param
+    %x_44:f32 = let %43
     store %a_1, %x_44
-    %x_45:f32 = load %a_1
-    %34:ptr<uniform, f32, read> = access %x_9, 0u, 2i, 0u
-    %x_47:f32 = load %34
-    %36:bool = eq %x_45, %x_47
-    if %36 [t: %b6, f: %b7] {  # if_3
-      %b6 = block {  # true
-        %37:ptr<uniform, i32, read> = access %x_14, 0u, 1i, 0u
-        %x_53:i32 = load %37
-        %39:ptr<uniform, i32, read> = access %x_14, 0u, 0i, 0u
-        %x_56:i32 = load %39
-        %41:ptr<uniform, i32, read> = access %x_14, 0u, 0i, 0u
-        %x_59:i32 = load %41
-        %43:ptr<uniform, i32, read> = access %x_14, 0u, 1i, 0u
-        %x_62:i32 = load %43
-        %45:f32 = convert %x_53
-        %46:f32 = convert %x_56
-        %47:f32 = convert %x_59
-        %48:f32 = convert %x_62
-        %49:vec4<f32> = construct %45, %46, %47, %48
-        store %x_GLF_color, %49
+    %45:f32 = load %a_1
+    %x_45:f32 = let %45
+    %47:ptr<uniform, f32, read> = access %x_9, 0u, 2i, 0u
+    %48:f32 = load %47
+    %x_47:f32 = let %48
+    %50:bool = eq %x_45, %x_47
+    if %50 [t: $B6, f: $B7] {  # if_3
+      $B6: {  # true
+        %51:ptr<uniform, i32, read> = access %x_14, 0u, 1i, 0u
+        %52:i32 = load %51
+        %x_53:i32 = let %52
+        %54:ptr<uniform, i32, read> = access %x_14, 0u, 0i, 0u
+        %55:i32 = load %54
+        %x_56:i32 = let %55
+        %57:ptr<uniform, i32, read> = access %x_14, 0u, 0i, 0u
+        %58:i32 = load %57
+        %x_59:i32 = let %58
+        %60:ptr<uniform, i32, read> = access %x_14, 0u, 1i, 0u
+        %61:i32 = load %60
+        %x_62:i32 = let %61
+        %63:f32 = convert %x_53
+        %64:f32 = let %63
+        %65:f32 = convert %x_56
+        %66:f32 = let %65
+        %67:f32 = convert %x_59
+        %68:f32 = let %67
+        %69:f32 = convert %x_62
+        %70:vec4<f32> = construct %64, %66, %68, %69
+        store %x_GLF_color, %70
         exit_if  # if_3
       }
-      %b7 = block {  # false
-        %50:ptr<uniform, i32, read> = access %x_14, 0u, 0i, 0u
-        %x_66:i32 = load %50
-        %x_67:f32 = convert %x_66
-        %53:vec4<f32> = construct %x_67, %x_67, %x_67, %x_67
-        store %x_GLF_color, %53
+      $B7: {  # false
+        %71:ptr<uniform, i32, read> = access %x_14, 0u, 0i, 0u
+        %72:i32 = load %71
+        %x_66:i32 = let %72
+        %74:f32 = convert %x_66
+        %x_67:f32 = let %74
+        %76:vec4<f32> = construct %x_67, %x_67, %x_67, %x_67
+        store %x_GLF_color, %76
         exit_if  # if_3
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b8 {
-  %b8 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B8: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %56:void = call %main_1
-    %57:vec4<f32> = load %x_GLF_color
-    %58:main_out = construct %57
-    ret %58
+    %79:void = call %main_1
+    %80:vec4<f32> = load %x_GLF_color
+    %81:main_out = construct %80
+    ret %81
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ternary-vector-access/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ternary-vector-access/0-opt.spvasm.expected.ir.msl
index bcd5434..ff1eab8 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ternary-vector-access/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ternary-vector-access/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,15 +20,15 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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
   %x_10:ptr<uniform, buf1, read> = var @binding_point(0, 1)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %b:ptr<function, f32, read_write> = var
     %8:f32 = load_vector_element %gl_FragCoord, 1u
@@ -51,43 +51,46 @@
     %23:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
     %24:f32 = load %23
     %25:bool = eq %22, %24
-    if %25 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    if %25 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         %26:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
         %27:i32 = load %26
         %28:f32 = convert %27
-        %29:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %30:i32 = load %29
-        %31:f32 = convert %30
-        %32:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %33:i32 = load %32
-        %34:f32 = convert %33
-        %35:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %36:i32 = load %35
-        %37:f32 = convert %36
-        %38:vec4<f32> = construct %28, %31, %34, %37
-        store %x_GLF_color, %38
+        %29:f32 = let %28
+        %30:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %31:i32 = load %30
+        %32:f32 = convert %31
+        %33:f32 = let %32
+        %34:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %35:i32 = load %34
+        %36:f32 = convert %35
+        %37:f32 = let %36
+        %38:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %39:i32 = load %38
+        %40:f32 = convert %39
+        %41:vec4<f32> = construct %29, %33, %37, %40
+        store %x_GLF_color, %41
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %39:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %40:i32 = load %39
-        %41:f32 = convert %40
-        %42:vec4<f32> = construct %41
-        store %x_GLF_color, %42
+      $B4: {  # false
+        %42:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %43:i32 = load %42
+        %44:f32 = convert %43
+        %45:vec4<f32> = construct %44
+        store %x_GLF_color, %45
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b5 {
-  %b5 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B5: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %45:void = call %main_1
-    %46:vec4<f32> = load %x_GLF_color
-    %47:main_out = construct %46
-    ret %47
+    %48:void = call %main_1
+    %49:vec4<f32> = load %x_GLF_color
+    %50:main_out = construct %49
+    ret %50
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ternary-vector-access/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ternary-vector-access/0-opt.wgsl.expected.ir.msl
index 7d23c68..10be52a 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ternary-vector-access/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ternary-vector-access/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,74 +20,91 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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
   %x_10:ptr<uniform, buf1, read> = var @binding_point(0, 1)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %b:ptr<function, f32, read_write> = var
-    %x_39:f32 = load_vector_element %gl_FragCoord, 1u
-    %9:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-    %x_41:f32 = load %9
-    %11:bool = gte %x_39, %x_41
-    %12:i32 = select 2i, 0i, %11
-    store %a, %12
-    %13:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
-    %x_45:f32 = load %13
-    %15:ptr<uniform, f32, read> = access %x_7, 0u, 2i, 0u
-    %x_47:f32 = load %15
-    %17:ptr<uniform, f32, read> = access %x_7, 0u, 3i, 0u
-    %x_49:f32 = load %17
-    %x_51:i32 = load %a
-    %20:vec3<f32> = construct %x_45, %x_47, %x_49
-    %21:f32 = access %20, %x_51
-    store %b, %21
-    %x_53:f32 = load %b
-    %23:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
-    %x_55:f32 = load %23
-    %25:bool = eq %x_53, %x_55
-    if %25 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %26:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %x_61:i32 = load %26
-        %28:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %x_64:i32 = load %28
-        %30:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %x_67:i32 = load %30
-        %32:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %x_70:i32 = load %32
-        %34:f32 = convert %x_61
-        %35:f32 = convert %x_64
-        %36:f32 = convert %x_67
-        %37:f32 = convert %x_70
-        %38:vec4<f32> = construct %34, %35, %36, %37
-        store %x_GLF_color, %38
+    %8:f32 = load_vector_element %gl_FragCoord, 1u
+    %x_39:f32 = let %8
+    %10:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
+    %11:f32 = load %10
+    %x_41:f32 = let %11
+    %13:bool = gte %x_39, %x_41
+    %14:i32 = select 2i, 0i, %13
+    store %a, %14
+    %15:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
+    %16:f32 = load %15
+    %x_45:f32 = let %16
+    %18:ptr<uniform, f32, read> = access %x_7, 0u, 2i, 0u
+    %19:f32 = load %18
+    %x_47:f32 = let %19
+    %21:ptr<uniform, f32, read> = access %x_7, 0u, 3i, 0u
+    %22:f32 = load %21
+    %x_49:f32 = let %22
+    %24:i32 = load %a
+    %x_51:i32 = let %24
+    %26:vec3<f32> = construct %x_45, %x_47, %x_49
+    %27:f32 = access %26, %x_51
+    store %b, %27
+    %28:f32 = load %b
+    %x_53:f32 = let %28
+    %30:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
+    %31:f32 = load %30
+    %x_55:f32 = let %31
+    %33:bool = eq %x_53, %x_55
+    if %33 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %34:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %35:i32 = load %34
+        %x_61:i32 = let %35
+        %37:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %38:i32 = load %37
+        %x_64:i32 = let %38
+        %40:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %41:i32 = load %40
+        %x_67:i32 = let %41
+        %43:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %44:i32 = load %43
+        %x_70:i32 = let %44
+        %46:f32 = convert %x_61
+        %47:f32 = let %46
+        %48:f32 = convert %x_64
+        %49:f32 = let %48
+        %50:f32 = convert %x_67
+        %51:f32 = let %50
+        %52:f32 = convert %x_70
+        %53:vec4<f32> = construct %47, %49, %51, %52
+        store %x_GLF_color, %53
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %39:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %x_74:i32 = load %39
-        %x_75:f32 = convert %x_74
-        %42:vec4<f32> = construct %x_75, %x_75, %x_75, %x_75
-        store %x_GLF_color, %42
+      $B4: {  # false
+        %54:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %55:i32 = load %54
+        %x_74:i32 = let %55
+        %57:f32 = convert %x_74
+        %x_75:f32 = let %57
+        %59:vec4<f32> = construct %x_75, %x_75, %x_75, %x_75
+        store %x_GLF_color, %59
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b5 {
-  %b5 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B5: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %45:void = call %main_1
-    %46:vec4<f32> = load %x_GLF_color
-    %47:main_out = construct %46
-    ret %47
+    %62:void = call %main_1
+    %63:vec4<f32> = load %x_GLF_color
+    %64:main_out = construct %63
+    ret %64
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-while-modulo/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-while-modulo/0-opt.spvasm.expected.ir.msl
index 5d298f9..1770869 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-while-modulo/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-while-modulo/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,74 +20,91 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_8:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %i:ptr<function, i32, read_write> = var
     %6:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
     %7:i32 = load %6
     store %i, %7
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %8:i32 = load %i
         %9:bool = gte %8, 0i
-        if %9 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %9 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
         %10:i32 = load %i
-        %11:i32 = mod %10, 2i
-        %12:bool = eq %11, 0i
-        if %12 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
-            %13:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-            %14:i32 = load %13
-            %15:f32 = convert %14
-            %16:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-            %17:i32 = load %16
-            %18:f32 = convert %17
-            %19:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-            %20:i32 = load %19
-            %21:f32 = convert %20
-            %22:vec4<f32> = construct 1.0f, %15, %18, %21
-            store %x_GLF_color, %22
-            exit_if  # if_2
-          }
-          %b8 = block {  # false
-            %23:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-            %24:f32 = load %23
-            %25:vec4<f32> = construct %24
+        %11:i32 = call %tint_mod_i32, %10, 2i
+        %13:bool = eq %11, 0i
+        if %13 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
+            %14:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+            %15:i32 = load %14
+            %16:f32 = convert %15
+            %17:f32 = let %16
+            %18:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+            %19:i32 = load %18
+            %20:f32 = convert %19
+            %21:f32 = let %20
+            %22:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+            %23:i32 = load %22
+            %24:f32 = convert %23
+            %25:vec4<f32> = construct 1.0f, %17, %21, %24
             store %x_GLF_color, %25
             exit_if  # if_2
           }
+          $B8: {  # false
+            %26:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+            %27:f32 = load %26
+            %28:vec4<f32> = construct %27
+            store %x_GLF_color, %28
+            exit_if  # if_2
+          }
         }
-        %26:i32 = load %i
-        %27:i32 = sub %26, 1i
-        store %i, %27
-        continue %b4
+        %29:i32 = load %i
+        %30:i32 = sub %29, 1i
+        store %i, %30
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b9 {
-  %b9 = block {
-    %29:void = call %main_1
-    %30:vec4<f32> = load %x_GLF_color
-    %31:main_out = construct %30
-    ret %31
+%tint_symbol = @fragment func():main_out {
+  $B9: {
+    %32:void = call %main_1
+    %33:vec4<f32> = load %x_GLF_color
+    %34:main_out = construct %33
+    ret %34
+  }
+}
+%tint_mod_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B10: {
+    %37:bool = eq %rhs, 0i
+    %38:bool = eq %lhs, -2147483648i
+    %39:bool = eq %rhs, -1i
+    %40:bool = and %38, %39
+    %41:bool = or %37, %40
+    %42:i32 = select %rhs, 1i, %41
+    %43:i32 = let %42
+    %44:i32 = div %lhs, %43
+    %45:i32 = mul %44, %43
+    %46:i32 = sub %lhs, %45
+    ret %46
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-while-modulo/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-while-modulo/0-opt.wgsl.expected.ir.msl
index 7886fe4..9f60cf7 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-while-modulo/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-while-modulo/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,74 +20,99 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_8:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %i:ptr<function, i32, read_write> = var
     %6:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_32:i32 = load %6
+    %7:i32 = load %6
+    %x_32:i32 = let %7
     store %i, %x_32
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_37:i32 = load %i
-        %9:bool = gte %x_37, 0i
-        if %9 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %9:i32 = load %i
+        %x_37:i32 = let %9
+        %11:bool = gte %x_37, 0i
+        if %11 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_40:i32 = load %i
-        %11:i32 = mod %x_40, 2i
-        %12:bool = eq %11, 0i
-        if %12 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
-            %13:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-            %x_47:i32 = load %13
-            %15:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-            %x_50:i32 = load %15
-            %17:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-            %x_53:i32 = load %17
-            %19:f32 = convert %x_47
-            %20:f32 = convert %x_50
-            %21:f32 = convert %x_53
-            %22:vec4<f32> = construct 1.0f, %19, %20, %21
-            store %x_GLF_color, %22
+        %12:i32 = load %i
+        %x_40:i32 = let %12
+        %14:i32 = call %tint_mod_i32, %x_40, 2i
+        %16:bool = eq %14, 0i
+        if %16 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
+            %17:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+            %18:i32 = load %17
+            %x_47:i32 = let %18
+            %20:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+            %21:i32 = load %20
+            %x_50:i32 = let %21
+            %23:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+            %24:i32 = load %23
+            %x_53:i32 = let %24
+            %26:f32 = convert %x_47
+            %27:f32 = let %26
+            %28:f32 = convert %x_50
+            %29:f32 = let %28
+            %30:f32 = convert %x_53
+            %31:vec4<f32> = construct 1.0f, %27, %29, %30
+            store %x_GLF_color, %31
             exit_if  # if_2
           }
-          %b8 = block {  # false
-            %23:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-            %x_57:f32 = load %23
-            %25:vec4<f32> = construct %x_57, %x_57, %x_57, %x_57
-            store %x_GLF_color, %25
+          $B8: {  # false
+            %32:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+            %33:f32 = load %32
+            %x_57:f32 = let %33
+            %35:vec4<f32> = construct %x_57, %x_57, %x_57, %x_57
+            store %x_GLF_color, %35
             exit_if  # if_2
           }
         }
-        %x_59:i32 = load %i
-        %27:i32 = sub %x_59, 1i
-        store %i, %27
-        continue %b4
+        %36:i32 = load %i
+        %x_59:i32 = let %36
+        %38:i32 = sub %x_59, 1i
+        store %i, %38
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b9 {
-  %b9 = block {
-    %29:void = call %main_1
-    %30:vec4<f32> = load %x_GLF_color
-    %31:main_out = construct %30
-    ret %31
+%tint_symbol = @fragment func():main_out {
+  $B9: {
+    %40:void = call %main_1
+    %41:vec4<f32> = load %x_GLF_color
+    %42:main_out = construct %41
+    ret %42
+  }
+}
+%tint_mod_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B10: {
+    %45:bool = eq %rhs, 0i
+    %46:bool = eq %lhs, -2147483648i
+    %47:bool = eq %rhs, -1i
+    %48:bool = and %46, %47
+    %49:bool = or %45, %48
+    %50:i32 = select %rhs, 1i, %49
+    %51:i32 = let %50
+    %52:i32 = div %lhs, %51
+    %53:i32 = mul %52, %51
+    %54:i32 = sub %lhs, %53
+    ret %54
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-pack-unpack/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-pack-unpack/0-opt.spvasm.expected.ir.msl
index b19ecfd..29dd7bf 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-pack-unpack/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-pack-unpack/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,14 +20,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, u32, read_write> = var
     %v1:ptr<function, vec4<f32>, read_write> = var
     %E:ptr<function, f32, read_write> = var
@@ -59,112 +59,116 @@
     %30:f32 = sub %24, %29
     %31:f32 = abs %30
     %32:f32 = load %E
-    %x_60:bool = lt %31, %32
+    %33:bool = lt %31, %32
+    %x_60:bool = let %33
     store %x_76, %x_60
-    if %x_60 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %34:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %35:i32 = load %34
-        %36:f32 = load_vector_element %v1, %35
-        %37:ptr<uniform, f32, read> = access %x_6, 0u, 4i, 0u
-        %38:f32 = load %37
-        %39:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
-        %40:f32 = load %39
-        %41:f32 = div %38, %40
-        %42:f32 = sub %36, %41
-        %43:f32 = abs %42
-        %44:f32 = load %E
-        %45:bool = lt %43, %44
-        store %x_75, %45
-        %46:bool = load %x_75
-        store %x_76, %46
+    if %x_60 [t: $B3] {  # if_1
+      $B3: {  # true
+        %35:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %36:i32 = load %35
+        %37:f32 = load_vector_element %v1, %36
+        %38:ptr<uniform, f32, read> = access %x_6, 0u, 4i, 0u
+        %39:f32 = load %38
+        %40:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
+        %41:f32 = load %40
+        %42:f32 = div %39, %41
+        %43:f32 = sub %37, %42
+        %44:f32 = abs %43
+        %45:f32 = load %E
+        %46:bool = lt %44, %45
+        store %x_75, %46
+        %47:bool = load %x_75
+        store %x_76, %47
         exit_if  # if_1
       }
     }
-    %47:bool = load %x_76
-    store %x_93, %47
     %48:bool = load %x_76
-    if %48 [t: %b4] {  # if_2
-      %b4 = block {  # true
-        %49:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
-        %50:i32 = load %49
-        %51:f32 = load_vector_element %v1, %50
-        %52:ptr<uniform, f32, read> = access %x_6, 0u, 5i, 0u
-        %53:f32 = load %52
-        %54:f32 = negation %53
-        %55:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
-        %56:f32 = load %55
-        %57:f32 = div %54, %56
-        %58:f32 = sub %51, %57
-        %59:f32 = abs %58
-        %60:f32 = load %E
-        %61:bool = lt %59, %60
-        store %x_92, %61
-        %62:bool = load %x_92
-        store %x_93, %62
+    store %x_93, %48
+    %49:bool = load %x_76
+    if %49 [t: $B4] {  # if_2
+      $B4: {  # true
+        %50:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
+        %51:i32 = load %50
+        %52:f32 = load_vector_element %v1, %51
+        %53:ptr<uniform, f32, read> = access %x_6, 0u, 5i, 0u
+        %54:f32 = load %53
+        %55:f32 = negation %54
+        %56:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
+        %57:f32 = load %56
+        %58:f32 = div %55, %57
+        %59:f32 = sub %52, %58
+        %60:f32 = abs %59
+        %61:f32 = load %E
+        %62:bool = lt %60, %61
+        store %x_92, %62
+        %63:bool = load %x_92
+        store %x_93, %63
         exit_if  # if_2
       }
     }
-    %63:bool = load %x_93
-    store %x_110, %63
     %64:bool = load %x_93
-    if %64 [t: %b5] {  # if_3
-      %b5 = block {  # true
-        %65:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %66:i32 = load %65
-        %67:f32 = load_vector_element %v1, %66
-        %68:ptr<uniform, f32, read> = access %x_6, 0u, 6i, 0u
-        %69:f32 = load %68
-        %70:f32 = negation %69
-        %71:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
-        %72:f32 = load %71
-        %73:f32 = div %70, %72
-        %74:f32 = sub %67, %73
-        %75:f32 = abs %74
-        %76:f32 = load %E
-        %77:bool = lt %75, %76
-        store %x_109, %77
-        %78:bool = load %x_109
-        store %x_110, %78
+    store %x_110, %64
+    %65:bool = load %x_93
+    if %65 [t: $B5] {  # if_3
+      $B5: {  # true
+        %66:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %67:i32 = load %66
+        %68:f32 = load_vector_element %v1, %67
+        %69:ptr<uniform, f32, read> = access %x_6, 0u, 6i, 0u
+        %70:f32 = load %69
+        %71:f32 = negation %70
+        %72:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
+        %73:f32 = load %72
+        %74:f32 = div %71, %73
+        %75:f32 = sub %68, %74
+        %76:f32 = abs %75
+        %77:f32 = load %E
+        %78:bool = lt %76, %77
+        store %x_109, %78
+        %79:bool = load %x_109
+        store %x_110, %79
         exit_if  # if_3
       }
     }
-    %79:bool = load %x_110
-    if %79 [t: %b6, f: %b7] {  # if_4
-      %b6 = block {  # true
-        %80:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %81:i32 = load %80
-        %82:f32 = convert %81
-        %83:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-        %84:i32 = load %83
-        %85:f32 = convert %84
-        %86:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-        %87:i32 = load %86
-        %88:f32 = convert %87
-        %89:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+    %80:bool = load %x_110
+    if %80 [t: $B6, f: $B7] {  # if_4
+      $B6: {  # true
+        %81:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %82:i32 = load %81
+        %83:f32 = convert %82
+        %84:f32 = let %83
+        %85:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+        %86:i32 = load %85
+        %87:f32 = convert %86
+        %88:f32 = let %87
+        %89:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
         %90:i32 = load %89
         %91:f32 = convert %90
-        %92:vec4<f32> = construct %82, %85, %88, %91
-        store %x_GLF_color, %92
+        %92:f32 = let %91
+        %93:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %94:i32 = load %93
+        %95:f32 = convert %94
+        %96:vec4<f32> = construct %84, %88, %92, %95
+        store %x_GLF_color, %96
         exit_if  # if_4
       }
-      %b7 = block {  # false
-        %93:ptr<uniform, f32, read> = access %x_6, 0u, 5i, 0u
-        %94:f32 = load %93
-        %95:vec4<f32> = construct %94
-        store %x_GLF_color, %95
+      $B7: {  # false
+        %97:ptr<uniform, f32, read> = access %x_6, 0u, 5i, 0u
+        %98:f32 = load %97
+        %99:vec4<f32> = construct %98
+        store %x_GLF_color, %99
         exit_if  # if_4
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b8 {
-  %b8 = block {
-    %97:void = call %main_1
-    %98:vec4<f32> = load %x_GLF_color
-    %99:main_out = construct %98
-    ret %99
+%tint_symbol = @fragment func():main_out {
+  $B8: {
+    %101:void = call %main_1
+    %102:vec4<f32> = load %x_GLF_color
+    %103:main_out = construct %102
+    ret %103
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-pack-unpack/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-pack-unpack/0-opt.wgsl.expected.ir.msl
index 9b48dfd..2d6e74a 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-pack-unpack/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-pack-unpack/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,14 +20,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, u32, read_write> = var
     %v1:ptr<function, vec4<f32>, read_write> = var
     %E:ptr<function, f32, read_write> = var
@@ -38,131 +38,166 @@
     %x_93_phi:ptr<function, bool, read_write> = var
     %x_110_phi:ptr<function, bool, read_write> = var
     %14:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_41:f32 = load %14
-    %16:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-    %x_43:f32 = load %16
-    %18:vec2<f32> = construct %x_41, %x_43
-    %19:u32 = pack2x16unorm %18
-    store %a, %19
-    %x_46:u32 = load %a
-    %21:vec4<f32> = unpack4x8snorm %x_46
-    store %v1, %21
+    %15:f32 = load %14
+    %x_41:f32 = let %15
+    %17:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+    %18:f32 = load %17
+    %x_43:f32 = let %18
+    %20:vec2<f32> = construct %x_41, %x_43
+    %21:u32 = pack2x16unorm %20
+    store %a, %21
+    %22:u32 = load %a
+    %x_46:u32 = let %22
+    %24:vec4<f32> = unpack4x8snorm %x_46
+    store %v1, %24
     store %E, 0.00999999977648258209f
-    %22:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-    %x_49:i32 = load %22
-    %x_51:f32 = load_vector_element %v1, %x_49
-    %25:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
-    %x_53:f32 = load %25
-    %27:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
-    %x_55:f32 = load %27
-    %x_59:f32 = load %E
-    %30:f32 = div %x_53, %x_55
-    %31:f32 = sub %x_51, %30
-    %32:f32 = abs %31
-    %x_60:bool = lt %32, %x_59
+    %25:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+    %26:i32 = load %25
+    %x_49:i32 = let %26
+    %28:f32 = load_vector_element %v1, %x_49
+    %x_51:f32 = let %28
+    %30:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
+    %31:f32 = load %30
+    %x_53:f32 = let %31
+    %33:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
+    %34:f32 = load %33
+    %x_55:f32 = let %34
+    %36:f32 = load %E
+    %x_59:f32 = let %36
+    %38:f32 = div %x_53, %x_55
+    %39:f32 = sub %x_51, %38
+    %40:f32 = abs %39
+    %41:bool = lt %40, %x_59
+    %x_60:bool = let %41
     store %x_76_phi, %x_60
-    if %x_60 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %34:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %x_64:i32 = load %34
-        %x_66:f32 = load_vector_element %v1, %x_64
-        %37:ptr<uniform, f32, read> = access %x_6, 0u, 4i, 0u
-        %x_68:f32 = load %37
-        %39:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
-        %x_70:f32 = load %39
-        %x_74:f32 = load %E
-        %42:f32 = div %x_68, %x_70
-        %43:f32 = sub %x_66, %42
-        %44:f32 = abs %43
-        %45:bool = lt %44, %x_74
-        store %x_75, %45
-        %46:bool = load %x_75
-        store %x_76_phi, %46
+    if %x_60 [t: $B3] {  # if_1
+      $B3: {  # true
+        %43:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %44:i32 = load %43
+        %x_64:i32 = let %44
+        %46:f32 = load_vector_element %v1, %x_64
+        %x_66:f32 = let %46
+        %48:ptr<uniform, f32, read> = access %x_6, 0u, 4i, 0u
+        %49:f32 = load %48
+        %x_68:f32 = let %49
+        %51:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
+        %52:f32 = load %51
+        %x_70:f32 = let %52
+        %54:f32 = load %E
+        %x_74:f32 = let %54
+        %56:f32 = div %x_68, %x_70
+        %57:f32 = sub %x_66, %56
+        %58:f32 = abs %57
+        %59:bool = lt %58, %x_74
+        store %x_75, %59
+        %60:bool = load %x_75
+        store %x_76_phi, %60
         exit_if  # if_1
       }
     }
-    %x_76:bool = load %x_76_phi
+    %61:bool = load %x_76_phi
+    %x_76:bool = let %61
     store %x_93_phi, %x_76
-    if %x_76 [t: %b4] {  # if_2
-      %b4 = block {  # true
-        %48:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
-        %x_80:i32 = load %48
-        %x_82:f32 = load_vector_element %v1, %x_80
-        %51:ptr<uniform, f32, read> = access %x_6, 0u, 5i, 0u
-        %x_84:f32 = load %51
-        %53:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
-        %x_87:f32 = load %53
-        %x_91:f32 = load %E
-        %56:f32 = negation %x_84
-        %57:f32 = div %56, %x_87
-        %58:f32 = sub %x_82, %57
-        %59:f32 = abs %58
-        %60:bool = lt %59, %x_91
-        store %x_92, %60
-        %61:bool = load %x_92
-        store %x_93_phi, %61
+    if %x_76 [t: $B4] {  # if_2
+      $B4: {  # true
+        %63:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
+        %64:i32 = load %63
+        %x_80:i32 = let %64
+        %66:f32 = load_vector_element %v1, %x_80
+        %x_82:f32 = let %66
+        %68:ptr<uniform, f32, read> = access %x_6, 0u, 5i, 0u
+        %69:f32 = load %68
+        %x_84:f32 = let %69
+        %71:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
+        %72:f32 = load %71
+        %x_87:f32 = let %72
+        %74:f32 = load %E
+        %x_91:f32 = let %74
+        %76:f32 = negation %x_84
+        %77:f32 = div %76, %x_87
+        %78:f32 = sub %x_82, %77
+        %79:f32 = abs %78
+        %80:bool = lt %79, %x_91
+        store %x_92, %80
+        %81:bool = load %x_92
+        store %x_93_phi, %81
         exit_if  # if_2
       }
     }
-    %x_93:bool = load %x_93_phi
+    %82:bool = load %x_93_phi
+    %x_93:bool = let %82
     store %x_110_phi, %x_93
-    if %x_93 [t: %b5] {  # if_3
-      %b5 = block {  # true
-        %63:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %x_97:i32 = load %63
-        %x_99:f32 = load_vector_element %v1, %x_97
-        %66:ptr<uniform, f32, read> = access %x_6, 0u, 6i, 0u
-        %x_101:f32 = load %66
-        %68:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
-        %x_104:f32 = load %68
-        %x_108:f32 = load %E
-        %71:f32 = negation %x_101
-        %72:f32 = div %71, %x_104
-        %73:f32 = sub %x_99, %72
-        %74:f32 = abs %73
-        %75:bool = lt %74, %x_108
-        store %x_109, %75
-        %76:bool = load %x_109
-        store %x_110_phi, %76
+    if %x_93 [t: $B5] {  # if_3
+      $B5: {  # true
+        %84:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %85:i32 = load %84
+        %x_97:i32 = let %85
+        %87:f32 = load_vector_element %v1, %x_97
+        %x_99:f32 = let %87
+        %89:ptr<uniform, f32, read> = access %x_6, 0u, 6i, 0u
+        %90:f32 = load %89
+        %x_101:f32 = let %90
+        %92:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
+        %93:f32 = load %92
+        %x_104:f32 = let %93
+        %95:f32 = load %E
+        %x_108:f32 = let %95
+        %97:f32 = negation %x_101
+        %98:f32 = div %97, %x_104
+        %99:f32 = sub %x_99, %98
+        %100:f32 = abs %99
+        %101:bool = lt %100, %x_108
+        store %x_109, %101
+        %102:bool = load %x_109
+        store %x_110_phi, %102
         exit_if  # if_3
       }
     }
-    %x_110:bool = load %x_110_phi
-    if %x_110 [t: %b6, f: %b7] {  # if_4
-      %b6 = block {  # true
-        %78:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %x_115:i32 = load %78
-        %80:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-        %x_118:i32 = load %80
-        %82:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-        %x_121:i32 = load %82
-        %84:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %x_124:i32 = load %84
-        %86:f32 = convert %x_115
-        %87:f32 = convert %x_118
-        %88:f32 = convert %x_121
-        %89:f32 = convert %x_124
-        %90:vec4<f32> = construct %86, %87, %88, %89
-        store %x_GLF_color, %90
+    %103:bool = load %x_110_phi
+    %x_110:bool = let %103
+    if %x_110 [t: $B6, f: $B7] {  # if_4
+      $B6: {  # true
+        %105:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %106:i32 = load %105
+        %x_115:i32 = let %106
+        %108:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+        %109:i32 = load %108
+        %x_118:i32 = let %109
+        %111:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+        %112:i32 = load %111
+        %x_121:i32 = let %112
+        %114:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %115:i32 = load %114
+        %x_124:i32 = let %115
+        %117:f32 = convert %x_115
+        %118:f32 = let %117
+        %119:f32 = convert %x_118
+        %120:f32 = let %119
+        %121:f32 = convert %x_121
+        %122:f32 = let %121
+        %123:f32 = convert %x_124
+        %124:vec4<f32> = construct %118, %120, %122, %123
+        store %x_GLF_color, %124
         exit_if  # if_4
       }
-      %b7 = block {  # false
-        %91:ptr<uniform, f32, read> = access %x_6, 0u, 5i, 0u
-        %x_128:f32 = load %91
-        %93:vec4<f32> = construct %x_128, %x_128, %x_128, %x_128
-        store %x_GLF_color, %93
+      $B7: {  # false
+        %125:ptr<uniform, f32, read> = access %x_6, 0u, 5i, 0u
+        %126:f32 = load %125
+        %x_128:f32 = let %126
+        %128:vec4<f32> = construct %x_128, %x_128, %x_128, %x_128
+        store %x_GLF_color, %128
         exit_if  # if_4
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b8 {
-  %b8 = block {
-    %95:void = call %main_1
-    %96:vec4<f32> = load %x_GLF_color
-    %97:main_out = construct %96
-    ret %97
+%tint_symbol = @fragment func():main_out {
+  $B8: {
+    %130:void = call %main_1
+    %131:vec4<f32> = load %x_GLF_color
+    %132:main_out = construct %131
+    ret %132
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-left-shift-for/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-left-shift-for/0-opt.spvasm.expected.ir.msl
index ee43eee..cfccad9 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-left-shift-for/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-left-shift-for/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,15 +20,15 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_9:ptr<uniform, buf1, read> = var @binding_point(0, 1)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %i:ptr<function, i32, read_write> = var
     %7:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
     %8:i32 = load %7
@@ -41,71 +41,76 @@
     %14:bool = gte %11, %13
     %15:i32 = select 1i, 2i, %14
     %16:u32 = bitcast %15
-    %17:i32 = shiftl 1i, %16
-    store %i, %17
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    %17:u32 = and %16, 31u
+    %18:i32 = shl 1i, %17
+    store %i, %18
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %x_57:ptr<function, bool, read_write> = var
         %x_58:ptr<function, bool, read_write> = var
-        %20:i32 = load %i
-        %21:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %22:i32 = load %21
-        %x_51:bool = neq %20, %22
+        %21:i32 = load %i
+        %22:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %23:i32 = load %22
+        %24:bool = neq %21, %23
+        %x_51:bool = let %24
         store %x_58, %x_51
-        if %x_51 [t: %b5] {  # if_1
-          %b5 = block {  # true
-            %24:i32 = load %i
-            %25:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-            %26:i32 = load %25
-            %27:bool = lt %24, %26
-            store %x_57, %27
-            %28:bool = load %x_57
-            store %x_58, %28
+        if %x_51 [t: $B5] {  # if_1
+          $B5: {  # true
+            %26:i32 = load %i
+            %27:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+            %28:i32 = load %27
+            %29:bool = lt %26, %28
+            store %x_57, %29
+            %30:bool = load %x_57
+            store %x_58, %30
             exit_if  # if_1
           }
         }
-        %29:bool = load %x_58
-        if %29 [t: %b6, f: %b7] {  # if_2
-          %b6 = block {  # true
+        %31:bool = load %x_58
+        if %31 [t: $B6, f: $B7] {  # if_2
+          $B6: {  # true
             exit_if  # if_2
           }
-          %b7 = block {  # false
+          $B7: {  # false
             exit_loop  # loop_1
           }
         }
-        %30:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %31:i32 = load %30
-        %32:f32 = convert %31
-        %33:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %34:i32 = load %33
-        %35:f32 = convert %34
+        %32:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %33:i32 = load %32
+        %34:f32 = convert %33
+        %35:f32 = let %34
         %36:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
         %37:i32 = load %36
         %38:f32 = convert %37
-        %39:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %40:i32 = load %39
-        %41:f32 = convert %40
-        %42:vec4<f32> = construct %32, %35, %38, %41
-        store %x_GLF_color, %42
-        continue %b4
+        %39:f32 = let %38
+        %40:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %41:i32 = load %40
+        %42:f32 = convert %41
+        %43:f32 = let %42
+        %44:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %45:i32 = load %44
+        %46:f32 = convert %45
+        %47:vec4<f32> = construct %35, %39, %43, %46
+        store %x_GLF_color, %47
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %43:i32 = load %i
-        %44:i32 = add %43, 1i
-        store %i, %44
-        next_iteration %b3
+      $B4: {  # continuing
+        %48:i32 = load %i
+        %49:i32 = add %48, 1i
+        store %i, %49
+        next_iteration  # -> $B3
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b8 {
-  %b8 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B8: {
     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
+    %52:void = call %main_1
+    %53:vec4<f32> = load %x_GLF_color
+    %54:main_out = construct %53
+    ret %54
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-left-shift-for/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-left-shift-for/0-opt.wgsl.expected.ir.msl
index d4212cb..619d2fb 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-left-shift-for/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-left-shift-for/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,92 +20,111 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_9:ptr<uniform, buf1, read> = var @binding_point(0, 1)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %i:ptr<function, i32, read_write> = var
     %7:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_34:i32 = load %7
-    %x_35:f32 = convert %x_34
-    %10:vec4<f32> = construct %x_35, %x_35, %x_35, %x_35
-    store %x_GLF_color, %10
-    %x_38:f32 = load_vector_element %gl_FragCoord, 1u
-    %12:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
-    %x_40:f32 = load %12
-    %14:bool = gte %x_38, %x_40
-    %15:i32 = select 1i, 2i, %14
-    %16:u32 = bitcast %15
-    %17:i32 = shiftl 1i, %16
-    store %i, %17
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    %8:i32 = load %7
+    %x_34:i32 = let %8
+    %10:f32 = convert %x_34
+    %x_35:f32 = let %10
+    %12:vec4<f32> = construct %x_35, %x_35, %x_35, %x_35
+    store %x_GLF_color, %12
+    %13:f32 = load_vector_element %gl_FragCoord, 1u
+    %x_38:f32 = let %13
+    %15:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
+    %16:f32 = load %15
+    %x_40:f32 = let %16
+    %18:bool = gte %x_38, %x_40
+    %19:i32 = select 1i, 2i, %18
+    %20:u32 = bitcast %19
+    %21:u32 = and %20, 31u
+    %22:i32 = shl 1i, %21
+    store %i, %22
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %x_57:ptr<function, bool, read_write> = var
         %x_58_phi:ptr<function, bool, read_write> = var
-        %x_48:i32 = load %i
-        %21:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_50:i32 = load %21
-        %x_51:bool = neq %x_48, %x_50
+        %25:i32 = load %i
+        %x_48:i32 = let %25
+        %27:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %28:i32 = load %27
+        %x_50:i32 = let %28
+        %30:bool = neq %x_48, %x_50
+        %x_51:bool = let %30
         store %x_58_phi, %x_51
-        if %x_51 [t: %b5] {  # if_1
-          %b5 = block {  # true
-            %x_54:i32 = load %i
-            %25:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-            %x_56:i32 = load %25
-            %27:bool = lt %x_54, %x_56
-            store %x_57, %27
-            %28:bool = load %x_57
-            store %x_58_phi, %28
+        if %x_51 [t: $B5] {  # if_1
+          $B5: {  # true
+            %32:i32 = load %i
+            %x_54:i32 = let %32
+            %34:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+            %35:i32 = load %34
+            %x_56:i32 = let %35
+            %37:bool = lt %x_54, %x_56
+            store %x_57, %37
+            %38:bool = load %x_57
+            store %x_58_phi, %38
             exit_if  # if_1
           }
         }
-        %x_58:bool = load %x_58_phi
-        if %x_58 [t: %b6, f: %b7] {  # if_2
-          %b6 = block {  # true
+        %39:bool = load %x_58_phi
+        %x_58:bool = let %39
+        if %x_58 [t: $B6, f: $B7] {  # if_2
+          $B6: {  # true
             exit_if  # if_2
           }
-          %b7 = block {  # false
+          $B7: {  # false
             exit_loop  # loop_1
           }
         }
-        %30:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_61:i32 = load %30
-        %32:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %x_64:i32 = load %32
-        %34:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %x_67:i32 = load %34
-        %36:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_70:i32 = load %36
-        %38:f32 = convert %x_61
-        %39:f32 = convert %x_64
-        %40:f32 = convert %x_67
-        %41:f32 = convert %x_70
-        %42:vec4<f32> = construct %38, %39, %40, %41
-        store %x_GLF_color, %42
-        continue %b4
+        %41:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %42:i32 = load %41
+        %x_61:i32 = let %42
+        %44:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %45:i32 = load %44
+        %x_64:i32 = let %45
+        %47:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %48:i32 = load %47
+        %x_67:i32 = let %48
+        %50:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %51:i32 = load %50
+        %x_70:i32 = let %51
+        %53:f32 = convert %x_61
+        %54:f32 = let %53
+        %55:f32 = convert %x_64
+        %56:f32 = let %55
+        %57:f32 = convert %x_67
+        %58:f32 = let %57
+        %59:f32 = convert %x_70
+        %60:vec4<f32> = construct %54, %56, %58, %59
+        store %x_GLF_color, %60
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_73:i32 = load %i
-        %44:i32 = add %x_73, 1i
-        store %i, %44
-        next_iteration %b3
+      $B4: {  # continuing
+        %61:i32 = load %i
+        %x_73:i32 = let %61
+        %63:i32 = add %x_73, 1i
+        store %i, %63
+        next_iteration  # -> $B3
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b8 {
-  %b8 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B8: {
     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
+    %66:void = call %main_1
+    %67:vec4<f32> = load %x_GLF_color
+    %68:main_out = construct %67
+    ret %68
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-mix-mix-clamp/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-mix-mix-clamp/0-opt.spvasm.expected.ir.msl
index 98fa981..f95e8a7 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-mix-mix-clamp/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-mix-mix-clamp/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,14 +20,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %A:ptr<function, array<i32, 2>, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %a:ptr<function, i32, read_write> = var
@@ -35,139 +35,160 @@
     %v2:ptr<function, vec2<f32>, read_write> = var
     %b:ptr<function, i32, read_write> = var
     %11:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_46:i32 = load %11
-    %13:ptr<function, i32, read_write> = access %A, %x_46
-    %14:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %15:i32 = load %14
-    store %13, %15
-    %16:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_51:i32 = load %16
-    %18:ptr<function, i32, read_write> = access %A, %x_51
-    %19:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %20:i32 = load %19
-    store %18, %20
-    %21:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %12:i32 = load %11
+    %x_46:i32 = let %12
+    %14:ptr<function, i32, read_write> = access %A, %x_46
+    %15:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %16:i32 = load %15
+    store %14, %16
+    %17:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %18:i32 = load %17
+    %x_51:i32 = let %18
+    %20:ptr<function, i32, read_write> = access %A, %x_51
+    %21:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
     %22:i32 = load %21
-    store %i, %22
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %23:i32 = load %i
-        %24:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %25:i32 = load %24
-        %26:bool = gt %23, %25
-        if %26 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    store %20, %22
+    %23:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %24:i32 = load %23
+    store %i, %24
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %25:i32 = load %i
+        %26:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %27:i32 = load %26
+        %28:bool = gt %25, %27
+        if %28 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %27:i32 = load %i
-        %28:i32 = sub %27, 1i
-        store %i, %28
-        continue %b4
+        %29:i32 = load %i
+        %30:i32 = sub %29, 1i
+        store %i, %30
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
-    %29:i32 = load %i
-    %30:ptr<uniform, f32, read> = access %x_10, 0u, 1i, 0u
-    %31:f32 = load %30
+    %31:i32 = load %i
     %32:ptr<uniform, f32, read> = access %x_10, 0u, 1i, 0u
     %33:f32 = load %32
-    %34:bool = gte %31, %33
-    %35:i32 = select %29, 1i, %34
-    %36:ptr<function, i32, read_write> = access %A, %35
-    %37:i32 = load %36
-    store %a, %37
-    %38:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %34:ptr<uniform, f32, read> = access %x_10, 0u, 1i, 0u
+    %35:f32 = load %34
+    %36:bool = gte %33, %35
+    %37:i32 = select %31, 1i, %36
+    %38:ptr<function, i32, read_write> = access %A, %37
     %39:i32 = load %38
-    %40:f32 = convert %39
-    %41:i32 = load %a
+    store %a, %39
+    %40:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %41:i32 = load %40
     %42:f32 = convert %41
-    %43:vec2<f32> = construct %40, %42
-    %44:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %45:i32 = load %44
-    %46:f32 = convert %45
-    %47:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %48:i32 = load %47
-    %49:f32 = convert %48
-    %50:vec2<f32> = construct %46, %49
-    %51:ptr<uniform, f32, read> = access %x_10, 0u, 1i, 0u
-    %52:f32 = load %51
-    %53:ptr<uniform, f32, read> = access %x_10, 0u, 0i, 0u
-    %54:f32 = load %53
-    %55:bool = lt %52, %54
-    %56:vec2<bool> = construct %55, true
-    %57:vec2<f32> = select %43, %50, %56
-    store %v1, %57
-    %58:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %59:i32 = load %58
-    %60:f32 = load_vector_element %v1, %59
-    %61:vec2<f32> = construct %60
-    %62:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %63:i32 = load %62
-    %64:f32 = load_vector_element %v1, %63
-    %65:vec2<f32> = construct %64
-    %66:vec2<f32> = select %61, %65, vec2<bool>(false)
-    store %v2, %66
-    %67:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %68:i32 = load %67
-    %69:f32 = convert %68
-    %70:vec2<f32> = construct %69
-    %71:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %72:i32 = load %71
-    %73:f32 = convert %72
-    %74:vec2<f32> = construct %73
-    %75:vec2<f32> = load %v2
-    %76:vec2<f32> = clamp %70, %74, %75
-    %77:f32 = access %76, 0u
-    %78:i32 = convert %77
-    %79:ptr<function, i32, read_write> = access %A, %78
+    %43:f32 = let %42
+    %44:i32 = load %a
+    %45:f32 = convert %44
+    %46:vec2<f32> = construct %43, %45
+    %47:vec2<f32> = let %46
+    %48:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %49:i32 = load %48
+    %50:f32 = convert %49
+    %51:f32 = let %50
+    %52:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %53:i32 = load %52
+    %54:f32 = convert %53
+    %55:vec2<f32> = construct %51, %54
+    %56:vec2<f32> = let %55
+    %57:ptr<uniform, f32, read> = access %x_10, 0u, 1i, 0u
+    %58:f32 = load %57
+    %59:ptr<uniform, f32, read> = access %x_10, 0u, 0i, 0u
+    %60:f32 = load %59
+    %61:bool = lt %58, %60
+    %62:vec2<bool> = construct %61, true
+    %63:vec2<f32> = select %47, %56, %62
+    store %v1, %63
+    %64:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %65:i32 = load %64
+    %66:f32 = load_vector_element %v1, %65
+    %67:vec2<f32> = construct %66
+    %68:vec2<f32> = let %67
+    %69:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %70:i32 = load %69
+    %71:f32 = load_vector_element %v1, %70
+    %72:vec2<f32> = construct %71
+    %73:vec2<f32> = select %68, %72, vec2<bool>(false)
+    store %v2, %73
+    %74:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %75:i32 = load %74
+    %76:f32 = convert %75
+    %77:vec2<f32> = construct %76
+    %78:vec2<f32> = let %77
+    %79:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
     %80:i32 = load %79
-    store %b, %80
-    %81:i32 = load %b
-    %82:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %83:i32 = load %82
-    %84:bool = eq %81, %83
-    if %84 [t: %b7, f: %b8] {  # if_2
-      %b7 = block {  # true
-        %85:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %86:i32 = load %85
-        %87:f32 = convert %86
-        %88:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %89:i32 = load %88
-        %90:f32 = convert %89
-        %91:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %92:i32 = load %91
-        %93:f32 = convert %92
+    %81:f32 = convert %80
+    %82:vec2<f32> = construct %81
+    %83:vec2<f32> = load %v2
+    %84:vec2<f32> = clamp %78, %82, %83
+    %85:f32 = access %84, 0u
+    %86:i32 = call %tint_f32_to_i32, %85
+    %88:ptr<function, i32, read_write> = access %A, %86
+    %89:i32 = load %88
+    store %b, %89
+    %90:i32 = load %b
+    %91:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %92:i32 = load %91
+    %93:bool = eq %90, %92
+    if %93 [t: $B7, f: $B8] {  # if_2
+      $B7: {  # true
         %94:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
         %95:i32 = load %94
         %96:f32 = convert %95
-        %97:vec4<f32> = construct %87, %90, %93, %96
-        store %x_GLF_color, %97
-        exit_if  # if_2
-      }
-      %b8 = block {  # false
+        %97:f32 = let %96
         %98:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
         %99:i32 = load %98
         %100:f32 = convert %99
-        %101:vec4<f32> = construct %100
-        store %x_GLF_color, %101
+        %101:f32 = let %100
+        %102:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %103:i32 = load %102
+        %104:f32 = convert %103
+        %105:f32 = let %104
+        %106:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %107:i32 = load %106
+        %108:f32 = convert %107
+        %109:vec4<f32> = construct %97, %101, %105, %108
+        store %x_GLF_color, %109
+        exit_if  # if_2
+      }
+      $B8: {  # false
+        %110:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %111:i32 = load %110
+        %112:f32 = convert %111
+        %113:vec4<f32> = construct %112
+        store %x_GLF_color, %113
         exit_if  # if_2
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b9 {
-  %b9 = block {
-    %103:void = call %main_1
-    %104:vec4<f32> = load %x_GLF_color
-    %105:main_out = construct %104
-    ret %105
+%tint_symbol = @fragment func():main_out {
+  $B9: {
+    %115:void = call %main_1
+    %116:vec4<f32> = load %x_GLF_color
+    %117:main_out = construct %116
+    ret %117
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B10: {
+    %119:i32 = convert %value
+    %120:bool = gte %value, -2147483648.0f
+    %121:i32 = select -2147483648i, %119, %120
+    %122:bool = lte %value, 2147483520.0f
+    %123:i32 = select 2147483647i, %121, %122
+    ret %123
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-mix-mix-clamp/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-mix-mix-clamp/0-opt.wgsl.expected.ir.msl
index 1725006..793617b 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-mix-mix-clamp/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-mix-mix-clamp/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,14 +20,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %A:ptr<function, array<i32, 2>, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %a:ptr<function, i32, read_write> = var
@@ -35,139 +35,194 @@
     %v2:ptr<function, vec2<f32>, read_write> = var
     %b:ptr<function, i32, read_write> = var
     %11:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_46:i32 = load %11
-    %13:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_48:i32 = load %13
-    %15:ptr<function, i32, read_write> = access %A, %x_46
-    store %15, %x_48
-    %16:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_51:i32 = load %16
-    %18:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_53:i32 = load %18
-    %20:ptr<function, i32, read_write> = access %A, %x_51
-    store %20, %x_53
-    %21:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_56:i32 = load %21
+    %12:i32 = load %11
+    %x_46:i32 = let %12
+    %14:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %15:i32 = load %14
+    %x_48:i32 = let %15
+    %17:ptr<function, i32, read_write> = access %A, %x_46
+    store %17, %x_48
+    %18:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %19:i32 = load %18
+    %x_51:i32 = let %19
+    %21:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %22:i32 = load %21
+    %x_53:i32 = let %22
+    %24:ptr<function, i32, read_write> = access %A, %x_51
+    store %24, %x_53
+    %25:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %26:i32 = load %25
+    %x_56:i32 = let %26
     store %i, %x_56
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_61:i32 = load %i
-        %24:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %x_63:i32 = load %24
-        %26:bool = gt %x_61, %x_63
-        if %26 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %28:i32 = load %i
+        %x_61:i32 = let %28
+        %30:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %31:i32 = load %30
+        %x_63:i32 = let %31
+        %33:bool = gt %x_61, %x_63
+        if %33 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_66:i32 = load %i
-        %28:i32 = sub %x_66, 1i
-        store %i, %28
-        continue %b4
+        %34:i32 = load %i
+        %x_66:i32 = let %34
+        %36:i32 = sub %x_66, 1i
+        store %i, %36
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
-    %29:ptr<uniform, f32, read> = access %x_10, 0u, 1i, 0u
-    %x_69:f32 = load %29
-    %31:ptr<uniform, f32, read> = access %x_10, 0u, 1i, 0u
-    %x_71:f32 = load %31
-    %x_73:i32 = load %i
-    %34:bool = gte %x_69, %x_71
-    %35:i32 = select %x_73, 1i, %34
-    %36:ptr<function, i32, read_write> = access %A, %35
-    %x_76:i32 = load %36
+    %37:ptr<uniform, f32, read> = access %x_10, 0u, 1i, 0u
+    %38:f32 = load %37
+    %x_69:f32 = let %38
+    %40:ptr<uniform, f32, read> = access %x_10, 0u, 1i, 0u
+    %41:f32 = load %40
+    %x_71:f32 = let %41
+    %43:i32 = load %i
+    %x_73:i32 = let %43
+    %45:bool = gte %x_69, %x_71
+    %46:i32 = select %x_73, 1i, %45
+    %47:ptr<function, i32, read_write> = access %A, %46
+    %48:i32 = load %47
+    %x_76:i32 = let %48
     store %a, %x_76
-    %38:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_78:i32 = load %38
-    %x_80:i32 = load %a
-    %41:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_84:i32 = load %41
-    %43:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_87:i32 = load %43
-    %45:ptr<uniform, f32, read> = access %x_10, 0u, 1i, 0u
-    %x_91:f32 = load %45
-    %47:ptr<uniform, f32, read> = access %x_10, 0u, 0i, 0u
-    %x_93:f32 = load %47
-    %49:f32 = convert %x_78
-    %50:f32 = convert %x_80
-    %51:vec2<f32> = construct %49, %50
-    %52:f32 = convert %x_84
-    %53:f32 = convert %x_87
-    %54:vec2<f32> = construct %52, %53
-    %55:bool = lt %x_91, %x_93
-    %56:vec2<bool> = construct %55, true
-    %57:vec2<f32> = select %51, %54, %56
-    store %v1, %57
-    %58:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_98:i32 = load %58
-    %x_100:f32 = load_vector_element %v1, %x_98
-    %61:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_103:i32 = load %61
-    %x_105:f32 = load_vector_element %v1, %x_103
-    %64:vec2<f32> = construct %x_100, %x_100
-    %65:vec2<f32> = construct %x_105, %x_105
-    %66:vec2<f32> = select %64, %65, vec2<bool>(false)
-    store %v2, %66
-    %67:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_109:i32 = load %67
-    %x_110:f32 = convert %x_109
-    %70:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_113:i32 = load %70
-    %x_114:f32 = convert %x_113
-    %x_116:vec2<f32> = load %v2
-    %74:vec2<f32> = construct %x_110, %x_110
-    %75:vec2<f32> = construct %x_114, %x_114
-    %76:vec2<f32> = clamp %74, %75, %x_116
-    %77:f32 = access %76, 0u
-    %78:i32 = convert %77
-    %79:ptr<function, i32, read_write> = access %A, %78
-    %x_121:i32 = load %79
+    %50:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %51:i32 = load %50
+    %x_78:i32 = let %51
+    %53:i32 = load %a
+    %x_80:i32 = let %53
+    %55:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %56:i32 = load %55
+    %x_84:i32 = let %56
+    %58:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %59:i32 = load %58
+    %x_87:i32 = let %59
+    %61:ptr<uniform, f32, read> = access %x_10, 0u, 1i, 0u
+    %62:f32 = load %61
+    %x_91:f32 = let %62
+    %64:ptr<uniform, f32, read> = access %x_10, 0u, 0i, 0u
+    %65:f32 = load %64
+    %x_93:f32 = let %65
+    %67:f32 = convert %x_78
+    %68:f32 = let %67
+    %69:f32 = convert %x_80
+    %70:vec2<f32> = construct %68, %69
+    %71:vec2<f32> = let %70
+    %72:f32 = convert %x_84
+    %73:f32 = let %72
+    %74:f32 = convert %x_87
+    %75:vec2<f32> = construct %73, %74
+    %76:vec2<f32> = let %75
+    %77:bool = lt %x_91, %x_93
+    %78:vec2<bool> = construct %77, true
+    %79:vec2<f32> = select %71, %76, %78
+    store %v1, %79
+    %80:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %81:i32 = load %80
+    %x_98:i32 = let %81
+    %83:f32 = load_vector_element %v1, %x_98
+    %x_100:f32 = let %83
+    %85:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %86:i32 = load %85
+    %x_103:i32 = let %86
+    %88:f32 = load_vector_element %v1, %x_103
+    %x_105:f32 = let %88
+    %90:vec2<f32> = construct %x_100, %x_100
+    %91:vec2<f32> = let %90
+    %92:vec2<f32> = construct %x_105, %x_105
+    %93:vec2<f32> = select %91, %92, vec2<bool>(false)
+    store %v2, %93
+    %94:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %95:i32 = load %94
+    %x_109:i32 = let %95
+    %97:f32 = convert %x_109
+    %x_110:f32 = let %97
+    %99:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %100:i32 = load %99
+    %x_113:i32 = let %100
+    %102:f32 = convert %x_113
+    %x_114:f32 = let %102
+    %104:vec2<f32> = load %v2
+    %x_116:vec2<f32> = let %104
+    %106:vec2<f32> = construct %x_110, %x_110
+    %107:vec2<f32> = let %106
+    %108:vec2<f32> = construct %x_114, %x_114
+    %109:vec2<f32> = clamp %107, %108, %x_116
+    %110:f32 = access %109, 0u
+    %111:i32 = call %tint_f32_to_i32, %110
+    %113:ptr<function, i32, read_write> = access %A, %111
+    %114:i32 = load %113
+    %x_121:i32 = let %114
     store %b, %x_121
-    %x_122:i32 = load %b
-    %82:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_124:i32 = load %82
-    %84:bool = eq %x_122, %x_124
-    if %84 [t: %b7, f: %b8] {  # if_2
-      %b7 = block {  # true
-        %85:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_130:i32 = load %85
-        %87:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %x_133:i32 = load %87
-        %89:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %x_136:i32 = load %89
-        %91:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_139:i32 = load %91
-        %93:f32 = convert %x_130
-        %94:f32 = convert %x_133
-        %95:f32 = convert %x_136
-        %96:f32 = convert %x_139
-        %97:vec4<f32> = construct %93, %94, %95, %96
-        store %x_GLF_color, %97
+    %116:i32 = load %b
+    %x_122:i32 = let %116
+    %118:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %119:i32 = load %118
+    %x_124:i32 = let %119
+    %121:bool = eq %x_122, %x_124
+    if %121 [t: $B7, f: $B8] {  # if_2
+      $B7: {  # true
+        %122:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %123:i32 = load %122
+        %x_130:i32 = let %123
+        %125:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %126:i32 = load %125
+        %x_133:i32 = let %126
+        %128:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %129:i32 = load %128
+        %x_136:i32 = let %129
+        %131:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %132:i32 = load %131
+        %x_139:i32 = let %132
+        %134:f32 = convert %x_130
+        %135:f32 = let %134
+        %136:f32 = convert %x_133
+        %137:f32 = let %136
+        %138:f32 = convert %x_136
+        %139:f32 = let %138
+        %140:f32 = convert %x_139
+        %141:vec4<f32> = construct %135, %137, %139, %140
+        store %x_GLF_color, %141
         exit_if  # if_2
       }
-      %b8 = block {  # false
-        %98:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %x_143:i32 = load %98
-        %x_144:f32 = convert %x_143
-        %101:vec4<f32> = construct %x_144, %x_144, %x_144, %x_144
-        store %x_GLF_color, %101
+      $B8: {  # false
+        %142:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %143:i32 = load %142
+        %x_143:i32 = let %143
+        %145:f32 = convert %x_143
+        %x_144:f32 = let %145
+        %147:vec4<f32> = construct %x_144, %x_144, %x_144, %x_144
+        store %x_GLF_color, %147
         exit_if  # if_2
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b9 {
-  %b9 = block {
-    %103:void = call %main_1
-    %104:vec4<f32> = load %x_GLF_color
-    %105:main_out = construct %104
-    ret %105
+%tint_symbol = @fragment func():main_out {
+  $B9: {
+    %149:void = call %main_1
+    %150:vec4<f32> = load %x_GLF_color
+    %151:main_out = construct %150
+    ret %151
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B10: {
+    %153:i32 = convert %value
+    %154:bool = gte %value, -2147483648.0f
+    %155:i32 = select -2147483648i, %153, %154
+    %156:bool = lte %value, 2147483520.0f
+    %157:i32 = select 2147483647i, %155, %156
+    ret %157
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-pack-unpack/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-pack-unpack/0-opt.spvasm.expected.ir.msl
index e0e7445..88c02d8 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-pack-unpack/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-pack-unpack/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,14 +20,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_8: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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, u32, read_write> = var
     %v1:ptr<function, vec4<f32>, read_write> = var
     %E:ptr<function, f32, read_write> = var
@@ -53,111 +53,115 @@
     %24:f32 = sub %18, %23
     %25:f32 = abs %24
     %26:f32 = load %E
-    %x_54:bool = lt %25, %26
+    %27:bool = lt %25, %26
+    %x_54:bool = let %27
     store %x_70, %x_54
-    if %x_54 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %28:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-        %29:i32 = load %28
-        %30:f32 = load_vector_element %v1, %29
-        %31:ptr<uniform, f32, read> = access %x_10, 0u, 2i, 0u
-        %32:f32 = load %31
-        %33:ptr<uniform, f32, read> = access %x_10, 0u, 1i, 0u
-        %34:f32 = load %33
-        %35:f32 = div %32, %34
-        %36:f32 = sub %30, %35
-        %37:f32 = abs %36
-        %38:f32 = load %E
-        %39:bool = lt %37, %38
-        store %x_69, %39
-        %40:bool = load %x_69
-        store %x_70, %40
+    if %x_54 [t: $B3] {  # if_1
+      $B3: {  # true
+        %29:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+        %30:i32 = load %29
+        %31:f32 = load_vector_element %v1, %30
+        %32:ptr<uniform, f32, read> = access %x_10, 0u, 2i, 0u
+        %33:f32 = load %32
+        %34:ptr<uniform, f32, read> = access %x_10, 0u, 1i, 0u
+        %35:f32 = load %34
+        %36:f32 = div %33, %35
+        %37:f32 = sub %31, %36
+        %38:f32 = abs %37
+        %39:f32 = load %E
+        %40:bool = lt %38, %39
+        store %x_69, %40
+        %41:bool = load %x_69
+        store %x_70, %41
         exit_if  # if_1
       }
     }
-    %41:bool = load %x_70
-    store %x_86, %41
     %42:bool = load %x_70
-    if %42 [t: %b4] {  # if_2
-      %b4 = block {  # true
-        %43:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
-        %44:i32 = load %43
-        %45:f32 = load_vector_element %v1, %44
-        %46:ptr<uniform, f32, read> = access %x_10, 0u, 0i, 0u
-        %47:f32 = load %46
-        %48:ptr<uniform, f32, read> = access %x_10, 0u, 1i, 0u
-        %49:f32 = load %48
-        %50:f32 = div %47, %49
-        %51:f32 = sub %45, %50
-        %52:f32 = abs %51
-        %53:f32 = load %E
-        %54:bool = lt %52, %53
-        store %x_85, %54
-        %55:bool = load %x_85
-        store %x_86, %55
+    store %x_86, %42
+    %43:bool = load %x_70
+    if %43 [t: $B4] {  # if_2
+      $B4: {  # true
+        %44:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
+        %45:i32 = load %44
+        %46:f32 = load_vector_element %v1, %45
+        %47:ptr<uniform, f32, read> = access %x_10, 0u, 0i, 0u
+        %48:f32 = load %47
+        %49:ptr<uniform, f32, read> = access %x_10, 0u, 1i, 0u
+        %50:f32 = load %49
+        %51:f32 = div %48, %50
+        %52:f32 = sub %46, %51
+        %53:f32 = abs %52
+        %54:f32 = load %E
+        %55:bool = lt %53, %54
+        store %x_85, %55
+        %56:bool = load %x_85
+        store %x_86, %56
         exit_if  # if_2
       }
     }
-    %56:bool = load %x_86
-    store %x_102, %56
     %57:bool = load %x_86
-    if %57 [t: %b5] {  # if_3
-      %b5 = block {  # true
-        %58:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
-        %59:i32 = load %58
-        %60:f32 = load_vector_element %v1, %59
-        %61:ptr<uniform, f32, read> = access %x_10, 0u, 2i, 0u
-        %62:f32 = load %61
-        %63:ptr<uniform, f32, read> = access %x_10, 0u, 1i, 0u
-        %64:f32 = load %63
-        %65:f32 = div %62, %64
-        %66:f32 = sub %60, %65
-        %67:f32 = abs %66
-        %68:f32 = load %E
-        %69:bool = lt %67, %68
-        store %x_101, %69
-        %70:bool = load %x_101
-        store %x_102, %70
+    store %x_102, %57
+    %58:bool = load %x_86
+    if %58 [t: $B5] {  # if_3
+      $B5: {  # true
+        %59:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
+        %60:i32 = load %59
+        %61:f32 = load_vector_element %v1, %60
+        %62:ptr<uniform, f32, read> = access %x_10, 0u, 2i, 0u
+        %63:f32 = load %62
+        %64:ptr<uniform, f32, read> = access %x_10, 0u, 1i, 0u
+        %65:f32 = load %64
+        %66:f32 = div %63, %65
+        %67:f32 = sub %61, %66
+        %68:f32 = abs %67
+        %69:f32 = load %E
+        %70:bool = lt %68, %69
+        store %x_101, %70
+        %71:bool = load %x_101
+        store %x_102, %71
         exit_if  # if_3
       }
     }
-    %71:bool = load %x_102
-    if %71 [t: %b6, f: %b7] {  # if_4
-      %b6 = block {  # true
-        %72:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-        %73:i32 = load %72
-        %74:f32 = convert %73
-        %75:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-        %76:i32 = load %75
-        %77:f32 = convert %76
-        %78:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-        %79:i32 = load %78
-        %80:f32 = convert %79
-        %81:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+    %72:bool = load %x_102
+    if %72 [t: $B6, f: $B7] {  # if_4
+      $B6: {  # true
+        %73:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+        %74:i32 = load %73
+        %75:f32 = convert %74
+        %76:f32 = let %75
+        %77:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+        %78:i32 = load %77
+        %79:f32 = convert %78
+        %80:f32 = let %79
+        %81:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
         %82:i32 = load %81
         %83:f32 = convert %82
-        %84:vec4<f32> = construct %74, %77, %80, %83
-        store %x_GLF_color, %84
+        %84:f32 = let %83
+        %85:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+        %86:i32 = load %85
+        %87:f32 = convert %86
+        %88:vec4<f32> = construct %76, %80, %84, %87
+        store %x_GLF_color, %88
         exit_if  # if_4
       }
-      %b7 = block {  # false
-        %85:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-        %86:i32 = load %85
-        %87:f32 = load_vector_element %v1, %86
-        %88:vec4<f32> = construct %87
-        store %x_GLF_color, %88
+      $B7: {  # false
+        %89:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+        %90:i32 = load %89
+        %91:f32 = load_vector_element %v1, %90
+        %92:vec4<f32> = construct %91
+        store %x_GLF_color, %92
         exit_if  # if_4
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b8 {
-  %b8 = block {
-    %90:void = call %main_1
-    %91:vec4<f32> = load %x_GLF_color
-    %92:main_out = construct %91
-    ret %92
+%tint_symbol = @fragment func():main_out {
+  $B8: {
+    %94:void = call %main_1
+    %95:vec4<f32> = load %x_GLF_color
+    %96:main_out = construct %95
+    ret %96
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-pack-unpack/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-pack-unpack/0-opt.wgsl.expected.ir.msl
index 4f2423f..30d73da 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-pack-unpack/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-pack-unpack/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,14 +20,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_8: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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, u32, read_write> = var
     %v1:ptr<function, vec4<f32>, read_write> = var
     %E:ptr<function, f32, read_write> = var
@@ -38,124 +38,158 @@
     %x_86_phi:ptr<function, bool, read_write> = var
     %x_102_phi:ptr<function, bool, read_write> = var
     store %a, 1006648320u
-    %x_40:u32 = load %a
-    %15:vec4<f32> = unpack4x8snorm %x_40
-    store %v1, %15
+    %14:u32 = load %a
+    %x_40:u32 = let %14
+    %16:vec4<f32> = unpack4x8snorm %x_40
+    store %v1, %16
     store %E, 0.00999999977648258209f
-    %16:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-    %x_43:i32 = load %16
-    %x_45:f32 = load_vector_element %v1, %x_43
-    %19:ptr<uniform, f32, read> = access %x_10, 0u, 0i, 0u
-    %x_47:f32 = load %19
-    %21:ptr<uniform, f32, read> = access %x_10, 0u, 1i, 0u
-    %x_49:f32 = load %21
-    %x_53:f32 = load %E
-    %24:f32 = div %x_47, %x_49
-    %25:f32 = sub %x_45, %24
-    %26:f32 = abs %25
-    %x_54:bool = lt %26, %x_53
+    %17:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+    %18:i32 = load %17
+    %x_43:i32 = let %18
+    %20:f32 = load_vector_element %v1, %x_43
+    %x_45:f32 = let %20
+    %22:ptr<uniform, f32, read> = access %x_10, 0u, 0i, 0u
+    %23:f32 = load %22
+    %x_47:f32 = let %23
+    %25:ptr<uniform, f32, read> = access %x_10, 0u, 1i, 0u
+    %26:f32 = load %25
+    %x_49:f32 = let %26
+    %28:f32 = load %E
+    %x_53:f32 = let %28
+    %30:f32 = div %x_47, %x_49
+    %31:f32 = sub %x_45, %30
+    %32:f32 = abs %31
+    %33:bool = lt %32, %x_53
+    %x_54:bool = let %33
     store %x_70_phi, %x_54
-    if %x_54 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %28:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-        %x_58:i32 = load %28
-        %x_60:f32 = load_vector_element %v1, %x_58
-        %31:ptr<uniform, f32, read> = access %x_10, 0u, 2i, 0u
-        %x_62:f32 = load %31
-        %33:ptr<uniform, f32, read> = access %x_10, 0u, 1i, 0u
-        %x_64:f32 = load %33
-        %x_68:f32 = load %E
-        %36:f32 = div %x_62, %x_64
-        %37:f32 = sub %x_60, %36
-        %38:f32 = abs %37
-        %39:bool = lt %38, %x_68
-        store %x_69, %39
-        %40:bool = load %x_69
-        store %x_70_phi, %40
+    if %x_54 [t: $B3] {  # if_1
+      $B3: {  # true
+        %35:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+        %36:i32 = load %35
+        %x_58:i32 = let %36
+        %38:f32 = load_vector_element %v1, %x_58
+        %x_60:f32 = let %38
+        %40:ptr<uniform, f32, read> = access %x_10, 0u, 2i, 0u
+        %41:f32 = load %40
+        %x_62:f32 = let %41
+        %43:ptr<uniform, f32, read> = access %x_10, 0u, 1i, 0u
+        %44:f32 = load %43
+        %x_64:f32 = let %44
+        %46:f32 = load %E
+        %x_68:f32 = let %46
+        %48:f32 = div %x_62, %x_64
+        %49:f32 = sub %x_60, %48
+        %50:f32 = abs %49
+        %51:bool = lt %50, %x_68
+        store %x_69, %51
+        %52:bool = load %x_69
+        store %x_70_phi, %52
         exit_if  # if_1
       }
     }
-    %x_70:bool = load %x_70_phi
+    %53:bool = load %x_70_phi
+    %x_70:bool = let %53
     store %x_86_phi, %x_70
-    if %x_70 [t: %b4] {  # if_2
-      %b4 = block {  # true
-        %42:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
-        %x_74:i32 = load %42
-        %x_76:f32 = load_vector_element %v1, %x_74
-        %45:ptr<uniform, f32, read> = access %x_10, 0u, 0i, 0u
-        %x_78:f32 = load %45
-        %47:ptr<uniform, f32, read> = access %x_10, 0u, 1i, 0u
-        %x_80:f32 = load %47
-        %x_84:f32 = load %E
-        %50:f32 = div %x_78, %x_80
-        %51:f32 = sub %x_76, %50
-        %52:f32 = abs %51
-        %53:bool = lt %52, %x_84
-        store %x_85, %53
-        %54:bool = load %x_85
-        store %x_86_phi, %54
+    if %x_70 [t: $B4] {  # if_2
+      $B4: {  # true
+        %55:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
+        %56:i32 = load %55
+        %x_74:i32 = let %56
+        %58:f32 = load_vector_element %v1, %x_74
+        %x_76:f32 = let %58
+        %60:ptr<uniform, f32, read> = access %x_10, 0u, 0i, 0u
+        %61:f32 = load %60
+        %x_78:f32 = let %61
+        %63:ptr<uniform, f32, read> = access %x_10, 0u, 1i, 0u
+        %64:f32 = load %63
+        %x_80:f32 = let %64
+        %66:f32 = load %E
+        %x_84:f32 = let %66
+        %68:f32 = div %x_78, %x_80
+        %69:f32 = sub %x_76, %68
+        %70:f32 = abs %69
+        %71:bool = lt %70, %x_84
+        store %x_85, %71
+        %72:bool = load %x_85
+        store %x_86_phi, %72
         exit_if  # if_2
       }
     }
-    %x_86:bool = load %x_86_phi
+    %73:bool = load %x_86_phi
+    %x_86:bool = let %73
     store %x_102_phi, %x_86
-    if %x_86 [t: %b5] {  # if_3
-      %b5 = block {  # true
-        %56:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
-        %x_90:i32 = load %56
-        %x_92:f32 = load_vector_element %v1, %x_90
-        %59:ptr<uniform, f32, read> = access %x_10, 0u, 2i, 0u
-        %x_94:f32 = load %59
-        %61:ptr<uniform, f32, read> = access %x_10, 0u, 1i, 0u
-        %x_96:f32 = load %61
-        %x_100:f32 = load %E
-        %64:f32 = div %x_94, %x_96
-        %65:f32 = sub %x_92, %64
-        %66:f32 = abs %65
-        %67:bool = lt %66, %x_100
-        store %x_101, %67
-        %68:bool = load %x_101
-        store %x_102_phi, %68
+    if %x_86 [t: $B5] {  # if_3
+      $B5: {  # true
+        %75:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
+        %76:i32 = load %75
+        %x_90:i32 = let %76
+        %78:f32 = load_vector_element %v1, %x_90
+        %x_92:f32 = let %78
+        %80:ptr<uniform, f32, read> = access %x_10, 0u, 2i, 0u
+        %81:f32 = load %80
+        %x_94:f32 = let %81
+        %83:ptr<uniform, f32, read> = access %x_10, 0u, 1i, 0u
+        %84:f32 = load %83
+        %x_96:f32 = let %84
+        %86:f32 = load %E
+        %x_100:f32 = let %86
+        %88:f32 = div %x_94, %x_96
+        %89:f32 = sub %x_92, %88
+        %90:f32 = abs %89
+        %91:bool = lt %90, %x_100
+        store %x_101, %91
+        %92:bool = load %x_101
+        store %x_102_phi, %92
         exit_if  # if_3
       }
     }
-    %x_102:bool = load %x_102_phi
-    if %x_102 [t: %b6, f: %b7] {  # if_4
-      %b6 = block {  # true
-        %70:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-        %x_107:i32 = load %70
-        %72:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-        %x_110:i32 = load %72
-        %74:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-        %x_113:i32 = load %74
-        %76:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-        %x_116:i32 = load %76
-        %78:f32 = convert %x_107
-        %79:f32 = convert %x_110
-        %80:f32 = convert %x_113
-        %81:f32 = convert %x_116
-        %82:vec4<f32> = construct %78, %79, %80, %81
-        store %x_GLF_color, %82
+    %93:bool = load %x_102_phi
+    %x_102:bool = let %93
+    if %x_102 [t: $B6, f: $B7] {  # if_4
+      $B6: {  # true
+        %95:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+        %96:i32 = load %95
+        %x_107:i32 = let %96
+        %98:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+        %99:i32 = load %98
+        %x_110:i32 = let %99
+        %101:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+        %102:i32 = load %101
+        %x_113:i32 = let %102
+        %104:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+        %105:i32 = load %104
+        %x_116:i32 = let %105
+        %107:f32 = convert %x_107
+        %108:f32 = let %107
+        %109:f32 = convert %x_110
+        %110:f32 = let %109
+        %111:f32 = convert %x_113
+        %112:f32 = let %111
+        %113:f32 = convert %x_116
+        %114:vec4<f32> = construct %108, %110, %112, %113
+        store %x_GLF_color, %114
         exit_if  # if_4
       }
-      %b7 = block {  # false
-        %83:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-        %x_120:i32 = load %83
-        %x_122:f32 = load_vector_element %v1, %x_120
-        %86:vec4<f32> = construct %x_122, %x_122, %x_122, %x_122
-        store %x_GLF_color, %86
+      $B7: {  # false
+        %115:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+        %116:i32 = load %115
+        %x_120:i32 = let %116
+        %118:f32 = load_vector_element %v1, %x_120
+        %x_122:f32 = let %118
+        %120:vec4<f32> = construct %x_122, %x_122, %x_122, %x_122
+        store %x_GLF_color, %120
         exit_if  # if_4
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b8 {
-  %b8 = block {
-    %88:void = call %main_1
-    %89:vec4<f32> = load %x_GLF_color
-    %90:main_out = construct %89
-    ret %90
+%tint_symbol = @fragment func():main_out {
+  $B8: {
+    %122:void = call %main_1
+    %123:vec4<f32> = load %x_GLF_color
+    %124:main_out = construct %123
+    ret %124
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-packsnorm-unpackunorm/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-packsnorm-unpackunorm/0-opt.spvasm.expected.ir.msl
index d443d19..aebb60d 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-packsnorm-unpackunorm/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-packsnorm-unpackunorm/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,14 +20,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, u32, read_write> = var
     %v1:ptr<function, vec4<f32>, read_write> = var
     %E:ptr<function, f32, read_write> = var
@@ -59,111 +59,115 @@
     %30:f32 = sub %24, %29
     %31:f32 = abs %30
     %32:f32 = load %E
-    %x_54:bool = lt %31, %32
+    %33:bool = lt %31, %32
+    %x_54:bool = let %33
     store %x_70, %x_54
-    if %x_54 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %34:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %35:i32 = load %34
-        %36:f32 = load_vector_element %v1, %35
-        %37:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
-        %38:f32 = load %37
-        %39:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
-        %40:f32 = load %39
-        %41:f32 = div %38, %40
-        %42:f32 = sub %36, %41
-        %43:f32 = abs %42
-        %44:f32 = load %E
-        %45:bool = lt %43, %44
-        store %x_69, %45
-        %46:bool = load %x_69
-        store %x_70, %46
+    if %x_54 [t: $B3] {  # if_1
+      $B3: {  # true
+        %35:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %36:i32 = load %35
+        %37:f32 = load_vector_element %v1, %36
+        %38:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
+        %39:f32 = load %38
+        %40:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
+        %41:f32 = load %40
+        %42:f32 = div %39, %41
+        %43:f32 = sub %37, %42
+        %44:f32 = abs %43
+        %45:f32 = load %E
+        %46:bool = lt %44, %45
+        store %x_69, %46
+        %47:bool = load %x_69
+        store %x_70, %47
         exit_if  # if_1
       }
     }
-    %47:bool = load %x_70
-    store %x_86, %47
     %48:bool = load %x_70
-    if %48 [t: %b4] {  # if_2
-      %b4 = block {  # true
-        %49:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
-        %50:i32 = load %49
-        %51:f32 = load_vector_element %v1, %50
-        %52:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
-        %53:f32 = load %52
-        %54:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
-        %55:f32 = load %54
-        %56:f32 = div %53, %55
-        %57:f32 = sub %51, %56
-        %58:f32 = abs %57
-        %59:f32 = load %E
-        %60:bool = lt %58, %59
-        store %x_85, %60
-        %61:bool = load %x_85
-        store %x_86, %61
+    store %x_86, %48
+    %49:bool = load %x_70
+    if %49 [t: $B4] {  # if_2
+      $B4: {  # true
+        %50:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
+        %51:i32 = load %50
+        %52:f32 = load_vector_element %v1, %51
+        %53:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
+        %54:f32 = load %53
+        %55:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
+        %56:f32 = load %55
+        %57:f32 = div %54, %56
+        %58:f32 = sub %52, %57
+        %59:f32 = abs %58
+        %60:f32 = load %E
+        %61:bool = lt %59, %60
+        store %x_85, %61
+        %62:bool = load %x_85
+        store %x_86, %62
         exit_if  # if_2
       }
     }
-    %62:bool = load %x_86
-    store %x_102, %62
     %63:bool = load %x_86
-    if %63 [t: %b5] {  # if_3
-      %b5 = block {  # true
-        %64:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-        %65:i32 = load %64
-        %66:f32 = load_vector_element %v1, %65
-        %67:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
-        %68:f32 = load %67
-        %69:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
-        %70:f32 = load %69
-        %71:f32 = div %68, %70
-        %72:f32 = sub %66, %71
-        %73:f32 = abs %72
-        %74:f32 = load %E
-        %75:bool = lt %73, %74
-        store %x_101, %75
-        %76:bool = load %x_101
-        store %x_102, %76
+    store %x_102, %63
+    %64:bool = load %x_86
+    if %64 [t: $B5] {  # if_3
+      $B5: {  # true
+        %65:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+        %66:i32 = load %65
+        %67:f32 = load_vector_element %v1, %66
+        %68:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
+        %69:f32 = load %68
+        %70:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
+        %71:f32 = load %70
+        %72:f32 = div %69, %71
+        %73:f32 = sub %67, %72
+        %74:f32 = abs %73
+        %75:f32 = load %E
+        %76:bool = lt %74, %75
+        store %x_101, %76
+        %77:bool = load %x_101
+        store %x_102, %77
         exit_if  # if_3
       }
     }
-    %77:bool = load %x_102
-    if %77 [t: %b6, f: %b7] {  # if_4
-      %b6 = block {  # true
-        %78:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %79:i32 = load %78
-        %80:f32 = convert %79
-        %81:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %82:i32 = load %81
-        %83:f32 = convert %82
-        %84:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %85:i32 = load %84
-        %86:f32 = convert %85
-        %87:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+    %78:bool = load %x_102
+    if %78 [t: $B6, f: $B7] {  # if_4
+      $B6: {  # true
+        %79:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %80:i32 = load %79
+        %81:f32 = convert %80
+        %82:f32 = let %81
+        %83:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 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 %80, %83, %86, %89
-        store %x_GLF_color, %90
-        exit_if  # if_4
-      }
-      %b7 = block {  # false
-        %91:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %90:f32 = let %89
+        %91:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
         %92:i32 = load %91
         %93:f32 = convert %92
-        %94:vec4<f32> = construct %93
+        %94:vec4<f32> = construct %82, %86, %90, %93
         store %x_GLF_color, %94
         exit_if  # if_4
       }
+      $B7: {  # false
+        %95:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %96:i32 = load %95
+        %97:f32 = convert %96
+        %98:vec4<f32> = construct %97
+        store %x_GLF_color, %98
+        exit_if  # if_4
+      }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b8 {
-  %b8 = block {
-    %96:void = call %main_1
-    %97:vec4<f32> = load %x_GLF_color
-    %98:main_out = construct %97
-    ret %98
+%tint_symbol = @fragment func():main_out {
+  $B8: {
+    %100:void = call %main_1
+    %101:vec4<f32> = load %x_GLF_color
+    %102:main_out = construct %101
+    ret %102
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-packsnorm-unpackunorm/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-packsnorm-unpackunorm/0-opt.wgsl.expected.ir.msl
index b799bdc..4fa600b 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-packsnorm-unpackunorm/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-packsnorm-unpackunorm/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,14 +20,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, u32, read_write> = var
     %v1:ptr<function, vec4<f32>, read_write> = var
     %E:ptr<function, f32, read_write> = var
@@ -38,130 +38,166 @@
     %x_86_phi:ptr<function, bool, read_write> = var
     %x_102_phi:ptr<function, bool, read_write> = var
     %14:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-    %x_35:f32 = load %14
-    %16:vec4<f32> = construct %x_35, %x_35, %x_35, %x_35
-    %17:u32 = pack4x8snorm %16
-    store %a, %17
-    %x_38:u32 = load %a
-    %19:vec4<f32> = unpack4x8unorm %x_38
-    store %v1, %19
-    %20:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_41:f32 = load %20
+    %15:f32 = load %14
+    %x_35:f32 = let %15
+    %17:vec4<f32> = construct %x_35, %x_35, %x_35, %x_35
+    %18:u32 = pack4x8snorm %17
+    store %a, %18
+    %19:u32 = load %a
+    %x_38:u32 = let %19
+    %21:vec4<f32> = unpack4x8unorm %x_38
+    store %v1, %21
+    %22:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %23:f32 = load %22
+    %x_41:f32 = let %23
     store %E, %x_41
-    %22:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-    %x_43:i32 = load %22
-    %x_45:f32 = load_vector_element %v1, %x_43
-    %25:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
-    %x_47:f32 = load %25
-    %27:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
-    %x_49:f32 = load %27
-    %x_53:f32 = load %E
-    %30:f32 = div %x_47, %x_49
-    %31:f32 = sub %x_45, %30
-    %32:f32 = abs %31
-    %x_54:bool = lt %32, %x_53
+    %25:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+    %26:i32 = load %25
+    %x_43:i32 = let %26
+    %28:f32 = load_vector_element %v1, %x_43
+    %x_45:f32 = let %28
+    %30:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
+    %31:f32 = load %30
+    %x_47:f32 = let %31
+    %33:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
+    %34:f32 = load %33
+    %x_49:f32 = let %34
+    %36:f32 = load %E
+    %x_53:f32 = let %36
+    %38:f32 = div %x_47, %x_49
+    %39:f32 = sub %x_45, %38
+    %40:f32 = abs %39
+    %41:bool = lt %40, %x_53
+    %x_54:bool = let %41
     store %x_70_phi, %x_54
-    if %x_54 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %34:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %x_58:i32 = load %34
-        %x_60:f32 = load_vector_element %v1, %x_58
-        %37:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
-        %x_62:f32 = load %37
-        %39:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
-        %x_64:f32 = load %39
-        %x_68:f32 = load %E
-        %42:f32 = div %x_62, %x_64
-        %43:f32 = sub %x_60, %42
-        %44:f32 = abs %43
-        %45:bool = lt %44, %x_68
-        store %x_69, %45
-        %46:bool = load %x_69
-        store %x_70_phi, %46
+    if %x_54 [t: $B3] {  # if_1
+      $B3: {  # true
+        %43:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %44:i32 = load %43
+        %x_58:i32 = let %44
+        %46:f32 = load_vector_element %v1, %x_58
+        %x_60:f32 = let %46
+        %48:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
+        %49:f32 = load %48
+        %x_62:f32 = let %49
+        %51:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
+        %52:f32 = load %51
+        %x_64:f32 = let %52
+        %54:f32 = load %E
+        %x_68:f32 = let %54
+        %56:f32 = div %x_62, %x_64
+        %57:f32 = sub %x_60, %56
+        %58:f32 = abs %57
+        %59:bool = lt %58, %x_68
+        store %x_69, %59
+        %60:bool = load %x_69
+        store %x_70_phi, %60
         exit_if  # if_1
       }
     }
-    %x_70:bool = load %x_70_phi
+    %61:bool = load %x_70_phi
+    %x_70:bool = let %61
     store %x_86_phi, %x_70
-    if %x_70 [t: %b4] {  # if_2
-      %b4 = block {  # true
-        %48:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
-        %x_74:i32 = load %48
-        %x_76:f32 = load_vector_element %v1, %x_74
-        %51:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
-        %x_78:f32 = load %51
-        %53:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
-        %x_80:f32 = load %53
-        %x_84:f32 = load %E
-        %56:f32 = div %x_78, %x_80
-        %57:f32 = sub %x_76, %56
-        %58:f32 = abs %57
-        %59:bool = lt %58, %x_84
-        store %x_85, %59
-        %60:bool = load %x_85
-        store %x_86_phi, %60
+    if %x_70 [t: $B4] {  # if_2
+      $B4: {  # true
+        %63:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
+        %64:i32 = load %63
+        %x_74:i32 = let %64
+        %66:f32 = load_vector_element %v1, %x_74
+        %x_76:f32 = let %66
+        %68:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
+        %69:f32 = load %68
+        %x_78:f32 = let %69
+        %71:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
+        %72:f32 = load %71
+        %x_80:f32 = let %72
+        %74:f32 = load %E
+        %x_84:f32 = let %74
+        %76:f32 = div %x_78, %x_80
+        %77:f32 = sub %x_76, %76
+        %78:f32 = abs %77
+        %79:bool = lt %78, %x_84
+        store %x_85, %79
+        %80:bool = load %x_85
+        store %x_86_phi, %80
         exit_if  # if_2
       }
     }
-    %x_86:bool = load %x_86_phi
+    %81:bool = load %x_86_phi
+    %x_86:bool = let %81
     store %x_102_phi, %x_86
-    if %x_86 [t: %b5] {  # if_3
-      %b5 = block {  # true
-        %62:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-        %x_90:i32 = load %62
-        %x_92:f32 = load_vector_element %v1, %x_90
-        %65:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
-        %x_94:f32 = load %65
-        %67:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
-        %x_96:f32 = load %67
-        %x_100:f32 = load %E
-        %70:f32 = div %x_94, %x_96
-        %71:f32 = sub %x_92, %70
-        %72:f32 = abs %71
-        %73:bool = lt %72, %x_100
-        store %x_101, %73
-        %74:bool = load %x_101
-        store %x_102_phi, %74
+    if %x_86 [t: $B5] {  # if_3
+      $B5: {  # true
+        %83:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+        %84:i32 = load %83
+        %x_90:i32 = let %84
+        %86:f32 = load_vector_element %v1, %x_90
+        %x_92:f32 = let %86
+        %88:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
+        %89:f32 = load %88
+        %x_94:f32 = let %89
+        %91:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
+        %92:f32 = load %91
+        %x_96:f32 = let %92
+        %94:f32 = load %E
+        %x_100:f32 = let %94
+        %96:f32 = div %x_94, %x_96
+        %97:f32 = sub %x_92, %96
+        %98:f32 = abs %97
+        %99:bool = lt %98, %x_100
+        store %x_101, %99
+        %100:bool = load %x_101
+        store %x_102_phi, %100
         exit_if  # if_3
       }
     }
-    %x_102:bool = load %x_102_phi
-    if %x_102 [t: %b6, f: %b7] {  # if_4
-      %b6 = block {  # true
-        %76:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %x_107:i32 = load %76
-        %78:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %x_110:i32 = load %78
-        %80:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %x_113:i32 = load %80
-        %82:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %x_116:i32 = load %82
-        %84:f32 = convert %x_107
-        %85:f32 = convert %x_110
-        %86:f32 = convert %x_113
-        %87:f32 = convert %x_116
-        %88:vec4<f32> = construct %84, %85, %86, %87
-        store %x_GLF_color, %88
+    %101:bool = load %x_102_phi
+    %x_102:bool = let %101
+    if %x_102 [t: $B6, f: $B7] {  # if_4
+      $B6: {  # true
+        %103:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %104:i32 = load %103
+        %x_107:i32 = let %104
+        %106:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %107:i32 = load %106
+        %x_110:i32 = let %107
+        %109:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %110:i32 = load %109
+        %x_113:i32 = let %110
+        %112:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %113:i32 = load %112
+        %x_116:i32 = let %113
+        %115:f32 = convert %x_107
+        %116:f32 = let %115
+        %117:f32 = convert %x_110
+        %118:f32 = let %117
+        %119:f32 = convert %x_113
+        %120:f32 = let %119
+        %121:f32 = convert %x_116
+        %122:vec4<f32> = construct %116, %118, %120, %121
+        store %x_GLF_color, %122
         exit_if  # if_4
       }
-      %b7 = block {  # false
-        %89:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %x_120:i32 = load %89
-        %x_121:f32 = convert %x_120
-        %92:vec4<f32> = construct %x_121, %x_121, %x_121, %x_121
-        store %x_GLF_color, %92
+      $B7: {  # false
+        %123:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %124:i32 = load %123
+        %x_120:i32 = let %124
+        %126:f32 = convert %x_120
+        %x_121:f32 = let %126
+        %128:vec4<f32> = construct %x_121, %x_121, %x_121, %x_121
+        store %x_GLF_color, %128
         exit_if  # if_4
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b8 {
-  %b8 = block {
-    %94:void = call %main_1
-    %95:vec4<f32> = load %x_GLF_color
-    %96:main_out = construct %95
-    ret %96
+%tint_symbol = @fragment func():main_out {
+  $B8: {
+    %130:void = call %main_1
+    %131:vec4<f32> = load %x_GLF_color
+    %132:main_out = construct %131
+    ret %132
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-switch-or-xor/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-switch-or-xor/0-opt.spvasm.expected.ir.msl
index 43bef2f..1f14857 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-switch-or-xor/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-switch-or-xor/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,14 +20,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_8:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %color:ptr<function, vec4<f32>, read_write> = var
     %6:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
     %7:f32 = load %6
@@ -40,33 +40,35 @@
     %14:vec4<f32> = construct %7, %9, %11, %13
     store %color, %14
     %15:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-    %x_38:i32 = load %15
-    %17:i32 = or 1i, %x_38
-    %18:i32 = xor %17, 1i
-    switch %18 [c: (0i, %b3), c: (default, %b4)] {  # switch_1
-      %b3 = block {  # case
-        %19:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-        %x_44:i32 = load %19
-        %21:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-        %22:f32 = load %21
-        store_vector_element %color, %x_44, %22
+    %16:i32 = load %15
+    %x_38:i32 = let %16
+    %18:i32 = or 1i, %x_38
+    %19:i32 = xor %18, 1i
+    switch %19 [c: (0i, $B3), c: (default, $B4)] {  # switch_1
+      $B3: {  # case
+        %20:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+        %21:i32 = load %20
+        %x_44:i32 = let %21
+        %23:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+        %24:f32 = load %23
+        store_vector_element %color, %x_44, %24
         exit_switch  # switch_1
       }
-      %b4 = block {  # case
+      $B4: {  # case
         exit_switch  # switch_1
       }
     }
-    %23:vec4<f32> = load %color
-    store %x_GLF_color, %23
+    %25:vec4<f32> = load %color
+    store %x_GLF_color, %25
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %25:void = call %main_1
-    %26:vec4<f32> = load %x_GLF_color
-    %27:main_out = construct %26
-    ret %27
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %27:void = call %main_1
+    %28:vec4<f32> = load %x_GLF_color
+    %29:main_out = construct %28
+    ret %29
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-switch-or-xor/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-switch-or-xor/0-opt.wgsl.expected.ir.msl
index 99b0af4..7eac2fe 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-switch-or-xor/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-switch-or-xor/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,53 +20,61 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_8:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %color:ptr<function, vec4<f32>, read_write> = var
     %6:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_29:f32 = load %6
-    %8:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_31:f32 = load %8
-    %10:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_33:f32 = load %10
-    %12:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-    %x_35:f32 = load %12
-    %14:vec4<f32> = construct %x_29, %x_31, %x_33, %x_35
-    store %color, %14
-    %15:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-    %x_38:i32 = load %15
-    %17:i32 = or 1i, %x_38
-    %18:i32 = xor %17, 1i
-    switch %18 [c: (0i, %b3), c: (default, %b4)] {  # switch_1
-      %b3 = block {  # case
-        %19:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-        %x_44:i32 = load %19
-        %21:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-        %x_46:f32 = load %21
+    %7:f32 = load %6
+    %x_29:f32 = let %7
+    %9:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %10:f32 = load %9
+    %x_31:f32 = let %10
+    %12:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %13:f32 = load %12
+    %x_33:f32 = let %13
+    %15:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+    %16:f32 = load %15
+    %x_35:f32 = let %16
+    %18:vec4<f32> = construct %x_29, %x_31, %x_33, %x_35
+    store %color, %18
+    %19:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+    %20:i32 = load %19
+    %x_38:i32 = let %20
+    %22:i32 = or 1i, %x_38
+    %23:i32 = xor %22, 1i
+    switch %23 [c: (0i, $B3), c: (default, $B4)] {  # switch_1
+      $B3: {  # case
+        %24:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+        %25:i32 = load %24
+        %x_44:i32 = let %25
+        %27:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+        %28:f32 = load %27
+        %x_46:f32 = let %28
         store_vector_element %color, %x_44, %x_46
         exit_switch  # switch_1
       }
-      %b4 = block {  # case
+      $B4: {  # case
         exit_switch  # switch_1
       }
     }
-    %x_48:vec4<f32> = load %color
+    %30:vec4<f32> = load %color
+    %x_48:vec4<f32> = let %30
     store %x_GLF_color, %x_48
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %25:void = call %main_1
-    %26:vec4<f32> = load %x_GLF_color
-    %27:main_out = construct %26
-    ret %27
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %33:void = call %main_1
+    %34:vec4<f32> = load %x_GLF_color
+    %35:main_out = construct %34
+    ret %35
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-vector-ops-asin/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-vector-ops-asin/0-opt.spvasm.expected.ir.msl
index f2b1af7..f19abe2 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-vector-ops-asin/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-vector-ops-asin/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,14 +20,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_9:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, f32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %b:ptr<function, f32, read_write> = var
@@ -41,17 +41,17 @@
     %14:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
     %15:i32 = load %14
     store %i, %15
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %16:i32 = load %i
         %17:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
         %18:i32 = load %17
         %19:bool = lt %16, %18
-        if %19 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %19 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
@@ -67,69 +67,73 @@
         store %c, %25
         %26:f32 = load %d
         store %a, %26
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
+      $B4: {  # continuing
         %27:i32 = load %i
         %28:i32 = add %27, 1i
         store %i, %28
-        next_iteration %b3
+        next_iteration  # -> $B3
       }
     }
     %29:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
     %30:f32 = load %29
     %31:f32 = load %a
-    %x_61:bool = lt %30, %31
+    %32:bool = lt %30, %31
+    %x_61:bool = let %32
     store %x_68, %x_61
-    if %x_61 [t: %b7] {  # if_2
-      %b7 = block {  # true
-        %33:f32 = load %a
-        %34:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
-        %35:f32 = load %34
-        %36:bool = lt %33, %35
-        store %x_67, %36
-        %37:bool = load %x_67
-        store %x_68, %37
+    if %x_61 [t: $B7] {  # if_2
+      $B7: {  # true
+        %34:f32 = load %a
+        %35:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
+        %36:f32 = load %35
+        %37:bool = lt %34, %36
+        store %x_67, %37
+        %38:bool = load %x_67
+        store %x_68, %38
         exit_if  # if_2
       }
     }
-    %38:bool = load %x_68
-    if %38 [t: %b8, f: %b9] {  # if_3
-      %b8 = block {  # true
-        %39:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
-        %40:i32 = load %39
-        %41:f32 = convert %40
-        %42:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %43:i32 = load %42
-        %44:f32 = convert %43
-        %45:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %46:i32 = load %45
-        %47:f32 = convert %46
-        %48:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
+    %39:bool = load %x_68
+    if %39 [t: $B8, f: $B9] {  # if_3
+      $B8: {  # true
+        %40:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
+        %41:i32 = load %40
+        %42:f32 = convert %41
+        %43:f32 = let %42
+        %44:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %45:i32 = load %44
+        %46:f32 = convert %45
+        %47:f32 = let %46
+        %48:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
         %49:i32 = load %48
         %50:f32 = convert %49
-        %51:vec4<f32> = construct %41, %44, %47, %50
-        store %x_GLF_color, %51
-        exit_if  # if_3
-      }
-      %b9 = block {  # false
-        %52:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %51:f32 = let %50
+        %52:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
         %53:i32 = load %52
         %54:f32 = convert %53
-        %55:vec4<f32> = construct %54
+        %55:vec4<f32> = construct %43, %47, %51, %54
         store %x_GLF_color, %55
         exit_if  # if_3
       }
+      $B9: {  # false
+        %56:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %57:i32 = load %56
+        %58:f32 = convert %57
+        %59:vec4<f32> = construct %58
+        store %x_GLF_color, %59
+        exit_if  # if_3
+      }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b10 {
-  %b10 = block {
-    %57:void = call %main_1
-    %58:vec4<f32> = load %x_GLF_color
-    %59:main_out = construct %58
-    ret %59
+%tint_symbol = @fragment func():main_out {
+  $B10: {
+    %61:void = call %main_1
+    %62:vec4<f32> = load %x_GLF_color
+    %63:main_out = construct %62
+    ret %63
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-vector-ops-asin/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-vector-ops-asin/0-opt.wgsl.expected.ir.msl
index e979c3e..8377c7a 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-vector-ops-asin/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-vector-ops-asin/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,14 +20,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_9:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, f32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %b:ptr<function, f32, read_write> = var
@@ -36,100 +36,125 @@
     %x_67:ptr<function, bool, read_write> = var
     %x_68_phi:ptr<function, bool, read_write> = var
     %12:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_37:f32 = load %12
+    %13:f32 = load %12
+    %x_37:f32 = let %13
     store %a, %x_37
-    %14:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-    %x_39:i32 = load %14
+    %15:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+    %16:i32 = load %15
+    %x_39:i32 = let %16
     store %i, %x_39
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_44:i32 = load %i
-        %17:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %x_46:i32 = load %17
-        %19:bool = lt %x_44, %x_46
-        if %19 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %18:i32 = load %i
+        %x_44:i32 = let %18
+        %20:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+        %21:i32 = load %20
+        %x_46:i32 = let %21
+        %23:bool = lt %x_44, %x_46
+        if %23 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_49:f32 = load %a
+        %24:f32 = load %a
+        %x_49:f32 = let %24
         store %b, %x_49
-        %x_50:f32 = load %b
+        %26:f32 = load %b
+        %x_50:f32 = let %26
         store %c, %x_50
-        %x_51:f32 = load %c
-        %23:f32 = asin %x_51
-        store %d, %23
-        %24:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-        %x_54:f32 = load %24
+        %28:f32 = load %c
+        %x_51:f32 = let %28
+        %30:f32 = asin %x_51
+        store %d, %30
+        %31:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+        %32:f32 = load %31
+        %x_54:f32 = let %32
         store %c, %x_54
-        %x_55:f32 = load %d
+        %34:f32 = load %d
+        %x_55:f32 = let %34
         store %a, %x_55
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_56:i32 = load %i
-        %28:i32 = add %x_56, 1i
-        store %i, %28
-        next_iteration %b3
+      $B4: {  # continuing
+        %36:i32 = load %i
+        %x_56:i32 = let %36
+        %38:i32 = add %x_56, 1i
+        store %i, %38
+        next_iteration  # -> $B3
       }
     }
-    %29:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
-    %x_59:f32 = load %29
-    %x_60:f32 = load %a
-    %x_61:bool = lt %x_59, %x_60
+    %39:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
+    %40:f32 = load %39
+    %x_59:f32 = let %40
+    %42:f32 = load %a
+    %x_60:f32 = let %42
+    %44:bool = lt %x_59, %x_60
+    %x_61:bool = let %44
     store %x_68_phi, %x_61
-    if %x_61 [t: %b7] {  # if_2
-      %b7 = block {  # true
-        %x_64:f32 = load %a
-        %34:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
-        %x_66:f32 = load %34
-        %36:bool = lt %x_64, %x_66
-        store %x_67, %36
-        %37:bool = load %x_67
-        store %x_68_phi, %37
+    if %x_61 [t: $B7] {  # if_2
+      $B7: {  # true
+        %46:f32 = load %a
+        %x_64:f32 = let %46
+        %48:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
+        %49:f32 = load %48
+        %x_66:f32 = let %49
+        %51:bool = lt %x_64, %x_66
+        store %x_67, %51
+        %52:bool = load %x_67
+        store %x_68_phi, %52
         exit_if  # if_2
       }
     }
-    %x_68:bool = load %x_68_phi
-    if %x_68 [t: %b8, f: %b9] {  # if_3
-      %b8 = block {  # true
-        %39:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
-        %x_73:i32 = load %39
-        %41:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %x_76:i32 = load %41
-        %43:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %x_79:i32 = load %43
-        %45:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
-        %x_82:i32 = load %45
-        %47:f32 = convert %x_73
-        %48:f32 = convert %x_76
-        %49:f32 = convert %x_79
-        %50:f32 = convert %x_82
-        %51:vec4<f32> = construct %47, %48, %49, %50
-        store %x_GLF_color, %51
+    %53:bool = load %x_68_phi
+    %x_68:bool = let %53
+    if %x_68 [t: $B8, f: $B9] {  # if_3
+      $B8: {  # true
+        %55:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
+        %56:i32 = load %55
+        %x_73:i32 = let %56
+        %58:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %59:i32 = load %58
+        %x_76:i32 = let %59
+        %61:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %62:i32 = load %61
+        %x_79:i32 = let %62
+        %64:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
+        %65:i32 = load %64
+        %x_82:i32 = let %65
+        %67:f32 = convert %x_73
+        %68:f32 = let %67
+        %69:f32 = convert %x_76
+        %70:f32 = let %69
+        %71:f32 = convert %x_79
+        %72:f32 = let %71
+        %73:f32 = convert %x_82
+        %74:vec4<f32> = construct %68, %70, %72, %73
+        store %x_GLF_color, %74
         exit_if  # if_3
       }
-      %b9 = block {  # false
-        %52:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %x_86:i32 = load %52
-        %x_87:f32 = convert %x_86
-        %55:vec4<f32> = construct %x_87, %x_87, %x_87, %x_87
-        store %x_GLF_color, %55
+      $B9: {  # false
+        %75:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %76:i32 = load %75
+        %x_86:i32 = let %76
+        %78:f32 = convert %x_86
+        %x_87:f32 = let %78
+        %80:vec4<f32> = construct %x_87, %x_87, %x_87, %x_87
+        store %x_GLF_color, %80
         exit_if  # if_3
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b10 {
-  %b10 = block {
-    %57:void = call %main_1
-    %58:vec4<f32> = load %x_GLF_color
-    %59:main_out = construct %58
-    ret %59
+%tint_symbol = @fragment func():main_out {
+  $B10: {
+    %82:void = call %main_1
+    %83:vec4<f32> = load %x_GLF_color
+    %84:main_out = construct %83
+    ret %84
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-value-tracking-inversesqrt/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-value-tracking-inversesqrt/0-opt.spvasm.expected.ir.msl
index afb1da3..e8d1a20 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-value-tracking-inversesqrt/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-value-tracking-inversesqrt/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -12,26 +12,26 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %4:ptr<uniform, f32, read> = access %x_5, 0u, 1i, 0u
     %5:f32 = load %4
     %6:f32 = inverseSqrt %5
     %7:bool = lt %6, -1.0f
-    if %7 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    if %7 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         %8:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
         %9:f32 = load %8
         %10:vec4<f32> = construct %9
         store %x_GLF_color, %10
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         %11:ptr<uniform, f32, read> = access %x_5, 0u, 1i, 0u
         %12:f32 = load %11
         %13:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
@@ -48,8 +48,8 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
+%tint_symbol = @fragment func():main_out {
+  $B5: {
     %21:void = call %main_1
     %22:vec4<f32> = load %x_GLF_color
     %23:main_out = construct %22
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-value-tracking-inversesqrt/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-value-tracking-inversesqrt/0-opt.wgsl.expected.ir.msl
index 799ccb9..68472a2 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-value-tracking-inversesqrt/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-value-tracking-inversesqrt/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -12,48 +12,54 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %4:ptr<uniform, f32, read> = access %x_5, 0u, 1i, 0u
-    %x_23:f32 = load %4
-    %6:f32 = inverseSqrt %x_23
-    %7:bool = lt %6, -1.0f
-    if %7 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %8:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
-        %x_30:f32 = load %8
-        %10:vec4<f32> = construct %x_30, %x_30, %x_30, %x_30
-        store %x_GLF_color, %10
+    %5:f32 = load %4
+    %x_23:f32 = let %5
+    %7:f32 = inverseSqrt %x_23
+    %8:bool = lt %7, -1.0f
+    if %8 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %9:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
+        %10:f32 = load %9
+        %x_30:f32 = let %10
+        %12:vec4<f32> = construct %x_30, %x_30, %x_30, %x_30
+        store %x_GLF_color, %12
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %11:ptr<uniform, f32, read> = access %x_5, 0u, 1i, 0u
-        %x_33:f32 = load %11
-        %13:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
-        %x_35:f32 = load %13
-        %15:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
-        %x_37:f32 = load %15
-        %17:ptr<uniform, f32, read> = access %x_5, 0u, 1i, 0u
-        %x_39:f32 = load %17
-        %19:vec4<f32> = construct %x_33, %x_35, %x_37, %x_39
-        store %x_GLF_color, %19
+      $B4: {  # false
+        %13:ptr<uniform, f32, read> = access %x_5, 0u, 1i, 0u
+        %14:f32 = load %13
+        %x_33:f32 = let %14
+        %16:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
+        %17:f32 = load %16
+        %x_35:f32 = let %17
+        %19:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
+        %20:f32 = load %19
+        %x_37:f32 = let %20
+        %22:ptr<uniform, f32, read> = access %x_5, 0u, 1i, 0u
+        %23:f32 = load %22
+        %x_39:f32 = let %23
+        %25:vec4<f32> = construct %x_33, %x_35, %x_37, %x_39
+        store %x_GLF_color, %25
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %21:void = call %main_1
-    %22:vec4<f32> = load %x_GLF_color
-    %23:main_out = construct %22
-    ret %23
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %27:void = call %main_1
+    %28:vec4<f32> = load %x_GLF_color
+    %29:main_out = construct %28
+    ret %29
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-bit-shifting/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-bit-shifting/0-opt.spvasm.expected.ir.msl
index 1154f8b..b1c933b 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-bit-shifting/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-bit-shifting/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,61 +12,68 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %5:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
     %6:i32 = load %5
-    %7:i32 = shiftl %6, 5u
-    %8:u32 = bitcast %7
-    %9:i32 = shiftr 1i, %8
-    %10:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %11:i32 = load %10
-    %12:u32 = bitcast %11
-    %13:i32 = shiftr %9, %12
-    store %a, %13
-    %14:i32 = load %a
-    %15:bool = eq %14, 1i
-    if %15 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %16:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %17:i32 = load %16
-        %18:f32 = convert %17
-        %19:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %20:i32 = load %19
-        %21:f32 = convert %20
-        %22:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %23:i32 = load %22
-        %24:f32 = convert %23
-        %25:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %26:i32 = load %25
-        %27:f32 = convert %26
-        %28:vec4<f32> = construct %18, %21, %24, %27
-        store %x_GLF_color, %28
+    %7:u32 = and 5u, 31u
+    %8:i32 = shl %6, %7
+    %9:u32 = bitcast %8
+    %10:u32 = and %9, 31u
+    %11:i32 = shr 1i, %10
+    %12:i32 = let %11
+    %13:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %14:i32 = load %13
+    %15:u32 = bitcast %14
+    %16:u32 = and %15, 31u
+    %17:i32 = shr %12, %16
+    store %a, %17
+    %18:i32 = load %a
+    %19:bool = eq %18, 1i
+    if %19 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %20:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %21:i32 = load %20
+        %22:f32 = convert %21
+        %23:f32 = let %22
+        %24:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %25:i32 = load %24
+        %26:f32 = convert %25
+        %27:f32 = let %26
+        %28:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %29:i32 = load %28
+        %30:f32 = convert %29
+        %31:f32 = let %30
+        %32:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %33:i32 = load %32
+        %34:f32 = convert %33
+        %35:vec4<f32> = construct %23, %27, %31, %34
+        store %x_GLF_color, %35
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %29:i32 = load %a
-        %30:f32 = convert %29
-        %31:vec4<f32> = construct %30
-        store %x_GLF_color, %31
+      $B4: {  # false
+        %36:i32 = load %a
+        %37:f32 = convert %36
+        %38:vec4<f32> = construct %37
+        store %x_GLF_color, %38
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %33:void = call %main_1
-    %34:vec4<f32> = load %x_GLF_color
-    %35:main_out = construct %34
-    ret %35
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %40:void = call %main_1
+    %41:vec4<f32> = load %x_GLF_color
+    %42:main_out = construct %41
+    ret %42
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-bit-shifting/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-bit-shifting/0-opt.wgsl.expected.ir.msl
index 18c613c..60213f7 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-bit-shifting/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-bit-shifting/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,61 +12,77 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %5:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_25:i32 = load %5
-    %7:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_29:i32 = load %7
-    %9:i32 = shiftl %x_25, 5u
-    %10:u32 = bitcast %9
-    %11:i32 = shiftr 1i, %10
-    %12:u32 = bitcast %x_29
-    %13:i32 = shiftr %11, %12
-    store %a, %13
-    %x_31:i32 = load %a
-    %15:bool = eq %x_31, 1i
-    if %15 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %16:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_37:i32 = load %16
-        %18:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_40:i32 = load %18
-        %20:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_43:i32 = load %20
-        %22:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_46:i32 = load %22
-        %24:f32 = convert %x_37
-        %25:f32 = convert %x_40
-        %26:f32 = convert %x_43
-        %27:f32 = convert %x_46
-        %28:vec4<f32> = construct %24, %25, %26, %27
-        store %x_GLF_color, %28
+    %6:i32 = load %5
+    %x_25:i32 = let %6
+    %8:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %9:i32 = load %8
+    %x_29:i32 = let %9
+    %11:u32 = and 5u, 31u
+    %12:i32 = shl %x_25, %11
+    %13:u32 = bitcast %12
+    %14:u32 = and %13, 31u
+    %15:i32 = shr 1i, %14
+    %16:i32 = let %15
+    %17:u32 = bitcast %x_29
+    %18:u32 = and %17, 31u
+    %19:i32 = shr %16, %18
+    store %a, %19
+    %20:i32 = load %a
+    %x_31:i32 = let %20
+    %22:bool = eq %x_31, 1i
+    if %22 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %23:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %24:i32 = load %23
+        %x_37:i32 = let %24
+        %26:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %27:i32 = load %26
+        %x_40:i32 = let %27
+        %29:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %30:i32 = load %29
+        %x_43:i32 = let %30
+        %32:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %33:i32 = load %32
+        %x_46:i32 = let %33
+        %35:f32 = convert %x_37
+        %36:f32 = let %35
+        %37:f32 = convert %x_40
+        %38:f32 = let %37
+        %39:f32 = convert %x_43
+        %40:f32 = let %39
+        %41:f32 = convert %x_46
+        %42:vec4<f32> = construct %36, %38, %40, %41
+        store %x_GLF_color, %42
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %x_49:i32 = load %a
-        %x_50:f32 = convert %x_49
-        %31:vec4<f32> = construct %x_50, %x_50, %x_50, %x_50
-        store %x_GLF_color, %31
+      $B4: {  # false
+        %43:i32 = load %a
+        %x_49:i32 = let %43
+        %45:f32 = convert %x_49
+        %x_50:f32 = let %45
+        %47:vec4<f32> = construct %x_50, %x_50, %x_50, %x_50
+        store %x_GLF_color, %47
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %33:void = call %main_1
-    %34:vec4<f32> = load %x_GLF_color
-    %35:main_out = construct %34
-    ret %35
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %49:void = call %main_1
+    %50:vec4<f32> = load %x_GLF_color
+    %51:main_out = construct %50
+    ret %51
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inclusive-or/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inclusive-or/0-opt.spvasm.expected.ir.msl
index 971a4e9..618ee74 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inclusive-or/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inclusive-or/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,61 +20,64 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_8:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, f32, read_write> = var
     %6:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
     %7:i32 = load %6
     %8:f32 = convert %7
-    %9:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %10:i32 = load %9
-    %11:f32 = convert %10
-    %12:vec2<f32> = construct %8, %11
-    %13:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %14:i32 = load %13
-    %15:i32 = or %14, 1i
-    %16:f32 = access %12, %15
-    store %a, %16
-    %17:f32 = load %a
-    %18:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-    %19:f32 = load %18
-    %20:bool = eq %17, %19
-    if %20 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %21:f32 = load %a
-        %22:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %23:i32 = load %22
-        %24:f32 = convert %23
-        %25:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %26:i32 = load %25
-        %27:f32 = convert %26
-        %28:f32 = load %a
-        %29:vec4<f32> = construct %21, %24, %27, %28
-        store %x_GLF_color, %29
+    %9:f32 = let %8
+    %10:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %11:i32 = load %10
+    %12:f32 = convert %11
+    %13:vec2<f32> = construct %9, %12
+    %14:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %15:i32 = load %14
+    %16:i32 = or %15, 1i
+    %17:f32 = access %13, %16
+    store %a, %17
+    %18:f32 = load %a
+    %19:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+    %20:f32 = load %19
+    %21:bool = eq %18, %20
+    if %21 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %22:f32 = load %a
+        %23:f32 = let %22
+        %24:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %25:i32 = load %24
+        %26:f32 = convert %25
+        %27:f32 = let %26
+        %28:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %29:i32 = load %28
+        %30:f32 = convert %29
+        %31:f32 = load %a
+        %32:vec4<f32> = construct %23, %27, %30, %31
+        store %x_GLF_color, %32
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %30:f32 = load %a
-        %31:vec4<f32> = construct %30
-        store %x_GLF_color, %31
+      $B4: {  # false
+        %33:f32 = load %a
+        %34:vec4<f32> = construct %33
+        store %x_GLF_color, %34
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %33:void = call %main_1
-    %34:vec4<f32> = load %x_GLF_color
-    %35:main_out = construct %34
-    ret %35
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %36:void = call %main_1
+    %37:vec4<f32> = load %x_GLF_color
+    %38:main_out = construct %37
+    ret %38
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inclusive-or/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inclusive-or/0-opt.wgsl.expected.ir.msl
index 277a8e2..9a6acc8 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inclusive-or/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inclusive-or/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,61 +20,73 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_8:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, f32, read_write> = var
     %6:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_31:i32 = load %6
-    %8:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_34:i32 = load %8
-    %10:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_38:i32 = load %10
-    %12:f32 = convert %x_31
-    %13:f32 = convert %x_34
-    %14:vec2<f32> = construct %12, %13
-    %15:i32 = or %x_38, 1i
-    %16:f32 = access %14, %15
-    store %a, %16
-    %x_41:f32 = load %a
-    %18:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-    %x_43:f32 = load %18
-    %20:bool = eq %x_41, %x_43
-    if %20 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %x_48:f32 = load %a
-        %22:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_50:i32 = load %22
-        %24:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_53:i32 = load %24
-        %x_55:f32 = load %a
-        %27:f32 = convert %x_50
-        %28:f32 = convert %x_53
-        %29:vec4<f32> = construct %x_48, %27, %28, %x_55
-        store %x_GLF_color, %29
+    %7:i32 = load %6
+    %x_31:i32 = let %7
+    %9:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %10:i32 = load %9
+    %x_34:i32 = let %10
+    %12:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %13:i32 = load %12
+    %x_38:i32 = let %13
+    %15:f32 = convert %x_31
+    %16:f32 = let %15
+    %17:f32 = convert %x_34
+    %18:vec2<f32> = construct %16, %17
+    %19:i32 = or %x_38, 1i
+    %20:f32 = access %18, %19
+    store %a, %20
+    %21:f32 = load %a
+    %x_41:f32 = let %21
+    %23:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+    %24:f32 = load %23
+    %x_43:f32 = let %24
+    %26:bool = eq %x_41, %x_43
+    if %26 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %27:f32 = load %a
+        %x_48:f32 = let %27
+        %29:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %30:i32 = load %29
+        %x_50:i32 = let %30
+        %32:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %33:i32 = load %32
+        %x_53:i32 = let %33
+        %35:f32 = load %a
+        %x_55:f32 = let %35
+        %37:f32 = convert %x_50
+        %38:f32 = let %37
+        %39:f32 = convert %x_53
+        %40:vec4<f32> = construct %x_48, %38, %39, %x_55
+        store %x_GLF_color, %40
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %x_57:f32 = load %a
-        %31:vec4<f32> = construct %x_57, %x_57, %x_57, %x_57
-        store %x_GLF_color, %31
+      $B4: {  # false
+        %41:f32 = load %a
+        %x_57:f32 = let %41
+        %43:vec4<f32> = construct %x_57, %x_57, %x_57, %x_57
+        store %x_GLF_color, %43
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %33:void = call %main_1
-    %34:vec4<f32> = load %x_GLF_color
-    %35:main_out = construct %34
-    ret %35
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %45:void = call %main_1
+    %46:vec4<f32> = load %x_GLF_color
+    %47:main_out = construct %46
+    ret %47
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inst-combine-calls-for-compare-function-call-result/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inst-combine-calls-for-compare-function-call-result/0-opt.spvasm.expected.ir.msl
index 9bd0129..db256d0 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inst-combine-calls-for-compare-function-call-result/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inst-combine-calls-for-compare-function-call-result/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,28 +12,28 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_8:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%f_i1_ = func(%a:ptr<function, i32, read_write>):i32 -> %b2 {
-  %b2 = block {
+%f_i1_ = func(%a:ptr<function, i32, read_write>):i32 {
+  $B2: {
     %i:ptr<function, i32, read_write> = var
     %6:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
     %7:i32 = load %6
     store %i, %7
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %8:i32 = load %i
         %9:ptr<uniform, i32, read> = access %x_8, 0u, 6i, 0u
         %10:i32 = load %9
         %11:bool = lt %8, %10
-        if %11 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %11 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
@@ -41,270 +41,305 @@
         %13:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
         %14:i32 = load %13
         %15:bool = gt %12, %14
-        if %15 [t: %b7] {  # if_2
-          %b7 = block {  # true
-            %x_21:i32 = load %a
+        if %15 [t: $B7] {  # if_2
+          $B7: {  # true
+            %16:i32 = load %a
+            %x_21:i32 = let %16
             ret %x_21
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %17:i32 = load %i
-        %18:i32 = add %17, 1i
-        store %i, %18
-        next_iteration %b3
+      $B4: {  # continuing
+        %18:i32 = load %i
+        %19:i32 = add %18, 1i
+        store %i, %19
+        next_iteration  # -> $B3
       }
     }
-    %19:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-    %x_24:i32 = load %19
+    %20:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+    %21:i32 = load %20
+    %x_24:i32 = let %21
     ret %x_24
   }
 }
-%main_1 = func():void -> %b8 {
-  %b8 = block {
+%main_1 = func():void {
+  $B8: {
     %r:ptr<function, array<i32, 10>, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
     %a_1:ptr<function, array<i32, 10>, read_write> = var
     %param:ptr<function, i32, read_write> = var
     %param_1:ptr<function, i32, read_write> = var
     %i_2:ptr<function, i32, read_write> = var
-    %28:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-    %x_25:i32 = load %28
-    %30:ptr<function, i32, read_write> = access %r, %x_25
-    %31:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-    %32:i32 = load %31
-    store %30, %32
-    %33:ptr<uniform, i32, read> = access %x_8, 0u, 11i, 0u
-    %x_27:i32 = load %33
-    %35:ptr<function, i32, read_write> = access %r, %x_27
-    %36:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
+    %30:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+    %31:i32 = load %30
+    %x_25:i32 = let %31
+    %33:ptr<function, i32, read_write> = access %r, %x_25
+    %34:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+    %35:i32 = load %34
+    store %33, %35
+    %36:ptr<uniform, i32, read> = access %x_8, 0u, 11i, 0u
     %37:i32 = load %36
-    store %35, %37
-    %38:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-    %x_29:i32 = load %38
-    %40:ptr<function, i32, read_write> = access %r, %x_29
-    %41:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
-    %42:i32 = load %41
-    store %40, %42
-    %43:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
-    %x_31:i32 = load %43
-    %45:ptr<function, i32, read_write> = access %r, %x_31
-    %46:ptr<uniform, i32, read> = access %x_8, 0u, 4i, 0u
+    %x_27:i32 = let %37
+    %39:ptr<function, i32, read_write> = access %r, %x_27
+    %40:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
+    %41:i32 = load %40
+    store %39, %41
+    %42:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+    %43:i32 = load %42
+    %x_29:i32 = let %43
+    %45:ptr<function, i32, read_write> = access %r, %x_29
+    %46:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
     %47:i32 = load %46
     store %45, %47
-    %48:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
-    %x_33:i32 = load %48
-    %50:ptr<function, i32, read_write> = access %r, %x_33
-    %51:ptr<uniform, i32, read> = access %x_8, 0u, 5i, 0u
-    %52:i32 = load %51
-    store %50, %52
-    %53:ptr<uniform, i32, read> = access %x_8, 0u, 4i, 0u
-    %x_35:i32 = load %53
-    %55:ptr<function, i32, read_write> = access %r, %x_35
-    %56:ptr<uniform, i32, read> = access %x_8, 0u, 6i, 0u
-    %57:i32 = load %56
-    store %55, %57
+    %48:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
+    %49:i32 = load %48
+    %x_31:i32 = let %49
+    %51:ptr<function, i32, read_write> = access %r, %x_31
+    %52:ptr<uniform, i32, read> = access %x_8, 0u, 4i, 0u
+    %53:i32 = load %52
+    store %51, %53
+    %54:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
+    %55:i32 = load %54
+    %x_33:i32 = let %55
+    %57:ptr<function, i32, read_write> = access %r, %x_33
     %58:ptr<uniform, i32, read> = access %x_8, 0u, 5i, 0u
-    %x_37:i32 = load %58
-    %60:ptr<function, i32, read_write> = access %r, %x_37
-    %61:ptr<uniform, i32, read> = access %x_8, 0u, 7i, 0u
-    %62:i32 = load %61
-    store %60, %62
-    %63:ptr<uniform, i32, read> = access %x_8, 0u, 8i, 0u
-    %x_39:i32 = load %63
-    %65:ptr<function, i32, read_write> = access %r, %x_39
-    %66:ptr<uniform, i32, read> = access %x_8, 0u, 8i, 0u
+    %59:i32 = load %58
+    store %57, %59
+    %60:ptr<uniform, i32, read> = access %x_8, 0u, 4i, 0u
+    %61:i32 = load %60
+    %x_35:i32 = let %61
+    %63:ptr<function, i32, read_write> = access %r, %x_35
+    %64:ptr<uniform, i32, read> = access %x_8, 0u, 6i, 0u
+    %65:i32 = load %64
+    store %63, %65
+    %66:ptr<uniform, i32, read> = access %x_8, 0u, 5i, 0u
     %67:i32 = load %66
-    store %65, %67
-    %68:ptr<uniform, i32, read> = access %x_8, 0u, 9i, 0u
-    %x_41:i32 = load %68
-    %70:ptr<function, i32, read_write> = access %r, %x_41
-    %71:ptr<uniform, i32, read> = access %x_8, 0u, 9i, 0u
-    %72:i32 = load %71
-    store %70, %72
-    %73:ptr<uniform, i32, read> = access %x_8, 0u, 10i, 0u
-    %x_43:i32 = load %73
-    %75:ptr<function, i32, read_write> = access %r, %x_43
-    %76:ptr<uniform, i32, read> = access %x_8, 0u, 10i, 0u
+    %x_37:i32 = let %67
+    %69:ptr<function, i32, read_write> = access %r, %x_37
+    %70:ptr<uniform, i32, read> = access %x_8, 0u, 7i, 0u
+    %71:i32 = load %70
+    store %69, %71
+    %72:ptr<uniform, i32, read> = access %x_8, 0u, 8i, 0u
+    %73:i32 = load %72
+    %x_39:i32 = let %73
+    %75:ptr<function, i32, read_write> = access %r, %x_39
+    %76:ptr<uniform, i32, read> = access %x_8, 0u, 8i, 0u
     %77:i32 = load %76
     store %75, %77
-    %78:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+    %78:ptr<uniform, i32, read> = access %x_8, 0u, 9i, 0u
     %79:i32 = load %78
-    store %i_1, %79
-    loop [b: %b9, c: %b10] {  # loop_2
-      %b9 = block {  # body
-        %80:i32 = load %i_1
-        %81:ptr<uniform, i32, read> = access %x_8, 0u, 6i, 0u
-        %82:i32 = load %81
-        %83:bool = lt %80, %82
-        if %83 [t: %b11, f: %b12] {  # if_3
-          %b11 = block {  # true
+    %x_41:i32 = let %79
+    %81:ptr<function, i32, read_write> = access %r, %x_41
+    %82:ptr<uniform, i32, read> = access %x_8, 0u, 9i, 0u
+    %83:i32 = load %82
+    store %81, %83
+    %84:ptr<uniform, i32, read> = access %x_8, 0u, 10i, 0u
+    %85:i32 = load %84
+    %x_43:i32 = let %85
+    %87:ptr<function, i32, read_write> = access %r, %x_43
+    %88:ptr<uniform, i32, read> = access %x_8, 0u, 10i, 0u
+    %89:i32 = load %88
+    store %87, %89
+    %90:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+    %91:i32 = load %90
+    store %i_1, %91
+    loop [b: $B9, c: $B10] {  # loop_2
+      $B9: {  # body
+        %92:i32 = load %i_1
+        %93:ptr<uniform, i32, read> = access %x_8, 0u, 6i, 0u
+        %94:i32 = load %93
+        %95:bool = lt %92, %94
+        if %95 [t: $B11, f: $B12] {  # if_3
+          $B11: {  # true
             exit_if  # if_3
           }
-          %b12 = block {  # false
+          $B12: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_48:i32 = load %i_1
-        %85:ptr<function, i32, read_write> = access %a_1, %x_48
-        %86:i32 = load %i_1
-        store %85, %86
-        %87:i32 = load %i_1
-        %88:ptr<uniform, i32, read> = access %x_8, 0u, 6i, 0u
-        %89:i32 = load %88
-        %90:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-        %91:i32 = load %90
-        %92:i32 = div %89, %91
-        %93:bool = lt %87, %92
-        if %93 [t: %b13, f: %b14] {  # if_4
-          %b13 = block {  # true
-            %x_54:i32 = load %i_1
-            %95:ptr<function, i32, read_write> = access %a_1, %x_54
-            %96:i32 = load %i_1
-            %97:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-            %98:i32 = load %97
-            %99:i32 = add %96, %98
-            store %95, %99
-            %100:i32 = load %i_1
-            %101:ptr<uniform, i32, read> = access %x_8, 0u, 6i, 0u
-            %102:i32 = load %101
-            %103:bool = lt %100, %102
-            if %103 [t: %b15] {  # if_5
-              %b15 = block {  # true
-                continue %b10
+        %96:i32 = load %i_1
+        %x_48:i32 = let %96
+        %98:ptr<function, i32, read_write> = access %a_1, %x_48
+        %99:i32 = load %i_1
+        store %98, %99
+        %100:i32 = load %i_1
+        %101:i32 = let %100
+        %102:ptr<uniform, i32, read> = access %x_8, 0u, 6i, 0u
+        %103:i32 = load %102
+        %104:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+        %105:i32 = load %104
+        %106:i32 = call %tint_div_i32, %103, %105
+        %108:bool = lt %101, %106
+        if %108 [t: $B13, f: $B14] {  # if_4
+          $B13: {  # true
+            %109:i32 = load %i_1
+            %x_54:i32 = let %109
+            %111:ptr<function, i32, read_write> = access %a_1, %x_54
+            %112:i32 = load %i_1
+            %113:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+            %114:i32 = load %113
+            %115:i32 = add %112, %114
+            store %111, %115
+            %116:i32 = load %i_1
+            %117:ptr<uniform, i32, read> = access %x_8, 0u, 6i, 0u
+            %118:i32 = load %117
+            %119:bool = lt %116, %118
+            if %119 [t: $B15] {  # if_5
+              $B15: {  # true
+                continue  # -> $B10
               }
             }
-            %x_60:i32 = load %i_1
-            %105:ptr<function, i32, read_write> = access %a_1, %x_60
-            %106:i32 = load %i_1
-            %107:ptr<uniform, i32, read> = access %x_8, 0u, 8i, 0u
-            %108:i32 = load %107
-            %109:i32 = add %106, %108
-            store %105, %109
-            %110:i32 = load %i_1
-            %111:ptr<function, i32, read_write> = access %a_1, %110
-            %112:i32 = load %111
-            store %param, %112
-            %x_66:i32 = call %f_i1_, %param
-            %114:ptr<uniform, i32, read> = access %x_8, 0u, 8i, 0u
-            %115:i32 = load %114
-            %116:bool = lt %x_66, %115
-            if %116 [t: %b16] {  # if_6
-              %b16 = block {  # true
-                %x_68:i32 = load %i_1
+            %120:i32 = load %i_1
+            %x_60:i32 = let %120
+            %122:ptr<function, i32, read_write> = access %a_1, %x_60
+            %123:i32 = load %i_1
+            %124:ptr<uniform, i32, read> = access %x_8, 0u, 8i, 0u
+            %125:i32 = load %124
+            %126:i32 = add %123, %125
+            store %122, %126
+            %127:i32 = load %i_1
+            %128:ptr<function, i32, read_write> = access %a_1, %127
+            %129:i32 = load %128
+            store %param, %129
+            %130:i32 = call %f_i1_, %param
+            %x_66:i32 = let %130
+            %132:ptr<uniform, i32, read> = access %x_8, 0u, 8i, 0u
+            %133:i32 = load %132
+            %134:bool = lt %x_66, %133
+            if %134 [t: $B16] {  # if_6
+              $B16: {  # true
+                %135:i32 = load %i_1
+                %x_68:i32 = let %135
                 %x_182_save:i32 = let %x_68
-                %119:ptr<function, i32, read_write> = access %a_1, %x_182_save
-                %120:ptr<function, i32, read_write> = access %a_1, %x_68
-                %121:i32 = load %120
-                %122:i32 = sub %121, 1i
-                store %119, %122
+                %138:ptr<function, i32, read_write> = access %a_1, %x_182_save
+                %139:ptr<function, i32, read_write> = access %a_1, %x_68
+                %140:i32 = load %139
+                %141:i32 = sub %140, 1i
+                store %138, %141
                 exit_if  # if_6
               }
             }
             exit_if  # if_4
           }
-          %b14 = block {  # false
-            %123:i32 = load %i_1
-            %124:ptr<function, i32, read_write> = access %a_1, %123
-            %125:i32 = load %124
-            store %param_1, %125
-            %x_73:i32 = call %f_i1_, %param_1
-            %127:ptr<uniform, i32, read> = access %x_8, 0u, 8i, 0u
-            %128:i32 = load %127
-            %129:bool = lt %x_73, %128
-            if %129 [t: %b17] {  # if_7
-              %b17 = block {  # true
-                %x_75:i32 = load %i_1
-                %131:ptr<function, i32, read_write> = access %a_1, %x_75
-                %132:i32 = load %i_1
-                %133:ptr<function, i32, read_write> = access %a_1, %132
-                %134:i32 = load %133
-                %135:ptr<uniform, i32, read> = access %x_8, 0u, 4i, 0u
-                %136:i32 = load %135
-                %137:i32 = add %134, %136
-                store %131, %137
+          $B14: {  # false
+            %142:i32 = load %i_1
+            %143:ptr<function, i32, read_write> = access %a_1, %142
+            %144:i32 = load %143
+            store %param_1, %144
+            %145:i32 = call %f_i1_, %param_1
+            %x_73:i32 = let %145
+            %147:ptr<uniform, i32, read> = access %x_8, 0u, 8i, 0u
+            %148:i32 = load %147
+            %149:bool = lt %x_73, %148
+            if %149 [t: $B17] {  # if_7
+              $B17: {  # true
+                %150:i32 = load %i_1
+                %x_75:i32 = let %150
+                %152:ptr<function, i32, read_write> = access %a_1, %x_75
+                %153:i32 = load %i_1
+                %154:ptr<function, i32, read_write> = access %a_1, %153
+                %155:i32 = load %154
+                %156:ptr<uniform, i32, read> = access %x_8, 0u, 4i, 0u
+                %157:i32 = load %156
+                %158:i32 = add %155, %157
+                store %152, %158
                 exit_if  # if_7
               }
             }
             exit_if  # if_4
           }
         }
-        continue %b10
+        continue  # -> $B10
       }
-      %b10 = block {  # continuing
-        %138:i32 = load %i_1
-        %139:i32 = add %138, 1i
-        store %i_1, %139
-        next_iteration %b9
+      $B10: {  # continuing
+        %159:i32 = load %i_1
+        %160:i32 = add %159, 1i
+        store %i_1, %160
+        next_iteration  # -> $B9
       }
     }
-    %140:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-    %141:i32 = load %140
-    store %i_2, %141
-    loop [b: %b18, c: %b19] {  # loop_3
-      %b18 = block {  # body
-        %142:i32 = load %i_2
-        %143:ptr<uniform, i32, read> = access %x_8, 0u, 6i, 0u
-        %144:i32 = load %143
-        %145:bool = lt %142, %144
-        if %145 [t: %b20, f: %b21] {  # if_8
-          %b20 = block {  # true
+    %161:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+    %162:i32 = load %161
+    store %i_2, %162
+    loop [b: $B18, c: $B19] {  # loop_3
+      $B18: {  # body
+        %163:i32 = load %i_2
+        %164:ptr<uniform, i32, read> = access %x_8, 0u, 6i, 0u
+        %165:i32 = load %164
+        %166:bool = lt %163, %165
+        if %166 [t: $B20, f: $B21] {  # if_8
+          $B20: {  # true
             exit_if  # if_8
           }
-          %b21 = block {  # false
+          $B21: {  # false
             exit_loop  # loop_3
           }
         }
-        %146:i32 = load %i_2
-        %147:ptr<function, i32, read_write> = access %a_1, %146
-        %148:i32 = load %147
-        %149:i32 = load %i_2
-        %150:ptr<function, i32, read_write> = access %r, %149
-        %151:i32 = load %150
-        %152:bool = neq %148, %151
-        if %152 [t: %b22] {  # if_9
-          %b22 = block {  # true
-            %153:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-            %154:i32 = load %153
-            %155:f32 = convert %154
-            %156:vec4<f32> = construct %155
-            store %x_GLF_color, %156
+        %167:i32 = load %i_2
+        %168:ptr<function, i32, read_write> = access %a_1, %167
+        %169:i32 = load %168
+        %170:i32 = load %i_2
+        %171:ptr<function, i32, read_write> = access %r, %170
+        %172:i32 = load %171
+        %173:bool = neq %169, %172
+        if %173 [t: $B22] {  # if_9
+          $B22: {  # true
+            %174:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+            %175:i32 = load %174
+            %176:f32 = convert %175
+            %177:vec4<f32> = construct %176
+            store %x_GLF_color, %177
             ret
           }
         }
-        continue %b19
+        continue  # -> $B19
       }
-      %b19 = block {  # continuing
-        %157:i32 = load %i_2
-        %158:i32 = add %157, 1i
-        store %i_2, %158
-        next_iteration %b18
+      $B19: {  # continuing
+        %178:i32 = load %i_2
+        %179:i32 = add %178, 1i
+        store %i_2, %179
+        next_iteration  # -> $B18
       }
     }
-    %159:ptr<uniform, i32, read> = access %x_8, 0u, 11i, 0u
-    %160:i32 = load %159
-    %161:f32 = convert %160
-    %162:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-    %163:i32 = load %162
-    %164:f32 = convert %163
-    %165:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-    %166:i32 = load %165
-    %167:f32 = convert %166
-    %168:ptr<uniform, i32, read> = access %x_8, 0u, 11i, 0u
-    %169:i32 = load %168
-    %170:f32 = convert %169
-    %171:vec4<f32> = construct %161, %164, %167, %170
-    store %x_GLF_color, %171
+    %180:ptr<uniform, i32, read> = access %x_8, 0u, 11i, 0u
+    %181:i32 = load %180
+    %182:f32 = convert %181
+    %183:f32 = let %182
+    %184:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+    %185:i32 = load %184
+    %186:f32 = convert %185
+    %187:f32 = let %186
+    %188:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+    %189:i32 = load %188
+    %190:f32 = convert %189
+    %191:f32 = let %190
+    %192:ptr<uniform, i32, read> = access %x_8, 0u, 11i, 0u
+    %193:i32 = load %192
+    %194:f32 = convert %193
+    %195:vec4<f32> = construct %183, %187, %191, %194
+    store %x_GLF_color, %195
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b23 {
-  %b23 = block {
-    %173:void = call %main_1
-    %174:vec4<f32> = load %x_GLF_color
-    %175:main_out = construct %174
-    ret %175
+%tint_symbol = @fragment func():main_out {
+  $B23: {
+    %197:void = call %main_1
+    %198:vec4<f32> = load %x_GLF_color
+    %199:main_out = construct %198
+    ret %199
+  }
+}
+%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B24: {
+    %202:bool = eq %rhs, 0i
+    %203:bool = eq %lhs, -2147483648i
+    %204:bool = eq %rhs, -1i
+    %205:bool = and %203, %204
+    %206:bool = or %202, %205
+    %207:i32 = select %rhs, 1i, %206
+    %208:i32 = div %lhs, %207
+    ret %208
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inst-combine-calls-for-compare-function-call-result/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inst-combine-calls-for-compare-function-call-result/0-opt.wgsl.expected.ir.msl
index 610b270..853b219 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inst-combine-calls-for-compare-function-call-result/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inst-combine-calls-for-compare-function-call-result/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,298 +12,385 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_8:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%f_i1_ = func(%a:ptr<function, i32, read_write>):i32 -> %b2 {
-  %b2 = block {
+%f_i1_ = func(%a:ptr<function, i32, read_write>):i32 {
+  $B2: {
     %i:ptr<function, i32, read_write> = var
     %6:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-    %x_16:i32 = load %6
+    %7:i32 = load %6
+    %x_16:i32 = let %7
     store %i, %x_16
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_17:i32 = load %i
-        %9:ptr<uniform, i32, read> = access %x_8, 0u, 6i, 0u
-        %x_18:i32 = load %9
-        %11:bool = lt %x_17, %x_18
-        if %11 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %9:i32 = load %i
+        %x_17:i32 = let %9
+        %11:ptr<uniform, i32, read> = access %x_8, 0u, 6i, 0u
+        %12:i32 = load %11
+        %x_18:i32 = let %12
+        %14:bool = lt %x_17, %x_18
+        if %14 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_19:i32 = load %i
-        %13:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
-        %x_20:i32 = load %13
-        %15:bool = gt %x_19, %x_20
-        if %15 [t: %b7] {  # if_2
-          %b7 = block {  # true
-            %x_21:i32 = load %a
+        %15:i32 = load %i
+        %x_19:i32 = let %15
+        %17:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
+        %18:i32 = load %17
+        %x_20:i32 = let %18
+        %20:bool = gt %x_19, %x_20
+        if %20 [t: $B7] {  # if_2
+          $B7: {  # true
+            %21:i32 = load %a
+            %x_21:i32 = let %21
             ret %x_21
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_22:i32 = load %i
-        %18:i32 = add %x_22, 1i
-        store %i, %18
-        next_iteration %b3
+      $B4: {  # continuing
+        %23:i32 = load %i
+        %x_22:i32 = let %23
+        %25:i32 = add %x_22, 1i
+        store %i, %25
+        next_iteration  # -> $B3
       }
     }
-    %19:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-    %x_24:i32 = load %19
+    %26:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+    %27:i32 = load %26
+    %x_24:i32 = let %27
     ret %x_24
   }
 }
-%main_1 = func():void -> %b8 {
-  %b8 = block {
+%main_1 = func():void {
+  $B8: {
     %r:ptr<function, array<i32, 10>, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
     %a_1:ptr<function, array<i32, 10>, read_write> = var
     %param:ptr<function, i32, read_write> = var
     %param_1:ptr<function, i32, read_write> = var
     %i_2:ptr<function, i32, read_write> = var
-    %28:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-    %x_25:i32 = load %28
-    %30:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-    %x_26:i32 = load %30
-    %32:ptr<function, i32, read_write> = access %r, %x_25
-    store %32, %x_26
-    %33:ptr<uniform, i32, read> = access %x_8, 0u, 11i, 0u
-    %x_27:i32 = load %33
-    %35:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
-    %x_28:i32 = load %35
-    %37:ptr<function, i32, read_write> = access %r, %x_27
-    store %37, %x_28
-    %38:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-    %x_29:i32 = load %38
-    %40:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
-    %x_30:i32 = load %40
-    %42:ptr<function, i32, read_write> = access %r, %x_29
-    store %42, %x_30
-    %43:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
-    %x_31:i32 = load %43
-    %45:ptr<uniform, i32, read> = access %x_8, 0u, 4i, 0u
-    %x_32:i32 = load %45
-    %47:ptr<function, i32, read_write> = access %r, %x_31
-    store %47, %x_32
-    %48:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
-    %x_33:i32 = load %48
-    %50:ptr<uniform, i32, read> = access %x_8, 0u, 5i, 0u
-    %x_34:i32 = load %50
-    %52:ptr<function, i32, read_write> = access %r, %x_33
-    store %52, %x_34
-    %53:ptr<uniform, i32, read> = access %x_8, 0u, 4i, 0u
-    %x_35:i32 = load %53
-    %55:ptr<uniform, i32, read> = access %x_8, 0u, 6i, 0u
-    %x_36:i32 = load %55
-    %57:ptr<function, i32, read_write> = access %r, %x_35
-    store %57, %x_36
-    %58:ptr<uniform, i32, read> = access %x_8, 0u, 5i, 0u
-    %x_37:i32 = load %58
-    %60:ptr<uniform, i32, read> = access %x_8, 0u, 7i, 0u
-    %x_38:i32 = load %60
-    %62:ptr<function, i32, read_write> = access %r, %x_37
-    store %62, %x_38
-    %63:ptr<uniform, i32, read> = access %x_8, 0u, 8i, 0u
-    %x_39:i32 = load %63
-    %65:ptr<uniform, i32, read> = access %x_8, 0u, 8i, 0u
-    %x_40:i32 = load %65
-    %67:ptr<function, i32, read_write> = access %r, %x_39
-    store %67, %x_40
-    %68:ptr<uniform, i32, read> = access %x_8, 0u, 9i, 0u
-    %x_41:i32 = load %68
-    %70:ptr<uniform, i32, read> = access %x_8, 0u, 9i, 0u
-    %x_42:i32 = load %70
-    %72:ptr<function, i32, read_write> = access %r, %x_41
-    store %72, %x_42
-    %73:ptr<uniform, i32, read> = access %x_8, 0u, 10i, 0u
-    %x_43:i32 = load %73
-    %75:ptr<uniform, i32, read> = access %x_8, 0u, 10i, 0u
-    %x_44:i32 = load %75
-    %77:ptr<function, i32, read_write> = access %r, %x_43
-    store %77, %x_44
-    %78:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-    %x_45:i32 = load %78
+    %36:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+    %37:i32 = load %36
+    %x_25:i32 = let %37
+    %39:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+    %40:i32 = load %39
+    %x_26:i32 = let %40
+    %42:ptr<function, i32, read_write> = access %r, %x_25
+    store %42, %x_26
+    %43:ptr<uniform, i32, read> = access %x_8, 0u, 11i, 0u
+    %44:i32 = load %43
+    %x_27:i32 = let %44
+    %46:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
+    %47:i32 = load %46
+    %x_28:i32 = let %47
+    %49:ptr<function, i32, read_write> = access %r, %x_27
+    store %49, %x_28
+    %50:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+    %51:i32 = load %50
+    %x_29:i32 = let %51
+    %53:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
+    %54:i32 = load %53
+    %x_30:i32 = let %54
+    %56:ptr<function, i32, read_write> = access %r, %x_29
+    store %56, %x_30
+    %57:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
+    %58:i32 = load %57
+    %x_31:i32 = let %58
+    %60:ptr<uniform, i32, read> = access %x_8, 0u, 4i, 0u
+    %61:i32 = load %60
+    %x_32:i32 = let %61
+    %63:ptr<function, i32, read_write> = access %r, %x_31
+    store %63, %x_32
+    %64:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
+    %65:i32 = load %64
+    %x_33:i32 = let %65
+    %67:ptr<uniform, i32, read> = access %x_8, 0u, 5i, 0u
+    %68:i32 = load %67
+    %x_34:i32 = let %68
+    %70:ptr<function, i32, read_write> = access %r, %x_33
+    store %70, %x_34
+    %71:ptr<uniform, i32, read> = access %x_8, 0u, 4i, 0u
+    %72:i32 = load %71
+    %x_35:i32 = let %72
+    %74:ptr<uniform, i32, read> = access %x_8, 0u, 6i, 0u
+    %75:i32 = load %74
+    %x_36:i32 = let %75
+    %77:ptr<function, i32, read_write> = access %r, %x_35
+    store %77, %x_36
+    %78:ptr<uniform, i32, read> = access %x_8, 0u, 5i, 0u
+    %79:i32 = load %78
+    %x_37:i32 = let %79
+    %81:ptr<uniform, i32, read> = access %x_8, 0u, 7i, 0u
+    %82:i32 = load %81
+    %x_38:i32 = let %82
+    %84:ptr<function, i32, read_write> = access %r, %x_37
+    store %84, %x_38
+    %85:ptr<uniform, i32, read> = access %x_8, 0u, 8i, 0u
+    %86:i32 = load %85
+    %x_39:i32 = let %86
+    %88:ptr<uniform, i32, read> = access %x_8, 0u, 8i, 0u
+    %89:i32 = load %88
+    %x_40:i32 = let %89
+    %91:ptr<function, i32, read_write> = access %r, %x_39
+    store %91, %x_40
+    %92:ptr<uniform, i32, read> = access %x_8, 0u, 9i, 0u
+    %93:i32 = load %92
+    %x_41:i32 = let %93
+    %95:ptr<uniform, i32, read> = access %x_8, 0u, 9i, 0u
+    %96:i32 = load %95
+    %x_42:i32 = let %96
+    %98:ptr<function, i32, read_write> = access %r, %x_41
+    store %98, %x_42
+    %99:ptr<uniform, i32, read> = access %x_8, 0u, 10i, 0u
+    %100:i32 = load %99
+    %x_43:i32 = let %100
+    %102:ptr<uniform, i32, read> = access %x_8, 0u, 10i, 0u
+    %103:i32 = load %102
+    %x_44:i32 = let %103
+    %105:ptr<function, i32, read_write> = access %r, %x_43
+    store %105, %x_44
+    %106:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+    %107:i32 = load %106
+    %x_45:i32 = let %107
     store %i_1, %x_45
-    loop [b: %b9, c: %b10] {  # loop_2
-      %b9 = block {  # body
-        %x_46:i32 = load %i_1
-        %81:ptr<uniform, i32, read> = access %x_8, 0u, 6i, 0u
-        %x_47:i32 = load %81
-        %83:bool = lt %x_46, %x_47
-        if %83 [t: %b11, f: %b12] {  # if_3
-          %b11 = block {  # true
+    loop [b: $B9, c: $B10] {  # loop_2
+      $B9: {  # body
+        %109:i32 = load %i_1
+        %x_46:i32 = let %109
+        %111:ptr<uniform, i32, read> = access %x_8, 0u, 6i, 0u
+        %112:i32 = load %111
+        %x_47:i32 = let %112
+        %114:bool = lt %x_46, %x_47
+        if %114 [t: $B11, f: $B12] {  # if_3
+          $B11: {  # true
             exit_if  # if_3
           }
-          %b12 = block {  # false
+          $B12: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_48:i32 = load %i_1
-        %x_49:i32 = load %i_1
-        %86:ptr<function, i32, read_write> = access %a_1, %x_48
-        store %86, %x_49
-        %x_50:i32 = load %i_1
-        %88:ptr<uniform, i32, read> = access %x_8, 0u, 6i, 0u
-        %x_51:i32 = load %88
-        %90:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-        %x_52:i32 = load %90
-        %92:i32 = div %x_51, %x_52
-        %93:bool = lt %x_50, %92
-        if %93 [t: %b13, f: %b14] {  # if_4
-          %b13 = block {  # true
-            %x_54:i32 = load %i_1
-            %x_55:i32 = load %i_1
-            %96:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-            %x_56:i32 = load %96
-            %98:ptr<function, i32, read_write> = access %a_1, %x_54
-            %99:i32 = add %x_55, %x_56
-            store %98, %99
-            %x_58:i32 = load %i_1
-            %101:ptr<uniform, i32, read> = access %x_8, 0u, 6i, 0u
-            %x_59:i32 = load %101
-            %103:bool = lt %x_58, %x_59
-            if %103 [t: %b15] {  # if_5
-              %b15 = block {  # true
-                continue %b10
+        %115:i32 = load %i_1
+        %x_48:i32 = let %115
+        %117:i32 = load %i_1
+        %x_49:i32 = let %117
+        %119:ptr<function, i32, read_write> = access %a_1, %x_48
+        store %119, %x_49
+        %120:i32 = load %i_1
+        %x_50:i32 = let %120
+        %122:ptr<uniform, i32, read> = access %x_8, 0u, 6i, 0u
+        %123:i32 = load %122
+        %x_51:i32 = let %123
+        %125:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+        %126:i32 = load %125
+        %x_52:i32 = let %126
+        %128:i32 = call %tint_div_i32, %x_51, %x_52
+        %130:bool = lt %x_50, %128
+        if %130 [t: $B13, f: $B14] {  # if_4
+          $B13: {  # true
+            %131:i32 = load %i_1
+            %x_54:i32 = let %131
+            %133:i32 = load %i_1
+            %x_55:i32 = let %133
+            %135:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+            %136:i32 = load %135
+            %x_56:i32 = let %136
+            %138:ptr<function, i32, read_write> = access %a_1, %x_54
+            %139:i32 = add %x_55, %x_56
+            store %138, %139
+            %140:i32 = load %i_1
+            %x_58:i32 = let %140
+            %142:ptr<uniform, i32, read> = access %x_8, 0u, 6i, 0u
+            %143:i32 = load %142
+            %x_59:i32 = let %143
+            %145:bool = lt %x_58, %x_59
+            if %145 [t: $B15] {  # if_5
+              $B15: {  # true
+                continue  # -> $B10
               }
             }
-            %x_60:i32 = load %i_1
-            %x_61:i32 = load %i_1
-            %106:ptr<uniform, i32, read> = access %x_8, 0u, 8i, 0u
-            %x_62:i32 = load %106
-            %108:ptr<function, i32, read_write> = access %a_1, %x_60
-            %109:i32 = add %x_61, %x_62
-            store %108, %109
-            %x_64:i32 = load %i_1
-            %111:ptr<function, i32, read_write> = access %a_1, %x_64
-            %x_65:i32 = load %111
+            %146:i32 = load %i_1
+            %x_60:i32 = let %146
+            %148:i32 = load %i_1
+            %x_61:i32 = let %148
+            %150:ptr<uniform, i32, read> = access %x_8, 0u, 8i, 0u
+            %151:i32 = load %150
+            %x_62:i32 = let %151
+            %153:ptr<function, i32, read_write> = access %a_1, %x_60
+            %154:i32 = add %x_61, %x_62
+            store %153, %154
+            %155:i32 = load %i_1
+            %x_64:i32 = let %155
+            %157:ptr<function, i32, read_write> = access %a_1, %x_64
+            %158:i32 = load %157
+            %x_65:i32 = let %158
             store %param, %x_65
-            %x_66:i32 = call %f_i1_, %param
-            %114:ptr<uniform, i32, read> = access %x_8, 0u, 8i, 0u
-            %x_67:i32 = load %114
-            %116:bool = lt %x_66, %x_67
-            if %116 [t: %b16] {  # if_6
-              %b16 = block {  # true
-                %x_68:i32 = load %i_1
+            %160:i32 = call %f_i1_, %param
+            %x_66:i32 = let %160
+            %162:ptr<uniform, i32, read> = access %x_8, 0u, 8i, 0u
+            %163:i32 = load %162
+            %x_67:i32 = let %163
+            %165:bool = lt %x_66, %x_67
+            if %165 [t: $B16] {  # if_6
+              $B16: {  # true
+                %166:i32 = load %i_1
+                %x_68:i32 = let %166
                 %x_182_save:i32 = let %x_68
-                %119:ptr<function, i32, read_write> = access %a_1, %x_182_save
-                %x_69:i32 = load %119
-                %121:ptr<function, i32, read_write> = access %a_1, %x_182_save
-                %122:i32 = sub %x_69, 1i
-                store %121, %122
+                %169:ptr<function, i32, read_write> = access %a_1, %x_182_save
+                %170:i32 = load %169
+                %x_69:i32 = let %170
+                %172:ptr<function, i32, read_write> = access %a_1, %x_182_save
+                %173:i32 = sub %x_69, 1i
+                store %172, %173
                 exit_if  # if_6
               }
             }
             exit_if  # if_4
           }
-          %b14 = block {  # false
-            %x_71:i32 = load %i_1
-            %124:ptr<function, i32, read_write> = access %a_1, %x_71
-            %x_72:i32 = load %124
+          $B14: {  # false
+            %174:i32 = load %i_1
+            %x_71:i32 = let %174
+            %176:ptr<function, i32, read_write> = access %a_1, %x_71
+            %177:i32 = load %176
+            %x_72:i32 = let %177
             store %param_1, %x_72
-            %x_73:i32 = call %f_i1_, %param_1
-            %127:ptr<uniform, i32, read> = access %x_8, 0u, 8i, 0u
-            %x_74:i32 = load %127
-            %129:bool = lt %x_73, %x_74
-            if %129 [t: %b17] {  # if_7
-              %b17 = block {  # true
-                %x_75:i32 = load %i_1
-                %131:ptr<uniform, i32, read> = access %x_8, 0u, 4i, 0u
-                %x_76:i32 = load %131
-                %133:ptr<function, i32, read_write> = access %a_1, %x_75
-                %x_77:i32 = load %133
-                %135:ptr<function, i32, read_write> = access %a_1, %x_75
-                %136:i32 = add %x_77, %x_76
-                store %135, %136
+            %179:i32 = call %f_i1_, %param_1
+            %x_73:i32 = let %179
+            %181:ptr<uniform, i32, read> = access %x_8, 0u, 8i, 0u
+            %182:i32 = load %181
+            %x_74:i32 = let %182
+            %184:bool = lt %x_73, %x_74
+            if %184 [t: $B17] {  # if_7
+              $B17: {  # true
+                %185:i32 = load %i_1
+                %x_75:i32 = let %185
+                %187:ptr<uniform, i32, read> = access %x_8, 0u, 4i, 0u
+                %188:i32 = load %187
+                %x_76:i32 = let %188
+                %190:ptr<function, i32, read_write> = access %a_1, %x_75
+                %191:i32 = load %190
+                %x_77:i32 = let %191
+                %193:ptr<function, i32, read_write> = access %a_1, %x_75
+                %194:i32 = add %x_77, %x_76
+                store %193, %194
                 exit_if  # if_7
               }
             }
             exit_if  # if_4
           }
         }
-        continue %b10
+        continue  # -> $B10
       }
-      %b10 = block {  # continuing
-        %x_79:i32 = load %i_1
-        %138:i32 = add %x_79, 1i
-        store %i_1, %138
-        next_iteration %b9
+      $B10: {  # continuing
+        %195:i32 = load %i_1
+        %x_79:i32 = let %195
+        %197:i32 = add %x_79, 1i
+        store %i_1, %197
+        next_iteration  # -> $B9
       }
     }
-    %139:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-    %x_81:i32 = load %139
+    %198:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+    %199:i32 = load %198
+    %x_81:i32 = let %199
     store %i_2, %x_81
-    loop [b: %b18, c: %b19] {  # loop_3
-      %b18 = block {  # body
-        %x_82:i32 = load %i_2
-        %142:ptr<uniform, i32, read> = access %x_8, 0u, 6i, 0u
-        %x_83:i32 = load %142
-        %144:bool = lt %x_82, %x_83
-        if %144 [t: %b20, f: %b21] {  # if_8
-          %b20 = block {  # true
+    loop [b: $B18, c: $B19] {  # loop_3
+      $B18: {  # body
+        %201:i32 = load %i_2
+        %x_82:i32 = let %201
+        %203:ptr<uniform, i32, read> = access %x_8, 0u, 6i, 0u
+        %204:i32 = load %203
+        %x_83:i32 = let %204
+        %206:bool = lt %x_82, %x_83
+        if %206 [t: $B20, f: $B21] {  # if_8
+          $B20: {  # true
             exit_if  # if_8
           }
-          %b21 = block {  # false
+          $B21: {  # false
             exit_loop  # loop_3
           }
         }
-        %x_84:i32 = load %i_2
-        %146:ptr<function, i32, read_write> = access %a_1, %x_84
-        %x_85:i32 = load %146
-        %x_86:i32 = load %i_2
-        %149:ptr<function, i32, read_write> = access %r, %x_86
-        %x_87:i32 = load %149
-        %151:bool = neq %x_85, %x_87
-        if %151 [t: %b22] {  # if_9
-          %b22 = block {  # true
-            %152:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-            %x_88:i32 = load %152
-            %x_205:f32 = convert %x_88
-            %155:vec4<f32> = construct %x_205, %x_205, %x_205, %x_205
-            store %x_GLF_color, %155
+        %207:i32 = load %i_2
+        %x_84:i32 = let %207
+        %209:ptr<function, i32, read_write> = access %a_1, %x_84
+        %210:i32 = load %209
+        %x_85:i32 = let %210
+        %212:i32 = load %i_2
+        %x_86:i32 = let %212
+        %214:ptr<function, i32, read_write> = access %r, %x_86
+        %215:i32 = load %214
+        %x_87:i32 = let %215
+        %217:bool = neq %x_85, %x_87
+        if %217 [t: $B22] {  # if_9
+          $B22: {  # true
+            %218:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+            %219:i32 = load %218
+            %x_88:i32 = let %219
+            %221:f32 = convert %x_88
+            %x_205:f32 = let %221
+            %223:vec4<f32> = construct %x_205, %x_205, %x_205, %x_205
+            store %x_GLF_color, %223
             ret
           }
         }
-        continue %b19
+        continue  # -> $B19
       }
-      %b19 = block {  # continuing
-        %x_89:i32 = load %i_2
-        %157:i32 = add %x_89, 1i
-        store %i_2, %157
-        next_iteration %b18
+      $B19: {  # continuing
+        %224:i32 = load %i_2
+        %x_89:i32 = let %224
+        %226:i32 = add %x_89, 1i
+        store %i_2, %226
+        next_iteration  # -> $B18
       }
     }
-    %158:ptr<uniform, i32, read> = access %x_8, 0u, 11i, 0u
-    %x_91:i32 = load %158
-    %160:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-    %x_92:i32 = load %160
-    %162:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-    %x_93:i32 = load %162
-    %164:ptr<uniform, i32, read> = access %x_8, 0u, 11i, 0u
-    %x_94:i32 = load %164
-    %166:f32 = convert %x_91
-    %167:f32 = convert %x_92
-    %168:f32 = convert %x_93
-    %169:f32 = convert %x_94
-    %170:vec4<f32> = construct %166, %167, %168, %169
-    store %x_GLF_color, %170
+    %227:ptr<uniform, i32, read> = access %x_8, 0u, 11i, 0u
+    %228:i32 = load %227
+    %x_91:i32 = let %228
+    %230:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+    %231:i32 = load %230
+    %x_92:i32 = let %231
+    %233:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+    %234:i32 = load %233
+    %x_93:i32 = let %234
+    %236:ptr<uniform, i32, read> = access %x_8, 0u, 11i, 0u
+    %237:i32 = load %236
+    %x_94:i32 = let %237
+    %239:f32 = convert %x_91
+    %240:f32 = let %239
+    %241:f32 = convert %x_92
+    %242:f32 = let %241
+    %243:f32 = convert %x_93
+    %244:f32 = let %243
+    %245:f32 = convert %x_94
+    %246:vec4<f32> = construct %240, %242, %244, %245
+    store %x_GLF_color, %246
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b23 {
-  %b23 = block {
-    %172:void = call %main_1
-    %173:vec4<f32> = load %x_GLF_color
-    %174:main_out = construct %173
-    ret %174
+%tint_symbol = @fragment func():main_out {
+  $B23: {
+    %248:void = call %main_1
+    %249:vec4<f32> = load %x_GLF_color
+    %250:main_out = construct %249
+    ret %250
+  }
+}
+%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B24: {
+    %253:bool = eq %rhs, 0i
+    %254:bool = eq %lhs, -2147483648i
+    %255:bool = eq %rhs, -1i
+    %256:bool = and %254, %255
+    %257:bool = or %253, %256
+    %258:i32 = select %rhs, 1i, %257
+    %259:i32 = div %lhs, %258
+    ret %259
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-acos-undefined/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-acos-undefined/0-opt.spvasm.expected.ir.msl
index f6d3f68..6e61e4d 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-acos-undefined/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-acos-undefined/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,57 +20,61 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_8:ptr<uniform, buf1, read> = var @binding_point(0, 1)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, f32, read_write> = var
     %6:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
     %7:i32 = load %6
     %8:f32 = convert %7
-    %9:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
-    %10:i32 = load %9
-    %11:f32 = convert %10
-    %12:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
-    %13:i32 = load %12
-    %14:f32 = convert %13
-    %15:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
-    %16:i32 = load %15
-    %17:f32 = convert %16
-    %18:vec4<f32> = construct %8, %11, %14, %17
-    store %x_GLF_color, %18
-    %19:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
-    %x_45:f32 = load %19
-    %21:f32 = div %x_45, 1.0f
-    %22:f32 = floor %21
-    %23:f32 = mul 1.0f, %22
-    %24:f32 = sub %x_45, %23
-    store %a, %24
-    %25:f32 = load %a
-    %26:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-    %27:f32 = load %26
-    %28:bool = neq %25, %27
-    if %28 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %29:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-        %30:f32 = load %29
-        store_vector_element %x_GLF_color, 1u, %30
+    %9:f32 = let %8
+    %10:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
+    %11:i32 = load %10
+    %12:f32 = convert %11
+    %13:f32 = let %12
+    %14:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
+    %15:i32 = load %14
+    %16:f32 = convert %15
+    %17:f32 = let %16
+    %18:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
+    %19:i32 = load %18
+    %20:f32 = convert %19
+    %21:vec4<f32> = construct %9, %13, %17, %20
+    store %x_GLF_color, %21
+    %22:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
+    %23:f32 = load %22
+    %x_45:f32 = let %23
+    %25:f32 = div %x_45, 1.0f
+    %26:f32 = floor %25
+    %27:f32 = mul 1.0f, %26
+    %28:f32 = sub %x_45, %27
+    store %a, %28
+    %29:f32 = load %a
+    %30:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+    %31:f32 = load %30
+    %32:bool = neq %29, %31
+    if %32 [t: $B3] {  # if_1
+      $B3: {  # true
+        %33:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+        %34:f32 = load %33
+        store_vector_element %x_GLF_color, 1u, %34
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b4 {
-  %b4 = block {
-    %32:void = call %main_1
-    %33:vec4<f32> = load %x_GLF_color
-    %34:main_out = construct %33
-    ret %34
+%tint_symbol = @fragment func():main_out {
+  $B4: {
+    %36:void = call %main_1
+    %37:vec4<f32> = load %x_GLF_color
+    %38:main_out = construct %37
+    ret %38
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-acos-undefined/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-acos-undefined/0-opt.wgsl.expected.ir.msl
index 367497e..13f7fc1 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-acos-undefined/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-acos-undefined/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,44 +20,55 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_8:ptr<uniform, buf1, read> = var @binding_point(0, 1)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, f32, read_write> = var
     %6:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
-    %x_10:i32 = load %6
-    %8:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
-    %x_11:i32 = load %8
-    %10:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
-    %x_12:i32 = load %10
-    %12:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
-    %x_13:i32 = load %12
-    %14:f32 = convert %x_10
-    %15:f32 = convert %x_11
-    %16:f32 = convert %x_12
-    %17:f32 = convert %x_13
-    %18:vec4<f32> = construct %14, %15, %16, %17
-    store %x_GLF_color, %18
-    %19:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
-    %x_45:f32 = load %19
-    %21:f32 = div %x_45, 1.0f
-    %22:f32 = floor %21
-    %23:f32 = mul 1.0f, %22
-    %24:f32 = sub %x_45, %23
-    store %a, %24
-    %x_47:f32 = load %a
-    %26:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-    %x_49:f32 = load %26
-    %28:bool = neq %x_47, %x_49
-    if %28 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %29:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-        %x_54:f32 = load %29
+    %7:i32 = load %6
+    %x_10:i32 = let %7
+    %9:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
+    %10:i32 = load %9
+    %x_11:i32 = let %10
+    %12:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
+    %13:i32 = load %12
+    %x_12:i32 = let %13
+    %15:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
+    %16:i32 = load %15
+    %x_13:i32 = let %16
+    %18:f32 = convert %x_10
+    %19:f32 = let %18
+    %20:f32 = convert %x_11
+    %21:f32 = let %20
+    %22:f32 = convert %x_12
+    %23:f32 = let %22
+    %24:f32 = convert %x_13
+    %25:vec4<f32> = construct %19, %21, %23, %24
+    store %x_GLF_color, %25
+    %26:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
+    %27:f32 = load %26
+    %x_45:f32 = let %27
+    %29:f32 = div %x_45, 1.0f
+    %30:f32 = floor %29
+    %31:f32 = mul 1.0f, %30
+    %32:f32 = sub %x_45, %31
+    store %a, %32
+    %33:f32 = load %a
+    %x_47:f32 = let %33
+    %35:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+    %36:f32 = load %35
+    %x_49:f32 = let %36
+    %38:bool = neq %x_47, %x_49
+    if %38 [t: $B3] {  # if_1
+      $B3: {  # true
+        %39:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+        %40:f32 = load %39
+        %x_54:f32 = let %40
         store_vector_element %x_GLF_color, 1u, %x_54
         exit_if  # if_1
       }
@@ -65,12 +76,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b4 {
-  %b4 = block {
-    %32:void = call %main_1
-    %33:vec4<f32> = load %x_GLF_color
-    %34:main_out = construct %33
-    ret %34
+%tint_symbol = @fragment func():main_out {
+  $B4: {
+    %43:void = call %main_1
+    %44:vec4<f32> = load %x_GLF_color
+    %45:main_out = construct %44
+    ret %45
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-sqrt-undefined/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-sqrt-undefined/0-opt.spvasm.expected.ir.msl
index 6ef086a..d3ecab5 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-sqrt-undefined/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-sqrt-undefined/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,57 +20,61 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_8:ptr<uniform, buf1, read> = var @binding_point(0, 1)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, f32, read_write> = var
     %6:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
     %7:i32 = load %6
     %8:f32 = convert %7
-    %9:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
-    %10:i32 = load %9
-    %11:f32 = convert %10
-    %12:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
-    %13:i32 = load %12
-    %14:f32 = convert %13
-    %15:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
-    %16:i32 = load %15
-    %17:f32 = convert %16
-    %18:vec4<f32> = construct %8, %11, %14, %17
-    store %x_GLF_color, %18
-    %19:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
-    %x_45:f32 = load %19
-    %21:f32 = div 1.0f, %x_45
-    %22:f32 = floor %21
-    %23:f32 = mul %x_45, %22
-    %24:f32 = sub 1.0f, %23
-    store %a, %24
-    %25:f32 = load %a
-    %26:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-    %27:f32 = load %26
-    %28:bool = neq %25, %27
-    if %28 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %29:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-        %30:f32 = load %29
-        store_vector_element %x_GLF_color, 1u, %30
+    %9:f32 = let %8
+    %10:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
+    %11:i32 = load %10
+    %12:f32 = convert %11
+    %13:f32 = let %12
+    %14:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
+    %15:i32 = load %14
+    %16:f32 = convert %15
+    %17:f32 = let %16
+    %18:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
+    %19:i32 = load %18
+    %20:f32 = convert %19
+    %21:vec4<f32> = construct %9, %13, %17, %20
+    store %x_GLF_color, %21
+    %22:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
+    %23:f32 = load %22
+    %x_45:f32 = let %23
+    %25:f32 = div 1.0f, %x_45
+    %26:f32 = floor %25
+    %27:f32 = mul %x_45, %26
+    %28:f32 = sub 1.0f, %27
+    store %a, %28
+    %29:f32 = load %a
+    %30:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+    %31:f32 = load %30
+    %32:bool = neq %29, %31
+    if %32 [t: $B3] {  # if_1
+      $B3: {  # true
+        %33:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+        %34:f32 = load %33
+        store_vector_element %x_GLF_color, 1u, %34
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b4 {
-  %b4 = block {
-    %32:void = call %main_1
-    %33:vec4<f32> = load %x_GLF_color
-    %34:main_out = construct %33
-    ret %34
+%tint_symbol = @fragment func():main_out {
+  $B4: {
+    %36:void = call %main_1
+    %37:vec4<f32> = load %x_GLF_color
+    %38:main_out = construct %37
+    ret %38
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-sqrt-undefined/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-sqrt-undefined/0-opt.wgsl.expected.ir.msl
index 4d0acd6..767fe91 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-sqrt-undefined/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-sqrt-undefined/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,44 +20,55 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_8:ptr<uniform, buf1, read> = var @binding_point(0, 1)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, f32, read_write> = var
     %6:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
-    %x_10:i32 = load %6
-    %8:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
-    %x_11:i32 = load %8
-    %10:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
-    %x_12:i32 = load %10
-    %12:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
-    %x_13:i32 = load %12
-    %14:f32 = convert %x_10
-    %15:f32 = convert %x_11
-    %16:f32 = convert %x_12
-    %17:f32 = convert %x_13
-    %18:vec4<f32> = construct %14, %15, %16, %17
-    store %x_GLF_color, %18
-    %19:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
-    %x_45:f32 = load %19
-    %21:f32 = div 1.0f, %x_45
-    %22:f32 = floor %21
-    %23:f32 = mul %x_45, %22
-    %24:f32 = sub 1.0f, %23
-    store %a, %24
-    %x_47:f32 = load %a
-    %26:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-    %x_49:f32 = load %26
-    %28:bool = neq %x_47, %x_49
-    if %28 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %29:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-        %x_54:f32 = load %29
+    %7:i32 = load %6
+    %x_10:i32 = let %7
+    %9:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
+    %10:i32 = load %9
+    %x_11:i32 = let %10
+    %12:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
+    %13:i32 = load %12
+    %x_12:i32 = let %13
+    %15:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
+    %16:i32 = load %15
+    %x_13:i32 = let %16
+    %18:f32 = convert %x_10
+    %19:f32 = let %18
+    %20:f32 = convert %x_11
+    %21:f32 = let %20
+    %22:f32 = convert %x_12
+    %23:f32 = let %22
+    %24:f32 = convert %x_13
+    %25:vec4<f32> = construct %19, %21, %23, %24
+    store %x_GLF_color, %25
+    %26:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
+    %27:f32 = load %26
+    %x_45:f32 = let %27
+    %29:f32 = div 1.0f, %x_45
+    %30:f32 = floor %29
+    %31:f32 = mul %x_45, %30
+    %32:f32 = sub 1.0f, %31
+    store %a, %32
+    %33:f32 = load %a
+    %x_47:f32 = let %33
+    %35:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+    %36:f32 = load %35
+    %x_49:f32 = let %36
+    %38:bool = neq %x_47, %x_49
+    if %38 [t: $B3] {  # if_1
+      $B3: {  # true
+        %39:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+        %40:f32 = load %39
+        %x_54:f32 = let %40
         store_vector_element %x_GLF_color, 1u, %x_54
         exit_if  # if_1
       }
@@ -65,12 +76,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b4 {
-  %b4 = block {
-    %32:void = call %main_1
-    %33:vec4<f32> = load %x_GLF_color
-    %34:main_out = construct %33
-    ret %34
+%tint_symbol = @fragment func():main_out {
+  $B4: {
+    %43:void = call %main_1
+    %44:vec4<f32> = load %x_GLF_color
+    %45:main_out = construct %44
+    ret %45
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-sqrt/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-sqrt/0.spvasm.expected.ir.msl
index 1fde0fd..7d9a43f 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-sqrt/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-sqrt/0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,20 +20,20 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_7:ptr<uniform, buf1, read> = var @binding_point(0, 1)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %5:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
     %6:f32 = load %5
     %7:f32 = sqrt %6
     %8:bool = lt %7, -1.0f
-    if %8 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    if %8 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         %9:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
         %10:i32 = load %9
         %11:f32 = convert %10
@@ -41,27 +41,29 @@
         store %x_GLF_color, %12
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         %13:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
         %14:i32 = load %13
-        %x_41:f32 = convert %14
-        %16:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %17:i32 = load %16
-        %x_43:f32 = convert %17
-        %19:vec4<f32> = construct %x_41, %x_43, %x_43, %x_41
-        store %x_GLF_color, %19
+        %15:f32 = convert %14
+        %x_41:f32 = let %15
+        %17:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %18:i32 = load %17
+        %19:f32 = convert %18
+        %x_43:f32 = let %19
+        %21:vec4<f32> = construct %x_41, %x_43, %x_43, %x_41
+        store %x_GLF_color, %21
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %21:void = call %main_1
-    %22:vec4<f32> = load %x_GLF_color
-    %23:main_out = construct %22
-    ret %23
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %23:void = call %main_1
+    %24:vec4<f32> = load %x_GLF_color
+    %25:main_out = construct %24
+    ret %25
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-sqrt/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-sqrt/0.wgsl.expected.ir.msl
index 44cbd99..84b01c7 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-sqrt/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-sqrt/0.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,48 +20,55 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_7:ptr<uniform, buf1, read> = var @binding_point(0, 1)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %5:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
-    %x_31:f32 = load %5
-    %7:f32 = sqrt %x_31
-    %8:bool = lt %7, -1.0f
-    if %8 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %9:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %x_10:i32 = load %9
-        %x_38:f32 = convert %x_10
-        %12:vec4<f32> = construct %x_38, %x_38, %x_38, %x_38
-        store %x_GLF_color, %12
+    %6:f32 = load %5
+    %x_31:f32 = let %6
+    %8:f32 = sqrt %x_31
+    %9:bool = lt %8, -1.0f
+    if %9 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %10:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %11:i32 = load %10
+        %x_10:i32 = let %11
+        %13:f32 = convert %x_10
+        %x_38:f32 = let %13
+        %15:vec4<f32> = construct %x_38, %x_38, %x_38, %x_38
+        store %x_GLF_color, %15
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %13:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %x_11:i32 = load %13
-        %x_41:f32 = convert %x_11
-        %16:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %x_12:i32 = load %16
-        %x_43:f32 = convert %x_12
-        %19:vec4<f32> = construct %x_41, %x_43, %x_43, %x_41
-        store %x_GLF_color, %19
+      $B4: {  # false
+        %16:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %17:i32 = load %16
+        %x_11:i32 = let %17
+        %19:f32 = convert %x_11
+        %x_41:f32 = let %19
+        %21:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %22:i32 = load %21
+        %x_12:i32 = let %22
+        %24:f32 = convert %x_12
+        %x_43:f32 = let %24
+        %26:vec4<f32> = construct %x_41, %x_43, %x_43, %x_41
+        store %x_GLF_color, %26
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %21:void = call %main_1
-    %22:vec4<f32> = load %x_GLF_color
-    %23:main_out = construct %22
-    ret %23
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %28:void = call %main_1
+    %29:vec4<f32> = load %x_GLF_color
+    %30:main_out = construct %29
+    ret %30
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-instructions-first-value-phi/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-instructions-first-value-phi/0-opt.spvasm.expected.ir.msl
index acb96f7..e983a7e 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-instructions-first-value-phi/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-instructions-first-value-phi/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf1 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf1 = struct @align(8) {
   v1:vec2<f32> @offset(0)
 }
 
@@ -20,33 +20,34 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_8: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
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%func_struct_S_i11_ = func(%s:ptr<function, S, read_write>):void -> %b2 {
-  %b2 = block {
-    %6:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
-    %7:f32 = load_vector_element %6, 0u
-    %8:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
-    %9:f32 = load_vector_element %8, 1u
-    %10:bool = gt %7, %9
-    if %10 [t: %b3] {  # if_1
-      %b3 = block {  # true
+%func_struct_S_i11_ = func(%s:ptr<function, S, read_write>):void {
+  $B2: {
+    %7:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
+    %8:f32 = load_vector_element %7, 0u
+    %9:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
+    %10:f32 = load_vector_element %9, 1u
+    %11:bool = gt %8, %10
+    if %11 [t: $B3] {  # if_1
+      $B3: {  # true
         ret
       }
     }
-    %11:ptr<function, i32, read_write> = access %s, 0u
-    %12:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-    %13:i32 = load %12
-    store %11, %13
+    %12:ptr<function, i32, read_write> = access %s, 0u
+    %13:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+    %14:i32 = load %13
+    store %12, %14
     ret
   }
 }
-%main_1 = func():void -> %b4 {
-  %b4 = block {
+%main_1 = func():void {
+  $B4: {
     %i:ptr<function, i32, read_write> = var
     %arr:ptr<function, array<S, 3>, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
@@ -56,211 +57,224 @@
     %x_133:ptr<function, bool, read_write> = var
     %x_142:ptr<function, bool, read_write> = var
     %x_143:ptr<function, bool, read_write> = var
-    %24:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-    %25:i32 = load %24
-    store %i, %25
-    loop [b: %b5, c: %b6] {  # loop_1
-      %b5 = block {  # body
-        %26:i32 = load %i
-        %27:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %28:i32 = load %27
-        %29:bool = lt %26, %28
-        if %29 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
+    %25:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+    %26:i32 = load %25
+    store %i, %26
+    loop [b: $B5, c: $B6] {  # loop_1
+      $B5: {  # body
+        %27:i32 = load %i
+        %28:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %29:i32 = load %28
+        %30:bool = lt %27, %29
+        if %30 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
             exit_if  # if_2
           }
-          %b8 = block {  # false
+          $B8: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_56:i32 = load %i
-        %31:ptr<function, i32, read_write> = access %arr, %x_56, 0u
-        %32:i32 = load %i
-        store %31, %32
-        continue %b6
+        %31:i32 = load %i
+        %x_56:i32 = let %31
+        %33:ptr<function, i32, read_write> = access %arr, %x_56, 0u
+        %34:i32 = load %i
+        store %33, %34
+        continue  # -> $B6
       }
-      %b6 = block {  # continuing
-        %33:i32 = load %i
-        %34:i32 = add %33, 1i
-        store %i, %34
-        next_iteration %b5
+      $B6: {  # continuing
+        %35:i32 = load %i
+        %36:i32 = add %35, 1i
+        store %i, %36
+        next_iteration  # -> $B5
       }
     }
-    %35:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-    %36:i32 = load %35
-    store %i_1, %36
-    loop [b: %b9, c: %b10] {  # loop_2
-      %b9 = block {  # body
-        %37:i32 = load %i_1
-        %38:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %39:i32 = load %38
-        %40:bool = lt %37, %39
-        if %40 [t: %b11, f: %b12] {  # if_3
-          %b11 = block {  # true
+    %37:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+    %38:i32 = load %37
+    store %i_1, %38
+    loop [b: $B9, c: $B10] {  # loop_2
+      $B9: {  # body
+        %39:i32 = load %i_1
+        %40:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %41:i32 = load %40
+        %42:bool = lt %39, %41
+        if %42 [t: $B11, f: $B12] {  # if_3
+          $B11: {  # true
             exit_if  # if_3
           }
-          %b12 = block {  # false
+          $B12: {  # false
             exit_loop  # loop_2
           }
         }
-        %41:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
-        %42:f32 = load_vector_element %41, 0u
         %43:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
-        %44:f32 = load_vector_element %43, 1u
-        %45:bool = gt %42, %44
-        if %45 [t: %b13] {  # if_4
-          %b13 = block {  # true
+        %44:f32 = load_vector_element %43, 0u
+        %45:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
+        %46:f32 = load_vector_element %45, 1u
+        %47:bool = gt %44, %46
+        if %47 [t: $B13] {  # if_4
+          $B13: {  # true
             exit_loop  # loop_2
           }
         }
-        %46:i32 = load %i_1
-        %47:ptr<function, i32, read_write> = access %arr, %46, 0u
-        %48:i32 = load %47
-        %49:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
+        %48:i32 = load %i_1
+        %49:ptr<function, i32, read_write> = access %arr, %48, 0u
         %50:i32 = load %49
-        %51:bool = eq %48, %50
-        if %51 [t: %b14, f: %b15] {  # if_5
-          %b14 = block {  # true
-            %x_88:i32 = load %i_1
-            %53:i32 = load %i_1
-            %54:ptr<function, S, read_write> = access %arr, %53
-            %55:S = load %54
-            store %param, %55
-            %56:void = call %func_struct_S_i11_, %param
-            %57:ptr<function, S, read_write> = access %arr, %x_88
-            %58:S = load %param
-            store %57, %58
+        %51:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
+        %52:i32 = load %51
+        %53:bool = eq %50, %52
+        if %53 [t: $B14, f: $B15] {  # if_5
+          $B14: {  # true
+            %54:i32 = load %i_1
+            %x_88:i32 = let %54
+            %56:i32 = load %i_1
+            %57:ptr<function, S, read_write> = access %arr, %56
+            %58:S = load %57
+            store %param, %58
+            %59:void = call %func_struct_S_i11_, %param
+            %60:ptr<function, S, read_write> = access %arr, %x_88
+            %61:S = load %param
+            store %60, %61
             exit_if  # if_5
           }
-          %b15 = block {  # false
-            %59:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-            %60:i32 = load %59
-            store %j, %60
-            loop [b: %b16, c: %b17] {  # loop_3
-              %b16 = block {  # body
-                %61:i32 = load %j
-                %62:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-                %63:i32 = load %62
-                %64:bool = lt %61, %63
-                if %64 [t: %b18, f: %b19] {  # if_6
-                  %b18 = block {  # true
+          $B15: {  # false
+            %62:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+            %63:i32 = load %62
+            store %j, %63
+            loop [b: $B16, c: $B17] {  # loop_3
+              $B16: {  # body
+                %64:i32 = load %j
+                %65:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+                %66:i32 = load %65
+                %67:bool = lt %64, %66
+                if %67 [t: $B18, f: $B19] {  # if_6
+                  $B18: {  # true
                     exit_if  # if_6
                   }
-                  %b19 = block {  # false
+                  $B19: {  # false
                     exit_loop  # loop_3
                   }
                 }
-                %65:i32 = load %j
-                %66:ptr<function, i32, read_write> = access %arr, %65, 0u
-                %67:i32 = load %66
-                %68:ptr<uniform, i32, read> = access %x_10, 0u, 4i, 0u
-                %69:i32 = load %68
-                %70:bool = gt %67, %69
-                if %70 [t: %b20] {  # if_7
-                  %b20 = block {  # true
-                    discard
+                %68:i32 = load %j
+                %69:ptr<function, i32, read_write> = access %arr, %68, 0u
+                %70:i32 = load %69
+                %71:ptr<uniform, i32, read> = access %x_10, 0u, 4i, 0u
+                %72:i32 = load %71
+                %73:bool = gt %70, %72
+                if %73 [t: $B20] {  # if_7
+                  $B20: {  # true
+                    store %continue_execution, false
                     exit_if  # if_7
                   }
                 }
-                continue %b17
+                continue  # -> $B17
               }
-              %b17 = block {  # continuing
-                %71:i32 = load %j
-                %72:i32 = add %71, 1i
-                store %j, %72
-                next_iteration %b16
+              $B17: {  # continuing
+                %74:i32 = load %j
+                %75:i32 = add %74, 1i
+                store %j, %75
+                next_iteration  # -> $B16
               }
             }
             exit_if  # if_5
           }
         }
-        continue %b10
+        continue  # -> $B10
       }
-      %b10 = block {  # continuing
-        %73:i32 = load %i_1
-        %74:i32 = add %73, 1i
-        store %i_1, %74
-        next_iteration %b9
+      $B10: {  # continuing
+        %76:i32 = load %i_1
+        %77:i32 = add %76, 1i
+        store %i_1, %77
+        next_iteration  # -> $B9
       }
     }
-    %75:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-    %76:i32 = load %75
-    %77:ptr<function, i32, read_write> = access %arr, %76, 0u
-    %78:i32 = load %77
-    %79:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-    %80:i32 = load %79
-    %x_123:bool = eq %78, %80
+    %78:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+    %79:i32 = load %78
+    %80:ptr<function, i32, read_write> = access %arr, %79, 0u
+    %81:i32 = load %80
+    %82:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+    %83:i32 = load %82
+    %84:bool = eq %81, %83
+    %x_123:bool = let %84
     store %x_133, %x_123
-    if %x_123 [t: %b21] {  # if_8
-      %b21 = block {  # true
-        %82:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
-        %83:i32 = load %82
-        %84:ptr<function, i32, read_write> = access %arr, %83, 0u
-        %85:i32 = load %84
-        %86:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+    if %x_123 [t: $B21] {  # if_8
+      $B21: {  # true
+        %86:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
         %87:i32 = load %86
-        %88:bool = eq %85, %87
-        store %x_132, %88
-        %89:bool = load %x_132
-        store %x_133, %89
+        %88:ptr<function, i32, read_write> = access %arr, %87, 0u
+        %89:i32 = load %88
+        %90:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %91:i32 = load %90
+        %92:bool = eq %89, %91
+        store %x_132, %92
+        %93:bool = load %x_132
+        store %x_133, %93
         exit_if  # if_8
       }
     }
-    %90:bool = load %x_133
-    store %x_143, %90
-    %91:bool = load %x_133
-    if %91 [t: %b22] {  # if_9
-      %b22 = block {  # true
-        %92:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %93:i32 = load %92
-        %94:ptr<function, i32, read_write> = access %arr, %93, 0u
-        %95:i32 = load %94
+    %94:bool = load %x_133
+    store %x_143, %94
+    %95:bool = load %x_133
+    if %95 [t: $B22] {  # if_9
+      $B22: {  # true
         %96:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
         %97:i32 = load %96
-        %98:bool = eq %95, %97
-        store %x_142, %98
-        %99:bool = load %x_142
-        store %x_143, %99
+        %98:ptr<function, i32, read_write> = access %arr, %97, 0u
+        %99:i32 = load %98
+        %100:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %101:i32 = load %100
+        %102:bool = eq %99, %101
+        store %x_142, %102
+        %103:bool = load %x_142
+        store %x_143, %103
         exit_if  # if_9
       }
     }
-    %100:bool = load %x_143
-    if %100 [t: %b23, f: %b24] {  # if_10
-      %b23 = block {  # true
-        %101:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
-        %102:i32 = load %101
-        %103:f32 = convert %102
-        %104:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-        %105:i32 = load %104
-        %106:f32 = convert %105
-        %107:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-        %108:i32 = load %107
-        %109:f32 = convert %108
-        %110:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
-        %111:i32 = load %110
-        %112:f32 = convert %111
-        %113:vec4<f32> = construct %103, %106, %109, %112
-        store %x_GLF_color, %113
+    %104:bool = load %x_143
+    if %104 [t: $B23, f: $B24] {  # if_10
+      $B23: {  # true
+        %105:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
+        %106:i32 = load %105
+        %107:f32 = convert %106
+        %108:f32 = let %107
+        %109:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+        %110:i32 = load %109
+        %111:f32 = convert %110
+        %112:f32 = let %111
+        %113:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+        %114:i32 = load %113
+        %115:f32 = convert %114
+        %116:f32 = let %115
+        %117:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
+        %118:i32 = load %117
+        %119:f32 = convert %118
+        %120:vec4<f32> = construct %108, %112, %116, %119
+        store %x_GLF_color, %120
         exit_if  # if_10
       }
-      %b24 = block {  # false
-        %114:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-        %115:i32 = load %114
-        %116:f32 = convert %115
-        %117:vec4<f32> = construct %116
-        store %x_GLF_color, %117
+      $B24: {  # false
+        %121:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+        %122:i32 = load %121
+        %123:f32 = convert %122
+        %124:vec4<f32> = construct %123
+        store %x_GLF_color, %124
         exit_if  # if_10
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b25 {
-  %b25 = block {
-    %119:void = call %main_1
-    %120:vec4<f32> = load %x_GLF_color
-    %121:main_out = construct %120
-    ret %121
+%tint_symbol = @fragment func():main_out {
+  $B25: {
+    %126:void = call %main_1
+    %127:vec4<f32> = load %x_GLF_color
+    %128:main_out = construct %127
+    %129:bool = load %continue_execution
+    %130:bool = eq %129, false
+    if %130 [t: $B26] {  # if_11
+      $B26: {  # true
+        terminate_invocation
+      }
+    }
+    ret %128
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-instructions-first-value-phi/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-instructions-first-value-phi/0-opt.wgsl.expected.ir.msl
index 391227a..1fd3847 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-instructions-first-value-phi/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-instructions-first-value-phi/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf1 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf1 = struct @align(8) {
   v1:vec2<f32> @offset(0)
 }
 
@@ -20,33 +20,37 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_8: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
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%func_struct_S_i11_ = func(%s:ptr<function, S, read_write>):void -> %b2 {
-  %b2 = block {
-    %6:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
-    %x_166:f32 = load_vector_element %6, 0u
-    %8:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
-    %x_168:f32 = load_vector_element %8, 1u
-    %10:bool = gt %x_166, %x_168
-    if %10 [t: %b3] {  # if_1
-      %b3 = block {  # true
+%func_struct_S_i11_ = func(%s:ptr<function, S, read_write>):void {
+  $B2: {
+    %7:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
+    %8:f32 = load_vector_element %7, 0u
+    %x_166:f32 = let %8
+    %10:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
+    %11:f32 = load_vector_element %10, 1u
+    %x_168:f32 = let %11
+    %13:bool = gt %x_166, %x_168
+    if %13 [t: $B3] {  # if_1
+      $B3: {  # true
         ret
       }
     }
-    %11:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-    %x_173:i32 = load %11
-    %13:ptr<function, i32, read_write> = access %s, 0u
-    store %13, %x_173
+    %14:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+    %15:i32 = load %14
+    %x_173:i32 = let %15
+    %17:ptr<function, i32, read_write> = access %s, 0u
+    store %17, %x_173
     ret
   }
 }
-%main_1 = func():void -> %b4 {
-  %b4 = block {
+%main_1 = func():void {
+  $B4: {
     %i:ptr<function, i32, read_write> = var
     %arr:ptr<function, array<S, 3>, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
@@ -56,209 +60,262 @@
     %x_142:ptr<function, bool, read_write> = var
     %x_133_phi:ptr<function, bool, read_write> = var
     %x_143_phi:ptr<function, bool, read_write> = var
-    %24:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-    %x_46:i32 = load %24
+    %28:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+    %29:i32 = load %28
+    %x_46:i32 = let %29
     store %i, %x_46
-    loop [b: %b5, c: %b6] {  # loop_1
-      %b5 = block {  # body
-        %x_51:i32 = load %i
-        %27:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %x_53:i32 = load %27
-        %29:bool = lt %x_51, %x_53
-        if %29 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
+    loop [b: $B5, c: $B6] {  # loop_1
+      $B5: {  # body
+        %31:i32 = load %i
+        %x_51:i32 = let %31
+        %33:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %34:i32 = load %33
+        %x_53:i32 = let %34
+        %36:bool = lt %x_51, %x_53
+        if %36 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
             exit_if  # if_2
           }
-          %b8 = block {  # false
+          $B8: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_56:i32 = load %i
-        %x_57:i32 = load %i
-        %32:ptr<function, i32, read_write> = access %arr, %x_56, 0u
-        store %32, %x_57
-        continue %b6
+        %37:i32 = load %i
+        %x_56:i32 = let %37
+        %39:i32 = load %i
+        %x_57:i32 = let %39
+        %41:ptr<function, i32, read_write> = access %arr, %x_56, 0u
+        store %41, %x_57
+        continue  # -> $B6
       }
-      %b6 = block {  # continuing
-        %x_59:i32 = load %i
-        %34:i32 = add %x_59, 1i
-        store %i, %34
-        next_iteration %b5
+      $B6: {  # continuing
+        %42:i32 = load %i
+        %x_59:i32 = let %42
+        %44:i32 = add %x_59, 1i
+        store %i, %44
+        next_iteration  # -> $B5
       }
     }
-    %35:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-    %x_62:i32 = load %35
+    %45:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+    %46:i32 = load %45
+    %x_62:i32 = let %46
     store %i_1, %x_62
-    loop [b: %b9, c: %b10] {  # loop_2
-      %b9 = block {  # body
-        %x_67:i32 = load %i_1
-        %38:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %x_69:i32 = load %38
-        %40:bool = lt %x_67, %x_69
-        if %40 [t: %b11, f: %b12] {  # if_3
-          %b11 = block {  # true
+    loop [b: $B9, c: $B10] {  # loop_2
+      $B9: {  # body
+        %48:i32 = load %i_1
+        %x_67:i32 = let %48
+        %50:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %51:i32 = load %50
+        %x_69:i32 = let %51
+        %53:bool = lt %x_67, %x_69
+        if %53 [t: $B11, f: $B12] {  # if_3
+          $B11: {  # true
             exit_if  # if_3
           }
-          %b12 = block {  # false
+          $B12: {  # false
             exit_loop  # loop_2
           }
         }
-        %41:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
-        %x_73:f32 = load_vector_element %41, 0u
-        %43:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
-        %x_75:f32 = load_vector_element %43, 1u
-        %45:bool = gt %x_73, %x_75
-        if %45 [t: %b13] {  # if_4
-          %b13 = block {  # true
+        %54:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
+        %55:f32 = load_vector_element %54, 0u
+        %x_73:f32 = let %55
+        %57:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
+        %58:f32 = load_vector_element %57, 1u
+        %x_75:f32 = let %58
+        %60:bool = gt %x_73, %x_75
+        if %60 [t: $B13] {  # if_4
+          $B13: {  # true
             exit_loop  # loop_2
           }
         }
-        %x_79:i32 = load %i_1
-        %47:ptr<function, i32, read_write> = access %arr, %x_79, 0u
-        %x_81:i32 = load %47
-        %49:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
-        %x_83:i32 = load %49
-        %51:bool = eq %x_81, %x_83
-        if %51 [t: %b14, f: %b15] {  # if_5
-          %b14 = block {  # true
-            %x_88:i32 = load %i_1
-            %53:ptr<function, S, read_write> = access %arr, %x_88
-            %x_90:S = load %53
+        %61:i32 = load %i_1
+        %x_79:i32 = let %61
+        %63:ptr<function, i32, read_write> = access %arr, %x_79, 0u
+        %64:i32 = load %63
+        %x_81:i32 = let %64
+        %66:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
+        %67:i32 = load %66
+        %x_83:i32 = let %67
+        %69:bool = eq %x_81, %x_83
+        if %69 [t: $B14, f: $B15] {  # if_5
+          $B14: {  # true
+            %70:i32 = load %i_1
+            %x_88:i32 = let %70
+            %72:ptr<function, S, read_write> = access %arr, %x_88
+            %73:S = load %72
+            %x_90:S = let %73
             store %param, %x_90
-            %55:void = call %func_struct_S_i11_, %param
-            %x_92:S = load %param
-            %57:ptr<function, S, read_write> = access %arr, %x_88
-            store %57, %x_92
+            %75:void = call %func_struct_S_i11_, %param
+            %76:S = load %param
+            %x_92:S = let %76
+            %78:ptr<function, S, read_write> = access %arr, %x_88
+            store %78, %x_92
             exit_if  # if_5
           }
-          %b15 = block {  # false
-            %58:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-            %x_95:i32 = load %58
+          $B15: {  # false
+            %79:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+            %80:i32 = load %79
+            %x_95:i32 = let %80
             store %j, %x_95
-            loop [b: %b16, c: %b17] {  # loop_3
-              %b16 = block {  # body
-                %x_100:i32 = load %j
-                %61:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-                %x_102:i32 = load %61
-                %63:bool = lt %x_100, %x_102
-                if %63 [t: %b18, f: %b19] {  # if_6
-                  %b18 = block {  # true
+            loop [b: $B16, c: $B17] {  # loop_3
+              $B16: {  # body
+                %82:i32 = load %j
+                %x_100:i32 = let %82
+                %84:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+                %85:i32 = load %84
+                %x_102:i32 = let %85
+                %87:bool = lt %x_100, %x_102
+                if %87 [t: $B18, f: $B19] {  # if_6
+                  $B18: {  # true
                     exit_if  # if_6
                   }
-                  %b19 = block {  # false
+                  $B19: {  # false
                     exit_loop  # loop_3
                   }
                 }
-                %x_105:i32 = load %j
-                %65:ptr<function, i32, read_write> = access %arr, %x_105, 0u
-                %x_107:i32 = load %65
-                %67:ptr<uniform, i32, read> = access %x_10, 0u, 4i, 0u
-                %x_109:i32 = load %67
-                %69:bool = gt %x_107, %x_109
-                if %69 [t: %b20] {  # if_7
-                  %b20 = block {  # true
-                    discard
+                %88:i32 = load %j
+                %x_105:i32 = let %88
+                %90:ptr<function, i32, read_write> = access %arr, %x_105, 0u
+                %91:i32 = load %90
+                %x_107:i32 = let %91
+                %93:ptr<uniform, i32, read> = access %x_10, 0u, 4i, 0u
+                %94:i32 = load %93
+                %x_109:i32 = let %94
+                %96:bool = gt %x_107, %x_109
+                if %96 [t: $B20] {  # if_7
+                  $B20: {  # true
+                    store %continue_execution, false
                     exit_if  # if_7
                   }
                 }
-                continue %b17
+                continue  # -> $B17
               }
-              %b17 = block {  # continuing
-                %x_113:i32 = load %j
-                %71:i32 = add %x_113, 1i
-                store %j, %71
-                next_iteration %b16
+              $B17: {  # continuing
+                %97:i32 = load %j
+                %x_113:i32 = let %97
+                %99:i32 = add %x_113, 1i
+                store %j, %99
+                next_iteration  # -> $B16
               }
             }
             exit_if  # if_5
           }
         }
-        continue %b10
+        continue  # -> $B10
       }
-      %b10 = block {  # continuing
-        %x_115:i32 = load %i_1
-        %73:i32 = add %x_115, 1i
-        store %i_1, %73
-        next_iteration %b9
+      $B10: {  # continuing
+        %100:i32 = load %i_1
+        %x_115:i32 = let %100
+        %102:i32 = add %x_115, 1i
+        store %i_1, %102
+        next_iteration  # -> $B9
       }
     }
-    %74:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-    %x_118:i32 = load %74
-    %76:ptr<function, i32, read_write> = access %arr, %x_118, 0u
-    %x_120:i32 = load %76
-    %78:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-    %x_122:i32 = load %78
-    %x_123:bool = eq %x_120, %x_122
+    %103:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+    %104:i32 = load %103
+    %x_118:i32 = let %104
+    %106:ptr<function, i32, read_write> = access %arr, %x_118, 0u
+    %107:i32 = load %106
+    %x_120:i32 = let %107
+    %109:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+    %110:i32 = load %109
+    %x_122:i32 = let %110
+    %112:bool = eq %x_120, %x_122
+    %x_123:bool = let %112
     store %x_133_phi, %x_123
-    if %x_123 [t: %b21] {  # if_8
-      %b21 = block {  # true
-        %81:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
-        %x_127:i32 = load %81
-        %83:ptr<function, i32, read_write> = access %arr, %x_127, 0u
-        %x_129:i32 = load %83
-        %85:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %x_131:i32 = load %85
-        %87:bool = eq %x_129, %x_131
-        store %x_132, %87
-        %88:bool = load %x_132
-        store %x_133_phi, %88
+    if %x_123 [t: $B21] {  # if_8
+      $B21: {  # true
+        %114:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
+        %115:i32 = load %114
+        %x_127:i32 = let %115
+        %117:ptr<function, i32, read_write> = access %arr, %x_127, 0u
+        %118:i32 = load %117
+        %x_129:i32 = let %118
+        %120:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %121:i32 = load %120
+        %x_131:i32 = let %121
+        %123:bool = eq %x_129, %x_131
+        store %x_132, %123
+        %124:bool = load %x_132
+        store %x_133_phi, %124
         exit_if  # if_8
       }
     }
-    %x_133:bool = load %x_133_phi
+    %125:bool = load %x_133_phi
+    %x_133:bool = let %125
     store %x_143_phi, %x_133
-    if %x_133 [t: %b22] {  # if_9
-      %b22 = block {  # true
-        %90:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %x_137:i32 = load %90
-        %92:ptr<function, i32, read_write> = access %arr, %x_137, 0u
-        %x_139:i32 = load %92
-        %94:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %x_141:i32 = load %94
-        %96:bool = eq %x_139, %x_141
-        store %x_142, %96
-        %97:bool = load %x_142
-        store %x_143_phi, %97
+    if %x_133 [t: $B22] {  # if_9
+      $B22: {  # true
+        %127:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %128:i32 = load %127
+        %x_137:i32 = let %128
+        %130:ptr<function, i32, read_write> = access %arr, %x_137, 0u
+        %131:i32 = load %130
+        %x_139:i32 = let %131
+        %133:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %134:i32 = load %133
+        %x_141:i32 = let %134
+        %136:bool = eq %x_139, %x_141
+        store %x_142, %136
+        %137:bool = load %x_142
+        store %x_143_phi, %137
         exit_if  # if_9
       }
     }
-    %x_143:bool = load %x_143_phi
-    if %x_143 [t: %b23, f: %b24] {  # if_10
-      %b23 = block {  # true
-        %99:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
-        %x_148:i32 = load %99
-        %101:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-        %x_151:i32 = load %101
-        %103:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-        %x_154:i32 = load %103
-        %105:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
-        %x_157:i32 = load %105
-        %107:f32 = convert %x_148
-        %108:f32 = convert %x_151
-        %109:f32 = convert %x_154
-        %110:f32 = convert %x_157
-        %111:vec4<f32> = construct %107, %108, %109, %110
-        store %x_GLF_color, %111
+    %138:bool = load %x_143_phi
+    %x_143:bool = let %138
+    if %x_143 [t: $B23, f: $B24] {  # if_10
+      $B23: {  # true
+        %140:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
+        %141:i32 = load %140
+        %x_148:i32 = let %141
+        %143:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+        %144:i32 = load %143
+        %x_151:i32 = let %144
+        %146:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+        %147:i32 = load %146
+        %x_154:i32 = let %147
+        %149:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
+        %150:i32 = load %149
+        %x_157:i32 = let %150
+        %152:f32 = convert %x_148
+        %153:f32 = let %152
+        %154:f32 = convert %x_151
+        %155:f32 = let %154
+        %156:f32 = convert %x_154
+        %157:f32 = let %156
+        %158:f32 = convert %x_157
+        %159:vec4<f32> = construct %153, %155, %157, %158
+        store %x_GLF_color, %159
         exit_if  # if_10
       }
-      %b24 = block {  # false
-        %112:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-        %x_161:i32 = load %112
-        %x_162:f32 = convert %x_161
-        %115:vec4<f32> = construct %x_162, %x_162, %x_162, %x_162
-        store %x_GLF_color, %115
+      $B24: {  # false
+        %160:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+        %161:i32 = load %160
+        %x_161:i32 = let %161
+        %163:f32 = convert %x_161
+        %x_162:f32 = let %163
+        %165:vec4<f32> = construct %x_162, %x_162, %x_162, %x_162
+        store %x_GLF_color, %165
         exit_if  # if_10
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b25 {
-  %b25 = block {
-    %117:void = call %main_1
-    %118:vec4<f32> = load %x_GLF_color
-    %119:main_out = construct %118
-    ret %119
+%tint_symbol = @fragment func():main_out {
+  $B25: {
+    %167:void = call %main_1
+    %168:vec4<f32> = load %x_GLF_color
+    %169:main_out = construct %168
+    %170:bool = load %continue_execution
+    %171:bool = eq %170, false
+    if %171 [t: $B26] {  # if_11
+      $B26: {  # true
+        terminate_invocation
+      }
+    }
+    ret %169
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-instructions-for-if-less-than-equal/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-instructions-for-if-less-than-equal/0-opt.spvasm.expected.ir.msl
index c71eb51..7da3e0b 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-instructions-for-if-less-than-equal/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-instructions-for-if-less-than-equal/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,14 +20,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_5:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_8:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %i:ptr<function, i32, read_write> = var
     %6:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
     %7:i32 = load %6
@@ -37,61 +37,65 @@
     %10:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
     %11:i32 = load %10
     store %i, %11
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %12:i32 = load %i
         %13:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
         %14:i32 = load %13
         %15:bool = lt %12, %14
-        if %15 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %15 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
         %16:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
         %17:f32 = load %16
-        %18:i32 = load %i
-        %19:f32 = convert %18
-        %20:bool = lte %17, %19
-        %21:bool = eq %20, false
-        if %21 [t: %b7] {  # if_2
-          %b7 = block {  # true
-            %22:vec4<f32> = load %x_GLF_color
-            %23:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-            %24:f32 = load %23
-            %25:i32 = load %i
-            %26:f32 = convert %25
-            %27:i32 = load %i
-            %28:f32 = convert %27
-            %29:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-            %30:f32 = load %29
-            %31:vec4<f32> = construct %24, %26, %28, %30
-            %32:vec4<f32> = add %22, %31
-            store %x_GLF_color, %32
+        %18:f32 = let %17
+        %19:i32 = load %i
+        %20:f32 = convert %19
+        %21:bool = lte %18, %20
+        %22:bool = eq %21, false
+        if %22 [t: $B7] {  # if_2
+          $B7: {  # true
+            %23:vec4<f32> = load %x_GLF_color
+            %24:vec4<f32> = let %23
+            %25:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+            %26:f32 = load %25
+            %27:f32 = let %26
+            %28:i32 = load %i
+            %29:f32 = convert %28
+            %30:f32 = let %29
+            %31:i32 = load %i
+            %32:f32 = convert %31
+            %33:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+            %34:f32 = load %33
+            %35:vec4<f32> = construct %27, %30, %32, %34
+            %36:vec4<f32> = add %24, %35
+            store %x_GLF_color, %36
             exit_if  # if_2
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %33:i32 = load %i
-        %34:i32 = add %33, 1i
-        store %i, %34
-        next_iteration %b3
+      $B4: {  # continuing
+        %37:i32 = load %i
+        %38:i32 = add %37, 1i
+        store %i, %38
+        next_iteration  # -> $B3
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b8 {
-  %b8 = block {
-    %36:void = call %main_1
-    %37:vec4<f32> = load %x_GLF_color
-    %38:main_out = construct %37
-    ret %38
+%tint_symbol = @fragment func():main_out {
+  $B8: {
+    %40:void = call %main_1
+    %41:vec4<f32> = load %x_GLF_color
+    %42:main_out = construct %41
+    ret %42
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-instructions-for-if-less-than-equal/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-instructions-for-if-less-than-equal/0-opt.wgsl.expected.ir.msl
index 0f675b1..33ab63f 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-instructions-for-if-less-than-equal/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-instructions-for-if-less-than-equal/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,78 +20,92 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_5:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_8:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %i:ptr<function, i32, read_write> = var
     %6:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
-    %x_29:i32 = load %6
-    %x_30:f32 = convert %x_29
-    %9:vec4<f32> = construct %x_30, %x_30, %x_30, %x_30
-    store %x_GLF_color, %9
-    %10:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
-    %x_33:i32 = load %10
+    %7:i32 = load %6
+    %x_29:i32 = let %7
+    %9:f32 = convert %x_29
+    %x_30:f32 = let %9
+    %11:vec4<f32> = construct %x_30, %x_30, %x_30, %x_30
+    store %x_GLF_color, %11
+    %12:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
+    %13:i32 = load %12
+    %x_33:i32 = let %13
     store %i, %x_33
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_38:i32 = load %i
-        %13:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
-        %x_40:i32 = load %13
-        %15:bool = lt %x_38, %x_40
-        if %15 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %15:i32 = load %i
+        %x_38:i32 = let %15
+        %17:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
+        %18:i32 = load %17
+        %x_40:i32 = let %18
+        %20:bool = lt %x_38, %x_40
+        if %20 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %16:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
-        %x_44:f32 = load %16
-        %x_45:i32 = load %i
-        %19:f32 = convert %x_45
-        %20:bool = lte %x_44, %19
-        %21:bool = eq %20, false
-        if %21 [t: %b7] {  # if_2
-          %b7 = block {  # true
-            %22:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-            %x_52:f32 = load %22
-            %x_53:i32 = load %i
-            %x_55:i32 = load %i
-            %26:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-            %x_58:f32 = load %26
-            %x_60:vec4<f32> = load %x_GLF_color
-            %29:f32 = convert %x_53
-            %30:f32 = convert %x_55
-            %31:vec4<f32> = construct %x_52, %29, %30, %x_58
-            %32:vec4<f32> = add %x_60, %31
-            store %x_GLF_color, %32
+        %21:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
+        %22:f32 = load %21
+        %x_44:f32 = let %22
+        %24:i32 = load %i
+        %x_45:i32 = let %24
+        %26:f32 = convert %x_45
+        %27:bool = lte %x_44, %26
+        %28:bool = eq %27, false
+        if %28 [t: $B7] {  # if_2
+          $B7: {  # true
+            %29:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+            %30:f32 = load %29
+            %x_52:f32 = let %30
+            %32:i32 = load %i
+            %x_53:i32 = let %32
+            %34:i32 = load %i
+            %x_55:i32 = let %34
+            %36:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+            %37:f32 = load %36
+            %x_58:f32 = let %37
+            %39:vec4<f32> = load %x_GLF_color
+            %x_60:vec4<f32> = let %39
+            %41:f32 = convert %x_53
+            %42:f32 = let %41
+            %43:f32 = convert %x_55
+            %44:vec4<f32> = construct %x_52, %42, %43, %x_58
+            %45:vec4<f32> = add %x_60, %44
+            store %x_GLF_color, %45
             exit_if  # if_2
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_62:i32 = load %i
-        %34:i32 = add %x_62, 1i
-        store %i, %34
-        next_iteration %b3
+      $B4: {  # continuing
+        %46:i32 = load %i
+        %x_62:i32 = let %46
+        %48:i32 = add %x_62, 1i
+        store %i, %48
+        next_iteration  # -> $B3
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b8 {
-  %b8 = block {
-    %36:void = call %main_1
-    %37:vec4<f32> = load %x_GLF_color
-    %38:main_out = construct %37
-    ret %38
+%tint_symbol = @fragment func():main_out {
+  $B8: {
+    %50:void = call %main_1
+    %51:vec4<f32> = load %x_GLF_color
+    %52:main_out = construct %51
+    ret %52
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-int-div-round-to-zero/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-int-div-round-to-zero/0-opt.spvasm.expected.ir.msl
index 0f063ac..e3e74ae 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-int-div-round-to-zero/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-int-div-round-to-zero/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,63 +12,79 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %5:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
     %6:i32 = load %5
     store %a, %6
     %7:i32 = load %a
     %8:vec2<i32> = construct %7
-    %9:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %10:i32 = load %9
-    %11:vec2<i32> = construct %10, 63677i
-    %12:vec2<i32> = div %8, %11
-    %13:i32 = access %12, 1u
-    %14:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %15:i32 = load %14
-    %16:bool = eq %13, %15
-    if %16 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %17:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %18:i32 = load %17
-        %19:f32 = convert %18
-        %20:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %21:i32 = load %20
-        %22:f32 = convert %21
+    %9:vec2<i32> = let %8
+    %10:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %11:i32 = load %10
+    %12:vec2<i32> = construct %11, 63677i
+    %13:vec2<i32> = call %tint_div_v2i32, %9, %12
+    %15:i32 = access %13, 1u
+    %16:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %17:i32 = load %16
+    %18:bool = eq %15, %17
+    if %18 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %19:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %20:i32 = load %19
+        %21:f32 = convert %20
+        %22:f32 = let %21
         %23:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
         %24:i32 = load %23
         %25:f32 = convert %24
-        %26:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %27:i32 = load %26
-        %28:f32 = convert %27
-        %29:vec4<f32> = construct %19, %22, %25, %28
-        store %x_GLF_color, %29
+        %26:f32 = let %25
+        %27:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %28:i32 = load %27
+        %29:f32 = convert %28
+        %30:f32 = let %29
+        %31:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %32:i32 = load %31
+        %33:f32 = convert %32
+        %34:vec4<f32> = construct %22, %26, %30, %33
+        store %x_GLF_color, %34
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %30:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %31:i32 = load %30
-        %32:f32 = convert %31
-        %33:vec4<f32> = construct %32
-        store %x_GLF_color, %33
+      $B4: {  # false
+        %35:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %36:i32 = load %35
+        %37:f32 = convert %36
+        %38:vec4<f32> = construct %37
+        store %x_GLF_color, %38
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %35:void = call %main_1
-    %36:vec4<f32> = load %x_GLF_color
-    %37:main_out = construct %36
-    ret %37
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %40:void = call %main_1
+    %41:vec4<f32> = load %x_GLF_color
+    %42:main_out = construct %41
+    ret %42
+  }
+}
+%tint_div_v2i32 = func(%lhs:vec2<i32>, %rhs:vec2<i32>):vec2<i32> {
+  $B6: {
+    %45:vec2<bool> = eq %rhs, vec2<i32>(0i)
+    %46:vec2<bool> = eq %lhs, vec2<i32>(-2147483648i)
+    %47:vec2<bool> = eq %rhs, vec2<i32>(-1i)
+    %48:vec2<bool> = and %46, %47
+    %49:vec2<bool> = or %45, %48
+    %50:vec2<i32> = select %rhs, vec2<i32>(1i), %49
+    %51:vec2<i32> = div %lhs, %50
+    ret %51
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-int-div-round-to-zero/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-int-div-round-to-zero/0-opt.wgsl.expected.ir.msl
index 85af080..68ff84a 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-int-div-round-to-zero/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-int-div-round-to-zero/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,63 +12,89 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %5:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_28:i32 = load %5
+    %6:i32 = load %5
+    %x_28:i32 = let %6
     store %a, %x_28
-    %x_29:i32 = load %a
-    %8:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_31:i32 = load %8
-    %10:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_37:i32 = load %10
-    %12:vec2<i32> = construct %x_29, %x_29
-    %13:vec2<i32> = construct %x_31, 63677i
-    %14:vec2<i32> = div %12, %13
-    %15:i32 = access %14, 1u
-    %16:bool = eq %15, %x_37
-    if %16 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %17:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %x_43:i32 = load %17
-        %19:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_46:i32 = load %19
-        %21:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_49:i32 = load %21
+    %8:i32 = load %a
+    %x_29:i32 = let %8
+    %10:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %11:i32 = load %10
+    %x_31:i32 = let %11
+    %13:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %14:i32 = load %13
+    %x_37:i32 = let %14
+    %16:vec2<i32> = construct %x_29, %x_29
+    %17:vec2<i32> = let %16
+    %18:vec2<i32> = construct %x_31, 63677i
+    %19:vec2<i32> = call %tint_div_v2i32, %17, %18
+    %21:i32 = access %19, 1u
+    %22:bool = eq %21, %x_37
+    if %22 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         %23:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %x_52:i32 = load %23
-        %25:f32 = convert %x_43
-        %26:f32 = convert %x_46
-        %27:f32 = convert %x_49
-        %28:f32 = convert %x_52
-        %29:vec4<f32> = construct %25, %26, %27, %28
-        store %x_GLF_color, %29
+        %24:i32 = load %23
+        %x_43:i32 = let %24
+        %26:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %27:i32 = load %26
+        %x_46:i32 = let %27
+        %29:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %30:i32 = load %29
+        %x_49:i32 = let %30
+        %32:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %33:i32 = load %32
+        %x_52:i32 = let %33
+        %35:f32 = convert %x_43
+        %36:f32 = let %35
+        %37:f32 = convert %x_46
+        %38:f32 = let %37
+        %39:f32 = convert %x_49
+        %40:f32 = let %39
+        %41:f32 = convert %x_52
+        %42:vec4<f32> = construct %36, %38, %40, %41
+        store %x_GLF_color, %42
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %30:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_56:i32 = load %30
-        %x_57:f32 = convert %x_56
-        %33:vec4<f32> = construct %x_57, %x_57, %x_57, %x_57
-        store %x_GLF_color, %33
+      $B4: {  # false
+        %43:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %44:i32 = load %43
+        %x_56:i32 = let %44
+        %46:f32 = convert %x_56
+        %x_57:f32 = let %46
+        %48:vec4<f32> = construct %x_57, %x_57, %x_57, %x_57
+        store %x_GLF_color, %48
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %35:void = call %main_1
-    %36:vec4<f32> = load %x_GLF_color
-    %37:main_out = construct %36
-    ret %37
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %50:void = call %main_1
+    %51:vec4<f32> = load %x_GLF_color
+    %52:main_out = construct %51
+    ret %52
+  }
+}
+%tint_div_v2i32 = func(%lhs:vec2<i32>, %rhs:vec2<i32>):vec2<i32> {
+  $B6: {
+    %55:vec2<bool> = eq %rhs, vec2<i32>(0i)
+    %56:vec2<bool> = eq %lhs, vec2<i32>(-2147483648i)
+    %57:vec2<bool> = eq %rhs, vec2<i32>(-1i)
+    %58:vec2<bool> = and %56, %57
+    %59:vec2<bool> = or %55, %58
+    %60:vec2<i32> = select %rhs, vec2<i32>(1i), %59
+    %61:vec2<i32> = div %lhs, %60
+    ret %61
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-int-full-bits-divide-by-two-loop/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-int-full-bits-divide-by-two-loop/0-opt.spvasm.expected.ir.msl
index f4e5f49..2bea3e6 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-int-full-bits-divide-by-two-loop/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-int-full-bits-divide-by-two-loop/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,87 +12,112 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %7:f32 = load_vector_element %gl_FragCoord, 0u
-    %8:i32 = convert %7
-    %9:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-    %10:i32 = load %9
-    %11:bool = lt %8, %10
-    %12:i32 = select -1i, 0i, %11
-    store %a, %12
+    %8:i32 = call %tint_f32_to_i32, %7
+    %10:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+    %11:i32 = load %10
+    %12:bool = lt %8, %11
+    %13:i32 = select -1i, 0i, %12
+    store %a, %13
     store %i, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %13:i32 = load %i
-        %14:bool = lt %13, 5i
-        if %14 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %14:i32 = load %i
+        %15:bool = lt %14, 5i
+        if %15 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %15:i32 = load %a
-        %16:i32 = div %15, 2i
-        store %a, %16
-        continue %b4
+        %16:i32 = load %a
+        %17:i32 = call %tint_div_i32, %16, 2i
+        store %a, %17
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %17:i32 = load %i
-        %18:i32 = add %17, 1i
-        store %i, %18
-        next_iteration %b3
+      $B4: {  # continuing
+        %19:i32 = load %i
+        %20:i32 = add %19, 1i
+        store %i, %20
+        next_iteration  # -> $B3
       }
     }
-    %19:i32 = load %a
-    %20:bool = eq %19, 0i
-    if %20 [t: %b7, f: %b8] {  # if_2
-      %b7 = block {  # true
-        %21:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %22:i32 = load %21
-        %23:f32 = convert %22
-        %24:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %25:i32 = load %24
-        %26:f32 = convert %25
+    %21:i32 = load %a
+    %22:bool = eq %21, 0i
+    if %22 [t: $B7, f: $B8] {  # if_2
+      $B7: {  # true
+        %23:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %24:i32 = load %23
+        %25:f32 = convert %24
+        %26:f32 = let %25
         %27:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
         %28:i32 = load %27
         %29:f32 = convert %28
-        %30:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %31:i32 = load %30
-        %32:f32 = convert %31
-        %33:vec4<f32> = construct %23, %26, %29, %32
-        store %x_GLF_color, %33
+        %30:f32 = let %29
+        %31:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %32:i32 = load %31
+        %33:f32 = convert %32
+        %34:f32 = let %33
+        %35:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %36:i32 = load %35
+        %37:f32 = convert %36
+        %38:vec4<f32> = construct %26, %30, %34, %37
+        store %x_GLF_color, %38
         exit_if  # if_2
       }
-      %b8 = block {  # false
-        %34:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %35:i32 = load %34
-        %36:f32 = convert %35
-        %37:vec4<f32> = construct %36
-        store %x_GLF_color, %37
+      $B8: {  # false
+        %39:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %40:i32 = load %39
+        %41:f32 = convert %40
+        %42:vec4<f32> = construct %41
+        store %x_GLF_color, %42
         exit_if  # if_2
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b9 {
-  %b9 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B9: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %40:void = call %main_1
-    %41:vec4<f32> = load %x_GLF_color
-    %42:main_out = construct %41
-    ret %42
+    %45:void = call %main_1
+    %46:vec4<f32> = load %x_GLF_color
+    %47:main_out = construct %46
+    ret %47
+  }
+}
+%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B10: {
+    %50:bool = eq %rhs, 0i
+    %51:bool = eq %lhs, -2147483648i
+    %52:bool = eq %rhs, -1i
+    %53:bool = and %51, %52
+    %54:bool = or %50, %53
+    %55:i32 = select %rhs, 1i, %54
+    %56:i32 = div %lhs, %55
+    ret %56
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B11: {
+    %58:i32 = convert %value
+    %59:bool = gte %value, -2147483648.0f
+    %60:i32 = select -2147483648i, %58, %59
+    %61:bool = lte %value, 2147483520.0f
+    %62:i32 = select 2147483647i, %60, %61
+    ret %62
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-int-full-bits-divide-by-two-loop/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-int-full-bits-divide-by-two-loop/0-opt.wgsl.expected.ir.msl
index 9ddaa60..0b1b868 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-int-full-bits-divide-by-two-loop/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-int-full-bits-divide-by-two-loop/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,87 +12,124 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
-    %x_32:f32 = load_vector_element %gl_FragCoord, 0u
-    %8:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-    %x_35:i32 = load %8
-    %10:i32 = convert %x_32
-    %11:bool = lt %10, %x_35
-    %12:i32 = select -1i, 0i, %11
-    store %a, %12
+    %7:f32 = load_vector_element %gl_FragCoord, 0u
+    %x_32:f32 = let %7
+    %9:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+    %10:i32 = load %9
+    %x_35:i32 = let %10
+    %12:i32 = call %tint_f32_to_i32, %x_32
+    %14:bool = lt %12, %x_35
+    %15:i32 = select -1i, 0i, %14
+    store %a, %15
     store %i, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_42:i32 = load %i
-        %14:bool = lt %x_42, 5i
-        if %14 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %16:i32 = load %i
+        %x_42:i32 = let %16
+        %18:bool = lt %x_42, 5i
+        if %18 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_45:i32 = load %a
-        %16:i32 = div %x_45, 2i
-        store %a, %16
-        continue %b4
+        %19:i32 = load %a
+        %x_45:i32 = let %19
+        %21:i32 = call %tint_div_i32, %x_45, 2i
+        store %a, %21
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_47:i32 = load %i
-        %18:i32 = add %x_47, 1i
-        store %i, %18
-        next_iteration %b3
+      $B4: {  # continuing
+        %23:i32 = load %i
+        %x_47:i32 = let %23
+        %25:i32 = add %x_47, 1i
+        store %i, %25
+        next_iteration  # -> $B3
       }
     }
-    %x_49:i32 = load %a
-    %20:bool = eq %x_49, 0i
-    if %20 [t: %b7, f: %b8] {  # if_2
-      %b7 = block {  # true
-        %21:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %x_55:i32 = load %21
-        %23:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %x_58:i32 = load %23
-        %25:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %x_61:i32 = load %25
-        %27:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %x_64:i32 = load %27
-        %29:f32 = convert %x_55
-        %30:f32 = convert %x_58
-        %31:f32 = convert %x_61
-        %32:f32 = convert %x_64
-        %33:vec4<f32> = construct %29, %30, %31, %32
-        store %x_GLF_color, %33
+    %26:i32 = load %a
+    %x_49:i32 = let %26
+    %28:bool = eq %x_49, 0i
+    if %28 [t: $B7, f: $B8] {  # if_2
+      $B7: {  # true
+        %29:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %30:i32 = load %29
+        %x_55:i32 = let %30
+        %32:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %33:i32 = load %32
+        %x_58:i32 = let %33
+        %35:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %36:i32 = load %35
+        %x_61:i32 = let %36
+        %38:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %39:i32 = load %38
+        %x_64:i32 = let %39
+        %41:f32 = convert %x_55
+        %42:f32 = let %41
+        %43:f32 = convert %x_58
+        %44:f32 = let %43
+        %45:f32 = convert %x_61
+        %46:f32 = let %45
+        %47:f32 = convert %x_64
+        %48:vec4<f32> = construct %42, %44, %46, %47
+        store %x_GLF_color, %48
         exit_if  # if_2
       }
-      %b8 = block {  # false
-        %34:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %x_68:i32 = load %34
-        %x_69:f32 = convert %x_68
-        %37:vec4<f32> = construct %x_69, %x_69, %x_69, %x_69
-        store %x_GLF_color, %37
+      $B8: {  # false
+        %49:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %50:i32 = load %49
+        %x_68:i32 = let %50
+        %52:f32 = convert %x_68
+        %x_69:f32 = let %52
+        %54:vec4<f32> = construct %x_69, %x_69, %x_69, %x_69
+        store %x_GLF_color, %54
         exit_if  # if_2
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b9 {
-  %b9 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B9: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %40:void = call %main_1
-    %41:vec4<f32> = load %x_GLF_color
-    %42:main_out = construct %41
-    ret %42
+    %57:void = call %main_1
+    %58:vec4<f32> = load %x_GLF_color
+    %59:main_out = construct %58
+    ret %59
+  }
+}
+%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B10: {
+    %62:bool = eq %rhs, 0i
+    %63:bool = eq %lhs, -2147483648i
+    %64:bool = eq %rhs, -1i
+    %65:bool = and %63, %64
+    %66:bool = or %62, %65
+    %67:i32 = select %rhs, 1i, %66
+    %68:i32 = div %lhs, %67
+    ret %68
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B11: {
+    %70:i32 = convert %value
+    %71:bool = gte %value, -2147483648.0f
+    %72:i32 = select -2147483648i, %70, %71
+    %73:bool = lte %value, 2147483520.0f
+    %74:i32 = select 2147483647i, %72, %73
+    ret %74
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-integer-modulo-negative/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-integer-modulo-negative/0-opt.spvasm.expected.ir.msl
index b732c39..cf8e290 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-integer-modulo-negative/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-integer-modulo-negative/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,13 +12,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %count:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %6:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
@@ -27,82 +27,100 @@
     %8:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
     %9:i32 = load %8
     store %i, %9
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %10:i32 = load %i
         %11:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
         %12:i32 = load %11
         %13:bool = lt %10, %12
-        if %13 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %13 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
         %14:i32 = load %count
-        %15:i32 = mod %14, -93448i
-        %16:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %17:i32 = load %16
-        %18:bool = gt %15, %17
-        if %18 [t: %b7] {  # if_2
-          %b7 = block {  # true
-            %19:i32 = load %count
-            %20:i32 = add %19, 1i
-            store %count, %20
+        %15:i32 = call %tint_mod_i32, %14, -93448i
+        %17:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %18:i32 = load %17
+        %19:bool = gt %15, %18
+        if %19 [t: $B7] {  # if_2
+          $B7: {  # true
+            %20:i32 = load %count
+            %21:i32 = add %20, 1i
+            store %count, %21
             exit_if  # if_2
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %21:i32 = load %i
-        %22:i32 = add %21, 1i
-        store %i, %22
-        next_iteration %b3
+      $B4: {  # continuing
+        %22:i32 = load %i
+        %23:i32 = add %22, 1i
+        store %i, %23
+        next_iteration  # -> $B3
       }
     }
-    %23:i32 = load %count
-    %24:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %25:i32 = load %24
-    %26:bool = eq %23, %25
-    if %26 [t: %b8, f: %b9] {  # if_3
-      %b8 = block {  # true
-        %27:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %28:i32 = load %27
-        %29:f32 = convert %28
-        %30:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %31:i32 = load %30
-        %32:f32 = convert %31
-        %33:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %34:i32 = load %33
-        %35:f32 = convert %34
-        %36:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %24:i32 = load %count
+    %25:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %26:i32 = load %25
+    %27:bool = eq %24, %26
+    if %27 [t: $B8, f: $B9] {  # if_3
+      $B8: {  # true
+        %28:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %29:i32 = load %28
+        %30:f32 = convert %29
+        %31:f32 = let %30
+        %32:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %33:i32 = load %32
+        %34:f32 = convert %33
+        %35:f32 = let %34
+        %36:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
         %37:i32 = load %36
         %38:f32 = convert %37
-        %39:vec4<f32> = construct %29, %32, %35, %38
-        store %x_GLF_color, %39
-        exit_if  # if_3
-      }
-      %b9 = block {  # false
-        %40:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %39:f32 = let %38
+        %40:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
         %41:i32 = load %40
         %42:f32 = convert %41
-        %43:vec4<f32> = construct %42
+        %43:vec4<f32> = construct %31, %35, %39, %42
         store %x_GLF_color, %43
         exit_if  # if_3
       }
+      $B9: {  # false
+        %44:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %45:i32 = load %44
+        %46:f32 = convert %45
+        %47:vec4<f32> = construct %46
+        store %x_GLF_color, %47
+        exit_if  # if_3
+      }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b10 {
-  %b10 = block {
-    %45:void = call %main_1
-    %46:vec4<f32> = load %x_GLF_color
-    %47:main_out = construct %46
-    ret %47
+%tint_symbol = @fragment func():main_out {
+  $B10: {
+    %49:void = call %main_1
+    %50:vec4<f32> = load %x_GLF_color
+    %51:main_out = construct %50
+    ret %51
+  }
+}
+%tint_mod_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B11: {
+    %54:bool = eq %rhs, 0i
+    %55:bool = eq %lhs, -2147483648i
+    %56:bool = eq %rhs, -1i
+    %57:bool = and %55, %56
+    %58:bool = or %54, %57
+    %59:i32 = select %rhs, 1i, %58
+    %60:i32 = let %59
+    %61:i32 = div %lhs, %60
+    %62:i32 = mul %61, %60
+    %63:i32 = sub %lhs, %62
+    ret %63
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-integer-modulo-negative/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-integer-modulo-negative/0-opt.wgsl.expected.ir.msl
index a2e1a65..352326c 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-integer-modulo-negative/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-integer-modulo-negative/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,97 +12,131 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %count:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %6:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_27:i32 = load %6
+    %7:i32 = load %6
+    %x_27:i32 = let %7
     store %count, %x_27
-    %8:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_29:i32 = load %8
+    %9:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %10:i32 = load %9
+    %x_29:i32 = let %10
     store %i, %x_29
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_34:i32 = load %i
-        %11:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_36:i32 = load %11
-        %13:bool = lt %x_34, %x_36
-        if %13 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %12:i32 = load %i
+        %x_34:i32 = let %12
+        %14:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %15:i32 = load %14
+        %x_36:i32 = let %15
+        %17:bool = lt %x_34, %x_36
+        if %17 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_39:i32 = load %count
-        %15:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_42:i32 = load %15
-        %17:i32 = mod %x_39, -93448i
-        %18:bool = gt %17, %x_42
-        if %18 [t: %b7] {  # if_2
-          %b7 = block {  # true
-            %x_46:i32 = load %count
-            %20:i32 = add %x_46, 1i
-            store %count, %20
+        %18:i32 = load %count
+        %x_39:i32 = let %18
+        %20:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %21:i32 = load %20
+        %x_42:i32 = let %21
+        %23:i32 = call %tint_mod_i32, %x_39, -93448i
+        %25:bool = gt %23, %x_42
+        if %25 [t: $B7] {  # if_2
+          $B7: {  # true
+            %26:i32 = load %count
+            %x_46:i32 = let %26
+            %28:i32 = add %x_46, 1i
+            store %count, %28
             exit_if  # if_2
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_48:i32 = load %i
-        %22:i32 = add %x_48, 1i
-        store %i, %22
-        next_iteration %b3
+      $B4: {  # continuing
+        %29:i32 = load %i
+        %x_48:i32 = let %29
+        %31:i32 = add %x_48, 1i
+        store %i, %31
+        next_iteration  # -> $B3
       }
     }
-    %x_50:i32 = load %count
-    %24:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_52:i32 = load %24
-    %26:bool = eq %x_50, %x_52
-    if %26 [t: %b8, f: %b9] {  # if_3
-      %b8 = block {  # true
-        %27:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %x_58:i32 = load %27
-        %29:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_61:i32 = load %29
-        %31:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_64:i32 = load %31
-        %33:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %x_67:i32 = load %33
-        %35:f32 = convert %x_58
-        %36:f32 = convert %x_61
-        %37:f32 = convert %x_64
-        %38:f32 = convert %x_67
-        %39:vec4<f32> = construct %35, %36, %37, %38
-        store %x_GLF_color, %39
+    %32:i32 = load %count
+    %x_50:i32 = let %32
+    %34:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %35:i32 = load %34
+    %x_52:i32 = let %35
+    %37:bool = eq %x_50, %x_52
+    if %37 [t: $B8, f: $B9] {  # if_3
+      $B8: {  # true
+        %38:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %39:i32 = load %38
+        %x_58:i32 = let %39
+        %41:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %42:i32 = load %41
+        %x_61:i32 = let %42
+        %44:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %45:i32 = load %44
+        %x_64:i32 = let %45
+        %47:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %48:i32 = load %47
+        %x_67:i32 = let %48
+        %50:f32 = convert %x_58
+        %51:f32 = let %50
+        %52:f32 = convert %x_61
+        %53:f32 = let %52
+        %54:f32 = convert %x_64
+        %55:f32 = let %54
+        %56:f32 = convert %x_67
+        %57:vec4<f32> = construct %51, %53, %55, %56
+        store %x_GLF_color, %57
         exit_if  # if_3
       }
-      %b9 = block {  # false
-        %40:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_71:i32 = load %40
-        %x_72:f32 = convert %x_71
-        %43:vec4<f32> = construct %x_72, %x_72, %x_72, %x_72
-        store %x_GLF_color, %43
+      $B9: {  # false
+        %58:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %59:i32 = load %58
+        %x_71:i32 = let %59
+        %61:f32 = convert %x_71
+        %x_72:f32 = let %61
+        %63:vec4<f32> = construct %x_72, %x_72, %x_72, %x_72
+        store %x_GLF_color, %63
         exit_if  # if_3
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b10 {
-  %b10 = block {
-    %45:void = call %main_1
-    %46:vec4<f32> = load %x_GLF_color
-    %47:main_out = construct %46
-    ret %47
+%tint_symbol = @fragment func():main_out {
+  $B10: {
+    %65:void = call %main_1
+    %66:vec4<f32> = load %x_GLF_color
+    %67:main_out = construct %66
+    ret %67
+  }
+}
+%tint_mod_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B11: {
+    %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 = let %75
+    %77:i32 = div %lhs, %76
+    %78:i32 = mul %77, %76
+    %79:i32 = sub %lhs, %78
+    ret %79
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-intervalmap-set-stop/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-intervalmap-set-stop/0-opt.spvasm.expected.ir.msl
index efdd3b1..fa21f75 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-intervalmap-set-stop/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-intervalmap-set-stop/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,174 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+}
+
+%func_ = func():vec3<f32> {
+  $B2: {
+    %v:ptr<function, vec2<f32>, read_write> = var
+    %i:ptr<function, i32, read_write> = var
+    %k:ptr<function, i32, read_write> = var
+    store %v, vec2<f32>(1.0f)
+    store %i, 0i
+    store %k, 0i
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %6:i32 = load %k
+        %7:bool = lt %6, 2i
+        if %7 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
+            exit_if  # if_1
+          }
+          $B6: {  # false
+            exit_loop  # loop_1
+          }
+        }
+        %8:f32 = load_vector_element %v, 1u
+        %9:f32 = add %8, 1.0f
+        %10:bool = gt %9, 4.0f
+        if %10 [t: $B7] {  # if_2
+          $B7: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        store_vector_element %v, 1u, 1.0f
+        %11:i32 = load %i
+        %12:i32 = add %11, 1i
+        store %i, %12
+        continue  # -> $B4
+      }
+      $B4: {  # continuing
+        %13:i32 = load %k
+        %14:i32 = add %13, 1i
+        store %k, %14
+        next_iteration  # -> $B3
+      }
+    }
+    %15:i32 = load %i
+    %16:bool = lt %15, 10i
+    if %16 [t: $B8, f: $B9] {  # if_3
+      $B8: {  # true
+        ret vec3<f32>(1.0f, 0.0f, 0.0f)
+      }
+      $B9: {  # false
+        ret vec3<f32>(0.0f, 0.0f, 1.0f)
+      }
+    }
+    unreachable
+  }
+}
+%main_1 = func():void {
+  $B10: {
+    %j:ptr<function, i32, read_write> = var
+    %data:ptr<function, array<vec3<f32>, 2>, read_write> = var
+    %j_1:ptr<function, i32, read_write> = var
+    %x_80:ptr<function, bool, read_write> = var
+    %x_81:ptr<function, bool, read_write> = var
+    store %j, 0i
+    loop [b: $B11, c: $B12] {  # loop_2
+      $B11: {  # body
+        %23:i32 = load %j
+        %24:bool = lt %23, 1i
+        if %24 [t: $B13, f: $B14] {  # if_4
+          $B13: {  # true
+            exit_if  # if_4
+          }
+          $B14: {  # false
+            exit_loop  # loop_2
+          }
+        }
+        %25:i32 = load %j
+        %x_52:i32 = let %25
+        %27:vec3<f32> = call %func_
+        %x_53:vec3<f32> = let %27
+        %29:ptr<function, vec3<f32>, read_write> = access %data, %x_52
+        store %29, %x_53
+        continue  # -> $B12
+      }
+      $B12: {  # continuing
+        %30:i32 = load %j
+        %31:i32 = add %30, 1i
+        store %j, %31
+        next_iteration  # -> $B11
+      }
+    }
+    store %j_1, 0i
+    loop [b: $B15, c: $B16] {  # loop_3
+      $B15: {  # body
+        %32:i32 = load %j_1
+        %33:bool = lt %32, 1i
+        if %33 [t: $B17, f: $B18] {  # if_5
+          $B17: {  # true
+            exit_if  # if_5
+          }
+          $B18: {  # false
+            exit_loop  # loop_3
+          }
+        }
+        %34:i32 = load %j_1
+        %x_64:i32 = let %34
+        %36:vec3<f32> = call %func_
+        %x_67:vec3<f32> = let %36
+        %38:i32 = mul 4i, %x_64
+        %39:i32 = add %38, 1i
+        %40:ptr<function, vec3<f32>, read_write> = access %data, %39
+        store %40, %x_67
+        continue  # -> $B16
+      }
+      $B16: {  # continuing
+        %41:i32 = load %j_1
+        %42:i32 = add %41, 1i
+        store %j_1, %42
+        next_iteration  # -> $B15
+      }
+    }
+    %43:ptr<function, vec3<f32>, read_write> = access %data, 0i
+    %44:vec3<f32> = load %43
+    %45:vec3<bool> = eq %44, vec3<f32>(1.0f, 0.0f, 0.0f)
+    %46:bool = all %45
+    %x_74:bool = let %46
+    store %x_81, %x_74
+    if %x_74 [t: $B19] {  # if_6
+      $B19: {  # true
+        %48:ptr<function, vec3<f32>, read_write> = access %data, 1i
+        %49:vec3<f32> = load %48
+        %50:vec3<bool> = eq %49, vec3<f32>(1.0f, 0.0f, 0.0f)
+        %51:bool = all %50
+        store %x_80, %51
+        %52:bool = load %x_80
+        store %x_81, %52
+        exit_if  # if_6
+      }
+    }
+    %53:bool = load %x_81
+    if %53 [t: $B20, f: $B21] {  # if_7
+      $B20: {  # true
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        exit_if  # if_7
+      }
+      $B21: {  # false
+        store %x_GLF_color, vec4<f32>(0.0f)
+        exit_if  # if_7
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B22: {
+    %55:void = call %main_1
+    %56:vec4<f32> = load %x_GLF_color
+    %57:main_out = construct %56
+    ret %57
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-intervalmap-set-stop/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-intervalmap-set-stop/0-opt.wgsl.expected.ir.msl
index efdd3b1..570c4cf 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-intervalmap-set-stop/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-intervalmap-set-stop/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,186 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+}
+
+%func_ = func():vec3<f32> {
+  $B2: {
+    %v:ptr<function, vec2<f32>, read_write> = var
+    %i:ptr<function, i32, read_write> = var
+    %k:ptr<function, i32, read_write> = var
+    store %v, vec2<f32>(1.0f)
+    store %i, 0i
+    store %k, 0i
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %6:i32 = load %k
+        %x_90:i32 = let %6
+        %8:bool = lt %x_90, 2i
+        if %8 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
+            exit_if  # if_1
+          }
+          $B6: {  # false
+            exit_loop  # loop_1
+          }
+        }
+        %9:f32 = load_vector_element %v, 1u
+        %x_94:f32 = let %9
+        %11:f32 = add %x_94, 1.0f
+        %12:bool = gt %11, 4.0f
+        if %12 [t: $B7] {  # if_2
+          $B7: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        store_vector_element %v, 1u, 1.0f
+        %13:i32 = load %i
+        %x_100:i32 = let %13
+        %15:i32 = add %x_100, 1i
+        store %i, %15
+        continue  # -> $B4
+      }
+      $B4: {  # continuing
+        %16:i32 = load %k
+        %x_102:i32 = let %16
+        %18:i32 = add %x_102, 1i
+        store %k, %18
+        next_iteration  # -> $B3
+      }
+    }
+    %19:i32 = load %i
+    %x_104:i32 = let %19
+    %21:bool = lt %x_104, 10i
+    if %21 [t: $B8, f: $B9] {  # if_3
+      $B8: {  # true
+        ret vec3<f32>(1.0f, 0.0f, 0.0f)
+      }
+      $B9: {  # false
+        ret vec3<f32>(0.0f, 0.0f, 1.0f)
+      }
+    }
+    unreachable
+  }
+}
+%main_1 = func():void {
+  $B10: {
+    %j:ptr<function, i32, read_write> = var
+    %data:ptr<function, array<vec3<f32>, 2>, read_write> = var
+    %j_1:ptr<function, i32, read_write> = var
+    %x_80:ptr<function, bool, read_write> = var
+    %x_81_phi:ptr<function, bool, read_write> = var
+    store %j, 0i
+    loop [b: $B11, c: $B12] {  # loop_2
+      $B11: {  # body
+        %28:i32 = load %j
+        %x_49:i32 = let %28
+        %30:bool = lt %x_49, 1i
+        if %30 [t: $B13, f: $B14] {  # if_4
+          $B13: {  # true
+            exit_if  # if_4
+          }
+          $B14: {  # false
+            exit_loop  # loop_2
+          }
+        }
+        %31:i32 = load %j
+        %x_52:i32 = let %31
+        %33:vec3<f32> = call %func_
+        %x_53:vec3<f32> = let %33
+        %35:ptr<function, vec3<f32>, read_write> = access %data, %x_52
+        store %35, %x_53
+        continue  # -> $B12
+      }
+      $B12: {  # continuing
+        %36:i32 = load %j
+        %x_55:i32 = let %36
+        %38:i32 = add %x_55, 1i
+        store %j, %38
+        next_iteration  # -> $B11
+      }
+    }
+    store %j_1, 0i
+    loop [b: $B15, c: $B16] {  # loop_3
+      $B15: {  # body
+        %39:i32 = load %j_1
+        %x_61:i32 = let %39
+        %41:bool = lt %x_61, 1i
+        if %41 [t: $B17, f: $B18] {  # if_5
+          $B17: {  # true
+            exit_if  # if_5
+          }
+          $B18: {  # false
+            exit_loop  # loop_3
+          }
+        }
+        %42:i32 = load %j_1
+        %x_64:i32 = let %42
+        %44:vec3<f32> = call %func_
+        %x_67:vec3<f32> = let %44
+        %46:i32 = mul 4i, %x_64
+        %47:i32 = add %46, 1i
+        %48:ptr<function, vec3<f32>, read_write> = access %data, %47
+        store %48, %x_67
+        continue  # -> $B16
+      }
+      $B16: {  # continuing
+        %49:i32 = load %j_1
+        %x_69:i32 = let %49
+        %51:i32 = add %x_69, 1i
+        store %j_1, %51
+        next_iteration  # -> $B15
+      }
+    }
+    %52:ptr<function, vec3<f32>, read_write> = access %data, 0i
+    %53:vec3<f32> = load %52
+    %x_72:vec3<f32> = let %53
+    %55:vec3<bool> = eq %x_72, vec3<f32>(1.0f, 0.0f, 0.0f)
+    %56:bool = all %55
+    %x_74:bool = let %56
+    store %x_81_phi, %x_74
+    if %x_74 [t: $B19] {  # if_6
+      $B19: {  # true
+        %58:ptr<function, vec3<f32>, read_write> = access %data, 1i
+        %59:vec3<f32> = load %58
+        %x_78:vec3<f32> = let %59
+        %61:vec3<bool> = eq %x_78, vec3<f32>(1.0f, 0.0f, 0.0f)
+        %62:bool = all %61
+        store %x_80, %62
+        %63:bool = load %x_80
+        store %x_81_phi, %63
+        exit_if  # if_6
+      }
+    }
+    %64:bool = load %x_81_phi
+    %x_81:bool = let %64
+    if %x_81 [t: $B20, f: $B21] {  # if_7
+      $B20: {  # true
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        exit_if  # if_7
+      }
+      $B21: {  # false
+        store %x_GLF_color, vec4<f32>(0.0f)
+        exit_if  # if_7
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B22: {
+    %67:void = call %main_1
+    %68:vec4<f32> = load %x_GLF_color
+    %69:main_out = construct %68
+    ret %69
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-ldexp-undefined-mat-vec-multiply/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-ldexp-undefined-mat-vec-multiply/0.spvasm.expected.ir.msl
index 5a833cb..28dc537 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-ldexp-undefined-mat-vec-multiply/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-ldexp-undefined-mat-vec-multiply/0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,59 +20,65 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_8:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %v1:ptr<function, vec2<f32>, read_write> = var
     %6:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_35:f32 = load %6
-    %8:vec2<f32> = construct %x_35
-    store %v1, %8
-    %9:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-    %x_38:i32 = load %9
-    %11:f32 = load_vector_element %v1, 1u
-    %12:f32 = ldexp %11, -256i
-    store_vector_element %v1, %x_38, %12
-    %13:vec2<f32> = load %v1
-    %14:vec2<f32> = construct %x_35, 0.0f
-    %15:vec2<f32> = construct 0.0f, %x_35
-    %16:mat2x2<f32> = construct %14, %15
-    %17:vec2<f32> = mul %13, %16
-    %18:f32 = access %17, 0u
-    %19:bool = eq %18, %x_35
-    if %19 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %x_53:f32 = convert %x_38
-        %21:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-        %22:i32 = load %21
-        %x_56:f32 = convert %22
-        %24:vec4<f32> = construct %x_53, %x_56, %x_56, %x_53
-        store %x_GLF_color, %24
+    %7:f32 = load %6
+    %x_35:f32 = let %7
+    %9:vec2<f32> = construct %x_35
+    store %v1, %9
+    %10:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+    %11:i32 = load %10
+    %x_38:i32 = let %11
+    %13:f32 = load_vector_element %v1, 1u
+    %14:f32 = ldexp %13, -256i
+    store_vector_element %v1, %x_38, %14
+    %15:vec2<f32> = load %v1
+    %16:vec2<f32> = let %15
+    %17:vec2<f32> = construct %x_35, 0.0f
+    %18:vec2<f32> = let %17
+    %19:vec2<f32> = construct 0.0f, %x_35
+    %20:mat2x2<f32> = construct %18, %19
+    %21:vec2<f32> = mul %16, %20
+    %22:f32 = access %21, 0u
+    %23:bool = eq %22, %x_35
+    if %23 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %24:f32 = convert %x_38
+        %x_53:f32 = let %24
+        %26:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+        %27:i32 = load %26
+        %28:f32 = convert %27
+        %x_56:f32 = let %28
+        %30:vec4<f32> = construct %x_53, %x_56, %x_56, %x_53
+        store %x_GLF_color, %30
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %25:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-        %26:i32 = load %25
-        %27:f32 = convert %26
-        %28:vec4<f32> = construct %27
-        store %x_GLF_color, %28
+      $B4: {  # false
+        %31:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+        %32:i32 = load %31
+        %33:f32 = convert %32
+        %34:vec4<f32> = construct %33
+        store %x_GLF_color, %34
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %30:void = call %main_1
-    %31:vec4<f32> = load %x_GLF_color
-    %32:main_out = construct %31
-    ret %32
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %36:void = call %main_1
+    %37:vec4<f32> = load %x_GLF_color
+    %38:main_out = construct %37
+    ret %38
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-ldexp-undefined-mat-vec-multiply/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-ldexp-undefined-mat-vec-multiply/0.wgsl.expected.ir.msl
index b9af984..c164305 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-ldexp-undefined-mat-vec-multiply/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-ldexp-undefined-mat-vec-multiply/0.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,59 +20,69 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_8:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %v1:ptr<function, vec2<f32>, read_write> = var
     %6:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_35:f32 = load %6
-    %8:vec2<f32> = construct %x_35, %x_35
-    store %v1, %8
-    %9:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-    %x_38:i32 = load %9
-    %x_40:f32 = load_vector_element %v1, 1u
-    %12:f32 = ldexp %x_40, -256i
-    store_vector_element %v1, %x_38, %12
-    %x_43:vec2<f32> = load %v1
-    %14:vec2<f32> = construct %x_35, 0.0f
-    %15:vec2<f32> = construct 0.0f, %x_35
-    %16:mat2x2<f32> = construct %14, %15
-    %17:vec2<f32> = mul %x_43, %16
-    %18:f32 = access %17, 0u
-    %19:bool = eq %18, %x_35
-    if %19 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %x_53:f32 = convert %x_38
-        %21:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-        %x_55:i32 = load %21
-        %x_56:f32 = convert %x_55
-        %24:vec4<f32> = construct %x_53, %x_56, %x_56, %x_53
-        store %x_GLF_color, %24
+    %7:f32 = load %6
+    %x_35:f32 = let %7
+    %9:vec2<f32> = construct %x_35, %x_35
+    store %v1, %9
+    %10:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+    %11:i32 = load %10
+    %x_38:i32 = let %11
+    %13:f32 = load_vector_element %v1, 1u
+    %x_40:f32 = let %13
+    %15:f32 = ldexp %x_40, -256i
+    store_vector_element %v1, %x_38, %15
+    %16:vec2<f32> = load %v1
+    %x_43:vec2<f32> = let %16
+    %18:vec2<f32> = construct %x_35, 0.0f
+    %19:vec2<f32> = let %18
+    %20:vec2<f32> = construct 0.0f, %x_35
+    %21:mat2x2<f32> = construct %19, %20
+    %22:vec2<f32> = mul %x_43, %21
+    %23:f32 = access %22, 0u
+    %24:bool = eq %23, %x_35
+    if %24 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %25:f32 = convert %x_38
+        %x_53:f32 = let %25
+        %27:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+        %28:i32 = load %27
+        %x_55:i32 = let %28
+        %30:f32 = convert %x_55
+        %x_56:f32 = let %30
+        %32:vec4<f32> = construct %x_53, %x_56, %x_56, %x_53
+        store %x_GLF_color, %32
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %25:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-        %x_59:i32 = load %25
-        %x_60:f32 = convert %x_59
-        %28:vec4<f32> = construct %x_60, %x_60, %x_60, %x_60
-        store %x_GLF_color, %28
+      $B4: {  # false
+        %33:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+        %34:i32 = load %33
+        %x_59:i32 = let %34
+        %36:f32 = convert %x_59
+        %x_60:f32 = let %36
+        %38:vec4<f32> = construct %x_60, %x_60, %x_60, %x_60
+        store %x_GLF_color, %38
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %30:void = call %main_1
-    %31:vec4<f32> = load %x_GLF_color
-    %32:main_out = construct %31
-    ret %32
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %40:void = call %main_1
+    %41:vec4<f32> = load %x_GLF_color
+    %42:main_out = construct %41
+    ret %42
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-left-shift-array-access/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-left-shift-array-access/0-opt.spvasm.expected.ir.msl
index 8e600eb..93a4b08 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-left-shift-array-access/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-left-shift-array-access/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,73 +12,79 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %idx:ptr<function, i32, read_write> = var
     %a:ptr<function, i32, read_write> = var
     %indexable:ptr<function, array<strided_arr, 2>, read_write> = var
     %7:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
     %8:i32 = load %7
     %9:u32 = bitcast %8
-    %10:i32 = shiftl 1i, %9
-    store %idx, %10
-    %x_34:i32 = load %idx
-    %12:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %13:i32 = load %12
-    %14:strided_arr = construct %13
-    %15:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %16:i32 = load %15
-    %17:strided_arr = construct %16
-    %18:array<strided_arr, 2> = construct %14, %17
-    store %indexable, %18
-    %19:ptr<function, i32, read_write> = access %indexable, %x_34, 0u
-    %20:i32 = load %19
-    store %a, %20
-    %21:i32 = load %a
-    %22:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %10:u32 = and %9, 31u
+    %11:i32 = shl 1i, %10
+    store %idx, %11
+    %12:i32 = load %idx
+    %x_34:i32 = let %12
+    %14:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %15:i32 = load %14
+    %16:strided_arr = construct %15
+    %17:strided_arr = let %16
+    %18:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %19:i32 = load %18
+    %20:strided_arr = construct %19
+    %21:array<strided_arr, 2> = construct %17, %20
+    store %indexable, %21
+    %22:ptr<function, i32, read_write> = access %indexable, %x_34, 0u
     %23:i32 = load %22
-    %24:bool = eq %21, %23
-    if %24 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %25:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %26:i32 = load %25
-        %27:f32 = convert %26
-        %28:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    store %a, %23
+    %24:i32 = load %a
+    %25:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %26:i32 = load %25
+    %27:bool = eq %24, %26
+    if %27 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %28:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
         %29:i32 = load %28
         %30:f32 = convert %29
-        %31:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %32:i32 = load %31
-        %33:f32 = convert %32
-        %34:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %35:i32 = load %34
-        %36:f32 = convert %35
-        %37:vec4<f32> = construct %27, %30, %33, %36
-        store %x_GLF_color, %37
+        %31:f32 = let %30
+        %32:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %33:i32 = load %32
+        %34:f32 = convert %33
+        %35:f32 = let %34
+        %36:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %37:i32 = load %36
+        %38:f32 = convert %37
+        %39:f32 = let %38
+        %40:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %41:i32 = load %40
+        %42:f32 = convert %41
+        %43:vec4<f32> = construct %31, %35, %39, %42
+        store %x_GLF_color, %43
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %38:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %39:i32 = load %38
-        %40:f32 = convert %39
-        %41:vec4<f32> = construct %40
-        store %x_GLF_color, %41
+      $B4: {  # false
+        %44:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %45:i32 = load %44
+        %46:f32 = convert %45
+        %47:vec4<f32> = construct %46
+        store %x_GLF_color, %47
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %43:void = call %main_1
-    %44:vec4<f32> = load %x_GLF_color
-    %45:main_out = construct %44
-    ret %45
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %49:void = call %main_1
+    %50:vec4<f32> = load %x_GLF_color
+    %51:main_out = construct %50
+    ret %51
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-left-shift-array-access/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-left-shift-array-access/0-opt.wgsl.expected.ir.msl
index 1aa0f3f..2146d61 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-left-shift-array-access/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-left-shift-array-access/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,73 +12,91 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %idx:ptr<function, i32, read_write> = var
     %a:ptr<function, i32, read_write> = var
     %indexable:ptr<function, array<strided_arr, 2>, read_write> = var
     %7:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_27:i32 = load %7
-    %9:u32 = bitcast %x_27
-    %10:i32 = shiftl 1i, %9
-    store %idx, %10
-    %11:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_30:i32 = load %11
-    %13:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_32:i32 = load %13
-    %x_34:i32 = load %idx
-    %16:strided_arr = construct %x_30
-    %17:strided_arr = construct %x_32
-    %18:array<strided_arr, 2> = construct %16, %17
-    store %indexable, %18
-    %19:ptr<function, i32, read_write> = access %indexable, %x_34, 0u
-    %x_36:i32 = load %19
+    %8:i32 = load %7
+    %x_27:i32 = let %8
+    %10:u32 = bitcast %x_27
+    %11:u32 = and %10, 31u
+    %12:i32 = shl 1i, %11
+    store %idx, %12
+    %13:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %14:i32 = load %13
+    %x_30:i32 = let %14
+    %16:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %17:i32 = load %16
+    %x_32:i32 = let %17
+    %19:i32 = load %idx
+    %x_34:i32 = let %19
+    %21:strided_arr = construct %x_30
+    %22:strided_arr = let %21
+    %23:strided_arr = construct %x_32
+    %24:array<strided_arr, 2> = construct %22, %23
+    store %indexable, %24
+    %25:ptr<function, i32, read_write> = access %indexable, %x_34, 0u
+    %26:i32 = load %25
+    %x_36:i32 = let %26
     store %a, %x_36
-    %x_37:i32 = load %a
-    %22:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_39:i32 = load %22
-    %24:bool = eq %x_37, %x_39
-    if %24 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %25:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_45:i32 = load %25
-        %27:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_48:i32 = load %27
-        %29:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_51:i32 = load %29
-        %31:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_54:i32 = load %31
-        %33:f32 = convert %x_45
-        %34:f32 = convert %x_48
-        %35:f32 = convert %x_51
-        %36:f32 = convert %x_54
-        %37:vec4<f32> = construct %33, %34, %35, %36
-        store %x_GLF_color, %37
+    %28:i32 = load %a
+    %x_37:i32 = let %28
+    %30:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %31:i32 = load %30
+    %x_39:i32 = let %31
+    %33:bool = eq %x_37, %x_39
+    if %33 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %34:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %35:i32 = load %34
+        %x_45:i32 = let %35
+        %37:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %38:i32 = load %37
+        %x_48:i32 = let %38
+        %40:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %41:i32 = load %40
+        %x_51:i32 = let %41
+        %43:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %44:i32 = load %43
+        %x_54:i32 = let %44
+        %46:f32 = convert %x_45
+        %47:f32 = let %46
+        %48:f32 = convert %x_48
+        %49:f32 = let %48
+        %50:f32 = convert %x_51
+        %51:f32 = let %50
+        %52:f32 = convert %x_54
+        %53:vec4<f32> = construct %47, %49, %51, %52
+        store %x_GLF_color, %53
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %38:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_58:i32 = load %38
-        %x_59:f32 = convert %x_58
-        %41:vec4<f32> = construct %x_59, %x_59, %x_59, %x_59
-        store %x_GLF_color, %41
+      $B4: {  # false
+        %54:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %55:i32 = load %54
+        %x_58:i32 = let %55
+        %57:f32 = convert %x_58
+        %x_59:f32 = let %57
+        %59:vec4<f32> = construct %x_59, %x_59, %x_59, %x_59
+        store %x_GLF_color, %59
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %43:void = call %main_1
-    %44:vec4<f32> = load %x_GLF_color
-    %45:main_out = construct %44
-    ret %45
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %61:void = call %main_1
+    %62:vec4<f32> = load %x_GLF_color
+    %63:main_out = construct %62
+    ret %63
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-left-shift-right-shift-compare/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-left-shift-right-shift-compare/0.spvasm.expected.ir.msl
index b18b2e7..d5f7d93 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-left-shift-right-shift-compare/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-left-shift-right-shift-compare/0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,65 +12,73 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %x_32:ptr<function, i32, read_write> = var
     %5:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
-    %x_24:i32 = load %5
-    %x_25:f32 = convert %x_24
-    %8:vec4<f32> = construct %x_25
-    store %x_GLF_color, %8
-    %9:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
-    %x_28:i32 = load %9
-    %11:u32 = bitcast %x_28
-    %12:i32 = shiftl %x_28, %11
-    %x_30:i32 = shiftr %12, 1u
+    %6:i32 = load %5
+    %x_24:i32 = let %6
+    %8:f32 = convert %x_24
+    %x_25:f32 = let %8
+    %10:vec4<f32> = construct %x_25
+    store %x_GLF_color, %10
+    %11:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
+    %12:i32 = load %11
+    %x_28:i32 = let %12
+    %14:u32 = bitcast %x_28
+    %15:u32 = and %14, 31u
+    %16:i32 = shl %x_28, %15
+    %17:u32 = and 1u, 31u
+    %18:i32 = shr %16, %17
+    %x_30:i32 = let %18
     store %x_32, %x_24
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %14:bool = lt %x_30, 10i
-        if %14 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %20:bool = lt %x_30, 10i
+        if %20 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %15:i32 = load %x_32
-        %x_33:i32 = add %15, 1i
-        %17:ptr<uniform, i32, read> = access %x_5, 0u, 2i, 0u
-        %18:i32 = load %17
-        %19:bool = eq %x_33, %18
-        if %19 [t: %b7] {  # if_2
-          %b7 = block {  # true
-            %x_43:f32 = convert %x_28
-            %21:vec4<f32> = construct %x_43, %x_25, %x_25, %x_43
-            store %x_GLF_color, %21
+        %21:i32 = load %x_32
+        %22:i32 = add %21, 1i
+        %x_33:i32 = let %22
+        %24:ptr<uniform, i32, read> = access %x_5, 0u, 2i, 0u
+        %25:i32 = load %24
+        %26:bool = eq %x_33, %25
+        if %26 [t: $B7] {  # if_2
+          $B7: {  # true
+            %27:f32 = convert %x_28
+            %x_43:f32 = let %27
+            %29:vec4<f32> = construct %x_43, %x_25, %x_25, %x_43
+            store %x_GLF_color, %29
             exit_loop  # loop_1
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
+      $B4: {  # continuing
         store %x_32, %x_33
-        next_iteration %b3
+        next_iteration  # -> $B3
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b8 {
-  %b8 = block {
-    %23:void = call %main_1
-    %24:vec4<f32> = load %x_GLF_color
-    %25:main_out = construct %24
-    ret %25
+%tint_symbol = @fragment func():main_out {
+  $B8: {
+    %31:void = call %main_1
+    %32:vec4<f32> = load %x_GLF_color
+    %33:main_out = construct %32
+    ret %33
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-left-shift-right-shift-compare/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-left-shift-right-shift-compare/0.wgsl.expected.ir.msl
index e39ccda..ceaea81 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-left-shift-right-shift-compare/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-left-shift-right-shift-compare/0.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,70 +12,80 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %x_32_phi:ptr<function, i32, read_write> = var
     %5:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
-    %x_24:i32 = load %5
-    %x_25:f32 = convert %x_24
-    %8:vec4<f32> = construct %x_25, %x_25, %x_25, %x_25
-    store %x_GLF_color, %8
-    %9:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
-    %x_28:i32 = load %9
-    %11:u32 = bitcast %x_28
-    %12:i32 = shiftl %x_28, %11
-    %x_30:i32 = shiftr %12, 1u
+    %6:i32 = load %5
+    %x_24:i32 = let %6
+    %8:f32 = convert %x_24
+    %x_25:f32 = let %8
+    %10:vec4<f32> = construct %x_25, %x_25, %x_25, %x_25
+    store %x_GLF_color, %10
+    %11:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
+    %12:i32 = load %11
+    %x_28:i32 = let %12
+    %14:u32 = bitcast %x_28
+    %15:u32 = and %14, 31u
+    %16:i32 = shl %x_28, %15
+    %17:u32 = and 1u, 31u
+    %18:i32 = shr %16, %17
+    %x_30:i32 = let %18
     store %x_32_phi, %x_24
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_32:i32 = load %x_32_phi
-        %15:bool = lt %x_30, 10i
-        if %15 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %20:i32 = load %x_32_phi
+        %x_32:i32 = let %20
+        %22:bool = lt %x_30, 10i
+        if %22 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
         %x_33:ptr<function, i32, read_write> = var
-        %17:i32 = add %x_32, 1i
-        store %x_33, %17
-        %18:ptr<uniform, i32, read> = access %x_5, 0u, 2i, 0u
-        %x_39:i32 = load %18
-        %20:i32 = load %x_33
-        %21:i32 = bitcast %x_39
-        %22:bool = eq %20, %21
-        if %22 [t: %b7] {  # if_2
-          %b7 = block {  # true
-            %x_43:f32 = convert %x_28
-            %24:vec4<f32> = construct %x_43, %x_25, %x_25, %x_43
-            store %x_GLF_color, %24
+        %24:i32 = add %x_32, 1i
+        store %x_33, %24
+        %25:ptr<uniform, i32, read> = access %x_5, 0u, 2i, 0u
+        %26:i32 = load %25
+        %x_39:i32 = let %26
+        %28:i32 = load %x_33
+        %29:i32 = let %28
+        %30:i32 = bitcast %x_39
+        %31:bool = eq %29, %30
+        if %31 [t: $B7] {  # if_2
+          $B7: {  # true
+            %32:f32 = convert %x_28
+            %x_43:f32 = let %32
+            %34:vec4<f32> = construct %x_43, %x_25, %x_25, %x_43
+            store %x_GLF_color, %34
             exit_loop  # loop_1
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %25:i32 = load %x_33
-        store %x_32_phi, %25
-        next_iteration %b3
+      $B4: {  # continuing
+        %35:i32 = load %x_33
+        store %x_32_phi, %35
+        next_iteration  # -> $B3
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b8 {
-  %b8 = block {
-    %27:void = call %main_1
-    %28:vec4<f32> = load %x_GLF_color
-    %29:main_out = construct %28
-    ret %29
+%tint_symbol = @fragment func():main_out {
+  $B8: {
+    %37:void = call %main_1
+    %38:vec4<f32> = load %x_GLF_color
+    %39:main_out = construct %38
+    ret %39
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-liveinterval-different-dest/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-liveinterval-different-dest/0-opt.spvasm.expected.ir.msl
index efdd3b1..9fe3ea4 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-liveinterval-different-dest/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-liveinterval-different-dest/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,151 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+}
+
+%func_ = func():vec3<f32> {
+  $B2: {
+    %v:ptr<function, vec2<f32>, read_write> = var
+    %i:ptr<function, i32, read_write> = var
+    %k:ptr<function, i32, read_write> = var
+    store %v, vec2<f32>(1.0f)
+    store %i, 0i
+    store %k, 0i
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %6:i32 = load %k
+        %7:bool = lt %6, 2i
+        if %7 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
+            exit_if  # if_1
+          }
+          $B6: {  # false
+            exit_loop  # loop_1
+          }
+        }
+        %8:f32 = load_vector_element %v, 1u
+        %9:f32 = add %8, 1.0f
+        %10:bool = gt %9, 4.0f
+        if %10 [t: $B7] {  # if_2
+          $B7: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        store_vector_element %v, 1u, 1.0f
+        %11:i32 = load %i
+        %12:i32 = add %11, 1i
+        store %i, %12
+        continue  # -> $B4
+      }
+      $B4: {  # continuing
+        %13:i32 = load %k
+        %14:i32 = add %13, 1i
+        store %k, %14
+        next_iteration  # -> $B3
+      }
+    }
+    %15:i32 = load %i
+    %16:bool = lt %15, 10i
+    if %16 [t: $B8, f: $B9] {  # if_3
+      $B8: {  # true
+        ret vec3<f32>(1.0f, 0.0f, 0.0f)
+      }
+      $B9: {  # false
+        ret vec3<f32>(0.0f, 0.0f, 1.0f)
+      }
+    }
+    unreachable
+  }
+}
+%main_1 = func():void {
+  $B10: {
+    %j:ptr<function, i32, read_write> = var
+    %data:ptr<function, array<vec3<f32>, 2>, read_write> = var
+    %j_1:ptr<function, i32, read_write> = var
+    store %j, 0i
+    loop [b: $B11, c: $B12] {  # loop_2
+      $B11: {  # body
+        %21:i32 = load %j
+        %22:bool = lt %21, 1i
+        if %22 [t: $B13, f: $B14] {  # if_4
+          $B13: {  # true
+            exit_if  # if_4
+          }
+          $B14: {  # false
+            exit_loop  # loop_2
+          }
+        }
+        %23:i32 = load %j
+        %x_49:i32 = let %23
+        %25:vec3<f32> = call %func_
+        %x_50:vec3<f32> = let %25
+        %27:ptr<function, vec3<f32>, read_write> = access %data, %x_49
+        store %27, %x_50
+        continue  # -> $B12
+      }
+      $B12: {  # continuing
+        %28:i32 = load %j
+        %29:i32 = add %28, 1i
+        store %j, %29
+        next_iteration  # -> $B11
+      }
+    }
+    store %j_1, 0i
+    loop [b: $B15, c: $B16] {  # loop_3
+      $B15: {  # body
+        %30:i32 = load %j_1
+        %31:bool = lt %30, 1i
+        if %31 [t: $B17, f: $B18] {  # if_5
+          $B17: {  # true
+            exit_if  # if_5
+          }
+          $B18: {  # false
+            exit_loop  # loop_3
+          }
+        }
+        %32:i32 = load %j_1
+        %x_61:i32 = let %32
+        %34:vec3<f32> = call %func_
+        %x_64:vec3<f32> = let %34
+        %36:i32 = mul 4i, %x_61
+        %37:i32 = add %36, 1i
+        %38:ptr<function, vec3<f32>, read_write> = access %data, %37
+        store %38, %x_64
+        continue  # -> $B16
+      }
+      $B16: {  # continuing
+        %39:i32 = load %j_1
+        %40:i32 = add %39, 1i
+        store %j_1, %40
+        next_iteration  # -> $B15
+      }
+    }
+    %41:ptr<function, vec3<f32>, read_write> = access %data, 0i
+    %42:vec3<f32> = load %41
+    %x_69:vec3<f32> = let %42
+    %44:f32 = access %x_69, 0u
+    %45:f32 = access %x_69, 1u
+    %46:f32 = access %x_69, 2u
+    %47:vec4<f32> = construct %44, %45, %46, 1.0f
+    store %x_GLF_color, %47
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B19: {
+    %49:void = call %main_1
+    %50:vec4<f32> = load %x_GLF_color
+    %51:main_out = construct %50
+    ret %51
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-liveinterval-different-dest/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-liveinterval-different-dest/0-opt.wgsl.expected.ir.msl
index efdd3b1..12266d7 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-liveinterval-different-dest/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-liveinterval-different-dest/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,160 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+}
+
+%func_ = func():vec3<f32> {
+  $B2: {
+    %v:ptr<function, vec2<f32>, read_write> = var
+    %i:ptr<function, i32, read_write> = var
+    %k:ptr<function, i32, read_write> = var
+    store %v, vec2<f32>(1.0f)
+    store %i, 0i
+    store %k, 0i
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %6:i32 = load %k
+        %x_79:i32 = let %6
+        %8:bool = lt %x_79, 2i
+        if %8 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
+            exit_if  # if_1
+          }
+          $B6: {  # false
+            exit_loop  # loop_1
+          }
+        }
+        %9:f32 = load_vector_element %v, 1u
+        %x_83:f32 = let %9
+        %11:f32 = add %x_83, 1.0f
+        %12:bool = gt %11, 4.0f
+        if %12 [t: $B7] {  # if_2
+          $B7: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        store_vector_element %v, 1u, 1.0f
+        %13:i32 = load %i
+        %x_89:i32 = let %13
+        %15:i32 = add %x_89, 1i
+        store %i, %15
+        continue  # -> $B4
+      }
+      $B4: {  # continuing
+        %16:i32 = load %k
+        %x_91:i32 = let %16
+        %18:i32 = add %x_91, 1i
+        store %k, %18
+        next_iteration  # -> $B3
+      }
+    }
+    %19:i32 = load %i
+    %x_93:i32 = let %19
+    %21:bool = lt %x_93, 10i
+    if %21 [t: $B8, f: $B9] {  # if_3
+      $B8: {  # true
+        ret vec3<f32>(1.0f, 0.0f, 0.0f)
+      }
+      $B9: {  # false
+        ret vec3<f32>(0.0f, 0.0f, 1.0f)
+      }
+    }
+    unreachable
+  }
+}
+%main_1 = func():void {
+  $B10: {
+    %j:ptr<function, i32, read_write> = var
+    %data:ptr<function, array<vec3<f32>, 2>, read_write> = var
+    %j_1:ptr<function, i32, read_write> = var
+    store %j, 0i
+    loop [b: $B11, c: $B12] {  # loop_2
+      $B11: {  # body
+        %26:i32 = load %j
+        %x_46:i32 = let %26
+        %28:bool = lt %x_46, 1i
+        if %28 [t: $B13, f: $B14] {  # if_4
+          $B13: {  # true
+            exit_if  # if_4
+          }
+          $B14: {  # false
+            exit_loop  # loop_2
+          }
+        }
+        %29:i32 = load %j
+        %x_49:i32 = let %29
+        %31:vec3<f32> = call %func_
+        %x_50:vec3<f32> = let %31
+        %33:ptr<function, vec3<f32>, read_write> = access %data, %x_49
+        store %33, %x_50
+        continue  # -> $B12
+      }
+      $B12: {  # continuing
+        %34:i32 = load %j
+        %x_52:i32 = let %34
+        %36:i32 = add %x_52, 1i
+        store %j, %36
+        next_iteration  # -> $B11
+      }
+    }
+    store %j_1, 0i
+    loop [b: $B15, c: $B16] {  # loop_3
+      $B15: {  # body
+        %37:i32 = load %j_1
+        %x_58:i32 = let %37
+        %39:bool = lt %x_58, 1i
+        if %39 [t: $B17, f: $B18] {  # if_5
+          $B17: {  # true
+            exit_if  # if_5
+          }
+          $B18: {  # false
+            exit_loop  # loop_3
+          }
+        }
+        %40:i32 = load %j_1
+        %x_61:i32 = let %40
+        %42:vec3<f32> = call %func_
+        %x_64:vec3<f32> = let %42
+        %44:i32 = mul 4i, %x_61
+        %45:i32 = add %44, 1i
+        %46:ptr<function, vec3<f32>, read_write> = access %data, %45
+        store %46, %x_64
+        continue  # -> $B16
+      }
+      $B16: {  # continuing
+        %47:i32 = load %j_1
+        %x_66:i32 = let %47
+        %49:i32 = add %x_66, 1i
+        store %j_1, %49
+        next_iteration  # -> $B15
+      }
+    }
+    %50:ptr<function, vec3<f32>, read_write> = access %data, 0i
+    %51:vec3<f32> = load %50
+    %x_69:vec3<f32> = let %51
+    %53:f32 = access %x_69, 0u
+    %54:f32 = access %x_69, 1u
+    %55:f32 = access %x_69, 2u
+    %56:vec4<f32> = construct %53, %54, %55, 1.0f
+    store %x_GLF_color, %56
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B19: {
+    %58:void = call %main_1
+    %59:vec4<f32> = load %x_GLF_color
+    %60:main_out = construct %59
+    ret %60
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-abs-multiply-offset/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-abs-multiply-offset/0-opt.spvasm.expected.ir.msl
index 418b130..4104033 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-abs-multiply-offset/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-abs-multiply-offset/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,14 +20,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_9:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %f:ptr<function, f32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %x_66:ptr<function, bool, read_write> = var
@@ -38,17 +38,17 @@
     %11:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
     %12:i32 = load %11
     store %i, %12
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %13:i32 = load %i
         %14:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
         %15:i32 = load %14
         %16:bool = lt %13, %15
-        if %16 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %16 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
@@ -62,69 +62,73 @@
         %24:f32 = load %23
         %25:f32 = add %22, %24
         store %f, %25
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
+      $B4: {  # continuing
         %26:i32 = load %i
         %27:i32 = add %26, 1i
         store %i, %27
-        next_iteration %b3
+        next_iteration  # -> $B3
       }
     }
     %28:f32 = load %f
     %29:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
     %30:f32 = load %29
-    %x_60:bool = gt %28, %30
+    %31:bool = gt %28, %30
+    %x_60:bool = let %31
     store %x_67, %x_60
-    if %x_60 [t: %b7] {  # if_2
-      %b7 = block {  # true
-        %32:f32 = load %f
-        %33:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
-        %34:f32 = load %33
-        %35:bool = lt %32, %34
-        store %x_66, %35
-        %36:bool = load %x_66
-        store %x_67, %36
+    if %x_60 [t: $B7] {  # if_2
+      $B7: {  # true
+        %33:f32 = load %f
+        %34:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
+        %35:f32 = load %34
+        %36:bool = lt %33, %35
+        store %x_66, %36
+        %37:bool = load %x_66
+        store %x_67, %37
         exit_if  # if_2
       }
     }
-    %37:bool = load %x_67
-    if %37 [t: %b8, f: %b9] {  # if_3
-      %b8 = block {  # true
-        %38:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
-        %39:i32 = load %38
-        %40:f32 = convert %39
-        %41:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %42:i32 = load %41
-        %43:f32 = convert %42
-        %44:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %45:i32 = load %44
-        %46:f32 = convert %45
-        %47:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
+    %38:bool = load %x_67
+    if %38 [t: $B8, f: $B9] {  # if_3
+      $B8: {  # true
+        %39:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
+        %40:i32 = load %39
+        %41:f32 = convert %40
+        %42:f32 = let %41
+        %43:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %44:i32 = load %43
+        %45:f32 = convert %44
+        %46:f32 = let %45
+        %47:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
         %48:i32 = load %47
         %49:f32 = convert %48
-        %50:vec4<f32> = construct %40, %43, %46, %49
-        store %x_GLF_color, %50
-        exit_if  # if_3
-      }
-      %b9 = block {  # false
-        %51:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %50:f32 = let %49
+        %51:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
         %52:i32 = load %51
         %53:f32 = convert %52
-        %54:vec4<f32> = construct %53
+        %54:vec4<f32> = construct %42, %46, %50, %53
         store %x_GLF_color, %54
         exit_if  # if_3
       }
+      $B9: {  # false
+        %55:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %56:i32 = load %55
+        %57:f32 = convert %56
+        %58:vec4<f32> = construct %57
+        store %x_GLF_color, %58
+        exit_if  # if_3
+      }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b10 {
-  %b10 = block {
-    %56:void = call %main_1
-    %57:vec4<f32> = load %x_GLF_color
-    %58:main_out = construct %57
-    ret %58
+%tint_symbol = @fragment func():main_out {
+  $B10: {
+    %60:void = call %main_1
+    %61:vec4<f32> = load %x_GLF_color
+    %62:main_out = construct %61
+    ret %62
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-abs-multiply-offset/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-abs-multiply-offset/0-opt.wgsl.expected.ir.msl
index adddbe1..79fa609 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-abs-multiply-offset/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-abs-multiply-offset/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,111 +20,134 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_9:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %f:ptr<function, f32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %x_66:ptr<function, bool, read_write> = var
     %x_67_phi:ptr<function, bool, read_write> = var
     %9:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_34:f32 = load %9
+    %10:f32 = load %9
+    %x_34:f32 = let %10
     store %f, %x_34
-    %11:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-    %x_36:i32 = load %11
+    %12:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+    %13:i32 = load %12
+    %x_36:i32 = let %13
     store %i, %x_36
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_41:i32 = load %i
-        %14:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %x_43:i32 = load %14
-        %16:bool = lt %x_41, %x_43
-        if %16 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %15:i32 = load %i
+        %x_41:i32 = let %15
+        %17:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+        %18:i32 = load %17
+        %x_43:i32 = let %18
+        %20:bool = lt %x_41, %x_43
+        if %20 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %17:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
-        %x_47:f32 = load %17
-        %x_49:f32 = load %f
-        %20:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-        %x_53:f32 = load %20
-        %22:f32 = negation %x_47
-        %23:f32 = mul %22, %x_49
-        %24:f32 = abs %23
-        %25:f32 = add %24, %x_53
-        store %f, %25
-        continue %b4
+        %21:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
+        %22:f32 = load %21
+        %x_47:f32 = let %22
+        %24:f32 = load %f
+        %x_49:f32 = let %24
+        %26:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+        %27:f32 = load %26
+        %x_53:f32 = let %27
+        %29:f32 = negation %x_47
+        %30:f32 = mul %29, %x_49
+        %31:f32 = abs %30
+        %32:f32 = add %31, %x_53
+        store %f, %32
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_55:i32 = load %i
-        %27:i32 = add %x_55, 1i
-        store %i, %27
-        next_iteration %b3
+      $B4: {  # continuing
+        %33:i32 = load %i
+        %x_55:i32 = let %33
+        %35:i32 = add %x_55, 1i
+        store %i, %35
+        next_iteration  # -> $B3
       }
     }
-    %x_57:f32 = load %f
-    %29:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-    %x_59:f32 = load %29
-    %x_60:bool = gt %x_57, %x_59
+    %36:f32 = load %f
+    %x_57:f32 = let %36
+    %38:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+    %39:f32 = load %38
+    %x_59:f32 = let %39
+    %41:bool = gt %x_57, %x_59
+    %x_60:bool = let %41
     store %x_67_phi, %x_60
-    if %x_60 [t: %b7] {  # if_2
-      %b7 = block {  # true
-        %x_63:f32 = load %f
-        %33:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
-        %x_65:f32 = load %33
-        %35:bool = lt %x_63, %x_65
-        store %x_66, %35
-        %36:bool = load %x_66
-        store %x_67_phi, %36
+    if %x_60 [t: $B7] {  # if_2
+      $B7: {  # true
+        %43:f32 = load %f
+        %x_63:f32 = let %43
+        %45:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
+        %46:f32 = load %45
+        %x_65:f32 = let %46
+        %48:bool = lt %x_63, %x_65
+        store %x_66, %48
+        %49:bool = load %x_66
+        store %x_67_phi, %49
         exit_if  # if_2
       }
     }
-    %x_67:bool = load %x_67_phi
-    if %x_67 [t: %b8, f: %b9] {  # if_3
-      %b8 = block {  # true
-        %38:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
-        %x_72:i32 = load %38
-        %40:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %x_75:i32 = load %40
-        %42:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %x_78:i32 = load %42
-        %44:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
-        %x_81:i32 = load %44
-        %46:f32 = convert %x_72
-        %47:f32 = convert %x_75
-        %48:f32 = convert %x_78
-        %49:f32 = convert %x_81
-        %50:vec4<f32> = construct %46, %47, %48, %49
-        store %x_GLF_color, %50
+    %50:bool = load %x_67_phi
+    %x_67:bool = let %50
+    if %x_67 [t: $B8, f: $B9] {  # if_3
+      $B8: {  # true
+        %52:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
+        %53:i32 = load %52
+        %x_72:i32 = let %53
+        %55:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %56:i32 = load %55
+        %x_75:i32 = let %56
+        %58:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %59:i32 = load %58
+        %x_78:i32 = let %59
+        %61:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
+        %62:i32 = load %61
+        %x_81:i32 = let %62
+        %64:f32 = convert %x_72
+        %65:f32 = let %64
+        %66:f32 = convert %x_75
+        %67:f32 = let %66
+        %68:f32 = convert %x_78
+        %69:f32 = let %68
+        %70:f32 = convert %x_81
+        %71:vec4<f32> = construct %65, %67, %69, %70
+        store %x_GLF_color, %71
         exit_if  # if_3
       }
-      %b9 = block {  # false
-        %51:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %x_85:i32 = load %51
-        %x_86:f32 = convert %x_85
-        %54:vec4<f32> = construct %x_86, %x_86, %x_86, %x_86
-        store %x_GLF_color, %54
+      $B9: {  # false
+        %72:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %73:i32 = load %72
+        %x_85:i32 = let %73
+        %75:f32 = convert %x_85
+        %x_86:f32 = let %75
+        %77:vec4<f32> = construct %x_86, %x_86, %x_86, %x_86
+        store %x_GLF_color, %77
         exit_if  # if_3
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b10 {
-  %b10 = block {
-    %56:void = call %main_1
-    %57:vec4<f32> = load %x_GLF_color
-    %58:main_out = construct %57
-    ret %58
+%tint_symbol = @fragment func():main_out {
+  $B10: {
+    %79:void = call %main_1
+    %80:vec4<f32> = load %x_GLF_color
+    %81:main_out = construct %80
+    ret %81
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-clamp-to-one-empty-condition/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-clamp-to-one-empty-condition/0-opt.spvasm.expected.ir.msl
index fbcb7e8..d0e43cc 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-clamp-to-one-empty-condition/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-clamp-to-one-empty-condition/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,15 +20,15 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_global_loop_count:ptr<private, i32, read_write> = var
   %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_10:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %f:ptr<function, f32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     store %x_GLF_global_loop_count, 0i
@@ -38,17 +38,17 @@
     %10:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
     %11:i32 = load %10
     store %i, %11
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %12:i32 = load %i
         %13:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
         %14:i32 = load %13
         %15:bool = lt %12, %14
-        if %15 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %15 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
@@ -56,8 +56,8 @@
         %17:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
         %18:f32 = load %17
         %19:bool = gt %16, %18
-        if %19 [t: %b7] {  # if_2
-          %b7 = block {  # true
+        if %19 [t: $B7] {  # if_2
+          $B7: {  # true
             exit_if  # if_2
           }
         }
@@ -67,59 +67,63 @@
         %22:f32 = load %f
         %23:f32 = clamp %21, 1.0f, %22
         %24:f32 = sub 1.0f, %23
-        %25:i32 = load %i
-        %26:f32 = convert %25
-        %27:f32 = add %24, %26
-        store %f, %27
-        continue %b4
+        %25:f32 = let %24
+        %26:i32 = load %i
+        %27:f32 = convert %26
+        %28:f32 = add %25, %27
+        store %f, %28
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %28:i32 = load %i
-        %29:i32 = add %28, 1i
-        store %i, %29
-        next_iteration %b3
+      $B4: {  # continuing
+        %29:i32 = load %i
+        %30:i32 = add %29, 1i
+        store %i, %30
+        next_iteration  # -> $B3
       }
     }
-    %30:f32 = load %f
-    %31:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-    %32:f32 = load %31
-    %33:bool = eq %30, %32
-    if %33 [t: %b8, f: %b9] {  # if_3
-      %b8 = block {  # true
-        %34:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %35:i32 = load %34
-        %36:f32 = convert %35
-        %37:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %38:i32 = load %37
-        %39:f32 = convert %38
-        %40:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %41:i32 = load %40
-        %42:f32 = convert %41
-        %43:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+    %31:f32 = load %f
+    %32:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
+    %33:f32 = load %32
+    %34:bool = eq %31, %33
+    if %34 [t: $B8, f: $B9] {  # if_3
+      $B8: {  # true
+        %35:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %36:i32 = load %35
+        %37:f32 = convert %36
+        %38:f32 = let %37
+        %39:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %40:i32 = load %39
+        %41:f32 = convert %40
+        %42:f32 = let %41
+        %43:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
         %44:i32 = load %43
         %45:f32 = convert %44
-        %46:vec4<f32> = construct %36, %39, %42, %45
-        store %x_GLF_color, %46
-        exit_if  # if_3
-      }
-      %b9 = block {  # false
-        %47:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %46:f32 = let %45
+        %47:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
         %48:i32 = load %47
         %49:f32 = convert %48
-        %50:vec4<f32> = construct %49
+        %50:vec4<f32> = construct %38, %42, %46, %49
         store %x_GLF_color, %50
         exit_if  # if_3
       }
+      $B9: {  # false
+        %51:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %52:i32 = load %51
+        %53:f32 = convert %52
+        %54:vec4<f32> = construct %53
+        store %x_GLF_color, %54
+        exit_if  # if_3
+      }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b10 {
-  %b10 = block {
-    %52:void = call %main_1
-    %53:vec4<f32> = load %x_GLF_color
-    %54:main_out = construct %53
-    ret %54
+%tint_symbol = @fragment func():main_out {
+  $B10: {
+    %56:void = call %main_1
+    %57:vec4<f32> = load %x_GLF_color
+    %58:main_out = construct %57
+    ret %58
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-clamp-to-one-empty-condition/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-clamp-to-one-empty-condition/0-opt.wgsl.expected.ir.msl
index 8fbe26b..b7663e8 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-clamp-to-one-empty-condition/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-clamp-to-one-empty-condition/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,106 +20,128 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_global_loop_count:ptr<private, i32, read_write> = var
   %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_10:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %f:ptr<function, f32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     store %x_GLF_global_loop_count, 0i
     %8:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
-    %x_36:f32 = load %8
+    %9:f32 = load %8
+    %x_36:f32 = let %9
     store %f, %x_36
-    %10:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-    %x_38:i32 = load %10
+    %11:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+    %12:i32 = load %11
+    %x_38:i32 = let %12
     store %i, %x_38
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_43:i32 = load %i
-        %13:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-        %x_45:i32 = load %13
-        %15:bool = lt %x_43, %x_45
-        if %15 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %14:i32 = load %i
+        %x_43:i32 = let %14
+        %16:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+        %17:i32 = load %16
+        %x_45:i32 = let %17
+        %19:bool = lt %x_43, %x_45
+        if %19 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_48:f32 = load %f
-        %17:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
-        %x_50:f32 = load %17
-        %19:bool = gt %x_48, %x_50
-        if %19 [t: %b7] {  # if_2
-          %b7 = block {  # true
+        %20:f32 = load %f
+        %x_48:f32 = let %20
+        %22:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
+        %23:f32 = load %22
+        %x_50:f32 = let %23
+        %25:bool = gt %x_48, %x_50
+        if %25 [t: $B7] {  # if_2
+          $B7: {  # true
             exit_if  # if_2
           }
         }
         store %f, 1.0f
-        %20:ptr<uniform, f32, read> = access %x_7, 0u, 2i, 0u
-        %x_55:f32 = load %20
-        %x_56:f32 = load %f
-        %x_59:i32 = load %i
-        %24:f32 = clamp %x_55, 1.0f, %x_56
-        %25:f32 = sub 1.0f, %24
-        %26:f32 = convert %x_59
-        %27:f32 = add %25, %26
-        store %f, %27
-        continue %b4
+        %26:ptr<uniform, f32, read> = access %x_7, 0u, 2i, 0u
+        %27:f32 = load %26
+        %x_55:f32 = let %27
+        %29:f32 = load %f
+        %x_56:f32 = let %29
+        %31:i32 = load %i
+        %x_59:i32 = let %31
+        %33:f32 = clamp %x_55, 1.0f, %x_56
+        %34:f32 = sub 1.0f, %33
+        %35:f32 = let %34
+        %36:f32 = convert %x_59
+        %37:f32 = add %35, %36
+        store %f, %37
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_62:i32 = load %i
-        %29:i32 = add %x_62, 1i
-        store %i, %29
-        next_iteration %b3
+      $B4: {  # continuing
+        %38:i32 = load %i
+        %x_62:i32 = let %38
+        %40:i32 = add %x_62, 1i
+        store %i, %40
+        next_iteration  # -> $B3
       }
     }
-    %x_64:f32 = load %f
-    %31:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-    %x_66:f32 = load %31
-    %33:bool = eq %x_64, %x_66
-    if %33 [t: %b8, f: %b9] {  # if_3
-      %b8 = block {  # true
-        %34:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %x_72:i32 = load %34
-        %36:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %x_75:i32 = load %36
-        %38:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %x_78:i32 = load %38
-        %40:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %x_81:i32 = load %40
-        %42:f32 = convert %x_72
-        %43:f32 = convert %x_75
-        %44:f32 = convert %x_78
-        %45:f32 = convert %x_81
-        %46:vec4<f32> = construct %42, %43, %44, %45
-        store %x_GLF_color, %46
+    %41:f32 = load %f
+    %x_64:f32 = let %41
+    %43:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
+    %44:f32 = load %43
+    %x_66:f32 = let %44
+    %46:bool = eq %x_64, %x_66
+    if %46 [t: $B8, f: $B9] {  # if_3
+      $B8: {  # true
+        %47:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %48:i32 = load %47
+        %x_72:i32 = let %48
+        %50:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %51:i32 = load %50
+        %x_75:i32 = let %51
+        %53:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %54:i32 = load %53
+        %x_78:i32 = let %54
+        %56:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %57:i32 = load %56
+        %x_81:i32 = let %57
+        %59:f32 = convert %x_72
+        %60:f32 = let %59
+        %61:f32 = convert %x_75
+        %62:f32 = let %61
+        %63:f32 = convert %x_78
+        %64:f32 = let %63
+        %65:f32 = convert %x_81
+        %66:vec4<f32> = construct %60, %62, %64, %65
+        store %x_GLF_color, %66
         exit_if  # if_3
       }
-      %b9 = block {  # false
-        %47:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %x_85:i32 = load %47
-        %x_86:f32 = convert %x_85
-        %50:vec4<f32> = construct %x_86, %x_86, %x_86, %x_86
-        store %x_GLF_color, %50
+      $B9: {  # false
+        %67:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %68:i32 = load %67
+        %x_85:i32 = let %68
+        %70:f32 = convert %x_85
+        %x_86:f32 = let %70
+        %72:vec4<f32> = construct %x_86, %x_86, %x_86, %x_86
+        store %x_GLF_color, %72
         exit_if  # if_3
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b10 {
-  %b10 = block {
-    %52:void = call %main_1
-    %53:vec4<f32> = load %x_GLF_color
-    %54:main_out = construct %53
-    ret %54
+%tint_symbol = @fragment func():main_out {
+  $B10: {
+    %74:void = call %main_1
+    %75:vec4<f32> = load %x_GLF_color
+    %76:main_out = construct %75
+    ret %76
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-condition-double-negate/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-condition-double-negate/0-opt.spvasm.expected.ir.msl
index 04974ee..6c1b6e5 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-condition-double-negate/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-condition-double-negate/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,13 +12,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %arr:ptr<function, array<i32, 3>, read_write> = var
     %index:ptr<function, i32, read_write> = var
     %x_76:ptr<function, bool, read_write> = var
@@ -34,13 +34,13 @@
     %16:array<i32, 3> = construct %11, %13, %15
     store %arr, %16
     store %index, 1i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %x_51:ptr<function, bool, read_write> = var
         %x_52:ptr<function, bool, read_write> = var
         store %x_52, true
-        if true [t: %b5] {  # if_1
-          %b5 = block {  # true
+        if true [t: $B5] {  # if_1
+          $B5: {  # true
             %19:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
             %20:i32 = load %19
             %21:bool = eq %20, 1i
@@ -56,108 +56,113 @@
         }
         %27:bool = load %x_52
         %28:bool = eq %27, false
-        if %28 [t: %b6, f: %b7] {  # if_2
-          %b6 = block {  # true
+        if %28 [t: $B6, f: $B7] {  # if_2
+          $B6: {  # true
             exit_if  # if_2
           }
-          %b7 = block {  # false
+          $B7: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_55:i32 = load %index
+        %29:i32 = load %index
+        %x_55:i32 = let %29
         %x_56_save:i32 = let %x_55
-        %31:ptr<function, i32, read_write> = access %arr, %x_56_save
-        %32:ptr<function, i32, read_write> = access %arr, %x_55
-        %33:i32 = load %32
-        %34:i32 = add %33, 1i
-        store %31, %34
-        %35:i32 = load %index
-        %36:i32 = add %35, 1i
-        store %index, %36
-        continue %b4
+        %32:ptr<function, i32, read_write> = access %arr, %x_56_save
+        %33:ptr<function, i32, read_write> = access %arr, %x_55
+        %34:i32 = load %33
+        %35:i32 = add %34, 1i
+        store %32, %35
+        %36:i32 = load %index
+        %37:i32 = add %36, 1i
+        store %index, %37
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
-    %37:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %38:i32 = load %37
-    %39:ptr<function, i32, read_write> = access %arr, %38
-    %40:i32 = load %39
-    %41:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-    %42:i32 = load %41
-    %x_67:bool = eq %40, %42
+    %38:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %39:i32 = load %38
+    %40:ptr<function, i32, read_write> = access %arr, %39
+    %41:i32 = load %40
+    %42:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+    %43:i32 = load %42
+    %44:bool = eq %41, %43
+    %x_67:bool = let %44
     store %x_77, %x_67
-    if %x_67 [t: %b8] {  # if_3
-      %b8 = block {  # true
-        %44:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %45:i32 = load %44
-        %46:ptr<function, i32, read_write> = access %arr, %45
+    if %x_67 [t: $B8] {  # if_3
+      $B8: {  # true
+        %46:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
         %47:i32 = load %46
-        %48:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
+        %48:ptr<function, i32, read_write> = access %arr, %47
         %49:i32 = load %48
-        %50:bool = eq %47, %49
-        store %x_76, %50
-        %51:bool = load %x_76
-        store %x_77, %51
+        %50:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
+        %51:i32 = load %50
+        %52:bool = eq %49, %51
+        store %x_76, %52
+        %53:bool = load %x_76
+        store %x_77, %53
         exit_if  # if_3
       }
     }
-    %52:bool = load %x_77
-    store %x_87, %52
-    %53:bool = load %x_77
-    if %53 [t: %b9] {  # if_4
-      %b9 = block {  # true
-        %54:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-        %55:i32 = load %54
-        %56:ptr<function, i32, read_write> = access %arr, %55
+    %54:bool = load %x_77
+    store %x_87, %54
+    %55:bool = load %x_77
+    if %55 [t: $B9] {  # if_4
+      $B9: {  # true
+        %56:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
         %57:i32 = load %56
-        %58:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %58:ptr<function, i32, read_write> = access %arr, %57
         %59:i32 = load %58
-        %60:bool = eq %57, %59
-        store %x_86, %60
-        %61:bool = load %x_86
-        store %x_87, %61
+        %60:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %61:i32 = load %60
+        %62:bool = eq %59, %61
+        store %x_86, %62
+        %63:bool = load %x_86
+        store %x_87, %63
         exit_if  # if_4
       }
     }
-    %62:bool = load %x_87
-    if %62 [t: %b10, f: %b11] {  # if_5
-      %b10 = block {  # true
-        %63:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %64:i32 = load %63
-        %65:f32 = convert %64
-        %66:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %67:i32 = load %66
-        %68:f32 = convert %67
+    %64:bool = load %x_87
+    if %64 [t: $B10, f: $B11] {  # if_5
+      $B10: {  # true
+        %65:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %66:i32 = load %65
+        %67:f32 = convert %66
+        %68:f32 = let %67
         %69:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
         %70:i32 = load %69
         %71:f32 = convert %70
-        %72:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %73:i32 = load %72
-        %74:f32 = convert %73
-        %75:vec4<f32> = construct %65, %68, %71, %74
-        store %x_GLF_color, %75
+        %72:f32 = let %71
+        %73:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %74:i32 = load %73
+        %75:f32 = convert %74
+        %76:f32 = let %75
+        %77:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %78:i32 = load %77
+        %79:f32 = convert %78
+        %80:vec4<f32> = construct %68, %72, %76, %79
+        store %x_GLF_color, %80
         exit_if  # if_5
       }
-      %b11 = block {  # false
-        %76:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %77:i32 = load %76
-        %78:f32 = convert %77
-        %79:vec4<f32> = construct %78
-        store %x_GLF_color, %79
+      $B11: {  # false
+        %81:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %82:i32 = load %81
+        %83:f32 = convert %82
+        %84:vec4<f32> = construct %83
+        store %x_GLF_color, %84
         exit_if  # if_5
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b12 {
-  %b12 = block {
-    %81:void = call %main_1
-    %82:vec4<f32> = load %x_GLF_color
-    %83:main_out = construct %82
-    ret %83
+%tint_symbol = @fragment func():main_out {
+  $B12: {
+    %86:void = call %main_1
+    %87:vec4<f32> = load %x_GLF_color
+    %88:main_out = construct %87
+    ret %88
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-condition-double-negate/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-condition-double-negate/0-opt.wgsl.expected.ir.msl
index 4c7ea9f..934b4a2 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-condition-double-negate/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-condition-double-negate/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,13 +12,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %arr:ptr<function, array<i32, 3>, read_write> = var
     %index:ptr<function, i32, read_write> = var
     %x_76:ptr<function, bool, read_write> = var
@@ -26,137 +26,167 @@
     %x_77_phi:ptr<function, bool, read_write> = var
     %x_87_phi:ptr<function, bool, read_write> = var
     %10:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-    %x_33:i32 = load %10
-    %12:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
-    %x_35:i32 = load %12
-    %14:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_37:i32 = load %14
-    %16:array<i32, 3> = construct %x_33, %x_35, %x_37
-    store %arr, %16
+    %11:i32 = load %10
+    %x_33:i32 = let %11
+    %13:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
+    %14:i32 = load %13
+    %x_35:i32 = let %14
+    %16:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %17:i32 = load %16
+    %x_37:i32 = let %17
+    %19:array<i32, 3> = construct %x_33, %x_35, %x_37
+    store %arr, %19
     store %index, 1i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %x_51:ptr<function, bool, read_write> = var
         %x_52_phi:ptr<function, bool, read_write> = var
         store %x_52_phi, true
-        if true [t: %b5] {  # if_1
-          %b5 = block {  # true
-            %19:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-            %x_46:i32 = load %19
-            %x_48:i32 = load %index
-            %22:bool = eq %x_46, 1i
-            %23:bool = lte %x_48, 1i
-            %24:bool = and %22, %23
-            %25:bool = eq %24, false
-            store %x_51, %25
-            %26:bool = load %x_51
-            store %x_52_phi, %26
+        if true [t: $B5] {  # if_1
+          $B5: {  # true
+            %22:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+            %23:i32 = load %22
+            %x_46:i32 = let %23
+            %25:i32 = load %index
+            %x_48:i32 = let %25
+            %27:bool = eq %x_46, 1i
+            %28:bool = lte %x_48, 1i
+            %29:bool = and %27, %28
+            %30:bool = eq %29, false
+            store %x_51, %30
+            %31:bool = load %x_51
+            store %x_52_phi, %31
             exit_if  # if_1
           }
         }
-        %x_52:bool = load %x_52_phi
-        %28:bool = eq %x_52, false
-        if %28 [t: %b6, f: %b7] {  # if_2
-          %b6 = block {  # true
+        %32:bool = load %x_52_phi
+        %x_52:bool = let %32
+        %34:bool = eq %x_52, false
+        if %34 [t: $B6, f: $B7] {  # if_2
+          $B6: {  # true
             exit_if  # if_2
           }
-          %b7 = block {  # false
+          $B7: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_55:i32 = load %index
+        %35:i32 = load %index
+        %x_55:i32 = let %35
         %x_56_save:i32 = let %x_55
-        %31:ptr<function, i32, read_write> = access %arr, %x_56_save
-        %x_57:i32 = load %31
-        %33:ptr<function, i32, read_write> = access %arr, %x_56_save
-        %34:i32 = add %x_57, 1i
-        store %33, %34
-        %x_59:i32 = load %index
-        %36:i32 = add %x_59, 1i
-        store %index, %36
-        continue %b4
+        %38:ptr<function, i32, read_write> = access %arr, %x_56_save
+        %39:i32 = load %38
+        %x_57:i32 = let %39
+        %41:ptr<function, i32, read_write> = access %arr, %x_56_save
+        %42:i32 = add %x_57, 1i
+        store %41, %42
+        %43:i32 = load %index
+        %x_59:i32 = let %43
+        %45:i32 = add %x_59, 1i
+        store %index, %45
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
-    %37:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_62:i32 = load %37
-    %39:ptr<function, i32, read_write> = access %arr, %x_62
-    %x_64:i32 = load %39
-    %41:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-    %x_66:i32 = load %41
-    %x_67:bool = eq %x_64, %x_66
+    %46:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %47:i32 = load %46
+    %x_62:i32 = let %47
+    %49:ptr<function, i32, read_write> = access %arr, %x_62
+    %50:i32 = load %49
+    %x_64:i32 = let %50
+    %52:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+    %53:i32 = load %52
+    %x_66:i32 = let %53
+    %55:bool = eq %x_64, %x_66
+    %x_67:bool = let %55
     store %x_77_phi, %x_67
-    if %x_67 [t: %b8] {  # if_3
-      %b8 = block {  # true
-        %44:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_71:i32 = load %44
-        %46:ptr<function, i32, read_write> = access %arr, %x_71
-        %x_73:i32 = load %46
-        %48:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
-        %x_75:i32 = load %48
-        %50:bool = eq %x_73, %x_75
-        store %x_76, %50
-        %51:bool = load %x_76
-        store %x_77_phi, %51
+    if %x_67 [t: $B8] {  # if_3
+      $B8: {  # true
+        %57:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %58:i32 = load %57
+        %x_71:i32 = let %58
+        %60:ptr<function, i32, read_write> = access %arr, %x_71
+        %61:i32 = load %60
+        %x_73:i32 = let %61
+        %63:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
+        %64:i32 = load %63
+        %x_75:i32 = let %64
+        %66:bool = eq %x_73, %x_75
+        store %x_76, %66
+        %67:bool = load %x_76
+        store %x_77_phi, %67
         exit_if  # if_3
       }
     }
-    %x_77:bool = load %x_77_phi
+    %68:bool = load %x_77_phi
+    %x_77:bool = let %68
     store %x_87_phi, %x_77
-    if %x_77 [t: %b9] {  # if_4
-      %b9 = block {  # true
-        %53:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-        %x_81:i32 = load %53
-        %55:ptr<function, i32, read_write> = access %arr, %x_81
-        %x_83:i32 = load %55
-        %57:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %x_85:i32 = load %57
-        %59:bool = eq %x_83, %x_85
-        store %x_86, %59
-        %60:bool = load %x_86
-        store %x_87_phi, %60
+    if %x_77 [t: $B9] {  # if_4
+      $B9: {  # true
+        %70:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+        %71:i32 = load %70
+        %x_81:i32 = let %71
+        %73:ptr<function, i32, read_write> = access %arr, %x_81
+        %74:i32 = load %73
+        %x_83:i32 = let %74
+        %76:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %77:i32 = load %76
+        %x_85:i32 = let %77
+        %79:bool = eq %x_83, %x_85
+        store %x_86, %79
+        %80:bool = load %x_86
+        store %x_87_phi, %80
         exit_if  # if_4
       }
     }
-    %x_87:bool = load %x_87_phi
-    if %x_87 [t: %b10, f: %b11] {  # if_5
-      %b10 = block {  # true
-        %62:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_92:i32 = load %62
-        %64:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_95:i32 = load %64
-        %66:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_98:i32 = load %66
-        %68:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_101:i32 = load %68
-        %70:f32 = convert %x_92
-        %71:f32 = convert %x_95
-        %72:f32 = convert %x_98
-        %73:f32 = convert %x_101
-        %74:vec4<f32> = construct %70, %71, %72, %73
-        store %x_GLF_color, %74
+    %81:bool = load %x_87_phi
+    %x_87:bool = let %81
+    if %x_87 [t: $B10, f: $B11] {  # if_5
+      $B10: {  # true
+        %83:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %84:i32 = load %83
+        %x_92:i32 = let %84
+        %86:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %87:i32 = load %86
+        %x_95:i32 = let %87
+        %89:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %90:i32 = load %89
+        %x_98:i32 = let %90
+        %92:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %93:i32 = load %92
+        %x_101:i32 = let %93
+        %95:f32 = convert %x_92
+        %96:f32 = let %95
+        %97:f32 = convert %x_95
+        %98:f32 = let %97
+        %99:f32 = convert %x_98
+        %100:f32 = let %99
+        %101:f32 = convert %x_101
+        %102:vec4<f32> = construct %96, %98, %100, %101
+        store %x_GLF_color, %102
         exit_if  # if_5
       }
-      %b11 = block {  # false
-        %75:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_105:i32 = load %75
-        %x_106:f32 = convert %x_105
-        %78:vec4<f32> = construct %x_106, %x_106, %x_106, %x_106
-        store %x_GLF_color, %78
+      $B11: {  # false
+        %103:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %104:i32 = load %103
+        %x_105:i32 = let %104
+        %106:f32 = convert %x_105
+        %x_106:f32 = let %106
+        %108:vec4<f32> = construct %x_106, %x_106, %x_106, %x_106
+        store %x_GLF_color, %108
         exit_if  # if_5
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b12 {
-  %b12 = block {
-    %80:void = call %main_1
-    %81:vec4<f32> = load %x_GLF_color
-    %82:main_out = construct %81
-    ret %82
+%tint_symbol = @fragment func():main_out {
+  $B12: {
+    %110:void = call %main_1
+    %111:vec4<f32> = load %x_GLF_color
+    %112:main_out = construct %111
+    ret %112
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-dfdx-constant-divide/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-dfdx-constant-divide/0-opt.spvasm.expected.ir.msl
index 43b6bc8..9622f8f 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-dfdx-constant-divide/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-dfdx-constant-divide/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,14 +20,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_11:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, f32, read_write> = var
     %b:ptr<function, f32, read_write> = var
     %c:ptr<function, f32, read_write> = var
@@ -44,17 +44,17 @@
     %15:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
     %16:i32 = load %15
     store %i, %16
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %17:i32 = load %i
         %18:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
         %19:i32 = load %18
         %20:bool = lt %17, %19
-        if %20 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %20 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
@@ -62,73 +62,79 @@
         %22:ptr<uniform, i32, read> = access %x_11, 0u, 2i, 0u
         %23:i32 = load %22
         %24:bool = eq %21, %23
-        if %24 [t: %b7] {  # if_2
-          %b7 = block {  # true
+        if %24 [t: $B7] {  # if_2
+          $B7: {  # true
             %25:f32 = load %a
-            %26:f32 = dpdx %25
+            %x_57:f32 = let %25
             %27:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
             %28:f32 = load %27
-            %29:f32 = add %26, %28
-            store %b, %29
+            %x_60:f32 = let %28
+            %30:f32 = dpdx %x_57
+            %31:f32 = add %30, %x_60
+            store %b, %31
             exit_if  # if_2
           }
         }
-        %30:f32 = load %a
-        %31:f32 = dpdx %30
-        store %c, %31
-        %32:f32 = load %c
-        %33:f32 = load %b
-        %34:f32 = div %32, %33
-        store %a, %34
-        continue %b4
+        %32:f32 = load %a
+        %x_62:f32 = let %32
+        %34:f32 = dpdx %x_62
+        store %c, %34
+        %35:f32 = load %c
+        %36:f32 = load %b
+        %37:f32 = div %35, %36
+        store %a, %37
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %35:i32 = load %i
-        %36:i32 = add %35, 1i
-        store %i, %36
-        next_iteration %b3
+      $B4: {  # continuing
+        %38:i32 = load %i
+        %39:i32 = add %38, 1i
+        store %i, %39
+        next_iteration  # -> $B3
       }
     }
-    %37:f32 = load %a
-    %38:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %39:f32 = load %38
-    %40:bool = eq %37, %39
-    if %40 [t: %b8, f: %b9] {  # if_3
-      %b8 = block {  # true
-        %41:ptr<uniform, i32, read> = access %x_11, 0u, 2i, 0u
-        %42:i32 = load %41
-        %43:f32 = convert %42
-        %44:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
+    %40:f32 = load %a
+    %41:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %42:f32 = load %41
+    %43:bool = eq %40, %42
+    if %43 [t: $B8, f: $B9] {  # if_3
+      $B8: {  # true
+        %44:ptr<uniform, i32, read> = access %x_11, 0u, 2i, 0u
         %45:i32 = load %44
         %46:f32 = convert %45
-        %47:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
-        %48:i32 = load %47
-        %49:f32 = convert %48
-        %50:ptr<uniform, i32, read> = access %x_11, 0u, 2i, 0u
-        %51:i32 = load %50
-        %52:f32 = convert %51
-        %53:vec4<f32> = construct %43, %46, %49, %52
-        store %x_GLF_color, %53
+        %47:f32 = let %46
+        %48:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
+        %49:i32 = load %48
+        %50:f32 = convert %49
+        %51:f32 = let %50
+        %52:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
+        %53:i32 = load %52
+        %54:f32 = convert %53
+        %55:f32 = let %54
+        %56:ptr<uniform, i32, read> = access %x_11, 0u, 2i, 0u
+        %57:i32 = load %56
+        %58:f32 = convert %57
+        %59:vec4<f32> = construct %47, %51, %55, %58
+        store %x_GLF_color, %59
         exit_if  # if_3
       }
-      %b9 = block {  # false
-        %54:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
-        %55:i32 = load %54
-        %56:f32 = convert %55
-        %57:vec4<f32> = construct %56
-        store %x_GLF_color, %57
+      $B9: {  # false
+        %60:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
+        %61:i32 = load %60
+        %62:f32 = convert %61
+        %63:vec4<f32> = construct %62
+        store %x_GLF_color, %63
         exit_if  # if_3
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b10 {
-  %b10 = block {
-    %59:void = call %main_1
-    %60:vec4<f32> = load %x_GLF_color
-    %61:main_out = construct %60
-    ret %61
+%tint_symbol = @fragment func():main_out {
+  $B10: {
+    %65:void = call %main_1
+    %66:vec4<f32> = load %x_GLF_color
+    %67:main_out = construct %66
+    ret %67
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-dfdx-constant-divide/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-dfdx-constant-divide/0-opt.wgsl.expected.ir.msl
index cf727e8..4fe763c 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-dfdx-constant-divide/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-dfdx-constant-divide/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,115 +20,140 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_11:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, f32, read_write> = var
     %b:ptr<function, f32, read_write> = var
     %c:ptr<function, f32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %9:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-    %x_35:f32 = load %9
+    %10:f32 = load %9
+    %x_35:f32 = let %10
     store %a, %x_35
-    %11:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-    %x_37:f32 = load %11
+    %12:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+    %13:f32 = load %12
+    %x_37:f32 = let %13
     store %b, %x_37
-    %13:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-    %x_39:f32 = load %13
+    %15:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+    %16:f32 = load %15
+    %x_39:f32 = let %16
     store %c, %x_39
-    %15:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
-    %x_41:i32 = load %15
+    %18:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
+    %19:i32 = load %18
+    %x_41:i32 = let %19
     store %i, %x_41
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_46:i32 = load %i
-        %18:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
-        %x_48:i32 = load %18
-        %20:bool = lt %x_46, %x_48
-        if %20 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %21:i32 = load %i
+        %x_46:i32 = let %21
+        %23:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
+        %24:i32 = load %23
+        %x_48:i32 = let %24
+        %26:bool = lt %x_46, %x_48
+        if %26 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_51:i32 = load %i
-        %22:ptr<uniform, i32, read> = access %x_11, 0u, 2i, 0u
-        %x_53:i32 = load %22
-        %24:bool = eq %x_51, %x_53
-        if %24 [t: %b7] {  # if_2
-          %b7 = block {  # true
-            %x_57:f32 = load %a
-            %26:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-            %x_60:f32 = load %26
-            %28:f32 = dpdx %x_57
-            %29:f32 = add %28, %x_60
-            store %b, %29
+        %27:i32 = load %i
+        %x_51:i32 = let %27
+        %29:ptr<uniform, i32, read> = access %x_11, 0u, 2i, 0u
+        %30:i32 = load %29
+        %x_53:i32 = let %30
+        %32:bool = eq %x_51, %x_53
+        if %32 [t: $B7] {  # if_2
+          $B7: {  # true
+            %33:f32 = load %a
+            %x_57:f32 = let %33
+            %35:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+            %36:f32 = load %35
+            %x_60:f32 = let %36
+            %38:f32 = dpdx %x_57
+            %39:f32 = add %38, %x_60
+            store %b, %39
             exit_if  # if_2
           }
         }
-        %x_62:f32 = load %a
-        %31:f32 = dpdx %x_62
-        store %c, %31
-        %x_64:f32 = load %c
-        %x_65:f32 = load %b
-        %34:f32 = div %x_64, %x_65
-        store %a, %34
-        continue %b4
+        %40:f32 = load %a
+        %x_62:f32 = let %40
+        %42:f32 = dpdx %x_62
+        store %c, %42
+        %43:f32 = load %c
+        %x_64:f32 = let %43
+        %45:f32 = load %b
+        %x_65:f32 = let %45
+        %47:f32 = div %x_64, %x_65
+        store %a, %47
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_67:i32 = load %i
-        %36:i32 = add %x_67, 1i
-        store %i, %36
-        next_iteration %b3
+      $B4: {  # continuing
+        %48:i32 = load %i
+        %x_67:i32 = let %48
+        %50:i32 = add %x_67, 1i
+        store %i, %50
+        next_iteration  # -> $B3
       }
     }
-    %x_69:f32 = load %a
-    %38:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_71:f32 = load %38
-    %40:bool = eq %x_69, %x_71
-    if %40 [t: %b8, f: %b9] {  # if_3
-      %b8 = block {  # true
-        %41:ptr<uniform, i32, read> = access %x_11, 0u, 2i, 0u
-        %x_77:i32 = load %41
-        %43:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
-        %x_80:i32 = load %43
-        %45:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
-        %x_83:i32 = load %45
-        %47:ptr<uniform, i32, read> = access %x_11, 0u, 2i, 0u
-        %x_86:i32 = load %47
-        %49:f32 = convert %x_77
-        %50:f32 = convert %x_80
-        %51:f32 = convert %x_83
-        %52:f32 = convert %x_86
-        %53:vec4<f32> = construct %49, %50, %51, %52
-        store %x_GLF_color, %53
+    %51:f32 = load %a
+    %x_69:f32 = let %51
+    %53:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %54:f32 = load %53
+    %x_71:f32 = let %54
+    %56:bool = eq %x_69, %x_71
+    if %56 [t: $B8, f: $B9] {  # if_3
+      $B8: {  # true
+        %57:ptr<uniform, i32, read> = access %x_11, 0u, 2i, 0u
+        %58:i32 = load %57
+        %x_77:i32 = let %58
+        %60:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
+        %61:i32 = load %60
+        %x_80:i32 = let %61
+        %63:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
+        %64:i32 = load %63
+        %x_83:i32 = let %64
+        %66:ptr<uniform, i32, read> = access %x_11, 0u, 2i, 0u
+        %67:i32 = load %66
+        %x_86:i32 = let %67
+        %69:f32 = convert %x_77
+        %70:f32 = let %69
+        %71:f32 = convert %x_80
+        %72:f32 = let %71
+        %73:f32 = convert %x_83
+        %74:f32 = let %73
+        %75:f32 = convert %x_86
+        %76:vec4<f32> = construct %70, %72, %74, %75
+        store %x_GLF_color, %76
         exit_if  # if_3
       }
-      %b9 = block {  # false
-        %54:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
-        %x_90:i32 = load %54
-        %x_91:f32 = convert %x_90
-        %57:vec4<f32> = construct %x_91, %x_91, %x_91, %x_91
-        store %x_GLF_color, %57
+      $B9: {  # false
+        %77:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
+        %78:i32 = load %77
+        %x_90:i32 = let %78
+        %80:f32 = convert %x_90
+        %x_91:f32 = let %80
+        %82:vec4<f32> = construct %x_91, %x_91, %x_91, %x_91
+        store %x_GLF_color, %82
         exit_if  # if_3
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b10 {
-  %b10 = block {
-    %59:void = call %main_1
-    %60:vec4<f32> = load %x_GLF_color
-    %61:main_out = construct %60
-    ret %61
+%tint_symbol = @fragment func():main_out {
+  $B10: {
+    %84:void = call %main_1
+    %85:vec4<f32> = load %x_GLF_color
+    %86:main_out = construct %85
+    ret %86
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-increment-matrix-element-break-after-first-iteration/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-increment-matrix-element-break-after-first-iteration/0-opt.spvasm.expected.ir.msl
index 086a60e..788f503 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-increment-matrix-element-break-after-first-iteration/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-increment-matrix-element-break-after-first-iteration/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,156 +20,170 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_7:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_10:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %m23:ptr<function, mat2x3<f32>, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %8:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
-    %x_46:f32 = load %8
-    %10:vec3<f32> = construct %x_46, 0.0f, 0.0f
-    %11:vec3<f32> = construct 0.0f, %x_46, 0.0f
-    %12:mat2x3<f32> = construct %10, %11
-    store %m23, %12
+    %9:f32 = load %8
+    %x_46:f32 = let %9
+    %11:vec3<f32> = construct %x_46, 0.0f, 0.0f
+    %12:vec3<f32> = let %11
+    %13:vec3<f32> = construct 0.0f, %x_46, 0.0f
+    %14:mat2x3<f32> = construct %12, %13
+    store %m23, %14
     store %i, 1i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %x_80:ptr<function, bool, read_write> = var
         %x_81:ptr<function, bool, read_write> = var
-        %15:i32 = load %i
-        %16:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
-        %17:i32 = load %16
-        %18:bool = lt %15, %17
-        if %18 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %17:i32 = load %i
+        %18:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
+        %19:i32 = load %18
+        %20:bool = lt %17, %19
+        if %20 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %19:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %x_60:i32 = load %19
-        %21:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-        %x_62:i32 = load %21
-        %23:ptr<function, vec3<f32>, read_write> = access %m23, %x_60
-        %24:ptr<function, vec3<f32>, read_write> = access %m23, %x_60
-        %25:f32 = load_vector_element %24, %x_62
-        %26:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-        %27:f32 = load %26
-        %28:f32 = add %25, %27
-        store_vector_element %23, %x_62, %28
-        %29:f32 = load_vector_element %gl_FragCoord, 1u
+        %21:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %22:i32 = load %21
+        %x_60:i32 = let %22
+        %24:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+        %25:i32 = load %24
+        %x_62:i32 = let %25
+        %27:ptr<function, vec3<f32>, read_write> = access %m23, %x_60
+        %28:ptr<function, vec3<f32>, read_write> = access %m23, %x_60
+        %29:f32 = load_vector_element %28, %x_62
         %30:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
         %31:f32 = load %30
-        %32:bool = lt %29, %31
-        if %32 [t: %b7] {  # if_2
-          %b7 = block {  # true
+        %32:f32 = add %29, %31
+        store_vector_element %27, %x_62, %32
+        %33:f32 = load_vector_element %gl_FragCoord, 1u
+        %34:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
+        %35:f32 = load %34
+        %36:bool = lt %33, %35
+        if %36 [t: $B7] {  # if_2
+          $B7: {  # true
             exit_if  # if_2
           }
         }
         store %x_81, true
-        if true [t: %b8] {  # if_3
-          %b8 = block {  # true
-            %33:f32 = load_vector_element %gl_FragCoord, 0u
-            %34:bool = lt %33, 0.0f
-            store %x_80, %34
-            %35:bool = load %x_80
-            store %x_81, %35
+        if true [t: $B8] {  # if_3
+          $B8: {  # true
+            %37:f32 = load_vector_element %gl_FragCoord, 0u
+            %38:bool = lt %37, 0.0f
+            store %x_80, %38
+            %39:bool = load %x_80
+            store %x_81, %39
             exit_if  # if_3
           }
         }
-        %36:bool = load %x_81
-        %37:bool = eq %36, false
-        if %37 [t: %b9] {  # if_4
-          %b9 = block {  # true
+        %40:bool = load %x_81
+        %41:bool = eq %40, false
+        if %41 [t: $B9] {  # if_4
+          $B9: {  # true
             exit_loop  # loop_1
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %38:i32 = load %i
-        %39:i32 = add %38, 1i
-        store %i, %39
-        next_iteration %b3
+      $B4: {  # continuing
+        %42:i32 = load %i
+        %43:i32 = add %42, 1i
+        store %i, %43
+        next_iteration  # -> $B3
       }
     }
-    %40:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-    %41:i32 = load %40
-    %42:f32 = convert %41
-    %43:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-    %44:i32 = load %43
-    %45:f32 = convert %44
-    %46:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-    %47:i32 = load %46
-    %48:f32 = convert %47
-    %49:vec3<f32> = construct %42, %45, %48
-    %50:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-    %51:i32 = load %50
-    %52:f32 = convert %51
-    %53:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-    %54:i32 = load %53
-    %55:f32 = convert %54
-    %56:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-    %57:i32 = load %56
-    %58:f32 = convert %57
-    %59:vec3<f32> = construct %52, %55, %58
-    %x_108:mat2x3<f32> = construct %49, %59
-    %61:ptr<function, vec3<f32>, read_write> = access %m23, 0u
-    %62:vec3<f32> = load %61
-    %63:vec3<f32> = access %x_108, 0u
-    %64:vec3<bool> = eq %62, %63
-    %65:bool = all %64
-    %66:ptr<function, vec3<f32>, read_write> = access %m23, 1u
-    %67:vec3<f32> = load %66
-    %68:vec3<f32> = access %x_108, 1u
-    %69:vec3<bool> = eq %67, %68
-    %70:bool = all %69
-    %71:bool = and %65, %70
-    if %71 [t: %b10, f: %b11] {  # if_5
-      %b10 = block {  # true
-        %72:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %73:i32 = load %72
-        %74:f32 = convert %73
-        %75:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %76:i32 = load %75
-        %77:f32 = convert %76
-        %78:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %79:i32 = load %78
-        %80:f32 = convert %79
-        %81:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %82:i32 = load %81
-        %83:f32 = convert %82
-        %84:vec4<f32> = construct %74, %77, %80, %83
-        store %x_GLF_color, %84
+    %44:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+    %45:i32 = load %44
+    %46:f32 = convert %45
+    %47:f32 = let %46
+    %48:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+    %49:i32 = load %48
+    %50:f32 = convert %49
+    %51:f32 = let %50
+    %52:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+    %53:i32 = load %52
+    %54:f32 = convert %53
+    %55:vec3<f32> = construct %47, %51, %54
+    %56:vec3<f32> = let %55
+    %57:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+    %58:i32 = load %57
+    %59:f32 = convert %58
+    %60:f32 = let %59
+    %61:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+    %62:i32 = load %61
+    %63:f32 = convert %62
+    %64:f32 = let %63
+    %65:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+    %66:i32 = load %65
+    %67:f32 = convert %66
+    %68:vec3<f32> = construct %60, %64, %67
+    %69:mat2x3<f32> = construct %56, %68
+    %x_108:mat2x3<f32> = let %69
+    %71:ptr<function, vec3<f32>, read_write> = access %m23, 0u
+    %72:vec3<f32> = load %71
+    %73:vec3<f32> = access %x_108, 0u
+    %74:vec3<bool> = eq %72, %73
+    %75:bool = all %74
+    %76:bool = let %75
+    %77:ptr<function, vec3<f32>, read_write> = access %m23, 1u
+    %78:vec3<f32> = load %77
+    %79:vec3<f32> = access %x_108, 1u
+    %80:vec3<bool> = eq %78, %79
+    %81:bool = all %80
+    %82:bool = and %76, %81
+    if %82 [t: $B10, f: $B11] {  # if_5
+      $B10: {  # true
+        %83:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 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:f32 = let %89
+        %91:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %92:i32 = load %91
+        %93:f32 = convert %92
+        %94:f32 = let %93
+        %95:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %96:i32 = load %95
+        %97:f32 = convert %96
+        %98:vec4<f32> = construct %86, %90, %94, %97
+        store %x_GLF_color, %98
         exit_if  # if_5
       }
-      %b11 = block {  # false
-        %85:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %86:i32 = load %85
-        %87:f32 = convert %86
-        %88:vec4<f32> = construct %87
-        store %x_GLF_color, %88
+      $B11: {  # false
+        %99:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %100:i32 = load %99
+        %101:f32 = convert %100
+        %102:vec4<f32> = construct %101
+        store %x_GLF_color, %102
         exit_if  # if_5
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b12 {
-  %b12 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B12: {
     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
+    %105:void = call %main_1
+    %106:vec4<f32> = load %x_GLF_color
+    %107:main_out = construct %106
+    ret %107
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-increment-matrix-element-break-after-first-iteration/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-increment-matrix-element-break-after-first-iteration/0-opt.wgsl.expected.ir.msl
index 24f41cd..0fe23b6 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-increment-matrix-element-break-after-first-iteration/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-increment-matrix-element-break-after-first-iteration/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,155 +20,191 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_7:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_10:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %m23:ptr<function, mat2x3<f32>, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %8:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
-    %x_46:f32 = load %8
-    %10:vec3<f32> = construct %x_46, 0.0f, 0.0f
-    %11:vec3<f32> = construct 0.0f, %x_46, 0.0f
-    %12:mat2x3<f32> = construct %10, %11
-    store %m23, %12
+    %9:f32 = load %8
+    %x_46:f32 = let %9
+    %11:vec3<f32> = construct %x_46, 0.0f, 0.0f
+    %12:vec3<f32> = let %11
+    %13:vec3<f32> = construct 0.0f, %x_46, 0.0f
+    %14:mat2x3<f32> = construct %12, %13
+    store %m23, %14
     store %i, 1i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %x_80:ptr<function, bool, read_write> = var
         %x_81_phi:ptr<function, bool, read_write> = var
-        %x_54:i32 = load %i
-        %16:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
-        %x_56:i32 = load %16
-        %18:bool = lt %x_54, %x_56
-        if %18 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %17:i32 = load %i
+        %x_54:i32 = let %17
+        %19:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
+        %20:i32 = load %19
+        %x_56:i32 = let %20
+        %22:bool = lt %x_54, %x_56
+        if %22 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %19:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %x_60:i32 = load %19
-        %21:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-        %x_62:i32 = load %21
-        %23:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-        %x_64:f32 = load %23
-        %25:ptr<function, vec3<f32>, read_write> = access %m23, %x_60
-        %x_66:f32 = load_vector_element %25, %x_62
-        %27:ptr<function, vec3<f32>, read_write> = access %m23, %x_60
-        %28:f32 = add %x_66, %x_64
-        store_vector_element %27, %x_62, %28
-        %x_70:f32 = load_vector_element %gl_FragCoord, 1u
-        %30:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-        %x_72:f32 = load %30
-        %32:bool = lt %x_70, %x_72
-        if %32 [t: %b7] {  # if_2
-          %b7 = block {  # true
+        %23:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %24:i32 = load %23
+        %x_60:i32 = let %24
+        %26:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+        %27:i32 = load %26
+        %x_62:i32 = let %27
+        %29:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
+        %30:f32 = load %29
+        %x_64:f32 = let %30
+        %32:ptr<function, vec3<f32>, read_write> = access %m23, %x_60
+        %33:f32 = load_vector_element %32, %x_62
+        %x_66:f32 = let %33
+        %35:ptr<function, vec3<f32>, read_write> = access %m23, %x_60
+        %36:f32 = add %x_66, %x_64
+        store_vector_element %35, %x_62, %36
+        %37:f32 = load_vector_element %gl_FragCoord, 1u
+        %x_70:f32 = let %37
+        %39:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
+        %40:f32 = load %39
+        %x_72:f32 = let %40
+        %42:bool = lt %x_70, %x_72
+        if %42 [t: $B7] {  # if_2
+          $B7: {  # true
             exit_if  # if_2
           }
         }
         store %x_81_phi, true
-        if true [t: %b8] {  # if_3
-          %b8 = block {  # true
-            %x_79:f32 = load_vector_element %gl_FragCoord, 0u
-            %34:bool = lt %x_79, 0.0f
-            store %x_80, %34
-            %35:bool = load %x_80
-            store %x_81_phi, %35
+        if true [t: $B8] {  # if_3
+          $B8: {  # true
+            %43:f32 = load_vector_element %gl_FragCoord, 0u
+            %x_79:f32 = let %43
+            %45:bool = lt %x_79, 0.0f
+            store %x_80, %45
+            %46:bool = load %x_80
+            store %x_81_phi, %46
             exit_if  # if_3
           }
         }
-        %x_81:bool = load %x_81_phi
-        %37:bool = eq %x_81, false
-        if %37 [t: %b9] {  # if_4
-          %b9 = block {  # true
+        %47:bool = load %x_81_phi
+        %x_81:bool = let %47
+        %49:bool = eq %x_81, false
+        if %49 [t: $B9] {  # if_4
+          $B9: {  # true
             exit_loop  # loop_1
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_85:i32 = load %i
-        %39:i32 = add %x_85, 1i
-        store %i, %39
-        next_iteration %b3
+      $B4: {  # continuing
+        %50:i32 = load %i
+        %x_85:i32 = let %50
+        %52:i32 = add %x_85, 1i
+        store %i, %52
+        next_iteration  # -> $B3
       }
     }
-    %x_87:mat2x3<f32> = load %m23
-    %41:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-    %x_89:i32 = load %41
-    %43:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-    %x_92:i32 = load %43
-    %45:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-    %x_95:i32 = load %45
-    %47:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-    %x_98:i32 = load %47
-    %49:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-    %x_101:i32 = load %49
-    %51:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-    %x_104:i32 = load %51
-    %53:f32 = convert %x_89
-    %54:f32 = convert %x_92
-    %55:f32 = convert %x_95
-    %56:vec3<f32> = construct %53, %54, %55
-    %57:f32 = convert %x_98
-    %58:f32 = convert %x_101
-    %59:f32 = convert %x_104
-    %60:vec3<f32> = construct %57, %58, %59
-    %x_108:mat2x3<f32> = construct %56, %60
-    %62:vec3<f32> = access %x_87, 0u
-    %63:vec3<f32> = access %x_108, 0u
-    %64:vec3<bool> = eq %62, %63
-    %65:bool = all %64
-    %66:vec3<f32> = access %x_87, 1u
-    %67:vec3<f32> = access %x_108, 1u
-    %68:vec3<bool> = eq %66, %67
-    %69:bool = all %68
-    %70:bool = and %65, %69
-    if %70 [t: %b10, f: %b11] {  # if_5
-      %b10 = block {  # true
-        %71:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %x_122:i32 = load %71
-        %73:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %x_125:i32 = load %73
-        %75:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %x_128:i32 = load %75
-        %77:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %x_131:i32 = load %77
-        %79:f32 = convert %x_122
-        %80:f32 = convert %x_125
-        %81:f32 = convert %x_128
-        %82:f32 = convert %x_131
-        %83:vec4<f32> = construct %79, %80, %81, %82
-        store %x_GLF_color, %83
+    %53:mat2x3<f32> = load %m23
+    %x_87:mat2x3<f32> = let %53
+    %55:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+    %56:i32 = load %55
+    %x_89:i32 = let %56
+    %58:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+    %59:i32 = load %58
+    %x_92:i32 = let %59
+    %61:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+    %62:i32 = load %61
+    %x_95:i32 = let %62
+    %64:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+    %65:i32 = load %64
+    %x_98:i32 = let %65
+    %67:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+    %68:i32 = load %67
+    %x_101:i32 = let %68
+    %70:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+    %71:i32 = load %70
+    %x_104:i32 = let %71
+    %73:f32 = convert %x_89
+    %74:f32 = let %73
+    %75:f32 = convert %x_92
+    %76:f32 = let %75
+    %77:f32 = convert %x_95
+    %78:vec3<f32> = construct %74, %76, %77
+    %79:vec3<f32> = let %78
+    %80:f32 = convert %x_98
+    %81:f32 = let %80
+    %82:f32 = convert %x_101
+    %83:f32 = let %82
+    %84:f32 = convert %x_104
+    %85:vec3<f32> = construct %81, %83, %84
+    %86:mat2x3<f32> = construct %79, %85
+    %x_108:mat2x3<f32> = let %86
+    %88:vec3<f32> = access %x_87, 0u
+    %89:vec3<f32> = access %x_108, 0u
+    %90:vec3<bool> = eq %88, %89
+    %91:bool = all %90
+    %92:bool = let %91
+    %93:vec3<f32> = access %x_87, 1u
+    %94:vec3<f32> = access %x_108, 1u
+    %95:vec3<bool> = eq %93, %94
+    %96:bool = all %95
+    %97:bool = and %92, %96
+    if %97 [t: $B10, f: $B11] {  # if_5
+      $B10: {  # true
+        %98:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %99:i32 = load %98
+        %x_122:i32 = let %99
+        %101:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %102:i32 = load %101
+        %x_125:i32 = let %102
+        %104:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %105:i32 = load %104
+        %x_128:i32 = let %105
+        %107:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %108:i32 = load %107
+        %x_131:i32 = let %108
+        %110:f32 = convert %x_122
+        %111:f32 = let %110
+        %112:f32 = convert %x_125
+        %113:f32 = let %112
+        %114:f32 = convert %x_128
+        %115:f32 = let %114
+        %116:f32 = convert %x_131
+        %117:vec4<f32> = construct %111, %113, %115, %116
+        store %x_GLF_color, %117
         exit_if  # if_5
       }
-      %b11 = block {  # false
-        %84:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %x_135:i32 = load %84
-        %x_136:f32 = convert %x_135
-        %87:vec4<f32> = construct %x_136, %x_136, %x_136, %x_136
-        store %x_GLF_color, %87
+      $B11: {  # false
+        %118:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %119:i32 = load %118
+        %x_135:i32 = let %119
+        %121:f32 = convert %x_135
+        %x_136:f32 = let %121
+        %123:vec4<f32> = construct %x_136, %x_136, %x_136, %x_136
+        store %x_GLF_color, %123
         exit_if  # if_5
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b12 {
-  %b12 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B12: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %90:void = call %main_1
-    %91:vec4<f32> = load %x_GLF_color
-    %92:main_out = construct %91
-    ret %92
+    %126:void = call %main_1
+    %127:vec4<f32> = load %x_GLF_color
+    %128:main_out = construct %127
+    ret %128
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-increment-or-divide-by-loop-index/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-increment-or-divide-by-loop-index/0-opt.spvasm.expected.ir.msl
index e3a6cc4..d9f5c79 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-increment-or-divide-by-loop-index/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-increment-or-divide-by-loop-index/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,28 +12,28 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %6:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
     %7:i32 = load %6
     store %a, %7
     store %i, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %8:i32 = load %i
         %9:bool = lt %8, 3i
-        if %9 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %9 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
@@ -41,70 +41,85 @@
         %11:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
         %12:i32 = load %11
         %13:bool = eq %10, %12
-        if %13 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
+        if %13 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
             %14:i32 = load %a
             %15:i32 = add %14, 1i
             store %a, %15
             exit_if  # if_2
           }
-          %b8 = block {  # false
+          $B8: {  # false
             %16:i32 = load %a
             %17:i32 = load %i
-            %18:i32 = div %16, %17
+            %18:i32 = call %tint_div_i32, %16, %17
             store %a, %18
             exit_if  # if_2
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %19:i32 = load %i
-        %20:i32 = add %19, 1i
-        store %i, %20
-        next_iteration %b3
+      $B4: {  # continuing
+        %20:i32 = load %i
+        %21:i32 = add %20, 1i
+        store %i, %21
+        next_iteration  # -> $B3
       }
     }
-    %21:i32 = load %a
-    %22:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %23:i32 = load %22
-    %24:bool = eq %21, %23
-    if %24 [t: %b9, f: %b10] {  # if_3
-      %b9 = block {  # true
-        %25:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %26:i32 = load %25
-        %27:f32 = convert %26
-        %28:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %29:i32 = load %28
-        %30:f32 = convert %29
-        %31:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %32:i32 = load %31
-        %33:f32 = convert %32
-        %34:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %22:i32 = load %a
+    %23:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %24:i32 = load %23
+    %25:bool = eq %22, %24
+    if %25 [t: $B9, f: $B10] {  # if_3
+      $B9: {  # true
+        %26:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %27:i32 = load %26
+        %28:f32 = convert %27
+        %29:f32 = let %28
+        %30:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %31:i32 = load %30
+        %32:f32 = convert %31
+        %33:f32 = let %32
+        %34:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
         %35:i32 = load %34
         %36:f32 = convert %35
-        %37:vec4<f32> = construct %27, %30, %33, %36
-        store %x_GLF_color, %37
-        exit_if  # if_3
-      }
-      %b10 = block {  # false
-        %38:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %37:f32 = let %36
+        %38:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
         %39:i32 = load %38
         %40:f32 = convert %39
-        %41:vec4<f32> = construct %40
+        %41:vec4<f32> = construct %29, %33, %37, %40
         store %x_GLF_color, %41
         exit_if  # if_3
       }
+      $B10: {  # false
+        %42:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %43:i32 = load %42
+        %44:f32 = convert %43
+        %45:vec4<f32> = construct %44
+        store %x_GLF_color, %45
+        exit_if  # if_3
+      }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b11 {
-  %b11 = block {
-    %43:void = call %main_1
-    %44:vec4<f32> = load %x_GLF_color
-    %45:main_out = construct %44
-    ret %45
+%tint_symbol = @fragment func():main_out {
+  $B11: {
+    %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 {
+  $B12: {
+    %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
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-increment-or-divide-by-loop-index/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-increment-or-divide-by-loop-index/0-opt.wgsl.expected.ir.msl
index b1bb82f..5929d73 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-increment-or-divide-by-loop-index/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-increment-or-divide-by-loop-index/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,99 +12,130 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %6:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-    %x_27:i32 = load %6
+    %7:i32 = load %6
+    %x_27:i32 = let %7
     store %a, %x_27
     store %i, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_32:i32 = load %i
-        %9:bool = lt %x_32, 3i
-        if %9 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %9:i32 = load %i
+        %x_32:i32 = let %9
+        %11:bool = lt %x_32, 3i
+        if %11 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_35:i32 = load %i
-        %11:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_37:i32 = load %11
-        %13:bool = eq %x_35, %x_37
-        if %13 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
-            %x_42:i32 = load %a
-            %15:i32 = add %x_42, 1i
-            store %a, %15
+        %12:i32 = load %i
+        %x_35:i32 = let %12
+        %14:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %15:i32 = load %14
+        %x_37:i32 = let %15
+        %17:bool = eq %x_35, %x_37
+        if %17 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
+            %18:i32 = load %a
+            %x_42:i32 = let %18
+            %20:i32 = add %x_42, 1i
+            store %a, %20
             exit_if  # if_2
           }
-          %b8 = block {  # false
-            %x_44:i32 = load %a
-            %x_45:i32 = load %i
-            %18:i32 = div %x_44, %x_45
-            store %a, %18
+          $B8: {  # false
+            %21:i32 = load %a
+            %x_44:i32 = let %21
+            %23:i32 = load %i
+            %x_45:i32 = let %23
+            %25:i32 = call %tint_div_i32, %x_44, %x_45
+            store %a, %25
             exit_if  # if_2
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_47:i32 = load %i
-        %20:i32 = add %x_47, 1i
-        store %i, %20
-        next_iteration %b3
+      $B4: {  # continuing
+        %27:i32 = load %i
+        %x_47:i32 = let %27
+        %29:i32 = add %x_47, 1i
+        store %i, %29
+        next_iteration  # -> $B3
       }
     }
-    %x_49:i32 = load %a
-    %22:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_51:i32 = load %22
-    %24:bool = eq %x_49, %x_51
-    if %24 [t: %b9, f: %b10] {  # if_3
-      %b9 = block {  # true
-        %25:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_57:i32 = load %25
-        %27:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_60:i32 = load %27
-        %29:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_63:i32 = load %29
-        %31:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_66:i32 = load %31
-        %33:f32 = convert %x_57
-        %34:f32 = convert %x_60
-        %35:f32 = convert %x_63
-        %36:f32 = convert %x_66
-        %37:vec4<f32> = construct %33, %34, %35, %36
-        store %x_GLF_color, %37
+    %30:i32 = load %a
+    %x_49:i32 = let %30
+    %32:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %33:i32 = load %32
+    %x_51:i32 = let %33
+    %35:bool = eq %x_49, %x_51
+    if %35 [t: $B9, f: $B10] {  # if_3
+      $B9: {  # true
+        %36:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %37:i32 = load %36
+        %x_57:i32 = let %37
+        %39:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %40:i32 = load %39
+        %x_60:i32 = let %40
+        %42:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %43:i32 = load %42
+        %x_63:i32 = let %43
+        %45:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %46:i32 = load %45
+        %x_66:i32 = let %46
+        %48:f32 = convert %x_57
+        %49:f32 = let %48
+        %50:f32 = convert %x_60
+        %51:f32 = let %50
+        %52:f32 = convert %x_63
+        %53:f32 = let %52
+        %54:f32 = convert %x_66
+        %55:vec4<f32> = construct %49, %51, %53, %54
+        store %x_GLF_color, %55
         exit_if  # if_3
       }
-      %b10 = block {  # false
-        %38:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_70:i32 = load %38
-        %x_71:f32 = convert %x_70
-        %41:vec4<f32> = construct %x_71, %x_71, %x_71, %x_71
-        store %x_GLF_color, %41
+      $B10: {  # false
+        %56:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %57:i32 = load %56
+        %x_70:i32 = let %57
+        %59:f32 = convert %x_70
+        %x_71:f32 = let %59
+        %61:vec4<f32> = construct %x_71, %x_71, %x_71, %x_71
+        store %x_GLF_color, %61
         exit_if  # if_3
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b11 {
-  %b11 = block {
-    %43:void = call %main_1
-    %44:vec4<f32> = load %x_GLF_color
-    %45:main_out = construct %44
-    ret %45
+%tint_symbol = @fragment func():main_out {
+  $B11: {
+    %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 {
+  $B12: {
+    %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
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-integer-half-minus-one/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-integer-half-minus-one/0-opt.spvasm.expected.ir.msl
index 89d61f5..8f307da 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-integer-half-minus-one/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-integer-half-minus-one/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,80 +12,95 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %5:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
     %6:i32 = load %5
     store %a, %6
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %7:i32 = load %a
         %8:bool = gte %7, 0i
-        if %8 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %8 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
         %9:i32 = load %a
-        %10:i32 = div %9, 2i
-        %11:i32 = sub %10, 1i
-        store %a, %11
-        continue %b4
+        %10:i32 = call %tint_div_i32, %9, 2i
+        %12:i32 = sub %10, 1i
+        store %a, %12
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
-    %12:i32 = load %a
-    %13:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %14:i32 = load %13
-    %15:i32 = negation %14
-    %16:bool = eq %12, %15
-    if %16 [t: %b7, f: %b8] {  # if_2
-      %b7 = block {  # true
-        %17:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %18:i32 = load %17
-        %19:f32 = convert %18
-        %20:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %21:i32 = load %20
-        %22:f32 = convert %21
-        %23:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %24:i32 = load %23
-        %25:f32 = convert %24
-        %26:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %13:i32 = load %a
+    %14:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %15:i32 = load %14
+    %16:i32 = negation %15
+    %17:bool = eq %13, %16
+    if %17 [t: $B7, f: $B8] {  # if_2
+      $B7: {  # true
+        %18:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %19:i32 = load %18
+        %20:f32 = convert %19
+        %21:f32 = let %20
+        %22:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %23:i32 = load %22
+        %24:f32 = convert %23
+        %25:f32 = let %24
+        %26:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
         %27:i32 = load %26
         %28:f32 = convert %27
-        %29:vec4<f32> = construct %19, %22, %25, %28
-        store %x_GLF_color, %29
-        exit_if  # if_2
-      }
-      %b8 = block {  # false
-        %30:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %29:f32 = let %28
+        %30:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
         %31:i32 = load %30
         %32:f32 = convert %31
-        %33:vec4<f32> = construct %32
+        %33:vec4<f32> = construct %21, %25, %29, %32
         store %x_GLF_color, %33
         exit_if  # if_2
       }
+      $B8: {  # false
+        %34:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %35:i32 = load %34
+        %36:f32 = convert %35
+        %37:vec4<f32> = construct %36
+        store %x_GLF_color, %37
+        exit_if  # if_2
+      }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b9 {
-  %b9 = block {
-    %35:void = call %main_1
-    %36:vec4<f32> = load %x_GLF_color
-    %37:main_out = construct %36
-    ret %37
+%tint_symbol = @fragment func():main_out {
+  $B9: {
+    %39:void = call %main_1
+    %40:vec4<f32> = load %x_GLF_color
+    %41:main_out = construct %40
+    ret %41
+  }
+}
+%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B10: {
+    %44:bool = eq %rhs, 0i
+    %45:bool = eq %lhs, -2147483648i
+    %46:bool = eq %rhs, -1i
+    %47:bool = and %45, %46
+    %48:bool = or %44, %47
+    %49:i32 = select %rhs, 1i, %48
+    %50:i32 = div %lhs, %49
+    ret %50
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-integer-half-minus-one/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-integer-half-minus-one/0-opt.wgsl.expected.ir.msl
index d96075d..46aed3f 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-integer-half-minus-one/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-integer-half-minus-one/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,80 +12,106 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %5:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_25:i32 = load %5
+    %6:i32 = load %5
+    %x_25:i32 = let %6
     store %a, %x_25
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_30:i32 = load %a
-        %8:bool = gte %x_30, 0i
-        if %8 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %8:i32 = load %a
+        %x_30:i32 = let %8
+        %10:bool = gte %x_30, 0i
+        if %10 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_33:i32 = load %a
-        %10:i32 = div %x_33, 2i
-        %11:i32 = sub %10, 1i
-        store %a, %11
-        continue %b4
+        %11:i32 = load %a
+        %x_33:i32 = let %11
+        %13:i32 = call %tint_div_i32, %x_33, 2i
+        %15:i32 = sub %13, 1i
+        store %a, %15
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
-    %x_36:i32 = load %a
-    %13:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_38:i32 = load %13
-    %15:i32 = negation %x_38
-    %16:bool = eq %x_36, %15
-    if %16 [t: %b7, f: %b8] {  # if_2
-      %b7 = block {  # true
-        %17:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_45:i32 = load %17
-        %19:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_48:i32 = load %19
-        %21:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_51:i32 = load %21
+    %16:i32 = load %a
+    %x_36:i32 = let %16
+    %18:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %19:i32 = load %18
+    %x_38:i32 = let %19
+    %21:i32 = negation %x_38
+    %22:bool = eq %x_36, %21
+    if %22 [t: $B7, f: $B8] {  # if_2
+      $B7: {  # true
         %23:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_54:i32 = load %23
-        %25:f32 = convert %x_45
-        %26:f32 = convert %x_48
-        %27:f32 = convert %x_51
-        %28:f32 = convert %x_54
-        %29:vec4<f32> = construct %25, %26, %27, %28
-        store %x_GLF_color, %29
+        %24:i32 = load %23
+        %x_45:i32 = let %24
+        %26:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %27:i32 = load %26
+        %x_48:i32 = let %27
+        %29:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %30:i32 = load %29
+        %x_51:i32 = let %30
+        %32:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %33:i32 = load %32
+        %x_54:i32 = let %33
+        %35:f32 = convert %x_45
+        %36:f32 = let %35
+        %37:f32 = convert %x_48
+        %38:f32 = let %37
+        %39:f32 = convert %x_51
+        %40:f32 = let %39
+        %41:f32 = convert %x_54
+        %42:vec4<f32> = construct %36, %38, %40, %41
+        store %x_GLF_color, %42
         exit_if  # if_2
       }
-      %b8 = block {  # false
-        %30:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_58:i32 = load %30
-        %x_59:f32 = convert %x_58
-        %33:vec4<f32> = construct %x_59, %x_59, %x_59, %x_59
-        store %x_GLF_color, %33
+      $B8: {  # false
+        %43:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %44:i32 = load %43
+        %x_58:i32 = let %44
+        %46:f32 = convert %x_58
+        %x_59:f32 = let %46
+        %48:vec4<f32> = construct %x_59, %x_59, %x_59, %x_59
+        store %x_GLF_color, %48
         exit_if  # if_2
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b9 {
-  %b9 = block {
-    %35:void = call %main_1
-    %36:vec4<f32> = load %x_GLF_color
-    %37:main_out = construct %36
-    ret %37
+%tint_symbol = @fragment func():main_out {
+  $B9: {
+    %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 {
+  $B10: {
+    %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
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-logical-xor/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-logical-xor/0-opt.spvasm.expected.ir.msl
index 55e055b..02a452f 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-logical-xor/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-logical-xor/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,13 +12,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %5:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
     %6:i32 = load %5
@@ -28,50 +28,50 @@
     %9:f32 = convert %8
     %10:vec4<f32> = construct %9
     store %x_GLF_color, %10
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3] {  # loop_1
+      $B3: {  # body
         %11:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
         %12:i32 = load %11
         %13:i32 = load %a
         %14:bool = eq %12, %13
         %15:bool = neq %14, true
-        if %15 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %15 [t: $B4, f: $B5] {  # if_1
+          $B4: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B5: {  # false
             exit_loop  # loop_1
           }
         }
         %16:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
         %17:i32 = load %16
         %18:f32 = convert %17
-        %19:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %20:i32 = load %19
-        %21:f32 = convert %20
-        %22:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %23:i32 = load %22
-        %24:f32 = convert %23
-        %25:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %26:i32 = load %25
-        %27:f32 = convert %26
-        %28:vec4<f32> = construct %18, %21, %24, %27
-        store %x_GLF_color, %28
+        %19:f32 = let %18
+        %20:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %21:i32 = load %20
+        %22:f32 = convert %21
+        %23:f32 = let %22
+        %24:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %25:i32 = load %24
+        %26:f32 = convert %25
+        %27:f32 = let %26
+        %28:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %29:i32 = load %28
+        %30:f32 = convert %29
+        %31:vec4<f32> = construct %19, %23, %27, %30
+        store %x_GLF_color, %31
         exit_loop  # loop_1
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
-      }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b7 {
-  %b7 = block {
-    %30:void = call %main_1
-    %31:vec4<f32> = load %x_GLF_color
-    %32:main_out = construct %31
-    ret %32
+%tint_symbol = @fragment func():main_out {
+  $B6: {
+    %33:void = call %main_1
+    %34:vec4<f32> = load %x_GLF_color
+    %35:main_out = construct %34
+    ret %35
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-logical-xor/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-logical-xor/0-opt.wgsl.expected.ir.msl
index 8409154..e0f4b9b 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-logical-xor/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-logical-xor/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,66 +12,75 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %5:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_26:i32 = load %5
+    %6:i32 = load %5
+    %x_26:i32 = let %6
     store %a, %x_26
-    %7:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_28:i32 = load %7
-    %x_29:f32 = convert %x_28
-    %10:vec4<f32> = construct %x_29, %x_29, %x_29, %x_29
-    store %x_GLF_color, %10
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %11:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %x_36:i32 = load %11
-        %x_37:i32 = load %a
-        %14:bool = eq %x_36, %x_37
-        %15:bool = neq %14, true
-        if %15 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    %8:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %9:i32 = load %8
+    %x_28:i32 = let %9
+    %11:f32 = convert %x_28
+    %x_29:f32 = let %11
+    %13:vec4<f32> = construct %x_29, %x_29, %x_29, %x_29
+    store %x_GLF_color, %13
+    loop [b: $B3] {  # loop_1
+      $B3: {  # body
+        %14:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %15:i32 = load %14
+        %x_36:i32 = let %15
+        %17:i32 = load %a
+        %x_37:i32 = let %17
+        %19:bool = eq %x_36, %x_37
+        %20:bool = neq %19, true
+        if %20 [t: $B4, f: $B5] {  # if_1
+          $B4: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B5: {  # false
             exit_loop  # loop_1
           }
         }
-        %16:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_42:i32 = load %16
-        %18:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_45:i32 = load %18
-        %20:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_48:i32 = load %20
-        %22:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_51:i32 = load %22
-        %24:f32 = convert %x_42
-        %25:f32 = convert %x_45
-        %26:f32 = convert %x_48
-        %27:f32 = convert %x_51
-        %28:vec4<f32> = construct %24, %25, %26, %27
-        store %x_GLF_color, %28
+        %21:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %22:i32 = load %21
+        %x_42:i32 = let %22
+        %24:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %25:i32 = load %24
+        %x_45:i32 = let %25
+        %27:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %28:i32 = load %27
+        %x_48:i32 = let %28
+        %30:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %31:i32 = load %30
+        %x_51:i32 = let %31
+        %33:f32 = convert %x_42
+        %34:f32 = let %33
+        %35:f32 = convert %x_45
+        %36:f32 = let %35
+        %37:f32 = convert %x_48
+        %38:f32 = let %37
+        %39:f32 = convert %x_51
+        %40:vec4<f32> = construct %34, %36, %38, %39
+        store %x_GLF_color, %40
         exit_loop  # loop_1
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
-      }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b7 {
-  %b7 = block {
-    %30:void = call %main_1
-    %31:vec4<f32> = load %x_GLF_color
-    %32:main_out = construct %31
-    ret %32
+%tint_symbol = @fragment func():main_out {
+  $B6: {
+    %42:void = call %main_1
+    %43:vec4<f32> = load %x_GLF_color
+    %44:main_out = construct %43
+    ret %44
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-with-two-integers/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-with-two-integers/0-opt.spvasm.expected.ir.msl
index 5301797..e92aa18 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-with-two-integers/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-with-two-integers/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,14 +20,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_9:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %arr:ptr<function, array<f32, 5>, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %j:ptr<function, i32, read_write> = var
@@ -47,105 +47,106 @@
     %20:i32 = load %19
     store %i, %20
     store %j, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %21:i32 = load %i
         %22:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
         %23:i32 = load %22
         %24:bool = lt %21, %23
-        if %24 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %24 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
         %25:i32 = load %j
         %26:bool = lt %25, -1i
-        if %26 [t: %b7] {  # if_2
-          %b7 = block {  # true
+        if %26 [t: $B7] {  # if_2
+          $B7: {  # true
             exit_loop  # loop_1
           }
         }
-        %x_63:i32 = load %j
-        %28:ptr<function, f32, read_write> = access %arr, %x_63
-        %29:i32 = load %j
-        %30:ptr<function, f32, read_write> = access %arr, %29
-        %31:f32 = load %30
-        %32:f32 = add %31, 1.0f
-        store %28, %32
-        continue %b4
+        %27:i32 = load %j
+        %x_63:i32 = let %27
+        %29:ptr<function, f32, read_write> = access %arr, %x_63
+        %30:i32 = load %j
+        %31:ptr<function, f32, read_write> = access %arr, %30
+        %32:f32 = load %31
+        %33:f32 = add %32, 1.0f
+        store %29, %33
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %33:i32 = load %i
-        %34:i32 = add %33, 1i
-        store %i, %34
-        %35:i32 = load %j
-        %36:i32 = add %35, 1i
-        store %j, %36
-        next_iteration %b3
+      $B4: {  # continuing
+        %34:i32 = load %i
+        %35:i32 = add %34, 1i
+        store %i, %35
+        %36:i32 = load %j
+        %37:i32 = add %36, 1i
+        store %j, %37
+        next_iteration  # -> $B3
       }
     }
-    %37:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %38:f32 = load %37
-    %39:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-    %40:f32 = load %39
-    %41:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-    %42:f32 = load %41
-    %43:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %44:f32 = load %43
-    %45:vec4<f32> = construct %38, %40, %42, %44
-    store %x_GLF_color, %45
-    %46:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-    %47:i32 = load %46
-    store %i, %47
-    loop [b: %b8, c: %b9] {  # loop_2
-      %b8 = block {  # body
-        %48:i32 = load %i
-        %49:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %50:i32 = load %49
-        %51:bool = lt %48, %50
-        if %51 [t: %b10, f: %b11] {  # if_3
-          %b10 = block {  # true
+    %38:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %39:f32 = load %38
+    %40:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+    %41:f32 = load %40
+    %42:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+    %43:f32 = load %42
+    %44:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %45:f32 = load %44
+    %46:vec4<f32> = construct %39, %41, %43, %45
+    store %x_GLF_color, %46
+    %47:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+    %48:i32 = load %47
+    store %i, %48
+    loop [b: $B8, c: $B9] {  # loop_2
+      $B8: {  # body
+        %49:i32 = load %i
+        %50:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+        %51:i32 = load %50
+        %52:bool = lt %49, %51
+        if %52 [t: $B10, f: $B11] {  # if_3
+          $B10: {  # true
             exit_if  # if_3
           }
-          %b11 = block {  # false
+          $B11: {  # false
             exit_loop  # loop_2
           }
         }
-        %52:i32 = load %i
-        %53:ptr<function, f32, read_write> = access %arr, %52
-        %54:f32 = load %53
-        %55:bool = eq %54, 2.0f
-        %56:bool = eq %55, false
-        if %56 [t: %b12] {  # if_4
-          %b12 = block {  # true
-            %57:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-            %58:f32 = load %57
-            %59:vec4<f32> = construct %58
-            store %x_GLF_color, %59
+        %53:i32 = load %i
+        %54:ptr<function, f32, read_write> = access %arr, %53
+        %55:f32 = load %54
+        %56:bool = eq %55, 2.0f
+        %57:bool = eq %56, false
+        if %57 [t: $B12] {  # if_4
+          $B12: {  # true
+            %58:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+            %59:f32 = load %58
+            %60:vec4<f32> = construct %59
+            store %x_GLF_color, %60
             exit_if  # if_4
           }
         }
-        continue %b9
+        continue  # -> $B9
       }
-      %b9 = block {  # continuing
-        %60:i32 = load %i
-        %61:i32 = add %60, 1i
-        store %i, %61
-        next_iteration %b8
+      $B9: {  # continuing
+        %61:i32 = load %i
+        %62:i32 = add %61, 1i
+        store %i, %62
+        next_iteration  # -> $B8
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b13 {
-  %b13 = block {
-    %63:void = call %main_1
-    %64:vec4<f32> = load %x_GLF_color
-    %65:main_out = construct %64
-    ret %65
+%tint_symbol = @fragment func():main_out {
+  $B13: {
+    %64:void = call %main_1
+    %65:vec4<f32> = load %x_GLF_color
+    %66:main_out = construct %65
+    ret %66
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-with-two-integers/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-with-two-integers/0-opt.wgsl.expected.ir.msl
index 75d721e..7c9daba 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-with-two-integers/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-with-two-integers/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,131 +20,155 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_9:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %arr:ptr<function, array<f32, 5>, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %j:ptr<function, i32, read_write> = var
     %8:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_38:f32 = load %8
-    %10:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_40:f32 = load %10
-    %12:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_42:f32 = load %12
+    %9:f32 = load %8
+    %x_38:f32 = let %9
+    %11:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %12:f32 = load %11
+    %x_40:f32 = let %12
     %14:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_44:f32 = load %14
-    %16:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_46:f32 = load %16
-    %18:array<f32, 5> = construct %x_38, %x_40, %x_42, %x_44, %x_46
-    store %arr, %18
-    %19:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-    %x_49:i32 = load %19
+    %15:f32 = load %14
+    %x_42:f32 = let %15
+    %17:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %18:f32 = load %17
+    %x_44:f32 = let %18
+    %20:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %21:f32 = load %20
+    %x_46:f32 = let %21
+    %23:array<f32, 5> = construct %x_38, %x_40, %x_42, %x_44, %x_46
+    store %arr, %23
+    %24:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+    %25:i32 = load %24
+    %x_49:i32 = let %25
     store %i, %x_49
     store %j, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_54:i32 = load %i
-        %22:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %x_56:i32 = load %22
-        %24:bool = lt %x_54, %x_56
-        if %24 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %27:i32 = load %i
+        %x_54:i32 = let %27
+        %29:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+        %30:i32 = load %29
+        %x_56:i32 = let %30
+        %32:bool = lt %x_54, %x_56
+        if %32 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_59:i32 = load %j
-        %26:bool = lt %x_59, -1i
-        if %26 [t: %b7] {  # if_2
-          %b7 = block {  # true
+        %33:i32 = load %j
+        %x_59:i32 = let %33
+        %35:bool = lt %x_59, -1i
+        if %35 [t: $B7] {  # if_2
+          $B7: {  # true
             exit_loop  # loop_1
           }
         }
-        %x_63:i32 = load %j
-        %28:ptr<function, f32, read_write> = access %arr, %x_63
-        %x_65:f32 = load %28
-        %30:ptr<function, f32, read_write> = access %arr, %x_63
-        %31:f32 = add %x_65, 1.0f
-        store %30, %31
-        continue %b4
+        %36:i32 = load %j
+        %x_63:i32 = let %36
+        %38:ptr<function, f32, read_write> = access %arr, %x_63
+        %39:f32 = load %38
+        %x_65:f32 = let %39
+        %41:ptr<function, f32, read_write> = access %arr, %x_63
+        %42:f32 = add %x_65, 1.0f
+        store %41, %42
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_68:i32 = load %i
-        %33:i32 = add %x_68, 1i
-        store %i, %33
-        %x_70:i32 = load %j
-        %35:i32 = add %x_70, 1i
-        store %j, %35
-        next_iteration %b3
+      $B4: {  # continuing
+        %43:i32 = load %i
+        %x_68:i32 = let %43
+        %45:i32 = add %x_68, 1i
+        store %i, %45
+        %46:i32 = load %j
+        %x_70:i32 = let %46
+        %48:i32 = add %x_70, 1i
+        store %j, %48
+        next_iteration  # -> $B3
       }
     }
-    %36:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_73:f32 = load %36
-    %38:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-    %x_75:f32 = load %38
-    %40:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-    %x_77:f32 = load %40
-    %42:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_79:f32 = load %42
-    %44:vec4<f32> = construct %x_73, %x_75, %x_77, %x_79
-    store %x_GLF_color, %44
-    %45:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-    %x_82:i32 = load %45
+    %49:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %50:f32 = load %49
+    %x_73:f32 = let %50
+    %52:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+    %53:f32 = load %52
+    %x_75:f32 = let %53
+    %55:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+    %56:f32 = load %55
+    %x_77:f32 = let %56
+    %58:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %59:f32 = load %58
+    %x_79:f32 = let %59
+    %61:vec4<f32> = construct %x_73, %x_75, %x_77, %x_79
+    store %x_GLF_color, %61
+    %62:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+    %63:i32 = load %62
+    %x_82:i32 = let %63
     store %i, %x_82
-    loop [b: %b8, c: %b9] {  # loop_2
-      %b8 = block {  # body
-        %x_87:i32 = load %i
-        %48:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %x_89:i32 = load %48
-        %50:bool = lt %x_87, %x_89
-        if %50 [t: %b10, f: %b11] {  # if_3
-          %b10 = block {  # true
+    loop [b: $B8, c: $B9] {  # loop_2
+      $B8: {  # body
+        %65:i32 = load %i
+        %x_87:i32 = let %65
+        %67:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+        %68:i32 = load %67
+        %x_89:i32 = let %68
+        %70:bool = lt %x_87, %x_89
+        if %70 [t: $B10, f: $B11] {  # if_3
+          $B10: {  # true
             exit_if  # if_3
           }
-          %b11 = block {  # false
+          $B11: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_92:i32 = load %i
-        %52:ptr<function, f32, read_write> = access %arr, %x_92
-        %x_94:f32 = load %52
-        %54:bool = eq %x_94, 2.0f
-        %55:bool = eq %54, false
-        if %55 [t: %b12] {  # if_4
-          %b12 = block {  # true
-            %56:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-            %x_99:f32 = load %56
-            %58:vec4<f32> = construct %x_99, %x_99, %x_99, %x_99
-            store %x_GLF_color, %58
+        %71:i32 = load %i
+        %x_92:i32 = let %71
+        %73:ptr<function, f32, read_write> = access %arr, %x_92
+        %74:f32 = load %73
+        %x_94:f32 = let %74
+        %76:bool = eq %x_94, 2.0f
+        %77:bool = eq %76, false
+        if %77 [t: $B12] {  # if_4
+          $B12: {  # true
+            %78:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+            %79:f32 = load %78
+            %x_99:f32 = let %79
+            %81:vec4<f32> = construct %x_99, %x_99, %x_99, %x_99
+            store %x_GLF_color, %81
             exit_if  # if_4
           }
         }
-        continue %b9
+        continue  # -> $B9
       }
-      %b9 = block {  # continuing
-        %x_101:i32 = load %i
-        %60:i32 = add %x_101, 1i
-        store %i, %60
-        next_iteration %b8
+      $B9: {  # continuing
+        %82:i32 = load %i
+        %x_101:i32 = let %82
+        %84:i32 = add %x_101, 1i
+        store %i, %84
+        next_iteration  # -> $B8
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b13 {
-  %b13 = block {
-    %62:void = call %main_1
-    %63:vec4<f32> = load %x_GLF_color
-    %64:main_out = construct %63
-    ret %64
+%tint_symbol = @fragment func():main_out {
+  $B13: {
+    %86:void = call %main_1
+    %87:vec4<f32> = load %x_GLF_color
+    %88:main_out = construct %87
+    ret %88
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-machine-basic-block-for-for-for-less-than/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-machine-basic-block-for-for-for-less-than/0-opt.spvasm.expected.ir.msl
index b4e746d..61dbda8 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-machine-basic-block-for-for-for-less-than/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-machine-basic-block-for-for-for-less-than/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,15 +20,15 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_6:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_12:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %data:ptr<function, array<i32, 5>, read_write> = var
     %a:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
@@ -37,184 +37,187 @@
     %11:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
     %12:i32 = load %11
     %13:f32 = convert %12
-    %14:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
-    %15:i32 = load %14
-    %16:f32 = convert %15
-    %17:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
-    %18:i32 = load %17
-    %19:f32 = convert %18
-    %20:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %21:i32 = load %20
-    %22:f32 = convert %21
-    %23:vec4<f32> = construct %13, %16, %19, %22
-    store %x_GLF_color, %23
-    %24:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %25:i32 = load %24
-    %26:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %27:i32 = load %26
-    %28:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-    %29:i32 = load %28
-    %30:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
-    %31:i32 = load %30
-    %32:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %33:i32 = load %32
-    %34:array<i32, 5> = construct %25, %27, %29, %31, %33
-    store %data, %34
-    %35:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
+    %14:f32 = let %13
+    %15:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
+    %16:i32 = load %15
+    %17:f32 = convert %16
+    %18:f32 = let %17
+    %19:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
+    %20:i32 = load %19
+    %21:f32 = convert %20
+    %22:f32 = let %21
+    %23:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %24:i32 = load %23
+    %25:f32 = convert %24
+    %26:vec4<f32> = construct %14, %18, %22, %25
+    store %x_GLF_color, %26
+    %27:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %28:i32 = load %27
+    %29:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %30:i32 = load %29
+    %31:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+    %32:i32 = load %31
+    %33:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
+    %34:i32 = load %33
+    %35:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
     %36:i32 = load %35
-    store %a, %36
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %37:i32 = load %a
-        %38:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %39:i32 = load %38
-        %40:bool = lt %37, %39
-        if %40 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    %37:array<i32, 5> = construct %28, %30, %32, %34, %36
+    store %data, %37
+    %38:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
+    %39:i32 = load %38
+    store %a, %39
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %40:i32 = load %a
+        %41:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %42:i32 = load %41
+        %43:bool = lt %40, %42
+        if %43 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %41:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
-        %42:i32 = load %41
-        store %i, %42
-        loop [b: %b7, c: %b8] {  # loop_2
-          %b7 = block {  # body
-            %43:i32 = load %i
-            %44:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-            %45:i32 = load %44
-            %46:bool = lt %43, %45
-            if %46 [t: %b9, f: %b10] {  # if_2
-              %b9 = block {  # true
+        %44:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
+        %45:i32 = load %44
+        store %i, %45
+        loop [b: $B7, c: $B8] {  # loop_2
+          $B7: {  # body
+            %46:i32 = load %i
+            %47:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+            %48:i32 = load %47
+            %49:bool = lt %46, %48
+            if %49 [t: $B9, f: $B10] {  # if_2
+              $B9: {  # true
                 exit_if  # if_2
               }
-              %b10 = block {  # false
+              $B10: {  # false
                 exit_loop  # loop_2
               }
             }
-            %47:i32 = load %i
-            store %j, %47
-            loop [b: %b11, c: %b12] {  # loop_3
-              %b11 = block {  # body
-                %48:i32 = load %j
-                %49:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-                %50:i32 = load %49
-                %51:bool = lt %48, %50
-                if %51 [t: %b13, f: %b14] {  # if_3
-                  %b13 = block {  # true
+            %50:i32 = load %i
+            store %j, %50
+            loop [b: $B11, c: $B12] {  # loop_3
+              $B11: {  # body
+                %51:i32 = load %j
+                %52:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+                %53:i32 = load %52
+                %54:bool = lt %51, %53
+                if %54 [t: $B13, f: $B14] {  # if_3
+                  $B13: {  # true
                     exit_if  # if_3
                   }
-                  %b14 = block {  # false
+                  $B14: {  # false
                     exit_loop  # loop_3
                   }
                 }
-                %52:i32 = load %i
-                %53:ptr<function, i32, read_write> = access %data, %52
-                %54:i32 = load %53
-                %55:i32 = load %j
+                %55:i32 = load %i
                 %56:ptr<function, i32, read_write> = access %data, %55
                 %57:i32 = load %56
-                %58:bool = lt %54, %57
-                if %58 [t: %b15] {  # if_4
-                  %b15 = block {  # true
-                    %59:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
-                    %60:i32 = load %59
-                    %61:f32 = convert %60
-                    %62:vec4<f32> = construct %61
-                    store %x_GLF_color, %62
+                %58:i32 = load %j
+                %59:ptr<function, i32, read_write> = access %data, %58
+                %60:i32 = load %59
+                %61:bool = lt %57, %60
+                if %61 [t: $B15] {  # if_4
+                  $B15: {  # true
+                    %62:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
+                    %63:i32 = load %62
+                    %64:f32 = convert %63
+                    %65:vec4<f32> = construct %64
+                    store %x_GLF_color, %65
                     exit_if  # if_4
                   }
                 }
-                continue %b12
+                continue  # -> $B12
               }
-              %b12 = block {  # continuing
-                %63:i32 = load %j
-                %64:i32 = add %63, 1i
-                store %j, %64
-                next_iteration %b11
+              $B12: {  # continuing
+                %66:i32 = load %j
+                %67:i32 = add %66, 1i
+                store %j, %67
+                next_iteration  # -> $B11
               }
             }
-            continue %b8
+            continue  # -> $B8
           }
-          %b8 = block {  # continuing
-            %65:i32 = load %i
-            %66:i32 = add %65, 1i
-            store %i, %66
-            next_iteration %b7
+          $B8: {  # continuing
+            %68:i32 = load %i
+            %69:i32 = add %68, 1i
+            store %i, %69
+            next_iteration  # -> $B7
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %67:i32 = load %a
-        %68:i32 = add %67, 1i
-        store %a, %68
-        next_iteration %b3
+      $B4: {  # continuing
+        %70:i32 = load %a
+        %71:i32 = add %70, 1i
+        store %a, %71
+        next_iteration  # -> $B3
       }
     }
-    loop [b: %b16, c: %b17] {  # loop_4
-      %b16 = block {  # body
-        %69:f32 = load_vector_element %gl_FragCoord, 0u
-        %70:ptr<uniform, f32, read> = access %x_12, 0u, 0i, 0u
-        %71:f32 = load %70
-        %72:bool = lt %69, %71
-        if %72 [t: %b18, f: %b19] {  # if_5
-          %b18 = block {  # true
+    loop [b: $B16, c: $B17] {  # loop_4
+      $B16: {  # body
+        %72:f32 = load_vector_element %gl_FragCoord, 0u
+        %73:ptr<uniform, f32, read> = access %x_12, 0u, 0i, 0u
+        %74:f32 = load %73
+        %75:bool = lt %72, %74
+        if %75 [t: $B18, f: $B19] {  # if_5
+          $B18: {  # true
             exit_if  # if_5
           }
-          %b19 = block {  # false
+          $B19: {  # false
             exit_loop  # loop_4
           }
         }
-        %73:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
-        %74:i32 = load %73
-        store %i_1, %74
-        loop [b: %b20, c: %b21] {  # loop_5
-          %b20 = block {  # body
-            %75:i32 = load %i_1
-            %76:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-            %77:i32 = load %76
-            %78:bool = lt %75, %77
-            if %78 [t: %b22, f: %b23] {  # if_6
-              %b22 = block {  # true
+        %76:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
+        %77:i32 = load %76
+        store %i_1, %77
+        loop [b: $B20, c: $B21] {  # loop_5
+          $B20: {  # body
+            %78:i32 = load %i_1
+            %79:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+            %80:i32 = load %79
+            %81:bool = lt %78, %80
+            if %81 [t: $B22, f: $B23] {  # if_6
+              $B22: {  # true
                 exit_if  # if_6
               }
-              %b23 = block {  # false
+              $B23: {  # false
                 exit_loop  # loop_5
               }
             }
-            %79:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
-            %80:i32 = load %79
-            %81:f32 = convert %80
-            %82:vec4<f32> = construct %81
-            store %x_GLF_color, %82
-            continue %b21
+            %82:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
+            %83:i32 = load %82
+            %84:f32 = convert %83
+            %85:vec4<f32> = construct %84
+            store %x_GLF_color, %85
+            continue  # -> $B21
           }
-          %b21 = block {  # continuing
-            %83:i32 = load %i_1
-            %84:i32 = add %83, 1i
-            store %i_1, %84
-            next_iteration %b20
+          $B21: {  # continuing
+            %86:i32 = load %i_1
+            %87:i32 = add %86, 1i
+            store %i_1, %87
+            next_iteration  # -> $B20
           }
         }
-        continue %b17
+        continue  # -> $B17
       }
-      %b17 = block {  # continuing
-        next_iteration %b16
+      $B17: {  # continuing
+        next_iteration  # -> $B16
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b24 {
-  %b24 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B24: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %87:void = call %main_1
-    %88:vec4<f32> = load %x_GLF_color
-    %89:main_out = construct %88
-    ret %89
+    %90:void = call %main_1
+    %91:vec4<f32> = load %x_GLF_color
+    %92:main_out = construct %91
+    ret %92
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-machine-basic-block-for-for-for-less-than/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-machine-basic-block-for-for-for-less-than/0-opt.wgsl.expected.ir.msl
index 31f5d15..7f1ec6b 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-machine-basic-block-for-for-for-less-than/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-machine-basic-block-for-for-for-less-than/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,201 +20,239 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_6:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_12:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %data:ptr<function, array<i32, 5>, read_write> = var
     %a:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %j:ptr<function, i32, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
     %11:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_45:i32 = load %11
-    %13:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
-    %x_48:i32 = load %13
-    %15:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
-    %x_51:i32 = load %15
-    %17:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_54:i32 = load %17
-    %19:f32 = convert %x_45
-    %20:f32 = convert %x_48
-    %21:f32 = convert %x_51
-    %22:f32 = convert %x_54
-    %23:vec4<f32> = construct %19, %20, %21, %22
-    store %x_GLF_color, %23
-    %24:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_58:i32 = load %24
-    %26:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_60:i32 = load %26
-    %28:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-    %x_62:i32 = load %28
-    %30:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
-    %x_64:i32 = load %30
-    %32:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_66:i32 = load %32
-    %34:array<i32, 5> = construct %x_58, %x_60, %x_62, %x_64, %x_66
-    store %data, %34
-    %35:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
-    %x_69:i32 = load %35
+    %12:i32 = load %11
+    %x_45:i32 = let %12
+    %14:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
+    %15:i32 = load %14
+    %x_48:i32 = let %15
+    %17:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
+    %18:i32 = load %17
+    %x_51:i32 = let %18
+    %20:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %21:i32 = load %20
+    %x_54:i32 = let %21
+    %23:f32 = convert %x_45
+    %24:f32 = let %23
+    %25:f32 = convert %x_48
+    %26:f32 = let %25
+    %27:f32 = convert %x_51
+    %28:f32 = let %27
+    %29:f32 = convert %x_54
+    %30:vec4<f32> = construct %24, %26, %28, %29
+    store %x_GLF_color, %30
+    %31:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %32:i32 = load %31
+    %x_58:i32 = let %32
+    %34:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %35:i32 = load %34
+    %x_60:i32 = let %35
+    %37:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+    %38:i32 = load %37
+    %x_62:i32 = let %38
+    %40:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
+    %41:i32 = load %40
+    %x_64:i32 = let %41
+    %43:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %44:i32 = load %43
+    %x_66:i32 = let %44
+    %46:array<i32, 5> = construct %x_58, %x_60, %x_62, %x_64, %x_66
+    store %data, %46
+    %47:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
+    %48:i32 = load %47
+    %x_69:i32 = let %48
     store %a, %x_69
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_74:i32 = load %a
-        %38:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_76:i32 = load %38
-        %40:bool = lt %x_74, %x_76
-        if %40 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %50:i32 = load %a
+        %x_74:i32 = let %50
+        %52:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %53:i32 = load %52
+        %x_76:i32 = let %53
+        %55:bool = lt %x_74, %x_76
+        if %55 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %41:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
-        %x_80:i32 = load %41
+        %56:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
+        %57:i32 = load %56
+        %x_80:i32 = let %57
         store %i, %x_80
-        loop [b: %b7, c: %b8] {  # loop_2
-          %b7 = block {  # body
-            %x_85:i32 = load %i
-            %44:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-            %x_87:i32 = load %44
-            %46:bool = lt %x_85, %x_87
-            if %46 [t: %b9, f: %b10] {  # if_2
-              %b9 = block {  # true
+        loop [b: $B7, c: $B8] {  # loop_2
+          $B7: {  # body
+            %59:i32 = load %i
+            %x_85:i32 = let %59
+            %61:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+            %62:i32 = load %61
+            %x_87:i32 = let %62
+            %64:bool = lt %x_85, %x_87
+            if %64 [t: $B9, f: $B10] {  # if_2
+              $B9: {  # true
                 exit_if  # if_2
               }
-              %b10 = block {  # false
+              $B10: {  # false
                 exit_loop  # loop_2
               }
             }
-            %x_90:i32 = load %i
+            %65:i32 = load %i
+            %x_90:i32 = let %65
             store %j, %x_90
-            loop [b: %b11, c: %b12] {  # loop_3
-              %b11 = block {  # body
-                %x_95:i32 = load %j
-                %49:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-                %x_97:i32 = load %49
-                %51:bool = lt %x_95, %x_97
-                if %51 [t: %b13, f: %b14] {  # if_3
-                  %b13 = block {  # true
+            loop [b: $B11, c: $B12] {  # loop_3
+              $B11: {  # body
+                %67:i32 = load %j
+                %x_95:i32 = let %67
+                %69:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+                %70:i32 = load %69
+                %x_97:i32 = let %70
+                %72:bool = lt %x_95, %x_97
+                if %72 [t: $B13, f: $B14] {  # if_3
+                  $B13: {  # true
                     exit_if  # if_3
                   }
-                  %b14 = block {  # false
+                  $B14: {  # false
                     exit_loop  # loop_3
                   }
                 }
-                %x_100:i32 = load %i
-                %53:ptr<function, i32, read_write> = access %data, %x_100
-                %x_102:i32 = load %53
-                %x_103:i32 = load %j
-                %56:ptr<function, i32, read_write> = access %data, %x_103
-                %x_105:i32 = load %56
-                %58:bool = lt %x_102, %x_105
-                if %58 [t: %b15] {  # if_4
-                  %b15 = block {  # true
-                    %59:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
-                    %x_110:i32 = load %59
-                    %x_111:f32 = convert %x_110
-                    %62:vec4<f32> = construct %x_111, %x_111, %x_111, %x_111
-                    store %x_GLF_color, %62
+                %73:i32 = load %i
+                %x_100:i32 = let %73
+                %75:ptr<function, i32, read_write> = access %data, %x_100
+                %76:i32 = load %75
+                %x_102:i32 = let %76
+                %78:i32 = load %j
+                %x_103:i32 = let %78
+                %80:ptr<function, i32, read_write> = access %data, %x_103
+                %81:i32 = load %80
+                %x_105:i32 = let %81
+                %83:bool = lt %x_102, %x_105
+                if %83 [t: $B15] {  # if_4
+                  $B15: {  # true
+                    %84:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
+                    %85:i32 = load %84
+                    %x_110:i32 = let %85
+                    %87:f32 = convert %x_110
+                    %x_111:f32 = let %87
+                    %89:vec4<f32> = construct %x_111, %x_111, %x_111, %x_111
+                    store %x_GLF_color, %89
                     exit_if  # if_4
                   }
                 }
-                continue %b12
+                continue  # -> $B12
               }
-              %b12 = block {  # continuing
-                %x_113:i32 = load %j
-                %64:i32 = add %x_113, 1i
-                store %j, %64
-                next_iteration %b11
+              $B12: {  # continuing
+                %90:i32 = load %j
+                %x_113:i32 = let %90
+                %92:i32 = add %x_113, 1i
+                store %j, %92
+                next_iteration  # -> $B11
               }
             }
-            continue %b8
+            continue  # -> $B8
           }
-          %b8 = block {  # continuing
-            %x_115:i32 = load %i
-            %66:i32 = add %x_115, 1i
-            store %i, %66
-            next_iteration %b7
+          $B8: {  # continuing
+            %93:i32 = load %i
+            %x_115:i32 = let %93
+            %95:i32 = add %x_115, 1i
+            store %i, %95
+            next_iteration  # -> $B7
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_117:i32 = load %a
-        %68:i32 = add %x_117, 1i
-        store %a, %68
-        next_iteration %b3
+      $B4: {  # continuing
+        %96:i32 = load %a
+        %x_117:i32 = let %96
+        %98:i32 = add %x_117, 1i
+        store %a, %98
+        next_iteration  # -> $B3
       }
     }
-    loop [b: %b16, c: %b17] {  # loop_4
-      %b16 = block {  # body
-        %x_124:f32 = load_vector_element %gl_FragCoord, 0u
-        %70:ptr<uniform, f32, read> = access %x_12, 0u, 0i, 0u
-        %x_126:f32 = load %70
-        %72:bool = lt %x_124, %x_126
-        if %72 [t: %b18, f: %b19] {  # if_5
-          %b18 = block {  # true
+    loop [b: $B16, c: $B17] {  # loop_4
+      $B16: {  # body
+        %99:f32 = load_vector_element %gl_FragCoord, 0u
+        %x_124:f32 = let %99
+        %101:ptr<uniform, f32, read> = access %x_12, 0u, 0i, 0u
+        %102:f32 = load %101
+        %x_126:f32 = let %102
+        %104:bool = lt %x_124, %x_126
+        if %104 [t: $B18, f: $B19] {  # if_5
+          $B18: {  # true
             exit_if  # if_5
           }
-          %b19 = block {  # false
+          $B19: {  # false
             exit_loop  # loop_4
           }
         }
-        %73:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
-        %x_130:i32 = load %73
+        %105:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
+        %106:i32 = load %105
+        %x_130:i32 = let %106
         store %i_1, %x_130
-        loop [b: %b20, c: %b21] {  # loop_5
-          %b20 = block {  # body
-            %x_135:i32 = load %i_1
-            %76:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-            %x_137:i32 = load %76
-            %78:bool = lt %x_135, %x_137
-            if %78 [t: %b22, f: %b23] {  # if_6
-              %b22 = block {  # true
+        loop [b: $B20, c: $B21] {  # loop_5
+          $B20: {  # body
+            %108:i32 = load %i_1
+            %x_135:i32 = let %108
+            %110:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+            %111:i32 = load %110
+            %x_137:i32 = let %111
+            %113:bool = lt %x_135, %x_137
+            if %113 [t: $B22, f: $B23] {  # if_6
+              $B22: {  # true
                 exit_if  # if_6
               }
-              %b23 = block {  # false
+              $B23: {  # false
                 exit_loop  # loop_5
               }
             }
-            %79:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
-            %x_141:i32 = load %79
-            %x_142:f32 = convert %x_141
-            %82:vec4<f32> = construct %x_142, %x_142, %x_142, %x_142
-            store %x_GLF_color, %82
-            continue %b21
+            %114:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
+            %115:i32 = load %114
+            %x_141:i32 = let %115
+            %117:f32 = convert %x_141
+            %x_142:f32 = let %117
+            %119:vec4<f32> = construct %x_142, %x_142, %x_142, %x_142
+            store %x_GLF_color, %119
+            continue  # -> $B21
           }
-          %b21 = block {  # continuing
-            %x_144:i32 = load %i_1
-            %84:i32 = add %x_144, 1i
-            store %i_1, %84
-            next_iteration %b20
+          $B21: {  # continuing
+            %120:i32 = load %i_1
+            %x_144:i32 = let %120
+            %122:i32 = add %x_144, 1i
+            store %i_1, %122
+            next_iteration  # -> $B20
           }
         }
-        continue %b17
+        continue  # -> $B17
       }
-      %b17 = block {  # continuing
-        next_iteration %b16
+      $B17: {  # continuing
+        next_iteration  # -> $B16
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b24 {
-  %b24 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B24: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %87:void = call %main_1
-    %88:vec4<f32> = load %x_GLF_color
-    %89:main_out = construct %88
-    ret %89
+    %125:void = call %main_1
+    %126:vec4<f32> = load %x_GLF_color
+    %127:main_out = construct %126
+    ret %127
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-machine-scheduler-for-if-pow/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-machine-scheduler-for-if-pow/0-opt.spvasm.expected.ir.msl
index 098753b..e7b39fd 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-machine-scheduler-for-if-pow/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-machine-scheduler-for-if-pow/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,127 +20,135 @@
   x_GLF_v1_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_8:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_12:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_v1:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %uv:ptr<function, vec2<f32>, read_write> = var
     %v1:ptr<function, vec4<f32>, read_write> = var
     %a:ptr<function, f32, read_write> = var
     %i:ptr<function, i32, read_write> = var
-    %10:vec4<f32> = load %gl_FragCoord
-    %11:vec2<f32> = swizzle %10, xy
-    store %uv, %11
-    %12:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-    %13:f32 = load %12
-    %14:vec4<f32> = construct %13
-    store %v1, %14
-    %15:f32 = load_vector_element %uv, 1u
-    %16:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-    %17:f32 = load %16
-    %18:bool = gte %15, %17
-    if %18 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %19:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
-        %20:f32 = load %19
-        store_vector_element %v1, 0u, %20
-        %21:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-        %22:f32 = load %21
-        store_vector_element %v1, 1u, %22
-        %23:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-        %24:f32 = load %23
-        store_vector_element %v1, 2u, %24
-        %25:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
-        %26:f32 = load %25
-        store_vector_element %v1, 3u, %26
+    %11:vec4<f32> = load %gl_FragCoord
+    %12:vec2<f32> = swizzle %11, xy
+    store %uv, %12
+    %13:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+    %14:f32 = load %13
+    %15:vec4<f32> = construct %14
+    store %v1, %15
+    %16:f32 = load_vector_element %uv, 1u
+    %17:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+    %18:f32 = load %17
+    %19:bool = gte %16, %18
+    if %19 [t: $B3] {  # if_1
+      $B3: {  # true
+        %20:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
+        %21:f32 = load %20
+        store_vector_element %v1, 0u, %21
+        %22:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+        %23:f32 = load %22
+        store_vector_element %v1, 1u, %23
+        %24:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+        %25:f32 = load %24
+        store_vector_element %v1, 2u, %25
+        %26:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
+        %27:f32 = load %26
+        store_vector_element %v1, 3u, %27
         exit_if  # if_1
       }
     }
-    %27:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
-    %28:f32 = load %27
-    store %a, %28
-    %29:ptr<uniform, i32, read> = access %x_12, 0u, 1i, 0u
-    %30:i32 = load %29
-    store %i, %30
-    loop [b: %b4, c: %b5] {  # loop_1
-      %b4 = block {  # body
-        %31:i32 = load %i
-        %32:ptr<uniform, i32, read> = access %x_12, 0u, 0i, 0u
-        %33:i32 = load %32
-        %34:bool = lt %31, %33
-        if %34 [t: %b6, f: %b7] {  # if_2
-          %b6 = block {  # true
+    %28:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
+    %29:f32 = load %28
+    store %a, %29
+    %30:ptr<uniform, i32, read> = access %x_12, 0u, 1i, 0u
+    %31:i32 = load %30
+    store %i, %31
+    loop [b: $B4, c: $B5] {  # loop_1
+      $B4: {  # body
+        %32:i32 = load %i
+        %33:ptr<uniform, i32, read> = access %x_12, 0u, 0i, 0u
+        %34:i32 = load %33
+        %35:bool = lt %32, %34
+        if %35 [t: $B6, f: $B7] {  # if_2
+          $B6: {  # true
             exit_if  # if_2
           }
-          %b7 = block {  # false
+          $B7: {  # false
             exit_loop  # loop_1
           }
         }
-        %35:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
-        %36:f32 = load %35
-        %37:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-        %38:f32 = load %37
-        %39:bool = lt %36, %38
-        if %39 [t: %b8] {  # if_3
-          %b8 = block {  # true
-            discard
+        %36:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
+        %37:f32 = load %36
+        %38:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+        %39:f32 = load %38
+        %40:bool = lt %37, %39
+        if %40 [t: $B8] {  # if_3
+          $B8: {  # true
+            store %continue_execution, false
             exit_if  # if_3
           }
         }
-        %40:f32 = load_vector_element %v1, 0u
-        %41:f32 = load_vector_element %v1, 1u
-        %42:f32 = add %40, %41
-        %43:f32 = load_vector_element %v1, 2u
-        %44:f32 = add %42, %43
-        %45:f32 = load_vector_element %v1, 3u
-        %46:f32 = add %44, %45
-        %47:ptr<uniform, f32, read> = access %x_8, 0u, 3i, 0u
-        %48:f32 = load %47
-        %49:f32 = pow %46, %48
-        store %a, %49
-        continue %b5
+        %41:f32 = load_vector_element %v1, 0u
+        %42:f32 = load_vector_element %v1, 1u
+        %43:f32 = add %41, %42
+        %44:f32 = load_vector_element %v1, 2u
+        %45:f32 = add %43, %44
+        %46:f32 = load_vector_element %v1, 3u
+        %47:f32 = add %45, %46
+        %48:ptr<uniform, f32, read> = access %x_8, 0u, 3i, 0u
+        %49:f32 = load %48
+        %50:f32 = pow %47, %49
+        store %a, %50
+        continue  # -> $B5
       }
-      %b5 = block {  # continuing
-        %50:i32 = load %i
-        %51:i32 = add %50, 1i
-        store %i, %51
-        next_iteration %b4
+      $B5: {  # continuing
+        %51:i32 = load %i
+        %52:i32 = add %51, 1i
+        store %i, %52
+        next_iteration  # -> $B4
       }
     }
-    %52:f32 = load %a
-    %53:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
-    %54:f32 = load %53
-    %55:bool = eq %52, %54
-    if %55 [t: %b9, f: %b10] {  # if_4
-      %b9 = block {  # true
-        %56:vec4<f32> = load %v1
-        store %x_GLF_v1, %56
+    %53:f32 = load %a
+    %54:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
+    %55:f32 = load %54
+    %56:bool = eq %53, %55
+    if %56 [t: $B9, f: $B10] {  # if_4
+      $B9: {  # true
+        %57:vec4<f32> = load %v1
+        store %x_GLF_v1, %57
         exit_if  # if_4
       }
-      %b10 = block {  # false
-        %57:ptr<uniform, i32, read> = access %x_12, 0u, 1i, 0u
-        %58:i32 = load %57
-        %59:f32 = convert %58
-        %60:vec4<f32> = construct %59
-        store %x_GLF_v1, %60
+      $B10: {  # false
+        %58:ptr<uniform, i32, read> = access %x_12, 0u, 1i, 0u
+        %59:i32 = load %58
+        %60:f32 = convert %59
+        %61:vec4<f32> = construct %60
+        store %x_GLF_v1, %61
         exit_if  # if_4
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b11 {
-  %b11 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B11: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %63:void = call %main_1
-    %64:vec4<f32> = load %x_GLF_v1
-    %65:main_out = construct %64
-    ret %65
+    %64:void = call %main_1
+    %65:vec4<f32> = load %x_GLF_v1
+    %66:main_out = construct %65
+    %67:bool = load %continue_execution
+    %68:bool = eq %67, false
+    if %68 [t: $B12] {  # if_5
+      $B12: {  # true
+        terminate_invocation
+      }
+    }
+    ret %66
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-machine-scheduler-for-if-pow/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-machine-scheduler-for-if-pow/0-opt.wgsl.expected.ir.msl
index 51b3acd..5a308a1 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-machine-scheduler-for-if-pow/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-machine-scheduler-for-if-pow/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,129 +20,162 @@
   x_GLF_v1_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_8:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_12:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_v1:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %uv:ptr<function, vec2<f32>, read_write> = var
     %v1:ptr<function, vec4<f32>, read_write> = var
     %a:ptr<function, f32, read_write> = var
     %i:ptr<function, i32, read_write> = var
-    %x_49:vec4<f32> = load %gl_FragCoord
-    %11:f32 = access %x_49, 0u
-    %12:f32 = access %x_49, 1u
-    %13:vec2<f32> = construct %11, %12
-    store %uv, %13
-    %14:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-    %x_52:f32 = load %14
-    %16:vec4<f32> = construct %x_52, %x_52, %x_52, %x_52
-    store %v1, %16
-    %x_55:f32 = load_vector_element %uv, 1u
-    %18:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-    %x_57:f32 = load %18
-    %20:bool = gte %x_55, %x_57
-    if %20 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %21:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
-        %x_62:f32 = load %21
+    %11:vec4<f32> = load %gl_FragCoord
+    %x_49:vec4<f32> = let %11
+    %13:f32 = access %x_49, 0u
+    %14:f32 = access %x_49, 1u
+    %15:vec2<f32> = construct %13, %14
+    store %uv, %15
+    %16:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+    %17:f32 = load %16
+    %x_52:f32 = let %17
+    %19:vec4<f32> = construct %x_52, %x_52, %x_52, %x_52
+    store %v1, %19
+    %20:f32 = load_vector_element %uv, 1u
+    %x_55:f32 = let %20
+    %22:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+    %23:f32 = load %22
+    %x_57:f32 = let %23
+    %25:bool = gte %x_55, %x_57
+    if %25 [t: $B3] {  # if_1
+      $B3: {  # true
+        %26:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
+        %27:f32 = load %26
+        %x_62:f32 = let %27
         store_vector_element %v1, 0u, %x_62
-        %23:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-        %x_65:f32 = load %23
+        %29:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+        %30:f32 = load %29
+        %x_65:f32 = let %30
         store_vector_element %v1, 1u, %x_65
-        %25:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-        %x_68:f32 = load %25
+        %32:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+        %33:f32 = load %32
+        %x_68:f32 = let %33
         store_vector_element %v1, 2u, %x_68
-        %27:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
-        %x_71:f32 = load %27
+        %35:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
+        %36:f32 = load %35
+        %x_71:f32 = let %36
         store_vector_element %v1, 3u, %x_71
         exit_if  # if_1
       }
     }
-    %29:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
-    %x_74:f32 = load %29
+    %38:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
+    %39:f32 = load %38
+    %x_74:f32 = let %39
     store %a, %x_74
-    %31:ptr<uniform, i32, read> = access %x_12, 0u, 1i, 0u
-    %x_15:i32 = load %31
+    %41:ptr<uniform, i32, read> = access %x_12, 0u, 1i, 0u
+    %42:i32 = load %41
+    %x_15:i32 = let %42
     store %i, %x_15
-    loop [b: %b4, c: %b5] {  # loop_1
-      %b4 = block {  # body
-        %x_16:i32 = load %i
-        %34:ptr<uniform, i32, read> = access %x_12, 0u, 0i, 0u
-        %x_17:i32 = load %34
-        %36:bool = lt %x_16, %x_17
-        if %36 [t: %b6, f: %b7] {  # if_2
-          %b6 = block {  # true
+    loop [b: $B4, c: $B5] {  # loop_1
+      $B4: {  # body
+        %44:i32 = load %i
+        %x_16:i32 = let %44
+        %46:ptr<uniform, i32, read> = access %x_12, 0u, 0i, 0u
+        %47:i32 = load %46
+        %x_17:i32 = let %47
+        %49:bool = lt %x_16, %x_17
+        if %49 [t: $B6, f: $B7] {  # if_2
+          $B6: {  # true
             exit_if  # if_2
           }
-          %b7 = block {  # false
+          $B7: {  # false
             exit_loop  # loop_1
           }
         }
-        %37:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
-        %x_84:f32 = load %37
-        %39:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-        %x_86:f32 = load %39
-        %41:bool = lt %x_84, %x_86
-        if %41 [t: %b8] {  # if_3
-          %b8 = block {  # true
-            discard
+        %50:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
+        %51:f32 = load %50
+        %x_84:f32 = let %51
+        %53:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+        %54:f32 = load %53
+        %x_86:f32 = let %54
+        %56:bool = lt %x_84, %x_86
+        if %56 [t: $B8] {  # if_3
+          $B8: {  # true
+            store %continue_execution, false
             exit_if  # if_3
           }
         }
-        %x_91:f32 = load_vector_element %v1, 0u
-        %x_93:f32 = load_vector_element %v1, 1u
-        %x_96:f32 = load_vector_element %v1, 2u
-        %x_99:f32 = load_vector_element %v1, 3u
-        %46:ptr<uniform, f32, read> = access %x_8, 0u, 3i, 0u
-        %x_102:f32 = load %46
-        %48:f32 = add %x_91, %x_93
-        %49:f32 = add %48, %x_96
-        %50:f32 = add %49, %x_99
-        %51:f32 = pow %50, %x_102
-        store %a, %51
-        continue %b5
+        %57:f32 = load_vector_element %v1, 0u
+        %x_91:f32 = let %57
+        %59:f32 = load_vector_element %v1, 1u
+        %x_93:f32 = let %59
+        %61:f32 = load_vector_element %v1, 2u
+        %x_96:f32 = let %61
+        %63:f32 = load_vector_element %v1, 3u
+        %x_99:f32 = let %63
+        %65:ptr<uniform, f32, read> = access %x_8, 0u, 3i, 0u
+        %66:f32 = load %65
+        %x_102:f32 = let %66
+        %68:f32 = add %x_91, %x_93
+        %69:f32 = add %68, %x_96
+        %70:f32 = add %69, %x_99
+        %71:f32 = pow %70, %x_102
+        store %a, %71
+        continue  # -> $B5
       }
-      %b5 = block {  # continuing
-        %x_18:i32 = load %i
-        %53:i32 = add %x_18, 1i
-        store %i, %53
-        next_iteration %b4
+      $B5: {  # continuing
+        %72:i32 = load %i
+        %x_18:i32 = let %72
+        %74:i32 = add %x_18, 1i
+        store %i, %74
+        next_iteration  # -> $B4
       }
     }
-    %x_104:f32 = load %a
-    %55:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
-    %x_106:f32 = load %55
-    %57:bool = eq %x_104, %x_106
-    if %57 [t: %b9, f: %b10] {  # if_4
-      %b9 = block {  # true
-        %x_111:vec4<f32> = load %v1
+    %75:f32 = load %a
+    %x_104:f32 = let %75
+    %77:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
+    %78:f32 = load %77
+    %x_106:f32 = let %78
+    %80:bool = eq %x_104, %x_106
+    if %80 [t: $B9, f: $B10] {  # if_4
+      $B9: {  # true
+        %81:vec4<f32> = load %v1
+        %x_111:vec4<f32> = let %81
         store %x_GLF_v1, %x_111
         exit_if  # if_4
       }
-      %b10 = block {  # false
-        %59:ptr<uniform, i32, read> = access %x_12, 0u, 1i, 0u
-        %x_20:i32 = load %59
-        %x_113:f32 = convert %x_20
-        %62:vec4<f32> = construct %x_113, %x_113, %x_113, %x_113
-        store %x_GLF_v1, %62
+      $B10: {  # false
+        %83:ptr<uniform, i32, read> = access %x_12, 0u, 1i, 0u
+        %84:i32 = load %83
+        %x_20:i32 = let %84
+        %86:f32 = convert %x_20
+        %x_113:f32 = let %86
+        %88:vec4<f32> = construct %x_113, %x_113, %x_113, %x_113
+        store %x_GLF_v1, %88
         exit_if  # if_4
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b11 {
-  %b11 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B11: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %65:void = call %main_1
-    %66:vec4<f32> = load %x_GLF_v1
-    %67:main_out = construct %66
-    ret %67
+    %91:void = call %main_1
+    %92:vec4<f32> = load %x_GLF_v1
+    %93:main_out = construct %92
+    %94:bool = load %continue_execution
+    %95:bool = eq %94, false
+    if %95 [t: $B12] {  # if_5
+      $B12: {  # true
+        terminate_invocation
+      }
+    }
+    ret %93
   }
 }
 
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
index 0538e7a..496ef8c 100644
--- 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
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,62 +8,63 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%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 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %6:i32 = load %i
-        %7:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-        %8:f32 = load_vector_element %7, 1u
-        %9:i32 = convert %8
-        %10:bool = lt %6, %9
-        if %10 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %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 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %11:i32 = load %a
-        %12:bool = gt %11, 0i
-        if %12 [t: %b7] {  # if_2
-          %b7 = block {  # true
+        %13:i32 = load %a
+        %14:bool = gt %13, 0i
+        if %14 [t: $B7] {  # if_2
+          $B7: {  # true
             exit_loop  # loop_1
           }
         }
-        %13:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-        %14:f32 = load_vector_element %13, 1u
-        %15:i32 = convert %14
-        %16:i32 = mul %15, 2i
-        %17:i32 = div %16, 2i
-        store %a, %17
-        continue %b4
+        %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 = block {  # continuing
-        %18:i32 = load %i
-        %19:i32 = add %18, 1i
-        store %i, %19
-        next_iteration %b3
+      $B4: {  # continuing
+        %21:i32 = load %i
+        %22:i32 = add %21, 1i
+        store %i, %22
+        next_iteration  # -> $B3
       }
     }
-    %20:i32 = load %a
-    %21:bool = eq %20, 1i
-    if %21 [t: %b8, f: %b9] {  # if_3
-      %b8 = block {  # true
+    %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 = block {  # false
+      $B9: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_3
       }
@@ -71,12 +72,34 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b10 {
-  %b10 = block {
-    %23:void = call %main_1
-    %24:vec4<f32> = load %x_GLF_color
-    %25:main_out = construct %24
-    ret %25
+%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
   }
 }
 
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
index d281eab..42e494f 100644
--- 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
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,62 +8,68 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%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 = block {  # body
-        %x_33:i32 = load %i
-        %7:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-        %x_35:f32 = load_vector_element %7, 1u
-        %9:i32 = convert %x_35
-        %10:bool = lt %x_33, %9
-        if %10 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    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 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_39:i32 = load %a
-        %12:bool = gt %x_39, 0i
-        if %12 [t: %b7] {  # if_2
-          %b7 = block {  # true
+        %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
           }
         }
-        %13:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-        %x_44:f32 = load_vector_element %13, 1u
-        %15:i32 = convert %x_44
-        %16:i32 = mul %15, 2i
-        %17:i32 = div %16, 2i
-        store %a, %17
-        continue %b4
+        %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 = block {  # continuing
-        %x_48:i32 = load %i
-        %19:i32 = add %x_48, 1i
-        store %i, %19
-        next_iteration %b3
+      $B4: {  # continuing
+        %24:i32 = load %i
+        %x_48:i32 = let %24
+        %26:i32 = add %x_48, 1i
+        store %i, %26
+        next_iteration  # -> $B3
       }
     }
-    %x_50:i32 = load %a
-    %21:bool = eq %x_50, 1i
-    if %21 [t: %b8, f: %b9] {  # if_3
-      %b8 = block {  # true
+    %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 = block {  # false
+      $B9: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_3
       }
@@ -71,12 +77,34 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b10 {
-  %b10 = block {
-    %23:void = call %main_1
-    %24:vec4<f32> = load %x_GLF_color
-    %25:main_out = construct %24
-    ret %25
+%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
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-matching-conditions-break/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-matching-conditions-break/0-opt.spvasm.expected.ir.msl
index 2df17f3..4bf2834 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-matching-conditions-break/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-matching-conditions-break/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,115 +12,118 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %i:ptr<function, i32, read_write> = var
     %6:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
     %7:i32 = load %6
     %8:f32 = convert %7
-    %9:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %10:i32 = load %9
-    %11:f32 = convert %10
-    %12:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %13:i32 = load %12
-    %14:f32 = convert %13
-    %15:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %16:i32 = load %15
-    %17:f32 = convert %16
-    %18:vec4<f32> = construct %8, %11, %14, %17
-    store %x_GLF_color, %18
-    %19:f32 = load_vector_element %gl_FragCoord, 1u
-    %20:bool = lt %19, 0.0f
-    if %20 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %21:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %22:i32 = load %21
-        %23:f32 = convert %22
-        %24:vec4<f32> = construct %23
-        store %x_GLF_color, %24
+    %9:f32 = let %8
+    %10:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %11:i32 = load %10
+    %12:f32 = convert %11
+    %13:f32 = let %12
+    %14:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %15:i32 = load %14
+    %16:f32 = convert %15
+    %17:f32 = let %16
+    %18:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %19:i32 = load %18
+    %20:f32 = convert %19
+    %21:vec4<f32> = construct %9, %13, %17, %20
+    store %x_GLF_color, %21
+    %22:f32 = load_vector_element %gl_FragCoord, 1u
+    %23:bool = lt %22, 0.0f
+    if %23 [t: $B3] {  # if_1
+      $B3: {  # true
+        %24:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %25:i32 = load %24
+        %26:f32 = convert %25
+        %27:vec4<f32> = construct %26
+        store %x_GLF_color, %27
         exit_if  # if_1
       }
     }
-    %25:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %26:i32 = load %25
-    store %i, %26
-    loop [b: %b4, c: %b5] {  # loop_1
-      %b4 = block {  # body
-        %27:i32 = load %i
-        %28:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %29:i32 = load %28
-        %30:bool = lt %27, %29
-        if %30 [t: %b6, f: %b7] {  # if_2
-          %b6 = block {  # true
+    %28:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %29:i32 = load %28
+    store %i, %29
+    loop [b: $B4, c: $B5] {  # loop_1
+      $B4: {  # body
+        %30:i32 = load %i
+        %31:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %32:i32 = load %31
+        %33:bool = lt %30, %32
+        if %33 [t: $B6, f: $B7] {  # if_2
+          $B6: {  # true
             exit_if  # if_2
           }
-          %b7 = block {  # false
+          $B7: {  # false
             exit_loop  # loop_1
           }
         }
-        %31:f32 = load_vector_element %gl_FragCoord, 0u
-        %32:bool = gt %31, 0.0f
-        if %32 [t: %b8] {  # if_3
-          %b8 = block {  # true
-            %33:f32 = load_vector_element %gl_FragCoord, 1u
-            %34:bool = lt %33, 0.0f
-            if %34 [t: %b9] {  # if_4
-              %b9 = block {  # true
-                %35:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-                %36:i32 = load %35
-                %37:f32 = convert %36
-                %38:vec4<f32> = construct %37
-                store %x_GLF_color, %38
+        %34:f32 = load_vector_element %gl_FragCoord, 0u
+        %35:bool = gt %34, 0.0f
+        if %35 [t: $B8] {  # if_3
+          $B8: {  # true
+            %36:f32 = load_vector_element %gl_FragCoord, 1u
+            %37:bool = lt %36, 0.0f
+            if %37 [t: $B9] {  # if_4
+              $B9: {  # true
+                %38:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+                %39:i32 = load %38
+                %40:f32 = convert %39
+                %41:vec4<f32> = construct %40
+                store %x_GLF_color, %41
                 exit_loop  # loop_1
               }
             }
             exit_if  # if_3
           }
         }
-        %39:f32 = load_vector_element %gl_FragCoord, 0u
-        %40:bool = gt %39, 0.0f
-        if %40 [t: %b10] {  # if_5
-          %b10 = block {  # true
-            %41:f32 = load_vector_element %gl_FragCoord, 1u
-            %42:bool = lt %41, 0.0f
-            if %42 [t: %b11] {  # if_6
-              %b11 = block {  # true
-                %43:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-                %44:i32 = load %43
-                %45:f32 = convert %44
-                %46:vec4<f32> = construct %45
-                store %x_GLF_color, %46
+        %42:f32 = load_vector_element %gl_FragCoord, 0u
+        %43:bool = gt %42, 0.0f
+        if %43 [t: $B10] {  # if_5
+          $B10: {  # true
+            %44:f32 = load_vector_element %gl_FragCoord, 1u
+            %45:bool = lt %44, 0.0f
+            if %45 [t: $B11] {  # if_6
+              $B11: {  # true
+                %46:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+                %47:i32 = load %46
+                %48:f32 = convert %47
+                %49:vec4<f32> = construct %48
+                store %x_GLF_color, %49
                 exit_if  # if_6
               }
             }
             exit_if  # if_5
           }
         }
-        continue %b5
+        continue  # -> $B5
       }
-      %b5 = block {  # continuing
-        %47:i32 = load %i
-        %48:i32 = add %47, 1i
-        store %i, %48
-        next_iteration %b4
+      $B5: {  # continuing
+        %50:i32 = load %i
+        %51:i32 = add %50, 1i
+        store %i, %51
+        next_iteration  # -> $B4
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b12 {
-  %b12 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B12: {
     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
+    %54:void = call %main_1
+    %55:vec4<f32> = load %x_GLF_color
+    %56:main_out = construct %55
+    ret %56
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-matching-conditions-break/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-matching-conditions-break/0-opt.wgsl.expected.ir.msl
index 6dd4234..1e85257 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-matching-conditions-break/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-matching-conditions-break/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,115 +12,137 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %i:ptr<function, i32, read_write> = var
     %6:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_31:i32 = load %6
-    %8:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_34:i32 = load %8
-    %10:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_37:i32 = load %10
-    %12:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_40:i32 = load %12
-    %14:f32 = convert %x_31
-    %15:f32 = convert %x_34
-    %16:f32 = convert %x_37
-    %17:f32 = convert %x_40
-    %18:vec4<f32> = construct %14, %15, %16, %17
-    store %x_GLF_color, %18
-    %x_44:f32 = load_vector_element %gl_FragCoord, 1u
-    %20:bool = lt %x_44, 0.0f
-    if %20 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %21:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_49:i32 = load %21
-        %x_50:f32 = convert %x_49
-        %24:vec4<f32> = construct %x_50, %x_50, %x_50, %x_50
-        store %x_GLF_color, %24
+    %7:i32 = load %6
+    %x_31:i32 = let %7
+    %9:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %10:i32 = load %9
+    %x_34:i32 = let %10
+    %12:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %13:i32 = load %12
+    %x_37:i32 = let %13
+    %15:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %16:i32 = load %15
+    %x_40:i32 = let %16
+    %18:f32 = convert %x_31
+    %19:f32 = let %18
+    %20:f32 = convert %x_34
+    %21:f32 = let %20
+    %22:f32 = convert %x_37
+    %23:f32 = let %22
+    %24:f32 = convert %x_40
+    %25:vec4<f32> = construct %19, %21, %23, %24
+    store %x_GLF_color, %25
+    %26:f32 = load_vector_element %gl_FragCoord, 1u
+    %x_44:f32 = let %26
+    %28:bool = lt %x_44, 0.0f
+    if %28 [t: $B3] {  # if_1
+      $B3: {  # true
+        %29:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %30:i32 = load %29
+        %x_49:i32 = let %30
+        %32:f32 = convert %x_49
+        %x_50:f32 = let %32
+        %34:vec4<f32> = construct %x_50, %x_50, %x_50, %x_50
+        store %x_GLF_color, %34
         exit_if  # if_1
       }
     }
-    %25:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_53:i32 = load %25
+    %35:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %36:i32 = load %35
+    %x_53:i32 = let %36
     store %i, %x_53
-    loop [b: %b4, c: %b5] {  # loop_1
-      %b4 = block {  # body
-        %x_58:i32 = load %i
-        %28:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %x_60:i32 = load %28
-        %30:bool = lt %x_58, %x_60
-        if %30 [t: %b6, f: %b7] {  # if_2
-          %b6 = block {  # true
+    loop [b: $B4, c: $B5] {  # loop_1
+      $B4: {  # body
+        %38:i32 = load %i
+        %x_58:i32 = let %38
+        %40:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %41:i32 = load %40
+        %x_60:i32 = let %41
+        %43:bool = lt %x_58, %x_60
+        if %43 [t: $B6, f: $B7] {  # if_2
+          $B6: {  # true
             exit_if  # if_2
           }
-          %b7 = block {  # false
+          $B7: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_64:f32 = load_vector_element %gl_FragCoord, 0u
-        %32:bool = gt %x_64, 0.0f
-        if %32 [t: %b8] {  # if_3
-          %b8 = block {  # true
-            %x_69:f32 = load_vector_element %gl_FragCoord, 1u
-            %34:bool = lt %x_69, 0.0f
-            if %34 [t: %b9] {  # if_4
-              %b9 = block {  # true
-                %35:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-                %x_74:i32 = load %35
-                %x_75:f32 = convert %x_74
-                %38:vec4<f32> = construct %x_75, %x_75, %x_75, %x_75
-                store %x_GLF_color, %38
+        %44:f32 = load_vector_element %gl_FragCoord, 0u
+        %x_64:f32 = let %44
+        %46:bool = gt %x_64, 0.0f
+        if %46 [t: $B8] {  # if_3
+          $B8: {  # true
+            %47:f32 = load_vector_element %gl_FragCoord, 1u
+            %x_69:f32 = let %47
+            %49:bool = lt %x_69, 0.0f
+            if %49 [t: $B9] {  # if_4
+              $B9: {  # true
+                %50:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+                %51:i32 = load %50
+                %x_74:i32 = let %51
+                %53:f32 = convert %x_74
+                %x_75:f32 = let %53
+                %55:vec4<f32> = construct %x_75, %x_75, %x_75, %x_75
+                store %x_GLF_color, %55
                 exit_loop  # loop_1
               }
             }
             exit_if  # if_3
           }
         }
-        %x_78:f32 = load_vector_element %gl_FragCoord, 0u
-        %40:bool = gt %x_78, 0.0f
-        if %40 [t: %b10] {  # if_5
-          %b10 = block {  # true
-            %x_83:f32 = load_vector_element %gl_FragCoord, 1u
-            %42:bool = lt %x_83, 0.0f
-            if %42 [t: %b11] {  # if_6
-              %b11 = block {  # true
-                %43:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-                %x_88:i32 = load %43
-                %x_89:f32 = convert %x_88
-                %46:vec4<f32> = construct %x_89, %x_89, %x_89, %x_89
-                store %x_GLF_color, %46
+        %56:f32 = load_vector_element %gl_FragCoord, 0u
+        %x_78:f32 = let %56
+        %58:bool = gt %x_78, 0.0f
+        if %58 [t: $B10] {  # if_5
+          $B10: {  # true
+            %59:f32 = load_vector_element %gl_FragCoord, 1u
+            %x_83:f32 = let %59
+            %61:bool = lt %x_83, 0.0f
+            if %61 [t: $B11] {  # if_6
+              $B11: {  # true
+                %62:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+                %63:i32 = load %62
+                %x_88:i32 = let %63
+                %65:f32 = convert %x_88
+                %x_89:f32 = let %65
+                %67:vec4<f32> = construct %x_89, %x_89, %x_89, %x_89
+                store %x_GLF_color, %67
                 exit_if  # if_6
               }
             }
             exit_if  # if_5
           }
         }
-        continue %b5
+        continue  # -> $B5
       }
-      %b5 = block {  # continuing
-        %x_91:i32 = load %i
-        %48:i32 = add %x_91, 1i
-        store %i, %48
-        next_iteration %b4
+      $B5: {  # continuing
+        %68:i32 = load %i
+        %x_91:i32 = let %68
+        %70:i32 = add %x_91, 1i
+        store %i, %70
+        next_iteration  # -> $B4
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b12 {
-  %b12 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B12: {
     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
+    %73:void = call %main_1
+    %74:vec4<f32> = load %x_GLF_color
+    %75:main_out = construct %74
+    ret %75
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-matching-if-always-true-inside-loop/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-matching-if-always-true-inside-loop/0-opt.spvasm.expected.ir.msl
index 6bf41fe..47adeba 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-matching-if-always-true-inside-loop/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-matching-if-always-true-inside-loop/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,13 +12,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_8:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%func_i1_ = func(%x:ptr<function, i32, read_write>):i32 -> %b2 {
-  %b2 = block {
+%func_i1_ = func(%x:ptr<function, i32, read_write>):i32 {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %indexable:ptr<function, array<i32, 4>, read_write> = var
@@ -28,134 +28,143 @@
     %10:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
     %11:i32 = load %10
     store %i, %11
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %12:i32 = load %i
         %13:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
         %14:i32 = load %13
         %15:bool = lt %12, %14
-        if %15 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %15 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_93:i32 = load %a
-        %17:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
-        %18:i32 = load %17
-        %19:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
-        %20:i32 = load %19
-        %21:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
-        %22:i32 = load %21
-        %23:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
-        %24:i32 = load %23
-        %25:array<i32, 4> = construct %18, %20, %22, %24
-        store %indexable, %25
-        %26:ptr<function, i32, read_write> = access %indexable, %x_93
-        %27:i32 = load %26
-        %28:i32 = load %x
-        %29:bool = gt %27, %28
-        if %29 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
-            if true [t: %b9, f: %b10] {  # if_3
-              %b9 = block {  # true
-                %30:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
-                %x_105:i32 = load %30
+        %16:i32 = load %a
+        %x_93:i32 = let %16
+        %18:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
+        %19:i32 = load %18
+        %20:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
+        %21:i32 = load %20
+        %22:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
+        %23:i32 = load %22
+        %24:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
+        %25:i32 = load %24
+        %26:array<i32, 4> = construct %19, %21, %23, %25
+        store %indexable, %26
+        %27:ptr<function, i32, read_write> = access %indexable, %x_93
+        %28:i32 = load %27
+        %29:i32 = load %x
+        %30:bool = gt %28, %29
+        if %30 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
+            if true [t: $B9, f: $B10] {  # if_3
+              $B9: {  # true
+                %31:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
+                %32:i32 = load %31
+                %x_105:i32 = let %32
                 ret %x_105
               }
-              %b10 = block {  # false
-                %32:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
-                %33:i32 = load %32
-                store %a, %33
+              $B10: {  # false
+                %34:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
+                %35:i32 = load %34
+                store %a, %35
                 exit_if  # if_3
               }
             }
             exit_if  # if_2
           }
-          %b8 = block {  # false
-            if true [t: %b11] {  # if_4
-              %b11 = block {  # true
-                %34:ptr<uniform, i32, read> = access %x_8, 0u, 4i, 0u
-                %x_111:i32 = load %34
+          $B8: {  # false
+            if true [t: $B11] {  # if_4
+              $B11: {  # true
+                %36:ptr<uniform, i32, read> = access %x_8, 0u, 4i, 0u
+                %37:i32 = load %36
+                %x_111:i32 = let %37
                 ret %x_111
               }
             }
             exit_if  # if_2
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %36:i32 = load %i
-        %37:i32 = add %36, 1i
-        store %i, %37
-        next_iteration %b3
+      $B4: {  # continuing
+        %39:i32 = load %i
+        %40:i32 = add %39, 1i
+        store %i, %40
+        next_iteration  # -> $B3
       }
     }
-    %38:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-    %x_115:i32 = load %38
+    %41:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+    %42:i32 = load %41
+    %x_115:i32 = let %42
     ret %x_115
   }
 }
-%main_1 = func():void -> %b12 {
-  %b12 = block {
+%main_1 = func():void {
+  $B12: {
     %a_1:ptr<function, i32, read_write> = var
     %param:ptr<function, i32, read_write> = var
     %param_1:ptr<function, i32, read_write> = var
-    %44:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-    %45:i32 = load %44
-    store %param, %45
-    %x_40:i32 = call %func_i1_, %param
+    %48:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+    %49:i32 = load %48
+    store %param, %49
+    %50:i32 = call %func_i1_, %param
+    %x_40:i32 = let %50
     store %a_1, %x_40
-    %47:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
-    %48:i32 = load %47
-    store %param_1, %48
-    %x_43:i32 = call %func_i1_, %param_1
-    %50:i32 = load %a_1
-    %51:i32 = add %50, %x_43
-    store %a_1, %51
-    %52:i32 = load %a_1
-    %53:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
-    %54:i32 = load %53
-    %55:bool = eq %52, %54
-    if %55 [t: %b13, f: %b14] {  # if_5
-      %b13 = block {  # true
-        %56:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
-        %57:i32 = load %56
-        %58:f32 = convert %57
-        %59:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-        %60:i32 = load %59
-        %61:f32 = convert %60
-        %62:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+    %52:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
+    %53:i32 = load %52
+    store %param_1, %53
+    %54:i32 = call %func_i1_, %param_1
+    %x_43:i32 = let %54
+    %56:i32 = load %a_1
+    %57:i32 = add %56, %x_43
+    store %a_1, %57
+    %58:i32 = load %a_1
+    %59:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
+    %60:i32 = load %59
+    %61:bool = eq %58, %60
+    if %61 [t: $B13, f: $B14] {  # if_5
+      $B13: {  # true
+        %62:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
         %63:i32 = load %62
         %64:f32 = convert %63
-        %65:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
-        %66:i32 = load %65
-        %67:f32 = convert %66
-        %68:vec4<f32> = construct %58, %61, %64, %67
-        store %x_GLF_color, %68
+        %65:f32 = let %64
+        %66:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+        %67:i32 = load %66
+        %68:f32 = convert %67
+        %69:f32 = let %68
+        %70:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+        %71:i32 = load %70
+        %72:f32 = convert %71
+        %73:f32 = let %72
+        %74:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
+        %75:i32 = load %74
+        %76:f32 = convert %75
+        %77:vec4<f32> = construct %65, %69, %73, %76
+        store %x_GLF_color, %77
         exit_if  # if_5
       }
-      %b14 = block {  # false
-        %69:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-        %70:i32 = load %69
-        %71:f32 = convert %70
-        %72:vec4<f32> = construct %71
-        store %x_GLF_color, %72
+      $B14: {  # false
+        %78:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+        %79:i32 = load %78
+        %80:f32 = convert %79
+        %81:vec4<f32> = construct %80
+        store %x_GLF_color, %81
         exit_if  # if_5
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b15 {
-  %b15 = block {
-    %74:void = call %main_1
-    %75:vec4<f32> = load %x_GLF_color
-    %76:main_out = construct %75
-    ret %76
+%tint_symbol = @fragment func():main_out {
+  $B15: {
+    %83:void = call %main_1
+    %84:vec4<f32> = load %x_GLF_color
+    %85:main_out = construct %84
+    ret %85
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-matching-if-always-true-inside-loop/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-matching-if-always-true-inside-loop/0-opt.wgsl.expected.ir.msl
index eb9b430..e23c929 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-matching-if-always-true-inside-loop/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-matching-if-always-true-inside-loop/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,150 +12,182 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_8:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%func_i1_ = func(%x:ptr<function, i32, read_write>):i32 -> %b2 {
-  %b2 = block {
+%func_i1_ = func(%x:ptr<function, i32, read_write>):i32 {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %indexable:ptr<function, array<i32, 4>, read_write> = var
     %8:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-    %x_72:i32 = load %8
+    %9:i32 = load %8
+    %x_72:i32 = let %9
     store %a, %x_72
-    %10:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-    %x_74:i32 = load %10
+    %11:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+    %12:i32 = load %11
+    %x_74:i32 = let %12
     store %i, %x_74
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_79:i32 = load %i
-        %13:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-        %x_81:i32 = load %13
-        %15:bool = lt %x_79, %x_81
-        if %15 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %14:i32 = load %i
+        %x_79:i32 = let %14
+        %16:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+        %17:i32 = load %16
+        %x_81:i32 = let %17
+        %19:bool = lt %x_79, %x_81
+        if %19 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %16:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
-        %x_85:i32 = load %16
-        %18:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
-        %x_87:i32 = load %18
         %20:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
-        %x_89:i32 = load %20
-        %22:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
-        %x_91:i32 = load %22
-        %x_93:i32 = load %a
-        %25:array<i32, 4> = construct %x_85, %x_87, %x_89, %x_91
-        store %indexable, %25
-        %26:ptr<function, i32, read_write> = access %indexable, %x_93
-        %x_95:i32 = load %26
-        %x_96:i32 = load %x
-        %29:bool = gt %x_95, %x_96
-        if %29 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
-            if true [t: %b9, f: %b10] {  # if_3
-              %b9 = block {  # true
-                %30:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
-                %x_105:i32 = load %30
+        %21:i32 = load %20
+        %x_85:i32 = let %21
+        %23:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
+        %24:i32 = load %23
+        %x_87:i32 = let %24
+        %26:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
+        %27:i32 = load %26
+        %x_89:i32 = let %27
+        %29:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
+        %30:i32 = load %29
+        %x_91:i32 = let %30
+        %32:i32 = load %a
+        %x_93:i32 = let %32
+        %34:array<i32, 4> = construct %x_85, %x_87, %x_89, %x_91
+        store %indexable, %34
+        %35:ptr<function, i32, read_write> = access %indexable, %x_93
+        %36:i32 = load %35
+        %x_95:i32 = let %36
+        %38:i32 = load %x
+        %x_96:i32 = let %38
+        %40:bool = gt %x_95, %x_96
+        if %40 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
+            if true [t: $B9, f: $B10] {  # if_3
+              $B9: {  # true
+                %41:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
+                %42:i32 = load %41
+                %x_105:i32 = let %42
                 ret %x_105
               }
-              %b10 = block {  # false
-                %32:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
-                %x_107:i32 = load %32
+              $B10: {  # false
+                %44:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
+                %45:i32 = load %44
+                %x_107:i32 = let %45
                 store %a, %x_107
                 exit_if  # if_3
               }
             }
             exit_if  # if_2
           }
-          %b8 = block {  # false
-            if true [t: %b11] {  # if_4
-              %b11 = block {  # true
-                %34:ptr<uniform, i32, read> = access %x_8, 0u, 4i, 0u
-                %x_111:i32 = load %34
+          $B8: {  # false
+            if true [t: $B11] {  # if_4
+              $B11: {  # true
+                %47:ptr<uniform, i32, read> = access %x_8, 0u, 4i, 0u
+                %48:i32 = load %47
+                %x_111:i32 = let %48
                 ret %x_111
               }
             }
             exit_if  # if_2
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_112:i32 = load %i
-        %37:i32 = add %x_112, 1i
-        store %i, %37
-        next_iteration %b3
+      $B4: {  # continuing
+        %50:i32 = load %i
+        %x_112:i32 = let %50
+        %52:i32 = add %x_112, 1i
+        store %i, %52
+        next_iteration  # -> $B3
       }
     }
-    %38:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-    %x_115:i32 = load %38
+    %53:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+    %54:i32 = load %53
+    %x_115:i32 = let %54
     ret %x_115
   }
 }
-%main_1 = func():void -> %b12 {
-  %b12 = block {
+%main_1 = func():void {
+  $B12: {
     %a_1:ptr<function, i32, read_write> = var
     %param:ptr<function, i32, read_write> = var
     %param_1:ptr<function, i32, read_write> = var
-    %44:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-    %x_39:i32 = load %44
+    %60:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+    %61:i32 = load %60
+    %x_39:i32 = let %61
     store %param, %x_39
-    %x_40:i32 = call %func_i1_, %param
+    %63:i32 = call %func_i1_, %param
+    %x_40:i32 = let %63
     store %a_1, %x_40
-    %47:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
-    %x_42:i32 = load %47
+    %65:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
+    %66:i32 = load %65
+    %x_42:i32 = let %66
     store %param_1, %x_42
-    %x_43:i32 = call %func_i1_, %param_1
-    %x_44:i32 = load %a_1
-    %51:i32 = add %x_44, %x_43
-    store %a_1, %51
-    %x_46:i32 = load %a_1
-    %53:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
-    %x_48:i32 = load %53
-    %55:bool = eq %x_46, %x_48
-    if %55 [t: %b13, f: %b14] {  # if_5
-      %b13 = block {  # true
-        %56:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
-        %x_54:i32 = load %56
-        %58:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-        %x_57:i32 = load %58
-        %60:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-        %x_60:i32 = load %60
-        %62:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
-        %x_63:i32 = load %62
-        %64:f32 = convert %x_54
-        %65:f32 = convert %x_57
-        %66:f32 = convert %x_60
-        %67:f32 = convert %x_63
-        %68:vec4<f32> = construct %64, %65, %66, %67
-        store %x_GLF_color, %68
+    %68:i32 = call %func_i1_, %param_1
+    %x_43:i32 = let %68
+    %70:i32 = load %a_1
+    %x_44:i32 = let %70
+    %72:i32 = add %x_44, %x_43
+    store %a_1, %72
+    %73:i32 = load %a_1
+    %x_46:i32 = let %73
+    %75:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
+    %76:i32 = load %75
+    %x_48:i32 = let %76
+    %78:bool = eq %x_46, %x_48
+    if %78 [t: $B13, f: $B14] {  # if_5
+      $B13: {  # true
+        %79:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
+        %80:i32 = load %79
+        %x_54:i32 = let %80
+        %82:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+        %83:i32 = load %82
+        %x_57:i32 = let %83
+        %85:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+        %86:i32 = load %85
+        %x_60:i32 = let %86
+        %88:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
+        %89:i32 = load %88
+        %x_63:i32 = let %89
+        %91:f32 = convert %x_54
+        %92:f32 = let %91
+        %93:f32 = convert %x_57
+        %94:f32 = let %93
+        %95:f32 = convert %x_60
+        %96:f32 = let %95
+        %97:f32 = convert %x_63
+        %98:vec4<f32> = construct %92, %94, %96, %97
+        store %x_GLF_color, %98
         exit_if  # if_5
       }
-      %b14 = block {  # false
-        %69:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-        %x_67:i32 = load %69
-        %x_68:f32 = convert %x_67
-        %72:vec4<f32> = construct %x_68, %x_68, %x_68, %x_68
-        store %x_GLF_color, %72
+      $B14: {  # false
+        %99:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+        %100:i32 = load %99
+        %x_67:i32 = let %100
+        %102:f32 = convert %x_67
+        %x_68:f32 = let %102
+        %104:vec4<f32> = construct %x_68, %x_68, %x_68, %x_68
+        store %x_GLF_color, %104
         exit_if  # if_5
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b15 {
-  %b15 = block {
-    %74:void = call %main_1
-    %75:vec4<f32> = load %x_GLF_color
-    %76:main_out = construct %75
-    ret %76
+%tint_symbol = @fragment func():main_out {
+  $B15: {
+    %106:void = call %main_1
+    %107:vec4<f32> = load %x_GLF_color
+    %108:main_out = construct %107
+    ret %108
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-matrix-double-transpose/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-matrix-double-transpose/0-opt.spvasm.expected.ir.msl
index 7e7831b..fc175ef 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-matrix-double-transpose/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-matrix-double-transpose/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,76 +12,85 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %m:ptr<function, mat2x2<f32>, read_write> = var
     %5:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
     %6:i32 = load %5
-    %x_30:f32 = convert %6
-    %8:vec2<f32> = construct %x_30, 0.0f
-    %9:vec2<f32> = construct 0.0f, %x_30
-    %10:mat2x2<f32> = construct %8, %9
-    %11:mat2x2<f32> = transpose %10
-    %12:mat2x2<f32> = transpose %11
-    store %m, %12
-    %13:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %14:i32 = load %13
-    %x_39:f32 = convert %14
-    %16:vec2<f32> = construct %x_39, 0.0f
-    %17:vec2<f32> = construct 0.0f, %x_39
-    %x_42:mat2x2<f32> = construct %16, %17
-    %19:ptr<function, vec2<f32>, read_write> = access %m, 0u
-    %20:vec2<f32> = load %19
-    %21:vec2<f32> = access %x_42, 0u
-    %22:vec2<bool> = eq %20, %21
-    %23:bool = all %22
-    %24:ptr<function, vec2<f32>, read_write> = access %m, 1u
+    %7:f32 = convert %6
+    %x_30:f32 = let %7
+    %9:vec2<f32> = construct %x_30, 0.0f
+    %10:vec2<f32> = let %9
+    %11:vec2<f32> = construct 0.0f, %x_30
+    %12:mat2x2<f32> = construct %10, %11
+    %13:mat2x2<f32> = transpose %12
+    %14:mat2x2<f32> = transpose %13
+    store %m, %14
+    %15:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %16:i32 = load %15
+    %17:f32 = convert %16
+    %x_39:f32 = let %17
+    %19:vec2<f32> = construct %x_39, 0.0f
+    %20:vec2<f32> = let %19
+    %21:vec2<f32> = construct 0.0f, %x_39
+    %22:mat2x2<f32> = construct %20, %21
+    %x_42:mat2x2<f32> = let %22
+    %24:ptr<function, vec2<f32>, read_write> = access %m, 0u
     %25:vec2<f32> = load %24
-    %26:vec2<f32> = access %x_42, 1u
+    %26:vec2<f32> = access %x_42, 0u
     %27:vec2<bool> = eq %25, %26
     %28:bool = all %27
-    %29:bool = and %23, %28
-    if %29 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %30:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %31:i32 = load %30
-        %32:f32 = convert %31
-        %33:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %34:i32 = load %33
-        %35:f32 = convert %34
-        %36:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %29:bool = let %28
+    %30:ptr<function, vec2<f32>, read_write> = access %m, 1u
+    %31:vec2<f32> = load %30
+    %32:vec2<f32> = access %x_42, 1u
+    %33:vec2<bool> = eq %31, %32
+    %34:bool = all %33
+    %35:bool = and %29, %34
+    if %35 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %36:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
         %37:i32 = load %36
         %38:f32 = convert %37
-        %39:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %40:i32 = load %39
-        %41:f32 = convert %40
-        %42:vec4<f32> = construct %32, %35, %38, %41
-        store %x_GLF_color, %42
+        %39:f32 = let %38
+        %40:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %41:i32 = load %40
+        %42:f32 = convert %41
+        %43:f32 = let %42
+        %44:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %45:i32 = load %44
+        %46:f32 = convert %45
+        %47:f32 = let %46
+        %48:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %49:i32 = load %48
+        %50:f32 = convert %49
+        %51:vec4<f32> = construct %39, %43, %47, %50
+        store %x_GLF_color, %51
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %43:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %44:i32 = load %43
-        %45:f32 = convert %44
-        %46:vec4<f32> = construct %45
-        store %x_GLF_color, %46
+      $B4: {  # false
+        %52:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %53:i32 = load %52
+        %54:f32 = convert %53
+        %55:vec4<f32> = construct %54
+        store %x_GLF_color, %55
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %48:void = call %main_1
-    %49:vec4<f32> = load %x_GLF_color
-    %50:main_out = construct %49
-    ret %50
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %57:void = call %main_1
+    %58:vec4<f32> = load %x_GLF_color
+    %59:main_out = construct %58
+    ret %59
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-matrix-double-transpose/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-matrix-double-transpose/0-opt.wgsl.expected.ir.msl
index 6d33a6f..8d122b7 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-matrix-double-transpose/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-matrix-double-transpose/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,75 +12,93 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %m:ptr<function, mat2x2<f32>, read_write> = var
     %5:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_29:i32 = load %5
-    %x_30:f32 = convert %x_29
-    %8:vec2<f32> = construct %x_30, 0.0f
-    %9:vec2<f32> = construct 0.0f, %x_30
-    %10:mat2x2<f32> = construct %8, %9
-    %11:mat2x2<f32> = transpose %10
-    %12:mat2x2<f32> = transpose %11
-    store %m, %12
-    %x_36:mat2x2<f32> = load %m
-    %14:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_38:i32 = load %14
-    %x_39:f32 = convert %x_38
-    %17:vec2<f32> = construct %x_39, 0.0f
-    %18:vec2<f32> = construct 0.0f, %x_39
-    %x_42:mat2x2<f32> = construct %17, %18
-    %20:vec2<f32> = access %x_36, 0u
-    %21:vec2<f32> = access %x_42, 0u
-    %22:vec2<bool> = eq %20, %21
-    %23:bool = all %22
-    %24:vec2<f32> = access %x_36, 1u
-    %25:vec2<f32> = access %x_42, 1u
-    %26:vec2<bool> = eq %24, %25
-    %27:bool = all %26
-    %28:bool = and %23, %27
-    if %28 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %29:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_56:i32 = load %29
-        %31:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_59:i32 = load %31
-        %33:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_62:i32 = load %33
-        %35:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_65:i32 = load %35
-        %37:f32 = convert %x_56
-        %38:f32 = convert %x_59
-        %39:f32 = convert %x_62
-        %40:f32 = convert %x_65
-        %41:vec4<f32> = construct %37, %38, %39, %40
-        store %x_GLF_color, %41
+    %6:i32 = load %5
+    %x_29:i32 = let %6
+    %8:f32 = convert %x_29
+    %x_30:f32 = let %8
+    %10:vec2<f32> = construct %x_30, 0.0f
+    %11:vec2<f32> = let %10
+    %12:vec2<f32> = construct 0.0f, %x_30
+    %13:mat2x2<f32> = construct %11, %12
+    %14:mat2x2<f32> = transpose %13
+    %15:mat2x2<f32> = transpose %14
+    store %m, %15
+    %16:mat2x2<f32> = load %m
+    %x_36:mat2x2<f32> = let %16
+    %18:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %19:i32 = load %18
+    %x_38:i32 = let %19
+    %21:f32 = convert %x_38
+    %x_39:f32 = let %21
+    %23:vec2<f32> = construct %x_39, 0.0f
+    %24:vec2<f32> = let %23
+    %25:vec2<f32> = construct 0.0f, %x_39
+    %26:mat2x2<f32> = construct %24, %25
+    %x_42:mat2x2<f32> = let %26
+    %28:vec2<f32> = access %x_36, 0u
+    %29:vec2<f32> = access %x_42, 0u
+    %30:vec2<bool> = eq %28, %29
+    %31:bool = all %30
+    %32:bool = let %31
+    %33:vec2<f32> = access %x_36, 1u
+    %34:vec2<f32> = access %x_42, 1u
+    %35:vec2<bool> = eq %33, %34
+    %36:bool = all %35
+    %37:bool = and %32, %36
+    if %37 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %38:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %39:i32 = load %38
+        %x_56:i32 = let %39
+        %41:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %42:i32 = load %41
+        %x_59:i32 = let %42
+        %44:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %45:i32 = load %44
+        %x_62:i32 = let %45
+        %47:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %48:i32 = load %47
+        %x_65:i32 = let %48
+        %50:f32 = convert %x_56
+        %51:f32 = let %50
+        %52:f32 = convert %x_59
+        %53:f32 = let %52
+        %54:f32 = convert %x_62
+        %55:f32 = let %54
+        %56:f32 = convert %x_65
+        %57:vec4<f32> = construct %51, %53, %55, %56
+        store %x_GLF_color, %57
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %42:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_69:i32 = load %42
-        %x_70:f32 = convert %x_69
-        %45:vec4<f32> = construct %x_70, %x_70, %x_70, %x_70
-        store %x_GLF_color, %45
+      $B4: {  # false
+        %58:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %59:i32 = load %58
+        %x_69:i32 = let %59
+        %61:f32 = convert %x_69
+        %x_70:f32 = let %61
+        %63:vec4<f32> = construct %x_70, %x_70, %x_70, %x_70
+        store %x_GLF_color, %63
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %47:void = call %main_1
-    %48:vec4<f32> = load %x_GLF_color
-    %49:main_out = construct %48
-    ret %49
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %65:void = call %main_1
+    %66:vec4<f32> = load %x_GLF_color
+    %67:main_out = construct %66
+    ret %67
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-matrix-square-mul-with-vector/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-matrix-square-mul-with-vector/0-opt.spvasm.expected.ir.msl
index 2f0c8c0..49d293e 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-matrix-square-mul-with-vector/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-matrix-square-mul-with-vector/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -12,69 +12,70 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %m0:ptr<function, mat2x2<f32>, read_write> = var
     %m1:ptr<function, mat2x2<f32>, read_write> = var
     %v:ptr<function, vec2<f32>, read_write> = var
     %7:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
     %8:f32 = load %7
     %9:vec2<f32> = construct %8, -0.540302276611328125f
-    %10:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %11:f32 = load %10
-    %12:vec2<f32> = construct 0.540302276611328125f, %11
-    %13:mat2x2<f32> = construct %9, %12
-    store %m0, %13
-    %14:mat2x2<f32> = load %m0
+    %10:vec2<f32> = let %9
+    %11:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %12:f32 = load %11
+    %13:vec2<f32> = construct 0.540302276611328125f, %12
+    %14:mat2x2<f32> = construct %10, %13
+    store %m0, %14
     %15:mat2x2<f32> = load %m0
-    %16:mat2x2<f32> = mul %14, %15
-    store %m1, %16
-    %17:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %18:f32 = load %17
-    %19:vec2<f32> = construct %18
-    %20:mat2x2<f32> = load %m1
-    %21:vec2<f32> = mul %19, %20
-    store %v, %21
-    %22:f32 = load_vector_element %v, 0u
-    %23:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %24:f32 = load %23
-    %25:bool = lt %22, %24
-    if %25 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %26:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-        %27:f32 = load %26
-        %28:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-        %29:f32 = load %28
-        %30:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-        %31:f32 = load %30
-        %32:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-        %33:f32 = load %32
-        %34:vec4<f32> = construct %27, %29, %31, %33
-        store %x_GLF_color, %34
+    %16:mat2x2<f32> = load %m0
+    %17:mat2x2<f32> = mul %15, %16
+    store %m1, %17
+    %18:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %19:f32 = load %18
+    %20:vec2<f32> = construct %19
+    %21:mat2x2<f32> = load %m1
+    %22:vec2<f32> = mul %20, %21
+    store %v, %22
+    %23:f32 = load_vector_element %v, 0u
+    %24:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %25:f32 = load %24
+    %26:bool = lt %23, %25
+    if %26 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %27:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+        %28:f32 = load %27
+        %29:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+        %30:f32 = load %29
+        %31:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+        %32:f32 = load %31
+        %33:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+        %34:f32 = load %33
+        %35:vec4<f32> = construct %28, %30, %32, %34
+        store %x_GLF_color, %35
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %35:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-        %36:f32 = load %35
-        %37:vec4<f32> = construct %36
-        store %x_GLF_color, %37
+      $B4: {  # false
+        %36:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+        %37:f32 = load %36
+        %38:vec4<f32> = construct %37
+        store %x_GLF_color, %38
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %39:void = call %main_1
-    %40:vec4<f32> = load %x_GLF_color
-    %41:main_out = construct %40
-    ret %41
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %40:void = call %main_1
+    %41:vec4<f32> = load %x_GLF_color
+    %42:main_out = construct %41
+    ret %42
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-matrix-square-mul-with-vector/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-matrix-square-mul-with-vector/0-opt.wgsl.expected.ir.msl
index ae84e4f..54df980 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-matrix-square-mul-with-vector/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-matrix-square-mul-with-vector/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -12,69 +12,83 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %m0:ptr<function, mat2x2<f32>, read_write> = var
     %m1:ptr<function, mat2x2<f32>, read_write> = var
     %v:ptr<function, vec2<f32>, read_write> = var
     %7:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_35:f32 = load %7
-    %9:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_37:f32 = load %9
-    %11:vec2<f32> = construct %x_35, -0.540302276611328125f
-    %12:vec2<f32> = construct 0.540302276611328125f, %x_37
-    %13:mat2x2<f32> = construct %11, %12
-    store %m0, %13
-    %x_41:mat2x2<f32> = load %m0
-    %x_42:mat2x2<f32> = load %m0
-    %16:mat2x2<f32> = mul %x_41, %x_42
-    store %m1, %16
-    %17:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_45:f32 = load %17
-    %x_47:mat2x2<f32> = load %m1
-    %20:vec2<f32> = construct %x_45, %x_45
-    %21:vec2<f32> = mul %20, %x_47
-    store %v, %21
-    %x_50:f32 = load_vector_element %v, 0u
-    %23:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_52:f32 = load %23
-    %25:bool = lt %x_50, %x_52
-    if %25 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %26:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-        %x_58:f32 = load %26
-        %28:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-        %x_60:f32 = load %28
-        %30:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-        %x_62:f32 = load %30
-        %32:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-        %x_64:f32 = load %32
-        %34:vec4<f32> = construct %x_58, %x_60, %x_62, %x_64
-        store %x_GLF_color, %34
+    %8:f32 = load %7
+    %x_35:f32 = let %8
+    %10:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %11:f32 = load %10
+    %x_37:f32 = let %11
+    %13:vec2<f32> = construct %x_35, -0.540302276611328125f
+    %14:vec2<f32> = let %13
+    %15:vec2<f32> = construct 0.540302276611328125f, %x_37
+    %16:mat2x2<f32> = construct %14, %15
+    store %m0, %16
+    %17:mat2x2<f32> = load %m0
+    %x_41:mat2x2<f32> = let %17
+    %19:mat2x2<f32> = load %m0
+    %x_42:mat2x2<f32> = let %19
+    %21:mat2x2<f32> = mul %x_41, %x_42
+    store %m1, %21
+    %22:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %23:f32 = load %22
+    %x_45:f32 = let %23
+    %25:mat2x2<f32> = load %m1
+    %x_47:mat2x2<f32> = let %25
+    %27:vec2<f32> = construct %x_45, %x_45
+    %28:vec2<f32> = mul %27, %x_47
+    store %v, %28
+    %29:f32 = load_vector_element %v, 0u
+    %x_50:f32 = let %29
+    %31:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %32:f32 = load %31
+    %x_52:f32 = let %32
+    %34:bool = lt %x_50, %x_52
+    if %34 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %35:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+        %36:f32 = load %35
+        %x_58:f32 = let %36
+        %38:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+        %39:f32 = load %38
+        %x_60:f32 = let %39
+        %41:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+        %42:f32 = load %41
+        %x_62:f32 = let %42
+        %44:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+        %45:f32 = load %44
+        %x_64:f32 = let %45
+        %47:vec4<f32> = construct %x_58, %x_60, %x_62, %x_64
+        store %x_GLF_color, %47
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %35:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-        %x_67:f32 = load %35
-        %37:vec4<f32> = construct %x_67, %x_67, %x_67, %x_67
-        store %x_GLF_color, %37
+      $B4: {  # false
+        %48:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+        %49:f32 = load %48
+        %x_67:f32 = let %49
+        %51:vec4<f32> = construct %x_67, %x_67, %x_67, %x_67
+        store %x_GLF_color, %51
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %39:void = call %main_1
-    %40:vec4<f32> = load %x_GLF_color
-    %41:main_out = construct %40
-    ret %41
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %53:void = call %main_1
+    %54:vec4<f32> = load %x_GLF_color
+    %55:main_out = construct %54
+    ret %55
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-max-clamp-same-minval/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-max-clamp-same-minval/0-opt.spvasm.expected.ir.msl
index 83c5719..8f3596e 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-max-clamp-same-minval/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-max-clamp-same-minval/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:i32 @offset(0)
 }
 
@@ -8,28 +8,30 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %4:ptr<uniform, i32, read> = access %x_5, 0u
     %5:i32 = load %4
-    %6:ptr<uniform, i32, read> = access %x_5, 0u
-    %7:i32 = load %6
-    %8:ptr<uniform, i32, read> = access %x_5, 0u
-    %9:i32 = load %8
-    %10:i32 = clamp %7, %9, 1i
-    %11:i32 = max %5, %10
-    %12:bool = eq %11, 1i
-    if %12 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    %6:i32 = let %5
+    %7:ptr<uniform, i32, read> = access %x_5, 0u
+    %8:i32 = load %7
+    %9:ptr<uniform, i32, read> = access %x_5, 0u
+    %10:i32 = load %9
+    %11:i32 = max %8, %10
+    %12:i32 = min %11, 1i
+    %13:i32 = max %6, %12
+    %14:bool = eq %13, 1i
+    if %14 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_GLF_color, vec4<f32>(1.0f)
         exit_if  # if_1
       }
@@ -37,12 +39,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %14:void = call %main_1
-    %15:vec4<f32> = load %x_GLF_color
-    %16:main_out = construct %15
-    ret %16
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %16:void = call %main_1
+    %17:vec4<f32> = load %x_GLF_color
+    %18:main_out = construct %17
+    ret %18
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-max-clamp-same-minval/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-max-clamp-same-minval/0-opt.wgsl.expected.ir.msl
index f139e39..0b69c8f 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-max-clamp-same-minval/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-max-clamp-same-minval/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:i32 @offset(0)
 }
 
@@ -8,28 +8,32 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %4:ptr<uniform, i32, read> = access %x_5, 0u
-    %x_23:i32 = load %4
-    %6:ptr<uniform, i32, read> = access %x_5, 0u
-    %x_25:i32 = load %6
-    %8:ptr<uniform, i32, read> = access %x_5, 0u
-    %x_27:i32 = load %8
-    %10:i32 = clamp %x_25, %x_27, 1i
-    %11:i32 = max %x_23, %10
-    %12:bool = eq %11, 1i
-    if %12 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    %5:i32 = load %4
+    %x_23:i32 = let %5
+    %7:ptr<uniform, i32, read> = access %x_5, 0u
+    %8:i32 = load %7
+    %x_25:i32 = let %8
+    %10:ptr<uniform, i32, read> = access %x_5, 0u
+    %11:i32 = load %10
+    %x_27:i32 = let %11
+    %13:i32 = max %x_25, %x_27
+    %14:i32 = min %13, 1i
+    %15:i32 = max %x_23, %14
+    %16:bool = eq %15, 1i
+    if %16 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_GLF_color, vec4<f32>(1.0f)
         exit_if  # if_1
       }
@@ -37,12 +41,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %14:void = call %main_1
-    %15:vec4<f32> = load %x_GLF_color
-    %16:main_out = construct %15
-    ret %16
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %18:void = call %main_1
+    %19:vec4<f32> = load %x_GLF_color
+    %20:main_out = construct %19
+    ret %20
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-max-min-less-than/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-max-min-less-than/0-opt.spvasm.expected.ir.msl
index 63ee447..668af52 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-max-min-less-than/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-max-min-less-than/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,56 +12,68 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %6:f32 = load_vector_element %gl_FragCoord, 0u
-    %7:i32 = convert %6
-    %8:i32 = min 1i, %7
-    %9:i32 = max 1i, %8
-    store %a, %9
-    %10:i32 = load %a
-    %11:bool = lt %10, 2i
-    if %11 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %12:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %13:i32 = load %12
-        %14:f32 = convert %13
-        %15:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %16:i32 = load %15
-        %17:f32 = convert %16
-        %18:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %19:i32 = load %18
-        %20:f32 = convert %19
-        %21:vec4<f32> = construct 1.0f, %14, %17, %20
-        store %x_GLF_color, %21
+    %7:i32 = call %tint_f32_to_i32, %6
+    %9:i32 = min 1i, %7
+    %10:i32 = max 1i, %9
+    store %a, %10
+    %11:i32 = load %a
+    %12:bool = lt %11, 2i
+    if %12 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %13:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %14:i32 = load %13
+        %15:f32 = convert %14
+        %16:f32 = let %15
+        %17:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %18:i32 = load %17
+        %19:f32 = convert %18
+        %20:f32 = let %19
+        %21:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %22:i32 = load %21
+        %23:f32 = convert %22
+        %24:vec4<f32> = construct 1.0f, %16, %20, %23
+        store %x_GLF_color, %24
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %22:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %23:i32 = load %22
-        %24:f32 = convert %23
-        %25:vec4<f32> = construct %24
-        store %x_GLF_color, %25
+      $B4: {  # false
+        %25:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %26:i32 = load %25
+        %27:f32 = convert %26
+        %28:vec4<f32> = construct %27
+        store %x_GLF_color, %28
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b5 {
-  %b5 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B5: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %28:void = call %main_1
-    %29:vec4<f32> = load %x_GLF_color
-    %30:main_out = construct %29
-    ret %30
+    %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 {
+  $B6: {
+    %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
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-max-min-less-than/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-max-min-less-than/0-opt.wgsl.expected.ir.msl
index 5a77d0e..dd833ea 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-max-min-less-than/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-max-min-less-than/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,56 +12,75 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
-    %x_30:f32 = load_vector_element %gl_FragCoord, 0u
-    %7:i32 = convert %x_30
-    %8:i32 = min 1i, %7
-    %9:i32 = max 1i, %8
-    store %a, %9
-    %x_34:i32 = load %a
-    %11:bool = lt %x_34, 2i
-    if %11 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %12:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %x_40:i32 = load %12
-        %14:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %x_43:i32 = load %14
-        %16:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %x_46:i32 = load %16
-        %18:f32 = convert %x_40
-        %19:f32 = convert %x_43
-        %20:f32 = convert %x_46
-        %21:vec4<f32> = construct 1.0f, %18, %19, %20
-        store %x_GLF_color, %21
+    %6:f32 = load_vector_element %gl_FragCoord, 0u
+    %x_30:f32 = let %6
+    %8:i32 = call %tint_f32_to_i32, %x_30
+    %10:i32 = min 1i, %8
+    %11:i32 = max 1i, %10
+    store %a, %11
+    %12:i32 = load %a
+    %x_34:i32 = let %12
+    %14:bool = lt %x_34, 2i
+    if %14 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %15:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %16:i32 = load %15
+        %x_40:i32 = let %16
+        %18:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %19:i32 = load %18
+        %x_43:i32 = let %19
+        %21:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %22:i32 = load %21
+        %x_46:i32 = let %22
+        %24:f32 = convert %x_40
+        %25:f32 = let %24
+        %26:f32 = convert %x_43
+        %27:f32 = let %26
+        %28:f32 = convert %x_46
+        %29:vec4<f32> = construct 1.0f, %25, %27, %28
+        store %x_GLF_color, %29
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %22:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %x_50:i32 = load %22
-        %x_51:f32 = convert %x_50
-        %25:vec4<f32> = construct %x_51, %x_51, %x_51, %x_51
-        store %x_GLF_color, %25
+      $B4: {  # false
+        %30:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %31:i32 = load %30
+        %x_50:i32 = let %31
+        %33:f32 = convert %x_50
+        %x_51:f32 = let %33
+        %35:vec4<f32> = construct %x_51, %x_51, %x_51, %x_51
+        store %x_GLF_color, %35
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b5 {
-  %b5 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B5: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %28:void = call %main_1
-    %29:vec4<f32> = load %x_GLF_color
-    %30:main_out = construct %29
-    ret %30
+    %38:void = call %main_1
+    %39:vec4<f32> = load %x_GLF_color
+    %40:main_out = construct %39
+    ret %40
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B6: {
+    %42:i32 = convert %value
+    %43:bool = gte %value, -2147483648.0f
+    %44:i32 = select -2147483648i, %42, %43
+    %45:bool = lte %value, 2147483520.0f
+    %46:i32 = select 2147483647i, %44, %45
+    ret %46
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-mem-pass-sum-struct-members/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-mem-pass-sum-struct-members/0-opt.spvasm.expected.ir.msl
index 3aecd6c1..38e99b1 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-mem-pass-sum-struct-members/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-mem-pass-sum-struct-members/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:i32 @offset(0)
 }
 
@@ -14,20 +14,20 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %x_43:ptr<function, i32, read_write> = var
     %x_44:ptr<function, bool, read_write> = var, false
     %arr:ptr<function, array<S, 2>, read_write> = var
     %param:ptr<function, S, read_write> = var
     %param_1:ptr<function, i32, read_write> = var
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3] {  # loop_1
+      $B3: {  # body
         %x_50:ptr<function, i32, read_write> = var
         %10:ptr<uniform, i32, read> = access %x_10, 0u
         %11:i32 = load %10
@@ -38,87 +38,95 @@
         %14:ptr<function, i32, read_write> = access %arr, 1i, 0u
         %15:i32 = load %14
         %16:bool = lt %15, 1i
-        if %16 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %16 [t: $B4, f: $B5] {  # if_1
+          $B4: {  # true
             store %x_GLF_color, vec4<f32>(0.0f)
             store %x_44, true
             exit_loop  # loop_1
           }
-          %b6 = block {  # false
+          $B5: {  # false
             %17:ptr<function, S, read_write> = access %arr, 1i
             %18:S = load %17
             store %param, %18
             %19:i32 = load %x_50
             %20:i32 = add 2i, %19
             store %param_1, %20
-            %x_61:i32 = load %param_1
-            %x_63:S = load %param
+            %21:i32 = load %param_1
+            %x_61:i32 = let %21
+            %23:S = load %param
+            %x_63:S = let %23
             %x_64_1:ptr<function, S, read_write> = var, %x_63
-            %24:ptr<function, i32, read_write> = access %x_64_1, 0u
-            store %24, %x_61
-            %25:S = load %x_64_1
-            store %param, %25
-            %26:ptr<function, i32, read_write> = access %param, 0u
-            %27:i32 = load %26
-            %28:bool = eq %27, 2i
-            if %28 [t: %b7] {  # if_2
-              %b7 = block {  # true
-                %x_70:S = load %param
+            %26:ptr<function, i32, read_write> = access %x_64_1, 0u
+            store %26, %x_61
+            %27:S = load %x_64_1
+            store %param, %27
+            %28:ptr<function, i32, read_write> = access %param, 0u
+            %29:i32 = load %28
+            %30:bool = eq %29, 2i
+            if %30 [t: $B6] {  # if_2
+              $B6: {  # true
+                %31:S = load %param
+                %x_70:S = let %31
                 %x_71_1:ptr<function, S, read_write> = var, %x_70
-                %31:ptr<function, i32, read_write> = access %x_71_1, 0u
-                store %31, 9i
-                %32:S = load %x_71_1
-                store %param, %32
+                %34:ptr<function, i32, read_write> = access %x_71_1, 0u
+                store %34, 9i
+                %35:S = load %x_71_1
+                store %param, %35
                 exit_if  # if_2
               }
             }
-            %x_72:i32 = load %param_1
-            %x_75:S = load %param
+            %36:i32 = load %param_1
+            %x_72:i32 = let %36
+            %38:S = load %param
+            %x_75:S = let %38
             %x_76_1:ptr<function, S, read_write> = var, %x_75
-            %36:ptr<function, i32, read_write> = access %x_76_1, 1u
-            %37:i32 = add %x_72, 1i
-            store %36, %37
-            %38:S = load %x_76_1
-            store %param, %38
-            %x_77:i32 = load %param_1
-            %x_80:S = load %param
+            %41:ptr<function, i32, read_write> = access %x_76_1, 1u
+            %42:i32 = add %x_72, 1i
+            store %41, %42
+            %43:S = load %x_76_1
+            store %param, %43
+            %44:i32 = load %param_1
+            %x_77:i32 = let %44
+            %46:S = load %param
+            %x_80:S = let %46
             %x_81_1:ptr<function, S, read_write> = var, %x_80
-            %42:ptr<function, i32, read_write> = access %x_81_1, 2u
-            %43:i32 = add %x_77, 2i
-            store %42, %43
-            %44:S = load %x_81_1
-            store %param, %44
-            %45:ptr<function, i32, read_write> = access %param, 1u
-            %46:i32 = load %45
-            %47:bool = eq %46, 2i
-            if %47 [t: %b8] {  # if_3
-              %b8 = block {  # true
-                %x_87:S = load %param
+            %49:ptr<function, i32, read_write> = access %x_81_1, 2u
+            %50:i32 = add %x_77, 2i
+            store %49, %50
+            %51:S = load %x_81_1
+            store %param, %51
+            %52:ptr<function, i32, read_write> = access %param, 1u
+            %53:i32 = load %52
+            %54:bool = eq %53, 2i
+            if %54 [t: $B7] {  # if_3
+              $B7: {  # true
+                %55:S = load %param
+                %x_87:S = let %55
                 %x_88_1:ptr<function, S, read_write> = var, %x_87
-                %50:ptr<function, i32, read_write> = access %x_88_1, 1u
-                store %50, 7i
-                %51:S = load %x_88_1
-                store %param, %51
+                %58:ptr<function, i32, read_write> = access %x_88_1, 1u
+                store %58, 7i
+                %59:S = load %x_88_1
+                store %param, %59
                 exit_if  # if_3
               }
             }
-            %52:ptr<function, i32, read_write> = access %param, 0u
-            %53:i32 = load %52
-            %54:ptr<function, i32, read_write> = access %param, 1u
-            %55:i32 = load %54
-            %56:i32 = add %53, %55
-            %57:ptr<function, i32, read_write> = access %param, 2u
-            %58:i32 = load %57
-            %59:i32 = add %56, %58
-            store %x_43, %59
-            %60:i32 = load %x_43
-            %61:bool = eq %60, 12i
-            if %61 [t: %b9, f: %b10] {  # if_4
-              %b9 = block {  # true
+            %60:ptr<function, i32, read_write> = access %param, 0u
+            %61:i32 = load %60
+            %62:ptr<function, i32, read_write> = access %param, 1u
+            %63:i32 = load %62
+            %64:i32 = add %61, %63
+            %65:ptr<function, i32, read_write> = access %param, 2u
+            %66:i32 = load %65
+            %67:i32 = add %64, %66
+            store %x_43, %67
+            %68:i32 = load %x_43
+            %69:bool = eq %68, 12i
+            if %69 [t: $B8, f: $B9] {  # if_4
+              $B8: {  # true
                 store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
                 exit_if  # if_4
               }
-              %b10 = block {  # false
+              $B9: {  # false
                 store %x_GLF_color, vec4<f32>(0.0f)
                 exit_if  # if_4
               }
@@ -129,63 +137,63 @@
         store %x_44, true
         exit_loop  # loop_1
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
-      }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b11 {
-  %b11 = block {
-    %63:void = call %main_1
-    %64:vec4<f32> = load %x_GLF_color
-    %65:main_out = construct %64
-    ret %65
+%tint_symbol = @fragment func():main_out {
+  $B10: {
+    %71:void = call %main_1
+    %72:vec4<f32> = load %x_GLF_color
+    %73:main_out = construct %72
+    ret %73
   }
 }
-%func_struct_S_i1_i1_i11_i1_ = func(%s:ptr<function, S, read_write>, %x:ptr<function, i32, read_write>):i32 -> %b12 {
-  %b12 = block {
-    %69:ptr<function, i32, read_write> = access %s, 0u
-    %70:i32 = load %x
-    store %69, %70
-    %71:ptr<function, i32, read_write> = access %s, 0u
-    %72:i32 = load %71
-    %73:bool = eq %72, 2i
-    if %73 [t: %b13] {  # if_5
-      %b13 = block {  # true
-        %74:ptr<function, i32, read_write> = access %s, 0u
-        store %74, 9i
+%func_struct_S_i1_i1_i11_i1_ = func(%s:ptr<function, S, read_write>, %x:ptr<function, i32, read_write>):i32 {
+  $B11: {
+    %77:ptr<function, i32, read_write> = access %s, 0u
+    %78:i32 = load %x
+    store %77, %78
+    %79:ptr<function, i32, read_write> = access %s, 0u
+    %80:i32 = load %79
+    %81:bool = eq %80, 2i
+    if %81 [t: $B12] {  # if_5
+      $B12: {  # true
+        %82:ptr<function, i32, read_write> = access %s, 0u
+        store %82, 9i
         exit_if  # if_5
       }
     }
-    %75:ptr<function, i32, read_write> = access %s, 1u
-    %76:i32 = load %x
-    %77:i32 = add %76, 1i
-    store %75, %77
-    %78:ptr<function, i32, read_write> = access %s, 2u
-    %79:i32 = load %x
-    %80:i32 = add %79, 2i
-    store %78, %80
-    %81:ptr<function, i32, read_write> = access %s, 1u
-    %82:i32 = load %81
-    %83:bool = eq %82, 2i
-    if %83 [t: %b14] {  # if_6
-      %b14 = block {  # true
-        %84:ptr<function, i32, read_write> = access %s, 1u
-        store %84, 7i
+    %83:ptr<function, i32, read_write> = access %s, 1u
+    %84:i32 = load %x
+    %85:i32 = add %84, 1i
+    store %83, %85
+    %86:ptr<function, i32, read_write> = access %s, 2u
+    %87:i32 = load %x
+    %88:i32 = add %87, 2i
+    store %86, %88
+    %89:ptr<function, i32, read_write> = access %s, 1u
+    %90:i32 = load %89
+    %91:bool = eq %90, 2i
+    if %91 [t: $B13] {  # if_6
+      $B13: {  # true
+        %92:ptr<function, i32, read_write> = access %s, 1u
+        store %92, 7i
         exit_if  # if_6
       }
     }
-    %85:ptr<function, i32, read_write> = access %s, 0u
-    %x_119:i32 = load %85
-    %87:ptr<function, i32, read_write> = access %s, 1u
-    %x_120:i32 = load %87
-    %89:ptr<function, i32, read_write> = access %s, 2u
-    %x_122:i32 = load %89
-    %91:i32 = add %x_119, %x_120
-    %92:i32 = add %91, %x_122
-    ret %92
+    %93:ptr<function, i32, read_write> = access %s, 0u
+    %94:i32 = load %93
+    %x_119:i32 = let %94
+    %96:ptr<function, i32, read_write> = access %s, 1u
+    %97:i32 = load %96
+    %x_120:i32 = let %97
+    %99:ptr<function, i32, read_write> = access %s, 2u
+    %100:i32 = load %99
+    %x_122:i32 = let %100
+    %102:i32 = add %x_119, %x_120
+    %103:i32 = add %102, %x_122
+    ret %103
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-mem-pass-sum-struct-members/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-mem-pass-sum-struct-members/0-opt.wgsl.expected.ir.msl
index b87d763..f6a7a73 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-mem-pass-sum-struct-members/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-mem-pass-sum-struct-members/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:i32 @offset(0)
 }
 
@@ -14,20 +14,20 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %x_43:ptr<function, i32, read_write> = var
     %x_44:ptr<function, bool, read_write> = var, false
     %arr:ptr<function, array<S, 2>, read_write> = var
     %param:ptr<function, S, read_write> = var
     %param_1:ptr<function, i32, read_write> = var
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3] {  # loop_1
+      $B3: {  # body
         %x_50:ptr<function, i32, read_write> = var
         %10:ptr<uniform, i32, read> = access %x_10, 0u
         %11:i32 = load %10
@@ -36,90 +36,111 @@
         %13:ptr<function, i32, read_write> = access %arr, %12, 0u
         store %13, 2i
         %14:ptr<function, i32, read_write> = access %arr, 1i, 0u
-        %x_53:i32 = load %14
-        %16:bool = lt %x_53, 1i
-        if %16 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %15:i32 = load %14
+        %x_53:i32 = let %15
+        %17:bool = lt %x_53, 1i
+        if %17 [t: $B4, f: $B5] {  # if_1
+          $B4: {  # true
             store %x_GLF_color, vec4<f32>(0.0f)
             store %x_44, true
             exit_loop  # loop_1
           }
-          %b6 = block {  # false
-            %17:ptr<function, S, read_write> = access %arr, 1i
-            %x_60:S = load %17
+          $B5: {  # false
+            %18:ptr<function, S, read_write> = access %arr, 1i
+            %19:S = load %18
+            %x_60:S = let %19
             store %param, %x_60
-            %19:i32 = load %x_50
-            %20:i32 = bitcast %19
-            %21:i32 = add 2i, %20
-            store %param_1, %21
-            %x_61:i32 = load %param_1
-            %x_63:S = load %param
+            %21:i32 = load %x_50
+            %22:i32 = bitcast %21
+            %23:i32 = add 2i, %22
+            store %param_1, %23
+            %24:i32 = load %param_1
+            %x_61:i32 = let %24
+            %26:S = load %param
+            %x_63:S = let %26
             %x_64_1:ptr<function, S, read_write> = var, %x_63
-            %25:ptr<function, i32, read_write> = access %x_64_1, 0u
-            store %25, %x_61
-            %x_64:S = load %x_64_1
+            %29:ptr<function, i32, read_write> = access %x_64_1, 0u
+            store %29, %x_61
+            %30:S = load %x_64_1
+            %x_64:S = let %30
             store %param, %x_64
-            %x_65:S = load %param
-            %28:i32 = access %x_65, 0u
-            %29:bool = eq %28, 2i
-            if %29 [t: %b7] {  # if_2
-              %b7 = block {  # true
-                %x_70:S = load %param
+            %32:S = load %param
+            %x_65:S = let %32
+            %34:i32 = access %x_65, 0u
+            %35:bool = eq %34, 2i
+            if %35 [t: $B6] {  # if_2
+              $B6: {  # true
+                %36:S = load %param
+                %x_70:S = let %36
                 %x_71_1:ptr<function, S, read_write> = var, %x_70
-                %32:ptr<function, i32, read_write> = access %x_71_1, 0u
-                store %32, 9i
-                %x_71:S = load %x_71_1
+                %39:ptr<function, i32, read_write> = access %x_71_1, 0u
+                store %39, 9i
+                %40:S = load %x_71_1
+                %x_71:S = let %40
                 store %param, %x_71
                 exit_if  # if_2
               }
             }
-            %x_72:i32 = load %param_1
-            %x_75:S = load %param
+            %42:i32 = load %param_1
+            %x_72:i32 = let %42
+            %44:S = load %param
+            %x_75:S = let %44
             %x_76_1:ptr<function, S, read_write> = var, %x_75
-            %37:ptr<function, i32, read_write> = access %x_76_1, 1u
-            %38:i32 = add %x_72, 1i
-            store %37, %38
-            %x_76:S = load %x_76_1
+            %47:ptr<function, i32, read_write> = access %x_76_1, 1u
+            %48:i32 = add %x_72, 1i
+            store %47, %48
+            %49:S = load %x_76_1
+            %x_76:S = let %49
             store %param, %x_76
-            %x_77:i32 = load %param_1
-            %x_80:S = load %param
+            %51:i32 = load %param_1
+            %x_77:i32 = let %51
+            %53:S = load %param
+            %x_80:S = let %53
             %x_81_1:ptr<function, S, read_write> = var, %x_80
-            %43:ptr<function, i32, read_write> = access %x_81_1, 2u
-            %44:i32 = add %x_77, 2i
-            store %43, %44
-            %x_81:S = load %x_81_1
+            %56:ptr<function, i32, read_write> = access %x_81_1, 2u
+            %57:i32 = add %x_77, 2i
+            store %56, %57
+            %58:S = load %x_81_1
+            %x_81:S = let %58
             store %param, %x_81
-            %x_82:S = load %param
-            %47:i32 = access %x_82, 1u
-            %48:bool = eq %47, 2i
-            if %48 [t: %b8] {  # if_3
-              %b8 = block {  # true
-                %x_87:S = load %param
+            %60:S = load %param
+            %x_82:S = let %60
+            %62:i32 = access %x_82, 1u
+            %63:bool = eq %62, 2i
+            if %63 [t: $B7] {  # if_3
+              $B7: {  # true
+                %64:S = load %param
+                %x_87:S = let %64
                 %x_88_1:ptr<function, S, read_write> = var, %x_87
-                %51:ptr<function, i32, read_write> = access %x_88_1, 1u
-                store %51, 7i
-                %x_88:S = load %x_88_1
+                %67:ptr<function, i32, read_write> = access %x_88_1, 1u
+                store %67, 7i
+                %68:S = load %x_88_1
+                %x_88:S = let %68
                 store %param, %x_88
                 exit_if  # if_3
               }
             }
-            %x_89:S = load %param
-            %x_91:S = load %param
-            %x_94:S = load %param
-            %56:i32 = access %x_89, 0u
-            %57:i32 = access %x_91, 1u
-            %58:i32 = add %56, %57
-            %59:i32 = access %x_94, 2u
-            %60:i32 = add %58, %59
-            store %x_43, %60
-            %x_97:i32 = load %x_43
-            %62:bool = eq %x_97, 12i
-            if %62 [t: %b9, f: %b10] {  # if_4
-              %b9 = block {  # true
+            %70:S = load %param
+            %x_89:S = let %70
+            %72:S = load %param
+            %x_91:S = let %72
+            %74:S = load %param
+            %x_94:S = let %74
+            %76:i32 = access %x_89, 0u
+            %77:i32 = access %x_91, 1u
+            %78:i32 = add %76, %77
+            %79:i32 = access %x_94, 2u
+            %80:i32 = add %78, %79
+            store %x_43, %80
+            %81:i32 = load %x_43
+            %x_97:i32 = let %81
+            %83:bool = eq %x_97, 12i
+            if %83 [t: $B8, f: $B9] {  # if_4
+              $B8: {  # true
                 store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
                 exit_if  # if_4
               }
-              %b10 = block {  # false
+              $B9: {  # false
                 store %x_GLF_color, vec4<f32>(0.0f)
                 exit_if  # if_4
               }
@@ -130,63 +151,68 @@
         store %x_44, true
         exit_loop  # loop_1
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
-      }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b11 {
-  %b11 = block {
-    %64:void = call %main_1
-    %65:vec4<f32> = load %x_GLF_color
-    %66:main_out = construct %65
-    ret %66
+%tint_symbol = @fragment func():main_out {
+  $B10: {
+    %85:void = call %main_1
+    %86:vec4<f32> = load %x_GLF_color
+    %87:main_out = construct %86
+    ret %87
   }
 }
-%func_struct_S_i1_i1_i11_i1_ = func(%s:ptr<function, S, read_write>, %x:ptr<function, i32, read_write>):i32 -> %b12 {
-  %b12 = block {
-    %x_103:i32 = load %x
-    %71:ptr<function, i32, read_write> = access %s, 0u
-    store %71, %x_103
-    %72:ptr<function, i32, read_write> = access %s, 0u
-    %x_105:i32 = load %72
-    %74:bool = eq %x_105, 2i
-    if %74 [t: %b13] {  # if_5
-      %b13 = block {  # true
-        %75:ptr<function, i32, read_write> = access %s, 0u
-        store %75, 9i
+%func_struct_S_i1_i1_i11_i1_ = func(%s:ptr<function, S, read_write>, %x:ptr<function, i32, read_write>):i32 {
+  $B11: {
+    %91:i32 = load %x
+    %x_103:i32 = let %91
+    %93:ptr<function, i32, read_write> = access %s, 0u
+    store %93, %x_103
+    %94:ptr<function, i32, read_write> = access %s, 0u
+    %95:i32 = load %94
+    %x_105:i32 = let %95
+    %97:bool = eq %x_105, 2i
+    if %97 [t: $B12] {  # if_5
+      $B12: {  # true
+        %98:ptr<function, i32, read_write> = access %s, 0u
+        store %98, 9i
         exit_if  # if_5
       }
     }
-    %x_109:i32 = load %x
-    %77:ptr<function, i32, read_write> = access %s, 1u
-    %78:i32 = add %x_109, 1i
-    store %77, %78
-    %x_112:i32 = load %x
-    %80:ptr<function, i32, read_write> = access %s, 2u
-    %81:i32 = add %x_112, 2i
-    store %80, %81
-    %82:ptr<function, i32, read_write> = access %s, 1u
-    %x_115:i32 = load %82
-    %84:bool = eq %x_115, 2i
-    if %84 [t: %b14] {  # if_6
-      %b14 = block {  # true
-        %85:ptr<function, i32, read_write> = access %s, 1u
-        store %85, 7i
+    %99:i32 = load %x
+    %x_109:i32 = let %99
+    %101:ptr<function, i32, read_write> = access %s, 1u
+    %102:i32 = add %x_109, 1i
+    store %101, %102
+    %103:i32 = load %x
+    %x_112:i32 = let %103
+    %105:ptr<function, i32, read_write> = access %s, 2u
+    %106:i32 = add %x_112, 2i
+    store %105, %106
+    %107:ptr<function, i32, read_write> = access %s, 1u
+    %108:i32 = load %107
+    %x_115:i32 = let %108
+    %110:bool = eq %x_115, 2i
+    if %110 [t: $B13] {  # if_6
+      $B13: {  # true
+        %111:ptr<function, i32, read_write> = access %s, 1u
+        store %111, 7i
         exit_if  # if_6
       }
     }
-    %86:ptr<function, i32, read_write> = access %s, 0u
-    %x_119:i32 = load %86
-    %88:ptr<function, i32, read_write> = access %s, 1u
-    %x_120:i32 = load %88
-    %90:ptr<function, i32, read_write> = access %s, 2u
-    %x_122:i32 = load %90
-    %92:i32 = add %x_119, %x_120
-    %93:i32 = add %92, %x_122
-    ret %93
+    %112:ptr<function, i32, read_write> = access %s, 0u
+    %113:i32 = load %112
+    %x_119:i32 = let %113
+    %115:ptr<function, i32, read_write> = access %s, 1u
+    %116:i32 = load %115
+    %x_120:i32 = let %116
+    %118:ptr<function, i32, read_write> = access %s, 2u
+    %119:i32 = load %118
+    %x_122:i32 = let %119
+    %121:i32 = add %x_119, %x_120
+    %122:i32 = add %121, %x_122
+    ret %122
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-mem-pass-unused-component/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-mem-pass-unused-component/0-opt.spvasm.expected.ir.msl
index 8d0b322..1cdb93b 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-mem-pass-unused-component/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-mem-pass-unused-component/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   two:f32 @offset(0)
 }
 
@@ -8,41 +8,42 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%func_vf2_ = func(%v:ptr<function, vec2<f32>, read_write>):f32 -> %b2 {
-  %b2 = block {
+%func_vf2_ = func(%v:ptr<function, vec2<f32>, read_write>):f32 {
+  $B2: {
     %5:ptr<uniform, f32, read> = access %x_7, 0u
     %6:f32 = load %5
     store_vector_element %v, 0u, %6
     %7:f32 = load_vector_element %v, 1u
     %8:bool = lt %7, 1.0f
-    if %8 [t: %b3] {  # if_1
-      %b3 = block {  # true
+    if %8 [t: $B3] {  # if_1
+      $B3: {  # true
         ret 1.0f
       }
     }
     ret 5.0f
   }
 }
-%main_1 = func():void -> %b4 {
-  %b4 = block {
+%main_1 = func():void {
+  $B4: {
     %f:ptr<function, f32, read_write> = var
     %param:ptr<function, vec2<f32>, read_write> = var
     store %param, vec2<f32>(1.0f)
-    %x_34:f32 = call %func_vf2_, %param
+    %12:f32 = call %func_vf2_, %param
+    %x_34:f32 = let %12
     store %f, %x_34
-    %13:f32 = load %f
-    %14:bool = eq %13, 5.0f
-    if %14 [t: %b5, f: %b6] {  # if_2
-      %b5 = block {  # true
+    %14:f32 = load %f
+    %15:bool = eq %14, 5.0f
+    if %15 [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 = block {  # false
+      $B6: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_2
       }
@@ -50,12 +51,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b7 {
-  %b7 = block {
-    %16:void = call %main_1
-    %17:vec4<f32> = load %x_GLF_color
-    %18:main_out = construct %17
-    ret %18
+%tint_symbol = @fragment func():main_out {
+  $B7: {
+    %17:void = call %main_1
+    %18:vec4<f32> = load %x_GLF_color
+    %19:main_out = construct %18
+    ret %19
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-mem-pass-unused-component/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-mem-pass-unused-component/0-opt.wgsl.expected.ir.msl
index 9643a8a..1f0362c2 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-mem-pass-unused-component/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-mem-pass-unused-component/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   two:f32 @offset(0)
 }
 
@@ -8,41 +8,45 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%func_vf2_ = func(%v:ptr<function, vec2<f32>, read_write>):f32 -> %b2 {
-  %b2 = block {
+%func_vf2_ = func(%v:ptr<function, vec2<f32>, read_write>):f32 {
+  $B2: {
     %5:ptr<uniform, f32, read> = access %x_7, 0u
-    %x_42:f32 = load %5
+    %6:f32 = load %5
+    %x_42:f32 = let %6
     store_vector_element %v, 0u, %x_42
-    %x_45:f32 = load_vector_element %v, 1u
-    %8:bool = lt %x_45, 1.0f
-    if %8 [t: %b3] {  # if_1
-      %b3 = block {  # true
+    %8:f32 = load_vector_element %v, 1u
+    %x_45:f32 = let %8
+    %10:bool = lt %x_45, 1.0f
+    if %10 [t: $B3] {  # if_1
+      $B3: {  # true
         ret 1.0f
       }
     }
     ret 5.0f
   }
 }
-%main_1 = func():void -> %b4 {
-  %b4 = block {
+%main_1 = func():void {
+  $B4: {
     %f:ptr<function, f32, read_write> = var
     %param:ptr<function, vec2<f32>, read_write> = var
     store %param, vec2<f32>(1.0f)
-    %x_34:f32 = call %func_vf2_, %param
+    %14:f32 = call %func_vf2_, %param
+    %x_34:f32 = let %14
     store %f, %x_34
-    %x_35:f32 = load %f
-    %14:bool = eq %x_35, 5.0f
-    if %14 [t: %b5, f: %b6] {  # if_2
-      %b5 = block {  # true
+    %16:f32 = load %f
+    %x_35:f32 = let %16
+    %18:bool = eq %x_35, 5.0f
+    if %18 [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 = block {  # false
+      $B6: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_2
       }
@@ -50,12 +54,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b7 {
-  %b7 = block {
-    %16:void = call %main_1
-    %17:vec4<f32> = load %x_GLF_color
-    %18:main_out = construct %17
-    ret %18
+%tint_symbol = @fragment func():main_out {
+  $B7: {
+    %20:void = call %main_1
+    %21:vec4<f32> = load %x_GLF_color
+    %22:main_out = construct %21
+    ret %22
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-merge-return-condition-twice/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-merge-return-condition-twice/0-opt.spvasm.expected.ir.msl
index 331b5c7..b9add96 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-merge-return-condition-twice/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-merge-return-condition-twice/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   three:f32 @offset(0)
 }
 
@@ -8,25 +8,25 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%func_ = func():f32 {
+  $B2: {
     %b:ptr<function, f32, read_write> = var
     %x_34:ptr<function, f32, read_write> = var
     %x_48:ptr<function, f32, read_write> = var
     store %b, 2.0f
     store %x_34, 2.0f
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %7:ptr<uniform, f32, read> = access %x_7, 0u
         %8:f32 = load %7
         %9:bool = eq %8, 0.0f
-        if %9 [t: %b5] {  # if_1
-          %b5 = block {  # true
+        if %9 [t: $B5] {  # if_1
+          $B5: {  # true
             %10:f32 = load %x_34
             store %x_48, %10
             exit_loop  # loop_1
@@ -35,34 +35,35 @@
         %11:ptr<uniform, f32, read> = access %x_7, 0u
         %12:f32 = load %11
         %13:bool = eq %12, 0.0f
-        if %13 [t: %b6] {  # if_2
-          %b6 = block {  # true
+        if %13 [t: $B6] {  # if_2
+          $B6: {  # true
             ret 1.0f
           }
         }
         store %b, 1.0f
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
+      $B4: {  # continuing
         store %x_34, 1.0f
         store %x_48, 1.0f
-        break_if true %b3
+        break_if true  # -> [t: exit_loop loop_1, f: $B3]
       }
     }
     %14:f32 = load %x_48
     ret %14
   }
 }
-%main_1 = func():void -> %b7 {
-  %b7 = block {
-    %x_27:f32 = call %func_
-    %17:bool = eq %x_27, 1.0f
-    if %17 [t: %b8, f: %b9] {  # if_3
-      %b8 = block {  # true
+%main_1 = func():void {
+  $B7: {
+    %16:f32 = call %func_
+    %x_27:f32 = let %16
+    %18:bool = eq %x_27, 1.0f
+    if %18 [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 = block {  # false
+      $B9: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_3
       }
@@ -70,12 +71,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b10 {
-  %b10 = block {
-    %19:void = call %main_1
-    %20:vec4<f32> = load %x_GLF_color
-    %21:main_out = construct %20
-    ret %21
+%tint_symbol = @fragment func():main_out {
+  $B10: {
+    %20:void = call %main_1
+    %21:vec4<f32> = load %x_GLF_color
+    %22:main_out = construct %21
+    ret %22
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-merge-return-condition-twice/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-merge-return-condition-twice/0-opt.wgsl.expected.ir.msl
index e1be0ec..af214cc 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-merge-return-condition-twice/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-merge-return-condition-twice/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   three:f32 @offset(0)
 }
 
@@ -8,64 +8,68 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%func_ = func():f32 {
+  $B2: {
     %b:ptr<function, f32, read_write> = var
     %x_34:ptr<function, f32, read_write> = var
     %x_34_phi:ptr<function, f32, read_write> = var
     %x_48_phi:ptr<function, f32, read_write> = var
     store %b, 2.0f
     store %x_34_phi, 2.0f
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %8:f32 = load %x_34_phi
         store %x_34, %8
         %9:ptr<uniform, f32, read> = access %x_7, 0u
-        %x_39:f32 = load %9
-        %11:bool = eq %x_39, 0.0f
-        if %11 [t: %b5] {  # if_1
-          %b5 = block {  # true
-            %12:f32 = load %x_34
-            store %x_48_phi, %12
+        %10:f32 = load %9
+        %x_39:f32 = let %10
+        %12:bool = eq %x_39, 0.0f
+        if %12 [t: $B5] {  # if_1
+          $B5: {  # true
+            %13:f32 = load %x_34
+            store %x_48_phi, %13
             exit_loop  # loop_1
           }
         }
-        %13:ptr<uniform, f32, read> = access %x_7, 0u
-        %x_44:f32 = load %13
-        %15:bool = eq %x_44, 0.0f
-        if %15 [t: %b6] {  # if_2
-          %b6 = block {  # true
+        %14:ptr<uniform, f32, read> = access %x_7, 0u
+        %15:f32 = load %14
+        %x_44:f32 = let %15
+        %17:bool = eq %x_44, 0.0f
+        if %17 [t: $B6] {  # if_2
+          $B6: {  # true
             ret 1.0f
           }
         }
         store %b, 1.0f
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
+      $B4: {  # continuing
         store %x_34_phi, 1.0f
         store %x_48_phi, 1.0f
-        break_if true %b3
+        break_if true  # -> [t: exit_loop loop_1, f: $B3]
       }
     }
-    %x_48:f32 = load %x_48_phi
+    %18:f32 = load %x_48_phi
+    %x_48:f32 = let %18
     ret %x_48
   }
 }
-%main_1 = func():void -> %b7 {
-  %b7 = block {
-    %x_27:f32 = call %func_
-    %19:bool = eq %x_27, 1.0f
-    if %19 [t: %b8, f: %b9] {  # if_3
-      %b8 = block {  # true
+%main_1 = func():void {
+  $B7: {
+    %21:f32 = call %func_
+    %x_27:f32 = let %21
+    %23:bool = eq %x_27, 1.0f
+    if %23 [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 = block {  # false
+      $B9: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_3
       }
@@ -73,12 +77,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b10 {
-  %b10 = block {
-    %21:void = call %main_1
-    %22:vec4<f32> = load %x_GLF_color
-    %23:main_out = construct %22
-    ret %23
+%tint_symbol = @fragment func():main_out {
+  $B10: {
+    %25:void = call %main_1
+    %26:vec4<f32> = load %x_GLF_color
+    %27:main_out = construct %26
+    ret %27
   }
 }
 
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
index 2e88a5f..716ba30 100644
--- 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
@@ -1,6 +1,55 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::LoadVectorElement
+../../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.   *
 *                                                                  *
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
index 2e88a5f..823b658 100644
--- 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
@@ -1,6 +1,58 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::LoadVectorElement
+../../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.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-missing-return-value-function-never-called/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-missing-return-value-function-never-called/0-opt.spvasm.expected.ir.msl
index 1368b54..a48d088 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-missing-return-value-function-never-called/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-missing-return-value-function-never-called/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf1 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf1 = struct @align(4) {
   one:u32 @offset(0)
 }
 
@@ -16,76 +16,78 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_8:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_10:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%func_ = func():f32 -> %b2 {
-  %b2 = block {
-    switch 1i [c: (0i, %b3), c: (default, %b4)] {  # switch_1
-      %b3 = block {  # case
+%func_ = func():f32 {
+  $B2: {
+    switch 1i [c: (0i, $B3), c: (default, $B4)] {  # switch_1
+      $B3: {  # case
         ret 1.0f
       }
-      %b4 = block {  # case
+      $B4: {  # case
         exit_switch  # switch_1
       }
     }
     ret 0.0f
   }
 }
-%main_1 = func():void -> %b5 {
-  %b5 = block {
+%main_1 = func():void {
+  $B5: {
     %v:ptr<function, vec4<f32>, read_write> = var
     store %v, vec4<f32>(1.0f)
     %8:f32 = load_vector_element %gl_FragCoord, 1u
     %9:bool = lt %8, 0.0f
-    if %9 [t: %b6] {  # if_1
-      %b6 = block {  # true
-        %x_42:f32 = call %func_
-        %11:vec4<f32> = construct %x_42
-        store %v, %11
+    if %9 [t: $B6] {  # if_1
+      $B6: {  # true
+        %10:f32 = call %func_
+        %x_42:f32 = let %10
+        %12:vec4<f32> = construct %x_42
+        store %v, %12
         exit_if  # if_1
       }
     }
-    %12:vec4<f32> = load %v
-    %13:u32 = pack4x8unorm %12
-    %14:bool = eq %13, 1u
-    if %14 [t: %b7] {  # if_2
-      %b7 = block {  # true
+    %13:vec4<f32> = load %v
+    %14:u32 = pack4x8unorm %13
+    %15:bool = eq %14, 1u
+    if %15 [t: $B7] {  # if_2
+      $B7: {  # true
         ret
       }
     }
-    %15:ptr<uniform, u32, read> = access %x_8, 0u
-    %16:u32 = load %15
-    %17:u32 = shiftl 1u, %16
-    %18:bool = eq %17, 2u
-    if %18 [t: %b8, f: %b9] {  # if_3
-      %b8 = block {  # true
+    %16:ptr<uniform, u32, read> = access %x_8, 0u
+    %17:u32 = load %16
+    %18:u32 = and %17, 31u
+    %19:u32 = shl 1u, %18
+    %20:bool = eq %19, 2u
+    if %20 [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 = block {  # false
-        %19:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %20:i32 = load %19
-        %21:f32 = convert %20
-        %22:vec4<f32> = construct %21
-        store %x_GLF_color, %22
+      $B9: {  # false
+        %21:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %22:i32 = load %21
+        %23:f32 = convert %22
+        %24:vec4<f32> = construct %23
+        store %x_GLF_color, %24
         exit_if  # if_3
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b10 {
-  %b10 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B10: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %25:void = call %main_1
-    %26:vec4<f32> = load %x_GLF_color
-    %27:main_out = construct %26
-    ret %27
+    %27:void = call %main_1
+    %28:vec4<f32> = load %x_GLF_color
+    %29:main_out = construct %28
+    ret %29
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-missing-return-value-function-never-called/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-missing-return-value-function-never-called/0-opt.wgsl.expected.ir.msl
index da791fb..b15431f 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-missing-return-value-function-never-called/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-missing-return-value-function-never-called/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf1 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf1 = struct @align(4) {
   one:u32 @offset(0)
 }
 
@@ -16,76 +16,83 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_8:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_10:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%func_ = func():f32 -> %b2 {
-  %b2 = block {
-    switch 1i [c: (0i, %b3), c: (default, %b4)] {  # switch_1
-      %b3 = block {  # case
+%func_ = func():f32 {
+  $B2: {
+    switch 1i [c: (0i, $B3), c: (default, $B4)] {  # switch_1
+      $B3: {  # case
         ret 1.0f
       }
-      %b4 = block {  # case
+      $B4: {  # case
         exit_switch  # switch_1
       }
     }
     ret 0.0f
   }
 }
-%main_1 = func():void -> %b5 {
-  %b5 = block {
+%main_1 = func():void {
+  $B5: {
     %v:ptr<function, vec4<f32>, read_write> = var
     store %v, vec4<f32>(1.0f)
-    %x_38:f32 = load_vector_element %gl_FragCoord, 1u
-    %9:bool = lt %x_38, 0.0f
-    if %9 [t: %b6] {  # if_1
-      %b6 = block {  # true
-        %x_42:f32 = call %func_
-        %11:vec4<f32> = construct %x_42, %x_42, %x_42, %x_42
-        store %v, %11
+    %8:f32 = load_vector_element %gl_FragCoord, 1u
+    %x_38:f32 = let %8
+    %10:bool = lt %x_38, 0.0f
+    if %10 [t: $B6] {  # if_1
+      $B6: {  # true
+        %11:f32 = call %func_
+        %x_42:f32 = let %11
+        %13:vec4<f32> = construct %x_42, %x_42, %x_42, %x_42
+        store %v, %13
         exit_if  # if_1
       }
     }
-    %x_44:vec4<f32> = load %v
-    %13:u32 = pack4x8unorm %x_44
-    %14:bool = eq %13, 1u
-    if %14 [t: %b7] {  # if_2
-      %b7 = block {  # true
+    %14:vec4<f32> = load %v
+    %x_44:vec4<f32> = let %14
+    %16:u32 = pack4x8unorm %x_44
+    %17:bool = eq %16, 1u
+    if %17 [t: $B7] {  # if_2
+      $B7: {  # true
         ret
       }
     }
-    %15:ptr<uniform, u32, read> = access %x_8, 0u
-    %x_50:u32 = load %15
-    %17:u32 = shiftl 1u, %x_50
-    %18:bool = eq %17, 2u
-    if %18 [t: %b8, f: %b9] {  # if_3
-      %b8 = block {  # true
+    %18:ptr<uniform, u32, read> = access %x_8, 0u
+    %19:u32 = load %18
+    %x_50:u32 = let %19
+    %21:u32 = and %x_50, 31u
+    %22:u32 = shl 1u, %21
+    %23:bool = eq %22, 2u
+    if %23 [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 = block {  # false
-        %19:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %x_57:i32 = load %19
-        %x_58:f32 = convert %x_57
-        %22:vec4<f32> = construct %x_58, %x_58, %x_58, %x_58
-        store %x_GLF_color, %22
+      $B9: {  # false
+        %24:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %25:i32 = load %24
+        %x_57:i32 = let %25
+        %27:f32 = convert %x_57
+        %x_58:f32 = let %27
+        %29:vec4<f32> = construct %x_58, %x_58, %x_58, %x_58
+        store %x_GLF_color, %29
         exit_if  # if_3
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b10 {
-  %b10 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B10: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %25:void = call %main_1
-    %26:vec4<f32> = load %x_GLF_color
-    %27:main_out = construct %26
-    ret %27
+    %32:void = call %main_1
+    %33:vec4<f32> = load %x_GLF_color
+    %34:main_out = construct %33
+    ret %34
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-mod-uint-bits-float/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-mod-uint-bits-float/0-opt.spvasm.expected.ir.msl
index 39a2a86..703069d 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-mod-uint-bits-float/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-mod-uint-bits-float/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -12,13 +12,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, f32, read_write> = var
     store %a, 1.40129846e-45f
     %5:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
@@ -29,8 +29,8 @@
     %9:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
     %10:f32 = load %9
     %11:bool = lt %8, %10
-    if %11 [t: %b3] {  # if_1
-      %b3 = block {  # true
+    if %11 [t: $B3] {  # if_1
+      $B3: {  # true
         %12:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
         %13:f32 = load %12
         %14:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
@@ -47,8 +47,8 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b4 {
-  %b4 = block {
+%tint_symbol = @fragment func():main_out {
+  $B4: {
     %22:void = call %main_1
     %23:vec4<f32> = load %x_GLF_color
     %24:main_out = construct %23
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-mod-uint-bits-float/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-mod-uint-bits-float/0-opt.wgsl.expected.ir.msl
index 3508a9b..67711f8 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-mod-uint-bits-float/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-mod-uint-bits-float/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -12,47 +12,54 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, f32, read_write> = var
     store %a, 1.40129846e-45f
     %5:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-    %x_29:f32 = load %5
-    %7:vec4<f32> = construct %x_29, %x_29, %x_29, %x_29
-    store %x_GLF_color, %7
-    %x_31:f32 = load %a
-    %9:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
-    %x_33:f32 = load %9
-    %11:bool = lt %x_31, %x_33
-    if %11 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %12:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-        %x_38:f32 = load %12
-        %14:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-        %x_40:f32 = load %14
-        %16:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-        %x_42:f32 = load %16
-        %18:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-        %x_44:f32 = load %18
-        %20:vec4<f32> = construct %x_38, %x_40, %x_42, %x_44
-        store %x_GLF_color, %20
+    %6:f32 = load %5
+    %x_29:f32 = let %6
+    %8:vec4<f32> = construct %x_29, %x_29, %x_29, %x_29
+    store %x_GLF_color, %8
+    %9:f32 = load %a
+    %x_31:f32 = let %9
+    %11:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
+    %12:f32 = load %11
+    %x_33:f32 = let %12
+    %14:bool = lt %x_31, %x_33
+    if %14 [t: $B3] {  # if_1
+      $B3: {  # true
+        %15:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+        %16:f32 = load %15
+        %x_38:f32 = let %16
+        %18:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+        %19:f32 = load %18
+        %x_40:f32 = let %19
+        %21:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+        %22:f32 = load %21
+        %x_42:f32 = let %22
+        %24:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+        %25:f32 = load %24
+        %x_44:f32 = let %25
+        %27:vec4<f32> = construct %x_38, %x_40, %x_42, %x_44
+        store %x_GLF_color, %27
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b4 {
-  %b4 = block {
-    %22:void = call %main_1
-    %23:vec4<f32> = load %x_GLF_color
-    %24:main_out = construct %23
-    ret %24
+%tint_symbol = @fragment func():main_out {
+  $B4: {
+    %29:void = call %main_1
+    %30:vec4<f32> = load %x_GLF_color
+    %31:main_out = construct %30
+    ret %31
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-modulo-zero-never-executed/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-modulo-zero-never-executed/0-opt.spvasm.expected.ir.msl
index f4b9770..b2ebb6a 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-modulo-zero-never-executed/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-modulo-zero-never-executed/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -28,7 +28,7 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_8:ptr<uniform, buf2, read> = var @binding_point(0, 2)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_10:ptr<uniform, buf0, read> = var @binding_point(0, 0)
@@ -36,8 +36,8 @@
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, u32, read_write> = var
     %b:ptr<function, i32, read_write> = var
     store %a, 0u
@@ -48,58 +48,72 @@
     %12:ptr<uniform, f32, read> = access %x_10, 0u, 0i, 0u
     %13:f32 = load %12
     %14:bool = lt %11, %13
-    if %14 [t: %b3] {  # if_1
-      %b3 = block {  # true
+    if %14 [t: $B3] {  # if_1
+      $B3: {  # true
         %15:ptr<uniform, u32, read> = access %x_12, 0u, 0i, 0u
         %16:u32 = load %15
         %17:u32 = load %a
-        %18:u32 = mod %16, %17
-        %19:i32 = bitcast %18
-        store %b, %19
+        %18:u32 = call %tint_mod_u32, %16, %17
+        %20:i32 = bitcast %18
+        store %b, %20
         exit_if  # if_1
       }
     }
-    %20:i32 = load %b
-    %21:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-    %22:i32 = load %21
-    %23:bool = eq %20, %22
-    if %23 [t: %b4, f: %b5] {  # if_2
-      %b4 = block {  # true
-        %24:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-        %25:i32 = load %24
-        %26:f32 = convert %25
-        %27:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-        %28:i32 = load %27
-        %29:f32 = convert %28
-        %30:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-        %31:i32 = load %30
-        %32:f32 = convert %31
-        %33:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+    %21:i32 = load %b
+    %22:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+    %23:i32 = load %22
+    %24:bool = eq %21, %23
+    if %24 [t: $B4, f: $B5] {  # if_2
+      $B4: {  # true
+        %25:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+        %26:i32 = load %25
+        %27:f32 = convert %26
+        %28:f32 = let %27
+        %29:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+        %30:i32 = load %29
+        %31:f32 = convert %30
+        %32:f32 = let %31
+        %33:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
         %34:i32 = load %33
         %35:f32 = convert %34
-        %36:vec4<f32> = construct %26, %29, %32, %35
-        store %x_GLF_color, %36
-        exit_if  # if_2
-      }
-      %b5 = block {  # false
-        %37:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+        %36:f32 = let %35
+        %37:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
         %38:i32 = load %37
         %39:f32 = convert %38
-        %40:vec4<f32> = construct %39
+        %40:vec4<f32> = construct %28, %32, %36, %39
         store %x_GLF_color, %40
         exit_if  # if_2
       }
+      $B5: {  # false
+        %41:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+        %42:i32 = load %41
+        %43:f32 = convert %42
+        %44:vec4<f32> = construct %43
+        store %x_GLF_color, %44
+        exit_if  # if_2
+      }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b6 {
-  %b6 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B6: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %43:void = call %main_1
-    %44:vec4<f32> = load %x_GLF_color
-    %45:main_out = construct %44
-    ret %45
+    %47:void = call %main_1
+    %48:vec4<f32> = load %x_GLF_color
+    %49:main_out = construct %48
+    ret %49
+  }
+}
+%tint_mod_u32 = func(%lhs:u32, %rhs:u32):u32 {
+  $B7: {
+    %52:bool = eq %rhs, 0u
+    %53:u32 = select %rhs, 1u, %52
+    %54:u32 = let %53
+    %55:u32 = div %lhs, %54
+    %56:u32 = mul %55, %54
+    %57:u32 = sub %lhs, %56
+    ret %57
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-modulo-zero-never-executed/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-modulo-zero-never-executed/0-opt.wgsl.expected.ir.msl
index d58f09f..529063e 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-modulo-zero-never-executed/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-modulo-zero-never-executed/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -28,7 +28,7 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_8:ptr<uniform, buf2, read> = var @binding_point(0, 2)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_10:ptr<uniform, buf0, read> = var @binding_point(0, 0)
@@ -36,70 +36,97 @@
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, u32, read_write> = var
     %b:ptr<function, i32, read_write> = var
     store %a, 0u
     %9:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-    %x_41:i32 = load %9
+    %10:i32 = load %9
+    %x_41:i32 = let %10
     store %b, %x_41
-    %x_43:f32 = load_vector_element %gl_FragCoord, 0u
-    %12:ptr<uniform, f32, read> = access %x_10, 0u, 0i, 0u
-    %x_45:f32 = load %12
-    %14:bool = lt %x_43, %x_45
-    if %14 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %15:ptr<uniform, u32, read> = access %x_12, 0u, 0i, 0u
-        %x_50:u32 = load %15
-        %x_51:u32 = load %a
-        %18:u32 = mod %x_50, %x_51
-        %19:i32 = bitcast %18
-        store %b, %19
+    %12:f32 = load_vector_element %gl_FragCoord, 0u
+    %x_43:f32 = let %12
+    %14:ptr<uniform, f32, read> = access %x_10, 0u, 0i, 0u
+    %15:f32 = load %14
+    %x_45:f32 = let %15
+    %17:bool = lt %x_43, %x_45
+    if %17 [t: $B3] {  # if_1
+      $B3: {  # true
+        %18:ptr<uniform, u32, read> = access %x_12, 0u, 0i, 0u
+        %19:u32 = load %18
+        %x_50:u32 = let %19
+        %21:u32 = load %a
+        %x_51:u32 = let %21
+        %23:u32 = call %tint_mod_u32, %x_50, %x_51
+        %25:i32 = bitcast %23
+        store %b, %25
         exit_if  # if_1
       }
     }
-    %x_54:i32 = load %b
-    %21:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-    %x_56:i32 = load %21
-    %23:bool = eq %x_54, %x_56
-    if %23 [t: %b4, f: %b5] {  # if_2
-      %b4 = block {  # true
-        %24:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-        %x_62:i32 = load %24
-        %26:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-        %x_65:i32 = load %26
-        %28:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-        %x_68:i32 = load %28
-        %30:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-        %x_71:i32 = load %30
-        %32:f32 = convert %x_62
-        %33:f32 = convert %x_65
-        %34:f32 = convert %x_68
-        %35:f32 = convert %x_71
-        %36:vec4<f32> = construct %32, %33, %34, %35
-        store %x_GLF_color, %36
+    %26:i32 = load %b
+    %x_54:i32 = let %26
+    %28:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+    %29:i32 = load %28
+    %x_56:i32 = let %29
+    %31:bool = eq %x_54, %x_56
+    if %31 [t: $B4, f: $B5] {  # if_2
+      $B4: {  # true
+        %32:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+        %33:i32 = load %32
+        %x_62:i32 = let %33
+        %35:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+        %36:i32 = load %35
+        %x_65:i32 = let %36
+        %38:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+        %39:i32 = load %38
+        %x_68:i32 = let %39
+        %41:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+        %42:i32 = load %41
+        %x_71:i32 = let %42
+        %44:f32 = convert %x_62
+        %45:f32 = let %44
+        %46:f32 = convert %x_65
+        %47:f32 = let %46
+        %48:f32 = convert %x_68
+        %49:f32 = let %48
+        %50:f32 = convert %x_71
+        %51:vec4<f32> = construct %45, %47, %49, %50
+        store %x_GLF_color, %51
         exit_if  # if_2
       }
-      %b5 = block {  # false
-        %37:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-        %x_75:i32 = load %37
-        %x_76:f32 = convert %x_75
-        %40:vec4<f32> = construct %x_76, %x_76, %x_76, %x_76
-        store %x_GLF_color, %40
+      $B5: {  # false
+        %52:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+        %53:i32 = load %52
+        %x_75:i32 = let %53
+        %55:f32 = convert %x_75
+        %x_76:f32 = let %55
+        %57:vec4<f32> = construct %x_76, %x_76, %x_76, %x_76
+        store %x_GLF_color, %57
         exit_if  # if_2
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b6 {
-  %b6 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B6: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %43:void = call %main_1
-    %44:vec4<f32> = load %x_GLF_color
-    %45:main_out = construct %44
-    ret %45
+    %60:void = call %main_1
+    %61:vec4<f32> = load %x_GLF_color
+    %62:main_out = construct %61
+    ret %62
+  }
+}
+%tint_mod_u32 = func(%lhs:u32, %rhs:u32):u32 {
+  $B7: {
+    %65:bool = eq %rhs, 0u
+    %66:u32 = select %rhs, 1u, %65
+    %67:u32 = let %66
+    %68:u32 = div %lhs, %67
+    %69:u32 = mul %68, %67
+    %70:u32 = sub %lhs, %69
+    ret %70
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-multiple-one-iteration-loops-global-counter-write-matrices/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-multiple-one-iteration-loops-global-counter-write-matrices/0-opt.spvasm.expected.ir.msl
index efdd3b1..242f871 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-multiple-one-iteration-loops-global-counter-write-matrices/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-multiple-one-iteration-loops-global-counter-write-matrices/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,1071 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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_global_loop_count:ptr<private, i32, read_write> = var
+  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+}
+
+%main_1 = func():void {
+  $B2: {
+    %m23:ptr<function, mat2x3<f32>, read_write> = var
+    %m24:ptr<function, mat2x4<f32>, read_write> = var
+    %m32:ptr<function, mat3x2<f32>, read_write> = var
+    %m33:ptr<function, mat3x3<f32>, read_write> = var
+    %m34:ptr<function, mat3x4<f32>, read_write> = var
+    %m42:ptr<function, mat4x2<f32>, read_write> = var
+    %m43:ptr<function, mat4x3<f32>, read_write> = var
+    %m44:ptr<function, mat4x4<f32>, read_write> = var
+    %i:ptr<function, i32, read_write> = var
+    %i_1:ptr<function, i32, read_write> = var
+    %i_2:ptr<function, i32, read_write> = var
+    %i_3:ptr<function, i32, read_write> = var
+    %i_4:ptr<function, i32, read_write> = var
+    %i_5:ptr<function, i32, read_write> = var
+    %i_6:ptr<function, i32, read_write> = var
+    %i_7:ptr<function, i32, read_write> = var
+    %i_8:ptr<function, i32, read_write> = var
+    %i_9:ptr<function, i32, read_write> = var
+    %i_10:ptr<function, i32, read_write> = var
+    %i_11:ptr<function, i32, read_write> = var
+    %i_12:ptr<function, i32, read_write> = var
+    %i_13:ptr<function, i32, read_write> = var
+    %i_14:ptr<function, i32, read_write> = var
+    %i_15:ptr<function, i32, read_write> = var
+    %i_16:ptr<function, i32, read_write> = var
+    %i_17:ptr<function, i32, read_write> = var
+    %i_18:ptr<function, i32, read_write> = var
+    %i_19:ptr<function, i32, read_write> = var
+    %i_20:ptr<function, i32, read_write> = var
+    %i_21:ptr<function, i32, read_write> = var
+    %i_22:ptr<function, i32, read_write> = var
+    %i_23:ptr<function, i32, read_write> = var
+    %i_24:ptr<function, i32, read_write> = var
+    %i_25:ptr<function, i32, read_write> = var
+    %i_26:ptr<function, i32, read_write> = var
+    %i_27:ptr<function, i32, read_write> = var
+    %i_28:ptr<function, i32, read_write> = var
+    %i_29:ptr<function, i32, read_write> = var
+    %i_30:ptr<function, i32, read_write> = var
+    %i_31:ptr<function, i32, read_write> = var
+    %i_32:ptr<function, i32, read_write> = var
+    %i_33:ptr<function, i32, read_write> = var
+    %i_34:ptr<function, i32, read_write> = var
+    %i_35:ptr<function, i32, read_write> = var
+    %i_36:ptr<function, i32, read_write> = var
+    %i_37:ptr<function, i32, read_write> = var
+    %sum:ptr<function, f32, read_write> = var
+    %r:ptr<function, i32, read_write> = var
+    store %x_GLF_global_loop_count, 0i
+    store %m23, mat2x3<f32>(vec3<f32>(0.0f))
+    store %m24, mat2x4<f32>(vec4<f32>(0.0f))
+    store %m32, mat3x2<f32>(vec2<f32>(0.0f))
+    store %m33, mat3x3<f32>(vec3<f32>(0.0f))
+    store %m34, mat3x4<f32>(vec4<f32>(0.0f))
+    store %m42, mat4x2<f32>(vec2<f32>(0.0f))
+    store %m43, mat4x3<f32>(vec3<f32>(0.0f))
+    store %m44, mat4x4<f32>(vec4<f32>(0.0f))
+    store %i, 0i
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %52:i32 = load %i
+        %53:bool = lt %52, 1i
+        if %53 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
+            exit_if  # if_1
+          }
+          $B6: {  # false
+            exit_loop  # loop_1
+          }
+        }
+        store %i_1, 0i
+        loop [b: $B7, c: $B8] {  # loop_2
+          $B7: {  # body
+            %54:i32 = load %i_1
+            %55:bool = lt %54, 1i
+            if %55 [t: $B9, f: $B10] {  # if_2
+              $B9: {  # true
+                exit_if  # if_2
+              }
+              $B10: {  # false
+                exit_loop  # loop_2
+              }
+            }
+            store %i_2, 0i
+            loop [b: $B11, c: $B12] {  # loop_3
+              $B11: {  # body
+                %56:i32 = load %i_2
+                %57:bool = lt %56, 1i
+                if %57 [t: $B13, f: $B14] {  # if_3
+                  $B13: {  # true
+                    exit_if  # if_3
+                  }
+                  $B14: {  # false
+                    exit_loop  # loop_3
+                  }
+                }
+                store %i_3, 0i
+                loop [b: $B15, c: $B16] {  # loop_4
+                  $B15: {  # body
+                    %58:i32 = load %i_3
+                    %59:bool = lt %58, 1i
+                    if %59 [t: $B17, f: $B18] {  # if_4
+                      $B17: {  # true
+                        exit_if  # if_4
+                      }
+                      $B18: {  # false
+                        exit_loop  # loop_4
+                      }
+                    }
+                    store %i_4, 0i
+                    loop [b: $B19, c: $B20] {  # loop_5
+                      $B19: {  # body
+                        %60:i32 = load %i_4
+                        %61:bool = lt %60, 1i
+                        if %61 [t: $B21, f: $B22] {  # if_5
+                          $B21: {  # true
+                            exit_if  # if_5
+                          }
+                          $B22: {  # false
+                            exit_loop  # loop_5
+                          }
+                        }
+                        store %i_5, 0i
+                        loop [b: $B23, c: $B24] {  # loop_6
+                          $B23: {  # body
+                            %62:i32 = load %i_5
+                            %63:bool = lt %62, 1i
+                            if %63 [t: $B25, f: $B26] {  # if_6
+                              $B25: {  # true
+                                exit_if  # if_6
+                              }
+                              $B26: {  # false
+                                exit_loop  # loop_6
+                              }
+                            }
+                            store %i_6, 0i
+                            loop [b: $B27, c: $B28] {  # loop_7
+                              $B27: {  # body
+                                %64:i32 = load %i_6
+                                %65:bool = lt %64, 1i
+                                if %65 [t: $B29, f: $B30] {  # if_7
+                                  $B29: {  # true
+                                    exit_if  # if_7
+                                  }
+                                  $B30: {  # false
+                                    exit_loop  # loop_7
+                                  }
+                                }
+                                store %i_7, 0i
+                                loop [b: $B31, c: $B32] {  # loop_8
+                                  $B31: {  # body
+                                    %66:i32 = load %i_7
+                                    %67:bool = lt %66, 1i
+                                    if %67 [t: $B33, f: $B34] {  # if_8
+                                      $B33: {  # true
+                                        exit_if  # if_8
+                                      }
+                                      $B34: {  # false
+                                        exit_loop  # loop_8
+                                      }
+                                    }
+                                    store %i_8, 0i
+                                    loop [b: $B35, c: $B36] {  # loop_9
+                                      $B35: {  # body
+                                        %68:i32 = load %i_8
+                                        %69:bool = lt %68, 1i
+                                        if %69 [t: $B37, f: $B38] {  # if_9
+                                          $B37: {  # true
+                                            exit_if  # if_9
+                                          }
+                                          $B38: {  # false
+                                            exit_loop  # loop_9
+                                          }
+                                        }
+                                        store %i_9, 0i
+                                        loop [b: $B39, c: $B40] {  # loop_10
+                                          $B39: {  # body
+                                            %70:i32 = load %i_9
+                                            %71:bool = lt %70, 1i
+                                            if %71 [t: $B41, f: $B42] {  # if_10
+                                              $B41: {  # true
+                                                exit_if  # if_10
+                                              }
+                                              $B42: {  # false
+                                                exit_loop  # loop_10
+                                              }
+                                            }
+                                            store %i_10, 0i
+                                            loop [b: $B43, c: $B44] {  # loop_11
+                                              $B43: {  # body
+                                                %72:i32 = load %i_10
+                                                %73:bool = lt %72, 1i
+                                                if %73 [t: $B45, f: $B46] {  # if_11
+                                                  $B45: {  # true
+                                                    exit_if  # if_11
+                                                  }
+                                                  $B46: {  # false
+                                                    exit_loop  # loop_11
+                                                  }
+                                                }
+                                                store %i_11, 0i
+                                                loop [b: $B47, c: $B48] {  # loop_12
+                                                  $B47: {  # body
+                                                    %74:i32 = load %i_11
+                                                    %75:bool = lt %74, 1i
+                                                    if %75 [t: $B49, f: $B50] {  # if_12
+                                                      $B49: {  # true
+                                                        exit_if  # if_12
+                                                      }
+                                                      $B50: {  # false
+                                                        exit_loop  # loop_12
+                                                      }
+                                                    }
+                                                    store %i_12, 0i
+                                                    loop [b: $B51, c: $B52] {  # loop_13
+                                                      $B51: {  # body
+                                                        %76:i32 = load %i_12
+                                                        %77:bool = lt %76, 1i
+                                                        if %77 [t: $B53, f: $B54] {  # if_13
+                                                          $B53: {  # true
+                                                            exit_if  # if_13
+                                                          }
+                                                          $B54: {  # false
+                                                            exit_loop  # loop_13
+                                                          }
+                                                        }
+                                                        store %i_13, 0i
+                                                        loop [b: $B55, c: $B56] {  # loop_14
+                                                          $B55: {  # body
+                                                            %78:i32 = load %i_13
+                                                            %79:bool = lt %78, 1i
+                                                            if %79 [t: $B57, f: $B58] {  # if_14
+                                                              $B57: {  # true
+                                                                exit_if  # if_14
+                                                              }
+                                                              $B58: {  # false
+                                                                exit_loop  # loop_14
+                                                              }
+                                                            }
+                                                            store %i_14, 0i
+                                                            loop [b: $B59, c: $B60] {  # loop_15
+                                                              $B59: {  # body
+                                                                %80:i32 = load %i_14
+                                                                %81:bool = lt %80, 1i
+                                                                if %81 [t: $B61, f: $B62] {  # if_15
+                                                                  $B61: {  # true
+                                                                    exit_if  # if_15
+                                                                  }
+                                                                  $B62: {  # false
+                                                                    exit_loop  # loop_15
+                                                                  }
+                                                                }
+                                                                store %i_15, 0i
+                                                                loop [b: $B63, c: $B64] {  # loop_16
+                                                                  $B63: {  # body
+                                                                    %82:i32 = load %i_15
+                                                                    %83:bool = lt %82, 1i
+                                                                    if %83 [t: $B65, f: $B66] {  # if_16
+                                                                      $B65: {  # true
+                                                                        exit_if  # if_16
+                                                                      }
+                                                                      $B66: {  # false
+                                                                        exit_loop  # loop_16
+                                                                      }
+                                                                    }
+                                                                    store %i_16, 0i
+                                                                    loop [b: $B67, c: $B68] {  # loop_17
+                                                                      $B67: {  # body
+                                                                        %84:i32 = load %i_16
+                                                                        %85:bool = lt %84, 1i
+                                                                        if %85 [t: $B69, f: $B70] {  # if_17
+                                                                          $B69: {  # true
+                                                                            exit_if  # if_17
+                                                                          }
+                                                                          $B70: {  # false
+                                                                            exit_loop  # loop_17
+                                                                          }
+                                                                        }
+                                                                        store %i_17, 0i
+                                                                        loop [b: $B71, c: $B72] {  # loop_18
+                                                                          $B71: {  # body
+                                                                            %86:i32 = load %i_17
+                                                                            %87:bool = lt %86, 1i
+                                                                            if %87 [t: $B73, f: $B74] {  # if_18
+                                                                              $B73: {  # true
+                                                                                exit_if  # if_18
+                                                                              }
+                                                                              $B74: {  # false
+                                                                                exit_loop  # loop_18
+                                                                              }
+                                                                            }
+                                                                            store %i_18, 0i
+                                                                            loop [b: $B75, c: $B76] {  # loop_19
+                                                                              $B75: {  # body
+                                                                                %88:i32 = load %i_18
+                                                                                %89:bool = lt %88, 1i
+                                                                                if %89 [t: $B77, f: $B78] {  # if_19
+                                                                                  $B77: {  # true
+                                                                                    exit_if  # if_19
+                                                                                  }
+                                                                                  $B78: {  # false
+                                                                                    exit_loop  # loop_19
+                                                                                  }
+                                                                                }
+                                                                                store %i_19, 0i
+                                                                                loop [b: $B79, c: $B80] {  # loop_20
+                                                                                  $B79: {  # body
+                                                                                    %90:i32 = load %i_19
+                                                                                    %91:bool = lt %90, 1i
+                                                                                    if %91 [t: $B81, f: $B82] {  # if_20
+                                                                                      $B81: {  # true
+                                                                                        exit_if  # if_20
+                                                                                      }
+                                                                                      $B82: {  # false
+                                                                                        exit_loop  # loop_20
+                                                                                      }
+                                                                                    }
+                                                                                    store %i_20, 0i
+                                                                                    loop [b: $B83, c: $B84] {  # loop_21
+                                                                                      $B83: {  # body
+                                                                                        %92:i32 = load %i_20
+                                                                                        %93:bool = lt %92, 1i
+                                                                                        if %93 [t: $B85, f: $B86] {  # if_21
+                                                                                          $B85: {  # true
+                                                                                            exit_if  # if_21
+                                                                                          }
+                                                                                          $B86: {  # false
+                                                                                            exit_loop  # loop_21
+                                                                                          }
+                                                                                        }
+                                                                                        store %i_21, 0i
+                                                                                        loop [b: $B87, c: $B88] {  # loop_22
+                                                                                          $B87: {  # body
+                                                                                            %94:i32 = load %i_21
+                                                                                            %95:bool = lt %94, 1i
+                                                                                            if %95 [t: $B89, f: $B90] {  # if_22
+                                                                                              $B89: {  # true
+                                                                                                exit_if  # if_22
+                                                                                              }
+                                                                                              $B90: {  # false
+                                                                                                exit_loop  # loop_22
+                                                                                              }
+                                                                                            }
+                                                                                            store %i_22, 0i
+                                                                                            loop [b: $B91, c: $B92] {  # loop_23
+                                                                                              $B91: {  # body
+                                                                                                %96:i32 = load %i_22
+                                                                                                %97:bool = lt %96, 1i
+                                                                                                if %97 [t: $B93, f: $B94] {  # if_23
+                                                                                                  $B93: {  # true
+                                                                                                    exit_if  # if_23
+                                                                                                  }
+                                                                                                  $B94: {  # false
+                                                                                                    exit_loop  # loop_23
+                                                                                                  }
+                                                                                                }
+                                                                                                store %i_23, 0i
+                                                                                                loop [b: $B95, c: $B96] {  # loop_24
+                                                                                                  $B95: {  # body
+                                                                                                    %98:i32 = load %i_23
+                                                                                                    %99:bool = lt %98, 1i
+                                                                                                    if %99 [t: $B97, f: $B98] {  # if_24
+                                                                                                      $B97: {  # true
+                                                                                                        exit_if  # if_24
+                                                                                                      }
+                                                                                                      $B98: {  # false
+                                                                                                        exit_loop  # loop_24
+                                                                                                      }
+                                                                                                    }
+                                                                                                    store %i_24, 0i
+                                                                                                    loop [b: $B99, c: $B100] {  # loop_25
+                                                                                                      $B99: {  # body
+                                                                                                        %100:i32 = load %i_24
+                                                                                                        %101:bool = lt %100, 1i
+                                                                                                        if %101 [t: $B101, f: $B102] {  # if_25
+                                                                                                          $B101: {  # true
+                                                                                                            exit_if  # if_25
+                                                                                                          }
+                                                                                                          $B102: {  # false
+                                                                                                            exit_loop  # loop_25
+                                                                                                          }
+                                                                                                        }
+                                                                                                        store %i_25, 0i
+                                                                                                        loop [b: $B103, c: $B104] {  # loop_26
+                                                                                                          $B103: {  # body
+                                                                                                            %102:i32 = load %i_25
+                                                                                                            %103:bool = lt %102, 1i
+                                                                                                            if %103 [t: $B105, f: $B106] {  # if_26
+                                                                                                              $B105: {  # true
+                                                                                                                exit_if  # if_26
+                                                                                                              }
+                                                                                                              $B106: {  # false
+                                                                                                                exit_loop  # loop_26
+                                                                                                              }
+                                                                                                            }
+                                                                                                            store %i_26, 0i
+                                                                                                            loop [b: $B107, c: $B108] {  # loop_27
+                                                                                                              $B107: {  # body
+                                                                                                                %104:i32 = load %i_26
+                                                                                                                %105:bool = lt %104, 1i
+                                                                                                                if %105 [t: $B109, f: $B110] {  # if_27
+                                                                                                                  $B109: {  # true
+                                                                                                                    exit_if  # if_27
+                                                                                                                  }
+                                                                                                                  $B110: {  # false
+                                                                                                                    exit_loop  # loop_27
+                                                                                                                  }
+                                                                                                                }
+                                                                                                                store %i_27, 0i
+                                                                                                                loop [b: $B111, c: $B112] {  # loop_28
+                                                                                                                  $B111: {  # body
+                                                                                                                    %106:i32 = load %i_27
+                                                                                                                    %107:bool = lt %106, 1i
+                                                                                                                    if %107 [t: $B113, f: $B114] {  # if_28
+                                                                                                                      $B113: {  # true
+                                                                                                                        exit_if  # if_28
+                                                                                                                      }
+                                                                                                                      $B114: {  # false
+                                                                                                                        exit_loop  # loop_28
+                                                                                                                      }
+                                                                                                                    }
+                                                                                                                    store %i_28, 0i
+                                                                                                                    loop [b: $B115, c: $B116] {  # loop_29
+                                                                                                                      $B115: {  # body
+                                                                                                                        %108:i32 = load %i_28
+                                                                                                                        %109:bool = lt %108, 1i
+                                                                                                                        if %109 [t: $B117, f: $B118] {  # if_29
+                                                                                                                          $B117: {  # true
+                                                                                                                            exit_if  # if_29
+                                                                                                                          }
+                                                                                                                          $B118: {  # false
+                                                                                                                            exit_loop  # loop_29
+                                                                                                                          }
+                                                                                                                        }
+                                                                                                                        store %i_29, 0i
+                                                                                                                        loop [b: $B119, c: $B120] {  # loop_30
+                                                                                                                          $B119: {  # body
+                                                                                                                            %110:i32 = load %i_29
+                                                                                                                            %111:bool = lt %110, 1i
+                                                                                                                            if %111 [t: $B121, f: $B122] {  # if_30
+                                                                                                                              $B121: {  # true
+                                                                                                                                exit_if  # if_30
+                                                                                                                              }
+                                                                                                                              $B122: {  # false
+                                                                                                                                exit_loop  # loop_30
+                                                                                                                              }
+                                                                                                                            }
+                                                                                                                            store %i_30, 0i
+                                                                                                                            loop [b: $B123, c: $B124] {  # loop_31
+                                                                                                                              $B123: {  # body
+                                                                                                                                %112:i32 = load %i_30
+                                                                                                                                %113:bool = lt %112, 1i
+                                                                                                                                if %113 [t: $B125, f: $B126] {  # if_31
+                                                                                                                                  $B125: {  # true
+                                                                                                                                    exit_if  # if_31
+                                                                                                                                  }
+                                                                                                                                  $B126: {  # false
+                                                                                                                                    exit_loop  # loop_31
+                                                                                                                                  }
+                                                                                                                                }
+                                                                                                                                store %i_31, 0i
+                                                                                                                                loop [b: $B127, c: $B128] {  # loop_32
+                                                                                                                                  $B127: {  # body
+                                                                                                                                    %114:i32 = load %i_31
+                                                                                                                                    %115:bool = lt %114, 1i
+                                                                                                                                    if %115 [t: $B129, f: $B130] {  # if_32
+                                                                                                                                      $B129: {  # true
+                                                                                                                                        exit_if  # if_32
+                                                                                                                                      }
+                                                                                                                                      $B130: {  # false
+                                                                                                                                        exit_loop  # loop_32
+                                                                                                                                      }
+                                                                                                                                    }
+                                                                                                                                    store %i_32, 0i
+                                                                                                                                    loop [b: $B131, c: $B132] {  # loop_33
+                                                                                                                                      $B131: {  # body
+                                                                                                                                        %116:i32 = load %i_32
+                                                                                                                                        %117:bool = lt %116, 1i
+                                                                                                                                        if %117 [t: $B133, f: $B134] {  # if_33
+                                                                                                                                          $B133: {  # true
+                                                                                                                                            exit_if  # if_33
+                                                                                                                                          }
+                                                                                                                                          $B134: {  # false
+                                                                                                                                            exit_loop  # loop_33
+                                                                                                                                          }
+                                                                                                                                        }
+                                                                                                                                        store %i_33, 0i
+                                                                                                                                        loop [b: $B135, c: $B136] {  # loop_34
+                                                                                                                                          $B135: {  # body
+                                                                                                                                            %118:i32 = load %i_33
+                                                                                                                                            %119:bool = lt %118, 1i
+                                                                                                                                            if %119 [t: $B137, f: $B138] {  # if_34
+                                                                                                                                              $B137: {  # true
+                                                                                                                                                exit_if  # if_34
+                                                                                                                                              }
+                                                                                                                                              $B138: {  # false
+                                                                                                                                                exit_loop  # loop_34
+                                                                                                                                              }
+                                                                                                                                            }
+                                                                                                                                            store %i_34, 0i
+                                                                                                                                            loop [b: $B139, c: $B140] {  # loop_35
+                                                                                                                                              $B139: {  # body
+                                                                                                                                                %120:i32 = load %i_34
+                                                                                                                                                %121:bool = lt %120, 1i
+                                                                                                                                                if %121 [t: $B141, f: $B142] {  # if_35
+                                                                                                                                                  $B141: {  # true
+                                                                                                                                                    exit_if  # if_35
+                                                                                                                                                  }
+                                                                                                                                                  $B142: {  # false
+                                                                                                                                                    exit_loop  # loop_35
+                                                                                                                                                  }
+                                                                                                                                                }
+                                                                                                                                                store %i_35, 0i
+                                                                                                                                                loop [b: $B143, c: $B144] {  # loop_36
+                                                                                                                                                  $B143: {  # body
+                                                                                                                                                    %122:i32 = load %i_35
+                                                                                                                                                    %123:bool = lt %122, 1i
+                                                                                                                                                    if %123 [t: $B145, f: $B146] {  # if_36
+                                                                                                                                                      $B145: {  # true
+                                                                                                                                                        exit_if  # if_36
+                                                                                                                                                      }
+                                                                                                                                                      $B146: {  # false
+                                                                                                                                                        exit_loop  # loop_36
+                                                                                                                                                      }
+                                                                                                                                                    }
+                                                                                                                                                    store %i_36, 0i
+                                                                                                                                                    loop [b: $B147, c: $B148] {  # loop_37
+                                                                                                                                                      $B147: {  # body
+                                                                                                                                                        %124:i32 = load %i_36
+                                                                                                                                                        %125:bool = lt %124, 1i
+                                                                                                                                                        if %125 [t: $B149, f: $B150] {  # if_37
+                                                                                                                                                          $B149: {  # true
+                                                                                                                                                            exit_if  # if_37
+                                                                                                                                                          }
+                                                                                                                                                          $B150: {  # false
+                                                                                                                                                            exit_loop  # loop_37
+                                                                                                                                                          }
+                                                                                                                                                        }
+                                                                                                                                                        store %i_37, 0i
+                                                                                                                                                        loop [b: $B151, c: $B152] {  # loop_38
+                                                                                                                                                          $B151: {  # body
+                                                                                                                                                            %126:i32 = load %i_37
+                                                                                                                                                            %127:bool = lt %126, 1i
+                                                                                                                                                            if %127 [t: $B153, f: $B154] {  # if_38
+                                                                                                                                                              $B153: {  # true
+                                                                                                                                                                exit_if  # if_38
+                                                                                                                                                              }
+                                                                                                                                                              $B154: {  # false
+                                                                                                                                                                exit_loop  # loop_38
+                                                                                                                                                              }
+                                                                                                                                                            }
+                                                                                                                                                            loop [b: $B155, c: $B156] {  # loop_39
+                                                                                                                                                              $B155: {  # body
+                                                                                                                                                                %128:i32 = load %x_GLF_global_loop_count
+                                                                                                                                                                %129:i32 = add %128, 1i
+                                                                                                                                                                store %x_GLF_global_loop_count, %129
+                                                                                                                                                                continue  # -> $B156
+                                                                                                                                                              }
+                                                                                                                                                              $B156: {  # continuing
+                                                                                                                                                                %130:i32 = load %x_GLF_global_loop_count
+                                                                                                                                                                %x_373:i32 = let %130
+                                                                                                                                                                %132:bool = lt %x_373, 98i
+                                                                                                                                                                %133:bool = eq %132, false
+                                                                                                                                                                break_if %133  # -> [t: exit_loop loop_39, f: $B155]
+                                                                                                                                                              }
+                                                                                                                                                            }
+                                                                                                                                                            %134:i32 = load %i_37
+                                                                                                                                                            %x_375:i32 = let %134
+                                                                                                                                                            %136:i32 = load %i_37
+                                                                                                                                                            %x_376:i32 = let %136
+                                                                                                                                                            %138:ptr<function, vec3<f32>, read_write> = access %m23, %x_375
+                                                                                                                                                            store_vector_element %138, %x_376, 1.0f
+                                                                                                                                                            %139:i32 = load %i_37
+                                                                                                                                                            %x_378:i32 = let %139
+                                                                                                                                                            %141:i32 = load %i_37
+                                                                                                                                                            %x_379:i32 = let %141
+                                                                                                                                                            %143:ptr<function, vec4<f32>, read_write> = access %m24, %x_378
+                                                                                                                                                            store_vector_element %143, %x_379, 1.0f
+                                                                                                                                                            %144:i32 = load %i_37
+                                                                                                                                                            %x_381:i32 = let %144
+                                                                                                                                                            %146:i32 = load %i_37
+                                                                                                                                                            %x_382:i32 = let %146
+                                                                                                                                                            %148:ptr<function, vec2<f32>, read_write> = access %m32, %x_381
+                                                                                                                                                            store_vector_element %148, %x_382, 1.0f
+                                                                                                                                                            %149:i32 = load %i_37
+                                                                                                                                                            %x_384:i32 = let %149
+                                                                                                                                                            %151:i32 = load %i_37
+                                                                                                                                                            %x_385:i32 = let %151
+                                                                                                                                                            %153:ptr<function, vec3<f32>, read_write> = access %m33, %x_384
+                                                                                                                                                            store_vector_element %153, %x_385, 1.0f
+                                                                                                                                                            %154:i32 = load %i_37
+                                                                                                                                                            %x_387:i32 = let %154
+                                                                                                                                                            %156:i32 = load %i_37
+                                                                                                                                                            %x_388:i32 = let %156
+                                                                                                                                                            %158:ptr<function, vec4<f32>, read_write> = access %m34, %x_387
+                                                                                                                                                            store_vector_element %158, %x_388, 1.0f
+                                                                                                                                                            %159:i32 = load %i_37
+                                                                                                                                                            %x_390:i32 = let %159
+                                                                                                                                                            %161:i32 = load %i_37
+                                                                                                                                                            %x_391:i32 = let %161
+                                                                                                                                                            %163:ptr<function, vec2<f32>, read_write> = access %m42, %x_390
+                                                                                                                                                            store_vector_element %163, %x_391, 1.0f
+                                                                                                                                                            %164:i32 = load %i_37
+                                                                                                                                                            %x_393:i32 = let %164
+                                                                                                                                                            %166:i32 = load %i_37
+                                                                                                                                                            %x_394:i32 = let %166
+                                                                                                                                                            %168:ptr<function, vec3<f32>, read_write> = access %m43, %x_393
+                                                                                                                                                            store_vector_element %168, %x_394, 1.0f
+                                                                                                                                                            %169:i32 = load %i_37
+                                                                                                                                                            %x_396:i32 = let %169
+                                                                                                                                                            %171:i32 = load %i_37
+                                                                                                                                                            %x_397:i32 = let %171
+                                                                                                                                                            %173:ptr<function, vec4<f32>, read_write> = access %m44, %x_396
+                                                                                                                                                            store_vector_element %173, %x_397, 1.0f
+                                                                                                                                                            continue  # -> $B152
+                                                                                                                                                          }
+                                                                                                                                                          $B152: {  # continuing
+                                                                                                                                                            %174:i32 = load %i_37
+                                                                                                                                                            %175:i32 = add %174, 1i
+                                                                                                                                                            store %i_37, %175
+                                                                                                                                                            next_iteration  # -> $B151
+                                                                                                                                                          }
+                                                                                                                                                        }
+                                                                                                                                                        continue  # -> $B148
+                                                                                                                                                      }
+                                                                                                                                                      $B148: {  # continuing
+                                                                                                                                                        %176:i32 = load %i_36
+                                                                                                                                                        %177:i32 = add %176, 1i
+                                                                                                                                                        store %i_36, %177
+                                                                                                                                                        next_iteration  # -> $B147
+                                                                                                                                                      }
+                                                                                                                                                    }
+                                                                                                                                                    continue  # -> $B144
+                                                                                                                                                  }
+                                                                                                                                                  $B144: {  # continuing
+                                                                                                                                                    %178:i32 = load %i_35
+                                                                                                                                                    %179:i32 = add %178, 1i
+                                                                                                                                                    store %i_35, %179
+                                                                                                                                                    next_iteration  # -> $B143
+                                                                                                                                                  }
+                                                                                                                                                }
+                                                                                                                                                continue  # -> $B140
+                                                                                                                                              }
+                                                                                                                                              $B140: {  # continuing
+                                                                                                                                                %180:i32 = load %i_34
+                                                                                                                                                %181:i32 = add %180, 1i
+                                                                                                                                                store %i_34, %181
+                                                                                                                                                next_iteration  # -> $B139
+                                                                                                                                              }
+                                                                                                                                            }
+                                                                                                                                            continue  # -> $B136
+                                                                                                                                          }
+                                                                                                                                          $B136: {  # continuing
+                                                                                                                                            %182:i32 = load %i_33
+                                                                                                                                            %183:i32 = add %182, 1i
+                                                                                                                                            store %i_33, %183
+                                                                                                                                            next_iteration  # -> $B135
+                                                                                                                                          }
+                                                                                                                                        }
+                                                                                                                                        continue  # -> $B132
+                                                                                                                                      }
+                                                                                                                                      $B132: {  # continuing
+                                                                                                                                        %184:i32 = load %i_32
+                                                                                                                                        %185:i32 = add %184, 1i
+                                                                                                                                        store %i_32, %185
+                                                                                                                                        next_iteration  # -> $B131
+                                                                                                                                      }
+                                                                                                                                    }
+                                                                                                                                    continue  # -> $B128
+                                                                                                                                  }
+                                                                                                                                  $B128: {  # continuing
+                                                                                                                                    %186:i32 = load %i_31
+                                                                                                                                    %187:i32 = add %186, 1i
+                                                                                                                                    store %i_31, %187
+                                                                                                                                    next_iteration  # -> $B127
+                                                                                                                                  }
+                                                                                                                                }
+                                                                                                                                continue  # -> $B124
+                                                                                                                              }
+                                                                                                                              $B124: {  # continuing
+                                                                                                                                %188:i32 = load %i_30
+                                                                                                                                %189:i32 = add %188, 1i
+                                                                                                                                store %i_30, %189
+                                                                                                                                next_iteration  # -> $B123
+                                                                                                                              }
+                                                                                                                            }
+                                                                                                                            continue  # -> $B120
+                                                                                                                          }
+                                                                                                                          $B120: {  # continuing
+                                                                                                                            %190:i32 = load %i_29
+                                                                                                                            %191:i32 = add %190, 1i
+                                                                                                                            store %i_29, %191
+                                                                                                                            next_iteration  # -> $B119
+                                                                                                                          }
+                                                                                                                        }
+                                                                                                                        continue  # -> $B116
+                                                                                                                      }
+                                                                                                                      $B116: {  # continuing
+                                                                                                                        %192:i32 = load %i_28
+                                                                                                                        %193:i32 = add %192, 1i
+                                                                                                                        store %i_28, %193
+                                                                                                                        next_iteration  # -> $B115
+                                                                                                                      }
+                                                                                                                    }
+                                                                                                                    continue  # -> $B112
+                                                                                                                  }
+                                                                                                                  $B112: {  # continuing
+                                                                                                                    %194:i32 = load %i_27
+                                                                                                                    %195:i32 = add %194, 1i
+                                                                                                                    store %i_27, %195
+                                                                                                                    next_iteration  # -> $B111
+                                                                                                                  }
+                                                                                                                }
+                                                                                                                continue  # -> $B108
+                                                                                                              }
+                                                                                                              $B108: {  # continuing
+                                                                                                                %196:i32 = load %i_26
+                                                                                                                %197:i32 = add %196, 1i
+                                                                                                                store %i_26, %197
+                                                                                                                next_iteration  # -> $B107
+                                                                                                              }
+                                                                                                            }
+                                                                                                            continue  # -> $B104
+                                                                                                          }
+                                                                                                          $B104: {  # continuing
+                                                                                                            %198:i32 = load %i_25
+                                                                                                            %199:i32 = add %198, 1i
+                                                                                                            store %i_25, %199
+                                                                                                            next_iteration  # -> $B103
+                                                                                                          }
+                                                                                                        }
+                                                                                                        continue  # -> $B100
+                                                                                                      }
+                                                                                                      $B100: {  # continuing
+                                                                                                        %200:i32 = load %i_24
+                                                                                                        %201:i32 = add %200, 1i
+                                                                                                        store %i_24, %201
+                                                                                                        next_iteration  # -> $B99
+                                                                                                      }
+                                                                                                    }
+                                                                                                    continue  # -> $B96
+                                                                                                  }
+                                                                                                  $B96: {  # continuing
+                                                                                                    %202:i32 = load %i_23
+                                                                                                    %203:i32 = add %202, 1i
+                                                                                                    store %i_23, %203
+                                                                                                    next_iteration  # -> $B95
+                                                                                                  }
+                                                                                                }
+                                                                                                continue  # -> $B92
+                                                                                              }
+                                                                                              $B92: {  # continuing
+                                                                                                %204:i32 = load %i_22
+                                                                                                %205:i32 = add %204, 1i
+                                                                                                store %i_22, %205
+                                                                                                next_iteration  # -> $B91
+                                                                                              }
+                                                                                            }
+                                                                                            continue  # -> $B88
+                                                                                          }
+                                                                                          $B88: {  # continuing
+                                                                                            %206:i32 = load %i_21
+                                                                                            %207:i32 = add %206, 1i
+                                                                                            store %i_21, %207
+                                                                                            next_iteration  # -> $B87
+                                                                                          }
+                                                                                        }
+                                                                                        continue  # -> $B84
+                                                                                      }
+                                                                                      $B84: {  # continuing
+                                                                                        %208:i32 = load %i_20
+                                                                                        %209:i32 = add %208, 1i
+                                                                                        store %i_20, %209
+                                                                                        next_iteration  # -> $B83
+                                                                                      }
+                                                                                    }
+                                                                                    continue  # -> $B80
+                                                                                  }
+                                                                                  $B80: {  # continuing
+                                                                                    %210:i32 = load %i_19
+                                                                                    %211:i32 = add %210, 1i
+                                                                                    store %i_19, %211
+                                                                                    next_iteration  # -> $B79
+                                                                                  }
+                                                                                }
+                                                                                continue  # -> $B76
+                                                                              }
+                                                                              $B76: {  # continuing
+                                                                                %212:i32 = load %i_18
+                                                                                %213:i32 = add %212, 1i
+                                                                                store %i_18, %213
+                                                                                next_iteration  # -> $B75
+                                                                              }
+                                                                            }
+                                                                            continue  # -> $B72
+                                                                          }
+                                                                          $B72: {  # continuing
+                                                                            %214:i32 = load %i_17
+                                                                            %215:i32 = add %214, 1i
+                                                                            store %i_17, %215
+                                                                            next_iteration  # -> $B71
+                                                                          }
+                                                                        }
+                                                                        continue  # -> $B68
+                                                                      }
+                                                                      $B68: {  # continuing
+                                                                        %216:i32 = load %i_16
+                                                                        %217:i32 = add %216, 1i
+                                                                        store %i_16, %217
+                                                                        next_iteration  # -> $B67
+                                                                      }
+                                                                    }
+                                                                    continue  # -> $B64
+                                                                  }
+                                                                  $B64: {  # continuing
+                                                                    %218:i32 = load %i_15
+                                                                    %219:i32 = add %218, 1i
+                                                                    store %i_15, %219
+                                                                    next_iteration  # -> $B63
+                                                                  }
+                                                                }
+                                                                continue  # -> $B60
+                                                              }
+                                                              $B60: {  # continuing
+                                                                %220:i32 = load %i_14
+                                                                %221:i32 = add %220, 1i
+                                                                store %i_14, %221
+                                                                next_iteration  # -> $B59
+                                                              }
+                                                            }
+                                                            continue  # -> $B56
+                                                          }
+                                                          $B56: {  # continuing
+                                                            %222:i32 = load %i_13
+                                                            %223:i32 = add %222, 1i
+                                                            store %i_13, %223
+                                                            next_iteration  # -> $B55
+                                                          }
+                                                        }
+                                                        continue  # -> $B52
+                                                      }
+                                                      $B52: {  # continuing
+                                                        %224:i32 = load %i_12
+                                                        %225:i32 = add %224, 1i
+                                                        store %i_12, %225
+                                                        next_iteration  # -> $B51
+                                                      }
+                                                    }
+                                                    continue  # -> $B48
+                                                  }
+                                                  $B48: {  # continuing
+                                                    %226:i32 = load %i_11
+                                                    %227:i32 = add %226, 1i
+                                                    store %i_11, %227
+                                                    next_iteration  # -> $B47
+                                                  }
+                                                }
+                                                continue  # -> $B44
+                                              }
+                                              $B44: {  # continuing
+                                                %228:i32 = load %i_10
+                                                %229:i32 = add %228, 1i
+                                                store %i_10, %229
+                                                next_iteration  # -> $B43
+                                              }
+                                            }
+                                            continue  # -> $B40
+                                          }
+                                          $B40: {  # continuing
+                                            %230:i32 = load %i_9
+                                            %231:i32 = add %230, 1i
+                                            store %i_9, %231
+                                            next_iteration  # -> $B39
+                                          }
+                                        }
+                                        continue  # -> $B36
+                                      }
+                                      $B36: {  # continuing
+                                        %232:i32 = load %i_8
+                                        %233:i32 = add %232, 1i
+                                        store %i_8, %233
+                                        next_iteration  # -> $B35
+                                      }
+                                    }
+                                    continue  # -> $B32
+                                  }
+                                  $B32: {  # continuing
+                                    %234:i32 = load %i_7
+                                    %235:i32 = add %234, 1i
+                                    store %i_7, %235
+                                    next_iteration  # -> $B31
+                                  }
+                                }
+                                continue  # -> $B28
+                              }
+                              $B28: {  # continuing
+                                %236:i32 = load %i_6
+                                %237:i32 = add %236, 1i
+                                store %i_6, %237
+                                next_iteration  # -> $B27
+                              }
+                            }
+                            continue  # -> $B24
+                          }
+                          $B24: {  # continuing
+                            %238:i32 = load %i_5
+                            %239:i32 = add %238, 1i
+                            store %i_5, %239
+                            next_iteration  # -> $B23
+                          }
+                        }
+                        continue  # -> $B20
+                      }
+                      $B20: {  # continuing
+                        %240:i32 = load %i_4
+                        %241:i32 = add %240, 1i
+                        store %i_4, %241
+                        next_iteration  # -> $B19
+                      }
+                    }
+                    continue  # -> $B16
+                  }
+                  $B16: {  # continuing
+                    %242:i32 = load %i_3
+                    %243:i32 = add %242, 1i
+                    store %i_3, %243
+                    next_iteration  # -> $B15
+                  }
+                }
+                continue  # -> $B12
+              }
+              $B12: {  # continuing
+                %244:i32 = load %i_2
+                %245:i32 = add %244, 1i
+                store %i_2, %245
+                next_iteration  # -> $B11
+              }
+            }
+            continue  # -> $B8
+          }
+          $B8: {  # continuing
+            %246:i32 = load %i_1
+            %247:i32 = add %246, 1i
+            store %i_1, %247
+            next_iteration  # -> $B7
+          }
+        }
+        continue  # -> $B4
+      }
+      $B4: {  # continuing
+        %248:i32 = load %i
+        %249:i32 = add %248, 1i
+        store %i, %249
+        next_iteration  # -> $B3
+      }
+    }
+    store %sum, 0.0f
+    store %r, 0i
+    loop [b: $B157, c: $B158] {  # loop_40
+      $B157: {  # body
+        %250:i32 = load %x_GLF_global_loop_count
+        %251:bool = lt %250, 100i
+        if %251 [t: $B159, f: $B160] {  # if_39
+          $B159: {  # true
+            exit_if  # if_39
+          }
+          $B160: {  # false
+            exit_loop  # loop_40
+          }
+        }
+        %252:i32 = load %x_GLF_global_loop_count
+        %253:i32 = add %252, 1i
+        store %x_GLF_global_loop_count, %253
+        %254:f32 = load %sum
+        %255:ptr<function, vec3<f32>, read_write> = access %m23, 0i
+        %256:i32 = load %r
+        %257:f32 = load_vector_element %255, %256
+        %258:f32 = add %254, %257
+        store %sum, %258
+        %259:f32 = load %sum
+        %260:ptr<function, vec4<f32>, read_write> = access %m24, 0i
+        %261:i32 = load %r
+        %262:f32 = load_vector_element %260, %261
+        %263:f32 = add %259, %262
+        store %sum, %263
+        %264:f32 = load %sum
+        %265:ptr<function, vec2<f32>, read_write> = access %m32, 0i
+        %266:i32 = load %r
+        %267:f32 = load_vector_element %265, %266
+        %268:f32 = add %264, %267
+        store %sum, %268
+        %269:f32 = load %sum
+        %270:ptr<function, vec3<f32>, read_write> = access %m33, 0i
+        %271:i32 = load %r
+        %272:f32 = load_vector_element %270, %271
+        %273:f32 = add %269, %272
+        store %sum, %273
+        %274:f32 = load %sum
+        %275:ptr<function, vec4<f32>, read_write> = access %m34, 0i
+        %276:i32 = load %r
+        %277:f32 = load_vector_element %275, %276
+        %278:f32 = add %274, %277
+        store %sum, %278
+        %279:f32 = load %sum
+        %280:ptr<function, vec2<f32>, read_write> = access %m42, 0i
+        %281:i32 = load %r
+        %282:f32 = load_vector_element %280, %281
+        %283:f32 = add %279, %282
+        store %sum, %283
+        %284:f32 = load %sum
+        %285:ptr<function, vec3<f32>, read_write> = access %m43, 0i
+        %286:i32 = load %r
+        %287:f32 = load_vector_element %285, %286
+        %288:f32 = add %284, %287
+        store %sum, %288
+        %289:f32 = load %sum
+        %290:ptr<function, vec4<f32>, read_write> = access %m44, 0i
+        %291:i32 = load %r
+        %292:f32 = load_vector_element %290, %291
+        %293:f32 = add %289, %292
+        store %sum, %293
+        continue  # -> $B158
+      }
+      $B158: {  # continuing
+        %294:i32 = load %r
+        %295:i32 = add %294, 1i
+        store %r, %295
+        next_iteration  # -> $B157
+      }
+    }
+    %296:f32 = load %sum
+    %297:bool = eq %296, 8.0f
+    if %297 [t: $B161, f: $B162] {  # if_40
+      $B161: {  # true
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        exit_if  # if_40
+      }
+      $B162: {  # false
+        store %x_GLF_color, vec4<f32>(0.0f)
+        exit_if  # if_40
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B163: {
+    %299:void = call %main_1
+    %300:vec4<f32> = load %x_GLF_color
+    %301:main_out = construct %300
+    ret %301
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-multiple-one-iteration-loops-global-counter-write-matrices/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-multiple-one-iteration-loops-global-counter-write-matrices/0-opt.wgsl.expected.ir.msl
index efdd3b1..1d329ca 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-multiple-one-iteration-loops-global-counter-write-matrices/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-multiple-one-iteration-loops-global-counter-write-matrices/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,1176 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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_global_loop_count:ptr<private, i32, read_write> = var
+  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+}
+
+%main_1 = func():void {
+  $B2: {
+    %m23:ptr<function, mat2x3<f32>, read_write> = var
+    %m24:ptr<function, mat2x4<f32>, read_write> = var
+    %m32:ptr<function, mat3x2<f32>, read_write> = var
+    %m33:ptr<function, mat3x3<f32>, read_write> = var
+    %m34:ptr<function, mat3x4<f32>, read_write> = var
+    %m42:ptr<function, mat4x2<f32>, read_write> = var
+    %m43:ptr<function, mat4x3<f32>, read_write> = var
+    %m44:ptr<function, mat4x4<f32>, read_write> = var
+    %i:ptr<function, i32, read_write> = var
+    %i_1:ptr<function, i32, read_write> = var
+    %i_2:ptr<function, i32, read_write> = var
+    %i_3:ptr<function, i32, read_write> = var
+    %i_4:ptr<function, i32, read_write> = var
+    %i_5:ptr<function, i32, read_write> = var
+    %i_6:ptr<function, i32, read_write> = var
+    %i_7:ptr<function, i32, read_write> = var
+    %i_8:ptr<function, i32, read_write> = var
+    %i_9:ptr<function, i32, read_write> = var
+    %i_10:ptr<function, i32, read_write> = var
+    %i_11:ptr<function, i32, read_write> = var
+    %i_12:ptr<function, i32, read_write> = var
+    %i_13:ptr<function, i32, read_write> = var
+    %i_14:ptr<function, i32, read_write> = var
+    %i_15:ptr<function, i32, read_write> = var
+    %i_16:ptr<function, i32, read_write> = var
+    %i_17:ptr<function, i32, read_write> = var
+    %i_18:ptr<function, i32, read_write> = var
+    %i_19:ptr<function, i32, read_write> = var
+    %i_20:ptr<function, i32, read_write> = var
+    %i_21:ptr<function, i32, read_write> = var
+    %i_22:ptr<function, i32, read_write> = var
+    %i_23:ptr<function, i32, read_write> = var
+    %i_24:ptr<function, i32, read_write> = var
+    %i_25:ptr<function, i32, read_write> = var
+    %i_26:ptr<function, i32, read_write> = var
+    %i_27:ptr<function, i32, read_write> = var
+    %i_28:ptr<function, i32, read_write> = var
+    %i_29:ptr<function, i32, read_write> = var
+    %i_30:ptr<function, i32, read_write> = var
+    %i_31:ptr<function, i32, read_write> = var
+    %i_32:ptr<function, i32, read_write> = var
+    %i_33:ptr<function, i32, read_write> = var
+    %i_34:ptr<function, i32, read_write> = var
+    %i_35:ptr<function, i32, read_write> = var
+    %i_36:ptr<function, i32, read_write> = var
+    %i_37:ptr<function, i32, read_write> = var
+    %sum:ptr<function, f32, read_write> = var
+    %r:ptr<function, i32, read_write> = var
+    store %x_GLF_global_loop_count, 0i
+    store %m23, mat2x3<f32>(vec3<f32>(0.0f))
+    store %m24, mat2x4<f32>(vec4<f32>(0.0f))
+    store %m32, mat3x2<f32>(vec2<f32>(0.0f))
+    store %m33, mat3x3<f32>(vec3<f32>(0.0f))
+    store %m34, mat3x4<f32>(vec4<f32>(0.0f))
+    store %m42, mat4x2<f32>(vec2<f32>(0.0f))
+    store %m43, mat4x3<f32>(vec3<f32>(0.0f))
+    store %m44, mat4x4<f32>(vec4<f32>(0.0f))
+    store %i, 0i
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %52:i32 = load %i
+        %x_105:i32 = let %52
+        %54:bool = lt %x_105, 1i
+        if %54 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
+            exit_if  # if_1
+          }
+          $B6: {  # false
+            exit_loop  # loop_1
+          }
+        }
+        store %i_1, 0i
+        loop [b: $B7, c: $B8] {  # loop_2
+          $B7: {  # body
+            %55:i32 = load %i_1
+            %x_112:i32 = let %55
+            %57:bool = lt %x_112, 1i
+            if %57 [t: $B9, f: $B10] {  # if_2
+              $B9: {  # true
+                exit_if  # if_2
+              }
+              $B10: {  # false
+                exit_loop  # loop_2
+              }
+            }
+            store %i_2, 0i
+            loop [b: $B11, c: $B12] {  # loop_3
+              $B11: {  # body
+                %58:i32 = load %i_2
+                %x_119:i32 = let %58
+                %60:bool = lt %x_119, 1i
+                if %60 [t: $B13, f: $B14] {  # if_3
+                  $B13: {  # true
+                    exit_if  # if_3
+                  }
+                  $B14: {  # false
+                    exit_loop  # loop_3
+                  }
+                }
+                store %i_3, 0i
+                loop [b: $B15, c: $B16] {  # loop_4
+                  $B15: {  # body
+                    %61:i32 = load %i_3
+                    %x_126:i32 = let %61
+                    %63:bool = lt %x_126, 1i
+                    if %63 [t: $B17, f: $B18] {  # if_4
+                      $B17: {  # true
+                        exit_if  # if_4
+                      }
+                      $B18: {  # false
+                        exit_loop  # loop_4
+                      }
+                    }
+                    store %i_4, 0i
+                    loop [b: $B19, c: $B20] {  # loop_5
+                      $B19: {  # body
+                        %64:i32 = load %i_4
+                        %x_133:i32 = let %64
+                        %66:bool = lt %x_133, 1i
+                        if %66 [t: $B21, f: $B22] {  # if_5
+                          $B21: {  # true
+                            exit_if  # if_5
+                          }
+                          $B22: {  # false
+                            exit_loop  # loop_5
+                          }
+                        }
+                        store %i_5, 0i
+                        loop [b: $B23, c: $B24] {  # loop_6
+                          $B23: {  # body
+                            %67:i32 = load %i_5
+                            %x_140:i32 = let %67
+                            %69:bool = lt %x_140, 1i
+                            if %69 [t: $B25, f: $B26] {  # if_6
+                              $B25: {  # true
+                                exit_if  # if_6
+                              }
+                              $B26: {  # false
+                                exit_loop  # loop_6
+                              }
+                            }
+                            store %i_6, 0i
+                            loop [b: $B27, c: $B28] {  # loop_7
+                              $B27: {  # body
+                                %70:i32 = load %i_6
+                                %x_147:i32 = let %70
+                                %72:bool = lt %x_147, 1i
+                                if %72 [t: $B29, f: $B30] {  # if_7
+                                  $B29: {  # true
+                                    exit_if  # if_7
+                                  }
+                                  $B30: {  # false
+                                    exit_loop  # loop_7
+                                  }
+                                }
+                                store %i_7, 0i
+                                loop [b: $B31, c: $B32] {  # loop_8
+                                  $B31: {  # body
+                                    %73:i32 = load %i_7
+                                    %x_154:i32 = let %73
+                                    %75:bool = lt %x_154, 1i
+                                    if %75 [t: $B33, f: $B34] {  # if_8
+                                      $B33: {  # true
+                                        exit_if  # if_8
+                                      }
+                                      $B34: {  # false
+                                        exit_loop  # loop_8
+                                      }
+                                    }
+                                    store %i_8, 0i
+                                    loop [b: $B35, c: $B36] {  # loop_9
+                                      $B35: {  # body
+                                        %76:i32 = load %i_8
+                                        %x_161:i32 = let %76
+                                        %78:bool = lt %x_161, 1i
+                                        if %78 [t: $B37, f: $B38] {  # if_9
+                                          $B37: {  # true
+                                            exit_if  # if_9
+                                          }
+                                          $B38: {  # false
+                                            exit_loop  # loop_9
+                                          }
+                                        }
+                                        store %i_9, 0i
+                                        loop [b: $B39, c: $B40] {  # loop_10
+                                          $B39: {  # body
+                                            %79:i32 = load %i_9
+                                            %x_168:i32 = let %79
+                                            %81:bool = lt %x_168, 1i
+                                            if %81 [t: $B41, f: $B42] {  # if_10
+                                              $B41: {  # true
+                                                exit_if  # if_10
+                                              }
+                                              $B42: {  # false
+                                                exit_loop  # loop_10
+                                              }
+                                            }
+                                            store %i_10, 0i
+                                            loop [b: $B43, c: $B44] {  # loop_11
+                                              $B43: {  # body
+                                                %82:i32 = load %i_10
+                                                %x_175:i32 = let %82
+                                                %84:bool = lt %x_175, 1i
+                                                if %84 [t: $B45, f: $B46] {  # if_11
+                                                  $B45: {  # true
+                                                    exit_if  # if_11
+                                                  }
+                                                  $B46: {  # false
+                                                    exit_loop  # loop_11
+                                                  }
+                                                }
+                                                store %i_11, 0i
+                                                loop [b: $B47, c: $B48] {  # loop_12
+                                                  $B47: {  # body
+                                                    %85:i32 = load %i_11
+                                                    %x_182:i32 = let %85
+                                                    %87:bool = lt %x_182, 1i
+                                                    if %87 [t: $B49, f: $B50] {  # if_12
+                                                      $B49: {  # true
+                                                        exit_if  # if_12
+                                                      }
+                                                      $B50: {  # false
+                                                        exit_loop  # loop_12
+                                                      }
+                                                    }
+                                                    store %i_12, 0i
+                                                    loop [b: $B51, c: $B52] {  # loop_13
+                                                      $B51: {  # body
+                                                        %88:i32 = load %i_12
+                                                        %x_189:i32 = let %88
+                                                        %90:bool = lt %x_189, 1i
+                                                        if %90 [t: $B53, f: $B54] {  # if_13
+                                                          $B53: {  # true
+                                                            exit_if  # if_13
+                                                          }
+                                                          $B54: {  # false
+                                                            exit_loop  # loop_13
+                                                          }
+                                                        }
+                                                        store %i_13, 0i
+                                                        loop [b: $B55, c: $B56] {  # loop_14
+                                                          $B55: {  # body
+                                                            %91:i32 = load %i_13
+                                                            %x_196:i32 = let %91
+                                                            %93:bool = lt %x_196, 1i
+                                                            if %93 [t: $B57, f: $B58] {  # if_14
+                                                              $B57: {  # true
+                                                                exit_if  # if_14
+                                                              }
+                                                              $B58: {  # false
+                                                                exit_loop  # loop_14
+                                                              }
+                                                            }
+                                                            store %i_14, 0i
+                                                            loop [b: $B59, c: $B60] {  # loop_15
+                                                              $B59: {  # body
+                                                                %94:i32 = load %i_14
+                                                                %x_203:i32 = let %94
+                                                                %96:bool = lt %x_203, 1i
+                                                                if %96 [t: $B61, f: $B62] {  # if_15
+                                                                  $B61: {  # true
+                                                                    exit_if  # if_15
+                                                                  }
+                                                                  $B62: {  # false
+                                                                    exit_loop  # loop_15
+                                                                  }
+                                                                }
+                                                                store %i_15, 0i
+                                                                loop [b: $B63, c: $B64] {  # loop_16
+                                                                  $B63: {  # body
+                                                                    %97:i32 = load %i_15
+                                                                    %x_210:i32 = let %97
+                                                                    %99:bool = lt %x_210, 1i
+                                                                    if %99 [t: $B65, f: $B66] {  # if_16
+                                                                      $B65: {  # true
+                                                                        exit_if  # if_16
+                                                                      }
+                                                                      $B66: {  # false
+                                                                        exit_loop  # loop_16
+                                                                      }
+                                                                    }
+                                                                    store %i_16, 0i
+                                                                    loop [b: $B67, c: $B68] {  # loop_17
+                                                                      $B67: {  # body
+                                                                        %100:i32 = load %i_16
+                                                                        %x_217:i32 = let %100
+                                                                        %102:bool = lt %x_217, 1i
+                                                                        if %102 [t: $B69, f: $B70] {  # if_17
+                                                                          $B69: {  # true
+                                                                            exit_if  # if_17
+                                                                          }
+                                                                          $B70: {  # false
+                                                                            exit_loop  # loop_17
+                                                                          }
+                                                                        }
+                                                                        store %i_17, 0i
+                                                                        loop [b: $B71, c: $B72] {  # loop_18
+                                                                          $B71: {  # body
+                                                                            %103:i32 = load %i_17
+                                                                            %x_224:i32 = let %103
+                                                                            %105:bool = lt %x_224, 1i
+                                                                            if %105 [t: $B73, f: $B74] {  # if_18
+                                                                              $B73: {  # true
+                                                                                exit_if  # if_18
+                                                                              }
+                                                                              $B74: {  # false
+                                                                                exit_loop  # loop_18
+                                                                              }
+                                                                            }
+                                                                            store %i_18, 0i
+                                                                            loop [b: $B75, c: $B76] {  # loop_19
+                                                                              $B75: {  # body
+                                                                                %106:i32 = load %i_18
+                                                                                %x_231:i32 = let %106
+                                                                                %108:bool = lt %x_231, 1i
+                                                                                if %108 [t: $B77, f: $B78] {  # if_19
+                                                                                  $B77: {  # true
+                                                                                    exit_if  # if_19
+                                                                                  }
+                                                                                  $B78: {  # false
+                                                                                    exit_loop  # loop_19
+                                                                                  }
+                                                                                }
+                                                                                store %i_19, 0i
+                                                                                loop [b: $B79, c: $B80] {  # loop_20
+                                                                                  $B79: {  # body
+                                                                                    %109:i32 = load %i_19
+                                                                                    %x_238:i32 = let %109
+                                                                                    %111:bool = lt %x_238, 1i
+                                                                                    if %111 [t: $B81, f: $B82] {  # if_20
+                                                                                      $B81: {  # true
+                                                                                        exit_if  # if_20
+                                                                                      }
+                                                                                      $B82: {  # false
+                                                                                        exit_loop  # loop_20
+                                                                                      }
+                                                                                    }
+                                                                                    store %i_20, 0i
+                                                                                    loop [b: $B83, c: $B84] {  # loop_21
+                                                                                      $B83: {  # body
+                                                                                        %112:i32 = load %i_20
+                                                                                        %x_245:i32 = let %112
+                                                                                        %114:bool = lt %x_245, 1i
+                                                                                        if %114 [t: $B85, f: $B86] {  # if_21
+                                                                                          $B85: {  # true
+                                                                                            exit_if  # if_21
+                                                                                          }
+                                                                                          $B86: {  # false
+                                                                                            exit_loop  # loop_21
+                                                                                          }
+                                                                                        }
+                                                                                        store %i_21, 0i
+                                                                                        loop [b: $B87, c: $B88] {  # loop_22
+                                                                                          $B87: {  # body
+                                                                                            %115:i32 = load %i_21
+                                                                                            %x_252:i32 = let %115
+                                                                                            %117:bool = lt %x_252, 1i
+                                                                                            if %117 [t: $B89, f: $B90] {  # if_22
+                                                                                              $B89: {  # true
+                                                                                                exit_if  # if_22
+                                                                                              }
+                                                                                              $B90: {  # false
+                                                                                                exit_loop  # loop_22
+                                                                                              }
+                                                                                            }
+                                                                                            store %i_22, 0i
+                                                                                            loop [b: $B91, c: $B92] {  # loop_23
+                                                                                              $B91: {  # body
+                                                                                                %118:i32 = load %i_22
+                                                                                                %x_259:i32 = let %118
+                                                                                                %120:bool = lt %x_259, 1i
+                                                                                                if %120 [t: $B93, f: $B94] {  # if_23
+                                                                                                  $B93: {  # true
+                                                                                                    exit_if  # if_23
+                                                                                                  }
+                                                                                                  $B94: {  # false
+                                                                                                    exit_loop  # loop_23
+                                                                                                  }
+                                                                                                }
+                                                                                                store %i_23, 0i
+                                                                                                loop [b: $B95, c: $B96] {  # loop_24
+                                                                                                  $B95: {  # body
+                                                                                                    %121:i32 = load %i_23
+                                                                                                    %x_266:i32 = let %121
+                                                                                                    %123:bool = lt %x_266, 1i
+                                                                                                    if %123 [t: $B97, f: $B98] {  # if_24
+                                                                                                      $B97: {  # true
+                                                                                                        exit_if  # if_24
+                                                                                                      }
+                                                                                                      $B98: {  # false
+                                                                                                        exit_loop  # loop_24
+                                                                                                      }
+                                                                                                    }
+                                                                                                    store %i_24, 0i
+                                                                                                    loop [b: $B99, c: $B100] {  # loop_25
+                                                                                                      $B99: {  # body
+                                                                                                        %124:i32 = load %i_24
+                                                                                                        %x_273:i32 = let %124
+                                                                                                        %126:bool = lt %x_273, 1i
+                                                                                                        if %126 [t: $B101, f: $B102] {  # if_25
+                                                                                                          $B101: {  # true
+                                                                                                            exit_if  # if_25
+                                                                                                          }
+                                                                                                          $B102: {  # false
+                                                                                                            exit_loop  # loop_25
+                                                                                                          }
+                                                                                                        }
+                                                                                                        store %i_25, 0i
+                                                                                                        loop [b: $B103, c: $B104] {  # loop_26
+                                                                                                          $B103: {  # body
+                                                                                                            %127:i32 = load %i_25
+                                                                                                            %x_280:i32 = let %127
+                                                                                                            %129:bool = lt %x_280, 1i
+                                                                                                            if %129 [t: $B105, f: $B106] {  # if_26
+                                                                                                              $B105: {  # true
+                                                                                                                exit_if  # if_26
+                                                                                                              }
+                                                                                                              $B106: {  # false
+                                                                                                                exit_loop  # loop_26
+                                                                                                              }
+                                                                                                            }
+                                                                                                            store %i_26, 0i
+                                                                                                            loop [b: $B107, c: $B108] {  # loop_27
+                                                                                                              $B107: {  # body
+                                                                                                                %130:i32 = load %i_26
+                                                                                                                %x_287:i32 = let %130
+                                                                                                                %132:bool = lt %x_287, 1i
+                                                                                                                if %132 [t: $B109, f: $B110] {  # if_27
+                                                                                                                  $B109: {  # true
+                                                                                                                    exit_if  # if_27
+                                                                                                                  }
+                                                                                                                  $B110: {  # false
+                                                                                                                    exit_loop  # loop_27
+                                                                                                                  }
+                                                                                                                }
+                                                                                                                store %i_27, 0i
+                                                                                                                loop [b: $B111, c: $B112] {  # loop_28
+                                                                                                                  $B111: {  # body
+                                                                                                                    %133:i32 = load %i_27
+                                                                                                                    %x_294:i32 = let %133
+                                                                                                                    %135:bool = lt %x_294, 1i
+                                                                                                                    if %135 [t: $B113, f: $B114] {  # if_28
+                                                                                                                      $B113: {  # true
+                                                                                                                        exit_if  # if_28
+                                                                                                                      }
+                                                                                                                      $B114: {  # false
+                                                                                                                        exit_loop  # loop_28
+                                                                                                                      }
+                                                                                                                    }
+                                                                                                                    store %i_28, 0i
+                                                                                                                    loop [b: $B115, c: $B116] {  # loop_29
+                                                                                                                      $B115: {  # body
+                                                                                                                        %136:i32 = load %i_28
+                                                                                                                        %x_301:i32 = let %136
+                                                                                                                        %138:bool = lt %x_301, 1i
+                                                                                                                        if %138 [t: $B117, f: $B118] {  # if_29
+                                                                                                                          $B117: {  # true
+                                                                                                                            exit_if  # if_29
+                                                                                                                          }
+                                                                                                                          $B118: {  # false
+                                                                                                                            exit_loop  # loop_29
+                                                                                                                          }
+                                                                                                                        }
+                                                                                                                        store %i_29, 0i
+                                                                                                                        loop [b: $B119, c: $B120] {  # loop_30
+                                                                                                                          $B119: {  # body
+                                                                                                                            %139:i32 = load %i_29
+                                                                                                                            %x_308:i32 = let %139
+                                                                                                                            %141:bool = lt %x_308, 1i
+                                                                                                                            if %141 [t: $B121, f: $B122] {  # if_30
+                                                                                                                              $B121: {  # true
+                                                                                                                                exit_if  # if_30
+                                                                                                                              }
+                                                                                                                              $B122: {  # false
+                                                                                                                                exit_loop  # loop_30
+                                                                                                                              }
+                                                                                                                            }
+                                                                                                                            store %i_30, 0i
+                                                                                                                            loop [b: $B123, c: $B124] {  # loop_31
+                                                                                                                              $B123: {  # body
+                                                                                                                                %142:i32 = load %i_30
+                                                                                                                                %x_315:i32 = let %142
+                                                                                                                                %144:bool = lt %x_315, 1i
+                                                                                                                                if %144 [t: $B125, f: $B126] {  # if_31
+                                                                                                                                  $B125: {  # true
+                                                                                                                                    exit_if  # if_31
+                                                                                                                                  }
+                                                                                                                                  $B126: {  # false
+                                                                                                                                    exit_loop  # loop_31
+                                                                                                                                  }
+                                                                                                                                }
+                                                                                                                                store %i_31, 0i
+                                                                                                                                loop [b: $B127, c: $B128] {  # loop_32
+                                                                                                                                  $B127: {  # body
+                                                                                                                                    %145:i32 = load %i_31
+                                                                                                                                    %x_322:i32 = let %145
+                                                                                                                                    %147:bool = lt %x_322, 1i
+                                                                                                                                    if %147 [t: $B129, f: $B130] {  # if_32
+                                                                                                                                      $B129: {  # true
+                                                                                                                                        exit_if  # if_32
+                                                                                                                                      }
+                                                                                                                                      $B130: {  # false
+                                                                                                                                        exit_loop  # loop_32
+                                                                                                                                      }
+                                                                                                                                    }
+                                                                                                                                    store %i_32, 0i
+                                                                                                                                    loop [b: $B131, c: $B132] {  # loop_33
+                                                                                                                                      $B131: {  # body
+                                                                                                                                        %148:i32 = load %i_32
+                                                                                                                                        %x_329:i32 = let %148
+                                                                                                                                        %150:bool = lt %x_329, 1i
+                                                                                                                                        if %150 [t: $B133, f: $B134] {  # if_33
+                                                                                                                                          $B133: {  # true
+                                                                                                                                            exit_if  # if_33
+                                                                                                                                          }
+                                                                                                                                          $B134: {  # false
+                                                                                                                                            exit_loop  # loop_33
+                                                                                                                                          }
+                                                                                                                                        }
+                                                                                                                                        store %i_33, 0i
+                                                                                                                                        loop [b: $B135, c: $B136] {  # loop_34
+                                                                                                                                          $B135: {  # body
+                                                                                                                                            %151:i32 = load %i_33
+                                                                                                                                            %x_336:i32 = let %151
+                                                                                                                                            %153:bool = lt %x_336, 1i
+                                                                                                                                            if %153 [t: $B137, f: $B138] {  # if_34
+                                                                                                                                              $B137: {  # true
+                                                                                                                                                exit_if  # if_34
+                                                                                                                                              }
+                                                                                                                                              $B138: {  # false
+                                                                                                                                                exit_loop  # loop_34
+                                                                                                                                              }
+                                                                                                                                            }
+                                                                                                                                            store %i_34, 0i
+                                                                                                                                            loop [b: $B139, c: $B140] {  # loop_35
+                                                                                                                                              $B139: {  # body
+                                                                                                                                                %154:i32 = load %i_34
+                                                                                                                                                %x_343:i32 = let %154
+                                                                                                                                                %156:bool = lt %x_343, 1i
+                                                                                                                                                if %156 [t: $B141, f: $B142] {  # if_35
+                                                                                                                                                  $B141: {  # true
+                                                                                                                                                    exit_if  # if_35
+                                                                                                                                                  }
+                                                                                                                                                  $B142: {  # false
+                                                                                                                                                    exit_loop  # loop_35
+                                                                                                                                                  }
+                                                                                                                                                }
+                                                                                                                                                store %i_35, 0i
+                                                                                                                                                loop [b: $B143, c: $B144] {  # loop_36
+                                                                                                                                                  $B143: {  # body
+                                                                                                                                                    %157:i32 = load %i_35
+                                                                                                                                                    %x_350:i32 = let %157
+                                                                                                                                                    %159:bool = lt %x_350, 1i
+                                                                                                                                                    if %159 [t: $B145, f: $B146] {  # if_36
+                                                                                                                                                      $B145: {  # true
+                                                                                                                                                        exit_if  # if_36
+                                                                                                                                                      }
+                                                                                                                                                      $B146: {  # false
+                                                                                                                                                        exit_loop  # loop_36
+                                                                                                                                                      }
+                                                                                                                                                    }
+                                                                                                                                                    store %i_36, 0i
+                                                                                                                                                    loop [b: $B147, c: $B148] {  # loop_37
+                                                                                                                                                      $B147: {  # body
+                                                                                                                                                        %160:i32 = load %i_36
+                                                                                                                                                        %x_357:i32 = let %160
+                                                                                                                                                        %162:bool = lt %x_357, 1i
+                                                                                                                                                        if %162 [t: $B149, f: $B150] {  # if_37
+                                                                                                                                                          $B149: {  # true
+                                                                                                                                                            exit_if  # if_37
+                                                                                                                                                          }
+                                                                                                                                                          $B150: {  # false
+                                                                                                                                                            exit_loop  # loop_37
+                                                                                                                                                          }
+                                                                                                                                                        }
+                                                                                                                                                        store %i_37, 0i
+                                                                                                                                                        loop [b: $B151, c: $B152] {  # loop_38
+                                                                                                                                                          $B151: {  # body
+                                                                                                                                                            %163:i32 = load %i_37
+                                                                                                                                                            %x_364:i32 = let %163
+                                                                                                                                                            %165:bool = lt %x_364, 1i
+                                                                                                                                                            if %165 [t: $B153, f: $B154] {  # if_38
+                                                                                                                                                              $B153: {  # true
+                                                                                                                                                                exit_if  # if_38
+                                                                                                                                                              }
+                                                                                                                                                              $B154: {  # false
+                                                                                                                                                                exit_loop  # loop_38
+                                                                                                                                                              }
+                                                                                                                                                            }
+                                                                                                                                                            loop [b: $B155, c: $B156] {  # loop_39
+                                                                                                                                                              $B155: {  # body
+                                                                                                                                                                %166:i32 = load %x_GLF_global_loop_count
+                                                                                                                                                                %x_371:i32 = let %166
+                                                                                                                                                                %168:i32 = add %x_371, 1i
+                                                                                                                                                                store %x_GLF_global_loop_count, %168
+                                                                                                                                                                continue  # -> $B156
+                                                                                                                                                              }
+                                                                                                                                                              $B156: {  # continuing
+                                                                                                                                                                %169:i32 = load %x_GLF_global_loop_count
+                                                                                                                                                                %x_373:i32 = let %169
+                                                                                                                                                                %171:bool = lt %x_373, 98i
+                                                                                                                                                                %172:bool = eq %171, false
+                                                                                                                                                                break_if %172  # -> [t: exit_loop loop_39, f: $B155]
+                                                                                                                                                              }
+                                                                                                                                                            }
+                                                                                                                                                            %173:i32 = load %i_37
+                                                                                                                                                            %x_375:i32 = let %173
+                                                                                                                                                            %175:i32 = load %i_37
+                                                                                                                                                            %x_376:i32 = let %175
+                                                                                                                                                            %177:ptr<function, vec3<f32>, read_write> = access %m23, %x_375
+                                                                                                                                                            store_vector_element %177, %x_376, 1.0f
+                                                                                                                                                            %178:i32 = load %i_37
+                                                                                                                                                            %x_378:i32 = let %178
+                                                                                                                                                            %180:i32 = load %i_37
+                                                                                                                                                            %x_379:i32 = let %180
+                                                                                                                                                            %182:ptr<function, vec4<f32>, read_write> = access %m24, %x_378
+                                                                                                                                                            store_vector_element %182, %x_379, 1.0f
+                                                                                                                                                            %183:i32 = load %i_37
+                                                                                                                                                            %x_381:i32 = let %183
+                                                                                                                                                            %185:i32 = load %i_37
+                                                                                                                                                            %x_382:i32 = let %185
+                                                                                                                                                            %187:ptr<function, vec2<f32>, read_write> = access %m32, %x_381
+                                                                                                                                                            store_vector_element %187, %x_382, 1.0f
+                                                                                                                                                            %188:i32 = load %i_37
+                                                                                                                                                            %x_384:i32 = let %188
+                                                                                                                                                            %190:i32 = load %i_37
+                                                                                                                                                            %x_385:i32 = let %190
+                                                                                                                                                            %192:ptr<function, vec3<f32>, read_write> = access %m33, %x_384
+                                                                                                                                                            store_vector_element %192, %x_385, 1.0f
+                                                                                                                                                            %193:i32 = load %i_37
+                                                                                                                                                            %x_387:i32 = let %193
+                                                                                                                                                            %195:i32 = load %i_37
+                                                                                                                                                            %x_388:i32 = let %195
+                                                                                                                                                            %197:ptr<function, vec4<f32>, read_write> = access %m34, %x_387
+                                                                                                                                                            store_vector_element %197, %x_388, 1.0f
+                                                                                                                                                            %198:i32 = load %i_37
+                                                                                                                                                            %x_390:i32 = let %198
+                                                                                                                                                            %200:i32 = load %i_37
+                                                                                                                                                            %x_391:i32 = let %200
+                                                                                                                                                            %202:ptr<function, vec2<f32>, read_write> = access %m42, %x_390
+                                                                                                                                                            store_vector_element %202, %x_391, 1.0f
+                                                                                                                                                            %203:i32 = load %i_37
+                                                                                                                                                            %x_393:i32 = let %203
+                                                                                                                                                            %205:i32 = load %i_37
+                                                                                                                                                            %x_394:i32 = let %205
+                                                                                                                                                            %207:ptr<function, vec3<f32>, read_write> = access %m43, %x_393
+                                                                                                                                                            store_vector_element %207, %x_394, 1.0f
+                                                                                                                                                            %208:i32 = load %i_37
+                                                                                                                                                            %x_396:i32 = let %208
+                                                                                                                                                            %210:i32 = load %i_37
+                                                                                                                                                            %x_397:i32 = let %210
+                                                                                                                                                            %212:ptr<function, vec4<f32>, read_write> = access %m44, %x_396
+                                                                                                                                                            store_vector_element %212, %x_397, 1.0f
+                                                                                                                                                            continue  # -> $B152
+                                                                                                                                                          }
+                                                                                                                                                          $B152: {  # continuing
+                                                                                                                                                            %213:i32 = load %i_37
+                                                                                                                                                            %x_399:i32 = let %213
+                                                                                                                                                            %215:i32 = add %x_399, 1i
+                                                                                                                                                            store %i_37, %215
+                                                                                                                                                            next_iteration  # -> $B151
+                                                                                                                                                          }
+                                                                                                                                                        }
+                                                                                                                                                        continue  # -> $B148
+                                                                                                                                                      }
+                                                                                                                                                      $B148: {  # continuing
+                                                                                                                                                        %216:i32 = load %i_36
+                                                                                                                                                        %x_401:i32 = let %216
+                                                                                                                                                        %218:i32 = add %x_401, 1i
+                                                                                                                                                        store %i_36, %218
+                                                                                                                                                        next_iteration  # -> $B147
+                                                                                                                                                      }
+                                                                                                                                                    }
+                                                                                                                                                    continue  # -> $B144
+                                                                                                                                                  }
+                                                                                                                                                  $B144: {  # continuing
+                                                                                                                                                    %219:i32 = load %i_35
+                                                                                                                                                    %x_403:i32 = let %219
+                                                                                                                                                    %221:i32 = add %x_403, 1i
+                                                                                                                                                    store %i_35, %221
+                                                                                                                                                    next_iteration  # -> $B143
+                                                                                                                                                  }
+                                                                                                                                                }
+                                                                                                                                                continue  # -> $B140
+                                                                                                                                              }
+                                                                                                                                              $B140: {  # continuing
+                                                                                                                                                %222:i32 = load %i_34
+                                                                                                                                                %x_405:i32 = let %222
+                                                                                                                                                %224:i32 = add %x_405, 1i
+                                                                                                                                                store %i_34, %224
+                                                                                                                                                next_iteration  # -> $B139
+                                                                                                                                              }
+                                                                                                                                            }
+                                                                                                                                            continue  # -> $B136
+                                                                                                                                          }
+                                                                                                                                          $B136: {  # continuing
+                                                                                                                                            %225:i32 = load %i_33
+                                                                                                                                            %x_407:i32 = let %225
+                                                                                                                                            %227:i32 = add %x_407, 1i
+                                                                                                                                            store %i_33, %227
+                                                                                                                                            next_iteration  # -> $B135
+                                                                                                                                          }
+                                                                                                                                        }
+                                                                                                                                        continue  # -> $B132
+                                                                                                                                      }
+                                                                                                                                      $B132: {  # continuing
+                                                                                                                                        %228:i32 = load %i_32
+                                                                                                                                        %x_409:i32 = let %228
+                                                                                                                                        %230:i32 = add %x_409, 1i
+                                                                                                                                        store %i_32, %230
+                                                                                                                                        next_iteration  # -> $B131
+                                                                                                                                      }
+                                                                                                                                    }
+                                                                                                                                    continue  # -> $B128
+                                                                                                                                  }
+                                                                                                                                  $B128: {  # continuing
+                                                                                                                                    %231:i32 = load %i_31
+                                                                                                                                    %x_411:i32 = let %231
+                                                                                                                                    %233:i32 = add %x_411, 1i
+                                                                                                                                    store %i_31, %233
+                                                                                                                                    next_iteration  # -> $B127
+                                                                                                                                  }
+                                                                                                                                }
+                                                                                                                                continue  # -> $B124
+                                                                                                                              }
+                                                                                                                              $B124: {  # continuing
+                                                                                                                                %234:i32 = load %i_30
+                                                                                                                                %x_413:i32 = let %234
+                                                                                                                                %236:i32 = add %x_413, 1i
+                                                                                                                                store %i_30, %236
+                                                                                                                                next_iteration  # -> $B123
+                                                                                                                              }
+                                                                                                                            }
+                                                                                                                            continue  # -> $B120
+                                                                                                                          }
+                                                                                                                          $B120: {  # continuing
+                                                                                                                            %237:i32 = load %i_29
+                                                                                                                            %x_415:i32 = let %237
+                                                                                                                            %239:i32 = add %x_415, 1i
+                                                                                                                            store %i_29, %239
+                                                                                                                            next_iteration  # -> $B119
+                                                                                                                          }
+                                                                                                                        }
+                                                                                                                        continue  # -> $B116
+                                                                                                                      }
+                                                                                                                      $B116: {  # continuing
+                                                                                                                        %240:i32 = load %i_28
+                                                                                                                        %x_417:i32 = let %240
+                                                                                                                        %242:i32 = add %x_417, 1i
+                                                                                                                        store %i_28, %242
+                                                                                                                        next_iteration  # -> $B115
+                                                                                                                      }
+                                                                                                                    }
+                                                                                                                    continue  # -> $B112
+                                                                                                                  }
+                                                                                                                  $B112: {  # continuing
+                                                                                                                    %243:i32 = load %i_27
+                                                                                                                    %x_419:i32 = let %243
+                                                                                                                    %245:i32 = add %x_419, 1i
+                                                                                                                    store %i_27, %245
+                                                                                                                    next_iteration  # -> $B111
+                                                                                                                  }
+                                                                                                                }
+                                                                                                                continue  # -> $B108
+                                                                                                              }
+                                                                                                              $B108: {  # continuing
+                                                                                                                %246:i32 = load %i_26
+                                                                                                                %x_421:i32 = let %246
+                                                                                                                %248:i32 = add %x_421, 1i
+                                                                                                                store %i_26, %248
+                                                                                                                next_iteration  # -> $B107
+                                                                                                              }
+                                                                                                            }
+                                                                                                            continue  # -> $B104
+                                                                                                          }
+                                                                                                          $B104: {  # continuing
+                                                                                                            %249:i32 = load %i_25
+                                                                                                            %x_423:i32 = let %249
+                                                                                                            %251:i32 = add %x_423, 1i
+                                                                                                            store %i_25, %251
+                                                                                                            next_iteration  # -> $B103
+                                                                                                          }
+                                                                                                        }
+                                                                                                        continue  # -> $B100
+                                                                                                      }
+                                                                                                      $B100: {  # continuing
+                                                                                                        %252:i32 = load %i_24
+                                                                                                        %x_425:i32 = let %252
+                                                                                                        %254:i32 = add %x_425, 1i
+                                                                                                        store %i_24, %254
+                                                                                                        next_iteration  # -> $B99
+                                                                                                      }
+                                                                                                    }
+                                                                                                    continue  # -> $B96
+                                                                                                  }
+                                                                                                  $B96: {  # continuing
+                                                                                                    %255:i32 = load %i_23
+                                                                                                    %x_427:i32 = let %255
+                                                                                                    %257:i32 = add %x_427, 1i
+                                                                                                    store %i_23, %257
+                                                                                                    next_iteration  # -> $B95
+                                                                                                  }
+                                                                                                }
+                                                                                                continue  # -> $B92
+                                                                                              }
+                                                                                              $B92: {  # continuing
+                                                                                                %258:i32 = load %i_22
+                                                                                                %x_429:i32 = let %258
+                                                                                                %260:i32 = add %x_429, 1i
+                                                                                                store %i_22, %260
+                                                                                                next_iteration  # -> $B91
+                                                                                              }
+                                                                                            }
+                                                                                            continue  # -> $B88
+                                                                                          }
+                                                                                          $B88: {  # continuing
+                                                                                            %261:i32 = load %i_21
+                                                                                            %x_431:i32 = let %261
+                                                                                            %263:i32 = add %x_431, 1i
+                                                                                            store %i_21, %263
+                                                                                            next_iteration  # -> $B87
+                                                                                          }
+                                                                                        }
+                                                                                        continue  # -> $B84
+                                                                                      }
+                                                                                      $B84: {  # continuing
+                                                                                        %264:i32 = load %i_20
+                                                                                        %x_433:i32 = let %264
+                                                                                        %266:i32 = add %x_433, 1i
+                                                                                        store %i_20, %266
+                                                                                        next_iteration  # -> $B83
+                                                                                      }
+                                                                                    }
+                                                                                    continue  # -> $B80
+                                                                                  }
+                                                                                  $B80: {  # continuing
+                                                                                    %267:i32 = load %i_19
+                                                                                    %x_435:i32 = let %267
+                                                                                    %269:i32 = add %x_435, 1i
+                                                                                    store %i_19, %269
+                                                                                    next_iteration  # -> $B79
+                                                                                  }
+                                                                                }
+                                                                                continue  # -> $B76
+                                                                              }
+                                                                              $B76: {  # continuing
+                                                                                %270:i32 = load %i_18
+                                                                                %x_437:i32 = let %270
+                                                                                %272:i32 = add %x_437, 1i
+                                                                                store %i_18, %272
+                                                                                next_iteration  # -> $B75
+                                                                              }
+                                                                            }
+                                                                            continue  # -> $B72
+                                                                          }
+                                                                          $B72: {  # continuing
+                                                                            %273:i32 = load %i_17
+                                                                            %x_439:i32 = let %273
+                                                                            %275:i32 = add %x_439, 1i
+                                                                            store %i_17, %275
+                                                                            next_iteration  # -> $B71
+                                                                          }
+                                                                        }
+                                                                        continue  # -> $B68
+                                                                      }
+                                                                      $B68: {  # continuing
+                                                                        %276:i32 = load %i_16
+                                                                        %x_441:i32 = let %276
+                                                                        %278:i32 = add %x_441, 1i
+                                                                        store %i_16, %278
+                                                                        next_iteration  # -> $B67
+                                                                      }
+                                                                    }
+                                                                    continue  # -> $B64
+                                                                  }
+                                                                  $B64: {  # continuing
+                                                                    %279:i32 = load %i_15
+                                                                    %x_443:i32 = let %279
+                                                                    %281:i32 = add %x_443, 1i
+                                                                    store %i_15, %281
+                                                                    next_iteration  # -> $B63
+                                                                  }
+                                                                }
+                                                                continue  # -> $B60
+                                                              }
+                                                              $B60: {  # continuing
+                                                                %282:i32 = load %i_14
+                                                                %x_445:i32 = let %282
+                                                                %284:i32 = add %x_445, 1i
+                                                                store %i_14, %284
+                                                                next_iteration  # -> $B59
+                                                              }
+                                                            }
+                                                            continue  # -> $B56
+                                                          }
+                                                          $B56: {  # continuing
+                                                            %285:i32 = load %i_13
+                                                            %x_447:i32 = let %285
+                                                            %287:i32 = add %x_447, 1i
+                                                            store %i_13, %287
+                                                            next_iteration  # -> $B55
+                                                          }
+                                                        }
+                                                        continue  # -> $B52
+                                                      }
+                                                      $B52: {  # continuing
+                                                        %288:i32 = load %i_12
+                                                        %x_449:i32 = let %288
+                                                        %290:i32 = add %x_449, 1i
+                                                        store %i_12, %290
+                                                        next_iteration  # -> $B51
+                                                      }
+                                                    }
+                                                    continue  # -> $B48
+                                                  }
+                                                  $B48: {  # continuing
+                                                    %291:i32 = load %i_11
+                                                    %x_451:i32 = let %291
+                                                    %293:i32 = add %x_451, 1i
+                                                    store %i_11, %293
+                                                    next_iteration  # -> $B47
+                                                  }
+                                                }
+                                                continue  # -> $B44
+                                              }
+                                              $B44: {  # continuing
+                                                %294:i32 = load %i_10
+                                                %x_453:i32 = let %294
+                                                %296:i32 = add %x_453, 1i
+                                                store %i_10, %296
+                                                next_iteration  # -> $B43
+                                              }
+                                            }
+                                            continue  # -> $B40
+                                          }
+                                          $B40: {  # continuing
+                                            %297:i32 = load %i_9
+                                            %x_455:i32 = let %297
+                                            %299:i32 = add %x_455, 1i
+                                            store %i_9, %299
+                                            next_iteration  # -> $B39
+                                          }
+                                        }
+                                        continue  # -> $B36
+                                      }
+                                      $B36: {  # continuing
+                                        %300:i32 = load %i_8
+                                        %x_457:i32 = let %300
+                                        %302:i32 = add %x_457, 1i
+                                        store %i_8, %302
+                                        next_iteration  # -> $B35
+                                      }
+                                    }
+                                    continue  # -> $B32
+                                  }
+                                  $B32: {  # continuing
+                                    %303:i32 = load %i_7
+                                    %x_459:i32 = let %303
+                                    %305:i32 = add %x_459, 1i
+                                    store %i_7, %305
+                                    next_iteration  # -> $B31
+                                  }
+                                }
+                                continue  # -> $B28
+                              }
+                              $B28: {  # continuing
+                                %306:i32 = load %i_6
+                                %x_461:i32 = let %306
+                                %308:i32 = add %x_461, 1i
+                                store %i_6, %308
+                                next_iteration  # -> $B27
+                              }
+                            }
+                            continue  # -> $B24
+                          }
+                          $B24: {  # continuing
+                            %309:i32 = load %i_5
+                            %x_463:i32 = let %309
+                            %311:i32 = add %x_463, 1i
+                            store %i_5, %311
+                            next_iteration  # -> $B23
+                          }
+                        }
+                        continue  # -> $B20
+                      }
+                      $B20: {  # continuing
+                        %312:i32 = load %i_4
+                        %x_465:i32 = let %312
+                        %314:i32 = add %x_465, 1i
+                        store %i_4, %314
+                        next_iteration  # -> $B19
+                      }
+                    }
+                    continue  # -> $B16
+                  }
+                  $B16: {  # continuing
+                    %315:i32 = load %i_3
+                    %x_467:i32 = let %315
+                    %317:i32 = add %x_467, 1i
+                    store %i_3, %317
+                    next_iteration  # -> $B15
+                  }
+                }
+                continue  # -> $B12
+              }
+              $B12: {  # continuing
+                %318:i32 = load %i_2
+                %x_469:i32 = let %318
+                %320:i32 = add %x_469, 1i
+                store %i_2, %320
+                next_iteration  # -> $B11
+              }
+            }
+            continue  # -> $B8
+          }
+          $B8: {  # continuing
+            %321:i32 = load %i_1
+            %x_471:i32 = let %321
+            %323:i32 = add %x_471, 1i
+            store %i_1, %323
+            next_iteration  # -> $B7
+          }
+        }
+        continue  # -> $B4
+      }
+      $B4: {  # continuing
+        %324:i32 = load %i
+        %x_473:i32 = let %324
+        %326:i32 = add %x_473, 1i
+        store %i, %326
+        next_iteration  # -> $B3
+      }
+    }
+    store %sum, 0.0f
+    store %r, 0i
+    loop [b: $B157, c: $B158] {  # loop_40
+      $B157: {  # body
+        %327:i32 = load %x_GLF_global_loop_count
+        %x_479:i32 = let %327
+        %329:bool = lt %x_479, 100i
+        if %329 [t: $B159, f: $B160] {  # if_39
+          $B159: {  # true
+            exit_if  # if_39
+          }
+          $B160: {  # false
+            exit_loop  # loop_40
+          }
+        }
+        %330:i32 = load %x_GLF_global_loop_count
+        %x_482:i32 = let %330
+        %332:i32 = add %x_482, 1i
+        store %x_GLF_global_loop_count, %332
+        %333:i32 = load %r
+        %x_484:i32 = let %333
+        %335:ptr<function, vec3<f32>, read_write> = access %m23, 0i
+        %336:f32 = load_vector_element %335, %x_484
+        %x_486:f32 = let %336
+        %338:f32 = load %sum
+        %x_487:f32 = let %338
+        %340:f32 = add %x_487, %x_486
+        store %sum, %340
+        %341:i32 = load %r
+        %x_489:i32 = let %341
+        %343:ptr<function, vec4<f32>, read_write> = access %m24, 0i
+        %344:f32 = load_vector_element %343, %x_489
+        %x_491:f32 = let %344
+        %346:f32 = load %sum
+        %x_492:f32 = let %346
+        %348:f32 = add %x_492, %x_491
+        store %sum, %348
+        %349:i32 = load %r
+        %x_494:i32 = let %349
+        %351:ptr<function, vec2<f32>, read_write> = access %m32, 0i
+        %352:f32 = load_vector_element %351, %x_494
+        %x_496:f32 = let %352
+        %354:f32 = load %sum
+        %x_497:f32 = let %354
+        %356:f32 = add %x_497, %x_496
+        store %sum, %356
+        %357:i32 = load %r
+        %x_499:i32 = let %357
+        %359:ptr<function, vec3<f32>, read_write> = access %m33, 0i
+        %360:f32 = load_vector_element %359, %x_499
+        %x_501:f32 = let %360
+        %362:f32 = load %sum
+        %x_502:f32 = let %362
+        %364:f32 = add %x_502, %x_501
+        store %sum, %364
+        %365:i32 = load %r
+        %x_504:i32 = let %365
+        %367:ptr<function, vec4<f32>, read_write> = access %m34, 0i
+        %368:f32 = load_vector_element %367, %x_504
+        %x_506:f32 = let %368
+        %370:f32 = load %sum
+        %x_507:f32 = let %370
+        %372:f32 = add %x_507, %x_506
+        store %sum, %372
+        %373:i32 = load %r
+        %x_509:i32 = let %373
+        %375:ptr<function, vec2<f32>, read_write> = access %m42, 0i
+        %376:f32 = load_vector_element %375, %x_509
+        %x_511:f32 = let %376
+        %378:f32 = load %sum
+        %x_512:f32 = let %378
+        %380:f32 = add %x_512, %x_511
+        store %sum, %380
+        %381:i32 = load %r
+        %x_514:i32 = let %381
+        %383:ptr<function, vec3<f32>, read_write> = access %m43, 0i
+        %384:f32 = load_vector_element %383, %x_514
+        %x_516:f32 = let %384
+        %386:f32 = load %sum
+        %x_517:f32 = let %386
+        %388:f32 = add %x_517, %x_516
+        store %sum, %388
+        %389:i32 = load %r
+        %x_519:i32 = let %389
+        %391:ptr<function, vec4<f32>, read_write> = access %m44, 0i
+        %392:f32 = load_vector_element %391, %x_519
+        %x_521:f32 = let %392
+        %394:f32 = load %sum
+        %x_522:f32 = let %394
+        %396:f32 = add %x_522, %x_521
+        store %sum, %396
+        continue  # -> $B158
+      }
+      $B158: {  # continuing
+        %397:i32 = load %r
+        %x_524:i32 = let %397
+        %399:i32 = add %x_524, 1i
+        store %r, %399
+        next_iteration  # -> $B157
+      }
+    }
+    %400:f32 = load %sum
+    %x_526:f32 = let %400
+    %402:bool = eq %x_526, 8.0f
+    if %402 [t: $B161, f: $B162] {  # if_40
+      $B161: {  # true
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        exit_if  # if_40
+      }
+      $B162: {  # false
+        store %x_GLF_color, vec4<f32>(0.0f)
+        exit_if  # if_40
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B163: {
+    %404:void = call %main_1
+    %405:vec4<f32> = load %x_GLF_color
+    %406:main_out = construct %405
+    ret %406
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-nested-functions-accumulate-global-matrix/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-nested-functions-accumulate-global-matrix/0-opt.spvasm.expected.ir.msl
index 7f00aa6..cd94c4e 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-nested-functions-accumulate-global-matrix/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-nested-functions-accumulate-global-matrix/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf2 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf2 = struct @align(4) {
   one:f32 @offset(0)
 }
 
@@ -24,7 +24,7 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %m:ptr<private, mat4x2<f32>, read_write> = var
   %x_10:ptr<uniform, buf2, read> = var @binding_point(0, 2)
   %x_12:ptr<uniform, buf0, read> = var @binding_point(0, 0)
@@ -33,83 +33,88 @@
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%func0_i1_ = func(%x:ptr<function, i32, read_write>):void -> %b2 {
-  %b2 = block {
+%func0_i1_ = func(%x:ptr<function, i32, read_write>):void {
+  $B2: {
     %i:ptr<function, i32, read_write> = var
     %x_137:ptr<function, bool, read_write> = var
     %x_138:ptr<function, bool, read_write> = var
     %x_139:ptr<function, bool, read_write> = var
     %13:i32 = load %x
-    %x_125:bool = lt %13, 1i
+    %14:bool = lt %13, 1i
+    %x_125:bool = let %14
     store %x_139, %x_125
-    %15:bool = eq %x_125, false
-    if %15 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %16:i32 = load %x
-        %x_130:bool = gt %16, 1i
+    %16:bool = eq %x_125, false
+    if %16 [t: $B3] {  # if_1
+      $B3: {  # true
+        %17:i32 = load %x
+        %18:bool = gt %17, 1i
+        %x_130:bool = let %18
         store %x_138, %x_130
-        if %x_130 [t: %b4] {  # if_2
-          %b4 = block {  # true
-            %18:ptr<uniform, f32, read> = access %x_10, 0u
-            %19:f32 = load %18
-            %20:ptr<uniform, f32, read> = access %x_12, 0u, 0i, 0u
+        if %x_130 [t: $B4] {  # if_2
+          $B4: {  # true
+            %20:ptr<uniform, f32, read> = access %x_10, 0u
             %21:f32 = load %20
-            %22:bool = gt %19, %21
-            store %x_137, %22
-            %23:bool = load %x_137
-            store %x_138, %23
+            %22:ptr<uniform, f32, read> = access %x_12, 0u, 0i, 0u
+            %23:f32 = load %22
+            %24:bool = gt %21, %23
+            store %x_137, %24
+            %25:bool = load %x_137
+            store %x_138, %25
             exit_if  # if_2
           }
         }
-        %24:bool = load %x_138
-        store %x_139, %24
+        %26:bool = load %x_138
+        store %x_139, %26
         exit_if  # if_1
       }
     }
-    %25:bool = load %x_139
-    if %25 [t: %b5] {  # if_3
-      %b5 = block {  # true
+    %27:bool = load %x_139
+    if %27 [t: $B5] {  # if_3
+      $B5: {  # true
         ret
       }
     }
-    %26:ptr<uniform, f32, read> = access %x_10, 0u
-    %27:f32 = load %26
-    %28:ptr<uniform, f32, read> = access %x_12, 0u, 0i, 0u
+    %28:ptr<uniform, f32, read> = access %x_10, 0u
     %29:f32 = load %28
-    %30:bool = eq %27, %29
-    if %30 [t: %b6] {  # if_4
-      %b6 = block {  # true
+    %30:ptr<uniform, f32, read> = access %x_12, 0u, 0i, 0u
+    %31:f32 = load %30
+    %32:bool = eq %29, %31
+    if %32 [t: $B6] {  # if_4
+      $B6: {  # true
         store %i, 0i
-        loop [b: %b7, c: %b8] {  # loop_1
-          %b7 = block {  # body
-            %31:i32 = load %i
-            %32:bool = lt %31, 2i
-            if %32 [t: %b9, f: %b10] {  # if_5
-              %b9 = block {  # true
+        loop [b: $B7, c: $B8] {  # loop_1
+          $B7: {  # body
+            %33:i32 = load %i
+            %34:bool = lt %33, 2i
+            if %34 [t: $B9, f: $B10] {  # if_5
+              $B9: {  # true
                 exit_if  # if_5
               }
-              %b10 = block {  # false
+              $B10: {  # false
                 exit_loop  # loop_1
               }
             }
-            continue %b8
+            continue  # -> $B8
           }
-          %b8 = block {  # continuing
-            %33:i32 = load %x
-            %x_155:i32 = clamp %33, 0i, 3i
-            %x_156:i32 = load %i
-            %36:ptr<private, vec2<f32>, read_write> = access %m, %x_155
-            %37:ptr<private, vec2<f32>, read_write> = access %m, %x_155
-            %38:i32 = load %i
-            %39:f32 = load_vector_element %37, %38
-            %40:ptr<uniform, f32, read> = access %x_12, 0u, 0i, 0u
-            %41:f32 = load %40
-            %42:f32 = add %39, %41
-            store_vector_element %36, %x_156, %42
+          $B8: {  # continuing
+            %35:i32 = load %x
+            %36:i32 = max %35, 0i
+            %37:i32 = min %36, 3i
+            %x_155:i32 = let %37
+            %39:i32 = load %i
+            %x_156:i32 = let %39
+            %41:ptr<private, vec2<f32>, read_write> = access %m, %x_155
+            %42:ptr<private, vec2<f32>, read_write> = access %m, %x_155
             %43:i32 = load %i
-            %44:i32 = add %43, 1i
-            store %i, %44
-            next_iteration %b7
+            %44:f32 = load_vector_element %42, %43
+            %45:ptr<uniform, f32, read> = access %x_12, 0u, 0i, 0u
+            %46:f32 = load %45
+            %47:f32 = add %44, %46
+            store_vector_element %41, %x_156, %47
+            %48:i32 = load %i
+            %49:i32 = add %48, 1i
+            store %i, %49
+            next_iteration  # -> $B7
           }
         }
         exit_if  # if_4
@@ -118,115 +123,129 @@
     ret
   }
 }
-%func1_ = func():void -> %b11 {
-  %b11 = block {
+%func1_ = func():void {
+  $B11: {
     %param:ptr<function, i32, read_write> = var
-    %47:f32 = load_vector_element %gl_FragCoord, 1u
-    %48:bool = lt %47, 0.0f
-    if %48 [t: %b12] {  # if_6
-      %b12 = block {  # true
+    %52:f32 = load_vector_element %gl_FragCoord, 1u
+    %53:bool = lt %52, 0.0f
+    if %53 [t: $B12] {  # if_6
+      $B12: {  # true
         ret
       }
     }
     store %param, 1i
-    %49:void = call %func0_i1_, %param
+    %54:void = call %func0_i1_, %param
     ret
   }
 }
-%main_1 = func():void -> %b13 {
-  %b13 = block {
+%main_1 = func():void {
+  $B13: {
     store %m, mat4x2<f32>(vec2<f32>(0.0f))
-    %51:void = call %func1_
-    %52:void = call %func1_
-    %53:ptr<uniform, i32, read> = access %x_16, 0u, 0i, 0u
-    %54:i32 = load %53
-    %55:f32 = convert %54
-    %56:ptr<uniform, i32, read> = access %x_16, 0u, 0i, 0u
-    %57:i32 = load %56
-    %58:f32 = convert %57
-    %59:vec2<f32> = construct %55, %58
-    %60:ptr<uniform, i32, read> = access %x_16, 0u, 1i, 0u
-    %61:i32 = load %60
-    %62:f32 = convert %61
-    %63:ptr<uniform, i32, read> = access %x_16, 0u, 1i, 0u
-    %64:i32 = load %63
-    %65:f32 = convert %64
-    %66:vec2<f32> = construct %62, %65
-    %67:ptr<uniform, i32, read> = access %x_16, 0u, 0i, 0u
+    %56:void = call %func1_
+    %57:void = call %func1_
+    %58:ptr<uniform, i32, read> = access %x_16, 0u, 0i, 0u
+    %59:i32 = load %58
+    %60:f32 = convert %59
+    %61:f32 = let %60
+    %62:ptr<uniform, i32, read> = access %x_16, 0u, 0i, 0u
+    %63:i32 = load %62
+    %64:f32 = convert %63
+    %65:vec2<f32> = construct %61, %64
+    %66:vec2<f32> = let %65
+    %67:ptr<uniform, i32, read> = access %x_16, 0u, 1i, 0u
     %68:i32 = load %67
     %69:f32 = convert %68
-    %70:ptr<uniform, i32, read> = access %x_16, 0u, 0i, 0u
-    %71:i32 = load %70
-    %72:f32 = convert %71
-    %73:vec2<f32> = construct %69, %72
-    %74:ptr<uniform, i32, read> = access %x_16, 0u, 0i, 0u
-    %75:i32 = load %74
-    %76:f32 = convert %75
-    %77:ptr<uniform, i32, read> = access %x_16, 0u, 0i, 0u
-    %78:i32 = load %77
-    %79:f32 = convert %78
-    %80:vec2<f32> = construct %76, %79
-    %x_83:mat4x2<f32> = construct %59, %66, %73, %80
-    %82:ptr<private, vec2<f32>, read_write> = access %m, 0u
-    %83:vec2<f32> = load %82
-    %84:vec2<f32> = access %x_83, 0u
-    %85:vec2<bool> = eq %83, %84
-    %86:bool = all %85
-    %87:ptr<private, vec2<f32>, read_write> = access %m, 1u
-    %88:vec2<f32> = load %87
-    %89:vec2<f32> = access %x_83, 1u
-    %90:vec2<bool> = eq %88, %89
-    %91:bool = all %90
-    %92:bool = and %86, %91
-    %93:ptr<private, vec2<f32>, read_write> = access %m, 2u
-    %94:vec2<f32> = load %93
-    %95:vec2<f32> = access %x_83, 2u
-    %96:vec2<bool> = eq %94, %95
-    %97:bool = all %96
-    %98:bool = and %92, %97
-    %99:ptr<private, vec2<f32>, read_write> = access %m, 3u
-    %100:vec2<f32> = load %99
-    %101:vec2<f32> = access %x_83, 3u
-    %102:vec2<bool> = eq %100, %101
-    %103:bool = all %102
-    %104:bool = and %98, %103
-    if %104 [t: %b14, f: %b15] {  # if_7
-      %b14 = block {  # true
-        %105:ptr<uniform, i32, read> = access %x_16, 0u, 3i, 0u
-        %106:i32 = load %105
-        %107:f32 = convert %106
-        %108:ptr<uniform, i32, read> = access %x_16, 0u, 0i, 0u
-        %109:i32 = load %108
-        %110:f32 = convert %109
-        %111:ptr<uniform, i32, read> = access %x_16, 0u, 0i, 0u
-        %112:i32 = load %111
-        %113:f32 = convert %112
-        %114:ptr<uniform, i32, read> = access %x_16, 0u, 3i, 0u
-        %115:i32 = load %114
-        %116:f32 = convert %115
-        %117:vec4<f32> = construct %107, %110, %113, %116
-        store %x_GLF_color, %117
+    %70:f32 = let %69
+    %71:ptr<uniform, i32, read> = access %x_16, 0u, 1i, 0u
+    %72:i32 = load %71
+    %73:f32 = convert %72
+    %74:vec2<f32> = construct %70, %73
+    %75:vec2<f32> = let %74
+    %76:ptr<uniform, i32, read> = access %x_16, 0u, 0i, 0u
+    %77:i32 = load %76
+    %78:f32 = convert %77
+    %79:f32 = let %78
+    %80:ptr<uniform, i32, read> = access %x_16, 0u, 0i, 0u
+    %81:i32 = load %80
+    %82:f32 = convert %81
+    %83:vec2<f32> = construct %79, %82
+    %84:vec2<f32> = let %83
+    %85:ptr<uniform, i32, read> = access %x_16, 0u, 0i, 0u
+    %86:i32 = load %85
+    %87:f32 = convert %86
+    %88:f32 = let %87
+    %89:ptr<uniform, i32, read> = access %x_16, 0u, 0i, 0u
+    %90:i32 = load %89
+    %91:f32 = convert %90
+    %92:vec2<f32> = construct %88, %91
+    %93:mat4x2<f32> = construct %66, %75, %84, %92
+    %x_83:mat4x2<f32> = let %93
+    %95:ptr<private, vec2<f32>, read_write> = access %m, 0u
+    %96:vec2<f32> = load %95
+    %97:vec2<f32> = access %x_83, 0u
+    %98:vec2<bool> = eq %96, %97
+    %99:bool = all %98
+    %100:bool = let %99
+    %101:ptr<private, vec2<f32>, read_write> = access %m, 1u
+    %102:vec2<f32> = load %101
+    %103:vec2<f32> = access %x_83, 1u
+    %104:vec2<bool> = eq %102, %103
+    %105:bool = all %104
+    %106:bool = and %100, %105
+    %107:bool = let %106
+    %108:ptr<private, vec2<f32>, read_write> = access %m, 2u
+    %109:vec2<f32> = load %108
+    %110:vec2<f32> = access %x_83, 2u
+    %111:vec2<bool> = eq %109, %110
+    %112:bool = all %111
+    %113:bool = and %107, %112
+    %114:bool = let %113
+    %115:ptr<private, vec2<f32>, read_write> = access %m, 3u
+    %116:vec2<f32> = load %115
+    %117:vec2<f32> = access %x_83, 3u
+    %118:vec2<bool> = eq %116, %117
+    %119:bool = all %118
+    %120:bool = and %114, %119
+    if %120 [t: $B14, f: $B15] {  # if_7
+      $B14: {  # true
+        %121:ptr<uniform, i32, read> = access %x_16, 0u, 3i, 0u
+        %122:i32 = load %121
+        %123:f32 = convert %122
+        %124:f32 = let %123
+        %125:ptr<uniform, i32, read> = access %x_16, 0u, 0i, 0u
+        %126:i32 = load %125
+        %127:f32 = convert %126
+        %128:f32 = let %127
+        %129:ptr<uniform, i32, read> = access %x_16, 0u, 0i, 0u
+        %130:i32 = load %129
+        %131:f32 = convert %130
+        %132:f32 = let %131
+        %133:ptr<uniform, i32, read> = access %x_16, 0u, 3i, 0u
+        %134:i32 = load %133
+        %135:f32 = convert %134
+        %136:vec4<f32> = construct %124, %128, %132, %135
+        store %x_GLF_color, %136
         exit_if  # if_7
       }
-      %b15 = block {  # false
-        %118:ptr<uniform, i32, read> = access %x_16, 0u, 0i, 0u
-        %119:i32 = load %118
-        %120:f32 = convert %119
-        %121:vec4<f32> = construct %120
-        store %x_GLF_color, %121
+      $B15: {  # false
+        %137:ptr<uniform, i32, read> = access %x_16, 0u, 0i, 0u
+        %138:i32 = load %137
+        %139:f32 = convert %138
+        %140:vec4<f32> = construct %139
+        store %x_GLF_color, %140
         exit_if  # if_7
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b16 {
-  %b16 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B16: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %124:void = call %main_1
-    %125:vec4<f32> = load %x_GLF_color
-    %126:main_out = construct %125
-    ret %126
+    %143:void = call %main_1
+    %144:vec4<f32> = load %x_GLF_color
+    %145:main_out = construct %144
+    ret %145
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-nested-functions-accumulate-global-matrix/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-nested-functions-accumulate-global-matrix/0-opt.wgsl.expected.ir.msl
index 5ea02a5..b11f436 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-nested-functions-accumulate-global-matrix/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-nested-functions-accumulate-global-matrix/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf2 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf2 = struct @align(4) {
   one:f32 @offset(0)
 }
 
@@ -24,7 +24,7 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %m:ptr<private, mat4x2<f32>, read_write> = var
   %x_10:ptr<uniform, buf2, read> = var @binding_point(0, 2)
   %x_12:ptr<uniform, buf0, read> = var @binding_point(0, 0)
@@ -33,85 +33,102 @@
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%func0_i1_ = func(%x:ptr<function, i32, read_write>):void -> %b2 {
-  %b2 = block {
+%func0_i1_ = func(%x:ptr<function, i32, read_write>):void {
+  $B2: {
     %i:ptr<function, i32, read_write> = var
     %x_137:ptr<function, bool, read_write> = var
     %x_138:ptr<function, bool, read_write> = var
     %x_138_phi:ptr<function, bool, read_write> = var
     %x_139_phi:ptr<function, bool, read_write> = var
-    %x_124:i32 = load %x
-    %x_125:bool = lt %x_124, 1i
+    %14:i32 = load %x
+    %x_124:i32 = let %14
+    %16:bool = lt %x_124, 1i
+    %x_125:bool = let %16
     store %x_139_phi, %x_125
-    %16:bool = eq %x_125, false
-    if %16 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %x_129:i32 = load %x
-        %x_130:bool = gt %x_129, 1i
+    %18:bool = eq %x_125, false
+    if %18 [t: $B3] {  # if_1
+      $B3: {  # true
+        %19:i32 = load %x
+        %x_129:i32 = let %19
+        %21:bool = gt %x_129, 1i
+        %x_130:bool = let %21
         store %x_138_phi, %x_130
-        if %x_130 [t: %b4] {  # if_2
-          %b4 = block {  # true
-            %19:ptr<uniform, f32, read> = access %x_10, 0u
-            %x_134:f32 = load %19
-            %21:ptr<uniform, f32, read> = access %x_12, 0u, 0i, 0u
-            %x_136:f32 = load %21
-            %23:bool = gt %x_134, %x_136
-            store %x_137, %23
-            %24:bool = load %x_137
-            store %x_138_phi, %24
+        if %x_130 [t: $B4] {  # if_2
+          $B4: {  # true
+            %23:ptr<uniform, f32, read> = access %x_10, 0u
+            %24:f32 = load %23
+            %x_134:f32 = let %24
+            %26:ptr<uniform, f32, read> = access %x_12, 0u, 0i, 0u
+            %27:f32 = load %26
+            %x_136:f32 = let %27
+            %29:bool = gt %x_134, %x_136
+            store %x_137, %29
+            %30:bool = load %x_137
+            store %x_138_phi, %30
             exit_if  # if_2
           }
         }
-        %25:bool = load %x_138_phi
-        store %x_138, %25
-        %26:bool = load %x_138
-        store %x_139_phi, %26
+        %31:bool = load %x_138_phi
+        store %x_138, %31
+        %32:bool = load %x_138
+        store %x_139_phi, %32
         exit_if  # if_1
       }
     }
-    %x_139:bool = load %x_139_phi
-    if %x_139 [t: %b5] {  # if_3
-      %b5 = block {  # true
+    %33:bool = load %x_139_phi
+    %x_139:bool = let %33
+    if %x_139 [t: $B5] {  # if_3
+      $B5: {  # true
         ret
       }
     }
-    %28:ptr<uniform, f32, read> = access %x_10, 0u
-    %x_143:f32 = load %28
-    %30:ptr<uniform, f32, read> = access %x_12, 0u, 0i, 0u
-    %x_145:f32 = load %30
-    %32:bool = eq %x_143, %x_145
-    if %32 [t: %b6] {  # if_4
-      %b6 = block {  # true
+    %35:ptr<uniform, f32, read> = access %x_10, 0u
+    %36:f32 = load %35
+    %x_143:f32 = let %36
+    %38:ptr<uniform, f32, read> = access %x_12, 0u, 0i, 0u
+    %39:f32 = load %38
+    %x_145:f32 = let %39
+    %41:bool = eq %x_143, %x_145
+    if %41 [t: $B6] {  # if_4
+      $B6: {  # true
         store %i, 0i
-        loop [b: %b7, c: %b8] {  # loop_1
-          %b7 = block {  # body
-            %x_150:i32 = load %i
-            %34:bool = lt %x_150, 2i
-            if %34 [t: %b9, f: %b10] {  # if_5
-              %b9 = block {  # true
+        loop [b: $B7, c: $B8] {  # loop_1
+          $B7: {  # body
+            %42:i32 = load %i
+            %x_150:i32 = let %42
+            %44:bool = lt %x_150, 2i
+            if %44 [t: $B9, f: $B10] {  # if_5
+              $B9: {  # true
                 exit_if  # if_5
               }
-              %b10 = block {  # false
+              $B10: {  # false
                 exit_loop  # loop_1
               }
             }
-            continue %b8
+            continue  # -> $B8
           }
-          %b8 = block {  # continuing
-            %x_154:i32 = load %x
-            %x_155:i32 = clamp %x_154, 0i, 3i
-            %x_156:i32 = load %i
-            %38:ptr<uniform, f32, read> = access %x_12, 0u, 0i, 0u
-            %x_158:f32 = load %38
-            %40:ptr<private, vec2<f32>, read_write> = access %m, %x_155
-            %x_160:f32 = load_vector_element %40, %x_156
-            %42:ptr<private, vec2<f32>, read_write> = access %m, %x_155
-            %43:f32 = add %x_160, %x_158
-            store_vector_element %42, %x_156, %43
-            %x_163:i32 = load %i
-            %45:i32 = add %x_163, 1i
-            store %i, %45
-            next_iteration %b7
+          $B8: {  # continuing
+            %45:i32 = load %x
+            %x_154:i32 = let %45
+            %47:i32 = max %x_154, 0i
+            %48:i32 = min %47, 3i
+            %x_155:i32 = let %48
+            %50:i32 = load %i
+            %x_156:i32 = let %50
+            %52:ptr<uniform, f32, read> = access %x_12, 0u, 0i, 0u
+            %53:f32 = load %52
+            %x_158:f32 = let %53
+            %55:ptr<private, vec2<f32>, read_write> = access %m, %x_155
+            %56:f32 = load_vector_element %55, %x_156
+            %x_160:f32 = let %56
+            %58:ptr<private, vec2<f32>, read_write> = access %m, %x_155
+            %59:f32 = add %x_160, %x_158
+            store_vector_element %58, %x_156, %59
+            %60:i32 = load %i
+            %x_163:i32 = let %60
+            %62:i32 = add %x_163, 1i
+            store %i, %62
+            next_iteration  # -> $B7
           }
         }
         exit_if  # if_4
@@ -120,112 +137,142 @@
     ret
   }
 }
-%func1_ = func():void -> %b11 {
-  %b11 = block {
+%func1_ = func():void {
+  $B11: {
     %param:ptr<function, i32, read_write> = var
-    %x_167:f32 = load_vector_element %gl_FragCoord, 1u
-    %49:bool = lt %x_167, 0.0f
-    if %49 [t: %b12] {  # if_6
-      %b12 = block {  # true
+    %65:f32 = load_vector_element %gl_FragCoord, 1u
+    %x_167:f32 = let %65
+    %67:bool = lt %x_167, 0.0f
+    if %67 [t: $B12] {  # if_6
+      $B12: {  # true
         ret
       }
     }
     store %param, 1i
-    %50:void = call %func0_i1_, %param
+    %68:void = call %func0_i1_, %param
     ret
   }
 }
-%main_1 = func():void -> %b13 {
-  %b13 = block {
+%main_1 = func():void {
+  $B13: {
     store %m, mat4x2<f32>(vec2<f32>(0.0f))
-    %52:void = call %func1_
-    %53:void = call %func1_
-    %x_54:mat4x2<f32> = load %m
-    %55:ptr<uniform, i32, read> = access %x_16, 0u, 0i, 0u
-    %x_56:i32 = load %55
-    %57:ptr<uniform, i32, read> = access %x_16, 0u, 0i, 0u
-    %x_59:i32 = load %57
-    %59:ptr<uniform, i32, read> = access %x_16, 0u, 1i, 0u
-    %x_62:i32 = load %59
-    %61:ptr<uniform, i32, read> = access %x_16, 0u, 1i, 0u
-    %x_65:i32 = load %61
-    %63:ptr<uniform, i32, read> = access %x_16, 0u, 0i, 0u
-    %x_68:i32 = load %63
-    %65:ptr<uniform, i32, read> = access %x_16, 0u, 0i, 0u
-    %x_71:i32 = load %65
-    %67:ptr<uniform, i32, read> = access %x_16, 0u, 0i, 0u
-    %x_74:i32 = load %67
-    %69:ptr<uniform, i32, read> = access %x_16, 0u, 0i, 0u
-    %x_77:i32 = load %69
-    %71:f32 = convert %x_56
-    %72:f32 = convert %x_59
-    %73:vec2<f32> = construct %71, %72
-    %74:f32 = convert %x_62
-    %75:f32 = convert %x_65
-    %76:vec2<f32> = construct %74, %75
-    %77:f32 = convert %x_68
-    %78:f32 = convert %x_71
-    %79:vec2<f32> = construct %77, %78
-    %80:f32 = convert %x_74
-    %81:f32 = convert %x_77
-    %82:vec2<f32> = construct %80, %81
-    %x_83:mat4x2<f32> = construct %73, %76, %79, %82
-    %84:vec2<f32> = access %x_54, 0u
-    %85:vec2<f32> = access %x_83, 0u
-    %86:vec2<bool> = eq %84, %85
-    %87:bool = all %86
-    %88:vec2<f32> = access %x_54, 1u
-    %89:vec2<f32> = access %x_83, 1u
-    %90:vec2<bool> = eq %88, %89
-    %91:bool = all %90
-    %92:bool = and %87, %91
-    %93:vec2<f32> = access %x_54, 2u
-    %94:vec2<f32> = access %x_83, 2u
-    %95:vec2<bool> = eq %93, %94
-    %96:bool = all %95
-    %97:bool = and %92, %96
-    %98:vec2<f32> = access %x_54, 3u
-    %99:vec2<f32> = access %x_83, 3u
-    %100:vec2<bool> = eq %98, %99
-    %101:bool = all %100
-    %102:bool = and %97, %101
-    if %102 [t: %b14, f: %b15] {  # if_7
-      %b14 = block {  # true
-        %103:ptr<uniform, i32, read> = access %x_16, 0u, 3i, 0u
-        %x_107:i32 = load %103
-        %105:ptr<uniform, i32, read> = access %x_16, 0u, 0i, 0u
-        %x_110:i32 = load %105
-        %107:ptr<uniform, i32, read> = access %x_16, 0u, 0i, 0u
-        %x_113:i32 = load %107
-        %109:ptr<uniform, i32, read> = access %x_16, 0u, 3i, 0u
-        %x_116:i32 = load %109
-        %111:f32 = convert %x_107
-        %112:f32 = convert %x_110
-        %113:f32 = convert %x_113
-        %114:f32 = convert %x_116
-        %115:vec4<f32> = construct %111, %112, %113, %114
-        store %x_GLF_color, %115
+    %70:void = call %func1_
+    %71:void = call %func1_
+    %72:mat4x2<f32> = load %m
+    %x_54:mat4x2<f32> = let %72
+    %74:ptr<uniform, i32, read> = access %x_16, 0u, 0i, 0u
+    %75:i32 = load %74
+    %x_56:i32 = let %75
+    %77:ptr<uniform, i32, read> = access %x_16, 0u, 0i, 0u
+    %78:i32 = load %77
+    %x_59:i32 = let %78
+    %80:ptr<uniform, i32, read> = access %x_16, 0u, 1i, 0u
+    %81:i32 = load %80
+    %x_62:i32 = let %81
+    %83:ptr<uniform, i32, read> = access %x_16, 0u, 1i, 0u
+    %84:i32 = load %83
+    %x_65:i32 = let %84
+    %86:ptr<uniform, i32, read> = access %x_16, 0u, 0i, 0u
+    %87:i32 = load %86
+    %x_68:i32 = let %87
+    %89:ptr<uniform, i32, read> = access %x_16, 0u, 0i, 0u
+    %90:i32 = load %89
+    %x_71:i32 = let %90
+    %92:ptr<uniform, i32, read> = access %x_16, 0u, 0i, 0u
+    %93:i32 = load %92
+    %x_74:i32 = let %93
+    %95:ptr<uniform, i32, read> = access %x_16, 0u, 0i, 0u
+    %96:i32 = load %95
+    %x_77:i32 = let %96
+    %98:f32 = convert %x_56
+    %99:f32 = let %98
+    %100:f32 = convert %x_59
+    %101:vec2<f32> = construct %99, %100
+    %102:vec2<f32> = let %101
+    %103:f32 = convert %x_62
+    %104:f32 = let %103
+    %105:f32 = convert %x_65
+    %106:vec2<f32> = construct %104, %105
+    %107:vec2<f32> = let %106
+    %108:f32 = convert %x_68
+    %109:f32 = let %108
+    %110:f32 = convert %x_71
+    %111:vec2<f32> = construct %109, %110
+    %112:vec2<f32> = let %111
+    %113:f32 = convert %x_74
+    %114:f32 = let %113
+    %115:f32 = convert %x_77
+    %116:vec2<f32> = construct %114, %115
+    %117:mat4x2<f32> = construct %102, %107, %112, %116
+    %x_83:mat4x2<f32> = let %117
+    %119:vec2<f32> = access %x_54, 0u
+    %120:vec2<f32> = access %x_83, 0u
+    %121:vec2<bool> = eq %119, %120
+    %122:bool = all %121
+    %123:bool = let %122
+    %124:vec2<f32> = access %x_54, 1u
+    %125:vec2<f32> = access %x_83, 1u
+    %126:vec2<bool> = eq %124, %125
+    %127:bool = all %126
+    %128:bool = and %123, %127
+    %129:bool = let %128
+    %130:vec2<f32> = access %x_54, 2u
+    %131:vec2<f32> = access %x_83, 2u
+    %132:vec2<bool> = eq %130, %131
+    %133:bool = all %132
+    %134:bool = and %129, %133
+    %135:bool = let %134
+    %136:vec2<f32> = access %x_54, 3u
+    %137:vec2<f32> = access %x_83, 3u
+    %138:vec2<bool> = eq %136, %137
+    %139:bool = all %138
+    %140:bool = and %135, %139
+    if %140 [t: $B14, f: $B15] {  # if_7
+      $B14: {  # true
+        %141:ptr<uniform, i32, read> = access %x_16, 0u, 3i, 0u
+        %142:i32 = load %141
+        %x_107:i32 = let %142
+        %144:ptr<uniform, i32, read> = access %x_16, 0u, 0i, 0u
+        %145:i32 = load %144
+        %x_110:i32 = let %145
+        %147:ptr<uniform, i32, read> = access %x_16, 0u, 0i, 0u
+        %148:i32 = load %147
+        %x_113:i32 = let %148
+        %150:ptr<uniform, i32, read> = access %x_16, 0u, 3i, 0u
+        %151:i32 = load %150
+        %x_116:i32 = let %151
+        %153:f32 = convert %x_107
+        %154:f32 = let %153
+        %155:f32 = convert %x_110
+        %156:f32 = let %155
+        %157:f32 = convert %x_113
+        %158:f32 = let %157
+        %159:f32 = convert %x_116
+        %160:vec4<f32> = construct %154, %156, %158, %159
+        store %x_GLF_color, %160
         exit_if  # if_7
       }
-      %b15 = block {  # false
-        %116:ptr<uniform, i32, read> = access %x_16, 0u, 0i, 0u
-        %x_120:i32 = load %116
-        %x_121:f32 = convert %x_120
-        %119:vec4<f32> = construct %x_121, %x_121, %x_121, %x_121
-        store %x_GLF_color, %119
+      $B15: {  # false
+        %161:ptr<uniform, i32, read> = access %x_16, 0u, 0i, 0u
+        %162:i32 = load %161
+        %x_120:i32 = let %162
+        %164:f32 = convert %x_120
+        %x_121:f32 = let %164
+        %166:vec4<f32> = construct %x_121, %x_121, %x_121, %x_121
+        store %x_GLF_color, %166
         exit_if  # if_7
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b16 {
-  %b16 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B16: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %122:void = call %main_1
-    %123:vec4<f32> = load %x_GLF_color
-    %124:main_out = construct %123
-    ret %124
+    %169:void = call %main_1
+    %170:vec4<f32> = load %x_GLF_color
+    %171:main_out = construct %170
+    ret %171
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-nested-loop-undefined-smoothstep-never-executed/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-nested-loop-undefined-smoothstep-never-executed/0-opt.spvasm.expected.ir.msl
index 8578119..10a1936 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-nested-loop-undefined-smoothstep-never-executed/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-nested-loop-undefined-smoothstep-never-executed/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,14 +20,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_10:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %v0:ptr<function, vec4<f32>, read_write> = var
     %v1:ptr<function, vec4<f32>, read_write> = var
     %a:ptr<function, i32, read_write> = var
@@ -43,125 +43,131 @@
     %15:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
     %16:i32 = load %15
     store %a, %16
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %17:i32 = load %a
         %18:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
         %19:i32 = load %18
         %20:bool = lt %17, %19
-        if %20 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %20 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
         %21:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
         %22:i32 = load %21
         store %c, %22
-        loop [b: %b7, c: %b8] {  # loop_2
-          %b7 = block {  # body
+        loop [b: $B7, c: $B8] {  # loop_2
+          $B7: {  # body
             %23:i32 = load %c
             %24:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
             %25:i32 = load %24
             %26:bool = lt %23, %25
-            if %26 [t: %b9, f: %b10] {  # if_2
-              %b9 = block {  # true
+            if %26 [t: $B9, f: $B10] {  # if_2
+              $B9: {  # true
                 exit_if  # if_2
               }
-              %b10 = block {  # false
+              $B10: {  # false
                 exit_loop  # loop_2
               }
             }
             %27:i32 = load %c
-            %x_69:i32 = clamp %27, 0i, 3i
-            %29:f32 = load_vector_element %v0, %x_69
-            %30:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-            %31:f32 = load %30
-            %32:f32 = sub %29, %31
-            store_vector_element %v0, %x_69, %32
-            %33:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-            %34:i32 = load %33
-            %35:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
+            %28:i32 = max %27, 0i
+            %29:i32 = min %28, 3i
+            %x_69:i32 = let %29
+            %31:f32 = load_vector_element %v0, %x_69
+            %32:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+            %33:f32 = load %32
+            %34:f32 = sub %31, %33
+            store_vector_element %v0, %x_69, %34
+            %35:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
             %36:i32 = load %35
-            %37:bool = eq %34, %36
-            if %37 [t: %b11] {  # if_3
-              %b11 = block {  # true
-                %x_83:i32 = load %a
-                %39:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-                %40:f32 = load %39
-                %41:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-                %42:f32 = load %41
-                %43:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-                %44:f32 = load %43
-                %45:vec4<f32> = construct %40, %42, %44, 3.0f
-                %46:vec4<f32> = load %v0
-                %47:vec4<f32> = smoothstep %45, vec4<f32>(1.0f), %46
-                %48:i32 = load %a
-                %49:f32 = access %47, %48
-                store_vector_element %v1, %x_83, %49
+            %37:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
+            %38:i32 = load %37
+            %39:bool = eq %36, %38
+            if %39 [t: $B11] {  # if_3
+              $B11: {  # true
+                %40:i32 = load %a
+                %x_83:i32 = let %40
+                %42:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+                %43:f32 = load %42
+                %44:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+                %45:f32 = load %44
+                %46:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+                %47:f32 = load %46
+                %48:vec4<f32> = construct %43, %45, %47, 3.0f
+                %49:vec4<f32> = load %v0
+                %50:vec4<f32> = smoothstep %48, vec4<f32>(1.0f), %49
+                %51:i32 = load %a
+                %52:f32 = access %50, %51
+                store_vector_element %v1, %x_83, %52
                 exit_if  # if_3
               }
             }
-            continue %b8
+            continue  # -> $B8
           }
-          %b8 = block {  # continuing
-            %50:i32 = load %c
-            %51:i32 = add %50, 1i
-            store %c, %51
-            next_iteration %b7
+          $B8: {  # continuing
+            %53:i32 = load %c
+            %54:i32 = add %53, 1i
+            store %c, %54
+            next_iteration  # -> $B7
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %52:i32 = load %a
-        %53:i32 = add %52, 1i
-        store %a, %53
-        next_iteration %b3
+      $B4: {  # continuing
+        %55:i32 = load %a
+        %56:i32 = add %55, 1i
+        store %a, %56
+        next_iteration  # -> $B3
       }
     }
-    %54:f32 = load_vector_element %v1, 0u
-    %55:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %56:f32 = load %55
-    %57:bool = eq %54, %56
-    if %57 [t: %b12, f: %b13] {  # if_4
-      %b12 = block {  # true
-        %58:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %59:i32 = load %58
-        %60:f32 = convert %59
-        %61:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
+    %57:f32 = load_vector_element %v1, 0u
+    %58:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %59:f32 = load %58
+    %60:bool = eq %57, %59
+    if %60 [t: $B12, f: $B13] {  # if_4
+      $B12: {  # true
+        %61:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
         %62:i32 = load %61
         %63:f32 = convert %62
-        %64:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
-        %65:i32 = load %64
-        %66:f32 = convert %65
-        %67:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %68:i32 = load %67
-        %69:f32 = convert %68
-        %70:vec4<f32> = construct %60, %63, %66, %69
-        store %x_GLF_color, %70
+        %64:f32 = let %63
+        %65:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
+        %66:i32 = load %65
+        %67:f32 = convert %66
+        %68:f32 = let %67
+        %69:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
+        %70:i32 = load %69
+        %71:f32 = convert %70
+        %72:f32 = let %71
+        %73:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %74:i32 = load %73
+        %75:f32 = convert %74
+        %76:vec4<f32> = construct %64, %68, %72, %75
+        store %x_GLF_color, %76
         exit_if  # if_4
       }
-      %b13 = block {  # false
-        %71:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
-        %72:i32 = load %71
-        %73:f32 = convert %72
-        %74:vec4<f32> = construct %73
-        store %x_GLF_color, %74
+      $B13: {  # false
+        %77:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
+        %78:i32 = load %77
+        %79:f32 = convert %78
+        %80:vec4<f32> = construct %79
+        store %x_GLF_color, %80
         exit_if  # if_4
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b14 {
-  %b14 = block {
-    %76:void = call %main_1
-    %77:vec4<f32> = load %x_GLF_color
-    %78:main_out = construct %77
-    ret %78
+%tint_symbol = @fragment func():main_out {
+  $B14: {
+    %82:void = call %main_1
+    %83:vec4<f32> = load %x_GLF_color
+    %84:main_out = construct %83
+    ret %84
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-nested-loop-undefined-smoothstep-never-executed/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-nested-loop-undefined-smoothstep-never-executed/0-opt.wgsl.expected.ir.msl
index b052d94..65e2f58 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-nested-loop-undefined-smoothstep-never-executed/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-nested-loop-undefined-smoothstep-never-executed/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,148 +20,182 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_10:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %v0:ptr<function, vec4<f32>, read_write> = var
     %v1:ptr<function, vec4<f32>, read_write> = var
     %a:ptr<function, i32, read_write> = var
     %c:ptr<function, i32, read_write> = var
     %9:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-    %x_41:f32 = load %9
-    %11:vec4<f32> = construct %x_41, %x_41, %x_41, %x_41
-    store %v0, %11
-    %12:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_44:f32 = load %12
-    %14:vec4<f32> = construct %x_44, %x_44, %x_44, %x_44
-    store %v1, %14
-    %15:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-    %x_47:i32 = load %15
+    %10:f32 = load %9
+    %x_41:f32 = let %10
+    %12:vec4<f32> = construct %x_41, %x_41, %x_41, %x_41
+    store %v0, %12
+    %13:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %14:f32 = load %13
+    %x_44:f32 = let %14
+    %16:vec4<f32> = construct %x_44, %x_44, %x_44, %x_44
+    store %v1, %16
+    %17:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+    %18:i32 = load %17
+    %x_47:i32 = let %18
     store %a, %x_47
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_52:i32 = load %a
-        %18:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %x_54:i32 = load %18
-        %20:bool = lt %x_52, %x_54
-        if %20 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %20:i32 = load %a
+        %x_52:i32 = let %20
+        %22:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %23:i32 = load %22
+        %x_54:i32 = let %23
+        %25:bool = lt %x_52, %x_54
+        if %25 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %21:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
-        %x_58:i32 = load %21
+        %26:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
+        %27:i32 = load %26
+        %x_58:i32 = let %27
         store %c, %x_58
-        loop [b: %b7, c: %b8] {  # loop_2
-          %b7 = block {  # body
-            %x_63:i32 = load %c
-            %24:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-            %x_65:i32 = load %24
-            %26:bool = lt %x_63, %x_65
-            if %26 [t: %b9, f: %b10] {  # if_2
-              %b9 = block {  # true
+        loop [b: $B7, c: $B8] {  # loop_2
+          $B7: {  # body
+            %29:i32 = load %c
+            %x_63:i32 = let %29
+            %31:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+            %32:i32 = load %31
+            %x_65:i32 = let %32
+            %34:bool = lt %x_63, %x_65
+            if %34 [t: $B9, f: $B10] {  # if_2
+              $B9: {  # true
                 exit_if  # if_2
               }
-              %b10 = block {  # false
+              $B10: {  # false
                 exit_loop  # loop_2
               }
             }
-            %x_68:i32 = load %c
-            %x_69:i32 = clamp %x_68, 0i, 3i
-            %29:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-            %x_71:f32 = load %29
-            %x_73:f32 = load_vector_element %v0, %x_69
-            %32:f32 = sub %x_73, %x_71
-            store_vector_element %v0, %x_69, %32
-            %33:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-            %x_77:i32 = load %33
-            %35:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
-            %x_79:i32 = load %35
-            %37:bool = eq %x_77, %x_79
-            if %37 [t: %b11] {  # if_3
-              %b11 = block {  # true
-                %x_83:i32 = load %a
-                %39:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-                %x_85:f32 = load %39
-                %41:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-                %x_87:f32 = load %41
-                %43:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-                %x_89:f32 = load %43
-                %x_91:vec4<f32> = load %v0
-                %x_93:i32 = load %a
-                %47:vec4<f32> = construct %x_85, %x_87, %x_89, 3.0f
-                %48:vec4<f32> = smoothstep %47, vec4<f32>(1.0f), %x_91
-                %49:f32 = access %48, %x_93
-                store_vector_element %v1, %x_83, %49
+            %35:i32 = load %c
+            %x_68:i32 = let %35
+            %37:i32 = max %x_68, 0i
+            %38:i32 = min %37, 3i
+            %x_69:i32 = let %38
+            %40:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+            %41:f32 = load %40
+            %x_71:f32 = let %41
+            %43:f32 = load_vector_element %v0, %x_69
+            %x_73:f32 = let %43
+            %45:f32 = sub %x_73, %x_71
+            store_vector_element %v0, %x_69, %45
+            %46:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+            %47:i32 = load %46
+            %x_77:i32 = let %47
+            %49:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
+            %50:i32 = load %49
+            %x_79:i32 = let %50
+            %52:bool = eq %x_77, %x_79
+            if %52 [t: $B11] {  # if_3
+              $B11: {  # true
+                %53:i32 = load %a
+                %x_83:i32 = let %53
+                %55:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+                %56:f32 = load %55
+                %x_85:f32 = let %56
+                %58:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+                %59:f32 = load %58
+                %x_87:f32 = let %59
+                %61:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+                %62:f32 = load %61
+                %x_89:f32 = let %62
+                %64:vec4<f32> = load %v0
+                %x_91:vec4<f32> = let %64
+                %66:i32 = load %a
+                %x_93:i32 = let %66
+                %68:vec4<f32> = construct %x_85, %x_87, %x_89, 3.0f
+                %69:vec4<f32> = smoothstep %68, vec4<f32>(1.0f), %x_91
+                %70:f32 = access %69, %x_93
+                store_vector_element %v1, %x_83, %70
                 exit_if  # if_3
               }
             }
-            continue %b8
+            continue  # -> $B8
           }
-          %b8 = block {  # continuing
-            %x_96:i32 = load %c
-            %51:i32 = add %x_96, 1i
-            store %c, %51
-            next_iteration %b7
+          $B8: {  # continuing
+            %71:i32 = load %c
+            %x_96:i32 = let %71
+            %73:i32 = add %x_96, 1i
+            store %c, %73
+            next_iteration  # -> $B7
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_98:i32 = load %a
-        %53:i32 = add %x_98, 1i
-        store %a, %53
-        next_iteration %b3
+      $B4: {  # continuing
+        %74:i32 = load %a
+        %x_98:i32 = let %74
+        %76:i32 = add %x_98, 1i
+        store %a, %76
+        next_iteration  # -> $B3
       }
     }
-    %x_101:f32 = load_vector_element %v1, 0u
-    %55:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_103:f32 = load %55
-    %57:bool = eq %x_101, %x_103
-    if %57 [t: %b12, f: %b13] {  # if_4
-      %b12 = block {  # true
-        %58:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %x_109:i32 = load %58
-        %60:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
-        %x_112:i32 = load %60
-        %62:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
-        %x_115:i32 = load %62
-        %64:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %x_118:i32 = load %64
-        %66:f32 = convert %x_109
-        %67:f32 = convert %x_112
-        %68:f32 = convert %x_115
-        %69:f32 = convert %x_118
-        %70:vec4<f32> = construct %66, %67, %68, %69
-        store %x_GLF_color, %70
+    %77:f32 = load_vector_element %v1, 0u
+    %x_101:f32 = let %77
+    %79:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %80:f32 = load %79
+    %x_103:f32 = let %80
+    %82:bool = eq %x_101, %x_103
+    if %82 [t: $B12, f: $B13] {  # if_4
+      $B12: {  # true
+        %83:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %84:i32 = load %83
+        %x_109:i32 = let %84
+        %86:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
+        %87:i32 = load %86
+        %x_112:i32 = let %87
+        %89:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
+        %90:i32 = load %89
+        %x_115:i32 = let %90
+        %92:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %93:i32 = load %92
+        %x_118:i32 = let %93
+        %95:f32 = convert %x_109
+        %96:f32 = let %95
+        %97:f32 = convert %x_112
+        %98:f32 = let %97
+        %99:f32 = convert %x_115
+        %100:f32 = let %99
+        %101:f32 = convert %x_118
+        %102:vec4<f32> = construct %96, %98, %100, %101
+        store %x_GLF_color, %102
         exit_if  # if_4
       }
-      %b13 = block {  # false
-        %71:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
-        %x_122:i32 = load %71
-        %x_123:f32 = convert %x_122
-        %74:vec4<f32> = construct %x_123, %x_123, %x_123, %x_123
-        store %x_GLF_color, %74
+      $B13: {  # false
+        %103:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
+        %104:i32 = load %103
+        %x_122:i32 = let %104
+        %106:f32 = convert %x_122
+        %x_123:f32 = let %106
+        %108:vec4<f32> = construct %x_123, %x_123, %x_123, %x_123
+        store %x_GLF_color, %108
         exit_if  # if_4
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b14 {
-  %b14 = block {
-    %76:void = call %main_1
-    %77:vec4<f32> = load %x_GLF_color
-    %78:main_out = construct %77
-    ret %78
+%tint_symbol = @fragment func():main_out {
+  $B14: {
+    %110:void = call %main_1
+    %111:vec4<f32> = load %x_GLF_color
+    %112:main_out = construct %111
+    ret %112
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-nested-loops-global-loop-counter-do-while-accumulate-float/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-nested-loops-global-loop-counter-do-while-accumulate-float/0-opt.spvasm.expected.ir.msl
index 9f2298e..1d6e199 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-nested-loops-global-loop-counter-do-while-accumulate-float/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-nested-loops-global-loop-counter-do-while-accumulate-float/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,15 +20,15 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_global_loop_count:ptr<private, i32, read_write> = var
   %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_10:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %f:ptr<function, f32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
@@ -54,489 +54,494 @@
     %26:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
     %27:i32 = load %26
     store %i, %27
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %28:i32 = load %i
         %29:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
         %30:i32 = load %29
         %31:bool = lt %28, %30
-        if %31 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %31 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
         %32:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
         %33:i32 = load %32
         store %i_1, %33
-        loop [b: %b7, c: %b8] {  # loop_2
-          %b7 = block {  # body
+        loop [b: $B7, c: $B8] {  # loop_2
+          $B7: {  # body
             %34:i32 = load %i_1
             %35:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
             %36:i32 = load %35
             %37:bool = lt %34, %36
-            if %37 [t: %b9, f: %b10] {  # if_2
-              %b9 = block {  # true
+            if %37 [t: $B9, f: $B10] {  # if_2
+              $B9: {  # true
                 exit_if  # if_2
               }
-              %b10 = block {  # false
+              $B10: {  # false
                 exit_loop  # loop_2
               }
             }
             %38:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
             %39:i32 = load %38
             store %i_2, %39
-            loop [b: %b11, c: %b12] {  # loop_3
-              %b11 = block {  # body
+            loop [b: $B11, c: $B12] {  # loop_3
+              $B11: {  # body
                 %40:i32 = load %i_2
                 %41:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
                 %42:i32 = load %41
                 %43:bool = lt %40, %42
-                if %43 [t: %b13, f: %b14] {  # if_3
-                  %b13 = block {  # true
+                if %43 [t: $B13, f: $B14] {  # if_3
+                  $B13: {  # true
                     exit_if  # if_3
                   }
-                  %b14 = block {  # false
+                  $B14: {  # false
                     exit_loop  # loop_3
                   }
                 }
                 %44:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
                 %45:i32 = load %44
                 store %i_3, %45
-                loop [b: %b15, c: %b16] {  # loop_4
-                  %b15 = block {  # body
+                loop [b: $B15, c: $B16] {  # loop_4
+                  $B15: {  # body
                     %46:i32 = load %i_3
                     %47:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
                     %48:i32 = load %47
                     %49:bool = lt %46, %48
-                    if %49 [t: %b17, f: %b18] {  # if_4
-                      %b17 = block {  # true
+                    if %49 [t: $B17, f: $B18] {  # if_4
+                      $B17: {  # true
                         exit_if  # if_4
                       }
-                      %b18 = block {  # false
+                      $B18: {  # false
                         exit_loop  # loop_4
                       }
                     }
                     %50:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
                     %51:i32 = load %50
                     store %i_4, %51
-                    loop [b: %b19, c: %b20] {  # loop_5
-                      %b19 = block {  # body
+                    loop [b: $B19, c: $B20] {  # loop_5
+                      $B19: {  # body
                         %52:i32 = load %i_4
                         %53:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
                         %54:i32 = load %53
                         %55:bool = lt %52, %54
-                        if %55 [t: %b21, f: %b22] {  # if_5
-                          %b21 = block {  # true
+                        if %55 [t: $B21, f: $B22] {  # if_5
+                          $B21: {  # true
                             exit_if  # if_5
                           }
-                          %b22 = block {  # false
+                          $B22: {  # false
                             exit_loop  # loop_5
                           }
                         }
                         %56:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
                         %57:i32 = load %56
                         store %i_5, %57
-                        loop [b: %b23, c: %b24] {  # loop_6
-                          %b23 = block {  # body
+                        loop [b: $B23, c: $B24] {  # loop_6
+                          $B23: {  # body
                             %58:i32 = load %i_5
                             %59:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
                             %60:i32 = load %59
                             %61:bool = lt %58, %60
-                            if %61 [t: %b25, f: %b26] {  # if_6
-                              %b25 = block {  # true
+                            if %61 [t: $B25, f: $B26] {  # if_6
+                              $B25: {  # true
                                 exit_if  # if_6
                               }
-                              %b26 = block {  # false
+                              $B26: {  # false
                                 exit_loop  # loop_6
                               }
                             }
                             %62:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
                             %63:i32 = load %62
                             store %i_6, %63
-                            loop [b: %b27, c: %b28] {  # loop_7
-                              %b27 = block {  # body
+                            loop [b: $B27, c: $B28] {  # loop_7
+                              $B27: {  # body
                                 %64:i32 = load %i_6
                                 %65:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
                                 %66:i32 = load %65
                                 %67:bool = lt %64, %66
-                                if %67 [t: %b29, f: %b30] {  # if_7
-                                  %b29 = block {  # true
+                                if %67 [t: $B29, f: $B30] {  # if_7
+                                  $B29: {  # true
                                     exit_if  # if_7
                                   }
-                                  %b30 = block {  # false
+                                  $B30: {  # false
                                     exit_loop  # loop_7
                                   }
                                 }
                                 %68:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
                                 %69:i32 = load %68
                                 store %i_7, %69
-                                loop [b: %b31, c: %b32] {  # loop_8
-                                  %b31 = block {  # body
+                                loop [b: $B31, c: $B32] {  # loop_8
+                                  $B31: {  # body
                                     %70:i32 = load %i_7
                                     %71:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
                                     %72:i32 = load %71
                                     %73:bool = lt %70, %72
-                                    if %73 [t: %b33, f: %b34] {  # if_8
-                                      %b33 = block {  # true
+                                    if %73 [t: $B33, f: $B34] {  # if_8
+                                      $B33: {  # true
                                         exit_if  # if_8
                                       }
-                                      %b34 = block {  # false
+                                      $B34: {  # false
                                         exit_loop  # loop_8
                                       }
                                     }
                                     %74:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
                                     %75:i32 = load %74
                                     store %i_8, %75
-                                    loop [b: %b35, c: %b36] {  # loop_9
-                                      %b35 = block {  # body
+                                    loop [b: $B35, c: $B36] {  # loop_9
+                                      $B35: {  # body
                                         %76:i32 = load %i_8
                                         %77:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
                                         %78:i32 = load %77
                                         %79:bool = lt %76, %78
-                                        if %79 [t: %b37, f: %b38] {  # if_9
-                                          %b37 = block {  # true
+                                        if %79 [t: $B37, f: $B38] {  # if_9
+                                          $B37: {  # true
                                             exit_if  # if_9
                                           }
-                                          %b38 = block {  # false
+                                          $B38: {  # false
                                             exit_loop  # loop_9
                                           }
                                         }
                                         %80:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
                                         %81:i32 = load %80
                                         store %i_9, %81
-                                        loop [b: %b39, c: %b40] {  # loop_10
-                                          %b39 = block {  # body
+                                        loop [b: $B39, c: $B40] {  # loop_10
+                                          $B39: {  # body
                                             %82:i32 = load %i_9
                                             %83:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
                                             %84:i32 = load %83
                                             %85:bool = lt %82, %84
-                                            if %85 [t: %b41, f: %b42] {  # if_10
-                                              %b41 = block {  # true
+                                            if %85 [t: $B41, f: $B42] {  # if_10
+                                              $B41: {  # true
                                                 exit_if  # if_10
                                               }
-                                              %b42 = block {  # false
+                                              $B42: {  # false
                                                 exit_loop  # loop_10
                                               }
                                             }
                                             %86:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
                                             %87:i32 = load %86
                                             store %i_10, %87
-                                            loop [b: %b43, c: %b44] {  # loop_11
-                                              %b43 = block {  # body
+                                            loop [b: $B43, c: $B44] {  # loop_11
+                                              $B43: {  # body
                                                 %88:i32 = load %i_10
                                                 %89:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
                                                 %90:i32 = load %89
                                                 %91:bool = lt %88, %90
-                                                if %91 [t: %b45, f: %b46] {  # if_11
-                                                  %b45 = block {  # true
+                                                if %91 [t: $B45, f: $B46] {  # if_11
+                                                  $B45: {  # true
                                                     exit_if  # if_11
                                                   }
-                                                  %b46 = block {  # false
+                                                  $B46: {  # false
                                                     exit_loop  # loop_11
                                                   }
                                                 }
                                                 %92:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
                                                 %93:i32 = load %92
                                                 store %i_11, %93
-                                                loop [b: %b47, c: %b48] {  # loop_12
-                                                  %b47 = block {  # body
+                                                loop [b: $B47, c: $B48] {  # loop_12
+                                                  $B47: {  # body
                                                     %94:i32 = load %i_11
                                                     %95:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
                                                     %96:i32 = load %95
                                                     %97:bool = lt %94, %96
-                                                    if %97 [t: %b49, f: %b50] {  # if_12
-                                                      %b49 = block {  # true
+                                                    if %97 [t: $B49, f: $B50] {  # if_12
+                                                      $B49: {  # true
                                                         exit_if  # if_12
                                                       }
-                                                      %b50 = block {  # false
+                                                      $B50: {  # false
                                                         exit_loop  # loop_12
                                                       }
                                                     }
                                                     %98:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
                                                     %99:i32 = load %98
                                                     store %i_12, %99
-                                                    loop [b: %b51, c: %b52] {  # loop_13
-                                                      %b51 = block {  # body
+                                                    loop [b: $B51, c: $B52] {  # loop_13
+                                                      $B51: {  # body
                                                         %100:i32 = load %i_12
                                                         %101:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
                                                         %102:i32 = load %101
                                                         %103:bool = lt %100, %102
-                                                        if %103 [t: %b53, f: %b54] {  # if_13
-                                                          %b53 = block {  # true
+                                                        if %103 [t: $B53, f: $B54] {  # if_13
+                                                          $B53: {  # true
                                                             exit_if  # if_13
                                                           }
-                                                          %b54 = block {  # false
+                                                          $B54: {  # false
                                                             exit_loop  # loop_13
                                                           }
                                                         }
                                                         %104:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
                                                         %105:i32 = load %104
                                                         store %i_13, %105
-                                                        loop [b: %b55, c: %b56] {  # loop_14
-                                                          %b55 = block {  # body
+                                                        loop [b: $B55, c: $B56] {  # loop_14
+                                                          $B55: {  # body
                                                             %106:i32 = load %i_13
                                                             %107:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
                                                             %108:i32 = load %107
                                                             %109:bool = lt %106, %108
-                                                            if %109 [t: %b57, f: %b58] {  # if_14
-                                                              %b57 = block {  # true
+                                                            if %109 [t: $B57, f: $B58] {  # if_14
+                                                              $B57: {  # true
                                                                 exit_if  # if_14
                                                               }
-                                                              %b58 = block {  # false
+                                                              $B58: {  # false
                                                                 exit_loop  # loop_14
                                                               }
                                                             }
                                                             %110:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
                                                             %111:i32 = load %110
                                                             store %i_14, %111
-                                                            loop [b: %b59, c: %b60] {  # loop_15
-                                                              %b59 = block {  # body
+                                                            loop [b: $B59, c: $B60] {  # loop_15
+                                                              $B59: {  # body
                                                                 %112:i32 = load %i_14
                                                                 %113:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
                                                                 %114:i32 = load %113
                                                                 %115:bool = lt %112, %114
-                                                                if %115 [t: %b61, f: %b62] {  # if_15
-                                                                  %b61 = block {  # true
+                                                                if %115 [t: $B61, f: $B62] {  # if_15
+                                                                  $B61: {  # true
                                                                     exit_if  # if_15
                                                                   }
-                                                                  %b62 = block {  # false
+                                                                  $B62: {  # false
                                                                     exit_loop  # loop_15
                                                                   }
                                                                 }
-                                                                loop [b: %b63, c: %b64] {  # loop_16
-                                                                  %b63 = block {  # body
+                                                                loop [b: $B63, c: $B64] {  # loop_16
+                                                                  $B63: {  # body
                                                                     %116:i32 = load %x_GLF_global_loop_count
                                                                     %117:i32 = add %116, 1i
                                                                     store %x_GLF_global_loop_count, %117
-                                                                    continue %b64
+                                                                    continue  # -> $B64
                                                                   }
-                                                                  %b64 = block {  # continuing
-                                                                    %x_225:i32 = load %x_GLF_global_loop_count
-                                                                    %119:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
-                                                                    %x_227:i32 = load %119
-                                                                    %121:i32 = sub 100i, %x_227
-                                                                    %122:bool = lt %x_225, %121
-                                                                    %123:bool = eq %122, false
-                                                                    break_if %123 %b63
+                                                                  $B64: {  # continuing
+                                                                    %118:i32 = load %x_GLF_global_loop_count
+                                                                    %x_225:i32 = let %118
+                                                                    %120:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
+                                                                    %121:i32 = load %120
+                                                                    %x_227:i32 = let %121
+                                                                    %123:i32 = sub 100i, %x_227
+                                                                    %124:bool = lt %x_225, %123
+                                                                    %125:bool = eq %124, false
+                                                                    break_if %125  # -> [t: exit_loop loop_16, f: $B63]
                                                                   }
                                                                 }
-                                                                %124:f32 = load %f
-                                                                %125:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-                                                                %126:f32 = load %125
-                                                                %127:f32 = add %124, %126
-                                                                store %f, %127
-                                                                continue %b60
+                                                                %126:f32 = load %f
+                                                                %127:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
+                                                                %128:f32 = load %127
+                                                                %129:f32 = add %126, %128
+                                                                store %f, %129
+                                                                continue  # -> $B60
                                                               }
-                                                              %b60 = block {  # continuing
-                                                                %128:i32 = load %i_14
-                                                                %129:i32 = add %128, 1i
-                                                                store %i_14, %129
-                                                                next_iteration %b59
+                                                              $B60: {  # continuing
+                                                                %130:i32 = load %i_14
+                                                                %131:i32 = add %130, 1i
+                                                                store %i_14, %131
+                                                                next_iteration  # -> $B59
                                                               }
                                                             }
-                                                            continue %b56
+                                                            continue  # -> $B56
                                                           }
-                                                          %b56 = block {  # continuing
-                                                            %130:i32 = load %i_13
-                                                            %131:i32 = add %130, 1i
-                                                            store %i_13, %131
-                                                            next_iteration %b55
+                                                          $B56: {  # continuing
+                                                            %132:i32 = load %i_13
+                                                            %133:i32 = add %132, 1i
+                                                            store %i_13, %133
+                                                            next_iteration  # -> $B55
                                                           }
                                                         }
-                                                        continue %b52
+                                                        continue  # -> $B52
                                                       }
-                                                      %b52 = block {  # continuing
-                                                        %132:i32 = load %i_12
-                                                        %133:i32 = add %132, 1i
-                                                        store %i_12, %133
-                                                        next_iteration %b51
+                                                      $B52: {  # continuing
+                                                        %134:i32 = load %i_12
+                                                        %135:i32 = add %134, 1i
+                                                        store %i_12, %135
+                                                        next_iteration  # -> $B51
                                                       }
                                                     }
-                                                    continue %b48
+                                                    continue  # -> $B48
                                                   }
-                                                  %b48 = block {  # continuing
-                                                    %134:i32 = load %i_11
-                                                    %135:i32 = add %134, 1i
-                                                    store %i_11, %135
-                                                    next_iteration %b47
+                                                  $B48: {  # continuing
+                                                    %136:i32 = load %i_11
+                                                    %137:i32 = add %136, 1i
+                                                    store %i_11, %137
+                                                    next_iteration  # -> $B47
                                                   }
                                                 }
-                                                continue %b44
+                                                continue  # -> $B44
                                               }
-                                              %b44 = block {  # continuing
-                                                %136:i32 = load %i_10
-                                                %137:i32 = add %136, 1i
-                                                store %i_10, %137
-                                                next_iteration %b43
+                                              $B44: {  # continuing
+                                                %138:i32 = load %i_10
+                                                %139:i32 = add %138, 1i
+                                                store %i_10, %139
+                                                next_iteration  # -> $B43
                                               }
                                             }
-                                            continue %b40
+                                            continue  # -> $B40
                                           }
-                                          %b40 = block {  # continuing
-                                            %138:i32 = load %i_9
-                                            %139:i32 = add %138, 1i
-                                            store %i_9, %139
-                                            next_iteration %b39
+                                          $B40: {  # continuing
+                                            %140:i32 = load %i_9
+                                            %141:i32 = add %140, 1i
+                                            store %i_9, %141
+                                            next_iteration  # -> $B39
                                           }
                                         }
-                                        continue %b36
+                                        continue  # -> $B36
                                       }
-                                      %b36 = block {  # continuing
-                                        %140:i32 = load %i_8
-                                        %141:i32 = add %140, 1i
-                                        store %i_8, %141
-                                        next_iteration %b35
+                                      $B36: {  # continuing
+                                        %142:i32 = load %i_8
+                                        %143:i32 = add %142, 1i
+                                        store %i_8, %143
+                                        next_iteration  # -> $B35
                                       }
                                     }
-                                    continue %b32
+                                    continue  # -> $B32
                                   }
-                                  %b32 = block {  # continuing
-                                    %142:i32 = load %i_7
-                                    %143:i32 = add %142, 1i
-                                    store %i_7, %143
-                                    next_iteration %b31
+                                  $B32: {  # continuing
+                                    %144:i32 = load %i_7
+                                    %145:i32 = add %144, 1i
+                                    store %i_7, %145
+                                    next_iteration  # -> $B31
                                   }
                                 }
-                                continue %b28
+                                continue  # -> $B28
                               }
-                              %b28 = block {  # continuing
-                                %144:i32 = load %i_6
-                                %145:i32 = add %144, 1i
-                                store %i_6, %145
-                                next_iteration %b27
+                              $B28: {  # continuing
+                                %146:i32 = load %i_6
+                                %147:i32 = add %146, 1i
+                                store %i_6, %147
+                                next_iteration  # -> $B27
                               }
                             }
-                            continue %b24
+                            continue  # -> $B24
                           }
-                          %b24 = block {  # continuing
-                            %146:i32 = load %i_5
-                            %147:i32 = add %146, 1i
-                            store %i_5, %147
-                            next_iteration %b23
+                          $B24: {  # continuing
+                            %148:i32 = load %i_5
+                            %149:i32 = add %148, 1i
+                            store %i_5, %149
+                            next_iteration  # -> $B23
                           }
                         }
-                        continue %b20
+                        continue  # -> $B20
                       }
-                      %b20 = block {  # continuing
-                        %148:i32 = load %i_4
-                        %149:i32 = add %148, 1i
-                        store %i_4, %149
-                        next_iteration %b19
+                      $B20: {  # continuing
+                        %150:i32 = load %i_4
+                        %151:i32 = add %150, 1i
+                        store %i_4, %151
+                        next_iteration  # -> $B19
                       }
                     }
-                    continue %b16
+                    continue  # -> $B16
                   }
-                  %b16 = block {  # continuing
-                    %150:i32 = load %i_3
-                    %151:i32 = add %150, 1i
-                    store %i_3, %151
-                    next_iteration %b15
+                  $B16: {  # continuing
+                    %152:i32 = load %i_3
+                    %153:i32 = add %152, 1i
+                    store %i_3, %153
+                    next_iteration  # -> $B15
                   }
                 }
-                continue %b12
+                continue  # -> $B12
               }
-              %b12 = block {  # continuing
-                %152:i32 = load %i_2
-                %153:i32 = add %152, 1i
-                store %i_2, %153
-                next_iteration %b11
+              $B12: {  # continuing
+                %154:i32 = load %i_2
+                %155:i32 = add %154, 1i
+                store %i_2, %155
+                next_iteration  # -> $B11
               }
             }
-            continue %b8
+            continue  # -> $B8
           }
-          %b8 = block {  # continuing
-            %154:i32 = load %i_1
-            %155:i32 = add %154, 1i
-            store %i_1, %155
-            next_iteration %b7
+          $B8: {  # continuing
+            %156:i32 = load %i_1
+            %157:i32 = add %156, 1i
+            store %i_1, %157
+            next_iteration  # -> $B7
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %156:i32 = load %i
-        %157:i32 = add %156, 1i
-        store %i, %157
-        next_iteration %b3
+      $B4: {  # continuing
+        %158:i32 = load %i
+        %159:i32 = add %158, 1i
+        store %i, %159
+        next_iteration  # -> $B3
       }
     }
-    %158:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
-    %159:f32 = load %158
-    store %sum, %159
-    %160:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-    %161:i32 = load %160
-    store %r, %161
-    loop [b: %b65, c: %b66] {  # loop_17
-      %b65 = block {  # body
-        %162:i32 = load %x_GLF_global_loop_count
-        %163:bool = lt %162, 100i
-        if %163 [t: %b67, f: %b68] {  # if_16
-          %b67 = block {  # true
+    %160:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
+    %161:f32 = load %160
+    store %sum, %161
+    %162:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+    %163:i32 = load %162
+    store %r, %163
+    loop [b: $B65, c: $B66] {  # loop_17
+      $B65: {  # body
+        %164:i32 = load %x_GLF_global_loop_count
+        %165:bool = lt %164, 100i
+        if %165 [t: $B67, f: $B68] {  # if_16
+          $B67: {  # true
             exit_if  # if_16
           }
-          %b68 = block {  # false
+          $B68: {  # false
             exit_loop  # loop_17
           }
         }
-        %164:i32 = load %x_GLF_global_loop_count
-        %165:i32 = add %164, 1i
-        store %x_GLF_global_loop_count, %165
-        %166:f32 = load %sum
-        %167:f32 = load %f
-        %168:f32 = add %166, %167
-        store %sum, %168
-        continue %b66
+        %166:i32 = load %x_GLF_global_loop_count
+        %167:i32 = add %166, 1i
+        store %x_GLF_global_loop_count, %167
+        %168:f32 = load %sum
+        %169:f32 = load %f
+        %170:f32 = add %168, %169
+        store %sum, %170
+        continue  # -> $B66
       }
-      %b66 = block {  # continuing
-        %169:i32 = load %r
-        %170:i32 = add %169, 1i
-        store %r, %170
-        next_iteration %b65
+      $B66: {  # continuing
+        %171:i32 = load %r
+        %172:i32 = add %171, 1i
+        store %r, %172
+        next_iteration  # -> $B65
       }
     }
-    %171:f32 = load %sum
-    %172:ptr<uniform, f32, read> = access %x_7, 0u, 2i, 0u
-    %173:f32 = load %172
-    %174:bool = eq %171, %173
-    if %174 [t: %b69, f: %b70] {  # if_17
-      %b69 = block {  # true
-        %175:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %176:i32 = load %175
-        %177:f32 = convert %176
-        %178:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %179:i32 = load %178
-        %180:f32 = convert %179
+    %173:f32 = load %sum
+    %174:ptr<uniform, f32, read> = access %x_7, 0u, 2i, 0u
+    %175:f32 = load %174
+    %176:bool = eq %173, %175
+    if %176 [t: $B69, f: $B70] {  # if_17
+      $B69: {  # true
+        %177:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %178:i32 = load %177
+        %179:f32 = convert %178
+        %180:f32 = let %179
         %181:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
         %182:i32 = load %181
         %183:f32 = convert %182
-        %184:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %185:i32 = load %184
-        %186:f32 = convert %185
-        %187:vec4<f32> = construct %177, %180, %183, %186
-        store %x_GLF_color, %187
+        %184:f32 = let %183
+        %185:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %186:i32 = load %185
+        %187:f32 = convert %186
+        %188:f32 = let %187
+        %189:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %190:i32 = load %189
+        %191:f32 = convert %190
+        %192:vec4<f32> = construct %180, %184, %188, %191
+        store %x_GLF_color, %192
         exit_if  # if_17
       }
-      %b70 = block {  # false
-        %188:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %189:i32 = load %188
-        %190:f32 = convert %189
-        %191:vec4<f32> = construct %190
-        store %x_GLF_color, %191
+      $B70: {  # false
+        %193:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %194:i32 = load %193
+        %195:f32 = convert %194
+        %196:vec4<f32> = construct %195
+        store %x_GLF_color, %196
         exit_if  # if_17
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b71 {
-  %b71 = block {
-    %193:void = call %main_1
-    %194:vec4<f32> = load %x_GLF_color
-    %195:main_out = construct %194
-    ret %195
+%tint_symbol = @fragment func():main_out {
+  $B71: {
+    %198:void = call %main_1
+    %199:vec4<f32> = load %x_GLF_color
+    %200:main_out = construct %199
+    ret %200
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-nested-loops-global-loop-counter-do-while-accumulate-float/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-nested-loops-global-loop-counter-do-while-accumulate-float/0-opt.wgsl.expected.ir.msl
index a1ad8af..caaf9ec 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-nested-loops-global-loop-counter-do-while-accumulate-float/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-nested-loops-global-loop-counter-do-while-accumulate-float/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,15 +20,15 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_global_loop_count:ptr<private, i32, read_write> = var
   %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_10:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %f:ptr<function, f32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
@@ -49,494 +49,578 @@
     %r:ptr<function, i32, read_write> = var
     store %x_GLF_global_loop_count, 0i
     %24:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
-    %x_53:f32 = load %24
+    %25:f32 = load %24
+    %x_53:f32 = let %25
     store %f, %x_53
-    %26:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-    %x_55:i32 = load %26
+    %27:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+    %28:i32 = load %27
+    %x_55:i32 = let %28
     store %i, %x_55
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_60:i32 = load %i
-        %29:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %x_62:i32 = load %29
-        %31:bool = lt %x_60, %x_62
-        if %31 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %30:i32 = load %i
+        %x_60:i32 = let %30
+        %32:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %33:i32 = load %32
+        %x_62:i32 = let %33
+        %35:bool = lt %x_60, %x_62
+        if %35 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %32:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %x_66:i32 = load %32
+        %36:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %37:i32 = load %36
+        %x_66:i32 = let %37
         store %i_1, %x_66
-        loop [b: %b7, c: %b8] {  # loop_2
-          %b7 = block {  # body
-            %x_71:i32 = load %i_1
-            %35:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-            %x_73:i32 = load %35
-            %37:bool = lt %x_71, %x_73
-            if %37 [t: %b9, f: %b10] {  # if_2
-              %b9 = block {  # true
+        loop [b: $B7, c: $B8] {  # loop_2
+          $B7: {  # body
+            %39:i32 = load %i_1
+            %x_71:i32 = let %39
+            %41:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+            %42:i32 = load %41
+            %x_73:i32 = let %42
+            %44:bool = lt %x_71, %x_73
+            if %44 [t: $B9, f: $B10] {  # if_2
+              $B9: {  # true
                 exit_if  # if_2
               }
-              %b10 = block {  # false
+              $B10: {  # false
                 exit_loop  # loop_2
               }
             }
-            %38:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-            %x_77:i32 = load %38
+            %45:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+            %46:i32 = load %45
+            %x_77:i32 = let %46
             store %i_2, %x_77
-            loop [b: %b11, c: %b12] {  # loop_3
-              %b11 = block {  # body
-                %x_82:i32 = load %i_2
-                %41:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-                %x_84:i32 = load %41
-                %43:bool = lt %x_82, %x_84
-                if %43 [t: %b13, f: %b14] {  # if_3
-                  %b13 = block {  # true
+            loop [b: $B11, c: $B12] {  # loop_3
+              $B11: {  # body
+                %48:i32 = load %i_2
+                %x_82:i32 = let %48
+                %50:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+                %51:i32 = load %50
+                %x_84:i32 = let %51
+                %53:bool = lt %x_82, %x_84
+                if %53 [t: $B13, f: $B14] {  # if_3
+                  $B13: {  # true
                     exit_if  # if_3
                   }
-                  %b14 = block {  # false
+                  $B14: {  # false
                     exit_loop  # loop_3
                   }
                 }
-                %44:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-                %x_88:i32 = load %44
+                %54:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+                %55:i32 = load %54
+                %x_88:i32 = let %55
                 store %i_3, %x_88
-                loop [b: %b15, c: %b16] {  # loop_4
-                  %b15 = block {  # body
-                    %x_93:i32 = load %i_3
-                    %47:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-                    %x_95:i32 = load %47
-                    %49:bool = lt %x_93, %x_95
-                    if %49 [t: %b17, f: %b18] {  # if_4
-                      %b17 = block {  # true
+                loop [b: $B15, c: $B16] {  # loop_4
+                  $B15: {  # body
+                    %57:i32 = load %i_3
+                    %x_93:i32 = let %57
+                    %59:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+                    %60:i32 = load %59
+                    %x_95:i32 = let %60
+                    %62:bool = lt %x_93, %x_95
+                    if %62 [t: $B17, f: $B18] {  # if_4
+                      $B17: {  # true
                         exit_if  # if_4
                       }
-                      %b18 = block {  # false
+                      $B18: {  # false
                         exit_loop  # loop_4
                       }
                     }
-                    %50:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-                    %x_99:i32 = load %50
+                    %63:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+                    %64:i32 = load %63
+                    %x_99:i32 = let %64
                     store %i_4, %x_99
-                    loop [b: %b19, c: %b20] {  # loop_5
-                      %b19 = block {  # body
-                        %x_104:i32 = load %i_4
-                        %53:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-                        %x_106:i32 = load %53
-                        %55:bool = lt %x_104, %x_106
-                        if %55 [t: %b21, f: %b22] {  # if_5
-                          %b21 = block {  # true
+                    loop [b: $B19, c: $B20] {  # loop_5
+                      $B19: {  # body
+                        %66:i32 = load %i_4
+                        %x_104:i32 = let %66
+                        %68:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+                        %69:i32 = load %68
+                        %x_106:i32 = let %69
+                        %71:bool = lt %x_104, %x_106
+                        if %71 [t: $B21, f: $B22] {  # if_5
+                          $B21: {  # true
                             exit_if  # if_5
                           }
-                          %b22 = block {  # false
+                          $B22: {  # false
                             exit_loop  # loop_5
                           }
                         }
-                        %56:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-                        %x_110:i32 = load %56
+                        %72:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+                        %73:i32 = load %72
+                        %x_110:i32 = let %73
                         store %i_5, %x_110
-                        loop [b: %b23, c: %b24] {  # loop_6
-                          %b23 = block {  # body
-                            %x_115:i32 = load %i_5
-                            %59:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-                            %x_117:i32 = load %59
-                            %61:bool = lt %x_115, %x_117
-                            if %61 [t: %b25, f: %b26] {  # if_6
-                              %b25 = block {  # true
+                        loop [b: $B23, c: $B24] {  # loop_6
+                          $B23: {  # body
+                            %75:i32 = load %i_5
+                            %x_115:i32 = let %75
+                            %77:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+                            %78:i32 = load %77
+                            %x_117:i32 = let %78
+                            %80:bool = lt %x_115, %x_117
+                            if %80 [t: $B25, f: $B26] {  # if_6
+                              $B25: {  # true
                                 exit_if  # if_6
                               }
-                              %b26 = block {  # false
+                              $B26: {  # false
                                 exit_loop  # loop_6
                               }
                             }
-                            %62:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-                            %x_121:i32 = load %62
+                            %81:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+                            %82:i32 = load %81
+                            %x_121:i32 = let %82
                             store %i_6, %x_121
-                            loop [b: %b27, c: %b28] {  # loop_7
-                              %b27 = block {  # body
-                                %x_126:i32 = load %i_6
-                                %65:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-                                %x_128:i32 = load %65
-                                %67:bool = lt %x_126, %x_128
-                                if %67 [t: %b29, f: %b30] {  # if_7
-                                  %b29 = block {  # true
+                            loop [b: $B27, c: $B28] {  # loop_7
+                              $B27: {  # body
+                                %84:i32 = load %i_6
+                                %x_126:i32 = let %84
+                                %86:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+                                %87:i32 = load %86
+                                %x_128:i32 = let %87
+                                %89:bool = lt %x_126, %x_128
+                                if %89 [t: $B29, f: $B30] {  # if_7
+                                  $B29: {  # true
                                     exit_if  # if_7
                                   }
-                                  %b30 = block {  # false
+                                  $B30: {  # false
                                     exit_loop  # loop_7
                                   }
                                 }
-                                %68:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-                                %x_132:i32 = load %68
+                                %90:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+                                %91:i32 = load %90
+                                %x_132:i32 = let %91
                                 store %i_7, %x_132
-                                loop [b: %b31, c: %b32] {  # loop_8
-                                  %b31 = block {  # body
-                                    %x_137:i32 = load %i_7
-                                    %71:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-                                    %x_139:i32 = load %71
-                                    %73:bool = lt %x_137, %x_139
-                                    if %73 [t: %b33, f: %b34] {  # if_8
-                                      %b33 = block {  # true
+                                loop [b: $B31, c: $B32] {  # loop_8
+                                  $B31: {  # body
+                                    %93:i32 = load %i_7
+                                    %x_137:i32 = let %93
+                                    %95:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+                                    %96:i32 = load %95
+                                    %x_139:i32 = let %96
+                                    %98:bool = lt %x_137, %x_139
+                                    if %98 [t: $B33, f: $B34] {  # if_8
+                                      $B33: {  # true
                                         exit_if  # if_8
                                       }
-                                      %b34 = block {  # false
+                                      $B34: {  # false
                                         exit_loop  # loop_8
                                       }
                                     }
-                                    %74:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-                                    %x_143:i32 = load %74
+                                    %99:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+                                    %100:i32 = load %99
+                                    %x_143:i32 = let %100
                                     store %i_8, %x_143
-                                    loop [b: %b35, c: %b36] {  # loop_9
-                                      %b35 = block {  # body
-                                        %x_148:i32 = load %i_8
-                                        %77:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-                                        %x_150:i32 = load %77
-                                        %79:bool = lt %x_148, %x_150
-                                        if %79 [t: %b37, f: %b38] {  # if_9
-                                          %b37 = block {  # true
+                                    loop [b: $B35, c: $B36] {  # loop_9
+                                      $B35: {  # body
+                                        %102:i32 = load %i_8
+                                        %x_148:i32 = let %102
+                                        %104:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+                                        %105:i32 = load %104
+                                        %x_150:i32 = let %105
+                                        %107:bool = lt %x_148, %x_150
+                                        if %107 [t: $B37, f: $B38] {  # if_9
+                                          $B37: {  # true
                                             exit_if  # if_9
                                           }
-                                          %b38 = block {  # false
+                                          $B38: {  # false
                                             exit_loop  # loop_9
                                           }
                                         }
-                                        %80:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-                                        %x_154:i32 = load %80
+                                        %108:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+                                        %109:i32 = load %108
+                                        %x_154:i32 = let %109
                                         store %i_9, %x_154
-                                        loop [b: %b39, c: %b40] {  # loop_10
-                                          %b39 = block {  # body
-                                            %x_159:i32 = load %i_9
-                                            %83:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-                                            %x_161:i32 = load %83
-                                            %85:bool = lt %x_159, %x_161
-                                            if %85 [t: %b41, f: %b42] {  # if_10
-                                              %b41 = block {  # true
+                                        loop [b: $B39, c: $B40] {  # loop_10
+                                          $B39: {  # body
+                                            %111:i32 = load %i_9
+                                            %x_159:i32 = let %111
+                                            %113:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+                                            %114:i32 = load %113
+                                            %x_161:i32 = let %114
+                                            %116:bool = lt %x_159, %x_161
+                                            if %116 [t: $B41, f: $B42] {  # if_10
+                                              $B41: {  # true
                                                 exit_if  # if_10
                                               }
-                                              %b42 = block {  # false
+                                              $B42: {  # false
                                                 exit_loop  # loop_10
                                               }
                                             }
-                                            %86:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-                                            %x_165:i32 = load %86
+                                            %117:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+                                            %118:i32 = load %117
+                                            %x_165:i32 = let %118
                                             store %i_10, %x_165
-                                            loop [b: %b43, c: %b44] {  # loop_11
-                                              %b43 = block {  # body
-                                                %x_170:i32 = load %i_10
-                                                %89:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-                                                %x_172:i32 = load %89
-                                                %91:bool = lt %x_170, %x_172
-                                                if %91 [t: %b45, f: %b46] {  # if_11
-                                                  %b45 = block {  # true
+                                            loop [b: $B43, c: $B44] {  # loop_11
+                                              $B43: {  # body
+                                                %120:i32 = load %i_10
+                                                %x_170:i32 = let %120
+                                                %122:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+                                                %123:i32 = load %122
+                                                %x_172:i32 = let %123
+                                                %125:bool = lt %x_170, %x_172
+                                                if %125 [t: $B45, f: $B46] {  # if_11
+                                                  $B45: {  # true
                                                     exit_if  # if_11
                                                   }
-                                                  %b46 = block {  # false
+                                                  $B46: {  # false
                                                     exit_loop  # loop_11
                                                   }
                                                 }
-                                                %92:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-                                                %x_176:i32 = load %92
+                                                %126:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+                                                %127:i32 = load %126
+                                                %x_176:i32 = let %127
                                                 store %i_11, %x_176
-                                                loop [b: %b47, c: %b48] {  # loop_12
-                                                  %b47 = block {  # body
-                                                    %x_181:i32 = load %i_11
-                                                    %95:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-                                                    %x_183:i32 = load %95
-                                                    %97:bool = lt %x_181, %x_183
-                                                    if %97 [t: %b49, f: %b50] {  # if_12
-                                                      %b49 = block {  # true
+                                                loop [b: $B47, c: $B48] {  # loop_12
+                                                  $B47: {  # body
+                                                    %129:i32 = load %i_11
+                                                    %x_181:i32 = let %129
+                                                    %131:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+                                                    %132:i32 = load %131
+                                                    %x_183:i32 = let %132
+                                                    %134:bool = lt %x_181, %x_183
+                                                    if %134 [t: $B49, f: $B50] {  # if_12
+                                                      $B49: {  # true
                                                         exit_if  # if_12
                                                       }
-                                                      %b50 = block {  # false
+                                                      $B50: {  # false
                                                         exit_loop  # loop_12
                                                       }
                                                     }
-                                                    %98:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-                                                    %x_187:i32 = load %98
+                                                    %135:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+                                                    %136:i32 = load %135
+                                                    %x_187:i32 = let %136
                                                     store %i_12, %x_187
-                                                    loop [b: %b51, c: %b52] {  # loop_13
-                                                      %b51 = block {  # body
-                                                        %x_192:i32 = load %i_12
-                                                        %101:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-                                                        %x_194:i32 = load %101
-                                                        %103:bool = lt %x_192, %x_194
-                                                        if %103 [t: %b53, f: %b54] {  # if_13
-                                                          %b53 = block {  # true
+                                                    loop [b: $B51, c: $B52] {  # loop_13
+                                                      $B51: {  # body
+                                                        %138:i32 = load %i_12
+                                                        %x_192:i32 = let %138
+                                                        %140:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+                                                        %141:i32 = load %140
+                                                        %x_194:i32 = let %141
+                                                        %143:bool = lt %x_192, %x_194
+                                                        if %143 [t: $B53, f: $B54] {  # if_13
+                                                          $B53: {  # true
                                                             exit_if  # if_13
                                                           }
-                                                          %b54 = block {  # false
+                                                          $B54: {  # false
                                                             exit_loop  # loop_13
                                                           }
                                                         }
-                                                        %104:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-                                                        %x_198:i32 = load %104
+                                                        %144:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+                                                        %145:i32 = load %144
+                                                        %x_198:i32 = let %145
                                                         store %i_13, %x_198
-                                                        loop [b: %b55, c: %b56] {  # loop_14
-                                                          %b55 = block {  # body
-                                                            %x_203:i32 = load %i_13
-                                                            %107:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-                                                            %x_205:i32 = load %107
-                                                            %109:bool = lt %x_203, %x_205
-                                                            if %109 [t: %b57, f: %b58] {  # if_14
-                                                              %b57 = block {  # true
+                                                        loop [b: $B55, c: $B56] {  # loop_14
+                                                          $B55: {  # body
+                                                            %147:i32 = load %i_13
+                                                            %x_203:i32 = let %147
+                                                            %149:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+                                                            %150:i32 = load %149
+                                                            %x_205:i32 = let %150
+                                                            %152:bool = lt %x_203, %x_205
+                                                            if %152 [t: $B57, f: $B58] {  # if_14
+                                                              $B57: {  # true
                                                                 exit_if  # if_14
                                                               }
-                                                              %b58 = block {  # false
+                                                              $B58: {  # false
                                                                 exit_loop  # loop_14
                                                               }
                                                             }
-                                                            %110:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-                                                            %x_209:i32 = load %110
+                                                            %153:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+                                                            %154:i32 = load %153
+                                                            %x_209:i32 = let %154
                                                             store %i_14, %x_209
-                                                            loop [b: %b59, c: %b60] {  # loop_15
-                                                              %b59 = block {  # body
-                                                                %x_214:i32 = load %i_14
-                                                                %113:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-                                                                %x_216:i32 = load %113
-                                                                %115:bool = lt %x_214, %x_216
-                                                                if %115 [t: %b61, f: %b62] {  # if_15
-                                                                  %b61 = block {  # true
+                                                            loop [b: $B59, c: $B60] {  # loop_15
+                                                              $B59: {  # body
+                                                                %156:i32 = load %i_14
+                                                                %x_214:i32 = let %156
+                                                                %158:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+                                                                %159:i32 = load %158
+                                                                %x_216:i32 = let %159
+                                                                %161:bool = lt %x_214, %x_216
+                                                                if %161 [t: $B61, f: $B62] {  # if_15
+                                                                  $B61: {  # true
                                                                     exit_if  # if_15
                                                                   }
-                                                                  %b62 = block {  # false
+                                                                  $B62: {  # false
                                                                     exit_loop  # loop_15
                                                                   }
                                                                 }
-                                                                loop [b: %b63, c: %b64] {  # loop_16
-                                                                  %b63 = block {  # body
-                                                                    %x_223:i32 = load %x_GLF_global_loop_count
-                                                                    %117:i32 = add %x_223, 1i
-                                                                    store %x_GLF_global_loop_count, %117
-                                                                    continue %b64
+                                                                loop [b: $B63, c: $B64] {  # loop_16
+                                                                  $B63: {  # body
+                                                                    %162:i32 = load %x_GLF_global_loop_count
+                                                                    %x_223:i32 = let %162
+                                                                    %164:i32 = add %x_223, 1i
+                                                                    store %x_GLF_global_loop_count, %164
+                                                                    continue  # -> $B64
                                                                   }
-                                                                  %b64 = block {  # continuing
-                                                                    %x_225:i32 = load %x_GLF_global_loop_count
-                                                                    %119:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
-                                                                    %x_227:i32 = load %119
-                                                                    %121:i32 = sub 100i, %x_227
-                                                                    %122:bool = lt %x_225, %121
-                                                                    %123:bool = eq %122, false
-                                                                    break_if %123 %b63
+                                                                  $B64: {  # continuing
+                                                                    %165:i32 = load %x_GLF_global_loop_count
+                                                                    %x_225:i32 = let %165
+                                                                    %167:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
+                                                                    %168:i32 = load %167
+                                                                    %x_227:i32 = let %168
+                                                                    %170:i32 = sub 100i, %x_227
+                                                                    %171:bool = lt %x_225, %170
+                                                                    %172:bool = eq %171, false
+                                                                    break_if %172  # -> [t: exit_loop loop_16, f: $B63]
                                                                   }
                                                                 }
-                                                                %124:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-                                                                %x_231:f32 = load %124
-                                                                %x_232:f32 = load %f
-                                                                %127:f32 = add %x_232, %x_231
-                                                                store %f, %127
-                                                                continue %b60
+                                                                %173:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
+                                                                %174:f32 = load %173
+                                                                %x_231:f32 = let %174
+                                                                %176:f32 = load %f
+                                                                %x_232:f32 = let %176
+                                                                %178:f32 = add %x_232, %x_231
+                                                                store %f, %178
+                                                                continue  # -> $B60
                                                               }
-                                                              %b60 = block {  # continuing
-                                                                %x_234:i32 = load %i_14
-                                                                %129:i32 = add %x_234, 1i
-                                                                store %i_14, %129
-                                                                next_iteration %b59
+                                                              $B60: {  # continuing
+                                                                %179:i32 = load %i_14
+                                                                %x_234:i32 = let %179
+                                                                %181:i32 = add %x_234, 1i
+                                                                store %i_14, %181
+                                                                next_iteration  # -> $B59
                                                               }
                                                             }
-                                                            continue %b56
+                                                            continue  # -> $B56
                                                           }
-                                                          %b56 = block {  # continuing
-                                                            %x_236:i32 = load %i_13
-                                                            %131:i32 = add %x_236, 1i
-                                                            store %i_13, %131
-                                                            next_iteration %b55
+                                                          $B56: {  # continuing
+                                                            %182:i32 = load %i_13
+                                                            %x_236:i32 = let %182
+                                                            %184:i32 = add %x_236, 1i
+                                                            store %i_13, %184
+                                                            next_iteration  # -> $B55
                                                           }
                                                         }
-                                                        continue %b52
+                                                        continue  # -> $B52
                                                       }
-                                                      %b52 = block {  # continuing
-                                                        %x_238:i32 = load %i_12
-                                                        %133:i32 = add %x_238, 1i
-                                                        store %i_12, %133
-                                                        next_iteration %b51
+                                                      $B52: {  # continuing
+                                                        %185:i32 = load %i_12
+                                                        %x_238:i32 = let %185
+                                                        %187:i32 = add %x_238, 1i
+                                                        store %i_12, %187
+                                                        next_iteration  # -> $B51
                                                       }
                                                     }
-                                                    continue %b48
+                                                    continue  # -> $B48
                                                   }
-                                                  %b48 = block {  # continuing
-                                                    %x_240:i32 = load %i_11
-                                                    %135:i32 = add %x_240, 1i
-                                                    store %i_11, %135
-                                                    next_iteration %b47
+                                                  $B48: {  # continuing
+                                                    %188:i32 = load %i_11
+                                                    %x_240:i32 = let %188
+                                                    %190:i32 = add %x_240, 1i
+                                                    store %i_11, %190
+                                                    next_iteration  # -> $B47
                                                   }
                                                 }
-                                                continue %b44
+                                                continue  # -> $B44
                                               }
-                                              %b44 = block {  # continuing
-                                                %x_242:i32 = load %i_10
-                                                %137:i32 = add %x_242, 1i
-                                                store %i_10, %137
-                                                next_iteration %b43
+                                              $B44: {  # continuing
+                                                %191:i32 = load %i_10
+                                                %x_242:i32 = let %191
+                                                %193:i32 = add %x_242, 1i
+                                                store %i_10, %193
+                                                next_iteration  # -> $B43
                                               }
                                             }
-                                            continue %b40
+                                            continue  # -> $B40
                                           }
-                                          %b40 = block {  # continuing
-                                            %x_244:i32 = load %i_9
-                                            %139:i32 = add %x_244, 1i
-                                            store %i_9, %139
-                                            next_iteration %b39
+                                          $B40: {  # continuing
+                                            %194:i32 = load %i_9
+                                            %x_244:i32 = let %194
+                                            %196:i32 = add %x_244, 1i
+                                            store %i_9, %196
+                                            next_iteration  # -> $B39
                                           }
                                         }
-                                        continue %b36
+                                        continue  # -> $B36
                                       }
-                                      %b36 = block {  # continuing
-                                        %x_246:i32 = load %i_8
-                                        %141:i32 = add %x_246, 1i
-                                        store %i_8, %141
-                                        next_iteration %b35
+                                      $B36: {  # continuing
+                                        %197:i32 = load %i_8
+                                        %x_246:i32 = let %197
+                                        %199:i32 = add %x_246, 1i
+                                        store %i_8, %199
+                                        next_iteration  # -> $B35
                                       }
                                     }
-                                    continue %b32
+                                    continue  # -> $B32
                                   }
-                                  %b32 = block {  # continuing
-                                    %x_248:i32 = load %i_7
-                                    %143:i32 = add %x_248, 1i
-                                    store %i_7, %143
-                                    next_iteration %b31
+                                  $B32: {  # continuing
+                                    %200:i32 = load %i_7
+                                    %x_248:i32 = let %200
+                                    %202:i32 = add %x_248, 1i
+                                    store %i_7, %202
+                                    next_iteration  # -> $B31
                                   }
                                 }
-                                continue %b28
+                                continue  # -> $B28
                               }
-                              %b28 = block {  # continuing
-                                %x_250:i32 = load %i_6
-                                %145:i32 = add %x_250, 1i
-                                store %i_6, %145
-                                next_iteration %b27
+                              $B28: {  # continuing
+                                %203:i32 = load %i_6
+                                %x_250:i32 = let %203
+                                %205:i32 = add %x_250, 1i
+                                store %i_6, %205
+                                next_iteration  # -> $B27
                               }
                             }
-                            continue %b24
+                            continue  # -> $B24
                           }
-                          %b24 = block {  # continuing
-                            %x_252:i32 = load %i_5
-                            %147:i32 = add %x_252, 1i
-                            store %i_5, %147
-                            next_iteration %b23
+                          $B24: {  # continuing
+                            %206:i32 = load %i_5
+                            %x_252:i32 = let %206
+                            %208:i32 = add %x_252, 1i
+                            store %i_5, %208
+                            next_iteration  # -> $B23
                           }
                         }
-                        continue %b20
+                        continue  # -> $B20
                       }
-                      %b20 = block {  # continuing
-                        %x_254:i32 = load %i_4
-                        %149:i32 = add %x_254, 1i
-                        store %i_4, %149
-                        next_iteration %b19
+                      $B20: {  # continuing
+                        %209:i32 = load %i_4
+                        %x_254:i32 = let %209
+                        %211:i32 = add %x_254, 1i
+                        store %i_4, %211
+                        next_iteration  # -> $B19
                       }
                     }
-                    continue %b16
+                    continue  # -> $B16
                   }
-                  %b16 = block {  # continuing
-                    %x_256:i32 = load %i_3
-                    %151:i32 = add %x_256, 1i
-                    store %i_3, %151
-                    next_iteration %b15
+                  $B16: {  # continuing
+                    %212:i32 = load %i_3
+                    %x_256:i32 = let %212
+                    %214:i32 = add %x_256, 1i
+                    store %i_3, %214
+                    next_iteration  # -> $B15
                   }
                 }
-                continue %b12
+                continue  # -> $B12
               }
-              %b12 = block {  # continuing
-                %x_258:i32 = load %i_2
-                %153:i32 = add %x_258, 1i
-                store %i_2, %153
-                next_iteration %b11
+              $B12: {  # continuing
+                %215:i32 = load %i_2
+                %x_258:i32 = let %215
+                %217:i32 = add %x_258, 1i
+                store %i_2, %217
+                next_iteration  # -> $B11
               }
             }
-            continue %b8
+            continue  # -> $B8
           }
-          %b8 = block {  # continuing
-            %x_260:i32 = load %i_1
-            %155:i32 = add %x_260, 1i
-            store %i_1, %155
-            next_iteration %b7
+          $B8: {  # continuing
+            %218:i32 = load %i_1
+            %x_260:i32 = let %218
+            %220:i32 = add %x_260, 1i
+            store %i_1, %220
+            next_iteration  # -> $B7
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_262:i32 = load %i
-        %157:i32 = add %x_262, 1i
-        store %i, %157
-        next_iteration %b3
+      $B4: {  # continuing
+        %221:i32 = load %i
+        %x_262:i32 = let %221
+        %223:i32 = add %x_262, 1i
+        store %i, %223
+        next_iteration  # -> $B3
       }
     }
-    %158:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
-    %x_265:f32 = load %158
+    %224:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
+    %225:f32 = load %224
+    %x_265:f32 = let %225
     store %sum, %x_265
-    %160:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-    %x_267:i32 = load %160
+    %227:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+    %228:i32 = load %227
+    %x_267:i32 = let %228
     store %r, %x_267
-    loop [b: %b65, c: %b66] {  # loop_17
-      %b65 = block {  # body
-        %x_272:i32 = load %x_GLF_global_loop_count
-        %163:bool = lt %x_272, 100i
-        if %163 [t: %b67, f: %b68] {  # if_16
-          %b67 = block {  # true
+    loop [b: $B65, c: $B66] {  # loop_17
+      $B65: {  # body
+        %230:i32 = load %x_GLF_global_loop_count
+        %x_272:i32 = let %230
+        %232:bool = lt %x_272, 100i
+        if %232 [t: $B67, f: $B68] {  # if_16
+          $B67: {  # true
             exit_if  # if_16
           }
-          %b68 = block {  # false
+          $B68: {  # false
             exit_loop  # loop_17
           }
         }
-        %x_275:i32 = load %x_GLF_global_loop_count
-        %165:i32 = add %x_275, 1i
-        store %x_GLF_global_loop_count, %165
-        %x_277:f32 = load %f
-        %x_278:f32 = load %sum
-        %168:f32 = add %x_278, %x_277
-        store %sum, %168
-        continue %b66
+        %233:i32 = load %x_GLF_global_loop_count
+        %x_275:i32 = let %233
+        %235:i32 = add %x_275, 1i
+        store %x_GLF_global_loop_count, %235
+        %236:f32 = load %f
+        %x_277:f32 = let %236
+        %238:f32 = load %sum
+        %x_278:f32 = let %238
+        %240:f32 = add %x_278, %x_277
+        store %sum, %240
+        continue  # -> $B66
       }
-      %b66 = block {  # continuing
-        %x_280:i32 = load %r
-        %170:i32 = add %x_280, 1i
-        store %r, %170
-        next_iteration %b65
+      $B66: {  # continuing
+        %241:i32 = load %r
+        %x_280:i32 = let %241
+        %243:i32 = add %x_280, 1i
+        store %r, %243
+        next_iteration  # -> $B65
       }
     }
-    %x_282:f32 = load %sum
-    %172:ptr<uniform, f32, read> = access %x_7, 0u, 2i, 0u
-    %x_284:f32 = load %172
-    %174:bool = eq %x_282, %x_284
-    if %174 [t: %b69, f: %b70] {  # if_17
-      %b69 = block {  # true
-        %175:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %x_290:i32 = load %175
-        %177:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %x_293:i32 = load %177
-        %179:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %x_296:i32 = load %179
-        %181:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %x_299:i32 = load %181
-        %183:f32 = convert %x_290
-        %184:f32 = convert %x_293
-        %185:f32 = convert %x_296
-        %186:f32 = convert %x_299
-        %187:vec4<f32> = construct %183, %184, %185, %186
-        store %x_GLF_color, %187
+    %244:f32 = load %sum
+    %x_282:f32 = let %244
+    %246:ptr<uniform, f32, read> = access %x_7, 0u, 2i, 0u
+    %247:f32 = load %246
+    %x_284:f32 = let %247
+    %249:bool = eq %x_282, %x_284
+    if %249 [t: $B69, f: $B70] {  # if_17
+      $B69: {  # true
+        %250:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %251:i32 = load %250
+        %x_290:i32 = let %251
+        %253:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %254:i32 = load %253
+        %x_293:i32 = let %254
+        %256:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %257:i32 = load %256
+        %x_296:i32 = let %257
+        %259:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %260:i32 = load %259
+        %x_299:i32 = let %260
+        %262:f32 = convert %x_290
+        %263:f32 = let %262
+        %264:f32 = convert %x_293
+        %265:f32 = let %264
+        %266:f32 = convert %x_296
+        %267:f32 = let %266
+        %268:f32 = convert %x_299
+        %269:vec4<f32> = construct %263, %265, %267, %268
+        store %x_GLF_color, %269
         exit_if  # if_17
       }
-      %b70 = block {  # false
-        %188:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %x_303:i32 = load %188
-        %x_304:f32 = convert %x_303
-        %191:vec4<f32> = construct %x_304, %x_304, %x_304, %x_304
-        store %x_GLF_color, %191
+      $B70: {  # false
+        %270:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %271:i32 = load %270
+        %x_303:i32 = let %271
+        %273:f32 = convert %x_303
+        %x_304:f32 = let %273
+        %275:vec4<f32> = construct %x_304, %x_304, %x_304, %x_304
+        store %x_GLF_color, %275
         exit_if  # if_17
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b71 {
-  %b71 = block {
-    %193:void = call %main_1
-    %194:vec4<f32> = load %x_GLF_color
-    %195:main_out = construct %194
-    ret %195
+%tint_symbol = @fragment func():main_out {
+  $B71: {
+    %277:void = call %main_1
+    %278:vec4<f32> = load %x_GLF_color
+    %279:main_out = construct %278
+    ret %279
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-nir-array-access/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-nir-array-access/0-opt.spvasm.expected.ir.msl
index 057e8c1..a895d11 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-nir-array-access/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-nir-array-access/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,13 +12,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %A:ptr<function, array<i32, 17>, read_write> = var
     %r:ptr<function, array<i32, 17>, read_write> = var
     %a:ptr<function, i32, read_write> = var
@@ -103,122 +103,131 @@
     %82:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
     %83:i32 = load %82
     store %i, %83
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %84:i32 = load %i
         %85:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
         %86:i32 = load %85
         %87:bool = lt %84, %86
-        if %87 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %87 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_134:i32 = load %i
-        %x_135:i32 = load %a
+        %88:i32 = load %i
+        %x_134:i32 = let %88
         %90:i32 = load %a
-        %91:i32 = sub %90, 1i
-        store %a, %91
-        %92:ptr<function, i32, read_write> = access %A, %x_134
-        store %92, %x_135
-        %x_138:i32 = load %i
-        %94:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %x_140:i32 = load %94
-        %96:ptr<uniform, i32, read> = access %x_6, 0u, 18i, 0u
-        %x_142:i32 = load %96
-        %98:i32 = clamp %x_138, %x_140, %x_142
-        %99:ptr<function, i32, read_write> = access %A, %98
-        %100:i32 = load %i
-        %101:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-        %102:i32 = load %101
-        %103:i32 = add %100, %102
-        store %99, %103
-        continue %b4
+        %x_135:i32 = let %90
+        %92:i32 = load %a
+        %93:i32 = sub %92, 1i
+        store %a, %93
+        %94:ptr<function, i32, read_write> = access %A, %x_134
+        store %94, %x_135
+        %95:i32 = load %i
+        %x_138:i32 = let %95
+        %97:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %98:i32 = load %97
+        %x_140:i32 = let %98
+        %100:ptr<uniform, i32, read> = access %x_6, 0u, 18i, 0u
+        %101:i32 = load %100
+        %x_142:i32 = let %101
+        %103:i32 = max %x_138, %x_140
+        %104:i32 = min %103, %x_142
+        %105:ptr<function, i32, read_write> = access %A, %104
+        %106:i32 = load %i
+        %107:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+        %108:i32 = load %107
+        %109:i32 = add %106, %108
+        store %105, %109
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %104:i32 = load %i
-        %105:i32 = add %104, 1i
-        store %i, %105
-        next_iteration %b3
+      $B4: {  # continuing
+        %110:i32 = load %i
+        %111:i32 = add %110, 1i
+        store %i, %111
+        next_iteration  # -> $B3
       }
     }
     store %ok, true
-    %106:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %107:i32 = load %106
-    store %i_1, %107
-    loop [b: %b7, c: %b8] {  # loop_2
-      %b7 = block {  # body
-        %108:i32 = load %i_1
-        %109:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %110:i32 = load %109
-        %111:bool = lt %108, %110
-        if %111 [t: %b9, f: %b10] {  # if_2
-          %b9 = block {  # true
+    %112:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %113:i32 = load %112
+    store %i_1, %113
+    loop [b: $B7, c: $B8] {  # loop_2
+      $B7: {  # body
+        %114:i32 = load %i_1
+        %115:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %116:i32 = load %115
+        %117:bool = lt %114, %116
+        if %117 [t: $B9, f: $B10] {  # if_2
+          $B9: {  # true
             exit_if  # if_2
           }
-          %b10 = block {  # false
+          $B10: {  # false
             exit_loop  # loop_2
           }
         }
-        %112:i32 = load %i_1
-        %113:ptr<function, i32, read_write> = access %A, %112
-        %114:i32 = load %113
-        %115:i32 = load %i_1
-        %116:ptr<function, i32, read_write> = access %r, %115
-        %117:i32 = load %116
-        %118:bool = neq %114, %117
-        if %118 [t: %b11] {  # if_3
-          %b11 = block {  # true
+        %118:i32 = load %i_1
+        %119:ptr<function, i32, read_write> = access %A, %118
+        %120:i32 = load %119
+        %121:i32 = load %i_1
+        %122:ptr<function, i32, read_write> = access %r, %121
+        %123:i32 = load %122
+        %124:bool = neq %120, %123
+        if %124 [t: $B11] {  # if_3
+          $B11: {  # true
             store %ok, false
             exit_if  # if_3
           }
         }
-        continue %b8
+        continue  # -> $B8
       }
-      %b8 = block {  # continuing
-        %119:i32 = load %i_1
-        %120:i32 = add %119, 1i
-        store %i_1, %120
-        next_iteration %b7
+      $B8: {  # continuing
+        %125:i32 = load %i_1
+        %126:i32 = add %125, 1i
+        store %i_1, %126
+        next_iteration  # -> $B7
       }
     }
-    %121:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %122:i32 = load %121
-    %123:f32 = convert %122
-    %124:vec4<f32> = construct %123
-    store %x_GLF_color, %124
-    %125:bool = load %ok
-    if %125 [t: %b12] {  # if_4
-      %b12 = block {  # true
-        %126:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-        %127:i32 = load %126
-        %128:f32 = convert %127
-        %129:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %130:i32 = load %129
-        %131:f32 = convert %130
-        %132:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %127:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %128:i32 = load %127
+    %129:f32 = convert %128
+    %130:vec4<f32> = construct %129
+    store %x_GLF_color, %130
+    %131:bool = load %ok
+    if %131 [t: $B12] {  # if_4
+      $B12: {  # true
+        %132:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
         %133:i32 = load %132
         %134:f32 = convert %133
-        %135:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-        %136:i32 = load %135
-        %137:f32 = convert %136
-        %138:vec4<f32> = construct %128, %131, %134, %137
-        store %x_GLF_color, %138
+        %135:f32 = let %134
+        %136:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %137:i32 = load %136
+        %138:f32 = convert %137
+        %139:f32 = let %138
+        %140:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %141:i32 = load %140
+        %142:f32 = convert %141
+        %143:f32 = let %142
+        %144:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+        %145:i32 = load %144
+        %146:f32 = convert %145
+        %147:vec4<f32> = construct %135, %139, %143, %146
+        store %x_GLF_color, %147
         exit_if  # if_4
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b13 {
-  %b13 = block {
-    %140:void = call %main_1
-    %141:vec4<f32> = load %x_GLF_color
-    %142:main_out = construct %141
-    ret %142
+%tint_symbol = @fragment func():main_out {
+  $B13: {
+    %149:void = call %main_1
+    %150:vec4<f32> = load %x_GLF_color
+    %151:main_out = construct %150
+    ret %151
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-nir-array-access/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-nir-array-access/0-opt.wgsl.expected.ir.msl
index ad88df7..c7cb928 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-nir-array-access/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-nir-array-access/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,13 +12,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %A:ptr<function, array<i32, 17>, read_write> = var
     %r:ptr<function, array<i32, 17>, read_write> = var
     %a:ptr<function, i32, read_write> = var
@@ -26,198 +26,263 @@
     %ok:ptr<function, bool, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
     %10:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_52:i32 = load %10
-    %12:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_54:i32 = load %12
-    %14:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_56:i32 = load %14
+    %11:i32 = load %10
+    %x_52:i32 = let %11
+    %13:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %14:i32 = load %13
+    %x_54:i32 = let %14
     %16:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_58:i32 = load %16
-    %18:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_60:i32 = load %18
-    %20:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_62:i32 = load %20
+    %17:i32 = load %16
+    %x_56:i32 = let %17
+    %19:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %20:i32 = load %19
+    %x_58:i32 = let %20
     %22:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_64:i32 = load %22
-    %24:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_66:i32 = load %24
-    %26:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_68:i32 = load %26
+    %23:i32 = load %22
+    %x_60:i32 = let %23
+    %25:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %26:i32 = load %25
+    %x_62:i32 = let %26
     %28:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_70:i32 = load %28
-    %30:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_72:i32 = load %30
-    %32:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_74:i32 = load %32
+    %29:i32 = load %28
+    %x_64:i32 = let %29
+    %31:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %32:i32 = load %31
+    %x_66:i32 = let %32
     %34:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_76:i32 = load %34
-    %36:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_78:i32 = load %36
-    %38:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_80:i32 = load %38
+    %35:i32 = load %34
+    %x_68:i32 = let %35
+    %37:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %38:i32 = load %37
+    %x_70:i32 = let %38
     %40:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_82:i32 = load %40
-    %42:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_84:i32 = load %42
-    %44:array<i32, 17> = construct %x_52, %x_54, %x_56, %x_58, %x_60, %x_62, %x_64, %x_66, %x_68, %x_70, %x_72, %x_74, %x_76, %x_78, %x_80, %x_82, %x_84
-    store %A, %44
-    %45:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-    %x_87:i32 = load %45
-    %47:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
-    %x_89:i32 = load %47
-    %49:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
-    %x_91:i32 = load %49
-    %51:ptr<uniform, i32, read> = access %x_6, 0u, 6i, 0u
-    %x_93:i32 = load %51
-    %53:ptr<uniform, i32, read> = access %x_6, 0u, 7i, 0u
-    %x_95:i32 = load %53
-    %55:ptr<uniform, i32, read> = access %x_6, 0u, 8i, 0u
-    %x_97:i32 = load %55
-    %57:ptr<uniform, i32, read> = access %x_6, 0u, 9i, 0u
-    %x_99:i32 = load %57
-    %59:ptr<uniform, i32, read> = access %x_6, 0u, 10i, 0u
-    %x_101:i32 = load %59
-    %61:ptr<uniform, i32, read> = access %x_6, 0u, 11i, 0u
-    %x_103:i32 = load %61
-    %63:ptr<uniform, i32, read> = access %x_6, 0u, 12i, 0u
-    %x_105:i32 = load %63
-    %65:ptr<uniform, i32, read> = access %x_6, 0u, 13i, 0u
-    %x_107:i32 = load %65
-    %67:ptr<uniform, i32, read> = access %x_6, 0u, 14i, 0u
-    %x_109:i32 = load %67
-    %69:ptr<uniform, i32, read> = access %x_6, 0u, 15i, 0u
-    %x_111:i32 = load %69
-    %71:ptr<uniform, i32, read> = access %x_6, 0u, 16i, 0u
-    %x_113:i32 = load %71
-    %73:ptr<uniform, i32, read> = access %x_6, 0u, 17i, 0u
-    %x_115:i32 = load %73
-    %75:ptr<uniform, i32, read> = access %x_6, 0u, 18i, 0u
-    %x_117:i32 = load %75
-    %77:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_119:i32 = load %77
-    %79:array<i32, 17> = construct %x_87, %x_89, %x_91, %x_93, %x_95, %x_97, %x_99, %x_101, %x_103, %x_105, %x_107, %x_109, %x_111, %x_113, %x_115, %x_117, %x_119
-    store %r, %79
-    %80:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_122:i32 = load %80
+    %41:i32 = load %40
+    %x_72:i32 = let %41
+    %43:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %44:i32 = load %43
+    %x_74:i32 = let %44
+    %46:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %47:i32 = load %46
+    %x_76:i32 = let %47
+    %49:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %50:i32 = load %49
+    %x_78:i32 = let %50
+    %52:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %53:i32 = load %52
+    %x_80:i32 = let %53
+    %55:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %56:i32 = load %55
+    %x_82:i32 = let %56
+    %58:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %59:i32 = load %58
+    %x_84:i32 = let %59
+    %61:array<i32, 17> = construct %x_52, %x_54, %x_56, %x_58, %x_60, %x_62, %x_64, %x_66, %x_68, %x_70, %x_72, %x_74, %x_76, %x_78, %x_80, %x_82, %x_84
+    store %A, %61
+    %62:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+    %63:i32 = load %62
+    %x_87:i32 = let %63
+    %65:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
+    %66:i32 = load %65
+    %x_89:i32 = let %66
+    %68:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
+    %69:i32 = load %68
+    %x_91:i32 = let %69
+    %71:ptr<uniform, i32, read> = access %x_6, 0u, 6i, 0u
+    %72:i32 = load %71
+    %x_93:i32 = let %72
+    %74:ptr<uniform, i32, read> = access %x_6, 0u, 7i, 0u
+    %75:i32 = load %74
+    %x_95:i32 = let %75
+    %77:ptr<uniform, i32, read> = access %x_6, 0u, 8i, 0u
+    %78:i32 = load %77
+    %x_97:i32 = let %78
+    %80:ptr<uniform, i32, read> = access %x_6, 0u, 9i, 0u
+    %81:i32 = load %80
+    %x_99:i32 = let %81
+    %83:ptr<uniform, i32, read> = access %x_6, 0u, 10i, 0u
+    %84:i32 = load %83
+    %x_101:i32 = let %84
+    %86:ptr<uniform, i32, read> = access %x_6, 0u, 11i, 0u
+    %87:i32 = load %86
+    %x_103:i32 = let %87
+    %89:ptr<uniform, i32, read> = access %x_6, 0u, 12i, 0u
+    %90:i32 = load %89
+    %x_105:i32 = let %90
+    %92:ptr<uniform, i32, read> = access %x_6, 0u, 13i, 0u
+    %93:i32 = load %92
+    %x_107:i32 = let %93
+    %95:ptr<uniform, i32, read> = access %x_6, 0u, 14i, 0u
+    %96:i32 = load %95
+    %x_109:i32 = let %96
+    %98:ptr<uniform, i32, read> = access %x_6, 0u, 15i, 0u
+    %99:i32 = load %98
+    %x_111:i32 = let %99
+    %101:ptr<uniform, i32, read> = access %x_6, 0u, 16i, 0u
+    %102:i32 = load %101
+    %x_113:i32 = let %102
+    %104:ptr<uniform, i32, read> = access %x_6, 0u, 17i, 0u
+    %105:i32 = load %104
+    %x_115:i32 = let %105
+    %107:ptr<uniform, i32, read> = access %x_6, 0u, 18i, 0u
+    %108:i32 = load %107
+    %x_117:i32 = let %108
+    %110:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %111:i32 = load %110
+    %x_119:i32 = let %111
+    %113:array<i32, 17> = construct %x_87, %x_89, %x_91, %x_93, %x_95, %x_97, %x_99, %x_101, %x_103, %x_105, %x_107, %x_109, %x_111, %x_113, %x_115, %x_117, %x_119
+    store %r, %113
+    %114:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %115:i32 = load %114
+    %x_122:i32 = let %115
     store %a, %x_122
-    %82:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_124:i32 = load %82
+    %117:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %118:i32 = load %117
+    %x_124:i32 = let %118
     store %i, %x_124
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_129:i32 = load %i
-        %85:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_131:i32 = load %85
-        %87:bool = lt %x_129, %x_131
-        if %87 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %120:i32 = load %i
+        %x_129:i32 = let %120
+        %122:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %123:i32 = load %122
+        %x_131:i32 = let %123
+        %125:bool = lt %x_129, %x_131
+        if %125 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_134:i32 = load %i
-        %x_135:i32 = load %a
-        %90:i32 = sub %x_135, 1i
-        store %a, %90
-        %91:ptr<function, i32, read_write> = access %A, %x_134
-        store %91, %x_135
-        %x_138:i32 = load %i
-        %93:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %x_140:i32 = load %93
-        %95:ptr<uniform, i32, read> = access %x_6, 0u, 18i, 0u
-        %x_142:i32 = load %95
-        %x_144:i32 = load %i
-        %98:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-        %x_146:i32 = load %98
-        %100:i32 = clamp %x_138, %x_140, %x_142
-        %101:ptr<function, i32, read_write> = access %A, %100
-        %102:i32 = add %x_144, %x_146
-        store %101, %102
-        continue %b4
+        %126:i32 = load %i
+        %x_134:i32 = let %126
+        %128:i32 = load %a
+        %x_135:i32 = let %128
+        %130:i32 = sub %x_135, 1i
+        store %a, %130
+        %131:ptr<function, i32, read_write> = access %A, %x_134
+        store %131, %x_135
+        %132:i32 = load %i
+        %x_138:i32 = let %132
+        %134:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %135:i32 = load %134
+        %x_140:i32 = let %135
+        %137:ptr<uniform, i32, read> = access %x_6, 0u, 18i, 0u
+        %138:i32 = load %137
+        %x_142:i32 = let %138
+        %140:i32 = load %i
+        %x_144:i32 = let %140
+        %142:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+        %143:i32 = load %142
+        %x_146:i32 = let %143
+        %145:i32 = max %x_138, %x_140
+        %146:i32 = min %145, %x_142
+        %147:ptr<function, i32, read_write> = access %A, %146
+        %148:i32 = add %x_144, %x_146
+        store %147, %148
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_149:i32 = load %i
-        %104:i32 = add %x_149, 1i
-        store %i, %104
-        next_iteration %b3
+      $B4: {  # continuing
+        %149:i32 = load %i
+        %x_149:i32 = let %149
+        %151:i32 = add %x_149, 1i
+        store %i, %151
+        next_iteration  # -> $B3
       }
     }
     store %ok, true
-    %105:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_152:i32 = load %105
+    %152:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %153:i32 = load %152
+    %x_152:i32 = let %153
     store %i_1, %x_152
-    loop [b: %b7, c: %b8] {  # loop_2
-      %b7 = block {  # body
-        %x_157:i32 = load %i_1
-        %108:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_159:i32 = load %108
-        %110:bool = lt %x_157, %x_159
-        if %110 [t: %b9, f: %b10] {  # if_2
-          %b9 = block {  # true
+    loop [b: $B7, c: $B8] {  # loop_2
+      $B7: {  # body
+        %155:i32 = load %i_1
+        %x_157:i32 = let %155
+        %157:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %158:i32 = load %157
+        %x_159:i32 = let %158
+        %160:bool = lt %x_157, %x_159
+        if %160 [t: $B9, f: $B10] {  # if_2
+          $B9: {  # true
             exit_if  # if_2
           }
-          %b10 = block {  # false
+          $B10: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_162:i32 = load %i_1
-        %112:ptr<function, i32, read_write> = access %A, %x_162
-        %x_164:i32 = load %112
-        %x_165:i32 = load %i_1
-        %115:ptr<function, i32, read_write> = access %r, %x_165
-        %x_167:i32 = load %115
-        %117:bool = neq %x_164, %x_167
-        if %117 [t: %b11] {  # if_3
-          %b11 = block {  # true
+        %161:i32 = load %i_1
+        %x_162:i32 = let %161
+        %163:ptr<function, i32, read_write> = access %A, %x_162
+        %164:i32 = load %163
+        %x_164:i32 = let %164
+        %166:i32 = load %i_1
+        %x_165:i32 = let %166
+        %168:ptr<function, i32, read_write> = access %r, %x_165
+        %169:i32 = load %168
+        %x_167:i32 = let %169
+        %171:bool = neq %x_164, %x_167
+        if %171 [t: $B11] {  # if_3
+          $B11: {  # true
             store %ok, false
             exit_if  # if_3
           }
         }
-        continue %b8
+        continue  # -> $B8
       }
-      %b8 = block {  # continuing
-        %x_171:i32 = load %i_1
-        %119:i32 = add %x_171, 1i
-        store %i_1, %119
-        next_iteration %b7
+      $B8: {  # continuing
+        %172:i32 = load %i_1
+        %x_171:i32 = let %172
+        %174:i32 = add %x_171, 1i
+        store %i_1, %174
+        next_iteration  # -> $B7
       }
     }
-    %120:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_174:i32 = load %120
-    %x_175:f32 = convert %x_174
-    %123:vec4<f32> = construct %x_175, %x_175, %x_175, %x_175
-    store %x_GLF_color, %123
-    %x_177:bool = load %ok
-    if %x_177 [t: %b12] {  # if_4
-      %b12 = block {  # true
-        %125:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-        %x_181:i32 = load %125
-        %127:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %x_184:i32 = load %127
-        %129:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %x_187:i32 = load %129
-        %131:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-        %x_190:i32 = load %131
-        %133:f32 = convert %x_181
-        %134:f32 = convert %x_184
-        %135:f32 = convert %x_187
-        %136:f32 = convert %x_190
-        %137:vec4<f32> = construct %133, %134, %135, %136
-        store %x_GLF_color, %137
+    %175:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %176:i32 = load %175
+    %x_174:i32 = let %176
+    %178:f32 = convert %x_174
+    %x_175:f32 = let %178
+    %180:vec4<f32> = construct %x_175, %x_175, %x_175, %x_175
+    store %x_GLF_color, %180
+    %181:bool = load %ok
+    %x_177:bool = let %181
+    if %x_177 [t: $B12] {  # if_4
+      $B12: {  # true
+        %183:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+        %184:i32 = load %183
+        %x_181:i32 = let %184
+        %186:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %187:i32 = load %186
+        %x_184:i32 = let %187
+        %189:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %190:i32 = load %189
+        %x_187:i32 = let %190
+        %192:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+        %193:i32 = load %192
+        %x_190:i32 = let %193
+        %195:f32 = convert %x_181
+        %196:f32 = let %195
+        %197:f32 = convert %x_184
+        %198:f32 = let %197
+        %199:f32 = convert %x_187
+        %200:f32 = let %199
+        %201:f32 = convert %x_190
+        %202:vec4<f32> = construct %196, %198, %200, %201
+        store %x_GLF_color, %202
         exit_if  # if_4
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b13 {
-  %b13 = block {
-    %139:void = call %main_1
-    %140:vec4<f32> = load %x_GLF_color
-    %141:main_out = construct %140
-    ret %141
+%tint_symbol = @fragment func():main_out {
+  $B13: {
+    %204:void = call %main_1
+    %205:vec4<f32> = load %x_GLF_color
+    %206:main_out = construct %205
+    ret %206
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-nir-opt-large-constants-for-clamp-vector-access/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-nir-opt-large-constants-for-clamp-vector-access/0-opt.spvasm.expected.ir.msl
index c4a2b71..ea8a601 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-nir-opt-large-constants-for-clamp-vector-access/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-nir-opt-large-constants-for-clamp-vector-access/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,14 +20,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_9:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %v1:ptr<function, vec4<f32>, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %a:ptr<function, i32, read_write> = var
@@ -40,75 +40,91 @@
     %13:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
     %14:i32 = load %13
     store %i, %14
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %15:i32 = load %i
         %16:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
         %17:i32 = load %16
         %18:bool = lt %15, %17
-        if %18 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %18 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_58:i32 = load %i
-        %20:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %x_60:i32 = load %20
-        %22:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
-        %x_62:i32 = load %22
+        %19:i32 = load %i
+        %x_58:i32 = let %19
+        %21:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %22:i32 = load %21
+        %x_60:i32 = let %22
+        %24:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
+        %25:i32 = load %24
+        %x_62:i32 = let %25
         store %indexable, array<vec4<f32>, 2>(vec4<f32>(1.0f), vec4<f32>(0.0f))
-        %24:i32 = clamp %x_58, %x_60, %x_62
-        %25:ptr<function, vec4<f32>, read_write> = access %indexable, %24
-        %26:f32 = load_vector_element %25, 0u
-        %27:i32 = convert %26
-        store %a, %27
-        %x_86:i32 = load %a
-        %29:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-        %30:f32 = load %29
-        %31:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-        %32:f32 = load %31
-        %33:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-        %34:f32 = load %33
+        %27:i32 = max %x_58, %x_60
+        %28:i32 = min %27, %x_62
+        %29:ptr<function, vec4<f32>, read_write> = access %indexable, %28
+        %30:f32 = load_vector_element %29, 0u
+        %31:i32 = call %tint_f32_to_i32, %30
+        store %a, %31
+        %33:i32 = load %a
+        %x_86:i32 = let %33
         %35:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
         %36:f32 = load %35
-        %37:vec4<f32> = construct %30, %32, %34, %36
-        %38:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-        %39:f32 = load %38
-        %40:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-        %41:f32 = load %40
-        %42:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-        %43:f32 = load %42
-        %44:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-        %45:f32 = load %44
-        %46:vec4<f32> = construct %39, %41, %43, %45
-        %47:array<vec4<f32>, 2> = construct %37, %46
-        store %indexable_1, %47
-        %48:ptr<function, vec4<f32>, read_write> = access %indexable_1, %x_86
-        %49:vec4<f32> = load %48
-        store %v1, %49
-        continue %b4
+        %37:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+        %38:f32 = load %37
+        %39:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+        %40:f32 = load %39
+        %41:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+        %42:f32 = load %41
+        %43:vec4<f32> = construct %36, %38, %40, %42
+        %44:vec4<f32> = let %43
+        %45:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+        %46:f32 = load %45
+        %47:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+        %48:f32 = load %47
+        %49:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+        %50:f32 = load %49
+        %51:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+        %52:f32 = load %51
+        %53:vec4<f32> = construct %46, %48, %50, %52
+        %54:array<vec4<f32>, 2> = construct %44, %53
+        store %indexable_1, %54
+        %55:ptr<function, vec4<f32>, read_write> = access %indexable_1, %x_86
+        %56:vec4<f32> = load %55
+        store %v1, %56
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %50:i32 = load %i
-        %51:i32 = add %50, 1i
-        store %i, %51
-        next_iteration %b3
+      $B4: {  # continuing
+        %57:i32 = load %i
+        %58:i32 = add %57, 1i
+        store %i, %58
+        next_iteration  # -> $B3
       }
     }
-    %52:vec4<f32> = load %v1
-    store %x_GLF_color, %52
+    %59:vec4<f32> = load %v1
+    store %x_GLF_color, %59
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b7 {
-  %b7 = block {
-    %54:void = call %main_1
-    %55:vec4<f32> = load %x_GLF_color
-    %56:main_out = construct %55
-    ret %56
+%tint_symbol = @fragment func():main_out {
+  $B7: {
+    %61:void = call %main_1
+    %62:vec4<f32> = load %x_GLF_color
+    %63:main_out = construct %62
+    ret %63
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B8: {
+    %65:i32 = convert %value
+    %66:bool = gte %value, -2147483648.0f
+    %67:i32 = select -2147483648i, %65, %66
+    %68:bool = lte %value, 2147483520.0f
+    %69:i32 = select 2147483647i, %67, %68
+    ret %69
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-nir-opt-large-constants-for-clamp-vector-access/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-nir-opt-large-constants-for-clamp-vector-access/0-opt.wgsl.expected.ir.msl
index e73f2b5..8913179 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-nir-opt-large-constants-for-clamp-vector-access/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-nir-opt-large-constants-for-clamp-vector-access/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,95 +20,127 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_9:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %v1:ptr<function, vec4<f32>, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %a:ptr<function, i32, read_write> = var
     %indexable:ptr<function, array<vec4<f32>, 2>, read_write> = var
     %indexable_1:ptr<function, array<vec4<f32>, 2>, read_write> = var
     %10:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_45:f32 = load %10
-    %12:vec4<f32> = construct %x_45, %x_45, %x_45, %x_45
-    store %v1, %12
-    %13:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-    %x_48:i32 = load %13
+    %11:f32 = load %10
+    %x_45:f32 = let %11
+    %13:vec4<f32> = construct %x_45, %x_45, %x_45, %x_45
+    store %v1, %13
+    %14:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+    %15:i32 = load %14
+    %x_48:i32 = let %15
     store %i, %x_48
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_53:i32 = load %i
-        %16:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %x_55:i32 = load %16
-        %18:bool = lt %x_53, %x_55
-        if %18 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %17:i32 = load %i
+        %x_53:i32 = let %17
+        %19:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+        %20:i32 = load %19
+        %x_55:i32 = let %20
+        %22:bool = lt %x_53, %x_55
+        if %22 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_58:i32 = load %i
-        %20:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %x_60:i32 = load %20
-        %22:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
-        %x_62:i32 = load %22
+        %23:i32 = load %i
+        %x_58:i32 = let %23
+        %25:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %26:i32 = load %25
+        %x_60:i32 = let %26
+        %28:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
+        %29:i32 = load %28
+        %x_62:i32 = let %29
         store %indexable, array<vec4<f32>, 2>(vec4<f32>(1.0f), vec4<f32>(0.0f))
-        %24:i32 = clamp %x_58, %x_60, %x_62
-        %25:ptr<function, vec4<f32>, read_write> = access %indexable, %24
-        %x_65:f32 = load_vector_element %25, 0u
-        %27:i32 = convert %x_65
-        store %a, %27
-        %28:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-        %x_68:f32 = load %28
-        %30:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-        %x_70:f32 = load %30
-        %32:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-        %x_72:f32 = load %32
-        %34:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-        %x_74:f32 = load %34
-        %36:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-        %x_77:f32 = load %36
+        %31:i32 = max %x_58, %x_60
+        %32:i32 = min %31, %x_62
+        %33:ptr<function, vec4<f32>, read_write> = access %indexable, %32
+        %34:f32 = load_vector_element %33, 0u
+        %x_65:f32 = let %34
+        %36:i32 = call %tint_f32_to_i32, %x_65
+        store %a, %36
         %38:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-        %x_79:f32 = load %38
-        %40:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-        %x_81:f32 = load %40
-        %42:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-        %x_83:f32 = load %42
-        %x_86:i32 = load %a
-        %45:vec4<f32> = construct %x_68, %x_70, %x_72, %x_74
-        %46:vec4<f32> = construct %x_77, %x_79, %x_81, %x_83
-        %47:array<vec4<f32>, 2> = construct %45, %46
-        store %indexable_1, %47
-        %48:ptr<function, vec4<f32>, read_write> = access %indexable_1, %x_86
-        %x_88:vec4<f32> = load %48
+        %39:f32 = load %38
+        %x_68:f32 = let %39
+        %41:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+        %42:f32 = load %41
+        %x_70:f32 = let %42
+        %44:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+        %45:f32 = load %44
+        %x_72:f32 = let %45
+        %47:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+        %48:f32 = load %47
+        %x_74:f32 = let %48
+        %50:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+        %51:f32 = load %50
+        %x_77:f32 = let %51
+        %53:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+        %54:f32 = load %53
+        %x_79:f32 = let %54
+        %56:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+        %57:f32 = load %56
+        %x_81:f32 = let %57
+        %59:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+        %60:f32 = load %59
+        %x_83:f32 = let %60
+        %62:i32 = load %a
+        %x_86:i32 = let %62
+        %64:vec4<f32> = construct %x_68, %x_70, %x_72, %x_74
+        %65:vec4<f32> = let %64
+        %66:vec4<f32> = construct %x_77, %x_79, %x_81, %x_83
+        %67:array<vec4<f32>, 2> = construct %65, %66
+        store %indexable_1, %67
+        %68:ptr<function, vec4<f32>, read_write> = access %indexable_1, %x_86
+        %69:vec4<f32> = load %68
+        %x_88:vec4<f32> = let %69
         store %v1, %x_88
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_89:i32 = load %i
-        %51:i32 = add %x_89, 1i
-        store %i, %51
-        next_iteration %b3
+      $B4: {  # continuing
+        %71:i32 = load %i
+        %x_89:i32 = let %71
+        %73:i32 = add %x_89, 1i
+        store %i, %73
+        next_iteration  # -> $B3
       }
     }
-    %x_91:vec4<f32> = load %v1
+    %74:vec4<f32> = load %v1
+    %x_91:vec4<f32> = let %74
     store %x_GLF_color, %x_91
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b7 {
-  %b7 = block {
-    %54:void = call %main_1
-    %55:vec4<f32> = load %x_GLF_color
-    %56:main_out = construct %55
-    ret %56
+%tint_symbol = @fragment func():main_out {
+  $B7: {
+    %77:void = call %main_1
+    %78:vec4<f32> = load %x_GLF_color
+    %79:main_out = construct %78
+    ret %79
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B8: {
+    %81:i32 = convert %value
+    %82:bool = gte %value, -2147483648.0f
+    %83:i32 = select -2147483648i, %81, %82
+    %84:bool = lte %value, 2147483520.0f
+    %85:i32 = select 2147483647i, %83, %84
+    ret %85
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-nir-opt-loop-unroll-if-if-if-if-do-while/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-nir-opt-loop-unroll-if-if-if-if-do-while/0-opt.spvasm.expected.ir.msl
index 949a481..0cf3de8 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-nir-opt-loop-unroll-if-if-if-if-do-while/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-nir-opt-loop-unroll-if-if-if-if-do-while/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,14 +20,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_8:ptr<uniform, buf1, read> = var @binding_point(0, 1)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, f32, read_write> = var
     %6:ptr<uniform, f32, read> = access %x_5, 0u, 1i, 0u
     %7:f32 = load %6
@@ -36,16 +36,16 @@
     %9:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
     %10:f32 = load %9
     store %a, %10
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %11:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
         %12:f32 = load %11
         %13:f32 = div %12, 0.20000000298023223877f
         %14:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
         %15:f32 = load %14
         %16:bool = lt %13, %15
-        if %16 [t: %b5] {  # if_1
-          %b5 = block {  # true
+        if %16 [t: $B5] {  # if_1
+          $B5: {  # true
             ret
           }
         }
@@ -55,8 +55,8 @@
         %20:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
         %21:f32 = load %20
         %22:bool = lt %19, %21
-        if %22 [t: %b6] {  # if_2
-          %b6 = block {  # true
+        if %22 [t: $B6] {  # if_2
+          $B6: {  # true
             ret
           }
         }
@@ -66,8 +66,8 @@
         %26:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
         %27:f32 = load %26
         %28:bool = lt %25, %27
-        if %28 [t: %b7] {  # if_3
-          %b7 = block {  # true
+        if %28 [t: $B7] {  # if_3
+          $B7: {  # true
             ret
           }
         }
@@ -77,48 +77,52 @@
         %32:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
         %33:f32 = load %32
         %34:bool = lt %31, %33
-        if %34 [t: %b8, f: %b9] {  # if_4
-          %b8 = block {  # true
+        if %34 [t: $B8, f: $B9] {  # if_4
+          $B8: {  # true
             ret
           }
-          %b9 = block {  # false
+          $B9: {  # false
             store %a, 0.0f
             exit_if  # if_4
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_72:f32 = load %a
-        %36:bool = eq %x_72, 0.0f
-        %37:bool = eq %36, false
+      $B4: {  # continuing
+        %35:f32 = load %a
+        %x_72:f32 = let %35
+        %37:bool = eq %x_72, 0.0f
         %38:bool = eq %37, false
-        break_if %38 %b3
+        %39:bool = eq %38, false
+        break_if %39  # -> [t: exit_loop loop_1, f: $B3]
       }
     }
-    %39:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-    %40:i32 = load %39
-    %41:f32 = convert %40
-    %42:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-    %43:i32 = load %42
-    %44:f32 = convert %43
-    %45:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-    %46:i32 = load %45
-    %47:f32 = convert %46
-    %48:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+    %40:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+    %41:i32 = load %40
+    %42:f32 = convert %41
+    %43:f32 = let %42
+    %44:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+    %45:i32 = load %44
+    %46:f32 = convert %45
+    %47:f32 = let %46
+    %48:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
     %49:i32 = load %48
     %50:f32 = convert %49
-    %51:vec4<f32> = construct %41, %44, %47, %50
-    store %x_GLF_color, %51
+    %51:f32 = let %50
+    %52:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+    %53:i32 = load %52
+    %54:f32 = convert %53
+    %55:vec4<f32> = construct %43, %47, %51, %54
+    store %x_GLF_color, %55
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b10 {
-  %b10 = block {
-    %53:void = call %main_1
-    %54:vec4<f32> = load %x_GLF_color
-    %55:main_out = construct %54
-    ret %55
+%tint_symbol = @fragment func():main_out {
+  $B10: {
+    %57:void = call %main_1
+    %58:vec4<f32> = load %x_GLF_color
+    %59:main_out = construct %58
+    ret %59
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-nir-opt-loop-unroll-if-if-if-if-do-while/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-nir-opt-loop-unroll-if-if-if-if-do-while/0-opt.wgsl.expected.ir.msl
index 8cc2929..2367e3a 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-nir-opt-loop-unroll-if-if-if-if-do-while/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-nir-opt-loop-unroll-if-if-if-if-do-while/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,104 +20,122 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_8:ptr<uniform, buf1, read> = var @binding_point(0, 1)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, f32, read_write> = var
     %6:ptr<uniform, f32, read> = access %x_5, 0u, 1i, 0u
-    %x_31:f32 = load %6
-    %8:vec4<f32> = construct %x_31, %x_31, %x_31, %x_31
-    store %x_GLF_color, %8
-    %9:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
-    %x_34:f32 = load %9
+    %7:f32 = load %6
+    %x_31:f32 = let %7
+    %9:vec4<f32> = construct %x_31, %x_31, %x_31, %x_31
+    store %x_GLF_color, %9
+    %10:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
+    %11:f32 = load %10
+    %x_34:f32 = let %11
     store %a, %x_34
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %11:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
-        %x_40:f32 = load %11
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %13:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
-        %x_43:f32 = load %13
-        %15:f32 = div %x_40, 0.20000000298023223877f
-        %16:bool = lt %15, %x_43
-        if %16 [t: %b5] {  # if_1
-          %b5 = block {  # true
+        %14:f32 = load %13
+        %x_40:f32 = let %14
+        %16:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
+        %17:f32 = load %16
+        %x_43:f32 = let %17
+        %19:f32 = div %x_40, 0.20000000298023223877f
+        %20:bool = lt %19, %x_43
+        if %20 [t: $B5] {  # if_1
+          $B5: {  # true
             ret
           }
         }
-        %17:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
-        %x_48:f32 = load %17
-        %19:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
-        %x_51:f32 = load %19
-        %21:f32 = div %x_48, 0.20000000298023223877f
-        %22:bool = lt %21, %x_51
-        if %22 [t: %b6] {  # if_2
-          %b6 = block {  # true
-            ret
-          }
-        }
-        %23:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
-        %x_56:f32 = load %23
-        %25:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
-        %x_59:f32 = load %25
-        %27:f32 = div %x_56, 0.20000000298023223877f
-        %28:bool = lt %27, %x_59
-        if %28 [t: %b7] {  # if_3
-          %b7 = block {  # true
+        %21:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
+        %22:f32 = load %21
+        %x_48:f32 = let %22
+        %24:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
+        %25:f32 = load %24
+        %x_51:f32 = let %25
+        %27:f32 = div %x_48, 0.20000000298023223877f
+        %28:bool = lt %27, %x_51
+        if %28 [t: $B6] {  # if_2
+          $B6: {  # true
             ret
           }
         }
         %29:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
-        %x_64:f32 = load %29
-        %31:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
-        %x_67:f32 = load %31
-        %33:f32 = div %x_64, 0.20000000298023223877f
-        %34:bool = lt %33, %x_67
-        if %34 [t: %b8, f: %b9] {  # if_4
-          %b8 = block {  # true
+        %30:f32 = load %29
+        %x_56:f32 = let %30
+        %32:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
+        %33:f32 = load %32
+        %x_59:f32 = let %33
+        %35:f32 = div %x_56, 0.20000000298023223877f
+        %36:bool = lt %35, %x_59
+        if %36 [t: $B7] {  # if_3
+          $B7: {  # true
             ret
           }
-          %b9 = block {  # false
+        }
+        %37:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
+        %38:f32 = load %37
+        %x_64:f32 = let %38
+        %40:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
+        %41:f32 = load %40
+        %x_67:f32 = let %41
+        %43:f32 = div %x_64, 0.20000000298023223877f
+        %44:bool = lt %43, %x_67
+        if %44 [t: $B8, f: $B9] {  # if_4
+          $B8: {  # true
+            ret
+          }
+          $B9: {  # false
             store %a, 0.0f
             exit_if  # if_4
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_72:f32 = load %a
-        %36:bool = eq %x_72, 0.0f
-        %37:bool = eq %36, false
-        break_if %37 %b3
+      $B4: {  # continuing
+        %45:f32 = load %a
+        %x_72:f32 = let %45
+        %47:bool = eq %x_72, 0.0f
+        %48:bool = eq %47, false
+        break_if %48  # -> [t: exit_loop loop_1, f: $B3]
       }
     }
-    %38:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-    %x_75:i32 = load %38
-    %40:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-    %x_78:i32 = load %40
-    %42:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-    %x_81:i32 = load %42
-    %44:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-    %x_84:i32 = load %44
-    %46:f32 = convert %x_75
-    %47:f32 = convert %x_78
-    %48:f32 = convert %x_81
-    %49:f32 = convert %x_84
-    %50:vec4<f32> = construct %46, %47, %48, %49
-    store %x_GLF_color, %50
+    %49:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+    %50:i32 = load %49
+    %x_75:i32 = let %50
+    %52:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+    %53:i32 = load %52
+    %x_78:i32 = let %53
+    %55:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+    %56:i32 = load %55
+    %x_81:i32 = let %56
+    %58:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+    %59:i32 = load %58
+    %x_84:i32 = let %59
+    %61:f32 = convert %x_75
+    %62:f32 = let %61
+    %63:f32 = convert %x_78
+    %64:f32 = let %63
+    %65:f32 = convert %x_81
+    %66:f32 = let %65
+    %67:f32 = convert %x_84
+    %68:vec4<f32> = construct %62, %64, %66, %67
+    store %x_GLF_color, %68
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b10 {
-  %b10 = block {
-    %52:void = call %main_1
-    %53:vec4<f32> = load %x_GLF_color
-    %54:main_out = construct %53
-    ret %54
+%tint_symbol = @fragment func():main_out {
+  $B10: {
+    %70:void = call %main_1
+    %71:vec4<f32> = load %x_GLF_color
+    %72:main_out = construct %71
+    ret %72
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-not-clamp-matrix-access/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-not-clamp-matrix-access/0-opt.spvasm.expected.ir.msl
index 1e8f24b..64008a5 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-not-clamp-matrix-access/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-not-clamp-matrix-access/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,14 +20,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_10:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %M1:ptr<function, mat2x2<f32>, read_write> = var
     %a:ptr<function, f32, read_write> = var
     %c:ptr<function, i32, read_write> = var
@@ -36,92 +36,99 @@
     %10:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
     %11:f32 = load %10
     %12:vec2<f32> = construct %9, %11
-    %13:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
-    %14:f32 = load %13
-    %15:ptr<uniform, f32, read> = access %x_6, 0u, 4i, 0u
-    %16:f32 = load %15
-    %17:vec2<f32> = construct %14, %16
-    %18:mat2x2<f32> = construct %12, %17
-    store %M1, %18
-    %19:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-    %20:f32 = load %19
-    store %a, %20
-    %21:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-    %22:i32 = load %21
-    store %c, %22
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %23:i32 = load %c
-        %24:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %25:i32 = load %24
-        %26:bool = lt %23, %25
-        if %26 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    %13:vec2<f32> = let %12
+    %14:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
+    %15:f32 = load %14
+    %16:ptr<uniform, f32, read> = access %x_6, 0u, 4i, 0u
+    %17:f32 = load %16
+    %18:vec2<f32> = construct %15, %17
+    %19:mat2x2<f32> = construct %13, %18
+    store %M1, %19
+    %20:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+    %21:f32 = load %20
+    store %a, %21
+    %22:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+    %23:i32 = load %22
+    store %c, %23
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %24:i32 = load %c
+        %25:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %26:i32 = load %25
+        %27:bool = lt %24, %26
+        if %27 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %27:f32 = load %a
-        %28:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-        %29:i32 = load %28
-        %30:ptr<function, vec2<f32>, read_write> = access %M1, %29
-        %31:i32 = load %c
-        %32:i32 = complement %31
-        %33:i32 = clamp %32, 0i, 1i
-        %34:f32 = load_vector_element %30, %33
-        %35:f32 = add %27, %34
-        store %a, %35
-        continue %b4
+        %28:f32 = load %a
+        %29:f32 = let %28
+        %30:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+        %31:i32 = load %30
+        %32:ptr<function, vec2<f32>, read_write> = access %M1, %31
+        %33:ptr<function, vec2<f32>, read_write> = let %32
+        %34:i32 = load %c
+        %35:i32 = complement %34
+        %36:i32 = max %35, 0i
+        %37:i32 = min %36, 1i
+        %38:f32 = load_vector_element %33, %37
+        %39:f32 = add %29, %38
+        store %a, %39
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %36:i32 = load %c
-        %37:i32 = add %36, 1i
-        store %c, %37
-        next_iteration %b3
+      $B4: {  # continuing
+        %40:i32 = load %c
+        %41:i32 = add %40, 1i
+        store %c, %41
+        next_iteration  # -> $B3
       }
     }
-    %38:f32 = load %a
-    %39:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %40:f32 = load %39
-    %41:bool = eq %38, %40
-    if %41 [t: %b7, f: %b8] {  # if_2
-      %b7 = block {  # true
-        %42:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-        %43:i32 = load %42
-        %44:f32 = convert %43
-        %45:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %46:i32 = load %45
-        %47:f32 = convert %46
-        %48:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %49:i32 = load %48
-        %50:f32 = convert %49
-        %51:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-        %52:i32 = load %51
-        %53:f32 = convert %52
-        %54:vec4<f32> = construct %44, %47, %50, %53
-        store %x_GLF_color, %54
+    %42:f32 = load %a
+    %43:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %44:f32 = load %43
+    %45:bool = eq %42, %44
+    if %45 [t: $B7, f: $B8] {  # if_2
+      $B7: {  # true
+        %46:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+        %47:i32 = load %46
+        %48:f32 = convert %47
+        %49:f32 = let %48
+        %50:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %51:i32 = load %50
+        %52:f32 = convert %51
+        %53:f32 = let %52
+        %54:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %55:i32 = load %54
+        %56:f32 = convert %55
+        %57:f32 = let %56
+        %58:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+        %59:i32 = load %58
+        %60:f32 = convert %59
+        %61:vec4<f32> = construct %49, %53, %57, %60
+        store %x_GLF_color, %61
         exit_if  # if_2
       }
-      %b8 = block {  # false
-        %55:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-        %56:i32 = load %55
-        %57:f32 = convert %56
-        %58:vec4<f32> = construct %57
-        store %x_GLF_color, %58
+      $B8: {  # false
+        %62:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+        %63:i32 = load %62
+        %64:f32 = convert %63
+        %65:vec4<f32> = construct %64
+        store %x_GLF_color, %65
         exit_if  # if_2
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b9 {
-  %b9 = block {
-    %60:void = call %main_1
-    %61:vec4<f32> = load %x_GLF_color
-    %62:main_out = construct %61
-    ret %62
+%tint_symbol = @fragment func():main_out {
+  $B9: {
+    %67:void = call %main_1
+    %68:vec4<f32> = load %x_GLF_color
+    %69:main_out = construct %68
+    ret %69
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-not-clamp-matrix-access/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-not-clamp-matrix-access/0-opt.wgsl.expected.ir.msl
index 1833c8e..6aeb1ac 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-not-clamp-matrix-access/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-not-clamp-matrix-access/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,108 +20,134 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_10:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %M1:ptr<function, mat2x2<f32>, read_write> = var
     %a:ptr<function, f32, read_write> = var
     %c:ptr<function, i32, read_write> = var
     %8:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-    %x_41:f32 = load %8
-    %10:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
-    %x_43:f32 = load %10
-    %12:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
-    %x_45:f32 = load %12
-    %14:ptr<uniform, f32, read> = access %x_6, 0u, 4i, 0u
-    %x_47:f32 = load %14
-    %16:vec2<f32> = construct %x_41, %x_43
-    %17:vec2<f32> = construct %x_45, %x_47
-    %18:mat2x2<f32> = construct %16, %17
-    store %M1, %18
-    %19:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-    %x_52:f32 = load %19
+    %9:f32 = load %8
+    %x_41:f32 = let %9
+    %11:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
+    %12:f32 = load %11
+    %x_43:f32 = let %12
+    %14:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
+    %15:f32 = load %14
+    %x_45:f32 = let %15
+    %17:ptr<uniform, f32, read> = access %x_6, 0u, 4i, 0u
+    %18:f32 = load %17
+    %x_47:f32 = let %18
+    %20:vec2<f32> = construct %x_41, %x_43
+    %21:vec2<f32> = let %20
+    %22:vec2<f32> = construct %x_45, %x_47
+    %23:mat2x2<f32> = construct %21, %22
+    store %M1, %23
+    %24:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+    %25:f32 = load %24
+    %x_52:f32 = let %25
     store %a, %x_52
-    %21:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-    %x_54:i32 = load %21
+    %27:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+    %28:i32 = load %27
+    %x_54:i32 = let %28
     store %c, %x_54
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_59:i32 = load %c
-        %24:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %x_61:i32 = load %24
-        %26:bool = lt %x_59, %x_61
-        if %26 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %30:i32 = load %c
+        %x_59:i32 = let %30
+        %32:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %33:i32 = load %32
+        %x_61:i32 = let %33
+        %35:bool = lt %x_59, %x_61
+        if %35 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %27:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-        %x_65:i32 = load %27
-        %x_66:i32 = load %c
-        %30:ptr<function, vec2<f32>, read_write> = access %M1, %x_65
-        %31:i32 = complement %x_66
-        %32:i32 = clamp %31, 0i, 1i
-        %x_70:f32 = load_vector_element %30, %32
-        %x_71:f32 = load %a
-        %35:f32 = add %x_71, %x_70
-        store %a, %35
-        continue %b4
+        %36:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+        %37:i32 = load %36
+        %x_65:i32 = let %37
+        %39:i32 = load %c
+        %x_66:i32 = let %39
+        %41:ptr<function, vec2<f32>, read_write> = access %M1, %x_65
+        %42:i32 = complement %x_66
+        %43:i32 = max %42, 0i
+        %44:i32 = min %43, 1i
+        %45:f32 = load_vector_element %41, %44
+        %x_70:f32 = let %45
+        %47:f32 = load %a
+        %x_71:f32 = let %47
+        %49:f32 = add %x_71, %x_70
+        store %a, %49
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_73:i32 = load %c
-        %37:i32 = add %x_73, 1i
-        store %c, %37
-        next_iteration %b3
+      $B4: {  # continuing
+        %50:i32 = load %c
+        %x_73:i32 = let %50
+        %52:i32 = add %x_73, 1i
+        store %c, %52
+        next_iteration  # -> $B3
       }
     }
-    %x_75:f32 = load %a
-    %39:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_77:f32 = load %39
-    %41:bool = eq %x_75, %x_77
-    if %41 [t: %b7, f: %b8] {  # if_2
-      %b7 = block {  # true
-        %42:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-        %x_83:i32 = load %42
-        %44:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %x_86:i32 = load %44
-        %46:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %x_89:i32 = load %46
-        %48:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-        %x_92:i32 = load %48
-        %50:f32 = convert %x_83
-        %51:f32 = convert %x_86
-        %52:f32 = convert %x_89
-        %53:f32 = convert %x_92
-        %54:vec4<f32> = construct %50, %51, %52, %53
-        store %x_GLF_color, %54
+    %53:f32 = load %a
+    %x_75:f32 = let %53
+    %55:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %56:f32 = load %55
+    %x_77:f32 = let %56
+    %58:bool = eq %x_75, %x_77
+    if %58 [t: $B7, f: $B8] {  # if_2
+      $B7: {  # true
+        %59:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+        %60:i32 = load %59
+        %x_83:i32 = let %60
+        %62:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %63:i32 = load %62
+        %x_86:i32 = let %63
+        %65:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %66:i32 = load %65
+        %x_89:i32 = let %66
+        %68:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+        %69:i32 = load %68
+        %x_92:i32 = let %69
+        %71:f32 = convert %x_83
+        %72:f32 = let %71
+        %73:f32 = convert %x_86
+        %74:f32 = let %73
+        %75:f32 = convert %x_89
+        %76:f32 = let %75
+        %77:f32 = convert %x_92
+        %78:vec4<f32> = construct %72, %74, %76, %77
+        store %x_GLF_color, %78
         exit_if  # if_2
       }
-      %b8 = block {  # false
-        %55:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-        %x_96:i32 = load %55
-        %x_97:f32 = convert %x_96
-        %58:vec4<f32> = construct %x_97, %x_97, %x_97, %x_97
-        store %x_GLF_color, %58
+      $B8: {  # false
+        %79:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+        %80:i32 = load %79
+        %x_96:i32 = let %80
+        %82:f32 = convert %x_96
+        %x_97:f32 = let %82
+        %84:vec4<f32> = construct %x_97, %x_97, %x_97, %x_97
+        store %x_GLF_color, %84
         exit_if  # if_2
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b9 {
-  %b9 = block {
-    %60:void = call %main_1
-    %61:vec4<f32> = load %x_GLF_color
-    %62:main_out = construct %61
-    ret %62
+%tint_symbol = @fragment func():main_out {
+  $B9: {
+    %86:void = call %main_1
+    %87:vec4<f32> = load %x_GLF_color
+    %88:main_out = construct %87
+    ret %88
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-one-minus-clamp-always-one-cast-to-int/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-one-minus-clamp-always-one-cast-to-int/0-opt.spvasm.expected.ir.msl
index 6d6b4b8..5422cc6 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-one-minus-clamp-always-one-cast-to-int/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-one-minus-clamp-always-one-cast-to-int/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,61 +12,74 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %f:ptr<function, f32, read_write> = var
     %a:ptr<function, i32, read_write> = var
     store %f, 2.0f
     %6:f32 = load %f
     %7:f32 = clamp 1.0f, 1.0f, %6
     %8:f32 = sub 1.0f, %7
-    %9:i32 = convert %8
+    %9:i32 = call %tint_f32_to_i32, %8
     store %a, %9
-    %10:i32 = load %a
-    %11:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-    %12:i32 = load %11
-    %13:bool = eq %10, %12
-    if %13 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %14:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %15:i32 = load %14
-        %16:f32 = convert %15
-        %17:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %18:i32 = load %17
-        %19:f32 = convert %18
-        %20:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %21:i32 = load %20
-        %22:f32 = convert %21
-        %23:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+    %11:i32 = load %a
+    %12:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+    %13:i32 = load %12
+    %14:bool = eq %11, %13
+    if %14 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %15:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %16:i32 = load %15
+        %17:f32 = convert %16
+        %18:f32 = let %17
+        %19:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %20:i32 = load %19
+        %21:f32 = convert %20
+        %22:f32 = let %21
+        %23:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
         %24:i32 = load %23
         %25:f32 = convert %24
-        %26:vec4<f32> = construct %16, %19, %22, %25
-        store %x_GLF_color, %26
-        exit_if  # if_1
-      }
-      %b4 = block {  # false
-        %27:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %26:f32 = let %25
+        %27:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
         %28:i32 = load %27
         %29:f32 = convert %28
-        %30:vec4<f32> = construct %29
+        %30:vec4<f32> = construct %18, %22, %26, %29
         store %x_GLF_color, %30
         exit_if  # if_1
       }
+      $B4: {  # false
+        %31:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %32:i32 = load %31
+        %33:f32 = convert %32
+        %34:vec4<f32> = construct %33
+        store %x_GLF_color, %34
+        exit_if  # if_1
+      }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %32:void = call %main_1
-    %33:vec4<f32> = load %x_GLF_color
-    %34:main_out = construct %33
-    ret %34
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %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 {
+  $B6: {
+    %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
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-one-minus-clamp-always-one-cast-to-int/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-one-minus-clamp-always-one-cast-to-int/0-opt.wgsl.expected.ir.msl
index 7651745..7590d78 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-one-minus-clamp-always-one-cast-to-int/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-one-minus-clamp-always-one-cast-to-int/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,61 +12,83 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %f:ptr<function, f32, read_write> = var
     %a:ptr<function, i32, read_write> = var
     store %f, 2.0f
-    %x_27:f32 = load %f
-    %7:f32 = clamp 1.0f, 1.0f, %x_27
-    %8:f32 = sub 1.0f, %7
-    %9:i32 = convert %8
-    store %a, %9
-    %x_31:i32 = load %a
-    %11:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-    %x_33:i32 = load %11
-    %13:bool = eq %x_31, %x_33
-    if %13 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %14:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %x_39:i32 = load %14
-        %16:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %x_42:i32 = load %16
-        %18:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %x_45:i32 = load %18
-        %20:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %x_48:i32 = load %20
-        %22:f32 = convert %x_39
-        %23:f32 = convert %x_42
-        %24:f32 = convert %x_45
-        %25:f32 = convert %x_48
-        %26:vec4<f32> = construct %22, %23, %24, %25
-        store %x_GLF_color, %26
+    %6:f32 = load %f
+    %x_27:f32 = let %6
+    %8:f32 = clamp 1.0f, 1.0f, %x_27
+    %9:f32 = sub 1.0f, %8
+    %10:i32 = call %tint_f32_to_i32, %9
+    store %a, %10
+    %12:i32 = load %a
+    %x_31:i32 = let %12
+    %14:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+    %15:i32 = load %14
+    %x_33:i32 = let %15
+    %17:bool = eq %x_31, %x_33
+    if %17 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %18:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %19:i32 = load %18
+        %x_39:i32 = let %19
+        %21:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %22:i32 = load %21
+        %x_42:i32 = let %22
+        %24:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %25:i32 = load %24
+        %x_45:i32 = let %25
+        %27:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %28:i32 = load %27
+        %x_48:i32 = let %28
+        %30:f32 = convert %x_39
+        %31:f32 = let %30
+        %32:f32 = convert %x_42
+        %33:f32 = let %32
+        %34:f32 = convert %x_45
+        %35:f32 = let %34
+        %36:f32 = convert %x_48
+        %37:vec4<f32> = construct %31, %33, %35, %36
+        store %x_GLF_color, %37
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %27:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %x_52:i32 = load %27
-        %x_53:f32 = convert %x_52
-        %30:vec4<f32> = construct %x_53, %x_53, %x_53, %x_53
-        store %x_GLF_color, %30
+      $B4: {  # false
+        %38:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %39:i32 = load %38
+        %x_52:i32 = let %39
+        %41:f32 = convert %x_52
+        %x_53:f32 = let %41
+        %43:vec4<f32> = construct %x_53, %x_53, %x_53, %x_53
+        store %x_GLF_color, %43
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %32:void = call %main_1
-    %33:vec4<f32> = load %x_GLF_color
-    %34:main_out = construct %33
-    ret %34
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %45:void = call %main_1
+    %46:vec4<f32> = load %x_GLF_color
+    %47:main_out = construct %46
+    ret %47
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B6: {
+    %49:i32 = convert %value
+    %50:bool = gte %value, -2147483648.0f
+    %51:i32 = select -2147483648i, %49, %50
+    %52:bool = lte %value, 2147483520.0f
+    %53:i32 = select 2147483647i, %51, %52
+    ret %53
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for-for-do-while-if-if/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for-for-do-while-if-if/0-opt.spvasm.expected.ir.msl
index 6afd172..e7e9c57 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for-for-do-while-if-if/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for-for-do-while-if-if/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,147 +20,160 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_7:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_11:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %j:ptr<function, i32, read_write> = var
-    %9:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
-    %10:i32 = load %9
-    store %a, %10
-    %11:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
-    %12:i32 = load %11
-    store %i, %12
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %13:i32 = load %i
-        %14:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %15:i32 = load %14
-        %16:bool = lt %13, %15
-        if %16 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    %10:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
+    %11:i32 = load %10
+    store %a, %11
+    %12:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
+    %13:i32 = load %12
+    store %i, %13
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %14:i32 = load %i
+        %15:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %16:i32 = load %15
+        %17:bool = lt %14, %16
+        if %17 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %17:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
-        %18:i32 = load %17
-        store %j, %18
-        loop [b: %b7, c: %b8] {  # loop_2
-          %b7 = block {  # body
-            %19:i32 = load %j
-            %20:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-            %21:i32 = load %20
-            %22:bool = lt %19, %21
-            if %22 [t: %b9, f: %b10] {  # if_2
-              %b9 = block {  # true
+        %18:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
+        %19:i32 = load %18
+        store %j, %19
+        loop [b: $B7, c: $B8] {  # loop_2
+          $B7: {  # body
+            %20:i32 = load %j
+            %21:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+            %22:i32 = load %21
+            %23:bool = lt %20, %22
+            if %23 [t: $B9, f: $B10] {  # if_2
+              $B9: {  # true
                 exit_if  # if_2
               }
-              %b10 = block {  # false
+              $B10: {  # false
                 exit_loop  # loop_2
               }
             }
-            loop [b: %b11, c: %b12] {  # loop_3
-              %b11 = block {  # body
-                %23:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-                %24:i32 = load %23
-                store %a, %24
-                %25:f32 = load_vector_element %gl_FragCoord, 1u
-                %26:ptr<uniform, f32, read> = access %x_11, 0u, 0i, 0u
-                %27:f32 = load %26
-                %28:bool = lt %25, %27
-                if %28 [t: %b13] {  # if_3
-                  %b13 = block {  # true
-                    discard
+            loop [b: $B11, c: $B12] {  # loop_3
+              $B11: {  # body
+                %24:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+                %25:i32 = load %24
+                store %a, %25
+                %26:f32 = load_vector_element %gl_FragCoord, 1u
+                %27:ptr<uniform, f32, read> = access %x_11, 0u, 0i, 0u
+                %28:f32 = load %27
+                %29:bool = lt %26, %28
+                if %29 [t: $B13] {  # if_3
+                  $B13: {  # true
+                    store %continue_execution, false
                     exit_if  # if_3
                   }
                 }
-                continue %b12
+                continue  # -> $B12
               }
-              %b12 = block {  # continuing
-                %x_72:i32 = load %a
-                %30:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-                %x_74:i32 = load %30
-                %32:bool = lt %x_72, %x_74
-                %33:bool = eq %32, false
-                break_if %33 %b11
+              $B12: {  # continuing
+                %30:i32 = load %a
+                %x_72:i32 = let %30
+                %32:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+                %33:i32 = load %32
+                %x_74:i32 = let %33
+                %35:bool = lt %x_72, %x_74
+                %36:bool = eq %35, false
+                break_if %36  # -> [t: exit_loop loop_3, f: $B11]
               }
             }
-            %34:f32 = load_vector_element %gl_FragCoord, 1u
-            %35:ptr<uniform, f32, read> = access %x_11, 0u, 0i, 0u
-            %36:f32 = load %35
-            %37:bool = lt %34, %36
-            if %37 [t: %b14] {  # if_4
-              %b14 = block {  # true
+            %37:f32 = load_vector_element %gl_FragCoord, 1u
+            %38:ptr<uniform, f32, read> = access %x_11, 0u, 0i, 0u
+            %39:f32 = load %38
+            %40:bool = lt %37, %39
+            if %40 [t: $B14] {  # if_4
+              $B14: {  # true
                 exit_loop  # loop_2
               }
             }
-            continue %b8
+            continue  # -> $B8
           }
-          %b8 = block {  # continuing
-            %38:i32 = load %j
-            %39:i32 = add %38, 1i
-            store %j, %39
-            next_iteration %b7
+          $B8: {  # continuing
+            %41:i32 = load %j
+            %42:i32 = add %41, 1i
+            store %j, %42
+            next_iteration  # -> $B7
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %40:i32 = load %i
-        %41:i32 = add %40, 1i
-        store %i, %41
-        next_iteration %b3
+      $B4: {  # continuing
+        %43:i32 = load %i
+        %44:i32 = add %43, 1i
+        store %i, %44
+        next_iteration  # -> $B3
       }
     }
-    %42:i32 = load %a
-    %43:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-    %44:i32 = load %43
-    %45:bool = eq %42, %44
-    if %45 [t: %b15, f: %b16] {  # if_5
-      %b15 = block {  # true
-        %46:i32 = load %a
-        %47:f32 = convert %46
-        %48:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
-        %49:i32 = load %48
+    %45:i32 = load %a
+    %46:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+    %47:i32 = load %46
+    %48:bool = eq %45, %47
+    if %48 [t: $B15, f: $B16] {  # if_5
+      $B15: {  # true
+        %49:i32 = load %a
         %50:f32 = convert %49
-        %51:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
-        %52:i32 = load %51
-        %53:f32 = convert %52
-        %54:i32 = load %a
-        %55:f32 = convert %54
-        %56:vec4<f32> = construct %47, %50, %53, %55
-        store %x_GLF_color, %56
+        %51:f32 = let %50
+        %52:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
+        %53:i32 = load %52
+        %54:f32 = convert %53
+        %55:f32 = let %54
+        %56:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
+        %57:i32 = load %56
+        %58:f32 = convert %57
+        %59:f32 = let %58
+        %60:i32 = load %a
+        %61:f32 = convert %60
+        %62:vec4<f32> = construct %51, %55, %59, %61
+        store %x_GLF_color, %62
         exit_if  # if_5
       }
-      %b16 = block {  # false
-        %57:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
-        %58:i32 = load %57
-        %59:f32 = convert %58
-        %60:vec4<f32> = construct %59
-        store %x_GLF_color, %60
+      $B16: {  # false
+        %63:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
+        %64:i32 = load %63
+        %65:f32 = convert %64
+        %66:vec4<f32> = construct %65
+        store %x_GLF_color, %66
         exit_if  # if_5
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b17 {
-  %b17 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B17: {
     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
+    %69:void = call %main_1
+    %70:vec4<f32> = load %x_GLF_color
+    %71:main_out = construct %70
+    %72:bool = load %continue_execution
+    %73:bool = eq %72, false
+    if %73 [t: $B18] {  # if_6
+      $B18: {  # true
+        terminate_invocation
+      }
+    }
+    ret %71
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for-for-do-while-if-if/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for-for-do-while-if-if/0-opt.wgsl.expected.ir.msl
index bef51b0..9acdf4d 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for-for-do-while-if-if/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for-for-do-while-if-if/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,147 +20,182 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_7:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_11:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %j:ptr<function, i32, read_write> = var
-    %9:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
-    %x_36:i32 = load %9
+    %10:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
+    %11:i32 = load %10
+    %x_36:i32 = let %11
     store %a, %x_36
-    %11:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
-    %x_38:i32 = load %11
+    %13:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
+    %14:i32 = load %13
+    %x_38:i32 = let %14
     store %i, %x_38
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_43:i32 = load %i
-        %14:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %x_45:i32 = load %14
-        %16:bool = lt %x_43, %x_45
-        if %16 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %16:i32 = load %i
+        %x_43:i32 = let %16
+        %18:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %19:i32 = load %18
+        %x_45:i32 = let %19
+        %21:bool = lt %x_43, %x_45
+        if %21 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %17:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
-        %x_49:i32 = load %17
+        %22:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
+        %23:i32 = load %22
+        %x_49:i32 = let %23
         store %j, %x_49
-        loop [b: %b7, c: %b8] {  # loop_2
-          %b7 = block {  # body
-            %x_54:i32 = load %j
-            %20:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-            %x_56:i32 = load %20
-            %22:bool = lt %x_54, %x_56
-            if %22 [t: %b9, f: %b10] {  # if_2
-              %b9 = block {  # true
+        loop [b: $B7, c: $B8] {  # loop_2
+          $B7: {  # body
+            %25:i32 = load %j
+            %x_54:i32 = let %25
+            %27:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+            %28:i32 = load %27
+            %x_56:i32 = let %28
+            %30:bool = lt %x_54, %x_56
+            if %30 [t: $B9, f: $B10] {  # if_2
+              $B9: {  # true
                 exit_if  # if_2
               }
-              %b10 = block {  # false
+              $B10: {  # false
                 exit_loop  # loop_2
               }
             }
-            loop [b: %b11, c: %b12] {  # loop_3
-              %b11 = block {  # body
-                %23:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-                %x_64:i32 = load %23
+            loop [b: $B11, c: $B12] {  # loop_3
+              $B11: {  # body
+                %31:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+                %32:i32 = load %31
+                %x_64:i32 = let %32
                 store %a, %x_64
-                %x_66:f32 = load_vector_element %gl_FragCoord, 1u
-                %26:ptr<uniform, f32, read> = access %x_11, 0u, 0i, 0u
-                %x_68:f32 = load %26
-                %28:bool = lt %x_66, %x_68
-                if %28 [t: %b13] {  # if_3
-                  %b13 = block {  # true
-                    discard
+                %34:f32 = load_vector_element %gl_FragCoord, 1u
+                %x_66:f32 = let %34
+                %36:ptr<uniform, f32, read> = access %x_11, 0u, 0i, 0u
+                %37:f32 = load %36
+                %x_68:f32 = let %37
+                %39:bool = lt %x_66, %x_68
+                if %39 [t: $B13] {  # if_3
+                  $B13: {  # true
+                    store %continue_execution, false
                     exit_if  # if_3
                   }
                 }
-                continue %b12
+                continue  # -> $B12
               }
-              %b12 = block {  # continuing
-                %x_72:i32 = load %a
-                %30:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-                %x_74:i32 = load %30
-                %32:bool = lt %x_72, %x_74
-                %33:bool = eq %32, false
-                break_if %33 %b11
+              $B12: {  # continuing
+                %40:i32 = load %a
+                %x_72:i32 = let %40
+                %42:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+                %43:i32 = load %42
+                %x_74:i32 = let %43
+                %45:bool = lt %x_72, %x_74
+                %46:bool = eq %45, false
+                break_if %46  # -> [t: exit_loop loop_3, f: $B11]
               }
             }
-            %x_77:f32 = load_vector_element %gl_FragCoord, 1u
-            %35:ptr<uniform, f32, read> = access %x_11, 0u, 0i, 0u
-            %x_79:f32 = load %35
-            %37:bool = lt %x_77, %x_79
-            if %37 [t: %b14] {  # if_4
-              %b14 = block {  # true
+            %47:f32 = load_vector_element %gl_FragCoord, 1u
+            %x_77:f32 = let %47
+            %49:ptr<uniform, f32, read> = access %x_11, 0u, 0i, 0u
+            %50:f32 = load %49
+            %x_79:f32 = let %50
+            %52:bool = lt %x_77, %x_79
+            if %52 [t: $B14] {  # if_4
+              $B14: {  # true
                 exit_loop  # loop_2
               }
             }
-            continue %b8
+            continue  # -> $B8
           }
-          %b8 = block {  # continuing
-            %x_83:i32 = load %j
-            %39:i32 = add %x_83, 1i
-            store %j, %39
-            next_iteration %b7
+          $B8: {  # continuing
+            %53:i32 = load %j
+            %x_83:i32 = let %53
+            %55:i32 = add %x_83, 1i
+            store %j, %55
+            next_iteration  # -> $B7
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_85:i32 = load %i
-        %41:i32 = add %x_85, 1i
-        store %i, %41
-        next_iteration %b3
+      $B4: {  # continuing
+        %56:i32 = load %i
+        %x_85:i32 = let %56
+        %58:i32 = add %x_85, 1i
+        store %i, %58
+        next_iteration  # -> $B3
       }
     }
-    %x_87:i32 = load %a
-    %43:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-    %x_89:i32 = load %43
-    %45:bool = eq %x_87, %x_89
-    if %45 [t: %b15, f: %b16] {  # if_5
-      %b15 = block {  # true
-        %x_94:i32 = load %a
-        %47:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
-        %x_97:i32 = load %47
-        %49:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
-        %x_100:i32 = load %49
-        %x_102:i32 = load %a
-        %52:f32 = convert %x_94
-        %53:f32 = convert %x_97
-        %54:f32 = convert %x_100
-        %55:f32 = convert %x_102
-        %56:vec4<f32> = construct %52, %53, %54, %55
-        store %x_GLF_color, %56
+    %59:i32 = load %a
+    %x_87:i32 = let %59
+    %61:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+    %62:i32 = load %61
+    %x_89:i32 = let %62
+    %64:bool = eq %x_87, %x_89
+    if %64 [t: $B15, f: $B16] {  # if_5
+      $B15: {  # true
+        %65:i32 = load %a
+        %x_94:i32 = let %65
+        %67:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
+        %68:i32 = load %67
+        %x_97:i32 = let %68
+        %70:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
+        %71:i32 = load %70
+        %x_100:i32 = let %71
+        %73:i32 = load %a
+        %x_102:i32 = let %73
+        %75:f32 = convert %x_94
+        %76:f32 = let %75
+        %77:f32 = convert %x_97
+        %78:f32 = let %77
+        %79:f32 = convert %x_100
+        %80:f32 = let %79
+        %81:f32 = convert %x_102
+        %82:vec4<f32> = construct %76, %78, %80, %81
+        store %x_GLF_color, %82
         exit_if  # if_5
       }
-      %b16 = block {  # false
-        %57:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
-        %x_106:i32 = load %57
-        %x_107:f32 = convert %x_106
-        %60:vec4<f32> = construct %x_107, %x_107, %x_107, %x_107
-        store %x_GLF_color, %60
+      $B16: {  # false
+        %83:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
+        %84:i32 = load %83
+        %x_106:i32 = let %84
+        %86:f32 = convert %x_106
+        %x_107:f32 = let %86
+        %88:vec4<f32> = construct %x_107, %x_107, %x_107, %x_107
+        store %x_GLF_color, %88
         exit_if  # if_5
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b17 {
-  %b17 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B17: {
     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
+    %91:void = call %main_1
+    %92:vec4<f32> = load %x_GLF_color
+    %93:main_out = construct %92
+    %94:bool = load %continue_execution
+    %95:bool = eq %94, false
+    if %95 [t: $B18] {  # if_6
+      $B18: {  # true
+        terminate_invocation
+      }
+    }
+    ret %93
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for/0-opt.spvasm.expected.ir.msl
index 5a7f941..df3b414 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,15 +20,15 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_11: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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, f32, read_write> = var
     %b:ptr<function, f32, read_write> = var
     %i:ptr<function, i32, read_write> = var
@@ -51,187 +51,187 @@
     %23:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
     %24:i32 = load %23
     store %i, %24
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %25:i32 = load %i
         %26:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
         %27:i32 = load %26
         %28:bool = lt %25, %27
-        if %28 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %28 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
         %29:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
         %30:i32 = load %29
         store %i_1, %30
-        loop [b: %b7, c: %b8] {  # loop_2
-          %b7 = block {  # body
+        loop [b: $B7, c: $B8] {  # loop_2
+          $B7: {  # body
             %31:i32 = load %i_1
             %32:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
             %33:i32 = load %32
             %34:bool = lt %31, %33
-            if %34 [t: %b9, f: %b10] {  # if_2
-              %b9 = block {  # true
+            if %34 [t: $B9, f: $B10] {  # if_2
+              $B9: {  # true
                 exit_if  # if_2
               }
-              %b10 = block {  # false
+              $B10: {  # false
                 exit_loop  # loop_2
               }
             }
             %35:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
             %36:i32 = load %35
             store %i_2, %36
-            loop [b: %b11, c: %b12] {  # loop_3
-              %b11 = block {  # body
+            loop [b: $B11, c: $B12] {  # loop_3
+              $B11: {  # body
                 %37:i32 = load %i_2
                 %38:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
                 %39:i32 = load %38
                 %40:bool = lt %37, %39
-                if %40 [t: %b13, f: %b14] {  # if_3
-                  %b13 = block {  # true
+                if %40 [t: $B13, f: $B14] {  # if_3
+                  $B13: {  # true
                     exit_if  # if_3
                   }
-                  %b14 = block {  # false
+                  $B14: {  # false
                     exit_loop  # loop_3
                   }
                 }
                 %41:ptr<uniform, i32, read> = access %x_11, 0u, 2i, 0u
                 %42:i32 = load %41
                 store %i_3, %42
-                loop [b: %b15, c: %b16] {  # loop_4
-                  %b15 = block {  # body
+                loop [b: $B15, c: $B16] {  # loop_4
+                  $B15: {  # body
                     %43:i32 = load %i_3
                     %44:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
                     %45:i32 = load %44
                     %46:bool = lt %43, %45
-                    if %46 [t: %b17, f: %b18] {  # if_4
-                      %b17 = block {  # true
+                    if %46 [t: $B17, f: $B18] {  # if_4
+                      $B17: {  # true
                         exit_if  # if_4
                       }
-                      %b18 = block {  # false
+                      $B18: {  # false
                         exit_loop  # loop_4
                       }
                     }
                     %47:ptr<uniform, i32, read> = access %x_11, 0u, 2i, 0u
                     %48:i32 = load %47
                     store %i_4, %48
-                    loop [b: %b19, c: %b20] {  # loop_5
-                      %b19 = block {  # body
+                    loop [b: $B19, c: $B20] {  # loop_5
+                      $B19: {  # body
                         %49:i32 = load %i_4
                         %50:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
                         %51:i32 = load %50
                         %52:bool = lt %49, %51
-                        if %52 [t: %b21, f: %b22] {  # if_5
-                          %b21 = block {  # true
+                        if %52 [t: $B21, f: $B22] {  # if_5
+                          $B21: {  # true
                             exit_if  # if_5
                           }
-                          %b22 = block {  # false
+                          $B22: {  # false
                             exit_loop  # loop_5
                           }
                         }
                         %53:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
                         %54:i32 = load %53
                         store %i_5, %54
-                        loop [b: %b23, c: %b24] {  # loop_6
-                          %b23 = block {  # body
+                        loop [b: $B23, c: $B24] {  # loop_6
+                          $B23: {  # body
                             %55:i32 = load %i_5
                             %56:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
                             %57:i32 = load %56
                             %58:bool = lt %55, %57
-                            if %58 [t: %b25, f: %b26] {  # if_6
-                              %b25 = block {  # true
+                            if %58 [t: $B25, f: $B26] {  # if_6
+                              $B25: {  # true
                                 exit_if  # if_6
                               }
-                              %b26 = block {  # false
+                              $B26: {  # false
                                 exit_loop  # loop_6
                               }
                             }
                             %59:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
                             %60:i32 = load %59
                             store %i_6, %60
-                            loop [b: %b27, c: %b28] {  # loop_7
-                              %b27 = block {  # body
+                            loop [b: $B27, c: $B28] {  # loop_7
+                              $B27: {  # body
                                 %61:i32 = load %i_6
                                 %62:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
                                 %63:i32 = load %62
                                 %64:bool = lt %61, %63
-                                if %64 [t: %b29, f: %b30] {  # if_7
-                                  %b29 = block {  # true
+                                if %64 [t: $B29, f: $B30] {  # if_7
+                                  $B29: {  # true
                                     exit_if  # if_7
                                   }
-                                  %b30 = block {  # false
+                                  $B30: {  # false
                                     exit_loop  # loop_7
                                   }
                                 }
                                 %65:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
                                 %66:i32 = load %65
                                 store %i_7, %66
-                                loop [b: %b31, c: %b32] {  # loop_8
-                                  %b31 = block {  # body
+                                loop [b: $B31, c: $B32] {  # loop_8
+                                  $B31: {  # body
                                     %67:i32 = load %i_7
                                     %68:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
                                     %69:i32 = load %68
                                     %70:bool = lt %67, %69
-                                    if %70 [t: %b33, f: %b34] {  # if_8
-                                      %b33 = block {  # true
+                                    if %70 [t: $B33, f: $B34] {  # if_8
+                                      $B33: {  # true
                                         exit_if  # if_8
                                       }
-                                      %b34 = block {  # false
+                                      $B34: {  # false
                                         exit_loop  # loop_8
                                       }
                                     }
                                     %71:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
                                     %72:i32 = load %71
                                     store %i_8, %72
-                                    loop [b: %b35, c: %b36] {  # loop_9
-                                      %b35 = block {  # body
+                                    loop [b: $B35, c: $B36] {  # loop_9
+                                      $B35: {  # body
                                         %73:i32 = load %i_8
                                         %74:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
                                         %75:i32 = load %74
                                         %76:bool = lt %73, %75
-                                        if %76 [t: %b37, f: %b38] {  # if_9
-                                          %b37 = block {  # true
+                                        if %76 [t: $B37, f: $B38] {  # if_9
+                                          $B37: {  # true
                                             exit_if  # if_9
                                           }
-                                          %b38 = block {  # false
+                                          $B38: {  # false
                                             exit_loop  # loop_9
                                           }
                                         }
                                         %77:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
                                         %78:i32 = load %77
                                         store %i_9, %78
-                                        loop [b: %b39, c: %b40] {  # loop_10
-                                          %b39 = block {  # body
+                                        loop [b: $B39, c: $B40] {  # loop_10
+                                          $B39: {  # body
                                             %79:i32 = load %i_9
                                             %80:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
                                             %81:i32 = load %80
                                             %82:bool = lt %79, %81
-                                            if %82 [t: %b41, f: %b42] {  # if_10
-                                              %b41 = block {  # true
+                                            if %82 [t: $B41, f: $B42] {  # if_10
+                                              $B41: {  # true
                                                 exit_if  # if_10
                                               }
-                                              %b42 = block {  # false
+                                              $B42: {  # false
                                                 exit_loop  # loop_10
                                               }
                                             }
                                             %83:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
                                             %84:i32 = load %83
                                             store %i_10, %84
-                                            loop [b: %b43, c: %b44] {  # loop_11
-                                              %b43 = block {  # body
+                                            loop [b: $B43, c: $B44] {  # loop_11
+                                              $B43: {  # body
                                                 %85:i32 = load %i_10
                                                 %86:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
                                                 %87:i32 = load %86
                                                 %88:bool = lt %85, %87
-                                                if %88 [t: %b45, f: %b46] {  # if_11
-                                                  %b45 = block {  # true
+                                                if %88 [t: $B45, f: $B46] {  # if_11
+                                                  $B45: {  # true
                                                     exit_if  # if_11
                                                   }
-                                                  %b46 = block {  # false
+                                                  $B46: {  # false
                                                     exit_loop  # loop_11
                                                   }
                                                 }
@@ -242,111 +242,111 @@
                                                 %92:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
                                                 %93:f32 = load %92
                                                 %94:bool = gt %91, %93
-                                                if %94 [t: %b47] {  # if_12
-                                                  %b47 = block {  # true
+                                                if %94 [t: $B47] {  # if_12
+                                                  $B47: {  # true
                                                     exit_loop  # loop_11
                                                   }
                                                 }
-                                                continue %b44
+                                                continue  # -> $B44
                                               }
-                                              %b44 = block {  # continuing
+                                              $B44: {  # continuing
                                                 %95:i32 = load %i_10
                                                 %96:i32 = add %95, 1i
                                                 store %i_10, %96
-                                                next_iteration %b43
+                                                next_iteration  # -> $B43
                                               }
                                             }
-                                            continue %b40
+                                            continue  # -> $B40
                                           }
-                                          %b40 = block {  # continuing
+                                          $B40: {  # continuing
                                             %97:i32 = load %i_9
                                             %98:i32 = add %97, 1i
                                             store %i_9, %98
-                                            next_iteration %b39
+                                            next_iteration  # -> $B39
                                           }
                                         }
-                                        continue %b36
+                                        continue  # -> $B36
                                       }
-                                      %b36 = block {  # continuing
+                                      $B36: {  # continuing
                                         %99:i32 = load %i_8
                                         %100:i32 = add %99, 1i
                                         store %i_8, %100
-                                        next_iteration %b35
+                                        next_iteration  # -> $B35
                                       }
                                     }
-                                    continue %b32
+                                    continue  # -> $B32
                                   }
-                                  %b32 = block {  # continuing
+                                  $B32: {  # continuing
                                     %101:i32 = load %i_7
                                     %102:i32 = add %101, 1i
                                     store %i_7, %102
-                                    next_iteration %b31
+                                    next_iteration  # -> $B31
                                   }
                                 }
-                                continue %b28
+                                continue  # -> $B28
                               }
-                              %b28 = block {  # continuing
+                              $B28: {  # continuing
                                 %103:i32 = load %i_6
                                 %104:i32 = add %103, 1i
                                 store %i_6, %104
-                                next_iteration %b27
+                                next_iteration  # -> $B27
                               }
                             }
-                            continue %b24
+                            continue  # -> $B24
                           }
-                          %b24 = block {  # continuing
+                          $B24: {  # continuing
                             %105:i32 = load %i_5
                             %106:i32 = add %105, 1i
                             store %i_5, %106
-                            next_iteration %b23
+                            next_iteration  # -> $B23
                           }
                         }
-                        continue %b20
+                        continue  # -> $B20
                       }
-                      %b20 = block {  # continuing
+                      $B20: {  # continuing
                         %107:i32 = load %i_4
                         %108:i32 = add %107, 1i
                         store %i_4, %108
-                        next_iteration %b19
+                        next_iteration  # -> $B19
                       }
                     }
-                    continue %b16
+                    continue  # -> $B16
                   }
-                  %b16 = block {  # continuing
+                  $B16: {  # continuing
                     %109:i32 = load %i_3
                     %110:i32 = add %109, 1i
                     store %i_3, %110
-                    next_iteration %b15
+                    next_iteration  # -> $B15
                   }
                 }
-                continue %b12
+                continue  # -> $B12
               }
-              %b12 = block {  # continuing
+              $B12: {  # continuing
                 %111:i32 = load %i_2
                 %112:i32 = add %111, 1i
                 store %i_2, %112
-                next_iteration %b11
+                next_iteration  # -> $B11
               }
             }
-            continue %b8
+            continue  # -> $B8
           }
-          %b8 = block {  # continuing
+          $B8: {  # continuing
             %113:i32 = load %i_1
             %114:i32 = add %113, 1i
             store %i_1, %114
-            next_iteration %b7
+            next_iteration  # -> $B7
           }
         }
         %115:f32 = load %b
         %116:f32 = add %115, 1.0f
         store %b, %116
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
+      $B4: {  # continuing
         %117:i32 = load %i
         %118:i32 = add %117, 1i
         store %i, %118
-        next_iteration %b3
+        next_iteration  # -> $B3
       }
     }
     %119:f32 = load %b
@@ -358,8 +358,8 @@
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b48 {
-  %b48 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B48: {
     store %gl_FragCoord, %gl_FragCoord_param
     %126:void = call %main_1
     %127:vec4<f32> = load %x_GLF_color
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for/0-opt.wgsl.expected.ir.msl
index d8d7348..0b12333 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,15 +20,15 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_11: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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, f32, read_write> = var
     %b:ptr<function, f32, read_write> = var
     %i:ptr<function, i32, read_write> = var
@@ -43,328 +43,382 @@
     %i_9:ptr<function, i32, read_write> = var
     %i_10:ptr<function, i32, read_write> = var
     %19:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-    %x_104:f32 = load %19
+    %20:f32 = load %19
+    %x_104:f32 = let %20
     store %a, %x_104
-    %21:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
-    %x_106:f32 = load %21
+    %22:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
+    %23:f32 = load %22
+    %x_106:f32 = let %23
     store %b, %x_106
-    %23:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
-    %x_24:i32 = load %23
+    %25:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
+    %26:i32 = load %25
+    %x_24:i32 = let %26
     store %i, %x_24
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_25:i32 = load %i
-        %26:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
-        %x_26:i32 = load %26
-        %28:bool = lt %x_25, %x_26
-        if %28 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %28:i32 = load %i
+        %x_25:i32 = let %28
+        %30:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
+        %31:i32 = load %30
+        %x_26:i32 = let %31
+        %33:bool = lt %x_25, %x_26
+        if %33 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %29:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
-        %x_27:i32 = load %29
+        %34:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
+        %35:i32 = load %34
+        %x_27:i32 = let %35
         store %i_1, %x_27
-        loop [b: %b7, c: %b8] {  # loop_2
-          %b7 = block {  # body
-            %x_28:i32 = load %i_1
-            %32:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
-            %x_29:i32 = load %32
-            %34:bool = lt %x_28, %x_29
-            if %34 [t: %b9, f: %b10] {  # if_2
-              %b9 = block {  # true
+        loop [b: $B7, c: $B8] {  # loop_2
+          $B7: {  # body
+            %37:i32 = load %i_1
+            %x_28:i32 = let %37
+            %39:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
+            %40:i32 = load %39
+            %x_29:i32 = let %40
+            %42:bool = lt %x_28, %x_29
+            if %42 [t: $B9, f: $B10] {  # if_2
+              $B9: {  # true
                 exit_if  # if_2
               }
-              %b10 = block {  # false
+              $B10: {  # false
                 exit_loop  # loop_2
               }
             }
-            %35:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
-            %x_30:i32 = load %35
+            %43:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
+            %44:i32 = load %43
+            %x_30:i32 = let %44
             store %i_2, %x_30
-            loop [b: %b11, c: %b12] {  # loop_3
-              %b11 = block {  # body
-                %x_31:i32 = load %i_2
-                %38:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
-                %x_32:i32 = load %38
-                %40:bool = lt %x_31, %x_32
-                if %40 [t: %b13, f: %b14] {  # if_3
-                  %b13 = block {  # true
+            loop [b: $B11, c: $B12] {  # loop_3
+              $B11: {  # body
+                %46:i32 = load %i_2
+                %x_31:i32 = let %46
+                %48:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
+                %49:i32 = load %48
+                %x_32:i32 = let %49
+                %51:bool = lt %x_31, %x_32
+                if %51 [t: $B13, f: $B14] {  # if_3
+                  $B13: {  # true
                     exit_if  # if_3
                   }
-                  %b14 = block {  # false
+                  $B14: {  # false
                     exit_loop  # loop_3
                   }
                 }
-                %41:ptr<uniform, i32, read> = access %x_11, 0u, 2i, 0u
-                %x_33:i32 = load %41
+                %52:ptr<uniform, i32, read> = access %x_11, 0u, 2i, 0u
+                %53:i32 = load %52
+                %x_33:i32 = let %53
                 store %i_3, %x_33
-                loop [b: %b15, c: %b16] {  # loop_4
-                  %b15 = block {  # body
-                    %x_34:i32 = load %i_3
-                    %44:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
-                    %x_35:i32 = load %44
-                    %46:bool = lt %x_34, %x_35
-                    if %46 [t: %b17, f: %b18] {  # if_4
-                      %b17 = block {  # true
+                loop [b: $B15, c: $B16] {  # loop_4
+                  $B15: {  # body
+                    %55:i32 = load %i_3
+                    %x_34:i32 = let %55
+                    %57:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
+                    %58:i32 = load %57
+                    %x_35:i32 = let %58
+                    %60:bool = lt %x_34, %x_35
+                    if %60 [t: $B17, f: $B18] {  # if_4
+                      $B17: {  # true
                         exit_if  # if_4
                       }
-                      %b18 = block {  # false
+                      $B18: {  # false
                         exit_loop  # loop_4
                       }
                     }
-                    %47:ptr<uniform, i32, read> = access %x_11, 0u, 2i, 0u
-                    %x_36:i32 = load %47
+                    %61:ptr<uniform, i32, read> = access %x_11, 0u, 2i, 0u
+                    %62:i32 = load %61
+                    %x_36:i32 = let %62
                     store %i_4, %x_36
-                    loop [b: %b19, c: %b20] {  # loop_5
-                      %b19 = block {  # body
-                        %x_37:i32 = load %i_4
-                        %50:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
-                        %x_38:i32 = load %50
-                        %52:bool = lt %x_37, %x_38
-                        if %52 [t: %b21, f: %b22] {  # if_5
-                          %b21 = block {  # true
+                    loop [b: $B19, c: $B20] {  # loop_5
+                      $B19: {  # body
+                        %64:i32 = load %i_4
+                        %x_37:i32 = let %64
+                        %66:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
+                        %67:i32 = load %66
+                        %x_38:i32 = let %67
+                        %69:bool = lt %x_37, %x_38
+                        if %69 [t: $B21, f: $B22] {  # if_5
+                          $B21: {  # true
                             exit_if  # if_5
                           }
-                          %b22 = block {  # false
+                          $B22: {  # false
                             exit_loop  # loop_5
                           }
                         }
-                        %53:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
-                        %x_39:i32 = load %53
+                        %70:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
+                        %71:i32 = load %70
+                        %x_39:i32 = let %71
                         store %i_5, %x_39
-                        loop [b: %b23, c: %b24] {  # loop_6
-                          %b23 = block {  # body
-                            %x_40:i32 = load %i_5
-                            %56:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
-                            %x_41:i32 = load %56
-                            %58:bool = lt %x_40, %x_41
-                            if %58 [t: %b25, f: %b26] {  # if_6
-                              %b25 = block {  # true
+                        loop [b: $B23, c: $B24] {  # loop_6
+                          $B23: {  # body
+                            %73:i32 = load %i_5
+                            %x_40:i32 = let %73
+                            %75:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
+                            %76:i32 = load %75
+                            %x_41:i32 = let %76
+                            %78:bool = lt %x_40, %x_41
+                            if %78 [t: $B25, f: $B26] {  # if_6
+                              $B25: {  # true
                                 exit_if  # if_6
                               }
-                              %b26 = block {  # false
+                              $B26: {  # false
                                 exit_loop  # loop_6
                               }
                             }
-                            %59:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
-                            %x_42:i32 = load %59
+                            %79:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
+                            %80:i32 = load %79
+                            %x_42:i32 = let %80
                             store %i_6, %x_42
-                            loop [b: %b27, c: %b28] {  # loop_7
-                              %b27 = block {  # body
-                                %x_43:i32 = load %i_6
-                                %62:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
-                                %x_44:i32 = load %62
-                                %64:bool = lt %x_43, %x_44
-                                if %64 [t: %b29, f: %b30] {  # if_7
-                                  %b29 = block {  # true
+                            loop [b: $B27, c: $B28] {  # loop_7
+                              $B27: {  # body
+                                %82:i32 = load %i_6
+                                %x_43:i32 = let %82
+                                %84:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
+                                %85:i32 = load %84
+                                %x_44:i32 = let %85
+                                %87:bool = lt %x_43, %x_44
+                                if %87 [t: $B29, f: $B30] {  # if_7
+                                  $B29: {  # true
                                     exit_if  # if_7
                                   }
-                                  %b30 = block {  # false
+                                  $B30: {  # false
                                     exit_loop  # loop_7
                                   }
                                 }
-                                %65:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
-                                %x_45:i32 = load %65
+                                %88:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
+                                %89:i32 = load %88
+                                %x_45:i32 = let %89
                                 store %i_7, %x_45
-                                loop [b: %b31, c: %b32] {  # loop_8
-                                  %b31 = block {  # body
-                                    %x_46:i32 = load %i_7
-                                    %68:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
-                                    %x_47:i32 = load %68
-                                    %70:bool = lt %x_46, %x_47
-                                    if %70 [t: %b33, f: %b34] {  # if_8
-                                      %b33 = block {  # true
+                                loop [b: $B31, c: $B32] {  # loop_8
+                                  $B31: {  # body
+                                    %91:i32 = load %i_7
+                                    %x_46:i32 = let %91
+                                    %93:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
+                                    %94:i32 = load %93
+                                    %x_47:i32 = let %94
+                                    %96:bool = lt %x_46, %x_47
+                                    if %96 [t: $B33, f: $B34] {  # if_8
+                                      $B33: {  # true
                                         exit_if  # if_8
                                       }
-                                      %b34 = block {  # false
+                                      $B34: {  # false
                                         exit_loop  # loop_8
                                       }
                                     }
-                                    %71:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
-                                    %x_48:i32 = load %71
+                                    %97:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
+                                    %98:i32 = load %97
+                                    %x_48:i32 = let %98
                                     store %i_8, %x_48
-                                    loop [b: %b35, c: %b36] {  # loop_9
-                                      %b35 = block {  # body
-                                        %x_49:i32 = load %i_8
-                                        %74:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
-                                        %x_50:i32 = load %74
-                                        %76:bool = lt %x_49, %x_50
-                                        if %76 [t: %b37, f: %b38] {  # if_9
-                                          %b37 = block {  # true
+                                    loop [b: $B35, c: $B36] {  # loop_9
+                                      $B35: {  # body
+                                        %100:i32 = load %i_8
+                                        %x_49:i32 = let %100
+                                        %102:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
+                                        %103:i32 = load %102
+                                        %x_50:i32 = let %103
+                                        %105:bool = lt %x_49, %x_50
+                                        if %105 [t: $B37, f: $B38] {  # if_9
+                                          $B37: {  # true
                                             exit_if  # if_9
                                           }
-                                          %b38 = block {  # false
+                                          $B38: {  # false
                                             exit_loop  # loop_9
                                           }
                                         }
-                                        %77:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
-                                        %x_51:i32 = load %77
+                                        %106:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
+                                        %107:i32 = load %106
+                                        %x_51:i32 = let %107
                                         store %i_9, %x_51
-                                        loop [b: %b39, c: %b40] {  # loop_10
-                                          %b39 = block {  # body
-                                            %x_52:i32 = load %i_9
-                                            %80:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
-                                            %x_53:i32 = load %80
-                                            %82:bool = lt %x_52, %x_53
-                                            if %82 [t: %b41, f: %b42] {  # if_10
-                                              %b41 = block {  # true
+                                        loop [b: $B39, c: $B40] {  # loop_10
+                                          $B39: {  # body
+                                            %109:i32 = load %i_9
+                                            %x_52:i32 = let %109
+                                            %111:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
+                                            %112:i32 = load %111
+                                            %x_53:i32 = let %112
+                                            %114:bool = lt %x_52, %x_53
+                                            if %114 [t: $B41, f: $B42] {  # if_10
+                                              $B41: {  # true
                                                 exit_if  # if_10
                                               }
-                                              %b42 = block {  # false
+                                              $B42: {  # false
                                                 exit_loop  # loop_10
                                               }
                                             }
-                                            %83:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
-                                            %x_54:i32 = load %83
+                                            %115:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
+                                            %116:i32 = load %115
+                                            %x_54:i32 = let %116
                                             store %i_10, %x_54
-                                            loop [b: %b43, c: %b44] {  # loop_11
-                                              %b43 = block {  # body
-                                                %x_55:i32 = load %i_10
-                                                %86:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
-                                                %x_56:i32 = load %86
-                                                %88:bool = lt %x_55, %x_56
-                                                if %88 [t: %b45, f: %b46] {  # if_11
-                                                  %b45 = block {  # true
+                                            loop [b: $B43, c: $B44] {  # loop_11
+                                              $B43: {  # body
+                                                %118:i32 = load %i_10
+                                                %x_55:i32 = let %118
+                                                %120:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
+                                                %121:i32 = load %120
+                                                %x_56:i32 = let %121
+                                                %123:bool = lt %x_55, %x_56
+                                                if %123 [t: $B45, f: $B46] {  # if_11
+                                                  $B45: {  # true
                                                     exit_if  # if_11
                                                   }
-                                                  %b46 = block {  # false
+                                                  $B46: {  # false
                                                     exit_loop  # loop_11
                                                   }
                                                 }
-                                                %89:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
-                                                %x_196:f32 = load %89
+                                                %124:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
+                                                %125:f32 = load %124
+                                                %x_196:f32 = let %125
                                                 store %a, %x_196
-                                                %x_198:f32 = load_vector_element %gl_FragCoord, 1u
-                                                %92:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
-                                                %x_200:f32 = load %92
-                                                %94:bool = gt %x_198, %x_200
-                                                if %94 [t: %b47] {  # if_12
-                                                  %b47 = block {  # true
+                                                %127:f32 = load_vector_element %gl_FragCoord, 1u
+                                                %x_198:f32 = let %127
+                                                %129:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
+                                                %130:f32 = load %129
+                                                %x_200:f32 = let %130
+                                                %132:bool = gt %x_198, %x_200
+                                                if %132 [t: $B47] {  # if_12
+                                                  $B47: {  # true
                                                     exit_loop  # loop_11
                                                   }
                                                 }
-                                                continue %b44
+                                                continue  # -> $B44
                                               }
-                                              %b44 = block {  # continuing
-                                                %x_57:i32 = load %i_10
-                                                %96:i32 = add %x_57, 1i
-                                                store %i_10, %96
-                                                next_iteration %b43
+                                              $B44: {  # continuing
+                                                %133:i32 = load %i_10
+                                                %x_57:i32 = let %133
+                                                %135:i32 = add %x_57, 1i
+                                                store %i_10, %135
+                                                next_iteration  # -> $B43
                                               }
                                             }
-                                            continue %b40
+                                            continue  # -> $B40
                                           }
-                                          %b40 = block {  # continuing
-                                            %x_59:i32 = load %i_9
-                                            %98:i32 = add %x_59, 1i
-                                            store %i_9, %98
-                                            next_iteration %b39
+                                          $B40: {  # continuing
+                                            %136:i32 = load %i_9
+                                            %x_59:i32 = let %136
+                                            %138:i32 = add %x_59, 1i
+                                            store %i_9, %138
+                                            next_iteration  # -> $B39
                                           }
                                         }
-                                        continue %b36
+                                        continue  # -> $B36
                                       }
-                                      %b36 = block {  # continuing
-                                        %x_61:i32 = load %i_8
-                                        %100:i32 = add %x_61, 1i
-                                        store %i_8, %100
-                                        next_iteration %b35
+                                      $B36: {  # continuing
+                                        %139:i32 = load %i_8
+                                        %x_61:i32 = let %139
+                                        %141:i32 = add %x_61, 1i
+                                        store %i_8, %141
+                                        next_iteration  # -> $B35
                                       }
                                     }
-                                    continue %b32
+                                    continue  # -> $B32
                                   }
-                                  %b32 = block {  # continuing
-                                    %x_63:i32 = load %i_7
-                                    %102:i32 = add %x_63, 1i
-                                    store %i_7, %102
-                                    next_iteration %b31
+                                  $B32: {  # continuing
+                                    %142:i32 = load %i_7
+                                    %x_63:i32 = let %142
+                                    %144:i32 = add %x_63, 1i
+                                    store %i_7, %144
+                                    next_iteration  # -> $B31
                                   }
                                 }
-                                continue %b28
+                                continue  # -> $B28
                               }
-                              %b28 = block {  # continuing
-                                %x_65:i32 = load %i_6
-                                %104:i32 = add %x_65, 1i
-                                store %i_6, %104
-                                next_iteration %b27
+                              $B28: {  # continuing
+                                %145:i32 = load %i_6
+                                %x_65:i32 = let %145
+                                %147:i32 = add %x_65, 1i
+                                store %i_6, %147
+                                next_iteration  # -> $B27
                               }
                             }
-                            continue %b24
+                            continue  # -> $B24
                           }
-                          %b24 = block {  # continuing
-                            %x_67:i32 = load %i_5
-                            %106:i32 = add %x_67, 1i
-                            store %i_5, %106
-                            next_iteration %b23
+                          $B24: {  # continuing
+                            %148:i32 = load %i_5
+                            %x_67:i32 = let %148
+                            %150:i32 = add %x_67, 1i
+                            store %i_5, %150
+                            next_iteration  # -> $B23
                           }
                         }
-                        continue %b20
+                        continue  # -> $B20
                       }
-                      %b20 = block {  # continuing
-                        %x_69:i32 = load %i_4
-                        %108:i32 = add %x_69, 1i
-                        store %i_4, %108
-                        next_iteration %b19
+                      $B20: {  # continuing
+                        %151:i32 = load %i_4
+                        %x_69:i32 = let %151
+                        %153:i32 = add %x_69, 1i
+                        store %i_4, %153
+                        next_iteration  # -> $B19
                       }
                     }
-                    continue %b16
+                    continue  # -> $B16
                   }
-                  %b16 = block {  # continuing
-                    %x_71:i32 = load %i_3
-                    %110:i32 = add %x_71, 1i
-                    store %i_3, %110
-                    next_iteration %b15
+                  $B16: {  # continuing
+                    %154:i32 = load %i_3
+                    %x_71:i32 = let %154
+                    %156:i32 = add %x_71, 1i
+                    store %i_3, %156
+                    next_iteration  # -> $B15
                   }
                 }
-                continue %b12
+                continue  # -> $B12
               }
-              %b12 = block {  # continuing
-                %x_73:i32 = load %i_2
-                %112:i32 = add %x_73, 1i
-                store %i_2, %112
-                next_iteration %b11
+              $B12: {  # continuing
+                %157:i32 = load %i_2
+                %x_73:i32 = let %157
+                %159:i32 = add %x_73, 1i
+                store %i_2, %159
+                next_iteration  # -> $B11
               }
             }
-            continue %b8
+            continue  # -> $B8
           }
-          %b8 = block {  # continuing
-            %x_75:i32 = load %i_1
-            %114:i32 = add %x_75, 1i
-            store %i_1, %114
-            next_iteration %b7
+          $B8: {  # continuing
+            %160:i32 = load %i_1
+            %x_75:i32 = let %160
+            %162:i32 = add %x_75, 1i
+            store %i_1, %162
+            next_iteration  # -> $B7
           }
         }
-        %x_204:f32 = load %b
-        %116:f32 = add %x_204, 1.0f
-        store %b, %116
-        continue %b4
+        %163:f32 = load %b
+        %x_204:f32 = let %163
+        %165:f32 = add %x_204, 1.0f
+        store %b, %165
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_77:i32 = load %i
-        %118:i32 = add %x_77, 1i
-        store %i, %118
-        next_iteration %b3
+      $B4: {  # continuing
+        %166:i32 = load %i
+        %x_77:i32 = let %166
+        %168:i32 = add %x_77, 1i
+        store %i, %168
+        next_iteration  # -> $B3
       }
     }
-    %x_206:f32 = load %b
-    %x_207:f32 = load %a
-    %x_208:f32 = load %a
-    %x_209:f32 = load %b
-    %123:vec4<f32> = construct %x_206, %x_207, %x_208, %x_209
-    store %x_GLF_color, %123
+    %169:f32 = load %b
+    %x_206:f32 = let %169
+    %171:f32 = load %a
+    %x_207:f32 = let %171
+    %173:f32 = load %a
+    %x_208:f32 = let %173
+    %175:f32 = load %b
+    %x_209:f32 = let %175
+    %177:vec4<f32> = construct %x_206, %x_207, %x_208, %x_209
+    store %x_GLF_color, %177
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b48 {
-  %b48 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B48: {
     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
+    %180:void = call %main_1
+    %181:vec4<f32> = load %x_GLF_color
+    %182:main_out = construct %181
+    ret %182
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-packhalf-unpackunorm/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-packhalf-unpackunorm/0-opt.spvasm.expected.ir.msl
index dd9c0e8..c3f59bc 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-packhalf-unpackunorm/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-packhalf-unpackunorm/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,14 +20,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_8:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_10:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, u32, read_write> = var
     %values:ptr<function, vec4<f32>, read_write> = var
     %r:ptr<function, vec4<f32>, read_write> = var
@@ -70,108 +70,112 @@
     %41:f32 = abs %40
     %42:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
     %43:f32 = load %42
-    %x_70:bool = lt %41, %43
+    %44:bool = lt %41, %43
+    %x_70:bool = let %44
     store %x_86, %x_70
-    if %x_70 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %45:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %46:i32 = load %45
-        %47:f32 = load_vector_element %values, %46
-        %48:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %49:i32 = load %48
-        %50:f32 = load_vector_element %r, %49
-        %51:f32 = sub %47, %50
-        %52:f32 = abs %51
-        %53:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
-        %54:f32 = load %53
-        %55:bool = lt %52, %54
-        store %x_85, %55
-        %56:bool = load %x_85
-        store %x_86, %56
+    if %x_70 [t: $B3] {  # if_1
+      $B3: {  # true
+        %46:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %47:i32 = load %46
+        %48:f32 = load_vector_element %values, %47
+        %49:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %50:i32 = load %49
+        %51:f32 = load_vector_element %r, %50
+        %52:f32 = sub %48, %51
+        %53:f32 = abs %52
+        %54:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
+        %55:f32 = load %54
+        %56:bool = lt %53, %55
+        store %x_85, %56
+        %57:bool = load %x_85
+        store %x_86, %57
         exit_if  # if_1
       }
     }
-    %57:bool = load %x_86
-    store %x_102, %57
     %58:bool = load %x_86
-    if %58 [t: %b4] {  # if_2
-      %b4 = block {  # true
-        %59:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
-        %60:i32 = load %59
-        %61:f32 = load_vector_element %values, %60
-        %62:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
-        %63:i32 = load %62
-        %64:f32 = load_vector_element %r, %63
-        %65:f32 = sub %61, %64
-        %66:f32 = abs %65
-        %67:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
-        %68:f32 = load %67
-        %69:bool = lt %66, %68
-        store %x_101, %69
-        %70:bool = load %x_101
-        store %x_102, %70
+    store %x_102, %58
+    %59:bool = load %x_86
+    if %59 [t: $B4] {  # if_2
+      $B4: {  # true
+        %60:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
+        %61:i32 = load %60
+        %62:f32 = load_vector_element %values, %61
+        %63:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
+        %64:i32 = load %63
+        %65:f32 = load_vector_element %r, %64
+        %66:f32 = sub %62, %65
+        %67:f32 = abs %66
+        %68:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
+        %69:f32 = load %68
+        %70:bool = lt %67, %69
+        store %x_101, %70
+        %71:bool = load %x_101
+        store %x_102, %71
         exit_if  # if_2
       }
     }
-    %71:bool = load %x_102
-    store %x_118, %71
     %72:bool = load %x_102
-    if %72 [t: %b5] {  # if_3
-      %b5 = block {  # true
-        %73:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-        %74:i32 = load %73
-        %75:f32 = load_vector_element %values, %74
-        %76:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-        %77:i32 = load %76
-        %78:f32 = load_vector_element %r, %77
-        %79:f32 = sub %75, %78
-        %80:f32 = abs %79
-        %81:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
-        %82:f32 = load %81
-        %83:bool = lt %80, %82
-        store %x_117, %83
-        %84:bool = load %x_117
-        store %x_118, %84
+    store %x_118, %72
+    %73:bool = load %x_102
+    if %73 [t: $B5] {  # if_3
+      $B5: {  # true
+        %74:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+        %75:i32 = load %74
+        %76:f32 = load_vector_element %values, %75
+        %77:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+        %78:i32 = load %77
+        %79:f32 = load_vector_element %r, %78
+        %80:f32 = sub %76, %79
+        %81:f32 = abs %80
+        %82:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
+        %83:f32 = load %82
+        %84:bool = lt %81, %83
+        store %x_117, %84
+        %85:bool = load %x_117
+        store %x_118, %85
         exit_if  # if_3
       }
     }
-    %85:bool = load %x_118
-    if %85 [t: %b6, f: %b7] {  # if_4
-      %b6 = block {  # true
-        %86:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %87:i32 = load %86
-        %88:f32 = convert %87
-        %89:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %90:i32 = load %89
-        %91:f32 = convert %90
-        %92:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %93:i32 = load %92
-        %94:f32 = convert %93
-        %95:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+    %86:bool = load %x_118
+    if %86 [t: $B6, f: $B7] {  # if_4
+      $B6: {  # true
+        %87:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %88:i32 = load %87
+        %89:f32 = convert %88
+        %90:f32 = let %89
+        %91:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %92:i32 = load %91
+        %93:f32 = convert %92
+        %94:f32 = let %93
+        %95:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
         %96:i32 = load %95
         %97:f32 = convert %96
-        %98:vec4<f32> = construct %88, %91, %94, %97
-        store %x_GLF_color, %98
-        exit_if  # if_4
-      }
-      %b7 = block {  # false
-        %99:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %98:f32 = let %97
+        %99:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
         %100:i32 = load %99
         %101:f32 = convert %100
-        %102:vec4<f32> = construct %101
+        %102:vec4<f32> = construct %90, %94, %98, %101
         store %x_GLF_color, %102
         exit_if  # if_4
       }
+      $B7: {  # false
+        %103:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %104:i32 = load %103
+        %105:f32 = convert %104
+        %106:vec4<f32> = construct %105
+        store %x_GLF_color, %106
+        exit_if  # if_4
+      }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b8 {
-  %b8 = block {
-    %104:void = call %main_1
-    %105:vec4<f32> = load %x_GLF_color
-    %106:main_out = construct %105
-    ret %106
+%tint_symbol = @fragment func():main_out {
+  $B8: {
+    %108:void = call %main_1
+    %109:vec4<f32> = load %x_GLF_color
+    %110:main_out = construct %109
+    ret %110
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-packhalf-unpackunorm/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-packhalf-unpackunorm/0-opt.wgsl.expected.ir.msl
index e2408a5..89e9278 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-packhalf-unpackunorm/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-packhalf-unpackunorm/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,14 +20,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_8:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_10:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, u32, read_write> = var
     %values:ptr<function, vec4<f32>, read_write> = var
     %r:ptr<function, vec4<f32>, read_write> = var
@@ -38,138 +38,179 @@
     %x_102_phi:ptr<function, bool, read_write> = var
     %x_118_phi:ptr<function, bool, read_write> = var
     store %a, 1006648320u
-    %x_38:u32 = load %a
-    %15:vec4<f32> = unpack4x8unorm %x_38
-    store %values, %15
-    %16:ptr<uniform, f32, read> = access %x_8, 0u, 3i, 0u
-    %x_41:f32 = load %16
-    %18:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
-    %x_43:f32 = load %18
-    %20:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-    %x_45:f32 = load %20
-    %22:ptr<uniform, f32, read> = access %x_8, 0u, 3i, 0u
-    %x_48:f32 = load %22
-    %24:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-    %x_50:f32 = load %24
-    %26:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
-    %x_53:f32 = load %26
-    %28:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-    %x_55:f32 = load %28
-    %30:f32 = div %x_43, %x_45
-    %31:f32 = div %x_48, %x_50
-    %32:f32 = div %x_53, %x_55
-    %33:vec4<f32> = construct %x_41, %30, %31, %32
-    store %r, %33
-    %34:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-    %x_59:i32 = load %34
-    %x_61:f32 = load_vector_element %values, %x_59
-    %37:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-    %x_63:i32 = load %37
-    %x_65:f32 = load_vector_element %r, %x_63
-    %40:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
-    %x_69:f32 = load %40
-    %42:f32 = sub %x_61, %x_65
-    %43:f32 = abs %42
-    %x_70:bool = lt %43, %x_69
+    %14:u32 = load %a
+    %x_38:u32 = let %14
+    %16:vec4<f32> = unpack4x8unorm %x_38
+    store %values, %16
+    %17:ptr<uniform, f32, read> = access %x_8, 0u, 3i, 0u
+    %18:f32 = load %17
+    %x_41:f32 = let %18
+    %20:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
+    %21:f32 = load %20
+    %x_43:f32 = let %21
+    %23:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+    %24:f32 = load %23
+    %x_45:f32 = let %24
+    %26:ptr<uniform, f32, read> = access %x_8, 0u, 3i, 0u
+    %27:f32 = load %26
+    %x_48:f32 = let %27
+    %29:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+    %30:f32 = load %29
+    %x_50:f32 = let %30
+    %32:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
+    %33:f32 = load %32
+    %x_53:f32 = let %33
+    %35:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+    %36:f32 = load %35
+    %x_55:f32 = let %36
+    %38:f32 = div %x_43, %x_45
+    %39:f32 = div %x_48, %x_50
+    %40:f32 = div %x_53, %x_55
+    %41:vec4<f32> = construct %x_41, %38, %39, %40
+    store %r, %41
+    %42:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+    %43:i32 = load %42
+    %x_59:i32 = let %43
+    %45:f32 = load_vector_element %values, %x_59
+    %x_61:f32 = let %45
+    %47:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+    %48:i32 = load %47
+    %x_63:i32 = let %48
+    %50:f32 = load_vector_element %r, %x_63
+    %x_65:f32 = let %50
+    %52:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
+    %53:f32 = load %52
+    %x_69:f32 = let %53
+    %55:f32 = sub %x_61, %x_65
+    %56:f32 = abs %55
+    %57:bool = lt %56, %x_69
+    %x_70:bool = let %57
     store %x_86_phi, %x_70
-    if %x_70 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %45:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %x_74:i32 = load %45
-        %x_76:f32 = load_vector_element %values, %x_74
-        %48:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %x_78:i32 = load %48
-        %x_80:f32 = load_vector_element %r, %x_78
-        %51:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
-        %x_84:f32 = load %51
-        %53:f32 = sub %x_76, %x_80
-        %54:f32 = abs %53
-        %55:bool = lt %54, %x_84
-        store %x_85, %55
-        %56:bool = load %x_85
-        store %x_86_phi, %56
+    if %x_70 [t: $B3] {  # if_1
+      $B3: {  # true
+        %59:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %60:i32 = load %59
+        %x_74:i32 = let %60
+        %62:f32 = load_vector_element %values, %x_74
+        %x_76:f32 = let %62
+        %64:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %65:i32 = load %64
+        %x_78:i32 = let %65
+        %67:f32 = load_vector_element %r, %x_78
+        %x_80:f32 = let %67
+        %69:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
+        %70:f32 = load %69
+        %x_84:f32 = let %70
+        %72:f32 = sub %x_76, %x_80
+        %73:f32 = abs %72
+        %74:bool = lt %73, %x_84
+        store %x_85, %74
+        %75:bool = load %x_85
+        store %x_86_phi, %75
         exit_if  # if_1
       }
     }
-    %x_86:bool = load %x_86_phi
+    %76:bool = load %x_86_phi
+    %x_86:bool = let %76
     store %x_102_phi, %x_86
-    if %x_86 [t: %b4] {  # if_2
-      %b4 = block {  # true
-        %58:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
-        %x_90:i32 = load %58
-        %x_92:f32 = load_vector_element %values, %x_90
-        %61:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
-        %x_94:i32 = load %61
-        %x_96:f32 = load_vector_element %r, %x_94
-        %64:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
-        %x_100:f32 = load %64
-        %66:f32 = sub %x_92, %x_96
-        %67:f32 = abs %66
-        %68:bool = lt %67, %x_100
-        store %x_101, %68
-        %69:bool = load %x_101
-        store %x_102_phi, %69
+    if %x_86 [t: $B4] {  # if_2
+      $B4: {  # true
+        %78:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
+        %79:i32 = load %78
+        %x_90:i32 = let %79
+        %81:f32 = load_vector_element %values, %x_90
+        %x_92:f32 = let %81
+        %83:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
+        %84:i32 = load %83
+        %x_94:i32 = let %84
+        %86:f32 = load_vector_element %r, %x_94
+        %x_96:f32 = let %86
+        %88:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
+        %89:f32 = load %88
+        %x_100:f32 = let %89
+        %91:f32 = sub %x_92, %x_96
+        %92:f32 = abs %91
+        %93:bool = lt %92, %x_100
+        store %x_101, %93
+        %94:bool = load %x_101
+        store %x_102_phi, %94
         exit_if  # if_2
       }
     }
-    %x_102:bool = load %x_102_phi
+    %95:bool = load %x_102_phi
+    %x_102:bool = let %95
     store %x_118_phi, %x_102
-    if %x_102 [t: %b5] {  # if_3
-      %b5 = block {  # true
-        %71:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-        %x_106:i32 = load %71
-        %x_108:f32 = load_vector_element %values, %x_106
-        %74:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-        %x_110:i32 = load %74
-        %x_112:f32 = load_vector_element %r, %x_110
-        %77:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
-        %x_116:f32 = load %77
-        %79:f32 = sub %x_108, %x_112
-        %80:f32 = abs %79
-        %81:bool = lt %80, %x_116
-        store %x_117, %81
-        %82:bool = load %x_117
-        store %x_118_phi, %82
+    if %x_102 [t: $B5] {  # if_3
+      $B5: {  # true
+        %97:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+        %98:i32 = load %97
+        %x_106:i32 = let %98
+        %100:f32 = load_vector_element %values, %x_106
+        %x_108:f32 = let %100
+        %102:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+        %103:i32 = load %102
+        %x_110:i32 = let %103
+        %105:f32 = load_vector_element %r, %x_110
+        %x_112:f32 = let %105
+        %107:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
+        %108:f32 = load %107
+        %x_116:f32 = let %108
+        %110:f32 = sub %x_108, %x_112
+        %111:f32 = abs %110
+        %112:bool = lt %111, %x_116
+        store %x_117, %112
+        %113:bool = load %x_117
+        store %x_118_phi, %113
         exit_if  # if_3
       }
     }
-    %x_118:bool = load %x_118_phi
-    if %x_118 [t: %b6, f: %b7] {  # if_4
-      %b6 = block {  # true
-        %84:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %x_123:i32 = load %84
-        %86:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %x_126:i32 = load %86
-        %88:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %x_129:i32 = load %88
-        %90:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %x_132:i32 = load %90
-        %92:f32 = convert %x_123
-        %93:f32 = convert %x_126
-        %94:f32 = convert %x_129
-        %95:f32 = convert %x_132
-        %96:vec4<f32> = construct %92, %93, %94, %95
-        store %x_GLF_color, %96
+    %114:bool = load %x_118_phi
+    %x_118:bool = let %114
+    if %x_118 [t: $B6, f: $B7] {  # if_4
+      $B6: {  # true
+        %116:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %117:i32 = load %116
+        %x_123:i32 = let %117
+        %119:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %120:i32 = load %119
+        %x_126:i32 = let %120
+        %122:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %123:i32 = load %122
+        %x_129:i32 = let %123
+        %125:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %126:i32 = load %125
+        %x_132:i32 = let %126
+        %128:f32 = convert %x_123
+        %129:f32 = let %128
+        %130:f32 = convert %x_126
+        %131:f32 = let %130
+        %132:f32 = convert %x_129
+        %133:f32 = let %132
+        %134:f32 = convert %x_132
+        %135:vec4<f32> = construct %129, %131, %133, %134
+        store %x_GLF_color, %135
         exit_if  # if_4
       }
-      %b7 = block {  # false
-        %97:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %x_136:i32 = load %97
-        %x_137:f32 = convert %x_136
-        %100:vec4<f32> = construct %x_137, %x_137, %x_137, %x_137
-        store %x_GLF_color, %100
+      $B7: {  # false
+        %136:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %137:i32 = load %136
+        %x_136:i32 = let %137
+        %139:f32 = convert %x_136
+        %x_137:f32 = let %139
+        %141:vec4<f32> = construct %x_137, %x_137, %x_137, %x_137
+        store %x_GLF_color, %141
         exit_if  # if_4
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b8 {
-  %b8 = block {
-    %102:void = call %main_1
-    %103:vec4<f32> = load %x_GLF_color
-    %104:main_out = construct %103
-    ret %104
+%tint_symbol = @fragment func():main_out {
+  $B8: {
+    %143:void = call %main_1
+    %144:vec4<f32> = load %x_GLF_color
+    %145:main_out = construct %144
+    ret %145
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-pattern-match-signum/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-pattern-match-signum/0-opt.spvasm.expected.ir.msl
index 0f4e8a3..895d9f1 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-pattern-match-signum/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-pattern-match-signum/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:i32 @offset(0)
 }
 
@@ -8,39 +8,42 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%func_i1_ = func(%x:ptr<function, i32, read_write>):i32 -> %b2 {
-  %b2 = block {
+%func_i1_ = func(%x:ptr<function, i32, read_write>):i32 {
+  $B2: {
     %5:ptr<uniform, i32, read> = access %x_7, 0u
     %6:i32 = load %5
     %7:bool = eq %6, 1i
-    if %7 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %x_39:i32 = load %x
+    if %7 [t: $B3] {  # if_1
+      $B3: {  # true
+        %8:i32 = load %x
+        %x_39:i32 = let %8
         ret %x_39
       }
     }
-    %9:ptr<uniform, i32, read> = access %x_7, 0u
-    %x_41:i32 = load %9
+    %10:ptr<uniform, i32, read> = access %x_7, 0u
+    %11:i32 = load %10
+    %x_41:i32 = let %11
     ret %x_41
   }
 }
-%main_1 = func():void -> %b4 {
-  %b4 = block {
+%main_1 = func():void {
+  $B4: {
     %param:ptr<function, i32, read_write> = var
     store %param, -1i
-    %x_28:i32 = call %func_i1_, %param
-    %14:bool = lte %x_28, 0i
-    if %14 [t: %b5, f: %b6] {  # if_2
-      %b5 = block {  # true
+    %15:i32 = call %func_i1_, %param
+    %x_28:i32 = let %15
+    %17:bool = lte %x_28, 0i
+    if %17 [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 = block {  # false
+      $B6: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_2
       }
@@ -48,12 +51,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b7 {
-  %b7 = block {
-    %16:void = call %main_1
-    %17:vec4<f32> = load %x_GLF_color
-    %18:main_out = construct %17
-    ret %18
+%tint_symbol = @fragment func():main_out {
+  $B7: {
+    %19:void = call %main_1
+    %20:vec4<f32> = load %x_GLF_color
+    %21:main_out = construct %20
+    ret %21
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-pattern-match-signum/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-pattern-match-signum/0-opt.wgsl.expected.ir.msl
index 5467112..b5c5330 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-pattern-match-signum/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-pattern-match-signum/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:i32 @offset(0)
 }
 
@@ -8,39 +8,43 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%func_i1_ = func(%x:ptr<function, i32, read_write>):i32 -> %b2 {
-  %b2 = block {
+%func_i1_ = func(%x:ptr<function, i32, read_write>):i32 {
+  $B2: {
     %5:ptr<uniform, i32, read> = access %x_7, 0u
-    %x_35:i32 = load %5
-    %7:bool = eq %x_35, 1i
-    if %7 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %x_39:i32 = load %x
+    %6:i32 = load %5
+    %x_35:i32 = let %6
+    %8:bool = eq %x_35, 1i
+    if %8 [t: $B3] {  # if_1
+      $B3: {  # true
+        %9:i32 = load %x
+        %x_39:i32 = let %9
         ret %x_39
       }
     }
-    %9:ptr<uniform, i32, read> = access %x_7, 0u
-    %x_41:i32 = load %9
+    %11:ptr<uniform, i32, read> = access %x_7, 0u
+    %12:i32 = load %11
+    %x_41:i32 = let %12
     ret %x_41
   }
 }
-%main_1 = func():void -> %b4 {
-  %b4 = block {
+%main_1 = func():void {
+  $B4: {
     %param:ptr<function, i32, read_write> = var
     store %param, -1i
-    %x_28:i32 = call %func_i1_, %param
-    %14:bool = lte %x_28, 0i
-    if %14 [t: %b5, f: %b6] {  # if_2
-      %b5 = block {  # true
+    %16:i32 = call %func_i1_, %param
+    %x_28:i32 = let %16
+    %18:bool = lte %x_28, 0i
+    if %18 [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 = block {  # false
+      $B6: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_2
       }
@@ -48,12 +52,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b7 {
-  %b7 = block {
-    %16:void = call %main_1
-    %17:vec4<f32> = load %x_GLF_color
-    %18:main_out = construct %17
-    ret %18
+%tint_symbol = @fragment func():main_out {
+  $B7: {
+    %20:void = call %main_1
+    %21:vec4<f32> = load %x_GLF_color
+    %22:main_out = construct %21
+    ret %22
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-pattern-match-single-bit/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-pattern-match-single-bit/0.spvasm.expected.ir.msl
index 91cbeee..c3b2d4e 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-pattern-match-single-bit/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-pattern-match-single-bit/0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   three:i32 @offset(0)
 }
 
@@ -8,24 +8,24 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %4:ptr<uniform, i32, read> = access %x_5, 0u
     %5:i32 = load %4
     %6:i32 = and 2i, %5
-    %7:i32 = div 10i, %6
-    %8:bool = eq %7, 5i
-    if %8 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    %7:i32 = call %tint_div_i32, 10i, %6
+    %9:bool = eq %7, 5i
+    if %9 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
@@ -33,12 +33,24 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %10:void = call %main_1
-    %11:vec4<f32> = load %x_GLF_color
-    %12:main_out = construct %11
-    ret %12
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %11:void = call %main_1
+    %12:vec4<f32> = load %x_GLF_color
+    %13:main_out = construct %12
+    ret %13
+  }
+}
+%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B6: {
+    %16:bool = eq %rhs, 0i
+    %17:bool = eq %lhs, -2147483648i
+    %18:bool = eq %rhs, -1i
+    %19:bool = and %17, %18
+    %20:bool = or %16, %19
+    %21:i32 = select %rhs, 1i, %20
+    %22:i32 = div %lhs, %21
+    ret %22
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-pattern-match-single-bit/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-pattern-match-single-bit/0.wgsl.expected.ir.msl
index 0fe4397..b6f3050 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-pattern-match-single-bit/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-pattern-match-single-bit/0.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   three:i32 @offset(0)
 }
 
@@ -8,24 +8,25 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %4:ptr<uniform, i32, read> = access %x_5, 0u
-    %x_25:i32 = load %4
-    %6:i32 = and 2i, %x_25
-    %7:i32 = div 10i, %6
-    %8:bool = eq %7, 5i
-    if %8 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    %5:i32 = load %4
+    %x_25:i32 = let %5
+    %7:i32 = and 2i, %x_25
+    %8:i32 = call %tint_div_i32, 10i, %7
+    %10:bool = eq %8, 5i
+    if %10 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
@@ -33,12 +34,24 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %10:void = call %main_1
-    %11:vec4<f32> = load %x_GLF_color
-    %12:main_out = construct %11
-    ret %12
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %12:void = call %main_1
+    %13:vec4<f32> = load %x_GLF_color
+    %14:main_out = construct %13
+    ret %14
+  }
+}
+%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B6: {
+    %17:bool = eq %rhs, 0i
+    %18:bool = eq %lhs, -2147483648i
+    %19:bool = eq %rhs, -1i
+    %20:bool = and %18, %19
+    %21:bool = or %17, %20
+    %22:i32 = select %rhs, 1i, %21
+    %23:i32 = div %lhs, %22
+    ret %23
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-peephole-optimizer-target-instr-info-for-if-if-if/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-peephole-optimizer-target-instr-info-for-if-if-if/0-opt.spvasm.expected.ir.msl
index d520a12..ec920ce 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-peephole-optimizer-target-instr-info-for-if-if-if/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-peephole-optimizer-target-instr-info-for-if-if-if/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,119 +20,130 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_9:ptr<uniform, buf1, read> = var @binding_point(0, 1)
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %i:ptr<function, i32, read_write> = var
-    %7:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %8:i32 = load %7
-    %9:f32 = convert %8
-    %10:vec4<f32> = construct %9
-    store %x_GLF_color, %10
-    %11:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %12:i32 = load %11
-    store %i, %12
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %13:i32 = load %i
-        %14:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %15:i32 = load %14
-        %16:bool = lt %13, %15
-        if %16 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    %8:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %9:i32 = load %8
+    %10:f32 = convert %9
+    %11:vec4<f32> = construct %10
+    store %x_GLF_color, %11
+    %12:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %13:i32 = load %12
+    store %i, %13
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %14:i32 = load %i
+        %15:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %16:i32 = load %15
+        %17:bool = lt %14, %16
+        if %17 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %17:f32 = load_vector_element %gl_FragCoord, 1u
-        %18:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
-        %19:f32 = load %18
-        %20:bool = lt %17, %19
-        if %20 [t: %b7] {  # if_2
-          %b7 = block {  # true
-            %21:f32 = load_vector_element %gl_FragCoord, 0u
-            %22:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
-            %23:f32 = load %22
-            %24:bool = lt %21, %23
-            if %24 [t: %b8] {  # if_3
-              %b8 = block {  # true
+        %18:f32 = load_vector_element %gl_FragCoord, 1u
+        %19:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
+        %20:f32 = load %19
+        %21:bool = lt %18, %20
+        if %21 [t: $B7] {  # if_2
+          $B7: {  # true
+            %22:f32 = load_vector_element %gl_FragCoord, 0u
+            %23:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
+            %24:f32 = load %23
+            %25:bool = lt %22, %24
+            if %25 [t: $B8] {  # if_3
+              $B8: {  # true
                 ret
               }
             }
-            %25:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
-            %26:f32 = load %25
-            %27:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
-            %28:f32 = load %27
-            %29:bool = gt %26, %28
-            if %29 [t: %b9] {  # if_4
-              %b9 = block {  # true
+            %26:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
+            %27:f32 = load %26
+            %28:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
+            %29:f32 = load %28
+            %30:bool = gt %27, %29
+            if %30 [t: $B9] {  # if_4
+              $B9: {  # true
                 ret
               }
             }
-            discard
+            store %continue_execution, false
             exit_if  # if_2
           }
         }
-        %30:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
-        %31:f32 = load %30
-        %32:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
-        %33:f32 = load %32
-        %34:bool = gt %31, %33
-        if %34 [t: %b10] {  # if_5
-          %b10 = block {  # true
-            %35:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-            %36:i32 = load %35
-            %37:f32 = convert %36
-            %38:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-            %39:i32 = load %38
-            %40:f32 = convert %39
-            %41:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-            %42:i32 = load %41
-            %43:f32 = convert %42
-            %44:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %31:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
+        %32:f32 = load %31
+        %33:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
+        %34:f32 = load %33
+        %35:bool = gt %32, %34
+        if %35 [t: $B10] {  # if_5
+          $B10: {  # true
+            %36:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+            %37:i32 = load %36
+            %38:f32 = convert %37
+            %39:f32 = let %38
+            %40:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+            %41:i32 = load %40
+            %42:f32 = convert %41
+            %43:f32 = let %42
+            %44:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
             %45:i32 = load %44
             %46:f32 = convert %45
-            %47:vec4<f32> = construct %37, %40, %43, %46
-            store %x_GLF_color, %47
+            %47:f32 = let %46
+            %48:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+            %49:i32 = load %48
+            %50:f32 = convert %49
+            %51:vec4<f32> = construct %39, %43, %47, %50
+            store %x_GLF_color, %51
             exit_loop  # loop_1
           }
         }
-        %48:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
-        %49:f32 = load %48
-        %50:bool = lt %49, 0.0f
-        if %50 [t: %b11] {  # if_6
-          %b11 = block {  # true
-            discard
+        %52:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
+        %53:f32 = load %52
+        %54:bool = lt %53, 0.0f
+        if %54 [t: $B11] {  # if_6
+          $B11: {  # true
+            store %continue_execution, false
             exit_if  # if_6
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %51:i32 = load %i
-        %52:i32 = add %51, 1i
-        store %i, %52
-        next_iteration %b3
+      $B4: {  # continuing
+        %55:i32 = load %i
+        %56:i32 = add %55, 1i
+        store %i, %56
+        next_iteration  # -> $B3
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b12 {
-  %b12 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B12: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %55:void = call %main_1
-    %56:vec4<f32> = load %x_GLF_color
-    %57:main_out = construct %56
-    ret %57
+    %59:void = call %main_1
+    %60:vec4<f32> = load %x_GLF_color
+    %61:main_out = construct %60
+    %62:bool = load %continue_execution
+    %63:bool = eq %62, false
+    if %63 [t: $B13] {  # if_7
+      $B13: {  # true
+        terminate_invocation
+      }
+    }
+    ret %61
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-peephole-optimizer-target-instr-info-for-if-if-if/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-peephole-optimizer-target-instr-info-for-if-if-if/0-opt.wgsl.expected.ir.msl
index 50035ac..3c7bb0e 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-peephole-optimizer-target-instr-info-for-if-if-if/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-peephole-optimizer-target-instr-info-for-if-if-if/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,119 +20,149 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_9:ptr<uniform, buf1, read> = var @binding_point(0, 1)
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %i:ptr<function, i32, read_write> = var
-    %7:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_37:i32 = load %7
-    %x_38:f32 = convert %x_37
-    %10:vec4<f32> = construct %x_38, %x_38, %x_38, %x_38
-    store %x_GLF_color, %10
-    %11:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_41:i32 = load %11
+    %8:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %9:i32 = load %8
+    %x_37:i32 = let %9
+    %11:f32 = convert %x_37
+    %x_38:f32 = let %11
+    %13:vec4<f32> = construct %x_38, %x_38, %x_38, %x_38
+    store %x_GLF_color, %13
+    %14:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %15:i32 = load %14
+    %x_41:i32 = let %15
     store %i, %x_41
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_46:i32 = load %i
-        %14:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %x_48:i32 = load %14
-        %16:bool = lt %x_46, %x_48
-        if %16 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %17:i32 = load %i
+        %x_46:i32 = let %17
+        %19:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %20:i32 = load %19
+        %x_48:i32 = let %20
+        %22:bool = lt %x_46, %x_48
+        if %22 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_52:f32 = load_vector_element %gl_FragCoord, 1u
-        %18:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
-        %x_54:f32 = load %18
-        %20:bool = lt %x_52, %x_54
-        if %20 [t: %b7] {  # if_2
-          %b7 = block {  # true
-            %x_59:f32 = load_vector_element %gl_FragCoord, 0u
-            %22:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
-            %x_61:f32 = load %22
-            %24:bool = lt %x_59, %x_61
-            if %24 [t: %b8] {  # if_3
-              %b8 = block {  # true
+        %23:f32 = load_vector_element %gl_FragCoord, 1u
+        %x_52:f32 = let %23
+        %25:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
+        %26:f32 = load %25
+        %x_54:f32 = let %26
+        %28:bool = lt %x_52, %x_54
+        if %28 [t: $B7] {  # if_2
+          $B7: {  # true
+            %29:f32 = load_vector_element %gl_FragCoord, 0u
+            %x_59:f32 = let %29
+            %31:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
+            %32:f32 = load %31
+            %x_61:f32 = let %32
+            %34:bool = lt %x_59, %x_61
+            if %34 [t: $B8] {  # if_3
+              $B8: {  # true
                 ret
               }
             }
-            %25:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
-            %x_66:f32 = load %25
-            %27:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
-            %x_68:f32 = load %27
-            %29:bool = gt %x_66, %x_68
-            if %29 [t: %b9] {  # if_4
-              %b9 = block {  # true
+            %35:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
+            %36:f32 = load %35
+            %x_66:f32 = let %36
+            %38:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
+            %39:f32 = load %38
+            %x_68:f32 = let %39
+            %41:bool = gt %x_66, %x_68
+            if %41 [t: $B9] {  # if_4
+              $B9: {  # true
                 ret
               }
             }
-            discard
+            store %continue_execution, false
             exit_if  # if_2
           }
         }
-        %30:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
-        %x_73:f32 = load %30
-        %32:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
-        %x_75:f32 = load %32
-        %34:bool = gt %x_73, %x_75
-        if %34 [t: %b10] {  # if_5
-          %b10 = block {  # true
-            %35:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-            %x_80:i32 = load %35
-            %37:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-            %x_83:i32 = load %37
-            %39:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-            %x_86:i32 = load %39
-            %41:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-            %x_89:i32 = load %41
-            %43:f32 = convert %x_80
-            %44:f32 = convert %x_83
-            %45:f32 = convert %x_86
-            %46:f32 = convert %x_89
-            %47:vec4<f32> = construct %43, %44, %45, %46
-            store %x_GLF_color, %47
+        %42:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
+        %43:f32 = load %42
+        %x_73:f32 = let %43
+        %45:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
+        %46:f32 = load %45
+        %x_75:f32 = let %46
+        %48:bool = gt %x_73, %x_75
+        if %48 [t: $B10] {  # if_5
+          $B10: {  # true
+            %49:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+            %50:i32 = load %49
+            %x_80:i32 = let %50
+            %52:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+            %53:i32 = load %52
+            %x_83:i32 = let %53
+            %55:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+            %56:i32 = load %55
+            %x_86:i32 = let %56
+            %58:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+            %59:i32 = load %58
+            %x_89:i32 = let %59
+            %61:f32 = convert %x_80
+            %62:f32 = let %61
+            %63:f32 = convert %x_83
+            %64:f32 = let %63
+            %65:f32 = convert %x_86
+            %66:f32 = let %65
+            %67:f32 = convert %x_89
+            %68:vec4<f32> = construct %62, %64, %66, %67
+            store %x_GLF_color, %68
             exit_loop  # loop_1
           }
         }
-        %48:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
-        %x_93:f32 = load %48
-        %50:bool = lt %x_93, 0.0f
-        if %50 [t: %b11] {  # if_6
-          %b11 = block {  # true
-            discard
+        %69:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
+        %70:f32 = load %69
+        %x_93:f32 = let %70
+        %72:bool = lt %x_93, 0.0f
+        if %72 [t: $B11] {  # if_6
+          $B11: {  # true
+            store %continue_execution, false
             exit_if  # if_6
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_97:i32 = load %i
-        %52:i32 = add %x_97, 1i
-        store %i, %52
-        next_iteration %b3
+      $B4: {  # continuing
+        %73:i32 = load %i
+        %x_97:i32 = let %73
+        %75:i32 = add %x_97, 1i
+        store %i, %75
+        next_iteration  # -> $B3
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b12 {
-  %b12 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B12: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %55:void = call %main_1
-    %56:vec4<f32> = load %x_GLF_color
-    %57:main_out = construct %56
-    ret %57
+    %78:void = call %main_1
+    %79:vec4<f32> = load %x_GLF_color
+    %80:main_out = construct %79
+    %81:bool = load %continue_execution
+    %82:bool = eq %81, false
+    if %82 [t: $B13] {  # if_7
+      $B13: {  # true
+        terminate_invocation
+      }
+    }
+    ret %80
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-pow-identical-value-sqrt/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-pow-identical-value-sqrt/0-opt.spvasm.expected.ir.msl
index 178a545..a523119 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-pow-identical-value-sqrt/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-pow-identical-value-sqrt/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -24,15 +24,15 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_11:ptr<uniform, buf2, read> = var @binding_point(0, 2)
   %x_13:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %f0:ptr<function, f32, read_write> = var
     %f1:ptr<function, f32, read_write> = var
     %f2:ptr<function, f32, read_write> = var
@@ -42,67 +42,82 @@
     store %f0, %11
     %12:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
     %13:f32 = load %12
-    %14:f32 = load %f0
-    %15:f32 = pow %14, 4.0f
-    %16:f32 = mul %13, %15
-    store %f1, %16
-    %17:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-    %18:f32 = load %17
-    %19:f32 = load %f0
-    %20:f32 = pow %19, 4.0f
-    %21:f32 = mul %18, %20
-    store %f2, %21
-    %22:f32 = load %f1
-    %23:f32 = load %f2
-    %24:f32 = sub %22, %23
-    %25:ptr<uniform, f32, read> = access %x_11, 0u
-    %26:f32 = load %25
-    %27:f32 = sub %24, %26
-    %28:f32 = load %f0
-    %29:f32 = add %27, %28
-    %30:f32 = sqrt %29
-    store %f3, %30
-    %31:f32 = load %f3
-    %32:i32 = convert %31
-    %33:ptr<uniform, i32, read> = access %x_13, 0u, 0i, 0u
-    %34:i32 = load %33
-    %35:bool = eq %32, %34
-    if %35 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %36:ptr<uniform, i32, read> = access %x_13, 0u, 0i, 0u
-        %37:i32 = load %36
-        %38:f32 = convert %37
-        %39:ptr<uniform, i32, read> = access %x_13, 0u, 1i, 0u
+    %14:f32 = let %13
+    %15:f32 = load %f0
+    %16:f32 = pow %15, 4.0f
+    %17:f32 = mul %14, %16
+    store %f1, %17
+    %18:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+    %19:f32 = load %18
+    %20:f32 = let %19
+    %21:f32 = load %f0
+    %22:f32 = pow %21, 4.0f
+    %23:f32 = mul %20, %22
+    store %f2, %23
+    %24:f32 = load %f1
+    %25:f32 = load %f2
+    %26:f32 = sub %24, %25
+    %27:ptr<uniform, f32, read> = access %x_11, 0u
+    %28:f32 = load %27
+    %29:f32 = sub %26, %28
+    %30:f32 = load %f0
+    %31:f32 = add %29, %30
+    %32:f32 = sqrt %31
+    store %f3, %32
+    %33:f32 = load %f3
+    %34:i32 = call %tint_f32_to_i32, %33
+    %36:ptr<uniform, i32, read> = access %x_13, 0u, 0i, 0u
+    %37:i32 = load %36
+    %38:bool = eq %34, %37
+    if %38 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %39:ptr<uniform, i32, read> = access %x_13, 0u, 0i, 0u
         %40:i32 = load %39
         %41:f32 = convert %40
-        %42:ptr<uniform, i32, read> = access %x_13, 0u, 1i, 0u
-        %43:i32 = load %42
-        %44:f32 = convert %43
-        %45:ptr<uniform, i32, read> = access %x_13, 0u, 0i, 0u
-        %46:i32 = load %45
-        %47:f32 = convert %46
-        %48:vec4<f32> = construct %38, %41, %44, %47
-        store %x_GLF_color, %48
+        %42:f32 = let %41
+        %43:ptr<uniform, i32, read> = access %x_13, 0u, 1i, 0u
+        %44:i32 = load %43
+        %45:f32 = convert %44
+        %46:f32 = let %45
+        %47:ptr<uniform, i32, read> = access %x_13, 0u, 1i, 0u
+        %48:i32 = load %47
+        %49:f32 = convert %48
+        %50:f32 = let %49
+        %51:ptr<uniform, i32, read> = access %x_13, 0u, 0i, 0u
+        %52:i32 = load %51
+        %53:f32 = convert %52
+        %54:vec4<f32> = construct %42, %46, %50, %53
+        store %x_GLF_color, %54
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %49:ptr<uniform, i32, read> = access %x_13, 0u, 1i, 0u
-        %50:i32 = load %49
-        %51:f32 = convert %50
-        %52:vec4<f32> = construct %51
-        store %x_GLF_color, %52
+      $B4: {  # false
+        %55:ptr<uniform, i32, read> = access %x_13, 0u, 1i, 0u
+        %56:i32 = load %55
+        %57:f32 = convert %56
+        %58:vec4<f32> = construct %57
+        store %x_GLF_color, %58
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %54:void = call %main_1
-    %55:vec4<f32> = load %x_GLF_color
-    %56:main_out = construct %55
-    ret %56
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %60:void = call %main_1
+    %61:vec4<f32> = load %x_GLF_color
+    %62:main_out = construct %61
+    ret %62
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B6: {
+    %64:i32 = convert %value
+    %65:bool = gte %value, -2147483648.0f
+    %66:i32 = select -2147483648i, %64, %65
+    %67:bool = lte %value, 2147483520.0f
+    %68:i32 = select 2147483647i, %66, %67
+    ret %68
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-pow-identical-value-sqrt/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-pow-identical-value-sqrt/0-opt.wgsl.expected.ir.msl
index 40e79a0..d6041b2 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-pow-identical-value-sqrt/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-pow-identical-value-sqrt/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -24,85 +24,115 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_11:ptr<uniform, buf2, read> = var @binding_point(0, 2)
   %x_13:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %f0:ptr<function, f32, read_write> = var
     %f1:ptr<function, f32, read_write> = var
     %f2:ptr<function, f32, read_write> = var
     %f3:ptr<function, f32, read_write> = var
     %10:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_36:f32 = load %10
+    %11:f32 = load %10
+    %x_36:f32 = let %11
     store %f0, %x_36
-    %12:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-    %x_38:f32 = load %12
-    %x_39:f32 = load %f0
-    %15:f32 = pow %x_39, 4.0f
-    %16:f32 = mul %x_38, %15
-    store %f1, %16
-    %17:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-    %x_43:f32 = load %17
-    %x_44:f32 = load %f0
-    %20:f32 = pow %x_44, 4.0f
-    %21:f32 = mul %x_43, %20
-    store %f2, %21
-    %x_47:f32 = load %f1
-    %x_48:f32 = load %f2
-    %24:ptr<uniform, f32, read> = access %x_11, 0u
-    %x_51:f32 = load %24
-    %x_53:f32 = load %f0
-    %27:f32 = sub %x_47, %x_48
-    %28:f32 = sub %27, %x_51
-    %29:f32 = add %28, %x_53
-    %30:f32 = sqrt %29
-    store %f3, %30
-    %x_56:f32 = load %f3
-    %32:ptr<uniform, i32, read> = access %x_13, 0u, 0i, 0u
-    %x_59:i32 = load %32
-    %34:i32 = convert %x_56
-    %35:bool = eq %34, %x_59
-    if %35 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %36:ptr<uniform, i32, read> = access %x_13, 0u, 0i, 0u
-        %x_65:i32 = load %36
-        %38:ptr<uniform, i32, read> = access %x_13, 0u, 1i, 0u
-        %x_68:i32 = load %38
-        %40:ptr<uniform, i32, read> = access %x_13, 0u, 1i, 0u
-        %x_71:i32 = load %40
-        %42:ptr<uniform, i32, read> = access %x_13, 0u, 0i, 0u
-        %x_74:i32 = load %42
-        %44:f32 = convert %x_65
-        %45:f32 = convert %x_68
-        %46:f32 = convert %x_71
-        %47:f32 = convert %x_74
-        %48:vec4<f32> = construct %44, %45, %46, %47
-        store %x_GLF_color, %48
+    %13:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+    %14:f32 = load %13
+    %x_38:f32 = let %14
+    %16:f32 = load %f0
+    %x_39:f32 = let %16
+    %18:f32 = pow %x_39, 4.0f
+    %19:f32 = mul %x_38, %18
+    store %f1, %19
+    %20:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+    %21:f32 = load %20
+    %x_43:f32 = let %21
+    %23:f32 = load %f0
+    %x_44:f32 = let %23
+    %25:f32 = pow %x_44, 4.0f
+    %26:f32 = mul %x_43, %25
+    store %f2, %26
+    %27:f32 = load %f1
+    %x_47:f32 = let %27
+    %29:f32 = load %f2
+    %x_48:f32 = let %29
+    %31:ptr<uniform, f32, read> = access %x_11, 0u
+    %32:f32 = load %31
+    %x_51:f32 = let %32
+    %34:f32 = load %f0
+    %x_53:f32 = let %34
+    %36:f32 = sub %x_47, %x_48
+    %37:f32 = sub %36, %x_51
+    %38:f32 = add %37, %x_53
+    %39:f32 = sqrt %38
+    store %f3, %39
+    %40:f32 = load %f3
+    %x_56:f32 = let %40
+    %42:ptr<uniform, i32, read> = access %x_13, 0u, 0i, 0u
+    %43:i32 = load %42
+    %x_59:i32 = let %43
+    %45:i32 = call %tint_f32_to_i32, %x_56
+    %47:bool = eq %45, %x_59
+    if %47 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %48:ptr<uniform, i32, read> = access %x_13, 0u, 0i, 0u
+        %49:i32 = load %48
+        %x_65:i32 = let %49
+        %51:ptr<uniform, i32, read> = access %x_13, 0u, 1i, 0u
+        %52:i32 = load %51
+        %x_68:i32 = let %52
+        %54:ptr<uniform, i32, read> = access %x_13, 0u, 1i, 0u
+        %55:i32 = load %54
+        %x_71:i32 = let %55
+        %57:ptr<uniform, i32, read> = access %x_13, 0u, 0i, 0u
+        %58:i32 = load %57
+        %x_74:i32 = let %58
+        %60:f32 = convert %x_65
+        %61:f32 = let %60
+        %62:f32 = convert %x_68
+        %63:f32 = let %62
+        %64:f32 = convert %x_71
+        %65:f32 = let %64
+        %66:f32 = convert %x_74
+        %67:vec4<f32> = construct %61, %63, %65, %66
+        store %x_GLF_color, %67
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %49:ptr<uniform, i32, read> = access %x_13, 0u, 1i, 0u
-        %x_78:i32 = load %49
-        %x_79:f32 = convert %x_78
-        %52:vec4<f32> = construct %x_79, %x_79, %x_79, %x_79
-        store %x_GLF_color, %52
+      $B4: {  # false
+        %68:ptr<uniform, i32, read> = access %x_13, 0u, 1i, 0u
+        %69:i32 = load %68
+        %x_78:i32 = let %69
+        %71:f32 = convert %x_78
+        %x_79:f32 = let %71
+        %73:vec4<f32> = construct %x_79, %x_79, %x_79, %x_79
+        store %x_GLF_color, %73
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %54:void = call %main_1
-    %55:vec4<f32> = load %x_GLF_color
-    %56:main_out = construct %55
-    ret %56
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %75:void = call %main_1
+    %76:vec4<f32> = load %x_GLF_color
+    %77:main_out = construct %76
+    ret %77
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B6: {
+    %79:i32 = convert %value
+    %80:bool = gte %value, -2147483648.0f
+    %81:i32 = select -2147483648i, %79, %80
+    %82:bool = lte %value, 2147483520.0f
+    %83:i32 = select 2147483647i, %81, %82
+    ret %83
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-pow-undefined-result-condition-with-always-true/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-pow-undefined-result-condition-with-always-true/0-opt.spvasm.expected.ir.msl
index d4f8153..6570631 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-pow-undefined-result-condition-with-always-true/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-pow-undefined-result-condition-with-always-true/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -24,15 +24,15 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_8:ptr<uniform, buf2, read> = var @binding_point(0, 2)
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %f:ptr<function, f32, read_write> = var
     %x_48:ptr<function, bool, read_write> = var
     %x_49:ptr<function, bool, read_write> = var
@@ -44,59 +44,63 @@
     %13:f32 = load %f
     %14:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
     %15:f32 = load %14
-    %x_40:bool = eq %13, %15
+    %16:bool = eq %13, %15
+    %x_40:bool = let %16
     store %x_49, %x_40
-    %17:bool = eq %x_40, false
-    if %17 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %18:ptr<uniform, i32, read> = access %x_8, 0u
-        %19:i32 = load %18
-        %20:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %21:i32 = load %20
-        %22:bool = eq %19, %21
-        store %x_48, %22
-        %23:bool = load %x_48
-        store %x_49, %23
+    %18:bool = eq %x_40, false
+    if %18 [t: $B3] {  # if_1
+      $B3: {  # true
+        %19:ptr<uniform, i32, read> = access %x_8, 0u
+        %20:i32 = load %19
+        %21:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %22:i32 = load %21
+        %23:bool = eq %20, %22
+        store %x_48, %23
+        %24:bool = load %x_48
+        store %x_49, %24
         exit_if  # if_1
       }
     }
-    %24:bool = load %x_49
-    if %24 [t: %b4, f: %b5] {  # if_2
-      %b4 = block {  # true
-        %25:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %26:i32 = load %25
-        %27:f32 = convert %26
-        %28:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %29:i32 = load %28
-        %30:f32 = convert %29
-        %31:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %32:i32 = load %31
-        %33:f32 = convert %32
-        %34:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+    %25:bool = load %x_49
+    if %25 [t: $B4, f: $B5] {  # if_2
+      $B4: {  # true
+        %26:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %27:i32 = load %26
+        %28:f32 = convert %27
+        %29:f32 = let %28
+        %30:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %31:i32 = load %30
+        %32:f32 = convert %31
+        %33:f32 = let %32
+        %34:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
         %35:i32 = load %34
         %36:f32 = convert %35
-        %37:vec4<f32> = construct %27, %30, %33, %36
-        store %x_GLF_color, %37
-        exit_if  # if_2
-      }
-      %b5 = block {  # false
-        %38:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %37:f32 = let %36
+        %38:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
         %39:i32 = load %38
         %40:f32 = convert %39
-        %41:vec4<f32> = construct %40
+        %41:vec4<f32> = construct %29, %33, %37, %40
         store %x_GLF_color, %41
         exit_if  # if_2
       }
+      $B5: {  # false
+        %42:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %43:i32 = load %42
+        %44:f32 = convert %43
+        %45:vec4<f32> = construct %44
+        store %x_GLF_color, %45
+        exit_if  # if_2
+      }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b6 {
-  %b6 = block {
-    %43:void = call %main_1
-    %44:vec4<f32> = load %x_GLF_color
-    %45:main_out = construct %44
-    ret %45
+%tint_symbol = @fragment func():main_out {
+  $B6: {
+    %47:void = call %main_1
+    %48:vec4<f32> = load %x_GLF_color
+    %49:main_out = construct %48
+    ret %49
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-pow-undefined-result-condition-with-always-true/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-pow-undefined-result-condition-with-always-true/0-opt.wgsl.expected.ir.msl
index 347ae46..edcc8c6 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-pow-undefined-result-condition-with-always-true/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-pow-undefined-result-condition-with-always-true/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -24,79 +24,95 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_8:ptr<uniform, buf2, read> = var @binding_point(0, 2)
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %f:ptr<function, f32, read_write> = var
     %x_48:ptr<function, bool, read_write> = var
     %x_49_phi:ptr<function, bool, read_write> = var
     %9:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-    %x_33:f32 = load %9
-    %11:f32 = negation %x_33
-    %12:f32 = pow %11, 1.17520117759704589844f
-    store %f, %12
-    %x_37:f32 = load %f
-    %14:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_39:f32 = load %14
-    %x_40:bool = eq %x_37, %x_39
+    %10:f32 = load %9
+    %x_33:f32 = let %10
+    %12:f32 = negation %x_33
+    %13:f32 = pow %12, 1.17520117759704589844f
+    store %f, %13
+    %14:f32 = load %f
+    %x_37:f32 = let %14
+    %16:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %17:f32 = load %16
+    %x_39:f32 = let %17
+    %19:bool = eq %x_37, %x_39
+    %x_40:bool = let %19
     store %x_49_phi, %x_40
-    %17:bool = eq %x_40, false
-    if %17 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %18:ptr<uniform, i32, read> = access %x_8, 0u
-        %x_45:i32 = load %18
-        %20:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %x_47:i32 = load %20
-        %22:bool = eq %x_45, %x_47
-        store %x_48, %22
-        %23:bool = load %x_48
-        store %x_49_phi, %23
+    %21:bool = eq %x_40, false
+    if %21 [t: $B3] {  # if_1
+      $B3: {  # true
+        %22:ptr<uniform, i32, read> = access %x_8, 0u
+        %23:i32 = load %22
+        %x_45:i32 = let %23
+        %25:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %26:i32 = load %25
+        %x_47:i32 = let %26
+        %28:bool = eq %x_45, %x_47
+        store %x_48, %28
+        %29:bool = load %x_48
+        store %x_49_phi, %29
         exit_if  # if_1
       }
     }
-    %x_49:bool = load %x_49_phi
-    if %x_49 [t: %b4, f: %b5] {  # if_2
-      %b4 = block {  # true
-        %25:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %x_54:i32 = load %25
-        %27:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %x_57:i32 = load %27
-        %29:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %x_60:i32 = load %29
-        %31:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %x_63:i32 = load %31
-        %33:f32 = convert %x_54
-        %34:f32 = convert %x_57
-        %35:f32 = convert %x_60
-        %36:f32 = convert %x_63
-        %37:vec4<f32> = construct %33, %34, %35, %36
-        store %x_GLF_color, %37
+    %30:bool = load %x_49_phi
+    %x_49:bool = let %30
+    if %x_49 [t: $B4, f: $B5] {  # if_2
+      $B4: {  # true
+        %32:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %33:i32 = load %32
+        %x_54:i32 = let %33
+        %35:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %36:i32 = load %35
+        %x_57:i32 = let %36
+        %38:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %39:i32 = load %38
+        %x_60:i32 = let %39
+        %41:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %42:i32 = load %41
+        %x_63:i32 = let %42
+        %44:f32 = convert %x_54
+        %45:f32 = let %44
+        %46:f32 = convert %x_57
+        %47:f32 = let %46
+        %48:f32 = convert %x_60
+        %49:f32 = let %48
+        %50:f32 = convert %x_63
+        %51:vec4<f32> = construct %45, %47, %49, %50
+        store %x_GLF_color, %51
         exit_if  # if_2
       }
-      %b5 = block {  # false
-        %38:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %x_67:i32 = load %38
-        %x_68:f32 = convert %x_67
-        %41:vec4<f32> = construct %x_68, %x_68, %x_68, %x_68
-        store %x_GLF_color, %41
+      $B5: {  # false
+        %52:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %53:i32 = load %52
+        %x_67:i32 = let %53
+        %55:f32 = convert %x_67
+        %x_68:f32 = let %55
+        %57:vec4<f32> = construct %x_68, %x_68, %x_68, %x_68
+        store %x_GLF_color, %57
         exit_if  # if_2
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b6 {
-  %b6 = block {
-    %43:void = call %main_1
-    %44:vec4<f32> = load %x_GLF_color
-    %45:main_out = construct %44
-    ret %45
+%tint_symbol = @fragment func():main_out {
+  $B6: {
+    %59:void = call %main_1
+    %60:vec4<f32> = load %x_GLF_color
+    %61:main_out = construct %60
+    ret %61
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-pow-undefined/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-pow-undefined/0-opt.spvasm.expected.ir.msl
index 5667092..5681cfe 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-pow-undefined/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-pow-undefined/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -12,13 +12,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_8:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, f32, read_write> = var
     %b:ptr<function, f32, read_write> = var
     %c:ptr<function, f32, read_write> = var
@@ -36,8 +36,8 @@
     %14:f32 = load %b
     %15:bool = eq %14, 1.70000004768371582031f
     %16:bool = and %13, %15
-    if %16 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    if %16 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         %17:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
         %18:f32 = load %17
         %19:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
@@ -50,7 +50,7 @@
         store %x_GLF_color, %25
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         %26:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
         %27:f32 = load %26
         %28:vec4<f32> = construct %27
@@ -61,8 +61,8 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
+%tint_symbol = @fragment func():main_out {
+  $B5: {
     %30:void = call %main_1
     %31:vec4<f32> = load %x_GLF_color
     %32:main_out = construct %31
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-pow-undefined/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-pow-undefined/0-opt.wgsl.expected.ir.msl
index 2115188..c971b16 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-pow-undefined/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-pow-undefined/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -12,61 +12,71 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_8:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, f32, read_write> = var
     %b:ptr<function, f32, read_write> = var
     %c:ptr<function, f32, read_write> = var
     store %a, -1.0f
     store %b, 1.70000004768371582031f
-    %x_27:f32 = load %a
-    %x_28:f32 = load %b
-    %9:f32 = pow %x_27, %x_28
-    store %c, %9
-    %x_30:f32 = load %c
-    %11:vec4<f32> = construct %x_30, %x_30, %x_30, %x_30
-    store %x_GLF_color, %11
-    %x_32:f32 = load %a
-    %x_34:f32 = load %b
-    %14:bool = eq %x_32, -1.0f
-    %15:bool = eq %x_34, 1.70000004768371582031f
-    %16:bool = and %14, %15
-    if %16 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %17:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-        %x_41:f32 = load %17
-        %19:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
-        %x_43:f32 = load %19
-        %21:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
-        %x_45:f32 = load %21
-        %23:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-        %x_47:f32 = load %23
-        %25:vec4<f32> = construct %x_41, %x_43, %x_45, %x_47
-        store %x_GLF_color, %25
+    %7:f32 = load %a
+    %x_27:f32 = let %7
+    %9:f32 = load %b
+    %x_28:f32 = let %9
+    %11:f32 = pow %x_27, %x_28
+    store %c, %11
+    %12:f32 = load %c
+    %x_30:f32 = let %12
+    %14:vec4<f32> = construct %x_30, %x_30, %x_30, %x_30
+    store %x_GLF_color, %14
+    %15:f32 = load %a
+    %x_32:f32 = let %15
+    %17:f32 = load %b
+    %x_34:f32 = let %17
+    %19:bool = eq %x_32, -1.0f
+    %20:bool = eq %x_34, 1.70000004768371582031f
+    %21:bool = and %19, %20
+    if %21 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %22:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+        %23:f32 = load %22
+        %x_41:f32 = let %23
+        %25:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
+        %26:f32 = load %25
+        %x_43:f32 = let %26
+        %28:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
+        %29:f32 = load %28
+        %x_45:f32 = let %29
+        %31:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+        %32:f32 = load %31
+        %x_47:f32 = let %32
+        %34:vec4<f32> = construct %x_41, %x_43, %x_45, %x_47
+        store %x_GLF_color, %34
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %26:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-        %x_50:f32 = load %26
-        %28:vec4<f32> = construct %x_50, %x_50, %x_50, %x_50
-        store %x_GLF_color, %28
+      $B4: {  # false
+        %35:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+        %36:f32 = load %35
+        %x_50:f32 = let %36
+        %38:vec4<f32> = construct %x_50, %x_50, %x_50, %x_50
+        store %x_GLF_color, %38
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %30:void = call %main_1
-    %31:vec4<f32> = load %x_GLF_color
-    %32:main_out = construct %31
-    ret %32
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %40:void = call %main_1
+    %41:vec4<f32> = load %x_GLF_color
+    %42:main_out = construct %41
+    ret %42
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-rcp-negative-int/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-rcp-negative-int/0-opt.spvasm.expected.ir.msl
index 89a729d..2f6fe9e 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-rcp-negative-int/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-rcp-negative-int/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,58 +12,73 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     store %a, -7563i
     %5:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
     %6:i32 = load %5
     %7:i32 = load %a
-    %8:i32 = div %6, %7
-    %9:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %10:i32 = load %9
-    %11:bool = eq %8, %10
-    if %11 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %12:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %13:i32 = load %12
-        %14:f32 = convert %13
-        %15:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %16:i32 = load %15
-        %17:f32 = convert %16
-        %18:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %19:i32 = load %18
-        %20:f32 = convert %19
-        %21:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %8:i32 = call %tint_div_i32, %6, %7
+    %10:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %11:i32 = load %10
+    %12:bool = eq %8, %11
+    if %12 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %13:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %14:i32 = load %13
+        %15:f32 = convert %14
+        %16:f32 = let %15
+        %17:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %18:i32 = load %17
+        %19:f32 = convert %18
+        %20:f32 = let %19
+        %21:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
         %22:i32 = load %21
         %23:f32 = convert %22
-        %24:vec4<f32> = construct %14, %17, %20, %23
-        store %x_GLF_color, %24
-        exit_if  # if_1
-      }
-      %b4 = block {  # false
-        %25:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %24:f32 = let %23
+        %25:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
         %26:i32 = load %25
         %27:f32 = convert %26
-        %28:vec4<f32> = construct %27
+        %28:vec4<f32> = construct %16, %20, %24, %27
         store %x_GLF_color, %28
         exit_if  # if_1
       }
+      $B4: {  # false
+        %29:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %30:i32 = load %29
+        %31:f32 = convert %30
+        %32:vec4<f32> = construct %31
+        store %x_GLF_color, %32
+        exit_if  # if_1
+      }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %30:void = call %main_1
-    %31:vec4<f32> = load %x_GLF_color
-    %32:main_out = construct %31
-    ret %32
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %34:void = call %main_1
+    %35:vec4<f32> = load %x_GLF_color
+    %36:main_out = construct %35
+    ret %36
+  }
+}
+%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B6: {
+    %39:bool = eq %rhs, 0i
+    %40:bool = eq %lhs, -2147483648i
+    %41:bool = eq %rhs, -1i
+    %42:bool = and %40, %41
+    %43:bool = or %39, %42
+    %44:i32 = select %rhs, 1i, %43
+    %45:i32 = div %lhs, %44
+    ret %45
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-rcp-negative-int/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-rcp-negative-int/0-opt.wgsl.expected.ir.msl
index 2dfe747..890ada6 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-rcp-negative-int/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-rcp-negative-int/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,58 +12,82 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     store %a, -7563i
     %5:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_25:i32 = load %5
-    %x_26:i32 = load %a
-    %8:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_29:i32 = load %8
-    %10:i32 = div %x_25, %x_26
-    %11:bool = eq %10, %x_29
-    if %11 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %12:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_35:i32 = load %12
-        %14:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_38:i32 = load %14
-        %16:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_41:i32 = load %16
-        %18:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_44:i32 = load %18
-        %20:f32 = convert %x_35
-        %21:f32 = convert %x_38
-        %22:f32 = convert %x_41
-        %23:f32 = convert %x_44
-        %24:vec4<f32> = construct %20, %21, %22, %23
-        store %x_GLF_color, %24
+    %6:i32 = load %5
+    %x_25:i32 = let %6
+    %8:i32 = load %a
+    %x_26:i32 = let %8
+    %10:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %11:i32 = load %10
+    %x_29:i32 = let %11
+    %13:i32 = call %tint_div_i32, %x_25, %x_26
+    %15:bool = eq %13, %x_29
+    if %15 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %16:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %17:i32 = load %16
+        %x_35:i32 = let %17
+        %19:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %20:i32 = load %19
+        %x_38:i32 = let %20
+        %22:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %23:i32 = load %22
+        %x_41:i32 = let %23
+        %25:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %26:i32 = load %25
+        %x_44:i32 = let %26
+        %28:f32 = convert %x_35
+        %29:f32 = let %28
+        %30:f32 = convert %x_38
+        %31:f32 = let %30
+        %32:f32 = convert %x_41
+        %33:f32 = let %32
+        %34:f32 = convert %x_44
+        %35:vec4<f32> = construct %29, %31, %33, %34
+        store %x_GLF_color, %35
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %25:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_48:i32 = load %25
-        %x_49:f32 = convert %x_48
-        %28:vec4<f32> = construct %x_49, %x_49, %x_49, %x_49
-        store %x_GLF_color, %28
+      $B4: {  # false
+        %36:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %37:i32 = load %36
+        %x_48:i32 = let %37
+        %39:f32 = convert %x_48
+        %x_49:f32 = let %39
+        %41:vec4<f32> = construct %x_49, %x_49, %x_49, %x_49
+        store %x_GLF_color, %41
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %30:void = call %main_1
-    %31:vec4<f32> = load %x_GLF_color
-    %32:main_out = construct %31
-    ret %32
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %43:void = call %main_1
+    %44:vec4<f32> = load %x_GLF_color
+    %45:main_out = construct %44
+    ret %45
+  }
+}
+%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B6: {
+    %48:bool = eq %rhs, 0i
+    %49:bool = eq %lhs, -2147483648i
+    %50:bool = eq %rhs, -1i
+    %51:bool = and %49, %50
+    %52:bool = or %48, %51
+    %53:i32 = select %rhs, 1i, %52
+    %54:i32 = div %lhs, %53
+    ret %54
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-reciprocal-var-minus-one/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-reciprocal-var-minus-one/0-opt.spvasm.expected.ir.msl
index 16f9ea0..1934d64 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-reciprocal-var-minus-one/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-reciprocal-var-minus-one/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,58 +12,73 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     store %a, -1i
     %5:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
     %6:i32 = load %5
     %7:i32 = load %a
-    %8:i32 = div %6, %7
-    %9:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %10:i32 = load %9
-    %11:bool = lt %8, %10
-    if %11 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %12:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %13:i32 = load %12
-        %14:f32 = convert %13
-        %15:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %16:i32 = load %15
-        %17:f32 = convert %16
-        %18:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %19:i32 = load %18
-        %20:f32 = convert %19
-        %21:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %8:i32 = call %tint_div_i32, %6, %7
+    %10:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %11:i32 = load %10
+    %12:bool = lt %8, %11
+    if %12 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %13:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %14:i32 = load %13
+        %15:f32 = convert %14
+        %16:f32 = let %15
+        %17:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %18:i32 = load %17
+        %19:f32 = convert %18
+        %20:f32 = let %19
+        %21:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
         %22:i32 = load %21
         %23:f32 = convert %22
-        %24:vec4<f32> = construct %14, %17, %20, %23
-        store %x_GLF_color, %24
-        exit_if  # if_1
-      }
-      %b4 = block {  # false
-        %25:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %24:f32 = let %23
+        %25:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
         %26:i32 = load %25
         %27:f32 = convert %26
-        %28:vec4<f32> = construct %27
+        %28:vec4<f32> = construct %16, %20, %24, %27
         store %x_GLF_color, %28
         exit_if  # if_1
       }
+      $B4: {  # false
+        %29:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %30:i32 = load %29
+        %31:f32 = convert %30
+        %32:vec4<f32> = construct %31
+        store %x_GLF_color, %32
+        exit_if  # if_1
+      }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %30:void = call %main_1
-    %31:vec4<f32> = load %x_GLF_color
-    %32:main_out = construct %31
-    ret %32
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %34:void = call %main_1
+    %35:vec4<f32> = load %x_GLF_color
+    %36:main_out = construct %35
+    ret %36
+  }
+}
+%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B6: {
+    %39:bool = eq %rhs, 0i
+    %40:bool = eq %lhs, -2147483648i
+    %41:bool = eq %rhs, -1i
+    %42:bool = and %40, %41
+    %43:bool = or %39, %42
+    %44:i32 = select %rhs, 1i, %43
+    %45:i32 = div %lhs, %44
+    ret %45
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-reciprocal-var-minus-one/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-reciprocal-var-minus-one/0-opt.wgsl.expected.ir.msl
index a059c03..b290764 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-reciprocal-var-minus-one/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-reciprocal-var-minus-one/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,58 +12,82 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     store %a, -1i
     %5:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_25:i32 = load %5
-    %x_26:i32 = load %a
-    %8:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_29:i32 = load %8
-    %10:i32 = div %x_25, %x_26
-    %11:bool = lt %10, %x_29
-    if %11 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %12:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_35:i32 = load %12
-        %14:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_38:i32 = load %14
-        %16:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_41:i32 = load %16
-        %18:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_44:i32 = load %18
-        %20:f32 = convert %x_35
-        %21:f32 = convert %x_38
-        %22:f32 = convert %x_41
-        %23:f32 = convert %x_44
-        %24:vec4<f32> = construct %20, %21, %22, %23
-        store %x_GLF_color, %24
+    %6:i32 = load %5
+    %x_25:i32 = let %6
+    %8:i32 = load %a
+    %x_26:i32 = let %8
+    %10:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %11:i32 = load %10
+    %x_29:i32 = let %11
+    %13:i32 = call %tint_div_i32, %x_25, %x_26
+    %15:bool = lt %13, %x_29
+    if %15 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %16:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %17:i32 = load %16
+        %x_35:i32 = let %17
+        %19:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %20:i32 = load %19
+        %x_38:i32 = let %20
+        %22:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %23:i32 = load %22
+        %x_41:i32 = let %23
+        %25:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %26:i32 = load %25
+        %x_44:i32 = let %26
+        %28:f32 = convert %x_35
+        %29:f32 = let %28
+        %30:f32 = convert %x_38
+        %31:f32 = let %30
+        %32:f32 = convert %x_41
+        %33:f32 = let %32
+        %34:f32 = convert %x_44
+        %35:vec4<f32> = construct %29, %31, %33, %34
+        store %x_GLF_color, %35
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %25:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_48:i32 = load %25
-        %x_49:f32 = convert %x_48
-        %28:vec4<f32> = construct %x_49, %x_49, %x_49, %x_49
-        store %x_GLF_color, %28
+      $B4: {  # false
+        %36:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %37:i32 = load %36
+        %x_48:i32 = let %37
+        %39:f32 = convert %x_48
+        %x_49:f32 = let %39
+        %41:vec4<f32> = construct %x_49, %x_49, %x_49, %x_49
+        store %x_GLF_color, %41
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %30:void = call %main_1
-    %31:vec4<f32> = load %x_GLF_color
-    %32:main_out = construct %31
-    ret %32
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %43:void = call %main_1
+    %44:vec4<f32> = load %x_GLF_color
+    %45:main_out = construct %44
+    ret %45
+  }
+}
+%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B6: {
+    %48:bool = eq %rhs, 0i
+    %49:bool = eq %lhs, -2147483648i
+    %50:bool = eq %rhs, -1i
+    %51:bool = and %49, %50
+    %52:bool = or %48, %51
+    %53:i32 = select %rhs, 1i, %52
+    %54:i32 = div %lhs, %53
+    ret %54
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-reduce-load-array-replace-extract/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-reduce-load-array-replace-extract/0.spvasm.expected.ir.msl
index 5287888..ec5c830 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-reduce-load-array-replace-extract/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-reduce-load-array-replace-extract/0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   zero:i32 @offset(0)
 }
 
@@ -8,27 +8,28 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %x_9:ptr<function, array<i32, 1>, read_write> = var
     %x_10:ptr<function, i32, read_write> = var
     %6:ptr<function, i32, read_write> = access %x_9, 0u
-    %x_6:i32 = load %6
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    %7:i32 = load %6
+    %x_6:i32 = let %7
+    loop [b: $B3] {  # loop_1
+      $B3: {  # body
         store %x_GLF_color, vec4<f32>(0.0f)
-        %8:ptr<uniform, i32, read> = access %x_5, 0u
-        %9:i32 = load %8
-        %10:ptr<function, i32, read_write> = access %x_9, %9
-        %11:i32 = load %10
-        %12:bool = eq %11, %x_6
-        if %12 [t: %b5] {  # if_1
-          %b5 = block {  # true
+        %9:ptr<uniform, i32, read> = access %x_5, 0u
+        %10:i32 = load %9
+        %11:ptr<function, i32, read_write> = access %x_9, %10
+        %12:i32 = load %11
+        %13:bool = eq %12, %x_6
+        if %13 [t: $B4] {  # if_1
+          $B4: {  # true
             store %x_10, 1i
             exit_loop  # loop_1
           }
@@ -36,21 +37,18 @@
         store %x_10, 2i
         exit_loop  # loop_1
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
-      }
     }
-    %13:i32 = load %x_10
-    %14:bool = eq %13, 1i
-    %15:i32 = load %x_10
-    %16:bool = eq %15, 2i
-    %17:bool = or %14, %16
-    if %17 [t: %b6, f: %b7] {  # if_2
-      %b6 = block {  # true
+    %14:i32 = load %x_10
+    %15:bool = eq %14, 1i
+    %16:i32 = load %x_10
+    %17:bool = eq %16, 2i
+    %18:bool = or %15, %17
+    if %18 [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
       }
-      %b7 = block {  # false
+      $B6: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_2
       }
@@ -58,12 +56,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b8 {
-  %b8 = block {
-    %19:void = call %main_1
-    %20:vec4<f32> = load %x_GLF_color
-    %21:main_out = construct %20
-    ret %21
+%tint_symbol = @fragment func():main_out {
+  $B7: {
+    %20:void = call %main_1
+    %21:vec4<f32> = load %x_GLF_color
+    %22:main_out = construct %21
+    ret %22
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-reduce-load-array-replace-extract/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-reduce-load-array-replace-extract/0.wgsl.expected.ir.msl
index 714b3d2..85c00ea 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-reduce-load-array-replace-extract/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-reduce-load-array-replace-extract/0.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   zero:i32 @offset(0)
 }
 
@@ -8,27 +8,31 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %x_9:ptr<function, array<i32, 1>, read_write> = var
     %x_10_phi:ptr<function, i32, read_write> = var
-    %x_33:array<i32, 1> = load %x_9
-    %x_6:i32 = access %x_33, 0u
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    %6:array<i32, 1> = load %x_9
+    %x_33:array<i32, 1> = let %6
+    %8:i32 = access %x_33, 0u
+    %x_6:i32 = let %8
+    loop [b: $B3] {  # loop_1
+      $B3: {  # body
         store %x_GLF_color, vec4<f32>(0.0f)
-        %8:ptr<uniform, i32, read> = access %x_5, 0u
-        %x_7:i32 = load %8
-        %10:ptr<function, i32, read_write> = access %x_9, %x_7
-        %x_8:i32 = load %10
-        %12:bool = eq %x_8, %x_6
-        if %12 [t: %b5] {  # if_1
-          %b5 = block {  # true
+        %10:ptr<uniform, i32, read> = access %x_5, 0u
+        %11:i32 = load %10
+        %x_7:i32 = let %11
+        %13:ptr<function, i32, read_write> = access %x_9, %x_7
+        %14:i32 = load %13
+        %x_8:i32 = let %14
+        %16:bool = eq %x_8, %x_6
+        if %16 [t: $B4] {  # if_1
+          $B4: {  # true
             store %x_10_phi, 1i
             exit_loop  # loop_1
           }
@@ -36,20 +40,18 @@
         store %x_10_phi, 2i
         exit_loop  # loop_1
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
-      }
     }
-    %x_10:i32 = load %x_10_phi
-    %14:bool = eq %x_10, 1i
-    %15:bool = eq %x_10, 2i
-    %16:bool = or %14, %15
-    if %16 [t: %b6, f: %b7] {  # if_2
-      %b6 = block {  # true
+    %17:i32 = load %x_10_phi
+    %x_10:i32 = let %17
+    %19:bool = eq %x_10, 1i
+    %20:bool = eq %x_10, 2i
+    %21:bool = or %19, %20
+    if %21 [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
       }
-      %b7 = block {  # false
+      $B6: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_2
       }
@@ -57,12 +59,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b8 {
-  %b8 = block {
-    %18:void = call %main_1
-    %19:vec4<f32> = load %x_GLF_color
-    %20:main_out = construct %19
-    ret %20
+%tint_symbol = @fragment func():main_out {
+  $B7: {
+    %23:void = call %main_1
+    %24:vec4<f32> = load %x_GLF_color
+    %25:main_out = construct %24
+    ret %25
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-reduce-load-replace-extract/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-reduce-load-replace-extract/0-opt.spvasm.expected.ir.msl
index 93f6ab6..95a6b87 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-reduce-load-replace-extract/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-reduce-load-replace-extract/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:i32 @offset(0)
 }
 
@@ -13,72 +13,73 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_10:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%func_struct_S_i1_i11_ = func(%arg:ptr<function, S, read_write>):void -> %b2 {
-  %b2 = block {
+%func_struct_S_i1_i11_ = func(%arg:ptr<function, S, read_write>):void {
+  $B2: {
     %5:ptr<function, i32, read_write> = access %arg, 1u
     store %5, 1i
     ret
   }
 }
-%main_1 = func():void -> %b3 {
-  %b3 = block {
+%main_1 = func():void {
+  $B3: {
     %a:ptr<function, f32, read_write> = var
     %b:ptr<function, array<S, 2>, read_write> = var
     %param:ptr<function, S, read_write> = var
     store %a, 5.0f
-    loop [b: %b4, c: %b5] {  # loop_1
-      %b4 = block {  # body
+    loop [b: $B4, c: $B5] {  # loop_1
+      $B4: {  # body
         %10:ptr<uniform, i32, read> = access %x_10, 0u
-        %x_43:i32 = load %10
-        %12:ptr<function, i32, read_write> = access %b, %x_43, 0u
-        store %12, 1i
-        %13:ptr<function, i32, read_write> = access %b, 1i, 0u
-        %14:i32 = load %13
-        %15:bool = eq %14, 1i
-        if %15 [t: %b6] {  # if_1
-          %b6 = block {  # true
-            %16:ptr<uniform, i32, read> = access %x_10, 0u
-            %17:i32 = load %16
-            %18:bool = eq %17, 1i
-            if %18 [t: %b7] {  # if_2
-              %b7 = block {  # true
+        %11:i32 = load %10
+        %x_43:i32 = let %11
+        %13:ptr<function, i32, read_write> = access %b, %x_43, 0u
+        store %13, 1i
+        %14:ptr<function, i32, read_write> = access %b, 1i, 0u
+        %15:i32 = load %14
+        %16:bool = eq %15, 1i
+        if %16 [t: $B6] {  # if_1
+          $B6: {  # true
+            %17:ptr<uniform, i32, read> = access %x_10, 0u
+            %18:i32 = load %17
+            %19:bool = eq %18, 1i
+            if %19 [t: $B7] {  # if_2
+              $B7: {  # true
                 exit_loop  # loop_1
               }
             }
-            %19:ptr<function, S, read_write> = access %b, 1i
-            %20:S = load %19
-            store %param, %20
-            %21:void = call %func_struct_S_i1_i11_, %param
-            %22:ptr<function, S, read_write> = access %b, 1i
-            %23:S = load %param
-            store %22, %23
-            %24:ptr<function, i32, read_write> = access %b, 1i, 1u
-            %25:i32 = load %24
-            %26:f32 = convert %25
-            store %a, %26
+            %20:ptr<function, S, read_write> = access %b, 1i
+            %21:S = load %20
+            store %param, %21
+            %22:void = call %func_struct_S_i1_i11_, %param
+            %23:ptr<function, S, read_write> = access %b, 1i
+            %24:S = load %param
+            store %23, %24
+            %25:ptr<function, i32, read_write> = access %b, 1i, 1u
+            %26:i32 = load %25
+            %27:f32 = convert %26
+            store %a, %27
             exit_if  # if_1
           }
         }
         store %a, 0.0f
-        continue %b5
+        continue  # -> $B5
       }
-      %b5 = block {  # continuing
-        break_if true %b4
+      $B5: {  # continuing
+        break_if true  # -> [t: exit_loop loop_1, f: $B4]
       }
     }
-    %27:f32 = load %a
-    %28:bool = eq %27, 5.0f
-    if %28 [t: %b8, f: %b9] {  # if_3
-      %b8 = block {  # true
+    %28:f32 = load %a
+    %29:bool = eq %28, 5.0f
+    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 = block {  # false
+      $B9: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_3
       }
@@ -86,12 +87,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b10 {
-  %b10 = block {
-    %30:void = call %main_1
-    %31:vec4<f32> = load %x_GLF_color
-    %32:main_out = construct %31
-    ret %32
+%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
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-reduce-load-replace-extract/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-reduce-load-replace-extract/0-opt.wgsl.expected.ir.msl
index 68c8437..bd40928 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-reduce-load-replace-extract/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-reduce-load-replace-extract/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:i32 @offset(0)
 }
 
@@ -13,72 +13,79 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_10:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%func_struct_S_i1_i11_ = func(%arg:ptr<function, S, read_write>):void -> %b2 {
-  %b2 = block {
+%func_struct_S_i1_i11_ = func(%arg:ptr<function, S, read_write>):void {
+  $B2: {
     %5:ptr<function, i32, read_write> = access %arg, 1u
     store %5, 1i
     ret
   }
 }
-%main_1 = func():void -> %b3 {
-  %b3 = block {
+%main_1 = func():void {
+  $B3: {
     %a:ptr<function, f32, read_write> = var
     %b:ptr<function, array<S, 2>, read_write> = var
     %param:ptr<function, S, read_write> = var
     store %a, 5.0f
-    loop [b: %b4, c: %b5] {  # loop_1
-      %b4 = block {  # body
+    loop [b: $B4, c: $B5] {  # loop_1
+      $B4: {  # body
         %10:ptr<uniform, i32, read> = access %x_10, 0u
-        %x_43:i32 = load %10
-        %12:ptr<function, i32, read_write> = access %b, %x_43, 0u
-        store %12, 1i
-        %13:ptr<function, i32, read_write> = access %b, 1i, 0u
-        %x_46:i32 = load %13
-        %15:bool = eq %x_46, 1i
-        if %15 [t: %b6] {  # if_1
-          %b6 = block {  # true
-            %16:ptr<uniform, i32, read> = access %x_10, 0u
-            %x_51:i32 = load %16
-            %18:bool = eq %x_51, 1i
-            if %18 [t: %b7] {  # if_2
-              %b7 = block {  # true
+        %11:i32 = load %10
+        %x_43:i32 = let %11
+        %13:ptr<function, i32, read_write> = access %b, %x_43, 0u
+        store %13, 1i
+        %14:ptr<function, i32, read_write> = access %b, 1i, 0u
+        %15:i32 = load %14
+        %x_46:i32 = let %15
+        %17:bool = eq %x_46, 1i
+        if %17 [t: $B6] {  # if_1
+          $B6: {  # true
+            %18:ptr<uniform, i32, read> = access %x_10, 0u
+            %19:i32 = load %18
+            %x_51:i32 = let %19
+            %21:bool = eq %x_51, 1i
+            if %21 [t: $B7] {  # if_2
+              $B7: {  # true
                 exit_loop  # loop_1
               }
             }
-            %19:ptr<function, S, read_write> = access %b, 1i
-            %x_56:S = load %19
+            %22:ptr<function, S, read_write> = access %b, 1i
+            %23:S = load %22
+            %x_56:S = let %23
             store %param, %x_56
-            %21:void = call %func_struct_S_i1_i11_, %param
-            %x_58:S = load %param
-            %23:ptr<function, S, read_write> = access %b, 1i
-            store %23, %x_58
-            %24:ptr<function, i32, read_write> = access %b, 1i, 1u
-            %x_61:i32 = load %24
-            %26:f32 = convert %x_61
-            store %a, %26
+            %25:void = call %func_struct_S_i1_i11_, %param
+            %26:S = load %param
+            %x_58:S = let %26
+            %28:ptr<function, S, read_write> = access %b, 1i
+            store %28, %x_58
+            %29:ptr<function, i32, read_write> = access %b, 1i, 1u
+            %30:i32 = load %29
+            %x_61:i32 = let %30
+            %32:f32 = convert %x_61
+            store %a, %32
             exit_if  # if_1
           }
         }
         store %a, 0.0f
-        continue %b5
+        continue  # -> $B5
       }
-      %b5 = block {  # continuing
-        break_if true %b4
+      $B5: {  # continuing
+        break_if true  # -> [t: exit_loop loop_1, f: $B4]
       }
     }
-    %x_63:f32 = load %a
-    %28:bool = eq %x_63, 5.0f
-    if %28 [t: %b8, f: %b9] {  # if_3
-      %b8 = block {  # true
+    %33:f32 = load %a
+    %x_63:f32 = let %33
+    %35:bool = eq %x_63, 5.0f
+    if %35 [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 = block {  # false
+      $B9: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_3
       }
@@ -86,12 +93,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b10 {
-  %b10 = block {
-    %30:void = call %main_1
-    %31:vec4<f32> = load %x_GLF_color
-    %32:main_out = construct %31
-    ret %32
+%tint_symbol = @fragment func():main_out {
+  $B10: {
+    %37:void = call %main_1
+    %38:vec4<f32> = load %x_GLF_color
+    %39:main_out = construct %38
+    ret %39
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-register-coalescer-live-intervals-target-instr-info-for-discard-for-discard/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-register-coalescer-live-intervals-target-instr-info-for-discard-for-discard/0-opt.spvasm.expected.ir.msl
index 1b157dc..82fd794 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-register-coalescer-live-intervals-target-instr-info-for-discard-for-discard/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-register-coalescer-live-intervals-target-instr-info-for-discard-for-discard/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,114 +20,125 @@
   x_GLF_v1_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_7:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_9:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_v1:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %i:ptr<function, i32, read_write> = var
     %j:ptr<function, i32, read_write> = var
-    %8:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-    %9:i32 = load %8
-    store %i, %9
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %10:i32 = load %i
-        %11:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %12:i32 = load %11
-        %13:bool = lt %10, %12
-        if %13 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    %9:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+    %10:i32 = load %9
+    store %i, %10
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %11:i32 = load %i
+        %12:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %13:i32 = load %12
+        %14:bool = lt %11, %13
+        if %14 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %14:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
-        %15:f32 = load %14
-        %16:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
-        %17:f32 = load %16
-        %18:bool = gt %15, %17
-        if %18 [t: %b7] {  # if_2
-          %b7 = block {  # true
-            discard
+        %15:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
+        %16:f32 = load %15
+        %17:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
+        %18:f32 = load %17
+        %19:bool = gt %16, %18
+        if %19 [t: $B7] {  # if_2
+          $B7: {  # true
+            store %continue_execution, false
             exit_if  # if_2
           }
         }
-        %19:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %20:i32 = load %19
-        store %j, %20
-        loop [b: %b8, c: %b9] {  # loop_2
-          %b8 = block {  # body
-            %21:i32 = load %j
-            %22:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-            %23:i32 = load %22
-            %24:bool = lt %21, %23
-            if %24 [t: %b10, f: %b11] {  # if_3
-              %b10 = block {  # true
+        %20:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %21:i32 = load %20
+        store %j, %21
+        loop [b: $B8, c: $B9] {  # loop_2
+          $B8: {  # body
+            %22:i32 = load %j
+            %23:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+            %24:i32 = load %23
+            %25:bool = lt %22, %24
+            if %25 [t: $B10, f: $B11] {  # if_3
+              $B10: {  # true
                 exit_if  # if_3
               }
-              %b11 = block {  # false
+              $B11: {  # false
                 exit_loop  # loop_2
               }
             }
-            %25:f32 = load_vector_element %gl_FragCoord, 0u
-            %26:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
-            %27:f32 = load %26
-            %28:bool = lt %25, %27
-            if %28 [t: %b12] {  # if_4
-              %b12 = block {  # true
-                discard
+            %26:f32 = load_vector_element %gl_FragCoord, 0u
+            %27:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
+            %28:f32 = load %27
+            %29:bool = lt %26, %28
+            if %29 [t: $B12] {  # if_4
+              $B12: {  # true
+                store %continue_execution, false
                 exit_if  # if_4
               }
             }
-            %29:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
-            %30:i32 = load %29
-            %31:f32 = convert %30
-            %32:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-            %33:i32 = load %32
-            %34:f32 = convert %33
-            %35:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-            %36:i32 = load %35
-            %37:f32 = convert %36
-            %38:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
+            %30:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
+            %31:i32 = load %30
+            %32:f32 = convert %31
+            %33:f32 = let %32
+            %34:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+            %35:i32 = load %34
+            %36:f32 = convert %35
+            %37:f32 = let %36
+            %38:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
             %39:i32 = load %38
             %40:f32 = convert %39
-            %41:vec4<f32> = construct %31, %34, %37, %40
-            store %x_GLF_v1, %41
-            continue %b9
+            %41:f32 = let %40
+            %42:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
+            %43:i32 = load %42
+            %44:f32 = convert %43
+            %45:vec4<f32> = construct %33, %37, %41, %44
+            store %x_GLF_v1, %45
+            continue  # -> $B9
           }
-          %b9 = block {  # continuing
-            %42:i32 = load %j
-            %43:i32 = add %42, 1i
-            store %j, %43
-            next_iteration %b8
+          $B9: {  # continuing
+            %46:i32 = load %j
+            %47:i32 = add %46, 1i
+            store %j, %47
+            next_iteration  # -> $B8
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %44:i32 = load %i
-        %45:i32 = add %44, 1i
-        store %i, %45
-        next_iteration %b3
+      $B4: {  # continuing
+        %48:i32 = load %i
+        %49:i32 = add %48, 1i
+        store %i, %49
+        next_iteration  # -> $B3
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b13 {
-  %b13 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B13: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %48:void = call %main_1
-    %49:vec4<f32> = load %x_GLF_v1
-    %50:main_out = construct %49
-    ret %50
+    %52:void = call %main_1
+    %53:vec4<f32> = load %x_GLF_v1
+    %54:main_out = construct %53
+    %55:bool = load %continue_execution
+    %56:bool = eq %55, false
+    if %56 [t: $B14] {  # if_5
+      $B14: {  # true
+        terminate_invocation
+      }
+    }
+    ret %54
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-register-coalescer-live-intervals-target-instr-info-for-discard-for-discard/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-register-coalescer-live-intervals-target-instr-info-for-discard-for-discard/0-opt.wgsl.expected.ir.msl
index ff4053b..c93f01f 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-register-coalescer-live-intervals-target-instr-info-for-discard-for-discard/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-register-coalescer-live-intervals-target-instr-info-for-discard-for-discard/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,114 +20,141 @@
   x_GLF_v1_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_7:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_9:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_v1:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %i:ptr<function, i32, read_write> = var
     %j:ptr<function, i32, read_write> = var
-    %8:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-    %x_36:i32 = load %8
+    %9:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+    %10:i32 = load %9
+    %x_36:i32 = let %10
     store %i, %x_36
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_41:i32 = load %i
-        %11:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %x_43:i32 = load %11
-        %13:bool = lt %x_41, %x_43
-        if %13 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %12:i32 = load %i
+        %x_41:i32 = let %12
+        %14:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %15:i32 = load %14
+        %x_43:i32 = let %15
+        %17:bool = lt %x_41, %x_43
+        if %17 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %14:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
-        %x_47:f32 = load %14
-        %16:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
-        %x_49:f32 = load %16
-        %18:bool = gt %x_47, %x_49
-        if %18 [t: %b7] {  # if_2
-          %b7 = block {  # true
-            discard
+        %18:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
+        %19:f32 = load %18
+        %x_47:f32 = let %19
+        %21:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
+        %22:f32 = load %21
+        %x_49:f32 = let %22
+        %24:bool = gt %x_47, %x_49
+        if %24 [t: $B7] {  # if_2
+          $B7: {  # true
+            store %continue_execution, false
             exit_if  # if_2
           }
         }
-        %19:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %x_54:i32 = load %19
+        %25:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %26:i32 = load %25
+        %x_54:i32 = let %26
         store %j, %x_54
-        loop [b: %b8, c: %b9] {  # loop_2
-          %b8 = block {  # body
-            %x_59:i32 = load %j
-            %22:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-            %x_61:i32 = load %22
-            %24:bool = lt %x_59, %x_61
-            if %24 [t: %b10, f: %b11] {  # if_3
-              %b10 = block {  # true
+        loop [b: $B8, c: $B9] {  # loop_2
+          $B8: {  # body
+            %28:i32 = load %j
+            %x_59:i32 = let %28
+            %30:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+            %31:i32 = load %30
+            %x_61:i32 = let %31
+            %33:bool = lt %x_59, %x_61
+            if %33 [t: $B10, f: $B11] {  # if_3
+              $B10: {  # true
                 exit_if  # if_3
               }
-              %b11 = block {  # false
+              $B11: {  # false
                 exit_loop  # loop_2
               }
             }
-            %x_65:f32 = load_vector_element %gl_FragCoord, 0u
-            %26:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
-            %x_67:f32 = load %26
-            %28:bool = lt %x_65, %x_67
-            if %28 [t: %b12] {  # if_4
-              %b12 = block {  # true
-                discard
+            %34:f32 = load_vector_element %gl_FragCoord, 0u
+            %x_65:f32 = let %34
+            %36:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
+            %37:f32 = load %36
+            %x_67:f32 = let %37
+            %39:bool = lt %x_65, %x_67
+            if %39 [t: $B12] {  # if_4
+              $B12: {  # true
+                store %continue_execution, false
                 exit_if  # if_4
               }
             }
-            %29:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
-            %x_72:i32 = load %29
-            %31:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-            %x_75:i32 = load %31
-            %33:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-            %x_78:i32 = load %33
-            %35:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
-            %x_81:i32 = load %35
-            %37:f32 = convert %x_72
-            %38:f32 = convert %x_75
-            %39:f32 = convert %x_78
-            %40:f32 = convert %x_81
-            %41:vec4<f32> = construct %37, %38, %39, %40
-            store %x_GLF_v1, %41
-            continue %b9
+            %40:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
+            %41:i32 = load %40
+            %x_72:i32 = let %41
+            %43:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+            %44:i32 = load %43
+            %x_75:i32 = let %44
+            %46:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+            %47:i32 = load %46
+            %x_78:i32 = let %47
+            %49:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
+            %50:i32 = load %49
+            %x_81:i32 = let %50
+            %52:f32 = convert %x_72
+            %53:f32 = let %52
+            %54:f32 = convert %x_75
+            %55:f32 = let %54
+            %56:f32 = convert %x_78
+            %57:f32 = let %56
+            %58:f32 = convert %x_81
+            %59:vec4<f32> = construct %53, %55, %57, %58
+            store %x_GLF_v1, %59
+            continue  # -> $B9
           }
-          %b9 = block {  # continuing
-            %x_84:i32 = load %j
-            %43:i32 = add %x_84, 1i
-            store %j, %43
-            next_iteration %b8
+          $B9: {  # continuing
+            %60:i32 = load %j
+            %x_84:i32 = let %60
+            %62:i32 = add %x_84, 1i
+            store %j, %62
+            next_iteration  # -> $B8
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_86:i32 = load %i
-        %45:i32 = add %x_86, 1i
-        store %i, %45
-        next_iteration %b3
+      $B4: {  # continuing
+        %63:i32 = load %i
+        %x_86:i32 = let %63
+        %65:i32 = add %x_86, 1i
+        store %i, %65
+        next_iteration  # -> $B3
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b13 {
-  %b13 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B13: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %48:void = call %main_1
-    %49:vec4<f32> = load %x_GLF_v1
-    %50:main_out = construct %49
-    ret %50
+    %68:void = call %main_1
+    %69:vec4<f32> = load %x_GLF_v1
+    %70:main_out = construct %69
+    %71:bool = load %continue_execution
+    %72:bool = eq %71, false
+    if %72 [t: $B14] {  # if_5
+      $B14: {  # true
+        terminate_invocation
+      }
+    }
+    ret %70
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-reinitialize-matrix-after-undefined-value/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-reinitialize-matrix-after-undefined-value/0-opt.spvasm.expected.ir.msl
index 59782d1..e3532c7 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-reinitialize-matrix-after-undefined-value/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-reinitialize-matrix-after-undefined-value/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,13 +12,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %m:ptr<function, mat2x2<f32>, read_write> = var
     %f:ptr<function, f32, read_write> = var
     %i:ptr<function, i32, read_write> = var
@@ -26,142 +26,153 @@
     %8:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
     %9:i32 = load %8
     %10:bool = eq %9, 1i
-    if %10 [t: %b3] {  # if_1
-      %b3 = block {  # true
+    if %10 [t: $B3] {  # if_1
+      $B3: {  # true
         %11:f32 = load %f
         %12:vec2<f32> = construct %11, 0.0f
-        %13:f32 = load %f
-        %14:vec2<f32> = construct 0.0f, %13
-        %15:mat2x2<f32> = construct %12, %14
-        store %m, %15
+        %13:vec2<f32> = let %12
+        %14:f32 = load %f
+        %15:vec2<f32> = construct 0.0f, %14
+        %16:mat2x2<f32> = construct %13, %15
+        store %m, %16
         exit_if  # if_1
       }
     }
-    %16:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
-    %17:i32 = load %16
-    store %i, %17
-    loop [b: %b4, c: %b5] {  # loop_1
-      %b4 = block {  # body
-        %18:i32 = load %i
-        %19:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
-        %20:i32 = load %19
-        %21:bool = lt %18, %20
-        if %21 [t: %b6, f: %b7] {  # if_2
-          %b6 = block {  # true
+    %17:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
+    %18:i32 = load %17
+    store %i, %18
+    loop [b: $B4, c: $B5] {  # loop_1
+      $B4: {  # body
+        %19:i32 = load %i
+        %20:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
+        %21:i32 = load %20
+        %22:bool = lt %19, %21
+        if %22 [t: $B6, f: $B7] {  # if_2
+          $B6: {  # true
             exit_if  # if_2
           }
-          %b7 = block {  # false
+          $B7: {  # false
             exit_loop  # loop_1
           }
         }
-        %22:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
-        %23:i32 = load %22
-        store %j, %23
-        loop [b: %b8, c: %b9] {  # loop_2
-          %b8 = block {  # body
-            %24:i32 = load %j
-            %25:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
-            %26:i32 = load %25
-            %27:bool = lt %24, %26
-            if %27 [t: %b10, f: %b11] {  # if_3
-              %b10 = block {  # true
+        %23:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
+        %24:i32 = load %23
+        store %j, %24
+        loop [b: $B8, c: $B9] {  # loop_2
+          $B8: {  # body
+            %25:i32 = load %j
+            %26:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
+            %27:i32 = load %26
+            %28:bool = lt %25, %27
+            if %28 [t: $B10, f: $B11] {  # if_3
+              $B10: {  # true
                 exit_if  # if_3
               }
-              %b11 = block {  # false
+              $B11: {  # false
                 exit_loop  # loop_2
               }
             }
-            %x_66:i32 = load %i
-            %x_67:i32 = load %j
-            %30:ptr<function, vec2<f32>, read_write> = access %m, %x_66
-            %31:i32 = load %i
-            %32:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
-            %33:i32 = load %32
-            %34:i32 = mul %31, %33
-            %35:i32 = load %j
-            %36:i32 = add %34, %35
-            %37:f32 = convert %36
-            store_vector_element %30, %x_67, %37
-            continue %b9
-          }
-          %b9 = block {  # continuing
+            %29:i32 = load %i
+            %x_66:i32 = let %29
+            %31:i32 = load %j
+            %x_67:i32 = let %31
+            %33:ptr<function, vec2<f32>, read_write> = access %m, %x_66
+            %34:i32 = load %i
+            %35:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
+            %36:i32 = load %35
+            %37:i32 = mul %34, %36
             %38:i32 = load %j
-            %39:i32 = add %38, 1i
-            store %j, %39
-            next_iteration %b8
+            %39:i32 = add %37, %38
+            %40:f32 = convert %39
+            store_vector_element %33, %x_67, %40
+            continue  # -> $B9
+          }
+          $B9: {  # continuing
+            %41:i32 = load %j
+            %42:i32 = add %41, 1i
+            store %j, %42
+            next_iteration  # -> $B8
           }
         }
-        continue %b5
+        continue  # -> $B5
       }
-      %b5 = block {  # continuing
-        %40:i32 = load %i
-        %41:i32 = add %40, 1i
-        store %i, %41
-        next_iteration %b4
+      $B5: {  # continuing
+        %43:i32 = load %i
+        %44:i32 = add %43, 1i
+        store %i, %44
+        next_iteration  # -> $B4
       }
     }
-    %42:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
-    %43:i32 = load %42
-    %44:f32 = convert %43
-    %45:ptr<uniform, i32, read> = access %x_5, 0u, 2i, 0u
+    %45:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
     %46:i32 = load %45
     %47:f32 = convert %46
-    %48:vec2<f32> = construct %44, %47
-    %49:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
+    %48:f32 = let %47
+    %49:ptr<uniform, i32, read> = access %x_5, 0u, 2i, 0u
     %50:i32 = load %49
     %51:f32 = convert %50
-    %52:ptr<uniform, i32, read> = access %x_5, 0u, 3i, 0u
-    %53:i32 = load %52
-    %54:f32 = convert %53
-    %55:vec2<f32> = construct %51, %54
-    %x_95:mat2x2<f32> = construct %48, %55
-    %57:ptr<function, vec2<f32>, read_write> = access %m, 0u
-    %58:vec2<f32> = load %57
-    %59:vec2<f32> = access %x_95, 0u
-    %60:vec2<bool> = eq %58, %59
-    %61:bool = all %60
-    %62:ptr<function, vec2<f32>, read_write> = access %m, 1u
-    %63:vec2<f32> = load %62
-    %64:vec2<f32> = access %x_95, 1u
-    %65:vec2<bool> = eq %63, %64
-    %66:bool = all %65
-    %67:bool = and %61, %66
-    if %67 [t: %b12, f: %b13] {  # if_4
-      %b12 = block {  # true
-        %68:ptr<uniform, i32, read> = access %x_5, 0u, 2i, 0u
-        %69:i32 = load %68
-        %70:f32 = convert %69
-        %71:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
-        %72:i32 = load %71
-        %73:f32 = convert %72
-        %74:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
-        %75:i32 = load %74
-        %76:f32 = convert %75
-        %77:ptr<uniform, i32, read> = access %x_5, 0u, 2i, 0u
-        %78:i32 = load %77
-        %79:f32 = convert %78
-        %80:vec4<f32> = construct %70, %73, %76, %79
-        store %x_GLF_color, %80
+    %52:vec2<f32> = construct %48, %51
+    %53:vec2<f32> = let %52
+    %54:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
+    %55:i32 = load %54
+    %56:f32 = convert %55
+    %57:f32 = let %56
+    %58:ptr<uniform, i32, read> = access %x_5, 0u, 3i, 0u
+    %59:i32 = load %58
+    %60:f32 = convert %59
+    %61:vec2<f32> = construct %57, %60
+    %62:mat2x2<f32> = construct %53, %61
+    %x_95:mat2x2<f32> = let %62
+    %64:ptr<function, vec2<f32>, read_write> = access %m, 0u
+    %65:vec2<f32> = load %64
+    %66:vec2<f32> = access %x_95, 0u
+    %67:vec2<bool> = eq %65, %66
+    %68:bool = all %67
+    %69:bool = let %68
+    %70:ptr<function, vec2<f32>, read_write> = access %m, 1u
+    %71:vec2<f32> = load %70
+    %72:vec2<f32> = access %x_95, 1u
+    %73:vec2<bool> = eq %71, %72
+    %74:bool = all %73
+    %75:bool = and %69, %74
+    if %75 [t: $B12, f: $B13] {  # if_4
+      $B12: {  # true
+        %76:ptr<uniform, i32, read> = access %x_5, 0u, 2i, 0u
+        %77:i32 = load %76
+        %78:f32 = convert %77
+        %79:f32 = let %78
+        %80:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
+        %81:i32 = load %80
+        %82:f32 = convert %81
+        %83:f32 = let %82
+        %84:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
+        %85:i32 = load %84
+        %86:f32 = convert %85
+        %87:f32 = let %86
+        %88:ptr<uniform, i32, read> = access %x_5, 0u, 2i, 0u
+        %89:i32 = load %88
+        %90:f32 = convert %89
+        %91:vec4<f32> = construct %79, %83, %87, %90
+        store %x_GLF_color, %91
         exit_if  # if_4
       }
-      %b13 = block {  # false
-        %81:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
-        %82:i32 = load %81
-        %83:f32 = convert %82
-        %84:vec4<f32> = construct %83
-        store %x_GLF_color, %84
+      $B13: {  # false
+        %92:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
+        %93:i32 = load %92
+        %94:f32 = convert %93
+        %95:vec4<f32> = construct %94
+        store %x_GLF_color, %95
         exit_if  # if_4
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b14 {
-  %b14 = block {
-    %86:void = call %main_1
-    %87:vec4<f32> = load %x_GLF_color
-    %88:main_out = construct %87
-    ret %88
+%tint_symbol = @fragment func():main_out {
+  $B14: {
+    %97:void = call %main_1
+    %98:vec4<f32> = load %x_GLF_color
+    %99:main_out = construct %98
+    ret %99
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-reinitialize-matrix-after-undefined-value/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-reinitialize-matrix-after-undefined-value/0-opt.wgsl.expected.ir.msl
index 28ee770..29ab8c7 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-reinitialize-matrix-after-undefined-value/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-reinitialize-matrix-after-undefined-value/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,154 +12,189 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %m:ptr<function, mat2x2<f32>, read_write> = var
     %f:ptr<function, f32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %j:ptr<function, i32, read_write> = var
     %8:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
-    %x_36:i32 = load %8
-    %10:bool = eq %x_36, 1i
-    if %10 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %x_40:f32 = load %f
-        %12:vec2<f32> = construct %x_40, 0.0f
-        %13:vec2<f32> = construct 0.0f, %x_40
-        %14:mat2x2<f32> = construct %12, %13
-        store %m, %14
+    %9:i32 = load %8
+    %x_36:i32 = let %9
+    %11:bool = eq %x_36, 1i
+    if %11 [t: $B3] {  # if_1
+      $B3: {  # true
+        %12:f32 = load %f
+        %x_40:f32 = let %12
+        %14:vec2<f32> = construct %x_40, 0.0f
+        %15:vec2<f32> = let %14
+        %16:vec2<f32> = construct 0.0f, %x_40
+        %17:mat2x2<f32> = construct %15, %16
+        store %m, %17
         exit_if  # if_1
       }
     }
-    %15:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
-    %x_45:i32 = load %15
+    %18:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
+    %19:i32 = load %18
+    %x_45:i32 = let %19
     store %i, %x_45
-    loop [b: %b4, c: %b5] {  # loop_1
-      %b4 = block {  # body
-        %x_50:i32 = load %i
-        %18:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
-        %x_52:i32 = load %18
-        %20:bool = lt %x_50, %x_52
-        if %20 [t: %b6, f: %b7] {  # if_2
-          %b6 = block {  # true
+    loop [b: $B4, c: $B5] {  # loop_1
+      $B4: {  # body
+        %21:i32 = load %i
+        %x_50:i32 = let %21
+        %23:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
+        %24:i32 = load %23
+        %x_52:i32 = let %24
+        %26:bool = lt %x_50, %x_52
+        if %26 [t: $B6, f: $B7] {  # if_2
+          $B6: {  # true
             exit_if  # if_2
           }
-          %b7 = block {  # false
+          $B7: {  # false
             exit_loop  # loop_1
           }
         }
-        %21:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
-        %x_56:i32 = load %21
+        %27:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
+        %28:i32 = load %27
+        %x_56:i32 = let %28
         store %j, %x_56
-        loop [b: %b8, c: %b9] {  # loop_2
-          %b8 = block {  # body
-            %x_61:i32 = load %j
-            %24:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
-            %x_63:i32 = load %24
-            %26:bool = lt %x_61, %x_63
-            if %26 [t: %b10, f: %b11] {  # if_3
-              %b10 = block {  # true
+        loop [b: $B8, c: $B9] {  # loop_2
+          $B8: {  # body
+            %30:i32 = load %j
+            %x_61:i32 = let %30
+            %32:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
+            %33:i32 = load %32
+            %x_63:i32 = let %33
+            %35:bool = lt %x_61, %x_63
+            if %35 [t: $B10, f: $B11] {  # if_3
+              $B10: {  # true
                 exit_if  # if_3
               }
-              %b11 = block {  # false
+              $B11: {  # false
                 exit_loop  # loop_2
               }
             }
-            %x_66:i32 = load %i
-            %x_67:i32 = load %j
-            %x_68:i32 = load %i
-            %30:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
-            %x_70:i32 = load %30
-            %x_72:i32 = load %j
-            %33:ptr<function, vec2<f32>, read_write> = access %m, %x_66
-            %34:i32 = mul %x_68, %x_70
-            %35:i32 = add %34, %x_72
-            %36:f32 = convert %35
-            store_vector_element %33, %x_67, %36
-            continue %b9
+            %36:i32 = load %i
+            %x_66:i32 = let %36
+            %38:i32 = load %j
+            %x_67:i32 = let %38
+            %40:i32 = load %i
+            %x_68:i32 = let %40
+            %42:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
+            %43:i32 = load %42
+            %x_70:i32 = let %43
+            %45:i32 = load %j
+            %x_72:i32 = let %45
+            %47:ptr<function, vec2<f32>, read_write> = access %m, %x_66
+            %48:i32 = mul %x_68, %x_70
+            %49:i32 = add %48, %x_72
+            %50:f32 = convert %49
+            store_vector_element %47, %x_67, %50
+            continue  # -> $B9
           }
-          %b9 = block {  # continuing
-            %x_76:i32 = load %j
-            %38:i32 = add %x_76, 1i
-            store %j, %38
-            next_iteration %b8
+          $B9: {  # continuing
+            %51:i32 = load %j
+            %x_76:i32 = let %51
+            %53:i32 = add %x_76, 1i
+            store %j, %53
+            next_iteration  # -> $B8
           }
         }
-        continue %b5
+        continue  # -> $B5
       }
-      %b5 = block {  # continuing
-        %x_78:i32 = load %i
-        %40:i32 = add %x_78, 1i
-        store %i, %40
-        next_iteration %b4
+      $B5: {  # continuing
+        %54:i32 = load %i
+        %x_78:i32 = let %54
+        %56:i32 = add %x_78, 1i
+        store %i, %56
+        next_iteration  # -> $B4
       }
     }
-    %x_80:mat2x2<f32> = load %m
-    %42:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
-    %x_82:i32 = load %42
-    %44:ptr<uniform, i32, read> = access %x_5, 0u, 2i, 0u
-    %x_85:i32 = load %44
-    %46:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
-    %x_88:i32 = load %46
-    %48:ptr<uniform, i32, read> = access %x_5, 0u, 3i, 0u
-    %x_91:i32 = load %48
-    %50:f32 = convert %x_82
-    %51:f32 = convert %x_85
-    %52:vec2<f32> = construct %50, %51
-    %53:f32 = convert %x_88
-    %54:f32 = convert %x_91
-    %55:vec2<f32> = construct %53, %54
-    %x_95:mat2x2<f32> = construct %52, %55
-    %57:vec2<f32> = access %x_80, 0u
-    %58:vec2<f32> = access %x_95, 0u
-    %59:vec2<bool> = eq %57, %58
-    %60:bool = all %59
-    %61:vec2<f32> = access %x_80, 1u
-    %62:vec2<f32> = access %x_95, 1u
-    %63:vec2<bool> = eq %61, %62
-    %64:bool = all %63
-    %65:bool = and %60, %64
-    if %65 [t: %b12, f: %b13] {  # if_4
-      %b12 = block {  # true
-        %66:ptr<uniform, i32, read> = access %x_5, 0u, 2i, 0u
-        %x_109:i32 = load %66
-        %68:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
-        %x_112:i32 = load %68
-        %70:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
-        %x_115:i32 = load %70
-        %72:ptr<uniform, i32, read> = access %x_5, 0u, 2i, 0u
-        %x_118:i32 = load %72
-        %74:f32 = convert %x_109
-        %75:f32 = convert %x_112
-        %76:f32 = convert %x_115
-        %77:f32 = convert %x_118
-        %78:vec4<f32> = construct %74, %75, %76, %77
-        store %x_GLF_color, %78
+    %57:mat2x2<f32> = load %m
+    %x_80:mat2x2<f32> = let %57
+    %59:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
+    %60:i32 = load %59
+    %x_82:i32 = let %60
+    %62:ptr<uniform, i32, read> = access %x_5, 0u, 2i, 0u
+    %63:i32 = load %62
+    %x_85:i32 = let %63
+    %65:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
+    %66:i32 = load %65
+    %x_88:i32 = let %66
+    %68:ptr<uniform, i32, read> = access %x_5, 0u, 3i, 0u
+    %69:i32 = load %68
+    %x_91:i32 = let %69
+    %71:f32 = convert %x_82
+    %72:f32 = let %71
+    %73:f32 = convert %x_85
+    %74:vec2<f32> = construct %72, %73
+    %75:vec2<f32> = let %74
+    %76:f32 = convert %x_88
+    %77:f32 = let %76
+    %78:f32 = convert %x_91
+    %79:vec2<f32> = construct %77, %78
+    %80:mat2x2<f32> = construct %75, %79
+    %x_95:mat2x2<f32> = let %80
+    %82:vec2<f32> = access %x_80, 0u
+    %83:vec2<f32> = access %x_95, 0u
+    %84:vec2<bool> = eq %82, %83
+    %85:bool = all %84
+    %86:bool = let %85
+    %87:vec2<f32> = access %x_80, 1u
+    %88:vec2<f32> = access %x_95, 1u
+    %89:vec2<bool> = eq %87, %88
+    %90:bool = all %89
+    %91:bool = and %86, %90
+    if %91 [t: $B12, f: $B13] {  # if_4
+      $B12: {  # true
+        %92:ptr<uniform, i32, read> = access %x_5, 0u, 2i, 0u
+        %93:i32 = load %92
+        %x_109:i32 = let %93
+        %95:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
+        %96:i32 = load %95
+        %x_112:i32 = let %96
+        %98:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
+        %99:i32 = load %98
+        %x_115:i32 = let %99
+        %101:ptr<uniform, i32, read> = access %x_5, 0u, 2i, 0u
+        %102:i32 = load %101
+        %x_118:i32 = let %102
+        %104:f32 = convert %x_109
+        %105:f32 = let %104
+        %106:f32 = convert %x_112
+        %107:f32 = let %106
+        %108:f32 = convert %x_115
+        %109:f32 = let %108
+        %110:f32 = convert %x_118
+        %111:vec4<f32> = construct %105, %107, %109, %110
+        store %x_GLF_color, %111
         exit_if  # if_4
       }
-      %b13 = block {  # false
-        %79:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
-        %x_122:i32 = load %79
-        %x_123:f32 = convert %x_122
-        %82:vec4<f32> = construct %x_123, %x_123, %x_123, %x_123
-        store %x_GLF_color, %82
+      $B13: {  # false
+        %112:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
+        %113:i32 = load %112
+        %x_122:i32 = let %113
+        %115:f32 = convert %x_122
+        %x_123:f32 = let %115
+        %117:vec4<f32> = construct %x_123, %x_123, %x_123, %x_123
+        store %x_GLF_color, %117
         exit_if  # if_4
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b14 {
-  %b14 = block {
-    %84:void = call %main_1
-    %85:vec4<f32> = load %x_GLF_color
-    %86:main_out = construct %85
-    ret %86
+%tint_symbol = @fragment func():main_out {
+  $B14: {
+    %119:void = call %main_1
+    %120:vec4<f32> = load %x_GLF_color
+    %121:main_out = construct %120
+    ret %121
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-replace-copy-object/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-replace-copy-object/0-opt.spvasm.expected.ir.msl
index 1692514..69ebfca 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-replace-copy-object/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-replace-copy-object/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:i32 @offset(0)
 }
 
@@ -12,34 +12,37 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_11:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%func_struct_S_i11_i1_ = func(%s:ptr<function, S, read_write>, %x:ptr<function, i32, read_write>):i32 -> %b2 {
-  %b2 = block {
+%func_struct_S_i11_i1_ = func(%s:ptr<function, S, read_write>, %x:ptr<function, i32, read_write>):i32 {
+  $B2: {
     %6:ptr<function, i32, read_write> = access %s, 0u
     %7:i32 = load %6
     %8:bool = eq %7, 1i
-    if %8 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %x_18:i32 = load %x
-        %10:ptr<function, i32, read_write> = access %s, 0u
-        %x_19:i32 = load %10
-        %12:i32 = add %x_18, %x_19
-        ret %12
+    if %8 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %9:i32 = load %x
+        %x_18:i32 = let %9
+        %11:ptr<function, i32, read_write> = access %s, 0u
+        %12:i32 = load %11
+        %x_19:i32 = let %12
+        %14:i32 = add %x_18, %x_19
+        ret %14
       }
-      %b4 = block {  # false
-        %x_21:i32 = load %x
+      $B4: {  # false
+        %15:i32 = load %x
+        %x_21:i32 = let %15
         ret %x_21
       }
     }
     unreachable
   }
 }
-%main_1 = func():void -> %b5 {
-  %b5 = block {
+%main_1 = func():void {
+  $B5: {
     %a:ptr<function, i32, read_write> = var
     %arr:ptr<function, array<S, 1>, read_write> = var
     %i:ptr<function, i32, read_write> = var
@@ -48,73 +51,75 @@
     %param_2:ptr<function, S, read_write> = var
     %param_3:ptr<function, i32, read_write> = var
     store %a, 0i
-    %22:ptr<function, i32, read_write> = access %arr, 0i, 0u
-    %23:ptr<uniform, i32, read> = access %x_11, 0u
-    %24:i32 = load %23
-    store %22, %24
+    %25:ptr<function, i32, read_write> = access %arr, 0i, 0u
+    %26:ptr<uniform, i32, read> = access %x_11, 0u
+    %27:i32 = load %26
+    store %25, %27
     store %i, 0i
-    loop [b: %b6, c: %b7] {  # loop_1
-      %b6 = block {  # body
-        %25:i32 = load %i
-        %26:ptr<uniform, i32, read> = access %x_11, 0u
-        %27:i32 = load %26
-        %28:i32 = add 5i, %27
-        %29:bool = lt %25, %28
-        if %29 [t: %b8, f: %b9] {  # if_2
-          %b8 = block {  # true
+    loop [b: $B6, c: $B7] {  # loop_1
+      $B6: {  # body
+        %28:i32 = load %i
+        %29:ptr<uniform, i32, read> = access %x_11, 0u
+        %30:i32 = load %29
+        %31:i32 = add 5i, %30
+        %32:bool = lt %28, %31
+        if %32 [t: $B8, f: $B9] {  # if_2
+          $B8: {  # true
             exit_if  # if_2
           }
-          %b9 = block {  # false
+          $B9: {  # false
             exit_loop  # loop_1
           }
         }
-        %30:i32 = load %i
-        %31:i32 = mod %30, 2i
-        %32:bool = neq %31, 0i
-        if %32 [t: %b10, f: %b11] {  # if_3
-          %b10 = block {  # true
-            %33:ptr<function, S, read_write> = access %arr, 0i
-            %34:S = load %33
-            store %param, %34
-            %35:i32 = load %i
-            store %param_1, %35
-            %x_29:i32 = call %func_struct_S_i11_i1_, %param, %param_1
+        %33:i32 = load %i
+        %34:i32 = call %tint_mod_i32, %33, 2i
+        %36:bool = neq %34, 0i
+        if %36 [t: $B10, f: $B11] {  # if_3
+          $B10: {  # true
             %37:ptr<function, S, read_write> = access %arr, 0i
-            %38:S = load %param
-            store %37, %38
+            %38:S = load %37
+            store %param, %38
+            %39:i32 = load %i
+            store %param_1, %39
+            %40:i32 = call %func_struct_S_i11_i1_, %param, %param_1
+            %x_29:i32 = let %40
+            %42:ptr<function, S, read_write> = access %arr, 0i
+            %43:S = load %param
+            store %42, %43
             store %a, %x_29
             exit_if  # if_3
           }
-          %b11 = block {  # false
-            %39:ptr<function, S, read_write> = access %arr, 0i
-            %40:S = load %39
-            store %param_2, %40
+          $B11: {  # false
+            %44:ptr<function, S, read_write> = access %arr, 0i
+            %45:S = load %44
+            store %param_2, %45
             store %param_3, 1i
-            %x_30:i32 = call %func_struct_S_i11_i1_, %param_2, %param_3
-            %42:ptr<function, S, read_write> = access %arr, 0i
-            %43:S = load %param_2
-            store %42, %43
+            %46:i32 = call %func_struct_S_i11_i1_, %param_2, %param_3
+            %x_30:i32 = let %46
+            %48:ptr<function, S, read_write> = access %arr, 0i
+            %49:S = load %param_2
+            store %48, %49
             store %a, %x_30
             exit_if  # if_3
           }
         }
-        continue %b7
+        continue  # -> $B7
       }
-      %b7 = block {  # continuing
-        %44:i32 = load %i
-        %45:i32 = add %44, 1i
-        store %i, %45
-        next_iteration %b6
+      $B7: {  # continuing
+        %50:i32 = load %i
+        %51:i32 = add %50, 1i
+        store %i, %51
+        next_iteration  # -> $B6
       }
     }
-    %46:i32 = load %a
-    %47:bool = eq %46, 6i
-    if %47 [t: %b12, f: %b13] {  # if_4
-      %b12 = block {  # true
+    %52:i32 = load %a
+    %53:bool = eq %52, 6i
+    if %53 [t: $B12, f: $B13] {  # if_4
+      $B12: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_4
       }
-      %b13 = block {  # false
+      $B13: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_4
       }
@@ -122,12 +127,27 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b14 {
-  %b14 = block {
-    %49:void = call %main_1
-    %50:vec4<f32> = load %x_GLF_color
-    %51:main_out = construct %50
-    ret %51
+%tint_symbol = @fragment func():main_out {
+  $B14: {
+    %55:void = call %main_1
+    %56:vec4<f32> = load %x_GLF_color
+    %57:main_out = construct %56
+    ret %57
+  }
+}
+%tint_mod_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B15: {
+    %60:bool = eq %rhs, 0i
+    %61:bool = eq %lhs, -2147483648i
+    %62:bool = eq %rhs, -1i
+    %63:bool = and %61, %62
+    %64:bool = or %60, %63
+    %65:i32 = select %rhs, 1i, %64
+    %66:i32 = let %65
+    %67:i32 = div %lhs, %66
+    %68:i32 = mul %67, %66
+    %69:i32 = sub %lhs, %68
+    ret %69
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-replace-copy-object/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-replace-copy-object/0-opt.wgsl.expected.ir.msl
index 587796d..624813e 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-replace-copy-object/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-replace-copy-object/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:i32 @offset(0)
 }
 
@@ -12,34 +12,38 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_11:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%func_struct_S_i11_i1_ = func(%s:ptr<function, S, read_write>, %x:ptr<function, i32, read_write>):i32 -> %b2 {
-  %b2 = block {
+%func_struct_S_i11_i1_ = func(%s:ptr<function, S, read_write>, %x:ptr<function, i32, read_write>):i32 {
+  $B2: {
     %6:ptr<function, i32, read_write> = access %s, 0u
-    %x_17:i32 = load %6
-    %8:bool = eq %x_17, 1i
-    if %8 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %x_18:i32 = load %x
-        %10:ptr<function, i32, read_write> = access %s, 0u
-        %x_19:i32 = load %10
-        %12:i32 = add %x_18, %x_19
-        ret %12
+    %7:i32 = load %6
+    %x_17:i32 = let %7
+    %9:bool = eq %x_17, 1i
+    if %9 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %10:i32 = load %x
+        %x_18:i32 = let %10
+        %12:ptr<function, i32, read_write> = access %s, 0u
+        %13:i32 = load %12
+        %x_19:i32 = let %13
+        %15:i32 = add %x_18, %x_19
+        ret %15
       }
-      %b4 = block {  # false
-        %x_21:i32 = load %x
+      $B4: {  # false
+        %16:i32 = load %x
+        %x_21:i32 = let %16
         ret %x_21
       }
     }
     unreachable
   }
 }
-%main_1 = func():void -> %b5 {
-  %b5 = block {
+%main_1 = func():void {
+  $B5: {
     %a:ptr<function, i32, read_write> = var
     %arr:ptr<function, array<S, 1>, read_write> = var
     %i:ptr<function, i32, read_write> = var
@@ -48,73 +52,86 @@
     %param_2:ptr<function, S, read_write> = var
     %param_3:ptr<function, i32, read_write> = var
     store %a, 0i
-    %22:ptr<uniform, i32, read> = access %x_11, 0u
-    %x_22:i32 = load %22
-    %24:ptr<function, i32, read_write> = access %arr, 0i, 0u
-    store %24, %x_22
+    %26:ptr<uniform, i32, read> = access %x_11, 0u
+    %27:i32 = load %26
+    %x_22:i32 = let %27
+    %29:ptr<function, i32, read_write> = access %arr, 0i, 0u
+    store %29, %x_22
     store %i, 0i
-    loop [b: %b6, c: %b7] {  # loop_1
-      %b6 = block {  # body
-        %x_23:i32 = load %i
-        %26:ptr<uniform, i32, read> = access %x_11, 0u
-        %x_24:i32 = load %26
-        %28:i32 = add 5i, %x_24
-        %29:bool = lt %x_23, %28
-        if %29 [t: %b8, f: %b9] {  # if_2
-          %b8 = block {  # true
+    loop [b: $B6, c: $B7] {  # loop_1
+      $B6: {  # body
+        %30:i32 = load %i
+        %x_23:i32 = let %30
+        %32:ptr<uniform, i32, read> = access %x_11, 0u
+        %33:i32 = load %32
+        %x_24:i32 = let %33
+        %35:i32 = add 5i, %x_24
+        %36:bool = lt %x_23, %35
+        if %36 [t: $B8, f: $B9] {  # if_2
+          $B8: {  # true
             exit_if  # if_2
           }
-          %b9 = block {  # false
+          $B9: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_26:i32 = load %i
-        %31:i32 = mod %x_26, 2i
-        %32:bool = neq %31, 0i
-        if %32 [t: %b10, f: %b11] {  # if_3
-          %b10 = block {  # true
-            %33:ptr<function, S, read_write> = access %arr, 0i
-            %x_74:S = load %33
+        %37:i32 = load %i
+        %x_26:i32 = let %37
+        %39:i32 = call %tint_mod_i32, %x_26, 2i
+        %41:bool = neq %39, 0i
+        if %41 [t: $B10, f: $B11] {  # if_3
+          $B10: {  # true
+            %42:ptr<function, S, read_write> = access %arr, 0i
+            %43:S = load %42
+            %x_74:S = let %43
             store %param, %x_74
-            %x_28:i32 = load %i
+            %45:i32 = load %i
+            %x_28:i32 = let %45
             store %param_1, %x_28
-            %x_29:i32 = call %func_struct_S_i11_i1_, %param, %param_1
-            %x_75:S = load %param
-            %38:ptr<function, S, read_write> = access %arr, 0i
-            store %38, %x_75
+            %47:i32 = call %func_struct_S_i11_i1_, %param, %param_1
+            %x_29:i32 = let %47
+            %49:S = load %param
+            %x_75:S = let %49
+            %51:ptr<function, S, read_write> = access %arr, 0i
+            store %51, %x_75
             store %a, %x_29
             exit_if  # if_3
           }
-          %b11 = block {  # false
-            %39:ptr<function, S, read_write> = access %arr, 0i
-            %x_78:S = load %39
+          $B11: {  # false
+            %52:ptr<function, S, read_write> = access %arr, 0i
+            %53:S = load %52
+            %x_78:S = let %53
             store %param_2, %x_78
             store %param_3, 1i
-            %x_30:i32 = call %func_struct_S_i11_i1_, %param_2, %param_3
-            %x_79:S = load %param_2
-            %43:ptr<function, S, read_write> = access %arr, 0i
-            store %43, %x_79
+            %55:i32 = call %func_struct_S_i11_i1_, %param_2, %param_3
+            %x_30:i32 = let %55
+            %57:S = load %param_2
+            %x_79:S = let %57
+            %59:ptr<function, S, read_write> = access %arr, 0i
+            store %59, %x_79
             store %a, %x_30
             exit_if  # if_3
           }
         }
-        continue %b7
+        continue  # -> $B7
       }
-      %b7 = block {  # continuing
-        %x_31:i32 = load %i
-        %45:i32 = add %x_31, 1i
-        store %i, %45
-        next_iteration %b6
+      $B7: {  # continuing
+        %60:i32 = load %i
+        %x_31:i32 = let %60
+        %62:i32 = add %x_31, 1i
+        store %i, %62
+        next_iteration  # -> $B6
       }
     }
-    %x_33:i32 = load %a
-    %47:bool = eq %x_33, 6i
-    if %47 [t: %b12, f: %b13] {  # if_4
-      %b12 = block {  # true
+    %63:i32 = load %a
+    %x_33:i32 = let %63
+    %65:bool = eq %x_33, 6i
+    if %65 [t: $B12, f: $B13] {  # if_4
+      $B12: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_4
       }
-      %b13 = block {  # false
+      $B13: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_4
       }
@@ -122,12 +139,27 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b14 {
-  %b14 = block {
-    %49:void = call %main_1
-    %50:vec4<f32> = load %x_GLF_color
-    %51:main_out = construct %50
-    ret %51
+%tint_symbol = @fragment func():main_out {
+  $B14: {
+    %67:void = call %main_1
+    %68:vec4<f32> = load %x_GLF_color
+    %69:main_out = construct %68
+    ret %69
+  }
+}
+%tint_mod_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B15: {
+    %72:bool = eq %rhs, 0i
+    %73:bool = eq %lhs, -2147483648i
+    %74:bool = eq %rhs, -1i
+    %75:bool = and %73, %74
+    %76:bool = or %72, %75
+    %77:i32 = select %rhs, 1i, %76
+    %78:i32 = let %77
+    %79:i32 = div %lhs, %78
+    %80:i32 = mul %79, %78
+    %81:i32 = sub %lhs, %80
+    ret %81
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-return-after-do-while/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-return-after-do-while/0-opt.spvasm.expected.ir.msl
index c8834f6..f8c349d 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-return-after-do-while/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-return-after-do-while/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,51 +12,56 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_5:ptr<uniform, buf1, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %4:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
     %5:i32 = load %4
     %6:f32 = convert %5
-    %7:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
-    %8:i32 = load %7
-    %9:f32 = convert %8
-    %10:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
-    %11:i32 = load %10
-    %12:f32 = convert %11
-    %13:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
-    %14:i32 = load %13
-    %15:f32 = convert %14
-    %16:vec4<f32> = construct %6, %9, %12, %15
-    store %x_GLF_color, %16
-    %17:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
-    %18:i32 = load %17
-    %19:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
-    %20:i32 = load %19
-    %21:bool = gt %18, %20
-    if %21 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        loop [b: %b4, c: %b5] {  # loop_1
-          %b4 = block {  # body
-            %22:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
-            %23:i32 = load %22
-            %24:f32 = convert %23
-            %25:vec4<f32> = construct %24
-            store %x_GLF_color, %25
-            continue %b5
+    %7:f32 = let %6
+    %8:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
+    %9:i32 = load %8
+    %10:f32 = convert %9
+    %11:f32 = let %10
+    %12:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
+    %13:i32 = load %12
+    %14:f32 = convert %13
+    %15:f32 = let %14
+    %16:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
+    %17:i32 = load %16
+    %18:f32 = convert %17
+    %19:vec4<f32> = construct %7, %11, %15, %18
+    store %x_GLF_color, %19
+    %20:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
+    %21:i32 = load %20
+    %22:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
+    %23:i32 = load %22
+    %24:bool = gt %21, %23
+    if %24 [t: $B3] {  # if_1
+      $B3: {  # true
+        loop [b: $B4, c: $B5] {  # loop_1
+          $B4: {  # body
+            %25:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
+            %26:i32 = load %25
+            %27:f32 = convert %26
+            %28:vec4<f32> = construct %27
+            store %x_GLF_color, %28
+            continue  # -> $B5
           }
-          %b5 = block {  # continuing
-            %26:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
-            %x_50:i32 = load %26
-            %28:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
-            %x_52:i32 = load %28
-            %30:bool = gt %x_50, %x_52
-            %31:bool = eq %30, false
-            break_if %31 %b4
+          $B5: {  # continuing
+            %29:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
+            %30:i32 = load %29
+            %x_50:i32 = let %30
+            %32:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
+            %33:i32 = load %32
+            %x_52:i32 = let %33
+            %35:bool = gt %x_50, %x_52
+            %36:bool = eq %35, false
+            break_if %36  # -> [t: exit_loop loop_1, f: $B4]
           }
         }
         ret
@@ -65,12 +70,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b6 {
-  %b6 = block {
-    %33:void = call %main_1
-    %34:vec4<f32> = load %x_GLF_color
-    %35:main_out = construct %34
-    ret %35
+%tint_symbol = @fragment func():main_out {
+  $B6: {
+    %38:void = call %main_1
+    %39:vec4<f32> = load %x_GLF_color
+    %40:main_out = construct %39
+    ret %40
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-return-after-do-while/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-return-after-do-while/0-opt.wgsl.expected.ir.msl
index 0533ff1..50d0bfd 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-return-after-do-while/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-return-after-do-while/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,51 +12,64 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_5:ptr<uniform, buf1, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %4:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
-    %x_22:i32 = load %4
-    %6:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
-    %x_25:i32 = load %6
-    %8:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
-    %x_28:i32 = load %8
-    %10:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
-    %x_31:i32 = load %10
-    %12:f32 = convert %x_22
-    %13:f32 = convert %x_25
-    %14:f32 = convert %x_28
-    %15:f32 = convert %x_31
-    %16:vec4<f32> = construct %12, %13, %14, %15
-    store %x_GLF_color, %16
-    %17:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
-    %x_35:i32 = load %17
-    %19:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
-    %x_37:i32 = load %19
-    %21:bool = gt %x_35, %x_37
-    if %21 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        loop [b: %b4, c: %b5] {  # loop_1
-          %b4 = block {  # body
-            %22:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
-            %x_46:i32 = load %22
-            %x_47:f32 = convert %x_46
-            %25:vec4<f32> = construct %x_47, %x_47, %x_47, %x_47
-            store %x_GLF_color, %25
-            continue %b5
+    %5:i32 = load %4
+    %x_22:i32 = let %5
+    %7:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
+    %8:i32 = load %7
+    %x_25:i32 = let %8
+    %10:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
+    %11:i32 = load %10
+    %x_28:i32 = let %11
+    %13:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
+    %14:i32 = load %13
+    %x_31:i32 = let %14
+    %16:f32 = convert %x_22
+    %17:f32 = let %16
+    %18:f32 = convert %x_25
+    %19:f32 = let %18
+    %20:f32 = convert %x_28
+    %21:f32 = let %20
+    %22:f32 = convert %x_31
+    %23:vec4<f32> = construct %17, %19, %21, %22
+    store %x_GLF_color, %23
+    %24:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
+    %25:i32 = load %24
+    %x_35:i32 = let %25
+    %27:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
+    %28:i32 = load %27
+    %x_37:i32 = let %28
+    %30:bool = gt %x_35, %x_37
+    if %30 [t: $B3] {  # if_1
+      $B3: {  # true
+        loop [b: $B4, c: $B5] {  # loop_1
+          $B4: {  # body
+            %31:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
+            %32:i32 = load %31
+            %x_46:i32 = let %32
+            %34:f32 = convert %x_46
+            %x_47:f32 = let %34
+            %36:vec4<f32> = construct %x_47, %x_47, %x_47, %x_47
+            store %x_GLF_color, %36
+            continue  # -> $B5
           }
-          %b5 = block {  # continuing
-            %26:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
-            %x_50:i32 = load %26
-            %28:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
-            %x_52:i32 = load %28
-            %30:bool = gt %x_50, %x_52
-            %31:bool = eq %30, false
-            break_if %31 %b4
+          $B5: {  # continuing
+            %37:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
+            %38:i32 = load %37
+            %x_50:i32 = let %38
+            %40:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
+            %41:i32 = load %40
+            %x_52:i32 = let %41
+            %43:bool = gt %x_50, %x_52
+            %44:bool = eq %43, false
+            break_if %44  # -> [t: exit_loop loop_1, f: $B4]
           }
         }
         ret
@@ -65,12 +78,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b6 {
-  %b6 = block {
-    %33:void = call %main_1
-    %34:vec4<f32> = load %x_GLF_color
-    %35:main_out = construct %34
-    ret %35
+%tint_symbol = @fragment func():main_out {
+  $B6: {
+    %46:void = call %main_1
+    %47:vec4<f32> = load %x_GLF_color
+    %48:main_out = construct %47
+    ret %48
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-return-after-first-iteration/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-return-after-first-iteration/0-opt.spvasm.expected.ir.msl
index fbb28fd..be2871a 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-return-after-first-iteration/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-return-after-first-iteration/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -24,7 +24,7 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_7:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
@@ -32,24 +32,24 @@
   %x_11:ptr<uniform, buf2, read> = var @binding_point(0, 2)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %i:ptr<function, i32, read_write> = var
     store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
     %8:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
     %9:i32 = load %8
     store %i, %9
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %10:i32 = load %i
         %11:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
         %12:i32 = load %11
         %13:bool = lt %10, %12
-        if %13 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %13 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
@@ -57,26 +57,26 @@
         %15:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
         %16:i32 = load %15
         %17:bool = neq %14, %16
-        if %17 [t: %b7] {  # if_2
-          %b7 = block {  # true
+        if %17 [t: $B7] {  # if_2
+          $B7: {  # true
             ret
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
+      $B4: {  # continuing
         %18:i32 = load %i
         %19:i32 = add %18, 1i
         store %i, %19
-        next_iteration %b3
+        next_iteration  # -> $B3
       }
     }
     %20:f32 = load_vector_element %gl_FragCoord, 1u
     %21:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
     %22:f32 = load %21
     %23:bool = lt %20, %22
-    if %23 [t: %b8] {  # if_3
-      %b8 = block {  # true
+    if %23 [t: $B8] {  # if_3
+      $B8: {  # true
         ret
       }
     }
@@ -87,8 +87,8 @@
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b9 {
-  %b9 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B9: {
     store %gl_FragCoord, %gl_FragCoord_param
     %29:void = call %main_1
     %30:vec4<f32> = load %x_GLF_color
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-return-after-first-iteration/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-return-after-first-iteration/0-opt.wgsl.expected.ir.msl
index b5edf9c..f9914fe 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-return-after-first-iteration/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-return-after-first-iteration/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -24,7 +24,7 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_7:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
@@ -32,68 +32,77 @@
   %x_11:ptr<uniform, buf2, read> = var @binding_point(0, 2)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %i:ptr<function, i32, read_write> = var
     store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
     %8:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-    %x_42:i32 = load %8
+    %9:i32 = load %8
+    %x_42:i32 = let %9
     store %i, %x_42
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_47:i32 = load %i
-        %11:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %x_49:i32 = load %11
-        %13:bool = lt %x_47, %x_49
-        if %13 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %11:i32 = load %i
+        %x_47:i32 = let %11
+        %13:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %14:i32 = load %13
+        %x_49:i32 = let %14
+        %16:bool = lt %x_47, %x_49
+        if %16 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_52:i32 = load %i
-        %15:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %x_54:i32 = load %15
-        %17:bool = neq %x_52, %x_54
-        if %17 [t: %b7] {  # if_2
-          %b7 = block {  # true
+        %17:i32 = load %i
+        %x_52:i32 = let %17
+        %19:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %20:i32 = load %19
+        %x_54:i32 = let %20
+        %22:bool = neq %x_52, %x_54
+        if %22 [t: $B7] {  # if_2
+          $B7: {  # true
             ret
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_58:i32 = load %i
-        %19:i32 = add %x_58, 1i
-        store %i, %19
-        next_iteration %b3
+      $B4: {  # continuing
+        %23:i32 = load %i
+        %x_58:i32 = let %23
+        %25:i32 = add %x_58, 1i
+        store %i, %25
+        next_iteration  # -> $B3
       }
     }
-    %x_61:f32 = load_vector_element %gl_FragCoord, 1u
-    %21:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
-    %x_63:f32 = load %21
-    %23:bool = lt %x_61, %x_63
-    if %23 [t: %b8] {  # if_3
-      %b8 = block {  # true
+    %26:f32 = load_vector_element %gl_FragCoord, 1u
+    %x_61:f32 = let %26
+    %28:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
+    %29:f32 = load %28
+    %x_63:f32 = let %29
+    %31:bool = lt %x_61, %x_63
+    if %31 [t: $B8] {  # if_3
+      $B8: {  # true
         ret
       }
     }
-    %24:ptr<uniform, vec2<f32>, read> = access %x_11, 0u
-    %x_68:f32 = load_vector_element %24, 1u
-    %26:vec4<f32> = construct 1.0f, 1.0f, 1.0f, %x_68
-    store %x_GLF_color, %26
+    %32:ptr<uniform, vec2<f32>, read> = access %x_11, 0u
+    %33:f32 = load_vector_element %32, 1u
+    %x_68:f32 = let %33
+    %35:vec4<f32> = construct 1.0f, 1.0f, 1.0f, %x_68
+    store %x_GLF_color, %35
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b9 {
-  %b9 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B9: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %29:void = call %main_1
-    %30:vec4<f32> = load %x_GLF_color
-    %31:main_out = construct %30
-    ret %31
+    %38:void = call %main_1
+    %39:vec4<f32> = load %x_GLF_color
+    %40:main_out = construct %39
+    ret %40
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-return-partly-undefined-vector-from-array/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-return-partly-undefined-vector-from-array/0-opt.spvasm.expected.ir.msl
index 12b0b76..311b526 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-return-partly-undefined-vector-from-array/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-return-partly-undefined-vector-from-array/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,14 +20,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_11:ptr<uniform, buf1, read> = var @binding_point(0, 1)
 }
 
-%func_ = func():vec2<f32> -> %b2 {
-  %b2 = block {
+%func_ = func():vec2<f32> {
+  $B2: {
     %v:ptr<function, vec2<f32>, read_write> = var
     %a:ptr<function, i32, read_write> = var
     %indexable:ptr<function, array<vec2<f32>, 3>, read_write> = var
@@ -35,64 +35,71 @@
     %9:f32 = load %8
     store_vector_element %v, 1u, %9
     store %a, 2i
-    %x_77:i32 = load %a
-    %11:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
-    %12:f32 = load %11
-    %13:vec2<f32> = construct %12
-    %14:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
-    %15:f32 = load %14
-    %16:vec2<f32> = construct %15
-    %17:vec2<f32> = load %v
-    %18:array<vec2<f32>, 3> = construct %13, %16, %17
-    store %indexable, %18
-    %19:ptr<function, vec2<f32>, read_write> = access %indexable, %x_77
-    %x_79:vec2<f32> = load %19
+    %10:i32 = load %a
+    %x_77:i32 = let %10
+    %12:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
+    %13:f32 = load %12
+    %14:vec2<f32> = construct %13
+    %15:vec2<f32> = let %14
+    %16:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
+    %17:f32 = load %16
+    %18:vec2<f32> = construct %17
+    %19:vec2<f32> = load %v
+    %20:array<vec2<f32>, 3> = construct %15, %18, %19
+    store %indexable, %20
+    %21:ptr<function, vec2<f32>, read_write> = access %indexable, %x_77
+    %22:vec2<f32> = load %21
+    %x_79:vec2<f32> = let %22
     ret %x_79
   }
 }
-%main_1 = func():void -> %b3 {
-  %b3 = block {
-    %x_40:vec2<f32> = call %func_
-    %23:f32 = access %x_40, 1u
-    %24:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-    %25:f32 = load %24
-    %26:bool = eq %23, %25
-    if %26 [t: %b4, f: %b5] {  # if_1
-      %b4 = block {  # true
-        %27:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
-        %28:i32 = load %27
-        %29:f32 = convert %28
-        %30:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
-        %31:i32 = load %30
-        %32:f32 = convert %31
-        %33:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
-        %34:i32 = load %33
-        %35:f32 = convert %34
-        %36:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
-        %37:i32 = load %36
-        %38:f32 = convert %37
-        %39:vec4<f32> = construct %29, %32, %35, %38
-        store %x_GLF_color, %39
+%main_1 = func():void {
+  $B3: {
+    %25:vec2<f32> = call %func_
+    %x_40:vec2<f32> = let %25
+    %27:f32 = access %x_40, 1u
+    %28:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
+    %29:f32 = load %28
+    %30:bool = eq %27, %29
+    if %30 [t: $B4, f: $B5] {  # if_1
+      $B4: {  # true
+        %31:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
+        %32:i32 = load %31
+        %33:f32 = convert %32
+        %34:f32 = let %33
+        %35:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
+        %36:i32 = load %35
+        %37:f32 = convert %36
+        %38:f32 = let %37
+        %39:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
+        %40:i32 = load %39
+        %41:f32 = convert %40
+        %42:f32 = let %41
+        %43:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
+        %44:i32 = load %43
+        %45:f32 = convert %44
+        %46:vec4<f32> = construct %34, %38, %42, %45
+        store %x_GLF_color, %46
         exit_if  # if_1
       }
-      %b5 = block {  # false
-        %40:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
-        %41:i32 = load %40
-        %42:f32 = convert %41
-        %43:vec4<f32> = construct %42
-        store %x_GLF_color, %43
+      $B5: {  # false
+        %47:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
+        %48:i32 = load %47
+        %49:f32 = convert %48
+        %50:vec4<f32> = construct %49
+        store %x_GLF_color, %50
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b6 {
-  %b6 = block {
-    %45:void = call %main_1
-    %46:vec4<f32> = load %x_GLF_color
-    %47:main_out = construct %46
-    ret %47
+%tint_symbol = @fragment func():main_out {
+  $B6: {
+    %52:void = call %main_1
+    %53:vec4<f32> = load %x_GLF_color
+    %54:main_out = construct %53
+    ret %54
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-return-partly-undefined-vector-from-array/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-return-partly-undefined-vector-from-array/0-opt.wgsl.expected.ir.msl
index c256d16..75561a9 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-return-partly-undefined-vector-from-array/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-return-partly-undefined-vector-from-array/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,79 +20,97 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_11:ptr<uniform, buf1, read> = var @binding_point(0, 1)
 }
 
-%func_ = func():vec2<f32> -> %b2 {
-  %b2 = block {
+%func_ = func():vec2<f32> {
+  $B2: {
     %v:ptr<function, vec2<f32>, read_write> = var
     %a:ptr<function, i32, read_write> = var
     %indexable:ptr<function, array<vec2<f32>, 3>, read_write> = var
     %8:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-    %x_67:f32 = load %8
+    %9:f32 = load %8
+    %x_67:f32 = let %9
     store_vector_element %v, 1u, %x_67
     store %a, 2i
-    %10:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
-    %x_70:f32 = load %10
-    %12:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
-    %x_73:f32 = load %12
-    %x_75:vec2<f32> = load %v
-    %x_77:i32 = load %a
-    %16:vec2<f32> = construct %x_70, %x_70
-    %17:vec2<f32> = construct %x_73, %x_73
-    %18:array<vec2<f32>, 3> = construct %16, %17, %x_75
-    store %indexable, %18
-    %19:ptr<function, vec2<f32>, read_write> = access %indexable, %x_77
-    %x_79:vec2<f32> = load %19
+    %11:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
+    %12:f32 = load %11
+    %x_70:f32 = let %12
+    %14:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
+    %15:f32 = load %14
+    %x_73:f32 = let %15
+    %17:vec2<f32> = load %v
+    %x_75:vec2<f32> = let %17
+    %19:i32 = load %a
+    %x_77:i32 = let %19
+    %21:vec2<f32> = construct %x_70, %x_70
+    %22:vec2<f32> = let %21
+    %23:vec2<f32> = construct %x_73, %x_73
+    %24:array<vec2<f32>, 3> = construct %22, %23, %x_75
+    store %indexable, %24
+    %25:ptr<function, vec2<f32>, read_write> = access %indexable, %x_77
+    %26:vec2<f32> = load %25
+    %x_79:vec2<f32> = let %26
     ret %x_79
   }
 }
-%main_1 = func():void -> %b3 {
-  %b3 = block {
-    %x_40:vec2<f32> = call %func_
-    %23:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-    %x_43:f32 = load %23
-    %25:f32 = access %x_40, 1u
-    %26:bool = eq %25, %x_43
-    if %26 [t: %b4, f: %b5] {  # if_1
-      %b4 = block {  # true
-        %27:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
-        %x_49:i32 = load %27
-        %29:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
-        %x_52:i32 = load %29
-        %31:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
-        %x_55:i32 = load %31
-        %33:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
-        %x_58:i32 = load %33
-        %35:f32 = convert %x_49
-        %36:f32 = convert %x_52
-        %37:f32 = convert %x_55
-        %38:f32 = convert %x_58
-        %39:vec4<f32> = construct %35, %36, %37, %38
-        store %x_GLF_color, %39
+%main_1 = func():void {
+  $B3: {
+    %29:vec2<f32> = call %func_
+    %x_40:vec2<f32> = let %29
+    %31:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
+    %32:f32 = load %31
+    %x_43:f32 = let %32
+    %34:f32 = access %x_40, 1u
+    %35:bool = eq %34, %x_43
+    if %35 [t: $B4, f: $B5] {  # if_1
+      $B4: {  # true
+        %36:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
+        %37:i32 = load %36
+        %x_49:i32 = let %37
+        %39:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
+        %40:i32 = load %39
+        %x_52:i32 = let %40
+        %42:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
+        %43:i32 = load %42
+        %x_55:i32 = let %43
+        %45:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
+        %46:i32 = load %45
+        %x_58:i32 = let %46
+        %48:f32 = convert %x_49
+        %49:f32 = let %48
+        %50:f32 = convert %x_52
+        %51:f32 = let %50
+        %52:f32 = convert %x_55
+        %53:f32 = let %52
+        %54:f32 = convert %x_58
+        %55:vec4<f32> = construct %49, %51, %53, %54
+        store %x_GLF_color, %55
         exit_if  # if_1
       }
-      %b5 = block {  # false
-        %40:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
-        %x_62:i32 = load %40
-        %x_63:f32 = convert %x_62
-        %43:vec4<f32> = construct %x_63, %x_63, %x_63, %x_63
-        store %x_GLF_color, %43
+      $B5: {  # false
+        %56:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
+        %57:i32 = load %56
+        %x_62:i32 = let %57
+        %59:f32 = convert %x_62
+        %x_63:f32 = let %59
+        %61:vec4<f32> = construct %x_63, %x_63, %x_63, %x_63
+        store %x_GLF_color, %61
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b6 {
-  %b6 = block {
-    %45:void = call %main_1
-    %46:vec4<f32> = load %x_GLF_color
-    %47:main_out = construct %46
-    ret %47
+%tint_symbol = @fragment func():main_out {
+  $B6: {
+    %63:void = call %main_1
+    %64:vec4<f32> = load %x_GLF_color
+    %65:main_out = construct %64
+    ret %65
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops-array-access/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops-array-access/0-opt.spvasm.expected.ir.msl
index 8678bc3..a5f8eae 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops-array-access/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops-array-access/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,14 +20,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_8:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %sums:ptr<function, array<f32, 2>, read_write> = var
     %a:ptr<function, i32, read_write> = var
     %b:ptr<function, i32, read_write> = var
@@ -42,346 +42,353 @@
     %x_215:ptr<function, bool, read_write> = var
     %x_216:ptr<function, bool, read_write> = var
     %18:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_20:i32 = load %18
-    %20:ptr<function, f32, read_write> = access %sums, %x_20
-    %21:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-    %22:f32 = load %21
-    store %20, %22
-    %23:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_22:i32 = load %23
-    %25:ptr<function, f32, read_write> = access %sums, %x_22
-    %26:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-    %27:f32 = load %26
-    store %25, %27
-    %28:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %29:i32 = load %28
-    store %a, %29
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %30:i32 = load %a
-        %31:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %32:i32 = load %31
-        %33:bool = lt %30, %32
-        if %33 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    %19:i32 = load %18
+    %x_20:i32 = let %19
+    %21:ptr<function, f32, read_write> = access %sums, %x_20
+    %22:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+    %23:f32 = load %22
+    store %21, %23
+    %24:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %25:i32 = load %24
+    %x_22:i32 = let %25
+    %27:ptr<function, f32, read_write> = access %sums, %x_22
+    %28:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+    %29:f32 = load %28
+    store %27, %29
+    %30:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %31:i32 = load %30
+    store %a, %31
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %32:i32 = load %a
+        %33:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %34:i32 = load %33
+        %35:bool = lt %32, %34
+        if %35 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %34:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
-        %35:i32 = load %34
-        store %b, %35
-        loop [b: %b7, c: %b8] {  # loop_2
-          %b7 = block {  # body
-            %36:i32 = load %b
-            %37:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-            %38:i32 = load %37
-            %39:bool = lt %36, %38
-            if %39 [t: %b9, f: %b10] {  # if_2
-              %b9 = block {  # true
+        %36:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
+        %37:i32 = load %36
+        store %b, %37
+        loop [b: $B7, c: $B8] {  # loop_2
+          $B7: {  # body
+            %38:i32 = load %b
+            %39:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+            %40:i32 = load %39
+            %41:bool = lt %38, %40
+            if %41 [t: $B9, f: $B10] {  # if_2
+              $B9: {  # true
                 exit_if  # if_2
               }
-              %b10 = block {  # false
+              $B10: {  # false
                 exit_loop  # loop_2
               }
             }
-            %40:ptr<uniform, i32, read> = access %x_6, 0u, 6i, 0u
-            %41:i32 = load %40
-            store %c, %41
-            loop [b: %b11, c: %b12] {  # loop_3
-              %b11 = block {  # body
-                %42:i32 = load %c
-                %43:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
-                %44:i32 = load %43
-                %45:bool = lte %42, %44
-                if %45 [t: %b13, f: %b14] {  # if_3
-                  %b13 = block {  # true
+            %42:ptr<uniform, i32, read> = access %x_6, 0u, 6i, 0u
+            %43:i32 = load %42
+            store %c, %43
+            loop [b: $B11, c: $B12] {  # loop_3
+              $B11: {  # body
+                %44:i32 = load %c
+                %45:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
+                %46:i32 = load %45
+                %47:bool = lte %44, %46
+                if %47 [t: $B13, f: $B14] {  # if_3
+                  $B13: {  # true
                     exit_if  # if_3
                   }
-                  %b14 = block {  # false
+                  $B14: {  # false
                     exit_loop  # loop_3
                   }
                 }
-                %46:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-                %47:i32 = load %46
-                store %d, %47
-                loop [b: %b15, c: %b16] {  # loop_4
-                  %b15 = block {  # body
-                    %48:i32 = load %d
-                    %49:ptr<uniform, i32, read> = access %x_6, 0u, 6i, 0u
-                    %50:i32 = load %49
-                    %51:bool = lt %48, %50
-                    if %51 [t: %b17, f: %b18] {  # if_4
-                      %b17 = block {  # true
+                %48:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+                %49:i32 = load %48
+                store %d, %49
+                loop [b: $B15, c: $B16] {  # loop_4
+                  $B15: {  # body
+                    %50:i32 = load %d
+                    %51:ptr<uniform, i32, read> = access %x_6, 0u, 6i, 0u
+                    %52:i32 = load %51
+                    %53:bool = lt %50, %52
+                    if %53 [t: $B17, f: $B18] {  # if_4
+                      $B17: {  # true
                         exit_if  # if_4
                       }
-                      %b18 = block {  # false
+                      $B18: {  # false
                         exit_loop  # loop_4
                       }
                     }
-                    %52:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-                    %53:i32 = load %52
-                    store %e, %53
-                    loop [b: %b19, c: %b20] {  # loop_5
-                      %b19 = block {  # body
-                        %54:i32 = load %e
-                        %55:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
-                        %56:i32 = load %55
-                        %57:bool = lte %54, %56
-                        if %57 [t: %b21, f: %b22] {  # if_5
-                          %b21 = block {  # true
+                    %54:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+                    %55:i32 = load %54
+                    store %e, %55
+                    loop [b: $B19, c: $B20] {  # loop_5
+                      $B19: {  # body
+                        %56:i32 = load %e
+                        %57:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
+                        %58:i32 = load %57
+                        %59:bool = lte %56, %58
+                        if %59 [t: $B21, f: $B22] {  # if_5
+                          $B21: {  # true
                             exit_if  # if_5
                           }
-                          %b22 = block {  # false
+                          $B22: {  # false
                             exit_loop  # loop_5
                           }
                         }
-                        %58:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-                        %59:i32 = load %58
-                        store %f, %59
-                        loop [b: %b23, c: %b24] {  # loop_6
-                          %b23 = block {  # body
-                            %60:i32 = load %f
-                            %61:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-                            %62:i32 = load %61
-                            %63:bool = lt %60, %62
-                            if %63 [t: %b25, f: %b26] {  # if_6
-                              %b25 = block {  # true
+                        %60:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+                        %61:i32 = load %60
+                        store %f, %61
+                        loop [b: $B23, c: $B24] {  # loop_6
+                          $B23: {  # body
+                            %62:i32 = load %f
+                            %63:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+                            %64:i32 = load %63
+                            %65:bool = lt %62, %64
+                            if %65 [t: $B25, f: $B26] {  # if_6
+                              $B25: {  # true
                                 exit_if  # if_6
                               }
-                              %b26 = block {  # false
+                              $B26: {  # false
                                 exit_loop  # loop_6
                               }
                             }
-                            %64:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-                            %65:i32 = load %64
-                            store %g, %65
-                            loop [b: %b27, c: %b28] {  # loop_7
-                              %b27 = block {  # body
-                                %66:i32 = load %g
-                                %67:ptr<uniform, i32, read> = access %x_6, 0u, 6i, 0u
-                                %68:i32 = load %67
-                                %69:bool = lt %66, %68
-                                if %69 [t: %b29, f: %b30] {  # if_7
-                                  %b29 = block {  # true
+                            %66:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+                            %67:i32 = load %66
+                            store %g, %67
+                            loop [b: $B27, c: $B28] {  # loop_7
+                              $B27: {  # body
+                                %68:i32 = load %g
+                                %69:ptr<uniform, i32, read> = access %x_6, 0u, 6i, 0u
+                                %70:i32 = load %69
+                                %71:bool = lt %68, %70
+                                if %71 [t: $B29, f: $B30] {  # if_7
+                                  $B29: {  # true
                                     exit_if  # if_7
                                   }
-                                  %b30 = block {  # false
+                                  $B30: {  # false
                                     exit_loop  # loop_7
                                   }
                                 }
-                                %70:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-                                %71:i32 = load %70
-                                store %h, %71
-                                loop [b: %b31, c: %b32] {  # loop_8
-                                  %b31 = block {  # body
-                                    %72:i32 = load %h
-                                    %73:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-                                    %74:i32 = load %73
-                                    %75:bool = lt %72, %74
-                                    if %75 [t: %b33, f: %b34] {  # if_8
-                                      %b33 = block {  # true
+                                %72:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+                                %73:i32 = load %72
+                                store %h, %73
+                                loop [b: $B31, c: $B32] {  # loop_8
+                                  $B31: {  # body
+                                    %74:i32 = load %h
+                                    %75:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+                                    %76:i32 = load %75
+                                    %77:bool = lt %74, %76
+                                    if %77 [t: $B33, f: $B34] {  # if_8
+                                      $B33: {  # true
                                         exit_if  # if_8
                                       }
-                                      %b34 = block {  # false
+                                      $B34: {  # false
                                         exit_loop  # loop_8
                                       }
                                     }
-                                    %76:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-                                    %77:i32 = load %76
-                                    store %i, %77
-                                    loop [b: %b35, c: %b36] {  # loop_9
-                                      %b35 = block {  # body
-                                        %78:i32 = load %i
-                                        %79:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
-                                        %80:i32 = load %79
-                                        %81:bool = lt %78, %80
-                                        if %81 [t: %b37, f: %b38] {  # if_9
-                                          %b37 = block {  # true
+                                    %78:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+                                    %79:i32 = load %78
+                                    store %i, %79
+                                    loop [b: $B35, c: $B36] {  # loop_9
+                                      $B35: {  # body
+                                        %80:i32 = load %i
+                                        %81:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
+                                        %82:i32 = load %81
+                                        %83:bool = lt %80, %82
+                                        if %83 [t: $B37, f: $B38] {  # if_9
+                                          $B37: {  # true
                                             exit_if  # if_9
                                           }
-                                          %b38 = block {  # false
+                                          $B38: {  # false
                                             exit_loop  # loop_9
                                           }
                                         }
-                                        %82:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-                                        %83:i32 = load %82
-                                        store %j, %83
-                                        loop [b: %b39, c: %b40] {  # loop_10
-                                          %b39 = block {  # body
-                                            %84:i32 = load %j
-                                            %85:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-                                            %86:i32 = load %85
-                                            %87:bool = gt %84, %86
-                                            if %87 [t: %b41, f: %b42] {  # if_10
-                                              %b41 = block {  # true
+                                        %84:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+                                        %85:i32 = load %84
+                                        store %j, %85
+                                        loop [b: $B39, c: $B40] {  # loop_10
+                                          $B39: {  # body
+                                            %86:i32 = load %j
+                                            %87:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+                                            %88:i32 = load %87
+                                            %89:bool = gt %86, %88
+                                            if %89 [t: $B41, f: $B42] {  # if_10
+                                              $B41: {  # true
                                                 exit_if  # if_10
                                               }
-                                              %b42 = block {  # false
+                                              $B42: {  # false
                                                 exit_loop  # loop_10
                                               }
                                             }
-                                            %x_53:i32 = load %a
-                                            %89:ptr<function, f32, read_write> = access %sums, %x_53
                                             %90:i32 = load %a
-                                            %91:ptr<function, f32, read_write> = access %sums, %90
-                                            %92:f32 = load %91
-                                            %93:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
-                                            %94:f32 = load %93
-                                            %95:f32 = add %92, %94
-                                            store %89, %95
-                                            continue %b40
+                                            %x_53:i32 = let %90
+                                            %92:ptr<function, f32, read_write> = access %sums, %x_53
+                                            %93:i32 = load %a
+                                            %94:ptr<function, f32, read_write> = access %sums, %93
+                                            %95:f32 = load %94
+                                            %96:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
+                                            %97:f32 = load %96
+                                            %98:f32 = add %95, %97
+                                            store %92, %98
+                                            continue  # -> $B40
                                           }
-                                          %b40 = block {  # continuing
-                                            %96:i32 = load %j
-                                            %97:i32 = sub %96, 1i
-                                            store %j, %97
-                                            next_iteration %b39
+                                          $B40: {  # continuing
+                                            %99:i32 = load %j
+                                            %100:i32 = sub %99, 1i
+                                            store %j, %100
+                                            next_iteration  # -> $B39
                                           }
                                         }
-                                        continue %b36
+                                        continue  # -> $B36
                                       }
-                                      %b36 = block {  # continuing
-                                        %98:i32 = load %i
-                                        %99:i32 = add %98, 1i
-                                        store %i, %99
-                                        next_iteration %b35
+                                      $B36: {  # continuing
+                                        %101:i32 = load %i
+                                        %102:i32 = add %101, 1i
+                                        store %i, %102
+                                        next_iteration  # -> $B35
                                       }
                                     }
-                                    continue %b32
+                                    continue  # -> $B32
                                   }
-                                  %b32 = block {  # continuing
-                                    %100:i32 = load %h
-                                    %101:i32 = add %100, 1i
-                                    store %h, %101
-                                    next_iteration %b31
+                                  $B32: {  # continuing
+                                    %103:i32 = load %h
+                                    %104:i32 = add %103, 1i
+                                    store %h, %104
+                                    next_iteration  # -> $B31
                                   }
                                 }
-                                continue %b28
+                                continue  # -> $B28
                               }
-                              %b28 = block {  # continuing
-                                %102:i32 = load %g
-                                %103:i32 = add %102, 1i
-                                store %g, %103
-                                next_iteration %b27
+                              $B28: {  # continuing
+                                %105:i32 = load %g
+                                %106:i32 = add %105, 1i
+                                store %g, %106
+                                next_iteration  # -> $B27
                               }
                             }
-                            continue %b24
+                            continue  # -> $B24
                           }
-                          %b24 = block {  # continuing
-                            %104:i32 = load %f
-                            %105:i32 = add %104, 1i
-                            store %f, %105
-                            next_iteration %b23
+                          $B24: {  # continuing
+                            %107:i32 = load %f
+                            %108:i32 = add %107, 1i
+                            store %f, %108
+                            next_iteration  # -> $B23
                           }
                         }
-                        continue %b20
+                        continue  # -> $B20
                       }
-                      %b20 = block {  # continuing
-                        %106:i32 = load %e
-                        %107:i32 = add %106, 1i
-                        store %e, %107
-                        next_iteration %b19
+                      $B20: {  # continuing
+                        %109:i32 = load %e
+                        %110:i32 = add %109, 1i
+                        store %e, %110
+                        next_iteration  # -> $B19
                       }
                     }
-                    continue %b16
+                    continue  # -> $B16
                   }
-                  %b16 = block {  # continuing
-                    %108:i32 = load %d
-                    %109:i32 = add %108, 1i
-                    store %d, %109
-                    next_iteration %b15
+                  $B16: {  # continuing
+                    %111:i32 = load %d
+                    %112:i32 = add %111, 1i
+                    store %d, %112
+                    next_iteration  # -> $B15
                   }
                 }
-                continue %b12
+                continue  # -> $B12
               }
-              %b12 = block {  # continuing
-                %110:i32 = load %c
-                %111:i32 = add %110, 1i
-                store %c, %111
-                next_iteration %b11
+              $B12: {  # continuing
+                %113:i32 = load %c
+                %114:i32 = add %113, 1i
+                store %c, %114
+                next_iteration  # -> $B11
               }
             }
-            continue %b8
+            continue  # -> $B8
           }
-          %b8 = block {  # continuing
-            %112:i32 = load %b
-            %113:i32 = add %112, 1i
-            store %b, %113
-            next_iteration %b7
+          $B8: {  # continuing
+            %115:i32 = load %b
+            %116:i32 = add %115, 1i
+            store %b, %116
+            next_iteration  # -> $B7
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %114:i32 = load %a
-        %115:i32 = add %114, 1i
-        store %a, %115
-        next_iteration %b3
+      $B4: {  # continuing
+        %117:i32 = load %a
+        %118:i32 = add %117, 1i
+        store %a, %118
+        next_iteration  # -> $B3
       }
     }
-    %116:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %117:i32 = load %116
-    %118:ptr<function, f32, read_write> = access %sums, %117
-    %119:f32 = load %118
-    %120:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
-    %121:f32 = load %120
-    %x_207:bool = eq %119, %121
+    %119:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %120:i32 = load %119
+    %121:ptr<function, f32, read_write> = access %sums, %120
+    %122:f32 = load %121
+    %123:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
+    %124:f32 = load %123
+    %125:bool = eq %122, %124
+    %x_207:bool = let %125
     store %x_216, %x_207
-    if %x_207 [t: %b43] {  # if_11
-      %b43 = block {  # true
-        %123:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %124:i32 = load %123
-        %125:ptr<function, f32, read_write> = access %sums, %124
-        %126:f32 = load %125
-        %127:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
-        %128:f32 = load %127
-        %129:bool = eq %126, %128
-        store %x_215, %129
-        %130:bool = load %x_215
-        store %x_216, %130
+    if %x_207 [t: $B43] {  # if_11
+      $B43: {  # true
+        %127:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %128:i32 = load %127
+        %129:ptr<function, f32, read_write> = access %sums, %128
+        %130:f32 = load %129
+        %131:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
+        %132:f32 = load %131
+        %133:bool = eq %130, %132
+        store %x_215, %133
+        %134:bool = load %x_215
+        store %x_216, %134
         exit_if  # if_11
       }
     }
-    %131:bool = load %x_216
-    if %131 [t: %b44, f: %b45] {  # if_12
-      %b44 = block {  # true
-        %132:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %133:i32 = load %132
-        %134:f32 = convert %133
-        %135:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %136:i32 = load %135
-        %137:f32 = convert %136
-        %138:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %139:i32 = load %138
-        %140:f32 = convert %139
-        %141:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %142:i32 = load %141
-        %143:f32 = convert %142
-        %144:vec4<f32> = construct %134, %137, %140, %143
-        store %x_GLF_color, %144
+    %135:bool = load %x_216
+    if %135 [t: $B44, f: $B45] {  # if_12
+      $B44: {  # true
+        %136:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %137:i32 = load %136
+        %138:f32 = convert %137
+        %139:f32 = let %138
+        %140:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %141:i32 = load %140
+        %142:f32 = convert %141
+        %143:f32 = let %142
+        %144:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %145:i32 = load %144
+        %146:f32 = convert %145
+        %147:f32 = let %146
+        %148:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %149:i32 = load %148
+        %150:f32 = convert %149
+        %151:vec4<f32> = construct %139, %143, %147, %150
+        store %x_GLF_color, %151
         exit_if  # if_12
       }
-      %b45 = block {  # false
-        %145:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %146:i32 = load %145
-        %147:f32 = convert %146
-        %148:vec4<f32> = construct %147
-        store %x_GLF_color, %148
+      $B45: {  # false
+        %152:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %153:i32 = load %152
+        %154:f32 = convert %153
+        %155:vec4<f32> = construct %154
+        store %x_GLF_color, %155
         exit_if  # if_12
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b46 {
-  %b46 = block {
-    %150:void = call %main_1
-    %151:vec4<f32> = load %x_GLF_color
-    %152:main_out = construct %151
-    ret %152
+%tint_symbol = @fragment func():main_out {
+  $B46: {
+    %157:void = call %main_1
+    %158:vec4<f32> = load %x_GLF_color
+    %159:main_out = construct %158
+    ret %159
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops-array-access/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops-array-access/0-opt.wgsl.expected.ir.msl
index d190569..738afad 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops-array-access/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops-array-access/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,14 +20,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_8:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %sums:ptr<function, array<f32, 2>, read_write> = var
     %a:ptr<function, i32, read_write> = var
     %b:ptr<function, i32, read_write> = var
@@ -42,345 +42,409 @@
     %x_215:ptr<function, bool, read_write> = var
     %x_216_phi:ptr<function, bool, read_write> = var
     %18:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_20:i32 = load %18
-    %20:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-    %x_110:f32 = load %20
-    %22:ptr<function, f32, read_write> = access %sums, %x_20
-    store %22, %x_110
-    %23:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_22:i32 = load %23
-    %25:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-    %x_114:f32 = load %25
-    %27:ptr<function, f32, read_write> = access %sums, %x_22
-    store %27, %x_114
-    %28:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_23:i32 = load %28
+    %19:i32 = load %18
+    %x_20:i32 = let %19
+    %21:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+    %22:f32 = load %21
+    %x_110:f32 = let %22
+    %24:ptr<function, f32, read_write> = access %sums, %x_20
+    store %24, %x_110
+    %25:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %26:i32 = load %25
+    %x_22:i32 = let %26
+    %28:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+    %29:f32 = load %28
+    %x_114:f32 = let %29
+    %31:ptr<function, f32, read_write> = access %sums, %x_22
+    store %31, %x_114
+    %32:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %33:i32 = load %32
+    %x_23:i32 = let %33
     store %a, %x_23
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_24:i32 = load %a
-        %31:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_25:i32 = load %31
-        %33:bool = lt %x_24, %x_25
-        if %33 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %35:i32 = load %a
+        %x_24:i32 = let %35
+        %37:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %38:i32 = load %37
+        %x_25:i32 = let %38
+        %40:bool = lt %x_24, %x_25
+        if %40 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %34:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
-        %x_26:i32 = load %34
+        %41:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
+        %42:i32 = load %41
+        %x_26:i32 = let %42
         store %b, %x_26
-        loop [b: %b7, c: %b8] {  # loop_2
-          %b7 = block {  # body
-            %x_27:i32 = load %b
-            %37:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-            %x_28:i32 = load %37
-            %39:bool = lt %x_27, %x_28
-            if %39 [t: %b9, f: %b10] {  # if_2
-              %b9 = block {  # true
+        loop [b: $B7, c: $B8] {  # loop_2
+          $B7: {  # body
+            %44:i32 = load %b
+            %x_27:i32 = let %44
+            %46:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+            %47:i32 = load %46
+            %x_28:i32 = let %47
+            %49:bool = lt %x_27, %x_28
+            if %49 [t: $B9, f: $B10] {  # if_2
+              $B9: {  # true
                 exit_if  # if_2
               }
-              %b10 = block {  # false
+              $B10: {  # false
                 exit_loop  # loop_2
               }
             }
-            %40:ptr<uniform, i32, read> = access %x_6, 0u, 6i, 0u
-            %x_29:i32 = load %40
+            %50:ptr<uniform, i32, read> = access %x_6, 0u, 6i, 0u
+            %51:i32 = load %50
+            %x_29:i32 = let %51
             store %c, %x_29
-            loop [b: %b11, c: %b12] {  # loop_3
-              %b11 = block {  # body
-                %x_30:i32 = load %c
-                %43:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
-                %x_31:i32 = load %43
-                %45:bool = lte %x_30, %x_31
-                if %45 [t: %b13, f: %b14] {  # if_3
-                  %b13 = block {  # true
+            loop [b: $B11, c: $B12] {  # loop_3
+              $B11: {  # body
+                %53:i32 = load %c
+                %x_30:i32 = let %53
+                %55:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
+                %56:i32 = load %55
+                %x_31:i32 = let %56
+                %58:bool = lte %x_30, %x_31
+                if %58 [t: $B13, f: $B14] {  # if_3
+                  $B13: {  # true
                     exit_if  # if_3
                   }
-                  %b14 = block {  # false
+                  $B14: {  # false
                     exit_loop  # loop_3
                   }
                 }
-                %46:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-                %x_32:i32 = load %46
+                %59:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+                %60:i32 = load %59
+                %x_32:i32 = let %60
                 store %d, %x_32
-                loop [b: %b15, c: %b16] {  # loop_4
-                  %b15 = block {  # body
-                    %x_33:i32 = load %d
-                    %49:ptr<uniform, i32, read> = access %x_6, 0u, 6i, 0u
-                    %x_34:i32 = load %49
-                    %51:bool = lt %x_33, %x_34
-                    if %51 [t: %b17, f: %b18] {  # if_4
-                      %b17 = block {  # true
+                loop [b: $B15, c: $B16] {  # loop_4
+                  $B15: {  # body
+                    %62:i32 = load %d
+                    %x_33:i32 = let %62
+                    %64:ptr<uniform, i32, read> = access %x_6, 0u, 6i, 0u
+                    %65:i32 = load %64
+                    %x_34:i32 = let %65
+                    %67:bool = lt %x_33, %x_34
+                    if %67 [t: $B17, f: $B18] {  # if_4
+                      $B17: {  # true
                         exit_if  # if_4
                       }
-                      %b18 = block {  # false
+                      $B18: {  # false
                         exit_loop  # loop_4
                       }
                     }
-                    %52:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-                    %x_35:i32 = load %52
+                    %68:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+                    %69:i32 = load %68
+                    %x_35:i32 = let %69
                     store %e, %x_35
-                    loop [b: %b19, c: %b20] {  # loop_5
-                      %b19 = block {  # body
-                        %x_36:i32 = load %e
-                        %55:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
-                        %x_37:i32 = load %55
-                        %57:bool = lte %x_36, %x_37
-                        if %57 [t: %b21, f: %b22] {  # if_5
-                          %b21 = block {  # true
+                    loop [b: $B19, c: $B20] {  # loop_5
+                      $B19: {  # body
+                        %71:i32 = load %e
+                        %x_36:i32 = let %71
+                        %73:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
+                        %74:i32 = load %73
+                        %x_37:i32 = let %74
+                        %76:bool = lte %x_36, %x_37
+                        if %76 [t: $B21, f: $B22] {  # if_5
+                          $B21: {  # true
                             exit_if  # if_5
                           }
-                          %b22 = block {  # false
+                          $B22: {  # false
                             exit_loop  # loop_5
                           }
                         }
-                        %58:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-                        %x_38:i32 = load %58
+                        %77:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+                        %78:i32 = load %77
+                        %x_38:i32 = let %78
                         store %f, %x_38
-                        loop [b: %b23, c: %b24] {  # loop_6
-                          %b23 = block {  # body
-                            %x_39:i32 = load %f
-                            %61:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-                            %x_40:i32 = load %61
-                            %63:bool = lt %x_39, %x_40
-                            if %63 [t: %b25, f: %b26] {  # if_6
-                              %b25 = block {  # true
+                        loop [b: $B23, c: $B24] {  # loop_6
+                          $B23: {  # body
+                            %80:i32 = load %f
+                            %x_39:i32 = let %80
+                            %82:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+                            %83:i32 = load %82
+                            %x_40:i32 = let %83
+                            %85:bool = lt %x_39, %x_40
+                            if %85 [t: $B25, f: $B26] {  # if_6
+                              $B25: {  # true
                                 exit_if  # if_6
                               }
-                              %b26 = block {  # false
+                              $B26: {  # false
                                 exit_loop  # loop_6
                               }
                             }
-                            %64:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-                            %x_41:i32 = load %64
+                            %86:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+                            %87:i32 = load %86
+                            %x_41:i32 = let %87
                             store %g, %x_41
-                            loop [b: %b27, c: %b28] {  # loop_7
-                              %b27 = block {  # body
-                                %x_42:i32 = load %g
-                                %67:ptr<uniform, i32, read> = access %x_6, 0u, 6i, 0u
-                                %x_43:i32 = load %67
-                                %69:bool = lt %x_42, %x_43
-                                if %69 [t: %b29, f: %b30] {  # if_7
-                                  %b29 = block {  # true
+                            loop [b: $B27, c: $B28] {  # loop_7
+                              $B27: {  # body
+                                %89:i32 = load %g
+                                %x_42:i32 = let %89
+                                %91:ptr<uniform, i32, read> = access %x_6, 0u, 6i, 0u
+                                %92:i32 = load %91
+                                %x_43:i32 = let %92
+                                %94:bool = lt %x_42, %x_43
+                                if %94 [t: $B29, f: $B30] {  # if_7
+                                  $B29: {  # true
                                     exit_if  # if_7
                                   }
-                                  %b30 = block {  # false
+                                  $B30: {  # false
                                     exit_loop  # loop_7
                                   }
                                 }
-                                %70:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-                                %x_44:i32 = load %70
+                                %95:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+                                %96:i32 = load %95
+                                %x_44:i32 = let %96
                                 store %h, %x_44
-                                loop [b: %b31, c: %b32] {  # loop_8
-                                  %b31 = block {  # body
-                                    %x_45:i32 = load %h
-                                    %73:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-                                    %x_46:i32 = load %73
-                                    %75:bool = lt %x_45, %x_46
-                                    if %75 [t: %b33, f: %b34] {  # if_8
-                                      %b33 = block {  # true
+                                loop [b: $B31, c: $B32] {  # loop_8
+                                  $B31: {  # body
+                                    %98:i32 = load %h
+                                    %x_45:i32 = let %98
+                                    %100:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+                                    %101:i32 = load %100
+                                    %x_46:i32 = let %101
+                                    %103:bool = lt %x_45, %x_46
+                                    if %103 [t: $B33, f: $B34] {  # if_8
+                                      $B33: {  # true
                                         exit_if  # if_8
                                       }
-                                      %b34 = block {  # false
+                                      $B34: {  # false
                                         exit_loop  # loop_8
                                       }
                                     }
-                                    %76:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-                                    %x_47:i32 = load %76
+                                    %104:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+                                    %105:i32 = load %104
+                                    %x_47:i32 = let %105
                                     store %i, %x_47
-                                    loop [b: %b35, c: %b36] {  # loop_9
-                                      %b35 = block {  # body
-                                        %x_48:i32 = load %i
-                                        %79:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
-                                        %x_49:i32 = load %79
-                                        %81:bool = lt %x_48, %x_49
-                                        if %81 [t: %b37, f: %b38] {  # if_9
-                                          %b37 = block {  # true
+                                    loop [b: $B35, c: $B36] {  # loop_9
+                                      $B35: {  # body
+                                        %107:i32 = load %i
+                                        %x_48:i32 = let %107
+                                        %109:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
+                                        %110:i32 = load %109
+                                        %x_49:i32 = let %110
+                                        %112:bool = lt %x_48, %x_49
+                                        if %112 [t: $B37, f: $B38] {  # if_9
+                                          $B37: {  # true
                                             exit_if  # if_9
                                           }
-                                          %b38 = block {  # false
+                                          $B38: {  # false
                                             exit_loop  # loop_9
                                           }
                                         }
-                                        %82:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-                                        %x_50:i32 = load %82
+                                        %113:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+                                        %114:i32 = load %113
+                                        %x_50:i32 = let %114
                                         store %j, %x_50
-                                        loop [b: %b39, c: %b40] {  # loop_10
-                                          %b39 = block {  # body
-                                            %x_51:i32 = load %j
-                                            %85:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-                                            %x_52:i32 = load %85
-                                            %87:bool = gt %x_51, %x_52
-                                            if %87 [t: %b41, f: %b42] {  # if_10
-                                              %b41 = block {  # true
+                                        loop [b: $B39, c: $B40] {  # loop_10
+                                          $B39: {  # body
+                                            %116:i32 = load %j
+                                            %x_51:i32 = let %116
+                                            %118:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+                                            %119:i32 = load %118
+                                            %x_52:i32 = let %119
+                                            %121:bool = gt %x_51, %x_52
+                                            if %121 [t: $B41, f: $B42] {  # if_10
+                                              $B41: {  # true
                                                 exit_if  # if_10
                                               }
-                                              %b42 = block {  # false
+                                              $B42: {  # false
                                                 exit_loop  # loop_10
                                               }
                                             }
-                                            %x_53:i32 = load %a
-                                            %89:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
-                                            %x_197:f32 = load %89
-                                            %91:ptr<function, f32, read_write> = access %sums, %x_53
-                                            %x_199:f32 = load %91
-                                            %93:ptr<function, f32, read_write> = access %sums, %x_53
-                                            %94:f32 = add %x_199, %x_197
-                                            store %93, %94
-                                            continue %b40
+                                            %122:i32 = load %a
+                                            %x_53:i32 = let %122
+                                            %124:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
+                                            %125:f32 = load %124
+                                            %x_197:f32 = let %125
+                                            %127:ptr<function, f32, read_write> = access %sums, %x_53
+                                            %128:f32 = load %127
+                                            %x_199:f32 = let %128
+                                            %130:ptr<function, f32, read_write> = access %sums, %x_53
+                                            %131:f32 = add %x_199, %x_197
+                                            store %130, %131
+                                            continue  # -> $B40
                                           }
-                                          %b40 = block {  # continuing
-                                            %x_54:i32 = load %j
-                                            %96:i32 = sub %x_54, 1i
-                                            store %j, %96
-                                            next_iteration %b39
+                                          $B40: {  # continuing
+                                            %132:i32 = load %j
+                                            %x_54:i32 = let %132
+                                            %134:i32 = sub %x_54, 1i
+                                            store %j, %134
+                                            next_iteration  # -> $B39
                                           }
                                         }
-                                        continue %b36
+                                        continue  # -> $B36
                                       }
-                                      %b36 = block {  # continuing
-                                        %x_56:i32 = load %i
-                                        %98:i32 = add %x_56, 1i
-                                        store %i, %98
-                                        next_iteration %b35
+                                      $B36: {  # continuing
+                                        %135:i32 = load %i
+                                        %x_56:i32 = let %135
+                                        %137:i32 = add %x_56, 1i
+                                        store %i, %137
+                                        next_iteration  # -> $B35
                                       }
                                     }
-                                    continue %b32
+                                    continue  # -> $B32
                                   }
-                                  %b32 = block {  # continuing
-                                    %x_58:i32 = load %h
-                                    %100:i32 = add %x_58, 1i
-                                    store %h, %100
-                                    next_iteration %b31
+                                  $B32: {  # continuing
+                                    %138:i32 = load %h
+                                    %x_58:i32 = let %138
+                                    %140:i32 = add %x_58, 1i
+                                    store %h, %140
+                                    next_iteration  # -> $B31
                                   }
                                 }
-                                continue %b28
+                                continue  # -> $B28
                               }
-                              %b28 = block {  # continuing
-                                %x_60:i32 = load %g
-                                %102:i32 = add %x_60, 1i
-                                store %g, %102
-                                next_iteration %b27
+                              $B28: {  # continuing
+                                %141:i32 = load %g
+                                %x_60:i32 = let %141
+                                %143:i32 = add %x_60, 1i
+                                store %g, %143
+                                next_iteration  # -> $B27
                               }
                             }
-                            continue %b24
+                            continue  # -> $B24
                           }
-                          %b24 = block {  # continuing
-                            %x_62:i32 = load %f
-                            %104:i32 = add %x_62, 1i
-                            store %f, %104
-                            next_iteration %b23
+                          $B24: {  # continuing
+                            %144:i32 = load %f
+                            %x_62:i32 = let %144
+                            %146:i32 = add %x_62, 1i
+                            store %f, %146
+                            next_iteration  # -> $B23
                           }
                         }
-                        continue %b20
+                        continue  # -> $B20
                       }
-                      %b20 = block {  # continuing
-                        %x_64:i32 = load %e
-                        %106:i32 = add %x_64, 1i
-                        store %e, %106
-                        next_iteration %b19
+                      $B20: {  # continuing
+                        %147:i32 = load %e
+                        %x_64:i32 = let %147
+                        %149:i32 = add %x_64, 1i
+                        store %e, %149
+                        next_iteration  # -> $B19
                       }
                     }
-                    continue %b16
+                    continue  # -> $B16
                   }
-                  %b16 = block {  # continuing
-                    %x_66:i32 = load %d
-                    %108:i32 = add %x_66, 1i
-                    store %d, %108
-                    next_iteration %b15
+                  $B16: {  # continuing
+                    %150:i32 = load %d
+                    %x_66:i32 = let %150
+                    %152:i32 = add %x_66, 1i
+                    store %d, %152
+                    next_iteration  # -> $B15
                   }
                 }
-                continue %b12
+                continue  # -> $B12
               }
-              %b12 = block {  # continuing
-                %x_68:i32 = load %c
-                %110:i32 = add %x_68, 1i
-                store %c, %110
-                next_iteration %b11
+              $B12: {  # continuing
+                %153:i32 = load %c
+                %x_68:i32 = let %153
+                %155:i32 = add %x_68, 1i
+                store %c, %155
+                next_iteration  # -> $B11
               }
             }
-            continue %b8
+            continue  # -> $B8
           }
-          %b8 = block {  # continuing
-            %x_70:i32 = load %b
-            %112:i32 = add %x_70, 1i
-            store %b, %112
-            next_iteration %b7
+          $B8: {  # continuing
+            %156:i32 = load %b
+            %x_70:i32 = let %156
+            %158:i32 = add %x_70, 1i
+            store %b, %158
+            next_iteration  # -> $B7
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_72:i32 = load %a
-        %114:i32 = add %x_72, 1i
-        store %a, %114
-        next_iteration %b3
+      $B4: {  # continuing
+        %159:i32 = load %a
+        %x_72:i32 = let %159
+        %161:i32 = add %x_72, 1i
+        store %a, %161
+        next_iteration  # -> $B3
       }
     }
-    %115:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_74:i32 = load %115
-    %117:ptr<function, f32, read_write> = access %sums, %x_74
-    %x_204:f32 = load %117
-    %119:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
-    %x_206:f32 = load %119
-    %x_207:bool = eq %x_204, %x_206
+    %162:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %163:i32 = load %162
+    %x_74:i32 = let %163
+    %165:ptr<function, f32, read_write> = access %sums, %x_74
+    %166:f32 = load %165
+    %x_204:f32 = let %166
+    %168:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
+    %169:f32 = load %168
+    %x_206:f32 = let %169
+    %171:bool = eq %x_204, %x_206
+    %x_207:bool = let %171
     store %x_216_phi, %x_207
-    if %x_207 [t: %b43] {  # if_11
-      %b43 = block {  # true
-        %122:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %x_75:i32 = load %122
-        %124:ptr<function, f32, read_write> = access %sums, %x_75
-        %x_212:f32 = load %124
-        %126:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
-        %x_214:f32 = load %126
-        %128:bool = eq %x_212, %x_214
-        store %x_215, %128
-        %129:bool = load %x_215
-        store %x_216_phi, %129
+    if %x_207 [t: $B43] {  # if_11
+      $B43: {  # true
+        %173:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %174:i32 = load %173
+        %x_75:i32 = let %174
+        %176:ptr<function, f32, read_write> = access %sums, %x_75
+        %177:f32 = load %176
+        %x_212:f32 = let %177
+        %179:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
+        %180:f32 = load %179
+        %x_214:f32 = let %180
+        %182:bool = eq %x_212, %x_214
+        store %x_215, %182
+        %183:bool = load %x_215
+        store %x_216_phi, %183
         exit_if  # if_11
       }
     }
-    %x_216:bool = load %x_216_phi
-    if %x_216 [t: %b44, f: %b45] {  # if_12
-      %b44 = block {  # true
-        %131:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %x_76:i32 = load %131
-        %133:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_77:i32 = load %133
-        %135:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_78:i32 = load %135
-        %137:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %x_79:i32 = load %137
-        %139:f32 = convert %x_76
-        %140:f32 = convert %x_77
-        %141:f32 = convert %x_78
-        %142:f32 = convert %x_79
-        %143:vec4<f32> = construct %139, %140, %141, %142
-        store %x_GLF_color, %143
+    %184:bool = load %x_216_phi
+    %x_216:bool = let %184
+    if %x_216 [t: $B44, f: $B45] {  # if_12
+      $B44: {  # true
+        %186:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %187:i32 = load %186
+        %x_76:i32 = let %187
+        %189:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %190:i32 = load %189
+        %x_77:i32 = let %190
+        %192:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %193:i32 = load %192
+        %x_78:i32 = let %193
+        %195:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %196:i32 = load %195
+        %x_79:i32 = let %196
+        %198:f32 = convert %x_76
+        %199:f32 = let %198
+        %200:f32 = convert %x_77
+        %201:f32 = let %200
+        %202:f32 = convert %x_78
+        %203:f32 = let %202
+        %204:f32 = convert %x_79
+        %205:vec4<f32> = construct %199, %201, %203, %204
+        store %x_GLF_color, %205
         exit_if  # if_12
       }
-      %b45 = block {  # false
-        %144:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_80:i32 = load %144
-        %x_230:f32 = convert %x_80
-        %147:vec4<f32> = construct %x_230, %x_230, %x_230, %x_230
-        store %x_GLF_color, %147
+      $B45: {  # false
+        %206:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %207:i32 = load %206
+        %x_80:i32 = let %207
+        %209:f32 = convert %x_80
+        %x_230:f32 = let %209
+        %211:vec4<f32> = construct %x_230, %x_230, %x_230, %x_230
+        store %x_GLF_color, %211
         exit_if  # if_12
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b46 {
-  %b46 = block {
-    %149:void = call %main_1
-    %150:vec4<f32> = load %x_GLF_color
-    %151:main_out = construct %150
-    ret %151
+%tint_symbol = @fragment func():main_out {
+  $B46: {
+    %213:void = call %main_1
+    %214:vec4<f32> = load %x_GLF_color
+    %215:main_out = construct %214
+    ret %215
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops/0-opt.spvasm.expected.ir.msl
index 460cbc3..209e8fe 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:i32 @offset(0)
 }
 
@@ -8,13 +8,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %i0:ptr<function, i32, read_write> = var
     %i1:ptr<function, i32, read_write> = var
@@ -28,276 +28,273 @@
     %i9:ptr<function, i32, read_write> = var
     store %a, 0i
     store %i0, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %15:i32 = load %i0
         %16:ptr<uniform, i32, read> = access %x_7, 0u
         %17:i32 = load %16
         %18:bool = lt %15, %17
-        if %18 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %18 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
         store %i1, 0i
-        loop [b: %b7, c: %b8] {  # loop_2
-          %b7 = block {  # body
+        loop [b: $B7, c: $B8] {  # loop_2
+          $B7: {  # body
             %19:i32 = load %i1
             %20:ptr<uniform, i32, read> = access %x_7, 0u
             %21:i32 = load %20
             %22:bool = lt %19, %21
-            if %22 [t: %b9, f: %b10] {  # if_2
-              %b9 = block {  # true
+            if %22 [t: $B9, f: $B10] {  # if_2
+              $B9: {  # true
                 exit_if  # if_2
               }
-              %b10 = block {  # false
+              $B10: {  # false
                 exit_loop  # loop_2
               }
             }
             store %i2, 0i
-            loop [b: %b11, c: %b12] {  # loop_3
-              %b11 = block {  # body
+            loop [b: $B11, c: $B12] {  # loop_3
+              $B11: {  # body
                 %23:i32 = load %i2
                 %24:ptr<uniform, i32, read> = access %x_7, 0u
                 %25:i32 = load %24
                 %26:bool = lt %23, %25
-                if %26 [t: %b13, f: %b14] {  # if_3
-                  %b13 = block {  # true
+                if %26 [t: $B13, f: $B14] {  # if_3
+                  $B13: {  # true
                     exit_if  # if_3
                   }
-                  %b14 = block {  # false
+                  $B14: {  # false
                     exit_loop  # loop_3
                   }
                 }
                 store %i3, 0i
-                loop [b: %b15, c: %b16] {  # loop_4
-                  %b15 = block {  # body
+                loop [b: $B15, c: $B16] {  # loop_4
+                  $B15: {  # body
                     %27:i32 = load %i3
                     %28:ptr<uniform, i32, read> = access %x_7, 0u
                     %29:i32 = load %28
                     %30:i32 = add %29, 2i
                     %31:bool = lt %27, %30
-                    if %31 [t: %b17, f: %b18] {  # if_4
-                      %b17 = block {  # true
+                    if %31 [t: $B17, f: $B18] {  # if_4
+                      $B17: {  # true
                         exit_if  # if_4
                       }
-                      %b18 = block {  # false
+                      $B18: {  # false
                         exit_loop  # loop_4
                       }
                     }
                     store %i4, 0i
-                    loop [b: %b19, c: %b20] {  # loop_5
-                      %b19 = block {  # body
+                    loop [b: $B19, c: $B20] {  # loop_5
+                      $B19: {  # body
                         %32:i32 = load %i4
                         %33:ptr<uniform, i32, read> = access %x_7, 0u
                         %34:i32 = load %33
                         %35:bool = lt %32, %34
-                        if %35 [t: %b21, f: %b22] {  # if_5
-                          %b21 = block {  # true
+                        if %35 [t: $B21, f: $B22] {  # if_5
+                          $B21: {  # true
                             exit_if  # if_5
                           }
-                          %b22 = block {  # false
+                          $B22: {  # false
                             exit_loop  # loop_5
                           }
                         }
                         store %i5, 0i
-                        loop [b: %b23, c: %b24] {  # loop_6
-                          %b23 = block {  # body
+                        loop [b: $B23, c: $B24] {  # loop_6
+                          $B23: {  # body
                             %36:i32 = load %i5
                             %37:ptr<uniform, i32, read> = access %x_7, 0u
                             %38:i32 = load %37
                             %39:bool = lt %36, %38
-                            if %39 [t: %b25, f: %b26] {  # if_6
-                              %b25 = block {  # true
+                            if %39 [t: $B25, f: $B26] {  # if_6
+                              $B25: {  # true
                                 exit_if  # if_6
                               }
-                              %b26 = block {  # false
+                              $B26: {  # false
                                 exit_loop  # loop_6
                               }
                             }
-                            loop [b: %b27, c: %b28] {  # loop_7
-                              %b27 = block {  # body
+                            loop [b: $B27] {  # loop_7
+                              $B27: {  # body
                                 %40:ptr<uniform, i32, read> = access %x_7, 0u
                                 %41:i32 = load %40
                                 %42:bool = gt %41, 0i
-                                if %42 [t: %b29, f: %b30] {  # if_7
-                                  %b29 = block {  # true
+                                if %42 [t: $B28, f: $B29] {  # if_7
+                                  $B28: {  # true
                                     exit_if  # if_7
                                   }
-                                  %b30 = block {  # false
+                                  $B29: {  # false
                                     exit_loop  # loop_7
                                   }
                                 }
                                 store %i6, 0i
-                                loop [b: %b31, c: %b32] {  # loop_8
-                                  %b31 = block {  # body
+                                loop [b: $B30, c: $B31] {  # loop_8
+                                  $B30: {  # body
                                     %43:i32 = load %i6
                                     %44:ptr<uniform, i32, read> = access %x_7, 0u
                                     %45:i32 = load %44
                                     %46:bool = lt %43, %45
-                                    if %46 [t: %b33, f: %b34] {  # if_8
-                                      %b33 = block {  # true
+                                    if %46 [t: $B32, f: $B33] {  # if_8
+                                      $B32: {  # true
                                         exit_if  # if_8
                                       }
-                                      %b34 = block {  # false
+                                      $B33: {  # false
                                         exit_loop  # loop_8
                                       }
                                     }
                                     store %i7, 0i
-                                    loop [b: %b35, c: %b36] {  # loop_9
-                                      %b35 = block {  # body
+                                    loop [b: $B34, c: $B35] {  # loop_9
+                                      $B34: {  # body
                                         %47:i32 = load %i7
                                         %48:ptr<uniform, i32, read> = access %x_7, 0u
                                         %49:i32 = load %48
                                         %50:bool = lt %47, %49
-                                        if %50 [t: %b37, f: %b38] {  # if_9
-                                          %b37 = block {  # true
+                                        if %50 [t: $B36, f: $B37] {  # if_9
+                                          $B36: {  # true
                                             exit_if  # if_9
                                           }
-                                          %b38 = block {  # false
+                                          $B37: {  # false
                                             exit_loop  # loop_9
                                           }
                                         }
                                         store %i8_1, 0i
-                                        loop [b: %b39, c: %b40] {  # loop_10
-                                          %b39 = block {  # body
+                                        loop [b: $B38, c: $B39] {  # loop_10
+                                          $B38: {  # body
                                             %51:i32 = load %i8_1
                                             %52:ptr<uniform, i32, read> = access %x_7, 0u
                                             %53:i32 = load %52
                                             %54:bool = lt %51, %53
-                                            if %54 [t: %b41, f: %b42] {  # if_10
-                                              %b41 = block {  # true
+                                            if %54 [t: $B40, f: $B41] {  # if_10
+                                              $B40: {  # true
                                                 exit_if  # if_10
                                               }
-                                              %b42 = block {  # false
+                                              $B41: {  # false
                                                 exit_loop  # loop_10
                                               }
                                             }
                                             store %i9, 0i
-                                            loop [b: %b43, c: %b44] {  # loop_11
-                                              %b43 = block {  # body
+                                            loop [b: $B42, c: $B43] {  # loop_11
+                                              $B42: {  # body
                                                 %55:i32 = load %i9
                                                 %56:ptr<uniform, i32, read> = access %x_7, 0u
                                                 %57:i32 = load %56
                                                 %58:bool = lt %55, %57
-                                                if %58 [t: %b45, f: %b46] {  # if_11
-                                                  %b45 = block {  # true
+                                                if %58 [t: $B44, f: $B45] {  # if_11
+                                                  $B44: {  # true
                                                     exit_if  # if_11
                                                   }
-                                                  %b46 = block {  # false
+                                                  $B45: {  # false
                                                     exit_loop  # loop_11
                                                   }
                                                 }
                                                 %59:i32 = load %a
                                                 %60:i32 = add %59, 1i
                                                 store %a, %60
-                                                continue %b44
+                                                continue  # -> $B43
                                               }
-                                              %b44 = block {  # continuing
+                                              $B43: {  # continuing
                                                 %61:i32 = load %i9
                                                 %62:i32 = add %61, 1i
                                                 store %i9, %62
-                                                next_iteration %b43
+                                                next_iteration  # -> $B42
                                               }
                                             }
-                                            continue %b40
+                                            continue  # -> $B39
                                           }
-                                          %b40 = block {  # continuing
+                                          $B39: {  # continuing
                                             %63:i32 = load %i8_1
                                             %64:i32 = add %63, 1i
                                             store %i8_1, %64
-                                            next_iteration %b39
+                                            next_iteration  # -> $B38
                                           }
                                         }
-                                        continue %b36
+                                        continue  # -> $B35
                                       }
-                                      %b36 = block {  # continuing
+                                      $B35: {  # continuing
                                         %65:i32 = load %i7
                                         %66:i32 = add %65, 1i
                                         store %i7, %66
-                                        next_iteration %b35
+                                        next_iteration  # -> $B34
                                       }
                                     }
-                                    continue %b32
+                                    continue  # -> $B31
                                   }
-                                  %b32 = block {  # continuing
+                                  $B31: {  # continuing
                                     %67:i32 = load %i6
                                     %68:i32 = add %67, 1i
                                     store %i6, %68
-                                    next_iteration %b31
+                                    next_iteration  # -> $B30
                                   }
                                 }
                                 exit_loop  # loop_7
                               }
-                              %b28 = block {  # continuing
-                                next_iteration %b27
-                              }
                             }
-                            continue %b24
+                            continue  # -> $B24
                           }
-                          %b24 = block {  # continuing
+                          $B24: {  # continuing
                             %69:i32 = load %i5
                             %70:i32 = add %69, 1i
                             store %i5, %70
-                            next_iteration %b23
+                            next_iteration  # -> $B23
                           }
                         }
-                        continue %b20
+                        continue  # -> $B20
                       }
-                      %b20 = block {  # continuing
+                      $B20: {  # continuing
                         %71:i32 = load %i4
                         %72:i32 = add %71, 1i
                         store %i4, %72
-                        next_iteration %b19
+                        next_iteration  # -> $B19
                       }
                     }
-                    continue %b16
+                    continue  # -> $B16
                   }
-                  %b16 = block {  # continuing
+                  $B16: {  # continuing
                     %73:i32 = load %i3
                     %74:i32 = add %73, 1i
                     store %i3, %74
-                    next_iteration %b15
+                    next_iteration  # -> $B15
                   }
                 }
-                continue %b12
+                continue  # -> $B12
               }
-              %b12 = block {  # continuing
+              $B12: {  # continuing
                 %75:i32 = load %i2
                 %76:i32 = add %75, 1i
                 store %i2, %76
-                next_iteration %b11
+                next_iteration  # -> $B11
               }
             }
-            continue %b8
+            continue  # -> $B8
           }
-          %b8 = block {  # continuing
+          $B8: {  # continuing
             %77:i32 = load %i1
             %78:i32 = add %77, 1i
             store %i1, %78
-            next_iteration %b7
+            next_iteration  # -> $B7
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
+      $B4: {  # continuing
         %79:i32 = load %i0
         %80:i32 = add %79, 1i
         store %i0, %80
-        next_iteration %b3
+        next_iteration  # -> $B3
       }
     }
     %81:i32 = load %a
     %82:bool = eq %81, 3i
-    if %82 [t: %b47, f: %b48] {  # if_12
-      %b47 = block {  # true
+    if %82 [t: $B46, f: $B47] {  # if_12
+      $B46: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_12
       }
-      %b48 = block {  # false
+      $B47: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_12
       }
@@ -305,8 +302,8 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b49 {
-  %b49 = block {
+%tint_symbol = @fragment func():main_out {
+  $B48: {
     %84:void = call %main_1
     %85:vec4<f32> = load %x_GLF_color
     %86:main_out = construct %85
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops/0-opt.wgsl.expected.ir.msl
index a053759..7a9c0a5 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:i32 @offset(0)
 }
 
@@ -8,13 +8,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %i0:ptr<function, i32, read_write> = var
     %i1:ptr<function, i32, read_write> = var
@@ -28,276 +28,306 @@
     %i9:ptr<function, i32, read_write> = var
     store %a, 0i
     store %i0, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_40:i32 = load %i0
-        %16:ptr<uniform, i32, read> = access %x_7, 0u
-        %x_42:i32 = load %16
-        %18:bool = lt %x_40, %x_42
-        if %18 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %15:i32 = load %i0
+        %x_40:i32 = let %15
+        %17:ptr<uniform, i32, read> = access %x_7, 0u
+        %18:i32 = load %17
+        %x_42:i32 = let %18
+        %20:bool = lt %x_40, %x_42
+        if %20 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
         store %i1, 0i
-        loop [b: %b7, c: %b8] {  # loop_2
-          %b7 = block {  # body
-            %x_49:i32 = load %i1
-            %20:ptr<uniform, i32, read> = access %x_7, 0u
-            %x_51:i32 = load %20
-            %22:bool = lt %x_49, %x_51
-            if %22 [t: %b9, f: %b10] {  # if_2
-              %b9 = block {  # true
+        loop [b: $B7, c: $B8] {  # loop_2
+          $B7: {  # body
+            %21:i32 = load %i1
+            %x_49:i32 = let %21
+            %23:ptr<uniform, i32, read> = access %x_7, 0u
+            %24:i32 = load %23
+            %x_51:i32 = let %24
+            %26:bool = lt %x_49, %x_51
+            if %26 [t: $B9, f: $B10] {  # if_2
+              $B9: {  # true
                 exit_if  # if_2
               }
-              %b10 = block {  # false
+              $B10: {  # false
                 exit_loop  # loop_2
               }
             }
             store %i2, 0i
-            loop [b: %b11, c: %b12] {  # loop_3
-              %b11 = block {  # body
-                %x_58:i32 = load %i2
-                %24:ptr<uniform, i32, read> = access %x_7, 0u
-                %x_60:i32 = load %24
-                %26:bool = lt %x_58, %x_60
-                if %26 [t: %b13, f: %b14] {  # if_3
-                  %b13 = block {  # true
+            loop [b: $B11, c: $B12] {  # loop_3
+              $B11: {  # body
+                %27:i32 = load %i2
+                %x_58:i32 = let %27
+                %29:ptr<uniform, i32, read> = access %x_7, 0u
+                %30:i32 = load %29
+                %x_60:i32 = let %30
+                %32:bool = lt %x_58, %x_60
+                if %32 [t: $B13, f: $B14] {  # if_3
+                  $B13: {  # true
                     exit_if  # if_3
                   }
-                  %b14 = block {  # false
+                  $B14: {  # false
                     exit_loop  # loop_3
                   }
                 }
                 store %i3, 0i
-                loop [b: %b15, c: %b16] {  # loop_4
-                  %b15 = block {  # body
-                    %x_67:i32 = load %i3
-                    %28:ptr<uniform, i32, read> = access %x_7, 0u
-                    %x_69:i32 = load %28
-                    %30:i32 = add %x_69, 2i
-                    %31:bool = lt %x_67, %30
-                    if %31 [t: %b17, f: %b18] {  # if_4
-                      %b17 = block {  # true
+                loop [b: $B15, c: $B16] {  # loop_4
+                  $B15: {  # body
+                    %33:i32 = load %i3
+                    %x_67:i32 = let %33
+                    %35:ptr<uniform, i32, read> = access %x_7, 0u
+                    %36:i32 = load %35
+                    %x_69:i32 = let %36
+                    %38:i32 = add %x_69, 2i
+                    %39:bool = lt %x_67, %38
+                    if %39 [t: $B17, f: $B18] {  # if_4
+                      $B17: {  # true
                         exit_if  # if_4
                       }
-                      %b18 = block {  # false
+                      $B18: {  # false
                         exit_loop  # loop_4
                       }
                     }
                     store %i4, 0i
-                    loop [b: %b19, c: %b20] {  # loop_5
-                      %b19 = block {  # body
-                        %x_77:i32 = load %i4
-                        %33:ptr<uniform, i32, read> = access %x_7, 0u
-                        %x_79:i32 = load %33
-                        %35:bool = lt %x_77, %x_79
-                        if %35 [t: %b21, f: %b22] {  # if_5
-                          %b21 = block {  # true
+                    loop [b: $B19, c: $B20] {  # loop_5
+                      $B19: {  # body
+                        %40:i32 = load %i4
+                        %x_77:i32 = let %40
+                        %42:ptr<uniform, i32, read> = access %x_7, 0u
+                        %43:i32 = load %42
+                        %x_79:i32 = let %43
+                        %45:bool = lt %x_77, %x_79
+                        if %45 [t: $B21, f: $B22] {  # if_5
+                          $B21: {  # true
                             exit_if  # if_5
                           }
-                          %b22 = block {  # false
+                          $B22: {  # false
                             exit_loop  # loop_5
                           }
                         }
                         store %i5, 0i
-                        loop [b: %b23, c: %b24] {  # loop_6
-                          %b23 = block {  # body
-                            %x_86:i32 = load %i5
-                            %37:ptr<uniform, i32, read> = access %x_7, 0u
-                            %x_88:i32 = load %37
-                            %39:bool = lt %x_86, %x_88
-                            if %39 [t: %b25, f: %b26] {  # if_6
-                              %b25 = block {  # true
+                        loop [b: $B23, c: $B24] {  # loop_6
+                          $B23: {  # body
+                            %46:i32 = load %i5
+                            %x_86:i32 = let %46
+                            %48:ptr<uniform, i32, read> = access %x_7, 0u
+                            %49:i32 = load %48
+                            %x_88:i32 = let %49
+                            %51:bool = lt %x_86, %x_88
+                            if %51 [t: $B25, f: $B26] {  # if_6
+                              $B25: {  # true
                                 exit_if  # if_6
                               }
-                              %b26 = block {  # false
+                              $B26: {  # false
                                 exit_loop  # loop_6
                               }
                             }
-                            loop [b: %b27, c: %b28] {  # loop_7
-                              %b27 = block {  # body
-                                %40:ptr<uniform, i32, read> = access %x_7, 0u
-                                %x_96:i32 = load %40
-                                %42:bool = gt %x_96, 0i
-                                if %42 [t: %b29, f: %b30] {  # if_7
-                                  %b29 = block {  # true
+                            loop [b: $B27] {  # loop_7
+                              $B27: {  # body
+                                %52:ptr<uniform, i32, read> = access %x_7, 0u
+                                %53:i32 = load %52
+                                %x_96:i32 = let %53
+                                %55:bool = gt %x_96, 0i
+                                if %55 [t: $B28, f: $B29] {  # if_7
+                                  $B28: {  # true
                                     exit_if  # if_7
                                   }
-                                  %b30 = block {  # false
+                                  $B29: {  # false
                                     exit_loop  # loop_7
                                   }
                                 }
                                 store %i6, 0i
-                                loop [b: %b31, c: %b32] {  # loop_8
-                                  %b31 = block {  # body
-                                    %x_103:i32 = load %i6
-                                    %44:ptr<uniform, i32, read> = access %x_7, 0u
-                                    %x_105:i32 = load %44
-                                    %46:bool = lt %x_103, %x_105
-                                    if %46 [t: %b33, f: %b34] {  # if_8
-                                      %b33 = block {  # true
+                                loop [b: $B30, c: $B31] {  # loop_8
+                                  $B30: {  # body
+                                    %56:i32 = load %i6
+                                    %x_103:i32 = let %56
+                                    %58:ptr<uniform, i32, read> = access %x_7, 0u
+                                    %59:i32 = load %58
+                                    %x_105:i32 = let %59
+                                    %61:bool = lt %x_103, %x_105
+                                    if %61 [t: $B32, f: $B33] {  # if_8
+                                      $B32: {  # true
                                         exit_if  # if_8
                                       }
-                                      %b34 = block {  # false
+                                      $B33: {  # false
                                         exit_loop  # loop_8
                                       }
                                     }
                                     store %i7, 0i
-                                    loop [b: %b35, c: %b36] {  # loop_9
-                                      %b35 = block {  # body
-                                        %x_112:i32 = load %i7
-                                        %48:ptr<uniform, i32, read> = access %x_7, 0u
-                                        %x_114:i32 = load %48
-                                        %50:bool = lt %x_112, %x_114
-                                        if %50 [t: %b37, f: %b38] {  # if_9
-                                          %b37 = block {  # true
+                                    loop [b: $B34, c: $B35] {  # loop_9
+                                      $B34: {  # body
+                                        %62:i32 = load %i7
+                                        %x_112:i32 = let %62
+                                        %64:ptr<uniform, i32, read> = access %x_7, 0u
+                                        %65:i32 = load %64
+                                        %x_114:i32 = let %65
+                                        %67:bool = lt %x_112, %x_114
+                                        if %67 [t: $B36, f: $B37] {  # if_9
+                                          $B36: {  # true
                                             exit_if  # if_9
                                           }
-                                          %b38 = block {  # false
+                                          $B37: {  # false
                                             exit_loop  # loop_9
                                           }
                                         }
                                         store %i8_1, 0i
-                                        loop [b: %b39, c: %b40] {  # loop_10
-                                          %b39 = block {  # body
-                                            %x_121:i32 = load %i8_1
-                                            %52:ptr<uniform, i32, read> = access %x_7, 0u
-                                            %x_123:i32 = load %52
-                                            %54:bool = lt %x_121, %x_123
-                                            if %54 [t: %b41, f: %b42] {  # if_10
-                                              %b41 = block {  # true
+                                        loop [b: $B38, c: $B39] {  # loop_10
+                                          $B38: {  # body
+                                            %68:i32 = load %i8_1
+                                            %x_121:i32 = let %68
+                                            %70:ptr<uniform, i32, read> = access %x_7, 0u
+                                            %71:i32 = load %70
+                                            %x_123:i32 = let %71
+                                            %73:bool = lt %x_121, %x_123
+                                            if %73 [t: $B40, f: $B41] {  # if_10
+                                              $B40: {  # true
                                                 exit_if  # if_10
                                               }
-                                              %b42 = block {  # false
+                                              $B41: {  # false
                                                 exit_loop  # loop_10
                                               }
                                             }
                                             store %i9, 0i
-                                            loop [b: %b43, c: %b44] {  # loop_11
-                                              %b43 = block {  # body
-                                                %x_130:i32 = load %i9
-                                                %56:ptr<uniform, i32, read> = access %x_7, 0u
-                                                %x_132:i32 = load %56
-                                                %58:bool = lt %x_130, %x_132
-                                                if %58 [t: %b45, f: %b46] {  # if_11
-                                                  %b45 = block {  # true
+                                            loop [b: $B42, c: $B43] {  # loop_11
+                                              $B42: {  # body
+                                                %74:i32 = load %i9
+                                                %x_130:i32 = let %74
+                                                %76:ptr<uniform, i32, read> = access %x_7, 0u
+                                                %77:i32 = load %76
+                                                %x_132:i32 = let %77
+                                                %79:bool = lt %x_130, %x_132
+                                                if %79 [t: $B44, f: $B45] {  # if_11
+                                                  $B44: {  # true
                                                     exit_if  # if_11
                                                   }
-                                                  %b46 = block {  # false
+                                                  $B45: {  # false
                                                     exit_loop  # loop_11
                                                   }
                                                 }
-                                                %x_135:i32 = load %a
-                                                %60:i32 = add %x_135, 1i
-                                                store %a, %60
-                                                continue %b44
+                                                %80:i32 = load %a
+                                                %x_135:i32 = let %80
+                                                %82:i32 = add %x_135, 1i
+                                                store %a, %82
+                                                continue  # -> $B43
                                               }
-                                              %b44 = block {  # continuing
-                                                %x_137:i32 = load %i9
-                                                %62:i32 = add %x_137, 1i
-                                                store %i9, %62
-                                                next_iteration %b43
+                                              $B43: {  # continuing
+                                                %83:i32 = load %i9
+                                                %x_137:i32 = let %83
+                                                %85:i32 = add %x_137, 1i
+                                                store %i9, %85
+                                                next_iteration  # -> $B42
                                               }
                                             }
-                                            continue %b40
+                                            continue  # -> $B39
                                           }
-                                          %b40 = block {  # continuing
-                                            %x_139:i32 = load %i8_1
-                                            %64:i32 = add %x_139, 1i
-                                            store %i8_1, %64
-                                            next_iteration %b39
+                                          $B39: {  # continuing
+                                            %86:i32 = load %i8_1
+                                            %x_139:i32 = let %86
+                                            %88:i32 = add %x_139, 1i
+                                            store %i8_1, %88
+                                            next_iteration  # -> $B38
                                           }
                                         }
-                                        continue %b36
+                                        continue  # -> $B35
                                       }
-                                      %b36 = block {  # continuing
-                                        %x_141:i32 = load %i7
-                                        %66:i32 = add %x_141, 1i
-                                        store %i7, %66
-                                        next_iteration %b35
+                                      $B35: {  # continuing
+                                        %89:i32 = load %i7
+                                        %x_141:i32 = let %89
+                                        %91:i32 = add %x_141, 1i
+                                        store %i7, %91
+                                        next_iteration  # -> $B34
                                       }
                                     }
-                                    continue %b32
+                                    continue  # -> $B31
                                   }
-                                  %b32 = block {  # continuing
-                                    %x_143:i32 = load %i6
-                                    %68:i32 = add %x_143, 1i
-                                    store %i6, %68
-                                    next_iteration %b31
+                                  $B31: {  # continuing
+                                    %92:i32 = load %i6
+                                    %x_143:i32 = let %92
+                                    %94:i32 = add %x_143, 1i
+                                    store %i6, %94
+                                    next_iteration  # -> $B30
                                   }
                                 }
                                 exit_loop  # loop_7
                               }
-                              %b28 = block {  # continuing
-                                next_iteration %b27
-                              }
                             }
-                            continue %b24
+                            continue  # -> $B24
                           }
-                          %b24 = block {  # continuing
-                            %x_145:i32 = load %i5
-                            %70:i32 = add %x_145, 1i
-                            store %i5, %70
-                            next_iteration %b23
+                          $B24: {  # continuing
+                            %95:i32 = load %i5
+                            %x_145:i32 = let %95
+                            %97:i32 = add %x_145, 1i
+                            store %i5, %97
+                            next_iteration  # -> $B23
                           }
                         }
-                        continue %b20
+                        continue  # -> $B20
                       }
-                      %b20 = block {  # continuing
-                        %x_147:i32 = load %i4
-                        %72:i32 = add %x_147, 1i
-                        store %i4, %72
-                        next_iteration %b19
+                      $B20: {  # continuing
+                        %98:i32 = load %i4
+                        %x_147:i32 = let %98
+                        %100:i32 = add %x_147, 1i
+                        store %i4, %100
+                        next_iteration  # -> $B19
                       }
                     }
-                    continue %b16
+                    continue  # -> $B16
                   }
-                  %b16 = block {  # continuing
-                    %x_149:i32 = load %i3
-                    %74:i32 = add %x_149, 1i
-                    store %i3, %74
-                    next_iteration %b15
+                  $B16: {  # continuing
+                    %101:i32 = load %i3
+                    %x_149:i32 = let %101
+                    %103:i32 = add %x_149, 1i
+                    store %i3, %103
+                    next_iteration  # -> $B15
                   }
                 }
-                continue %b12
+                continue  # -> $B12
               }
-              %b12 = block {  # continuing
-                %x_151:i32 = load %i2
-                %76:i32 = add %x_151, 1i
-                store %i2, %76
-                next_iteration %b11
+              $B12: {  # continuing
+                %104:i32 = load %i2
+                %x_151:i32 = let %104
+                %106:i32 = add %x_151, 1i
+                store %i2, %106
+                next_iteration  # -> $B11
               }
             }
-            continue %b8
+            continue  # -> $B8
           }
-          %b8 = block {  # continuing
-            %x_153:i32 = load %i1
-            %78:i32 = add %x_153, 1i
-            store %i1, %78
-            next_iteration %b7
+          $B8: {  # continuing
+            %107:i32 = load %i1
+            %x_153:i32 = let %107
+            %109:i32 = add %x_153, 1i
+            store %i1, %109
+            next_iteration  # -> $B7
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_155:i32 = load %i0
-        %80:i32 = add %x_155, 1i
-        store %i0, %80
-        next_iteration %b3
+      $B4: {  # continuing
+        %110:i32 = load %i0
+        %x_155:i32 = let %110
+        %112:i32 = add %x_155, 1i
+        store %i0, %112
+        next_iteration  # -> $B3
       }
     }
-    %x_157:i32 = load %a
-    %82:bool = eq %x_157, 3i
-    if %82 [t: %b47, f: %b48] {  # if_12
-      %b47 = block {  # true
+    %113:i32 = load %a
+    %x_157:i32 = let %113
+    %115:bool = eq %x_157, 3i
+    if %115 [t: $B46, f: $B47] {  # if_12
+      $B46: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_12
       }
-      %b48 = block {  # false
+      $B47: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_12
       }
@@ -305,12 +335,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b49 {
-  %b49 = block {
-    %84:void = call %main_1
-    %85:vec4<f32> = load %x_GLF_color
-    %86:main_out = construct %85
-    ret %86
+%tint_symbol = @fragment func():main_out {
+  $B48: {
+    %117:void = call %main_1
+    %118:vec4<f32> = load %x_GLF_color
+    %119:main_out = construct %118
+    ret %119
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-schedule-dag-rrlist-mix-log-cos/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-schedule-dag-rrlist-mix-log-cos/0-opt.spvasm.expected.ir.msl
index 74ff1e4..4ba9167 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-schedule-dag-rrlist-mix-log-cos/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-schedule-dag-rrlist-mix-log-cos/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -12,13 +12,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, f32, read_write> = var
     %b:ptr<function, f32, read_write> = var
     %x_51:ptr<function, bool, read_write> = var
@@ -44,45 +44,46 @@
     %23:f32 = load %b
     %24:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
     %25:f32 = load %24
-    %x_45:bool = gt %23, %25
+    %26:bool = gt %23, %25
+    %x_45:bool = let %26
     store %x_52, %x_45
-    if %x_45 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %27:f32 = load %b
-        %28:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-        %29:f32 = load %28
-        %30:bool = lt %27, %29
-        store %x_51, %30
-        %31:bool = load %x_51
-        store %x_52, %31
+    if %x_45 [t: $B3] {  # if_1
+      $B3: {  # true
+        %28:f32 = load %b
+        %29:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+        %30:f32 = load %29
+        %31:bool = lt %28, %30
+        store %x_51, %31
+        %32:bool = load %x_51
+        store %x_52, %32
         exit_if  # if_1
       }
     }
-    %32:bool = load %x_52
-    if %32 [t: %b4] {  # if_2
-      %b4 = block {  # true
-        %33:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
-        %34:f32 = load %33
-        %35:ptr<uniform, f32, read> = access %x_6, 0u, 4i, 0u
-        %36:f32 = load %35
-        %37:ptr<uniform, f32, read> = access %x_6, 0u, 4i, 0u
-        %38:f32 = load %37
-        %39:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
-        %40:f32 = load %39
-        %41:vec4<f32> = construct %34, %36, %38, %40
-        store %x_GLF_color, %41
+    %33:bool = load %x_52
+    if %33 [t: $B4] {  # if_2
+      $B4: {  # true
+        %34:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
+        %35:f32 = load %34
+        %36:ptr<uniform, f32, read> = access %x_6, 0u, 4i, 0u
+        %37:f32 = load %36
+        %38:ptr<uniform, f32, read> = access %x_6, 0u, 4i, 0u
+        %39:f32 = load %38
+        %40:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
+        %41:f32 = load %40
+        %42:vec4<f32> = construct %35, %37, %39, %41
+        store %x_GLF_color, %42
         exit_if  # if_2
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %43:void = call %main_1
-    %44:vec4<f32> = load %x_GLF_color
-    %45:main_out = construct %44
-    ret %45
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %44:void = call %main_1
+    %45:vec4<f32> = load %x_GLF_color
+    %46:main_out = construct %45
+    ret %46
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-schedule-dag-rrlist-mix-log-cos/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-schedule-dag-rrlist-mix-log-cos/0-opt.wgsl.expected.ir.msl
index 083d029..3dc0607 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-schedule-dag-rrlist-mix-log-cos/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-schedule-dag-rrlist-mix-log-cos/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -12,77 +12,93 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, f32, read_write> = var
     %b:ptr<function, f32, read_write> = var
     %x_51:ptr<function, bool, read_write> = var
     %x_52_phi:ptr<function, bool, read_write> = var
     %8:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
-    %x_28:f32 = load %8
-    %10:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
-    %x_30:f32 = load %10
-    %12:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
-    %x_32:f32 = load %12
-    %14:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
-    %x_34:f32 = load %14
-    %16:bool = gt %x_32, %x_34
-    %17:f32 = select %x_28, %x_30, %16
-    store %a, %17
-    %x_37:f32 = load %a
-    %19:f32 = log %x_37
-    %20:f32 = cos %19
-    store %b, %20
-    %x_40:f32 = load %b
-    %22:vec4<f32> = construct %x_40, %x_40, %x_40, %x_40
-    store %x_GLF_color, %22
-    %x_42:f32 = load %b
-    %24:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_44:f32 = load %24
-    %x_45:bool = gt %x_42, %x_44
+    %9:f32 = load %8
+    %x_28:f32 = let %9
+    %11:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
+    %12:f32 = load %11
+    %x_30:f32 = let %12
+    %14:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
+    %15:f32 = load %14
+    %x_32:f32 = let %15
+    %17:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
+    %18:f32 = load %17
+    %x_34:f32 = let %18
+    %20:bool = gt %x_32, %x_34
+    %21:f32 = select %x_28, %x_30, %20
+    store %a, %21
+    %22:f32 = load %a
+    %x_37:f32 = let %22
+    %24:f32 = log %x_37
+    %25:f32 = cos %24
+    store %b, %25
+    %26:f32 = load %b
+    %x_40:f32 = let %26
+    %28:vec4<f32> = construct %x_40, %x_40, %x_40, %x_40
+    store %x_GLF_color, %28
+    %29:f32 = load %b
+    %x_42:f32 = let %29
+    %31:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %32:f32 = load %31
+    %x_44:f32 = let %32
+    %34:bool = gt %x_42, %x_44
+    %x_45:bool = let %34
     store %x_52_phi, %x_45
-    if %x_45 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %x_48:f32 = load %b
-        %28:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-        %x_50:f32 = load %28
-        %30:bool = lt %x_48, %x_50
-        store %x_51, %30
-        %31:bool = load %x_51
-        store %x_52_phi, %31
+    if %x_45 [t: $B3] {  # if_1
+      $B3: {  # true
+        %36:f32 = load %b
+        %x_48:f32 = let %36
+        %38:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+        %39:f32 = load %38
+        %x_50:f32 = let %39
+        %41:bool = lt %x_48, %x_50
+        store %x_51, %41
+        %42:bool = load %x_51
+        store %x_52_phi, %42
         exit_if  # if_1
       }
     }
-    %x_52:bool = load %x_52_phi
-    if %x_52 [t: %b4] {  # if_2
-      %b4 = block {  # true
-        %33:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
-        %x_56:f32 = load %33
-        %35:ptr<uniform, f32, read> = access %x_6, 0u, 4i, 0u
-        %x_58:f32 = load %35
-        %37:ptr<uniform, f32, read> = access %x_6, 0u, 4i, 0u
-        %x_60:f32 = load %37
-        %39:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
-        %x_62:f32 = load %39
-        %41:vec4<f32> = construct %x_56, %x_58, %x_60, %x_62
-        store %x_GLF_color, %41
+    %43:bool = load %x_52_phi
+    %x_52:bool = let %43
+    if %x_52 [t: $B4] {  # if_2
+      $B4: {  # true
+        %45:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
+        %46:f32 = load %45
+        %x_56:f32 = let %46
+        %48:ptr<uniform, f32, read> = access %x_6, 0u, 4i, 0u
+        %49:f32 = load %48
+        %x_58:f32 = let %49
+        %51:ptr<uniform, f32, read> = access %x_6, 0u, 4i, 0u
+        %52:f32 = load %51
+        %x_60:f32 = let %52
+        %54:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
+        %55:f32 = load %54
+        %x_62:f32 = let %55
+        %57:vec4<f32> = construct %x_56, %x_58, %x_60, %x_62
+        store %x_GLF_color, %57
         exit_if  # if_2
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %43:void = call %main_1
-    %44:vec4<f32> = load %x_GLF_color
-    %45:main_out = construct %44
-    ret %45
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %59:void = call %main_1
+    %60:vec4<f32> = load %x_GLF_color
+    %61:main_out = construct %60
+    ret %61
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-selection-dag-assign-back-and-forth/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-selection-dag-assign-back-and-forth/0-opt.spvasm.expected.ir.msl
index 97f6095..8f747c3 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-selection-dag-assign-back-and-forth/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-selection-dag-assign-back-and-forth/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,42 +12,45 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %v:ptr<function, vec4<f32>, read_write> = var
     %5:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
     %6:i32 = load %5
     %7:f32 = convert %6
-    %8:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
-    %9:i32 = load %8
-    %10:f32 = convert %9
-    %11:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
-    %12:i32 = load %11
-    %13:f32 = convert %12
-    %14:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
-    %15:i32 = load %14
-    %16:f32 = convert %15
-    %17:vec4<f32> = construct %7, %10, %13, %16
-    store %x_GLF_color, %17
-    %18:vec4<f32> = load %x_GLF_color
-    store %v, %18
+    %8:f32 = let %7
+    %9:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
+    %10:i32 = load %9
+    %11:f32 = convert %10
+    %12:f32 = let %11
+    %13:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
+    %14:i32 = load %13
+    %15:f32 = convert %14
+    %16:f32 = let %15
+    %17:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
+    %18:i32 = load %17
+    %19:f32 = convert %18
+    %20:vec4<f32> = construct %8, %12, %16, %19
+    store %x_GLF_color, %20
+    %21:vec4<f32> = load %x_GLF_color
+    store %v, %21
     store %x_GLF_color, vec4<f32>(0.0f)
-    %19:vec4<f32> = load %v
-    store %x_GLF_color, %19
+    %22:vec4<f32> = load %v
+    store %x_GLF_color, %22
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b3 {
-  %b3 = block {
-    %21:void = call %main_1
-    %22:vec4<f32> = load %x_GLF_color
-    %23:main_out = construct %22
-    ret %23
+%tint_symbol = @fragment func():main_out {
+  $B3: {
+    %24:void = call %main_1
+    %25:vec4<f32> = load %x_GLF_color
+    %26:main_out = construct %25
+    ret %26
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-selection-dag-assign-back-and-forth/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-selection-dag-assign-back-and-forth/0-opt.wgsl.expected.ir.msl
index 3c8563a..7c151a4 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-selection-dag-assign-back-and-forth/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-selection-dag-assign-back-and-forth/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,42 +12,51 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %v:ptr<function, vec4<f32>, read_write> = var
     %5:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
-    %x_25:i32 = load %5
-    %7:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
-    %x_28:i32 = load %7
-    %9:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
-    %x_31:i32 = load %9
-    %11:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
-    %x_34:i32 = load %11
-    %13:f32 = convert %x_25
-    %14:f32 = convert %x_28
-    %15:f32 = convert %x_31
-    %16:f32 = convert %x_34
-    %17:vec4<f32> = construct %13, %14, %15, %16
-    store %x_GLF_color, %17
-    %x_37:vec4<f32> = load %x_GLF_color
+    %6:i32 = load %5
+    %x_25:i32 = let %6
+    %8:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
+    %9:i32 = load %8
+    %x_28:i32 = let %9
+    %11:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
+    %12:i32 = load %11
+    %x_31:i32 = let %12
+    %14:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
+    %15:i32 = load %14
+    %x_34:i32 = let %15
+    %17:f32 = convert %x_25
+    %18:f32 = let %17
+    %19:f32 = convert %x_28
+    %20:f32 = let %19
+    %21:f32 = convert %x_31
+    %22:f32 = let %21
+    %23:f32 = convert %x_34
+    %24:vec4<f32> = construct %18, %20, %22, %23
+    store %x_GLF_color, %24
+    %25:vec4<f32> = load %x_GLF_color
+    %x_37:vec4<f32> = let %25
     store %v, %x_37
     store %x_GLF_color, vec4<f32>(0.0f)
-    %x_38:vec4<f32> = load %v
+    %27:vec4<f32> = load %v
+    %x_38:vec4<f32> = let %27
     store %x_GLF_color, %x_38
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b3 {
-  %b3 = block {
-    %21:void = call %main_1
-    %22:vec4<f32> = load %x_GLF_color
-    %23:main_out = construct %22
-    ret %23
+%tint_symbol = @fragment func():main_out {
+  $B3: {
+    %30:void = call %main_1
+    %31:vec4<f32> = load %x_GLF_color
+    %32:main_out = construct %31
+    ret %32
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-selection-dag-inverse-clamp/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-selection-dag-inverse-clamp/0-opt.spvasm.expected.ir.msl
index 2d413e7..601378a 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-selection-dag-inverse-clamp/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-selection-dag-inverse-clamp/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,13 +12,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %c:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %6:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
@@ -27,17 +27,17 @@
     %8:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
     %9:i32 = load %8
     store %i, %9
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %10:i32 = load %i
         %11:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
         %12:i32 = load %11
         %13:bool = lt %10, %12
-        if %13 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %13 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
@@ -45,54 +45,58 @@
         %15:i32 = complement %14
         store %c, %15
         %16:i32 = load %c
-        %17:i32 = clamp %16, 0i, 3i
-        store %c, %17
-        continue %b4
+        %17:i32 = max %16, 0i
+        %18:i32 = min %17, 3i
+        store %c, %18
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %18:i32 = load %i
-        %19:i32 = add %18, 1i
-        store %i, %19
-        next_iteration %b3
+      $B4: {  # continuing
+        %19:i32 = load %i
+        %20:i32 = add %19, 1i
+        store %i, %20
+        next_iteration  # -> $B3
       }
     }
-    %20:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %21:i32 = load %20
-    %22:f32 = convert %21
-    %23:vec4<f32> = construct %22
-    store %x_GLF_color, %23
-    %24:i32 = load %c
-    %25:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %26:i32 = load %25
-    %27:bool = eq %24, %26
-    if %27 [t: %b7] {  # if_2
-      %b7 = block {  # true
-        %28:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %29:i32 = load %28
-        %30:f32 = convert %29
-        %31:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %32:i32 = load %31
-        %33:f32 = convert %32
-        %34:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %35:i32 = load %34
-        %36:f32 = convert %35
-        %37:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %21:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %22:i32 = load %21
+    %23:f32 = convert %22
+    %24:vec4<f32> = construct %23
+    store %x_GLF_color, %24
+    %25:i32 = load %c
+    %26:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %27:i32 = load %26
+    %28:bool = eq %25, %27
+    if %28 [t: $B7] {  # if_2
+      $B7: {  # true
+        %29:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %30:i32 = load %29
+        %31:f32 = convert %30
+        %32:f32 = let %31
+        %33:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %34:i32 = load %33
+        %35:f32 = convert %34
+        %36:f32 = let %35
+        %37:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
         %38:i32 = load %37
         %39:f32 = convert %38
-        %40:vec4<f32> = construct %30, %33, %36, %39
-        store %x_GLF_color, %40
+        %40:f32 = let %39
+        %41:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %42:i32 = load %41
+        %43:f32 = convert %42
+        %44:vec4<f32> = construct %32, %36, %40, %43
+        store %x_GLF_color, %44
         exit_if  # if_2
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b8 {
-  %b8 = block {
-    %42:void = call %main_1
-    %43:vec4<f32> = load %x_GLF_color
-    %44:main_out = construct %43
-    ret %44
+%tint_symbol = @fragment func():main_out {
+  $B8: {
+    %46:void = call %main_1
+    %47:vec4<f32> = load %x_GLF_color
+    %48:main_out = construct %47
+    ret %48
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-selection-dag-inverse-clamp/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-selection-dag-inverse-clamp/0-opt.wgsl.expected.ir.msl
index d2c3809..37fcc4a 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-selection-dag-inverse-clamp/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-selection-dag-inverse-clamp/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,87 +12,106 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %c:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %6:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_27:i32 = load %6
+    %7:i32 = load %6
+    %x_27:i32 = let %7
     store %c, %x_27
-    %8:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_29:i32 = load %8
+    %9:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %10:i32 = load %9
+    %x_29:i32 = let %10
     store %i, %x_29
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_34:i32 = load %i
-        %11:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_36:i32 = load %11
-        %13:bool = lt %x_34, %x_36
-        if %13 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %12:i32 = load %i
+        %x_34:i32 = let %12
+        %14:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %15:i32 = load %14
+        %x_36:i32 = let %15
+        %17:bool = lt %x_34, %x_36
+        if %17 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_39:i32 = load %i
-        %15:i32 = complement %x_39
-        store %c, %15
-        %x_41:i32 = load %c
-        %17:i32 = clamp %x_41, 0i, 3i
-        store %c, %17
-        continue %b4
+        %18:i32 = load %i
+        %x_39:i32 = let %18
+        %20:i32 = complement %x_39
+        store %c, %20
+        %21:i32 = load %c
+        %x_41:i32 = let %21
+        %23:i32 = max %x_41, 0i
+        %24:i32 = min %23, 3i
+        store %c, %24
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_43:i32 = load %i
-        %19:i32 = add %x_43, 1i
-        store %i, %19
-        next_iteration %b3
+      $B4: {  # continuing
+        %25:i32 = load %i
+        %x_43:i32 = let %25
+        %27:i32 = add %x_43, 1i
+        store %i, %27
+        next_iteration  # -> $B3
       }
     }
-    %20:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_46:i32 = load %20
-    %x_47:f32 = convert %x_46
-    %23:vec4<f32> = construct %x_47, %x_47, %x_47, %x_47
-    store %x_GLF_color, %23
-    %x_49:i32 = load %c
-    %25:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_51:i32 = load %25
-    %27:bool = eq %x_49, %x_51
-    if %27 [t: %b7] {  # if_2
-      %b7 = block {  # true
-        %28:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %x_56:i32 = load %28
-        %30:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_59:i32 = load %30
-        %32:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_62:i32 = load %32
-        %34:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %x_65:i32 = load %34
-        %36:f32 = convert %x_56
-        %37:f32 = convert %x_59
-        %38:f32 = convert %x_62
-        %39:f32 = convert %x_65
-        %40:vec4<f32> = construct %36, %37, %38, %39
-        store %x_GLF_color, %40
+    %28:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %29:i32 = load %28
+    %x_46:i32 = let %29
+    %31:f32 = convert %x_46
+    %x_47:f32 = let %31
+    %33:vec4<f32> = construct %x_47, %x_47, %x_47, %x_47
+    store %x_GLF_color, %33
+    %34:i32 = load %c
+    %x_49:i32 = let %34
+    %36:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %37:i32 = load %36
+    %x_51:i32 = let %37
+    %39:bool = eq %x_49, %x_51
+    if %39 [t: $B7] {  # if_2
+      $B7: {  # true
+        %40:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %41:i32 = load %40
+        %x_56:i32 = let %41
+        %43:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %44:i32 = load %43
+        %x_59:i32 = let %44
+        %46:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %47:i32 = load %46
+        %x_62:i32 = let %47
+        %49:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %50:i32 = load %49
+        %x_65:i32 = let %50
+        %52:f32 = convert %x_56
+        %53:f32 = let %52
+        %54:f32 = convert %x_59
+        %55:f32 = let %54
+        %56:f32 = convert %x_62
+        %57:f32 = let %56
+        %58:f32 = convert %x_65
+        %59:vec4<f32> = construct %53, %55, %57, %58
+        store %x_GLF_color, %59
         exit_if  # if_2
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b8 {
-  %b8 = block {
-    %42:void = call %main_1
-    %43:vec4<f32> = load %x_GLF_color
-    %44:main_out = construct %43
-    ret %44
+%tint_symbol = @fragment func():main_out {
+  $B8: {
+    %61:void = call %main_1
+    %62:vec4<f32> = load %x_GLF_color
+    %63:main_out = construct %62
+    ret %63
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-selection-dag-lt-gt/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-selection-dag-lt-gt/0-opt.spvasm.expected.ir.msl
index 1054fba..b0d78bd 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-selection-dag-lt-gt/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-selection-dag-lt-gt/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf1 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf1 = struct @align(8) {
   v1:vec2<f32> @offset(0)
 }
 
@@ -16,70 +16,73 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_5:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %5:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
     %6:f32 = load_vector_element %5, 0u
     %7:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
     %8:f32 = load_vector_element %7, 1u
     %9:bool = lt %6, %8
-    if %9 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    if %9 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         %10:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
         %11:i32 = load %10
         %12:f32 = convert %11
-        %13:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %14:i32 = load %13
-        %15:f32 = convert %14
-        %16:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %17:i32 = load %16
-        %18:f32 = convert %17
-        %19:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %20:i32 = load %19
-        %21:f32 = convert %20
-        %22:vec4<f32> = construct %12, %15, %18, %21
-        store %x_GLF_color, %22
-        %23:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
-        %24:f32 = load_vector_element %23, 0u
-        %25:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
-        %26:f32 = load_vector_element %25, 1u
-        %27:bool = gt %24, %26
-        if %27 [t: %b5] {  # if_2
-          %b5 = block {  # true
-            %28:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-            %29:i32 = load %28
-            %30:f32 = convert %29
-            %31:vec4<f32> = construct %30
-            store %x_GLF_color, %31
+        %13:f32 = let %12
+        %14:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %15:i32 = load %14
+        %16:f32 = convert %15
+        %17:f32 = let %16
+        %18:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %19:i32 = load %18
+        %20:f32 = convert %19
+        %21:f32 = let %20
+        %22:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %23:i32 = load %22
+        %24:f32 = convert %23
+        %25:vec4<f32> = construct %13, %17, %21, %24
+        store %x_GLF_color, %25
+        %26:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
+        %27:f32 = load_vector_element %26, 0u
+        %28:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
+        %29:f32 = load_vector_element %28, 1u
+        %30:bool = gt %27, %29
+        if %30 [t: $B5] {  # if_2
+          $B5: {  # true
+            %31:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+            %32:i32 = load %31
+            %33:f32 = convert %32
+            %34:vec4<f32> = construct %33
+            store %x_GLF_color, %34
             exit_if  # if_2
           }
         }
         ret
       }
-      %b4 = block {  # false
-        %32:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %33:i32 = load %32
-        %34:f32 = convert %33
-        %35:vec4<f32> = construct %34
-        store %x_GLF_color, %35
+      $B4: {  # false
+        %35:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %36:i32 = load %35
+        %37:f32 = convert %36
+        %38:vec4<f32> = construct %37
+        store %x_GLF_color, %38
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b6 {
-  %b6 = block {
-    %37:void = call %main_1
-    %38:vec4<f32> = load %x_GLF_color
-    %39:main_out = construct %38
-    ret %39
+%tint_symbol = @fragment func():main_out {
+  $B6: {
+    %40:void = call %main_1
+    %41:vec4<f32> = load %x_GLF_color
+    %42:main_out = construct %41
+    ret %42
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-selection-dag-lt-gt/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-selection-dag-lt-gt/0-opt.wgsl.expected.ir.msl
index 824e5de..5f195c1 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-selection-dag-lt-gt/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-selection-dag-lt-gt/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf1 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf1 = struct @align(8) {
   v1:vec2<f32> @offset(0)
 }
 
@@ -16,70 +16,85 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_5:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %5:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
-    %x_29:f32 = load_vector_element %5, 0u
-    %7:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
-    %x_31:f32 = load_vector_element %7, 1u
-    %9:bool = lt %x_29, %x_31
-    if %9 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %10:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %x_37:i32 = load %10
-        %12:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %x_40:i32 = load %12
-        %14:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %x_43:i32 = load %14
-        %16:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %x_46:i32 = load %16
-        %18:f32 = convert %x_37
-        %19:f32 = convert %x_40
-        %20:f32 = convert %x_43
-        %21:f32 = convert %x_46
-        %22:vec4<f32> = construct %18, %19, %20, %21
-        store %x_GLF_color, %22
-        %23:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
-        %x_50:f32 = load_vector_element %23, 0u
-        %25:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
-        %x_52:f32 = load_vector_element %25, 1u
-        %27:bool = gt %x_50, %x_52
-        if %27 [t: %b5] {  # if_2
-          %b5 = block {  # true
-            %28:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-            %x_57:i32 = load %28
-            %x_58:f32 = convert %x_57
-            %31:vec4<f32> = construct %x_58, %x_58, %x_58, %x_58
-            store %x_GLF_color, %31
+    %6:f32 = load_vector_element %5, 0u
+    %x_29:f32 = let %6
+    %8:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
+    %9:f32 = load_vector_element %8, 1u
+    %x_31:f32 = let %9
+    %11:bool = lt %x_29, %x_31
+    if %11 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %12:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %13:i32 = load %12
+        %x_37:i32 = let %13
+        %15:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %16:i32 = load %15
+        %x_40:i32 = let %16
+        %18:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %19:i32 = load %18
+        %x_43:i32 = let %19
+        %21:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %22:i32 = load %21
+        %x_46:i32 = let %22
+        %24:f32 = convert %x_37
+        %25:f32 = let %24
+        %26:f32 = convert %x_40
+        %27:f32 = let %26
+        %28:f32 = convert %x_43
+        %29:f32 = let %28
+        %30:f32 = convert %x_46
+        %31:vec4<f32> = construct %25, %27, %29, %30
+        store %x_GLF_color, %31
+        %32:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
+        %33:f32 = load_vector_element %32, 0u
+        %x_50:f32 = let %33
+        %35:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
+        %36:f32 = load_vector_element %35, 1u
+        %x_52:f32 = let %36
+        %38:bool = gt %x_50, %x_52
+        if %38 [t: $B5] {  # if_2
+          $B5: {  # true
+            %39:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+            %40:i32 = load %39
+            %x_57:i32 = let %40
+            %42:f32 = convert %x_57
+            %x_58:f32 = let %42
+            %44:vec4<f32> = construct %x_58, %x_58, %x_58, %x_58
+            store %x_GLF_color, %44
             exit_if  # if_2
           }
         }
         ret
       }
-      %b4 = block {  # false
-        %32:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %x_61:i32 = load %32
-        %x_62:f32 = convert %x_61
-        %35:vec4<f32> = construct %x_62, %x_62, %x_62, %x_62
-        store %x_GLF_color, %35
+      $B4: {  # false
+        %45:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %46:i32 = load %45
+        %x_61:i32 = let %46
+        %48:f32 = convert %x_61
+        %x_62:f32 = let %48
+        %50:vec4<f32> = construct %x_62, %x_62, %x_62, %x_62
+        store %x_GLF_color, %50
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b6 {
-  %b6 = block {
-    %37:void = call %main_1
-    %38:vec4<f32> = load %x_GLF_color
-    %39:main_out = construct %38
-    ret %39
+%tint_symbol = @fragment func():main_out {
+  $B6: {
+    %52:void = call %main_1
+    %53:vec4<f32> = load %x_GLF_color
+    %54:main_out = construct %53
+    ret %54
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-selection-dag-same-cond-twice/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-selection-dag-same-cond-twice/0-opt.spvasm.expected.ir.msl
index 97c118a..c44432f 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-selection-dag-same-cond-twice/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-selection-dag-same-cond-twice/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:f32 @offset(0)
 }
 
@@ -8,38 +8,39 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %x_29:ptr<function, bool, read_write> = var
     %x_30:ptr<function, bool, read_write> = var
     store %x_GLF_color, vec4<f32>(0.0f)
     %6:ptr<uniform, f32, read> = access %x_5, 0u
     %7:f32 = load %6
-    %x_24:bool = lt %7, 0.0f
+    %8:bool = lt %7, 0.0f
+    %x_24:bool = let %8
     store %x_30, %x_24
-    if %x_24 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %9:ptr<uniform, f32, read> = access %x_5, 0u
-        %10:f32 = load %9
-        %11:bool = lt %10, 0.0f
-        store %x_29, %11
-        %12:bool = load %x_29
-        store %x_30, %12
+    if %x_24 [t: $B3] {  # if_1
+      $B3: {  # true
+        %10:ptr<uniform, f32, read> = access %x_5, 0u
+        %11:f32 = load %10
+        %12:bool = lt %11, 0.0f
+        store %x_29, %12
+        %13:bool = load %x_29
+        store %x_30, %13
         exit_if  # if_1
       }
     }
-    %13:bool = load %x_30
-    if %13 [t: %b4, f: %b5] {  # if_2
-      %b4 = block {  # true
+    %14:bool = load %x_30
+    if %14 [t: $B4, f: $B5] {  # if_2
+      $B4: {  # true
         store %x_GLF_color, vec4<f32>(1.0f)
         exit_if  # if_2
       }
-      %b5 = block {  # false
+      $B5: {  # false
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_2
       }
@@ -47,12 +48,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b6 {
-  %b6 = block {
-    %15:void = call %main_1
-    %16:vec4<f32> = load %x_GLF_color
-    %17:main_out = construct %16
-    ret %17
+%tint_symbol = @fragment func():main_out {
+  $B6: {
+    %16:void = call %main_1
+    %17:vec4<f32> = load %x_GLF_color
+    %18:main_out = construct %17
+    ret %18
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-selection-dag-same-cond-twice/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-selection-dag-same-cond-twice/0-opt.wgsl.expected.ir.msl
index 2303bd4..100eefe 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-selection-dag-same-cond-twice/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-selection-dag-same-cond-twice/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:f32 @offset(0)
 }
 
@@ -8,38 +8,42 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %x_29:ptr<function, bool, read_write> = var
     %x_30_phi:ptr<function, bool, read_write> = var
     store %x_GLF_color, vec4<f32>(0.0f)
     %6:ptr<uniform, f32, read> = access %x_5, 0u
-    %x_23:f32 = load %6
-    %x_24:bool = lt %x_23, 0.0f
+    %7:f32 = load %6
+    %x_23:f32 = let %7
+    %9:bool = lt %x_23, 0.0f
+    %x_24:bool = let %9
     store %x_30_phi, %x_24
-    if %x_24 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %9:ptr<uniform, f32, read> = access %x_5, 0u
-        %x_28:f32 = load %9
-        %11:bool = lt %x_28, 0.0f
-        store %x_29, %11
-        %12:bool = load %x_29
-        store %x_30_phi, %12
+    if %x_24 [t: $B3] {  # if_1
+      $B3: {  # true
+        %11:ptr<uniform, f32, read> = access %x_5, 0u
+        %12:f32 = load %11
+        %x_28:f32 = let %12
+        %14:bool = lt %x_28, 0.0f
+        store %x_29, %14
+        %15:bool = load %x_29
+        store %x_30_phi, %15
         exit_if  # if_1
       }
     }
-    %x_30:bool = load %x_30_phi
-    if %x_30 [t: %b4, f: %b5] {  # if_2
-      %b4 = block {  # true
+    %16:bool = load %x_30_phi
+    %x_30:bool = let %16
+    if %x_30 [t: $B4, f: $B5] {  # if_2
+      $B4: {  # true
         store %x_GLF_color, vec4<f32>(1.0f)
         exit_if  # if_2
       }
-      %b5 = block {  # false
+      $B5: {  # false
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_2
       }
@@ -47,12 +51,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b6 {
-  %b6 = block {
-    %15:void = call %main_1
-    %16:vec4<f32> = load %x_GLF_color
-    %17:main_out = construct %16
-    ret %17
+%tint_symbol = @fragment func():main_out {
+  $B6: {
+    %19:void = call %main_1
+    %20:vec4<f32> = load %x_GLF_color
+    %21:main_out = construct %20
+    ret %21
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-set-output-color-function-call-nested-loop/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-set-output-color-function-call-nested-loop/0.spvasm.expected.ir.msl
index e3ce766..57c1be4 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-set-output-color-function-call-nested-loop/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-set-output-color-function-call-nested-loop/0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,164 +12,171 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %x_33:ptr<function, vec4<f32>, read_write> = var
     %x_36:ptr<function, i32, read_write> = var
     %x_38:ptr<function, i32, read_write> = var
     %x_74:ptr<function, bool, read_write> = var
     %x_75:ptr<function, bool, read_write> = var
     %9:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
-    %x_29:i32 = load %9
-    %11:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
-    %x_31:i32 = load %11
+    %10:i32 = load %9
+    %x_29:i32 = let %10
+    %12:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
+    %13:i32 = load %12
+    %x_31:i32 = let %13
     store %x_33, vec4<f32>(0.0f)
     store %x_36, %x_29
     store %x_38, %x_31
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %x_53:ptr<function, vec4<f32>, read_write> = var
         %x_34:ptr<function, vec4<f32>, read_write> = var
         %x_62:ptr<function, i32, read_write> = var
         %x_39:ptr<function, i32, read_write> = var
-        %17:ptr<uniform, i32, read> = access %x_5, 0u, 4i, 0u
-        %x_41:i32 = load %17
-        %19:i32 = load %x_38
-        %20:bool = lt %19, %x_41
-        if %20 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %19:ptr<uniform, i32, read> = access %x_5, 0u, 4i, 0u
+        %20:i32 = load %19
+        %x_41:i32 = let %20
+        %22:i32 = load %x_38
+        %23:bool = lt %22, %x_41
+        if %23 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
         %x_56:ptr<function, i32, read_write> = var
-        switch 0u [c: (default, %b7)] {  # switch_1
-          %b7 = block {  # case
-            %22:i32 = load %x_38
-            %23:ptr<uniform, i32, read> = access %x_5, 0u, 3i, 0u
-            %24:i32 = load %23
-            %25:bool = gt %22, %24
-            if %25 [t: %b8] {  # if_2
-              %b8 = block {  # true
-                %26:vec4<f32> = load %x_33
-                store %x_34, %26
+        switch 0u [c: (default, $B7)] {  # switch_1
+          $B7: {  # case
+            %25:i32 = load %x_38
+            %26:ptr<uniform, i32, read> = access %x_5, 0u, 3i, 0u
+            %27:i32 = load %26
+            %28:bool = gt %25, %27
+            if %28 [t: $B8] {  # if_2
+              $B8: {  # true
+                %29:vec4<f32> = load %x_33
+                store %x_34, %29
                 store %x_62, 2i
                 exit_switch  # switch_1
               }
             }
-            %27:vec4<f32> = load %x_33
-            store %x_53, %27
+            %30:vec4<f32> = load %x_33
+            store %x_53, %30
             store %x_56, %x_29
-            loop [b: %b9, c: %b10] {  # loop_2
-              %b9 = block {  # body
+            loop [b: $B9, c: $B10] {  # loop_2
+              $B9: {  # body
                 %x_54:ptr<function, vec4<f32>, read_write> = var
                 %x_57:ptr<function, i32, read_write> = var
-                %30:i32 = load %x_56
-                %31:bool = lt %30, %x_41
-                if %31 [t: %b11, f: %b12] {  # if_3
-                  %b11 = block {  # true
+                %33:i32 = load %x_56
+                %34:bool = lt %33, %x_41
+                if %34 [t: $B11, f: $B12] {  # if_3
+                  $B11: {  # true
                     exit_if  # if_3
                   }
-                  %b12 = block {  # false
+                  $B12: {  # false
                     exit_loop  # loop_2
                   }
                 }
-                continue %b10
+                continue  # -> $B10
               }
-              %b10 = block {  # continuing
-                %32:i32 = load %x_38
-                %33:i32 = load %x_56
-                %34:i32 = add %32, %33
-                %35:f32 = convert %34
-                %36:vec4<f32> = construct %35
-                store %x_54, %36
-                %37:i32 = load %x_56
-                %38:i32 = add %37, 1i
-                store %x_57, %38
-                %39:vec4<f32> = load %x_54
-                store %x_53, %39
-                %40:i32 = load %x_57
-                store %x_56, %40
-                next_iteration %b9
+              $B10: {  # continuing
+                %35:i32 = load %x_38
+                %36:i32 = load %x_56
+                %37:i32 = add %35, %36
+                %38:f32 = convert %37
+                %39:vec4<f32> = construct %38
+                store %x_54, %39
+                %40:i32 = load %x_56
+                %41:i32 = add %40, 1i
+                store %x_57, %41
+                %42:vec4<f32> = load %x_54
+                store %x_53, %42
+                %43:i32 = load %x_57
+                store %x_56, %43
+                next_iteration  # -> $B9
               }
             }
-            %41:vec4<f32> = load %x_53
-            store %x_GLF_color, %41
-            %42:vec4<f32> = load %x_53
-            store %x_34, %42
+            %44:vec4<f32> = load %x_53
+            store %x_GLF_color, %44
+            %45:vec4<f32> = load %x_53
+            store %x_34, %45
             store %x_62, %x_31
             exit_switch  # switch_1
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %43:i32 = load %x_38
-        %44:i32 = add %43, 1i
-        store %x_39, %44
-        %45:vec4<f32> = load %x_34
-        store %x_33, %45
-        %46:i32 = load %x_36
-        %47:i32 = load %x_62
-        %48:i32 = add %46, %47
-        store %x_36, %48
-        %49:i32 = load %x_39
-        store %x_38, %49
-        next_iteration %b3
+      $B4: {  # continuing
+        %46:i32 = load %x_38
+        %47:i32 = add %46, 1i
+        store %x_39, %47
+        %48:vec4<f32> = load %x_34
+        store %x_33, %48
+        %49:i32 = load %x_36
+        %50:i32 = load %x_62
+        %51:i32 = add %49, %50
+        store %x_36, %51
+        %52:i32 = load %x_39
+        store %x_38, %52
+        next_iteration  # -> $B3
       }
     }
-    %50:vec4<f32> = load %x_GLF_color
-    %51:ptr<uniform, i32, read> = access %x_5, 0u, 2i, 0u
-    %52:i32 = load %51
-    %53:f32 = convert %52
-    %54:vec4<f32> = construct %53
-    %55:vec4<bool> = eq %50, %54
-    %x_69:bool = all %55
+    %53:vec4<f32> = load %x_GLF_color
+    %54:vec4<f32> = let %53
+    %55:ptr<uniform, i32, read> = access %x_5, 0u, 2i, 0u
+    %56:i32 = load %55
+    %57:f32 = convert %56
+    %58:vec4<f32> = construct %57
+    %59:vec4<bool> = eq %54, %58
+    %60:bool = all %59
+    %x_69:bool = let %60
     store %x_75, %x_69
-    if %x_69 [t: %b13] {  # if_4
-      %b13 = block {  # true
-        %57:i32 = load %x_36
-        %58:ptr<uniform, i32, read> = access %x_5, 0u, 5i, 0u
-        %59:i32 = load %58
-        %60:bool = eq %57, %59
-        store %x_74, %60
-        %61:bool = load %x_74
-        store %x_75, %61
+    if %x_69 [t: $B13] {  # if_4
+      $B13: {  # true
+        %62:i32 = load %x_36
+        %63:ptr<uniform, i32, read> = access %x_5, 0u, 5i, 0u
+        %64:i32 = load %63
+        %65:bool = eq %62, %64
+        store %x_74, %65
+        %66:bool = load %x_74
+        store %x_75, %66
         exit_if  # if_4
       }
     }
-    %62:bool = load %x_75
-    if %62 [t: %b14, f: %b15] {  # if_5
-      %b14 = block {  # true
-        %x_79:f32 = convert %x_31
-        %x_80:f32 = convert %x_29
-        %65:vec4<f32> = construct %x_79, %x_80, %x_80, %x_79
-        store %x_GLF_color, %65
+    %67:bool = load %x_75
+    if %67 [t: $B14, f: $B15] {  # if_5
+      $B14: {  # true
+        %68:f32 = convert %x_31
+        %x_79:f32 = let %68
+        %70:f32 = convert %x_29
+        %x_80:f32 = let %70
+        %72:vec4<f32> = construct %x_79, %x_80, %x_80, %x_79
+        store %x_GLF_color, %72
         exit_if  # if_5
       }
-      %b15 = block {  # false
-        %66:f32 = convert %x_29
-        %67:vec4<f32> = construct %66
-        store %x_GLF_color, %67
+      $B15: {  # false
+        %73:f32 = convert %x_29
+        %74:vec4<f32> = construct %73
+        store %x_GLF_color, %74
         exit_if  # if_5
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b16 {
-  %b16 = block {
-    %69:void = call %main_1
-    %70:vec4<f32> = load %x_GLF_color
-    %71:main_out = construct %70
-    ret %71
+%tint_symbol = @fragment func():main_out {
+  $B16: {
+    %76:void = call %main_1
+    %77:vec4<f32> = load %x_GLF_color
+    %78:main_out = construct %77
+    ret %78
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-set-output-color-function-call-nested-loop/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-set-output-color-function-call-nested-loop/0.wgsl.expected.ir.msl
index 9238001..769ddce 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-set-output-color-function-call-nested-loop/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-set-output-color-function-call-nested-loop/0.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,13 +12,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %x_36:ptr<function, i32, read_write> = var
     %x_74:ptr<function, bool, read_write> = var
     %x_33_phi:ptr<function, vec4<f32>, read_write> = var
@@ -26,42 +26,48 @@
     %x_38_phi:ptr<function, i32, read_write> = var
     %x_75_phi:ptr<function, bool, read_write> = var
     %10:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
-    %x_29:i32 = load %10
-    %12:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
-    %x_31:i32 = load %12
+    %11:i32 = load %10
+    %x_29:i32 = let %11
+    %13:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
+    %14:i32 = load %13
+    %x_31:i32 = let %14
     store %x_33_phi, vec4<f32>(0.0f)
     store %x_36_phi, %x_29
     store %x_38_phi, %x_31
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %x_53:ptr<function, vec4<f32>, read_write> = var
         %x_39:ptr<function, i32, read_write> = var
         %x_34_phi:ptr<function, vec4<f32>, read_write> = var
         %x_62_phi:ptr<function, i32, read_write> = var
-        %x_33:vec4<f32> = load %x_33_phi
-        %19:i32 = load %x_36_phi
-        store %x_36, %19
-        %x_38:i32 = load %x_38_phi
-        %21:ptr<uniform, i32, read> = access %x_5, 0u, 4i, 0u
-        %x_41:i32 = load %21
-        %23:bool = lt %x_38, %x_41
-        if %23 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %20:vec4<f32> = load %x_33_phi
+        %x_33:vec4<f32> = let %20
+        %22:i32 = load %x_36_phi
+        store %x_36, %22
+        %23:i32 = load %x_38_phi
+        %x_38:i32 = let %23
+        %25:ptr<uniform, i32, read> = access %x_5, 0u, 4i, 0u
+        %26:i32 = load %25
+        %x_41:i32 = let %26
+        %28:bool = lt %x_38, %x_41
+        if %28 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
         %x_53_phi:ptr<function, vec4<f32>, read_write> = var
         %x_56_phi:ptr<function, i32, read_write> = var
-        switch 0u [c: (default, %b7)] {  # switch_1
-          %b7 = block {  # case
-            %26:ptr<uniform, i32, read> = access %x_5, 0u, 3i, 0u
-            %x_48:i32 = load %26
-            %28:bool = gt %x_38, %x_48
-            if %28 [t: %b8] {  # if_2
-              %b8 = block {  # true
+        switch 0u [c: (default, $B7)] {  # switch_1
+          $B7: {  # case
+            %31:ptr<uniform, i32, read> = access %x_5, 0u, 3i, 0u
+            %32:i32 = load %31
+            %x_48:i32 = let %32
+            %34:bool = gt %x_38, %x_48
+            if %34 [t: $B8] {  # if_2
+              $B8: {  # true
                 store %x_34_phi, %x_33
                 store %x_62_phi, 2i
                 exit_switch  # switch_1
@@ -69,110 +75,125 @@
             }
             store %x_53_phi, %x_33
             store %x_56_phi, %x_29
-            loop [b: %b9, c: %b10] {  # loop_2
-              %b9 = block {  # body
+            loop [b: $B9, c: $B10] {  # loop_2
+              $B9: {  # body
                 %x_54:ptr<function, vec4<f32>, read_write> = var
                 %x_57:ptr<function, i32, read_write> = var
-                %31:vec4<f32> = load %x_53_phi
-                store %x_53, %31
-                %x_56:i32 = load %x_56_phi
-                %33:bool = lt %x_56, %x_41
-                if %33 [t: %b11, f: %b12] {  # if_3
-                  %b11 = block {  # true
+                %37:vec4<f32> = load %x_53_phi
+                store %x_53, %37
+                %38:i32 = load %x_56_phi
+                %x_56:i32 = let %38
+                %40:bool = lt %x_56, %x_41
+                if %40 [t: $B11, f: $B12] {  # if_3
+                  $B11: {  # true
                     exit_if  # if_3
                   }
-                  %b12 = block {  # false
+                  $B12: {  # false
                     exit_loop  # loop_2
                   }
                 }
-                continue %b10
+                continue  # -> $B10
               }
-              %b10 = block {  # continuing
-                %34:i32 = add %x_38, %x_56
-                %x_61:f32 = convert %34
-                %36:vec4<f32> = construct %x_61, %x_61, %x_61, %x_61
-                store %x_54, %36
-                %37:i32 = add %x_56, 1i
-                store %x_57, %37
-                %38:vec4<f32> = load %x_54
-                store %x_53_phi, %38
-                %39:i32 = load %x_57
-                store %x_56_phi, %39
-                next_iteration %b9
+              $B10: {  # continuing
+                %41:i32 = add %x_38, %x_56
+                %42:f32 = convert %41
+                %x_61:f32 = let %42
+                %44:vec4<f32> = construct %x_61, %x_61, %x_61, %x_61
+                store %x_54, %44
+                %45:i32 = add %x_56, 1i
+                store %x_57, %45
+                %46:vec4<f32> = load %x_54
+                store %x_53_phi, %46
+                %47:i32 = load %x_57
+                store %x_56_phi, %47
+                next_iteration  # -> $B9
               }
             }
-            %40:vec4<f32> = load %x_53
-            store %x_GLF_color, %40
-            %41:vec4<f32> = load %x_53
-            store %x_34_phi, %41
+            %48:vec4<f32> = load %x_53
+            store %x_GLF_color, %48
+            %49:vec4<f32> = load %x_53
+            store %x_34_phi, %49
             store %x_62_phi, %x_31
             exit_switch  # switch_1
           }
         }
-        %x_34:vec4<f32> = load %x_34_phi
-        %x_62:i32 = load %x_62_phi
-        continue %b4
+        %50:vec4<f32> = load %x_34_phi
+        %x_34:vec4<f32> = let %50
+        %52:i32 = load %x_62_phi
+        %x_62:i32 = let %52
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %44:i32 = add %x_38, 1i
-        store %x_39, %44
+      $B4: {  # continuing
+        %54:i32 = add %x_38, 1i
+        store %x_39, %54
         store %x_33_phi, %x_34
-        %45:i32 = load %x_36
-        %46:i32 = bitcast %x_62
-        %47:i32 = add %45, %46
-        %48:i32 = bitcast %47
-        store %x_36_phi, %48
-        %49:i32 = load %x_39
-        store %x_38_phi, %49
-        next_iteration %b3
+        %55:i32 = load %x_36
+        %56:i32 = let %55
+        %57:i32 = bitcast %x_62
+        %58:i32 = add %56, %57
+        %59:i32 = bitcast %58
+        store %x_36_phi, %59
+        %60:i32 = load %x_39
+        store %x_38_phi, %60
+        next_iteration  # -> $B3
       }
     }
-    %x_63:vec4<f32> = load %x_GLF_color
-    %51:ptr<uniform, i32, read> = access %x_5, 0u, 2i, 0u
-    %x_65:i32 = load %51
-    %x_66:f32 = convert %x_65
-    %54:vec4<f32> = construct %x_66, %x_66, %x_66, %x_66
-    %55:vec4<bool> = eq %x_63, %54
-    %x_69:bool = all %55
+    %61:vec4<f32> = load %x_GLF_color
+    %x_63:vec4<f32> = let %61
+    %63:ptr<uniform, i32, read> = access %x_5, 0u, 2i, 0u
+    %64:i32 = load %63
+    %x_65:i32 = let %64
+    %66:f32 = convert %x_65
+    %x_66:f32 = let %66
+    %68:vec4<f32> = construct %x_66, %x_66, %x_66, %x_66
+    %69:vec4<bool> = eq %x_63, %68
+    %70:bool = all %69
+    %x_69:bool = let %70
     store %x_75_phi, %x_69
-    if %x_69 [t: %b13] {  # if_4
-      %b13 = block {  # true
-        %57:ptr<uniform, i32, read> = access %x_5, 0u, 5i, 0u
-        %x_73:i32 = load %57
-        %59:i32 = load %x_36
-        %60:i32 = bitcast %x_73
-        %61:bool = eq %59, %60
-        store %x_74, %61
-        %62:bool = load %x_74
-        store %x_75_phi, %62
+    if %x_69 [t: $B13] {  # if_4
+      $B13: {  # true
+        %72:ptr<uniform, i32, read> = access %x_5, 0u, 5i, 0u
+        %73:i32 = load %72
+        %x_73:i32 = let %73
+        %75:i32 = load %x_36
+        %76:i32 = let %75
+        %77:i32 = bitcast %x_73
+        %78:bool = eq %76, %77
+        store %x_74, %78
+        %79:bool = load %x_74
+        store %x_75_phi, %79
         exit_if  # if_4
       }
     }
-    %x_75:bool = load %x_75_phi
-    if %x_75 [t: %b14, f: %b15] {  # if_5
-      %b14 = block {  # true
-        %x_79:f32 = convert %x_31
-        %x_80:f32 = convert %x_29
-        %66:vec4<f32> = construct %x_79, %x_80, %x_80, %x_79
-        store %x_GLF_color, %66
+    %80:bool = load %x_75_phi
+    %x_75:bool = let %80
+    if %x_75 [t: $B14, f: $B15] {  # if_5
+      $B14: {  # true
+        %82:f32 = convert %x_31
+        %x_79:f32 = let %82
+        %84:f32 = convert %x_29
+        %x_80:f32 = let %84
+        %86:vec4<f32> = construct %x_79, %x_80, %x_80, %x_79
+        store %x_GLF_color, %86
         exit_if  # if_5
       }
-      %b15 = block {  # false
-        %x_82:f32 = convert %x_29
-        %68:vec4<f32> = construct %x_82, %x_82, %x_82, %x_82
-        store %x_GLF_color, %68
+      $B15: {  # false
+        %87:f32 = convert %x_29
+        %x_82:f32 = let %87
+        %89:vec4<f32> = construct %x_82, %x_82, %x_82, %x_82
+        store %x_GLF_color, %89
         exit_if  # if_5
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b16 {
-  %b16 = block {
-    %70:void = call %main_1
-    %71:vec4<f32> = load %x_GLF_color
-    %72:main_out = construct %71
-    ret %72
+%tint_symbol = @fragment func():main_out {
+  $B16: {
+    %91:void = call %main_1
+    %92:vec4<f32> = load %x_GLF_color
+    %93:main_out = construct %92
+    ret %93
   }
 }
 
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
index 98fb23e..a989a5d 100644
--- 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
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:f32 @offset(0)
 }
 
@@ -8,14 +8,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%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
@@ -25,57 +25,58 @@
     store %a, vec2<f32>(1.0f)
     store %b, vec3<f32>(0.0f)
     %11:f32 = load_vector_element %gl_FragCoord, 1u
-    %12:i32 = convert %11
-    %13:bool = lt %12, 40i
-    if %13 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    %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 = block {  # false
-        %14:f32 = load_vector_element %gl_FragCoord, 1u
-        %15:i32 = convert %14
-        %16:bool = lt %15, 60i
-        if %16 [t: %b5, f: %b6] {  # if_2
-          %b5 = block {  # true
+      $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 = block {  # false
-            %17:f32 = load_vector_element %gl_FragCoord, 1u
-            %18:bool = lt %17, 80.0f
-            if %18 [t: %b7, f: %b8] {  # if_3
-              %b7 = block {  # true
-                %19:f32 = load_vector_element %a, 0u
-                %20:vec3<f32> = construct %19
-                %21:ptr<uniform, f32, read> = access %x_8, 0u
-                %22:f32 = load %21
-                %23:vec3<f32> = construct %22
-                %24:vec3<f32> = add %20, %23
-                %25:vec3<f32> = cos %24
-                %26:vec3<f32> = add %25, vec3<f32>(0.00999999977648258209f)
-                store %b, %26
+          $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 = block {  # false
-                %27:f32 = load_vector_element %gl_FragCoord, 1u
-                %28:i32 = convert %27
-                %29:bool = lt %28, 100i
-                if %29 [t: %b9, f: %b10] {  # if_4
-                  %b9 = block {  # true
-                    %30:ptr<uniform, f32, read> = access %x_8, 0u
-                    %31:f32 = load %30
-                    %32:vec3<f32> = construct %31
-                    %33:vec3<f32> = cos %32
-                    store %b, %33
+              $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 = block {  # false
-                    %34:f32 = load_vector_element %gl_FragCoord, 1u
-                    %35:i32 = convert %34
-                    %36:bool = lt %35, 500i
-                    if %36 [t: %b11] {  # if_5
-                      %b11 = block {  # true
+                  $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
                       }
@@ -92,39 +93,40 @@
         exit_if  # if_1
       }
     }
-    %37:f32 = load_vector_element %b, 0u
-    %x_100:bool = lt %37, 1.01999998092651367188f
+    %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 = block {  # true
-        %39:f32 = load_vector_element %b, 1u
-        %40:bool = lt %39, 1.01999998092651367188f
-        store %x_105, %40
-        %41:bool = load %x_105
-        store %x_106, %41
+    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
       }
     }
-    %42:bool = load %x_106
-    store %x_112, %42
-    %43:bool = load %x_106
-    if %43 [t: %b13] {  # if_7
-      %b13 = block {  # true
-        %44:f32 = load_vector_element %b, 2u
-        %45:bool = lt %44, 1.01999998092651367188f
-        store %x_111, %45
-        %46:bool = load %x_111
-        store %x_112, %46
+    %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
       }
     }
-    %47:bool = load %x_112
-    if %47 [t: %b14, f: %b15] {  # if_8
-      %b14 = block {  # true
+    %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 = block {  # false
+      $B15: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_8
       }
@@ -132,13 +134,23 @@
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b16 {
-  %b16 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B16: {
     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
+    %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
   }
 }
 
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
index 0c09b27..753b742 100644
--- 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
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:f32 @offset(0)
 }
 
@@ -8,14 +8,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%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
@@ -24,58 +24,67 @@
     %x_112_phi:ptr<function, bool, read_write> = var
     store %a, vec2<f32>(1.0f)
     store %b, vec3<f32>(0.0f)
-    %x_52:f32 = load_vector_element %gl_FragCoord, 1u
-    %12:i32 = convert %x_52
-    %13:bool = lt %12, 40i
-    if %13 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    %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 = block {  # false
-        %x_59:f32 = load_vector_element %gl_FragCoord, 1u
-        %15:i32 = convert %x_59
-        %16:bool = lt %15, 60i
-        if %16 [t: %b5, f: %b6] {  # if_2
-          %b5 = block {  # true
+      $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 = block {  # false
-            %x_66:f32 = load_vector_element %gl_FragCoord, 1u
-            %18:bool = lt %x_66, 80.0f
-            if %18 [t: %b7, f: %b8] {  # if_3
-              %b7 = block {  # true
-                %x_72:f32 = load_vector_element %a, 0u
-                %20:ptr<uniform, f32, read> = access %x_8, 0u
-                %x_74:f32 = load %20
-                %22:vec3<f32> = construct %x_72, %x_72, %x_72
-                %23:vec3<f32> = construct %x_74, %x_74, %x_74
-                %24:vec3<f32> = add %22, %23
-                %25:vec3<f32> = cos %24
-                %26:vec3<f32> = add %25, vec3<f32>(0.00999999977648258209f)
-                store %b, %26
+          $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 = block {  # false
-                %x_82:f32 = load_vector_element %gl_FragCoord, 1u
-                %28:i32 = convert %x_82
-                %29:bool = lt %28, 100i
-                if %29 [t: %b9, f: %b10] {  # if_4
-                  %b9 = block {  # true
-                    %30:ptr<uniform, f32, read> = access %x_8, 0u
-                    %x_89:f32 = load %30
-                    %32:vec3<f32> = construct %x_89, %x_89, %x_89
-                    %33:vec3<f32> = cos %32
-                    store %b, %33
+              $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 = block {  # false
-                    %x_93:f32 = load_vector_element %gl_FragCoord, 1u
-                    %35:i32 = convert %x_93
-                    %36:bool = lt %35, 500i
-                    if %36 [t: %b11] {  # if_5
-                      %b11 = block {  # true
+                  $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
                       }
@@ -92,38 +101,44 @@
         exit_if  # if_1
       }
     }
-    %x_99:f32 = load_vector_element %b, 0u
-    %x_100:bool = lt %x_99, 1.01999998092651367188f
+    %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 = block {  # true
-        %x_104:f32 = load_vector_element %b, 1u
-        %40:bool = lt %x_104, 1.01999998092651367188f
-        store %x_105, %40
-        %41:bool = load %x_105
-        store %x_106_phi, %41
+    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
       }
     }
-    %x_106:bool = load %x_106_phi
+    %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 = block {  # true
-        %x_110:f32 = load_vector_element %b, 2u
-        %44:bool = lt %x_110, 1.01999998092651367188f
-        store %x_111, %44
-        %45:bool = load %x_111
-        store %x_112_phi, %45
+    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
       }
     }
-    %x_112:bool = load %x_112_phi
-    if %x_112 [t: %b14, f: %b15] {  # if_8
-      %b14 = block {  # true
+    %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 = block {  # false
+      $B15: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_8
       }
@@ -131,13 +146,23 @@
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b16 {
-  %b16 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B16: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %49:void = call %main_1
-    %50:vec4<f32> = load %x_GLF_color
-    %51:main_out = construct %50
-    ret %51
+    %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
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-simplification-unused-struct/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-simplification-unused-struct/0-opt.spvasm.expected.ir.msl
index 9ecb0fe..4531c5a 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-simplification-unused-struct/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-simplification-unused-struct/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:i32 @offset(0)
 }
 
@@ -12,13 +12,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_9:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%func_struct_S_i1_2_1_i1_ = func(%s:ptr<function, S, read_write>, %x:ptr<function, i32, read_write>):i32 -> %b2 {
-  %b2 = block {
+%func_struct_S_i1_2_1_i1_ = func(%s:ptr<function, S, read_write>, %x:ptr<function, i32, read_write>):i32 {
+  $B2: {
     %6:ptr<function, i32, read_write> = access %s, 0u, 1i
     %7:i32 = load %x
     %8:i32 = add %7, 1i
@@ -29,17 +29,18 @@
     %12:i32 = load %11
     %13:i32 = load %x
     %14:bool = eq %12, %13
-    if %14 [t: %b3] {  # if_1
-      %b3 = block {  # true
+    if %14 [t: $B3] {  # if_1
+      $B3: {  # true
         ret -1i
       }
     }
-    %x_21:i32 = load %x
+    %15:i32 = load %x
+    %x_21:i32 = let %15
     ret %x_21
   }
 }
-%main_1 = func():void -> %b4 {
-  %b4 = block {
+%main_1 = func():void {
+  $B4: {
     %a:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %j:ptr<function, i32, read_write> = var
@@ -48,73 +49,76 @@
     %param_1:ptr<function, i32, read_write> = var
     store %a, 0i
     store %i, 0i
-    loop [b: %b5, c: %b6] {  # loop_1
-      %b5 = block {  # body
-        %23:i32 = load %i
-        %24:ptr<uniform, i32, read> = access %x_9, 0u
-        %25:i32 = load %24
-        %26:i32 = add 2i, %25
-        %27:bool = lt %23, %26
-        if %27 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
+    loop [b: $B5, c: $B6] {  # loop_1
+      $B5: {  # body
+        %24:i32 = load %i
+        %25:ptr<uniform, i32, read> = access %x_9, 0u
+        %26:i32 = load %25
+        %27:i32 = add 2i, %26
+        %28:bool = lt %24, %27
+        if %28 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
             exit_if  # if_2
           }
-          %b8 = block {  # false
+          $B8: {  # false
             exit_loop  # loop_1
           }
         }
         store %j, 0i
-        loop [b: %b9, c: %b10] {  # loop_2
-          %b9 = block {  # body
-            %28:i32 = load %j
-            %29:ptr<uniform, i32, read> = access %x_9, 0u
-            %30:i32 = load %29
-            %31:i32 = add 3i, %30
-            %32:bool = lt %28, %31
-            if %32 [t: %b11, f: %b12] {  # if_3
-              %b11 = block {  # true
+        loop [b: $B9, c: $B10] {  # loop_2
+          $B9: {  # body
+            %29:i32 = load %j
+            %30:ptr<uniform, i32, read> = access %x_9, 0u
+            %31:i32 = load %30
+            %32:i32 = add 3i, %31
+            %33:bool = lt %29, %32
+            if %33 [t: $B11, f: $B12] {  # if_3
+              $B11: {  # true
                 exit_if  # if_3
               }
-              %b12 = block {  # false
+              $B12: {  # false
                 exit_loop  # loop_2
               }
             }
-            %x_28:i32 = load %i
-            %x_29:i32 = load %j
-            %35:S = load %s_1
-            store %param, %35
-            %36:i32 = add %x_28, %x_29
-            store %param_1, %36
-            %x_31:i32 = call %func_struct_S_i1_2_1_i1_, %param, %param_1
-            %38:i32 = load %a
-            %39:i32 = add %38, %x_31
-            store %a, %39
-            continue %b10
+            %34:i32 = load %i
+            %x_28:i32 = let %34
+            %36:i32 = load %j
+            %x_29:i32 = let %36
+            %38:S = load %s_1
+            store %param, %38
+            %39:i32 = add %x_28, %x_29
+            store %param_1, %39
+            %40:i32 = call %func_struct_S_i1_2_1_i1_, %param, %param_1
+            %x_31:i32 = let %40
+            %42:i32 = load %a
+            %43:i32 = add %42, %x_31
+            store %a, %43
+            continue  # -> $B10
           }
-          %b10 = block {  # continuing
-            %40:i32 = load %j
-            %41:i32 = add %40, 1i
-            store %j, %41
-            next_iteration %b9
+          $B10: {  # continuing
+            %44:i32 = load %j
+            %45:i32 = add %44, 1i
+            store %j, %45
+            next_iteration  # -> $B9
           }
         }
-        continue %b6
+        continue  # -> $B6
       }
-      %b6 = block {  # continuing
-        %42:i32 = load %i
-        %43:i32 = add %42, 1i
-        store %i, %43
-        next_iteration %b5
+      $B6: {  # continuing
+        %46:i32 = load %i
+        %47:i32 = add %46, 1i
+        store %i, %47
+        next_iteration  # -> $B5
       }
     }
-    %44:i32 = load %a
-    %45:bool = eq %44, 30i
-    if %45 [t: %b13, f: %b14] {  # if_4
-      %b13 = block {  # true
+    %48:i32 = load %a
+    %49:bool = eq %48, 30i
+    if %49 [t: $B13, f: $B14] {  # if_4
+      $B13: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_4
       }
-      %b14 = block {  # false
+      $B14: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_4
       }
@@ -122,12 +126,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b15 {
-  %b15 = block {
-    %47:void = call %main_1
-    %48:vec4<f32> = load %x_GLF_color
-    %49:main_out = construct %48
-    ret %49
+%tint_symbol = @fragment func():main_out {
+  $B15: {
+    %51:void = call %main_1
+    %52:vec4<f32> = load %x_GLF_color
+    %53:main_out = construct %52
+    ret %53
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-simplification-unused-struct/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-simplification-unused-struct/0-opt.wgsl.expected.ir.msl
index 45174b1..9337e05 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-simplification-unused-struct/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-simplification-unused-struct/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:i32 @offset(0)
 }
 
@@ -12,34 +12,39 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_9:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%func_struct_S_i1_2_1_i1_ = func(%s:ptr<function, S, read_write>, %x:ptr<function, i32, read_write>):i32 -> %b2 {
-  %b2 = block {
-    %x_16:i32 = load %x
-    %7:ptr<function, i32, read_write> = access %s, 0u, 1i
-    %8:i32 = add %x_16, 1i
-    store %7, %8
-    %9:ptr<uniform, i32, read> = access %x_9, 0u
-    %x_18:i32 = load %9
-    %11:ptr<function, i32, read_write> = access %s, 0u, %x_18
-    %x_19:i32 = load %11
-    %x_20:i32 = load %x
-    %14:bool = eq %x_19, %x_20
-    if %14 [t: %b3] {  # if_1
-      %b3 = block {  # true
+%func_struct_S_i1_2_1_i1_ = func(%s:ptr<function, S, read_write>, %x:ptr<function, i32, read_write>):i32 {
+  $B2: {
+    %6:i32 = load %x
+    %x_16:i32 = let %6
+    %8:ptr<function, i32, read_write> = access %s, 0u, 1i
+    %9:i32 = add %x_16, 1i
+    store %8, %9
+    %10:ptr<uniform, i32, read> = access %x_9, 0u
+    %11:i32 = load %10
+    %x_18:i32 = let %11
+    %13:ptr<function, i32, read_write> = access %s, 0u, %x_18
+    %14:i32 = load %13
+    %x_19:i32 = let %14
+    %16:i32 = load %x
+    %x_20:i32 = let %16
+    %18:bool = eq %x_19, %x_20
+    if %18 [t: $B3] {  # if_1
+      $B3: {  # true
         ret -1i
       }
     }
-    %x_21:i32 = load %x
+    %19:i32 = load %x
+    %x_21:i32 = let %19
     ret %x_21
   }
 }
-%main_1 = func():void -> %b4 {
-  %b4 = block {
+%main_1 = func():void {
+  $B4: {
     %a:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %j:ptr<function, i32, read_write> = var
@@ -48,73 +53,85 @@
     %param_1:ptr<function, i32, read_write> = var
     store %a, 0i
     store %i, 0i
-    loop [b: %b5, c: %b6] {  # loop_1
-      %b5 = block {  # body
-        %x_22:i32 = load %i
-        %24:ptr<uniform, i32, read> = access %x_9, 0u
-        %x_23:i32 = load %24
-        %26:i32 = add 2i, %x_23
-        %27:bool = lt %x_22, %26
-        if %27 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
+    loop [b: $B5, c: $B6] {  # loop_1
+      $B5: {  # body
+        %28:i32 = load %i
+        %x_22:i32 = let %28
+        %30:ptr<uniform, i32, read> = access %x_9, 0u
+        %31:i32 = load %30
+        %x_23:i32 = let %31
+        %33:i32 = add 2i, %x_23
+        %34:bool = lt %x_22, %33
+        if %34 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
             exit_if  # if_2
           }
-          %b8 = block {  # false
+          $B8: {  # false
             exit_loop  # loop_1
           }
         }
         store %j, 0i
-        loop [b: %b9, c: %b10] {  # loop_2
-          %b9 = block {  # body
-            %x_25:i32 = load %j
-            %29:ptr<uniform, i32, read> = access %x_9, 0u
-            %x_26:i32 = load %29
-            %31:i32 = add 3i, %x_26
-            %32:bool = lt %x_25, %31
-            if %32 [t: %b11, f: %b12] {  # if_3
-              %b11 = block {  # true
+        loop [b: $B9, c: $B10] {  # loop_2
+          $B9: {  # body
+            %35:i32 = load %j
+            %x_25:i32 = let %35
+            %37:ptr<uniform, i32, read> = access %x_9, 0u
+            %38:i32 = load %37
+            %x_26:i32 = let %38
+            %40:i32 = add 3i, %x_26
+            %41:bool = lt %x_25, %40
+            if %41 [t: $B11, f: $B12] {  # if_3
+              $B11: {  # true
                 exit_if  # if_3
               }
-              %b12 = block {  # false
+              $B12: {  # false
                 exit_loop  # loop_2
               }
             }
-            %x_28:i32 = load %i
-            %x_29:i32 = load %j
-            %x_79:S = load %s_1
+            %42:i32 = load %i
+            %x_28:i32 = let %42
+            %44:i32 = load %j
+            %x_29:i32 = let %44
+            %46:S = load %s_1
+            %x_79:S = let %46
             store %param, %x_79
-            %36:i32 = add %x_28, %x_29
-            store %param_1, %36
-            %x_31:i32 = call %func_struct_S_i1_2_1_i1_, %param, %param_1
-            %x_32:i32 = load %a
-            %39:i32 = add %x_32, %x_31
-            store %a, %39
-            continue %b10
+            %48:i32 = add %x_28, %x_29
+            store %param_1, %48
+            %49:i32 = call %func_struct_S_i1_2_1_i1_, %param, %param_1
+            %x_31:i32 = let %49
+            %51:i32 = load %a
+            %x_32:i32 = let %51
+            %53:i32 = add %x_32, %x_31
+            store %a, %53
+            continue  # -> $B10
           }
-          %b10 = block {  # continuing
-            %x_34:i32 = load %j
-            %41:i32 = add %x_34, 1i
-            store %j, %41
-            next_iteration %b9
+          $B10: {  # continuing
+            %54:i32 = load %j
+            %x_34:i32 = let %54
+            %56:i32 = add %x_34, 1i
+            store %j, %56
+            next_iteration  # -> $B9
           }
         }
-        continue %b6
+        continue  # -> $B6
       }
-      %b6 = block {  # continuing
-        %x_36:i32 = load %i
-        %43:i32 = add %x_36, 1i
-        store %i, %43
-        next_iteration %b5
+      $B6: {  # continuing
+        %57:i32 = load %i
+        %x_36:i32 = let %57
+        %59:i32 = add %x_36, 1i
+        store %i, %59
+        next_iteration  # -> $B5
       }
     }
-    %x_38:i32 = load %a
-    %45:bool = eq %x_38, 30i
-    if %45 [t: %b13, f: %b14] {  # if_4
-      %b13 = block {  # true
+    %60:i32 = load %a
+    %x_38:i32 = let %60
+    %62:bool = eq %x_38, 30i
+    if %62 [t: $B13, f: $B14] {  # if_4
+      $B13: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_4
       }
-      %b14 = block {  # false
+      $B14: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_4
       }
@@ -122,12 +139,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b15 {
-  %b15 = block {
-    %47:void = call %main_1
-    %48:vec4<f32> = load %x_GLF_color
-    %49:main_out = construct %48
-    ret %49
+%tint_symbol = @fragment func():main_out {
+  $B15: {
+    %64:void = call %main_1
+    %65:vec4<f32> = load %x_GLF_color
+    %66:main_out = construct %65
+    ret %66
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-simplification-while-inside-for/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-simplification-while-inside-for/0-opt.spvasm.expected.ir.msl
index 47db413..aefbdff 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-simplification-while-inside-for/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-simplification-while-inside-for/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:i32 @offset(0)
 }
 
@@ -12,56 +12,56 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_9:ptr<uniform, buf1, read> = var @binding_point(0, 1)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %i:ptr<function, i32, read_write> = var
     %v:ptr<function, vec4<f32>, read_write> = var
     store %x_GLF_color, vec4<f32>(0.0f)
     store %i, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %7:i32 = load %i
         %8:ptr<uniform, i32, read> = access %x_6, 0u
         %9:i32 = load %8
         %10:bool = lt %7, %9
-        if %10 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %10 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        loop [b: %b7, c: %b8] {  # loop_2
-          %b7 = block {  # body
+        loop [b: $B7, c: $B8] {  # loop_2
+          $B7: {  # body
             %11:ptr<uniform, i32, read> = access %x_6, 0u
             %12:i32 = load %11
             %13:bool = eq %12, 1i
-            if %13 [t: %b9] {  # if_2
-              %b9 = block {  # true
+            if %13 [t: $B9] {  # if_2
+              $B9: {  # true
                 store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
                 exit_if  # if_2
               }
             }
-            continue %b8
+            continue  # -> $B8
           }
-          %b8 = block {  # continuing
-            break_if true %b7
+          $B8: {  # continuing
+            break_if true  # -> [t: exit_loop loop_2, f: $B7]
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
+      $B4: {  # continuing
         %14:i32 = load %i
         %15:i32 = add %14, 1i
         store %i, %15
-        next_iteration %b3
+        next_iteration  # -> $B3
       }
     }
     %16:ptr<uniform, i32, read> = access %x_9, 0u
@@ -73,8 +73,8 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b10 {
-  %b10 = block {
+%tint_symbol = @fragment func():main_out {
+  $B10: {
     %21:void = call %main_1
     %22:vec4<f32> = load %x_GLF_color
     %23:main_out = construct %22
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-simplification-while-inside-for/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-simplification-while-inside-for/0-opt.wgsl.expected.ir.msl
index ac6e258..ae58146 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-simplification-while-inside-for/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-simplification-while-inside-for/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:i32 @offset(0)
 }
 
@@ -12,73 +12,79 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_9:ptr<uniform, buf1, read> = var @binding_point(0, 1)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %i:ptr<function, i32, read_write> = var
     %v:ptr<function, vec4<f32>, read_write> = var
     store %x_GLF_color, vec4<f32>(0.0f)
     store %i, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_38:i32 = load %i
-        %8:ptr<uniform, i32, read> = access %x_6, 0u
-        %x_40:i32 = load %8
-        %10:bool = lt %x_38, %x_40
-        if %10 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %7:i32 = load %i
+        %x_38:i32 = let %7
+        %9:ptr<uniform, i32, read> = access %x_6, 0u
+        %10:i32 = load %9
+        %x_40:i32 = let %10
+        %12:bool = lt %x_38, %x_40
+        if %12 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        loop [b: %b7, c: %b8] {  # loop_2
-          %b7 = block {  # body
-            %11:ptr<uniform, i32, read> = access %x_6, 0u
-            %x_48:i32 = load %11
-            %13:bool = eq %x_48, 1i
-            if %13 [t: %b9] {  # if_2
-              %b9 = block {  # true
+        loop [b: $B7, c: $B8] {  # loop_2
+          $B7: {  # body
+            %13:ptr<uniform, i32, read> = access %x_6, 0u
+            %14:i32 = load %13
+            %x_48:i32 = let %14
+            %16:bool = eq %x_48, 1i
+            if %16 [t: $B9] {  # if_2
+              $B9: {  # true
                 store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
                 exit_if  # if_2
               }
             }
-            continue %b8
+            continue  # -> $B8
           }
-          %b8 = block {  # continuing
-            break_if true %b7
+          $B8: {  # continuing
+            break_if true  # -> [t: exit_loop loop_2, f: $B7]
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_52:i32 = load %i
-        %15:i32 = add %x_52, 1i
-        store %i, %15
-        next_iteration %b3
+      $B4: {  # continuing
+        %17:i32 = load %i
+        %x_52:i32 = let %17
+        %19:i32 = add %x_52, 1i
+        store %i, %19
+        next_iteration  # -> $B3
       }
     }
-    %16:ptr<uniform, i32, read> = access %x_9, 0u
-    %x_55:i32 = load %16
-    %18:f32 = convert %x_55
-    store_vector_element %v, 1u, %18
-    %x_59:f32 = load_vector_element %v, 1u
+    %20:ptr<uniform, i32, read> = access %x_9, 0u
+    %21:i32 = load %20
+    %x_55:i32 = let %21
+    %23:f32 = convert %x_55
+    store_vector_element %v, 1u, %23
+    %24:f32 = load_vector_element %v, 1u
+    %x_59:f32 = let %24
     store_vector_element %x_GLF_color, 1u, %x_59
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b10 {
-  %b10 = block {
-    %21:void = call %main_1
-    %22:vec4<f32> = load %x_GLF_color
-    %23:main_out = construct %22
-    ret %23
+%tint_symbol = @fragment func():main_out {
+  $B10: {
+    %27:void = call %main_1
+    %28:vec4<f32> = load %x_GLF_color
+    %29:main_out = construct %28
+    ret %29
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-clamp-max-itself/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-clamp-max-itself/0-opt.spvasm.expected.ir.msl
index 22f3794..525d25b 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-clamp-max-itself/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-clamp-max-itself/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(16) {
   sequence:vec4<i32> @offset(0)
 }
 
@@ -8,30 +8,30 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, vec4<i32>, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %sum:ptr<function, i32, read_write> = var
     store %a, vec4<i32>(0i)
     store %i, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %7:i32 = load %i
         %8:ptr<uniform, vec4<i32>, read> = access %x_7, 0u
         %9:i32 = load_vector_element %8, 3u
         %10:i32 = add %9, 1i
         %11:bool = lt %7, %10
-        if %11 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %11 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
@@ -40,47 +40,51 @@
         %14:ptr<uniform, vec4<i32>, read> = access %x_7, 0u
         %15:i32 = load_vector_element %14, 0u
         %16:i32 = load %i
-        %17:i32 = clamp %13, %15, %16
-        %18:i32 = load_vector_element %12, %17
-        %19:bool = eq %18, 1i
-        if %19 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
-            %x_57:i32 = load %i
+        %17:i32 = let %16
+        %18:i32 = max %13, %15
+        %19:i32 = min %18, %17
+        %20:i32 = load_vector_element %12, %19
+        %21:bool = eq %20, 1i
+        if %21 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
+            %22:i32 = load %i
+            %x_57:i32 = let %22
             store_vector_element %a, %x_57, 5i
             exit_if  # if_2
           }
-          %b8 = block {  # false
-            %x_59:i32 = load %i
-            %22:i32 = load %i
-            store_vector_element %a, %x_59, %22
+          $B8: {  # false
+            %24:i32 = load %i
+            %x_59:i32 = let %24
+            %26:i32 = load %i
+            store_vector_element %a, %x_59, %26
             exit_if  # if_2
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %23:i32 = load %i
-        %24:i32 = add %23, 1i
-        store %i, %24
-        next_iteration %b3
+      $B4: {  # continuing
+        %27:i32 = load %i
+        %28:i32 = add %27, 1i
+        store %i, %28
+        next_iteration  # -> $B3
       }
     }
-    %25:i32 = load_vector_element %a, 0u
-    %26:i32 = load_vector_element %a, 1u
-    %27:i32 = add %25, %26
-    %28:i32 = load_vector_element %a, 2u
-    %29:i32 = add %27, %28
-    %30:i32 = load_vector_element %a, 3u
+    %29:i32 = load_vector_element %a, 0u
+    %30:i32 = load_vector_element %a, 1u
     %31:i32 = add %29, %30
-    store %sum, %31
-    %32:i32 = load %sum
-    %33:bool = eq %32, 10i
-    if %33 [t: %b9, f: %b10] {  # if_3
-      %b9 = block {  # true
+    %32:i32 = load_vector_element %a, 2u
+    %33:i32 = add %31, %32
+    %34:i32 = load_vector_element %a, 3u
+    %35:i32 = add %33, %34
+    store %sum, %35
+    %36:i32 = load %sum
+    %37:bool = eq %36, 10i
+    if %37 [t: $B9, f: $B10] {  # if_3
+      $B9: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_3
       }
-      %b10 = block {  # false
+      $B10: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_3
       }
@@ -88,12 +92,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b11 {
-  %b11 = block {
-    %35:void = call %main_1
-    %36:vec4<f32> = load %x_GLF_color
-    %37:main_out = construct %36
-    ret %37
+%tint_symbol = @fragment func():main_out {
+  $B11: {
+    %39:void = call %main_1
+    %40:vec4<f32> = load %x_GLF_color
+    %41:main_out = construct %40
+    ret %41
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-clamp-max-itself/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-clamp-max-itself/0-opt.wgsl.expected.ir.msl
index 5acce72..d55a761 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-clamp-max-itself/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-clamp-max-itself/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(16) {
   sequence:vec4<i32> @offset(0)
 }
 
@@ -8,79 +8,95 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, vec4<i32>, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %sum:ptr<function, i32, read_write> = var
     store %a, vec4<i32>(0i)
     store %i, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_40:i32 = load %i
-        %8:ptr<uniform, vec4<i32>, read> = access %x_7, 0u
-        %x_42:i32 = load_vector_element %8, 3u
-        %10:i32 = add %x_42, 1i
-        %11:bool = lt %x_40, %10
-        if %11 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %7:i32 = load %i
+        %x_40:i32 = let %7
+        %9:ptr<uniform, vec4<i32>, read> = access %x_7, 0u
+        %10:i32 = load_vector_element %9, 3u
+        %x_42:i32 = let %10
+        %12:i32 = add %x_42, 1i
+        %13:bool = lt %x_40, %12
+        if %13 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_46:i32 = load %i
-        %13:ptr<uniform, vec4<i32>, read> = access %x_7, 0u
-        %x_48:i32 = load_vector_element %13, 0u
-        %x_49:i32 = load %i
+        %14:i32 = load %i
+        %x_46:i32 = let %14
         %16:ptr<uniform, vec4<i32>, read> = access %x_7, 0u
-        %17:i32 = clamp %x_46, %x_48, %x_49
-        %x_52:i32 = load_vector_element %16, %17
-        %19:bool = eq %x_52, 1i
-        if %19 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
-            %x_57:i32 = load %i
+        %17:i32 = load_vector_element %16, 0u
+        %x_48:i32 = let %17
+        %19:i32 = load %i
+        %x_49:i32 = let %19
+        %21:ptr<uniform, vec4<i32>, read> = access %x_7, 0u
+        %22:i32 = max %x_46, %x_48
+        %23:i32 = min %22, %x_49
+        %24:i32 = load_vector_element %21, %23
+        %x_52:i32 = let %24
+        %26:bool = eq %x_52, 1i
+        if %26 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
+            %27:i32 = load %i
+            %x_57:i32 = let %27
             store_vector_element %a, %x_57, 5i
             exit_if  # if_2
           }
-          %b8 = block {  # false
-            %x_59:i32 = load %i
-            %x_60:i32 = load %i
+          $B8: {  # false
+            %29:i32 = load %i
+            %x_59:i32 = let %29
+            %31:i32 = load %i
+            %x_60:i32 = let %31
             store_vector_element %a, %x_59, %x_60
             exit_if  # if_2
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_62:i32 = load %i
-        %24:i32 = add %x_62, 1i
-        store %i, %24
-        next_iteration %b3
+      $B4: {  # continuing
+        %33:i32 = load %i
+        %x_62:i32 = let %33
+        %35:i32 = add %x_62, 1i
+        store %i, %35
+        next_iteration  # -> $B3
       }
     }
-    %x_65:i32 = load_vector_element %a, 0u
-    %x_67:i32 = load_vector_element %a, 1u
-    %x_70:i32 = load_vector_element %a, 2u
-    %x_73:i32 = load_vector_element %a, 3u
-    %29:i32 = add %x_65, %x_67
-    %30:i32 = add %29, %x_70
-    %31:i32 = add %30, %x_73
-    store %sum, %31
-    %x_75:i32 = load %sum
-    %33:bool = eq %x_75, 10i
-    if %33 [t: %b9, f: %b10] {  # if_3
-      %b9 = block {  # true
+    %36:i32 = load_vector_element %a, 0u
+    %x_65:i32 = let %36
+    %38:i32 = load_vector_element %a, 1u
+    %x_67:i32 = let %38
+    %40:i32 = load_vector_element %a, 2u
+    %x_70:i32 = let %40
+    %42:i32 = load_vector_element %a, 3u
+    %x_73:i32 = let %42
+    %44:i32 = add %x_65, %x_67
+    %45:i32 = add %44, %x_70
+    %46:i32 = add %45, %x_73
+    store %sum, %46
+    %47:i32 = load %sum
+    %x_75:i32 = let %47
+    %49:bool = eq %x_75, 10i
+    if %49 [t: $B9, f: $B10] {  # if_3
+      $B9: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_3
       }
-      %b10 = block {  # false
+      $B10: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_3
       }
@@ -88,12 +104,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b11 {
-  %b11 = block {
-    %35:void = call %main_1
-    %36:vec4<f32> = load %x_GLF_color
-    %37:main_out = construct %36
-    ret %37
+%tint_symbol = @fragment func():main_out {
+  $B11: {
+    %51:void = call %main_1
+    %52:vec4<f32> = load %x_GLF_color
+    %53:main_out = construct %52
+    ret %53
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-combine-compares-max-max-one/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-combine-compares-max-max-one/0-opt.spvasm.expected.ir.msl
index f678b4b..a418a49 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-combine-compares-max-max-one/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-combine-compares-max-max-one/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,58 +12,62 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %5:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
     %6:i32 = load %5
-    %7:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %8:i32 = load %7
-    %9:i32 = max %8, 1i
-    %10:i32 = max %6, %9
-    store %a, %10
-    %11:i32 = load %a
-    %12:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %13:i32 = load %12
-    %14:bool = eq %11, %13
-    if %14 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %15:i32 = load %a
-        %16:f32 = convert %15
-        %17:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %18:i32 = load %17
-        %19:f32 = convert %18
-        %20:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %21:i32 = load %20
-        %22:f32 = convert %21
-        %23:i32 = load %a
-        %24:f32 = convert %23
-        %25:vec4<f32> = construct %16, %19, %22, %24
-        store %x_GLF_color, %25
+    %7:i32 = let %6
+    %8:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %9:i32 = load %8
+    %10:i32 = max %9, 1i
+    %11:i32 = max %7, %10
+    store %a, %11
+    %12:i32 = load %a
+    %13:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %14:i32 = load %13
+    %15:bool = eq %12, %14
+    if %15 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %16:i32 = load %a
+        %17:f32 = convert %16
+        %18:f32 = let %17
+        %19:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %20:i32 = load %19
+        %21:f32 = convert %20
+        %22:f32 = let %21
+        %23:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %24:i32 = load %23
+        %25:f32 = convert %24
+        %26:f32 = let %25
+        %27:i32 = load %a
+        %28:f32 = convert %27
+        %29:vec4<f32> = construct %18, %22, %26, %28
+        store %x_GLF_color, %29
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %26:i32 = load %a
-        %27:f32 = convert %26
-        %28:vec4<f32> = construct %27
-        store %x_GLF_color, %28
+      $B4: {  # false
+        %30:i32 = load %a
+        %31:f32 = convert %30
+        %32:vec4<f32> = construct %31
+        store %x_GLF_color, %32
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %30:void = call %main_1
-    %31:vec4<f32> = load %x_GLF_color
-    %32:main_out = construct %31
-    ret %32
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %34:void = call %main_1
+    %35:vec4<f32> = load %x_GLF_color
+    %36:main_out = construct %35
+    ret %36
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-combine-compares-max-max-one/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-combine-compares-max-max-one/0-opt.wgsl.expected.ir.msl
index 12a378f..3523092 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-combine-compares-max-max-one/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-combine-compares-max-max-one/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,58 +12,71 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %5:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_24:i32 = load %5
-    %7:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_26:i32 = load %7
-    %9:i32 = max %x_26, 1i
-    %10:i32 = max %x_24, %9
-    store %a, %10
-    %x_29:i32 = load %a
-    %12:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_31:i32 = load %12
-    %14:bool = eq %x_29, %x_31
-    if %14 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %x_36:i32 = load %a
-        %16:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_39:i32 = load %16
-        %18:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_42:i32 = load %18
-        %x_44:i32 = load %a
-        %21:f32 = convert %x_36
-        %22:f32 = convert %x_39
-        %23:f32 = convert %x_42
-        %24:f32 = convert %x_44
-        %25:vec4<f32> = construct %21, %22, %23, %24
-        store %x_GLF_color, %25
+    %6:i32 = load %5
+    %x_24:i32 = let %6
+    %8:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %9:i32 = load %8
+    %x_26:i32 = let %9
+    %11:i32 = max %x_26, 1i
+    %12:i32 = max %x_24, %11
+    store %a, %12
+    %13:i32 = load %a
+    %x_29:i32 = let %13
+    %15:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %16:i32 = load %15
+    %x_31:i32 = let %16
+    %18:bool = eq %x_29, %x_31
+    if %18 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %19:i32 = load %a
+        %x_36:i32 = let %19
+        %21:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %22:i32 = load %21
+        %x_39:i32 = let %22
+        %24:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %25:i32 = load %24
+        %x_42:i32 = let %25
+        %27:i32 = load %a
+        %x_44:i32 = let %27
+        %29:f32 = convert %x_36
+        %30:f32 = let %29
+        %31:f32 = convert %x_39
+        %32:f32 = let %31
+        %33:f32 = convert %x_42
+        %34:f32 = let %33
+        %35:f32 = convert %x_44
+        %36:vec4<f32> = construct %30, %32, %34, %35
+        store %x_GLF_color, %36
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %x_47:i32 = load %a
-        %x_48:f32 = convert %x_47
-        %28:vec4<f32> = construct %x_48, %x_48, %x_48, %x_48
-        store %x_GLF_color, %28
+      $B4: {  # false
+        %37:i32 = load %a
+        %x_47:i32 = let %37
+        %39:f32 = convert %x_47
+        %x_48:f32 = let %39
+        %41:vec4<f32> = construct %x_48, %x_48, %x_48, %x_48
+        store %x_GLF_color, %41
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %30:void = call %main_1
-    %31:vec4<f32> = load %x_GLF_color
-    %32:main_out = construct %31
-    ret %32
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %43:void = call %main_1
+    %44:vec4<f32> = load %x_GLF_color
+    %45:main_out = construct %44
+    ret %45
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-component-uniform-idx/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-component-uniform-idx/0-opt.spvasm.expected.ir.msl
index 83b62ec..ccde736 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-component-uniform-idx/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-component-uniform-idx/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   two:i32 @offset(0)
 }
 
@@ -8,57 +8,58 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %i:ptr<function, i32, read_write> = var
     %r:ptr<function, i32, read_write> = var
     store %i, 0i
     store %r, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %6:i32 = load %r
         %7:ptr<uniform, i32, read> = access %x_7, 0u
         %8:i32 = load %7
         %9:i32 = mul %8, 4i
         %10:bool = lt %6, %9
-        if %10 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %10 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
         %11:i32 = load %i
-        %12:i32 = load %r
-        %13:ptr<uniform, i32, read> = access %x_7, 0u
-        %14:i32 = load %13
-        %15:i32 = div %12, %14
-        %16:i32 = access vec4<i32>(1i, 2i, 3i, 4i), %15
-        %17:i32 = add %11, %16
-        store %i, %17
-        continue %b4
+        %12:i32 = let %11
+        %13:i32 = load %r
+        %14:ptr<uniform, i32, read> = access %x_7, 0u
+        %15:i32 = load %14
+        %16:i32 = call %tint_div_i32, %13, %15
+        %18:i32 = access vec4<i32>(1i, 2i, 3i, 4i), %16
+        %19:i32 = add %12, %18
+        store %i, %19
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %18:i32 = load %r
-        %19:i32 = add %18, 2i
-        store %r, %19
-        next_iteration %b3
+      $B4: {  # continuing
+        %20:i32 = load %r
+        %21:i32 = add %20, 2i
+        store %r, %21
+        next_iteration  # -> $B3
       }
     }
-    %20:i32 = load %i
-    %21:bool = eq %20, 10i
-    if %21 [t: %b7, f: %b8] {  # if_2
-      %b7 = block {  # true
+    %22:i32 = load %i
+    %23:bool = eq %22, 10i
+    if %23 [t: $B7, f: $B8] {  # if_2
+      $B7: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_2
       }
-      %b8 = block {  # false
+      $B8: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_2
       }
@@ -66,12 +67,24 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b9 {
-  %b9 = block {
-    %23:void = call %main_1
-    %24:vec4<f32> = load %x_GLF_color
-    %25:main_out = construct %24
-    ret %25
+%tint_symbol = @fragment func():main_out {
+  $B9: {
+    %25:void = call %main_1
+    %26:vec4<f32> = load %x_GLF_color
+    %27:main_out = construct %26
+    ret %27
+  }
+}
+%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B10: {
+    %30:bool = eq %rhs, 0i
+    %31:bool = eq %lhs, -2147483648i
+    %32:bool = eq %rhs, -1i
+    %33:bool = and %31, %32
+    %34:bool = or %30, %33
+    %35:i32 = select %rhs, 1i, %34
+    %36:i32 = div %lhs, %35
+    ret %36
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-component-uniform-idx/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-component-uniform-idx/0-opt.wgsl.expected.ir.msl
index 21a7abc..55040fd 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-component-uniform-idx/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-component-uniform-idx/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   two:i32 @offset(0)
 }
 
@@ -8,57 +8,64 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %i:ptr<function, i32, read_write> = var
     %r:ptr<function, i32, read_write> = var
     store %i, 0i
     store %r, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_35:i32 = load %r
-        %7:ptr<uniform, i32, read> = access %x_7, 0u
-        %x_37:i32 = load %7
-        %9:i32 = mul %x_37, 4i
-        %10:bool = lt %x_35, %9
-        if %10 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %6:i32 = load %r
+        %x_35:i32 = let %6
+        %8:ptr<uniform, i32, read> = access %x_7, 0u
+        %9:i32 = load %8
+        %x_37:i32 = let %9
+        %11:i32 = mul %x_37, 4i
+        %12:bool = lt %x_35, %11
+        if %12 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_41:i32 = load %r
-        %12:ptr<uniform, i32, read> = access %x_7, 0u
-        %x_43:i32 = load %12
-        %x_46:i32 = load %i
-        %15:i32 = div %x_41, %x_43
-        %16:i32 = access vec4<i32>(1i, 2i, 3i, 4i), %15
-        %17:i32 = add %x_46, %16
-        store %i, %17
-        continue %b4
+        %13:i32 = load %r
+        %x_41:i32 = let %13
+        %15:ptr<uniform, i32, read> = access %x_7, 0u
+        %16:i32 = load %15
+        %x_43:i32 = let %16
+        %18:i32 = load %i
+        %x_46:i32 = let %18
+        %20:i32 = call %tint_div_i32, %x_41, %x_43
+        %22:i32 = access vec4<i32>(1i, 2i, 3i, 4i), %20
+        %23:i32 = add %x_46, %22
+        store %i, %23
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_48:i32 = load %r
-        %19:i32 = add %x_48, 2i
-        store %r, %19
-        next_iteration %b3
+      $B4: {  # continuing
+        %24:i32 = load %r
+        %x_48:i32 = let %24
+        %26:i32 = add %x_48, 2i
+        store %r, %26
+        next_iteration  # -> $B3
       }
     }
-    %x_50:i32 = load %i
-    %21:bool = eq %x_50, 10i
-    if %21 [t: %b7, f: %b8] {  # if_2
-      %b7 = block {  # true
+    %27:i32 = load %i
+    %x_50:i32 = let %27
+    %29:bool = eq %x_50, 10i
+    if %29 [t: $B7, f: $B8] {  # if_2
+      $B7: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_2
       }
-      %b8 = block {  # false
+      $B8: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_2
       }
@@ -66,12 +73,24 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b9 {
-  %b9 = block {
-    %23:void = call %main_1
-    %24:vec4<f32> = load %x_GLF_color
-    %25:main_out = construct %24
-    ret %25
+%tint_symbol = @fragment func():main_out {
+  $B9: {
+    %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 {
+  $B10: {
+    %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
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-div-by-uint-one/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-div-by-uint-one/0-opt.spvasm.expected.ir.msl
index 1eebd8c..e3921c5 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-div-by-uint-one/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-div-by-uint-one/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   two:u32 @offset(0)
 }
 
@@ -8,26 +8,26 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, u32, read_write> = var
     %5:ptr<uniform, u32, read> = access %x_6, 0u
     %6:u32 = load %5
-    %7:u32 = div %6, 1u
+    %7:u32 = call %tint_div_u32, %6, 1u
     store %a, %7
-    %8:u32 = load %a
-    %9:bool = eq %8, 2u
-    if %9 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    %9:u32 = load %a
+    %10:bool = eq %9, 2u
+    if %10 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
@@ -35,12 +35,20 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %11:void = call %main_1
-    %12:vec4<f32> = load %x_GLF_color
-    %13:main_out = construct %12
-    ret %13
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %12:void = call %main_1
+    %13:vec4<f32> = load %x_GLF_color
+    %14:main_out = construct %13
+    ret %14
+  }
+}
+%tint_div_u32 = func(%lhs:u32, %rhs:u32):u32 {
+  $B6: {
+    %17:bool = eq %rhs, 0u
+    %18:u32 = select %rhs, 1u, %17
+    %19:u32 = div %lhs, %18
+    ret %19
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-div-by-uint-one/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-div-by-uint-one/0-opt.wgsl.expected.ir.msl
index e698452..f56a457 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-div-by-uint-one/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-div-by-uint-one/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   two:u32 @offset(0)
 }
 
@@ -8,26 +8,28 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, u32, read_write> = var
     %5:ptr<uniform, u32, read> = access %x_6, 0u
-    %x_27:u32 = load %5
-    %7:u32 = div %x_27, 1u
-    store %a, %7
-    %x_29:u32 = load %a
-    %9:bool = eq %x_29, 2u
-    if %9 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    %6:u32 = load %5
+    %x_27:u32 = let %6
+    %8:u32 = call %tint_div_u32, %x_27, 1u
+    store %a, %8
+    %10:u32 = load %a
+    %x_29:u32 = let %10
+    %12:bool = eq %x_29, 2u
+    if %12 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
@@ -35,12 +37,20 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %11:void = call %main_1
-    %12:vec4<f32> = load %x_GLF_color
-    %13:main_out = construct %12
-    ret %13
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %14:void = call %main_1
+    %15:vec4<f32> = load %x_GLF_color
+    %16:main_out = construct %15
+    ret %16
+  }
+}
+%tint_div_u32 = func(%lhs:u32, %rhs:u32):u32 {
+  $B6: {
+    %19:bool = eq %rhs, 0u
+    %20:u32 = select %rhs, 1u, %19
+    %21:u32 = div %lhs, %20
+    ret %21
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-for-bitwise-condition/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-for-bitwise-condition/0-opt.spvasm.expected.ir.msl
index 14c1fb3..73336f5 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-for-bitwise-condition/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-for-bitwise-condition/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,13 +12,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %6:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
@@ -28,8 +28,8 @@
     %9:i32 = load %8
     %10:i32 = negation %9
     store %i, %10
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %11:i32 = load %i
         %12:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
         %13:i32 = load %12
@@ -37,11 +37,11 @@
         %15:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
         %16:i32 = load %15
         %17:bool = lt %14, %16
-        if %17 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %17 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
@@ -50,13 +50,13 @@
         %20:i32 = load %19
         %21:i32 = mul %18, %20
         store %a, %21
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
+      $B4: {  # continuing
         %22:i32 = load %i
         %23:i32 = add %22, 1i
         store %i, %23
-        next_iteration %b3
+        next_iteration  # -> $B3
       }
     }
     %24:i32 = load %a
@@ -64,41 +64,44 @@
     %26:i32 = load %25
     %27:i32 = negation %26
     %28:bool = eq %24, %27
-    if %28 [t: %b7, f: %b8] {  # if_2
-      %b7 = block {  # true
+    if %28 [t: $B7, f: $B8] {  # if_2
+      $B7: {  # true
         %29:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
         %30:i32 = load %29
         %31:f32 = convert %30
-        %32:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %33:i32 = load %32
-        %34:f32 = convert %33
-        %35:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %36:i32 = load %35
-        %37:f32 = convert %36
-        %38:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %39:i32 = load %38
-        %40:f32 = convert %39
-        %41:vec4<f32> = construct %31, %34, %37, %40
-        store %x_GLF_color, %41
+        %32:f32 = let %31
+        %33:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %34:i32 = load %33
+        %35:f32 = convert %34
+        %36:f32 = let %35
+        %37:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %38:i32 = load %37
+        %39:f32 = convert %38
+        %40:f32 = let %39
+        %41:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %42:i32 = load %41
+        %43:f32 = convert %42
+        %44:vec4<f32> = construct %32, %36, %40, %43
+        store %x_GLF_color, %44
         exit_if  # if_2
       }
-      %b8 = block {  # false
-        %42:i32 = load %a
-        %43:f32 = convert %42
-        %44:vec4<f32> = construct %43
-        store %x_GLF_color, %44
+      $B8: {  # false
+        %45:i32 = load %a
+        %46:f32 = convert %45
+        %47:vec4<f32> = construct %46
+        store %x_GLF_color, %47
         exit_if  # if_2
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b9 {
-  %b9 = block {
-    %46:void = call %main_1
-    %47:vec4<f32> = load %x_GLF_color
-    %48:main_out = construct %47
-    ret %48
+%tint_symbol = @fragment func():main_out {
+  $B9: {
+    %49:void = call %main_1
+    %50:vec4<f32> = load %x_GLF_color
+    %51:main_out = construct %50
+    ret %51
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-for-bitwise-condition/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-for-bitwise-condition/0-opt.wgsl.expected.ir.msl
index 04c1588..892447c 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-for-bitwise-condition/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-for-bitwise-condition/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,93 +12,112 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %6:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_25:i32 = load %6
+    %7:i32 = load %6
+    %x_25:i32 = let %7
     store %a, %x_25
-    %8:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_27:i32 = load %8
-    %10:i32 = negation %x_27
-    store %i, %10
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_33:i32 = load %i
-        %12:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_35:i32 = load %12
-        %14:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_38:i32 = load %14
-        %16:i32 = or %x_33, %x_35
-        %17:bool = lt %16, %x_38
-        if %17 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    %9:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %10:i32 = load %9
+    %x_27:i32 = let %10
+    %12:i32 = negation %x_27
+    store %i, %12
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %13:i32 = load %i
+        %x_33:i32 = let %13
+        %15:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %16:i32 = load %15
+        %x_35:i32 = let %16
+        %18:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %19:i32 = load %18
+        %x_38:i32 = let %19
+        %21:i32 = or %x_33, %x_35
+        %22:bool = lt %21, %x_38
+        if %22 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_41:i32 = load %i
-        %19:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_43:i32 = load %19
-        %21:i32 = mul %x_41, %x_43
-        store %a, %21
-        continue %b4
+        %23:i32 = load %i
+        %x_41:i32 = let %23
+        %25:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %26:i32 = load %25
+        %x_43:i32 = let %26
+        %28:i32 = mul %x_41, %x_43
+        store %a, %28
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_45:i32 = load %i
-        %23:i32 = add %x_45, 1i
-        store %i, %23
-        next_iteration %b3
+      $B4: {  # continuing
+        %29:i32 = load %i
+        %x_45:i32 = let %29
+        %31:i32 = add %x_45, 1i
+        store %i, %31
+        next_iteration  # -> $B3
       }
     }
-    %x_47:i32 = load %a
-    %25:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_49:i32 = load %25
-    %27:i32 = negation %x_49
-    %28:bool = eq %x_47, %27
-    if %28 [t: %b7, f: %b8] {  # if_2
-      %b7 = block {  # true
-        %29:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_56:i32 = load %29
-        %31:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_59:i32 = load %31
-        %33:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_62:i32 = load %33
-        %35:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_65:i32 = load %35
-        %37:f32 = convert %x_56
-        %38:f32 = convert %x_59
-        %39:f32 = convert %x_62
-        %40:f32 = convert %x_65
-        %41:vec4<f32> = construct %37, %38, %39, %40
-        store %x_GLF_color, %41
+    %32:i32 = load %a
+    %x_47:i32 = let %32
+    %34:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %35:i32 = load %34
+    %x_49:i32 = let %35
+    %37:i32 = negation %x_49
+    %38:bool = eq %x_47, %37
+    if %38 [t: $B7, f: $B8] {  # if_2
+      $B7: {  # true
+        %39:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %40:i32 = load %39
+        %x_56:i32 = let %40
+        %42:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %43:i32 = load %42
+        %x_59:i32 = let %43
+        %45:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %46:i32 = load %45
+        %x_62:i32 = let %46
+        %48:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %49:i32 = load %48
+        %x_65:i32 = let %49
+        %51:f32 = convert %x_56
+        %52:f32 = let %51
+        %53:f32 = convert %x_59
+        %54:f32 = let %53
+        %55:f32 = convert %x_62
+        %56:f32 = let %55
+        %57:f32 = convert %x_65
+        %58:vec4<f32> = construct %52, %54, %56, %57
+        store %x_GLF_color, %58
         exit_if  # if_2
       }
-      %b8 = block {  # false
-        %x_68:i32 = load %a
-        %x_69:f32 = convert %x_68
-        %44:vec4<f32> = construct %x_69, %x_69, %x_69, %x_69
-        store %x_GLF_color, %44
+      $B8: {  # false
+        %59:i32 = load %a
+        %x_68:i32 = let %59
+        %61:f32 = convert %x_68
+        %x_69:f32 = let %61
+        %63:vec4<f32> = construct %x_69, %x_69, %x_69, %x_69
+        store %x_GLF_color, %63
         exit_if  # if_2
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b9 {
-  %b9 = block {
-    %46:void = call %main_1
-    %47:vec4<f32> = load %x_GLF_color
-    %48:main_out = construct %47
-    ret %48
+%tint_symbol = @fragment func():main_out {
+  $B9: {
+    %65:void = call %main_1
+    %66:vec4<f32> = load %x_GLF_color
+    %67:main_out = construct %66
+    ret %67
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-ldexp-exponent-zero/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-ldexp-exponent-zero/0-opt.spvasm.expected.ir.msl
index 2a71d33..b981aef 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-ldexp-exponent-zero/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-ldexp-exponent-zero/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   three:f32 @offset(0)
 }
 
@@ -8,13 +8,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %f:ptr<function, f32, read_write> = var
     %5:ptr<uniform, f32, read> = access %x_6, 0u
     %6:f32 = load %5
@@ -22,12 +22,12 @@
     store %f, %7
     %8:f32 = load %f
     %9:bool = eq %8, 3.0f
-    if %9 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    if %9 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
@@ -35,8 +35,8 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
+%tint_symbol = @fragment func():main_out {
+  $B5: {
     %11:void = call %main_1
     %12:vec4<f32> = load %x_GLF_color
     %13:main_out = construct %12
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-ldexp-exponent-zero/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-ldexp-exponent-zero/0-opt.wgsl.expected.ir.msl
index ff5d03a..cc4d2ae 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-ldexp-exponent-zero/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-ldexp-exponent-zero/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   three:f32 @offset(0)
 }
 
@@ -8,26 +8,28 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %f:ptr<function, f32, read_write> = var
     %5:ptr<uniform, f32, read> = access %x_6, 0u
-    %x_25:f32 = load %5
-    %7:f32 = ldexp %x_25, 0i
-    store %f, %7
-    %x_27:f32 = load %f
-    %9:bool = eq %x_27, 3.0f
-    if %9 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    %6:f32 = load %5
+    %x_25:f32 = let %6
+    %8:f32 = ldexp %x_25, 0i
+    store %f, %8
+    %9:f32 = load %f
+    %x_27:f32 = let %9
+    %11:bool = eq %x_27, 3.0f
+    if %11 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
@@ -35,12 +37,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %11:void = call %main_1
-    %12:vec4<f32> = load %x_GLF_color
-    %13:main_out = construct %12
-    ret %13
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %13:void = call %main_1
+    %14:vec4<f32> = load %x_GLF_color
+    %15:main_out = construct %14
+    ret %15
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-max-multiplied-values/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-max-multiplied-values/0-opt.spvasm.expected.ir.msl
index dd03bc1..83138dc 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-max-multiplied-values/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-max-multiplied-values/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,13 +12,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %i:ptr<function, i32, read_write> = var
     %A:ptr<function, array<i32, 4>, read_write> = var
     %x_77:ptr<function, bool, read_write> = var
@@ -30,130 +30,136 @@
     %12:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
     %13:i32 = load %12
     store %i, %13
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %14:i32 = load %i
         %15:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
         %16:i32 = load %15
         %17:bool = lt %14, %16
-        if %17 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %17 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_43:i32 = load %i
-        %19:ptr<function, i32, read_write> = access %A, %x_43
-        %20:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %21:i32 = load %20
-        store %19, %21
-        %22:i32 = load %i
-        %23:i32 = mul 2i, %22
-        %24:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-        %25:i32 = load %24
-        %26:i32 = mul 2i, %25
-        %27:i32 = max %23, %26
-        %28:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %29:i32 = load %28
-        %30:bool = eq %27, %29
-        if %30 [t: %b7] {  # if_2
-          %b7 = block {  # true
-            %x_58:i32 = load %i
-            %32:ptr<function, i32, read_write> = access %A, %x_58
-            store %32, 1i
+        %18:i32 = load %i
+        %x_43:i32 = let %18
+        %20:ptr<function, i32, read_write> = access %A, %x_43
+        %21:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %22:i32 = load %21
+        store %20, %22
+        %23:i32 = load %i
+        %24:i32 = mul 2i, %23
+        %25:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+        %26:i32 = load %25
+        %27:i32 = mul 2i, %26
+        %28:i32 = max %24, %27
+        %29:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %30:i32 = load %29
+        %31:bool = eq %28, %30
+        if %31 [t: $B7] {  # if_2
+          $B7: {  # true
+            %32:i32 = load %i
+            %x_58:i32 = let %32
+            %34:ptr<function, i32, read_write> = access %A, %x_58
+            store %34, 1i
             exit_if  # if_2
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %33:i32 = load %i
-        %34:i32 = add %33, 1i
-        store %i, %34
-        next_iteration %b3
+      $B4: {  # continuing
+        %35:i32 = load %i
+        %36:i32 = add %35, 1i
+        store %i, %36
+        next_iteration  # -> $B3
       }
     }
-    %35:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %36:i32 = load %35
-    %37:ptr<function, i32, read_write> = access %A, %36
+    %37:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
     %38:i32 = load %37
-    %39:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+    %39:ptr<function, i32, read_write> = access %A, %38
     %40:i32 = load %39
-    %x_68:bool = eq %38, %40
+    %41:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+    %42:i32 = load %41
+    %43:bool = eq %40, %42
+    %x_68:bool = let %43
     store %x_78, %x_68
-    if %x_68 [t: %b8] {  # if_3
-      %b8 = block {  # true
-        %42:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-        %43:i32 = load %42
-        %44:ptr<function, i32, read_write> = access %A, %43
-        %45:i32 = load %44
-        %46:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-        %47:i32 = load %46
-        %48:bool = eq %45, %47
-        store %x_77, %48
-        %49:bool = load %x_77
-        store %x_78, %49
+    if %x_68 [t: $B8] {  # if_3
+      $B8: {  # true
+        %45:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+        %46:i32 = load %45
+        %47:ptr<function, i32, read_write> = access %A, %46
+        %48:i32 = load %47
+        %49:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+        %50:i32 = load %49
+        %51:bool = eq %48, %50
+        store %x_77, %51
+        %52:bool = load %x_77
+        store %x_78, %52
         exit_if  # if_3
       }
     }
-    %50:bool = load %x_78
-    store %x_88, %50
-    %51:bool = load %x_78
-    if %51 [t: %b9] {  # if_4
-      %b9 = block {  # true
-        %52:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %53:i32 = load %52
-        %54:ptr<function, i32, read_write> = access %A, %53
-        %55:i32 = load %54
-        %56:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %57:i32 = load %56
-        %58:bool = eq %55, %57
-        store %x_87, %58
-        %59:bool = load %x_87
-        store %x_88, %59
+    %53:bool = load %x_78
+    store %x_88, %53
+    %54:bool = load %x_78
+    if %54 [t: $B9] {  # if_4
+      $B9: {  # true
+        %55:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %56:i32 = load %55
+        %57:ptr<function, i32, read_write> = access %A, %56
+        %58:i32 = load %57
+        %59:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %60:i32 = load %59
+        %61:bool = eq %58, %60
+        store %x_87, %61
+        %62:bool = load %x_87
+        store %x_88, %62
         exit_if  # if_4
       }
     }
-    %60:bool = load %x_88
-    store %x_98, %60
-    %61:bool = load %x_88
-    if %61 [t: %b10] {  # if_5
-      %b10 = block {  # true
-        %62:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %63:i32 = load %62
-        %64:ptr<function, i32, read_write> = access %A, %63
-        %65:i32 = load %64
-        %66:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %67:i32 = load %66
-        %68:bool = eq %65, %67
-        store %x_97, %68
-        %69:bool = load %x_97
-        store %x_98, %69
+    %63:bool = load %x_88
+    store %x_98, %63
+    %64:bool = load %x_88
+    if %64 [t: $B10] {  # if_5
+      $B10: {  # true
+        %65:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %66:i32 = load %65
+        %67:ptr<function, i32, read_write> = access %A, %66
+        %68:i32 = load %67
+        %69:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %70:i32 = load %69
+        %71:bool = eq %68, %70
+        store %x_97, %71
+        %72:bool = load %x_97
+        store %x_98, %72
         exit_if  # if_5
       }
     }
-    %70:bool = load %x_98
-    if %70 [t: %b11, f: %b12] {  # if_6
-      %b11 = block {  # true
-        %71:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-        %72:i32 = load %71
-        %73:f32 = convert %72
-        %74:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %73:bool = load %x_98
+    if %73 [t: $B11, f: $B12] {  # if_6
+      $B11: {  # true
+        %74:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
         %75:i32 = load %74
         %76:f32 = convert %75
-        %77:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %78:i32 = load %77
-        %79:f32 = convert %78
-        %80:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-        %81:i32 = load %80
-        %82:f32 = convert %81
-        %83:vec4<f32> = construct %73, %76, %79, %82
-        store %x_GLF_color, %83
+        %77:f32 = let %76
+        %78:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %79:i32 = load %78
+        %80:f32 = convert %79
+        %81:f32 = let %80
+        %82:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %83:i32 = load %82
+        %84:f32 = convert %83
+        %85:f32 = let %84
+        %86:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+        %87:i32 = load %86
+        %88:f32 = convert %87
+        %89:vec4<f32> = construct %77, %81, %85, %88
+        store %x_GLF_color, %89
         exit_if  # if_6
       }
-      %b12 = block {  # false
+      $B12: {  # false
         store %x_GLF_color, vec4<f32>(1.0f)
         exit_if  # if_6
       }
@@ -161,12 +167,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b13 {
-  %b13 = block {
-    %85:void = call %main_1
-    %86:vec4<f32> = load %x_GLF_color
-    %87:main_out = construct %86
-    ret %87
+%tint_symbol = @fragment func():main_out {
+  $B13: {
+    %91:void = call %main_1
+    %92:vec4<f32> = load %x_GLF_color
+    %93:main_out = construct %92
+    ret %93
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-max-multiplied-values/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-max-multiplied-values/0-opt.wgsl.expected.ir.msl
index b2c8b88..c3d5ae8 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-max-multiplied-values/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-max-multiplied-values/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,13 +12,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %i:ptr<function, i32, read_write> = var
     %A:ptr<function, array<i32, 4>, read_write> = var
     %x_77:ptr<function, bool, read_write> = var
@@ -28,130 +28,163 @@
     %x_88_phi:ptr<function, bool, read_write> = var
     %x_98_phi:ptr<function, bool, read_write> = var
     %12:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_33:i32 = load %12
+    %13:i32 = load %12
+    %x_33:i32 = let %13
     store %i, %x_33
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_38:i32 = load %i
-        %15:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
-        %x_40:i32 = load %15
-        %17:bool = lt %x_38, %x_40
-        if %17 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %15:i32 = load %i
+        %x_38:i32 = let %15
+        %17:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
+        %18:i32 = load %17
+        %x_40:i32 = let %18
+        %20:bool = lt %x_38, %x_40
+        if %20 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_43:i32 = load %i
-        %19:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_45:i32 = load %19
-        %21:ptr<function, i32, read_write> = access %A, %x_43
-        store %21, %x_45
-        %x_47:i32 = load %i
-        %23:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-        %x_50:i32 = load %23
-        %25:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_54:i32 = load %25
-        %27:i32 = mul 2i, %x_47
-        %28:i32 = mul 2i, %x_50
-        %29:i32 = max %27, %28
-        %30:bool = eq %29, %x_54
-        if %30 [t: %b7] {  # if_2
-          %b7 = block {  # true
-            %x_58:i32 = load %i
-            %32:ptr<function, i32, read_write> = access %A, %x_58
-            store %32, 1i
+        %21:i32 = load %i
+        %x_43:i32 = let %21
+        %23:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %24:i32 = load %23
+        %x_45:i32 = let %24
+        %26:ptr<function, i32, read_write> = access %A, %x_43
+        store %26, %x_45
+        %27:i32 = load %i
+        %x_47:i32 = let %27
+        %29:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+        %30:i32 = load %29
+        %x_50:i32 = let %30
+        %32:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %33:i32 = load %32
+        %x_54:i32 = let %33
+        %35:i32 = mul 2i, %x_47
+        %36:i32 = mul 2i, %x_50
+        %37:i32 = max %35, %36
+        %38:bool = eq %37, %x_54
+        if %38 [t: $B7] {  # if_2
+          $B7: {  # true
+            %39:i32 = load %i
+            %x_58:i32 = let %39
+            %41:ptr<function, i32, read_write> = access %A, %x_58
+            store %41, 1i
             exit_if  # if_2
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_60:i32 = load %i
-        %34:i32 = add %x_60, 1i
-        store %i, %34
-        next_iteration %b3
+      $B4: {  # continuing
+        %42:i32 = load %i
+        %x_60:i32 = let %42
+        %44:i32 = add %x_60, 1i
+        store %i, %44
+        next_iteration  # -> $B3
       }
     }
-    %35:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_63:i32 = load %35
-    %37:ptr<function, i32, read_write> = access %A, %x_63
-    %x_65:i32 = load %37
-    %39:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-    %x_67:i32 = load %39
-    %x_68:bool = eq %x_65, %x_67
+    %45:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %46:i32 = load %45
+    %x_63:i32 = let %46
+    %48:ptr<function, i32, read_write> = access %A, %x_63
+    %49:i32 = load %48
+    %x_65:i32 = let %49
+    %51:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+    %52:i32 = load %51
+    %x_67:i32 = let %52
+    %54:bool = eq %x_65, %x_67
+    %x_68:bool = let %54
     store %x_78_phi, %x_68
-    if %x_68 [t: %b8] {  # if_3
-      %b8 = block {  # true
-        %42:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-        %x_72:i32 = load %42
-        %44:ptr<function, i32, read_write> = access %A, %x_72
-        %x_74:i32 = load %44
-        %46:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-        %x_76:i32 = load %46
-        %48:bool = eq %x_74, %x_76
-        store %x_77, %48
-        %49:bool = load %x_77
-        store %x_78_phi, %49
+    if %x_68 [t: $B8] {  # if_3
+      $B8: {  # true
+        %56:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+        %57:i32 = load %56
+        %x_72:i32 = let %57
+        %59:ptr<function, i32, read_write> = access %A, %x_72
+        %60:i32 = load %59
+        %x_74:i32 = let %60
+        %62:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+        %63:i32 = load %62
+        %x_76:i32 = let %63
+        %65:bool = eq %x_74, %x_76
+        store %x_77, %65
+        %66:bool = load %x_77
+        store %x_78_phi, %66
         exit_if  # if_3
       }
     }
-    %x_78:bool = load %x_78_phi
+    %67:bool = load %x_78_phi
+    %x_78:bool = let %67
     store %x_88_phi, %x_78
-    if %x_78 [t: %b9] {  # if_4
-      %b9 = block {  # true
-        %51:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_82:i32 = load %51
-        %53:ptr<function, i32, read_write> = access %A, %x_82
-        %x_84:i32 = load %53
-        %55:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_86:i32 = load %55
-        %57:bool = eq %x_84, %x_86
-        store %x_87, %57
-        %58:bool = load %x_87
-        store %x_88_phi, %58
+    if %x_78 [t: $B9] {  # if_4
+      $B9: {  # true
+        %69:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %70:i32 = load %69
+        %x_82:i32 = let %70
+        %72:ptr<function, i32, read_write> = access %A, %x_82
+        %73:i32 = load %72
+        %x_84:i32 = let %73
+        %75:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %76:i32 = load %75
+        %x_86:i32 = let %76
+        %78:bool = eq %x_84, %x_86
+        store %x_87, %78
+        %79:bool = load %x_87
+        store %x_88_phi, %79
         exit_if  # if_4
       }
     }
-    %x_88:bool = load %x_88_phi
+    %80:bool = load %x_88_phi
+    %x_88:bool = let %80
     store %x_98_phi, %x_88
-    if %x_88 [t: %b10] {  # if_5
-      %b10 = block {  # true
-        %60:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %x_92:i32 = load %60
-        %62:ptr<function, i32, read_write> = access %A, %x_92
-        %x_94:i32 = load %62
-        %64:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_96:i32 = load %64
-        %66:bool = eq %x_94, %x_96
-        store %x_97, %66
-        %67:bool = load %x_97
-        store %x_98_phi, %67
+    if %x_88 [t: $B10] {  # if_5
+      $B10: {  # true
+        %82:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %83:i32 = load %82
+        %x_92:i32 = let %83
+        %85:ptr<function, i32, read_write> = access %A, %x_92
+        %86:i32 = load %85
+        %x_94:i32 = let %86
+        %88:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %89:i32 = load %88
+        %x_96:i32 = let %89
+        %91:bool = eq %x_94, %x_96
+        store %x_97, %91
+        %92:bool = load %x_97
+        store %x_98_phi, %92
         exit_if  # if_5
       }
     }
-    %x_98:bool = load %x_98_phi
-    if %x_98 [t: %b11, f: %b12] {  # if_6
-      %b11 = block {  # true
-        %69:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-        %x_103:i32 = load %69
-        %71:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_106:i32 = load %71
-        %73:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_109:i32 = load %73
-        %75:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-        %x_112:i32 = load %75
-        %77:f32 = convert %x_103
-        %78:f32 = convert %x_106
-        %79:f32 = convert %x_109
-        %80:f32 = convert %x_112
-        %81:vec4<f32> = construct %77, %78, %79, %80
-        store %x_GLF_color, %81
+    %93:bool = load %x_98_phi
+    %x_98:bool = let %93
+    if %x_98 [t: $B11, f: $B12] {  # if_6
+      $B11: {  # true
+        %95:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+        %96:i32 = load %95
+        %x_103:i32 = let %96
+        %98:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %99:i32 = load %98
+        %x_106:i32 = let %99
+        %101:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %102:i32 = load %101
+        %x_109:i32 = let %102
+        %104:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+        %105:i32 = load %104
+        %x_112:i32 = let %105
+        %107:f32 = convert %x_103
+        %108:f32 = let %107
+        %109:f32 = convert %x_106
+        %110:f32 = let %109
+        %111:f32 = convert %x_109
+        %112:f32 = let %111
+        %113:f32 = convert %x_112
+        %114:vec4<f32> = construct %108, %110, %112, %113
+        store %x_GLF_color, %114
         exit_if  # if_6
       }
-      %b12 = block {  # false
+      $B12: {  # false
         store %x_GLF_color, vec4<f32>(1.0f)
         exit_if  # if_6
       }
@@ -159,12 +192,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b13 {
-  %b13 = block {
-    %83:void = call %main_1
-    %84:vec4<f32> = load %x_GLF_color
-    %85:main_out = construct %84
-    ret %85
+%tint_symbol = @fragment func():main_out {
+  $B13: {
+    %116:void = call %main_1
+    %117:vec4<f32> = load %x_GLF_color
+    %118:main_out = construct %117
+    ret %118
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-modulo-1/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-modulo-1/0-opt.spvasm.expected.ir.msl
index ee256e3..6344894 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-modulo-1/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-modulo-1/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,56 +20,60 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_8:ptr<uniform, buf1, read> = var @binding_point(0, 1)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, f32, read_write> = var
     %6:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_30:f32 = load %6
-    %8:f32 = div %x_30, 1.0f
-    %9:f32 = floor %8
-    %10:f32 = mul 1.0f, %9
-    %11:f32 = sub %x_30, %10
-    store %a, %11
-    %12:f32 = load %a
-    %13:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %14:f32 = load %13
-    %15:bool = eq %12, %14
-    if %15 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %16:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-        %17:i32 = load %16
-        %18:f32 = convert %17
-        %19:f32 = load %a
-        %20:f32 = load %a
-        %21:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-        %22:i32 = load %21
-        %23:f32 = convert %22
-        %24:vec4<f32> = construct %18, %19, %20, %23
-        store %x_GLF_color, %24
+    %7:f32 = load %6
+    %x_30:f32 = let %7
+    %9:f32 = div %x_30, 1.0f
+    %10:f32 = floor %9
+    %11:f32 = mul 1.0f, %10
+    %12:f32 = sub %x_30, %11
+    store %a, %12
+    %13:f32 = load %a
+    %14:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %15:f32 = load %14
+    %16:bool = eq %13, %15
+    if %16 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %17:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+        %18:i32 = load %17
+        %19:f32 = convert %18
+        %20:f32 = let %19
+        %21:f32 = load %a
+        %22:f32 = let %21
+        %23:f32 = load %a
+        %24:f32 = let %23
+        %25:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+        %26:i32 = load %25
+        %27:f32 = convert %26
+        %28:vec4<f32> = construct %20, %22, %24, %27
+        store %x_GLF_color, %28
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %25:f32 = load %a
-        %26:vec4<f32> = construct %25
-        store %x_GLF_color, %26
+      $B4: {  # false
+        %29:f32 = load %a
+        %30:vec4<f32> = construct %29
+        store %x_GLF_color, %30
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %28:void = call %main_1
-    %29:vec4<f32> = load %x_GLF_color
-    %30:main_out = construct %29
-    ret %30
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %32:void = call %main_1
+    %33:vec4<f32> = load %x_GLF_color
+    %34:main_out = construct %33
+    ret %34
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-modulo-1/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-modulo-1/0-opt.wgsl.expected.ir.msl
index ab8df29..1c0ad5d 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-modulo-1/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-modulo-1/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,56 +20,65 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_8:ptr<uniform, buf1, read> = var @binding_point(0, 1)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, f32, read_write> = var
     %6:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_30:f32 = load %6
-    %8:f32 = div %x_30, 1.0f
-    %9:f32 = floor %8
-    %10:f32 = mul 1.0f, %9
-    %11:f32 = sub %x_30, %10
-    store %a, %11
-    %x_32:f32 = load %a
-    %13:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_34:f32 = load %13
-    %15:bool = eq %x_32, %x_34
-    if %15 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %16:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-        %x_40:i32 = load %16
-        %x_42:f32 = load %a
-        %x_43:f32 = load %a
-        %20:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-        %x_45:i32 = load %20
-        %22:f32 = convert %x_40
-        %23:f32 = convert %x_45
-        %24:vec4<f32> = construct %22, %x_42, %x_43, %23
-        store %x_GLF_color, %24
+    %7:f32 = load %6
+    %x_30:f32 = let %7
+    %9:f32 = div %x_30, 1.0f
+    %10:f32 = floor %9
+    %11:f32 = mul 1.0f, %10
+    %12:f32 = sub %x_30, %11
+    store %a, %12
+    %13:f32 = load %a
+    %x_32:f32 = let %13
+    %15:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %16:f32 = load %15
+    %x_34:f32 = let %16
+    %18:bool = eq %x_32, %x_34
+    if %18 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %19:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+        %20:i32 = load %19
+        %x_40:i32 = let %20
+        %22:f32 = load %a
+        %x_42:f32 = let %22
+        %24:f32 = load %a
+        %x_43:f32 = let %24
+        %26:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+        %27:i32 = load %26
+        %x_45:i32 = let %27
+        %29:f32 = convert %x_40
+        %30:f32 = let %29
+        %31:f32 = convert %x_45
+        %32:vec4<f32> = construct %30, %x_42, %x_43, %31
+        store %x_GLF_color, %32
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %x_48:f32 = load %a
-        %26:vec4<f32> = construct %x_48, %x_48, %x_48, %x_48
-        store %x_GLF_color, %26
+      $B4: {  # false
+        %33:f32 = load %a
+        %x_48:f32 = let %33
+        %35:vec4<f32> = construct %x_48, %x_48, %x_48, %x_48
+        store %x_GLF_color, %35
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %28:void = call %main_1
-    %29:vec4<f32> = load %x_GLF_color
-    %30:main_out = construct %29
-    ret %30
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %37:void = call %main_1
+    %38:vec4<f32> = load %x_GLF_color
+    %39:main_out = construct %38
+    ret %39
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-mul-identity/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-mul-identity/0-opt.spvasm.expected.ir.msl
index 4750db9..bf16665 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-mul-identity/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-mul-identity/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:f32 @offset(0)
 }
 
@@ -8,36 +8,40 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %v:ptr<function, vec4<f32>, read_write> = var
     %res:ptr<function, vec4<f32>, read_write> = var
     store %v, vec4<f32>(8.3999996185302734375f, -864.66497802734375f, 945.41998291015625f, 1.0f)
     %6:ptr<uniform, f32, read> = access %x_7, 0u
-    %x_31:f32 = load %6
-    %8:vec4<f32> = construct %x_31, 0.0f, 0.0f, 0.0f
-    %9:vec4<f32> = construct 0.0f, %x_31, 0.0f, 0.0f
-    %10:vec4<f32> = construct 0.0f, 0.0f, %x_31, 0.0f
-    %11:vec4<f32> = construct 0.0f, 0.0f, 0.0f, %x_31
-    %12:mat4x4<f32> = construct %8, %9, %10, %11
-    %13:vec4<f32> = load %v
-    %14:vec4<f32> = mul %12, %13
-    store %res, %14
-    %15:vec4<f32> = load %v
-    %16:vec4<f32> = load %res
-    %17:f32 = distance %15, %16
-    %18:bool = lt %17, 0.00999999977648258209f
-    if %18 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    %7:f32 = load %6
+    %x_31:f32 = let %7
+    %9:vec4<f32> = construct %x_31, 0.0f, 0.0f, 0.0f
+    %10:vec4<f32> = let %9
+    %11:vec4<f32> = construct 0.0f, %x_31, 0.0f, 0.0f
+    %12:vec4<f32> = let %11
+    %13:vec4<f32> = construct 0.0f, 0.0f, %x_31, 0.0f
+    %14:vec4<f32> = let %13
+    %15:vec4<f32> = construct 0.0f, 0.0f, 0.0f, %x_31
+    %16:mat4x4<f32> = construct %10, %12, %14, %15
+    %17:vec4<f32> = load %v
+    %18:vec4<f32> = mul %16, %17
+    store %res, %18
+    %19:vec4<f32> = load %v
+    %20:vec4<f32> = load %res
+    %21:f32 = distance %19, %20
+    %22:bool = lt %21, 0.00999999977648258209f
+    if %22 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
@@ -45,12 +49,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %20:void = call %main_1
-    %21:vec4<f32> = load %x_GLF_color
-    %22:main_out = construct %21
-    ret %22
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %24:void = call %main_1
+    %25:vec4<f32> = load %x_GLF_color
+    %26:main_out = construct %25
+    ret %26
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-mul-identity/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-mul-identity/0-opt.wgsl.expected.ir.msl
index 3177272..ea8cf6d 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-mul-identity/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-mul-identity/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:f32 @offset(0)
 }
 
@@ -8,36 +8,43 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %v:ptr<function, vec4<f32>, read_write> = var
     %res:ptr<function, vec4<f32>, read_write> = var
     store %v, vec4<f32>(8.3999996185302734375f, -864.66497802734375f, 945.41998291015625f, 1.0f)
     %6:ptr<uniform, f32, read> = access %x_7, 0u
-    %x_31:f32 = load %6
-    %x_37:vec4<f32> = load %v
-    %9:vec4<f32> = construct %x_31, 0.0f, 0.0f, 0.0f
-    %10:vec4<f32> = construct 0.0f, %x_31, 0.0f, 0.0f
-    %11:vec4<f32> = construct 0.0f, 0.0f, %x_31, 0.0f
-    %12:vec4<f32> = construct 0.0f, 0.0f, 0.0f, %x_31
-    %13:mat4x4<f32> = construct %9, %10, %11, %12
-    %14:vec4<f32> = mul %13, %x_37
-    store %res, %14
-    %x_39:vec4<f32> = load %v
-    %x_40:vec4<f32> = load %res
-    %17:f32 = distance %x_39, %x_40
-    %18:bool = lt %17, 0.00999999977648258209f
-    if %18 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    %7:f32 = load %6
+    %x_31:f32 = let %7
+    %9:vec4<f32> = load %v
+    %x_37:vec4<f32> = let %9
+    %11:vec4<f32> = construct %x_31, 0.0f, 0.0f, 0.0f
+    %12:vec4<f32> = let %11
+    %13:vec4<f32> = construct 0.0f, %x_31, 0.0f, 0.0f
+    %14:vec4<f32> = let %13
+    %15:vec4<f32> = construct 0.0f, 0.0f, %x_31, 0.0f
+    %16:vec4<f32> = let %15
+    %17:vec4<f32> = construct 0.0f, 0.0f, 0.0f, %x_31
+    %18:mat4x4<f32> = construct %12, %14, %16, %17
+    %19:vec4<f32> = mul %18, %x_37
+    store %res, %19
+    %20:vec4<f32> = load %v
+    %x_39:vec4<f32> = let %20
+    %22:vec4<f32> = load %res
+    %x_40:vec4<f32> = let %22
+    %24:f32 = distance %x_39, %x_40
+    %25:bool = lt %24, 0.00999999977648258209f
+    if %25 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
@@ -45,12 +52,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %20:void = call %main_1
-    %21:vec4<f32> = load %x_GLF_color
-    %22:main_out = construct %21
-    ret %22
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %27:void = call %main_1
+    %28:vec4<f32> = load %x_GLF_color
+    %29:main_out = construct %28
+    ret %29
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-not-less-than-neg/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-not-less-than-neg/0.spvasm.expected.ir.msl
index 19bb4e5..2245ddd 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-not-less-than-neg/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-not-less-than-neg/0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   three:i32 @offset(0)
 }
 
@@ -8,38 +8,39 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %x_36:ptr<function, bool, read_write> = var
     %x_37:ptr<function, bool, read_write> = var
     %7:ptr<uniform, i32, read> = access %x_6, 0u
     %8:i32 = load %7
-    %x_30:bool = gt %8, 1i
+    %9:bool = gt %8, 1i
+    %x_30:bool = let %9
     store %x_37, %x_30
-    if %x_30 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %10:f32 = load_vector_element %gl_FragCoord, 1u
-        %11:bool = lt %10, -5.0f
-        %12:bool = eq %11, false
-        store %x_36, %12
-        %13:bool = load %x_36
-        store %x_37, %13
+    if %x_30 [t: $B3] {  # if_1
+      $B3: {  # true
+        %11:f32 = load_vector_element %gl_FragCoord, 1u
+        %12:bool = lt %11, -5.0f
+        %13:bool = eq %12, false
+        store %x_36, %13
+        %14:bool = load %x_36
+        store %x_37, %14
         exit_if  # if_1
       }
     }
-    %14:bool = load %x_37
-    if %14 [t: %b4, f: %b5] {  # if_2
-      %b4 = block {  # true
+    %15:bool = load %x_37
+    if %15 [t: $B4, f: $B5] {  # if_2
+      $B4: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_2
       }
-      %b5 = block {  # false
+      $B5: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_2
       }
@@ -47,13 +48,13 @@
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b6 {
-  %b6 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B6: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %17:void = call %main_1
-    %18:vec4<f32> = load %x_GLF_color
-    %19:main_out = construct %18
-    ret %19
+    %18:void = call %main_1
+    %19:vec4<f32> = load %x_GLF_color
+    %20:main_out = construct %19
+    ret %20
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-not-less-than-neg/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-not-less-than-neg/0.wgsl.expected.ir.msl
index fcdd82c..1659ec9 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-not-less-than-neg/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-not-less-than-neg/0.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   three:i32 @offset(0)
 }
 
@@ -8,38 +8,42 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %x_36:ptr<function, bool, read_write> = var
     %x_37_phi:ptr<function, bool, read_write> = var
     %7:ptr<uniform, i32, read> = access %x_6, 0u
-    %x_29:i32 = load %7
-    %x_30:bool = gt %x_29, 1i
+    %8:i32 = load %7
+    %x_29:i32 = let %8
+    %10:bool = gt %x_29, 1i
+    %x_30:bool = let %10
     store %x_37_phi, %x_30
-    if %x_30 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %x_34:f32 = load_vector_element %gl_FragCoord, 1u
-        %11:bool = lt %x_34, -5.0f
-        %12:bool = eq %11, false
-        store %x_36, %12
-        %13:bool = load %x_36
-        store %x_37_phi, %13
+    if %x_30 [t: $B3] {  # if_1
+      $B3: {  # true
+        %12:f32 = load_vector_element %gl_FragCoord, 1u
+        %x_34:f32 = let %12
+        %14:bool = lt %x_34, -5.0f
+        %15:bool = eq %14, false
+        store %x_36, %15
+        %16:bool = load %x_36
+        store %x_37_phi, %16
         exit_if  # if_1
       }
     }
-    %x_37:bool = load %x_37_phi
-    if %x_37 [t: %b4, f: %b5] {  # if_2
-      %b4 = block {  # true
+    %17:bool = load %x_37_phi
+    %x_37:bool = let %17
+    if %x_37 [t: $B4, f: $B5] {  # if_2
+      $B4: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_2
       }
-      %b5 = block {  # false
+      $B5: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_2
       }
@@ -47,13 +51,13 @@
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b6 {
-  %b6 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B6: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %17:void = call %main_1
-    %18:vec4<f32> = load %x_GLF_color
-    %19:main_out = construct %18
-    ret %19
+    %21:void = call %main_1
+    %22:vec4<f32> = load %x_GLF_color
+    %23:main_out = construct %22
+    ret %23
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-right-shift-greater-than-zero/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-right-shift-greater-than-zero/0-opt.spvasm.expected.ir.msl
index 582bd4b..b5847fd 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-right-shift-greater-than-zero/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-right-shift-greater-than-zero/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,54 +12,58 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %4:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
     %5:i32 = load %4
     %6:u32 = bitcast %5
-    %7:i32 = shiftr 1i, %6
-    %8:bool = gt %7, 0i
-    if %8 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %9:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
-        %10:i32 = load %9
-        %11:f32 = convert %10
-        %12:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
-        %13:i32 = load %12
-        %14:f32 = convert %13
-        %15:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
-        %16:i32 = load %15
-        %17:f32 = convert %16
-        %18:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
+    %7:u32 = and %6, 31u
+    %8:i32 = shr 1i, %7
+    %9:bool = gt %8, 0i
+    if %9 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %10:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
+        %11:i32 = load %10
+        %12:f32 = convert %11
+        %13:f32 = let %12
+        %14:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
+        %15:i32 = load %14
+        %16:f32 = convert %15
+        %17:f32 = let %16
+        %18:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
         %19:i32 = load %18
         %20:f32 = convert %19
-        %21:vec4<f32> = construct %11, %14, %17, %20
-        store %x_GLF_color, %21
-        exit_if  # if_1
-      }
-      %b4 = block {  # false
-        %22:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
+        %21:f32 = let %20
+        %22:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
         %23:i32 = load %22
         %24:f32 = convert %23
-        %25:vec4<f32> = construct %24
+        %25:vec4<f32> = construct %13, %17, %21, %24
         store %x_GLF_color, %25
         exit_if  # if_1
       }
+      $B4: {  # false
+        %26:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
+        %27:i32 = load %26
+        %28:f32 = convert %27
+        %29:vec4<f32> = construct %28
+        store %x_GLF_color, %29
+        exit_if  # if_1
+      }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %27:void = call %main_1
-    %28:vec4<f32> = load %x_GLF_color
-    %29:main_out = construct %28
-    ret %29
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %31:void = call %main_1
+    %32:vec4<f32> = load %x_GLF_color
+    %33:main_out = construct %32
+    ret %33
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-right-shift-greater-than-zero/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-right-shift-greater-than-zero/0-opt.wgsl.expected.ir.msl
index 9d67f8d..9fbcde4 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-right-shift-greater-than-zero/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-right-shift-greater-than-zero/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,54 +12,65 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %4:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
-    %x_22:i32 = load %4
-    %6:u32 = bitcast %x_22
-    %7:i32 = shiftr 1i, %6
-    %8:bool = gt %7, 0i
-    if %8 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %9:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
-        %x_29:i32 = load %9
-        %11:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
-        %x_32:i32 = load %11
-        %13:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
-        %x_35:i32 = load %13
-        %15:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
-        %x_38:i32 = load %15
-        %17:f32 = convert %x_29
-        %18:f32 = convert %x_32
-        %19:f32 = convert %x_35
-        %20:f32 = convert %x_38
-        %21:vec4<f32> = construct %17, %18, %19, %20
-        store %x_GLF_color, %21
+    %5:i32 = load %4
+    %x_22:i32 = let %5
+    %7:u32 = bitcast %x_22
+    %8:u32 = and %7, 31u
+    %9:i32 = shr 1i, %8
+    %10:bool = gt %9, 0i
+    if %10 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %11:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
+        %12:i32 = load %11
+        %x_29:i32 = let %12
+        %14:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
+        %15:i32 = load %14
+        %x_32:i32 = let %15
+        %17:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
+        %18:i32 = load %17
+        %x_35:i32 = let %18
+        %20:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
+        %21:i32 = load %20
+        %x_38:i32 = let %21
+        %23:f32 = convert %x_29
+        %24:f32 = let %23
+        %25:f32 = convert %x_32
+        %26:f32 = let %25
+        %27:f32 = convert %x_35
+        %28:f32 = let %27
+        %29:f32 = convert %x_38
+        %30:vec4<f32> = construct %24, %26, %28, %29
+        store %x_GLF_color, %30
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %22:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
-        %x_42:i32 = load %22
-        %x_43:f32 = convert %x_42
-        %25:vec4<f32> = construct %x_43, %x_43, %x_43, %x_43
-        store %x_GLF_color, %25
+      $B4: {  # false
+        %31:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
+        %32:i32 = load %31
+        %x_42:i32 = let %32
+        %34:f32 = convert %x_42
+        %x_43:f32 = let %34
+        %36:vec4<f32> = construct %x_43, %x_43, %x_43, %x_43
+        store %x_GLF_color, %36
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %27:void = call %main_1
-    %28:vec4<f32> = load %x_GLF_color
-    %29:main_out = construct %28
-    ret %29
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %38:void = call %main_1
+    %39:vec4<f32> = load %x_GLF_color
+    %40:main_out = construct %39
+    ret %40
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-sign-cosh/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-sign-cosh/0.spvasm.expected.ir.msl
index 2113f0e..a9871cd 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-sign-cosh/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-sign-cosh/0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:i32 @offset(0)
 }
 
@@ -8,20 +8,20 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %x_31:ptr<function, bool, read_write> = var
     %x_32:ptr<function, bool, read_write> = var
     %x_26:bool = let true
     store %x_32, %x_26
     %7:bool = eq %x_26, false
-    if %7 [t: %b3] {  # if_1
-      %b3 = block {  # true
+    if %7 [t: $B3] {  # if_1
+      $B3: {  # true
         %8:ptr<uniform, i32, read> = access %x_5, 0u
         %9:i32 = load %8
         %10:bool = eq %9, 1i
@@ -32,12 +32,12 @@
       }
     }
     %12:bool = load %x_32
-    if %12 [t: %b4, f: %b5] {  # if_2
-      %b4 = block {  # true
+    if %12 [t: $B4, f: $B5] {  # if_2
+      $B4: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_2
       }
-      %b5 = block {  # false
+      $B5: {  # false
         store %x_GLF_color, vec4<f32>(1.0f)
         exit_if  # if_2
       }
@@ -45,8 +45,8 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b6 {
-  %b6 = block {
+%tint_symbol = @fragment func():main_out {
+  $B6: {
     %14:void = call %main_1
     %15:vec4<f32> = load %x_GLF_color
     %16:main_out = construct %15
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-sign-cosh/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-sign-cosh/0.wgsl.expected.ir.msl
index 66fd17d..4767f82 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-sign-cosh/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-simplify-sign-cosh/0.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:i32 @offset(0)
 }
 
@@ -8,36 +8,38 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %x_31:ptr<function, bool, read_write> = var
     %x_32_phi:ptr<function, bool, read_write> = var
     %x_26:bool = let true
     store %x_32_phi, %x_26
     %7:bool = eq %x_26, false
-    if %7 [t: %b3] {  # if_1
-      %b3 = block {  # true
+    if %7 [t: $B3] {  # if_1
+      $B3: {  # true
         %8:ptr<uniform, i32, read> = access %x_5, 0u
-        %x_6:i32 = load %8
-        %10:bool = eq %x_6, 1i
-        store %x_31, %10
-        %11:bool = load %x_31
-        store %x_32_phi, %11
+        %9:i32 = load %8
+        %x_6:i32 = let %9
+        %11:bool = eq %x_6, 1i
+        store %x_31, %11
+        %12:bool = load %x_31
+        store %x_32_phi, %12
         exit_if  # if_1
       }
     }
-    %x_32:bool = load %x_32_phi
-    if %x_32 [t: %b4, f: %b5] {  # if_2
-      %b4 = block {  # true
+    %13:bool = load %x_32_phi
+    %x_32:bool = let %13
+    if %x_32 [t: $B4, f: $B5] {  # if_2
+      $B4: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_2
       }
-      %b5 = block {  # false
+      $B5: {  # false
         store %x_GLF_color, vec4<f32>(1.0f)
         exit_if  # if_2
       }
@@ -45,12 +47,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b6 {
-  %b6 = block {
-    %14:void = call %main_1
-    %15:vec4<f32> = load %x_GLF_color
-    %16:main_out = construct %15
-    ret %16
+%tint_symbol = @fragment func():main_out {
+  $B6: {
+    %16:void = call %main_1
+    %17:vec4<f32> = load %x_GLF_color
+    %18:main_out = construct %17
+    ret %18
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-sin-mul-mat-mat-mul-vec-mat/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-sin-mul-mat-mat-mul-vec-mat/0-opt.spvasm.expected.ir.msl
index 8e17cd9..32e699a 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-sin-mul-mat-mat-mul-vec-mat/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-sin-mul-mat-mat-mul-vec-mat/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,117 +20,123 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_9:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%f1_vf2_ = func(%v1:ptr<function, vec2<f32>, read_write>):i32 -> %b2 {
-  %b2 = block {
+%f1_vf2_ = func(%v1:ptr<function, vec2<f32>, read_write>):i32 {
+  $B2: {
     %x_99:ptr<function, bool, read_write> = var
     %x_100:ptr<function, bool, read_write> = var
     %8:f32 = load_vector_element %v1, 0u
     %9:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
     %10:f32 = load %9
-    %x_92:bool = eq %8, %10
+    %11:bool = eq %8, %10
+    %x_92:bool = let %11
     store %x_100, %x_92
-    if %x_92 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %12:f32 = load_vector_element %v1, 1u
-        %13:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
-        %14:f32 = load %13
-        %15:bool = eq %12, %14
-        store %x_99, %15
-        %16:bool = load %x_99
-        store %x_100, %16
+    if %x_92 [t: $B3] {  # if_1
+      $B3: {  # true
+        %13:f32 = load_vector_element %v1, 1u
+        %14:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
+        %15:f32 = load %14
+        %16:bool = eq %13, %15
+        store %x_99, %16
+        %17:bool = load %x_99
+        store %x_100, %17
         exit_if  # if_1
       }
     }
-    %17:bool = load %x_100
-    if %17 [t: %b4] {  # if_2
-      %b4 = block {  # true
-        %18:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %x_104:i32 = load %18
+    %18:bool = load %x_100
+    if %18 [t: $B4] {  # if_2
+      $B4: {  # true
+        %19:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %20:i32 = load %19
+        %x_104:i32 = let %20
         ret %x_104
       }
     }
-    %20:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-    %x_106:i32 = load %20
+    %22:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+    %23:i32 = load %22
+    %x_106:i32 = let %23
     ret %x_106
   }
 }
-%main_1 = func():void -> %b5 {
-  %b5 = block {
+%main_1 = func():void {
+  $B5: {
     %m1:ptr<function, mat2x2<f32>, read_write> = var
     %m2:ptr<function, mat2x2<f32>, read_write> = var
     %v1_1:ptr<function, vec2<f32>, read_write> = var
     %a:ptr<function, i32, read_write> = var
     %param:ptr<function, vec2<f32>, read_write> = var
-    %28:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-    %29:f32 = load %28
-    %30:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
-    %31:f32 = load %30
-    %32:f32 = negation %31
-    %33:vec2<f32> = construct %29, %32
-    %34:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
-    %35:f32 = load %34
-    %36:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
-    %37:f32 = load %36
-    %38:f32 = sin %37
-    %39:vec2<f32> = construct %35, %38
-    %40:mat2x2<f32> = construct %33, %39
-    store %m1, %40
-    %41:mat2x2<f32> = load %m1
-    %42:mat2x2<f32> = load %m1
-    %43:mat2x2<f32> = mul %41, %42
-    store %m2, %43
-    %44:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-    %45:f32 = load %44
-    %46:vec2<f32> = construct %45
-    %47:mat2x2<f32> = load %m2
-    %48:vec2<f32> = mul %46, %47
-    store %v1_1, %48
-    %49:vec2<f32> = load %v1_1
-    store %param, %49
-    %x_66:i32 = call %f1_vf2_, %param
+    %31:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
+    %32:f32 = load %31
+    %33:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
+    %34:f32 = load %33
+    %35:f32 = negation %34
+    %36:vec2<f32> = construct %32, %35
+    %37:vec2<f32> = let %36
+    %38:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
+    %39:f32 = load %38
+    %40:f32 = let %39
+    %41:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
+    %42:f32 = load %41
+    %43:f32 = sin %42
+    %44:vec2<f32> = construct %40, %43
+    %45:mat2x2<f32> = construct %37, %44
+    store %m1, %45
+    %46:mat2x2<f32> = load %m1
+    %47:mat2x2<f32> = load %m1
+    %48:mat2x2<f32> = mul %46, %47
+    store %m2, %48
+    %49:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
+    %50:f32 = load %49
+    %51:vec2<f32> = construct %50
+    %52:mat2x2<f32> = load %m2
+    %53:vec2<f32> = mul %51, %52
+    store %v1_1, %53
+    %54:vec2<f32> = load %v1_1
+    store %param, %54
+    %55:i32 = call %f1_vf2_, %param
+    %x_66:i32 = let %55
     store %a, %x_66
-    %51:i32 = load %a
-    %52:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-    %53:i32 = load %52
-    %54:bool = eq %51, %53
-    if %54 [t: %b6, f: %b7] {  # if_3
-      %b6 = block {  # true
-        %55:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-        %56:f32 = load %55
-        %57:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
-        %58:f32 = load %57
-        %59:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
-        %60:f32 = load %59
+    %57:i32 = load %a
+    %58:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+    %59:i32 = load %58
+    %60:bool = eq %57, %59
+    if %60 [t: $B6, f: $B7] {  # if_3
+      $B6: {  # true
         %61:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
         %62:f32 = load %61
-        %63:vec4<f32> = construct %56, %58, %60, %62
-        store %x_GLF_color, %63
+        %63:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
+        %64:f32 = load %63
+        %65:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
+        %66:f32 = load %65
+        %67:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
+        %68:f32 = load %67
+        %69:vec4<f32> = construct %62, %64, %66, %68
+        store %x_GLF_color, %69
         exit_if  # if_3
       }
-      %b7 = block {  # false
-        %64:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %65:i32 = load %64
-        %66:f32 = convert %65
-        %67:vec4<f32> = construct %66
-        store %x_GLF_color, %67
+      $B7: {  # false
+        %70:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %71:i32 = load %70
+        %72:f32 = convert %71
+        %73:vec4<f32> = construct %72
+        store %x_GLF_color, %73
         exit_if  # if_3
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b8 {
-  %b8 = block {
-    %69:void = call %main_1
-    %70:vec4<f32> = load %x_GLF_color
-    %71:main_out = construct %70
-    ret %71
+%tint_symbol = @fragment func():main_out {
+  $B8: {
+    %75:void = call %main_1
+    %76:vec4<f32> = load %x_GLF_color
+    %77:main_out = construct %76
+    ret %77
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-sin-mul-mat-mat-mul-vec-mat/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-sin-mul-mat-mat-mul-vec-mat/0-opt.wgsl.expected.ir.msl
index 1afc70c..ff10567 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-sin-mul-mat-mat-mul-vec-mat/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-sin-mul-mat-mat-mul-vec-mat/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,117 +20,144 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_9:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%f1_vf2_ = func(%v1:ptr<function, vec2<f32>, read_write>):i32 -> %b2 {
-  %b2 = block {
+%f1_vf2_ = func(%v1:ptr<function, vec2<f32>, read_write>):i32 {
+  $B2: {
     %x_99:ptr<function, bool, read_write> = var
     %x_100_phi:ptr<function, bool, read_write> = var
-    %x_89:f32 = load_vector_element %v1, 0u
-    %9:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-    %x_91:f32 = load %9
-    %x_92:bool = eq %x_89, %x_91
+    %8:f32 = load_vector_element %v1, 0u
+    %x_89:f32 = let %8
+    %10:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
+    %11:f32 = load %10
+    %x_91:f32 = let %11
+    %13:bool = eq %x_89, %x_91
+    %x_92:bool = let %13
     store %x_100_phi, %x_92
-    if %x_92 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %x_96:f32 = load_vector_element %v1, 1u
-        %13:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
-        %x_98:f32 = load %13
-        %15:bool = eq %x_96, %x_98
-        store %x_99, %15
-        %16:bool = load %x_99
-        store %x_100_phi, %16
+    if %x_92 [t: $B3] {  # if_1
+      $B3: {  # true
+        %15:f32 = load_vector_element %v1, 1u
+        %x_96:f32 = let %15
+        %17:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
+        %18:f32 = load %17
+        %x_98:f32 = let %18
+        %20:bool = eq %x_96, %x_98
+        store %x_99, %20
+        %21:bool = load %x_99
+        store %x_100_phi, %21
         exit_if  # if_1
       }
     }
-    %x_100:bool = load %x_100_phi
-    if %x_100 [t: %b4] {  # if_2
-      %b4 = block {  # true
-        %18:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %x_104:i32 = load %18
+    %22:bool = load %x_100_phi
+    %x_100:bool = let %22
+    if %x_100 [t: $B4] {  # if_2
+      $B4: {  # true
+        %24:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %25:i32 = load %24
+        %x_104:i32 = let %25
         ret %x_104
       }
     }
-    %20:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-    %x_106:i32 = load %20
+    %27:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+    %28:i32 = load %27
+    %x_106:i32 = let %28
     ret %x_106
   }
 }
-%main_1 = func():void -> %b5 {
-  %b5 = block {
+%main_1 = func():void {
+  $B5: {
     %m1:ptr<function, mat2x2<f32>, read_write> = var
     %m2:ptr<function, mat2x2<f32>, read_write> = var
     %v1_1:ptr<function, vec2<f32>, read_write> = var
     %a:ptr<function, i32, read_write> = var
     %param:ptr<function, vec2<f32>, read_write> = var
-    %28:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-    %x_45:f32 = load %28
-    %30:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
-    %x_47:f32 = load %30
-    %32:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
-    %x_50:f32 = load %32
-    %34:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
-    %x_52:f32 = load %34
-    %36:f32 = negation %x_47
-    %37:vec2<f32> = construct %x_45, %36
-    %38:f32 = sin %x_52
-    %39:vec2<f32> = construct %x_50, %38
-    %40:mat2x2<f32> = construct %37, %39
-    store %m1, %40
-    %x_57:mat2x2<f32> = load %m1
-    %x_58:mat2x2<f32> = load %m1
-    %43:mat2x2<f32> = mul %x_57, %x_58
-    store %m2, %43
-    %44:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-    %x_61:f32 = load %44
-    %x_63:mat2x2<f32> = load %m2
-    %47:vec2<f32> = construct %x_61, %x_61
-    %48:vec2<f32> = mul %47, %x_63
-    store %v1_1, %48
-    %x_65:vec2<f32> = load %v1_1
+    %36:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
+    %37:f32 = load %36
+    %x_45:f32 = let %37
+    %39:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
+    %40:f32 = load %39
+    %x_47:f32 = let %40
+    %42:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
+    %43:f32 = load %42
+    %x_50:f32 = let %43
+    %45:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
+    %46:f32 = load %45
+    %x_52:f32 = let %46
+    %48:f32 = negation %x_47
+    %49:vec2<f32> = construct %x_45, %48
+    %50:vec2<f32> = let %49
+    %51:f32 = sin %x_52
+    %52:vec2<f32> = construct %x_50, %51
+    %53:mat2x2<f32> = construct %50, %52
+    store %m1, %53
+    %54:mat2x2<f32> = load %m1
+    %x_57:mat2x2<f32> = let %54
+    %56:mat2x2<f32> = load %m1
+    %x_58:mat2x2<f32> = let %56
+    %58:mat2x2<f32> = mul %x_57, %x_58
+    store %m2, %58
+    %59:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
+    %60:f32 = load %59
+    %x_61:f32 = let %60
+    %62:mat2x2<f32> = load %m2
+    %x_63:mat2x2<f32> = let %62
+    %64:vec2<f32> = construct %x_61, %x_61
+    %65:vec2<f32> = mul %64, %x_63
+    store %v1_1, %65
+    %66:vec2<f32> = load %v1_1
+    %x_65:vec2<f32> = let %66
     store %param, %x_65
-    %x_66:i32 = call %f1_vf2_, %param
+    %68:i32 = call %f1_vf2_, %param
+    %x_66:i32 = let %68
     store %a, %x_66
-    %x_67:i32 = load %a
-    %52:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-    %x_69:i32 = load %52
-    %54:bool = eq %x_67, %x_69
-    if %54 [t: %b6, f: %b7] {  # if_3
-      %b6 = block {  # true
-        %55:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-        %x_75:f32 = load %55
-        %57:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
-        %x_77:f32 = load %57
-        %59:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
-        %x_79:f32 = load %59
-        %61:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-        %x_81:f32 = load %61
-        %63:vec4<f32> = construct %x_75, %x_77, %x_79, %x_81
-        store %x_GLF_color, %63
+    %70:i32 = load %a
+    %x_67:i32 = let %70
+    %72:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+    %73:i32 = load %72
+    %x_69:i32 = let %73
+    %75:bool = eq %x_67, %x_69
+    if %75 [t: $B6, f: $B7] {  # if_3
+      $B6: {  # true
+        %76:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
+        %77:f32 = load %76
+        %x_75:f32 = let %77
+        %79:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
+        %80:f32 = load %79
+        %x_77:f32 = let %80
+        %82:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
+        %83:f32 = load %82
+        %x_79:f32 = let %83
+        %85:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
+        %86:f32 = load %85
+        %x_81:f32 = let %86
+        %88:vec4<f32> = construct %x_75, %x_77, %x_79, %x_81
+        store %x_GLF_color, %88
         exit_if  # if_3
       }
-      %b7 = block {  # false
-        %64:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %x_84:i32 = load %64
-        %x_85:f32 = convert %x_84
-        %67:vec4<f32> = construct %x_85, %x_85, %x_85, %x_85
-        store %x_GLF_color, %67
+      $B7: {  # false
+        %89:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %90:i32 = load %89
+        %x_84:i32 = let %90
+        %92:f32 = convert %x_84
+        %x_85:f32 = let %92
+        %94:vec4<f32> = construct %x_85, %x_85, %x_85, %x_85
+        store %x_GLF_color, %94
         exit_if  # if_3
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b8 {
-  %b8 = block {
-    %69:void = call %main_1
-    %70:vec4<f32> = load %x_GLF_color
-    %71:main_out = construct %70
-    ret %71
+%tint_symbol = @fragment func():main_out {
+  $B8: {
+    %96:void = call %main_1
+    %97:vec4<f32> = load %x_GLF_color
+    %98:main_out = construct %97
+    ret %98
   }
 }
 
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
index b07711a..2db9224 100644
--- 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
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,77 +8,79 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     store %g, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %6:i32 = load %g
-        %7:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-        %8:f32 = load_vector_element %7, 0u
-        %9:f32 = add %8, 2.0f
-        %10:i32 = convert %9
-        %11:bool = lt %6, %10
-        if %11 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %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 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %12:i32 = load %g
-        %13:i32 = add %12, 1i
-        store %g, %13
-        continue %b4
+        %14:i32 = load %g
+        %15:i32 = add %14, 1i
+        store %g, %15
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
-    %14:i32 = load %g
-    store %a, %14
-    loop [b: %b7, c: %b8] {  # loop_2
-      %b7 = block {  # body
-        %15:i32 = load %g
-        %16:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-        %17:f32 = load_vector_element %16, 1u
-        %18:i32 = convert %17
-        %19:bool = lt %15, %18
-        if %19 [t: %b9, f: %b10] {  # if_2
-          %b9 = block {  # true
+    %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 = block {  # false
+          $B10: {  # false
             exit_loop  # loop_2
           }
         }
-        %20:i32 = load %g
-        %21:i32 = add %20, 1i
-        store %g, %21
-        continue %b8
+        %23:i32 = load %g
+        %24:i32 = add %23, 1i
+        store %g, %24
+        continue  # -> $B8
       }
-      %b8 = block {  # continuing
-        next_iteration %b7
+      $B8: {  # continuing
+        next_iteration  # -> $B7
       }
     }
-    %22:i32 = load %a
-    store %a, %22
-    %23:i32 = load %a
-    %24:bool = eq %23, 2i
-    if %24 [t: %b11, f: %b12] {  # if_3
-      %b11 = block {  # true
+    %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 = block {  # false
+      $B12: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_3
       }
@@ -86,12 +88,22 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b13 {
-  %b13 = block {
-    %26:void = call %main_1
-    %27:vec4<f32> = load %x_GLF_color
-    %28:main_out = construct %27
-    ret %28
+%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
   }
 }
 
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
index 214517d..adb5eb0 100644
--- 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
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,77 +8,86 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     store %g, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_8:i32 = load %g
-        %7:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-        %x_46:f32 = load_vector_element %7, 0u
-        %9:f32 = add %x_46, 2.0f
-        %10:i32 = convert %9
-        %11:bool = lt %x_8, %10
-        if %11 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    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 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_9:i32 = load %g
-        %13:i32 = add %x_9, 1i
-        store %g, %13
-        continue %b4
+        %15:i32 = load %g
+        %x_9:i32 = let %15
+        %17:i32 = add %x_9, 1i
+        store %g, %17
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
-    %x_11:i32 = load %g
+    %18:i32 = load %g
+    %x_11:i32 = let %18
     store %a, %x_11
-    loop [b: %b7, c: %b8] {  # loop_2
-      %b7 = block {  # body
-        %x_12:i32 = load %g
-        %16:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-        %x_56:f32 = load_vector_element %16, 1u
-        %18:i32 = convert %x_56
-        %19:bool = lt %x_12, %18
-        if %19 [t: %b9, f: %b10] {  # if_2
-          %b9 = block {  # true
+    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 = block {  # false
+          $B10: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_13:i32 = load %g
-        %21:i32 = add %x_13, 1i
-        store %g, %21
-        continue %b8
+        %27:i32 = load %g
+        %x_13:i32 = let %27
+        %29:i32 = add %x_13, 1i
+        store %g, %29
+        continue  # -> $B8
       }
-      %b8 = block {  # continuing
-        next_iteration %b7
+      $B8: {  # continuing
+        next_iteration  # -> $B7
       }
     }
-    %x_15:i32 = load %a
+    %30:i32 = load %a
+    %x_15:i32 = let %30
     store %a, %x_15
-    %x_16:i32 = load %a
-    %24:bool = eq %x_16, 2i
-    if %24 [t: %b11, f: %b12] {  # if_3
-      %b11 = block {  # true
+    %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 = block {  # false
+      $B12: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_3
       }
@@ -86,12 +95,22 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b13 {
-  %b13 = block {
-    %26:void = call %main_1
-    %27:vec4<f32> = load %x_GLF_color
-    %28:main_out = construct %27
-    ret %28
+%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
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-sinh-ldexp/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-sinh-ldexp/0-opt.spvasm.expected.ir.msl
index b4118e4..9530b20 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-sinh-ldexp/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-sinh-ldexp/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,14 +20,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_9:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %v1:ptr<function, vec2<f32>, read_write> = var
     %v2:ptr<function, vec2<i32>, read_write> = var
     %v3:ptr<function, vec2<f32>, read_write> = var
@@ -54,57 +54,61 @@
     %24:f32 = load_vector_element %v3, 0u
     %25:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
     %26:f32 = load %25
-    %x_59:bool = gt %24, %26
+    %27:bool = gt %24, %26
+    %x_59:bool = let %27
     store %x_67, %x_59
-    if %x_59 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %28:f32 = load_vector_element %v3, 0u
-        %29:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-        %30:f32 = load %29
-        %31:bool = lt %28, %30
-        store %x_66, %31
-        %32:bool = load %x_66
-        store %x_67, %32
+    if %x_59 [t: $B3] {  # if_1
+      $B3: {  # true
+        %29:f32 = load_vector_element %v3, 0u
+        %30:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+        %31:f32 = load %30
+        %32:bool = lt %29, %31
+        store %x_66, %32
+        %33:bool = load %x_66
+        store %x_67, %33
         exit_if  # if_1
       }
     }
-    %33:bool = load %x_67
-    if %33 [t: %b4, f: %b5] {  # if_2
-      %b4 = block {  # true
-        %34:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %35:i32 = load %34
-        %36:f32 = convert %35
-        %37:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %38:i32 = load %37
-        %39:f32 = convert %38
-        %40:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %41:i32 = load %40
-        %42:f32 = convert %41
-        %43:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+    %34:bool = load %x_67
+    if %34 [t: $B4, f: $B5] {  # if_2
+      $B4: {  # true
+        %35:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+        %36:i32 = load %35
+        %37:f32 = convert %36
+        %38:f32 = let %37
+        %39:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %40:i32 = load %39
+        %41:f32 = convert %40
+        %42:f32 = let %41
+        %43:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
         %44:i32 = load %43
         %45:f32 = convert %44
-        %46:vec4<f32> = construct %36, %39, %42, %45
-        store %x_GLF_color, %46
-        exit_if  # if_2
-      }
-      %b5 = block {  # false
-        %47:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %46:f32 = let %45
+        %47:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
         %48:i32 = load %47
         %49:f32 = convert %48
-        %50:vec4<f32> = construct %49
+        %50:vec4<f32> = construct %38, %42, %46, %49
         store %x_GLF_color, %50
         exit_if  # if_2
       }
+      $B5: {  # false
+        %51:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %52:i32 = load %51
+        %53:f32 = convert %52
+        %54:vec4<f32> = construct %53
+        store %x_GLF_color, %54
+        exit_if  # if_2
+      }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b6 {
-  %b6 = block {
-    %52:void = call %main_1
-    %53:vec4<f32> = load %x_GLF_color
-    %54:main_out = construct %53
-    ret %54
+%tint_symbol = @fragment func():main_out {
+  $B6: {
+    %56:void = call %main_1
+    %57:vec4<f32> = load %x_GLF_color
+    %58:main_out = construct %57
+    ret %58
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-sinh-ldexp/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-sinh-ldexp/0-opt.wgsl.expected.ir.msl
index 02b707c..bd4eca4 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-sinh-ldexp/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-sinh-ldexp/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,91 +20,112 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_9:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %v1:ptr<function, vec2<f32>, read_write> = var
     %v2:ptr<function, vec2<i32>, read_write> = var
     %v3:ptr<function, vec2<f32>, read_write> = var
     %x_66:ptr<function, bool, read_write> = var
     %x_67_phi:ptr<function, bool, read_write> = var
     %10:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
-    %x_41:f32 = load %10
-    %12:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
-    %x_43:f32 = load %12
-    %14:vec2<f32> = construct %x_41, %x_43
-    %15:vec2<f32> = sinh %14
-    store %v1, %15
-    %16:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-    %x_47:i32 = load %16
-    %18:vec2<i32> = construct %x_47, -3000i
-    store %v2, %18
-    %x_49:vec2<f32> = load %v1
-    %x_50:vec2<i32> = load %v2
-    %21:vec2<f32> = ldexp %x_49, %x_50
-    store %v3, %21
-    %x_53:f32 = load_vector_element %v3, 1u
-    %23:vec4<f32> = construct %x_53, %x_53, %x_53, %x_53
-    store %x_GLF_color, %23
-    %x_56:f32 = load_vector_element %v3, 0u
-    %25:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_58:f32 = load %25
-    %x_59:bool = gt %x_56, %x_58
+    %11:f32 = load %10
+    %x_41:f32 = let %11
+    %13:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
+    %14:f32 = load %13
+    %x_43:f32 = let %14
+    %16:vec2<f32> = construct %x_41, %x_43
+    %17:vec2<f32> = sinh %16
+    store %v1, %17
+    %18:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+    %19:i32 = load %18
+    %x_47:i32 = let %19
+    %21:vec2<i32> = construct %x_47, -3000i
+    store %v2, %21
+    %22:vec2<f32> = load %v1
+    %x_49:vec2<f32> = let %22
+    %24:vec2<i32> = load %v2
+    %x_50:vec2<i32> = let %24
+    %26:vec2<f32> = ldexp %x_49, %x_50
+    store %v3, %26
+    %27:f32 = load_vector_element %v3, 1u
+    %x_53:f32 = let %27
+    %29:vec4<f32> = construct %x_53, %x_53, %x_53, %x_53
+    store %x_GLF_color, %29
+    %30:f32 = load_vector_element %v3, 0u
+    %x_56:f32 = let %30
+    %32:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %33:f32 = load %32
+    %x_58:f32 = let %33
+    %35:bool = gt %x_56, %x_58
+    %x_59:bool = let %35
     store %x_67_phi, %x_59
-    if %x_59 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %x_63:f32 = load_vector_element %v3, 0u
-        %29:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-        %x_65:f32 = load %29
-        %31:bool = lt %x_63, %x_65
-        store %x_66, %31
-        %32:bool = load %x_66
-        store %x_67_phi, %32
+    if %x_59 [t: $B3] {  # if_1
+      $B3: {  # true
+        %37:f32 = load_vector_element %v3, 0u
+        %x_63:f32 = let %37
+        %39:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+        %40:f32 = load %39
+        %x_65:f32 = let %40
+        %42:bool = lt %x_63, %x_65
+        store %x_66, %42
+        %43:bool = load %x_66
+        store %x_67_phi, %43
         exit_if  # if_1
       }
     }
-    %x_67:bool = load %x_67_phi
-    if %x_67 [t: %b4, f: %b5] {  # if_2
-      %b4 = block {  # true
-        %34:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %x_72:i32 = load %34
-        %36:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %x_75:i32 = load %36
-        %38:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %x_78:i32 = load %38
-        %40:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %x_81:i32 = load %40
-        %42:f32 = convert %x_72
-        %43:f32 = convert %x_75
-        %44:f32 = convert %x_78
-        %45:f32 = convert %x_81
-        %46:vec4<f32> = construct %42, %43, %44, %45
-        store %x_GLF_color, %46
+    %44:bool = load %x_67_phi
+    %x_67:bool = let %44
+    if %x_67 [t: $B4, f: $B5] {  # if_2
+      $B4: {  # true
+        %46:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+        %47:i32 = load %46
+        %x_72:i32 = let %47
+        %49:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %50:i32 = load %49
+        %x_75:i32 = let %50
+        %52:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %53:i32 = load %52
+        %x_78:i32 = let %53
+        %55:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+        %56:i32 = load %55
+        %x_81:i32 = let %56
+        %58:f32 = convert %x_72
+        %59:f32 = let %58
+        %60:f32 = convert %x_75
+        %61:f32 = let %60
+        %62:f32 = convert %x_78
+        %63:f32 = let %62
+        %64:f32 = convert %x_81
+        %65:vec4<f32> = construct %59, %61, %63, %64
+        store %x_GLF_color, %65
         exit_if  # if_2
       }
-      %b5 = block {  # false
-        %47:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %x_85:i32 = load %47
-        %x_86:f32 = convert %x_85
-        %50:vec4<f32> = construct %x_86, %x_86, %x_86, %x_86
-        store %x_GLF_color, %50
+      $B5: {  # false
+        %66:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %67:i32 = load %66
+        %x_85:i32 = let %67
+        %69:f32 = convert %x_85
+        %x_86:f32 = let %69
+        %71:vec4<f32> = construct %x_86, %x_86, %x_86, %x_86
+        store %x_GLF_color, %71
         exit_if  # if_2
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b6 {
-  %b6 = block {
-    %52:void = call %main_1
-    %53:vec4<f32> = load %x_GLF_color
-    %54:main_out = construct %53
-    ret %54
+%tint_symbol = @fragment func():main_out {
+  $B6: {
+    %73:void = call %main_1
+    %74:vec4<f32> = load %x_GLF_color
+    %75:main_out = construct %74
+    ret %75
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-step-sinh/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-step-sinh/0-opt.spvasm.expected.ir.msl
index efdd3b1..0e1c264 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-step-sinh/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-step-sinh/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,41 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+}
+
+%main_1 = func():void {
+  $B2: {
+    %v1:ptr<function, vec2<f32>, read_write> = var
+    %v2:ptr<function, vec2<f32>, read_write> = var
+    store %v1, vec2<f32>(1.0f, -1.0f)
+    %5:vec2<f32> = load %v1
+    %6:vec2<f32> = sinh %5
+    %7:vec2<f32> = step vec2<f32>(0.40000000596046447754f), %6
+    store %v2, %7
+    %8:f32 = load_vector_element %v2, 0u
+    %9:f32 = load_vector_element %v2, 1u
+    %10:f32 = load_vector_element %v2, 1u
+    %11:f32 = load_vector_element %v2, 0u
+    %12:vec4<f32> = construct %8, %9, %10, %11
+    store %x_GLF_color, %12
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B3: {
+    %14:void = call %main_1
+    %15:vec4<f32> = load %x_GLF_color
+    %16:main_out = construct %15
+    ret %16
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-step-sinh/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-step-sinh/0-opt.wgsl.expected.ir.msl
index efdd3b1..a85a062 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-step-sinh/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-step-sinh/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,46 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+}
+
+%main_1 = func():void {
+  $B2: {
+    %v1:ptr<function, vec2<f32>, read_write> = var
+    %v2:ptr<function, vec2<f32>, read_write> = var
+    store %v1, vec2<f32>(1.0f, -1.0f)
+    %5:vec2<f32> = load %v1
+    %x_22:vec2<f32> = let %5
+    %7:vec2<f32> = sinh %x_22
+    %8:vec2<f32> = step vec2<f32>(0.40000000596046447754f), %7
+    store %v2, %8
+    %9:f32 = load_vector_element %v2, 0u
+    %x_27:f32 = let %9
+    %11:f32 = load_vector_element %v2, 1u
+    %x_29:f32 = let %11
+    %13:f32 = load_vector_element %v2, 1u
+    %x_31:f32 = let %13
+    %15:f32 = load_vector_element %v2, 0u
+    %x_33:f32 = let %15
+    %17:vec4<f32> = construct %x_27, %x_29, %x_31, %x_33
+    store %x_GLF_color, %17
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B3: {
+    %19:void = call %main_1
+    %20:vec4<f32> = load %x_GLF_color
+    %21:main_out = construct %20
+    ret %21
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-struct-float-array-mix-uniform-vectors/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-struct-float-array-mix-uniform-vectors/0-opt.spvasm.expected.ir.msl
index 629717a..4d5c300 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-struct-float-array-mix-uniform-vectors/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-struct-float-array-mix-uniform-vectors/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -32,7 +32,7 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_7:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_9:ptr<uniform, buf2, read> = var @binding_point(0, 2)
   %x_12:ptr<uniform, buf3, read> = var @binding_point(0, 3)
@@ -40,8 +40,8 @@
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %obj:ptr<function, S, read_write> = var
     %a:ptr<function, f32, read_write> = var
     %x_49:ptr<function, vec2<f32>, read_write> = var
@@ -56,85 +56,99 @@
     %18:S = construct %17
     store %obj, %18
     %19:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
-    %x_59:f32 = load_vector_element %19, 0u
-    %21:i32 = convert %x_59
-    %22:ptr<function, f32, read_write> = access %obj, 0u, %21
-    %23:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-    %24:f32 = load %23
-    store %22, %24
-    %25:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
-    %26:f32 = load_vector_element %25, 0u
-    %27:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-    %28:f32 = load %27
-    %29:bool = gt %26, %28
-    if %29 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %30:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
-        %31:vec2<f32> = load %30
-        store %x_49, %31
-        exit_if  # if_1
-      }
-      %b4 = block {  # false
-        %32:ptr<uniform, vec2<f32>, read> = access %x_12, 0u
+    %20:f32 = load_vector_element %19, 0u
+    %x_59:f32 = let %20
+    %22:i32 = call %tint_f32_to_i32, %x_59
+    %24:ptr<function, f32, read_write> = access %obj, 0u, %22
+    %25:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
+    %26:f32 = load %25
+    store %24, %26
+    %27:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
+    %28:f32 = load_vector_element %27, 0u
+    %29:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
+    %30:f32 = load %29
+    %31:bool = gt %28, %30
+    if %31 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %32:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
         %33:vec2<f32> = load %32
         store %x_49, %33
         exit_if  # if_1
       }
+      $B4: {  # false
+        %34:ptr<uniform, vec2<f32>, read> = access %x_12, 0u
+        %35:vec2<f32> = load %34
+        store %x_49, %35
+        exit_if  # if_1
+      }
     }
-    %34:f32 = load_vector_element %x_49, 1u
-    store %a, %34
-    %35:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-    %36:f32 = load %35
-    %37:f32 = load %a
-    %38:ptr<uniform, i32, read> = access %x_15, 0u, 0i, 0u
-    %39:i32 = load %38
-    %40:ptr<function, f32, read_write> = access %obj, 0u, %39
-    %41:f32 = load %40
-    %42:f32 = mix %36, %37, %41
-    store %b, %42
-    %43:f32 = load %b
-    %44:ptr<uniform, f32, read> = access %x_7, 0u, 2i, 0u
-    %45:f32 = load %44
-    %46:f32 = distance %43, %45
-    %47:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
-    %48:f32 = load %47
-    %49:bool = lt %46, %48
-    if %49 [t: %b5, f: %b6] {  # if_2
-      %b5 = block {  # true
-        %50:ptr<uniform, i32, read> = access %x_15, 0u, 0i, 0u
-        %51:i32 = load %50
-        %52:f32 = convert %51
-        %53:ptr<uniform, i32, read> = access %x_15, 0u, 1i, 0u
-        %54:i32 = load %53
-        %55:f32 = convert %54
+    %36:f32 = load_vector_element %x_49, 1u
+    store %a, %36
+    %37:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
+    %38:f32 = load %37
+    %39:f32 = load %a
+    %40:ptr<uniform, i32, read> = access %x_15, 0u, 0i, 0u
+    %41:i32 = load %40
+    %42:ptr<function, f32, read_write> = access %obj, 0u, %41
+    %43:f32 = load %42
+    %44:f32 = mix %38, %39, %43
+    store %b, %44
+    %45:f32 = load %b
+    %46:ptr<uniform, f32, read> = access %x_7, 0u, 2i, 0u
+    %47:f32 = load %46
+    %48:f32 = distance %45, %47
+    %49:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
+    %50:f32 = load %49
+    %51:bool = lt %48, %50
+    if %51 [t: $B5, f: $B6] {  # if_2
+      $B5: {  # true
+        %52:ptr<uniform, i32, read> = access %x_15, 0u, 0i, 0u
+        %53:i32 = load %52
+        %54:f32 = convert %53
+        %55:f32 = let %54
         %56:ptr<uniform, i32, read> = access %x_15, 0u, 1i, 0u
         %57:i32 = load %56
         %58:f32 = convert %57
-        %59:ptr<uniform, i32, read> = access %x_15, 0u, 0i, 0u
-        %60:i32 = load %59
-        %61:f32 = convert %60
-        %62:vec4<f32> = construct %52, %55, %58, %61
-        store %x_GLF_color, %62
+        %59:f32 = let %58
+        %60:ptr<uniform, i32, read> = access %x_15, 0u, 1i, 0u
+        %61:i32 = load %60
+        %62:f32 = convert %61
+        %63:f32 = let %62
+        %64:ptr<uniform, i32, read> = access %x_15, 0u, 0i, 0u
+        %65:i32 = load %64
+        %66:f32 = convert %65
+        %67:vec4<f32> = construct %55, %59, %63, %66
+        store %x_GLF_color, %67
         exit_if  # if_2
       }
-      %b6 = block {  # false
-        %63:ptr<uniform, i32, read> = access %x_15, 0u, 1i, 0u
-        %64:i32 = load %63
-        %65:f32 = convert %64
-        %66:vec4<f32> = construct %65
-        store %x_GLF_color, %66
+      $B6: {  # false
+        %68:ptr<uniform, i32, read> = access %x_15, 0u, 1i, 0u
+        %69:i32 = load %68
+        %70:f32 = convert %69
+        %71:vec4<f32> = construct %70
+        store %x_GLF_color, %71
         exit_if  # if_2
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b7 {
-  %b7 = block {
-    %68:void = call %main_1
-    %69:vec4<f32> = load %x_GLF_color
-    %70:main_out = construct %69
-    ret %70
+%tint_symbol = @fragment func():main_out {
+  $B7: {
+    %73:void = call %main_1
+    %74:vec4<f32> = load %x_GLF_color
+    %75:main_out = construct %74
+    ret %75
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B8: {
+    %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
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-struct-float-array-mix-uniform-vectors/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-struct-float-array-mix-uniform-vectors/0-opt.wgsl.expected.ir.msl
index f7c22bb..4c0c448 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-struct-float-array-mix-uniform-vectors/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-struct-float-array-mix-uniform-vectors/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -32,7 +32,7 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_7:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_9:ptr<uniform, buf2, read> = var @binding_point(0, 2)
   %x_12:ptr<uniform, buf3, read> = var @binding_point(0, 3)
@@ -40,101 +40,137 @@
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %obj:ptr<function, S, read_write> = var
     %a:ptr<function, f32, read_write> = var
     %x_49:ptr<function, vec2<f32>, read_write> = var
     %b:ptr<function, f32, read_write> = var
     %11:ptr<uniform, f32, read> = access %x_7, 0u, 3i, 0u
-    %x_51:f32 = load %11
-    %13:ptr<uniform, f32, read> = access %x_7, 0u, 2i, 0u
-    %x_53:f32 = load %13
-    %15:ptr<uniform, f32, read> = access %x_7, 0u, 4i, 0u
-    %x_55:f32 = load %15
-    %17:array<f32, 3> = construct %x_51, %x_53, %x_55
-    %18:S = construct %17
-    store %obj, %18
-    %19:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
-    %x_59:f32 = load_vector_element %19, 0u
-    %21:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-    %x_62:f32 = load %21
-    %23:i32 = convert %x_59
-    %24:ptr<function, f32, read_write> = access %obj, 0u, %23
-    store %24, %x_62
-    %25:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
-    %x_65:f32 = load_vector_element %25, 0u
-    %27:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-    %x_67:f32 = load %27
-    %29:bool = gt %x_65, %x_67
-    if %29 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %30:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
-        %x_73:vec2<f32> = load %30
+    %12:f32 = load %11
+    %x_51:f32 = let %12
+    %14:ptr<uniform, f32, read> = access %x_7, 0u, 2i, 0u
+    %15:f32 = load %14
+    %x_53:f32 = let %15
+    %17:ptr<uniform, f32, read> = access %x_7, 0u, 4i, 0u
+    %18:f32 = load %17
+    %x_55:f32 = let %18
+    %20:array<f32, 3> = construct %x_51, %x_53, %x_55
+    %21:S = construct %20
+    store %obj, %21
+    %22:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
+    %23:f32 = load_vector_element %22, 0u
+    %x_59:f32 = let %23
+    %25:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
+    %26:f32 = load %25
+    %x_62:f32 = let %26
+    %28:i32 = call %tint_f32_to_i32, %x_59
+    %30:ptr<function, f32, read_write> = access %obj, 0u, %28
+    store %30, %x_62
+    %31:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
+    %32:f32 = load_vector_element %31, 0u
+    %x_65:f32 = let %32
+    %34:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
+    %35:f32 = load %34
+    %x_67:f32 = let %35
+    %37:bool = gt %x_65, %x_67
+    if %37 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %38:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
+        %39:vec2<f32> = load %38
+        %x_73:vec2<f32> = let %39
         store %x_49, %x_73
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %32:ptr<uniform, vec2<f32>, read> = access %x_12, 0u
-        %x_75:vec2<f32> = load %32
+      $B4: {  # false
+        %41:ptr<uniform, vec2<f32>, read> = access %x_12, 0u
+        %42:vec2<f32> = load %41
+        %x_75:vec2<f32> = let %42
         store %x_49, %x_75
         exit_if  # if_1
       }
     }
-    %x_77:f32 = load_vector_element %x_49, 1u
+    %44:f32 = load_vector_element %x_49, 1u
+    %x_77:f32 = let %44
     store %a, %x_77
-    %35:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-    %x_79:f32 = load %35
-    %x_80:f32 = load %a
-    %38:ptr<uniform, i32, read> = access %x_15, 0u, 0i, 0u
-    %x_82:i32 = load %38
-    %40:ptr<function, f32, read_write> = access %obj, 0u, %x_82
-    %x_84:f32 = load %40
-    %42:f32 = mix %x_79, %x_80, %x_84
-    store %b, %42
-    %x_86:f32 = load %b
-    %44:ptr<uniform, f32, read> = access %x_7, 0u, 2i, 0u
-    %x_88:f32 = load %44
-    %46:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
-    %x_91:f32 = load %46
-    %48:f32 = distance %x_86, %x_88
-    %49:bool = lt %48, %x_91
-    if %49 [t: %b5, f: %b6] {  # if_2
-      %b5 = block {  # true
-        %50:ptr<uniform, i32, read> = access %x_15, 0u, 0i, 0u
-        %x_97:i32 = load %50
-        %52:ptr<uniform, i32, read> = access %x_15, 0u, 1i, 0u
-        %x_100:i32 = load %52
-        %54:ptr<uniform, i32, read> = access %x_15, 0u, 1i, 0u
-        %x_103:i32 = load %54
-        %56:ptr<uniform, i32, read> = access %x_15, 0u, 0i, 0u
-        %x_106:i32 = load %56
-        %58:f32 = convert %x_97
-        %59:f32 = convert %x_100
-        %60:f32 = convert %x_103
-        %61:f32 = convert %x_106
-        %62:vec4<f32> = construct %58, %59, %60, %61
-        store %x_GLF_color, %62
+    %46:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
+    %47:f32 = load %46
+    %x_79:f32 = let %47
+    %49:f32 = load %a
+    %x_80:f32 = let %49
+    %51:ptr<uniform, i32, read> = access %x_15, 0u, 0i, 0u
+    %52:i32 = load %51
+    %x_82:i32 = let %52
+    %54:ptr<function, f32, read_write> = access %obj, 0u, %x_82
+    %55:f32 = load %54
+    %x_84:f32 = let %55
+    %57:f32 = mix %x_79, %x_80, %x_84
+    store %b, %57
+    %58:f32 = load %b
+    %x_86:f32 = let %58
+    %60:ptr<uniform, f32, read> = access %x_7, 0u, 2i, 0u
+    %61:f32 = load %60
+    %x_88:f32 = let %61
+    %63:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
+    %64:f32 = load %63
+    %x_91:f32 = let %64
+    %66:f32 = distance %x_86, %x_88
+    %67:bool = lt %66, %x_91
+    if %67 [t: $B5, f: $B6] {  # if_2
+      $B5: {  # true
+        %68:ptr<uniform, i32, read> = access %x_15, 0u, 0i, 0u
+        %69:i32 = load %68
+        %x_97:i32 = let %69
+        %71:ptr<uniform, i32, read> = access %x_15, 0u, 1i, 0u
+        %72:i32 = load %71
+        %x_100:i32 = let %72
+        %74:ptr<uniform, i32, read> = access %x_15, 0u, 1i, 0u
+        %75:i32 = load %74
+        %x_103:i32 = let %75
+        %77:ptr<uniform, i32, read> = access %x_15, 0u, 0i, 0u
+        %78:i32 = load %77
+        %x_106:i32 = let %78
+        %80:f32 = convert %x_97
+        %81:f32 = let %80
+        %82:f32 = convert %x_100
+        %83:f32 = let %82
+        %84:f32 = convert %x_103
+        %85:f32 = let %84
+        %86:f32 = convert %x_106
+        %87:vec4<f32> = construct %81, %83, %85, %86
+        store %x_GLF_color, %87
         exit_if  # if_2
       }
-      %b6 = block {  # false
-        %63:ptr<uniform, i32, read> = access %x_15, 0u, 1i, 0u
-        %x_110:i32 = load %63
-        %x_111:f32 = convert %x_110
-        %66:vec4<f32> = construct %x_111, %x_111, %x_111, %x_111
-        store %x_GLF_color, %66
+      $B6: {  # false
+        %88:ptr<uniform, i32, read> = access %x_15, 0u, 1i, 0u
+        %89:i32 = load %88
+        %x_110:i32 = let %89
+        %91:f32 = convert %x_110
+        %x_111:f32 = let %91
+        %93:vec4<f32> = construct %x_111, %x_111, %x_111, %x_111
+        store %x_GLF_color, %93
         exit_if  # if_2
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b7 {
-  %b7 = block {
-    %68:void = call %main_1
-    %69:vec4<f32> = load %x_GLF_color
-    %70:main_out = construct %69
-    ret %70
+%tint_symbol = @fragment func():main_out {
+  $B7: {
+    %95:void = call %main_1
+    %96:vec4<f32> = load %x_GLF_color
+    %97:main_out = construct %96
+    ret %97
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B8: {
+    %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
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-sum-uniform-vector-components-round/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-sum-uniform-vector-components-round/0-opt.spvasm.expected.ir.msl
index 7731469..8b50e85 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-sum-uniform-vector-components-round/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-sum-uniform-vector-components-round/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -24,72 +24,77 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_8:ptr<uniform, buf2, read> = var @binding_point(0, 2)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_10:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %f:ptr<function, f32, read_write> = var
     %7:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
     %8:f32 = load %7
     %9:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
     %10:f32 = load_vector_element %9, 0u
     %11:f32 = mul %8, %10
-    %12:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
-    %13:f32 = load %12
-    %14:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
-    %15:f32 = load_vector_element %14, 0u
-    %16:f32 = round %15
-    %17:f32 = mul %13, %16
-    %18:f32 = add %11, %17
-    %19:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
-    %20:f32 = load_vector_element %19, 1u
-    %21:f32 = add %18, %20
-    store %f, %21
-    %22:f32 = load %f
-    %23:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %24:f32 = load %23
-    %25:bool = eq %22, %24
-    if %25 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %26:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %27:i32 = load %26
-        %28:f32 = convert %27
-        %29:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %30:i32 = load %29
-        %31:f32 = convert %30
+    %12:f32 = let %11
+    %13:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
+    %14:f32 = load %13
+    %15:f32 = let %14
+    %16:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
+    %17:f32 = load_vector_element %16, 0u
+    %18:f32 = round %17
+    %19:f32 = mul %15, %18
+    %20:f32 = add %12, %19
+    %21:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
+    %22:f32 = load_vector_element %21, 1u
+    %23:f32 = add %20, %22
+    store %f, %23
+    %24:f32 = load %f
+    %25:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %26:f32 = load %25
+    %27:bool = eq %24, %26
+    if %27 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %28:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %29:i32 = load %28
+        %30:f32 = convert %29
+        %31:f32 = let %30
         %32:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
         %33:i32 = load %32
         %34:f32 = convert %33
-        %35:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %36:i32 = load %35
-        %37:f32 = convert %36
-        %38:vec4<f32> = construct %28, %31, %34, %37
-        store %x_GLF_color, %38
+        %35:f32 = let %34
+        %36:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %37:i32 = load %36
+        %38:f32 = convert %37
+        %39:f32 = let %38
+        %40:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %41:i32 = load %40
+        %42:f32 = convert %41
+        %43:vec4<f32> = construct %31, %35, %39, %42
+        store %x_GLF_color, %43
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %39:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %40:i32 = load %39
-        %41:f32 = convert %40
-        %42:vec4<f32> = construct %41
-        store %x_GLF_color, %42
+      $B4: {  # false
+        %44:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %45:i32 = load %44
+        %46:f32 = convert %45
+        %47:vec4<f32> = construct %46
+        store %x_GLF_color, %47
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %44:void = call %main_1
-    %45:vec4<f32> = load %x_GLF_color
-    %46:main_out = construct %45
-    ret %46
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %49:void = call %main_1
+    %50:vec4<f32> = load %x_GLF_color
+    %51:main_out = construct %50
+    ret %51
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-sum-uniform-vector-components-round/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-sum-uniform-vector-components-round/0-opt.wgsl.expected.ir.msl
index b69871a..b27d6c2 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-sum-uniform-vector-components-round/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-sum-uniform-vector-components-round/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -24,72 +24,88 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_8:ptr<uniform, buf2, read> = var @binding_point(0, 2)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_10:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %f:ptr<function, f32, read_write> = var
     %7:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-    %x_37:f32 = load %7
-    %9:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
-    %x_39:f32 = load_vector_element %9, 0u
-    %11:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
-    %x_42:f32 = load %11
-    %13:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
-    %x_44:f32 = load_vector_element %13, 0u
-    %15:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
-    %x_49:f32 = load_vector_element %15, 1u
-    %17:f32 = mul %x_37, %x_39
-    %18:f32 = round %x_44
-    %19:f32 = mul %x_42, %18
-    %20:f32 = add %17, %19
-    %21:f32 = add %20, %x_49
-    store %f, %21
-    %x_51:f32 = load %f
-    %23:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_53:f32 = load %23
-    %25:bool = eq %x_51, %x_53
-    if %25 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %26:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %x_59:i32 = load %26
-        %28:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %x_62:i32 = load %28
-        %30:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %x_65:i32 = load %30
-        %32:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %x_68:i32 = load %32
-        %34:f32 = convert %x_59
-        %35:f32 = convert %x_62
-        %36:f32 = convert %x_65
-        %37:f32 = convert %x_68
-        %38:vec4<f32> = construct %34, %35, %36, %37
-        store %x_GLF_color, %38
+    %8:f32 = load %7
+    %x_37:f32 = let %8
+    %10:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
+    %11:f32 = load_vector_element %10, 0u
+    %x_39:f32 = let %11
+    %13:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
+    %14:f32 = load %13
+    %x_42:f32 = let %14
+    %16:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
+    %17:f32 = load_vector_element %16, 0u
+    %x_44:f32 = let %17
+    %19:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
+    %20:f32 = load_vector_element %19, 1u
+    %x_49:f32 = let %20
+    %22:f32 = mul %x_37, %x_39
+    %23:f32 = round %x_44
+    %24:f32 = mul %x_42, %23
+    %25:f32 = add %22, %24
+    %26:f32 = add %25, %x_49
+    store %f, %26
+    %27:f32 = load %f
+    %x_51:f32 = let %27
+    %29:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %30:f32 = load %29
+    %x_53:f32 = let %30
+    %32:bool = eq %x_51, %x_53
+    if %32 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %33:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %34:i32 = load %33
+        %x_59:i32 = let %34
+        %36:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %37:i32 = load %36
+        %x_62:i32 = let %37
+        %39:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %40:i32 = load %39
+        %x_65:i32 = let %40
+        %42:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %43:i32 = load %42
+        %x_68:i32 = let %43
+        %45:f32 = convert %x_59
+        %46:f32 = let %45
+        %47:f32 = convert %x_62
+        %48:f32 = let %47
+        %49:f32 = convert %x_65
+        %50:f32 = let %49
+        %51:f32 = convert %x_68
+        %52:vec4<f32> = construct %46, %48, %50, %51
+        store %x_GLF_color, %52
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %39:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %x_72:i32 = load %39
-        %x_73:f32 = convert %x_72
-        %42:vec4<f32> = construct %x_73, %x_73, %x_73, %x_73
-        store %x_GLF_color, %42
+      $B4: {  # false
+        %53:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %54:i32 = load %53
+        %x_72:i32 = let %54
+        %56:f32 = convert %x_72
+        %x_73:f32 = let %56
+        %58:vec4<f32> = construct %x_73, %x_73, %x_73, %x_73
+        store %x_GLF_color, %58
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %44:void = call %main_1
-    %45:vec4<f32> = load %x_GLF_color
-    %46:main_out = construct %45
-    ret %46
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %60:void = call %main_1
+    %61:vec4<f32> = load %x_GLF_color
+    %62:main_out = construct %61
+    ret %62
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-for-for-for/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-for-for-for/0-opt.spvasm.expected.ir.msl
index abede91..054b743 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-for-for-for/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-for-for-for/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,14 +20,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_11:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %color:ptr<function, vec4<f32>, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %j:ptr<function, i32, read_write> = var
@@ -36,114 +36,118 @@
     %9:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
     %10:i32 = load %9
     store %i, %10
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %11:i32 = load %i
         %12:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
         %13:i32 = load %12
         %14:bool = lt %11, %13
-        if %14 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %14 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_47:i32 = load %i
-        switch %x_47 [c: (2i, %b7), c: (1i, %b8), c: (default, %b9)] {  # switch_1
-          %b7 = block {  # case
-            %x_83:i32 = load %i
-            %17:ptr<uniform, f32, read> = access %x_11, 0u, 0i, 0u
-            %18:f32 = load %17
-            store_vector_element %color, %x_83, %18
+        %15:i32 = load %i
+        %x_47:i32 = let %15
+        switch %x_47 [c: (2i, $B7), c: (1i, $B8), c: (default, $B9)] {  # switch_1
+          $B7: {  # case
+            %17:i32 = load %i
+            %x_83:i32 = let %17
+            %19:ptr<uniform, f32, read> = access %x_11, 0u, 0i, 0u
+            %20:f32 = load %19
+            store_vector_element %color, %x_83, %20
             exit_switch  # switch_1
           }
-          %b8 = block {  # case
-            %19:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-            %20:i32 = load %19
-            store %j, %20
-            loop [b: %b10, c: %b11] {  # loop_2
-              %b10 = block {  # body
-                %21:i32 = load %i
-                %22:i32 = load %i
-                %23:bool = gt %21, %22
-                if %23 [t: %b12, f: %b13] {  # if_2
-                  %b12 = block {  # true
+          $B8: {  # case
+            %21:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+            %22:i32 = load %21
+            store %j, %22
+            loop [b: $B10, c: $B11] {  # loop_2
+              $B10: {  # body
+                %23:i32 = load %i
+                %24:i32 = load %i
+                %25:bool = gt %23, %24
+                if %25 [t: $B12, f: $B13] {  # if_2
+                  $B12: {  # true
                     exit_if  # if_2
                   }
-                  %b13 = block {  # false
+                  $B13: {  # false
                     exit_loop  # loop_2
                   }
                 }
-                %24:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-                %25:i32 = load %24
-                store %k, %25
-                loop [b: %b14, c: %b15] {  # loop_3
-                  %b14 = block {  # body
-                    %26:i32 = load %k
-                    %27:i32 = load %i
-                    %28:bool = lt %26, %27
-                    if %28 [t: %b16, f: %b17] {  # if_3
-                      %b16 = block {  # true
+                %26:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+                %27:i32 = load %26
+                store %k, %27
+                loop [b: $B14, c: $B15] {  # loop_3
+                  $B14: {  # body
+                    %28:i32 = load %k
+                    %29:i32 = load %i
+                    %30:bool = lt %28, %29
+                    if %30 [t: $B16, f: $B17] {  # if_3
+                      $B16: {  # true
                         exit_if  # if_3
                       }
-                      %b17 = block {  # false
+                      $B17: {  # false
                         exit_loop  # loop_3
                       }
                     }
-                    %x_71:i32 = load %k
-                    %30:ptr<uniform, f32, read> = access %x_11, 0u, 0i, 0u
-                    %31:f32 = load %30
-                    store_vector_element %color, %x_71, %31
-                    continue %b15
+                    %31:i32 = load %k
+                    %x_71:i32 = let %31
+                    %33:ptr<uniform, f32, read> = access %x_11, 0u, 0i, 0u
+                    %34:f32 = load %33
+                    store_vector_element %color, %x_71, %34
+                    continue  # -> $B15
                   }
-                  %b15 = block {  # continuing
-                    %32:i32 = load %k
-                    %33:i32 = add %32, 1i
-                    store %k, %33
-                    next_iteration %b14
+                  $B15: {  # continuing
+                    %35:i32 = load %k
+                    %36:i32 = add %35, 1i
+                    store %k, %36
+                    next_iteration  # -> $B14
                   }
                 }
-                continue %b11
+                continue  # -> $B11
               }
-              %b11 = block {  # continuing
-                %34:i32 = load %j
-                %35:i32 = add %34, 1i
-                store %j, %35
-                next_iteration %b10
+              $B11: {  # continuing
+                %37:i32 = load %j
+                %38:i32 = add %37, 1i
+                store %j, %38
+                next_iteration  # -> $B10
               }
             }
-            %x_79:i32 = load %i
-            %37:ptr<uniform, f32, read> = access %x_11, 0u, 0i, 0u
-            %38:f32 = load %37
-            store_vector_element %color, %x_79, %38
+            %39:i32 = load %i
+            %x_79:i32 = let %39
+            %41:ptr<uniform, f32, read> = access %x_11, 0u, 0i, 0u
+            %42:f32 = load %41
+            store_vector_element %color, %x_79, %42
             exit_switch  # switch_1
           }
-          %b9 = block {  # case
+          $B9: {  # case
             exit_switch  # switch_1
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %39:i32 = load %i
-        %40:i32 = add %39, 1i
-        store %i, %40
-        next_iteration %b3
+      $B4: {  # continuing
+        %43:i32 = load %i
+        %44:i32 = add %43, 1i
+        store %i, %44
+        next_iteration  # -> $B3
       }
     }
-    %41:vec4<f32> = load %color
-    store %x_GLF_color, %41
+    %45:vec4<f32> = load %color
+    store %x_GLF_color, %45
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b18 {
-  %b18 = block {
-    %43:void = call %main_1
-    %44:vec4<f32> = load %x_GLF_color
-    %45:main_out = construct %44
-    ret %45
+%tint_symbol = @fragment func():main_out {
+  $B18: {
+    %47:void = call %main_1
+    %48:vec4<f32> = load %x_GLF_color
+    %49:main_out = construct %48
+    ret %49
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-for-for-for/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-for-for-for/0-opt.wgsl.expected.ir.msl
index 600b293..de87308 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-for-for-for/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-for-for-for/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,130 +20,150 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_11:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %color:ptr<function, vec4<f32>, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %j:ptr<function, i32, read_write> = var
     %k:ptr<function, i32, read_write> = var
     store %color, vec4<f32>(1.0f)
     %9:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-    %x_37:i32 = load %9
+    %10:i32 = load %9
+    %x_37:i32 = let %10
     store %i, %x_37
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_42:i32 = load %i
-        %12:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %x_44:i32 = load %12
-        %14:bool = lt %x_42, %x_44
-        if %14 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %12:i32 = load %i
+        %x_42:i32 = let %12
+        %14:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %15:i32 = load %14
+        %x_44:i32 = let %15
+        %17:bool = lt %x_42, %x_44
+        if %17 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_47:i32 = load %i
-        switch %x_47 [c: (2i, %b7), c: (1i, %b8), c: (default, %b9)] {  # switch_1
-          %b7 = block {  # case
-            %x_83:i32 = load %i
-            %17:ptr<uniform, f32, read> = access %x_11, 0u, 0i, 0u
-            %x_85:f32 = load %17
+        %18:i32 = load %i
+        %x_47:i32 = let %18
+        switch %x_47 [c: (2i, $B7), c: (1i, $B8), c: (default, $B9)] {  # switch_1
+          $B7: {  # case
+            %20:i32 = load %i
+            %x_83:i32 = let %20
+            %22:ptr<uniform, f32, read> = access %x_11, 0u, 0i, 0u
+            %23:f32 = load %22
+            %x_85:f32 = let %23
             store_vector_element %color, %x_83, %x_85
             exit_switch  # switch_1
           }
-          %b8 = block {  # case
-            %19:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-            %x_52:i32 = load %19
+          $B8: {  # case
+            %25:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+            %26:i32 = load %25
+            %x_52:i32 = let %26
             store %j, %x_52
-            loop [b: %b10, c: %b11] {  # loop_2
-              %b10 = block {  # body
-                %x_57:i32 = load %i
-                %x_58:i32 = load %i
-                %23:bool = gt %x_57, %x_58
-                if %23 [t: %b12, f: %b13] {  # if_2
-                  %b12 = block {  # true
+            loop [b: $B10, c: $B11] {  # loop_2
+              $B10: {  # body
+                %28:i32 = load %i
+                %x_57:i32 = let %28
+                %30:i32 = load %i
+                %x_58:i32 = let %30
+                %32:bool = gt %x_57, %x_58
+                if %32 [t: $B12, f: $B13] {  # if_2
+                  $B12: {  # true
                     exit_if  # if_2
                   }
-                  %b13 = block {  # false
+                  $B13: {  # false
                     exit_loop  # loop_2
                   }
                 }
-                %24:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-                %x_62:i32 = load %24
+                %33:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+                %34:i32 = load %33
+                %x_62:i32 = let %34
                 store %k, %x_62
-                loop [b: %b14, c: %b15] {  # loop_3
-                  %b14 = block {  # body
-                    %x_67:i32 = load %k
-                    %x_68:i32 = load %i
-                    %28:bool = lt %x_67, %x_68
-                    if %28 [t: %b16, f: %b17] {  # if_3
-                      %b16 = block {  # true
+                loop [b: $B14, c: $B15] {  # loop_3
+                  $B14: {  # body
+                    %36:i32 = load %k
+                    %x_67:i32 = let %36
+                    %38:i32 = load %i
+                    %x_68:i32 = let %38
+                    %40:bool = lt %x_67, %x_68
+                    if %40 [t: $B16, f: $B17] {  # if_3
+                      $B16: {  # true
                         exit_if  # if_3
                       }
-                      %b17 = block {  # false
+                      $B17: {  # false
                         exit_loop  # loop_3
                       }
                     }
-                    %x_71:i32 = load %k
-                    %30:ptr<uniform, f32, read> = access %x_11, 0u, 0i, 0u
-                    %x_73:f32 = load %30
+                    %41:i32 = load %k
+                    %x_71:i32 = let %41
+                    %43:ptr<uniform, f32, read> = access %x_11, 0u, 0i, 0u
+                    %44:f32 = load %43
+                    %x_73:f32 = let %44
                     store_vector_element %color, %x_71, %x_73
-                    continue %b15
+                    continue  # -> $B15
                   }
-                  %b15 = block {  # continuing
-                    %x_75:i32 = load %k
-                    %33:i32 = add %x_75, 1i
-                    store %k, %33
-                    next_iteration %b14
+                  $B15: {  # continuing
+                    %46:i32 = load %k
+                    %x_75:i32 = let %46
+                    %48:i32 = add %x_75, 1i
+                    store %k, %48
+                    next_iteration  # -> $B14
                   }
                 }
-                continue %b11
+                continue  # -> $B11
               }
-              %b11 = block {  # continuing
-                %x_77:i32 = load %j
-                %35:i32 = add %x_77, 1i
-                store %j, %35
-                next_iteration %b10
+              $B11: {  # continuing
+                %49:i32 = load %j
+                %x_77:i32 = let %49
+                %51:i32 = add %x_77, 1i
+                store %j, %51
+                next_iteration  # -> $B10
               }
             }
-            %x_79:i32 = load %i
-            %37:ptr<uniform, f32, read> = access %x_11, 0u, 0i, 0u
-            %x_81:f32 = load %37
+            %52:i32 = load %i
+            %x_79:i32 = let %52
+            %54:ptr<uniform, f32, read> = access %x_11, 0u, 0i, 0u
+            %55:f32 = load %54
+            %x_81:f32 = let %55
             store_vector_element %color, %x_79, %x_81
             exit_switch  # switch_1
           }
-          %b9 = block {  # case
+          $B9: {  # case
             exit_switch  # switch_1
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_87:i32 = load %i
-        %40:i32 = add %x_87, 1i
-        store %i, %40
-        next_iteration %b3
+      $B4: {  # continuing
+        %57:i32 = load %i
+        %x_87:i32 = let %57
+        %59:i32 = add %x_87, 1i
+        store %i, %59
+        next_iteration  # -> $B3
       }
     }
-    %x_89:vec4<f32> = load %color
+    %60:vec4<f32> = load %color
+    %x_89:vec4<f32> = let %60
     store %x_GLF_color, %x_89
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b18 {
-  %b18 = block {
-    %43:void = call %main_1
-    %44:vec4<f32> = load %x_GLF_color
-    %45:main_out = construct %44
-    ret %45
+%tint_symbol = @fragment func():main_out {
+  $B18: {
+    %63:void = call %main_1
+    %64:vec4<f32> = load %x_GLF_color
+    %65:main_out = construct %64
+    ret %65
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-infinite-loops/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-infinite-loops/0-opt.spvasm.expected.ir.msl
index dc64a45..10f6312 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-infinite-loops/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-infinite-loops/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -24,15 +24,15 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_5:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_7:ptr<uniform, buf2, read> = var @binding_point(0, 2)
   %x_10:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %i:ptr<function, i32, read_write> = var
     %7:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
     %8:f32 = load %7
@@ -43,49 +43,49 @@
     %12:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
     %13:f32 = load %12
     %14:bool = gt %11, %13
-    if %14 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        loop [b: %b5, c: %b6] {  # loop_1
-          %b5 = block {  # body
+    if %14 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        loop [b: $B5, c: $B6] {  # loop_1
+          $B5: {  # body
             %15:ptr<uniform, f32, read> = access %x_5, 0u, 1i, 0u
             %16:f32 = load %15
             %17:vec4<f32> = construct %16
             store %x_GLF_color, %17
-            continue %b6
+            continue  # -> $B6
           }
-          %b6 = block {  # continuing
-            break_if false %b5
+          $B6: {  # continuing
+            break_if false  # -> [t: exit_loop loop_1, f: $B5]
           }
         }
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        loop [b: %b7, c: %b8] {  # loop_2
-          %b7 = block {  # body
-            loop [b: %b9, c: %b10] {  # loop_3
-              %b9 = block {  # body
-                if true [t: %b11, f: %b12] {  # if_2
-                  %b11 = block {  # true
+      $B4: {  # false
+        loop [b: $B7, c: $B8] {  # loop_2
+          $B7: {  # body
+            loop [b: $B9] {  # loop_3
+              $B9: {  # body
+                if true [t: $B10, f: $B11] {  # if_2
+                  $B10: {  # true
                     exit_if  # if_2
                   }
-                  %b12 = block {  # false
+                  $B11: {  # false
                     exit_loop  # loop_3
                   }
                 }
                 %18:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
                 %19:i32 = load %18
                 store %i, %19
-                loop [b: %b13, c: %b14] {  # loop_4
-                  %b13 = block {  # body
+                loop [b: $B12, c: $B13] {  # loop_4
+                  $B12: {  # body
                     %20:i32 = load %i
                     %21:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
                     %22:i32 = load %21
                     %23:bool = lt %20, %22
-                    if %23 [t: %b15, f: %b16] {  # if_3
-                      %b15 = block {  # true
+                    if %23 [t: $B14, f: $B15] {  # if_3
+                      $B14: {  # true
                         exit_if  # if_3
                       }
-                      %b16 = block {  # false
+                      $B15: {  # false
                         exit_loop  # loop_4
                       }
                     }
@@ -99,31 +99,30 @@
                     %31:f32 = load %30
                     %32:vec4<f32> = construct %25, %27, %29, %31
                     store %x_GLF_color, %32
-                    continue %b14
+                    continue  # -> $B13
                   }
-                  %b14 = block {  # continuing
+                  $B13: {  # continuing
                     %33:i32 = load %i
                     %34:i32 = add %33, 1i
                     store %i, %34
-                    next_iteration %b13
+                    next_iteration  # -> $B12
                   }
                 }
                 exit_loop  # loop_3
               }
-              %b10 = block {  # continuing
-                next_iteration %b9
-              }
             }
-            continue %b8
+            continue  # -> $B8
           }
-          %b8 = block {  # continuing
+          $B8: {  # continuing
             %35:ptr<uniform, f32, read> = access %x_7, 0u
-            %x_82:f32 = load %35
-            %37:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
-            %x_84:f32 = load %37
-            %39:bool = gt %x_82, %x_84
-            %40:bool = eq %39, false
-            break_if %40 %b7
+            %36:f32 = load %35
+            %x_82:f32 = let %36
+            %38:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
+            %39:f32 = load %38
+            %x_84:f32 = let %39
+            %41:bool = gt %x_82, %x_84
+            %42:bool = eq %41, false
+            break_if %42  # -> [t: exit_loop loop_2, f: $B7]
           }
         }
         exit_if  # if_1
@@ -132,12 +131,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b17 {
-  %b17 = block {
-    %42:void = call %main_1
-    %43:vec4<f32> = load %x_GLF_color
-    %44:main_out = construct %43
-    ret %44
+%tint_symbol = @fragment func():main_out {
+  $B16: {
+    %44:void = call %main_1
+    %45:vec4<f32> = load %x_GLF_color
+    %46:main_out = construct %45
+    ret %46
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-infinite-loops/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-infinite-loops/0-opt.wgsl.expected.ir.msl
index b7607fd..1a99ffc 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-infinite-loops/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-infinite-loops/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -24,106 +24,117 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_5:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_7:ptr<uniform, buf2, read> = var @binding_point(0, 2)
   %x_10:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %i:ptr<function, i32, read_write> = var
     %7:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
-    %x_38:f32 = load %7
-    %9:vec4<f32> = construct %x_38, %x_38, %x_38, %x_38
-    store %x_GLF_color, %9
-    %10:ptr<uniform, f32, read> = access %x_7, 0u
-    %x_41:f32 = load %10
-    %12:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
-    %x_43:f32 = load %12
-    %14:bool = gt %x_41, %x_43
-    if %14 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        loop [b: %b5, c: %b6] {  # loop_1
-          %b5 = block {  # body
-            %15:ptr<uniform, f32, read> = access %x_5, 0u, 1i, 0u
-            %x_53:f32 = load %15
-            %17:vec4<f32> = construct %x_53, %x_53, %x_53, %x_53
-            store %x_GLF_color, %17
-            continue %b6
+    %8:f32 = load %7
+    %x_38:f32 = let %8
+    %10:vec4<f32> = construct %x_38, %x_38, %x_38, %x_38
+    store %x_GLF_color, %10
+    %11:ptr<uniform, f32, read> = access %x_7, 0u
+    %12:f32 = load %11
+    %x_41:f32 = let %12
+    %14:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
+    %15:f32 = load %14
+    %x_43:f32 = let %15
+    %17:bool = gt %x_41, %x_43
+    if %17 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        loop [b: $B5, c: $B6] {  # loop_1
+          $B5: {  # body
+            %18:ptr<uniform, f32, read> = access %x_5, 0u, 1i, 0u
+            %19:f32 = load %18
+            %x_53:f32 = let %19
+            %21:vec4<f32> = construct %x_53, %x_53, %x_53, %x_53
+            store %x_GLF_color, %21
+            continue  # -> $B6
           }
-          %b6 = block {  # continuing
-            break_if false %b5
+          $B6: {  # continuing
+            break_if false  # -> [t: exit_loop loop_1, f: $B5]
           }
         }
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        loop [b: %b7, c: %b8] {  # loop_2
-          %b7 = block {  # body
-            loop [b: %b9, c: %b10] {  # loop_3
-              %b9 = block {  # body
-                if true [t: %b11, f: %b12] {  # if_2
-                  %b11 = block {  # true
+      $B4: {  # false
+        loop [b: $B7, c: $B8] {  # loop_2
+          $B7: {  # body
+            loop [b: $B9] {  # loop_3
+              $B9: {  # body
+                if true [t: $B10, f: $B11] {  # if_2
+                  $B10: {  # true
                     exit_if  # if_2
                   }
-                  %b12 = block {  # false
+                  $B11: {  # false
                     exit_loop  # loop_3
                   }
                 }
-                %18:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-                %x_13:i32 = load %18
+                %22:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+                %23:i32 = load %22
+                %x_13:i32 = let %23
                 store %i, %x_13
-                loop [b: %b13, c: %b14] {  # loop_4
-                  %b13 = block {  # body
-                    %x_14:i32 = load %i
-                    %21:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-                    %x_15:i32 = load %21
-                    %23:bool = lt %x_14, %x_15
-                    if %23 [t: %b15, f: %b16] {  # if_3
-                      %b15 = block {  # true
+                loop [b: $B12, c: $B13] {  # loop_4
+                  $B12: {  # body
+                    %25:i32 = load %i
+                    %x_14:i32 = let %25
+                    %27:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+                    %28:i32 = load %27
+                    %x_15:i32 = let %28
+                    %30:bool = lt %x_14, %x_15
+                    if %30 [t: $B14, f: $B15] {  # if_3
+                      $B14: {  # true
                         exit_if  # if_3
                       }
-                      %b16 = block {  # false
+                      $B15: {  # false
                         exit_loop  # loop_4
                       }
                     }
-                    %24:ptr<uniform, f32, read> = access %x_5, 0u, 1i, 0u
-                    %x_73:f32 = load %24
-                    %26:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
-                    %x_75:f32 = load %26
-                    %28:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
-                    %x_77:f32 = load %28
-                    %30:ptr<uniform, f32, read> = access %x_5, 0u, 1i, 0u
-                    %x_79:f32 = load %30
-                    %32:vec4<f32> = construct %x_73, %x_75, %x_77, %x_79
-                    store %x_GLF_color, %32
-                    continue %b14
+                    %31:ptr<uniform, f32, read> = access %x_5, 0u, 1i, 0u
+                    %32:f32 = load %31
+                    %x_73:f32 = let %32
+                    %34:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
+                    %35:f32 = load %34
+                    %x_75:f32 = let %35
+                    %37:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
+                    %38:f32 = load %37
+                    %x_77:f32 = let %38
+                    %40:ptr<uniform, f32, read> = access %x_5, 0u, 1i, 0u
+                    %41:f32 = load %40
+                    %x_79:f32 = let %41
+                    %43:vec4<f32> = construct %x_73, %x_75, %x_77, %x_79
+                    store %x_GLF_color, %43
+                    continue  # -> $B13
                   }
-                  %b14 = block {  # continuing
-                    %x_16:i32 = load %i
-                    %34:i32 = add %x_16, 1i
-                    store %i, %34
-                    next_iteration %b13
+                  $B13: {  # continuing
+                    %44:i32 = load %i
+                    %x_16:i32 = let %44
+                    %46:i32 = add %x_16, 1i
+                    store %i, %46
+                    next_iteration  # -> $B12
                   }
                 }
                 exit_loop  # loop_3
               }
-              %b10 = block {  # continuing
-                next_iteration %b9
-              }
             }
-            continue %b8
+            continue  # -> $B8
           }
-          %b8 = block {  # continuing
-            %35:ptr<uniform, f32, read> = access %x_7, 0u
-            %x_82:f32 = load %35
-            %37:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
-            %x_84:f32 = load %37
-            %39:bool = gt %x_82, %x_84
-            %40:bool = eq %39, false
-            break_if %40 %b7
+          $B8: {  # continuing
+            %47:ptr<uniform, f32, read> = access %x_7, 0u
+            %48:f32 = load %47
+            %x_82:f32 = let %48
+            %50:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
+            %51:f32 = load %50
+            %x_84:f32 = let %51
+            %53:bool = gt %x_82, %x_84
+            %54:bool = eq %53, false
+            break_if %54  # -> [t: exit_loop loop_2, f: $B7]
           }
         }
         exit_if  # if_1
@@ -132,12 +143,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b17 {
-  %b17 = block {
-    %42:void = call %main_1
-    %43:vec4<f32> = load %x_GLF_color
-    %44:main_out = construct %43
-    ret %44
+%tint_symbol = @fragment func():main_out {
+  $B16: {
+    %56:void = call %main_1
+    %57:vec4<f32> = load %x_GLF_color
+    %58:main_out = construct %57
+    ret %58
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-target-lowering-dfdx-cos/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-target-lowering-dfdx-cos/0-opt.spvasm.expected.ir.msl
index c0d6f64..dbc6ec4 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-target-lowering-dfdx-cos/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-target-lowering-dfdx-cos/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   two:f32 @offset(0)
 }
 
@@ -8,36 +8,37 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, f32, read_write> = var
     %b:ptr<function, f32, read_write> = var
     %7:f32 = load_vector_element %gl_FragCoord, 0u
-    %8:f32 = cos %7
-    %9:f32 = dpdx %8
-    store %a, %9
-    %10:ptr<uniform, f32, read> = access %x_8, 0u
-    %11:f32 = load %10
-    %12:f32 = load %a
-    %13:f32 = mix 2.0f, %11, %12
-    store %b, %13
-    %14:f32 = load %b
-    %15:bool = gte %14, 1.89999997615814208984f
-    %16:f32 = load %b
-    %17:bool = lte %16, 2.09999990463256835938f
-    %18:bool = and %15, %17
-    if %18 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    %x_33:f32 = let %7
+    %9:f32 = cos %x_33
+    %10:f32 = dpdx %9
+    store %a, %10
+    %11:ptr<uniform, f32, read> = access %x_8, 0u
+    %12:f32 = load %11
+    %13:f32 = load %a
+    %14:f32 = mix 2.0f, %12, %13
+    store %b, %14
+    %15:f32 = load %b
+    %16:bool = gte %15, 1.89999997615814208984f
+    %17:f32 = load %b
+    %18:bool = lte %17, 2.09999990463256835938f
+    %19:bool = and %16, %18
+    if %19 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
@@ -45,13 +46,13 @@
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b5 {
-  %b5 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B5: {
     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
+    %22:void = call %main_1
+    %23:vec4<f32> = load %x_GLF_color
+    %24:main_out = construct %23
+    ret %24
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-target-lowering-dfdx-cos/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-target-lowering-dfdx-cos/0-opt.wgsl.expected.ir.msl
index 510f82c..02de545 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-target-lowering-dfdx-cos/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-target-lowering-dfdx-cos/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   two:f32 @offset(0)
 }
 
@@ -8,36 +8,41 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, f32, read_write> = var
     %b:ptr<function, f32, read_write> = var
-    %x_33:f32 = load_vector_element %gl_FragCoord, 0u
-    %8:f32 = cos %x_33
-    %9:f32 = dpdx %8
-    store %a, %9
-    %10:ptr<uniform, f32, read> = access %x_8, 0u
-    %x_37:f32 = load %10
-    %x_38:f32 = load %a
-    %13:f32 = mix 2.0f, %x_37, %x_38
-    store %b, %13
-    %x_40:f32 = load %b
-    %x_42:f32 = load %b
-    %16:bool = gte %x_40, 1.89999997615814208984f
-    %17:bool = lte %x_42, 2.09999990463256835938f
-    %18:bool = and %16, %17
-    if %18 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    %7:f32 = load_vector_element %gl_FragCoord, 0u
+    %x_33:f32 = let %7
+    %9:f32 = cos %x_33
+    %10:f32 = dpdx %9
+    store %a, %10
+    %11:ptr<uniform, f32, read> = access %x_8, 0u
+    %12:f32 = load %11
+    %x_37:f32 = let %12
+    %14:f32 = load %a
+    %x_38:f32 = let %14
+    %16:f32 = mix 2.0f, %x_37, %x_38
+    store %b, %16
+    %17:f32 = load %b
+    %x_40:f32 = let %17
+    %19:f32 = load %b
+    %x_42:f32 = let %19
+    %21:bool = gte %x_40, 1.89999997615814208984f
+    %22:bool = lte %x_42, 2.09999990463256835938f
+    %23:bool = and %21, %22
+    if %23 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
@@ -45,13 +50,13 @@
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b5 {
-  %b5 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B5: {
     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
+    %26:void = call %main_1
+    %27:vec4<f32> = load %x_GLF_color
+    %28:main_out = construct %27
+    ret %28
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-target-lowering-inst-combine-compares-struct-array-clamp-function-cal/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-target-lowering-inst-combine-compares-struct-array-clamp-function-cal/0-opt.spvasm.expected.ir.msl
index 82b6730..aa30f09 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-target-lowering-inst-combine-compares-struct-array-clamp-function-cal/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-target-lowering-inst-combine-compares-struct-array-clamp-function-cal/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf1 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf1 = struct @align(8) {
   v1:vec2<f32> @offset(0)
 }
 
@@ -20,44 +20,42 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_8: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
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%func_struct_S_i11_ = func(%s:ptr<function, S, read_write>):void -> %b2 {
-  %b2 = block {
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %6:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
-        %7:f32 = load_vector_element %6, 0u
-        %8:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
-        %9:f32 = load_vector_element %8, 1u
-        %10:bool = gt %7, %9
-        if %10 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+%func_struct_S_i11_ = func(%s:ptr<function, S, read_write>):void {
+  $B2: {
+    loop [b: $B3] {  # loop_1
+      $B3: {  # body
+        %7:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
+        %8:f32 = load_vector_element %7, 0u
+        %9:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
+        %10:f32 = load_vector_element %9, 1u
+        %11:bool = gt %8, %10
+        if %11 [t: $B4, f: $B5] {  # if_1
+          $B4: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B5: {  # false
             exit_loop  # loop_1
           }
         }
         ret
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
-      }
     }
-    %11:ptr<function, i32, read_write> = access %s, 0u
-    %12:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-    %13:i32 = load %12
-    store %11, %13
+    %12:ptr<function, i32, read_write> = access %s, 0u
+    %13:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+    %14:i32 = load %13
+    store %12, %14
     ret
   }
 }
-%main_1 = func():void -> %b7 {
-  %b7 = block {
+%main_1 = func():void {
+  $B6: {
     %i:ptr<function, i32, read_write> = var
     %arr:ptr<function, array<S, 3>, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
@@ -67,215 +65,229 @@
     %x_137:ptr<function, bool, read_write> = var
     %x_146:ptr<function, bool, read_write> = var
     %x_147:ptr<function, bool, read_write> = var
-    %24:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-    %25:i32 = load %24
-    store %i, %25
-    loop [b: %b8, c: %b9] {  # loop_2
-      %b8 = block {  # body
-        %26:i32 = load %i
-        %27:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %28:i32 = load %27
-        %29:bool = lt %26, %28
-        if %29 [t: %b10, f: %b11] {  # if_2
-          %b10 = block {  # true
+    %25:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+    %26:i32 = load %25
+    store %i, %26
+    loop [b: $B7, c: $B8] {  # loop_2
+      $B7: {  # body
+        %27:i32 = load %i
+        %28:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %29:i32 = load %28
+        %30:bool = lt %27, %29
+        if %30 [t: $B9, f: $B10] {  # if_2
+          $B9: {  # true
             exit_if  # if_2
           }
-          %b11 = block {  # false
+          $B10: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_56:i32 = load %i
-        %31:ptr<function, i32, read_write> = access %arr, %x_56, 0u
-        %32:i32 = load %i
-        store %31, %32
-        continue %b9
+        %31:i32 = load %i
+        %x_56:i32 = let %31
+        %33:ptr<function, i32, read_write> = access %arr, %x_56, 0u
+        %34:i32 = load %i
+        store %33, %34
+        continue  # -> $B8
       }
-      %b9 = block {  # continuing
-        %33:i32 = load %i
-        %34:i32 = add %33, 1i
-        store %i, %34
-        next_iteration %b8
+      $B8: {  # continuing
+        %35:i32 = load %i
+        %36:i32 = add %35, 1i
+        store %i, %36
+        next_iteration  # -> $B7
       }
     }
-    %35:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-    %36:i32 = load %35
-    store %i_1, %36
-    loop [b: %b12, c: %b13] {  # loop_3
-      %b12 = block {  # body
-        %37:i32 = load %i_1
-        %38:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %39:i32 = load %38
-        %40:bool = lt %37, %39
-        if %40 [t: %b14, f: %b15] {  # if_3
-          %b14 = block {  # true
+    %37:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+    %38:i32 = load %37
+    store %i_1, %38
+    loop [b: $B11, c: $B12] {  # loop_3
+      $B11: {  # body
+        %39:i32 = load %i_1
+        %40:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %41:i32 = load %40
+        %42:bool = lt %39, %41
+        if %42 [t: $B13, f: $B14] {  # if_3
+          $B13: {  # true
             exit_if  # if_3
           }
-          %b15 = block {  # false
+          $B14: {  # false
             exit_loop  # loop_3
           }
         }
-        %41:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
-        %42:f32 = load_vector_element %41, 0u
         %43:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
-        %44:f32 = load_vector_element %43, 1u
-        %45:bool = gt %42, %44
-        if %45 [t: %b16] {  # if_4
-          %b16 = block {  # true
+        %44:f32 = load_vector_element %43, 0u
+        %45:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
+        %46:f32 = load_vector_element %45, 1u
+        %47:bool = gt %44, %46
+        if %47 [t: $B15] {  # if_4
+          $B15: {  # true
             exit_loop  # loop_3
           }
         }
-        %46:i32 = load %i_1
-        %47:ptr<function, i32, read_write> = access %arr, %46, 0u
-        %48:i32 = load %47
-        %49:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %48:i32 = load %i_1
+        %49:ptr<function, i32, read_write> = access %arr, %48, 0u
         %50:i32 = load %49
-        %51:bool = eq %48, %50
-        if %51 [t: %b17, f: %b18] {  # if_5
-          %b17 = block {  # true
-            %x_88:i32 = load %i_1
-            %53:i32 = clamp %x_88, 0i, 3i
-            %54:ptr<function, i32, read_write> = access %arr, %53, 0u
-            %55:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
-            %56:i32 = load %55
-            store %54, %56
-            %57:ptr<function, S, read_write> = access %arr, 2i
-            %58:S = load %57
-            store %param, %58
-            %59:void = call %func_struct_S_i11_, %param
-            %60:ptr<function, S, read_write> = access %arr, 2i
-            %61:S = load %param
-            store %60, %61
+        %51:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %52:i32 = load %51
+        %53:bool = eq %50, %52
+        if %53 [t: $B16, f: $B17] {  # if_5
+          $B16: {  # true
+            %54:i32 = load %i_1
+            %x_88:i32 = let %54
+            %56:i32 = max %x_88, 0i
+            %57:i32 = min %56, 3i
+            %58:ptr<function, i32, read_write> = access %arr, %57, 0u
+            %59:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
+            %60:i32 = load %59
+            store %58, %60
+            %61:ptr<function, S, read_write> = access %arr, 2i
+            %62:S = load %61
+            store %param, %62
+            %63:void = call %func_struct_S_i11_, %param
+            %64:ptr<function, S, read_write> = access %arr, 2i
+            %65:S = load %param
+            store %64, %65
             exit_if  # if_5
           }
-          %b18 = block {  # false
-            %62:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-            %63:i32 = load %62
-            store %j, %63
-            loop [b: %b19, c: %b20] {  # loop_4
-              %b19 = block {  # body
-                %64:i32 = load %j
-                %65:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-                %66:i32 = load %65
-                %67:bool = lt %64, %66
-                if %67 [t: %b21, f: %b22] {  # if_6
-                  %b21 = block {  # true
+          $B17: {  # false
+            %66:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+            %67:i32 = load %66
+            store %j, %67
+            loop [b: $B18, c: $B19] {  # loop_4
+              $B18: {  # body
+                %68:i32 = load %j
+                %69:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+                %70:i32 = load %69
+                %71:bool = lt %68, %70
+                if %71 [t: $B20, f: $B21] {  # if_6
+                  $B20: {  # true
                     exit_if  # if_6
                   }
-                  %b22 = block {  # false
+                  $B21: {  # false
                     exit_loop  # loop_4
                   }
                 }
-                %68:i32 = load %j
-                %69:ptr<function, i32, read_write> = access %arr, %68, 0u
-                %70:i32 = load %69
-                %71:ptr<uniform, i32, read> = access %x_10, 0u, 4i, 0u
-                %72:i32 = load %71
-                %73:bool = gt %70, %72
-                if %73 [t: %b23] {  # if_7
-                  %b23 = block {  # true
-                    discard
+                %72:i32 = load %j
+                %73:ptr<function, i32, read_write> = access %arr, %72, 0u
+                %74:i32 = load %73
+                %75:ptr<uniform, i32, read> = access %x_10, 0u, 4i, 0u
+                %76:i32 = load %75
+                %77:bool = gt %74, %76
+                if %77 [t: $B22] {  # if_7
+                  $B22: {  # true
+                    store %continue_execution, false
                     exit_if  # if_7
                   }
                 }
-                continue %b20
+                continue  # -> $B19
               }
-              %b20 = block {  # continuing
-                %74:i32 = load %j
-                %75:i32 = add %74, 1i
-                store %j, %75
-                next_iteration %b19
+              $B19: {  # continuing
+                %78:i32 = load %j
+                %79:i32 = add %78, 1i
+                store %j, %79
+                next_iteration  # -> $B18
               }
             }
             exit_if  # if_5
           }
         }
-        continue %b13
+        continue  # -> $B12
       }
-      %b13 = block {  # continuing
-        %76:i32 = load %i_1
-        %77:i32 = add %76, 1i
-        store %i_1, %77
-        next_iteration %b12
+      $B12: {  # continuing
+        %80:i32 = load %i_1
+        %81:i32 = add %80, 1i
+        store %i_1, %81
+        next_iteration  # -> $B11
       }
     }
-    %78:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-    %79:i32 = load %78
-    %80:ptr<function, i32, read_write> = access %arr, %79, 0u
-    %81:i32 = load %80
     %82:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
     %83:i32 = load %82
-    %x_127:bool = eq %81, %83
+    %84:ptr<function, i32, read_write> = access %arr, %83, 0u
+    %85:i32 = load %84
+    %86:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+    %87:i32 = load %86
+    %88:bool = eq %85, %87
+    %x_127:bool = let %88
     store %x_137, %x_127
-    if %x_127 [t: %b24] {  # if_8
-      %b24 = block {  # true
-        %85:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %86:i32 = load %85
-        %87:ptr<function, i32, read_write> = access %arr, %86, 0u
-        %88:i32 = load %87
-        %89:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
-        %90:i32 = load %89
-        %91:bool = eq %88, %90
-        store %x_136, %91
-        %92:bool = load %x_136
-        store %x_137, %92
+    if %x_127 [t: $B23] {  # if_8
+      $B23: {  # true
+        %90:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %91:i32 = load %90
+        %92:ptr<function, i32, read_write> = access %arr, %91, 0u
+        %93:i32 = load %92
+        %94:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
+        %95:i32 = load %94
+        %96:bool = eq %93, %95
+        store %x_136, %96
+        %97:bool = load %x_136
+        store %x_137, %97
         exit_if  # if_8
       }
     }
-    %93:bool = load %x_137
-    store %x_147, %93
-    %94:bool = load %x_137
-    if %94 [t: %b25] {  # if_9
-      %b25 = block {  # true
-        %95:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
-        %96:i32 = load %95
-        %97:ptr<function, i32, read_write> = access %arr, %96, 0u
-        %98:i32 = load %97
-        %99:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %100:i32 = load %99
-        %101:bool = eq %98, %100
-        store %x_146, %101
-        %102:bool = load %x_146
-        store %x_147, %102
+    %98:bool = load %x_137
+    store %x_147, %98
+    %99:bool = load %x_137
+    if %99 [t: $B24] {  # if_9
+      $B24: {  # true
+        %100:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
+        %101:i32 = load %100
+        %102:ptr<function, i32, read_write> = access %arr, %101, 0u
+        %103:i32 = load %102
+        %104:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %105:i32 = load %104
+        %106:bool = eq %103, %105
+        store %x_146, %106
+        %107:bool = load %x_146
+        store %x_147, %107
         exit_if  # if_9
       }
     }
-    %103:bool = load %x_147
-    if %103 [t: %b26, f: %b27] {  # if_10
-      %b26 = block {  # true
-        %104:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %105:i32 = load %104
-        %106:f32 = convert %105
-        %107:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-        %108:i32 = load %107
-        %109:f32 = convert %108
-        %110:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-        %111:i32 = load %110
-        %112:f32 = convert %111
-        %113:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+    %108:bool = load %x_147
+    if %108 [t: $B25, f: $B26] {  # if_10
+      $B25: {  # true
+        %109:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %110:i32 = load %109
+        %111:f32 = convert %110
+        %112:f32 = let %111
+        %113:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
         %114:i32 = load %113
         %115:f32 = convert %114
-        %116:vec4<f32> = construct %106, %109, %112, %115
-        store %x_GLF_color, %116
-        exit_if  # if_10
-      }
-      %b27 = block {  # false
+        %116:f32 = let %115
         %117:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
         %118:i32 = load %117
         %119:f32 = convert %118
-        %120:vec4<f32> = construct %119
-        store %x_GLF_color, %120
+        %120:f32 = let %119
+        %121:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %122:i32 = load %121
+        %123:f32 = convert %122
+        %124:vec4<f32> = construct %112, %116, %120, %123
+        store %x_GLF_color, %124
+        exit_if  # if_10
+      }
+      $B26: {  # false
+        %125:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+        %126:i32 = load %125
+        %127:f32 = convert %126
+        %128:vec4<f32> = construct %127
+        store %x_GLF_color, %128
         exit_if  # if_10
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b28 {
-  %b28 = block {
-    %122:void = call %main_1
-    %123:vec4<f32> = load %x_GLF_color
-    %124:main_out = construct %123
-    ret %124
+%tint_symbol = @fragment func():main_out {
+  $B27: {
+    %130:void = call %main_1
+    %131:vec4<f32> = load %x_GLF_color
+    %132:main_out = construct %131
+    %133:bool = load %continue_execution
+    %134:bool = eq %133, false
+    if %134 [t: $B28] {  # if_11
+      $B28: {  # true
+        terminate_invocation
+      }
+    }
+    ret %132
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-target-lowering-inst-combine-compares-struct-array-clamp-function-cal/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-target-lowering-inst-combine-compares-struct-array-clamp-function-cal/0-opt.wgsl.expected.ir.msl
index dfd4ec1..3d18c29 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-target-lowering-inst-combine-compares-struct-array-clamp-function-cal/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-target-lowering-inst-combine-compares-struct-array-clamp-function-cal/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf1 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf1 = struct @align(8) {
   v1:vec2<f32> @offset(0)
 }
 
@@ -20,44 +20,45 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_8: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
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%func_struct_S_i11_ = func(%s:ptr<function, S, read_write>):void -> %b2 {
-  %b2 = block {
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %6:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
-        %x_174:f32 = load_vector_element %6, 0u
-        %8:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
-        %x_176:f32 = load_vector_element %8, 1u
-        %10:bool = gt %x_174, %x_176
-        if %10 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+%func_struct_S_i11_ = func(%s:ptr<function, S, read_write>):void {
+  $B2: {
+    loop [b: $B3] {  # loop_1
+      $B3: {  # body
+        %7:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
+        %8:f32 = load_vector_element %7, 0u
+        %x_174:f32 = let %8
+        %10:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
+        %11:f32 = load_vector_element %10, 1u
+        %x_176:f32 = let %11
+        %13:bool = gt %x_174, %x_176
+        if %13 [t: $B4, f: $B5] {  # if_1
+          $B4: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B5: {  # false
             exit_loop  # loop_1
           }
         }
         ret
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
-      }
     }
-    %11:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-    %x_180:i32 = load %11
-    %13:ptr<function, i32, read_write> = access %s, 0u
-    store %13, %x_180
+    %14:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+    %15:i32 = load %14
+    %x_180:i32 = let %15
+    %17:ptr<function, i32, read_write> = access %s, 0u
+    store %17, %x_180
     ret
   }
 }
-%main_1 = func():void -> %b7 {
-  %b7 = block {
+%main_1 = func():void {
+  $B6: {
     %i:ptr<function, i32, read_write> = var
     %arr:ptr<function, array<S, 3>, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
@@ -67,214 +68,269 @@
     %x_146:ptr<function, bool, read_write> = var
     %x_137_phi:ptr<function, bool, read_write> = var
     %x_147_phi:ptr<function, bool, read_write> = var
-    %24:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-    %x_46:i32 = load %24
+    %28:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+    %29:i32 = load %28
+    %x_46:i32 = let %29
     store %i, %x_46
-    loop [b: %b8, c: %b9] {  # loop_2
-      %b8 = block {  # body
-        %x_51:i32 = load %i
-        %27:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %x_53:i32 = load %27
-        %29:bool = lt %x_51, %x_53
-        if %29 [t: %b10, f: %b11] {  # if_2
-          %b10 = block {  # true
+    loop [b: $B7, c: $B8] {  # loop_2
+      $B7: {  # body
+        %31:i32 = load %i
+        %x_51:i32 = let %31
+        %33:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %34:i32 = load %33
+        %x_53:i32 = let %34
+        %36:bool = lt %x_51, %x_53
+        if %36 [t: $B9, f: $B10] {  # if_2
+          $B9: {  # true
             exit_if  # if_2
           }
-          %b11 = block {  # false
+          $B10: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_56:i32 = load %i
-        %x_57:i32 = load %i
-        %32:ptr<function, i32, read_write> = access %arr, %x_56, 0u
-        store %32, %x_57
-        continue %b9
+        %37:i32 = load %i
+        %x_56:i32 = let %37
+        %39:i32 = load %i
+        %x_57:i32 = let %39
+        %41:ptr<function, i32, read_write> = access %arr, %x_56, 0u
+        store %41, %x_57
+        continue  # -> $B8
       }
-      %b9 = block {  # continuing
-        %x_59:i32 = load %i
-        %34:i32 = add %x_59, 1i
-        store %i, %34
-        next_iteration %b8
+      $B8: {  # continuing
+        %42:i32 = load %i
+        %x_59:i32 = let %42
+        %44:i32 = add %x_59, 1i
+        store %i, %44
+        next_iteration  # -> $B7
       }
     }
-    %35:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-    %x_62:i32 = load %35
+    %45:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+    %46:i32 = load %45
+    %x_62:i32 = let %46
     store %i_1, %x_62
-    loop [b: %b12, c: %b13] {  # loop_3
-      %b12 = block {  # body
-        %x_67:i32 = load %i_1
-        %38:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %x_69:i32 = load %38
-        %40:bool = lt %x_67, %x_69
-        if %40 [t: %b14, f: %b15] {  # if_3
-          %b14 = block {  # true
+    loop [b: $B11, c: $B12] {  # loop_3
+      $B11: {  # body
+        %48:i32 = load %i_1
+        %x_67:i32 = let %48
+        %50:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %51:i32 = load %50
+        %x_69:i32 = let %51
+        %53:bool = lt %x_67, %x_69
+        if %53 [t: $B13, f: $B14] {  # if_3
+          $B13: {  # true
             exit_if  # if_3
           }
-          %b15 = block {  # false
+          $B14: {  # false
             exit_loop  # loop_3
           }
         }
-        %41:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
-        %x_73:f32 = load_vector_element %41, 0u
-        %43:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
-        %x_75:f32 = load_vector_element %43, 1u
-        %45:bool = gt %x_73, %x_75
-        if %45 [t: %b16] {  # if_4
-          %b16 = block {  # true
+        %54:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
+        %55:f32 = load_vector_element %54, 0u
+        %x_73:f32 = let %55
+        %57:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
+        %58:f32 = load_vector_element %57, 1u
+        %x_75:f32 = let %58
+        %60:bool = gt %x_73, %x_75
+        if %60 [t: $B15] {  # if_4
+          $B15: {  # true
             exit_loop  # loop_3
           }
         }
-        %x_79:i32 = load %i_1
-        %47:ptr<function, i32, read_write> = access %arr, %x_79, 0u
-        %x_81:i32 = load %47
-        %49:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %x_83:i32 = load %49
-        %51:bool = eq %x_81, %x_83
-        if %51 [t: %b17, f: %b18] {  # if_5
-          %b17 = block {  # true
-            %x_88:i32 = load %i_1
-            %53:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
-            %x_91:i32 = load %53
-            %55:i32 = clamp %x_88, 0i, 3i
-            %56:ptr<function, i32, read_write> = access %arr, %55, 0u
-            store %56, %x_91
-            %57:ptr<function, S, read_write> = access %arr, 2i
-            %x_94:S = load %57
+        %61:i32 = load %i_1
+        %x_79:i32 = let %61
+        %63:ptr<function, i32, read_write> = access %arr, %x_79, 0u
+        %64:i32 = load %63
+        %x_81:i32 = let %64
+        %66:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %67:i32 = load %66
+        %x_83:i32 = let %67
+        %69:bool = eq %x_81, %x_83
+        if %69 [t: $B16, f: $B17] {  # if_5
+          $B16: {  # true
+            %70:i32 = load %i_1
+            %x_88:i32 = let %70
+            %72:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
+            %73:i32 = load %72
+            %x_91:i32 = let %73
+            %75:i32 = max %x_88, 0i
+            %76:i32 = min %75, 3i
+            %77:ptr<function, i32, read_write> = access %arr, %76, 0u
+            store %77, %x_91
+            %78:ptr<function, S, read_write> = access %arr, 2i
+            %79:S = load %78
+            %x_94:S = let %79
             store %param, %x_94
-            %59:void = call %func_struct_S_i11_, %param
-            %x_96:S = load %param
-            %61:ptr<function, S, read_write> = access %arr, 2i
-            store %61, %x_96
+            %81:void = call %func_struct_S_i11_, %param
+            %82:S = load %param
+            %x_96:S = let %82
+            %84:ptr<function, S, read_write> = access %arr, 2i
+            store %84, %x_96
             exit_if  # if_5
           }
-          %b18 = block {  # false
-            %62:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-            %x_99:i32 = load %62
+          $B17: {  # false
+            %85:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+            %86:i32 = load %85
+            %x_99:i32 = let %86
             store %j, %x_99
-            loop [b: %b19, c: %b20] {  # loop_4
-              %b19 = block {  # body
-                %x_104:i32 = load %j
-                %65:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-                %x_106:i32 = load %65
-                %67:bool = lt %x_104, %x_106
-                if %67 [t: %b21, f: %b22] {  # if_6
-                  %b21 = block {  # true
+            loop [b: $B18, c: $B19] {  # loop_4
+              $B18: {  # body
+                %88:i32 = load %j
+                %x_104:i32 = let %88
+                %90:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+                %91:i32 = load %90
+                %x_106:i32 = let %91
+                %93:bool = lt %x_104, %x_106
+                if %93 [t: $B20, f: $B21] {  # if_6
+                  $B20: {  # true
                     exit_if  # if_6
                   }
-                  %b22 = block {  # false
+                  $B21: {  # false
                     exit_loop  # loop_4
                   }
                 }
-                %x_109:i32 = load %j
-                %69:ptr<function, i32, read_write> = access %arr, %x_109, 0u
-                %x_111:i32 = load %69
-                %71:ptr<uniform, i32, read> = access %x_10, 0u, 4i, 0u
-                %x_113:i32 = load %71
-                %73:bool = gt %x_111, %x_113
-                if %73 [t: %b23] {  # if_7
-                  %b23 = block {  # true
-                    discard
+                %94:i32 = load %j
+                %x_109:i32 = let %94
+                %96:ptr<function, i32, read_write> = access %arr, %x_109, 0u
+                %97:i32 = load %96
+                %x_111:i32 = let %97
+                %99:ptr<uniform, i32, read> = access %x_10, 0u, 4i, 0u
+                %100:i32 = load %99
+                %x_113:i32 = let %100
+                %102:bool = gt %x_111, %x_113
+                if %102 [t: $B22] {  # if_7
+                  $B22: {  # true
+                    store %continue_execution, false
                     exit_if  # if_7
                   }
                 }
-                continue %b20
+                continue  # -> $B19
               }
-              %b20 = block {  # continuing
-                %x_117:i32 = load %j
-                %75:i32 = add %x_117, 1i
-                store %j, %75
-                next_iteration %b19
+              $B19: {  # continuing
+                %103:i32 = load %j
+                %x_117:i32 = let %103
+                %105:i32 = add %x_117, 1i
+                store %j, %105
+                next_iteration  # -> $B18
               }
             }
             exit_if  # if_5
           }
         }
-        continue %b13
+        continue  # -> $B12
       }
-      %b13 = block {  # continuing
-        %x_119:i32 = load %i_1
-        %77:i32 = add %x_119, 1i
-        store %i_1, %77
-        next_iteration %b12
+      $B12: {  # continuing
+        %106:i32 = load %i_1
+        %x_119:i32 = let %106
+        %108:i32 = add %x_119, 1i
+        store %i_1, %108
+        next_iteration  # -> $B11
       }
     }
-    %78:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-    %x_122:i32 = load %78
-    %80:ptr<function, i32, read_write> = access %arr, %x_122, 0u
-    %x_124:i32 = load %80
-    %82:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-    %x_126:i32 = load %82
-    %x_127:bool = eq %x_124, %x_126
+    %109:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+    %110:i32 = load %109
+    %x_122:i32 = let %110
+    %112:ptr<function, i32, read_write> = access %arr, %x_122, 0u
+    %113:i32 = load %112
+    %x_124:i32 = let %113
+    %115:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+    %116:i32 = load %115
+    %x_126:i32 = let %116
+    %118:bool = eq %x_124, %x_126
+    %x_127:bool = let %118
     store %x_137_phi, %x_127
-    if %x_127 [t: %b24] {  # if_8
-      %b24 = block {  # true
-        %85:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %x_131:i32 = load %85
-        %87:ptr<function, i32, read_write> = access %arr, %x_131, 0u
-        %x_133:i32 = load %87
-        %89:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
-        %x_135:i32 = load %89
-        %91:bool = eq %x_133, %x_135
-        store %x_136, %91
-        %92:bool = load %x_136
-        store %x_137_phi, %92
+    if %x_127 [t: $B23] {  # if_8
+      $B23: {  # true
+        %120:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %121:i32 = load %120
+        %x_131:i32 = let %121
+        %123:ptr<function, i32, read_write> = access %arr, %x_131, 0u
+        %124:i32 = load %123
+        %x_133:i32 = let %124
+        %126:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
+        %127:i32 = load %126
+        %x_135:i32 = let %127
+        %129:bool = eq %x_133, %x_135
+        store %x_136, %129
+        %130:bool = load %x_136
+        store %x_137_phi, %130
         exit_if  # if_8
       }
     }
-    %x_137:bool = load %x_137_phi
+    %131:bool = load %x_137_phi
+    %x_137:bool = let %131
     store %x_147_phi, %x_137
-    if %x_137 [t: %b25] {  # if_9
-      %b25 = block {  # true
-        %94:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
-        %x_141:i32 = load %94
-        %96:ptr<function, i32, read_write> = access %arr, %x_141, 0u
-        %x_143:i32 = load %96
-        %98:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %x_145:i32 = load %98
-        %100:bool = eq %x_143, %x_145
-        store %x_146, %100
-        %101:bool = load %x_146
-        store %x_147_phi, %101
+    if %x_137 [t: $B24] {  # if_9
+      $B24: {  # true
+        %133:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
+        %134:i32 = load %133
+        %x_141:i32 = let %134
+        %136:ptr<function, i32, read_write> = access %arr, %x_141, 0u
+        %137:i32 = load %136
+        %x_143:i32 = let %137
+        %139:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %140:i32 = load %139
+        %x_145:i32 = let %140
+        %142:bool = eq %x_143, %x_145
+        store %x_146, %142
+        %143:bool = load %x_146
+        store %x_147_phi, %143
         exit_if  # if_9
       }
     }
-    %x_147:bool = load %x_147_phi
-    if %x_147 [t: %b26, f: %b27] {  # if_10
-      %b26 = block {  # true
-        %103:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %x_152:i32 = load %103
-        %105:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-        %x_155:i32 = load %105
-        %107:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-        %x_158:i32 = load %107
-        %109:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %x_161:i32 = load %109
-        %111:f32 = convert %x_152
-        %112:f32 = convert %x_155
-        %113:f32 = convert %x_158
-        %114:f32 = convert %x_161
-        %115:vec4<f32> = construct %111, %112, %113, %114
-        store %x_GLF_color, %115
+    %144:bool = load %x_147_phi
+    %x_147:bool = let %144
+    if %x_147 [t: $B25, f: $B26] {  # if_10
+      $B25: {  # true
+        %146:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %147:i32 = load %146
+        %x_152:i32 = let %147
+        %149:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+        %150:i32 = load %149
+        %x_155:i32 = let %150
+        %152:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+        %153:i32 = load %152
+        %x_158:i32 = let %153
+        %155:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %156:i32 = load %155
+        %x_161:i32 = let %156
+        %158:f32 = convert %x_152
+        %159:f32 = let %158
+        %160:f32 = convert %x_155
+        %161:f32 = let %160
+        %162:f32 = convert %x_158
+        %163:f32 = let %162
+        %164:f32 = convert %x_161
+        %165:vec4<f32> = construct %159, %161, %163, %164
+        store %x_GLF_color, %165
         exit_if  # if_10
       }
-      %b27 = block {  # false
-        %116:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-        %x_165:i32 = load %116
-        %x_166:f32 = convert %x_165
-        %119:vec4<f32> = construct %x_166, %x_166, %x_166, %x_166
-        store %x_GLF_color, %119
+      $B26: {  # false
+        %166:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
+        %167:i32 = load %166
+        %x_165:i32 = let %167
+        %169:f32 = convert %x_165
+        %x_166:f32 = let %169
+        %171:vec4<f32> = construct %x_166, %x_166, %x_166, %x_166
+        store %x_GLF_color, %171
         exit_if  # if_10
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b28 {
-  %b28 = block {
-    %121:void = call %main_1
-    %122:vec4<f32> = load %x_GLF_color
-    %123:main_out = construct %122
-    ret %123
+%tint_symbol = @fragment func():main_out {
+  $B27: {
+    %173:void = call %main_1
+    %174:vec4<f32> = load %x_GLF_color
+    %175:main_out = construct %174
+    %176:bool = load %continue_execution
+    %177:bool = eq %176, false
+    if %177 [t: $B28] {  # if_11
+      $B28: {  # true
+        terminate_invocation
+      }
+    }
+    ret %175
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-transpose-multiply/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-transpose-multiply/0-opt.spvasm.expected.ir.msl
index efdd3b1..6d2fb97 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-transpose-multiply/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-transpose-multiply/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,62 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+}
+
+%main_1 = func():void {
+  $B2: {
+    %m:ptr<function, mat2x2<f32>, read_write> = var
+    store %m, mat2x2<f32>(vec2<f32>(1.0f, 2.0f), vec2<f32>(3.0f, 4.0f))
+    %4:mat2x2<f32> = load %m
+    %5:mat2x2<f32> = transpose %4
+    %6:mat2x2<f32> = let %5
+    %7:mat2x2<f32> = load %m
+    %8:mat2x2<f32> = transpose %7
+    %9:mat2x2<f32> = mul %6, %8
+    %x_30:mat2x2<f32> = let %9
+    %11:mat2x2<f32> = load %m
+    %12:mat2x2<f32> = load %m
+    %13:mat2x2<f32> = mul %11, %12
+    %14:mat2x2<f32> = transpose %13
+    %x_34:mat2x2<f32> = let %14
+    %16:vec2<f32> = access %x_30, 0u
+    %17:vec2<f32> = access %x_34, 0u
+    %18:vec2<bool> = eq %16, %17
+    %19:bool = all %18
+    %20:bool = let %19
+    %21:vec2<f32> = access %x_30, 1u
+    %22:vec2<f32> = access %x_34, 1u
+    %23:vec2<bool> = eq %21, %22
+    %24:bool = all %23
+    %25:bool = and %20, %24
+    if %25 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        exit_if  # if_1
+      }
+      $B4: {  # false
+        store %x_GLF_color, vec4<f32>(0.0f)
+        exit_if  # if_1
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %27:void = call %main_1
+    %28:vec4<f32> = load %x_GLF_color
+    %29:main_out = construct %28
+    ret %29
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-transpose-multiply/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-transpose-multiply/0-opt.wgsl.expected.ir.msl
index efdd3b1..206d81f 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-transpose-multiply/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-transpose-multiply/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,66 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+}
+
+%main_1 = func():void {
+  $B2: {
+    %m:ptr<function, mat2x2<f32>, read_write> = var
+    store %m, mat2x2<f32>(vec2<f32>(1.0f, 2.0f), vec2<f32>(3.0f, 4.0f))
+    %4:mat2x2<f32> = load %m
+    %x_26:mat2x2<f32> = let %4
+    %6:mat2x2<f32> = load %m
+    %x_28:mat2x2<f32> = let %6
+    %8:mat2x2<f32> = transpose %x_26
+    %9:mat2x2<f32> = let %8
+    %10:mat2x2<f32> = transpose %x_28
+    %11:mat2x2<f32> = mul %9, %10
+    %x_30:mat2x2<f32> = let %11
+    %13:mat2x2<f32> = load %m
+    %x_31:mat2x2<f32> = let %13
+    %15:mat2x2<f32> = load %m
+    %x_32:mat2x2<f32> = let %15
+    %17:mat2x2<f32> = mul %x_31, %x_32
+    %18:mat2x2<f32> = transpose %17
+    %x_34:mat2x2<f32> = let %18
+    %20:vec2<f32> = access %x_30, 0u
+    %21:vec2<f32> = access %x_34, 0u
+    %22:vec2<bool> = eq %20, %21
+    %23:bool = all %22
+    %24:bool = let %23
+    %25:vec2<f32> = access %x_30, 1u
+    %26:vec2<f32> = access %x_34, 1u
+    %27:vec2<bool> = eq %25, %26
+    %28:bool = all %27
+    %29:bool = and %24, %28
+    if %29 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        exit_if  # if_1
+      }
+      $B4: {  # false
+        store %x_GLF_color, vec4<f32>(0.0f)
+        exit_if  # if_1
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %31:void = call %main_1
+    %32:vec4<f32> = load %x_GLF_color
+    %33:main_out = construct %32
+    ret %33
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-trunc-fract-always-zero/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-trunc-fract-always-zero/0-opt.spvasm.expected.ir.msl
index 1e85d65..59d4cdd 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-trunc-fract-always-zero/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-trunc-fract-always-zero/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,15 +20,15 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_7: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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %f:ptr<function, f32, read_write> = var
     %7:f32 = load_vector_element %gl_FragCoord, 1u
     %8:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
@@ -42,43 +42,46 @@
     %15:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
     %16:f32 = load %15
     %17:bool = eq %14, %16
-    if %17 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    if %17 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         %18:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
         %19:i32 = load %18
         %20:f32 = convert %19
-        %21:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %22:i32 = load %21
-        %23:f32 = convert %22
-        %24:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %25:i32 = load %24
-        %26:f32 = convert %25
-        %27:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %28:i32 = load %27
-        %29:f32 = convert %28
-        %30:vec4<f32> = construct %20, %23, %26, %29
-        store %x_GLF_color, %30
+        %21:f32 = let %20
+        %22:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %23:i32 = load %22
+        %24:f32 = convert %23
+        %25:f32 = let %24
+        %26:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %27:i32 = load %26
+        %28:f32 = convert %27
+        %29:f32 = let %28
+        %30:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+        %31:i32 = load %30
+        %32:f32 = convert %31
+        %33:vec4<f32> = construct %21, %25, %29, %32
+        store %x_GLF_color, %33
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %31:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %32:i32 = load %31
-        %33:f32 = convert %32
-        %34:vec4<f32> = construct %33
-        store %x_GLF_color, %34
+      $B4: {  # false
+        %34:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %35:i32 = load %34
+        %36:f32 = convert %35
+        %37:vec4<f32> = construct %36
+        store %x_GLF_color, %37
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b5 {
-  %b5 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B5: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %37:void = call %main_1
-    %38:vec4<f32> = load %x_GLF_color
-    %39:main_out = construct %38
-    ret %39
+    %40:void = call %main_1
+    %41:vec4<f32> = load %x_GLF_color
+    %42:main_out = construct %41
+    ret %42
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-trunc-fract-always-zero/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-trunc-fract-always-zero/0-opt.wgsl.expected.ir.msl
index 8b491a0..8ca8d47 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-trunc-fract-always-zero/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-trunc-fract-always-zero/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,65 +20,78 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_7: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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %f:ptr<function, f32, read_write> = var
-    %x_35:f32 = load_vector_element %gl_FragCoord, 1u
-    %8:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
-    %x_37:f32 = load %8
-    %10:bool = lt %x_35, %x_37
-    %11:f32 = select 1.0f, 0.10000000149011611938f, %10
-    %12:f32 = trunc %11
-    %13:f32 = fract %12
-    store %f, %13
-    %x_42:f32 = load %f
-    %15:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-    %x_44:f32 = load %15
-    %17:bool = eq %x_42, %x_44
-    if %17 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %18:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %x_50:i32 = load %18
-        %20:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %x_53:i32 = load %20
-        %22:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %x_56:i32 = load %22
-        %24:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %x_59:i32 = load %24
-        %26:f32 = convert %x_50
-        %27:f32 = convert %x_53
-        %28:f32 = convert %x_56
-        %29:f32 = convert %x_59
-        %30:vec4<f32> = construct %26, %27, %28, %29
-        store %x_GLF_color, %30
+    %7:f32 = load_vector_element %gl_FragCoord, 1u
+    %x_35:f32 = let %7
+    %9:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
+    %10:f32 = load %9
+    %x_37:f32 = let %10
+    %12:bool = lt %x_35, %x_37
+    %13:f32 = select 1.0f, 0.10000000149011611938f, %12
+    %14:f32 = trunc %13
+    %15:f32 = fract %14
+    store %f, %15
+    %16:f32 = load %f
+    %x_42:f32 = let %16
+    %18:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
+    %19:f32 = load %18
+    %x_44:f32 = let %19
+    %21:bool = eq %x_42, %x_44
+    if %21 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %22:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+        %23:i32 = load %22
+        %x_50:i32 = let %23
+        %25:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %26:i32 = load %25
+        %x_53:i32 = let %26
+        %28:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %29:i32 = load %28
+        %x_56:i32 = let %29
+        %31:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+        %32:i32 = load %31
+        %x_59:i32 = let %32
+        %34:f32 = convert %x_50
+        %35:f32 = let %34
+        %36:f32 = convert %x_53
+        %37:f32 = let %36
+        %38:f32 = convert %x_56
+        %39:f32 = let %38
+        %40:f32 = convert %x_59
+        %41:vec4<f32> = construct %35, %37, %39, %40
+        store %x_GLF_color, %41
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %31:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %x_63:i32 = load %31
-        %x_64:f32 = convert %x_63
-        %34:vec4<f32> = construct %x_64, %x_64, %x_64, %x_64
-        store %x_GLF_color, %34
+      $B4: {  # false
+        %42:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %43:i32 = load %42
+        %x_63:i32 = let %43
+        %45:f32 = convert %x_63
+        %x_64:f32 = let %45
+        %47:vec4<f32> = construct %x_64, %x_64, %x_64, %x_64
+        store %x_GLF_color, %47
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b5 {
-  %b5 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B5: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %37:void = call %main_1
-    %38:vec4<f32> = load %x_GLF_color
-    %39:main_out = construct %38
-    ret %39
+    %50:void = call %main_1
+    %51:vec4<f32> = load %x_GLF_color
+    %52:main_out = construct %51
+    ret %52
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-types-return-in-main-never-hit/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-types-return-in-main-never-hit/0-opt.spvasm.expected.ir.msl
index c8be0bb..10964de 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-types-return-in-main-never-hit/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-types-return-in-main-never-hit/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:i32 @offset(0)
 }
 
@@ -8,20 +8,20 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %x_24:ptr<function, vec4<f32>, read_write> = var
     store %x_GLF_color, vec4<f32>(0.0f)
     %5:ptr<uniform, i32, read> = access %x_6, 0u
     %6:i32 = load %5
     %7:bool = eq %6, 0i
-    if %7 [t: %b3] {  # if_1
-      %b3 = block {  # true
+    if %7 [t: $B3] {  # if_1
+      $B3: {  # true
         ret
       }
     }
@@ -30,16 +30,16 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b4 {
-  %b4 = block {
+%tint_symbol = @fragment func():main_out {
+  $B4: {
     %9:void = call %main_1
     %10:vec4<f32> = load %x_GLF_color
     %11:main_out = construct %10
     ret %11
   }
 }
-%func_ = func():vec4<f32> -> %b5 {
-  %b5 = block {
+%func_ = func():vec4<f32> {
+  $B5: {
     ret vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
   }
 }
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-types-return-in-main-never-hit/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-types-return-in-main-never-hit/0-opt.wgsl.expected.ir.msl
index b3d0a39..aa47549 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-types-return-in-main-never-hit/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-types-return-in-main-never-hit/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:i32 @offset(0)
 }
 
@@ -8,20 +8,21 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %x_24:ptr<function, vec4<f32>, read_write> = var
     store %x_GLF_color, vec4<f32>(0.0f)
     %5:ptr<uniform, i32, read> = access %x_6, 0u
-    %x_26:i32 = load %5
-    %7:bool = eq %x_26, 0i
-    if %7 [t: %b3] {  # if_1
-      %b3 = block {  # true
+    %6:i32 = load %5
+    %x_26:i32 = let %6
+    %8:bool = eq %x_26, 0i
+    if %8 [t: $B3] {  # if_1
+      $B3: {  # true
         ret
       }
     }
@@ -30,16 +31,16 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b4 {
-  %b4 = block {
-    %9:void = call %main_1
-    %10:vec4<f32> = load %x_GLF_color
-    %11:main_out = construct %10
-    ret %11
+%tint_symbol = @fragment func():main_out {
+  $B4: {
+    %10:void = call %main_1
+    %11:vec4<f32> = load %x_GLF_color
+    %12:main_out = construct %11
+    ret %12
   }
 }
-%func_ = func():vec4<f32> -> %b5 {
-  %b5 = block {
+%func_ = func():vec4<f32> {
+  $B5: {
     ret vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
   }
 }
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-undefined-inversesqrt-reflect/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-undefined-inversesqrt-reflect/0-opt.spvasm.expected.ir.msl
index cc6ba45..0ee5c64 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-undefined-inversesqrt-reflect/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-undefined-inversesqrt-reflect/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -16,14 +16,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_8:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %m24:ptr<function, mat2x2<f32>, read_write> = var
     %a:ptr<function, f32, read_write> = var
     %v2:ptr<function, vec2<f32>, read_write> = var
@@ -33,45 +33,47 @@
     %11:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
     %12:f32 = load %11
     %13:vec2<f32> = construct %10, %12
-    %14:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
-    %15:f32 = load_vector_element %14, 0u
-    %16:f32 = mul %15, 1.0f
-    %17:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %18:f32 = load %17
-    %19:vec2<f32> = construct %16, %18
-    %20:mat2x2<f32> = construct %13, %19
-    store %m24, %20
-    %21:ptr<function, vec2<f32>, read_write> = access %m24, 0u
-    %22:f32 = load_vector_element %21, 0u
-    store %a, %22
+    %14:vec2<f32> = let %13
+    %15:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
+    %16:f32 = load_vector_element %15, 0u
+    %17:f32 = mul %16, 1.0f
+    %18:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %19:f32 = load %18
+    %20:vec2<f32> = construct %17, %19
+    %21:mat2x2<f32> = construct %14, %20
+    store %m24, %21
+    %22:ptr<function, vec2<f32>, read_write> = access %m24, 0u
+    %23:f32 = load_vector_element %22, 0u
+    store %a, %23
     store %v2, vec2<f32>(1.0f)
-    %23:vec2<f32> = load %v2
-    %24:f32 = load %a
-    %25:vec2<f32> = construct %24, 1.0f
-    %26:vec2<f32> = reflect %23, %25
-    store %v3, %26
-    %27:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %28:f32 = load %27
-    %29:f32 = load_vector_element %v3, 0u
-    %30:f32 = load_vector_element %v3, 1u
-    %31:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %32:f32 = load %31
-    %33:vec4<f32> = construct %28, %29, %30, %32
-    store %x_GLF_color, %33
-    %34:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
-    %35:f32 = load_vector_element %34, 1u
-    %36:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %37:f32 = load %36
-    %38:bool = eq %35, %37
-    if %38 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %39:f32 = load_vector_element %x_GLF_color, 0u
-        %40:f32 = load_vector_element %x_GLF_color, 3u
-        %41:vec4<f32> = construct %39, vec2<f32>(0.0f), %40
-        store %x_GLF_color, %41
+    %24:vec2<f32> = load %v2
+    %25:vec2<f32> = let %24
+    %26:f32 = load %a
+    %27:vec2<f32> = construct %26, 1.0f
+    %28:vec2<f32> = reflect %25, %27
+    store %v3, %28
+    %29:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %30:f32 = load %29
+    %31:f32 = load_vector_element %v3, 0u
+    %32:f32 = load_vector_element %v3, 1u
+    %33:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %34:f32 = load %33
+    %35:vec4<f32> = construct %30, %31, %32, %34
+    store %x_GLF_color, %35
+    %36:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
+    %37:f32 = load_vector_element %36, 1u
+    %38:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %39:f32 = load %38
+    %40:bool = eq %37, %39
+    if %40 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %41:f32 = load_vector_element %x_GLF_color, 0u
+        %42:f32 = load_vector_element %x_GLF_color, 3u
+        %43:vec4<f32> = construct %41, vec2<f32>(0.0f), %42
+        store %x_GLF_color, %43
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
@@ -79,12 +81,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %43:void = call %main_1
-    %44:vec4<f32> = load %x_GLF_color
-    %45:main_out = construct %44
-    ret %45
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %45:void = call %main_1
+    %46:vec4<f32> = load %x_GLF_color
+    %47:main_out = construct %46
+    ret %47
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-undefined-inversesqrt-reflect/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-undefined-inversesqrt-reflect/0-opt.wgsl.expected.ir.msl
index 1947d59..27b39e66 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-undefined-inversesqrt-reflect/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-undefined-inversesqrt-reflect/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -16,64 +16,79 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_8:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %m24:ptr<function, mat2x2<f32>, read_write> = var
     %a:ptr<function, f32, read_write> = var
     %v2:ptr<function, vec2<f32>, read_write> = var
     %v3:ptr<function, vec2<f32>, read_write> = var
     %9:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_40:f32 = load %9
-    %11:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_42:f32 = load %11
-    %13:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
-    %x_44:f32 = load_vector_element %13, 0u
-    %15:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_47:f32 = load %15
-    %17:vec2<f32> = construct %x_40, %x_42
-    %18:f32 = mul %x_44, 1.0f
-    %19:vec2<f32> = construct %18, %x_47
-    %20:mat2x2<f32> = construct %17, %19
-    store %m24, %20
-    %x_51:mat2x2<f32> = load %m24
-    %22:f32 = access %x_51, 0u, 0u
-    store %a, %22
+    %10:f32 = load %9
+    %x_40:f32 = let %10
+    %12:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %13:f32 = load %12
+    %x_42:f32 = let %13
+    %15:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
+    %16:f32 = load_vector_element %15, 0u
+    %x_44:f32 = let %16
+    %18:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %19:f32 = load %18
+    %x_47:f32 = let %19
+    %21:vec2<f32> = construct %x_40, %x_42
+    %22:vec2<f32> = let %21
+    %23:f32 = mul %x_44, 1.0f
+    %24:vec2<f32> = construct %23, %x_47
+    %25:mat2x2<f32> = construct %22, %24
+    store %m24, %25
+    %26:mat2x2<f32> = load %m24
+    %x_51:mat2x2<f32> = let %26
+    %28:f32 = access %x_51, 0u, 0u
+    store %a, %28
     store %v2, vec2<f32>(1.0f)
-    %x_53:vec2<f32> = load %v2
-    %x_54:f32 = load %a
-    %x_55:vec2<f32> = construct %x_54, 1.0f
-    %26:vec2<f32> = reflect %x_53, %x_55
-    store %v3, %26
-    %27:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_58:f32 = load %27
-    %x_59:vec2<f32> = load %v3
-    %30:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_61:f32 = load %30
-    %32:f32 = access %x_59, 0u
-    %33:f32 = access %x_59, 1u
-    %34:vec4<f32> = construct %x_58, %32, %33, %x_61
-    store %x_GLF_color, %34
-    %35:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
-    %x_66:f32 = load_vector_element %35, 1u
-    %37:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_68:f32 = load %37
-    %39:bool = eq %x_66, %x_68
-    if %39 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %x_73:vec4<f32> = load %x_GLF_color
-        %41:f32 = access %x_73, 0u
-        %42:f32 = access %x_73, 3u
-        %43:vec4<f32> = construct %41, 0.0f, 0.0f, %42
-        store %x_GLF_color, %43
+    %29:vec2<f32> = load %v2
+    %x_53:vec2<f32> = let %29
+    %31:f32 = load %a
+    %x_54:f32 = let %31
+    %33:vec2<f32> = construct %x_54, 1.0f
+    %x_55:vec2<f32> = let %33
+    %35:vec2<f32> = reflect %x_53, %x_55
+    store %v3, %35
+    %36:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %37:f32 = load %36
+    %x_58:f32 = let %37
+    %39:vec2<f32> = load %v3
+    %x_59:vec2<f32> = let %39
+    %41:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %42:f32 = load %41
+    %x_61:f32 = let %42
+    %44:f32 = access %x_59, 0u
+    %45:f32 = access %x_59, 1u
+    %46:vec4<f32> = construct %x_58, %44, %45, %x_61
+    store %x_GLF_color, %46
+    %47:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
+    %48:f32 = load_vector_element %47, 1u
+    %x_66:f32 = let %48
+    %50:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %51:f32 = load %50
+    %x_68:f32 = let %51
+    %53:bool = eq %x_66, %x_68
+    if %53 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %54:vec4<f32> = load %x_GLF_color
+        %x_73:vec4<f32> = let %54
+        %56:f32 = access %x_73, 0u
+        %57:f32 = access %x_73, 3u
+        %58:vec4<f32> = construct %56, 0.0f, 0.0f, %57
+        store %x_GLF_color, %58
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
@@ -81,12 +96,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %45:void = call %main_1
-    %46:vec4<f32> = load %x_GLF_color
-    %47:main_out = construct %46
-    ret %47
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %60:void = call %main_1
+    %61:vec4<f32> = load %x_GLF_color
+    %62:main_out = construct %61
+    ret %62
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-uninitialized-values-passed-to-function-never-executed/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-uninitialized-values-passed-to-function-never-executed/0-opt.spvasm.expected.ir.msl
index 05b5015..2493d56 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-uninitialized-values-passed-to-function-never-executed/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-uninitialized-values-passed-to-function-never-executed/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -16,20 +16,20 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_9:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%func_struct_S_i11_i1_ = func(%s:ptr<function, S, read_write>, %x:ptr<function, i32, read_write>):void -> %b2 {
-  %b2 = block {
+%func_struct_S_i11_i1_ = func(%s:ptr<function, S, read_write>, %x:ptr<function, i32, read_write>):void {
+  $B2: {
     %6:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
     %7:i32 = load %6
     %8:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
     %9:i32 = load %8
     %10:bool = eq %7, %9
-    if %10 [t: %b3] {  # if_1
-      %b3 = block {  # true
+    if %10 [t: $B3] {  # if_1
+      $B3: {  # true
         ret
       }
     }
@@ -39,8 +39,8 @@
     ret
   }
 }
-%main_1 = func():void -> %b4 {
-  %b4 = block {
+%main_1 = func():void {
+  $B4: {
     %i:ptr<function, i32, read_write> = var
     %arr:ptr<function, array<S, 10>, read_write> = var
     %index:ptr<function, i32, read_write> = var
@@ -49,109 +49,115 @@
     %param_2:ptr<function, S, read_write> = var
     %param_3:ptr<function, i32, read_write> = var
     store %i, 0i
-    loop [b: %b5, c: %b6] {  # loop_1
-      %b5 = block {  # body
+    loop [b: $B5, c: $B6] {  # loop_1
+      $B5: {  # body
         %21:i32 = load %i
         %22:bool = lt %21, 10i
-        if %22 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
+        if %22 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
             exit_if  # if_2
           }
-          %b8 = block {  # false
+          $B8: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_46:i32 = load %i
-        %24:ptr<function, i32, read_write> = access %arr, %x_46, 0u
-        store %24, 0i
-        continue %b6
+        %23:i32 = load %i
+        %x_46:i32 = let %23
+        %25:ptr<function, i32, read_write> = access %arr, %x_46, 0u
+        store %25, 0i
+        continue  # -> $B6
       }
-      %b6 = block {  # continuing
-        %25:i32 = load %i
-        %26:i32 = add %25, 1i
-        store %i, %26
-        next_iteration %b5
+      $B6: {  # continuing
+        %26:i32 = load %i
+        %27:i32 = add %26, 1i
+        store %i, %27
+        next_iteration  # -> $B5
       }
     }
-    %27:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-    %28:i32 = load %27
-    %29:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-    %30:i32 = load %29
-    %31:bool = eq %28, %30
-    if %31 [t: %b9, f: %b10] {  # if_3
-      %b9 = block {  # true
-        %x_58:i32 = load %index
+    %28:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+    %29:i32 = load %28
+    %30:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+    %31:i32 = load %30
+    %32:bool = eq %29, %31
+    if %32 [t: $B9, f: $B10] {  # if_3
+      $B9: {  # true
         %33:i32 = load %index
-        %34:ptr<function, S, read_write> = access %arr, %33
-        %35:S = load %34
-        store %param, %35
-        %36:i32 = load %index
-        store %param_1, %36
-        %37:void = call %func_struct_S_i11_i1_, %param, %param_1
-        %38:ptr<function, S, read_write> = access %arr, %x_58
-        %39:S = load %param
-        store %38, %39
+        %x_58:i32 = let %33
+        %35:i32 = load %index
+        %36:ptr<function, S, read_write> = access %arr, %35
+        %37:S = load %36
+        store %param, %37
+        %38:i32 = load %index
+        store %param_1, %38
+        %39:void = call %func_struct_S_i11_i1_, %param, %param_1
+        %40:ptr<function, S, read_write> = access %arr, %x_58
+        %41:S = load %param
+        store %40, %41
         exit_if  # if_3
       }
-      %b10 = block {  # false
-        %40:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %x_66:i32 = load %40
-        %42:ptr<function, S, read_write> = access %arr, %x_66
-        %43:S = load %42
-        store %param_2, %43
-        %44:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %45:i32 = load %44
-        store %param_3, %45
-        %46:void = call %func_struct_S_i11_i1_, %param_2, %param_3
-        %47:ptr<function, S, read_write> = access %arr, %x_66
-        %48:S = load %param_2
-        store %47, %48
+      $B10: {  # false
+        %42:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+        %43:i32 = load %42
+        %x_66:i32 = let %43
+        %45:ptr<function, S, read_write> = access %arr, %x_66
+        %46:S = load %45
+        store %param_2, %46
+        %47:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %48:i32 = load %47
+        store %param_3, %48
+        %49:void = call %func_struct_S_i11_i1_, %param_2, %param_3
+        %50:ptr<function, S, read_write> = access %arr, %x_66
+        %51:S = load %param_2
+        store %50, %51
         exit_if  # if_3
       }
     }
-    %49:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-    %50:i32 = load %49
-    %51:ptr<function, i32, read_write> = access %arr, %50, 0u
-    %52:i32 = load %51
-    %53:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-    %54:i32 = load %53
-    %55:bool = eq %52, %54
-    if %55 [t: %b11, f: %b12] {  # if_4
-      %b11 = block {  # true
-        %56:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %57:i32 = load %56
-        %58:f32 = convert %57
-        %59:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+    %52:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+    %53:i32 = load %52
+    %54:ptr<function, i32, read_write> = access %arr, %53, 0u
+    %55:i32 = load %54
+    %56:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+    %57:i32 = load %56
+    %58:bool = eq %55, %57
+    if %58 [t: $B11, f: $B12] {  # if_4
+      $B11: {  # true
+        %59:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
         %60:i32 = load %59
         %61:f32 = convert %60
-        %62:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %63:i32 = load %62
-        %64:f32 = convert %63
-        %65:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %66:i32 = load %65
-        %67:f32 = convert %66
-        %68:vec4<f32> = construct %58, %61, %64, %67
-        store %x_GLF_color, %68
+        %62:f32 = let %61
+        %63:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+        %64:i32 = load %63
+        %65:f32 = convert %64
+        %66:f32 = let %65
+        %67:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+        %68:i32 = load %67
+        %69:f32 = convert %68
+        %70:f32 = let %69
+        %71:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %72:i32 = load %71
+        %73:f32 = convert %72
+        %74:vec4<f32> = construct %62, %66, %70, %73
+        store %x_GLF_color, %74
         exit_if  # if_4
       }
-      %b12 = block {  # false
-        %69:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %70:i32 = load %69
-        %71:f32 = convert %70
-        %72:vec4<f32> = construct %71
-        store %x_GLF_color, %72
+      $B12: {  # false
+        %75:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+        %76:i32 = load %75
+        %77:f32 = convert %76
+        %78:vec4<f32> = construct %77
+        store %x_GLF_color, %78
         exit_if  # if_4
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b13 {
-  %b13 = block {
-    %74:void = call %main_1
-    %75:vec4<f32> = load %x_GLF_color
-    %76:main_out = construct %75
-    ret %76
+%tint_symbol = @fragment func():main_out {
+  $B13: {
+    %80:void = call %main_1
+    %81:vec4<f32> = load %x_GLF_color
+    %82:main_out = construct %81
+    ret %82
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-uninitialized-values-passed-to-function-never-executed/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-uninitialized-values-passed-to-function-never-executed/0-opt.wgsl.expected.ir.msl
index e6217f7..f47614c 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-uninitialized-values-passed-to-function-never-executed/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-uninitialized-values-passed-to-function-never-executed/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -16,31 +16,34 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_9:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%func_struct_S_i11_i1_ = func(%s:ptr<function, S, read_write>, %x:ptr<function, i32, read_write>):void -> %b2 {
-  %b2 = block {
+%func_struct_S_i11_i1_ = func(%s:ptr<function, S, read_write>, %x:ptr<function, i32, read_write>):void {
+  $B2: {
     %6:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-    %x_103:i32 = load %6
-    %8:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-    %x_105:i32 = load %8
-    %10:bool = eq %x_103, %x_105
-    if %10 [t: %b3] {  # if_1
-      %b3 = block {  # true
+    %7:i32 = load %6
+    %x_103:i32 = let %7
+    %9:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+    %10:i32 = load %9
+    %x_105:i32 = let %10
+    %12:bool = eq %x_103, %x_105
+    if %12 [t: $B3] {  # if_1
+      $B3: {  # true
         ret
       }
     }
-    %x_109:i32 = load %x
-    %12:ptr<function, i32, read_write> = access %s, 0u
-    store %12, %x_109
+    %13:i32 = load %x
+    %x_109:i32 = let %13
+    %15:ptr<function, i32, read_write> = access %s, 0u
+    store %15, %x_109
     ret
   }
 }
-%main_1 = func():void -> %b4 {
-  %b4 = block {
+%main_1 = func():void {
+  $B4: {
     %i:ptr<function, i32, read_write> = var
     %arr:ptr<function, array<S, 10>, read_write> = var
     %index:ptr<function, i32, read_write> = var
@@ -49,108 +52,133 @@
     %param_2:ptr<function, S, read_write> = var
     %param_3:ptr<function, i32, read_write> = var
     store %i, 0i
-    loop [b: %b5, c: %b6] {  # loop_1
-      %b5 = block {  # body
-        %x_43:i32 = load %i
-        %22:bool = lt %x_43, 10i
-        if %22 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
+    loop [b: $B5, c: $B6] {  # loop_1
+      $B5: {  # body
+        %24:i32 = load %i
+        %x_43:i32 = let %24
+        %26:bool = lt %x_43, 10i
+        if %26 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
             exit_if  # if_2
           }
-          %b8 = block {  # false
+          $B8: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_46:i32 = load %i
-        %24:ptr<function, i32, read_write> = access %arr, %x_46, 0u
-        store %24, 0i
-        continue %b6
+        %27:i32 = load %i
+        %x_46:i32 = let %27
+        %29:ptr<function, i32, read_write> = access %arr, %x_46, 0u
+        store %29, 0i
+        continue  # -> $B6
       }
-      %b6 = block {  # continuing
-        %x_48:i32 = load %i
-        %26:i32 = add %x_48, 1i
-        store %i, %26
-        next_iteration %b5
+      $B6: {  # continuing
+        %30:i32 = load %i
+        %x_48:i32 = let %30
+        %32:i32 = add %x_48, 1i
+        store %i, %32
+        next_iteration  # -> $B5
       }
     }
-    %27:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-    %x_51:i32 = load %27
-    %29:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-    %x_53:i32 = load %29
-    %31:bool = eq %x_51, %x_53
-    if %31 [t: %b9, f: %b10] {  # if_3
-      %b9 = block {  # true
-        %x_58:i32 = load %index
-        %33:ptr<function, S, read_write> = access %arr, %x_58
-        %x_60:S = load %33
+    %33:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+    %34:i32 = load %33
+    %x_51:i32 = let %34
+    %36:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+    %37:i32 = load %36
+    %x_53:i32 = let %37
+    %39:bool = eq %x_51, %x_53
+    if %39 [t: $B9, f: $B10] {  # if_3
+      $B9: {  # true
+        %40:i32 = load %index
+        %x_58:i32 = let %40
+        %42:ptr<function, S, read_write> = access %arr, %x_58
+        %43:S = load %42
+        %x_60:S = let %43
         store %param, %x_60
-        %x_61:i32 = load %index
+        %45:i32 = load %index
+        %x_61:i32 = let %45
         store %param_1, %x_61
-        %36:void = call %func_struct_S_i11_i1_, %param, %param_1
-        %x_63:S = load %param
-        %38:ptr<function, S, read_write> = access %arr, %x_58
-        store %38, %x_63
+        %47:void = call %func_struct_S_i11_i1_, %param, %param_1
+        %48:S = load %param
+        %x_63:S = let %48
+        %50:ptr<function, S, read_write> = access %arr, %x_58
+        store %50, %x_63
         exit_if  # if_3
       }
-      %b10 = block {  # false
-        %39:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %x_66:i32 = load %39
-        %41:ptr<function, S, read_write> = access %arr, %x_66
-        %x_68:S = load %41
+      $B10: {  # false
+        %51:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+        %52:i32 = load %51
+        %x_66:i32 = let %52
+        %54:ptr<function, S, read_write> = access %arr, %x_66
+        %55:S = load %54
+        %x_68:S = let %55
         store %param_2, %x_68
-        %43:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %x_70:i32 = load %43
+        %57:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %58:i32 = load %57
+        %x_70:i32 = let %58
         store %param_3, %x_70
-        %45:void = call %func_struct_S_i11_i1_, %param_2, %param_3
-        %x_72:S = load %param_2
-        %47:ptr<function, S, read_write> = access %arr, %x_66
-        store %47, %x_72
+        %60:void = call %func_struct_S_i11_i1_, %param_2, %param_3
+        %61:S = load %param_2
+        %x_72:S = let %61
+        %63:ptr<function, S, read_write> = access %arr, %x_66
+        store %63, %x_72
         exit_if  # if_3
       }
     }
-    %48:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-    %x_75:i32 = load %48
-    %50:ptr<function, i32, read_write> = access %arr, %x_75, 0u
-    %x_77:i32 = load %50
-    %52:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-    %x_79:i32 = load %52
-    %54:bool = eq %x_77, %x_79
-    if %54 [t: %b11, f: %b12] {  # if_4
-      %b11 = block {  # true
-        %55:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %x_85:i32 = load %55
-        %57:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %x_88:i32 = load %57
-        %59:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %x_91:i32 = load %59
-        %61:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %x_94:i32 = load %61
-        %63:f32 = convert %x_85
-        %64:f32 = convert %x_88
-        %65:f32 = convert %x_91
-        %66:f32 = convert %x_94
-        %67:vec4<f32> = construct %63, %64, %65, %66
-        store %x_GLF_color, %67
+    %64:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+    %65:i32 = load %64
+    %x_75:i32 = let %65
+    %67:ptr<function, i32, read_write> = access %arr, %x_75, 0u
+    %68:i32 = load %67
+    %x_77:i32 = let %68
+    %70:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+    %71:i32 = load %70
+    %x_79:i32 = let %71
+    %73:bool = eq %x_77, %x_79
+    if %73 [t: $B11, f: $B12] {  # if_4
+      $B11: {  # true
+        %74:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %75:i32 = load %74
+        %x_85:i32 = let %75
+        %77:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+        %78:i32 = load %77
+        %x_88:i32 = let %78
+        %80:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+        %81:i32 = load %80
+        %x_91:i32 = let %81
+        %83:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %84:i32 = load %83
+        %x_94:i32 = let %84
+        %86:f32 = convert %x_85
+        %87:f32 = let %86
+        %88:f32 = convert %x_88
+        %89:f32 = let %88
+        %90:f32 = convert %x_91
+        %91:f32 = let %90
+        %92:f32 = convert %x_94
+        %93:vec4<f32> = construct %87, %89, %91, %92
+        store %x_GLF_color, %93
         exit_if  # if_4
       }
-      %b12 = block {  # false
-        %68:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %x_98:i32 = load %68
-        %x_99:f32 = convert %x_98
-        %71:vec4<f32> = construct %x_99, %x_99, %x_99, %x_99
-        store %x_GLF_color, %71
+      $B12: {  # false
+        %94:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+        %95:i32 = load %94
+        %x_98:i32 = let %95
+        %97:f32 = convert %x_98
+        %x_99:f32 = let %97
+        %99:vec4<f32> = construct %x_99, %x_99, %x_99, %x_99
+        store %x_GLF_color, %99
         exit_if  # if_4
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b13 {
-  %b13 = block {
-    %73:void = call %main_1
-    %74:vec4<f32> = load %x_GLF_color
-    %75:main_out = construct %74
-    ret %75
+%tint_symbol = @fragment func():main_out {
+  $B13: {
+    %101:void = call %main_1
+    %102:vec4<f32> = load %x_GLF_color
+    %103:main_out = construct %102
+    ret %103
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-unpack-unorm-mix-always-one/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-unpack-unorm-mix-always-one/0-opt.spvasm.expected.ir.msl
index cf36435..ae7455e 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-unpack-unorm-mix-always-one/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-unpack-unorm-mix-always-one/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:u32 @offset(0)
 }
 
@@ -28,80 +28,95 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_8:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_10:ptr<uniform, buf2, read> = var @binding_point(0, 2)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %v:ptr<function, vec4<f32>, read_write> = var
     %7:ptr<uniform, u32, read> = access %x_6, 0u, 0i, 0u
     %8:u32 = load %7
-    %9:ptr<uniform, u32, read> = access %x_6, 0u, 0i, 0u
-    %10:u32 = load %9
-    %11:u32 = select %10, 92382u, true
-    %12:u32 = div %8, %11
-    %13:vec4<f32> = unpack4x8unorm %12
-    store %v, %13
-    %14:vec4<f32> = load %v
-    %15:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-    %16:i32 = load %15
-    %17:f32 = convert %16
+    %9:u32 = let %8
+    %10:ptr<uniform, u32, read> = access %x_6, 0u, 0i, 0u
+    %11:u32 = load %10
+    %12:u32 = select %11, 92382u, true
+    %13:u32 = call %tint_div_u32, %9, %12
+    %15:vec4<f32> = unpack4x8unorm %13
+    store %v, %15
+    %16:vec4<f32> = load %v
+    %17:vec4<f32> = let %16
     %18:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
     %19:i32 = load %18
     %20:f32 = convert %19
-    %21:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-    %22:i32 = load %21
-    %23:f32 = convert %22
-    %24:ptr<uniform, f32, read> = access %x_10, 0u, 1i, 0u
-    %25:f32 = load %24
-    %26:ptr<uniform, f32, read> = access %x_10, 0u, 2i, 0u
-    %27:f32 = load %26
-    %28:f32 = div %25, %27
-    %29:vec4<f32> = construct %17, %20, %23, %28
-    %30:f32 = distance %14, %29
-    %31:ptr<uniform, f32, read> = access %x_10, 0u, 0i, 0u
+    %21:f32 = let %20
+    %22:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+    %23:i32 = load %22
+    %24:f32 = convert %23
+    %25:f32 = let %24
+    %26:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+    %27:i32 = load %26
+    %28:f32 = convert %27
+    %29:ptr<uniform, f32, read> = access %x_10, 0u, 1i, 0u
+    %30:f32 = load %29
+    %31:ptr<uniform, f32, read> = access %x_10, 0u, 2i, 0u
     %32:f32 = load %31
-    %33:bool = lt %30, %32
-    if %33 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %34:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-        %35:i32 = load %34
-        %36:f32 = convert %35
-        %37:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-        %38:i32 = load %37
-        %39:f32 = convert %38
-        %40:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-        %41:i32 = load %40
-        %42:f32 = convert %41
-        %43:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+    %33:f32 = div %30, %32
+    %34:vec4<f32> = construct %21, %25, %28, %33
+    %35:f32 = distance %17, %34
+    %36:ptr<uniform, f32, read> = access %x_10, 0u, 0i, 0u
+    %37:f32 = load %36
+    %38:bool = lt %35, %37
+    if %38 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %39:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+        %40:i32 = load %39
+        %41:f32 = convert %40
+        %42:f32 = let %41
+        %43:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
         %44:i32 = load %43
         %45:f32 = convert %44
-        %46:vec4<f32> = construct %36, %39, %42, %45
-        store %x_GLF_color, %46
-        exit_if  # if_1
-      }
-      %b4 = block {  # false
+        %46:f32 = let %45
         %47:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
         %48:i32 = load %47
         %49:f32 = convert %48
-        %50:vec4<f32> = construct %49
-        store %x_GLF_color, %50
+        %50:f32 = let %49
+        %51:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+        %52:i32 = load %51
+        %53:f32 = convert %52
+        %54:vec4<f32> = construct %42, %46, %50, %53
+        store %x_GLF_color, %54
+        exit_if  # if_1
+      }
+      $B4: {  # false
+        %55:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+        %56:i32 = load %55
+        %57:f32 = convert %56
+        %58:vec4<f32> = construct %57
+        store %x_GLF_color, %58
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %52:void = call %main_1
-    %53:vec4<f32> = load %x_GLF_color
-    %54:main_out = construct %53
-    ret %54
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %60:void = call %main_1
+    %61:vec4<f32> = load %x_GLF_color
+    %62:main_out = construct %61
+    ret %62
+  }
+}
+%tint_div_u32 = func(%lhs:u32, %rhs:u32):u32 {
+  $B6: {
+    %65:bool = eq %rhs, 0u
+    %66:u32 = select %rhs, 1u, %65
+    %67:u32 = div %lhs, %66
+    ret %67
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-unpack-unorm-mix-always-one/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-unpack-unorm-mix-always-one/0-opt.wgsl.expected.ir.msl
index eb67880..5daef5c 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-unpack-unorm-mix-always-one/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-unpack-unorm-mix-always-one/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:u32 @offset(0)
 }
 
@@ -28,80 +28,108 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_8:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_10:ptr<uniform, buf2, read> = var @binding_point(0, 2)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %v:ptr<function, vec4<f32>, read_write> = var
     %7:ptr<uniform, u32, read> = access %x_6, 0u, 0i, 0u
-    %x_39:u32 = load %7
-    %9:ptr<uniform, u32, read> = access %x_6, 0u, 0i, 0u
-    %x_41:u32 = load %9
-    %11:u32 = select %x_41, 92382u, true
-    %12:u32 = div %x_39, %11
-    %13:vec4<f32> = unpack4x8unorm %12
-    store %v, %13
-    %x_45:vec4<f32> = load %v
-    %15:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-    %x_47:i32 = load %15
-    %17:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-    %x_50:i32 = load %17
+    %8:u32 = load %7
+    %x_39:u32 = let %8
+    %10:ptr<uniform, u32, read> = access %x_6, 0u, 0i, 0u
+    %11:u32 = load %10
+    %x_41:u32 = let %11
+    %13:u32 = select %x_41, 92382u, true
+    %14:u32 = call %tint_div_u32, %x_39, %13
+    %16:vec4<f32> = unpack4x8unorm %14
+    store %v, %16
+    %17:vec4<f32> = load %v
+    %x_45:vec4<f32> = let %17
     %19:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-    %x_53:i32 = load %19
-    %21:ptr<uniform, f32, read> = access %x_10, 0u, 1i, 0u
-    %x_56:f32 = load %21
-    %23:ptr<uniform, f32, read> = access %x_10, 0u, 2i, 0u
-    %x_58:f32 = load %23
-    %25:ptr<uniform, f32, read> = access %x_10, 0u, 0i, 0u
-    %x_63:f32 = load %25
-    %27:f32 = convert %x_47
-    %28:f32 = convert %x_50
-    %29:f32 = convert %x_53
-    %30:f32 = div %x_56, %x_58
-    %31:vec4<f32> = construct %27, %28, %29, %30
-    %32:f32 = distance %x_45, %31
-    %33:bool = lt %32, %x_63
-    if %33 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %34:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-        %x_69:i32 = load %34
-        %36:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-        %x_72:i32 = load %36
-        %38:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-        %x_75:i32 = load %38
-        %40:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
-        %x_78:i32 = load %40
-        %42:f32 = convert %x_69
-        %43:f32 = convert %x_72
-        %44:f32 = convert %x_75
-        %45:f32 = convert %x_78
-        %46:vec4<f32> = construct %42, %43, %44, %45
-        store %x_GLF_color, %46
+    %20:i32 = load %19
+    %x_47:i32 = let %20
+    %22:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+    %23:i32 = load %22
+    %x_50:i32 = let %23
+    %25:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+    %26:i32 = load %25
+    %x_53:i32 = let %26
+    %28:ptr<uniform, f32, read> = access %x_10, 0u, 1i, 0u
+    %29:f32 = load %28
+    %x_56:f32 = let %29
+    %31:ptr<uniform, f32, read> = access %x_10, 0u, 2i, 0u
+    %32:f32 = load %31
+    %x_58:f32 = let %32
+    %34:ptr<uniform, f32, read> = access %x_10, 0u, 0i, 0u
+    %35:f32 = load %34
+    %x_63:f32 = let %35
+    %37:f32 = convert %x_47
+    %38:f32 = let %37
+    %39:f32 = convert %x_50
+    %40:f32 = let %39
+    %41:f32 = convert %x_53
+    %42:f32 = div %x_56, %x_58
+    %43:vec4<f32> = construct %38, %40, %41, %42
+    %44:f32 = distance %x_45, %43
+    %45:bool = lt %44, %x_63
+    if %45 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %46:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+        %47:i32 = load %46
+        %x_69:i32 = let %47
+        %49:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+        %50:i32 = load %49
+        %x_72:i32 = let %50
+        %52:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+        %53:i32 = load %52
+        %x_75:i32 = let %53
+        %55:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
+        %56:i32 = load %55
+        %x_78:i32 = let %56
+        %58:f32 = convert %x_69
+        %59:f32 = let %58
+        %60:f32 = convert %x_72
+        %61:f32 = let %60
+        %62:f32 = convert %x_75
+        %63:f32 = let %62
+        %64:f32 = convert %x_78
+        %65:vec4<f32> = construct %59, %61, %63, %64
+        store %x_GLF_color, %65
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %47:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
-        %x_82:i32 = load %47
-        %x_83:f32 = convert %x_82
-        %50:vec4<f32> = construct %x_83, %x_83, %x_83, %x_83
-        store %x_GLF_color, %50
+      $B4: {  # false
+        %66:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
+        %67:i32 = load %66
+        %x_82:i32 = let %67
+        %69:f32 = convert %x_82
+        %x_83:f32 = let %69
+        %71:vec4<f32> = construct %x_83, %x_83, %x_83, %x_83
+        store %x_GLF_color, %71
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %52:void = call %main_1
-    %53:vec4<f32> = load %x_GLF_color
-    %54:main_out = construct %53
-    ret %54
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %73:void = call %main_1
+    %74:vec4<f32> = load %x_GLF_color
+    %75:main_out = construct %74
+    ret %75
+  }
+}
+%tint_div_u32 = func(%lhs:u32, %rhs:u32):u32 {
+  $B6: {
+    %78:bool = eq %rhs, 0u
+    %79:u32 = select %rhs, 1u, %78
+    %80:u32 = div %lhs, %79
+    ret %80
   }
 }
 
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
index c8660d5..0c8e028 100644
--- 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
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,186 +20,233 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%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_41:f32 = convert %9
-    %11:vec4<f32> = construct %x_41, 0.0f, 0.0f, 0.0f
-    %12:vec4<f32> = construct 0.0f, %x_41, 0.0f, 0.0f
-    %13:vec4<f32> = construct 0.0f, 0.0f, %x_41, 0.0f
-    %14:vec4<f32> = construct 0.0f, 0.0f, 0.0f, %x_41
-    %15:mat4x4<f32> = construct %11, %12, %13, %14
-    store %m0, %15
-    %16:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %17:i32 = load %16
-    store %c, %17
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %18:i32 = load %c
-        %19:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %20:i32 = load %19
-        %21:bool = lt %18, %20
-        if %21 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    %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 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %22:mat4x4<f32> = load %m0
-        store %m1, %22
-        %x_59:i32 = load %c
-        %24:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-        %x_61:i32 = load %24
-        %26:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %x_64:i32 = load %26
-        %28:i32 = mod %x_59, %x_61
-        %29:ptr<function, vec4<f32>, read_write> = access %m1, %28
-        %30:ptr<uniform, f32, read> = access %x_10, 0u, 0i, 0u
-        %31:f32 = load %30
-        store_vector_element %29, %x_64, %31
-        %x_68:i32 = load %c
-        %33:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-        %x_70:i32 = load %33
-        %35:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %x_73:i32 = load %35
-        %37:i32 = mod %x_68, %x_70
-        %38:ptr<function, vec4<f32>, read_write> = access %m0, %37
-        %39:ptr<uniform, f32, read> = access %x_10, 0u, 0i, 0u
-        %40:f32 = load %39
-        store_vector_element %38, %x_73, %40
-        continue %b4
+        %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 = block {  # continuing
-        %41:i32 = load %c
-        %42:i32 = add %41, 1i
-        store %c, %42
-        next_iteration %b3
+      $B4: {  # continuing
+        %52:i32 = load %c
+        %53:i32 = add %52, 1i
+        store %c, %53
+        next_iteration  # -> $B3
       }
     }
-    %43:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %44:i32 = load %43
-    %45:f32 = convert %44
-    %46:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %47:i32 = load %46
-    %48:f32 = convert %47
-    %49:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %50:i32 = load %49
-    %51:f32 = convert %50
-    %52:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %53:i32 = load %52
-    %54:f32 = convert %53
-    %55:vec4<f32> = construct %45, %48, %51, %54
-    %56:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %57:i32 = load %56
-    %58:f32 = convert %57
-    %59:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %60:i32 = load %59
-    %61:f32 = convert %60
+    %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:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %66:i32 = load %65
-    %67:f32 = convert %66
-    %68:vec4<f32> = construct %58, %61, %64, %67
-    %69:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %70:i32 = load %69
-    %71:f32 = convert %70
-    %72:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %73:i32 = load %72
-    %74:f32 = convert %73
-    %75:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %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:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %79:i32 = load %78
-    %80:f32 = convert %79
-    %81:vec4<f32> = construct %71, %74, %77, %80
-    %82:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %83:i32 = load %82
-    %84:f32 = convert %83
-    %85:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %86:i32 = load %85
-    %87:f32 = convert %86
+    %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:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %92:i32 = load %91
-    %93:f32 = convert %92
-    %94:vec4<f32> = construct %84, %87, %90, %93
-    %x_132:mat4x4<f32> = construct %55, %68, %81, %94
-    %96:ptr<function, vec4<f32>, read_write> = access %m0, 0u
-    %97:vec4<f32> = load %96
-    %98:vec4<f32> = access %x_132, 0u
-    %99:vec4<bool> = eq %97, %98
-    %100:bool = all %99
-    %101:ptr<function, vec4<f32>, read_write> = access %m0, 1u
-    %102:vec4<f32> = load %101
-    %103:vec4<f32> = access %x_132, 1u
-    %104:vec4<bool> = eq %102, %103
-    %105:bool = all %104
-    %106:bool = and %100, %105
-    %107:ptr<function, vec4<f32>, read_write> = access %m0, 2u
-    %108:vec4<f32> = load %107
-    %109:vec4<f32> = access %x_132, 2u
-    %110:vec4<bool> = eq %108, %109
-    %111:bool = all %110
-    %112:bool = and %106, %111
-    %113:ptr<function, vec4<f32>, read_write> = access %m0, 3u
-    %114:vec4<f32> = load %113
-    %115:vec4<f32> = access %x_132, 3u
-    %116:vec4<bool> = eq %114, %115
-    %117:bool = all %116
-    %118:bool = and %112, %117
-    if %118 [t: %b7, f: %b8] {  # if_2
-      %b7 = block {  # true
-        %119:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %120:i32 = load %119
-        %121:f32 = convert %120
-        %122:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %123:i32 = load %122
-        %124:f32 = convert %123
-        %125:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %126:i32 = load %125
-        %127:f32 = convert %126
-        %128:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %129:i32 = load %128
-        %130:f32 = convert %129
-        %131:vec4<f32> = construct %121, %124, %127, %130
-        store %x_GLF_color, %131
+    %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 = block {  # false
-        %132:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %133:i32 = load %132
-        %134:f32 = convert %133
-        %135:vec4<f32> = construct %134
-        store %x_GLF_color, %135
+      $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 {
-  %b9 = block {
-    %137:void = call %main_1
-    %138:vec4<f32> = load %x_GLF_color
-    %139:main_out = construct %138
-    ret %139
+%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
   }
 }
 
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
index 8f8a8e0..048ba1a 100644
--- 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
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,183 +20,261 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%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
-    %x_40:i32 = load %8
-    %x_41:f32 = convert %x_40
-    %11:vec4<f32> = construct %x_41, 0.0f, 0.0f, 0.0f
-    %12:vec4<f32> = construct 0.0f, %x_41, 0.0f, 0.0f
-    %13:vec4<f32> = construct 0.0f, 0.0f, %x_41, 0.0f
-    %14:vec4<f32> = construct 0.0f, 0.0f, 0.0f, %x_41
-    %15:mat4x4<f32> = construct %11, %12, %13, %14
-    store %m0, %15
-    %16:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_48:i32 = load %16
+    %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 = block {  # body
-        %x_53:i32 = load %c
-        %19:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_55:i32 = load %19
-        %21:bool = lt %x_53, %x_55
-        if %21 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    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 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_58:mat4x4<f32> = load %m0
+        %30:mat4x4<f32> = load %m0
+        %x_58:mat4x4<f32> = let %30
         store %m1, %x_58
-        %x_59:i32 = load %c
-        %24:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-        %x_61:i32 = load %24
-        %26:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %x_64:i32 = load %26
-        %28:ptr<uniform, f32, read> = access %x_10, 0u, 0i, 0u
-        %x_66:f32 = load %28
-        %30:i32 = mod %x_59, %x_61
-        %31:ptr<function, vec4<f32>, read_write> = access %m1, %30
-        store_vector_element %31, %x_64, %x_66
-        %x_68:i32 = load %c
-        %33:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-        %x_70:i32 = load %33
-        %35:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %x_73:i32 = load %35
-        %37:ptr<uniform, f32, read> = access %x_10, 0u, 0i, 0u
-        %x_75:f32 = load %37
-        %39:i32 = mod %x_68, %x_70
-        %40:ptr<function, vec4<f32>, read_write> = access %m0, %39
-        store_vector_element %40, %x_73, %x_75
-        continue %b4
+        %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 = block {  # continuing
-        %x_77:i32 = load %c
-        %42:i32 = add %x_77, 1i
-        store %c, %42
-        next_iteration %b3
+      $B4: {  # continuing
+        %59:i32 = load %c
+        %x_77:i32 = let %59
+        %61:i32 = add %x_77, 1i
+        store %c, %61
+        next_iteration  # -> $B3
       }
     }
-    %x_79:mat4x4<f32> = load %m0
-    %44:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_81:i32 = load %44
-    %46:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_84:i32 = load %46
-    %48:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_87:i32 = load %48
-    %50:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_90:i32 = load %50
-    %52:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_93:i32 = load %52
-    %54:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_96:i32 = load %54
-    %56:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_99:i32 = load %56
-    %58:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_102:i32 = load %58
-    %60:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_105:i32 = load %60
-    %62:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_108:i32 = load %62
+    %62:mat4x4<f32> = load %m0
+    %x_79:mat4x4<f32> = let %62
     %64:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_111:i32 = load %64
-    %66:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_114:i32 = load %66
-    %68:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_117:i32 = load %68
-    %70:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_120:i32 = load %70
-    %72:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_123:i32 = load %72
-    %74:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_126:i32 = load %74
-    %76:f32 = convert %x_81
-    %77:f32 = convert %x_84
-    %78:f32 = convert %x_87
-    %79:f32 = convert %x_90
-    %80:vec4<f32> = construct %76, %77, %78, %79
-    %81:f32 = convert %x_93
-    %82:f32 = convert %x_96
-    %83:f32 = convert %x_99
-    %84:f32 = convert %x_102
-    %85:vec4<f32> = construct %81, %82, %83, %84
-    %86:f32 = convert %x_105
-    %87:f32 = convert %x_108
-    %88:f32 = convert %x_111
-    %89:f32 = convert %x_114
-    %90:vec4<f32> = construct %86, %87, %88, %89
-    %91:f32 = convert %x_117
-    %92:f32 = convert %x_120
-    %93:f32 = convert %x_123
-    %94:f32 = convert %x_126
-    %95:vec4<f32> = construct %91, %92, %93, %94
-    %x_132:mat4x4<f32> = construct %80, %85, %90, %95
-    %97:vec4<f32> = access %x_79, 0u
-    %98:vec4<f32> = access %x_132, 0u
-    %99:vec4<bool> = eq %97, %98
-    %100:bool = all %99
-    %101:vec4<f32> = access %x_79, 1u
-    %102:vec4<f32> = access %x_132, 1u
-    %103:vec4<bool> = eq %101, %102
-    %104:bool = all %103
-    %105:bool = and %100, %104
-    %106:vec4<f32> = access %x_79, 2u
-    %107:vec4<f32> = access %x_132, 2u
-    %108:vec4<bool> = eq %106, %107
-    %109:bool = all %108
-    %110:bool = and %105, %109
-    %111:vec4<f32> = access %x_79, 3u
-    %112:vec4<f32> = access %x_132, 3u
-    %113:vec4<bool> = eq %111, %112
-    %114:bool = all %113
-    %115:bool = and %110, %114
-    if %115 [t: %b7, f: %b8] {  # if_2
-      %b7 = block {  # true
-        %116:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %x_156:i32 = load %116
-        %118:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_159:i32 = load %118
-        %120:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_162:i32 = load %120
-        %122:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %x_165:i32 = load %122
-        %124:f32 = convert %x_156
-        %125:f32 = convert %x_159
-        %126:f32 = convert %x_162
-        %127:f32 = convert %x_165
-        %128:vec4<f32> = construct %124, %125, %126, %127
-        store %x_GLF_color, %128
+    %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 = block {  # false
-        %129:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_169:i32 = load %129
-        %x_170:f32 = convert %x_169
-        %132:vec4<f32> = construct %x_170, %x_170, %x_170, %x_170
-        store %x_GLF_color, %132
+      $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 {
-  %b9 = block {
-    %134:void = call %main_1
-    %135:vec4<f32> = load %x_GLF_color
-    %136:main_out = construct %135
-    ret %136
+%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
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-value-inst-combine-select-value-tracking-flip-bits/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-value-inst-combine-select-value-tracking-flip-bits/0-opt.spvasm.expected.ir.msl
index 6c5f3a8..fa8f521b 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-value-inst-combine-select-value-tracking-flip-bits/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-value-inst-combine-select-value-tracking-flip-bits/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,96 +12,100 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %i:ptr<function, i32, read_write> = var
     %A:ptr<function, array<i32, 2>, read_write> = var
     %a:ptr<function, i32, read_write> = var
     %7:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
     %8:i32 = load %7
     store %i, %8
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %9:i32 = load %i
         %10:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
         %11:i32 = load %10
         %12:bool = lt %9, %11
-        if %12 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %12 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_40:i32 = load %i
-        %14:ptr<function, i32, read_write> = access %A, %x_40
-        %15:i32 = load %i
-        store %14, %15
-        continue %b4
-      }
-      %b4 = block {  # continuing
+        %13:i32 = load %i
+        %x_40:i32 = let %13
+        %15:ptr<function, i32, read_write> = access %A, %x_40
         %16:i32 = load %i
-        %17:i32 = add %16, 1i
-        store %i, %17
-        next_iteration %b3
+        store %15, %16
+        continue  # -> $B4
+      }
+      $B4: {  # continuing
+        %17:i32 = load %i
+        %18:i32 = add %17, 1i
+        store %i, %18
+        next_iteration  # -> $B3
       }
     }
-    %18:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %19:i32 = load %18
-    %20:ptr<function, i32, read_write> = access %A, %19
-    %21:i32 = load %20
-    %22:i32 = complement %21
-    %23:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %24:i32 = load %23
-    %25:ptr<function, i32, read_write> = access %A, %24
-    %26:i32 = load %25
-    %27:i32 = complement %26
-    %28:i32 = min %22, %27
-    store %a, %28
-    %29:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %30:i32 = load %29
-    %31:f32 = convert %30
-    %32:vec4<f32> = construct %31
-    store %x_GLF_color, %32
-    %33:i32 = load %a
-    %34:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %35:i32 = load %34
-    %36:i32 = negation %35
-    %37:bool = eq %33, %36
-    if %37 [t: %b7] {  # if_2
-      %b7 = block {  # true
-        %38:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %39:i32 = load %38
-        %40:f32 = convert %39
-        %41:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %42:i32 = load %41
-        %43:f32 = convert %42
-        %44:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %45:i32 = load %44
-        %46:f32 = convert %45
-        %47:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %19:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %20:i32 = load %19
+    %21:ptr<function, i32, read_write> = access %A, %20
+    %22:i32 = load %21
+    %23:i32 = complement %22
+    %24:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %25:i32 = load %24
+    %26:ptr<function, i32, read_write> = access %A, %25
+    %27:i32 = load %26
+    %28:i32 = complement %27
+    %29:i32 = min %23, %28
+    store %a, %29
+    %30:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %31:i32 = load %30
+    %32:f32 = convert %31
+    %33:vec4<f32> = construct %32
+    store %x_GLF_color, %33
+    %34:i32 = load %a
+    %35:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %36:i32 = load %35
+    %37:i32 = negation %36
+    %38:bool = eq %34, %37
+    if %38 [t: $B7] {  # if_2
+      $B7: {  # true
+        %39:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %40:i32 = load %39
+        %41:f32 = convert %40
+        %42:f32 = let %41
+        %43:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %44:i32 = load %43
+        %45:f32 = convert %44
+        %46:f32 = let %45
+        %47:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
         %48:i32 = load %47
         %49:f32 = convert %48
-        %50:vec4<f32> = construct %40, %43, %46, %49
-        store %x_GLF_color, %50
+        %50:f32 = let %49
+        %51:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %52:i32 = load %51
+        %53:f32 = convert %52
+        %54:vec4<f32> = construct %42, %46, %50, %53
+        store %x_GLF_color, %54
         exit_if  # if_2
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b8 {
-  %b8 = block {
-    %52:void = call %main_1
-    %53:vec4<f32> = load %x_GLF_color
-    %54:main_out = construct %53
-    ret %54
+%tint_symbol = @fragment func():main_out {
+  $B8: {
+    %56:void = call %main_1
+    %57:vec4<f32> = load %x_GLF_color
+    %58:main_out = construct %57
+    ret %58
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-value-inst-combine-select-value-tracking-flip-bits/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-value-inst-combine-select-value-tracking-flip-bits/0-opt.wgsl.expected.ir.msl
index dd77b49..ae42a9a 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-value-inst-combine-select-value-tracking-flip-bits/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-value-inst-combine-select-value-tracking-flip-bits/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,96 +12,117 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %i:ptr<function, i32, read_write> = var
     %A:ptr<function, array<i32, 2>, read_write> = var
     %a:ptr<function, i32, read_write> = var
     %7:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_30:i32 = load %7
+    %8:i32 = load %7
+    %x_30:i32 = let %8
     store %i, %x_30
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_35:i32 = load %i
-        %10:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_37:i32 = load %10
-        %12:bool = lt %x_35, %x_37
-        if %12 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %10:i32 = load %i
+        %x_35:i32 = let %10
+        %12:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %13:i32 = load %12
+        %x_37:i32 = let %13
+        %15:bool = lt %x_35, %x_37
+        if %15 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_40:i32 = load %i
-        %x_41:i32 = load %i
-        %15:ptr<function, i32, read_write> = access %A, %x_40
-        store %15, %x_41
-        continue %b4
+        %16:i32 = load %i
+        %x_40:i32 = let %16
+        %18:i32 = load %i
+        %x_41:i32 = let %18
+        %20:ptr<function, i32, read_write> = access %A, %x_40
+        store %20, %x_41
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_43:i32 = load %i
-        %17:i32 = add %x_43, 1i
-        store %i, %17
-        next_iteration %b3
+      $B4: {  # continuing
+        %21:i32 = load %i
+        %x_43:i32 = let %21
+        %23:i32 = add %x_43, 1i
+        store %i, %23
+        next_iteration  # -> $B3
       }
     }
-    %18:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_46:i32 = load %18
-    %20:ptr<function, i32, read_write> = access %A, %x_46
-    %x_48:i32 = load %20
-    %22:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_51:i32 = load %22
-    %24:ptr<function, i32, read_write> = access %A, %x_51
-    %x_53:i32 = load %24
-    %26:i32 = complement %x_48
-    %27:i32 = complement %x_53
-    %28:i32 = min %26, %27
-    store %a, %28
-    %29:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_57:i32 = load %29
-    %x_58:f32 = convert %x_57
-    %32:vec4<f32> = construct %x_58, %x_58, %x_58, %x_58
-    store %x_GLF_color, %32
-    %x_60:i32 = load %a
-    %34:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_62:i32 = load %34
-    %36:i32 = negation %x_62
-    %37:bool = eq %x_60, %36
-    if %37 [t: %b7] {  # if_2
-      %b7 = block {  # true
-        %38:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %x_68:i32 = load %38
-        %40:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_71:i32 = load %40
-        %42:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_74:i32 = load %42
-        %44:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %x_77:i32 = load %44
-        %46:f32 = convert %x_68
-        %47:f32 = convert %x_71
-        %48:f32 = convert %x_74
-        %49:f32 = convert %x_77
-        %50:vec4<f32> = construct %46, %47, %48, %49
-        store %x_GLF_color, %50
+    %24:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %25:i32 = load %24
+    %x_46:i32 = let %25
+    %27:ptr<function, i32, read_write> = access %A, %x_46
+    %28:i32 = load %27
+    %x_48:i32 = let %28
+    %30:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %31:i32 = load %30
+    %x_51:i32 = let %31
+    %33:ptr<function, i32, read_write> = access %A, %x_51
+    %34:i32 = load %33
+    %x_53:i32 = let %34
+    %36:i32 = complement %x_48
+    %37:i32 = complement %x_53
+    %38:i32 = min %36, %37
+    store %a, %38
+    %39:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %40:i32 = load %39
+    %x_57:i32 = let %40
+    %42:f32 = convert %x_57
+    %x_58:f32 = let %42
+    %44:vec4<f32> = construct %x_58, %x_58, %x_58, %x_58
+    store %x_GLF_color, %44
+    %45:i32 = load %a
+    %x_60:i32 = let %45
+    %47:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %48:i32 = load %47
+    %x_62:i32 = let %48
+    %50:i32 = negation %x_62
+    %51:bool = eq %x_60, %50
+    if %51 [t: $B7] {  # if_2
+      $B7: {  # true
+        %52:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %53:i32 = load %52
+        %x_68:i32 = let %53
+        %55:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %56:i32 = load %55
+        %x_71:i32 = let %56
+        %58:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %59:i32 = load %58
+        %x_74:i32 = let %59
+        %61:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %62:i32 = load %61
+        %x_77:i32 = let %62
+        %64:f32 = convert %x_68
+        %65:f32 = let %64
+        %66:f32 = convert %x_71
+        %67:f32 = let %66
+        %68:f32 = convert %x_74
+        %69:f32 = let %68
+        %70:f32 = convert %x_77
+        %71:vec4<f32> = construct %65, %67, %69, %70
+        store %x_GLF_color, %71
         exit_if  # if_2
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b8 {
-  %b8 = block {
-    %52:void = call %main_1
-    %53:vec4<f32> = load %x_GLF_color
-    %54:main_out = construct %53
-    ret %54
+%tint_symbol = @fragment func():main_out {
+  $B8: {
+    %73:void = call %main_1
+    %74:vec4<f32> = load %x_GLF_color
+    %75:main_out = construct %74
+    ret %75
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-value-tracking-apint-inst-combine-simplify-one-mod-loop-iterator/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-value-tracking-apint-inst-combine-simplify-one-mod-loop-iterator/0-opt.spvasm.expected.ir.msl
index 6508e5b..11da9d1 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-value-tracking-apint-inst-combine-simplify-one-mod-loop-iterator/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-value-tracking-apint-inst-combine-simplify-one-mod-loop-iterator/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,13 +12,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %6:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
@@ -27,82 +27,100 @@
     %8:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
     %9:i32 = load %8
     store %i, %9
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %10:i32 = load %i
         %11:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
         %12:i32 = load %11
         %13:bool = lt %10, %12
-        if %13 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %13 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
         %14:i32 = load %i
-        %15:i32 = mod 1i, %14
-        %16:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %17:i32 = load %16
-        %18:bool = eq %15, %17
-        if %18 [t: %b7] {  # if_2
-          %b7 = block {  # true
-            continue %b4
+        %15:i32 = call %tint_mod_i32, 1i, %14
+        %17:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %18:i32 = load %17
+        %19:bool = eq %15, %18
+        if %19 [t: $B7] {  # if_2
+          $B7: {  # true
+            continue  # -> $B4
           }
         }
-        %19:i32 = load %a
-        %20:i32 = add %19, 1i
-        store %a, %20
-        continue %b4
+        %20:i32 = load %a
+        %21:i32 = add %20, 1i
+        store %a, %21
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %21:i32 = load %i
-        %22:i32 = add %21, 1i
-        store %i, %22
-        next_iteration %b3
+      $B4: {  # continuing
+        %22:i32 = load %i
+        %23:i32 = add %22, 1i
+        store %i, %23
+        next_iteration  # -> $B3
       }
     }
-    %23:i32 = load %a
-    %24:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %25:i32 = load %24
-    %26:bool = eq %23, %25
-    if %26 [t: %b8, f: %b9] {  # if_3
-      %b8 = block {  # true
-        %27:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-        %28:i32 = load %27
-        %29:f32 = convert %28
-        %30:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %31:i32 = load %30
-        %32:f32 = convert %31
-        %33:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %34:i32 = load %33
-        %35:f32 = convert %34
-        %36:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+    %24:i32 = load %a
+    %25:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %26:i32 = load %25
+    %27:bool = eq %24, %26
+    if %27 [t: $B8, f: $B9] {  # if_3
+      $B8: {  # true
+        %28:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+        %29:i32 = load %28
+        %30:f32 = convert %29
+        %31:f32 = let %30
+        %32:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %33:i32 = load %32
+        %34:f32 = convert %33
+        %35:f32 = let %34
+        %36:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
         %37:i32 = load %36
         %38:f32 = convert %37
-        %39:vec4<f32> = construct %29, %32, %35, %38
-        store %x_GLF_color, %39
-        exit_if  # if_3
-      }
-      %b9 = block {  # false
-        %40:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %39:f32 = let %38
+        %40:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
         %41:i32 = load %40
         %42:f32 = convert %41
-        %43:vec4<f32> = construct %42
+        %43:vec4<f32> = construct %31, %35, %39, %42
         store %x_GLF_color, %43
         exit_if  # if_3
       }
+      $B9: {  # false
+        %44:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %45:i32 = load %44
+        %46:f32 = convert %45
+        %47:vec4<f32> = construct %46
+        store %x_GLF_color, %47
+        exit_if  # if_3
+      }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b10 {
-  %b10 = block {
-    %45:void = call %main_1
-    %46:vec4<f32> = load %x_GLF_color
-    %47:main_out = construct %46
-    ret %47
+%tint_symbol = @fragment func():main_out {
+  $B10: {
+    %49:void = call %main_1
+    %50:vec4<f32> = load %x_GLF_color
+    %51:main_out = construct %50
+    ret %51
+  }
+}
+%tint_mod_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B11: {
+    %54:bool = eq %rhs, 0i
+    %55:bool = eq %lhs, -2147483648i
+    %56:bool = eq %rhs, -1i
+    %57:bool = and %55, %56
+    %58:bool = or %54, %57
+    %59:i32 = select %rhs, 1i, %58
+    %60:i32 = let %59
+    %61:i32 = div %lhs, %60
+    %62:i32 = mul %61, %60
+    %63:i32 = sub %lhs, %62
+    ret %63
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-value-tracking-apint-inst-combine-simplify-one-mod-loop-iterator/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-value-tracking-apint-inst-combine-simplify-one-mod-loop-iterator/0-opt.wgsl.expected.ir.msl
index 17da838..624e88d 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-value-tracking-apint-inst-combine-simplify-one-mod-loop-iterator/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-value-tracking-apint-inst-combine-simplify-one-mod-loop-iterator/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,97 +12,131 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %6:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_27:i32 = load %6
+    %7:i32 = load %6
+    %x_27:i32 = let %7
     store %a, %x_27
-    %8:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-    %x_29:i32 = load %8
+    %9:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+    %10:i32 = load %9
+    %x_29:i32 = let %10
     store %i, %x_29
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_34:i32 = load %i
-        %11:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_36:i32 = load %11
-        %13:bool = lt %x_34, %x_36
-        if %13 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %12:i32 = load %i
+        %x_34:i32 = let %12
+        %14:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %15:i32 = load %14
+        %x_36:i32 = let %15
+        %17:bool = lt %x_34, %x_36
+        if %17 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_39:i32 = load %i
-        %15:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %x_42:i32 = load %15
-        %17:i32 = mod 1i, %x_39
-        %18:bool = eq %17, %x_42
-        if %18 [t: %b7] {  # if_2
-          %b7 = block {  # true
-            continue %b4
+        %18:i32 = load %i
+        %x_39:i32 = let %18
+        %20:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %21:i32 = load %20
+        %x_42:i32 = let %21
+        %23:i32 = call %tint_mod_i32, 1i, %x_39
+        %25:bool = eq %23, %x_42
+        if %25 [t: $B7] {  # if_2
+          $B7: {  # true
+            continue  # -> $B4
           }
         }
-        %x_46:i32 = load %a
-        %20:i32 = add %x_46, 1i
-        store %a, %20
-        continue %b4
+        %26:i32 = load %a
+        %x_46:i32 = let %26
+        %28:i32 = add %x_46, 1i
+        store %a, %28
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_48:i32 = load %i
-        %22:i32 = add %x_48, 1i
-        store %i, %22
-        next_iteration %b3
+      $B4: {  # continuing
+        %29:i32 = load %i
+        %x_48:i32 = let %29
+        %31:i32 = add %x_48, 1i
+        store %i, %31
+        next_iteration  # -> $B3
       }
     }
-    %x_50:i32 = load %a
-    %24:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_52:i32 = load %24
-    %26:bool = eq %x_50, %x_52
-    if %26 [t: %b8, f: %b9] {  # if_3
-      %b8 = block {  # true
-        %27:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-        %x_58:i32 = load %27
-        %29:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %x_61:i32 = load %29
-        %31:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %x_64:i32 = load %31
-        %33:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-        %x_67:i32 = load %33
-        %35:f32 = convert %x_58
-        %36:f32 = convert %x_61
-        %37:f32 = convert %x_64
-        %38:f32 = convert %x_67
-        %39:vec4<f32> = construct %35, %36, %37, %38
-        store %x_GLF_color, %39
+    %32:i32 = load %a
+    %x_50:i32 = let %32
+    %34:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %35:i32 = load %34
+    %x_52:i32 = let %35
+    %37:bool = eq %x_50, %x_52
+    if %37 [t: $B8, f: $B9] {  # if_3
+      $B8: {  # true
+        %38:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+        %39:i32 = load %38
+        %x_58:i32 = let %39
+        %41:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %42:i32 = load %41
+        %x_61:i32 = let %42
+        %44:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %45:i32 = load %44
+        %x_64:i32 = let %45
+        %47:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+        %48:i32 = load %47
+        %x_67:i32 = let %48
+        %50:f32 = convert %x_58
+        %51:f32 = let %50
+        %52:f32 = convert %x_61
+        %53:f32 = let %52
+        %54:f32 = convert %x_64
+        %55:f32 = let %54
+        %56:f32 = convert %x_67
+        %57:vec4<f32> = construct %51, %53, %55, %56
+        store %x_GLF_color, %57
         exit_if  # if_3
       }
-      %b9 = block {  # false
-        %40:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %x_71:i32 = load %40
-        %x_72:f32 = convert %x_71
-        %43:vec4<f32> = construct %x_72, %x_72, %x_72, %x_72
-        store %x_GLF_color, %43
+      $B9: {  # false
+        %58:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+        %59:i32 = load %58
+        %x_71:i32 = let %59
+        %61:f32 = convert %x_71
+        %x_72:f32 = let %61
+        %63:vec4<f32> = construct %x_72, %x_72, %x_72, %x_72
+        store %x_GLF_color, %63
         exit_if  # if_3
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b10 {
-  %b10 = block {
-    %45:void = call %main_1
-    %46:vec4<f32> = load %x_GLF_color
-    %47:main_out = construct %46
-    ret %47
+%tint_symbol = @fragment func():main_out {
+  $B10: {
+    %65:void = call %main_1
+    %66:vec4<f32> = load %x_GLF_color
+    %67:main_out = construct %66
+    ret %67
+  }
+}
+%tint_mod_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B11: {
+    %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 = let %75
+    %77:i32 = div %lhs, %76
+    %78:i32 = mul %77, %76
+    %79:i32 = sub %lhs, %78
+    ret %79
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-value-tracking-inclusive-or/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-value-tracking-inclusive-or/0-opt.spvasm.expected.ir.msl
index 598d348..4e97427 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-value-tracking-inclusive-or/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-value-tracking-inclusive-or/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   two:i32 @offset(0)
 }
 
@@ -8,26 +8,26 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%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 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %6:i32 = load %i
         %7:bool = lt %6, 2i
-        if %7 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %7 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
@@ -35,23 +35,23 @@
         %9:i32 = or %8, -2i
         %10:i32 = sub %9, 1i
         store %a, %10
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
+      $B4: {  # continuing
         %11:i32 = load %i
         %12:i32 = add %11, 1i
         store %i, %12
-        next_iteration %b3
+        next_iteration  # -> $B3
       }
     }
     %13:i32 = load %a
     %14:bool = eq %13, -2i
-    if %14 [t: %b7, f: %b8] {  # if_2
-      %b7 = block {  # true
+    if %14 [t: $B7, f: $B8] {  # if_2
+      $B7: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_2
       }
-      %b8 = block {  # false
+      $B8: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_2
       }
@@ -59,8 +59,8 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b9 {
-  %b9 = block {
+%tint_symbol = @fragment func():main_out {
+  $B9: {
     %16:void = call %main_1
     %17:vec4<f32> = load %x_GLF_color
     %18:main_out = construct %17
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-value-tracking-inclusive-or/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-value-tracking-inclusive-or/0-opt.wgsl.expected.ir.msl
index f89f7ea..68af0d5 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-value-tracking-inclusive-or/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-value-tracking-inclusive-or/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   two:i32 @offset(0)
 }
 
@@ -8,50 +8,54 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%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 = block {  # body
-        %x_30:i32 = load %i
-        %7:bool = lt %x_30, 2i
-        if %7 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %6:i32 = load %i
+        %x_30:i32 = let %6
+        %8:bool = lt %x_30, 2i
+        if %8 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_33:i32 = load %i
-        %9:i32 = or %x_33, -2i
-        %10:i32 = sub %9, 1i
-        store %a, %10
-        continue %b4
+        %9:i32 = load %i
+        %x_33:i32 = let %9
+        %11:i32 = or %x_33, -2i
+        %12:i32 = sub %11, 1i
+        store %a, %12
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_36:i32 = load %i
-        %12:i32 = add %x_36, 1i
-        store %i, %12
-        next_iteration %b3
+      $B4: {  # continuing
+        %13:i32 = load %i
+        %x_36:i32 = let %13
+        %15:i32 = add %x_36, 1i
+        store %i, %15
+        next_iteration  # -> $B3
       }
     }
-    %x_38:i32 = load %a
-    %14:bool = eq %x_38, -2i
-    if %14 [t: %b7, f: %b8] {  # if_2
-      %b7 = block {  # true
+    %16:i32 = load %a
+    %x_38:i32 = let %16
+    %18:bool = eq %x_38, -2i
+    if %18 [t: $B7, f: $B8] {  # if_2
+      $B7: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_2
       }
-      %b8 = block {  # false
+      $B8: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_2
       }
@@ -59,12 +63,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b9 {
-  %b9 = block {
-    %16:void = call %main_1
-    %17:vec4<f32> = load %x_GLF_color
-    %18:main_out = construct %17
-    ret %18
+%tint_symbol = @fragment func():main_out {
+  $B9: {
+    %20:void = call %main_1
+    %21:vec4<f32> = load %x_GLF_color
+    %22:main_out = construct %21
+    ret %22
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-value-tracking-known-nonzero/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-value-tracking-known-nonzero/0-opt.spvasm.expected.ir.msl
index e2b5339..3af32e2 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-value-tracking-known-nonzero/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-value-tracking-known-nonzero/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,13 +12,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %sum:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
@@ -29,8 +29,8 @@
     %9:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
     %10:i32 = load %9
     %11:bool = eq 1i, %10
-    if %11 [t: %b3] {  # if_1
-      %b3 = block {  # true
+    if %11 [t: $B3] {  # if_1
+      $B3: {  # true
         %12:i32 = load %a
         %13:i32 = sub %12, 1i
         store %a, %13
@@ -38,16 +38,16 @@
       }
     }
     store %i, 0i
-    loop [b: %b4, c: %b5] {  # loop_1
-      %b4 = block {  # body
+    loop [b: $B4, c: $B5] {  # loop_1
+      $B4: {  # body
         %14:i32 = load %i
         %15:i32 = load %a
         %16:bool = lt %14, %15
-        if %16 [t: %b6, f: %b7] {  # if_2
-          %b6 = block {  # true
+        if %16 [t: $B6, f: $B7] {  # if_2
+          $B6: {  # true
             exit_if  # if_2
           }
-          %b7 = block {  # false
+          $B7: {  # false
             exit_loop  # loop_1
           }
         }
@@ -55,57 +55,60 @@
         %18:i32 = load %i
         %19:i32 = add %17, %18
         store %sum, %19
-        continue %b5
+        continue  # -> $B5
       }
-      %b5 = block {  # continuing
+      $B5: {  # continuing
         %20:i32 = load %i
         %21:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
         %22:i32 = load %21
         %23:i32 = add %20, %22
         store %i, %23
-        next_iteration %b4
+        next_iteration  # -> $B4
       }
     }
     %24:i32 = load %sum
     %25:ptr<uniform, i32, read> = access %x_7, 0u, 3i, 0u
     %26:i32 = load %25
     %27:bool = eq %24, %26
-    if %27 [t: %b8, f: %b9] {  # if_3
-      %b8 = block {  # true
+    if %27 [t: $B8, f: $B9] {  # if_3
+      $B8: {  # true
         %28:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
         %29:i32 = load %28
         %30:f32 = convert %29
-        %31:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %32:i32 = load %31
-        %33:f32 = convert %32
-        %34:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %35:i32 = load %34
-        %36:f32 = convert %35
-        %37:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %38:i32 = load %37
-        %39:f32 = convert %38
-        %40:vec4<f32> = construct %30, %33, %36, %39
-        store %x_GLF_color, %40
+        %31:f32 = let %30
+        %32:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %33:i32 = load %32
+        %34:f32 = convert %33
+        %35:f32 = let %34
+        %36:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %37:i32 = load %36
+        %38:f32 = convert %37
+        %39:f32 = let %38
+        %40:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %41:i32 = load %40
+        %42:f32 = convert %41
+        %43:vec4<f32> = construct %31, %35, %39, %42
+        store %x_GLF_color, %43
         exit_if  # if_3
       }
-      %b9 = block {  # false
-        %41:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %42:i32 = load %41
-        %43:f32 = convert %42
-        %44:vec4<f32> = construct %43
-        store %x_GLF_color, %44
+      $B9: {  # false
+        %44:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %45:i32 = load %44
+        %46:f32 = convert %45
+        %47:vec4<f32> = construct %46
+        store %x_GLF_color, %47
         exit_if  # if_3
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b10 {
-  %b10 = block {
-    %46:void = call %main_1
-    %47:vec4<f32> = load %x_GLF_color
-    %48:main_out = construct %47
-    ret %48
+%tint_symbol = @fragment func():main_out {
+  $B10: {
+    %49:void = call %main_1
+    %50:vec4<f32> = load %x_GLF_color
+    %51:main_out = construct %50
+    ret %51
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-value-tracking-known-nonzero/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-value-tracking-known-nonzero/0-opt.wgsl.expected.ir.msl
index 5369c53..258051c 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-value-tracking-known-nonzero/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-value-tracking-known-nonzero/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,100 +12,120 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, i32, read_write> = var
     %sum:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     store %a, 65536i
     %7:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-    %x_29:i32 = load %7
+    %8:i32 = load %7
+    %x_29:i32 = let %8
     store %sum, %x_29
-    %9:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-    %x_31:i32 = load %9
-    %11:bool = eq 1i, %x_31
-    if %11 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %x_35:i32 = load %a
-        %13:i32 = sub %x_35, 1i
-        store %a, %13
+    %10:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+    %11:i32 = load %10
+    %x_31:i32 = let %11
+    %13:bool = eq 1i, %x_31
+    if %13 [t: $B3] {  # if_1
+      $B3: {  # true
+        %14:i32 = load %a
+        %x_35:i32 = let %14
+        %16:i32 = sub %x_35, 1i
+        store %a, %16
         exit_if  # if_1
       }
     }
     store %i, 0i
-    loop [b: %b4, c: %b5] {  # loop_1
-      %b4 = block {  # body
-        %x_41:i32 = load %i
-        %x_42:i32 = load %a
-        %16:bool = lt %x_41, %x_42
-        if %16 [t: %b6, f: %b7] {  # if_2
-          %b6 = block {  # true
+    loop [b: $B4, c: $B5] {  # loop_1
+      $B4: {  # body
+        %17:i32 = load %i
+        %x_41:i32 = let %17
+        %19:i32 = load %a
+        %x_42:i32 = let %19
+        %21:bool = lt %x_41, %x_42
+        if %21 [t: $B6, f: $B7] {  # if_2
+          $B6: {  # true
             exit_if  # if_2
           }
-          %b7 = block {  # false
+          $B7: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_45:i32 = load %i
-        %x_46:i32 = load %sum
-        %19:i32 = add %x_46, %x_45
-        store %sum, %19
-        continue %b5
+        %22:i32 = load %i
+        %x_45:i32 = let %22
+        %24:i32 = load %sum
+        %x_46:i32 = let %24
+        %26:i32 = add %x_46, %x_45
+        store %sum, %26
+        continue  # -> $B5
       }
-      %b5 = block {  # continuing
-        %20:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
-        %x_49:i32 = load %20
-        %x_50:i32 = load %i
-        %23:i32 = add %x_50, %x_49
-        store %i, %23
-        next_iteration %b4
+      $B5: {  # continuing
+        %27:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
+        %28:i32 = load %27
+        %x_49:i32 = let %28
+        %30:i32 = load %i
+        %x_50:i32 = let %30
+        %32:i32 = add %x_50, %x_49
+        store %i, %32
+        next_iteration  # -> $B4
       }
     }
-    %x_52:i32 = load %sum
-    %25:ptr<uniform, i32, read> = access %x_7, 0u, 3i, 0u
-    %x_54:i32 = load %25
-    %27:bool = eq %x_52, %x_54
-    if %27 [t: %b8, f: %b9] {  # if_3
-      %b8 = block {  # true
-        %28:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %x_60:i32 = load %28
-        %30:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %x_63:i32 = load %30
-        %32:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %x_66:i32 = load %32
-        %34:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %x_69:i32 = load %34
-        %36:f32 = convert %x_60
-        %37:f32 = convert %x_63
-        %38:f32 = convert %x_66
-        %39:f32 = convert %x_69
-        %40:vec4<f32> = construct %36, %37, %38, %39
-        store %x_GLF_color, %40
+    %33:i32 = load %sum
+    %x_52:i32 = let %33
+    %35:ptr<uniform, i32, read> = access %x_7, 0u, 3i, 0u
+    %36:i32 = load %35
+    %x_54:i32 = let %36
+    %38:bool = eq %x_52, %x_54
+    if %38 [t: $B8, f: $B9] {  # if_3
+      $B8: {  # true
+        %39:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %40:i32 = load %39
+        %x_60:i32 = let %40
+        %42:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %43:i32 = load %42
+        %x_63:i32 = let %43
+        %45:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %46:i32 = load %45
+        %x_66:i32 = let %46
+        %48:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %49:i32 = load %48
+        %x_69:i32 = let %49
+        %51:f32 = convert %x_60
+        %52:f32 = let %51
+        %53:f32 = convert %x_63
+        %54:f32 = let %53
+        %55:f32 = convert %x_66
+        %56:f32 = let %55
+        %57:f32 = convert %x_69
+        %58:vec4<f32> = construct %52, %54, %56, %57
+        store %x_GLF_color, %58
         exit_if  # if_3
       }
-      %b9 = block {  # false
-        %41:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %x_73:i32 = load %41
-        %x_74:f32 = convert %x_73
-        %44:vec4<f32> = construct %x_74, %x_74, %x_74, %x_74
-        store %x_GLF_color, %44
+      $B9: {  # false
+        %59:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %60:i32 = load %59
+        %x_73:i32 = let %60
+        %62:f32 = convert %x_73
+        %x_74:f32 = let %62
+        %64:vec4<f32> = construct %x_74, %x_74, %x_74, %x_74
+        store %x_GLF_color, %64
         exit_if  # if_3
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b10 {
-  %b10 = block {
-    %46:void = call %main_1
-    %47:vec4<f32> = load %x_GLF_color
-    %48:main_out = construct %47
-    ret %48
+%tint_symbol = @fragment func():main_out {
+  $B10: {
+    %66:void = call %main_1
+    %67:vec4<f32> = load %x_GLF_color
+    %68:main_out = construct %67
+    ret %68
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-value-tracking-max-uintbitstofloat/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-value-tracking-max-uintbitstofloat/0-opt.spvasm.expected.ir.msl
index 2963359..a26a9ce 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-value-tracking-max-uintbitstofloat/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-value-tracking-max-uintbitstofloat/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:u32 @offset(0)
 }
 
@@ -28,15 +28,15 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf2, read> = var @binding_point(0, 2)
   %x_8:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_10:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %f:ptr<function, f32, read_write> = var
     %7:ptr<uniform, u32, read> = access %x_6, 0u, 0i, 0u
     %8:u32 = load %7
@@ -47,42 +47,45 @@
     %12:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
     %13:f32 = load %12
     %14:bool = eq %11, %13
-    if %14 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    if %14 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         %15:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
         %16:i32 = load %15
         %17:f32 = convert %16
-        %18:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %19:i32 = load %18
-        %20:f32 = convert %19
-        %21:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %22:i32 = load %21
-        %23:f32 = convert %22
-        %24:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %25:i32 = load %24
-        %26:f32 = convert %25
-        %27:vec4<f32> = construct %17, %20, %23, %26
-        store %x_GLF_color, %27
+        %18:f32 = let %17
+        %19:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %20:i32 = load %19
+        %21:f32 = convert %20
+        %22:f32 = let %21
+        %23:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %24:i32 = load %23
+        %25:f32 = convert %24
+        %26:f32 = let %25
+        %27:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %28:i32 = load %27
+        %29:f32 = convert %28
+        %30:vec4<f32> = construct %18, %22, %26, %29
+        store %x_GLF_color, %30
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %28:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %29:i32 = load %28
-        %30:f32 = convert %29
-        %31:vec4<f32> = construct %30
-        store %x_GLF_color, %31
+      $B4: {  # false
+        %31:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %32:i32 = load %31
+        %33:f32 = convert %32
+        %34:vec4<f32> = construct %33
+        store %x_GLF_color, %34
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %33:void = call %main_1
-    %34:vec4<f32> = load %x_GLF_color
-    %35:main_out = construct %34
-    ret %35
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %36:void = call %main_1
+    %37:vec4<f32> = load %x_GLF_color
+    %38:main_out = construct %37
+    ret %38
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-value-tracking-max-uintbitstofloat/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-value-tracking-max-uintbitstofloat/0-opt.wgsl.expected.ir.msl
index aecec09..12e29bc 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-value-tracking-max-uintbitstofloat/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-value-tracking-max-uintbitstofloat/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:u32 @offset(0)
 }
 
@@ -28,61 +28,73 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf2, read> = var @binding_point(0, 2)
   %x_8:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_10:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %f:ptr<function, f32, read_write> = var
     %7:ptr<uniform, u32, read> = access %x_6, 0u, 0i, 0u
-    %x_36:u32 = load %7
-    %9:u32 = max 100u, %x_36
-    %10:f32 = bitcast %9
-    store %f, %10
-    %x_39:f32 = load %f
-    %12:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-    %x_41:f32 = load %12
-    %14:bool = eq %x_39, %x_41
-    if %14 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %15:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %x_47:i32 = load %15
-        %17:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %x_50:i32 = load %17
-        %19:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %x_53:i32 = load %19
-        %21:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %x_56:i32 = load %21
-        %23:f32 = convert %x_47
-        %24:f32 = convert %x_50
-        %25:f32 = convert %x_53
-        %26:f32 = convert %x_56
-        %27:vec4<f32> = construct %23, %24, %25, %26
-        store %x_GLF_color, %27
+    %8:u32 = load %7
+    %x_36:u32 = let %8
+    %10:u32 = max 100u, %x_36
+    %11:f32 = bitcast %10
+    store %f, %11
+    %12:f32 = load %f
+    %x_39:f32 = let %12
+    %14:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+    %15:f32 = load %14
+    %x_41:f32 = let %15
+    %17:bool = eq %x_39, %x_41
+    if %17 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %18:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %19:i32 = load %18
+        %x_47:i32 = let %19
+        %21:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %22:i32 = load %21
+        %x_50:i32 = let %22
+        %24:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %25:i32 = load %24
+        %x_53:i32 = let %25
+        %27:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
+        %28:i32 = load %27
+        %x_56:i32 = let %28
+        %30:f32 = convert %x_47
+        %31:f32 = let %30
+        %32:f32 = convert %x_50
+        %33:f32 = let %32
+        %34:f32 = convert %x_53
+        %35:f32 = let %34
+        %36:f32 = convert %x_56
+        %37:vec4<f32> = construct %31, %33, %35, %36
+        store %x_GLF_color, %37
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %28:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %x_60:i32 = load %28
-        %x_61:f32 = convert %x_60
-        %31:vec4<f32> = construct %x_61, %x_61, %x_61, %x_61
-        store %x_GLF_color, %31
+      $B4: {  # false
+        %38:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
+        %39:i32 = load %38
+        %x_60:i32 = let %39
+        %41:f32 = convert %x_60
+        %x_61:f32 = let %41
+        %43:vec4<f32> = construct %x_61, %x_61, %x_61, %x_61
+        store %x_GLF_color, %43
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %33:void = call %main_1
-    %34:vec4<f32> = load %x_GLF_color
-    %35:main_out = construct %34
-    ret %35
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %45:void = call %main_1
+    %46:vec4<f32> = load %x_GLF_color
+    %47:main_out = construct %46
+    ret %47
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-value-tracking-selection-dag-negation-clamp-loop/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-value-tracking-selection-dag-negation-clamp-loop/0-opt.spvasm.expected.ir.msl
index 6476631..18a63f8 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-value-tracking-selection-dag-negation-clamp-loop/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-value-tracking-selection-dag-negation-clamp-loop/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,13 +12,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %r:ptr<function, array<i32, 15>, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %data:ptr<function, array<i32, 15>, read_write> = var
@@ -26,271 +26,296 @@
     %i_2:ptr<function, i32, read_write> = var
     %i_3:ptr<function, i32, read_write> = var
     %10:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_46:i32 = load %10
-    %12:ptr<function, i32, read_write> = access %r, %x_46
-    %13:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %14:i32 = load %13
-    store %12, %14
-    %15:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_51:i32 = load %15
-    %17:ptr<function, i32, read_write> = access %r, %x_51
-    %18:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %19:i32 = load %18
-    store %17, %19
-    %20:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_56:i32 = load %20
-    %22:ptr<function, i32, read_write> = access %r, %x_56
-    %23:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %24:i32 = load %23
-    store %22, %24
-    %25:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-    %x_61:i32 = load %25
-    %27:ptr<function, i32, read_write> = access %r, %x_61
+    %11:i32 = load %10
+    %x_46:i32 = let %11
+    %13:ptr<function, i32, read_write> = access %r, %x_46
+    %14:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %15:i32 = load %14
+    store %13, %15
+    %16:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %17:i32 = load %16
+    %x_51:i32 = let %17
+    %19:ptr<function, i32, read_write> = access %r, %x_51
+    %20:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %21:i32 = load %20
+    store %19, %21
+    %22:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %23:i32 = load %22
+    %x_56:i32 = let %23
+    %25:ptr<function, i32, read_write> = access %r, %x_56
+    %26:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %27:i32 = load %26
+    store %25, %27
     %28:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
     %29:i32 = load %28
-    store %27, %29
-    %30:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
-    %x_66:i32 = load %30
-    %32:ptr<function, i32, read_write> = access %r, %x_66
-    %33:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
-    %34:i32 = load %33
-    store %32, %34
-    %35:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
-    %x_71:i32 = load %35
-    %37:ptr<function, i32, read_write> = access %r, %x_71
-    %38:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %x_61:i32 = let %29
+    %31:ptr<function, i32, read_write> = access %r, %x_61
+    %32:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+    %33:i32 = load %32
+    store %31, %33
+    %34:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
+    %35:i32 = load %34
+    %x_66:i32 = let %35
+    %37:ptr<function, i32, read_write> = access %r, %x_66
+    %38:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
     %39:i32 = load %38
-    %40:i32 = negation %39
-    store %37, %40
-    %41:ptr<uniform, i32, read> = access %x_6, 0u, 8i, 0u
-    %x_77:i32 = load %41
-    %43:ptr<function, i32, read_write> = access %r, %x_77
+    store %37, %39
+    %40:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
+    %41:i32 = load %40
+    %x_71:i32 = let %41
+    %43:ptr<function, i32, read_write> = access %r, %x_71
     %44:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
     %45:i32 = load %44
     %46:i32 = negation %45
     store %43, %46
-    %47:ptr<uniform, i32, read> = access %x_6, 0u, 9i, 0u
-    %x_83:i32 = load %47
-    %49:ptr<function, i32, read_write> = access %r, %x_83
-    %50:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %51:i32 = load %50
-    %52:i32 = negation %51
-    store %49, %52
-    %53:ptr<uniform, i32, read> = access %x_6, 0u, 10i, 0u
-    %x_89:i32 = load %53
-    %55:ptr<function, i32, read_write> = access %r, %x_89
-    %56:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %57:i32 = load %56
-    %58:i32 = negation %57
-    store %55, %58
-    %59:ptr<uniform, i32, read> = access %x_6, 0u, 11i, 0u
-    %x_95:i32 = load %59
-    %61:ptr<function, i32, read_write> = access %r, %x_95
-    %62:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %63:i32 = load %62
-    %64:i32 = negation %63
-    store %61, %64
-    %65:ptr<uniform, i32, read> = access %x_6, 0u, 6i, 0u
-    %x_101:i32 = load %65
-    %67:ptr<function, i32, read_write> = access %r, %x_101
-    %68:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %47:ptr<uniform, i32, read> = access %x_6, 0u, 8i, 0u
+    %48:i32 = load %47
+    %x_77:i32 = let %48
+    %50:ptr<function, i32, read_write> = access %r, %x_77
+    %51:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %52:i32 = load %51
+    %53:i32 = negation %52
+    store %50, %53
+    %54:ptr<uniform, i32, read> = access %x_6, 0u, 9i, 0u
+    %55:i32 = load %54
+    %x_83:i32 = let %55
+    %57:ptr<function, i32, read_write> = access %r, %x_83
+    %58:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %59:i32 = load %58
+    %60:i32 = negation %59
+    store %57, %60
+    %61:ptr<uniform, i32, read> = access %x_6, 0u, 10i, 0u
+    %62:i32 = load %61
+    %x_89:i32 = let %62
+    %64:ptr<function, i32, read_write> = access %r, %x_89
+    %65:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %66:i32 = load %65
+    %67:i32 = negation %66
+    store %64, %67
+    %68:ptr<uniform, i32, read> = access %x_6, 0u, 11i, 0u
     %69:i32 = load %68
-    %70:i32 = negation %69
-    store %67, %70
-    %71:ptr<uniform, i32, read> = access %x_6, 0u, 12i, 0u
-    %x_107:i32 = load %71
-    %73:ptr<function, i32, read_write> = access %r, %x_107
-    %74:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %75:i32 = load %74
-    %76:i32 = negation %75
-    store %73, %76
-    %77:ptr<uniform, i32, read> = access %x_6, 0u, 13i, 0u
-    %x_113:i32 = load %77
-    %79:ptr<function, i32, read_write> = access %r, %x_113
-    %80:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %81:i32 = load %80
-    %82:i32 = negation %81
-    store %79, %82
-    %83:ptr<uniform, i32, read> = access %x_6, 0u, 14i, 0u
-    %x_119:i32 = load %83
-    %85:ptr<function, i32, read_write> = access %r, %x_119
+    %x_95:i32 = let %69
+    %71:ptr<function, i32, read_write> = access %r, %x_95
+    %72:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %73:i32 = load %72
+    %74:i32 = negation %73
+    store %71, %74
+    %75:ptr<uniform, i32, read> = access %x_6, 0u, 6i, 0u
+    %76:i32 = load %75
+    %x_101:i32 = let %76
+    %78:ptr<function, i32, read_write> = access %r, %x_101
+    %79:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %80:i32 = load %79
+    %81:i32 = negation %80
+    store %78, %81
+    %82:ptr<uniform, i32, read> = access %x_6, 0u, 12i, 0u
+    %83:i32 = load %82
+    %x_107:i32 = let %83
+    %85:ptr<function, i32, read_write> = access %r, %x_107
     %86:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
     %87:i32 = load %86
     %88:i32 = negation %87
     store %85, %88
-    %89:ptr<uniform, i32, read> = access %x_6, 0u, 15i, 0u
-    %x_125:i32 = load %89
-    %91:ptr<function, i32, read_write> = access %r, %x_125
-    %92:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %93:i32 = load %92
-    %94:i32 = negation %93
-    store %91, %94
+    %89:ptr<uniform, i32, read> = access %x_6, 0u, 13i, 0u
+    %90:i32 = load %89
+    %x_113:i32 = let %90
+    %92:ptr<function, i32, read_write> = access %r, %x_113
+    %93:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %94:i32 = load %93
+    %95:i32 = negation %94
+    store %92, %95
+    %96:ptr<uniform, i32, read> = access %x_6, 0u, 14i, 0u
+    %97:i32 = load %96
+    %x_119:i32 = let %97
+    %99:ptr<function, i32, read_write> = access %r, %x_119
+    %100:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %101:i32 = load %100
+    %102:i32 = negation %101
+    store %99, %102
+    %103:ptr<uniform, i32, read> = access %x_6, 0u, 15i, 0u
+    %104:i32 = load %103
+    %x_125:i32 = let %104
+    %106:ptr<function, i32, read_write> = access %r, %x_125
+    %107:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %108:i32 = load %107
+    %109:i32 = negation %108
+    store %106, %109
     store %i, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %95:i32 = load %i
-        %96:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
-        %97:i32 = load %96
-        %98:bool = lt %95, %97
-        if %98 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %110:i32 = load %i
+        %111:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
+        %112:i32 = load %111
+        %113:bool = lt %110, %112
+        if %113 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_139:i32 = load %i
-        %100:ptr<function, i32, read_write> = access %data, %x_139
-        %101:i32 = load %i
-        %102:i32 = complement %101
-        %103:i32 = load %i
-        %104:i32 = complement %103
-        %105:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %106:i32 = load %105
-        %107:i32 = clamp %102, %104, %106
-        %108:i32 = complement %107
-        store %100, %108
-        continue %b4
+        %114:i32 = load %i
+        %x_139:i32 = let %114
+        %116:ptr<function, i32, read_write> = access %data, %x_139
+        %117:i32 = load %i
+        %118:i32 = complement %117
+        %119:i32 = load %i
+        %120:i32 = complement %119
+        %121:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %122:i32 = load %121
+        %123:i32 = let %122
+        %124:i32 = max %118, %120
+        %125:i32 = min %124, %123
+        %126:i32 = complement %125
+        store %116, %126
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %109:i32 = load %i
-        %110:i32 = add %109, 1i
-        store %i, %110
-        next_iteration %b3
+      $B4: {  # continuing
+        %127:i32 = load %i
+        %128:i32 = add %127, 1i
+        store %i, %128
+        next_iteration  # -> $B3
       }
     }
-    %111:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
-    %112:i32 = load %111
-    store %i_1, %112
-    loop [b: %b7, c: %b8] {  # loop_2
-      %b7 = block {  # body
-        %113:i32 = load %i_1
-        %114:ptr<uniform, i32, read> = access %x_6, 0u, 6i, 0u
-        %115:i32 = load %114
-        %116:bool = lt %113, %115
-        if %116 [t: %b9, f: %b10] {  # if_2
-          %b9 = block {  # true
+    %129:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
+    %130:i32 = load %129
+    store %i_1, %130
+    loop [b: $B7, c: $B8] {  # loop_2
+      $B7: {  # body
+        %131:i32 = load %i_1
+        %132:ptr<uniform, i32, read> = access %x_6, 0u, 6i, 0u
+        %133:i32 = load %132
+        %134:bool = lt %131, %133
+        if %134 [t: $B9, f: $B10] {  # if_2
+          $B9: {  # true
             exit_if  # if_2
           }
-          %b10 = block {  # false
+          $B10: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_162:i32 = load %i_1
-        %118:ptr<function, i32, read_write> = access %data, %x_162
-        %119:i32 = load %i_1
-        %120:i32 = complement %119
-        %121:i32 = clamp %120, 0i, 1i
-        %122:i32 = complement %121
-        store %118, %122
-        continue %b8
+        %135:i32 = load %i_1
+        %x_162:i32 = let %135
+        %137:ptr<function, i32, read_write> = access %data, %x_162
+        %138:i32 = load %i_1
+        %139:i32 = complement %138
+        %140:i32 = max %139, 0i
+        %141:i32 = min %140, 1i
+        %142:i32 = complement %141
+        store %137, %142
+        continue  # -> $B8
       }
-      %b8 = block {  # continuing
-        %123:i32 = load %i_1
-        %124:i32 = add %123, 1i
-        store %i_1, %124
-        next_iteration %b7
+      $B8: {  # continuing
+        %143:i32 = load %i_1
+        %144:i32 = add %143, 1i
+        store %i_1, %144
+        next_iteration  # -> $B7
       }
     }
-    %125:ptr<uniform, i32, read> = access %x_6, 0u, 6i, 0u
-    %126:i32 = load %125
-    store %i_2, %126
-    loop [b: %b11, c: %b12] {  # loop_3
-      %b11 = block {  # body
-        %127:i32 = load %i_2
-        %128:ptr<uniform, i32, read> = access %x_6, 0u, 7i, 0u
-        %129:i32 = load %128
-        %130:bool = lt %127, %129
-        if %130 [t: %b13, f: %b14] {  # if_3
-          %b13 = block {  # true
+    %145:ptr<uniform, i32, read> = access %x_6, 0u, 6i, 0u
+    %146:i32 = load %145
+    store %i_2, %146
+    loop [b: $B11, c: $B12] {  # loop_3
+      $B11: {  # body
+        %147:i32 = load %i_2
+        %148:ptr<uniform, i32, read> = access %x_6, 0u, 7i, 0u
+        %149:i32 = load %148
+        %150:bool = lt %147, %149
+        if %150 [t: $B13, f: $B14] {  # if_3
+          $B13: {  # true
             exit_if  # if_3
           }
-          %b14 = block {  # false
+          $B14: {  # false
             exit_loop  # loop_3
           }
         }
-        %x_181:i32 = load %i_2
-        %132:ptr<function, i32, read_write> = access %data, %x_181
-        %133:i32 = load %i_2
-        %134:i32 = clamp %133, 0i, 1i
-        %135:i32 = complement %134
-        store %132, %135
-        continue %b12
+        %151:i32 = load %i_2
+        %x_181:i32 = let %151
+        %153:ptr<function, i32, read_write> = access %data, %x_181
+        %154:i32 = load %i_2
+        %155:i32 = max %154, 0i
+        %156:i32 = min %155, 1i
+        %157:i32 = complement %156
+        store %153, %157
+        continue  # -> $B12
       }
-      %b12 = block {  # continuing
-        %136:i32 = load %i_2
-        %137:i32 = add %136, 1i
-        store %i_2, %137
-        next_iteration %b11
+      $B12: {  # continuing
+        %158:i32 = load %i_2
+        %159:i32 = add %158, 1i
+        store %i_2, %159
+        next_iteration  # -> $B11
       }
     }
-    %138:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %139:i32 = load %138
-    store %i_3, %139
-    loop [b: %b15, c: %b16] {  # loop_4
-      %b15 = block {  # body
-        %140:i32 = load %i_3
-        %141:ptr<uniform, i32, read> = access %x_6, 0u, 7i, 0u
-        %142:i32 = load %141
-        %143:bool = lt %140, %142
-        if %143 [t: %b17, f: %b18] {  # if_4
-          %b17 = block {  # true
+    %160:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %161:i32 = load %160
+    store %i_3, %161
+    loop [b: $B15, c: $B16] {  # loop_4
+      $B15: {  # body
+        %162:i32 = load %i_3
+        %163:ptr<uniform, i32, read> = access %x_6, 0u, 7i, 0u
+        %164:i32 = load %163
+        %165:bool = lt %162, %164
+        if %165 [t: $B17, f: $B18] {  # if_4
+          $B17: {  # true
             exit_if  # if_4
           }
-          %b18 = block {  # false
+          $B18: {  # false
             exit_loop  # loop_4
           }
         }
-        %144:i32 = load %i_3
-        %145:ptr<function, i32, read_write> = access %data, %144
-        %146:i32 = load %145
-        %147:i32 = load %i_3
-        %148:ptr<function, i32, read_write> = access %r, %147
-        %149:i32 = load %148
-        %150:bool = neq %146, %149
-        if %150 [t: %b19] {  # if_5
-          %b19 = block {  # true
-            %151:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-            %152:i32 = load %151
-            %153:f32 = convert %152
-            %154:vec4<f32> = construct %153
-            store %x_GLF_color, %154
+        %166:i32 = load %i_3
+        %167:ptr<function, i32, read_write> = access %data, %166
+        %168:i32 = load %167
+        %169:i32 = load %i_3
+        %170:ptr<function, i32, read_write> = access %r, %169
+        %171:i32 = load %170
+        %172:bool = neq %168, %171
+        if %172 [t: $B19] {  # if_5
+          $B19: {  # true
+            %173:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+            %174:i32 = load %173
+            %175:f32 = convert %174
+            %176:vec4<f32> = construct %175
+            store %x_GLF_color, %176
             ret
           }
         }
-        continue %b16
+        continue  # -> $B16
       }
-      %b16 = block {  # continuing
-        %155:i32 = load %i_3
-        %156:i32 = add %155, 1i
-        store %i_3, %156
-        next_iteration %b15
+      $B16: {  # continuing
+        %177:i32 = load %i_3
+        %178:i32 = add %177, 1i
+        store %i_3, %178
+        next_iteration  # -> $B15
       }
     }
-    %157:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %158:i32 = load %157
-    %159:f32 = convert %158
-    %160:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %161:i32 = load %160
-    %162:f32 = convert %161
-    %163:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %164:i32 = load %163
-    %165:f32 = convert %164
-    %166:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %167:i32 = load %166
-    %168:f32 = convert %167
-    %169:vec4<f32> = construct %159, %162, %165, %168
-    store %x_GLF_color, %169
+    %179:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %180:i32 = load %179
+    %181:f32 = convert %180
+    %182:f32 = let %181
+    %183:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %184:i32 = load %183
+    %185:f32 = convert %184
+    %186:f32 = let %185
+    %187:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %188:i32 = load %187
+    %189:f32 = convert %188
+    %190:f32 = let %189
+    %191:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %192:i32 = load %191
+    %193:f32 = convert %192
+    %194:vec4<f32> = construct %182, %186, %190, %193
+    store %x_GLF_color, %194
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b20 {
-  %b20 = block {
-    %171:void = call %main_1
-    %172:vec4<f32> = load %x_GLF_color
-    %173:main_out = construct %172
-    ret %173
+%tint_symbol = @fragment func():main_out {
+  $B20: {
+    %196:void = call %main_1
+    %197:vec4<f32> = load %x_GLF_color
+    %198:main_out = construct %197
+    ret %198
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-value-tracking-selection-dag-negation-clamp-loop/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-value-tracking-selection-dag-negation-clamp-loop/0-opt.wgsl.expected.ir.msl
index 9912064..bc0d239 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-value-tracking-selection-dag-negation-clamp-loop/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-value-tracking-selection-dag-negation-clamp-loop/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -12,13 +12,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %r:ptr<function, array<i32, 15>, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %data:ptr<function, array<i32, 15>, read_write> = var
@@ -26,271 +26,340 @@
     %i_2:ptr<function, i32, read_write> = var
     %i_3:ptr<function, i32, read_write> = var
     %10:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_46:i32 = load %10
-    %12:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_48:i32 = load %12
-    %14:ptr<function, i32, read_write> = access %r, %x_46
-    store %14, %x_48
-    %15:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_51:i32 = load %15
+    %11:i32 = load %10
+    %x_46:i32 = let %11
+    %13:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %14:i32 = load %13
+    %x_48:i32 = let %14
+    %16:ptr<function, i32, read_write> = access %r, %x_46
+    store %16, %x_48
     %17:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_53:i32 = load %17
-    %19:ptr<function, i32, read_write> = access %r, %x_51
-    store %19, %x_53
-    %20:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_56:i32 = load %20
-    %22:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_58:i32 = load %22
-    %24:ptr<function, i32, read_write> = access %r, %x_56
-    store %24, %x_58
-    %25:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-    %x_61:i32 = load %25
-    %27:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-    %x_63:i32 = load %27
-    %29:ptr<function, i32, read_write> = access %r, %x_61
-    store %29, %x_63
-    %30:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
-    %x_66:i32 = load %30
-    %32:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
-    %x_68:i32 = load %32
-    %34:ptr<function, i32, read_write> = access %r, %x_66
-    store %34, %x_68
-    %35:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
-    %x_71:i32 = load %35
-    %37:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_73:i32 = load %37
-    %39:ptr<function, i32, read_write> = access %r, %x_71
-    %40:i32 = negation %x_73
-    store %39, %40
-    %41:ptr<uniform, i32, read> = access %x_6, 0u, 8i, 0u
-    %x_77:i32 = load %41
-    %43:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_79:i32 = load %43
-    %45:ptr<function, i32, read_write> = access %r, %x_77
-    %46:i32 = negation %x_79
-    store %45, %46
-    %47:ptr<uniform, i32, read> = access %x_6, 0u, 9i, 0u
-    %x_83:i32 = load %47
-    %49:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_85:i32 = load %49
-    %51:ptr<function, i32, read_write> = access %r, %x_83
-    %52:i32 = negation %x_85
+    %18:i32 = load %17
+    %x_51:i32 = let %18
+    %20:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %21:i32 = load %20
+    %x_53:i32 = let %21
+    %23:ptr<function, i32, read_write> = access %r, %x_51
+    store %23, %x_53
+    %24:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %25:i32 = load %24
+    %x_56:i32 = let %25
+    %27:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %28:i32 = load %27
+    %x_58:i32 = let %28
+    %30:ptr<function, i32, read_write> = access %r, %x_56
+    store %30, %x_58
+    %31:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+    %32:i32 = load %31
+    %x_61:i32 = let %32
+    %34:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
+    %35:i32 = load %34
+    %x_63:i32 = let %35
+    %37:ptr<function, i32, read_write> = access %r, %x_61
+    store %37, %x_63
+    %38:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
+    %39:i32 = load %38
+    %x_66:i32 = let %39
+    %41:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
+    %42:i32 = load %41
+    %x_68:i32 = let %42
+    %44:ptr<function, i32, read_write> = access %r, %x_66
+    store %44, %x_68
+    %45:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
+    %46:i32 = load %45
+    %x_71:i32 = let %46
+    %48:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %49:i32 = load %48
+    %x_73:i32 = let %49
+    %51:ptr<function, i32, read_write> = access %r, %x_71
+    %52:i32 = negation %x_73
     store %51, %52
-    %53:ptr<uniform, i32, read> = access %x_6, 0u, 10i, 0u
-    %x_89:i32 = load %53
-    %55:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_91:i32 = load %55
-    %57:ptr<function, i32, read_write> = access %r, %x_89
-    %58:i32 = negation %x_91
-    store %57, %58
-    %59:ptr<uniform, i32, read> = access %x_6, 0u, 11i, 0u
-    %x_95:i32 = load %59
-    %61:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_97:i32 = load %61
-    %63:ptr<function, i32, read_write> = access %r, %x_95
-    %64:i32 = negation %x_97
-    store %63, %64
-    %65:ptr<uniform, i32, read> = access %x_6, 0u, 6i, 0u
-    %x_101:i32 = load %65
-    %67:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_103:i32 = load %67
-    %69:ptr<function, i32, read_write> = access %r, %x_101
-    %70:i32 = negation %x_103
-    store %69, %70
-    %71:ptr<uniform, i32, read> = access %x_6, 0u, 12i, 0u
-    %x_107:i32 = load %71
-    %73:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_109:i32 = load %73
-    %75:ptr<function, i32, read_write> = access %r, %x_107
-    %76:i32 = negation %x_109
+    %53:ptr<uniform, i32, read> = access %x_6, 0u, 8i, 0u
+    %54:i32 = load %53
+    %x_77:i32 = let %54
+    %56:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %57:i32 = load %56
+    %x_79:i32 = let %57
+    %59:ptr<function, i32, read_write> = access %r, %x_77
+    %60:i32 = negation %x_79
+    store %59, %60
+    %61:ptr<uniform, i32, read> = access %x_6, 0u, 9i, 0u
+    %62:i32 = load %61
+    %x_83:i32 = let %62
+    %64:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %65:i32 = load %64
+    %x_85:i32 = let %65
+    %67:ptr<function, i32, read_write> = access %r, %x_83
+    %68:i32 = negation %x_85
+    store %67, %68
+    %69:ptr<uniform, i32, read> = access %x_6, 0u, 10i, 0u
+    %70:i32 = load %69
+    %x_89:i32 = let %70
+    %72:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %73:i32 = load %72
+    %x_91:i32 = let %73
+    %75:ptr<function, i32, read_write> = access %r, %x_89
+    %76:i32 = negation %x_91
     store %75, %76
-    %77:ptr<uniform, i32, read> = access %x_6, 0u, 13i, 0u
-    %x_113:i32 = load %77
-    %79:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_115:i32 = load %79
-    %81:ptr<function, i32, read_write> = access %r, %x_113
-    %82:i32 = negation %x_115
-    store %81, %82
-    %83:ptr<uniform, i32, read> = access %x_6, 0u, 14i, 0u
-    %x_119:i32 = load %83
-    %85:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_121:i32 = load %85
-    %87:ptr<function, i32, read_write> = access %r, %x_119
-    %88:i32 = negation %x_121
-    store %87, %88
-    %89:ptr<uniform, i32, read> = access %x_6, 0u, 15i, 0u
-    %x_125:i32 = load %89
-    %91:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %x_127:i32 = load %91
-    %93:ptr<function, i32, read_write> = access %r, %x_125
-    %94:i32 = negation %x_127
-    store %93, %94
+    %77:ptr<uniform, i32, read> = access %x_6, 0u, 11i, 0u
+    %78:i32 = load %77
+    %x_95:i32 = let %78
+    %80:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %81:i32 = load %80
+    %x_97:i32 = let %81
+    %83:ptr<function, i32, read_write> = access %r, %x_95
+    %84:i32 = negation %x_97
+    store %83, %84
+    %85:ptr<uniform, i32, read> = access %x_6, 0u, 6i, 0u
+    %86:i32 = load %85
+    %x_101:i32 = let %86
+    %88:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %89:i32 = load %88
+    %x_103:i32 = let %89
+    %91:ptr<function, i32, read_write> = access %r, %x_101
+    %92:i32 = negation %x_103
+    store %91, %92
+    %93:ptr<uniform, i32, read> = access %x_6, 0u, 12i, 0u
+    %94:i32 = load %93
+    %x_107:i32 = let %94
+    %96:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %97:i32 = load %96
+    %x_109:i32 = let %97
+    %99:ptr<function, i32, read_write> = access %r, %x_107
+    %100:i32 = negation %x_109
+    store %99, %100
+    %101:ptr<uniform, i32, read> = access %x_6, 0u, 13i, 0u
+    %102:i32 = load %101
+    %x_113:i32 = let %102
+    %104:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %105:i32 = load %104
+    %x_115:i32 = let %105
+    %107:ptr<function, i32, read_write> = access %r, %x_113
+    %108:i32 = negation %x_115
+    store %107, %108
+    %109:ptr<uniform, i32, read> = access %x_6, 0u, 14i, 0u
+    %110:i32 = load %109
+    %x_119:i32 = let %110
+    %112:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %113:i32 = load %112
+    %x_121:i32 = let %113
+    %115:ptr<function, i32, read_write> = access %r, %x_119
+    %116:i32 = negation %x_121
+    store %115, %116
+    %117:ptr<uniform, i32, read> = access %x_6, 0u, 15i, 0u
+    %118:i32 = load %117
+    %x_125:i32 = let %118
+    %120:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
+    %121:i32 = load %120
+    %x_127:i32 = let %121
+    %123:ptr<function, i32, read_write> = access %r, %x_125
+    %124:i32 = negation %x_127
+    store %123, %124
     store %i, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_134:i32 = load %i
-        %96:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
-        %x_136:i32 = load %96
-        %98:bool = lt %x_134, %x_136
-        if %98 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %125:i32 = load %i
+        %x_134:i32 = let %125
+        %127:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
+        %128:i32 = load %127
+        %x_136:i32 = let %128
+        %130:bool = lt %x_134, %x_136
+        if %130 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_139:i32 = load %i
-        %x_140:i32 = load %i
-        %x_142:i32 = load %i
-        %102:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_145:i32 = load %102
-        %104:ptr<function, i32, read_write> = access %data, %x_139
-        %105:i32 = complement %x_140
-        %106:i32 = complement %x_142
-        %107:i32 = clamp %105, %106, %x_145
-        %108:i32 = complement %107
-        store %104, %108
-        continue %b4
+        %131:i32 = load %i
+        %x_139:i32 = let %131
+        %133:i32 = load %i
+        %x_140:i32 = let %133
+        %135:i32 = load %i
+        %x_142:i32 = let %135
+        %137:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %138:i32 = load %137
+        %x_145:i32 = let %138
+        %140:ptr<function, i32, read_write> = access %data, %x_139
+        %141:i32 = complement %x_140
+        %142:i32 = complement %x_142
+        %143:i32 = max %141, %142
+        %144:i32 = min %143, %x_145
+        %145:i32 = complement %144
+        store %140, %145
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_149:i32 = load %i
-        %110:i32 = add %x_149, 1i
-        store %i, %110
-        next_iteration %b3
+      $B4: {  # continuing
+        %146:i32 = load %i
+        %x_149:i32 = let %146
+        %148:i32 = add %x_149, 1i
+        store %i, %148
+        next_iteration  # -> $B3
       }
     }
-    %111:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
-    %x_152:i32 = load %111
+    %149:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
+    %150:i32 = load %149
+    %x_152:i32 = let %150
     store %i_1, %x_152
-    loop [b: %b7, c: %b8] {  # loop_2
-      %b7 = block {  # body
-        %x_157:i32 = load %i_1
-        %114:ptr<uniform, i32, read> = access %x_6, 0u, 6i, 0u
-        %x_159:i32 = load %114
-        %116:bool = lt %x_157, %x_159
-        if %116 [t: %b9, f: %b10] {  # if_2
-          %b9 = block {  # true
+    loop [b: $B7, c: $B8] {  # loop_2
+      $B7: {  # body
+        %152:i32 = load %i_1
+        %x_157:i32 = let %152
+        %154:ptr<uniform, i32, read> = access %x_6, 0u, 6i, 0u
+        %155:i32 = load %154
+        %x_159:i32 = let %155
+        %157:bool = lt %x_157, %x_159
+        if %157 [t: $B9, f: $B10] {  # if_2
+          $B9: {  # true
             exit_if  # if_2
           }
-          %b10 = block {  # false
+          $B10: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_162:i32 = load %i_1
-        %x_163:i32 = load %i_1
-        %119:ptr<function, i32, read_write> = access %data, %x_162
-        %120:i32 = complement %x_163
-        %121:i32 = clamp %120, 0i, 1i
-        %122:i32 = complement %121
-        store %119, %122
-        continue %b8
+        %158:i32 = load %i_1
+        %x_162:i32 = let %158
+        %160:i32 = load %i_1
+        %x_163:i32 = let %160
+        %162:ptr<function, i32, read_write> = access %data, %x_162
+        %163:i32 = complement %x_163
+        %164:i32 = max %163, 0i
+        %165:i32 = min %164, 1i
+        %166:i32 = complement %165
+        store %162, %166
+        continue  # -> $B8
       }
-      %b8 = block {  # continuing
-        %x_168:i32 = load %i_1
-        %124:i32 = add %x_168, 1i
-        store %i_1, %124
-        next_iteration %b7
+      $B8: {  # continuing
+        %167:i32 = load %i_1
+        %x_168:i32 = let %167
+        %169:i32 = add %x_168, 1i
+        store %i_1, %169
+        next_iteration  # -> $B7
       }
     }
-    %125:ptr<uniform, i32, read> = access %x_6, 0u, 6i, 0u
-    %x_171:i32 = load %125
+    %170:ptr<uniform, i32, read> = access %x_6, 0u, 6i, 0u
+    %171:i32 = load %170
+    %x_171:i32 = let %171
     store %i_2, %x_171
-    loop [b: %b11, c: %b12] {  # loop_3
-      %b11 = block {  # body
-        %x_176:i32 = load %i_2
-        %128:ptr<uniform, i32, read> = access %x_6, 0u, 7i, 0u
-        %x_178:i32 = load %128
-        %130:bool = lt %x_176, %x_178
-        if %130 [t: %b13, f: %b14] {  # if_3
-          %b13 = block {  # true
+    loop [b: $B11, c: $B12] {  # loop_3
+      $B11: {  # body
+        %173:i32 = load %i_2
+        %x_176:i32 = let %173
+        %175:ptr<uniform, i32, read> = access %x_6, 0u, 7i, 0u
+        %176:i32 = load %175
+        %x_178:i32 = let %176
+        %178:bool = lt %x_176, %x_178
+        if %178 [t: $B13, f: $B14] {  # if_3
+          $B13: {  # true
             exit_if  # if_3
           }
-          %b14 = block {  # false
+          $B14: {  # false
             exit_loop  # loop_3
           }
         }
-        %x_181:i32 = load %i_2
-        %x_182:i32 = load %i_2
-        %133:ptr<function, i32, read_write> = access %data, %x_181
-        %134:i32 = clamp %x_182, 0i, 1i
-        %135:i32 = complement %134
-        store %133, %135
-        continue %b12
+        %179:i32 = load %i_2
+        %x_181:i32 = let %179
+        %181:i32 = load %i_2
+        %x_182:i32 = let %181
+        %183:ptr<function, i32, read_write> = access %data, %x_181
+        %184:i32 = max %x_182, 0i
+        %185:i32 = min %184, 1i
+        %186:i32 = complement %185
+        store %183, %186
+        continue  # -> $B12
       }
-      %b12 = block {  # continuing
-        %x_186:i32 = load %i_2
-        %137:i32 = add %x_186, 1i
-        store %i_2, %137
-        next_iteration %b11
+      $B12: {  # continuing
+        %187:i32 = load %i_2
+        %x_186:i32 = let %187
+        %189:i32 = add %x_186, 1i
+        store %i_2, %189
+        next_iteration  # -> $B11
       }
     }
-    %138:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_189:i32 = load %138
+    %190:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %191:i32 = load %190
+    %x_189:i32 = let %191
     store %i_3, %x_189
-    loop [b: %b15, c: %b16] {  # loop_4
-      %b15 = block {  # body
-        %x_194:i32 = load %i_3
-        %141:ptr<uniform, i32, read> = access %x_6, 0u, 7i, 0u
-        %x_196:i32 = load %141
-        %143:bool = lt %x_194, %x_196
-        if %143 [t: %b17, f: %b18] {  # if_4
-          %b17 = block {  # true
+    loop [b: $B15, c: $B16] {  # loop_4
+      $B15: {  # body
+        %193:i32 = load %i_3
+        %x_194:i32 = let %193
+        %195:ptr<uniform, i32, read> = access %x_6, 0u, 7i, 0u
+        %196:i32 = load %195
+        %x_196:i32 = let %196
+        %198:bool = lt %x_194, %x_196
+        if %198 [t: $B17, f: $B18] {  # if_4
+          $B17: {  # true
             exit_if  # if_4
           }
-          %b18 = block {  # false
+          $B18: {  # false
             exit_loop  # loop_4
           }
         }
-        %x_199:i32 = load %i_3
-        %145:ptr<function, i32, read_write> = access %data, %x_199
-        %x_201:i32 = load %145
-        %x_202:i32 = load %i_3
-        %148:ptr<function, i32, read_write> = access %r, %x_202
-        %x_204:i32 = load %148
-        %150:bool = neq %x_201, %x_204
-        if %150 [t: %b19] {  # if_5
-          %b19 = block {  # true
-            %151:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-            %x_209:i32 = load %151
-            %x_210:f32 = convert %x_209
-            %154:vec4<f32> = construct %x_210, %x_210, %x_210, %x_210
-            store %x_GLF_color, %154
+        %199:i32 = load %i_3
+        %x_199:i32 = let %199
+        %201:ptr<function, i32, read_write> = access %data, %x_199
+        %202:i32 = load %201
+        %x_201:i32 = let %202
+        %204:i32 = load %i_3
+        %x_202:i32 = let %204
+        %206:ptr<function, i32, read_write> = access %r, %x_202
+        %207:i32 = load %206
+        %x_204:i32 = let %207
+        %209:bool = neq %x_201, %x_204
+        if %209 [t: $B19] {  # if_5
+          $B19: {  # true
+            %210:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+            %211:i32 = load %210
+            %x_209:i32 = let %211
+            %213:f32 = convert %x_209
+            %x_210:f32 = let %213
+            %215:vec4<f32> = construct %x_210, %x_210, %x_210, %x_210
+            store %x_GLF_color, %215
             ret
           }
         }
-        continue %b16
+        continue  # -> $B16
       }
-      %b16 = block {  # continuing
-        %x_212:i32 = load %i_3
-        %156:i32 = add %x_212, 1i
-        store %i_3, %156
-        next_iteration %b15
+      $B16: {  # continuing
+        %216:i32 = load %i_3
+        %x_212:i32 = let %216
+        %218:i32 = add %x_212, 1i
+        store %i_3, %218
+        next_iteration  # -> $B15
       }
     }
-    %157:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_215:i32 = load %157
-    %159:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_218:i32 = load %159
-    %161:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_221:i32 = load %161
-    %163:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %x_224:i32 = load %163
-    %165:f32 = convert %x_215
-    %166:f32 = convert %x_218
-    %167:f32 = convert %x_221
-    %168:f32 = convert %x_224
-    %169:vec4<f32> = construct %165, %166, %167, %168
-    store %x_GLF_color, %169
+    %219:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %220:i32 = load %219
+    %x_215:i32 = let %220
+    %222:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %223:i32 = load %222
+    %x_218:i32 = let %223
+    %225:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %226:i32 = load %225
+    %x_221:i32 = let %226
+    %228:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+    %229:i32 = load %228
+    %x_224:i32 = let %229
+    %231:f32 = convert %x_215
+    %232:f32 = let %231
+    %233:f32 = convert %x_218
+    %234:f32 = let %233
+    %235:f32 = convert %x_221
+    %236:f32 = let %235
+    %237:f32 = convert %x_224
+    %238:vec4<f32> = construct %232, %234, %236, %237
+    store %x_GLF_color, %238
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b20 {
-  %b20 = block {
-    %171:void = call %main_1
-    %172:vec4<f32> = load %x_GLF_color
-    %173:main_out = construct %172
-    ret %173
+%tint_symbol = @fragment func():main_out {
+  $B20: {
+    %240:void = call %main_1
+    %241:vec4<f32> = load %x_GLF_color
+    %242:main_out = construct %241
+    ret %242
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-value-tracking-uniform-incident/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-value-tracking-uniform-incident/0-opt.spvasm.expected.ir.msl
index 36ec8ed..be51fb4 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-value-tracking-uniform-incident/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-value-tracking-uniform-incident/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   quarter:f32 @offset(0)
 }
 
@@ -8,13 +8,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %N:ptr<function, vec4<f32>, read_write> = var
     %I:ptr<function, vec4<f32>, read_write> = var
     %Nref:ptr<function, vec4<f32>, read_write> = var
@@ -33,12 +33,12 @@
     %15:vec4<f32> = load %v
     %16:vec4<bool> = eq %15, vec4<f32>(-1.0f, -2.0f, -3.0f, -4.0f)
     %17:bool = all %16
-    if %17 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    if %17 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
@@ -46,8 +46,8 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
+%tint_symbol = @fragment func():main_out {
+  $B5: {
     %19:void = call %main_1
     %20:vec4<f32> = load %x_GLF_color
     %21:main_out = construct %20
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-value-tracking-uniform-incident/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-value-tracking-uniform-incident/0-opt.wgsl.expected.ir.msl
index a027e89..8e00a87 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-value-tracking-uniform-incident/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-value-tracking-uniform-incident/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   quarter:f32 @offset(0)
 }
 
@@ -8,37 +8,42 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %N:ptr<function, vec4<f32>, read_write> = var
     %I:ptr<function, vec4<f32>, read_write> = var
     %Nref:ptr<function, vec4<f32>, read_write> = var
     %v:ptr<function, vec4<f32>, read_write> = var
     store %N, vec4<f32>(1.0f, 2.0f, 3.0f, 4.0f)
     %8:ptr<uniform, f32, read> = access %x_7, 0u
-    %x_44:f32 = load %8
-    %10:vec4<f32> = construct 4.0f, 87.589996337890625f, %x_44, 92.51000213623046875f
-    store %I, %10
+    %9:f32 = load %8
+    %x_44:f32 = let %9
+    %11:vec4<f32> = construct 4.0f, 87.589996337890625f, %x_44, 92.51000213623046875f
+    store %I, %11
     store %Nref, vec4<f32>(17.049999237060546875f, -6.09999990463256835938f, 4329.37060546875f, 2.70000004768371582031f)
-    %x_46:vec4<f32> = load %N
-    %x_47:vec4<f32> = load %I
-    %x_48:vec4<f32> = load %Nref
-    %14:vec4<f32> = faceForward %x_46, %x_47, %x_48
-    store %v, %14
-    %x_50:vec4<f32> = load %v
-    %16:vec4<bool> = eq %x_50, vec4<f32>(-1.0f, -2.0f, -3.0f, -4.0f)
-    %17:bool = all %16
-    if %17 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    %12:vec4<f32> = load %N
+    %x_46:vec4<f32> = let %12
+    %14:vec4<f32> = load %I
+    %x_47:vec4<f32> = let %14
+    %16:vec4<f32> = load %Nref
+    %x_48:vec4<f32> = let %16
+    %18:vec4<f32> = faceForward %x_46, %x_47, %x_48
+    store %v, %18
+    %19:vec4<f32> = load %v
+    %x_50:vec4<f32> = let %19
+    %21:vec4<bool> = eq %x_50, vec4<f32>(-1.0f, -2.0f, -3.0f, -4.0f)
+    %22:bool = all %21
+    if %22 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_1
       }
@@ -46,12 +51,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %19:void = call %main_1
-    %20:vec4<f32> = load %x_GLF_color
-    %21:main_out = construct %20
-    ret %21
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %24:void = call %main_1
+    %25:vec4<f32> = load %x_GLF_color
+    %26:main_out = construct %25
+    ret %26
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-vector-dce-inc-unused-comp/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-vector-dce-inc-unused-comp/0-opt.spvasm.expected.ir.msl
index aa9939b..8b140a3 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-vector-dce-inc-unused-comp/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-vector-dce-inc-unused-comp/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   zero:i32 @offset(0)
 }
 
@@ -8,21 +8,21 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, vec2<f32>, read_write> = var
     %b:ptr<function, vec2<f32>, read_write> = var
     store %a, vec2<f32>(1.0f)
     %6:ptr<uniform, i32, read> = access %x_6, 0u
     %7:i32 = load %6
     %8:bool = eq %7, 1i
-    if %8 [t: %b3] {  # if_1
-      %b3 = block {  # true
+    if %8 [t: $B3] {  # if_1
+      $B3: {  # true
         %9:f32 = load_vector_element %a, 0u
         %10:f32 = add %9, 1.0f
         store_vector_element %a, 0u, %10
@@ -36,12 +36,12 @@
     %14:vec2<f32> = load %b
     %15:vec2<bool> = eq %14, vec2<f32>(3.0f, 4.0f)
     %16:bool = all %15
-    if %16 [t: %b4, f: %b5] {  # if_2
-      %b4 = block {  # true
+    if %16 [t: $B4, f: $B5] {  # if_2
+      $B4: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_2
       }
-      %b5 = block {  # false
+      $B5: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_2
       }
@@ -49,8 +49,8 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b6 {
-  %b6 = block {
+%tint_symbol = @fragment func():main_out {
+  $B6: {
     %18:void = call %main_1
     %19:vec4<f32> = load %x_GLF_color
     %20:main_out = construct %19
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-vector-dce-inc-unused-comp/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-vector-dce-inc-unused-comp/0-opt.wgsl.expected.ir.msl
index 30af25a..699c8aa 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-vector-dce-inc-unused-comp/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-vector-dce-inc-unused-comp/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   zero:i32 @offset(0)
 }
 
@@ -8,40 +8,44 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, vec2<f32>, read_write> = var
     %b:ptr<function, vec2<f32>, read_write> = var
     store %a, vec2<f32>(1.0f)
     %6:ptr<uniform, i32, read> = access %x_6, 0u
-    %x_38:i32 = load %6
-    %8:bool = eq %x_38, 1i
-    if %8 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %x_43:f32 = load_vector_element %a, 0u
-        %10:f32 = add %x_43, 1.0f
-        store_vector_element %a, 0u, %10
+    %7:i32 = load %6
+    %x_38:i32 = let %7
+    %9:bool = eq %x_38, 1i
+    if %9 [t: $B3] {  # if_1
+      $B3: {  # true
+        %10:f32 = load_vector_element %a, 0u
+        %x_43:f32 = let %10
+        %12:f32 = add %x_43, 1.0f
+        store_vector_element %a, 0u, %12
         exit_if  # if_1
       }
     }
-    %x_47:f32 = load_vector_element %a, 1u
-    %12:vec2<f32> = construct %x_47, %x_47
-    %13:vec2<f32> = add %12, vec2<f32>(2.0f, 3.0f)
-    store %b, %13
-    %x_50:vec2<f32> = load %b
-    %15:vec2<bool> = eq %x_50, vec2<f32>(3.0f, 4.0f)
-    %16:bool = all %15
-    if %16 [t: %b4, f: %b5] {  # if_2
-      %b4 = block {  # true
+    %13:f32 = load_vector_element %a, 1u
+    %x_47:f32 = let %13
+    %15:vec2<f32> = construct %x_47, %x_47
+    %16:vec2<f32> = add %15, vec2<f32>(2.0f, 3.0f)
+    store %b, %16
+    %17:vec2<f32> = load %b
+    %x_50:vec2<f32> = let %17
+    %19:vec2<bool> = eq %x_50, vec2<f32>(3.0f, 4.0f)
+    %20:bool = all %19
+    if %20 [t: $B4, f: $B5] {  # if_2
+      $B4: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_2
       }
-      %b5 = block {  # false
+      $B5: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_2
       }
@@ -49,12 +53,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b6 {
-  %b6 = block {
-    %18:void = call %main_1
-    %19:vec4<f32> = load %x_GLF_color
-    %20:main_out = construct %19
-    ret %20
+%tint_symbol = @fragment func():main_out {
+  $B6: {
+    %22:void = call %main_1
+    %23:vec4<f32> = load %x_GLF_color
+    %24:main_out = construct %23
+    ret %24
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-vector-dce-unused-component/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-vector-dce-unused-component/0-opt.spvasm.expected.ir.msl
index efdd3b1..99a07a8 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-vector-dce-unused-component/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-vector-dce-unused-component/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,49 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+}
+
+%main_1 = func():void {
+  $B2: {
+    %a:ptr<function, vec2<f32>, read_write> = var
+    %b:ptr<function, vec2<f32>, read_write> = var
+    store %a, vec2<f32>(1.0f)
+    %5:f32 = load_vector_element %a, 0u
+    %6:f32 = add %5, 0.5f
+    store_vector_element %a, 0u, %6
+    %7:vec2<f32> = load %a
+    %8:vec2<f32> = fract %7
+    store %b, %8
+    %9:f32 = load_vector_element %b, 0u
+    %10:bool = eq %9, 0.5f
+    if %10 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        exit_if  # if_1
+      }
+      $B4: {  # false
+        store %x_GLF_color, vec4<f32>(0.0f)
+        exit_if  # if_1
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %12:void = call %main_1
+    %13:vec4<f32> = load %x_GLF_color
+    %14:main_out = construct %13
+    ret %14
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-vector-dce-unused-component/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-vector-dce-unused-component/0-opt.wgsl.expected.ir.msl
index efdd3b1..a817efc 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-vector-dce-unused-component/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-vector-dce-unused-component/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,52 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+}
+
+%main_1 = func():void {
+  $B2: {
+    %a:ptr<function, vec2<f32>, read_write> = var
+    %b:ptr<function, vec2<f32>, read_write> = var
+    store %a, vec2<f32>(1.0f)
+    %5:f32 = load_vector_element %a, 0u
+    %x_25:f32 = let %5
+    %7:f32 = add %x_25, 0.5f
+    store_vector_element %a, 0u, %7
+    %8:vec2<f32> = load %a
+    %x_28:vec2<f32> = let %8
+    %10:vec2<f32> = fract %x_28
+    store %b, %10
+    %11:f32 = load_vector_element %b, 0u
+    %x_31:f32 = let %11
+    %13:bool = eq %x_31, 0.5f
+    if %13 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        exit_if  # if_1
+      }
+      $B4: {  # false
+        store %x_GLF_color, vec4<f32>(0.0f)
+        exit_if  # if_1
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %15:void = call %main_1
+    %16:vec4<f32> = load %x_GLF_color
+    %17:main_out = construct %16
+    ret %17
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-vector-log2-cosh/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-vector-log2-cosh/0-opt.spvasm.expected.ir.msl
index efdd3b1..bd791aa 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-vector-log2-cosh/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-vector-log2-cosh/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,43 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+}
+
+%main_1 = func():void {
+  $B2: {
+    %v:ptr<function, vec2<f32>, read_write> = var
+    store %v, vec2<f32>(0.62581348419189453125f, 13.4269504547119140625f)
+    %4:f32 = load_vector_element %v, 0u
+    %5:f32 = load_vector_element %v, 1u
+    %6:bool = lt %4, %5
+    if %6 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        exit_if  # if_1
+      }
+      $B4: {  # false
+        store %x_GLF_color, vec4<f32>(0.0f)
+        exit_if  # if_1
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %8:void = call %main_1
+    %9:vec4<f32> = load %x_GLF_color
+    %10:main_out = construct %9
+    ret %10
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-vector-log2-cosh/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-vector-log2-cosh/0-opt.wgsl.expected.ir.msl
index efdd3b1..c59325e 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-vector-log2-cosh/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-vector-log2-cosh/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,45 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+}
+
+%main_1 = func():void {
+  $B2: {
+    %v:ptr<function, vec2<f32>, read_write> = var
+    store %v, vec2<f32>(0.62581348419189453125f, 13.4269504547119140625f)
+    %4:f32 = load_vector_element %v, 0u
+    %x_27:f32 = let %4
+    %6:f32 = load_vector_element %v, 1u
+    %x_29:f32 = let %6
+    %8:bool = lt %x_27, %x_29
+    if %8 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        exit_if  # if_1
+      }
+      $B4: {  # false
+        store %x_GLF_color, vec4<f32>(0.0f)
+        exit_if  # if_1
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %10:void = call %main_1
+    %11:vec4<f32> = load %x_GLF_color
+    %12:main_out = construct %11
+    ret %12
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-apfloat-nan-cos-cos/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-apfloat-nan-cos-cos/0-opt.spvasm.expected.ir.msl
index 36d61fc..d6ccbea 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-apfloat-nan-cos-cos/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-apfloat-nan-cos-cos/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,14 +20,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_8:ptr<uniform, buf1, read> = var @binding_point(0, 1)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %v1:ptr<function, vec2<f32>, read_write> = var
     %x_54:ptr<function, bool, read_write> = var
     %x_55:ptr<function, bool, read_write> = var
@@ -44,57 +44,61 @@
     %16:f32 = load_vector_element %v1, 1u
     %17:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
     %18:f32 = load %17
-    %x_47:bool = gt %16, %18
+    %19:bool = gt %16, %18
+    %x_47:bool = let %19
     store %x_55, %x_47
-    if %x_47 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %20:f32 = load_vector_element %v1, 1u
-        %21:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
-        %22:f32 = load %21
-        %23:bool = lt %20, %22
-        store %x_54, %23
-        %24:bool = load %x_54
-        store %x_55, %24
+    if %x_47 [t: $B3] {  # if_1
+      $B3: {  # true
+        %21:f32 = load_vector_element %v1, 1u
+        %22:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
+        %23:f32 = load %22
+        %24:bool = lt %21, %23
+        store %x_54, %24
+        %25:bool = load %x_54
+        store %x_55, %25
         exit_if  # if_1
       }
     }
-    %25:bool = load %x_55
-    if %25 [t: %b4, f: %b5] {  # if_2
-      %b4 = block {  # true
-        %26:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %27:i32 = load %26
-        %28:f32 = convert %27
-        %29:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %30:i32 = load %29
-        %31:f32 = convert %30
-        %32:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %33:i32 = load %32
-        %34:f32 = convert %33
-        %35:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+    %26:bool = load %x_55
+    if %26 [t: $B4, f: $B5] {  # if_2
+      $B4: {  # true
+        %27:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %28:i32 = load %27
+        %29:f32 = convert %28
+        %30:f32 = let %29
+        %31:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %32:i32 = load %31
+        %33:f32 = convert %32
+        %34:f32 = let %33
+        %35:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
         %36:i32 = load %35
         %37:f32 = convert %36
-        %38:vec4<f32> = construct %28, %31, %34, %37
-        store %x_GLF_color, %38
-        exit_if  # if_2
-      }
-      %b5 = block {  # false
-        %39:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %38:f32 = let %37
+        %39:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
         %40:i32 = load %39
         %41:f32 = convert %40
-        %42:vec4<f32> = construct %41
+        %42:vec4<f32> = construct %30, %34, %38, %41
         store %x_GLF_color, %42
         exit_if  # if_2
       }
+      $B5: {  # false
+        %43:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %44:i32 = load %43
+        %45:f32 = convert %44
+        %46:vec4<f32> = construct %45
+        store %x_GLF_color, %46
+        exit_if  # if_2
+      }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b6 {
-  %b6 = block {
-    %44:void = call %main_1
-    %45:vec4<f32> = load %x_GLF_color
-    %46:main_out = construct %45
-    ret %46
+%tint_symbol = @fragment func():main_out {
+  $B6: {
+    %48:void = call %main_1
+    %49:vec4<f32> = load %x_GLF_color
+    %50:main_out = construct %49
+    ret %50
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-apfloat-nan-cos-cos/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-apfloat-nan-cos-cos/0-opt.wgsl.expected.ir.msl
index c84b3fb..38dd815 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-apfloat-nan-cos-cos/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-apfloat-nan-cos-cos/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -20,81 +20,98 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_8:ptr<uniform, buf1, read> = var @binding_point(0, 1)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %v1:ptr<function, vec2<f32>, read_write> = var
     %x_54:ptr<function, bool, read_write> = var
     %x_55_phi:ptr<function, bool, read_write> = var
     %8:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-    %x_35:i32 = load %8
-    %10:vec2<i32> = construct -1i, %x_35
-    %11:vec2<f32> = bitcast %10
-    %12:vec2<f32> = cos %11
+    %9:i32 = load %8
+    %x_35:i32 = let %9
+    %11:vec2<i32> = construct -1i, %x_35
+    %12:vec2<f32> = bitcast %11
     %13:vec2<f32> = cos %12
-    store %v1, %13
-    %x_41:f32 = load_vector_element %v1, 0u
-    %15:vec4<f32> = construct %x_41, %x_41, %x_41, %x_41
-    store %x_GLF_color, %15
-    %x_44:f32 = load_vector_element %v1, 1u
-    %17:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-    %x_46:f32 = load %17
-    %x_47:bool = gt %x_44, %x_46
+    %14:vec2<f32> = cos %13
+    store %v1, %14
+    %15:f32 = load_vector_element %v1, 0u
+    %x_41:f32 = let %15
+    %17:vec4<f32> = construct %x_41, %x_41, %x_41, %x_41
+    store %x_GLF_color, %17
+    %18:f32 = load_vector_element %v1, 1u
+    %x_44:f32 = let %18
+    %20:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+    %21:f32 = load %20
+    %x_46:f32 = let %21
+    %23:bool = gt %x_44, %x_46
+    %x_47:bool = let %23
     store %x_55_phi, %x_47
-    if %x_47 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %x_51:f32 = load_vector_element %v1, 1u
-        %21:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
-        %x_53:f32 = load %21
-        %23:bool = lt %x_51, %x_53
-        store %x_54, %23
-        %24:bool = load %x_54
-        store %x_55_phi, %24
+    if %x_47 [t: $B3] {  # if_1
+      $B3: {  # true
+        %25:f32 = load_vector_element %v1, 1u
+        %x_51:f32 = let %25
+        %27:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
+        %28:f32 = load %27
+        %x_53:f32 = let %28
+        %30:bool = lt %x_51, %x_53
+        store %x_54, %30
+        %31:bool = load %x_54
+        store %x_55_phi, %31
         exit_if  # if_1
       }
     }
-    %x_55:bool = load %x_55_phi
-    if %x_55 [t: %b4, f: %b5] {  # if_2
-      %b4 = block {  # true
-        %26:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_60:i32 = load %26
-        %28:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_63:i32 = load %28
-        %30:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_66:i32 = load %30
-        %32:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %x_69:i32 = load %32
-        %34:f32 = convert %x_60
-        %35:f32 = convert %x_63
-        %36:f32 = convert %x_66
-        %37:f32 = convert %x_69
-        %38:vec4<f32> = construct %34, %35, %36, %37
-        store %x_GLF_color, %38
+    %32:bool = load %x_55_phi
+    %x_55:bool = let %32
+    if %x_55 [t: $B4, f: $B5] {  # if_2
+      $B4: {  # true
+        %34:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %35:i32 = load %34
+        %x_60:i32 = let %35
+        %37:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %38:i32 = load %37
+        %x_63:i32 = let %38
+        %40:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %41:i32 = load %40
+        %x_66:i32 = let %41
+        %43:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
+        %44:i32 = load %43
+        %x_69:i32 = let %44
+        %46:f32 = convert %x_60
+        %47:f32 = let %46
+        %48:f32 = convert %x_63
+        %49:f32 = let %48
+        %50:f32 = convert %x_66
+        %51:f32 = let %50
+        %52:f32 = convert %x_69
+        %53:vec4<f32> = construct %47, %49, %51, %52
+        store %x_GLF_color, %53
         exit_if  # if_2
       }
-      %b5 = block {  # false
-        %39:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %x_73:i32 = load %39
-        %x_74:f32 = convert %x_73
-        %42:vec4<f32> = construct %x_74, %x_74, %x_74, %x_74
-        store %x_GLF_color, %42
+      $B5: {  # false
+        %54:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
+        %55:i32 = load %54
+        %x_73:i32 = let %55
+        %57:f32 = convert %x_73
+        %x_74:f32 = let %57
+        %59:vec4<f32> = construct %x_74, %x_74, %x_74, %x_74
+        store %x_GLF_color, %59
         exit_if  # if_2
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b6 {
-  %b6 = block {
-    %44:void = call %main_1
-    %45:vec4<f32> = load %x_GLF_color
-    %46:main_out = construct %45
-    ret %46
+%tint_symbol = @fragment func():main_out {
+  $B6: {
+    %61:void = call %main_1
+    %62:vec4<f32> = load %x_GLF_color
+    %63:main_out = construct %62
+    ret %63
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-machine-value-type-uint-to-float/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-machine-value-type-uint-to-float/0-opt.spvasm.expected.ir.msl
index 9fa3a55..fad44d2 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-machine-value-type-uint-to-float/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-machine-value-type-uint-to-float/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:u32 @offset(0)
 }
 
@@ -28,69 +28,84 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_8:ptr<uniform, buf2, read> = var @binding_point(0, 2)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_12:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, u32, read_write> = var
     %b:ptr<function, f32, read_write> = var
     %c:ptr<function, u32, read_write> = var
     %9:ptr<uniform, u32, read> = access %x_6, 0u, 0i, 0u
     %10:u32 = load %9
-    %11:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-    %12:f32 = load %11
-    %13:u32 = convert %12
-    %14:u32 = shiftr %10, %13
-    store %a, %14
-    %15:u32 = load %a
-    %16:f32 = bitcast %15
-    store %b, %16
-    %17:f32 = load %b
-    %18:u32 = bitcast %17
-    store %c, %18
-    %19:u32 = load %c
-    %20:ptr<uniform, u32, read> = access %x_6, 0u, 0i, 0u
-    %21:u32 = load %20
-    %22:bool = eq %19, %21
-    if %22 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %23:ptr<uniform, i32, read> = access %x_12, 0u, 0i, 0u
-        %24:i32 = load %23
-        %25:f32 = convert %24
-        %26:ptr<uniform, i32, read> = access %x_12, 0u, 1i, 0u
+    %11:u32 = let %10
+    %12:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+    %13:f32 = load %12
+    %14:u32 = call %tint_f32_to_u32, %13
+    %16:u32 = and %14, 31u
+    %17:u32 = shr %11, %16
+    store %a, %17
+    %18:u32 = load %a
+    %19:f32 = bitcast %18
+    store %b, %19
+    %20:f32 = load %b
+    %21:u32 = bitcast %20
+    store %c, %21
+    %22:u32 = load %c
+    %23:ptr<uniform, u32, read> = access %x_6, 0u, 0i, 0u
+    %24:u32 = load %23
+    %25:bool = eq %22, %24
+    if %25 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %26:ptr<uniform, i32, read> = access %x_12, 0u, 0i, 0u
         %27:i32 = load %26
         %28:f32 = convert %27
-        %29:ptr<uniform, i32, read> = access %x_12, 0u, 1i, 0u
-        %30:i32 = load %29
-        %31:f32 = convert %30
-        %32:ptr<uniform, i32, read> = access %x_12, 0u, 0i, 0u
-        %33:i32 = load %32
-        %34:f32 = convert %33
-        %35:vec4<f32> = construct %25, %28, %31, %34
-        store %x_GLF_color, %35
+        %29:f32 = let %28
+        %30:ptr<uniform, i32, read> = access %x_12, 0u, 1i, 0u
+        %31:i32 = load %30
+        %32:f32 = convert %31
+        %33:f32 = let %32
+        %34:ptr<uniform, i32, read> = access %x_12, 0u, 1i, 0u
+        %35:i32 = load %34
+        %36:f32 = convert %35
+        %37:f32 = let %36
+        %38:ptr<uniform, i32, read> = access %x_12, 0u, 0i, 0u
+        %39:i32 = load %38
+        %40:f32 = convert %39
+        %41:vec4<f32> = construct %29, %33, %37, %40
+        store %x_GLF_color, %41
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %36:f32 = load %b
-        %37:vec4<f32> = construct %36
-        store %x_GLF_color, %37
+      $B4: {  # false
+        %42:f32 = load %b
+        %43:vec4<f32> = construct %42
+        store %x_GLF_color, %43
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %39:void = call %main_1
-    %40:vec4<f32> = load %x_GLF_color
-    %41:main_out = construct %40
-    ret %41
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %45:void = call %main_1
+    %46:vec4<f32> = load %x_GLF_color
+    %47:main_out = construct %46
+    ret %47
+  }
+}
+%tint_f32_to_u32 = func(%value:f32):u32 {
+  $B6: {
+    %49:u32 = convert %value
+    %50:bool = gte %value, 0.0f
+    %51:u32 = select 0u, %49, %50
+    %52:bool = lte %value, 4294967040.0f
+    %53:u32 = select 4294967295u, %51, %52
+    ret %53
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-machine-value-type-uint-to-float/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-machine-value-type-uint-to-float/0-opt.wgsl.expected.ir.msl
index e7ce436..2d7dba8 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-machine-value-type-uint-to-float/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-machine-value-type-uint-to-float/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:u32 @offset(0)
 }
 
@@ -28,69 +28,94 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_8:ptr<uniform, buf2, read> = var @binding_point(0, 2)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_12:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %a:ptr<function, u32, read_write> = var
     %b:ptr<function, f32, read_write> = var
     %c:ptr<function, u32, read_write> = var
     %9:ptr<uniform, u32, read> = access %x_6, 0u, 0i, 0u
-    %x_38:u32 = load %9
-    %11:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
-    %x_40:f32 = load %11
-    %13:u32 = convert %x_40
-    %14:u32 = shiftr %x_38, %13
-    store %a, %14
-    %x_43:u32 = load %a
-    %16:f32 = bitcast %x_43
-    store %b, %16
-    %x_45:f32 = load %b
-    %18:u32 = bitcast %x_45
-    store %c, %18
-    %x_47:u32 = load %c
-    %20:ptr<uniform, u32, read> = access %x_6, 0u, 0i, 0u
-    %x_49:u32 = load %20
-    %22:bool = eq %x_47, %x_49
-    if %22 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %23:ptr<uniform, i32, read> = access %x_12, 0u, 0i, 0u
-        %x_55:i32 = load %23
-        %25:ptr<uniform, i32, read> = access %x_12, 0u, 1i, 0u
-        %x_58:i32 = load %25
-        %27:ptr<uniform, i32, read> = access %x_12, 0u, 1i, 0u
-        %x_61:i32 = load %27
-        %29:ptr<uniform, i32, read> = access %x_12, 0u, 0i, 0u
-        %x_64:i32 = load %29
-        %31:f32 = convert %x_55
-        %32:f32 = convert %x_58
-        %33:f32 = convert %x_61
-        %34:f32 = convert %x_64
-        %35:vec4<f32> = construct %31, %32, %33, %34
-        store %x_GLF_color, %35
+    %10:u32 = load %9
+    %x_38:u32 = let %10
+    %12:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
+    %13:f32 = load %12
+    %x_40:f32 = let %13
+    %15:u32 = call %tint_f32_to_u32, %x_40
+    %17:u32 = and %15, 31u
+    %18:u32 = shr %x_38, %17
+    store %a, %18
+    %19:u32 = load %a
+    %x_43:u32 = let %19
+    %21:f32 = bitcast %x_43
+    store %b, %21
+    %22:f32 = load %b
+    %x_45:f32 = let %22
+    %24:u32 = bitcast %x_45
+    store %c, %24
+    %25:u32 = load %c
+    %x_47:u32 = let %25
+    %27:ptr<uniform, u32, read> = access %x_6, 0u, 0i, 0u
+    %28:u32 = load %27
+    %x_49:u32 = let %28
+    %30:bool = eq %x_47, %x_49
+    if %30 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %31:ptr<uniform, i32, read> = access %x_12, 0u, 0i, 0u
+        %32:i32 = load %31
+        %x_55:i32 = let %32
+        %34:ptr<uniform, i32, read> = access %x_12, 0u, 1i, 0u
+        %35:i32 = load %34
+        %x_58:i32 = let %35
+        %37:ptr<uniform, i32, read> = access %x_12, 0u, 1i, 0u
+        %38:i32 = load %37
+        %x_61:i32 = let %38
+        %40:ptr<uniform, i32, read> = access %x_12, 0u, 0i, 0u
+        %41:i32 = load %40
+        %x_64:i32 = let %41
+        %43:f32 = convert %x_55
+        %44:f32 = let %43
+        %45:f32 = convert %x_58
+        %46:f32 = let %45
+        %47:f32 = convert %x_61
+        %48:f32 = let %47
+        %49:f32 = convert %x_64
+        %50:vec4<f32> = construct %44, %46, %48, %49
+        store %x_GLF_color, %50
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %x_67:f32 = load %b
-        %37:vec4<f32> = construct %x_67, %x_67, %x_67, %x_67
-        store %x_GLF_color, %37
+      $B4: {  # false
+        %51:f32 = load %b
+        %x_67:f32 = let %51
+        %53:vec4<f32> = construct %x_67, %x_67, %x_67, %x_67
+        store %x_GLF_color, %53
         exit_if  # if_1
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b5 {
-  %b5 = block {
-    %39:void = call %main_1
-    %40:vec4<f32> = load %x_GLF_color
-    %41:main_out = construct %40
-    ret %41
+%tint_symbol = @fragment func():main_out {
+  $B5: {
+    %55:void = call %main_1
+    %56:vec4<f32> = load %x_GLF_color
+    %57:main_out = construct %56
+    ret %57
+  }
+}
+%tint_f32_to_u32 = func(%value:f32):u32 {
+  $B6: {
+    %59:u32 = convert %value
+    %60:bool = gte %value, 0.0f
+    %61:u32 = select 0u, %59, %60
+    %62:bool = lte %value, 4294967040.0f
+    %63:u32 = select 4294967295u, %61, %62
+    ret %63
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-negative-left-shift/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-negative-left-shift/0-opt.spvasm.expected.ir.msl
index 0ed63e3..62a4844 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-negative-left-shift/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-negative-left-shift/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,14 +20,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_9:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %A:ptr<function, array<f32, 2>, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %j:ptr<function, i32, read_write> = var
@@ -44,144 +44,151 @@
     %16:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
     %17:i32 = load %16
     store %i, %17
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %18:i32 = load %i
         %19:ptr<uniform, i32, read> = access %x_9, 0u, 3i, 0u
         %20:i32 = load %19
         %21:bool = lt %18, %20
-        if %21 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %21 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
         %22:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
         %23:i32 = load %22
         store %j, %23
-        loop [b: %b7, c: %b8] {  # loop_2
-          %b7 = block {  # body
+        loop [b: $B7, c: $B8] {  # loop_2
+          $B7: {  # body
             %24:i32 = load %j
             %25:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
             %26:i32 = load %25
             %27:bool = lt %24, %26
-            if %27 [t: %b9, f: %b10] {  # if_2
-              %b9 = block {  # true
+            if %27 [t: $B9, f: $B10] {  # if_2
+              $B9: {  # true
                 exit_if  # if_2
               }
-              %b10 = block {  # false
+              $B10: {  # false
                 exit_loop  # loop_2
               }
             }
-            %x_66:i32 = load %j
-            switch %x_66 [c: (1i, %b11), c: (0i, %b12), c: (default, %b13)] {  # switch_1
-              %b11 = block {  # case
-                %x_78:i32 = load %i
-                %30:ptr<function, f32, read_write> = access %A, %x_78
-                %31:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-                %32:f32 = load %31
-                store %30, %32
+            %28:i32 = load %j
+            %x_66:i32 = let %28
+            switch %x_66 [c: (1i, $B11), c: (0i, $B12), c: (default, $B13)] {  # switch_1
+              $B11: {  # case
+                %30:i32 = load %i
+                %x_78:i32 = let %30
+                %32:ptr<function, f32, read_write> = access %A, %x_78
+                %33:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+                %34:f32 = load %33
+                store %32, %34
                 exit_switch  # switch_1
               }
-              %b12 = block {  # case
-                %33:i32 = load %i
-                %34:bool = lt -2147483648i, %33
-                if %34 [t: %b14] {  # if_3
-                  %b14 = block {  # true
-                    continue %b8
+              $B12: {  # case
+                %35:i32 = load %i
+                %36:bool = lt -2147483648i, %35
+                if %36 [t: $B14] {  # if_3
+                  $B14: {  # true
+                    continue  # -> $B8
                   }
                 }
-                %x_74:i32 = load %i
-                %36:ptr<function, f32, read_write> = access %A, %x_74
-                %37:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
-                %38:f32 = load %37
-                store %36, %38
+                %37:i32 = load %i
+                %x_74:i32 = let %37
+                %39:ptr<function, f32, read_write> = access %A, %x_74
+                %40:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
+                %41:f32 = load %40
+                store %39, %41
                 exit_switch  # switch_1
               }
-              %b13 = block {  # case
+              $B13: {  # case
                 exit_switch  # switch_1
               }
             }
-            continue %b8
+            continue  # -> $B8
           }
-          %b8 = block {  # continuing
-            %39:i32 = load %j
-            %40:i32 = add %39, 1i
-            store %j, %40
-            next_iteration %b7
+          $B8: {  # continuing
+            %42:i32 = load %j
+            %43:i32 = add %42, 1i
+            store %j, %43
+            next_iteration  # -> $B7
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %41:i32 = load %i
-        %42:i32 = add %41, 1i
-        store %i, %42
-        next_iteration %b3
+      $B4: {  # continuing
+        %44:i32 = load %i
+        %45:i32 = add %44, 1i
+        store %i, %45
+        next_iteration  # -> $B3
       }
     }
-    %43:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-    %44:i32 = load %43
-    %45:ptr<function, f32, read_write> = access %A, %44
-    %46:f32 = load %45
-    %47:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %48:f32 = load %47
-    %x_92:bool = eq %46, %48
+    %46:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+    %47:i32 = load %46
+    %48:ptr<function, f32, read_write> = access %A, %47
+    %49:f32 = load %48
+    %50:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %51:f32 = load %50
+    %52:bool = eq %49, %51
+    %x_92:bool = let %52
     store %x_102, %x_92
-    if %x_92 [t: %b15] {  # if_4
-      %b15 = block {  # true
-        %50:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %51:i32 = load %50
-        %52:ptr<function, f32, read_write> = access %A, %51
-        %53:f32 = load %52
-        %54:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-        %55:f32 = load %54
-        %56:bool = eq %53, %55
-        store %x_101, %56
-        %57:bool = load %x_101
-        store %x_102, %57
+    if %x_92 [t: $B15] {  # if_4
+      $B15: {  # true
+        %54:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %55:i32 = load %54
+        %56:ptr<function, f32, read_write> = access %A, %55
+        %57:f32 = load %56
+        %58:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+        %59:f32 = load %58
+        %60:bool = eq %57, %59
+        store %x_101, %60
+        %61:bool = load %x_101
+        store %x_102, %61
         exit_if  # if_4
       }
     }
-    %58:bool = load %x_102
-    if %58 [t: %b16, f: %b17] {  # if_5
-      %b16 = block {  # true
-        %59:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %60:i32 = load %59
-        %61:f32 = convert %60
-        %62:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %63:i32 = load %62
-        %64:f32 = convert %63
-        %65:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %66:i32 = load %65
-        %67:f32 = convert %66
-        %68:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %69:i32 = load %68
-        %70:f32 = convert %69
-        %71:vec4<f32> = construct %61, %64, %67, %70
-        store %x_GLF_color, %71
+    %62:bool = load %x_102
+    if %62 [t: $B16, f: $B17] {  # if_5
+      $B16: {  # true
+        %63:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %64:i32 = load %63
+        %65:f32 = convert %64
+        %66:f32 = let %65
+        %67:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+        %68:i32 = load %67
+        %69:f32 = convert %68
+        %70:f32 = let %69
+        %71:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+        %72:i32 = load %71
+        %73:f32 = convert %72
+        %74:f32 = let %73
+        %75:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %76:i32 = load %75
+        %77:f32 = convert %76
+        %78:vec4<f32> = construct %66, %70, %74, %77
+        store %x_GLF_color, %78
         exit_if  # if_5
       }
-      %b17 = block {  # false
-        %72:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %73:i32 = load %72
-        %74:f32 = convert %73
-        %75:vec4<f32> = construct %74
-        store %x_GLF_color, %75
+      $B17: {  # false
+        %79:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %80:i32 = load %79
+        %81:f32 = convert %80
+        %82:vec4<f32> = construct %81
+        store %x_GLF_color, %82
         exit_if  # if_5
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b18 {
-  %b18 = block {
-    %77:void = call %main_1
-    %78:vec4<f32> = load %x_GLF_color
-    %79:main_out = construct %78
-    ret %79
+%tint_symbol = @fragment func():main_out {
+  $B18: {
+    %84:void = call %main_1
+    %85:vec4<f32> = load %x_GLF_color
+    %86:main_out = construct %85
+    ret %86
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-negative-left-shift/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-negative-left-shift/0-opt.wgsl.expected.ir.msl
index 1501033..0ab11a6 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-negative-left-shift/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-negative-left-shift/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:f32 @offset(0)
 }
 
@@ -20,168 +20,201 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_9:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %A:ptr<function, array<f32, 2>, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %j:ptr<function, i32, read_write> = var
     %x_101:ptr<function, bool, read_write> = var
     %x_102_phi:ptr<function, bool, read_write> = var
     %10:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-    %x_39:f32 = load %10
-    %12:ptr<function, f32, read_write> = access %A, 0i
-    store %12, %x_39
-    %13:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-    %x_42:f32 = load %13
-    %15:ptr<function, f32, read_write> = access %A, 1i
-    store %15, %x_42
-    %16:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-    %x_45:i32 = load %16
+    %11:f32 = load %10
+    %x_39:f32 = let %11
+    %13:ptr<function, f32, read_write> = access %A, 0i
+    store %13, %x_39
+    %14:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
+    %15:f32 = load %14
+    %x_42:f32 = let %15
+    %17:ptr<function, f32, read_write> = access %A, 1i
+    store %17, %x_42
+    %18:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+    %19:i32 = load %18
+    %x_45:i32 = let %19
     store %i, %x_45
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_50:i32 = load %i
-        %19:ptr<uniform, i32, read> = access %x_9, 0u, 3i, 0u
-        %x_52:i32 = load %19
-        %21:bool = lt %x_50, %x_52
-        if %21 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %21:i32 = load %i
+        %x_50:i32 = let %21
+        %23:ptr<uniform, i32, read> = access %x_9, 0u, 3i, 0u
+        %24:i32 = load %23
+        %x_52:i32 = let %24
+        %26:bool = lt %x_50, %x_52
+        if %26 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %22:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %x_56:i32 = load %22
+        %27:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+        %28:i32 = load %27
+        %x_56:i32 = let %28
         store %j, %x_56
-        loop [b: %b7, c: %b8] {  # loop_2
-          %b7 = block {  # body
-            %x_61:i32 = load %j
-            %25:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
-            %x_63:i32 = load %25
-            %27:bool = lt %x_61, %x_63
-            if %27 [t: %b9, f: %b10] {  # if_2
-              %b9 = block {  # true
+        loop [b: $B7, c: $B8] {  # loop_2
+          $B7: {  # body
+            %30:i32 = load %j
+            %x_61:i32 = let %30
+            %32:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
+            %33:i32 = load %32
+            %x_63:i32 = let %33
+            %35:bool = lt %x_61, %x_63
+            if %35 [t: $B9, f: $B10] {  # if_2
+              $B9: {  # true
                 exit_if  # if_2
               }
-              %b10 = block {  # false
+              $B10: {  # false
                 exit_loop  # loop_2
               }
             }
-            %x_66:i32 = load %j
-            switch %x_66 [c: (1i, %b11), c: (0i, %b12), c: (default, %b13)] {  # switch_1
-              %b11 = block {  # case
-                %x_78:i32 = load %i
-                %30:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-                %x_80:f32 = load %30
-                %32:ptr<function, f32, read_write> = access %A, %x_78
-                store %32, %x_80
+            %36:i32 = load %j
+            %x_66:i32 = let %36
+            switch %x_66 [c: (1i, $B11), c: (0i, $B12), c: (default, $B13)] {  # switch_1
+              $B11: {  # case
+                %38:i32 = load %i
+                %x_78:i32 = let %38
+                %40:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+                %41:f32 = load %40
+                %x_80:f32 = let %41
+                %43:ptr<function, f32, read_write> = access %A, %x_78
+                store %43, %x_80
                 exit_switch  # switch_1
               }
-              %b12 = block {  # case
-                %x_70:i32 = load %i
-                %34:bool = lt -2147483648i, %x_70
-                if %34 [t: %b14] {  # if_3
-                  %b14 = block {  # true
-                    continue %b8
+              $B12: {  # case
+                %44:i32 = load %i
+                %x_70:i32 = let %44
+                %46:bool = lt -2147483648i, %x_70
+                if %46 [t: $B14] {  # if_3
+                  $B14: {  # true
+                    continue  # -> $B8
                   }
                 }
-                %x_74:i32 = load %i
-                %36:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
-                %x_76:f32 = load %36
-                %38:ptr<function, f32, read_write> = access %A, %x_74
-                store %38, %x_76
+                %47:i32 = load %i
+                %x_74:i32 = let %47
+                %49:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
+                %50:f32 = load %49
+                %x_76:f32 = let %50
+                %52:ptr<function, f32, read_write> = access %A, %x_74
+                store %52, %x_76
                 exit_switch  # switch_1
               }
-              %b13 = block {  # case
+              $B13: {  # case
                 exit_switch  # switch_1
               }
             }
-            continue %b8
+            continue  # -> $B8
           }
-          %b8 = block {  # continuing
-            %x_82:i32 = load %j
-            %40:i32 = add %x_82, 1i
-            store %j, %40
-            next_iteration %b7
+          $B8: {  # continuing
+            %53:i32 = load %j
+            %x_82:i32 = let %53
+            %55:i32 = add %x_82, 1i
+            store %j, %55
+            next_iteration  # -> $B7
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_84:i32 = load %i
-        %42:i32 = add %x_84, 1i
-        store %i, %42
-        next_iteration %b3
+      $B4: {  # continuing
+        %56:i32 = load %i
+        %x_84:i32 = let %56
+        %58:i32 = add %x_84, 1i
+        store %i, %58
+        next_iteration  # -> $B3
       }
     }
-    %43:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-    %x_87:i32 = load %43
-    %45:ptr<function, f32, read_write> = access %A, %x_87
-    %x_89:f32 = load %45
-    %47:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %x_91:f32 = load %47
-    %x_92:bool = eq %x_89, %x_91
+    %59:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+    %60:i32 = load %59
+    %x_87:i32 = let %60
+    %62:ptr<function, f32, read_write> = access %A, %x_87
+    %63:f32 = load %62
+    %x_89:f32 = let %63
+    %65:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+    %66:f32 = load %65
+    %x_91:f32 = let %66
+    %68:bool = eq %x_89, %x_91
+    %x_92:bool = let %68
     store %x_102_phi, %x_92
-    if %x_92 [t: %b15] {  # if_4
-      %b15 = block {  # true
-        %50:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %x_96:i32 = load %50
-        %52:ptr<function, f32, read_write> = access %A, %x_96
-        %x_98:f32 = load %52
-        %54:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-        %x_100:f32 = load %54
-        %56:bool = eq %x_98, %x_100
-        store %x_101, %56
-        %57:bool = load %x_101
-        store %x_102_phi, %57
+    if %x_92 [t: $B15] {  # if_4
+      $B15: {  # true
+        %70:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %71:i32 = load %70
+        %x_96:i32 = let %71
+        %73:ptr<function, f32, read_write> = access %A, %x_96
+        %74:f32 = load %73
+        %x_98:f32 = let %74
+        %76:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
+        %77:f32 = load %76
+        %x_100:f32 = let %77
+        %79:bool = eq %x_98, %x_100
+        store %x_101, %79
+        %80:bool = load %x_101
+        store %x_102_phi, %80
         exit_if  # if_4
       }
     }
-    %x_102:bool = load %x_102_phi
-    if %x_102 [t: %b16, f: %b17] {  # if_5
-      %b16 = block {  # true
-        %59:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %x_107:i32 = load %59
-        %61:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %x_110:i32 = load %61
-        %63:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %x_113:i32 = load %63
-        %65:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %x_116:i32 = load %65
-        %67:f32 = convert %x_107
-        %68:f32 = convert %x_110
-        %69:f32 = convert %x_113
-        %70:f32 = convert %x_116
-        %71:vec4<f32> = construct %67, %68, %69, %70
-        store %x_GLF_color, %71
+    %81:bool = load %x_102_phi
+    %x_102:bool = let %81
+    if %x_102 [t: $B16, f: $B17] {  # if_5
+      $B16: {  # true
+        %83:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %84:i32 = load %83
+        %x_107:i32 = let %84
+        %86:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+        %87:i32 = load %86
+        %x_110:i32 = let %87
+        %89:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
+        %90:i32 = load %89
+        %x_113:i32 = let %90
+        %92:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %93:i32 = load %92
+        %x_116:i32 = let %93
+        %95:f32 = convert %x_107
+        %96:f32 = let %95
+        %97:f32 = convert %x_110
+        %98:f32 = let %97
+        %99:f32 = convert %x_113
+        %100:f32 = let %99
+        %101:f32 = convert %x_116
+        %102:vec4<f32> = construct %96, %98, %100, %101
+        store %x_GLF_color, %102
         exit_if  # if_5
       }
-      %b17 = block {  # false
-        %72:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
-        %x_120:i32 = load %72
-        %x_121:f32 = convert %x_120
-        %75:vec4<f32> = construct %x_121, %x_121, %x_121, %x_121
-        store %x_GLF_color, %75
+      $B17: {  # false
+        %103:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
+        %104:i32 = load %103
+        %x_120:i32 = let %104
+        %106:f32 = convert %x_120
+        %x_121:f32 = let %106
+        %108:vec4<f32> = construct %x_121, %x_121, %x_121, %x_121
+        store %x_GLF_color, %108
         exit_if  # if_5
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b18 {
-  %b18 = block {
-    %77:void = call %main_1
-    %78:vec4<f32> = load %x_GLF_color
-    %79:main_out = construct %78
-    ret %79
+%tint_symbol = @fragment func():main_out {
+  $B18: {
+    %110:void = call %main_1
+    %111:vec4<f32> = load %x_GLF_color
+    %112:main_out = construct %111
+    ret %112
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-selection-dag-struct-array-clamp-index/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-selection-dag-struct-array-clamp-index/0-opt.spvasm.expected.ir.msl
index a64774d..0194c6a 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-selection-dag-struct-array-clamp-index/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-selection-dag-struct-array-clamp-index/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -18,98 +18,105 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %A:ptr<function, array<S, 2>, read_write> = var
     %5:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-    %x_29:i32 = load %5
-    %7:ptr<function, S, read_write> = access %A, %x_29
-    %8:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-    %9:i32 = load %8
-    %10:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-    %11:i32 = load %10
-    %12:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-    %13:i32 = load %12
-    %14:S = construct %9, %11, %13
-    store %7, %14
-    %15:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-    %x_39:i32 = load %15
-    %17:ptr<function, S, read_write> = access %A, %x_39
-    %18:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-    %19:i32 = load %18
+    %6:i32 = load %5
+    %x_29:i32 = let %6
+    %8:ptr<function, S, read_write> = access %A, %x_29
+    %9:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+    %10:i32 = load %9
+    %11:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+    %12:i32 = load %11
+    %13:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+    %14:i32 = load %13
+    %15:S = construct %10, %12, %14
+    store %8, %15
+    %16:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+    %17:i32 = load %16
+    %x_39:i32 = let %17
+    %19:ptr<function, S, read_write> = access %A, %x_39
     %20:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
     %21:i32 = load %20
     %22:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
     %23:i32 = load %22
-    %24:S = construct %19, %21, %23
-    store %17, %24
-    %25:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-    %26:i32 = load %25
-    %27:ptr<function, i32, read_write> = access %A, %26, 1u
+    %24:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+    %25:i32 = load %24
+    %26:S = construct %21, %23, %25
+    store %19, %26
+    %27:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
     %28:i32 = load %27
-    %29:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+    %29:ptr<function, i32, read_write> = access %A, %28, 1u
     %30:i32 = load %29
-    %31:bool = eq %28, %30
-    if %31 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %32:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %x_58:i32 = load %32
-        %34:i32 = clamp %x_58, 1i, 2i
-        %35:ptr<function, i32, read_write> = access %A, %34, 1u
-        %36:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %37:i32 = load %36
-        store %35, %37
+    %31:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+    %32:i32 = load %31
+    %33:bool = eq %30, %32
+    if %33 [t: $B3] {  # if_1
+      $B3: {  # true
+        %34:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %35:i32 = load %34
+        %x_58:i32 = let %35
+        %37:i32 = max %x_58, 1i
+        %38:i32 = min %37, 2i
+        %39:ptr<function, i32, read_write> = access %A, %38, 1u
+        %40:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %41:i32 = load %40
+        store %39, %41
         exit_if  # if_1
       }
     }
-    %38:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-    %39:i32 = load %38
-    %40:ptr<function, i32, read_write> = access %A, %39, 1u
-    %41:i32 = load %40
     %42:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
     %43:i32 = load %42
-    %44:bool = eq %41, %43
-    if %44 [t: %b4, f: %b5] {  # if_2
-      %b4 = block {  # true
-        %45:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %46:i32 = load %45
-        %47:f32 = convert %46
-        %48:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %49:i32 = load %48
-        %50:f32 = convert %49
-        %51:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %52:i32 = load %51
-        %53:f32 = convert %52
-        %54:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %55:i32 = load %54
-        %56:f32 = convert %55
-        %57:vec4<f32> = construct %47, %50, %53, %56
-        store %x_GLF_color, %57
+    %44:ptr<function, i32, read_write> = access %A, %43, 1u
+    %45:i32 = load %44
+    %46:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+    %47:i32 = load %46
+    %48:bool = eq %45, %47
+    if %48 [t: $B4, f: $B5] {  # if_2
+      $B4: {  # true
+        %49:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %50:i32 = load %49
+        %51:f32 = convert %50
+        %52:f32 = let %51
+        %53:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %54:i32 = load %53
+        %55:f32 = convert %54
+        %56:f32 = let %55
+        %57:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %58:i32 = load %57
+        %59:f32 = convert %58
+        %60:f32 = let %59
+        %61:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %62:i32 = load %61
+        %63:f32 = convert %62
+        %64:vec4<f32> = construct %52, %56, %60, %63
+        store %x_GLF_color, %64
         exit_if  # if_2
       }
-      %b5 = block {  # false
-        %58:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %59:i32 = load %58
-        %60:f32 = convert %59
-        %61:vec4<f32> = construct %60
-        store %x_GLF_color, %61
+      $B5: {  # false
+        %65:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %66:i32 = load %65
+        %67:f32 = convert %66
+        %68:vec4<f32> = construct %67
+        store %x_GLF_color, %68
         exit_if  # if_2
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b6 {
-  %b6 = block {
-    %63:void = call %main_1
-    %64:vec4<f32> = load %x_GLF_color
-    %65:main_out = construct %64
-    ret %65
+%tint_symbol = @fragment func():main_out {
+  $B6: {
+    %70:void = call %main_1
+    %71:vec4<f32> = load %x_GLF_color
+    %72:main_out = construct %71
+    ret %72
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-selection-dag-struct-array-clamp-index/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-selection-dag-struct-array-clamp-index/0-opt.wgsl.expected.ir.msl
index b43d8ee..9c9b051 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-selection-dag-struct-array-clamp-index/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-selection-dag-struct-array-clamp-index/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
   el:i32 @offset(0)
 }
 
@@ -18,98 +18,124 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %A:ptr<function, array<S, 2>, read_write> = var
     %5:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-    %x_29:i32 = load %5
-    %7:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-    %x_31:i32 = load %7
-    %9:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-    %x_33:i32 = load %9
+    %6:i32 = load %5
+    %x_29:i32 = let %6
+    %8:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+    %9:i32 = load %8
+    %x_31:i32 = let %9
     %11:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-    %x_35:i32 = load %11
-    %13:ptr<function, S, read_write> = access %A, %x_29
-    %14:S = construct %x_31, %x_33, %x_35
-    store %13, %14
-    %15:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-    %x_39:i32 = load %15
-    %17:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-    %x_41:i32 = load %17
-    %19:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-    %x_43:i32 = load %19
-    %21:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-    %x_45:i32 = load %21
-    %23:ptr<function, S, read_write> = access %A, %x_39
-    %24:S = construct %x_41, %x_43, %x_45
-    store %23, %24
+    %12:i32 = load %11
+    %x_33:i32 = let %12
+    %14:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+    %15:i32 = load %14
+    %x_35:i32 = let %15
+    %17:ptr<function, S, read_write> = access %A, %x_29
+    %18:S = construct %x_31, %x_33, %x_35
+    store %17, %18
+    %19:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+    %20:i32 = load %19
+    %x_39:i32 = let %20
+    %22:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+    %23:i32 = load %22
+    %x_41:i32 = let %23
     %25:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-    %x_49:i32 = load %25
-    %27:ptr<function, i32, read_write> = access %A, %x_49, 1u
-    %x_51:i32 = load %27
-    %29:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-    %x_53:i32 = load %29
-    %31:bool = eq %x_51, %x_53
-    if %31 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %32:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %x_58:i32 = load %32
-        %34:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %x_61:i32 = load %34
-        %36:i32 = clamp %x_58, 1i, 2i
-        %37:ptr<function, i32, read_write> = access %A, %36, 1u
-        store %37, %x_61
+    %26:i32 = load %25
+    %x_43:i32 = let %26
+    %28:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+    %29:i32 = load %28
+    %x_45:i32 = let %29
+    %31:ptr<function, S, read_write> = access %A, %x_39
+    %32:S = construct %x_41, %x_43, %x_45
+    store %31, %32
+    %33:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+    %34:i32 = load %33
+    %x_49:i32 = let %34
+    %36:ptr<function, i32, read_write> = access %A, %x_49, 1u
+    %37:i32 = load %36
+    %x_51:i32 = let %37
+    %39:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+    %40:i32 = load %39
+    %x_53:i32 = let %40
+    %42:bool = eq %x_51, %x_53
+    if %42 [t: $B3] {  # if_1
+      $B3: {  # true
+        %43:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %44:i32 = load %43
+        %x_58:i32 = let %44
+        %46:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %47:i32 = load %46
+        %x_61:i32 = let %47
+        %49:i32 = max %x_58, 1i
+        %50:i32 = min %49, 2i
+        %51:ptr<function, i32, read_write> = access %A, %50, 1u
+        store %51, %x_61
         exit_if  # if_1
       }
     }
-    %38:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-    %x_64:i32 = load %38
-    %40:ptr<function, i32, read_write> = access %A, %x_64, 1u
-    %x_66:i32 = load %40
-    %42:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-    %x_68:i32 = load %42
-    %44:bool = eq %x_66, %x_68
-    if %44 [t: %b4, f: %b5] {  # if_2
-      %b4 = block {  # true
-        %45:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %x_74:i32 = load %45
-        %47:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %x_77:i32 = load %47
-        %49:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
-        %x_80:i32 = load %49
-        %51:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %x_83:i32 = load %51
-        %53:f32 = convert %x_74
-        %54:f32 = convert %x_77
-        %55:f32 = convert %x_80
-        %56:f32 = convert %x_83
-        %57:vec4<f32> = construct %53, %54, %55, %56
-        store %x_GLF_color, %57
+    %52:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+    %53:i32 = load %52
+    %x_64:i32 = let %53
+    %55:ptr<function, i32, read_write> = access %A, %x_64, 1u
+    %56:i32 = load %55
+    %x_66:i32 = let %56
+    %58:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+    %59:i32 = load %58
+    %x_68:i32 = let %59
+    %61:bool = eq %x_66, %x_68
+    if %61 [t: $B4, f: $B5] {  # if_2
+      $B4: {  # true
+        %62:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %63:i32 = load %62
+        %x_74:i32 = let %63
+        %65:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %66:i32 = load %65
+        %x_77:i32 = let %66
+        %68:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
+        %69:i32 = load %68
+        %x_80:i32 = let %69
+        %71:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %72:i32 = load %71
+        %x_83:i32 = let %72
+        %74:f32 = convert %x_74
+        %75:f32 = let %74
+        %76:f32 = convert %x_77
+        %77:f32 = let %76
+        %78:f32 = convert %x_80
+        %79:f32 = let %78
+        %80:f32 = convert %x_83
+        %81:vec4<f32> = construct %75, %77, %79, %80
+        store %x_GLF_color, %81
         exit_if  # if_2
       }
-      %b5 = block {  # false
-        %58:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
-        %x_87:i32 = load %58
-        %x_88:f32 = convert %x_87
-        %61:vec4<f32> = construct %x_88, %x_88, %x_88, %x_88
-        store %x_GLF_color, %61
+      $B5: {  # false
+        %82:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
+        %83:i32 = load %82
+        %x_87:i32 = let %83
+        %85:f32 = convert %x_87
+        %x_88:f32 = let %85
+        %87:vec4<f32> = construct %x_88, %x_88, %x_88, %x_88
+        store %x_GLF_color, %87
         exit_if  # if_2
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b6 {
-  %b6 = block {
-    %63:void = call %main_1
-    %64:vec4<f32> = load %x_GLF_color
-    %65:main_out = construct %64
-    ret %65
+%tint_symbol = @fragment func():main_out {
+  $B6: {
+    %89:void = call %main_1
+    %90:vec4<f32> = load %x_GLF_color
+    %91:main_out = construct %90
+    ret %91
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/create-color-in-do-while-for-loop/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/create-color-in-do-while-for-loop/0-opt.spvasm.expected.ir.msl
index f1ef1dc..746b080 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/create-color-in-do-while-for-loop/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/create-color-in-do-while-for-loop/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,77 +8,80 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_9:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %v:ptr<function, vec2<f32>, read_write> = var
     %floats:ptr<function, array<f32, 9>, read_write> = var
     %one:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %alwaysFalse:ptr<function, bool, read_write> = var
     store %v, vec2<f32>(0.0f)
-    %10:ptr<function, f32, read_write> = access %floats, 1i
-    store %10, 0.0f
-    %11:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
-    %12:f32 = load_vector_element %11, 1u
-    %13:i32 = convert %12
-    store %one, %13
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    %11:ptr<function, f32, read_write> = access %floats, 1i
+    store %11, 0.0f
+    %12:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
+    %13:f32 = load_vector_element %12, 1u
+    %14:i32 = call %tint_f32_to_i32, %13
+    store %one, %14
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         store %i, 0i
-        loop [b: %b5, c: %b6] {  # loop_2
-          %b5 = block {  # body
-            %14:i32 = load %i
-            %15:i32 = load %one
-            %16:bool = lt %14, %15
-            if %16 [t: %b7, f: %b8] {  # if_1
-              %b7 = block {  # true
+        loop [b: $B5, c: $B6] {  # loop_2
+          $B5: {  # body
+            %16:i32 = load %i
+            %17:i32 = load %one
+            %18:bool = lt %16, %17
+            if %18 [t: $B7, f: $B8] {  # if_1
+              $B7: {  # true
                 exit_if  # if_1
               }
-              %b8 = block {  # false
+              $B8: {  # false
                 exit_loop  # loop_2
               }
             }
-            %17:i32 = load %i
-            %18:bool = eq %17, 0i
-            if %18 [t: %b9] {  # if_2
-              %b9 = block {  # true
-                %19:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
-                %20:f32 = load_vector_element %19, 0u
+            %19:i32 = load %i
+            %20:bool = eq %19, 0i
+            if %20 [t: $B9] {  # if_2
+              $B9: {  # true
                 %21:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
-                %22:f32 = load_vector_element %21, 1u
-                %23:bool = gt %20, %22
-                store %alwaysFalse, %23
-                %24:bool = load %alwaysFalse
-                %25:bool = eq %24, false
-                if %25 [t: %b10] {  # if_3
-                  %b10 = block {  # true
-                    %x_73:i32 = load %one
-                    %27:ptr<function, f32, read_write> = access %floats, %x_73
-                    store %27, 1.0f
+                %22:f32 = load_vector_element %21, 0u
+                %23:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
+                %24:f32 = load_vector_element %23, 1u
+                %25:bool = gt %22, %24
+                store %alwaysFalse, %25
+                %26:bool = load %alwaysFalse
+                %27:bool = eq %26, false
+                if %27 [t: $B10] {  # if_3
+                  $B10: {  # true
+                    %28:i32 = load %one
+                    %x_73:i32 = let %28
+                    %30:ptr<function, f32, read_write> = access %floats, %x_73
+                    store %30, 1.0f
                     store %x_GLF_color, vec4<f32>(1.0f, 1.0f, 0.0f, 1.0f)
                     exit_if  # if_3
                   }
                 }
-                %x_75:i32 = load %one
+                %31:i32 = load %one
+                %x_75:i32 = let %31
                 store_vector_element %v, %x_75, 1.0f
-                %29:bool = load %alwaysFalse
-                if %29 [t: %b11] {  # if_4
-                  %b11 = block {  # true
-                    discard
+                %33:bool = load %alwaysFalse
+                if %33 [t: $B11] {  # if_4
+                  $B11: {  # true
+                    store %continue_execution, false
                     exit_if  # if_4
                   }
                 }
-                %30:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
-                %31:f32 = load_vector_element %30, 1u
-                %32:bool = lt %31, 0.0f
-                if %32 [t: %b12] {  # if_5
-                  %b12 = block {  # true
+                %34:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
+                %35:f32 = load_vector_element %34, 1u
+                %36:bool = lt %35, 0.0f
+                if %36 [t: $B12] {  # if_5
+                  $B12: {  # true
                     store %x_GLF_color, vec4<f32>(0.0f, 1.0f, 0.0f, 1.0f)
                     exit_if  # if_5
                   }
@@ -86,54 +89,56 @@
                 exit_if  # if_2
               }
             }
-            continue %b6
+            continue  # -> $B6
           }
-          %b6 = block {  # continuing
-            %33:i32 = load %i
-            %34:i32 = add %33, 1i
-            store %i, %34
-            next_iteration %b5
+          $B6: {  # continuing
+            %37:i32 = load %i
+            %38:i32 = add %37, 1i
+            store %i, %38
+            next_iteration  # -> $B5
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_87:i32 = load %one
-        %36:bool = lt %x_87, 0i
-        %37:bool = eq %36, false
-        break_if %37 %b3
+      $B4: {  # continuing
+        %39:i32 = load %one
+        %x_87:i32 = let %39
+        %41:bool = lt %x_87, 0i
+        %42:bool = eq %41, false
+        break_if %42  # -> [t: exit_loop loop_1, f: $B3]
       }
     }
     %x_102:ptr<function, bool, read_write> = var
     %x_103:ptr<function, bool, read_write> = var
-    %40:f32 = load_vector_element %gl_FragCoord, 1u
-    %41:bool = gte %40, 0.0f
-    if %41 [t: %b13, f: %b14] {  # if_6
-      %b13 = block {  # true
-        %42:f32 = load_vector_element %v, 1u
-        %x_97:bool = eq %42, 1.0f
+    %45:f32 = load_vector_element %gl_FragCoord, 1u
+    %46:bool = gte %45, 0.0f
+    if %46 [t: $B13, f: $B14] {  # if_6
+      $B13: {  # true
+        %47:f32 = load_vector_element %v, 1u
+        %48:bool = eq %47, 1.0f
+        %x_97:bool = let %48
         store %x_103, %x_97
-        if %x_97 [t: %b15] {  # if_7
-          %b15 = block {  # true
-            %44:ptr<function, f32, read_write> = access %floats, 1i
-            %45:f32 = load %44
-            %46:bool = eq %45, 1.0f
-            store %x_102, %46
-            %47:bool = load %x_102
-            store %x_103, %47
+        if %x_97 [t: $B15] {  # if_7
+          $B15: {  # true
+            %50:ptr<function, f32, read_write> = access %floats, 1i
+            %51:f32 = load %50
+            %52:bool = eq %51, 1.0f
+            store %x_102, %52
+            %53:bool = load %x_102
+            store %x_103, %53
             exit_if  # if_7
           }
         }
-        %48:bool = load %x_103
-        if %48 [t: %b16] {  # if_8
-          %b16 = block {  # true
+        %54:bool = load %x_103
+        if %54 [t: $B16] {  # if_8
+          $B16: {  # true
             store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
             exit_if  # if_8
           }
         }
         exit_if  # if_6
       }
-      %b14 = block {  # false
+      $B14: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_6
       }
@@ -141,13 +146,30 @@
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b17 {
-  %b17 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B17: {
     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
+    %57:void = call %main_1
+    %58:vec4<f32> = load %x_GLF_color
+    %59:main_out = construct %58
+    %60:bool = load %continue_execution
+    %61:bool = eq %60, false
+    if %61 [t: $B18] {  # if_9
+      $B18: {  # true
+        terminate_invocation
+      }
+    }
+    ret %59
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B19: {
+    %63:i32 = convert %value
+    %64:bool = gte %value, -2147483648.0f
+    %65:i32 = select -2147483648i, %63, %64
+    %66:bool = lte %value, 2147483520.0f
+    %67:i32 = select 2147483647i, %65, %66
+    ret %67
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/create-color-in-do-while-for-loop/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/create-color-in-do-while-for-loop/0-opt.wgsl.expected.ir.msl
index 64a6564..8842744 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/create-color-in-do-while-for-loop/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/create-color-in-do-while-for-loop/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,77 +8,89 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_9:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %v:ptr<function, vec2<f32>, read_write> = var
     %floats:ptr<function, array<f32, 9>, read_write> = var
     %one:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %alwaysFalse:ptr<function, bool, read_write> = var
     store %v, vec2<f32>(0.0f)
-    %10:ptr<function, f32, read_write> = access %floats, 1i
-    store %10, 0.0f
-    %11:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
-    %x_46:f32 = load_vector_element %11, 1u
-    %13:i32 = convert %x_46
-    store %one, %13
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    %11:ptr<function, f32, read_write> = access %floats, 1i
+    store %11, 0.0f
+    %12:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
+    %13:f32 = load_vector_element %12, 1u
+    %x_46:f32 = let %13
+    %15:i32 = call %tint_f32_to_i32, %x_46
+    store %one, %15
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         store %i, 0i
-        loop [b: %b5, c: %b6] {  # loop_2
-          %b5 = block {  # body
-            %x_56:i32 = load %i
-            %x_57:i32 = load %one
-            %16:bool = lt %x_56, %x_57
-            if %16 [t: %b7, f: %b8] {  # if_1
-              %b7 = block {  # true
+        loop [b: $B5, c: $B6] {  # loop_2
+          $B5: {  # body
+            %17:i32 = load %i
+            %x_56:i32 = let %17
+            %19:i32 = load %one
+            %x_57:i32 = let %19
+            %21:bool = lt %x_56, %x_57
+            if %21 [t: $B7, f: $B8] {  # if_1
+              $B7: {  # true
                 exit_if  # if_1
               }
-              %b8 = block {  # false
+              $B8: {  # false
                 exit_loop  # loop_2
               }
             }
-            %x_60:i32 = load %i
-            %18:bool = eq %x_60, 0i
-            if %18 [t: %b9] {  # if_2
-              %b9 = block {  # true
-                %19:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
-                %x_65:f32 = load_vector_element %19, 0u
-                %21:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
-                %x_67:f32 = load_vector_element %21, 1u
-                %23:bool = gt %x_65, %x_67
-                store %alwaysFalse, %23
-                %x_69:bool = load %alwaysFalse
-                %25:bool = eq %x_69, false
-                if %25 [t: %b10] {  # if_3
-                  %b10 = block {  # true
-                    %x_73:i32 = load %one
-                    %27:ptr<function, f32, read_write> = access %floats, %x_73
-                    store %27, 1.0f
+            %22:i32 = load %i
+            %x_60:i32 = let %22
+            %24:bool = eq %x_60, 0i
+            if %24 [t: $B9] {  # if_2
+              $B9: {  # true
+                %25:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
+                %26:f32 = load_vector_element %25, 0u
+                %x_65:f32 = let %26
+                %28:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
+                %29:f32 = load_vector_element %28, 1u
+                %x_67:f32 = let %29
+                %31:bool = gt %x_65, %x_67
+                store %alwaysFalse, %31
+                %32:bool = load %alwaysFalse
+                %x_69:bool = let %32
+                %34:bool = eq %x_69, false
+                if %34 [t: $B10] {  # if_3
+                  $B10: {  # true
+                    %35:i32 = load %one
+                    %x_73:i32 = let %35
+                    %37:ptr<function, f32, read_write> = access %floats, %x_73
+                    store %37, 1.0f
                     store %x_GLF_color, vec4<f32>(1.0f, 1.0f, 0.0f, 1.0f)
                     exit_if  # if_3
                   }
                 }
-                %x_75:i32 = load %one
+                %38:i32 = load %one
+                %x_75:i32 = let %38
                 store_vector_element %v, %x_75, 1.0f
-                %x_77:bool = load %alwaysFalse
-                if %x_77 [t: %b11] {  # if_4
-                  %b11 = block {  # true
-                    discard
+                %40:bool = load %alwaysFalse
+                %x_77:bool = let %40
+                if %x_77 [t: $B11] {  # if_4
+                  $B11: {  # true
+                    store %continue_execution, false
                     exit_if  # if_4
                   }
                 }
-                %30:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
-                %x_81:f32 = load_vector_element %30, 1u
-                %32:bool = lt %x_81, 0.0f
-                if %32 [t: %b12] {  # if_5
-                  %b12 = block {  # true
+                %42:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
+                %43:f32 = load_vector_element %42, 1u
+                %x_81:f32 = let %43
+                %45:bool = lt %x_81, 0.0f
+                if %45 [t: $B12] {  # if_5
+                  $B12: {  # true
                     store %x_GLF_color, vec4<f32>(0.0f, 1.0f, 0.0f, 1.0f)
                     exit_if  # if_5
                   }
@@ -86,54 +98,61 @@
                 exit_if  # if_2
               }
             }
-            continue %b6
+            continue  # -> $B6
           }
-          %b6 = block {  # continuing
-            %x_85:i32 = load %i
-            %34:i32 = add %x_85, 1i
-            store %i, %34
-            next_iteration %b5
+          $B6: {  # continuing
+            %46:i32 = load %i
+            %x_85:i32 = let %46
+            %48:i32 = add %x_85, 1i
+            store %i, %48
+            next_iteration  # -> $B5
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_87:i32 = load %one
-        %36:bool = lt %x_87, 0i
-        %37:bool = eq %36, false
-        break_if %37 %b3
+      $B4: {  # continuing
+        %49:i32 = load %one
+        %x_87:i32 = let %49
+        %51:bool = lt %x_87, 0i
+        %52:bool = eq %51, false
+        break_if %52  # -> [t: exit_loop loop_1, f: $B3]
       }
     }
     %x_102:ptr<function, bool, read_write> = var
     %x_103_phi:ptr<function, bool, read_write> = var
-    %x_90:f32 = load_vector_element %gl_FragCoord, 1u
-    %41:bool = gte %x_90, 0.0f
-    if %41 [t: %b13, f: %b14] {  # if_6
-      %b13 = block {  # true
-        %x_96:f32 = load_vector_element %v, 1u
-        %x_97:bool = eq %x_96, 1.0f
+    %55:f32 = load_vector_element %gl_FragCoord, 1u
+    %x_90:f32 = let %55
+    %57:bool = gte %x_90, 0.0f
+    if %57 [t: $B13, f: $B14] {  # if_6
+      $B13: {  # true
+        %58:f32 = load_vector_element %v, 1u
+        %x_96:f32 = let %58
+        %60:bool = eq %x_96, 1.0f
+        %x_97:bool = let %60
         store %x_103_phi, %x_97
-        if %x_97 [t: %b15] {  # if_7
-          %b15 = block {  # true
-            %44:ptr<function, f32, read_write> = access %floats, 1i
-            %x_101:f32 = load %44
-            %46:bool = eq %x_101, 1.0f
-            store %x_102, %46
-            %47:bool = load %x_102
-            store %x_103_phi, %47
+        if %x_97 [t: $B15] {  # if_7
+          $B15: {  # true
+            %62:ptr<function, f32, read_write> = access %floats, 1i
+            %63:f32 = load %62
+            %x_101:f32 = let %63
+            %65:bool = eq %x_101, 1.0f
+            store %x_102, %65
+            %66:bool = load %x_102
+            store %x_103_phi, %66
             exit_if  # if_7
           }
         }
-        %x_103:bool = load %x_103_phi
-        if %x_103 [t: %b16] {  # if_8
-          %b16 = block {  # true
+        %67:bool = load %x_103_phi
+        %x_103:bool = let %67
+        if %x_103 [t: $B16] {  # if_8
+          $B16: {  # true
             store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
             exit_if  # if_8
           }
         }
         exit_if  # if_6
       }
-      %b14 = block {  # false
+      $B14: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_6
       }
@@ -141,13 +160,30 @@
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b17 {
-  %b17 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B17: {
     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
+    %71:void = call %main_1
+    %72:vec4<f32> = load %x_GLF_color
+    %73:main_out = construct %72
+    %74:bool = load %continue_execution
+    %75:bool = eq %74, false
+    if %75 [t: $B18] {  # if_9
+      $B18: {  # true
+        terminate_invocation
+      }
+    }
+    ret %73
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B19: {
+    %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
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/dead-barriers-in-loops/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/dead-barriers-in-loops/0-opt.spvasm.expected.ir.msl
index f4d02a0..b3b0935 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/dead-barriers-in-loops/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/dead-barriers-in-loops/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: theSSBO = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: theSSBO = struct @align(4) {
   out_data:i32 @offset(0)
 }
 
@@ -8,13 +8,13 @@
   injectionSwitch:vec2<f32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_4:ptr<storage, theSSBO, read_write> = var @binding_point(0, 0)
   %x_6:ptr<uniform, buf1, read> = var @binding_point(0, 1)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %i:ptr<function, i32, read_write> = var
     %GLF_live3s:ptr<function, f32, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
@@ -26,9 +26,9 @@
     %11:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
     %12:f32 = load_vector_element %11, 1u
     %13:bool = gt %10, %12
-    if %13 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %14:void = workgroupBarrier
+    if %13 [t: $B3] {  # if_1
+      $B3: {  # true
+        %14:void = msl.threadgroup_barrier 4u
         exit_if  # if_1
       }
     }
@@ -37,148 +37,160 @@
     %17:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
     %18:f32 = load_vector_element %17, 1u
     %19:bool = gt %16, %18
-    if %19 [t: %b4] {  # if_2
-      %b4 = block {  # true
-        %20:void = workgroupBarrier
+    if %19 [t: $B4] {  # if_2
+      $B4: {  # true
+        %20:void = msl.threadgroup_barrier 4u
         exit_if  # if_2
       }
     }
     %21:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
     %22:f32 = load_vector_element %21, 1u
-    %23:i32 = convert %22
+    %23:i32 = call %tint_f32_to_i32, %22
     store %i, %23
-    loop [b: %b5, c: %b6] {  # loop_1
-      %b5 = block {  # body
-        %24:i32 = load %i
-        %25:bool = gt %24, 0i
-        if %25 [t: %b7, f: %b8] {  # if_3
-          %b7 = block {  # true
+    loop [b: $B5, c: $B6] {  # loop_1
+      $B5: {  # body
+        %25:i32 = load %i
+        %26:bool = gt %25, 0i
+        if %26 [t: $B7, f: $B8] {  # if_3
+          $B7: {  # true
             exit_if  # if_3
           }
-          %b8 = block {  # false
+          $B8: {  # false
             exit_loop  # loop_1
           }
         }
-        %26:void = workgroupBarrier
-        continue %b6
+        %27:void = msl.threadgroup_barrier 4u
+        continue  # -> $B6
       }
-      %b6 = block {  # continuing
-        %27:i32 = load %i
-        %28:i32 = sub %27, 1i
-        store %i, %28
-        next_iteration %b5
+      $B6: {  # continuing
+        %28:i32 = load %i
+        %29:i32 = sub %28, 1i
+        store %i, %29
+        next_iteration  # -> $B5
       }
     }
     store %GLF_live3s, 0.0f
-    loop [b: %b9, c: %b10] {  # loop_2
-      %b9 = block {  # body
+    loop [b: $B9, c: $B10] {  # loop_2
+      $B9: {  # body
         store %i_1, 1i
-        loop [b: %b11, c: %b12] {  # loop_3
-          %b11 = block {  # body
-            %29:i32 = load %i_1
-            %30:bool = lt %29, 2i
-            if %30 [t: %b13, f: %b14] {  # if_4
-              %b13 = block {  # true
+        loop [b: $B11, c: $B12] {  # loop_3
+          $B11: {  # body
+            %30:i32 = load %i_1
+            %31:bool = lt %30, 2i
+            if %31 [t: $B13, f: $B14] {  # if_4
+              $B13: {  # true
                 exit_if  # if_4
               }
-              %b14 = block {  # false
+              $B14: {  # false
                 exit_loop  # loop_3
               }
             }
-            %31:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-            %32:f32 = load_vector_element %31, 0u
-            %33:bool = gt %32, 1.0f
-            if %33 [t: %b15] {  # if_5
-              %b15 = block {  # true
-                %34:void = workgroupBarrier
+            %32:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
+            %33:f32 = load_vector_element %32, 0u
+            %34:bool = gt %33, 1.0f
+            if %34 [t: $B15] {  # if_5
+              $B15: {  # true
+                %35:void = msl.threadgroup_barrier 4u
                 exit_if  # if_5
               }
             }
-            %35:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-            %36:f32 = load_vector_element %35, 0u
-            %37:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-            %38:f32 = load_vector_element %37, 1u
-            %39:bool = gt %36, %38
-            if %39 [t: %b16] {  # if_6
-              %b16 = block {  # true
-                %40:void = workgroupBarrier
+            %36:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
+            %37:f32 = load_vector_element %36, 0u
+            %38:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
+            %39:f32 = load_vector_element %38, 1u
+            %40:bool = gt %37, %39
+            if %40 [t: $B16] {  # if_6
+              $B16: {  # true
+                %41:void = msl.threadgroup_barrier 4u
                 exit_if  # if_6
               }
             }
-            %41:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-            %42:f32 = load_vector_element %41, 1u
-            %43:i32 = convert %42
-            store %z, %43
-            loop [b: %b17, c: %b18] {  # loop_4
-              %b17 = block {  # body
-                %44:i32 = load %z
-                %45:bool = gt %44, 0i
-                if %45 [t: %b19, f: %b20] {  # if_7
-                  %b19 = block {  # true
+            %42:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
+            %43:f32 = load_vector_element %42, 1u
+            %44:i32 = call %tint_f32_to_i32, %43
+            store %z, %44
+            loop [b: $B17, c: $B18] {  # loop_4
+              $B17: {  # body
+                %45:i32 = load %z
+                %46:bool = gt %45, 0i
+                if %46 [t: $B19, f: $B20] {  # if_7
+                  $B19: {  # true
                     exit_if  # if_7
                   }
-                  %b20 = block {  # false
+                  $B20: {  # false
                     exit_loop  # loop_4
                   }
                 }
-                %46:f32 = load %GLF_live3s
-                %47:f32 = add %46, 1.0f
-                store %GLF_live3s, %47
-                continue %b18
+                %47:f32 = load %GLF_live3s
+                %48:f32 = add %47, 1.0f
+                store %GLF_live3s, %48
+                continue  # -> $B18
               }
-              %b18 = block {  # continuing
-                %48:i32 = load %z
-                %49:i32 = sub %48, 1i
-                store %z, %49
-                next_iteration %b17
+              $B18: {  # continuing
+                %49:i32 = load %z
+                %50:i32 = sub %49, 1i
+                store %z, %50
+                next_iteration  # -> $B17
               }
             }
-            %50:i32 = load %i_1
-            %51:bool = gte %50, 1i
-            if %51 [t: %b21] {  # if_8
-              %b21 = block {  # true
-                %52:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-                %53:f32 = load_vector_element %52, 0u
-                %54:bool = gt %53, 1.0f
-                if %54 [t: %b22] {  # if_9
-                  %b22 = block {  # true
-                    %55:void = workgroupBarrier
+            %51:i32 = load %i_1
+            %52:bool = gte %51, 1i
+            if %52 [t: $B21] {  # if_8
+              $B21: {  # true
+                %53:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
+                %54:f32 = load_vector_element %53, 0u
+                %55:bool = gt %54, 1.0f
+                if %55 [t: $B22] {  # if_9
+                  $B22: {  # true
+                    %56:void = msl.threadgroup_barrier 4u
                     exit_if  # if_9
                   }
                 }
                 exit_if  # if_8
               }
             }
-            continue %b12
+            continue  # -> $B12
           }
-          %b12 = block {  # continuing
-            %56:i32 = load %i_1
-            %57:i32 = add %56, 1i
-            store %i_1, %57
-            next_iteration %b11
+          $B12: {  # continuing
+            %57:i32 = load %i_1
+            %58:i32 = add %57, 1i
+            store %i_1, %58
+            next_iteration  # -> $B11
           }
         }
-        continue %b10
+        continue  # -> $B10
       }
-      %b10 = block {  # continuing
-        %58:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-        %x_111:f32 = load_vector_element %58, 0u
-        %60:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-        %x_113:f32 = load_vector_element %60, 1u
-        %62:bool = gt %x_111, %x_113
-        %63:bool = eq %62, false
-        break_if %63 %b9
+      $B10: {  # continuing
+        %59:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
+        %60:f32 = load_vector_element %59, 0u
+        %x_111:f32 = let %60
+        %62:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
+        %63:f32 = load_vector_element %62, 1u
+        %x_113:f32 = let %63
+        %65:bool = gt %x_111, %x_113
+        %66:bool = eq %65, false
+        break_if %66  # -> [t: exit_loop loop_2, f: $B9]
       }
     }
     ret
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b23 {
-  %b23 = block {
-    %65:void = call %main_1
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B23: {
+    %68:void = call %main_1
     ret
   }
 }
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B24: {
+    %70:i32 = convert %value
+    %71:bool = gte %value, -2147483648.0f
+    %72:i32 = select -2147483648i, %70, %71
+    %73:bool = lte %value, 2147483520.0f
+    %74:i32 = select 2147483647i, %72, %73
+    ret %74
+  }
+}
 
 unhandled variable address space
 ********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/dead-barriers-in-loops/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/dead-barriers-in-loops/0-opt.wgsl.expected.ir.msl
index 1d98907..afdda6f 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/dead-barriers-in-loops/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/dead-barriers-in-loops/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: theSSBO = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: theSSBO = struct @align(4) {
   out_data:i32 @offset(0)
 }
 
@@ -8,13 +8,13 @@
   injectionSwitch:vec2<f32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_4:ptr<storage, theSSBO, read_write> = var @binding_point(0, 0)
   %x_6:ptr<uniform, buf1, read> = var @binding_point(0, 1)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %i:ptr<function, i32, read_write> = var
     %GLF_live3s:ptr<function, f32, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
@@ -22,163 +22,193 @@
     %8:ptr<storage, i32, read_write> = access %x_4, 0u
     store %8, 42i
     %9:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %x_37:f32 = load_vector_element %9, 0u
-    %11:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %x_39:f32 = load_vector_element %11, 1u
-    %13:bool = gt %x_37, %x_39
-    if %13 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %14:void = workgroupBarrier
+    %10:f32 = load_vector_element %9, 0u
+    %x_37:f32 = let %10
+    %12:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
+    %13:f32 = load_vector_element %12, 1u
+    %x_39:f32 = let %13
+    %15:bool = gt %x_37, %x_39
+    if %15 [t: $B3] {  # if_1
+      $B3: {  # true
+        %16:void = msl.threadgroup_barrier 4u
         exit_if  # if_1
       }
     }
-    %15:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %x_44:f32 = load_vector_element %15, 0u
     %17:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %x_46:f32 = load_vector_element %17, 1u
-    %19:bool = gt %x_44, %x_46
-    if %19 [t: %b4] {  # if_2
-      %b4 = block {  # true
-        %20:void = workgroupBarrier
+    %18:f32 = load_vector_element %17, 0u
+    %x_44:f32 = let %18
+    %20:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
+    %21:f32 = load_vector_element %20, 1u
+    %x_46:f32 = let %21
+    %23:bool = gt %x_44, %x_46
+    if %23 [t: $B4] {  # if_2
+      $B4: {  # true
+        %24:void = msl.threadgroup_barrier 4u
         exit_if  # if_2
       }
     }
-    %21:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %x_51:f32 = load_vector_element %21, 1u
-    %23:i32 = convert %x_51
-    store %i, %23
-    loop [b: %b5, c: %b6] {  # loop_1
-      %b5 = block {  # body
-        %x_57:i32 = load %i
-        %25:bool = gt %x_57, 0i
-        if %25 [t: %b7, f: %b8] {  # if_3
-          %b7 = block {  # true
+    %25:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
+    %26:f32 = load_vector_element %25, 1u
+    %x_51:f32 = let %26
+    %28:i32 = call %tint_f32_to_i32, %x_51
+    store %i, %28
+    loop [b: $B5, c: $B6] {  # loop_1
+      $B5: {  # body
+        %30:i32 = load %i
+        %x_57:i32 = let %30
+        %32:bool = gt %x_57, 0i
+        if %32 [t: $B7, f: $B8] {  # if_3
+          $B7: {  # true
             exit_if  # if_3
           }
-          %b8 = block {  # false
+          $B8: {  # false
             exit_loop  # loop_1
           }
         }
-        %26:void = workgroupBarrier
-        continue %b6
+        %33:void = msl.threadgroup_barrier 4u
+        continue  # -> $B6
       }
-      %b6 = block {  # continuing
-        %x_60:i32 = load %i
-        %28:i32 = sub %x_60, 1i
-        store %i, %28
-        next_iteration %b5
+      $B6: {  # continuing
+        %34:i32 = load %i
+        %x_60:i32 = let %34
+        %36:i32 = sub %x_60, 1i
+        store %i, %36
+        next_iteration  # -> $B5
       }
     }
     store %GLF_live3s, 0.0f
-    loop [b: %b9, c: %b10] {  # loop_2
-      %b9 = block {  # body
+    loop [b: $B9, c: $B10] {  # loop_2
+      $B9: {  # body
         store %i_1, 1i
-        loop [b: %b11, c: %b12] {  # loop_3
-          %b11 = block {  # body
-            %x_70:i32 = load %i_1
-            %30:bool = lt %x_70, 2i
-            if %30 [t: %b13, f: %b14] {  # if_4
-              %b13 = block {  # true
+        loop [b: $B11, c: $B12] {  # loop_3
+          $B11: {  # body
+            %37:i32 = load %i_1
+            %x_70:i32 = let %37
+            %39:bool = lt %x_70, 2i
+            if %39 [t: $B13, f: $B14] {  # if_4
+              $B13: {  # true
                 exit_if  # if_4
               }
-              %b14 = block {  # false
+              $B14: {  # false
                 exit_loop  # loop_3
               }
             }
-            %31:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-            %x_74:f32 = load_vector_element %31, 0u
-            %33:bool = gt %x_74, 1.0f
-            if %33 [t: %b15] {  # if_5
-              %b15 = block {  # true
-                %34:void = workgroupBarrier
+            %40:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
+            %41:f32 = load_vector_element %40, 0u
+            %x_74:f32 = let %41
+            %43:bool = gt %x_74, 1.0f
+            if %43 [t: $B15] {  # if_5
+              $B15: {  # true
+                %44:void = msl.threadgroup_barrier 4u
                 exit_if  # if_5
               }
             }
-            %35:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-            %x_79:f32 = load_vector_element %35, 0u
-            %37:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-            %x_81:f32 = load_vector_element %37, 1u
-            %39:bool = gt %x_79, %x_81
-            if %39 [t: %b16] {  # if_6
-              %b16 = block {  # true
-                %40:void = workgroupBarrier
+            %45:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
+            %46:f32 = load_vector_element %45, 0u
+            %x_79:f32 = let %46
+            %48:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
+            %49:f32 = load_vector_element %48, 1u
+            %x_81:f32 = let %49
+            %51:bool = gt %x_79, %x_81
+            if %51 [t: $B16] {  # if_6
+              $B16: {  # true
+                %52:void = msl.threadgroup_barrier 4u
                 exit_if  # if_6
               }
             }
-            %41:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-            %x_86:f32 = load_vector_element %41, 1u
-            %43:i32 = convert %x_86
-            store %z, %43
-            loop [b: %b17, c: %b18] {  # loop_4
-              %b17 = block {  # body
-                %x_92:i32 = load %z
-                %45:bool = gt %x_92, 0i
-                if %45 [t: %b19, f: %b20] {  # if_7
-                  %b19 = block {  # true
+            %53:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
+            %54:f32 = load_vector_element %53, 1u
+            %x_86:f32 = let %54
+            %56:i32 = call %tint_f32_to_i32, %x_86
+            store %z, %56
+            loop [b: $B17, c: $B18] {  # loop_4
+              $B17: {  # body
+                %57:i32 = load %z
+                %x_92:i32 = let %57
+                %59:bool = gt %x_92, 0i
+                if %59 [t: $B19, f: $B20] {  # if_7
+                  $B19: {  # true
                     exit_if  # if_7
                   }
-                  %b20 = block {  # false
+                  $B20: {  # false
                     exit_loop  # loop_4
                   }
                 }
-                %x_95:f32 = load %GLF_live3s
-                %47:f32 = add %x_95, 1.0f
-                store %GLF_live3s, %47
-                continue %b18
+                %60:f32 = load %GLF_live3s
+                %x_95:f32 = let %60
+                %62:f32 = add %x_95, 1.0f
+                store %GLF_live3s, %62
+                continue  # -> $B18
               }
-              %b18 = block {  # continuing
-                %x_97:i32 = load %z
-                %49:i32 = sub %x_97, 1i
-                store %z, %49
-                next_iteration %b17
+              $B18: {  # continuing
+                %63:i32 = load %z
+                %x_97:i32 = let %63
+                %65:i32 = sub %x_97, 1i
+                store %z, %65
+                next_iteration  # -> $B17
               }
             }
-            %x_99:i32 = load %i_1
-            %51:bool = gte %x_99, 1i
-            if %51 [t: %b21] {  # if_8
-              %b21 = block {  # true
-                %52:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-                %x_104:f32 = load_vector_element %52, 0u
-                %54:bool = gt %x_104, 1.0f
-                if %54 [t: %b22] {  # if_9
-                  %b22 = block {  # true
-                    %55:void = workgroupBarrier
+            %66:i32 = load %i_1
+            %x_99:i32 = let %66
+            %68:bool = gte %x_99, 1i
+            if %68 [t: $B21] {  # if_8
+              $B21: {  # true
+                %69:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
+                %70:f32 = load_vector_element %69, 0u
+                %x_104:f32 = let %70
+                %72:bool = gt %x_104, 1.0f
+                if %72 [t: $B22] {  # if_9
+                  $B22: {  # true
+                    %73:void = msl.threadgroup_barrier 4u
                     exit_if  # if_9
                   }
                 }
                 exit_if  # if_8
               }
             }
-            continue %b12
+            continue  # -> $B12
           }
-          %b12 = block {  # continuing
-            %x_108:i32 = load %i_1
-            %57:i32 = add %x_108, 1i
-            store %i_1, %57
-            next_iteration %b11
+          $B12: {  # continuing
+            %74:i32 = load %i_1
+            %x_108:i32 = let %74
+            %76:i32 = add %x_108, 1i
+            store %i_1, %76
+            next_iteration  # -> $B11
           }
         }
-        continue %b10
+        continue  # -> $B10
       }
-      %b10 = block {  # continuing
-        %58:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-        %x_111:f32 = load_vector_element %58, 0u
-        %60:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-        %x_113:f32 = load_vector_element %60, 1u
-        %62:bool = gt %x_111, %x_113
-        %63:bool = eq %62, false
-        break_if %63 %b9
+      $B10: {  # continuing
+        %77:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
+        %78:f32 = load_vector_element %77, 0u
+        %x_111:f32 = let %78
+        %80:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
+        %81:f32 = load_vector_element %80, 1u
+        %x_113:f32 = let %81
+        %83:bool = gt %x_111, %x_113
+        %84:bool = eq %83, false
+        break_if %84  # -> [t: exit_loop loop_2, f: $B9]
       }
     }
     ret
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b23 {
-  %b23 = block {
-    %65:void = call %main_1
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B23: {
+    %86:void = call %main_1
     ret
   }
 }
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B24: {
+    %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
 ********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/disc-and-add-in-func-in-loop/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/disc-and-add-in-func-in-loop/0-opt.spvasm.expected.ir.msl
index f93413c..9989f55 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/disc-and-add-in-func-in-loop/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/disc-and-add-in-func-in-loop/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,116 +8,117 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%x_51 = func():void -> %b2 {
-  %b2 = block {
-    discard
+%x_51 = func():void {
+  $B2: {
+    store %continue_execution, false
     ret
   }
 }
-%main_1 = func():void -> %b3 {
-  %b3 = block {
-    loop [b: %b4, c: %b5] {  # loop_1
-      %b4 = block {  # body
+%main_1 = func():void {
+  $B3: {
+    loop [b: $B4] {  # loop_1
+      $B4: {  # body
         %x_30:ptr<function, bool, read_write> = var
         %x_31:ptr<function, bool, read_write> = var
         store %x_30, false
-        loop [b: %b6, c: %b7] {  # loop_2
-          %b6 = block {  # body
-            loop [b: %b8, c: %b9] {  # loop_3
-              %b8 = block {  # body
+        loop [b: $B5, c: $B6] {  # loop_2
+          $B5: {  # body
+            loop [b: $B7] {  # loop_3
+              $B7: {  # body
                 %x_52:ptr<function, vec4<f32>, read_write> = var
                 %x_54:ptr<function, vec4<f32>, read_write> = var
                 %x_55:ptr<function, vec4<f32>, read_write> = var
-                %10:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
-                %x_36:f32 = load_vector_element %10, 1u
-                %12:bool = load %x_30
-                store %x_31, %12
-                %13:bool = gt %x_36, 0.0f
-                if %13 [t: %b10, f: %b11] {  # if_1
-                  %b10 = block {  # true
+                %11:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
+                %12:f32 = load_vector_element %11, 1u
+                %x_36:f32 = let %12
+                %14:bool = load %x_30
+                store %x_31, %14
+                %15:bool = gt %x_36, 0.0f
+                if %15 [t: $B8, f: $B9] {  # if_1
+                  $B8: {  # true
                     exit_if  # if_1
                   }
-                  %b11 = block {  # false
+                  $B9: {  # false
                     exit_loop  # loop_3
                   }
                 }
-                loop [b: %b12, c: %b13] {  # loop_4
-                  %b12 = block {  # body
-                    %14:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
-                    %x_46:f32 = load_vector_element %14, 0u
-                    %16:bool = gt %x_46, 0.0f
-                    if %16 [t: %b14] {  # if_2
-                      %b14 = block {  # true
-                        %17:void = call %x_51
+                loop [b: $B10] {  # loop_4
+                  $B10: {  # body
+                    %16:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
+                    %17:f32 = load_vector_element %16, 0u
+                    %x_46:f32 = let %17
+                    %19:bool = gt %x_46, 0.0f
+                    if %19 [t: $B11] {  # if_2
+                      $B11: {  # true
+                        %20:void = call %x_51
                         store %x_52, vec4<f32>(0.0f)
-                        %18:vec4<f32> = load %x_52
-                        store %x_55, %18
+                        %21:vec4<f32> = load %x_52
+                        store %x_55, %21
                         exit_loop  # loop_4
                       }
                     }
-                    %19:vec4<f32> = construct %x_46
-                    %20:vec4<f32> = add vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f), %19
-                    store %x_54, %20
-                    %21:vec4<f32> = load %x_54
-                    store %x_55, %21
+                    %22:vec4<f32> = construct %x_46
+                    %23:vec4<f32> = add vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f), %22
+                    store %x_54, %23
+                    %24:vec4<f32> = load %x_54
+                    store %x_55, %24
                     exit_loop  # loop_4
                   }
-                  %b13 = block {  # continuing
-                    next_iteration %b12
-                  }
                 }
-                %22:vec4<f32> = load %x_55
-                store %x_GLF_color, %22
+                %25:vec4<f32> = load %x_55
+                store %x_GLF_color, %25
                 store %x_31, true
                 exit_loop  # loop_3
               }
-              %b9 = block {  # continuing
-                next_iteration %b8
-              }
             }
-            %23:bool = load %x_31
-            if %23 [t: %b15, f: %b16] {  # if_3
-              %b15 = block {  # true
+            %26:bool = load %x_31
+            if %26 [t: $B12, f: $B13] {  # if_3
+              $B12: {  # true
                 exit_loop  # loop_2
               }
-              %b16 = block {  # false
-                continue %b7
+              $B13: {  # false
+                continue  # -> $B6
               }
             }
-            continue %b7
+            unreachable
           }
-          %b7 = block {  # continuing
-            %24:bool = load %x_31
-            store %x_30, %24
-            next_iteration %b6
+          $B6: {  # continuing
+            %27:bool = load %x_31
+            store %x_30, %27
+            next_iteration  # -> $B5
           }
         }
-        %25:bool = load %x_31
-        if %25 [t: %b17] {  # if_4
-          %b17 = block {  # true
+        %28:bool = load %x_31
+        if %28 [t: $B14] {  # if_4
+          $B14: {  # true
             exit_loop  # loop_1
           }
         }
         exit_loop  # loop_1
       }
-      %b5 = block {  # continuing
-        next_iteration %b4
-      }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b18 {
-  %b18 = block {
-    %27:void = call %main_1
-    %28:vec4<f32> = load %x_GLF_color
-    %29:main_out = construct %28
-    ret %29
+%tint_symbol = @fragment func():main_out {
+  $B15: {
+    %30:void = call %main_1
+    %31:vec4<f32> = load %x_GLF_color
+    %32:main_out = construct %31
+    %33:bool = load %continue_execution
+    %34:bool = eq %33, false
+    if %34 [t: $B16] {  # if_5
+      $B16: {  # true
+        terminate_invocation
+      }
+    }
+    ret %32
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/disc-and-add-in-func-in-loop/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/disc-and-add-in-func-in-loop/0-opt.wgsl.expected.ir.msl
index af2a205..95969fc 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/disc-and-add-in-func-in-loop/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/disc-and-add-in-func-in-loop/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,116 +8,119 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%x_51 = func():void -> %b2 {
-  %b2 = block {
-    discard
+%x_51 = func():void {
+  $B2: {
+    store %continue_execution, false
     ret
   }
 }
-%main_1 = func():void -> %b3 {
-  %b3 = block {
-    loop [b: %b4, c: %b5] {  # loop_1
-      %b4 = block {  # body
+%main_1 = func():void {
+  $B3: {
+    loop [b: $B4] {  # loop_1
+      $B4: {  # body
         %x_31:ptr<function, bool, read_write> = var
         %x_30_phi:ptr<function, bool, read_write> = var
         store %x_30_phi, false
-        loop [b: %b6, c: %b7] {  # loop_2
-          %b6 = block {  # body
+        loop [b: $B5, c: $B6] {  # loop_2
+          $B5: {  # body
             %x_31_phi:ptr<function, bool, read_write> = var
-            %x_30:bool = load %x_30_phi
-            loop [b: %b8, c: %b9] {  # loop_3
-              %b8 = block {  # body
+            %9:bool = load %x_30_phi
+            %x_30:bool = let %9
+            loop [b: $B7] {  # loop_3
+              $B7: {  # body
                 %x_52:ptr<function, vec4<f32>, read_write> = var
                 %x_54:ptr<function, vec4<f32>, read_write> = var
                 %x_55_phi:ptr<function, vec4<f32>, read_write> = var
-                %12:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
-                %x_36:f32 = load_vector_element %12, 1u
+                %14:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
+                %15:f32 = load_vector_element %14, 1u
+                %x_36:f32 = let %15
                 store %x_31_phi, %x_30
-                %14:bool = gt %x_36, 0.0f
-                if %14 [t: %b10, f: %b11] {  # if_1
-                  %b10 = block {  # true
+                %17:bool = gt %x_36, 0.0f
+                if %17 [t: $B8, f: $B9] {  # if_1
+                  $B8: {  # true
                     exit_if  # if_1
                   }
-                  %b11 = block {  # false
+                  $B9: {  # false
                     exit_loop  # loop_3
                   }
                 }
-                loop [b: %b12, c: %b13] {  # loop_4
-                  %b12 = block {  # body
-                    %15:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
-                    %x_46:f32 = load_vector_element %15, 0u
-                    %17:bool = gt %x_46, 0.0f
-                    if %17 [t: %b14] {  # if_2
-                      %b14 = block {  # true
-                        %18:void = call %x_51
+                loop [b: $B10] {  # loop_4
+                  $B10: {  # body
+                    %18:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
+                    %19:f32 = load_vector_element %18, 0u
+                    %x_46:f32 = let %19
+                    %21:bool = gt %x_46, 0.0f
+                    if %21 [t: $B11] {  # if_2
+                      $B11: {  # true
+                        %22:void = call %x_51
                         exit_if  # if_2
                       }
                     }
-                    %19:vec4<f32> = construct %x_46, %x_46, %x_46, %x_46
-                    %20:vec4<f32> = add vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f), %19
-                    store %x_54, %20
-                    %21:vec4<f32> = load %x_54
-                    store %x_55_phi, %21
+                    %23:vec4<f32> = construct %x_46, %x_46, %x_46, %x_46
+                    %24:vec4<f32> = add vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f), %23
+                    store %x_54, %24
+                    %25:vec4<f32> = load %x_54
+                    store %x_55_phi, %25
                     exit_loop  # loop_4
                   }
-                  %b13 = block {  # continuing
-                    next_iteration %b12
-                  }
                 }
-                %x_55:vec4<f32> = load %x_55_phi
+                %26:vec4<f32> = load %x_55_phi
+                %x_55:vec4<f32> = let %26
                 store %x_GLF_color, %x_55
                 store %x_31_phi, true
                 exit_loop  # loop_3
               }
-              %b9 = block {  # continuing
-                next_iteration %b8
-              }
             }
-            %23:bool = load %x_31_phi
-            store %x_31, %23
-            %24:bool = load %x_31
-            if %24 [t: %b15, f: %b16] {  # if_3
-              %b15 = block {  # true
+            %28:bool = load %x_31_phi
+            store %x_31, %28
+            %29:bool = load %x_31
+            if %29 [t: $B12, f: $B13] {  # if_3
+              $B12: {  # true
                 exit_loop  # loop_2
               }
-              %b16 = block {  # false
-                continue %b7
+              $B13: {  # false
+                continue  # -> $B6
               }
             }
-            continue %b7
+            unreachable
           }
-          %b7 = block {  # continuing
-            %25:bool = load %x_31
-            store %x_30_phi, %25
-            next_iteration %b6
+          $B6: {  # continuing
+            %30:bool = load %x_31
+            store %x_30_phi, %30
+            next_iteration  # -> $B5
           }
         }
-        %26:bool = load %x_31
-        if %26 [t: %b17] {  # if_4
-          %b17 = block {  # true
+        %31:bool = load %x_31
+        if %31 [t: $B14] {  # if_4
+          $B14: {  # true
             exit_loop  # loop_1
           }
         }
         exit_loop  # loop_1
       }
-      %b5 = block {  # continuing
-        next_iteration %b4
-      }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b18 {
-  %b18 = block {
-    %28:void = call %main_1
-    %29:vec4<f32> = load %x_GLF_color
-    %30:main_out = construct %29
-    ret %30
+%tint_symbol = @fragment func():main_out {
+  $B15: {
+    %33:void = call %main_1
+    %34:vec4<f32> = load %x_GLF_color
+    %35:main_out = construct %34
+    %36:bool = load %continue_execution
+    %37:bool = eq %36, false
+    if %37 [t: $B16] {  # if_5
+      $B16: {  # true
+        terminate_invocation
+      }
+    }
+    ret %35
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/discard-continue-return/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/discard-continue-return/0-opt.spvasm.expected.ir.msl
index 8d7cd7f..13b0c0e 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/discard-continue-return/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/discard-continue-return/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,69 +8,74 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+%main_1 = func():void {
+  $B2: {
+    loop [b: $B3] {  # loop_1
+      $B3: {  # body
         %x_46:ptr<function, bool, read_write> = var
-        loop [b: %b5, c: %b6] {  # loop_2
-          %b5 = block {  # body
-            %6:f32 = load_vector_element %gl_FragCoord, 0u
-            %7:bool = lt %6, 0.0f
-            if %7 [t: %b7] {  # if_1
-              %b7 = block {  # true
-                %8:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-                %9:f32 = load_vector_element %8, 1u
-                %10:bool = gt 1.0f, %9
-                if %10 [t: %b8, f: %b9] {  # if_2
-                  %b8 = block {  # true
-                    discard
+        loop [b: $B4, c: $B5] {  # loop_2
+          $B4: {  # body
+            %7:f32 = load_vector_element %gl_FragCoord, 0u
+            %8:bool = lt %7, 0.0f
+            if %8 [t: $B6] {  # if_1
+              $B6: {  # true
+                %9:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
+                %10:f32 = load_vector_element %9, 1u
+                %11:bool = gt 1.0f, %10
+                if %11 [t: $B7, f: $B8] {  # if_2
+                  $B7: {  # true
+                    store %continue_execution, false
                     exit_if  # if_2
                   }
-                  %b9 = block {  # false
-                    continue %b6
+                  $B8: {  # false
+                    continue  # -> $B5
                   }
                 }
-                continue %b6
+                continue  # -> $B5
               }
             }
             store %x_46, true
             exit_loop  # loop_2
           }
-          %b6 = block {  # continuing
+          $B5: {  # continuing
             store %x_46, false
-            break_if true %b5
+            break_if true  # -> [t: exit_loop loop_2, f: $B4]
           }
         }
-        %11:bool = load %x_46
-        if %11 [t: %b10] {  # if_3
-          %b10 = block {  # true
+        %12:bool = load %x_46
+        if %12 [t: $B9] {  # if_3
+          $B9: {  # true
             exit_loop  # loop_1
           }
         }
         exit_loop  # loop_1
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
-      }
     }
     store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b11 {
-  %b11 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B10: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %14:void = call %main_1
-    %15:vec4<f32> = load %x_GLF_color
-    %16:main_out = construct %15
-    ret %16
+    %15:void = call %main_1
+    %16:vec4<f32> = load %x_GLF_color
+    %17:main_out = construct %16
+    %18:bool = load %continue_execution
+    %19:bool = eq %18, false
+    if %19 [t: $B11] {  # if_4
+      $B11: {  # true
+        terminate_invocation
+      }
+    }
+    ret %17
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/discard-continue-return/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/discard-continue-return/0-opt.wgsl.expected.ir.msl
index 299e5df..0307c87 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/discard-continue-return/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/discard-continue-return/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,33 +8,36 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+%main_1 = func():void {
+  $B2: {
+    loop [b: $B3] {  # loop_1
+      $B3: {  # body
         %x_46_phi:ptr<function, bool, read_write> = var
-        loop [b: %b5, c: %b6] {  # loop_2
-          %b5 = block {  # body
-            %x_37:f32 = load_vector_element %gl_FragCoord, 0u
-            %7:bool = lt %x_37, 0.0f
-            if %7 [t: %b7] {  # if_1
-              %b7 = block {  # true
-                %8:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-                %x_42:f32 = load_vector_element %8, 1u
-                %10:bool = gt 1.0f, %x_42
-                if %10 [t: %b8, f: %b9] {  # if_2
-                  %b8 = block {  # true
-                    discard
+        loop [b: $B4, c: $B5] {  # loop_2
+          $B4: {  # body
+            %7:f32 = load_vector_element %gl_FragCoord, 0u
+            %x_37:f32 = let %7
+            %9:bool = lt %x_37, 0.0f
+            if %9 [t: $B6] {  # if_1
+              $B6: {  # true
+                %10:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
+                %11:f32 = load_vector_element %10, 1u
+                %x_42:f32 = let %11
+                %13:bool = gt 1.0f, %x_42
+                if %13 [t: $B7, f: $B8] {  # if_2
+                  $B7: {  # true
+                    store %continue_execution, false
                     exit_if  # if_2
                   }
-                  %b9 = block {  # false
-                    continue %b6
+                  $B8: {  # false
+                    continue  # -> $B5
                   }
                 }
                 exit_if  # if_1
@@ -43,34 +46,39 @@
             store %x_46_phi, true
             exit_loop  # loop_2
           }
-          %b6 = block {  # continuing
+          $B5: {  # continuing
             store %x_46_phi, false
-            break_if true %b5
+            break_if true  # -> [t: exit_loop loop_2, f: $B4]
           }
         }
-        %x_46:bool = load %x_46_phi
-        if %x_46 [t: %b10] {  # if_3
-          %b10 = block {  # true
+        %14:bool = load %x_46_phi
+        %x_46:bool = let %14
+        if %x_46 [t: $B9] {  # if_3
+          $B9: {  # true
             exit_loop  # loop_1
           }
         }
         exit_loop  # loop_1
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
-      }
     }
     store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b11 {
-  %b11 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B10: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %14:void = call %main_1
-    %15:vec4<f32> = load %x_GLF_color
-    %16:main_out = construct %15
-    ret %16
+    %18:void = call %main_1
+    %19:vec4<f32> = load %x_GLF_color
+    %20:main_out = construct %19
+    %21:bool = load %continue_execution
+    %22:bool = eq %21, false
+    if %22 [t: $B11] {  # if_4
+      $B11: {  # true
+        terminate_invocation
+      }
+    }
+    ret %20
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/discard-in-array-manipulating-loop/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/discard-in-array-manipulating-loop/0-opt.spvasm.expected.ir.msl
index efdd3b1..d367fcb 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/discard-in-array-manipulating-loop/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/discard-in-array-manipulating-loop/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,80 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
+  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
+}
+
+%main_1 = func():void {
+  $B2: {
+    %data:ptr<function, array<f32, 10>, read_write> = var
+    %i:ptr<function, i32, read_write> = var
+    store %data, array<f32, 10>(0.10000000149011611938f, 0.20000000298023223877f, 0.30000001192092895508f, 0.40000000596046447754f, 0.5f, 0.60000002384185791016f, 0.69999998807907104492f, 0.80000001192092895508f, 0.89999997615814208984f, 1.0f)
+    store %i, 0i
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %7:i32 = load %i
+        %8:bool = lt %7, 10i
+        if %8 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
+            exit_if  # if_1
+          }
+          $B6: {  # false
+            exit_loop  # loop_1
+          }
+        }
+        %9:f32 = load_vector_element %gl_FragCoord, 0u
+        %10:bool = lt %9, 0.0f
+        if %10 [t: $B7] {  # if_2
+          $B7: {  # true
+            store %continue_execution, false
+            exit_if  # if_2
+          }
+        }
+        %11:ptr<function, f32, read_write> = access %data, 0i
+        %12:i32 = load %i
+        %13:ptr<function, f32, read_write> = access %data, %12
+        %14:f32 = load %13
+        store %11, %14
+        continue  # -> $B4
+      }
+      $B4: {  # continuing
+        %15:i32 = load %i
+        %16:i32 = add %15, 1i
+        store %i, %16
+        next_iteration  # -> $B3
+      }
+    }
+    %17:ptr<function, f32, read_write> = access %data, 0i
+    %18:f32 = load %17
+    %19:vec4<f32> = construct %18, 0.0f, 0.0f, 1.0f
+    store %x_GLF_color, %19
+    ret
+  }
+}
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B8: {
+    store %gl_FragCoord, %gl_FragCoord_param
+    %22:void = call %main_1
+    %23:vec4<f32> = load %x_GLF_color
+    %24:main_out = construct %23
+    %25:bool = load %continue_execution
+    %26:bool = eq %25, false
+    if %26 [t: $B9] {  # if_3
+      $B9: {  # true
+        terminate_invocation
+      }
+    }
+    ret %24
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/discard-in-array-manipulating-loop/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/discard-in-array-manipulating-loop/0-opt.wgsl.expected.ir.msl
index efdd3b1..c4239b2 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/discard-in-array-manipulating-loop/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/discard-in-array-manipulating-loop/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,86 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
+  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
+}
+
+%main_1 = func():void {
+  $B2: {
+    %data:ptr<function, array<f32, 10>, read_write> = var
+    %i:ptr<function, i32, read_write> = var
+    store %data, array<f32, 10>(0.10000000149011611938f, 0.20000000298023223877f, 0.30000001192092895508f, 0.40000000596046447754f, 0.5f, 0.60000002384185791016f, 0.69999998807907104492f, 0.80000001192092895508f, 0.89999997615814208984f, 1.0f)
+    store %i, 0i
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %7:i32 = load %i
+        %x_7:i32 = let %7
+        %9:bool = lt %x_7, 10i
+        if %9 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
+            exit_if  # if_1
+          }
+          $B6: {  # false
+            exit_loop  # loop_1
+          }
+        }
+        %10:f32 = load_vector_element %gl_FragCoord, 0u
+        %x_50:f32 = let %10
+        %12:bool = lt %x_50, 0.0f
+        if %12 [t: $B7] {  # if_2
+          $B7: {  # true
+            store %continue_execution, false
+            exit_if  # if_2
+          }
+        }
+        %13:i32 = load %i
+        %x_8:i32 = let %13
+        %15:ptr<function, f32, read_write> = access %data, %x_8
+        %16:f32 = load %15
+        %x_55:f32 = let %16
+        %18:ptr<function, f32, read_write> = access %data, 0i
+        store %18, %x_55
+        continue  # -> $B4
+      }
+      $B4: {  # continuing
+        %19:i32 = load %i
+        %x_9:i32 = let %19
+        %21:i32 = add %x_9, 1i
+        store %i, %21
+        next_iteration  # -> $B3
+      }
+    }
+    %22:ptr<function, f32, read_write> = access %data, 0i
+    %23:f32 = load %22
+    %x_58:f32 = let %23
+    %25:vec4<f32> = construct %x_58, 0.0f, 0.0f, 1.0f
+    store %x_GLF_color, %25
+    ret
+  }
+}
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B8: {
+    store %gl_FragCoord, %gl_FragCoord_param
+    %28:void = call %main_1
+    %29:vec4<f32> = load %x_GLF_color
+    %30:main_out = construct %29
+    %31:bool = load %continue_execution
+    %32:bool = eq %31, false
+    if %32 [t: $B9] {  # if_3
+      $B9: {  # true
+        terminate_invocation
+      }
+    }
+    ret %30
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/discard-in-loop-in-function/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/discard-in-loop-in-function/0-opt.spvasm.expected.ir.msl
index f9cd0d3..be82409 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/discard-in-loop-in-function/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/discard-in-loop-in-function/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,58 +8,66 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%f_ = func():void -> %b2 {
-  %b2 = block {
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %5:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-        %6:f32 = load_vector_element %5, 1u
-        %7:bool = gt 1.0f, %6
-        if %7 [t: %b5] {  # if_1
-          %b5 = block {  # true
-            %8:f32 = load_vector_element %gl_FragCoord, 1u
-            %9:bool = lt %8, 0.0f
-            if %9 [t: %b6, f: %b7] {  # if_2
-              %b6 = block {  # true
-                continue %b4
+%f_ = func():void {
+  $B2: {
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %6:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
+        %7:f32 = load_vector_element %6, 1u
+        %8:bool = gt 1.0f, %7
+        if %8 [t: $B5] {  # if_1
+          $B5: {  # true
+            %9:f32 = load_vector_element %gl_FragCoord, 1u
+            %10:bool = lt %9, 0.0f
+            if %10 [t: $B6, f: $B7] {  # if_2
+              $B6: {  # true
+                continue  # -> $B4
               }
-              %b7 = block {  # false
-                continue %b4
+              $B7: {  # false
+                continue  # -> $B4
               }
             }
             exit_if  # if_1
           }
         }
-        discard
-        continue %b4
+        store %continue_execution, false
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        break_if true %b3
+      $B4: {  # continuing
+        break_if true  # -> [t: exit_loop loop_1, f: $B3]
       }
     }
     ret
   }
 }
-%main_1 = func():void -> %b8 {
-  %b8 = block {
-    %11:void = call %f_
+%main_1 = func():void {
+  $B8: {
+    %12:void = call %f_
     store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b9 {
-  %b9 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B9: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %14:void = call %main_1
-    %15:vec4<f32> = load %x_GLF_color
-    %16:main_out = construct %15
-    ret %16
+    %15:void = call %main_1
+    %16:vec4<f32> = load %x_GLF_color
+    %17:main_out = construct %16
+    %18:bool = load %continue_execution
+    %19:bool = eq %18, false
+    if %19 [t: $B10] {  # if_3
+      $B10: {  # true
+        terminate_invocation
+      }
+    }
+    ret %17
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/discard-in-loop-in-function/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/discard-in-loop-in-function/0-opt.wgsl.expected.ir.msl
index db8fde3..ddf733a 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/discard-in-loop-in-function/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/discard-in-loop-in-function/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,58 +8,68 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%f_ = func():void -> %b2 {
-  %b2 = block {
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %5:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-        %x_35:f32 = load_vector_element %5, 1u
-        %7:bool = gt 1.0f, %x_35
-        if %7 [t: %b5] {  # if_1
-          %b5 = block {  # true
-            %x_40:f32 = load_vector_element %gl_FragCoord, 1u
-            %9:bool = lt %x_40, 0.0f
-            if %9 [t: %b6, f: %b7] {  # if_2
-              %b6 = block {  # true
-                continue %b4
+%f_ = func():void {
+  $B2: {
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %6:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
+        %7:f32 = load_vector_element %6, 1u
+        %x_35:f32 = let %7
+        %9:bool = gt 1.0f, %x_35
+        if %9 [t: $B5] {  # if_1
+          $B5: {  # true
+            %10:f32 = load_vector_element %gl_FragCoord, 1u
+            %x_40:f32 = let %10
+            %12:bool = lt %x_40, 0.0f
+            if %12 [t: $B6, f: $B7] {  # if_2
+              $B6: {  # true
+                continue  # -> $B4
               }
-              %b7 = block {  # false
-                continue %b4
+              $B7: {  # false
+                continue  # -> $B4
               }
             }
             exit_if  # if_1
           }
         }
-        discard
-        continue %b4
+        store %continue_execution, false
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        break_if true %b3
+      $B4: {  # continuing
+        break_if true  # -> [t: exit_loop loop_1, f: $B3]
       }
     }
     ret
   }
 }
-%main_1 = func():void -> %b8 {
-  %b8 = block {
-    %11:void = call %f_
+%main_1 = func():void {
+  $B8: {
+    %14:void = call %f_
     store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b9 {
-  %b9 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B9: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %14:void = call %main_1
-    %15:vec4<f32> = load %x_GLF_color
-    %16:main_out = construct %15
-    ret %16
+    %17:void = call %main_1
+    %18:vec4<f32> = load %x_GLF_color
+    %19:main_out = construct %18
+    %20:bool = load %continue_execution
+    %21:bool = eq %20, false
+    if %21 [t: $B10] {  # if_3
+      $B10: {  # true
+        terminate_invocation
+      }
+    }
+    ret %19
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/discard-in-loop/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/discard-in-loop/0-opt.spvasm.expected.ir.msl
index cdbf128..57ab862 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/discard-in-loop/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/discard-in-loop/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,104 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
+../../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
+  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
+  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
+}
+
+%x_47 = func():void {
+  $B2: {
+    store %continue_execution, false
+    ret
+  }
+}
+%main_1 = func():void {
+  $B3: {
+    loop [b: $B4] {  # loop_1
+      $B4: {  # body
+        %x_30:ptr<function, i32, read_write> = var
+        %x_48:ptr<function, bool, read_write> = var
+        store %x_30, 0i
+        loop [b: $B5, c: $B6] {  # loop_2
+          $B5: {  # body
+            %x_31:ptr<function, i32, read_write> = var
+            store %x_48, false
+            %9:i32 = load %x_30
+            %10:bool = lt %9, 10i
+            if %10 [t: $B7, f: $B8] {  # if_1
+              $B7: {  # true
+                exit_if  # if_1
+              }
+              $B8: {  # false
+                exit_loop  # loop_2
+              }
+            }
+            %11:f32 = load_vector_element %gl_FragCoord, 1u
+            %12:bool = lt %11, 0.0f
+            if %12 [t: $B9] {  # if_2
+              $B9: {  # true
+                %13:f32 = load_vector_element %gl_FragCoord, 0u
+                %14:bool = lt %13, 0.0f
+                if %14 [t: $B10, f: $B11] {  # if_3
+                  $B10: {  # true
+                    store %x_48, false
+                    exit_loop  # loop_2
+                  }
+                  $B11: {  # false
+                    continue  # -> $B6
+                  }
+                }
+                exit_if  # if_2
+              }
+            }
+            %15:void = call %x_47
+            store %x_48, true
+            exit_loop  # loop_2
+          }
+          $B6: {  # continuing
+            %16:i32 = load %x_30
+            %17:i32 = add %16, 1i
+            store %x_31, %17
+            %18:i32 = load %x_31
+            store %x_30, %18
+            next_iteration  # -> $B5
+          }
+        }
+        %19:bool = load %x_48
+        if %19 [t: $B12] {  # if_4
+          $B12: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        exit_loop  # loop_1
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B13: {
+    store %gl_FragCoord, %gl_FragCoord_param
+    %22:void = call %main_1
+    %23:vec4<f32> = load %x_GLF_color
+    %24:main_out = construct %23
+    %25:bool = load %continue_execution
+    %26:bool = eq %25, false
+    if %26 [t: $B14] {  # if_5
+      $B14: {  # true
+        terminate_invocation
+      }
+    }
+    ret %24
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/discard-in-loop/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/discard-in-loop/0-opt.wgsl.expected.ir.msl
index cdbf128..bcdf47e 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/discard-in-loop/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/discard-in-loop/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,106 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
+../../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
+  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
+  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
+}
+
+%x_47 = func():void {
+  $B2: {
+    store %continue_execution, false
+    ret
+  }
+}
+%main_1 = func():void {
+  $B3: {
+    loop [b: $B4] {  # loop_1
+      $B4: {  # body
+        %x_30_phi:ptr<function, i32, read_write> = var
+        %x_48_phi:ptr<function, bool, read_write> = var
+        store %x_30_phi, 0i
+        loop [b: $B5, c: $B6] {  # loop_2
+          $B5: {  # body
+            %x_31:ptr<function, i32, read_write> = var
+            %9:i32 = load %x_30_phi
+            %x_30:i32 = let %9
+            store %x_48_phi, false
+            %11:bool = lt %x_30, 10i
+            if %11 [t: $B7, f: $B8] {  # if_1
+              $B7: {  # true
+                exit_if  # if_1
+              }
+              $B8: {  # false
+                exit_loop  # loop_2
+              }
+            }
+            %12:f32 = load_vector_element %gl_FragCoord, 1u
+            %x_37:f32 = let %12
+            %14:bool = lt %x_37, 0.0f
+            if %14 [t: $B9] {  # if_2
+              $B9: {  # true
+                %15:f32 = load_vector_element %gl_FragCoord, 0u
+                %x_42:f32 = let %15
+                %17:bool = lt %x_42, 0.0f
+                if %17 [t: $B10, f: $B11] {  # if_3
+                  $B10: {  # true
+                    store %x_48_phi, false
+                    exit_loop  # loop_2
+                  }
+                  $B11: {  # false
+                    continue  # -> $B6
+                  }
+                }
+                exit_if  # if_2
+              }
+            }
+            %18:void = call %x_47
+            continue  # -> $B6
+          }
+          $B6: {  # continuing
+            %19:i32 = add %x_30, 1i
+            store %x_31, %19
+            %20:i32 = load %x_31
+            store %x_30_phi, %20
+            next_iteration  # -> $B5
+          }
+        }
+        %21:bool = load %x_48_phi
+        %x_48:bool = let %21
+        if %x_48 [t: $B12] {  # if_4
+          $B12: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        exit_loop  # loop_1
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B13: {
+    store %gl_FragCoord, %gl_FragCoord_param
+    %25:void = call %main_1
+    %26:vec4<f32> = load %x_GLF_color
+    %27:main_out = construct %26
+    %28:bool = load %continue_execution
+    %29:bool = eq %28, false
+    if %29 [t: $B14] {  # if_5
+      $B14: {  # true
+        terminate_invocation
+      }
+    }
+    ret %27
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
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
index efdd3b1..96643b2 100644
--- 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
@@ -1,6 +1,97 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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.   *
 *                                                                  *
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
index efdd3b1..d701592 100644
--- 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
@@ -1,6 +1,102 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/do-while-false-loops/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/do-while-false-loops/0-opt.spvasm.expected.ir.msl
index efdd3b1..31236b3 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/do-while-false-loops/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/do-while-false-loops/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,98 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+}
+
+%f_ = func():vec3<f32> {
+  $B2: {
+    %iteration:ptr<function, i32, read_write> = var
+    %k:ptr<function, i32, read_write> = var
+    store %iteration, 0i
+    store %k, 0i
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %5:i32 = load %k
+        %6:bool = lt %5, 100i
+        if %6 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
+            exit_if  # if_1
+          }
+          $B6: {  # false
+            exit_loop  # loop_1
+          }
+        }
+        %7:i32 = load %iteration
+        %8:i32 = add %7, 1i
+        store %iteration, %8
+        continue  # -> $B4
+      }
+      $B4: {  # continuing
+        %9:i32 = load %k
+        %10:i32 = add %9, 1i
+        store %k, %10
+        next_iteration  # -> $B3
+      }
+    }
+    %11:i32 = load %iteration
+    %12:bool = lt %11, 100i
+    if %12 [t: $B7, f: $B8] {  # if_2
+      $B7: {  # true
+        %13:i32 = load %iteration
+        %x_13:i32 = let %13
+        %15:i32 = load %iteration
+        %x_15:i32 = let %15
+        %17:i32 = sub %x_13, 1i
+        %18:f32 = convert %17
+        %19:f32 = let %18
+        %20:i32 = sub %x_15, 1i
+        %21:f32 = convert %20
+        %22:vec3<f32> = construct 1.0f, %19, %21
+        ret %22
+      }
+      $B8: {  # false
+        loop [b: $B9] {  # loop_2
+          $B9: {  # body
+            loop [b: $B10] {  # loop_3
+              $B10: {  # body
+                ret vec3<f32>(1.0f, 0.0f, 0.0f)
+              }
+            }
+            unreachable
+          }
+        }
+        exit_if  # if_2
+      }
+    }
+    unreachable
+  }
+}
+%main_1 = func():void {
+  $B11: {
+    %24:vec3<f32> = call %f_
+    %x_35:vec3<f32> = let %24
+    %26:f32 = access %x_35, 0u
+    %27:f32 = access %x_35, 1u
+    %28:f32 = access %x_35, 2u
+    %29:vec4<f32> = construct %26, %27, %28, 1.0f
+    store %x_GLF_color, %29
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B12: {
+    %31:void = call %main_1
+    %32:vec4<f32> = load %x_GLF_color
+    %33:main_out = construct %32
+    ret %33
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/do-while-false-loops/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/do-while-false-loops/0-opt.wgsl.expected.ir.msl
index efdd3b1..458203e 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/do-while-false-loops/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/do-while-false-loops/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,102 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+}
+
+%f_ = func():vec3<f32> {
+  $B2: {
+    %iteration:ptr<function, i32, read_write> = var
+    %k:ptr<function, i32, read_write> = var
+    store %iteration, 0i
+    store %k, 0i
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %5:i32 = load %k
+        %x_7:i32 = let %5
+        %7:bool = lt %x_7, 100i
+        if %7 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
+            exit_if  # if_1
+          }
+          $B6: {  # false
+            exit_loop  # loop_1
+          }
+        }
+        %8:i32 = load %iteration
+        %x_8:i32 = let %8
+        %10:i32 = add %x_8, 1i
+        store %iteration, %10
+        continue  # -> $B4
+      }
+      $B4: {  # continuing
+        %11:i32 = load %k
+        %x_10:i32 = let %11
+        %13:i32 = add %x_10, 1i
+        store %k, %13
+        next_iteration  # -> $B3
+      }
+    }
+    %14:i32 = load %iteration
+    %x_12:i32 = let %14
+    %16:bool = lt %x_12, 100i
+    if %16 [t: $B7, f: $B8] {  # if_2
+      $B7: {  # true
+        %17:i32 = load %iteration
+        %x_13:i32 = let %17
+        %19:i32 = load %iteration
+        %x_15:i32 = let %19
+        %21:i32 = sub %x_13, 1i
+        %22:f32 = convert %21
+        %23:f32 = let %22
+        %24:i32 = sub %x_15, 1i
+        %25:f32 = convert %24
+        %26:vec3<f32> = construct 1.0f, %23, %25
+        ret %26
+      }
+      $B8: {  # false
+        loop [b: $B9] {  # loop_2
+          $B9: {  # body
+            loop [b: $B10] {  # loop_3
+              $B10: {  # body
+                ret vec3<f32>(1.0f, 0.0f, 0.0f)
+              }
+            }
+            unreachable
+          }
+        }
+        exit_if  # if_2
+      }
+    }
+    unreachable
+  }
+}
+%main_1 = func():void {
+  $B11: {
+    %28:vec3<f32> = call %f_
+    %x_35:vec3<f32> = let %28
+    %30:f32 = access %x_35, 0u
+    %31:f32 = access %x_35, 1u
+    %32:f32 = access %x_35, 2u
+    %33:vec4<f32> = construct %30, %31, %32, 1.0f
+    store %x_GLF_color, %33
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B12: {
+    %35:void = call %main_1
+    %36:vec4<f32> = load %x_GLF_color
+    %37:main_out = construct %36
+    ret %37
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/do-while-if-return/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/do-while-if-return/0-opt.spvasm.expected.ir.msl
index a331746..4942fc3 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/do-while-if-return/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/do-while-if-return/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,87 +8,89 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%func_ = func():i32 -> %b2 {
-  %b2 = block {
+%func_ = func():i32 {
+  $B2: {
     %loop_count:ptr<function, i32, read_write> = var
     %x_38:ptr<function, i32, read_write> = var
     store %loop_count, 0i
     store %x_38, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %x_45:ptr<function, i32, read_write> = var
         %x_39:ptr<function, i32, read_write> = var
         %8:i32 = load %x_38
-        %x_43:i32 = add %8, 1i
+        %9:i32 = add %8, 1i
+        %x_43:i32 = let %9
         store %loop_count, %x_43
         store %x_45, %x_43
-        loop [b: %b5, c: %b6] {  # loop_2
-          %b5 = block {  # body
-            %10:i32 = load %x_45
-            %11:i32 = add %10, 1i
-            store %x_39, %11
-            %12:i32 = load %x_39
-            store %loop_count, %12
-            %13:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-            %14:f32 = load_vector_element %13, 0u
-            %15:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-            %16:f32 = load_vector_element %15, 1u
-            %17:bool = lt %14, %16
-            if %17 [t: %b7] {  # if_1
-              %b7 = block {  # true
+        loop [b: $B5, c: $B6] {  # loop_2
+          $B5: {  # body
+            %11:i32 = load %x_45
+            %12:i32 = add %11, 1i
+            store %x_39, %12
+            %13:i32 = load %x_39
+            store %loop_count, %13
+            %14:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
+            %15:f32 = load_vector_element %14, 0u
+            %16:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
+            %17:f32 = load_vector_element %16, 1u
+            %18:bool = lt %15, %17
+            if %18 [t: $B7] {  # if_1
+              $B7: {  # true
                 ret 1i
               }
             }
-            %18:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-            %19:f32 = load_vector_element %18, 0u
-            %20:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-            %21:f32 = load_vector_element %20, 1u
-            %22:bool = lt %19, %21
-            if %22 [t: %b8] {  # if_2
-              %b8 = block {  # true
+            %19:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
+            %20:f32 = load_vector_element %19, 0u
+            %21:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
+            %22:f32 = load_vector_element %21, 1u
+            %23:bool = lt %20, %22
+            if %23 [t: $B8] {  # if_2
+              $B8: {  # true
                 exit_loop  # loop_2
               }
             }
-            continue %b6
+            continue  # -> $B6
           }
-          %b6 = block {  # continuing
-            %23:i32 = load %x_39
-            store %x_45, %23
+          $B6: {  # continuing
             %24:i32 = load %x_39
-            %25:bool = lt %24, 100i
-            %26:bool = eq %25, false
-            break_if %26 %b5
+            store %x_45, %24
+            %25:i32 = load %x_39
+            %26:bool = lt %25, 100i
+            %27:bool = eq %26, false
+            break_if %27  # -> [t: exit_loop loop_2, f: $B5]
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %27:i32 = load %x_39
-        store %x_38, %27
+      $B4: {  # continuing
         %28:i32 = load %x_39
-        %29:bool = lt %28, 100i
-        %30:bool = eq %29, false
-        break_if %30 %b3
+        store %x_38, %28
+        %29:i32 = load %x_39
+        %30:bool = lt %29, 100i
+        %31:bool = eq %30, false
+        break_if %31  # -> [t: exit_loop loop_1, f: $B3]
       }
     }
     ret 0i
   }
 }
-%main_1 = func():void -> %b9 {
-  %b9 = block {
-    %x_31:i32 = call %func_
-    %33:bool = eq %x_31, 1i
-    if %33 [t: %b10, f: %b11] {  # if_3
-      %b10 = block {  # true
+%main_1 = func():void {
+  $B9: {
+    %33:i32 = call %func_
+    %x_31:i32 = let %33
+    %35:bool = eq %x_31, 1i
+    if %35 [t: $B10, f: $B11] {  # if_3
+      $B10: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_3
       }
-      %b11 = block {  # false
+      $B11: {  # false
         store %x_GLF_color, vec4<f32>(1.0f)
         exit_if  # if_3
       }
@@ -96,12 +98,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b12 {
-  %b12 = block {
-    %35:void = call %main_1
-    %36:vec4<f32> = load %x_GLF_color
-    %37:main_out = construct %36
-    ret %37
+%tint_symbol = @fragment func():main_out {
+  $B12: {
+    %37:void = call %main_1
+    %38:vec4<f32> = load %x_GLF_color
+    %39:main_out = construct %38
+    ret %39
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/do-while-if-return/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/do-while-if-return/0-opt.wgsl.expected.ir.msl
index 5d0ab1f..52552ce 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/do-while-if-return/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/do-while-if-return/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,87 +8,95 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%func_ = func():i32 -> %b2 {
-  %b2 = block {
+%func_ = func():i32 {
+  $B2: {
     %loop_count:ptr<function, i32, read_write> = var
     %x_38_phi:ptr<function, i32, read_write> = var
     store %loop_count, 0i
     store %x_38_phi, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %x_39:ptr<function, i32, read_write> = var
         %x_45_phi:ptr<function, i32, read_write> = var
-        %x_38:i32 = load %x_38_phi
-        %x_43:i32 = add %x_38, 1i
+        %8:i32 = load %x_38_phi
+        %x_38:i32 = let %8
+        %10:i32 = add %x_38, 1i
+        %x_43:i32 = let %10
         store %loop_count, %x_43
         store %x_45_phi, %x_43
-        loop [b: %b5, c: %b6] {  # loop_2
-          %b5 = block {  # body
-            %x_45:i32 = load %x_45_phi
-            %11:i32 = add %x_45, 1i
-            store %x_39, %11
-            %12:i32 = load %x_39
-            store %loop_count, %12
-            %13:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-            %x_50:f32 = load_vector_element %13, 0u
-            %15:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-            %x_52:f32 = load_vector_element %15, 1u
-            %17:bool = lt %x_50, %x_52
-            if %17 [t: %b7] {  # if_1
-              %b7 = block {  # true
+        loop [b: $B5, c: $B6] {  # loop_2
+          $B5: {  # body
+            %12:i32 = load %x_45_phi
+            %x_45:i32 = let %12
+            %14:i32 = add %x_45, 1i
+            store %x_39, %14
+            %15:i32 = load %x_39
+            store %loop_count, %15
+            %16:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
+            %17:f32 = load_vector_element %16, 0u
+            %x_50:f32 = let %17
+            %19:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
+            %20:f32 = load_vector_element %19, 1u
+            %x_52:f32 = let %20
+            %22:bool = lt %x_50, %x_52
+            if %22 [t: $B7] {  # if_1
+              $B7: {  # true
                 ret 1i
               }
             }
-            %18:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-            %x_57:f32 = load_vector_element %18, 0u
-            %20:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-            %x_59:f32 = load_vector_element %20, 1u
-            %22:bool = lt %x_57, %x_59
-            if %22 [t: %b8] {  # if_2
-              %b8 = block {  # true
+            %23:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
+            %24:f32 = load_vector_element %23, 0u
+            %x_57:f32 = let %24
+            %26:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
+            %27:f32 = load_vector_element %26, 1u
+            %x_59:f32 = let %27
+            %29:bool = lt %x_57, %x_59
+            if %29 [t: $B8] {  # if_2
+              $B8: {  # true
                 exit_loop  # loop_2
               }
             }
-            continue %b6
+            continue  # -> $B6
           }
-          %b6 = block {  # continuing
-            %23:i32 = load %x_39
-            store %x_45_phi, %23
-            %24:i32 = load %x_39
-            %25:bool = lt %24, 100i
-            %26:bool = eq %25, false
-            break_if %26 %b5
+          $B6: {  # continuing
+            %30:i32 = load %x_39
+            store %x_45_phi, %30
+            %31:i32 = load %x_39
+            %32:bool = lt %31, 100i
+            %33:bool = eq %32, false
+            break_if %33  # -> [t: exit_loop loop_2, f: $B5]
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %27:i32 = load %x_39
-        store %x_38_phi, %27
-        %28:i32 = load %x_39
-        %29:bool = lt %28, 100i
-        %30:bool = eq %29, false
-        break_if %30 %b3
+      $B4: {  # continuing
+        %34:i32 = load %x_39
+        store %x_38_phi, %34
+        %35:i32 = load %x_39
+        %36:bool = lt %35, 100i
+        %37:bool = eq %36, false
+        break_if %37  # -> [t: exit_loop loop_1, f: $B3]
       }
     }
     ret 0i
   }
 }
-%main_1 = func():void -> %b9 {
-  %b9 = block {
-    %x_31:i32 = call %func_
-    %33:bool = eq %x_31, 1i
-    if %33 [t: %b10, f: %b11] {  # if_3
-      %b10 = block {  # true
+%main_1 = func():void {
+  $B9: {
+    %39:i32 = call %func_
+    %x_31:i32 = let %39
+    %41:bool = eq %x_31, 1i
+    if %41 [t: $B10, f: $B11] {  # if_3
+      $B10: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_3
       }
-      %b11 = block {  # false
+      $B11: {  # false
         store %x_GLF_color, vec4<f32>(1.0f)
         exit_if  # if_3
       }
@@ -96,12 +104,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b12 {
-  %b12 = block {
-    %35:void = call %main_1
-    %36:vec4<f32> = load %x_GLF_color
-    %37:main_out = construct %36
-    ret %37
+%tint_symbol = @fragment func():main_out {
+  $B12: {
+    %43:void = call %main_1
+    %44:vec4<f32> = load %x_GLF_color
+    %45:main_out = construct %44
+    ret %45
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/do-while-loop-in-conditionals/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/do-while-loop-in-conditionals/0-opt.spvasm.expected.ir.msl
index efdd3b1..bac8a4e 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/do-while-loop-in-conditionals/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/do-while-loop-in-conditionals/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,56 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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: {
+    store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+    if true [t: $B3] {  # if_1
+      $B3: {  # true
+        %4:f32 = load_vector_element %gl_FragCoord, 0u
+        %5:bool = lt %4, 0.0f
+        if %5 [t: $B4] {  # if_2
+          $B4: {  # true
+            loop [b: $B5, c: $B6] {  # loop_1
+              $B5: {  # body
+                store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+                continue  # -> $B6
+              }
+              $B6: {  # continuing
+                %6:f32 = load_vector_element %gl_FragCoord, 0u
+                %x_32:f32 = let %6
+                %8:bool = lt %x_32, 0.0f
+                %9:bool = eq %8, false
+                break_if %9  # -> [t: exit_loop loop_1, f: $B5]
+              }
+            }
+            exit_if  # if_2
+          }
+        }
+        exit_if  # if_1
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B7: {
+    store %gl_FragCoord, %gl_FragCoord_param
+    %12:void = call %main_1
+    %13:vec4<f32> = load %x_GLF_color
+    %14:main_out = construct %13
+    ret %14
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/do-while-loop-in-conditionals/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/do-while-loop-in-conditionals/0-opt.wgsl.expected.ir.msl
index efdd3b1..9e49130 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/do-while-loop-in-conditionals/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/do-while-loop-in-conditionals/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,57 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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: {
+    store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+    if true [t: $B3] {  # if_1
+      $B3: {  # true
+        %4:f32 = load_vector_element %gl_FragCoord, 0u
+        %x_23:f32 = let %4
+        %6:bool = lt %x_23, 0.0f
+        if %6 [t: $B4] {  # if_2
+          $B4: {  # true
+            loop [b: $B5, c: $B6] {  # loop_1
+              $B5: {  # body
+                store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+                continue  # -> $B6
+              }
+              $B6: {  # continuing
+                %7:f32 = load_vector_element %gl_FragCoord, 0u
+                %x_32:f32 = let %7
+                %9:bool = lt %x_32, 0.0f
+                %10:bool = eq %9, false
+                break_if %10  # -> [t: exit_loop loop_1, f: $B5]
+              }
+            }
+            exit_if  # if_2
+          }
+        }
+        exit_if  # if_1
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B7: {
+    store %gl_FragCoord, %gl_FragCoord_param
+    %13:void = call %main_1
+    %14:vec4<f32> = load %x_GLF_color
+    %15:main_out = construct %14
+    ret %15
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/early-return-and-barrier/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/early-return-and-barrier/0.spvasm.expected.ir.msl
index 05d337a..18ecc8e 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/early-return-and-barrier/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/early-return-and-barrier/0.spvasm.expected.ir.msl
@@ -1,44 +1,44 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: theSSBO = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: theSSBO = struct @align(4) {
   out_data:i32 @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_4:ptr<storage, theSSBO, read_write> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %x_30:ptr<function, mat2x2<f32>, read_write> = var
     %x_32:ptr<function, i32, read_write> = var
     %5:ptr<storage, i32, read_write> = access %x_4, 0u
     store %5, 42i
     store %x_30, mat2x2<f32>(vec2<f32>(0.0f))
     store %x_32, 1i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %x_33:ptr<function, i32, read_write> = var
         %7:i32 = load %x_32
         %8:bool = gt %7, 0i
-        if %8 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %8 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
+      $B4: {  # continuing
         %9:i32 = load %x_32
         %10:i32 = sub %9, 1i
         store %x_33, %10
         store %x_30, mat2x2<f32>(vec2<f32>(1.0f, 0.0f), vec2<f32>(0.0f, 1.0f))
         %11:i32 = load %x_33
         store %x_32, %11
-        next_iteration %b3
+        next_iteration  # -> $B3
       }
     }
     %12:ptr<function, vec2<f32>, read_write> = access %x_30, 0u
@@ -48,29 +48,27 @@
     %16:vec2<f32> = load %15
     %17:vec2<f32> = sub %16, vec2<f32>(0.0f, 1.0f)
     %18:mat2x2<f32> = construct %14, %17
-    %x_41:vec2<f32> = mul vec2<f32>(1.0f), %18
-    loop [b: %b7, c: %b8] {  # loop_2
-      %b7 = block {  # body
-        %20:f32 = access %x_41, 0u
-        %21:bool = lt 1.0f, %20
-        if %21 [t: %b9] {  # if_2
-          %b9 = block {  # true
+    %19:vec2<f32> = mul vec2<f32>(1.0f), %18
+    %x_41:vec2<f32> = let %19
+    loop [b: $B7] {  # loop_2
+      $B7: {  # body
+        %21:f32 = access %x_41, 0u
+        %22:bool = lt 1.0f, %21
+        if %22 [t: $B8] {  # if_2
+          $B8: {  # true
             exit_loop  # loop_2
           }
         }
-        %22:void = workgroupBarrier
+        %23:void = msl.threadgroup_barrier 4u
         exit_loop  # loop_2
       }
-      %b8 = block {  # continuing
-        next_iteration %b7
-      }
     }
     ret
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b10 {
-  %b10 = block {
-    %24:void = call %main_1
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B9: {
+    %25:void = call %main_1
     ret
   }
 }
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/early-return-and-barrier/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/early-return-and-barrier/0.wgsl.expected.ir.msl
index b9183a2..afab298 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/early-return-and-barrier/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/early-return-and-barrier/0.wgsl.expected.ir.msl
@@ -1,15 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: theSSBO = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: theSSBO = struct @align(4) {
   out_data:i32 @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_4:ptr<storage, theSSBO, read_write> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %x_30:ptr<function, mat2x2<f32>, read_write> = var
     %x_30_phi:ptr<function, mat2x2<f32>, read_write> = var
     %x_32_phi:ptr<function, i32, read_write> = var
@@ -17,62 +17,61 @@
     store %6, 42i
     store %x_30_phi, mat2x2<f32>(vec2<f32>(0.0f))
     store %x_32_phi, 1i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %x_33:ptr<function, i32, read_write> = var
         %8:mat2x2<f32> = load %x_30_phi
         store %x_30, %8
-        %x_32:i32 = load %x_32_phi
-        %10:bool = gt %x_32, 0i
-        if %10 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %9:i32 = load %x_32_phi
+        %x_32:i32 = let %9
+        %11:bool = gt %x_32, 0i
+        if %11 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %11:i32 = sub %x_32, 1i
-        store %x_33, %11
+      $B4: {  # continuing
+        %12:i32 = sub %x_32, 1i
+        store %x_33, %12
         store %x_30_phi, mat2x2<f32>(vec2<f32>(1.0f, 0.0f), vec2<f32>(0.0f, 1.0f))
-        %12:i32 = load %x_33
-        store %x_32_phi, %12
-        next_iteration %b3
+        %13:i32 = load %x_33
+        store %x_32_phi, %13
+        next_iteration  # -> $B3
       }
     }
-    %13:ptr<function, vec2<f32>, read_write> = access %x_30, 0u
-    %14:vec2<f32> = load %13
-    %15:vec2<f32> = sub %14, vec2<f32>(1.0f, 0.0f)
-    %16:ptr<function, vec2<f32>, read_write> = access %x_30, 1u
-    %17:vec2<f32> = load %16
-    %18:vec2<f32> = sub %17, vec2<f32>(0.0f, 1.0f)
-    %19:mat2x2<f32> = construct %15, %18
-    %x_41:vec2<f32> = mul vec2<f32>(1.0f), %19
-    loop [b: %b7, c: %b8] {  # loop_2
-      %b7 = block {  # body
-        %21:f32 = access %x_41, 0u
-        %22:bool = lt 1.0f, %21
-        if %22 [t: %b9] {  # if_2
-          %b9 = block {  # true
+    %14:ptr<function, vec2<f32>, read_write> = access %x_30, 0u
+    %15:vec2<f32> = load %14
+    %16:vec2<f32> = sub %15, vec2<f32>(1.0f, 0.0f)
+    %17:ptr<function, vec2<f32>, read_write> = access %x_30, 1u
+    %18:vec2<f32> = load %17
+    %19:vec2<f32> = sub %18, vec2<f32>(0.0f, 1.0f)
+    %20:mat2x2<f32> = construct %16, %19
+    %21:vec2<f32> = mul vec2<f32>(1.0f), %20
+    %x_41:vec2<f32> = let %21
+    loop [b: $B7] {  # loop_2
+      $B7: {  # body
+        %23:f32 = access %x_41, 0u
+        %24:bool = lt 1.0f, %23
+        if %24 [t: $B8] {  # if_2
+          $B8: {  # true
             exit_loop  # loop_2
           }
         }
-        %23:void = workgroupBarrier
+        %25:void = msl.threadgroup_barrier 4u
         exit_loop  # loop_2
       }
-      %b8 = block {  # continuing
-        next_iteration %b7
-      }
     }
     ret
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b10 {
-  %b10 = block {
-    %25:void = call %main_1
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B9: {
+    %27:void = call %main_1
     ret
   }
 }
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/flag-always-false-if/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/flag-always-false-if/0-opt.spvasm.expected.ir.msl
index 43e2505..3d53649 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/flag-always-false-if/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/flag-always-false-if/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,117 +8,119 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %loop_count:ptr<function, i32, read_write> = var
     store %loop_count, 0i
     %6:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
     %7:f32 = load_vector_element %6, 0u
     %8:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
     %9:f32 = load_vector_element %8, 1u
-    %x_36:bool = gt %7, %9
-    if %x_36 [t: %b3] {  # if_1
-      %b3 = block {  # true
+    %10:bool = gt %7, %9
+    %x_36:bool = let %10
+    if %x_36 [t: $B3] {  # if_1
+      $B3: {  # true
         ret
       }
     }
-    %11:f32 = load_vector_element %gl_FragCoord, 0u
-    %x_41:bool = lt %11, 0.0f
-    loop [b: %b4, c: %b5] {  # loop_1
-      %b4 = block {  # body
-        %13:i32 = load %loop_count
-        %14:bool = lt %13, 100i
-        if %14 [t: %b6, f: %b7] {  # if_2
-          %b6 = block {  # true
+    %12:f32 = load_vector_element %gl_FragCoord, 0u
+    %13:bool = lt %12, 0.0f
+    %x_41:bool = let %13
+    loop [b: $B4, c: $B5] {  # loop_1
+      $B4: {  # body
+        %15:i32 = load %loop_count
+        %16:bool = lt %15, 100i
+        if %16 [t: $B6, f: $B7] {  # if_2
+          $B6: {  # true
             exit_if  # if_2
           }
-          %b7 = block {  # false
+          $B7: {  # false
             exit_loop  # loop_1
           }
         }
-        if %x_36 [t: %b8] {  # if_3
-          %b8 = block {  # true
+        if %x_36 [t: $B8] {  # if_3
+          $B8: {  # true
             exit_loop  # loop_1
           }
         }
-        if %x_36 [t: %b9, f: %b10] {  # if_4
-          %b9 = block {  # true
+        if %x_36 [t: $B9, f: $B10] {  # if_4
+          $B9: {  # true
             store %x_GLF_color, vec4<f32>(1.0f)
             exit_if  # if_4
           }
-          %b10 = block {  # false
-            if %x_41 [t: %b11] {  # if_5
-              %b11 = block {  # true
+          $B10: {  # false
+            if %x_41 [t: $B11] {  # if_5
+              $B11: {  # true
                 ret
               }
             }
             exit_if  # if_4
           }
         }
-        if %x_36 [t: %b12, f: %b13] {  # if_6
-          %b12 = block {  # true
+        if %x_36 [t: $B12, f: $B13] {  # if_6
+          $B12: {  # true
             store %x_GLF_color, vec4<f32>(1.0f)
             exit_if  # if_6
           }
-          %b13 = block {  # false
+          $B13: {  # false
             store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
             exit_if  # if_6
           }
         }
-        if %x_36 [t: %b14] {  # if_7
-          %b14 = block {  # true
+        if %x_36 [t: $B14] {  # if_7
+          $B14: {  # true
             ret
           }
         }
-        if %x_41 [t: %b15] {  # if_8
-          %b15 = block {  # true
-            loop [b: %b16, c: %b17] {  # loop_2
-              %b16 = block {  # body
-                %15:i32 = load %loop_count
-                %16:bool = lt %15, 100i
-                if %16 [t: %b18, f: %b19] {  # if_9
-                  %b18 = block {  # true
+        if %x_41 [t: $B15] {  # if_8
+          $B15: {  # true
+            loop [b: $B16, c: $B17] {  # loop_2
+              $B16: {  # body
+                %17:i32 = load %loop_count
+                %18:bool = lt %17, 100i
+                if %18 [t: $B18, f: $B19] {  # if_9
+                  $B18: {  # true
                     exit_if  # if_9
                   }
-                  %b19 = block {  # false
+                  $B19: {  # false
                     exit_loop  # loop_2
                   }
                 }
-                continue %b17
+                continue  # -> $B17
               }
-              %b17 = block {  # continuing
-                %17:i32 = load %loop_count
-                %18:i32 = add %17, 1i
-                store %loop_count, %18
-                next_iteration %b16
+              $B17: {  # continuing
+                %19:i32 = load %loop_count
+                %20:i32 = add %19, 1i
+                store %loop_count, %20
+                next_iteration  # -> $B16
               }
             }
             exit_if  # if_8
           }
         }
-        continue %b5
+        continue  # -> $B5
       }
-      %b5 = block {  # continuing
-        %19:i32 = load %loop_count
-        %20:i32 = add %19, 1i
-        store %loop_count, %20
-        next_iteration %b4
+      $B5: {  # continuing
+        %21:i32 = load %loop_count
+        %22:i32 = add %21, 1i
+        store %loop_count, %22
+        next_iteration  # -> $B4
       }
     }
-    %21:i32 = load %loop_count
-    %22:bool = gte %21, 100i
-    if %22 [t: %b20, f: %b21] {  # if_10
-      %b20 = block {  # true
+    %23:i32 = load %loop_count
+    %24:bool = gte %23, 100i
+    if %24 [t: $B20, f: $B21] {  # if_10
+      $B20: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_10
       }
-      %b21 = block {  # false
+      $B21: {  # false
         store %x_GLF_color, vec4<f32>(1.0f)
         exit_if  # if_10
       }
@@ -126,13 +128,13 @@
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b22 {
-  %b22 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B22: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %25:void = call %main_1
-    %26:vec4<f32> = load %x_GLF_color
-    %27:main_out = construct %26
-    ret %27
+    %27:void = call %main_1
+    %28:vec4<f32> = load %x_GLF_color
+    %29:main_out = construct %28
+    ret %29
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/flag-always-false-if/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/flag-always-false-if/0-opt.wgsl.expected.ir.msl
index 224f99f..08ad7cc 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/flag-always-false-if/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/flag-always-false-if/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,117 +8,127 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %loop_count:ptr<function, i32, read_write> = var
     store %loop_count, 0i
     %6:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-    %x_33:f32 = load_vector_element %6, 0u
-    %8:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-    %x_35:f32 = load_vector_element %8, 1u
-    %x_36:bool = gt %x_33, %x_35
-    if %x_36 [t: %b3] {  # if_1
-      %b3 = block {  # true
+    %7:f32 = load_vector_element %6, 0u
+    %x_33:f32 = let %7
+    %9:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
+    %10:f32 = load_vector_element %9, 1u
+    %x_35:f32 = let %10
+    %12:bool = gt %x_33, %x_35
+    %x_36:bool = let %12
+    if %x_36 [t: $B3] {  # if_1
+      $B3: {  # true
         ret
       }
     }
-    %x_40:f32 = load_vector_element %gl_FragCoord, 0u
-    %x_41:bool = lt %x_40, 0.0f
-    loop [b: %b4, c: %b5] {  # loop_1
-      %b4 = block {  # body
-        %x_43:i32 = load %loop_count
-        %14:bool = lt %x_43, 100i
-        if %14 [t: %b6, f: %b7] {  # if_2
-          %b6 = block {  # true
+    %14:f32 = load_vector_element %gl_FragCoord, 0u
+    %x_40:f32 = let %14
+    %16:bool = lt %x_40, 0.0f
+    %x_41:bool = let %16
+    loop [b: $B4, c: $B5] {  # loop_1
+      $B4: {  # body
+        %18:i32 = load %loop_count
+        %x_43:i32 = let %18
+        %20:bool = lt %x_43, 100i
+        if %20 [t: $B6, f: $B7] {  # if_2
+          $B6: {  # true
             exit_if  # if_2
           }
-          %b7 = block {  # false
+          $B7: {  # false
             exit_loop  # loop_1
           }
         }
-        if %x_36 [t: %b8] {  # if_3
-          %b8 = block {  # true
+        if %x_36 [t: $B8] {  # if_3
+          $B8: {  # true
             exit_loop  # loop_1
           }
         }
-        if %x_36 [t: %b9, f: %b10] {  # if_4
-          %b9 = block {  # true
+        if %x_36 [t: $B9, f: $B10] {  # if_4
+          $B9: {  # true
             store %x_GLF_color, vec4<f32>(1.0f)
             exit_if  # if_4
           }
-          %b10 = block {  # false
-            if %x_41 [t: %b11] {  # if_5
-              %b11 = block {  # true
+          $B10: {  # false
+            if %x_41 [t: $B11] {  # if_5
+              $B11: {  # true
                 ret
               }
             }
             exit_if  # if_4
           }
         }
-        if %x_36 [t: %b12, f: %b13] {  # if_6
-          %b12 = block {  # true
+        if %x_36 [t: $B12, f: $B13] {  # if_6
+          $B12: {  # true
             store %x_GLF_color, vec4<f32>(1.0f)
             exit_if  # if_6
           }
-          %b13 = block {  # false
+          $B13: {  # false
             store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
             exit_if  # if_6
           }
         }
-        if %x_36 [t: %b14] {  # if_7
-          %b14 = block {  # true
+        if %x_36 [t: $B14] {  # if_7
+          $B14: {  # true
             ret
           }
         }
-        if %x_41 [t: %b15] {  # if_8
-          %b15 = block {  # true
-            loop [b: %b16, c: %b17] {  # loop_2
-              %b16 = block {  # body
-                %x_63:i32 = load %loop_count
-                %16:bool = lt %x_63, 100i
-                if %16 [t: %b18, f: %b19] {  # if_9
-                  %b18 = block {  # true
+        if %x_41 [t: $B15] {  # if_8
+          $B15: {  # true
+            loop [b: $B16, c: $B17] {  # loop_2
+              $B16: {  # body
+                %21:i32 = load %loop_count
+                %x_63:i32 = let %21
+                %23:bool = lt %x_63, 100i
+                if %23 [t: $B18, f: $B19] {  # if_9
+                  $B18: {  # true
                     exit_if  # if_9
                   }
-                  %b19 = block {  # false
+                  $B19: {  # false
                     exit_loop  # loop_2
                   }
                 }
-                continue %b17
+                continue  # -> $B17
               }
-              %b17 = block {  # continuing
-                %x_67:i32 = load %loop_count
-                %18:i32 = add %x_67, 1i
-                store %loop_count, %18
-                next_iteration %b16
+              $B17: {  # continuing
+                %24:i32 = load %loop_count
+                %x_67:i32 = let %24
+                %26:i32 = add %x_67, 1i
+                store %loop_count, %26
+                next_iteration  # -> $B16
               }
             }
             exit_if  # if_8
           }
         }
-        continue %b5
+        continue  # -> $B5
       }
-      %b5 = block {  # continuing
-        %x_69:i32 = load %loop_count
-        %20:i32 = add %x_69, 1i
-        store %loop_count, %20
-        next_iteration %b4
+      $B5: {  # continuing
+        %27:i32 = load %loop_count
+        %x_69:i32 = let %27
+        %29:i32 = add %x_69, 1i
+        store %loop_count, %29
+        next_iteration  # -> $B4
       }
     }
-    %x_71:i32 = load %loop_count
-    %22:bool = gte %x_71, 100i
-    if %22 [t: %b20, f: %b21] {  # if_10
-      %b20 = block {  # true
+    %30:i32 = load %loop_count
+    %x_71:i32 = let %30
+    %32:bool = gte %x_71, 100i
+    if %32 [t: $B20, f: $B21] {  # if_10
+      $B20: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_10
       }
-      %b21 = block {  # false
+      $B21: {  # false
         store %x_GLF_color, vec4<f32>(1.0f)
         exit_if  # if_10
       }
@@ -126,13 +136,13 @@
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b22 {
-  %b22 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B22: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %25:void = call %main_1
-    %26:vec4<f32> = load %x_GLF_color
-    %27:main_out = construct %26
-    ret %27
+    %35:void = call %main_1
+    %36:vec4<f32> = load %x_GLF_color
+    %37:main_out = construct %36
+    ret %37
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/for-condition-always-false/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/for-condition-always-false/0-opt.spvasm.expected.ir.msl
index 2e88a5f..bec01b25 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/for-condition-always-false/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/for-condition-always-false/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,59 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::LoadVectorElement
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(16) {
+  color_1:vec4<f32> @offset(0), @location(0)
+}
+
+$B1: {  # root
+  %color:ptr<private, vec4<f32>, read_write> = var
+}
+
+%drawShape_vf2_ = func(%pos:ptr<function, vec2<f32>, read_write>):vec3<f32> {
+  $B2: {
+    %c3:ptr<function, bool, read_write> = var
+    %x_35:ptr<function, bool, read_write> = var
+    %6:f32 = load_vector_element %pos, 1u
+    %7:bool = lt %6, 1.0f
+    %x_33:bool = let %7
+    store %c3, %x_33
+    store %x_35, %x_33
+    loop [b: $B3] {  # loop_1
+      $B3: {  # body
+        %9:bool = load %x_35
+        if %9 [t: $B4, f: $B5] {  # if_1
+          $B4: {  # true
+            exit_if  # if_1
+          }
+          $B5: {  # false
+            exit_loop  # loop_1
+          }
+        }
+        ret vec3<f32>(1.0f)
+      }
+    }
+    ret vec3<f32>(1.0f)
+  }
+}
+%main_1 = func():void {
+  $B6: {
+    %param:ptr<function, vec2<f32>, read_write> = var
+    store %param, vec2<f32>(1.0f)
+    %12:vec3<f32> = call %drawShape_vf2_, %param
+    %x_29:vec3<f32> = let %12
+    store %color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B7: {
+    %15:void = call %main_1
+    %16:vec4<f32> = load %color
+    %17:main_out = construct %16
+    ret %17
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/for-condition-always-false/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/for-condition-always-false/0-opt.wgsl.expected.ir.msl
index 2e88a5f..e6a1cb2 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/for-condition-always-false/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/for-condition-always-false/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,61 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::LoadVectorElement
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(16) {
+  color_1:vec4<f32> @offset(0), @location(0)
+}
+
+$B1: {  # root
+  %color:ptr<private, vec4<f32>, read_write> = var
+}
+
+%drawShape_vf2_ = func(%pos:ptr<function, vec2<f32>, read_write>):vec3<f32> {
+  $B2: {
+    %c3:ptr<function, bool, read_write> = var
+    %x_35_phi:ptr<function, bool, read_write> = var
+    %6:f32 = load_vector_element %pos, 1u
+    %x_32:f32 = let %6
+    %8:bool = lt %x_32, 1.0f
+    %x_33:bool = let %8
+    store %c3, %x_33
+    store %x_35_phi, %x_33
+    loop [b: $B3] {  # loop_1
+      $B3: {  # body
+        %10:bool = load %x_35_phi
+        %x_35:bool = let %10
+        if %x_35 [t: $B4, f: $B5] {  # if_1
+          $B4: {  # true
+            exit_if  # if_1
+          }
+          $B5: {  # false
+            exit_loop  # loop_1
+          }
+        }
+        ret vec3<f32>(1.0f)
+      }
+    }
+    ret vec3<f32>(1.0f)
+  }
+}
+%main_1 = func():void {
+  $B6: {
+    %param:ptr<function, vec2<f32>, read_write> = var
+    store %param, vec2<f32>(1.0f)
+    %14:vec3<f32> = call %drawShape_vf2_, %param
+    %x_29:vec3<f32> = let %14
+    store %color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B7: {
+    %17:void = call %main_1
+    %18:vec4<f32> = load %color
+    %19:main_out = construct %18
+    ret %19
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/for-loop-with-return/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/for-loop-with-return/0.spvasm.expected.ir.msl
index cdbf128..174db25 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/for-loop-with-return/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/for-loop-with-return/0.spvasm.expected.ir.msl
@@ -1,6 +1,46 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
+../../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
+}
+
+%mand_ = func():vec3<f32> {
+  $B2: {
+    loop [b: $B3] {  # loop_1
+      $B3: {  # body
+        ret vec3<f32>(1.0f)
+      }
+    }
+    unreachable
+  }
+}
+%main_1 = func():void {
+  $B4: {
+    %4:vec3<f32> = call %mand_
+    %x_17:vec3<f32> = let %4
+    loop [b: $B5] {  # loop_2
+      $B5: {  # body
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        ret
+      }
+    }
+    unreachable
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B6: {
+    %7:void = call %main_1
+    %8:vec4<f32> = load %x_GLF_color
+    %9:main_out = construct %8
+    ret %9
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/for-loop-with-return/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/for-loop-with-return/0.wgsl.expected.ir.msl
index cdbf128..174db25 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/for-loop-with-return/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/for-loop-with-return/0.wgsl.expected.ir.msl
@@ -1,6 +1,46 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
+../../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
+}
+
+%mand_ = func():vec3<f32> {
+  $B2: {
+    loop [b: $B3] {  # loop_1
+      $B3: {  # body
+        ret vec3<f32>(1.0f)
+      }
+    }
+    unreachable
+  }
+}
+%main_1 = func():void {
+  $B4: {
+    %4:vec3<f32> = call %mand_
+    %x_17:vec3<f32> = let %4
+    loop [b: $B5] {  # loop_2
+      $B5: {  # body
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        ret
+      }
+    }
+    unreachable
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B6: {
+    %7:void = call %main_1
+    %8:vec4<f32> = load %x_GLF_color
+    %9:main_out = construct %8
+    ret %9
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/for-with-ifs-and-return/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/for-with-ifs-and-return/0-opt.spvasm.expected.ir.msl
index efdd3b1..6cc6784 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/for-with-ifs-and-return/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/for-with-ifs-and-return/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,69 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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: {
+    %i:ptr<function, i32, read_write> = var
+    store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+    store %i, 1i
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %5:i32 = load %i
+        %6:bool = lt %5, 2i
+        if %6 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
+            exit_if  # if_1
+          }
+          $B6: {  # false
+            exit_loop  # loop_1
+          }
+        }
+        %7:f32 = load_vector_element %gl_FragCoord, 1u
+        %8:bool = lt %7, 0.0f
+        if %8 [t: $B7] {  # if_2
+          $B7: {  # true
+            %9:f32 = load_vector_element %gl_FragCoord, 0u
+            %10:bool = lt %9, 0.0f
+            if %10 [t: $B8] {  # if_3
+              $B8: {  # true
+                store %x_GLF_color, vec4<f32>(226.6959991455078125f, 1.0f, 1.0f, 1.0f)
+                exit_if  # if_3
+              }
+            }
+            continue  # -> $B4
+          }
+        }
+        ret
+      }
+      $B4: {  # continuing
+        %11:i32 = load %i
+        %12:i32 = add %11, 1i
+        store %i, %12
+        next_iteration  # -> $B3
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B9: {
+    store %gl_FragCoord, %gl_FragCoord_param
+    %15:void = call %main_1
+    %16:vec4<f32> = load %x_GLF_color
+    %17:main_out = construct %16
+    ret %17
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/for-with-ifs-and-return/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/for-with-ifs-and-return/0-opt.wgsl.expected.ir.msl
index efdd3b1..cc57c8e 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/for-with-ifs-and-return/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/for-with-ifs-and-return/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,73 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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: {
+    %i:ptr<function, i32, read_write> = var
+    store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+    store %i, 1i
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %5:i32 = load %i
+        %x_6:i32 = let %5
+        %7:bool = lt %x_6, 2i
+        if %7 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
+            exit_if  # if_1
+          }
+          $B6: {  # false
+            exit_loop  # loop_1
+          }
+        }
+        %8:f32 = load_vector_element %gl_FragCoord, 1u
+        %x_37:f32 = let %8
+        %10:bool = lt %x_37, 0.0f
+        if %10 [t: $B7] {  # if_2
+          $B7: {  # true
+            %11:f32 = load_vector_element %gl_FragCoord, 0u
+            %x_42:f32 = let %11
+            %13:bool = lt %x_42, 0.0f
+            if %13 [t: $B8] {  # if_3
+              $B8: {  # true
+                store %x_GLF_color, vec4<f32>(226.6959991455078125f, 1.0f, 1.0f, 1.0f)
+                exit_if  # if_3
+              }
+            }
+            continue  # -> $B4
+          }
+        }
+        ret
+      }
+      $B4: {  # continuing
+        %14:i32 = load %i
+        %x_7:i32 = let %14
+        %16:i32 = add %x_7, 1i
+        store %i, %16
+        next_iteration  # -> $B3
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B9: {
+    store %gl_FragCoord, %gl_FragCoord_param
+    %19:void = call %main_1
+    %20:vec4<f32> = load %x_GLF_color
+    %21:main_out = construct %20
+    ret %21
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/frag-coord-func-call-and-ifs/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/frag-coord-func-call-and-ifs/0-opt.spvasm.expected.ir.msl
index 9f99dd5..476e24a 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/frag-coord-func-call-and-ifs/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/frag-coord-func-call-and-ifs/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,14 +8,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_9:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %x_43:ptr<function, f32, read_write> = var
     %x_44:ptr<function, f32, read_write> = var
     %x_45:ptr<function, f32, read_write> = var
@@ -26,33 +26,35 @@
     %12:vec4<f32> = load %gl_FragCoord
     %13:vec2<f32> = swizzle %12, xy
     store %param, %13
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3] {  # loop_1
+      $B3: {  # body
         %14:f32 = load_vector_element %param, 1u
         %15:bool = lt %14, 50.0f
-        if %15 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %15 [t: $B4, f: $B5] {  # if_1
+          $B4: {  # true
             %16:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
             %17:f32 = load_vector_element %16, 1u
             store %x_44, %17
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B5: {  # false
             store %x_44, 0.0f
             exit_if  # if_1
           }
         }
-        %x_61:f32 = load %x_44
-        %19:f32 = load %x_44
-        store %x_43, %19
-        %20:f32 = load_vector_element %gl_FragCoord, 1u
-        %21:bool = lt %20, 50.0f
-        %x_65:f32 = select 0.0f, 1.0f, %21
+        %18:f32 = load %x_44
+        %x_61:f32 = let %18
+        %20:f32 = load %x_44
+        store %x_43, %20
+        %21:f32 = load_vector_element %gl_FragCoord, 1u
+        %22:bool = lt %21, 50.0f
+        %23:f32 = select 0.0f, 1.0f, %22
+        %x_65:f32 = let %23
         store %x_45, %x_65
-        %23:f32 = sub %x_61, %x_65
-        %24:bool = lt %23, 1.0f
-        if %24 [t: %b7] {  # if_2
-          %b7 = block {  # true
+        %25:f32 = sub %x_61, %x_65
+        %26:bool = lt %25, 1.0f
+        if %26 [t: $B6] {  # if_2
+          $B6: {  # true
             store %x_46, 0i
             exit_loop  # loop_1
           }
@@ -60,107 +62,109 @@
         store %x_46, 1i
         exit_loop  # loop_1
       }
-      %b4 = block {  # continuing
-        break_if true %b3
-      }
     }
-    %x_70:i32 = load %x_46
-    %26:i32 = load %x_46
-    store %zero, %26
-    %27:bool = eq %x_70, 1i
-    if %27 [t: %b8] {  # if_3
-      %b8 = block {  # true
+    %27:i32 = load %x_46
+    %x_70:i32 = let %27
+    %29:i32 = load %x_46
+    store %zero, %29
+    %30:bool = eq %x_70, 1i
+    if %30 [t: $B7] {  # if_3
+      $B7: {  # true
         ret
       }
     }
     store %x_GLF_color, vec4<f32>(0.0f, 1.0f, 1.0f, 1.0f)
-    %28:f32 = load_vector_element %gl_FragCoord, 0u
-    %29:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
-    %30:f32 = load_vector_element %29, 0u
-    %31:bool = gte %28, %30
-    if %31 [t: %b9] {  # if_4
-      %b9 = block {  # true
-        %32:f32 = load_vector_element %gl_FragCoord, 1u
-        %33:bool = gte %32, 0.0f
-        if %33 [t: %b10] {  # if_5
-          %b10 = block {  # true
-            %34:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
-            %35:f32 = load_vector_element %34, 1u
-            store_vector_element %x_GLF_color, 0u, %35
+    %31:f32 = load_vector_element %gl_FragCoord, 0u
+    %32:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
+    %33:f32 = load_vector_element %32, 0u
+    %34:bool = gte %31, %33
+    if %34 [t: $B8] {  # if_4
+      $B8: {  # true
+        %35:f32 = load_vector_element %gl_FragCoord, 1u
+        %36:bool = gte %35, 0.0f
+        if %36 [t: $B9] {  # if_5
+          $B9: {  # true
+            %37:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
+            %38:f32 = load_vector_element %37, 1u
+            store_vector_element %x_GLF_color, 0u, %38
             exit_if  # if_5
           }
         }
         exit_if  # if_4
       }
     }
-    %36:f32 = load_vector_element %gl_FragCoord, 1u
-    %37:bool = gte %36, 0.0f
-    if %37 [t: %b11] {  # if_6
-      %b11 = block {  # true
-        %38:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
-        %39:f32 = load_vector_element %38, 0u
-        store_vector_element %x_GLF_color, 1u, %39
+    %39:f32 = load_vector_element %gl_FragCoord, 1u
+    %40:bool = gte %39, 0.0f
+    if %40 [t: $B10] {  # if_6
+      $B10: {  # true
+        %41:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
+        %42:f32 = load_vector_element %41, 0u
+        store_vector_element %x_GLF_color, 1u, %42
         exit_if  # if_6
       }
     }
-    %40:vec4<f32> = load %gl_FragCoord
-    %x_98:vec2<f32> = swizzle %40, xy
-    %42:f32 = access %x_98, 0u
-    %43:f32 = access %x_98, 1u
-    %x_101:vec2<f32> = construct %42, %43
+    %43:vec4<f32> = load %gl_FragCoord
+    %44:vec2<f32> = swizzle %43, xy
+    %x_98:vec2<f32> = let %44
+    %46:f32 = access %x_98, 0u
+    %47:f32 = access %x_98, 1u
+    %48:vec2<f32> = construct %46, %47
+    %x_101:vec2<f32> = let %48
     store %temp, %x_101
-    %45:f32 = access %x_101, 1u
-    %46:bool = gte %45, 0.0f
-    if %46 [t: %b12] {  # if_7
-      %b12 = block {  # true
-        %47:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
-        %48:f32 = load_vector_element %47, 0u
-        store_vector_element %x_GLF_color, 2u, %48
+    %50:f32 = access %x_101, 1u
+    %51:bool = gte %50, 0.0f
+    if %51 [t: $B11] {  # if_7
+      $B11: {  # true
+        %52:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
+        %53:f32 = load_vector_element %52, 0u
+        store_vector_element %x_GLF_color, 2u, %53
         exit_if  # if_7
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b13 {
-  %b13 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B12: {
     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
+    %56:void = call %main_1
+    %57:vec4<f32> = load %x_GLF_color
+    %58:main_out = construct %57
+    ret %58
   }
 }
-%alwaysZero_vf2_ = func(%coord:ptr<function, vec2<f32>, read_write>):i32 -> %b14 {
-  %b14 = block {
+%alwaysZero_vf2_ = func(%coord:ptr<function, vec2<f32>, read_write>):i32 {
+  $B13: {
     %a:ptr<function, f32, read_write> = var
     %x_110:ptr<function, f32, read_write> = var
     %b:ptr<function, f32, read_write> = var
-    %59:f32 = load_vector_element %coord, 1u
-    %60:bool = lt %59, 50.0f
-    if %60 [t: %b15, f: %b16] {  # if_8
-      %b15 = block {  # true
-        %61:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
-        %62:f32 = load_vector_element %61, 1u
-        store %x_110, %62
+    %64:f32 = load_vector_element %coord, 1u
+    %65:bool = lt %64, 50.0f
+    if %65 [t: $B14, f: $B15] {  # if_8
+      $B14: {  # true
+        %66:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
+        %67:f32 = load_vector_element %66, 1u
+        store %x_110, %67
         exit_if  # if_8
       }
-      %b16 = block {  # false
+      $B15: {  # false
         store %x_110, 0.0f
         exit_if  # if_8
       }
     }
-    %x_119:f32 = load %x_110
-    %64:f32 = load %x_110
-    store %a, %64
-    %65:f32 = load_vector_element %gl_FragCoord, 1u
-    %66:bool = lt %65, 50.0f
-    %x_123:f32 = select 0.0f, 1.0f, %66
+    %68:f32 = load %x_110
+    %x_119:f32 = let %68
+    %70:f32 = load %x_110
+    store %a, %70
+    %71:f32 = load_vector_element %gl_FragCoord, 1u
+    %72:bool = lt %71, 50.0f
+    %73:f32 = select 0.0f, 1.0f, %72
+    %x_123:f32 = let %73
     store %b, %x_123
-    %68:f32 = sub %x_119, %x_123
-    %69:bool = lt %68, 1.0f
-    if %69 [t: %b17] {  # if_9
-      %b17 = block {  # true
+    %75:f32 = sub %x_119, %x_123
+    %76:bool = lt %75, 1.0f
+    if %76 [t: $B16] {  # if_9
+      $B16: {  # true
         ret 0i
       }
     }
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/frag-coord-func-call-and-ifs/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/frag-coord-func-call-and-ifs/0-opt.wgsl.expected.ir.msl
index cc45298..7874daf 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/frag-coord-func-call-and-ifs/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/frag-coord-func-call-and-ifs/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,14 +8,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_9:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %x_43:ptr<function, f32, read_write> = var
     %x_44:ptr<function, f32, read_write> = var
     %x_45:ptr<function, f32, read_write> = var
@@ -23,37 +23,43 @@
     %zero:ptr<function, i32, read_write> = var
     %param:ptr<function, vec2<f32>, read_write> = var
     %temp:ptr<function, vec2<f32>, read_write> = var
-    %x_47:vec4<f32> = load %gl_FragCoord
-    %13:f32 = access %x_47, 0u
-    %14:f32 = access %x_47, 1u
-    %15:vec2<f32> = construct %13, %14
-    store %param, %15
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_54:f32 = load_vector_element %param, 1u
-        %17:bool = lt %x_54, 50.0f
-        if %17 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
-            %18:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
-            %x_60:f32 = load_vector_element %18, 1u
+    %12:vec4<f32> = load %gl_FragCoord
+    %x_47:vec4<f32> = let %12
+    %14:f32 = access %x_47, 0u
+    %15:f32 = access %x_47, 1u
+    %16:vec2<f32> = construct %14, %15
+    store %param, %16
+    loop [b: $B3] {  # loop_1
+      $B3: {  # body
+        %17:f32 = load_vector_element %param, 1u
+        %x_54:f32 = let %17
+        %19:bool = lt %x_54, 50.0f
+        if %19 [t: $B4, f: $B5] {  # if_1
+          $B4: {  # true
+            %20:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
+            %21:f32 = load_vector_element %20, 1u
+            %x_60:f32 = let %21
             store %x_44, %x_60
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B5: {  # false
             store %x_44, 0.0f
             exit_if  # if_1
           }
         }
-        %x_61:f32 = load %x_44
+        %23:f32 = load %x_44
+        %x_61:f32 = let %23
         store %x_43, %x_61
-        %x_63:f32 = load_vector_element %gl_FragCoord, 1u
-        %22:bool = lt %x_63, 50.0f
-        %x_65:f32 = select 0.0f, 1.0f, %22
+        %25:f32 = load_vector_element %gl_FragCoord, 1u
+        %x_63:f32 = let %25
+        %27:bool = lt %x_63, 50.0f
+        %28:f32 = select 0.0f, 1.0f, %27
+        %x_65:f32 = let %28
         store %x_45, %x_65
-        %24:f32 = sub %x_61, %x_65
-        %25:bool = lt %24, 1.0f
-        if %25 [t: %b7] {  # if_2
-          %b7 = block {  # true
+        %30:f32 = sub %x_61, %x_65
+        %31:bool = lt %30, 1.0f
+        if %31 [t: $B6] {  # if_2
+          $B6: {  # true
             store %x_46, 0i
             exit_loop  # loop_1
           }
@@ -61,31 +67,33 @@
         store %x_46, 1i
         exit_loop  # loop_1
       }
-      %b4 = block {  # continuing
-        break_if true %b3
-      }
     }
-    %x_70:i32 = load %x_46
+    %32:i32 = load %x_46
+    %x_70:i32 = let %32
     store %zero, %x_70
-    %27:bool = eq %x_70, 1i
-    if %27 [t: %b8] {  # if_3
-      %b8 = block {  # true
+    %34:bool = eq %x_70, 1i
+    if %34 [t: $B7] {  # if_3
+      $B7: {  # true
         ret
       }
     }
     store %x_GLF_color, vec4<f32>(0.0f, 1.0f, 1.0f, 1.0f)
-    %x_75:f32 = load_vector_element %gl_FragCoord, 0u
-    %29:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
-    %x_77:f32 = load_vector_element %29, 0u
-    %31:bool = gte %x_75, %x_77
-    if %31 [t: %b9] {  # if_4
-      %b9 = block {  # true
-        %x_82:f32 = load_vector_element %gl_FragCoord, 1u
-        %33:bool = gte %x_82, 0.0f
-        if %33 [t: %b10] {  # if_5
-          %b10 = block {  # true
-            %34:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
-            %x_87:f32 = load_vector_element %34, 1u
+    %35:f32 = load_vector_element %gl_FragCoord, 0u
+    %x_75:f32 = let %35
+    %37:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
+    %38:f32 = load_vector_element %37, 0u
+    %x_77:f32 = let %38
+    %40:bool = gte %x_75, %x_77
+    if %40 [t: $B8] {  # if_4
+      $B8: {  # true
+        %41:f32 = load_vector_element %gl_FragCoord, 1u
+        %x_82:f32 = let %41
+        %43:bool = gte %x_82, 0.0f
+        if %43 [t: $B9] {  # if_5
+          $B9: {  # true
+            %44:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
+            %45:f32 = load_vector_element %44, 1u
+            %x_87:f32 = let %45
             store_vector_element %x_GLF_color, 0u, %x_87
             exit_if  # if_5
           }
@@ -93,30 +101,36 @@
         exit_if  # if_4
       }
     }
-    %x_90:f32 = load_vector_element %gl_FragCoord, 1u
-    %37:bool = gte %x_90, 0.0f
-    if %37 [t: %b11] {  # if_6
-      %b11 = block {  # true
-        %38:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
-        %x_95:f32 = load_vector_element %38, 0u
+    %47:f32 = load_vector_element %gl_FragCoord, 1u
+    %x_90:f32 = let %47
+    %49:bool = gte %x_90, 0.0f
+    if %49 [t: $B10] {  # if_6
+      $B10: {  # true
+        %50:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
+        %51:f32 = load_vector_element %50, 0u
+        %x_95:f32 = let %51
         store_vector_element %x_GLF_color, 1u, %x_95
         exit_if  # if_6
       }
     }
-    %x_97:vec4<f32> = load %gl_FragCoord
-    %41:f32 = access %x_97, 0u
-    %42:f32 = access %x_97, 1u
-    %x_98:vec2<f32> = construct %41, %42
-    %44:f32 = access %x_98, 0u
-    %45:f32 = access %x_98, 1u
-    %x_101:vec2<f32> = construct %44, %45
+    %53:vec4<f32> = load %gl_FragCoord
+    %x_97:vec4<f32> = let %53
+    %55:f32 = access %x_97, 0u
+    %56:f32 = access %x_97, 1u
+    %57:vec2<f32> = construct %55, %56
+    %x_98:vec2<f32> = let %57
+    %59:f32 = access %x_98, 0u
+    %60:f32 = access %x_98, 1u
+    %61:vec2<f32> = construct %59, %60
+    %x_101:vec2<f32> = let %61
     store %temp, %x_101
-    %47:f32 = access %x_101, 1u
-    %48:bool = gte %47, 0.0f
-    if %48 [t: %b12] {  # if_7
-      %b12 = block {  # true
-        %49:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
-        %x_107:f32 = load_vector_element %49, 0u
+    %63:f32 = access %x_101, 1u
+    %64:bool = gte %63, 0.0f
+    if %64 [t: $B11] {  # if_7
+      $B11: {  # true
+        %65:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
+        %66:f32 = load_vector_element %65, 0u
+        %x_107:f32 = let %66
         store_vector_element %x_GLF_color, 2u, %x_107
         exit_if  # if_7
       }
@@ -124,44 +138,49 @@
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b13 {
-  %b13 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B12: {
     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
+    %70:void = call %main_1
+    %71:vec4<f32> = load %x_GLF_color
+    %72:main_out = construct %71
+    ret %72
   }
 }
-%alwaysZero_vf2_ = func(%coord:ptr<function, vec2<f32>, read_write>):i32 -> %b14 {
-  %b14 = block {
+%alwaysZero_vf2_ = func(%coord:ptr<function, vec2<f32>, read_write>):i32 {
+  $B13: {
     %a:ptr<function, f32, read_write> = var
     %x_110:ptr<function, f32, read_write> = var
     %b:ptr<function, f32, read_write> = var
-    %x_112:f32 = load_vector_element %coord, 1u
-    %62:bool = lt %x_112, 50.0f
-    if %62 [t: %b15, f: %b16] {  # if_8
-      %b15 = block {  # true
-        %63:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
-        %x_118:f32 = load_vector_element %63, 1u
+    %78:f32 = load_vector_element %coord, 1u
+    %x_112:f32 = let %78
+    %80:bool = lt %x_112, 50.0f
+    if %80 [t: $B14, f: $B15] {  # if_8
+      $B14: {  # true
+        %81:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
+        %82:f32 = load_vector_element %81, 1u
+        %x_118:f32 = let %82
         store %x_110, %x_118
         exit_if  # if_8
       }
-      %b16 = block {  # false
+      $B15: {  # false
         store %x_110, 0.0f
         exit_if  # if_8
       }
     }
-    %x_119:f32 = load %x_110
+    %84:f32 = load %x_110
+    %x_119:f32 = let %84
     store %a, %x_119
-    %x_121:f32 = load_vector_element %gl_FragCoord, 1u
-    %67:bool = lt %x_121, 50.0f
-    %x_123:f32 = select 0.0f, 1.0f, %67
+    %86:f32 = load_vector_element %gl_FragCoord, 1u
+    %x_121:f32 = let %86
+    %88:bool = lt %x_121, 50.0f
+    %89:f32 = select 0.0f, 1.0f, %88
+    %x_123:f32 = let %89
     store %b, %x_123
-    %69:f32 = sub %x_119, %x_123
-    %70:bool = lt %69, 1.0f
-    if %70 [t: %b17] {  # if_9
-      %b17 = block {  # true
+    %91:f32 = sub %x_119, %x_123
+    %92:bool = lt %91, 1.0f
+    if %92 [t: $B16] {  # if_9
+      $B16: {  # true
         ret 0i
       }
     }
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/function-with-uniform-return/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/function-with-uniform-return/0-opt.spvasm.expected.ir.msl
index c8c425a..93133c8 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/function-with-uniform-return/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/function-with-uniform-return/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,89 +8,93 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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
 }
 
-%fx_ = func():f32 -> %b2 {
-  %b2 = block {
+%fx_ = func():f32 {
+  $B2: {
     %5:f32 = load_vector_element %gl_FragCoord, 1u
     %6:bool = gte %5, 0.0f
-    if %6 [t: %b3] {  # if_1
-      %b3 = block {  # true
+    if %6 [t: $B3] {  # if_1
+      $B3: {  # true
         %7:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-        %x_55:f32 = load_vector_element %7, 1u
+        %8:f32 = load_vector_element %7, 1u
+        %x_55:f32 = let %8
         ret %x_55
       }
     }
-    loop [b: %b4, c: %b5] {  # loop_1
-      %b4 = block {  # body
-        if true [t: %b6, f: %b7] {  # if_2
-          %b6 = block {  # true
+    loop [b: $B4, c: $B5] {  # loop_1
+      $B4: {  # body
+        if true [t: $B6, f: $B7] {  # if_2
+          $B6: {  # true
             exit_if  # if_2
           }
-          %b7 = block {  # false
+          $B7: {  # false
             exit_loop  # loop_1
           }
         }
         store %x_GLF_color, vec4<f32>(1.0f)
-        continue %b5
+        continue  # -> $B5
       }
-      %b5 = block {  # continuing
-        next_iteration %b4
+      $B5: {  # continuing
+        next_iteration  # -> $B4
       }
     }
     ret 0.0f
   }
 }
-%main_1 = func():void -> %b8 {
-  %b8 = block {
+%main_1 = func():void {
+  $B8: {
     %x2:ptr<function, f32, read_write> = var
     %B:ptr<function, f32, read_write> = var
     %k0:ptr<function, f32, read_write> = var
     store %x2, 1.0f
     store %B, 1.0f
-    %x_34:f32 = call %fx_
-    %14:vec4<f32> = construct %x_34, 0.0f, 0.0f, 1.0f
-    store %x_GLF_color, %14
-    loop [b: %b9, c: %b10] {  # loop_2
-      %b9 = block {  # body
-        %15:f32 = load %x2
-        %16:bool = gt %15, 2.0f
-        if %16 [t: %b11, f: %b12] {  # if_3
-          %b11 = block {  # true
+    %14:f32 = call %fx_
+    %x_34:f32 = let %14
+    %16:vec4<f32> = construct %x_34, 0.0f, 0.0f, 1.0f
+    store %x_GLF_color, %16
+    loop [b: $B9, c: $B10] {  # loop_2
+      $B9: {  # body
+        %17:f32 = load %x2
+        %18:bool = gt %17, 2.0f
+        if %18 [t: $B11, f: $B12] {  # if_3
+          $B11: {  # true
             exit_if  # if_3
           }
-          %b12 = block {  # false
+          $B12: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_43:f32 = call %fx_
-        %x_44:f32 = call %fx_
-        %19:f32 = sub %x_43, %x_44
-        store %k0, %19
-        %20:f32 = load %k0
-        store %B, %20
-        %21:f32 = load %B
-        store %x2, %21
-        continue %b10
+        %19:f32 = call %fx_
+        %x_43:f32 = let %19
+        %21:f32 = call %fx_
+        %x_44:f32 = let %21
+        %23:f32 = sub %x_43, %x_44
+        store %k0, %23
+        %24:f32 = load %k0
+        store %B, %24
+        %25:f32 = load %B
+        store %x2, %25
+        continue  # -> $B10
       }
-      %b10 = block {  # continuing
-        next_iteration %b9
+      $B10: {  # continuing
+        next_iteration  # -> $B9
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b13 {
-  %b13 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B13: {
     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
+    %28:void = call %main_1
+    %29:vec4<f32> = load %x_GLF_color
+    %30:main_out = construct %29
+    ret %30
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/function-with-uniform-return/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/function-with-uniform-return/0-opt.wgsl.expected.ir.msl
index 134c58b..ac5c80b 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/function-with-uniform-return/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/function-with-uniform-return/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,89 +8,97 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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
 }
 
-%fx_ = func():f32 -> %b2 {
-  %b2 = block {
-    %x_50:f32 = load_vector_element %gl_FragCoord, 1u
-    %6:bool = gte %x_50, 0.0f
-    if %6 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %7:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-        %x_55:f32 = load_vector_element %7, 1u
+%fx_ = func():f32 {
+  $B2: {
+    %5:f32 = load_vector_element %gl_FragCoord, 1u
+    %x_50:f32 = let %5
+    %7:bool = gte %x_50, 0.0f
+    if %7 [t: $B3] {  # if_1
+      $B3: {  # true
+        %8:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
+        %9:f32 = load_vector_element %8, 1u
+        %x_55:f32 = let %9
         ret %x_55
       }
     }
-    loop [b: %b4, c: %b5] {  # loop_1
-      %b4 = block {  # body
-        if true [t: %b6, f: %b7] {  # if_2
-          %b6 = block {  # true
+    loop [b: $B4, c: $B5] {  # loop_1
+      $B4: {  # body
+        if true [t: $B6, f: $B7] {  # if_2
+          $B6: {  # true
             exit_if  # if_2
           }
-          %b7 = block {  # false
+          $B7: {  # false
             exit_loop  # loop_1
           }
         }
         store %x_GLF_color, vec4<f32>(1.0f)
-        continue %b5
+        continue  # -> $B5
       }
-      %b5 = block {  # continuing
-        next_iteration %b4
+      $B5: {  # continuing
+        next_iteration  # -> $B4
       }
     }
     ret 0.0f
   }
 }
-%main_1 = func():void -> %b8 {
-  %b8 = block {
+%main_1 = func():void {
+  $B8: {
     %x2:ptr<function, f32, read_write> = var
     %B:ptr<function, f32, read_write> = var
     %k0:ptr<function, f32, read_write> = var
     store %x2, 1.0f
     store %B, 1.0f
-    %x_34:f32 = call %fx_
-    %14:vec4<f32> = construct %x_34, 0.0f, 0.0f, 1.0f
-    store %x_GLF_color, %14
-    loop [b: %b9, c: %b10] {  # loop_2
-      %b9 = block {  # body
-        %x_40:f32 = load %x2
-        %16:bool = gt %x_40, 2.0f
-        if %16 [t: %b11, f: %b12] {  # if_3
-          %b11 = block {  # true
+    %15:f32 = call %fx_
+    %x_34:f32 = let %15
+    %17:vec4<f32> = construct %x_34, 0.0f, 0.0f, 1.0f
+    store %x_GLF_color, %17
+    loop [b: $B9, c: $B10] {  # loop_2
+      $B9: {  # body
+        %18:f32 = load %x2
+        %x_40:f32 = let %18
+        %20:bool = gt %x_40, 2.0f
+        if %20 [t: $B11, f: $B12] {  # if_3
+          $B11: {  # true
             exit_if  # if_3
           }
-          %b12 = block {  # false
+          $B12: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_43:f32 = call %fx_
-        %x_44:f32 = call %fx_
-        %19:f32 = sub %x_43, %x_44
-        store %k0, %19
-        %x_46:f32 = load %k0
+        %21:f32 = call %fx_
+        %x_43:f32 = let %21
+        %23:f32 = call %fx_
+        %x_44:f32 = let %23
+        %25:f32 = sub %x_43, %x_44
+        store %k0, %25
+        %26:f32 = load %k0
+        %x_46:f32 = let %26
         store %B, %x_46
-        %x_47:f32 = load %B
+        %28:f32 = load %B
+        %x_47:f32 = let %28
         store %x2, %x_47
-        continue %b10
+        continue  # -> $B10
       }
-      %b10 = block {  # continuing
-        next_iteration %b9
+      $B10: {  # continuing
+        next_iteration  # -> $B9
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b13 {
-  %b13 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B13: {
     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
+    %32:void = call %main_1
+    %33:vec4<f32> = load %x_GLF_color
+    %34:main_out = construct %33
+    ret %34
   }
 }
 
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
index 07862d1..d7e5bf3 100644
--- 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
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:f32 @offset(0)
 }
 
@@ -8,13 +8,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%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
@@ -31,8 +31,8 @@
     store %i_1, 0i
     store %x_24, 0i
     store %x_23, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    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
@@ -41,18 +41,18 @@
         %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 = block {  # true
+        if %23 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
         store %x_68, false
         store %x_76, false
-        loop [b: %b7, c: %b8] {  # loop_2
-          %b7 = block {  # body
+        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
@@ -60,143 +60,142 @@
             %27:bool = load %x_76
             store %x_81, %27
             store %x_32, 0i
-            loop [b: %b9, c: %b10] {  # loop_3
-              %b9 = block {  # body
+            loop [b: $B8] {  # loop_3
+              $B8: {  # body
                 %28:ptr<uniform, f32, read> = access %x_8, 0u
-                %x_86:f32 = load %28
+                %29:f32 = load %28
+                %x_86:f32 = let %29
                 store %x_33, 0i
-                %30:bool = load %x_81
-                store %x_90, %30
-                %31:i32 = load %x_32
-                %32:i32 = convert %x_86
-                %33:bool = lt %31, %32
-                if %33 [t: %b11, f: %b12] {  # if_2
-                  %b11 = block {  # true
+                %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
                   }
-                  %b12 = block {  # false
+                  $B10: {  # false
                     exit_loop  # loop_3
                   }
                 }
                 store %x_68, true
-                %34:i32 = load %x_32
-                store %x_29, %34
-                %35:i32 = load %x_32
-                store %x_33, %35
+                %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
               }
-              %b10 = block {  # continuing
-                store %x_81, false
-                store %x_32, 0i
-                next_iteration %b9
-              }
             }
-            %36:i32 = load %x_33
-            store %x_34, %36
-            %37:bool = load %x_90
-            if %37 [t: %b13] {  # if_3
-              %b13 = block {  # true
+            %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
-            %38:i32 = load %x_92
-            store %x_29, %38
-            %39:i32 = load %x_92
-            store %x_34, %39
+            %41:i32 = load %x_92
+            store %x_29, %41
+            %42:i32 = load %x_92
+            store %x_34, %42
             exit_loop  # loop_2
           }
-          %b8 = block {  # continuing
-            store %x_76, false
-            next_iteration %b7
-          }
         }
-        %40:i32 = load %x_34
-        store %x_31, %40
-        %x_93:i32 = load %x_31
-        %x_21:array<i32, 2> = load %localNumbers
+        %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
-        %44:ptr<function, i32, read_write> = access %x_22_1, 1u
-        store %44, %x_93
-        %x_22:array<i32, 2> = load %x_22_1
-        %46:array<i32, 2> = load %x_22_1
-        store %localNumbers, %46
-        %47:ptr<function, i32, read_write> = access %globalNumbers, 0i
-        store %47, 0i
-        %x_13:i32 = access %x_22, 1u
+        %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: %b14, c: %b15] {  # loop_4
-          %b14 = block {  # body
+        loop [b: $B12, c: $B13] {  # loop_4
+          $B12: {  # body
             %x_19:ptr<function, i32, read_write> = var
-            %50:i32 = load %x_25
-            %51:bool = lte %50, %x_13
-            if %51 [t: %b16, f: %b17] {  # if_4
-              %b16 = block {  # true
+            %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
               }
-              %b17 = block {  # false
+              $B15: {  # false
                 exit_loop  # loop_4
               }
             }
             %x_102_save:i32 = let %x_13
-            %53:ptr<function, i32, read_write> = access %globalNumbers, %x_13
-            %54:i32 = load %53
-            %55:bool = lte %54, 1i
-            if %55 [t: %b18] {  # if_5
-              %b18 = block {  # true
-                %56:ptr<function, i32, read_write> = access %globalNumbers, %x_102_save
-                store %56, 1i
+            %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 %b15
+            continue  # -> $B13
           }
-          %b15 = block {  # continuing
-            %57:i32 = load %x_25
-            %58:i32 = add %57, 1i
-            store %x_19, %58
-            %59:i32 = load %x_19
-            store %x_17, %59
-            %60:i32 = load %x_19
-            store %x_25, %60
-            next_iteration %b14
+          $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
           }
         }
-        %61:i32 = load %x_24
-        %62:ptr<uniform, f32, read> = access %x_8, 0u
-        %63:f32 = load %62
-        %64:i32 = convert %63
-        %65:i32 = sub %64, 1i
-        %66:ptr<function, i32, read_write> = access %globalNumbers, %65
-        %67:i32 = load %66
-        %x_15:i32 = add %61, %67
+        %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
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %69:i32 = load %x_23
-        %70:i32 = add %69, 1i
-        store %x_16, %70
-        %71:i32 = load %x_16
-        store %i_1, %71
+      $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
-        %72:i32 = load %x_16
-        store %x_23, %72
-        next_iteration %b3
+        %81:i32 = load %x_16
+        store %x_23, %81
+        next_iteration  # -> $B3
       }
     }
-    %73:i32 = load %x_24
-    %74:bool = eq %73, 4i
-    if %74 [t: %b19, f: %b20] {  # if_6
-      %b19 = block {  # true
+    %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
       }
-      %b20 = block {  # false
+      $B18: {  # false
         store %x_GLF_color, vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_6
       }
@@ -204,16 +203,16 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b21 {
-  %b21 = block {
-    %76:void = call %main_1
-    %77:vec4<f32> = load %x_GLF_color
-    %78:main_out = construct %77
-    ret %78
+%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 -> %b22 {
-  %b22 = block {
+%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
@@ -222,70 +221,73 @@
     %x_134:ptr<function, i32, read_write> = var
     %x_27:ptr<function, i32, read_write> = var
     store %x_118, false
-    loop [b: %b23, c: %b24] {  # loop_5
-      %b23 = block {  # body
+    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
-        %90:bool = load %x_118
-        store %x_123, %90
+        %99:bool = load %x_118
+        store %x_123, %99
         store %x_28, 0i
-        loop [b: %b25, c: %b26] {  # loop_6
-          %b25 = block {  # body
-            %91:ptr<uniform, f32, read> = access %x_8, 0u
-            %x_128:f32 = load %91
+        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
-            %93:bool = load %x_123
-            store %x_132, %93
-            %94:i32 = load %x_28
-            %95:i32 = convert %x_128
-            %96:bool = lt %94, %95
-            if %96 [t: %b27, f: %b28] {  # if_7
-              %b27 = block {  # true
+            %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
               }
-              %b28 = block {  # false
+              $B24: {  # false
                 exit_loop  # loop_6
               }
             }
             store %x_116, true
-            %97:i32 = load %x_28
-            store %x_20, %97
-            %98:i32 = load %x_28
-            store %x_26, %98
+            %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
           }
-          %b26 = block {  # continuing
-            store %x_123, false
-            store %x_28, 0i
-            next_iteration %b25
-          }
         }
-        %99:i32 = load %x_26
-        store %x_27, %99
-        %100:bool = load %x_132
-        if %100 [t: %b29] {  # if_8
-          %b29 = block {  # true
+        %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
-        %101:i32 = load %x_134
-        store %x_20, %101
-        %102:i32 = load %x_134
-        store %x_27, %102
+        %112:i32 = load %x_134
+        store %x_20, %112
+        %113:i32 = load %x_134
+        store %x_27, %113
         exit_loop  # loop_5
       }
-      %b24 = block {  # continuing
-        store %x_118, false
-        next_iteration %b23
-      }
     }
-    %103:i32 = load %x_27
-    ret %103
+    %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
   }
 }
 
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
index 101a08d..e75a419 100644
--- 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
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:f32 @offset(0)
 }
 
@@ -8,13 +8,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%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
@@ -32,8 +32,8 @@
     store %i_1, 0i
     store %x_24_phi, 0i
     store %x_23_phi, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    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
@@ -41,165 +41,174 @@
         %x_25_phi:ptr<function, i32, read_write> = var
         %22:i32 = load %x_24_phi
         store %x_24, %22
-        %x_23:i32 = load %x_23_phi
-        %24:bool = lt %x_23, 4i
-        if %24 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %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 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
         store %x_68, false
         store %x_76_phi, false
-        loop [b: %b7, c: %b8] {  # loop_2
-          %b7 = block {  # body
+        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
-            %x_76:bool = load %x_76_phi
+            %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: %b9, c: %b10] {  # loop_3
-              %b9 = block {  # body
-                %32:bool = load %x_81_phi
-                store %x_81, %32
-                %33:i32 = load %x_32_phi
-                store %x_32, %33
-                %34:ptr<uniform, f32, read> = access %x_8, 0u
-                %x_86:f32 = load %34
+            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
-                %36:bool = load %x_81
-                store %x_90_phi, %36
-                %37:i32 = load %x_32
-                %38:i32 = convert %x_86
-                %39:bool = lt %37, %38
-                if %39 [t: %b11, f: %b12] {  # if_2
-                  %b11 = block {  # true
+                %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
                   }
-                  %b12 = block {  # false
+                  $B10: {  # false
                     exit_loop  # loop_3
                   }
                 }
                 store %x_68, true
-                %40:i32 = load %x_32
-                store %x_29, %40
-                %41:i32 = load %x_32
-                store %x_33_phi, %41
+                %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
               }
-              %b10 = block {  # continuing
-                store %x_81_phi, false
-                store %x_32_phi, 0i
-                next_iteration %b9
-              }
             }
-            %42:i32 = load %x_33_phi
-            store %x_33, %42
-            %x_90:bool = load %x_90_phi
-            %44:i32 = load %x_33
-            store %x_34_phi, %44
-            if %x_90 [t: %b13] {  # if_3
-              %b13 = block {  # true
+            %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
-            %45:i32 = load %x_92
-            store %x_29, %45
-            %46:i32 = load %x_92
-            store %x_34_phi, %46
+            %51:i32 = load %x_92
+            store %x_29, %51
+            %52:i32 = load %x_92
+            store %x_34_phi, %52
             exit_loop  # loop_2
           }
-          %b8 = block {  # continuing
-            store %x_76_phi, false
-            next_iteration %b7
-          }
         }
-        %x_34:i32 = load %x_34_phi
+        %53:i32 = load %x_34_phi
+        %x_34:i32 = let %53
         store %x_31, %x_34
-        %x_93:i32 = load %x_31
-        %x_21:array<i32, 2> = load %localNumbers
+        %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
-        %51:ptr<function, i32, read_write> = access %x_22_1, 1u
-        store %51, %x_93
-        %x_22:array<i32, 2> = load %x_22_1
+        %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
-        %53:ptr<function, i32, read_write> = access %globalNumbers, 0i
-        store %53, 0i
-        %x_13:i32 = access %x_22, 1u
+        %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: %b14, c: %b15] {  # loop_4
-          %b14 = block {  # body
-            %x_25:i32 = load %x_25_phi
-            %56:bool = lte %x_25, %x_13
-            if %56 [t: %b16, f: %b17] {  # if_4
-              %b16 = block {  # true
+        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
               }
-              %b17 = block {  # false
+              $B15: {  # false
                 exit_loop  # loop_4
               }
             }
             %x_102_save:i32 = let %x_13
-            %58:ptr<function, i32, read_write> = access %globalNumbers, %x_102_save
-            %x_18:i32 = load %58
-            %60:bool = lte %x_18, 1i
-            if %60 [t: %b18] {  # if_5
-              %b18 = block {  # true
-                %61:ptr<function, i32, read_write> = access %globalNumbers, %x_102_save
-                store %61, 1i
+            %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 %b15
+            continue  # -> $B13
           }
-          %b15 = block {  # continuing
-            %x_19:i32 = add %x_25, 1i
+          $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 %b14
+            next_iteration  # -> $B12
           }
         }
-        %63:ptr<uniform, f32, read> = access %x_8, 0u
-        %x_107:f32 = load %63
-        %65:i32 = convert %x_107
-        %66:i32 = sub %65, 1i
-        %67:ptr<function, i32, read_write> = access %globalNumbers, %66
-        %x_14:i32 = load %67
-        %69:i32 = load %x_24
-        %70:i32 = bitcast %x_14
-        %71:i32 = add %69, %70
-        %x_15:i32 = bitcast %71
+        %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
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_16:i32 = add %x_23, 1i
+      $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
+        next_iteration  # -> $B3
       }
     }
-    %74:i32 = load %x_24
-    %75:bool = eq %74, 4i
-    if %75 [t: %b19, f: %b20] {  # if_6
-      %b19 = block {  # true
+    %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
       }
-      %b20 = block {  # false
+      $B18: {  # false
         store %x_GLF_color, vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_6
       }
@@ -207,16 +216,16 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b21 {
-  %b21 = block {
-    %77:void = call %main_1
-    %78:vec4<f32> = load %x_GLF_color
-    %79:main_out = construct %78
-    ret %79
+%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 -> %b22 {
-  %b22 = block {
+%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
@@ -225,81 +234,87 @@
     %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: %b23, c: %b24] {  # loop_5
-      %b23 = block {  # body
+    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
-        %x_118:bool = load %x_118_phi
+        %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: %b25, c: %b26] {  # loop_6
-          %b25 = block {  # body
-            %95:bool = load %x_123_phi
-            store %x_123, %95
-            %96:i32 = load %x_28_phi
-            store %x_28, %96
-            %97:ptr<uniform, f32, read> = access %x_8, 0u
-            %x_128:f32 = load %97
+        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
-            %99:bool = load %x_123
-            store %x_132_phi, %99
-            %100:i32 = load %x_28
-            %101:i32 = convert %x_128
-            %102:bool = lt %100, %101
-            if %102 [t: %b27, f: %b28] {  # if_7
-              %b27 = block {  # true
+            %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
               }
-              %b28 = block {  # false
+              $B24: {  # false
                 exit_loop  # loop_6
               }
             }
             store %x_116, true
-            %103:i32 = load %x_28
-            store %x_20, %103
-            %104:i32 = load %x_28
-            store %x_26_phi, %104
+            %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
           }
-          %b26 = block {  # continuing
-            store %x_123_phi, false
-            store %x_28_phi, 0i
-            next_iteration %b25
-          }
         }
-        %105:i32 = load %x_26_phi
-        store %x_26, %105
-        %x_132:bool = load %x_132_phi
-        %107:i32 = load %x_26
-        store %x_27_phi, %107
-        if %x_132 [t: %b29] {  # if_8
-          %b29 = block {  # true
+        %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
-        %108:i32 = load %x_134
-        store %x_20, %108
-        %109:i32 = load %x_134
-        store %x_27_phi, %109
+        %131:i32 = load %x_134
+        store %x_20, %131
+        %132:i32 = load %x_134
+        store %x_27_phi, %132
         exit_loop  # loop_5
       }
-      %b24 = block {  # continuing
-        store %x_118_phi, false
-        next_iteration %b23
-      }
     }
-    %x_27:i32 = load %x_27_phi
+    %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
 ********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/increment-value-in-nested-for-loop/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/increment-value-in-nested-for-loop/0.spvasm.expected.ir.msl
index 3617ec2..9bad63a 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/increment-value-in-nested-for-loop/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/increment-value-in-nested-for-loop/0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,16 +8,16 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+%main_1 = func():void {
+  $B2: {
+    loop [b: $B3] {  # loop_1
+      $B3: {  # body
         %x_45:ptr<function, bool, read_write> = var
         %x_48:ptr<function, i32, read_write> = var
         %x_50:ptr<function, i32, read_write> = var
@@ -32,14 +32,16 @@
         %x_116:ptr<function, i32, read_write> = var
         %x_161:ptr<function, i32, read_write> = var
         %18:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-        %x_40:f32 = load_vector_element %18, 0u
-        %x_41:bool = lt %x_40, -1.0f
+        %19:f32 = load_vector_element %18, 0u
+        %x_40:f32 = let %19
+        %21:bool = lt %x_40, -1.0f
+        %x_41:bool = let %21
         store %x_45, false
         store %x_48, 0i
         store %x_50, 0i
         store %x_52, 0i
-        loop [b: %b5, c: %b6] {  # loop_2
-          %b5 = block {  # body
+        loop [b: $B4, c: $B5] {  # loop_2
+          $B4: {  # body
             %x_62:ptr<function, i32, read_write> = var
             %x_65:ptr<function, i32, read_write> = var
             %x_67:ptr<function, i32, read_write> = var
@@ -47,115 +49,117 @@
             %x_63:ptr<function, i32, read_write> = var
             %x_51:ptr<function, i32, read_write> = var
             %x_53:ptr<function, i32, read_write> = var
-            %x_55:f32 = load_vector_element %gl_FragCoord, 1u
-            %29:i32 = load %x_48
-            store %x_111, %29
-            %30:bool = load %x_45
-            store %x_112, %30
-            %31:i32 = load %x_52
-            %32:bool = gt %x_55, -1.0f
-            %33:i32 = select 100i, 10i, %32
-            %34:bool = lt %31, %33
-            if %34 [t: %b7, f: %b8] {  # if_1
-              %b7 = block {  # true
+            %30:f32 = load_vector_element %gl_FragCoord, 1u
+            %x_55:f32 = let %30
+            %32:i32 = load %x_48
+            store %x_111, %32
+            %33:bool = load %x_45
+            store %x_112, %33
+            %34:i32 = load %x_52
+            %35:i32 = let %34
+            %36:bool = gt %x_55, -1.0f
+            %37:i32 = select 100i, 10i, %36
+            %38:bool = lt %35, %37
+            if %38 [t: $B6, f: $B7] {  # if_1
+              $B6: {  # true
                 exit_if  # if_1
               }
-              %b8 = block {  # false
+              $B7: {  # false
                 exit_loop  # loop_2
               }
             }
-            %35:i32 = load %x_48
-            store %x_62, %35
-            %36:i32 = load %x_50
-            store %x_65, %36
+            %39:i32 = load %x_48
+            store %x_62, %39
+            %40:i32 = load %x_50
+            store %x_65, %40
             store %x_67, 0i
-            loop [b: %b9, c: %b10] {  # loop_3
-              %b9 = block {  # body
+            loop [b: $B8, c: $B9] {  # loop_3
+              $B8: {  # body
                 %x_97:ptr<function, i32, read_write> = var
                 %x_68:ptr<function, i32, read_write> = var
-                %39:i32 = load %x_65
-                store %x_51, %39
-                %40:i32 = load %x_62
-                store %x_49, %40
-                %41:bool = load %x_45
-                store %x_46, %41
-                %42:i32 = load %x_67
-                %43:bool = lt %42, 2i
-                if %43 [t: %b11, f: %b12] {  # if_2
-                  %b11 = block {  # true
+                %43:i32 = load %x_65
+                store %x_51, %43
+                %44:i32 = load %x_62
+                store %x_49, %44
+                %45:bool = load %x_45
+                store %x_46, %45
+                %46:i32 = load %x_67
+                %47:bool = lt %46, 2i
+                if %47 [t: $B10, f: $B11] {  # if_2
+                  $B10: {  # true
                     exit_if  # if_2
                   }
-                  %b12 = block {  # false
+                  $B11: {  # false
                     exit_loop  # loop_3
                   }
                 }
-                loop [b: %b13, c: %b14] {  # loop_4
-                  %b13 = block {  # body
+                loop [b: $B12] {  # loop_4
+                  $B12: {  # body
                     %x_78:ptr<function, bool, read_write> = var
                     %x_86:ptr<function, i32, read_write> = var
                     %x_98:ptr<function, bool, read_write> = var
-                    %47:f32 = load_vector_element %gl_FragCoord, 0u
-                    %48:bool = lt %47, -1.0f
-                    store %x_78, %48
-                    %49:bool = lt %x_40, 0.0f
-                    %50:bool = eq %49, false
-                    if %50 [t: %b15] {  # if_3
-                      %b15 = block {  # true
-                        %51:bool = load %x_78
-                        if %51 [t: %b16] {  # if_4
-                          %b16 = block {  # true
+                    %51:f32 = load_vector_element %gl_FragCoord, 0u
+                    %52:bool = lt %51, -1.0f
+                    store %x_78, %52
+                    %53:bool = lt %x_40, 0.0f
+                    %54:bool = eq %53, false
+                    if %54 [t: $B13] {  # if_3
+                      $B13: {  # true
+                        %55:bool = load %x_78
+                        if %55 [t: $B14] {  # if_4
+                          $B14: {  # true
                             store %x_66, 0i
                             exit_loop  # loop_4
                           }
                         }
                         store %x_86, 1i
-                        loop [b: %b17, c: %b18] {  # loop_5
-                          %b17 = block {  # body
+                        loop [b: $B15, c: $B16] {  # loop_5
+                          $B15: {  # body
                             %x_87:ptr<function, i32, read_write> = var
-                            %53:i32 = load %x_65
-                            store %x_97, %53
+                            %57:i32 = load %x_65
+                            store %x_97, %57
                             store %x_98, false
-                            %54:i32 = load %x_86
-                            %55:bool = lt %54, 3i
-                            if %55 [t: %b19, f: %b20] {  # if_5
-                              %b19 = block {  # true
+                            %58:i32 = load %x_86
+                            %59:bool = lt %58, 3i
+                            if %59 [t: $B17, f: $B18] {  # if_5
+                              $B17: {  # true
                                 exit_if  # if_5
                               }
-                              %b20 = block {  # false
+                              $B18: {  # false
                                 exit_loop  # loop_5
                               }
                             }
-                            %56:bool = load %x_78
-                            if %56 [t: %b21] {  # if_6
-                              %b21 = block {  # true
-                                continue %b18
+                            %60:bool = load %x_78
+                            if %60 [t: $B19] {  # if_6
+                              $B19: {  # true
+                                continue  # -> $B16
                               }
                             }
-                            %57:i32 = load %x_86
-                            %58:bool = gt %57, 0i
-                            if %58 [t: %b22] {  # if_7
-                              %b22 = block {  # true
+                            %61:i32 = load %x_86
+                            %62:bool = gt %61, 0i
+                            if %62 [t: $B20] {  # if_7
+                              $B20: {  # true
                                 store %x_97, 1i
                                 store %x_98, true
                                 exit_loop  # loop_5
                               }
                             }
-                            continue %b18
+                            continue  # -> $B16
                           }
-                          %b18 = block {  # continuing
-                            %59:i32 = load %x_86
-                            %60:i32 = add %59, 1i
-                            store %x_87, %60
-                            %61:i32 = load %x_87
-                            store %x_86, %61
-                            next_iteration %b17
+                          $B16: {  # continuing
+                            %63:i32 = load %x_86
+                            %64:i32 = add %63, 1i
+                            store %x_87, %64
+                            %65:i32 = load %x_87
+                            store %x_86, %65
+                            next_iteration  # -> $B15
                           }
                         }
-                        %62:i32 = load %x_97
-                        store %x_66, %62
-                        %63:bool = load %x_98
-                        if %63 [t: %b23] {  # if_8
-                          %b23 = block {  # true
+                        %66:i32 = load %x_97
+                        store %x_66, %66
+                        %67:bool = load %x_98
+                        if %67 [t: $B21] {  # if_8
+                          $B21: {  # true
                             exit_loop  # loop_4
                           }
                         }
@@ -165,194 +169,193 @@
                     store %x_66, 0i
                     exit_loop  # loop_4
                   }
-                  %b14 = block {  # continuing
-                    next_iteration %b13
-                  }
                 }
-                %64:i32 = load %x_62
-                %65:i32 = load %x_66
-                %66:i32 = add %64, %65
-                store %x_63, %66
-                if %x_41 [t: %b24] {  # if_9
-                  %b24 = block {  # true
-                    loop [b: %b25, c: %b26] {  # loop_6
-                      %b25 = block {  # body
-                        if %x_41 [t: %b27, f: %b28] {  # if_10
-                          %b27 = block {  # true
+                %68:i32 = load %x_62
+                %69:i32 = load %x_66
+                %70:i32 = add %68, %69
+                store %x_63, %70
+                if %x_41 [t: $B22] {  # if_9
+                  $B22: {  # true
+                    loop [b: $B23, c: $B24] {  # loop_6
+                      $B23: {  # body
+                        if %x_41 [t: $B25, f: $B26] {  # if_10
+                          $B25: {  # true
                             exit_if  # if_10
                           }
-                          %b28 = block {  # false
+                          $B26: {  # false
                             exit_loop  # loop_6
                           }
                         }
-                        continue %b26
+                        continue  # -> $B24
                       }
-                      %b26 = block {  # continuing
-                        %67:i32 = load %x_52
-                        %68:f32 = convert %67
-                        %69:vec4<f32> = construct %68
-                        store %x_GLF_color, %69
-                        next_iteration %b25
+                      $B24: {  # continuing
+                        %71:i32 = load %x_52
+                        %72:f32 = convert %71
+                        %73:vec4<f32> = construct %72
+                        store %x_GLF_color, %73
+                        next_iteration  # -> $B23
                       }
                     }
-                    %70:i32 = load %x_66
-                    store %x_51, %70
-                    %71:i32 = load %x_63
-                    store %x_49, %71
+                    %74:i32 = load %x_66
+                    store %x_51, %74
+                    %75:i32 = load %x_63
+                    store %x_49, %75
                     store %x_46, true
                     exit_loop  # loop_3
                   }
                 }
-                continue %b10
+                continue  # -> $B9
               }
-              %b10 = block {  # continuing
-                %72:i32 = load %x_67
-                %73:i32 = add %72, 1i
-                store %x_68, %73
-                %74:i32 = load %x_63
-                store %x_62, %74
-                %75:i32 = load %x_66
-                store %x_65, %75
-                %76:i32 = load %x_68
-                store %x_67, %76
-                next_iteration %b9
+              $B9: {  # continuing
+                %76:i32 = load %x_67
+                %77:i32 = add %76, 1i
+                store %x_68, %77
+                %78:i32 = load %x_63
+                store %x_62, %78
+                %79:i32 = load %x_66
+                store %x_65, %79
+                %80:i32 = load %x_68
+                store %x_67, %80
+                next_iteration  # -> $B8
               }
             }
-            %77:i32 = load %x_49
-            store %x_111, %77
-            %78:bool = load %x_46
-            store %x_112, %78
-            %79:bool = load %x_46
-            if %79 [t: %b29] {  # if_11
-              %b29 = block {  # true
+            %81:i32 = load %x_49
+            store %x_111, %81
+            %82:bool = load %x_46
+            store %x_112, %82
+            %83:bool = load %x_46
+            if %83 [t: $B27] {  # if_11
+              $B27: {  # true
                 exit_loop  # loop_2
               }
             }
-            %80:bool = eq %x_41, false
-            if %80 [t: %b30] {  # if_12
-              %b30 = block {  # true
-                %81:i32 = load %x_49
-                store %x_111, %81
-                %82:bool = load %x_46
-                store %x_112, %82
+            %84:bool = eq %x_41, false
+            if %84 [t: $B28] {  # if_12
+              $B28: {  # true
+                %85:i32 = load %x_49
+                store %x_111, %85
+                %86:bool = load %x_46
+                store %x_112, %86
                 exit_loop  # loop_2
               }
             }
-            continue %b6
+            continue  # -> $B5
           }
-          %b6 = block {  # continuing
-            %83:i32 = load %x_52
-            %84:i32 = add %83, 1i
-            store %x_53, %84
-            %85:bool = load %x_46
-            store %x_45, %85
-            %86:i32 = load %x_49
-            store %x_48, %86
-            %87:i32 = load %x_51
-            store %x_50, %87
-            %88:i32 = load %x_53
-            store %x_52, %88
-            next_iteration %b5
+          $B5: {  # continuing
+            %87:i32 = load %x_52
+            %88:i32 = add %87, 1i
+            store %x_53, %88
+            %89:bool = load %x_46
+            store %x_45, %89
+            %90:i32 = load %x_49
+            store %x_48, %90
+            %91:i32 = load %x_51
+            store %x_50, %91
+            %92:i32 = load %x_53
+            store %x_52, %92
+            next_iteration  # -> $B4
           }
         }
-        %89:bool = load %x_112
-        if %89 [t: %b31] {  # if_13
-          %b31 = block {  # true
+        %93:bool = load %x_112
+        if %93 [t: $B29] {  # if_13
+          $B29: {  # true
             exit_loop  # loop_1
           }
         }
-        %90:i32 = load %x_111
-        store %x_115, %90
+        %94:i32 = load %x_111
+        store %x_115, %94
         store %x_118, 0i
         store %x_120, 0i
-        loop [b: %b32, c: %b33] {  # loop_7
-          %b32 = block {  # body
+        loop [b: $B30, c: $B31] {  # loop_7
+          $B30: {  # body
             %x_154:ptr<function, i32, read_write> = var
             %x_119:ptr<function, i32, read_write> = var
             %x_121:ptr<function, i32, read_write> = var
-            %94:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-            %x_123:f32 = load_vector_element %94, 1u
-            %96:i32 = load %x_115
-            store %x_161, %96
-            %97:i32 = load %x_120
-            %98:f32 = add %x_123, 1.0f
-            %99:i32 = convert %98
-            %100:bool = lt %97, %99
-            if %100 [t: %b34, f: %b35] {  # if_14
-              %b34 = block {  # true
+            %98:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
+            %99:f32 = load_vector_element %98, 1u
+            %x_123:f32 = let %99
+            %101:i32 = load %x_115
+            store %x_161, %101
+            %102:i32 = load %x_120
+            %103:i32 = let %102
+            %104:f32 = add %x_123, 1.0f
+            %105:i32 = call %tint_f32_to_i32, %104
+            %107:bool = lt %103, %105
+            if %107 [t: $B32, f: $B33] {  # if_14
+              $B32: {  # true
                 exit_if  # if_14
               }
-              %b35 = block {  # false
+              $B33: {  # false
                 exit_loop  # loop_7
               }
             }
-            loop [b: %b36, c: %b37] {  # loop_8
-              %b36 = block {  # body
+            loop [b: $B34] {  # loop_8
+              $B34: {  # body
                 %x_135:ptr<function, bool, read_write> = var
                 %x_143:ptr<function, i32, read_write> = var
                 %x_155:ptr<function, bool, read_write> = var
-                %104:f32 = load_vector_element %gl_FragCoord, 0u
-                %105:bool = lt %104, -1.0f
-                store %x_135, %105
-                %106:bool = lt %x_40, 0.0f
-                %107:bool = eq %106, false
-                if %107 [t: %b38] {  # if_15
-                  %b38 = block {  # true
-                    %108:bool = load %x_135
-                    if %108 [t: %b39] {  # if_16
-                      %b39 = block {  # true
+                %111:f32 = load_vector_element %gl_FragCoord, 0u
+                %112:bool = lt %111, -1.0f
+                store %x_135, %112
+                %113:bool = lt %x_40, 0.0f
+                %114:bool = eq %113, false
+                if %114 [t: $B35] {  # if_15
+                  $B35: {  # true
+                    %115:bool = load %x_135
+                    if %115 [t: $B36] {  # if_16
+                      $B36: {  # true
                         store %x_119, 0i
                         exit_loop  # loop_8
                       }
                     }
                     store %x_143, 1i
-                    loop [b: %b40, c: %b41] {  # loop_9
-                      %b40 = block {  # body
+                    loop [b: $B37, c: $B38] {  # loop_9
+                      $B37: {  # body
                         %x_144:ptr<function, i32, read_write> = var
-                        %110:i32 = load %x_118
-                        store %x_154, %110
+                        %117:i32 = load %x_118
+                        store %x_154, %117
                         store %x_155, false
-                        %111:i32 = load %x_143
-                        %112:bool = lt %111, 3i
-                        if %112 [t: %b42, f: %b43] {  # if_17
-                          %b42 = block {  # true
+                        %118:i32 = load %x_143
+                        %119:bool = lt %118, 3i
+                        if %119 [t: $B39, f: $B40] {  # if_17
+                          $B39: {  # true
                             exit_if  # if_17
                           }
-                          %b43 = block {  # false
+                          $B40: {  # false
                             exit_loop  # loop_9
                           }
                         }
-                        %113:bool = load %x_135
-                        if %113 [t: %b44] {  # if_18
-                          %b44 = block {  # true
-                            continue %b41
+                        %120:bool = load %x_135
+                        if %120 [t: $B41] {  # if_18
+                          $B41: {  # true
+                            continue  # -> $B38
                           }
                         }
-                        %114:i32 = load %x_143
-                        %115:bool = gt %114, 0i
-                        if %115 [t: %b45] {  # if_19
-                          %b45 = block {  # true
+                        %121:i32 = load %x_143
+                        %122:bool = gt %121, 0i
+                        if %122 [t: $B42] {  # if_19
+                          $B42: {  # true
                             store %x_154, 1i
                             store %x_155, true
                             exit_loop  # loop_9
                           }
                         }
-                        continue %b41
+                        continue  # -> $B38
                       }
-                      %b41 = block {  # continuing
-                        %116:i32 = load %x_143
-                        %117:i32 = add %116, 1i
-                        store %x_144, %117
-                        %118:i32 = load %x_144
-                        store %x_143, %118
-                        next_iteration %b40
+                      $B38: {  # continuing
+                        %123:i32 = load %x_143
+                        %124:i32 = add %123, 1i
+                        store %x_144, %124
+                        %125:i32 = load %x_144
+                        store %x_143, %125
+                        next_iteration  # -> $B37
                       }
                     }
-                    %119:i32 = load %x_154
-                    store %x_119, %119
-                    %120:bool = load %x_155
-                    if %120 [t: %b46] {  # if_20
-                      %b46 = block {  # true
+                    %126:i32 = load %x_154
+                    store %x_119, %126
+                    %127:bool = load %x_155
+                    if %127 [t: $B43] {  # if_20
+                      $B43: {  # true
                         exit_loop  # loop_8
                       }
                     }
@@ -362,66 +365,70 @@
                 store %x_119, 0i
                 exit_loop  # loop_8
               }
-              %b37 = block {  # continuing
-                next_iteration %b36
-              }
             }
-            %121:i32 = load %x_115
-            %122:i32 = load %x_119
-            %123:i32 = add %121, %122
-            store %x_116, %123
-            %124:bool = eq %x_41, false
-            %125:bool = select %x_41, false, %124
-            if %125 [t: %b47] {  # if_21
-              %b47 = block {  # true
-                %126:i32 = load %x_116
-                store %x_161, %126
+            %128:i32 = load %x_115
+            %129:i32 = load %x_119
+            %130:i32 = add %128, %129
+            store %x_116, %130
+            %131:bool = eq %x_41, false
+            %132:bool = select %x_41, false, %131
+            if %132 [t: $B44] {  # if_21
+              $B44: {  # true
+                %133:i32 = load %x_116
+                store %x_161, %133
                 exit_loop  # loop_7
               }
             }
-            continue %b33
+            continue  # -> $B31
           }
-          %b33 = block {  # continuing
-            %127:i32 = load %x_120
-            %128:i32 = add %127, 1i
-            store %x_121, %128
-            %129:i32 = load %x_116
-            store %x_115, %129
-            %130:i32 = load %x_119
-            store %x_118, %130
-            %131:i32 = load %x_121
-            store %x_120, %131
-            next_iteration %b32
+          $B31: {  # continuing
+            %134:i32 = load %x_120
+            %135:i32 = add %134, 1i
+            store %x_121, %135
+            %136:i32 = load %x_116
+            store %x_115, %136
+            %137:i32 = load %x_119
+            store %x_118, %137
+            %138:i32 = load %x_121
+            store %x_120, %138
+            next_iteration  # -> $B30
           }
         }
-        %132:i32 = load %x_161
-        %133:bool = eq %132, 4i
-        if %133 [t: %b48, f: %b49] {  # if_22
-          %b48 = block {  # true
+        %139:i32 = load %x_161
+        %140:bool = eq %139, 4i
+        if %140 [t: $B45, f: $B46] {  # if_22
+          $B45: {  # true
             store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
             exit_if  # if_22
           }
-          %b49 = block {  # false
+          $B46: {  # false
             store %x_GLF_color, vec4<f32>(0.0f)
             exit_if  # if_22
           }
         }
         exit_loop  # loop_1
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
-      }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b50 {
-  %b50 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B47: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %136:void = call %main_1
-    %137:vec4<f32> = load %x_GLF_color
-    %138:main_out = construct %137
-    ret %138
+    %143:void = call %main_1
+    %144:vec4<f32> = load %x_GLF_color
+    %145:main_out = construct %144
+    ret %145
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B48: {
+    %147:i32 = convert %value
+    %148:bool = gte %value, -2147483648.0f
+    %149:i32 = select -2147483648i, %147, %148
+    %150:bool = lte %value, 2147483520.0f
+    %151:i32 = select 2147483647i, %149, %150
+    ret %151
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/increment-value-in-nested-for-loop/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/increment-value-in-nested-for-loop/0.wgsl.expected.ir.msl
index 0837621..4e9d9fe 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/increment-value-in-nested-for-loop/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/increment-value-in-nested-for-loop/0.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,16 +8,16 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+%main_1 = func():void {
+  $B2: {
+    loop [b: $B3] {  # loop_1
+      $B3: {  # body
         %x_45:ptr<function, bool, read_write> = var
         %x_48:ptr<function, i32, read_write> = var
         %x_49:ptr<function, i32, read_write> = var
@@ -35,14 +35,16 @@
         %x_120_phi:ptr<function, i32, read_write> = var
         %x_161_phi:ptr<function, i32, read_write> = var
         %21:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-        %x_40:f32 = load_vector_element %21, 0u
-        %x_41:bool = lt %x_40, -1.0f
+        %22:f32 = load_vector_element %21, 0u
+        %x_40:f32 = let %22
+        %24:bool = lt %x_40, -1.0f
+        %x_41:bool = let %24
         store %x_45_phi, false
         store %x_48_phi, 0i
         store %x_50_phi, 0i
         store %x_52_phi, 0i
-        loop [b: %b5, c: %b6] {  # loop_2
-          %b5 = block {  # body
+        loop [b: $B4, c: $B5] {  # loop_2
+          $B4: {  # body
             %x_62:ptr<function, i32, read_write> = var
             %x_65:ptr<function, i32, read_write> = var
             %x_66:ptr<function, i32, read_write> = var
@@ -54,125 +56,132 @@
             %x_51_phi:ptr<function, i32, read_write> = var
             %x_49_phi:ptr<function, i32, read_write> = var
             %x_46_phi:ptr<function, bool, read_write> = var
-            %35:bool = load %x_45_phi
-            store %x_45, %35
-            %36:i32 = load %x_48_phi
-            store %x_48, %36
-            %x_50:i32 = load %x_50_phi
-            %x_52:i32 = load %x_52_phi
-            %x_55:f32 = load_vector_element %gl_FragCoord, 1u
-            %40:i32 = load %x_48
-            store %x_111_phi, %40
-            %41:bool = load %x_45
-            store %x_112_phi, %41
-            %42:bool = gt %x_55, -1.0f
-            %43:i32 = select 100i, 10i, %42
-            %44:bool = lt %x_52, %43
-            if %44 [t: %b7, f: %b8] {  # if_1
-              %b7 = block {  # true
+            %37:bool = load %x_45_phi
+            store %x_45, %37
+            %38:i32 = load %x_48_phi
+            store %x_48, %38
+            %39:i32 = load %x_50_phi
+            %x_50:i32 = let %39
+            %41:i32 = load %x_52_phi
+            %x_52:i32 = let %41
+            %43:f32 = load_vector_element %gl_FragCoord, 1u
+            %x_55:f32 = let %43
+            %45:i32 = load %x_48
+            store %x_111_phi, %45
+            %46:bool = load %x_45
+            store %x_112_phi, %46
+            %47:bool = gt %x_55, -1.0f
+            %48:i32 = select 100i, 10i, %47
+            %49:bool = lt %x_52, %48
+            if %49 [t: $B6, f: $B7] {  # if_1
+              $B6: {  # true
                 exit_if  # if_1
               }
-              %b8 = block {  # false
+              $B7: {  # false
                 exit_loop  # loop_2
               }
             }
-            %45:i32 = load %x_48
-            store %x_62_phi, %45
+            %50:i32 = load %x_48
+            store %x_62_phi, %50
             store %x_65_phi, %x_50
             store %x_67_phi, 0i
-            loop [b: %b9, c: %b10] {  # loop_3
-              %b9 = block {  # body
+            loop [b: $B8, c: $B9] {  # loop_3
+              $B8: {  # body
                 %x_97:ptr<function, i32, read_write> = var
                 %x_68:ptr<function, i32, read_write> = var
                 %x_66_phi:ptr<function, i32, read_write> = var
-                %49:i32 = load %x_62_phi
-                store %x_62, %49
-                %50:i32 = load %x_65_phi
-                store %x_65, %50
-                %x_67:i32 = load %x_67_phi
-                %52:i32 = load %x_65
-                store %x_51_phi, %52
-                %53:i32 = load %x_62
-                store %x_49_phi, %53
-                %54:bool = load %x_45
-                store %x_46_phi, %54
-                %55:bool = lt %x_67, 2i
-                if %55 [t: %b11, f: %b12] {  # if_2
-                  %b11 = block {  # true
+                %54:i32 = load %x_62_phi
+                store %x_62, %54
+                %55:i32 = load %x_65_phi
+                store %x_65, %55
+                %56:i32 = load %x_67_phi
+                %x_67:i32 = let %56
+                %58:i32 = load %x_65
+                store %x_51_phi, %58
+                %59:i32 = load %x_62
+                store %x_49_phi, %59
+                %60:bool = load %x_45
+                store %x_46_phi, %60
+                %61:bool = lt %x_67, 2i
+                if %61 [t: $B10, f: $B11] {  # if_2
+                  $B10: {  # true
                     exit_if  # if_2
                   }
-                  %b12 = block {  # false
+                  $B11: {  # false
                     exit_loop  # loop_3
                   }
                 }
-                loop [b: %b13, c: %b14] {  # loop_4
-                  %b13 = block {  # body
+                loop [b: $B12] {  # loop_4
+                  $B12: {  # body
                     %x_78:ptr<function, bool, read_write> = var
                     %x_86_phi:ptr<function, i32, read_write> = var
                     %x_97_phi:ptr<function, i32, read_write> = var
                     %x_98_phi:ptr<function, bool, read_write> = var
-                    %x_77:f32 = load_vector_element %gl_FragCoord, 0u
-                    %61:bool = lt %x_77, -1.0f
-                    store %x_78, %61
-                    %62:bool = lt %x_40, 0.0f
-                    %63:bool = eq %62, false
-                    if %63 [t: %b15] {  # if_3
-                      %b15 = block {  # true
-                        %64:bool = load %x_78
-                        if %64 [t: %b16] {  # if_4
-                          %b16 = block {  # true
+                    %66:f32 = load_vector_element %gl_FragCoord, 0u
+                    %x_77:f32 = let %66
+                    %68:bool = lt %x_77, -1.0f
+                    store %x_78, %68
+                    %69:bool = lt %x_40, 0.0f
+                    %70:bool = eq %69, false
+                    if %70 [t: $B13] {  # if_3
+                      $B13: {  # true
+                        %71:bool = load %x_78
+                        if %71 [t: $B14] {  # if_4
+                          $B14: {  # true
                             store %x_66_phi, 0i
                             exit_loop  # loop_4
                           }
                         }
                         store %x_86_phi, 1i
-                        loop [b: %b17, c: %b18] {  # loop_5
-                          %b17 = block {  # body
+                        loop [b: $B15, c: $B16] {  # loop_5
+                          $B15: {  # body
                             %x_87:ptr<function, i32, read_write> = var
-                            %x_86:i32 = load %x_86_phi
-                            %67:i32 = load %x_65
-                            store %x_97_phi, %67
+                            %73:i32 = load %x_86_phi
+                            %x_86:i32 = let %73
+                            %75:i32 = load %x_65
+                            store %x_97_phi, %75
                             store %x_98_phi, false
-                            %68:bool = lt %x_86, 3i
-                            if %68 [t: %b19, f: %b20] {  # if_5
-                              %b19 = block {  # true
+                            %76:bool = lt %x_86, 3i
+                            if %76 [t: $B17, f: $B18] {  # if_5
+                              $B17: {  # true
                                 exit_if  # if_5
                               }
-                              %b20 = block {  # false
+                              $B18: {  # false
                                 exit_loop  # loop_5
                               }
                             }
-                            %69:bool = load %x_78
-                            if %69 [t: %b21] {  # if_6
-                              %b21 = block {  # true
-                                continue %b18
+                            %77:bool = load %x_78
+                            if %77 [t: $B19] {  # if_6
+                              $B19: {  # true
+                                continue  # -> $B16
                               }
                             }
-                            %70:bool = gt %x_86, 0i
-                            if %70 [t: %b22] {  # if_7
-                              %b22 = block {  # true
+                            %78:bool = gt %x_86, 0i
+                            if %78 [t: $B20] {  # if_7
+                              $B20: {  # true
                                 store %x_97_phi, 1i
                                 store %x_98_phi, true
                                 exit_loop  # loop_5
                               }
                             }
-                            continue %b18
+                            continue  # -> $B16
                           }
-                          %b18 = block {  # continuing
-                            %71:i32 = add %x_86, 1i
-                            store %x_87, %71
-                            %72:i32 = load %x_87
-                            store %x_86_phi, %72
-                            next_iteration %b17
+                          $B16: {  # continuing
+                            %79:i32 = add %x_86, 1i
+                            store %x_87, %79
+                            %80:i32 = load %x_87
+                            store %x_86_phi, %80
+                            next_iteration  # -> $B15
                           }
                         }
-                        %73:i32 = load %x_97_phi
-                        store %x_97, %73
-                        %x_98:bool = load %x_98_phi
-                        %75:i32 = load %x_97
-                        store %x_66_phi, %75
-                        if %x_98 [t: %b23] {  # if_8
-                          %b23 = block {  # true
+                        %81:i32 = load %x_97_phi
+                        store %x_97, %81
+                        %82:bool = load %x_98_phi
+                        %x_98:bool = let %82
+                        %84:i32 = load %x_97
+                        store %x_66_phi, %84
+                        if %x_98 [t: $B21] {  # if_8
+                          $B21: {  # true
                             exit_loop  # loop_4
                           }
                         }
@@ -182,201 +191,208 @@
                     store %x_66_phi, 0i
                     exit_loop  # loop_4
                   }
-                  %b14 = block {  # continuing
-                    next_iteration %b13
-                  }
                 }
-                %76:i32 = load %x_66_phi
-                store %x_66, %76
-                %77:i32 = load %x_62
-                %78:i32 = load %x_66
-                %79:i32 = add %77, %78
-                %80:i32 = bitcast %79
-                store %x_63, %80
-                if %x_41 [t: %b24] {  # if_9
-                  %b24 = block {  # true
-                    loop [b: %b25, c: %b26] {  # loop_6
-                      %b25 = block {  # body
-                        if %x_41 [t: %b27, f: %b28] {  # if_10
-                          %b27 = block {  # true
+                %85:i32 = load %x_66_phi
+                store %x_66, %85
+                %86:i32 = load %x_62
+                %87:i32 = load %x_66
+                %88:i32 = add %86, %87
+                %89:i32 = bitcast %88
+                store %x_63, %89
+                if %x_41 [t: $B22] {  # if_9
+                  $B22: {  # true
+                    loop [b: $B23, c: $B24] {  # loop_6
+                      $B23: {  # body
+                        if %x_41 [t: $B25, f: $B26] {  # if_10
+                          $B25: {  # true
                             exit_if  # if_10
                           }
-                          %b28 = block {  # false
+                          $B26: {  # false
                             exit_loop  # loop_6
                           }
                         }
-                        continue %b26
+                        continue  # -> $B24
                       }
-                      %b26 = block {  # continuing
-                        %x_105:f32 = convert %x_52
-                        %82:vec4<f32> = construct %x_105, %x_105, %x_105, %x_105
-                        store %x_GLF_color, %82
-                        next_iteration %b25
+                      $B24: {  # continuing
+                        %90:f32 = convert %x_52
+                        %x_105:f32 = let %90
+                        %92:vec4<f32> = construct %x_105, %x_105, %x_105, %x_105
+                        store %x_GLF_color, %92
+                        next_iteration  # -> $B23
                       }
                     }
-                    %83:i32 = load %x_66
-                    store %x_51_phi, %83
-                    %84:i32 = load %x_63
-                    store %x_49_phi, %84
+                    %93:i32 = load %x_66
+                    store %x_51_phi, %93
+                    %94:i32 = load %x_63
+                    store %x_49_phi, %94
                     store %x_46_phi, true
                     exit_loop  # loop_3
                   }
                 }
-                continue %b10
+                continue  # -> $B9
               }
-              %b10 = block {  # continuing
-                %85:i32 = add %x_67, 1i
-                store %x_68, %85
-                %86:i32 = load %x_63
-                store %x_62_phi, %86
-                %87:i32 = load %x_66
-                store %x_65_phi, %87
-                %88:i32 = load %x_68
-                store %x_67_phi, %88
-                next_iteration %b9
+              $B9: {  # continuing
+                %95:i32 = add %x_67, 1i
+                store %x_68, %95
+                %96:i32 = load %x_63
+                store %x_62_phi, %96
+                %97:i32 = load %x_66
+                store %x_65_phi, %97
+                %98:i32 = load %x_68
+                store %x_67_phi, %98
+                next_iteration  # -> $B8
               }
             }
-            %x_51:i32 = load %x_51_phi
-            %90:i32 = load %x_49_phi
-            store %x_49, %90
-            %91:bool = load %x_46_phi
-            store %x_46, %91
-            %92:i32 = load %x_49
-            store %x_111_phi, %92
-            %93:bool = load %x_46
-            store %x_112_phi, %93
-            %94:bool = load %x_46
-            if %94 [t: %b29] {  # if_11
-              %b29 = block {  # true
+            %99:i32 = load %x_51_phi
+            %x_51:i32 = let %99
+            %101:i32 = load %x_49_phi
+            store %x_49, %101
+            %102:bool = load %x_46_phi
+            store %x_46, %102
+            %103:i32 = load %x_49
+            store %x_111_phi, %103
+            %104:bool = load %x_46
+            store %x_112_phi, %104
+            %105:bool = load %x_46
+            if %105 [t: $B27] {  # if_11
+              $B27: {  # true
                 exit_loop  # loop_2
               }
             }
-            %95:bool = eq %x_41, false
-            if %95 [t: %b30] {  # if_12
-              %b30 = block {  # true
-                %96:i32 = load %x_49
-                store %x_111_phi, %96
-                %97:bool = load %x_46
-                store %x_112_phi, %97
+            %106:bool = eq %x_41, false
+            if %106 [t: $B28] {  # if_12
+              $B28: {  # true
+                %107:i32 = load %x_49
+                store %x_111_phi, %107
+                %108:bool = load %x_46
+                store %x_112_phi, %108
                 exit_loop  # loop_2
               }
             }
-            continue %b6
+            continue  # -> $B5
           }
-          %b6 = block {  # continuing
-            %98:i32 = add %x_52, 1i
-            store %x_53, %98
-            %99:bool = load %x_46
-            store %x_45_phi, %99
-            %100:i32 = load %x_49
-            store %x_48_phi, %100
+          $B5: {  # continuing
+            %109:i32 = add %x_52, 1i
+            store %x_53, %109
+            %110:bool = load %x_46
+            store %x_45_phi, %110
+            %111:i32 = load %x_49
+            store %x_48_phi, %111
             store %x_50_phi, %x_51
-            %101:i32 = load %x_53
-            store %x_52_phi, %101
-            next_iteration %b5
+            %112:i32 = load %x_53
+            store %x_52_phi, %112
+            next_iteration  # -> $B4
           }
         }
-        %x_111:i32 = load %x_111_phi
-        %x_112:bool = load %x_112_phi
-        if %x_112 [t: %b31] {  # if_13
-          %b31 = block {  # true
+        %113:i32 = load %x_111_phi
+        %x_111:i32 = let %113
+        %115:bool = load %x_112_phi
+        %x_112:bool = let %115
+        if %x_112 [t: $B29] {  # if_13
+          $B29: {  # true
             exit_loop  # loop_1
           }
         }
         store %x_115_phi, %x_111
         store %x_118_phi, 0i
         store %x_120_phi, 0i
-        loop [b: %b32, c: %b33] {  # loop_7
-          %b32 = block {  # body
+        loop [b: $B30, c: $B31] {  # loop_7
+          $B30: {  # body
             %x_154:ptr<function, i32, read_write> = var
             %x_121:ptr<function, i32, read_write> = var
             %x_119_phi:ptr<function, i32, read_write> = var
-            %107:i32 = load %x_115_phi
-            store %x_115, %107
-            %x_118:i32 = load %x_118_phi
-            %x_120:i32 = load %x_120_phi
-            %110:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-            %x_123:f32 = load_vector_element %110, 1u
-            %112:i32 = load %x_115
-            store %x_161_phi, %112
-            %113:f32 = add %x_123, 1.0f
-            %114:i32 = convert %113
-            %115:bool = lt %x_120, %114
-            if %115 [t: %b34, f: %b35] {  # if_14
-              %b34 = block {  # true
+            %120:i32 = load %x_115_phi
+            store %x_115, %120
+            %121:i32 = load %x_118_phi
+            %x_118:i32 = let %121
+            %123:i32 = load %x_120_phi
+            %x_120:i32 = let %123
+            %125:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
+            %126:f32 = load_vector_element %125, 1u
+            %x_123:f32 = let %126
+            %128:i32 = load %x_115
+            store %x_161_phi, %128
+            %129:f32 = add %x_123, 1.0f
+            %130:i32 = call %tint_f32_to_i32, %129
+            %132:bool = lt %x_120, %130
+            if %132 [t: $B32, f: $B33] {  # if_14
+              $B32: {  # true
                 exit_if  # if_14
               }
-              %b35 = block {  # false
+              $B33: {  # false
                 exit_loop  # loop_7
               }
             }
-            loop [b: %b36, c: %b37] {  # loop_8
-              %b36 = block {  # body
+            loop [b: $B34] {  # loop_8
+              $B34: {  # body
                 %x_135:ptr<function, bool, read_write> = var
                 %x_143_phi:ptr<function, i32, read_write> = var
                 %x_154_phi:ptr<function, i32, read_write> = var
                 %x_155_phi:ptr<function, bool, read_write> = var
-                %x_134:f32 = load_vector_element %gl_FragCoord, 0u
-                %121:bool = lt %x_134, -1.0f
-                store %x_135, %121
-                %122:bool = lt %x_40, 0.0f
-                %123:bool = eq %122, false
-                if %123 [t: %b38] {  # if_15
-                  %b38 = block {  # true
-                    %124:bool = load %x_135
-                    if %124 [t: %b39] {  # if_16
-                      %b39 = block {  # true
+                %137:f32 = load_vector_element %gl_FragCoord, 0u
+                %x_134:f32 = let %137
+                %139:bool = lt %x_134, -1.0f
+                store %x_135, %139
+                %140:bool = lt %x_40, 0.0f
+                %141:bool = eq %140, false
+                if %141 [t: $B35] {  # if_15
+                  $B35: {  # true
+                    %142:bool = load %x_135
+                    if %142 [t: $B36] {  # if_16
+                      $B36: {  # true
                         store %x_119_phi, 0i
                         exit_loop  # loop_8
                       }
                     }
                     store %x_143_phi, 1i
-                    loop [b: %b40, c: %b41] {  # loop_9
-                      %b40 = block {  # body
+                    loop [b: $B37, c: $B38] {  # loop_9
+                      $B37: {  # body
                         %x_144:ptr<function, i32, read_write> = var
-                        %x_143:i32 = load %x_143_phi
+                        %144:i32 = load %x_143_phi
+                        %x_143:i32 = let %144
                         store %x_154_phi, %x_118
                         store %x_155_phi, false
-                        %127:bool = lt %x_143, 3i
-                        if %127 [t: %b42, f: %b43] {  # if_17
-                          %b42 = block {  # true
+                        %146:bool = lt %x_143, 3i
+                        if %146 [t: $B39, f: $B40] {  # if_17
+                          $B39: {  # true
                             exit_if  # if_17
                           }
-                          %b43 = block {  # false
+                          $B40: {  # false
                             exit_loop  # loop_9
                           }
                         }
-                        %128:bool = load %x_135
-                        if %128 [t: %b44] {  # if_18
-                          %b44 = block {  # true
-                            continue %b41
+                        %147:bool = load %x_135
+                        if %147 [t: $B41] {  # if_18
+                          $B41: {  # true
+                            continue  # -> $B38
                           }
                         }
-                        %129:bool = gt %x_143, 0i
-                        if %129 [t: %b45] {  # if_19
-                          %b45 = block {  # true
+                        %148:bool = gt %x_143, 0i
+                        if %148 [t: $B42] {  # if_19
+                          $B42: {  # true
                             store %x_154_phi, 1i
                             store %x_155_phi, true
                             exit_loop  # loop_9
                           }
                         }
-                        continue %b41
+                        continue  # -> $B38
                       }
-                      %b41 = block {  # continuing
-                        %130:i32 = add %x_143, 1i
-                        store %x_144, %130
-                        %131:i32 = load %x_144
-                        store %x_143_phi, %131
-                        next_iteration %b40
+                      $B38: {  # continuing
+                        %149:i32 = add %x_143, 1i
+                        store %x_144, %149
+                        %150:i32 = load %x_144
+                        store %x_143_phi, %150
+                        next_iteration  # -> $B37
                       }
                     }
-                    %132:i32 = load %x_154_phi
-                    store %x_154, %132
-                    %x_155:bool = load %x_155_phi
-                    %134:i32 = load %x_154
-                    store %x_119_phi, %134
-                    if %x_155 [t: %b46] {  # if_20
-                      %b46 = block {  # true
+                    %151:i32 = load %x_154_phi
+                    store %x_154, %151
+                    %152:bool = load %x_155_phi
+                    %x_155:bool = let %152
+                    %154:i32 = load %x_154
+                    store %x_119_phi, %154
+                    if %x_155 [t: $B43] {  # if_20
+                      $B43: {  # true
                         exit_loop  # loop_8
                       }
                     }
@@ -386,69 +402,74 @@
                 store %x_119_phi, 0i
                 exit_loop  # loop_8
               }
-              %b37 = block {  # continuing
-                next_iteration %b36
-              }
             }
             %x_119:ptr<function, i32, read_write> = var
-            %136:i32 = load %x_119_phi
-            store %x_119, %136
-            %137:i32 = load %x_115
-            %138:i32 = load %x_119
-            %139:i32 = add %137, %138
-            %140:i32 = bitcast %139
-            store %x_116, %140
-            %141:bool = eq %x_41, false
-            %142:bool = select %x_41, false, %141
-            if %142 [t: %b47] {  # if_21
-              %b47 = block {  # true
-                %143:i32 = load %x_116
-                store %x_161_phi, %143
+            %156:i32 = load %x_119_phi
+            store %x_119, %156
+            %157:i32 = load %x_115
+            %158:i32 = load %x_119
+            %159:i32 = add %157, %158
+            %160:i32 = bitcast %159
+            store %x_116, %160
+            %161:bool = eq %x_41, false
+            %162:bool = select %x_41, false, %161
+            if %162 [t: $B44] {  # if_21
+              $B44: {  # true
+                %163:i32 = load %x_116
+                store %x_161_phi, %163
                 exit_loop  # loop_7
               }
             }
-            continue %b33
+            continue  # -> $B31
           }
-          %b33 = block {  # continuing
-            %144:i32 = add %x_120, 1i
-            store %x_121, %144
-            %145:i32 = load %x_116
-            store %x_115_phi, %145
-            %146:i32 = load %x_119
-            store %x_118_phi, %146
-            %147:i32 = load %x_121
-            store %x_120_phi, %147
-            next_iteration %b32
+          $B31: {  # continuing
+            %164:i32 = add %x_120, 1i
+            store %x_121, %164
+            %165:i32 = load %x_116
+            store %x_115_phi, %165
+            %166:i32 = load %x_119
+            store %x_118_phi, %166
+            %167:i32 = load %x_121
+            store %x_120_phi, %167
+            next_iteration  # -> $B30
           }
         }
-        %x_161:i32 = load %x_161_phi
-        %149:bool = eq %x_161, 4i
-        if %149 [t: %b48, f: %b49] {  # if_22
-          %b48 = block {  # true
+        %168:i32 = load %x_161_phi
+        %x_161:i32 = let %168
+        %170:bool = eq %x_161, 4i
+        if %170 [t: $B45, f: $B46] {  # if_22
+          $B45: {  # true
             store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
             exit_if  # if_22
           }
-          %b49 = block {  # false
+          $B46: {  # false
             store %x_GLF_color, vec4<f32>(0.0f)
             exit_if  # if_22
           }
         }
         exit_loop  # loop_1
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
-      }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b50 {
-  %b50 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B47: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %152:void = call %main_1
-    %153:vec4<f32> = load %x_GLF_color
-    %154:main_out = construct %153
-    ret %154
+    %173:void = call %main_1
+    %174:vec4<f32> = load %x_GLF_color
+    %175:main_out = construct %174
+    ret %175
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B48: {
+    %177:i32 = convert %value
+    %178:bool = gte %value, -2147483648.0f
+    %179:i32 = select -2147483648i, %177, %178
+    %180:bool = lte %value, 2147483520.0f
+    %181:i32 = select 2147483647i, %179, %180
+    ret %181
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/injection-switch-as-comparison/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/injection-switch-as-comparison/0.spvasm.expected.ir.msl
index 29dafa7..f9d0cd1 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/injection-switch-as-comparison/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/injection-switch-as-comparison/0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,17 +8,17 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%makeFrame_ = func():f32 -> %b2 {
-  %b2 = block {
+%makeFrame_ = func():f32 {
+  $B2: {
     %x_60:ptr<function, f32, read_write> = var
     %x_63:ptr<function, f32, read_write> = var
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3] {  # loop_1
+      $B3: {  # body
         %x_41:ptr<function, bool, read_write> = var
         %x_8:ptr<function, i32, read_write> = var
         %x_44:ptr<function, f32, read_write> = var
@@ -28,8 +28,8 @@
         store %x_41, false
         store %x_8, 0i
         store %x_44, 0.0f
-        loop [b: %b5, c: %b6] {  # loop_2
-          %b5 = block {  # body
+        loop [b: $B4, c: $B5] {  # loop_2
+          $B4: {  # body
             %x_50:ptr<function, f32, read_write> = var
             %x_9:ptr<function, i32, read_write> = var
             %x_52:ptr<function, bool, read_write> = var
@@ -40,11 +40,11 @@
             store %x_61, %17
             %18:i32 = load %x_8
             %19:bool = lt %18, 1i
-            if %19 [t: %b7, f: %b8] {  # if_1
-              %b7 = block {  # true
+            if %19 [t: $B6, f: $B7] {  # if_1
+              $B6: {  # true
                 exit_if  # if_1
               }
-              %b8 = block {  # false
+              $B7: {  # false
                 exit_loop  # loop_2
               }
             }
@@ -54,21 +54,22 @@
             store %x_9, %21
             %22:bool = load %x_41
             store %x_52, %22
-            loop [b: %b9, c: %b10] {  # loop_3
-              %b9 = block {  # body
+            loop [b: $B8] {  # loop_3
+              $B8: {  # body
                 %23:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-                %x_54:f32 = load_vector_element %23, 1u
-                %25:f32 = load %x_50
-                store %x_45, %25
-                %26:bool = load %x_52
-                store %x_42, %26
-                %27:i32 = convert %x_54
-                %28:bool = lt 1i, %27
-                if %28 [t: %b11, f: %b12] {  # if_2
-                  %b11 = block {  # true
+                %24:f32 = load_vector_element %23, 1u
+                %x_54:f32 = let %24
+                %26:f32 = load %x_50
+                store %x_45, %26
+                %27:bool = load %x_52
+                store %x_42, %27
+                %28:i32 = call %tint_f32_to_i32, %x_54
+                %30:bool = lt 1i, %28
+                if %30 [t: $B9, f: $B10] {  # if_2
+                  $B9: {  # true
                     exit_if  # if_2
                   }
-                  %b12 = block {  # false
+                  $B10: {  # false
                     exit_loop  # loop_3
                   }
                 }
@@ -76,70 +77,72 @@
                 store %x_42, true
                 exit_loop  # loop_3
               }
-              %b10 = block {  # continuing
-                store %x_50, 0.0f
-                store %x_9, 0i
-                store %x_52, false
-                next_iteration %b9
-              }
             }
-            %29:f32 = load %x_45
-            store %x_60, %29
-            %30:bool = load %x_42
-            store %x_61, %30
-            %31:bool = load %x_42
-            if %31 [t: %b13] {  # if_3
-              %b13 = block {  # true
+            %31:f32 = load %x_45
+            store %x_60, %31
+            %32:bool = load %x_42
+            store %x_61, %32
+            %33:bool = load %x_42
+            if %33 [t: $B11] {  # if_3
+              $B11: {  # true
                 exit_loop  # loop_2
               }
             }
-            continue %b6
+            continue  # -> $B5
           }
-          %b6 = block {  # continuing
-            %32:i32 = load %x_9
-            %33:i32 = add %32, 1i
-            store %x_7, %33
-            %34:bool = load %x_42
-            store %x_41, %34
-            %35:i32 = load %x_7
-            store %x_8, %35
-            %36:f32 = load %x_45
-            store %x_44, %36
-            next_iteration %b5
+          $B5: {  # continuing
+            %34:i32 = load %x_9
+            %35:i32 = add %34, 1i
+            store %x_7, %35
+            %36:bool = load %x_42
+            store %x_41, %36
+            %37:i32 = load %x_7
+            store %x_8, %37
+            %38:f32 = load %x_45
+            store %x_44, %38
+            next_iteration  # -> $B4
           }
         }
-        %37:f32 = load %x_60
-        store %x_63, %37
-        %38:bool = load %x_61
-        if %38 [t: %b14] {  # if_4
-          %b14 = block {  # true
+        %39:f32 = load %x_60
+        store %x_63, %39
+        %40:bool = load %x_61
+        if %40 [t: $B12] {  # if_4
+          $B12: {  # true
             exit_loop  # loop_1
           }
         }
         store %x_63, 1.0f
         exit_loop  # loop_1
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
-      }
     }
-    %39:f32 = load %x_63
-    ret %39
+    %41:f32 = load %x_63
+    ret %41
   }
 }
-%main_1 = func():void -> %b15 {
-  %b15 = block {
-    %x_34:f32 = call %makeFrame_
+%main_1 = func():void {
+  $B13: {
+    %43:f32 = call %makeFrame_
+    %x_34:f32 = let %43
     store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b16 {
-  %b16 = block {
-    %43:void = call %main_1
-    %44:vec4<f32> = load %x_GLF_color
-    %45:main_out = construct %44
-    ret %45
+%tint_symbol = @fragment func():main_out {
+  $B14: {
+    %46:void = call %main_1
+    %47:vec4<f32> = load %x_GLF_color
+    %48:main_out = construct %47
+    ret %48
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B15: {
+    %50:i32 = convert %value
+    %51:bool = gte %value, -2147483648.0f
+    %52:i32 = select -2147483648i, %50, %51
+    %53:bool = lte %value, 2147483520.0f
+    %54:i32 = select 2147483647i, %52, %53
+    ret %54
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/injection-switch-as-comparison/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/injection-switch-as-comparison/0.wgsl.expected.ir.msl
index 37f08f4..ebeda12 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/injection-switch-as-comparison/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/injection-switch-as-comparison/0.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,17 +8,17 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%makeFrame_ = func():f32 -> %b2 {
-  %b2 = block {
+%makeFrame_ = func():f32 {
+  $B2: {
     %x_60:ptr<function, f32, read_write> = var
     %x_63_phi:ptr<function, f32, read_write> = var
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3] {  # loop_1
+      $B3: {  # body
         %x_41:ptr<function, bool, read_write> = var
         %x_44:ptr<function, f32, read_write> = var
         %x_45:ptr<function, f32, read_write> = var
@@ -31,8 +31,8 @@
         store %x_41_phi, false
         store %x_8_phi, 0i
         store %x_44_phi, 0.0f
-        loop [b: %b5, c: %b6] {  # loop_2
-          %b5 = block {  # body
+        loop [b: $B4, c: $B5] {  # loop_2
+          $B4: {  # body
             %x_50:ptr<function, f32, read_write> = var
             %x_9:ptr<function, i32, read_write> = var
             %x_52:ptr<function, bool, read_write> = var
@@ -44,48 +44,50 @@
             %x_42_phi:ptr<function, bool, read_write> = var
             %24:bool = load %x_41_phi
             store %x_41, %24
-            %x_8:i32 = load %x_8_phi
-            %26:f32 = load %x_44_phi
-            store %x_44, %26
-            %27:f32 = load %x_44
-            store %x_60_phi, %27
-            %28:bool = load %x_41
-            store %x_61_phi, %28
-            %29:bool = lt %x_8, 1i
-            if %29 [t: %b7, f: %b8] {  # if_1
-              %b7 = block {  # true
+            %25:i32 = load %x_8_phi
+            %x_8:i32 = let %25
+            %27:f32 = load %x_44_phi
+            store %x_44, %27
+            %28:f32 = load %x_44
+            store %x_60_phi, %28
+            %29:bool = load %x_41
+            store %x_61_phi, %29
+            %30:bool = lt %x_8, 1i
+            if %30 [t: $B6, f: $B7] {  # if_1
+              $B6: {  # true
                 exit_if  # if_1
               }
-              %b8 = block {  # false
+              $B7: {  # false
                 exit_loop  # loop_2
               }
             }
-            %30:f32 = load %x_44
-            store %x_50_phi, %30
+            %31:f32 = load %x_44
+            store %x_50_phi, %31
             store %x_9_phi, %x_8
-            %31:bool = load %x_41
-            store %x_52_phi, %31
-            loop [b: %b9, c: %b10] {  # loop_3
-              %b9 = block {  # body
-                %32:f32 = load %x_50_phi
-                store %x_50, %32
-                %33:i32 = load %x_9_phi
-                store %x_9, %33
-                %34:bool = load %x_52_phi
-                store %x_52, %34
-                %35:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-                %x_54:f32 = load_vector_element %35, 1u
-                %37:f32 = load %x_50
-                store %x_45_phi, %37
-                %38:bool = load %x_52
-                store %x_42_phi, %38
-                %39:i32 = convert %x_54
-                %40:bool = lt 1i, %39
-                if %40 [t: %b11, f: %b12] {  # if_2
-                  %b11 = block {  # true
+            %32:bool = load %x_41
+            store %x_52_phi, %32
+            loop [b: $B8] {  # loop_3
+              $B8: {  # body
+                %33:f32 = load %x_50_phi
+                store %x_50, %33
+                %34:i32 = load %x_9_phi
+                store %x_9, %34
+                %35:bool = load %x_52_phi
+                store %x_52, %35
+                %36:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
+                %37:f32 = load_vector_element %36, 1u
+                %x_54:f32 = let %37
+                %39:f32 = load %x_50
+                store %x_45_phi, %39
+                %40:bool = load %x_52
+                store %x_42_phi, %40
+                %41:i32 = call %tint_f32_to_i32, %x_54
+                %43:bool = lt 1i, %41
+                if %43 [t: $B9, f: $B10] {  # if_2
+                  $B9: {  # true
                     exit_if  # if_2
                   }
-                  %b12 = block {  # false
+                  $B10: {  # false
                     exit_loop  # loop_3
                   }
                 }
@@ -93,77 +95,81 @@
                 store %x_42_phi, true
                 exit_loop  # loop_3
               }
-              %b10 = block {  # continuing
-                store %x_50_phi, 0.0f
-                store %x_9_phi, 0i
-                store %x_52_phi, false
-                next_iteration %b9
-              }
             }
-            %41:f32 = load %x_45_phi
-            store %x_45, %41
-            %42:bool = load %x_42_phi
-            store %x_42, %42
-            %43:f32 = load %x_45
-            store %x_60_phi, %43
-            %44:bool = load %x_42
-            store %x_61_phi, %44
-            %45:bool = load %x_42
-            if %45 [t: %b13] {  # if_3
-              %b13 = block {  # true
+            %44:f32 = load %x_45_phi
+            store %x_45, %44
+            %45:bool = load %x_42_phi
+            store %x_42, %45
+            %46:f32 = load %x_45
+            store %x_60_phi, %46
+            %47:bool = load %x_42
+            store %x_61_phi, %47
+            %48:bool = load %x_42
+            if %48 [t: $B11] {  # if_3
+              $B11: {  # true
                 exit_loop  # loop_2
               }
             }
-            continue %b6
+            continue  # -> $B5
           }
-          %b6 = block {  # continuing
-            %46:i32 = load %x_9
-            %47:i32 = add %46, 1i
-            %48:i32 = bitcast %47
-            store %x_7, %48
-            %49:bool = load %x_42
-            store %x_41_phi, %49
-            %50:i32 = load %x_7
-            store %x_8_phi, %50
-            %51:f32 = load %x_45
-            store %x_44_phi, %51
-            next_iteration %b5
+          $B5: {  # continuing
+            %49:i32 = load %x_9
+            %50:i32 = add %49, 1i
+            %51:i32 = bitcast %50
+            store %x_7, %51
+            %52:bool = load %x_42
+            store %x_41_phi, %52
+            %53:i32 = load %x_7
+            store %x_8_phi, %53
+            %54:f32 = load %x_45
+            store %x_44_phi, %54
+            next_iteration  # -> $B4
           }
         }
-        %52:f32 = load %x_60_phi
-        store %x_60, %52
-        %x_61:bool = load %x_61_phi
-        %54:f32 = load %x_60
-        store %x_63_phi, %54
-        if %x_61 [t: %b14] {  # if_4
-          %b14 = block {  # true
+        %55:f32 = load %x_60_phi
+        store %x_60, %55
+        %56:bool = load %x_61_phi
+        %x_61:bool = let %56
+        %58:f32 = load %x_60
+        store %x_63_phi, %58
+        if %x_61 [t: $B12] {  # if_4
+          $B12: {  # true
             exit_loop  # loop_1
           }
         }
         store %x_63_phi, 1.0f
         exit_loop  # loop_1
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
-      }
     }
-    %x_63:f32 = load %x_63_phi
+    %59:f32 = load %x_63_phi
+    %x_63:f32 = let %59
     ret %x_63
   }
 }
-%main_1 = func():void -> %b15 {
-  %b15 = block {
-    %x_34:f32 = call %makeFrame_
+%main_1 = func():void {
+  $B13: {
+    %62:f32 = call %makeFrame_
+    %x_34:f32 = let %62
     store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b16 {
-  %b16 = block {
-    %59:void = call %main_1
-    %60:vec4<f32> = load %x_GLF_color
-    %61:main_out = construct %60
-    ret %61
+%tint_symbol = @fragment func():main_out {
+  $B14: {
+    %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 {
+  $B15: {
+    %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
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/int-mat2-struct/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/int-mat2-struct/0-opt.spvasm.expected.ir.msl
index 2e88a5f..48bb465 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/int-mat2-struct/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/int-mat2-struct/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,79 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::LoadVectorElement
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: S = struct @align(8) {
+  f1:i32 @offset(0)
+  f2:mat2x2<f32> @offset(8)
+}
+
+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_GLF_color:ptr<private, vec4<f32>, read_write> = var
+}
+
+%main_1 = func():void {
+  $B2: {
+    %x_41:ptr<function, mat2x2<f32>, read_write> = var
+    %x_6:ptr<function, i32, read_write> = var
+    %x_42:ptr<function, mat2x2<f32>, read_write> = var
+    %x_49:ptr<function, mat2x2<f32>, read_write> = var
+    %8:f32 = load_vector_element %gl_FragCoord, 0u
+    %9:bool = lt %8, 0.0f
+    if %9 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        store %x_42, mat2x2<f32>(vec2<f32>(1.0f, 2.0f), vec2<f32>(3.0f, 4.0f))
+        store %x_49, mat2x2<f32>(vec2<f32>(1.0f, 2.0f), vec2<f32>(3.0f, 4.0f))
+        exit_if  # if_1
+      }
+      $B4: {  # false
+        store %x_42, mat2x2<f32>(vec2<f32>(0.5f, -0.5f), vec2<f32>(-0.5f, 0.5f))
+        store %x_49, mat2x2<f32>(vec2<f32>(0.5f, -0.5f), vec2<f32>(-0.5f, 0.5f))
+        exit_if  # if_1
+      }
+    }
+    %10:mat2x2<f32> = load %x_49
+    %11:mat2x2<f32> = transpose %10
+    %12:S = construct 1i, %11
+    %x_51:S = let %12
+    %14:i32 = access %x_51, 0u
+    %x_52:i32 = let %14
+    store %x_6, %x_52
+    %16:mat2x2<f32> = access %x_51, 1u
+    store %x_41, %16
+    %17:f32 = convert %x_52
+    %18:f32 = let %17
+    %19:ptr<function, vec2<f32>, read_write> = access %x_41, 0u
+    %20:f32 = load_vector_element %19, 0u
+    %21:ptr<function, vec2<f32>, read_write> = access %x_41, 1u
+    %22:f32 = load_vector_element %21, 0u
+    %23:f32 = add %20, %22
+    %24:f32 = let %23
+    %25:ptr<function, vec2<f32>, read_write> = access %x_41, 0u
+    %26:f32 = load_vector_element %25, 1u
+    %27:ptr<function, vec2<f32>, read_write> = access %x_41, 1u
+    %28:f32 = load_vector_element %27, 1u
+    %29:f32 = add %26, %28
+    %30:f32 = let %29
+    %31:f32 = convert %x_52
+    %32:vec4<f32> = construct %18, %24, %30, %31
+    store %x_GLF_color, %32
+    ret
+  }
+}
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B5: {
+    store %gl_FragCoord, %gl_FragCoord_param
+    %35:void = call %main_1
+    %36:vec4<f32> = load %x_GLF_color
+    %37:main_out = construct %36
+    ret %37
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/int-mat2-struct/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/int-mat2-struct/0-opt.wgsl.expected.ir.msl
index 2e88a5f..bb28153 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/int-mat2-struct/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/int-mat2-struct/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,83 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::LoadVectorElement
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: S = struct @align(8) {
+  f1:i32 @offset(0)
+  f2:mat2x2<f32> @offset(8)
+}
+
+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_GLF_color:ptr<private, vec4<f32>, read_write> = var
+}
+
+%main_1 = func():void {
+  $B2: {
+    %x_41:ptr<function, mat2x2<f32>, read_write> = var
+    %x_6:ptr<function, i32, read_write> = var
+    %x_42:ptr<function, mat2x2<f32>, read_write> = var
+    %x_49_phi:ptr<function, mat2x2<f32>, read_write> = var
+    %8:f32 = load_vector_element %gl_FragCoord, 0u
+    %x_44:f32 = let %8
+    %10:bool = lt %x_44, 0.0f
+    if %10 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        store %x_42, mat2x2<f32>(vec2<f32>(1.0f, 2.0f), vec2<f32>(3.0f, 4.0f))
+        store %x_49_phi, mat2x2<f32>(vec2<f32>(1.0f, 2.0f), vec2<f32>(3.0f, 4.0f))
+        exit_if  # if_1
+      }
+      $B4: {  # false
+        store %x_42, mat2x2<f32>(vec2<f32>(0.5f, -0.5f), vec2<f32>(-0.5f, 0.5f))
+        store %x_49_phi, mat2x2<f32>(vec2<f32>(0.5f, -0.5f), vec2<f32>(-0.5f, 0.5f))
+        exit_if  # if_1
+      }
+    }
+    %11:mat2x2<f32> = load %x_49_phi
+    %x_49:mat2x2<f32> = let %11
+    %13:mat2x2<f32> = transpose %x_49
+    %14:S = construct 1i, %13
+    %x_51:S = let %14
+    %16:i32 = access %x_51, 0u
+    %x_52:i32 = let %16
+    store %x_6, %x_52
+    %18:mat2x2<f32> = access %x_51, 1u
+    store %x_41, %18
+    %19:mat2x2<f32> = load %x_41
+    %x_56:mat2x2<f32> = let %19
+    %21:mat2x2<f32> = load %x_41
+    %x_59:mat2x2<f32> = let %21
+    %23:mat2x2<f32> = load %x_41
+    %x_63:mat2x2<f32> = let %23
+    %25:mat2x2<f32> = load %x_41
+    %x_66:mat2x2<f32> = let %25
+    %27:f32 = convert %x_52
+    %28:f32 = let %27
+    %29:f32 = access %x_56, 0u, 0u
+    %30:f32 = access %x_59, 1u, 0u
+    %31:f32 = add %29, %30
+    %32:f32 = access %x_63, 0u, 1u
+    %33:f32 = access %x_66, 1u, 1u
+    %34:f32 = add %32, %33
+    %35:f32 = convert %x_52
+    %36:vec4<f32> = construct %28, %31, %34, %35
+    store %x_GLF_color, %36
+    ret
+  }
+}
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B5: {
+    store %gl_FragCoord, %gl_FragCoord_param
+    %39:void = call %main_1
+    %40:vec4<f32> = load %x_GLF_color
+    %41:main_out = construct %40
+    ret %41
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/loop-dead-if-loop/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/loop-dead-if-loop/0-opt.spvasm.expected.ir.msl
index 59899f2..3548ada 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/loop-dead-if-loop/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/loop-dead-if-loop/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,13 +8,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %k:ptr<function, i32, read_write> = var
     %GLF_dead0j:ptr<function, i32, read_write> = var
     %donor_replacementGLF_dead0stack:ptr<function, array<i32, 10>, read_write> = var
@@ -23,41 +23,41 @@
     %matrix_b:ptr<function, vec4<f32>, read_write> = var
     %b:ptr<function, i32, read_write> = var
     store %k, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %11:i32 = load %k
         %12:bool = lt %11, 4i
-        if %12 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %12 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
         %13:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
         %14:f32 = load_vector_element %13, 1u
         %15:bool = gt 0.0f, %14
-        if %15 [t: %b7] {  # if_2
-          %b7 = block {  # true
+        if %15 [t: $B7] {  # if_2
+          $B7: {  # true
             store %GLF_dead0j, 1i
-            loop [b: %b8, c: %b9] {  # loop_2
-              %b8 = block {  # body
+            loop [b: $B8, c: $B9] {  # loop_2
+              $B8: {  # body
                 %16:ptr<function, i32, read_write> = access %donor_replacementGLF_dead0stack, 0i
                 %17:i32 = load %16
                 %18:bool = lte 1i, %17
-                if %18 [t: %b10, f: %b11] {  # if_3
-                  %b10 = block {  # true
+                if %18 [t: $B10, f: $B11] {  # if_3
+                  $B10: {  # true
                     exit_if  # if_3
                   }
-                  %b11 = block {  # false
+                  $B11: {  # false
                     exit_loop  # loop_2
                   }
                 }
-                continue %b9
+                continue  # -> $B9
               }
-              %b9 = block {  # continuing
-                next_iteration %b8
+              $B9: {  # continuing
+                next_iteration  # -> $B8
               }
             }
             %19:i32 = load %donor_replacementGLF_dead0top
@@ -65,72 +65,75 @@
             %21:i32 = load %donor_replacementGLF_dead0top
             %22:bool = lt %21, 9i
             %23:bool = and %20, %22
-            if %23 [t: %b12, f: %b13] {  # if_4
-              %b12 = block {  # true
+            if %23 [t: $B12, f: $B13] {  # if_4
+              $B12: {  # true
                 %24:i32 = load %donor_replacementGLF_dead0top
-                %x_17:i32 = add %24, 1i
+                %25:i32 = add %24, 1i
+                %x_17:i32 = let %25
                 store %donor_replacementGLF_dead0top, %x_17
                 store %x_54, %x_17
                 exit_if  # if_4
               }
-              %b13 = block {  # false
+              $B13: {  # false
                 store %x_54, 0i
                 exit_if  # if_4
               }
             }
-            %x_18:i32 = load %x_54
-            %27:ptr<function, i32, read_write> = access %donor_replacementGLF_dead0stack, %x_18
-            store %27, 1i
+            %27:i32 = load %x_54
+            %x_18:i32 = let %27
+            %29:ptr<function, i32, read_write> = access %donor_replacementGLF_dead0stack, %x_18
+            store %29, 1i
             exit_if  # if_2
           }
         }
         store %matrix_b, vec4<f32>(0.0f)
         store %b, 3i
-        loop [b: %b14, c: %b15] {  # loop_3
-          %b14 = block {  # body
-            %28:i32 = load %b
-            %29:bool = gte %28, 0i
-            if %29 [t: %b16, f: %b17] {  # if_5
-              %b16 = block {  # true
+        loop [b: $B14, c: $B15] {  # loop_3
+          $B14: {  # body
+            %30:i32 = load %b
+            %31:bool = gte %30, 0i
+            if %31 [t: $B16, f: $B17] {  # if_5
+              $B16: {  # true
                 exit_if  # if_5
               }
-              %b17 = block {  # false
+              $B17: {  # false
                 exit_loop  # loop_3
               }
             }
-            %x_20:i32 = load %b
-            %31:i32 = load %b
-            %32:f32 = load_vector_element %matrix_b, %31
-            %33:f32 = sub %32, 1.0f
-            store_vector_element %matrix_b, %x_20, %33
-            continue %b15
-          }
-          %b15 = block {  # continuing
+            %32:i32 = load %b
+            %x_20:i32 = let %32
             %34:i32 = load %b
-            %35:i32 = sub %34, 1i
-            store %b, %35
-            next_iteration %b14
+            %35:f32 = load_vector_element %matrix_b, %34
+            %36:f32 = sub %35, 1.0f
+            store_vector_element %matrix_b, %x_20, %36
+            continue  # -> $B15
+          }
+          $B15: {  # continuing
+            %37:i32 = load %b
+            %38:i32 = sub %37, 1i
+            store %b, %38
+            next_iteration  # -> $B14
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %36:i32 = load %k
-        %37:i32 = add %36, 1i
-        store %k, %37
-        next_iteration %b3
+      $B4: {  # continuing
+        %39:i32 = load %k
+        %40:i32 = add %39, 1i
+        store %k, %40
+        next_iteration  # -> $B3
       }
     }
     store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b18 {
-  %b18 = block {
-    %39:void = call %main_1
-    %40:vec4<f32> = load %x_GLF_color
-    %41:main_out = construct %40
-    ret %41
+%tint_symbol = @fragment func():main_out {
+  $B18: {
+    %42:void = call %main_1
+    %43:vec4<f32> = load %x_GLF_color
+    %44:main_out = construct %43
+    ret %44
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/loop-dead-if-loop/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/loop-dead-if-loop/0-opt.wgsl.expected.ir.msl
index d43c441..e2c84a0 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/loop-dead-if-loop/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/loop-dead-if-loop/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,13 +8,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %k:ptr<function, i32, read_write> = var
     %GLF_dead0j:ptr<function, i32, read_write> = var
     %donor_replacementGLF_dead0stack:ptr<function, array<i32, 10>, read_write> = var
@@ -23,114 +23,128 @@
     %matrix_b:ptr<function, vec4<f32>, read_write> = var
     %b:ptr<function, i32, read_write> = var
     store %k, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_12:i32 = load %k
-        %12:bool = lt %x_12, 4i
-        if %12 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %11:i32 = load %k
+        %x_12:i32 = let %11
+        %13:bool = lt %x_12, 4i
+        if %13 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %13:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-        %x_62:f32 = load_vector_element %13, 1u
-        %15:bool = gt 0.0f, %x_62
-        if %15 [t: %b7] {  # if_2
-          %b7 = block {  # true
+        %14:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
+        %15:f32 = load_vector_element %14, 1u
+        %x_62:f32 = let %15
+        %17:bool = gt 0.0f, %x_62
+        if %17 [t: $B7] {  # if_2
+          $B7: {  # true
             store %GLF_dead0j, 1i
-            loop [b: %b8, c: %b9] {  # loop_2
-              %b8 = block {  # body
-                %16:ptr<function, i32, read_write> = access %donor_replacementGLF_dead0stack, 0i
-                %x_13:i32 = load %16
-                %18:bool = lte 1i, %x_13
-                if %18 [t: %b10, f: %b11] {  # if_3
-                  %b10 = block {  # true
+            loop [b: $B8, c: $B9] {  # loop_2
+              $B8: {  # body
+                %18:ptr<function, i32, read_write> = access %donor_replacementGLF_dead0stack, 0i
+                %19:i32 = load %18
+                %x_13:i32 = let %19
+                %21:bool = lte 1i, %x_13
+                if %21 [t: $B10, f: $B11] {  # if_3
+                  $B10: {  # true
                     exit_if  # if_3
                   }
-                  %b11 = block {  # false
+                  $B11: {  # false
                     exit_loop  # loop_2
                   }
                 }
-                continue %b9
+                continue  # -> $B9
               }
-              %b9 = block {  # continuing
-                next_iteration %b8
+              $B9: {  # continuing
+                next_iteration  # -> $B8
               }
             }
-            %x_14:i32 = load %donor_replacementGLF_dead0top
-            %x_15:i32 = load %donor_replacementGLF_dead0top
-            %21:bool = gte %x_14, 0i
-            %22:bool = lt %x_15, 9i
-            %23:bool = and %21, %22
-            if %23 [t: %b12, f: %b13] {  # if_4
-              %b12 = block {  # true
-                %x_16:i32 = load %donor_replacementGLF_dead0top
-                %x_17:i32 = add %x_16, 1i
+            %22:i32 = load %donor_replacementGLF_dead0top
+            %x_14:i32 = let %22
+            %24:i32 = load %donor_replacementGLF_dead0top
+            %x_15:i32 = let %24
+            %26:bool = gte %x_14, 0i
+            %27:bool = lt %x_15, 9i
+            %28:bool = and %26, %27
+            if %28 [t: $B12, f: $B13] {  # if_4
+              $B12: {  # true
+                %29:i32 = load %donor_replacementGLF_dead0top
+                %x_16:i32 = let %29
+                %31:i32 = add %x_16, 1i
+                %x_17:i32 = let %31
                 store %donor_replacementGLF_dead0top, %x_17
                 store %x_54, %x_17
                 exit_if  # if_4
               }
-              %b13 = block {  # false
+              $B13: {  # false
                 store %x_54, 0i
                 exit_if  # if_4
               }
             }
-            %x_18:i32 = load %x_54
-            %27:ptr<function, i32, read_write> = access %donor_replacementGLF_dead0stack, %x_18
-            store %27, 1i
+            %33:i32 = load %x_54
+            %x_18:i32 = let %33
+            %35:ptr<function, i32, read_write> = access %donor_replacementGLF_dead0stack, %x_18
+            store %35, 1i
             exit_if  # if_2
           }
         }
         store %matrix_b, vec4<f32>(0.0f)
         store %b, 3i
-        loop [b: %b14, c: %b15] {  # loop_3
-          %b14 = block {  # body
-            %x_19:i32 = load %b
-            %29:bool = gte %x_19, 0i
-            if %29 [t: %b16, f: %b17] {  # if_5
-              %b16 = block {  # true
+        loop [b: $B14, c: $B15] {  # loop_3
+          $B14: {  # body
+            %36:i32 = load %b
+            %x_19:i32 = let %36
+            %38:bool = gte %x_19, 0i
+            if %38 [t: $B16, f: $B17] {  # if_5
+              $B16: {  # true
                 exit_if  # if_5
               }
-              %b17 = block {  # false
+              $B17: {  # false
                 exit_loop  # loop_3
               }
             }
-            %x_20:i32 = load %b
-            %x_21:i32 = load %b
-            %x_87:f32 = load_vector_element %matrix_b, %x_21
-            %33:f32 = sub %x_87, 1.0f
-            store_vector_element %matrix_b, %x_20, %33
-            continue %b15
+            %39:i32 = load %b
+            %x_20:i32 = let %39
+            %41:i32 = load %b
+            %x_21:i32 = let %41
+            %43:f32 = load_vector_element %matrix_b, %x_21
+            %x_87:f32 = let %43
+            %45:f32 = sub %x_87, 1.0f
+            store_vector_element %matrix_b, %x_20, %45
+            continue  # -> $B15
           }
-          %b15 = block {  # continuing
-            %x_22:i32 = load %b
-            %35:i32 = sub %x_22, 1i
-            store %b, %35
-            next_iteration %b14
+          $B15: {  # continuing
+            %46:i32 = load %b
+            %x_22:i32 = let %46
+            %48:i32 = sub %x_22, 1i
+            store %b, %48
+            next_iteration  # -> $B14
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_24:i32 = load %k
-        %37:i32 = add %x_24, 1i
-        store %k, %37
-        next_iteration %b3
+      $B4: {  # continuing
+        %49:i32 = load %k
+        %x_24:i32 = let %49
+        %51:i32 = add %x_24, 1i
+        store %k, %51
+        next_iteration  # -> $B3
       }
     }
     store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b18 {
-  %b18 = block {
-    %39:void = call %main_1
-    %40:vec4<f32> = load %x_GLF_color
-    %41:main_out = construct %40
-    ret %41
+%tint_symbol = @fragment func():main_out {
+  $B18: {
+    %53:void = call %main_1
+    %54:vec4<f32> = load %x_GLF_color
+    %55:main_out = construct %54
+    ret %55
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/loop-nested-ifs/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/loop-nested-ifs/0-opt.spvasm.expected.ir.msl
index efdd3b1..a6a47b6 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/loop-nested-ifs/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/loop-nested-ifs/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,87 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+}
+
+%main_1 = func():void {
+  $B2: {
+    %j:ptr<function, i32, read_write> = var
+    %a:ptr<function, f32, read_write> = var
+    store %j, 0i
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %5:i32 = load %j
+        %6:bool = lt %5, 2i
+        if %6 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
+            exit_if  # if_1
+          }
+          $B6: {  # false
+            exit_loop  # loop_1
+          }
+        }
+        %7:i32 = load %j
+        %8:bool = lt %7, 1i
+        if %8 [t: $B7] {  # if_2
+          $B7: {  # true
+            store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+            exit_if  # if_2
+          }
+        }
+        %9:i32 = load %j
+        %10:bool = neq %9, 3i
+        if %10 [t: $B8] {  # if_3
+          $B8: {  # true
+            %11:i32 = load %j
+            %12:bool = neq %11, 4i
+            if %12 [t: $B9] {  # if_4
+              $B9: {  # true
+                %13:i32 = load %j
+                %14:bool = eq %13, 5i
+                if %14 [t: $B10, f: $B11] {  # if_5
+                  $B10: {  # true
+                    store_vector_element %x_GLF_color, 0u, 4.0f
+                    exit_if  # if_5
+                  }
+                  $B11: {  # false
+                    store %a, 4.0f
+                    store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+                    exit_if  # if_5
+                  }
+                }
+                exit_if  # if_4
+              }
+            }
+            exit_if  # if_3
+          }
+        }
+        continue  # -> $B4
+      }
+      $B4: {  # continuing
+        %15:i32 = load %j
+        %16:i32 = add %15, 1i
+        store %j, %16
+        next_iteration  # -> $B3
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B12: {
+    %18:void = call %main_1
+    %19:vec4<f32> = load %x_GLF_color
+    %20:main_out = construct %19
+    ret %20
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/loop-nested-ifs/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/loop-nested-ifs/0-opt.wgsl.expected.ir.msl
index efdd3b1..d98575f 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/loop-nested-ifs/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/loop-nested-ifs/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,93 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+}
+
+%main_1 = func():void {
+  $B2: {
+    %j:ptr<function, i32, read_write> = var
+    %a:ptr<function, f32, read_write> = var
+    store %j, 0i
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %5:i32 = load %j
+        %x_6:i32 = let %5
+        %7:bool = lt %x_6, 2i
+        if %7 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
+            exit_if  # if_1
+          }
+          $B6: {  # false
+            exit_loop  # loop_1
+          }
+        }
+        %8:i32 = load %j
+        %x_7:i32 = let %8
+        %10:bool = lt %x_7, 1i
+        if %10 [t: $B7] {  # if_2
+          $B7: {  # true
+            store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+            exit_if  # if_2
+          }
+        }
+        %11:i32 = load %j
+        %x_8:i32 = let %11
+        %13:bool = neq %x_8, 3i
+        if %13 [t: $B8] {  # if_3
+          $B8: {  # true
+            %14:i32 = load %j
+            %x_9:i32 = let %14
+            %16:bool = neq %x_9, 4i
+            if %16 [t: $B9] {  # if_4
+              $B9: {  # true
+                %17:i32 = load %j
+                %x_10:i32 = let %17
+                %19:bool = eq %x_10, 5i
+                if %19 [t: $B10, f: $B11] {  # if_5
+                  $B10: {  # true
+                    store_vector_element %x_GLF_color, 0u, 4.0f
+                    exit_if  # if_5
+                  }
+                  $B11: {  # false
+                    store %a, 4.0f
+                    store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+                    exit_if  # if_5
+                  }
+                }
+                exit_if  # if_4
+              }
+            }
+            exit_if  # if_3
+          }
+        }
+        continue  # -> $B4
+      }
+      $B4: {  # continuing
+        %20:i32 = load %j
+        %x_11:i32 = let %20
+        %22:i32 = add %x_11, 1i
+        store %j, %22
+        next_iteration  # -> $B3
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B12: {
+    %24:void = call %main_1
+    %25:vec4<f32> = load %x_GLF_color
+    %26:main_out = construct %25
+    ret %26
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/loops-ifs-continues-call/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/loops-ifs-continues-call/0.spvasm.expected.ir.msl
index 9074c79..390eee5 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/loops-ifs-continues-call/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/loops-ifs-continues-call/0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -12,135 +12,150 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_8:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%binarySearch_struct_BinarySearchObject_i1_10_1_ = func(%obj:ptr<function, BinarySearchObject, read_write>):i32 -> %b2 {
-  %b2 = block {
+%binarySearch_struct_BinarySearchObject_i1_10_1_ = func(%obj:ptr<function, BinarySearchObject, read_write>):i32 {
+  $B2: {
     %m:ptr<function, i32, read_write> = var
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %6:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
         %7:f32 = load_vector_element %6, 0u
         %8:bool = gt %7, 1.0f
-        if %8 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %8 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
         %9:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
         %10:f32 = load_vector_element %9, 0u
-        %11:i32 = convert %10
+        %11:i32 = call %tint_f32_to_i32, %10
         store %m, %11
-        %12:i32 = load %m
-        %13:ptr<function, i32, read_write> = access %obj, 0u, %12
-        %14:i32 = load %13
-        %15:bool = eq %14, 1i
-        if %15 [t: %b7] {  # if_2
-          %b7 = block {  # true
+        %13:i32 = load %m
+        %14:ptr<function, i32, read_write> = access %obj, 0u, %13
+        %15:i32 = load %14
+        %16:bool = eq %15, 1i
+        if %16 [t: $B7] {  # if_2
+          $B7: {  # true
             ret 1i
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
     ret 1i
   }
 }
-%main_1 = func():void -> %b8 {
-  %b8 = block {
+%main_1 = func():void {
+  $B8: {
     %i:ptr<function, i32, read_write> = var
     %obj_1:ptr<function, BinarySearchObject, read_write> = var
     %param:ptr<function, BinarySearchObject, read_write> = var
     store %i, 0i
-    loop [b: %b9, c: %b10] {  # loop_2
-      %b9 = block {  # body
-        %20:i32 = load %i
-        %21:bool = lt %20, 10i
-        if %21 [t: %b11, f: %b12] {  # if_3
-          %b11 = block {  # true
+    loop [b: $B9, c: $B10] {  # loop_2
+      $B9: {  # body
+        %21:i32 = load %i
+        %22:bool = lt %21, 10i
+        if %22 [t: $B11, f: $B12] {  # if_3
+          $B11: {  # true
             exit_if  # if_3
           }
-          %b12 = block {  # false
+          $B12: {  # false
             exit_loop  # loop_2
           }
         }
-        %22:i32 = load %i
-        %23:bool = neq %22, 3i
-        if %23 [t: %b13] {  # if_4
-          %b13 = block {  # true
-            %24:i32 = load %i
-            %25:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
-            %26:f32 = load_vector_element %25, 0u
-            %27:i32 = convert %26
-            %28:i32 = sub %24, %27
-            %29:bool = eq %28, 4i
-            if %29 [t: %b14, f: %b15] {  # if_5
-              %b14 = block {  # true
-                %x_21:i32 = load %i
-                %31:ptr<function, i32, read_write> = access %obj_1, 0u, %x_21
-                store %31, 11i
+        %23:i32 = load %i
+        %24:bool = neq %23, 3i
+        if %24 [t: $B13] {  # if_4
+          $B13: {  # true
+            %25:i32 = load %i
+            %26:i32 = let %25
+            %27:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
+            %28:f32 = load_vector_element %27, 0u
+            %29:i32 = call %tint_f32_to_i32, %28
+            %30:i32 = sub %26, %29
+            %31:bool = eq %30, 4i
+            if %31 [t: $B14, f: $B15] {  # if_5
+              $B14: {  # true
+                %32:i32 = load %i
+                %x_21:i32 = let %32
+                %34:ptr<function, i32, read_write> = access %obj_1, 0u, %x_21
+                store %34, 11i
                 exit_if  # if_5
               }
-              %b15 = block {  # false
-                %32:i32 = load %i
-                %33:bool = eq %32, 6i
-                if %33 [t: %b16] {  # if_6
-                  %b16 = block {  # true
-                    %x_23:i32 = load %i
-                    %35:ptr<function, i32, read_write> = access %obj_1, 0u, %x_23
-                    store %35, 17i
+              $B15: {  # false
+                %35:i32 = load %i
+                %36:bool = eq %35, 6i
+                if %36 [t: $B16] {  # if_6
+                  $B16: {  # true
+                    %37:i32 = load %i
+                    %x_23:i32 = let %37
+                    %39:ptr<function, i32, read_write> = access %obj_1, 0u, %x_23
+                    store %39, 17i
                     exit_if  # if_6
                   }
                 }
-                continue %b10
+                continue  # -> $B10
               }
             }
             exit_if  # if_4
           }
         }
-        loop [b: %b17, c: %b18] {  # loop_3
-          %b17 = block {  # body
-            continue %b18
+        loop [b: $B17, c: $B18] {  # loop_3
+          $B17: {  # body
+            continue  # -> $B18
           }
-          %b18 = block {  # continuing
-            %36:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
-            %x_82:f32 = load_vector_element %36, 1u
-            %38:bool = gt 0.0f, %x_82
-            %39:bool = eq %38, false
-            break_if %39 %b17
+          $B18: {  # continuing
+            %40:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
+            %41:f32 = load_vector_element %40, 1u
+            %x_82:f32 = let %41
+            %43:bool = gt 0.0f, %x_82
+            %44:bool = eq %43, false
+            break_if %44  # -> [t: exit_loop loop_3, f: $B17]
           }
         }
-        continue %b10
+        continue  # -> $B10
       }
-      %b10 = block {  # continuing
-        %40:i32 = load %i
-        %41:i32 = add %40, 1i
-        store %i, %41
-        next_iteration %b9
+      $B10: {  # continuing
+        %45:i32 = load %i
+        %46:i32 = add %45, 1i
+        store %i, %46
+        next_iteration  # -> $B9
       }
     }
-    %42:BinarySearchObject = load %obj_1
-    store %param, %42
-    %x_26:i32 = call %binarySearch_struct_BinarySearchObject_i1_10_1_, %param
+    %47:BinarySearchObject = load %obj_1
+    store %param, %47
+    %48:i32 = call %binarySearch_struct_BinarySearchObject_i1_10_1_, %param
+    %x_26:i32 = let %48
     store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b19 {
-  %b19 = block {
-    %45:void = call %main_1
-    %46:vec4<f32> = load %x_GLF_color
-    %47:main_out = construct %46
-    ret %47
+%tint_symbol = @fragment func():main_out {
+  $B19: {
+    %51:void = call %main_1
+    %52:vec4<f32> = load %x_GLF_color
+    %53:main_out = construct %52
+    ret %53
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B20: {
+    %55:i32 = convert %value
+    %56:bool = gte %value, -2147483648.0f
+    %57:i32 = select -2147483648i, %55, %56
+    %58:bool = lte %value, 2147483520.0f
+    %59:i32 = select 2147483647i, %57, %58
+    ret %59
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/loops-ifs-continues-call/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/loops-ifs-continues-call/0.wgsl.expected.ir.msl
index d4d695e..ce51edd 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/loops-ifs-continues-call/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/loops-ifs-continues-call/0.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -12,135 +12,160 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_8:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%binarySearch_struct_BinarySearchObject_i1_10_1_ = func(%obj:ptr<function, BinarySearchObject, read_write>):i32 -> %b2 {
-  %b2 = block {
+%binarySearch_struct_BinarySearchObject_i1_10_1_ = func(%obj:ptr<function, BinarySearchObject, read_write>):i32 {
+  $B2: {
     %m:ptr<function, i32, read_write> = var
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %6:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
-        %x_91:f32 = load_vector_element %6, 0u
-        %8:bool = gt %x_91, 1.0f
-        if %8 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %7:f32 = load_vector_element %6, 0u
+        %x_91:f32 = let %7
+        %9:bool = gt %x_91, 1.0f
+        if %9 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %9:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
-        %x_95:f32 = load_vector_element %9, 0u
-        %11:i32 = convert %x_95
-        store %m, %11
-        %x_14:i32 = load %m
-        %13:ptr<function, i32, read_write> = access %obj, 0u, %x_14
-        %x_15:i32 = load %13
-        %15:bool = eq %x_15, 1i
-        if %15 [t: %b7] {  # if_2
-          %b7 = block {  # true
+        %10:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
+        %11:f32 = load_vector_element %10, 0u
+        %x_95:f32 = let %11
+        %13:i32 = call %tint_f32_to_i32, %x_95
+        store %m, %13
+        %15:i32 = load %m
+        %x_14:i32 = let %15
+        %17:ptr<function, i32, read_write> = access %obj, 0u, %x_14
+        %18:i32 = load %17
+        %x_15:i32 = let %18
+        %20:bool = eq %x_15, 1i
+        if %20 [t: $B7] {  # if_2
+          $B7: {  # true
             ret 1i
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
     ret 1i
   }
 }
-%main_1 = func():void -> %b8 {
-  %b8 = block {
+%main_1 = func():void {
+  $B8: {
     %i:ptr<function, i32, read_write> = var
     %obj_1:ptr<function, BinarySearchObject, read_write> = var
     %param:ptr<function, BinarySearchObject, read_write> = var
     store %i, 0i
-    loop [b: %b9, c: %b10] {  # loop_2
-      %b9 = block {  # body
-        %x_16:i32 = load %i
-        %21:bool = lt %x_16, 10i
-        if %21 [t: %b11, f: %b12] {  # if_3
-          %b11 = block {  # true
+    loop [b: $B9, c: $B10] {  # loop_2
+      $B9: {  # body
+        %25:i32 = load %i
+        %x_16:i32 = let %25
+        %27:bool = lt %x_16, 10i
+        if %27 [t: $B11, f: $B12] {  # if_3
+          $B11: {  # true
             exit_if  # if_3
           }
-          %b12 = block {  # false
+          $B12: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_17:i32 = load %i
-        %23:bool = neq %x_17, 3i
-        if %23 [t: %b13] {  # if_4
-          %b13 = block {  # true
-            %x_18:i32 = load %i
-            %25:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
-            %x_67:f32 = load_vector_element %25, 0u
-            %27:i32 = convert %x_67
-            %28:i32 = sub %x_18, %27
-            %29:bool = eq %28, 4i
-            if %29 [t: %b14, f: %b15] {  # if_5
-              %b14 = block {  # true
-                %x_21:i32 = load %i
-                %31:ptr<function, i32, read_write> = access %obj_1, 0u, %x_21
-                store %31, 11i
+        %28:i32 = load %i
+        %x_17:i32 = let %28
+        %30:bool = neq %x_17, 3i
+        if %30 [t: $B13] {  # if_4
+          $B13: {  # true
+            %31:i32 = load %i
+            %x_18:i32 = let %31
+            %33:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
+            %34:f32 = load_vector_element %33, 0u
+            %x_67:f32 = let %34
+            %36:i32 = call %tint_f32_to_i32, %x_67
+            %37:i32 = sub %x_18, %36
+            %38:bool = eq %37, 4i
+            if %38 [t: $B14, f: $B15] {  # if_5
+              $B14: {  # true
+                %39:i32 = load %i
+                %x_21:i32 = let %39
+                %41:ptr<function, i32, read_write> = access %obj_1, 0u, %x_21
+                store %41, 11i
                 exit_if  # if_5
               }
-              %b15 = block {  # false
-                %x_22:i32 = load %i
-                %33:bool = eq %x_22, 6i
-                if %33 [t: %b16] {  # if_6
-                  %b16 = block {  # true
-                    %x_23:i32 = load %i
-                    %35:ptr<function, i32, read_write> = access %obj_1, 0u, %x_23
-                    store %35, 17i
+              $B15: {  # false
+                %42:i32 = load %i
+                %x_22:i32 = let %42
+                %44:bool = eq %x_22, 6i
+                if %44 [t: $B16] {  # if_6
+                  $B16: {  # true
+                    %45:i32 = load %i
+                    %x_23:i32 = let %45
+                    %47:ptr<function, i32, read_write> = access %obj_1, 0u, %x_23
+                    store %47, 17i
                     exit_if  # if_6
                   }
                 }
-                continue %b10
+                continue  # -> $B10
               }
             }
             exit_if  # if_4
           }
         }
-        loop [b: %b17, c: %b18] {  # loop_3
-          %b17 = block {  # body
-            continue %b18
+        loop [b: $B17, c: $B18] {  # loop_3
+          $B17: {  # body
+            continue  # -> $B18
           }
-          %b18 = block {  # continuing
-            %36:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
-            %x_82:f32 = load_vector_element %36, 1u
-            %38:bool = gt 0.0f, %x_82
-            %39:bool = eq %38, false
-            break_if %39 %b17
+          $B18: {  # continuing
+            %48:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
+            %49:f32 = load_vector_element %48, 1u
+            %x_82:f32 = let %49
+            %51:bool = gt 0.0f, %x_82
+            %52:bool = eq %51, false
+            break_if %52  # -> [t: exit_loop loop_3, f: $B17]
           }
         }
-        continue %b10
+        continue  # -> $B10
       }
-      %b10 = block {  # continuing
-        %x_24:i32 = load %i
-        %41:i32 = add %x_24, 1i
-        store %i, %41
-        next_iteration %b9
+      $B10: {  # continuing
+        %53:i32 = load %i
+        %x_24:i32 = let %53
+        %55:i32 = add %x_24, 1i
+        store %i, %55
+        next_iteration  # -> $B9
       }
     }
-    %x_84:BinarySearchObject = load %obj_1
+    %56:BinarySearchObject = load %obj_1
+    %x_84:BinarySearchObject = let %56
     store %param, %x_84
-    %x_26:i32 = call %binarySearch_struct_BinarySearchObject_i1_10_1_, %param
+    %58:i32 = call %binarySearch_struct_BinarySearchObject_i1_10_1_, %param
+    %x_26:i32 = let %58
     store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b19 {
-  %b19 = block {
-    %45:void = call %main_1
-    %46:vec4<f32> = load %x_GLF_color
-    %47:main_out = construct %46
-    ret %47
+%tint_symbol = @fragment func():main_out {
+  $B19: {
+    %61:void = call %main_1
+    %62:vec4<f32> = load %x_GLF_color
+    %63:main_out = construct %62
+    ret %63
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B20: {
+    %65:i32 = convert %value
+    %66:bool = gte %value, -2147483648.0f
+    %67:i32 = select -2147483648i, %65, %66
+    %68:bool = lte %value, 2147483520.0f
+    %69:i32 = select 2147483647i, %67, %68
+    ret %69
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/matrices-and-return-in-loop/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/matrices-and-return-in-loop/0.spvasm.expected.ir.msl
index cdbf128..3126724 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/matrices-and-return-in-loop/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/matrices-and-return-in-loop/0.spvasm.expected.ir.msl
@@ -1,6 +1,59 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
+../../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
+  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
+  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+}
+
+%f_mf22_ = func(%m:ptr<function, mat2x2<f32>, read_write>):vec3<f32> {
+  $B2: {
+    loop [b: $B3] {  # loop_1
+      $B3: {  # body
+        ret vec3<f32>(1.0f)
+      }
+    }
+    unreachable
+  }
+}
+%main_1 = func():void {
+  $B4: {
+    %param:ptr<function, mat2x2<f32>, read_write> = var
+    %x_38:ptr<function, mat2x2<f32>, read_write> = var
+    %8:f32 = load_vector_element %gl_FragCoord, 0u
+    %x_34:f32 = let %8
+    store %x_38, mat2x2<f32>(vec2<f32>(0.0f))
+    %10:bool = gte %x_34, 0.0f
+    if %10 [t: $B5] {  # if_1
+      $B5: {  # true
+        store %x_38, mat2x2<f32>(vec2<f32>(1.0f, 0.0f), vec2<f32>(0.0f, 1.0f))
+        exit_if  # if_1
+      }
+    }
+    %11:mat2x2<f32> = load %x_38
+    %12:mat2x2<f32> = load %x_38
+    %13:mat2x2<f32> = mul %11, %12
+    store %param, %13
+    %14:vec3<f32> = call %f_mf22_, %param
+    %x_40:vec3<f32> = let %14
+    store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+    ret
+  }
+}
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B6: {
+    store %gl_FragCoord, %gl_FragCoord_param
+    %18:void = call %main_1
+    %19:vec4<f32> = load %x_GLF_color
+    %20:main_out = construct %19
+    ret %20
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/matrices-and-return-in-loop/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/matrices-and-return-in-loop/0.wgsl.expected.ir.msl
index cdbf128..1d74d95 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/matrices-and-return-in-loop/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/matrices-and-return-in-loop/0.wgsl.expected.ir.msl
@@ -1,6 +1,59 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
+../../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
+  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
+  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+}
+
+%f_mf22_ = func(%m:ptr<function, mat2x2<f32>, read_write>):vec3<f32> {
+  $B2: {
+    loop [b: $B3] {  # loop_1
+      $B3: {  # body
+        ret vec3<f32>(1.0f)
+      }
+    }
+    unreachable
+  }
+}
+%main_1 = func():void {
+  $B4: {
+    %param:ptr<function, mat2x2<f32>, read_write> = var
+    %x_38_phi:ptr<function, mat2x2<f32>, read_write> = var
+    %8:f32 = load_vector_element %gl_FragCoord, 0u
+    %x_34:f32 = let %8
+    store %x_38_phi, mat2x2<f32>(vec2<f32>(0.0f))
+    %10:bool = gte %x_34, 0.0f
+    if %10 [t: $B5] {  # if_1
+      $B5: {  # true
+        store %x_38_phi, mat2x2<f32>(vec2<f32>(1.0f, 0.0f), vec2<f32>(0.0f, 1.0f))
+        exit_if  # if_1
+      }
+    }
+    %11:mat2x2<f32> = load %x_38_phi
+    %x_38:mat2x2<f32> = let %11
+    %13:mat2x2<f32> = mul %x_38, %x_38
+    store %param, %13
+    %14:vec3<f32> = call %f_mf22_, %param
+    %x_40:vec3<f32> = let %14
+    store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+    ret
+  }
+}
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B6: {
+    store %gl_FragCoord, %gl_FragCoord_param
+    %18:void = call %main_1
+    %19:vec4<f32> = load %x_GLF_color
+    %20:main_out = construct %19
+    ret %20
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/max-mix-conditional-discard/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/max-mix-conditional-discard/0-opt.spvasm.expected.ir.msl
index b283127..b2ae302 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/max-mix-conditional-discard/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/max-mix-conditional-discard/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,39 +8,40 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gv:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %temp:ptr<function, i32, read_write> = var
-    %6:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
-    %7:f32 = load_vector_element %6, 0u
-    %8:bool = gt %7, 2.0f
-    if %8 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %9:vec4<f32> = load %gv
-        %10:vec4<f32> = mix vec4<f32>(1.0f), vec4<f32>(1.0f), %9
-        %11:vec4<f32> = max %10, vec4<f32>(8.6000003814697265625f)
-        %12:f32 = access %11, 1u
-        %13:i32 = convert %12
-        store %temp, %13
-        %14:i32 = load %temp
-        %15:bool = lt %14, 150i
-        if %15 [t: %b4] {  # if_2
-          %b4 = block {  # true
-            discard
+    %7:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
+    %8:f32 = load_vector_element %7, 0u
+    %9:bool = gt %8, 2.0f
+    if %9 [t: $B3] {  # if_1
+      $B3: {  # true
+        %10:vec4<f32> = load %gv
+        %11:vec4<f32> = mix vec4<f32>(1.0f), vec4<f32>(1.0f), %10
+        %12:vec4<f32> = max %11, vec4<f32>(8.6000003814697265625f)
+        %13:f32 = access %12, 1u
+        %14:i32 = call %tint_f32_to_i32, %13
+        store %temp, %14
+        %16:i32 = load %temp
+        %17:bool = lt %16, 150i
+        if %17 [t: $B4] {  # if_2
+          $B4: {  # true
+            store %continue_execution, false
             exit_if  # if_2
           }
         }
-        %16:i32 = load %temp
-        %17:bool = lt %16, 180i
-        if %17 [t: %b5] {  # if_3
-          %b5 = block {  # true
-            discard
+        %18:i32 = load %temp
+        %19:bool = lt %18, 180i
+        if %19 [t: $B5] {  # if_3
+          $B5: {  # true
+            store %continue_execution, false
             exit_if  # if_3
           }
         }
@@ -51,12 +52,29 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b6 {
-  %b6 = block {
-    %19:void = call %main_1
-    %20:vec4<f32> = load %x_GLF_color
-    %21:main_out = construct %20
-    ret %21
+%tint_symbol = @fragment func():main_out {
+  $B6: {
+    %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: $B7] {  # if_4
+      $B7: {  # true
+        terminate_invocation
+      }
+    }
+    ret %23
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B8: {
+    %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
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/max-mix-conditional-discard/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/max-mix-conditional-discard/0-opt.wgsl.expected.ir.msl
index d06e1fe..9a38ac1 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/max-mix-conditional-discard/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/max-mix-conditional-discard/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,39 +8,44 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gv:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %temp:ptr<function, i32, read_write> = var
-    %6:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
-    %x_39:f32 = load_vector_element %6, 0u
-    %8:bool = gt %x_39, 2.0f
-    if %8 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %x_8:vec4<f32> = load %gv
-        %10:vec4<f32> = mix vec4<f32>(1.0f), vec4<f32>(1.0f), %x_8
-        %11:vec4<f32> = max %10, vec4<f32>(8.6000003814697265625f)
-        %12:f32 = access %11, 1u
-        %13:i32 = convert %12
-        store %temp, %13
-        %x_44:i32 = load %temp
-        %15:bool = lt %x_44, 150i
-        if %15 [t: %b4] {  # if_2
-          %b4 = block {  # true
-            discard
+    %7:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
+    %8:f32 = load_vector_element %7, 0u
+    %x_39:f32 = let %8
+    %10:bool = gt %x_39, 2.0f
+    if %10 [t: $B3] {  # if_1
+      $B3: {  # true
+        %11:vec4<f32> = load %gv
+        %x_8:vec4<f32> = let %11
+        %13:vec4<f32> = mix vec4<f32>(1.0f), vec4<f32>(1.0f), %x_8
+        %14:vec4<f32> = max %13, vec4<f32>(8.6000003814697265625f)
+        %15:f32 = access %14, 1u
+        %16:i32 = call %tint_f32_to_i32, %15
+        store %temp, %16
+        %18:i32 = load %temp
+        %x_44:i32 = let %18
+        %20:bool = lt %x_44, 150i
+        if %20 [t: $B4] {  # if_2
+          $B4: {  # true
+            store %continue_execution, false
             exit_if  # if_2
           }
         }
-        %x_48:i32 = load %temp
-        %17:bool = lt %x_48, 180i
-        if %17 [t: %b5] {  # if_3
-          %b5 = block {  # true
-            discard
+        %21:i32 = load %temp
+        %x_48:i32 = let %21
+        %23:bool = lt %x_48, 180i
+        if %23 [t: $B5] {  # if_3
+          $B5: {  # true
+            store %continue_execution, false
             exit_if  # if_3
           }
         }
@@ -51,12 +56,29 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b6 {
-  %b6 = block {
-    %19:void = call %main_1
-    %20:vec4<f32> = load %x_GLF_color
-    %21:main_out = construct %20
-    ret %21
+%tint_symbol = @fragment func():main_out {
+  $B6: {
+    %25:void = call %main_1
+    %26:vec4<f32> = load %x_GLF_color
+    %27:main_out = construct %26
+    %28:bool = load %continue_execution
+    %29:bool = eq %28, false
+    if %29 [t: $B7] {  # if_4
+      $B7: {  # true
+        terminate_invocation
+      }
+    }
+    ret %27
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B8: {
+    %31:i32 = convert %value
+    %32:bool = gte %value, -2147483648.0f
+    %33:i32 = select -2147483648i, %31, %32
+    %34:bool = lte %value, 2147483520.0f
+    %35:i32 = select 2147483647i, %33, %34
+    ret %35
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/mix-floor-add/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/mix-floor-add/0-opt.spvasm.expected.ir.msl
index 792ab03..20211f0 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/mix-floor-add/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/mix-floor-add/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,36 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
+../../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
+}
+
+%GLF_live6mand_ = func():vec3<f32> {
+  $B2: {
+    ret vec3<f32>(926.0f, 8.0f, -8.85242279e-41f)
+  }
+}
+%main_1 = func():void {
+  $B3: {
+    %4:vec3<f32> = call %GLF_live6mand_
+    %x_27:vec3<f32> = let %4
+    store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B4: {
+    %7:void = call %main_1
+    %8:vec4<f32> = load %x_GLF_color
+    %9:main_out = construct %8
+    ret %9
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/mix-floor-add/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/mix-floor-add/0-opt.wgsl.expected.ir.msl
index 792ab03..20211f0 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/mix-floor-add/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/mix-floor-add/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,36 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::UserCall
+../../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
+}
+
+%GLF_live6mand_ = func():vec3<f32> {
+  $B2: {
+    ret vec3<f32>(926.0f, 8.0f, -8.85242279e-41f)
+  }
+}
+%main_1 = func():void {
+  $B3: {
+    %4:vec3<f32> = call %GLF_live6mand_
+    %x_27:vec3<f32> = let %4
+    store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B4: {
+    %7:void = call %main_1
+    %8:vec4<f32> = load %x_GLF_color
+    %9:main_out = construct %8
+    ret %9
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/nested-for-break-mat-color/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/nested-for-break-mat-color/0.spvasm.expected.ir.msl
index f8d5fdd..54eeaf1 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/nested-for-break-mat-color/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/nested-for-break-mat-color/0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:f32 @offset(0)
 }
 
@@ -8,56 +8,56 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %m44:ptr<function, mat4x4<f32>, read_write> = var
     %x_10:ptr<function, i32, read_write> = var
     store %m44, mat4x4<f32>(vec4<f32>(1.0f, 2.0f, 3.0f, 4.0f), vec4<f32>(5.0f, 6.0f, 7.0f, 8.0f), vec4<f32>(9.0f, 10.0f, 11.0f, 12.0f), vec4<f32>(13.0f, 14.0f, 15.0f, 16.0f))
     store %x_10, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %x_11:ptr<function, i32, read_write> = var
         %x_9:ptr<function, i32, read_write> = var
         %9:i32 = load %x_10
         %10:bool = lt %9, 4i
-        if %10 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %10 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
         %11:f32 = load_vector_element %gl_FragCoord, 1u
         %12:bool = lt %11, 0.0f
-        if %12 [t: %b7] {  # if_2
-          %b7 = block {  # true
+        if %12 [t: $B7] {  # if_2
+          $B7: {  # true
             exit_loop  # loop_1
           }
         }
         store %x_11, 0i
-        loop [b: %b8, c: %b9] {  # loop_2
-          %b8 = block {  # body
+        loop [b: $B8, c: $B9] {  # loop_2
+          $B8: {  # body
             %x_8:ptr<function, i32, read_write> = var
             %14:i32 = load %x_11
             %15:bool = lt %14, 4i
-            if %15 [t: %b10, f: %b11] {  # if_3
-              %b10 = block {  # true
+            if %15 [t: $B10, f: $B11] {  # if_3
+              $B10: {  # true
                 exit_if  # if_3
               }
-              %b11 = block {  # false
+              $B11: {  # false
                 exit_loop  # loop_2
               }
             }
-            continue %b9
+            continue  # -> $B9
           }
-          %b9 = block {  # continuing
+          $B9: {  # continuing
             %16:i32 = load %x_10
             %17:ptr<function, vec4<f32>, read_write> = access %m44, %16
             %18:i32 = load %x_11
@@ -74,43 +74,46 @@
             store %x_8, %27
             %28:i32 = load %x_8
             store %x_11, %28
-            next_iteration %b8
+            next_iteration  # -> $B8
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
+      $B4: {  # continuing
         %29:i32 = load %x_10
         %30:i32 = add %29, 1i
         store %x_9, %30
         %31:i32 = load %x_9
         store %x_10, %31
-        next_iteration %b3
+        next_iteration  # -> $B3
       }
     }
     %32:ptr<function, vec4<f32>, read_write> = access %m44, 1i
-    %x_77:f32 = load_vector_element %32, 1u
+    %33:f32 = load_vector_element %32, 1u
+    %x_77:f32 = let %33
     %x_79_1:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(0.0f)
-    %35:f32 = sub %x_77, 6.0f
-    store_vector_element %x_79_1, 0u, %35
-    %x_79:vec4<f32> = load %x_79_1
-    %37:ptr<function, vec4<f32>, read_write> = access %m44, 2i
-    %x_81:f32 = load_vector_element %37, 2u
+    %36:f32 = sub %x_77, 6.0f
+    store_vector_element %x_79_1, 0u, %36
+    %37:vec4<f32> = load %x_79_1
+    %x_79:vec4<f32> = let %37
+    %39:ptr<function, vec4<f32>, read_write> = access %m44, 2i
+    %40:f32 = load_vector_element %39, 2u
+    %x_81:f32 = let %40
     %x_83_1:ptr<function, vec4<f32>, read_write> = var, %x_79
-    %40:f32 = sub %x_81, 11.0f
-    store_vector_element %x_83_1, 3u, %40
-    %41:vec4<f32> = load %x_83_1
-    store %x_GLF_color, %41
+    %43:f32 = sub %x_81, 11.0f
+    store_vector_element %x_83_1, 3u, %43
+    %44:vec4<f32> = load %x_83_1
+    store %x_GLF_color, %44
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b12 {
-  %b12 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B12: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %44:void = call %main_1
-    %45:vec4<f32> = load %x_GLF_color
-    %46:main_out = construct %45
-    ret %46
+    %47:void = call %main_1
+    %48:vec4<f32> = load %x_GLF_color
+    %49:main_out = construct %48
+    ret %49
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/nested-for-break-mat-color/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/nested-for-break-mat-color/0.wgsl.expected.ir.msl
index cbec366..2fcd467 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/nested-for-break-mat-color/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/nested-for-break-mat-color/0.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   one:f32 @offset(0)
 }
 
@@ -8,103 +8,112 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %m44:ptr<function, mat4x4<f32>, read_write> = var
     %x_10_phi:ptr<function, i32, read_write> = var
     store %m44, mat4x4<f32>(vec4<f32>(1.0f, 2.0f, 3.0f, 4.0f), vec4<f32>(5.0f, 6.0f, 7.0f, 8.0f), vec4<f32>(9.0f, 10.0f, 11.0f, 12.0f), vec4<f32>(13.0f, 14.0f, 15.0f, 16.0f))
     store %x_10_phi, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %x_9:ptr<function, i32, read_write> = var
         %x_11_phi:ptr<function, i32, read_write> = var
-        %x_10:i32 = load %x_10_phi
-        %10:bool = lt %x_10, 4i
-        if %10 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %9:i32 = load %x_10_phi
+        %x_10:i32 = let %9
+        %11:bool = lt %x_10, 4i
+        if %11 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_63:f32 = load_vector_element %gl_FragCoord, 1u
-        %12:bool = lt %x_63, 0.0f
-        if %12 [t: %b7] {  # if_2
-          %b7 = block {  # true
+        %12:f32 = load_vector_element %gl_FragCoord, 1u
+        %x_63:f32 = let %12
+        %14:bool = lt %x_63, 0.0f
+        if %14 [t: $B7] {  # if_2
+          $B7: {  # true
             exit_loop  # loop_1
           }
         }
         store %x_11_phi, 0i
-        loop [b: %b8, c: %b9] {  # loop_2
-          %b8 = block {  # body
+        loop [b: $B8, c: $B9] {  # loop_2
+          $B8: {  # body
             %x_8:ptr<function, i32, read_write> = var
-            %x_11:i32 = load %x_11_phi
-            %15:bool = lt %x_11, 4i
-            if %15 [t: %b10, f: %b11] {  # if_3
-              %b10 = block {  # true
+            %16:i32 = load %x_11_phi
+            %x_11:i32 = let %16
+            %18:bool = lt %x_11, 4i
+            if %18 [t: $B10, f: $B11] {  # if_3
+              $B10: {  # true
                 exit_if  # if_3
               }
-              %b11 = block {  # false
+              $B11: {  # false
                 exit_loop  # loop_2
               }
             }
-            continue %b9
+            continue  # -> $B9
           }
-          %b9 = block {  # continuing
-            %16:ptr<uniform, f32, read> = access %x_7, 0u
-            %x_72:f32 = load %16
-            %18:ptr<function, vec4<f32>, read_write> = access %m44, %x_10
-            %x_74:f32 = load_vector_element %18, %x_11
-            %20:ptr<function, vec4<f32>, read_write> = access %m44, %x_10
-            %21:f32 = add %x_74, %x_72
-            store_vector_element %20, %x_11, %21
-            %22:i32 = add %x_11, 1i
-            store %x_8, %22
-            %23:i32 = load %x_8
-            store %x_11_phi, %23
-            next_iteration %b8
+          $B9: {  # continuing
+            %19:ptr<uniform, f32, read> = access %x_7, 0u
+            %20:f32 = load %19
+            %x_72:f32 = let %20
+            %22:ptr<function, vec4<f32>, read_write> = access %m44, %x_10
+            %23:f32 = load_vector_element %22, %x_11
+            %x_74:f32 = let %23
+            %25:ptr<function, vec4<f32>, read_write> = access %m44, %x_10
+            %26:f32 = add %x_74, %x_72
+            store_vector_element %25, %x_11, %26
+            %27:i32 = add %x_11, 1i
+            store %x_8, %27
+            %28:i32 = load %x_8
+            store %x_11_phi, %28
+            next_iteration  # -> $B8
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %24:i32 = add %x_10, 1i
-        store %x_9, %24
-        %25:i32 = load %x_9
-        store %x_10_phi, %25
-        next_iteration %b3
+      $B4: {  # continuing
+        %29:i32 = add %x_10, 1i
+        store %x_9, %29
+        %30:i32 = load %x_9
+        store %x_10_phi, %30
+        next_iteration  # -> $B3
       }
     }
-    %26:ptr<function, vec4<f32>, read_write> = access %m44, 1i
-    %x_77:f32 = load_vector_element %26, 1u
+    %31:ptr<function, vec4<f32>, read_write> = access %m44, 1i
+    %32:f32 = load_vector_element %31, 1u
+    %x_77:f32 = let %32
     %x_79_1:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(0.0f)
-    %29:f32 = sub %x_77, 6.0f
-    store_vector_element %x_79_1, 0u, %29
-    %x_79:vec4<f32> = load %x_79_1
-    %31:ptr<function, vec4<f32>, read_write> = access %m44, 2i
-    %x_81:f32 = load_vector_element %31, 2u
+    %35:f32 = sub %x_77, 6.0f
+    store_vector_element %x_79_1, 0u, %35
+    %36:vec4<f32> = load %x_79_1
+    %x_79:vec4<f32> = let %36
+    %38:ptr<function, vec4<f32>, read_write> = access %m44, 2i
+    %39:f32 = load_vector_element %38, 2u
+    %x_81:f32 = let %39
     %x_83_1:ptr<function, vec4<f32>, read_write> = var, %x_79
-    %34:f32 = sub %x_81, 11.0f
-    store_vector_element %x_83_1, 3u, %34
-    %x_83:vec4<f32> = load %x_83_1
+    %42:f32 = sub %x_81, 11.0f
+    store_vector_element %x_83_1, 3u, %42
+    %43:vec4<f32> = load %x_83_1
+    %x_83:vec4<f32> = let %43
     store %x_GLF_color, %x_83
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b12 {
-  %b12 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B12: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %38:void = call %main_1
-    %39:vec4<f32> = load %x_GLF_color
-    %40:main_out = construct %39
-    ret %40
+    %47:void = call %main_1
+    %48:vec4<f32> = load %x_GLF_color
+    %49:main_out = construct %48
+    ret %49
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/nested-ifs-and-return-in-for-loop/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/nested-ifs-and-return-in-for-loop/0-opt.spvasm.expected.ir.msl
index cd79cb1..2d24385 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/nested-ifs-and-return-in-for-loop/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/nested-ifs-and-return-in-for-loop/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,25 +8,25 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %i:ptr<function, i32, read_write> = var
     store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
     store %i, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %5:i32 = load %i
         %6:bool = lt %5, 10i
-        if %6 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %6 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
@@ -34,31 +34,31 @@
         %7:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
         %8:f32 = load_vector_element %7, 1u
         %9:bool = gt 1.0f, %8
-        if %9 [t: %b7] {  # if_2
-          %b7 = block {  # true
+        if %9 [t: $B7] {  # if_2
+          $B7: {  # true
             store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
-            if true [t: %b8] {  # if_3
-              %b8 = block {  # true
+            if true [t: $B8] {  # if_3
+              $B8: {  # true
                 ret
               }
             }
             exit_if  # if_2
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
+      $B4: {  # continuing
         %10:i32 = load %i
         %11:i32 = add %10, 1i
         store %i, %11
-        next_iteration %b3
+        next_iteration  # -> $B3
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b9 {
-  %b9 = block {
+%tint_symbol = @fragment func():main_out {
+  $B9: {
     %13:void = call %main_1
     %14:vec4<f32> = load %x_GLF_color
     %15:main_out = construct %14
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/nested-ifs-and-return-in-for-loop/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/nested-ifs-and-return-in-for-loop/0-opt.wgsl.expected.ir.msl
index b5e5a7a..a72f1be 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/nested-ifs-and-return-in-for-loop/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/nested-ifs-and-return-in-for-loop/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,61 +8,64 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %i:ptr<function, i32, read_write> = var
     store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
     store %i, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_7:i32 = load %i
-        %6:bool = lt %x_7, 10i
-        if %6 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %5:i32 = load %i
+        %x_7:i32 = let %5
+        %7:bool = lt %x_7, 10i
+        if %7 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
         store %x_GLF_color, vec4<f32>(1.0f)
-        %7:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-        %x_39:f32 = load_vector_element %7, 1u
-        %9:bool = gt 1.0f, %x_39
-        if %9 [t: %b7] {  # if_2
-          %b7 = block {  # true
+        %8:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
+        %9:f32 = load_vector_element %8, 1u
+        %x_39:f32 = let %9
+        %11:bool = gt 1.0f, %x_39
+        if %11 [t: $B7] {  # if_2
+          $B7: {  # true
             store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
-            if true [t: %b8] {  # if_3
-              %b8 = block {  # true
+            if true [t: $B8] {  # if_3
+              $B8: {  # true
                 ret
               }
             }
             exit_if  # if_2
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_8:i32 = load %i
-        %11:i32 = add %x_8, 1i
-        store %i, %11
-        next_iteration %b3
+      $B4: {  # continuing
+        %12:i32 = load %i
+        %x_8:i32 = let %12
+        %14:i32 = add %x_8, 1i
+        store %i, %14
+        next_iteration  # -> $B3
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b9 {
-  %b9 = block {
-    %13:void = call %main_1
-    %14:vec4<f32> = load %x_GLF_color
-    %15:main_out = construct %14
-    ret %15
+%tint_symbol = @fragment func():main_out {
+  $B9: {
+    %16:void = call %main_1
+    %17:vec4<f32> = load %x_GLF_color
+    %18:main_out = construct %17
+    ret %18
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/nested-loops-switch/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/nested-loops-switch/0.spvasm.expected.ir.msl
index f585fda..e4d0340 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/nested-loops-switch/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/nested-loops-switch/0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,13 +8,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %i:ptr<function, i32, read_write> = var
     %GLF_dead5cols:ptr<function, i32, read_write> = var
     %GLF_dead5rows:ptr<function, i32, read_write> = var
@@ -23,162 +23,176 @@
     %msb10:ptr<function, i32, read_write> = var
     %donor_replacementGLF_dead5sums:ptr<function, array<f32, 9>, read_write> = var
     store %i, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %11:i32 = load %i
-        %12:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-        %13:f32 = load_vector_element %12, 0u
-        %14:i32 = convert %13
-        %15:bool = gte %11, %14
-        if %15 [t: %b5] {  # if_1
-          %b5 = block {  # true
+        %12:i32 = let %11
+        %13:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
+        %14:f32 = load_vector_element %13, 0u
+        %15:i32 = call %tint_f32_to_i32, %14
+        %17:bool = gte %12, %15
+        if %17 [t: $B5] {  # if_1
+          $B5: {  # true
             exit_loop  # loop_1
           }
         }
-        %16:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-        %17:f32 = load_vector_element %16, 1u
-        %18:bool = gt 0.0f, %17
-        if %18 [t: %b6] {  # if_2
-          %b6 = block {  # true
+        %18:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
+        %19:f32 = load_vector_element %18, 1u
+        %20:bool = gt 0.0f, %19
+        if %20 [t: $B6] {  # if_2
+          $B6: {  # true
             store %GLF_dead5cols, 2i
-            loop [b: %b7, c: %b8] {  # loop_2
-              %b7 = block {  # body
-                %19:i32 = load %GLF_dead5cols
-                %20:bool = lte %19, 4i
-                if %20 [t: %b9, f: %b10] {  # if_3
-                  %b9 = block {  # true
+            loop [b: $B7, c: $B8] {  # loop_2
+              $B7: {  # body
+                %21:i32 = load %GLF_dead5cols
+                %22:bool = lte %21, 4i
+                if %22 [t: $B9, f: $B10] {  # if_3
+                  $B9: {  # true
                     exit_if  # if_3
                   }
-                  %b10 = block {  # false
+                  $B10: {  # false
                     exit_loop  # loop_2
                   }
                 }
                 store %GLF_dead5rows, 2i
-                loop [b: %b11, c: %b12] {  # loop_3
-                  %b11 = block {  # body
-                    %21:i32 = load %GLF_dead5rows
-                    %22:bool = lte %21, 4i
-                    if %22 [t: %b13, f: %b14] {  # if_4
-                      %b13 = block {  # true
+                loop [b: $B11, c: $B12] {  # loop_3
+                  $B11: {  # body
+                    %23:i32 = load %GLF_dead5rows
+                    %24:bool = lte %23, 4i
+                    if %24 [t: $B13, f: $B14] {  # if_4
+                      $B13: {  # true
                         exit_if  # if_4
                       }
-                      %b14 = block {  # false
+                      $B14: {  # false
                         exit_loop  # loop_3
                       }
                     }
                     store %GLF_dead5c, 0i
-                    loop [b: %b15, c: %b16] {  # loop_4
-                      %b15 = block {  # body
-                        %23:i32 = load %GLF_dead5c
-                        %24:i32 = load %GLF_dead5cols
-                        %25:bool = lt %23, %24
-                        if %25 [t: %b17, f: %b18] {  # if_5
-                          %b17 = block {  # true
+                    loop [b: $B15, c: $B16] {  # loop_4
+                      $B15: {  # body
+                        %25:i32 = load %GLF_dead5c
+                        %26:i32 = load %GLF_dead5cols
+                        %27:bool = lt %25, %26
+                        if %27 [t: $B17, f: $B18] {  # if_5
+                          $B17: {  # true
                             exit_if  # if_5
                           }
-                          %b18 = block {  # false
+                          $B18: {  # false
                             exit_loop  # loop_4
                           }
                         }
                         store %GLF_dead5r, 0i
-                        loop [b: %b19, c: %b20] {  # loop_5
-                          %b19 = block {  # body
-                            %26:i32 = load %GLF_dead5r
-                            %27:i32 = load %GLF_dead5rows
-                            %28:bool = lt %26, %27
-                            if %28 [t: %b21, f: %b22] {  # if_6
-                              %b21 = block {  # true
+                        loop [b: $B19, c: $B20] {  # loop_5
+                          $B19: {  # body
+                            %28:i32 = load %GLF_dead5r
+                            %29:i32 = load %GLF_dead5rows
+                            %30:bool = lt %28, %29
+                            if %30 [t: $B21, f: $B22] {  # if_6
+                              $B21: {  # true
                                 exit_if  # if_6
                               }
-                              %b22 = block {  # false
+                              $B22: {  # false
                                 exit_loop  # loop_5
                               }
                             }
-                            %x_87:i32 = load %msb10
-                            switch %x_87 [c: (1i 8i, %b23), c: (default, %b24)] {  # switch_1
-                              %b23 = block {  # case
-                                %30:i32 = load %msb10
-                                %31:i32 = load %msb10
-                                %32:bool = gte %31, 0i
+                            %31:i32 = load %msb10
+                            %x_87:i32 = let %31
+                            switch %x_87 [c: (1i 8i, $B23), c: (default, $B24)] {  # switch_1
+                              $B23: {  # case
                                 %33:i32 = load %msb10
-                                %34:bool = lt %33, 9i
-                                %35:bool = and %32, %34
-                                %x_96:i32 = select 0i, %30, %35
-                                %37:ptr<function, f32, read_write> = access %donor_replacementGLF_dead5sums, %x_96
-                                %38:ptr<function, f32, read_write> = access %donor_replacementGLF_dead5sums, %x_96
-                                %39:f32 = load %38
-                                %40:f32 = add %39, 1.0f
-                                store %37, %40
+                                %34:i32 = load %msb10
+                                %35:bool = gte %34, 0i
+                                %36:i32 = load %msb10
+                                %37:bool = lt %36, 9i
+                                %38:bool = and %35, %37
+                                %39:i32 = select 0i, %33, %38
+                                %x_96:i32 = let %39
+                                %41:ptr<function, f32, read_write> = access %donor_replacementGLF_dead5sums, %x_96
+                                %42:ptr<function, f32, read_write> = access %donor_replacementGLF_dead5sums, %x_96
+                                %43:f32 = load %42
+                                %44:f32 = add %43, 1.0f
+                                store %41, %44
                                 exit_switch  # switch_1
                               }
-                              %b24 = block {  # case
+                              $B24: {  # case
                                 exit_switch  # switch_1
                               }
                             }
-                            continue %b20
+                            continue  # -> $B20
                           }
-                          %b20 = block {  # continuing
-                            %41:i32 = load %GLF_dead5r
-                            %42:i32 = add %41, 1i
-                            store %GLF_dead5r, %42
-                            next_iteration %b19
+                          $B20: {  # continuing
+                            %45:i32 = load %GLF_dead5r
+                            %46:i32 = add %45, 1i
+                            store %GLF_dead5r, %46
+                            next_iteration  # -> $B19
                           }
                         }
-                        continue %b16
+                        continue  # -> $B16
                       }
-                      %b16 = block {  # continuing
-                        %43:i32 = load %GLF_dead5c
-                        %44:i32 = add %43, 1i
-                        store %GLF_dead5c, %44
-                        next_iteration %b15
+                      $B16: {  # continuing
+                        %47:i32 = load %GLF_dead5c
+                        %48:i32 = add %47, 1i
+                        store %GLF_dead5c, %48
+                        next_iteration  # -> $B15
                       }
                     }
-                    %45:i32 = load %msb10
-                    %46:i32 = add %45, 1i
-                    store %msb10, %46
-                    continue %b12
+                    %49:i32 = load %msb10
+                    %50:i32 = add %49, 1i
+                    store %msb10, %50
+                    continue  # -> $B12
                   }
-                  %b12 = block {  # continuing
-                    %47:i32 = load %GLF_dead5rows
-                    %48:i32 = add %47, 1i
-                    store %GLF_dead5rows, %48
-                    next_iteration %b11
+                  $B12: {  # continuing
+                    %51:i32 = load %GLF_dead5rows
+                    %52:i32 = add %51, 1i
+                    store %GLF_dead5rows, %52
+                    next_iteration  # -> $B11
                   }
                 }
-                continue %b8
+                continue  # -> $B8
               }
-              %b8 = block {  # continuing
-                %49:i32 = load %GLF_dead5cols
-                %50:i32 = add %49, 1i
-                store %GLF_dead5cols, %50
-                next_iteration %b7
+              $B8: {  # continuing
+                %53:i32 = load %GLF_dead5cols
+                %54:i32 = add %53, 1i
+                store %GLF_dead5cols, %54
+                next_iteration  # -> $B7
               }
             }
             exit_if  # if_2
           }
         }
-        %51:i32 = load %i
-        %52:i32 = add %51, 1i
-        store %i, %52
-        continue %b4
+        %55:i32 = load %i
+        %56:i32 = add %55, 1i
+        store %i, %56
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_113:i32 = load %i
-        %54:bool = lt %x_113, 200i
-        %55:bool = eq %54, false
-        break_if %55 %b3
+      $B4: {  # continuing
+        %57:i32 = load %i
+        %x_113:i32 = let %57
+        %59:bool = lt %x_113, 200i
+        %60:bool = eq %59, false
+        break_if %60  # -> [t: exit_loop loop_1, f: $B3]
       }
     }
     store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b25 {
-  %b25 = block {
-    %57:void = call %main_1
-    %58:vec4<f32> = load %x_GLF_color
-    %59:main_out = construct %58
-    ret %59
+%tint_symbol = @fragment func():main_out {
+  $B25: {
+    %62:void = call %main_1
+    %63:vec4<f32> = load %x_GLF_color
+    %64:main_out = construct %63
+    ret %64
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B26: {
+    %66:i32 = convert %value
+    %67:bool = gte %value, -2147483648.0f
+    %68:i32 = select -2147483648i, %66, %67
+    %69:bool = lte %value, 2147483520.0f
+    %70:i32 = select 2147483647i, %68, %69
+    ret %70
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/nested-loops-switch/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/nested-loops-switch/0.wgsl.expected.ir.msl
index d85a84a..d5157e2 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/nested-loops-switch/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/nested-loops-switch/0.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,13 +8,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %i:ptr<function, i32, read_write> = var
     %GLF_dead5cols:ptr<function, i32, read_write> = var
     %GLF_dead5rows:ptr<function, i32, read_write> = var
@@ -23,162 +23,194 @@
     %msb10:ptr<function, i32, read_write> = var
     %donor_replacementGLF_dead5sums:ptr<function, array<f32, 9>, read_write> = var
     store %i, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_45:i32 = load %i
-        %12:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-        %x_47:f32 = load_vector_element %12, 0u
-        %14:i32 = convert %x_47
-        %15:bool = gte %x_45, %14
-        if %15 [t: %b5] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %11:i32 = load %i
+        %x_45:i32 = let %11
+        %13:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
+        %14:f32 = load_vector_element %13, 0u
+        %x_47:f32 = let %14
+        %16:i32 = call %tint_f32_to_i32, %x_47
+        %18:bool = gte %x_45, %16
+        if %18 [t: $B5] {  # if_1
+          $B5: {  # true
             exit_loop  # loop_1
           }
         }
-        %16:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-        %x_53:f32 = load_vector_element %16, 1u
-        %18:bool = gt 0.0f, %x_53
-        if %18 [t: %b6] {  # if_2
-          %b6 = block {  # true
+        %19:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
+        %20:f32 = load_vector_element %19, 1u
+        %x_53:f32 = let %20
+        %22:bool = gt 0.0f, %x_53
+        if %22 [t: $B6] {  # if_2
+          $B6: {  # true
             store %GLF_dead5cols, 2i
-            loop [b: %b7, c: %b8] {  # loop_2
-              %b7 = block {  # body
-                %x_61:i32 = load %GLF_dead5cols
-                %20:bool = lte %x_61, 4i
-                if %20 [t: %b9, f: %b10] {  # if_3
-                  %b9 = block {  # true
+            loop [b: $B7, c: $B8] {  # loop_2
+              $B7: {  # body
+                %23:i32 = load %GLF_dead5cols
+                %x_61:i32 = let %23
+                %25:bool = lte %x_61, 4i
+                if %25 [t: $B9, f: $B10] {  # if_3
+                  $B9: {  # true
                     exit_if  # if_3
                   }
-                  %b10 = block {  # false
+                  $B10: {  # false
                     exit_loop  # loop_2
                   }
                 }
                 store %GLF_dead5rows, 2i
-                loop [b: %b11, c: %b12] {  # loop_3
-                  %b11 = block {  # body
-                    %x_68:i32 = load %GLF_dead5rows
-                    %22:bool = lte %x_68, 4i
-                    if %22 [t: %b13, f: %b14] {  # if_4
-                      %b13 = block {  # true
+                loop [b: $B11, c: $B12] {  # loop_3
+                  $B11: {  # body
+                    %26:i32 = load %GLF_dead5rows
+                    %x_68:i32 = let %26
+                    %28:bool = lte %x_68, 4i
+                    if %28 [t: $B13, f: $B14] {  # if_4
+                      $B13: {  # true
                         exit_if  # if_4
                       }
-                      %b14 = block {  # false
+                      $B14: {  # false
                         exit_loop  # loop_3
                       }
                     }
                     store %GLF_dead5c, 0i
-                    loop [b: %b15, c: %b16] {  # loop_4
-                      %b15 = block {  # body
-                        %x_75:i32 = load %GLF_dead5c
-                        %x_76:i32 = load %GLF_dead5cols
-                        %25:bool = lt %x_75, %x_76
-                        if %25 [t: %b17, f: %b18] {  # if_5
-                          %b17 = block {  # true
+                    loop [b: $B15, c: $B16] {  # loop_4
+                      $B15: {  # body
+                        %29:i32 = load %GLF_dead5c
+                        %x_75:i32 = let %29
+                        %31:i32 = load %GLF_dead5cols
+                        %x_76:i32 = let %31
+                        %33:bool = lt %x_75, %x_76
+                        if %33 [t: $B17, f: $B18] {  # if_5
+                          $B17: {  # true
                             exit_if  # if_5
                           }
-                          %b18 = block {  # false
+                          $B18: {  # false
                             exit_loop  # loop_4
                           }
                         }
                         store %GLF_dead5r, 0i
-                        loop [b: %b19, c: %b20] {  # loop_5
-                          %b19 = block {  # body
-                            %x_83:i32 = load %GLF_dead5r
-                            %x_84:i32 = load %GLF_dead5rows
-                            %28:bool = lt %x_83, %x_84
-                            if %28 [t: %b21, f: %b22] {  # if_6
-                              %b21 = block {  # true
+                        loop [b: $B19, c: $B20] {  # loop_5
+                          $B19: {  # body
+                            %34:i32 = load %GLF_dead5r
+                            %x_83:i32 = let %34
+                            %36:i32 = load %GLF_dead5rows
+                            %x_84:i32 = let %36
+                            %38:bool = lt %x_83, %x_84
+                            if %38 [t: $B21, f: $B22] {  # if_6
+                              $B21: {  # true
                                 exit_if  # if_6
                               }
-                              %b22 = block {  # false
+                              $B22: {  # false
                                 exit_loop  # loop_5
                               }
                             }
-                            %x_87:i32 = load %msb10
-                            switch %x_87 [c: (1i 8i, %b23), c: (default, %b24)] {  # switch_1
-                              %b23 = block {  # case
-                                %x_90:i32 = load %msb10
-                                %x_92:i32 = load %msb10
-                                %x_95:i32 = load %msb10
-                                %33:bool = gte %x_90, 0i
-                                %34:bool = lt %x_92, 9i
-                                %35:bool = and %33, %34
-                                %x_96:i32 = select 0i, %x_95, %35
-                                %37:ptr<function, f32, read_write> = access %donor_replacementGLF_dead5sums, %x_96
-                                %x_98:f32 = load %37
-                                %39:ptr<function, f32, read_write> = access %donor_replacementGLF_dead5sums, %x_96
-                                %40:f32 = add %x_98, 1.0f
-                                store %39, %40
+                            %39:i32 = load %msb10
+                            %x_87:i32 = let %39
+                            switch %x_87 [c: (1i 8i, $B23), c: (default, $B24)] {  # switch_1
+                              $B23: {  # case
+                                %41:i32 = load %msb10
+                                %x_90:i32 = let %41
+                                %43:i32 = load %msb10
+                                %x_92:i32 = let %43
+                                %45:i32 = load %msb10
+                                %x_95:i32 = let %45
+                                %47:bool = gte %x_90, 0i
+                                %48:bool = lt %x_92, 9i
+                                %49:bool = and %47, %48
+                                %50:i32 = select 0i, %x_95, %49
+                                %x_96:i32 = let %50
+                                %52:ptr<function, f32, read_write> = access %donor_replacementGLF_dead5sums, %x_96
+                                %53:f32 = load %52
+                                %x_98:f32 = let %53
+                                %55:ptr<function, f32, read_write> = access %donor_replacementGLF_dead5sums, %x_96
+                                %56:f32 = add %x_98, 1.0f
+                                store %55, %56
                                 exit_switch  # switch_1
                               }
-                              %b24 = block {  # case
+                              $B24: {  # case
                                 exit_switch  # switch_1
                               }
                             }
-                            continue %b20
+                            continue  # -> $B20
                           }
-                          %b20 = block {  # continuing
-                            %x_101:i32 = load %GLF_dead5r
-                            %42:i32 = add %x_101, 1i
-                            store %GLF_dead5r, %42
-                            next_iteration %b19
+                          $B20: {  # continuing
+                            %57:i32 = load %GLF_dead5r
+                            %x_101:i32 = let %57
+                            %59:i32 = add %x_101, 1i
+                            store %GLF_dead5r, %59
+                            next_iteration  # -> $B19
                           }
                         }
-                        continue %b16
+                        continue  # -> $B16
                       }
-                      %b16 = block {  # continuing
-                        %x_103:i32 = load %GLF_dead5c
-                        %44:i32 = add %x_103, 1i
-                        store %GLF_dead5c, %44
-                        next_iteration %b15
+                      $B16: {  # continuing
+                        %60:i32 = load %GLF_dead5c
+                        %x_103:i32 = let %60
+                        %62:i32 = add %x_103, 1i
+                        store %GLF_dead5c, %62
+                        next_iteration  # -> $B15
                       }
                     }
-                    %x_105:i32 = load %msb10
-                    %46:i32 = add %x_105, 1i
-                    store %msb10, %46
-                    continue %b12
+                    %63:i32 = load %msb10
+                    %x_105:i32 = let %63
+                    %65:i32 = add %x_105, 1i
+                    store %msb10, %65
+                    continue  # -> $B12
                   }
-                  %b12 = block {  # continuing
-                    %x_107:i32 = load %GLF_dead5rows
-                    %48:i32 = add %x_107, 1i
-                    store %GLF_dead5rows, %48
-                    next_iteration %b11
+                  $B12: {  # continuing
+                    %66:i32 = load %GLF_dead5rows
+                    %x_107:i32 = let %66
+                    %68:i32 = add %x_107, 1i
+                    store %GLF_dead5rows, %68
+                    next_iteration  # -> $B11
                   }
                 }
-                continue %b8
+                continue  # -> $B8
               }
-              %b8 = block {  # continuing
-                %x_109:i32 = load %GLF_dead5cols
-                %50:i32 = add %x_109, 1i
-                store %GLF_dead5cols, %50
-                next_iteration %b7
+              $B8: {  # continuing
+                %69:i32 = load %GLF_dead5cols
+                %x_109:i32 = let %69
+                %71:i32 = add %x_109, 1i
+                store %GLF_dead5cols, %71
+                next_iteration  # -> $B7
               }
             }
             exit_if  # if_2
           }
         }
-        %x_111:i32 = load %i
-        %52:i32 = add %x_111, 1i
-        store %i, %52
-        continue %b4
+        %72:i32 = load %i
+        %x_111:i32 = let %72
+        %74:i32 = add %x_111, 1i
+        store %i, %74
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_113:i32 = load %i
-        %54:bool = lt %x_113, 200i
-        %55:bool = eq %54, false
-        break_if %55 %b3
+      $B4: {  # continuing
+        %75:i32 = load %i
+        %x_113:i32 = let %75
+        %77:bool = lt %x_113, 200i
+        %78:bool = eq %77, false
+        break_if %78  # -> [t: exit_loop loop_1, f: $B3]
       }
     }
     store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b25 {
-  %b25 = block {
-    %57:void = call %main_1
-    %58:vec4<f32> = load %x_GLF_color
-    %59:main_out = construct %58
-    ret %59
+%tint_symbol = @fragment func():main_out {
+  $B25: {
+    %80:void = call %main_1
+    %81:vec4<f32> = load %x_GLF_color
+    %82:main_out = construct %81
+    ret %82
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B26: {
+    %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
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/one-sized-array/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/one-sized-array/0-opt.spvasm.expected.ir.msl
index e61c68e..e5dbee5 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/one-sized-array/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/one-sized-array/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   zero:i32 @offset(0)
 }
 
@@ -8,13 +8,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %x_10:ptr<function, array<i32, 1>, read_write> = var
     %x_9:ptr<function, array<i32, 1>, read_write> = var
     %x_7:ptr<function, i32, read_write> = var
@@ -28,15 +28,15 @@
     %12:ptr<function, i32, read_write> = access %x_9, 0i
     %13:i32 = load %12
     store %x_7, %13
-    switch 0u [c: (default, %b3)] {  # switch_1
-      %b3 = block {  # case
+    switch 0u [c: (default, $B3)] {  # switch_1
+      $B3: {  # case
         store %x_GLF_color, vec4<f32>(0.0f)
         %14:ptr<function, i32, read_write> = access %x_10, 0i
         %15:i32 = load %14
         %16:i32 = load %x_7
         %17:bool = eq %15, %16
-        if %17 [t: %b4] {  # if_1
-          %b4 = block {  # true
+        if %17 [t: $B4] {  # if_1
+          $B4: {  # true
             store %x_11, 1i
             exit_switch  # switch_1
           }
@@ -47,12 +47,12 @@
     }
     %18:i32 = load %x_11
     %19:bool = eq %18, 1i
-    if %19 [t: %b5, f: %b6] {  # if_2
-      %b5 = block {  # true
+    if %19 [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 = block {  # false
+      $B6: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_2
       }
@@ -60,8 +60,8 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b7 {
-  %b7 = block {
+%tint_symbol = @fragment func():main_out {
+  $B7: {
     %21:void = call %main_1
     %22:vec4<f32> = load %x_GLF_color
     %23:main_out = construct %22
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/one-sized-array/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/one-sized-array/0-opt.wgsl.expected.ir.msl
index 8589cb0..319ffd9 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/one-sized-array/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/one-sized-array/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   zero:i32 @offset(0)
 }
 
@@ -8,36 +8,39 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %x_10:ptr<function, array<i32, 1>, read_write> = var
     %x_9:ptr<function, array<i32, 1>, read_write> = var
     %x_7:ptr<function, i32, read_write> = var
     %x_11_phi:ptr<function, i32, read_write> = var
     %8:ptr<uniform, i32, read> = access %x_5, 0u
-    %x_6:i32 = load %8
-    %10:ptr<function, i32, read_write> = access %x_9, 0i
-    store %10, %x_6
-    %x_37:array<i32, 1> = load %x_9
+    %9:i32 = load %8
+    %x_6:i32 = let %9
+    %11:ptr<function, i32, read_write> = access %x_9, 0i
+    store %11, %x_6
+    %12:array<i32, 1> = load %x_9
+    %x_37:array<i32, 1> = let %12
     store %x_10, %x_37
-    %12:ptr<function, i32, read_write> = access %x_9, 0i
-    %13:i32 = load %12
-    store %x_7, %13
-    switch 0u [c: (default, %b3)] {  # switch_1
-      %b3 = block {  # case
+    %14:ptr<function, i32, read_write> = access %x_9, 0i
+    %15:i32 = load %14
+    store %x_7, %15
+    switch 0u [c: (default, $B3)] {  # switch_1
+      $B3: {  # case
         store %x_GLF_color, vec4<f32>(0.0f)
-        %14:ptr<function, i32, read_write> = access %x_10, 0i
-        %x_8:i32 = load %14
-        %16:i32 = load %x_7
-        %17:i32 = bitcast %16
-        %18:bool = eq %x_8, %17
-        if %18 [t: %b4] {  # if_1
-          %b4 = block {  # true
+        %16:ptr<function, i32, read_write> = access %x_10, 0i
+        %17:i32 = load %16
+        %x_8:i32 = let %17
+        %19:i32 = load %x_7
+        %20:i32 = bitcast %19
+        %21:bool = eq %x_8, %20
+        if %21 [t: $B4] {  # if_1
+          $B4: {  # true
             store %x_11_phi, 1i
             exit_switch  # switch_1
           }
@@ -46,14 +49,15 @@
         exit_switch  # switch_1
       }
     }
-    %x_11:i32 = load %x_11_phi
-    %20:bool = eq %x_11, 1i
-    if %20 [t: %b5, f: %b6] {  # if_2
-      %b5 = block {  # true
+    %22:i32 = load %x_11_phi
+    %x_11:i32 = let %22
+    %24:bool = eq %x_11, 1i
+    if %24 [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 = block {  # false
+      $B6: {  # false
         store %x_GLF_color, vec4<f32>(0.0f)
         exit_if  # if_2
       }
@@ -61,12 +65,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b7 {
-  %b7 = block {
-    %22:void = call %main_1
-    %23:vec4<f32> = load %x_GLF_color
-    %24:main_out = construct %23
-    ret %24
+%tint_symbol = @fragment func():main_out {
+  $B7: {
+    %26:void = call %main_1
+    %27:vec4<f32> = load %x_GLF_color
+    %28:main_out = construct %27
+    ret %28
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/return-float-from-while-loop/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/return-float-from-while-loop/0-opt.spvasm.expected.ir.msl
index 1a1c2a3..607fd59 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/return-float-from-while-loop/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/return-float-from-while-loop/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,14 +8,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %x_30:ptr<function, bool, read_write> = var
     %x_47:ptr<function, f32, read_write> = var
     %7:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
@@ -23,24 +23,24 @@
     %9:bool = gt %8, 1.0f
     store %x_30, %9
     %10:bool = load %x_30
-    if %10 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        loop [b: %b4, c: %b5] {  # loop_1
-          %b4 = block {  # body
-            loop [b: %b6, c: %b7] {  # loop_2
-              %b6 = block {  # body
+    if %10 [t: $B3] {  # if_1
+      $B3: {  # true
+        loop [b: $B4] {  # loop_1
+          $B4: {  # body
+            loop [b: $B5, c: $B6] {  # loop_2
+              $B5: {  # body
                 %11:f32 = load_vector_element %gl_FragCoord, 0u
                 %12:bool = lt %11, 0.0f
-                if %12 [t: %b8] {  # if_2
-                  %b8 = block {  # true
+                if %12 [t: $B7] {  # if_2
+                  $B7: {  # true
                     %13:bool = load %x_30
-                    if %13 [t: %b9, f: %b10] {  # if_3
-                      %b9 = block {  # true
+                    if %13 [t: $B8, f: $B9] {  # if_3
+                      $B8: {  # true
                         store %x_47, 1.0f
                         exit_loop  # loop_2
                       }
-                      %b10 = block {  # false
-                        continue %b7
+                      $B9: {  # false
+                        continue  # -> $B6
                       }
                     }
                     exit_if  # if_2
@@ -49,15 +49,12 @@
                 store %x_47, 0.0f
                 exit_loop  # loop_2
               }
-              %b7 = block {  # continuing
-                next_iteration %b6
+              $B6: {  # continuing
+                next_iteration  # -> $B5
               }
             }
             exit_loop  # loop_1
           }
-          %b5 = block {  # continuing
-            next_iteration %b4
-          }
         }
         %x_48_1:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(0.0f)
         %15:f32 = load %x_47
@@ -71,8 +68,8 @@
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b11 {
-  %b11 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B10: {
     store %gl_FragCoord, %gl_FragCoord_param
     %19:void = call %main_1
     %20:vec4<f32> = load %x_GLF_color
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/return-float-from-while-loop/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/return-float-from-while-loop/0-opt.wgsl.expected.ir.msl
index b4cb2e1..8b81bb1 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/return-float-from-while-loop/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/return-float-from-while-loop/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,40 +8,42 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %x_30:ptr<function, bool, read_write> = var
     %x_47:ptr<function, f32, read_write> = var
     %7:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %x_29:f32 = load_vector_element %7, 0u
-    %9:bool = gt %x_29, 1.0f
-    store %x_30, %9
-    %10:bool = load %x_30
-    if %10 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        loop [b: %b4, c: %b5] {  # loop_1
-          %b4 = block {  # body
+    %8:f32 = load_vector_element %7, 0u
+    %x_29:f32 = let %8
+    %10:bool = gt %x_29, 1.0f
+    store %x_30, %10
+    %11:bool = load %x_30
+    if %11 [t: $B3] {  # if_1
+      $B3: {  # true
+        loop [b: $B4] {  # loop_1
+          $B4: {  # body
             %x_47_phi:ptr<function, f32, read_write> = var
-            loop [b: %b6, c: %b7] {  # loop_2
-              %b6 = block {  # body
-                %x_41:f32 = load_vector_element %gl_FragCoord, 0u
-                %13:bool = lt %x_41, 0.0f
-                if %13 [t: %b8] {  # if_2
-                  %b8 = block {  # true
-                    %14:bool = load %x_30
-                    if %14 [t: %b9, f: %b10] {  # if_3
-                      %b9 = block {  # true
+            loop [b: $B5, c: $B6] {  # loop_2
+              $B5: {  # body
+                %13:f32 = load_vector_element %gl_FragCoord, 0u
+                %x_41:f32 = let %13
+                %15:bool = lt %x_41, 0.0f
+                if %15 [t: $B7] {  # if_2
+                  $B7: {  # true
+                    %16:bool = load %x_30
+                    if %16 [t: $B8, f: $B9] {  # if_3
+                      $B8: {  # true
                         store %x_47_phi, 1.0f
                         exit_loop  # loop_2
                       }
-                      %b10 = block {  # false
-                        continue %b7
+                      $B9: {  # false
+                        continue  # -> $B6
                       }
                     }
                     exit_if  # if_2
@@ -50,22 +52,20 @@
                 store %x_47_phi, 0.0f
                 exit_loop  # loop_2
               }
-              %b7 = block {  # continuing
-                next_iteration %b6
+              $B6: {  # continuing
+                next_iteration  # -> $B5
               }
             }
-            %15:f32 = load %x_47_phi
-            store %x_47, %15
+            %17:f32 = load %x_47_phi
+            store %x_47, %17
             exit_loop  # loop_1
           }
-          %b5 = block {  # continuing
-            next_iteration %b4
-          }
         }
         %x_48_1:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(0.0f)
-        %17:f32 = load %x_47
-        store_vector_element %x_48_1, 1u, %17
-        %x_48:vec4<f32> = load %x_48_1
+        %19:f32 = load %x_47
+        store_vector_element %x_48_1, 1u, %19
+        %20:vec4<f32> = load %x_48_1
+        %x_48:vec4<f32> = let %20
         store %x_GLF_color, %x_48
         exit_if  # if_1
       }
@@ -74,13 +74,13 @@
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b11 {
-  %b11 = block {
+%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
-    ret %23
+    %24:void = call %main_1
+    %25:vec4<f32> = load %x_GLF_color
+    %26:main_out = construct %25
+    ret %26
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/return-in-loop-in-function/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/return-in-loop-in-function/0-opt.spvasm.expected.ir.msl
index efdd3b1..6891922 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/return-in-loop-in-function/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/return-in-loop-in-function/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,97 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+}
+
+%f_ = func():f32 {
+  $B2: {
+    %i:ptr<function, i32, read_write> = var
+    store %i, 1i
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %4:i32 = load %i
+        %5:bool = lt %4, 10i
+        if %5 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
+            exit_if  # if_1
+          }
+          $B6: {  # false
+            exit_loop  # loop_1
+          }
+        }
+        %6:i32 = load %i
+        %7:f32 = convert %6
+        %8:bool = gte %7, 1.0f
+        if %8 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
+            ret 1.0f
+          }
+          $B8: {  # false
+            continue  # -> $B4
+          }
+        }
+        unreachable
+      }
+      $B4: {  # continuing
+        %9:i32 = load %i
+        %10:i32 = add %9, 1i
+        store %i, %10
+        next_iteration  # -> $B3
+      }
+    }
+    ret 1.0f
+  }
+}
+%main_1 = func():void {
+  $B9: {
+    %c:ptr<function, vec4<f32>, read_write> = var
+    %i_1:ptr<function, i32, read_write> = var
+    store %c, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+    store %i_1, 0i
+    loop [b: $B10, c: $B11] {  # loop_2
+      $B10: {  # body
+        %14:i32 = load %i_1
+        %15:bool = lt %14, 1i
+        if %15 [t: $B12, f: $B13] {  # if_3
+          $B12: {  # true
+            exit_if  # if_3
+          }
+          $B13: {  # false
+            exit_loop  # loop_2
+          }
+        }
+        continue  # -> $B11
+      }
+      $B11: {  # continuing
+        %16:f32 = call %f_
+        %x_39:f32 = let %16
+        store_vector_element %c, 0u, %x_39
+        %18:i32 = load %i_1
+        %19:i32 = add %18, 1i
+        store %i_1, %19
+        next_iteration  # -> $B10
+      }
+    }
+    %20:vec4<f32> = load %c
+    store %x_GLF_color, %20
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B14: {
+    %22:void = call %main_1
+    %23:vec4<f32> = load %x_GLF_color
+    %24:main_out = construct %23
+    ret %24
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/return-in-loop-in-function/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/return-in-loop-in-function/0-opt.wgsl.expected.ir.msl
index efdd3b1..5f88afb 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/return-in-loop-in-function/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/return-in-loop-in-function/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,103 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+}
+
+%f_ = func():f32 {
+  $B2: {
+    %i:ptr<function, i32, read_write> = var
+    store %i, 1i
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %4:i32 = load %i
+        %x_8:i32 = let %4
+        %6:bool = lt %x_8, 10i
+        if %6 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
+            exit_if  # if_1
+          }
+          $B6: {  # false
+            exit_loop  # loop_1
+          }
+        }
+        %7:i32 = load %i
+        %x_9:i32 = let %7
+        %9:f32 = convert %x_9
+        %10:bool = gte %9, 1.0f
+        if %10 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
+            ret 1.0f
+          }
+          $B8: {  # false
+            continue  # -> $B4
+          }
+        }
+        unreachable
+      }
+      $B4: {  # continuing
+        %11:i32 = load %i
+        %x_10:i32 = let %11
+        %13:i32 = add %x_10, 1i
+        store %i, %13
+        next_iteration  # -> $B3
+      }
+    }
+    ret 1.0f
+  }
+}
+%main_1 = func():void {
+  $B9: {
+    %c:ptr<function, vec4<f32>, read_write> = var
+    %i_1:ptr<function, i32, read_write> = var
+    store %c, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+    store %i_1, 0i
+    loop [b: $B10, c: $B11] {  # loop_2
+      $B10: {  # body
+        %17:i32 = load %i_1
+        %x_12:i32 = let %17
+        %19:bool = lt %x_12, 1i
+        if %19 [t: $B12, f: $B13] {  # if_3
+          $B12: {  # true
+            exit_if  # if_3
+          }
+          $B13: {  # false
+            exit_loop  # loop_2
+          }
+        }
+        continue  # -> $B11
+      }
+      $B11: {  # continuing
+        %20:f32 = call %f_
+        %x_39:f32 = let %20
+        store_vector_element %c, 0u, %x_39
+        %22:i32 = load %i_1
+        %x_13:i32 = let %22
+        %24:i32 = add %x_13, 1i
+        store %i_1, %24
+        next_iteration  # -> $B10
+      }
+    }
+    %25:vec4<f32> = load %c
+    %x_41:vec4<f32> = let %25
+    store %x_GLF_color, %x_41
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B14: {
+    %28:void = call %main_1
+    %29:vec4<f32> = load %x_GLF_color
+    %30:main_out = construct %29
+    ret %30
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/return-inside-loop-in-function/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/return-inside-loop-in-function/0.spvasm.expected.ir.msl
index efdd3b1..cc352a9 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/return-inside-loop-in-function/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/return-inside-loop-in-function/0.spvasm.expected.ir.msl
@@ -1,6 +1,147 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+}
+
+%main_1 = func():void {
+  $B2: {
+    %x_36:ptr<function, bool, read_write> = var, false
+    %x_37:ptr<function, vec3<f32>, read_write> = var
+    %x_6:ptr<function, i32, read_write> = var
+    %x_38:ptr<function, vec3<f32>, read_write> = var
+    %x_40:ptr<function, bool, read_write> = var
+    %x_51:ptr<function, vec3<f32>, read_write> = var
+    %x_54:ptr<function, vec3<f32>, read_write> = var
+    %x_55:ptr<function, vec3<f32>, read_write> = var
+    store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+    store %x_36, false
+    store %x_40, false
+    loop [b: $B3] {  # loop_1
+      $B3: {  # body
+        %x_45:ptr<function, bool, read_write> = var
+        %x_7:ptr<function, i32, read_write> = var
+        %x_52:ptr<function, bool, read_write> = var
+        store %x_6, 0i
+        %14:bool = load %x_40
+        store %x_45, %14
+        store %x_7, 0i
+        loop [b: $B4] {  # loop_2
+          $B4: {  # body
+            store %x_51, vec3<f32>(0.0f)
+            %15:bool = load %x_45
+            store %x_52, %15
+            %16:i32 = load %x_7
+            %17:bool = lt %16, 0i
+            if %17 [t: $B5, f: $B6] {  # if_1
+              $B5: {  # true
+                exit_if  # if_1
+              }
+              $B6: {  # false
+                exit_loop  # loop_2
+              }
+            }
+            store %x_36, true
+            store %x_37, vec3<f32>(1.0f)
+            store %x_51, vec3<f32>(1.0f)
+            store %x_52, true
+            exit_loop  # loop_2
+          }
+        }
+        %18:vec3<f32> = load %x_51
+        store %x_55, %18
+        %19:bool = load %x_52
+        if %19 [t: $B7] {  # if_2
+          $B7: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        store %x_54, vec3<f32>(0.0f)
+        store %x_36, true
+        %20:vec3<f32> = load %x_54
+        store %x_55, %20
+        exit_loop  # loop_1
+      }
+    }
+    %21:vec3<f32> = load %x_55
+    store %x_38, %21
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B8: {
+    %23:void = call %main_1
+    %24:vec4<f32> = load %x_GLF_color
+    %25:main_out = construct %24
+    ret %25
+  }
+}
+%GLF_live4drawShape_ = func():vec3<f32> {
+  $B9: {
+    %x_57:ptr<function, bool, read_write> = var, false
+    %x_58:ptr<function, vec3<f32>, read_write> = var
+    %i:ptr<function, i32, read_write> = var
+    %x_60:ptr<function, bool, read_write> = var
+    %x_71:ptr<function, vec3<f32>, read_write> = var
+    %x_74:ptr<function, vec3<f32>, read_write> = var
+    %x_75:ptr<function, vec3<f32>, read_write> = var
+    store %x_60, false
+    loop [b: $B10] {  # loop_3
+      $B10: {  # body
+        %x_65:ptr<function, bool, read_write> = var
+        %x_8:ptr<function, i32, read_write> = var
+        %x_72:ptr<function, bool, read_write> = var
+        store %i, 0i
+        %37:bool = load %x_60
+        store %x_65, %37
+        store %x_8, 0i
+        loop [b: $B11] {  # loop_4
+          $B11: {  # body
+            store %x_71, vec3<f32>(0.0f)
+            %38:bool = load %x_65
+            store %x_72, %38
+            %39:i32 = load %x_8
+            %40:bool = lt %39, 0i
+            if %40 [t: $B12, f: $B13] {  # if_3
+              $B12: {  # true
+                exit_if  # if_3
+              }
+              $B13: {  # false
+                exit_loop  # loop_4
+              }
+            }
+            store %x_57, true
+            store %x_58, vec3<f32>(1.0f)
+            store %x_71, vec3<f32>(1.0f)
+            store %x_72, true
+            exit_loop  # loop_4
+          }
+        }
+        %41:vec3<f32> = load %x_71
+        store %x_75, %41
+        %42:bool = load %x_72
+        if %42 [t: $B14] {  # if_4
+          $B14: {  # true
+            exit_loop  # loop_3
+          }
+        }
+        store %x_74, vec3<f32>(0.0f)
+        store %x_57, true
+        %43:vec3<f32> = load %x_74
+        store %x_75, %43
+        exit_loop  # loop_3
+      }
+    }
+    %44:vec3<f32> = load %x_75
+    ret %44
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/return-inside-loop-in-function/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/return-inside-loop-in-function/0.wgsl.expected.ir.msl
index efdd3b1..58fb21b 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/return-inside-loop-in-function/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/return-inside-loop-in-function/0.wgsl.expected.ir.msl
@@ -1,6 +1,167 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+}
+
+%main_1 = func():void {
+  $B2: {
+    %x_36:ptr<function, bool, read_write> = var, false
+    %x_37:ptr<function, vec3<f32>, read_write> = var
+    %x_6:ptr<function, i32, read_write> = var
+    %x_38:ptr<function, vec3<f32>, read_write> = var
+    %x_51:ptr<function, vec3<f32>, read_write> = var
+    %x_54:ptr<function, vec3<f32>, read_write> = var
+    %x_40_phi:ptr<function, bool, read_write> = var
+    %x_55_phi:ptr<function, vec3<f32>, read_write> = var
+    store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+    store %x_36, false
+    store %x_40_phi, false
+    loop [b: $B3] {  # loop_1
+      $B3: {  # body
+        %x_45:ptr<function, bool, read_write> = var
+        %x_45_phi:ptr<function, bool, read_write> = var
+        %x_7_phi:ptr<function, i32, read_write> = var
+        %x_51_phi:ptr<function, vec3<f32>, read_write> = var
+        %x_52_phi:ptr<function, bool, read_write> = var
+        %16:bool = load %x_40_phi
+        %x_40:bool = let %16
+        store %x_6, 0i
+        store %x_45_phi, %x_40
+        store %x_7_phi, 0i
+        loop [b: $B4] {  # loop_2
+          $B4: {  # body
+            %18:bool = load %x_45_phi
+            store %x_45, %18
+            %19:i32 = load %x_7_phi
+            %x_7:i32 = let %19
+            store %x_51_phi, vec3<f32>(0.0f)
+            %21:bool = load %x_45
+            store %x_52_phi, %21
+            %22:bool = lt %x_7, 0i
+            if %22 [t: $B5, f: $B6] {  # if_1
+              $B5: {  # true
+                exit_if  # if_1
+              }
+              $B6: {  # false
+                exit_loop  # loop_2
+              }
+            }
+            store %x_36, true
+            store %x_37, vec3<f32>(1.0f)
+            store %x_51_phi, vec3<f32>(1.0f)
+            store %x_52_phi, true
+            exit_loop  # loop_2
+          }
+        }
+        %23:vec3<f32> = load %x_51_phi
+        store %x_51, %23
+        %24:bool = load %x_52_phi
+        %x_52:bool = let %24
+        %26:vec3<f32> = load %x_51
+        store %x_55_phi, %26
+        if %x_52 [t: $B7] {  # if_2
+          $B7: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        store %x_54, vec3<f32>(0.0f)
+        store %x_36, true
+        %27:vec3<f32> = load %x_54
+        store %x_55_phi, %27
+        exit_loop  # loop_1
+      }
+    }
+    %28:vec3<f32> = load %x_55_phi
+    %x_55:vec3<f32> = let %28
+    store %x_38, %x_55
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B8: {
+    %31:void = call %main_1
+    %32:vec4<f32> = load %x_GLF_color
+    %33:main_out = construct %32
+    ret %33
+  }
+}
+%GLF_live4drawShape_ = func():vec3<f32> {
+  $B9: {
+    %x_57:ptr<function, bool, read_write> = var, false
+    %x_58:ptr<function, vec3<f32>, read_write> = var
+    %i:ptr<function, i32, read_write> = var
+    %x_71:ptr<function, vec3<f32>, read_write> = var
+    %x_74:ptr<function, vec3<f32>, read_write> = var
+    %x_60_phi:ptr<function, bool, read_write> = var
+    %x_75_phi:ptr<function, vec3<f32>, read_write> = var
+    store %x_60_phi, false
+    loop [b: $B10] {  # loop_3
+      $B10: {  # body
+        %x_65:ptr<function, bool, read_write> = var
+        %x_65_phi:ptr<function, bool, read_write> = var
+        %x_8_phi:ptr<function, i32, read_write> = var
+        %x_71_phi:ptr<function, vec3<f32>, read_write> = var
+        %x_72_phi:ptr<function, bool, read_write> = var
+        %47:bool = load %x_60_phi
+        %x_60:bool = let %47
+        store %i, 0i
+        store %x_65_phi, %x_60
+        store %x_8_phi, 0i
+        loop [b: $B11] {  # loop_4
+          $B11: {  # body
+            %49:bool = load %x_65_phi
+            store %x_65, %49
+            %50:i32 = load %x_8_phi
+            %x_8:i32 = let %50
+            store %x_71_phi, vec3<f32>(0.0f)
+            %52:bool = load %x_65
+            store %x_72_phi, %52
+            %53:bool = lt %x_8, 0i
+            if %53 [t: $B12, f: $B13] {  # if_3
+              $B12: {  # true
+                exit_if  # if_3
+              }
+              $B13: {  # false
+                exit_loop  # loop_4
+              }
+            }
+            store %x_57, true
+            store %x_58, vec3<f32>(1.0f)
+            store %x_71_phi, vec3<f32>(1.0f)
+            store %x_72_phi, true
+            exit_loop  # loop_4
+          }
+        }
+        %54:vec3<f32> = load %x_71_phi
+        store %x_71, %54
+        %55:bool = load %x_72_phi
+        %x_72:bool = let %55
+        %57:vec3<f32> = load %x_71
+        store %x_75_phi, %57
+        if %x_72 [t: $B14] {  # if_4
+          $B14: {  # true
+            exit_loop  # loop_3
+          }
+        }
+        store %x_74, vec3<f32>(0.0f)
+        store %x_57, true
+        %58:vec3<f32> = load %x_74
+        store %x_75_phi, %58
+        exit_loop  # loop_3
+      }
+    }
+    %59:vec3<f32> = load %x_75_phi
+    %x_75:vec3<f32> = let %59
+    ret %x_75
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/returned-boolean-in-vector/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/returned-boolean-in-vector/0-opt.spvasm.expected.ir.msl
index ad0b846..cd5a7a2 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/returned-boolean-in-vector/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/returned-boolean-in-vector/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,13 +8,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %x_36:ptr<function, bool, read_write> = var, false
     %x_37:ptr<function, bool, read_write> = var
     %x_7:ptr<function, i32, read_write> = var
@@ -26,47 +26,48 @@
     %x_56:ptr<function, bool, read_write> = var
     store %x_40, false
     store %x_42, vec3<f32>(0.0f)
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %13:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
-        %x_47:f32 = load_vector_element %13, 1u
-        %15:vec3<f32> = load %x_42
-        store %x_43, %15
-        %16:bool = lt %x_47, 0.0f
-        if %16 [t: %b5] {  # if_1
-          %b5 = block {  # true
+        %14:f32 = load_vector_element %13, 1u
+        %x_47:f32 = let %14
+        %16:vec3<f32> = load %x_42
+        store %x_43, %16
+        %17:bool = lt %x_47, 0.0f
+        if %17 [t: $B5] {  # if_1
+          $B5: {  # true
             store %color, vec3<f32>(1.0f)
             store %x_43, vec3<f32>(1.0f)
             exit_if  # if_1
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %17:bool = load %x_40
-        store %x_40, %17
-        %18:vec3<f32> = load %x_43
-        store %x_42, %18
-        break_if true %b3
+      $B4: {  # continuing
+        %18:bool = load %x_40
+        store %x_40, %18
+        %19:vec3<f32> = load %x_43
+        store %x_42, %19
+        break_if true  # -> [t: exit_loop loop_1, f: $B3]
       }
     }
     store %x_36, false
-    %19:bool = load %x_40
-    store %x_56, %19
-    loop [b: %b6, c: %b7] {  # loop_2
-      %b6 = block {  # body
+    %20:bool = load %x_40
+    store %x_56, %20
+    loop [b: $B6] {  # loop_2
+      $B6: {  # body
         %x_62:ptr<function, bool, read_write> = var
         store %x_7, 0i
-        %21:bool = load %x_56
-        store %x_62, %21
-        loop [b: %b8, c: %b9] {  # loop_3
-          %b8 = block {  # body
+        %22:bool = load %x_56
+        store %x_62, %22
+        loop [b: $B7] {  # loop_3
+          $B7: {  # body
             %x_68:bool = let true
-            if true [t: %b10, f: %b11] {  # if_2
-              %b10 = block {  # true
+            if true [t: $B8, f: $B9] {  # if_2
+              $B8: {  # true
                 exit_if  # if_2
               }
-              %b11 = block {  # false
+              $B9: {  # false
                 exit_loop  # loop_3
               }
             }
@@ -74,41 +75,33 @@
             store %x_37, true
             exit_loop  # loop_3
           }
-          %b9 = block {  # continuing
-            store %x_62, false
-            next_iteration %b8
-          }
         }
-        if true [t: %b12] {  # if_3
-          %b12 = block {  # true
+        if true [t: $B10] {  # if_3
+          $B10: {  # true
             exit_loop  # loop_2
           }
         }
         store %x_36, true
         exit_loop  # loop_2
       }
-      %b7 = block {  # continuing
-        store %x_56, false
-        next_iteration %b6
-      }
     }
     store %x_38, true
-    %23:f32 = load_vector_element %x_43, 0u
-    %24:f32 = load_vector_element %x_43, 1u
-    %25:f32 = load_vector_element %x_43, 2u
-    %26:vec4<f32> = construct %23, %24, %25, 1.0f
-    %27:vec4<f32> = add %26, vec4<f32>(1.0f)
-    store %x_GLF_color, %27
+    %24:f32 = load_vector_element %x_43, 0u
+    %25:f32 = load_vector_element %x_43, 1u
+    %26:f32 = load_vector_element %x_43, 2u
+    %27:vec4<f32> = construct %24, %25, %26, 1.0f
+    %28:vec4<f32> = add %27, vec4<f32>(1.0f)
+    store %x_GLF_color, %28
     store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b13 {
-  %b13 = block {
-    %29:void = call %main_1
-    %30:vec4<f32> = load %x_GLF_color
-    %31:main_out = construct %30
-    ret %31
+%tint_symbol = @fragment func():main_out {
+  $B11: {
+    %30:void = call %main_1
+    %31:vec4<f32> = load %x_GLF_color
+    %32:main_out = construct %31
+    ret %32
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/returned-boolean-in-vector/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/returned-boolean-in-vector/0-opt.wgsl.expected.ir.msl
index 032ef39..5960fc9 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/returned-boolean-in-vector/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/returned-boolean-in-vector/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,13 +8,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %x_36:ptr<function, bool, read_write> = var, false
     %x_37:ptr<function, bool, read_write> = var
     %x_7:ptr<function, i32, read_write> = var
@@ -28,68 +28,74 @@
     %x_58_phi:ptr<function, bool, read_write> = var
     store %x_40_phi, false
     store %x_42_phi, vec3<f32>(0.0f)
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %x_43_phi:ptr<function, vec3<f32>, read_write> = var
         %16:bool = load %x_40_phi
         store %x_40, %16
-        %x_42:vec3<f32> = load %x_42_phi
-        %18:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
-        %x_47:f32 = load_vector_element %18, 1u
+        %17:vec3<f32> = load %x_42_phi
+        %x_42:vec3<f32> = let %17
+        %19:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
+        %20:f32 = load_vector_element %19, 1u
+        %x_47:f32 = let %20
         store %x_43_phi, %x_42
-        %20:bool = lt %x_47, 0.0f
-        if %20 [t: %b5] {  # if_1
-          %b5 = block {  # true
+        %22:bool = lt %x_47, 0.0f
+        if %22 [t: $B5] {  # if_1
+          $B5: {  # true
             store %color, vec3<f32>(1.0f)
             store %x_43_phi, vec3<f32>(1.0f)
             exit_if  # if_1
           }
         }
-        %21:vec3<f32> = load %x_43_phi
-        store %x_43, %21
-        continue %b4
+        %23:vec3<f32> = load %x_43_phi
+        store %x_43, %23
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %22:bool = load %x_40
-        store %x_40_phi, %22
-        %23:vec3<f32> = load %x_43
-        store %x_42_phi, %23
-        break_if true %b3
+      $B4: {  # continuing
+        %24:bool = load %x_40
+        store %x_40_phi, %24
+        %25:vec3<f32> = load %x_43
+        store %x_42_phi, %25
+        break_if true  # -> [t: exit_loop loop_1, f: $B3]
       }
     }
     store %x_36, false
-    %24:bool = load %x_40
-    store %x_56_phi, %24
+    %26:bool = load %x_40
+    store %x_56_phi, %26
     store %x_58_phi, false
-    loop [b: %b6, c: %b7] {  # loop_2
-      %b6 = block {  # body
+    loop [b: $B6] {  # loop_2
+      $B6: {  # body
         %x_62:ptr<function, bool, read_write> = var
         %x_62_phi:ptr<function, bool, read_write> = var
         %x_64_phi:ptr<function, bool, read_write> = var
         %x_65_phi:ptr<function, i32, read_write> = var
         %x_70_phi:ptr<function, bool, read_write> = var
         %x_71_phi:ptr<function, bool, read_write> = var
-        %x_56:bool = load %x_56_phi
-        %x_58:bool = load %x_58_phi
+        %33:bool = load %x_56_phi
+        %x_56:bool = let %33
+        %35:bool = load %x_58_phi
+        %x_58:bool = let %35
         store %x_7, 0i
         store %x_62_phi, %x_56
         store %x_64_phi, false
         store %x_65_phi, 0i
-        loop [b: %b8, c: %b9] {  # loop_3
-          %b8 = block {  # body
-            %33:bool = load %x_62_phi
-            store %x_62, %33
-            %x_64:bool = load %x_64_phi
-            %x_65:i32 = load %x_65_phi
+        loop [b: $B7] {  # loop_3
+          $B7: {  # body
+            %37:bool = load %x_62_phi
+            store %x_62, %37
+            %38:bool = load %x_64_phi
+            %x_64:bool = let %38
+            %40:i32 = load %x_65_phi
+            %x_65:i32 = let %40
             %x_68:bool = let true
-            %37:bool = load %x_62
-            store %x_70_phi, %37
+            %43:bool = load %x_62
+            store %x_70_phi, %43
             store %x_71_phi, false
-            if true [t: %b10, f: %b11] {  # if_2
-              %b10 = block {  # true
+            if true [t: $B8, f: $B9] {  # if_2
+              $B8: {  # true
                 exit_if  # if_2
               }
-              %b11 = block {  # false
+              $B9: {  # false
                 exit_loop  # loop_3
               }
             }
@@ -99,48 +105,40 @@
             store %x_71_phi, true
             exit_loop  # loop_3
           }
-          %b9 = block {  # continuing
-            store %x_62_phi, false
-            store %x_64_phi, false
-            store %x_65_phi, 0i
-            next_iteration %b8
-          }
         }
-        %x_70:bool = load %x_70_phi
-        %x_71:bool = load %x_71_phi
-        if true [t: %b12] {  # if_3
-          %b12 = block {  # true
+        %44:bool = load %x_70_phi
+        %x_70:bool = let %44
+        %46:bool = load %x_71_phi
+        %x_71:bool = let %46
+        if true [t: $B10] {  # if_3
+          $B10: {  # true
             exit_loop  # loop_2
           }
         }
         store %x_36, true
         exit_loop  # loop_2
       }
-      %b7 = block {  # continuing
-        store %x_56_phi, false
-        store %x_58_phi, false
-        next_iteration %b6
-      }
     }
     store %x_38, true
     %x_73:f32 = let 1.0f
-    %41:f32 = load_vector_element %x_43, 0u
-    %42:f32 = load_vector_element %x_43, 1u
-    %43:f32 = load_vector_element %x_43, 2u
-    %44:vec4<f32> = construct %41, %42, %43, 1.0f
-    %45:vec4<f32> = construct %x_73, %x_73, %x_73, %x_73
-    %46:vec4<f32> = add %44, %45
-    store %x_GLF_color, %46
+    %49:f32 = load_vector_element %x_43, 0u
+    %50:f32 = load_vector_element %x_43, 1u
+    %51:f32 = load_vector_element %x_43, 2u
+    %52:vec4<f32> = construct %49, %50, %51, 1.0f
+    %53:vec4<f32> = let %52
+    %54:vec4<f32> = construct %x_73, %x_73, %x_73, %x_73
+    %55:vec4<f32> = add %53, %54
+    store %x_GLF_color, %55
     store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b13 {
-  %b13 = block {
-    %48:void = call %main_1
-    %49:vec4<f32> = load %x_GLF_color
-    %50:main_out = construct %49
-    ret %50
+%tint_symbol = @fragment func():main_out {
+  $B11: {
+    %57:void = call %main_1
+    %58:vec4<f32> = load %x_GLF_color
+    %59:main_out = construct %58
+    ret %59
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/set-color-in-one-iteration-while-loop/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/set-color-in-one-iteration-while-loop/0.spvasm.expected.ir.msl
index 92e2acf..d3470fa 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/set-color-in-one-iteration-while-loop/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/set-color-in-one-iteration-while-loop/0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,149 +8,161 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+%main_1 = func():void {
+  $B2: {
+    loop [b: $B3] {  # loop_1
+      $B3: {  # body
         %x_38:ptr<function, bool, read_write> = var
         %x_41:ptr<function, vec4<f32>, read_write> = var
         %x_42:ptr<function, vec4<f32>, read_write> = var
         %x_39:ptr<function, bool, read_write> = var
         %9:f32 = load_vector_element %gl_FragCoord, 0u
         %10:f32 = clamp %9, 0.0f, 1.0f
-        %x_34:i32 = convert %10
+        %11:i32 = call %tint_f32_to_i32, %10
+        %x_34:i32 = let %11
         store %x_GLF_color, vec4<f32>(0.0f)
         store %x_38, false
         store %x_41, vec4<f32>(0.0f)
-        loop [b: %b5, c: %b6] {  # loop_2
-          %b5 = block {  # body
+        loop [b: $B4, c: $B5] {  # loop_2
+          $B4: {  # body
             %x_47:ptr<function, i32, read_write> = var
-            %13:vec4<f32> = load %x_41
-            store %x_42, %13
+            %15:vec4<f32> = load %x_41
+            store %x_42, %15
             store %x_47, 0i
-            loop [b: %b7, c: %b8] {  # loop_3
-              %b7 = block {  # body
+            loop [b: $B6, c: $B7] {  # loop_3
+              $B6: {  # body
                 %x_45:ptr<function, vec4<f32>, read_write> = var
                 %x_48:ptr<function, i32, read_write> = var
-                %16:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-                %x_50:f32 = load_vector_element %16, 1u
-                %18:bool = load %x_38
-                store %x_39, %18
-                %19:i32 = load %x_47
-                %20:i32 = convert %x_50
-                %21:i32 = add %x_34, %20
-                %22:bool = lt %19, %21
-                if %22 [t: %b9, f: %b10] {  # if_1
-                  %b9 = block {  # true
+                %18:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
+                %19:f32 = load_vector_element %18, 1u
+                %x_50:f32 = let %19
+                %21:bool = load %x_38
+                store %x_39, %21
+                %22:i32 = load %x_47
+                %23:i32 = let %22
+                %24:i32 = call %tint_f32_to_i32, %x_50
+                %25:i32 = add %x_34, %24
+                %26:bool = lt %23, %25
+                if %26 [t: $B8, f: $B9] {  # if_1
+                  $B8: {  # true
                     exit_if  # if_1
                   }
-                  %b10 = block {  # false
+                  $B9: {  # false
                     exit_loop  # loop_3
                   }
                 }
                 %x_66:ptr<function, vec4<f32>, read_write> = var
                 %x_70:ptr<function, vec4<f32>, read_write> = var
-                %25:bool = lt %x_34, 0i
-                if %25 [t: %b11, f: %b12] {  # if_2
-                  %b11 = block {  # true
+                %29:bool = lt %x_34, 0i
+                if %29 [t: $B10, f: $B11] {  # if_2
+                  $B10: {  # true
                     store %x_39, true
                     exit_loop  # loop_3
                   }
-                  %b12 = block {  # false
-                    %26:bool = eq %x_34, 1i
-                    if %26 [t: %b13, f: %b14] {  # if_3
-                      %b13 = block {  # true
-                        %27:f32 = convert %x_34
-                        %x_65:vec2<f32> = construct %27
-                        %29:f32 = access %x_65, 0u
-                        %30:vec4<f32> = load %x_42
-                        %31:vec2<f32> = swizzle %30, yz
-                        %32:f32 = access %x_65, 1u
-                        %33:vec4<f32> = construct %29, %31, %32
-                        store %x_66, %33
-                        %34:vec4<f32> = load %x_66
-                        store %x_45, %34
+                  $B11: {  # false
+                    %30:bool = eq %x_34, 1i
+                    if %30 [t: $B12, f: $B13] {  # if_3
+                      $B12: {  # true
+                        %31:f32 = convert %x_34
+                        %32:vec2<f32> = construct %31
+                        %x_65:vec2<f32> = let %32
+                        %34:f32 = access %x_65, 0u
+                        %35:vec4<f32> = load %x_42
+                        %36:vec2<f32> = swizzle %35, yz
+                        %37:f32 = access %x_65, 1u
+                        %38:vec4<f32> = construct %34, %36, %37
+                        store %x_66, %38
+                        %39:vec4<f32> = load %x_66
+                        store %x_45, %39
                         exit_if  # if_3
                       }
-                      %b14 = block {  # false
-                        %35:i32 = add %x_34, 1i
-                        %36:f32 = convert %35
-                        %x_69:vec2<f32> = construct %36
-                        %38:f32 = access %x_69, 0u
-                        %39:vec4<f32> = load %x_42
-                        %40:vec2<f32> = swizzle %39, yz
-                        %41:f32 = access %x_69, 1u
-                        %42:vec4<f32> = construct %38, %40, %41
-                        store %x_70, %42
-                        %43:vec4<f32> = load %x_70
-                        store %x_45, %43
+                      $B13: {  # false
+                        %40:i32 = add %x_34, 1i
+                        %41:f32 = convert %40
+                        %42:vec2<f32> = construct %41
+                        %x_69:vec2<f32> = let %42
+                        %44:f32 = access %x_69, 0u
+                        %45:vec4<f32> = load %x_42
+                        %46:vec2<f32> = swizzle %45, yz
+                        %47:f32 = access %x_69, 1u
+                        %48:vec4<f32> = construct %44, %46, %47
+                        store %x_70, %48
+                        %49:vec4<f32> = load %x_70
+                        store %x_45, %49
                         exit_if  # if_3
                       }
                     }
                     exit_if  # if_2
                   }
                 }
-                continue %b8
+                continue  # -> $B7
               }
-              %b8 = block {  # continuing
-                %44:i32 = load %x_47
-                %45:i32 = add %44, 1i
-                store %x_48, %45
-                %46:vec4<f32> = load %x_45
-                store %x_42, %46
-                %47:i32 = load %x_48
-                store %x_47, %47
-                next_iteration %b7
+              $B7: {  # continuing
+                %50:i32 = load %x_47
+                %51:i32 = add %50, 1i
+                store %x_48, %51
+                %52:vec4<f32> = load %x_45
+                store %x_42, %52
+                %53:i32 = load %x_48
+                store %x_47, %53
+                next_iteration  # -> $B6
               }
             }
-            %48:bool = load %x_39
-            if %48 [t: %b15] {  # if_4
-              %b15 = block {  # true
+            %54:bool = load %x_39
+            if %54 [t: $B14] {  # if_4
+              $B14: {  # true
                 exit_loop  # loop_2
               }
             }
-            continue %b6
+            continue  # -> $B5
           }
-          %b6 = block {  # continuing
-            %49:bool = load %x_39
-            store %x_38, %49
-            %50:vec4<f32> = load %x_42
-            store %x_41, %50
-            %51:bool = lt %x_34, 0i
-            %52:bool = eq %51, false
-            break_if %52 %b5
+          $B5: {  # continuing
+            %55:bool = load %x_39
+            store %x_38, %55
+            %56:vec4<f32> = load %x_42
+            store %x_41, %56
+            %57:bool = lt %x_34, 0i
+            %58:bool = eq %57, false
+            break_if %58  # -> [t: exit_loop loop_2, f: $B4]
           }
         }
-        %53:bool = load %x_39
-        if %53 [t: %b16] {  # if_5
-          %b16 = block {  # true
+        %59:bool = load %x_39
+        if %59 [t: $B15] {  # if_5
+          $B15: {  # true
             exit_loop  # loop_1
           }
         }
-        %54:vec4<f32> = load %x_42
-        store %x_GLF_color, %54
+        %60:vec4<f32> = load %x_42
+        store %x_GLF_color, %60
         exit_loop  # loop_1
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
-      }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b17 {
-  %b17 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B16: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %57:void = call %main_1
-    %58:vec4<f32> = load %x_GLF_color
-    %59:main_out = construct %58
-    ret %59
+    %63:void = call %main_1
+    %64:vec4<f32> = load %x_GLF_color
+    %65:main_out = construct %64
+    ret %65
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B17: {
+    %67:i32 = convert %value
+    %68:bool = gte %value, -2147483648.0f
+    %69:i32 = select -2147483648i, %67, %68
+    %70:bool = lte %value, 2147483520.0f
+    %71:i32 = select 2147483647i, %69, %70
+    ret %71
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/set-color-in-one-iteration-while-loop/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/set-color-in-one-iteration-while-loop/0.wgsl.expected.ir.msl
index 4517f97..9692897 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/set-color-in-one-iteration-while-loop/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/set-color-in-one-iteration-while-loop/0.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,157 +8,174 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+%main_1 = func():void {
+  $B2: {
+    loop [b: $B3] {  # loop_1
+      $B3: {  # body
         %x_42:ptr<function, vec4<f32>, read_write> = var
         %x_39:ptr<function, bool, read_write> = var
         %x_38_phi:ptr<function, bool, read_write> = var
         %x_41_phi:ptr<function, vec4<f32>, read_write> = var
-        %x_32:f32 = load_vector_element %gl_FragCoord, 0u
-        %10:f32 = clamp %x_32, 0.0f, 1.0f
-        %x_34:i32 = convert %10
+        %9:f32 = load_vector_element %gl_FragCoord, 0u
+        %x_32:f32 = let %9
+        %11:f32 = clamp %x_32, 0.0f, 1.0f
+        %12:i32 = call %tint_f32_to_i32, %11
+        %x_34:i32 = let %12
         store %x_GLF_color, vec4<f32>(0.0f)
         store %x_38_phi, false
         store %x_41_phi, vec4<f32>(0.0f)
-        loop [b: %b5, c: %b6] {  # loop_2
-          %b5 = block {  # body
+        loop [b: $B4, c: $B5] {  # loop_2
+          $B4: {  # body
             %x_42_phi:ptr<function, vec4<f32>, read_write> = var
             %x_47_phi:ptr<function, i32, read_write> = var
             %x_39_phi:ptr<function, bool, read_write> = var
-            %x_38:bool = load %x_38_phi
-            %x_41:vec4<f32> = load %x_41_phi
+            %18:bool = load %x_38_phi
+            %x_38:bool = let %18
+            %20:vec4<f32> = load %x_41_phi
+            %x_41:vec4<f32> = let %20
             store %x_42_phi, %x_41
             store %x_47_phi, 0i
-            loop [b: %b7, c: %b8] {  # loop_3
-              %b7 = block {  # body
+            loop [b: $B6, c: $B7] {  # loop_3
+              $B6: {  # body
                 %x_45:ptr<function, vec4<f32>, read_write> = var
                 %x_48:ptr<function, i32, read_write> = var
-                %19:vec4<f32> = load %x_42_phi
-                store %x_42, %19
-                %x_47:i32 = load %x_47_phi
-                %21:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-                %x_50:f32 = load_vector_element %21, 1u
+                %24:vec4<f32> = load %x_42_phi
+                store %x_42, %24
+                %25:i32 = load %x_47_phi
+                %x_47:i32 = let %25
+                %27:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
+                %28:f32 = load_vector_element %27, 1u
+                %x_50:f32 = let %28
                 store %x_39_phi, %x_38
-                %23:i32 = convert %x_50
-                %24:i32 = add %x_34, %23
-                %25:bool = lt %x_47, %24
-                if %25 [t: %b9, f: %b10] {  # if_1
-                  %b9 = block {  # true
+                %30:i32 = call %tint_f32_to_i32, %x_50
+                %31:i32 = add %x_34, %30
+                %32:bool = lt %x_47, %31
+                if %32 [t: $B8, f: $B9] {  # if_1
+                  $B8: {  # true
                     exit_if  # if_1
                   }
-                  %b10 = block {  # false
+                  $B9: {  # false
                     exit_loop  # loop_3
                   }
                 }
                 %x_66:ptr<function, vec4<f32>, read_write> = var
                 %x_70:ptr<function, vec4<f32>, read_write> = var
                 %x_45_phi:ptr<function, vec4<f32>, read_write> = var
-                %29:bool = lt %x_34, 0i
-                if %29 [t: %b11, f: %b12] {  # if_2
-                  %b11 = block {  # true
+                %36:bool = lt %x_34, 0i
+                if %36 [t: $B10, f: $B11] {  # if_2
+                  $B10: {  # true
                     store %x_39_phi, true
                     exit_loop  # loop_3
                   }
-                  %b12 = block {  # false
-                    %30:bool = eq %x_34, 1i
-                    if %30 [t: %b13, f: %b14] {  # if_3
-                      %b13 = block {  # true
-                        %x_64:f32 = convert %x_34
-                        %x_65:vec2<f32> = construct %x_64, %x_64
-                        %33:f32 = access %x_65, 0u
-                        %34:f32 = load_vector_element %x_42, 1u
-                        %35:f32 = load_vector_element %x_42, 2u
-                        %36:f32 = access %x_65, 1u
-                        %37:vec4<f32> = construct %33, %34, %35, %36
-                        store %x_66, %37
-                        %38:vec4<f32> = load %x_66
-                        store %x_45_phi, %38
-                        exit_if  # if_3
-                      }
-                      %b14 = block {  # false
-                        %39:i32 = add %x_34, 1i
-                        %x_68:f32 = convert %39
-                        %x_69:vec2<f32> = construct %x_68, %x_68
-                        %42:f32 = access %x_69, 0u
+                  $B11: {  # false
+                    %37:bool = eq %x_34, 1i
+                    if %37 [t: $B12, f: $B13] {  # if_3
+                      $B12: {  # true
+                        %38:f32 = convert %x_34
+                        %x_64:f32 = let %38
+                        %40:vec2<f32> = construct %x_64, %x_64
+                        %x_65:vec2<f32> = let %40
+                        %42:f32 = access %x_65, 0u
                         %43:f32 = load_vector_element %x_42, 1u
                         %44:f32 = load_vector_element %x_42, 2u
-                        %45:f32 = access %x_69, 1u
+                        %45:f32 = access %x_65, 1u
                         %46:vec4<f32> = construct %42, %43, %44, %45
-                        store %x_70, %46
-                        %47:vec4<f32> = load %x_70
+                        store %x_66, %46
+                        %47:vec4<f32> = load %x_66
                         store %x_45_phi, %47
                         exit_if  # if_3
                       }
+                      $B13: {  # false
+                        %48:i32 = add %x_34, 1i
+                        %49:f32 = convert %48
+                        %x_68:f32 = let %49
+                        %51:vec2<f32> = construct %x_68, %x_68
+                        %x_69:vec2<f32> = let %51
+                        %53:f32 = access %x_69, 0u
+                        %54:f32 = load_vector_element %x_42, 1u
+                        %55:f32 = load_vector_element %x_42, 2u
+                        %56:f32 = access %x_69, 1u
+                        %57:vec4<f32> = construct %53, %54, %55, %56
+                        store %x_70, %57
+                        %58:vec4<f32> = load %x_70
+                        store %x_45_phi, %58
+                        exit_if  # if_3
+                      }
                     }
-                    %48:vec4<f32> = load %x_45_phi
-                    store %x_45, %48
+                    %59:vec4<f32> = load %x_45_phi
+                    store %x_45, %59
                     exit_if  # if_2
                   }
                 }
-                continue %b8
+                continue  # -> $B7
               }
-              %b8 = block {  # continuing
-                %49:i32 = add %x_47, 1i
-                store %x_48, %49
-                %50:vec4<f32> = load %x_45
-                store %x_42_phi, %50
-                %51:i32 = load %x_48
-                store %x_47_phi, %51
-                next_iteration %b7
+              $B7: {  # continuing
+                %60:i32 = add %x_47, 1i
+                store %x_48, %60
+                %61:vec4<f32> = load %x_45
+                store %x_42_phi, %61
+                %62:i32 = load %x_48
+                store %x_47_phi, %62
+                next_iteration  # -> $B6
               }
             }
-            %52:bool = load %x_39_phi
-            store %x_39, %52
-            %53:bool = load %x_39
-            if %53 [t: %b15] {  # if_4
-              %b15 = block {  # true
+            %63:bool = load %x_39_phi
+            store %x_39, %63
+            %64:bool = load %x_39
+            if %64 [t: $B14] {  # if_4
+              $B14: {  # true
                 exit_loop  # loop_2
               }
             }
-            continue %b6
+            continue  # -> $B5
           }
-          %b6 = block {  # continuing
-            %54:bool = load %x_39
-            store %x_38_phi, %54
-            %55:vec4<f32> = load %x_42
-            store %x_41_phi, %55
-            %56:bool = lt %x_34, 0i
-            %57:bool = eq %56, false
-            break_if %57 %b5
+          $B5: {  # continuing
+            %65:bool = load %x_39
+            store %x_38_phi, %65
+            %66:vec4<f32> = load %x_42
+            store %x_41_phi, %66
+            %67:bool = lt %x_34, 0i
+            %68:bool = eq %67, false
+            break_if %68  # -> [t: exit_loop loop_2, f: $B4]
           }
         }
-        %58:bool = load %x_39
-        if %58 [t: %b16] {  # if_5
-          %b16 = block {  # true
+        %69:bool = load %x_39
+        if %69 [t: $B15] {  # if_5
+          $B15: {  # true
             exit_loop  # loop_1
           }
         }
-        %59:vec4<f32> = load %x_42
-        store %x_GLF_color, %59
+        %70:vec4<f32> = load %x_42
+        store %x_GLF_color, %70
         exit_loop  # loop_1
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
-      }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b17 {
-  %b17 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B16: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %62:void = call %main_1
-    %63:vec4<f32> = load %x_GLF_color
-    %64:main_out = construct %63
-    ret %64
+    %73:void = call %main_1
+    %74:vec4<f32> = load %x_GLF_color
+    %75:main_out = construct %74
+    ret %75
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B17: {
+    %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
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/similar-nested-ifs/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/similar-nested-ifs/0-opt.spvasm.expected.ir.msl
index 85c6810..dcb12b1 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/similar-nested-ifs/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/similar-nested-ifs/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,15 +8,15 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gv:ptr<private, f32, read_write> = var
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %lv:ptr<function, f32, read_write> = var
     %x_43:ptr<function, f32, read_write> = var
     %GLF_live5r:ptr<function, i32, read_write> = var
@@ -24,14 +24,14 @@
     %10:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
     %11:f32 = load_vector_element %10, 1u
     %12:bool = gt 1.0f, %11
-    if %12 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    if %12 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         %13:f32 = load %gv
         %14:f32 = abs %13
         store %x_43, %14
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_43, 260.0f
         exit_if  # if_1
       }
@@ -39,65 +39,66 @@
     %15:f32 = load %x_43
     store %lv, %15
     %16:f32 = load %lv
-    %17:i32 = convert %16
-    %18:bool = lt %17, 250i
-    if %18 [t: %b5] {  # if_2
-      %b5 = block {  # true
-        %19:f32 = load %lv
-        %20:i32 = convert %19
-        %21:bool = lt %20, 180i
-        if %21 [t: %b6, f: %b7] {  # if_3
-          %b6 = block {  # true
-            %22:f32 = load %lv
-            %x_65:f32 = clamp %22, 1.0f, 1.0f
+    %17:i32 = call %tint_f32_to_i32, %16
+    %19:bool = lt %17, 250i
+    if %19 [t: $B5] {  # if_2
+      $B5: {  # true
+        %20:f32 = load %lv
+        %21:i32 = call %tint_f32_to_i32, %20
+        %22:bool = lt %21, 180i
+        if %22 [t: $B6, f: $B7] {  # if_3
+          $B6: {  # true
+            %23:f32 = load %lv
+            %24:f32 = clamp %23, 1.0f, 1.0f
+            %x_65:f32 = let %24
             exit_if  # if_3
           }
-          %b7 = block {  # false
-            %24:f32 = load_vector_element %gl_FragCoord, 1u
-            %25:bool = lt %24, 0.0f
-            if %25 [t: %b8] {  # if_4
-              %b8 = block {  # true
-                %26:f32 = load %lv
-                %27:i32 = convert %26
-                %28:bool = lt %27, 210i
-                if %28 [t: %b9] {  # if_5
-                  %b9 = block {  # true
-                    loop [b: %b10, c: %b11] {  # loop_1
-                      %b10 = block {  # body
-                        continue %b11
+          $B7: {  # false
+            %26:f32 = load_vector_element %gl_FragCoord, 1u
+            %27:bool = lt %26, 0.0f
+            if %27 [t: $B8] {  # if_4
+              $B8: {  # true
+                %28:f32 = load %lv
+                %29:i32 = call %tint_f32_to_i32, %28
+                %30:bool = lt %29, 210i
+                if %30 [t: $B9] {  # if_5
+                  $B9: {  # true
+                    loop [b: $B10, c: $B11] {  # loop_1
+                      $B10: {  # body
+                        continue  # -> $B11
                       }
-                      %b11 = block {  # continuing
-                        break_if false %b10
+                      $B11: {  # continuing
+                        break_if false  # -> [t: exit_loop loop_1, f: $B10]
                       }
                     }
                     exit_if  # if_5
                   }
                 }
                 store %GLF_live5r, 0i
-                loop [b: %b12, c: %b13] {  # loop_2
-                  %b12 = block {  # body
-                    if true [t: %b14, f: %b15] {  # if_6
-                      %b14 = block {  # true
+                loop [b: $B12, c: $B13] {  # loop_2
+                  $B12: {  # body
+                    if true [t: $B14, f: $B15] {  # if_6
+                      $B14: {  # true
                         exit_if  # if_6
                       }
-                      %b15 = block {  # false
-                        exit_loop  # loop_2
-                      }
-                    }
-                    %29:i32 = load %GLF_live5_looplimiter6
-                    %30:bool = gte %29, 6i
-                    if %30 [t: %b16] {  # if_7
-                      %b16 = block {  # true
+                      $B15: {  # false
                         exit_loop  # loop_2
                       }
                     }
                     %31:i32 = load %GLF_live5_looplimiter6
-                    %32:i32 = add %31, 1i
-                    store %GLF_live5_looplimiter6, %32
-                    continue %b13
+                    %32:bool = gte %31, 6i
+                    if %32 [t: $B16] {  # if_7
+                      $B16: {  # true
+                        exit_loop  # loop_2
+                      }
+                    }
+                    %33:i32 = load %GLF_live5_looplimiter6
+                    %34:i32 = add %33, 1i
+                    store %GLF_live5_looplimiter6, %34
+                    continue  # -> $B13
                   }
-                  %b13 = block {  # continuing
-                    next_iteration %b12
+                  $B13: {  # continuing
+                    next_iteration  # -> $B12
                   }
                 }
                 exit_if  # if_4
@@ -113,13 +114,23 @@
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b17 {
-  %b17 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B17: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %35:void = call %main_1
-    %36:vec4<f32> = load %x_GLF_color
-    %37:main_out = construct %36
-    ret %37
+    %37:void = call %main_1
+    %38:vec4<f32> = load %x_GLF_color
+    %39:main_out = construct %38
+    ret %39
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B18: {
+    %41:i32 = convert %value
+    %42:bool = gte %value, -2147483648.0f
+    %43:i32 = select -2147483648i, %41, %42
+    %44:bool = lte %value, 2147483520.0f
+    %45:i32 = select 2147483647i, %43, %44
+    ret %45
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/similar-nested-ifs/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/similar-nested-ifs/0-opt.wgsl.expected.ir.msl
index ac4ff0d..d37f6a8 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/similar-nested-ifs/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/similar-nested-ifs/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,96 +8,107 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gv:ptr<private, f32, read_write> = var
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %lv:ptr<function, f32, read_write> = var
     %x_43:ptr<function, f32, read_write> = var
     %GLF_live5r:ptr<function, i32, read_write> = var
     %GLF_live5_looplimiter6:ptr<function, i32, read_write> = var
     %10:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-    %x_45:f32 = load_vector_element %10, 1u
-    %12:bool = gt 1.0f, %x_45
-    if %12 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %x_50:f32 = load %gv
-        %14:f32 = abs %x_50
-        store %x_43, %14
+    %11:f32 = load_vector_element %10, 1u
+    %x_45:f32 = let %11
+    %13:bool = gt 1.0f, %x_45
+    if %13 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %14:f32 = load %gv
+        %x_50:f32 = let %14
+        %16:f32 = abs %x_50
+        store %x_43, %16
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_43, 260.0f
         exit_if  # if_1
       }
     }
-    %x_52:f32 = load %x_43
+    %17:f32 = load %x_43
+    %x_52:f32 = let %17
     store %lv, %x_52
-    %x_53:f32 = load %lv
-    %17:i32 = convert %x_53
-    %18:bool = lt %17, 250i
-    if %18 [t: %b5] {  # if_2
-      %b5 = block {  # true
-        %x_58:f32 = load %lv
-        %20:i32 = convert %x_58
-        %21:bool = lt %20, 180i
-        if %21 [t: %b6, f: %b7] {  # if_3
-          %b6 = block {  # true
-            %x_64:f32 = load %lv
-            %x_65:f32 = clamp %x_64, 1.0f, 1.0f
+    %19:f32 = load %lv
+    %x_53:f32 = let %19
+    %21:i32 = call %tint_f32_to_i32, %x_53
+    %23:bool = lt %21, 250i
+    if %23 [t: $B5] {  # if_2
+      $B5: {  # true
+        %24:f32 = load %lv
+        %x_58:f32 = let %24
+        %26:i32 = call %tint_f32_to_i32, %x_58
+        %27:bool = lt %26, 180i
+        if %27 [t: $B6, f: $B7] {  # if_3
+          $B6: {  # true
+            %28:f32 = load %lv
+            %x_64:f32 = let %28
+            %30:f32 = clamp %x_64, 1.0f, 1.0f
+            %x_65:f32 = let %30
             exit_if  # if_3
           }
-          %b7 = block {  # false
-            %x_67:f32 = load_vector_element %gl_FragCoord, 1u
-            %25:bool = lt %x_67, 0.0f
-            if %25 [t: %b8] {  # if_4
-              %b8 = block {  # true
-                %x_71:f32 = load %lv
-                %27:i32 = convert %x_71
-                %28:bool = lt %27, 210i
-                if %28 [t: %b9] {  # if_5
-                  %b9 = block {  # true
-                    loop [b: %b10, c: %b11] {  # loop_1
-                      %b10 = block {  # body
-                        continue %b11
+          $B7: {  # false
+            %32:f32 = load_vector_element %gl_FragCoord, 1u
+            %x_67:f32 = let %32
+            %34:bool = lt %x_67, 0.0f
+            if %34 [t: $B8] {  # if_4
+              $B8: {  # true
+                %35:f32 = load %lv
+                %x_71:f32 = let %35
+                %37:i32 = call %tint_f32_to_i32, %x_71
+                %38:bool = lt %37, 210i
+                if %38 [t: $B9] {  # if_5
+                  $B9: {  # true
+                    loop [b: $B10, c: $B11] {  # loop_1
+                      $B10: {  # body
+                        continue  # -> $B11
                       }
-                      %b11 = block {  # continuing
-                        break_if false %b10
+                      $B11: {  # continuing
+                        break_if false  # -> [t: exit_loop loop_1, f: $B10]
                       }
                     }
                     exit_if  # if_5
                   }
                 }
                 store %GLF_live5r, 0i
-                loop [b: %b12, c: %b13] {  # loop_2
-                  %b12 = block {  # body
-                    if true [t: %b14, f: %b15] {  # if_6
-                      %b14 = block {  # true
+                loop [b: $B12, c: $B13] {  # loop_2
+                  $B12: {  # body
+                    if true [t: $B14, f: $B15] {  # if_6
+                      $B14: {  # true
                         exit_if  # if_6
                       }
-                      %b15 = block {  # false
+                      $B15: {  # false
                         exit_loop  # loop_2
                       }
                     }
-                    %x_11:i32 = load %GLF_live5_looplimiter6
-                    %30:bool = gte %x_11, 6i
-                    if %30 [t: %b16] {  # if_7
-                      %b16 = block {  # true
+                    %39:i32 = load %GLF_live5_looplimiter6
+                    %x_11:i32 = let %39
+                    %41:bool = gte %x_11, 6i
+                    if %41 [t: $B16] {  # if_7
+                      $B16: {  # true
                         exit_loop  # loop_2
                       }
                     }
-                    %x_12:i32 = load %GLF_live5_looplimiter6
-                    %32:i32 = add %x_12, 1i
-                    store %GLF_live5_looplimiter6, %32
-                    continue %b13
+                    %42:i32 = load %GLF_live5_looplimiter6
+                    %x_12:i32 = let %42
+                    %44:i32 = add %x_12, 1i
+                    store %GLF_live5_looplimiter6, %44
+                    continue  # -> $B13
                   }
-                  %b13 = block {  # continuing
-                    next_iteration %b12
+                  $B13: {  # continuing
+                    next_iteration  # -> $B12
                   }
                 }
                 exit_if  # if_4
@@ -113,13 +124,23 @@
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b17 {
-  %b17 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B17: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %35:void = call %main_1
-    %36:vec4<f32> = load %x_GLF_color
-    %37:main_out = construct %36
-    ret %37
+    %47:void = call %main_1
+    %48:vec4<f32> = load %x_GLF_color
+    %49:main_out = construct %48
+    ret %49
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B18: {
+    %51:i32 = convert %value
+    %52:bool = gte %value, -2147483648.0f
+    %53:i32 = select -2147483648i, %51, %52
+    %54:bool = lte %value, 2147483520.0f
+    %55:i32 = select 2147483647i, %53, %54
+    ret %55
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/smoothstep-after-loop/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/smoothstep-after-loop/0-opt.spvasm.expected.ir.msl
index cdbf128..40ec97c 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/smoothstep-after-loop/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/smoothstep-after-loop/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: min
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/smoothstep-after-loop/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/smoothstep-after-loop/0-opt.wgsl.expected.ir.msl
index cdbf128..40ec97c 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/smoothstep-after-loop/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/smoothstep-after-loop/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: min
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-access-chains/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-access-chains/0-opt.spvasm.expected.ir.msl
index 793f5ff..074406f 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-access-chains/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-access-chains/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,15 +8,15 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %map:ptr<private, array<i32, 256>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %pos:ptr<function, vec2<f32>, read_write> = var
     %ipos:ptr<function, vec2<i32>, read_write> = var
     %i:ptr<function, i32, read_write> = var
@@ -34,42 +34,44 @@
     store %pos, %19
     %20:f32 = load_vector_element %pos, 0u
     %21:f32 = mul %20, 16.0f
-    %22:i32 = convert %21
-    %23:f32 = load_vector_element %pos, 1u
-    %24:f32 = mul %23, 16.0f
-    %25:i32 = convert %24
-    %26:vec2<i32> = construct %22, %25
-    store %ipos, %26
+    %22:i32 = call %tint_f32_to_i32, %21
+    %24:i32 = let %22
+    %25:f32 = load_vector_element %pos, 1u
+    %26:f32 = mul %25, 16.0f
+    %27:i32 = call %tint_f32_to_i32, %26
+    %28:vec2<i32> = construct %24, %27
+    store %ipos, %28
     store %i, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %27:i32 = load %i
-        %28:bool = lt %27, 256i
-        if %28 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %29:i32 = load %i
+        %30:bool = lt %29, 256i
+        if %30 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_78:i32 = load %i
-        %30:ptr<private, i32, read_write> = access %map, %x_78
-        store %30, 0i
-        continue %b4
-      }
-      %b4 = block {  # continuing
         %31:i32 = load %i
-        %32:i32 = add %31, 1i
-        store %i, %32
-        next_iteration %b3
+        %x_78:i32 = let %31
+        %33:ptr<private, i32, read_write> = access %map, %x_78
+        store %33, 0i
+        continue  # -> $B4
+      }
+      $B4: {  # continuing
+        %34:i32 = load %i
+        %35:i32 = add %34, 1i
+        store %i, %35
+        next_iteration  # -> $B3
       }
     }
     store %p, vec2<i32>(0i)
     store %canwalk, true
     store %v, 0i
-    loop [b: %b7, c: %b8] {  # loop_2
-      %b7 = block {  # body
+    loop [b: $B7, c: $B8] {  # loop_2
+      $B7: {  # body
         %x_102:ptr<function, bool, read_write> = var
         %x_103:ptr<function, bool, read_write> = var
         %x_122:ptr<function, bool, read_write> = var
@@ -78,119 +80,123 @@
         %x_143:ptr<function, bool, read_write> = var
         %x_162:ptr<function, bool, read_write> = var
         %x_163:ptr<function, bool, read_write> = var
-        %41:i32 = load %v
-        %42:i32 = add %41, 1i
-        store %v, %42
+        %44:i32 = load %v
+        %45:i32 = add %44, 1i
+        store %v, %45
         store %directions, 0i
-        %43:i32 = load_vector_element %p, 0u
-        %x_90:bool = gt %43, 0i
+        %46:i32 = load_vector_element %p, 0u
+        %47:bool = gt %46, 0i
+        %x_90:bool = let %47
         store %x_103, %x_90
-        if %x_90 [t: %b9] {  # if_2
-          %b9 = block {  # true
-            %45:i32 = load_vector_element %p, 0u
-            %46:i32 = sub %45, 2i
-            %47:i32 = load_vector_element %p, 1u
-            %48:i32 = mul %47, 16i
-            %49:i32 = add %46, %48
-            %50:ptr<private, i32, read_write> = access %map, %49
-            %51:i32 = load %50
-            %52:bool = eq %51, 0i
-            store %x_102, %52
-            %53:bool = load %x_102
-            store %x_103, %53
+        if %x_90 [t: $B9] {  # if_2
+          $B9: {  # true
+            %49:i32 = load_vector_element %p, 0u
+            %50:i32 = sub %49, 2i
+            %51:i32 = load_vector_element %p, 1u
+            %52:i32 = mul %51, 16i
+            %53:i32 = add %50, %52
+            %54:ptr<private, i32, read_write> = access %map, %53
+            %55:i32 = load %54
+            %56:bool = eq %55, 0i
+            store %x_102, %56
+            %57:bool = load %x_102
+            store %x_103, %57
             exit_if  # if_2
           }
         }
-        %54:bool = load %x_103
-        if %54 [t: %b10] {  # if_3
-          %b10 = block {  # true
-            %55:i32 = load %directions
-            %56:i32 = add %55, 1i
-            store %directions, %56
+        %58:bool = load %x_103
+        if %58 [t: $B10] {  # if_3
+          $B10: {  # true
+            %59:i32 = load %directions
+            %60:i32 = add %59, 1i
+            store %directions, %60
             exit_if  # if_3
           }
         }
-        %57:i32 = load_vector_element %p, 1u
-        %x_110:bool = gt %57, 0i
+        %61:i32 = load_vector_element %p, 1u
+        %62:bool = gt %61, 0i
+        %x_110:bool = let %62
         store %x_123, %x_110
-        if %x_110 [t: %b11] {  # if_4
-          %b11 = block {  # true
-            %59:i32 = load_vector_element %p, 0u
-            %60:i32 = load_vector_element %p, 1u
-            %61:i32 = sub %60, 2i
-            %62:i32 = mul %61, 16i
-            %63:i32 = add %59, %62
-            %64:ptr<private, i32, read_write> = access %map, %63
-            %65:i32 = load %64
-            %66:bool = eq %65, 0i
-            store %x_122, %66
-            %67:bool = load %x_122
-            store %x_123, %67
+        if %x_110 [t: $B11] {  # if_4
+          $B11: {  # true
+            %64:i32 = load_vector_element %p, 0u
+            %65:i32 = load_vector_element %p, 1u
+            %66:i32 = sub %65, 2i
+            %67:i32 = mul %66, 16i
+            %68:i32 = add %64, %67
+            %69:ptr<private, i32, read_write> = access %map, %68
+            %70:i32 = load %69
+            %71:bool = eq %70, 0i
+            store %x_122, %71
+            %72:bool = load %x_122
+            store %x_123, %72
             exit_if  # if_4
           }
         }
-        %68:bool = load %x_123
-        if %68 [t: %b12] {  # if_5
-          %b12 = block {  # true
-            %69:i32 = load %directions
-            %70:i32 = add %69, 1i
-            store %directions, %70
+        %73:bool = load %x_123
+        if %73 [t: $B12] {  # if_5
+          $B12: {  # true
+            %74:i32 = load %directions
+            %75:i32 = add %74, 1i
+            store %directions, %75
             exit_if  # if_5
           }
         }
-        %71:i32 = load_vector_element %p, 0u
-        %x_130:bool = lt %71, 14i
+        %76:i32 = load_vector_element %p, 0u
+        %77:bool = lt %76, 14i
+        %x_130:bool = let %77
         store %x_143, %x_130
-        if %x_130 [t: %b13] {  # if_6
-          %b13 = block {  # true
-            %73:i32 = load_vector_element %p, 0u
-            %74:i32 = add %73, 2i
-            %75:i32 = load_vector_element %p, 1u
-            %76:i32 = mul %75, 16i
-            %77:i32 = add %74, %76
-            %78:ptr<private, i32, read_write> = access %map, %77
-            %79:i32 = load %78
-            %80:bool = eq %79, 0i
-            store %x_142, %80
-            %81:bool = load %x_142
-            store %x_143, %81
+        if %x_130 [t: $B13] {  # if_6
+          $B13: {  # true
+            %79:i32 = load_vector_element %p, 0u
+            %80:i32 = add %79, 2i
+            %81:i32 = load_vector_element %p, 1u
+            %82:i32 = mul %81, 16i
+            %83:i32 = add %80, %82
+            %84:ptr<private, i32, read_write> = access %map, %83
+            %85:i32 = load %84
+            %86:bool = eq %85, 0i
+            store %x_142, %86
+            %87:bool = load %x_142
+            store %x_143, %87
             exit_if  # if_6
           }
         }
-        %82:bool = load %x_143
-        if %82 [t: %b14] {  # if_7
-          %b14 = block {  # true
-            %83:i32 = load %directions
-            %84:i32 = add %83, 1i
-            store %directions, %84
+        %88:bool = load %x_143
+        if %88 [t: $B14] {  # if_7
+          $B14: {  # true
+            %89:i32 = load %directions
+            %90:i32 = add %89, 1i
+            store %directions, %90
             exit_if  # if_7
           }
         }
-        %85:i32 = load_vector_element %p, 1u
-        %x_150:bool = lt %85, 14i
+        %91:i32 = load_vector_element %p, 1u
+        %92:bool = lt %91, 14i
+        %x_150:bool = let %92
         store %x_163, %x_150
-        if %x_150 [t: %b15] {  # if_8
-          %b15 = block {  # true
-            %87:i32 = load_vector_element %p, 0u
-            %88:i32 = load_vector_element %p, 1u
-            %89:i32 = add %88, 2i
-            %90:i32 = mul %89, 16i
-            %91:i32 = add %87, %90
-            %92:ptr<private, i32, read_write> = access %map, %91
-            %93:i32 = load %92
-            %94:bool = eq %93, 0i
-            store %x_162, %94
-            %95:bool = load %x_162
-            store %x_163, %95
+        if %x_150 [t: $B15] {  # if_8
+          $B15: {  # true
+            %94:i32 = load_vector_element %p, 0u
+            %95:i32 = load_vector_element %p, 1u
+            %96:i32 = add %95, 2i
+            %97:i32 = mul %96, 16i
+            %98:i32 = add %94, %97
+            %99:ptr<private, i32, read_write> = access %map, %98
+            %100:i32 = load %99
+            %101:bool = eq %100, 0i
+            store %x_162, %101
+            %102:bool = load %x_162
+            store %x_163, %102
             exit_if  # if_8
           }
         }
-        %96:bool = load %x_163
-        if %96 [t: %b16] {  # if_9
-          %b16 = block {  # true
-            %97:i32 = load %directions
-            %98:i32 = add %97, 1i
-            store %directions, %98
+        %103:bool = load %x_163
+        if %103 [t: $B16] {  # if_9
+          $B16: {  # true
+            %104:i32 = load %directions
+            %105:i32 = add %104, 1i
+            store %directions, %105
             exit_if  # if_9
           }
         }
@@ -210,384 +216,440 @@
         %x_384:ptr<function, bool, read_write> = var
         %x_396:ptr<function, bool, read_write> = var
         %x_397:ptr<function, bool, read_write> = var
-        %115:i32 = load %directions
-        %116:bool = eq %115, 0i
-        if %116 [t: %b17, f: %b18] {  # if_10
-          %b17 = block {  # true
+        %122:i32 = load %directions
+        %123:bool = eq %122, 0i
+        if %123 [t: $B17, f: $B18] {  # if_10
+          $B17: {  # true
             store %canwalk, false
             store %i, 0i
-            loop [b: %b19, c: %b20] {  # loop_3
-              %b19 = block {  # body
-                %117:i32 = load %i
-                %118:bool = lt %117, 8i
-                if %118 [t: %b21, f: %b22] {  # if_11
-                  %b21 = block {  # true
+            loop [b: $B19, c: $B20] {  # loop_3
+              $B19: {  # body
+                %124:i32 = load %i
+                %125:bool = lt %124, 8i
+                if %125 [t: $B21, f: $B22] {  # if_11
+                  $B21: {  # true
                     exit_if  # if_11
                   }
-                  %b22 = block {  # false
+                  $B22: {  # false
                     exit_loop  # loop_3
                   }
                 }
                 store %j, 0i
-                loop [b: %b23, c: %b24] {  # loop_4
-                  %b23 = block {  # body
-                    %119:i32 = load %j
-                    %120:bool = lt %119, 8i
-                    if %120 [t: %b25, f: %b26] {  # if_12
-                      %b25 = block {  # true
+                loop [b: $B23, c: $B24] {  # loop_4
+                  $B23: {  # body
+                    %126:i32 = load %j
+                    %127:bool = lt %126, 8i
+                    if %127 [t: $B25, f: $B26] {  # if_12
+                      $B25: {  # true
                         exit_if  # if_12
                       }
-                      %b26 = block {  # false
+                      $B26: {  # false
                         exit_loop  # loop_4
                       }
                     }
-                    %121:i32 = load %j
-                    %122:i32 = mul %121, 2i
-                    %123:i32 = load %i
-                    %124:i32 = mul %123, 2i
-                    %125:i32 = mul %124, 16i
-                    %126:i32 = add %122, %125
-                    %127:ptr<private, i32, read_write> = access %map, %126
-                    %128:i32 = load %127
-                    %129:bool = eq %128, 0i
-                    if %129 [t: %b27] {  # if_13
-                      %b27 = block {  # true
-                        %130:i32 = load %j
-                        %131:i32 = mul %130, 2i
-                        store_vector_element %p, 0u, %131
-                        %132:i32 = load %i
-                        %133:i32 = mul %132, 2i
-                        store_vector_element %p, 1u, %133
+                    %128:i32 = load %j
+                    %129:i32 = mul %128, 2i
+                    %130:i32 = load %i
+                    %131:i32 = mul %130, 2i
+                    %132:i32 = mul %131, 16i
+                    %133:i32 = add %129, %132
+                    %134:ptr<private, i32, read_write> = access %map, %133
+                    %135:i32 = load %134
+                    %136:bool = eq %135, 0i
+                    if %136 [t: $B27] {  # if_13
+                      $B27: {  # true
+                        %137:i32 = load %j
+                        %138:i32 = mul %137, 2i
+                        store_vector_element %p, 0u, %138
+                        %139:i32 = load %i
+                        %140:i32 = mul %139, 2i
+                        store_vector_element %p, 1u, %140
                         store %canwalk, true
                         exit_if  # if_13
                       }
                     }
-                    continue %b24
+                    continue  # -> $B24
                   }
-                  %b24 = block {  # continuing
-                    %134:i32 = load %j
-                    %135:i32 = add %134, 1i
-                    store %j, %135
-                    next_iteration %b23
+                  $B24: {  # continuing
+                    %141:i32 = load %j
+                    %142:i32 = add %141, 1i
+                    store %j, %142
+                    next_iteration  # -> $B23
                   }
                 }
-                continue %b20
+                continue  # -> $B20
               }
-              %b20 = block {  # continuing
-                %136:i32 = load %i
-                %137:i32 = add %136, 1i
-                store %i, %137
-                next_iteration %b19
+              $B20: {  # continuing
+                %143:i32 = load %i
+                %144:i32 = add %143, 1i
+                store %i, %144
+                next_iteration  # -> $B19
               }
             }
-            %x_209:i32 = load_vector_element %p, 0u
-            %x_211:i32 = load_vector_element %p, 1u
-            %140:i32 = mul %x_211, 16i
-            %141:i32 = add %x_209, %140
-            %142:ptr<private, i32, read_write> = access %map, %141
-            store %142, 1i
+            %145:i32 = load_vector_element %p, 0u
+            %x_209:i32 = let %145
+            %147:i32 = load_vector_element %p, 1u
+            %x_211:i32 = let %147
+            %149:i32 = mul %x_211, 16i
+            %150:i32 = add %x_209, %149
+            %151:ptr<private, i32, read_write> = access %map, %150
+            store %151, 1i
             exit_if  # if_10
           }
-          %b18 = block {  # false
-            %143:i32 = load %v
-            %144:i32 = load %directions
-            %145:i32 = mod %143, %144
-            store %d, %145
-            %146:i32 = load %v
-            %147:i32 = load %directions
-            %148:i32 = add %146, %147
-            store %v, %148
-            %149:i32 = load %d
-            %x_222:bool = gte %149, 0i
+          $B18: {  # false
+            %152:i32 = load %v
+            %153:i32 = load %directions
+            %154:i32 = call %tint_mod_i32, %152, %153
+            store %d, %154
+            %156:i32 = load %v
+            %157:i32 = load %directions
+            %158:i32 = add %156, %157
+            store %v, %158
+            %159:i32 = load %d
+            %160:bool = gte %159, 0i
+            %x_222:bool = let %160
             store %x_228, %x_222
-            if %x_222 [t: %b28] {  # if_14
-              %b28 = block {  # true
-                %151:i32 = load_vector_element %p, 0u
-                %152:bool = gt %151, 0i
-                store %x_227, %152
-                %153:bool = load %x_227
-                store %x_228, %153
+            if %x_222 [t: $B28] {  # if_14
+              $B28: {  # true
+                %162:i32 = load_vector_element %p, 0u
+                %163:bool = gt %162, 0i
+                store %x_227, %163
+                %164:bool = load %x_227
+                store %x_228, %164
                 exit_if  # if_14
               }
             }
-            %154:bool = load %x_228
-            store %x_241, %154
-            %155:bool = load %x_228
-            if %155 [t: %b29] {  # if_15
-              %b29 = block {  # true
-                %156:i32 = load_vector_element %p, 0u
-                %157:i32 = sub %156, 2i
-                %158:i32 = load_vector_element %p, 1u
-                %159:i32 = mul %158, 16i
-                %160:i32 = add %157, %159
-                %161:ptr<private, i32, read_write> = access %map, %160
-                %162:i32 = load %161
-                %163:bool = eq %162, 0i
-                store %x_240, %163
-                %164:bool = load %x_240
-                store %x_241, %164
+            %165:bool = load %x_228
+            store %x_241, %165
+            %166:bool = load %x_228
+            if %166 [t: $B29] {  # if_15
+              $B29: {  # true
+                %167:i32 = load_vector_element %p, 0u
+                %168:i32 = sub %167, 2i
+                %169:i32 = load_vector_element %p, 1u
+                %170:i32 = mul %169, 16i
+                %171:i32 = add %168, %170
+                %172:ptr<private, i32, read_write> = access %map, %171
+                %173:i32 = load %172
+                %174:bool = eq %173, 0i
+                store %x_240, %174
+                %175:bool = load %x_240
+                store %x_241, %175
                 exit_if  # if_15
               }
             }
-            %165:bool = load %x_241
-            if %165 [t: %b30] {  # if_16
-              %b30 = block {  # true
-                %166:i32 = load %d
-                %167:i32 = sub %166, 1i
-                store %d, %167
-                %x_247:i32 = load_vector_element %p, 0u
-                %x_249:i32 = load_vector_element %p, 1u
-                %170:i32 = mul %x_249, 16i
-                %171:i32 = add %x_247, %170
-                %172:ptr<private, i32, read_write> = access %map, %171
-                store %172, 1i
-                %x_254:i32 = load_vector_element %p, 0u
-                %x_257:i32 = load_vector_element %p, 1u
-                %175:i32 = sub %x_254, 1i
-                %176:i32 = mul %x_257, 16i
-                %177:i32 = add %175, %176
-                %178:ptr<private, i32, read_write> = access %map, %177
-                store %178, 1i
-                %x_262:i32 = load_vector_element %p, 0u
-                %x_265:i32 = load_vector_element %p, 1u
-                %181:i32 = sub %x_262, 2i
-                %182:i32 = mul %x_265, 16i
-                %183:i32 = add %181, %182
-                %184:ptr<private, i32, read_write> = access %map, %183
-                store %184, 1i
-                %185:i32 = load_vector_element %p, 0u
-                %186:i32 = sub %185, 2i
-                store_vector_element %p, 0u, %186
+            %176:bool = load %x_241
+            if %176 [t: $B30] {  # if_16
+              $B30: {  # true
+                %177:i32 = load %d
+                %178:i32 = sub %177, 1i
+                store %d, %178
+                %179:i32 = load_vector_element %p, 0u
+                %x_247:i32 = let %179
+                %181:i32 = load_vector_element %p, 1u
+                %x_249:i32 = let %181
+                %183:i32 = mul %x_249, 16i
+                %184:i32 = add %x_247, %183
+                %185:ptr<private, i32, read_write> = access %map, %184
+                store %185, 1i
+                %186:i32 = load_vector_element %p, 0u
+                %x_254:i32 = let %186
+                %188:i32 = load_vector_element %p, 1u
+                %x_257:i32 = let %188
+                %190:i32 = sub %x_254, 1i
+                %191:i32 = mul %x_257, 16i
+                %192:i32 = add %190, %191
+                %193:ptr<private, i32, read_write> = access %map, %192
+                store %193, 1i
+                %194:i32 = load_vector_element %p, 0u
+                %x_262:i32 = let %194
+                %196:i32 = load_vector_element %p, 1u
+                %x_265:i32 = let %196
+                %198:i32 = sub %x_262, 2i
+                %199:i32 = mul %x_265, 16i
+                %200:i32 = add %198, %199
+                %201:ptr<private, i32, read_write> = access %map, %200
+                store %201, 1i
+                %202:i32 = load_vector_element %p, 0u
+                %203:i32 = sub %202, 2i
+                store_vector_element %p, 0u, %203
                 exit_if  # if_16
               }
             }
-            %187:i32 = load %d
-            %x_274:bool = gte %187, 0i
+            %204:i32 = load %d
+            %205:bool = gte %204, 0i
+            %x_274:bool = let %205
             store %x_280, %x_274
-            if %x_274 [t: %b31] {  # if_17
-              %b31 = block {  # true
-                %189:i32 = load_vector_element %p, 1u
-                %190:bool = gt %189, 0i
-                store %x_279, %190
-                %191:bool = load %x_279
-                store %x_280, %191
+            if %x_274 [t: $B31] {  # if_17
+              $B31: {  # true
+                %207:i32 = load_vector_element %p, 1u
+                %208:bool = gt %207, 0i
+                store %x_279, %208
+                %209:bool = load %x_279
+                store %x_280, %209
                 exit_if  # if_17
               }
             }
-            %192:bool = load %x_280
-            store %x_293, %192
-            %193:bool = load %x_280
-            if %193 [t: %b32] {  # if_18
-              %b32 = block {  # true
-                %194:i32 = load_vector_element %p, 0u
-                %195:i32 = load_vector_element %p, 1u
-                %196:i32 = sub %195, 2i
-                %197:i32 = mul %196, 16i
-                %198:i32 = add %194, %197
-                %199:ptr<private, i32, read_write> = access %map, %198
-                %200:i32 = load %199
-                %201:bool = eq %200, 0i
-                store %x_292, %201
-                %202:bool = load %x_292
-                store %x_293, %202
+            %210:bool = load %x_280
+            store %x_293, %210
+            %211:bool = load %x_280
+            if %211 [t: $B32] {  # if_18
+              $B32: {  # true
+                %212:i32 = load_vector_element %p, 0u
+                %213:i32 = load_vector_element %p, 1u
+                %214:i32 = sub %213, 2i
+                %215:i32 = mul %214, 16i
+                %216:i32 = add %212, %215
+                %217:ptr<private, i32, read_write> = access %map, %216
+                %218:i32 = load %217
+                %219:bool = eq %218, 0i
+                store %x_292, %219
+                %220:bool = load %x_292
+                store %x_293, %220
                 exit_if  # if_18
               }
             }
-            %203:bool = load %x_293
-            if %203 [t: %b33] {  # if_19
-              %b33 = block {  # true
-                %204:i32 = load %d
-                %205:i32 = sub %204, 1i
-                store %d, %205
-                %x_299:i32 = load_vector_element %p, 0u
-                %x_301:i32 = load_vector_element %p, 1u
-                %208:i32 = mul %x_301, 16i
-                %209:i32 = add %x_299, %208
-                %210:ptr<private, i32, read_write> = access %map, %209
-                store %210, 1i
-                %x_306:i32 = load_vector_element %p, 0u
-                %x_308:i32 = load_vector_element %p, 1u
-                %213:i32 = sub %x_308, 1i
-                %214:i32 = mul %213, 16i
-                %215:i32 = add %x_306, %214
-                %216:ptr<private, i32, read_write> = access %map, %215
-                store %216, 1i
-                %x_314:i32 = load_vector_element %p, 0u
-                %x_316:i32 = load_vector_element %p, 1u
-                %219:i32 = sub %x_316, 2i
-                %220:i32 = mul %219, 16i
-                %221:i32 = add %x_314, %220
-                %222:ptr<private, i32, read_write> = access %map, %221
-                store %222, 1i
-                %223:i32 = load_vector_element %p, 1u
-                %224:i32 = sub %223, 2i
-                store_vector_element %p, 1u, %224
+            %221:bool = load %x_293
+            if %221 [t: $B33] {  # if_19
+              $B33: {  # true
+                %222:i32 = load %d
+                %223:i32 = sub %222, 1i
+                store %d, %223
+                %224:i32 = load_vector_element %p, 0u
+                %x_299:i32 = let %224
+                %226:i32 = load_vector_element %p, 1u
+                %x_301:i32 = let %226
+                %228:i32 = mul %x_301, 16i
+                %229:i32 = add %x_299, %228
+                %230:ptr<private, i32, read_write> = access %map, %229
+                store %230, 1i
+                %231:i32 = load_vector_element %p, 0u
+                %x_306:i32 = let %231
+                %233:i32 = load_vector_element %p, 1u
+                %x_308:i32 = let %233
+                %235:i32 = sub %x_308, 1i
+                %236:i32 = mul %235, 16i
+                %237:i32 = add %x_306, %236
+                %238:ptr<private, i32, read_write> = access %map, %237
+                store %238, 1i
+                %239:i32 = load_vector_element %p, 0u
+                %x_314:i32 = let %239
+                %241:i32 = load_vector_element %p, 1u
+                %x_316:i32 = let %241
+                %243:i32 = sub %x_316, 2i
+                %244:i32 = mul %243, 16i
+                %245:i32 = add %x_314, %244
+                %246:ptr<private, i32, read_write> = access %map, %245
+                store %246, 1i
+                %247:i32 = load_vector_element %p, 1u
+                %248:i32 = sub %247, 2i
+                store_vector_element %p, 1u, %248
                 exit_if  # if_19
               }
             }
-            %225:i32 = load %d
-            %x_326:bool = gte %225, 0i
+            %249:i32 = load %d
+            %250:bool = gte %249, 0i
+            %x_326:bool = let %250
             store %x_332, %x_326
-            if %x_326 [t: %b34] {  # if_20
-              %b34 = block {  # true
-                %227:i32 = load_vector_element %p, 0u
-                %228:bool = lt %227, 14i
-                store %x_331, %228
-                %229:bool = load %x_331
-                store %x_332, %229
+            if %x_326 [t: $B34] {  # if_20
+              $B34: {  # true
+                %252:i32 = load_vector_element %p, 0u
+                %253:bool = lt %252, 14i
+                store %x_331, %253
+                %254:bool = load %x_331
+                store %x_332, %254
                 exit_if  # if_20
               }
             }
-            %230:bool = load %x_332
-            store %x_345, %230
-            %231:bool = load %x_332
-            if %231 [t: %b35] {  # if_21
-              %b35 = block {  # true
-                %232:i32 = load_vector_element %p, 0u
-                %233:i32 = add %232, 2i
-                %234:i32 = load_vector_element %p, 1u
-                %235:i32 = mul %234, 16i
-                %236:i32 = add %233, %235
-                %237:ptr<private, i32, read_write> = access %map, %236
-                %238:i32 = load %237
-                %239:bool = eq %238, 0i
-                store %x_344, %239
-                %240:bool = load %x_344
-                store %x_345, %240
+            %255:bool = load %x_332
+            store %x_345, %255
+            %256:bool = load %x_332
+            if %256 [t: $B35] {  # if_21
+              $B35: {  # true
+                %257:i32 = load_vector_element %p, 0u
+                %258:i32 = add %257, 2i
+                %259:i32 = load_vector_element %p, 1u
+                %260:i32 = mul %259, 16i
+                %261:i32 = add %258, %260
+                %262:ptr<private, i32, read_write> = access %map, %261
+                %263:i32 = load %262
+                %264:bool = eq %263, 0i
+                store %x_344, %264
+                %265:bool = load %x_344
+                store %x_345, %265
                 exit_if  # if_21
               }
             }
-            %241:bool = load %x_345
-            if %241 [t: %b36] {  # if_22
-              %b36 = block {  # true
-                %242:i32 = load %d
-                %243:i32 = sub %242, 1i
-                store %d, %243
-                %x_351:i32 = load_vector_element %p, 0u
-                %x_353:i32 = load_vector_element %p, 1u
-                %246:i32 = mul %x_353, 16i
-                %247:i32 = add %x_351, %246
-                %248:ptr<private, i32, read_write> = access %map, %247
-                store %248, 1i
-                %x_358:i32 = load_vector_element %p, 0u
-                %x_361:i32 = load_vector_element %p, 1u
-                %251:i32 = add %x_358, 1i
-                %252:i32 = mul %x_361, 16i
-                %253:i32 = add %251, %252
-                %254:ptr<private, i32, read_write> = access %map, %253
-                store %254, 1i
-                %x_366:i32 = load_vector_element %p, 0u
-                %x_369:i32 = load_vector_element %p, 1u
-                %257:i32 = add %x_366, 2i
-                %258:i32 = mul %x_369, 16i
-                %259:i32 = add %257, %258
-                %260:ptr<private, i32, read_write> = access %map, %259
-                store %260, 1i
-                %261:i32 = load_vector_element %p, 0u
-                %262:i32 = add %261, 2i
-                store_vector_element %p, 0u, %262
+            %266:bool = load %x_345
+            if %266 [t: $B36] {  # if_22
+              $B36: {  # true
+                %267:i32 = load %d
+                %268:i32 = sub %267, 1i
+                store %d, %268
+                %269:i32 = load_vector_element %p, 0u
+                %x_351:i32 = let %269
+                %271:i32 = load_vector_element %p, 1u
+                %x_353:i32 = let %271
+                %273:i32 = mul %x_353, 16i
+                %274:i32 = add %x_351, %273
+                %275:ptr<private, i32, read_write> = access %map, %274
+                store %275, 1i
+                %276:i32 = load_vector_element %p, 0u
+                %x_358:i32 = let %276
+                %278:i32 = load_vector_element %p, 1u
+                %x_361:i32 = let %278
+                %280:i32 = add %x_358, 1i
+                %281:i32 = mul %x_361, 16i
+                %282:i32 = add %280, %281
+                %283:ptr<private, i32, read_write> = access %map, %282
+                store %283, 1i
+                %284:i32 = load_vector_element %p, 0u
+                %x_366:i32 = let %284
+                %286:i32 = load_vector_element %p, 1u
+                %x_369:i32 = let %286
+                %288:i32 = add %x_366, 2i
+                %289:i32 = mul %x_369, 16i
+                %290:i32 = add %288, %289
+                %291:ptr<private, i32, read_write> = access %map, %290
+                store %291, 1i
+                %292:i32 = load_vector_element %p, 0u
+                %293:i32 = add %292, 2i
+                store_vector_element %p, 0u, %293
                 exit_if  # if_22
               }
             }
-            %263:i32 = load %d
-            %x_378:bool = gte %263, 0i
+            %294:i32 = load %d
+            %295:bool = gte %294, 0i
+            %x_378:bool = let %295
             store %x_384, %x_378
-            if %x_378 [t: %b37] {  # if_23
-              %b37 = block {  # true
-                %265:i32 = load_vector_element %p, 1u
-                %266:bool = lt %265, 14i
-                store %x_383, %266
-                %267:bool = load %x_383
-                store %x_384, %267
+            if %x_378 [t: $B37] {  # if_23
+              $B37: {  # true
+                %297:i32 = load_vector_element %p, 1u
+                %298:bool = lt %297, 14i
+                store %x_383, %298
+                %299:bool = load %x_383
+                store %x_384, %299
                 exit_if  # if_23
               }
             }
-            %268:bool = load %x_384
-            store %x_397, %268
-            %269:bool = load %x_384
-            if %269 [t: %b38] {  # if_24
-              %b38 = block {  # true
-                %270:i32 = load_vector_element %p, 0u
-                %271:i32 = load_vector_element %p, 1u
-                %272:i32 = add %271, 2i
-                %273:i32 = mul %272, 16i
-                %274:i32 = add %270, %273
-                %275:ptr<private, i32, read_write> = access %map, %274
-                %276:i32 = load %275
-                %277:bool = eq %276, 0i
-                store %x_396, %277
-                %278:bool = load %x_396
-                store %x_397, %278
+            %300:bool = load %x_384
+            store %x_397, %300
+            %301:bool = load %x_384
+            if %301 [t: $B38] {  # if_24
+              $B38: {  # true
+                %302:i32 = load_vector_element %p, 0u
+                %303:i32 = load_vector_element %p, 1u
+                %304:i32 = add %303, 2i
+                %305:i32 = mul %304, 16i
+                %306:i32 = add %302, %305
+                %307:ptr<private, i32, read_write> = access %map, %306
+                %308:i32 = load %307
+                %309:bool = eq %308, 0i
+                store %x_396, %309
+                %310:bool = load %x_396
+                store %x_397, %310
                 exit_if  # if_24
               }
             }
-            %279:bool = load %x_397
-            if %279 [t: %b39] {  # if_25
-              %b39 = block {  # true
-                %280:i32 = load %d
-                %281:i32 = sub %280, 1i
-                store %d, %281
-                %x_403:i32 = load_vector_element %p, 0u
-                %x_405:i32 = load_vector_element %p, 1u
-                %284:i32 = mul %x_405, 16i
-                %285:i32 = add %x_403, %284
-                %286:ptr<private, i32, read_write> = access %map, %285
-                store %286, 1i
-                %x_410:i32 = load_vector_element %p, 0u
-                %x_412:i32 = load_vector_element %p, 1u
-                %289:i32 = add %x_412, 1i
-                %290:i32 = mul %289, 16i
-                %291:i32 = add %x_410, %290
-                %292:ptr<private, i32, read_write> = access %map, %291
-                store %292, 1i
-                %x_418:i32 = load_vector_element %p, 0u
-                %x_420:i32 = load_vector_element %p, 1u
-                %295:i32 = add %x_420, 2i
-                %296:i32 = mul %295, 16i
-                %297:i32 = add %x_418, %296
-                %298:ptr<private, i32, read_write> = access %map, %297
-                store %298, 1i
-                %299:i32 = load_vector_element %p, 1u
-                %300:i32 = add %299, 2i
-                store_vector_element %p, 1u, %300
+            %311:bool = load %x_397
+            if %311 [t: $B39] {  # if_25
+              $B39: {  # true
+                %312:i32 = load %d
+                %313:i32 = sub %312, 1i
+                store %d, %313
+                %314:i32 = load_vector_element %p, 0u
+                %x_403:i32 = let %314
+                %316:i32 = load_vector_element %p, 1u
+                %x_405:i32 = let %316
+                %318:i32 = mul %x_405, 16i
+                %319:i32 = add %x_403, %318
+                %320:ptr<private, i32, read_write> = access %map, %319
+                store %320, 1i
+                %321:i32 = load_vector_element %p, 0u
+                %x_410:i32 = let %321
+                %323:i32 = load_vector_element %p, 1u
+                %x_412:i32 = let %323
+                %325:i32 = add %x_412, 1i
+                %326:i32 = mul %325, 16i
+                %327:i32 = add %x_410, %326
+                %328:ptr<private, i32, read_write> = access %map, %327
+                store %328, 1i
+                %329:i32 = load_vector_element %p, 0u
+                %x_418:i32 = let %329
+                %331:i32 = load_vector_element %p, 1u
+                %x_420:i32 = let %331
+                %333:i32 = add %x_420, 2i
+                %334:i32 = mul %333, 16i
+                %335:i32 = add %x_418, %334
+                %336:ptr<private, i32, read_write> = access %map, %335
+                store %336, 1i
+                %337:i32 = load_vector_element %p, 1u
+                %338:i32 = add %337, 2i
+                store_vector_element %p, 1u, %338
                 exit_if  # if_25
               }
             }
             exit_if  # if_10
           }
         }
-        %301:i32 = load_vector_element %ipos, 1u
-        %302:i32 = mul %301, 16i
-        %303:i32 = load_vector_element %ipos, 0u
-        %304:i32 = add %302, %303
-        %305:ptr<private, i32, read_write> = access %map, %304
-        %306:i32 = load %305
-        %307:bool = eq %306, 1i
-        if %307 [t: %b40] {  # if_26
-          %b40 = block {  # true
+        %339:i32 = load_vector_element %ipos, 1u
+        %340:i32 = mul %339, 16i
+        %341:i32 = load_vector_element %ipos, 0u
+        %342:i32 = add %340, %341
+        %343:ptr<private, i32, read_write> = access %map, %342
+        %344:i32 = load %343
+        %345:bool = eq %344, 1i
+        if %345 [t: $B40] {  # if_26
+          $B40: {  # true
             store %x_GLF_color, vec4<f32>(1.0f)
             ret
           }
         }
-        continue %b8
+        continue  # -> $B8
       }
-      %b8 = block {  # continuing
-        %x_440:bool = load %canwalk
-        %309:bool = eq %x_440, false
-        break_if %309 %b7
+      $B8: {  # continuing
+        %346:bool = load %canwalk
+        %x_440:bool = let %346
+        %348:bool = eq %x_440, false
+        break_if %348  # -> [t: exit_loop loop_2, f: $B7]
       }
     }
     store %x_GLF_color, vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f)
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b41 {
-  %b41 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B41: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %312:void = call %main_1
-    %313:vec4<f32> = load %x_GLF_color
-    %314:main_out = construct %313
-    ret %314
+    %351:void = call %main_1
+    %352:vec4<f32> = load %x_GLF_color
+    %353:main_out = construct %352
+    ret %353
+  }
+}
+%tint_mod_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B42: {
+    %356:bool = eq %rhs, 0i
+    %357:bool = eq %lhs, -2147483648i
+    %358:bool = eq %rhs, -1i
+    %359:bool = and %357, %358
+    %360:bool = or %356, %359
+    %361:i32 = select %rhs, 1i, %360
+    %362:i32 = let %361
+    %363:i32 = div %lhs, %362
+    %364:i32 = mul %363, %362
+    %365:i32 = sub %lhs, %364
+    ret %365
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B43: {
+    %367:i32 = convert %value
+    %368:bool = gte %value, -2147483648.0f
+    %369:i32 = select -2147483648i, %367, %368
+    %370:bool = lte %value, 2147483520.0f
+    %371:i32 = select 2147483647i, %369, %370
+    ret %371
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-access-chains/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-access-chains/0-opt.wgsl.expected.ir.msl
index 44aa392..4809e60 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-access-chains/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-access-chains/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,15 +8,15 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %map:ptr<private, array<i32, 256>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %pos:ptr<function, vec2<f32>, read_write> = var
     %ipos:ptr<function, vec2<i32>, read_write> = var
     %i:ptr<function, i32, read_write> = var
@@ -26,52 +26,60 @@
     %directions:ptr<function, i32, read_write> = var
     %j:ptr<function, i32, read_write> = var
     %d:ptr<function, i32, read_write> = var
-    %x_57:vec4<f32> = load %gl_FragCoord
-    %16:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-    %x_60:vec2<f32> = load %16
-    %18:f32 = access %x_57, 0u
-    %19:f32 = access %x_57, 1u
-    %20:vec2<f32> = construct %18, %19
-    %21:vec2<f32> = div %20, %x_60
-    store %pos, %21
-    %x_63:f32 = load_vector_element %pos, 0u
-    %x_67:f32 = load_vector_element %pos, 1u
-    %24:f32 = mul %x_63, 16.0f
-    %25:i32 = convert %24
-    %26:f32 = mul %x_67, 16.0f
-    %27:i32 = convert %26
-    %28:vec2<i32> = construct %25, %27
-    store %ipos, %28
+    %15:vec4<f32> = load %gl_FragCoord
+    %x_57:vec4<f32> = let %15
+    %17:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
+    %18:vec2<f32> = load %17
+    %x_60:vec2<f32> = let %18
+    %20:f32 = access %x_57, 0u
+    %21:f32 = access %x_57, 1u
+    %22:vec2<f32> = construct %20, %21
+    %23:vec2<f32> = div %22, %x_60
+    store %pos, %23
+    %24:f32 = load_vector_element %pos, 0u
+    %x_63:f32 = let %24
+    %26:f32 = load_vector_element %pos, 1u
+    %x_67:f32 = let %26
+    %28:f32 = mul %x_63, 16.0f
+    %29:i32 = call %tint_f32_to_i32, %28
+    %31:i32 = let %29
+    %32:f32 = mul %x_67, 16.0f
+    %33:i32 = call %tint_f32_to_i32, %32
+    %34:vec2<i32> = construct %31, %33
+    store %ipos, %34
     store %i, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_75:i32 = load %i
-        %30:bool = lt %x_75, 256i
-        if %30 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %35:i32 = load %i
+        %x_75:i32 = let %35
+        %37:bool = lt %x_75, 256i
+        if %37 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_78:i32 = load %i
-        %32:ptr<private, i32, read_write> = access %map, %x_78
-        store %32, 0i
-        continue %b4
+        %38:i32 = load %i
+        %x_78:i32 = let %38
+        %40:ptr<private, i32, read_write> = access %map, %x_78
+        store %40, 0i
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_80:i32 = load %i
-        %34:i32 = add %x_80, 1i
-        store %i, %34
-        next_iteration %b3
+      $B4: {  # continuing
+        %41:i32 = load %i
+        %x_80:i32 = let %41
+        %43:i32 = add %x_80, 1i
+        store %i, %43
+        next_iteration  # -> $B3
       }
     }
     store %p, vec2<i32>(0i)
     store %canwalk, true
     store %v, 0i
-    loop [b: %b7, c: %b8] {  # loop_2
-      %b7 = block {  # body
+    loop [b: $B7, c: $B8] {  # loop_2
+      $B7: {  # body
         %x_102:ptr<function, bool, read_write> = var
         %x_122:ptr<function, bool, read_write> = var
         %x_142:ptr<function, bool, read_write> = var
@@ -80,119 +88,148 @@
         %x_123_phi:ptr<function, bool, read_write> = var
         %x_143_phi:ptr<function, bool, read_write> = var
         %x_163_phi:ptr<function, bool, read_write> = var
-        %x_86:i32 = load %v
-        %44:i32 = add %x_86, 1i
-        store %v, %44
+        %52:i32 = load %v
+        %x_86:i32 = let %52
+        %54:i32 = add %x_86, 1i
+        store %v, %54
         store %directions, 0i
-        %x_89:i32 = load_vector_element %p, 0u
-        %x_90:bool = gt %x_89, 0i
+        %55:i32 = load_vector_element %p, 0u
+        %x_89:i32 = let %55
+        %57:bool = gt %x_89, 0i
+        %x_90:bool = let %57
         store %x_103_phi, %x_90
-        if %x_90 [t: %b9] {  # if_2
-          %b9 = block {  # true
-            %x_94:i32 = load_vector_element %p, 0u
-            %x_97:i32 = load_vector_element %p, 1u
-            %49:i32 = sub %x_94, 2i
-            %50:i32 = mul %x_97, 16i
-            %51:i32 = add %49, %50
-            %52:ptr<private, i32, read_write> = access %map, %51
-            %x_101:i32 = load %52
-            %54:bool = eq %x_101, 0i
-            store %x_102, %54
-            %55:bool = load %x_102
-            store %x_103_phi, %55
+        if %x_90 [t: $B9] {  # if_2
+          $B9: {  # true
+            %59:i32 = load_vector_element %p, 0u
+            %x_94:i32 = let %59
+            %61:i32 = load_vector_element %p, 1u
+            %x_97:i32 = let %61
+            %63:i32 = sub %x_94, 2i
+            %64:i32 = mul %x_97, 16i
+            %65:i32 = add %63, %64
+            %66:ptr<private, i32, read_write> = access %map, %65
+            %67:i32 = load %66
+            %x_101:i32 = let %67
+            %69:bool = eq %x_101, 0i
+            store %x_102, %69
+            %70:bool = load %x_102
+            store %x_103_phi, %70
             exit_if  # if_2
           }
         }
-        %x_103:bool = load %x_103_phi
-        if %x_103 [t: %b10] {  # if_3
-          %b10 = block {  # true
-            %x_106:i32 = load %directions
-            %58:i32 = add %x_106, 1i
-            store %directions, %58
+        %71:bool = load %x_103_phi
+        %x_103:bool = let %71
+        if %x_103 [t: $B10] {  # if_3
+          $B10: {  # true
+            %73:i32 = load %directions
+            %x_106:i32 = let %73
+            %75:i32 = add %x_106, 1i
+            store %directions, %75
             exit_if  # if_3
           }
         }
-        %x_109:i32 = load_vector_element %p, 1u
-        %x_110:bool = gt %x_109, 0i
+        %76:i32 = load_vector_element %p, 1u
+        %x_109:i32 = let %76
+        %78:bool = gt %x_109, 0i
+        %x_110:bool = let %78
         store %x_123_phi, %x_110
-        if %x_110 [t: %b11] {  # if_4
-          %b11 = block {  # true
-            %x_114:i32 = load_vector_element %p, 0u
-            %x_116:i32 = load_vector_element %p, 1u
-            %63:i32 = sub %x_116, 2i
-            %64:i32 = mul %63, 16i
-            %65:i32 = add %x_114, %64
-            %66:ptr<private, i32, read_write> = access %map, %65
-            %x_121:i32 = load %66
-            %68:bool = eq %x_121, 0i
-            store %x_122, %68
-            %69:bool = load %x_122
-            store %x_123_phi, %69
+        if %x_110 [t: $B11] {  # if_4
+          $B11: {  # true
+            %80:i32 = load_vector_element %p, 0u
+            %x_114:i32 = let %80
+            %82:i32 = load_vector_element %p, 1u
+            %x_116:i32 = let %82
+            %84:i32 = sub %x_116, 2i
+            %85:i32 = mul %84, 16i
+            %86:i32 = add %x_114, %85
+            %87:ptr<private, i32, read_write> = access %map, %86
+            %88:i32 = load %87
+            %x_121:i32 = let %88
+            %90:bool = eq %x_121, 0i
+            store %x_122, %90
+            %91:bool = load %x_122
+            store %x_123_phi, %91
             exit_if  # if_4
           }
         }
-        %x_123:bool = load %x_123_phi
-        if %x_123 [t: %b12] {  # if_5
-          %b12 = block {  # true
-            %x_126:i32 = load %directions
-            %72:i32 = add %x_126, 1i
-            store %directions, %72
+        %92:bool = load %x_123_phi
+        %x_123:bool = let %92
+        if %x_123 [t: $B12] {  # if_5
+          $B12: {  # true
+            %94:i32 = load %directions
+            %x_126:i32 = let %94
+            %96:i32 = add %x_126, 1i
+            store %directions, %96
             exit_if  # if_5
           }
         }
-        %x_129:i32 = load_vector_element %p, 0u
-        %x_130:bool = lt %x_129, 14i
+        %97:i32 = load_vector_element %p, 0u
+        %x_129:i32 = let %97
+        %99:bool = lt %x_129, 14i
+        %x_130:bool = let %99
         store %x_143_phi, %x_130
-        if %x_130 [t: %b13] {  # if_6
-          %b13 = block {  # true
-            %x_134:i32 = load_vector_element %p, 0u
-            %x_137:i32 = load_vector_element %p, 1u
-            %77:i32 = add %x_134, 2i
-            %78:i32 = mul %x_137, 16i
-            %79:i32 = add %77, %78
-            %80:ptr<private, i32, read_write> = access %map, %79
-            %x_141:i32 = load %80
-            %82:bool = eq %x_141, 0i
-            store %x_142, %82
-            %83:bool = load %x_142
-            store %x_143_phi, %83
+        if %x_130 [t: $B13] {  # if_6
+          $B13: {  # true
+            %101:i32 = load_vector_element %p, 0u
+            %x_134:i32 = let %101
+            %103:i32 = load_vector_element %p, 1u
+            %x_137:i32 = let %103
+            %105:i32 = add %x_134, 2i
+            %106:i32 = mul %x_137, 16i
+            %107:i32 = add %105, %106
+            %108:ptr<private, i32, read_write> = access %map, %107
+            %109:i32 = load %108
+            %x_141:i32 = let %109
+            %111:bool = eq %x_141, 0i
+            store %x_142, %111
+            %112:bool = load %x_142
+            store %x_143_phi, %112
             exit_if  # if_6
           }
         }
-        %x_143:bool = load %x_143_phi
-        if %x_143 [t: %b14] {  # if_7
-          %b14 = block {  # true
-            %x_146:i32 = load %directions
-            %86:i32 = add %x_146, 1i
-            store %directions, %86
+        %113:bool = load %x_143_phi
+        %x_143:bool = let %113
+        if %x_143 [t: $B14] {  # if_7
+          $B14: {  # true
+            %115:i32 = load %directions
+            %x_146:i32 = let %115
+            %117:i32 = add %x_146, 1i
+            store %directions, %117
             exit_if  # if_7
           }
         }
-        %x_149:i32 = load_vector_element %p, 1u
-        %x_150:bool = lt %x_149, 14i
+        %118:i32 = load_vector_element %p, 1u
+        %x_149:i32 = let %118
+        %120:bool = lt %x_149, 14i
+        %x_150:bool = let %120
         store %x_163_phi, %x_150
-        if %x_150 [t: %b15] {  # if_8
-          %b15 = block {  # true
-            %x_154:i32 = load_vector_element %p, 0u
-            %x_156:i32 = load_vector_element %p, 1u
-            %91:i32 = add %x_156, 2i
-            %92:i32 = mul %91, 16i
-            %93:i32 = add %x_154, %92
-            %94:ptr<private, i32, read_write> = access %map, %93
-            %x_161:i32 = load %94
-            %96:bool = eq %x_161, 0i
-            store %x_162, %96
-            %97:bool = load %x_162
-            store %x_163_phi, %97
+        if %x_150 [t: $B15] {  # if_8
+          $B15: {  # true
+            %122:i32 = load_vector_element %p, 0u
+            %x_154:i32 = let %122
+            %124:i32 = load_vector_element %p, 1u
+            %x_156:i32 = let %124
+            %126:i32 = add %x_156, 2i
+            %127:i32 = mul %126, 16i
+            %128:i32 = add %x_154, %127
+            %129:ptr<private, i32, read_write> = access %map, %128
+            %130:i32 = load %129
+            %x_161:i32 = let %130
+            %132:bool = eq %x_161, 0i
+            store %x_162, %132
+            %133:bool = load %x_162
+            store %x_163_phi, %133
             exit_if  # if_8
           }
         }
-        %x_163:bool = load %x_163_phi
-        if %x_163 [t: %b16] {  # if_9
-          %b16 = block {  # true
-            %x_166:i32 = load %directions
-            %100:i32 = add %x_166, 1i
-            store %directions, %100
+        %134:bool = load %x_163_phi
+        %x_163:bool = let %134
+        if %x_163 [t: $B16] {  # if_9
+          $B16: {  # true
+            %136:i32 = load %directions
+            %x_166:i32 = let %136
+            %138:i32 = add %x_166, 1i
+            store %directions, %138
             exit_if  # if_9
           }
         }
@@ -212,380 +249,489 @@
         %x_345_phi:ptr<function, bool, read_write> = var
         %x_384_phi:ptr<function, bool, read_write> = var
         %x_397_phi:ptr<function, bool, read_write> = var
-        %x_168:i32 = load %directions
-        %118:bool = eq %x_168, 0i
-        if %118 [t: %b17, f: %b18] {  # if_10
-          %b17 = block {  # true
+        %155:i32 = load %directions
+        %x_168:i32 = let %155
+        %157:bool = eq %x_168, 0i
+        if %157 [t: $B17, f: $B18] {  # if_10
+          $B17: {  # true
             store %canwalk, false
             store %i, 0i
-            loop [b: %b19, c: %b20] {  # loop_3
-              %b19 = block {  # body
-                %x_177:i32 = load %i
-                %120:bool = lt %x_177, 8i
-                if %120 [t: %b21, f: %b22] {  # if_11
-                  %b21 = block {  # true
+            loop [b: $B19, c: $B20] {  # loop_3
+              $B19: {  # body
+                %158:i32 = load %i
+                %x_177:i32 = let %158
+                %160:bool = lt %x_177, 8i
+                if %160 [t: $B21, f: $B22] {  # if_11
+                  $B21: {  # true
                     exit_if  # if_11
                   }
-                  %b22 = block {  # false
+                  $B22: {  # false
                     exit_loop  # loop_3
                   }
                 }
                 store %j, 0i
-                loop [b: %b23, c: %b24] {  # loop_4
-                  %b23 = block {  # body
-                    %x_184:i32 = load %j
-                    %122:bool = lt %x_184, 8i
-                    if %122 [t: %b25, f: %b26] {  # if_12
-                      %b25 = block {  # true
+                loop [b: $B23, c: $B24] {  # loop_4
+                  $B23: {  # body
+                    %161:i32 = load %j
+                    %x_184:i32 = let %161
+                    %163:bool = lt %x_184, 8i
+                    if %163 [t: $B25, f: $B26] {  # if_12
+                      $B25: {  # true
                         exit_if  # if_12
                       }
-                      %b26 = block {  # false
+                      $B26: {  # false
                         exit_loop  # loop_4
                       }
                     }
-                    %x_187:i32 = load %j
-                    %x_189:i32 = load %i
-                    %125:i32 = mul %x_187, 2i
-                    %126:i32 = mul %x_189, 2i
-                    %127:i32 = mul %126, 16i
-                    %128:i32 = add %125, %127
-                    %129:ptr<private, i32, read_write> = access %map, %128
-                    %x_194:i32 = load %129
-                    %131:bool = eq %x_194, 0i
-                    if %131 [t: %b27] {  # if_13
-                      %b27 = block {  # true
-                        %x_198:i32 = load %j
-                        %133:i32 = mul %x_198, 2i
-                        store_vector_element %p, 0u, %133
-                        %x_201:i32 = load %i
-                        %135:i32 = mul %x_201, 2i
-                        store_vector_element %p, 1u, %135
+                    %164:i32 = load %j
+                    %x_187:i32 = let %164
+                    %166:i32 = load %i
+                    %x_189:i32 = let %166
+                    %168:i32 = mul %x_187, 2i
+                    %169:i32 = mul %x_189, 2i
+                    %170:i32 = mul %169, 16i
+                    %171:i32 = add %168, %170
+                    %172:ptr<private, i32, read_write> = access %map, %171
+                    %173:i32 = load %172
+                    %x_194:i32 = let %173
+                    %175:bool = eq %x_194, 0i
+                    if %175 [t: $B27] {  # if_13
+                      $B27: {  # true
+                        %176:i32 = load %j
+                        %x_198:i32 = let %176
+                        %178:i32 = mul %x_198, 2i
+                        store_vector_element %p, 0u, %178
+                        %179:i32 = load %i
+                        %x_201:i32 = let %179
+                        %181:i32 = mul %x_201, 2i
+                        store_vector_element %p, 1u, %181
                         store %canwalk, true
                         exit_if  # if_13
                       }
                     }
-                    continue %b24
+                    continue  # -> $B24
                   }
-                  %b24 = block {  # continuing
-                    %x_204:i32 = load %j
-                    %137:i32 = add %x_204, 1i
-                    store %j, %137
-                    next_iteration %b23
+                  $B24: {  # continuing
+                    %182:i32 = load %j
+                    %x_204:i32 = let %182
+                    %184:i32 = add %x_204, 1i
+                    store %j, %184
+                    next_iteration  # -> $B23
                   }
                 }
-                continue %b20
+                continue  # -> $B20
               }
-              %b20 = block {  # continuing
-                %x_206:i32 = load %i
-                %139:i32 = add %x_206, 1i
-                store %i, %139
-                next_iteration %b19
+              $B20: {  # continuing
+                %185:i32 = load %i
+                %x_206:i32 = let %185
+                %187:i32 = add %x_206, 1i
+                store %i, %187
+                next_iteration  # -> $B19
               }
             }
-            %x_209:i32 = load_vector_element %p, 0u
-            %x_211:i32 = load_vector_element %p, 1u
-            %142:i32 = mul %x_211, 16i
-            %143:i32 = add %x_209, %142
-            %144:ptr<private, i32, read_write> = access %map, %143
-            store %144, 1i
+            %188:i32 = load_vector_element %p, 0u
+            %x_209:i32 = let %188
+            %190:i32 = load_vector_element %p, 1u
+            %x_211:i32 = let %190
+            %192:i32 = mul %x_211, 16i
+            %193:i32 = add %x_209, %192
+            %194:ptr<private, i32, read_write> = access %map, %193
+            store %194, 1i
             exit_if  # if_10
           }
-          %b18 = block {  # false
-            %x_215:i32 = load %v
-            %x_216:i32 = load %directions
-            %147:i32 = mod %x_215, %x_216
-            store %d, %147
-            %x_218:i32 = load %directions
-            %x_219:i32 = load %v
-            %150:i32 = add %x_219, %x_218
-            store %v, %150
-            %x_221:i32 = load %d
-            %x_222:bool = gte %x_221, 0i
+          $B18: {  # false
+            %195:i32 = load %v
+            %x_215:i32 = let %195
+            %197:i32 = load %directions
+            %x_216:i32 = let %197
+            %199:i32 = call %tint_mod_i32, %x_215, %x_216
+            store %d, %199
+            %201:i32 = load %directions
+            %x_218:i32 = let %201
+            %203:i32 = load %v
+            %x_219:i32 = let %203
+            %205:i32 = add %x_219, %x_218
+            store %v, %205
+            %206:i32 = load %d
+            %x_221:i32 = let %206
+            %208:bool = gte %x_221, 0i
+            %x_222:bool = let %208
             store %x_228_phi, %x_222
-            if %x_222 [t: %b28] {  # if_14
-              %b28 = block {  # true
-                %x_226:i32 = load_vector_element %p, 0u
-                %154:bool = gt %x_226, 0i
-                store %x_227, %154
-                %155:bool = load %x_227
-                store %x_228_phi, %155
+            if %x_222 [t: $B28] {  # if_14
+              $B28: {  # true
+                %210:i32 = load_vector_element %p, 0u
+                %x_226:i32 = let %210
+                %212:bool = gt %x_226, 0i
+                store %x_227, %212
+                %213:bool = load %x_227
+                store %x_228_phi, %213
                 exit_if  # if_14
               }
             }
-            %x_228:bool = load %x_228_phi
+            %214:bool = load %x_228_phi
+            %x_228:bool = let %214
             store %x_241_phi, %x_228
-            if %x_228 [t: %b29] {  # if_15
-              %b29 = block {  # true
-                %x_232:i32 = load_vector_element %p, 0u
-                %x_235:i32 = load_vector_element %p, 1u
-                %159:i32 = sub %x_232, 2i
-                %160:i32 = mul %x_235, 16i
-                %161:i32 = add %159, %160
-                %162:ptr<private, i32, read_write> = access %map, %161
-                %x_239:i32 = load %162
-                %164:bool = eq %x_239, 0i
-                store %x_240, %164
-                %165:bool = load %x_240
-                store %x_241_phi, %165
+            if %x_228 [t: $B29] {  # if_15
+              $B29: {  # true
+                %216:i32 = load_vector_element %p, 0u
+                %x_232:i32 = let %216
+                %218:i32 = load_vector_element %p, 1u
+                %x_235:i32 = let %218
+                %220:i32 = sub %x_232, 2i
+                %221:i32 = mul %x_235, 16i
+                %222:i32 = add %220, %221
+                %223:ptr<private, i32, read_write> = access %map, %222
+                %224:i32 = load %223
+                %x_239:i32 = let %224
+                %226:bool = eq %x_239, 0i
+                store %x_240, %226
+                %227:bool = load %x_240
+                store %x_241_phi, %227
                 exit_if  # if_15
               }
             }
-            %x_241:bool = load %x_241_phi
-            if %x_241 [t: %b30] {  # if_16
-              %b30 = block {  # true
-                %x_244:i32 = load %d
-                %168:i32 = sub %x_244, 1i
-                store %d, %168
-                %x_247:i32 = load_vector_element %p, 0u
-                %x_249:i32 = load_vector_element %p, 1u
-                %171:i32 = mul %x_249, 16i
-                %172:i32 = add %x_247, %171
-                %173:ptr<private, i32, read_write> = access %map, %172
-                store %173, 1i
-                %x_254:i32 = load_vector_element %p, 0u
-                %x_257:i32 = load_vector_element %p, 1u
-                %176:i32 = sub %x_254, 1i
-                %177:i32 = mul %x_257, 16i
-                %178:i32 = add %176, %177
-                %179:ptr<private, i32, read_write> = access %map, %178
-                store %179, 1i
-                %x_262:i32 = load_vector_element %p, 0u
-                %x_265:i32 = load_vector_element %p, 1u
-                %182:i32 = sub %x_262, 2i
-                %183:i32 = mul %x_265, 16i
-                %184:i32 = add %182, %183
-                %185:ptr<private, i32, read_write> = access %map, %184
-                store %185, 1i
-                %x_270:i32 = load_vector_element %p, 0u
-                %187:i32 = sub %x_270, 2i
-                store_vector_element %p, 0u, %187
+            %228:bool = load %x_241_phi
+            %x_241:bool = let %228
+            if %x_241 [t: $B30] {  # if_16
+              $B30: {  # true
+                %230:i32 = load %d
+                %x_244:i32 = let %230
+                %232:i32 = sub %x_244, 1i
+                store %d, %232
+                %233:i32 = load_vector_element %p, 0u
+                %x_247:i32 = let %233
+                %235:i32 = load_vector_element %p, 1u
+                %x_249:i32 = let %235
+                %237:i32 = mul %x_249, 16i
+                %238:i32 = add %x_247, %237
+                %239:ptr<private, i32, read_write> = access %map, %238
+                store %239, 1i
+                %240:i32 = load_vector_element %p, 0u
+                %x_254:i32 = let %240
+                %242:i32 = load_vector_element %p, 1u
+                %x_257:i32 = let %242
+                %244:i32 = sub %x_254, 1i
+                %245:i32 = mul %x_257, 16i
+                %246:i32 = add %244, %245
+                %247:ptr<private, i32, read_write> = access %map, %246
+                store %247, 1i
+                %248:i32 = load_vector_element %p, 0u
+                %x_262:i32 = let %248
+                %250:i32 = load_vector_element %p, 1u
+                %x_265:i32 = let %250
+                %252:i32 = sub %x_262, 2i
+                %253:i32 = mul %x_265, 16i
+                %254:i32 = add %252, %253
+                %255:ptr<private, i32, read_write> = access %map, %254
+                store %255, 1i
+                %256:i32 = load_vector_element %p, 0u
+                %x_270:i32 = let %256
+                %258:i32 = sub %x_270, 2i
+                store_vector_element %p, 0u, %258
                 exit_if  # if_16
               }
             }
-            %x_273:i32 = load %d
-            %x_274:bool = gte %x_273, 0i
+            %259:i32 = load %d
+            %x_273:i32 = let %259
+            %261:bool = gte %x_273, 0i
+            %x_274:bool = let %261
             store %x_280_phi, %x_274
-            if %x_274 [t: %b31] {  # if_17
-              %b31 = block {  # true
-                %x_278:i32 = load_vector_element %p, 1u
-                %191:bool = gt %x_278, 0i
-                store %x_279, %191
-                %192:bool = load %x_279
-                store %x_280_phi, %192
+            if %x_274 [t: $B31] {  # if_17
+              $B31: {  # true
+                %263:i32 = load_vector_element %p, 1u
+                %x_278:i32 = let %263
+                %265:bool = gt %x_278, 0i
+                store %x_279, %265
+                %266:bool = load %x_279
+                store %x_280_phi, %266
                 exit_if  # if_17
               }
             }
-            %x_280:bool = load %x_280_phi
+            %267:bool = load %x_280_phi
+            %x_280:bool = let %267
             store %x_293_phi, %x_280
-            if %x_280 [t: %b32] {  # if_18
-              %b32 = block {  # true
-                %x_284:i32 = load_vector_element %p, 0u
-                %x_286:i32 = load_vector_element %p, 1u
-                %196:i32 = sub %x_286, 2i
-                %197:i32 = mul %196, 16i
-                %198:i32 = add %x_284, %197
-                %199:ptr<private, i32, read_write> = access %map, %198
-                %x_291:i32 = load %199
-                %201:bool = eq %x_291, 0i
-                store %x_292, %201
-                %202:bool = load %x_292
-                store %x_293_phi, %202
+            if %x_280 [t: $B32] {  # if_18
+              $B32: {  # true
+                %269:i32 = load_vector_element %p, 0u
+                %x_284:i32 = let %269
+                %271:i32 = load_vector_element %p, 1u
+                %x_286:i32 = let %271
+                %273:i32 = sub %x_286, 2i
+                %274:i32 = mul %273, 16i
+                %275:i32 = add %x_284, %274
+                %276:ptr<private, i32, read_write> = access %map, %275
+                %277:i32 = load %276
+                %x_291:i32 = let %277
+                %279:bool = eq %x_291, 0i
+                store %x_292, %279
+                %280:bool = load %x_292
+                store %x_293_phi, %280
                 exit_if  # if_18
               }
             }
-            %x_293:bool = load %x_293_phi
-            if %x_293 [t: %b33] {  # if_19
-              %b33 = block {  # true
-                %x_296:i32 = load %d
-                %205:i32 = sub %x_296, 1i
-                store %d, %205
-                %x_299:i32 = load_vector_element %p, 0u
-                %x_301:i32 = load_vector_element %p, 1u
-                %208:i32 = mul %x_301, 16i
-                %209:i32 = add %x_299, %208
-                %210:ptr<private, i32, read_write> = access %map, %209
-                store %210, 1i
-                %x_306:i32 = load_vector_element %p, 0u
-                %x_308:i32 = load_vector_element %p, 1u
-                %213:i32 = sub %x_308, 1i
-                %214:i32 = mul %213, 16i
-                %215:i32 = add %x_306, %214
-                %216:ptr<private, i32, read_write> = access %map, %215
-                store %216, 1i
-                %x_314:i32 = load_vector_element %p, 0u
-                %x_316:i32 = load_vector_element %p, 1u
-                %219:i32 = sub %x_316, 2i
-                %220:i32 = mul %219, 16i
-                %221:i32 = add %x_314, %220
-                %222:ptr<private, i32, read_write> = access %map, %221
-                store %222, 1i
-                %x_322:i32 = load_vector_element %p, 1u
-                %224:i32 = sub %x_322, 2i
-                store_vector_element %p, 1u, %224
+            %281:bool = load %x_293_phi
+            %x_293:bool = let %281
+            if %x_293 [t: $B33] {  # if_19
+              $B33: {  # true
+                %283:i32 = load %d
+                %x_296:i32 = let %283
+                %285:i32 = sub %x_296, 1i
+                store %d, %285
+                %286:i32 = load_vector_element %p, 0u
+                %x_299:i32 = let %286
+                %288:i32 = load_vector_element %p, 1u
+                %x_301:i32 = let %288
+                %290:i32 = mul %x_301, 16i
+                %291:i32 = add %x_299, %290
+                %292:ptr<private, i32, read_write> = access %map, %291
+                store %292, 1i
+                %293:i32 = load_vector_element %p, 0u
+                %x_306:i32 = let %293
+                %295:i32 = load_vector_element %p, 1u
+                %x_308:i32 = let %295
+                %297:i32 = sub %x_308, 1i
+                %298:i32 = mul %297, 16i
+                %299:i32 = add %x_306, %298
+                %300:ptr<private, i32, read_write> = access %map, %299
+                store %300, 1i
+                %301:i32 = load_vector_element %p, 0u
+                %x_314:i32 = let %301
+                %303:i32 = load_vector_element %p, 1u
+                %x_316:i32 = let %303
+                %305:i32 = sub %x_316, 2i
+                %306:i32 = mul %305, 16i
+                %307:i32 = add %x_314, %306
+                %308:ptr<private, i32, read_write> = access %map, %307
+                store %308, 1i
+                %309:i32 = load_vector_element %p, 1u
+                %x_322:i32 = let %309
+                %311:i32 = sub %x_322, 2i
+                store_vector_element %p, 1u, %311
                 exit_if  # if_19
               }
             }
-            %x_325:i32 = load %d
-            %x_326:bool = gte %x_325, 0i
+            %312:i32 = load %d
+            %x_325:i32 = let %312
+            %314:bool = gte %x_325, 0i
+            %x_326:bool = let %314
             store %x_332_phi, %x_326
-            if %x_326 [t: %b34] {  # if_20
-              %b34 = block {  # true
-                %x_330:i32 = load_vector_element %p, 0u
-                %228:bool = lt %x_330, 14i
-                store %x_331, %228
-                %229:bool = load %x_331
-                store %x_332_phi, %229
+            if %x_326 [t: $B34] {  # if_20
+              $B34: {  # true
+                %316:i32 = load_vector_element %p, 0u
+                %x_330:i32 = let %316
+                %318:bool = lt %x_330, 14i
+                store %x_331, %318
+                %319:bool = load %x_331
+                store %x_332_phi, %319
                 exit_if  # if_20
               }
             }
-            %x_332:bool = load %x_332_phi
+            %320:bool = load %x_332_phi
+            %x_332:bool = let %320
             store %x_345_phi, %x_332
-            if %x_332 [t: %b35] {  # if_21
-              %b35 = block {  # true
-                %x_336:i32 = load_vector_element %p, 0u
-                %x_339:i32 = load_vector_element %p, 1u
-                %233:i32 = add %x_336, 2i
-                %234:i32 = mul %x_339, 16i
-                %235:i32 = add %233, %234
-                %236:ptr<private, i32, read_write> = access %map, %235
-                %x_343:i32 = load %236
-                %238:bool = eq %x_343, 0i
-                store %x_344, %238
-                %239:bool = load %x_344
-                store %x_345_phi, %239
+            if %x_332 [t: $B35] {  # if_21
+              $B35: {  # true
+                %322:i32 = load_vector_element %p, 0u
+                %x_336:i32 = let %322
+                %324:i32 = load_vector_element %p, 1u
+                %x_339:i32 = let %324
+                %326:i32 = add %x_336, 2i
+                %327:i32 = mul %x_339, 16i
+                %328:i32 = add %326, %327
+                %329:ptr<private, i32, read_write> = access %map, %328
+                %330:i32 = load %329
+                %x_343:i32 = let %330
+                %332:bool = eq %x_343, 0i
+                store %x_344, %332
+                %333:bool = load %x_344
+                store %x_345_phi, %333
                 exit_if  # if_21
               }
             }
-            %x_345:bool = load %x_345_phi
-            if %x_345 [t: %b36] {  # if_22
-              %b36 = block {  # true
-                %x_348:i32 = load %d
-                %242:i32 = sub %x_348, 1i
-                store %d, %242
-                %x_351:i32 = load_vector_element %p, 0u
-                %x_353:i32 = load_vector_element %p, 1u
-                %245:i32 = mul %x_353, 16i
-                %246:i32 = add %x_351, %245
-                %247:ptr<private, i32, read_write> = access %map, %246
-                store %247, 1i
-                %x_358:i32 = load_vector_element %p, 0u
-                %x_361:i32 = load_vector_element %p, 1u
-                %250:i32 = add %x_358, 1i
-                %251:i32 = mul %x_361, 16i
-                %252:i32 = add %250, %251
-                %253:ptr<private, i32, read_write> = access %map, %252
-                store %253, 1i
-                %x_366:i32 = load_vector_element %p, 0u
-                %x_369:i32 = load_vector_element %p, 1u
-                %256:i32 = add %x_366, 2i
-                %257:i32 = mul %x_369, 16i
-                %258:i32 = add %256, %257
-                %259:ptr<private, i32, read_write> = access %map, %258
-                store %259, 1i
-                %x_374:i32 = load_vector_element %p, 0u
-                %261:i32 = add %x_374, 2i
-                store_vector_element %p, 0u, %261
+            %334:bool = load %x_345_phi
+            %x_345:bool = let %334
+            if %x_345 [t: $B36] {  # if_22
+              $B36: {  # true
+                %336:i32 = load %d
+                %x_348:i32 = let %336
+                %338:i32 = sub %x_348, 1i
+                store %d, %338
+                %339:i32 = load_vector_element %p, 0u
+                %x_351:i32 = let %339
+                %341:i32 = load_vector_element %p, 1u
+                %x_353:i32 = let %341
+                %343:i32 = mul %x_353, 16i
+                %344:i32 = add %x_351, %343
+                %345:ptr<private, i32, read_write> = access %map, %344
+                store %345, 1i
+                %346:i32 = load_vector_element %p, 0u
+                %x_358:i32 = let %346
+                %348:i32 = load_vector_element %p, 1u
+                %x_361:i32 = let %348
+                %350:i32 = add %x_358, 1i
+                %351:i32 = mul %x_361, 16i
+                %352:i32 = add %350, %351
+                %353:ptr<private, i32, read_write> = access %map, %352
+                store %353, 1i
+                %354:i32 = load_vector_element %p, 0u
+                %x_366:i32 = let %354
+                %356:i32 = load_vector_element %p, 1u
+                %x_369:i32 = let %356
+                %358:i32 = add %x_366, 2i
+                %359:i32 = mul %x_369, 16i
+                %360:i32 = add %358, %359
+                %361:ptr<private, i32, read_write> = access %map, %360
+                store %361, 1i
+                %362:i32 = load_vector_element %p, 0u
+                %x_374:i32 = let %362
+                %364:i32 = add %x_374, 2i
+                store_vector_element %p, 0u, %364
                 exit_if  # if_22
               }
             }
-            %x_377:i32 = load %d
-            %x_378:bool = gte %x_377, 0i
+            %365:i32 = load %d
+            %x_377:i32 = let %365
+            %367:bool = gte %x_377, 0i
+            %x_378:bool = let %367
             store %x_384_phi, %x_378
-            if %x_378 [t: %b37] {  # if_23
-              %b37 = block {  # true
-                %x_382:i32 = load_vector_element %p, 1u
-                %265:bool = lt %x_382, 14i
-                store %x_383, %265
-                %266:bool = load %x_383
-                store %x_384_phi, %266
+            if %x_378 [t: $B37] {  # if_23
+              $B37: {  # true
+                %369:i32 = load_vector_element %p, 1u
+                %x_382:i32 = let %369
+                %371:bool = lt %x_382, 14i
+                store %x_383, %371
+                %372:bool = load %x_383
+                store %x_384_phi, %372
                 exit_if  # if_23
               }
             }
-            %x_384:bool = load %x_384_phi
+            %373:bool = load %x_384_phi
+            %x_384:bool = let %373
             store %x_397_phi, %x_384
-            if %x_384 [t: %b38] {  # if_24
-              %b38 = block {  # true
-                %x_388:i32 = load_vector_element %p, 0u
-                %x_390:i32 = load_vector_element %p, 1u
-                %270:i32 = add %x_390, 2i
-                %271:i32 = mul %270, 16i
-                %272:i32 = add %x_388, %271
-                %273:ptr<private, i32, read_write> = access %map, %272
-                %x_395:i32 = load %273
-                %275:bool = eq %x_395, 0i
-                store %x_396, %275
-                %276:bool = load %x_396
-                store %x_397_phi, %276
+            if %x_384 [t: $B38] {  # if_24
+              $B38: {  # true
+                %375:i32 = load_vector_element %p, 0u
+                %x_388:i32 = let %375
+                %377:i32 = load_vector_element %p, 1u
+                %x_390:i32 = let %377
+                %379:i32 = add %x_390, 2i
+                %380:i32 = mul %379, 16i
+                %381:i32 = add %x_388, %380
+                %382:ptr<private, i32, read_write> = access %map, %381
+                %383:i32 = load %382
+                %x_395:i32 = let %383
+                %385:bool = eq %x_395, 0i
+                store %x_396, %385
+                %386:bool = load %x_396
+                store %x_397_phi, %386
                 exit_if  # if_24
               }
             }
-            %x_397:bool = load %x_397_phi
-            if %x_397 [t: %b39] {  # if_25
-              %b39 = block {  # true
-                %x_400:i32 = load %d
-                %279:i32 = sub %x_400, 1i
-                store %d, %279
-                %x_403:i32 = load_vector_element %p, 0u
-                %x_405:i32 = load_vector_element %p, 1u
-                %282:i32 = mul %x_405, 16i
-                %283:i32 = add %x_403, %282
-                %284:ptr<private, i32, read_write> = access %map, %283
-                store %284, 1i
-                %x_410:i32 = load_vector_element %p, 0u
-                %x_412:i32 = load_vector_element %p, 1u
-                %287:i32 = add %x_412, 1i
-                %288:i32 = mul %287, 16i
-                %289:i32 = add %x_410, %288
-                %290:ptr<private, i32, read_write> = access %map, %289
-                store %290, 1i
-                %x_418:i32 = load_vector_element %p, 0u
-                %x_420:i32 = load_vector_element %p, 1u
-                %293:i32 = add %x_420, 2i
-                %294:i32 = mul %293, 16i
-                %295:i32 = add %x_418, %294
-                %296:ptr<private, i32, read_write> = access %map, %295
-                store %296, 1i
-                %x_426:i32 = load_vector_element %p, 1u
-                %298:i32 = add %x_426, 2i
-                store_vector_element %p, 1u, %298
+            %387:bool = load %x_397_phi
+            %x_397:bool = let %387
+            if %x_397 [t: $B39] {  # if_25
+              $B39: {  # true
+                %389:i32 = load %d
+                %x_400:i32 = let %389
+                %391:i32 = sub %x_400, 1i
+                store %d, %391
+                %392:i32 = load_vector_element %p, 0u
+                %x_403:i32 = let %392
+                %394:i32 = load_vector_element %p, 1u
+                %x_405:i32 = let %394
+                %396:i32 = mul %x_405, 16i
+                %397:i32 = add %x_403, %396
+                %398:ptr<private, i32, read_write> = access %map, %397
+                store %398, 1i
+                %399:i32 = load_vector_element %p, 0u
+                %x_410:i32 = let %399
+                %401:i32 = load_vector_element %p, 1u
+                %x_412:i32 = let %401
+                %403:i32 = add %x_412, 1i
+                %404:i32 = mul %403, 16i
+                %405:i32 = add %x_410, %404
+                %406:ptr<private, i32, read_write> = access %map, %405
+                store %406, 1i
+                %407:i32 = load_vector_element %p, 0u
+                %x_418:i32 = let %407
+                %409:i32 = load_vector_element %p, 1u
+                %x_420:i32 = let %409
+                %411:i32 = add %x_420, 2i
+                %412:i32 = mul %411, 16i
+                %413:i32 = add %x_418, %412
+                %414:ptr<private, i32, read_write> = access %map, %413
+                store %414, 1i
+                %415:i32 = load_vector_element %p, 1u
+                %x_426:i32 = let %415
+                %417:i32 = add %x_426, 2i
+                store_vector_element %p, 1u, %417
                 exit_if  # if_25
               }
             }
             exit_if  # if_10
           }
         }
-        %x_430:i32 = load_vector_element %ipos, 1u
-        %x_433:i32 = load_vector_element %ipos, 0u
-        %301:i32 = mul %x_430, 16i
-        %302:i32 = add %301, %x_433
-        %303:ptr<private, i32, read_write> = access %map, %302
-        %x_436:i32 = load %303
-        %305:bool = eq %x_436, 1i
-        if %305 [t: %b40] {  # if_26
-          %b40 = block {  # true
+        %418:i32 = load_vector_element %ipos, 1u
+        %x_430:i32 = let %418
+        %420:i32 = load_vector_element %ipos, 0u
+        %x_433:i32 = let %420
+        %422:i32 = mul %x_430, 16i
+        %423:i32 = add %422, %x_433
+        %424:ptr<private, i32, read_write> = access %map, %423
+        %425:i32 = load %424
+        %x_436:i32 = let %425
+        %427:bool = eq %x_436, 1i
+        if %427 [t: $B40] {  # if_26
+          $B40: {  # true
             store %x_GLF_color, vec4<f32>(1.0f)
             ret
           }
         }
-        continue %b8
+        continue  # -> $B8
       }
-      %b8 = block {  # continuing
-        %x_440:bool = load %canwalk
-        %307:bool = eq %x_440, false
-        break_if %307 %b7
+      $B8: {  # continuing
+        %428:bool = load %canwalk
+        %x_440:bool = let %428
+        %430:bool = eq %x_440, false
+        break_if %430  # -> [t: exit_loop loop_2, f: $B7]
       }
     }
     store %x_GLF_color, vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f)
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b41 {
-  %b41 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B41: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %310:void = call %main_1
-    %311:vec4<f32> = load %x_GLF_color
-    %312:main_out = construct %311
-    ret %312
+    %433:void = call %main_1
+    %434:vec4<f32> = load %x_GLF_color
+    %435:main_out = construct %434
+    ret %435
+  }
+}
+%tint_mod_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B42: {
+    %438:bool = eq %rhs, 0i
+    %439:bool = eq %lhs, -2147483648i
+    %440:bool = eq %rhs, -1i
+    %441:bool = and %439, %440
+    %442:bool = or %438, %441
+    %443:i32 = select %rhs, 1i, %442
+    %444:i32 = let %443
+    %445:i32 = div %lhs, %444
+    %446:i32 = mul %445, %444
+    %447:i32 = sub %lhs, %446
+    ret %447
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B43: {
+    %449:i32 = convert %value
+    %450:bool = gte %value, -2147483648.0f
+    %451:i32 = select -2147483648i, %449, %450
+    %452:bool = lte %value, 2147483520.0f
+    %453:i32 = select 2147483647i, %451, %452
+    ret %453
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-composite-phi/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-composite-phi/0.spvasm.expected.ir.msl
index 753e982..65d1eb6 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-composite-phi/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-composite-phi/0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,14 +8,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %c:ptr<function, vec3<f32>, read_write> = var
     %x_51:ptr<function, f32, read_write> = var
     %x_55:ptr<function, f32, read_write> = var
@@ -33,111 +33,115 @@
     %18:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
     %19:f32 = load_vector_element %18, 0u
     %20:f32 = mul %19, 0.125f
-    %x_49:f32 = round %20
-    %22:f32 = load_vector_element %gl_FragCoord, 0u
-    store %x_51, %22
-    switch 0u [c: (default, %b3)] {  # switch_1
-      %b3 = block {  # case
+    %21:f32 = round %20
+    %x_49:f32 = let %21
+    %23:f32 = load_vector_element %gl_FragCoord, 0u
+    store %x_51, %23
+    switch 0u [c: (default, $B3)] {  # switch_1
+      $B3: {  # case
         store %x_55, -0.5f
         store %x_58, 1i
-        loop [b: %b4, c: %b5] {  # loop_1
-          %b4 = block {  # body
+        loop [b: $B4, c: $B5] {  # loop_1
+          $B4: {  # body
             %x_68:ptr<function, f32, read_write> = var
             %x_76:ptr<function, f32, read_write> = var
             %x_59:ptr<function, i32, read_write> = var
             store %x_81, 0.0f
-            %26:f32 = load %x_55
-            store %x_82, %26
+            %27:f32 = load %x_55
+            store %x_82, %27
             store %x_83, false
-            %27:i32 = load %x_58
-            %28:bool = lt %27, 800i
-            if %28 [t: %b6, f: %b7] {  # if_1
-              %b6 = block {  # true
+            %28:i32 = load %x_58
+            %29:bool = lt %28, 800i
+            if %29 [t: $B6, f: $B7] {  # if_1
+              $B6: {  # true
                 exit_if  # if_1
               }
-              %b7 = block {  # false
+              $B7: {  # false
                 exit_loop  # loop_1
               }
             }
             %x_75:ptr<function, f32, read_write> = var
-            %30:i32 = load %x_58
-            %31:i32 = mod %30, 32i
-            %32:bool = eq %31, 0i
-            if %32 [t: %b8, f: %b9] {  # if_2
-              %b8 = block {  # true
-                %33:f32 = load %x_55
-                %34:f32 = add %33, 0.40000000596046447754f
-                store %x_68, %34
-                %35:f32 = load %x_68
-                store %x_56, %35
+            %31:i32 = load %x_58
+            %32:i32 = call %tint_mod_i32, %31, 32i
+            %34:bool = eq %32, 0i
+            if %34 [t: $B8, f: $B9] {  # if_2
+              $B8: {  # true
+                %35:f32 = load %x_55
+                %36:f32 = add %35, 0.40000000596046447754f
+                store %x_68, %36
+                %37:f32 = load %x_68
+                store %x_56, %37
                 exit_if  # if_2
               }
-              %b9 = block {  # false
-                %36:f32 = load %x_55
-                store %x_76, %36
-                %37:i32 = load %x_58
-                %38:f32 = convert %37
-                %39:f32 = round %x_49
-                %40:i32 = load %x_58
-                %41:f32 = convert %40
+              $B9: {  # false
+                %38:f32 = load %x_55
+                store %x_76, %38
+                %39:i32 = load %x_58
+                %40:f32 = convert %39
+                %41:f32 = let %40
                 %42:f32 = round %x_49
-                %43:f32 = div %41, %42
-                %44:f32 = floor %43
-                %45:f32 = mul %39, %44
-                %46:f32 = sub %38, %45
-                %47:bool = lte %46, 0.00999999977648258209f
-                if %47 [t: %b10] {  # if_3
-                  %b10 = block {  # true
-                    %48:f32 = load %x_55
-                    %49:f32 = add %48, 100.0f
-                    store %x_75, %49
-                    %50:f32 = load %x_75
-                    store %x_76, %50
+                %43:f32 = let %42
+                %44:i32 = load %x_58
+                %45:f32 = convert %44
+                %46:f32 = let %45
+                %47:f32 = round %x_49
+                %48:f32 = div %46, %47
+                %49:f32 = floor %48
+                %50:f32 = mul %43, %49
+                %51:f32 = sub %41, %50
+                %52:bool = lte %51, 0.00999999977648258209f
+                if %52 [t: $B10] {  # if_3
+                  $B10: {  # true
+                    %53:f32 = load %x_55
+                    %54:f32 = add %53, 100.0f
+                    store %x_75, %54
+                    %55:f32 = load %x_75
+                    store %x_76, %55
                     exit_if  # if_3
                   }
                 }
-                %51:f32 = load %x_76
-                store %x_56, %51
+                %56:f32 = load %x_76
+                store %x_56, %56
                 exit_if  # if_2
               }
             }
-            %52:i32 = load %x_58
-            %53:f32 = convert %52
-            %54:f32 = load %x_51
-            %55:bool = gte %53, %54
-            if %55 [t: %b11] {  # if_4
-              %b11 = block {  # true
-                %56:f32 = load %x_56
-                store %x_81, %56
-                %57:f32 = load %x_56
-                store %x_82, %57
+            %57:i32 = load %x_58
+            %58:f32 = convert %57
+            %59:f32 = load %x_51
+            %60:bool = gte %58, %59
+            if %60 [t: $B11] {  # if_4
+              $B11: {  # true
+                %61:f32 = load %x_56
+                store %x_81, %61
+                %62:f32 = load %x_56
+                store %x_82, %62
                 store %x_83, true
                 exit_loop  # loop_1
               }
             }
-            continue %b5
+            continue  # -> $B5
           }
-          %b5 = block {  # continuing
-            %58:i32 = load %x_58
-            %59:i32 = add %58, 1i
-            store %x_59, %59
-            %60:f32 = load %x_56
-            store %x_55, %60
-            %61:i32 = load %x_59
-            store %x_58, %61
-            next_iteration %b4
+          $B5: {  # continuing
+            %63:i32 = load %x_58
+            %64:i32 = add %63, 1i
+            store %x_59, %64
+            %65:f32 = load %x_56
+            store %x_55, %65
+            %66:i32 = load %x_59
+            store %x_58, %66
+            next_iteration  # -> $B4
           }
         }
-        %62:f32 = load %x_81
-        store %x_85, %62
-        %63:bool = load %x_83
-        if %63 [t: %b12] {  # if_5
-          %b12 = block {  # true
+        %67:f32 = load %x_81
+        store %x_85, %67
+        %68:bool = load %x_83
+        if %68 [t: $B12] {  # if_5
+          $B12: {  # true
             exit_switch  # switch_1
           }
         }
-        %64:f32 = load %x_82
-        store %x_85, %64
+        %69:f32 = load %x_82
+        store %x_85, %69
         exit_switch  # switch_1
       }
     }
@@ -146,179 +150,198 @@
     %x_95:ptr<function, i32, read_write> = var
     %x_93:ptr<function, f32, read_write> = var
     %x_120:ptr<function, bool, read_write> = var
-    %70:f32 = load %x_85
-    store_vector_element %c, 0u, %70
-    %71:f32 = load_vector_element %gl_FragCoord, 1u
-    store %x_88, %71
-    switch 0u [c: (default, %b13)] {  # switch_2
-      %b13 = block {  # case
+    %75:f32 = load %x_85
+    store_vector_element %c, 0u, %75
+    %76:f32 = load_vector_element %gl_FragCoord, 1u
+    store %x_88, %76
+    switch 0u [c: (default, $B13)] {  # switch_2
+      $B13: {  # case
         store %x_92, -0.5f
         store %x_95, 1i
-        loop [b: %b14, c: %b15] {  # loop_2
-          %b14 = block {  # body
+        loop [b: $B14, c: $B15] {  # loop_2
+          $B14: {  # body
             %x_105:ptr<function, f32, read_write> = var
             %x_113:ptr<function, f32, read_write> = var
             %x_96:ptr<function, i32, read_write> = var
             store %x_118, 0.0f
-            %75:f32 = load %x_92
-            store %x_119, %75
+            %80:f32 = load %x_92
+            store %x_119, %80
             store %x_120, false
-            %76:i32 = load %x_95
-            %77:bool = lt %76, 800i
-            if %77 [t: %b16, f: %b17] {  # if_6
-              %b16 = block {  # true
+            %81:i32 = load %x_95
+            %82:bool = lt %81, 800i
+            if %82 [t: $B16, f: $B17] {  # if_6
+              $B16: {  # true
                 exit_if  # if_6
               }
-              %b17 = block {  # false
+              $B17: {  # false
                 exit_loop  # loop_2
               }
             }
             %x_112:ptr<function, f32, read_write> = var
-            %79:i32 = load %x_95
-            %80:i32 = mod %79, 32i
-            %81:bool = eq %80, 0i
-            if %81 [t: %b18, f: %b19] {  # if_7
-              %b18 = block {  # true
-                %82:f32 = load %x_92
-                %83:f32 = add %82, 0.40000000596046447754f
-                store %x_105, %83
-                %84:f32 = load %x_105
-                store %x_93, %84
+            %84:i32 = load %x_95
+            %85:i32 = call %tint_mod_i32, %84, 32i
+            %86:bool = eq %85, 0i
+            if %86 [t: $B18, f: $B19] {  # if_7
+              $B18: {  # true
+                %87:f32 = load %x_92
+                %88:f32 = add %87, 0.40000000596046447754f
+                store %x_105, %88
+                %89:f32 = load %x_105
+                store %x_93, %89
                 exit_if  # if_7
               }
-              %b19 = block {  # false
-                %85:f32 = load %x_92
-                store %x_113, %85
-                %86:i32 = load %x_95
-                %87:f32 = convert %86
-                %88:f32 = round %x_49
-                %89:i32 = load %x_95
-                %90:f32 = convert %89
-                %91:f32 = round %x_49
-                %92:f32 = div %90, %91
-                %93:f32 = floor %92
-                %94:f32 = mul %88, %93
-                %95:f32 = sub %87, %94
-                %96:bool = lte %95, 0.00999999977648258209f
-                if %96 [t: %b20] {  # if_8
-                  %b20 = block {  # true
-                    %97:f32 = load %x_92
-                    %98:f32 = add %97, 100.0f
-                    store %x_112, %98
-                    %99:f32 = load %x_112
-                    store %x_113, %99
+              $B19: {  # false
+                %90:f32 = load %x_92
+                store %x_113, %90
+                %91:i32 = load %x_95
+                %92:f32 = convert %91
+                %93:f32 = let %92
+                %94:f32 = round %x_49
+                %95:f32 = let %94
+                %96:i32 = load %x_95
+                %97:f32 = convert %96
+                %98:f32 = let %97
+                %99:f32 = round %x_49
+                %100:f32 = div %98, %99
+                %101:f32 = floor %100
+                %102:f32 = mul %95, %101
+                %103:f32 = sub %93, %102
+                %104:bool = lte %103, 0.00999999977648258209f
+                if %104 [t: $B20] {  # if_8
+                  $B20: {  # true
+                    %105:f32 = load %x_92
+                    %106:f32 = add %105, 100.0f
+                    store %x_112, %106
+                    %107:f32 = load %x_112
+                    store %x_113, %107
                     exit_if  # if_8
                   }
                 }
-                %100:f32 = load %x_113
-                store %x_93, %100
+                %108:f32 = load %x_113
+                store %x_93, %108
                 exit_if  # if_7
               }
             }
-            %101:i32 = load %x_95
-            %102:f32 = convert %101
-            %103:f32 = load %x_88
-            %104:bool = gte %102, %103
-            if %104 [t: %b21] {  # if_9
-              %b21 = block {  # true
-                %105:f32 = load %x_93
-                store %x_118, %105
-                %106:f32 = load %x_93
-                store %x_119, %106
+            %109:i32 = load %x_95
+            %110:f32 = convert %109
+            %111:f32 = load %x_88
+            %112:bool = gte %110, %111
+            if %112 [t: $B21] {  # if_9
+              $B21: {  # true
+                %113:f32 = load %x_93
+                store %x_118, %113
+                %114:f32 = load %x_93
+                store %x_119, %114
                 store %x_120, true
                 exit_loop  # loop_2
               }
             }
-            continue %b15
+            continue  # -> $B15
           }
-          %b15 = block {  # continuing
-            %107:i32 = load %x_95
-            %108:i32 = add %107, 1i
-            store %x_96, %108
-            %109:f32 = load %x_93
-            store %x_92, %109
-            %110:i32 = load %x_96
-            store %x_95, %110
-            next_iteration %b14
+          $B15: {  # continuing
+            %115:i32 = load %x_95
+            %116:i32 = add %115, 1i
+            store %x_96, %116
+            %117:f32 = load %x_93
+            store %x_92, %117
+            %118:i32 = load %x_96
+            store %x_95, %118
+            next_iteration  # -> $B14
           }
         }
-        %111:f32 = load %x_118
-        store %x_122, %111
-        %112:bool = load %x_120
-        if %112 [t: %b22] {  # if_10
-          %b22 = block {  # true
+        %119:f32 = load %x_118
+        store %x_122, %119
+        %120:bool = load %x_120
+        if %120 [t: $B22] {  # if_10
+          $B22: {  # true
             exit_switch  # switch_2
           }
         }
-        %113:f32 = load %x_119
-        store %x_122, %113
+        %121:f32 = load %x_119
+        store %x_122, %121
         exit_switch  # switch_2
       }
     }
-    %114:f32 = load %x_122
-    store_vector_element %c, 1u, %114
-    %115:f32 = load_vector_element %c, 0u
-    %116:f32 = load_vector_element %c, 1u
-    %117:f32 = add %115, %116
-    store_vector_element %c, 2u, %117
+    %122:f32 = load %x_122
+    store_vector_element %c, 1u, %122
+    %123:f32 = load_vector_element %c, 0u
+    %124:f32 = load_vector_element %c, 1u
+    %125:f32 = add %123, %124
+    store_vector_element %c, 2u, %125
     store %x_129, 0i
-    loop [b: %b23, c: %b24] {  # loop_3
-      %b23 = block {  # body
+    loop [b: $B23, c: $B24] {  # loop_3
+      $B23: {  # body
         %x_130:ptr<function, i32, read_write> = var
-        %119:i32 = load %x_129
-        %120:bool = lt %119, 3i
-        if %120 [t: %b25, f: %b26] {  # if_11
-          %b25 = block {  # true
+        %127:i32 = load %x_129
+        %128:bool = lt %127, 3i
+        if %128 [t: $B25, f: $B26] {  # if_11
+          $B25: {  # true
             exit_if  # if_11
           }
-          %b26 = block {  # false
+          $B26: {  # false
             exit_loop  # loop_3
           }
         }
-        %121:i32 = load %x_129
-        %122:f32 = load_vector_element %c, %121
-        %123:bool = gte %122, 1.0f
-        if %123 [t: %b27] {  # if_12
-          %b27 = block {  # true
-            %124:i32 = load %x_129
-            %125:i32 = load %x_129
-            %126:f32 = load_vector_element %c, %125
-            %127:i32 = load %x_129
-            %128:f32 = load_vector_element %c, %127
-            %129:f32 = mul %126, %128
-            store_vector_element %c, %124, %129
+        %129:i32 = load %x_129
+        %130:f32 = load_vector_element %c, %129
+        %131:bool = gte %130, 1.0f
+        if %131 [t: $B27] {  # if_12
+          $B27: {  # true
+            %132:i32 = load %x_129
+            %133:i32 = load %x_129
+            %134:f32 = load_vector_element %c, %133
+            %135:i32 = load %x_129
+            %136:f32 = load_vector_element %c, %135
+            %137:f32 = mul %134, %136
+            store_vector_element %c, %132, %137
             exit_if  # if_12
           }
         }
-        continue %b24
+        continue  # -> $B24
       }
-      %b24 = block {  # continuing
-        %130:i32 = load %x_129
-        %131:i32 = add %130, 1i
-        store %x_130, %131
-        %132:i32 = load %x_130
-        store %x_129, %132
-        next_iteration %b23
+      $B24: {  # continuing
+        %138:i32 = load %x_129
+        %139:i32 = add %138, 1i
+        store %x_130, %139
+        %140:i32 = load %x_130
+        store %x_129, %140
+        next_iteration  # -> $B23
       }
     }
-    %133:vec3<f32> = load %c
-    %134:vec3<f32> = abs %133
-    %x_145:vec3<f32> = normalize %134
-    %136:f32 = access %x_145, 0u
-    %137:f32 = access %x_145, 1u
-    %138:f32 = access %x_145, 2u
-    %139:vec4<f32> = construct %136, %137, %138, 1.0f
-    store %x_GLF_color, %139
+    %141:vec3<f32> = load %c
+    %142:vec3<f32> = abs %141
+    %143:vec3<f32> = normalize %142
+    %x_145:vec3<f32> = let %143
+    %145:f32 = access %x_145, 0u
+    %146:f32 = access %x_145, 1u
+    %147:f32 = access %x_145, 2u
+    %148:vec4<f32> = construct %145, %146, %147, 1.0f
+    store %x_GLF_color, %148
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b28 {
-  %b28 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B28: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %142:void = call %main_1
-    %143:vec4<f32> = load %x_GLF_color
-    %144:main_out = construct %143
-    ret %144
+    %151:void = call %main_1
+    %152:vec4<f32> = load %x_GLF_color
+    %153:main_out = construct %152
+    ret %153
+  }
+}
+%tint_mod_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B29: {
+    %156:bool = eq %rhs, 0i
+    %157:bool = eq %lhs, -2147483648i
+    %158:bool = eq %rhs, -1i
+    %159:bool = and %157, %158
+    %160:bool = or %156, %159
+    %161:i32 = select %rhs, 1i, %160
+    %162:i32 = let %161
+    %163:i32 = div %lhs, %162
+    %164:i32 = mul %163, %162
+    %165:i32 = sub %lhs, %164
+    ret %165
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-composite-phi/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-composite-phi/0.wgsl.expected.ir.msl
index 019333c..f3275e4 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-composite-phi/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-composite-phi/0.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,14 +8,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %c:ptr<function, vec3<f32>, read_write> = var
     %x_51:ptr<function, f32, read_write> = var
     %x_55:ptr<function, f32, read_write> = var
@@ -34,120 +34,127 @@
     %x_129_phi:ptr<function, i32, read_write> = var
     store %c, vec3<f32>(7.0f, 8.0f, 9.0f)
     %21:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-    %x_47:f32 = load_vector_element %21, 0u
-    %23:f32 = mul %x_47, 0.125f
-    %x_49:f32 = round %23
-    %25:f32 = load_vector_element %gl_FragCoord, 0u
-    store %x_51, %25
-    switch 0u [c: (default, %b3)] {  # switch_1
-      %b3 = block {  # case
+    %22:f32 = load_vector_element %21, 0u
+    %x_47:f32 = let %22
+    %24:f32 = mul %x_47, 0.125f
+    %25:f32 = round %24
+    %x_49:f32 = let %25
+    %27:f32 = load_vector_element %gl_FragCoord, 0u
+    store %x_51, %27
+    switch 0u [c: (default, $B3)] {  # switch_1
+      $B3: {  # case
         store %x_55_phi, -0.5f
         store %x_58_phi, 1i
-        loop [b: %b4, c: %b5] {  # loop_1
-          %b4 = block {  # body
+        loop [b: $B4, c: $B5] {  # loop_1
+          $B4: {  # body
             %x_68:ptr<function, f32, read_write> = var
             %x_76:ptr<function, f32, read_write> = var
             %x_59:ptr<function, i32, read_write> = var
             %x_56_phi:ptr<function, f32, read_write> = var
-            %30:f32 = load %x_55_phi
-            store %x_55, %30
-            %x_58:i32 = load %x_58_phi
+            %32:f32 = load %x_55_phi
+            store %x_55, %32
+            %33:i32 = load %x_58_phi
+            %x_58:i32 = let %33
             store %x_81_phi, 0.0f
-            %32:f32 = load %x_55
-            store %x_82_phi, %32
+            %35:f32 = load %x_55
+            store %x_82_phi, %35
             store %x_83_phi, false
-            %33:bool = lt %x_58, 800i
-            if %33 [t: %b6, f: %b7] {  # if_1
-              %b6 = block {  # true
+            %36:bool = lt %x_58, 800i
+            if %36 [t: $B6, f: $B7] {  # if_1
+              $B6: {  # true
                 exit_if  # if_1
               }
-              %b7 = block {  # false
+              $B7: {  # false
                 exit_loop  # loop_1
               }
             }
             %x_75:ptr<function, f32, read_write> = var
             %x_76_phi:ptr<function, f32, read_write> = var
-            %36:i32 = mod %x_58, 32i
-            %37:bool = eq %36, 0i
-            if %37 [t: %b8, f: %b9] {  # if_2
-              %b8 = block {  # true
-                %38:f32 = load %x_55
-                %39:f32 = add %38, 0.40000000596046447754f
-                store %x_68, %39
-                %40:f32 = load %x_68
-                store %x_56_phi, %40
+            %39:i32 = call %tint_mod_i32, %x_58, 32i
+            %41:bool = eq %39, 0i
+            if %41 [t: $B8, f: $B9] {  # if_2
+              $B8: {  # true
+                %42:f32 = load %x_55
+                %43:f32 = add %42, 0.40000000596046447754f
+                store %x_68, %43
+                %44:f32 = load %x_68
+                store %x_56_phi, %44
                 exit_if  # if_2
               }
-              %b9 = block {  # false
-                %41:f32 = load %x_55
-                store %x_76_phi, %41
-                %42:f32 = convert %x_58
-                %43:f32 = round %x_49
-                %44:f32 = convert %x_58
-                %45:f32 = round %x_49
-                %46:f32 = div %44, %45
-                %47:f32 = floor %46
-                %48:f32 = mul %43, %47
-                %49:f32 = sub %42, %48
-                %50:bool = lte %49, 0.00999999977648258209f
-                if %50 [t: %b10] {  # if_3
-                  %b10 = block {  # true
-                    %51:f32 = load %x_55
-                    %52:f32 = add %51, 100.0f
-                    store %x_75, %52
-                    %53:f32 = load %x_75
-                    store %x_76_phi, %53
+              $B9: {  # false
+                %45:f32 = load %x_55
+                store %x_76_phi, %45
+                %46:f32 = convert %x_58
+                %47:f32 = let %46
+                %48:f32 = round %x_49
+                %49:f32 = let %48
+                %50:f32 = convert %x_58
+                %51:f32 = let %50
+                %52:f32 = round %x_49
+                %53:f32 = div %51, %52
+                %54:f32 = floor %53
+                %55:f32 = mul %49, %54
+                %56:f32 = sub %47, %55
+                %57:bool = lte %56, 0.00999999977648258209f
+                if %57 [t: $B10] {  # if_3
+                  $B10: {  # true
+                    %58:f32 = load %x_55
+                    %59:f32 = add %58, 100.0f
+                    store %x_75, %59
+                    %60:f32 = load %x_75
+                    store %x_76_phi, %60
                     exit_if  # if_3
                   }
                 }
-                %54:f32 = load %x_76_phi
-                store %x_76, %54
-                %55:f32 = load %x_76
-                store %x_56_phi, %55
+                %61:f32 = load %x_76_phi
+                store %x_76, %61
+                %62:f32 = load %x_76
+                store %x_56_phi, %62
                 exit_if  # if_2
               }
             }
-            %56:f32 = load %x_56_phi
-            store %x_56, %56
-            %57:f32 = convert %x_58
-            %58:f32 = load %x_51
-            %59:bool = gte %57, %58
-            if %59 [t: %b11] {  # if_4
-              %b11 = block {  # true
-                %60:f32 = load %x_56
-                store %x_81_phi, %60
-                %61:f32 = load %x_56
-                store %x_82_phi, %61
+            %63:f32 = load %x_56_phi
+            store %x_56, %63
+            %64:f32 = convert %x_58
+            %65:f32 = load %x_51
+            %66:bool = gte %64, %65
+            if %66 [t: $B11] {  # if_4
+              $B11: {  # true
+                %67:f32 = load %x_56
+                store %x_81_phi, %67
+                %68:f32 = load %x_56
+                store %x_82_phi, %68
                 store %x_83_phi, true
                 exit_loop  # loop_1
               }
             }
-            continue %b5
+            continue  # -> $B5
           }
-          %b5 = block {  # continuing
-            %62:i32 = add %x_58, 1i
-            store %x_59, %62
-            %63:f32 = load %x_56
-            store %x_55_phi, %63
-            %64:i32 = load %x_59
-            store %x_58_phi, %64
-            next_iteration %b4
+          $B5: {  # continuing
+            %69:i32 = add %x_58, 1i
+            store %x_59, %69
+            %70:f32 = load %x_56
+            store %x_55_phi, %70
+            %71:i32 = load %x_59
+            store %x_58_phi, %71
+            next_iteration  # -> $B4
           }
         }
-        %65:f32 = load %x_81_phi
-        store %x_81, %65
-        %66:f32 = load %x_82_phi
-        store %x_82, %66
-        %x_83:bool = load %x_83_phi
-        %68:f32 = load %x_81
-        store %x_85_phi, %68
-        if %x_83 [t: %b12] {  # if_5
-          %b12 = block {  # true
+        %72:f32 = load %x_81_phi
+        store %x_81, %72
+        %73:f32 = load %x_82_phi
+        store %x_82, %73
+        %74:bool = load %x_83_phi
+        %x_83:bool = let %74
+        %76:f32 = load %x_81
+        store %x_85_phi, %76
+        if %x_83 [t: $B12] {  # if_5
+          $B12: {  # true
             exit_switch  # switch_1
           }
         }
-        %69:f32 = load %x_82
-        store %x_85_phi, %69
+        %77:f32 = load %x_82
+        store %x_85_phi, %77
         exit_switch  # switch_1
       }
     }
@@ -159,181 +166,211 @@
     %x_118_phi:ptr<function, f32, read_write> = var
     %x_119_phi:ptr<function, f32, read_write> = var
     %x_120_phi:ptr<function, bool, read_write> = var
-    %x_85:f32 = load %x_85_phi
+    %86:f32 = load %x_85_phi
+    %x_85:f32 = let %86
     store_vector_element %c, 0u, %x_85
-    %79:f32 = load_vector_element %gl_FragCoord, 1u
-    store %x_88, %79
-    switch 0u [c: (default, %b13)] {  # switch_2
-      %b13 = block {  # case
+    %88:f32 = load_vector_element %gl_FragCoord, 1u
+    store %x_88, %88
+    switch 0u [c: (default, $B13)] {  # switch_2
+      $B13: {  # case
         store %x_92_phi, -0.5f
         store %x_95_phi, 1i
-        loop [b: %b14, c: %b15] {  # loop_2
-          %b14 = block {  # body
+        loop [b: $B14, c: $B15] {  # loop_2
+          $B14: {  # body
             %x_105:ptr<function, f32, read_write> = var
             %x_113:ptr<function, f32, read_write> = var
             %x_96:ptr<function, i32, read_write> = var
             %x_93_phi:ptr<function, f32, read_write> = var
-            %84:f32 = load %x_92_phi
-            store %x_92, %84
-            %x_95:i32 = load %x_95_phi
+            %93:f32 = load %x_92_phi
+            store %x_92, %93
+            %94:i32 = load %x_95_phi
+            %x_95:i32 = let %94
             store %x_118_phi, 0.0f
-            %86:f32 = load %x_92
-            store %x_119_phi, %86
+            %96:f32 = load %x_92
+            store %x_119_phi, %96
             store %x_120_phi, false
-            %87:bool = lt %x_95, 800i
-            if %87 [t: %b16, f: %b17] {  # if_6
-              %b16 = block {  # true
+            %97:bool = lt %x_95, 800i
+            if %97 [t: $B16, f: $B17] {  # if_6
+              $B16: {  # true
                 exit_if  # if_6
               }
-              %b17 = block {  # false
+              $B17: {  # false
                 exit_loop  # loop_2
               }
             }
             %x_112:ptr<function, f32, read_write> = var
             %x_113_phi:ptr<function, f32, read_write> = var
-            %90:i32 = mod %x_95, 32i
-            %91:bool = eq %90, 0i
-            if %91 [t: %b18, f: %b19] {  # if_7
-              %b18 = block {  # true
-                %92:f32 = load %x_92
-                %93:f32 = add %92, 0.40000000596046447754f
-                store %x_105, %93
-                %94:f32 = load %x_105
-                store %x_93_phi, %94
+            %100:i32 = call %tint_mod_i32, %x_95, 32i
+            %101:bool = eq %100, 0i
+            if %101 [t: $B18, f: $B19] {  # if_7
+              $B18: {  # true
+                %102:f32 = load %x_92
+                %103:f32 = add %102, 0.40000000596046447754f
+                store %x_105, %103
+                %104:f32 = load %x_105
+                store %x_93_phi, %104
                 exit_if  # if_7
               }
-              %b19 = block {  # false
-                %95:f32 = load %x_92
-                store %x_113_phi, %95
-                %96:f32 = convert %x_95
-                %97:f32 = round %x_49
-                %98:f32 = convert %x_95
-                %99:f32 = round %x_49
-                %100:f32 = div %98, %99
-                %101:f32 = floor %100
-                %102:f32 = mul %97, %101
-                %103:f32 = sub %96, %102
-                %104:bool = lte %103, 0.00999999977648258209f
-                if %104 [t: %b20] {  # if_8
-                  %b20 = block {  # true
-                    %105:f32 = load %x_92
-                    %106:f32 = add %105, 100.0f
-                    store %x_112, %106
-                    %107:f32 = load %x_112
-                    store %x_113_phi, %107
+              $B19: {  # false
+                %105:f32 = load %x_92
+                store %x_113_phi, %105
+                %106:f32 = convert %x_95
+                %107:f32 = let %106
+                %108:f32 = round %x_49
+                %109:f32 = let %108
+                %110:f32 = convert %x_95
+                %111:f32 = let %110
+                %112:f32 = round %x_49
+                %113:f32 = div %111, %112
+                %114:f32 = floor %113
+                %115:f32 = mul %109, %114
+                %116:f32 = sub %107, %115
+                %117:bool = lte %116, 0.00999999977648258209f
+                if %117 [t: $B20] {  # if_8
+                  $B20: {  # true
+                    %118:f32 = load %x_92
+                    %119:f32 = add %118, 100.0f
+                    store %x_112, %119
+                    %120:f32 = load %x_112
+                    store %x_113_phi, %120
                     exit_if  # if_8
                   }
                 }
-                %108:f32 = load %x_113_phi
-                store %x_113, %108
-                %109:f32 = load %x_113
-                store %x_93_phi, %109
+                %121:f32 = load %x_113_phi
+                store %x_113, %121
+                %122:f32 = load %x_113
+                store %x_93_phi, %122
                 exit_if  # if_7
               }
             }
-            %110:f32 = load %x_93_phi
-            store %x_93, %110
-            %111:f32 = convert %x_95
-            %112:f32 = load %x_88
-            %113:bool = gte %111, %112
-            if %113 [t: %b21] {  # if_9
-              %b21 = block {  # true
-                %114:f32 = load %x_93
-                store %x_118_phi, %114
-                %115:f32 = load %x_93
-                store %x_119_phi, %115
+            %123:f32 = load %x_93_phi
+            store %x_93, %123
+            %124:f32 = convert %x_95
+            %125:f32 = load %x_88
+            %126:bool = gte %124, %125
+            if %126 [t: $B21] {  # if_9
+              $B21: {  # true
+                %127:f32 = load %x_93
+                store %x_118_phi, %127
+                %128:f32 = load %x_93
+                store %x_119_phi, %128
                 store %x_120_phi, true
                 exit_loop  # loop_2
               }
             }
-            continue %b15
+            continue  # -> $B15
           }
-          %b15 = block {  # continuing
-            %116:i32 = add %x_95, 1i
-            store %x_96, %116
-            %117:f32 = load %x_93
-            store %x_92_phi, %117
-            %118:i32 = load %x_96
-            store %x_95_phi, %118
-            next_iteration %b14
+          $B15: {  # continuing
+            %129:i32 = add %x_95, 1i
+            store %x_96, %129
+            %130:f32 = load %x_93
+            store %x_92_phi, %130
+            %131:i32 = load %x_96
+            store %x_95_phi, %131
+            next_iteration  # -> $B14
           }
         }
-        %119:f32 = load %x_118_phi
-        store %x_118, %119
-        %120:f32 = load %x_119_phi
-        store %x_119, %120
-        %x_120:bool = load %x_120_phi
-        %122:f32 = load %x_118
-        store %x_122_phi, %122
-        if %x_120 [t: %b22] {  # if_10
-          %b22 = block {  # true
+        %132:f32 = load %x_118_phi
+        store %x_118, %132
+        %133:f32 = load %x_119_phi
+        store %x_119, %133
+        %134:bool = load %x_120_phi
+        %x_120:bool = let %134
+        %136:f32 = load %x_118
+        store %x_122_phi, %136
+        if %x_120 [t: $B22] {  # if_10
+          $B22: {  # true
             exit_switch  # switch_2
           }
         }
-        %123:f32 = load %x_119
-        store %x_122_phi, %123
+        %137:f32 = load %x_119
+        store %x_122_phi, %137
         exit_switch  # switch_2
       }
     }
-    %x_122:f32 = load %x_122_phi
+    %138:f32 = load %x_122_phi
+    %x_122:f32 = let %138
     store_vector_element %c, 1u, %x_122
-    %x_124:f32 = load_vector_element %c, 0u
-    %x_125:f32 = load_vector_element %c, 1u
-    %127:f32 = add %x_124, %x_125
-    store_vector_element %c, 2u, %127
+    %140:f32 = load_vector_element %c, 0u
+    %x_124:f32 = let %140
+    %142:f32 = load_vector_element %c, 1u
+    %x_125:f32 = let %142
+    %144:f32 = add %x_124, %x_125
+    store_vector_element %c, 2u, %144
     store %x_129_phi, 0i
-    loop [b: %b23, c: %b24] {  # loop_3
-      %b23 = block {  # body
+    loop [b: $B23, c: $B24] {  # loop_3
+      $B23: {  # body
         %x_130:ptr<function, i32, read_write> = var
-        %x_129:i32 = load %x_129_phi
-        %130:bool = lt %x_129, 3i
-        if %130 [t: %b25, f: %b26] {  # if_11
-          %b25 = block {  # true
+        %146:i32 = load %x_129_phi
+        %x_129:i32 = let %146
+        %148:bool = lt %x_129, 3i
+        if %148 [t: $B25, f: $B26] {  # if_11
+          $B25: {  # true
             exit_if  # if_11
           }
-          %b26 = block {  # false
+          $B26: {  # false
             exit_loop  # loop_3
           }
         }
-        %x_136:f32 = load_vector_element %c, %x_129
-        %132:bool = gte %x_136, 1.0f
-        if %132 [t: %b27] {  # if_12
-          %b27 = block {  # true
-            %x_140:f32 = load_vector_element %c, %x_129
-            %x_141:f32 = load_vector_element %c, %x_129
-            %135:f32 = mul %x_140, %x_141
-            store_vector_element %c, %x_129, %135
+        %149:f32 = load_vector_element %c, %x_129
+        %x_136:f32 = let %149
+        %151:bool = gte %x_136, 1.0f
+        if %151 [t: $B27] {  # if_12
+          $B27: {  # true
+            %152:f32 = load_vector_element %c, %x_129
+            %x_140:f32 = let %152
+            %154:f32 = load_vector_element %c, %x_129
+            %x_141:f32 = let %154
+            %156:f32 = mul %x_140, %x_141
+            store_vector_element %c, %x_129, %156
             exit_if  # if_12
           }
         }
-        continue %b24
+        continue  # -> $B24
       }
-      %b24 = block {  # continuing
-        %136:i32 = add %x_129, 1i
-        store %x_130, %136
-        %137:i32 = load %x_130
-        store %x_129_phi, %137
-        next_iteration %b23
+      $B24: {  # continuing
+        %157:i32 = add %x_129, 1i
+        store %x_130, %157
+        %158:i32 = load %x_130
+        store %x_129_phi, %158
+        next_iteration  # -> $B23
       }
     }
-    %x_143:vec3<f32> = load %c
-    %139:vec3<f32> = abs %x_143
-    %x_145:vec3<f32> = normalize %139
-    %141:f32 = access %x_145, 0u
-    %142:f32 = access %x_145, 1u
-    %143:f32 = access %x_145, 2u
-    %144:vec4<f32> = construct %141, %142, %143, 1.0f
-    store %x_GLF_color, %144
+    %159:vec3<f32> = load %c
+    %x_143:vec3<f32> = let %159
+    %161:vec3<f32> = abs %x_143
+    %162:vec3<f32> = normalize %161
+    %x_145:vec3<f32> = let %162
+    %164:f32 = access %x_145, 0u
+    %165:f32 = access %x_145, 1u
+    %166:f32 = access %x_145, 2u
+    %167:vec4<f32> = construct %164, %165, %166, 1.0f
+    store %x_GLF_color, %167
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b28 {
-  %b28 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B28: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %147:void = call %main_1
-    %148:vec4<f32> = load %x_GLF_color
-    %149:main_out = construct %148
-    ret %149
+    %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 {
+  $B29: {
+    %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
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-composite-phi/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-composite-phi/1.spvasm.expected.ir.msl
index ea6632a..a8138db 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-composite-phi/1.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-composite-phi/1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,14 +8,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %c:ptr<function, vec3<f32>, read_write> = var
     %x_53:ptr<function, f32, read_write> = var
     %x_57:ptr<function, f32, read_write> = var
@@ -31,115 +31,121 @@
     %x_135:ptr<function, i32, read_write> = var
     store %c, vec3<f32>(7.0f, 8.0f, 9.0f)
     %18:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-    %x_47:f32 = load_vector_element %18, 0u
-    %x_48:vec2<f32> = construct 1.0f, %x_47
-    %21:f32 = mul %x_47, 0.125f
-    %x_50:f32 = round %21
+    %19:f32 = load_vector_element %18, 0u
+    %x_47:f32 = let %19
+    %21:vec2<f32> = construct 1.0f, %x_47
+    %x_48:vec2<f32> = let %21
+    %23:f32 = mul %x_47, 0.125f
+    %24:f32 = round %23
+    %x_50:f32 = let %24
     %x_51:vec2<f32> = let vec2<f32>(0.0f, -0.5f)
-    %24:f32 = load_vector_element %gl_FragCoord, 0u
-    store %x_53, %24
-    switch 0u [c: (default, %b3)] {  # switch_1
-      %b3 = block {  # case
+    %27:f32 = load_vector_element %gl_FragCoord, 0u
+    store %x_53, %27
+    switch 0u [c: (default, $B3)] {  # switch_1
+      $B3: {  # case
         store %x_57, -0.5f
         store %x_60, 1i
-        loop [b: %b4, c: %b5] {  # loop_1
-          %b4 = block {  # body
+        loop [b: $B4, c: $B5] {  # loop_1
+          $B4: {  # body
             %x_70:ptr<function, f32, read_write> = var
             %x_78:ptr<function, f32, read_write> = var
             %x_61:ptr<function, i32, read_write> = var
             store %x_83, 0.0f
-            %28:f32 = load %x_57
-            store %x_84, %28
+            %31:f32 = load %x_57
+            store %x_84, %31
             store %x_85, false
-            %29:i32 = load %x_60
-            %30:bool = lt %29, 800i
-            if %30 [t: %b6, f: %b7] {  # if_1
-              %b6 = block {  # true
+            %32:i32 = load %x_60
+            %33:bool = lt %32, 800i
+            if %33 [t: $B6, f: $B7] {  # if_1
+              $B6: {  # true
                 exit_if  # if_1
               }
-              %b7 = block {  # false
+              $B7: {  # false
                 exit_loop  # loop_1
               }
             }
             %x_77:ptr<function, f32, read_write> = var
-            %32:i32 = load %x_60
-            %33:i32 = mod %32, 32i
-            %34:bool = eq %33, 0i
-            if %34 [t: %b8, f: %b9] {  # if_2
-              %b8 = block {  # true
-                %35:f32 = load %x_57
-                %36:f32 = add %35, 0.40000000596046447754f
-                store %x_70, %36
-                %37:f32 = load %x_70
-                store %x_58, %37
+            %35:i32 = load %x_60
+            %36:i32 = call %tint_mod_i32, %35, 32i
+            %38:bool = eq %36, 0i
+            if %38 [t: $B8, f: $B9] {  # if_2
+              $B8: {  # true
+                %39:f32 = load %x_57
+                %40:f32 = add %39, 0.40000000596046447754f
+                store %x_70, %40
+                %41:f32 = load %x_70
+                store %x_58, %41
                 exit_if  # if_2
               }
-              %b9 = block {  # false
-                %38:f32 = load %x_57
-                store %x_78, %38
-                %39:i32 = load %x_60
-                %40:f32 = convert %39
-                %41:f32 = round %x_50
-                %42:i32 = load %x_60
-                %43:f32 = convert %42
-                %44:f32 = round %x_50
-                %45:f32 = div %43, %44
-                %46:f32 = floor %45
-                %47:f32 = mul %41, %46
-                %48:f32 = sub %40, %47
-                %49:bool = lte %48, 0.00999999977648258209f
-                if %49 [t: %b10] {  # if_3
-                  %b10 = block {  # true
-                    %50:f32 = load %x_57
-                    %51:f32 = add %50, 100.0f
-                    store %x_77, %51
-                    %52:f32 = load %x_77
-                    store %x_78, %52
+              $B9: {  # false
+                %42:f32 = load %x_57
+                store %x_78, %42
+                %43:i32 = load %x_60
+                %44:f32 = convert %43
+                %45:f32 = let %44
+                %46:f32 = round %x_50
+                %47:f32 = let %46
+                %48:i32 = load %x_60
+                %49:f32 = convert %48
+                %50:f32 = let %49
+                %51:f32 = round %x_50
+                %52:f32 = div %50, %51
+                %53:f32 = floor %52
+                %54:f32 = mul %47, %53
+                %55:f32 = sub %45, %54
+                %56:bool = lte %55, 0.00999999977648258209f
+                if %56 [t: $B10] {  # if_3
+                  $B10: {  # true
+                    %57:f32 = load %x_57
+                    %58:f32 = add %57, 100.0f
+                    store %x_77, %58
+                    %59:f32 = load %x_77
+                    store %x_78, %59
                     exit_if  # if_3
                   }
                 }
-                %53:f32 = load %x_78
-                store %x_58, %53
+                %60:f32 = load %x_78
+                store %x_58, %60
                 exit_if  # if_2
               }
             }
-            %54:i32 = load %x_60
-            %55:f32 = convert %54
-            %56:f32 = load %x_53
-            %57:bool = gte %55, %56
-            if %57 [t: %b11] {  # if_4
-              %b11 = block {  # true
-                %58:f32 = load %x_58
-                store %x_83, %58
-                %59:f32 = load %x_58
-                store %x_84, %59
+            %61:i32 = load %x_60
+            %62:f32 = convert %61
+            %63:f32 = load %x_53
+            %64:bool = gte %62, %63
+            if %64 [t: $B11] {  # if_4
+              $B11: {  # true
+                %65:f32 = load %x_58
+                store %x_83, %65
+                %66:f32 = load %x_58
+                store %x_84, %66
                 store %x_85, true
                 exit_loop  # loop_1
               }
             }
-            continue %b5
+            continue  # -> $B5
           }
-          %b5 = block {  # continuing
-            %60:i32 = load %x_60
-            %61:i32 = add %60, 1i
-            store %x_61, %61
-            %62:f32 = load %x_58
-            store %x_57, %62
-            %63:i32 = load %x_61
-            store %x_60, %63
-            next_iteration %b4
+          $B5: {  # continuing
+            %67:i32 = load %x_60
+            %68:i32 = add %67, 1i
+            store %x_61, %68
+            %69:f32 = load %x_58
+            store %x_57, %69
+            %70:i32 = load %x_61
+            store %x_60, %70
+            next_iteration  # -> $B4
           }
         }
-        %64:f32 = load %x_83
-        store %x_87, %64
-        %65:bool = load %x_85
-        if %65 [t: %b12] {  # if_5
-          %b12 = block {  # true
+        %71:f32 = load %x_83
+        store %x_87, %71
+        %72:bool = load %x_85
+        if %72 [t: $B12] {  # if_5
+          $B12: {  # true
             exit_switch  # switch_1
           }
         }
-        %66:f32 = load %x_84
-        store %x_87, %66
+        %73:f32 = load %x_84
+        store %x_87, %73
         exit_switch  # switch_1
       }
     }
@@ -148,186 +154,207 @@
     %x_101:ptr<function, i32, read_write> = var
     %x_99:ptr<function, f32, read_write> = var
     %x_126:ptr<function, bool, read_write> = var
-    %72:f32 = load %x_84
-    %73:f32 = load %x_83
-    %x_89:vec4<f32> = construct %72, 0.40000000596046447754f, %73, 0.40000000596046447754f
-    %75:f32 = load %x_87
-    store_vector_element %c, 0u, %75
-    %76:f32 = load_vector_element %gl_FragCoord, 1u
-    store %x_92, %76
-    switch 0u [c: (default, %b13)] {  # switch_2
-      %b13 = block {  # case
-        %77:f32 = load %x_57
-        %x_95:vec4<f32> = construct %x_51, 0.0f, %77
-        %79:vec3<f32> = construct %x_48, -0.5f
-        %80:f32 = access %79, 2u
-        store %x_98, %80
+    %79:f32 = load %x_84
+    %80:f32 = load %x_83
+    %81:vec4<f32> = construct %79, 0.40000000596046447754f, %80, 0.40000000596046447754f
+    %x_89:vec4<f32> = let %81
+    %83:f32 = load %x_87
+    store_vector_element %c, 0u, %83
+    %84:f32 = load_vector_element %gl_FragCoord, 1u
+    store %x_92, %84
+    switch 0u [c: (default, $B13)] {  # switch_2
+      $B13: {  # case
+        %85:f32 = load %x_57
+        %86:vec4<f32> = construct %x_51, 0.0f, %85
+        %x_95:vec4<f32> = let %86
+        %88:vec3<f32> = construct %x_48, -0.5f
+        %89:f32 = access %88, 2u
+        store %x_98, %89
         store %x_101, 1i
-        loop [b: %b14, c: %b15] {  # loop_2
-          %b14 = block {  # body
+        loop [b: $B14, c: $B15] {  # loop_2
+          $B14: {  # body
             %x_111:ptr<function, f32, read_write> = var
             %x_119:ptr<function, f32, read_write> = var
             %x_102:ptr<function, i32, read_write> = var
             store %x_124, 0.0f
-            %84:f32 = load %x_98
-            store %x_125, %84
+            %93:f32 = load %x_98
+            store %x_125, %93
             store %x_126, false
-            %85:i32 = load %x_101
-            %86:bool = lt %85, 800i
-            if %86 [t: %b16, f: %b17] {  # if_6
-              %b16 = block {  # true
+            %94:i32 = load %x_101
+            %95:bool = lt %94, 800i
+            if %95 [t: $B16, f: $B17] {  # if_6
+              $B16: {  # true
                 exit_if  # if_6
               }
-              %b17 = block {  # false
+              $B17: {  # false
                 exit_loop  # loop_2
               }
             }
             %x_118:ptr<function, f32, read_write> = var
-            %88:i32 = load %x_101
-            %89:i32 = mod %88, 32i
-            %90:bool = eq %89, 0i
-            if %90 [t: %b18, f: %b19] {  # if_7
-              %b18 = block {  # true
-                %91:f32 = load %x_98
-                %92:f32 = add %91, 0.40000000596046447754f
-                store %x_111, %92
-                %93:f32 = load %x_111
-                store %x_99, %93
+            %97:i32 = load %x_101
+            %98:i32 = call %tint_mod_i32, %97, 32i
+            %99:bool = eq %98, 0i
+            if %99 [t: $B18, f: $B19] {  # if_7
+              $B18: {  # true
+                %100:f32 = load %x_98
+                %101:f32 = add %100, 0.40000000596046447754f
+                store %x_111, %101
+                %102:f32 = load %x_111
+                store %x_99, %102
                 exit_if  # if_7
               }
-              %b19 = block {  # false
-                %94:f32 = load %x_98
-                store %x_119, %94
-                %95:i32 = load %x_101
-                %96:f32 = convert %95
-                %97:f32 = round %x_50
-                %98:i32 = load %x_101
-                %99:f32 = convert %98
-                %100:f32 = round %x_50
-                %101:f32 = div %99, %100
-                %102:f32 = floor %101
-                %103:f32 = mul %97, %102
-                %104:f32 = sub %96, %103
-                %105:bool = lte %104, 0.00999999977648258209f
-                if %105 [t: %b20] {  # if_8
-                  %b20 = block {  # true
-                    %106:f32 = load %x_98
-                    %107:f32 = add %106, 100.0f
-                    store %x_118, %107
-                    %108:f32 = load %x_118
-                    store %x_119, %108
+              $B19: {  # false
+                %103:f32 = load %x_98
+                store %x_119, %103
+                %104:i32 = load %x_101
+                %105:f32 = convert %104
+                %106:f32 = let %105
+                %107:f32 = round %x_50
+                %108:f32 = let %107
+                %109:i32 = load %x_101
+                %110:f32 = convert %109
+                %111:f32 = let %110
+                %112:f32 = round %x_50
+                %113:f32 = div %111, %112
+                %114:f32 = floor %113
+                %115:f32 = mul %108, %114
+                %116:f32 = sub %106, %115
+                %117:bool = lte %116, 0.00999999977648258209f
+                if %117 [t: $B20] {  # if_8
+                  $B20: {  # true
+                    %118:f32 = load %x_98
+                    %119:f32 = add %118, 100.0f
+                    store %x_118, %119
+                    %120:f32 = load %x_118
+                    store %x_119, %120
                     exit_if  # if_8
                   }
                 }
-                %109:f32 = load %x_119
-                store %x_99, %109
+                %121:f32 = load %x_119
+                store %x_99, %121
                 exit_if  # if_7
               }
             }
-            %110:i32 = load %x_101
-            %111:f32 = convert %110
-            %112:f32 = load %x_92
-            %113:bool = gte %111, %112
-            if %113 [t: %b21] {  # if_9
-              %b21 = block {  # true
-                %114:f32 = load %x_99
-                store %x_124, %114
-                %115:f32 = load %x_99
-                store %x_125, %115
+            %122:i32 = load %x_101
+            %123:f32 = convert %122
+            %124:f32 = load %x_92
+            %125:bool = gte %123, %124
+            if %125 [t: $B21] {  # if_9
+              $B21: {  # true
+                %126:f32 = load %x_99
+                store %x_124, %126
+                %127:f32 = load %x_99
+                store %x_125, %127
                 store %x_126, true
                 exit_loop  # loop_2
               }
             }
-            continue %b15
+            continue  # -> $B15
           }
-          %b15 = block {  # continuing
-            %116:i32 = load %x_101
-            %117:i32 = add %116, 1i
-            store %x_102, %117
-            %118:f32 = load %x_99
-            store %x_98, %118
-            %119:i32 = load %x_102
-            store %x_101, %119
-            next_iteration %b14
+          $B15: {  # continuing
+            %128:i32 = load %x_101
+            %129:i32 = add %128, 1i
+            store %x_102, %129
+            %130:f32 = load %x_99
+            store %x_98, %130
+            %131:i32 = load %x_102
+            store %x_101, %131
+            next_iteration  # -> $B14
           }
         }
-        %120:f32 = load %x_124
-        store %x_128, %120
-        %121:bool = load %x_126
-        if %121 [t: %b22] {  # if_10
-          %b22 = block {  # true
+        %132:f32 = load %x_124
+        store %x_128, %132
+        %133:bool = load %x_126
+        if %133 [t: $B22] {  # if_10
+          $B22: {  # true
             exit_switch  # switch_2
           }
         }
-        %122:f32 = load %x_125
-        store %x_128, %122
+        %134:f32 = load %x_125
+        store %x_128, %134
         exit_switch  # switch_2
       }
     }
-    %123:f32 = load %x_128
-    store_vector_element %c, 1u, %123
-    %124:f32 = load_vector_element %c, 0u
-    %125:f32 = load_vector_element %c, 1u
-    %126:f32 = add %124, %125
-    store_vector_element %c, 2u, %126
+    %135:f32 = load %x_128
+    store_vector_element %c, 1u, %135
+    %136:f32 = load_vector_element %c, 0u
+    %137:f32 = load_vector_element %c, 1u
+    %138:f32 = add %136, %137
+    store_vector_element %c, 2u, %138
     store %x_135, 0i
-    loop [b: %b23, c: %b24] {  # loop_3
-      %b23 = block {  # body
+    loop [b: $B23, c: $B24] {  # loop_3
+      $B23: {  # body
         %x_136:ptr<function, i32, read_write> = var
-        %128:i32 = load %x_135
-        %129:bool = lt %128, 3i
-        if %129 [t: %b25, f: %b26] {  # if_11
-          %b25 = block {  # true
+        %140:i32 = load %x_135
+        %141:bool = lt %140, 3i
+        if %141 [t: $B25, f: $B26] {  # if_11
+          $B25: {  # true
             exit_if  # if_11
           }
-          %b26 = block {  # false
+          $B26: {  # false
             exit_loop  # loop_3
           }
         }
-        %130:i32 = load %x_135
-        %131:f32 = load_vector_element %c, %130
-        %132:bool = gte %131, 1.0f
-        if %132 [t: %b27] {  # if_12
-          %b27 = block {  # true
-            %133:i32 = load %x_135
-            %134:i32 = load %x_135
-            %135:f32 = load_vector_element %c, %134
-            %136:i32 = load %x_135
-            %137:f32 = load_vector_element %c, %136
-            %138:f32 = mul %135, %137
-            store_vector_element %c, %133, %138
+        %142:i32 = load %x_135
+        %143:f32 = load_vector_element %c, %142
+        %144:bool = gte %143, 1.0f
+        if %144 [t: $B27] {  # if_12
+          $B27: {  # true
+            %145:i32 = load %x_135
+            %146:i32 = load %x_135
+            %147:f32 = load_vector_element %c, %146
+            %148:i32 = load %x_135
+            %149:f32 = load_vector_element %c, %148
+            %150:f32 = mul %147, %149
+            store_vector_element %c, %145, %150
             exit_if  # if_12
           }
         }
-        continue %b24
+        continue  # -> $B24
       }
-      %b24 = block {  # continuing
-        %139:i32 = load %x_135
-        %140:i32 = add %139, 1i
-        store %x_136, %140
-        %141:i32 = load %x_136
-        store %x_135, %141
-        next_iteration %b23
+      $B24: {  # continuing
+        %151:i32 = load %x_135
+        %152:i32 = add %151, 1i
+        store %x_136, %152
+        %153:i32 = load %x_136
+        store %x_135, %153
+        next_iteration  # -> $B23
       }
     }
-    %142:vec3<f32> = load %c
-    %143:vec3<f32> = abs %142
-    %x_151:vec3<f32> = normalize %143
-    %145:f32 = access %x_151, 0u
-    %146:f32 = access %x_151, 1u
-    %147:f32 = access %x_151, 2u
-    %148:vec4<f32> = construct %145, %146, %147, 1.0f
-    store %x_GLF_color, %148
+    %154:vec3<f32> = load %c
+    %155:vec3<f32> = abs %154
+    %156:vec3<f32> = normalize %155
+    %x_151:vec3<f32> = let %156
+    %158:f32 = access %x_151, 0u
+    %159:f32 = access %x_151, 1u
+    %160:f32 = access %x_151, 2u
+    %161:vec4<f32> = construct %158, %159, %160, 1.0f
+    store %x_GLF_color, %161
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b28 {
-  %b28 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B28: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %151:void = call %main_1
-    %152:vec4<f32> = load %x_GLF_color
-    %153:main_out = construct %152
-    ret %153
+    %164:void = call %main_1
+    %165:vec4<f32> = load %x_GLF_color
+    %166:main_out = construct %165
+    ret %166
+  }
+}
+%tint_mod_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B29: {
+    %169:bool = eq %rhs, 0i
+    %170:bool = eq %lhs, -2147483648i
+    %171:bool = eq %rhs, -1i
+    %172:bool = and %170, %171
+    %173:bool = or %169, %172
+    %174:i32 = select %rhs, 1i, %173
+    %175:i32 = let %174
+    %176:i32 = div %lhs, %175
+    %177:i32 = mul %176, %175
+    %178:i32 = sub %lhs, %177
+    ret %178
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-composite-phi/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-composite-phi/1.wgsl.expected.ir.msl
index 4446ee9..8d28638 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-composite-phi/1.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-composite-phi/1.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,14 +8,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %c:ptr<function, vec3<f32>, read_write> = var
     %x_53:ptr<function, f32, read_write> = var
     %x_57:ptr<function, f32, read_write> = var
@@ -34,122 +34,130 @@
     %x_135_phi:ptr<function, i32, read_write> = var
     store %c, vec3<f32>(7.0f, 8.0f, 9.0f)
     %21:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-    %x_47:f32 = load_vector_element %21, 0u
-    %x_48:vec2<f32> = construct 1.0f, %x_47
-    %24:f32 = mul %x_47, 0.125f
-    %x_50:f32 = round %24
+    %22:f32 = load_vector_element %21, 0u
+    %x_47:f32 = let %22
+    %24:vec2<f32> = construct 1.0f, %x_47
+    %x_48:vec2<f32> = let %24
+    %26:f32 = mul %x_47, 0.125f
+    %27:f32 = round %26
+    %x_50:f32 = let %27
     %x_51:vec2<f32> = let vec2<f32>(0.0f, -0.5f)
-    %27:f32 = load_vector_element %gl_FragCoord, 0u
-    store %x_53, %27
-    switch 0u [c: (default, %b3)] {  # switch_1
-      %b3 = block {  # case
+    %30:f32 = load_vector_element %gl_FragCoord, 0u
+    store %x_53, %30
+    switch 0u [c: (default, $B3)] {  # switch_1
+      $B3: {  # case
         store %x_57_phi, -0.5f
         store %x_60_phi, 1i
-        loop [b: %b4, c: %b5] {  # loop_1
-          %b4 = block {  # body
+        loop [b: $B4, c: $B5] {  # loop_1
+          $B4: {  # body
             %x_70:ptr<function, f32, read_write> = var
             %x_78:ptr<function, f32, read_write> = var
             %x_61:ptr<function, i32, read_write> = var
             %x_58_phi:ptr<function, f32, read_write> = var
-            %32:f32 = load %x_57_phi
-            store %x_57, %32
-            %x_60:i32 = load %x_60_phi
+            %35:f32 = load %x_57_phi
+            store %x_57, %35
+            %36:i32 = load %x_60_phi
+            %x_60:i32 = let %36
             store %x_83_phi, 0.0f
-            %34:f32 = load %x_57
-            store %x_84_phi, %34
+            %38:f32 = load %x_57
+            store %x_84_phi, %38
             store %x_85_phi, false
-            %35:bool = lt %x_60, 800i
-            if %35 [t: %b6, f: %b7] {  # if_1
-              %b6 = block {  # true
+            %39:bool = lt %x_60, 800i
+            if %39 [t: $B6, f: $B7] {  # if_1
+              $B6: {  # true
                 exit_if  # if_1
               }
-              %b7 = block {  # false
+              $B7: {  # false
                 exit_loop  # loop_1
               }
             }
             %x_77:ptr<function, f32, read_write> = var
             %x_78_phi:ptr<function, f32, read_write> = var
-            %38:i32 = mod %x_60, 32i
-            %39:bool = eq %38, 0i
-            if %39 [t: %b8, f: %b9] {  # if_2
-              %b8 = block {  # true
-                %40:f32 = load %x_57
-                %41:f32 = add %40, 0.40000000596046447754f
-                store %x_70, %41
-                %42:f32 = load %x_70
-                store %x_58_phi, %42
+            %42:i32 = call %tint_mod_i32, %x_60, 32i
+            %44:bool = eq %42, 0i
+            if %44 [t: $B8, f: $B9] {  # if_2
+              $B8: {  # true
+                %45:f32 = load %x_57
+                %46:f32 = add %45, 0.40000000596046447754f
+                store %x_70, %46
+                %47:f32 = load %x_70
+                store %x_58_phi, %47
                 exit_if  # if_2
               }
-              %b9 = block {  # false
-                %43:f32 = load %x_57
-                store %x_78_phi, %43
-                %44:f32 = convert %x_60
-                %45:f32 = round %x_50
-                %46:f32 = convert %x_60
-                %47:f32 = round %x_50
-                %48:f32 = div %46, %47
-                %49:f32 = floor %48
-                %50:f32 = mul %45, %49
-                %51:f32 = sub %44, %50
-                %52:bool = lte %51, 0.00999999977648258209f
-                if %52 [t: %b10] {  # if_3
-                  %b10 = block {  # true
-                    %53:f32 = load %x_57
-                    %54:f32 = add %53, 100.0f
-                    store %x_77, %54
-                    %55:f32 = load %x_77
-                    store %x_78_phi, %55
+              $B9: {  # false
+                %48:f32 = load %x_57
+                store %x_78_phi, %48
+                %49:f32 = convert %x_60
+                %50:f32 = let %49
+                %51:f32 = round %x_50
+                %52:f32 = let %51
+                %53:f32 = convert %x_60
+                %54:f32 = let %53
+                %55:f32 = round %x_50
+                %56:f32 = div %54, %55
+                %57:f32 = floor %56
+                %58:f32 = mul %52, %57
+                %59:f32 = sub %50, %58
+                %60:bool = lte %59, 0.00999999977648258209f
+                if %60 [t: $B10] {  # if_3
+                  $B10: {  # true
+                    %61:f32 = load %x_57
+                    %62:f32 = add %61, 100.0f
+                    store %x_77, %62
+                    %63:f32 = load %x_77
+                    store %x_78_phi, %63
                     exit_if  # if_3
                   }
                 }
-                %56:f32 = load %x_78_phi
-                store %x_78, %56
-                %57:f32 = load %x_78
-                store %x_58_phi, %57
+                %64:f32 = load %x_78_phi
+                store %x_78, %64
+                %65:f32 = load %x_78
+                store %x_58_phi, %65
                 exit_if  # if_2
               }
             }
-            %58:f32 = load %x_58_phi
-            store %x_58, %58
-            %59:f32 = convert %x_60
-            %60:f32 = load %x_53
-            %61:bool = gte %59, %60
-            if %61 [t: %b11] {  # if_4
-              %b11 = block {  # true
-                %62:f32 = load %x_58
-                store %x_83_phi, %62
-                %63:f32 = load %x_58
-                store %x_84_phi, %63
+            %66:f32 = load %x_58_phi
+            store %x_58, %66
+            %67:f32 = convert %x_60
+            %68:f32 = load %x_53
+            %69:bool = gte %67, %68
+            if %69 [t: $B11] {  # if_4
+              $B11: {  # true
+                %70:f32 = load %x_58
+                store %x_83_phi, %70
+                %71:f32 = load %x_58
+                store %x_84_phi, %71
                 store %x_85_phi, true
                 exit_loop  # loop_1
               }
             }
-            continue %b5
+            continue  # -> $B5
           }
-          %b5 = block {  # continuing
-            %64:i32 = add %x_60, 1i
-            store %x_61, %64
-            %65:f32 = load %x_58
-            store %x_57_phi, %65
-            %66:i32 = load %x_61
-            store %x_60_phi, %66
-            next_iteration %b4
+          $B5: {  # continuing
+            %72:i32 = add %x_60, 1i
+            store %x_61, %72
+            %73:f32 = load %x_58
+            store %x_57_phi, %73
+            %74:i32 = load %x_61
+            store %x_60_phi, %74
+            next_iteration  # -> $B4
           }
         }
-        %67:f32 = load %x_83_phi
-        store %x_83, %67
-        %68:f32 = load %x_84_phi
-        store %x_84, %68
-        %x_85:bool = load %x_85_phi
-        %70:f32 = load %x_83
-        store %x_87_phi, %70
-        if %x_85 [t: %b12] {  # if_5
-          %b12 = block {  # true
+        %75:f32 = load %x_83_phi
+        store %x_83, %75
+        %76:f32 = load %x_84_phi
+        store %x_84, %76
+        %77:bool = load %x_85_phi
+        %x_85:bool = let %77
+        %79:f32 = load %x_83
+        store %x_87_phi, %79
+        if %x_85 [t: $B12] {  # if_5
+          $B12: {  # true
             exit_switch  # switch_1
           }
         }
-        %71:f32 = load %x_84
-        store %x_87_phi, %71
+        %80:f32 = load %x_84
+        store %x_87_phi, %80
         exit_switch  # switch_1
       }
     }
@@ -161,188 +169,221 @@
     %x_124_phi:ptr<function, f32, read_write> = var
     %x_125_phi:ptr<function, f32, read_write> = var
     %x_126_phi:ptr<function, bool, read_write> = var
-    %x_87:f32 = load %x_87_phi
-    %81:f32 = load %x_84
-    %82:f32 = load %x_83
-    %x_89:vec4<f32> = construct %81, 0.40000000596046447754f, %82, 0.40000000596046447754f
+    %89:f32 = load %x_87_phi
+    %x_87:f32 = let %89
+    %91:f32 = load %x_84
+    %92:f32 = load %x_83
+    %93:vec4<f32> = construct %91, 0.40000000596046447754f, %92, 0.40000000596046447754f
+    %x_89:vec4<f32> = let %93
     store_vector_element %c, 0u, %x_87
-    %84:f32 = load_vector_element %gl_FragCoord, 1u
-    store %x_92, %84
-    switch 0u [c: (default, %b13)] {  # switch_2
-      %b13 = block {  # case
-        %85:f32 = load %x_57
-        %x_95:vec4<f32> = construct %x_51, 0.0f, %85
-        %87:vec3<f32> = construct %x_48, -0.5f
-        %x_96:f32 = access %87, 2u
+    %95:f32 = load_vector_element %gl_FragCoord, 1u
+    store %x_92, %95
+    switch 0u [c: (default, $B13)] {  # switch_2
+      $B13: {  # case
+        %96:f32 = load %x_57
+        %97:vec4<f32> = construct %x_51, 0.0f, %96
+        %x_95:vec4<f32> = let %97
+        %99:vec3<f32> = construct %x_48, -0.5f
+        %100:f32 = access %99, 2u
+        %x_96:f32 = let %100
         store %x_98_phi, %x_96
         store %x_101_phi, 1i
-        loop [b: %b14, c: %b15] {  # loop_2
-          %b14 = block {  # body
+        loop [b: $B14, c: $B15] {  # loop_2
+          $B14: {  # body
             %x_111:ptr<function, f32, read_write> = var
             %x_119:ptr<function, f32, read_write> = var
             %x_102:ptr<function, i32, read_write> = var
             %x_99_phi:ptr<function, f32, read_write> = var
-            %93:f32 = load %x_98_phi
-            store %x_98, %93
-            %x_101:i32 = load %x_101_phi
+            %106:f32 = load %x_98_phi
+            store %x_98, %106
+            %107:i32 = load %x_101_phi
+            %x_101:i32 = let %107
             store %x_124_phi, 0.0f
-            %95:f32 = load %x_98
-            store %x_125_phi, %95
+            %109:f32 = load %x_98
+            store %x_125_phi, %109
             store %x_126_phi, false
-            %96:bool = lt %x_101, 800i
-            if %96 [t: %b16, f: %b17] {  # if_6
-              %b16 = block {  # true
+            %110:bool = lt %x_101, 800i
+            if %110 [t: $B16, f: $B17] {  # if_6
+              $B16: {  # true
                 exit_if  # if_6
               }
-              %b17 = block {  # false
+              $B17: {  # false
                 exit_loop  # loop_2
               }
             }
             %x_118:ptr<function, f32, read_write> = var
             %x_119_phi:ptr<function, f32, read_write> = var
-            %99:i32 = mod %x_101, 32i
-            %100:bool = eq %99, 0i
-            if %100 [t: %b18, f: %b19] {  # if_7
-              %b18 = block {  # true
-                %101:f32 = load %x_98
-                %102:f32 = add %101, 0.40000000596046447754f
-                store %x_111, %102
-                %103:f32 = load %x_111
-                store %x_99_phi, %103
+            %113:i32 = call %tint_mod_i32, %x_101, 32i
+            %114:bool = eq %113, 0i
+            if %114 [t: $B18, f: $B19] {  # if_7
+              $B18: {  # true
+                %115:f32 = load %x_98
+                %116:f32 = add %115, 0.40000000596046447754f
+                store %x_111, %116
+                %117:f32 = load %x_111
+                store %x_99_phi, %117
                 exit_if  # if_7
               }
-              %b19 = block {  # false
-                %104:f32 = load %x_98
-                store %x_119_phi, %104
-                %105:f32 = convert %x_101
-                %106:f32 = round %x_50
-                %107:f32 = convert %x_101
-                %108:f32 = round %x_50
-                %109:f32 = div %107, %108
-                %110:f32 = floor %109
-                %111:f32 = mul %106, %110
-                %112:f32 = sub %105, %111
-                %113:bool = lte %112, 0.00999999977648258209f
-                if %113 [t: %b20] {  # if_8
-                  %b20 = block {  # true
-                    %114:f32 = load %x_98
-                    %115:f32 = add %114, 100.0f
-                    store %x_118, %115
-                    %116:f32 = load %x_118
-                    store %x_119_phi, %116
+              $B19: {  # false
+                %118:f32 = load %x_98
+                store %x_119_phi, %118
+                %119:f32 = convert %x_101
+                %120:f32 = let %119
+                %121:f32 = round %x_50
+                %122:f32 = let %121
+                %123:f32 = convert %x_101
+                %124:f32 = let %123
+                %125:f32 = round %x_50
+                %126:f32 = div %124, %125
+                %127:f32 = floor %126
+                %128:f32 = mul %122, %127
+                %129:f32 = sub %120, %128
+                %130:bool = lte %129, 0.00999999977648258209f
+                if %130 [t: $B20] {  # if_8
+                  $B20: {  # true
+                    %131:f32 = load %x_98
+                    %132:f32 = add %131, 100.0f
+                    store %x_118, %132
+                    %133:f32 = load %x_118
+                    store %x_119_phi, %133
                     exit_if  # if_8
                   }
                 }
-                %117:f32 = load %x_119_phi
-                store %x_119, %117
-                %118:f32 = load %x_119
-                store %x_99_phi, %118
+                %134:f32 = load %x_119_phi
+                store %x_119, %134
+                %135:f32 = load %x_119
+                store %x_99_phi, %135
                 exit_if  # if_7
               }
             }
-            %119:f32 = load %x_99_phi
-            store %x_99, %119
-            %120:f32 = convert %x_101
-            %121:f32 = load %x_92
-            %122:bool = gte %120, %121
-            if %122 [t: %b21] {  # if_9
-              %b21 = block {  # true
-                %123:f32 = load %x_99
-                store %x_124_phi, %123
-                %124:f32 = load %x_99
-                store %x_125_phi, %124
+            %136:f32 = load %x_99_phi
+            store %x_99, %136
+            %137:f32 = convert %x_101
+            %138:f32 = load %x_92
+            %139:bool = gte %137, %138
+            if %139 [t: $B21] {  # if_9
+              $B21: {  # true
+                %140:f32 = load %x_99
+                store %x_124_phi, %140
+                %141:f32 = load %x_99
+                store %x_125_phi, %141
                 store %x_126_phi, true
                 exit_loop  # loop_2
               }
             }
-            continue %b15
+            continue  # -> $B15
           }
-          %b15 = block {  # continuing
-            %125:i32 = add %x_101, 1i
-            store %x_102, %125
-            %126:f32 = load %x_99
-            store %x_98_phi, %126
-            %127:i32 = load %x_102
-            store %x_101_phi, %127
-            next_iteration %b14
+          $B15: {  # continuing
+            %142:i32 = add %x_101, 1i
+            store %x_102, %142
+            %143:f32 = load %x_99
+            store %x_98_phi, %143
+            %144:i32 = load %x_102
+            store %x_101_phi, %144
+            next_iteration  # -> $B14
           }
         }
-        %128:f32 = load %x_124_phi
-        store %x_124, %128
-        %129:f32 = load %x_125_phi
-        store %x_125, %129
-        %x_126:bool = load %x_126_phi
-        %131:f32 = load %x_124
-        store %x_128_phi, %131
-        if %x_126 [t: %b22] {  # if_10
-          %b22 = block {  # true
+        %145:f32 = load %x_124_phi
+        store %x_124, %145
+        %146:f32 = load %x_125_phi
+        store %x_125, %146
+        %147:bool = load %x_126_phi
+        %x_126:bool = let %147
+        %149:f32 = load %x_124
+        store %x_128_phi, %149
+        if %x_126 [t: $B22] {  # if_10
+          $B22: {  # true
             exit_switch  # switch_2
           }
         }
-        %132:f32 = load %x_125
-        store %x_128_phi, %132
+        %150:f32 = load %x_125
+        store %x_128_phi, %150
         exit_switch  # switch_2
       }
     }
-    %x_128:f32 = load %x_128_phi
+    %151:f32 = load %x_128_phi
+    %x_128:f32 = let %151
     store_vector_element %c, 1u, %x_128
-    %x_130:f32 = load_vector_element %c, 0u
-    %x_131:f32 = load_vector_element %c, 1u
-    %136:f32 = add %x_130, %x_131
-    store_vector_element %c, 2u, %136
+    %153:f32 = load_vector_element %c, 0u
+    %x_130:f32 = let %153
+    %155:f32 = load_vector_element %c, 1u
+    %x_131:f32 = let %155
+    %157:f32 = add %x_130, %x_131
+    store_vector_element %c, 2u, %157
     store %x_135_phi, 0i
-    loop [b: %b23, c: %b24] {  # loop_3
-      %b23 = block {  # body
+    loop [b: $B23, c: $B24] {  # loop_3
+      $B23: {  # body
         %x_136:ptr<function, i32, read_write> = var
-        %x_135:i32 = load %x_135_phi
-        %139:bool = lt %x_135, 3i
-        if %139 [t: %b25, f: %b26] {  # if_11
-          %b25 = block {  # true
+        %159:i32 = load %x_135_phi
+        %x_135:i32 = let %159
+        %161:bool = lt %x_135, 3i
+        if %161 [t: $B25, f: $B26] {  # if_11
+          $B25: {  # true
             exit_if  # if_11
           }
-          %b26 = block {  # false
+          $B26: {  # false
             exit_loop  # loop_3
           }
         }
-        %x_142:f32 = load_vector_element %c, %x_135
-        %141:bool = gte %x_142, 1.0f
-        if %141 [t: %b27] {  # if_12
-          %b27 = block {  # true
-            %x_146:f32 = load_vector_element %c, %x_135
-            %x_147:f32 = load_vector_element %c, %x_135
-            %144:f32 = mul %x_146, %x_147
-            store_vector_element %c, %x_135, %144
+        %162:f32 = load_vector_element %c, %x_135
+        %x_142:f32 = let %162
+        %164:bool = gte %x_142, 1.0f
+        if %164 [t: $B27] {  # if_12
+          $B27: {  # true
+            %165:f32 = load_vector_element %c, %x_135
+            %x_146:f32 = let %165
+            %167:f32 = load_vector_element %c, %x_135
+            %x_147:f32 = let %167
+            %169:f32 = mul %x_146, %x_147
+            store_vector_element %c, %x_135, %169
             exit_if  # if_12
           }
         }
-        continue %b24
+        continue  # -> $B24
       }
-      %b24 = block {  # continuing
-        %145:i32 = add %x_135, 1i
-        store %x_136, %145
-        %146:i32 = load %x_136
-        store %x_135_phi, %146
-        next_iteration %b23
+      $B24: {  # continuing
+        %170:i32 = add %x_135, 1i
+        store %x_136, %170
+        %171:i32 = load %x_136
+        store %x_135_phi, %171
+        next_iteration  # -> $B23
       }
     }
-    %x_149:vec3<f32> = load %c
-    %148:vec3<f32> = abs %x_149
-    %x_151:vec3<f32> = normalize %148
-    %150:f32 = access %x_151, 0u
-    %151:f32 = access %x_151, 1u
-    %152:f32 = access %x_151, 2u
-    %153:vec4<f32> = construct %150, %151, %152, 1.0f
-    store %x_GLF_color, %153
+    %172:vec3<f32> = load %c
+    %x_149:vec3<f32> = let %172
+    %174:vec3<f32> = abs %x_149
+    %175:vec3<f32> = normalize %174
+    %x_151:vec3<f32> = let %175
+    %177:f32 = access %x_151, 0u
+    %178:f32 = access %x_151, 1u
+    %179:f32 = access %x_151, 2u
+    %180:vec4<f32> = construct %177, %178, %179, 1.0f
+    store %x_GLF_color, %180
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b28 {
-  %b28 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B28: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %156:void = call %main_1
-    %157:vec4<f32> = load %x_GLF_color
-    %158:main_out = construct %157
-    ret %158
+    %183:void = call %main_1
+    %184:vec4<f32> = load %x_GLF_color
+    %185:main_out = construct %184
+    ret %185
+  }
+}
+%tint_mod_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B29: {
+    %188:bool = eq %rhs, 0i
+    %189:bool = eq %lhs, -2147483648i
+    %190:bool = eq %rhs, -1i
+    %191:bool = and %189, %190
+    %192:bool = or %188, %191
+    %193:i32 = select %rhs, 1i, %192
+    %194:i32 = let %193
+    %195:i32 = div %lhs, %194
+    %196:i32 = mul %195, %194
+    %197:i32 = sub %lhs, %196
+    ret %197
   }
 }
 
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
index 04b32e3..0a9d5ab 100644
--- 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
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,14 +8,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%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
@@ -23,67 +23,107 @@
     %9:vec2<f32> = swizzle %8, xy
     %10:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
     %11:vec2<f32> = load %10
-    %x_56:vec2<f32> = div %9, %11
-    %13:f32 = access %x_56, 0u
-    %14:f32 = mul %13, 10.0f
-    %15:i32 = convert %14
-    %16:f32 = access %x_56, 1u
-    %17:f32 = mul %16, 10.0f
-    %18:i32 = convert %17
-    %19:i32 = mul %18, 10i
-    %x_64:i32 = add %15, %19
+    %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 = block {  # body
+    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
-        %23:i32 = load %x_69
-        %24:bool = lt %23, %x_64
-        if %24 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %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 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %25:i32 = load %x_66
-        %26:i32 = mul 4i, %25
-        %27:i32 = load %x_66
-        %28:i32 = sub 1000i, %27
-        %29:i32 = mul %26, %28
-        %30:i32 = div %29, 1000i
-        store %x_67, %30
-        %31:i32 = load %x_69
-        %32:i32 = add %31, 1i
-        store %x_70, %32
-        %33:i32 = load %x_67
-        store %x_66, %33
-        %34:i32 = load %x_70
-        store %x_69, %34
-        next_iteration %b3
+      $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))
-    %35:i32 = load %x_66
-    %36:i32 = mod %35, 16i
-    %37:ptr<function, vec4<f32>, read_write> = access %indexable, %36
-    %38:vec4<f32> = load %37
-    store %x_GLF_color, %38
+    %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 {
-  %b7 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B7: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %41:void = call %main_1
-    %42:vec4<f32> = load %x_GLF_color
-    %43:main_out = construct %42
-    ret %43
+    %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
   }
 }
 
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
index 09d9f86..761f161 100644
--- 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
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,89 +8,134 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%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
-    %x_52:vec4<f32> = load %gl_FragCoord
-    %10:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %x_55:vec2<f32> = load %10
-    %12:f32 = access %x_52, 0u
-    %13:f32 = access %x_52, 1u
-    %14:vec2<f32> = construct %12, %13
-    %x_56:vec2<f32> = div %14, %x_55
-    %16:f32 = access %x_56, 0u
-    %17:f32 = mul %16, 10.0f
-    %18:i32 = convert %17
-    %19:f32 = access %x_56, 1u
+    %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 = convert %20
-    %22:i32 = mul %21, 10i
-    %x_64:i32 = add %18, %22
+    %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 = block {  # body
+    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
-        %26:i32 = load %x_66_phi
-        store %x_66, %26
-        %x_69:i32 = load %x_69_phi
-        %28:bool = lt %x_69, %x_64
-        if %28 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %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 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %29:i32 = load %x_66
-        %30:i32 = bitcast %29
-        %31:i32 = mul 4i, %30
-        %32:i32 = load %x_66
-        %33:i32 = bitcast %32
-        %34:i32 = sub 1000i, %33
-        %35:i32 = mul %31, %34
-        %36:i32 = div %35, 1000i
-        store %x_67, %36
-        %37:i32 = add %x_69, 1i
-        store %x_70, %37
-        %38:i32 = load %x_67
-        store %x_66_phi, %38
-        %39:i32 = load %x_70
-        store %x_69_phi, %39
-        next_iteration %b3
+      $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))
-    %40:i32 = load %x_66
-    %41:i32 = mod %40, 16i
-    %42:i32 = bitcast %41
-    %43:ptr<function, vec4<f32>, read_write> = access %indexable, %42
-    %x_78:vec4<f32> = load %43
+    %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 {
-  %b7 = block {
+%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
+    %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
   }
 }
 
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
index da8daf5..318ce84 100644
--- 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
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,86 +8,127 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%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
-    %x_55:vec2<f32> = swizzle %8, xy
-    %10:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %11:vec2<f32> = load %10
-    %x_59:vec2<f32> = div %x_55, %11
-    %13:f32 = access %x_59, 0u
-    %14:vec4<f32> = construct 0.0f, %x_55, 0.5f
-    %15:f32 = access %14, 3u
-    %16:vec4<f32> = construct %15, 10.0f, vec2<f32>(0.0f)
-    %17:f32 = access %16, 1u
-    %18:f32 = mul %13, %17
-    %19:i32 = convert %18
-    %20:f32 = access %x_59, 1u
-    %21:f32 = mul %20, 10.0f
-    %22:i32 = convert %21
-    %23:i32 = mul %22, 10i
-    %x_70:i32 = add %19, %23
+    %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 = block {  # body
+    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
-        %27:i32 = load %x_75
-        %28:bool = lt %27, %x_70
-        if %28 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %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 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %29:i32 = load %x_72
-        %30:i32 = mul 4i, %29
-        %31:i32 = load %x_72
-        %32:i32 = sub 1000i, %31
-        %33:i32 = mul %30, %32
-        %34:i32 = div %33, 1000i
-        store %x_73, %34
-        %35:i32 = load %x_75
-        %36:i32 = add %35, 1i
-        store %x_76, %36
-        %37:i32 = load %x_73
-        store %x_72, %37
-        %38:i32 = load %x_76
-        store %x_75, %38
-        next_iteration %b3
+      $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))
-    %39:i32 = load %x_72
-    %40:i32 = mod %39, 16i
-    %41:ptr<function, vec4<f32>, read_write> = access %indexable, %40
-    %42:vec4<f32> = load %41
-    store %x_GLF_color, %42
+    %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 {
-  %b7 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B7: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %45:void = call %main_1
-    %46:vec4<f32> = load %x_GLF_color
-    %47:main_out = construct %46
-    ret %47
+    %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
   }
 }
 
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
index b0c0660..f211f6c 100644
--- 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
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,93 +8,139 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%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
-    %x_54:vec4<f32> = load %gl_FragCoord
-    %10:f32 = access %x_54, 0u
-    %11:f32 = access %x_54, 1u
-    %x_55:vec2<f32> = construct %10, %11
-    %13:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %x_58:vec2<f32> = load %13
-    %x_59:vec2<f32> = div %x_55, %x_58
-    %16:f32 = access %x_59, 0u
-    %17:vec4<f32> = construct 0.0f, %x_55, 0.5f
-    %18:f32 = access %17, 3u
-    %19:vec4<f32> = construct %18, 10.0f, vec2<f32>(0.0f)
-    %20:f32 = access %19, 1u
-    %21:f32 = mul %16, %20
-    %22:i32 = convert %21
-    %23:f32 = access %x_59, 1u
-    %24:f32 = mul %23, 10.0f
-    %25:i32 = convert %24
-    %26:i32 = mul %25, 10i
-    %x_70:i32 = add %22, %26
+    %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 = block {  # body
+    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
-        %30:i32 = load %x_72_phi
-        store %x_72, %30
-        %x_75:i32 = load %x_75_phi
-        %32:bool = lt %x_75, %x_70
-        if %32 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %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 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %33:i32 = load %x_72
-        %34:i32 = bitcast %33
-        %35:i32 = mul 4i, %34
-        %36:i32 = load %x_72
-        %37:i32 = bitcast %36
-        %38:i32 = sub 1000i, %37
-        %39:i32 = mul %35, %38
-        %40:i32 = div %39, 1000i
-        store %x_73, %40
-        %41:i32 = add %x_75, 1i
-        store %x_76, %41
-        %42:i32 = load %x_73
-        store %x_72_phi, %42
-        %43:i32 = load %x_76
-        store %x_75_phi, %43
-        next_iteration %b3
+      $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))
-    %44:i32 = load %x_72
-    %45:i32 = mod %44, 16i
-    %46:i32 = bitcast %45
-    %47:ptr<function, vec4<f32>, read_write> = access %indexable, %46
-    %x_84:vec4<f32> = load %47
+    %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 {
-  %b7 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B7: {
     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
+    %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
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-composites/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-composites/0.spvasm.expected.ir.msl
index 956cf49..4ec86c3 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-composites/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-composites/0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,14 +8,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %x_195:ptr<function, array<i32, 256>, read_write> = var
     %x_196:ptr<function, array<i32, 256>, read_write> = var
     %x_197:ptr<function, array<i32, 256>, read_write> = var
@@ -29,91 +29,98 @@
     %15:vec2<f32> = swizzle %14, xy
     %16:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
     %17:vec2<f32> = load %16
-    %x_202:vec2<f32> = div %15, %17
-    %19:f32 = access %x_202, 0u
-    %20:f32 = mul %19, 256.0f
-    %21:i32 = convert %20
-    %22:f32 = access %x_202, 1u
-    %23:f32 = mul %22, 256.0f
-    %24:i32 = convert %23
-    %25:vec2<i32> = construct %21, %24
-    store %x_209, %25
-    switch 0u [c: (default, %b3)] {  # switch_1
-      %b3 = block {  # case
-        %26:vec2<i32> = load %x_209
-        store %x_213, %26
-        loop [b: %b4, c: %b5] {  # loop_1
-          %b4 = block {  # body
+    %18:vec2<f32> = div %15, %17
+    %x_202:vec2<f32> = let %18
+    %20:f32 = access %x_202, 0u
+    %21:f32 = mul %20, 256.0f
+    %22:i32 = call %tint_f32_to_i32, %21
+    %24:i32 = let %22
+    %25:f32 = access %x_202, 1u
+    %26:f32 = mul %25, 256.0f
+    %27:i32 = call %tint_f32_to_i32, %26
+    %28:vec2<i32> = construct %24, %27
+    store %x_209, %28
+    switch 0u [c: (default, $B3)] {  # switch_1
+      $B3: {  # case
+        %29:vec2<i32> = load %x_209
+        store %x_213, %29
+        loop [b: $B4, c: $B5] {  # loop_1
+          $B4: {  # body
             %x_230:ptr<function, bool, read_write> = var
             %x_231:ptr<function, bool, read_write> = var
-            %x_216:i32 = load_vector_element %x_213, 1u
+            %32:i32 = load_vector_element %x_213, 1u
+            %x_216:i32 = let %32
             store %x_243, vec4<f32>(0.0f)
             store %x_244, false
-            %30:bool = neq %x_216, 256i
-            if %30 [t: %b6, f: %b7] {  # if_1
-              %b6 = block {  # true
+            %34:bool = neq %x_216, 256i
+            if %34 [t: $B6, f: $B7] {  # if_1
+              $B6: {  # true
                 exit_if  # if_1
               }
-              %b7 = block {  # false
+              $B7: {  # false
                 exit_loop  # loop_1
               }
             }
-            %x_220:i32 = load_vector_element %x_213, 0u
+            %35:i32 = load_vector_element %x_213, 0u
+            %x_220:i32 = let %35
             store %x_195, array<i32, 256>(115i, 133i, 150i, 164i, 176i, 184i, 190i, 192i, 191i, 187i, 181i, 172i, 163i, 153i, 143i, 134i, 126i, 120i, 116i, 114i, 114i, 117i, 121i, 127i, 134i, 141i, 148i, 154i, 159i, 162i, 163i, 161i, 157i, 151i, 143i, 134i, 124i, 113i, 103i, 94i, 87i, 82i, 79i, 80i, 84i, 91i, 101i, 114i, 130i, 146i, 164i, 182i, 199i, 215i, 229i, 240i, 249i, 254i, 256i, 254i, 250i, 243i, 233i, 223i, 212i, 200i, 190i, 180i, 172i, 166i, 163i, 161i, 162i, 164i, 169i, 174i, 179i, 185i, 190i, 193i, 195i, 195i, 192i, 188i, 180i, 171i, 161i, 149i, 137i, 125i, 114i, 105i, 97i, 93i, 91i, 93i, 98i, 106i, 117i, 130i, 145i, 161i, 177i, 193i, 208i, 221i, 231i, 239i, 243i, 244i, 242i, 236i, 228i, 218i, 207i, 194i, 181i, 169i, 158i, 148i, 141i, 135i, 132i, 131i, 132i, 135i, 138i, 143i, 147i, 151i, 154i, 155i, 155i, 152i, 146i, 139i, 129i, 118i, 106i, 93i, 80i, 68i, 58i, 49i, 43i, 40i, 41i, 44i, 51i, 61i, 73i, 87i, 103i, 119i, 134i, 149i, 162i, 173i, 181i, 186i, 188i, 186i, 181i, 174i, 164i, 153i, 141i, 128i, 116i, 104i, 94i, 86i, 81i, 77i, 76i, 77i, 80i, 84i, 89i, 94i, 98i, 102i, 104i, 104i, 102i, 98i, 92i, 83i, 73i, 62i, 50i, 38i, 26i, 16i, 8i, 2i, 0i, 0i, 4i, 11i, 21i, 33i, 48i, 64i, 81i, 98i, 114i, 129i, 141i, 151i, 158i, 161i, 161i, 158i, 152i, 144i, 134i, 123i, 112i, 100i, 90i, 81i, 73i, 68i, 65i, 65i, 67i, 70i, 75i, 81i, 87i, 92i, 97i, 101i, 103i, 102i, 100i, 95i, 88i, 79i, 69i, 58i, 47i, 36i, 26i, 18i, 13i, 11i, 11i, 15i, 22i, 32i, 45i, 60i, 77i, 94i)
-            %32:ptr<function, i32, read_write> = access %x_195, %x_216
-            %33:i32 = load %32
-            %34:i32 = add %33, 15i
-            %x_224:bool = lt %x_220, %34
+            %37:ptr<function, i32, read_write> = access %x_195, %x_216
+            %38:i32 = load %37
+            %39:i32 = add %38, 15i
+            %40:bool = lt %x_220, %39
+            %x_224:bool = let %40
             store %x_231, %x_224
-            if %x_224 [t: %b8] {  # if_2
-              %b8 = block {  # true
+            if %x_224 [t: $B8] {  # if_2
+              $B8: {  # true
                 store %x_196, array<i32, 256>(115i, 133i, 150i, 164i, 176i, 184i, 190i, 192i, 191i, 187i, 181i, 172i, 163i, 153i, 143i, 134i, 126i, 120i, 116i, 114i, 114i, 117i, 121i, 127i, 134i, 141i, 148i, 154i, 159i, 162i, 163i, 161i, 157i, 151i, 143i, 134i, 124i, 113i, 103i, 94i, 87i, 82i, 79i, 80i, 84i, 91i, 101i, 114i, 130i, 146i, 164i, 182i, 199i, 215i, 229i, 240i, 249i, 254i, 256i, 254i, 250i, 243i, 233i, 223i, 212i, 200i, 190i, 180i, 172i, 166i, 163i, 161i, 162i, 164i, 169i, 174i, 179i, 185i, 190i, 193i, 195i, 195i, 192i, 188i, 180i, 171i, 161i, 149i, 137i, 125i, 114i, 105i, 97i, 93i, 91i, 93i, 98i, 106i, 117i, 130i, 145i, 161i, 177i, 193i, 208i, 221i, 231i, 239i, 243i, 244i, 242i, 236i, 228i, 218i, 207i, 194i, 181i, 169i, 158i, 148i, 141i, 135i, 132i, 131i, 132i, 135i, 138i, 143i, 147i, 151i, 154i, 155i, 155i, 152i, 146i, 139i, 129i, 118i, 106i, 93i, 80i, 68i, 58i, 49i, 43i, 40i, 41i, 44i, 51i, 61i, 73i, 87i, 103i, 119i, 134i, 149i, 162i, 173i, 181i, 186i, 188i, 186i, 181i, 174i, 164i, 153i, 141i, 128i, 116i, 104i, 94i, 86i, 81i, 77i, 76i, 77i, 80i, 84i, 89i, 94i, 98i, 102i, 104i, 104i, 102i, 98i, 92i, 83i, 73i, 62i, 50i, 38i, 26i, 16i, 8i, 2i, 0i, 0i, 4i, 11i, 21i, 33i, 48i, 64i, 81i, 98i, 114i, 129i, 141i, 151i, 158i, 161i, 161i, 158i, 152i, 144i, 134i, 123i, 112i, 100i, 90i, 81i, 73i, 68i, 65i, 65i, 67i, 70i, 75i, 81i, 87i, 92i, 97i, 101i, 103i, 102i, 100i, 95i, 88i, 79i, 69i, 58i, 47i, 36i, 26i, 18i, 13i, 11i, 11i, 15i, 22i, 32i, 45i, 60i, 77i, 94i)
-                %36:ptr<function, i32, read_write> = access %x_196, %x_216
-                %37:i32 = load %36
-                %38:i32 = sub %37, 15i
-                %39:bool = gt %x_220, %38
-                store %x_230, %39
-                %40:bool = load %x_230
-                store %x_231, %40
+                %42:ptr<function, i32, read_write> = access %x_196, %x_216
+                %43:i32 = load %42
+                %44:i32 = sub %43, 15i
+                %45:bool = gt %x_220, %44
+                store %x_230, %45
+                %46:bool = load %x_230
+                store %x_231, %46
                 exit_if  # if_2
               }
             }
-            %41:bool = load %x_231
-            if %41 [t: %b9] {  # if_3
-              %b9 = block {  # true
+            %47:bool = load %x_231
+            if %47 [t: $B9] {  # if_3
+              $B9: {  # true
                 store %x_197, array<i32, 256>(115i, 133i, 150i, 164i, 176i, 184i, 190i, 192i, 191i, 187i, 181i, 172i, 163i, 153i, 143i, 134i, 126i, 120i, 116i, 114i, 114i, 117i, 121i, 127i, 134i, 141i, 148i, 154i, 159i, 162i, 163i, 161i, 157i, 151i, 143i, 134i, 124i, 113i, 103i, 94i, 87i, 82i, 79i, 80i, 84i, 91i, 101i, 114i, 130i, 146i, 164i, 182i, 199i, 215i, 229i, 240i, 249i, 254i, 256i, 254i, 250i, 243i, 233i, 223i, 212i, 200i, 190i, 180i, 172i, 166i, 163i, 161i, 162i, 164i, 169i, 174i, 179i, 185i, 190i, 193i, 195i, 195i, 192i, 188i, 180i, 171i, 161i, 149i, 137i, 125i, 114i, 105i, 97i, 93i, 91i, 93i, 98i, 106i, 117i, 130i, 145i, 161i, 177i, 193i, 208i, 221i, 231i, 239i, 243i, 244i, 242i, 236i, 228i, 218i, 207i, 194i, 181i, 169i, 158i, 148i, 141i, 135i, 132i, 131i, 132i, 135i, 138i, 143i, 147i, 151i, 154i, 155i, 155i, 152i, 146i, 139i, 129i, 118i, 106i, 93i, 80i, 68i, 58i, 49i, 43i, 40i, 41i, 44i, 51i, 61i, 73i, 87i, 103i, 119i, 134i, 149i, 162i, 173i, 181i, 186i, 188i, 186i, 181i, 174i, 164i, 153i, 141i, 128i, 116i, 104i, 94i, 86i, 81i, 77i, 76i, 77i, 80i, 84i, 89i, 94i, 98i, 102i, 104i, 104i, 102i, 98i, 92i, 83i, 73i, 62i, 50i, 38i, 26i, 16i, 8i, 2i, 0i, 0i, 4i, 11i, 21i, 33i, 48i, 64i, 81i, 98i, 114i, 129i, 141i, 151i, 158i, 161i, 161i, 158i, 152i, 144i, 134i, 123i, 112i, 100i, 90i, 81i, 73i, 68i, 65i, 65i, 67i, 70i, 75i, 81i, 87i, 92i, 97i, 101i, 103i, 102i, 100i, 95i, 88i, 79i, 69i, 58i, 47i, 36i, 26i, 18i, 13i, 11i, 11i, 15i, 22i, 32i, 45i, 60i, 77i, 94i)
-                %42:ptr<function, i32, read_write> = access %x_197, %x_216
-                %43:i32 = load %42
-                %44:i32 = sub %x_220, %43
-                %45:f32 = convert %44
-                %46:f32 = abs %45
-                %47:f32 = sub 15.0f, %46
-                %x_240:f32 = mul %47, 0.06666667014360427856f
-                %49:vec4<f32> = construct %x_240, %x_240, %x_240, 1.0f
-                store %x_241, %49
-                %50:vec4<f32> = load %x_241
-                store %x_243, %50
+                %48:ptr<function, i32, read_write> = access %x_197, %x_216
+                %49:i32 = load %48
+                %50:i32 = sub %x_220, %49
+                %51:f32 = convert %50
+                %52:f32 = abs %51
+                %53:f32 = sub 15.0f, %52
+                %54:f32 = mul %53, 0.06666667014360427856f
+                %x_240:f32 = let %54
+                %56:vec4<f32> = construct %x_240, %x_240, %x_240, 1.0f
+                store %x_241, %56
+                %57:vec4<f32> = load %x_241
+                store %x_243, %57
                 store %x_244, true
                 exit_loop  # loop_1
               }
             }
-            %51:vec2<i32> = load %x_213
-            %x_214_1:ptr<function, vec2<i32>, read_write> = var, %51
-            %53:i32 = add %x_216, 1i
-            store_vector_element %x_214_1, 1u, %53
-            %x_214:vec2<i32> = load %x_214_1
-            continue %b5
+            %58:vec2<i32> = load %x_213
+            %x_214_1:ptr<function, vec2<i32>, read_write> = var, %58
+            %60:i32 = add %x_216, 1i
+            store_vector_element %x_214_1, 1u, %60
+            %61:vec2<i32> = load %x_214_1
+            %x_214:vec2<i32> = let %61
+            continue  # -> $B5
           }
-          %b5 = block {  # continuing
+          $B5: {  # continuing
             store %x_213, %x_214
-            next_iteration %b4
+            next_iteration  # -> $B4
           }
         }
-        %55:vec4<f32> = load %x_243
-        store %x_246, %55
-        %56:bool = load %x_244
-        if %56 [t: %b10] {  # if_4
-          %b10 = block {  # true
+        %63:vec4<f32> = load %x_243
+        store %x_246, %63
+        %64:bool = load %x_244
+        if %64 [t: $B10] {  # if_4
+          $B10: {  # true
             exit_switch  # switch_1
           }
         }
@@ -121,18 +128,28 @@
         exit_switch  # switch_1
       }
     }
-    %57:vec4<f32> = load %x_246
-    store %x_GLF_color, %57
+    %65:vec4<f32> = load %x_246
+    store %x_GLF_color, %65
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b11 {
-  %b11 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B11: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %60:void = call %main_1
-    %61:vec4<f32> = load %x_GLF_color
-    %62:main_out = construct %61
-    ret %62
+    %68:void = call %main_1
+    %69:vec4<f32> = load %x_GLF_color
+    %70:main_out = construct %69
+    ret %70
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B12: {
+    %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
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-composites/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-composites/0.wgsl.expected.ir.msl
index 7b2fcd4..cecd947 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-composites/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-composites/0.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,14 +8,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %x_195:ptr<function, array<i32, 256>, read_write> = var
     %x_196:ptr<function, array<i32, 256>, read_write> = var
     %x_197:ptr<function, array<i32, 256>, read_write> = var
@@ -26,99 +26,114 @@
     %x_243_phi:ptr<function, vec4<f32>, read_write> = var
     %x_244_phi:ptr<function, bool, read_write> = var
     %x_246_phi:ptr<function, vec4<f32>, read_write> = var
-    %x_198:vec4<f32> = load %gl_FragCoord
-    %16:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %x_201:vec2<f32> = load %16
-    %18:f32 = access %x_198, 0u
-    %19:f32 = access %x_198, 1u
-    %20:vec2<f32> = construct %18, %19
-    %x_202:vec2<f32> = div %20, %x_201
-    %22:f32 = access %x_202, 0u
-    %23:f32 = mul %22, 256.0f
-    %24:i32 = convert %23
-    %25:f32 = access %x_202, 1u
+    %15:vec4<f32> = load %gl_FragCoord
+    %x_198:vec4<f32> = let %15
+    %17:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
+    %18:vec2<f32> = load %17
+    %x_201:vec2<f32> = let %18
+    %20:f32 = access %x_198, 0u
+    %21:f32 = access %x_198, 1u
+    %22:vec2<f32> = construct %20, %21
+    %23:vec2<f32> = div %22, %x_201
+    %x_202:vec2<f32> = let %23
+    %25:f32 = access %x_202, 0u
     %26:f32 = mul %25, 256.0f
-    %27:i32 = convert %26
-    %28:vec2<i32> = construct %24, %27
-    store %x_209, %28
-    switch 0u [c: (default, %b3)] {  # switch_1
-      %b3 = block {  # case
-        %29:vec2<i32> = load %x_209
-        store %x_213_phi, %29
-        loop [b: %b4, c: %b5] {  # loop_1
-          %b4 = block {  # body
+    %27:i32 = call %tint_f32_to_i32, %26
+    %29:i32 = let %27
+    %30:f32 = access %x_202, 1u
+    %31:f32 = mul %30, 256.0f
+    %32:i32 = call %tint_f32_to_i32, %31
+    %33:vec2<i32> = construct %29, %32
+    store %x_209, %33
+    switch 0u [c: (default, $B3)] {  # switch_1
+      $B3: {  # case
+        %34:vec2<i32> = load %x_209
+        store %x_213_phi, %34
+        loop [b: $B4, c: $B5] {  # loop_1
+          $B4: {  # body
             %x_230:ptr<function, bool, read_write> = var
             %x_231_phi:ptr<function, bool, read_write> = var
-            %x_213:vec2<i32> = load %x_213_phi
-            %x_216:i32 = access %x_213, 1u
+            %37:vec2<i32> = load %x_213_phi
+            %x_213:vec2<i32> = let %37
+            %39:i32 = access %x_213, 1u
+            %x_216:i32 = let %39
             store %x_243_phi, vec4<f32>(0.0f)
             store %x_244_phi, false
-            %34:bool = neq %x_216, 256i
-            if %34 [t: %b6, f: %b7] {  # if_1
-              %b6 = block {  # true
+            %41:bool = neq %x_216, 256i
+            if %41 [t: $B6, f: $B7] {  # if_1
+              $B6: {  # true
                 exit_if  # if_1
               }
-              %b7 = block {  # false
+              $B7: {  # false
                 exit_loop  # loop_1
               }
             }
-            %x_220:i32 = access %x_213, 0u
+            %42:i32 = access %x_213, 0u
+            %x_220:i32 = let %42
             store %x_195, array<i32, 256>(115i, 133i, 150i, 164i, 176i, 184i, 190i, 192i, 191i, 187i, 181i, 172i, 163i, 153i, 143i, 134i, 126i, 120i, 116i, 114i, 114i, 117i, 121i, 127i, 134i, 141i, 148i, 154i, 159i, 162i, 163i, 161i, 157i, 151i, 143i, 134i, 124i, 113i, 103i, 94i, 87i, 82i, 79i, 80i, 84i, 91i, 101i, 114i, 130i, 146i, 164i, 182i, 199i, 215i, 229i, 240i, 249i, 254i, 256i, 254i, 250i, 243i, 233i, 223i, 212i, 200i, 190i, 180i, 172i, 166i, 163i, 161i, 162i, 164i, 169i, 174i, 179i, 185i, 190i, 193i, 195i, 195i, 192i, 188i, 180i, 171i, 161i, 149i, 137i, 125i, 114i, 105i, 97i, 93i, 91i, 93i, 98i, 106i, 117i, 130i, 145i, 161i, 177i, 193i, 208i, 221i, 231i, 239i, 243i, 244i, 242i, 236i, 228i, 218i, 207i, 194i, 181i, 169i, 158i, 148i, 141i, 135i, 132i, 131i, 132i, 135i, 138i, 143i, 147i, 151i, 154i, 155i, 155i, 152i, 146i, 139i, 129i, 118i, 106i, 93i, 80i, 68i, 58i, 49i, 43i, 40i, 41i, 44i, 51i, 61i, 73i, 87i, 103i, 119i, 134i, 149i, 162i, 173i, 181i, 186i, 188i, 186i, 181i, 174i, 164i, 153i, 141i, 128i, 116i, 104i, 94i, 86i, 81i, 77i, 76i, 77i, 80i, 84i, 89i, 94i, 98i, 102i, 104i, 104i, 102i, 98i, 92i, 83i, 73i, 62i, 50i, 38i, 26i, 16i, 8i, 2i, 0i, 0i, 4i, 11i, 21i, 33i, 48i, 64i, 81i, 98i, 114i, 129i, 141i, 151i, 158i, 161i, 161i, 158i, 152i, 144i, 134i, 123i, 112i, 100i, 90i, 81i, 73i, 68i, 65i, 65i, 67i, 70i, 75i, 81i, 87i, 92i, 97i, 101i, 103i, 102i, 100i, 95i, 88i, 79i, 69i, 58i, 47i, 36i, 26i, 18i, 13i, 11i, 11i, 15i, 22i, 32i, 45i, 60i, 77i, 94i)
-            %36:ptr<function, i32, read_write> = access %x_195, %x_216
-            %x_222:i32 = load %36
-            %38:i32 = add %x_222, 15i
-            %x_224:bool = lt %x_220, %38
+            %44:ptr<function, i32, read_write> = access %x_195, %x_216
+            %45:i32 = load %44
+            %x_222:i32 = let %45
+            %47:i32 = add %x_222, 15i
+            %48:bool = lt %x_220, %47
+            %x_224:bool = let %48
             store %x_231_phi, %x_224
-            if %x_224 [t: %b8] {  # if_2
-              %b8 = block {  # true
+            if %x_224 [t: $B8] {  # if_2
+              $B8: {  # true
                 store %x_196, array<i32, 256>(115i, 133i, 150i, 164i, 176i, 184i, 190i, 192i, 191i, 187i, 181i, 172i, 163i, 153i, 143i, 134i, 126i, 120i, 116i, 114i, 114i, 117i, 121i, 127i, 134i, 141i, 148i, 154i, 159i, 162i, 163i, 161i, 157i, 151i, 143i, 134i, 124i, 113i, 103i, 94i, 87i, 82i, 79i, 80i, 84i, 91i, 101i, 114i, 130i, 146i, 164i, 182i, 199i, 215i, 229i, 240i, 249i, 254i, 256i, 254i, 250i, 243i, 233i, 223i, 212i, 200i, 190i, 180i, 172i, 166i, 163i, 161i, 162i, 164i, 169i, 174i, 179i, 185i, 190i, 193i, 195i, 195i, 192i, 188i, 180i, 171i, 161i, 149i, 137i, 125i, 114i, 105i, 97i, 93i, 91i, 93i, 98i, 106i, 117i, 130i, 145i, 161i, 177i, 193i, 208i, 221i, 231i, 239i, 243i, 244i, 242i, 236i, 228i, 218i, 207i, 194i, 181i, 169i, 158i, 148i, 141i, 135i, 132i, 131i, 132i, 135i, 138i, 143i, 147i, 151i, 154i, 155i, 155i, 152i, 146i, 139i, 129i, 118i, 106i, 93i, 80i, 68i, 58i, 49i, 43i, 40i, 41i, 44i, 51i, 61i, 73i, 87i, 103i, 119i, 134i, 149i, 162i, 173i, 181i, 186i, 188i, 186i, 181i, 174i, 164i, 153i, 141i, 128i, 116i, 104i, 94i, 86i, 81i, 77i, 76i, 77i, 80i, 84i, 89i, 94i, 98i, 102i, 104i, 104i, 102i, 98i, 92i, 83i, 73i, 62i, 50i, 38i, 26i, 16i, 8i, 2i, 0i, 0i, 4i, 11i, 21i, 33i, 48i, 64i, 81i, 98i, 114i, 129i, 141i, 151i, 158i, 161i, 161i, 158i, 152i, 144i, 134i, 123i, 112i, 100i, 90i, 81i, 73i, 68i, 65i, 65i, 67i, 70i, 75i, 81i, 87i, 92i, 97i, 101i, 103i, 102i, 100i, 95i, 88i, 79i, 69i, 58i, 47i, 36i, 26i, 18i, 13i, 11i, 11i, 15i, 22i, 32i, 45i, 60i, 77i, 94i)
-                %40:ptr<function, i32, read_write> = access %x_196, %x_216
-                %x_228:i32 = load %40
-                %42:i32 = sub %x_228, 15i
-                %43:bool = gt %x_220, %42
-                store %x_230, %43
-                %44:bool = load %x_230
-                store %x_231_phi, %44
+                %50:ptr<function, i32, read_write> = access %x_196, %x_216
+                %51:i32 = load %50
+                %x_228:i32 = let %51
+                %53:i32 = sub %x_228, 15i
+                %54:bool = gt %x_220, %53
+                store %x_230, %54
+                %55:bool = load %x_230
+                store %x_231_phi, %55
                 exit_if  # if_2
               }
             }
-            %x_231:bool = load %x_231_phi
-            if %x_231 [t: %b9] {  # if_3
-              %b9 = block {  # true
+            %56:bool = load %x_231_phi
+            %x_231:bool = let %56
+            if %x_231 [t: $B9] {  # if_3
+              $B9: {  # true
                 store %x_197, array<i32, 256>(115i, 133i, 150i, 164i, 176i, 184i, 190i, 192i, 191i, 187i, 181i, 172i, 163i, 153i, 143i, 134i, 126i, 120i, 116i, 114i, 114i, 117i, 121i, 127i, 134i, 141i, 148i, 154i, 159i, 162i, 163i, 161i, 157i, 151i, 143i, 134i, 124i, 113i, 103i, 94i, 87i, 82i, 79i, 80i, 84i, 91i, 101i, 114i, 130i, 146i, 164i, 182i, 199i, 215i, 229i, 240i, 249i, 254i, 256i, 254i, 250i, 243i, 233i, 223i, 212i, 200i, 190i, 180i, 172i, 166i, 163i, 161i, 162i, 164i, 169i, 174i, 179i, 185i, 190i, 193i, 195i, 195i, 192i, 188i, 180i, 171i, 161i, 149i, 137i, 125i, 114i, 105i, 97i, 93i, 91i, 93i, 98i, 106i, 117i, 130i, 145i, 161i, 177i, 193i, 208i, 221i, 231i, 239i, 243i, 244i, 242i, 236i, 228i, 218i, 207i, 194i, 181i, 169i, 158i, 148i, 141i, 135i, 132i, 131i, 132i, 135i, 138i, 143i, 147i, 151i, 154i, 155i, 155i, 152i, 146i, 139i, 129i, 118i, 106i, 93i, 80i, 68i, 58i, 49i, 43i, 40i, 41i, 44i, 51i, 61i, 73i, 87i, 103i, 119i, 134i, 149i, 162i, 173i, 181i, 186i, 188i, 186i, 181i, 174i, 164i, 153i, 141i, 128i, 116i, 104i, 94i, 86i, 81i, 77i, 76i, 77i, 80i, 84i, 89i, 94i, 98i, 102i, 104i, 104i, 102i, 98i, 92i, 83i, 73i, 62i, 50i, 38i, 26i, 16i, 8i, 2i, 0i, 0i, 4i, 11i, 21i, 33i, 48i, 64i, 81i, 98i, 114i, 129i, 141i, 151i, 158i, 161i, 161i, 158i, 152i, 144i, 134i, 123i, 112i, 100i, 90i, 81i, 73i, 68i, 65i, 65i, 67i, 70i, 75i, 81i, 87i, 92i, 97i, 101i, 103i, 102i, 100i, 95i, 88i, 79i, 69i, 58i, 47i, 36i, 26i, 18i, 13i, 11i, 11i, 15i, 22i, 32i, 45i, 60i, 77i, 94i)
-                %46:ptr<function, i32, read_write> = access %x_197, %x_216
-                %x_235:i32 = load %46
-                %48:i32 = sub %x_220, %x_235
-                %49:f32 = convert %48
-                %50:f32 = abs %49
-                %51:f32 = sub 15.0f, %50
-                %x_240:f32 = mul %51, 0.06666667014360427856f
-                %53:vec4<f32> = construct %x_240, %x_240, %x_240, 1.0f
-                store %x_241, %53
-                %54:vec4<f32> = load %x_241
-                store %x_243_phi, %54
+                %58:ptr<function, i32, read_write> = access %x_197, %x_216
+                %59:i32 = load %58
+                %x_235:i32 = let %59
+                %61:i32 = sub %x_220, %x_235
+                %62:f32 = convert %61
+                %63:f32 = abs %62
+                %64:f32 = sub 15.0f, %63
+                %65:f32 = mul %64, 0.06666667014360427856f
+                %x_240:f32 = let %65
+                %67:vec4<f32> = construct %x_240, %x_240, %x_240, 1.0f
+                store %x_241, %67
+                %68:vec4<f32> = load %x_241
+                store %x_243_phi, %68
                 store %x_244_phi, true
                 exit_loop  # loop_1
               }
             }
             %x_214_1:ptr<function, vec2<i32>, read_write> = var, %x_213
-            %56:i32 = add %x_216, 1i
-            store_vector_element %x_214_1, 1u, %56
-            %x_214:vec2<i32> = load %x_214_1
-            continue %b5
+            %70:i32 = add %x_216, 1i
+            store_vector_element %x_214_1, 1u, %70
+            %71:vec2<i32> = load %x_214_1
+            %x_214:vec2<i32> = let %71
+            continue  # -> $B5
           }
-          %b5 = block {  # continuing
+          $B5: {  # continuing
             store %x_213_phi, %x_214
-            next_iteration %b4
+            next_iteration  # -> $B4
           }
         }
-        %58:vec4<f32> = load %x_243_phi
-        store %x_243, %58
-        %x_244:bool = load %x_244_phi
-        %60:vec4<f32> = load %x_243
-        store %x_246_phi, %60
-        if %x_244 [t: %b10] {  # if_4
-          %b10 = block {  # true
+        %73:vec4<f32> = load %x_243_phi
+        store %x_243, %73
+        %74:bool = load %x_244_phi
+        %x_244:bool = let %74
+        %76:vec4<f32> = load %x_243
+        store %x_246_phi, %76
+        if %x_244 [t: $B10] {  # if_4
+          $B10: {  # true
             exit_switch  # switch_1
           }
         }
@@ -126,18 +141,29 @@
         exit_switch  # switch_1
       }
     }
-    %x_246:vec4<f32> = load %x_246_phi
+    %77:vec4<f32> = load %x_246_phi
+    %x_246:vec4<f32> = let %77
     store %x_GLF_color, %x_246
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b11 {
-  %b11 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B11: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %64:void = call %main_1
-    %65:vec4<f32> = load %x_GLF_color
-    %66:main_out = construct %65
-    ret %66
+    %81:void = call %main_1
+    %82:vec4<f32> = load %x_GLF_color
+    %83:main_out = construct %82
+    ret %83
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B12: {
+    %85:i32 = convert %value
+    %86:bool = gte %value, -2147483648.0f
+    %87:i32 = select -2147483648i, %85, %86
+    %88:bool = lte %value, 2147483520.0f
+    %89:i32 = select 2147483647i, %87, %88
+    ret %89
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-composites/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-composites/1.spvasm.expected.ir.msl
index 1b90589..aa39c09 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-composites/1.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-composites/1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,14 +8,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %x_195:ptr<function, array<i32, 256>, read_write> = var
     %x_196:ptr<function, array<i32, 256>, read_write> = var
     %x_197:ptr<function, array<i32, 256>, read_write> = var
@@ -27,104 +27,113 @@
     %x_252:ptr<function, bool, read_write> = var
     %x_254:ptr<function, vec4<f32>, read_write> = var
     %15:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %x_201:vec2<f32> = load %15
-    %17:vec4<f32> = load %gl_FragCoord
-    %18:vec2<f32> = swizzle %17, xy
-    %x_202:vec2<f32> = div %18, %x_201
+    %16:vec2<f32> = load %15
+    %x_201:vec2<f32> = let %16
+    %18:vec4<f32> = load %gl_FragCoord
+    %19:vec2<f32> = swizzle %18, xy
+    %20:vec2<f32> = div %19, %x_201
+    %x_202:vec2<f32> = let %20
     %x_204:i32 = let -82i
-    %21:vec4<f32> = construct %x_201, 15.0f, 15.0f
-    %22:f32 = access %21, 2u
-    %23:vec2<f32> = construct 0.0f, %22
-    store %x_208, %23
+    %23:vec4<f32> = construct %x_201, 15.0f, 15.0f
+    %24:f32 = access %23, 2u
+    %25:vec2<f32> = construct 0.0f, %24
+    store %x_208, %25
     %x_209:i32 = let 120i
-    %25:f32 = access %x_202, 0u
-    %26:f32 = mul %25, 256.0f
-    %27:i32 = convert %26
-    %28:f32 = access %x_202, 1u
-    %29:f32 = mul %28, 256.0f
-    %30:i32 = convert %29
-    %31:vec2<i32> = construct %27, %30
-    store %x_214, %31
-    switch 0u [c: (default, %b3)] {  # switch_1
-      %b3 = block {  # case
-        %32:vec2<i32> = load %x_214
-        store %x_218, %32
-        loop [b: %b4, c: %b5] {  # loop_1
-          %b4 = block {  # body
+    %27:f32 = access %x_202, 0u
+    %28:f32 = mul %27, 256.0f
+    %29:i32 = call %tint_f32_to_i32, %28
+    %31:i32 = let %29
+    %32:f32 = access %x_202, 1u
+    %33:f32 = mul %32, 256.0f
+    %34:i32 = call %tint_f32_to_i32, %33
+    %35:vec2<i32> = construct %31, %34
+    store %x_214, %35
+    switch 0u [c: (default, $B3)] {  # switch_1
+      $B3: {  # case
+        %36:vec2<i32> = load %x_214
+        store %x_218, %36
+        loop [b: $B4, c: $B5] {  # loop_1
+          $B4: {  # body
             %x_235:ptr<function, bool, read_write> = var
             %x_236:ptr<function, bool, read_write> = var
-            %x_221:i32 = load_vector_element %x_218, 1u
+            %39:i32 = load_vector_element %x_218, 1u
+            %x_221:i32 = let %39
             store %x_251, vec4<f32>(0.0f)
             store %x_252, false
-            %36:bool = neq %x_221, 256i
-            if %36 [t: %b6, f: %b7] {  # if_1
-              %b6 = block {  # true
+            %41:bool = neq %x_221, 256i
+            if %41 [t: $B6, f: $B7] {  # if_1
+              $B6: {  # true
                 exit_if  # if_1
               }
-              %b7 = block {  # false
+              $B7: {  # false
                 exit_loop  # loop_1
               }
             }
-            %x_225:i32 = load_vector_element %x_218, 0u
+            %42:i32 = load_vector_element %x_218, 0u
+            %x_225:i32 = let %42
             store %x_195, array<i32, 256>(115i, 133i, 150i, 164i, 176i, 184i, 190i, 192i, 191i, 187i, 181i, 172i, 163i, 153i, 143i, 134i, 126i, 120i, 116i, 114i, 114i, 117i, 121i, 127i, 134i, 141i, 148i, 154i, 159i, 162i, 163i, 161i, 157i, 151i, 143i, 134i, 124i, 113i, 103i, 94i, 87i, 82i, 79i, 80i, 84i, 91i, 101i, 114i, 130i, 146i, 164i, 182i, 199i, 215i, 229i, 240i, 249i, 254i, 256i, 254i, 250i, 243i, 233i, 223i, 212i, 200i, 190i, 180i, 172i, 166i, 163i, 161i, 162i, 164i, 169i, 174i, 179i, 185i, 190i, 193i, 195i, 195i, 192i, 188i, 180i, 171i, 161i, 149i, 137i, 125i, 114i, 105i, 97i, 93i, 91i, 93i, 98i, 106i, 117i, 130i, 145i, 161i, 177i, 193i, 208i, 221i, 231i, 239i, 243i, 244i, 242i, 236i, 228i, 218i, 207i, 194i, 181i, 169i, 158i, 148i, 141i, 135i, 132i, 131i, 132i, 135i, 138i, 143i, 147i, 151i, 154i, 155i, 155i, 152i, 146i, 139i, 129i, 118i, 106i, 93i, 80i, 68i, 58i, 49i, 43i, 40i, 41i, 44i, 51i, 61i, 73i, 87i, 103i, 119i, 134i, 149i, 162i, 173i, 181i, 186i, 188i, 186i, 181i, 174i, 164i, 153i, 141i, 128i, 116i, 104i, 94i, 86i, 81i, 77i, 76i, 77i, 80i, 84i, 89i, 94i, 98i, 102i, 104i, 104i, 102i, 98i, 92i, 83i, 73i, 62i, 50i, 38i, 26i, 16i, 8i, 2i, 0i, 0i, 4i, 11i, 21i, 33i, 48i, 64i, 81i, 98i, 114i, 129i, 141i, 151i, 158i, 161i, 161i, 158i, 152i, 144i, 134i, 123i, 112i, 100i, 90i, 81i, 73i, 68i, 65i, 65i, 67i, 70i, 75i, 81i, 87i, 92i, 97i, 101i, 103i, 102i, 100i, 95i, 88i, 79i, 69i, 58i, 47i, 36i, 26i, 18i, 13i, 11i, 11i, 15i, 22i, 32i, 45i, 60i, 77i, 94i)
-            %38:ptr<function, i32, read_write> = access %x_195, %x_221
-            %39:i32 = load %38
-            %40:i32 = add %39, 15i
-            %x_229:bool = lt %x_225, %40
+            %44:ptr<function, i32, read_write> = access %x_195, %x_221
+            %45:i32 = load %44
+            %46:i32 = add %45, 15i
+            %47:bool = lt %x_225, %46
+            %x_229:bool = let %47
             store %x_236, %x_229
-            if %x_229 [t: %b8] {  # if_2
-              %b8 = block {  # true
+            if %x_229 [t: $B8] {  # if_2
+              $B8: {  # true
                 store %x_196, array<i32, 256>(115i, 133i, 150i, 164i, 176i, 184i, 190i, 192i, 191i, 187i, 181i, 172i, 163i, 153i, 143i, 134i, 126i, 120i, 116i, 114i, 114i, 117i, 121i, 127i, 134i, 141i, 148i, 154i, 159i, 162i, 163i, 161i, 157i, 151i, 143i, 134i, 124i, 113i, 103i, 94i, 87i, 82i, 79i, 80i, 84i, 91i, 101i, 114i, 130i, 146i, 164i, 182i, 199i, 215i, 229i, 240i, 249i, 254i, 256i, 254i, 250i, 243i, 233i, 223i, 212i, 200i, 190i, 180i, 172i, 166i, 163i, 161i, 162i, 164i, 169i, 174i, 179i, 185i, 190i, 193i, 195i, 195i, 192i, 188i, 180i, 171i, 161i, 149i, 137i, 125i, 114i, 105i, 97i, 93i, 91i, 93i, 98i, 106i, 117i, 130i, 145i, 161i, 177i, 193i, 208i, 221i, 231i, 239i, 243i, 244i, 242i, 236i, 228i, 218i, 207i, 194i, 181i, 169i, 158i, 148i, 141i, 135i, 132i, 131i, 132i, 135i, 138i, 143i, 147i, 151i, 154i, 155i, 155i, 152i, 146i, 139i, 129i, 118i, 106i, 93i, 80i, 68i, 58i, 49i, 43i, 40i, 41i, 44i, 51i, 61i, 73i, 87i, 103i, 119i, 134i, 149i, 162i, 173i, 181i, 186i, 188i, 186i, 181i, 174i, 164i, 153i, 141i, 128i, 116i, 104i, 94i, 86i, 81i, 77i, 76i, 77i, 80i, 84i, 89i, 94i, 98i, 102i, 104i, 104i, 102i, 98i, 92i, 83i, 73i, 62i, 50i, 38i, 26i, 16i, 8i, 2i, 0i, 0i, 4i, 11i, 21i, 33i, 48i, 64i, 81i, 98i, 114i, 129i, 141i, 151i, 158i, 161i, 161i, 158i, 152i, 144i, 134i, 123i, 112i, 100i, 90i, 81i, 73i, 68i, 65i, 65i, 67i, 70i, 75i, 81i, 87i, 92i, 97i, 101i, 103i, 102i, 100i, 95i, 88i, 79i, 69i, 58i, 47i, 36i, 26i, 18i, 13i, 11i, 11i, 15i, 22i, 32i, 45i, 60i, 77i, 94i)
-                %42:ptr<function, i32, read_write> = access %x_196, %x_221
-                %43:i32 = load %42
-                %44:i32 = sub %43, 15i
-                %45:bool = gt %x_225, %44
-                store %x_235, %45
-                %46:bool = load %x_235
-                store %x_236, %46
+                %49:ptr<function, i32, read_write> = access %x_196, %x_221
+                %50:i32 = load %49
+                %51:i32 = sub %50, 15i
+                %52:bool = gt %x_225, %51
+                store %x_235, %52
+                %53:bool = load %x_235
+                store %x_236, %53
                 exit_if  # if_2
               }
             }
-            %47:bool = load %x_236
-            if %47 [t: %b9] {  # if_3
-              %b9 = block {  # true
+            %54:bool = load %x_236
+            if %54 [t: $B9] {  # if_3
+              $B9: {  # true
                 store %x_197, array<i32, 256>(115i, 133i, 150i, 164i, 176i, 184i, 190i, 192i, 191i, 187i, 181i, 172i, 163i, 153i, 143i, 134i, 126i, 120i, 116i, 114i, 114i, 117i, 121i, 127i, 134i, 141i, 148i, 154i, 159i, 162i, 163i, 161i, 157i, 151i, 143i, 134i, 124i, 113i, 103i, 94i, 87i, 82i, 79i, 80i, 84i, 91i, 101i, 114i, 130i, 146i, 164i, 182i, 199i, 215i, 229i, 240i, 249i, 254i, 256i, 254i, 250i, 243i, 233i, 223i, 212i, 200i, 190i, 180i, 172i, 166i, 163i, 161i, 162i, 164i, 169i, 174i, 179i, 185i, 190i, 193i, 195i, 195i, 192i, 188i, 180i, 171i, 161i, 149i, 137i, 125i, 114i, 105i, 97i, 93i, 91i, 93i, 98i, 106i, 117i, 130i, 145i, 161i, 177i, 193i, 208i, 221i, 231i, 239i, 243i, 244i, 242i, 236i, 228i, 218i, 207i, 194i, 181i, 169i, 158i, 148i, 141i, 135i, 132i, 131i, 132i, 135i, 138i, 143i, 147i, 151i, 154i, 155i, 155i, 152i, 146i, 139i, 129i, 118i, 106i, 93i, 80i, 68i, 58i, 49i, 43i, 40i, 41i, 44i, 51i, 61i, 73i, 87i, 103i, 119i, 134i, 149i, 162i, 173i, 181i, 186i, 188i, 186i, 181i, 174i, 164i, 153i, 141i, 128i, 116i, 104i, 94i, 86i, 81i, 77i, 76i, 77i, 80i, 84i, 89i, 94i, 98i, 102i, 104i, 104i, 102i, 98i, 92i, 83i, 73i, 62i, 50i, 38i, 26i, 16i, 8i, 2i, 0i, 0i, 4i, 11i, 21i, 33i, 48i, 64i, 81i, 98i, 114i, 129i, 141i, 151i, 158i, 161i, 161i, 158i, 152i, 144i, 134i, 123i, 112i, 100i, 90i, 81i, 73i, 68i, 65i, 65i, 67i, 70i, 75i, 81i, 87i, 92i, 97i, 101i, 103i, 102i, 100i, 95i, 88i, 79i, 69i, 58i, 47i, 36i, 26i, 18i, 13i, 11i, 11i, 15i, 22i, 32i, 45i, 60i, 77i, 94i)
                 %x_244:i32 = let 335i
-                %49:vec2<f32> = load %x_208
-                %50:buf0 = construct %49
-                %51:f32 = access %50, 0u, 1u
-                %52:ptr<function, i32, read_write> = access %x_197, %x_221
-                %53:i32 = load %52
-                %54:i32 = sub %x_225, %53
-                %55:f32 = convert %54
-                %56:f32 = abs %55
-                %57:f32 = sub %51, %56
-                %x_248:f32 = mul %57, 0.06666667014360427856f
-                %59:vec4<f32> = construct %x_248, %x_248, %x_248, 1.0f
-                store %x_249, %59
-                %60:vec4<f32> = load %x_249
-                store %x_251, %60
+                %56:vec2<f32> = load %x_208
+                %57:buf0 = construct %56
+                %58:f32 = access %57, 0u, 1u
+                %59:f32 = let %58
+                %60:ptr<function, i32, read_write> = access %x_197, %x_221
+                %61:i32 = load %60
+                %62:i32 = sub %x_225, %61
+                %63:f32 = convert %62
+                %64:f32 = abs %63
+                %65:f32 = sub %59, %64
+                %66:f32 = mul %65, 0.06666667014360427856f
+                %x_248:f32 = let %66
+                %68:vec4<f32> = construct %x_248, %x_248, %x_248, 1.0f
+                store %x_249, %68
+                %69:vec4<f32> = load %x_249
+                store %x_251, %69
                 store %x_252, true
                 exit_loop  # loop_1
               }
             }
-            %61:vec2<i32> = load %x_218
-            %x_219_1:ptr<function, vec2<i32>, read_write> = var, %61
-            %63:i32 = add %x_221, 1i
-            store_vector_element %x_219_1, 1u, %63
-            %x_219:vec2<i32> = load %x_219_1
-            continue %b5
+            %70:vec2<i32> = load %x_218
+            %x_219_1:ptr<function, vec2<i32>, read_write> = var, %70
+            %72:i32 = add %x_221, 1i
+            store_vector_element %x_219_1, 1u, %72
+            %73:vec2<i32> = load %x_219_1
+            %x_219:vec2<i32> = let %73
+            continue  # -> $B5
           }
-          %b5 = block {  # continuing
+          $B5: {  # continuing
             store %x_218, %x_219
-            next_iteration %b4
+            next_iteration  # -> $B4
           }
         }
-        %65:vec4<f32> = load %x_251
-        store %x_254, %65
-        %66:bool = load %x_252
-        if %66 [t: %b10] {  # if_4
-          %b10 = block {  # true
+        %75:vec4<f32> = load %x_251
+        store %x_254, %75
+        %76:bool = load %x_252
+        if %76 [t: $B10] {  # if_4
+          $B10: {  # true
             exit_switch  # switch_1
           }
         }
@@ -132,18 +141,28 @@
         exit_switch  # switch_1
       }
     }
-    %67:vec4<f32> = load %x_254
-    store %x_GLF_color, %67
+    %77:vec4<f32> = load %x_254
+    store %x_GLF_color, %77
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b11 {
-  %b11 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B11: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %70:void = call %main_1
-    %71:vec4<f32> = load %x_GLF_color
-    %72:main_out = construct %71
-    ret %72
+    %80:void = call %main_1
+    %81:vec4<f32> = load %x_GLF_color
+    %82:main_out = construct %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
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-composites/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-composites/1.wgsl.expected.ir.msl
index 31517d0..dec9ff5 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-composites/1.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-composites/1.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,14 +8,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %x_195:ptr<function, array<i32, 256>, read_write> = var
     %x_196:ptr<function, array<i32, 256>, read_write> = var
     %x_197:ptr<function, array<i32, 256>, read_write> = var
@@ -27,109 +27,125 @@
     %x_251_phi:ptr<function, vec4<f32>, read_write> = var
     %x_252_phi:ptr<function, bool, read_write> = var
     %x_254_phi:ptr<function, vec4<f32>, read_write> = var
-    %x_198:vec4<f32> = load %gl_FragCoord
-    %17:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %x_201:vec2<f32> = load %17
-    %19:f32 = access %x_198, 0u
-    %20:f32 = access %x_198, 1u
-    %21:vec2<f32> = construct %19, %20
-    %x_202:vec2<f32> = div %21, %x_201
+    %16:vec4<f32> = load %gl_FragCoord
+    %x_198:vec4<f32> = let %16
+    %18:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
+    %19:vec2<f32> = load %18
+    %x_201:vec2<f32> = let %19
+    %21:f32 = access %x_198, 0u
+    %22:f32 = access %x_198, 1u
+    %23:vec2<f32> = construct %21, %22
+    %24:vec2<f32> = div %23, %x_201
+    %x_202:vec2<f32> = let %24
     %x_204:i32 = let -82i
-    %24:vec4<f32> = construct %x_201, 15.0f, 15.0f
-    %25:f32 = access %24, 2u
-    %26:vec2<f32> = construct 0.0f, %25
-    store %x_208, %26
+    %27:vec4<f32> = construct %x_201, 15.0f, 15.0f
+    %28:f32 = access %27, 2u
+    %29:vec2<f32> = construct 0.0f, %28
+    store %x_208, %29
     %x_209:i32 = let 120i
-    %28:f32 = access %x_202, 0u
-    %29:f32 = mul %28, 256.0f
-    %30:i32 = convert %29
-    %31:f32 = access %x_202, 1u
+    %31:f32 = access %x_202, 0u
     %32:f32 = mul %31, 256.0f
-    %33:i32 = convert %32
-    %34:vec2<i32> = construct %30, %33
-    store %x_214, %34
-    switch 0u [c: (default, %b3)] {  # switch_1
-      %b3 = block {  # case
-        %35:vec2<i32> = load %x_214
-        store %x_218_phi, %35
-        loop [b: %b4, c: %b5] {  # loop_1
-          %b4 = block {  # body
+    %33:i32 = call %tint_f32_to_i32, %32
+    %35:i32 = let %33
+    %36:f32 = access %x_202, 1u
+    %37:f32 = mul %36, 256.0f
+    %38:i32 = call %tint_f32_to_i32, %37
+    %39:vec2<i32> = construct %35, %38
+    store %x_214, %39
+    switch 0u [c: (default, $B3)] {  # switch_1
+      $B3: {  # case
+        %40:vec2<i32> = load %x_214
+        store %x_218_phi, %40
+        loop [b: $B4, c: $B5] {  # loop_1
+          $B4: {  # body
             %x_235:ptr<function, bool, read_write> = var
             %x_236_phi:ptr<function, bool, read_write> = var
-            %x_218:vec2<i32> = load %x_218_phi
-            %x_221:i32 = access %x_218, 1u
+            %43:vec2<i32> = load %x_218_phi
+            %x_218:vec2<i32> = let %43
+            %45:i32 = access %x_218, 1u
+            %x_221:i32 = let %45
             store %x_251_phi, vec4<f32>(0.0f)
             store %x_252_phi, false
-            %40:bool = neq %x_221, 256i
-            if %40 [t: %b6, f: %b7] {  # if_1
-              %b6 = block {  # true
+            %47:bool = neq %x_221, 256i
+            if %47 [t: $B6, f: $B7] {  # if_1
+              $B6: {  # true
                 exit_if  # if_1
               }
-              %b7 = block {  # false
+              $B7: {  # false
                 exit_loop  # loop_1
               }
             }
-            %x_225:i32 = access %x_218, 0u
+            %48:i32 = access %x_218, 0u
+            %x_225:i32 = let %48
             store %x_195, array<i32, 256>(115i, 133i, 150i, 164i, 176i, 184i, 190i, 192i, 191i, 187i, 181i, 172i, 163i, 153i, 143i, 134i, 126i, 120i, 116i, 114i, 114i, 117i, 121i, 127i, 134i, 141i, 148i, 154i, 159i, 162i, 163i, 161i, 157i, 151i, 143i, 134i, 124i, 113i, 103i, 94i, 87i, 82i, 79i, 80i, 84i, 91i, 101i, 114i, 130i, 146i, 164i, 182i, 199i, 215i, 229i, 240i, 249i, 254i, 256i, 254i, 250i, 243i, 233i, 223i, 212i, 200i, 190i, 180i, 172i, 166i, 163i, 161i, 162i, 164i, 169i, 174i, 179i, 185i, 190i, 193i, 195i, 195i, 192i, 188i, 180i, 171i, 161i, 149i, 137i, 125i, 114i, 105i, 97i, 93i, 91i, 93i, 98i, 106i, 117i, 130i, 145i, 161i, 177i, 193i, 208i, 221i, 231i, 239i, 243i, 244i, 242i, 236i, 228i, 218i, 207i, 194i, 181i, 169i, 158i, 148i, 141i, 135i, 132i, 131i, 132i, 135i, 138i, 143i, 147i, 151i, 154i, 155i, 155i, 152i, 146i, 139i, 129i, 118i, 106i, 93i, 80i, 68i, 58i, 49i, 43i, 40i, 41i, 44i, 51i, 61i, 73i, 87i, 103i, 119i, 134i, 149i, 162i, 173i, 181i, 186i, 188i, 186i, 181i, 174i, 164i, 153i, 141i, 128i, 116i, 104i, 94i, 86i, 81i, 77i, 76i, 77i, 80i, 84i, 89i, 94i, 98i, 102i, 104i, 104i, 102i, 98i, 92i, 83i, 73i, 62i, 50i, 38i, 26i, 16i, 8i, 2i, 0i, 0i, 4i, 11i, 21i, 33i, 48i, 64i, 81i, 98i, 114i, 129i, 141i, 151i, 158i, 161i, 161i, 158i, 152i, 144i, 134i, 123i, 112i, 100i, 90i, 81i, 73i, 68i, 65i, 65i, 67i, 70i, 75i, 81i, 87i, 92i, 97i, 101i, 103i, 102i, 100i, 95i, 88i, 79i, 69i, 58i, 47i, 36i, 26i, 18i, 13i, 11i, 11i, 15i, 22i, 32i, 45i, 60i, 77i, 94i)
-            %42:ptr<function, i32, read_write> = access %x_195, %x_221
-            %x_227:i32 = load %42
-            %44:i32 = add %x_227, 15i
-            %x_229:bool = lt %x_225, %44
+            %50:ptr<function, i32, read_write> = access %x_195, %x_221
+            %51:i32 = load %50
+            %x_227:i32 = let %51
+            %53:i32 = add %x_227, 15i
+            %54:bool = lt %x_225, %53
+            %x_229:bool = let %54
             store %x_236_phi, %x_229
-            if %x_229 [t: %b8] {  # if_2
-              %b8 = block {  # true
+            if %x_229 [t: $B8] {  # if_2
+              $B8: {  # true
                 store %x_196, array<i32, 256>(115i, 133i, 150i, 164i, 176i, 184i, 190i, 192i, 191i, 187i, 181i, 172i, 163i, 153i, 143i, 134i, 126i, 120i, 116i, 114i, 114i, 117i, 121i, 127i, 134i, 141i, 148i, 154i, 159i, 162i, 163i, 161i, 157i, 151i, 143i, 134i, 124i, 113i, 103i, 94i, 87i, 82i, 79i, 80i, 84i, 91i, 101i, 114i, 130i, 146i, 164i, 182i, 199i, 215i, 229i, 240i, 249i, 254i, 256i, 254i, 250i, 243i, 233i, 223i, 212i, 200i, 190i, 180i, 172i, 166i, 163i, 161i, 162i, 164i, 169i, 174i, 179i, 185i, 190i, 193i, 195i, 195i, 192i, 188i, 180i, 171i, 161i, 149i, 137i, 125i, 114i, 105i, 97i, 93i, 91i, 93i, 98i, 106i, 117i, 130i, 145i, 161i, 177i, 193i, 208i, 221i, 231i, 239i, 243i, 244i, 242i, 236i, 228i, 218i, 207i, 194i, 181i, 169i, 158i, 148i, 141i, 135i, 132i, 131i, 132i, 135i, 138i, 143i, 147i, 151i, 154i, 155i, 155i, 152i, 146i, 139i, 129i, 118i, 106i, 93i, 80i, 68i, 58i, 49i, 43i, 40i, 41i, 44i, 51i, 61i, 73i, 87i, 103i, 119i, 134i, 149i, 162i, 173i, 181i, 186i, 188i, 186i, 181i, 174i, 164i, 153i, 141i, 128i, 116i, 104i, 94i, 86i, 81i, 77i, 76i, 77i, 80i, 84i, 89i, 94i, 98i, 102i, 104i, 104i, 102i, 98i, 92i, 83i, 73i, 62i, 50i, 38i, 26i, 16i, 8i, 2i, 0i, 0i, 4i, 11i, 21i, 33i, 48i, 64i, 81i, 98i, 114i, 129i, 141i, 151i, 158i, 161i, 161i, 158i, 152i, 144i, 134i, 123i, 112i, 100i, 90i, 81i, 73i, 68i, 65i, 65i, 67i, 70i, 75i, 81i, 87i, 92i, 97i, 101i, 103i, 102i, 100i, 95i, 88i, 79i, 69i, 58i, 47i, 36i, 26i, 18i, 13i, 11i, 11i, 15i, 22i, 32i, 45i, 60i, 77i, 94i)
-                %46:ptr<function, i32, read_write> = access %x_196, %x_221
-                %x_233:i32 = load %46
-                %48:i32 = sub %x_233, 15i
-                %49:bool = gt %x_225, %48
-                store %x_235, %49
-                %50:bool = load %x_235
-                store %x_236_phi, %50
+                %56:ptr<function, i32, read_write> = access %x_196, %x_221
+                %57:i32 = load %56
+                %x_233:i32 = let %57
+                %59:i32 = sub %x_233, 15i
+                %60:bool = gt %x_225, %59
+                store %x_235, %60
+                %61:bool = load %x_235
+                store %x_236_phi, %61
                 exit_if  # if_2
               }
             }
-            %x_236:bool = load %x_236_phi
-            if %x_236 [t: %b9] {  # if_3
-              %b9 = block {  # true
+            %62:bool = load %x_236_phi
+            %x_236:bool = let %62
+            if %x_236 [t: $B9] {  # if_3
+              $B9: {  # true
                 store %x_197, array<i32, 256>(115i, 133i, 150i, 164i, 176i, 184i, 190i, 192i, 191i, 187i, 181i, 172i, 163i, 153i, 143i, 134i, 126i, 120i, 116i, 114i, 114i, 117i, 121i, 127i, 134i, 141i, 148i, 154i, 159i, 162i, 163i, 161i, 157i, 151i, 143i, 134i, 124i, 113i, 103i, 94i, 87i, 82i, 79i, 80i, 84i, 91i, 101i, 114i, 130i, 146i, 164i, 182i, 199i, 215i, 229i, 240i, 249i, 254i, 256i, 254i, 250i, 243i, 233i, 223i, 212i, 200i, 190i, 180i, 172i, 166i, 163i, 161i, 162i, 164i, 169i, 174i, 179i, 185i, 190i, 193i, 195i, 195i, 192i, 188i, 180i, 171i, 161i, 149i, 137i, 125i, 114i, 105i, 97i, 93i, 91i, 93i, 98i, 106i, 117i, 130i, 145i, 161i, 177i, 193i, 208i, 221i, 231i, 239i, 243i, 244i, 242i, 236i, 228i, 218i, 207i, 194i, 181i, 169i, 158i, 148i, 141i, 135i, 132i, 131i, 132i, 135i, 138i, 143i, 147i, 151i, 154i, 155i, 155i, 152i, 146i, 139i, 129i, 118i, 106i, 93i, 80i, 68i, 58i, 49i, 43i, 40i, 41i, 44i, 51i, 61i, 73i, 87i, 103i, 119i, 134i, 149i, 162i, 173i, 181i, 186i, 188i, 186i, 181i, 174i, 164i, 153i, 141i, 128i, 116i, 104i, 94i, 86i, 81i, 77i, 76i, 77i, 80i, 84i, 89i, 94i, 98i, 102i, 104i, 104i, 102i, 98i, 92i, 83i, 73i, 62i, 50i, 38i, 26i, 16i, 8i, 2i, 0i, 0i, 4i, 11i, 21i, 33i, 48i, 64i, 81i, 98i, 114i, 129i, 141i, 151i, 158i, 161i, 161i, 158i, 152i, 144i, 134i, 123i, 112i, 100i, 90i, 81i, 73i, 68i, 65i, 65i, 67i, 70i, 75i, 81i, 87i, 92i, 97i, 101i, 103i, 102i, 100i, 95i, 88i, 79i, 69i, 58i, 47i, 36i, 26i, 18i, 13i, 11i, 11i, 15i, 22i, 32i, 45i, 60i, 77i, 94i)
-                %52:ptr<function, i32, read_write> = access %x_197, %x_221
-                %x_240:i32 = load %52
+                %64:ptr<function, i32, read_write> = access %x_197, %x_221
+                %65:i32 = load %64
+                %x_240:i32 = let %65
                 %x_244:i32 = let 335i
-                %55:vec2<f32> = load %x_208
-                %56:buf0 = construct %55
-                %57:f32 = access %56, 0u, 1u
-                %58:i32 = sub %x_225, %x_240
-                %59:f32 = convert %58
-                %60:f32 = abs %59
-                %61:f32 = sub %57, %60
-                %x_248:f32 = mul %61, 0.06666667014360427856f
-                %63:vec4<f32> = construct %x_248, %x_248, %x_248, 1.0f
-                store %x_249, %63
-                %64:vec4<f32> = load %x_249
-                store %x_251_phi, %64
+                %68:vec2<f32> = load %x_208
+                %69:buf0 = construct %68
+                %70:f32 = access %69, 0u, 1u
+                %71:f32 = let %70
+                %72:i32 = sub %x_225, %x_240
+                %73:f32 = convert %72
+                %74:f32 = abs %73
+                %75:f32 = sub %71, %74
+                %76:f32 = mul %75, 0.06666667014360427856f
+                %x_248:f32 = let %76
+                %78:vec4<f32> = construct %x_248, %x_248, %x_248, 1.0f
+                store %x_249, %78
+                %79:vec4<f32> = load %x_249
+                store %x_251_phi, %79
                 store %x_252_phi, true
                 exit_loop  # loop_1
               }
             }
             %x_219_1:ptr<function, vec2<i32>, read_write> = var, %x_218
-            %66:i32 = add %x_221, 1i
-            store_vector_element %x_219_1, 1u, %66
-            %x_219:vec2<i32> = load %x_219_1
-            continue %b5
+            %81:i32 = add %x_221, 1i
+            store_vector_element %x_219_1, 1u, %81
+            %82:vec2<i32> = load %x_219_1
+            %x_219:vec2<i32> = let %82
+            continue  # -> $B5
           }
-          %b5 = block {  # continuing
+          $B5: {  # continuing
             store %x_218_phi, %x_219
-            next_iteration %b4
+            next_iteration  # -> $B4
           }
         }
-        %68:vec4<f32> = load %x_251_phi
-        store %x_251, %68
-        %x_252:bool = load %x_252_phi
-        %70:vec4<f32> = load %x_251
-        store %x_254_phi, %70
-        if %x_252 [t: %b10] {  # if_4
-          %b10 = block {  # true
+        %84:vec4<f32> = load %x_251_phi
+        store %x_251, %84
+        %85:bool = load %x_252_phi
+        %x_252:bool = let %85
+        %87:vec4<f32> = load %x_251
+        store %x_254_phi, %87
+        if %x_252 [t: $B10] {  # if_4
+          $B10: {  # true
             exit_switch  # switch_1
           }
         }
@@ -137,18 +153,29 @@
         exit_switch  # switch_1
       }
     }
-    %x_254:vec4<f32> = load %x_254_phi
+    %88:vec4<f32> = load %x_254_phi
+    %x_254:vec4<f32> = let %88
     store %x_GLF_color, %x_254
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b11 {
-  %b11 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B11: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %74:void = call %main_1
-    %75:vec4<f32> = load %x_GLF_color
-    %76:main_out = construct %75
-    ret %76
+    %92:void = call %main_1
+    %93:vec4<f32> = load %x_GLF_color
+    %94:main_out = construct %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
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-dead-break-and-unroll/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-dead-break-and-unroll/1.spvasm.expected.ir.msl
index 14c81b1..c8e7081 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-dead-break-and-unroll/1.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-dead-break-and-unroll/1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,7 +8,7 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %map:ptr<private, array<i32, 256>, read_write> = var
@@ -16,8 +16,8 @@
   %x_60:ptr<private, mat2x4<f32>, read_write> = var, mat2x4<f32>(vec4<f32>(0.0f))
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %pos:ptr<function, vec2<f32>, read_write> = var
     %ipos:ptr<function, vec2<i32>, read_write> = var
     %i:ptr<function, i32, read_write> = var
@@ -36,42 +36,44 @@
     store %pos, %21
     %22:f32 = load_vector_element %pos, 0u
     %23:f32 = mul %22, 16.0f
-    %24:i32 = convert %23
-    %25:f32 = load_vector_element %pos, 1u
-    %26:f32 = mul %25, 16.0f
-    %27:i32 = convert %26
-    %28:vec2<i32> = construct %24, %27
-    store %ipos, %28
+    %24:i32 = call %tint_f32_to_i32, %23
+    %26:i32 = let %24
+    %27:f32 = load_vector_element %pos, 1u
+    %28:f32 = mul %27, 16.0f
+    %29:i32 = call %tint_f32_to_i32, %28
+    %30:vec2<i32> = construct %26, %29
+    store %ipos, %30
     store %i, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %29:i32 = load %i
-        %30:bool = lt %29, 256i
-        if %30 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %31:i32 = load %i
+        %32:bool = lt %31, 256i
+        if %32 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_86:i32 = load %i
-        %32:ptr<private, i32, read_write> = access %map, %x_86
-        store %32, 0i
-        continue %b4
-      }
-      %b4 = block {  # continuing
         %33:i32 = load %i
-        %34:i32 = add %33, 1i
-        store %i, %34
-        next_iteration %b3
+        %x_86:i32 = let %33
+        %35:ptr<private, i32, read_write> = access %map, %x_86
+        store %35, 0i
+        continue  # -> $B4
+      }
+      $B4: {  # continuing
+        %36:i32 = load %i
+        %37:i32 = add %36, 1i
+        store %i, %37
+        next_iteration  # -> $B3
       }
     }
     store %p, vec2<i32>(0i)
     store %canwalk, true
     store %v, 0i
-    loop [b: %b7, c: %b8] {  # loop_2
-      %b7 = block {  # body
+    loop [b: $B7, c: $B8] {  # loop_2
+      $B7: {  # body
         %x_110:ptr<function, bool, read_write> = var
         %x_111:ptr<function, bool, read_write> = var
         %x_130:ptr<function, bool, read_write> = var
@@ -80,120 +82,125 @@
         %x_151:ptr<function, bool, read_write> = var
         %x_171:ptr<function, bool, read_write> = var
         %x_172:ptr<function, bool, read_write> = var
-        %43:i32 = load %v
-        %44:i32 = add %43, 1i
-        store %v, %44
+        %46:i32 = load %v
+        %47:i32 = add %46, 1i
+        store %v, %47
         store %directions, 0i
-        %45:i32 = load_vector_element %p, 0u
-        %x_98:bool = gt %45, 0i
+        %48:i32 = load_vector_element %p, 0u
+        %49:bool = gt %48, 0i
+        %x_98:bool = let %49
         store %x_111, %x_98
-        if %x_98 [t: %b9] {  # if_2
-          %b9 = block {  # true
-            %47:i32 = load_vector_element %p, 0u
-            %48:i32 = sub %47, 2i
-            %49:i32 = load_vector_element %p, 1u
-            %50:i32 = mul %49, 16i
-            %51:i32 = add %48, %50
-            %52:ptr<private, i32, read_write> = access %map, %51
-            %53:i32 = load %52
-            %54:bool = eq %53, 0i
-            store %x_110, %54
-            %55:bool = load %x_110
-            store %x_111, %55
+        if %x_98 [t: $B9] {  # if_2
+          $B9: {  # true
+            %51:i32 = load_vector_element %p, 0u
+            %52:i32 = sub %51, 2i
+            %53:i32 = load_vector_element %p, 1u
+            %54:i32 = mul %53, 16i
+            %55:i32 = add %52, %54
+            %56:ptr<private, i32, read_write> = access %map, %55
+            %57:i32 = load %56
+            %58:bool = eq %57, 0i
+            store %x_110, %58
+            %59:bool = load %x_110
+            store %x_111, %59
             exit_if  # if_2
           }
         }
-        %56:bool = load %x_111
-        if %56 [t: %b10] {  # if_3
-          %b10 = block {  # true
-            %57:i32 = load %directions
-            %58:i32 = add %57, 1i
-            store %directions, %58
+        %60:bool = load %x_111
+        if %60 [t: $B10] {  # if_3
+          $B10: {  # true
+            %61:i32 = load %directions
+            %62:i32 = add %61, 1i
+            store %directions, %62
             exit_if  # if_3
           }
         }
-        %59:i32 = load_vector_element %p, 1u
-        %x_118:bool = gt %59, 0i
+        %63:i32 = load_vector_element %p, 1u
+        %64:bool = gt %63, 0i
+        %x_118:bool = let %64
         store %x_131, %x_118
-        if %x_118 [t: %b11] {  # if_4
-          %b11 = block {  # true
-            %61:i32 = load_vector_element %p, 0u
-            %62:i32 = load_vector_element %p, 1u
-            %63:i32 = sub %62, 2i
-            %64:i32 = mul %63, 16i
-            %65:i32 = add %61, %64
-            %66:ptr<private, i32, read_write> = access %map, %65
-            %67:i32 = load %66
-            %68:bool = eq %67, 0i
-            store %x_130, %68
-            %69:bool = load %x_130
-            store %x_131, %69
+        if %x_118 [t: $B11] {  # if_4
+          $B11: {  # true
+            %66:i32 = load_vector_element %p, 0u
+            %67:i32 = load_vector_element %p, 1u
+            %68:i32 = sub %67, 2i
+            %69:i32 = mul %68, 16i
+            %70:i32 = add %66, %69
+            %71:ptr<private, i32, read_write> = access %map, %70
+            %72:i32 = load %71
+            %73:bool = eq %72, 0i
+            store %x_130, %73
+            %74:bool = load %x_130
+            store %x_131, %74
             exit_if  # if_4
           }
         }
-        %70:bool = load %x_131
-        if %70 [t: %b12] {  # if_5
-          %b12 = block {  # true
-            %71:i32 = load %directions
-            %72:i32 = add %71, 1i
-            store %directions, %72
+        %75:bool = load %x_131
+        if %75 [t: $B12] {  # if_5
+          $B12: {  # true
+            %76:i32 = load %directions
+            %77:i32 = add %76, 1i
+            store %directions, %77
             exit_if  # if_5
           }
         }
-        %73:i32 = load_vector_element %p, 0u
-        %x_138:bool = lt %73, 14i
+        %78:i32 = load_vector_element %p, 0u
+        %79:bool = lt %78, 14i
+        %x_138:bool = let %79
         store %x_151, %x_138
-        if %x_138 [t: %b13] {  # if_6
-          %b13 = block {  # true
-            %75:i32 = load_vector_element %p, 0u
-            %76:i32 = add %75, 2i
-            %77:i32 = load_vector_element %p, 1u
-            %78:i32 = mul %77, 16i
-            %79:i32 = add %76, %78
-            %80:ptr<private, i32, read_write> = access %map, %79
-            %81:i32 = load %80
-            %82:bool = eq %81, 0i
-            store %x_150, %82
-            %83:bool = load %x_150
-            store %x_151, %83
+        if %x_138 [t: $B13] {  # if_6
+          $B13: {  # true
+            %81:i32 = load_vector_element %p, 0u
+            %82:i32 = add %81, 2i
+            %83:i32 = load_vector_element %p, 1u
+            %84:i32 = mul %83, 16i
+            %85:i32 = add %82, %84
+            %86:ptr<private, i32, read_write> = access %map, %85
+            %87:i32 = load %86
+            %88:bool = eq %87, 0i
+            store %x_150, %88
+            %89:bool = load %x_150
+            store %x_151, %89
             exit_if  # if_6
           }
         }
-        %84:bool = load %x_151
-        if %84 [t: %b14] {  # if_7
-          %b14 = block {  # true
-            %85:i32 = load %directions
-            %86:i32 = add %85, 1i
-            store %directions, %86
+        %90:bool = load %x_151
+        if %90 [t: $B14] {  # if_7
+          $B14: {  # true
+            %91:i32 = load %directions
+            %92:i32 = add %91, 1i
+            store %directions, %92
             exit_if  # if_7
           }
         }
-        %x_156:i32 = sub 256i, %x_68
-        %88:i32 = load_vector_element %p, 1u
-        %x_159:bool = lt %88, 14i
+        %93:i32 = sub 256i, %x_68
+        %x_156:i32 = let %93
+        %95:i32 = load_vector_element %p, 1u
+        %96:bool = lt %95, 14i
+        %x_159:bool = let %96
         store %x_172, %x_159
-        if %x_159 [t: %b15] {  # if_8
-          %b15 = block {  # true
-            %90:i32 = load_vector_element %p, 0u
-            %91:i32 = load_vector_element %p, 1u
-            %92:i32 = add %91, 2i
-            %93:i32 = mul %92, 16i
-            %94:i32 = add %90, %93
-            %95:ptr<private, i32, read_write> = access %map, %94
-            %96:i32 = load %95
-            %97:bool = eq %96, 0i
-            store %x_171, %97
-            %98:bool = load %x_171
-            store %x_172, %98
+        if %x_159 [t: $B15] {  # if_8
+          $B15: {  # true
+            %98:i32 = load_vector_element %p, 0u
+            %99:i32 = load_vector_element %p, 1u
+            %100:i32 = add %99, 2i
+            %101:i32 = mul %100, 16i
+            %102:i32 = add %98, %101
+            %103:ptr<private, i32, read_write> = access %map, %102
+            %104:i32 = load %103
+            %105:bool = eq %104, 0i
+            store %x_171, %105
+            %106:bool = load %x_171
+            store %x_172, %106
             exit_if  # if_8
           }
         }
-        %99:bool = load %x_172
-        if %99 [t: %b16] {  # if_9
-          %b16 = block {  # true
-            %100:i32 = load %directions
-            %101:i32 = add %100, 1i
-            store %directions, %101
+        %107:bool = load %x_172
+        if %107 [t: $B16] {  # if_9
+          $B16: {  # true
+            %108:i32 = load %directions
+            %109:i32 = add %108, 1i
+            store %directions, %109
             exit_if  # if_9
           }
         }
@@ -213,392 +220,450 @@
         %x_394:ptr<function, bool, read_write> = var
         %x_406:ptr<function, bool, read_write> = var
         %x_407:ptr<function, bool, read_write> = var
-        %118:i32 = load %directions
-        %119:bool = eq %118, 0i
-        if %119 [t: %b17, f: %b18] {  # if_10
-          %b17 = block {  # true
+        %126:i32 = load %directions
+        %127:bool = eq %126, 0i
+        if %127 [t: $B17, f: $B18] {  # if_10
+          $B17: {  # true
             store %canwalk, false
             store %i, 0i
-            loop [b: %b19, c: %b20] {  # loop_3
-              %b19 = block {  # body
-                %x_186:i32 = load %i
-                %121:i32 = load %i
-                %122:bool = lt %121, 8i
-                if %122 [t: %b21, f: %b22] {  # if_11
-                  %b21 = block {  # true
+            loop [b: $B19, c: $B20] {  # loop_3
+              $B19: {  # body
+                %128:i32 = load %i
+                %x_186:i32 = let %128
+                %130:i32 = load %i
+                %131:bool = lt %130, 8i
+                if %131 [t: $B21, f: $B22] {  # if_11
+                  $B21: {  # true
                     exit_if  # if_11
                   }
-                  %b22 = block {  # false
+                  $B22: {  # false
                     exit_loop  # loop_3
                   }
                 }
                 store %j, 0i
-                %x_189:i32 = sub %x_156, %x_186
+                %132:i32 = sub %x_156, %x_186
+                %x_189:i32 = let %132
                 store %x_60, mat2x4<f32>(vec4<f32>(0.0f))
-                if false [t: %b23] {  # if_12
-                  %b23 = block {  # true
-                    continue %b20
+                if false [t: $B23] {  # if_12
+                  $B23: {  # true
+                    continue  # -> $B20
                   }
                 }
-                loop [b: %b24, c: %b25] {  # loop_4
-                  %b24 = block {  # body
-                    %124:i32 = load %j
-                    %125:bool = lt %124, 8i
-                    if %125 [t: %b26, f: %b27] {  # if_13
-                      %b26 = block {  # true
+                loop [b: $B24, c: $B25] {  # loop_4
+                  $B24: {  # body
+                    %134:i32 = load %j
+                    %135:bool = lt %134, 8i
+                    if %135 [t: $B26, f: $B27] {  # if_13
+                      $B26: {  # true
                         exit_if  # if_13
                       }
-                      %b27 = block {  # false
+                      $B27: {  # false
                         exit_loop  # loop_4
                       }
                     }
-                    %126:i32 = load %j
-                    %127:i32 = mul %126, 2i
-                    %128:i32 = load %i
-                    %129:i32 = mul %128, 2i
-                    %130:i32 = mul %129, 16i
-                    %131:i32 = add %127, %130
-                    %132:ptr<private, i32, read_write> = access %map, %131
-                    %133:i32 = load %132
-                    %134:bool = eq %133, 0i
-                    if %134 [t: %b28] {  # if_14
-                      %b28 = block {  # true
-                        %135:i32 = load %j
-                        %136:i32 = mul %135, 2i
-                        store_vector_element %p, 0u, %136
-                        %137:i32 = load %i
-                        %138:i32 = mul %137, 2i
-                        store_vector_element %p, 1u, %138
+                    %136:i32 = load %j
+                    %137:i32 = mul %136, 2i
+                    %138:i32 = load %i
+                    %139:i32 = mul %138, 2i
+                    %140:i32 = mul %139, 16i
+                    %141:i32 = add %137, %140
+                    %142:ptr<private, i32, read_write> = access %map, %141
+                    %143:i32 = load %142
+                    %144:bool = eq %143, 0i
+                    if %144 [t: $B28] {  # if_14
+                      $B28: {  # true
+                        %145:i32 = load %j
+                        %146:i32 = mul %145, 2i
+                        store_vector_element %p, 0u, %146
+                        %147:i32 = load %i
+                        %148:i32 = mul %147, 2i
+                        store_vector_element %p, 1u, %148
                         store %canwalk, true
                         exit_if  # if_14
                       }
                     }
-                    continue %b25
+                    continue  # -> $B25
                   }
-                  %b25 = block {  # continuing
-                    %139:i32 = load %j
-                    %140:i32 = add %139, 1i
-                    store %j, %140
-                    next_iteration %b24
+                  $B25: {  # continuing
+                    %149:i32 = load %j
+                    %150:i32 = add %149, 1i
+                    store %j, %150
+                    next_iteration  # -> $B24
                   }
                 }
-                continue %b20
+                continue  # -> $B20
               }
-              %b20 = block {  # continuing
-                %141:i32 = load %i
-                %142:i32 = add %141, 1i
-                store %i, %142
-                next_iteration %b19
+              $B20: {  # continuing
+                %151:i32 = load %i
+                %152:i32 = add %151, 1i
+                store %i, %152
+                next_iteration  # -> $B19
               }
             }
-            %x_219:i32 = load_vector_element %p, 0u
-            %x_221:i32 = load_vector_element %p, 1u
-            %145:i32 = mul %x_221, 16i
-            %146:i32 = add %x_219, %145
-            %147:ptr<private, i32, read_write> = access %map, %146
-            store %147, 1i
+            %153:i32 = load_vector_element %p, 0u
+            %x_219:i32 = let %153
+            %155:i32 = load_vector_element %p, 1u
+            %x_221:i32 = let %155
+            %157:i32 = mul %x_221, 16i
+            %158:i32 = add %x_219, %157
+            %159:ptr<private, i32, read_write> = access %map, %158
+            store %159, 1i
             exit_if  # if_10
           }
-          %b18 = block {  # false
-            %148:i32 = load %v
-            %149:i32 = load %directions
-            %150:i32 = mod %148, %149
-            store %d, %150
-            %151:i32 = load %v
-            %152:i32 = load %directions
-            %153:i32 = add %151, %152
-            store %v, %153
-            %154:i32 = load %d
-            %x_232:bool = gte %154, 0i
+          $B18: {  # false
+            %160:i32 = load %v
+            %161:i32 = load %directions
+            %162:i32 = call %tint_mod_i32, %160, %161
+            store %d, %162
+            %164:i32 = load %v
+            %165:i32 = load %directions
+            %166:i32 = add %164, %165
+            store %v, %166
+            %167:i32 = load %d
+            %168:bool = gte %167, 0i
+            %x_232:bool = let %168
             store %x_238, %x_232
-            if %x_232 [t: %b29] {  # if_15
-              %b29 = block {  # true
-                %156:i32 = load_vector_element %p, 0u
-                %157:bool = gt %156, 0i
-                store %x_237, %157
-                %158:bool = load %x_237
-                store %x_238, %158
+            if %x_232 [t: $B29] {  # if_15
+              $B29: {  # true
+                %170:i32 = load_vector_element %p, 0u
+                %171:bool = gt %170, 0i
+                store %x_237, %171
+                %172:bool = load %x_237
+                store %x_238, %172
                 exit_if  # if_15
               }
             }
-            %159:bool = load %x_238
-            store %x_251, %159
-            %160:bool = load %x_238
-            if %160 [t: %b30] {  # if_16
-              %b30 = block {  # true
-                %161:i32 = load_vector_element %p, 0u
-                %162:i32 = sub %161, 2i
-                %163:i32 = load_vector_element %p, 1u
-                %164:i32 = mul %163, 16i
-                %165:i32 = add %162, %164
-                %166:ptr<private, i32, read_write> = access %map, %165
-                %167:i32 = load %166
-                %168:bool = eq %167, 0i
-                store %x_250, %168
-                %169:bool = load %x_250
-                store %x_251, %169
+            %173:bool = load %x_238
+            store %x_251, %173
+            %174:bool = load %x_238
+            if %174 [t: $B30] {  # if_16
+              $B30: {  # true
+                %175:i32 = load_vector_element %p, 0u
+                %176:i32 = sub %175, 2i
+                %177:i32 = load_vector_element %p, 1u
+                %178:i32 = mul %177, 16i
+                %179:i32 = add %176, %178
+                %180:ptr<private, i32, read_write> = access %map, %179
+                %181:i32 = load %180
+                %182:bool = eq %181, 0i
+                store %x_250, %182
+                %183:bool = load %x_250
+                store %x_251, %183
                 exit_if  # if_16
               }
             }
-            %170:bool = load %x_251
-            if %170 [t: %b31] {  # if_17
-              %b31 = block {  # true
-                %171:i32 = load %d
-                %172:i32 = sub %171, 1i
-                store %d, %172
-                %x_257:i32 = load_vector_element %p, 0u
-                %x_259:i32 = load_vector_element %p, 1u
-                %175:i32 = mul %x_259, 16i
-                %176:i32 = add %x_257, %175
-                %177:ptr<private, i32, read_write> = access %map, %176
-                store %177, 1i
-                %x_264:i32 = load_vector_element %p, 0u
-                %x_267:i32 = load_vector_element %p, 1u
-                %180:i32 = sub %x_264, 1i
-                %181:i32 = mul %x_267, 16i
-                %182:i32 = add %180, %181
-                %183:ptr<private, i32, read_write> = access %map, %182
-                store %183, 1i
-                %x_272:i32 = load_vector_element %p, 0u
-                %x_275:i32 = load_vector_element %p, 1u
-                %186:i32 = sub %x_272, 2i
-                %187:i32 = mul %x_275, 16i
-                %188:i32 = add %186, %187
-                %189:ptr<private, i32, read_write> = access %map, %188
-                store %189, 1i
-                %190:i32 = load_vector_element %p, 0u
-                %191:i32 = sub %190, 2i
-                store_vector_element %p, 0u, %191
+            %184:bool = load %x_251
+            if %184 [t: $B31] {  # if_17
+              $B31: {  # true
+                %185:i32 = load %d
+                %186:i32 = sub %185, 1i
+                store %d, %186
+                %187:i32 = load_vector_element %p, 0u
+                %x_257:i32 = let %187
+                %189:i32 = load_vector_element %p, 1u
+                %x_259:i32 = let %189
+                %191:i32 = mul %x_259, 16i
+                %192:i32 = add %x_257, %191
+                %193:ptr<private, i32, read_write> = access %map, %192
+                store %193, 1i
+                %194:i32 = load_vector_element %p, 0u
+                %x_264:i32 = let %194
+                %196:i32 = load_vector_element %p, 1u
+                %x_267:i32 = let %196
+                %198:i32 = sub %x_264, 1i
+                %199:i32 = mul %x_267, 16i
+                %200:i32 = add %198, %199
+                %201:ptr<private, i32, read_write> = access %map, %200
+                store %201, 1i
+                %202:i32 = load_vector_element %p, 0u
+                %x_272:i32 = let %202
+                %204:i32 = load_vector_element %p, 1u
+                %x_275:i32 = let %204
+                %206:i32 = sub %x_272, 2i
+                %207:i32 = mul %x_275, 16i
+                %208:i32 = add %206, %207
+                %209:ptr<private, i32, read_write> = access %map, %208
+                store %209, 1i
+                %210:i32 = load_vector_element %p, 0u
+                %211:i32 = sub %210, 2i
+                store_vector_element %p, 0u, %211
                 exit_if  # if_17
               }
             }
-            %192:i32 = load %d
-            %x_284:bool = gte %192, 0i
+            %212:i32 = load %d
+            %213:bool = gte %212, 0i
+            %x_284:bool = let %213
             store %x_290, %x_284
-            if %x_284 [t: %b32] {  # if_18
-              %b32 = block {  # true
-                %194:i32 = load_vector_element %p, 1u
-                %195:bool = gt %194, 0i
-                store %x_289, %195
-                %196:bool = load %x_289
-                store %x_290, %196
+            if %x_284 [t: $B32] {  # if_18
+              $B32: {  # true
+                %215:i32 = load_vector_element %p, 1u
+                %216:bool = gt %215, 0i
+                store %x_289, %216
+                %217:bool = load %x_289
+                store %x_290, %217
                 exit_if  # if_18
               }
             }
-            %197:bool = load %x_290
-            store %x_303, %197
-            %198:bool = load %x_290
-            if %198 [t: %b33] {  # if_19
-              %b33 = block {  # true
-                %199:i32 = load_vector_element %p, 0u
-                %200:i32 = load_vector_element %p, 1u
-                %201:i32 = sub %200, 2i
-                %202:i32 = mul %201, 16i
-                %203:i32 = add %199, %202
-                %204:ptr<private, i32, read_write> = access %map, %203
-                %205:i32 = load %204
-                %206:bool = eq %205, 0i
-                store %x_302, %206
-                %207:bool = load %x_302
-                store %x_303, %207
+            %218:bool = load %x_290
+            store %x_303, %218
+            %219:bool = load %x_290
+            if %219 [t: $B33] {  # if_19
+              $B33: {  # true
+                %220:i32 = load_vector_element %p, 0u
+                %221:i32 = load_vector_element %p, 1u
+                %222:i32 = sub %221, 2i
+                %223:i32 = mul %222, 16i
+                %224:i32 = add %220, %223
+                %225:ptr<private, i32, read_write> = access %map, %224
+                %226:i32 = load %225
+                %227:bool = eq %226, 0i
+                store %x_302, %227
+                %228:bool = load %x_302
+                store %x_303, %228
                 exit_if  # if_19
               }
             }
-            %208:bool = load %x_303
-            if %208 [t: %b34] {  # if_20
-              %b34 = block {  # true
-                %209:i32 = load %d
-                %210:i32 = sub %209, 1i
-                store %d, %210
-                %x_309:i32 = load_vector_element %p, 0u
-                %x_311:i32 = load_vector_element %p, 1u
-                %213:i32 = mul %x_311, 16i
-                %214:i32 = add %x_309, %213
-                %215:ptr<private, i32, read_write> = access %map, %214
-                store %215, 1i
-                %x_316:i32 = load_vector_element %p, 0u
-                %x_318:i32 = load_vector_element %p, 1u
-                %218:i32 = sub %x_318, 1i
-                %219:i32 = mul %218, 16i
-                %220:i32 = add %x_316, %219
-                %221:ptr<private, i32, read_write> = access %map, %220
-                store %221, 1i
-                %x_324:i32 = load_vector_element %p, 0u
-                %x_326:i32 = load_vector_element %p, 1u
-                %224:i32 = sub %x_326, 2i
-                %225:i32 = mul %224, 16i
-                %226:i32 = add %x_324, %225
-                %227:ptr<private, i32, read_write> = access %map, %226
-                store %227, 1i
-                %228:i32 = load_vector_element %p, 1u
-                %229:i32 = sub %228, 2i
-                store_vector_element %p, 1u, %229
+            %229:bool = load %x_303
+            if %229 [t: $B34] {  # if_20
+              $B34: {  # true
+                %230:i32 = load %d
+                %231:i32 = sub %230, 1i
+                store %d, %231
+                %232:i32 = load_vector_element %p, 0u
+                %x_309:i32 = let %232
+                %234:i32 = load_vector_element %p, 1u
+                %x_311:i32 = let %234
+                %236:i32 = mul %x_311, 16i
+                %237:i32 = add %x_309, %236
+                %238:ptr<private, i32, read_write> = access %map, %237
+                store %238, 1i
+                %239:i32 = load_vector_element %p, 0u
+                %x_316:i32 = let %239
+                %241:i32 = load_vector_element %p, 1u
+                %x_318:i32 = let %241
+                %243:i32 = sub %x_318, 1i
+                %244:i32 = mul %243, 16i
+                %245:i32 = add %x_316, %244
+                %246:ptr<private, i32, read_write> = access %map, %245
+                store %246, 1i
+                %247:i32 = load_vector_element %p, 0u
+                %x_324:i32 = let %247
+                %249:i32 = load_vector_element %p, 1u
+                %x_326:i32 = let %249
+                %251:i32 = sub %x_326, 2i
+                %252:i32 = mul %251, 16i
+                %253:i32 = add %x_324, %252
+                %254:ptr<private, i32, read_write> = access %map, %253
+                store %254, 1i
+                %255:i32 = load_vector_element %p, 1u
+                %256:i32 = sub %255, 2i
+                store_vector_element %p, 1u, %256
                 exit_if  # if_20
               }
             }
-            %230:i32 = load %d
-            %x_336:bool = gte %230, 0i
+            %257:i32 = load %d
+            %258:bool = gte %257, 0i
+            %x_336:bool = let %258
             store %x_342, %x_336
-            if %x_336 [t: %b35] {  # if_21
-              %b35 = block {  # true
-                %232:i32 = load_vector_element %p, 0u
-                %233:bool = lt %232, 14i
-                store %x_341, %233
-                %234:bool = load %x_341
-                store %x_342, %234
+            if %x_336 [t: $B35] {  # if_21
+              $B35: {  # true
+                %260:i32 = load_vector_element %p, 0u
+                %261:bool = lt %260, 14i
+                store %x_341, %261
+                %262:bool = load %x_341
+                store %x_342, %262
                 exit_if  # if_21
               }
             }
-            %235:bool = load %x_342
-            store %x_355, %235
-            %236:bool = load %x_342
-            if %236 [t: %b36] {  # if_22
-              %b36 = block {  # true
-                %237:i32 = load_vector_element %p, 0u
-                %238:i32 = add %237, 2i
-                %239:i32 = load_vector_element %p, 1u
-                %240:i32 = mul %239, 16i
-                %241:i32 = add %238, %240
-                %242:ptr<private, i32, read_write> = access %map, %241
-                %243:i32 = load %242
-                %244:bool = eq %243, 0i
-                store %x_354, %244
-                %245:bool = load %x_354
-                store %x_355, %245
+            %263:bool = load %x_342
+            store %x_355, %263
+            %264:bool = load %x_342
+            if %264 [t: $B36] {  # if_22
+              $B36: {  # true
+                %265:i32 = load_vector_element %p, 0u
+                %266:i32 = add %265, 2i
+                %267:i32 = load_vector_element %p, 1u
+                %268:i32 = mul %267, 16i
+                %269:i32 = add %266, %268
+                %270:ptr<private, i32, read_write> = access %map, %269
+                %271:i32 = load %270
+                %272:bool = eq %271, 0i
+                store %x_354, %272
+                %273:bool = load %x_354
+                store %x_355, %273
                 exit_if  # if_22
               }
             }
-            %246:bool = load %x_355
-            if %246 [t: %b37] {  # if_23
-              %b37 = block {  # true
-                %247:i32 = load %d
-                %248:i32 = sub %247, 1i
-                store %d, %248
-                %x_361:i32 = load_vector_element %p, 0u
-                %x_363:i32 = load_vector_element %p, 1u
-                %251:i32 = mul %x_363, 16i
-                %252:i32 = add %x_361, %251
-                %253:ptr<private, i32, read_write> = access %map, %252
-                store %253, 1i
-                %x_368:i32 = load_vector_element %p, 0u
-                %x_371:i32 = load_vector_element %p, 1u
-                %256:i32 = add %x_368, 1i
-                %257:i32 = mul %x_371, 16i
-                %258:i32 = add %256, %257
-                %259:ptr<private, i32, read_write> = access %map, %258
-                store %259, 1i
-                %x_376:i32 = load_vector_element %p, 0u
-                %x_379:i32 = load_vector_element %p, 1u
-                %262:i32 = add %x_376, 2i
-                %263:i32 = mul %x_379, 16i
-                %264:i32 = add %262, %263
-                %265:ptr<private, i32, read_write> = access %map, %264
-                store %265, 1i
-                %266:i32 = load_vector_element %p, 0u
-                %267:i32 = add %266, 2i
-                store_vector_element %p, 0u, %267
+            %274:bool = load %x_355
+            if %274 [t: $B37] {  # if_23
+              $B37: {  # true
+                %275:i32 = load %d
+                %276:i32 = sub %275, 1i
+                store %d, %276
+                %277:i32 = load_vector_element %p, 0u
+                %x_361:i32 = let %277
+                %279:i32 = load_vector_element %p, 1u
+                %x_363:i32 = let %279
+                %281:i32 = mul %x_363, 16i
+                %282:i32 = add %x_361, %281
+                %283:ptr<private, i32, read_write> = access %map, %282
+                store %283, 1i
+                %284:i32 = load_vector_element %p, 0u
+                %x_368:i32 = let %284
+                %286:i32 = load_vector_element %p, 1u
+                %x_371:i32 = let %286
+                %288:i32 = add %x_368, 1i
+                %289:i32 = mul %x_371, 16i
+                %290:i32 = add %288, %289
+                %291:ptr<private, i32, read_write> = access %map, %290
+                store %291, 1i
+                %292:i32 = load_vector_element %p, 0u
+                %x_376:i32 = let %292
+                %294:i32 = load_vector_element %p, 1u
+                %x_379:i32 = let %294
+                %296:i32 = add %x_376, 2i
+                %297:i32 = mul %x_379, 16i
+                %298:i32 = add %296, %297
+                %299:ptr<private, i32, read_write> = access %map, %298
+                store %299, 1i
+                %300:i32 = load_vector_element %p, 0u
+                %301:i32 = add %300, 2i
+                store_vector_element %p, 0u, %301
                 exit_if  # if_23
               }
             }
-            %268:i32 = load %d
-            %x_388:bool = gte %268, 0i
+            %302:i32 = load %d
+            %303:bool = gte %302, 0i
+            %x_388:bool = let %303
             store %x_394, %x_388
-            if %x_388 [t: %b38] {  # if_24
-              %b38 = block {  # true
-                %270:i32 = load_vector_element %p, 1u
-                %271:bool = lt %270, 14i
-                store %x_393, %271
-                %272:bool = load %x_393
-                store %x_394, %272
+            if %x_388 [t: $B38] {  # if_24
+              $B38: {  # true
+                %305:i32 = load_vector_element %p, 1u
+                %306:bool = lt %305, 14i
+                store %x_393, %306
+                %307:bool = load %x_393
+                store %x_394, %307
                 exit_if  # if_24
               }
             }
-            %273:bool = load %x_394
-            store %x_407, %273
-            %274:bool = load %x_394
-            if %274 [t: %b39] {  # if_25
-              %b39 = block {  # true
-                %275:i32 = load_vector_element %p, 0u
-                %276:i32 = load_vector_element %p, 1u
-                %277:i32 = add %276, 2i
-                %278:i32 = mul %277, 16i
-                %279:i32 = add %275, %278
-                %280:ptr<private, i32, read_write> = access %map, %279
-                %281:i32 = load %280
-                %282:bool = eq %281, 0i
-                store %x_406, %282
-                %283:bool = load %x_406
-                store %x_407, %283
+            %308:bool = load %x_394
+            store %x_407, %308
+            %309:bool = load %x_394
+            if %309 [t: $B39] {  # if_25
+              $B39: {  # true
+                %310:i32 = load_vector_element %p, 0u
+                %311:i32 = load_vector_element %p, 1u
+                %312:i32 = add %311, 2i
+                %313:i32 = mul %312, 16i
+                %314:i32 = add %310, %313
+                %315:ptr<private, i32, read_write> = access %map, %314
+                %316:i32 = load %315
+                %317:bool = eq %316, 0i
+                store %x_406, %317
+                %318:bool = load %x_406
+                store %x_407, %318
                 exit_if  # if_25
               }
             }
-            %284:bool = load %x_407
-            if %284 [t: %b40] {  # if_26
-              %b40 = block {  # true
-                %285:i32 = load %d
-                %286:i32 = sub %285, 1i
-                store %d, %286
-                %x_413:i32 = load_vector_element %p, 0u
-                %x_415:i32 = load_vector_element %p, 1u
-                %289:i32 = mul %x_415, 16i
-                %290:i32 = add %x_413, %289
-                %291:ptr<private, i32, read_write> = access %map, %290
-                store %291, 1i
-                %x_420:i32 = load_vector_element %p, 0u
-                %x_422:i32 = load_vector_element %p, 1u
-                %294:i32 = add %x_422, 1i
-                %295:i32 = mul %294, 16i
-                %296:i32 = add %x_420, %295
-                %297:ptr<private, i32, read_write> = access %map, %296
-                store %297, 1i
-                %x_428:i32 = load_vector_element %p, 0u
-                %x_430:i32 = load_vector_element %p, 1u
-                %300:i32 = add %x_430, 2i
-                %301:i32 = mul %300, 16i
-                %302:i32 = add %x_428, %301
-                %303:ptr<private, i32, read_write> = access %map, %302
-                store %303, 1i
-                %304:i32 = load_vector_element %p, 1u
-                %305:i32 = add %304, 2i
-                store_vector_element %p, 1u, %305
+            %319:bool = load %x_407
+            if %319 [t: $B40] {  # if_26
+              $B40: {  # true
+                %320:i32 = load %d
+                %321:i32 = sub %320, 1i
+                store %d, %321
+                %322:i32 = load_vector_element %p, 0u
+                %x_413:i32 = let %322
+                %324:i32 = load_vector_element %p, 1u
+                %x_415:i32 = let %324
+                %326:i32 = mul %x_415, 16i
+                %327:i32 = add %x_413, %326
+                %328:ptr<private, i32, read_write> = access %map, %327
+                store %328, 1i
+                %329:i32 = load_vector_element %p, 0u
+                %x_420:i32 = let %329
+                %331:i32 = load_vector_element %p, 1u
+                %x_422:i32 = let %331
+                %333:i32 = add %x_422, 1i
+                %334:i32 = mul %333, 16i
+                %335:i32 = add %x_420, %334
+                %336:ptr<private, i32, read_write> = access %map, %335
+                store %336, 1i
+                %337:i32 = load_vector_element %p, 0u
+                %x_428:i32 = let %337
+                %339:i32 = load_vector_element %p, 1u
+                %x_430:i32 = let %339
+                %341:i32 = add %x_430, 2i
+                %342:i32 = mul %341, 16i
+                %343:i32 = add %x_428, %342
+                %344:ptr<private, i32, read_write> = access %map, %343
+                store %344, 1i
+                %345:i32 = load_vector_element %p, 1u
+                %346:i32 = add %345, 2i
+                store_vector_element %p, 1u, %346
                 exit_if  # if_26
               }
             }
             exit_if  # if_10
           }
         }
-        %306:i32 = load_vector_element %ipos, 1u
-        %307:i32 = mul %306, 16i
-        %308:i32 = load_vector_element %ipos, 0u
-        %309:i32 = add %307, %308
-        %310:ptr<private, i32, read_write> = access %map, %309
-        %311:i32 = load %310
-        %312:bool = eq %311, 1i
-        if %312 [t: %b41] {  # if_27
-          %b41 = block {  # true
+        %347:i32 = load_vector_element %ipos, 1u
+        %348:i32 = mul %347, 16i
+        %349:i32 = load_vector_element %ipos, 0u
+        %350:i32 = add %348, %349
+        %351:ptr<private, i32, read_write> = access %map, %350
+        %352:i32 = load %351
+        %353:bool = eq %352, 1i
+        if %353 [t: $B41] {  # if_27
+          $B41: {  # true
             store %x_GLF_color, vec4<f32>(1.0f)
             ret
           }
         }
-        continue %b8
+        continue  # -> $B8
       }
-      %b8 = block {  # continuing
-        %x_450:bool = load %canwalk
-        %314:bool = eq %x_450, false
-        break_if %314 %b7
+      $B8: {  # continuing
+        %354:bool = load %canwalk
+        %x_450:bool = let %354
+        %356:bool = eq %x_450, false
+        break_if %356  # -> [t: exit_loop loop_2, f: $B7]
       }
     }
     store %x_GLF_color, vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f)
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b42 {
-  %b42 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B42: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %317:void = call %main_1
-    %318:vec4<f32> = load %x_GLF_color
-    %319:main_out = construct %318
-    ret %319
+    %359:void = call %main_1
+    %360:vec4<f32> = load %x_GLF_color
+    %361:main_out = construct %360
+    ret %361
+  }
+}
+%tint_mod_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B43: {
+    %364:bool = eq %rhs, 0i
+    %365:bool = eq %lhs, -2147483648i
+    %366:bool = eq %rhs, -1i
+    %367:bool = and %365, %366
+    %368:bool = or %364, %367
+    %369:i32 = select %rhs, 1i, %368
+    %370:i32 = let %369
+    %371:i32 = div %lhs, %370
+    %372:i32 = mul %371, %370
+    %373:i32 = sub %lhs, %372
+    ret %373
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B44: {
+    %375:i32 = convert %value
+    %376:bool = gte %value, -2147483648.0f
+    %377:i32 = select -2147483648i, %375, %376
+    %378:bool = lte %value, 2147483520.0f
+    %379:i32 = select 2147483647i, %377, %378
+    ret %379
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-dead-break-and-unroll/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-dead-break-and-unroll/1.wgsl.expected.ir.msl
index db37090..4af85c3 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-dead-break-and-unroll/1.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-dead-break-and-unroll/1.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,7 +8,7 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %map:ptr<private, array<i32, 256>, read_write> = var
@@ -16,8 +16,8 @@
   %x_60:ptr<private, mat2x4<f32>, read_write> = var, mat2x4<f32>(vec4<f32>(0.0f))
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %pos:ptr<function, vec2<f32>, read_write> = var
     %ipos:ptr<function, vec2<i32>, read_write> = var
     %i:ptr<function, i32, read_write> = var
@@ -27,53 +27,61 @@
     %directions:ptr<function, i32, read_write> = var
     %j:ptr<function, i32, read_write> = var
     %d:ptr<function, i32, read_write> = var
-    %x_63:vec4<f32> = load %gl_FragCoord
-    %17:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-    %x_67:vec2<f32> = load %17
+    %16:vec4<f32> = load %gl_FragCoord
+    %x_63:vec4<f32> = let %16
+    %18:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
+    %19:vec2<f32> = load %18
+    %x_67:vec2<f32> = let %19
     %x_68:i32 = let -242i
-    %20:f32 = access %x_63, 0u
-    %21:f32 = access %x_63, 1u
-    %22:vec2<f32> = construct %20, %21
-    %23:vec2<f32> = div %22, %x_67
-    store %pos, %23
-    %x_71:f32 = load_vector_element %pos, 0u
-    %x_75:f32 = load_vector_element %pos, 1u
-    %26:f32 = mul %x_71, 16.0f
-    %27:i32 = convert %26
-    %28:f32 = mul %x_75, 16.0f
-    %29:i32 = convert %28
-    %30:vec2<i32> = construct %27, %29
-    store %ipos, %30
+    %22:f32 = access %x_63, 0u
+    %23:f32 = access %x_63, 1u
+    %24:vec2<f32> = construct %22, %23
+    %25:vec2<f32> = div %24, %x_67
+    store %pos, %25
+    %26:f32 = load_vector_element %pos, 0u
+    %x_71:f32 = let %26
+    %28:f32 = load_vector_element %pos, 1u
+    %x_75:f32 = let %28
+    %30:f32 = mul %x_71, 16.0f
+    %31:i32 = call %tint_f32_to_i32, %30
+    %33:i32 = let %31
+    %34:f32 = mul %x_75, 16.0f
+    %35:i32 = call %tint_f32_to_i32, %34
+    %36:vec2<i32> = construct %33, %35
+    store %ipos, %36
     store %i, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_83:i32 = load %i
-        %32:bool = lt %x_83, 256i
-        if %32 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %37:i32 = load %i
+        %x_83:i32 = let %37
+        %39:bool = lt %x_83, 256i
+        if %39 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_86:i32 = load %i
-        %34:ptr<private, i32, read_write> = access %map, %x_86
-        store %34, 0i
-        continue %b4
+        %40:i32 = load %i
+        %x_86:i32 = let %40
+        %42:ptr<private, i32, read_write> = access %map, %x_86
+        store %42, 0i
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_88:i32 = load %i
-        %36:i32 = add %x_88, 1i
-        store %i, %36
-        next_iteration %b3
+      $B4: {  # continuing
+        %43:i32 = load %i
+        %x_88:i32 = let %43
+        %45:i32 = add %x_88, 1i
+        store %i, %45
+        next_iteration  # -> $B3
       }
     }
     store %p, vec2<i32>(0i)
     store %canwalk, true
     store %v, 0i
-    loop [b: %b7, c: %b8] {  # loop_2
-      %b7 = block {  # body
+    loop [b: $B7, c: $B8] {  # loop_2
+      $B7: {  # body
         %x_110:ptr<function, bool, read_write> = var
         %x_130:ptr<function, bool, read_write> = var
         %x_150:ptr<function, bool, read_write> = var
@@ -82,120 +90,150 @@
         %x_131_phi:ptr<function, bool, read_write> = var
         %x_151_phi:ptr<function, bool, read_write> = var
         %x_172_phi:ptr<function, bool, read_write> = var
-        %x_94:i32 = load %v
-        %46:i32 = add %x_94, 1i
-        store %v, %46
+        %54:i32 = load %v
+        %x_94:i32 = let %54
+        %56:i32 = add %x_94, 1i
+        store %v, %56
         store %directions, 0i
-        %x_97:i32 = load_vector_element %p, 0u
-        %x_98:bool = gt %x_97, 0i
+        %57:i32 = load_vector_element %p, 0u
+        %x_97:i32 = let %57
+        %59:bool = gt %x_97, 0i
+        %x_98:bool = let %59
         store %x_111_phi, %x_98
-        if %x_98 [t: %b9] {  # if_2
-          %b9 = block {  # true
-            %x_102:i32 = load_vector_element %p, 0u
-            %x_105:i32 = load_vector_element %p, 1u
-            %51:i32 = sub %x_102, 2i
-            %52:i32 = mul %x_105, 16i
-            %53:i32 = add %51, %52
-            %54:ptr<private, i32, read_write> = access %map, %53
-            %x_109:i32 = load %54
-            %56:bool = eq %x_109, 0i
-            store %x_110, %56
-            %57:bool = load %x_110
-            store %x_111_phi, %57
+        if %x_98 [t: $B9] {  # if_2
+          $B9: {  # true
+            %61:i32 = load_vector_element %p, 0u
+            %x_102:i32 = let %61
+            %63:i32 = load_vector_element %p, 1u
+            %x_105:i32 = let %63
+            %65:i32 = sub %x_102, 2i
+            %66:i32 = mul %x_105, 16i
+            %67:i32 = add %65, %66
+            %68:ptr<private, i32, read_write> = access %map, %67
+            %69:i32 = load %68
+            %x_109:i32 = let %69
+            %71:bool = eq %x_109, 0i
+            store %x_110, %71
+            %72:bool = load %x_110
+            store %x_111_phi, %72
             exit_if  # if_2
           }
         }
-        %x_111:bool = load %x_111_phi
-        if %x_111 [t: %b10] {  # if_3
-          %b10 = block {  # true
-            %x_114:i32 = load %directions
-            %60:i32 = add %x_114, 1i
-            store %directions, %60
+        %73:bool = load %x_111_phi
+        %x_111:bool = let %73
+        if %x_111 [t: $B10] {  # if_3
+          $B10: {  # true
+            %75:i32 = load %directions
+            %x_114:i32 = let %75
+            %77:i32 = add %x_114, 1i
+            store %directions, %77
             exit_if  # if_3
           }
         }
-        %x_117:i32 = load_vector_element %p, 1u
-        %x_118:bool = gt %x_117, 0i
+        %78:i32 = load_vector_element %p, 1u
+        %x_117:i32 = let %78
+        %80:bool = gt %x_117, 0i
+        %x_118:bool = let %80
         store %x_131_phi, %x_118
-        if %x_118 [t: %b11] {  # if_4
-          %b11 = block {  # true
-            %x_122:i32 = load_vector_element %p, 0u
-            %x_124:i32 = load_vector_element %p, 1u
-            %65:i32 = sub %x_124, 2i
-            %66:i32 = mul %65, 16i
-            %67:i32 = add %x_122, %66
-            %68:ptr<private, i32, read_write> = access %map, %67
-            %x_129:i32 = load %68
-            %70:bool = eq %x_129, 0i
-            store %x_130, %70
-            %71:bool = load %x_130
-            store %x_131_phi, %71
+        if %x_118 [t: $B11] {  # if_4
+          $B11: {  # true
+            %82:i32 = load_vector_element %p, 0u
+            %x_122:i32 = let %82
+            %84:i32 = load_vector_element %p, 1u
+            %x_124:i32 = let %84
+            %86:i32 = sub %x_124, 2i
+            %87:i32 = mul %86, 16i
+            %88:i32 = add %x_122, %87
+            %89:ptr<private, i32, read_write> = access %map, %88
+            %90:i32 = load %89
+            %x_129:i32 = let %90
+            %92:bool = eq %x_129, 0i
+            store %x_130, %92
+            %93:bool = load %x_130
+            store %x_131_phi, %93
             exit_if  # if_4
           }
         }
-        %x_131:bool = load %x_131_phi
-        if %x_131 [t: %b12] {  # if_5
-          %b12 = block {  # true
-            %x_134:i32 = load %directions
-            %74:i32 = add %x_134, 1i
-            store %directions, %74
+        %94:bool = load %x_131_phi
+        %x_131:bool = let %94
+        if %x_131 [t: $B12] {  # if_5
+          $B12: {  # true
+            %96:i32 = load %directions
+            %x_134:i32 = let %96
+            %98:i32 = add %x_134, 1i
+            store %directions, %98
             exit_if  # if_5
           }
         }
-        %x_137:i32 = load_vector_element %p, 0u
-        %x_138:bool = lt %x_137, 14i
+        %99:i32 = load_vector_element %p, 0u
+        %x_137:i32 = let %99
+        %101:bool = lt %x_137, 14i
+        %x_138:bool = let %101
         store %x_151_phi, %x_138
-        if %x_138 [t: %b13] {  # if_6
-          %b13 = block {  # true
-            %x_142:i32 = load_vector_element %p, 0u
-            %x_145:i32 = load_vector_element %p, 1u
-            %79:i32 = add %x_142, 2i
-            %80:i32 = mul %x_145, 16i
-            %81:i32 = add %79, %80
-            %82:ptr<private, i32, read_write> = access %map, %81
-            %x_149:i32 = load %82
-            %84:bool = eq %x_149, 0i
-            store %x_150, %84
-            %85:bool = load %x_150
-            store %x_151_phi, %85
+        if %x_138 [t: $B13] {  # if_6
+          $B13: {  # true
+            %103:i32 = load_vector_element %p, 0u
+            %x_142:i32 = let %103
+            %105:i32 = load_vector_element %p, 1u
+            %x_145:i32 = let %105
+            %107:i32 = add %x_142, 2i
+            %108:i32 = mul %x_145, 16i
+            %109:i32 = add %107, %108
+            %110:ptr<private, i32, read_write> = access %map, %109
+            %111:i32 = load %110
+            %x_149:i32 = let %111
+            %113:bool = eq %x_149, 0i
+            store %x_150, %113
+            %114:bool = load %x_150
+            store %x_151_phi, %114
             exit_if  # if_6
           }
         }
-        %x_151:bool = load %x_151_phi
-        if %x_151 [t: %b14] {  # if_7
-          %b14 = block {  # true
-            %x_154:i32 = load %directions
-            %88:i32 = add %x_154, 1i
-            store %directions, %88
+        %115:bool = load %x_151_phi
+        %x_151:bool = let %115
+        if %x_151 [t: $B14] {  # if_7
+          $B14: {  # true
+            %117:i32 = load %directions
+            %x_154:i32 = let %117
+            %119:i32 = add %x_154, 1i
+            store %directions, %119
             exit_if  # if_7
           }
         }
-        %x_156:i32 = sub 256i, %x_68
-        %x_158:i32 = load_vector_element %p, 1u
-        %x_159:bool = lt %x_158, 14i
+        %120:i32 = sub 256i, %x_68
+        %x_156:i32 = let %120
+        %122:i32 = load_vector_element %p, 1u
+        %x_158:i32 = let %122
+        %124:bool = lt %x_158, 14i
+        %x_159:bool = let %124
         store %x_172_phi, %x_159
-        if %x_159 [t: %b15] {  # if_8
-          %b15 = block {  # true
-            %x_163:i32 = load_vector_element %p, 0u
-            %x_165:i32 = load_vector_element %p, 1u
-            %94:i32 = add %x_165, 2i
-            %95:i32 = mul %94, 16i
-            %96:i32 = add %x_163, %95
-            %97:ptr<private, i32, read_write> = access %map, %96
-            %x_170:i32 = load %97
-            %99:bool = eq %x_170, 0i
-            store %x_171, %99
-            %100:bool = load %x_171
-            store %x_172_phi, %100
+        if %x_159 [t: $B15] {  # if_8
+          $B15: {  # true
+            %126:i32 = load_vector_element %p, 0u
+            %x_163:i32 = let %126
+            %128:i32 = load_vector_element %p, 1u
+            %x_165:i32 = let %128
+            %130:i32 = add %x_165, 2i
+            %131:i32 = mul %130, 16i
+            %132:i32 = add %x_163, %131
+            %133:ptr<private, i32, read_write> = access %map, %132
+            %134:i32 = load %133
+            %x_170:i32 = let %134
+            %136:bool = eq %x_170, 0i
+            store %x_171, %136
+            %137:bool = load %x_171
+            store %x_172_phi, %137
             exit_if  # if_8
           }
         }
-        %x_172:bool = load %x_172_phi
-        if %x_172 [t: %b16] {  # if_9
-          %b16 = block {  # true
-            %x_175:i32 = load %directions
-            %103:i32 = add %x_175, 1i
-            store %directions, %103
+        %138:bool = load %x_172_phi
+        %x_172:bool = let %138
+        if %x_172 [t: $B16] {  # if_9
+          $B16: {  # true
+            %140:i32 = load %directions
+            %x_175:i32 = let %140
+            %142:i32 = add %x_175, 1i
+            store %directions, %142
             exit_if  # if_9
           }
         }
@@ -215,387 +253,497 @@
         %x_355_phi:ptr<function, bool, read_write> = var
         %x_394_phi:ptr<function, bool, read_write> = var
         %x_407_phi:ptr<function, bool, read_write> = var
-        %x_177:i32 = load %directions
-        %121:bool = eq %x_177, 0i
-        if %121 [t: %b17, f: %b18] {  # if_10
-          %b17 = block {  # true
+        %159:i32 = load %directions
+        %x_177:i32 = let %159
+        %161:bool = eq %x_177, 0i
+        if %161 [t: $B17, f: $B18] {  # if_10
+          $B17: {  # true
             store %canwalk, false
             store %i, 0i
-            loop [b: %b19, c: %b20] {  # loop_3
-              %b19 = block {  # body
-                %x_186:i32 = load %i
-                %123:bool = lt %x_186, 8i
-                if %123 [t: %b21, f: %b22] {  # if_11
-                  %b21 = block {  # true
+            loop [b: $B19, c: $B20] {  # loop_3
+              $B19: {  # body
+                %162:i32 = load %i
+                %x_186:i32 = let %162
+                %164:bool = lt %x_186, 8i
+                if %164 [t: $B21, f: $B22] {  # if_11
+                  $B21: {  # true
                     exit_if  # if_11
                   }
-                  %b22 = block {  # false
+                  $B22: {  # false
                     exit_loop  # loop_3
                   }
                 }
                 store %j, 0i
-                %x_189:i32 = sub %x_156, %x_186
+                %165:i32 = sub %x_156, %x_186
+                %x_189:i32 = let %165
                 store %x_60, mat2x4<f32>(vec4<f32>(0.0f))
-                if false [t: %b23] {  # if_12
-                  %b23 = block {  # true
-                    continue %b20
+                if false [t: $B23] {  # if_12
+                  $B23: {  # true
+                    continue  # -> $B20
                   }
                 }
-                loop [b: %b24, c: %b25] {  # loop_4
-                  %b24 = block {  # body
-                    %x_194:i32 = load %j
-                    %126:bool = lt %x_194, 8i
-                    if %126 [t: %b26, f: %b27] {  # if_13
-                      %b26 = block {  # true
+                loop [b: $B24, c: $B25] {  # loop_4
+                  $B24: {  # body
+                    %167:i32 = load %j
+                    %x_194:i32 = let %167
+                    %169:bool = lt %x_194, 8i
+                    if %169 [t: $B26, f: $B27] {  # if_13
+                      $B26: {  # true
                         exit_if  # if_13
                       }
-                      %b27 = block {  # false
+                      $B27: {  # false
                         exit_loop  # loop_4
                       }
                     }
-                    %x_197:i32 = load %j
-                    %x_199:i32 = load %i
-                    %129:i32 = mul %x_197, 2i
-                    %130:i32 = mul %x_199, 2i
-                    %131:i32 = mul %130, 16i
-                    %132:i32 = add %129, %131
-                    %133:ptr<private, i32, read_write> = access %map, %132
-                    %x_204:i32 = load %133
-                    %135:bool = eq %x_204, 0i
-                    if %135 [t: %b28] {  # if_14
-                      %b28 = block {  # true
-                        %x_208:i32 = load %j
-                        %137:i32 = mul %x_208, 2i
-                        store_vector_element %p, 0u, %137
-                        %x_211:i32 = load %i
-                        %139:i32 = mul %x_211, 2i
-                        store_vector_element %p, 1u, %139
+                    %170:i32 = load %j
+                    %x_197:i32 = let %170
+                    %172:i32 = load %i
+                    %x_199:i32 = let %172
+                    %174:i32 = mul %x_197, 2i
+                    %175:i32 = mul %x_199, 2i
+                    %176:i32 = mul %175, 16i
+                    %177:i32 = add %174, %176
+                    %178:ptr<private, i32, read_write> = access %map, %177
+                    %179:i32 = load %178
+                    %x_204:i32 = let %179
+                    %181:bool = eq %x_204, 0i
+                    if %181 [t: $B28] {  # if_14
+                      $B28: {  # true
+                        %182:i32 = load %j
+                        %x_208:i32 = let %182
+                        %184:i32 = mul %x_208, 2i
+                        store_vector_element %p, 0u, %184
+                        %185:i32 = load %i
+                        %x_211:i32 = let %185
+                        %187:i32 = mul %x_211, 2i
+                        store_vector_element %p, 1u, %187
                         store %canwalk, true
                         exit_if  # if_14
                       }
                     }
-                    continue %b25
+                    continue  # -> $B25
                   }
-                  %b25 = block {  # continuing
-                    %x_214:i32 = load %j
-                    %141:i32 = add %x_214, 1i
-                    store %j, %141
-                    next_iteration %b24
+                  $B25: {  # continuing
+                    %188:i32 = load %j
+                    %x_214:i32 = let %188
+                    %190:i32 = add %x_214, 1i
+                    store %j, %190
+                    next_iteration  # -> $B24
                   }
                 }
-                continue %b20
+                continue  # -> $B20
               }
-              %b20 = block {  # continuing
-                %x_216:i32 = load %i
-                %143:i32 = add %x_216, 1i
-                store %i, %143
-                next_iteration %b19
+              $B20: {  # continuing
+                %191:i32 = load %i
+                %x_216:i32 = let %191
+                %193:i32 = add %x_216, 1i
+                store %i, %193
+                next_iteration  # -> $B19
               }
             }
-            %x_219:i32 = load_vector_element %p, 0u
-            %x_221:i32 = load_vector_element %p, 1u
-            %146:i32 = mul %x_221, 16i
-            %147:i32 = add %x_219, %146
-            %148:ptr<private, i32, read_write> = access %map, %147
-            store %148, 1i
+            %194:i32 = load_vector_element %p, 0u
+            %x_219:i32 = let %194
+            %196:i32 = load_vector_element %p, 1u
+            %x_221:i32 = let %196
+            %198:i32 = mul %x_221, 16i
+            %199:i32 = add %x_219, %198
+            %200:ptr<private, i32, read_write> = access %map, %199
+            store %200, 1i
             exit_if  # if_10
           }
-          %b18 = block {  # false
-            %x_225:i32 = load %v
-            %x_226:i32 = load %directions
-            %151:i32 = mod %x_225, %x_226
-            store %d, %151
-            %x_228:i32 = load %directions
-            %x_229:i32 = load %v
-            %154:i32 = add %x_229, %x_228
-            store %v, %154
-            %x_231:i32 = load %d
-            %x_232:bool = gte %x_231, 0i
+          $B18: {  # false
+            %201:i32 = load %v
+            %x_225:i32 = let %201
+            %203:i32 = load %directions
+            %x_226:i32 = let %203
+            %205:i32 = call %tint_mod_i32, %x_225, %x_226
+            store %d, %205
+            %207:i32 = load %directions
+            %x_228:i32 = let %207
+            %209:i32 = load %v
+            %x_229:i32 = let %209
+            %211:i32 = add %x_229, %x_228
+            store %v, %211
+            %212:i32 = load %d
+            %x_231:i32 = let %212
+            %214:bool = gte %x_231, 0i
+            %x_232:bool = let %214
             store %x_238_phi, %x_232
-            if %x_232 [t: %b29] {  # if_15
-              %b29 = block {  # true
-                %x_236:i32 = load_vector_element %p, 0u
-                %158:bool = gt %x_236, 0i
-                store %x_237, %158
-                %159:bool = load %x_237
-                store %x_238_phi, %159
+            if %x_232 [t: $B29] {  # if_15
+              $B29: {  # true
+                %216:i32 = load_vector_element %p, 0u
+                %x_236:i32 = let %216
+                %218:bool = gt %x_236, 0i
+                store %x_237, %218
+                %219:bool = load %x_237
+                store %x_238_phi, %219
                 exit_if  # if_15
               }
             }
-            %x_238:bool = load %x_238_phi
+            %220:bool = load %x_238_phi
+            %x_238:bool = let %220
             store %x_251_phi, %x_238
-            if %x_238 [t: %b30] {  # if_16
-              %b30 = block {  # true
-                %x_242:i32 = load_vector_element %p, 0u
-                %x_245:i32 = load_vector_element %p, 1u
-                %163:i32 = sub %x_242, 2i
-                %164:i32 = mul %x_245, 16i
-                %165:i32 = add %163, %164
-                %166:ptr<private, i32, read_write> = access %map, %165
-                %x_249:i32 = load %166
-                %168:bool = eq %x_249, 0i
-                store %x_250, %168
-                %169:bool = load %x_250
-                store %x_251_phi, %169
+            if %x_238 [t: $B30] {  # if_16
+              $B30: {  # true
+                %222:i32 = load_vector_element %p, 0u
+                %x_242:i32 = let %222
+                %224:i32 = load_vector_element %p, 1u
+                %x_245:i32 = let %224
+                %226:i32 = sub %x_242, 2i
+                %227:i32 = mul %x_245, 16i
+                %228:i32 = add %226, %227
+                %229:ptr<private, i32, read_write> = access %map, %228
+                %230:i32 = load %229
+                %x_249:i32 = let %230
+                %232:bool = eq %x_249, 0i
+                store %x_250, %232
+                %233:bool = load %x_250
+                store %x_251_phi, %233
                 exit_if  # if_16
               }
             }
-            %x_251:bool = load %x_251_phi
-            if %x_251 [t: %b31] {  # if_17
-              %b31 = block {  # true
-                %x_254:i32 = load %d
-                %172:i32 = sub %x_254, 1i
-                store %d, %172
-                %x_257:i32 = load_vector_element %p, 0u
-                %x_259:i32 = load_vector_element %p, 1u
-                %175:i32 = mul %x_259, 16i
-                %176:i32 = add %x_257, %175
-                %177:ptr<private, i32, read_write> = access %map, %176
-                store %177, 1i
-                %x_264:i32 = load_vector_element %p, 0u
-                %x_267:i32 = load_vector_element %p, 1u
-                %180:i32 = sub %x_264, 1i
-                %181:i32 = mul %x_267, 16i
-                %182:i32 = add %180, %181
-                %183:ptr<private, i32, read_write> = access %map, %182
-                store %183, 1i
-                %x_272:i32 = load_vector_element %p, 0u
-                %x_275:i32 = load_vector_element %p, 1u
-                %186:i32 = sub %x_272, 2i
-                %187:i32 = mul %x_275, 16i
-                %188:i32 = add %186, %187
-                %189:ptr<private, i32, read_write> = access %map, %188
-                store %189, 1i
-                %x_280:i32 = load_vector_element %p, 0u
-                %191:i32 = sub %x_280, 2i
-                store_vector_element %p, 0u, %191
+            %234:bool = load %x_251_phi
+            %x_251:bool = let %234
+            if %x_251 [t: $B31] {  # if_17
+              $B31: {  # true
+                %236:i32 = load %d
+                %x_254:i32 = let %236
+                %238:i32 = sub %x_254, 1i
+                store %d, %238
+                %239:i32 = load_vector_element %p, 0u
+                %x_257:i32 = let %239
+                %241:i32 = load_vector_element %p, 1u
+                %x_259:i32 = let %241
+                %243:i32 = mul %x_259, 16i
+                %244:i32 = add %x_257, %243
+                %245:ptr<private, i32, read_write> = access %map, %244
+                store %245, 1i
+                %246:i32 = load_vector_element %p, 0u
+                %x_264:i32 = let %246
+                %248:i32 = load_vector_element %p, 1u
+                %x_267:i32 = let %248
+                %250:i32 = sub %x_264, 1i
+                %251:i32 = mul %x_267, 16i
+                %252:i32 = add %250, %251
+                %253:ptr<private, i32, read_write> = access %map, %252
+                store %253, 1i
+                %254:i32 = load_vector_element %p, 0u
+                %x_272:i32 = let %254
+                %256:i32 = load_vector_element %p, 1u
+                %x_275:i32 = let %256
+                %258:i32 = sub %x_272, 2i
+                %259:i32 = mul %x_275, 16i
+                %260:i32 = add %258, %259
+                %261:ptr<private, i32, read_write> = access %map, %260
+                store %261, 1i
+                %262:i32 = load_vector_element %p, 0u
+                %x_280:i32 = let %262
+                %264:i32 = sub %x_280, 2i
+                store_vector_element %p, 0u, %264
                 exit_if  # if_17
               }
             }
-            %x_283:i32 = load %d
-            %x_284:bool = gte %x_283, 0i
+            %265:i32 = load %d
+            %x_283:i32 = let %265
+            %267:bool = gte %x_283, 0i
+            %x_284:bool = let %267
             store %x_290_phi, %x_284
-            if %x_284 [t: %b32] {  # if_18
-              %b32 = block {  # true
-                %x_288:i32 = load_vector_element %p, 1u
-                %195:bool = gt %x_288, 0i
-                store %x_289, %195
-                %196:bool = load %x_289
-                store %x_290_phi, %196
+            if %x_284 [t: $B32] {  # if_18
+              $B32: {  # true
+                %269:i32 = load_vector_element %p, 1u
+                %x_288:i32 = let %269
+                %271:bool = gt %x_288, 0i
+                store %x_289, %271
+                %272:bool = load %x_289
+                store %x_290_phi, %272
                 exit_if  # if_18
               }
             }
-            %x_290:bool = load %x_290_phi
+            %273:bool = load %x_290_phi
+            %x_290:bool = let %273
             store %x_303_phi, %x_290
-            if %x_290 [t: %b33] {  # if_19
-              %b33 = block {  # true
-                %x_294:i32 = load_vector_element %p, 0u
-                %x_296:i32 = load_vector_element %p, 1u
-                %200:i32 = sub %x_296, 2i
-                %201:i32 = mul %200, 16i
-                %202:i32 = add %x_294, %201
-                %203:ptr<private, i32, read_write> = access %map, %202
-                %x_301:i32 = load %203
-                %205:bool = eq %x_301, 0i
-                store %x_302, %205
-                %206:bool = load %x_302
-                store %x_303_phi, %206
+            if %x_290 [t: $B33] {  # if_19
+              $B33: {  # true
+                %275:i32 = load_vector_element %p, 0u
+                %x_294:i32 = let %275
+                %277:i32 = load_vector_element %p, 1u
+                %x_296:i32 = let %277
+                %279:i32 = sub %x_296, 2i
+                %280:i32 = mul %279, 16i
+                %281:i32 = add %x_294, %280
+                %282:ptr<private, i32, read_write> = access %map, %281
+                %283:i32 = load %282
+                %x_301:i32 = let %283
+                %285:bool = eq %x_301, 0i
+                store %x_302, %285
+                %286:bool = load %x_302
+                store %x_303_phi, %286
                 exit_if  # if_19
               }
             }
-            %x_303:bool = load %x_303_phi
-            if %x_303 [t: %b34] {  # if_20
-              %b34 = block {  # true
-                %x_306:i32 = load %d
-                %209:i32 = sub %x_306, 1i
-                store %d, %209
-                %x_309:i32 = load_vector_element %p, 0u
-                %x_311:i32 = load_vector_element %p, 1u
-                %212:i32 = mul %x_311, 16i
-                %213:i32 = add %x_309, %212
-                %214:ptr<private, i32, read_write> = access %map, %213
-                store %214, 1i
-                %x_316:i32 = load_vector_element %p, 0u
-                %x_318:i32 = load_vector_element %p, 1u
-                %217:i32 = sub %x_318, 1i
-                %218:i32 = mul %217, 16i
-                %219:i32 = add %x_316, %218
-                %220:ptr<private, i32, read_write> = access %map, %219
-                store %220, 1i
-                %x_324:i32 = load_vector_element %p, 0u
-                %x_326:i32 = load_vector_element %p, 1u
-                %223:i32 = sub %x_326, 2i
-                %224:i32 = mul %223, 16i
-                %225:i32 = add %x_324, %224
-                %226:ptr<private, i32, read_write> = access %map, %225
-                store %226, 1i
-                %x_332:i32 = load_vector_element %p, 1u
-                %228:i32 = sub %x_332, 2i
-                store_vector_element %p, 1u, %228
+            %287:bool = load %x_303_phi
+            %x_303:bool = let %287
+            if %x_303 [t: $B34] {  # if_20
+              $B34: {  # true
+                %289:i32 = load %d
+                %x_306:i32 = let %289
+                %291:i32 = sub %x_306, 1i
+                store %d, %291
+                %292:i32 = load_vector_element %p, 0u
+                %x_309:i32 = let %292
+                %294:i32 = load_vector_element %p, 1u
+                %x_311:i32 = let %294
+                %296:i32 = mul %x_311, 16i
+                %297:i32 = add %x_309, %296
+                %298:ptr<private, i32, read_write> = access %map, %297
+                store %298, 1i
+                %299:i32 = load_vector_element %p, 0u
+                %x_316:i32 = let %299
+                %301:i32 = load_vector_element %p, 1u
+                %x_318:i32 = let %301
+                %303:i32 = sub %x_318, 1i
+                %304:i32 = mul %303, 16i
+                %305:i32 = add %x_316, %304
+                %306:ptr<private, i32, read_write> = access %map, %305
+                store %306, 1i
+                %307:i32 = load_vector_element %p, 0u
+                %x_324:i32 = let %307
+                %309:i32 = load_vector_element %p, 1u
+                %x_326:i32 = let %309
+                %311:i32 = sub %x_326, 2i
+                %312:i32 = mul %311, 16i
+                %313:i32 = add %x_324, %312
+                %314:ptr<private, i32, read_write> = access %map, %313
+                store %314, 1i
+                %315:i32 = load_vector_element %p, 1u
+                %x_332:i32 = let %315
+                %317:i32 = sub %x_332, 2i
+                store_vector_element %p, 1u, %317
                 exit_if  # if_20
               }
             }
-            %x_335:i32 = load %d
-            %x_336:bool = gte %x_335, 0i
+            %318:i32 = load %d
+            %x_335:i32 = let %318
+            %320:bool = gte %x_335, 0i
+            %x_336:bool = let %320
             store %x_342_phi, %x_336
-            if %x_336 [t: %b35] {  # if_21
-              %b35 = block {  # true
-                %x_340:i32 = load_vector_element %p, 0u
-                %232:bool = lt %x_340, 14i
-                store %x_341, %232
-                %233:bool = load %x_341
-                store %x_342_phi, %233
+            if %x_336 [t: $B35] {  # if_21
+              $B35: {  # true
+                %322:i32 = load_vector_element %p, 0u
+                %x_340:i32 = let %322
+                %324:bool = lt %x_340, 14i
+                store %x_341, %324
+                %325:bool = load %x_341
+                store %x_342_phi, %325
                 exit_if  # if_21
               }
             }
-            %x_342:bool = load %x_342_phi
+            %326:bool = load %x_342_phi
+            %x_342:bool = let %326
             store %x_355_phi, %x_342
-            if %x_342 [t: %b36] {  # if_22
-              %b36 = block {  # true
-                %x_346:i32 = load_vector_element %p, 0u
-                %x_349:i32 = load_vector_element %p, 1u
-                %237:i32 = add %x_346, 2i
-                %238:i32 = mul %x_349, 16i
-                %239:i32 = add %237, %238
-                %240:ptr<private, i32, read_write> = access %map, %239
-                %x_353:i32 = load %240
-                %242:bool = eq %x_353, 0i
-                store %x_354, %242
-                %243:bool = load %x_354
-                store %x_355_phi, %243
+            if %x_342 [t: $B36] {  # if_22
+              $B36: {  # true
+                %328:i32 = load_vector_element %p, 0u
+                %x_346:i32 = let %328
+                %330:i32 = load_vector_element %p, 1u
+                %x_349:i32 = let %330
+                %332:i32 = add %x_346, 2i
+                %333:i32 = mul %x_349, 16i
+                %334:i32 = add %332, %333
+                %335:ptr<private, i32, read_write> = access %map, %334
+                %336:i32 = load %335
+                %x_353:i32 = let %336
+                %338:bool = eq %x_353, 0i
+                store %x_354, %338
+                %339:bool = load %x_354
+                store %x_355_phi, %339
                 exit_if  # if_22
               }
             }
-            %x_355:bool = load %x_355_phi
-            if %x_355 [t: %b37] {  # if_23
-              %b37 = block {  # true
-                %x_358:i32 = load %d
-                %246:i32 = sub %x_358, 1i
-                store %d, %246
-                %x_361:i32 = load_vector_element %p, 0u
-                %x_363:i32 = load_vector_element %p, 1u
-                %249:i32 = mul %x_363, 16i
-                %250:i32 = add %x_361, %249
-                %251:ptr<private, i32, read_write> = access %map, %250
-                store %251, 1i
-                %x_368:i32 = load_vector_element %p, 0u
-                %x_371:i32 = load_vector_element %p, 1u
-                %254:i32 = add %x_368, 1i
-                %255:i32 = mul %x_371, 16i
-                %256:i32 = add %254, %255
-                %257:ptr<private, i32, read_write> = access %map, %256
-                store %257, 1i
-                %x_376:i32 = load_vector_element %p, 0u
-                %x_379:i32 = load_vector_element %p, 1u
-                %260:i32 = add %x_376, 2i
-                %261:i32 = mul %x_379, 16i
-                %262:i32 = add %260, %261
-                %263:ptr<private, i32, read_write> = access %map, %262
-                store %263, 1i
-                %x_384:i32 = load_vector_element %p, 0u
-                %265:i32 = add %x_384, 2i
-                store_vector_element %p, 0u, %265
+            %340:bool = load %x_355_phi
+            %x_355:bool = let %340
+            if %x_355 [t: $B37] {  # if_23
+              $B37: {  # true
+                %342:i32 = load %d
+                %x_358:i32 = let %342
+                %344:i32 = sub %x_358, 1i
+                store %d, %344
+                %345:i32 = load_vector_element %p, 0u
+                %x_361:i32 = let %345
+                %347:i32 = load_vector_element %p, 1u
+                %x_363:i32 = let %347
+                %349:i32 = mul %x_363, 16i
+                %350:i32 = add %x_361, %349
+                %351:ptr<private, i32, read_write> = access %map, %350
+                store %351, 1i
+                %352:i32 = load_vector_element %p, 0u
+                %x_368:i32 = let %352
+                %354:i32 = load_vector_element %p, 1u
+                %x_371:i32 = let %354
+                %356:i32 = add %x_368, 1i
+                %357:i32 = mul %x_371, 16i
+                %358:i32 = add %356, %357
+                %359:ptr<private, i32, read_write> = access %map, %358
+                store %359, 1i
+                %360:i32 = load_vector_element %p, 0u
+                %x_376:i32 = let %360
+                %362:i32 = load_vector_element %p, 1u
+                %x_379:i32 = let %362
+                %364:i32 = add %x_376, 2i
+                %365:i32 = mul %x_379, 16i
+                %366:i32 = add %364, %365
+                %367:ptr<private, i32, read_write> = access %map, %366
+                store %367, 1i
+                %368:i32 = load_vector_element %p, 0u
+                %x_384:i32 = let %368
+                %370:i32 = add %x_384, 2i
+                store_vector_element %p, 0u, %370
                 exit_if  # if_23
               }
             }
-            %x_387:i32 = load %d
-            %x_388:bool = gte %x_387, 0i
+            %371:i32 = load %d
+            %x_387:i32 = let %371
+            %373:bool = gte %x_387, 0i
+            %x_388:bool = let %373
             store %x_394_phi, %x_388
-            if %x_388 [t: %b38] {  # if_24
-              %b38 = block {  # true
-                %x_392:i32 = load_vector_element %p, 1u
-                %269:bool = lt %x_392, 14i
-                store %x_393, %269
-                %270:bool = load %x_393
-                store %x_394_phi, %270
+            if %x_388 [t: $B38] {  # if_24
+              $B38: {  # true
+                %375:i32 = load_vector_element %p, 1u
+                %x_392:i32 = let %375
+                %377:bool = lt %x_392, 14i
+                store %x_393, %377
+                %378:bool = load %x_393
+                store %x_394_phi, %378
                 exit_if  # if_24
               }
             }
-            %x_394:bool = load %x_394_phi
+            %379:bool = load %x_394_phi
+            %x_394:bool = let %379
             store %x_407_phi, %x_394
-            if %x_394 [t: %b39] {  # if_25
-              %b39 = block {  # true
-                %x_398:i32 = load_vector_element %p, 0u
-                %x_400:i32 = load_vector_element %p, 1u
-                %274:i32 = add %x_400, 2i
-                %275:i32 = mul %274, 16i
-                %276:i32 = add %x_398, %275
-                %277:ptr<private, i32, read_write> = access %map, %276
-                %x_405:i32 = load %277
-                %279:bool = eq %x_405, 0i
-                store %x_406, %279
-                %280:bool = load %x_406
-                store %x_407_phi, %280
+            if %x_394 [t: $B39] {  # if_25
+              $B39: {  # true
+                %381:i32 = load_vector_element %p, 0u
+                %x_398:i32 = let %381
+                %383:i32 = load_vector_element %p, 1u
+                %x_400:i32 = let %383
+                %385:i32 = add %x_400, 2i
+                %386:i32 = mul %385, 16i
+                %387:i32 = add %x_398, %386
+                %388:ptr<private, i32, read_write> = access %map, %387
+                %389:i32 = load %388
+                %x_405:i32 = let %389
+                %391:bool = eq %x_405, 0i
+                store %x_406, %391
+                %392:bool = load %x_406
+                store %x_407_phi, %392
                 exit_if  # if_25
               }
             }
-            %x_407:bool = load %x_407_phi
-            if %x_407 [t: %b40] {  # if_26
-              %b40 = block {  # true
-                %x_410:i32 = load %d
-                %283:i32 = sub %x_410, 1i
-                store %d, %283
-                %x_413:i32 = load_vector_element %p, 0u
-                %x_415:i32 = load_vector_element %p, 1u
-                %286:i32 = mul %x_415, 16i
-                %287:i32 = add %x_413, %286
-                %288:ptr<private, i32, read_write> = access %map, %287
-                store %288, 1i
-                %x_420:i32 = load_vector_element %p, 0u
-                %x_422:i32 = load_vector_element %p, 1u
-                %291:i32 = add %x_422, 1i
-                %292:i32 = mul %291, 16i
-                %293:i32 = add %x_420, %292
-                %294:ptr<private, i32, read_write> = access %map, %293
-                store %294, 1i
-                %x_428:i32 = load_vector_element %p, 0u
-                %x_430:i32 = load_vector_element %p, 1u
-                %297:i32 = add %x_430, 2i
-                %298:i32 = mul %297, 16i
-                %299:i32 = add %x_428, %298
-                %300:ptr<private, i32, read_write> = access %map, %299
-                store %300, 1i
-                %x_436:i32 = load_vector_element %p, 1u
-                %302:i32 = add %x_436, 2i
-                store_vector_element %p, 1u, %302
+            %393:bool = load %x_407_phi
+            %x_407:bool = let %393
+            if %x_407 [t: $B40] {  # if_26
+              $B40: {  # true
+                %395:i32 = load %d
+                %x_410:i32 = let %395
+                %397:i32 = sub %x_410, 1i
+                store %d, %397
+                %398:i32 = load_vector_element %p, 0u
+                %x_413:i32 = let %398
+                %400:i32 = load_vector_element %p, 1u
+                %x_415:i32 = let %400
+                %402:i32 = mul %x_415, 16i
+                %403:i32 = add %x_413, %402
+                %404:ptr<private, i32, read_write> = access %map, %403
+                store %404, 1i
+                %405:i32 = load_vector_element %p, 0u
+                %x_420:i32 = let %405
+                %407:i32 = load_vector_element %p, 1u
+                %x_422:i32 = let %407
+                %409:i32 = add %x_422, 1i
+                %410:i32 = mul %409, 16i
+                %411:i32 = add %x_420, %410
+                %412:ptr<private, i32, read_write> = access %map, %411
+                store %412, 1i
+                %413:i32 = load_vector_element %p, 0u
+                %x_428:i32 = let %413
+                %415:i32 = load_vector_element %p, 1u
+                %x_430:i32 = let %415
+                %417:i32 = add %x_430, 2i
+                %418:i32 = mul %417, 16i
+                %419:i32 = add %x_428, %418
+                %420:ptr<private, i32, read_write> = access %map, %419
+                store %420, 1i
+                %421:i32 = load_vector_element %p, 1u
+                %x_436:i32 = let %421
+                %423:i32 = add %x_436, 2i
+                store_vector_element %p, 1u, %423
                 exit_if  # if_26
               }
             }
             exit_if  # if_10
           }
         }
-        %x_440:i32 = load_vector_element %ipos, 1u
-        %x_443:i32 = load_vector_element %ipos, 0u
-        %305:i32 = mul %x_440, 16i
-        %306:i32 = add %305, %x_443
-        %307:ptr<private, i32, read_write> = access %map, %306
-        %x_446:i32 = load %307
-        %309:bool = eq %x_446, 1i
-        if %309 [t: %b41] {  # if_27
-          %b41 = block {  # true
+        %424:i32 = load_vector_element %ipos, 1u
+        %x_440:i32 = let %424
+        %426:i32 = load_vector_element %ipos, 0u
+        %x_443:i32 = let %426
+        %428:i32 = mul %x_440, 16i
+        %429:i32 = add %428, %x_443
+        %430:ptr<private, i32, read_write> = access %map, %429
+        %431:i32 = load %430
+        %x_446:i32 = let %431
+        %433:bool = eq %x_446, 1i
+        if %433 [t: $B41] {  # if_27
+          $B41: {  # true
             store %x_GLF_color, vec4<f32>(1.0f)
             ret
           }
         }
-        continue %b8
+        continue  # -> $B8
       }
-      %b8 = block {  # continuing
-        %x_450:bool = load %canwalk
-        %311:bool = eq %x_450, false
-        break_if %311 %b7
+      $B8: {  # continuing
+        %434:bool = load %canwalk
+        %x_450:bool = let %434
+        %436:bool = eq %x_450, false
+        break_if %436  # -> [t: exit_loop loop_2, f: $B7]
       }
     }
     store %x_GLF_color, vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f)
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b42 {
-  %b42 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B42: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %314:void = call %main_1
-    %315:vec4<f32> = load %x_GLF_color
-    %316:main_out = construct %315
-    ret %316
+    %439:void = call %main_1
+    %440:vec4<f32> = load %x_GLF_color
+    %441:main_out = construct %440
+    ret %441
+  }
+}
+%tint_mod_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B43: {
+    %444:bool = eq %rhs, 0i
+    %445:bool = eq %lhs, -2147483648i
+    %446:bool = eq %rhs, -1i
+    %447:bool = and %445, %446
+    %448:bool = or %444, %447
+    %449:i32 = select %rhs, 1i, %448
+    %450:i32 = let %449
+    %451:i32 = div %lhs, %450
+    %452:i32 = mul %451, %450
+    %453:i32 = sub %lhs, %452
+    ret %453
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B44: {
+    %455:i32 = convert %value
+    %456:bool = gte %value, -2147483648.0f
+    %457:i32 = select -2147483648i, %455, %456
+    %458:bool = lte %value, 2147483520.0f
+    %459:i32 = select 2147483647i, %457, %458
+    ret %459
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/0-opt.spvasm.expected.ir.msl
index 0cfc594..2020b95 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,7 +8,7 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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
@@ -16,21 +16,21 @@
   %state:ptr<private, array<i32, 16>, read_write> = var
 }
 
-%collision_vf2_vf4_ = func(%pos:ptr<function, vec2<f32>, read_write>, %quad:ptr<function, vec4<f32>, read_write>):bool -> %b2 {
-  %b2 = block {
+%collision_vf2_vf4_ = func(%pos:ptr<function, vec2<f32>, read_write>, %quad:ptr<function, vec4<f32>, read_write>):bool {
+  $B2: {
     %9:f32 = load_vector_element %pos, 0u
     %10:f32 = load_vector_element %quad, 0u
     %11:bool = lt %9, %10
-    if %11 [t: %b3] {  # if_1
-      %b3 = block {  # true
+    if %11 [t: $B3] {  # if_1
+      $B3: {  # true
         ret false
       }
     }
     %12:f32 = load_vector_element %pos, 1u
     %13:f32 = load_vector_element %quad, 1u
     %14:bool = lt %12, %13
-    if %14 [t: %b4] {  # if_2
-      %b4 = block {  # true
+    if %14 [t: $B4] {  # if_2
+      $B4: {  # true
         ret false
       }
     }
@@ -39,8 +39,8 @@
     %17:f32 = load_vector_element %quad, 2u
     %18:f32 = add %16, %17
     %19:bool = gt %15, %18
-    if %19 [t: %b5] {  # if_3
-      %b5 = block {  # true
+    if %19 [t: $B5] {  # if_3
+      $B5: {  # true
         ret false
       }
     }
@@ -49,16 +49,16 @@
     %22:f32 = load_vector_element %quad, 3u
     %23:f32 = add %21, %22
     %24:bool = gt %20, %23
-    if %24 [t: %b6] {  # if_4
-      %b6 = block {  # true
+    if %24 [t: $B6] {  # if_4
+      $B6: {  # true
         ret false
       }
     }
     ret true
   }
 }
-%match_vf2_ = func(%pos_1:ptr<function, vec2<f32>, read_write>):vec4<f32> -> %b7 {
-  %b7 = block {
+%match_vf2_ = func(%pos_1:ptr<function, vec2<f32>, read_write>):vec4<f32> {
+  $B7: {
     %res:ptr<function, vec4<f32>, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %param:ptr<function, vec2<f32>, read_write> = var
@@ -69,92 +69,127 @@
     %indexable_3:ptr<function, array<vec4<f32>, 16>, read_write> = var
     store %res, vec4<f32>(0.5f, 0.5f, 1.0f, 1.0f)
     store %i, 0i
-    loop [b: %b8, c: %b9] {  # loop_1
-      %b8 = block {  # body
+    loop [b: $B8, c: $B9] {  # loop_1
+      $B8: {  # body
         %35:i32 = load %i
         %36:bool = lt %35, 8i
-        if %36 [t: %b10, f: %b11] {  # if_5
-          %b10 = block {  # true
+        if %36 [t: $B10, f: $B11] {  # if_5
+          $B10: {  # true
             exit_if  # if_5
           }
-          %b11 = block {  # false
+          $B11: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_155:i32 = load %i
-        %38:vec2<f32> = load %pos_1
-        store %param, %38
+        %37:i32 = load %i
+        %x_155:i32 = let %37
+        %39:vec2<f32> = load %pos_1
+        store %param, %39
         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))
-        %39:ptr<function, vec4<f32>, read_write> = access %indexable, %x_155
-        %40:vec4<f32> = load %39
-        store %param_1, %40
-        %x_159:bool = call %collision_vf2_vf4_, %param, %param_1
-        if %x_159 [t: %b12] {  # if_6
-          %b12 = block {  # true
-            %x_162:i32 = load %i
+        %40:ptr<function, vec4<f32>, read_write> = access %indexable, %x_155
+        %41:vec4<f32> = load %40
+        store %param_1, %41
+        %42:bool = call %collision_vf2_vf4_, %param, %param_1
+        %x_159:bool = let %42
+        if %x_159 [t: $B12] {  # if_6
+          $B12: {  # true
+            %44:i32 = load %i
+            %x_162:i32 = let %44
             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))
-            %43:ptr<function, vec4<f32>, read_write> = access %indexable_1, %x_162
-            %x_164:f32 = load_vector_element %43, 0u
-            %x_166:i32 = load %i
+            %46:ptr<function, vec4<f32>, read_write> = access %indexable_1, %x_162
+            %47:f32 = load_vector_element %46, 0u
+            %x_164:f32 = let %47
+            %49:i32 = load %i
+            %x_166:i32 = let %49
             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))
-            %46:ptr<function, vec4<f32>, read_write> = access %indexable_2, %x_166
-            %x_168:f32 = load_vector_element %46, 1u
-            %x_171:i32 = load %i
+            %51:ptr<function, vec4<f32>, read_write> = access %indexable_2, %x_166
+            %52:f32 = load_vector_element %51, 1u
+            %x_168:f32 = let %52
+            %54:i32 = load %i
+            %x_171:i32 = let %54
             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))
-            %49:i32 = convert %x_164
-            %50:i32 = convert %x_168
-            %51:i32 = mul %49, %50
-            %52:i32 = mul %x_171, 9i
-            %53:i32 = add %51, %52
-            %54:i32 = add %53, 11i
-            %55:i32 = mod %54, 16i
-            %56:ptr<function, vec4<f32>, read_write> = access %indexable_3, %55
-            %57:vec4<f32> = load %56
-            store %res, %57
+            %56:i32 = call %tint_f32_to_i32, %x_164
+            %58:i32 = let %56
+            %59:i32 = call %tint_f32_to_i32, %x_168
+            %60:i32 = mul %58, %59
+            %61:i32 = mul %x_171, 9i
+            %62:i32 = add %60, %61
+            %63:i32 = add %62, 11i
+            %64:i32 = call %tint_mod_i32, %63, 16i
+            %66:ptr<function, vec4<f32>, read_write> = access %indexable_3, %64
+            %67:vec4<f32> = load %66
+            store %res, %67
             exit_if  # if_6
           }
         }
-        continue %b9
+        continue  # -> $B9
       }
-      %b9 = block {  # continuing
-        %58:i32 = load %i
-        %59:i32 = add %58, 1i
-        store %i, %59
-        next_iteration %b8
+      $B9: {  # continuing
+        %68:i32 = load %i
+        %69:i32 = add %68, 1i
+        store %i, %69
+        next_iteration  # -> $B8
       }
     }
-    %x_180:vec4<f32> = load %res
+    %70:vec4<f32> = load %res
+    %x_180:vec4<f32> = let %70
     ret %x_180
   }
 }
-%main_1 = func():void -> %b13 {
-  %b13 = block {
+%main_1 = func():void {
+  $B13: {
     %lin:ptr<function, vec2<f32>, read_write> = var
     %param_2:ptr<function, vec2<f32>, read_write> = var
-    %64:vec4<f32> = load %gl_FragCoord
-    %65:vec2<f32> = swizzle %64, xy
-    %66:ptr<uniform, vec2<f32>, read> = access %x_20, 0u
-    %67:vec2<f32> = load %66
-    %68:vec2<f32> = div %65, %67
-    store %lin, %68
-    %69:vec2<f32> = load %lin
-    %70:vec2<f32> = mul %69, 32.0f
-    %71:vec2<f32> = floor %70
-    store %lin, %71
-    %72:vec2<f32> = load %lin
-    store %param_2, %72
-    %x_111:vec4<f32> = call %match_vf2_, %param_2
+    %75:vec4<f32> = load %gl_FragCoord
+    %76:vec2<f32> = swizzle %75, xy
+    %77:ptr<uniform, vec2<f32>, read> = access %x_20, 0u
+    %78:vec2<f32> = load %77
+    %79:vec2<f32> = div %76, %78
+    store %lin, %79
+    %80:vec2<f32> = load %lin
+    %81:vec2<f32> = mul %80, 32.0f
+    %82:vec2<f32> = floor %81
+    store %lin, %82
+    %83:vec2<f32> = load %lin
+    store %param_2, %83
+    %84:vec4<f32> = call %match_vf2_, %param_2
+    %x_111:vec4<f32> = let %84
     store %x_GLF_color, %x_111
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b14 {
-  %b14 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B14: {
     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
+    %88:void = call %main_1
+    %89:vec4<f32> = load %x_GLF_color
+    %90:main_out = construct %89
+    ret %90
+  }
+}
+%tint_mod_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B15: {
+    %93:bool = eq %rhs, 0i
+    %94:bool = eq %lhs, -2147483648i
+    %95:bool = eq %rhs, -1i
+    %96:bool = and %94, %95
+    %97:bool = or %93, %96
+    %98:i32 = select %rhs, 1i, %97
+    %99:i32 = let %98
+    %100:i32 = div %lhs, %99
+    %101:i32 = mul %100, %99
+    %102:i32 = sub %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
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/0-opt.wgsl.expected.ir.msl
index c08c00b..fbd62cd 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,7 +8,7 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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
@@ -16,49 +16,59 @@
   %state:ptr<private, array<i32, 16>, read_write> = var
 }
 
-%collision_vf2_vf4_ = func(%pos:ptr<function, vec2<f32>, read_write>, %quad:ptr<function, vec4<f32>, read_write>):bool -> %b2 {
-  %b2 = block {
-    %x_114:f32 = load_vector_element %pos, 0u
-    %x_116:f32 = load_vector_element %quad, 0u
-    %11:bool = lt %x_114, %x_116
-    if %11 [t: %b3] {  # if_1
-      %b3 = block {  # true
+%collision_vf2_vf4_ = func(%pos:ptr<function, vec2<f32>, read_write>, %quad:ptr<function, vec4<f32>, read_write>):bool {
+  $B2: {
+    %9:f32 = load_vector_element %pos, 0u
+    %x_114:f32 = let %9
+    %11:f32 = load_vector_element %quad, 0u
+    %x_116:f32 = let %11
+    %13:bool = lt %x_114, %x_116
+    if %13 [t: $B3] {  # if_1
+      $B3: {  # true
         ret false
       }
     }
-    %x_121:f32 = load_vector_element %pos, 1u
-    %x_123:f32 = load_vector_element %quad, 1u
-    %14:bool = lt %x_121, %x_123
-    if %14 [t: %b4] {  # if_2
-      %b4 = block {  # true
+    %14:f32 = load_vector_element %pos, 1u
+    %x_121:f32 = let %14
+    %16:f32 = load_vector_element %quad, 1u
+    %x_123:f32 = let %16
+    %18:bool = lt %x_121, %x_123
+    if %18 [t: $B4] {  # if_2
+      $B4: {  # true
         ret false
       }
     }
-    %x_128:f32 = load_vector_element %pos, 0u
-    %x_130:f32 = load_vector_element %quad, 0u
-    %x_132:f32 = load_vector_element %quad, 2u
-    %18:f32 = add %x_130, %x_132
-    %19:bool = gt %x_128, %18
-    if %19 [t: %b5] {  # if_3
-      %b5 = block {  # true
+    %19:f32 = load_vector_element %pos, 0u
+    %x_128:f32 = let %19
+    %21:f32 = load_vector_element %quad, 0u
+    %x_130:f32 = let %21
+    %23:f32 = load_vector_element %quad, 2u
+    %x_132:f32 = let %23
+    %25:f32 = add %x_130, %x_132
+    %26:bool = gt %x_128, %25
+    if %26 [t: $B5] {  # if_3
+      $B5: {  # true
         ret false
       }
     }
-    %x_138:f32 = load_vector_element %pos, 1u
-    %x_140:f32 = load_vector_element %quad, 1u
-    %x_142:f32 = load_vector_element %quad, 3u
-    %23:f32 = add %x_140, %x_142
-    %24:bool = gt %x_138, %23
-    if %24 [t: %b6] {  # if_4
-      %b6 = block {  # true
+    %27:f32 = load_vector_element %pos, 1u
+    %x_138:f32 = let %27
+    %29:f32 = load_vector_element %quad, 1u
+    %x_140:f32 = let %29
+    %31:f32 = load_vector_element %quad, 3u
+    %x_142:f32 = let %31
+    %33:f32 = add %x_140, %x_142
+    %34:bool = gt %x_138, %33
+    if %34 [t: $B6] {  # if_4
+      $B6: {  # true
         ret false
       }
     }
     ret true
   }
 }
-%match_vf2_ = func(%pos_1:ptr<function, vec2<f32>, read_write>):vec4<f32> -> %b7 {
-  %b7 = block {
+%match_vf2_ = func(%pos_1:ptr<function, vec2<f32>, read_write>):vec4<f32> {
+  $B7: {
     %res:ptr<function, vec4<f32>, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %param:ptr<function, vec2<f32>, read_write> = var
@@ -69,94 +79,138 @@
     %indexable_3:ptr<function, array<vec4<f32>, 16>, read_write> = var
     store %res, vec4<f32>(0.5f, 0.5f, 1.0f, 1.0f)
     store %i, 0i
-    loop [b: %b8, c: %b9] {  # loop_1
-      %b8 = block {  # body
-        %x_152:i32 = load %i
-        %36:bool = lt %x_152, 8i
-        if %36 [t: %b10, f: %b11] {  # if_5
-          %b10 = block {  # true
+    loop [b: $B8, c: $B9] {  # loop_1
+      $B8: {  # body
+        %45:i32 = load %i
+        %x_152:i32 = let %45
+        %47:bool = lt %x_152, 8i
+        if %47 [t: $B10, f: $B11] {  # if_5
+          $B10: {  # true
             exit_if  # if_5
           }
-          %b11 = block {  # false
+          $B11: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_155:i32 = load %i
-        %x_156:vec2<f32> = load %pos_1
+        %48:i32 = load %i
+        %x_155:i32 = let %48
+        %50:vec2<f32> = load %pos_1
+        %x_156:vec2<f32> = let %50
         store %param, %x_156
         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))
-        %39:ptr<function, vec4<f32>, read_write> = access %indexable, %x_155
-        %x_158:vec4<f32> = load %39
+        %52:ptr<function, vec4<f32>, read_write> = access %indexable, %x_155
+        %53:vec4<f32> = load %52
+        %x_158:vec4<f32> = let %53
         store %param_1, %x_158
-        %x_159:bool = call %collision_vf2_vf4_, %param, %param_1
-        if %x_159 [t: %b12] {  # if_6
-          %b12 = block {  # true
-            %x_162:i32 = load %i
+        %55:bool = call %collision_vf2_vf4_, %param, %param_1
+        %x_159:bool = let %55
+        if %x_159 [t: $B12] {  # if_6
+          $B12: {  # true
+            %57:i32 = load %i
+            %x_162:i32 = let %57
             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))
-            %43:ptr<function, vec4<f32>, read_write> = access %indexable_1, %x_162
-            %x_164:f32 = load_vector_element %43, 0u
-            %x_166:i32 = load %i
+            %59:ptr<function, vec4<f32>, read_write> = access %indexable_1, %x_162
+            %60:f32 = load_vector_element %59, 0u
+            %x_164:f32 = let %60
+            %62:i32 = load %i
+            %x_166:i32 = let %62
             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))
-            %46:ptr<function, vec4<f32>, read_write> = access %indexable_2, %x_166
-            %x_168:f32 = load_vector_element %46, 1u
-            %x_171:i32 = load %i
+            %64:ptr<function, vec4<f32>, read_write> = access %indexable_2, %x_166
+            %65:f32 = load_vector_element %64, 1u
+            %x_168:f32 = let %65
+            %67:i32 = load %i
+            %x_171:i32 = let %67
             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))
-            %49:i32 = convert %x_164
-            %50:i32 = convert %x_168
-            %51:i32 = mul %49, %50
-            %52:i32 = mul %x_171, 9i
-            %53:i32 = add %51, %52
-            %54:i32 = add %53, 11i
-            %55:i32 = mod %54, 16i
-            %56:ptr<function, vec4<f32>, read_write> = access %indexable_3, %55
-            %x_177:vec4<f32> = load %56
+            %69:i32 = call %tint_f32_to_i32, %x_164
+            %71:i32 = let %69
+            %72:i32 = call %tint_f32_to_i32, %x_168
+            %73:i32 = mul %71, %72
+            %74:i32 = mul %x_171, 9i
+            %75:i32 = add %73, %74
+            %76:i32 = add %75, 11i
+            %77:i32 = call %tint_mod_i32, %76, 16i
+            %79:ptr<function, vec4<f32>, read_write> = access %indexable_3, %77
+            %80:vec4<f32> = load %79
+            %x_177:vec4<f32> = let %80
             store %res, %x_177
             exit_if  # if_6
           }
         }
-        continue %b9
+        continue  # -> $B9
       }
-      %b9 = block {  # continuing
-        %x_178:i32 = load %i
-        %59:i32 = add %x_178, 1i
-        store %i, %59
-        next_iteration %b8
+      $B9: {  # continuing
+        %82:i32 = load %i
+        %x_178:i32 = let %82
+        %84:i32 = add %x_178, 1i
+        store %i, %84
+        next_iteration  # -> $B8
       }
     }
-    %x_180:vec4<f32> = load %res
+    %85:vec4<f32> = load %res
+    %x_180:vec4<f32> = let %85
     ret %x_180
   }
 }
-%main_1 = func():void -> %b13 {
-  %b13 = block {
+%main_1 = func():void {
+  $B13: {
     %lin:ptr<function, vec2<f32>, read_write> = var
     %param_2:ptr<function, vec2<f32>, read_write> = var
-    %x_102:vec4<f32> = load %gl_FragCoord
-    %65:ptr<uniform, vec2<f32>, read> = access %x_20, 0u
-    %x_105:vec2<f32> = load %65
-    %67:f32 = access %x_102, 0u
-    %68:f32 = access %x_102, 1u
-    %69:vec2<f32> = construct %67, %68
-    %70:vec2<f32> = div %69, %x_105
-    store %lin, %70
-    %x_107:vec2<f32> = load %lin
-    %72:vec2<f32> = mul %x_107, 32.0f
-    %73:vec2<f32> = floor %72
-    store %lin, %73
-    %x_110:vec2<f32> = load %lin
+    %90:vec4<f32> = load %gl_FragCoord
+    %x_102:vec4<f32> = let %90
+    %92:ptr<uniform, vec2<f32>, read> = access %x_20, 0u
+    %93:vec2<f32> = load %92
+    %x_105:vec2<f32> = let %93
+    %95:f32 = access %x_102, 0u
+    %96:f32 = access %x_102, 1u
+    %97:vec2<f32> = construct %95, %96
+    %98:vec2<f32> = div %97, %x_105
+    store %lin, %98
+    %99:vec2<f32> = load %lin
+    %x_107:vec2<f32> = let %99
+    %101:vec2<f32> = mul %x_107, 32.0f
+    %102:vec2<f32> = floor %101
+    store %lin, %102
+    %103:vec2<f32> = load %lin
+    %x_110:vec2<f32> = let %103
     store %param_2, %x_110
-    %x_111:vec4<f32> = call %match_vf2_, %param_2
+    %105:vec4<f32> = call %match_vf2_, %param_2
+    %x_111:vec4<f32> = let %105
     store %x_GLF_color, %x_111
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b14 {
-  %b14 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B14: {
     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
+    %109:void = call %main_1
+    %110:vec4<f32> = load %x_GLF_color
+    %111:main_out = construct %110
+    ret %111
+  }
+}
+%tint_mod_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B15: {
+    %114:bool = eq %rhs, 0i
+    %115:bool = eq %lhs, -2147483648i
+    %116:bool = eq %rhs, -1i
+    %117:bool = and %115, %116
+    %118:bool = or %114, %117
+    %119:i32 = select %rhs, 1i, %118
+    %120:i32 = let %119
+    %121:i32 = div %lhs, %120
+    %122:i32 = mul %121, %120
+    %123:i32 = sub %lhs, %122
+    ret %123
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B16: {
+    %125:i32 = convert %value
+    %126:bool = gte %value, -2147483648.0f
+    %127:i32 = select -2147483648i, %125, %126
+    %128:bool = lte %value, 2147483520.0f
+    %129:i32 = select 2147483647i, %127, %128
+    ret %129
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/1.spvasm.expected.ir.msl
index 497cee1..27c5bc4 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/1.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,7 +8,7 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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
@@ -16,22 +16,22 @@
   %state:ptr<private, array<i32, 16>, read_write> = var
 }
 
-%collision_vf2_vf4_ = func(%pos:ptr<function, vec2<f32>, read_write>, %quad:ptr<function, vec4<f32>, read_write>):bool -> %b2 {
-  %b2 = block {
+%collision_vf2_vf4_ = func(%pos:ptr<function, vec2<f32>, read_write>, %quad:ptr<function, vec4<f32>, read_write>):bool {
+  $B2: {
     %x_116:ptr<function, vec4<bool>, read_write> = var, vec4<bool>(false)
     %10:f32 = load_vector_element %pos, 0u
     %11:f32 = load_vector_element %quad, 0u
     %12:bool = lt %10, %11
-    if %12 [t: %b3] {  # if_1
-      %b3 = block {  # true
+    if %12 [t: $B3] {  # if_1
+      $B3: {  # true
         ret false
       }
     }
     %13:f32 = load_vector_element %pos, 1u
     %14:f32 = load_vector_element %quad, 1u
     %15:bool = lt %13, %14
-    if %15 [t: %b4] {  # if_2
-      %b4 = block {  # true
+    if %15 [t: $B4] {  # if_2
+      $B4: {  # true
         ret false
       }
     }
@@ -40,8 +40,8 @@
     %18:f32 = load_vector_element %quad, 2u
     %19:f32 = add %17, %18
     %20:bool = gt %16, %19
-    if %20 [t: %b5] {  # if_3
-      %b5 = block {  # true
+    if %20 [t: $B5] {  # if_3
+      $B5: {  # true
         ret false
       }
     }
@@ -50,16 +50,16 @@
     %23:f32 = load_vector_element %quad, 3u
     %24:f32 = add %22, %23
     %25:bool = gt %21, %24
-    if %25 [t: %b6] {  # if_4
-      %b6 = block {  # true
+    if %25 [t: $B6] {  # if_4
+      $B6: {  # true
         ret false
       }
     }
     ret true
   }
 }
-%match_vf2_ = func(%pos_1:ptr<function, vec2<f32>, read_write>):vec4<f32> -> %b7 {
-  %b7 = block {
+%match_vf2_ = func(%pos_1:ptr<function, vec2<f32>, read_write>):vec4<f32> {
+  $B7: {
     %res:ptr<function, vec4<f32>, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %param:ptr<function, vec2<f32>, read_write> = var
@@ -70,92 +70,127 @@
     %indexable_3:ptr<function, array<vec4<f32>, 16>, read_write> = var
     store %res, vec4<f32>(0.5f, 0.5f, 1.0f, 1.0f)
     store %i, 0i
-    loop [b: %b8, c: %b9] {  # loop_1
-      %b8 = block {  # body
+    loop [b: $B8, c: $B9] {  # loop_1
+      $B8: {  # body
         %36:i32 = load %i
         %37:bool = lt %36, 8i
-        if %37 [t: %b10, f: %b11] {  # if_5
-          %b10 = block {  # true
+        if %37 [t: $B10, f: $B11] {  # if_5
+          $B10: {  # true
             exit_if  # if_5
           }
-          %b11 = block {  # false
+          $B11: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_159:i32 = load %i
-        %39:vec2<f32> = load %pos_1
-        store %param, %39
+        %38:i32 = load %i
+        %x_159:i32 = let %38
+        %40:vec2<f32> = load %pos_1
+        store %param, %40
         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))
-        %40:ptr<function, vec4<f32>, read_write> = access %indexable, %x_159
-        %41:vec4<f32> = load %40
-        store %param_1, %41
-        %x_163:bool = call %collision_vf2_vf4_, %param, %param_1
-        if %x_163 [t: %b12] {  # if_6
-          %b12 = block {  # true
-            %x_166:i32 = load %i
+        %41:ptr<function, vec4<f32>, read_write> = access %indexable, %x_159
+        %42:vec4<f32> = load %41
+        store %param_1, %42
+        %43:bool = call %collision_vf2_vf4_, %param, %param_1
+        %x_163:bool = let %43
+        if %x_163 [t: $B12] {  # if_6
+          $B12: {  # true
+            %45:i32 = load %i
+            %x_166:i32 = let %45
             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))
-            %44:ptr<function, vec4<f32>, read_write> = access %indexable_1, %x_166
-            %x_168:f32 = load_vector_element %44, 0u
-            %x_170:i32 = load %i
+            %47:ptr<function, vec4<f32>, read_write> = access %indexable_1, %x_166
+            %48:f32 = load_vector_element %47, 0u
+            %x_168:f32 = let %48
+            %50:i32 = load %i
+            %x_170:i32 = let %50
             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))
-            %47:ptr<function, vec4<f32>, read_write> = access %indexable_2, %x_170
-            %x_172:f32 = load_vector_element %47, 1u
-            %x_175:i32 = load %i
+            %52:ptr<function, vec4<f32>, read_write> = access %indexable_2, %x_170
+            %53:f32 = load_vector_element %52, 1u
+            %x_172:f32 = let %53
+            %55:i32 = load %i
+            %x_175:i32 = let %55
             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))
-            %50:i32 = convert %x_168
-            %51:i32 = convert %x_172
-            %52:i32 = mul %50, %51
-            %53:i32 = mul %x_175, 9i
-            %54:i32 = add %52, %53
-            %55:i32 = add %54, 11i
-            %56:i32 = mod %55, 16i
-            %57:ptr<function, vec4<f32>, read_write> = access %indexable_3, %56
-            %58:vec4<f32> = load %57
-            store %res, %58
+            %57:i32 = call %tint_f32_to_i32, %x_168
+            %59:i32 = let %57
+            %60:i32 = call %tint_f32_to_i32, %x_172
+            %61:i32 = mul %59, %60
+            %62:i32 = mul %x_175, 9i
+            %63:i32 = add %61, %62
+            %64:i32 = add %63, 11i
+            %65:i32 = call %tint_mod_i32, %64, 16i
+            %67:ptr<function, vec4<f32>, read_write> = access %indexable_3, %65
+            %68:vec4<f32> = load %67
+            store %res, %68
             exit_if  # if_6
           }
         }
-        continue %b9
+        continue  # -> $B9
       }
-      %b9 = block {  # continuing
-        %59:i32 = load %i
-        %60:i32 = add %59, 1i
-        store %i, %60
-        next_iteration %b8
+      $B9: {  # continuing
+        %69:i32 = load %i
+        %70:i32 = add %69, 1i
+        store %i, %70
+        next_iteration  # -> $B8
       }
     }
-    %x_184:vec4<f32> = load %res
+    %71:vec4<f32> = load %res
+    %x_184:vec4<f32> = let %71
     ret %x_184
   }
 }
-%main_1 = func():void -> %b13 {
-  %b13 = block {
+%main_1 = func():void {
+  $B13: {
     %lin:ptr<function, vec2<f32>, read_write> = var
     %param_2:ptr<function, vec2<f32>, read_write> = var
-    %65:vec4<f32> = load %gl_FragCoord
-    %66:vec2<f32> = swizzle %65, xy
-    %67:ptr<uniform, vec2<f32>, read> = access %x_20, 0u
-    %68:vec2<f32> = load %67
-    %69:vec2<f32> = div %66, %68
-    store %lin, %69
-    %70:vec2<f32> = load %lin
-    %71:vec2<f32> = mul %70, 32.0f
-    %72:vec2<f32> = floor %71
-    store %lin, %72
-    %73:vec2<f32> = load %lin
-    store %param_2, %73
-    %x_114:vec4<f32> = call %match_vf2_, %param_2
+    %76:vec4<f32> = load %gl_FragCoord
+    %77:vec2<f32> = swizzle %76, xy
+    %78:ptr<uniform, vec2<f32>, read> = access %x_20, 0u
+    %79:vec2<f32> = load %78
+    %80:vec2<f32> = div %77, %79
+    store %lin, %80
+    %81:vec2<f32> = load %lin
+    %82:vec2<f32> = mul %81, 32.0f
+    %83:vec2<f32> = floor %82
+    store %lin, %83
+    %84:vec2<f32> = load %lin
+    store %param_2, %84
+    %85:vec4<f32> = call %match_vf2_, %param_2
+    %x_114:vec4<f32> = let %85
     store %x_GLF_color, %x_114
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b14 {
-  %b14 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B14: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %77:void = call %main_1
-    %78:vec4<f32> = load %x_GLF_color
-    %79:main_out = construct %78
-    ret %79
+    %89:void = call %main_1
+    %90:vec4<f32> = load %x_GLF_color
+    %91:main_out = construct %90
+    ret %91
+  }
+}
+%tint_mod_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 = let %99
+    %101:i32 = div %lhs, %100
+    %102:i32 = mul %101, %100
+    %103:i32 = sub %lhs, %102
+    ret %103
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B16: {
+    %105:i32 = convert %value
+    %106:bool = gte %value, -2147483648.0f
+    %107:i32 = select -2147483648i, %105, %106
+    %108:bool = lte %value, 2147483520.0f
+    %109:i32 = select 2147483647i, %107, %108
+    ret %109
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/1.wgsl.expected.ir.msl
index b3060ef..568103b 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/1.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/1.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,7 +8,7 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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
@@ -16,50 +16,60 @@
   %state:ptr<private, array<i32, 16>, read_write> = var
 }
 
-%collision_vf2_vf4_ = func(%pos:ptr<function, vec2<f32>, read_write>, %quad:ptr<function, vec4<f32>, read_write>):bool -> %b2 {
-  %b2 = block {
+%collision_vf2_vf4_ = func(%pos:ptr<function, vec2<f32>, read_write>, %quad:ptr<function, vec4<f32>, read_write>):bool {
+  $B2: {
     %x_116:ptr<function, vec4<bool>, read_write> = var, vec4<bool>(false)
-    %x_118:f32 = load_vector_element %pos, 0u
-    %x_120:f32 = load_vector_element %quad, 0u
-    %12:bool = lt %x_118, %x_120
-    if %12 [t: %b3] {  # if_1
-      %b3 = block {  # true
+    %10:f32 = load_vector_element %pos, 0u
+    %x_118:f32 = let %10
+    %12:f32 = load_vector_element %quad, 0u
+    %x_120:f32 = let %12
+    %14:bool = lt %x_118, %x_120
+    if %14 [t: $B3] {  # if_1
+      $B3: {  # true
         ret false
       }
     }
-    %x_125:f32 = load_vector_element %pos, 1u
-    %x_127:f32 = load_vector_element %quad, 1u
-    %15:bool = lt %x_125, %x_127
-    if %15 [t: %b4] {  # if_2
-      %b4 = block {  # true
+    %15:f32 = load_vector_element %pos, 1u
+    %x_125:f32 = let %15
+    %17:f32 = load_vector_element %quad, 1u
+    %x_127:f32 = let %17
+    %19:bool = lt %x_125, %x_127
+    if %19 [t: $B4] {  # if_2
+      $B4: {  # true
         ret false
       }
     }
-    %x_132:f32 = load_vector_element %pos, 0u
-    %x_134:f32 = load_vector_element %quad, 0u
-    %x_136:f32 = load_vector_element %quad, 2u
-    %19:f32 = add %x_134, %x_136
-    %20:bool = gt %x_132, %19
-    if %20 [t: %b5] {  # if_3
-      %b5 = block {  # true
+    %20:f32 = load_vector_element %pos, 0u
+    %x_132:f32 = let %20
+    %22:f32 = load_vector_element %quad, 0u
+    %x_134:f32 = let %22
+    %24:f32 = load_vector_element %quad, 2u
+    %x_136:f32 = let %24
+    %26:f32 = add %x_134, %x_136
+    %27:bool = gt %x_132, %26
+    if %27 [t: $B5] {  # if_3
+      $B5: {  # true
         ret false
       }
     }
-    %x_142:f32 = load_vector_element %pos, 1u
-    %x_144:f32 = load_vector_element %quad, 1u
-    %x_146:f32 = load_vector_element %quad, 3u
-    %24:f32 = add %x_144, %x_146
-    %25:bool = gt %x_142, %24
-    if %25 [t: %b6] {  # if_4
-      %b6 = block {  # true
+    %28:f32 = load_vector_element %pos, 1u
+    %x_142:f32 = let %28
+    %30:f32 = load_vector_element %quad, 1u
+    %x_144:f32 = let %30
+    %32:f32 = load_vector_element %quad, 3u
+    %x_146:f32 = let %32
+    %34:f32 = add %x_144, %x_146
+    %35:bool = gt %x_142, %34
+    if %35 [t: $B6] {  # if_4
+      $B6: {  # true
         ret false
       }
     }
     ret true
   }
 }
-%match_vf2_ = func(%pos_1:ptr<function, vec2<f32>, read_write>):vec4<f32> -> %b7 {
-  %b7 = block {
+%match_vf2_ = func(%pos_1:ptr<function, vec2<f32>, read_write>):vec4<f32> {
+  $B7: {
     %res:ptr<function, vec4<f32>, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %param:ptr<function, vec2<f32>, read_write> = var
@@ -70,94 +80,138 @@
     %indexable_3:ptr<function, array<vec4<f32>, 16>, read_write> = var
     store %res, vec4<f32>(0.5f, 0.5f, 1.0f, 1.0f)
     store %i, 0i
-    loop [b: %b8, c: %b9] {  # loop_1
-      %b8 = block {  # body
-        %x_156:i32 = load %i
-        %37:bool = lt %x_156, 8i
-        if %37 [t: %b10, f: %b11] {  # if_5
-          %b10 = block {  # true
+    loop [b: $B8, c: $B9] {  # loop_1
+      $B8: {  # body
+        %46:i32 = load %i
+        %x_156:i32 = let %46
+        %48:bool = lt %x_156, 8i
+        if %48 [t: $B10, f: $B11] {  # if_5
+          $B10: {  # true
             exit_if  # if_5
           }
-          %b11 = block {  # false
+          $B11: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_159:i32 = load %i
-        %x_160:vec2<f32> = load %pos_1
+        %49:i32 = load %i
+        %x_159:i32 = let %49
+        %51:vec2<f32> = load %pos_1
+        %x_160:vec2<f32> = let %51
         store %param, %x_160
         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))
-        %40:ptr<function, vec4<f32>, read_write> = access %indexable, %x_159
-        %x_162:vec4<f32> = load %40
+        %53:ptr<function, vec4<f32>, read_write> = access %indexable, %x_159
+        %54:vec4<f32> = load %53
+        %x_162:vec4<f32> = let %54
         store %param_1, %x_162
-        %x_163:bool = call %collision_vf2_vf4_, %param, %param_1
-        if %x_163 [t: %b12] {  # if_6
-          %b12 = block {  # true
-            %x_166:i32 = load %i
+        %56:bool = call %collision_vf2_vf4_, %param, %param_1
+        %x_163:bool = let %56
+        if %x_163 [t: $B12] {  # if_6
+          $B12: {  # true
+            %58:i32 = load %i
+            %x_166:i32 = let %58
             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))
-            %44:ptr<function, vec4<f32>, read_write> = access %indexable_1, %x_166
-            %x_168:f32 = load_vector_element %44, 0u
-            %x_170:i32 = load %i
+            %60:ptr<function, vec4<f32>, read_write> = access %indexable_1, %x_166
+            %61:f32 = load_vector_element %60, 0u
+            %x_168:f32 = let %61
+            %63:i32 = load %i
+            %x_170:i32 = let %63
             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))
-            %47:ptr<function, vec4<f32>, read_write> = access %indexable_2, %x_170
-            %x_172:f32 = load_vector_element %47, 1u
-            %x_175:i32 = load %i
+            %65:ptr<function, vec4<f32>, read_write> = access %indexable_2, %x_170
+            %66:f32 = load_vector_element %65, 1u
+            %x_172:f32 = let %66
+            %68:i32 = load %i
+            %x_175:i32 = let %68
             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))
-            %50:i32 = convert %x_168
-            %51:i32 = convert %x_172
-            %52:i32 = mul %50, %51
-            %53:i32 = mul %x_175, 9i
-            %54:i32 = add %52, %53
-            %55:i32 = add %54, 11i
-            %56:i32 = mod %55, 16i
-            %57:ptr<function, vec4<f32>, read_write> = access %indexable_3, %56
-            %x_181:vec4<f32> = load %57
+            %70:i32 = call %tint_f32_to_i32, %x_168
+            %72:i32 = let %70
+            %73:i32 = call %tint_f32_to_i32, %x_172
+            %74:i32 = mul %72, %73
+            %75:i32 = mul %x_175, 9i
+            %76:i32 = add %74, %75
+            %77:i32 = add %76, 11i
+            %78:i32 = call %tint_mod_i32, %77, 16i
+            %80:ptr<function, vec4<f32>, read_write> = access %indexable_3, %78
+            %81:vec4<f32> = load %80
+            %x_181:vec4<f32> = let %81
             store %res, %x_181
             exit_if  # if_6
           }
         }
-        continue %b9
+        continue  # -> $B9
       }
-      %b9 = block {  # continuing
-        %x_182:i32 = load %i
-        %60:i32 = add %x_182, 1i
-        store %i, %60
-        next_iteration %b8
+      $B9: {  # continuing
+        %83:i32 = load %i
+        %x_182:i32 = let %83
+        %85:i32 = add %x_182, 1i
+        store %i, %85
+        next_iteration  # -> $B8
       }
     }
-    %x_184:vec4<f32> = load %res
+    %86:vec4<f32> = load %res
+    %x_184:vec4<f32> = let %86
     ret %x_184
   }
 }
-%main_1 = func():void -> %b13 {
-  %b13 = block {
+%main_1 = func():void {
+  $B13: {
     %lin:ptr<function, vec2<f32>, read_write> = var
     %param_2:ptr<function, vec2<f32>, read_write> = var
-    %x_105:vec4<f32> = load %gl_FragCoord
-    %66:ptr<uniform, vec2<f32>, read> = access %x_20, 0u
-    %x_108:vec2<f32> = load %66
-    %68:f32 = access %x_105, 0u
-    %69:f32 = access %x_105, 1u
-    %70:vec2<f32> = construct %68, %69
-    %71:vec2<f32> = div %70, %x_108
-    store %lin, %71
-    %x_110:vec2<f32> = load %lin
-    %73:vec2<f32> = mul %x_110, 32.0f
-    %74:vec2<f32> = floor %73
-    store %lin, %74
-    %x_113:vec2<f32> = load %lin
+    %91:vec4<f32> = load %gl_FragCoord
+    %x_105:vec4<f32> = let %91
+    %93:ptr<uniform, vec2<f32>, read> = access %x_20, 0u
+    %94:vec2<f32> = load %93
+    %x_108:vec2<f32> = let %94
+    %96:f32 = access %x_105, 0u
+    %97:f32 = access %x_105, 1u
+    %98:vec2<f32> = construct %96, %97
+    %99:vec2<f32> = div %98, %x_108
+    store %lin, %99
+    %100:vec2<f32> = load %lin
+    %x_110:vec2<f32> = let %100
+    %102:vec2<f32> = mul %x_110, 32.0f
+    %103:vec2<f32> = floor %102
+    store %lin, %103
+    %104:vec2<f32> = load %lin
+    %x_113:vec2<f32> = let %104
     store %param_2, %x_113
-    %x_114:vec4<f32> = call %match_vf2_, %param_2
+    %106:vec4<f32> = call %match_vf2_, %param_2
+    %x_114:vec4<f32> = let %106
     store %x_GLF_color, %x_114
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b14 {
-  %b14 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B14: {
     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
+    %110:void = call %main_1
+    %111:vec4<f32> = load %x_GLF_color
+    %112:main_out = construct %111
+    ret %112
+  }
+}
+%tint_mod_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B15: {
+    %115:bool = eq %rhs, 0i
+    %116:bool = eq %lhs, -2147483648i
+    %117:bool = eq %rhs, -1i
+    %118:bool = and %116, %117
+    %119:bool = or %115, %118
+    %120:i32 = select %rhs, 1i, %119
+    %121:i32 = let %120
+    %122:i32 = div %lhs, %121
+    %123:i32 = mul %122, %121
+    %124:i32 = sub %lhs, %123
+    ret %124
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B16: {
+    %126:i32 = convert %value
+    %127:bool = gte %value, -2147483648.0f
+    %128:i32 = select -2147483648i, %126, %127
+    %129:bool = lte %value, 2147483520.0f
+    %130:i32 = select 2147483647i, %128, %129
+    ret %130
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/0-opt.spvasm.expected.ir.msl
index d3f6144..c0e38bd 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -12,159 +12,167 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %data:ptr<private, array<i32, 10>, read_write> = var
   %temp:ptr<private, array<i32, 10>, read_write> = var
   %x_28:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_32:ptr<uniform, buf1, read> = var @binding_point(0, 1)
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%merge_i1_i1_i1_ = func(%f:ptr<function, i32, read_write>, %mid:ptr<function, i32, read_write>, %to:ptr<function, i32, read_write>):void -> %b2 {
-  %b2 = block {
+%merge_i1_i1_i1_ = func(%f:ptr<function, i32, read_write>, %mid:ptr<function, i32, read_write>, %to:ptr<function, i32, read_write>):void {
+  $B2: {
     %k:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %j:ptr<function, i32, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
-    %15:i32 = load %f
-    store %k, %15
     %16:i32 = load %f
-    store %i, %16
-    %17:i32 = load %mid
-    %18:i32 = add %17, 1i
-    store %j, %18
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %19:i32 = load %i
-        %20:i32 = load %mid
-        %21:bool = lte %19, %20
-        %22:i32 = load %j
-        %23:i32 = load %to
-        %24:bool = lte %22, %23
-        %25:bool = and %21, %24
-        if %25 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    store %k, %16
+    %17:i32 = load %f
+    store %i, %17
+    %18:i32 = load %mid
+    %19:i32 = add %18, 1i
+    store %j, %19
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %20:i32 = load %i
+        %21:i32 = load %mid
+        %22:bool = lte %20, %21
+        %23:i32 = load %j
+        %24:i32 = load %to
+        %25:bool = lte %23, %24
+        %26:bool = and %22, %25
+        if %26 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %26:i32 = load %i
-        %27:ptr<private, i32, read_write> = access %data, %26
-        %28:i32 = load %27
-        %29:i32 = load %j
-        %30:ptr<private, i32, read_write> = access %data, %29
-        %31:i32 = load %30
-        %32:bool = lt %28, %31
-        if %32 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
-            %x_280:i32 = load %k
+        %27:i32 = load %i
+        %28:ptr<private, i32, read_write> = access %data, %27
+        %29:i32 = load %28
+        %30:i32 = load %j
+        %31:ptr<private, i32, read_write> = access %data, %30
+        %32:i32 = load %31
+        %33:bool = lt %29, %32
+        if %33 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
             %34:i32 = load %k
-            %35:i32 = add %34, 1i
-            store %k, %35
-            %x_282:i32 = load %i
-            %37:i32 = load %i
-            %38:i32 = add %37, 1i
-            store %i, %38
-            %39:ptr<private, i32, read_write> = access %temp, %x_280
-            %40:ptr<private, i32, read_write> = access %data, %x_282
-            %41:i32 = load %40
-            store %39, %41
+            %x_280:i32 = let %34
+            %36:i32 = load %k
+            %37:i32 = add %36, 1i
+            store %k, %37
+            %38:i32 = load %i
+            %x_282:i32 = let %38
+            %40:i32 = load %i
+            %41:i32 = add %40, 1i
+            store %i, %41
+            %42:ptr<private, i32, read_write> = access %temp, %x_280
+            %43:ptr<private, i32, read_write> = access %data, %x_282
+            %44:i32 = load %43
+            store %42, %44
             exit_if  # if_2
           }
-          %b8 = block {  # false
-            %x_287:i32 = load %k
-            %43:i32 = load %k
-            %44:i32 = add %43, 1i
-            store %k, %44
-            %x_289:i32 = load %j
-            %46:i32 = load %j
-            %47:i32 = add %46, 1i
-            store %j, %47
-            %48:ptr<private, i32, read_write> = access %temp, %x_287
-            %49:ptr<private, i32, read_write> = access %data, %x_289
-            %50:i32 = load %49
-            store %48, %50
+          $B8: {  # false
+            %45:i32 = load %k
+            %x_287:i32 = let %45
+            %47:i32 = load %k
+            %48:i32 = add %47, 1i
+            store %k, %48
+            %49:i32 = load %j
+            %x_289:i32 = let %49
+            %51:i32 = load %j
+            %52:i32 = add %51, 1i
+            store %j, %52
+            %53:ptr<private, i32, read_write> = access %temp, %x_287
+            %54:ptr<private, i32, read_write> = access %data, %x_289
+            %55:i32 = load %54
+            store %53, %55
             exit_if  # if_2
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
-    loop [b: %b9, c: %b10] {  # loop_2
-      %b9 = block {  # body
-        %51:i32 = load %i
-        %52:bool = lt %51, 10i
-        %53:i32 = load %i
-        %54:i32 = load %mid
-        %55:bool = lte %53, %54
-        %56:bool = and %52, %55
-        if %56 [t: %b11, f: %b12] {  # if_3
-          %b11 = block {  # true
+    loop [b: $B9, c: $B10] {  # loop_2
+      $B9: {  # body
+        %56:i32 = load %i
+        %57:bool = lt %56, 10i
+        %58:i32 = load %i
+        %59:i32 = load %mid
+        %60:bool = lte %58, %59
+        %61:bool = and %57, %60
+        if %61 [t: $B11, f: $B12] {  # if_3
+          $B11: {  # true
             exit_if  # if_3
           }
-          %b12 = block {  # false
+          $B12: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_305:i32 = load %k
-        %58:i32 = load %k
-        %59:i32 = add %58, 1i
-        store %k, %59
-        %x_307:i32 = load %i
-        %61:i32 = load %i
-        %62:i32 = add %61, 1i
-        store %i, %62
-        %63:ptr<private, i32, read_write> = access %temp, %x_305
-        %64:ptr<private, i32, read_write> = access %data, %x_307
-        %65:i32 = load %64
-        store %63, %65
-        continue %b10
+        %62:i32 = load %k
+        %x_305:i32 = let %62
+        %64:i32 = load %k
+        %65:i32 = add %64, 1i
+        store %k, %65
+        %66:i32 = load %i
+        %x_307:i32 = let %66
+        %68:i32 = load %i
+        %69:i32 = add %68, 1i
+        store %i, %69
+        %70:ptr<private, i32, read_write> = access %temp, %x_305
+        %71:ptr<private, i32, read_write> = access %data, %x_307
+        %72:i32 = load %71
+        store %70, %72
+        continue  # -> $B10
       }
-      %b10 = block {  # continuing
-        next_iteration %b9
+      $B10: {  # continuing
+        next_iteration  # -> $B9
       }
     }
-    %66:i32 = load %f
-    store %i_1, %66
-    loop [b: %b13, c: %b14] {  # loop_3
-      %b13 = block {  # body
-        %67:i32 = load %i_1
-        %68:i32 = load %to
-        %69:bool = lte %67, %68
-        if %69 [t: %b15, f: %b16] {  # if_4
-          %b15 = block {  # true
+    %73:i32 = load %f
+    store %i_1, %73
+    loop [b: $B13, c: $B14] {  # loop_3
+      $B13: {  # body
+        %74:i32 = load %i_1
+        %75:i32 = load %to
+        %76:bool = lte %74, %75
+        if %76 [t: $B15, f: $B16] {  # if_4
+          $B15: {  # true
             exit_if  # if_4
           }
-          %b16 = block {  # false
+          $B16: {  # false
             exit_loop  # loop_3
           }
         }
-        %x_321:i32 = load %i_1
-        %71:ptr<private, i32, read_write> = access %data, %x_321
-        %72:i32 = load %i_1
-        %73:ptr<private, i32, read_write> = access %temp, %72
-        %74:i32 = load %73
-        store %71, %74
-        continue %b14
+        %77:i32 = load %i_1
+        %x_321:i32 = let %77
+        %79:ptr<private, i32, read_write> = access %data, %x_321
+        %80:i32 = load %i_1
+        %81:ptr<private, i32, read_write> = access %temp, %80
+        %82:i32 = load %81
+        store %79, %82
+        continue  # -> $B14
       }
-      %b14 = block {  # continuing
-        %75:i32 = load %i_1
-        %76:i32 = add %75, 1i
-        store %i_1, %76
-        next_iteration %b13
+      $B14: {  # continuing
+        %83:i32 = load %i_1
+        %84:i32 = add %83, 1i
+        store %i_1, %84
+        next_iteration  # -> $B13
       }
     }
     ret
   }
 }
-%mergeSort_ = func():void -> %b17 {
-  %b17 = block {
+%mergeSort_ = func():void {
+  $B17: {
     %low:ptr<function, i32, read_write> = var
     %high:ptr<function, i32, read_write> = var
     %m:ptr<function, i32, read_write> = var
@@ -178,319 +186,332 @@
     store %low, 0i
     store %high, 9i
     store %m, 1i
-    loop [b: %b18, c: %b19] {  # loop_4
-      %b18 = block {  # body
-        %88:i32 = load %m
-        %89:i32 = load %high
-        %90:bool = lte %88, %89
-        if %90 [t: %b20, f: %b21] {  # if_5
-          %b20 = block {  # true
+    loop [b: $B18, c: $B19] {  # loop_4
+      $B18: {  # body
+        %96:i32 = load %m
+        %97:i32 = load %high
+        %98:bool = lte %96, %97
+        if %98 [t: $B20, f: $B21] {  # if_5
+          $B20: {  # true
             exit_if  # if_5
           }
-          %b21 = block {  # false
+          $B21: {  # false
             exit_loop  # loop_4
           }
         }
-        %91:i32 = load %low
-        store %i_2, %91
-        loop [b: %b22, c: %b23] {  # loop_5
-          %b22 = block {  # body
-            %92:i32 = load %i_2
-            %93:i32 = load %high
-            %94:bool = lt %92, %93
-            if %94 [t: %b24, f: %b25] {  # if_6
-              %b24 = block {  # true
+        %99:i32 = load %low
+        store %i_2, %99
+        loop [b: $B22, c: $B23] {  # loop_5
+          $B22: {  # body
+            %100:i32 = load %i_2
+            %101:i32 = load %high
+            %102:bool = lt %100, %101
+            if %102 [t: $B24, f: $B25] {  # if_6
+              $B24: {  # true
                 exit_if  # if_6
               }
-              %b25 = block {  # false
+              $B25: {  # false
                 exit_loop  # loop_5
               }
             }
-            %95:i32 = load %i_2
-            store %f_1, %95
-            %96:i32 = load %i_2
-            %97:i32 = load %m
-            %98:i32 = add %96, %97
-            %99:i32 = sub %98, 1i
-            store %mid_1, %99
-            %100:i32 = load %i_2
-            %101:i32 = load %m
-            %102:i32 = mul 2i, %101
-            %103:i32 = add %100, %102
-            %104:i32 = sub %103, 1i
-            %105:i32 = load %high
-            %106:i32 = min %104, %105
-            store %to_1, %106
-            %107:i32 = load %f_1
-            store %param, %107
-            %108:i32 = load %mid_1
-            store %param_1, %108
-            %109:i32 = load %to_1
-            store %param_2, %109
-            %110:void = call %merge_i1_i1_i1_, %param, %param_1, %param_2
-            continue %b23
+            %103:i32 = load %i_2
+            store %f_1, %103
+            %104:i32 = load %i_2
+            %105:i32 = load %m
+            %106:i32 = add %104, %105
+            %107:i32 = sub %106, 1i
+            store %mid_1, %107
+            %108:i32 = load %i_2
+            %109:i32 = load %m
+            %110:i32 = mul 2i, %109
+            %111:i32 = add %108, %110
+            %112:i32 = sub %111, 1i
+            %113:i32 = load %high
+            %114:i32 = min %112, %113
+            store %to_1, %114
+            %115:i32 = load %f_1
+            store %param, %115
+            %116:i32 = load %mid_1
+            store %param_1, %116
+            %117:i32 = load %to_1
+            store %param_2, %117
+            %118:void = call %merge_i1_i1_i1_, %param, %param_1, %param_2
+            continue  # -> $B23
           }
-          %b23 = block {  # continuing
-            %111:i32 = load %i_2
-            %112:i32 = load %m
-            %113:i32 = mul 2i, %112
-            %114:i32 = add %111, %113
-            store %i_2, %114
-            next_iteration %b22
+          $B23: {  # continuing
+            %119:i32 = load %i_2
+            %120:i32 = load %m
+            %121:i32 = mul 2i, %120
+            %122:i32 = add %119, %121
+            store %i_2, %122
+            next_iteration  # -> $B22
           }
         }
-        continue %b19
+        continue  # -> $B19
       }
-      %b19 = block {  # continuing
-        %115:i32 = load %m
-        %116:i32 = mul 2i, %115
-        store %m, %116
-        next_iteration %b18
+      $B19: {  # continuing
+        %123:i32 = load %m
+        %124:i32 = mul 2i, %123
+        store %m, %124
+        next_iteration  # -> $B18
       }
     }
     ret
   }
 }
-%main_1 = func():void -> %b26 {
-  %b26 = block {
+%main_1 = func():void {
+  $B26: {
     %i_3:ptr<function, i32, read_write> = var
     %j_1:ptr<function, i32, read_write> = var
     %grey:ptr<function, f32, read_write> = var
-    %121:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
-    %122:f32 = load_vector_element %121, 0u
-    %123:i32 = convert %122
-    store %i_3, %123
-    loop [b: %b27, c: %b28] {  # loop_6
-      %b27 = block {  # body
-        %x_93:i32 = load %i_3
-        switch %x_93 [c: (9i, %b29), c: (8i, %b30), c: (7i, %b31), c: (6i, %b32), c: (5i, %b33), c: (4i, %b34), c: (3i, %b35), c: (2i, %b36), c: (1i, %b37), c: (0i, %b38), c: (default, %b39)] {  # switch_1
-          %b29 = block {  # case
-            %x_123:i32 = load %i_3
-            %126:ptr<private, i32, read_write> = access %data, %x_123
-            store %126, -5i
+    %129:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
+    %130:f32 = load_vector_element %129, 0u
+    %131:i32 = call %tint_f32_to_i32, %130
+    store %i_3, %131
+    loop [b: $B27, c: $B28] {  # loop_6
+      $B27: {  # body
+        %133:i32 = load %i_3
+        %x_93:i32 = let %133
+        switch %x_93 [c: (9i, $B29), c: (8i, $B30), c: (7i, $B31), c: (6i, $B32), c: (5i, $B33), c: (4i, $B34), c: (3i, $B35), c: (2i, $B36), c: (1i, $B37), c: (0i, $B38), c: (default, $B39)] {  # switch_1
+          $B29: {  # case
+            %135:i32 = load %i_3
+            %x_123:i32 = let %135
+            %137:ptr<private, i32, read_write> = access %data, %x_123
+            store %137, -5i
             exit_switch  # switch_1
           }
-          %b30 = block {  # case
-            %x_121:i32 = load %i_3
-            %128:ptr<private, i32, read_write> = access %data, %x_121
-            store %128, -4i
+          $B30: {  # case
+            %138:i32 = load %i_3
+            %x_121:i32 = let %138
+            %140:ptr<private, i32, read_write> = access %data, %x_121
+            store %140, -4i
             exit_switch  # switch_1
           }
-          %b31 = block {  # case
-            %x_119:i32 = load %i_3
-            %130:ptr<private, i32, read_write> = access %data, %x_119
-            store %130, -3i
+          $B31: {  # case
+            %141:i32 = load %i_3
+            %x_119:i32 = let %141
+            %143:ptr<private, i32, read_write> = access %data, %x_119
+            store %143, -3i
             exit_switch  # switch_1
           }
-          %b32 = block {  # case
-            %x_117:i32 = load %i_3
-            %132:ptr<private, i32, read_write> = access %data, %x_117
-            store %132, -2i
+          $B32: {  # case
+            %144:i32 = load %i_3
+            %x_117:i32 = let %144
+            %146:ptr<private, i32, read_write> = access %data, %x_117
+            store %146, -2i
             exit_switch  # switch_1
           }
-          %b33 = block {  # case
-            %x_115:i32 = load %i_3
-            %134:ptr<private, i32, read_write> = access %data, %x_115
-            store %134, -1i
+          $B33: {  # case
+            %147:i32 = load %i_3
+            %x_115:i32 = let %147
+            %149:ptr<private, i32, read_write> = access %data, %x_115
+            store %149, -1i
             exit_switch  # switch_1
           }
-          %b34 = block {  # case
-            %x_113:i32 = load %i_3
-            %136:ptr<private, i32, read_write> = access %data, %x_113
-            store %136, 0i
+          $B34: {  # case
+            %150:i32 = load %i_3
+            %x_113:i32 = let %150
+            %152:ptr<private, i32, read_write> = access %data, %x_113
+            store %152, 0i
             exit_switch  # switch_1
           }
-          %b35 = block {  # case
-            %x_111:i32 = load %i_3
-            %138:ptr<private, i32, read_write> = access %data, %x_111
-            store %138, 1i
+          $B35: {  # case
+            %153:i32 = load %i_3
+            %x_111:i32 = let %153
+            %155:ptr<private, i32, read_write> = access %data, %x_111
+            store %155, 1i
             exit_switch  # switch_1
           }
-          %b36 = block {  # case
-            %x_109:i32 = load %i_3
-            %140:ptr<private, i32, read_write> = access %data, %x_109
-            store %140, 2i
+          $B36: {  # case
+            %156:i32 = load %i_3
+            %x_109:i32 = let %156
+            %158:ptr<private, i32, read_write> = access %data, %x_109
+            store %158, 2i
             exit_switch  # switch_1
           }
-          %b37 = block {  # case
-            %x_107:i32 = load %i_3
-            %142:ptr<private, i32, read_write> = access %data, %x_107
-            store %142, 3i
+          $B37: {  # case
+            %159:i32 = load %i_3
+            %x_107:i32 = let %159
+            %161:ptr<private, i32, read_write> = access %data, %x_107
+            store %161, 3i
             exit_switch  # switch_1
           }
-          %b38 = block {  # case
-            %x_105:i32 = load %i_3
-            %144:ptr<private, i32, read_write> = access %data, %x_105
-            store %144, 4i
+          $B38: {  # case
+            %162:i32 = load %i_3
+            %x_105:i32 = let %162
+            %164:ptr<private, i32, read_write> = access %data, %x_105
+            store %164, 4i
             exit_switch  # switch_1
           }
-          %b39 = block {  # case
+          $B39: {  # case
             exit_switch  # switch_1
           }
         }
-        %145:i32 = load %i_3
-        %146:i32 = add %145, 1i
-        store %i_3, %146
-        continue %b28
+        %165:i32 = load %i_3
+        %166:i32 = add %165, 1i
+        store %i_3, %166
+        continue  # -> $B28
       }
-      %b28 = block {  # continuing
-        %x_127:i32 = load %i_3
-        %148:bool = lt %x_127, 10i
-        %149:bool = eq %148, false
-        break_if %149 %b27
+      $B28: {  # continuing
+        %167:i32 = load %i_3
+        %x_127:i32 = let %167
+        %169:bool = lt %x_127, 10i
+        %170:bool = eq %169, false
+        break_if %170  # -> [t: exit_loop loop_6, f: $B27]
       }
     }
     store %j_1, 0i
-    loop [b: %b40, c: %b41] {  # loop_7
-      %b40 = block {  # body
-        %150:i32 = load %j_1
-        %151:bool = lt %150, 10i
-        if %151 [t: %b42, f: %b43] {  # if_7
-          %b42 = block {  # true
+    loop [b: $B40, c: $B41] {  # loop_7
+      $B40: {  # body
+        %171:i32 = load %j_1
+        %172:bool = lt %171, 10i
+        if %172 [t: $B42, f: $B43] {  # if_7
+          $B42: {  # true
             exit_if  # if_7
           }
-          %b43 = block {  # false
+          $B43: {  # false
             exit_loop  # loop_7
           }
         }
-        %x_136:i32 = load %j_1
-        %153:ptr<private, i32, read_write> = access %temp, %x_136
-        %154:i32 = load %j_1
-        %155:ptr<private, i32, read_write> = access %data, %154
-        %156:i32 = load %155
-        store %153, %156
-        continue %b41
+        %173:i32 = load %j_1
+        %x_136:i32 = let %173
+        %175:ptr<private, i32, read_write> = access %temp, %x_136
+        %176:i32 = load %j_1
+        %177:ptr<private, i32, read_write> = access %data, %176
+        %178:i32 = load %177
+        store %175, %178
+        continue  # -> $B41
       }
-      %b41 = block {  # continuing
-        %157:i32 = load %j_1
-        %158:i32 = add %157, 1i
-        store %j_1, %158
-        next_iteration %b40
+      $B41: {  # continuing
+        %179:i32 = load %j_1
+        %180:i32 = add %179, 1i
+        store %j_1, %180
+        next_iteration  # -> $B40
       }
     }
-    %159:void = call %mergeSort_
-    %160:f32 = load_vector_element %gl_FragCoord, 1u
-    %161:i32 = convert %160
-    %162:bool = lt %161, 30i
-    if %162 [t: %b44, f: %b45] {  # if_8
-      %b44 = block {  # true
-        %163:ptr<private, i32, read_write> = access %data, 0i
-        %164:i32 = load %163
-        %165:f32 = convert %164
-        %166:f32 = div %165, 10.0f
-        %167:f32 = add 0.5f, %166
-        store %grey, %167
+    %181:void = call %mergeSort_
+    %182:f32 = load_vector_element %gl_FragCoord, 1u
+    %183:i32 = call %tint_f32_to_i32, %182
+    %184:bool = lt %183, 30i
+    if %184 [t: $B44, f: $B45] {  # if_8
+      $B44: {  # true
+        %185:ptr<private, i32, read_write> = access %data, 0i
+        %186:i32 = load %185
+        %187:f32 = convert %186
+        %188:f32 = div %187, 10.0f
+        %189:f32 = add 0.5f, %188
+        store %grey, %189
         exit_if  # if_8
       }
-      %b45 = block {  # false
-        %168:f32 = load_vector_element %gl_FragCoord, 1u
-        %169:i32 = convert %168
-        %170:bool = lt %169, 60i
-        if %170 [t: %b46, f: %b47] {  # if_9
-          %b46 = block {  # true
-            %171:ptr<private, i32, read_write> = access %data, 1i
-            %172:i32 = load %171
-            %173:f32 = convert %172
-            %174:f32 = div %173, 10.0f
-            %175:f32 = add 0.5f, %174
-            store %grey, %175
+      $B45: {  # false
+        %190:f32 = load_vector_element %gl_FragCoord, 1u
+        %191:i32 = call %tint_f32_to_i32, %190
+        %192:bool = lt %191, 60i
+        if %192 [t: $B46, f: $B47] {  # if_9
+          $B46: {  # true
+            %193:ptr<private, i32, read_write> = access %data, 1i
+            %194:i32 = load %193
+            %195:f32 = convert %194
+            %196:f32 = div %195, 10.0f
+            %197:f32 = add 0.5f, %196
+            store %grey, %197
             exit_if  # if_9
           }
-          %b47 = block {  # false
-            %176:f32 = load_vector_element %gl_FragCoord, 1u
-            %177:i32 = convert %176
-            %178:bool = lt %177, 90i
-            if %178 [t: %b48, f: %b49] {  # if_10
-              %b48 = block {  # true
-                %179:ptr<private, i32, read_write> = access %data, 2i
-                %180:i32 = load %179
-                %181:f32 = convert %180
-                %182:f32 = div %181, 10.0f
-                %183:f32 = add 0.5f, %182
-                store %grey, %183
+          $B47: {  # false
+            %198:f32 = load_vector_element %gl_FragCoord, 1u
+            %199:i32 = call %tint_f32_to_i32, %198
+            %200:bool = lt %199, 90i
+            if %200 [t: $B48, f: $B49] {  # if_10
+              $B48: {  # true
+                %201:ptr<private, i32, read_write> = access %data, 2i
+                %202:i32 = load %201
+                %203:f32 = convert %202
+                %204:f32 = div %203, 10.0f
+                %205:f32 = add 0.5f, %204
+                store %grey, %205
                 exit_if  # if_10
               }
-              %b49 = block {  # false
-                %184:f32 = load_vector_element %gl_FragCoord, 1u
-                %185:i32 = convert %184
-                %186:bool = lt %185, 120i
-                if %186 [t: %b50, f: %b51] {  # if_11
-                  %b50 = block {  # true
-                    %187:ptr<private, i32, read_write> = access %data, 3i
-                    %188:i32 = load %187
-                    %189:f32 = convert %188
-                    %190:f32 = div %189, 10.0f
-                    %191:f32 = add 0.5f, %190
-                    store %grey, %191
+              $B49: {  # false
+                %206:f32 = load_vector_element %gl_FragCoord, 1u
+                %207:i32 = call %tint_f32_to_i32, %206
+                %208:bool = lt %207, 120i
+                if %208 [t: $B50, f: $B51] {  # if_11
+                  $B50: {  # true
+                    %209:ptr<private, i32, read_write> = access %data, 3i
+                    %210:i32 = load %209
+                    %211:f32 = convert %210
+                    %212:f32 = div %211, 10.0f
+                    %213:f32 = add 0.5f, %212
+                    store %grey, %213
                     exit_if  # if_11
                   }
-                  %b51 = block {  # false
-                    %192:f32 = load_vector_element %gl_FragCoord, 1u
-                    %193:i32 = convert %192
-                    %194:bool = lt %193, 150i
-                    if %194 [t: %b52, f: %b53] {  # if_12
-                      %b52 = block {  # true
-                        discard
+                  $B51: {  # false
+                    %214:f32 = load_vector_element %gl_FragCoord, 1u
+                    %215:i32 = call %tint_f32_to_i32, %214
+                    %216:bool = lt %215, 150i
+                    if %216 [t: $B52, f: $B53] {  # if_12
+                      $B52: {  # true
+                        store %continue_execution, false
                         exit_if  # if_12
                       }
-                      %b53 = block {  # false
-                        %195:f32 = load_vector_element %gl_FragCoord, 1u
-                        %196:i32 = convert %195
-                        %197:bool = lt %196, 180i
-                        if %197 [t: %b54, f: %b55] {  # if_13
-                          %b54 = block {  # true
-                            %198:ptr<private, i32, read_write> = access %data, 5i
-                            %199:i32 = load %198
-                            %200:f32 = convert %199
-                            %201:f32 = div %200, 10.0f
-                            %202:f32 = add 0.5f, %201
-                            store %grey, %202
+                      $B53: {  # false
+                        %217:f32 = load_vector_element %gl_FragCoord, 1u
+                        %218:i32 = call %tint_f32_to_i32, %217
+                        %219:bool = lt %218, 180i
+                        if %219 [t: $B54, f: $B55] {  # if_13
+                          $B54: {  # true
+                            %220:ptr<private, i32, read_write> = access %data, 5i
+                            %221:i32 = load %220
+                            %222:f32 = convert %221
+                            %223:f32 = div %222, 10.0f
+                            %224:f32 = add 0.5f, %223
+                            store %grey, %224
                             exit_if  # if_13
                           }
-                          %b55 = block {  # false
-                            %203:f32 = load_vector_element %gl_FragCoord, 1u
-                            %204:i32 = convert %203
-                            %205:bool = lt %204, 210i
-                            if %205 [t: %b56, f: %b57] {  # if_14
-                              %b56 = block {  # true
-                                %206:ptr<private, i32, read_write> = access %data, 6i
-                                %207:i32 = load %206
-                                %208:f32 = convert %207
-                                %209:f32 = div %208, 10.0f
-                                %210:f32 = add 0.5f, %209
-                                store %grey, %210
+                          $B55: {  # false
+                            %225:f32 = load_vector_element %gl_FragCoord, 1u
+                            %226:i32 = call %tint_f32_to_i32, %225
+                            %227:bool = lt %226, 210i
+                            if %227 [t: $B56, f: $B57] {  # if_14
+                              $B56: {  # true
+                                %228:ptr<private, i32, read_write> = access %data, 6i
+                                %229:i32 = load %228
+                                %230:f32 = convert %229
+                                %231:f32 = div %230, 10.0f
+                                %232:f32 = add 0.5f, %231
+                                store %grey, %232
                                 exit_if  # if_14
                               }
-                              %b57 = block {  # false
-                                %211:f32 = load_vector_element %gl_FragCoord, 1u
-                                %212:i32 = convert %211
-                                %213:bool = lt %212, 240i
-                                if %213 [t: %b58, f: %b59] {  # if_15
-                                  %b58 = block {  # true
-                                    %214:ptr<private, i32, read_write> = access %data, 7i
-                                    %215:i32 = load %214
-                                    %216:f32 = convert %215
-                                    %217:f32 = div %216, 10.0f
-                                    %218:f32 = add 0.5f, %217
-                                    store %grey, %218
+                              $B57: {  # false
+                                %233:f32 = load_vector_element %gl_FragCoord, 1u
+                                %234:i32 = call %tint_f32_to_i32, %233
+                                %235:bool = lt %234, 240i
+                                if %235 [t: $B58, f: $B59] {  # if_15
+                                  $B58: {  # true
+                                    %236:ptr<private, i32, read_write> = access %data, 7i
+                                    %237:i32 = load %236
+                                    %238:f32 = convert %237
+                                    %239:f32 = div %238, 10.0f
+                                    %240:f32 = add 0.5f, %239
+                                    store %grey, %240
                                     exit_if  # if_15
                                   }
-                                  %b59 = block {  # false
-                                    %219:f32 = load_vector_element %gl_FragCoord, 1u
-                                    %220:i32 = convert %219
-                                    %221:bool = lt %220, 270i
-                                    if %221 [t: %b60, f: %b61] {  # if_16
-                                      %b60 = block {  # true
-                                        %222:ptr<private, i32, read_write> = access %data, 8i
-                                        %223:i32 = load %222
-                                        %224:f32 = convert %223
-                                        %225:f32 = div %224, 10.0f
-                                        %226:f32 = add 0.5f, %225
-                                        store %grey, %226
+                                  $B59: {  # false
+                                    %241:f32 = load_vector_element %gl_FragCoord, 1u
+                                    %242:i32 = call %tint_f32_to_i32, %241
+                                    %243:bool = lt %242, 270i
+                                    if %243 [t: $B60, f: $B61] {  # if_16
+                                      $B60: {  # true
+                                        %244:ptr<private, i32, read_write> = access %data, 8i
+                                        %245:i32 = load %244
+                                        %246:f32 = convert %245
+                                        %247:f32 = div %246, 10.0f
+                                        %248:f32 = add 0.5f, %247
+                                        store %grey, %248
                                         exit_if  # if_16
                                       }
-                                      %b61 = block {  # false
-                                        discard
+                                      $B61: {  # false
+                                        store %continue_execution, false
                                         exit_if  # if_16
                                       }
                                     }
@@ -518,23 +539,41 @@
         exit_if  # if_8
       }
     }
-    %227:f32 = load %grey
-    %x_248:vec3<f32> = construct %227
-    %229:f32 = access %x_248, 0u
-    %230:f32 = access %x_248, 1u
-    %231:f32 = access %x_248, 2u
-    %232:vec4<f32> = construct %229, %230, %231, 1.0f
-    store %x_GLF_color, %232
+    %249:f32 = load %grey
+    %250:vec3<f32> = construct %249
+    %x_248:vec3<f32> = let %250
+    %252:f32 = access %x_248, 0u
+    %253:f32 = access %x_248, 1u
+    %254:f32 = access %x_248, 2u
+    %255:vec4<f32> = construct %252, %253, %254, 1.0f
+    store %x_GLF_color, %255
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b62 {
-  %b62 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B62: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %235:void = call %main_1
-    %236:vec4<f32> = load %x_GLF_color
-    %237:main_out = construct %236
-    ret %237
+    %258:void = call %main_1
+    %259:vec4<f32> = load %x_GLF_color
+    %260:main_out = construct %259
+    %261:bool = load %continue_execution
+    %262:bool = eq %261, false
+    if %262 [t: $B63] {  # if_17
+      $B63: {  # true
+        terminate_invocation
+      }
+    }
+    ret %260
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B64: {
+    %264:i32 = convert %value
+    %265:bool = gte %value, -2147483648.0f
+    %266:i32 = select -2147483648i, %264, %265
+    %267:bool = lte %value, 2147483520.0f
+    %268:i32 = select 2147483647i, %266, %267
+    ret %268
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/0-opt.wgsl.expected.ir.msl
index 69006f7..6d082fd 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -12,153 +12,184 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %data:ptr<private, array<i32, 10>, read_write> = var
   %temp:ptr<private, array<i32, 10>, read_write> = var
   %x_28:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_32:ptr<uniform, buf1, read> = var @binding_point(0, 1)
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%merge_i1_i1_i1_ = func(%f:ptr<function, i32, read_write>, %mid:ptr<function, i32, read_write>, %to:ptr<function, i32, read_write>):void -> %b2 {
-  %b2 = block {
+%merge_i1_i1_i1_ = func(%f:ptr<function, i32, read_write>, %mid:ptr<function, i32, read_write>, %to:ptr<function, i32, read_write>):void {
+  $B2: {
     %k:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %j:ptr<function, i32, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
-    %x_254:i32 = load %f
+    %16:i32 = load %f
+    %x_254:i32 = let %16
     store %k, %x_254
-    %x_255:i32 = load %f
+    %18:i32 = load %f
+    %x_255:i32 = let %18
     store %i, %x_255
-    %x_256:i32 = load %mid
-    %18:i32 = add %x_256, 1i
-    store %j, %18
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_262:i32 = load %i
-        %x_263:i32 = load %mid
-        %x_265:i32 = load %j
-        %x_266:i32 = load %to
-        %23:bool = lte %x_262, %x_263
-        %24:bool = lte %x_265, %x_266
-        %25:bool = and %23, %24
-        if %25 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    %20:i32 = load %mid
+    %x_256:i32 = let %20
+    %22:i32 = add %x_256, 1i
+    store %j, %22
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %23:i32 = load %i
+        %x_262:i32 = let %23
+        %25:i32 = load %mid
+        %x_263:i32 = let %25
+        %27:i32 = load %j
+        %x_265:i32 = let %27
+        %29:i32 = load %to
+        %x_266:i32 = let %29
+        %31:bool = lte %x_262, %x_263
+        %32:bool = lte %x_265, %x_266
+        %33:bool = and %31, %32
+        if %33 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_270:i32 = load %i
-        %27:ptr<private, i32, read_write> = access %data, %x_270
-        %x_272:i32 = load %27
-        %x_273:i32 = load %j
-        %30:ptr<private, i32, read_write> = access %data, %x_273
-        %x_275:i32 = load %30
-        %32:bool = lt %x_272, %x_275
-        if %32 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
-            %x_280:i32 = load %k
-            %34:i32 = add %x_280, 1i
-            store %k, %34
-            %x_282:i32 = load %i
-            %36:i32 = add %x_282, 1i
-            store %i, %36
-            %37:ptr<private, i32, read_write> = access %data, %x_282
-            %x_285:i32 = load %37
-            %39:ptr<private, i32, read_write> = access %temp, %x_280
-            store %39, %x_285
+        %34:i32 = load %i
+        %x_270:i32 = let %34
+        %36:ptr<private, i32, read_write> = access %data, %x_270
+        %37:i32 = load %36
+        %x_272:i32 = let %37
+        %39:i32 = load %j
+        %x_273:i32 = let %39
+        %41:ptr<private, i32, read_write> = access %data, %x_273
+        %42:i32 = load %41
+        %x_275:i32 = let %42
+        %44:bool = lt %x_272, %x_275
+        if %44 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
+            %45:i32 = load %k
+            %x_280:i32 = let %45
+            %47:i32 = add %x_280, 1i
+            store %k, %47
+            %48:i32 = load %i
+            %x_282:i32 = let %48
+            %50:i32 = add %x_282, 1i
+            store %i, %50
+            %51:ptr<private, i32, read_write> = access %data, %x_282
+            %52:i32 = load %51
+            %x_285:i32 = let %52
+            %54:ptr<private, i32, read_write> = access %temp, %x_280
+            store %54, %x_285
             exit_if  # if_2
           }
-          %b8 = block {  # false
-            %x_287:i32 = load %k
-            %41:i32 = add %x_287, 1i
-            store %k, %41
-            %x_289:i32 = load %j
-            %43:i32 = add %x_289, 1i
-            store %j, %43
-            %44:ptr<private, i32, read_write> = access %data, %x_289
-            %x_292:i32 = load %44
-            %46:ptr<private, i32, read_write> = access %temp, %x_287
-            store %46, %x_292
+          $B8: {  # false
+            %55:i32 = load %k
+            %x_287:i32 = let %55
+            %57:i32 = add %x_287, 1i
+            store %k, %57
+            %58:i32 = load %j
+            %x_289:i32 = let %58
+            %60:i32 = add %x_289, 1i
+            store %j, %60
+            %61:ptr<private, i32, read_write> = access %data, %x_289
+            %62:i32 = load %61
+            %x_292:i32 = let %62
+            %64:ptr<private, i32, read_write> = access %temp, %x_287
+            store %64, %x_292
             exit_if  # if_2
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
-    loop [b: %b9, c: %b10] {  # loop_2
-      %b9 = block {  # body
-        %x_298:i32 = load %i
-        %x_300:i32 = load %i
-        %x_301:i32 = load %mid
-        %50:bool = lt %x_298, 10i
-        %51:bool = lte %x_300, %x_301
-        %52:bool = and %50, %51
-        if %52 [t: %b11, f: %b12] {  # if_3
-          %b11 = block {  # true
+    loop [b: $B9, c: $B10] {  # loop_2
+      $B9: {  # body
+        %65:i32 = load %i
+        %x_298:i32 = let %65
+        %67:i32 = load %i
+        %x_300:i32 = let %67
+        %69:i32 = load %mid
+        %x_301:i32 = let %69
+        %71:bool = lt %x_298, 10i
+        %72:bool = lte %x_300, %x_301
+        %73:bool = and %71, %72
+        if %73 [t: $B11, f: $B12] {  # if_3
+          $B11: {  # true
             exit_if  # if_3
           }
-          %b12 = block {  # false
+          $B12: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_305:i32 = load %k
-        %54:i32 = add %x_305, 1i
-        store %k, %54
-        %x_307:i32 = load %i
-        %56:i32 = add %x_307, 1i
-        store %i, %56
-        %57:ptr<private, i32, read_write> = access %data, %x_307
-        %x_310:i32 = load %57
-        %59:ptr<private, i32, read_write> = access %temp, %x_305
-        store %59, %x_310
-        continue %b10
+        %74:i32 = load %k
+        %x_305:i32 = let %74
+        %76:i32 = add %x_305, 1i
+        store %k, %76
+        %77:i32 = load %i
+        %x_307:i32 = let %77
+        %79:i32 = add %x_307, 1i
+        store %i, %79
+        %80:ptr<private, i32, read_write> = access %data, %x_307
+        %81:i32 = load %80
+        %x_310:i32 = let %81
+        %83:ptr<private, i32, read_write> = access %temp, %x_305
+        store %83, %x_310
+        continue  # -> $B10
       }
-      %b10 = block {  # continuing
-        next_iteration %b9
+      $B10: {  # continuing
+        next_iteration  # -> $B9
       }
     }
-    %x_312:i32 = load %f
+    %84:i32 = load %f
+    %x_312:i32 = let %84
     store %i_1, %x_312
-    loop [b: %b13, c: %b14] {  # loop_3
-      %b13 = block {  # body
-        %x_317:i32 = load %i_1
-        %x_318:i32 = load %to
-        %63:bool = lte %x_317, %x_318
-        if %63 [t: %b15, f: %b16] {  # if_4
-          %b15 = block {  # true
+    loop [b: $B13, c: $B14] {  # loop_3
+      $B13: {  # body
+        %86:i32 = load %i_1
+        %x_317:i32 = let %86
+        %88:i32 = load %to
+        %x_318:i32 = let %88
+        %90:bool = lte %x_317, %x_318
+        if %90 [t: $B15, f: $B16] {  # if_4
+          $B15: {  # true
             exit_if  # if_4
           }
-          %b16 = block {  # false
+          $B16: {  # false
             exit_loop  # loop_3
           }
         }
-        %x_321:i32 = load %i_1
-        %x_322:i32 = load %i_1
-        %66:ptr<private, i32, read_write> = access %temp, %x_322
-        %x_324:i32 = load %66
-        %68:ptr<private, i32, read_write> = access %data, %x_321
-        store %68, %x_324
-        continue %b14
+        %91:i32 = load %i_1
+        %x_321:i32 = let %91
+        %93:i32 = load %i_1
+        %x_322:i32 = let %93
+        %95:ptr<private, i32, read_write> = access %temp, %x_322
+        %96:i32 = load %95
+        %x_324:i32 = let %96
+        %98:ptr<private, i32, read_write> = access %data, %x_321
+        store %98, %x_324
+        continue  # -> $B14
       }
-      %b14 = block {  # continuing
-        %x_326:i32 = load %i_1
-        %70:i32 = add %x_326, 1i
-        store %i_1, %70
-        next_iteration %b13
+      $B14: {  # continuing
+        %99:i32 = load %i_1
+        %x_326:i32 = let %99
+        %101:i32 = add %x_326, 1i
+        store %i_1, %101
+        next_iteration  # -> $B13
       }
     }
     ret
   }
 }
-%mergeSort_ = func():void -> %b17 {
-  %b17 = block {
+%mergeSort_ = func():void {
+  $B17: {
     %low:ptr<function, i32, read_write> = var
     %high:ptr<function, i32, read_write> = var
     %m:ptr<function, i32, read_write> = var
@@ -172,319 +203,372 @@
     store %low, 0i
     store %high, 9i
     store %m, 1i
-    loop [b: %b18, c: %b19] {  # loop_4
-      %b18 = block {  # body
-        %x_333:i32 = load %m
-        %x_334:i32 = load %high
-        %84:bool = lte %x_333, %x_334
-        if %84 [t: %b20, f: %b21] {  # if_5
-          %b20 = block {  # true
+    loop [b: $B18, c: $B19] {  # loop_4
+      $B18: {  # body
+        %113:i32 = load %m
+        %x_333:i32 = let %113
+        %115:i32 = load %high
+        %x_334:i32 = let %115
+        %117:bool = lte %x_333, %x_334
+        if %117 [t: $B20, f: $B21] {  # if_5
+          $B20: {  # true
             exit_if  # if_5
           }
-          %b21 = block {  # false
+          $B21: {  # false
             exit_loop  # loop_4
           }
         }
-        %x_337:i32 = load %low
+        %118:i32 = load %low
+        %x_337:i32 = let %118
         store %i_2, %x_337
-        loop [b: %b22, c: %b23] {  # loop_5
-          %b22 = block {  # body
-            %x_342:i32 = load %i_2
-            %x_343:i32 = load %high
-            %88:bool = lt %x_342, %x_343
-            if %88 [t: %b24, f: %b25] {  # if_6
-              %b24 = block {  # true
+        loop [b: $B22, c: $B23] {  # loop_5
+          $B22: {  # body
+            %120:i32 = load %i_2
+            %x_342:i32 = let %120
+            %122:i32 = load %high
+            %x_343:i32 = let %122
+            %124:bool = lt %x_342, %x_343
+            if %124 [t: $B24, f: $B25] {  # if_6
+              $B24: {  # true
                 exit_if  # if_6
               }
-              %b25 = block {  # false
+              $B25: {  # false
                 exit_loop  # loop_5
               }
             }
-            %x_346:i32 = load %i_2
+            %125:i32 = load %i_2
+            %x_346:i32 = let %125
             store %f_1, %x_346
-            %x_347:i32 = load %i_2
-            %x_348:i32 = load %m
-            %92:i32 = add %x_347, %x_348
-            %93:i32 = sub %92, 1i
-            store %mid_1, %93
-            %x_351:i32 = load %i_2
-            %x_352:i32 = load %m
-            %x_356:i32 = load %high
-            %97:i32 = mul 2i, %x_352
-            %98:i32 = add %x_351, %97
-            %99:i32 = sub %98, 1i
-            %100:i32 = min %99, %x_356
-            store %to_1, %100
-            %x_358:i32 = load %f_1
+            %127:i32 = load %i_2
+            %x_347:i32 = let %127
+            %129:i32 = load %m
+            %x_348:i32 = let %129
+            %131:i32 = add %x_347, %x_348
+            %132:i32 = sub %131, 1i
+            store %mid_1, %132
+            %133:i32 = load %i_2
+            %x_351:i32 = let %133
+            %135:i32 = load %m
+            %x_352:i32 = let %135
+            %137:i32 = load %high
+            %x_356:i32 = let %137
+            %139:i32 = mul 2i, %x_352
+            %140:i32 = add %x_351, %139
+            %141:i32 = sub %140, 1i
+            %142:i32 = min %141, %x_356
+            store %to_1, %142
+            %143:i32 = load %f_1
+            %x_358:i32 = let %143
             store %param, %x_358
-            %x_359:i32 = load %mid_1
+            %145:i32 = load %mid_1
+            %x_359:i32 = let %145
             store %param_1, %x_359
-            %x_360:i32 = load %to_1
+            %147:i32 = load %to_1
+            %x_360:i32 = let %147
             store %param_2, %x_360
-            %104:void = call %merge_i1_i1_i1_, %param, %param_1, %param_2
-            continue %b23
+            %149:void = call %merge_i1_i1_i1_, %param, %param_1, %param_2
+            continue  # -> $B23
           }
-          %b23 = block {  # continuing
-            %x_362:i32 = load %m
-            %x_364:i32 = load %i_2
-            %107:i32 = mul 2i, %x_362
-            %108:i32 = add %x_364, %107
-            store %i_2, %108
-            next_iteration %b22
+          $B23: {  # continuing
+            %150:i32 = load %m
+            %x_362:i32 = let %150
+            %152:i32 = load %i_2
+            %x_364:i32 = let %152
+            %154:i32 = mul 2i, %x_362
+            %155:i32 = add %x_364, %154
+            store %i_2, %155
+            next_iteration  # -> $B22
           }
         }
-        continue %b19
+        continue  # -> $B19
       }
-      %b19 = block {  # continuing
-        %x_366:i32 = load %m
-        %110:i32 = mul 2i, %x_366
-        store %m, %110
-        next_iteration %b18
+      $B19: {  # continuing
+        %156:i32 = load %m
+        %x_366:i32 = let %156
+        %158:i32 = mul 2i, %x_366
+        store %m, %158
+        next_iteration  # -> $B18
       }
     }
     ret
   }
 }
-%main_1 = func():void -> %b26 {
-  %b26 = block {
+%main_1 = func():void {
+  $B26: {
     %i_3:ptr<function, i32, read_write> = var
     %j_1:ptr<function, i32, read_write> = var
     %grey:ptr<function, f32, read_write> = var
-    %115:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
-    %x_87:f32 = load_vector_element %115, 0u
-    %117:i32 = convert %x_87
-    store %i_3, %117
-    loop [b: %b27, c: %b28] {  # loop_6
-      %b27 = block {  # body
-        %x_93:i32 = load %i_3
-        switch %x_93 [c: (9i, %b29), c: (8i, %b30), c: (7i, %b31), c: (6i, %b32), c: (5i, %b33), c: (4i, %b34), c: (3i, %b35), c: (2i, %b36), c: (1i, %b37), c: (0i, %b38), c: (default, %b39)] {  # switch_1
-          %b29 = block {  # case
-            %x_123:i32 = load %i_3
-            %120:ptr<private, i32, read_write> = access %data, %x_123
-            store %120, -5i
+    %163:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
+    %164:f32 = load_vector_element %163, 0u
+    %x_87:f32 = let %164
+    %166:i32 = call %tint_f32_to_i32, %x_87
+    store %i_3, %166
+    loop [b: $B27, c: $B28] {  # loop_6
+      $B27: {  # body
+        %168:i32 = load %i_3
+        %x_93:i32 = let %168
+        switch %x_93 [c: (9i, $B29), c: (8i, $B30), c: (7i, $B31), c: (6i, $B32), c: (5i, $B33), c: (4i, $B34), c: (3i, $B35), c: (2i, $B36), c: (1i, $B37), c: (0i, $B38), c: (default, $B39)] {  # switch_1
+          $B29: {  # case
+            %170:i32 = load %i_3
+            %x_123:i32 = let %170
+            %172:ptr<private, i32, read_write> = access %data, %x_123
+            store %172, -5i
             exit_switch  # switch_1
           }
-          %b30 = block {  # case
-            %x_121:i32 = load %i_3
-            %122:ptr<private, i32, read_write> = access %data, %x_121
-            store %122, -4i
+          $B30: {  # case
+            %173:i32 = load %i_3
+            %x_121:i32 = let %173
+            %175:ptr<private, i32, read_write> = access %data, %x_121
+            store %175, -4i
             exit_switch  # switch_1
           }
-          %b31 = block {  # case
-            %x_119:i32 = load %i_3
-            %124:ptr<private, i32, read_write> = access %data, %x_119
-            store %124, -3i
+          $B31: {  # case
+            %176:i32 = load %i_3
+            %x_119:i32 = let %176
+            %178:ptr<private, i32, read_write> = access %data, %x_119
+            store %178, -3i
             exit_switch  # switch_1
           }
-          %b32 = block {  # case
-            %x_117:i32 = load %i_3
-            %126:ptr<private, i32, read_write> = access %data, %x_117
-            store %126, -2i
+          $B32: {  # case
+            %179:i32 = load %i_3
+            %x_117:i32 = let %179
+            %181:ptr<private, i32, read_write> = access %data, %x_117
+            store %181, -2i
             exit_switch  # switch_1
           }
-          %b33 = block {  # case
-            %x_115:i32 = load %i_3
-            %128:ptr<private, i32, read_write> = access %data, %x_115
-            store %128, -1i
+          $B33: {  # case
+            %182:i32 = load %i_3
+            %x_115:i32 = let %182
+            %184:ptr<private, i32, read_write> = access %data, %x_115
+            store %184, -1i
             exit_switch  # switch_1
           }
-          %b34 = block {  # case
-            %x_113:i32 = load %i_3
-            %130:ptr<private, i32, read_write> = access %data, %x_113
-            store %130, 0i
+          $B34: {  # case
+            %185:i32 = load %i_3
+            %x_113:i32 = let %185
+            %187:ptr<private, i32, read_write> = access %data, %x_113
+            store %187, 0i
             exit_switch  # switch_1
           }
-          %b35 = block {  # case
-            %x_111:i32 = load %i_3
-            %132:ptr<private, i32, read_write> = access %data, %x_111
-            store %132, 1i
+          $B35: {  # case
+            %188:i32 = load %i_3
+            %x_111:i32 = let %188
+            %190:ptr<private, i32, read_write> = access %data, %x_111
+            store %190, 1i
             exit_switch  # switch_1
           }
-          %b36 = block {  # case
-            %x_109:i32 = load %i_3
-            %134:ptr<private, i32, read_write> = access %data, %x_109
-            store %134, 2i
+          $B36: {  # case
+            %191:i32 = load %i_3
+            %x_109:i32 = let %191
+            %193:ptr<private, i32, read_write> = access %data, %x_109
+            store %193, 2i
             exit_switch  # switch_1
           }
-          %b37 = block {  # case
-            %x_107:i32 = load %i_3
-            %136:ptr<private, i32, read_write> = access %data, %x_107
-            store %136, 3i
+          $B37: {  # case
+            %194:i32 = load %i_3
+            %x_107:i32 = let %194
+            %196:ptr<private, i32, read_write> = access %data, %x_107
+            store %196, 3i
             exit_switch  # switch_1
           }
-          %b38 = block {  # case
-            %x_105:i32 = load %i_3
-            %138:ptr<private, i32, read_write> = access %data, %x_105
-            store %138, 4i
+          $B38: {  # case
+            %197:i32 = load %i_3
+            %x_105:i32 = let %197
+            %199:ptr<private, i32, read_write> = access %data, %x_105
+            store %199, 4i
             exit_switch  # switch_1
           }
-          %b39 = block {  # case
+          $B39: {  # case
             exit_switch  # switch_1
           }
         }
-        %x_125:i32 = load %i_3
-        %140:i32 = add %x_125, 1i
-        store %i_3, %140
-        continue %b28
+        %200:i32 = load %i_3
+        %x_125:i32 = let %200
+        %202:i32 = add %x_125, 1i
+        store %i_3, %202
+        continue  # -> $B28
       }
-      %b28 = block {  # continuing
-        %x_127:i32 = load %i_3
-        %142:bool = lt %x_127, 10i
-        %143:bool = eq %142, false
-        break_if %143 %b27
+      $B28: {  # continuing
+        %203:i32 = load %i_3
+        %x_127:i32 = let %203
+        %205:bool = lt %x_127, 10i
+        %206:bool = eq %205, false
+        break_if %206  # -> [t: exit_loop loop_6, f: $B27]
       }
     }
     store %j_1, 0i
-    loop [b: %b40, c: %b41] {  # loop_7
-      %b40 = block {  # body
-        %x_133:i32 = load %j_1
-        %145:bool = lt %x_133, 10i
-        if %145 [t: %b42, f: %b43] {  # if_7
-          %b42 = block {  # true
+    loop [b: $B40, c: $B41] {  # loop_7
+      $B40: {  # body
+        %207:i32 = load %j_1
+        %x_133:i32 = let %207
+        %209:bool = lt %x_133, 10i
+        if %209 [t: $B42, f: $B43] {  # if_7
+          $B42: {  # true
             exit_if  # if_7
           }
-          %b43 = block {  # false
+          $B43: {  # false
             exit_loop  # loop_7
           }
         }
-        %x_136:i32 = load %j_1
-        %x_137:i32 = load %j_1
-        %148:ptr<private, i32, read_write> = access %data, %x_137
-        %x_139:i32 = load %148
-        %150:ptr<private, i32, read_write> = access %temp, %x_136
-        store %150, %x_139
-        continue %b41
+        %210:i32 = load %j_1
+        %x_136:i32 = let %210
+        %212:i32 = load %j_1
+        %x_137:i32 = let %212
+        %214:ptr<private, i32, read_write> = access %data, %x_137
+        %215:i32 = load %214
+        %x_139:i32 = let %215
+        %217:ptr<private, i32, read_write> = access %temp, %x_136
+        store %217, %x_139
+        continue  # -> $B41
       }
-      %b41 = block {  # continuing
-        %x_141:i32 = load %j_1
-        %152:i32 = add %x_141, 1i
-        store %j_1, %152
-        next_iteration %b40
+      $B41: {  # continuing
+        %218:i32 = load %j_1
+        %x_141:i32 = let %218
+        %220:i32 = add %x_141, 1i
+        store %j_1, %220
+        next_iteration  # -> $B40
       }
     }
-    %153:void = call %mergeSort_
-    %x_145:f32 = load_vector_element %gl_FragCoord, 1u
-    %155:i32 = convert %x_145
-    %156:bool = lt %155, 30i
-    if %156 [t: %b44, f: %b45] {  # if_8
-      %b44 = block {  # true
-        %157:ptr<private, i32, read_write> = access %data, 0i
-        %x_152:i32 = load %157
-        %159:f32 = convert %x_152
-        %160:f32 = div %159, 10.0f
-        %161:f32 = add 0.5f, %160
-        store %grey, %161
+    %221:void = call %mergeSort_
+    %222:f32 = load_vector_element %gl_FragCoord, 1u
+    %x_145:f32 = let %222
+    %224:i32 = call %tint_f32_to_i32, %x_145
+    %225:bool = lt %224, 30i
+    if %225 [t: $B44, f: $B45] {  # if_8
+      $B44: {  # true
+        %226:ptr<private, i32, read_write> = access %data, 0i
+        %227:i32 = load %226
+        %x_152:i32 = let %227
+        %229:f32 = convert %x_152
+        %230:f32 = div %229, 10.0f
+        %231:f32 = add 0.5f, %230
+        store %grey, %231
         exit_if  # if_8
       }
-      %b45 = block {  # false
-        %x_157:f32 = load_vector_element %gl_FragCoord, 1u
-        %163:i32 = convert %x_157
-        %164:bool = lt %163, 60i
-        if %164 [t: %b46, f: %b47] {  # if_9
-          %b46 = block {  # true
-            %165:ptr<private, i32, read_write> = access %data, 1i
-            %x_164:i32 = load %165
-            %167:f32 = convert %x_164
-            %168:f32 = div %167, 10.0f
-            %169:f32 = add 0.5f, %168
-            store %grey, %169
+      $B45: {  # false
+        %232:f32 = load_vector_element %gl_FragCoord, 1u
+        %x_157:f32 = let %232
+        %234:i32 = call %tint_f32_to_i32, %x_157
+        %235:bool = lt %234, 60i
+        if %235 [t: $B46, f: $B47] {  # if_9
+          $B46: {  # true
+            %236:ptr<private, i32, read_write> = access %data, 1i
+            %237:i32 = load %236
+            %x_164:i32 = let %237
+            %239:f32 = convert %x_164
+            %240:f32 = div %239, 10.0f
+            %241:f32 = add 0.5f, %240
+            store %grey, %241
             exit_if  # if_9
           }
-          %b47 = block {  # false
-            %x_169:f32 = load_vector_element %gl_FragCoord, 1u
-            %171:i32 = convert %x_169
-            %172:bool = lt %171, 90i
-            if %172 [t: %b48, f: %b49] {  # if_10
-              %b48 = block {  # true
-                %173:ptr<private, i32, read_write> = access %data, 2i
-                %x_176:i32 = load %173
-                %175:f32 = convert %x_176
-                %176:f32 = div %175, 10.0f
-                %177:f32 = add 0.5f, %176
-                store %grey, %177
+          $B47: {  # false
+            %242:f32 = load_vector_element %gl_FragCoord, 1u
+            %x_169:f32 = let %242
+            %244:i32 = call %tint_f32_to_i32, %x_169
+            %245:bool = lt %244, 90i
+            if %245 [t: $B48, f: $B49] {  # if_10
+              $B48: {  # true
+                %246:ptr<private, i32, read_write> = access %data, 2i
+                %247:i32 = load %246
+                %x_176:i32 = let %247
+                %249:f32 = convert %x_176
+                %250:f32 = div %249, 10.0f
+                %251:f32 = add 0.5f, %250
+                store %grey, %251
                 exit_if  # if_10
               }
-              %b49 = block {  # false
-                %x_181:f32 = load_vector_element %gl_FragCoord, 1u
-                %179:i32 = convert %x_181
-                %180:bool = lt %179, 120i
-                if %180 [t: %b50, f: %b51] {  # if_11
-                  %b50 = block {  # true
-                    %181:ptr<private, i32, read_write> = access %data, 3i
-                    %x_188:i32 = load %181
-                    %183:f32 = convert %x_188
-                    %184:f32 = div %183, 10.0f
-                    %185:f32 = add 0.5f, %184
-                    store %grey, %185
+              $B49: {  # false
+                %252:f32 = load_vector_element %gl_FragCoord, 1u
+                %x_181:f32 = let %252
+                %254:i32 = call %tint_f32_to_i32, %x_181
+                %255:bool = lt %254, 120i
+                if %255 [t: $B50, f: $B51] {  # if_11
+                  $B50: {  # true
+                    %256:ptr<private, i32, read_write> = access %data, 3i
+                    %257:i32 = load %256
+                    %x_188:i32 = let %257
+                    %259:f32 = convert %x_188
+                    %260:f32 = div %259, 10.0f
+                    %261:f32 = add 0.5f, %260
+                    store %grey, %261
                     exit_if  # if_11
                   }
-                  %b51 = block {  # false
-                    %x_193:f32 = load_vector_element %gl_FragCoord, 1u
-                    %187:i32 = convert %x_193
-                    %188:bool = lt %187, 150i
-                    if %188 [t: %b52, f: %b53] {  # if_12
-                      %b52 = block {  # true
-                        discard
+                  $B51: {  # false
+                    %262:f32 = load_vector_element %gl_FragCoord, 1u
+                    %x_193:f32 = let %262
+                    %264:i32 = call %tint_f32_to_i32, %x_193
+                    %265:bool = lt %264, 150i
+                    if %265 [t: $B52, f: $B53] {  # if_12
+                      $B52: {  # true
+                        store %continue_execution, false
                         exit_if  # if_12
                       }
-                      %b53 = block {  # false
-                        %x_200:f32 = load_vector_element %gl_FragCoord, 1u
-                        %190:i32 = convert %x_200
-                        %191:bool = lt %190, 180i
-                        if %191 [t: %b54, f: %b55] {  # if_13
-                          %b54 = block {  # true
-                            %192:ptr<private, i32, read_write> = access %data, 5i
-                            %x_207:i32 = load %192
-                            %194:f32 = convert %x_207
-                            %195:f32 = div %194, 10.0f
-                            %196:f32 = add 0.5f, %195
-                            store %grey, %196
+                      $B53: {  # false
+                        %266:f32 = load_vector_element %gl_FragCoord, 1u
+                        %x_200:f32 = let %266
+                        %268:i32 = call %tint_f32_to_i32, %x_200
+                        %269:bool = lt %268, 180i
+                        if %269 [t: $B54, f: $B55] {  # if_13
+                          $B54: {  # true
+                            %270:ptr<private, i32, read_write> = access %data, 5i
+                            %271:i32 = load %270
+                            %x_207:i32 = let %271
+                            %273:f32 = convert %x_207
+                            %274:f32 = div %273, 10.0f
+                            %275:f32 = add 0.5f, %274
+                            store %grey, %275
                             exit_if  # if_13
                           }
-                          %b55 = block {  # false
-                            %x_212:f32 = load_vector_element %gl_FragCoord, 1u
-                            %198:i32 = convert %x_212
-                            %199:bool = lt %198, 210i
-                            if %199 [t: %b56, f: %b57] {  # if_14
-                              %b56 = block {  # true
-                                %200:ptr<private, i32, read_write> = access %data, 6i
-                                %x_219:i32 = load %200
-                                %202:f32 = convert %x_219
-                                %203:f32 = div %202, 10.0f
-                                %204:f32 = add 0.5f, %203
-                                store %grey, %204
+                          $B55: {  # false
+                            %276:f32 = load_vector_element %gl_FragCoord, 1u
+                            %x_212:f32 = let %276
+                            %278:i32 = call %tint_f32_to_i32, %x_212
+                            %279:bool = lt %278, 210i
+                            if %279 [t: $B56, f: $B57] {  # if_14
+                              $B56: {  # true
+                                %280:ptr<private, i32, read_write> = access %data, 6i
+                                %281:i32 = load %280
+                                %x_219:i32 = let %281
+                                %283:f32 = convert %x_219
+                                %284:f32 = div %283, 10.0f
+                                %285:f32 = add 0.5f, %284
+                                store %grey, %285
                                 exit_if  # if_14
                               }
-                              %b57 = block {  # false
-                                %x_224:f32 = load_vector_element %gl_FragCoord, 1u
-                                %206:i32 = convert %x_224
-                                %207:bool = lt %206, 240i
-                                if %207 [t: %b58, f: %b59] {  # if_15
-                                  %b58 = block {  # true
-                                    %208:ptr<private, i32, read_write> = access %data, 7i
-                                    %x_231:i32 = load %208
-                                    %210:f32 = convert %x_231
-                                    %211:f32 = div %210, 10.0f
-                                    %212:f32 = add 0.5f, %211
-                                    store %grey, %212
+                              $B57: {  # false
+                                %286:f32 = load_vector_element %gl_FragCoord, 1u
+                                %x_224:f32 = let %286
+                                %288:i32 = call %tint_f32_to_i32, %x_224
+                                %289:bool = lt %288, 240i
+                                if %289 [t: $B58, f: $B59] {  # if_15
+                                  $B58: {  # true
+                                    %290:ptr<private, i32, read_write> = access %data, 7i
+                                    %291:i32 = load %290
+                                    %x_231:i32 = let %291
+                                    %293:f32 = convert %x_231
+                                    %294:f32 = div %293, 10.0f
+                                    %295:f32 = add 0.5f, %294
+                                    store %grey, %295
                                     exit_if  # if_15
                                   }
-                                  %b59 = block {  # false
-                                    %x_236:f32 = load_vector_element %gl_FragCoord, 1u
-                                    %214:i32 = convert %x_236
-                                    %215:bool = lt %214, 270i
-                                    if %215 [t: %b60, f: %b61] {  # if_16
-                                      %b60 = block {  # true
-                                        %216:ptr<private, i32, read_write> = access %data, 8i
-                                        %x_243:i32 = load %216
-                                        %218:f32 = convert %x_243
-                                        %219:f32 = div %218, 10.0f
-                                        %220:f32 = add 0.5f, %219
-                                        store %grey, %220
+                                  $B59: {  # false
+                                    %296:f32 = load_vector_element %gl_FragCoord, 1u
+                                    %x_236:f32 = let %296
+                                    %298:i32 = call %tint_f32_to_i32, %x_236
+                                    %299:bool = lt %298, 270i
+                                    if %299 [t: $B60, f: $B61] {  # if_16
+                                      $B60: {  # true
+                                        %300:ptr<private, i32, read_write> = access %data, 8i
+                                        %301:i32 = load %300
+                                        %x_243:i32 = let %301
+                                        %303:f32 = convert %x_243
+                                        %304:f32 = div %303, 10.0f
+                                        %305:f32 = add 0.5f, %304
+                                        store %grey, %305
                                         exit_if  # if_16
                                       }
-                                      %b61 = block {  # false
-                                        discard
+                                      $B61: {  # false
+                                        store %continue_execution, false
                                         exit_if  # if_16
                                       }
                                     }
@@ -512,23 +596,42 @@
         exit_if  # if_8
       }
     }
-    %x_247:f32 = load %grey
-    %x_248:vec3<f32> = construct %x_247, %x_247, %x_247
-    %223:f32 = access %x_248, 0u
-    %224:f32 = access %x_248, 1u
-    %225:f32 = access %x_248, 2u
-    %226:vec4<f32> = construct %223, %224, %225, 1.0f
-    store %x_GLF_color, %226
+    %306:f32 = load %grey
+    %x_247:f32 = let %306
+    %308:vec3<f32> = construct %x_247, %x_247, %x_247
+    %x_248:vec3<f32> = let %308
+    %310:f32 = access %x_248, 0u
+    %311:f32 = access %x_248, 1u
+    %312:f32 = access %x_248, 2u
+    %313:vec4<f32> = construct %310, %311, %312, 1.0f
+    store %x_GLF_color, %313
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b62 {
-  %b62 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B62: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %229:void = call %main_1
-    %230:vec4<f32> = load %x_GLF_color
-    %231:main_out = construct %230
-    ret %231
+    %316:void = call %main_1
+    %317:vec4<f32> = load %x_GLF_color
+    %318:main_out = construct %317
+    %319:bool = load %continue_execution
+    %320:bool = eq %319, false
+    if %320 [t: $B63] {  # if_17
+      $B63: {  # true
+        terminate_invocation
+      }
+    }
+    ret %318
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B64: {
+    %322:i32 = convert %value
+    %323:bool = gte %value, -2147483648.0f
+    %324:i32 = select -2147483648i, %322, %323
+    %325:bool = lte %value, 2147483520.0f
+    %326:i32 = select 2147483647i, %324, %325
+    ret %326
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/1.spvasm.expected.ir.msl
index 57d67b4..6afcf56 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/1.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -12,159 +12,167 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %data:ptr<private, array<i32, 10>, read_write> = var
   %temp:ptr<private, array<i32, 10>, read_write> = var
   %x_28:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_32:ptr<uniform, buf1, read> = var @binding_point(0, 1)
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%merge_i1_i1_i1_ = func(%f:ptr<function, i32, read_write>, %mid:ptr<function, i32, read_write>, %to:ptr<function, i32, read_write>):void -> %b2 {
-  %b2 = block {
+%merge_i1_i1_i1_ = func(%f:ptr<function, i32, read_write>, %mid:ptr<function, i32, read_write>, %to:ptr<function, i32, read_write>):void {
+  $B2: {
     %k:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %j:ptr<function, i32, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
-    %15:i32 = load %f
-    store %k, %15
     %16:i32 = load %f
-    store %i, %16
-    %17:i32 = load %mid
-    %18:i32 = add %17, 1i
-    store %j, %18
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %19:i32 = load %i
-        %20:i32 = load %mid
-        %21:bool = lte %19, %20
-        %22:i32 = load %j
-        %23:i32 = load %to
-        %24:bool = lte %22, %23
-        %25:bool = and %21, %24
-        if %25 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    store %k, %16
+    %17:i32 = load %f
+    store %i, %17
+    %18:i32 = load %mid
+    %19:i32 = add %18, 1i
+    store %j, %19
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %20:i32 = load %i
+        %21:i32 = load %mid
+        %22:bool = lte %20, %21
+        %23:i32 = load %j
+        %24:i32 = load %to
+        %25:bool = lte %23, %24
+        %26:bool = and %22, %25
+        if %26 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %26:i32 = load %i
-        %27:ptr<private, i32, read_write> = access %data, %26
-        %28:i32 = load %27
-        %29:i32 = load %j
-        %30:ptr<private, i32, read_write> = access %data, %29
-        %31:i32 = load %30
-        %32:bool = lt %28, %31
-        if %32 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
-            %x_281:i32 = load %k
+        %27:i32 = load %i
+        %28:ptr<private, i32, read_write> = access %data, %27
+        %29:i32 = load %28
+        %30:i32 = load %j
+        %31:ptr<private, i32, read_write> = access %data, %30
+        %32:i32 = load %31
+        %33:bool = lt %29, %32
+        if %33 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
             %34:i32 = load %k
-            %35:i32 = add %34, 1i
-            store %k, %35
-            %x_283:i32 = load %i
-            %37:i32 = load %i
-            %38:i32 = add %37, 1i
-            store %i, %38
-            %39:ptr<private, i32, read_write> = access %temp, %x_281
-            %40:ptr<private, i32, read_write> = access %data, %x_283
-            %41:i32 = load %40
-            store %39, %41
+            %x_281:i32 = let %34
+            %36:i32 = load %k
+            %37:i32 = add %36, 1i
+            store %k, %37
+            %38:i32 = load %i
+            %x_283:i32 = let %38
+            %40:i32 = load %i
+            %41:i32 = add %40, 1i
+            store %i, %41
+            %42:ptr<private, i32, read_write> = access %temp, %x_281
+            %43:ptr<private, i32, read_write> = access %data, %x_283
+            %44:i32 = load %43
+            store %42, %44
             exit_if  # if_2
           }
-          %b8 = block {  # false
-            %x_288:i32 = load %k
-            %43:i32 = load %k
-            %44:i32 = add %43, 1i
-            store %k, %44
-            %x_290:i32 = load %j
-            %46:i32 = load %j
-            %47:i32 = add %46, 1i
-            store %j, %47
-            %48:ptr<private, i32, read_write> = access %temp, %x_288
-            %49:ptr<private, i32, read_write> = access %data, %x_290
-            %50:i32 = load %49
-            store %48, %50
+          $B8: {  # false
+            %45:i32 = load %k
+            %x_288:i32 = let %45
+            %47:i32 = load %k
+            %48:i32 = add %47, 1i
+            store %k, %48
+            %49:i32 = load %j
+            %x_290:i32 = let %49
+            %51:i32 = load %j
+            %52:i32 = add %51, 1i
+            store %j, %52
+            %53:ptr<private, i32, read_write> = access %temp, %x_288
+            %54:ptr<private, i32, read_write> = access %data, %x_290
+            %55:i32 = load %54
+            store %53, %55
             exit_if  # if_2
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
-    loop [b: %b9, c: %b10] {  # loop_2
-      %b9 = block {  # body
-        %51:i32 = load %i
-        %52:bool = lt %51, 10i
-        %53:i32 = load %i
-        %54:i32 = load %mid
-        %55:bool = lte %53, %54
-        %56:bool = and %52, %55
-        if %56 [t: %b11, f: %b12] {  # if_3
-          %b11 = block {  # true
+    loop [b: $B9, c: $B10] {  # loop_2
+      $B9: {  # body
+        %56:i32 = load %i
+        %57:bool = lt %56, 10i
+        %58:i32 = load %i
+        %59:i32 = load %mid
+        %60:bool = lte %58, %59
+        %61:bool = and %57, %60
+        if %61 [t: $B11, f: $B12] {  # if_3
+          $B11: {  # true
             exit_if  # if_3
           }
-          %b12 = block {  # false
+          $B12: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_306:i32 = load %k
-        %58:i32 = load %k
-        %59:i32 = add %58, 1i
-        store %k, %59
-        %x_308:i32 = load %i
-        %61:i32 = load %i
-        %62:i32 = add %61, 1i
-        store %i, %62
-        %63:ptr<private, i32, read_write> = access %temp, %x_306
-        %64:ptr<private, i32, read_write> = access %data, %x_308
-        %65:i32 = load %64
-        store %63, %65
-        continue %b10
+        %62:i32 = load %k
+        %x_306:i32 = let %62
+        %64:i32 = load %k
+        %65:i32 = add %64, 1i
+        store %k, %65
+        %66:i32 = load %i
+        %x_308:i32 = let %66
+        %68:i32 = load %i
+        %69:i32 = add %68, 1i
+        store %i, %69
+        %70:ptr<private, i32, read_write> = access %temp, %x_306
+        %71:ptr<private, i32, read_write> = access %data, %x_308
+        %72:i32 = load %71
+        store %70, %72
+        continue  # -> $B10
       }
-      %b10 = block {  # continuing
-        next_iteration %b9
+      $B10: {  # continuing
+        next_iteration  # -> $B9
       }
     }
-    %66:i32 = load %f
-    store %i_1, %66
-    loop [b: %b13, c: %b14] {  # loop_3
-      %b13 = block {  # body
-        %67:i32 = load %i_1
-        %68:i32 = load %to
-        %69:bool = lte %67, %68
-        if %69 [t: %b15, f: %b16] {  # if_4
-          %b15 = block {  # true
+    %73:i32 = load %f
+    store %i_1, %73
+    loop [b: $B13, c: $B14] {  # loop_3
+      $B13: {  # body
+        %74:i32 = load %i_1
+        %75:i32 = load %to
+        %76:bool = lte %74, %75
+        if %76 [t: $B15, f: $B16] {  # if_4
+          $B15: {  # true
             exit_if  # if_4
           }
-          %b16 = block {  # false
+          $B16: {  # false
             exit_loop  # loop_3
           }
         }
-        %x_322:i32 = load %i_1
-        %71:ptr<private, i32, read_write> = access %data, %x_322
-        %72:i32 = load %i_1
-        %73:ptr<private, i32, read_write> = access %temp, %72
-        %74:i32 = load %73
-        store %71, %74
-        continue %b14
+        %77:i32 = load %i_1
+        %x_322:i32 = let %77
+        %79:ptr<private, i32, read_write> = access %data, %x_322
+        %80:i32 = load %i_1
+        %81:ptr<private, i32, read_write> = access %temp, %80
+        %82:i32 = load %81
+        store %79, %82
+        continue  # -> $B14
       }
-      %b14 = block {  # continuing
-        %75:i32 = load %i_1
-        %76:i32 = add %75, 1i
-        store %i_1, %76
-        next_iteration %b13
+      $B14: {  # continuing
+        %83:i32 = load %i_1
+        %84:i32 = add %83, 1i
+        store %i_1, %84
+        next_iteration  # -> $B13
       }
     }
     ret
   }
 }
-%mergeSort_ = func():void -> %b17 {
-  %b17 = block {
+%mergeSort_ = func():void {
+  $B17: {
     %low:ptr<function, i32, read_write> = var
     %high:ptr<function, i32, read_write> = var
     %m:ptr<function, i32, read_write> = var
@@ -178,327 +186,340 @@
     store %low, 0i
     store %high, 9i
     store %m, 1i
-    loop [b: %b18, c: %b19] {  # loop_4
-      %b18 = block {  # body
-        %88:i32 = load %m
-        %89:i32 = load %high
-        %90:bool = lte %88, %89
-        if %90 [t: %b20, f: %b21] {  # if_5
-          %b20 = block {  # true
+    loop [b: $B18, c: $B19] {  # loop_4
+      $B18: {  # body
+        %96:i32 = load %m
+        %97:i32 = load %high
+        %98:bool = lte %96, %97
+        if %98 [t: $B20, f: $B21] {  # if_5
+          $B20: {  # true
             exit_if  # if_5
           }
-          %b21 = block {  # false
+          $B21: {  # false
             exit_loop  # loop_4
           }
         }
-        %91:i32 = load %low
-        store %i_2, %91
-        loop [b: %b22, c: %b23] {  # loop_5
-          %b22 = block {  # body
-            %92:i32 = load %i_2
-            %93:i32 = load %high
-            %94:bool = lt %92, %93
-            if %94 [t: %b24, f: %b25] {  # if_6
-              %b24 = block {  # true
+        %99:i32 = load %low
+        store %i_2, %99
+        loop [b: $B22, c: $B23] {  # loop_5
+          $B22: {  # body
+            %100:i32 = load %i_2
+            %101:i32 = load %high
+            %102:bool = lt %100, %101
+            if %102 [t: $B24, f: $B25] {  # if_6
+              $B24: {  # true
                 exit_if  # if_6
               }
-              %b25 = block {  # false
+              $B25: {  # false
                 exit_loop  # loop_5
               }
             }
-            %95:i32 = load %i_2
-            store %f_1, %95
-            %96:i32 = load %i_2
-            %97:i32 = load %m
-            %98:i32 = add %96, %97
-            %99:i32 = sub %98, 1i
-            store %mid_1, %99
-            %100:i32 = load %i_2
-            %101:i32 = load %m
-            %102:i32 = mul 2i, %101
-            %103:i32 = add %100, %102
-            %104:i32 = sub %103, 1i
-            %105:i32 = load %high
-            %106:i32 = min %104, %105
-            store %to_1, %106
-            %107:i32 = load %f_1
-            store %param, %107
-            %108:i32 = load %mid_1
-            store %param_1, %108
-            %109:i32 = load %to_1
-            store %param_2, %109
-            %110:void = call %merge_i1_i1_i1_, %param, %param_1, %param_2
-            continue %b23
+            %103:i32 = load %i_2
+            store %f_1, %103
+            %104:i32 = load %i_2
+            %105:i32 = load %m
+            %106:i32 = add %104, %105
+            %107:i32 = sub %106, 1i
+            store %mid_1, %107
+            %108:i32 = load %i_2
+            %109:i32 = load %m
+            %110:i32 = mul 2i, %109
+            %111:i32 = add %108, %110
+            %112:i32 = sub %111, 1i
+            %113:i32 = load %high
+            %114:i32 = min %112, %113
+            store %to_1, %114
+            %115:i32 = load %f_1
+            store %param, %115
+            %116:i32 = load %mid_1
+            store %param_1, %116
+            %117:i32 = load %to_1
+            store %param_2, %117
+            %118:void = call %merge_i1_i1_i1_, %param, %param_1, %param_2
+            continue  # -> $B23
           }
-          %b23 = block {  # continuing
-            %111:i32 = load %i_2
-            %112:i32 = load %m
-            %113:i32 = mul 2i, %112
-            %114:i32 = add %111, %113
-            store %i_2, %114
-            next_iteration %b22
+          $B23: {  # continuing
+            %119:i32 = load %i_2
+            %120:i32 = load %m
+            %121:i32 = mul 2i, %120
+            %122:i32 = add %119, %121
+            store %i_2, %122
+            next_iteration  # -> $B22
           }
         }
-        continue %b19
+        continue  # -> $B19
       }
-      %b19 = block {  # continuing
-        %115:i32 = load %m
-        %116:i32 = mul 2i, %115
-        store %m, %116
-        next_iteration %b18
+      $B19: {  # continuing
+        %123:i32 = load %m
+        %124:i32 = mul 2i, %123
+        store %m, %124
+        next_iteration  # -> $B18
       }
     }
     ret
   }
 }
-%main_1 = func():void -> %b26 {
-  %b26 = block {
+%main_1 = func():void {
+  $B26: {
     %i_3:ptr<function, i32, read_write> = var
     %j_1:ptr<function, i32, read_write> = var
     %grey:ptr<function, f32, read_write> = var
-    %121:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
-    %122:f32 = load_vector_element %121, 0u
-    %123:i32 = convert %122
-    store %i_3, %123
-    loop [b: %b27, c: %b28] {  # loop_6
-      %b27 = block {  # body
-        %x_94:i32 = load %i_3
-        switch %x_94 [c: (9i, %b29), c: (8i, %b30), c: (7i, %b31), c: (6i, %b32), c: (5i, %b33), c: (4i, %b34), c: (3i, %b35), c: (2i, %b36), c: (1i, %b37), c: (0i, %b38), c: (default, %b39)] {  # switch_1
-          %b29 = block {  # case
-            %x_124:i32 = load %i_3
-            %126:ptr<private, i32, read_write> = access %data, %x_124
-            store %126, -5i
-            if true [t: %b40, f: %b41] {  # if_7
-              %b40 = block {  # true
+    %129:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
+    %130:f32 = load_vector_element %129, 0u
+    %131:i32 = call %tint_f32_to_i32, %130
+    store %i_3, %131
+    loop [b: $B27, c: $B28] {  # loop_6
+      $B27: {  # body
+        %133:i32 = load %i_3
+        %x_94:i32 = let %133
+        switch %x_94 [c: (9i, $B29), c: (8i, $B30), c: (7i, $B31), c: (6i, $B32), c: (5i, $B33), c: (4i, $B34), c: (3i, $B35), c: (2i, $B36), c: (1i, $B37), c: (0i, $B38), c: (default, $B39)] {  # switch_1
+          $B29: {  # case
+            %135:i32 = load %i_3
+            %x_124:i32 = let %135
+            %137:ptr<private, i32, read_write> = access %data, %x_124
+            store %137, -5i
+            if true [t: $B40, f: $B41] {  # if_7
+              $B40: {  # true
                 exit_if  # if_7
               }
-              %b41 = block {  # false
-                continue %b28
+              $B41: {  # false
+                continue  # -> $B28
               }
             }
             exit_switch  # switch_1
           }
-          %b30 = block {  # case
-            %x_122:i32 = load %i_3
-            %128:ptr<private, i32, read_write> = access %data, %x_122
-            store %128, -4i
+          $B30: {  # case
+            %138:i32 = load %i_3
+            %x_122:i32 = let %138
+            %140:ptr<private, i32, read_write> = access %data, %x_122
+            store %140, -4i
             exit_switch  # switch_1
           }
-          %b31 = block {  # case
-            %x_120:i32 = load %i_3
-            %130:ptr<private, i32, read_write> = access %data, %x_120
-            store %130, -3i
+          $B31: {  # case
+            %141:i32 = load %i_3
+            %x_120:i32 = let %141
+            %143:ptr<private, i32, read_write> = access %data, %x_120
+            store %143, -3i
             exit_switch  # switch_1
           }
-          %b32 = block {  # case
-            %x_118:i32 = load %i_3
-            %132:ptr<private, i32, read_write> = access %data, %x_118
-            store %132, -2i
+          $B32: {  # case
+            %144:i32 = load %i_3
+            %x_118:i32 = let %144
+            %146:ptr<private, i32, read_write> = access %data, %x_118
+            store %146, -2i
             exit_switch  # switch_1
           }
-          %b33 = block {  # case
-            %x_116:i32 = load %i_3
-            %134:ptr<private, i32, read_write> = access %data, %x_116
-            store %134, -1i
+          $B33: {  # case
+            %147:i32 = load %i_3
+            %x_116:i32 = let %147
+            %149:ptr<private, i32, read_write> = access %data, %x_116
+            store %149, -1i
             exit_switch  # switch_1
           }
-          %b34 = block {  # case
-            %x_114:i32 = load %i_3
-            %136:ptr<private, i32, read_write> = access %data, %x_114
-            store %136, 0i
+          $B34: {  # case
+            %150:i32 = load %i_3
+            %x_114:i32 = let %150
+            %152:ptr<private, i32, read_write> = access %data, %x_114
+            store %152, 0i
             exit_switch  # switch_1
           }
-          %b35 = block {  # case
-            %x_112:i32 = load %i_3
-            %138:ptr<private, i32, read_write> = access %data, %x_112
-            store %138, 1i
+          $B35: {  # case
+            %153:i32 = load %i_3
+            %x_112:i32 = let %153
+            %155:ptr<private, i32, read_write> = access %data, %x_112
+            store %155, 1i
             exit_switch  # switch_1
           }
-          %b36 = block {  # case
-            %x_110:i32 = load %i_3
-            %140:ptr<private, i32, read_write> = access %data, %x_110
-            store %140, 2i
+          $B36: {  # case
+            %156:i32 = load %i_3
+            %x_110:i32 = let %156
+            %158:ptr<private, i32, read_write> = access %data, %x_110
+            store %158, 2i
             exit_switch  # switch_1
           }
-          %b37 = block {  # case
-            %x_108:i32 = load %i_3
-            %142:ptr<private, i32, read_write> = access %data, %x_108
-            store %142, 3i
+          $B37: {  # case
+            %159:i32 = load %i_3
+            %x_108:i32 = let %159
+            %161:ptr<private, i32, read_write> = access %data, %x_108
+            store %161, 3i
             exit_switch  # switch_1
           }
-          %b38 = block {  # case
-            %x_106:i32 = load %i_3
-            %144:ptr<private, i32, read_write> = access %data, %x_106
-            store %144, 4i
+          $B38: {  # case
+            %162:i32 = load %i_3
+            %x_106:i32 = let %162
+            %164:ptr<private, i32, read_write> = access %data, %x_106
+            store %164, 4i
             exit_switch  # switch_1
           }
-          %b39 = block {  # case
+          $B39: {  # case
             exit_switch  # switch_1
           }
         }
-        %145:i32 = load %i_3
-        %146:i32 = add %145, 1i
-        store %i_3, %146
-        continue %b28
+        %165:i32 = load %i_3
+        %166:i32 = add %165, 1i
+        store %i_3, %166
+        continue  # -> $B28
       }
-      %b28 = block {  # continuing
-        %x_128:i32 = load %i_3
-        %148:bool = lt %x_128, 10i
-        %149:bool = eq %148, false
-        break_if %149 %b27
+      $B28: {  # continuing
+        %167:i32 = load %i_3
+        %x_128:i32 = let %167
+        %169:bool = lt %x_128, 10i
+        %170:bool = eq %169, false
+        break_if %170  # -> [t: exit_loop loop_6, f: $B27]
       }
     }
     store %j_1, 0i
-    loop [b: %b42, c: %b43] {  # loop_7
-      %b42 = block {  # body
-        %150:i32 = load %j_1
-        %151:bool = lt %150, 10i
-        if %151 [t: %b44, f: %b45] {  # if_8
-          %b44 = block {  # true
+    loop [b: $B42, c: $B43] {  # loop_7
+      $B42: {  # body
+        %171:i32 = load %j_1
+        %172:bool = lt %171, 10i
+        if %172 [t: $B44, f: $B45] {  # if_8
+          $B44: {  # true
             exit_if  # if_8
           }
-          %b45 = block {  # false
+          $B45: {  # false
             exit_loop  # loop_7
           }
         }
-        %x_137:i32 = load %j_1
-        %153:ptr<private, i32, read_write> = access %temp, %x_137
-        %154:i32 = load %j_1
-        %155:ptr<private, i32, read_write> = access %data, %154
-        %156:i32 = load %155
-        store %153, %156
-        continue %b43
+        %173:i32 = load %j_1
+        %x_137:i32 = let %173
+        %175:ptr<private, i32, read_write> = access %temp, %x_137
+        %176:i32 = load %j_1
+        %177:ptr<private, i32, read_write> = access %data, %176
+        %178:i32 = load %177
+        store %175, %178
+        continue  # -> $B43
       }
-      %b43 = block {  # continuing
-        %157:i32 = load %j_1
-        %158:i32 = add %157, 1i
-        store %j_1, %158
-        next_iteration %b42
+      $B43: {  # continuing
+        %179:i32 = load %j_1
+        %180:i32 = add %179, 1i
+        store %j_1, %180
+        next_iteration  # -> $B42
       }
     }
-    %159:void = call %mergeSort_
-    %160:f32 = load_vector_element %gl_FragCoord, 1u
-    %161:i32 = convert %160
-    %162:bool = lt %161, 30i
-    if %162 [t: %b46, f: %b47] {  # if_9
-      %b46 = block {  # true
-        %163:ptr<private, i32, read_write> = access %data, 0i
-        %164:i32 = load %163
-        %165:f32 = convert %164
-        %166:f32 = div %165, 10.0f
-        %167:f32 = add 0.5f, %166
-        store %grey, %167
+    %181:void = call %mergeSort_
+    %182:f32 = load_vector_element %gl_FragCoord, 1u
+    %183:i32 = call %tint_f32_to_i32, %182
+    %184:bool = lt %183, 30i
+    if %184 [t: $B46, f: $B47] {  # if_9
+      $B46: {  # true
+        %185:ptr<private, i32, read_write> = access %data, 0i
+        %186:i32 = load %185
+        %187:f32 = convert %186
+        %188:f32 = div %187, 10.0f
+        %189:f32 = add 0.5f, %188
+        store %grey, %189
         exit_if  # if_9
       }
-      %b47 = block {  # false
-        %168:f32 = load_vector_element %gl_FragCoord, 1u
-        %169:i32 = convert %168
-        %170:bool = lt %169, 60i
-        if %170 [t: %b48, f: %b49] {  # if_10
-          %b48 = block {  # true
-            %171:ptr<private, i32, read_write> = access %data, 1i
-            %172:i32 = load %171
-            %173:f32 = convert %172
-            %174:f32 = div %173, 10.0f
-            %175:f32 = add 0.5f, %174
-            store %grey, %175
+      $B47: {  # false
+        %190:f32 = load_vector_element %gl_FragCoord, 1u
+        %191:i32 = call %tint_f32_to_i32, %190
+        %192:bool = lt %191, 60i
+        if %192 [t: $B48, f: $B49] {  # if_10
+          $B48: {  # true
+            %193:ptr<private, i32, read_write> = access %data, 1i
+            %194:i32 = load %193
+            %195:f32 = convert %194
+            %196:f32 = div %195, 10.0f
+            %197:f32 = add 0.5f, %196
+            store %grey, %197
             exit_if  # if_10
           }
-          %b49 = block {  # false
-            %176:f32 = load_vector_element %gl_FragCoord, 1u
-            %177:i32 = convert %176
-            %178:bool = lt %177, 90i
-            if %178 [t: %b50, f: %b51] {  # if_11
-              %b50 = block {  # true
-                %179:ptr<private, i32, read_write> = access %data, 2i
-                %180:i32 = load %179
-                %181:f32 = convert %180
-                %182:f32 = div %181, 10.0f
-                %183:f32 = add 0.5f, %182
-                store %grey, %183
+          $B49: {  # false
+            %198:f32 = load_vector_element %gl_FragCoord, 1u
+            %199:i32 = call %tint_f32_to_i32, %198
+            %200:bool = lt %199, 90i
+            if %200 [t: $B50, f: $B51] {  # if_11
+              $B50: {  # true
+                %201:ptr<private, i32, read_write> = access %data, 2i
+                %202:i32 = load %201
+                %203:f32 = convert %202
+                %204:f32 = div %203, 10.0f
+                %205:f32 = add 0.5f, %204
+                store %grey, %205
                 exit_if  # if_11
               }
-              %b51 = block {  # false
-                %184:f32 = load_vector_element %gl_FragCoord, 1u
-                %185:i32 = convert %184
-                %186:bool = lt %185, 120i
-                if %186 [t: %b52, f: %b53] {  # if_12
-                  %b52 = block {  # true
-                    %187:ptr<private, i32, read_write> = access %data, 3i
-                    %188:i32 = load %187
-                    %189:f32 = convert %188
-                    %190:f32 = div %189, 10.0f
-                    %191:f32 = add 0.5f, %190
-                    store %grey, %191
+              $B51: {  # false
+                %206:f32 = load_vector_element %gl_FragCoord, 1u
+                %207:i32 = call %tint_f32_to_i32, %206
+                %208:bool = lt %207, 120i
+                if %208 [t: $B52, f: $B53] {  # if_12
+                  $B52: {  # true
+                    %209:ptr<private, i32, read_write> = access %data, 3i
+                    %210:i32 = load %209
+                    %211:f32 = convert %210
+                    %212:f32 = div %211, 10.0f
+                    %213:f32 = add 0.5f, %212
+                    store %grey, %213
                     exit_if  # if_12
                   }
-                  %b53 = block {  # false
-                    %192:f32 = load_vector_element %gl_FragCoord, 1u
-                    %193:i32 = convert %192
-                    %194:bool = lt %193, 150i
-                    if %194 [t: %b54, f: %b55] {  # if_13
-                      %b54 = block {  # true
-                        discard
+                  $B53: {  # false
+                    %214:f32 = load_vector_element %gl_FragCoord, 1u
+                    %215:i32 = call %tint_f32_to_i32, %214
+                    %216:bool = lt %215, 150i
+                    if %216 [t: $B54, f: $B55] {  # if_13
+                      $B54: {  # true
+                        store %continue_execution, false
                         exit_if  # if_13
                       }
-                      %b55 = block {  # false
-                        %195:f32 = load_vector_element %gl_FragCoord, 1u
-                        %196:i32 = convert %195
-                        %197:bool = lt %196, 180i
-                        if %197 [t: %b56, f: %b57] {  # if_14
-                          %b56 = block {  # true
-                            %198:ptr<private, i32, read_write> = access %data, 5i
-                            %199:i32 = load %198
-                            %200:f32 = convert %199
-                            %201:f32 = div %200, 10.0f
-                            %202:f32 = add 0.5f, %201
-                            store %grey, %202
+                      $B55: {  # false
+                        %217:f32 = load_vector_element %gl_FragCoord, 1u
+                        %218:i32 = call %tint_f32_to_i32, %217
+                        %219:bool = lt %218, 180i
+                        if %219 [t: $B56, f: $B57] {  # if_14
+                          $B56: {  # true
+                            %220:ptr<private, i32, read_write> = access %data, 5i
+                            %221:i32 = load %220
+                            %222:f32 = convert %221
+                            %223:f32 = div %222, 10.0f
+                            %224:f32 = add 0.5f, %223
+                            store %grey, %224
                             exit_if  # if_14
                           }
-                          %b57 = block {  # false
-                            %203:f32 = load_vector_element %gl_FragCoord, 1u
-                            %204:i32 = convert %203
-                            %205:bool = lt %204, 210i
-                            if %205 [t: %b58, f: %b59] {  # if_15
-                              %b58 = block {  # true
-                                %206:ptr<private, i32, read_write> = access %data, 6i
-                                %207:i32 = load %206
-                                %208:f32 = convert %207
-                                %209:f32 = div %208, 10.0f
-                                %210:f32 = add 0.5f, %209
-                                store %grey, %210
+                          $B57: {  # false
+                            %225:f32 = load_vector_element %gl_FragCoord, 1u
+                            %226:i32 = call %tint_f32_to_i32, %225
+                            %227:bool = lt %226, 210i
+                            if %227 [t: $B58, f: $B59] {  # if_15
+                              $B58: {  # true
+                                %228:ptr<private, i32, read_write> = access %data, 6i
+                                %229:i32 = load %228
+                                %230:f32 = convert %229
+                                %231:f32 = div %230, 10.0f
+                                %232:f32 = add 0.5f, %231
+                                store %grey, %232
                                 exit_if  # if_15
                               }
-                              %b59 = block {  # false
-                                %211:f32 = load_vector_element %gl_FragCoord, 1u
-                                %212:i32 = convert %211
-                                %213:bool = lt %212, 240i
-                                if %213 [t: %b60, f: %b61] {  # if_16
-                                  %b60 = block {  # true
-                                    %214:ptr<private, i32, read_write> = access %data, 7i
-                                    %215:i32 = load %214
-                                    %216:f32 = convert %215
-                                    %217:f32 = div %216, 10.0f
-                                    %218:f32 = add 0.5f, %217
-                                    store %grey, %218
+                              $B59: {  # false
+                                %233:f32 = load_vector_element %gl_FragCoord, 1u
+                                %234:i32 = call %tint_f32_to_i32, %233
+                                %235:bool = lt %234, 240i
+                                if %235 [t: $B60, f: $B61] {  # if_16
+                                  $B60: {  # true
+                                    %236:ptr<private, i32, read_write> = access %data, 7i
+                                    %237:i32 = load %236
+                                    %238:f32 = convert %237
+                                    %239:f32 = div %238, 10.0f
+                                    %240:f32 = add 0.5f, %239
+                                    store %grey, %240
                                     exit_if  # if_16
                                   }
-                                  %b61 = block {  # false
-                                    %219:f32 = load_vector_element %gl_FragCoord, 1u
-                                    %220:i32 = convert %219
-                                    %221:bool = lt %220, 270i
-                                    if %221 [t: %b62, f: %b63] {  # if_17
-                                      %b62 = block {  # true
-                                        %222:ptr<private, i32, read_write> = access %data, 8i
-                                        %223:i32 = load %222
-                                        %224:f32 = convert %223
-                                        %225:f32 = div %224, 10.0f
-                                        %226:f32 = add 0.5f, %225
-                                        store %grey, %226
+                                  $B61: {  # false
+                                    %241:f32 = load_vector_element %gl_FragCoord, 1u
+                                    %242:i32 = call %tint_f32_to_i32, %241
+                                    %243:bool = lt %242, 270i
+                                    if %243 [t: $B62, f: $B63] {  # if_17
+                                      $B62: {  # true
+                                        %244:ptr<private, i32, read_write> = access %data, 8i
+                                        %245:i32 = load %244
+                                        %246:f32 = convert %245
+                                        %247:f32 = div %246, 10.0f
+                                        %248:f32 = add 0.5f, %247
+                                        store %grey, %248
                                         exit_if  # if_17
                                       }
-                                      %b63 = block {  # false
-                                        discard
+                                      $B63: {  # false
+                                        store %continue_execution, false
                                         exit_if  # if_17
                                       }
                                     }
@@ -526,23 +547,41 @@
         exit_if  # if_9
       }
     }
-    %227:f32 = load %grey
-    %x_249:vec3<f32> = construct %227
-    %229:f32 = access %x_249, 0u
-    %230:f32 = access %x_249, 1u
-    %231:f32 = access %x_249, 2u
-    %232:vec4<f32> = construct %229, %230, %231, 1.0f
-    store %x_GLF_color, %232
+    %249:f32 = load %grey
+    %250:vec3<f32> = construct %249
+    %x_249:vec3<f32> = let %250
+    %252:f32 = access %x_249, 0u
+    %253:f32 = access %x_249, 1u
+    %254:f32 = access %x_249, 2u
+    %255:vec4<f32> = construct %252, %253, %254, 1.0f
+    store %x_GLF_color, %255
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b64 {
-  %b64 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B64: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %235:void = call %main_1
-    %236:vec4<f32> = load %x_GLF_color
-    %237:main_out = construct %236
-    ret %237
+    %258:void = call %main_1
+    %259:vec4<f32> = load %x_GLF_color
+    %260:main_out = construct %259
+    %261:bool = load %continue_execution
+    %262:bool = eq %261, false
+    if %262 [t: $B65] {  # if_18
+      $B65: {  # true
+        terminate_invocation
+      }
+    }
+    ret %260
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B66: {
+    %264:i32 = convert %value
+    %265:bool = gte %value, -2147483648.0f
+    %266:i32 = select -2147483648i, %264, %265
+    %267:bool = lte %value, 2147483520.0f
+    %268:i32 = select 2147483647i, %266, %267
+    ret %268
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/1.wgsl.expected.ir.msl
index 0413b19..46deb35 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/1.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/1.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -12,153 +12,184 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %data:ptr<private, array<i32, 10>, read_write> = var
   %temp:ptr<private, array<i32, 10>, read_write> = var
   %x_28:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_32:ptr<uniform, buf1, read> = var @binding_point(0, 1)
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%merge_i1_i1_i1_ = func(%f:ptr<function, i32, read_write>, %mid:ptr<function, i32, read_write>, %to:ptr<function, i32, read_write>):void -> %b2 {
-  %b2 = block {
+%merge_i1_i1_i1_ = func(%f:ptr<function, i32, read_write>, %mid:ptr<function, i32, read_write>, %to:ptr<function, i32, read_write>):void {
+  $B2: {
     %k:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %j:ptr<function, i32, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
-    %x_255:i32 = load %f
+    %16:i32 = load %f
+    %x_255:i32 = let %16
     store %k, %x_255
-    %x_256:i32 = load %f
+    %18:i32 = load %f
+    %x_256:i32 = let %18
     store %i, %x_256
-    %x_257:i32 = load %mid
-    %18:i32 = add %x_257, 1i
-    store %j, %18
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_263:i32 = load %i
-        %x_264:i32 = load %mid
-        %x_266:i32 = load %j
-        %x_267:i32 = load %to
-        %23:bool = lte %x_263, %x_264
-        %24:bool = lte %x_266, %x_267
-        %25:bool = and %23, %24
-        if %25 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    %20:i32 = load %mid
+    %x_257:i32 = let %20
+    %22:i32 = add %x_257, 1i
+    store %j, %22
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %23:i32 = load %i
+        %x_263:i32 = let %23
+        %25:i32 = load %mid
+        %x_264:i32 = let %25
+        %27:i32 = load %j
+        %x_266:i32 = let %27
+        %29:i32 = load %to
+        %x_267:i32 = let %29
+        %31:bool = lte %x_263, %x_264
+        %32:bool = lte %x_266, %x_267
+        %33:bool = and %31, %32
+        if %33 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_271:i32 = load %i
-        %27:ptr<private, i32, read_write> = access %data, %x_271
-        %x_273:i32 = load %27
-        %x_274:i32 = load %j
-        %30:ptr<private, i32, read_write> = access %data, %x_274
-        %x_276:i32 = load %30
-        %32:bool = lt %x_273, %x_276
-        if %32 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
-            %x_281:i32 = load %k
-            %34:i32 = add %x_281, 1i
-            store %k, %34
-            %x_283:i32 = load %i
-            %36:i32 = add %x_283, 1i
-            store %i, %36
-            %37:ptr<private, i32, read_write> = access %data, %x_283
-            %x_286:i32 = load %37
-            %39:ptr<private, i32, read_write> = access %temp, %x_281
-            store %39, %x_286
+        %34:i32 = load %i
+        %x_271:i32 = let %34
+        %36:ptr<private, i32, read_write> = access %data, %x_271
+        %37:i32 = load %36
+        %x_273:i32 = let %37
+        %39:i32 = load %j
+        %x_274:i32 = let %39
+        %41:ptr<private, i32, read_write> = access %data, %x_274
+        %42:i32 = load %41
+        %x_276:i32 = let %42
+        %44:bool = lt %x_273, %x_276
+        if %44 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
+            %45:i32 = load %k
+            %x_281:i32 = let %45
+            %47:i32 = add %x_281, 1i
+            store %k, %47
+            %48:i32 = load %i
+            %x_283:i32 = let %48
+            %50:i32 = add %x_283, 1i
+            store %i, %50
+            %51:ptr<private, i32, read_write> = access %data, %x_283
+            %52:i32 = load %51
+            %x_286:i32 = let %52
+            %54:ptr<private, i32, read_write> = access %temp, %x_281
+            store %54, %x_286
             exit_if  # if_2
           }
-          %b8 = block {  # false
-            %x_288:i32 = load %k
-            %41:i32 = add %x_288, 1i
-            store %k, %41
-            %x_290:i32 = load %j
-            %43:i32 = add %x_290, 1i
-            store %j, %43
-            %44:ptr<private, i32, read_write> = access %data, %x_290
-            %x_293:i32 = load %44
-            %46:ptr<private, i32, read_write> = access %temp, %x_288
-            store %46, %x_293
+          $B8: {  # false
+            %55:i32 = load %k
+            %x_288:i32 = let %55
+            %57:i32 = add %x_288, 1i
+            store %k, %57
+            %58:i32 = load %j
+            %x_290:i32 = let %58
+            %60:i32 = add %x_290, 1i
+            store %j, %60
+            %61:ptr<private, i32, read_write> = access %data, %x_290
+            %62:i32 = load %61
+            %x_293:i32 = let %62
+            %64:ptr<private, i32, read_write> = access %temp, %x_288
+            store %64, %x_293
             exit_if  # if_2
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
-    loop [b: %b9, c: %b10] {  # loop_2
-      %b9 = block {  # body
-        %x_299:i32 = load %i
-        %x_301:i32 = load %i
-        %x_302:i32 = load %mid
-        %50:bool = lt %x_299, 10i
-        %51:bool = lte %x_301, %x_302
-        %52:bool = and %50, %51
-        if %52 [t: %b11, f: %b12] {  # if_3
-          %b11 = block {  # true
+    loop [b: $B9, c: $B10] {  # loop_2
+      $B9: {  # body
+        %65:i32 = load %i
+        %x_299:i32 = let %65
+        %67:i32 = load %i
+        %x_301:i32 = let %67
+        %69:i32 = load %mid
+        %x_302:i32 = let %69
+        %71:bool = lt %x_299, 10i
+        %72:bool = lte %x_301, %x_302
+        %73:bool = and %71, %72
+        if %73 [t: $B11, f: $B12] {  # if_3
+          $B11: {  # true
             exit_if  # if_3
           }
-          %b12 = block {  # false
+          $B12: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_306:i32 = load %k
-        %54:i32 = add %x_306, 1i
-        store %k, %54
-        %x_308:i32 = load %i
-        %56:i32 = add %x_308, 1i
-        store %i, %56
-        %57:ptr<private, i32, read_write> = access %data, %x_308
-        %x_311:i32 = load %57
-        %59:ptr<private, i32, read_write> = access %temp, %x_306
-        store %59, %x_311
-        continue %b10
+        %74:i32 = load %k
+        %x_306:i32 = let %74
+        %76:i32 = add %x_306, 1i
+        store %k, %76
+        %77:i32 = load %i
+        %x_308:i32 = let %77
+        %79:i32 = add %x_308, 1i
+        store %i, %79
+        %80:ptr<private, i32, read_write> = access %data, %x_308
+        %81:i32 = load %80
+        %x_311:i32 = let %81
+        %83:ptr<private, i32, read_write> = access %temp, %x_306
+        store %83, %x_311
+        continue  # -> $B10
       }
-      %b10 = block {  # continuing
-        next_iteration %b9
+      $B10: {  # continuing
+        next_iteration  # -> $B9
       }
     }
-    %x_313:i32 = load %f
+    %84:i32 = load %f
+    %x_313:i32 = let %84
     store %i_1, %x_313
-    loop [b: %b13, c: %b14] {  # loop_3
-      %b13 = block {  # body
-        %x_318:i32 = load %i_1
-        %x_319:i32 = load %to
-        %63:bool = lte %x_318, %x_319
-        if %63 [t: %b15, f: %b16] {  # if_4
-          %b15 = block {  # true
+    loop [b: $B13, c: $B14] {  # loop_3
+      $B13: {  # body
+        %86:i32 = load %i_1
+        %x_318:i32 = let %86
+        %88:i32 = load %to
+        %x_319:i32 = let %88
+        %90:bool = lte %x_318, %x_319
+        if %90 [t: $B15, f: $B16] {  # if_4
+          $B15: {  # true
             exit_if  # if_4
           }
-          %b16 = block {  # false
+          $B16: {  # false
             exit_loop  # loop_3
           }
         }
-        %x_322:i32 = load %i_1
-        %x_323:i32 = load %i_1
-        %66:ptr<private, i32, read_write> = access %temp, %x_323
-        %x_325:i32 = load %66
-        %68:ptr<private, i32, read_write> = access %data, %x_322
-        store %68, %x_325
-        continue %b14
+        %91:i32 = load %i_1
+        %x_322:i32 = let %91
+        %93:i32 = load %i_1
+        %x_323:i32 = let %93
+        %95:ptr<private, i32, read_write> = access %temp, %x_323
+        %96:i32 = load %95
+        %x_325:i32 = let %96
+        %98:ptr<private, i32, read_write> = access %data, %x_322
+        store %98, %x_325
+        continue  # -> $B14
       }
-      %b14 = block {  # continuing
-        %x_327:i32 = load %i_1
-        %70:i32 = add %x_327, 1i
-        store %i_1, %70
-        next_iteration %b13
+      $B14: {  # continuing
+        %99:i32 = load %i_1
+        %x_327:i32 = let %99
+        %101:i32 = add %x_327, 1i
+        store %i_1, %101
+        next_iteration  # -> $B13
       }
     }
     ret
   }
 }
-%mergeSort_ = func():void -> %b17 {
-  %b17 = block {
+%mergeSort_ = func():void {
+  $B17: {
     %low:ptr<function, i32, read_write> = var
     %high:ptr<function, i32, read_write> = var
     %m:ptr<function, i32, read_write> = var
@@ -172,327 +203,380 @@
     store %low, 0i
     store %high, 9i
     store %m, 1i
-    loop [b: %b18, c: %b19] {  # loop_4
-      %b18 = block {  # body
-        %x_334:i32 = load %m
-        %x_335:i32 = load %high
-        %84:bool = lte %x_334, %x_335
-        if %84 [t: %b20, f: %b21] {  # if_5
-          %b20 = block {  # true
+    loop [b: $B18, c: $B19] {  # loop_4
+      $B18: {  # body
+        %113:i32 = load %m
+        %x_334:i32 = let %113
+        %115:i32 = load %high
+        %x_335:i32 = let %115
+        %117:bool = lte %x_334, %x_335
+        if %117 [t: $B20, f: $B21] {  # if_5
+          $B20: {  # true
             exit_if  # if_5
           }
-          %b21 = block {  # false
+          $B21: {  # false
             exit_loop  # loop_4
           }
         }
-        %x_338:i32 = load %low
+        %118:i32 = load %low
+        %x_338:i32 = let %118
         store %i_2, %x_338
-        loop [b: %b22, c: %b23] {  # loop_5
-          %b22 = block {  # body
-            %x_343:i32 = load %i_2
-            %x_344:i32 = load %high
-            %88:bool = lt %x_343, %x_344
-            if %88 [t: %b24, f: %b25] {  # if_6
-              %b24 = block {  # true
+        loop [b: $B22, c: $B23] {  # loop_5
+          $B22: {  # body
+            %120:i32 = load %i_2
+            %x_343:i32 = let %120
+            %122:i32 = load %high
+            %x_344:i32 = let %122
+            %124:bool = lt %x_343, %x_344
+            if %124 [t: $B24, f: $B25] {  # if_6
+              $B24: {  # true
                 exit_if  # if_6
               }
-              %b25 = block {  # false
+              $B25: {  # false
                 exit_loop  # loop_5
               }
             }
-            %x_347:i32 = load %i_2
+            %125:i32 = load %i_2
+            %x_347:i32 = let %125
             store %f_1, %x_347
-            %x_348:i32 = load %i_2
-            %x_349:i32 = load %m
-            %92:i32 = add %x_348, %x_349
-            %93:i32 = sub %92, 1i
-            store %mid_1, %93
-            %x_352:i32 = load %i_2
-            %x_353:i32 = load %m
-            %x_357:i32 = load %high
-            %97:i32 = mul 2i, %x_353
-            %98:i32 = add %x_352, %97
-            %99:i32 = sub %98, 1i
-            %100:i32 = min %99, %x_357
-            store %to_1, %100
-            %x_359:i32 = load %f_1
+            %127:i32 = load %i_2
+            %x_348:i32 = let %127
+            %129:i32 = load %m
+            %x_349:i32 = let %129
+            %131:i32 = add %x_348, %x_349
+            %132:i32 = sub %131, 1i
+            store %mid_1, %132
+            %133:i32 = load %i_2
+            %x_352:i32 = let %133
+            %135:i32 = load %m
+            %x_353:i32 = let %135
+            %137:i32 = load %high
+            %x_357:i32 = let %137
+            %139:i32 = mul 2i, %x_353
+            %140:i32 = add %x_352, %139
+            %141:i32 = sub %140, 1i
+            %142:i32 = min %141, %x_357
+            store %to_1, %142
+            %143:i32 = load %f_1
+            %x_359:i32 = let %143
             store %param, %x_359
-            %x_360:i32 = load %mid_1
+            %145:i32 = load %mid_1
+            %x_360:i32 = let %145
             store %param_1, %x_360
-            %x_361:i32 = load %to_1
+            %147:i32 = load %to_1
+            %x_361:i32 = let %147
             store %param_2, %x_361
-            %104:void = call %merge_i1_i1_i1_, %param, %param_1, %param_2
-            continue %b23
+            %149:void = call %merge_i1_i1_i1_, %param, %param_1, %param_2
+            continue  # -> $B23
           }
-          %b23 = block {  # continuing
-            %x_363:i32 = load %m
-            %x_365:i32 = load %i_2
-            %107:i32 = mul 2i, %x_363
-            %108:i32 = add %x_365, %107
-            store %i_2, %108
-            next_iteration %b22
+          $B23: {  # continuing
+            %150:i32 = load %m
+            %x_363:i32 = let %150
+            %152:i32 = load %i_2
+            %x_365:i32 = let %152
+            %154:i32 = mul 2i, %x_363
+            %155:i32 = add %x_365, %154
+            store %i_2, %155
+            next_iteration  # -> $B22
           }
         }
-        continue %b19
+        continue  # -> $B19
       }
-      %b19 = block {  # continuing
-        %x_367:i32 = load %m
-        %110:i32 = mul 2i, %x_367
-        store %m, %110
-        next_iteration %b18
+      $B19: {  # continuing
+        %156:i32 = load %m
+        %x_367:i32 = let %156
+        %158:i32 = mul 2i, %x_367
+        store %m, %158
+        next_iteration  # -> $B18
       }
     }
     ret
   }
 }
-%main_1 = func():void -> %b26 {
-  %b26 = block {
+%main_1 = func():void {
+  $B26: {
     %i_3:ptr<function, i32, read_write> = var
     %j_1:ptr<function, i32, read_write> = var
     %grey:ptr<function, f32, read_write> = var
-    %115:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
-    %x_88:f32 = load_vector_element %115, 0u
-    %117:i32 = convert %x_88
-    store %i_3, %117
-    loop [b: %b27, c: %b28] {  # loop_6
-      %b27 = block {  # body
-        %x_94:i32 = load %i_3
-        switch %x_94 [c: (9i, %b29), c: (8i, %b30), c: (7i, %b31), c: (6i, %b32), c: (5i, %b33), c: (4i, %b34), c: (3i, %b35), c: (2i, %b36), c: (1i, %b37), c: (0i, %b38), c: (default, %b39)] {  # switch_1
-          %b29 = block {  # case
-            %x_124:i32 = load %i_3
-            %120:ptr<private, i32, read_write> = access %data, %x_124
-            store %120, -5i
-            if true [t: %b40, f: %b41] {  # if_7
-              %b40 = block {  # true
+    %163:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
+    %164:f32 = load_vector_element %163, 0u
+    %x_88:f32 = let %164
+    %166:i32 = call %tint_f32_to_i32, %x_88
+    store %i_3, %166
+    loop [b: $B27, c: $B28] {  # loop_6
+      $B27: {  # body
+        %168:i32 = load %i_3
+        %x_94:i32 = let %168
+        switch %x_94 [c: (9i, $B29), c: (8i, $B30), c: (7i, $B31), c: (6i, $B32), c: (5i, $B33), c: (4i, $B34), c: (3i, $B35), c: (2i, $B36), c: (1i, $B37), c: (0i, $B38), c: (default, $B39)] {  # switch_1
+          $B29: {  # case
+            %170:i32 = load %i_3
+            %x_124:i32 = let %170
+            %172:ptr<private, i32, read_write> = access %data, %x_124
+            store %172, -5i
+            if true [t: $B40, f: $B41] {  # if_7
+              $B40: {  # true
                 exit_if  # if_7
               }
-              %b41 = block {  # false
-                continue %b28
+              $B41: {  # false
+                continue  # -> $B28
               }
             }
             exit_switch  # switch_1
           }
-          %b30 = block {  # case
-            %x_122:i32 = load %i_3
-            %122:ptr<private, i32, read_write> = access %data, %x_122
-            store %122, -4i
+          $B30: {  # case
+            %173:i32 = load %i_3
+            %x_122:i32 = let %173
+            %175:ptr<private, i32, read_write> = access %data, %x_122
+            store %175, -4i
             exit_switch  # switch_1
           }
-          %b31 = block {  # case
-            %x_120:i32 = load %i_3
-            %124:ptr<private, i32, read_write> = access %data, %x_120
-            store %124, -3i
+          $B31: {  # case
+            %176:i32 = load %i_3
+            %x_120:i32 = let %176
+            %178:ptr<private, i32, read_write> = access %data, %x_120
+            store %178, -3i
             exit_switch  # switch_1
           }
-          %b32 = block {  # case
-            %x_118:i32 = load %i_3
-            %126:ptr<private, i32, read_write> = access %data, %x_118
-            store %126, -2i
+          $B32: {  # case
+            %179:i32 = load %i_3
+            %x_118:i32 = let %179
+            %181:ptr<private, i32, read_write> = access %data, %x_118
+            store %181, -2i
             exit_switch  # switch_1
           }
-          %b33 = block {  # case
-            %x_116:i32 = load %i_3
-            %128:ptr<private, i32, read_write> = access %data, %x_116
-            store %128, -1i
+          $B33: {  # case
+            %182:i32 = load %i_3
+            %x_116:i32 = let %182
+            %184:ptr<private, i32, read_write> = access %data, %x_116
+            store %184, -1i
             exit_switch  # switch_1
           }
-          %b34 = block {  # case
-            %x_114:i32 = load %i_3
-            %130:ptr<private, i32, read_write> = access %data, %x_114
-            store %130, 0i
+          $B34: {  # case
+            %185:i32 = load %i_3
+            %x_114:i32 = let %185
+            %187:ptr<private, i32, read_write> = access %data, %x_114
+            store %187, 0i
             exit_switch  # switch_1
           }
-          %b35 = block {  # case
-            %x_112:i32 = load %i_3
-            %132:ptr<private, i32, read_write> = access %data, %x_112
-            store %132, 1i
+          $B35: {  # case
+            %188:i32 = load %i_3
+            %x_112:i32 = let %188
+            %190:ptr<private, i32, read_write> = access %data, %x_112
+            store %190, 1i
             exit_switch  # switch_1
           }
-          %b36 = block {  # case
-            %x_110:i32 = load %i_3
-            %134:ptr<private, i32, read_write> = access %data, %x_110
-            store %134, 2i
+          $B36: {  # case
+            %191:i32 = load %i_3
+            %x_110:i32 = let %191
+            %193:ptr<private, i32, read_write> = access %data, %x_110
+            store %193, 2i
             exit_switch  # switch_1
           }
-          %b37 = block {  # case
-            %x_108:i32 = load %i_3
-            %136:ptr<private, i32, read_write> = access %data, %x_108
-            store %136, 3i
+          $B37: {  # case
+            %194:i32 = load %i_3
+            %x_108:i32 = let %194
+            %196:ptr<private, i32, read_write> = access %data, %x_108
+            store %196, 3i
             exit_switch  # switch_1
           }
-          %b38 = block {  # case
-            %x_106:i32 = load %i_3
-            %138:ptr<private, i32, read_write> = access %data, %x_106
-            store %138, 4i
+          $B38: {  # case
+            %197:i32 = load %i_3
+            %x_106:i32 = let %197
+            %199:ptr<private, i32, read_write> = access %data, %x_106
+            store %199, 4i
             exit_switch  # switch_1
           }
-          %b39 = block {  # case
+          $B39: {  # case
             exit_switch  # switch_1
           }
         }
-        %x_126:i32 = load %i_3
-        %140:i32 = add %x_126, 1i
-        store %i_3, %140
-        continue %b28
+        %200:i32 = load %i_3
+        %x_126:i32 = let %200
+        %202:i32 = add %x_126, 1i
+        store %i_3, %202
+        continue  # -> $B28
       }
-      %b28 = block {  # continuing
-        %x_128:i32 = load %i_3
-        %142:bool = lt %x_128, 10i
-        %143:bool = eq %142, false
-        break_if %143 %b27
+      $B28: {  # continuing
+        %203:i32 = load %i_3
+        %x_128:i32 = let %203
+        %205:bool = lt %x_128, 10i
+        %206:bool = eq %205, false
+        break_if %206  # -> [t: exit_loop loop_6, f: $B27]
       }
     }
     store %j_1, 0i
-    loop [b: %b42, c: %b43] {  # loop_7
-      %b42 = block {  # body
-        %x_134:i32 = load %j_1
-        %145:bool = lt %x_134, 10i
-        if %145 [t: %b44, f: %b45] {  # if_8
-          %b44 = block {  # true
+    loop [b: $B42, c: $B43] {  # loop_7
+      $B42: {  # body
+        %207:i32 = load %j_1
+        %x_134:i32 = let %207
+        %209:bool = lt %x_134, 10i
+        if %209 [t: $B44, f: $B45] {  # if_8
+          $B44: {  # true
             exit_if  # if_8
           }
-          %b45 = block {  # false
+          $B45: {  # false
             exit_loop  # loop_7
           }
         }
-        %x_137:i32 = load %j_1
-        %x_138:i32 = load %j_1
-        %148:ptr<private, i32, read_write> = access %data, %x_138
-        %x_140:i32 = load %148
-        %150:ptr<private, i32, read_write> = access %temp, %x_137
-        store %150, %x_140
-        continue %b43
+        %210:i32 = load %j_1
+        %x_137:i32 = let %210
+        %212:i32 = load %j_1
+        %x_138:i32 = let %212
+        %214:ptr<private, i32, read_write> = access %data, %x_138
+        %215:i32 = load %214
+        %x_140:i32 = let %215
+        %217:ptr<private, i32, read_write> = access %temp, %x_137
+        store %217, %x_140
+        continue  # -> $B43
       }
-      %b43 = block {  # continuing
-        %x_142:i32 = load %j_1
-        %152:i32 = add %x_142, 1i
-        store %j_1, %152
-        next_iteration %b42
+      $B43: {  # continuing
+        %218:i32 = load %j_1
+        %x_142:i32 = let %218
+        %220:i32 = add %x_142, 1i
+        store %j_1, %220
+        next_iteration  # -> $B42
       }
     }
-    %153:void = call %mergeSort_
-    %x_146:f32 = load_vector_element %gl_FragCoord, 1u
-    %155:i32 = convert %x_146
-    %156:bool = lt %155, 30i
-    if %156 [t: %b46, f: %b47] {  # if_9
-      %b46 = block {  # true
-        %157:ptr<private, i32, read_write> = access %data, 0i
-        %x_153:i32 = load %157
-        %159:f32 = convert %x_153
-        %160:f32 = div %159, 10.0f
-        %161:f32 = add 0.5f, %160
-        store %grey, %161
+    %221:void = call %mergeSort_
+    %222:f32 = load_vector_element %gl_FragCoord, 1u
+    %x_146:f32 = let %222
+    %224:i32 = call %tint_f32_to_i32, %x_146
+    %225:bool = lt %224, 30i
+    if %225 [t: $B46, f: $B47] {  # if_9
+      $B46: {  # true
+        %226:ptr<private, i32, read_write> = access %data, 0i
+        %227:i32 = load %226
+        %x_153:i32 = let %227
+        %229:f32 = convert %x_153
+        %230:f32 = div %229, 10.0f
+        %231:f32 = add 0.5f, %230
+        store %grey, %231
         exit_if  # if_9
       }
-      %b47 = block {  # false
-        %x_158:f32 = load_vector_element %gl_FragCoord, 1u
-        %163:i32 = convert %x_158
-        %164:bool = lt %163, 60i
-        if %164 [t: %b48, f: %b49] {  # if_10
-          %b48 = block {  # true
-            %165:ptr<private, i32, read_write> = access %data, 1i
-            %x_165:i32 = load %165
-            %167:f32 = convert %x_165
-            %168:f32 = div %167, 10.0f
-            %169:f32 = add 0.5f, %168
-            store %grey, %169
+      $B47: {  # false
+        %232:f32 = load_vector_element %gl_FragCoord, 1u
+        %x_158:f32 = let %232
+        %234:i32 = call %tint_f32_to_i32, %x_158
+        %235:bool = lt %234, 60i
+        if %235 [t: $B48, f: $B49] {  # if_10
+          $B48: {  # true
+            %236:ptr<private, i32, read_write> = access %data, 1i
+            %237:i32 = load %236
+            %x_165:i32 = let %237
+            %239:f32 = convert %x_165
+            %240:f32 = div %239, 10.0f
+            %241:f32 = add 0.5f, %240
+            store %grey, %241
             exit_if  # if_10
           }
-          %b49 = block {  # false
-            %x_170:f32 = load_vector_element %gl_FragCoord, 1u
-            %171:i32 = convert %x_170
-            %172:bool = lt %171, 90i
-            if %172 [t: %b50, f: %b51] {  # if_11
-              %b50 = block {  # true
-                %173:ptr<private, i32, read_write> = access %data, 2i
-                %x_177:i32 = load %173
-                %175:f32 = convert %x_177
-                %176:f32 = div %175, 10.0f
-                %177:f32 = add 0.5f, %176
-                store %grey, %177
+          $B49: {  # false
+            %242:f32 = load_vector_element %gl_FragCoord, 1u
+            %x_170:f32 = let %242
+            %244:i32 = call %tint_f32_to_i32, %x_170
+            %245:bool = lt %244, 90i
+            if %245 [t: $B50, f: $B51] {  # if_11
+              $B50: {  # true
+                %246:ptr<private, i32, read_write> = access %data, 2i
+                %247:i32 = load %246
+                %x_177:i32 = let %247
+                %249:f32 = convert %x_177
+                %250:f32 = div %249, 10.0f
+                %251:f32 = add 0.5f, %250
+                store %grey, %251
                 exit_if  # if_11
               }
-              %b51 = block {  # false
-                %x_182:f32 = load_vector_element %gl_FragCoord, 1u
-                %179:i32 = convert %x_182
-                %180:bool = lt %179, 120i
-                if %180 [t: %b52, f: %b53] {  # if_12
-                  %b52 = block {  # true
-                    %181:ptr<private, i32, read_write> = access %data, 3i
-                    %x_189:i32 = load %181
-                    %183:f32 = convert %x_189
-                    %184:f32 = div %183, 10.0f
-                    %185:f32 = add 0.5f, %184
-                    store %grey, %185
+              $B51: {  # false
+                %252:f32 = load_vector_element %gl_FragCoord, 1u
+                %x_182:f32 = let %252
+                %254:i32 = call %tint_f32_to_i32, %x_182
+                %255:bool = lt %254, 120i
+                if %255 [t: $B52, f: $B53] {  # if_12
+                  $B52: {  # true
+                    %256:ptr<private, i32, read_write> = access %data, 3i
+                    %257:i32 = load %256
+                    %x_189:i32 = let %257
+                    %259:f32 = convert %x_189
+                    %260:f32 = div %259, 10.0f
+                    %261:f32 = add 0.5f, %260
+                    store %grey, %261
                     exit_if  # if_12
                   }
-                  %b53 = block {  # false
-                    %x_194:f32 = load_vector_element %gl_FragCoord, 1u
-                    %187:i32 = convert %x_194
-                    %188:bool = lt %187, 150i
-                    if %188 [t: %b54, f: %b55] {  # if_13
-                      %b54 = block {  # true
-                        discard
+                  $B53: {  # false
+                    %262:f32 = load_vector_element %gl_FragCoord, 1u
+                    %x_194:f32 = let %262
+                    %264:i32 = call %tint_f32_to_i32, %x_194
+                    %265:bool = lt %264, 150i
+                    if %265 [t: $B54, f: $B55] {  # if_13
+                      $B54: {  # true
+                        store %continue_execution, false
                         exit_if  # if_13
                       }
-                      %b55 = block {  # false
-                        %x_201:f32 = load_vector_element %gl_FragCoord, 1u
-                        %190:i32 = convert %x_201
-                        %191:bool = lt %190, 180i
-                        if %191 [t: %b56, f: %b57] {  # if_14
-                          %b56 = block {  # true
-                            %192:ptr<private, i32, read_write> = access %data, 5i
-                            %x_208:i32 = load %192
-                            %194:f32 = convert %x_208
-                            %195:f32 = div %194, 10.0f
-                            %196:f32 = add 0.5f, %195
-                            store %grey, %196
+                      $B55: {  # false
+                        %266:f32 = load_vector_element %gl_FragCoord, 1u
+                        %x_201:f32 = let %266
+                        %268:i32 = call %tint_f32_to_i32, %x_201
+                        %269:bool = lt %268, 180i
+                        if %269 [t: $B56, f: $B57] {  # if_14
+                          $B56: {  # true
+                            %270:ptr<private, i32, read_write> = access %data, 5i
+                            %271:i32 = load %270
+                            %x_208:i32 = let %271
+                            %273:f32 = convert %x_208
+                            %274:f32 = div %273, 10.0f
+                            %275:f32 = add 0.5f, %274
+                            store %grey, %275
                             exit_if  # if_14
                           }
-                          %b57 = block {  # false
-                            %x_213:f32 = load_vector_element %gl_FragCoord, 1u
-                            %198:i32 = convert %x_213
-                            %199:bool = lt %198, 210i
-                            if %199 [t: %b58, f: %b59] {  # if_15
-                              %b58 = block {  # true
-                                %200:ptr<private, i32, read_write> = access %data, 6i
-                                %x_220:i32 = load %200
-                                %202:f32 = convert %x_220
-                                %203:f32 = div %202, 10.0f
-                                %204:f32 = add 0.5f, %203
-                                store %grey, %204
+                          $B57: {  # false
+                            %276:f32 = load_vector_element %gl_FragCoord, 1u
+                            %x_213:f32 = let %276
+                            %278:i32 = call %tint_f32_to_i32, %x_213
+                            %279:bool = lt %278, 210i
+                            if %279 [t: $B58, f: $B59] {  # if_15
+                              $B58: {  # true
+                                %280:ptr<private, i32, read_write> = access %data, 6i
+                                %281:i32 = load %280
+                                %x_220:i32 = let %281
+                                %283:f32 = convert %x_220
+                                %284:f32 = div %283, 10.0f
+                                %285:f32 = add 0.5f, %284
+                                store %grey, %285
                                 exit_if  # if_15
                               }
-                              %b59 = block {  # false
-                                %x_225:f32 = load_vector_element %gl_FragCoord, 1u
-                                %206:i32 = convert %x_225
-                                %207:bool = lt %206, 240i
-                                if %207 [t: %b60, f: %b61] {  # if_16
-                                  %b60 = block {  # true
-                                    %208:ptr<private, i32, read_write> = access %data, 7i
-                                    %x_232:i32 = load %208
-                                    %210:f32 = convert %x_232
-                                    %211:f32 = div %210, 10.0f
-                                    %212:f32 = add 0.5f, %211
-                                    store %grey, %212
+                              $B59: {  # false
+                                %286:f32 = load_vector_element %gl_FragCoord, 1u
+                                %x_225:f32 = let %286
+                                %288:i32 = call %tint_f32_to_i32, %x_225
+                                %289:bool = lt %288, 240i
+                                if %289 [t: $B60, f: $B61] {  # if_16
+                                  $B60: {  # true
+                                    %290:ptr<private, i32, read_write> = access %data, 7i
+                                    %291:i32 = load %290
+                                    %x_232:i32 = let %291
+                                    %293:f32 = convert %x_232
+                                    %294:f32 = div %293, 10.0f
+                                    %295:f32 = add 0.5f, %294
+                                    store %grey, %295
                                     exit_if  # if_16
                                   }
-                                  %b61 = block {  # false
-                                    %x_237:f32 = load_vector_element %gl_FragCoord, 1u
-                                    %214:i32 = convert %x_237
-                                    %215:bool = lt %214, 270i
-                                    if %215 [t: %b62, f: %b63] {  # if_17
-                                      %b62 = block {  # true
-                                        %216:ptr<private, i32, read_write> = access %data, 8i
-                                        %x_244:i32 = load %216
-                                        %218:f32 = convert %x_244
-                                        %219:f32 = div %218, 10.0f
-                                        %220:f32 = add 0.5f, %219
-                                        store %grey, %220
+                                  $B61: {  # false
+                                    %296:f32 = load_vector_element %gl_FragCoord, 1u
+                                    %x_237:f32 = let %296
+                                    %298:i32 = call %tint_f32_to_i32, %x_237
+                                    %299:bool = lt %298, 270i
+                                    if %299 [t: $B62, f: $B63] {  # if_17
+                                      $B62: {  # true
+                                        %300:ptr<private, i32, read_write> = access %data, 8i
+                                        %301:i32 = load %300
+                                        %x_244:i32 = let %301
+                                        %303:f32 = convert %x_244
+                                        %304:f32 = div %303, 10.0f
+                                        %305:f32 = add 0.5f, %304
+                                        store %grey, %305
                                         exit_if  # if_17
                                       }
-                                      %b63 = block {  # false
-                                        discard
+                                      $B63: {  # false
+                                        store %continue_execution, false
                                         exit_if  # if_17
                                       }
                                     }
@@ -520,23 +604,42 @@
         exit_if  # if_9
       }
     }
-    %x_248:f32 = load %grey
-    %x_249:vec3<f32> = construct %x_248, %x_248, %x_248
-    %223:f32 = access %x_249, 0u
-    %224:f32 = access %x_249, 1u
-    %225:f32 = access %x_249, 2u
-    %226:vec4<f32> = construct %223, %224, %225, 1.0f
-    store %x_GLF_color, %226
+    %306:f32 = load %grey
+    %x_248:f32 = let %306
+    %308:vec3<f32> = construct %x_248, %x_248, %x_248
+    %x_249:vec3<f32> = let %308
+    %310:f32 = access %x_249, 0u
+    %311:f32 = access %x_249, 1u
+    %312:f32 = access %x_249, 2u
+    %313:vec4<f32> = construct %310, %311, %312, 1.0f
+    store %x_GLF_color, %313
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b64 {
-  %b64 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B64: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %229:void = call %main_1
-    %230:vec4<f32> = load %x_GLF_color
-    %231:main_out = construct %230
-    ret %231
+    %316:void = call %main_1
+    %317:vec4<f32> = load %x_GLF_color
+    %318:main_out = construct %317
+    %319:bool = load %continue_execution
+    %320:bool = eq %319, false
+    if %320 [t: $B65] {  # if_18
+      $B65: {  # true
+        terminate_invocation
+      }
+    }
+    ret %318
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B66: {
+    %322:i32 = convert %value
+    %323:bool = gte %value, -2147483648.0f
+    %324:i32 = select -2147483648i, %322, %323
+    %325:bool = lte %value, 2147483520.0f
+    %326:i32 = select 2147483647i, %324, %325
+    ret %326
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/0.spvasm.expected.ir.msl
index 73c8258..2383ab6 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf1 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf1 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -12,203 +12,209 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_6:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_9:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %data:ptr<function, array<f32, 10>, read_write> = var
     %x_40:ptr<function, i32, read_write> = var
     %x_52:ptr<function, i32, read_write> = var
     store %x_40, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %x_41:ptr<function, i32, read_write> = var
         %10:i32 = load %x_40
         %11:bool = lt %10, 10i
-        if %11 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %11 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
+      $B4: {  # continuing
         %12:i32 = load %x_40
         %13:ptr<function, f32, read_write> = access %data, %12
-        %14:i32 = load %x_40
-        %15:i32 = sub 10i, %14
-        %16:f32 = convert %15
-        %17:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
-        %18:f32 = load_vector_element %17, 1u
-        %19:f32 = mul %16, %18
-        store %13, %19
-        %20:i32 = load %x_40
-        %21:i32 = add %20, 1i
-        store %x_41, %21
-        %22:i32 = load %x_41
-        store %x_40, %22
-        next_iteration %b3
+        %14:ptr<function, f32, read_write> = let %13
+        %15:i32 = load %x_40
+        %16:i32 = sub 10i, %15
+        %17:f32 = convert %16
+        %18:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
+        %19:f32 = load_vector_element %18, 1u
+        %20:f32 = mul %17, %19
+        store %14, %20
+        %21:i32 = load %x_40
+        %22:i32 = add %21, 1i
+        store %x_41, %22
+        %23:i32 = load %x_41
+        store %x_40, %23
+        next_iteration  # -> $B3
       }
     }
     store %x_52, 0i
-    loop [b: %b7, c: %b8] {  # loop_2
-      %b7 = block {  # body
+    loop [b: $B7, c: $B8] {  # loop_2
+      $B7: {  # body
         %x_59:ptr<function, i32, read_write> = var
         %x_53:ptr<function, i32, read_write> = var
-        %25:i32 = load %x_52
-        %26:bool = lt %25, 9i
-        if %26 [t: %b9, f: %b10] {  # if_2
-          %b9 = block {  # true
+        %26:i32 = load %x_52
+        %27:bool = lt %26, 9i
+        if %27 [t: $B9, f: $B10] {  # if_2
+          $B9: {  # true
             exit_if  # if_2
           }
-          %b10 = block {  # false
+          $B10: {  # false
             exit_loop  # loop_2
           }
         }
         store %x_59, 0i
-        loop [b: %b11, c: %b12] {  # loop_3
-          %b11 = block {  # body
+        loop [b: $B11, c: $B12] {  # loop_3
+          $B11: {  # body
             %x_82:ptr<function, bool, read_write> = var
             %x_83:ptr<function, bool, read_write> = var
             %x_84:ptr<function, bool, read_write> = var
             %x_60:ptr<function, i32, read_write> = var
-            %31:i32 = load %x_59
-            %32:bool = lt %31, 10i
-            if %32 [t: %b13, f: %b14] {  # if_3
-              %b13 = block {  # true
+            %32:i32 = load %x_59
+            %33:bool = lt %32, 10i
+            if %33 [t: $B13, f: $B14] {  # if_3
+              $B13: {  # true
                 exit_if  # if_3
               }
-              %b14 = block {  # false
+              $B14: {  # false
                 exit_loop  # loop_3
               }
             }
-            %33:i32 = load %x_59
-            %34:i32 = load %x_52
-            %35:i32 = add %34, 1i
-            %36:bool = lt %33, %35
-            if %36 [t: %b15] {  # if_4
-              %b15 = block {  # true
-                continue %b12
+            %34:i32 = load %x_59
+            %35:i32 = load %x_52
+            %36:i32 = add %35, 1i
+            %37:bool = lt %34, %36
+            if %37 [t: $B15] {  # if_4
+              $B15: {  # true
+                continue  # -> $B12
               }
             }
-            %x_69_save:i32 = load %x_52
             %38:i32 = load %x_52
-            %39:ptr<function, f32, read_write> = access %data, %38
-            %x_70:f32 = load %39
-            %x_71_save:i32 = load %x_59
-            %42:i32 = load %x_59
-            %43:ptr<function, f32, read_write> = access %data, %42
-            %x_72:f32 = load %43
-            %45:f32 = load_vector_element %gl_FragCoord, 1u
-            %46:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-            %47:f32 = load_vector_element %46, 1u
-            %48:f32 = mul %47, 0.5f
-            %49:bool = lt %45, %48
-            if %49 [t: %b16, f: %b17] {  # if_5
-              %b16 = block {  # true
-                %50:bool = gt %x_70, %x_72
-                store %x_82, %50
-                %51:bool = load %x_82
-                store %x_84, %51
+            %x_69_save:i32 = let %38
+            %40:i32 = load %x_52
+            %41:ptr<function, f32, read_write> = access %data, %40
+            %42:f32 = load %41
+            %x_70:f32 = let %42
+            %44:i32 = load %x_59
+            %x_71_save:i32 = let %44
+            %46:i32 = load %x_59
+            %47:ptr<function, f32, read_write> = access %data, %46
+            %48:f32 = load %47
+            %x_72:f32 = let %48
+            %50:f32 = load_vector_element %gl_FragCoord, 1u
+            %51:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
+            %52:f32 = load_vector_element %51, 1u
+            %53:f32 = mul %52, 0.5f
+            %54:bool = lt %50, %53
+            if %54 [t: $B16, f: $B17] {  # if_5
+              $B16: {  # true
+                %55:bool = gt %x_70, %x_72
+                store %x_82, %55
+                %56:bool = load %x_82
+                store %x_84, %56
                 exit_if  # if_5
               }
-              %b17 = block {  # false
-                %52:bool = lt %x_70, %x_72
-                store %x_83, %52
-                %53:bool = load %x_83
-                store %x_84, %53
+              $B17: {  # false
+                %57:bool = lt %x_70, %x_72
+                store %x_83, %57
+                %58:bool = load %x_83
+                store %x_84, %58
                 exit_if  # if_5
               }
             }
-            %54:bool = load %x_84
-            if %54 [t: %b18] {  # if_6
-              %b18 = block {  # true
-                %55:ptr<function, f32, read_write> = access %data, %x_69_save
-                %x_87:f32 = load %55
-                %57:ptr<function, f32, read_write> = access %data, %x_69_save
-                %58:ptr<function, f32, read_write> = access %data, %x_71_save
-                %59:f32 = load %58
-                store %57, %59
-                %60:ptr<function, f32, read_write> = access %data, %x_71_save
-                store %60, %x_87
+            %59:bool = load %x_84
+            if %59 [t: $B18] {  # if_6
+              $B18: {  # true
+                %60:ptr<function, f32, read_write> = access %data, %x_69_save
+                %61:f32 = load %60
+                %x_87:f32 = let %61
+                %63:ptr<function, f32, read_write> = access %data, %x_69_save
+                %64:ptr<function, f32, read_write> = access %data, %x_71_save
+                %65:f32 = load %64
+                store %63, %65
+                %66:ptr<function, f32, read_write> = access %data, %x_71_save
+                store %66, %x_87
                 exit_if  # if_6
               }
             }
-            continue %b12
+            continue  # -> $B12
           }
-          %b12 = block {  # continuing
-            %61:i32 = load %x_59
-            %62:i32 = add %61, 1i
-            store %x_60, %62
-            %63:i32 = load %x_60
-            store %x_59, %63
-            next_iteration %b11
+          $B12: {  # continuing
+            %67:i32 = load %x_59
+            %68:i32 = add %67, 1i
+            store %x_60, %68
+            %69:i32 = load %x_60
+            store %x_59, %69
+            next_iteration  # -> $B11
           }
         }
-        continue %b8
+        continue  # -> $B8
       }
-      %b8 = block {  # continuing
-        %64:i32 = load %x_52
-        %65:i32 = add %64, 1i
-        store %x_53, %65
-        %66:i32 = load %x_53
-        store %x_52, %66
-        next_iteration %b7
+      $B8: {  # continuing
+        %70:i32 = load %x_52
+        %71:i32 = add %70, 1i
+        store %x_53, %71
+        %72:i32 = load %x_53
+        store %x_52, %72
+        next_iteration  # -> $B7
       }
     }
-    %67:f32 = load_vector_element %gl_FragCoord, 0u
-    %68:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %69:f32 = load_vector_element %68, 0u
-    %70:f32 = mul %69, 0.5f
-    %71:bool = lt %67, %70
-    if %71 [t: %b19, f: %b20] {  # if_7
-      %b19 = block {  # true
-        %72:ptr<function, f32, read_write> = access %data, 0i
-        %73:f32 = load %72
-        %74:f32 = mul %73, 0.10000000149011611938f
-        %75:ptr<function, f32, read_write> = access %data, 5i
-        %76:f32 = load %75
-        %77:f32 = mul %76, 0.10000000149011611938f
-        %78:ptr<function, f32, read_write> = access %data, 9i
+    %73:f32 = load_vector_element %gl_FragCoord, 0u
+    %74:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
+    %75:f32 = load_vector_element %74, 0u
+    %76:f32 = mul %75, 0.5f
+    %77:bool = lt %73, %76
+    if %77 [t: $B19, f: $B20] {  # if_7
+      $B19: {  # true
+        %78:ptr<function, f32, read_write> = access %data, 0i
         %79:f32 = load %78
         %80:f32 = mul %79, 0.10000000149011611938f
-        %81:vec4<f32> = construct %74, %77, %80, 1.0f
-        store %x_GLF_color, %81
+        %81:ptr<function, f32, read_write> = access %data, 5i
+        %82:f32 = load %81
+        %83:f32 = mul %82, 0.10000000149011611938f
+        %84:ptr<function, f32, read_write> = access %data, 9i
+        %85:f32 = load %84
+        %86:f32 = mul %85, 0.10000000149011611938f
+        %87:vec4<f32> = construct %80, %83, %86, 1.0f
+        store %x_GLF_color, %87
         exit_if  # if_7
       }
-      %b20 = block {  # false
-        %82:ptr<function, f32, read_write> = access %data, 5i
-        %83:f32 = load %82
-        %84:f32 = mul %83, 0.10000000149011611938f
-        %85:ptr<function, f32, read_write> = access %data, 9i
-        %86:f32 = load %85
-        %87:f32 = mul %86, 0.10000000149011611938f
-        %88:ptr<function, f32, read_write> = access %data, 0i
+      $B20: {  # false
+        %88:ptr<function, f32, read_write> = access %data, 5i
         %89:f32 = load %88
         %90:f32 = mul %89, 0.10000000149011611938f
-        %91:vec4<f32> = construct %84, %87, %90, 1.0f
-        store %x_GLF_color, %91
+        %91:ptr<function, f32, read_write> = access %data, 9i
+        %92:f32 = load %91
+        %93:f32 = mul %92, 0.10000000149011611938f
+        %94:ptr<function, f32, read_write> = access %data, 0i
+        %95:f32 = load %94
+        %96:f32 = mul %95, 0.10000000149011611938f
+        %97:vec4<f32> = construct %90, %93, %96, 1.0f
+        store %x_GLF_color, %97
         exit_if  # if_7
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b21 {
-  %b21 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B21: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %94:void = call %main_1
-    %95:vec4<f32> = load %x_GLF_color
-    %96:main_out = construct %95
-    ret %96
+    %100:void = call %main_1
+    %101:vec4<f32> = load %x_GLF_color
+    %102:main_out = construct %101
+    ret %102
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/0.wgsl.expected.ir.msl
index f52edd2..71767f8 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/0.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf1 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf1 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -12,194 +12,213 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_6:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_9:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %data:ptr<function, array<f32, 10>, read_write> = var
     %x_40_phi:ptr<function, i32, read_write> = var
     %x_52_phi:ptr<function, i32, read_write> = var
     store %x_40_phi, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %x_41:ptr<function, i32, read_write> = var
-        %x_40:i32 = load %x_40_phi
-        %11:bool = lt %x_40, 10i
-        if %11 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %10:i32 = load %x_40_phi
+        %x_40:i32 = let %10
+        %12:bool = lt %x_40, 10i
+        if %12 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %12:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
-        %x_48:f32 = load_vector_element %12, 1u
-        %14:ptr<function, f32, read_write> = access %data, %x_40
-        %15:i32 = sub 10i, %x_40
-        %16:f32 = convert %15
-        %17:f32 = mul %16, %x_48
-        store %14, %17
-        %18:i32 = add %x_40, 1i
-        store %x_41, %18
-        %19:i32 = load %x_41
-        store %x_40_phi, %19
-        next_iteration %b3
+      $B4: {  # continuing
+        %13:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
+        %14:f32 = load_vector_element %13, 1u
+        %x_48:f32 = let %14
+        %16:ptr<function, f32, read_write> = access %data, %x_40
+        %17:i32 = sub 10i, %x_40
+        %18:f32 = convert %17
+        %19:f32 = mul %18, %x_48
+        store %16, %19
+        %20:i32 = add %x_40, 1i
+        store %x_41, %20
+        %21:i32 = load %x_41
+        store %x_40_phi, %21
+        next_iteration  # -> $B3
       }
     }
     store %x_52_phi, 0i
-    loop [b: %b7, c: %b8] {  # loop_2
-      %b7 = block {  # body
+    loop [b: $B7, c: $B8] {  # loop_2
+      $B7: {  # body
         %x_53:ptr<function, i32, read_write> = var
         %x_59_phi:ptr<function, i32, read_write> = var
-        %x_52:i32 = load %x_52_phi
-        %23:bool = lt %x_52, 9i
-        if %23 [t: %b9, f: %b10] {  # if_2
-          %b9 = block {  # true
+        %24:i32 = load %x_52_phi
+        %x_52:i32 = let %24
+        %26:bool = lt %x_52, 9i
+        if %26 [t: $B9, f: $B10] {  # if_2
+          $B9: {  # true
             exit_if  # if_2
           }
-          %b10 = block {  # false
+          $B10: {  # false
             exit_loop  # loop_2
           }
         }
         store %x_59_phi, 0i
-        loop [b: %b11, c: %b12] {  # loop_3
-          %b11 = block {  # body
+        loop [b: $B11, c: $B12] {  # loop_3
+          $B11: {  # body
             %x_82:ptr<function, bool, read_write> = var
             %x_83:ptr<function, bool, read_write> = var
             %x_60:ptr<function, i32, read_write> = var
             %x_84_phi:ptr<function, bool, read_write> = var
-            %x_59:i32 = load %x_59_phi
-            %29:bool = lt %x_59, 10i
-            if %29 [t: %b13, f: %b14] {  # if_3
-              %b13 = block {  # true
+            %31:i32 = load %x_59_phi
+            %x_59:i32 = let %31
+            %33:bool = lt %x_59, 10i
+            if %33 [t: $B13, f: $B14] {  # if_3
+              $B13: {  # true
                 exit_if  # if_3
               }
-              %b14 = block {  # false
+              $B14: {  # false
                 exit_loop  # loop_3
               }
             }
-            %30:i32 = add %x_52, 1i
-            %31:bool = lt %x_59, %30
-            if %31 [t: %b15] {  # if_4
-              %b15 = block {  # true
-                continue %b12
+            %34:i32 = add %x_52, 1i
+            %35:bool = lt %x_59, %34
+            if %35 [t: $B15] {  # if_4
+              $B15: {  # true
+                continue  # -> $B12
               }
             }
             %x_69_save:i32 = let %x_52
-            %33:ptr<function, f32, read_write> = access %data, %x_69_save
-            %x_70:f32 = load %33
+            %37:ptr<function, f32, read_write> = access %data, %x_69_save
+            %38:f32 = load %37
+            %x_70:f32 = let %38
             %x_71_save:i32 = let %x_59
-            %36:ptr<function, f32, read_write> = access %data, %x_71_save
-            %x_72:f32 = load %36
-            %x_74:f32 = load_vector_element %gl_FragCoord, 1u
-            %39:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-            %x_76:f32 = load_vector_element %39, 1u
-            %41:f32 = mul %x_76, 0.5f
-            %42:bool = lt %x_74, %41
-            if %42 [t: %b16, f: %b17] {  # if_5
-              %b16 = block {  # true
-                %43:bool = gt %x_70, %x_72
-                store %x_82, %43
-                %44:bool = load %x_82
-                store %x_84_phi, %44
+            %41:ptr<function, f32, read_write> = access %data, %x_71_save
+            %42:f32 = load %41
+            %x_72:f32 = let %42
+            %44:f32 = load_vector_element %gl_FragCoord, 1u
+            %x_74:f32 = let %44
+            %46:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
+            %47:f32 = load_vector_element %46, 1u
+            %x_76:f32 = let %47
+            %49:f32 = mul %x_76, 0.5f
+            %50:bool = lt %x_74, %49
+            if %50 [t: $B16, f: $B17] {  # if_5
+              $B16: {  # true
+                %51:bool = gt %x_70, %x_72
+                store %x_82, %51
+                %52:bool = load %x_82
+                store %x_84_phi, %52
                 exit_if  # if_5
               }
-              %b17 = block {  # false
-                %45:bool = lt %x_70, %x_72
-                store %x_83, %45
-                %46:bool = load %x_83
-                store %x_84_phi, %46
+              $B17: {  # false
+                %53:bool = lt %x_70, %x_72
+                store %x_83, %53
+                %54:bool = load %x_83
+                store %x_84_phi, %54
                 exit_if  # if_5
               }
             }
-            %x_84:bool = load %x_84_phi
-            if %x_84 [t: %b18] {  # if_6
-              %b18 = block {  # true
-                %48:ptr<function, f32, read_write> = access %data, %x_69_save
-                %x_87:f32 = load %48
-                %50:ptr<function, f32, read_write> = access %data, %x_71_save
-                %x_88:f32 = load %50
-                %52:ptr<function, f32, read_write> = access %data, %x_69_save
-                store %52, %x_88
-                %53:ptr<function, f32, read_write> = access %data, %x_71_save
-                store %53, %x_87
+            %55:bool = load %x_84_phi
+            %x_84:bool = let %55
+            if %x_84 [t: $B18] {  # if_6
+              $B18: {  # true
+                %57:ptr<function, f32, read_write> = access %data, %x_69_save
+                %58:f32 = load %57
+                %x_87:f32 = let %58
+                %60:ptr<function, f32, read_write> = access %data, %x_71_save
+                %61:f32 = load %60
+                %x_88:f32 = let %61
+                %63:ptr<function, f32, read_write> = access %data, %x_69_save
+                store %63, %x_88
+                %64:ptr<function, f32, read_write> = access %data, %x_71_save
+                store %64, %x_87
                 exit_if  # if_6
               }
             }
-            continue %b12
+            continue  # -> $B12
           }
-          %b12 = block {  # continuing
-            %54:i32 = add %x_59, 1i
-            store %x_60, %54
-            %55:i32 = load %x_60
-            store %x_59_phi, %55
-            next_iteration %b11
+          $B12: {  # continuing
+            %65:i32 = add %x_59, 1i
+            store %x_60, %65
+            %66:i32 = load %x_60
+            store %x_59_phi, %66
+            next_iteration  # -> $B11
           }
         }
-        continue %b8
+        continue  # -> $B8
       }
-      %b8 = block {  # continuing
-        %56:i32 = add %x_52, 1i
-        store %x_53, %56
-        %57:i32 = load %x_53
-        store %x_52_phi, %57
-        next_iteration %b7
+      $B8: {  # continuing
+        %67:i32 = add %x_52, 1i
+        store %x_53, %67
+        %68:i32 = load %x_53
+        store %x_52_phi, %68
+        next_iteration  # -> $B7
       }
     }
-    %x_90:f32 = load_vector_element %gl_FragCoord, 0u
-    %59:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %x_92:f32 = load_vector_element %59, 0u
-    %61:f32 = mul %x_92, 0.5f
-    %62:bool = lt %x_90, %61
-    if %62 [t: %b19, f: %b20] {  # if_7
-      %b19 = block {  # true
-        %63:ptr<function, f32, read_write> = access %data, 0i
-        %x_99:f32 = load %63
-        %65:ptr<function, f32, read_write> = access %data, 5i
-        %x_102:f32 = load %65
-        %67:ptr<function, f32, read_write> = access %data, 9i
-        %x_105:f32 = load %67
-        %69:f32 = mul %x_99, 0.10000000149011611938f
-        %70:f32 = mul %x_102, 0.10000000149011611938f
-        %71:f32 = mul %x_105, 0.10000000149011611938f
-        %72:vec4<f32> = construct %69, %70, %71, 1.0f
-        store %x_GLF_color, %72
+    %69:f32 = load_vector_element %gl_FragCoord, 0u
+    %x_90:f32 = let %69
+    %71:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
+    %72:f32 = load_vector_element %71, 0u
+    %x_92:f32 = let %72
+    %74:f32 = mul %x_92, 0.5f
+    %75:bool = lt %x_90, %74
+    if %75 [t: $B19, f: $B20] {  # if_7
+      $B19: {  # true
+        %76:ptr<function, f32, read_write> = access %data, 0i
+        %77:f32 = load %76
+        %x_99:f32 = let %77
+        %79:ptr<function, f32, read_write> = access %data, 5i
+        %80:f32 = load %79
+        %x_102:f32 = let %80
+        %82:ptr<function, f32, read_write> = access %data, 9i
+        %83:f32 = load %82
+        %x_105:f32 = let %83
+        %85:f32 = mul %x_99, 0.10000000149011611938f
+        %86:f32 = mul %x_102, 0.10000000149011611938f
+        %87:f32 = mul %x_105, 0.10000000149011611938f
+        %88:vec4<f32> = construct %85, %86, %87, 1.0f
+        store %x_GLF_color, %88
         exit_if  # if_7
       }
-      %b20 = block {  # false
-        %73:ptr<function, f32, read_write> = access %data, 5i
-        %x_109:f32 = load %73
-        %75:ptr<function, f32, read_write> = access %data, 9i
-        %x_112:f32 = load %75
-        %77:ptr<function, f32, read_write> = access %data, 0i
-        %x_115:f32 = load %77
-        %79:f32 = mul %x_109, 0.10000000149011611938f
-        %80:f32 = mul %x_112, 0.10000000149011611938f
-        %81:f32 = mul %x_115, 0.10000000149011611938f
-        %82:vec4<f32> = construct %79, %80, %81, 1.0f
-        store %x_GLF_color, %82
+      $B20: {  # false
+        %89:ptr<function, f32, read_write> = access %data, 5i
+        %90:f32 = load %89
+        %x_109:f32 = let %90
+        %92:ptr<function, f32, read_write> = access %data, 9i
+        %93:f32 = load %92
+        %x_112:f32 = let %93
+        %95:ptr<function, f32, read_write> = access %data, 0i
+        %96:f32 = load %95
+        %x_115:f32 = let %96
+        %98:f32 = mul %x_109, 0.10000000149011611938f
+        %99:f32 = mul %x_112, 0.10000000149011611938f
+        %100:f32 = mul %x_115, 0.10000000149011611938f
+        %101:vec4<f32> = construct %98, %99, %100, 1.0f
+        store %x_GLF_color, %101
         exit_if  # if_7
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b21 {
-  %b21 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B21: {
     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
+    %104:void = call %main_1
+    %105:vec4<f32> = load %x_GLF_color
+    %106:main_out = construct %105
+    ret %106
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/1.spvasm.expected.ir.msl
index 68c775d..8a69eca 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/1.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf1 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf1 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -12,203 +12,209 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_6:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_9:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %data:ptr<function, array<f32, 10>, read_write> = var
     %x_41:ptr<function, i32, read_write> = var
     %x_53:ptr<function, i32, read_write> = var
     store %x_41, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %x_42:ptr<function, i32, read_write> = var
         %10:i32 = load %x_41
         %11:bool = lt %10, 10i
-        if %11 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %11 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
+      $B4: {  # continuing
         %12:i32 = load %x_41
         %13:ptr<function, f32, read_write> = access %data, %12
-        %14:i32 = load %x_41
-        %15:i32 = sub 10i, %14
-        %16:f32 = convert %15
-        %17:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
-        %18:f32 = load_vector_element %17, 1u
-        %19:f32 = mul %16, %18
-        store %13, %19
-        %20:i32 = load %x_41
-        %21:i32 = add %20, 1i
-        store %x_42, %21
-        %22:i32 = load %x_42
-        store %x_41, %22
-        next_iteration %b3
+        %14:ptr<function, f32, read_write> = let %13
+        %15:i32 = load %x_41
+        %16:i32 = sub 10i, %15
+        %17:f32 = convert %16
+        %18:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
+        %19:f32 = load_vector_element %18, 1u
+        %20:f32 = mul %17, %19
+        store %14, %20
+        %21:i32 = load %x_41
+        %22:i32 = add %21, 1i
+        store %x_42, %22
+        %23:i32 = load %x_42
+        store %x_41, %23
+        next_iteration  # -> $B3
       }
     }
     store %x_53, 0i
-    loop [b: %b7, c: %b8] {  # loop_2
-      %b7 = block {  # body
+    loop [b: $B7, c: $B8] {  # loop_2
+      $B7: {  # body
         %x_60:ptr<function, i32, read_write> = var
         %x_54:ptr<function, i32, read_write> = var
-        %25:i32 = load %x_53
-        %26:bool = lt %25, 9i
-        if %26 [t: %b9, f: %b10] {  # if_2
-          %b9 = block {  # true
+        %26:i32 = load %x_53
+        %27:bool = lt %26, 9i
+        if %27 [t: $B9, f: $B10] {  # if_2
+          $B9: {  # true
             exit_if  # if_2
           }
-          %b10 = block {  # false
+          $B10: {  # false
             exit_loop  # loop_2
           }
         }
         store %x_60, 0i
-        loop [b: %b11, c: %b12] {  # loop_3
-          %b11 = block {  # body
+        loop [b: $B11, c: $B12] {  # loop_3
+          $B11: {  # body
             %x_83:ptr<function, bool, read_write> = var
             %x_84:ptr<function, bool, read_write> = var
             %x_85:ptr<function, bool, read_write> = var
             %x_61:ptr<function, i32, read_write> = var
-            %31:i32 = load %x_60
-            %32:bool = lt %31, 10i
-            if %32 [t: %b13, f: %b14] {  # if_3
-              %b13 = block {  # true
+            %32:i32 = load %x_60
+            %33:bool = lt %32, 10i
+            if %33 [t: $B13, f: $B14] {  # if_3
+              $B13: {  # true
                 exit_if  # if_3
               }
-              %b14 = block {  # false
+              $B14: {  # false
                 exit_loop  # loop_3
               }
             }
-            %33:i32 = load %x_60
-            %34:i32 = load %x_53
-            %35:i32 = add %34, 1i
-            %36:bool = lt %33, %35
-            if %36 [t: %b15] {  # if_4
-              %b15 = block {  # true
-                continue %b12
+            %34:i32 = load %x_60
+            %35:i32 = load %x_53
+            %36:i32 = add %35, 1i
+            %37:bool = lt %34, %36
+            if %37 [t: $B15] {  # if_4
+              $B15: {  # true
+                continue  # -> $B12
               }
             }
-            %x_70_save:i32 = load %x_53
             %38:i32 = load %x_53
-            %39:ptr<function, f32, read_write> = access %data, %38
-            %x_71:f32 = load %39
-            %x_72_save:i32 = load %x_60
-            %42:i32 = load %x_60
-            %43:ptr<function, f32, read_write> = access %data, %42
-            %x_73:f32 = load %43
-            %45:f32 = load_vector_element %gl_FragCoord, 1u
-            %46:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-            %47:f32 = load_vector_element %46, 1u
-            %48:f32 = mul %47, 0.5f
-            %49:bool = lt %45, %48
-            if %49 [t: %b16, f: %b17] {  # if_5
-              %b16 = block {  # true
-                %50:bool = gt %x_71, %x_73
-                store %x_83, %50
-                %51:bool = load %x_83
-                store %x_85, %51
+            %x_70_save:i32 = let %38
+            %40:i32 = load %x_53
+            %41:ptr<function, f32, read_write> = access %data, %40
+            %42:f32 = load %41
+            %x_71:f32 = let %42
+            %44:i32 = load %x_60
+            %x_72_save:i32 = let %44
+            %46:i32 = load %x_60
+            %47:ptr<function, f32, read_write> = access %data, %46
+            %48:f32 = load %47
+            %x_73:f32 = let %48
+            %50:f32 = load_vector_element %gl_FragCoord, 1u
+            %51:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
+            %52:f32 = load_vector_element %51, 1u
+            %53:f32 = mul %52, 0.5f
+            %54:bool = lt %50, %53
+            if %54 [t: $B16, f: $B17] {  # if_5
+              $B16: {  # true
+                %55:bool = gt %x_71, %x_73
+                store %x_83, %55
+                %56:bool = load %x_83
+                store %x_85, %56
                 exit_if  # if_5
               }
-              %b17 = block {  # false
-                %52:bool = lt %x_71, %x_73
-                store %x_84, %52
-                %53:bool = load %x_84
-                store %x_85, %53
+              $B17: {  # false
+                %57:bool = lt %x_71, %x_73
+                store %x_84, %57
+                %58:bool = load %x_84
+                store %x_85, %58
                 exit_if  # if_5
               }
             }
-            %54:bool = load %x_85
-            if %54 [t: %b18] {  # if_6
-              %b18 = block {  # true
-                %55:ptr<function, f32, read_write> = access %data, %x_70_save
-                %x_88:f32 = load %55
-                %57:ptr<function, f32, read_write> = access %data, %x_70_save
-                %58:ptr<function, f32, read_write> = access %data, %x_72_save
-                %59:f32 = load %58
-                store %57, %59
-                %60:ptr<function, f32, read_write> = access %data, %x_72_save
-                store %60, %x_88
+            %59:bool = load %x_85
+            if %59 [t: $B18] {  # if_6
+              $B18: {  # true
+                %60:ptr<function, f32, read_write> = access %data, %x_70_save
+                %61:f32 = load %60
+                %x_88:f32 = let %61
+                %63:ptr<function, f32, read_write> = access %data, %x_70_save
+                %64:ptr<function, f32, read_write> = access %data, %x_72_save
+                %65:f32 = load %64
+                store %63, %65
+                %66:ptr<function, f32, read_write> = access %data, %x_72_save
+                store %66, %x_88
                 exit_if  # if_6
               }
             }
-            continue %b12
+            continue  # -> $B12
           }
-          %b12 = block {  # continuing
-            %61:i32 = load %x_60
-            %62:i32 = add %61, 1i
-            store %x_61, %62
-            %63:i32 = load %x_61
-            store %x_60, %63
-            next_iteration %b11
+          $B12: {  # continuing
+            %67:i32 = load %x_60
+            %68:i32 = add %67, 1i
+            store %x_61, %68
+            %69:i32 = load %x_61
+            store %x_60, %69
+            next_iteration  # -> $B11
           }
         }
-        continue %b8
+        continue  # -> $B8
       }
-      %b8 = block {  # continuing
-        %64:i32 = load %x_53
-        %65:i32 = add %64, 1i
-        store %x_54, %65
-        %66:i32 = load %x_54
-        store %x_53, %66
-        next_iteration %b7
+      $B8: {  # continuing
+        %70:i32 = load %x_53
+        %71:i32 = add %70, 1i
+        store %x_54, %71
+        %72:i32 = load %x_54
+        store %x_53, %72
+        next_iteration  # -> $B7
       }
     }
-    %67:f32 = load_vector_element %gl_FragCoord, 0u
-    %68:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %69:f32 = load_vector_element %68, 0u
-    %70:f32 = mul %69, 0.5f
-    %71:bool = lt %67, %70
-    if %71 [t: %b19, f: %b20] {  # if_7
-      %b19 = block {  # true
-        %72:ptr<function, f32, read_write> = access %data, 0i
-        %73:f32 = load %72
-        %74:f32 = mul %73, 0.10000000149011611938f
-        %75:ptr<function, f32, read_write> = access %data, 5i
-        %76:f32 = load %75
-        %77:f32 = mul %76, 0.10000000149011611938f
-        %78:ptr<function, f32, read_write> = access %data, 9i
+    %73:f32 = load_vector_element %gl_FragCoord, 0u
+    %74:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
+    %75:f32 = load_vector_element %74, 0u
+    %76:f32 = mul %75, 0.5f
+    %77:bool = lt %73, %76
+    if %77 [t: $B19, f: $B20] {  # if_7
+      $B19: {  # true
+        %78:ptr<function, f32, read_write> = access %data, 0i
         %79:f32 = load %78
         %80:f32 = mul %79, 0.10000000149011611938f
-        %81:vec4<f32> = construct %74, %77, %80, 1.0f
-        store %x_GLF_color, %81
+        %81:ptr<function, f32, read_write> = access %data, 5i
+        %82:f32 = load %81
+        %83:f32 = mul %82, 0.10000000149011611938f
+        %84:ptr<function, f32, read_write> = access %data, 9i
+        %85:f32 = load %84
+        %86:f32 = mul %85, 0.10000000149011611938f
+        %87:vec4<f32> = construct %80, %83, %86, 1.0f
+        store %x_GLF_color, %87
         exit_if  # if_7
       }
-      %b20 = block {  # false
-        %82:ptr<function, f32, read_write> = access %data, 5i
-        %83:f32 = load %82
-        %84:f32 = mul %83, 0.10000000149011611938f
-        %85:ptr<function, f32, read_write> = access %data, 9i
-        %86:f32 = load %85
-        %87:f32 = mul %86, 0.10000000149011611938f
-        %88:ptr<function, f32, read_write> = access %data, 0i
+      $B20: {  # false
+        %88:ptr<function, f32, read_write> = access %data, 5i
         %89:f32 = load %88
         %90:f32 = mul %89, 0.10000000149011611938f
-        %91:vec4<f32> = construct %84, %87, %90, 1.0f
-        store %x_GLF_color, %91
+        %91:ptr<function, f32, read_write> = access %data, 9i
+        %92:f32 = load %91
+        %93:f32 = mul %92, 0.10000000149011611938f
+        %94:ptr<function, f32, read_write> = access %data, 0i
+        %95:f32 = load %94
+        %96:f32 = mul %95, 0.10000000149011611938f
+        %97:vec4<f32> = construct %90, %93, %96, 1.0f
+        store %x_GLF_color, %97
         exit_if  # if_7
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b21 {
-  %b21 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B21: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %94:void = call %main_1
-    %95:vec4<f32> = load %x_GLF_color
-    %96:main_out = construct %95
-    ret %96
+    %100:void = call %main_1
+    %101:vec4<f32> = load %x_GLF_color
+    %102:main_out = construct %101
+    ret %102
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/1.wgsl.expected.ir.msl
index b32dd5d..5a407c9 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/1.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/1.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf1 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf1 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -12,194 +12,213 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_6:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_9:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %data:ptr<function, array<f32, 10>, read_write> = var
     %x_41_phi:ptr<function, i32, read_write> = var
     %x_53_phi:ptr<function, i32, read_write> = var
     store %x_41_phi, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %x_42:ptr<function, i32, read_write> = var
-        %x_41:i32 = load %x_41_phi
-        %11:bool = lt %x_41, 10i
-        if %11 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %10:i32 = load %x_41_phi
+        %x_41:i32 = let %10
+        %12:bool = lt %x_41, 10i
+        if %12 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %12:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
-        %x_49:f32 = load_vector_element %12, 1u
-        %14:ptr<function, f32, read_write> = access %data, %x_41
-        %15:i32 = sub 10i, %x_41
-        %16:f32 = convert %15
-        %17:f32 = mul %16, %x_49
-        store %14, %17
-        %18:i32 = add %x_41, 1i
-        store %x_42, %18
-        %19:i32 = load %x_42
-        store %x_41_phi, %19
-        next_iteration %b3
+      $B4: {  # continuing
+        %13:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
+        %14:f32 = load_vector_element %13, 1u
+        %x_49:f32 = let %14
+        %16:ptr<function, f32, read_write> = access %data, %x_41
+        %17:i32 = sub 10i, %x_41
+        %18:f32 = convert %17
+        %19:f32 = mul %18, %x_49
+        store %16, %19
+        %20:i32 = add %x_41, 1i
+        store %x_42, %20
+        %21:i32 = load %x_42
+        store %x_41_phi, %21
+        next_iteration  # -> $B3
       }
     }
     store %x_53_phi, 0i
-    loop [b: %b7, c: %b8] {  # loop_2
-      %b7 = block {  # body
+    loop [b: $B7, c: $B8] {  # loop_2
+      $B7: {  # body
         %x_54:ptr<function, i32, read_write> = var
         %x_60_phi:ptr<function, i32, read_write> = var
-        %x_53:i32 = load %x_53_phi
-        %23:bool = lt %x_53, 9i
-        if %23 [t: %b9, f: %b10] {  # if_2
-          %b9 = block {  # true
+        %24:i32 = load %x_53_phi
+        %x_53:i32 = let %24
+        %26:bool = lt %x_53, 9i
+        if %26 [t: $B9, f: $B10] {  # if_2
+          $B9: {  # true
             exit_if  # if_2
           }
-          %b10 = block {  # false
+          $B10: {  # false
             exit_loop  # loop_2
           }
         }
         store %x_60_phi, 0i
-        loop [b: %b11, c: %b12] {  # loop_3
-          %b11 = block {  # body
+        loop [b: $B11, c: $B12] {  # loop_3
+          $B11: {  # body
             %x_83:ptr<function, bool, read_write> = var
             %x_84:ptr<function, bool, read_write> = var
             %x_61:ptr<function, i32, read_write> = var
             %x_85_phi:ptr<function, bool, read_write> = var
-            %x_60:i32 = load %x_60_phi
-            %29:bool = lt %x_60, 10i
-            if %29 [t: %b13, f: %b14] {  # if_3
-              %b13 = block {  # true
+            %31:i32 = load %x_60_phi
+            %x_60:i32 = let %31
+            %33:bool = lt %x_60, 10i
+            if %33 [t: $B13, f: $B14] {  # if_3
+              $B13: {  # true
                 exit_if  # if_3
               }
-              %b14 = block {  # false
+              $B14: {  # false
                 exit_loop  # loop_3
               }
             }
-            %30:i32 = add %x_53, 1i
-            %31:bool = lt %x_60, %30
-            if %31 [t: %b15] {  # if_4
-              %b15 = block {  # true
-                continue %b12
+            %34:i32 = add %x_53, 1i
+            %35:bool = lt %x_60, %34
+            if %35 [t: $B15] {  # if_4
+              $B15: {  # true
+                continue  # -> $B12
               }
             }
             %x_70_save:i32 = let %x_53
-            %33:ptr<function, f32, read_write> = access %data, %x_70_save
-            %x_71:f32 = load %33
+            %37:ptr<function, f32, read_write> = access %data, %x_70_save
+            %38:f32 = load %37
+            %x_71:f32 = let %38
             %x_72_save:i32 = let %x_60
-            %36:ptr<function, f32, read_write> = access %data, %x_72_save
-            %x_73:f32 = load %36
-            %x_75:f32 = load_vector_element %gl_FragCoord, 1u
-            %39:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-            %x_77:f32 = load_vector_element %39, 1u
-            %41:f32 = mul %x_77, 0.5f
-            %42:bool = lt %x_75, %41
-            if %42 [t: %b16, f: %b17] {  # if_5
-              %b16 = block {  # true
-                %43:bool = gt %x_71, %x_73
-                store %x_83, %43
-                %44:bool = load %x_83
-                store %x_85_phi, %44
+            %41:ptr<function, f32, read_write> = access %data, %x_72_save
+            %42:f32 = load %41
+            %x_73:f32 = let %42
+            %44:f32 = load_vector_element %gl_FragCoord, 1u
+            %x_75:f32 = let %44
+            %46:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
+            %47:f32 = load_vector_element %46, 1u
+            %x_77:f32 = let %47
+            %49:f32 = mul %x_77, 0.5f
+            %50:bool = lt %x_75, %49
+            if %50 [t: $B16, f: $B17] {  # if_5
+              $B16: {  # true
+                %51:bool = gt %x_71, %x_73
+                store %x_83, %51
+                %52:bool = load %x_83
+                store %x_85_phi, %52
                 exit_if  # if_5
               }
-              %b17 = block {  # false
-                %45:bool = lt %x_71, %x_73
-                store %x_84, %45
-                %46:bool = load %x_84
-                store %x_85_phi, %46
+              $B17: {  # false
+                %53:bool = lt %x_71, %x_73
+                store %x_84, %53
+                %54:bool = load %x_84
+                store %x_85_phi, %54
                 exit_if  # if_5
               }
             }
-            %x_85:bool = load %x_85_phi
-            if %x_85 [t: %b18] {  # if_6
-              %b18 = block {  # true
-                %48:ptr<function, f32, read_write> = access %data, %x_70_save
-                %x_88:f32 = load %48
-                %50:ptr<function, f32, read_write> = access %data, %x_72_save
-                %x_89:f32 = load %50
-                %52:ptr<function, f32, read_write> = access %data, %x_70_save
-                store %52, %x_89
-                %53:ptr<function, f32, read_write> = access %data, %x_72_save
-                store %53, %x_88
+            %55:bool = load %x_85_phi
+            %x_85:bool = let %55
+            if %x_85 [t: $B18] {  # if_6
+              $B18: {  # true
+                %57:ptr<function, f32, read_write> = access %data, %x_70_save
+                %58:f32 = load %57
+                %x_88:f32 = let %58
+                %60:ptr<function, f32, read_write> = access %data, %x_72_save
+                %61:f32 = load %60
+                %x_89:f32 = let %61
+                %63:ptr<function, f32, read_write> = access %data, %x_70_save
+                store %63, %x_89
+                %64:ptr<function, f32, read_write> = access %data, %x_72_save
+                store %64, %x_88
                 exit_if  # if_6
               }
             }
-            continue %b12
+            continue  # -> $B12
           }
-          %b12 = block {  # continuing
-            %54:i32 = add %x_60, 1i
-            store %x_61, %54
-            %55:i32 = load %x_61
-            store %x_60_phi, %55
-            next_iteration %b11
+          $B12: {  # continuing
+            %65:i32 = add %x_60, 1i
+            store %x_61, %65
+            %66:i32 = load %x_61
+            store %x_60_phi, %66
+            next_iteration  # -> $B11
           }
         }
-        continue %b8
+        continue  # -> $B8
       }
-      %b8 = block {  # continuing
-        %56:i32 = add %x_53, 1i
-        store %x_54, %56
-        %57:i32 = load %x_54
-        store %x_53_phi, %57
-        next_iteration %b7
+      $B8: {  # continuing
+        %67:i32 = add %x_53, 1i
+        store %x_54, %67
+        %68:i32 = load %x_54
+        store %x_53_phi, %68
+        next_iteration  # -> $B7
       }
     }
-    %x_91:f32 = load_vector_element %gl_FragCoord, 0u
-    %59:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %x_93:f32 = load_vector_element %59, 0u
-    %61:f32 = mul %x_93, 0.5f
-    %62:bool = lt %x_91, %61
-    if %62 [t: %b19, f: %b20] {  # if_7
-      %b19 = block {  # true
-        %63:ptr<function, f32, read_write> = access %data, 0i
-        %x_100:f32 = load %63
-        %65:ptr<function, f32, read_write> = access %data, 5i
-        %x_103:f32 = load %65
-        %67:ptr<function, f32, read_write> = access %data, 9i
-        %x_106:f32 = load %67
-        %69:f32 = mul %x_100, 0.10000000149011611938f
-        %70:f32 = mul %x_103, 0.10000000149011611938f
-        %71:f32 = mul %x_106, 0.10000000149011611938f
-        %72:vec4<f32> = construct %69, %70, %71, 1.0f
-        store %x_GLF_color, %72
+    %69:f32 = load_vector_element %gl_FragCoord, 0u
+    %x_91:f32 = let %69
+    %71:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
+    %72:f32 = load_vector_element %71, 0u
+    %x_93:f32 = let %72
+    %74:f32 = mul %x_93, 0.5f
+    %75:bool = lt %x_91, %74
+    if %75 [t: $B19, f: $B20] {  # if_7
+      $B19: {  # true
+        %76:ptr<function, f32, read_write> = access %data, 0i
+        %77:f32 = load %76
+        %x_100:f32 = let %77
+        %79:ptr<function, f32, read_write> = access %data, 5i
+        %80:f32 = load %79
+        %x_103:f32 = let %80
+        %82:ptr<function, f32, read_write> = access %data, 9i
+        %83:f32 = load %82
+        %x_106:f32 = let %83
+        %85:f32 = mul %x_100, 0.10000000149011611938f
+        %86:f32 = mul %x_103, 0.10000000149011611938f
+        %87:f32 = mul %x_106, 0.10000000149011611938f
+        %88:vec4<f32> = construct %85, %86, %87, 1.0f
+        store %x_GLF_color, %88
         exit_if  # if_7
       }
-      %b20 = block {  # false
-        %73:ptr<function, f32, read_write> = access %data, 5i
-        %x_110:f32 = load %73
-        %75:ptr<function, f32, read_write> = access %data, 9i
-        %x_113:f32 = load %75
-        %77:ptr<function, f32, read_write> = access %data, 0i
-        %x_116:f32 = load %77
-        %79:f32 = mul %x_110, 0.10000000149011611938f
-        %80:f32 = mul %x_113, 0.10000000149011611938f
-        %81:f32 = mul %x_116, 0.10000000149011611938f
-        %82:vec4<f32> = construct %79, %80, %81, 1.0f
-        store %x_GLF_color, %82
+      $B20: {  # false
+        %89:ptr<function, f32, read_write> = access %data, 5i
+        %90:f32 = load %89
+        %x_110:f32 = let %90
+        %92:ptr<function, f32, read_write> = access %data, 9i
+        %93:f32 = load %92
+        %x_113:f32 = let %93
+        %95:ptr<function, f32, read_write> = access %data, 0i
+        %96:f32 = load %95
+        %x_116:f32 = let %96
+        %98:f32 = mul %x_110, 0.10000000149011611938f
+        %99:f32 = mul %x_113, 0.10000000149011611938f
+        %100:f32 = mul %x_116, 0.10000000149011611938f
+        %101:vec4<f32> = construct %98, %99, %100, 1.0f
+        store %x_GLF_color, %101
         exit_if  # if_7
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b21 {
-  %b21 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B21: {
     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
+    %104:void = call %main_1
+    %105:vec4<f32> = load %x_GLF_color
+    %106:main_out = construct %105
+    ret %106
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block3/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block3/1.spvasm.expected.ir.msl
index fe30786..ce13e24 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block3/1.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block3/1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -12,167 +12,175 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %data:ptr<private, array<i32, 10>, read_write> = var
   %temp:ptr<private, array<i32, 10>, read_write> = var
   %x_28:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_32:ptr<uniform, buf1, read> = var @binding_point(0, 1)
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%merge_i1_i1_i1_ = func(%f:ptr<function, i32, read_write>, %mid:ptr<function, i32, read_write>, %to:ptr<function, i32, read_write>):void -> %b2 {
-  %b2 = block {
+%merge_i1_i1_i1_ = func(%f:ptr<function, i32, read_write>, %mid:ptr<function, i32, read_write>, %to:ptr<function, i32, read_write>):void {
+  $B2: {
     %k:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %j:ptr<function, i32, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
-    %15:i32 = load %f
-    store %k, %15
     %16:i32 = load %f
-    store %i, %16
-    %17:i32 = load %mid
-    %18:i32 = add %17, 1i
-    store %j, %18
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %19:i32 = load %i
-        %20:i32 = load %mid
-        %21:bool = lte %19, %20
-        %22:i32 = load %j
-        %23:i32 = load %to
-        %24:bool = lte %22, %23
-        %25:bool = and %21, %24
-        if %25 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    store %k, %16
+    %17:i32 = load %f
+    store %i, %17
+    %18:i32 = load %mid
+    %19:i32 = add %18, 1i
+    store %j, %19
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %20:i32 = load %i
+        %21:i32 = load %mid
+        %22:bool = lte %20, %21
+        %23:i32 = load %j
+        %24:i32 = load %to
+        %25:bool = lte %23, %24
+        %26:bool = and %22, %25
+        if %26 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %26:i32 = load %i
-        %27:ptr<private, i32, read_write> = access %data, %26
-        %28:i32 = load %27
-        %29:i32 = load %j
-        %30:ptr<private, i32, read_write> = access %data, %29
-        %31:i32 = load %30
-        %32:bool = lt %28, %31
-        if %32 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
-            %x_282:i32 = load %k
+        %27:i32 = load %i
+        %28:ptr<private, i32, read_write> = access %data, %27
+        %29:i32 = load %28
+        %30:i32 = load %j
+        %31:ptr<private, i32, read_write> = access %data, %30
+        %32:i32 = load %31
+        %33:bool = lt %29, %32
+        if %33 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
             %34:i32 = load %k
-            %35:i32 = add %34, 1i
-            store %k, %35
-            %x_284:i32 = load %i
-            %37:i32 = load %i
-            %38:i32 = add %37, 1i
-            store %i, %38
-            %39:ptr<private, i32, read_write> = access %temp, %x_282
-            %40:ptr<private, i32, read_write> = access %data, %x_284
-            %41:i32 = load %40
-            store %39, %41
+            %x_282:i32 = let %34
+            %36:i32 = load %k
+            %37:i32 = add %36, 1i
+            store %k, %37
+            %38:i32 = load %i
+            %x_284:i32 = let %38
+            %40:i32 = load %i
+            %41:i32 = add %40, 1i
+            store %i, %41
+            %42:ptr<private, i32, read_write> = access %temp, %x_282
+            %43:ptr<private, i32, read_write> = access %data, %x_284
+            %44:i32 = load %43
+            store %42, %44
             exit_if  # if_2
           }
-          %b8 = block {  # false
-            %x_289:i32 = load %k
-            %43:i32 = load %k
-            %44:i32 = add %43, 1i
-            store %k, %44
-            %x_291:i32 = load %j
-            %46:i32 = load %j
-            %47:i32 = add %46, 1i
-            store %j, %47
-            %48:ptr<private, i32, read_write> = access %temp, %x_289
-            %49:ptr<private, i32, read_write> = access %data, %x_291
-            %50:i32 = load %49
-            store %48, %50
+          $B8: {  # false
+            %45:i32 = load %k
+            %x_289:i32 = let %45
+            %47:i32 = load %k
+            %48:i32 = add %47, 1i
+            store %k, %48
+            %49:i32 = load %j
+            %x_291:i32 = let %49
+            %51:i32 = load %j
+            %52:i32 = add %51, 1i
+            store %j, %52
+            %53:ptr<private, i32, read_write> = access %temp, %x_289
+            %54:ptr<private, i32, read_write> = access %data, %x_291
+            %55:i32 = load %54
+            store %53, %55
             exit_if  # if_2
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
-    loop [b: %b9, c: %b10] {  # loop_2
-      %b9 = block {  # body
-        if true [t: %b11, f: %b12] {  # if_3
-          %b11 = block {  # true
+    loop [b: $B9, c: $B10] {  # loop_2
+      $B9: {  # body
+        if true [t: $B11, f: $B12] {  # if_3
+          $B11: {  # true
             exit_if  # if_3
           }
-          %b12 = block {  # false
-            continue %b10
+          $B12: {  # false
+            continue  # -> $B10
           }
         }
-        %51:i32 = load %i
-        %52:bool = lt %51, 10i
-        %53:i32 = load %i
-        %54:i32 = load %mid
-        %55:bool = lte %53, %54
-        %56:bool = and %52, %55
-        if %56 [t: %b13, f: %b14] {  # if_4
-          %b13 = block {  # true
+        %56:i32 = load %i
+        %57:bool = lt %56, 10i
+        %58:i32 = load %i
+        %59:i32 = load %mid
+        %60:bool = lte %58, %59
+        %61:bool = and %57, %60
+        if %61 [t: $B13, f: $B14] {  # if_4
+          $B13: {  # true
             exit_if  # if_4
           }
-          %b14 = block {  # false
+          $B14: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_309:i32 = load %k
-        %58:i32 = load %k
-        %59:i32 = add %58, 1i
-        store %k, %59
-        %x_311:i32 = load %i
-        %61:i32 = load %i
-        %62:i32 = add %61, 1i
-        store %i, %62
-        %63:ptr<private, i32, read_write> = access %temp, %x_309
-        %64:ptr<private, i32, read_write> = access %data, %x_311
-        %65:i32 = load %64
-        store %63, %65
-        continue %b10
+        %62:i32 = load %k
+        %x_309:i32 = let %62
+        %64:i32 = load %k
+        %65:i32 = add %64, 1i
+        store %k, %65
+        %66:i32 = load %i
+        %x_311:i32 = let %66
+        %68:i32 = load %i
+        %69:i32 = add %68, 1i
+        store %i, %69
+        %70:ptr<private, i32, read_write> = access %temp, %x_309
+        %71:ptr<private, i32, read_write> = access %data, %x_311
+        %72:i32 = load %71
+        store %70, %72
+        continue  # -> $B10
       }
-      %b10 = block {  # continuing
-        next_iteration %b9
+      $B10: {  # continuing
+        next_iteration  # -> $B9
       }
     }
-    %66:i32 = load %f
-    store %i_1, %66
-    loop [b: %b15, c: %b16] {  # loop_3
-      %b15 = block {  # body
-        %67:i32 = load %i_1
-        %68:i32 = load %to
-        %69:bool = lte %67, %68
-        if %69 [t: %b17, f: %b18] {  # if_5
-          %b17 = block {  # true
+    %73:i32 = load %f
+    store %i_1, %73
+    loop [b: $B15, c: $B16] {  # loop_3
+      $B15: {  # body
+        %74:i32 = load %i_1
+        %75:i32 = load %to
+        %76:bool = lte %74, %75
+        if %76 [t: $B17, f: $B18] {  # if_5
+          $B17: {  # true
             exit_if  # if_5
           }
-          %b18 = block {  # false
+          $B18: {  # false
             exit_loop  # loop_3
           }
         }
-        %x_325:i32 = load %i_1
-        %71:ptr<private, i32, read_write> = access %data, %x_325
-        %72:i32 = load %i_1
-        %73:ptr<private, i32, read_write> = access %temp, %72
-        %74:i32 = load %73
-        store %71, %74
-        continue %b16
+        %77:i32 = load %i_1
+        %x_325:i32 = let %77
+        %79:ptr<private, i32, read_write> = access %data, %x_325
+        %80:i32 = load %i_1
+        %81:ptr<private, i32, read_write> = access %temp, %80
+        %82:i32 = load %81
+        store %79, %82
+        continue  # -> $B16
       }
-      %b16 = block {  # continuing
-        %75:i32 = load %i_1
-        %76:i32 = add %75, 1i
-        store %i_1, %76
-        next_iteration %b15
+      $B16: {  # continuing
+        %83:i32 = load %i_1
+        %84:i32 = add %83, 1i
+        store %i_1, %84
+        next_iteration  # -> $B15
       }
     }
     ret
   }
 }
-%mergeSort_ = func():void -> %b19 {
-  %b19 = block {
+%mergeSort_ = func():void {
+  $B19: {
     %low:ptr<function, i32, read_write> = var
     %high:ptr<function, i32, read_write> = var
     %m:ptr<function, i32, read_write> = var
@@ -186,319 +194,332 @@
     store %low, 0i
     store %high, 9i
     store %m, 1i
-    loop [b: %b20, c: %b21] {  # loop_4
-      %b20 = block {  # body
-        %88:i32 = load %m
-        %89:i32 = load %high
-        %90:bool = lte %88, %89
-        if %90 [t: %b22, f: %b23] {  # if_6
-          %b22 = block {  # true
+    loop [b: $B20, c: $B21] {  # loop_4
+      $B20: {  # body
+        %96:i32 = load %m
+        %97:i32 = load %high
+        %98:bool = lte %96, %97
+        if %98 [t: $B22, f: $B23] {  # if_6
+          $B22: {  # true
             exit_if  # if_6
           }
-          %b23 = block {  # false
+          $B23: {  # false
             exit_loop  # loop_4
           }
         }
-        %91:i32 = load %low
-        store %i_2, %91
-        loop [b: %b24, c: %b25] {  # loop_5
-          %b24 = block {  # body
-            %92:i32 = load %i_2
-            %93:i32 = load %high
-            %94:bool = lt %92, %93
-            if %94 [t: %b26, f: %b27] {  # if_7
-              %b26 = block {  # true
+        %99:i32 = load %low
+        store %i_2, %99
+        loop [b: $B24, c: $B25] {  # loop_5
+          $B24: {  # body
+            %100:i32 = load %i_2
+            %101:i32 = load %high
+            %102:bool = lt %100, %101
+            if %102 [t: $B26, f: $B27] {  # if_7
+              $B26: {  # true
                 exit_if  # if_7
               }
-              %b27 = block {  # false
+              $B27: {  # false
                 exit_loop  # loop_5
               }
             }
-            %95:i32 = load %i_2
-            store %f_1, %95
-            %96:i32 = load %i_2
-            %97:i32 = load %m
-            %98:i32 = add %96, %97
-            %99:i32 = sub %98, 1i
-            store %mid_1, %99
-            %100:i32 = load %i_2
-            %101:i32 = load %m
-            %102:i32 = mul 2i, %101
-            %103:i32 = add %100, %102
-            %104:i32 = sub %103, 1i
-            %105:i32 = load %high
-            %106:i32 = min %104, %105
-            store %to_1, %106
-            %107:i32 = load %f_1
-            store %param, %107
-            %108:i32 = load %mid_1
-            store %param_1, %108
-            %109:i32 = load %to_1
-            store %param_2, %109
-            %110:void = call %merge_i1_i1_i1_, %param, %param_1, %param_2
-            continue %b25
+            %103:i32 = load %i_2
+            store %f_1, %103
+            %104:i32 = load %i_2
+            %105:i32 = load %m
+            %106:i32 = add %104, %105
+            %107:i32 = sub %106, 1i
+            store %mid_1, %107
+            %108:i32 = load %i_2
+            %109:i32 = load %m
+            %110:i32 = mul 2i, %109
+            %111:i32 = add %108, %110
+            %112:i32 = sub %111, 1i
+            %113:i32 = load %high
+            %114:i32 = min %112, %113
+            store %to_1, %114
+            %115:i32 = load %f_1
+            store %param, %115
+            %116:i32 = load %mid_1
+            store %param_1, %116
+            %117:i32 = load %to_1
+            store %param_2, %117
+            %118:void = call %merge_i1_i1_i1_, %param, %param_1, %param_2
+            continue  # -> $B25
           }
-          %b25 = block {  # continuing
-            %111:i32 = load %i_2
-            %112:i32 = load %m
-            %113:i32 = mul 2i, %112
-            %114:i32 = add %111, %113
-            store %i_2, %114
-            next_iteration %b24
+          $B25: {  # continuing
+            %119:i32 = load %i_2
+            %120:i32 = load %m
+            %121:i32 = mul 2i, %120
+            %122:i32 = add %119, %121
+            store %i_2, %122
+            next_iteration  # -> $B24
           }
         }
-        continue %b21
+        continue  # -> $B21
       }
-      %b21 = block {  # continuing
-        %115:i32 = load %m
-        %116:i32 = mul 2i, %115
-        store %m, %116
-        next_iteration %b20
+      $B21: {  # continuing
+        %123:i32 = load %m
+        %124:i32 = mul 2i, %123
+        store %m, %124
+        next_iteration  # -> $B20
       }
     }
     ret
   }
 }
-%main_1 = func():void -> %b28 {
-  %b28 = block {
+%main_1 = func():void {
+  $B28: {
     %i_3:ptr<function, i32, read_write> = var
     %j_1:ptr<function, i32, read_write> = var
     %grey:ptr<function, f32, read_write> = var
-    %121:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
-    %122:f32 = load_vector_element %121, 0u
-    %123:i32 = convert %122
-    store %i_3, %123
-    loop [b: %b29, c: %b30] {  # loop_6
-      %b29 = block {  # body
-        %x_95:i32 = load %i_3
-        switch %x_95 [c: (9i, %b31), c: (8i, %b32), c: (7i, %b33), c: (6i, %b34), c: (5i, %b35), c: (4i, %b36), c: (3i, %b37), c: (2i, %b38), c: (1i, %b39), c: (0i, %b40), c: (default, %b41)] {  # switch_1
-          %b31 = block {  # case
-            %x_125:i32 = load %i_3
-            %126:ptr<private, i32, read_write> = access %data, %x_125
-            store %126, -5i
+    %129:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
+    %130:f32 = load_vector_element %129, 0u
+    %131:i32 = call %tint_f32_to_i32, %130
+    store %i_3, %131
+    loop [b: $B29, c: $B30] {  # loop_6
+      $B29: {  # body
+        %133:i32 = load %i_3
+        %x_95:i32 = let %133
+        switch %x_95 [c: (9i, $B31), c: (8i, $B32), c: (7i, $B33), c: (6i, $B34), c: (5i, $B35), c: (4i, $B36), c: (3i, $B37), c: (2i, $B38), c: (1i, $B39), c: (0i, $B40), c: (default, $B41)] {  # switch_1
+          $B31: {  # case
+            %135:i32 = load %i_3
+            %x_125:i32 = let %135
+            %137:ptr<private, i32, read_write> = access %data, %x_125
+            store %137, -5i
             exit_switch  # switch_1
           }
-          %b32 = block {  # case
-            %x_123:i32 = load %i_3
-            %128:ptr<private, i32, read_write> = access %data, %x_123
-            store %128, -4i
+          $B32: {  # case
+            %138:i32 = load %i_3
+            %x_123:i32 = let %138
+            %140:ptr<private, i32, read_write> = access %data, %x_123
+            store %140, -4i
             exit_switch  # switch_1
           }
-          %b33 = block {  # case
-            %x_121:i32 = load %i_3
-            %130:ptr<private, i32, read_write> = access %data, %x_121
-            store %130, -3i
+          $B33: {  # case
+            %141:i32 = load %i_3
+            %x_121:i32 = let %141
+            %143:ptr<private, i32, read_write> = access %data, %x_121
+            store %143, -3i
             exit_switch  # switch_1
           }
-          %b34 = block {  # case
-            %x_119:i32 = load %i_3
-            %132:ptr<private, i32, read_write> = access %data, %x_119
-            store %132, -2i
+          $B34: {  # case
+            %144:i32 = load %i_3
+            %x_119:i32 = let %144
+            %146:ptr<private, i32, read_write> = access %data, %x_119
+            store %146, -2i
             exit_switch  # switch_1
           }
-          %b35 = block {  # case
-            %x_117:i32 = load %i_3
-            %134:ptr<private, i32, read_write> = access %data, %x_117
-            store %134, -1i
+          $B35: {  # case
+            %147:i32 = load %i_3
+            %x_117:i32 = let %147
+            %149:ptr<private, i32, read_write> = access %data, %x_117
+            store %149, -1i
             exit_switch  # switch_1
           }
-          %b36 = block {  # case
-            %x_115:i32 = load %i_3
-            %136:ptr<private, i32, read_write> = access %data, %x_115
-            store %136, 0i
+          $B36: {  # case
+            %150:i32 = load %i_3
+            %x_115:i32 = let %150
+            %152:ptr<private, i32, read_write> = access %data, %x_115
+            store %152, 0i
             exit_switch  # switch_1
           }
-          %b37 = block {  # case
-            %x_113:i32 = load %i_3
-            %138:ptr<private, i32, read_write> = access %data, %x_113
-            store %138, 1i
+          $B37: {  # case
+            %153:i32 = load %i_3
+            %x_113:i32 = let %153
+            %155:ptr<private, i32, read_write> = access %data, %x_113
+            store %155, 1i
             exit_switch  # switch_1
           }
-          %b38 = block {  # case
-            %x_111:i32 = load %i_3
-            %140:ptr<private, i32, read_write> = access %data, %x_111
-            store %140, 2i
+          $B38: {  # case
+            %156:i32 = load %i_3
+            %x_111:i32 = let %156
+            %158:ptr<private, i32, read_write> = access %data, %x_111
+            store %158, 2i
             exit_switch  # switch_1
           }
-          %b39 = block {  # case
-            %x_109:i32 = load %i_3
-            %142:ptr<private, i32, read_write> = access %data, %x_109
-            store %142, 3i
+          $B39: {  # case
+            %159:i32 = load %i_3
+            %x_109:i32 = let %159
+            %161:ptr<private, i32, read_write> = access %data, %x_109
+            store %161, 3i
             exit_switch  # switch_1
           }
-          %b40 = block {  # case
-            %x_107:i32 = load %i_3
-            %144:ptr<private, i32, read_write> = access %data, %x_107
-            store %144, 4i
+          $B40: {  # case
+            %162:i32 = load %i_3
+            %x_107:i32 = let %162
+            %164:ptr<private, i32, read_write> = access %data, %x_107
+            store %164, 4i
             exit_switch  # switch_1
           }
-          %b41 = block {  # case
+          $B41: {  # case
             exit_switch  # switch_1
           }
         }
-        %145:i32 = load %i_3
-        %146:i32 = add %145, 1i
-        store %i_3, %146
-        continue %b30
+        %165:i32 = load %i_3
+        %166:i32 = add %165, 1i
+        store %i_3, %166
+        continue  # -> $B30
       }
-      %b30 = block {  # continuing
-        %x_129:i32 = load %i_3
-        %148:bool = lt %x_129, 10i
-        %149:bool = eq %148, false
-        break_if %149 %b29
+      $B30: {  # continuing
+        %167:i32 = load %i_3
+        %x_129:i32 = let %167
+        %169:bool = lt %x_129, 10i
+        %170:bool = eq %169, false
+        break_if %170  # -> [t: exit_loop loop_6, f: $B29]
       }
     }
     store %j_1, 0i
-    loop [b: %b42, c: %b43] {  # loop_7
-      %b42 = block {  # body
-        %150:i32 = load %j_1
-        %151:bool = lt %150, 10i
-        if %151 [t: %b44, f: %b45] {  # if_8
-          %b44 = block {  # true
+    loop [b: $B42, c: $B43] {  # loop_7
+      $B42: {  # body
+        %171:i32 = load %j_1
+        %172:bool = lt %171, 10i
+        if %172 [t: $B44, f: $B45] {  # if_8
+          $B44: {  # true
             exit_if  # if_8
           }
-          %b45 = block {  # false
+          $B45: {  # false
             exit_loop  # loop_7
           }
         }
-        %x_138:i32 = load %j_1
-        %153:ptr<private, i32, read_write> = access %temp, %x_138
-        %154:i32 = load %j_1
-        %155:ptr<private, i32, read_write> = access %data, %154
-        %156:i32 = load %155
-        store %153, %156
-        continue %b43
+        %173:i32 = load %j_1
+        %x_138:i32 = let %173
+        %175:ptr<private, i32, read_write> = access %temp, %x_138
+        %176:i32 = load %j_1
+        %177:ptr<private, i32, read_write> = access %data, %176
+        %178:i32 = load %177
+        store %175, %178
+        continue  # -> $B43
       }
-      %b43 = block {  # continuing
-        %157:i32 = load %j_1
-        %158:i32 = add %157, 1i
-        store %j_1, %158
-        next_iteration %b42
+      $B43: {  # continuing
+        %179:i32 = load %j_1
+        %180:i32 = add %179, 1i
+        store %j_1, %180
+        next_iteration  # -> $B42
       }
     }
-    %159:void = call %mergeSort_
-    %160:f32 = load_vector_element %gl_FragCoord, 1u
-    %161:i32 = convert %160
-    %162:bool = lt %161, 30i
-    if %162 [t: %b46, f: %b47] {  # if_9
-      %b46 = block {  # true
-        %163:ptr<private, i32, read_write> = access %data, 0i
-        %164:i32 = load %163
-        %165:f32 = convert %164
-        %166:f32 = div %165, 10.0f
-        %167:f32 = add 0.5f, %166
-        store %grey, %167
+    %181:void = call %mergeSort_
+    %182:f32 = load_vector_element %gl_FragCoord, 1u
+    %183:i32 = call %tint_f32_to_i32, %182
+    %184:bool = lt %183, 30i
+    if %184 [t: $B46, f: $B47] {  # if_9
+      $B46: {  # true
+        %185:ptr<private, i32, read_write> = access %data, 0i
+        %186:i32 = load %185
+        %187:f32 = convert %186
+        %188:f32 = div %187, 10.0f
+        %189:f32 = add 0.5f, %188
+        store %grey, %189
         exit_if  # if_9
       }
-      %b47 = block {  # false
-        %168:f32 = load_vector_element %gl_FragCoord, 1u
-        %169:i32 = convert %168
-        %170:bool = lt %169, 60i
-        if %170 [t: %b48, f: %b49] {  # if_10
-          %b48 = block {  # true
-            %171:ptr<private, i32, read_write> = access %data, 1i
-            %172:i32 = load %171
-            %173:f32 = convert %172
-            %174:f32 = div %173, 10.0f
-            %175:f32 = add 0.5f, %174
-            store %grey, %175
+      $B47: {  # false
+        %190:f32 = load_vector_element %gl_FragCoord, 1u
+        %191:i32 = call %tint_f32_to_i32, %190
+        %192:bool = lt %191, 60i
+        if %192 [t: $B48, f: $B49] {  # if_10
+          $B48: {  # true
+            %193:ptr<private, i32, read_write> = access %data, 1i
+            %194:i32 = load %193
+            %195:f32 = convert %194
+            %196:f32 = div %195, 10.0f
+            %197:f32 = add 0.5f, %196
+            store %grey, %197
             exit_if  # if_10
           }
-          %b49 = block {  # false
-            %176:f32 = load_vector_element %gl_FragCoord, 1u
-            %177:i32 = convert %176
-            %178:bool = lt %177, 90i
-            if %178 [t: %b50, f: %b51] {  # if_11
-              %b50 = block {  # true
-                %179:ptr<private, i32, read_write> = access %data, 2i
-                %180:i32 = load %179
-                %181:f32 = convert %180
-                %182:f32 = div %181, 10.0f
-                %183:f32 = add 0.5f, %182
-                store %grey, %183
+          $B49: {  # false
+            %198:f32 = load_vector_element %gl_FragCoord, 1u
+            %199:i32 = call %tint_f32_to_i32, %198
+            %200:bool = lt %199, 90i
+            if %200 [t: $B50, f: $B51] {  # if_11
+              $B50: {  # true
+                %201:ptr<private, i32, read_write> = access %data, 2i
+                %202:i32 = load %201
+                %203:f32 = convert %202
+                %204:f32 = div %203, 10.0f
+                %205:f32 = add 0.5f, %204
+                store %grey, %205
                 exit_if  # if_11
               }
-              %b51 = block {  # false
-                %184:f32 = load_vector_element %gl_FragCoord, 1u
-                %185:i32 = convert %184
-                %186:bool = lt %185, 120i
-                if %186 [t: %b52, f: %b53] {  # if_12
-                  %b52 = block {  # true
-                    %187:ptr<private, i32, read_write> = access %data, 3i
-                    %188:i32 = load %187
-                    %189:f32 = convert %188
-                    %190:f32 = div %189, 10.0f
-                    %191:f32 = add 0.5f, %190
-                    store %grey, %191
+              $B51: {  # false
+                %206:f32 = load_vector_element %gl_FragCoord, 1u
+                %207:i32 = call %tint_f32_to_i32, %206
+                %208:bool = lt %207, 120i
+                if %208 [t: $B52, f: $B53] {  # if_12
+                  $B52: {  # true
+                    %209:ptr<private, i32, read_write> = access %data, 3i
+                    %210:i32 = load %209
+                    %211:f32 = convert %210
+                    %212:f32 = div %211, 10.0f
+                    %213:f32 = add 0.5f, %212
+                    store %grey, %213
                     exit_if  # if_12
                   }
-                  %b53 = block {  # false
-                    %192:f32 = load_vector_element %gl_FragCoord, 1u
-                    %193:i32 = convert %192
-                    %194:bool = lt %193, 150i
-                    if %194 [t: %b54, f: %b55] {  # if_13
-                      %b54 = block {  # true
-                        discard
+                  $B53: {  # false
+                    %214:f32 = load_vector_element %gl_FragCoord, 1u
+                    %215:i32 = call %tint_f32_to_i32, %214
+                    %216:bool = lt %215, 150i
+                    if %216 [t: $B54, f: $B55] {  # if_13
+                      $B54: {  # true
+                        store %continue_execution, false
                         exit_if  # if_13
                       }
-                      %b55 = block {  # false
-                        %195:f32 = load_vector_element %gl_FragCoord, 1u
-                        %196:i32 = convert %195
-                        %197:bool = lt %196, 180i
-                        if %197 [t: %b56, f: %b57] {  # if_14
-                          %b56 = block {  # true
-                            %198:ptr<private, i32, read_write> = access %data, 5i
-                            %199:i32 = load %198
-                            %200:f32 = convert %199
-                            %201:f32 = div %200, 10.0f
-                            %202:f32 = add 0.5f, %201
-                            store %grey, %202
+                      $B55: {  # false
+                        %217:f32 = load_vector_element %gl_FragCoord, 1u
+                        %218:i32 = call %tint_f32_to_i32, %217
+                        %219:bool = lt %218, 180i
+                        if %219 [t: $B56, f: $B57] {  # if_14
+                          $B56: {  # true
+                            %220:ptr<private, i32, read_write> = access %data, 5i
+                            %221:i32 = load %220
+                            %222:f32 = convert %221
+                            %223:f32 = div %222, 10.0f
+                            %224:f32 = add 0.5f, %223
+                            store %grey, %224
                             exit_if  # if_14
                           }
-                          %b57 = block {  # false
-                            %203:f32 = load_vector_element %gl_FragCoord, 1u
-                            %204:i32 = convert %203
-                            %205:bool = lt %204, 210i
-                            if %205 [t: %b58, f: %b59] {  # if_15
-                              %b58 = block {  # true
-                                %206:ptr<private, i32, read_write> = access %data, 6i
-                                %207:i32 = load %206
-                                %208:f32 = convert %207
-                                %209:f32 = div %208, 10.0f
-                                %210:f32 = add 0.5f, %209
-                                store %grey, %210
+                          $B57: {  # false
+                            %225:f32 = load_vector_element %gl_FragCoord, 1u
+                            %226:i32 = call %tint_f32_to_i32, %225
+                            %227:bool = lt %226, 210i
+                            if %227 [t: $B58, f: $B59] {  # if_15
+                              $B58: {  # true
+                                %228:ptr<private, i32, read_write> = access %data, 6i
+                                %229:i32 = load %228
+                                %230:f32 = convert %229
+                                %231:f32 = div %230, 10.0f
+                                %232:f32 = add 0.5f, %231
+                                store %grey, %232
                                 exit_if  # if_15
                               }
-                              %b59 = block {  # false
-                                %211:f32 = load_vector_element %gl_FragCoord, 1u
-                                %212:i32 = convert %211
-                                %213:bool = lt %212, 240i
-                                if %213 [t: %b60, f: %b61] {  # if_16
-                                  %b60 = block {  # true
-                                    %214:ptr<private, i32, read_write> = access %data, 7i
-                                    %215:i32 = load %214
-                                    %216:f32 = convert %215
-                                    %217:f32 = div %216, 10.0f
-                                    %218:f32 = add 0.5f, %217
-                                    store %grey, %218
+                              $B59: {  # false
+                                %233:f32 = load_vector_element %gl_FragCoord, 1u
+                                %234:i32 = call %tint_f32_to_i32, %233
+                                %235:bool = lt %234, 240i
+                                if %235 [t: $B60, f: $B61] {  # if_16
+                                  $B60: {  # true
+                                    %236:ptr<private, i32, read_write> = access %data, 7i
+                                    %237:i32 = load %236
+                                    %238:f32 = convert %237
+                                    %239:f32 = div %238, 10.0f
+                                    %240:f32 = add 0.5f, %239
+                                    store %grey, %240
                                     exit_if  # if_16
                                   }
-                                  %b61 = block {  # false
-                                    %219:f32 = load_vector_element %gl_FragCoord, 1u
-                                    %220:i32 = convert %219
-                                    %221:bool = lt %220, 270i
-                                    if %221 [t: %b62, f: %b63] {  # if_17
-                                      %b62 = block {  # true
-                                        %222:ptr<private, i32, read_write> = access %data, 8i
-                                        %223:i32 = load %222
-                                        %224:f32 = convert %223
-                                        %225:f32 = div %224, 10.0f
-                                        %226:f32 = add 0.5f, %225
-                                        store %grey, %226
+                                  $B61: {  # false
+                                    %241:f32 = load_vector_element %gl_FragCoord, 1u
+                                    %242:i32 = call %tint_f32_to_i32, %241
+                                    %243:bool = lt %242, 270i
+                                    if %243 [t: $B62, f: $B63] {  # if_17
+                                      $B62: {  # true
+                                        %244:ptr<private, i32, read_write> = access %data, 8i
+                                        %245:i32 = load %244
+                                        %246:f32 = convert %245
+                                        %247:f32 = div %246, 10.0f
+                                        %248:f32 = add 0.5f, %247
+                                        store %grey, %248
                                         exit_if  # if_17
                                       }
-                                      %b63 = block {  # false
-                                        discard
+                                      $B63: {  # false
+                                        store %continue_execution, false
                                         exit_if  # if_17
                                       }
                                     }
@@ -526,23 +547,41 @@
         exit_if  # if_9
       }
     }
-    %227:f32 = load %grey
-    %x_250:vec3<f32> = construct %227
-    %229:f32 = access %x_250, 0u
-    %230:f32 = access %x_250, 1u
-    %231:f32 = access %x_250, 2u
-    %232:vec4<f32> = construct %229, %230, %231, 1.0f
-    store %x_GLF_color, %232
+    %249:f32 = load %grey
+    %250:vec3<f32> = construct %249
+    %x_250:vec3<f32> = let %250
+    %252:f32 = access %x_250, 0u
+    %253:f32 = access %x_250, 1u
+    %254:f32 = access %x_250, 2u
+    %255:vec4<f32> = construct %252, %253, %254, 1.0f
+    store %x_GLF_color, %255
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b64 {
-  %b64 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B64: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %235:void = call %main_1
-    %236:vec4<f32> = load %x_GLF_color
-    %237:main_out = construct %236
-    ret %237
+    %258:void = call %main_1
+    %259:vec4<f32> = load %x_GLF_color
+    %260:main_out = construct %259
+    %261:bool = load %continue_execution
+    %262:bool = eq %261, false
+    if %262 [t: $B65] {  # if_18
+      $B65: {  # true
+        terminate_invocation
+      }
+    }
+    ret %260
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B66: {
+    %264:i32 = convert %value
+    %265:bool = gte %value, -2147483648.0f
+    %266:i32 = select -2147483648i, %264, %265
+    %267:bool = lte %value, 2147483520.0f
+    %268:i32 = select 2147483647i, %266, %267
+    ret %268
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block3/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block3/1.wgsl.expected.ir.msl
index 1bf7226..4875de3 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block3/1.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block3/1.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -12,161 +12,192 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %data:ptr<private, array<i32, 10>, read_write> = var
   %temp:ptr<private, array<i32, 10>, read_write> = var
   %x_28:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_32:ptr<uniform, buf1, read> = var @binding_point(0, 1)
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%merge_i1_i1_i1_ = func(%f:ptr<function, i32, read_write>, %mid:ptr<function, i32, read_write>, %to:ptr<function, i32, read_write>):void -> %b2 {
-  %b2 = block {
+%merge_i1_i1_i1_ = func(%f:ptr<function, i32, read_write>, %mid:ptr<function, i32, read_write>, %to:ptr<function, i32, read_write>):void {
+  $B2: {
     %k:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %j:ptr<function, i32, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
-    %x_256:i32 = load %f
+    %16:i32 = load %f
+    %x_256:i32 = let %16
     store %k, %x_256
-    %x_257:i32 = load %f
+    %18:i32 = load %f
+    %x_257:i32 = let %18
     store %i, %x_257
-    %x_258:i32 = load %mid
-    %18:i32 = add %x_258, 1i
-    store %j, %18
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_264:i32 = load %i
-        %x_265:i32 = load %mid
-        %x_267:i32 = load %j
-        %x_268:i32 = load %to
-        %23:bool = lte %x_264, %x_265
-        %24:bool = lte %x_267, %x_268
-        %25:bool = and %23, %24
-        if %25 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    %20:i32 = load %mid
+    %x_258:i32 = let %20
+    %22:i32 = add %x_258, 1i
+    store %j, %22
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %23:i32 = load %i
+        %x_264:i32 = let %23
+        %25:i32 = load %mid
+        %x_265:i32 = let %25
+        %27:i32 = load %j
+        %x_267:i32 = let %27
+        %29:i32 = load %to
+        %x_268:i32 = let %29
+        %31:bool = lte %x_264, %x_265
+        %32:bool = lte %x_267, %x_268
+        %33:bool = and %31, %32
+        if %33 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_272:i32 = load %i
-        %27:ptr<private, i32, read_write> = access %data, %x_272
-        %x_274:i32 = load %27
-        %x_275:i32 = load %j
-        %30:ptr<private, i32, read_write> = access %data, %x_275
-        %x_277:i32 = load %30
-        %32:bool = lt %x_274, %x_277
-        if %32 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
-            %x_282:i32 = load %k
-            %34:i32 = add %x_282, 1i
-            store %k, %34
-            %x_284:i32 = load %i
-            %36:i32 = add %x_284, 1i
-            store %i, %36
-            %37:ptr<private, i32, read_write> = access %data, %x_284
-            %x_287:i32 = load %37
-            %39:ptr<private, i32, read_write> = access %temp, %x_282
-            store %39, %x_287
+        %34:i32 = load %i
+        %x_272:i32 = let %34
+        %36:ptr<private, i32, read_write> = access %data, %x_272
+        %37:i32 = load %36
+        %x_274:i32 = let %37
+        %39:i32 = load %j
+        %x_275:i32 = let %39
+        %41:ptr<private, i32, read_write> = access %data, %x_275
+        %42:i32 = load %41
+        %x_277:i32 = let %42
+        %44:bool = lt %x_274, %x_277
+        if %44 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
+            %45:i32 = load %k
+            %x_282:i32 = let %45
+            %47:i32 = add %x_282, 1i
+            store %k, %47
+            %48:i32 = load %i
+            %x_284:i32 = let %48
+            %50:i32 = add %x_284, 1i
+            store %i, %50
+            %51:ptr<private, i32, read_write> = access %data, %x_284
+            %52:i32 = load %51
+            %x_287:i32 = let %52
+            %54:ptr<private, i32, read_write> = access %temp, %x_282
+            store %54, %x_287
             exit_if  # if_2
           }
-          %b8 = block {  # false
-            %x_289:i32 = load %k
-            %41:i32 = add %x_289, 1i
-            store %k, %41
-            %x_291:i32 = load %j
-            %43:i32 = add %x_291, 1i
-            store %j, %43
-            %44:ptr<private, i32, read_write> = access %data, %x_291
-            %x_294:i32 = load %44
-            %46:ptr<private, i32, read_write> = access %temp, %x_289
-            store %46, %x_294
+          $B8: {  # false
+            %55:i32 = load %k
+            %x_289:i32 = let %55
+            %57:i32 = add %x_289, 1i
+            store %k, %57
+            %58:i32 = load %j
+            %x_291:i32 = let %58
+            %60:i32 = add %x_291, 1i
+            store %j, %60
+            %61:ptr<private, i32, read_write> = access %data, %x_291
+            %62:i32 = load %61
+            %x_294:i32 = let %62
+            %64:ptr<private, i32, read_write> = access %temp, %x_289
+            store %64, %x_294
             exit_if  # if_2
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
-    loop [b: %b9, c: %b10] {  # loop_2
-      %b9 = block {  # body
-        if true [t: %b11, f: %b12] {  # if_3
-          %b11 = block {  # true
+    loop [b: $B9, c: $B10] {  # loop_2
+      $B9: {  # body
+        if true [t: $B11, f: $B12] {  # if_3
+          $B11: {  # true
             exit_if  # if_3
           }
-          %b12 = block {  # false
-            continue %b10
+          $B12: {  # false
+            continue  # -> $B10
           }
         }
-        %x_301:i32 = load %i
-        %x_303:i32 = load %i
-        %x_304:i32 = load %mid
-        %50:bool = lt %x_301, 10i
-        %51:bool = lte %x_303, %x_304
-        %52:bool = and %50, %51
-        if %52 [t: %b13, f: %b14] {  # if_4
-          %b13 = block {  # true
+        %65:i32 = load %i
+        %x_301:i32 = let %65
+        %67:i32 = load %i
+        %x_303:i32 = let %67
+        %69:i32 = load %mid
+        %x_304:i32 = let %69
+        %71:bool = lt %x_301, 10i
+        %72:bool = lte %x_303, %x_304
+        %73:bool = and %71, %72
+        if %73 [t: $B13, f: $B14] {  # if_4
+          $B13: {  # true
             exit_if  # if_4
           }
-          %b14 = block {  # false
+          $B14: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_309:i32 = load %k
-        %54:i32 = add %x_309, 1i
-        store %k, %54
-        %x_311:i32 = load %i
-        %56:i32 = add %x_311, 1i
-        store %i, %56
-        %57:ptr<private, i32, read_write> = access %data, %x_311
-        %x_314:i32 = load %57
-        %59:ptr<private, i32, read_write> = access %temp, %x_309
-        store %59, %x_314
-        continue %b10
+        %74:i32 = load %k
+        %x_309:i32 = let %74
+        %76:i32 = add %x_309, 1i
+        store %k, %76
+        %77:i32 = load %i
+        %x_311:i32 = let %77
+        %79:i32 = add %x_311, 1i
+        store %i, %79
+        %80:ptr<private, i32, read_write> = access %data, %x_311
+        %81:i32 = load %80
+        %x_314:i32 = let %81
+        %83:ptr<private, i32, read_write> = access %temp, %x_309
+        store %83, %x_314
+        continue  # -> $B10
       }
-      %b10 = block {  # continuing
-        next_iteration %b9
+      $B10: {  # continuing
+        next_iteration  # -> $B9
       }
     }
-    %x_316:i32 = load %f
+    %84:i32 = load %f
+    %x_316:i32 = let %84
     store %i_1, %x_316
-    loop [b: %b15, c: %b16] {  # loop_3
-      %b15 = block {  # body
-        %x_321:i32 = load %i_1
-        %x_322:i32 = load %to
-        %63:bool = lte %x_321, %x_322
-        if %63 [t: %b17, f: %b18] {  # if_5
-          %b17 = block {  # true
+    loop [b: $B15, c: $B16] {  # loop_3
+      $B15: {  # body
+        %86:i32 = load %i_1
+        %x_321:i32 = let %86
+        %88:i32 = load %to
+        %x_322:i32 = let %88
+        %90:bool = lte %x_321, %x_322
+        if %90 [t: $B17, f: $B18] {  # if_5
+          $B17: {  # true
             exit_if  # if_5
           }
-          %b18 = block {  # false
+          $B18: {  # false
             exit_loop  # loop_3
           }
         }
-        %x_325:i32 = load %i_1
-        %x_326:i32 = load %i_1
-        %66:ptr<private, i32, read_write> = access %temp, %x_326
-        %x_328:i32 = load %66
-        %68:ptr<private, i32, read_write> = access %data, %x_325
-        store %68, %x_328
-        continue %b16
+        %91:i32 = load %i_1
+        %x_325:i32 = let %91
+        %93:i32 = load %i_1
+        %x_326:i32 = let %93
+        %95:ptr<private, i32, read_write> = access %temp, %x_326
+        %96:i32 = load %95
+        %x_328:i32 = let %96
+        %98:ptr<private, i32, read_write> = access %data, %x_325
+        store %98, %x_328
+        continue  # -> $B16
       }
-      %b16 = block {  # continuing
-        %x_330:i32 = load %i_1
-        %70:i32 = add %x_330, 1i
-        store %i_1, %70
-        next_iteration %b15
+      $B16: {  # continuing
+        %99:i32 = load %i_1
+        %x_330:i32 = let %99
+        %101:i32 = add %x_330, 1i
+        store %i_1, %101
+        next_iteration  # -> $B15
       }
     }
     ret
   }
 }
-%mergeSort_ = func():void -> %b19 {
-  %b19 = block {
+%mergeSort_ = func():void {
+  $B19: {
     %low:ptr<function, i32, read_write> = var
     %high:ptr<function, i32, read_write> = var
     %m:ptr<function, i32, read_write> = var
@@ -180,319 +211,372 @@
     store %low, 0i
     store %high, 9i
     store %m, 1i
-    loop [b: %b20, c: %b21] {  # loop_4
-      %b20 = block {  # body
-        %x_337:i32 = load %m
-        %x_338:i32 = load %high
-        %84:bool = lte %x_337, %x_338
-        if %84 [t: %b22, f: %b23] {  # if_6
-          %b22 = block {  # true
+    loop [b: $B20, c: $B21] {  # loop_4
+      $B20: {  # body
+        %113:i32 = load %m
+        %x_337:i32 = let %113
+        %115:i32 = load %high
+        %x_338:i32 = let %115
+        %117:bool = lte %x_337, %x_338
+        if %117 [t: $B22, f: $B23] {  # if_6
+          $B22: {  # true
             exit_if  # if_6
           }
-          %b23 = block {  # false
+          $B23: {  # false
             exit_loop  # loop_4
           }
         }
-        %x_341:i32 = load %low
+        %118:i32 = load %low
+        %x_341:i32 = let %118
         store %i_2, %x_341
-        loop [b: %b24, c: %b25] {  # loop_5
-          %b24 = block {  # body
-            %x_346:i32 = load %i_2
-            %x_347:i32 = load %high
-            %88:bool = lt %x_346, %x_347
-            if %88 [t: %b26, f: %b27] {  # if_7
-              %b26 = block {  # true
+        loop [b: $B24, c: $B25] {  # loop_5
+          $B24: {  # body
+            %120:i32 = load %i_2
+            %x_346:i32 = let %120
+            %122:i32 = load %high
+            %x_347:i32 = let %122
+            %124:bool = lt %x_346, %x_347
+            if %124 [t: $B26, f: $B27] {  # if_7
+              $B26: {  # true
                 exit_if  # if_7
               }
-              %b27 = block {  # false
+              $B27: {  # false
                 exit_loop  # loop_5
               }
             }
-            %x_350:i32 = load %i_2
+            %125:i32 = load %i_2
+            %x_350:i32 = let %125
             store %f_1, %x_350
-            %x_351:i32 = load %i_2
-            %x_352:i32 = load %m
-            %92:i32 = add %x_351, %x_352
-            %93:i32 = sub %92, 1i
-            store %mid_1, %93
-            %x_355:i32 = load %i_2
-            %x_356:i32 = load %m
-            %x_360:i32 = load %high
-            %97:i32 = mul 2i, %x_356
-            %98:i32 = add %x_355, %97
-            %99:i32 = sub %98, 1i
-            %100:i32 = min %99, %x_360
-            store %to_1, %100
-            %x_362:i32 = load %f_1
+            %127:i32 = load %i_2
+            %x_351:i32 = let %127
+            %129:i32 = load %m
+            %x_352:i32 = let %129
+            %131:i32 = add %x_351, %x_352
+            %132:i32 = sub %131, 1i
+            store %mid_1, %132
+            %133:i32 = load %i_2
+            %x_355:i32 = let %133
+            %135:i32 = load %m
+            %x_356:i32 = let %135
+            %137:i32 = load %high
+            %x_360:i32 = let %137
+            %139:i32 = mul 2i, %x_356
+            %140:i32 = add %x_355, %139
+            %141:i32 = sub %140, 1i
+            %142:i32 = min %141, %x_360
+            store %to_1, %142
+            %143:i32 = load %f_1
+            %x_362:i32 = let %143
             store %param, %x_362
-            %x_363:i32 = load %mid_1
+            %145:i32 = load %mid_1
+            %x_363:i32 = let %145
             store %param_1, %x_363
-            %x_364:i32 = load %to_1
+            %147:i32 = load %to_1
+            %x_364:i32 = let %147
             store %param_2, %x_364
-            %104:void = call %merge_i1_i1_i1_, %param, %param_1, %param_2
-            continue %b25
+            %149:void = call %merge_i1_i1_i1_, %param, %param_1, %param_2
+            continue  # -> $B25
           }
-          %b25 = block {  # continuing
-            %x_366:i32 = load %m
-            %x_368:i32 = load %i_2
-            %107:i32 = mul 2i, %x_366
-            %108:i32 = add %x_368, %107
-            store %i_2, %108
-            next_iteration %b24
+          $B25: {  # continuing
+            %150:i32 = load %m
+            %x_366:i32 = let %150
+            %152:i32 = load %i_2
+            %x_368:i32 = let %152
+            %154:i32 = mul 2i, %x_366
+            %155:i32 = add %x_368, %154
+            store %i_2, %155
+            next_iteration  # -> $B24
           }
         }
-        continue %b21
+        continue  # -> $B21
       }
-      %b21 = block {  # continuing
-        %x_370:i32 = load %m
-        %110:i32 = mul 2i, %x_370
-        store %m, %110
-        next_iteration %b20
+      $B21: {  # continuing
+        %156:i32 = load %m
+        %x_370:i32 = let %156
+        %158:i32 = mul 2i, %x_370
+        store %m, %158
+        next_iteration  # -> $B20
       }
     }
     ret
   }
 }
-%main_1 = func():void -> %b28 {
-  %b28 = block {
+%main_1 = func():void {
+  $B28: {
     %i_3:ptr<function, i32, read_write> = var
     %j_1:ptr<function, i32, read_write> = var
     %grey:ptr<function, f32, read_write> = var
-    %115:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
-    %x_89:f32 = load_vector_element %115, 0u
-    %117:i32 = convert %x_89
-    store %i_3, %117
-    loop [b: %b29, c: %b30] {  # loop_6
-      %b29 = block {  # body
-        %x_95:i32 = load %i_3
-        switch %x_95 [c: (9i, %b31), c: (8i, %b32), c: (7i, %b33), c: (6i, %b34), c: (5i, %b35), c: (4i, %b36), c: (3i, %b37), c: (2i, %b38), c: (1i, %b39), c: (0i, %b40), c: (default, %b41)] {  # switch_1
-          %b31 = block {  # case
-            %x_125:i32 = load %i_3
-            %120:ptr<private, i32, read_write> = access %data, %x_125
-            store %120, -5i
+    %163:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
+    %164:f32 = load_vector_element %163, 0u
+    %x_89:f32 = let %164
+    %166:i32 = call %tint_f32_to_i32, %x_89
+    store %i_3, %166
+    loop [b: $B29, c: $B30] {  # loop_6
+      $B29: {  # body
+        %168:i32 = load %i_3
+        %x_95:i32 = let %168
+        switch %x_95 [c: (9i, $B31), c: (8i, $B32), c: (7i, $B33), c: (6i, $B34), c: (5i, $B35), c: (4i, $B36), c: (3i, $B37), c: (2i, $B38), c: (1i, $B39), c: (0i, $B40), c: (default, $B41)] {  # switch_1
+          $B31: {  # case
+            %170:i32 = load %i_3
+            %x_125:i32 = let %170
+            %172:ptr<private, i32, read_write> = access %data, %x_125
+            store %172, -5i
             exit_switch  # switch_1
           }
-          %b32 = block {  # case
-            %x_123:i32 = load %i_3
-            %122:ptr<private, i32, read_write> = access %data, %x_123
-            store %122, -4i
+          $B32: {  # case
+            %173:i32 = load %i_3
+            %x_123:i32 = let %173
+            %175:ptr<private, i32, read_write> = access %data, %x_123
+            store %175, -4i
             exit_switch  # switch_1
           }
-          %b33 = block {  # case
-            %x_121:i32 = load %i_3
-            %124:ptr<private, i32, read_write> = access %data, %x_121
-            store %124, -3i
+          $B33: {  # case
+            %176:i32 = load %i_3
+            %x_121:i32 = let %176
+            %178:ptr<private, i32, read_write> = access %data, %x_121
+            store %178, -3i
             exit_switch  # switch_1
           }
-          %b34 = block {  # case
-            %x_119:i32 = load %i_3
-            %126:ptr<private, i32, read_write> = access %data, %x_119
-            store %126, -2i
+          $B34: {  # case
+            %179:i32 = load %i_3
+            %x_119:i32 = let %179
+            %181:ptr<private, i32, read_write> = access %data, %x_119
+            store %181, -2i
             exit_switch  # switch_1
           }
-          %b35 = block {  # case
-            %x_117:i32 = load %i_3
-            %128:ptr<private, i32, read_write> = access %data, %x_117
-            store %128, -1i
+          $B35: {  # case
+            %182:i32 = load %i_3
+            %x_117:i32 = let %182
+            %184:ptr<private, i32, read_write> = access %data, %x_117
+            store %184, -1i
             exit_switch  # switch_1
           }
-          %b36 = block {  # case
-            %x_115:i32 = load %i_3
-            %130:ptr<private, i32, read_write> = access %data, %x_115
-            store %130, 0i
+          $B36: {  # case
+            %185:i32 = load %i_3
+            %x_115:i32 = let %185
+            %187:ptr<private, i32, read_write> = access %data, %x_115
+            store %187, 0i
             exit_switch  # switch_1
           }
-          %b37 = block {  # case
-            %x_113:i32 = load %i_3
-            %132:ptr<private, i32, read_write> = access %data, %x_113
-            store %132, 1i
+          $B37: {  # case
+            %188:i32 = load %i_3
+            %x_113:i32 = let %188
+            %190:ptr<private, i32, read_write> = access %data, %x_113
+            store %190, 1i
             exit_switch  # switch_1
           }
-          %b38 = block {  # case
-            %x_111:i32 = load %i_3
-            %134:ptr<private, i32, read_write> = access %data, %x_111
-            store %134, 2i
+          $B38: {  # case
+            %191:i32 = load %i_3
+            %x_111:i32 = let %191
+            %193:ptr<private, i32, read_write> = access %data, %x_111
+            store %193, 2i
             exit_switch  # switch_1
           }
-          %b39 = block {  # case
-            %x_109:i32 = load %i_3
-            %136:ptr<private, i32, read_write> = access %data, %x_109
-            store %136, 3i
+          $B39: {  # case
+            %194:i32 = load %i_3
+            %x_109:i32 = let %194
+            %196:ptr<private, i32, read_write> = access %data, %x_109
+            store %196, 3i
             exit_switch  # switch_1
           }
-          %b40 = block {  # case
-            %x_107:i32 = load %i_3
-            %138:ptr<private, i32, read_write> = access %data, %x_107
-            store %138, 4i
+          $B40: {  # case
+            %197:i32 = load %i_3
+            %x_107:i32 = let %197
+            %199:ptr<private, i32, read_write> = access %data, %x_107
+            store %199, 4i
             exit_switch  # switch_1
           }
-          %b41 = block {  # case
+          $B41: {  # case
             exit_switch  # switch_1
           }
         }
-        %x_127:i32 = load %i_3
-        %140:i32 = add %x_127, 1i
-        store %i_3, %140
-        continue %b30
+        %200:i32 = load %i_3
+        %x_127:i32 = let %200
+        %202:i32 = add %x_127, 1i
+        store %i_3, %202
+        continue  # -> $B30
       }
-      %b30 = block {  # continuing
-        %x_129:i32 = load %i_3
-        %142:bool = lt %x_129, 10i
-        %143:bool = eq %142, false
-        break_if %143 %b29
+      $B30: {  # continuing
+        %203:i32 = load %i_3
+        %x_129:i32 = let %203
+        %205:bool = lt %x_129, 10i
+        %206:bool = eq %205, false
+        break_if %206  # -> [t: exit_loop loop_6, f: $B29]
       }
     }
     store %j_1, 0i
-    loop [b: %b42, c: %b43] {  # loop_7
-      %b42 = block {  # body
-        %x_135:i32 = load %j_1
-        %145:bool = lt %x_135, 10i
-        if %145 [t: %b44, f: %b45] {  # if_8
-          %b44 = block {  # true
+    loop [b: $B42, c: $B43] {  # loop_7
+      $B42: {  # body
+        %207:i32 = load %j_1
+        %x_135:i32 = let %207
+        %209:bool = lt %x_135, 10i
+        if %209 [t: $B44, f: $B45] {  # if_8
+          $B44: {  # true
             exit_if  # if_8
           }
-          %b45 = block {  # false
+          $B45: {  # false
             exit_loop  # loop_7
           }
         }
-        %x_138:i32 = load %j_1
-        %x_139:i32 = load %j_1
-        %148:ptr<private, i32, read_write> = access %data, %x_139
-        %x_141:i32 = load %148
-        %150:ptr<private, i32, read_write> = access %temp, %x_138
-        store %150, %x_141
-        continue %b43
+        %210:i32 = load %j_1
+        %x_138:i32 = let %210
+        %212:i32 = load %j_1
+        %x_139:i32 = let %212
+        %214:ptr<private, i32, read_write> = access %data, %x_139
+        %215:i32 = load %214
+        %x_141:i32 = let %215
+        %217:ptr<private, i32, read_write> = access %temp, %x_138
+        store %217, %x_141
+        continue  # -> $B43
       }
-      %b43 = block {  # continuing
-        %x_143:i32 = load %j_1
-        %152:i32 = add %x_143, 1i
-        store %j_1, %152
-        next_iteration %b42
+      $B43: {  # continuing
+        %218:i32 = load %j_1
+        %x_143:i32 = let %218
+        %220:i32 = add %x_143, 1i
+        store %j_1, %220
+        next_iteration  # -> $B42
       }
     }
-    %153:void = call %mergeSort_
-    %x_147:f32 = load_vector_element %gl_FragCoord, 1u
-    %155:i32 = convert %x_147
-    %156:bool = lt %155, 30i
-    if %156 [t: %b46, f: %b47] {  # if_9
-      %b46 = block {  # true
-        %157:ptr<private, i32, read_write> = access %data, 0i
-        %x_154:i32 = load %157
-        %159:f32 = convert %x_154
-        %160:f32 = div %159, 10.0f
-        %161:f32 = add 0.5f, %160
-        store %grey, %161
+    %221:void = call %mergeSort_
+    %222:f32 = load_vector_element %gl_FragCoord, 1u
+    %x_147:f32 = let %222
+    %224:i32 = call %tint_f32_to_i32, %x_147
+    %225:bool = lt %224, 30i
+    if %225 [t: $B46, f: $B47] {  # if_9
+      $B46: {  # true
+        %226:ptr<private, i32, read_write> = access %data, 0i
+        %227:i32 = load %226
+        %x_154:i32 = let %227
+        %229:f32 = convert %x_154
+        %230:f32 = div %229, 10.0f
+        %231:f32 = add 0.5f, %230
+        store %grey, %231
         exit_if  # if_9
       }
-      %b47 = block {  # false
-        %x_159:f32 = load_vector_element %gl_FragCoord, 1u
-        %163:i32 = convert %x_159
-        %164:bool = lt %163, 60i
-        if %164 [t: %b48, f: %b49] {  # if_10
-          %b48 = block {  # true
-            %165:ptr<private, i32, read_write> = access %data, 1i
-            %x_166:i32 = load %165
-            %167:f32 = convert %x_166
-            %168:f32 = div %167, 10.0f
-            %169:f32 = add 0.5f, %168
-            store %grey, %169
+      $B47: {  # false
+        %232:f32 = load_vector_element %gl_FragCoord, 1u
+        %x_159:f32 = let %232
+        %234:i32 = call %tint_f32_to_i32, %x_159
+        %235:bool = lt %234, 60i
+        if %235 [t: $B48, f: $B49] {  # if_10
+          $B48: {  # true
+            %236:ptr<private, i32, read_write> = access %data, 1i
+            %237:i32 = load %236
+            %x_166:i32 = let %237
+            %239:f32 = convert %x_166
+            %240:f32 = div %239, 10.0f
+            %241:f32 = add 0.5f, %240
+            store %grey, %241
             exit_if  # if_10
           }
-          %b49 = block {  # false
-            %x_171:f32 = load_vector_element %gl_FragCoord, 1u
-            %171:i32 = convert %x_171
-            %172:bool = lt %171, 90i
-            if %172 [t: %b50, f: %b51] {  # if_11
-              %b50 = block {  # true
-                %173:ptr<private, i32, read_write> = access %data, 2i
-                %x_178:i32 = load %173
-                %175:f32 = convert %x_178
-                %176:f32 = div %175, 10.0f
-                %177:f32 = add 0.5f, %176
-                store %grey, %177
+          $B49: {  # false
+            %242:f32 = load_vector_element %gl_FragCoord, 1u
+            %x_171:f32 = let %242
+            %244:i32 = call %tint_f32_to_i32, %x_171
+            %245:bool = lt %244, 90i
+            if %245 [t: $B50, f: $B51] {  # if_11
+              $B50: {  # true
+                %246:ptr<private, i32, read_write> = access %data, 2i
+                %247:i32 = load %246
+                %x_178:i32 = let %247
+                %249:f32 = convert %x_178
+                %250:f32 = div %249, 10.0f
+                %251:f32 = add 0.5f, %250
+                store %grey, %251
                 exit_if  # if_11
               }
-              %b51 = block {  # false
-                %x_183:f32 = load_vector_element %gl_FragCoord, 1u
-                %179:i32 = convert %x_183
-                %180:bool = lt %179, 120i
-                if %180 [t: %b52, f: %b53] {  # if_12
-                  %b52 = block {  # true
-                    %181:ptr<private, i32, read_write> = access %data, 3i
-                    %x_190:i32 = load %181
-                    %183:f32 = convert %x_190
-                    %184:f32 = div %183, 10.0f
-                    %185:f32 = add 0.5f, %184
-                    store %grey, %185
+              $B51: {  # false
+                %252:f32 = load_vector_element %gl_FragCoord, 1u
+                %x_183:f32 = let %252
+                %254:i32 = call %tint_f32_to_i32, %x_183
+                %255:bool = lt %254, 120i
+                if %255 [t: $B52, f: $B53] {  # if_12
+                  $B52: {  # true
+                    %256:ptr<private, i32, read_write> = access %data, 3i
+                    %257:i32 = load %256
+                    %x_190:i32 = let %257
+                    %259:f32 = convert %x_190
+                    %260:f32 = div %259, 10.0f
+                    %261:f32 = add 0.5f, %260
+                    store %grey, %261
                     exit_if  # if_12
                   }
-                  %b53 = block {  # false
-                    %x_195:f32 = load_vector_element %gl_FragCoord, 1u
-                    %187:i32 = convert %x_195
-                    %188:bool = lt %187, 150i
-                    if %188 [t: %b54, f: %b55] {  # if_13
-                      %b54 = block {  # true
-                        discard
+                  $B53: {  # false
+                    %262:f32 = load_vector_element %gl_FragCoord, 1u
+                    %x_195:f32 = let %262
+                    %264:i32 = call %tint_f32_to_i32, %x_195
+                    %265:bool = lt %264, 150i
+                    if %265 [t: $B54, f: $B55] {  # if_13
+                      $B54: {  # true
+                        store %continue_execution, false
                         exit_if  # if_13
                       }
-                      %b55 = block {  # false
-                        %x_202:f32 = load_vector_element %gl_FragCoord, 1u
-                        %190:i32 = convert %x_202
-                        %191:bool = lt %190, 180i
-                        if %191 [t: %b56, f: %b57] {  # if_14
-                          %b56 = block {  # true
-                            %192:ptr<private, i32, read_write> = access %data, 5i
-                            %x_209:i32 = load %192
-                            %194:f32 = convert %x_209
-                            %195:f32 = div %194, 10.0f
-                            %196:f32 = add 0.5f, %195
-                            store %grey, %196
+                      $B55: {  # false
+                        %266:f32 = load_vector_element %gl_FragCoord, 1u
+                        %x_202:f32 = let %266
+                        %268:i32 = call %tint_f32_to_i32, %x_202
+                        %269:bool = lt %268, 180i
+                        if %269 [t: $B56, f: $B57] {  # if_14
+                          $B56: {  # true
+                            %270:ptr<private, i32, read_write> = access %data, 5i
+                            %271:i32 = load %270
+                            %x_209:i32 = let %271
+                            %273:f32 = convert %x_209
+                            %274:f32 = div %273, 10.0f
+                            %275:f32 = add 0.5f, %274
+                            store %grey, %275
                             exit_if  # if_14
                           }
-                          %b57 = block {  # false
-                            %x_214:f32 = load_vector_element %gl_FragCoord, 1u
-                            %198:i32 = convert %x_214
-                            %199:bool = lt %198, 210i
-                            if %199 [t: %b58, f: %b59] {  # if_15
-                              %b58 = block {  # true
-                                %200:ptr<private, i32, read_write> = access %data, 6i
-                                %x_221:i32 = load %200
-                                %202:f32 = convert %x_221
-                                %203:f32 = div %202, 10.0f
-                                %204:f32 = add 0.5f, %203
-                                store %grey, %204
+                          $B57: {  # false
+                            %276:f32 = load_vector_element %gl_FragCoord, 1u
+                            %x_214:f32 = let %276
+                            %278:i32 = call %tint_f32_to_i32, %x_214
+                            %279:bool = lt %278, 210i
+                            if %279 [t: $B58, f: $B59] {  # if_15
+                              $B58: {  # true
+                                %280:ptr<private, i32, read_write> = access %data, 6i
+                                %281:i32 = load %280
+                                %x_221:i32 = let %281
+                                %283:f32 = convert %x_221
+                                %284:f32 = div %283, 10.0f
+                                %285:f32 = add 0.5f, %284
+                                store %grey, %285
                                 exit_if  # if_15
                               }
-                              %b59 = block {  # false
-                                %x_226:f32 = load_vector_element %gl_FragCoord, 1u
-                                %206:i32 = convert %x_226
-                                %207:bool = lt %206, 240i
-                                if %207 [t: %b60, f: %b61] {  # if_16
-                                  %b60 = block {  # true
-                                    %208:ptr<private, i32, read_write> = access %data, 7i
-                                    %x_233:i32 = load %208
-                                    %210:f32 = convert %x_233
-                                    %211:f32 = div %210, 10.0f
-                                    %212:f32 = add 0.5f, %211
-                                    store %grey, %212
+                              $B59: {  # false
+                                %286:f32 = load_vector_element %gl_FragCoord, 1u
+                                %x_226:f32 = let %286
+                                %288:i32 = call %tint_f32_to_i32, %x_226
+                                %289:bool = lt %288, 240i
+                                if %289 [t: $B60, f: $B61] {  # if_16
+                                  $B60: {  # true
+                                    %290:ptr<private, i32, read_write> = access %data, 7i
+                                    %291:i32 = load %290
+                                    %x_233:i32 = let %291
+                                    %293:f32 = convert %x_233
+                                    %294:f32 = div %293, 10.0f
+                                    %295:f32 = add 0.5f, %294
+                                    store %grey, %295
                                     exit_if  # if_16
                                   }
-                                  %b61 = block {  # false
-                                    %x_238:f32 = load_vector_element %gl_FragCoord, 1u
-                                    %214:i32 = convert %x_238
-                                    %215:bool = lt %214, 270i
-                                    if %215 [t: %b62, f: %b63] {  # if_17
-                                      %b62 = block {  # true
-                                        %216:ptr<private, i32, read_write> = access %data, 8i
-                                        %x_245:i32 = load %216
-                                        %218:f32 = convert %x_245
-                                        %219:f32 = div %218, 10.0f
-                                        %220:f32 = add 0.5f, %219
-                                        store %grey, %220
+                                  $B61: {  # false
+                                    %296:f32 = load_vector_element %gl_FragCoord, 1u
+                                    %x_238:f32 = let %296
+                                    %298:i32 = call %tint_f32_to_i32, %x_238
+                                    %299:bool = lt %298, 270i
+                                    if %299 [t: $B62, f: $B63] {  # if_17
+                                      $B62: {  # true
+                                        %300:ptr<private, i32, read_write> = access %data, 8i
+                                        %301:i32 = load %300
+                                        %x_245:i32 = let %301
+                                        %303:f32 = convert %x_245
+                                        %304:f32 = div %303, 10.0f
+                                        %305:f32 = add 0.5f, %304
+                                        store %grey, %305
                                         exit_if  # if_17
                                       }
-                                      %b63 = block {  # false
-                                        discard
+                                      $B63: {  # false
+                                        store %continue_execution, false
                                         exit_if  # if_17
                                       }
                                     }
@@ -520,23 +604,42 @@
         exit_if  # if_9
       }
     }
-    %x_249:f32 = load %grey
-    %x_250:vec3<f32> = construct %x_249, %x_249, %x_249
-    %223:f32 = access %x_250, 0u
-    %224:f32 = access %x_250, 1u
-    %225:f32 = access %x_250, 2u
-    %226:vec4<f32> = construct %223, %224, %225, 1.0f
-    store %x_GLF_color, %226
+    %306:f32 = load %grey
+    %x_249:f32 = let %306
+    %308:vec3<f32> = construct %x_249, %x_249, %x_249
+    %x_250:vec3<f32> = let %308
+    %310:f32 = access %x_250, 0u
+    %311:f32 = access %x_250, 1u
+    %312:f32 = access %x_250, 2u
+    %313:vec4<f32> = construct %310, %311, %312, 1.0f
+    store %x_GLF_color, %313
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b64 {
-  %b64 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B64: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %229:void = call %main_1
-    %230:vec4<f32> = load %x_GLF_color
-    %231:main_out = construct %230
-    ret %231
+    %316:void = call %main_1
+    %317:vec4<f32> = load %x_GLF_color
+    %318:main_out = construct %317
+    %319:bool = load %continue_execution
+    %320:bool = eq %319, false
+    if %320 [t: $B65] {  # if_18
+      $B65: {  # true
+        terminate_invocation
+      }
+    }
+    ret %318
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B66: {
+    %322:i32 = convert %value
+    %323:bool = gte %value, -2147483648.0f
+    %324:i32 = select -2147483648i, %322, %323
+    %325:bool = lte %value, 2147483520.0f
+    %326:i32 = select 2147483647i, %324, %325
+    ret %326
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-load-from-frag-color/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-load-from-frag-color/1.spvasm.expected.ir.msl
index 28251dc..818b861 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-load-from-frag-color/1.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-load-from-frag-color/1.spvasm.expected.ir.msl
@@ -1,6 +1,1080 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: BST = struct @align(4) {
+  data:i32 @offset(0)
+  leftIndex:i32 @offset(4)
+  rightIndex:i32 @offset(8)
+}
+
+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
+}
+
+%main_1 = func():void {
+  $B2: {
+    %tree:ptr<function, array<BST, 10>, read_write> = var
+    %x_62:ptr<function, i32, read_write> = var
+    %x_90:ptr<function, bool, read_write> = var
+    %x_357:ptr<function, i32, read_write> = var
+    %x_360:ptr<function, i32, read_write> = var
+    %x_362:ptr<function, i32, read_write> = var
+    %9:ptr<function, BST, read_write> = access %tree, 0i
+    store %9, BST(9i, -1i, -1i)
+    switch 0u [c: (default, $B3)] {  # switch_1
+      $B3: {  # case
+        store %x_62, 0i
+        loop [b: $B4, c: $B5] {  # loop_1
+          $B4: {  # body
+            %x_88:ptr<function, i32, read_write> = var
+            %x_80:ptr<function, i32, read_write> = var
+            %x_63:ptr<function, i32, read_write> = var
+            store %x_90, false
+            %13:i32 = load %x_62
+            %14:bool = lte %13, 1i
+            if %14 [t: $B6, f: $B7] {  # if_1
+              $B6: {  # true
+                exit_if  # if_1
+              }
+              $B7: {  # false
+                exit_loop  # loop_1
+              }
+            }
+            %15:i32 = load %x_62
+            %16:ptr<function, i32, read_write> = access %tree, %15, 0u
+            %17:i32 = load %16
+            %18:bool = lte 5i, %17
+            if %18 [t: $B8, f: $B9] {  # if_2
+              $B8: {  # true
+                %19:i32 = load %x_62
+                %x_82_save:i32 = let %19
+                %21:i32 = load %x_62
+                %22:ptr<function, i32, read_write> = access %tree, %21, 1u
+                %23:i32 = load %22
+                %24:bool = eq %23, -1i
+                if %24 [t: $B10, f: $B11] {  # if_3
+                  $B10: {  # true
+                    %25:ptr<function, i32, read_write> = access %tree, %x_82_save, 1u
+                    store %25, 1i
+                    %26:ptr<function, BST, read_write> = access %tree, 1i
+                    store %26, BST(5i, -1i, -1i)
+                    store %x_90, true
+                    exit_loop  # loop_1
+                  }
+                  $B11: {  # false
+                    %27:ptr<function, i32, read_write> = access %tree, %x_82_save, 1u
+                    %28:i32 = load %27
+                    store %x_88, %28
+                    %29:i32 = load %x_88
+                    store %x_63, %29
+                    continue  # -> $B5
+                  }
+                }
+                exit_if  # if_2
+              }
+              $B9: {  # false
+                %30:i32 = load %x_62
+                %x_74_save:i32 = let %30
+                %32:i32 = load %x_62
+                %33:ptr<function, i32, read_write> = access %tree, %32, 2u
+                %34:i32 = load %33
+                %35:bool = eq %34, -1i
+                if %35 [t: $B12, f: $B13] {  # if_4
+                  $B12: {  # true
+                    %36:ptr<function, i32, read_write> = access %tree, %x_74_save, 2u
+                    store %36, 1i
+                    %37:ptr<function, BST, read_write> = access %tree, 1i
+                    store %37, BST(5i, -1i, -1i)
+                    store %x_90, true
+                    exit_loop  # loop_1
+                  }
+                  $B13: {  # false
+                    %38:ptr<function, i32, read_write> = access %tree, %x_74_save, 2u
+                    %39:i32 = load %38
+                    store %x_80, %39
+                    %40:i32 = load %x_80
+                    store %x_63, %40
+                    continue  # -> $B5
+                  }
+                }
+                exit_if  # if_2
+              }
+            }
+            unreachable
+          }
+          $B5: {  # continuing
+            %41:i32 = load %x_63
+            store %x_62, %41
+            next_iteration  # -> $B4
+          }
+        }
+        %42:bool = load %x_90
+        if %42 [t: $B14] {  # if_5
+          $B14: {  # true
+            exit_switch  # switch_1
+          }
+        }
+        exit_switch  # switch_1
+      }
+    }
+    %x_95:ptr<function, i32, read_write> = var
+    %x_123:ptr<function, bool, read_write> = var
+    switch 0u [c: (default, $B15)] {  # switch_2
+      $B15: {  # case
+        store %x_95, 0i
+        loop [b: $B16, c: $B17] {  # loop_2
+          $B16: {  # body
+            %x_121:ptr<function, i32, read_write> = var
+            %x_113:ptr<function, i32, read_write> = var
+            %x_96:ptr<function, i32, read_write> = var
+            store %x_123, false
+            %48:i32 = load %x_95
+            %49:bool = lte %48, 2i
+            if %49 [t: $B18, f: $B19] {  # if_6
+              $B18: {  # true
+                exit_if  # if_6
+              }
+              $B19: {  # false
+                exit_loop  # loop_2
+              }
+            }
+            %50:i32 = load %x_95
+            %51:ptr<function, i32, read_write> = access %tree, %50, 0u
+            %52:i32 = load %51
+            %53:bool = lte 12i, %52
+            if %53 [t: $B20, f: $B21] {  # if_7
+              $B20: {  # true
+                %54:i32 = load %x_95
+                %x_115_save:i32 = let %54
+                %56:i32 = load %x_95
+                %57:ptr<function, i32, read_write> = access %tree, %56, 1u
+                %58:i32 = load %57
+                %59:bool = eq %58, -1i
+                if %59 [t: $B22, f: $B23] {  # if_8
+                  $B22: {  # true
+                    %60:ptr<function, i32, read_write> = access %tree, %x_115_save, 1u
+                    store %60, 2i
+                    %61:ptr<function, BST, read_write> = access %tree, 2i
+                    store %61, BST(12i, -1i, -1i)
+                    store %x_123, true
+                    exit_loop  # loop_2
+                  }
+                  $B23: {  # false
+                    %62:ptr<function, i32, read_write> = access %tree, %x_115_save, 1u
+                    %63:i32 = load %62
+                    store %x_121, %63
+                    %64:i32 = load %x_121
+                    store %x_96, %64
+                    continue  # -> $B17
+                  }
+                }
+                exit_if  # if_7
+              }
+              $B21: {  # false
+                %65:i32 = load %x_95
+                %x_107_save:i32 = let %65
+                %67:i32 = load %x_95
+                %68:ptr<function, i32, read_write> = access %tree, %67, 2u
+                %69:i32 = load %68
+                %70:bool = eq %69, -1i
+                if %70 [t: $B24, f: $B25] {  # if_9
+                  $B24: {  # true
+                    %71:ptr<function, i32, read_write> = access %tree, %x_107_save, 2u
+                    store %71, 2i
+                    %72:ptr<function, BST, read_write> = access %tree, 2i
+                    store %72, BST(12i, -1i, -1i)
+                    store %x_123, true
+                    exit_loop  # loop_2
+                  }
+                  $B25: {  # false
+                    %73:ptr<function, i32, read_write> = access %tree, %x_107_save, 2u
+                    %74:i32 = load %73
+                    store %x_113, %74
+                    %75:i32 = load %x_113
+                    store %x_96, %75
+                    continue  # -> $B17
+                  }
+                }
+                exit_if  # if_7
+              }
+            }
+            unreachable
+          }
+          $B17: {  # continuing
+            %76:i32 = load %x_96
+            store %x_95, %76
+            next_iteration  # -> $B16
+          }
+        }
+        %77:bool = load %x_123
+        if %77 [t: $B26] {  # if_10
+          $B26: {  # true
+            exit_switch  # switch_2
+          }
+        }
+        exit_switch  # switch_2
+      }
+    }
+    %x_128:ptr<function, i32, read_write> = var
+    %x_156:ptr<function, bool, read_write> = var
+    switch 0u [c: (default, $B27)] {  # switch_3
+      $B27: {  # case
+        store %x_128, 0i
+        loop [b: $B28, c: $B29] {  # loop_3
+          $B28: {  # body
+            %x_154:ptr<function, i32, read_write> = var
+            %x_146:ptr<function, i32, read_write> = var
+            %x_129:ptr<function, i32, read_write> = var
+            store %x_156, false
+            %83:i32 = load %x_128
+            %84:bool = lte %83, 3i
+            if %84 [t: $B30, f: $B31] {  # if_11
+              $B30: {  # true
+                exit_if  # if_11
+              }
+              $B31: {  # false
+                exit_loop  # loop_3
+              }
+            }
+            %85:i32 = load %x_128
+            %86:ptr<function, i32, read_write> = access %tree, %85, 0u
+            %87:i32 = load %86
+            %88:bool = lte 15i, %87
+            if %88 [t: $B32, f: $B33] {  # if_12
+              $B32: {  # true
+                %89:i32 = load %x_128
+                %x_148_save:i32 = let %89
+                %91:i32 = load %x_128
+                %92:ptr<function, i32, read_write> = access %tree, %91, 1u
+                %93:i32 = load %92
+                %94:bool = eq %93, -1i
+                if %94 [t: $B34, f: $B35] {  # if_13
+                  $B34: {  # true
+                    %95:ptr<function, i32, read_write> = access %tree, %x_148_save, 1u
+                    store %95, 3i
+                    %96:ptr<function, BST, read_write> = access %tree, 3i
+                    store %96, BST(15i, -1i, -1i)
+                    store %x_156, true
+                    exit_loop  # loop_3
+                  }
+                  $B35: {  # false
+                    %97:ptr<function, i32, read_write> = access %tree, %x_148_save, 1u
+                    %98:i32 = load %97
+                    store %x_154, %98
+                    %99:i32 = load %x_154
+                    store %x_129, %99
+                    continue  # -> $B29
+                  }
+                }
+                exit_if  # if_12
+              }
+              $B33: {  # false
+                %100:i32 = load %x_128
+                %x_140_save:i32 = let %100
+                %102:i32 = load %x_128
+                %103:ptr<function, i32, read_write> = access %tree, %102, 2u
+                %104:i32 = load %103
+                %105:bool = eq %104, -1i
+                if %105 [t: $B36, f: $B37] {  # if_14
+                  $B36: {  # true
+                    %106:ptr<function, i32, read_write> = access %tree, %x_140_save, 2u
+                    store %106, 3i
+                    %107:ptr<function, BST, read_write> = access %tree, 3i
+                    store %107, BST(15i, -1i, -1i)
+                    store %x_156, true
+                    exit_loop  # loop_3
+                  }
+                  $B37: {  # false
+                    %108:ptr<function, i32, read_write> = access %tree, %x_140_save, 2u
+                    %109:i32 = load %108
+                    store %x_146, %109
+                    %110:i32 = load %x_146
+                    store %x_129, %110
+                    continue  # -> $B29
+                  }
+                }
+                exit_if  # if_12
+              }
+            }
+            unreachable
+          }
+          $B29: {  # continuing
+            %111:i32 = load %x_129
+            store %x_128, %111
+            next_iteration  # -> $B28
+          }
+        }
+        %112:bool = load %x_156
+        if %112 [t: $B38] {  # if_15
+          $B38: {  # true
+            exit_switch  # switch_3
+          }
+        }
+        exit_switch  # switch_3
+      }
+    }
+    %x_161:ptr<function, i32, read_write> = var
+    %x_189:ptr<function, bool, read_write> = var
+    switch 0u [c: (default, $B39)] {  # switch_4
+      $B39: {  # case
+        store %x_161, 0i
+        loop [b: $B40, c: $B41] {  # loop_4
+          $B40: {  # body
+            %x_187:ptr<function, i32, read_write> = var
+            %x_179:ptr<function, i32, read_write> = var
+            %x_162:ptr<function, i32, read_write> = var
+            store %x_189, false
+            %118:i32 = load %x_161
+            %119:bool = lte %118, 4i
+            if %119 [t: $B42, f: $B43] {  # if_16
+              $B42: {  # true
+                exit_if  # if_16
+              }
+              $B43: {  # false
+                exit_loop  # loop_4
+              }
+            }
+            %120:i32 = load %x_161
+            %121:ptr<function, i32, read_write> = access %tree, %120, 0u
+            %122:i32 = load %121
+            %123:bool = lte 7i, %122
+            if %123 [t: $B44, f: $B45] {  # if_17
+              $B44: {  # true
+                %124:i32 = load %x_161
+                %x_181_save:i32 = let %124
+                %126:i32 = load %x_161
+                %127:ptr<function, i32, read_write> = access %tree, %126, 1u
+                %128:i32 = load %127
+                %129:bool = eq %128, -1i
+                if %129 [t: $B46, f: $B47] {  # if_18
+                  $B46: {  # true
+                    %130:ptr<function, i32, read_write> = access %tree, %x_181_save, 1u
+                    store %130, 4i
+                    %131:ptr<function, BST, read_write> = access %tree, 4i
+                    store %131, BST(7i, -1i, -1i)
+                    store %x_189, true
+                    exit_loop  # loop_4
+                  }
+                  $B47: {  # false
+                    %132:ptr<function, i32, read_write> = access %tree, %x_181_save, 1u
+                    %133:i32 = load %132
+                    store %x_187, %133
+                    %134:i32 = load %x_187
+                    store %x_162, %134
+                    continue  # -> $B41
+                  }
+                }
+                exit_if  # if_17
+              }
+              $B45: {  # false
+                %135:i32 = load %x_161
+                %x_173_save:i32 = let %135
+                %137:i32 = load %x_161
+                %138:ptr<function, i32, read_write> = access %tree, %137, 2u
+                %139:i32 = load %138
+                %140:bool = eq %139, -1i
+                if %140 [t: $B48, f: $B49] {  # if_19
+                  $B48: {  # true
+                    %141:ptr<function, i32, read_write> = access %tree, %x_173_save, 2u
+                    store %141, 4i
+                    %142:ptr<function, BST, read_write> = access %tree, 4i
+                    store %142, BST(7i, -1i, -1i)
+                    store %x_189, true
+                    exit_loop  # loop_4
+                  }
+                  $B49: {  # false
+                    %143:ptr<function, i32, read_write> = access %tree, %x_173_save, 2u
+                    %144:i32 = load %143
+                    store %x_179, %144
+                    %145:i32 = load %x_179
+                    store %x_162, %145
+                    continue  # -> $B41
+                  }
+                }
+                exit_if  # if_17
+              }
+            }
+            unreachable
+          }
+          $B41: {  # continuing
+            %146:i32 = load %x_162
+            store %x_161, %146
+            next_iteration  # -> $B40
+          }
+        }
+        %147:bool = load %x_189
+        if %147 [t: $B50] {  # if_20
+          $B50: {  # true
+            exit_switch  # switch_4
+          }
+        }
+        exit_switch  # switch_4
+      }
+    }
+    %x_194:ptr<function, i32, read_write> = var
+    %x_222:ptr<function, bool, read_write> = var
+    switch 0u [c: (default, $B51)] {  # switch_5
+      $B51: {  # case
+        store %x_194, 0i
+        loop [b: $B52, c: $B53] {  # loop_5
+          $B52: {  # body
+            %x_220:ptr<function, i32, read_write> = var
+            %x_212:ptr<function, i32, read_write> = var
+            %x_195:ptr<function, i32, read_write> = var
+            store %x_222, false
+            %153:i32 = load %x_194
+            %154:bool = lte %153, 5i
+            if %154 [t: $B54, f: $B55] {  # if_21
+              $B54: {  # true
+                exit_if  # if_21
+              }
+              $B55: {  # false
+                exit_loop  # loop_5
+              }
+            }
+            %155:i32 = load %x_194
+            %156:ptr<function, i32, read_write> = access %tree, %155, 0u
+            %157:i32 = load %156
+            %158:bool = lte 8i, %157
+            if %158 [t: $B56, f: $B57] {  # if_22
+              $B56: {  # true
+                %159:i32 = load %x_194
+                %x_214_save:i32 = let %159
+                %161:i32 = load %x_194
+                %162:ptr<function, i32, read_write> = access %tree, %161, 1u
+                %163:i32 = load %162
+                %164:bool = eq %163, -1i
+                if %164 [t: $B58, f: $B59] {  # if_23
+                  $B58: {  # true
+                    %165:ptr<function, i32, read_write> = access %tree, %x_214_save, 1u
+                    store %165, 5i
+                    %166:ptr<function, BST, read_write> = access %tree, 5i
+                    store %166, BST(8i, -1i, -1i)
+                    store %x_222, true
+                    exit_loop  # loop_5
+                  }
+                  $B59: {  # false
+                    %167:ptr<function, i32, read_write> = access %tree, %x_214_save, 1u
+                    %168:i32 = load %167
+                    store %x_220, %168
+                    %169:i32 = load %x_220
+                    store %x_195, %169
+                    continue  # -> $B53
+                  }
+                }
+                exit_if  # if_22
+              }
+              $B57: {  # false
+                %170:i32 = load %x_194
+                %x_206_save:i32 = let %170
+                %172:i32 = load %x_194
+                %173:ptr<function, i32, read_write> = access %tree, %172, 2u
+                %174:i32 = load %173
+                %175:bool = eq %174, -1i
+                if %175 [t: $B60, f: $B61] {  # if_24
+                  $B60: {  # true
+                    %176:ptr<function, i32, read_write> = access %tree, %x_206_save, 2u
+                    store %176, 5i
+                    %177:ptr<function, BST, read_write> = access %tree, 5i
+                    store %177, BST(8i, -1i, -1i)
+                    store %x_222, true
+                    exit_loop  # loop_5
+                  }
+                  $B61: {  # false
+                    %178:ptr<function, i32, read_write> = access %tree, %x_206_save, 2u
+                    %179:i32 = load %178
+                    store %x_212, %179
+                    %180:i32 = load %x_212
+                    store %x_195, %180
+                    continue  # -> $B53
+                  }
+                }
+                exit_if  # if_22
+              }
+            }
+            unreachable
+          }
+          $B53: {  # continuing
+            %181:i32 = load %x_195
+            store %x_194, %181
+            next_iteration  # -> $B52
+          }
+        }
+        %182:bool = load %x_222
+        if %182 [t: $B62] {  # if_25
+          $B62: {  # true
+            exit_switch  # switch_5
+          }
+        }
+        exit_switch  # switch_5
+      }
+    }
+    %x_227:ptr<function, i32, read_write> = var
+    %x_255:ptr<function, bool, read_write> = var
+    switch 0u [c: (default, $B63)] {  # switch_6
+      $B63: {  # case
+        store %x_227, 0i
+        loop [b: $B64, c: $B65] {  # loop_6
+          $B64: {  # body
+            %x_253:ptr<function, i32, read_write> = var
+            %x_245:ptr<function, i32, read_write> = var
+            %x_228:ptr<function, i32, read_write> = var
+            store %x_255, false
+            %188:i32 = load %x_227
+            %189:bool = lte %188, 6i
+            if %189 [t: $B66, f: $B67] {  # if_26
+              $B66: {  # true
+                exit_if  # if_26
+              }
+              $B67: {  # false
+                exit_loop  # loop_6
+              }
+            }
+            %190:i32 = load %x_227
+            %191:ptr<function, i32, read_write> = access %tree, %190, 0u
+            %192:i32 = load %191
+            %193:bool = lte 2i, %192
+            if %193 [t: $B68, f: $B69] {  # if_27
+              $B68: {  # true
+                %194:i32 = load %x_227
+                %x_247_save:i32 = let %194
+                %196:i32 = load %x_227
+                %197:ptr<function, i32, read_write> = access %tree, %196, 1u
+                %198:i32 = load %197
+                %199:bool = eq %198, -1i
+                if %199 [t: $B70, f: $B71] {  # if_28
+                  $B70: {  # true
+                    %200:ptr<function, i32, read_write> = access %tree, %x_247_save, 1u
+                    store %200, 6i
+                    %201:ptr<function, BST, read_write> = access %tree, 6i
+                    store %201, BST(2i, -1i, -1i)
+                    store %x_255, true
+                    exit_loop  # loop_6
+                  }
+                  $B71: {  # false
+                    %202:ptr<function, i32, read_write> = access %tree, %x_247_save, 1u
+                    %203:i32 = load %202
+                    store %x_253, %203
+                    %204:i32 = load %x_253
+                    store %x_228, %204
+                    continue  # -> $B65
+                  }
+                }
+                exit_if  # if_27
+              }
+              $B69: {  # false
+                %205:i32 = load %x_227
+                %x_239_save:i32 = let %205
+                %207:i32 = load %x_227
+                %208:ptr<function, i32, read_write> = access %tree, %207, 2u
+                %209:i32 = load %208
+                %210:bool = eq %209, -1i
+                if %210 [t: $B72, f: $B73] {  # if_29
+                  $B72: {  # true
+                    %211:ptr<function, i32, read_write> = access %tree, %x_239_save, 2u
+                    store %211, 6i
+                    %212:ptr<function, BST, read_write> = access %tree, 6i
+                    store %212, BST(2i, -1i, -1i)
+                    store %x_255, true
+                    exit_loop  # loop_6
+                  }
+                  $B73: {  # false
+                    %213:ptr<function, i32, read_write> = access %tree, %x_239_save, 2u
+                    %214:i32 = load %213
+                    store %x_245, %214
+                    %215:i32 = load %x_245
+                    store %x_228, %215
+                    continue  # -> $B65
+                  }
+                }
+                exit_if  # if_27
+              }
+            }
+            unreachable
+          }
+          $B65: {  # continuing
+            %216:i32 = load %x_228
+            store %x_227, %216
+            next_iteration  # -> $B64
+          }
+        }
+        %217:bool = load %x_255
+        if %217 [t: $B74] {  # if_30
+          $B74: {  # true
+            exit_switch  # switch_6
+          }
+        }
+        exit_switch  # switch_6
+      }
+    }
+    %x_260:ptr<function, i32, read_write> = var
+    %x_288:ptr<function, bool, read_write> = var
+    switch 0u [c: (default, $B75)] {  # switch_7
+      $B75: {  # case
+        store %x_260, 0i
+        loop [b: $B76, c: $B77] {  # loop_7
+          $B76: {  # body
+            %x_286:ptr<function, i32, read_write> = var
+            %x_278:ptr<function, i32, read_write> = var
+            %x_261:ptr<function, i32, read_write> = var
+            store %x_288, false
+            %223:i32 = load %x_260
+            %224:bool = lte %223, 7i
+            if %224 [t: $B78, f: $B79] {  # if_31
+              $B78: {  # true
+                exit_if  # if_31
+              }
+              $B79: {  # false
+                exit_loop  # loop_7
+              }
+            }
+            %225:i32 = load %x_260
+            %226:ptr<function, i32, read_write> = access %tree, %225, 0u
+            %227:i32 = load %226
+            %228:bool = lte 6i, %227
+            if %228 [t: $B80, f: $B81] {  # if_32
+              $B80: {  # true
+                %229:i32 = load %x_260
+                %x_280_save:i32 = let %229
+                %231:i32 = load %x_260
+                %232:ptr<function, i32, read_write> = access %tree, %231, 1u
+                %233:i32 = load %232
+                %234:bool = eq %233, -1i
+                if %234 [t: $B82, f: $B83] {  # if_33
+                  $B82: {  # true
+                    %235:ptr<function, i32, read_write> = access %tree, %x_280_save, 1u
+                    store %235, 7i
+                    %236:ptr<function, BST, read_write> = access %tree, 7i
+                    store %236, BST(6i, -1i, -1i)
+                    store %x_288, true
+                    exit_loop  # loop_7
+                  }
+                  $B83: {  # false
+                    %237:ptr<function, i32, read_write> = access %tree, %x_280_save, 1u
+                    %238:i32 = load %237
+                    store %x_286, %238
+                    %239:i32 = load %x_286
+                    store %x_261, %239
+                    continue  # -> $B77
+                  }
+                }
+                exit_if  # if_32
+              }
+              $B81: {  # false
+                %240:i32 = load %x_260
+                %x_272_save:i32 = let %240
+                %242:i32 = load %x_260
+                %243:ptr<function, i32, read_write> = access %tree, %242, 2u
+                %244:i32 = load %243
+                %245:bool = eq %244, -1i
+                if %245 [t: $B84, f: $B85] {  # if_34
+                  $B84: {  # true
+                    %246:ptr<function, i32, read_write> = access %tree, %x_272_save, 2u
+                    store %246, 7i
+                    %247:ptr<function, BST, read_write> = access %tree, 7i
+                    store %247, BST(6i, -1i, -1i)
+                    store %x_288, true
+                    exit_loop  # loop_7
+                  }
+                  $B85: {  # false
+                    %248:ptr<function, i32, read_write> = access %tree, %x_272_save, 2u
+                    %249:i32 = load %248
+                    store %x_278, %249
+                    %250:i32 = load %x_278
+                    store %x_261, %250
+                    continue  # -> $B77
+                  }
+                }
+                exit_if  # if_32
+              }
+            }
+            unreachable
+          }
+          $B77: {  # continuing
+            %251:i32 = load %x_261
+            store %x_260, %251
+            next_iteration  # -> $B76
+          }
+        }
+        %252:bool = load %x_288
+        if %252 [t: $B86] {  # if_35
+          $B86: {  # true
+            exit_switch  # switch_7
+          }
+        }
+        exit_switch  # switch_7
+      }
+    }
+    %x_293:ptr<function, i32, read_write> = var
+    %x_321:ptr<function, bool, read_write> = var
+    switch 0u [c: (default, $B87)] {  # switch_8
+      $B87: {  # case
+        store %x_293, 0i
+        loop [b: $B88, c: $B89] {  # loop_8
+          $B88: {  # body
+            %x_319:ptr<function, i32, read_write> = var
+            %x_311:ptr<function, i32, read_write> = var
+            %x_294:ptr<function, i32, read_write> = var
+            store %x_321, false
+            %258:i32 = load %x_293
+            %259:bool = lte %258, 8i
+            if %259 [t: $B90, f: $B91] {  # if_36
+              $B90: {  # true
+                exit_if  # if_36
+              }
+              $B91: {  # false
+                exit_loop  # loop_8
+              }
+            }
+            %260:i32 = load %x_293
+            %261:ptr<function, i32, read_write> = access %tree, %260, 0u
+            %262:i32 = load %261
+            %263:bool = lte 17i, %262
+            if %263 [t: $B92, f: $B93] {  # if_37
+              $B92: {  # true
+                %264:i32 = load %x_293
+                %x_313_save:i32 = let %264
+                %266:i32 = load %x_293
+                %267:ptr<function, i32, read_write> = access %tree, %266, 1u
+                %268:i32 = load %267
+                %269:bool = eq %268, -1i
+                if %269 [t: $B94, f: $B95] {  # if_38
+                  $B94: {  # true
+                    %270:ptr<function, i32, read_write> = access %tree, %x_313_save, 1u
+                    store %270, 8i
+                    %271:ptr<function, BST, read_write> = access %tree, 8i
+                    store %271, BST(17i, -1i, -1i)
+                    store %x_321, true
+                    exit_loop  # loop_8
+                  }
+                  $B95: {  # false
+                    %272:ptr<function, i32, read_write> = access %tree, %x_313_save, 1u
+                    %273:i32 = load %272
+                    store %x_319, %273
+                    %274:i32 = load %x_319
+                    store %x_294, %274
+                    continue  # -> $B89
+                  }
+                }
+                exit_if  # if_37
+              }
+              $B93: {  # false
+                %275:i32 = load %x_293
+                %x_305_save:i32 = let %275
+                %277:i32 = load %x_293
+                %278:ptr<function, i32, read_write> = access %tree, %277, 2u
+                %279:i32 = load %278
+                %280:bool = eq %279, -1i
+                if %280 [t: $B96, f: $B97] {  # if_39
+                  $B96: {  # true
+                    %281:ptr<function, i32, read_write> = access %tree, %x_305_save, 2u
+                    store %281, 8i
+                    %282:ptr<function, BST, read_write> = access %tree, 8i
+                    store %282, BST(17i, -1i, -1i)
+                    store %x_321, true
+                    exit_loop  # loop_8
+                  }
+                  $B97: {  # false
+                    %283:ptr<function, i32, read_write> = access %tree, %x_305_save, 2u
+                    %284:i32 = load %283
+                    store %x_311, %284
+                    %285:i32 = load %x_311
+                    store %x_294, %285
+                    continue  # -> $B89
+                  }
+                }
+                exit_if  # if_37
+              }
+            }
+            unreachable
+          }
+          $B89: {  # continuing
+            %286:i32 = load %x_294
+            store %x_293, %286
+            next_iteration  # -> $B88
+          }
+        }
+        %287:bool = load %x_321
+        if %287 [t: $B98] {  # if_40
+          $B98: {  # true
+            exit_switch  # switch_8
+          }
+        }
+        exit_switch  # switch_8
+      }
+    }
+    %x_326:ptr<function, i32, read_write> = var
+    %x_354:ptr<function, bool, read_write> = var
+    switch 0u [c: (default, $B99)] {  # switch_9
+      $B99: {  # case
+        store %x_326, 0i
+        loop [b: $B100, c: $B101] {  # loop_9
+          $B100: {  # body
+            %x_352:ptr<function, i32, read_write> = var
+            %x_344:ptr<function, i32, read_write> = var
+            %x_327:ptr<function, i32, read_write> = var
+            store %x_354, false
+            %293:i32 = load %x_326
+            %294:bool = lte %293, 9i
+            if %294 [t: $B102, f: $B103] {  # if_41
+              $B102: {  # true
+                exit_if  # if_41
+              }
+              $B103: {  # false
+                exit_loop  # loop_9
+              }
+            }
+            %295:i32 = load %x_326
+            %296:ptr<function, i32, read_write> = access %tree, %295, 0u
+            %297:i32 = load %296
+            %298:bool = lte 13i, %297
+            if %298 [t: $B104, f: $B105] {  # if_42
+              $B104: {  # true
+                %299:i32 = load %x_326
+                %x_346_save:i32 = let %299
+                %301:i32 = load %x_326
+                %302:ptr<function, i32, read_write> = access %tree, %301, 1u
+                %303:i32 = load %302
+                %304:bool = eq %303, -1i
+                if %304 [t: $B106, f: $B107] {  # if_43
+                  $B106: {  # true
+                    %305:ptr<function, i32, read_write> = access %tree, %x_346_save, 1u
+                    store %305, 9i
+                    %306:ptr<function, BST, read_write> = access %tree, 9i
+                    store %306, BST(13i, -1i, -1i)
+                    store %x_354, true
+                    exit_loop  # loop_9
+                  }
+                  $B107: {  # false
+                    %307:ptr<function, i32, read_write> = access %tree, %x_346_save, 1u
+                    %308:i32 = load %307
+                    store %x_352, %308
+                    %309:i32 = load %x_352
+                    store %x_327, %309
+                    continue  # -> $B101
+                  }
+                }
+                exit_if  # if_42
+              }
+              $B105: {  # false
+                %310:i32 = load %x_326
+                %x_338_save:i32 = let %310
+                %312:i32 = load %x_326
+                %313:ptr<function, i32, read_write> = access %tree, %312, 2u
+                %314:i32 = load %313
+                %315:bool = eq %314, -1i
+                if %315 [t: $B108, f: $B109] {  # if_44
+                  $B108: {  # true
+                    %316:ptr<function, i32, read_write> = access %tree, %x_338_save, 2u
+                    store %316, 9i
+                    %317:ptr<function, BST, read_write> = access %tree, 9i
+                    store %317, BST(13i, -1i, -1i)
+                    store %x_354, true
+                    exit_loop  # loop_9
+                  }
+                  $B109: {  # false
+                    %318:ptr<function, i32, read_write> = access %tree, %x_338_save, 2u
+                    %319:i32 = load %318
+                    store %x_344, %319
+                    %320:i32 = load %x_344
+                    store %x_327, %320
+                    continue  # -> $B101
+                  }
+                }
+                exit_if  # if_42
+              }
+            }
+            unreachable
+          }
+          $B101: {  # continuing
+            %321:i32 = load %x_327
+            store %x_326, %321
+            next_iteration  # -> $B100
+          }
+        }
+        %322:bool = load %x_354
+        if %322 [t: $B110] {  # if_45
+          $B110: {  # true
+            exit_switch  # switch_9
+          }
+        }
+        exit_switch  # switch_9
+      }
+    }
+    store %x_357, 0i
+    store %x_360, 0i
+    store %x_362, 0i
+    loop [b: $B111, c: $B112] {  # loop_10
+      $B111: {  # body
+        %x_392:ptr<function, i32, read_write> = var
+        %x_358:ptr<function, i32, read_write> = var
+        %x_402:ptr<function, i32, read_write> = var
+        %x_407:ptr<function, i32, read_write> = var
+        %x_361:ptr<function, i32, read_write> = var
+        %x_363:ptr<function, i32, read_write> = var
+        %x_365:i32 = let -9i
+        %330:i32 = load %x_362
+        %331:bool = lt %330, 20i
+        if %331 [t: $B113, f: $B114] {  # if_46
+          $B113: {  # true
+            exit_if  # if_46
+          }
+          $B114: {  # false
+            exit_loop  # loop_10
+          }
+        }
+        %x_374:ptr<function, i32, read_write> = var
+        %x_393:ptr<function, bool, read_write> = var
+        switch 0u [c: (default, $B115)] {  # switch_10
+          $B115: {  # case
+            store %x_374, 0i
+            loop [b: $B116, c: $B117] {  # loop_11
+              $B116: {  # body
+                %334:i32 = load %x_357
+                store %x_392, %334
+                store %x_393, false
+                %335:i32 = load %x_374
+                %336:bool = neq %335, -1i
+                if %336 [t: $B118, f: $B119] {  # if_47
+                  $B118: {  # true
+                    exit_if  # if_47
+                  }
+                  $B119: {  # false
+                    exit_loop  # loop_11
+                  }
+                }
+                %337:i32 = load %x_374
+                %338:ptr<function, BST, read_write> = access %tree, %337
+                %339:BST = load %338
+                %x_381:BST = let %339
+                %341:i32 = access %x_381, 0u
+                %x_382:i32 = let %341
+                %343:i32 = access %x_381, 1u
+                %x_383:i32 = let %343
+                %345:i32 = access %x_381, 2u
+                %x_385:i32 = let %345
+                %347:i32 = load %x_362
+                %348:bool = eq %x_382, %347
+                if %348 [t: $B120] {  # if_48
+                  $B120: {  # true
+                    %349:i32 = load %x_362
+                    store %x_392, %349
+                    store %x_393, true
+                    exit_loop  # loop_11
+                  }
+                }
+                %350:f32 = load_vector_element %x_GLF_color, 3u
+                %x_389:f32 = let %350
+                continue  # -> $B117
+              }
+              $B117: {  # continuing
+                %352:i32 = load %x_362
+                %353:bool = lte %352, %x_382
+                %354:bool = eq %353, false
+                %355:i32 = select %x_383, %x_385, %354
+                store %x_374, %355
+                next_iteration  # -> $B116
+              }
+            }
+            %356:i32 = load %x_392
+            store %x_358, %356
+            %357:bool = load %x_393
+            if %357 [t: $B121] {  # if_49
+              $B121: {  # true
+                exit_switch  # switch_10
+              }
+            }
+            store %x_358, -1i
+            exit_switch  # switch_10
+          }
+        }
+        %x_401:ptr<function, i32, read_write> = var
+        %x_406:ptr<function, i32, read_write> = var
+        %360:i32 = load %x_362
+        switch %360 [c: (2i 5i 6i 7i 8i 9i 12i 13i 15i 17i, $B122), c: (default, $B123)] {  # switch_11
+          $B122: {  # case
+            %361:i32 = load %x_360
+            store %x_402, %361
+            %362:i32 = load %x_358
+            %363:i32 = load %x_362
+            %364:bool = eq %362, %363
+            if %364 [t: $B124] {  # if_50
+              $B124: {  # true
+                %365:i32 = load %x_360
+                %366:i32 = add %365, 1i
+                store %x_401, %366
+                %367:i32 = load %x_401
+                store %x_402, %367
+                exit_if  # if_50
+              }
+            }
+            %368:i32 = load %x_402
+            store %x_361, %368
+            exit_switch  # switch_11
+          }
+          $B123: {  # case
+            %369:i32 = load %x_360
+            store %x_407, %369
+            %370:i32 = load %x_358
+            %371:bool = eq %370, -1i
+            if %371 [t: $B125] {  # if_51
+              $B125: {  # true
+                %372:i32 = load %x_360
+                %373:i32 = add %372, 1i
+                store %x_406, %373
+                %374:i32 = load %x_406
+                store %x_407, %374
+                exit_if  # if_51
+              }
+            }
+            %375:i32 = load %x_407
+            store %x_361, %375
+            exit_switch  # switch_11
+          }
+        }
+        continue  # -> $B112
+      }
+      $B112: {  # continuing
+        %376:i32 = load %x_362
+        %377:i32 = add %376, 1i
+        store %x_363, %377
+        %378:i32 = load %x_358
+        store %x_357, %378
+        %379:i32 = load %x_361
+        store %x_360, %379
+        %380:i32 = load %x_363
+        store %x_362, %380
+        next_iteration  # -> $B111
+      }
+    }
+    %381:i32 = load %x_360
+    %382:bool = eq %381, 20i
+    if %382 [t: $B126, f: $B127] {  # if_52
+      $B126: {  # true
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        exit_if  # if_52
+      }
+      $B127: {  # false
+        store %x_GLF_color, vec4<f32>(0.0f, 0.0f, 1.0f, 1.0f)
+        exit_if  # if_52
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B128: {
+    %384:void = call %main_1
+    %385:vec4<f32> = load %x_GLF_color
+    %386:main_out = construct %385
+    ret %386
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-load-from-frag-color/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-load-from-frag-color/1.wgsl.expected.ir.msl
index 28251dc..4b1d489 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-load-from-frag-color/1.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-load-from-frag-color/1.wgsl.expected.ir.msl
@@ -1,6 +1,1124 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: BST = struct @align(4) {
+  data:i32 @offset(0)
+  leftIndex:i32 @offset(4)
+  rightIndex:i32 @offset(8)
+}
+
+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
+}
+
+%main_1 = func():void {
+  $B2: {
+    %tree:ptr<function, array<BST, 10>, read_write> = var
+    %x_360:ptr<function, i32, read_write> = var
+    %x_62_phi:ptr<function, i32, read_write> = var
+    %x_90_phi:ptr<function, bool, read_write> = var
+    %x_357_phi:ptr<function, i32, read_write> = var
+    %x_360_phi:ptr<function, i32, read_write> = var
+    %x_362_phi:ptr<function, i32, read_write> = var
+    %10:ptr<function, BST, read_write> = access %tree, 0i
+    store %10, BST(9i, -1i, -1i)
+    switch 0u [c: (default, $B3)] {  # switch_1
+      $B3: {  # case
+        store %x_62_phi, 0i
+        loop [b: $B4, c: $B5] {  # loop_1
+          $B4: {  # body
+            %x_88:ptr<function, i32, read_write> = var
+            %x_80:ptr<function, i32, read_write> = var
+            %x_63:ptr<function, i32, read_write> = var
+            %x_63_phi:ptr<function, i32, read_write> = var
+            %15:i32 = load %x_62_phi
+            %x_62:i32 = let %15
+            store %x_90_phi, false
+            %17:bool = lte %x_62, 1i
+            if %17 [t: $B6, f: $B7] {  # if_1
+              $B6: {  # true
+                exit_if  # if_1
+              }
+              $B7: {  # false
+                exit_loop  # loop_1
+              }
+            }
+            %18:ptr<function, i32, read_write> = access %tree, %x_62, 0u
+            %19:i32 = load %18
+            %x_69:i32 = let %19
+            %21:bool = lte 5i, %x_69
+            if %21 [t: $B8, f: $B9] {  # if_2
+              $B8: {  # true
+                %x_82_save:i32 = let %x_62
+                %23:ptr<function, i32, read_write> = access %tree, %x_82_save, 1u
+                %24:i32 = load %23
+                %x_83:i32 = let %24
+                %26:bool = eq %x_83, -1i
+                if %26 [t: $B10, f: $B11] {  # if_3
+                  $B10: {  # true
+                    %27:ptr<function, i32, read_write> = access %tree, %x_82_save, 1u
+                    store %27, 1i
+                    %28:ptr<function, BST, read_write> = access %tree, 1i
+                    store %28, BST(5i, -1i, -1i)
+                    store %x_90_phi, true
+                    exit_loop  # loop_1
+                  }
+                  $B11: {  # false
+                    %29:ptr<function, i32, read_write> = access %tree, %x_82_save, 1u
+                    %30:i32 = load %29
+                    store %x_88, %30
+                    %31:i32 = load %x_88
+                    store %x_63_phi, %31
+                    continue  # -> $B5
+                  }
+                }
+                exit_if  # if_2
+              }
+              $B9: {  # false
+                %x_74_save:i32 = let %x_62
+                %33:ptr<function, i32, read_write> = access %tree, %x_74_save, 2u
+                %34:i32 = load %33
+                %x_75:i32 = let %34
+                %36:bool = eq %x_75, -1i
+                if %36 [t: $B12, f: $B13] {  # if_4
+                  $B12: {  # true
+                    %37:ptr<function, i32, read_write> = access %tree, %x_74_save, 2u
+                    store %37, 1i
+                    %38:ptr<function, BST, read_write> = access %tree, 1i
+                    store %38, BST(5i, -1i, -1i)
+                    store %x_90_phi, true
+                    exit_loop  # loop_1
+                  }
+                  $B13: {  # false
+                    %39:ptr<function, i32, read_write> = access %tree, %x_74_save, 2u
+                    %40:i32 = load %39
+                    store %x_80, %40
+                    %41:i32 = load %x_80
+                    store %x_63_phi, %41
+                    continue  # -> $B5
+                  }
+                }
+                exit_if  # if_2
+              }
+            }
+            unreachable
+          }
+          $B5: {  # continuing
+            %42:i32 = load %x_63_phi
+            store %x_63, %42
+            %43:i32 = load %x_63
+            store %x_62_phi, %43
+            next_iteration  # -> $B4
+          }
+        }
+        %44:bool = load %x_90_phi
+        %x_90:bool = let %44
+        if %x_90 [t: $B14] {  # if_5
+          $B14: {  # true
+            exit_switch  # switch_1
+          }
+        }
+        exit_switch  # switch_1
+      }
+    }
+    %x_95_phi:ptr<function, i32, read_write> = var
+    %x_123_phi:ptr<function, bool, read_write> = var
+    switch 0u [c: (default, $B15)] {  # switch_2
+      $B15: {  # case
+        store %x_95_phi, 0i
+        loop [b: $B16, c: $B17] {  # loop_2
+          $B16: {  # body
+            %x_121:ptr<function, i32, read_write> = var
+            %x_113:ptr<function, i32, read_write> = var
+            %x_96:ptr<function, i32, read_write> = var
+            %x_96_phi:ptr<function, i32, read_write> = var
+            %52:i32 = load %x_95_phi
+            %x_95:i32 = let %52
+            store %x_123_phi, false
+            %54:bool = lte %x_95, 2i
+            if %54 [t: $B18, f: $B19] {  # if_6
+              $B18: {  # true
+                exit_if  # if_6
+              }
+              $B19: {  # false
+                exit_loop  # loop_2
+              }
+            }
+            %55:ptr<function, i32, read_write> = access %tree, %x_95, 0u
+            %56:i32 = load %55
+            %x_102:i32 = let %56
+            %58:bool = lte 12i, %x_102
+            if %58 [t: $B20, f: $B21] {  # if_7
+              $B20: {  # true
+                %x_115_save:i32 = let %x_95
+                %60:ptr<function, i32, read_write> = access %tree, %x_115_save, 1u
+                %61:i32 = load %60
+                %x_116:i32 = let %61
+                %63:bool = eq %x_116, -1i
+                if %63 [t: $B22, f: $B23] {  # if_8
+                  $B22: {  # true
+                    %64:ptr<function, i32, read_write> = access %tree, %x_115_save, 1u
+                    store %64, 2i
+                    %65:ptr<function, BST, read_write> = access %tree, 2i
+                    store %65, BST(12i, -1i, -1i)
+                    store %x_123_phi, true
+                    exit_loop  # loop_2
+                  }
+                  $B23: {  # false
+                    %66:ptr<function, i32, read_write> = access %tree, %x_115_save, 1u
+                    %67:i32 = load %66
+                    store %x_121, %67
+                    %68:i32 = load %x_121
+                    store %x_96_phi, %68
+                    continue  # -> $B17
+                  }
+                }
+                exit_if  # if_7
+              }
+              $B21: {  # false
+                %x_107_save:i32 = let %x_95
+                %70:ptr<function, i32, read_write> = access %tree, %x_107_save, 2u
+                %71:i32 = load %70
+                %x_108:i32 = let %71
+                %73:bool = eq %x_108, -1i
+                if %73 [t: $B24, f: $B25] {  # if_9
+                  $B24: {  # true
+                    %74:ptr<function, i32, read_write> = access %tree, %x_107_save, 2u
+                    store %74, 2i
+                    %75:ptr<function, BST, read_write> = access %tree, 2i
+                    store %75, BST(12i, -1i, -1i)
+                    store %x_123_phi, true
+                    exit_loop  # loop_2
+                  }
+                  $B25: {  # false
+                    %76:ptr<function, i32, read_write> = access %tree, %x_107_save, 2u
+                    %77:i32 = load %76
+                    store %x_113, %77
+                    %78:i32 = load %x_113
+                    store %x_96_phi, %78
+                    continue  # -> $B17
+                  }
+                }
+                exit_if  # if_7
+              }
+            }
+            unreachable
+          }
+          $B17: {  # continuing
+            %79:i32 = load %x_96_phi
+            store %x_96, %79
+            %80:i32 = load %x_96
+            store %x_95_phi, %80
+            next_iteration  # -> $B16
+          }
+        }
+        %81:bool = load %x_123_phi
+        %x_123:bool = let %81
+        if %x_123 [t: $B26] {  # if_10
+          $B26: {  # true
+            exit_switch  # switch_2
+          }
+        }
+        exit_switch  # switch_2
+      }
+    }
+    %x_128_phi:ptr<function, i32, read_write> = var
+    %x_156_phi:ptr<function, bool, read_write> = var
+    switch 0u [c: (default, $B27)] {  # switch_3
+      $B27: {  # case
+        store %x_128_phi, 0i
+        loop [b: $B28, c: $B29] {  # loop_3
+          $B28: {  # body
+            %x_154:ptr<function, i32, read_write> = var
+            %x_146:ptr<function, i32, read_write> = var
+            %x_129:ptr<function, i32, read_write> = var
+            %x_129_phi:ptr<function, i32, read_write> = var
+            %89:i32 = load %x_128_phi
+            %x_128:i32 = let %89
+            store %x_156_phi, false
+            %91:bool = lte %x_128, 3i
+            if %91 [t: $B30, f: $B31] {  # if_11
+              $B30: {  # true
+                exit_if  # if_11
+              }
+              $B31: {  # false
+                exit_loop  # loop_3
+              }
+            }
+            %92:ptr<function, i32, read_write> = access %tree, %x_128, 0u
+            %93:i32 = load %92
+            %x_135:i32 = let %93
+            %95:bool = lte 15i, %x_135
+            if %95 [t: $B32, f: $B33] {  # if_12
+              $B32: {  # true
+                %x_148_save:i32 = let %x_128
+                %97:ptr<function, i32, read_write> = access %tree, %x_148_save, 1u
+                %98:i32 = load %97
+                %x_149:i32 = let %98
+                %100:bool = eq %x_149, -1i
+                if %100 [t: $B34, f: $B35] {  # if_13
+                  $B34: {  # true
+                    %101:ptr<function, i32, read_write> = access %tree, %x_148_save, 1u
+                    store %101, 3i
+                    %102:ptr<function, BST, read_write> = access %tree, 3i
+                    store %102, BST(15i, -1i, -1i)
+                    store %x_156_phi, true
+                    exit_loop  # loop_3
+                  }
+                  $B35: {  # false
+                    %103:ptr<function, i32, read_write> = access %tree, %x_148_save, 1u
+                    %104:i32 = load %103
+                    store %x_154, %104
+                    %105:i32 = load %x_154
+                    store %x_129_phi, %105
+                    continue  # -> $B29
+                  }
+                }
+                exit_if  # if_12
+              }
+              $B33: {  # false
+                %x_140_save:i32 = let %x_128
+                %107:ptr<function, i32, read_write> = access %tree, %x_140_save, 2u
+                %108:i32 = load %107
+                %x_141:i32 = let %108
+                %110:bool = eq %x_141, -1i
+                if %110 [t: $B36, f: $B37] {  # if_14
+                  $B36: {  # true
+                    %111:ptr<function, i32, read_write> = access %tree, %x_140_save, 2u
+                    store %111, 3i
+                    %112:ptr<function, BST, read_write> = access %tree, 3i
+                    store %112, BST(15i, -1i, -1i)
+                    store %x_156_phi, true
+                    exit_loop  # loop_3
+                  }
+                  $B37: {  # false
+                    %113:ptr<function, i32, read_write> = access %tree, %x_140_save, 2u
+                    %114:i32 = load %113
+                    store %x_146, %114
+                    %115:i32 = load %x_146
+                    store %x_129_phi, %115
+                    continue  # -> $B29
+                  }
+                }
+                exit_if  # if_12
+              }
+            }
+            unreachable
+          }
+          $B29: {  # continuing
+            %116:i32 = load %x_129_phi
+            store %x_129, %116
+            %117:i32 = load %x_129
+            store %x_128_phi, %117
+            next_iteration  # -> $B28
+          }
+        }
+        %118:bool = load %x_156_phi
+        %x_156:bool = let %118
+        if %x_156 [t: $B38] {  # if_15
+          $B38: {  # true
+            exit_switch  # switch_3
+          }
+        }
+        exit_switch  # switch_3
+      }
+    }
+    %x_161_phi:ptr<function, i32, read_write> = var
+    %x_189_phi:ptr<function, bool, read_write> = var
+    switch 0u [c: (default, $B39)] {  # switch_4
+      $B39: {  # case
+        store %x_161_phi, 0i
+        loop [b: $B40, c: $B41] {  # loop_4
+          $B40: {  # body
+            %x_187:ptr<function, i32, read_write> = var
+            %x_179:ptr<function, i32, read_write> = var
+            %x_162:ptr<function, i32, read_write> = var
+            %x_162_phi:ptr<function, i32, read_write> = var
+            %126:i32 = load %x_161_phi
+            %x_161:i32 = let %126
+            store %x_189_phi, false
+            %128:bool = lte %x_161, 4i
+            if %128 [t: $B42, f: $B43] {  # if_16
+              $B42: {  # true
+                exit_if  # if_16
+              }
+              $B43: {  # false
+                exit_loop  # loop_4
+              }
+            }
+            %129:ptr<function, i32, read_write> = access %tree, %x_161, 0u
+            %130:i32 = load %129
+            %x_168:i32 = let %130
+            %132:bool = lte 7i, %x_168
+            if %132 [t: $B44, f: $B45] {  # if_17
+              $B44: {  # true
+                %x_181_save:i32 = let %x_161
+                %134:ptr<function, i32, read_write> = access %tree, %x_181_save, 1u
+                %135:i32 = load %134
+                %x_182:i32 = let %135
+                %137:bool = eq %x_182, -1i
+                if %137 [t: $B46, f: $B47] {  # if_18
+                  $B46: {  # true
+                    %138:ptr<function, i32, read_write> = access %tree, %x_181_save, 1u
+                    store %138, 4i
+                    %139:ptr<function, BST, read_write> = access %tree, 4i
+                    store %139, BST(7i, -1i, -1i)
+                    store %x_189_phi, true
+                    exit_loop  # loop_4
+                  }
+                  $B47: {  # false
+                    %140:ptr<function, i32, read_write> = access %tree, %x_181_save, 1u
+                    %141:i32 = load %140
+                    store %x_187, %141
+                    %142:i32 = load %x_187
+                    store %x_162_phi, %142
+                    continue  # -> $B41
+                  }
+                }
+                exit_if  # if_17
+              }
+              $B45: {  # false
+                %x_173_save:i32 = let %x_161
+                %144:ptr<function, i32, read_write> = access %tree, %x_173_save, 2u
+                %145:i32 = load %144
+                %x_174:i32 = let %145
+                %147:bool = eq %x_174, -1i
+                if %147 [t: $B48, f: $B49] {  # if_19
+                  $B48: {  # true
+                    %148:ptr<function, i32, read_write> = access %tree, %x_173_save, 2u
+                    store %148, 4i
+                    %149:ptr<function, BST, read_write> = access %tree, 4i
+                    store %149, BST(7i, -1i, -1i)
+                    store %x_189_phi, true
+                    exit_loop  # loop_4
+                  }
+                  $B49: {  # false
+                    %150:ptr<function, i32, read_write> = access %tree, %x_173_save, 2u
+                    %151:i32 = load %150
+                    store %x_179, %151
+                    %152:i32 = load %x_179
+                    store %x_162_phi, %152
+                    continue  # -> $B41
+                  }
+                }
+                exit_if  # if_17
+              }
+            }
+            unreachable
+          }
+          $B41: {  # continuing
+            %153:i32 = load %x_162_phi
+            store %x_162, %153
+            %154:i32 = load %x_162
+            store %x_161_phi, %154
+            next_iteration  # -> $B40
+          }
+        }
+        %155:bool = load %x_189_phi
+        %x_189:bool = let %155
+        if %x_189 [t: $B50] {  # if_20
+          $B50: {  # true
+            exit_switch  # switch_4
+          }
+        }
+        exit_switch  # switch_4
+      }
+    }
+    %x_194_phi:ptr<function, i32, read_write> = var
+    %x_222_phi:ptr<function, bool, read_write> = var
+    switch 0u [c: (default, $B51)] {  # switch_5
+      $B51: {  # case
+        store %x_194_phi, 0i
+        loop [b: $B52, c: $B53] {  # loop_5
+          $B52: {  # body
+            %x_220:ptr<function, i32, read_write> = var
+            %x_212:ptr<function, i32, read_write> = var
+            %x_195:ptr<function, i32, read_write> = var
+            %x_195_phi:ptr<function, i32, read_write> = var
+            %163:i32 = load %x_194_phi
+            %x_194:i32 = let %163
+            store %x_222_phi, false
+            %165:bool = lte %x_194, 5i
+            if %165 [t: $B54, f: $B55] {  # if_21
+              $B54: {  # true
+                exit_if  # if_21
+              }
+              $B55: {  # false
+                exit_loop  # loop_5
+              }
+            }
+            %166:ptr<function, i32, read_write> = access %tree, %x_194, 0u
+            %167:i32 = load %166
+            %x_201:i32 = let %167
+            %169:bool = lte 8i, %x_201
+            if %169 [t: $B56, f: $B57] {  # if_22
+              $B56: {  # true
+                %x_214_save:i32 = let %x_194
+                %171:ptr<function, i32, read_write> = access %tree, %x_214_save, 1u
+                %172:i32 = load %171
+                %x_215:i32 = let %172
+                %174:bool = eq %x_215, -1i
+                if %174 [t: $B58, f: $B59] {  # if_23
+                  $B58: {  # true
+                    %175:ptr<function, i32, read_write> = access %tree, %x_214_save, 1u
+                    store %175, 5i
+                    %176:ptr<function, BST, read_write> = access %tree, 5i
+                    store %176, BST(8i, -1i, -1i)
+                    store %x_222_phi, true
+                    exit_loop  # loop_5
+                  }
+                  $B59: {  # false
+                    %177:ptr<function, i32, read_write> = access %tree, %x_214_save, 1u
+                    %178:i32 = load %177
+                    store %x_220, %178
+                    %179:i32 = load %x_220
+                    store %x_195_phi, %179
+                    continue  # -> $B53
+                  }
+                }
+                exit_if  # if_22
+              }
+              $B57: {  # false
+                %x_206_save:i32 = let %x_194
+                %181:ptr<function, i32, read_write> = access %tree, %x_206_save, 2u
+                %182:i32 = load %181
+                %x_207:i32 = let %182
+                %184:bool = eq %x_207, -1i
+                if %184 [t: $B60, f: $B61] {  # if_24
+                  $B60: {  # true
+                    %185:ptr<function, i32, read_write> = access %tree, %x_206_save, 2u
+                    store %185, 5i
+                    %186:ptr<function, BST, read_write> = access %tree, 5i
+                    store %186, BST(8i, -1i, -1i)
+                    store %x_222_phi, true
+                    exit_loop  # loop_5
+                  }
+                  $B61: {  # false
+                    %187:ptr<function, i32, read_write> = access %tree, %x_206_save, 2u
+                    %188:i32 = load %187
+                    store %x_212, %188
+                    %189:i32 = load %x_212
+                    store %x_195_phi, %189
+                    continue  # -> $B53
+                  }
+                }
+                exit_if  # if_22
+              }
+            }
+            unreachable
+          }
+          $B53: {  # continuing
+            %190:i32 = load %x_195_phi
+            store %x_195, %190
+            %191:i32 = load %x_195
+            store %x_194_phi, %191
+            next_iteration  # -> $B52
+          }
+        }
+        %192:bool = load %x_222_phi
+        %x_222:bool = let %192
+        if %x_222 [t: $B62] {  # if_25
+          $B62: {  # true
+            exit_switch  # switch_5
+          }
+        }
+        exit_switch  # switch_5
+      }
+    }
+    %x_227_phi:ptr<function, i32, read_write> = var
+    %x_255_phi:ptr<function, bool, read_write> = var
+    switch 0u [c: (default, $B63)] {  # switch_6
+      $B63: {  # case
+        store %x_227_phi, 0i
+        loop [b: $B64, c: $B65] {  # loop_6
+          $B64: {  # body
+            %x_253:ptr<function, i32, read_write> = var
+            %x_245:ptr<function, i32, read_write> = var
+            %x_228:ptr<function, i32, read_write> = var
+            %x_228_phi:ptr<function, i32, read_write> = var
+            %200:i32 = load %x_227_phi
+            %x_227:i32 = let %200
+            store %x_255_phi, false
+            %202:bool = lte %x_227, 6i
+            if %202 [t: $B66, f: $B67] {  # if_26
+              $B66: {  # true
+                exit_if  # if_26
+              }
+              $B67: {  # false
+                exit_loop  # loop_6
+              }
+            }
+            %203:ptr<function, i32, read_write> = access %tree, %x_227, 0u
+            %204:i32 = load %203
+            %x_234:i32 = let %204
+            %206:bool = lte 2i, %x_234
+            if %206 [t: $B68, f: $B69] {  # if_27
+              $B68: {  # true
+                %x_247_save:i32 = let %x_227
+                %208:ptr<function, i32, read_write> = access %tree, %x_247_save, 1u
+                %209:i32 = load %208
+                %x_248:i32 = let %209
+                %211:bool = eq %x_248, -1i
+                if %211 [t: $B70, f: $B71] {  # if_28
+                  $B70: {  # true
+                    %212:ptr<function, i32, read_write> = access %tree, %x_247_save, 1u
+                    store %212, 6i
+                    %213:ptr<function, BST, read_write> = access %tree, 6i
+                    store %213, BST(2i, -1i, -1i)
+                    store %x_255_phi, true
+                    exit_loop  # loop_6
+                  }
+                  $B71: {  # false
+                    %214:ptr<function, i32, read_write> = access %tree, %x_247_save, 1u
+                    %215:i32 = load %214
+                    store %x_253, %215
+                    %216:i32 = load %x_253
+                    store %x_228_phi, %216
+                    continue  # -> $B65
+                  }
+                }
+                exit_if  # if_27
+              }
+              $B69: {  # false
+                %x_239_save:i32 = let %x_227
+                %218:ptr<function, i32, read_write> = access %tree, %x_239_save, 2u
+                %219:i32 = load %218
+                %x_240:i32 = let %219
+                %221:bool = eq %x_240, -1i
+                if %221 [t: $B72, f: $B73] {  # if_29
+                  $B72: {  # true
+                    %222:ptr<function, i32, read_write> = access %tree, %x_239_save, 2u
+                    store %222, 6i
+                    %223:ptr<function, BST, read_write> = access %tree, 6i
+                    store %223, BST(2i, -1i, -1i)
+                    store %x_255_phi, true
+                    exit_loop  # loop_6
+                  }
+                  $B73: {  # false
+                    %224:ptr<function, i32, read_write> = access %tree, %x_239_save, 2u
+                    %225:i32 = load %224
+                    store %x_245, %225
+                    %226:i32 = load %x_245
+                    store %x_228_phi, %226
+                    continue  # -> $B65
+                  }
+                }
+                exit_if  # if_27
+              }
+            }
+            unreachable
+          }
+          $B65: {  # continuing
+            %227:i32 = load %x_228_phi
+            store %x_228, %227
+            %228:i32 = load %x_228
+            store %x_227_phi, %228
+            next_iteration  # -> $B64
+          }
+        }
+        %229:bool = load %x_255_phi
+        %x_255:bool = let %229
+        if %x_255 [t: $B74] {  # if_30
+          $B74: {  # true
+            exit_switch  # switch_6
+          }
+        }
+        exit_switch  # switch_6
+      }
+    }
+    %x_260_phi:ptr<function, i32, read_write> = var
+    %x_288_phi:ptr<function, bool, read_write> = var
+    switch 0u [c: (default, $B75)] {  # switch_7
+      $B75: {  # case
+        store %x_260_phi, 0i
+        loop [b: $B76, c: $B77] {  # loop_7
+          $B76: {  # body
+            %x_286:ptr<function, i32, read_write> = var
+            %x_278:ptr<function, i32, read_write> = var
+            %x_261:ptr<function, i32, read_write> = var
+            %x_261_phi:ptr<function, i32, read_write> = var
+            %237:i32 = load %x_260_phi
+            %x_260:i32 = let %237
+            store %x_288_phi, false
+            %239:bool = lte %x_260, 7i
+            if %239 [t: $B78, f: $B79] {  # if_31
+              $B78: {  # true
+                exit_if  # if_31
+              }
+              $B79: {  # false
+                exit_loop  # loop_7
+              }
+            }
+            %240:ptr<function, i32, read_write> = access %tree, %x_260, 0u
+            %241:i32 = load %240
+            %x_267:i32 = let %241
+            %243:bool = lte 6i, %x_267
+            if %243 [t: $B80, f: $B81] {  # if_32
+              $B80: {  # true
+                %x_280_save:i32 = let %x_260
+                %245:ptr<function, i32, read_write> = access %tree, %x_280_save, 1u
+                %246:i32 = load %245
+                %x_281:i32 = let %246
+                %248:bool = eq %x_281, -1i
+                if %248 [t: $B82, f: $B83] {  # if_33
+                  $B82: {  # true
+                    %249:ptr<function, i32, read_write> = access %tree, %x_280_save, 1u
+                    store %249, 7i
+                    %250:ptr<function, BST, read_write> = access %tree, 7i
+                    store %250, BST(6i, -1i, -1i)
+                    store %x_288_phi, true
+                    exit_loop  # loop_7
+                  }
+                  $B83: {  # false
+                    %251:ptr<function, i32, read_write> = access %tree, %x_280_save, 1u
+                    %252:i32 = load %251
+                    store %x_286, %252
+                    %253:i32 = load %x_286
+                    store %x_261_phi, %253
+                    continue  # -> $B77
+                  }
+                }
+                exit_if  # if_32
+              }
+              $B81: {  # false
+                %x_272_save:i32 = let %x_260
+                %255:ptr<function, i32, read_write> = access %tree, %x_272_save, 2u
+                %256:i32 = load %255
+                %x_273:i32 = let %256
+                %258:bool = eq %x_273, -1i
+                if %258 [t: $B84, f: $B85] {  # if_34
+                  $B84: {  # true
+                    %259:ptr<function, i32, read_write> = access %tree, %x_272_save, 2u
+                    store %259, 7i
+                    %260:ptr<function, BST, read_write> = access %tree, 7i
+                    store %260, BST(6i, -1i, -1i)
+                    store %x_288_phi, true
+                    exit_loop  # loop_7
+                  }
+                  $B85: {  # false
+                    %261:ptr<function, i32, read_write> = access %tree, %x_272_save, 2u
+                    %262:i32 = load %261
+                    store %x_278, %262
+                    %263:i32 = load %x_278
+                    store %x_261_phi, %263
+                    continue  # -> $B77
+                  }
+                }
+                exit_if  # if_32
+              }
+            }
+            unreachable
+          }
+          $B77: {  # continuing
+            %264:i32 = load %x_261_phi
+            store %x_261, %264
+            %265:i32 = load %x_261
+            store %x_260_phi, %265
+            next_iteration  # -> $B76
+          }
+        }
+        %266:bool = load %x_288_phi
+        %x_288:bool = let %266
+        if %x_288 [t: $B86] {  # if_35
+          $B86: {  # true
+            exit_switch  # switch_7
+          }
+        }
+        exit_switch  # switch_7
+      }
+    }
+    %x_293_phi:ptr<function, i32, read_write> = var
+    %x_321_phi:ptr<function, bool, read_write> = var
+    switch 0u [c: (default, $B87)] {  # switch_8
+      $B87: {  # case
+        store %x_293_phi, 0i
+        loop [b: $B88, c: $B89] {  # loop_8
+          $B88: {  # body
+            %x_319:ptr<function, i32, read_write> = var
+            %x_311:ptr<function, i32, read_write> = var
+            %x_294:ptr<function, i32, read_write> = var
+            %x_294_phi:ptr<function, i32, read_write> = var
+            %274:i32 = load %x_293_phi
+            %x_293:i32 = let %274
+            store %x_321_phi, false
+            %276:bool = lte %x_293, 8i
+            if %276 [t: $B90, f: $B91] {  # if_36
+              $B90: {  # true
+                exit_if  # if_36
+              }
+              $B91: {  # false
+                exit_loop  # loop_8
+              }
+            }
+            %277:ptr<function, i32, read_write> = access %tree, %x_293, 0u
+            %278:i32 = load %277
+            %x_300:i32 = let %278
+            %280:bool = lte 17i, %x_300
+            if %280 [t: $B92, f: $B93] {  # if_37
+              $B92: {  # true
+                %x_313_save:i32 = let %x_293
+                %282:ptr<function, i32, read_write> = access %tree, %x_313_save, 1u
+                %283:i32 = load %282
+                %x_314:i32 = let %283
+                %285:bool = eq %x_314, -1i
+                if %285 [t: $B94, f: $B95] {  # if_38
+                  $B94: {  # true
+                    %286:ptr<function, i32, read_write> = access %tree, %x_313_save, 1u
+                    store %286, 8i
+                    %287:ptr<function, BST, read_write> = access %tree, 8i
+                    store %287, BST(17i, -1i, -1i)
+                    store %x_321_phi, true
+                    exit_loop  # loop_8
+                  }
+                  $B95: {  # false
+                    %288:ptr<function, i32, read_write> = access %tree, %x_313_save, 1u
+                    %289:i32 = load %288
+                    store %x_319, %289
+                    %290:i32 = load %x_319
+                    store %x_294_phi, %290
+                    continue  # -> $B89
+                  }
+                }
+                exit_if  # if_37
+              }
+              $B93: {  # false
+                %x_305_save:i32 = let %x_293
+                %292:ptr<function, i32, read_write> = access %tree, %x_305_save, 2u
+                %293:i32 = load %292
+                %x_306:i32 = let %293
+                %295:bool = eq %x_306, -1i
+                if %295 [t: $B96, f: $B97] {  # if_39
+                  $B96: {  # true
+                    %296:ptr<function, i32, read_write> = access %tree, %x_305_save, 2u
+                    store %296, 8i
+                    %297:ptr<function, BST, read_write> = access %tree, 8i
+                    store %297, BST(17i, -1i, -1i)
+                    store %x_321_phi, true
+                    exit_loop  # loop_8
+                  }
+                  $B97: {  # false
+                    %298:ptr<function, i32, read_write> = access %tree, %x_305_save, 2u
+                    %299:i32 = load %298
+                    store %x_311, %299
+                    %300:i32 = load %x_311
+                    store %x_294_phi, %300
+                    continue  # -> $B89
+                  }
+                }
+                exit_if  # if_37
+              }
+            }
+            unreachable
+          }
+          $B89: {  # continuing
+            %301:i32 = load %x_294_phi
+            store %x_294, %301
+            %302:i32 = load %x_294
+            store %x_293_phi, %302
+            next_iteration  # -> $B88
+          }
+        }
+        %303:bool = load %x_321_phi
+        %x_321:bool = let %303
+        if %x_321 [t: $B98] {  # if_40
+          $B98: {  # true
+            exit_switch  # switch_8
+          }
+        }
+        exit_switch  # switch_8
+      }
+    }
+    %x_326_phi:ptr<function, i32, read_write> = var
+    %x_354_phi:ptr<function, bool, read_write> = var
+    switch 0u [c: (default, $B99)] {  # switch_9
+      $B99: {  # case
+        store %x_326_phi, 0i
+        loop [b: $B100, c: $B101] {  # loop_9
+          $B100: {  # body
+            %x_352:ptr<function, i32, read_write> = var
+            %x_344:ptr<function, i32, read_write> = var
+            %x_327:ptr<function, i32, read_write> = var
+            %x_327_phi:ptr<function, i32, read_write> = var
+            %311:i32 = load %x_326_phi
+            %x_326:i32 = let %311
+            store %x_354_phi, false
+            %313:bool = lte %x_326, 9i
+            if %313 [t: $B102, f: $B103] {  # if_41
+              $B102: {  # true
+                exit_if  # if_41
+              }
+              $B103: {  # false
+                exit_loop  # loop_9
+              }
+            }
+            %314:ptr<function, i32, read_write> = access %tree, %x_326, 0u
+            %315:i32 = load %314
+            %x_333:i32 = let %315
+            %317:bool = lte 13i, %x_333
+            if %317 [t: $B104, f: $B105] {  # if_42
+              $B104: {  # true
+                %x_346_save:i32 = let %x_326
+                %319:ptr<function, i32, read_write> = access %tree, %x_346_save, 1u
+                %320:i32 = load %319
+                %x_347:i32 = let %320
+                %322:bool = eq %x_347, -1i
+                if %322 [t: $B106, f: $B107] {  # if_43
+                  $B106: {  # true
+                    %323:ptr<function, i32, read_write> = access %tree, %x_346_save, 1u
+                    store %323, 9i
+                    %324:ptr<function, BST, read_write> = access %tree, 9i
+                    store %324, BST(13i, -1i, -1i)
+                    store %x_354_phi, true
+                    exit_loop  # loop_9
+                  }
+                  $B107: {  # false
+                    %325:ptr<function, i32, read_write> = access %tree, %x_346_save, 1u
+                    %326:i32 = load %325
+                    store %x_352, %326
+                    %327:i32 = load %x_352
+                    store %x_327_phi, %327
+                    continue  # -> $B101
+                  }
+                }
+                exit_if  # if_42
+              }
+              $B105: {  # false
+                %x_338_save:i32 = let %x_326
+                %329:ptr<function, i32, read_write> = access %tree, %x_338_save, 2u
+                %330:i32 = load %329
+                %x_339:i32 = let %330
+                %332:bool = eq %x_339, -1i
+                if %332 [t: $B108, f: $B109] {  # if_44
+                  $B108: {  # true
+                    %333:ptr<function, i32, read_write> = access %tree, %x_338_save, 2u
+                    store %333, 9i
+                    %334:ptr<function, BST, read_write> = access %tree, 9i
+                    store %334, BST(13i, -1i, -1i)
+                    store %x_354_phi, true
+                    exit_loop  # loop_9
+                  }
+                  $B109: {  # false
+                    %335:ptr<function, i32, read_write> = access %tree, %x_338_save, 2u
+                    %336:i32 = load %335
+                    store %x_344, %336
+                    %337:i32 = load %x_344
+                    store %x_327_phi, %337
+                    continue  # -> $B101
+                  }
+                }
+                exit_if  # if_42
+              }
+            }
+            unreachable
+          }
+          $B101: {  # continuing
+            %338:i32 = load %x_327_phi
+            store %x_327, %338
+            %339:i32 = load %x_327
+            store %x_326_phi, %339
+            next_iteration  # -> $B100
+          }
+        }
+        %340:bool = load %x_354_phi
+        %x_354:bool = let %340
+        if %x_354 [t: $B110] {  # if_45
+          $B110: {  # true
+            exit_switch  # switch_9
+          }
+        }
+        exit_switch  # switch_9
+      }
+    }
+    store %x_357_phi, 0i
+    store %x_360_phi, 0i
+    store %x_362_phi, 0i
+    loop [b: $B111, c: $B112] {  # loop_10
+      $B111: {  # body
+        %x_392:ptr<function, i32, read_write> = var
+        %x_402:ptr<function, i32, read_write> = var
+        %x_407:ptr<function, i32, read_write> = var
+        %x_363:ptr<function, i32, read_write> = var
+        %x_358_phi:ptr<function, i32, read_write> = var
+        %x_361_phi:ptr<function, i32, read_write> = var
+        %348:i32 = load %x_357_phi
+        %x_357:i32 = let %348
+        %350:i32 = load %x_360_phi
+        store %x_360, %350
+        %351:i32 = load %x_362_phi
+        %x_362:i32 = let %351
+        %x_365:i32 = let -9i
+        %354:bool = lt %x_362, 20i
+        if %354 [t: $B113, f: $B114] {  # if_46
+          $B113: {  # true
+            exit_if  # if_46
+          }
+          $B114: {  # false
+            exit_loop  # loop_10
+          }
+        }
+        %x_374_phi:ptr<function, i32, read_write> = var
+        %x_392_phi:ptr<function, i32, read_write> = var
+        %x_393_phi:ptr<function, bool, read_write> = var
+        switch 0u [c: (default, $B115)] {  # switch_10
+          $B115: {  # case
+            store %x_374_phi, 0i
+            loop [b: $B116, c: $B117] {  # loop_11
+              $B116: {  # body
+                %358:i32 = load %x_374_phi
+                %x_374:i32 = let %358
+                store %x_392_phi, %x_357
+                store %x_393_phi, false
+                %360:bool = neq %x_374, -1i
+                if %360 [t: $B118, f: $B119] {  # if_47
+                  $B118: {  # true
+                    exit_if  # if_47
+                  }
+                  $B119: {  # false
+                    exit_loop  # loop_11
+                  }
+                }
+                %361:ptr<function, BST, read_write> = access %tree, %x_374
+                %362:BST = load %361
+                %x_381:BST = let %362
+                %364:i32 = access %x_381, 0u
+                %x_382:i32 = let %364
+                %366:i32 = access %x_381, 1u
+                %x_383:i32 = let %366
+                %368:i32 = access %x_381, 2u
+                %x_385:i32 = let %368
+                %370:bool = eq %x_382, %x_362
+                if %370 [t: $B120] {  # if_48
+                  $B120: {  # true
+                    store %x_392_phi, %x_362
+                    store %x_393_phi, true
+                    exit_loop  # loop_11
+                  }
+                }
+                %371:f32 = load_vector_element %x_GLF_color, 3u
+                %x_389:f32 = let %371
+                continue  # -> $B117
+              }
+              $B117: {  # continuing
+                %373:bool = lte %x_362, %x_382
+                %374:bool = eq %373, false
+                %375:i32 = select %x_383, %x_385, %374
+                store %x_374_phi, %375
+                next_iteration  # -> $B116
+              }
+            }
+            %376:i32 = load %x_392_phi
+            store %x_392, %376
+            %377:bool = load %x_393_phi
+            %x_393:bool = let %377
+            %379:i32 = load %x_392
+            store %x_358_phi, %379
+            if %x_393 [t: $B121] {  # if_49
+              $B121: {  # true
+                exit_switch  # switch_10
+              }
+            }
+            store %x_358_phi, -1i
+            exit_switch  # switch_10
+          }
+        }
+        %x_358:ptr<function, i32, read_write> = var
+        %x_401:ptr<function, i32, read_write> = var
+        %x_406:ptr<function, i32, read_write> = var
+        %x_402_phi:ptr<function, i32, read_write> = var
+        %x_407_phi:ptr<function, i32, read_write> = var
+        %385:i32 = load %x_358_phi
+        store %x_358, %385
+        switch %x_362 [c: (2i 5i 6i 7i 8i 9i 12i 13i 15i 17i, $B122), c: (default, $B123)] {  # switch_11
+          $B122: {  # case
+            %386:i32 = load %x_360
+            store %x_402_phi, %386
+            %387:i32 = load %x_358
+            %388:i32 = let %387
+            %389:i32 = bitcast %x_362
+            %390:bool = eq %388, %389
+            if %390 [t: $B124] {  # if_50
+              $B124: {  # true
+                %391:i32 = load %x_360
+                %392:i32 = add %391, 1i
+                %393:i32 = bitcast %392
+                store %x_401, %393
+                %394:i32 = load %x_401
+                store %x_402_phi, %394
+                exit_if  # if_50
+              }
+            }
+            %395:i32 = load %x_402_phi
+            store %x_402, %395
+            %396:i32 = load %x_402
+            store %x_361_phi, %396
+            exit_switch  # switch_11
+          }
+          $B123: {  # case
+            %397:i32 = load %x_360
+            store %x_407_phi, %397
+            %398:i32 = load %x_358
+            %399:bool = eq %398, -1i
+            if %399 [t: $B125] {  # if_51
+              $B125: {  # true
+                %400:i32 = load %x_360
+                %401:i32 = add %400, 1i
+                %402:i32 = bitcast %401
+                store %x_406, %402
+                %403:i32 = load %x_406
+                store %x_407_phi, %403
+                exit_if  # if_51
+              }
+            }
+            %404:i32 = load %x_407_phi
+            store %x_407, %404
+            %405:i32 = load %x_407
+            store %x_361_phi, %405
+            exit_switch  # switch_11
+          }
+        }
+        %406:i32 = load %x_361_phi
+        %x_361:i32 = let %406
+        continue  # -> $B112
+      }
+      $B112: {  # continuing
+        %408:i32 = add %x_362, 1i
+        store %x_363, %408
+        %409:i32 = load %x_358
+        store %x_357_phi, %409
+        store %x_360_phi, %x_361
+        %410:i32 = load %x_363
+        store %x_362_phi, %410
+        next_iteration  # -> $B111
+      }
+    }
+    %411:i32 = load %x_360
+    %412:bool = eq %411, 20i
+    if %412 [t: $B126, f: $B127] {  # if_52
+      $B126: {  # true
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        exit_if  # if_52
+      }
+      $B127: {  # false
+        store %x_GLF_color, vec4<f32>(0.0f, 0.0f, 1.0f, 1.0f)
+        exit_if  # if_52
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B128: {
+    %414:void = call %main_1
+    %415:vec4<f32> = load %x_GLF_color
+    %416:main_out = construct %415
+    ret %416
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
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
index ff27fc7..08020c7 100644
--- 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
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,14 +8,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%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
@@ -28,65 +28,70 @@
     %14:vec2<f32> = load %13
     %15:vec2<f32> = div %12, %14
     %16:vec2<f32> = mul %15, 32.0f
-    %x_87:vec2<f32> = floor %16
+    %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 = block {  # body
+    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
-        %22:i32 = load %x_92
-        %23:bool = lt %22, 8i
-        if %23 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %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 = block {  # false
+          $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))
-        %25:i32 = load %x_92
-        %26:ptr<function, vec4<f32>, read_write> = access %x_77, %25
-        %27:vec4<f32> = load %26
-        store %x_98, %27
-        switch 0u [c: (default, %b7)] {  # switch_1
-          %b7 = block {  # case
-            %x_101:f32 = access %x_87, 0u
-            %x_102:f32 = load_vector_element %x_98, 0u
-            %30:bool = lt %x_101, %x_102
-            if %30 [t: %b8] {  # if_2
-              %b8 = block {  # true
+        %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
               }
             }
-            %x_106:f32 = access %x_87, 1u
-            %x_107:f32 = load_vector_element %x_98, 1u
-            %33:bool = lt %x_106, %x_107
-            if %33 [t: %b9] {  # if_3
-              %b9 = block {  # true
+            %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
               }
             }
-            %34:f32 = load_vector_element %x_98, 2u
-            %35:f32 = add %x_102, %34
-            %36:bool = gt %x_101, %35
-            if %36 [t: %b10] {  # if_4
-              %b10 = block {  # true
+            %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
               }
             }
-            %37:f32 = load_vector_element %x_98, 3u
-            %38:f32 = add %x_107, %37
-            %39:bool = gt %x_106, %38
-            if %39 [t: %b11] {  # if_5
-              %b11 = block {  # true
+            %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
               }
@@ -95,61 +100,89 @@
             exit_switch  # switch_1
           }
         }
-        %40:vec4<f32> = load %x_89
-        store %x_90, %40
-        %41:bool = load %x_121
-        if %41 [t: %b12] {  # if_6
-          %b12 = block {  # true
+        %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))
-            %42:i32 = load %x_92
-            %43:ptr<function, vec4<f32>, read_write> = access %x_78, %42
-            %x_125:f32 = load_vector_element %43, 0u
+            %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))
-            %45:i32 = load %x_92
-            %46:ptr<function, vec4<f32>, read_write> = access %x_79, %45
-            %x_128:f32 = load_vector_element %46, 1u
-            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))
-            %48:i32 = convert %x_125
-            %49:i32 = convert %x_128
-            %50:i32 = mul %48, %49
             %51:i32 = load %x_92
-            %52:i32 = mul %51, 9i
-            %53:i32 = add %50, %52
-            %54:i32 = add %53, 11i
-            %55:i32 = mod %54, 16i
-            %56:ptr<function, vec4<f32>, read_write> = access %x_80, %55
-            %57:vec4<f32> = load %56
-            store %x_136, %57
-            %58:vec4<f32> = load %x_136
-            store %x_90, %58
+            %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
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %59:i32 = load %x_92
-        %60:i32 = add %59, 1i
-        store %x_93, %60
-        %61:vec4<f32> = load %x_90
-        store %x_89, %61
-        %62:i32 = load %x_93
-        store %x_92, %62
-        next_iteration %b3
+      $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
       }
     }
-    %63:vec4<f32> = load %x_89
-    store %x_GLF_color, %63
+    %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 {
-  %b13 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B13: {
     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
+    %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
   }
 }
 
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
index 7899a65..8854829 100644
--- 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
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,14 +8,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%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
@@ -23,74 +23,82 @@
     %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
-    %x_81:vec4<f32> = load %gl_FragCoord
-    %13:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %x_84:vec2<f32> = load %13
-    %15:f32 = access %x_81, 0u
-    %16:f32 = access %x_81, 1u
-    %17:vec2<f32> = construct %15, %16
-    %18:vec2<f32> = div %17, %x_84
-    %19:vec2<f32> = mul %18, 32.0f
-    %x_87:vec2<f32> = floor %19
+    %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 = block {  # body
+    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
-        %25:vec4<f32> = load %x_89_phi
-        store %x_89, %25
-        %x_92:i32 = load %x_92_phi
-        %27:bool = lt %x_92, 8i
-        if %27 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %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 = block {  # false
+          $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))
-        %29:ptr<function, vec4<f32>, read_write> = access %x_77, %x_92
-        %30:vec4<f32> = load %29
-        store %x_98, %30
-        switch 0u [c: (default, %b7)] {  # switch_1
-          %b7 = block {  # case
-            %x_101:f32 = access %x_87, 0u
-            %x_102:f32 = load_vector_element %x_98, 0u
-            %33:bool = lt %x_101, %x_102
-            if %33 [t: %b8] {  # if_2
-              %b8 = block {  # true
+        %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
               }
             }
-            %x_106:f32 = access %x_87, 1u
-            %x_107:f32 = load_vector_element %x_98, 1u
-            %36:bool = lt %x_106, %x_107
-            if %36 [t: %b9] {  # if_3
-              %b9 = block {  # true
+            %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
               }
             }
-            %37:f32 = load_vector_element %x_98, 2u
-            %38:f32 = add %x_102, %37
-            %39:bool = gt %x_101, %38
-            if %39 [t: %b10] {  # if_4
-              %b10 = block {  # true
+            %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
               }
             }
-            %40:f32 = load_vector_element %x_98, 3u
-            %41:f32 = add %x_107, %40
-            %42:bool = gt %x_106, %41
-            if %42 [t: %b11] {  # if_5
-              %b11 = block {  # true
+            %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
               }
@@ -99,57 +107,87 @@
             exit_switch  # switch_1
           }
         }
-        %x_121:bool = load %x_121_phi
-        %44:vec4<f32> = load %x_89
-        store %x_90_phi, %44
-        if %x_121 [t: %b12] {  # if_6
-          %b12 = block {  # true
+        %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))
-            %45:ptr<function, vec4<f32>, read_write> = access %x_78, %x_92
-            %x_125:f32 = load_vector_element %45, 0u
+            %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))
-            %47:ptr<function, vec4<f32>, read_write> = access %x_79, %x_92
-            %x_128:f32 = load_vector_element %47, 1u
+            %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))
-            %49:i32 = convert %x_125
-            %50:i32 = convert %x_128
-            %51:i32 = mul %49, %50
-            %52:i32 = mul %x_92, 9i
-            %53:i32 = add %51, %52
-            %54:i32 = add %53, 11i
-            %55:i32 = mod %54, 16i
-            %56:ptr<function, vec4<f32>, read_write> = access %x_80, %55
-            %57:vec4<f32> = load %56
-            store %x_136, %57
-            %58:vec4<f32> = load %x_136
-            store %x_90_phi, %58
+            %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
           }
         }
-        %x_90:vec4<f32> = load %x_90_phi
-        continue %b4
+        %73:vec4<f32> = load %x_90_phi
+        %x_90:vec4<f32> = let %73
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %60:i32 = add %x_92, 1i
-        store %x_93, %60
+      $B4: {  # continuing
+        %75:i32 = add %x_92, 1i
+        store %x_93, %75
         store %x_89_phi, %x_90
-        %61:i32 = load %x_93
-        store %x_92_phi, %61
-        next_iteration %b3
+        %76:i32 = load %x_93
+        store %x_92_phi, %76
+        next_iteration  # -> $B3
       }
     }
-    %62:vec4<f32> = load %x_89
-    store %x_GLF_color, %62
+    %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 {
-  %b13 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B13: {
     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
+    %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
   }
 }
 
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
index 4b323ce..1f49091 100644
--- 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
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,14 +8,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%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
@@ -23,71 +23,112 @@
     %9:vec2<f32> = swizzle %8, xy
     %10:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
     %11:vec2<f32> = load %10
-    %x_59:vec2<f32> = div %9, %11
-    %13:f32 = access %x_59, 0u
-    %14:f32 = mul %13, 10.0f
-    %15:i32 = convert %14
-    %16:f32 = access %x_59, 1u
-    %17:f32 = mul %16, 10.0f
-    %18:i32 = convert %17
-    %19:i32 = mul %18, 10i
-    %x_67:i32 = add %15, %19
+    %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 = block {  # body
+    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
-        %23:i32 = load %x_72
-        %24:bool = lt %23, %x_67
-        if %24 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %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 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %25:i32 = load %x_69
-        %26:i32 = mul 4i, %25
-        %27:i32 = load %x_69
-        %28:i32 = sub 1000i, %27
-        %29:i32 = mul %26, %28
-        %30:i32 = div %29, 1000i
-        store %x_70, %30
-        %31:i32 = load %x_72
-        %32:i32 = add %31, 1i
-        store %x_73, %32
-        %33:i32 = load %x_70
-        store %x_69, %33
-        %34:i32 = load %x_73
-        store %x_72, %34
-        next_iteration %b3
+      $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:array<vec4<f32>, 16> = load %indexable
+    %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)
-    %37:i32 = load %x_69
-    %38:i32 = mod %37, 16i
-    %39:ptr<function, vec4<f32>, read_write> = access %indexable, %38
-    %40:vec4<f32> = load %39
-    store %x_GLF_color, %40
+    %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 {
-  %b7 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B7: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %43:void = call %main_1
-    %44:vec4<f32> = load %x_GLF_color
-    %45:main_out = construct %44
-    ret %45
+    %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
   }
 }
 
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
index be17432..611a5c8 100644
--- 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
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,93 +8,139 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%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
-    %x_55:vec4<f32> = load %gl_FragCoord
-    %10:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %x_58:vec2<f32> = load %10
-    %12:f32 = access %x_55, 0u
-    %13:f32 = access %x_55, 1u
-    %14:vec2<f32> = construct %12, %13
-    %x_59:vec2<f32> = div %14, %x_58
-    %16:f32 = access %x_59, 0u
-    %17:f32 = mul %16, 10.0f
-    %18:i32 = convert %17
-    %19:f32 = access %x_59, 1u
+    %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 = convert %20
-    %22:i32 = mul %21, 10i
-    %x_67:i32 = add %18, %22
+    %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 = block {  # body
+    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
-        %26:i32 = load %x_69_phi
-        store %x_69, %26
-        %x_72:i32 = load %x_72_phi
-        %28:bool = lt %x_72, %x_67
-        if %28 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %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 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %29:i32 = load %x_69
-        %30:i32 = bitcast %29
-        %31:i32 = mul 4i, %30
-        %32:i32 = load %x_69
-        %33:i32 = bitcast %32
-        %34:i32 = sub 1000i, %33
-        %35:i32 = mul %31, %34
-        %36:i32 = div %35, 1000i
-        store %x_70, %36
-        %37:i32 = add %x_72, 1i
-        store %x_73, %37
-        %38:i32 = load %x_70
-        store %x_69_phi, %38
-        %39:i32 = load %x_73
-        store %x_72_phi, %39
-        next_iteration %b3
+      $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:array<vec4<f32>, 16> = load %indexable
+    %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)
-    %42:i32 = load %x_69
-    %43:i32 = mod %42, 16i
-    %44:i32 = bitcast %43
-    %45:ptr<function, vec4<f32>, read_write> = access %indexable, %44
-    %x_83:vec4<f32> = load %45
+    %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 {
-  %b7 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B7: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %49:void = call %main_1
-    %50:vec4<f32> = load %x_GLF_color
-    %51:main_out = construct %50
-    ret %51
+    %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
   }
 }
 
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
index 7c78244..e38912f 100644
--- 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
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,14 +8,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%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
@@ -23,68 +23,108 @@
     %9:vec2<f32> = swizzle %8, xy
     %10:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
     %11:vec2<f32> = load %10
-    %x_59:vec2<f32> = div %9, %11
-    %13:f32 = access %x_59, 0u
-    %14:f32 = mul %13, 10.0f
-    %15:i32 = convert %14
-    %16:f32 = access %x_59, 1u
-    %17:f32 = mul %16, 10.0f
-    %18:i32 = convert %17
-    %19:i32 = mul %18, 10i
-    %x_67:i32 = add %15, %19
+    %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 = block {  # body
+    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
-        %23:i32 = load %x_72
-        %24:bool = lt %23, %x_67
-        if %24 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %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 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %25:i32 = load %x_69
-        %26:i32 = mul 4i, %25
-        %27:i32 = load %x_69
-        %28:i32 = sub 1000i, %27
-        %29:i32 = mul %26, %28
-        %30:i32 = div %29, 1000i
-        store %x_70, %30
-        %31:i32 = load %x_72
-        %32:i32 = add %31, 1i
-        store %x_73, %32
-        %33:i32 = load %x_70
-        store %x_69, %33
-        %34:i32 = load %x_73
-        store %x_72, %34
-        next_iteration %b3
+      $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)
-    %36:i32 = load %x_69
-    %37:i32 = mod %36, 16i
-    %38:ptr<function, vec4<f32>, read_write> = access %indexable, %37
-    %39:vec4<f32> = load %38
-    store %x_GLF_color, %39
+    %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 {
-  %b7 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B7: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %42:void = call %main_1
-    %43:vec4<f32> = load %x_GLF_color
-    %44:main_out = construct %43
-    ret %44
+    %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
   }
 }
 
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
index f8cb527..cf23ec9 100644
--- 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
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,90 +8,135 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%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
-    %x_55:vec4<f32> = load %gl_FragCoord
-    %10:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %x_58:vec2<f32> = load %10
-    %12:f32 = access %x_55, 0u
-    %13:f32 = access %x_55, 1u
-    %14:vec2<f32> = construct %12, %13
-    %x_59:vec2<f32> = div %14, %x_58
-    %16:f32 = access %x_59, 0u
-    %17:f32 = mul %16, 10.0f
-    %18:i32 = convert %17
-    %19:f32 = access %x_59, 1u
+    %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 = convert %20
-    %22:i32 = mul %21, 10i
-    %x_67:i32 = add %18, %22
+    %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 = block {  # body
+    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
-        %26:i32 = load %x_69_phi
-        store %x_69, %26
-        %x_72:i32 = load %x_72_phi
-        %28:bool = lt %x_72, %x_67
-        if %28 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %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 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %29:i32 = load %x_69
-        %30:i32 = bitcast %29
-        %31:i32 = mul 4i, %30
-        %32:i32 = load %x_69
-        %33:i32 = bitcast %32
-        %34:i32 = sub 1000i, %33
-        %35:i32 = mul %31, %34
-        %36:i32 = div %35, 1000i
-        store %x_70, %36
-        %37:i32 = add %x_72, 1i
-        store %x_73, %37
-        %38:i32 = load %x_70
-        store %x_69_phi, %38
-        %39:i32 = load %x_73
-        store %x_72_phi, %39
-        next_iteration %b3
+      $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)
-    %41:i32 = load %x_69
-    %42:i32 = mod %41, 16i
-    %43:i32 = bitcast %42
-    %44:ptr<function, vec4<f32>, read_write> = access %indexable, %43
-    %x_82:vec4<f32> = load %44
+    %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 {
-  %b7 = block {
+%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
+    %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
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/0.spvasm.expected.ir.msl
index 1a1969f..8eae509 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf1 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf1 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -12,30 +12,30 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_9:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_13:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%checkSwap_f1_f1_ = func(%a:ptr<function, f32, read_write>, %b:ptr<function, f32, read_write>):bool -> %b2 {
-  %b2 = block {
+%checkSwap_f1_f1_ = func(%a:ptr<function, f32, read_write>, %b:ptr<function, f32, read_write>):bool {
+  $B2: {
     %x_144:ptr<function, bool, read_write> = var
     %9:f32 = load_vector_element %gl_FragCoord, 1u
     %10:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
     %11:f32 = load_vector_element %10, 1u
     %12:f32 = div %11, 2.0f
     %13:bool = lt %9, %12
-    if %13 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    if %13 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         %14:f32 = load %a
         %15:f32 = load %b
         %16:bool = gt %14, %15
         store %x_144, %16
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         %17:f32 = load %a
         %18:f32 = load %b
         %19:bool = lt %17, %18
@@ -43,12 +43,13 @@
         exit_if  # if_1
       }
     }
-    %x_160:bool = load %x_144
+    %20:bool = load %x_144
+    %x_160:bool = let %20
     ret %x_160
   }
 }
-%main_1 = func():void -> %b5 {
-  %b5 = block {
+%main_1 = func():void {
+  $B5: {
     %i:ptr<function, i32, read_write> = var
     %data:ptr<function, array<f32, 10>, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
@@ -58,164 +59,169 @@
     %param_1:ptr<function, f32, read_write> = var
     %temp:ptr<function, f32, read_write> = var
     store %i, 0i
-    loop [b: %b6, c: %b7] {  # loop_1
-      %b6 = block {  # body
-        %30:i32 = load %i
-        %31:bool = lt %30, 10i
-        if %31 [t: %b8, f: %b9] {  # if_2
-          %b8 = block {  # true
+    loop [b: $B6, c: $B7] {  # loop_1
+      $B6: {  # body
+        %31:i32 = load %i
+        %32:bool = lt %31, 10i
+        if %32 [t: $B8, f: $B9] {  # if_2
+          $B8: {  # true
             exit_if  # if_2
           }
-          %b9 = block {  # false
+          $B9: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_59:i32 = load %i
-        %33:ptr<function, f32, read_write> = access %data, %x_59
-        %34:i32 = load %i
-        %35:i32 = sub 10i, %34
-        %36:f32 = convert %35
-        %37:ptr<uniform, vec2<f32>, read> = access %x_13, 0u
-        %38:f32 = load_vector_element %37, 1u
-        %39:f32 = mul %36, %38
-        store %33, %39
-        continue %b7
+        %33:i32 = load %i
+        %x_59:i32 = let %33
+        %35:ptr<function, f32, read_write> = access %data, %x_59
+        %36:i32 = load %i
+        %37:i32 = sub 10i, %36
+        %38:f32 = convert %37
+        %39:ptr<uniform, vec2<f32>, read> = access %x_13, 0u
+        %40:f32 = load_vector_element %39, 1u
+        %41:f32 = mul %38, %40
+        store %35, %41
+        continue  # -> $B7
       }
-      %b7 = block {  # continuing
-        %40:i32 = load %i
-        %41:i32 = add %40, 1i
-        store %i, %41
-        next_iteration %b6
+      $B7: {  # continuing
+        %42:i32 = load %i
+        %43:i32 = add %42, 1i
+        store %i, %43
+        next_iteration  # -> $B6
       }
     }
     store %i_1, 0i
-    loop [b: %b10, c: %b11] {  # loop_2
-      %b10 = block {  # body
-        %42:i32 = load %i_1
-        %43:bool = lt %42, 9i
-        if %43 [t: %b12, f: %b13] {  # if_3
-          %b12 = block {  # true
+    loop [b: $B10, c: $B11] {  # loop_2
+      $B10: {  # body
+        %44:i32 = load %i_1
+        %45:bool = lt %44, 9i
+        if %45 [t: $B12, f: $B13] {  # if_3
+          $B12: {  # true
             exit_if  # if_3
           }
-          %b13 = block {  # false
+          $B13: {  # false
             exit_loop  # loop_2
           }
         }
         store %j, 0i
-        loop [b: %b14, c: %b15] {  # loop_3
-          %b14 = block {  # body
-            %44:i32 = load %j
-            %45:bool = lt %44, 10i
-            if %45 [t: %b16, f: %b17] {  # if_4
-              %b16 = block {  # true
+        loop [b: $B14, c: $B15] {  # loop_3
+          $B14: {  # body
+            %46:i32 = load %j
+            %47:bool = lt %46, 10i
+            if %47 [t: $B16, f: $B17] {  # if_4
+              $B16: {  # true
                 exit_if  # if_4
               }
-              %b17 = block {  # false
+              $B17: {  # false
                 exit_loop  # loop_3
               }
             }
-            %46:i32 = load %j
-            %47:i32 = load %i_1
-            %48:i32 = add %47, 1i
-            %49:bool = lt %46, %48
-            if %49 [t: %b18] {  # if_5
-              %b18 = block {  # true
-                continue %b15
+            %48:i32 = load %j
+            %49:i32 = load %i_1
+            %50:i32 = add %49, 1i
+            %51:bool = lt %48, %50
+            if %51 [t: $B18] {  # if_5
+              $B18: {  # true
+                continue  # -> $B15
               }
             }
-            %x_90:i32 = load %j
-            %51:i32 = load %i_1
-            %52:ptr<function, f32, read_write> = access %data, %51
-            %53:f32 = load %52
-            store %param, %53
-            %54:ptr<function, f32, read_write> = access %data, %x_90
-            %55:f32 = load %54
-            store %param_1, %55
-            %x_95:bool = call %checkSwap_f1_f1_, %param, %param_1
+            %52:i32 = load %j
+            %x_90:i32 = let %52
+            %54:i32 = load %i_1
+            %55:ptr<function, f32, read_write> = access %data, %54
+            %56:f32 = load %55
+            store %param, %56
+            %57:ptr<function, f32, read_write> = access %data, %x_90
+            %58:f32 = load %57
+            store %param_1, %58
+            %59:bool = call %checkSwap_f1_f1_, %param, %param_1
+            %x_95:bool = let %59
             store %doSwap, %x_95
-            %57:bool = load %doSwap
-            if %57 [t: %b19] {  # if_6
-              %b19 = block {  # true
-                %58:i32 = load %i_1
-                %59:ptr<function, f32, read_write> = access %data, %58
-                %60:f32 = load %59
-                store %temp, %60
-                %x_102:i32 = load %i_1
-                %62:ptr<function, f32, read_write> = access %data, %x_102
-                %63:i32 = load %j
-                %64:ptr<function, f32, read_write> = access %data, %63
-                %65:f32 = load %64
-                store %62, %65
-                %x_107:i32 = load %j
-                %67:ptr<function, f32, read_write> = access %data, %x_107
-                %68:f32 = load %temp
-                store %67, %68
+            %61:bool = load %doSwap
+            if %61 [t: $B19] {  # if_6
+              $B19: {  # true
+                %62:i32 = load %i_1
+                %63:ptr<function, f32, read_write> = access %data, %62
+                %64:f32 = load %63
+                store %temp, %64
+                %65:i32 = load %i_1
+                %x_102:i32 = let %65
+                %67:ptr<function, f32, read_write> = access %data, %x_102
+                %68:i32 = load %j
+                %69:ptr<function, f32, read_write> = access %data, %68
+                %70:f32 = load %69
+                store %67, %70
+                %71:i32 = load %j
+                %x_107:i32 = let %71
+                %73:ptr<function, f32, read_write> = access %data, %x_107
+                %74:f32 = load %temp
+                store %73, %74
                 exit_if  # if_6
               }
             }
-            continue %b15
+            continue  # -> $B15
           }
-          %b15 = block {  # continuing
-            %69:i32 = load %j
-            %70:i32 = add %69, 1i
-            store %j, %70
-            next_iteration %b14
+          $B15: {  # continuing
+            %75:i32 = load %j
+            %76:i32 = add %75, 1i
+            store %j, %76
+            next_iteration  # -> $B14
           }
         }
-        continue %b11
+        continue  # -> $B11
       }
-      %b11 = block {  # continuing
-        %71:i32 = load %i_1
-        %72:i32 = add %71, 1i
-        store %i_1, %72
-        next_iteration %b10
+      $B11: {  # continuing
+        %77:i32 = load %i_1
+        %78:i32 = add %77, 1i
+        store %i_1, %78
+        next_iteration  # -> $B10
       }
     }
-    %73:f32 = load_vector_element %gl_FragCoord, 0u
-    %74:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
-    %75:f32 = load_vector_element %74, 0u
-    %76:f32 = div %75, 2.0f
-    %77:bool = lt %73, %76
-    if %77 [t: %b20, f: %b21] {  # if_7
-      %b20 = block {  # true
-        %78:ptr<function, f32, read_write> = access %data, 0i
-        %79:f32 = load %78
-        %80:f32 = div %79, 10.0f
-        %81:ptr<function, f32, read_write> = access %data, 5i
-        %82:f32 = load %81
-        %83:f32 = div %82, 10.0f
-        %84:ptr<function, f32, read_write> = access %data, 9i
+    %79:f32 = load_vector_element %gl_FragCoord, 0u
+    %80:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
+    %81:f32 = load_vector_element %80, 0u
+    %82:f32 = div %81, 2.0f
+    %83:bool = lt %79, %82
+    if %83 [t: $B20, f: $B21] {  # if_7
+      $B20: {  # true
+        %84:ptr<function, f32, read_write> = access %data, 0i
         %85:f32 = load %84
         %86:f32 = div %85, 10.0f
-        %87:vec4<f32> = construct %80, %83, %86, 1.0f
-        store %x_GLF_color, %87
+        %87:ptr<function, f32, read_write> = access %data, 5i
+        %88:f32 = load %87
+        %89:f32 = div %88, 10.0f
+        %90:ptr<function, f32, read_write> = access %data, 9i
+        %91:f32 = load %90
+        %92:f32 = div %91, 10.0f
+        %93:vec4<f32> = construct %86, %89, %92, 1.0f
+        store %x_GLF_color, %93
         exit_if  # if_7
       }
-      %b21 = block {  # false
-        %88:ptr<function, f32, read_write> = access %data, 5i
-        %89:f32 = load %88
-        %90:f32 = div %89, 10.0f
-        %91:ptr<function, f32, read_write> = access %data, 9i
-        %92:f32 = load %91
-        %93:f32 = div %92, 10.0f
-        %94:ptr<function, f32, read_write> = access %data, 0i
+      $B21: {  # false
+        %94:ptr<function, f32, read_write> = access %data, 5i
         %95:f32 = load %94
         %96:f32 = div %95, 10.0f
-        %97:vec4<f32> = construct %90, %93, %96, 1.0f
-        store %x_GLF_color, %97
+        %97:ptr<function, f32, read_write> = access %data, 9i
+        %98:f32 = load %97
+        %99:f32 = div %98, 10.0f
+        %100:ptr<function, f32, read_write> = access %data, 0i
+        %101:f32 = load %100
+        %102:f32 = div %101, 10.0f
+        %103:vec4<f32> = construct %96, %99, %102, 1.0f
+        store %x_GLF_color, %103
         exit_if  # if_7
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b22 {
-  %b22 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B22: {
     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
+    %106:void = call %main_1
+    %107:vec4<f32> = load %x_GLF_color
+    %108:main_out = construct %107
+    ret %108
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/0.wgsl.expected.ir.msl
index 3d6e70c..45d77af 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/0.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf1 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf1 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -12,43 +12,50 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_9:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_13:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%checkSwap_f1_f1_ = func(%a:ptr<function, f32, read_write>, %b:ptr<function, f32, read_write>):bool -> %b2 {
-  %b2 = block {
+%checkSwap_f1_f1_ = func(%a:ptr<function, f32, read_write>, %b:ptr<function, f32, read_write>):bool {
+  $B2: {
     %x_144:ptr<function, bool, read_write> = var
-    %x_146:f32 = load_vector_element %gl_FragCoord, 1u
-    %10:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
-    %x_148:f32 = load_vector_element %10, 1u
-    %12:f32 = div %x_148, 2.0f
-    %13:bool = lt %x_146, %12
-    if %13 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %x_154:f32 = load %a
-        %x_155:f32 = load %b
-        %16:bool = gt %x_154, %x_155
-        store %x_144, %16
+    %9:f32 = load_vector_element %gl_FragCoord, 1u
+    %x_146:f32 = let %9
+    %11:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
+    %12:f32 = load_vector_element %11, 1u
+    %x_148:f32 = let %12
+    %14:f32 = div %x_148, 2.0f
+    %15:bool = lt %x_146, %14
+    if %15 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %16:f32 = load %a
+        %x_154:f32 = let %16
+        %18:f32 = load %b
+        %x_155:f32 = let %18
+        %20:bool = gt %x_154, %x_155
+        store %x_144, %20
         exit_if  # if_1
       }
-      %b4 = block {  # false
-        %x_157:f32 = load %a
-        %x_158:f32 = load %b
-        %19:bool = lt %x_157, %x_158
-        store %x_144, %19
+      $B4: {  # false
+        %21:f32 = load %a
+        %x_157:f32 = let %21
+        %23:f32 = load %b
+        %x_158:f32 = let %23
+        %25:bool = lt %x_157, %x_158
+        store %x_144, %25
         exit_if  # if_1
       }
     }
-    %x_160:bool = load %x_144
+    %26:bool = load %x_144
+    %x_160:bool = let %26
     ret %x_160
   }
 }
-%main_1 = func():void -> %b5 {
-  %b5 = block {
+%main_1 = func():void {
+  $B5: {
     %i:ptr<function, i32, read_write> = var
     %data:ptr<function, array<f32, 10>, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
@@ -58,164 +65,196 @@
     %param_1:ptr<function, f32, read_write> = var
     %temp:ptr<function, f32, read_write> = var
     store %i, 0i
-    loop [b: %b6, c: %b7] {  # loop_1
-      %b6 = block {  # body
-        %x_56:i32 = load %i
-        %31:bool = lt %x_56, 10i
-        if %31 [t: %b8, f: %b9] {  # if_2
-          %b8 = block {  # true
+    loop [b: $B6, c: $B7] {  # loop_1
+      $B6: {  # body
+        %37:i32 = load %i
+        %x_56:i32 = let %37
+        %39:bool = lt %x_56, 10i
+        if %39 [t: $B8, f: $B9] {  # if_2
+          $B8: {  # true
             exit_if  # if_2
           }
-          %b9 = block {  # false
+          $B9: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_59:i32 = load %i
-        %x_60:i32 = load %i
-        %34:ptr<uniform, vec2<f32>, read> = access %x_13, 0u
-        %x_64:f32 = load_vector_element %34, 1u
-        %36:ptr<function, f32, read_write> = access %data, %x_59
-        %37:i32 = sub 10i, %x_60
-        %38:f32 = convert %37
-        %39:f32 = mul %38, %x_64
-        store %36, %39
-        continue %b7
+        %40:i32 = load %i
+        %x_59:i32 = let %40
+        %42:i32 = load %i
+        %x_60:i32 = let %42
+        %44:ptr<uniform, vec2<f32>, read> = access %x_13, 0u
+        %45:f32 = load_vector_element %44, 1u
+        %x_64:f32 = let %45
+        %47:ptr<function, f32, read_write> = access %data, %x_59
+        %48:i32 = sub 10i, %x_60
+        %49:f32 = convert %48
+        %50:f32 = mul %49, %x_64
+        store %47, %50
+        continue  # -> $B7
       }
-      %b7 = block {  # continuing
-        %x_67:i32 = load %i
-        %41:i32 = add %x_67, 1i
-        store %i, %41
-        next_iteration %b6
+      $B7: {  # continuing
+        %51:i32 = load %i
+        %x_67:i32 = let %51
+        %53:i32 = add %x_67, 1i
+        store %i, %53
+        next_iteration  # -> $B6
       }
     }
     store %i_1, 0i
-    loop [b: %b10, c: %b11] {  # loop_2
-      %b10 = block {  # body
-        %x_73:i32 = load %i_1
-        %43:bool = lt %x_73, 9i
-        if %43 [t: %b12, f: %b13] {  # if_3
-          %b12 = block {  # true
+    loop [b: $B10, c: $B11] {  # loop_2
+      $B10: {  # body
+        %54:i32 = load %i_1
+        %x_73:i32 = let %54
+        %56:bool = lt %x_73, 9i
+        if %56 [t: $B12, f: $B13] {  # if_3
+          $B12: {  # true
             exit_if  # if_3
           }
-          %b13 = block {  # false
+          $B13: {  # false
             exit_loop  # loop_2
           }
         }
         store %j, 0i
-        loop [b: %b14, c: %b15] {  # loop_3
-          %b14 = block {  # body
-            %x_80:i32 = load %j
-            %45:bool = lt %x_80, 10i
-            if %45 [t: %b16, f: %b17] {  # if_4
-              %b16 = block {  # true
+        loop [b: $B14, c: $B15] {  # loop_3
+          $B14: {  # body
+            %57:i32 = load %j
+            %x_80:i32 = let %57
+            %59:bool = lt %x_80, 10i
+            if %59 [t: $B16, f: $B17] {  # if_4
+              $B16: {  # true
                 exit_if  # if_4
               }
-              %b17 = block {  # false
+              $B17: {  # false
                 exit_loop  # loop_3
               }
             }
-            %x_83:i32 = load %j
-            %x_84:i32 = load %i_1
-            %48:i32 = add %x_84, 1i
-            %49:bool = lt %x_83, %48
-            if %49 [t: %b18] {  # if_5
-              %b18 = block {  # true
-                continue %b15
+            %60:i32 = load %j
+            %x_83:i32 = let %60
+            %62:i32 = load %i_1
+            %x_84:i32 = let %62
+            %64:i32 = add %x_84, 1i
+            %65:bool = lt %x_83, %64
+            if %65 [t: $B18] {  # if_5
+              $B18: {  # true
+                continue  # -> $B15
               }
             }
-            %x_89:i32 = load %i_1
-            %x_90:i32 = load %j
-            %52:ptr<function, f32, read_write> = access %data, %x_89
-            %x_92:f32 = load %52
+            %66:i32 = load %i_1
+            %x_89:i32 = let %66
+            %68:i32 = load %j
+            %x_90:i32 = let %68
+            %70:ptr<function, f32, read_write> = access %data, %x_89
+            %71:f32 = load %70
+            %x_92:f32 = let %71
             store %param, %x_92
-            %54:ptr<function, f32, read_write> = access %data, %x_90
-            %x_94:f32 = load %54
+            %73:ptr<function, f32, read_write> = access %data, %x_90
+            %74:f32 = load %73
+            %x_94:f32 = let %74
             store %param_1, %x_94
-            %x_95:bool = call %checkSwap_f1_f1_, %param, %param_1
+            %76:bool = call %checkSwap_f1_f1_, %param, %param_1
+            %x_95:bool = let %76
             store %doSwap, %x_95
-            %x_96:bool = load %doSwap
-            if %x_96 [t: %b19] {  # if_6
-              %b19 = block {  # true
-                %x_99:i32 = load %i_1
-                %59:ptr<function, f32, read_write> = access %data, %x_99
-                %x_101:f32 = load %59
+            %78:bool = load %doSwap
+            %x_96:bool = let %78
+            if %x_96 [t: $B19] {  # if_6
+              $B19: {  # true
+                %80:i32 = load %i_1
+                %x_99:i32 = let %80
+                %82:ptr<function, f32, read_write> = access %data, %x_99
+                %83:f32 = load %82
+                %x_101:f32 = let %83
                 store %temp, %x_101
-                %x_102:i32 = load %i_1
-                %x_103:i32 = load %j
-                %63:ptr<function, f32, read_write> = access %data, %x_103
-                %x_105:f32 = load %63
-                %65:ptr<function, f32, read_write> = access %data, %x_102
-                store %65, %x_105
-                %x_107:i32 = load %j
-                %x_108:f32 = load %temp
-                %68:ptr<function, f32, read_write> = access %data, %x_107
-                store %68, %x_108
+                %85:i32 = load %i_1
+                %x_102:i32 = let %85
+                %87:i32 = load %j
+                %x_103:i32 = let %87
+                %89:ptr<function, f32, read_write> = access %data, %x_103
+                %90:f32 = load %89
+                %x_105:f32 = let %90
+                %92:ptr<function, f32, read_write> = access %data, %x_102
+                store %92, %x_105
+                %93:i32 = load %j
+                %x_107:i32 = let %93
+                %95:f32 = load %temp
+                %x_108:f32 = let %95
+                %97:ptr<function, f32, read_write> = access %data, %x_107
+                store %97, %x_108
                 exit_if  # if_6
               }
             }
-            continue %b15
+            continue  # -> $B15
           }
-          %b15 = block {  # continuing
-            %x_110:i32 = load %j
-            %70:i32 = add %x_110, 1i
-            store %j, %70
-            next_iteration %b14
+          $B15: {  # continuing
+            %98:i32 = load %j
+            %x_110:i32 = let %98
+            %100:i32 = add %x_110, 1i
+            store %j, %100
+            next_iteration  # -> $B14
           }
         }
-        continue %b11
+        continue  # -> $B11
       }
-      %b11 = block {  # continuing
-        %x_112:i32 = load %i_1
-        %72:i32 = add %x_112, 1i
-        store %i_1, %72
-        next_iteration %b10
+      $B11: {  # continuing
+        %101:i32 = load %i_1
+        %x_112:i32 = let %101
+        %103:i32 = add %x_112, 1i
+        store %i_1, %103
+        next_iteration  # -> $B10
       }
     }
-    %x_115:f32 = load_vector_element %gl_FragCoord, 0u
-    %74:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
-    %x_117:f32 = load_vector_element %74, 0u
-    %76:f32 = div %x_117, 2.0f
-    %77:bool = lt %x_115, %76
-    if %77 [t: %b20, f: %b21] {  # if_7
-      %b20 = block {  # true
-        %78:ptr<function, f32, read_write> = access %data, 0i
-        %x_124:f32 = load %78
-        %80:ptr<function, f32, read_write> = access %data, 5i
-        %x_127:f32 = load %80
-        %82:ptr<function, f32, read_write> = access %data, 9i
-        %x_130:f32 = load %82
-        %84:f32 = div %x_124, 10.0f
-        %85:f32 = div %x_127, 10.0f
-        %86:f32 = div %x_130, 10.0f
-        %87:vec4<f32> = construct %84, %85, %86, 1.0f
-        store %x_GLF_color, %87
+    %104:f32 = load_vector_element %gl_FragCoord, 0u
+    %x_115:f32 = let %104
+    %106:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
+    %107:f32 = load_vector_element %106, 0u
+    %x_117:f32 = let %107
+    %109:f32 = div %x_117, 2.0f
+    %110:bool = lt %x_115, %109
+    if %110 [t: $B20, f: $B21] {  # if_7
+      $B20: {  # true
+        %111:ptr<function, f32, read_write> = access %data, 0i
+        %112:f32 = load %111
+        %x_124:f32 = let %112
+        %114:ptr<function, f32, read_write> = access %data, 5i
+        %115:f32 = load %114
+        %x_127:f32 = let %115
+        %117:ptr<function, f32, read_write> = access %data, 9i
+        %118:f32 = load %117
+        %x_130:f32 = let %118
+        %120:f32 = div %x_124, 10.0f
+        %121:f32 = div %x_127, 10.0f
+        %122:f32 = div %x_130, 10.0f
+        %123:vec4<f32> = construct %120, %121, %122, 1.0f
+        store %x_GLF_color, %123
         exit_if  # if_7
       }
-      %b21 = block {  # false
-        %88:ptr<function, f32, read_write> = access %data, 5i
-        %x_134:f32 = load %88
-        %90:ptr<function, f32, read_write> = access %data, 9i
-        %x_137:f32 = load %90
-        %92:ptr<function, f32, read_write> = access %data, 0i
-        %x_140:f32 = load %92
-        %94:f32 = div %x_134, 10.0f
-        %95:f32 = div %x_137, 10.0f
-        %96:f32 = div %x_140, 10.0f
-        %97:vec4<f32> = construct %94, %95, %96, 1.0f
-        store %x_GLF_color, %97
+      $B21: {  # false
+        %124:ptr<function, f32, read_write> = access %data, 5i
+        %125:f32 = load %124
+        %x_134:f32 = let %125
+        %127:ptr<function, f32, read_write> = access %data, 9i
+        %128:f32 = load %127
+        %x_137:f32 = let %128
+        %130:ptr<function, f32, read_write> = access %data, 0i
+        %131:f32 = load %130
+        %x_140:f32 = let %131
+        %133:f32 = div %x_134, 10.0f
+        %134:f32 = div %x_137, 10.0f
+        %135:f32 = div %x_140, 10.0f
+        %136:vec4<f32> = construct %133, %134, %135, 1.0f
+        store %x_GLF_color, %136
         exit_if  # if_7
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b22 {
-  %b22 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B22: {
     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
+    %139:void = call %main_1
+    %140:vec4<f32> = load %x_GLF_color
+    %141:main_out = construct %140
+    ret %141
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/1.spvasm.expected.ir.msl
index fcefbe1..35c6b0e 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/1.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf1 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf1 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -12,15 +12,15 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_9:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_13:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%checkSwap_f1_f1_ = func(%a:ptr<function, f32, read_write>, %b:ptr<function, f32, read_write>):bool -> %b2 {
-  %b2 = block {
+%checkSwap_f1_f1_ = func(%a:ptr<function, f32, read_write>, %b:ptr<function, f32, read_write>):bool {
+  $B2: {
     %x_147:ptr<function, bool, read_write> = var
     %x_158:ptr<function, f32, read_write> = var
     %x_159:ptr<function, f32, read_write> = var
@@ -35,19 +35,20 @@
     %19:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
     %20:f32 = load_vector_element %19, 1u
     %21:f32 = div %20, 2.0f
-    %x_153:bool = lt %18, %21
-    if %x_153 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %23:f32 = load %a
-        store %x_158, %23
-        %24:f32 = load %x_158
-        store %x_160, %24
+    %22:bool = lt %18, %21
+    %x_153:bool = let %22
+    if %x_153 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %24:f32 = load %a
+        store %x_158, %24
+        %25:f32 = load %x_158
+        store %x_160, %25
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_159, 0.0f
-        %25:f32 = load %x_159
-        store %x_160, %25
+        %26:f32 = load %x_159
+        store %x_160, %26
         exit_if  # if_1
       }
     }
@@ -55,50 +56,51 @@
     %x_167:ptr<function, f32, read_write> = var
     %x_168:ptr<function, f32, read_write> = var
     %guard155:ptr<function, bool, read_write> = var, true
-    if false [t: %b5, f: %b6] {  # if_2
-      %b5 = block {  # true
+    if false [t: $B5, f: $B6] {  # if_2
+      $B5: {  # true
         exit_if  # if_2
       }
-      %b6 = block {  # false
-        %30:bool = load %guard155
-        if %30 [t: %b7] {  # if_3
-          %b7 = block {  # true
-            if %x_153 [t: %b8, f: %b9] {  # if_4
-              %b8 = block {  # true
-                %31:f32 = load %b
-                store %x_166, %31
-                %32:f32 = load %x_166
-                store %x_168, %32
-                exit_if  # if_4
-              }
-              %b9 = block {  # false
-                store %x_167, 0.0f
-                %33:f32 = load %x_167
+      $B6: {  # false
+        %31:bool = load %guard155
+        if %31 [t: $B7] {  # if_3
+          $B7: {  # true
+            if %x_153 [t: $B8, f: $B9] {  # if_4
+              $B8: {  # true
+                %32:f32 = load %b
+                store %x_166, %32
+                %33:f32 = load %x_166
                 store %x_168, %33
                 exit_if  # if_4
               }
+              $B9: {  # false
+                store %x_167, 0.0f
+                %34:f32 = load %x_167
+                store %x_168, %34
+                exit_if  # if_4
+              }
             }
-            %34:f32 = load %x_160
-            %35:f32 = load %x_168
-            %x_169:bool = gt %34, %35
-            if %x_153 [t: %b10] {  # if_5
-              %b10 = block {  # true
+            %35:f32 = load %x_160
+            %36:f32 = load %x_168
+            %37:bool = gt %35, %36
+            %x_169:bool = let %37
+            if %x_153 [t: $B10] {  # if_5
+              $B10: {  # true
                 store %x_147, %x_169
                 exit_if  # if_5
               }
             }
-            if true [t: %b11, f: %b12] {  # if_6
-              %b11 = block {  # true
+            if true [t: $B11, f: $B12] {  # if_6
+              $B11: {  # true
                 exit_if  # if_6
               }
-              %b12 = block {  # false
+              $B12: {  # false
                 store %guard155, false
                 exit_if  # if_6
               }
             }
-            %37:bool = load %guard155
-            if %37 [t: %b13] {  # if_7
-              %b13 = block {  # true
+            %39:bool = load %guard155
+            if %39 [t: $B13] {  # if_7
+              $B13: {  # true
                 store %guard155, false
                 exit_if  # if_7
               }
@@ -109,54 +111,55 @@
         exit_if  # if_2
       }
     }
-    if %x_153 [t: %b14, f: %b15] {  # if_8
-      %b14 = block {  # true
+    if %x_153 [t: $B14, f: $B15] {  # if_8
+      $B14: {  # true
         store %x_179, 0.0f
-        %38:f32 = load %x_179
-        store %x_180, %38
-        exit_if  # if_8
-      }
-      %b15 = block {  # false
-        %39:f32 = load %a
-        store %x_178, %39
-        %40:f32 = load %x_178
+        %40:f32 = load %x_179
         store %x_180, %40
         exit_if  # if_8
       }
-    }
-    if %x_153 [t: %b16, f: %b17] {  # if_9
-      %b16 = block {  # true
-        store %x_185, 0.0f
-        %41:f32 = load %x_185
-        store %x_186, %41
-        exit_if  # if_9
+      $B15: {  # false
+        %41:f32 = load %a
+        store %x_178, %41
+        %42:f32 = load %x_178
+        store %x_180, %42
+        exit_if  # if_8
       }
-      %b17 = block {  # false
-        %42:f32 = load %b
-        store %x_184, %42
-        %43:f32 = load %x_184
+    }
+    if %x_153 [t: $B16, f: $B17] {  # if_9
+      $B16: {  # true
+        store %x_185, 0.0f
+        %43:f32 = load %x_185
         store %x_186, %43
         exit_if  # if_9
       }
+      $B17: {  # false
+        %44:f32 = load %b
+        store %x_184, %44
+        %45:f32 = load %x_184
+        store %x_186, %45
+        exit_if  # if_9
+      }
     }
-    if %x_153 [t: %b18, f: %b19] {  # if_10
-      %b18 = block {  # true
+    if %x_153 [t: $B18, f: $B19] {  # if_10
+      $B18: {  # true
         exit_if  # if_10
       }
-      %b19 = block {  # false
-        %44:f32 = load %x_180
-        %45:f32 = load %x_186
-        %46:bool = lt %44, %45
-        store %x_147, %46
+      $B19: {  # false
+        %46:f32 = load %x_180
+        %47:f32 = load %x_186
+        %48:bool = lt %46, %47
+        store %x_147, %48
         exit_if  # if_10
       }
     }
-    %x_191:bool = load %x_147
+    %49:bool = load %x_147
+    %x_191:bool = let %49
     ret %x_191
   }
 }
-%main_1 = func():void -> %b20 {
-  %b20 = block {
+%main_1 = func():void {
+  $B20: {
     %i:ptr<function, i32, read_write> = var
     %data:ptr<function, array<f32, 10>, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
@@ -166,164 +169,169 @@
     %param_1:ptr<function, f32, read_write> = var
     %temp:ptr<function, f32, read_write> = var
     store %i, 0i
-    loop [b: %b21, c: %b22] {  # loop_1
-      %b21 = block {  # body
-        %57:i32 = load %i
-        %58:bool = lt %57, 10i
-        if %58 [t: %b23, f: %b24] {  # if_11
-          %b23 = block {  # true
+    loop [b: $B21, c: $B22] {  # loop_1
+      $B21: {  # body
+        %60:i32 = load %i
+        %61:bool = lt %60, 10i
+        if %61 [t: $B23, f: $B24] {  # if_11
+          $B23: {  # true
             exit_if  # if_11
           }
-          %b24 = block {  # false
+          $B24: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_62:i32 = load %i
-        %60:ptr<function, f32, read_write> = access %data, %x_62
-        %61:i32 = load %i
-        %62:i32 = sub 10i, %61
-        %63:f32 = convert %62
-        %64:ptr<uniform, vec2<f32>, read> = access %x_13, 0u
-        %65:f32 = load_vector_element %64, 1u
-        %66:f32 = mul %63, %65
-        store %60, %66
-        continue %b22
+        %62:i32 = load %i
+        %x_62:i32 = let %62
+        %64:ptr<function, f32, read_write> = access %data, %x_62
+        %65:i32 = load %i
+        %66:i32 = sub 10i, %65
+        %67:f32 = convert %66
+        %68:ptr<uniform, vec2<f32>, read> = access %x_13, 0u
+        %69:f32 = load_vector_element %68, 1u
+        %70:f32 = mul %67, %69
+        store %64, %70
+        continue  # -> $B22
       }
-      %b22 = block {  # continuing
-        %67:i32 = load %i
-        %68:i32 = add %67, 1i
-        store %i, %68
-        next_iteration %b21
+      $B22: {  # continuing
+        %71:i32 = load %i
+        %72:i32 = add %71, 1i
+        store %i, %72
+        next_iteration  # -> $B21
       }
     }
     store %i_1, 0i
-    loop [b: %b25, c: %b26] {  # loop_2
-      %b25 = block {  # body
-        %69:i32 = load %i_1
-        %70:bool = lt %69, 9i
-        if %70 [t: %b27, f: %b28] {  # if_12
-          %b27 = block {  # true
+    loop [b: $B25, c: $B26] {  # loop_2
+      $B25: {  # body
+        %73:i32 = load %i_1
+        %74:bool = lt %73, 9i
+        if %74 [t: $B27, f: $B28] {  # if_12
+          $B27: {  # true
             exit_if  # if_12
           }
-          %b28 = block {  # false
+          $B28: {  # false
             exit_loop  # loop_2
           }
         }
         store %j, 0i
-        loop [b: %b29, c: %b30] {  # loop_3
-          %b29 = block {  # body
-            %71:i32 = load %j
-            %72:bool = lt %71, 10i
-            if %72 [t: %b31, f: %b32] {  # if_13
-              %b31 = block {  # true
+        loop [b: $B29, c: $B30] {  # loop_3
+          $B29: {  # body
+            %75:i32 = load %j
+            %76:bool = lt %75, 10i
+            if %76 [t: $B31, f: $B32] {  # if_13
+              $B31: {  # true
                 exit_if  # if_13
               }
-              %b32 = block {  # false
+              $B32: {  # false
                 exit_loop  # loop_3
               }
             }
-            %73:i32 = load %j
-            %74:i32 = load %i_1
-            %75:i32 = add %74, 1i
-            %76:bool = lt %73, %75
-            if %76 [t: %b33] {  # if_14
-              %b33 = block {  # true
-                continue %b30
+            %77:i32 = load %j
+            %78:i32 = load %i_1
+            %79:i32 = add %78, 1i
+            %80:bool = lt %77, %79
+            if %80 [t: $B33] {  # if_14
+              $B33: {  # true
+                continue  # -> $B30
               }
             }
-            %x_93:i32 = load %j
-            %78:i32 = load %i_1
-            %79:ptr<function, f32, read_write> = access %data, %78
-            %80:f32 = load %79
-            store %param, %80
-            %81:ptr<function, f32, read_write> = access %data, %x_93
-            %82:f32 = load %81
-            store %param_1, %82
-            %x_98:bool = call %checkSwap_f1_f1_, %param, %param_1
+            %81:i32 = load %j
+            %x_93:i32 = let %81
+            %83:i32 = load %i_1
+            %84:ptr<function, f32, read_write> = access %data, %83
+            %85:f32 = load %84
+            store %param, %85
+            %86:ptr<function, f32, read_write> = access %data, %x_93
+            %87:f32 = load %86
+            store %param_1, %87
+            %88:bool = call %checkSwap_f1_f1_, %param, %param_1
+            %x_98:bool = let %88
             store %doSwap, %x_98
-            %84:bool = load %doSwap
-            if %84 [t: %b34] {  # if_15
-              %b34 = block {  # true
-                %85:i32 = load %i_1
-                %86:ptr<function, f32, read_write> = access %data, %85
-                %87:f32 = load %86
-                store %temp, %87
-                %x_105:i32 = load %i_1
-                %89:ptr<function, f32, read_write> = access %data, %x_105
-                %90:i32 = load %j
-                %91:ptr<function, f32, read_write> = access %data, %90
-                %92:f32 = load %91
-                store %89, %92
-                %x_110:i32 = load %j
-                %94:ptr<function, f32, read_write> = access %data, %x_110
-                %95:f32 = load %temp
-                store %94, %95
+            %90:bool = load %doSwap
+            if %90 [t: $B34] {  # if_15
+              $B34: {  # true
+                %91:i32 = load %i_1
+                %92:ptr<function, f32, read_write> = access %data, %91
+                %93:f32 = load %92
+                store %temp, %93
+                %94:i32 = load %i_1
+                %x_105:i32 = let %94
+                %96:ptr<function, f32, read_write> = access %data, %x_105
+                %97:i32 = load %j
+                %98:ptr<function, f32, read_write> = access %data, %97
+                %99:f32 = load %98
+                store %96, %99
+                %100:i32 = load %j
+                %x_110:i32 = let %100
+                %102:ptr<function, f32, read_write> = access %data, %x_110
+                %103:f32 = load %temp
+                store %102, %103
                 exit_if  # if_15
               }
             }
-            continue %b30
+            continue  # -> $B30
           }
-          %b30 = block {  # continuing
-            %96:i32 = load %j
-            %97:i32 = add %96, 1i
-            store %j, %97
-            next_iteration %b29
+          $B30: {  # continuing
+            %104:i32 = load %j
+            %105:i32 = add %104, 1i
+            store %j, %105
+            next_iteration  # -> $B29
           }
         }
-        continue %b26
+        continue  # -> $B26
       }
-      %b26 = block {  # continuing
-        %98:i32 = load %i_1
-        %99:i32 = add %98, 1i
-        store %i_1, %99
-        next_iteration %b25
+      $B26: {  # continuing
+        %106:i32 = load %i_1
+        %107:i32 = add %106, 1i
+        store %i_1, %107
+        next_iteration  # -> $B25
       }
     }
-    %100:f32 = load_vector_element %gl_FragCoord, 0u
-    %101:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
-    %102:f32 = load_vector_element %101, 0u
-    %103:f32 = div %102, 2.0f
-    %104:bool = lt %100, %103
-    if %104 [t: %b35, f: %b36] {  # if_16
-      %b35 = block {  # true
-        %105:ptr<function, f32, read_write> = access %data, 0i
-        %106:f32 = load %105
-        %107:f32 = div %106, 10.0f
-        %108:ptr<function, f32, read_write> = access %data, 5i
-        %109:f32 = load %108
-        %110:f32 = div %109, 10.0f
-        %111:ptr<function, f32, read_write> = access %data, 9i
-        %112:f32 = load %111
-        %113:f32 = div %112, 10.0f
-        %114:vec4<f32> = construct %107, %110, %113, 1.0f
-        store %x_GLF_color, %114
+    %108:f32 = load_vector_element %gl_FragCoord, 0u
+    %109:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
+    %110:f32 = load_vector_element %109, 0u
+    %111:f32 = div %110, 2.0f
+    %112:bool = lt %108, %111
+    if %112 [t: $B35, f: $B36] {  # if_16
+      $B35: {  # true
+        %113:ptr<function, f32, read_write> = access %data, 0i
+        %114:f32 = load %113
+        %115:f32 = div %114, 10.0f
+        %116:ptr<function, f32, read_write> = access %data, 5i
+        %117:f32 = load %116
+        %118:f32 = div %117, 10.0f
+        %119:ptr<function, f32, read_write> = access %data, 9i
+        %120:f32 = load %119
+        %121:f32 = div %120, 10.0f
+        %122:vec4<f32> = construct %115, %118, %121, 1.0f
+        store %x_GLF_color, %122
         exit_if  # if_16
       }
-      %b36 = block {  # false
-        %115:ptr<function, f32, read_write> = access %data, 5i
-        %116:f32 = load %115
-        %117:f32 = div %116, 10.0f
-        %118:ptr<function, f32, read_write> = access %data, 9i
-        %119:f32 = load %118
-        %120:f32 = div %119, 10.0f
-        %121:ptr<function, f32, read_write> = access %data, 0i
-        %122:f32 = load %121
-        %123:f32 = div %122, 10.0f
-        %124:vec4<f32> = construct %117, %120, %123, 1.0f
-        store %x_GLF_color, %124
+      $B36: {  # false
+        %123:ptr<function, f32, read_write> = access %data, 5i
+        %124:f32 = load %123
+        %125:f32 = div %124, 10.0f
+        %126:ptr<function, f32, read_write> = access %data, 9i
+        %127:f32 = load %126
+        %128:f32 = div %127, 10.0f
+        %129:ptr<function, f32, read_write> = access %data, 0i
+        %130:f32 = load %129
+        %131:f32 = div %130, 10.0f
+        %132:vec4<f32> = construct %125, %128, %131, 1.0f
+        store %x_GLF_color, %132
         exit_if  # if_16
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b37 {
-  %b37 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B37: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %127:void = call %main_1
-    %128:vec4<f32> = load %x_GLF_color
-    %129:main_out = construct %128
-    ret %129
+    %135:void = call %main_1
+    %136:vec4<f32> = load %x_GLF_color
+    %137:main_out = construct %136
+    ret %137
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/1.wgsl.expected.ir.msl
index 5d79343..5a97e0c 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/1.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/1.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf1 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf1 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -12,15 +12,15 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_9:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_13:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%checkSwap_f1_f1_ = func(%a:ptr<function, f32, read_write>, %b:ptr<function, f32, read_write>):bool -> %b2 {
-  %b2 = block {
+%checkSwap_f1_f1_ = func(%a:ptr<function, f32, read_write>, %b:ptr<function, f32, read_write>):bool {
+  $B2: {
     %x_147:ptr<function, bool, read_write> = var
     %x_158:ptr<function, f32, read_write> = var
     %x_159:ptr<function, f32, read_write> = var
@@ -31,74 +31,80 @@
     %x_160_phi:ptr<function, f32, read_write> = var
     %x_180_phi:ptr<function, f32, read_write> = var
     %x_186_phi:ptr<function, f32, read_write> = var
-    %x_149:f32 = load_vector_element %gl_FragCoord, 1u
-    %19:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
-    %x_151:f32 = load_vector_element %19, 1u
-    %21:f32 = div %x_151, 2.0f
-    %x_153:bool = lt %x_149, %21
-    if %x_153 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %23:f32 = load %a
-        store %x_158, %23
-        %24:f32 = load %x_158
-        store %x_160_phi, %24
+    %18:f32 = load_vector_element %gl_FragCoord, 1u
+    %x_149:f32 = let %18
+    %20:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
+    %21:f32 = load_vector_element %20, 1u
+    %x_151:f32 = let %21
+    %23:f32 = div %x_151, 2.0f
+    %24:bool = lt %x_149, %23
+    %x_153:bool = let %24
+    if %x_153 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %26:f32 = load %a
+        store %x_158, %26
+        %27:f32 = load %x_158
+        store %x_160_phi, %27
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         store %x_159, 0.0f
-        %25:f32 = load %x_159
-        store %x_160_phi, %25
+        %28:f32 = load %x_159
+        store %x_160_phi, %28
         exit_if  # if_1
       }
     }
     %x_166:ptr<function, f32, read_write> = var
     %x_167:ptr<function, f32, read_write> = var
     %x_168_phi:ptr<function, f32, read_write> = var
-    %x_160:f32 = load %x_160_phi
+    %32:f32 = load %x_160_phi
+    %x_160:f32 = let %32
     %guard155:ptr<function, bool, read_write> = var, true
-    if false [t: %b5, f: %b6] {  # if_2
-      %b5 = block {  # true
+    if false [t: $B5, f: $B6] {  # if_2
+      $B5: {  # true
         exit_if  # if_2
       }
-      %b6 = block {  # false
-        %31:bool = load %guard155
-        if %31 [t: %b7] {  # if_3
-          %b7 = block {  # true
-            if %x_153 [t: %b8, f: %b9] {  # if_4
-              %b8 = block {  # true
-                %32:f32 = load %b
-                store %x_166, %32
-                %33:f32 = load %x_166
-                store %x_168_phi, %33
+      $B6: {  # false
+        %35:bool = load %guard155
+        if %35 [t: $B7] {  # if_3
+          $B7: {  # true
+            if %x_153 [t: $B8, f: $B9] {  # if_4
+              $B8: {  # true
+                %36:f32 = load %b
+                store %x_166, %36
+                %37:f32 = load %x_166
+                store %x_168_phi, %37
                 exit_if  # if_4
               }
-              %b9 = block {  # false
+              $B9: {  # false
                 store %x_167, 0.0f
-                %34:f32 = load %x_167
-                store %x_168_phi, %34
+                %38:f32 = load %x_167
+                store %x_168_phi, %38
                 exit_if  # if_4
               }
             }
-            %x_168:f32 = load %x_168_phi
-            %x_169:bool = gt %x_160, %x_168
-            if %x_153 [t: %b10] {  # if_5
-              %b10 = block {  # true
+            %39:f32 = load %x_168_phi
+            %x_168:f32 = let %39
+            %41:bool = gt %x_160, %x_168
+            %x_169:bool = let %41
+            if %x_153 [t: $B10] {  # if_5
+              $B10: {  # true
                 store %x_147, %x_169
                 exit_if  # if_5
               }
             }
-            if true [t: %b11, f: %b12] {  # if_6
-              %b11 = block {  # true
+            if true [t: $B11, f: $B12] {  # if_6
+              $B11: {  # true
                 exit_if  # if_6
               }
-              %b12 = block {  # false
+              $B12: {  # false
                 store %guard155, false
                 exit_if  # if_6
               }
             }
-            %37:bool = load %guard155
-            if %37 [t: %b13] {  # if_7
-              %b13 = block {  # true
+            %43:bool = load %guard155
+            if %43 [t: $B13] {  # if_7
+              $B13: {  # true
                 store %guard155, false
                 exit_if  # if_7
               }
@@ -109,54 +115,57 @@
         exit_if  # if_2
       }
     }
-    if %x_153 [t: %b14, f: %b15] {  # if_8
-      %b14 = block {  # true
+    if %x_153 [t: $B14, f: $B15] {  # if_8
+      $B14: {  # true
         store %x_179, 0.0f
-        %38:f32 = load %x_179
-        store %x_180_phi, %38
+        %44:f32 = load %x_179
+        store %x_180_phi, %44
         exit_if  # if_8
       }
-      %b15 = block {  # false
-        %39:f32 = load %a
-        store %x_178, %39
-        %40:f32 = load %x_178
-        store %x_180_phi, %40
+      $B15: {  # false
+        %45:f32 = load %a
+        store %x_178, %45
+        %46:f32 = load %x_178
+        store %x_180_phi, %46
         exit_if  # if_8
       }
     }
-    %x_180:f32 = load %x_180_phi
-    if %x_153 [t: %b16, f: %b17] {  # if_9
-      %b16 = block {  # true
+    %47:f32 = load %x_180_phi
+    %x_180:f32 = let %47
+    if %x_153 [t: $B16, f: $B17] {  # if_9
+      $B16: {  # true
         store %x_185, 0.0f
-        %42:f32 = load %x_185
-        store %x_186_phi, %42
+        %49:f32 = load %x_185
+        store %x_186_phi, %49
         exit_if  # if_9
       }
-      %b17 = block {  # false
-        %43:f32 = load %b
-        store %x_184, %43
-        %44:f32 = load %x_184
-        store %x_186_phi, %44
+      $B17: {  # false
+        %50:f32 = load %b
+        store %x_184, %50
+        %51:f32 = load %x_184
+        store %x_186_phi, %51
         exit_if  # if_9
       }
     }
-    %x_186:f32 = load %x_186_phi
-    if %x_153 [t: %b18, f: %b19] {  # if_10
-      %b18 = block {  # true
+    %52:f32 = load %x_186_phi
+    %x_186:f32 = let %52
+    if %x_153 [t: $B18, f: $B19] {  # if_10
+      $B18: {  # true
         exit_if  # if_10
       }
-      %b19 = block {  # false
-        %46:bool = lt %x_180, %x_186
-        store %x_147, %46
+      $B19: {  # false
+        %54:bool = lt %x_180, %x_186
+        store %x_147, %54
         exit_if  # if_10
       }
     }
-    %x_191:bool = load %x_147
+    %55:bool = load %x_147
+    %x_191:bool = let %55
     ret %x_191
   }
 }
-%main_1 = func():void -> %b20 {
-  %b20 = block {
+%main_1 = func():void {
+  $B20: {
     %i:ptr<function, i32, read_write> = var
     %data:ptr<function, array<f32, 10>, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
@@ -166,164 +175,196 @@
     %param_1:ptr<function, f32, read_write> = var
     %temp:ptr<function, f32, read_write> = var
     store %i, 0i
-    loop [b: %b21, c: %b22] {  # loop_1
-      %b21 = block {  # body
-        %x_59:i32 = load %i
-        %58:bool = lt %x_59, 10i
-        if %58 [t: %b23, f: %b24] {  # if_11
-          %b23 = block {  # true
+    loop [b: $B21, c: $B22] {  # loop_1
+      $B21: {  # body
+        %66:i32 = load %i
+        %x_59:i32 = let %66
+        %68:bool = lt %x_59, 10i
+        if %68 [t: $B23, f: $B24] {  # if_11
+          $B23: {  # true
             exit_if  # if_11
           }
-          %b24 = block {  # false
+          $B24: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_62:i32 = load %i
-        %x_63:i32 = load %i
-        %61:ptr<uniform, vec2<f32>, read> = access %x_13, 0u
-        %x_67:f32 = load_vector_element %61, 1u
-        %63:ptr<function, f32, read_write> = access %data, %x_62
-        %64:i32 = sub 10i, %x_63
-        %65:f32 = convert %64
-        %66:f32 = mul %65, %x_67
-        store %63, %66
-        continue %b22
+        %69:i32 = load %i
+        %x_62:i32 = let %69
+        %71:i32 = load %i
+        %x_63:i32 = let %71
+        %73:ptr<uniform, vec2<f32>, read> = access %x_13, 0u
+        %74:f32 = load_vector_element %73, 1u
+        %x_67:f32 = let %74
+        %76:ptr<function, f32, read_write> = access %data, %x_62
+        %77:i32 = sub 10i, %x_63
+        %78:f32 = convert %77
+        %79:f32 = mul %78, %x_67
+        store %76, %79
+        continue  # -> $B22
       }
-      %b22 = block {  # continuing
-        %x_70:i32 = load %i
-        %68:i32 = add %x_70, 1i
-        store %i, %68
-        next_iteration %b21
+      $B22: {  # continuing
+        %80:i32 = load %i
+        %x_70:i32 = let %80
+        %82:i32 = add %x_70, 1i
+        store %i, %82
+        next_iteration  # -> $B21
       }
     }
     store %i_1, 0i
-    loop [b: %b25, c: %b26] {  # loop_2
-      %b25 = block {  # body
-        %x_76:i32 = load %i_1
-        %70:bool = lt %x_76, 9i
-        if %70 [t: %b27, f: %b28] {  # if_12
-          %b27 = block {  # true
+    loop [b: $B25, c: $B26] {  # loop_2
+      $B25: {  # body
+        %83:i32 = load %i_1
+        %x_76:i32 = let %83
+        %85:bool = lt %x_76, 9i
+        if %85 [t: $B27, f: $B28] {  # if_12
+          $B27: {  # true
             exit_if  # if_12
           }
-          %b28 = block {  # false
+          $B28: {  # false
             exit_loop  # loop_2
           }
         }
         store %j, 0i
-        loop [b: %b29, c: %b30] {  # loop_3
-          %b29 = block {  # body
-            %x_83:i32 = load %j
-            %72:bool = lt %x_83, 10i
-            if %72 [t: %b31, f: %b32] {  # if_13
-              %b31 = block {  # true
+        loop [b: $B29, c: $B30] {  # loop_3
+          $B29: {  # body
+            %86:i32 = load %j
+            %x_83:i32 = let %86
+            %88:bool = lt %x_83, 10i
+            if %88 [t: $B31, f: $B32] {  # if_13
+              $B31: {  # true
                 exit_if  # if_13
               }
-              %b32 = block {  # false
+              $B32: {  # false
                 exit_loop  # loop_3
               }
             }
-            %x_86:i32 = load %j
-            %x_87:i32 = load %i_1
-            %75:i32 = add %x_87, 1i
-            %76:bool = lt %x_86, %75
-            if %76 [t: %b33] {  # if_14
-              %b33 = block {  # true
-                continue %b30
+            %89:i32 = load %j
+            %x_86:i32 = let %89
+            %91:i32 = load %i_1
+            %x_87:i32 = let %91
+            %93:i32 = add %x_87, 1i
+            %94:bool = lt %x_86, %93
+            if %94 [t: $B33] {  # if_14
+              $B33: {  # true
+                continue  # -> $B30
               }
             }
-            %x_92:i32 = load %i_1
-            %x_93:i32 = load %j
-            %79:ptr<function, f32, read_write> = access %data, %x_92
-            %x_95:f32 = load %79
+            %95:i32 = load %i_1
+            %x_92:i32 = let %95
+            %97:i32 = load %j
+            %x_93:i32 = let %97
+            %99:ptr<function, f32, read_write> = access %data, %x_92
+            %100:f32 = load %99
+            %x_95:f32 = let %100
             store %param, %x_95
-            %81:ptr<function, f32, read_write> = access %data, %x_93
-            %x_97:f32 = load %81
+            %102:ptr<function, f32, read_write> = access %data, %x_93
+            %103:f32 = load %102
+            %x_97:f32 = let %103
             store %param_1, %x_97
-            %x_98:bool = call %checkSwap_f1_f1_, %param, %param_1
+            %105:bool = call %checkSwap_f1_f1_, %param, %param_1
+            %x_98:bool = let %105
             store %doSwap, %x_98
-            %x_99:bool = load %doSwap
-            if %x_99 [t: %b34] {  # if_15
-              %b34 = block {  # true
-                %x_102:i32 = load %i_1
-                %86:ptr<function, f32, read_write> = access %data, %x_102
-                %x_104:f32 = load %86
+            %107:bool = load %doSwap
+            %x_99:bool = let %107
+            if %x_99 [t: $B34] {  # if_15
+              $B34: {  # true
+                %109:i32 = load %i_1
+                %x_102:i32 = let %109
+                %111:ptr<function, f32, read_write> = access %data, %x_102
+                %112:f32 = load %111
+                %x_104:f32 = let %112
                 store %temp, %x_104
-                %x_105:i32 = load %i_1
-                %x_106:i32 = load %j
-                %90:ptr<function, f32, read_write> = access %data, %x_106
-                %x_108:f32 = load %90
-                %92:ptr<function, f32, read_write> = access %data, %x_105
-                store %92, %x_108
-                %x_110:i32 = load %j
-                %x_111:f32 = load %temp
-                %95:ptr<function, f32, read_write> = access %data, %x_110
-                store %95, %x_111
+                %114:i32 = load %i_1
+                %x_105:i32 = let %114
+                %116:i32 = load %j
+                %x_106:i32 = let %116
+                %118:ptr<function, f32, read_write> = access %data, %x_106
+                %119:f32 = load %118
+                %x_108:f32 = let %119
+                %121:ptr<function, f32, read_write> = access %data, %x_105
+                store %121, %x_108
+                %122:i32 = load %j
+                %x_110:i32 = let %122
+                %124:f32 = load %temp
+                %x_111:f32 = let %124
+                %126:ptr<function, f32, read_write> = access %data, %x_110
+                store %126, %x_111
                 exit_if  # if_15
               }
             }
-            continue %b30
+            continue  # -> $B30
           }
-          %b30 = block {  # continuing
-            %x_113:i32 = load %j
-            %97:i32 = add %x_113, 1i
-            store %j, %97
-            next_iteration %b29
+          $B30: {  # continuing
+            %127:i32 = load %j
+            %x_113:i32 = let %127
+            %129:i32 = add %x_113, 1i
+            store %j, %129
+            next_iteration  # -> $B29
           }
         }
-        continue %b26
+        continue  # -> $B26
       }
-      %b26 = block {  # continuing
-        %x_115:i32 = load %i_1
-        %99:i32 = add %x_115, 1i
-        store %i_1, %99
-        next_iteration %b25
+      $B26: {  # continuing
+        %130:i32 = load %i_1
+        %x_115:i32 = let %130
+        %132:i32 = add %x_115, 1i
+        store %i_1, %132
+        next_iteration  # -> $B25
       }
     }
-    %x_118:f32 = load_vector_element %gl_FragCoord, 0u
-    %101:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
-    %x_120:f32 = load_vector_element %101, 0u
-    %103:f32 = div %x_120, 2.0f
-    %104:bool = lt %x_118, %103
-    if %104 [t: %b35, f: %b36] {  # if_16
-      %b35 = block {  # true
-        %105:ptr<function, f32, read_write> = access %data, 0i
-        %x_127:f32 = load %105
-        %107:ptr<function, f32, read_write> = access %data, 5i
-        %x_130:f32 = load %107
-        %109:ptr<function, f32, read_write> = access %data, 9i
-        %x_133:f32 = load %109
-        %111:f32 = div %x_127, 10.0f
-        %112:f32 = div %x_130, 10.0f
-        %113:f32 = div %x_133, 10.0f
-        %114:vec4<f32> = construct %111, %112, %113, 1.0f
-        store %x_GLF_color, %114
+    %133:f32 = load_vector_element %gl_FragCoord, 0u
+    %x_118:f32 = let %133
+    %135:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
+    %136:f32 = load_vector_element %135, 0u
+    %x_120:f32 = let %136
+    %138:f32 = div %x_120, 2.0f
+    %139:bool = lt %x_118, %138
+    if %139 [t: $B35, f: $B36] {  # if_16
+      $B35: {  # true
+        %140:ptr<function, f32, read_write> = access %data, 0i
+        %141:f32 = load %140
+        %x_127:f32 = let %141
+        %143:ptr<function, f32, read_write> = access %data, 5i
+        %144:f32 = load %143
+        %x_130:f32 = let %144
+        %146:ptr<function, f32, read_write> = access %data, 9i
+        %147:f32 = load %146
+        %x_133:f32 = let %147
+        %149:f32 = div %x_127, 10.0f
+        %150:f32 = div %x_130, 10.0f
+        %151:f32 = div %x_133, 10.0f
+        %152:vec4<f32> = construct %149, %150, %151, 1.0f
+        store %x_GLF_color, %152
         exit_if  # if_16
       }
-      %b36 = block {  # false
-        %115:ptr<function, f32, read_write> = access %data, 5i
-        %x_137:f32 = load %115
-        %117:ptr<function, f32, read_write> = access %data, 9i
-        %x_140:f32 = load %117
-        %119:ptr<function, f32, read_write> = access %data, 0i
-        %x_143:f32 = load %119
-        %121:f32 = div %x_137, 10.0f
-        %122:f32 = div %x_140, 10.0f
-        %123:f32 = div %x_143, 10.0f
-        %124:vec4<f32> = construct %121, %122, %123, 1.0f
-        store %x_GLF_color, %124
+      $B36: {  # false
+        %153:ptr<function, f32, read_write> = access %data, 5i
+        %154:f32 = load %153
+        %x_137:f32 = let %154
+        %156:ptr<function, f32, read_write> = access %data, 9i
+        %157:f32 = load %156
+        %x_140:f32 = let %157
+        %159:ptr<function, f32, read_write> = access %data, 0i
+        %160:f32 = load %159
+        %x_143:f32 = let %160
+        %162:f32 = div %x_137, 10.0f
+        %163:f32 = div %x_140, 10.0f
+        %164:f32 = div %x_143, 10.0f
+        %165:vec4<f32> = construct %162, %163, %164, 1.0f
+        store %x_GLF_color, %165
         exit_if  # if_16
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b37 {
-  %b37 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B37: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %127:void = call %main_1
-    %128:vec4<f32> = load %x_GLF_color
-    %129:main_out = construct %128
-    ret %129
+    %168:void = call %main_1
+    %169:vec4<f32> = load %x_GLF_color
+    %170:main_out = construct %169
+    ret %170
   }
 }
 
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
index 7ff3415..bef05c1 100644
--- 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
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,14 +8,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%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
@@ -25,79 +25,119 @@
     %11:vec2<f32> = load %10
     %12:vec2<f32> = div %9, %11
     %13:vec2<f32> = mul %12, 8.0f
-    %x_57:vec2<f32> = floor %13
-    %15:f32 = access %x_57, 0u
-    %16:i32 = convert %15
-    %17:i32 = mul %16, 8i
-    %18:f32 = access %x_57, 1u
-    %19:i32 = convert %18
-    %x_63:i32 = add %17, %19
+    %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 = block {  # body
+    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
-        %24:i32 = load %x_68
-        %25:bool = gt %24, 1i
-        if %25 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %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 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %26:i32 = load %x_68
-        %27:i32 = and %26, 1i
-        %28:bool = eq %27, 1i
-        if %28 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
-            %29:i32 = load %x_68
-            %30:i32 = mul 3i, %29
-            %31:i32 = add %30, 1i
-            store %x_79, %31
-            %32:i32 = load %x_79
-            store %x_69, %32
+        %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 = block {  # false
-            %33:i32 = load %x_68
-            %34:i32 = div %33, 2i
-            store %x_80, %34
-            %35:i32 = load %x_80
-            store %x_69, %35
+          $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
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %36:i32 = load %x_65
-        %37:i32 = add %36, 1i
-        store %x_65, %37
-        %38:i32 = load %x_69
-        store %x_68, %38
-        next_iteration %b3
+      $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))
-    %39:i32 = load %x_65
-    %40:i32 = mod %39, 16i
-    %41:ptr<function, vec4<f32>, read_write> = access %indexable, %40
-    %42:vec4<f32> = load %41
-    store %x_GLF_color, %42
+    %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 {
-  %b9 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B9: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %45:void = call %main_1
-    %46:vec4<f32> = load %x_GLF_color
-    %47:main_out = construct %46
-    ret %47
+    %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
   }
 }
 
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
index f21b508..ee51673 100644
--- 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
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,100 +8,145 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%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
-    %x_51:vec4<f32> = load %gl_FragCoord
-    %10:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %x_54:vec2<f32> = load %10
-    %12:f32 = access %x_51, 0u
-    %13:f32 = access %x_51, 1u
-    %14:vec2<f32> = construct %12, %13
-    %15:vec2<f32> = div %14, %x_54
-    %16:vec2<f32> = mul %15, 8.0f
-    %x_57:vec2<f32> = floor %16
-    %18:f32 = access %x_57, 0u
-    %19:i32 = convert %18
-    %20:i32 = mul %19, 8i
-    %21:f32 = access %x_57, 1u
-    %22:i32 = convert %21
-    %x_63:i32 = add %20, %22
+    %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 = block {  # body
+    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
-        %27:i32 = load %x_65_phi
-        store %x_65, %27
-        %x_68:i32 = load %x_68_phi
-        %29:bool = gt %x_68, 1i
-        if %29 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %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 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %30:i32 = and %x_68, 1i
-        %31:bool = eq %30, 1i
-        if %31 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
-            %32:i32 = mul 3i, %x_68
-            %33:i32 = add %32, 1i
-            store %x_79, %33
-            %34:i32 = load %x_79
-            store %x_69_phi, %34
+        %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 = block {  # false
-            %35:i32 = div %x_68, 2i
-            store %x_80, %35
-            %36:i32 = load %x_80
-            store %x_69_phi, %36
+          $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
           }
         }
-        %x_69:i32 = load %x_69_phi
-        continue %b4
+        %45:i32 = load %x_69_phi
+        %x_69:i32 = let %45
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %38:i32 = load %x_65
-        %39:i32 = add %38, 1i
-        %40:i32 = bitcast %39
-        store %x_65_phi, %40
+      $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
+        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))
-    %41:i32 = load %x_65
-    %42:i32 = mod %41, 16i
-    %43:i32 = bitcast %42
-    %44:ptr<function, vec4<f32>, read_write> = access %indexable, %43
-    %x_83:vec4<f32> = load %44
+    %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 {
-  %b9 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B9: {
     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
+    %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
   }
 }
 
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
index 5f64ee1..2168e8f 100644
--- 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
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,105 +8,152 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%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
-    %x_54:vec4<f32> = load %gl_FragCoord
-    %9:vec4<f32> = load %gl_FragCoord
-    %x_55:vec2<f32> = swizzle %9, xy
-    %11:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %12:vec2<f32> = load %11
-    %13:vec2<f32> = div %x_55, %12
-    %x_61:vec2<f32> = mul %13, 8.0f
-    %x_62:vec2<f32> = floor %x_61
-    %16:f32 = access %x_62, 0u
-    %17:i32 = convert %16
-    %18:i32 = mul %17, 8i
-    %19:f32 = access %x_62, 1u
-    %20:i32 = convert %19
-    %x_69:i32 = add %18, %20
+    %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 = block {  # body
+    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
-        %25:i32 = load %x_74
-        %26:bool = gt %25, 1i
-        if %26 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %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 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %27:i32 = load %x_74
-        %28:i32 = and %27, 1i
-        %29:bool = eq %28, 1i
-        if %29 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
-            %30:i32 = load %x_74
-            %31:i32 = mul 3i, %30
-            %32:i32 = add %31, 1i
-            store %x_85, %32
-            %33:i32 = load %x_85
-            store %x_75, %33
+        %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 = block {  # false
-            %34:i32 = load %x_74
-            %35:i32 = div %34, 2i
-            store %x_86, %35
-            %36:i32 = load %x_86
-            store %x_75, %36
+          $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
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %37:i32 = load %x_71
-        %38:i32 = add %37, 1i
-        store %x_71, %38
-        %39:i32 = load %x_75
-        store %x_74, %39
-        next_iteration %b3
+      $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))
-    %x_88:array<vec4<f32>, 16> = load %indexable
+    %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
-    %41: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)
-    %x_89:vec4<f32> = access %41, 1u
-    %43:vec4<f32> = construct 0.0f, 8.0f, %x_55
-    %44:vec4<f32> = construct %x_61, 0.5f, 1.0f
-    %x_90: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), %43, 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), %44
-    %46:i32 = load %x_71
-    %47:i32 = mod %46, 16i
-    %48:ptr<function, vec4<f32>, read_write> = access %indexable, %47
-    %49:vec4<f32> = load %48
-    store %x_GLF_color, %49
+    %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 {
-  %b9 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B9: {
     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
+    %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
   }
 }
 
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
index 547cc92..29ae266 100644
--- 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
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,108 +8,159 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%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
-    %x_54:vec4<f32> = load %gl_FragCoord
-    %10:f32 = access %x_54, 0u
-    %11:f32 = access %x_54, 1u
-    %x_55:vec2<f32> = construct %10, %11
-    %13:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %x_58:vec2<f32> = load %13
-    %15:vec2<f32> = div %x_55, %x_58
-    %x_61:vec2<f32> = mul %15, 8.0f
-    %x_62:vec2<f32> = floor %x_61
-    %18:f32 = access %x_62, 0u
-    %19:i32 = convert %18
-    %20:i32 = mul %19, 8i
-    %21:f32 = access %x_62, 1u
-    %22:i32 = convert %21
-    %x_69:i32 = add %20, %22
+    %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 = block {  # body
+    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
-        %27:i32 = load %x_71_phi
-        store %x_71, %27
-        %x_74:i32 = load %x_74_phi
-        %29:bool = gt %x_74, 1i
-        if %29 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %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 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %30:i32 = and %x_74, 1i
-        %31:bool = eq %30, 1i
-        if %31 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
-            %32:i32 = mul 3i, %x_74
-            %33:i32 = add %32, 1i
-            store %x_85, %33
-            %34:i32 = load %x_85
-            store %x_75_phi, %34
+        %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 = block {  # false
-            %35:i32 = div %x_74, 2i
-            store %x_86, %35
-            %36:i32 = load %x_86
-            store %x_75_phi, %36
+          $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
           }
         }
-        %x_75:i32 = load %x_75_phi
-        continue %b4
+        %47:i32 = load %x_75_phi
+        %x_75:i32 = let %47
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %38:i32 = load %x_71
-        %39:i32 = add %38, 1i
-        %40:i32 = bitcast %39
-        store %x_71_phi, %40
+      $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
+        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_88:array<vec4<f32>, 16> = load %indexable
+    %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
-    %42: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)
-    %x_89:vec4<f32> = access %42, 1u
-    %44:vec4<f32> = construct 0.0f, 8.0f, %x_55
-    %45:vec4<f32> = construct %x_61, 0.5f, 1.0f
-    %x_90: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), %44, 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), %45
-    %47:i32 = load %x_71
-    %48:i32 = mod %47, 16i
-    %49:i32 = bitcast %48
-    %50:ptr<function, vec4<f32>, read_write> = access %indexable, %49
-    %x_92:vec4<f32> = load %50
+    %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 {
-  %b9 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B9: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %54:void = call %main_1
-    %55:vec4<f32> = load %x_GLF_color
-    %56:main_out = construct %55
-    ret %56
+    %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
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-colorgrid-modulo-O-move-block-down/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-colorgrid-modulo-O-move-block-down/1.spvasm.expected.ir.msl
index 9214b0d..cea86da 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-colorgrid-modulo-O-move-block-down/1.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-colorgrid-modulo-O-move-block-down/1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,14 +8,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %c:ptr<function, vec3<f32>, read_write> = var
     %x_51:ptr<function, f32, read_write> = var
     %x_55:ptr<function, f32, read_write> = var
@@ -33,111 +33,115 @@
     %18:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
     %19:f32 = load_vector_element %18, 0u
     %20:f32 = mul %19, 0.125f
-    %x_49:f32 = round %20
-    %22:f32 = load_vector_element %gl_FragCoord, 0u
-    store %x_51, %22
-    switch 0u [c: (default, %b3)] {  # switch_1
-      %b3 = block {  # case
+    %21:f32 = round %20
+    %x_49:f32 = let %21
+    %23:f32 = load_vector_element %gl_FragCoord, 0u
+    store %x_51, %23
+    switch 0u [c: (default, $B3)] {  # switch_1
+      $B3: {  # case
         store %x_55, -0.5f
         store %x_58, 1i
-        loop [b: %b4, c: %b5] {  # loop_1
-          %b4 = block {  # body
+        loop [b: $B4, c: $B5] {  # loop_1
+          $B4: {  # body
             %x_68:ptr<function, f32, read_write> = var
             %x_76:ptr<function, f32, read_write> = var
             %x_59:ptr<function, i32, read_write> = var
             store %x_81, 0.0f
-            %26:f32 = load %x_55
-            store %x_82, %26
+            %27:f32 = load %x_55
+            store %x_82, %27
             store %x_83, false
-            %27:i32 = load %x_58
-            %28:bool = lt %27, 800i
-            if %28 [t: %b6, f: %b7] {  # if_1
-              %b6 = block {  # true
+            %28:i32 = load %x_58
+            %29:bool = lt %28, 800i
+            if %29 [t: $B6, f: $B7] {  # if_1
+              $B6: {  # true
                 exit_if  # if_1
               }
-              %b7 = block {  # false
+              $B7: {  # false
                 exit_loop  # loop_1
               }
             }
             %x_75:ptr<function, f32, read_write> = var
-            %30:i32 = load %x_58
-            %31:i32 = mod %30, 32i
-            %32:bool = eq %31, 0i
-            if %32 [t: %b8, f: %b9] {  # if_2
-              %b8 = block {  # true
-                %33:f32 = load %x_55
-                %34:f32 = add %33, 0.40000000596046447754f
-                store %x_68, %34
-                %35:f32 = load %x_68
-                store %x_56, %35
+            %31:i32 = load %x_58
+            %32:i32 = call %tint_mod_i32, %31, 32i
+            %34:bool = eq %32, 0i
+            if %34 [t: $B8, f: $B9] {  # if_2
+              $B8: {  # true
+                %35:f32 = load %x_55
+                %36:f32 = add %35, 0.40000000596046447754f
+                store %x_68, %36
+                %37:f32 = load %x_68
+                store %x_56, %37
                 exit_if  # if_2
               }
-              %b9 = block {  # false
-                %36:f32 = load %x_55
-                store %x_76, %36
-                %37:i32 = load %x_58
-                %38:f32 = convert %37
-                %39:f32 = round %x_49
-                %40:i32 = load %x_58
-                %41:f32 = convert %40
+              $B9: {  # false
+                %38:f32 = load %x_55
+                store %x_76, %38
+                %39:i32 = load %x_58
+                %40:f32 = convert %39
+                %41:f32 = let %40
                 %42:f32 = round %x_49
-                %43:f32 = div %41, %42
-                %44:f32 = floor %43
-                %45:f32 = mul %39, %44
-                %46:f32 = sub %38, %45
-                %47:bool = lte %46, 0.00999999977648258209f
-                if %47 [t: %b10] {  # if_3
-                  %b10 = block {  # true
-                    %48:f32 = load %x_55
-                    %49:f32 = add %48, 100.0f
-                    store %x_75, %49
-                    %50:f32 = load %x_75
-                    store %x_76, %50
+                %43:f32 = let %42
+                %44:i32 = load %x_58
+                %45:f32 = convert %44
+                %46:f32 = let %45
+                %47:f32 = round %x_49
+                %48:f32 = div %46, %47
+                %49:f32 = floor %48
+                %50:f32 = mul %43, %49
+                %51:f32 = sub %41, %50
+                %52:bool = lte %51, 0.00999999977648258209f
+                if %52 [t: $B10] {  # if_3
+                  $B10: {  # true
+                    %53:f32 = load %x_55
+                    %54:f32 = add %53, 100.0f
+                    store %x_75, %54
+                    %55:f32 = load %x_75
+                    store %x_76, %55
                     exit_if  # if_3
                   }
                 }
-                %51:f32 = load %x_76
-                store %x_56, %51
+                %56:f32 = load %x_76
+                store %x_56, %56
                 exit_if  # if_2
               }
             }
-            %52:i32 = load %x_58
-            %53:f32 = convert %52
-            %54:f32 = load %x_51
-            %55:bool = gte %53, %54
-            if %55 [t: %b11] {  # if_4
-              %b11 = block {  # true
-                %56:f32 = load %x_56
-                store %x_81, %56
-                %57:f32 = load %x_56
-                store %x_82, %57
+            %57:i32 = load %x_58
+            %58:f32 = convert %57
+            %59:f32 = load %x_51
+            %60:bool = gte %58, %59
+            if %60 [t: $B11] {  # if_4
+              $B11: {  # true
+                %61:f32 = load %x_56
+                store %x_81, %61
+                %62:f32 = load %x_56
+                store %x_82, %62
                 store %x_83, true
                 exit_loop  # loop_1
               }
             }
-            continue %b5
+            continue  # -> $B5
           }
-          %b5 = block {  # continuing
-            %58:i32 = load %x_58
-            %59:i32 = add %58, 1i
-            store %x_59, %59
-            %60:f32 = load %x_56
-            store %x_55, %60
-            %61:i32 = load %x_59
-            store %x_58, %61
-            next_iteration %b4
+          $B5: {  # continuing
+            %63:i32 = load %x_58
+            %64:i32 = add %63, 1i
+            store %x_59, %64
+            %65:f32 = load %x_56
+            store %x_55, %65
+            %66:i32 = load %x_59
+            store %x_58, %66
+            next_iteration  # -> $B4
           }
         }
-        %62:f32 = load %x_81
-        store %x_85, %62
-        %63:bool = load %x_83
-        if %63 [t: %b12] {  # if_5
-          %b12 = block {  # true
+        %67:f32 = load %x_81
+        store %x_85, %67
+        %68:bool = load %x_83
+        if %68 [t: $B12] {  # if_5
+          $B12: {  # true
             exit_switch  # switch_1
           }
         }
-        %64:f32 = load %x_82
-        store %x_85, %64
+        %69:f32 = load %x_82
+        store %x_85, %69
         exit_switch  # switch_1
       }
     }
@@ -146,179 +150,198 @@
     %x_95:ptr<function, i32, read_write> = var
     %x_93:ptr<function, f32, read_write> = var
     %x_120:ptr<function, bool, read_write> = var
-    %70:f32 = load %x_85
-    store_vector_element %c, 0u, %70
-    %71:f32 = load_vector_element %gl_FragCoord, 1u
-    store %x_88, %71
-    switch 0u [c: (default, %b13)] {  # switch_2
-      %b13 = block {  # case
+    %75:f32 = load %x_85
+    store_vector_element %c, 0u, %75
+    %76:f32 = load_vector_element %gl_FragCoord, 1u
+    store %x_88, %76
+    switch 0u [c: (default, $B13)] {  # switch_2
+      $B13: {  # case
         store %x_92, -0.5f
         store %x_95, 1i
-        loop [b: %b14, c: %b15] {  # loop_2
-          %b14 = block {  # body
+        loop [b: $B14, c: $B15] {  # loop_2
+          $B14: {  # body
             %x_113:ptr<function, f32, read_write> = var
             %x_112:ptr<function, f32, read_write> = var
             %x_96:ptr<function, i32, read_write> = var
             store %x_118, 0.0f
-            %75:f32 = load %x_92
-            store %x_119, %75
+            %80:f32 = load %x_92
+            store %x_119, %80
             store %x_120, false
-            %76:i32 = load %x_95
-            %77:bool = lt %76, 800i
-            if %77 [t: %b16, f: %b17] {  # if_6
-              %b16 = block {  # true
+            %81:i32 = load %x_95
+            %82:bool = lt %81, 800i
+            if %82 [t: $B16, f: $B17] {  # if_6
+              $B16: {  # true
                 exit_if  # if_6
               }
-              %b17 = block {  # false
+              $B17: {  # false
                 exit_loop  # loop_2
               }
             }
             %x_111:ptr<function, f32, read_write> = var
-            %79:i32 = load %x_95
-            %80:i32 = mod %79, 32i
-            %81:bool = eq %80, 0i
-            if %81 [t: %b18, f: %b19] {  # if_7
-              %b18 = block {  # true
-                %82:f32 = load %x_92
-                %83:f32 = add %82, 0.40000000596046447754f
-                store %x_113, %83
-                %84:f32 = load %x_113
-                store %x_93, %84
+            %84:i32 = load %x_95
+            %85:i32 = call %tint_mod_i32, %84, 32i
+            %86:bool = eq %85, 0i
+            if %86 [t: $B18, f: $B19] {  # if_7
+              $B18: {  # true
+                %87:f32 = load %x_92
+                %88:f32 = add %87, 0.40000000596046447754f
+                store %x_113, %88
+                %89:f32 = load %x_113
+                store %x_93, %89
                 exit_if  # if_7
               }
-              %b19 = block {  # false
-                %85:f32 = load %x_92
-                store %x_112, %85
-                %86:i32 = load %x_95
-                %87:f32 = convert %86
-                %88:f32 = round %x_49
-                %89:i32 = load %x_95
-                %90:f32 = convert %89
-                %91:f32 = round %x_49
-                %92:f32 = div %90, %91
-                %93:f32 = floor %92
-                %94:f32 = mul %88, %93
-                %95:f32 = sub %87, %94
-                %96:bool = lte %95, 0.00999999977648258209f
-                if %96 [t: %b20] {  # if_8
-                  %b20 = block {  # true
-                    %97:f32 = load %x_92
-                    %98:f32 = add %97, 100.0f
-                    store %x_111, %98
-                    %99:f32 = load %x_111
-                    store %x_112, %99
+              $B19: {  # false
+                %90:f32 = load %x_92
+                store %x_112, %90
+                %91:i32 = load %x_95
+                %92:f32 = convert %91
+                %93:f32 = let %92
+                %94:f32 = round %x_49
+                %95:f32 = let %94
+                %96:i32 = load %x_95
+                %97:f32 = convert %96
+                %98:f32 = let %97
+                %99:f32 = round %x_49
+                %100:f32 = div %98, %99
+                %101:f32 = floor %100
+                %102:f32 = mul %95, %101
+                %103:f32 = sub %93, %102
+                %104:bool = lte %103, 0.00999999977648258209f
+                if %104 [t: $B20] {  # if_8
+                  $B20: {  # true
+                    %105:f32 = load %x_92
+                    %106:f32 = add %105, 100.0f
+                    store %x_111, %106
+                    %107:f32 = load %x_111
+                    store %x_112, %107
                     exit_if  # if_8
                   }
                 }
-                %100:f32 = load %x_112
-                store %x_93, %100
+                %108:f32 = load %x_112
+                store %x_93, %108
                 exit_if  # if_7
               }
             }
-            %101:i32 = load %x_95
-            %102:f32 = convert %101
-            %103:f32 = load %x_88
-            %104:bool = gte %102, %103
-            if %104 [t: %b21] {  # if_9
-              %b21 = block {  # true
-                %105:f32 = load %x_93
-                store %x_118, %105
-                %106:f32 = load %x_93
-                store %x_119, %106
+            %109:i32 = load %x_95
+            %110:f32 = convert %109
+            %111:f32 = load %x_88
+            %112:bool = gte %110, %111
+            if %112 [t: $B21] {  # if_9
+              $B21: {  # true
+                %113:f32 = load %x_93
+                store %x_118, %113
+                %114:f32 = load %x_93
+                store %x_119, %114
                 store %x_120, true
                 exit_loop  # loop_2
               }
             }
-            continue %b15
+            continue  # -> $B15
           }
-          %b15 = block {  # continuing
-            %107:i32 = load %x_95
-            %108:i32 = add %107, 1i
-            store %x_96, %108
-            %109:f32 = load %x_93
-            store %x_92, %109
-            %110:i32 = load %x_96
-            store %x_95, %110
-            next_iteration %b14
+          $B15: {  # continuing
+            %115:i32 = load %x_95
+            %116:i32 = add %115, 1i
+            store %x_96, %116
+            %117:f32 = load %x_93
+            store %x_92, %117
+            %118:i32 = load %x_96
+            store %x_95, %118
+            next_iteration  # -> $B14
           }
         }
-        %111:f32 = load %x_118
-        store %x_122, %111
-        %112:bool = load %x_120
-        if %112 [t: %b22] {  # if_10
-          %b22 = block {  # true
+        %119:f32 = load %x_118
+        store %x_122, %119
+        %120:bool = load %x_120
+        if %120 [t: $B22] {  # if_10
+          $B22: {  # true
             exit_switch  # switch_2
           }
         }
-        %113:f32 = load %x_119
-        store %x_122, %113
+        %121:f32 = load %x_119
+        store %x_122, %121
         exit_switch  # switch_2
       }
     }
-    %114:f32 = load %x_122
-    store_vector_element %c, 1u, %114
-    %115:f32 = load_vector_element %c, 0u
-    %116:f32 = load_vector_element %c, 1u
-    %117:f32 = add %115, %116
-    store_vector_element %c, 2u, %117
+    %122:f32 = load %x_122
+    store_vector_element %c, 1u, %122
+    %123:f32 = load_vector_element %c, 0u
+    %124:f32 = load_vector_element %c, 1u
+    %125:f32 = add %123, %124
+    store_vector_element %c, 2u, %125
     store %x_129, 0i
-    loop [b: %b23, c: %b24] {  # loop_3
-      %b23 = block {  # body
+    loop [b: $B23, c: $B24] {  # loop_3
+      $B23: {  # body
         %x_130:ptr<function, i32, read_write> = var
-        %119:i32 = load %x_129
-        %120:bool = lt %119, 3i
-        if %120 [t: %b25, f: %b26] {  # if_11
-          %b25 = block {  # true
+        %127:i32 = load %x_129
+        %128:bool = lt %127, 3i
+        if %128 [t: $B25, f: $B26] {  # if_11
+          $B25: {  # true
             exit_if  # if_11
           }
-          %b26 = block {  # false
+          $B26: {  # false
             exit_loop  # loop_3
           }
         }
-        %121:i32 = load %x_129
-        %122:f32 = load_vector_element %c, %121
-        %123:bool = gte %122, 1.0f
-        if %123 [t: %b27] {  # if_12
-          %b27 = block {  # true
-            %124:i32 = load %x_129
-            %125:i32 = load %x_129
-            %126:f32 = load_vector_element %c, %125
-            %127:i32 = load %x_129
-            %128:f32 = load_vector_element %c, %127
-            %129:f32 = mul %126, %128
-            store_vector_element %c, %124, %129
+        %129:i32 = load %x_129
+        %130:f32 = load_vector_element %c, %129
+        %131:bool = gte %130, 1.0f
+        if %131 [t: $B27] {  # if_12
+          $B27: {  # true
+            %132:i32 = load %x_129
+            %133:i32 = load %x_129
+            %134:f32 = load_vector_element %c, %133
+            %135:i32 = load %x_129
+            %136:f32 = load_vector_element %c, %135
+            %137:f32 = mul %134, %136
+            store_vector_element %c, %132, %137
             exit_if  # if_12
           }
         }
-        continue %b24
+        continue  # -> $B24
       }
-      %b24 = block {  # continuing
-        %130:i32 = load %x_129
-        %131:i32 = add %130, 1i
-        store %x_130, %131
-        %132:i32 = load %x_130
-        store %x_129, %132
-        next_iteration %b23
+      $B24: {  # continuing
+        %138:i32 = load %x_129
+        %139:i32 = add %138, 1i
+        store %x_130, %139
+        %140:i32 = load %x_130
+        store %x_129, %140
+        next_iteration  # -> $B23
       }
     }
-    %133:vec3<f32> = load %c
-    %134:vec3<f32> = abs %133
-    %x_145:vec3<f32> = normalize %134
-    %136:f32 = access %x_145, 0u
-    %137:f32 = access %x_145, 1u
-    %138:f32 = access %x_145, 2u
-    %139:vec4<f32> = construct %136, %137, %138, 1.0f
-    store %x_GLF_color, %139
+    %141:vec3<f32> = load %c
+    %142:vec3<f32> = abs %141
+    %143:vec3<f32> = normalize %142
+    %x_145:vec3<f32> = let %143
+    %145:f32 = access %x_145, 0u
+    %146:f32 = access %x_145, 1u
+    %147:f32 = access %x_145, 2u
+    %148:vec4<f32> = construct %145, %146, %147, 1.0f
+    store %x_GLF_color, %148
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b28 {
-  %b28 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B28: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %142:void = call %main_1
-    %143:vec4<f32> = load %x_GLF_color
-    %144:main_out = construct %143
-    ret %144
+    %151:void = call %main_1
+    %152:vec4<f32> = load %x_GLF_color
+    %153:main_out = construct %152
+    ret %153
+  }
+}
+%tint_mod_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B29: {
+    %156:bool = eq %rhs, 0i
+    %157:bool = eq %lhs, -2147483648i
+    %158:bool = eq %rhs, -1i
+    %159:bool = and %157, %158
+    %160:bool = or %156, %159
+    %161:i32 = select %rhs, 1i, %160
+    %162:i32 = let %161
+    %163:i32 = div %lhs, %162
+    %164:i32 = mul %163, %162
+    %165:i32 = sub %lhs, %164
+    ret %165
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-colorgrid-modulo-O-move-block-down/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-colorgrid-modulo-O-move-block-down/1.wgsl.expected.ir.msl
index e4684a2..b5f2e5b 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-colorgrid-modulo-O-move-block-down/1.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-colorgrid-modulo-O-move-block-down/1.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,14 +8,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %c:ptr<function, vec3<f32>, read_write> = var
     %x_51:ptr<function, f32, read_write> = var
     %x_55:ptr<function, f32, read_write> = var
@@ -34,120 +34,127 @@
     %x_129_phi:ptr<function, i32, read_write> = var
     store %c, vec3<f32>(7.0f, 8.0f, 9.0f)
     %21:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-    %x_47:f32 = load_vector_element %21, 0u
-    %23:f32 = mul %x_47, 0.125f
-    %x_49:f32 = round %23
-    %25:f32 = load_vector_element %gl_FragCoord, 0u
-    store %x_51, %25
-    switch 0u [c: (default, %b3)] {  # switch_1
-      %b3 = block {  # case
+    %22:f32 = load_vector_element %21, 0u
+    %x_47:f32 = let %22
+    %24:f32 = mul %x_47, 0.125f
+    %25:f32 = round %24
+    %x_49:f32 = let %25
+    %27:f32 = load_vector_element %gl_FragCoord, 0u
+    store %x_51, %27
+    switch 0u [c: (default, $B3)] {  # switch_1
+      $B3: {  # case
         store %x_55_phi, -0.5f
         store %x_58_phi, 1i
-        loop [b: %b4, c: %b5] {  # loop_1
-          %b4 = block {  # body
+        loop [b: $B4, c: $B5] {  # loop_1
+          $B4: {  # body
             %x_68:ptr<function, f32, read_write> = var
             %x_76:ptr<function, f32, read_write> = var
             %x_59:ptr<function, i32, read_write> = var
             %x_56_phi:ptr<function, f32, read_write> = var
-            %30:f32 = load %x_55_phi
-            store %x_55, %30
-            %x_58:i32 = load %x_58_phi
+            %32:f32 = load %x_55_phi
+            store %x_55, %32
+            %33:i32 = load %x_58_phi
+            %x_58:i32 = let %33
             store %x_81_phi, 0.0f
-            %32:f32 = load %x_55
-            store %x_82_phi, %32
+            %35:f32 = load %x_55
+            store %x_82_phi, %35
             store %x_83_phi, false
-            %33:bool = lt %x_58, 800i
-            if %33 [t: %b6, f: %b7] {  # if_1
-              %b6 = block {  # true
+            %36:bool = lt %x_58, 800i
+            if %36 [t: $B6, f: $B7] {  # if_1
+              $B6: {  # true
                 exit_if  # if_1
               }
-              %b7 = block {  # false
+              $B7: {  # false
                 exit_loop  # loop_1
               }
             }
             %x_75:ptr<function, f32, read_write> = var
             %x_76_phi:ptr<function, f32, read_write> = var
-            %36:i32 = mod %x_58, 32i
-            %37:bool = eq %36, 0i
-            if %37 [t: %b8, f: %b9] {  # if_2
-              %b8 = block {  # true
-                %38:f32 = load %x_55
-                %39:f32 = add %38, 0.40000000596046447754f
-                store %x_68, %39
-                %40:f32 = load %x_68
-                store %x_56_phi, %40
+            %39:i32 = call %tint_mod_i32, %x_58, 32i
+            %41:bool = eq %39, 0i
+            if %41 [t: $B8, f: $B9] {  # if_2
+              $B8: {  # true
+                %42:f32 = load %x_55
+                %43:f32 = add %42, 0.40000000596046447754f
+                store %x_68, %43
+                %44:f32 = load %x_68
+                store %x_56_phi, %44
                 exit_if  # if_2
               }
-              %b9 = block {  # false
-                %41:f32 = load %x_55
-                store %x_76_phi, %41
-                %42:f32 = convert %x_58
-                %43:f32 = round %x_49
-                %44:f32 = convert %x_58
-                %45:f32 = round %x_49
-                %46:f32 = div %44, %45
-                %47:f32 = floor %46
-                %48:f32 = mul %43, %47
-                %49:f32 = sub %42, %48
-                %50:bool = lte %49, 0.00999999977648258209f
-                if %50 [t: %b10] {  # if_3
-                  %b10 = block {  # true
-                    %51:f32 = load %x_55
-                    %52:f32 = add %51, 100.0f
-                    store %x_75, %52
-                    %53:f32 = load %x_75
-                    store %x_76_phi, %53
+              $B9: {  # false
+                %45:f32 = load %x_55
+                store %x_76_phi, %45
+                %46:f32 = convert %x_58
+                %47:f32 = let %46
+                %48:f32 = round %x_49
+                %49:f32 = let %48
+                %50:f32 = convert %x_58
+                %51:f32 = let %50
+                %52:f32 = round %x_49
+                %53:f32 = div %51, %52
+                %54:f32 = floor %53
+                %55:f32 = mul %49, %54
+                %56:f32 = sub %47, %55
+                %57:bool = lte %56, 0.00999999977648258209f
+                if %57 [t: $B10] {  # if_3
+                  $B10: {  # true
+                    %58:f32 = load %x_55
+                    %59:f32 = add %58, 100.0f
+                    store %x_75, %59
+                    %60:f32 = load %x_75
+                    store %x_76_phi, %60
                     exit_if  # if_3
                   }
                 }
-                %54:f32 = load %x_76_phi
-                store %x_76, %54
-                %55:f32 = load %x_76
-                store %x_56_phi, %55
+                %61:f32 = load %x_76_phi
+                store %x_76, %61
+                %62:f32 = load %x_76
+                store %x_56_phi, %62
                 exit_if  # if_2
               }
             }
-            %56:f32 = load %x_56_phi
-            store %x_56, %56
-            %57:f32 = convert %x_58
-            %58:f32 = load %x_51
-            %59:bool = gte %57, %58
-            if %59 [t: %b11] {  # if_4
-              %b11 = block {  # true
-                %60:f32 = load %x_56
-                store %x_81_phi, %60
-                %61:f32 = load %x_56
-                store %x_82_phi, %61
+            %63:f32 = load %x_56_phi
+            store %x_56, %63
+            %64:f32 = convert %x_58
+            %65:f32 = load %x_51
+            %66:bool = gte %64, %65
+            if %66 [t: $B11] {  # if_4
+              $B11: {  # true
+                %67:f32 = load %x_56
+                store %x_81_phi, %67
+                %68:f32 = load %x_56
+                store %x_82_phi, %68
                 store %x_83_phi, true
                 exit_loop  # loop_1
               }
             }
-            continue %b5
+            continue  # -> $B5
           }
-          %b5 = block {  # continuing
-            %62:i32 = add %x_58, 1i
-            store %x_59, %62
-            %63:f32 = load %x_56
-            store %x_55_phi, %63
-            %64:i32 = load %x_59
-            store %x_58_phi, %64
-            next_iteration %b4
+          $B5: {  # continuing
+            %69:i32 = add %x_58, 1i
+            store %x_59, %69
+            %70:f32 = load %x_56
+            store %x_55_phi, %70
+            %71:i32 = load %x_59
+            store %x_58_phi, %71
+            next_iteration  # -> $B4
           }
         }
-        %65:f32 = load %x_81_phi
-        store %x_81, %65
-        %66:f32 = load %x_82_phi
-        store %x_82, %66
-        %x_83:bool = load %x_83_phi
-        %68:f32 = load %x_81
-        store %x_85_phi, %68
-        if %x_83 [t: %b12] {  # if_5
-          %b12 = block {  # true
+        %72:f32 = load %x_81_phi
+        store %x_81, %72
+        %73:f32 = load %x_82_phi
+        store %x_82, %73
+        %74:bool = load %x_83_phi
+        %x_83:bool = let %74
+        %76:f32 = load %x_81
+        store %x_85_phi, %76
+        if %x_83 [t: $B12] {  # if_5
+          $B12: {  # true
             exit_switch  # switch_1
           }
         }
-        %69:f32 = load %x_82
-        store %x_85_phi, %69
+        %77:f32 = load %x_82
+        store %x_85_phi, %77
         exit_switch  # switch_1
       }
     }
@@ -159,181 +166,211 @@
     %x_118_phi:ptr<function, f32, read_write> = var
     %x_119_phi:ptr<function, f32, read_write> = var
     %x_120_phi:ptr<function, bool, read_write> = var
-    %x_85:f32 = load %x_85_phi
+    %86:f32 = load %x_85_phi
+    %x_85:f32 = let %86
     store_vector_element %c, 0u, %x_85
-    %79:f32 = load_vector_element %gl_FragCoord, 1u
-    store %x_88, %79
-    switch 0u [c: (default, %b13)] {  # switch_2
-      %b13 = block {  # case
+    %88:f32 = load_vector_element %gl_FragCoord, 1u
+    store %x_88, %88
+    switch 0u [c: (default, $B13)] {  # switch_2
+      $B13: {  # case
         store %x_92_phi, -0.5f
         store %x_95_phi, 1i
-        loop [b: %b14, c: %b15] {  # loop_2
-          %b14 = block {  # body
+        loop [b: $B14, c: $B15] {  # loop_2
+          $B14: {  # body
             %x_113:ptr<function, f32, read_write> = var
             %x_112:ptr<function, f32, read_write> = var
             %x_96:ptr<function, i32, read_write> = var
             %x_93_phi:ptr<function, f32, read_write> = var
-            %84:f32 = load %x_92_phi
-            store %x_92, %84
-            %x_95:i32 = load %x_95_phi
+            %93:f32 = load %x_92_phi
+            store %x_92, %93
+            %94:i32 = load %x_95_phi
+            %x_95:i32 = let %94
             store %x_118_phi, 0.0f
-            %86:f32 = load %x_92
-            store %x_119_phi, %86
+            %96:f32 = load %x_92
+            store %x_119_phi, %96
             store %x_120_phi, false
-            %87:bool = lt %x_95, 800i
-            if %87 [t: %b16, f: %b17] {  # if_6
-              %b16 = block {  # true
+            %97:bool = lt %x_95, 800i
+            if %97 [t: $B16, f: $B17] {  # if_6
+              $B16: {  # true
                 exit_if  # if_6
               }
-              %b17 = block {  # false
+              $B17: {  # false
                 exit_loop  # loop_2
               }
             }
             %x_111:ptr<function, f32, read_write> = var
             %x_112_phi:ptr<function, f32, read_write> = var
-            %90:i32 = mod %x_95, 32i
-            %91:bool = eq %90, 0i
-            if %91 [t: %b18, f: %b19] {  # if_7
-              %b18 = block {  # true
-                %92:f32 = load %x_92
-                %93:f32 = add %92, 0.40000000596046447754f
-                store %x_113, %93
-                %94:f32 = load %x_113
-                store %x_93_phi, %94
+            %100:i32 = call %tint_mod_i32, %x_95, 32i
+            %101:bool = eq %100, 0i
+            if %101 [t: $B18, f: $B19] {  # if_7
+              $B18: {  # true
+                %102:f32 = load %x_92
+                %103:f32 = add %102, 0.40000000596046447754f
+                store %x_113, %103
+                %104:f32 = load %x_113
+                store %x_93_phi, %104
                 exit_if  # if_7
               }
-              %b19 = block {  # false
-                %95:f32 = load %x_92
-                store %x_112_phi, %95
-                %96:f32 = convert %x_95
-                %97:f32 = round %x_49
-                %98:f32 = convert %x_95
-                %99:f32 = round %x_49
-                %100:f32 = div %98, %99
-                %101:f32 = floor %100
-                %102:f32 = mul %97, %101
-                %103:f32 = sub %96, %102
-                %104:bool = lte %103, 0.00999999977648258209f
-                if %104 [t: %b20] {  # if_8
-                  %b20 = block {  # true
-                    %105:f32 = load %x_92
-                    %106:f32 = add %105, 100.0f
-                    store %x_111, %106
-                    %107:f32 = load %x_111
-                    store %x_112_phi, %107
+              $B19: {  # false
+                %105:f32 = load %x_92
+                store %x_112_phi, %105
+                %106:f32 = convert %x_95
+                %107:f32 = let %106
+                %108:f32 = round %x_49
+                %109:f32 = let %108
+                %110:f32 = convert %x_95
+                %111:f32 = let %110
+                %112:f32 = round %x_49
+                %113:f32 = div %111, %112
+                %114:f32 = floor %113
+                %115:f32 = mul %109, %114
+                %116:f32 = sub %107, %115
+                %117:bool = lte %116, 0.00999999977648258209f
+                if %117 [t: $B20] {  # if_8
+                  $B20: {  # true
+                    %118:f32 = load %x_92
+                    %119:f32 = add %118, 100.0f
+                    store %x_111, %119
+                    %120:f32 = load %x_111
+                    store %x_112_phi, %120
                     exit_if  # if_8
                   }
                 }
-                %108:f32 = load %x_112_phi
-                store %x_112, %108
-                %109:f32 = load %x_112
-                store %x_93_phi, %109
+                %121:f32 = load %x_112_phi
+                store %x_112, %121
+                %122:f32 = load %x_112
+                store %x_93_phi, %122
                 exit_if  # if_7
               }
             }
-            %110:f32 = load %x_93_phi
-            store %x_93, %110
-            %111:f32 = convert %x_95
-            %112:f32 = load %x_88
-            %113:bool = gte %111, %112
-            if %113 [t: %b21] {  # if_9
-              %b21 = block {  # true
-                %114:f32 = load %x_93
-                store %x_118_phi, %114
-                %115:f32 = load %x_93
-                store %x_119_phi, %115
+            %123:f32 = load %x_93_phi
+            store %x_93, %123
+            %124:f32 = convert %x_95
+            %125:f32 = load %x_88
+            %126:bool = gte %124, %125
+            if %126 [t: $B21] {  # if_9
+              $B21: {  # true
+                %127:f32 = load %x_93
+                store %x_118_phi, %127
+                %128:f32 = load %x_93
+                store %x_119_phi, %128
                 store %x_120_phi, true
                 exit_loop  # loop_2
               }
             }
-            continue %b15
+            continue  # -> $B15
           }
-          %b15 = block {  # continuing
-            %116:i32 = add %x_95, 1i
-            store %x_96, %116
-            %117:f32 = load %x_93
-            store %x_92_phi, %117
-            %118:i32 = load %x_96
-            store %x_95_phi, %118
-            next_iteration %b14
+          $B15: {  # continuing
+            %129:i32 = add %x_95, 1i
+            store %x_96, %129
+            %130:f32 = load %x_93
+            store %x_92_phi, %130
+            %131:i32 = load %x_96
+            store %x_95_phi, %131
+            next_iteration  # -> $B14
           }
         }
-        %119:f32 = load %x_118_phi
-        store %x_118, %119
-        %120:f32 = load %x_119_phi
-        store %x_119, %120
-        %x_120:bool = load %x_120_phi
-        %122:f32 = load %x_118
-        store %x_122_phi, %122
-        if %x_120 [t: %b22] {  # if_10
-          %b22 = block {  # true
+        %132:f32 = load %x_118_phi
+        store %x_118, %132
+        %133:f32 = load %x_119_phi
+        store %x_119, %133
+        %134:bool = load %x_120_phi
+        %x_120:bool = let %134
+        %136:f32 = load %x_118
+        store %x_122_phi, %136
+        if %x_120 [t: $B22] {  # if_10
+          $B22: {  # true
             exit_switch  # switch_2
           }
         }
-        %123:f32 = load %x_119
-        store %x_122_phi, %123
+        %137:f32 = load %x_119
+        store %x_122_phi, %137
         exit_switch  # switch_2
       }
     }
-    %x_122:f32 = load %x_122_phi
+    %138:f32 = load %x_122_phi
+    %x_122:f32 = let %138
     store_vector_element %c, 1u, %x_122
-    %x_124:f32 = load_vector_element %c, 0u
-    %x_125:f32 = load_vector_element %c, 1u
-    %127:f32 = add %x_124, %x_125
-    store_vector_element %c, 2u, %127
+    %140:f32 = load_vector_element %c, 0u
+    %x_124:f32 = let %140
+    %142:f32 = load_vector_element %c, 1u
+    %x_125:f32 = let %142
+    %144:f32 = add %x_124, %x_125
+    store_vector_element %c, 2u, %144
     store %x_129_phi, 0i
-    loop [b: %b23, c: %b24] {  # loop_3
-      %b23 = block {  # body
+    loop [b: $B23, c: $B24] {  # loop_3
+      $B23: {  # body
         %x_130:ptr<function, i32, read_write> = var
-        %x_129:i32 = load %x_129_phi
-        %130:bool = lt %x_129, 3i
-        if %130 [t: %b25, f: %b26] {  # if_11
-          %b25 = block {  # true
+        %146:i32 = load %x_129_phi
+        %x_129:i32 = let %146
+        %148:bool = lt %x_129, 3i
+        if %148 [t: $B25, f: $B26] {  # if_11
+          $B25: {  # true
             exit_if  # if_11
           }
-          %b26 = block {  # false
+          $B26: {  # false
             exit_loop  # loop_3
           }
         }
-        %x_136:f32 = load_vector_element %c, %x_129
-        %132:bool = gte %x_136, 1.0f
-        if %132 [t: %b27] {  # if_12
-          %b27 = block {  # true
-            %x_140:f32 = load_vector_element %c, %x_129
-            %x_141:f32 = load_vector_element %c, %x_129
-            %135:f32 = mul %x_140, %x_141
-            store_vector_element %c, %x_129, %135
+        %149:f32 = load_vector_element %c, %x_129
+        %x_136:f32 = let %149
+        %151:bool = gte %x_136, 1.0f
+        if %151 [t: $B27] {  # if_12
+          $B27: {  # true
+            %152:f32 = load_vector_element %c, %x_129
+            %x_140:f32 = let %152
+            %154:f32 = load_vector_element %c, %x_129
+            %x_141:f32 = let %154
+            %156:f32 = mul %x_140, %x_141
+            store_vector_element %c, %x_129, %156
             exit_if  # if_12
           }
         }
-        continue %b24
+        continue  # -> $B24
       }
-      %b24 = block {  # continuing
-        %136:i32 = add %x_129, 1i
-        store %x_130, %136
-        %137:i32 = load %x_130
-        store %x_129_phi, %137
-        next_iteration %b23
+      $B24: {  # continuing
+        %157:i32 = add %x_129, 1i
+        store %x_130, %157
+        %158:i32 = load %x_130
+        store %x_129_phi, %158
+        next_iteration  # -> $B23
       }
     }
-    %x_143:vec3<f32> = load %c
-    %139:vec3<f32> = abs %x_143
-    %x_145:vec3<f32> = normalize %139
-    %141:f32 = access %x_145, 0u
-    %142:f32 = access %x_145, 1u
-    %143:f32 = access %x_145, 2u
-    %144:vec4<f32> = construct %141, %142, %143, 1.0f
-    store %x_GLF_color, %144
+    %159:vec3<f32> = load %c
+    %x_143:vec3<f32> = let %159
+    %161:vec3<f32> = abs %x_143
+    %162:vec3<f32> = normalize %161
+    %x_145:vec3<f32> = let %162
+    %164:f32 = access %x_145, 0u
+    %165:f32 = access %x_145, 1u
+    %166:f32 = access %x_145, 2u
+    %167:vec4<f32> = construct %164, %165, %166, 1.0f
+    store %x_GLF_color, %167
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b28 {
-  %b28 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B28: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %147:void = call %main_1
-    %148:vec4<f32> = load %x_GLF_color
-    %149:main_out = construct %148
-    ret %149
+    %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 {
+  $B29: {
+    %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
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/1.spvasm.expected.ir.msl
index e0d3a32..f1bf5f2 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/1.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,15 +8,15 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %map:ptr<private, array<i32, 256>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %pos:ptr<function, vec2<f32>, read_write> = var
     %ipos:ptr<function, vec2<i32>, read_write> = var
     %i:ptr<function, i32, read_write> = var
@@ -34,42 +34,44 @@
     store %pos, %19
     %20:f32 = load_vector_element %pos, 0u
     %21:f32 = mul %20, 16.0f
-    %22:i32 = convert %21
-    %23:f32 = load_vector_element %pos, 1u
-    %24:f32 = mul %23, 16.0f
-    %25:i32 = convert %24
-    %26:vec2<i32> = construct %22, %25
-    store %ipos, %26
+    %22:i32 = call %tint_f32_to_i32, %21
+    %24:i32 = let %22
+    %25:f32 = load_vector_element %pos, 1u
+    %26:f32 = mul %25, 16.0f
+    %27:i32 = call %tint_f32_to_i32, %26
+    %28:vec2<i32> = construct %24, %27
+    store %ipos, %28
     store %i, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %27:i32 = load %i
-        %28:bool = lt %27, 256i
-        if %28 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %29:i32 = load %i
+        %30:bool = lt %29, 256i
+        if %30 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_80:i32 = load %i
-        %30:ptr<private, i32, read_write> = access %map, %x_80
-        store %30, 0i
-        continue %b4
-      }
-      %b4 = block {  # continuing
         %31:i32 = load %i
-        %32:i32 = add %31, 1i
-        store %i, %32
-        next_iteration %b3
+        %x_80:i32 = let %31
+        %33:ptr<private, i32, read_write> = access %map, %x_80
+        store %33, 0i
+        continue  # -> $B4
+      }
+      $B4: {  # continuing
+        %34:i32 = load %i
+        %35:i32 = add %34, 1i
+        store %i, %35
+        next_iteration  # -> $B3
       }
     }
     store %p, vec2<i32>(0i)
     store %canwalk, true
     store %v, 0i
-    loop [b: %b7, c: %b8] {  # loop_2
-      %b7 = block {  # body
+    loop [b: $B7, c: $B8] {  # loop_2
+      $B7: {  # body
         %x_104:ptr<function, bool, read_write> = var
         %x_105:ptr<function, bool, read_write> = var
         %x_124:ptr<function, bool, read_write> = var
@@ -78,119 +80,123 @@
         %x_145:ptr<function, bool, read_write> = var
         %x_164:ptr<function, bool, read_write> = var
         %x_165:ptr<function, bool, read_write> = var
-        %41:i32 = load %v
-        %42:i32 = add %41, 1i
-        store %v, %42
+        %44:i32 = load %v
+        %45:i32 = add %44, 1i
+        store %v, %45
         store %directions, 0i
-        %43:i32 = load_vector_element %p, 0u
-        %x_92:bool = gt %43, 0i
+        %46:i32 = load_vector_element %p, 0u
+        %47:bool = gt %46, 0i
+        %x_92:bool = let %47
         store %x_105, %x_92
-        if %x_92 [t: %b9] {  # if_2
-          %b9 = block {  # true
-            %45:i32 = load_vector_element %p, 0u
-            %46:i32 = sub %45, 2i
-            %47:i32 = load_vector_element %p, 1u
-            %48:i32 = mul %47, 16i
-            %49:i32 = add %46, %48
-            %50:ptr<private, i32, read_write> = access %map, %49
-            %51:i32 = load %50
-            %52:bool = eq %51, 0i
-            store %x_104, %52
-            %53:bool = load %x_104
-            store %x_105, %53
+        if %x_92 [t: $B9] {  # if_2
+          $B9: {  # true
+            %49:i32 = load_vector_element %p, 0u
+            %50:i32 = sub %49, 2i
+            %51:i32 = load_vector_element %p, 1u
+            %52:i32 = mul %51, 16i
+            %53:i32 = add %50, %52
+            %54:ptr<private, i32, read_write> = access %map, %53
+            %55:i32 = load %54
+            %56:bool = eq %55, 0i
+            store %x_104, %56
+            %57:bool = load %x_104
+            store %x_105, %57
             exit_if  # if_2
           }
         }
-        %54:bool = load %x_105
-        if %54 [t: %b10] {  # if_3
-          %b10 = block {  # true
-            %55:i32 = load %directions
-            %56:i32 = add %55, 1i
-            store %directions, %56
+        %58:bool = load %x_105
+        if %58 [t: $B10] {  # if_3
+          $B10: {  # true
+            %59:i32 = load %directions
+            %60:i32 = add %59, 1i
+            store %directions, %60
             exit_if  # if_3
           }
         }
-        %57:i32 = load_vector_element %p, 1u
-        %x_112:bool = gt %57, 0i
+        %61:i32 = load_vector_element %p, 1u
+        %62:bool = gt %61, 0i
+        %x_112:bool = let %62
         store %x_125, %x_112
-        if %x_112 [t: %b11] {  # if_4
-          %b11 = block {  # true
-            %59:i32 = load_vector_element %p, 0u
-            %60:i32 = load_vector_element %p, 1u
-            %61:i32 = sub %60, 2i
-            %62:i32 = mul %61, 16i
-            %63:i32 = add %59, %62
-            %64:ptr<private, i32, read_write> = access %map, %63
-            %65:i32 = load %64
-            %66:bool = eq %65, 0i
-            store %x_124, %66
-            %67:bool = load %x_124
-            store %x_125, %67
+        if %x_112 [t: $B11] {  # if_4
+          $B11: {  # true
+            %64:i32 = load_vector_element %p, 0u
+            %65:i32 = load_vector_element %p, 1u
+            %66:i32 = sub %65, 2i
+            %67:i32 = mul %66, 16i
+            %68:i32 = add %64, %67
+            %69:ptr<private, i32, read_write> = access %map, %68
+            %70:i32 = load %69
+            %71:bool = eq %70, 0i
+            store %x_124, %71
+            %72:bool = load %x_124
+            store %x_125, %72
             exit_if  # if_4
           }
         }
-        %68:bool = load %x_125
-        if %68 [t: %b12] {  # if_5
-          %b12 = block {  # true
-            %69:i32 = load %directions
-            %70:i32 = add %69, 1i
-            store %directions, %70
+        %73:bool = load %x_125
+        if %73 [t: $B12] {  # if_5
+          $B12: {  # true
+            %74:i32 = load %directions
+            %75:i32 = add %74, 1i
+            store %directions, %75
             exit_if  # if_5
           }
         }
-        %71:i32 = load_vector_element %p, 0u
-        %x_132:bool = lt %71, 14i
+        %76:i32 = load_vector_element %p, 0u
+        %77:bool = lt %76, 14i
+        %x_132:bool = let %77
         store %x_145, %x_132
-        if %x_132 [t: %b13] {  # if_6
-          %b13 = block {  # true
-            %73:i32 = load_vector_element %p, 0u
-            %74:i32 = add %73, 2i
-            %75:i32 = load_vector_element %p, 1u
-            %76:i32 = mul %75, 16i
-            %77:i32 = add %74, %76
-            %78:ptr<private, i32, read_write> = access %map, %77
-            %79:i32 = load %78
-            %80:bool = eq %79, 0i
-            store %x_144, %80
-            %81:bool = load %x_144
-            store %x_145, %81
+        if %x_132 [t: $B13] {  # if_6
+          $B13: {  # true
+            %79:i32 = load_vector_element %p, 0u
+            %80:i32 = add %79, 2i
+            %81:i32 = load_vector_element %p, 1u
+            %82:i32 = mul %81, 16i
+            %83:i32 = add %80, %82
+            %84:ptr<private, i32, read_write> = access %map, %83
+            %85:i32 = load %84
+            %86:bool = eq %85, 0i
+            store %x_144, %86
+            %87:bool = load %x_144
+            store %x_145, %87
             exit_if  # if_6
           }
         }
-        %82:bool = load %x_145
-        if %82 [t: %b14] {  # if_7
-          %b14 = block {  # true
-            %83:i32 = load %directions
-            %84:i32 = add %83, 1i
-            store %directions, %84
+        %88:bool = load %x_145
+        if %88 [t: $B14] {  # if_7
+          $B14: {  # true
+            %89:i32 = load %directions
+            %90:i32 = add %89, 1i
+            store %directions, %90
             exit_if  # if_7
           }
         }
-        %85:i32 = load_vector_element %p, 1u
-        %x_152:bool = lt %85, 14i
+        %91:i32 = load_vector_element %p, 1u
+        %92:bool = lt %91, 14i
+        %x_152:bool = let %92
         store %x_165, %x_152
-        if %x_152 [t: %b15] {  # if_8
-          %b15 = block {  # true
-            %87:i32 = load_vector_element %p, 0u
-            %88:i32 = load_vector_element %p, 1u
-            %89:i32 = add %88, 2i
-            %90:i32 = mul %89, 16i
-            %91:i32 = add %87, %90
-            %92:ptr<private, i32, read_write> = access %map, %91
-            %93:i32 = load %92
-            %94:bool = eq %93, 0i
-            store %x_164, %94
-            %95:bool = load %x_164
-            store %x_165, %95
+        if %x_152 [t: $B15] {  # if_8
+          $B15: {  # true
+            %94:i32 = load_vector_element %p, 0u
+            %95:i32 = load_vector_element %p, 1u
+            %96:i32 = add %95, 2i
+            %97:i32 = mul %96, 16i
+            %98:i32 = add %94, %97
+            %99:ptr<private, i32, read_write> = access %map, %98
+            %100:i32 = load %99
+            %101:bool = eq %100, 0i
+            store %x_164, %101
+            %102:bool = load %x_164
+            store %x_165, %102
             exit_if  # if_8
           }
         }
-        %96:bool = load %x_165
-        if %96 [t: %b16] {  # if_9
-          %b16 = block {  # true
-            %97:i32 = load %directions
-            %98:i32 = add %97, 1i
-            store %directions, %98
+        %103:bool = load %x_165
+        if %103 [t: $B16] {  # if_9
+          $B16: {  # true
+            %104:i32 = load %directions
+            %105:i32 = add %104, 1i
+            store %directions, %105
             exit_if  # if_9
           }
         }
@@ -220,457 +226,515 @@
         %x_412:ptr<function, bool, read_write> = var
         %x_424:ptr<function, bool, read_write> = var
         %x_425:ptr<function, bool, read_write> = var
-        %125:i32 = load %directions
-        %126:bool = eq %125, 0i
-        if %126 [t: %b17, f: %b18] {  # if_10
-          %b17 = block {  # true
+        %132:i32 = load %directions
+        %133:bool = eq %132, 0i
+        if %133 [t: $B17, f: $B18] {  # if_10
+          $B17: {  # true
             store %canwalk, false
             store %i, 0i
-            loop [b: %b19, c: %b20] {  # loop_3
-              %b19 = block {  # body
-                %127:i32 = load %i
-                %128:bool = lt %127, 8i
-                if %128 [t: %b21, f: %b22] {  # if_11
-                  %b21 = block {  # true
+            loop [b: $B19, c: $B20] {  # loop_3
+              $B19: {  # body
+                %134:i32 = load %i
+                %135:bool = lt %134, 8i
+                if %135 [t: $B21, f: $B22] {  # if_11
+                  $B21: {  # true
                     exit_if  # if_11
                   }
-                  %b22 = block {  # false
+                  $B22: {  # false
                     exit_loop  # loop_3
                   }
                 }
                 store %j, 0i
-                loop [b: %b23, c: %b24] {  # loop_4
-                  %b23 = block {  # body
-                    %129:i32 = load %j
-                    %130:bool = lt %129, 8i
-                    if %130 [t: %b25, f: %b26] {  # if_12
-                      %b25 = block {  # true
+                loop [b: $B23, c: $B24] {  # loop_4
+                  $B23: {  # body
+                    %136:i32 = load %j
+                    %137:bool = lt %136, 8i
+                    if %137 [t: $B25, f: $B26] {  # if_12
+                      $B25: {  # true
                         exit_if  # if_12
                       }
-                      %b26 = block {  # false
+                      $B26: {  # false
                         exit_loop  # loop_4
                       }
                     }
-                    %131:i32 = load %j
-                    %132:i32 = mul %131, 2i
-                    %133:i32 = load %i
-                    %134:i32 = mul %133, 2i
-                    %135:i32 = mul %134, 16i
-                    %136:i32 = add %132, %135
-                    %137:ptr<private, i32, read_write> = access %map, %136
-                    %138:i32 = load %137
-                    %139:bool = eq %138, 0i
-                    if %139 [t: %b27] {  # if_13
-                      %b27 = block {  # true
-                        %140:i32 = load %j
-                        %141:i32 = mul %140, 2i
-                        store_vector_element %p, 0u, %141
-                        %142:i32 = load %i
-                        %143:i32 = mul %142, 2i
-                        store_vector_element %p, 1u, %143
+                    %138:i32 = load %j
+                    %139:i32 = mul %138, 2i
+                    %140:i32 = load %i
+                    %141:i32 = mul %140, 2i
+                    %142:i32 = mul %141, 16i
+                    %143:i32 = add %139, %142
+                    %144:ptr<private, i32, read_write> = access %map, %143
+                    %145:i32 = load %144
+                    %146:bool = eq %145, 0i
+                    if %146 [t: $B27] {  # if_13
+                      $B27: {  # true
+                        %147:i32 = load %j
+                        %148:i32 = mul %147, 2i
+                        store_vector_element %p, 0u, %148
+                        %149:i32 = load %i
+                        %150:i32 = mul %149, 2i
+                        store_vector_element %p, 1u, %150
                         store %canwalk, true
                         exit_if  # if_13
                       }
                     }
-                    continue %b24
+                    continue  # -> $B24
                   }
-                  %b24 = block {  # continuing
-                    %144:i32 = load %j
-                    %145:i32 = add %144, 1i
-                    store %j, %145
-                    next_iteration %b23
+                  $B24: {  # continuing
+                    %151:i32 = load %j
+                    %152:i32 = add %151, 1i
+                    store %j, %152
+                    next_iteration  # -> $B23
                   }
                 }
-                continue %b20
+                continue  # -> $B20
               }
-              %b20 = block {  # continuing
-                %146:i32 = load %i
-                %147:i32 = add %146, 1i
-                store %i, %147
-                next_iteration %b19
+              $B20: {  # continuing
+                %153:i32 = load %i
+                %154:i32 = add %153, 1i
+                store %i, %154
+                next_iteration  # -> $B19
               }
             }
-            %x_211:i32 = load_vector_element %p, 0u
-            %x_213:i32 = load_vector_element %p, 1u
-            %150:i32 = mul %x_213, 16i
-            %151:i32 = add %x_211, %150
-            %152:ptr<private, i32, read_write> = access %map, %151
-            store %152, 1i
+            %155:i32 = load_vector_element %p, 0u
+            %x_211:i32 = let %155
+            %157:i32 = load_vector_element %p, 1u
+            %x_213:i32 = let %157
+            %159:i32 = mul %x_213, 16i
+            %160:i32 = add %x_211, %159
+            %161:ptr<private, i32, read_write> = access %map, %160
+            store %161, 1i
             exit_if  # if_10
           }
-          %b18 = block {  # false
-            %153:i32 = load %v
-            %154:i32 = load %directions
-            %155:i32 = mod %153, %154
-            store %d, %155
-            %156:i32 = load %v
-            %157:i32 = load %directions
-            %158:i32 = add %156, %157
-            store %v, %158
-            %159:i32 = load %d
-            %x_224:bool = gte %159, 0i
+          $B18: {  # false
+            %162:i32 = load %v
+            %163:i32 = load %directions
+            %164:i32 = call %tint_mod_i32, %162, %163
+            store %d, %164
+            %166:i32 = load %v
+            %167:i32 = load %directions
+            %168:i32 = add %166, %167
+            store %v, %168
+            %169:i32 = load %d
+            %170:bool = gte %169, 0i
+            %x_224:bool = let %170
             store %x_230, %x_224
-            if %x_224 [t: %b28] {  # if_14
-              %b28 = block {  # true
-                %161:i32 = load_vector_element %p, 0u
-                %162:bool = gt %161, 0i
-                store %x_229, %162
-                %163:bool = load %x_229
-                store %x_230, %163
+            if %x_224 [t: $B28] {  # if_14
+              $B28: {  # true
+                %172:i32 = load_vector_element %p, 0u
+                %173:bool = gt %172, 0i
+                store %x_229, %173
+                %174:bool = load %x_229
+                store %x_230, %174
                 exit_if  # if_14
               }
             }
-            %164:bool = load %x_230
-            store %x_243, %164
-            %165:bool = load %x_230
-            if %165 [t: %b29] {  # if_15
-              %b29 = block {  # true
-                %166:i32 = load_vector_element %p, 0u
-                %167:i32 = sub %166, 2i
-                %168:i32 = load_vector_element %p, 1u
-                %169:i32 = mul %168, 16i
-                %170:i32 = add %167, %169
-                %171:ptr<private, i32, read_write> = access %map, %170
-                %172:i32 = load %171
-                %173:bool = eq %172, 0i
-                store %x_242, %173
-                %174:bool = load %x_242
-                store %x_243, %174
+            %175:bool = load %x_230
+            store %x_243, %175
+            %176:bool = load %x_230
+            if %176 [t: $B29] {  # if_15
+              $B29: {  # true
+                %177:i32 = load_vector_element %p, 0u
+                %178:i32 = sub %177, 2i
+                %179:i32 = load_vector_element %p, 1u
+                %180:i32 = mul %179, 16i
+                %181:i32 = add %178, %180
+                %182:ptr<private, i32, read_write> = access %map, %181
+                %183:i32 = load %182
+                %184:bool = eq %183, 0i
+                store %x_242, %184
+                %185:bool = load %x_242
+                store %x_243, %185
                 exit_if  # if_15
               }
             }
-            %175:bool = load %x_243
-            if %175 [t: %b30] {  # if_16
-              %b30 = block {  # true
-                %176:i32 = load %d
-                %177:i32 = sub %176, 1i
-                store %d, %177
-                %x_249:i32 = load_vector_element %p, 0u
-                %x_251:i32 = load_vector_element %p, 1u
-                %180:i32 = mul %x_251, 16i
-                %181:i32 = add %x_249, %180
-                %182:ptr<private, i32, read_write> = access %map, %181
-                store %182, 1i
-                %x_256:i32 = load_vector_element %p, 0u
-                %x_259:i32 = load_vector_element %p, 1u
-                %185:i32 = sub %x_256, 1i
-                %186:i32 = mul %x_259, 16i
-                %187:i32 = add %185, %186
-                %188:ptr<private, i32, read_write> = access %map, %187
-                store %188, 1i
-                %x_264:i32 = load_vector_element %p, 0u
-                %x_267:i32 = load_vector_element %p, 1u
-                %191:i32 = sub %x_264, 2i
-                %192:i32 = mul %x_267, 16i
-                %193:i32 = add %191, %192
-                %194:ptr<private, i32, read_write> = access %map, %193
-                store %194, 1i
-                %195:i32 = load_vector_element %p, 0u
-                %196:i32 = sub %195, 2i
-                store_vector_element %p, 0u, %196
+            %186:bool = load %x_243
+            if %186 [t: $B30] {  # if_16
+              $B30: {  # true
+                %187:i32 = load %d
+                %188:i32 = sub %187, 1i
+                store %d, %188
+                %189:i32 = load_vector_element %p, 0u
+                %x_249:i32 = let %189
+                %191:i32 = load_vector_element %p, 1u
+                %x_251:i32 = let %191
+                %193:i32 = mul %x_251, 16i
+                %194:i32 = add %x_249, %193
+                %195:ptr<private, i32, read_write> = access %map, %194
+                store %195, 1i
+                %196:i32 = load_vector_element %p, 0u
+                %x_256:i32 = let %196
+                %198:i32 = load_vector_element %p, 1u
+                %x_259:i32 = let %198
+                %200:i32 = sub %x_256, 1i
+                %201:i32 = mul %x_259, 16i
+                %202:i32 = add %200, %201
+                %203:ptr<private, i32, read_write> = access %map, %202
+                store %203, 1i
+                %204:i32 = load_vector_element %p, 0u
+                %x_264:i32 = let %204
+                %206:i32 = load_vector_element %p, 1u
+                %x_267:i32 = let %206
+                %208:i32 = sub %x_264, 2i
+                %209:i32 = mul %x_267, 16i
+                %210:i32 = add %208, %209
+                %211:ptr<private, i32, read_write> = access %map, %210
+                store %211, 1i
+                %212:i32 = load_vector_element %p, 0u
+                %213:i32 = sub %212, 2i
+                store_vector_element %p, 0u, %213
                 exit_if  # if_16
               }
             }
-            %197:i32 = load %d
-            %x_276:bool = gte %197, 0i
+            %214:i32 = load %d
+            %215:bool = gte %214, 0i
+            %x_276:bool = let %215
             store %x_282, %x_276
-            if %x_276 [t: %b31] {  # if_17
-              %b31 = block {  # true
-                %199:i32 = load_vector_element %p, 1u
-                %200:bool = gt %199, 0i
-                store %x_281, %200
-                %201:bool = load %x_281
-                store %x_282, %201
+            if %x_276 [t: $B31] {  # if_17
+              $B31: {  # true
+                %217:i32 = load_vector_element %p, 1u
+                %218:bool = gt %217, 0i
+                store %x_281, %218
+                %219:bool = load %x_281
+                store %x_282, %219
                 exit_if  # if_17
               }
             }
-            %202:bool = load %x_282
-            if %202 [t: %b32, f: %b33] {  # if_18
-              %b32 = block {  # true
-                %203:i32 = load_vector_element %p, 0u
-                store %x_288, %203
-                %204:i32 = load %x_288
-                store %x_290, %204
+            %220:bool = load %x_282
+            if %220 [t: $B32, f: $B33] {  # if_18
+              $B32: {  # true
+                %221:i32 = load_vector_element %p, 0u
+                store %x_288, %221
+                %222:i32 = load %x_288
+                store %x_290, %222
                 exit_if  # if_18
               }
-              %b33 = block {  # false
+              $B33: {  # false
                 store %x_289, 0i
-                %205:i32 = load %x_289
-                store %x_290, %205
+                %223:i32 = load %x_289
+                store %x_290, %223
                 exit_if  # if_18
               }
             }
-            %206:bool = load %x_282
-            if %206 [t: %b34, f: %b35] {  # if_19
-              %b34 = block {  # true
-                %207:i32 = load_vector_element %p, 1u
-                store %x_295, %207
-                %208:i32 = load %x_295
-                store %x_297, %208
+            %224:bool = load %x_282
+            if %224 [t: $B34, f: $B35] {  # if_19
+              $B34: {  # true
+                %225:i32 = load_vector_element %p, 1u
+                store %x_295, %225
+                %226:i32 = load %x_295
+                store %x_297, %226
                 exit_if  # if_19
               }
-              %b35 = block {  # false
+              $B35: {  # false
                 store %x_296, 0i
-                %209:i32 = load %x_296
-                store %x_297, %209
+                %227:i32 = load %x_296
+                store %x_297, %227
                 exit_if  # if_19
               }
             }
-            %210:i32 = load %x_297
-            %211:i32 = sub %210, 2i
-            %x_299:i32 = mul %211, 16i
-            %213:bool = load %x_282
-            if %213 [t: %b36, f: %b37] {  # if_20
-              %b36 = block {  # true
-                %214:array<i32, 256> = load %map
-                store %x_303, %214
-                %215:array<i32, 256> = load %x_303
-                store %x_305, %215
+            %228:i32 = load %x_297
+            %229:i32 = sub %228, 2i
+            %230:i32 = mul %229, 16i
+            %x_299:i32 = let %230
+            %232:bool = load %x_282
+            if %232 [t: $B36, f: $B37] {  # if_20
+              $B36: {  # true
+                %233:array<i32, 256> = load %map
+                store %x_303, %233
+                %234:array<i32, 256> = load %x_303
+                store %x_305, %234
                 exit_if  # if_20
               }
-              %b37 = block {  # false
+              $B37: {  # false
                 store %x_304, array<i32, 256>(0i)
-                %216:array<i32, 256> = load %x_304
-                store %x_305, %216
+                %235:array<i32, 256> = load %x_304
+                store %x_305, %235
                 exit_if  # if_20
               }
             }
-            %217:bool = load %x_282
-            if %217 [t: %b38] {  # if_21
-              %b38 = block {  # true
+            %236:bool = load %x_282
+            if %236 [t: $B38] {  # if_21
+              $B38: {  # true
                 store %map, array<i32, 256>(0i)
                 exit_if  # if_21
               }
             }
-            %218:bool = load %x_282
-            if %218 [t: %b39] {  # if_22
-              %b39 = block {  # true
-                %219:array<i32, 256> = load %x_305
-                store %map, %219
+            %237:bool = load %x_282
+            if %237 [t: $B39] {  # if_22
+              $B39: {  # true
+                %238:array<i32, 256> = load %x_305
+                store %map, %238
                 exit_if  # if_22
               }
             }
-            %220:bool = load %x_282
-            if %220 [t: %b40, f: %b41] {  # if_23
-              %b40 = block {  # true
-                %221:i32 = load %x_290
-                %222:i32 = add %221, %x_299
-                %223:ptr<private, i32, read_write> = access %map, %222
-                %224:i32 = load %223
-                store %x_315, %224
-                %225:i32 = load %x_315
-                store %x_317, %225
+            %239:bool = load %x_282
+            if %239 [t: $B40, f: $B41] {  # if_23
+              $B40: {  # true
+                %240:i32 = load %x_290
+                %241:i32 = add %240, %x_299
+                %242:ptr<private, i32, read_write> = access %map, %241
+                %243:i32 = load %242
+                store %x_315, %243
+                %244:i32 = load %x_315
+                store %x_317, %244
                 exit_if  # if_23
               }
-              %b41 = block {  # false
+              $B41: {  # false
                 store %x_316, 0i
-                %226:i32 = load %x_316
-                store %x_317, %226
+                %245:i32 = load %x_316
+                store %x_317, %245
                 exit_if  # if_23
               }
             }
-            %227:bool = load %x_282
-            %228:i32 = load %x_317
-            %229:bool = eq %228, 0i
-            %230:bool = load %x_282
-            %231:bool = select %227, %229, %230
-            if %231 [t: %b42] {  # if_24
-              %b42 = block {  # true
-                %232:i32 = load %d
-                %233:i32 = sub %232, 1i
-                store %d, %233
-                %x_326:i32 = load_vector_element %p, 0u
-                %x_328:i32 = load_vector_element %p, 1u
-                %236:i32 = mul %x_328, 16i
-                %237:i32 = add %x_326, %236
-                %238:ptr<private, i32, read_write> = access %map, %237
-                store %238, 1i
-                %x_333:i32 = load_vector_element %p, 0u
-                %x_335:i32 = load_vector_element %p, 1u
-                %241:i32 = sub %x_335, 1i
-                %242:i32 = mul %241, 16i
-                %243:i32 = add %x_333, %242
-                %244:ptr<private, i32, read_write> = access %map, %243
-                store %244, 1i
-                %x_341:i32 = load_vector_element %p, 0u
-                %x_343:i32 = load_vector_element %p, 1u
-                %x_345:array<i32, 256> = load %map
+            %246:bool = load %x_282
+            %247:i32 = load %x_317
+            %248:bool = eq %247, 0i
+            %249:bool = load %x_282
+            %250:bool = select %246, %248, %249
+            if %250 [t: $B42] {  # if_24
+              $B42: {  # true
+                %251:i32 = load %d
+                %252:i32 = sub %251, 1i
+                store %d, %252
+                %253:i32 = load_vector_element %p, 0u
+                %x_326:i32 = let %253
+                %255:i32 = load_vector_element %p, 1u
+                %x_328:i32 = let %255
+                %257:i32 = mul %x_328, 16i
+                %258:i32 = add %x_326, %257
+                %259:ptr<private, i32, read_write> = access %map, %258
+                store %259, 1i
+                %260:i32 = load_vector_element %p, 0u
+                %x_333:i32 = let %260
+                %262:i32 = load_vector_element %p, 1u
+                %x_335:i32 = let %262
+                %264:i32 = sub %x_335, 1i
+                %265:i32 = mul %264, 16i
+                %266:i32 = add %x_333, %265
+                %267:ptr<private, i32, read_write> = access %map, %266
+                store %267, 1i
+                %268:i32 = load_vector_element %p, 0u
+                %x_341:i32 = let %268
+                %270:i32 = load_vector_element %p, 1u
+                %x_343:i32 = let %270
+                %272:array<i32, 256> = load %map
+                %x_345:array<i32, 256> = let %272
                 store %map, array<i32, 256>(0i)
                 store %map, %x_345
-                %248:i32 = sub %x_343, 2i
-                %249:i32 = mul %248, 16i
-                %250:i32 = add %x_341, %249
-                %251:ptr<private, i32, read_write> = access %map, %250
-                store %251, 1i
-                %252:i32 = load_vector_element %p, 1u
-                %253:i32 = sub %252, 2i
-                store_vector_element %p, 1u, %253
+                %274:i32 = sub %x_343, 2i
+                %275:i32 = mul %274, 16i
+                %276:i32 = add %x_341, %275
+                %277:ptr<private, i32, read_write> = access %map, %276
+                store %277, 1i
+                %278:i32 = load_vector_element %p, 1u
+                %279:i32 = sub %278, 2i
+                store_vector_element %p, 1u, %279
                 exit_if  # if_24
               }
             }
-            %254:i32 = load %d
-            %x_354:bool = gte %254, 0i
+            %280:i32 = load %d
+            %281:bool = gte %280, 0i
+            %x_354:bool = let %281
             store %x_360, %x_354
-            if %x_354 [t: %b43] {  # if_25
-              %b43 = block {  # true
-                %256:i32 = load_vector_element %p, 0u
-                %257:bool = lt %256, 14i
-                store %x_359, %257
-                %258:bool = load %x_359
-                store %x_360, %258
+            if %x_354 [t: $B43] {  # if_25
+              $B43: {  # true
+                %283:i32 = load_vector_element %p, 0u
+                %284:bool = lt %283, 14i
+                store %x_359, %284
+                %285:bool = load %x_359
+                store %x_360, %285
                 exit_if  # if_25
               }
             }
-            %259:bool = load %x_360
-            store %x_373, %259
-            %260:bool = load %x_360
-            if %260 [t: %b44] {  # if_26
-              %b44 = block {  # true
-                %261:i32 = load_vector_element %p, 0u
-                %262:i32 = add %261, 2i
-                %263:i32 = load_vector_element %p, 1u
-                %264:i32 = mul %263, 16i
-                %265:i32 = add %262, %264
-                %266:ptr<private, i32, read_write> = access %map, %265
-                %267:i32 = load %266
-                %268:bool = eq %267, 0i
-                store %x_372, %268
-                %269:bool = load %x_372
-                store %x_373, %269
+            %286:bool = load %x_360
+            store %x_373, %286
+            %287:bool = load %x_360
+            if %287 [t: $B44] {  # if_26
+              $B44: {  # true
+                %288:i32 = load_vector_element %p, 0u
+                %289:i32 = add %288, 2i
+                %290:i32 = load_vector_element %p, 1u
+                %291:i32 = mul %290, 16i
+                %292:i32 = add %289, %291
+                %293:ptr<private, i32, read_write> = access %map, %292
+                %294:i32 = load %293
+                %295:bool = eq %294, 0i
+                store %x_372, %295
+                %296:bool = load %x_372
+                store %x_373, %296
                 exit_if  # if_26
               }
             }
-            %270:bool = load %x_373
-            if %270 [t: %b45] {  # if_27
-              %b45 = block {  # true
-                %271:i32 = load %d
-                %272:i32 = sub %271, 1i
-                store %d, %272
-                %x_379:i32 = load_vector_element %p, 0u
-                %x_381:i32 = load_vector_element %p, 1u
-                %275:i32 = mul %x_381, 16i
-                %276:i32 = add %x_379, %275
-                %277:ptr<private, i32, read_write> = access %map, %276
-                store %277, 1i
-                %x_386:i32 = load_vector_element %p, 0u
-                %x_389:i32 = load_vector_element %p, 1u
-                %280:i32 = add %x_386, 1i
-                %281:i32 = mul %x_389, 16i
-                %282:i32 = add %280, %281
-                %283:ptr<private, i32, read_write> = access %map, %282
-                store %283, 1i
-                %x_394:i32 = load_vector_element %p, 0u
-                %x_397:i32 = load_vector_element %p, 1u
-                %286:i32 = add %x_394, 2i
-                %287:i32 = mul %x_397, 16i
-                %288:i32 = add %286, %287
-                %289:ptr<private, i32, read_write> = access %map, %288
-                store %289, 1i
-                %290:i32 = load_vector_element %p, 0u
-                %291:i32 = add %290, 2i
-                store_vector_element %p, 0u, %291
+            %297:bool = load %x_373
+            if %297 [t: $B45] {  # if_27
+              $B45: {  # true
+                %298:i32 = load %d
+                %299:i32 = sub %298, 1i
+                store %d, %299
+                %300:i32 = load_vector_element %p, 0u
+                %x_379:i32 = let %300
+                %302:i32 = load_vector_element %p, 1u
+                %x_381:i32 = let %302
+                %304:i32 = mul %x_381, 16i
+                %305:i32 = add %x_379, %304
+                %306:ptr<private, i32, read_write> = access %map, %305
+                store %306, 1i
+                %307:i32 = load_vector_element %p, 0u
+                %x_386:i32 = let %307
+                %309:i32 = load_vector_element %p, 1u
+                %x_389:i32 = let %309
+                %311:i32 = add %x_386, 1i
+                %312:i32 = mul %x_389, 16i
+                %313:i32 = add %311, %312
+                %314:ptr<private, i32, read_write> = access %map, %313
+                store %314, 1i
+                %315:i32 = load_vector_element %p, 0u
+                %x_394:i32 = let %315
+                %317:i32 = load_vector_element %p, 1u
+                %x_397:i32 = let %317
+                %319:i32 = add %x_394, 2i
+                %320:i32 = mul %x_397, 16i
+                %321:i32 = add %319, %320
+                %322:ptr<private, i32, read_write> = access %map, %321
+                store %322, 1i
+                %323:i32 = load_vector_element %p, 0u
+                %324:i32 = add %323, 2i
+                store_vector_element %p, 0u, %324
                 exit_if  # if_27
               }
             }
-            %292:i32 = load %d
-            %x_406:bool = gte %292, 0i
+            %325:i32 = load %d
+            %326:bool = gte %325, 0i
+            %x_406:bool = let %326
             store %x_412, %x_406
-            if %x_406 [t: %b46] {  # if_28
-              %b46 = block {  # true
-                %294:i32 = load_vector_element %p, 1u
-                %295:bool = lt %294, 14i
-                store %x_411, %295
-                %296:bool = load %x_411
-                store %x_412, %296
+            if %x_406 [t: $B46] {  # if_28
+              $B46: {  # true
+                %328:i32 = load_vector_element %p, 1u
+                %329:bool = lt %328, 14i
+                store %x_411, %329
+                %330:bool = load %x_411
+                store %x_412, %330
                 exit_if  # if_28
               }
             }
-            %297:bool = load %x_412
-            store %x_425, %297
-            %298:bool = load %x_412
-            if %298 [t: %b47] {  # if_29
-              %b47 = block {  # true
-                %299:i32 = load_vector_element %p, 0u
-                %300:i32 = load_vector_element %p, 1u
-                %301:i32 = add %300, 2i
-                %302:i32 = mul %301, 16i
-                %303:i32 = add %299, %302
-                %304:ptr<private, i32, read_write> = access %map, %303
-                %305:i32 = load %304
-                %306:bool = eq %305, 0i
-                store %x_424, %306
-                %307:bool = load %x_424
-                store %x_425, %307
+            %331:bool = load %x_412
+            store %x_425, %331
+            %332:bool = load %x_412
+            if %332 [t: $B47] {  # if_29
+              $B47: {  # true
+                %333:i32 = load_vector_element %p, 0u
+                %334:i32 = load_vector_element %p, 1u
+                %335:i32 = add %334, 2i
+                %336:i32 = mul %335, 16i
+                %337:i32 = add %333, %336
+                %338:ptr<private, i32, read_write> = access %map, %337
+                %339:i32 = load %338
+                %340:bool = eq %339, 0i
+                store %x_424, %340
+                %341:bool = load %x_424
+                store %x_425, %341
                 exit_if  # if_29
               }
             }
-            %308:bool = load %x_425
-            if %308 [t: %b48] {  # if_30
-              %b48 = block {  # true
-                %309:i32 = load %d
-                %310:i32 = sub %309, 1i
-                store %d, %310
-                %x_431:i32 = load_vector_element %p, 0u
-                %x_433:i32 = load_vector_element %p, 1u
-                %313:i32 = mul %x_433, 16i
-                %314:i32 = add %x_431, %313
-                %315:ptr<private, i32, read_write> = access %map, %314
-                store %315, 1i
-                %x_438:i32 = load_vector_element %p, 0u
-                %x_440:i32 = load_vector_element %p, 1u
-                %318:i32 = add %x_440, 1i
-                %319:i32 = mul %318, 16i
-                %320:i32 = add %x_438, %319
-                %321:ptr<private, i32, read_write> = access %map, %320
-                store %321, 1i
-                %x_446:i32 = load_vector_element %p, 0u
-                %x_448:i32 = load_vector_element %p, 1u
-                %324:i32 = add %x_448, 2i
-                %325:i32 = mul %324, 16i
-                %326:i32 = add %x_446, %325
-                %327:ptr<private, i32, read_write> = access %map, %326
-                store %327, 1i
-                %328:i32 = load_vector_element %p, 1u
-                %329:i32 = add %328, 2i
-                store_vector_element %p, 1u, %329
+            %342:bool = load %x_425
+            if %342 [t: $B48] {  # if_30
+              $B48: {  # true
+                %343:i32 = load %d
+                %344:i32 = sub %343, 1i
+                store %d, %344
+                %345:i32 = load_vector_element %p, 0u
+                %x_431:i32 = let %345
+                %347:i32 = load_vector_element %p, 1u
+                %x_433:i32 = let %347
+                %349:i32 = mul %x_433, 16i
+                %350:i32 = add %x_431, %349
+                %351:ptr<private, i32, read_write> = access %map, %350
+                store %351, 1i
+                %352:i32 = load_vector_element %p, 0u
+                %x_438:i32 = let %352
+                %354:i32 = load_vector_element %p, 1u
+                %x_440:i32 = let %354
+                %356:i32 = add %x_440, 1i
+                %357:i32 = mul %356, 16i
+                %358:i32 = add %x_438, %357
+                %359:ptr<private, i32, read_write> = access %map, %358
+                store %359, 1i
+                %360:i32 = load_vector_element %p, 0u
+                %x_446:i32 = let %360
+                %362:i32 = load_vector_element %p, 1u
+                %x_448:i32 = let %362
+                %364:i32 = add %x_448, 2i
+                %365:i32 = mul %364, 16i
+                %366:i32 = add %x_446, %365
+                %367:ptr<private, i32, read_write> = access %map, %366
+                store %367, 1i
+                %368:i32 = load_vector_element %p, 1u
+                %369:i32 = add %368, 2i
+                store_vector_element %p, 1u, %369
                 exit_if  # if_30
               }
             }
             exit_if  # if_10
           }
         }
-        %330:i32 = load_vector_element %ipos, 1u
-        %331:i32 = mul %330, 16i
-        %332:i32 = load_vector_element %ipos, 0u
-        %333:i32 = add %331, %332
-        %334:ptr<private, i32, read_write> = access %map, %333
-        %335:i32 = load %334
-        %336:bool = eq %335, 1i
-        if %336 [t: %b49] {  # if_31
-          %b49 = block {  # true
+        %370:i32 = load_vector_element %ipos, 1u
+        %371:i32 = mul %370, 16i
+        %372:i32 = load_vector_element %ipos, 0u
+        %373:i32 = add %371, %372
+        %374:ptr<private, i32, read_write> = access %map, %373
+        %375:i32 = load %374
+        %376:bool = eq %375, 1i
+        if %376 [t: $B49] {  # if_31
+          $B49: {  # true
             store %x_GLF_color, vec4<f32>(1.0f)
             ret
           }
         }
-        continue %b8
+        continue  # -> $B8
       }
-      %b8 = block {  # continuing
-        %x_468:bool = load %canwalk
-        %338:bool = eq %x_468, false
-        break_if %338 %b7
+      $B8: {  # continuing
+        %377:bool = load %canwalk
+        %x_468:bool = let %377
+        %379:bool = eq %x_468, false
+        break_if %379  # -> [t: exit_loop loop_2, f: $B7]
       }
     }
     store %x_GLF_color, vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f)
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b50 {
-  %b50 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B50: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %341:void = call %main_1
-    %342:vec4<f32> = load %x_GLF_color
-    %343:main_out = construct %342
-    ret %343
+    %382:void = call %main_1
+    %383:vec4<f32> = load %x_GLF_color
+    %384:main_out = construct %383
+    ret %384
+  }
+}
+%tint_mod_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B51: {
+    %387:bool = eq %rhs, 0i
+    %388:bool = eq %lhs, -2147483648i
+    %389:bool = eq %rhs, -1i
+    %390:bool = and %388, %389
+    %391:bool = or %387, %390
+    %392:i32 = select %rhs, 1i, %391
+    %393:i32 = let %392
+    %394:i32 = div %lhs, %393
+    %395:i32 = mul %394, %393
+    %396:i32 = sub %lhs, %395
+    ret %396
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B52: {
+    %398:i32 = convert %value
+    %399:bool = gte %value, -2147483648.0f
+    %400:i32 = select -2147483648i, %398, %399
+    %401:bool = lte %value, 2147483520.0f
+    %402:i32 = select 2147483647i, %400, %401
+    ret %402
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/1.wgsl.expected.ir.msl
index 4a5700b..4a41b3c 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/1.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/1.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,15 +8,15 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %map:ptr<private, array<i32, 256>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %pos:ptr<function, vec2<f32>, read_write> = var
     %ipos:ptr<function, vec2<i32>, read_write> = var
     %i:ptr<function, i32, read_write> = var
@@ -26,52 +26,60 @@
     %directions:ptr<function, i32, read_write> = var
     %j:ptr<function, i32, read_write> = var
     %d:ptr<function, i32, read_write> = var
-    %x_59:vec4<f32> = load %gl_FragCoord
-    %16:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-    %x_62:vec2<f32> = load %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
-    store %pos, %21
-    %x_65:f32 = load_vector_element %pos, 0u
-    %x_69:f32 = load_vector_element %pos, 1u
-    %24:f32 = mul %x_65, 16.0f
-    %25:i32 = convert %24
-    %26:f32 = mul %x_69, 16.0f
-    %27:i32 = convert %26
-    %28:vec2<i32> = construct %25, %27
-    store %ipos, %28
+    %15:vec4<f32> = load %gl_FragCoord
+    %x_59:vec4<f32> = let %15
+    %17:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
+    %18:vec2<f32> = load %17
+    %x_62:vec2<f32> = let %18
+    %20:f32 = access %x_59, 0u
+    %21:f32 = access %x_59, 1u
+    %22:vec2<f32> = construct %20, %21
+    %23:vec2<f32> = div %22, %x_62
+    store %pos, %23
+    %24:f32 = load_vector_element %pos, 0u
+    %x_65:f32 = let %24
+    %26:f32 = load_vector_element %pos, 1u
+    %x_69:f32 = let %26
+    %28:f32 = mul %x_65, 16.0f
+    %29:i32 = call %tint_f32_to_i32, %28
+    %31:i32 = let %29
+    %32:f32 = mul %x_69, 16.0f
+    %33:i32 = call %tint_f32_to_i32, %32
+    %34:vec2<i32> = construct %31, %33
+    store %ipos, %34
     store %i, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_77:i32 = load %i
-        %30:bool = lt %x_77, 256i
-        if %30 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %35:i32 = load %i
+        %x_77:i32 = let %35
+        %37:bool = lt %x_77, 256i
+        if %37 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_80:i32 = load %i
-        %32:ptr<private, i32, read_write> = access %map, %x_80
-        store %32, 0i
-        continue %b4
+        %38:i32 = load %i
+        %x_80:i32 = let %38
+        %40:ptr<private, i32, read_write> = access %map, %x_80
+        store %40, 0i
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_82:i32 = load %i
-        %34:i32 = add %x_82, 1i
-        store %i, %34
-        next_iteration %b3
+      $B4: {  # continuing
+        %41:i32 = load %i
+        %x_82:i32 = let %41
+        %43:i32 = add %x_82, 1i
+        store %i, %43
+        next_iteration  # -> $B3
       }
     }
     store %p, vec2<i32>(0i)
     store %canwalk, true
     store %v, 0i
-    loop [b: %b7, c: %b8] {  # loop_2
-      %b7 = block {  # body
+    loop [b: $B7, c: $B8] {  # loop_2
+      $B7: {  # body
         %x_104:ptr<function, bool, read_write> = var
         %x_124:ptr<function, bool, read_write> = var
         %x_144:ptr<function, bool, read_write> = var
@@ -80,119 +88,148 @@
         %x_125_phi:ptr<function, bool, read_write> = var
         %x_145_phi:ptr<function, bool, read_write> = var
         %x_165_phi:ptr<function, bool, read_write> = var
-        %x_88:i32 = load %v
-        %44:i32 = add %x_88, 1i
-        store %v, %44
+        %52:i32 = load %v
+        %x_88:i32 = let %52
+        %54:i32 = add %x_88, 1i
+        store %v, %54
         store %directions, 0i
-        %x_91:i32 = load_vector_element %p, 0u
-        %x_92:bool = gt %x_91, 0i
+        %55:i32 = load_vector_element %p, 0u
+        %x_91:i32 = let %55
+        %57:bool = gt %x_91, 0i
+        %x_92:bool = let %57
         store %x_105_phi, %x_92
-        if %x_92 [t: %b9] {  # if_2
-          %b9 = block {  # true
-            %x_96:i32 = load_vector_element %p, 0u
-            %x_99:i32 = load_vector_element %p, 1u
-            %49:i32 = sub %x_96, 2i
-            %50:i32 = mul %x_99, 16i
-            %51:i32 = add %49, %50
-            %52:ptr<private, i32, read_write> = access %map, %51
-            %x_103:i32 = load %52
-            %54:bool = eq %x_103, 0i
-            store %x_104, %54
-            %55:bool = load %x_104
-            store %x_105_phi, %55
+        if %x_92 [t: $B9] {  # if_2
+          $B9: {  # true
+            %59:i32 = load_vector_element %p, 0u
+            %x_96:i32 = let %59
+            %61:i32 = load_vector_element %p, 1u
+            %x_99:i32 = let %61
+            %63:i32 = sub %x_96, 2i
+            %64:i32 = mul %x_99, 16i
+            %65:i32 = add %63, %64
+            %66:ptr<private, i32, read_write> = access %map, %65
+            %67:i32 = load %66
+            %x_103:i32 = let %67
+            %69:bool = eq %x_103, 0i
+            store %x_104, %69
+            %70:bool = load %x_104
+            store %x_105_phi, %70
             exit_if  # if_2
           }
         }
-        %x_105:bool = load %x_105_phi
-        if %x_105 [t: %b10] {  # if_3
-          %b10 = block {  # true
-            %x_108:i32 = load %directions
-            %58:i32 = add %x_108, 1i
-            store %directions, %58
+        %71:bool = load %x_105_phi
+        %x_105:bool = let %71
+        if %x_105 [t: $B10] {  # if_3
+          $B10: {  # true
+            %73:i32 = load %directions
+            %x_108:i32 = let %73
+            %75:i32 = add %x_108, 1i
+            store %directions, %75
             exit_if  # if_3
           }
         }
-        %x_111:i32 = load_vector_element %p, 1u
-        %x_112:bool = gt %x_111, 0i
+        %76:i32 = load_vector_element %p, 1u
+        %x_111:i32 = let %76
+        %78:bool = gt %x_111, 0i
+        %x_112:bool = let %78
         store %x_125_phi, %x_112
-        if %x_112 [t: %b11] {  # if_4
-          %b11 = block {  # true
-            %x_116:i32 = load_vector_element %p, 0u
-            %x_118:i32 = load_vector_element %p, 1u
-            %63:i32 = sub %x_118, 2i
-            %64:i32 = mul %63, 16i
-            %65:i32 = add %x_116, %64
-            %66:ptr<private, i32, read_write> = access %map, %65
-            %x_123:i32 = load %66
-            %68:bool = eq %x_123, 0i
-            store %x_124, %68
-            %69:bool = load %x_124
-            store %x_125_phi, %69
+        if %x_112 [t: $B11] {  # if_4
+          $B11: {  # true
+            %80:i32 = load_vector_element %p, 0u
+            %x_116:i32 = let %80
+            %82:i32 = load_vector_element %p, 1u
+            %x_118:i32 = let %82
+            %84:i32 = sub %x_118, 2i
+            %85:i32 = mul %84, 16i
+            %86:i32 = add %x_116, %85
+            %87:ptr<private, i32, read_write> = access %map, %86
+            %88:i32 = load %87
+            %x_123:i32 = let %88
+            %90:bool = eq %x_123, 0i
+            store %x_124, %90
+            %91:bool = load %x_124
+            store %x_125_phi, %91
             exit_if  # if_4
           }
         }
-        %x_125:bool = load %x_125_phi
-        if %x_125 [t: %b12] {  # if_5
-          %b12 = block {  # true
-            %x_128:i32 = load %directions
-            %72:i32 = add %x_128, 1i
-            store %directions, %72
+        %92:bool = load %x_125_phi
+        %x_125:bool = let %92
+        if %x_125 [t: $B12] {  # if_5
+          $B12: {  # true
+            %94:i32 = load %directions
+            %x_128:i32 = let %94
+            %96:i32 = add %x_128, 1i
+            store %directions, %96
             exit_if  # if_5
           }
         }
-        %x_131:i32 = load_vector_element %p, 0u
-        %x_132:bool = lt %x_131, 14i
+        %97:i32 = load_vector_element %p, 0u
+        %x_131:i32 = let %97
+        %99:bool = lt %x_131, 14i
+        %x_132:bool = let %99
         store %x_145_phi, %x_132
-        if %x_132 [t: %b13] {  # if_6
-          %b13 = block {  # true
-            %x_136:i32 = load_vector_element %p, 0u
-            %x_139:i32 = load_vector_element %p, 1u
-            %77:i32 = add %x_136, 2i
-            %78:i32 = mul %x_139, 16i
-            %79:i32 = add %77, %78
-            %80:ptr<private, i32, read_write> = access %map, %79
-            %x_143:i32 = load %80
-            %82:bool = eq %x_143, 0i
-            store %x_144, %82
-            %83:bool = load %x_144
-            store %x_145_phi, %83
+        if %x_132 [t: $B13] {  # if_6
+          $B13: {  # true
+            %101:i32 = load_vector_element %p, 0u
+            %x_136:i32 = let %101
+            %103:i32 = load_vector_element %p, 1u
+            %x_139:i32 = let %103
+            %105:i32 = add %x_136, 2i
+            %106:i32 = mul %x_139, 16i
+            %107:i32 = add %105, %106
+            %108:ptr<private, i32, read_write> = access %map, %107
+            %109:i32 = load %108
+            %x_143:i32 = let %109
+            %111:bool = eq %x_143, 0i
+            store %x_144, %111
+            %112:bool = load %x_144
+            store %x_145_phi, %112
             exit_if  # if_6
           }
         }
-        %x_145:bool = load %x_145_phi
-        if %x_145 [t: %b14] {  # if_7
-          %b14 = block {  # true
-            %x_148:i32 = load %directions
-            %86:i32 = add %x_148, 1i
-            store %directions, %86
+        %113:bool = load %x_145_phi
+        %x_145:bool = let %113
+        if %x_145 [t: $B14] {  # if_7
+          $B14: {  # true
+            %115:i32 = load %directions
+            %x_148:i32 = let %115
+            %117:i32 = add %x_148, 1i
+            store %directions, %117
             exit_if  # if_7
           }
         }
-        %x_151:i32 = load_vector_element %p, 1u
-        %x_152:bool = lt %x_151, 14i
+        %118:i32 = load_vector_element %p, 1u
+        %x_151:i32 = let %118
+        %120:bool = lt %x_151, 14i
+        %x_152:bool = let %120
         store %x_165_phi, %x_152
-        if %x_152 [t: %b15] {  # if_8
-          %b15 = block {  # true
-            %x_156:i32 = load_vector_element %p, 0u
-            %x_158:i32 = load_vector_element %p, 1u
-            %91:i32 = add %x_158, 2i
-            %92:i32 = mul %91, 16i
-            %93:i32 = add %x_156, %92
-            %94:ptr<private, i32, read_write> = access %map, %93
-            %x_163:i32 = load %94
-            %96:bool = eq %x_163, 0i
-            store %x_164, %96
-            %97:bool = load %x_164
-            store %x_165_phi, %97
+        if %x_152 [t: $B15] {  # if_8
+          $B15: {  # true
+            %122:i32 = load_vector_element %p, 0u
+            %x_156:i32 = let %122
+            %124:i32 = load_vector_element %p, 1u
+            %x_158:i32 = let %124
+            %126:i32 = add %x_158, 2i
+            %127:i32 = mul %126, 16i
+            %128:i32 = add %x_156, %127
+            %129:ptr<private, i32, read_write> = access %map, %128
+            %130:i32 = load %129
+            %x_163:i32 = let %130
+            %132:bool = eq %x_163, 0i
+            store %x_164, %132
+            %133:bool = load %x_164
+            store %x_165_phi, %133
             exit_if  # if_8
           }
         }
-        %x_165:bool = load %x_165_phi
-        if %x_165 [t: %b16] {  # if_9
-          %b16 = block {  # true
-            %x_168:i32 = load %directions
-            %100:i32 = add %x_168, 1i
-            store %directions, %100
+        %134:bool = load %x_165_phi
+        %x_165:bool = let %134
+        if %x_165 [t: $B16] {  # if_9
+          $B16: {  # true
+            %136:i32 = load %directions
+            %x_168:i32 = let %136
+            %138:i32 = add %x_168, 1i
+            store %directions, %138
             exit_if  # if_9
           }
         }
@@ -222,447 +259,559 @@
         %x_373_phi:ptr<function, bool, read_write> = var
         %x_412_phi:ptr<function, bool, read_write> = var
         %x_425_phi:ptr<function, bool, read_write> = var
-        %x_170:i32 = load %directions
-        %128:bool = eq %x_170, 0i
-        if %128 [t: %b17, f: %b18] {  # if_10
-          %b17 = block {  # true
+        %165:i32 = load %directions
+        %x_170:i32 = let %165
+        %167:bool = eq %x_170, 0i
+        if %167 [t: $B17, f: $B18] {  # if_10
+          $B17: {  # true
             store %canwalk, false
             store %i, 0i
-            loop [b: %b19, c: %b20] {  # loop_3
-              %b19 = block {  # body
-                %x_179:i32 = load %i
-                %130:bool = lt %x_179, 8i
-                if %130 [t: %b21, f: %b22] {  # if_11
-                  %b21 = block {  # true
+            loop [b: $B19, c: $B20] {  # loop_3
+              $B19: {  # body
+                %168:i32 = load %i
+                %x_179:i32 = let %168
+                %170:bool = lt %x_179, 8i
+                if %170 [t: $B21, f: $B22] {  # if_11
+                  $B21: {  # true
                     exit_if  # if_11
                   }
-                  %b22 = block {  # false
+                  $B22: {  # false
                     exit_loop  # loop_3
                   }
                 }
                 store %j, 0i
-                loop [b: %b23, c: %b24] {  # loop_4
-                  %b23 = block {  # body
-                    %x_186:i32 = load %j
-                    %132:bool = lt %x_186, 8i
-                    if %132 [t: %b25, f: %b26] {  # if_12
-                      %b25 = block {  # true
+                loop [b: $B23, c: $B24] {  # loop_4
+                  $B23: {  # body
+                    %171:i32 = load %j
+                    %x_186:i32 = let %171
+                    %173:bool = lt %x_186, 8i
+                    if %173 [t: $B25, f: $B26] {  # if_12
+                      $B25: {  # true
                         exit_if  # if_12
                       }
-                      %b26 = block {  # false
+                      $B26: {  # false
                         exit_loop  # loop_4
                       }
                     }
-                    %x_189:i32 = load %j
-                    %x_191:i32 = load %i
-                    %135:i32 = mul %x_189, 2i
-                    %136:i32 = mul %x_191, 2i
-                    %137:i32 = mul %136, 16i
-                    %138:i32 = add %135, %137
-                    %139:ptr<private, i32, read_write> = access %map, %138
-                    %x_196:i32 = load %139
-                    %141:bool = eq %x_196, 0i
-                    if %141 [t: %b27] {  # if_13
-                      %b27 = block {  # true
-                        %x_200:i32 = load %j
-                        %143:i32 = mul %x_200, 2i
-                        store_vector_element %p, 0u, %143
-                        %x_203:i32 = load %i
-                        %145:i32 = mul %x_203, 2i
-                        store_vector_element %p, 1u, %145
+                    %174:i32 = load %j
+                    %x_189:i32 = let %174
+                    %176:i32 = load %i
+                    %x_191:i32 = let %176
+                    %178:i32 = mul %x_189, 2i
+                    %179:i32 = mul %x_191, 2i
+                    %180:i32 = mul %179, 16i
+                    %181:i32 = add %178, %180
+                    %182:ptr<private, i32, read_write> = access %map, %181
+                    %183:i32 = load %182
+                    %x_196:i32 = let %183
+                    %185:bool = eq %x_196, 0i
+                    if %185 [t: $B27] {  # if_13
+                      $B27: {  # true
+                        %186:i32 = load %j
+                        %x_200:i32 = let %186
+                        %188:i32 = mul %x_200, 2i
+                        store_vector_element %p, 0u, %188
+                        %189:i32 = load %i
+                        %x_203:i32 = let %189
+                        %191:i32 = mul %x_203, 2i
+                        store_vector_element %p, 1u, %191
                         store %canwalk, true
                         exit_if  # if_13
                       }
                     }
-                    continue %b24
+                    continue  # -> $B24
                   }
-                  %b24 = block {  # continuing
-                    %x_206:i32 = load %j
-                    %147:i32 = add %x_206, 1i
-                    store %j, %147
-                    next_iteration %b23
+                  $B24: {  # continuing
+                    %192:i32 = load %j
+                    %x_206:i32 = let %192
+                    %194:i32 = add %x_206, 1i
+                    store %j, %194
+                    next_iteration  # -> $B23
                   }
                 }
-                continue %b20
+                continue  # -> $B20
               }
-              %b20 = block {  # continuing
-                %x_208:i32 = load %i
-                %149:i32 = add %x_208, 1i
-                store %i, %149
-                next_iteration %b19
+              $B20: {  # continuing
+                %195:i32 = load %i
+                %x_208:i32 = let %195
+                %197:i32 = add %x_208, 1i
+                store %i, %197
+                next_iteration  # -> $B19
               }
             }
-            %x_211:i32 = load_vector_element %p, 0u
-            %x_213:i32 = load_vector_element %p, 1u
-            %152:i32 = mul %x_213, 16i
-            %153:i32 = add %x_211, %152
-            %154:ptr<private, i32, read_write> = access %map, %153
-            store %154, 1i
+            %198:i32 = load_vector_element %p, 0u
+            %x_211:i32 = let %198
+            %200:i32 = load_vector_element %p, 1u
+            %x_213:i32 = let %200
+            %202:i32 = mul %x_213, 16i
+            %203:i32 = add %x_211, %202
+            %204:ptr<private, i32, read_write> = access %map, %203
+            store %204, 1i
             exit_if  # if_10
           }
-          %b18 = block {  # false
-            %x_217:i32 = load %v
-            %x_218:i32 = load %directions
-            %157:i32 = mod %x_217, %x_218
-            store %d, %157
-            %x_220:i32 = load %directions
-            %x_221:i32 = load %v
-            %160:i32 = add %x_221, %x_220
-            store %v, %160
-            %x_223:i32 = load %d
-            %x_224:bool = gte %x_223, 0i
+          $B18: {  # false
+            %205:i32 = load %v
+            %x_217:i32 = let %205
+            %207:i32 = load %directions
+            %x_218:i32 = let %207
+            %209:i32 = call %tint_mod_i32, %x_217, %x_218
+            store %d, %209
+            %211:i32 = load %directions
+            %x_220:i32 = let %211
+            %213:i32 = load %v
+            %x_221:i32 = let %213
+            %215:i32 = add %x_221, %x_220
+            store %v, %215
+            %216:i32 = load %d
+            %x_223:i32 = let %216
+            %218:bool = gte %x_223, 0i
+            %x_224:bool = let %218
             store %x_230_phi, %x_224
-            if %x_224 [t: %b28] {  # if_14
-              %b28 = block {  # true
-                %x_228:i32 = load_vector_element %p, 0u
-                %164:bool = gt %x_228, 0i
-                store %x_229, %164
-                %165:bool = load %x_229
-                store %x_230_phi, %165
+            if %x_224 [t: $B28] {  # if_14
+              $B28: {  # true
+                %220:i32 = load_vector_element %p, 0u
+                %x_228:i32 = let %220
+                %222:bool = gt %x_228, 0i
+                store %x_229, %222
+                %223:bool = load %x_229
+                store %x_230_phi, %223
                 exit_if  # if_14
               }
             }
-            %x_230:bool = load %x_230_phi
+            %224:bool = load %x_230_phi
+            %x_230:bool = let %224
             store %x_243_phi, %x_230
-            if %x_230 [t: %b29] {  # if_15
-              %b29 = block {  # true
-                %x_234:i32 = load_vector_element %p, 0u
-                %x_237:i32 = load_vector_element %p, 1u
-                %169:i32 = sub %x_234, 2i
-                %170:i32 = mul %x_237, 16i
-                %171:i32 = add %169, %170
-                %172:ptr<private, i32, read_write> = access %map, %171
-                %x_241:i32 = load %172
-                %174:bool = eq %x_241, 0i
-                store %x_242, %174
-                %175:bool = load %x_242
-                store %x_243_phi, %175
+            if %x_230 [t: $B29] {  # if_15
+              $B29: {  # true
+                %226:i32 = load_vector_element %p, 0u
+                %x_234:i32 = let %226
+                %228:i32 = load_vector_element %p, 1u
+                %x_237:i32 = let %228
+                %230:i32 = sub %x_234, 2i
+                %231:i32 = mul %x_237, 16i
+                %232:i32 = add %230, %231
+                %233:ptr<private, i32, read_write> = access %map, %232
+                %234:i32 = load %233
+                %x_241:i32 = let %234
+                %236:bool = eq %x_241, 0i
+                store %x_242, %236
+                %237:bool = load %x_242
+                store %x_243_phi, %237
                 exit_if  # if_15
               }
             }
-            %x_243:bool = load %x_243_phi
-            if %x_243 [t: %b30] {  # if_16
-              %b30 = block {  # true
-                %x_246:i32 = load %d
-                %178:i32 = sub %x_246, 1i
-                store %d, %178
-                %x_249:i32 = load_vector_element %p, 0u
-                %x_251:i32 = load_vector_element %p, 1u
-                %181:i32 = mul %x_251, 16i
-                %182:i32 = add %x_249, %181
-                %183:ptr<private, i32, read_write> = access %map, %182
-                store %183, 1i
-                %x_256:i32 = load_vector_element %p, 0u
-                %x_259:i32 = load_vector_element %p, 1u
-                %186:i32 = sub %x_256, 1i
-                %187:i32 = mul %x_259, 16i
-                %188:i32 = add %186, %187
-                %189:ptr<private, i32, read_write> = access %map, %188
-                store %189, 1i
-                %x_264:i32 = load_vector_element %p, 0u
-                %x_267:i32 = load_vector_element %p, 1u
-                %192:i32 = sub %x_264, 2i
-                %193:i32 = mul %x_267, 16i
-                %194:i32 = add %192, %193
-                %195:ptr<private, i32, read_write> = access %map, %194
-                store %195, 1i
-                %x_272:i32 = load_vector_element %p, 0u
-                %197:i32 = sub %x_272, 2i
-                store_vector_element %p, 0u, %197
+            %238:bool = load %x_243_phi
+            %x_243:bool = let %238
+            if %x_243 [t: $B30] {  # if_16
+              $B30: {  # true
+                %240:i32 = load %d
+                %x_246:i32 = let %240
+                %242:i32 = sub %x_246, 1i
+                store %d, %242
+                %243:i32 = load_vector_element %p, 0u
+                %x_249:i32 = let %243
+                %245:i32 = load_vector_element %p, 1u
+                %x_251:i32 = let %245
+                %247:i32 = mul %x_251, 16i
+                %248:i32 = add %x_249, %247
+                %249:ptr<private, i32, read_write> = access %map, %248
+                store %249, 1i
+                %250:i32 = load_vector_element %p, 0u
+                %x_256:i32 = let %250
+                %252:i32 = load_vector_element %p, 1u
+                %x_259:i32 = let %252
+                %254:i32 = sub %x_256, 1i
+                %255:i32 = mul %x_259, 16i
+                %256:i32 = add %254, %255
+                %257:ptr<private, i32, read_write> = access %map, %256
+                store %257, 1i
+                %258:i32 = load_vector_element %p, 0u
+                %x_264:i32 = let %258
+                %260:i32 = load_vector_element %p, 1u
+                %x_267:i32 = let %260
+                %262:i32 = sub %x_264, 2i
+                %263:i32 = mul %x_267, 16i
+                %264:i32 = add %262, %263
+                %265:ptr<private, i32, read_write> = access %map, %264
+                store %265, 1i
+                %266:i32 = load_vector_element %p, 0u
+                %x_272:i32 = let %266
+                %268:i32 = sub %x_272, 2i
+                store_vector_element %p, 0u, %268
                 exit_if  # if_16
               }
             }
-            %x_275:i32 = load %d
-            %x_276:bool = gte %x_275, 0i
+            %269:i32 = load %d
+            %x_275:i32 = let %269
+            %271:bool = gte %x_275, 0i
+            %x_276:bool = let %271
             store %x_282_phi, %x_276
-            if %x_276 [t: %b31] {  # if_17
-              %b31 = block {  # true
-                %x_280:i32 = load_vector_element %p, 1u
-                %201:bool = gt %x_280, 0i
-                store %x_281, %201
-                %202:bool = load %x_281
-                store %x_282_phi, %202
+            if %x_276 [t: $B31] {  # if_17
+              $B31: {  # true
+                %273:i32 = load_vector_element %p, 1u
+                %x_280:i32 = let %273
+                %275:bool = gt %x_280, 0i
+                store %x_281, %275
+                %276:bool = load %x_281
+                store %x_282_phi, %276
                 exit_if  # if_17
               }
             }
-            %x_282:bool = load %x_282_phi
-            if %x_282 [t: %b32, f: %b33] {  # if_18
-              %b32 = block {  # true
-                %204:i32 = load_vector_element %p, 0u
-                store %x_288, %204
-                %205:i32 = load %x_288
-                store %x_290_phi, %205
+            %277:bool = load %x_282_phi
+            %x_282:bool = let %277
+            if %x_282 [t: $B32, f: $B33] {  # if_18
+              $B32: {  # true
+                %279:i32 = load_vector_element %p, 0u
+                store %x_288, %279
+                %280:i32 = load %x_288
+                store %x_290_phi, %280
                 exit_if  # if_18
               }
-              %b33 = block {  # false
+              $B33: {  # false
                 store %x_289, 0i
-                %206:i32 = load %x_289
-                store %x_290_phi, %206
+                %281:i32 = load %x_289
+                store %x_290_phi, %281
                 exit_if  # if_18
               }
             }
-            %x_290:i32 = load %x_290_phi
-            if %x_282 [t: %b34, f: %b35] {  # if_19
-              %b34 = block {  # true
-                %208:i32 = load_vector_element %p, 1u
-                store %x_295, %208
-                %209:i32 = load %x_295
-                store %x_297_phi, %209
+            %282:i32 = load %x_290_phi
+            %x_290:i32 = let %282
+            if %x_282 [t: $B34, f: $B35] {  # if_19
+              $B34: {  # true
+                %284:i32 = load_vector_element %p, 1u
+                store %x_295, %284
+                %285:i32 = load %x_295
+                store %x_297_phi, %285
                 exit_if  # if_19
               }
-              %b35 = block {  # false
+              $B35: {  # false
                 store %x_296, 0i
-                %210:i32 = load %x_296
-                store %x_297_phi, %210
+                %286:i32 = load %x_296
+                store %x_297_phi, %286
                 exit_if  # if_19
               }
             }
-            %x_297:i32 = load %x_297_phi
-            %212:i32 = sub %x_297, 2i
-            %x_299:i32 = mul %212, 16i
-            if %x_282 [t: %b36, f: %b37] {  # if_20
-              %b36 = block {  # true
-                %214:array<i32, 256> = load %map
-                store %x_303, %214
-                %215:array<i32, 256> = load %x_303
-                store %x_305_phi, %215
+            %287:i32 = load %x_297_phi
+            %x_297:i32 = let %287
+            %289:i32 = sub %x_297, 2i
+            %290:i32 = mul %289, 16i
+            %x_299:i32 = let %290
+            if %x_282 [t: $B36, f: $B37] {  # if_20
+              $B36: {  # true
+                %292:array<i32, 256> = load %map
+                store %x_303, %292
+                %293:array<i32, 256> = load %x_303
+                store %x_305_phi, %293
                 exit_if  # if_20
               }
-              %b37 = block {  # false
+              $B37: {  # false
                 store %x_304, array<i32, 256>(0i)
-                %216:array<i32, 256> = load %x_304
-                store %x_305_phi, %216
+                %294:array<i32, 256> = load %x_304
+                store %x_305_phi, %294
                 exit_if  # if_20
               }
             }
-            %x_305:array<i32, 256> = load %x_305_phi
-            if %x_282 [t: %b38] {  # if_21
-              %b38 = block {  # true
+            %295:array<i32, 256> = load %x_305_phi
+            %x_305:array<i32, 256> = let %295
+            if %x_282 [t: $B38] {  # if_21
+              $B38: {  # true
                 store %map, array<i32, 256>(0i)
                 exit_if  # if_21
               }
             }
-            if %x_282 [t: %b39] {  # if_22
-              %b39 = block {  # true
+            if %x_282 [t: $B39] {  # if_22
+              $B39: {  # true
                 store %map, %x_305
                 exit_if  # if_22
               }
             }
-            if %x_282 [t: %b40, f: %b41] {  # if_23
-              %b40 = block {  # true
-                %218:i32 = add %x_290, %x_299
-                %219:ptr<private, i32, read_write> = access %map, %218
-                %220:i32 = load %219
-                store %x_315, %220
-                %221:i32 = load %x_315
-                store %x_317_phi, %221
+            if %x_282 [t: $B40, f: $B41] {  # if_23
+              $B40: {  # true
+                %297:i32 = add %x_290, %x_299
+                %298:ptr<private, i32, read_write> = access %map, %297
+                %299:i32 = load %298
+                store %x_315, %299
+                %300:i32 = load %x_315
+                store %x_317_phi, %300
                 exit_if  # if_23
               }
-              %b41 = block {  # false
+              $B41: {  # false
                 store %x_316, 0i
-                %222:i32 = load %x_316
-                store %x_317_phi, %222
+                %301:i32 = load %x_316
+                store %x_317_phi, %301
                 exit_if  # if_23
               }
             }
-            %x_317:i32 = load %x_317_phi
-            %x_318:bool = eq %x_317, 0i
-            %225:bool = select %x_282, %x_318, %x_282
-            if %225 [t: %b42] {  # if_24
-              %b42 = block {  # true
-                %x_323:i32 = load %d
-                %227:i32 = sub %x_323, 1i
-                store %d, %227
-                %x_326:i32 = load_vector_element %p, 0u
-                %x_328:i32 = load_vector_element %p, 1u
-                %230:i32 = mul %x_328, 16i
-                %231:i32 = add %x_326, %230
-                %232:ptr<private, i32, read_write> = access %map, %231
-                store %232, 1i
-                %x_333:i32 = load_vector_element %p, 0u
-                %x_335:i32 = load_vector_element %p, 1u
-                %235:i32 = sub %x_335, 1i
-                %236:i32 = mul %235, 16i
-                %237:i32 = add %x_333, %236
-                %238:ptr<private, i32, read_write> = access %map, %237
-                store %238, 1i
-                %x_341:i32 = load_vector_element %p, 0u
-                %x_343:i32 = load_vector_element %p, 1u
-                %x_345:array<i32, 256> = load %map
+            %302:i32 = load %x_317_phi
+            %x_317:i32 = let %302
+            %304:bool = eq %x_317, 0i
+            %x_318:bool = let %304
+            %306:bool = select %x_282, %x_318, %x_282
+            if %306 [t: $B42] {  # if_24
+              $B42: {  # true
+                %307:i32 = load %d
+                %x_323:i32 = let %307
+                %309:i32 = sub %x_323, 1i
+                store %d, %309
+                %310:i32 = load_vector_element %p, 0u
+                %x_326:i32 = let %310
+                %312:i32 = load_vector_element %p, 1u
+                %x_328:i32 = let %312
+                %314:i32 = mul %x_328, 16i
+                %315:i32 = add %x_326, %314
+                %316:ptr<private, i32, read_write> = access %map, %315
+                store %316, 1i
+                %317:i32 = load_vector_element %p, 0u
+                %x_333:i32 = let %317
+                %319:i32 = load_vector_element %p, 1u
+                %x_335:i32 = let %319
+                %321:i32 = sub %x_335, 1i
+                %322:i32 = mul %321, 16i
+                %323:i32 = add %x_333, %322
+                %324:ptr<private, i32, read_write> = access %map, %323
+                store %324, 1i
+                %325:i32 = load_vector_element %p, 0u
+                %x_341:i32 = let %325
+                %327:i32 = load_vector_element %p, 1u
+                %x_343:i32 = let %327
+                %329:array<i32, 256> = load %map
+                %x_345:array<i32, 256> = let %329
                 store %map, array<i32, 256>(0i)
                 store %map, %x_345
-                %242:i32 = sub %x_343, 2i
-                %243:i32 = mul %242, 16i
-                %244:i32 = add %x_341, %243
-                %245:ptr<private, i32, read_write> = access %map, %244
-                store %245, 1i
-                %x_350:i32 = load_vector_element %p, 1u
-                %247:i32 = sub %x_350, 2i
-                store_vector_element %p, 1u, %247
+                %331:i32 = sub %x_343, 2i
+                %332:i32 = mul %331, 16i
+                %333:i32 = add %x_341, %332
+                %334:ptr<private, i32, read_write> = access %map, %333
+                store %334, 1i
+                %335:i32 = load_vector_element %p, 1u
+                %x_350:i32 = let %335
+                %337:i32 = sub %x_350, 2i
+                store_vector_element %p, 1u, %337
                 exit_if  # if_24
               }
             }
-            %x_353:i32 = load %d
-            %x_354:bool = gte %x_353, 0i
+            %338:i32 = load %d
+            %x_353:i32 = let %338
+            %340:bool = gte %x_353, 0i
+            %x_354:bool = let %340
             store %x_360_phi, %x_354
-            if %x_354 [t: %b43] {  # if_25
-              %b43 = block {  # true
-                %x_358:i32 = load_vector_element %p, 0u
-                %251:bool = lt %x_358, 14i
-                store %x_359, %251
-                %252:bool = load %x_359
-                store %x_360_phi, %252
+            if %x_354 [t: $B43] {  # if_25
+              $B43: {  # true
+                %342:i32 = load_vector_element %p, 0u
+                %x_358:i32 = let %342
+                %344:bool = lt %x_358, 14i
+                store %x_359, %344
+                %345:bool = load %x_359
+                store %x_360_phi, %345
                 exit_if  # if_25
               }
             }
-            %x_360:bool = load %x_360_phi
+            %346:bool = load %x_360_phi
+            %x_360:bool = let %346
             store %x_373_phi, %x_360
-            if %x_360 [t: %b44] {  # if_26
-              %b44 = block {  # true
-                %x_364:i32 = load_vector_element %p, 0u
-                %x_367:i32 = load_vector_element %p, 1u
-                %256:i32 = add %x_364, 2i
-                %257:i32 = mul %x_367, 16i
-                %258:i32 = add %256, %257
-                %259:ptr<private, i32, read_write> = access %map, %258
-                %x_371:i32 = load %259
-                %261:bool = eq %x_371, 0i
-                store %x_372, %261
-                %262:bool = load %x_372
-                store %x_373_phi, %262
+            if %x_360 [t: $B44] {  # if_26
+              $B44: {  # true
+                %348:i32 = load_vector_element %p, 0u
+                %x_364:i32 = let %348
+                %350:i32 = load_vector_element %p, 1u
+                %x_367:i32 = let %350
+                %352:i32 = add %x_364, 2i
+                %353:i32 = mul %x_367, 16i
+                %354:i32 = add %352, %353
+                %355:ptr<private, i32, read_write> = access %map, %354
+                %356:i32 = load %355
+                %x_371:i32 = let %356
+                %358:bool = eq %x_371, 0i
+                store %x_372, %358
+                %359:bool = load %x_372
+                store %x_373_phi, %359
                 exit_if  # if_26
               }
             }
-            %x_373:bool = load %x_373_phi
-            if %x_373 [t: %b45] {  # if_27
-              %b45 = block {  # true
-                %x_376:i32 = load %d
-                %265:i32 = sub %x_376, 1i
-                store %d, %265
-                %x_379:i32 = load_vector_element %p, 0u
-                %x_381:i32 = load_vector_element %p, 1u
-                %268:i32 = mul %x_381, 16i
-                %269:i32 = add %x_379, %268
-                %270:ptr<private, i32, read_write> = access %map, %269
-                store %270, 1i
-                %x_386:i32 = load_vector_element %p, 0u
-                %x_389:i32 = load_vector_element %p, 1u
-                %273:i32 = add %x_386, 1i
-                %274:i32 = mul %x_389, 16i
-                %275:i32 = add %273, %274
-                %276:ptr<private, i32, read_write> = access %map, %275
-                store %276, 1i
-                %x_394:i32 = load_vector_element %p, 0u
-                %x_397:i32 = load_vector_element %p, 1u
-                %279:i32 = add %x_394, 2i
-                %280:i32 = mul %x_397, 16i
-                %281:i32 = add %279, %280
-                %282:ptr<private, i32, read_write> = access %map, %281
-                store %282, 1i
-                %x_402:i32 = load_vector_element %p, 0u
-                %284:i32 = add %x_402, 2i
-                store_vector_element %p, 0u, %284
+            %360:bool = load %x_373_phi
+            %x_373:bool = let %360
+            if %x_373 [t: $B45] {  # if_27
+              $B45: {  # true
+                %362:i32 = load %d
+                %x_376:i32 = let %362
+                %364:i32 = sub %x_376, 1i
+                store %d, %364
+                %365:i32 = load_vector_element %p, 0u
+                %x_379:i32 = let %365
+                %367:i32 = load_vector_element %p, 1u
+                %x_381:i32 = let %367
+                %369:i32 = mul %x_381, 16i
+                %370:i32 = add %x_379, %369
+                %371:ptr<private, i32, read_write> = access %map, %370
+                store %371, 1i
+                %372:i32 = load_vector_element %p, 0u
+                %x_386:i32 = let %372
+                %374:i32 = load_vector_element %p, 1u
+                %x_389:i32 = let %374
+                %376:i32 = add %x_386, 1i
+                %377:i32 = mul %x_389, 16i
+                %378:i32 = add %376, %377
+                %379:ptr<private, i32, read_write> = access %map, %378
+                store %379, 1i
+                %380:i32 = load_vector_element %p, 0u
+                %x_394:i32 = let %380
+                %382:i32 = load_vector_element %p, 1u
+                %x_397:i32 = let %382
+                %384:i32 = add %x_394, 2i
+                %385:i32 = mul %x_397, 16i
+                %386:i32 = add %384, %385
+                %387:ptr<private, i32, read_write> = access %map, %386
+                store %387, 1i
+                %388:i32 = load_vector_element %p, 0u
+                %x_402:i32 = let %388
+                %390:i32 = add %x_402, 2i
+                store_vector_element %p, 0u, %390
                 exit_if  # if_27
               }
             }
-            %x_405:i32 = load %d
-            %x_406:bool = gte %x_405, 0i
+            %391:i32 = load %d
+            %x_405:i32 = let %391
+            %393:bool = gte %x_405, 0i
+            %x_406:bool = let %393
             store %x_412_phi, %x_406
-            if %x_406 [t: %b46] {  # if_28
-              %b46 = block {  # true
-                %x_410:i32 = load_vector_element %p, 1u
-                %288:bool = lt %x_410, 14i
-                store %x_411, %288
-                %289:bool = load %x_411
-                store %x_412_phi, %289
+            if %x_406 [t: $B46] {  # if_28
+              $B46: {  # true
+                %395:i32 = load_vector_element %p, 1u
+                %x_410:i32 = let %395
+                %397:bool = lt %x_410, 14i
+                store %x_411, %397
+                %398:bool = load %x_411
+                store %x_412_phi, %398
                 exit_if  # if_28
               }
             }
-            %x_412:bool = load %x_412_phi
+            %399:bool = load %x_412_phi
+            %x_412:bool = let %399
             store %x_425_phi, %x_412
-            if %x_412 [t: %b47] {  # if_29
-              %b47 = block {  # true
-                %x_416:i32 = load_vector_element %p, 0u
-                %x_418:i32 = load_vector_element %p, 1u
-                %293:i32 = add %x_418, 2i
-                %294:i32 = mul %293, 16i
-                %295:i32 = add %x_416, %294
-                %296:ptr<private, i32, read_write> = access %map, %295
-                %x_423:i32 = load %296
-                %298:bool = eq %x_423, 0i
-                store %x_424, %298
-                %299:bool = load %x_424
-                store %x_425_phi, %299
+            if %x_412 [t: $B47] {  # if_29
+              $B47: {  # true
+                %401:i32 = load_vector_element %p, 0u
+                %x_416:i32 = let %401
+                %403:i32 = load_vector_element %p, 1u
+                %x_418:i32 = let %403
+                %405:i32 = add %x_418, 2i
+                %406:i32 = mul %405, 16i
+                %407:i32 = add %x_416, %406
+                %408:ptr<private, i32, read_write> = access %map, %407
+                %409:i32 = load %408
+                %x_423:i32 = let %409
+                %411:bool = eq %x_423, 0i
+                store %x_424, %411
+                %412:bool = load %x_424
+                store %x_425_phi, %412
                 exit_if  # if_29
               }
             }
-            %x_425:bool = load %x_425_phi
-            if %x_425 [t: %b48] {  # if_30
-              %b48 = block {  # true
-                %x_428:i32 = load %d
-                %302:i32 = sub %x_428, 1i
-                store %d, %302
-                %x_431:i32 = load_vector_element %p, 0u
-                %x_433:i32 = load_vector_element %p, 1u
-                %305:i32 = mul %x_433, 16i
-                %306:i32 = add %x_431, %305
-                %307:ptr<private, i32, read_write> = access %map, %306
-                store %307, 1i
-                %x_438:i32 = load_vector_element %p, 0u
-                %x_440:i32 = load_vector_element %p, 1u
-                %310:i32 = add %x_440, 1i
-                %311:i32 = mul %310, 16i
-                %312:i32 = add %x_438, %311
-                %313:ptr<private, i32, read_write> = access %map, %312
-                store %313, 1i
-                %x_446:i32 = load_vector_element %p, 0u
-                %x_448:i32 = load_vector_element %p, 1u
-                %316:i32 = add %x_448, 2i
-                %317:i32 = mul %316, 16i
-                %318:i32 = add %x_446, %317
-                %319:ptr<private, i32, read_write> = access %map, %318
-                store %319, 1i
-                %x_454:i32 = load_vector_element %p, 1u
-                %321:i32 = add %x_454, 2i
-                store_vector_element %p, 1u, %321
+            %413:bool = load %x_425_phi
+            %x_425:bool = let %413
+            if %x_425 [t: $B48] {  # if_30
+              $B48: {  # true
+                %415:i32 = load %d
+                %x_428:i32 = let %415
+                %417:i32 = sub %x_428, 1i
+                store %d, %417
+                %418:i32 = load_vector_element %p, 0u
+                %x_431:i32 = let %418
+                %420:i32 = load_vector_element %p, 1u
+                %x_433:i32 = let %420
+                %422:i32 = mul %x_433, 16i
+                %423:i32 = add %x_431, %422
+                %424:ptr<private, i32, read_write> = access %map, %423
+                store %424, 1i
+                %425:i32 = load_vector_element %p, 0u
+                %x_438:i32 = let %425
+                %427:i32 = load_vector_element %p, 1u
+                %x_440:i32 = let %427
+                %429:i32 = add %x_440, 1i
+                %430:i32 = mul %429, 16i
+                %431:i32 = add %x_438, %430
+                %432:ptr<private, i32, read_write> = access %map, %431
+                store %432, 1i
+                %433:i32 = load_vector_element %p, 0u
+                %x_446:i32 = let %433
+                %435:i32 = load_vector_element %p, 1u
+                %x_448:i32 = let %435
+                %437:i32 = add %x_448, 2i
+                %438:i32 = mul %437, 16i
+                %439:i32 = add %x_446, %438
+                %440:ptr<private, i32, read_write> = access %map, %439
+                store %440, 1i
+                %441:i32 = load_vector_element %p, 1u
+                %x_454:i32 = let %441
+                %443:i32 = add %x_454, 2i
+                store_vector_element %p, 1u, %443
                 exit_if  # if_30
               }
             }
             exit_if  # if_10
           }
         }
-        %x_458:i32 = load_vector_element %ipos, 1u
-        %x_461:i32 = load_vector_element %ipos, 0u
-        %324:i32 = mul %x_458, 16i
-        %325:i32 = add %324, %x_461
-        %326:ptr<private, i32, read_write> = access %map, %325
-        %x_464:i32 = load %326
-        %328:bool = eq %x_464, 1i
-        if %328 [t: %b49] {  # if_31
-          %b49 = block {  # true
+        %444:i32 = load_vector_element %ipos, 1u
+        %x_458:i32 = let %444
+        %446:i32 = load_vector_element %ipos, 0u
+        %x_461:i32 = let %446
+        %448:i32 = mul %x_458, 16i
+        %449:i32 = add %448, %x_461
+        %450:ptr<private, i32, read_write> = access %map, %449
+        %451:i32 = load %450
+        %x_464:i32 = let %451
+        %453:bool = eq %x_464, 1i
+        if %453 [t: $B49] {  # if_31
+          $B49: {  # true
             store %x_GLF_color, vec4<f32>(1.0f)
             ret
           }
         }
-        continue %b8
+        continue  # -> $B8
       }
-      %b8 = block {  # continuing
-        %x_468:bool = load %canwalk
-        %330:bool = eq %x_468, false
-        break_if %330 %b7
+      $B8: {  # continuing
+        %454:bool = load %canwalk
+        %x_468:bool = let %454
+        %456:bool = eq %x_468, false
+        break_if %456  # -> [t: exit_loop loop_2, f: $B7]
       }
     }
     store %x_GLF_color, vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f)
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b50 {
-  %b50 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B50: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %333:void = call %main_1
-    %334:vec4<f32> = load %x_GLF_color
-    %335:main_out = construct %334
-    ret %335
+    %459:void = call %main_1
+    %460:vec4<f32> = load %x_GLF_color
+    %461:main_out = construct %460
+    ret %461
+  }
+}
+%tint_mod_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B51: {
+    %464:bool = eq %rhs, 0i
+    %465:bool = eq %lhs, -2147483648i
+    %466:bool = eq %rhs, -1i
+    %467:bool = and %465, %466
+    %468:bool = or %464, %467
+    %469:i32 = select %rhs, 1i, %468
+    %470:i32 = let %469
+    %471:i32 = div %lhs, %470
+    %472:i32 = mul %471, %470
+    %473:i32 = sub %lhs, %472
+    ret %473
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B52: {
+    %475:i32 = convert %value
+    %476:bool = gte %value, -2147483648.0f
+    %477:i32 = select -2147483648i, %475, %476
+    %478:bool = lte %value, 2147483520.0f
+    %479:i32 = select 2147483647i, %477, %478
+    ret %479
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/2.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/2.spvasm.expected.ir.msl
index 5b39cf9..0a0497a 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/2.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/2.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,15 +8,15 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %map:ptr<private, array<i32, 256>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %pos:ptr<function, vec2<f32>, read_write> = var
     %ipos:ptr<function, vec2<i32>, read_write> = var
     %i:ptr<function, i32, read_write> = var
@@ -34,42 +34,44 @@
     store %pos, %19
     %20:f32 = load_vector_element %pos, 0u
     %21:f32 = mul %20, 16.0f
-    %22:i32 = convert %21
-    %23:f32 = load_vector_element %pos, 1u
-    %24:f32 = mul %23, 16.0f
-    %25:i32 = convert %24
-    %26:vec2<i32> = construct %22, %25
-    store %ipos, %26
+    %22:i32 = call %tint_f32_to_i32, %21
+    %24:i32 = let %22
+    %25:f32 = load_vector_element %pos, 1u
+    %26:f32 = mul %25, 16.0f
+    %27:i32 = call %tint_f32_to_i32, %26
+    %28:vec2<i32> = construct %24, %27
+    store %ipos, %28
     store %i, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %27:i32 = load %i
-        %28:bool = lt %27, 256i
-        if %28 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %29:i32 = load %i
+        %30:bool = lt %29, 256i
+        if %30 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_80:i32 = load %i
-        %30:ptr<private, i32, read_write> = access %map, %x_80
-        store %30, 0i
-        continue %b4
-      }
-      %b4 = block {  # continuing
         %31:i32 = load %i
-        %32:i32 = add %31, 1i
-        store %i, %32
-        next_iteration %b3
+        %x_80:i32 = let %31
+        %33:ptr<private, i32, read_write> = access %map, %x_80
+        store %33, 0i
+        continue  # -> $B4
+      }
+      $B4: {  # continuing
+        %34:i32 = load %i
+        %35:i32 = add %34, 1i
+        store %i, %35
+        next_iteration  # -> $B3
       }
     }
     store %p, vec2<i32>(0i)
     store %canwalk, true
     store %v, 0i
-    loop [b: %b7, c: %b8] {  # loop_2
-      %b7 = block {  # body
+    loop [b: $B7, c: $B8] {  # loop_2
+      $B7: {  # body
         %x_104:ptr<function, bool, read_write> = var
         %x_105:ptr<function, bool, read_write> = var
         %x_124:ptr<function, bool, read_write> = var
@@ -78,119 +80,123 @@
         %x_145:ptr<function, bool, read_write> = var
         %x_164:ptr<function, bool, read_write> = var
         %x_165:ptr<function, bool, read_write> = var
-        %41:i32 = load %v
-        %42:i32 = add %41, 1i
-        store %v, %42
+        %44:i32 = load %v
+        %45:i32 = add %44, 1i
+        store %v, %45
         store %directions, 0i
-        %43:i32 = load_vector_element %p, 0u
-        %x_92:bool = gt %43, 0i
+        %46:i32 = load_vector_element %p, 0u
+        %47:bool = gt %46, 0i
+        %x_92:bool = let %47
         store %x_105, %x_92
-        if %x_92 [t: %b9] {  # if_2
-          %b9 = block {  # true
-            %45:i32 = load_vector_element %p, 0u
-            %46:i32 = sub %45, 2i
-            %47:i32 = load_vector_element %p, 1u
-            %48:i32 = mul %47, 16i
-            %49:i32 = add %46, %48
-            %50:ptr<private, i32, read_write> = access %map, %49
-            %51:i32 = load %50
-            %52:bool = eq %51, 0i
-            store %x_104, %52
-            %53:bool = load %x_104
-            store %x_105, %53
+        if %x_92 [t: $B9] {  # if_2
+          $B9: {  # true
+            %49:i32 = load_vector_element %p, 0u
+            %50:i32 = sub %49, 2i
+            %51:i32 = load_vector_element %p, 1u
+            %52:i32 = mul %51, 16i
+            %53:i32 = add %50, %52
+            %54:ptr<private, i32, read_write> = access %map, %53
+            %55:i32 = load %54
+            %56:bool = eq %55, 0i
+            store %x_104, %56
+            %57:bool = load %x_104
+            store %x_105, %57
             exit_if  # if_2
           }
         }
-        %54:bool = load %x_105
-        if %54 [t: %b10] {  # if_3
-          %b10 = block {  # true
-            %55:i32 = load %directions
-            %56:i32 = add %55, 1i
-            store %directions, %56
+        %58:bool = load %x_105
+        if %58 [t: $B10] {  # if_3
+          $B10: {  # true
+            %59:i32 = load %directions
+            %60:i32 = add %59, 1i
+            store %directions, %60
             exit_if  # if_3
           }
         }
-        %57:i32 = load_vector_element %p, 1u
-        %x_112:bool = gt %57, 0i
+        %61:i32 = load_vector_element %p, 1u
+        %62:bool = gt %61, 0i
+        %x_112:bool = let %62
         store %x_125, %x_112
-        if %x_112 [t: %b11] {  # if_4
-          %b11 = block {  # true
-            %59:i32 = load_vector_element %p, 0u
-            %60:i32 = load_vector_element %p, 1u
-            %61:i32 = sub %60, 2i
-            %62:i32 = mul %61, 16i
-            %63:i32 = add %59, %62
-            %64:ptr<private, i32, read_write> = access %map, %63
-            %65:i32 = load %64
-            %66:bool = eq %65, 0i
-            store %x_124, %66
-            %67:bool = load %x_124
-            store %x_125, %67
+        if %x_112 [t: $B11] {  # if_4
+          $B11: {  # true
+            %64:i32 = load_vector_element %p, 0u
+            %65:i32 = load_vector_element %p, 1u
+            %66:i32 = sub %65, 2i
+            %67:i32 = mul %66, 16i
+            %68:i32 = add %64, %67
+            %69:ptr<private, i32, read_write> = access %map, %68
+            %70:i32 = load %69
+            %71:bool = eq %70, 0i
+            store %x_124, %71
+            %72:bool = load %x_124
+            store %x_125, %72
             exit_if  # if_4
           }
         }
-        %68:bool = load %x_125
-        if %68 [t: %b12] {  # if_5
-          %b12 = block {  # true
-            %69:i32 = load %directions
-            %70:i32 = add %69, 1i
-            store %directions, %70
+        %73:bool = load %x_125
+        if %73 [t: $B12] {  # if_5
+          $B12: {  # true
+            %74:i32 = load %directions
+            %75:i32 = add %74, 1i
+            store %directions, %75
             exit_if  # if_5
           }
         }
-        %71:i32 = load_vector_element %p, 0u
-        %x_132:bool = lt %71, 14i
+        %76:i32 = load_vector_element %p, 0u
+        %77:bool = lt %76, 14i
+        %x_132:bool = let %77
         store %x_145, %x_132
-        if %x_132 [t: %b13] {  # if_6
-          %b13 = block {  # true
-            %73:i32 = load_vector_element %p, 0u
-            %74:i32 = add %73, 2i
-            %75:i32 = load_vector_element %p, 1u
-            %76:i32 = mul %75, 16i
-            %77:i32 = add %74, %76
-            %78:ptr<private, i32, read_write> = access %map, %77
-            %79:i32 = load %78
-            %80:bool = eq %79, 0i
-            store %x_144, %80
-            %81:bool = load %x_144
-            store %x_145, %81
+        if %x_132 [t: $B13] {  # if_6
+          $B13: {  # true
+            %79:i32 = load_vector_element %p, 0u
+            %80:i32 = add %79, 2i
+            %81:i32 = load_vector_element %p, 1u
+            %82:i32 = mul %81, 16i
+            %83:i32 = add %80, %82
+            %84:ptr<private, i32, read_write> = access %map, %83
+            %85:i32 = load %84
+            %86:bool = eq %85, 0i
+            store %x_144, %86
+            %87:bool = load %x_144
+            store %x_145, %87
             exit_if  # if_6
           }
         }
-        %82:bool = load %x_145
-        if %82 [t: %b14] {  # if_7
-          %b14 = block {  # true
-            %83:i32 = load %directions
-            %84:i32 = add %83, 1i
-            store %directions, %84
+        %88:bool = load %x_145
+        if %88 [t: $B14] {  # if_7
+          $B14: {  # true
+            %89:i32 = load %directions
+            %90:i32 = add %89, 1i
+            store %directions, %90
             exit_if  # if_7
           }
         }
-        %85:i32 = load_vector_element %p, 1u
-        %x_152:bool = lt %85, 14i
+        %91:i32 = load_vector_element %p, 1u
+        %92:bool = lt %91, 14i
+        %x_152:bool = let %92
         store %x_165, %x_152
-        if %x_152 [t: %b15] {  # if_8
-          %b15 = block {  # true
-            %87:i32 = load_vector_element %p, 0u
-            %88:i32 = load_vector_element %p, 1u
-            %89:i32 = add %88, 2i
-            %90:i32 = mul %89, 16i
-            %91:i32 = add %87, %90
-            %92:ptr<private, i32, read_write> = access %map, %91
-            %93:i32 = load %92
-            %94:bool = eq %93, 0i
-            store %x_164, %94
-            %95:bool = load %x_164
-            store %x_165, %95
+        if %x_152 [t: $B15] {  # if_8
+          $B15: {  # true
+            %94:i32 = load_vector_element %p, 0u
+            %95:i32 = load_vector_element %p, 1u
+            %96:i32 = add %95, 2i
+            %97:i32 = mul %96, 16i
+            %98:i32 = add %94, %97
+            %99:ptr<private, i32, read_write> = access %map, %98
+            %100:i32 = load %99
+            %101:bool = eq %100, 0i
+            store %x_164, %101
+            %102:bool = load %x_164
+            store %x_165, %102
             exit_if  # if_8
           }
         }
-        %96:bool = load %x_165
-        if %96 [t: %b16] {  # if_9
-          %b16 = block {  # true
-            %97:i32 = load %directions
-            %98:i32 = add %97, 1i
-            store %directions, %98
+        %103:bool = load %x_165
+        if %103 [t: $B16] {  # if_9
+          $B16: {  # true
+            %104:i32 = load %directions
+            %105:i32 = add %104, 1i
+            store %directions, %105
             exit_if  # if_9
           }
         }
@@ -210,390 +216,450 @@
         %x_388:ptr<function, bool, read_write> = var
         %x_400:ptr<function, bool, read_write> = var
         %x_401:ptr<function, bool, read_write> = var
-        %115:i32 = load %directions
-        %116:bool = eq %115, 0i
-        if %116 [t: %b17, f: %b18] {  # if_10
-          %b17 = block {  # true
+        %122:i32 = load %directions
+        %123:bool = eq %122, 0i
+        if %123 [t: $B17, f: $B18] {  # if_10
+          $B17: {  # true
             store %canwalk, false
             store %i, 0i
-            loop [b: %b19, c: %b20] {  # loop_3
-              %b19 = block {  # body
-                %117:i32 = load %i
-                %118:bool = lt %117, 8i
-                if %118 [t: %b21, f: %b22] {  # if_11
-                  %b21 = block {  # true
+            loop [b: $B19, c: $B20] {  # loop_3
+              $B19: {  # body
+                %124:i32 = load %i
+                %125:bool = lt %124, 8i
+                if %125 [t: $B21, f: $B22] {  # if_11
+                  $B21: {  # true
                     exit_if  # if_11
                   }
-                  %b22 = block {  # false
+                  $B22: {  # false
                     exit_loop  # loop_3
                   }
                 }
                 store %j, 0i
-                loop [b: %b23, c: %b24] {  # loop_4
-                  %b23 = block {  # body
-                    %119:i32 = load %j
-                    %120:bool = lt %119, 8i
-                    if %120 [t: %b25, f: %b26] {  # if_12
-                      %b25 = block {  # true
+                loop [b: $B23, c: $B24] {  # loop_4
+                  $B23: {  # body
+                    %126:i32 = load %j
+                    %127:bool = lt %126, 8i
+                    if %127 [t: $B25, f: $B26] {  # if_12
+                      $B25: {  # true
                         exit_if  # if_12
                       }
-                      %b26 = block {  # false
+                      $B26: {  # false
                         exit_loop  # loop_4
                       }
                     }
-                    %121:i32 = load %j
-                    %122:i32 = mul %121, 2i
-                    %123:i32 = load %i
-                    %124:i32 = mul %123, 2i
-                    %125:i32 = mul %124, 16i
-                    %126:i32 = add %122, %125
-                    %127:ptr<private, i32, read_write> = access %map, %126
-                    %128:i32 = load %127
-                    %129:bool = eq %128, 0i
-                    if %129 [t: %b27] {  # if_13
-                      %b27 = block {  # true
-                        %130:i32 = load %j
-                        %131:i32 = mul %130, 2i
-                        store_vector_element %p, 0u, %131
-                        %132:i32 = load %i
-                        %133:i32 = mul %132, 2i
-                        store_vector_element %p, 1u, %133
+                    %128:i32 = load %j
+                    %129:i32 = mul %128, 2i
+                    %130:i32 = load %i
+                    %131:i32 = mul %130, 2i
+                    %132:i32 = mul %131, 16i
+                    %133:i32 = add %129, %132
+                    %134:ptr<private, i32, read_write> = access %map, %133
+                    %135:i32 = load %134
+                    %136:bool = eq %135, 0i
+                    if %136 [t: $B27] {  # if_13
+                      $B27: {  # true
+                        %137:i32 = load %j
+                        %138:i32 = mul %137, 2i
+                        store_vector_element %p, 0u, %138
+                        %139:i32 = load %i
+                        %140:i32 = mul %139, 2i
+                        store_vector_element %p, 1u, %140
                         store %canwalk, true
                         exit_if  # if_13
                       }
                     }
-                    continue %b24
+                    continue  # -> $B24
                   }
-                  %b24 = block {  # continuing
-                    %134:i32 = load %j
-                    %135:i32 = add %134, 1i
-                    store %j, %135
-                    next_iteration %b23
+                  $B24: {  # continuing
+                    %141:i32 = load %j
+                    %142:i32 = add %141, 1i
+                    store %j, %142
+                    next_iteration  # -> $B23
                   }
                 }
-                continue %b20
+                continue  # -> $B20
               }
-              %b20 = block {  # continuing
-                %136:i32 = load %i
-                %137:i32 = add %136, 1i
-                store %i, %137
-                next_iteration %b19
+              $B20: {  # continuing
+                %143:i32 = load %i
+                %144:i32 = add %143, 1i
+                store %i, %144
+                next_iteration  # -> $B19
               }
             }
-            %x_211:i32 = load_vector_element %p, 0u
-            %x_213:i32 = load_vector_element %p, 1u
-            %140:i32 = mul %x_213, 16i
-            %141:i32 = add %x_211, %140
-            %142:ptr<private, i32, read_write> = access %map, %141
-            store %142, 1i
+            %145:i32 = load_vector_element %p, 0u
+            %x_211:i32 = let %145
+            %147:i32 = load_vector_element %p, 1u
+            %x_213:i32 = let %147
+            %149:i32 = mul %x_213, 16i
+            %150:i32 = add %x_211, %149
+            %151:ptr<private, i32, read_write> = access %map, %150
+            store %151, 1i
             exit_if  # if_10
           }
-          %b18 = block {  # false
-            %143:i32 = load %v
-            %144:i32 = load %directions
-            %145:i32 = mod %143, %144
-            store %d, %145
-            %146:i32 = load %v
-            %147:i32 = load %directions
-            %148:i32 = add %146, %147
-            store %v, %148
-            %149:i32 = load %d
-            %x_224:bool = gte %149, 0i
+          $B18: {  # false
+            %152:i32 = load %v
+            %153:i32 = load %directions
+            %154:i32 = call %tint_mod_i32, %152, %153
+            store %d, %154
+            %156:i32 = load %v
+            %157:i32 = load %directions
+            %158:i32 = add %156, %157
+            store %v, %158
+            %159:i32 = load %d
+            %160:bool = gte %159, 0i
+            %x_224:bool = let %160
             store %x_230, %x_224
-            if %x_224 [t: %b28] {  # if_14
-              %b28 = block {  # true
-                %151:i32 = load_vector_element %p, 0u
-                %152:bool = gt %151, 0i
-                store %x_229, %152
-                %153:bool = load %x_229
-                store %x_230, %153
+            if %x_224 [t: $B28] {  # if_14
+              $B28: {  # true
+                %162:i32 = load_vector_element %p, 0u
+                %163:bool = gt %162, 0i
+                store %x_229, %163
+                %164:bool = load %x_229
+                store %x_230, %164
                 exit_if  # if_14
               }
             }
-            %154:bool = load %x_230
-            store %x_243, %154
-            %155:bool = load %x_230
-            if %155 [t: %b29] {  # if_15
-              %b29 = block {  # true
-                %156:i32 = load_vector_element %p, 0u
-                %157:i32 = sub %156, 2i
-                %158:i32 = load_vector_element %p, 1u
-                %159:i32 = mul %158, 16i
-                %160:i32 = add %157, %159
-                %161:ptr<private, i32, read_write> = access %map, %160
-                %162:i32 = load %161
-                %163:bool = eq %162, 0i
-                store %x_242, %163
-                %164:bool = load %x_242
-                store %x_243, %164
+            %165:bool = load %x_230
+            store %x_243, %165
+            %166:bool = load %x_230
+            if %166 [t: $B29] {  # if_15
+              $B29: {  # true
+                %167:i32 = load_vector_element %p, 0u
+                %168:i32 = sub %167, 2i
+                %169:i32 = load_vector_element %p, 1u
+                %170:i32 = mul %169, 16i
+                %171:i32 = add %168, %170
+                %172:ptr<private, i32, read_write> = access %map, %171
+                %173:i32 = load %172
+                %174:bool = eq %173, 0i
+                store %x_242, %174
+                %175:bool = load %x_242
+                store %x_243, %175
                 exit_if  # if_15
               }
             }
-            %165:bool = load %x_243
-            if %165 [t: %b30] {  # if_16
-              %b30 = block {  # true
-                %166:i32 = load %d
-                %167:i32 = sub %166, 1i
-                store %d, %167
-                %x_249:i32 = load_vector_element %p, 0u
-                %x_251:i32 = load_vector_element %p, 1u
-                %170:i32 = mul %x_251, 16i
-                %171:i32 = add %x_249, %170
-                %172:ptr<private, i32, read_write> = access %map, %171
-                store %172, 1i
-                %x_256:i32 = load_vector_element %p, 0u
-                %x_259:i32 = load_vector_element %p, 1u
-                %175:i32 = sub %x_256, 1i
-                %176:i32 = mul %x_259, 16i
-                %177:i32 = add %175, %176
-                %178:ptr<private, i32, read_write> = access %map, %177
-                store %178, 1i
-                %x_264:i32 = load_vector_element %p, 0u
-                %x_267:i32 = load_vector_element %p, 1u
-                %181:i32 = sub %x_264, 2i
-                %182:i32 = mul %x_267, 16i
-                %183:i32 = add %181, %182
-                %184:ptr<private, i32, read_write> = access %map, %183
-                store %184, 1i
-                %185:i32 = load_vector_element %p, 0u
-                %186:i32 = sub %185, 2i
-                store_vector_element %p, 0u, %186
+            %176:bool = load %x_243
+            if %176 [t: $B30] {  # if_16
+              $B30: {  # true
+                %177:i32 = load %d
+                %178:i32 = sub %177, 1i
+                store %d, %178
+                %179:i32 = load_vector_element %p, 0u
+                %x_249:i32 = let %179
+                %181:i32 = load_vector_element %p, 1u
+                %x_251:i32 = let %181
+                %183:i32 = mul %x_251, 16i
+                %184:i32 = add %x_249, %183
+                %185:ptr<private, i32, read_write> = access %map, %184
+                store %185, 1i
+                %186:i32 = load_vector_element %p, 0u
+                %x_256:i32 = let %186
+                %188:i32 = load_vector_element %p, 1u
+                %x_259:i32 = let %188
+                %190:i32 = sub %x_256, 1i
+                %191:i32 = mul %x_259, 16i
+                %192:i32 = add %190, %191
+                %193:ptr<private, i32, read_write> = access %map, %192
+                store %193, 1i
+                %194:i32 = load_vector_element %p, 0u
+                %x_264:i32 = let %194
+                %196:i32 = load_vector_element %p, 1u
+                %x_267:i32 = let %196
+                %198:i32 = sub %x_264, 2i
+                %199:i32 = mul %x_267, 16i
+                %200:i32 = add %198, %199
+                %201:ptr<private, i32, read_write> = access %map, %200
+                store %201, 1i
+                %202:i32 = load_vector_element %p, 0u
+                %203:i32 = sub %202, 2i
+                store_vector_element %p, 0u, %203
                 exit_if  # if_16
               }
             }
-            %187:i32 = load %d
-            %x_276:bool = gte %187, 0i
+            %204:i32 = load %d
+            %205:bool = gte %204, 0i
+            %x_276:bool = let %205
             store %x_282, %x_276
-            if %x_276 [t: %b31] {  # if_17
-              %b31 = block {  # true
-                %189:i32 = load_vector_element %p, 1u
-                %190:bool = gt %189, 0i
-                store %x_281, %190
-                %191:bool = load %x_281
-                store %x_282, %191
+            if %x_276 [t: $B31] {  # if_17
+              $B31: {  # true
+                %207:i32 = load_vector_element %p, 1u
+                %208:bool = gt %207, 0i
+                store %x_281, %208
+                %209:bool = load %x_281
+                store %x_282, %209
                 exit_if  # if_17
               }
             }
-            %192:bool = load %x_282
-            store %x_296, %192
-            %193:bool = load %x_282
-            if %193 [t: %b32] {  # if_18
-              %b32 = block {  # true
-                %x_286:i32 = load_vector_element %p, 0u
-                %x_288:i32 = load_vector_element %p, 1u
-                %x_291:array<i32, 256> = load %map
+            %210:bool = load %x_282
+            store %x_296, %210
+            %211:bool = load %x_282
+            if %211 [t: $B32] {  # if_18
+              $B32: {  # true
+                %212:i32 = load_vector_element %p, 0u
+                %x_286:i32 = let %212
+                %214:i32 = load_vector_element %p, 1u
+                %x_288:i32 = let %214
+                %216:array<i32, 256> = load %map
+                %x_291:array<i32, 256> = let %216
                 store %map, array<i32, 256>(0i)
                 store %map, %x_291
-                %197:i32 = sub %x_288, 2i
-                %198:i32 = mul %197, 16i
-                %199:i32 = add %x_286, %198
-                %200:ptr<private, i32, read_write> = access %map, %199
-                %201:i32 = load %200
-                %202:bool = eq %201, 0i
-                store %x_295, %202
-                %203:bool = load %x_295
-                store %x_296, %203
+                %218:i32 = sub %x_288, 2i
+                %219:i32 = mul %218, 16i
+                %220:i32 = add %x_286, %219
+                %221:ptr<private, i32, read_write> = access %map, %220
+                %222:i32 = load %221
+                %223:bool = eq %222, 0i
+                store %x_295, %223
+                %224:bool = load %x_295
+                store %x_296, %224
                 exit_if  # if_18
               }
             }
-            %204:bool = load %x_296
-            if %204 [t: %b33] {  # if_19
-              %b33 = block {  # true
-                %205:i32 = load %d
-                %206:i32 = sub %205, 1i
-                store %d, %206
-                %x_302:i32 = load_vector_element %p, 0u
-                %x_304:i32 = load_vector_element %p, 1u
-                %209:i32 = mul %x_304, 16i
-                %210:i32 = add %x_302, %209
-                %211:ptr<private, i32, read_write> = access %map, %210
-                store %211, 1i
-                %x_309:i32 = load_vector_element %p, 0u
-                %x_311:i32 = load_vector_element %p, 1u
-                %214:i32 = sub %x_311, 1i
-                %215:i32 = mul %214, 16i
-                %216:i32 = add %x_309, %215
-                %217:ptr<private, i32, read_write> = access %map, %216
-                store %217, 1i
-                %x_317:i32 = load_vector_element %p, 0u
-                %x_319:i32 = load_vector_element %p, 1u
-                %x_321:array<i32, 256> = load %map
+            %225:bool = load %x_296
+            if %225 [t: $B33] {  # if_19
+              $B33: {  # true
+                %226:i32 = load %d
+                %227:i32 = sub %226, 1i
+                store %d, %227
+                %228:i32 = load_vector_element %p, 0u
+                %x_302:i32 = let %228
+                %230:i32 = load_vector_element %p, 1u
+                %x_304:i32 = let %230
+                %232:i32 = mul %x_304, 16i
+                %233:i32 = add %x_302, %232
+                %234:ptr<private, i32, read_write> = access %map, %233
+                store %234, 1i
+                %235:i32 = load_vector_element %p, 0u
+                %x_309:i32 = let %235
+                %237:i32 = load_vector_element %p, 1u
+                %x_311:i32 = let %237
+                %239:i32 = sub %x_311, 1i
+                %240:i32 = mul %239, 16i
+                %241:i32 = add %x_309, %240
+                %242:ptr<private, i32, read_write> = access %map, %241
+                store %242, 1i
+                %243:i32 = load_vector_element %p, 0u
+                %x_317:i32 = let %243
+                %245:i32 = load_vector_element %p, 1u
+                %x_319:i32 = let %245
+                %247:array<i32, 256> = load %map
+                %x_321:array<i32, 256> = let %247
                 store %map, array<i32, 256>(0i)
                 store %map, %x_321
-                %221:i32 = sub %x_319, 2i
-                %222:i32 = mul %221, 16i
-                %223:i32 = add %x_317, %222
-                %224:ptr<private, i32, read_write> = access %map, %223
-                store %224, 1i
-                %225:i32 = load_vector_element %p, 1u
-                %226:i32 = sub %225, 2i
-                store_vector_element %p, 1u, %226
+                %249:i32 = sub %x_319, 2i
+                %250:i32 = mul %249, 16i
+                %251:i32 = add %x_317, %250
+                %252:ptr<private, i32, read_write> = access %map, %251
+                store %252, 1i
+                %253:i32 = load_vector_element %p, 1u
+                %254:i32 = sub %253, 2i
+                store_vector_element %p, 1u, %254
                 exit_if  # if_19
               }
             }
-            %227:i32 = load %d
-            %x_330:bool = gte %227, 0i
+            %255:i32 = load %d
+            %256:bool = gte %255, 0i
+            %x_330:bool = let %256
             store %x_336, %x_330
-            if %x_330 [t: %b34] {  # if_20
-              %b34 = block {  # true
-                %229:i32 = load_vector_element %p, 0u
-                %230:bool = lt %229, 14i
-                store %x_335, %230
-                %231:bool = load %x_335
-                store %x_336, %231
+            if %x_330 [t: $B34] {  # if_20
+              $B34: {  # true
+                %258:i32 = load_vector_element %p, 0u
+                %259:bool = lt %258, 14i
+                store %x_335, %259
+                %260:bool = load %x_335
+                store %x_336, %260
                 exit_if  # if_20
               }
             }
-            %232:bool = load %x_336
-            store %x_349, %232
-            %233:bool = load %x_336
-            if %233 [t: %b35] {  # if_21
-              %b35 = block {  # true
-                %234:i32 = load_vector_element %p, 0u
-                %235:i32 = add %234, 2i
-                %236:i32 = load_vector_element %p, 1u
-                %237:i32 = mul %236, 16i
-                %238:i32 = add %235, %237
-                %239:ptr<private, i32, read_write> = access %map, %238
-                %240:i32 = load %239
-                %241:bool = eq %240, 0i
-                store %x_348, %241
-                %242:bool = load %x_348
-                store %x_349, %242
+            %261:bool = load %x_336
+            store %x_349, %261
+            %262:bool = load %x_336
+            if %262 [t: $B35] {  # if_21
+              $B35: {  # true
+                %263:i32 = load_vector_element %p, 0u
+                %264:i32 = add %263, 2i
+                %265:i32 = load_vector_element %p, 1u
+                %266:i32 = mul %265, 16i
+                %267:i32 = add %264, %266
+                %268:ptr<private, i32, read_write> = access %map, %267
+                %269:i32 = load %268
+                %270:bool = eq %269, 0i
+                store %x_348, %270
+                %271:bool = load %x_348
+                store %x_349, %271
                 exit_if  # if_21
               }
             }
-            %243:bool = load %x_349
-            if %243 [t: %b36] {  # if_22
-              %b36 = block {  # true
-                %244:i32 = load %d
-                %245:i32 = sub %244, 1i
-                store %d, %245
-                %x_355:i32 = load_vector_element %p, 0u
-                %x_357:i32 = load_vector_element %p, 1u
-                %248:i32 = mul %x_357, 16i
-                %249:i32 = add %x_355, %248
-                %250:ptr<private, i32, read_write> = access %map, %249
-                store %250, 1i
-                %x_362:i32 = load_vector_element %p, 0u
-                %x_365:i32 = load_vector_element %p, 1u
-                %253:i32 = add %x_362, 1i
-                %254:i32 = mul %x_365, 16i
-                %255:i32 = add %253, %254
-                %256:ptr<private, i32, read_write> = access %map, %255
-                store %256, 1i
-                %x_370:i32 = load_vector_element %p, 0u
-                %x_373:i32 = load_vector_element %p, 1u
-                %259:i32 = add %x_370, 2i
-                %260:i32 = mul %x_373, 16i
-                %261:i32 = add %259, %260
-                %262:ptr<private, i32, read_write> = access %map, %261
-                store %262, 1i
-                %263:i32 = load_vector_element %p, 0u
-                %264:i32 = add %263, 2i
-                store_vector_element %p, 0u, %264
+            %272:bool = load %x_349
+            if %272 [t: $B36] {  # if_22
+              $B36: {  # true
+                %273:i32 = load %d
+                %274:i32 = sub %273, 1i
+                store %d, %274
+                %275:i32 = load_vector_element %p, 0u
+                %x_355:i32 = let %275
+                %277:i32 = load_vector_element %p, 1u
+                %x_357:i32 = let %277
+                %279:i32 = mul %x_357, 16i
+                %280:i32 = add %x_355, %279
+                %281:ptr<private, i32, read_write> = access %map, %280
+                store %281, 1i
+                %282:i32 = load_vector_element %p, 0u
+                %x_362:i32 = let %282
+                %284:i32 = load_vector_element %p, 1u
+                %x_365:i32 = let %284
+                %286:i32 = add %x_362, 1i
+                %287:i32 = mul %x_365, 16i
+                %288:i32 = add %286, %287
+                %289:ptr<private, i32, read_write> = access %map, %288
+                store %289, 1i
+                %290:i32 = load_vector_element %p, 0u
+                %x_370:i32 = let %290
+                %292:i32 = load_vector_element %p, 1u
+                %x_373:i32 = let %292
+                %294:i32 = add %x_370, 2i
+                %295:i32 = mul %x_373, 16i
+                %296:i32 = add %294, %295
+                %297:ptr<private, i32, read_write> = access %map, %296
+                store %297, 1i
+                %298:i32 = load_vector_element %p, 0u
+                %299:i32 = add %298, 2i
+                store_vector_element %p, 0u, %299
                 exit_if  # if_22
               }
             }
-            %265:i32 = load %d
-            %x_382:bool = gte %265, 0i
+            %300:i32 = load %d
+            %301:bool = gte %300, 0i
+            %x_382:bool = let %301
             store %x_388, %x_382
-            if %x_382 [t: %b37] {  # if_23
-              %b37 = block {  # true
-                %267:i32 = load_vector_element %p, 1u
-                %268:bool = lt %267, 14i
-                store %x_387, %268
-                %269:bool = load %x_387
-                store %x_388, %269
+            if %x_382 [t: $B37] {  # if_23
+              $B37: {  # true
+                %303:i32 = load_vector_element %p, 1u
+                %304:bool = lt %303, 14i
+                store %x_387, %304
+                %305:bool = load %x_387
+                store %x_388, %305
                 exit_if  # if_23
               }
             }
-            %270:bool = load %x_388
-            store %x_401, %270
-            %271:bool = load %x_388
-            if %271 [t: %b38] {  # if_24
-              %b38 = block {  # true
-                %272:i32 = load_vector_element %p, 0u
-                %273:i32 = load_vector_element %p, 1u
-                %274:i32 = add %273, 2i
-                %275:i32 = mul %274, 16i
-                %276:i32 = add %272, %275
-                %277:ptr<private, i32, read_write> = access %map, %276
-                %278:i32 = load %277
-                %279:bool = eq %278, 0i
-                store %x_400, %279
-                %280:bool = load %x_400
-                store %x_401, %280
+            %306:bool = load %x_388
+            store %x_401, %306
+            %307:bool = load %x_388
+            if %307 [t: $B38] {  # if_24
+              $B38: {  # true
+                %308:i32 = load_vector_element %p, 0u
+                %309:i32 = load_vector_element %p, 1u
+                %310:i32 = add %309, 2i
+                %311:i32 = mul %310, 16i
+                %312:i32 = add %308, %311
+                %313:ptr<private, i32, read_write> = access %map, %312
+                %314:i32 = load %313
+                %315:bool = eq %314, 0i
+                store %x_400, %315
+                %316:bool = load %x_400
+                store %x_401, %316
                 exit_if  # if_24
               }
             }
-            %281:bool = load %x_401
-            if %281 [t: %b39] {  # if_25
-              %b39 = block {  # true
-                %282:i32 = load %d
-                %283:i32 = sub %282, 1i
-                store %d, %283
-                %x_407:i32 = load_vector_element %p, 0u
-                %x_409:i32 = load_vector_element %p, 1u
-                %286:i32 = mul %x_409, 16i
-                %287:i32 = add %x_407, %286
-                %288:ptr<private, i32, read_write> = access %map, %287
-                store %288, 1i
-                %x_414:i32 = load_vector_element %p, 0u
-                %x_416:i32 = load_vector_element %p, 1u
-                %291:i32 = add %x_416, 1i
-                %292:i32 = mul %291, 16i
-                %293:i32 = add %x_414, %292
-                %294:ptr<private, i32, read_write> = access %map, %293
-                store %294, 1i
-                %x_422:i32 = load_vector_element %p, 0u
-                %x_424:i32 = load_vector_element %p, 1u
-                %297:i32 = add %x_424, 2i
-                %298:i32 = mul %297, 16i
-                %299:i32 = add %x_422, %298
-                %300:ptr<private, i32, read_write> = access %map, %299
-                store %300, 1i
-                %301:i32 = load_vector_element %p, 1u
-                %302:i32 = add %301, 2i
-                store_vector_element %p, 1u, %302
+            %317:bool = load %x_401
+            if %317 [t: $B39] {  # if_25
+              $B39: {  # true
+                %318:i32 = load %d
+                %319:i32 = sub %318, 1i
+                store %d, %319
+                %320:i32 = load_vector_element %p, 0u
+                %x_407:i32 = let %320
+                %322:i32 = load_vector_element %p, 1u
+                %x_409:i32 = let %322
+                %324:i32 = mul %x_409, 16i
+                %325:i32 = add %x_407, %324
+                %326:ptr<private, i32, read_write> = access %map, %325
+                store %326, 1i
+                %327:i32 = load_vector_element %p, 0u
+                %x_414:i32 = let %327
+                %329:i32 = load_vector_element %p, 1u
+                %x_416:i32 = let %329
+                %331:i32 = add %x_416, 1i
+                %332:i32 = mul %331, 16i
+                %333:i32 = add %x_414, %332
+                %334:ptr<private, i32, read_write> = access %map, %333
+                store %334, 1i
+                %335:i32 = load_vector_element %p, 0u
+                %x_422:i32 = let %335
+                %337:i32 = load_vector_element %p, 1u
+                %x_424:i32 = let %337
+                %339:i32 = add %x_424, 2i
+                %340:i32 = mul %339, 16i
+                %341:i32 = add %x_422, %340
+                %342:ptr<private, i32, read_write> = access %map, %341
+                store %342, 1i
+                %343:i32 = load_vector_element %p, 1u
+                %344:i32 = add %343, 2i
+                store_vector_element %p, 1u, %344
                 exit_if  # if_25
               }
             }
             exit_if  # if_10
           }
         }
-        %303:i32 = load_vector_element %ipos, 1u
-        %304:i32 = mul %303, 16i
-        %305:i32 = load_vector_element %ipos, 0u
-        %306:i32 = add %304, %305
-        %307:ptr<private, i32, read_write> = access %map, %306
-        %308:i32 = load %307
-        %309:bool = eq %308, 1i
-        if %309 [t: %b40] {  # if_26
-          %b40 = block {  # true
+        %345:i32 = load_vector_element %ipos, 1u
+        %346:i32 = mul %345, 16i
+        %347:i32 = load_vector_element %ipos, 0u
+        %348:i32 = add %346, %347
+        %349:ptr<private, i32, read_write> = access %map, %348
+        %350:i32 = load %349
+        %351:bool = eq %350, 1i
+        if %351 [t: $B40] {  # if_26
+          $B40: {  # true
             store %x_GLF_color, vec4<f32>(1.0f)
             ret
           }
         }
-        continue %b8
+        continue  # -> $B8
       }
-      %b8 = block {  # continuing
-        %x_444:bool = load %canwalk
-        %311:bool = eq %x_444, false
-        break_if %311 %b7
+      $B8: {  # continuing
+        %352:bool = load %canwalk
+        %x_444:bool = let %352
+        %354:bool = eq %x_444, false
+        break_if %354  # -> [t: exit_loop loop_2, f: $B7]
       }
     }
     store %x_GLF_color, vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f)
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b41 {
-  %b41 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B41: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %314:void = call %main_1
-    %315:vec4<f32> = load %x_GLF_color
-    %316:main_out = construct %315
-    ret %316
+    %357:void = call %main_1
+    %358:vec4<f32> = load %x_GLF_color
+    %359:main_out = construct %358
+    ret %359
+  }
+}
+%tint_mod_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B42: {
+    %362:bool = eq %rhs, 0i
+    %363:bool = eq %lhs, -2147483648i
+    %364:bool = eq %rhs, -1i
+    %365:bool = and %363, %364
+    %366:bool = or %362, %365
+    %367:i32 = select %rhs, 1i, %366
+    %368:i32 = let %367
+    %369:i32 = div %lhs, %368
+    %370:i32 = mul %369, %368
+    %371:i32 = sub %lhs, %370
+    ret %371
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B43: {
+    %373:i32 = convert %value
+    %374:bool = gte %value, -2147483648.0f
+    %375:i32 = select -2147483648i, %373, %374
+    %376:bool = lte %value, 2147483520.0f
+    %377:i32 = select 2147483647i, %375, %376
+    ret %377
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/2.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/2.wgsl.expected.ir.msl
index 8bc1ff7..ebdc5e4 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/2.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/2.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,15 +8,15 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %map:ptr<private, array<i32, 256>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %pos:ptr<function, vec2<f32>, read_write> = var
     %ipos:ptr<function, vec2<i32>, read_write> = var
     %i:ptr<function, i32, read_write> = var
@@ -26,52 +26,60 @@
     %directions:ptr<function, i32, read_write> = var
     %j:ptr<function, i32, read_write> = var
     %d:ptr<function, i32, read_write> = var
-    %x_59:vec4<f32> = load %gl_FragCoord
-    %16:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-    %x_62:vec2<f32> = load %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
-    store %pos, %21
-    %x_65:f32 = load_vector_element %pos, 0u
-    %x_69:f32 = load_vector_element %pos, 1u
-    %24:f32 = mul %x_65, 16.0f
-    %25:i32 = convert %24
-    %26:f32 = mul %x_69, 16.0f
-    %27:i32 = convert %26
-    %28:vec2<i32> = construct %25, %27
-    store %ipos, %28
+    %15:vec4<f32> = load %gl_FragCoord
+    %x_59:vec4<f32> = let %15
+    %17:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
+    %18:vec2<f32> = load %17
+    %x_62:vec2<f32> = let %18
+    %20:f32 = access %x_59, 0u
+    %21:f32 = access %x_59, 1u
+    %22:vec2<f32> = construct %20, %21
+    %23:vec2<f32> = div %22, %x_62
+    store %pos, %23
+    %24:f32 = load_vector_element %pos, 0u
+    %x_65:f32 = let %24
+    %26:f32 = load_vector_element %pos, 1u
+    %x_69:f32 = let %26
+    %28:f32 = mul %x_65, 16.0f
+    %29:i32 = call %tint_f32_to_i32, %28
+    %31:i32 = let %29
+    %32:f32 = mul %x_69, 16.0f
+    %33:i32 = call %tint_f32_to_i32, %32
+    %34:vec2<i32> = construct %31, %33
+    store %ipos, %34
     store %i, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_77:i32 = load %i
-        %30:bool = lt %x_77, 256i
-        if %30 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %35:i32 = load %i
+        %x_77:i32 = let %35
+        %37:bool = lt %x_77, 256i
+        if %37 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_80:i32 = load %i
-        %32:ptr<private, i32, read_write> = access %map, %x_80
-        store %32, 0i
-        continue %b4
+        %38:i32 = load %i
+        %x_80:i32 = let %38
+        %40:ptr<private, i32, read_write> = access %map, %x_80
+        store %40, 0i
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_82:i32 = load %i
-        %34:i32 = add %x_82, 1i
-        store %i, %34
-        next_iteration %b3
+      $B4: {  # continuing
+        %41:i32 = load %i
+        %x_82:i32 = let %41
+        %43:i32 = add %x_82, 1i
+        store %i, %43
+        next_iteration  # -> $B3
       }
     }
     store %p, vec2<i32>(0i)
     store %canwalk, true
     store %v, 0i
-    loop [b: %b7, c: %b8] {  # loop_2
-      %b7 = block {  # body
+    loop [b: $B7, c: $B8] {  # loop_2
+      $B7: {  # body
         %x_104:ptr<function, bool, read_write> = var
         %x_124:ptr<function, bool, read_write> = var
         %x_144:ptr<function, bool, read_write> = var
@@ -80,119 +88,148 @@
         %x_125_phi:ptr<function, bool, read_write> = var
         %x_145_phi:ptr<function, bool, read_write> = var
         %x_165_phi:ptr<function, bool, read_write> = var
-        %x_88:i32 = load %v
-        %44:i32 = add %x_88, 1i
-        store %v, %44
+        %52:i32 = load %v
+        %x_88:i32 = let %52
+        %54:i32 = add %x_88, 1i
+        store %v, %54
         store %directions, 0i
-        %x_91:i32 = load_vector_element %p, 0u
-        %x_92:bool = gt %x_91, 0i
+        %55:i32 = load_vector_element %p, 0u
+        %x_91:i32 = let %55
+        %57:bool = gt %x_91, 0i
+        %x_92:bool = let %57
         store %x_105_phi, %x_92
-        if %x_92 [t: %b9] {  # if_2
-          %b9 = block {  # true
-            %x_96:i32 = load_vector_element %p, 0u
-            %x_99:i32 = load_vector_element %p, 1u
-            %49:i32 = sub %x_96, 2i
-            %50:i32 = mul %x_99, 16i
-            %51:i32 = add %49, %50
-            %52:ptr<private, i32, read_write> = access %map, %51
-            %x_103:i32 = load %52
-            %54:bool = eq %x_103, 0i
-            store %x_104, %54
-            %55:bool = load %x_104
-            store %x_105_phi, %55
+        if %x_92 [t: $B9] {  # if_2
+          $B9: {  # true
+            %59:i32 = load_vector_element %p, 0u
+            %x_96:i32 = let %59
+            %61:i32 = load_vector_element %p, 1u
+            %x_99:i32 = let %61
+            %63:i32 = sub %x_96, 2i
+            %64:i32 = mul %x_99, 16i
+            %65:i32 = add %63, %64
+            %66:ptr<private, i32, read_write> = access %map, %65
+            %67:i32 = load %66
+            %x_103:i32 = let %67
+            %69:bool = eq %x_103, 0i
+            store %x_104, %69
+            %70:bool = load %x_104
+            store %x_105_phi, %70
             exit_if  # if_2
           }
         }
-        %x_105:bool = load %x_105_phi
-        if %x_105 [t: %b10] {  # if_3
-          %b10 = block {  # true
-            %x_108:i32 = load %directions
-            %58:i32 = add %x_108, 1i
-            store %directions, %58
+        %71:bool = load %x_105_phi
+        %x_105:bool = let %71
+        if %x_105 [t: $B10] {  # if_3
+          $B10: {  # true
+            %73:i32 = load %directions
+            %x_108:i32 = let %73
+            %75:i32 = add %x_108, 1i
+            store %directions, %75
             exit_if  # if_3
           }
         }
-        %x_111:i32 = load_vector_element %p, 1u
-        %x_112:bool = gt %x_111, 0i
+        %76:i32 = load_vector_element %p, 1u
+        %x_111:i32 = let %76
+        %78:bool = gt %x_111, 0i
+        %x_112:bool = let %78
         store %x_125_phi, %x_112
-        if %x_112 [t: %b11] {  # if_4
-          %b11 = block {  # true
-            %x_116:i32 = load_vector_element %p, 0u
-            %x_118:i32 = load_vector_element %p, 1u
-            %63:i32 = sub %x_118, 2i
-            %64:i32 = mul %63, 16i
-            %65:i32 = add %x_116, %64
-            %66:ptr<private, i32, read_write> = access %map, %65
-            %x_123:i32 = load %66
-            %68:bool = eq %x_123, 0i
-            store %x_124, %68
-            %69:bool = load %x_124
-            store %x_125_phi, %69
+        if %x_112 [t: $B11] {  # if_4
+          $B11: {  # true
+            %80:i32 = load_vector_element %p, 0u
+            %x_116:i32 = let %80
+            %82:i32 = load_vector_element %p, 1u
+            %x_118:i32 = let %82
+            %84:i32 = sub %x_118, 2i
+            %85:i32 = mul %84, 16i
+            %86:i32 = add %x_116, %85
+            %87:ptr<private, i32, read_write> = access %map, %86
+            %88:i32 = load %87
+            %x_123:i32 = let %88
+            %90:bool = eq %x_123, 0i
+            store %x_124, %90
+            %91:bool = load %x_124
+            store %x_125_phi, %91
             exit_if  # if_4
           }
         }
-        %x_125:bool = load %x_125_phi
-        if %x_125 [t: %b12] {  # if_5
-          %b12 = block {  # true
-            %x_128:i32 = load %directions
-            %72:i32 = add %x_128, 1i
-            store %directions, %72
+        %92:bool = load %x_125_phi
+        %x_125:bool = let %92
+        if %x_125 [t: $B12] {  # if_5
+          $B12: {  # true
+            %94:i32 = load %directions
+            %x_128:i32 = let %94
+            %96:i32 = add %x_128, 1i
+            store %directions, %96
             exit_if  # if_5
           }
         }
-        %x_131:i32 = load_vector_element %p, 0u
-        %x_132:bool = lt %x_131, 14i
+        %97:i32 = load_vector_element %p, 0u
+        %x_131:i32 = let %97
+        %99:bool = lt %x_131, 14i
+        %x_132:bool = let %99
         store %x_145_phi, %x_132
-        if %x_132 [t: %b13] {  # if_6
-          %b13 = block {  # true
-            %x_136:i32 = load_vector_element %p, 0u
-            %x_139:i32 = load_vector_element %p, 1u
-            %77:i32 = add %x_136, 2i
-            %78:i32 = mul %x_139, 16i
-            %79:i32 = add %77, %78
-            %80:ptr<private, i32, read_write> = access %map, %79
-            %x_143:i32 = load %80
-            %82:bool = eq %x_143, 0i
-            store %x_144, %82
-            %83:bool = load %x_144
-            store %x_145_phi, %83
+        if %x_132 [t: $B13] {  # if_6
+          $B13: {  # true
+            %101:i32 = load_vector_element %p, 0u
+            %x_136:i32 = let %101
+            %103:i32 = load_vector_element %p, 1u
+            %x_139:i32 = let %103
+            %105:i32 = add %x_136, 2i
+            %106:i32 = mul %x_139, 16i
+            %107:i32 = add %105, %106
+            %108:ptr<private, i32, read_write> = access %map, %107
+            %109:i32 = load %108
+            %x_143:i32 = let %109
+            %111:bool = eq %x_143, 0i
+            store %x_144, %111
+            %112:bool = load %x_144
+            store %x_145_phi, %112
             exit_if  # if_6
           }
         }
-        %x_145:bool = load %x_145_phi
-        if %x_145 [t: %b14] {  # if_7
-          %b14 = block {  # true
-            %x_148:i32 = load %directions
-            %86:i32 = add %x_148, 1i
-            store %directions, %86
+        %113:bool = load %x_145_phi
+        %x_145:bool = let %113
+        if %x_145 [t: $B14] {  # if_7
+          $B14: {  # true
+            %115:i32 = load %directions
+            %x_148:i32 = let %115
+            %117:i32 = add %x_148, 1i
+            store %directions, %117
             exit_if  # if_7
           }
         }
-        %x_151:i32 = load_vector_element %p, 1u
-        %x_152:bool = lt %x_151, 14i
+        %118:i32 = load_vector_element %p, 1u
+        %x_151:i32 = let %118
+        %120:bool = lt %x_151, 14i
+        %x_152:bool = let %120
         store %x_165_phi, %x_152
-        if %x_152 [t: %b15] {  # if_8
-          %b15 = block {  # true
-            %x_156:i32 = load_vector_element %p, 0u
-            %x_158:i32 = load_vector_element %p, 1u
-            %91:i32 = add %x_158, 2i
-            %92:i32 = mul %91, 16i
-            %93:i32 = add %x_156, %92
-            %94:ptr<private, i32, read_write> = access %map, %93
-            %x_163:i32 = load %94
-            %96:bool = eq %x_163, 0i
-            store %x_164, %96
-            %97:bool = load %x_164
-            store %x_165_phi, %97
+        if %x_152 [t: $B15] {  # if_8
+          $B15: {  # true
+            %122:i32 = load_vector_element %p, 0u
+            %x_156:i32 = let %122
+            %124:i32 = load_vector_element %p, 1u
+            %x_158:i32 = let %124
+            %126:i32 = add %x_158, 2i
+            %127:i32 = mul %126, 16i
+            %128:i32 = add %x_156, %127
+            %129:ptr<private, i32, read_write> = access %map, %128
+            %130:i32 = load %129
+            %x_163:i32 = let %130
+            %132:bool = eq %x_163, 0i
+            store %x_164, %132
+            %133:bool = load %x_164
+            store %x_165_phi, %133
             exit_if  # if_8
           }
         }
-        %x_165:bool = load %x_165_phi
-        if %x_165 [t: %b16] {  # if_9
-          %b16 = block {  # true
-            %x_168:i32 = load %directions
-            %100:i32 = add %x_168, 1i
-            store %directions, %100
+        %134:bool = load %x_165_phi
+        %x_165:bool = let %134
+        if %x_165 [t: $B16] {  # if_9
+          $B16: {  # true
+            %136:i32 = load %directions
+            %x_168:i32 = let %136
+            %138:i32 = add %x_168, 1i
+            store %directions, %138
             exit_if  # if_9
           }
         }
@@ -212,386 +249,497 @@
         %x_349_phi:ptr<function, bool, read_write> = var
         %x_388_phi:ptr<function, bool, read_write> = var
         %x_401_phi:ptr<function, bool, read_write> = var
-        %x_170:i32 = load %directions
-        %118:bool = eq %x_170, 0i
-        if %118 [t: %b17, f: %b18] {  # if_10
-          %b17 = block {  # true
+        %155:i32 = load %directions
+        %x_170:i32 = let %155
+        %157:bool = eq %x_170, 0i
+        if %157 [t: $B17, f: $B18] {  # if_10
+          $B17: {  # true
             store %canwalk, false
             store %i, 0i
-            loop [b: %b19, c: %b20] {  # loop_3
-              %b19 = block {  # body
-                %x_179:i32 = load %i
-                %120:bool = lt %x_179, 8i
-                if %120 [t: %b21, f: %b22] {  # if_11
-                  %b21 = block {  # true
+            loop [b: $B19, c: $B20] {  # loop_3
+              $B19: {  # body
+                %158:i32 = load %i
+                %x_179:i32 = let %158
+                %160:bool = lt %x_179, 8i
+                if %160 [t: $B21, f: $B22] {  # if_11
+                  $B21: {  # true
                     exit_if  # if_11
                   }
-                  %b22 = block {  # false
+                  $B22: {  # false
                     exit_loop  # loop_3
                   }
                 }
                 store %j, 0i
-                loop [b: %b23, c: %b24] {  # loop_4
-                  %b23 = block {  # body
-                    %x_186:i32 = load %j
-                    %122:bool = lt %x_186, 8i
-                    if %122 [t: %b25, f: %b26] {  # if_12
-                      %b25 = block {  # true
+                loop [b: $B23, c: $B24] {  # loop_4
+                  $B23: {  # body
+                    %161:i32 = load %j
+                    %x_186:i32 = let %161
+                    %163:bool = lt %x_186, 8i
+                    if %163 [t: $B25, f: $B26] {  # if_12
+                      $B25: {  # true
                         exit_if  # if_12
                       }
-                      %b26 = block {  # false
+                      $B26: {  # false
                         exit_loop  # loop_4
                       }
                     }
-                    %x_189:i32 = load %j
-                    %x_191:i32 = load %i
-                    %125:i32 = mul %x_189, 2i
-                    %126:i32 = mul %x_191, 2i
-                    %127:i32 = mul %126, 16i
-                    %128:i32 = add %125, %127
-                    %129:ptr<private, i32, read_write> = access %map, %128
-                    %x_196:i32 = load %129
-                    %131:bool = eq %x_196, 0i
-                    if %131 [t: %b27] {  # if_13
-                      %b27 = block {  # true
-                        %x_200:i32 = load %j
-                        %133:i32 = mul %x_200, 2i
-                        store_vector_element %p, 0u, %133
-                        %x_203:i32 = load %i
-                        %135:i32 = mul %x_203, 2i
-                        store_vector_element %p, 1u, %135
+                    %164:i32 = load %j
+                    %x_189:i32 = let %164
+                    %166:i32 = load %i
+                    %x_191:i32 = let %166
+                    %168:i32 = mul %x_189, 2i
+                    %169:i32 = mul %x_191, 2i
+                    %170:i32 = mul %169, 16i
+                    %171:i32 = add %168, %170
+                    %172:ptr<private, i32, read_write> = access %map, %171
+                    %173:i32 = load %172
+                    %x_196:i32 = let %173
+                    %175:bool = eq %x_196, 0i
+                    if %175 [t: $B27] {  # if_13
+                      $B27: {  # true
+                        %176:i32 = load %j
+                        %x_200:i32 = let %176
+                        %178:i32 = mul %x_200, 2i
+                        store_vector_element %p, 0u, %178
+                        %179:i32 = load %i
+                        %x_203:i32 = let %179
+                        %181:i32 = mul %x_203, 2i
+                        store_vector_element %p, 1u, %181
                         store %canwalk, true
                         exit_if  # if_13
                       }
                     }
-                    continue %b24
+                    continue  # -> $B24
                   }
-                  %b24 = block {  # continuing
-                    %x_206:i32 = load %j
-                    %137:i32 = add %x_206, 1i
-                    store %j, %137
-                    next_iteration %b23
+                  $B24: {  # continuing
+                    %182:i32 = load %j
+                    %x_206:i32 = let %182
+                    %184:i32 = add %x_206, 1i
+                    store %j, %184
+                    next_iteration  # -> $B23
                   }
                 }
-                continue %b20
+                continue  # -> $B20
               }
-              %b20 = block {  # continuing
-                %x_208:i32 = load %i
-                %139:i32 = add %x_208, 1i
-                store %i, %139
-                next_iteration %b19
+              $B20: {  # continuing
+                %185:i32 = load %i
+                %x_208:i32 = let %185
+                %187:i32 = add %x_208, 1i
+                store %i, %187
+                next_iteration  # -> $B19
               }
             }
-            %x_211:i32 = load_vector_element %p, 0u
-            %x_213:i32 = load_vector_element %p, 1u
-            %142:i32 = mul %x_213, 16i
-            %143:i32 = add %x_211, %142
-            %144:ptr<private, i32, read_write> = access %map, %143
-            store %144, 1i
+            %188:i32 = load_vector_element %p, 0u
+            %x_211:i32 = let %188
+            %190:i32 = load_vector_element %p, 1u
+            %x_213:i32 = let %190
+            %192:i32 = mul %x_213, 16i
+            %193:i32 = add %x_211, %192
+            %194:ptr<private, i32, read_write> = access %map, %193
+            store %194, 1i
             exit_if  # if_10
           }
-          %b18 = block {  # false
-            %x_217:i32 = load %v
-            %x_218:i32 = load %directions
-            %147:i32 = mod %x_217, %x_218
-            store %d, %147
-            %x_220:i32 = load %directions
-            %x_221:i32 = load %v
-            %150:i32 = add %x_221, %x_220
-            store %v, %150
-            %x_223:i32 = load %d
-            %x_224:bool = gte %x_223, 0i
+          $B18: {  # false
+            %195:i32 = load %v
+            %x_217:i32 = let %195
+            %197:i32 = load %directions
+            %x_218:i32 = let %197
+            %199:i32 = call %tint_mod_i32, %x_217, %x_218
+            store %d, %199
+            %201:i32 = load %directions
+            %x_220:i32 = let %201
+            %203:i32 = load %v
+            %x_221:i32 = let %203
+            %205:i32 = add %x_221, %x_220
+            store %v, %205
+            %206:i32 = load %d
+            %x_223:i32 = let %206
+            %208:bool = gte %x_223, 0i
+            %x_224:bool = let %208
             store %x_230_phi, %x_224
-            if %x_224 [t: %b28] {  # if_14
-              %b28 = block {  # true
-                %x_228:i32 = load_vector_element %p, 0u
-                %154:bool = gt %x_228, 0i
-                store %x_229, %154
-                %155:bool = load %x_229
-                store %x_230_phi, %155
+            if %x_224 [t: $B28] {  # if_14
+              $B28: {  # true
+                %210:i32 = load_vector_element %p, 0u
+                %x_228:i32 = let %210
+                %212:bool = gt %x_228, 0i
+                store %x_229, %212
+                %213:bool = load %x_229
+                store %x_230_phi, %213
                 exit_if  # if_14
               }
             }
-            %x_230:bool = load %x_230_phi
+            %214:bool = load %x_230_phi
+            %x_230:bool = let %214
             store %x_243_phi, %x_230
-            if %x_230 [t: %b29] {  # if_15
-              %b29 = block {  # true
-                %x_234:i32 = load_vector_element %p, 0u
-                %x_237:i32 = load_vector_element %p, 1u
-                %159:i32 = sub %x_234, 2i
-                %160:i32 = mul %x_237, 16i
-                %161:i32 = add %159, %160
-                %162:ptr<private, i32, read_write> = access %map, %161
-                %x_241:i32 = load %162
-                %164:bool = eq %x_241, 0i
-                store %x_242, %164
-                %165:bool = load %x_242
-                store %x_243_phi, %165
+            if %x_230 [t: $B29] {  # if_15
+              $B29: {  # true
+                %216:i32 = load_vector_element %p, 0u
+                %x_234:i32 = let %216
+                %218:i32 = load_vector_element %p, 1u
+                %x_237:i32 = let %218
+                %220:i32 = sub %x_234, 2i
+                %221:i32 = mul %x_237, 16i
+                %222:i32 = add %220, %221
+                %223:ptr<private, i32, read_write> = access %map, %222
+                %224:i32 = load %223
+                %x_241:i32 = let %224
+                %226:bool = eq %x_241, 0i
+                store %x_242, %226
+                %227:bool = load %x_242
+                store %x_243_phi, %227
                 exit_if  # if_15
               }
             }
-            %x_243:bool = load %x_243_phi
-            if %x_243 [t: %b30] {  # if_16
-              %b30 = block {  # true
-                %x_246:i32 = load %d
-                %168:i32 = sub %x_246, 1i
-                store %d, %168
-                %x_249:i32 = load_vector_element %p, 0u
-                %x_251:i32 = load_vector_element %p, 1u
-                %171:i32 = mul %x_251, 16i
-                %172:i32 = add %x_249, %171
-                %173:ptr<private, i32, read_write> = access %map, %172
-                store %173, 1i
-                %x_256:i32 = load_vector_element %p, 0u
-                %x_259:i32 = load_vector_element %p, 1u
-                %176:i32 = sub %x_256, 1i
-                %177:i32 = mul %x_259, 16i
-                %178:i32 = add %176, %177
-                %179:ptr<private, i32, read_write> = access %map, %178
-                store %179, 1i
-                %x_264:i32 = load_vector_element %p, 0u
-                %x_267:i32 = load_vector_element %p, 1u
-                %182:i32 = sub %x_264, 2i
-                %183:i32 = mul %x_267, 16i
-                %184:i32 = add %182, %183
-                %185:ptr<private, i32, read_write> = access %map, %184
-                store %185, 1i
-                %x_272:i32 = load_vector_element %p, 0u
-                %187:i32 = sub %x_272, 2i
-                store_vector_element %p, 0u, %187
-                exit_if  # if_16
-              }
-            }
-            %x_275:i32 = load %d
-            %x_276:bool = gte %x_275, 0i
-            store %x_282_phi, %x_276
-            if %x_276 [t: %b31] {  # if_17
-              %b31 = block {  # true
-                %x_280:i32 = load_vector_element %p, 1u
-                %191:bool = gt %x_280, 0i
-                store %x_281, %191
-                %192:bool = load %x_281
-                store %x_282_phi, %192
-                exit_if  # if_17
-              }
-            }
-            %x_282:bool = load %x_282_phi
-            store %x_296_phi, %x_282
-            if %x_282 [t: %b32] {  # if_18
-              %b32 = block {  # true
-                %x_286:i32 = load_vector_element %p, 0u
-                %x_288:i32 = load_vector_element %p, 1u
-                %x_291:array<i32, 256> = load %map
-                store %map, array<i32, 256>(0i)
-                store %map, %x_291
-                %197:i32 = sub %x_288, 2i
-                %198:i32 = mul %197, 16i
-                %199:i32 = add %x_286, %198
-                %200:ptr<private, i32, read_write> = access %map, %199
-                %x_294:i32 = load %200
-                %202:bool = eq %x_294, 0i
-                store %x_295, %202
-                %203:bool = load %x_295
-                store %x_296_phi, %203
-                exit_if  # if_18
-              }
-            }
-            %x_296:bool = load %x_296_phi
-            if %x_296 [t: %b33] {  # if_19
-              %b33 = block {  # true
-                %x_299:i32 = load %d
-                %206:i32 = sub %x_299, 1i
-                store %d, %206
-                %x_302:i32 = load_vector_element %p, 0u
-                %x_304:i32 = load_vector_element %p, 1u
-                %209:i32 = mul %x_304, 16i
-                %210:i32 = add %x_302, %209
-                %211:ptr<private, i32, read_write> = access %map, %210
-                store %211, 1i
-                %x_309:i32 = load_vector_element %p, 0u
-                %x_311:i32 = load_vector_element %p, 1u
-                %214:i32 = sub %x_311, 1i
-                %215:i32 = mul %214, 16i
-                %216:i32 = add %x_309, %215
-                %217:ptr<private, i32, read_write> = access %map, %216
-                store %217, 1i
-                %x_317:i32 = load_vector_element %p, 0u
-                %x_319:i32 = load_vector_element %p, 1u
-                %x_321:array<i32, 256> = load %map
-                store %map, array<i32, 256>(0i)
-                store %map, %x_321
-                %221:i32 = sub %x_319, 2i
-                %222:i32 = mul %221, 16i
-                %223:i32 = add %x_317, %222
-                %224:ptr<private, i32, read_write> = access %map, %223
-                store %224, 1i
-                %x_326:i32 = load_vector_element %p, 1u
-                %226:i32 = sub %x_326, 2i
-                store_vector_element %p, 1u, %226
-                exit_if  # if_19
-              }
-            }
-            %x_329:i32 = load %d
-            %x_330:bool = gte %x_329, 0i
-            store %x_336_phi, %x_330
-            if %x_330 [t: %b34] {  # if_20
-              %b34 = block {  # true
-                %x_334:i32 = load_vector_element %p, 0u
-                %230:bool = lt %x_334, 14i
-                store %x_335, %230
-                %231:bool = load %x_335
-                store %x_336_phi, %231
-                exit_if  # if_20
-              }
-            }
-            %x_336:bool = load %x_336_phi
-            store %x_349_phi, %x_336
-            if %x_336 [t: %b35] {  # if_21
-              %b35 = block {  # true
-                %x_340:i32 = load_vector_element %p, 0u
-                %x_343:i32 = load_vector_element %p, 1u
-                %235:i32 = add %x_340, 2i
-                %236:i32 = mul %x_343, 16i
-                %237:i32 = add %235, %236
-                %238:ptr<private, i32, read_write> = access %map, %237
-                %x_347:i32 = load %238
-                %240:bool = eq %x_347, 0i
-                store %x_348, %240
-                %241:bool = load %x_348
-                store %x_349_phi, %241
-                exit_if  # if_21
-              }
-            }
-            %x_349:bool = load %x_349_phi
-            if %x_349 [t: %b36] {  # if_22
-              %b36 = block {  # true
-                %x_352:i32 = load %d
-                %244:i32 = sub %x_352, 1i
-                store %d, %244
-                %x_355:i32 = load_vector_element %p, 0u
-                %x_357:i32 = load_vector_element %p, 1u
-                %247:i32 = mul %x_357, 16i
-                %248:i32 = add %x_355, %247
-                %249:ptr<private, i32, read_write> = access %map, %248
-                store %249, 1i
-                %x_362:i32 = load_vector_element %p, 0u
-                %x_365:i32 = load_vector_element %p, 1u
-                %252:i32 = add %x_362, 1i
-                %253:i32 = mul %x_365, 16i
+            %228:bool = load %x_243_phi
+            %x_243:bool = let %228
+            if %x_243 [t: $B30] {  # if_16
+              $B30: {  # true
+                %230:i32 = load %d
+                %x_246:i32 = let %230
+                %232:i32 = sub %x_246, 1i
+                store %d, %232
+                %233:i32 = load_vector_element %p, 0u
+                %x_249:i32 = let %233
+                %235:i32 = load_vector_element %p, 1u
+                %x_251:i32 = let %235
+                %237:i32 = mul %x_251, 16i
+                %238:i32 = add %x_249, %237
+                %239:ptr<private, i32, read_write> = access %map, %238
+                store %239, 1i
+                %240:i32 = load_vector_element %p, 0u
+                %x_256:i32 = let %240
+                %242:i32 = load_vector_element %p, 1u
+                %x_259:i32 = let %242
+                %244:i32 = sub %x_256, 1i
+                %245:i32 = mul %x_259, 16i
+                %246:i32 = add %244, %245
+                %247:ptr<private, i32, read_write> = access %map, %246
+                store %247, 1i
+                %248:i32 = load_vector_element %p, 0u
+                %x_264:i32 = let %248
+                %250:i32 = load_vector_element %p, 1u
+                %x_267:i32 = let %250
+                %252:i32 = sub %x_264, 2i
+                %253:i32 = mul %x_267, 16i
                 %254:i32 = add %252, %253
                 %255:ptr<private, i32, read_write> = access %map, %254
                 store %255, 1i
-                %x_370:i32 = load_vector_element %p, 0u
-                %x_373:i32 = load_vector_element %p, 1u
-                %258:i32 = add %x_370, 2i
-                %259:i32 = mul %x_373, 16i
-                %260:i32 = add %258, %259
-                %261:ptr<private, i32, read_write> = access %map, %260
-                store %261, 1i
-                %x_378:i32 = load_vector_element %p, 0u
-                %263:i32 = add %x_378, 2i
-                store_vector_element %p, 0u, %263
+                %256:i32 = load_vector_element %p, 0u
+                %x_272:i32 = let %256
+                %258:i32 = sub %x_272, 2i
+                store_vector_element %p, 0u, %258
+                exit_if  # if_16
+              }
+            }
+            %259:i32 = load %d
+            %x_275:i32 = let %259
+            %261:bool = gte %x_275, 0i
+            %x_276:bool = let %261
+            store %x_282_phi, %x_276
+            if %x_276 [t: $B31] {  # if_17
+              $B31: {  # true
+                %263:i32 = load_vector_element %p, 1u
+                %x_280:i32 = let %263
+                %265:bool = gt %x_280, 0i
+                store %x_281, %265
+                %266:bool = load %x_281
+                store %x_282_phi, %266
+                exit_if  # if_17
+              }
+            }
+            %267:bool = load %x_282_phi
+            %x_282:bool = let %267
+            store %x_296_phi, %x_282
+            if %x_282 [t: $B32] {  # if_18
+              $B32: {  # true
+                %269:i32 = load_vector_element %p, 0u
+                %x_286:i32 = let %269
+                %271:i32 = load_vector_element %p, 1u
+                %x_288:i32 = let %271
+                %273:array<i32, 256> = load %map
+                %x_291:array<i32, 256> = let %273
+                store %map, array<i32, 256>(0i)
+                store %map, %x_291
+                %275:i32 = sub %x_288, 2i
+                %276:i32 = mul %275, 16i
+                %277:i32 = add %x_286, %276
+                %278:ptr<private, i32, read_write> = access %map, %277
+                %279:i32 = load %278
+                %x_294:i32 = let %279
+                %281:bool = eq %x_294, 0i
+                store %x_295, %281
+                %282:bool = load %x_295
+                store %x_296_phi, %282
+                exit_if  # if_18
+              }
+            }
+            %283:bool = load %x_296_phi
+            %x_296:bool = let %283
+            if %x_296 [t: $B33] {  # if_19
+              $B33: {  # true
+                %285:i32 = load %d
+                %x_299:i32 = let %285
+                %287:i32 = sub %x_299, 1i
+                store %d, %287
+                %288:i32 = load_vector_element %p, 0u
+                %x_302:i32 = let %288
+                %290:i32 = load_vector_element %p, 1u
+                %x_304:i32 = let %290
+                %292:i32 = mul %x_304, 16i
+                %293:i32 = add %x_302, %292
+                %294:ptr<private, i32, read_write> = access %map, %293
+                store %294, 1i
+                %295:i32 = load_vector_element %p, 0u
+                %x_309:i32 = let %295
+                %297:i32 = load_vector_element %p, 1u
+                %x_311:i32 = let %297
+                %299:i32 = sub %x_311, 1i
+                %300:i32 = mul %299, 16i
+                %301:i32 = add %x_309, %300
+                %302:ptr<private, i32, read_write> = access %map, %301
+                store %302, 1i
+                %303:i32 = load_vector_element %p, 0u
+                %x_317:i32 = let %303
+                %305:i32 = load_vector_element %p, 1u
+                %x_319:i32 = let %305
+                %307:array<i32, 256> = load %map
+                %x_321:array<i32, 256> = let %307
+                store %map, array<i32, 256>(0i)
+                store %map, %x_321
+                %309:i32 = sub %x_319, 2i
+                %310:i32 = mul %309, 16i
+                %311:i32 = add %x_317, %310
+                %312:ptr<private, i32, read_write> = access %map, %311
+                store %312, 1i
+                %313:i32 = load_vector_element %p, 1u
+                %x_326:i32 = let %313
+                %315:i32 = sub %x_326, 2i
+                store_vector_element %p, 1u, %315
+                exit_if  # if_19
+              }
+            }
+            %316:i32 = load %d
+            %x_329:i32 = let %316
+            %318:bool = gte %x_329, 0i
+            %x_330:bool = let %318
+            store %x_336_phi, %x_330
+            if %x_330 [t: $B34] {  # if_20
+              $B34: {  # true
+                %320:i32 = load_vector_element %p, 0u
+                %x_334:i32 = let %320
+                %322:bool = lt %x_334, 14i
+                store %x_335, %322
+                %323:bool = load %x_335
+                store %x_336_phi, %323
+                exit_if  # if_20
+              }
+            }
+            %324:bool = load %x_336_phi
+            %x_336:bool = let %324
+            store %x_349_phi, %x_336
+            if %x_336 [t: $B35] {  # if_21
+              $B35: {  # true
+                %326:i32 = load_vector_element %p, 0u
+                %x_340:i32 = let %326
+                %328:i32 = load_vector_element %p, 1u
+                %x_343:i32 = let %328
+                %330:i32 = add %x_340, 2i
+                %331:i32 = mul %x_343, 16i
+                %332:i32 = add %330, %331
+                %333:ptr<private, i32, read_write> = access %map, %332
+                %334:i32 = load %333
+                %x_347:i32 = let %334
+                %336:bool = eq %x_347, 0i
+                store %x_348, %336
+                %337:bool = load %x_348
+                store %x_349_phi, %337
+                exit_if  # if_21
+              }
+            }
+            %338:bool = load %x_349_phi
+            %x_349:bool = let %338
+            if %x_349 [t: $B36] {  # if_22
+              $B36: {  # true
+                %340:i32 = load %d
+                %x_352:i32 = let %340
+                %342:i32 = sub %x_352, 1i
+                store %d, %342
+                %343:i32 = load_vector_element %p, 0u
+                %x_355:i32 = let %343
+                %345:i32 = load_vector_element %p, 1u
+                %x_357:i32 = let %345
+                %347:i32 = mul %x_357, 16i
+                %348:i32 = add %x_355, %347
+                %349:ptr<private, i32, read_write> = access %map, %348
+                store %349, 1i
+                %350:i32 = load_vector_element %p, 0u
+                %x_362:i32 = let %350
+                %352:i32 = load_vector_element %p, 1u
+                %x_365:i32 = let %352
+                %354:i32 = add %x_362, 1i
+                %355:i32 = mul %x_365, 16i
+                %356:i32 = add %354, %355
+                %357:ptr<private, i32, read_write> = access %map, %356
+                store %357, 1i
+                %358:i32 = load_vector_element %p, 0u
+                %x_370:i32 = let %358
+                %360:i32 = load_vector_element %p, 1u
+                %x_373:i32 = let %360
+                %362:i32 = add %x_370, 2i
+                %363:i32 = mul %x_373, 16i
+                %364:i32 = add %362, %363
+                %365:ptr<private, i32, read_write> = access %map, %364
+                store %365, 1i
+                %366:i32 = load_vector_element %p, 0u
+                %x_378:i32 = let %366
+                %368:i32 = add %x_378, 2i
+                store_vector_element %p, 0u, %368
                 exit_if  # if_22
               }
             }
-            %x_381:i32 = load %d
-            %x_382:bool = gte %x_381, 0i
+            %369:i32 = load %d
+            %x_381:i32 = let %369
+            %371:bool = gte %x_381, 0i
+            %x_382:bool = let %371
             store %x_388_phi, %x_382
-            if %x_382 [t: %b37] {  # if_23
-              %b37 = block {  # true
-                %x_386:i32 = load_vector_element %p, 1u
-                %267:bool = lt %x_386, 14i
-                store %x_387, %267
-                %268:bool = load %x_387
-                store %x_388_phi, %268
+            if %x_382 [t: $B37] {  # if_23
+              $B37: {  # true
+                %373:i32 = load_vector_element %p, 1u
+                %x_386:i32 = let %373
+                %375:bool = lt %x_386, 14i
+                store %x_387, %375
+                %376:bool = load %x_387
+                store %x_388_phi, %376
                 exit_if  # if_23
               }
             }
-            %x_388:bool = load %x_388_phi
+            %377:bool = load %x_388_phi
+            %x_388:bool = let %377
             store %x_401_phi, %x_388
-            if %x_388 [t: %b38] {  # if_24
-              %b38 = block {  # true
-                %x_392:i32 = load_vector_element %p, 0u
-                %x_394:i32 = load_vector_element %p, 1u
-                %272:i32 = add %x_394, 2i
-                %273:i32 = mul %272, 16i
-                %274:i32 = add %x_392, %273
-                %275:ptr<private, i32, read_write> = access %map, %274
-                %x_399:i32 = load %275
-                %277:bool = eq %x_399, 0i
-                store %x_400, %277
-                %278:bool = load %x_400
-                store %x_401_phi, %278
+            if %x_388 [t: $B38] {  # if_24
+              $B38: {  # true
+                %379:i32 = load_vector_element %p, 0u
+                %x_392:i32 = let %379
+                %381:i32 = load_vector_element %p, 1u
+                %x_394:i32 = let %381
+                %383:i32 = add %x_394, 2i
+                %384:i32 = mul %383, 16i
+                %385:i32 = add %x_392, %384
+                %386:ptr<private, i32, read_write> = access %map, %385
+                %387:i32 = load %386
+                %x_399:i32 = let %387
+                %389:bool = eq %x_399, 0i
+                store %x_400, %389
+                %390:bool = load %x_400
+                store %x_401_phi, %390
                 exit_if  # if_24
               }
             }
-            %x_401:bool = load %x_401_phi
-            if %x_401 [t: %b39] {  # if_25
-              %b39 = block {  # true
-                %x_404:i32 = load %d
-                %281:i32 = sub %x_404, 1i
-                store %d, %281
-                %x_407:i32 = load_vector_element %p, 0u
-                %x_409:i32 = load_vector_element %p, 1u
-                %284:i32 = mul %x_409, 16i
-                %285:i32 = add %x_407, %284
-                %286:ptr<private, i32, read_write> = access %map, %285
-                store %286, 1i
-                %x_414:i32 = load_vector_element %p, 0u
-                %x_416:i32 = load_vector_element %p, 1u
-                %289:i32 = add %x_416, 1i
-                %290:i32 = mul %289, 16i
-                %291:i32 = add %x_414, %290
-                %292:ptr<private, i32, read_write> = access %map, %291
-                store %292, 1i
-                %x_422:i32 = load_vector_element %p, 0u
-                %x_424:i32 = load_vector_element %p, 1u
-                %295:i32 = add %x_424, 2i
-                %296:i32 = mul %295, 16i
-                %297:i32 = add %x_422, %296
-                %298:ptr<private, i32, read_write> = access %map, %297
-                store %298, 1i
-                %x_430:i32 = load_vector_element %p, 1u
-                %300:i32 = add %x_430, 2i
-                store_vector_element %p, 1u, %300
+            %391:bool = load %x_401_phi
+            %x_401:bool = let %391
+            if %x_401 [t: $B39] {  # if_25
+              $B39: {  # true
+                %393:i32 = load %d
+                %x_404:i32 = let %393
+                %395:i32 = sub %x_404, 1i
+                store %d, %395
+                %396:i32 = load_vector_element %p, 0u
+                %x_407:i32 = let %396
+                %398:i32 = load_vector_element %p, 1u
+                %x_409:i32 = let %398
+                %400:i32 = mul %x_409, 16i
+                %401:i32 = add %x_407, %400
+                %402:ptr<private, i32, read_write> = access %map, %401
+                store %402, 1i
+                %403:i32 = load_vector_element %p, 0u
+                %x_414:i32 = let %403
+                %405:i32 = load_vector_element %p, 1u
+                %x_416:i32 = let %405
+                %407:i32 = add %x_416, 1i
+                %408:i32 = mul %407, 16i
+                %409:i32 = add %x_414, %408
+                %410:ptr<private, i32, read_write> = access %map, %409
+                store %410, 1i
+                %411:i32 = load_vector_element %p, 0u
+                %x_422:i32 = let %411
+                %413:i32 = load_vector_element %p, 1u
+                %x_424:i32 = let %413
+                %415:i32 = add %x_424, 2i
+                %416:i32 = mul %415, 16i
+                %417:i32 = add %x_422, %416
+                %418:ptr<private, i32, read_write> = access %map, %417
+                store %418, 1i
+                %419:i32 = load_vector_element %p, 1u
+                %x_430:i32 = let %419
+                %421:i32 = add %x_430, 2i
+                store_vector_element %p, 1u, %421
                 exit_if  # if_25
               }
             }
             exit_if  # if_10
           }
         }
-        %x_434:i32 = load_vector_element %ipos, 1u
-        %x_437:i32 = load_vector_element %ipos, 0u
-        %303:i32 = mul %x_434, 16i
-        %304:i32 = add %303, %x_437
-        %305:ptr<private, i32, read_write> = access %map, %304
-        %x_440:i32 = load %305
-        %307:bool = eq %x_440, 1i
-        if %307 [t: %b40] {  # if_26
-          %b40 = block {  # true
+        %422:i32 = load_vector_element %ipos, 1u
+        %x_434:i32 = let %422
+        %424:i32 = load_vector_element %ipos, 0u
+        %x_437:i32 = let %424
+        %426:i32 = mul %x_434, 16i
+        %427:i32 = add %426, %x_437
+        %428:ptr<private, i32, read_write> = access %map, %427
+        %429:i32 = load %428
+        %x_440:i32 = let %429
+        %431:bool = eq %x_440, 1i
+        if %431 [t: $B40] {  # if_26
+          $B40: {  # true
             store %x_GLF_color, vec4<f32>(1.0f)
             ret
           }
         }
-        continue %b8
+        continue  # -> $B8
       }
-      %b8 = block {  # continuing
-        %x_444:bool = load %canwalk
-        %309:bool = eq %x_444, false
-        break_if %309 %b7
+      $B8: {  # continuing
+        %432:bool = load %canwalk
+        %x_444:bool = let %432
+        %434:bool = eq %x_444, false
+        break_if %434  # -> [t: exit_loop loop_2, f: $B7]
       }
     }
     store %x_GLF_color, vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f)
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b41 {
-  %b41 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B41: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %312:void = call %main_1
-    %313:vec4<f32> = load %x_GLF_color
-    %314:main_out = construct %313
-    ret %314
+    %437:void = call %main_1
+    %438:vec4<f32> = load %x_GLF_color
+    %439:main_out = construct %438
+    ret %439
+  }
+}
+%tint_mod_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B42: {
+    %442:bool = eq %rhs, 0i
+    %443:bool = eq %lhs, -2147483648i
+    %444:bool = eq %rhs, -1i
+    %445:bool = and %443, %444
+    %446:bool = or %442, %445
+    %447:i32 = select %rhs, 1i, %446
+    %448:i32 = let %447
+    %449:i32 = div %lhs, %448
+    %450:i32 = mul %449, %448
+    %451:i32 = sub %lhs, %450
+    ret %451
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B43: {
+    %453:i32 = convert %value
+    %454:bool = gte %value, -2147483648.0f
+    %455:i32 = select -2147483648i, %453, %454
+    %456:bool = lte %value, 2147483520.0f
+    %457:i32 = select 2147483647i, %455, %456
+    ret %457
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/1.spvasm.expected.ir.msl
index 1754b25..6c8a36e 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/1.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,14 +8,15 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_8:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %temp:ptr<function, array<i32, 10>, read_write> = var
     %data:ptr<function, array<i32, 10>, read_write> = var
     %x_63:ptr<function, i32, read_write> = var
@@ -24,12 +25,12 @@
     %x_190:ptr<function, f32, read_write> = var
     %x_262:ptr<function, f32, read_write> = var
     %x_263:ptr<function, f32, read_write> = var
-    %13:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
-    %14:f32 = load_vector_element %13, 0u
-    %15:i32 = convert %14
-    store %x_63, %15
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    %14:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
+    %15:f32 = load_vector_element %14, 0u
+    %16:i32 = call %tint_f32_to_i32, %15
+    store %x_63, %16
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %x_100:ptr<function, i32, read_write> = var
         %x_98:ptr<function, i32, read_write> = var
         %x_96:ptr<function, i32, read_write> = var
@@ -41,584 +42,609 @@
         %x_84:ptr<function, i32, read_write> = var
         %x_82:ptr<function, i32, read_write> = var
         %x_64:ptr<function, i32, read_write> = var
-        %x_68:array<i32, 10> = load %data
+        %29:array<i32, 10> = load %data
+        %x_68:array<i32, 10> = let %29
         store %data, array<i32, 10>(0i)
         store %data, %x_68
-        %28:i32 = load %x_63
-        %29:i32 = add %28, 1i
-        store %x_64, %29
-        %30:i32 = load %x_63
-        switch %30 [c: (9i, %b5), c: (8i, %b6), c: (7i, %b7), c: (6i, %b8), c: (5i, %b9), c: (4i, %b10), c: (3i, %b11), c: (2i, %b12), c: (1i, %b13), c: (0i, %b14), c: (default, %b15)] {  # switch_1
-          %b5 = block {  # case
-            %31:i32 = load %x_63
-            %32:ptr<function, i32, read_write> = access %data, %31
-            store %32, -5i
-            %33:i32 = load %x_63
-            %34:i32 = add %33, 1i
-            store %x_100, %34
-            %35:i32 = load %x_100
-            store %x_64, %35
-            exit_switch  # switch_1
-          }
-          %b6 = block {  # case
+        %31:i32 = load %x_63
+        %32:i32 = add %31, 1i
+        store %x_64, %32
+        %33:i32 = load %x_63
+        switch %33 [c: (9i, $B5), c: (8i, $B6), c: (7i, $B7), c: (6i, $B8), c: (5i, $B9), c: (4i, $B10), c: (3i, $B11), c: (2i, $B12), c: (1i, $B13), c: (0i, $B14), c: (default, $B15)] {  # switch_1
+          $B5: {  # case
+            %34:i32 = load %x_63
+            %35:ptr<function, i32, read_write> = access %data, %34
+            store %35, -5i
             %36:i32 = load %x_63
-            %37:ptr<function, i32, read_write> = access %data, %36
-            store %37, -4i
-            %38:i32 = load %x_63
-            %39:i32 = add %38, 1i
-            store %x_98, %39
-            %40:i32 = load %x_98
-            store %x_64, %40
+            %37:i32 = add %36, 1i
+            store %x_100, %37
+            %38:i32 = load %x_100
+            store %x_64, %38
             exit_switch  # switch_1
           }
-          %b7 = block {  # case
+          $B6: {  # case
+            %39:i32 = load %x_63
+            %40:ptr<function, i32, read_write> = access %data, %39
+            store %40, -4i
             %41:i32 = load %x_63
-            %42:ptr<function, i32, read_write> = access %data, %41
-            store %42, -3i
-            %43:i32 = load %x_63
-            %44:i32 = add %43, 1i
-            store %x_96, %44
-            %45:i32 = load %x_96
-            store %x_64, %45
+            %42:i32 = add %41, 1i
+            store %x_98, %42
+            %43:i32 = load %x_98
+            store %x_64, %43
             exit_switch  # switch_1
           }
-          %b8 = block {  # case
+          $B7: {  # case
+            %44:i32 = load %x_63
+            %45:ptr<function, i32, read_write> = access %data, %44
+            store %45, -3i
             %46:i32 = load %x_63
-            %47:ptr<function, i32, read_write> = access %data, %46
-            store %47, -2i
-            %48:i32 = load %x_63
-            %49:i32 = add %48, 1i
-            store %x_94, %49
-            %50:i32 = load %x_94
-            store %x_64, %50
+            %47:i32 = add %46, 1i
+            store %x_96, %47
+            %48:i32 = load %x_96
+            store %x_64, %48
             exit_switch  # switch_1
           }
-          %b9 = block {  # case
+          $B8: {  # case
+            %49:i32 = load %x_63
+            %50:ptr<function, i32, read_write> = access %data, %49
+            store %50, -2i
             %51:i32 = load %x_63
-            %52:ptr<function, i32, read_write> = access %data, %51
-            store %52, -1i
-            %53:i32 = load %x_63
-            %54:i32 = add %53, 1i
-            store %x_92, %54
-            %55:i32 = load %x_92
-            store %x_64, %55
+            %52:i32 = add %51, 1i
+            store %x_94, %52
+            %53:i32 = load %x_94
+            store %x_64, %53
             exit_switch  # switch_1
           }
-          %b10 = block {  # case
+          $B9: {  # case
+            %54:i32 = load %x_63
+            %55:ptr<function, i32, read_write> = access %data, %54
+            store %55, -1i
             %56:i32 = load %x_63
-            %57:ptr<function, i32, read_write> = access %data, %56
-            store %57, 0i
-            %58:i32 = load %x_63
-            %59:i32 = add %58, 1i
-            store %x_90, %59
-            %60:i32 = load %x_90
-            store %x_64, %60
+            %57:i32 = add %56, 1i
+            store %x_92, %57
+            %58:i32 = load %x_92
+            store %x_64, %58
             exit_switch  # switch_1
           }
-          %b11 = block {  # case
+          $B10: {  # case
+            %59:i32 = load %x_63
+            %60:ptr<function, i32, read_write> = access %data, %59
+            store %60, 0i
             %61:i32 = load %x_63
-            %62:ptr<function, i32, read_write> = access %data, %61
-            store %62, 1i
-            %63:i32 = load %x_63
-            %64:i32 = add %63, 1i
-            store %x_88, %64
-            %65:i32 = load %x_88
-            store %x_64, %65
+            %62:i32 = add %61, 1i
+            store %x_90, %62
+            %63:i32 = load %x_90
+            store %x_64, %63
             exit_switch  # switch_1
           }
-          %b12 = block {  # case
+          $B11: {  # case
+            %64:i32 = load %x_63
+            %65:ptr<function, i32, read_write> = access %data, %64
+            store %65, 1i
             %66:i32 = load %x_63
-            %67:ptr<function, i32, read_write> = access %data, %66
-            store %67, 2i
-            %68:i32 = load %x_63
-            %69:i32 = add %68, 1i
-            store %x_86, %69
-            %70:i32 = load %x_86
-            store %x_64, %70
+            %67:i32 = add %66, 1i
+            store %x_88, %67
+            %68:i32 = load %x_88
+            store %x_64, %68
             exit_switch  # switch_1
           }
-          %b13 = block {  # case
+          $B12: {  # case
+            %69:i32 = load %x_63
+            %70:ptr<function, i32, read_write> = access %data, %69
+            store %70, 2i
             %71:i32 = load %x_63
-            %72:ptr<function, i32, read_write> = access %data, %71
-            store %72, 3i
-            %73:i32 = load %x_63
-            %74:i32 = add %73, 1i
-            store %x_84, %74
-            %75:i32 = load %x_84
-            store %x_64, %75
+            %72:i32 = add %71, 1i
+            store %x_86, %72
+            %73:i32 = load %x_86
+            store %x_64, %73
             exit_switch  # switch_1
           }
-          %b14 = block {  # case
+          $B13: {  # case
+            %74:i32 = load %x_63
+            %75:ptr<function, i32, read_write> = access %data, %74
+            store %75, 3i
             %76:i32 = load %x_63
-            %77:ptr<function, i32, read_write> = access %data, %76
-            store %77, 4i
-            %78:i32 = load %x_63
-            %79:i32 = add %78, 1i
-            store %x_82, %79
-            %80:i32 = load %x_82
-            store %x_64, %80
+            %77:i32 = add %76, 1i
+            store %x_84, %77
+            %78:i32 = load %x_84
+            store %x_64, %78
             exit_switch  # switch_1
           }
-          %b15 = block {  # case
+          $B14: {  # case
+            %79:i32 = load %x_63
+            %80:ptr<function, i32, read_write> = access %data, %79
+            store %80, 4i
+            %81:i32 = load %x_63
+            %82:i32 = add %81, 1i
+            store %x_82, %82
+            %83:i32 = load %x_82
+            store %x_64, %83
+            exit_switch  # switch_1
+          }
+          $B15: {  # case
             exit_switch  # switch_1
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %81:i32 = load %x_64
-        store %x_63, %81
-        %82:i32 = load %x_64
-        %83:bool = lt %82, 10i
-        %84:bool = eq %83, false
-        break_if %84 %b3
+      $B4: {  # continuing
+        %84:i32 = load %x_64
+        store %x_63, %84
+        %85:i32 = load %x_64
+        %86:bool = lt %85, 10i
+        %87:bool = eq %86, false
+        break_if %87  # -> [t: exit_loop loop_1, f: $B3]
       }
     }
     store %x_103, 0i
-    loop [b: %b16, c: %b17] {  # loop_2
-      %b16 = block {  # body
+    loop [b: $B16, c: $B17] {  # loop_2
+      $B16: {  # body
         %x_104:ptr<function, i32, read_write> = var
-        %86:i32 = load %x_103
-        %87:bool = lt %86, 10i
-        if %87 [t: %b18, f: %b19] {  # if_1
-          %b18 = block {  # true
+        %89:i32 = load %x_103
+        %90:bool = lt %89, 10i
+        if %90 [t: $B18, f: $B19] {  # if_1
+          $B18: {  # true
             exit_if  # if_1
           }
-          %b19 = block {  # false
+          $B19: {  # false
             exit_loop  # loop_2
           }
         }
-        continue %b17
+        continue  # -> $B17
       }
-      %b17 = block {  # continuing
-        %88:i32 = load %x_103
-        %89:ptr<function, i32, read_write> = access %temp, %88
-        %90:i32 = load %x_103
-        %91:ptr<function, i32, read_write> = access %data, %90
-        %92:i32 = load %91
-        store %89, %92
+      $B17: {  # continuing
+        %91:i32 = load %x_103
+        %92:ptr<function, i32, read_write> = access %temp, %91
         %93:i32 = load %x_103
-        %94:i32 = add %93, 1i
-        store %x_104, %94
-        %95:i32 = load %x_104
-        store %x_103, %95
-        next_iteration %b16
+        %94:ptr<function, i32, read_write> = access %data, %93
+        %95:i32 = load %94
+        store %92, %95
+        %96:i32 = load %x_103
+        %97:i32 = add %96, 1i
+        store %x_104, %97
+        %98:i32 = load %x_104
+        store %x_103, %98
+        next_iteration  # -> $B16
       }
     }
     store %x_112, 1i
-    loop [b: %b20, c: %b21] {  # loop_3
-      %b20 = block {  # body
+    loop [b: $B20, c: $B21] {  # loop_3
+      $B20: {  # body
         %x_119:ptr<function, i32, read_write> = var
         %x_113:ptr<function, i32, read_write> = var
-        %98:i32 = load %x_112
-        %99:bool = lte %98, 9i
-        if %99 [t: %b22, f: %b23] {  # if_2
-          %b22 = block {  # true
+        %101:i32 = load %x_112
+        %102:bool = lte %101, 9i
+        if %102 [t: $B22, f: $B23] {  # if_2
+          $B22: {  # true
             exit_if  # if_2
           }
-          %b23 = block {  # false
+          $B23: {  # false
             exit_loop  # loop_3
           }
         }
         store %x_119, 0i
-        loop [b: %b24, c: %b25] {  # loop_4
-          %b24 = block {  # body
+        loop [b: $B24, c: $B25] {  # loop_4
+          $B24: {  # body
             %x_131:ptr<function, i32, read_write> = var
             %x_134:ptr<function, i32, read_write> = var
             %x_136:ptr<function, i32, read_write> = var
             %x_158:ptr<function, i32, read_write> = var
             %x_161:ptr<function, i32, read_write> = var
             %x_171:ptr<function, i32, read_write> = var
-            %106:i32 = load %x_119
-            %107:bool = lt %106, 9i
-            if %107 [t: %b26, f: %b27] {  # if_3
-              %b26 = block {  # true
+            %109:i32 = load %x_119
+            %110:bool = lt %109, 9i
+            if %110 [t: $B26, f: $B27] {  # if_3
+              $B26: {  # true
                 exit_if  # if_3
               }
-              %b27 = block {  # false
+              $B27: {  # false
                 exit_loop  # loop_4
               }
             }
-            %108:i32 = load %x_119
-            %109:i32 = load %x_112
-            %x_125:i32 = add %108, %109
-            %x_126:i32 = sub %x_125, 1i
-            %112:i32 = load %x_119
-            %113:i32 = load %x_112
-            %114:i32 = mul 2i, %113
-            %x_120:i32 = add %112, %114
-            %116:i32 = sub %x_120, 1i
-            %x_129:i32 = min %116, 9i
-            %118:i32 = load %x_119
-            store %x_131, %118
+            %111:i32 = load %x_119
+            %112:i32 = load %x_112
+            %113:i32 = add %111, %112
+            %x_125:i32 = let %113
+            %115:i32 = sub %x_125, 1i
+            %x_126:i32 = let %115
+            %117:i32 = load %x_119
+            %118:i32 = load %x_112
+            %119:i32 = mul 2i, %118
+            %120:i32 = add %117, %119
+            %x_120:i32 = let %120
+            %122:i32 = sub %x_120, 1i
+            %123:i32 = min %122, 9i
+            %x_129:i32 = let %123
+            %125:i32 = load %x_119
+            store %x_131, %125
             store %x_134, %x_125
-            %119:i32 = load %x_119
-            store %x_136, %119
-            loop [b: %b28, c: %b29] {  # loop_5
-              %b28 = block {  # body
+            %126:i32 = load %x_119
+            store %x_136, %126
+            loop [b: $B28, c: $B29] {  # loop_5
+              $B28: {  # body
                 %x_151:ptr<function, i32, read_write> = var
                 %x_154:ptr<function, i32, read_write> = var
                 %x_135:ptr<function, i32, read_write> = var
                 %x_137:ptr<function, i32, read_write> = var
-                %124:i32 = load %x_136
-                %125:bool = lte %124, %x_126
-                %126:i32 = load %x_134
-                %127:bool = lte %126, %x_129
-                %128:bool = and %125, %127
-                if %128 [t: %b30, f: %b31] {  # if_4
-                  %b30 = block {  # true
+                %131:i32 = load %x_136
+                %132:bool = lte %131, %x_126
+                %133:i32 = load %x_134
+                %134:bool = lte %133, %x_129
+                %135:bool = and %132, %134
+                if %135 [t: $B30, f: $B31] {  # if_4
+                  $B30: {  # true
                     exit_if  # if_4
                   }
-                  %b31 = block {  # false
+                  $B31: {  # false
                     exit_loop  # loop_5
                   }
                 }
-                %x_143_save:i32 = load %x_136
-                %x_145_save:i32 = load %x_134
-                %131:i32 = load %x_131
-                %x_132:i32 = add %131, 1i
-                %133:i32 = load %x_136
-                %134:ptr<function, i32, read_write> = access %data, %133
-                %135:i32 = load %134
-                %136:i32 = load %x_134
-                %137:ptr<function, i32, read_write> = access %data, %136
-                %138:i32 = load %137
-                %139:bool = lt %135, %138
-                if %139 [t: %b32, f: %b33] {  # if_5
-                  %b32 = block {  # true
-                    %140:i32 = load %x_136
-                    %141:i32 = add %140, 1i
-                    store %x_151, %141
-                    %142:i32 = load %x_131
-                    %143:ptr<function, i32, read_write> = access %temp, %142
-                    %144:ptr<function, i32, read_write> = access %data, %x_143_save
-                    %145:i32 = load %144
-                    store %143, %145
-                    %146:i32 = load %x_134
-                    store %x_135, %146
-                    %147:i32 = load %x_151
-                    store %x_137, %147
+                %136:i32 = load %x_136
+                %x_143_save:i32 = let %136
+                %138:i32 = load %x_134
+                %x_145_save:i32 = let %138
+                %140:i32 = load %x_131
+                %141:i32 = add %140, 1i
+                %x_132:i32 = let %141
+                %143:i32 = load %x_136
+                %144:ptr<function, i32, read_write> = access %data, %143
+                %145:i32 = load %144
+                %146:i32 = load %x_134
+                %147:ptr<function, i32, read_write> = access %data, %146
+                %148:i32 = load %147
+                %149:bool = lt %145, %148
+                if %149 [t: $B32, f: $B33] {  # if_5
+                  $B32: {  # true
+                    %150:i32 = load %x_136
+                    %151:i32 = add %150, 1i
+                    store %x_151, %151
+                    %152:i32 = load %x_131
+                    %153:ptr<function, i32, read_write> = access %temp, %152
+                    %154:ptr<function, i32, read_write> = access %data, %x_143_save
+                    %155:i32 = load %154
+                    store %153, %155
+                    %156:i32 = load %x_134
+                    store %x_135, %156
+                    %157:i32 = load %x_151
+                    store %x_137, %157
                     exit_if  # if_5
                   }
-                  %b33 = block {  # false
-                    %148:i32 = load %x_134
-                    %149:i32 = add %148, 1i
-                    store %x_154, %149
-                    %150:i32 = load %x_131
-                    %151:ptr<function, i32, read_write> = access %temp, %150
-                    %152:ptr<function, i32, read_write> = access %data, %x_145_save
-                    %153:i32 = load %152
-                    store %151, %153
-                    %154:i32 = load %x_154
-                    store %x_135, %154
-                    %155:i32 = load %x_136
-                    store %x_137, %155
+                  $B33: {  # false
+                    %158:i32 = load %x_134
+                    %159:i32 = add %158, 1i
+                    store %x_154, %159
+                    %160:i32 = load %x_131
+                    %161:ptr<function, i32, read_write> = access %temp, %160
+                    %162:ptr<function, i32, read_write> = access %data, %x_145_save
+                    %163:i32 = load %162
+                    store %161, %163
+                    %164:i32 = load %x_154
+                    store %x_135, %164
+                    %165:i32 = load %x_136
+                    store %x_137, %165
                     exit_if  # if_5
                   }
                 }
-                continue %b29
+                continue  # -> $B29
               }
-              %b29 = block {  # continuing
+              $B29: {  # continuing
                 store %x_131, %x_132
-                %156:i32 = load %x_135
-                store %x_134, %156
-                %157:i32 = load %x_137
-                store %x_136, %157
-                next_iteration %b28
+                %166:i32 = load %x_135
+                store %x_134, %166
+                %167:i32 = load %x_137
+                store %x_136, %167
+                next_iteration  # -> $B28
               }
             }
-            %158:i32 = load %x_131
-            store %x_158, %158
-            %159:i32 = load %x_136
-            store %x_161, %159
-            loop [b: %b34, c: %b35] {  # loop_6
-              %b34 = block {  # body
+            %168:i32 = load %x_131
+            store %x_158, %168
+            %169:i32 = load %x_136
+            store %x_161, %169
+            loop [b: $B34, c: $B35] {  # loop_6
+              $B34: {  # body
                 %x_159:ptr<function, i32, read_write> = var
                 %x_162:ptr<function, i32, read_write> = var
-                %162:i32 = load %x_161
-                %163:bool = lt %162, 10i
-                %164:i32 = load %x_161
-                %165:bool = lte %164, %x_126
-                %166:bool = and %163, %165
-                if %166 [t: %b36, f: %b37] {  # if_6
-                  %b36 = block {  # true
+                %172:i32 = load %x_161
+                %173:bool = lt %172, 10i
+                %174:i32 = load %x_161
+                %175:bool = lte %174, %x_126
+                %176:bool = and %173, %175
+                if %176 [t: $B36, f: $B37] {  # if_6
+                  $B36: {  # true
                     exit_if  # if_6
                   }
-                  %b37 = block {  # false
+                  $B37: {  # false
                     exit_loop  # loop_6
                   }
                 }
-                continue %b35
+                continue  # -> $B35
               }
-              %b35 = block {  # continuing
-                %167:i32 = load %x_158
-                %168:i32 = add %167, 1i
-                store %x_159, %168
-                %169:i32 = load %x_161
-                %170:i32 = add %169, 1i
-                store %x_162, %170
-                %171:i32 = load %x_158
-                %172:ptr<function, i32, read_write> = access %temp, %171
-                %173:i32 = load %x_161
-                %174:ptr<function, i32, read_write> = access %data, %173
-                %175:i32 = load %174
-                store %172, %175
-                %176:i32 = load %x_159
-                store %x_158, %176
-                %177:i32 = load %x_162
-                store %x_161, %177
-                next_iteration %b34
+              $B35: {  # continuing
+                %177:i32 = load %x_158
+                %178:i32 = add %177, 1i
+                store %x_159, %178
+                %179:i32 = load %x_161
+                %180:i32 = add %179, 1i
+                store %x_162, %180
+                %181:i32 = load %x_158
+                %182:ptr<function, i32, read_write> = access %temp, %181
+                %183:i32 = load %x_161
+                %184:ptr<function, i32, read_write> = access %data, %183
+                %185:i32 = load %184
+                store %182, %185
+                %186:i32 = load %x_159
+                store %x_158, %186
+                %187:i32 = load %x_162
+                store %x_161, %187
+                next_iteration  # -> $B34
               }
             }
-            %178:i32 = load %x_119
-            store %x_171, %178
-            loop [b: %b38, c: %b39] {  # loop_7
-              %b38 = block {  # body
+            %188:i32 = load %x_119
+            store %x_171, %188
+            loop [b: $B38, c: $B39] {  # loop_7
+              $B38: {  # body
                 %x_172:ptr<function, i32, read_write> = var
-                %180:i32 = load %x_171
-                %181:bool = lte %180, %x_129
-                if %181 [t: %b40, f: %b41] {  # if_7
-                  %b40 = block {  # true
+                %190:i32 = load %x_171
+                %191:bool = lte %190, %x_129
+                if %191 [t: $B40, f: $B41] {  # if_7
+                  $B40: {  # true
                     exit_if  # if_7
                   }
-                  %b41 = block {  # false
+                  $B41: {  # false
                     exit_loop  # loop_7
                   }
                 }
-                continue %b39
+                continue  # -> $B39
               }
-              %b39 = block {  # continuing
-                %182:i32 = load %x_171
-                %183:ptr<function, i32, read_write> = access %data, %182
-                %184:i32 = load %x_171
-                %185:ptr<function, i32, read_write> = access %temp, %184
-                %186:i32 = load %185
-                store %183, %186
-                %187:i32 = load %x_171
-                %188:i32 = add %187, 1i
-                store %x_172, %188
-                %189:i32 = load %x_172
-                store %x_171, %189
-                next_iteration %b38
+              $B39: {  # continuing
+                %192:i32 = load %x_171
+                %193:ptr<function, i32, read_write> = access %data, %192
+                %194:i32 = load %x_171
+                %195:ptr<function, i32, read_write> = access %temp, %194
+                %196:i32 = load %195
+                store %193, %196
+                %197:i32 = load %x_171
+                %198:i32 = add %197, 1i
+                store %x_172, %198
+                %199:i32 = load %x_172
+                store %x_171, %199
+                next_iteration  # -> $B38
               }
             }
-            continue %b25
+            continue  # -> $B25
           }
-          %b25 = block {  # continuing
+          $B25: {  # continuing
             store %x_119, %x_120
-            next_iteration %b24
+            next_iteration  # -> $B24
           }
         }
-        continue %b21
+        continue  # -> $B21
       }
-      %b21 = block {  # continuing
-        %190:i32 = load %x_112
-        %191:i32 = mul 2i, %190
-        store %x_113, %191
-        %192:i32 = load %x_113
-        store %x_112, %192
-        next_iteration %b20
+      $B21: {  # continuing
+        %200:i32 = load %x_112
+        %201:i32 = mul 2i, %200
+        store %x_113, %201
+        %202:i32 = load %x_113
+        store %x_112, %202
+        next_iteration  # -> $B20
       }
     }
     %x_181:ptr<function, i32, read_write> = var
     %x_199:ptr<function, f32, read_write> = var
     %x_261:ptr<function, f32, read_write> = var
-    %196:f32 = load_vector_element %gl_FragCoord, 1u
-    %197:i32 = convert %196
-    store %x_181, %197
-    %198:i32 = load %x_181
-    %199:bool = lt %198, 30i
-    if %199 [t: %b42, f: %b43] {  # if_8
-      %b42 = block {  # true
-        %200:ptr<function, i32, read_write> = access %data, 0i
-        %201:i32 = load %200
-        %202:f32 = convert %201
-        %203:f32 = mul %202, 0.10000000149011611938f
-        %204:f32 = add 0.5f, %203
-        store %x_190, %204
-        %205:f32 = load %x_190
-        store %x_263, %205
+    %206:f32 = load_vector_element %gl_FragCoord, 1u
+    %207:i32 = call %tint_f32_to_i32, %206
+    store %x_181, %207
+    %208:i32 = load %x_181
+    %209:bool = lt %208, 30i
+    if %209 [t: $B42, f: $B43] {  # if_8
+      $B42: {  # true
+        %210:ptr<function, i32, read_write> = access %data, 0i
+        %211:i32 = load %210
+        %212:f32 = convert %211
+        %213:f32 = mul %212, 0.10000000149011611938f
+        %214:f32 = add 0.5f, %213
+        store %x_190, %214
+        %215:f32 = load %x_190
+        store %x_263, %215
         exit_if  # if_8
       }
-      %b43 = block {  # false
+      $B43: {  # false
         %x_208:ptr<function, f32, read_write> = var
         %x_260:ptr<function, f32, read_write> = var
-        %208:i32 = load %x_181
-        %209:bool = lt %208, 60i
-        if %209 [t: %b44, f: %b45] {  # if_9
-          %b44 = block {  # true
-            %210:ptr<function, i32, read_write> = access %data, 1i
-            %211:i32 = load %210
-            %212:f32 = convert %211
-            %213:f32 = mul %212, 0.10000000149011611938f
-            %214:f32 = add 0.5f, %213
-            store %x_199, %214
-            %215:f32 = load %x_199
-            store %x_262, %215
+        %218:i32 = load %x_181
+        %219:bool = lt %218, 60i
+        if %219 [t: $B44, f: $B45] {  # if_9
+          $B44: {  # true
+            %220:ptr<function, i32, read_write> = access %data, 1i
+            %221:i32 = load %220
+            %222:f32 = convert %221
+            %223:f32 = mul %222, 0.10000000149011611938f
+            %224:f32 = add 0.5f, %223
+            store %x_199, %224
+            %225:f32 = load %x_199
+            store %x_262, %225
             exit_if  # if_9
           }
-          %b45 = block {  # false
+          $B45: {  # false
             %x_217:ptr<function, f32, read_write> = var
             %x_259:ptr<function, f32, read_write> = var
-            %218:i32 = load %x_181
-            %219:bool = lt %218, 90i
-            if %219 [t: %b46, f: %b47] {  # if_10
-              %b46 = block {  # true
-                %220:ptr<function, i32, read_write> = access %data, 2i
-                %221:i32 = load %220
-                %222:f32 = convert %221
-                %223:f32 = mul %222, 0.10000000149011611938f
-                %224:f32 = add 0.5f, %223
-                store %x_208, %224
-                %225:f32 = load %x_208
-                store %x_261, %225
+            %228:i32 = load %x_181
+            %229:bool = lt %228, 90i
+            if %229 [t: $B46, f: $B47] {  # if_10
+              $B46: {  # true
+                %230:ptr<function, i32, read_write> = access %data, 2i
+                %231:i32 = load %230
+                %232:f32 = convert %231
+                %233:f32 = mul %232, 0.10000000149011611938f
+                %234:f32 = add 0.5f, %233
+                store %x_208, %234
+                %235:f32 = load %x_208
+                store %x_261, %235
                 exit_if  # if_10
               }
-              %b47 = block {  # false
-                %226:i32 = load %x_181
-                %227:bool = lt %226, 120i
-                if %227 [t: %b48, f: %b49] {  # if_11
-                  %b48 = block {  # true
-                    %228:ptr<function, i32, read_write> = access %data, 3i
-                    %229:i32 = load %228
-                    %230:f32 = convert %229
-                    %231:f32 = mul %230, 0.10000000149011611938f
-                    %232:f32 = add 0.5f, %231
-                    store %x_217, %232
-                    %233:f32 = load %x_217
-                    store %x_260, %233
+              $B47: {  # false
+                %236:i32 = load %x_181
+                %237:bool = lt %236, 120i
+                if %237 [t: $B48, f: $B49] {  # if_11
+                  $B48: {  # true
+                    %238:ptr<function, i32, read_write> = access %data, 3i
+                    %239:i32 = load %238
+                    %240:f32 = convert %239
+                    %241:f32 = mul %240, 0.10000000149011611938f
+                    %242:f32 = add 0.5f, %241
+                    store %x_217, %242
+                    %243:f32 = load %x_217
+                    store %x_260, %243
                     exit_if  # if_11
                   }
-                  %b49 = block {  # false
+                  $B49: {  # false
                     %x_230:ptr<function, f32, read_write> = var
                     %x_258:ptr<function, f32, read_write> = var
-                    %236:i32 = load %x_181
-                    %237:bool = lt %236, 150i
-                    if %237 [t: %b50, f: %b51] {  # if_12
-                      %b50 = block {  # true
-                        discard
+                    %246:i32 = load %x_181
+                    %247:bool = lt %246, 150i
+                    if %247 [t: $B50, f: $B51] {  # if_12
+                      $B50: {  # true
+                        store %continue_execution, false
                         exit_if  # if_12
                       }
-                      %b51 = block {  # false
+                      $B51: {  # false
                         %x_239:ptr<function, f32, read_write> = var
                         %x_257:ptr<function, f32, read_write> = var
-                        %240:i32 = load %x_181
-                        %241:bool = lt %240, 180i
-                        if %241 [t: %b52, f: %b53] {  # if_13
-                          %b52 = block {  # true
-                            %242:ptr<function, i32, read_write> = access %data, 5i
-                            %243:i32 = load %242
-                            %244:f32 = convert %243
-                            %245:f32 = mul %244, 0.10000000149011611938f
-                            %246:f32 = add 0.5f, %245
-                            store %x_230, %246
-                            %247:f32 = load %x_230
-                            store %x_259, %247
+                        %250:i32 = load %x_181
+                        %251:bool = lt %250, 180i
+                        if %251 [t: $B52, f: $B53] {  # if_13
+                          $B52: {  # true
+                            %252:ptr<function, i32, read_write> = access %data, 5i
+                            %253:i32 = load %252
+                            %254:f32 = convert %253
+                            %255:f32 = mul %254, 0.10000000149011611938f
+                            %256:f32 = add 0.5f, %255
+                            store %x_230, %256
+                            %257:f32 = load %x_230
+                            store %x_259, %257
                             exit_if  # if_13
                           }
-                          %b53 = block {  # false
+                          $B53: {  # false
                             %x_248:ptr<function, f32, read_write> = var
                             %x_256:ptr<function, f32, read_write> = var
-                            %250:i32 = load %x_181
-                            %251:bool = lt %250, 210i
-                            if %251 [t: %b54, f: %b55] {  # if_14
-                              %b54 = block {  # true
-                                %252:ptr<function, i32, read_write> = access %data, 6i
-                                %253:i32 = load %252
-                                %254:f32 = convert %253
-                                %255:f32 = mul %254, 0.10000000149011611938f
-                                %256:f32 = add 0.5f, %255
-                                store %x_239, %256
-                                %257:f32 = load %x_239
-                                store %x_258, %257
+                            %260:i32 = load %x_181
+                            %261:bool = lt %260, 210i
+                            if %261 [t: $B54, f: $B55] {  # if_14
+                              $B54: {  # true
+                                %262:ptr<function, i32, read_write> = access %data, 6i
+                                %263:i32 = load %262
+                                %264:f32 = convert %263
+                                %265:f32 = mul %264, 0.10000000149011611938f
+                                %266:f32 = add 0.5f, %265
+                                store %x_239, %266
+                                %267:f32 = load %x_239
+                                store %x_258, %267
                                 exit_if  # if_14
                               }
-                              %b55 = block {  # false
-                                %258:i32 = load %x_181
-                                %259:bool = lt %258, 240i
-                                if %259 [t: %b56, f: %b57] {  # if_15
-                                  %b56 = block {  # true
-                                    %260:ptr<function, i32, read_write> = access %data, 7i
-                                    %261:i32 = load %260
-                                    %262:f32 = convert %261
-                                    %263:f32 = mul %262, 0.10000000149011611938f
-                                    %264:f32 = add 0.5f, %263
-                                    store %x_248, %264
-                                    %265:f32 = load %x_248
-                                    store %x_257, %265
+                              $B55: {  # false
+                                %268:i32 = load %x_181
+                                %269:bool = lt %268, 240i
+                                if %269 [t: $B56, f: $B57] {  # if_15
+                                  $B56: {  # true
+                                    %270:ptr<function, i32, read_write> = access %data, 7i
+                                    %271:i32 = load %270
+                                    %272:f32 = convert %271
+                                    %273:f32 = mul %272, 0.10000000149011611938f
+                                    %274:f32 = add 0.5f, %273
+                                    store %x_248, %274
+                                    %275:f32 = load %x_248
+                                    store %x_257, %275
                                     exit_if  # if_15
                                   }
-                                  %b57 = block {  # false
-                                    %266:i32 = load %x_181
-                                    %267:bool = lt %266, 270i
-                                    if %267 [t: %b58, f: %b59] {  # if_16
-                                      %b58 = block {  # true
+                                  $B57: {  # false
+                                    %276:i32 = load %x_181
+                                    %277:bool = lt %276, 270i
+                                    if %277 [t: $B58, f: $B59] {  # if_16
+                                      $B58: {  # true
                                         exit_if  # if_16
                                       }
-                                      %b59 = block {  # false
-                                        discard
+                                      $B59: {  # false
+                                        store %continue_execution, false
                                         exit_if  # if_16
                                       }
                                     }
-                                    %268:ptr<function, i32, read_write> = access %data, 8i
-                                    %269:i32 = load %268
-                                    %270:f32 = convert %269
-                                    %271:f32 = mul %270, 0.10000000149011611938f
-                                    %272:f32 = add 0.5f, %271
-                                    store %x_256, %272
-                                    %273:f32 = load %x_256
-                                    store %x_257, %273
+                                    %278:ptr<function, i32, read_write> = access %data, 8i
+                                    %279:i32 = load %278
+                                    %280:f32 = convert %279
+                                    %281:f32 = mul %280, 0.10000000149011611938f
+                                    %282:f32 = add 0.5f, %281
+                                    store %x_256, %282
+                                    %283:f32 = load %x_256
+                                    store %x_257, %283
                                     exit_if  # if_15
                                   }
                                 }
-                                %274:f32 = load %x_257
-                                store %x_258, %274
+                                %284:f32 = load %x_257
+                                store %x_258, %284
                                 exit_if  # if_14
                               }
                             }
-                            %275:f32 = load %x_258
-                            store %x_259, %275
+                            %285:f32 = load %x_258
+                            store %x_259, %285
                             exit_if  # if_13
                           }
                         }
                         exit_if  # if_12
                       }
                     }
-                    %276:f32 = load %x_259
-                    store %x_260, %276
+                    %286:f32 = load %x_259
+                    store %x_260, %286
                     exit_if  # if_11
                   }
                 }
-                %277:f32 = load %x_260
-                store %x_261, %277
+                %287:f32 = load %x_260
+                store %x_261, %287
                 exit_if  # if_10
               }
             }
-            %278:f32 = load %x_261
-            store %x_262, %278
+            %288:f32 = load %x_261
+            store %x_262, %288
             exit_if  # if_9
           }
         }
-        %279:f32 = load %x_262
-        store %x_263, %279
+        %289:f32 = load %x_262
+        store %x_263, %289
         exit_if  # if_8
       }
     }
-    %280:f32 = load %x_263
-    %281:f32 = load %x_263
-    %282:f32 = load %x_263
-    %283:vec4<f32> = construct %280, %281, %282, 1.0f
-    store %x_GLF_color, %283
+    %290:f32 = load %x_263
+    %291:f32 = load %x_263
+    %292:f32 = load %x_263
+    %293:vec4<f32> = construct %290, %291, %292, 1.0f
+    store %x_GLF_color, %293
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b60 {
-  %b60 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B60: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %286:void = call %main_1
-    %287:vec4<f32> = load %x_GLF_color
-    %288:main_out = construct %287
-    ret %288
+    %296:void = call %main_1
+    %297:vec4<f32> = load %x_GLF_color
+    %298:main_out = construct %297
+    %299:bool = load %continue_execution
+    %300:bool = eq %299, false
+    if %300 [t: $B61] {  # if_17
+      $B61: {  # true
+        terminate_invocation
+      }
+    }
+    ret %298
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B62: {
+    %302:i32 = convert %value
+    %303:bool = gte %value, -2147483648.0f
+    %304:i32 = select -2147483648i, %302, %303
+    %305:bool = lte %value, 2147483520.0f
+    %306:i32 = select 2147483647i, %304, %305
+    ret %306
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/1.wgsl.expected.ir.msl
index dcf7074..6e33be4 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/1.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/1.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,14 +8,15 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_8:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %temp:ptr<function, array<i32, 10>, read_write> = var
     %data:ptr<function, array<i32, 10>, read_write> = var
     %x_190:ptr<function, f32, read_write> = var
@@ -24,12 +25,14 @@
     %x_103_phi:ptr<function, i32, read_write> = var
     %x_112_phi:ptr<function, i32, read_write> = var
     %x_263_phi:ptr<function, f32, read_write> = var
-    %13:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
-    %x_60:f32 = load_vector_element %13, 0u
-    %x_61:i32 = convert %x_60
+    %14:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
+    %15:f32 = load_vector_element %14, 0u
+    %x_60:f32 = let %15
+    %17:i32 = call %tint_f32_to_i32, %x_60
+    %x_61:i32 = let %17
     store %x_63_phi, %x_61
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %x_100:ptr<function, i32, read_write> = var
         %x_98:ptr<function, i32, read_write> = var
         %x_96:ptr<function, i32, read_write> = var
@@ -41,163 +44,170 @@
         %x_84:ptr<function, i32, read_write> = var
         %x_82:ptr<function, i32, read_write> = var
         %x_64_phi:ptr<function, i32, read_write> = var
-        %x_63:i32 = load %x_63_phi
-        %x_68:array<i32, 10> = load %data
+        %31:i32 = load %x_63_phi
+        %x_63:i32 = let %31
+        %33:array<i32, 10> = load %data
+        %x_68:array<i32, 10> = let %33
         store %data, array<i32, 10>(0i)
         store %data, %x_68
-        %x_69:i32 = add %x_63, 1i
+        %35:i32 = add %x_63, 1i
+        %x_69:i32 = let %35
         store %x_64_phi, %x_69
-        switch %x_63 [c: (9i, %b5), c: (8i, %b6), c: (7i, %b7), c: (6i, %b8), c: (5i, %b9), c: (4i, %b10), c: (3i, %b11), c: (2i, %b12), c: (1i, %b13), c: (0i, %b14), c: (default, %b15)] {  # switch_1
-          %b5 = block {  # case
-            %30:ptr<function, i32, read_write> = access %data, %x_63
-            store %30, -5i
-            %31:i32 = add %x_63, 1i
-            store %x_100, %31
-            %32:i32 = load %x_100
-            store %x_64_phi, %32
+        switch %x_63 [c: (9i, $B5), c: (8i, $B6), c: (7i, $B7), c: (6i, $B8), c: (5i, $B9), c: (4i, $B10), c: (3i, $B11), c: (2i, $B12), c: (1i, $B13), c: (0i, $B14), c: (default, $B15)] {  # switch_1
+          $B5: {  # case
+            %37:ptr<function, i32, read_write> = access %data, %x_63
+            store %37, -5i
+            %38:i32 = add %x_63, 1i
+            store %x_100, %38
+            %39:i32 = load %x_100
+            store %x_64_phi, %39
             exit_switch  # switch_1
           }
-          %b6 = block {  # case
-            %33:ptr<function, i32, read_write> = access %data, %x_63
-            store %33, -4i
-            %34:i32 = add %x_63, 1i
-            store %x_98, %34
-            %35:i32 = load %x_98
-            store %x_64_phi, %35
+          $B6: {  # case
+            %40:ptr<function, i32, read_write> = access %data, %x_63
+            store %40, -4i
+            %41:i32 = add %x_63, 1i
+            store %x_98, %41
+            %42:i32 = load %x_98
+            store %x_64_phi, %42
             exit_switch  # switch_1
           }
-          %b7 = block {  # case
-            %36:ptr<function, i32, read_write> = access %data, %x_63
-            store %36, -3i
-            %37:i32 = add %x_63, 1i
-            store %x_96, %37
-            %38:i32 = load %x_96
-            store %x_64_phi, %38
+          $B7: {  # case
+            %43:ptr<function, i32, read_write> = access %data, %x_63
+            store %43, -3i
+            %44:i32 = add %x_63, 1i
+            store %x_96, %44
+            %45:i32 = load %x_96
+            store %x_64_phi, %45
             exit_switch  # switch_1
           }
-          %b8 = block {  # case
-            %39:ptr<function, i32, read_write> = access %data, %x_63
-            store %39, -2i
-            %40:i32 = add %x_63, 1i
-            store %x_94, %40
-            %41:i32 = load %x_94
-            store %x_64_phi, %41
+          $B8: {  # case
+            %46:ptr<function, i32, read_write> = access %data, %x_63
+            store %46, -2i
+            %47:i32 = add %x_63, 1i
+            store %x_94, %47
+            %48:i32 = load %x_94
+            store %x_64_phi, %48
             exit_switch  # switch_1
           }
-          %b9 = block {  # case
-            %42:ptr<function, i32, read_write> = access %data, %x_63
-            store %42, -1i
-            %43:i32 = add %x_63, 1i
-            store %x_92, %43
-            %44:i32 = load %x_92
-            store %x_64_phi, %44
+          $B9: {  # case
+            %49:ptr<function, i32, read_write> = access %data, %x_63
+            store %49, -1i
+            %50:i32 = add %x_63, 1i
+            store %x_92, %50
+            %51:i32 = load %x_92
+            store %x_64_phi, %51
             exit_switch  # switch_1
           }
-          %b10 = block {  # case
-            %45:ptr<function, i32, read_write> = access %data, %x_63
-            store %45, 0i
-            %46:i32 = add %x_63, 1i
-            store %x_90, %46
-            %47:i32 = load %x_90
-            store %x_64_phi, %47
+          $B10: {  # case
+            %52:ptr<function, i32, read_write> = access %data, %x_63
+            store %52, 0i
+            %53:i32 = add %x_63, 1i
+            store %x_90, %53
+            %54:i32 = load %x_90
+            store %x_64_phi, %54
             exit_switch  # switch_1
           }
-          %b11 = block {  # case
-            %48:ptr<function, i32, read_write> = access %data, %x_63
-            store %48, 1i
-            %49:i32 = add %x_63, 1i
-            store %x_88, %49
-            %50:i32 = load %x_88
-            store %x_64_phi, %50
+          $B11: {  # case
+            %55:ptr<function, i32, read_write> = access %data, %x_63
+            store %55, 1i
+            %56:i32 = add %x_63, 1i
+            store %x_88, %56
+            %57:i32 = load %x_88
+            store %x_64_phi, %57
             exit_switch  # switch_1
           }
-          %b12 = block {  # case
-            %51:ptr<function, i32, read_write> = access %data, %x_63
-            store %51, 2i
-            %52:i32 = add %x_63, 1i
-            store %x_86, %52
-            %53:i32 = load %x_86
-            store %x_64_phi, %53
+          $B12: {  # case
+            %58:ptr<function, i32, read_write> = access %data, %x_63
+            store %58, 2i
+            %59:i32 = add %x_63, 1i
+            store %x_86, %59
+            %60:i32 = load %x_86
+            store %x_64_phi, %60
             exit_switch  # switch_1
           }
-          %b13 = block {  # case
-            %54:ptr<function, i32, read_write> = access %data, %x_63
-            store %54, 3i
-            %55:i32 = add %x_63, 1i
-            store %x_84, %55
-            %56:i32 = load %x_84
-            store %x_64_phi, %56
+          $B13: {  # case
+            %61:ptr<function, i32, read_write> = access %data, %x_63
+            store %61, 3i
+            %62:i32 = add %x_63, 1i
+            store %x_84, %62
+            %63:i32 = load %x_84
+            store %x_64_phi, %63
             exit_switch  # switch_1
           }
-          %b14 = block {  # case
-            %57:ptr<function, i32, read_write> = access %data, %x_63
-            store %57, 4i
-            %58:i32 = add %x_63, 1i
-            store %x_82, %58
-            %59:i32 = load %x_82
-            store %x_64_phi, %59
+          $B14: {  # case
+            %64:ptr<function, i32, read_write> = access %data, %x_63
+            store %64, 4i
+            %65:i32 = add %x_63, 1i
+            store %x_82, %65
+            %66:i32 = load %x_82
+            store %x_64_phi, %66
             exit_switch  # switch_1
           }
-          %b15 = block {  # case
+          $B15: {  # case
             exit_switch  # switch_1
           }
         }
-        %x_64:i32 = load %x_64_phi
-        continue %b4
+        %67:i32 = load %x_64_phi
+        %x_64:i32 = let %67
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
+      $B4: {  # continuing
         store %x_63_phi, %x_64
-        %61:bool = lt %x_64, 10i
-        %62:bool = eq %61, false
-        break_if %62 %b3
+        %69:bool = lt %x_64, 10i
+        %70:bool = eq %69, false
+        break_if %70  # -> [t: exit_loop loop_1, f: $B3]
       }
     }
     store %x_103_phi, 0i
-    loop [b: %b16, c: %b17] {  # loop_2
-      %b16 = block {  # body
+    loop [b: $B16, c: $B17] {  # loop_2
+      $B16: {  # body
         %x_104:ptr<function, i32, read_write> = var
-        %x_103:i32 = load %x_103_phi
-        %65:bool = lt %x_103, 10i
-        if %65 [t: %b18, f: %b19] {  # if_1
-          %b18 = block {  # true
+        %72:i32 = load %x_103_phi
+        %x_103:i32 = let %72
+        %74:bool = lt %x_103, 10i
+        if %74 [t: $B18, f: $B19] {  # if_1
+          $B18: {  # true
             exit_if  # if_1
           }
-          %b19 = block {  # false
+          $B19: {  # false
             exit_loop  # loop_2
           }
         }
-        continue %b17
+        continue  # -> $B17
       }
-      %b17 = block {  # continuing
-        %66:ptr<function, i32, read_write> = access %data, %x_103
-        %x_109:i32 = load %66
-        %68:ptr<function, i32, read_write> = access %temp, %x_103
-        store %68, %x_109
-        %69:i32 = add %x_103, 1i
-        store %x_104, %69
-        %70:i32 = load %x_104
-        store %x_103_phi, %70
-        next_iteration %b16
+      $B17: {  # continuing
+        %75:ptr<function, i32, read_write> = access %data, %x_103
+        %76:i32 = load %75
+        %x_109:i32 = let %76
+        %78:ptr<function, i32, read_write> = access %temp, %x_103
+        store %78, %x_109
+        %79:i32 = add %x_103, 1i
+        store %x_104, %79
+        %80:i32 = load %x_104
+        store %x_103_phi, %80
+        next_iteration  # -> $B16
       }
     }
     store %x_112_phi, 1i
-    loop [b: %b20, c: %b21] {  # loop_3
-      %b20 = block {  # body
+    loop [b: $B20, c: $B21] {  # loop_3
+      $B20: {  # body
         %x_113:ptr<function, i32, read_write> = var
         %x_119_phi:ptr<function, i32, read_write> = var
-        %x_112:i32 = load %x_112_phi
-        %74:bool = lte %x_112, 9i
-        if %74 [t: %b22, f: %b23] {  # if_2
-          %b22 = block {  # true
+        %83:i32 = load %x_112_phi
+        %x_112:i32 = let %83
+        %85:bool = lte %x_112, 9i
+        if %85 [t: $B22, f: $B23] {  # if_2
+          $B22: {  # true
             exit_if  # if_2
           }
-          %b23 = block {  # false
+          $B23: {  # false
             exit_loop  # loop_3
           }
         }
         store %x_119_phi, 0i
-        loop [b: %b24, c: %b25] {  # loop_4
-          %b24 = block {  # body
+        loop [b: $B24, c: $B25] {  # loop_4
+          $B24: {  # body
             %x_131:ptr<function, i32, read_write> = var
             %x_136:ptr<function, i32, read_write> = var
             %x_131_phi:ptr<function, i32, read_write> = var
@@ -206,399 +216,445 @@
             %x_158_phi:ptr<function, i32, read_write> = var
             %x_161_phi:ptr<function, i32, read_write> = var
             %x_171_phi:ptr<function, i32, read_write> = var
-            %x_119:i32 = load %x_119_phi
-            %84:bool = lt %x_119, 9i
-            if %84 [t: %b26, f: %b27] {  # if_3
-              %b26 = block {  # true
+            %94:i32 = load %x_119_phi
+            %x_119:i32 = let %94
+            %96:bool = lt %x_119, 9i
+            if %96 [t: $B26, f: $B27] {  # if_3
+              $B26: {  # true
                 exit_if  # if_3
               }
-              %b27 = block {  # false
+              $B27: {  # false
                 exit_loop  # loop_4
               }
             }
-            %x_125:i32 = add %x_119, %x_112
-            %x_126:i32 = sub %x_125, 1i
-            %87:i32 = mul 2i, %x_112
-            %x_120:i32 = add %x_119, %87
-            %89:i32 = sub %x_120, 1i
-            %x_129:i32 = min %89, 9i
+            %97:i32 = add %x_119, %x_112
+            %x_125:i32 = let %97
+            %99:i32 = sub %x_125, 1i
+            %x_126:i32 = let %99
+            %101:i32 = mul 2i, %x_112
+            %102:i32 = add %x_119, %101
+            %x_120:i32 = let %102
+            %104:i32 = sub %x_120, 1i
+            %105:i32 = min %104, 9i
+            %x_129:i32 = let %105
             store %x_131_phi, %x_119
             store %x_134_phi, %x_125
             store %x_136_phi, %x_119
-            loop [b: %b28, c: %b29] {  # loop_5
-              %b28 = block {  # body
+            loop [b: $B28, c: $B29] {  # loop_5
+              $B28: {  # body
                 %x_151:ptr<function, i32, read_write> = var
                 %x_154:ptr<function, i32, read_write> = var
                 %x_135_phi:ptr<function, i32, read_write> = var
                 %x_137_phi:ptr<function, i32, read_write> = var
-                %95:i32 = load %x_131_phi
-                store %x_131, %95
-                %x_134:i32 = load %x_134_phi
-                %97:i32 = load %x_136_phi
-                store %x_136, %97
-                %98:i32 = load %x_136
-                %99:bool = lte %98, %x_126
-                %100:bool = lte %x_134, %x_129
-                %101:bool = and %99, %100
-                if %101 [t: %b30, f: %b31] {  # if_4
-                  %b30 = block {  # true
+                %111:i32 = load %x_131_phi
+                store %x_131, %111
+                %112:i32 = load %x_134_phi
+                %x_134:i32 = let %112
+                %114:i32 = load %x_136_phi
+                store %x_136, %114
+                %115:i32 = load %x_136
+                %116:bool = lte %115, %x_126
+                %117:bool = lte %x_134, %x_129
+                %118:bool = and %116, %117
+                if %118 [t: $B30, f: $B31] {  # if_4
+                  $B30: {  # true
                     exit_if  # if_4
                   }
-                  %b31 = block {  # false
+                  $B31: {  # false
                     exit_loop  # loop_5
                   }
                 }
-                %x_143_save:i32 = load %x_136
-                %103:ptr<function, i32, read_write> = access %data, %x_143_save
-                %x_144:i32 = load %103
+                %119:i32 = load %x_136
+                %x_143_save:i32 = let %119
+                %121:ptr<function, i32, read_write> = access %data, %x_143_save
+                %122:i32 = load %121
+                %x_144:i32 = let %122
                 %x_145_save:i32 = let %x_134
-                %106:ptr<function, i32, read_write> = access %data, %x_145_save
-                %x_146:i32 = load %106
-                %108:i32 = load %x_131
-                %109:i32 = add %108, 1i
-                %x_132:i32 = bitcast %109
-                %111:bool = lt %x_144, %x_146
-                if %111 [t: %b32, f: %b33] {  # if_5
-                  %b32 = block {  # true
-                    %112:i32 = load %x_136
-                    %113:i32 = add %112, 1i
-                    %114:i32 = bitcast %113
-                    store %x_151, %114
-                    %115:ptr<function, i32, read_write> = access %data, %x_143_save
-                    %x_152:i32 = load %115
-                    %117:i32 = load %x_131
-                    %118:ptr<function, i32, read_write> = access %temp, %117
-                    store %118, %x_152
+                %125:ptr<function, i32, read_write> = access %data, %x_145_save
+                %126:i32 = load %125
+                %x_146:i32 = let %126
+                %128:i32 = load %x_131
+                %129:i32 = add %128, 1i
+                %130:i32 = bitcast %129
+                %x_132:i32 = let %130
+                %132:bool = lt %x_144, %x_146
+                if %132 [t: $B32, f: $B33] {  # if_5
+                  $B32: {  # true
+                    %133:i32 = load %x_136
+                    %134:i32 = add %133, 1i
+                    %135:i32 = bitcast %134
+                    store %x_151, %135
+                    %136:ptr<function, i32, read_write> = access %data, %x_143_save
+                    %137:i32 = load %136
+                    %x_152:i32 = let %137
+                    %139:i32 = load %x_131
+                    %140:ptr<function, i32, read_write> = access %temp, %139
+                    store %140, %x_152
                     store %x_135_phi, %x_134
-                    %119:i32 = load %x_151
-                    store %x_137_phi, %119
+                    %141:i32 = load %x_151
+                    store %x_137_phi, %141
                     exit_if  # if_5
                   }
-                  %b33 = block {  # false
-                    %120:i32 = add %x_134, 1i
-                    store %x_154, %120
-                    %121:ptr<function, i32, read_write> = access %data, %x_145_save
-                    %x_155:i32 = load %121
-                    %123:i32 = load %x_131
-                    %124:ptr<function, i32, read_write> = access %temp, %123
-                    store %124, %x_155
-                    %125:i32 = load %x_154
-                    store %x_135_phi, %125
-                    %126:i32 = load %x_136
-                    store %x_137_phi, %126
+                  $B33: {  # false
+                    %142:i32 = add %x_134, 1i
+                    store %x_154, %142
+                    %143:ptr<function, i32, read_write> = access %data, %x_145_save
+                    %144:i32 = load %143
+                    %x_155:i32 = let %144
+                    %146:i32 = load %x_131
+                    %147:ptr<function, i32, read_write> = access %temp, %146
+                    store %147, %x_155
+                    %148:i32 = load %x_154
+                    store %x_135_phi, %148
+                    %149:i32 = load %x_136
+                    store %x_137_phi, %149
                     exit_if  # if_5
                   }
                 }
-                %x_135:i32 = load %x_135_phi
-                %x_137:i32 = load %x_137_phi
-                continue %b29
+                %150:i32 = load %x_135_phi
+                %x_135:i32 = let %150
+                %152:i32 = load %x_137_phi
+                %x_137:i32 = let %152
+                continue  # -> $B29
               }
-              %b29 = block {  # continuing
+              $B29: {  # continuing
                 store %x_131_phi, %x_132
                 store %x_134_phi, %x_135
                 store %x_136_phi, %x_137
-                next_iteration %b28
+                next_iteration  # -> $B28
               }
             }
-            %129:i32 = load %x_131
-            store %x_158_phi, %129
-            %130:i32 = load %x_136
-            store %x_161_phi, %130
-            loop [b: %b34, c: %b35] {  # loop_6
-              %b34 = block {  # body
+            %154:i32 = load %x_131
+            store %x_158_phi, %154
+            %155:i32 = load %x_136
+            store %x_161_phi, %155
+            loop [b: $B34, c: $B35] {  # loop_6
+              $B34: {  # body
                 %x_159:ptr<function, i32, read_write> = var
                 %x_162:ptr<function, i32, read_write> = var
-                %x_158:i32 = load %x_158_phi
-                %x_161:i32 = load %x_161_phi
-                %135:bool = lt %x_161, 10i
-                %136:bool = lte %x_161, %x_126
-                %137:bool = and %135, %136
-                if %137 [t: %b36, f: %b37] {  # if_6
-                  %b36 = block {  # true
+                %158:i32 = load %x_158_phi
+                %x_158:i32 = let %158
+                %160:i32 = load %x_161_phi
+                %x_161:i32 = let %160
+                %162:bool = lt %x_161, 10i
+                %163:bool = lte %x_161, %x_126
+                %164:bool = and %162, %163
+                if %164 [t: $B36, f: $B37] {  # if_6
+                  $B36: {  # true
                     exit_if  # if_6
                   }
-                  %b37 = block {  # false
+                  $B37: {  # false
                     exit_loop  # loop_6
                   }
                 }
-                continue %b35
+                continue  # -> $B35
               }
-              %b35 = block {  # continuing
-                %138:i32 = add %x_158, 1i
-                store %x_159, %138
-                %139:i32 = add %x_161, 1i
-                store %x_162, %139
-                %140:ptr<function, i32, read_write> = access %data, %x_161
-                %x_168:i32 = load %140
-                %142:ptr<function, i32, read_write> = access %temp, %x_158
-                store %142, %x_168
-                %143:i32 = load %x_159
-                store %x_158_phi, %143
-                %144:i32 = load %x_162
-                store %x_161_phi, %144
-                next_iteration %b34
+              $B35: {  # continuing
+                %165:i32 = add %x_158, 1i
+                store %x_159, %165
+                %166:i32 = add %x_161, 1i
+                store %x_162, %166
+                %167:ptr<function, i32, read_write> = access %data, %x_161
+                %168:i32 = load %167
+                %x_168:i32 = let %168
+                %170:ptr<function, i32, read_write> = access %temp, %x_158
+                store %170, %x_168
+                %171:i32 = load %x_159
+                store %x_158_phi, %171
+                %172:i32 = load %x_162
+                store %x_161_phi, %172
+                next_iteration  # -> $B34
               }
             }
             store %x_171_phi, %x_119
-            loop [b: %b38, c: %b39] {  # loop_7
-              %b38 = block {  # body
+            loop [b: $B38, c: $B39] {  # loop_7
+              $B38: {  # body
                 %x_172:ptr<function, i32, read_write> = var
-                %x_171:i32 = load %x_171_phi
-                %147:bool = lte %x_171, %x_129
-                if %147 [t: %b40, f: %b41] {  # if_7
-                  %b40 = block {  # true
+                %174:i32 = load %x_171_phi
+                %x_171:i32 = let %174
+                %176:bool = lte %x_171, %x_129
+                if %176 [t: $B40, f: $B41] {  # if_7
+                  $B40: {  # true
                     exit_if  # if_7
                   }
-                  %b41 = block {  # false
+                  $B41: {  # false
                     exit_loop  # loop_7
                   }
                 }
-                continue %b39
+                continue  # -> $B39
               }
-              %b39 = block {  # continuing
-                %148:ptr<function, i32, read_write> = access %temp, %x_171
-                %x_177:i32 = load %148
-                %150:ptr<function, i32, read_write> = access %data, %x_171
-                store %150, %x_177
-                %151:i32 = add %x_171, 1i
-                store %x_172, %151
-                %152:i32 = load %x_172
-                store %x_171_phi, %152
-                next_iteration %b38
+              $B39: {  # continuing
+                %177:ptr<function, i32, read_write> = access %temp, %x_171
+                %178:i32 = load %177
+                %x_177:i32 = let %178
+                %180:ptr<function, i32, read_write> = access %data, %x_171
+                store %180, %x_177
+                %181:i32 = add %x_171, 1i
+                store %x_172, %181
+                %182:i32 = load %x_172
+                store %x_171_phi, %182
+                next_iteration  # -> $B38
               }
             }
-            continue %b25
+            continue  # -> $B25
           }
-          %b25 = block {  # continuing
+          $B25: {  # continuing
             store %x_119_phi, %x_120
-            next_iteration %b24
+            next_iteration  # -> $B24
           }
         }
-        continue %b21
+        continue  # -> $B21
       }
-      %b21 = block {  # continuing
-        %153:i32 = mul 2i, %x_112
-        store %x_113, %153
-        %154:i32 = load %x_113
-        store %x_112_phi, %154
-        next_iteration %b20
+      $B21: {  # continuing
+        %183:i32 = mul 2i, %x_112
+        store %x_113, %183
+        %184:i32 = load %x_113
+        store %x_112_phi, %184
+        next_iteration  # -> $B20
       }
     }
     %x_181:ptr<function, i32, read_write> = var
     %x_199:ptr<function, f32, read_write> = var
     %x_261:ptr<function, f32, read_write> = var
     %x_262_phi:ptr<function, f32, read_write> = var
-    %x_180:f32 = load_vector_element %gl_FragCoord, 1u
-    %160:i32 = convert %x_180
-    store %x_181, %160
-    %161:i32 = load %x_181
-    %162:bool = lt %161, 30i
-    if %162 [t: %b42, f: %b43] {  # if_8
-      %b42 = block {  # true
-        %163:ptr<function, i32, read_write> = access %data, 0i
-        %x_187:i32 = load %163
-        %165:f32 = convert %x_187
-        %166:f32 = mul %165, 0.10000000149011611938f
-        %167:f32 = add 0.5f, %166
-        store %x_190, %167
-        %168:f32 = load %x_190
-        store %x_263_phi, %168
+    %189:f32 = load_vector_element %gl_FragCoord, 1u
+    %x_180:f32 = let %189
+    %191:i32 = call %tint_f32_to_i32, %x_180
+    store %x_181, %191
+    %192:i32 = load %x_181
+    %193:bool = lt %192, 30i
+    if %193 [t: $B42, f: $B43] {  # if_8
+      $B42: {  # true
+        %194:ptr<function, i32, read_write> = access %data, 0i
+        %195:i32 = load %194
+        %x_187:i32 = let %195
+        %197:f32 = convert %x_187
+        %198:f32 = mul %197, 0.10000000149011611938f
+        %199:f32 = add 0.5f, %198
+        store %x_190, %199
+        %200:f32 = load %x_190
+        store %x_263_phi, %200
         exit_if  # if_8
       }
-      %b43 = block {  # false
+      $B43: {  # false
         %x_208:ptr<function, f32, read_write> = var
         %x_260:ptr<function, f32, read_write> = var
         %x_261_phi:ptr<function, f32, read_write> = var
-        %172:i32 = load %x_181
-        %173:bool = lt %172, 60i
-        if %173 [t: %b44, f: %b45] {  # if_9
-          %b44 = block {  # true
-            %174:ptr<function, i32, read_write> = access %data, 1i
-            %x_196:i32 = load %174
-            %176:f32 = convert %x_196
-            %177:f32 = mul %176, 0.10000000149011611938f
-            %178:f32 = add 0.5f, %177
-            store %x_199, %178
-            %179:f32 = load %x_199
-            store %x_262_phi, %179
+        %204:i32 = load %x_181
+        %205:bool = lt %204, 60i
+        if %205 [t: $B44, f: $B45] {  # if_9
+          $B44: {  # true
+            %206:ptr<function, i32, read_write> = access %data, 1i
+            %207:i32 = load %206
+            %x_196:i32 = let %207
+            %209:f32 = convert %x_196
+            %210:f32 = mul %209, 0.10000000149011611938f
+            %211:f32 = add 0.5f, %210
+            store %x_199, %211
+            %212:f32 = load %x_199
+            store %x_262_phi, %212
             exit_if  # if_9
           }
-          %b45 = block {  # false
+          $B45: {  # false
             %x_217:ptr<function, f32, read_write> = var
             %x_259:ptr<function, f32, read_write> = var
             %x_260_phi:ptr<function, f32, read_write> = var
-            %183:i32 = load %x_181
-            %184:bool = lt %183, 90i
-            if %184 [t: %b46, f: %b47] {  # if_10
-              %b46 = block {  # true
-                %185:ptr<function, i32, read_write> = access %data, 2i
-                %x_205:i32 = load %185
-                %187:f32 = convert %x_205
-                %188:f32 = mul %187, 0.10000000149011611938f
-                %189:f32 = add 0.5f, %188
-                store %x_208, %189
-                %190:f32 = load %x_208
-                store %x_261_phi, %190
+            %216:i32 = load %x_181
+            %217:bool = lt %216, 90i
+            if %217 [t: $B46, f: $B47] {  # if_10
+              $B46: {  # true
+                %218:ptr<function, i32, read_write> = access %data, 2i
+                %219:i32 = load %218
+                %x_205:i32 = let %219
+                %221:f32 = convert %x_205
+                %222:f32 = mul %221, 0.10000000149011611938f
+                %223:f32 = add 0.5f, %222
+                store %x_208, %223
+                %224:f32 = load %x_208
+                store %x_261_phi, %224
                 exit_if  # if_10
               }
-              %b47 = block {  # false
-                %191:i32 = load %x_181
-                %192:bool = lt %191, 120i
-                if %192 [t: %b48, f: %b49] {  # if_11
-                  %b48 = block {  # true
-                    %193:ptr<function, i32, read_write> = access %data, 3i
-                    %x_214:i32 = load %193
-                    %195:f32 = convert %x_214
-                    %196:f32 = mul %195, 0.10000000149011611938f
-                    %197:f32 = add 0.5f, %196
-                    store %x_217, %197
-                    %198:f32 = load %x_217
-                    store %x_260_phi, %198
+              $B47: {  # false
+                %225:i32 = load %x_181
+                %226:bool = lt %225, 120i
+                if %226 [t: $B48, f: $B49] {  # if_11
+                  $B48: {  # true
+                    %227:ptr<function, i32, read_write> = access %data, 3i
+                    %228:i32 = load %227
+                    %x_214:i32 = let %228
+                    %230:f32 = convert %x_214
+                    %231:f32 = mul %230, 0.10000000149011611938f
+                    %232:f32 = add 0.5f, %231
+                    store %x_217, %232
+                    %233:f32 = load %x_217
+                    store %x_260_phi, %233
                     exit_if  # if_11
                   }
-                  %b49 = block {  # false
+                  $B49: {  # false
                     %x_230:ptr<function, f32, read_write> = var
                     %x_258:ptr<function, f32, read_write> = var
                     %x_259_phi:ptr<function, f32, read_write> = var
-                    %202:i32 = load %x_181
-                    %203:bool = lt %202, 150i
-                    if %203 [t: %b50, f: %b51] {  # if_12
-                      %b50 = block {  # true
-                        discard
+                    %237:i32 = load %x_181
+                    %238:bool = lt %237, 150i
+                    if %238 [t: $B50, f: $B51] {  # if_12
+                      $B50: {  # true
+                        store %continue_execution, false
                         exit_if  # if_12
                       }
-                      %b51 = block {  # false
+                      $B51: {  # false
                         %x_239:ptr<function, f32, read_write> = var
                         %x_257:ptr<function, f32, read_write> = var
                         %x_258_phi:ptr<function, f32, read_write> = var
-                        %207:i32 = load %x_181
-                        %208:bool = lt %207, 180i
-                        if %208 [t: %b52, f: %b53] {  # if_13
-                          %b52 = block {  # true
-                            %209:ptr<function, i32, read_write> = access %data, 5i
-                            %x_227:i32 = load %209
-                            %211:f32 = convert %x_227
-                            %212:f32 = mul %211, 0.10000000149011611938f
-                            %213:f32 = add 0.5f, %212
-                            store %x_230, %213
-                            %214:f32 = load %x_230
-                            store %x_259_phi, %214
+                        %242:i32 = load %x_181
+                        %243:bool = lt %242, 180i
+                        if %243 [t: $B52, f: $B53] {  # if_13
+                          $B52: {  # true
+                            %244:ptr<function, i32, read_write> = access %data, 5i
+                            %245:i32 = load %244
+                            %x_227:i32 = let %245
+                            %247:f32 = convert %x_227
+                            %248:f32 = mul %247, 0.10000000149011611938f
+                            %249:f32 = add 0.5f, %248
+                            store %x_230, %249
+                            %250:f32 = load %x_230
+                            store %x_259_phi, %250
                             exit_if  # if_13
                           }
-                          %b53 = block {  # false
+                          $B53: {  # false
                             %x_248:ptr<function, f32, read_write> = var
                             %x_256:ptr<function, f32, read_write> = var
                             %x_257_phi:ptr<function, f32, read_write> = var
-                            %218:i32 = load %x_181
-                            %219:bool = lt %218, 210i
-                            if %219 [t: %b54, f: %b55] {  # if_14
-                              %b54 = block {  # true
-                                %220:ptr<function, i32, read_write> = access %data, 6i
-                                %x_236:i32 = load %220
-                                %222:f32 = convert %x_236
-                                %223:f32 = mul %222, 0.10000000149011611938f
-                                %224:f32 = add 0.5f, %223
-                                store %x_239, %224
-                                %225:f32 = load %x_239
-                                store %x_258_phi, %225
+                            %254:i32 = load %x_181
+                            %255:bool = lt %254, 210i
+                            if %255 [t: $B54, f: $B55] {  # if_14
+                              $B54: {  # true
+                                %256:ptr<function, i32, read_write> = access %data, 6i
+                                %257:i32 = load %256
+                                %x_236:i32 = let %257
+                                %259:f32 = convert %x_236
+                                %260:f32 = mul %259, 0.10000000149011611938f
+                                %261:f32 = add 0.5f, %260
+                                store %x_239, %261
+                                %262:f32 = load %x_239
+                                store %x_258_phi, %262
                                 exit_if  # if_14
                               }
-                              %b55 = block {  # false
-                                %226:i32 = load %x_181
-                                %227:bool = lt %226, 240i
-                                if %227 [t: %b56, f: %b57] {  # if_15
-                                  %b56 = block {  # true
-                                    %228:ptr<function, i32, read_write> = access %data, 7i
-                                    %x_245:i32 = load %228
-                                    %230:f32 = convert %x_245
-                                    %231:f32 = mul %230, 0.10000000149011611938f
-                                    %232:f32 = add 0.5f, %231
-                                    store %x_248, %232
-                                    %233:f32 = load %x_248
-                                    store %x_257_phi, %233
+                              $B55: {  # false
+                                %263:i32 = load %x_181
+                                %264:bool = lt %263, 240i
+                                if %264 [t: $B56, f: $B57] {  # if_15
+                                  $B56: {  # true
+                                    %265:ptr<function, i32, read_write> = access %data, 7i
+                                    %266:i32 = load %265
+                                    %x_245:i32 = let %266
+                                    %268:f32 = convert %x_245
+                                    %269:f32 = mul %268, 0.10000000149011611938f
+                                    %270:f32 = add 0.5f, %269
+                                    store %x_248, %270
+                                    %271:f32 = load %x_248
+                                    store %x_257_phi, %271
                                     exit_if  # if_15
                                   }
-                                  %b57 = block {  # false
-                                    %234:i32 = load %x_181
-                                    %235:bool = lt %234, 270i
-                                    if %235 [t: %b58, f: %b59] {  # if_16
-                                      %b58 = block {  # true
+                                  $B57: {  # false
+                                    %272:i32 = load %x_181
+                                    %273:bool = lt %272, 270i
+                                    if %273 [t: $B58, f: $B59] {  # if_16
+                                      $B58: {  # true
                                         exit_if  # if_16
                                       }
-                                      %b59 = block {  # false
-                                        discard
+                                      $B59: {  # false
+                                        store %continue_execution, false
                                         exit_if  # if_16
                                       }
                                     }
-                                    %236:ptr<function, i32, read_write> = access %data, 8i
-                                    %x_253:i32 = load %236
-                                    %238:f32 = convert %x_253
-                                    %239:f32 = mul %238, 0.10000000149011611938f
-                                    %240:f32 = add 0.5f, %239
-                                    store %x_256, %240
-                                    %241:f32 = load %x_256
-                                    store %x_257_phi, %241
+                                    %274:ptr<function, i32, read_write> = access %data, 8i
+                                    %275:i32 = load %274
+                                    %x_253:i32 = let %275
+                                    %277:f32 = convert %x_253
+                                    %278:f32 = mul %277, 0.10000000149011611938f
+                                    %279:f32 = add 0.5f, %278
+                                    store %x_256, %279
+                                    %280:f32 = load %x_256
+                                    store %x_257_phi, %280
                                     exit_if  # if_15
                                   }
                                 }
-                                %242:f32 = load %x_257_phi
-                                store %x_257, %242
-                                %243:f32 = load %x_257
-                                store %x_258_phi, %243
+                                %281:f32 = load %x_257_phi
+                                store %x_257, %281
+                                %282:f32 = load %x_257
+                                store %x_258_phi, %282
                                 exit_if  # if_14
                               }
                             }
-                            %244:f32 = load %x_258_phi
-                            store %x_258, %244
-                            %245:f32 = load %x_258
-                            store %x_259_phi, %245
+                            %283:f32 = load %x_258_phi
+                            store %x_258, %283
+                            %284:f32 = load %x_258
+                            store %x_259_phi, %284
                             exit_if  # if_13
                           }
                         }
-                        %246:f32 = load %x_259_phi
-                        store %x_259, %246
+                        %285:f32 = load %x_259_phi
+                        store %x_259, %285
                         exit_if  # if_12
                       }
                     }
-                    %247:f32 = load %x_259
-                    store %x_260_phi, %247
+                    %286:f32 = load %x_259
+                    store %x_260_phi, %286
                     exit_if  # if_11
                   }
                 }
-                %248:f32 = load %x_260_phi
-                store %x_260, %248
-                %249:f32 = load %x_260
-                store %x_261_phi, %249
+                %287:f32 = load %x_260_phi
+                store %x_260, %287
+                %288:f32 = load %x_260
+                store %x_261_phi, %288
                 exit_if  # if_10
               }
             }
-            %250:f32 = load %x_261_phi
-            store %x_261, %250
-            %251:f32 = load %x_261
-            store %x_262_phi, %251
+            %289:f32 = load %x_261_phi
+            store %x_261, %289
+            %290:f32 = load %x_261
+            store %x_262_phi, %290
             exit_if  # if_9
           }
         }
-        %252:f32 = load %x_262_phi
-        store %x_262, %252
-        %253:f32 = load %x_262
-        store %x_263_phi, %253
+        %291:f32 = load %x_262_phi
+        store %x_262, %291
+        %292:f32 = load %x_262
+        store %x_263_phi, %292
         exit_if  # if_8
       }
     }
-    %x_263:f32 = load %x_263_phi
-    %255:vec4<f32> = construct %x_263, %x_263, %x_263, 1.0f
-    store %x_GLF_color, %255
+    %293:f32 = load %x_263_phi
+    %x_263:f32 = let %293
+    %295:vec4<f32> = construct %x_263, %x_263, %x_263, 1.0f
+    store %x_GLF_color, %295
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b60 {
-  %b60 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B60: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %258:void = call %main_1
-    %259:vec4<f32> = load %x_GLF_color
-    %260:main_out = construct %259
-    ret %260
+    %298:void = call %main_1
+    %299:vec4<f32> = load %x_GLF_color
+    %300:main_out = construct %299
+    %301:bool = load %continue_execution
+    %302:bool = eq %301, false
+    if %302 [t: $B61] {  # if_17
+      $B61: {  # true
+        terminate_invocation
+      }
+    }
+    ret %300
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B62: {
+    %304:i32 = convert %value
+    %305:bool = gte %value, -2147483648.0f
+    %306:i32 = select -2147483648i, %304, %305
+    %307:bool = lte %value, 2147483520.0f
+    %308:i32 = select 2147483647i, %306, %307
+    ret %308
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/2.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/2.spvasm.expected.ir.msl
index 18d1c87..55888a5 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/2.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/2.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,14 +8,15 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_8:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %temp:ptr<function, array<i32, 10>, read_write> = var
     %data:ptr<function, array<i32, 10>, read_write> = var
     %x_63:ptr<function, i32, read_write> = var
@@ -24,12 +25,12 @@
     %x_189:ptr<function, f32, read_write> = var
     %x_261:ptr<function, f32, read_write> = var
     %x_262:ptr<function, f32, read_write> = var
-    %13:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
-    %14:f32 = load_vector_element %13, 0u
-    %15:i32 = convert %14
-    store %x_63, %15
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    %14:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
+    %15:f32 = load_vector_element %14, 0u
+    %16:i32 = call %tint_f32_to_i32, %15
+    store %x_63, %16
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %x_99:ptr<function, i32, read_write> = var
         %x_97:ptr<function, i32, read_write> = var
         %x_95:ptr<function, i32, read_write> = var
@@ -41,581 +42,605 @@
         %x_83:ptr<function, i32, read_write> = var
         %x_81:ptr<function, i32, read_write> = var
         %x_64:ptr<function, i32, read_write> = var
-        %27:i32 = load %x_63
-        %28:i32 = add %27, 1i
-        store %x_64, %28
         %29:i32 = load %x_63
-        switch %29 [c: (9i, %b5), c: (8i, %b6), c: (7i, %b7), c: (6i, %b8), c: (5i, %b9), c: (4i, %b10), c: (3i, %b11), c: (2i, %b12), c: (1i, %b13), c: (0i, %b14), c: (default, %b15)] {  # switch_1
-          %b5 = block {  # case
-            %30:i32 = load %x_63
-            %31:ptr<function, i32, read_write> = access %data, %30
-            store %31, -5i
+        %30:i32 = add %29, 1i
+        store %x_64, %30
+        %31:i32 = load %x_63
+        switch %31 [c: (9i, $B5), c: (8i, $B6), c: (7i, $B7), c: (6i, $B8), c: (5i, $B9), c: (4i, $B10), c: (3i, $B11), c: (2i, $B12), c: (1i, $B13), c: (0i, $B14), c: (default, $B15)] {  # switch_1
+          $B5: {  # case
             %32:i32 = load %x_63
-            %33:i32 = add %32, 1i
-            store %x_99, %33
-            %34:i32 = load %x_99
-            store %x_64, %34
+            %33:ptr<function, i32, read_write> = access %data, %32
+            store %33, -5i
+            %34:i32 = load %x_63
+            %35:i32 = add %34, 1i
+            store %x_99, %35
+            %36:i32 = load %x_99
+            store %x_64, %36
             exit_switch  # switch_1
           }
-          %b6 = block {  # case
-            %35:i32 = load %x_63
-            %36:ptr<function, i32, read_write> = access %data, %35
-            store %36, -4i
+          $B6: {  # case
             %37:i32 = load %x_63
-            %38:i32 = add %37, 1i
-            store %x_97, %38
-            %39:i32 = load %x_97
-            store %x_64, %39
+            %38:ptr<function, i32, read_write> = access %data, %37
+            store %38, -4i
+            %39:i32 = load %x_63
+            %40:i32 = add %39, 1i
+            store %x_97, %40
+            %41:i32 = load %x_97
+            store %x_64, %41
             exit_switch  # switch_1
           }
-          %b7 = block {  # case
-            %40:i32 = load %x_63
-            %41:ptr<function, i32, read_write> = access %data, %40
-            store %41, -3i
+          $B7: {  # case
             %42:i32 = load %x_63
-            %43:i32 = add %42, 1i
-            store %x_95, %43
-            %44:i32 = load %x_95
-            store %x_64, %44
+            %43:ptr<function, i32, read_write> = access %data, %42
+            store %43, -3i
+            %44:i32 = load %x_63
+            %45:i32 = add %44, 1i
+            store %x_95, %45
+            %46:i32 = load %x_95
+            store %x_64, %46
             exit_switch  # switch_1
           }
-          %b8 = block {  # case
-            %45:i32 = load %x_63
-            %46:ptr<function, i32, read_write> = access %data, %45
-            store %46, -2i
+          $B8: {  # case
             %47:i32 = load %x_63
-            %48:i32 = add %47, 1i
-            store %x_93, %48
-            %49:i32 = load %x_93
-            store %x_64, %49
+            %48:ptr<function, i32, read_write> = access %data, %47
+            store %48, -2i
+            %49:i32 = load %x_63
+            %50:i32 = add %49, 1i
+            store %x_93, %50
+            %51:i32 = load %x_93
+            store %x_64, %51
             exit_switch  # switch_1
           }
-          %b9 = block {  # case
-            %50:i32 = load %x_63
-            %51:ptr<function, i32, read_write> = access %data, %50
-            store %51, -1i
+          $B9: {  # case
             %52:i32 = load %x_63
-            %53:i32 = add %52, 1i
-            store %x_91, %53
-            %54:i32 = load %x_91
-            store %x_64, %54
+            %53:ptr<function, i32, read_write> = access %data, %52
+            store %53, -1i
+            %54:i32 = load %x_63
+            %55:i32 = add %54, 1i
+            store %x_91, %55
+            %56:i32 = load %x_91
+            store %x_64, %56
             exit_switch  # switch_1
           }
-          %b10 = block {  # case
-            %55:i32 = load %x_63
-            %56:ptr<function, i32, read_write> = access %data, %55
-            store %56, 0i
+          $B10: {  # case
             %57:i32 = load %x_63
-            %58:i32 = add %57, 1i
-            store %x_89, %58
-            %59:i32 = load %x_89
-            store %x_64, %59
+            %58:ptr<function, i32, read_write> = access %data, %57
+            store %58, 0i
+            %59:i32 = load %x_63
+            %60:i32 = add %59, 1i
+            store %x_89, %60
+            %61:i32 = load %x_89
+            store %x_64, %61
             exit_switch  # switch_1
           }
-          %b11 = block {  # case
-            %60:i32 = load %x_63
-            %61:ptr<function, i32, read_write> = access %data, %60
-            store %61, 1i
+          $B11: {  # case
             %62:i32 = load %x_63
-            %63:i32 = add %62, 1i
-            store %x_87, %63
-            %64:i32 = load %x_87
-            store %x_64, %64
+            %63:ptr<function, i32, read_write> = access %data, %62
+            store %63, 1i
+            %64:i32 = load %x_63
+            %65:i32 = add %64, 1i
+            store %x_87, %65
+            %66:i32 = load %x_87
+            store %x_64, %66
             exit_switch  # switch_1
           }
-          %b12 = block {  # case
-            %65:i32 = load %x_63
-            %66:ptr<function, i32, read_write> = access %data, %65
-            store %66, 2i
+          $B12: {  # case
             %67:i32 = load %x_63
-            %68:i32 = add %67, 1i
-            store %x_85, %68
-            %69:i32 = load %x_85
-            store %x_64, %69
+            %68:ptr<function, i32, read_write> = access %data, %67
+            store %68, 2i
+            %69:i32 = load %x_63
+            %70:i32 = add %69, 1i
+            store %x_85, %70
+            %71:i32 = load %x_85
+            store %x_64, %71
             exit_switch  # switch_1
           }
-          %b13 = block {  # case
-            %70:i32 = load %x_63
-            %71:ptr<function, i32, read_write> = access %data, %70
-            store %71, 3i
+          $B13: {  # case
             %72:i32 = load %x_63
-            %73:i32 = add %72, 1i
-            store %x_83, %73
-            %74:i32 = load %x_83
-            store %x_64, %74
+            %73:ptr<function, i32, read_write> = access %data, %72
+            store %73, 3i
+            %74:i32 = load %x_63
+            %75:i32 = add %74, 1i
+            store %x_83, %75
+            %76:i32 = load %x_83
+            store %x_64, %76
             exit_switch  # switch_1
           }
-          %b14 = block {  # case
-            %75:i32 = load %x_63
-            %76:ptr<function, i32, read_write> = access %data, %75
-            store %76, 4i
+          $B14: {  # case
             %77:i32 = load %x_63
-            %78:i32 = add %77, 1i
-            store %x_81, %78
-            %79:i32 = load %x_81
-            store %x_64, %79
+            %78:ptr<function, i32, read_write> = access %data, %77
+            store %78, 4i
+            %79:i32 = load %x_63
+            %80:i32 = add %79, 1i
+            store %x_81, %80
+            %81:i32 = load %x_81
+            store %x_64, %81
             exit_switch  # switch_1
           }
-          %b15 = block {  # case
+          $B15: {  # case
             exit_switch  # switch_1
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %80:i32 = load %x_64
-        store %x_63, %80
-        %81:i32 = load %x_64
-        %82:bool = lt %81, 10i
-        %83:bool = eq %82, false
-        break_if %83 %b3
+      $B4: {  # continuing
+        %82:i32 = load %x_64
+        store %x_63, %82
+        %83:i32 = load %x_64
+        %84:bool = lt %83, 10i
+        %85:bool = eq %84, false
+        break_if %85  # -> [t: exit_loop loop_1, f: $B3]
       }
     }
     store %x_102, 0i
-    loop [b: %b16, c: %b17] {  # loop_2
-      %b16 = block {  # body
+    loop [b: $B16, c: $B17] {  # loop_2
+      $B16: {  # body
         %x_103:ptr<function, i32, read_write> = var
-        %85:i32 = load %x_102
-        %86:bool = lt %85, 10i
-        if %86 [t: %b18, f: %b19] {  # if_1
-          %b18 = block {  # true
+        %87:i32 = load %x_102
+        %88:bool = lt %87, 10i
+        if %88 [t: $B18, f: $B19] {  # if_1
+          $B18: {  # true
             exit_if  # if_1
           }
-          %b19 = block {  # false
+          $B19: {  # false
             exit_loop  # loop_2
           }
         }
-        continue %b17
+        continue  # -> $B17
       }
-      %b17 = block {  # continuing
-        %87:i32 = load %x_102
-        %88:ptr<function, i32, read_write> = access %temp, %87
+      $B17: {  # continuing
         %89:i32 = load %x_102
-        %90:ptr<function, i32, read_write> = access %data, %89
-        %91:i32 = load %90
-        store %88, %91
-        %92:i32 = load %x_102
-        %93:i32 = add %92, 1i
-        store %x_103, %93
-        %94:i32 = load %x_103
-        store %x_102, %94
-        next_iteration %b16
+        %90:ptr<function, i32, read_write> = access %temp, %89
+        %91:i32 = load %x_102
+        %92:ptr<function, i32, read_write> = access %data, %91
+        %93:i32 = load %92
+        store %90, %93
+        %94:i32 = load %x_102
+        %95:i32 = add %94, 1i
+        store %x_103, %95
+        %96:i32 = load %x_103
+        store %x_102, %96
+        next_iteration  # -> $B16
       }
     }
     store %x_111, 1i
-    loop [b: %b20, c: %b21] {  # loop_3
-      %b20 = block {  # body
+    loop [b: $B20, c: $B21] {  # loop_3
+      $B20: {  # body
         %x_118:ptr<function, i32, read_write> = var
         %x_112:ptr<function, i32, read_write> = var
-        %97:i32 = load %x_111
-        %98:bool = lte %97, 9i
-        if %98 [t: %b22, f: %b23] {  # if_2
-          %b22 = block {  # true
+        %99:i32 = load %x_111
+        %100:bool = lte %99, 9i
+        if %100 [t: $B22, f: $B23] {  # if_2
+          $B22: {  # true
             exit_if  # if_2
           }
-          %b23 = block {  # false
+          $B23: {  # false
             exit_loop  # loop_3
           }
         }
         store %x_118, 0i
-        loop [b: %b24, c: %b25] {  # loop_4
-          %b24 = block {  # body
+        loop [b: $B24, c: $B25] {  # loop_4
+          $B24: {  # body
             %x_130:ptr<function, i32, read_write> = var
             %x_133:ptr<function, i32, read_write> = var
             %x_135:ptr<function, i32, read_write> = var
             %x_157:ptr<function, i32, read_write> = var
             %x_160:ptr<function, i32, read_write> = var
             %x_170:ptr<function, i32, read_write> = var
-            %105:i32 = load %x_118
-            %106:bool = lt %105, 9i
-            if %106 [t: %b26, f: %b27] {  # if_3
-              %b26 = block {  # true
+            %107:i32 = load %x_118
+            %108:bool = lt %107, 9i
+            if %108 [t: $B26, f: $B27] {  # if_3
+              $B26: {  # true
                 exit_if  # if_3
               }
-              %b27 = block {  # false
+              $B27: {  # false
                 exit_loop  # loop_4
               }
             }
-            %107:i32 = load %x_118
-            %108:i32 = load %x_111
-            %x_124:i32 = add %107, %108
-            %x_125:i32 = sub %x_124, 1i
-            %111:i32 = load %x_118
-            %112:i32 = load %x_111
-            %113:i32 = mul 2i, %112
-            %x_119:i32 = add %111, %113
-            %115:i32 = sub %x_119, 1i
-            %x_128:i32 = min %115, 9i
-            %117:i32 = load %x_118
-            store %x_130, %117
+            %109:i32 = load %x_118
+            %110:i32 = load %x_111
+            %111:i32 = add %109, %110
+            %x_124:i32 = let %111
+            %113:i32 = sub %x_124, 1i
+            %x_125:i32 = let %113
+            %115:i32 = load %x_118
+            %116:i32 = load %x_111
+            %117:i32 = mul 2i, %116
+            %118:i32 = add %115, %117
+            %x_119:i32 = let %118
+            %120:i32 = sub %x_119, 1i
+            %121:i32 = min %120, 9i
+            %x_128:i32 = let %121
+            %123:i32 = load %x_118
+            store %x_130, %123
             store %x_133, %x_124
-            %118:i32 = load %x_118
-            store %x_135, %118
-            loop [b: %b28, c: %b29] {  # loop_5
-              %b28 = block {  # body
+            %124:i32 = load %x_118
+            store %x_135, %124
+            loop [b: $B28, c: $B29] {  # loop_5
+              $B28: {  # body
                 %x_150:ptr<function, i32, read_write> = var
                 %x_153:ptr<function, i32, read_write> = var
                 %x_134:ptr<function, i32, read_write> = var
                 %x_136:ptr<function, i32, read_write> = var
-                %123:i32 = load %x_135
-                %124:bool = lte %123, %x_125
-                %125:i32 = load %x_133
-                %126:bool = lte %125, %x_128
-                %127:bool = and %124, %126
-                if %127 [t: %b30, f: %b31] {  # if_4
-                  %b30 = block {  # true
+                %129:i32 = load %x_135
+                %130:bool = lte %129, %x_125
+                %131:i32 = load %x_133
+                %132:bool = lte %131, %x_128
+                %133:bool = and %130, %132
+                if %133 [t: $B30, f: $B31] {  # if_4
+                  $B30: {  # true
                     exit_if  # if_4
                   }
-                  %b31 = block {  # false
+                  $B31: {  # false
                     exit_loop  # loop_5
                   }
                 }
-                %x_142_save:i32 = load %x_135
-                %x_144_save:i32 = load %x_133
-                %130:i32 = load %x_130
-                %x_131:i32 = add %130, 1i
-                %132:i32 = load %x_135
-                %133:ptr<function, i32, read_write> = access %data, %132
-                %134:i32 = load %133
-                %135:i32 = load %x_133
-                %136:ptr<function, i32, read_write> = access %data, %135
-                %137:i32 = load %136
-                %138:bool = lt %134, %137
-                if %138 [t: %b32, f: %b33] {  # if_5
-                  %b32 = block {  # true
-                    %139:i32 = load %x_135
-                    %140:i32 = add %139, 1i
-                    store %x_150, %140
-                    %141:i32 = load %x_130
-                    %142:ptr<function, i32, read_write> = access %temp, %141
-                    %143:ptr<function, i32, read_write> = access %data, %x_142_save
-                    %144:i32 = load %143
-                    store %142, %144
-                    %145:i32 = load %x_133
-                    store %x_134, %145
-                    %146:i32 = load %x_150
-                    store %x_136, %146
+                %134:i32 = load %x_135
+                %x_142_save:i32 = let %134
+                %136:i32 = load %x_133
+                %x_144_save:i32 = let %136
+                %138:i32 = load %x_130
+                %139:i32 = add %138, 1i
+                %x_131:i32 = let %139
+                %141:i32 = load %x_135
+                %142:ptr<function, i32, read_write> = access %data, %141
+                %143:i32 = load %142
+                %144:i32 = load %x_133
+                %145:ptr<function, i32, read_write> = access %data, %144
+                %146:i32 = load %145
+                %147:bool = lt %143, %146
+                if %147 [t: $B32, f: $B33] {  # if_5
+                  $B32: {  # true
+                    %148:i32 = load %x_135
+                    %149:i32 = add %148, 1i
+                    store %x_150, %149
+                    %150:i32 = load %x_130
+                    %151:ptr<function, i32, read_write> = access %temp, %150
+                    %152:ptr<function, i32, read_write> = access %data, %x_142_save
+                    %153:i32 = load %152
+                    store %151, %153
+                    %154:i32 = load %x_133
+                    store %x_134, %154
+                    %155:i32 = load %x_150
+                    store %x_136, %155
                     exit_if  # if_5
                   }
-                  %b33 = block {  # false
-                    %147:i32 = load %x_133
-                    %148:i32 = add %147, 1i
-                    store %x_153, %148
-                    %149:i32 = load %x_130
-                    %150:ptr<function, i32, read_write> = access %temp, %149
-                    %151:ptr<function, i32, read_write> = access %data, %x_144_save
-                    %152:i32 = load %151
-                    store %150, %152
-                    %153:i32 = load %x_153
-                    store %x_134, %153
-                    %154:i32 = load %x_135
-                    store %x_136, %154
+                  $B33: {  # false
+                    %156:i32 = load %x_133
+                    %157:i32 = add %156, 1i
+                    store %x_153, %157
+                    %158:i32 = load %x_130
+                    %159:ptr<function, i32, read_write> = access %temp, %158
+                    %160:ptr<function, i32, read_write> = access %data, %x_144_save
+                    %161:i32 = load %160
+                    store %159, %161
+                    %162:i32 = load %x_153
+                    store %x_134, %162
+                    %163:i32 = load %x_135
+                    store %x_136, %163
                     exit_if  # if_5
                   }
                 }
-                continue %b29
+                continue  # -> $B29
               }
-              %b29 = block {  # continuing
+              $B29: {  # continuing
                 store %x_130, %x_131
-                %155:i32 = load %x_134
-                store %x_133, %155
-                %156:i32 = load %x_136
-                store %x_135, %156
-                next_iteration %b28
+                %164:i32 = load %x_134
+                store %x_133, %164
+                %165:i32 = load %x_136
+                store %x_135, %165
+                next_iteration  # -> $B28
               }
             }
-            %157:i32 = load %x_130
-            store %x_157, %157
-            %158:i32 = load %x_135
-            store %x_160, %158
-            loop [b: %b34, c: %b35] {  # loop_6
-              %b34 = block {  # body
+            %166:i32 = load %x_130
+            store %x_157, %166
+            %167:i32 = load %x_135
+            store %x_160, %167
+            loop [b: $B34, c: $B35] {  # loop_6
+              $B34: {  # body
                 %x_158:ptr<function, i32, read_write> = var
                 %x_161:ptr<function, i32, read_write> = var
-                %161:i32 = load %x_160
-                %162:bool = lt %161, 10i
-                %163:i32 = load %x_160
-                %164:bool = lte %163, %x_125
-                %165:bool = and %162, %164
-                if %165 [t: %b36, f: %b37] {  # if_6
-                  %b36 = block {  # true
+                %170:i32 = load %x_160
+                %171:bool = lt %170, 10i
+                %172:i32 = load %x_160
+                %173:bool = lte %172, %x_125
+                %174:bool = and %171, %173
+                if %174 [t: $B36, f: $B37] {  # if_6
+                  $B36: {  # true
                     exit_if  # if_6
                   }
-                  %b37 = block {  # false
+                  $B37: {  # false
                     exit_loop  # loop_6
                   }
                 }
-                continue %b35
+                continue  # -> $B35
               }
-              %b35 = block {  # continuing
-                %166:i32 = load %x_157
-                %167:i32 = add %166, 1i
-                store %x_158, %167
-                %168:i32 = load %x_160
-                %169:i32 = add %168, 1i
-                store %x_161, %169
-                %170:i32 = load %x_157
-                %171:ptr<function, i32, read_write> = access %temp, %170
-                %172:i32 = load %x_160
-                %173:ptr<function, i32, read_write> = access %data, %172
-                %174:i32 = load %173
-                store %171, %174
-                %175:i32 = load %x_158
-                store %x_157, %175
-                %176:i32 = load %x_161
-                store %x_160, %176
-                next_iteration %b34
+              $B35: {  # continuing
+                %175:i32 = load %x_157
+                %176:i32 = add %175, 1i
+                store %x_158, %176
+                %177:i32 = load %x_160
+                %178:i32 = add %177, 1i
+                store %x_161, %178
+                %179:i32 = load %x_157
+                %180:ptr<function, i32, read_write> = access %temp, %179
+                %181:i32 = load %x_160
+                %182:ptr<function, i32, read_write> = access %data, %181
+                %183:i32 = load %182
+                store %180, %183
+                %184:i32 = load %x_158
+                store %x_157, %184
+                %185:i32 = load %x_161
+                store %x_160, %185
+                next_iteration  # -> $B34
               }
             }
-            %177:i32 = load %x_118
-            store %x_170, %177
-            loop [b: %b38, c: %b39] {  # loop_7
-              %b38 = block {  # body
+            %186:i32 = load %x_118
+            store %x_170, %186
+            loop [b: $B38, c: $B39] {  # loop_7
+              $B38: {  # body
                 %x_171:ptr<function, i32, read_write> = var
-                %179:i32 = load %x_170
-                %180:bool = lte %179, %x_128
-                if %180 [t: %b40, f: %b41] {  # if_7
-                  %b40 = block {  # true
+                %188:i32 = load %x_170
+                %189:bool = lte %188, %x_128
+                if %189 [t: $B40, f: $B41] {  # if_7
+                  $B40: {  # true
                     exit_if  # if_7
                   }
-                  %b41 = block {  # false
+                  $B41: {  # false
                     exit_loop  # loop_7
                   }
                 }
-                continue %b39
+                continue  # -> $B39
               }
-              %b39 = block {  # continuing
-                %181:i32 = load %x_170
-                %182:ptr<function, i32, read_write> = access %data, %181
-                %183:i32 = load %x_170
-                %184:ptr<function, i32, read_write> = access %temp, %183
-                %185:i32 = load %184
-                store %182, %185
-                %186:i32 = load %x_170
-                %187:i32 = add %186, 1i
-                store %x_171, %187
-                %188:i32 = load %x_171
-                store %x_170, %188
-                next_iteration %b38
+              $B39: {  # continuing
+                %190:i32 = load %x_170
+                %191:ptr<function, i32, read_write> = access %data, %190
+                %192:i32 = load %x_170
+                %193:ptr<function, i32, read_write> = access %temp, %192
+                %194:i32 = load %193
+                store %191, %194
+                %195:i32 = load %x_170
+                %196:i32 = add %195, 1i
+                store %x_171, %196
+                %197:i32 = load %x_171
+                store %x_170, %197
+                next_iteration  # -> $B38
               }
             }
-            continue %b25
+            continue  # -> $B25
           }
-          %b25 = block {  # continuing
+          $B25: {  # continuing
             store %x_118, %x_119
-            next_iteration %b24
+            next_iteration  # -> $B24
           }
         }
-        continue %b21
+        continue  # -> $B21
       }
-      %b21 = block {  # continuing
-        %189:i32 = load %x_111
-        %190:i32 = mul 2i, %189
-        store %x_112, %190
-        %191:i32 = load %x_112
-        store %x_111, %191
-        next_iteration %b20
+      $B21: {  # continuing
+        %198:i32 = load %x_111
+        %199:i32 = mul 2i, %198
+        store %x_112, %199
+        %200:i32 = load %x_112
+        store %x_111, %200
+        next_iteration  # -> $B20
       }
     }
     %x_180:ptr<function, i32, read_write> = var
     %x_198:ptr<function, f32, read_write> = var
     %x_260:ptr<function, f32, read_write> = var
-    %195:f32 = load_vector_element %gl_FragCoord, 1u
-    %196:i32 = convert %195
-    store %x_180, %196
-    %197:i32 = load %x_180
-    %198:bool = lt %197, 30i
-    if %198 [t: %b42, f: %b43] {  # if_8
-      %b42 = block {  # true
-        %199:ptr<function, i32, read_write> = access %data, 0i
-        %200:i32 = load %199
-        %201:f32 = convert %200
-        %202:f32 = mul %201, 0.10000000149011611938f
-        %203:f32 = add 0.5f, %202
-        store %x_189, %203
-        %204:f32 = load %x_189
-        store %x_262, %204
+    %204:f32 = load_vector_element %gl_FragCoord, 1u
+    %205:i32 = call %tint_f32_to_i32, %204
+    store %x_180, %205
+    %206:i32 = load %x_180
+    %207:bool = lt %206, 30i
+    if %207 [t: $B42, f: $B43] {  # if_8
+      $B42: {  # true
+        %208:ptr<function, i32, read_write> = access %data, 0i
+        %209:i32 = load %208
+        %210:f32 = convert %209
+        %211:f32 = mul %210, 0.10000000149011611938f
+        %212:f32 = add 0.5f, %211
+        store %x_189, %212
+        %213:f32 = load %x_189
+        store %x_262, %213
         exit_if  # if_8
       }
-      %b43 = block {  # false
+      $B43: {  # false
         %x_207:ptr<function, f32, read_write> = var
         %x_259:ptr<function, f32, read_write> = var
-        %207:i32 = load %x_180
-        %208:bool = lt %207, 60i
-        if %208 [t: %b44, f: %b45] {  # if_9
-          %b44 = block {  # true
-            %209:ptr<function, i32, read_write> = access %data, 1i
-            %210:i32 = load %209
-            %211:f32 = convert %210
-            %212:f32 = mul %211, 0.10000000149011611938f
-            %213:f32 = add 0.5f, %212
-            store %x_198, %213
-            %214:f32 = load %x_198
-            store %x_261, %214
+        %216:i32 = load %x_180
+        %217:bool = lt %216, 60i
+        if %217 [t: $B44, f: $B45] {  # if_9
+          $B44: {  # true
+            %218:ptr<function, i32, read_write> = access %data, 1i
+            %219:i32 = load %218
+            %220:f32 = convert %219
+            %221:f32 = mul %220, 0.10000000149011611938f
+            %222:f32 = add 0.5f, %221
+            store %x_198, %222
+            %223:f32 = load %x_198
+            store %x_261, %223
             exit_if  # if_9
           }
-          %b45 = block {  # false
+          $B45: {  # false
             %x_216:ptr<function, f32, read_write> = var
             %x_258:ptr<function, f32, read_write> = var
-            %217:i32 = load %x_180
-            %218:bool = lt %217, 90i
-            if %218 [t: %b46, f: %b47] {  # if_10
-              %b46 = block {  # true
-                %219:ptr<function, i32, read_write> = access %data, 2i
-                %220:i32 = load %219
-                %221:f32 = convert %220
-                %222:f32 = mul %221, 0.10000000149011611938f
-                %223:f32 = add 0.5f, %222
-                store %x_207, %223
-                %224:f32 = load %x_207
-                store %x_260, %224
+            %226:i32 = load %x_180
+            %227:bool = lt %226, 90i
+            if %227 [t: $B46, f: $B47] {  # if_10
+              $B46: {  # true
+                %228:ptr<function, i32, read_write> = access %data, 2i
+                %229:i32 = load %228
+                %230:f32 = convert %229
+                %231:f32 = mul %230, 0.10000000149011611938f
+                %232:f32 = add 0.5f, %231
+                store %x_207, %232
+                %233:f32 = load %x_207
+                store %x_260, %233
                 exit_if  # if_10
               }
-              %b47 = block {  # false
-                %225:i32 = load %x_180
-                %226:bool = lt %225, 120i
-                if %226 [t: %b48, f: %b49] {  # if_11
-                  %b48 = block {  # true
-                    %227:ptr<function, i32, read_write> = access %data, 3i
-                    %228:i32 = load %227
-                    %229:f32 = convert %228
-                    %230:f32 = mul %229, 0.10000000149011611938f
-                    %231:f32 = add 0.5f, %230
-                    store %x_216, %231
-                    %232:f32 = load %x_216
-                    store %x_259, %232
+              $B47: {  # false
+                %234:i32 = load %x_180
+                %235:bool = lt %234, 120i
+                if %235 [t: $B48, f: $B49] {  # if_11
+                  $B48: {  # true
+                    %236:ptr<function, i32, read_write> = access %data, 3i
+                    %237:i32 = load %236
+                    %238:f32 = convert %237
+                    %239:f32 = mul %238, 0.10000000149011611938f
+                    %240:f32 = add 0.5f, %239
+                    store %x_216, %240
+                    %241:f32 = load %x_216
+                    store %x_259, %241
                     exit_if  # if_11
                   }
-                  %b49 = block {  # false
+                  $B49: {  # false
                     %x_229:ptr<function, f32, read_write> = var
                     %x_257:ptr<function, f32, read_write> = var
-                    %235:i32 = load %x_180
-                    %236:bool = lt %235, 150i
-                    if %236 [t: %b50, f: %b51] {  # if_12
-                      %b50 = block {  # true
-                        discard
+                    %244:i32 = load %x_180
+                    %245:bool = lt %244, 150i
+                    if %245 [t: $B50, f: $B51] {  # if_12
+                      $B50: {  # true
+                        store %continue_execution, false
                         exit_if  # if_12
                       }
-                      %b51 = block {  # false
+                      $B51: {  # false
                         %x_238:ptr<function, f32, read_write> = var
                         %x_256:ptr<function, f32, read_write> = var
-                        %239:i32 = load %x_180
-                        %240:bool = lt %239, 180i
-                        if %240 [t: %b52, f: %b53] {  # if_13
-                          %b52 = block {  # true
-                            %241:ptr<function, i32, read_write> = access %data, 5i
-                            %242:i32 = load %241
-                            %243:f32 = convert %242
-                            %244:f32 = mul %243, 0.10000000149011611938f
-                            %245:f32 = add 0.5f, %244
-                            store %x_229, %245
-                            %246:f32 = load %x_229
-                            store %x_258, %246
+                        %248:i32 = load %x_180
+                        %249:bool = lt %248, 180i
+                        if %249 [t: $B52, f: $B53] {  # if_13
+                          $B52: {  # true
+                            %250:ptr<function, i32, read_write> = access %data, 5i
+                            %251:i32 = load %250
+                            %252:f32 = convert %251
+                            %253:f32 = mul %252, 0.10000000149011611938f
+                            %254:f32 = add 0.5f, %253
+                            store %x_229, %254
+                            %255:f32 = load %x_229
+                            store %x_258, %255
                             exit_if  # if_13
                           }
-                          %b53 = block {  # false
+                          $B53: {  # false
                             %x_247:ptr<function, f32, read_write> = var
                             %x_255:ptr<function, f32, read_write> = var
-                            %249:i32 = load %x_180
-                            %250:bool = lt %249, 210i
-                            if %250 [t: %b54, f: %b55] {  # if_14
-                              %b54 = block {  # true
-                                %251:ptr<function, i32, read_write> = access %data, 6i
-                                %252:i32 = load %251
-                                %253:f32 = convert %252
-                                %254:f32 = mul %253, 0.10000000149011611938f
-                                %255:f32 = add 0.5f, %254
-                                store %x_238, %255
-                                %256:f32 = load %x_238
-                                store %x_257, %256
+                            %258:i32 = load %x_180
+                            %259:bool = lt %258, 210i
+                            if %259 [t: $B54, f: $B55] {  # if_14
+                              $B54: {  # true
+                                %260:ptr<function, i32, read_write> = access %data, 6i
+                                %261:i32 = load %260
+                                %262:f32 = convert %261
+                                %263:f32 = mul %262, 0.10000000149011611938f
+                                %264:f32 = add 0.5f, %263
+                                store %x_238, %264
+                                %265:f32 = load %x_238
+                                store %x_257, %265
                                 exit_if  # if_14
                               }
-                              %b55 = block {  # false
-                                %257:i32 = load %x_180
-                                %258:bool = lt %257, 240i
-                                if %258 [t: %b56, f: %b57] {  # if_15
-                                  %b56 = block {  # true
-                                    %259:ptr<function, i32, read_write> = access %data, 7i
-                                    %260:i32 = load %259
-                                    %261:f32 = convert %260
-                                    %262:f32 = mul %261, 0.10000000149011611938f
-                                    %263:f32 = add 0.5f, %262
-                                    store %x_247, %263
-                                    %264:f32 = load %x_247
-                                    store %x_256, %264
+                              $B55: {  # false
+                                %266:i32 = load %x_180
+                                %267:bool = lt %266, 240i
+                                if %267 [t: $B56, f: $B57] {  # if_15
+                                  $B56: {  # true
+                                    %268:ptr<function, i32, read_write> = access %data, 7i
+                                    %269:i32 = load %268
+                                    %270:f32 = convert %269
+                                    %271:f32 = mul %270, 0.10000000149011611938f
+                                    %272:f32 = add 0.5f, %271
+                                    store %x_247, %272
+                                    %273:f32 = load %x_247
+                                    store %x_256, %273
                                     exit_if  # if_15
                                   }
-                                  %b57 = block {  # false
-                                    %265:i32 = load %x_180
-                                    %266:bool = lt %265, 270i
-                                    if %266 [t: %b58, f: %b59] {  # if_16
-                                      %b58 = block {  # true
+                                  $B57: {  # false
+                                    %274:i32 = load %x_180
+                                    %275:bool = lt %274, 270i
+                                    if %275 [t: $B58, f: $B59] {  # if_16
+                                      $B58: {  # true
                                         exit_if  # if_16
                                       }
-                                      %b59 = block {  # false
-                                        discard
+                                      $B59: {  # false
+                                        store %continue_execution, false
                                         exit_if  # if_16
                                       }
                                     }
-                                    %267:ptr<function, i32, read_write> = access %data, 8i
-                                    %268:i32 = load %267
-                                    %269:f32 = convert %268
-                                    %270:f32 = mul %269, 0.10000000149011611938f
-                                    %271:f32 = add 0.5f, %270
-                                    store %x_255, %271
-                                    %272:f32 = load %x_255
-                                    store %x_256, %272
+                                    %276:ptr<function, i32, read_write> = access %data, 8i
+                                    %277:i32 = load %276
+                                    %278:f32 = convert %277
+                                    %279:f32 = mul %278, 0.10000000149011611938f
+                                    %280:f32 = add 0.5f, %279
+                                    store %x_255, %280
+                                    %281:f32 = load %x_255
+                                    store %x_256, %281
                                     exit_if  # if_15
                                   }
                                 }
-                                %273:f32 = load %x_256
-                                store %x_257, %273
+                                %282:f32 = load %x_256
+                                store %x_257, %282
                                 exit_if  # if_14
                               }
                             }
-                            %274:f32 = load %x_257
-                            store %x_258, %274
+                            %283:f32 = load %x_257
+                            store %x_258, %283
                             exit_if  # if_13
                           }
                         }
                         exit_if  # if_12
                       }
                     }
-                    %275:f32 = load %x_258
-                    store %x_259, %275
+                    %284:f32 = load %x_258
+                    store %x_259, %284
                     exit_if  # if_11
                   }
                 }
-                %276:f32 = load %x_259
-                store %x_260, %276
+                %285:f32 = load %x_259
+                store %x_260, %285
                 exit_if  # if_10
               }
             }
-            %277:f32 = load %x_260
-            store %x_261, %277
+            %286:f32 = load %x_260
+            store %x_261, %286
             exit_if  # if_9
           }
         }
-        %278:f32 = load %x_261
-        store %x_262, %278
+        %287:f32 = load %x_261
+        store %x_262, %287
         exit_if  # if_8
       }
     }
-    %279:f32 = load %x_262
-    %280:f32 = load %x_262
-    %281:f32 = load %x_262
-    %282:vec4<f32> = construct %279, %280, %281, 1.0f
-    store %x_GLF_color, %282
+    %288:f32 = load %x_262
+    %289:f32 = load %x_262
+    %290:f32 = load %x_262
+    %291:vec4<f32> = construct %288, %289, %290, 1.0f
+    store %x_GLF_color, %291
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b60 {
-  %b60 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B60: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %285:void = call %main_1
-    %286:vec4<f32> = load %x_GLF_color
-    %287:main_out = construct %286
-    ret %287
+    %294:void = call %main_1
+    %295:vec4<f32> = load %x_GLF_color
+    %296:main_out = construct %295
+    %297:bool = load %continue_execution
+    %298:bool = eq %297, false
+    if %298 [t: $B61] {  # if_17
+      $B61: {  # true
+        terminate_invocation
+      }
+    }
+    ret %296
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B62: {
+    %300:i32 = convert %value
+    %301:bool = gte %value, -2147483648.0f
+    %302:i32 = select -2147483648i, %300, %301
+    %303:bool = lte %value, 2147483520.0f
+    %304:i32 = select 2147483647i, %302, %303
+    ret %304
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/2.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/2.wgsl.expected.ir.msl
index 9c88446..a9738a1 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/2.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/2.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,14 +8,15 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_8:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %temp:ptr<function, array<i32, 10>, read_write> = var
     %data:ptr<function, array<i32, 10>, read_write> = var
     %x_189:ptr<function, f32, read_write> = var
@@ -24,12 +25,14 @@
     %x_102_phi:ptr<function, i32, read_write> = var
     %x_111_phi:ptr<function, i32, read_write> = var
     %x_262_phi:ptr<function, f32, read_write> = var
-    %13:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
-    %x_60:f32 = load_vector_element %13, 0u
-    %x_61:i32 = convert %x_60
+    %14:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
+    %15:f32 = load_vector_element %14, 0u
+    %x_60:f32 = let %15
+    %17:i32 = call %tint_f32_to_i32, %x_60
+    %x_61:i32 = let %17
     store %x_63_phi, %x_61
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %x_99:ptr<function, i32, read_write> = var
         %x_97:ptr<function, i32, read_write> = var
         %x_95:ptr<function, i32, read_write> = var
@@ -41,160 +44,166 @@
         %x_83:ptr<function, i32, read_write> = var
         %x_81:ptr<function, i32, read_write> = var
         %x_64_phi:ptr<function, i32, read_write> = var
-        %x_63:i32 = load %x_63_phi
-        %x_68:i32 = add %x_63, 1i
+        %31:i32 = load %x_63_phi
+        %x_63:i32 = let %31
+        %33:i32 = add %x_63, 1i
+        %x_68:i32 = let %33
         store %x_64_phi, %x_68
-        switch %x_63 [c: (9i, %b5), c: (8i, %b6), c: (7i, %b7), c: (6i, %b8), c: (5i, %b9), c: (4i, %b10), c: (3i, %b11), c: (2i, %b12), c: (1i, %b13), c: (0i, %b14), c: (default, %b15)] {  # switch_1
-          %b5 = block {  # case
-            %29:ptr<function, i32, read_write> = access %data, %x_63
-            store %29, -5i
-            %30:i32 = add %x_63, 1i
-            store %x_99, %30
-            %31:i32 = load %x_99
-            store %x_64_phi, %31
-            exit_switch  # switch_1
-          }
-          %b6 = block {  # case
-            %32:ptr<function, i32, read_write> = access %data, %x_63
-            store %32, -4i
-            %33:i32 = add %x_63, 1i
-            store %x_97, %33
-            %34:i32 = load %x_97
-            store %x_64_phi, %34
-            exit_switch  # switch_1
-          }
-          %b7 = block {  # case
+        switch %x_63 [c: (9i, $B5), c: (8i, $B6), c: (7i, $B7), c: (6i, $B8), c: (5i, $B9), c: (4i, $B10), c: (3i, $B11), c: (2i, $B12), c: (1i, $B13), c: (0i, $B14), c: (default, $B15)] {  # switch_1
+          $B5: {  # case
             %35:ptr<function, i32, read_write> = access %data, %x_63
-            store %35, -3i
+            store %35, -5i
             %36:i32 = add %x_63, 1i
-            store %x_95, %36
-            %37:i32 = load %x_95
+            store %x_99, %36
+            %37:i32 = load %x_99
             store %x_64_phi, %37
             exit_switch  # switch_1
           }
-          %b8 = block {  # case
+          $B6: {  # case
             %38:ptr<function, i32, read_write> = access %data, %x_63
-            store %38, -2i
+            store %38, -4i
             %39:i32 = add %x_63, 1i
-            store %x_93, %39
-            %40:i32 = load %x_93
+            store %x_97, %39
+            %40:i32 = load %x_97
             store %x_64_phi, %40
             exit_switch  # switch_1
           }
-          %b9 = block {  # case
+          $B7: {  # case
             %41:ptr<function, i32, read_write> = access %data, %x_63
-            store %41, -1i
+            store %41, -3i
             %42:i32 = add %x_63, 1i
-            store %x_91, %42
-            %43:i32 = load %x_91
+            store %x_95, %42
+            %43:i32 = load %x_95
             store %x_64_phi, %43
             exit_switch  # switch_1
           }
-          %b10 = block {  # case
+          $B8: {  # case
             %44:ptr<function, i32, read_write> = access %data, %x_63
-            store %44, 0i
+            store %44, -2i
             %45:i32 = add %x_63, 1i
-            store %x_89, %45
-            %46:i32 = load %x_89
+            store %x_93, %45
+            %46:i32 = load %x_93
             store %x_64_phi, %46
             exit_switch  # switch_1
           }
-          %b11 = block {  # case
+          $B9: {  # case
             %47:ptr<function, i32, read_write> = access %data, %x_63
-            store %47, 1i
+            store %47, -1i
             %48:i32 = add %x_63, 1i
-            store %x_87, %48
-            %49:i32 = load %x_87
+            store %x_91, %48
+            %49:i32 = load %x_91
             store %x_64_phi, %49
             exit_switch  # switch_1
           }
-          %b12 = block {  # case
+          $B10: {  # case
             %50:ptr<function, i32, read_write> = access %data, %x_63
-            store %50, 2i
+            store %50, 0i
             %51:i32 = add %x_63, 1i
-            store %x_85, %51
-            %52:i32 = load %x_85
+            store %x_89, %51
+            %52:i32 = load %x_89
             store %x_64_phi, %52
             exit_switch  # switch_1
           }
-          %b13 = block {  # case
+          $B11: {  # case
             %53:ptr<function, i32, read_write> = access %data, %x_63
-            store %53, 3i
+            store %53, 1i
             %54:i32 = add %x_63, 1i
-            store %x_83, %54
-            %55:i32 = load %x_83
+            store %x_87, %54
+            %55:i32 = load %x_87
             store %x_64_phi, %55
             exit_switch  # switch_1
           }
-          %b14 = block {  # case
+          $B12: {  # case
             %56:ptr<function, i32, read_write> = access %data, %x_63
-            store %56, 4i
+            store %56, 2i
             %57:i32 = add %x_63, 1i
-            store %x_81, %57
-            %58:i32 = load %x_81
+            store %x_85, %57
+            %58:i32 = load %x_85
             store %x_64_phi, %58
             exit_switch  # switch_1
           }
-          %b15 = block {  # case
+          $B13: {  # case
+            %59:ptr<function, i32, read_write> = access %data, %x_63
+            store %59, 3i
+            %60:i32 = add %x_63, 1i
+            store %x_83, %60
+            %61:i32 = load %x_83
+            store %x_64_phi, %61
+            exit_switch  # switch_1
+          }
+          $B14: {  # case
+            %62:ptr<function, i32, read_write> = access %data, %x_63
+            store %62, 4i
+            %63:i32 = add %x_63, 1i
+            store %x_81, %63
+            %64:i32 = load %x_81
+            store %x_64_phi, %64
+            exit_switch  # switch_1
+          }
+          $B15: {  # case
             exit_switch  # switch_1
           }
         }
-        %x_64:i32 = load %x_64_phi
-        continue %b4
+        %65:i32 = load %x_64_phi
+        %x_64:i32 = let %65
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
+      $B4: {  # continuing
         store %x_63_phi, %x_64
-        %60:bool = lt %x_64, 10i
-        %61:bool = eq %60, false
-        break_if %61 %b3
+        %67:bool = lt %x_64, 10i
+        %68:bool = eq %67, false
+        break_if %68  # -> [t: exit_loop loop_1, f: $B3]
       }
     }
     store %x_102_phi, 0i
-    loop [b: %b16, c: %b17] {  # loop_2
-      %b16 = block {  # body
+    loop [b: $B16, c: $B17] {  # loop_2
+      $B16: {  # body
         %x_103:ptr<function, i32, read_write> = var
-        %x_102:i32 = load %x_102_phi
-        %64:bool = lt %x_102, 10i
-        if %64 [t: %b18, f: %b19] {  # if_1
-          %b18 = block {  # true
+        %70:i32 = load %x_102_phi
+        %x_102:i32 = let %70
+        %72:bool = lt %x_102, 10i
+        if %72 [t: $B18, f: $B19] {  # if_1
+          $B18: {  # true
             exit_if  # if_1
           }
-          %b19 = block {  # false
+          $B19: {  # false
             exit_loop  # loop_2
           }
         }
-        continue %b17
+        continue  # -> $B17
       }
-      %b17 = block {  # continuing
-        %65:ptr<function, i32, read_write> = access %data, %x_102
-        %x_108:i32 = load %65
-        %67:ptr<function, i32, read_write> = access %temp, %x_102
-        store %67, %x_108
-        %68:i32 = add %x_102, 1i
-        store %x_103, %68
-        %69:i32 = load %x_103
-        store %x_102_phi, %69
-        next_iteration %b16
+      $B17: {  # continuing
+        %73:ptr<function, i32, read_write> = access %data, %x_102
+        %74:i32 = load %73
+        %x_108:i32 = let %74
+        %76:ptr<function, i32, read_write> = access %temp, %x_102
+        store %76, %x_108
+        %77:i32 = add %x_102, 1i
+        store %x_103, %77
+        %78:i32 = load %x_103
+        store %x_102_phi, %78
+        next_iteration  # -> $B16
       }
     }
     store %x_111_phi, 1i
-    loop [b: %b20, c: %b21] {  # loop_3
-      %b20 = block {  # body
+    loop [b: $B20, c: $B21] {  # loop_3
+      $B20: {  # body
         %x_112:ptr<function, i32, read_write> = var
         %x_118_phi:ptr<function, i32, read_write> = var
-        %x_111:i32 = load %x_111_phi
-        %73:bool = lte %x_111, 9i
-        if %73 [t: %b22, f: %b23] {  # if_2
-          %b22 = block {  # true
+        %81:i32 = load %x_111_phi
+        %x_111:i32 = let %81
+        %83:bool = lte %x_111, 9i
+        if %83 [t: $B22, f: $B23] {  # if_2
+          $B22: {  # true
             exit_if  # if_2
           }
-          %b23 = block {  # false
+          $B23: {  # false
             exit_loop  # loop_3
           }
         }
         store %x_118_phi, 0i
-        loop [b: %b24, c: %b25] {  # loop_4
-          %b24 = block {  # body
+        loop [b: $B24, c: $B25] {  # loop_4
+          $B24: {  # body
             %x_130:ptr<function, i32, read_write> = var
             %x_135:ptr<function, i32, read_write> = var
             %x_130_phi:ptr<function, i32, read_write> = var
@@ -203,399 +212,445 @@
             %x_157_phi:ptr<function, i32, read_write> = var
             %x_160_phi:ptr<function, i32, read_write> = var
             %x_170_phi:ptr<function, i32, read_write> = var
-            %x_118:i32 = load %x_118_phi
-            %83:bool = lt %x_118, 9i
-            if %83 [t: %b26, f: %b27] {  # if_3
-              %b26 = block {  # true
+            %92:i32 = load %x_118_phi
+            %x_118:i32 = let %92
+            %94:bool = lt %x_118, 9i
+            if %94 [t: $B26, f: $B27] {  # if_3
+              $B26: {  # true
                 exit_if  # if_3
               }
-              %b27 = block {  # false
+              $B27: {  # false
                 exit_loop  # loop_4
               }
             }
-            %x_124:i32 = add %x_118, %x_111
-            %x_125:i32 = sub %x_124, 1i
-            %86:i32 = mul 2i, %x_111
-            %x_119:i32 = add %x_118, %86
-            %88:i32 = sub %x_119, 1i
-            %x_128:i32 = min %88, 9i
+            %95:i32 = add %x_118, %x_111
+            %x_124:i32 = let %95
+            %97:i32 = sub %x_124, 1i
+            %x_125:i32 = let %97
+            %99:i32 = mul 2i, %x_111
+            %100:i32 = add %x_118, %99
+            %x_119:i32 = let %100
+            %102:i32 = sub %x_119, 1i
+            %103:i32 = min %102, 9i
+            %x_128:i32 = let %103
             store %x_130_phi, %x_118
             store %x_133_phi, %x_124
             store %x_135_phi, %x_118
-            loop [b: %b28, c: %b29] {  # loop_5
-              %b28 = block {  # body
+            loop [b: $B28, c: $B29] {  # loop_5
+              $B28: {  # body
                 %x_150:ptr<function, i32, read_write> = var
                 %x_153:ptr<function, i32, read_write> = var
                 %x_134_phi:ptr<function, i32, read_write> = var
                 %x_136_phi:ptr<function, i32, read_write> = var
-                %94:i32 = load %x_130_phi
-                store %x_130, %94
-                %x_133:i32 = load %x_133_phi
-                %96:i32 = load %x_135_phi
-                store %x_135, %96
-                %97:i32 = load %x_135
-                %98:bool = lte %97, %x_125
-                %99:bool = lte %x_133, %x_128
-                %100:bool = and %98, %99
-                if %100 [t: %b30, f: %b31] {  # if_4
-                  %b30 = block {  # true
+                %109:i32 = load %x_130_phi
+                store %x_130, %109
+                %110:i32 = load %x_133_phi
+                %x_133:i32 = let %110
+                %112:i32 = load %x_135_phi
+                store %x_135, %112
+                %113:i32 = load %x_135
+                %114:bool = lte %113, %x_125
+                %115:bool = lte %x_133, %x_128
+                %116:bool = and %114, %115
+                if %116 [t: $B30, f: $B31] {  # if_4
+                  $B30: {  # true
                     exit_if  # if_4
                   }
-                  %b31 = block {  # false
+                  $B31: {  # false
                     exit_loop  # loop_5
                   }
                 }
-                %x_142_save:i32 = load %x_135
-                %102:ptr<function, i32, read_write> = access %data, %x_142_save
-                %x_143:i32 = load %102
+                %117:i32 = load %x_135
+                %x_142_save:i32 = let %117
+                %119:ptr<function, i32, read_write> = access %data, %x_142_save
+                %120:i32 = load %119
+                %x_143:i32 = let %120
                 %x_144_save:i32 = let %x_133
-                %105:ptr<function, i32, read_write> = access %data, %x_144_save
-                %x_145:i32 = load %105
-                %107:i32 = load %x_130
-                %108:i32 = add %107, 1i
-                %x_131:i32 = bitcast %108
-                %110:bool = lt %x_143, %x_145
-                if %110 [t: %b32, f: %b33] {  # if_5
-                  %b32 = block {  # true
-                    %111:i32 = load %x_135
-                    %112:i32 = add %111, 1i
-                    %113:i32 = bitcast %112
-                    store %x_150, %113
-                    %114:ptr<function, i32, read_write> = access %data, %x_142_save
-                    %x_151:i32 = load %114
-                    %116:i32 = load %x_130
-                    %117:ptr<function, i32, read_write> = access %temp, %116
-                    store %117, %x_151
+                %123:ptr<function, i32, read_write> = access %data, %x_144_save
+                %124:i32 = load %123
+                %x_145:i32 = let %124
+                %126:i32 = load %x_130
+                %127:i32 = add %126, 1i
+                %128:i32 = bitcast %127
+                %x_131:i32 = let %128
+                %130:bool = lt %x_143, %x_145
+                if %130 [t: $B32, f: $B33] {  # if_5
+                  $B32: {  # true
+                    %131:i32 = load %x_135
+                    %132:i32 = add %131, 1i
+                    %133:i32 = bitcast %132
+                    store %x_150, %133
+                    %134:ptr<function, i32, read_write> = access %data, %x_142_save
+                    %135:i32 = load %134
+                    %x_151:i32 = let %135
+                    %137:i32 = load %x_130
+                    %138:ptr<function, i32, read_write> = access %temp, %137
+                    store %138, %x_151
                     store %x_134_phi, %x_133
-                    %118:i32 = load %x_150
-                    store %x_136_phi, %118
+                    %139:i32 = load %x_150
+                    store %x_136_phi, %139
                     exit_if  # if_5
                   }
-                  %b33 = block {  # false
-                    %119:i32 = add %x_133, 1i
-                    store %x_153, %119
-                    %120:ptr<function, i32, read_write> = access %data, %x_144_save
-                    %x_154:i32 = load %120
-                    %122:i32 = load %x_130
-                    %123:ptr<function, i32, read_write> = access %temp, %122
-                    store %123, %x_154
-                    %124:i32 = load %x_153
-                    store %x_134_phi, %124
-                    %125:i32 = load %x_135
-                    store %x_136_phi, %125
+                  $B33: {  # false
+                    %140:i32 = add %x_133, 1i
+                    store %x_153, %140
+                    %141:ptr<function, i32, read_write> = access %data, %x_144_save
+                    %142:i32 = load %141
+                    %x_154:i32 = let %142
+                    %144:i32 = load %x_130
+                    %145:ptr<function, i32, read_write> = access %temp, %144
+                    store %145, %x_154
+                    %146:i32 = load %x_153
+                    store %x_134_phi, %146
+                    %147:i32 = load %x_135
+                    store %x_136_phi, %147
                     exit_if  # if_5
                   }
                 }
-                %x_134:i32 = load %x_134_phi
-                %x_136:i32 = load %x_136_phi
-                continue %b29
+                %148:i32 = load %x_134_phi
+                %x_134:i32 = let %148
+                %150:i32 = load %x_136_phi
+                %x_136:i32 = let %150
+                continue  # -> $B29
               }
-              %b29 = block {  # continuing
+              $B29: {  # continuing
                 store %x_130_phi, %x_131
                 store %x_133_phi, %x_134
                 store %x_135_phi, %x_136
-                next_iteration %b28
+                next_iteration  # -> $B28
               }
             }
-            %128:i32 = load %x_130
-            store %x_157_phi, %128
-            %129:i32 = load %x_135
-            store %x_160_phi, %129
-            loop [b: %b34, c: %b35] {  # loop_6
-              %b34 = block {  # body
+            %152:i32 = load %x_130
+            store %x_157_phi, %152
+            %153:i32 = load %x_135
+            store %x_160_phi, %153
+            loop [b: $B34, c: $B35] {  # loop_6
+              $B34: {  # body
                 %x_158:ptr<function, i32, read_write> = var
                 %x_161:ptr<function, i32, read_write> = var
-                %x_157:i32 = load %x_157_phi
-                %x_160:i32 = load %x_160_phi
-                %134:bool = lt %x_160, 10i
-                %135:bool = lte %x_160, %x_125
-                %136:bool = and %134, %135
-                if %136 [t: %b36, f: %b37] {  # if_6
-                  %b36 = block {  # true
+                %156:i32 = load %x_157_phi
+                %x_157:i32 = let %156
+                %158:i32 = load %x_160_phi
+                %x_160:i32 = let %158
+                %160:bool = lt %x_160, 10i
+                %161:bool = lte %x_160, %x_125
+                %162:bool = and %160, %161
+                if %162 [t: $B36, f: $B37] {  # if_6
+                  $B36: {  # true
                     exit_if  # if_6
                   }
-                  %b37 = block {  # false
+                  $B37: {  # false
                     exit_loop  # loop_6
                   }
                 }
-                continue %b35
+                continue  # -> $B35
               }
-              %b35 = block {  # continuing
-                %137:i32 = add %x_157, 1i
-                store %x_158, %137
-                %138:i32 = add %x_160, 1i
-                store %x_161, %138
-                %139:ptr<function, i32, read_write> = access %data, %x_160
-                %x_167:i32 = load %139
-                %141:ptr<function, i32, read_write> = access %temp, %x_157
-                store %141, %x_167
-                %142:i32 = load %x_158
-                store %x_157_phi, %142
-                %143:i32 = load %x_161
-                store %x_160_phi, %143
-                next_iteration %b34
+              $B35: {  # continuing
+                %163:i32 = add %x_157, 1i
+                store %x_158, %163
+                %164:i32 = add %x_160, 1i
+                store %x_161, %164
+                %165:ptr<function, i32, read_write> = access %data, %x_160
+                %166:i32 = load %165
+                %x_167:i32 = let %166
+                %168:ptr<function, i32, read_write> = access %temp, %x_157
+                store %168, %x_167
+                %169:i32 = load %x_158
+                store %x_157_phi, %169
+                %170:i32 = load %x_161
+                store %x_160_phi, %170
+                next_iteration  # -> $B34
               }
             }
             store %x_170_phi, %x_118
-            loop [b: %b38, c: %b39] {  # loop_7
-              %b38 = block {  # body
+            loop [b: $B38, c: $B39] {  # loop_7
+              $B38: {  # body
                 %x_171:ptr<function, i32, read_write> = var
-                %x_170:i32 = load %x_170_phi
-                %146:bool = lte %x_170, %x_128
-                if %146 [t: %b40, f: %b41] {  # if_7
-                  %b40 = block {  # true
+                %172:i32 = load %x_170_phi
+                %x_170:i32 = let %172
+                %174:bool = lte %x_170, %x_128
+                if %174 [t: $B40, f: $B41] {  # if_7
+                  $B40: {  # true
                     exit_if  # if_7
                   }
-                  %b41 = block {  # false
+                  $B41: {  # false
                     exit_loop  # loop_7
                   }
                 }
-                continue %b39
+                continue  # -> $B39
               }
-              %b39 = block {  # continuing
-                %147:ptr<function, i32, read_write> = access %temp, %x_170
-                %x_176:i32 = load %147
-                %149:ptr<function, i32, read_write> = access %data, %x_170
-                store %149, %x_176
-                %150:i32 = add %x_170, 1i
-                store %x_171, %150
-                %151:i32 = load %x_171
-                store %x_170_phi, %151
-                next_iteration %b38
+              $B39: {  # continuing
+                %175:ptr<function, i32, read_write> = access %temp, %x_170
+                %176:i32 = load %175
+                %x_176:i32 = let %176
+                %178:ptr<function, i32, read_write> = access %data, %x_170
+                store %178, %x_176
+                %179:i32 = add %x_170, 1i
+                store %x_171, %179
+                %180:i32 = load %x_171
+                store %x_170_phi, %180
+                next_iteration  # -> $B38
               }
             }
-            continue %b25
+            continue  # -> $B25
           }
-          %b25 = block {  # continuing
+          $B25: {  # continuing
             store %x_118_phi, %x_119
-            next_iteration %b24
+            next_iteration  # -> $B24
           }
         }
-        continue %b21
+        continue  # -> $B21
       }
-      %b21 = block {  # continuing
-        %152:i32 = mul 2i, %x_111
-        store %x_112, %152
-        %153:i32 = load %x_112
-        store %x_111_phi, %153
-        next_iteration %b20
+      $B21: {  # continuing
+        %181:i32 = mul 2i, %x_111
+        store %x_112, %181
+        %182:i32 = load %x_112
+        store %x_111_phi, %182
+        next_iteration  # -> $B20
       }
     }
     %x_180:ptr<function, i32, read_write> = var
     %x_198:ptr<function, f32, read_write> = var
     %x_260:ptr<function, f32, read_write> = var
     %x_261_phi:ptr<function, f32, read_write> = var
-    %x_179:f32 = load_vector_element %gl_FragCoord, 1u
-    %159:i32 = convert %x_179
-    store %x_180, %159
-    %160:i32 = load %x_180
-    %161:bool = lt %160, 30i
-    if %161 [t: %b42, f: %b43] {  # if_8
-      %b42 = block {  # true
-        %162:ptr<function, i32, read_write> = access %data, 0i
-        %x_186:i32 = load %162
-        %164:f32 = convert %x_186
-        %165:f32 = mul %164, 0.10000000149011611938f
-        %166:f32 = add 0.5f, %165
-        store %x_189, %166
-        %167:f32 = load %x_189
-        store %x_262_phi, %167
+    %187:f32 = load_vector_element %gl_FragCoord, 1u
+    %x_179:f32 = let %187
+    %189:i32 = call %tint_f32_to_i32, %x_179
+    store %x_180, %189
+    %190:i32 = load %x_180
+    %191:bool = lt %190, 30i
+    if %191 [t: $B42, f: $B43] {  # if_8
+      $B42: {  # true
+        %192:ptr<function, i32, read_write> = access %data, 0i
+        %193:i32 = load %192
+        %x_186:i32 = let %193
+        %195:f32 = convert %x_186
+        %196:f32 = mul %195, 0.10000000149011611938f
+        %197:f32 = add 0.5f, %196
+        store %x_189, %197
+        %198:f32 = load %x_189
+        store %x_262_phi, %198
         exit_if  # if_8
       }
-      %b43 = block {  # false
+      $B43: {  # false
         %x_207:ptr<function, f32, read_write> = var
         %x_259:ptr<function, f32, read_write> = var
         %x_260_phi:ptr<function, f32, read_write> = var
-        %171:i32 = load %x_180
-        %172:bool = lt %171, 60i
-        if %172 [t: %b44, f: %b45] {  # if_9
-          %b44 = block {  # true
-            %173:ptr<function, i32, read_write> = access %data, 1i
-            %x_195:i32 = load %173
-            %175:f32 = convert %x_195
-            %176:f32 = mul %175, 0.10000000149011611938f
-            %177:f32 = add 0.5f, %176
-            store %x_198, %177
-            %178:f32 = load %x_198
-            store %x_261_phi, %178
+        %202:i32 = load %x_180
+        %203:bool = lt %202, 60i
+        if %203 [t: $B44, f: $B45] {  # if_9
+          $B44: {  # true
+            %204:ptr<function, i32, read_write> = access %data, 1i
+            %205:i32 = load %204
+            %x_195:i32 = let %205
+            %207:f32 = convert %x_195
+            %208:f32 = mul %207, 0.10000000149011611938f
+            %209:f32 = add 0.5f, %208
+            store %x_198, %209
+            %210:f32 = load %x_198
+            store %x_261_phi, %210
             exit_if  # if_9
           }
-          %b45 = block {  # false
+          $B45: {  # false
             %x_216:ptr<function, f32, read_write> = var
             %x_258:ptr<function, f32, read_write> = var
             %x_259_phi:ptr<function, f32, read_write> = var
-            %182:i32 = load %x_180
-            %183:bool = lt %182, 90i
-            if %183 [t: %b46, f: %b47] {  # if_10
-              %b46 = block {  # true
-                %184:ptr<function, i32, read_write> = access %data, 2i
-                %x_204:i32 = load %184
-                %186:f32 = convert %x_204
-                %187:f32 = mul %186, 0.10000000149011611938f
-                %188:f32 = add 0.5f, %187
-                store %x_207, %188
-                %189:f32 = load %x_207
-                store %x_260_phi, %189
+            %214:i32 = load %x_180
+            %215:bool = lt %214, 90i
+            if %215 [t: $B46, f: $B47] {  # if_10
+              $B46: {  # true
+                %216:ptr<function, i32, read_write> = access %data, 2i
+                %217:i32 = load %216
+                %x_204:i32 = let %217
+                %219:f32 = convert %x_204
+                %220:f32 = mul %219, 0.10000000149011611938f
+                %221:f32 = add 0.5f, %220
+                store %x_207, %221
+                %222:f32 = load %x_207
+                store %x_260_phi, %222
                 exit_if  # if_10
               }
-              %b47 = block {  # false
-                %190:i32 = load %x_180
-                %191:bool = lt %190, 120i
-                if %191 [t: %b48, f: %b49] {  # if_11
-                  %b48 = block {  # true
-                    %192:ptr<function, i32, read_write> = access %data, 3i
-                    %x_213:i32 = load %192
-                    %194:f32 = convert %x_213
-                    %195:f32 = mul %194, 0.10000000149011611938f
-                    %196:f32 = add 0.5f, %195
-                    store %x_216, %196
-                    %197:f32 = load %x_216
-                    store %x_259_phi, %197
+              $B47: {  # false
+                %223:i32 = load %x_180
+                %224:bool = lt %223, 120i
+                if %224 [t: $B48, f: $B49] {  # if_11
+                  $B48: {  # true
+                    %225:ptr<function, i32, read_write> = access %data, 3i
+                    %226:i32 = load %225
+                    %x_213:i32 = let %226
+                    %228:f32 = convert %x_213
+                    %229:f32 = mul %228, 0.10000000149011611938f
+                    %230:f32 = add 0.5f, %229
+                    store %x_216, %230
+                    %231:f32 = load %x_216
+                    store %x_259_phi, %231
                     exit_if  # if_11
                   }
-                  %b49 = block {  # false
+                  $B49: {  # false
                     %x_229:ptr<function, f32, read_write> = var
                     %x_257:ptr<function, f32, read_write> = var
                     %x_258_phi:ptr<function, f32, read_write> = var
-                    %201:i32 = load %x_180
-                    %202:bool = lt %201, 150i
-                    if %202 [t: %b50, f: %b51] {  # if_12
-                      %b50 = block {  # true
-                        discard
+                    %235:i32 = load %x_180
+                    %236:bool = lt %235, 150i
+                    if %236 [t: $B50, f: $B51] {  # if_12
+                      $B50: {  # true
+                        store %continue_execution, false
                         exit_if  # if_12
                       }
-                      %b51 = block {  # false
+                      $B51: {  # false
                         %x_238:ptr<function, f32, read_write> = var
                         %x_256:ptr<function, f32, read_write> = var
                         %x_257_phi:ptr<function, f32, read_write> = var
-                        %206:i32 = load %x_180
-                        %207:bool = lt %206, 180i
-                        if %207 [t: %b52, f: %b53] {  # if_13
-                          %b52 = block {  # true
-                            %208:ptr<function, i32, read_write> = access %data, 5i
-                            %x_226:i32 = load %208
-                            %210:f32 = convert %x_226
-                            %211:f32 = mul %210, 0.10000000149011611938f
-                            %212:f32 = add 0.5f, %211
-                            store %x_229, %212
-                            %213:f32 = load %x_229
-                            store %x_258_phi, %213
+                        %240:i32 = load %x_180
+                        %241:bool = lt %240, 180i
+                        if %241 [t: $B52, f: $B53] {  # if_13
+                          $B52: {  # true
+                            %242:ptr<function, i32, read_write> = access %data, 5i
+                            %243:i32 = load %242
+                            %x_226:i32 = let %243
+                            %245:f32 = convert %x_226
+                            %246:f32 = mul %245, 0.10000000149011611938f
+                            %247:f32 = add 0.5f, %246
+                            store %x_229, %247
+                            %248:f32 = load %x_229
+                            store %x_258_phi, %248
                             exit_if  # if_13
                           }
-                          %b53 = block {  # false
+                          $B53: {  # false
                             %x_247:ptr<function, f32, read_write> = var
                             %x_255:ptr<function, f32, read_write> = var
                             %x_256_phi:ptr<function, f32, read_write> = var
-                            %217:i32 = load %x_180
-                            %218:bool = lt %217, 210i
-                            if %218 [t: %b54, f: %b55] {  # if_14
-                              %b54 = block {  # true
-                                %219:ptr<function, i32, read_write> = access %data, 6i
-                                %x_235:i32 = load %219
-                                %221:f32 = convert %x_235
-                                %222:f32 = mul %221, 0.10000000149011611938f
-                                %223:f32 = add 0.5f, %222
-                                store %x_238, %223
-                                %224:f32 = load %x_238
-                                store %x_257_phi, %224
+                            %252:i32 = load %x_180
+                            %253:bool = lt %252, 210i
+                            if %253 [t: $B54, f: $B55] {  # if_14
+                              $B54: {  # true
+                                %254:ptr<function, i32, read_write> = access %data, 6i
+                                %255:i32 = load %254
+                                %x_235:i32 = let %255
+                                %257:f32 = convert %x_235
+                                %258:f32 = mul %257, 0.10000000149011611938f
+                                %259:f32 = add 0.5f, %258
+                                store %x_238, %259
+                                %260:f32 = load %x_238
+                                store %x_257_phi, %260
                                 exit_if  # if_14
                               }
-                              %b55 = block {  # false
-                                %225:i32 = load %x_180
-                                %226:bool = lt %225, 240i
-                                if %226 [t: %b56, f: %b57] {  # if_15
-                                  %b56 = block {  # true
-                                    %227:ptr<function, i32, read_write> = access %data, 7i
-                                    %x_244:i32 = load %227
-                                    %229:f32 = convert %x_244
-                                    %230:f32 = mul %229, 0.10000000149011611938f
-                                    %231:f32 = add 0.5f, %230
-                                    store %x_247, %231
-                                    %232:f32 = load %x_247
-                                    store %x_256_phi, %232
+                              $B55: {  # false
+                                %261:i32 = load %x_180
+                                %262:bool = lt %261, 240i
+                                if %262 [t: $B56, f: $B57] {  # if_15
+                                  $B56: {  # true
+                                    %263:ptr<function, i32, read_write> = access %data, 7i
+                                    %264:i32 = load %263
+                                    %x_244:i32 = let %264
+                                    %266:f32 = convert %x_244
+                                    %267:f32 = mul %266, 0.10000000149011611938f
+                                    %268:f32 = add 0.5f, %267
+                                    store %x_247, %268
+                                    %269:f32 = load %x_247
+                                    store %x_256_phi, %269
                                     exit_if  # if_15
                                   }
-                                  %b57 = block {  # false
-                                    %233:i32 = load %x_180
-                                    %234:bool = lt %233, 270i
-                                    if %234 [t: %b58, f: %b59] {  # if_16
-                                      %b58 = block {  # true
+                                  $B57: {  # false
+                                    %270:i32 = load %x_180
+                                    %271:bool = lt %270, 270i
+                                    if %271 [t: $B58, f: $B59] {  # if_16
+                                      $B58: {  # true
                                         exit_if  # if_16
                                       }
-                                      %b59 = block {  # false
-                                        discard
+                                      $B59: {  # false
+                                        store %continue_execution, false
                                         exit_if  # if_16
                                       }
                                     }
-                                    %235:ptr<function, i32, read_write> = access %data, 8i
-                                    %x_252:i32 = load %235
-                                    %237:f32 = convert %x_252
-                                    %238:f32 = mul %237, 0.10000000149011611938f
-                                    %239:f32 = add 0.5f, %238
-                                    store %x_255, %239
-                                    %240:f32 = load %x_255
-                                    store %x_256_phi, %240
+                                    %272:ptr<function, i32, read_write> = access %data, 8i
+                                    %273:i32 = load %272
+                                    %x_252:i32 = let %273
+                                    %275:f32 = convert %x_252
+                                    %276:f32 = mul %275, 0.10000000149011611938f
+                                    %277:f32 = add 0.5f, %276
+                                    store %x_255, %277
+                                    %278:f32 = load %x_255
+                                    store %x_256_phi, %278
                                     exit_if  # if_15
                                   }
                                 }
-                                %241:f32 = load %x_256_phi
-                                store %x_256, %241
-                                %242:f32 = load %x_256
-                                store %x_257_phi, %242
+                                %279:f32 = load %x_256_phi
+                                store %x_256, %279
+                                %280:f32 = load %x_256
+                                store %x_257_phi, %280
                                 exit_if  # if_14
                               }
                             }
-                            %243:f32 = load %x_257_phi
-                            store %x_257, %243
-                            %244:f32 = load %x_257
-                            store %x_258_phi, %244
+                            %281:f32 = load %x_257_phi
+                            store %x_257, %281
+                            %282:f32 = load %x_257
+                            store %x_258_phi, %282
                             exit_if  # if_13
                           }
                         }
-                        %245:f32 = load %x_258_phi
-                        store %x_258, %245
+                        %283:f32 = load %x_258_phi
+                        store %x_258, %283
                         exit_if  # if_12
                       }
                     }
-                    %246:f32 = load %x_258
-                    store %x_259_phi, %246
+                    %284:f32 = load %x_258
+                    store %x_259_phi, %284
                     exit_if  # if_11
                   }
                 }
-                %247:f32 = load %x_259_phi
-                store %x_259, %247
-                %248:f32 = load %x_259
-                store %x_260_phi, %248
+                %285:f32 = load %x_259_phi
+                store %x_259, %285
+                %286:f32 = load %x_259
+                store %x_260_phi, %286
                 exit_if  # if_10
               }
             }
-            %249:f32 = load %x_260_phi
-            store %x_260, %249
-            %250:f32 = load %x_260
-            store %x_261_phi, %250
+            %287:f32 = load %x_260_phi
+            store %x_260, %287
+            %288:f32 = load %x_260
+            store %x_261_phi, %288
             exit_if  # if_9
           }
         }
-        %251:f32 = load %x_261_phi
-        store %x_261, %251
-        %252:f32 = load %x_261
-        store %x_262_phi, %252
+        %289:f32 = load %x_261_phi
+        store %x_261, %289
+        %290:f32 = load %x_261
+        store %x_262_phi, %290
         exit_if  # if_8
       }
     }
-    %x_262:f32 = load %x_262_phi
-    %254:vec4<f32> = construct %x_262, %x_262, %x_262, 1.0f
-    store %x_GLF_color, %254
+    %291:f32 = load %x_262_phi
+    %x_262:f32 = let %291
+    %293:vec4<f32> = construct %x_262, %x_262, %x_262, 1.0f
+    store %x_GLF_color, %293
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b60 {
-  %b60 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B60: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %257:void = call %main_1
-    %258:vec4<f32> = load %x_GLF_color
-    %259:main_out = construct %258
-    ret %259
+    %296:void = call %main_1
+    %297:vec4<f32> = load %x_GLF_color
+    %298:main_out = construct %297
+    %299:bool = load %continue_execution
+    %300:bool = eq %299, false
+    if %300 [t: $B61] {  # if_17
+      $B61: {  # true
+        terminate_invocation
+      }
+    }
+    ret %298
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B62: {
+    %302:i32 = convert %value
+    %303:bool = gte %value, -2147483648.0f
+    %304:i32 = select -2147483648i, %302, %303
+    %305:bool = lte %value, 2147483520.0f
+    %306:i32 = select 2147483647i, %304, %305
+    ret %306
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/0.spvasm.expected.ir.msl
index 1a5c34a..f8a1127 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,158 +8,166 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %data:ptr<private, array<i32, 10>, read_write> = var
   %temp:ptr<private, array<i32, 10>, read_write> = var
   %x_28:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%merge_i1_i1_i1_ = func(%f:ptr<function, i32, read_write>, %mid:ptr<function, i32, read_write>, %to:ptr<function, i32, read_write>):void -> %b2 {
-  %b2 = block {
+%merge_i1_i1_i1_ = func(%f:ptr<function, i32, read_write>, %mid:ptr<function, i32, read_write>, %to:ptr<function, i32, read_write>):void {
+  $B2: {
     %k:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %j:ptr<function, i32, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
-    %14:i32 = load %f
-    store %k, %14
     %15:i32 = load %f
-    store %i, %15
-    %16:i32 = load %mid
-    %17:i32 = add %16, 1i
-    store %j, %17
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %18:i32 = load %i
-        %19:i32 = load %mid
-        %20:bool = lte %18, %19
-        %21:i32 = load %j
-        %22:i32 = load %to
-        %23:bool = lte %21, %22
-        %24:bool = and %20, %23
-        if %24 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    store %k, %15
+    %16:i32 = load %f
+    store %i, %16
+    %17:i32 = load %mid
+    %18:i32 = add %17, 1i
+    store %j, %18
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %19:i32 = load %i
+        %20:i32 = load %mid
+        %21:bool = lte %19, %20
+        %22:i32 = load %j
+        %23:i32 = load %to
+        %24:bool = lte %22, %23
+        %25:bool = and %21, %24
+        if %25 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %25:i32 = load %i
-        %26:ptr<private, i32, read_write> = access %data, %25
-        %27:i32 = load %26
-        %28:i32 = load %j
-        %29:ptr<private, i32, read_write> = access %data, %28
-        %30:i32 = load %29
-        %31:bool = lt %27, %30
-        if %31 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
-            %x_277:i32 = load %k
+        %26:i32 = load %i
+        %27:ptr<private, i32, read_write> = access %data, %26
+        %28:i32 = load %27
+        %29:i32 = load %j
+        %30:ptr<private, i32, read_write> = access %data, %29
+        %31:i32 = load %30
+        %32:bool = lt %28, %31
+        if %32 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
             %33:i32 = load %k
-            %34:i32 = add %33, 1i
-            store %k, %34
-            %x_279:i32 = load %i
-            %36:i32 = load %i
-            %37:i32 = add %36, 1i
-            store %i, %37
-            %38:ptr<private, i32, read_write> = access %temp, %x_277
-            %39:ptr<private, i32, read_write> = access %data, %x_279
-            %40:i32 = load %39
-            store %38, %40
+            %x_277:i32 = let %33
+            %35:i32 = load %k
+            %36:i32 = add %35, 1i
+            store %k, %36
+            %37:i32 = load %i
+            %x_279:i32 = let %37
+            %39:i32 = load %i
+            %40:i32 = add %39, 1i
+            store %i, %40
+            %41:ptr<private, i32, read_write> = access %temp, %x_277
+            %42:ptr<private, i32, read_write> = access %data, %x_279
+            %43:i32 = load %42
+            store %41, %43
             exit_if  # if_2
           }
-          %b8 = block {  # false
-            %x_284:i32 = load %k
-            %42:i32 = load %k
-            %43:i32 = add %42, 1i
-            store %k, %43
-            %x_286:i32 = load %j
-            %45:i32 = load %j
-            %46:i32 = add %45, 1i
-            store %j, %46
-            %47:ptr<private, i32, read_write> = access %temp, %x_284
-            %48:ptr<private, i32, read_write> = access %data, %x_286
-            %49:i32 = load %48
-            store %47, %49
+          $B8: {  # false
+            %44:i32 = load %k
+            %x_284:i32 = let %44
+            %46:i32 = load %k
+            %47:i32 = add %46, 1i
+            store %k, %47
+            %48:i32 = load %j
+            %x_286:i32 = let %48
+            %50:i32 = load %j
+            %51:i32 = add %50, 1i
+            store %j, %51
+            %52:ptr<private, i32, read_write> = access %temp, %x_284
+            %53:ptr<private, i32, read_write> = access %data, %x_286
+            %54:i32 = load %53
+            store %52, %54
             exit_if  # if_2
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
-    loop [b: %b9, c: %b10] {  # loop_2
-      %b9 = block {  # body
-        %50:i32 = load %i
-        %51:bool = lt %50, 10i
-        %52:i32 = load %i
-        %53:i32 = load %mid
-        %54:bool = lte %52, %53
-        %55:bool = and %51, %54
-        if %55 [t: %b11, f: %b12] {  # if_3
-          %b11 = block {  # true
+    loop [b: $B9, c: $B10] {  # loop_2
+      $B9: {  # body
+        %55:i32 = load %i
+        %56:bool = lt %55, 10i
+        %57:i32 = load %i
+        %58:i32 = load %mid
+        %59:bool = lte %57, %58
+        %60:bool = and %56, %59
+        if %60 [t: $B11, f: $B12] {  # if_3
+          $B11: {  # true
             exit_if  # if_3
           }
-          %b12 = block {  # false
+          $B12: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_302:i32 = load %k
-        %57:i32 = load %k
-        %58:i32 = add %57, 1i
-        store %k, %58
-        %x_304:i32 = load %i
-        %60:i32 = load %i
-        %61:i32 = add %60, 1i
-        store %i, %61
-        %62:ptr<private, i32, read_write> = access %temp, %x_302
-        %63:ptr<private, i32, read_write> = access %data, %x_304
-        %64:i32 = load %63
-        store %62, %64
-        continue %b10
+        %61:i32 = load %k
+        %x_302:i32 = let %61
+        %63:i32 = load %k
+        %64:i32 = add %63, 1i
+        store %k, %64
+        %65:i32 = load %i
+        %x_304:i32 = let %65
+        %67:i32 = load %i
+        %68:i32 = add %67, 1i
+        store %i, %68
+        %69:ptr<private, i32, read_write> = access %temp, %x_302
+        %70:ptr<private, i32, read_write> = access %data, %x_304
+        %71:i32 = load %70
+        store %69, %71
+        continue  # -> $B10
       }
-      %b10 = block {  # continuing
-        next_iteration %b9
+      $B10: {  # continuing
+        next_iteration  # -> $B9
       }
     }
-    %65:i32 = load %f
-    store %i_1, %65
-    loop [b: %b13, c: %b14] {  # loop_3
-      %b13 = block {  # body
-        %66:i32 = load %i_1
-        %67:i32 = load %to
-        %68:bool = lte %66, %67
-        if %68 [t: %b15, f: %b16] {  # if_4
-          %b15 = block {  # true
+    %72:i32 = load %f
+    store %i_1, %72
+    loop [b: $B13, c: $B14] {  # loop_3
+      $B13: {  # body
+        %73:i32 = load %i_1
+        %74:i32 = load %to
+        %75:bool = lte %73, %74
+        if %75 [t: $B15, f: $B16] {  # if_4
+          $B15: {  # true
             exit_if  # if_4
           }
-          %b16 = block {  # false
+          $B16: {  # false
             exit_loop  # loop_3
           }
         }
-        %x_318:i32 = load %i_1
-        %70:ptr<private, i32, read_write> = access %data, %x_318
-        %71:i32 = load %i_1
-        %72:ptr<private, i32, read_write> = access %temp, %71
-        %73:i32 = load %72
-        store %70, %73
-        continue %b14
+        %76:i32 = load %i_1
+        %x_318:i32 = let %76
+        %78:ptr<private, i32, read_write> = access %data, %x_318
+        %79:i32 = load %i_1
+        %80:ptr<private, i32, read_write> = access %temp, %79
+        %81:i32 = load %80
+        store %78, %81
+        continue  # -> $B14
       }
-      %b14 = block {  # continuing
-        %74:i32 = load %i_1
-        %75:i32 = add %74, 1i
-        store %i_1, %75
-        next_iteration %b13
+      $B14: {  # continuing
+        %82:i32 = load %i_1
+        %83:i32 = add %82, 1i
+        store %i_1, %83
+        next_iteration  # -> $B13
       }
     }
     ret
   }
 }
-%mergeSort_ = func():void -> %b17 {
-  %b17 = block {
+%mergeSort_ = func():void {
+  $B17: {
     %low:ptr<function, i32, read_write> = var
     %high:ptr<function, i32, read_write> = var
     %m:ptr<function, i32, read_write> = var
@@ -173,319 +181,332 @@
     store %low, 0i
     store %high, 9i
     store %m, 1i
-    loop [b: %b18, c: %b19] {  # loop_4
-      %b18 = block {  # body
-        %87:i32 = load %m
-        %88:i32 = load %high
-        %89:bool = lte %87, %88
-        if %89 [t: %b20, f: %b21] {  # if_5
-          %b20 = block {  # true
+    loop [b: $B18, c: $B19] {  # loop_4
+      $B18: {  # body
+        %95:i32 = load %m
+        %96:i32 = load %high
+        %97:bool = lte %95, %96
+        if %97 [t: $B20, f: $B21] {  # if_5
+          $B20: {  # true
             exit_if  # if_5
           }
-          %b21 = block {  # false
+          $B21: {  # false
             exit_loop  # loop_4
           }
         }
-        %90:i32 = load %low
-        store %i_2, %90
-        loop [b: %b22, c: %b23] {  # loop_5
-          %b22 = block {  # body
-            %91:i32 = load %i_2
-            %92:i32 = load %high
-            %93:bool = lt %91, %92
-            if %93 [t: %b24, f: %b25] {  # if_6
-              %b24 = block {  # true
+        %98:i32 = load %low
+        store %i_2, %98
+        loop [b: $B22, c: $B23] {  # loop_5
+          $B22: {  # body
+            %99:i32 = load %i_2
+            %100:i32 = load %high
+            %101:bool = lt %99, %100
+            if %101 [t: $B24, f: $B25] {  # if_6
+              $B24: {  # true
                 exit_if  # if_6
               }
-              %b25 = block {  # false
+              $B25: {  # false
                 exit_loop  # loop_5
               }
             }
-            %94:i32 = load %i_2
-            store %f_1, %94
-            %95:i32 = load %i_2
-            %96:i32 = load %m
-            %97:i32 = add %95, %96
-            %98:i32 = sub %97, 1i
-            store %mid_1, %98
-            %99:i32 = load %i_2
-            %100:i32 = load %m
-            %101:i32 = mul 2i, %100
-            %102:i32 = add %99, %101
-            %103:i32 = sub %102, 1i
-            %104:i32 = load %high
-            %105:i32 = min %103, %104
-            store %to_1, %105
-            %106:i32 = load %f_1
-            store %param, %106
-            %107:i32 = load %mid_1
-            store %param_1, %107
-            %108:i32 = load %to_1
-            store %param_2, %108
-            %109:void = call %merge_i1_i1_i1_, %param, %param_1, %param_2
-            continue %b23
+            %102:i32 = load %i_2
+            store %f_1, %102
+            %103:i32 = load %i_2
+            %104:i32 = load %m
+            %105:i32 = add %103, %104
+            %106:i32 = sub %105, 1i
+            store %mid_1, %106
+            %107:i32 = load %i_2
+            %108:i32 = load %m
+            %109:i32 = mul 2i, %108
+            %110:i32 = add %107, %109
+            %111:i32 = sub %110, 1i
+            %112:i32 = load %high
+            %113:i32 = min %111, %112
+            store %to_1, %113
+            %114:i32 = load %f_1
+            store %param, %114
+            %115:i32 = load %mid_1
+            store %param_1, %115
+            %116:i32 = load %to_1
+            store %param_2, %116
+            %117:void = call %merge_i1_i1_i1_, %param, %param_1, %param_2
+            continue  # -> $B23
           }
-          %b23 = block {  # continuing
-            %110:i32 = load %i_2
-            %111:i32 = load %m
-            %112:i32 = mul 2i, %111
-            %113:i32 = add %110, %112
-            store %i_2, %113
-            next_iteration %b22
+          $B23: {  # continuing
+            %118:i32 = load %i_2
+            %119:i32 = load %m
+            %120:i32 = mul 2i, %119
+            %121:i32 = add %118, %120
+            store %i_2, %121
+            next_iteration  # -> $B22
           }
         }
-        continue %b19
+        continue  # -> $B19
       }
-      %b19 = block {  # continuing
-        %114:i32 = load %m
-        %115:i32 = mul 2i, %114
-        store %m, %115
-        next_iteration %b18
+      $B19: {  # continuing
+        %122:i32 = load %m
+        %123:i32 = mul 2i, %122
+        store %m, %123
+        next_iteration  # -> $B18
       }
     }
     ret
   }
 }
-%main_1 = func():void -> %b26 {
-  %b26 = block {
+%main_1 = func():void {
+  $B26: {
     %i_3:ptr<function, i32, read_write> = var
     %j_1:ptr<function, i32, read_write> = var
     %grey:ptr<function, f32, read_write> = var
-    %120:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
-    %121:f32 = load_vector_element %120, 0u
-    %122:i32 = convert %121
-    store %i_3, %122
-    loop [b: %b27, c: %b28] {  # loop_6
-      %b27 = block {  # body
-        %x_90:i32 = load %i_3
-        switch %x_90 [c: (9i, %b29), c: (8i, %b30), c: (7i, %b31), c: (6i, %b32), c: (5i, %b33), c: (4i, %b34), c: (3i, %b35), c: (2i, %b36), c: (1i, %b37), c: (0i, %b38), c: (default, %b39)] {  # switch_1
-          %b29 = block {  # case
-            %x_120:i32 = load %i_3
-            %125:ptr<private, i32, read_write> = access %data, %x_120
-            store %125, -5i
+    %128:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
+    %129:f32 = load_vector_element %128, 0u
+    %130:i32 = call %tint_f32_to_i32, %129
+    store %i_3, %130
+    loop [b: $B27, c: $B28] {  # loop_6
+      $B27: {  # body
+        %132:i32 = load %i_3
+        %x_90:i32 = let %132
+        switch %x_90 [c: (9i, $B29), c: (8i, $B30), c: (7i, $B31), c: (6i, $B32), c: (5i, $B33), c: (4i, $B34), c: (3i, $B35), c: (2i, $B36), c: (1i, $B37), c: (0i, $B38), c: (default, $B39)] {  # switch_1
+          $B29: {  # case
+            %134:i32 = load %i_3
+            %x_120:i32 = let %134
+            %136:ptr<private, i32, read_write> = access %data, %x_120
+            store %136, -5i
             exit_switch  # switch_1
           }
-          %b30 = block {  # case
-            %x_118:i32 = load %i_3
-            %127:ptr<private, i32, read_write> = access %data, %x_118
-            store %127, -4i
+          $B30: {  # case
+            %137:i32 = load %i_3
+            %x_118:i32 = let %137
+            %139:ptr<private, i32, read_write> = access %data, %x_118
+            store %139, -4i
             exit_switch  # switch_1
           }
-          %b31 = block {  # case
-            %x_116:i32 = load %i_3
-            %129:ptr<private, i32, read_write> = access %data, %x_116
-            store %129, -3i
+          $B31: {  # case
+            %140:i32 = load %i_3
+            %x_116:i32 = let %140
+            %142:ptr<private, i32, read_write> = access %data, %x_116
+            store %142, -3i
             exit_switch  # switch_1
           }
-          %b32 = block {  # case
-            %x_114:i32 = load %i_3
-            %131:ptr<private, i32, read_write> = access %data, %x_114
-            store %131, -2i
+          $B32: {  # case
+            %143:i32 = load %i_3
+            %x_114:i32 = let %143
+            %145:ptr<private, i32, read_write> = access %data, %x_114
+            store %145, -2i
             exit_switch  # switch_1
           }
-          %b33 = block {  # case
-            %x_112:i32 = load %i_3
-            %133:ptr<private, i32, read_write> = access %data, %x_112
-            store %133, -1i
+          $B33: {  # case
+            %146:i32 = load %i_3
+            %x_112:i32 = let %146
+            %148:ptr<private, i32, read_write> = access %data, %x_112
+            store %148, -1i
             exit_switch  # switch_1
           }
-          %b34 = block {  # case
-            %x_110:i32 = load %i_3
-            %135:ptr<private, i32, read_write> = access %data, %x_110
-            store %135, 0i
+          $B34: {  # case
+            %149:i32 = load %i_3
+            %x_110:i32 = let %149
+            %151:ptr<private, i32, read_write> = access %data, %x_110
+            store %151, 0i
             exit_switch  # switch_1
           }
-          %b35 = block {  # case
-            %x_108:i32 = load %i_3
-            %137:ptr<private, i32, read_write> = access %data, %x_108
-            store %137, 1i
+          $B35: {  # case
+            %152:i32 = load %i_3
+            %x_108:i32 = let %152
+            %154:ptr<private, i32, read_write> = access %data, %x_108
+            store %154, 1i
             exit_switch  # switch_1
           }
-          %b36 = block {  # case
-            %x_106:i32 = load %i_3
-            %139:ptr<private, i32, read_write> = access %data, %x_106
-            store %139, 2i
+          $B36: {  # case
+            %155:i32 = load %i_3
+            %x_106:i32 = let %155
+            %157:ptr<private, i32, read_write> = access %data, %x_106
+            store %157, 2i
             exit_switch  # switch_1
           }
-          %b37 = block {  # case
-            %x_104:i32 = load %i_3
-            %141:ptr<private, i32, read_write> = access %data, %x_104
-            store %141, 3i
+          $B37: {  # case
+            %158:i32 = load %i_3
+            %x_104:i32 = let %158
+            %160:ptr<private, i32, read_write> = access %data, %x_104
+            store %160, 3i
             exit_switch  # switch_1
           }
-          %b38 = block {  # case
-            %x_102:i32 = load %i_3
-            %143:ptr<private, i32, read_write> = access %data, %x_102
-            store %143, 4i
+          $B38: {  # case
+            %161:i32 = load %i_3
+            %x_102:i32 = let %161
+            %163:ptr<private, i32, read_write> = access %data, %x_102
+            store %163, 4i
             exit_switch  # switch_1
           }
-          %b39 = block {  # case
+          $B39: {  # case
             exit_switch  # switch_1
           }
         }
-        %144:i32 = load %i_3
-        %145:i32 = add %144, 1i
-        store %i_3, %145
-        continue %b28
+        %164:i32 = load %i_3
+        %165:i32 = add %164, 1i
+        store %i_3, %165
+        continue  # -> $B28
       }
-      %b28 = block {  # continuing
-        %x_124:i32 = load %i_3
-        %147:bool = lt %x_124, 10i
-        %148:bool = eq %147, false
-        break_if %148 %b27
+      $B28: {  # continuing
+        %166:i32 = load %i_3
+        %x_124:i32 = let %166
+        %168:bool = lt %x_124, 10i
+        %169:bool = eq %168, false
+        break_if %169  # -> [t: exit_loop loop_6, f: $B27]
       }
     }
     store %j_1, 0i
-    loop [b: %b40, c: %b41] {  # loop_7
-      %b40 = block {  # body
-        %149:i32 = load %j_1
-        %150:bool = lt %149, 10i
-        if %150 [t: %b42, f: %b43] {  # if_7
-          %b42 = block {  # true
+    loop [b: $B40, c: $B41] {  # loop_7
+      $B40: {  # body
+        %170:i32 = load %j_1
+        %171:bool = lt %170, 10i
+        if %171 [t: $B42, f: $B43] {  # if_7
+          $B42: {  # true
             exit_if  # if_7
           }
-          %b43 = block {  # false
+          $B43: {  # false
             exit_loop  # loop_7
           }
         }
-        %x_133:i32 = load %j_1
-        %152:ptr<private, i32, read_write> = access %temp, %x_133
-        %153:i32 = load %j_1
-        %154:ptr<private, i32, read_write> = access %data, %153
-        %155:i32 = load %154
-        store %152, %155
-        continue %b41
+        %172:i32 = load %j_1
+        %x_133:i32 = let %172
+        %174:ptr<private, i32, read_write> = access %temp, %x_133
+        %175:i32 = load %j_1
+        %176:ptr<private, i32, read_write> = access %data, %175
+        %177:i32 = load %176
+        store %174, %177
+        continue  # -> $B41
       }
-      %b41 = block {  # continuing
-        %156:i32 = load %j_1
-        %157:i32 = add %156, 1i
-        store %j_1, %157
-        next_iteration %b40
+      $B41: {  # continuing
+        %178:i32 = load %j_1
+        %179:i32 = add %178, 1i
+        store %j_1, %179
+        next_iteration  # -> $B40
       }
     }
-    %158:void = call %mergeSort_
-    %159:f32 = load_vector_element %gl_FragCoord, 1u
-    %160:i32 = convert %159
-    %161:bool = lt %160, 30i
-    if %161 [t: %b44, f: %b45] {  # if_8
-      %b44 = block {  # true
-        %162:ptr<private, i32, read_write> = access %data, 0i
-        %163:i32 = load %162
-        %164:f32 = convert %163
-        %165:f32 = div %164, 10.0f
-        %166:f32 = add 0.5f, %165
-        store %grey, %166
+    %180:void = call %mergeSort_
+    %181:f32 = load_vector_element %gl_FragCoord, 1u
+    %182:i32 = call %tint_f32_to_i32, %181
+    %183:bool = lt %182, 30i
+    if %183 [t: $B44, f: $B45] {  # if_8
+      $B44: {  # true
+        %184:ptr<private, i32, read_write> = access %data, 0i
+        %185:i32 = load %184
+        %186:f32 = convert %185
+        %187:f32 = div %186, 10.0f
+        %188:f32 = add 0.5f, %187
+        store %grey, %188
         exit_if  # if_8
       }
-      %b45 = block {  # false
-        %167:f32 = load_vector_element %gl_FragCoord, 1u
-        %168:i32 = convert %167
-        %169:bool = lt %168, 60i
-        if %169 [t: %b46, f: %b47] {  # if_9
-          %b46 = block {  # true
-            %170:ptr<private, i32, read_write> = access %data, 1i
-            %171:i32 = load %170
-            %172:f32 = convert %171
-            %173:f32 = div %172, 10.0f
-            %174:f32 = add 0.5f, %173
-            store %grey, %174
+      $B45: {  # false
+        %189:f32 = load_vector_element %gl_FragCoord, 1u
+        %190:i32 = call %tint_f32_to_i32, %189
+        %191:bool = lt %190, 60i
+        if %191 [t: $B46, f: $B47] {  # if_9
+          $B46: {  # true
+            %192:ptr<private, i32, read_write> = access %data, 1i
+            %193:i32 = load %192
+            %194:f32 = convert %193
+            %195:f32 = div %194, 10.0f
+            %196:f32 = add 0.5f, %195
+            store %grey, %196
             exit_if  # if_9
           }
-          %b47 = block {  # false
-            %175:f32 = load_vector_element %gl_FragCoord, 1u
-            %176:i32 = convert %175
-            %177:bool = lt %176, 90i
-            if %177 [t: %b48, f: %b49] {  # if_10
-              %b48 = block {  # true
-                %178:ptr<private, i32, read_write> = access %data, 2i
-                %179:i32 = load %178
-                %180:f32 = convert %179
-                %181:f32 = div %180, 10.0f
-                %182:f32 = add 0.5f, %181
-                store %grey, %182
+          $B47: {  # false
+            %197:f32 = load_vector_element %gl_FragCoord, 1u
+            %198:i32 = call %tint_f32_to_i32, %197
+            %199:bool = lt %198, 90i
+            if %199 [t: $B48, f: $B49] {  # if_10
+              $B48: {  # true
+                %200:ptr<private, i32, read_write> = access %data, 2i
+                %201:i32 = load %200
+                %202:f32 = convert %201
+                %203:f32 = div %202, 10.0f
+                %204:f32 = add 0.5f, %203
+                store %grey, %204
                 exit_if  # if_10
               }
-              %b49 = block {  # false
-                %183:f32 = load_vector_element %gl_FragCoord, 1u
-                %184:i32 = convert %183
-                %185:bool = lt %184, 120i
-                if %185 [t: %b50, f: %b51] {  # if_11
-                  %b50 = block {  # true
-                    %186:ptr<private, i32, read_write> = access %data, 3i
-                    %187:i32 = load %186
-                    %188:f32 = convert %187
-                    %189:f32 = div %188, 10.0f
-                    %190:f32 = add 0.5f, %189
-                    store %grey, %190
+              $B49: {  # false
+                %205:f32 = load_vector_element %gl_FragCoord, 1u
+                %206:i32 = call %tint_f32_to_i32, %205
+                %207:bool = lt %206, 120i
+                if %207 [t: $B50, f: $B51] {  # if_11
+                  $B50: {  # true
+                    %208:ptr<private, i32, read_write> = access %data, 3i
+                    %209:i32 = load %208
+                    %210:f32 = convert %209
+                    %211:f32 = div %210, 10.0f
+                    %212:f32 = add 0.5f, %211
+                    store %grey, %212
                     exit_if  # if_11
                   }
-                  %b51 = block {  # false
-                    %191:f32 = load_vector_element %gl_FragCoord, 1u
-                    %192:i32 = convert %191
-                    %193:bool = lt %192, 150i
-                    if %193 [t: %b52, f: %b53] {  # if_12
-                      %b52 = block {  # true
-                        discard
+                  $B51: {  # false
+                    %213:f32 = load_vector_element %gl_FragCoord, 1u
+                    %214:i32 = call %tint_f32_to_i32, %213
+                    %215:bool = lt %214, 150i
+                    if %215 [t: $B52, f: $B53] {  # if_12
+                      $B52: {  # true
+                        store %continue_execution, false
                         exit_if  # if_12
                       }
-                      %b53 = block {  # false
-                        %194:f32 = load_vector_element %gl_FragCoord, 1u
-                        %195:i32 = convert %194
-                        %196:bool = lt %195, 180i
-                        if %196 [t: %b54, f: %b55] {  # if_13
-                          %b54 = block {  # true
-                            %197:ptr<private, i32, read_write> = access %data, 5i
-                            %198:i32 = load %197
-                            %199:f32 = convert %198
-                            %200:f32 = div %199, 10.0f
-                            %201:f32 = add 0.5f, %200
-                            store %grey, %201
+                      $B53: {  # false
+                        %216:f32 = load_vector_element %gl_FragCoord, 1u
+                        %217:i32 = call %tint_f32_to_i32, %216
+                        %218:bool = lt %217, 180i
+                        if %218 [t: $B54, f: $B55] {  # if_13
+                          $B54: {  # true
+                            %219:ptr<private, i32, read_write> = access %data, 5i
+                            %220:i32 = load %219
+                            %221:f32 = convert %220
+                            %222:f32 = div %221, 10.0f
+                            %223:f32 = add 0.5f, %222
+                            store %grey, %223
                             exit_if  # if_13
                           }
-                          %b55 = block {  # false
-                            %202:f32 = load_vector_element %gl_FragCoord, 1u
-                            %203:i32 = convert %202
-                            %204:bool = lt %203, 210i
-                            if %204 [t: %b56, f: %b57] {  # if_14
-                              %b56 = block {  # true
-                                %205:ptr<private, i32, read_write> = access %data, 6i
-                                %206:i32 = load %205
-                                %207:f32 = convert %206
-                                %208:f32 = div %207, 10.0f
-                                %209:f32 = add 0.5f, %208
-                                store %grey, %209
+                          $B55: {  # false
+                            %224:f32 = load_vector_element %gl_FragCoord, 1u
+                            %225:i32 = call %tint_f32_to_i32, %224
+                            %226:bool = lt %225, 210i
+                            if %226 [t: $B56, f: $B57] {  # if_14
+                              $B56: {  # true
+                                %227:ptr<private, i32, read_write> = access %data, 6i
+                                %228:i32 = load %227
+                                %229:f32 = convert %228
+                                %230:f32 = div %229, 10.0f
+                                %231:f32 = add 0.5f, %230
+                                store %grey, %231
                                 exit_if  # if_14
                               }
-                              %b57 = block {  # false
-                                %210:f32 = load_vector_element %gl_FragCoord, 1u
-                                %211:i32 = convert %210
-                                %212:bool = lt %211, 240i
-                                if %212 [t: %b58, f: %b59] {  # if_15
-                                  %b58 = block {  # true
-                                    %213:ptr<private, i32, read_write> = access %data, 7i
-                                    %214:i32 = load %213
-                                    %215:f32 = convert %214
-                                    %216:f32 = div %215, 10.0f
-                                    %217:f32 = add 0.5f, %216
-                                    store %grey, %217
+                              $B57: {  # false
+                                %232:f32 = load_vector_element %gl_FragCoord, 1u
+                                %233:i32 = call %tint_f32_to_i32, %232
+                                %234:bool = lt %233, 240i
+                                if %234 [t: $B58, f: $B59] {  # if_15
+                                  $B58: {  # true
+                                    %235:ptr<private, i32, read_write> = access %data, 7i
+                                    %236:i32 = load %235
+                                    %237:f32 = convert %236
+                                    %238:f32 = div %237, 10.0f
+                                    %239:f32 = add 0.5f, %238
+                                    store %grey, %239
                                     exit_if  # if_15
                                   }
-                                  %b59 = block {  # false
-                                    %218:f32 = load_vector_element %gl_FragCoord, 1u
-                                    %219:i32 = convert %218
-                                    %220:bool = lt %219, 270i
-                                    if %220 [t: %b60, f: %b61] {  # if_16
-                                      %b60 = block {  # true
-                                        %221:ptr<private, i32, read_write> = access %data, 8i
-                                        %222:i32 = load %221
-                                        %223:f32 = convert %222
-                                        %224:f32 = div %223, 10.0f
-                                        %225:f32 = add 0.5f, %224
-                                        store %grey, %225
+                                  $B59: {  # false
+                                    %240:f32 = load_vector_element %gl_FragCoord, 1u
+                                    %241:i32 = call %tint_f32_to_i32, %240
+                                    %242:bool = lt %241, 270i
+                                    if %242 [t: $B60, f: $B61] {  # if_16
+                                      $B60: {  # true
+                                        %243:ptr<private, i32, read_write> = access %data, 8i
+                                        %244:i32 = load %243
+                                        %245:f32 = convert %244
+                                        %246:f32 = div %245, 10.0f
+                                        %247:f32 = add 0.5f, %246
+                                        store %grey, %247
                                         exit_if  # if_16
                                       }
-                                      %b61 = block {  # false
-                                        discard
+                                      $B61: {  # false
+                                        store %continue_execution, false
                                         exit_if  # if_16
                                       }
                                     }
@@ -513,23 +534,41 @@
         exit_if  # if_8
       }
     }
-    %226:f32 = load %grey
-    %x_245:vec3<f32> = construct %226
-    %228:f32 = access %x_245, 0u
-    %229:f32 = access %x_245, 1u
-    %230:f32 = access %x_245, 2u
-    %231:vec4<f32> = construct %228, %229, %230, 1.0f
-    store %x_GLF_color, %231
+    %248:f32 = load %grey
+    %249:vec3<f32> = construct %248
+    %x_245:vec3<f32> = let %249
+    %251:f32 = access %x_245, 0u
+    %252:f32 = access %x_245, 1u
+    %253:f32 = access %x_245, 2u
+    %254:vec4<f32> = construct %251, %252, %253, 1.0f
+    store %x_GLF_color, %254
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b62 {
-  %b62 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B62: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %234:void = call %main_1
-    %235:vec4<f32> = load %x_GLF_color
-    %236:main_out = construct %235
-    ret %236
+    %257:void = call %main_1
+    %258:vec4<f32> = load %x_GLF_color
+    %259:main_out = construct %258
+    %260:bool = load %continue_execution
+    %261:bool = eq %260, false
+    if %261 [t: $B63] {  # if_17
+      $B63: {  # true
+        terminate_invocation
+      }
+    }
+    ret %259
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B64: {
+    %263:i32 = convert %value
+    %264:bool = gte %value, -2147483648.0f
+    %265:i32 = select -2147483648i, %263, %264
+    %266:bool = lte %value, 2147483520.0f
+    %267:i32 = select 2147483647i, %265, %266
+    ret %267
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/0.wgsl.expected.ir.msl
index 5763af40..3b9439c 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/0.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,152 +8,183 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %data:ptr<private, array<i32, 10>, read_write> = var
   %temp:ptr<private, array<i32, 10>, read_write> = var
   %x_28:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%merge_i1_i1_i1_ = func(%f:ptr<function, i32, read_write>, %mid:ptr<function, i32, read_write>, %to:ptr<function, i32, read_write>):void -> %b2 {
-  %b2 = block {
+%merge_i1_i1_i1_ = func(%f:ptr<function, i32, read_write>, %mid:ptr<function, i32, read_write>, %to:ptr<function, i32, read_write>):void {
+  $B2: {
     %k:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %j:ptr<function, i32, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
-    %x_251:i32 = load %f
+    %15:i32 = load %f
+    %x_251:i32 = let %15
     store %k, %x_251
-    %x_252:i32 = load %f
+    %17:i32 = load %f
+    %x_252:i32 = let %17
     store %i, %x_252
-    %x_253:i32 = load %mid
-    %17:i32 = add %x_253, 1i
-    store %j, %17
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_259:i32 = load %i
-        %x_260:i32 = load %mid
-        %x_262:i32 = load %j
-        %x_263:i32 = load %to
-        %22:bool = lte %x_259, %x_260
-        %23:bool = lte %x_262, %x_263
-        %24:bool = and %22, %23
-        if %24 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    %19:i32 = load %mid
+    %x_253:i32 = let %19
+    %21:i32 = add %x_253, 1i
+    store %j, %21
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %22:i32 = load %i
+        %x_259:i32 = let %22
+        %24:i32 = load %mid
+        %x_260:i32 = let %24
+        %26:i32 = load %j
+        %x_262:i32 = let %26
+        %28:i32 = load %to
+        %x_263:i32 = let %28
+        %30:bool = lte %x_259, %x_260
+        %31:bool = lte %x_262, %x_263
+        %32:bool = and %30, %31
+        if %32 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_267:i32 = load %i
-        %26:ptr<private, i32, read_write> = access %data, %x_267
-        %x_269:i32 = load %26
-        %x_270:i32 = load %j
-        %29:ptr<private, i32, read_write> = access %data, %x_270
-        %x_272:i32 = load %29
-        %31:bool = lt %x_269, %x_272
-        if %31 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
-            %x_277:i32 = load %k
-            %33:i32 = add %x_277, 1i
-            store %k, %33
-            %x_279:i32 = load %i
-            %35:i32 = add %x_279, 1i
-            store %i, %35
-            %36:ptr<private, i32, read_write> = access %data, %x_279
-            %x_282:i32 = load %36
-            %38:ptr<private, i32, read_write> = access %temp, %x_277
-            store %38, %x_282
+        %33:i32 = load %i
+        %x_267:i32 = let %33
+        %35:ptr<private, i32, read_write> = access %data, %x_267
+        %36:i32 = load %35
+        %x_269:i32 = let %36
+        %38:i32 = load %j
+        %x_270:i32 = let %38
+        %40:ptr<private, i32, read_write> = access %data, %x_270
+        %41:i32 = load %40
+        %x_272:i32 = let %41
+        %43:bool = lt %x_269, %x_272
+        if %43 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
+            %44:i32 = load %k
+            %x_277:i32 = let %44
+            %46:i32 = add %x_277, 1i
+            store %k, %46
+            %47:i32 = load %i
+            %x_279:i32 = let %47
+            %49:i32 = add %x_279, 1i
+            store %i, %49
+            %50:ptr<private, i32, read_write> = access %data, %x_279
+            %51:i32 = load %50
+            %x_282:i32 = let %51
+            %53:ptr<private, i32, read_write> = access %temp, %x_277
+            store %53, %x_282
             exit_if  # if_2
           }
-          %b8 = block {  # false
-            %x_284:i32 = load %k
-            %40:i32 = add %x_284, 1i
-            store %k, %40
-            %x_286:i32 = load %j
-            %42:i32 = add %x_286, 1i
-            store %j, %42
-            %43:ptr<private, i32, read_write> = access %data, %x_286
-            %x_289:i32 = load %43
-            %45:ptr<private, i32, read_write> = access %temp, %x_284
-            store %45, %x_289
+          $B8: {  # false
+            %54:i32 = load %k
+            %x_284:i32 = let %54
+            %56:i32 = add %x_284, 1i
+            store %k, %56
+            %57:i32 = load %j
+            %x_286:i32 = let %57
+            %59:i32 = add %x_286, 1i
+            store %j, %59
+            %60:ptr<private, i32, read_write> = access %data, %x_286
+            %61:i32 = load %60
+            %x_289:i32 = let %61
+            %63:ptr<private, i32, read_write> = access %temp, %x_284
+            store %63, %x_289
             exit_if  # if_2
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
-    loop [b: %b9, c: %b10] {  # loop_2
-      %b9 = block {  # body
-        %x_295:i32 = load %i
-        %x_297:i32 = load %i
-        %x_298:i32 = load %mid
-        %49:bool = lt %x_295, 10i
-        %50:bool = lte %x_297, %x_298
-        %51:bool = and %49, %50
-        if %51 [t: %b11, f: %b12] {  # if_3
-          %b11 = block {  # true
+    loop [b: $B9, c: $B10] {  # loop_2
+      $B9: {  # body
+        %64:i32 = load %i
+        %x_295:i32 = let %64
+        %66:i32 = load %i
+        %x_297:i32 = let %66
+        %68:i32 = load %mid
+        %x_298:i32 = let %68
+        %70:bool = lt %x_295, 10i
+        %71:bool = lte %x_297, %x_298
+        %72:bool = and %70, %71
+        if %72 [t: $B11, f: $B12] {  # if_3
+          $B11: {  # true
             exit_if  # if_3
           }
-          %b12 = block {  # false
+          $B12: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_302:i32 = load %k
-        %53:i32 = add %x_302, 1i
-        store %k, %53
-        %x_304:i32 = load %i
-        %55:i32 = add %x_304, 1i
-        store %i, %55
-        %56:ptr<private, i32, read_write> = access %data, %x_304
-        %x_307:i32 = load %56
-        %58:ptr<private, i32, read_write> = access %temp, %x_302
-        store %58, %x_307
-        continue %b10
+        %73:i32 = load %k
+        %x_302:i32 = let %73
+        %75:i32 = add %x_302, 1i
+        store %k, %75
+        %76:i32 = load %i
+        %x_304:i32 = let %76
+        %78:i32 = add %x_304, 1i
+        store %i, %78
+        %79:ptr<private, i32, read_write> = access %data, %x_304
+        %80:i32 = load %79
+        %x_307:i32 = let %80
+        %82:ptr<private, i32, read_write> = access %temp, %x_302
+        store %82, %x_307
+        continue  # -> $B10
       }
-      %b10 = block {  # continuing
-        next_iteration %b9
+      $B10: {  # continuing
+        next_iteration  # -> $B9
       }
     }
-    %x_309:i32 = load %f
+    %83:i32 = load %f
+    %x_309:i32 = let %83
     store %i_1, %x_309
-    loop [b: %b13, c: %b14] {  # loop_3
-      %b13 = block {  # body
-        %x_314:i32 = load %i_1
-        %x_315:i32 = load %to
-        %62:bool = lte %x_314, %x_315
-        if %62 [t: %b15, f: %b16] {  # if_4
-          %b15 = block {  # true
+    loop [b: $B13, c: $B14] {  # loop_3
+      $B13: {  # body
+        %85:i32 = load %i_1
+        %x_314:i32 = let %85
+        %87:i32 = load %to
+        %x_315:i32 = let %87
+        %89:bool = lte %x_314, %x_315
+        if %89 [t: $B15, f: $B16] {  # if_4
+          $B15: {  # true
             exit_if  # if_4
           }
-          %b16 = block {  # false
+          $B16: {  # false
             exit_loop  # loop_3
           }
         }
-        %x_318:i32 = load %i_1
-        %x_319:i32 = load %i_1
-        %65:ptr<private, i32, read_write> = access %temp, %x_319
-        %x_321:i32 = load %65
-        %67:ptr<private, i32, read_write> = access %data, %x_318
-        store %67, %x_321
-        continue %b14
+        %90:i32 = load %i_1
+        %x_318:i32 = let %90
+        %92:i32 = load %i_1
+        %x_319:i32 = let %92
+        %94:ptr<private, i32, read_write> = access %temp, %x_319
+        %95:i32 = load %94
+        %x_321:i32 = let %95
+        %97:ptr<private, i32, read_write> = access %data, %x_318
+        store %97, %x_321
+        continue  # -> $B14
       }
-      %b14 = block {  # continuing
-        %x_323:i32 = load %i_1
-        %69:i32 = add %x_323, 1i
-        store %i_1, %69
-        next_iteration %b13
+      $B14: {  # continuing
+        %98:i32 = load %i_1
+        %x_323:i32 = let %98
+        %100:i32 = add %x_323, 1i
+        store %i_1, %100
+        next_iteration  # -> $B13
       }
     }
     ret
   }
 }
-%mergeSort_ = func():void -> %b17 {
-  %b17 = block {
+%mergeSort_ = func():void {
+  $B17: {
     %low:ptr<function, i32, read_write> = var
     %high:ptr<function, i32, read_write> = var
     %m:ptr<function, i32, read_write> = var
@@ -167,319 +198,372 @@
     store %low, 0i
     store %high, 9i
     store %m, 1i
-    loop [b: %b18, c: %b19] {  # loop_4
-      %b18 = block {  # body
-        %x_330:i32 = load %m
-        %x_331:i32 = load %high
-        %83:bool = lte %x_330, %x_331
-        if %83 [t: %b20, f: %b21] {  # if_5
-          %b20 = block {  # true
+    loop [b: $B18, c: $B19] {  # loop_4
+      $B18: {  # body
+        %112:i32 = load %m
+        %x_330:i32 = let %112
+        %114:i32 = load %high
+        %x_331:i32 = let %114
+        %116:bool = lte %x_330, %x_331
+        if %116 [t: $B20, f: $B21] {  # if_5
+          $B20: {  # true
             exit_if  # if_5
           }
-          %b21 = block {  # false
+          $B21: {  # false
             exit_loop  # loop_4
           }
         }
-        %x_334:i32 = load %low
+        %117:i32 = load %low
+        %x_334:i32 = let %117
         store %i_2, %x_334
-        loop [b: %b22, c: %b23] {  # loop_5
-          %b22 = block {  # body
-            %x_339:i32 = load %i_2
-            %x_340:i32 = load %high
-            %87:bool = lt %x_339, %x_340
-            if %87 [t: %b24, f: %b25] {  # if_6
-              %b24 = block {  # true
+        loop [b: $B22, c: $B23] {  # loop_5
+          $B22: {  # body
+            %119:i32 = load %i_2
+            %x_339:i32 = let %119
+            %121:i32 = load %high
+            %x_340:i32 = let %121
+            %123:bool = lt %x_339, %x_340
+            if %123 [t: $B24, f: $B25] {  # if_6
+              $B24: {  # true
                 exit_if  # if_6
               }
-              %b25 = block {  # false
+              $B25: {  # false
                 exit_loop  # loop_5
               }
             }
-            %x_343:i32 = load %i_2
+            %124:i32 = load %i_2
+            %x_343:i32 = let %124
             store %f_1, %x_343
-            %x_344:i32 = load %i_2
-            %x_345:i32 = load %m
-            %91:i32 = add %x_344, %x_345
-            %92:i32 = sub %91, 1i
-            store %mid_1, %92
-            %x_348:i32 = load %i_2
-            %x_349:i32 = load %m
-            %x_353:i32 = load %high
-            %96:i32 = mul 2i, %x_349
-            %97:i32 = add %x_348, %96
-            %98:i32 = sub %97, 1i
-            %99:i32 = min %98, %x_353
-            store %to_1, %99
-            %x_355:i32 = load %f_1
+            %126:i32 = load %i_2
+            %x_344:i32 = let %126
+            %128:i32 = load %m
+            %x_345:i32 = let %128
+            %130:i32 = add %x_344, %x_345
+            %131:i32 = sub %130, 1i
+            store %mid_1, %131
+            %132:i32 = load %i_2
+            %x_348:i32 = let %132
+            %134:i32 = load %m
+            %x_349:i32 = let %134
+            %136:i32 = load %high
+            %x_353:i32 = let %136
+            %138:i32 = mul 2i, %x_349
+            %139:i32 = add %x_348, %138
+            %140:i32 = sub %139, 1i
+            %141:i32 = min %140, %x_353
+            store %to_1, %141
+            %142:i32 = load %f_1
+            %x_355:i32 = let %142
             store %param, %x_355
-            %x_356:i32 = load %mid_1
+            %144:i32 = load %mid_1
+            %x_356:i32 = let %144
             store %param_1, %x_356
-            %x_357:i32 = load %to_1
+            %146:i32 = load %to_1
+            %x_357:i32 = let %146
             store %param_2, %x_357
-            %103:void = call %merge_i1_i1_i1_, %param, %param_1, %param_2
-            continue %b23
+            %148:void = call %merge_i1_i1_i1_, %param, %param_1, %param_2
+            continue  # -> $B23
           }
-          %b23 = block {  # continuing
-            %x_359:i32 = load %m
-            %x_361:i32 = load %i_2
-            %106:i32 = mul 2i, %x_359
-            %107:i32 = add %x_361, %106
-            store %i_2, %107
-            next_iteration %b22
+          $B23: {  # continuing
+            %149:i32 = load %m
+            %x_359:i32 = let %149
+            %151:i32 = load %i_2
+            %x_361:i32 = let %151
+            %153:i32 = mul 2i, %x_359
+            %154:i32 = add %x_361, %153
+            store %i_2, %154
+            next_iteration  # -> $B22
           }
         }
-        continue %b19
+        continue  # -> $B19
       }
-      %b19 = block {  # continuing
-        %x_363:i32 = load %m
-        %109:i32 = mul 2i, %x_363
-        store %m, %109
-        next_iteration %b18
+      $B19: {  # continuing
+        %155:i32 = load %m
+        %x_363:i32 = let %155
+        %157:i32 = mul 2i, %x_363
+        store %m, %157
+        next_iteration  # -> $B18
       }
     }
     ret
   }
 }
-%main_1 = func():void -> %b26 {
-  %b26 = block {
+%main_1 = func():void {
+  $B26: {
     %i_3:ptr<function, i32, read_write> = var
     %j_1:ptr<function, i32, read_write> = var
     %grey:ptr<function, f32, read_write> = var
-    %114:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
-    %x_84:f32 = load_vector_element %114, 0u
-    %116:i32 = convert %x_84
-    store %i_3, %116
-    loop [b: %b27, c: %b28] {  # loop_6
-      %b27 = block {  # body
-        %x_90:i32 = load %i_3
-        switch %x_90 [c: (9i, %b29), c: (8i, %b30), c: (7i, %b31), c: (6i, %b32), c: (5i, %b33), c: (4i, %b34), c: (3i, %b35), c: (2i, %b36), c: (1i, %b37), c: (0i, %b38), c: (default, %b39)] {  # switch_1
-          %b29 = block {  # case
-            %x_120:i32 = load %i_3
-            %119:ptr<private, i32, read_write> = access %data, %x_120
-            store %119, -5i
+    %162:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
+    %163:f32 = load_vector_element %162, 0u
+    %x_84:f32 = let %163
+    %165:i32 = call %tint_f32_to_i32, %x_84
+    store %i_3, %165
+    loop [b: $B27, c: $B28] {  # loop_6
+      $B27: {  # body
+        %167:i32 = load %i_3
+        %x_90:i32 = let %167
+        switch %x_90 [c: (9i, $B29), c: (8i, $B30), c: (7i, $B31), c: (6i, $B32), c: (5i, $B33), c: (4i, $B34), c: (3i, $B35), c: (2i, $B36), c: (1i, $B37), c: (0i, $B38), c: (default, $B39)] {  # switch_1
+          $B29: {  # case
+            %169:i32 = load %i_3
+            %x_120:i32 = let %169
+            %171:ptr<private, i32, read_write> = access %data, %x_120
+            store %171, -5i
             exit_switch  # switch_1
           }
-          %b30 = block {  # case
-            %x_118:i32 = load %i_3
-            %121:ptr<private, i32, read_write> = access %data, %x_118
-            store %121, -4i
+          $B30: {  # case
+            %172:i32 = load %i_3
+            %x_118:i32 = let %172
+            %174:ptr<private, i32, read_write> = access %data, %x_118
+            store %174, -4i
             exit_switch  # switch_1
           }
-          %b31 = block {  # case
-            %x_116:i32 = load %i_3
-            %123:ptr<private, i32, read_write> = access %data, %x_116
-            store %123, -3i
+          $B31: {  # case
+            %175:i32 = load %i_3
+            %x_116:i32 = let %175
+            %177:ptr<private, i32, read_write> = access %data, %x_116
+            store %177, -3i
             exit_switch  # switch_1
           }
-          %b32 = block {  # case
-            %x_114:i32 = load %i_3
-            %125:ptr<private, i32, read_write> = access %data, %x_114
-            store %125, -2i
+          $B32: {  # case
+            %178:i32 = load %i_3
+            %x_114:i32 = let %178
+            %180:ptr<private, i32, read_write> = access %data, %x_114
+            store %180, -2i
             exit_switch  # switch_1
           }
-          %b33 = block {  # case
-            %x_112:i32 = load %i_3
-            %127:ptr<private, i32, read_write> = access %data, %x_112
-            store %127, -1i
+          $B33: {  # case
+            %181:i32 = load %i_3
+            %x_112:i32 = let %181
+            %183:ptr<private, i32, read_write> = access %data, %x_112
+            store %183, -1i
             exit_switch  # switch_1
           }
-          %b34 = block {  # case
-            %x_110:i32 = load %i_3
-            %129:ptr<private, i32, read_write> = access %data, %x_110
-            store %129, 0i
+          $B34: {  # case
+            %184:i32 = load %i_3
+            %x_110:i32 = let %184
+            %186:ptr<private, i32, read_write> = access %data, %x_110
+            store %186, 0i
             exit_switch  # switch_1
           }
-          %b35 = block {  # case
-            %x_108:i32 = load %i_3
-            %131:ptr<private, i32, read_write> = access %data, %x_108
-            store %131, 1i
+          $B35: {  # case
+            %187:i32 = load %i_3
+            %x_108:i32 = let %187
+            %189:ptr<private, i32, read_write> = access %data, %x_108
+            store %189, 1i
             exit_switch  # switch_1
           }
-          %b36 = block {  # case
-            %x_106:i32 = load %i_3
-            %133:ptr<private, i32, read_write> = access %data, %x_106
-            store %133, 2i
+          $B36: {  # case
+            %190:i32 = load %i_3
+            %x_106:i32 = let %190
+            %192:ptr<private, i32, read_write> = access %data, %x_106
+            store %192, 2i
             exit_switch  # switch_1
           }
-          %b37 = block {  # case
-            %x_104:i32 = load %i_3
-            %135:ptr<private, i32, read_write> = access %data, %x_104
-            store %135, 3i
+          $B37: {  # case
+            %193:i32 = load %i_3
+            %x_104:i32 = let %193
+            %195:ptr<private, i32, read_write> = access %data, %x_104
+            store %195, 3i
             exit_switch  # switch_1
           }
-          %b38 = block {  # case
-            %x_102:i32 = load %i_3
-            %137:ptr<private, i32, read_write> = access %data, %x_102
-            store %137, 4i
+          $B38: {  # case
+            %196:i32 = load %i_3
+            %x_102:i32 = let %196
+            %198:ptr<private, i32, read_write> = access %data, %x_102
+            store %198, 4i
             exit_switch  # switch_1
           }
-          %b39 = block {  # case
+          $B39: {  # case
             exit_switch  # switch_1
           }
         }
-        %x_122:i32 = load %i_3
-        %139:i32 = add %x_122, 1i
-        store %i_3, %139
-        continue %b28
+        %199:i32 = load %i_3
+        %x_122:i32 = let %199
+        %201:i32 = add %x_122, 1i
+        store %i_3, %201
+        continue  # -> $B28
       }
-      %b28 = block {  # continuing
-        %x_124:i32 = load %i_3
-        %141:bool = lt %x_124, 10i
-        %142:bool = eq %141, false
-        break_if %142 %b27
+      $B28: {  # continuing
+        %202:i32 = load %i_3
+        %x_124:i32 = let %202
+        %204:bool = lt %x_124, 10i
+        %205:bool = eq %204, false
+        break_if %205  # -> [t: exit_loop loop_6, f: $B27]
       }
     }
     store %j_1, 0i
-    loop [b: %b40, c: %b41] {  # loop_7
-      %b40 = block {  # body
-        %x_130:i32 = load %j_1
-        %144:bool = lt %x_130, 10i
-        if %144 [t: %b42, f: %b43] {  # if_7
-          %b42 = block {  # true
+    loop [b: $B40, c: $B41] {  # loop_7
+      $B40: {  # body
+        %206:i32 = load %j_1
+        %x_130:i32 = let %206
+        %208:bool = lt %x_130, 10i
+        if %208 [t: $B42, f: $B43] {  # if_7
+          $B42: {  # true
             exit_if  # if_7
           }
-          %b43 = block {  # false
+          $B43: {  # false
             exit_loop  # loop_7
           }
         }
-        %x_133:i32 = load %j_1
-        %x_134:i32 = load %j_1
-        %147:ptr<private, i32, read_write> = access %data, %x_134
-        %x_136:i32 = load %147
-        %149:ptr<private, i32, read_write> = access %temp, %x_133
-        store %149, %x_136
-        continue %b41
+        %209:i32 = load %j_1
+        %x_133:i32 = let %209
+        %211:i32 = load %j_1
+        %x_134:i32 = let %211
+        %213:ptr<private, i32, read_write> = access %data, %x_134
+        %214:i32 = load %213
+        %x_136:i32 = let %214
+        %216:ptr<private, i32, read_write> = access %temp, %x_133
+        store %216, %x_136
+        continue  # -> $B41
       }
-      %b41 = block {  # continuing
-        %x_138:i32 = load %j_1
-        %151:i32 = add %x_138, 1i
-        store %j_1, %151
-        next_iteration %b40
+      $B41: {  # continuing
+        %217:i32 = load %j_1
+        %x_138:i32 = let %217
+        %219:i32 = add %x_138, 1i
+        store %j_1, %219
+        next_iteration  # -> $B40
       }
     }
-    %152:void = call %mergeSort_
-    %x_142:f32 = load_vector_element %gl_FragCoord, 1u
-    %154:i32 = convert %x_142
-    %155:bool = lt %154, 30i
-    if %155 [t: %b44, f: %b45] {  # if_8
-      %b44 = block {  # true
-        %156:ptr<private, i32, read_write> = access %data, 0i
-        %x_149:i32 = load %156
-        %158:f32 = convert %x_149
-        %159:f32 = div %158, 10.0f
-        %160:f32 = add 0.5f, %159
-        store %grey, %160
+    %220:void = call %mergeSort_
+    %221:f32 = load_vector_element %gl_FragCoord, 1u
+    %x_142:f32 = let %221
+    %223:i32 = call %tint_f32_to_i32, %x_142
+    %224:bool = lt %223, 30i
+    if %224 [t: $B44, f: $B45] {  # if_8
+      $B44: {  # true
+        %225:ptr<private, i32, read_write> = access %data, 0i
+        %226:i32 = load %225
+        %x_149:i32 = let %226
+        %228:f32 = convert %x_149
+        %229:f32 = div %228, 10.0f
+        %230:f32 = add 0.5f, %229
+        store %grey, %230
         exit_if  # if_8
       }
-      %b45 = block {  # false
-        %x_154:f32 = load_vector_element %gl_FragCoord, 1u
-        %162:i32 = convert %x_154
-        %163:bool = lt %162, 60i
-        if %163 [t: %b46, f: %b47] {  # if_9
-          %b46 = block {  # true
-            %164:ptr<private, i32, read_write> = access %data, 1i
-            %x_161:i32 = load %164
-            %166:f32 = convert %x_161
-            %167:f32 = div %166, 10.0f
-            %168:f32 = add 0.5f, %167
-            store %grey, %168
+      $B45: {  # false
+        %231:f32 = load_vector_element %gl_FragCoord, 1u
+        %x_154:f32 = let %231
+        %233:i32 = call %tint_f32_to_i32, %x_154
+        %234:bool = lt %233, 60i
+        if %234 [t: $B46, f: $B47] {  # if_9
+          $B46: {  # true
+            %235:ptr<private, i32, read_write> = access %data, 1i
+            %236:i32 = load %235
+            %x_161:i32 = let %236
+            %238:f32 = convert %x_161
+            %239:f32 = div %238, 10.0f
+            %240:f32 = add 0.5f, %239
+            store %grey, %240
             exit_if  # if_9
           }
-          %b47 = block {  # false
-            %x_166:f32 = load_vector_element %gl_FragCoord, 1u
-            %170:i32 = convert %x_166
-            %171:bool = lt %170, 90i
-            if %171 [t: %b48, f: %b49] {  # if_10
-              %b48 = block {  # true
-                %172:ptr<private, i32, read_write> = access %data, 2i
-                %x_173:i32 = load %172
-                %174:f32 = convert %x_173
-                %175:f32 = div %174, 10.0f
-                %176:f32 = add 0.5f, %175
-                store %grey, %176
+          $B47: {  # false
+            %241:f32 = load_vector_element %gl_FragCoord, 1u
+            %x_166:f32 = let %241
+            %243:i32 = call %tint_f32_to_i32, %x_166
+            %244:bool = lt %243, 90i
+            if %244 [t: $B48, f: $B49] {  # if_10
+              $B48: {  # true
+                %245:ptr<private, i32, read_write> = access %data, 2i
+                %246:i32 = load %245
+                %x_173:i32 = let %246
+                %248:f32 = convert %x_173
+                %249:f32 = div %248, 10.0f
+                %250:f32 = add 0.5f, %249
+                store %grey, %250
                 exit_if  # if_10
               }
-              %b49 = block {  # false
-                %x_178:f32 = load_vector_element %gl_FragCoord, 1u
-                %178:i32 = convert %x_178
-                %179:bool = lt %178, 120i
-                if %179 [t: %b50, f: %b51] {  # if_11
-                  %b50 = block {  # true
-                    %180:ptr<private, i32, read_write> = access %data, 3i
-                    %x_185:i32 = load %180
-                    %182:f32 = convert %x_185
-                    %183:f32 = div %182, 10.0f
-                    %184:f32 = add 0.5f, %183
-                    store %grey, %184
+              $B49: {  # false
+                %251:f32 = load_vector_element %gl_FragCoord, 1u
+                %x_178:f32 = let %251
+                %253:i32 = call %tint_f32_to_i32, %x_178
+                %254:bool = lt %253, 120i
+                if %254 [t: $B50, f: $B51] {  # if_11
+                  $B50: {  # true
+                    %255:ptr<private, i32, read_write> = access %data, 3i
+                    %256:i32 = load %255
+                    %x_185:i32 = let %256
+                    %258:f32 = convert %x_185
+                    %259:f32 = div %258, 10.0f
+                    %260:f32 = add 0.5f, %259
+                    store %grey, %260
                     exit_if  # if_11
                   }
-                  %b51 = block {  # false
-                    %x_190:f32 = load_vector_element %gl_FragCoord, 1u
-                    %186:i32 = convert %x_190
-                    %187:bool = lt %186, 150i
-                    if %187 [t: %b52, f: %b53] {  # if_12
-                      %b52 = block {  # true
-                        discard
+                  $B51: {  # false
+                    %261:f32 = load_vector_element %gl_FragCoord, 1u
+                    %x_190:f32 = let %261
+                    %263:i32 = call %tint_f32_to_i32, %x_190
+                    %264:bool = lt %263, 150i
+                    if %264 [t: $B52, f: $B53] {  # if_12
+                      $B52: {  # true
+                        store %continue_execution, false
                         exit_if  # if_12
                       }
-                      %b53 = block {  # false
-                        %x_197:f32 = load_vector_element %gl_FragCoord, 1u
-                        %189:i32 = convert %x_197
-                        %190:bool = lt %189, 180i
-                        if %190 [t: %b54, f: %b55] {  # if_13
-                          %b54 = block {  # true
-                            %191:ptr<private, i32, read_write> = access %data, 5i
-                            %x_204:i32 = load %191
-                            %193:f32 = convert %x_204
-                            %194:f32 = div %193, 10.0f
-                            %195:f32 = add 0.5f, %194
-                            store %grey, %195
+                      $B53: {  # false
+                        %265:f32 = load_vector_element %gl_FragCoord, 1u
+                        %x_197:f32 = let %265
+                        %267:i32 = call %tint_f32_to_i32, %x_197
+                        %268:bool = lt %267, 180i
+                        if %268 [t: $B54, f: $B55] {  # if_13
+                          $B54: {  # true
+                            %269:ptr<private, i32, read_write> = access %data, 5i
+                            %270:i32 = load %269
+                            %x_204:i32 = let %270
+                            %272:f32 = convert %x_204
+                            %273:f32 = div %272, 10.0f
+                            %274:f32 = add 0.5f, %273
+                            store %grey, %274
                             exit_if  # if_13
                           }
-                          %b55 = block {  # false
-                            %x_209:f32 = load_vector_element %gl_FragCoord, 1u
-                            %197:i32 = convert %x_209
-                            %198:bool = lt %197, 210i
-                            if %198 [t: %b56, f: %b57] {  # if_14
-                              %b56 = block {  # true
-                                %199:ptr<private, i32, read_write> = access %data, 6i
-                                %x_216:i32 = load %199
-                                %201:f32 = convert %x_216
-                                %202:f32 = div %201, 10.0f
-                                %203:f32 = add 0.5f, %202
-                                store %grey, %203
+                          $B55: {  # false
+                            %275:f32 = load_vector_element %gl_FragCoord, 1u
+                            %x_209:f32 = let %275
+                            %277:i32 = call %tint_f32_to_i32, %x_209
+                            %278:bool = lt %277, 210i
+                            if %278 [t: $B56, f: $B57] {  # if_14
+                              $B56: {  # true
+                                %279:ptr<private, i32, read_write> = access %data, 6i
+                                %280:i32 = load %279
+                                %x_216:i32 = let %280
+                                %282:f32 = convert %x_216
+                                %283:f32 = div %282, 10.0f
+                                %284:f32 = add 0.5f, %283
+                                store %grey, %284
                                 exit_if  # if_14
                               }
-                              %b57 = block {  # false
-                                %x_221:f32 = load_vector_element %gl_FragCoord, 1u
-                                %205:i32 = convert %x_221
-                                %206:bool = lt %205, 240i
-                                if %206 [t: %b58, f: %b59] {  # if_15
-                                  %b58 = block {  # true
-                                    %207:ptr<private, i32, read_write> = access %data, 7i
-                                    %x_228:i32 = load %207
-                                    %209:f32 = convert %x_228
-                                    %210:f32 = div %209, 10.0f
-                                    %211:f32 = add 0.5f, %210
-                                    store %grey, %211
+                              $B57: {  # false
+                                %285:f32 = load_vector_element %gl_FragCoord, 1u
+                                %x_221:f32 = let %285
+                                %287:i32 = call %tint_f32_to_i32, %x_221
+                                %288:bool = lt %287, 240i
+                                if %288 [t: $B58, f: $B59] {  # if_15
+                                  $B58: {  # true
+                                    %289:ptr<private, i32, read_write> = access %data, 7i
+                                    %290:i32 = load %289
+                                    %x_228:i32 = let %290
+                                    %292:f32 = convert %x_228
+                                    %293:f32 = div %292, 10.0f
+                                    %294:f32 = add 0.5f, %293
+                                    store %grey, %294
                                     exit_if  # if_15
                                   }
-                                  %b59 = block {  # false
-                                    %x_233:f32 = load_vector_element %gl_FragCoord, 1u
-                                    %213:i32 = convert %x_233
-                                    %214:bool = lt %213, 270i
-                                    if %214 [t: %b60, f: %b61] {  # if_16
-                                      %b60 = block {  # true
-                                        %215:ptr<private, i32, read_write> = access %data, 8i
-                                        %x_240:i32 = load %215
-                                        %217:f32 = convert %x_240
-                                        %218:f32 = div %217, 10.0f
-                                        %219:f32 = add 0.5f, %218
-                                        store %grey, %219
+                                  $B59: {  # false
+                                    %295:f32 = load_vector_element %gl_FragCoord, 1u
+                                    %x_233:f32 = let %295
+                                    %297:i32 = call %tint_f32_to_i32, %x_233
+                                    %298:bool = lt %297, 270i
+                                    if %298 [t: $B60, f: $B61] {  # if_16
+                                      $B60: {  # true
+                                        %299:ptr<private, i32, read_write> = access %data, 8i
+                                        %300:i32 = load %299
+                                        %x_240:i32 = let %300
+                                        %302:f32 = convert %x_240
+                                        %303:f32 = div %302, 10.0f
+                                        %304:f32 = add 0.5f, %303
+                                        store %grey, %304
                                         exit_if  # if_16
                                       }
-                                      %b61 = block {  # false
-                                        discard
+                                      $B61: {  # false
+                                        store %continue_execution, false
                                         exit_if  # if_16
                                       }
                                     }
@@ -507,23 +591,42 @@
         exit_if  # if_8
       }
     }
-    %x_244:f32 = load %grey
-    %x_245:vec3<f32> = construct %x_244, %x_244, %x_244
-    %222:f32 = access %x_245, 0u
-    %223:f32 = access %x_245, 1u
-    %224:f32 = access %x_245, 2u
-    %225:vec4<f32> = construct %222, %223, %224, 1.0f
-    store %x_GLF_color, %225
+    %305:f32 = load %grey
+    %x_244:f32 = let %305
+    %307:vec3<f32> = construct %x_244, %x_244, %x_244
+    %x_245:vec3<f32> = let %307
+    %309:f32 = access %x_245, 0u
+    %310:f32 = access %x_245, 1u
+    %311:f32 = access %x_245, 2u
+    %312:vec4<f32> = construct %309, %310, %311, 1.0f
+    store %x_GLF_color, %312
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b62 {
-  %b62 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B62: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %228:void = call %main_1
-    %229:vec4<f32> = load %x_GLF_color
-    %230:main_out = construct %229
-    ret %230
+    %315:void = call %main_1
+    %316:vec4<f32> = load %x_GLF_color
+    %317:main_out = construct %316
+    %318:bool = load %continue_execution
+    %319:bool = eq %318, false
+    if %319 [t: $B63] {  # if_17
+      $B63: {  # true
+        terminate_invocation
+      }
+    }
+    ret %317
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B64: {
+    %321:i32 = convert %value
+    %322:bool = gte %value, -2147483648.0f
+    %323:i32 = select -2147483648i, %321, %322
+    %324:bool = lte %value, 2147483520.0f
+    %325:i32 = select 2147483647i, %323, %324
+    ret %325
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/1.spvasm.expected.ir.msl
index 098a59e..e64dc3d 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/1.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,158 +8,166 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %data:ptr<private, array<i32, 10>, read_write> = var
   %temp:ptr<private, array<i32, 10>, read_write> = var
   %x_28:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%merge_i1_i1_i1_ = func(%f:ptr<function, i32, read_write>, %mid:ptr<function, i32, read_write>, %to:ptr<function, i32, read_write>):void -> %b2 {
-  %b2 = block {
+%merge_i1_i1_i1_ = func(%f:ptr<function, i32, read_write>, %mid:ptr<function, i32, read_write>, %to:ptr<function, i32, read_write>):void {
+  $B2: {
     %k:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %j:ptr<function, i32, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
-    %14:i32 = load %f
-    store %k, %14
     %15:i32 = load %f
-    store %i, %15
-    %16:i32 = load %mid
-    %17:i32 = add %16, 1i
-    store %j, %17
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %18:i32 = load %i
-        %19:i32 = load %mid
-        %20:bool = lte %18, %19
-        %21:i32 = load %j
-        %22:i32 = load %to
-        %23:bool = lte %21, %22
-        %24:bool = and %20, %23
-        if %24 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    store %k, %15
+    %16:i32 = load %f
+    store %i, %16
+    %17:i32 = load %mid
+    %18:i32 = add %17, 1i
+    store %j, %18
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %19:i32 = load %i
+        %20:i32 = load %mid
+        %21:bool = lte %19, %20
+        %22:i32 = load %j
+        %23:i32 = load %to
+        %24:bool = lte %22, %23
+        %25:bool = and %21, %24
+        if %25 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %25:i32 = load %i
-        %26:ptr<private, i32, read_write> = access %data, %25
-        %27:i32 = load %26
-        %28:i32 = load %j
-        %29:ptr<private, i32, read_write> = access %data, %28
-        %30:i32 = load %29
-        %31:bool = lt %27, %30
-        if %31 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
-            %x_288:i32 = load %k
+        %26:i32 = load %i
+        %27:ptr<private, i32, read_write> = access %data, %26
+        %28:i32 = load %27
+        %29:i32 = load %j
+        %30:ptr<private, i32, read_write> = access %data, %29
+        %31:i32 = load %30
+        %32:bool = lt %28, %31
+        if %32 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
             %33:i32 = load %k
-            %34:i32 = add %33, 1i
-            store %k, %34
-            %x_290:i32 = load %i
-            %36:i32 = load %i
-            %37:i32 = add %36, 1i
-            store %i, %37
-            %38:ptr<private, i32, read_write> = access %temp, %x_288
-            %39:ptr<private, i32, read_write> = access %data, %x_290
-            %40:i32 = load %39
-            store %38, %40
+            %x_288:i32 = let %33
+            %35:i32 = load %k
+            %36:i32 = add %35, 1i
+            store %k, %36
+            %37:i32 = load %i
+            %x_290:i32 = let %37
+            %39:i32 = load %i
+            %40:i32 = add %39, 1i
+            store %i, %40
+            %41:ptr<private, i32, read_write> = access %temp, %x_288
+            %42:ptr<private, i32, read_write> = access %data, %x_290
+            %43:i32 = load %42
+            store %41, %43
             exit_if  # if_2
           }
-          %b8 = block {  # false
-            %x_295:i32 = load %k
-            %42:i32 = load %k
-            %43:i32 = add %42, 1i
-            store %k, %43
-            %x_297:i32 = load %j
-            %45:i32 = load %j
-            %46:i32 = add %45, 1i
-            store %j, %46
-            %47:ptr<private, i32, read_write> = access %temp, %x_295
-            %48:ptr<private, i32, read_write> = access %data, %x_297
-            %49:i32 = load %48
-            store %47, %49
+          $B8: {  # false
+            %44:i32 = load %k
+            %x_295:i32 = let %44
+            %46:i32 = load %k
+            %47:i32 = add %46, 1i
+            store %k, %47
+            %48:i32 = load %j
+            %x_297:i32 = let %48
+            %50:i32 = load %j
+            %51:i32 = add %50, 1i
+            store %j, %51
+            %52:ptr<private, i32, read_write> = access %temp, %x_295
+            %53:ptr<private, i32, read_write> = access %data, %x_297
+            %54:i32 = load %53
+            store %52, %54
             exit_if  # if_2
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
-    loop [b: %b9, c: %b10] {  # loop_2
-      %b9 = block {  # body
-        %50:i32 = load %i
-        %51:bool = lt %50, 10i
-        %52:i32 = load %i
-        %53:i32 = load %mid
-        %54:bool = lte %52, %53
-        %55:bool = and %51, %54
-        if %55 [t: %b11, f: %b12] {  # if_3
-          %b11 = block {  # true
+    loop [b: $B9, c: $B10] {  # loop_2
+      $B9: {  # body
+        %55:i32 = load %i
+        %56:bool = lt %55, 10i
+        %57:i32 = load %i
+        %58:i32 = load %mid
+        %59:bool = lte %57, %58
+        %60:bool = and %56, %59
+        if %60 [t: $B11, f: $B12] {  # if_3
+          $B11: {  # true
             exit_if  # if_3
           }
-          %b12 = block {  # false
+          $B12: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_313:i32 = load %k
-        %57:i32 = load %k
-        %58:i32 = add %57, 1i
-        store %k, %58
-        %x_315:i32 = load %i
-        %60:i32 = load %i
-        %61:i32 = add %60, 1i
-        store %i, %61
-        %62:ptr<private, i32, read_write> = access %temp, %x_313
-        %63:ptr<private, i32, read_write> = access %data, %x_315
-        %64:i32 = load %63
-        store %62, %64
-        continue %b10
+        %61:i32 = load %k
+        %x_313:i32 = let %61
+        %63:i32 = load %k
+        %64:i32 = add %63, 1i
+        store %k, %64
+        %65:i32 = load %i
+        %x_315:i32 = let %65
+        %67:i32 = load %i
+        %68:i32 = add %67, 1i
+        store %i, %68
+        %69:ptr<private, i32, read_write> = access %temp, %x_313
+        %70:ptr<private, i32, read_write> = access %data, %x_315
+        %71:i32 = load %70
+        store %69, %71
+        continue  # -> $B10
       }
-      %b10 = block {  # continuing
-        next_iteration %b9
+      $B10: {  # continuing
+        next_iteration  # -> $B9
       }
     }
-    %65:i32 = load %f
-    store %i_1, %65
-    loop [b: %b13, c: %b14] {  # loop_3
-      %b13 = block {  # body
-        %66:i32 = load %i_1
-        %67:i32 = load %to
-        %68:bool = lte %66, %67
-        if %68 [t: %b15, f: %b16] {  # if_4
-          %b15 = block {  # true
+    %72:i32 = load %f
+    store %i_1, %72
+    loop [b: $B13, c: $B14] {  # loop_3
+      $B13: {  # body
+        %73:i32 = load %i_1
+        %74:i32 = load %to
+        %75:bool = lte %73, %74
+        if %75 [t: $B15, f: $B16] {  # if_4
+          $B15: {  # true
             exit_if  # if_4
           }
-          %b16 = block {  # false
+          $B16: {  # false
             exit_loop  # loop_3
           }
         }
-        %x_329:i32 = load %i_1
-        %70:ptr<private, i32, read_write> = access %data, %x_329
-        %71:i32 = load %i_1
-        %72:ptr<private, i32, read_write> = access %temp, %71
-        %73:i32 = load %72
-        store %70, %73
-        continue %b14
+        %76:i32 = load %i_1
+        %x_329:i32 = let %76
+        %78:ptr<private, i32, read_write> = access %data, %x_329
+        %79:i32 = load %i_1
+        %80:ptr<private, i32, read_write> = access %temp, %79
+        %81:i32 = load %80
+        store %78, %81
+        continue  # -> $B14
       }
-      %b14 = block {  # continuing
-        %74:i32 = load %i_1
-        %75:i32 = add %74, 1i
-        store %i_1, %75
-        next_iteration %b13
+      $B14: {  # continuing
+        %82:i32 = load %i_1
+        %83:i32 = add %82, 1i
+        store %i_1, %83
+        next_iteration  # -> $B13
       }
     }
     ret
   }
 }
-%mergeSort_ = func():void -> %b17 {
-  %b17 = block {
+%mergeSort_ = func():void {
+  $B17: {
     %low:ptr<function, i32, read_write> = var
     %high:ptr<function, i32, read_write> = var
     %m:ptr<function, i32, read_write> = var
@@ -173,347 +181,362 @@
     store %low, 0i
     store %high, 9i
     store %m, 1i
-    loop [b: %b18, c: %b19] {  # loop_4
-      %b18 = block {  # body
-        %87:i32 = load %m
-        %88:i32 = load %high
-        %89:bool = lte %87, %88
-        if %89 [t: %b20, f: %b21] {  # if_5
-          %b20 = block {  # true
+    loop [b: $B18, c: $B19] {  # loop_4
+      $B18: {  # body
+        %95:i32 = load %m
+        %96:i32 = load %high
+        %97:bool = lte %95, %96
+        if %97 [t: $B20, f: $B21] {  # if_5
+          $B20: {  # true
             exit_if  # if_5
           }
-          %b21 = block {  # false
+          $B21: {  # false
             exit_loop  # loop_4
           }
         }
-        %90:i32 = load %low
-        store %i_2, %90
-        loop [b: %b22, c: %b23] {  # loop_5
-          %b22 = block {  # body
-            %91:i32 = load %i_2
-            %92:i32 = load %high
-            %93:bool = lt %91, %92
-            if %93 [t: %b24, f: %b25] {  # if_6
-              %b24 = block {  # true
+        %98:i32 = load %low
+        store %i_2, %98
+        loop [b: $B22, c: $B23] {  # loop_5
+          $B22: {  # body
+            %99:i32 = load %i_2
+            %100:i32 = load %high
+            %101:bool = lt %99, %100
+            if %101 [t: $B24, f: $B25] {  # if_6
+              $B24: {  # true
                 exit_if  # if_6
               }
-              %b25 = block {  # false
+              $B25: {  # false
                 exit_loop  # loop_5
               }
             }
-            %94:i32 = load %i_2
-            store %f_1, %94
-            %95:i32 = load %i_2
-            %96:i32 = load %m
-            %97:i32 = add %95, %96
-            %98:i32 = sub %97, 1i
-            store %mid_1, %98
-            %99:i32 = load %i_2
-            %100:i32 = load %m
-            %101:i32 = mul 2i, %100
-            %102:i32 = add %99, %101
-            %103:i32 = sub %102, 1i
-            %104:i32 = load %high
-            %105:i32 = min %103, %104
-            store %to_1, %105
-            %106:i32 = load %f_1
-            store %param, %106
-            %107:i32 = load %mid_1
-            store %param_1, %107
-            %108:i32 = load %to_1
-            store %param_2, %108
-            %109:void = call %merge_i1_i1_i1_, %param, %param_1, %param_2
-            continue %b23
+            %102:i32 = load %i_2
+            store %f_1, %102
+            %103:i32 = load %i_2
+            %104:i32 = load %m
+            %105:i32 = add %103, %104
+            %106:i32 = sub %105, 1i
+            store %mid_1, %106
+            %107:i32 = load %i_2
+            %108:i32 = load %m
+            %109:i32 = mul 2i, %108
+            %110:i32 = add %107, %109
+            %111:i32 = sub %110, 1i
+            %112:i32 = load %high
+            %113:i32 = min %111, %112
+            store %to_1, %113
+            %114:i32 = load %f_1
+            store %param, %114
+            %115:i32 = load %mid_1
+            store %param_1, %115
+            %116:i32 = load %to_1
+            store %param_2, %116
+            %117:void = call %merge_i1_i1_i1_, %param, %param_1, %param_2
+            continue  # -> $B23
           }
-          %b23 = block {  # continuing
-            %110:i32 = load %i_2
-            %111:i32 = load %m
-            %112:i32 = mul 2i, %111
-            %113:i32 = add %110, %112
-            store %i_2, %113
-            next_iteration %b22
+          $B23: {  # continuing
+            %118:i32 = load %i_2
+            %119:i32 = load %m
+            %120:i32 = mul 2i, %119
+            %121:i32 = add %118, %120
+            store %i_2, %121
+            next_iteration  # -> $B22
           }
         }
-        continue %b19
+        continue  # -> $B19
       }
-      %b19 = block {  # continuing
-        %114:i32 = load %m
-        %115:i32 = mul 2i, %114
-        store %m, %115
-        next_iteration %b18
+      $B19: {  # continuing
+        %122:i32 = load %m
+        %123:i32 = mul 2i, %122
+        store %m, %123
+        next_iteration  # -> $B18
       }
     }
     ret
   }
 }
-%main_1 = func():void -> %b26 {
-  %b26 = block {
+%main_1 = func():void {
+  $B26: {
     %i_3:ptr<function, i32, read_write> = var
     %j_1:ptr<function, i32, read_write> = var
     %grey:ptr<function, f32, read_write> = var
-    %120:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
-    %121:f32 = load_vector_element %120, 0u
-    %122:i32 = convert %121
-    store %i_3, %122
-    loop [b: %b27, c: %b28] {  # loop_6
-      %b27 = block {  # body
-        %x_92:i32 = load %i_3
-        switch %x_92 [c: (9i, %b29), c: (8i, %b30), c: (7i, %b31), c: (6i, %b32), c: (5i, %b33), c: (4i, %b34), c: (3i, %b35), c: (2i, %b36), c: (1i, %b37), c: (0i, %b38), c: (default, %b39)] {  # switch_1
-          %b29 = block {  # case
-            %x_122:i32 = load %i_3
-            %125:ptr<private, i32, read_write> = access %data, %x_122
-            store %125, -5i
+    %128:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
+    %129:f32 = load_vector_element %128, 0u
+    %130:i32 = call %tint_f32_to_i32, %129
+    store %i_3, %130
+    loop [b: $B27, c: $B28] {  # loop_6
+      $B27: {  # body
+        %132:i32 = load %i_3
+        %x_92:i32 = let %132
+        switch %x_92 [c: (9i, $B29), c: (8i, $B30), c: (7i, $B31), c: (6i, $B32), c: (5i, $B33), c: (4i, $B34), c: (3i, $B35), c: (2i, $B36), c: (1i, $B37), c: (0i, $B38), c: (default, $B39)] {  # switch_1
+          $B29: {  # case
+            %134:i32 = load %i_3
+            %x_122:i32 = let %134
+            %136:ptr<private, i32, read_write> = access %data, %x_122
+            store %136, -5i
             exit_switch  # switch_1
           }
-          %b30 = block {  # case
-            %x_120:i32 = load %i_3
-            %127:ptr<private, i32, read_write> = access %data, %x_120
-            store %127, -4i
+          $B30: {  # case
+            %137:i32 = load %i_3
+            %x_120:i32 = let %137
+            %139:ptr<private, i32, read_write> = access %data, %x_120
+            store %139, -4i
             exit_switch  # switch_1
           }
-          %b31 = block {  # case
-            %x_118:i32 = load %i_3
-            %129:ptr<private, i32, read_write> = access %data, %x_118
-            store %129, -3i
+          $B31: {  # case
+            %140:i32 = load %i_3
+            %x_118:i32 = let %140
+            %142:ptr<private, i32, read_write> = access %data, %x_118
+            store %142, -3i
             exit_switch  # switch_1
           }
-          %b32 = block {  # case
-            %x_116:i32 = load %i_3
-            %131:ptr<private, i32, read_write> = access %data, %x_116
-            store %131, -2i
+          $B32: {  # case
+            %143:i32 = load %i_3
+            %x_116:i32 = let %143
+            %145:ptr<private, i32, read_write> = access %data, %x_116
+            store %145, -2i
             exit_switch  # switch_1
           }
-          %b33 = block {  # case
-            %x_114:i32 = load %i_3
-            %133:ptr<private, i32, read_write> = access %data, %x_114
-            store %133, -1i
+          $B33: {  # case
+            %146:i32 = load %i_3
+            %x_114:i32 = let %146
+            %148:ptr<private, i32, read_write> = access %data, %x_114
+            store %148, -1i
             exit_switch  # switch_1
           }
-          %b34 = block {  # case
-            %x_112:i32 = load %i_3
-            %135:ptr<private, i32, read_write> = access %data, %x_112
-            store %135, 0i
+          $B34: {  # case
+            %149:i32 = load %i_3
+            %x_112:i32 = let %149
+            %151:ptr<private, i32, read_write> = access %data, %x_112
+            store %151, 0i
             exit_switch  # switch_1
           }
-          %b35 = block {  # case
-            %x_110:i32 = load %i_3
-            %137:ptr<private, i32, read_write> = access %data, %x_110
-            store %137, 1i
+          $B35: {  # case
+            %152:i32 = load %i_3
+            %x_110:i32 = let %152
+            %154:ptr<private, i32, read_write> = access %data, %x_110
+            store %154, 1i
             exit_switch  # switch_1
           }
-          %b36 = block {  # case
-            %x_108:i32 = load %i_3
-            %139:ptr<private, i32, read_write> = access %data, %x_108
-            store %139, 2i
+          $B36: {  # case
+            %155:i32 = load %i_3
+            %x_108:i32 = let %155
+            %157:ptr<private, i32, read_write> = access %data, %x_108
+            store %157, 2i
             exit_switch  # switch_1
           }
-          %b37 = block {  # case
-            %x_106:i32 = load %i_3
-            %141:ptr<private, i32, read_write> = access %data, %x_106
-            store %141, 3i
+          $B37: {  # case
+            %158:i32 = load %i_3
+            %x_106:i32 = let %158
+            %160:ptr<private, i32, read_write> = access %data, %x_106
+            store %160, 3i
             exit_switch  # switch_1
           }
-          %b38 = block {  # case
-            %x_104:i32 = load %i_3
-            %143:ptr<private, i32, read_write> = access %data, %x_104
-            store %143, 4i
+          $B38: {  # case
+            %161:i32 = load %i_3
+            %x_104:i32 = let %161
+            %163:ptr<private, i32, read_write> = access %data, %x_104
+            store %163, 4i
             exit_switch  # switch_1
           }
-          %b39 = block {  # case
+          $B39: {  # case
             exit_switch  # switch_1
           }
         }
-        %144:i32 = load %i_3
-        %145:i32 = add %144, 1i
-        store %i_3, %145
-        continue %b28
+        %164:i32 = load %i_3
+        %165:i32 = add %164, 1i
+        store %i_3, %165
+        continue  # -> $B28
       }
-      %b28 = block {  # continuing
-        %x_126:i32 = load %i_3
-        %147:bool = lt %x_126, 10i
-        %148:bool = eq %147, false
-        break_if %148 %b27
+      $B28: {  # continuing
+        %166:i32 = load %i_3
+        %x_126:i32 = let %166
+        %168:bool = lt %x_126, 10i
+        %169:bool = eq %168, false
+        break_if %169  # -> [t: exit_loop loop_6, f: $B27]
       }
     }
     store %j_1, 0i
-    loop [b: %b40, c: %b41] {  # loop_7
-      %b40 = block {  # body
-        %149:i32 = load %j_1
-        %x_133:bool = lt %149, 10i
-        %151:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
-        %152:f32 = load_vector_element %151, 0u
-        %153:bool = lte %152, 1.0f
-        %154:bool = eq %153, false
-        if %154 [t: %b42] {  # if_7
-          %b42 = block {  # true
+    loop [b: $B40, c: $B41] {  # loop_7
+      $B40: {  # body
+        %170:i32 = load %j_1
+        %171:bool = lt %170, 10i
+        %x_133:bool = let %171
+        %173:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
+        %174:f32 = load_vector_element %173, 0u
+        %175:bool = lte %174, 1.0f
+        %176:bool = eq %175, false
+        if %176 [t: $B42] {  # if_7
+          $B42: {  # true
             store %grey, 1.0f
             exit_if  # if_7
           }
         }
-        if %x_133 [t: %b43, f: %b44] {  # if_8
-          %b43 = block {  # true
+        if %x_133 [t: $B43, f: $B44] {  # if_8
+          $B43: {  # true
             exit_if  # if_8
           }
-          %b44 = block {  # false
+          $B44: {  # false
             exit_loop  # loop_7
           }
         }
-        %x_140:i32 = load %j_1
-        %156:ptr<private, i32, read_write> = access %temp, %x_140
-        %157:i32 = load %j_1
-        %158:ptr<private, i32, read_write> = access %data, %157
-        %159:i32 = load %158
-        store %156, %159
-        continue %b41
+        %177:i32 = load %j_1
+        %x_140:i32 = let %177
+        %179:ptr<private, i32, read_write> = access %temp, %x_140
+        %180:i32 = load %j_1
+        %181:ptr<private, i32, read_write> = access %data, %180
+        %182:i32 = load %181
+        store %179, %182
+        continue  # -> $B41
       }
-      %b41 = block {  # continuing
-        %160:i32 = load %j_1
-        %161:i32 = add %160, 1i
-        store %j_1, %161
-        next_iteration %b40
+      $B41: {  # continuing
+        %183:i32 = load %j_1
+        %184:i32 = add %183, 1i
+        store %j_1, %184
+        next_iteration  # -> $B40
       }
     }
-    %162:void = call %mergeSort_
-    %163:f32 = load_vector_element %gl_FragCoord, 1u
-    %164:i32 = convert %163
-    %165:bool = lt %164, 30i
-    if %165 [t: %b45, f: %b46] {  # if_9
-      %b45 = block {  # true
-        %166:ptr<private, i32, read_write> = access %data, 0i
-        %167:i32 = load %166
-        %168:f32 = convert %167
-        %169:f32 = div %168, 10.0f
-        %170:f32 = add 0.5f, %169
-        store %grey, %170
+    %185:void = call %mergeSort_
+    %186:f32 = load_vector_element %gl_FragCoord, 1u
+    %187:i32 = call %tint_f32_to_i32, %186
+    %188:bool = lt %187, 30i
+    if %188 [t: $B45, f: $B46] {  # if_9
+      $B45: {  # true
+        %189:ptr<private, i32, read_write> = access %data, 0i
+        %190:i32 = load %189
+        %191:f32 = convert %190
+        %192:f32 = div %191, 10.0f
+        %193:f32 = add 0.5f, %192
+        store %grey, %193
         exit_if  # if_9
       }
-      %b46 = block {  # false
-        %171:f32 = load_vector_element %gl_FragCoord, 1u
-        %172:i32 = convert %171
-        %173:bool = lt %172, 60i
-        if %173 [t: %b47, f: %b48] {  # if_10
-          %b47 = block {  # true
-            %174:ptr<private, i32, read_write> = access %data, 1i
-            %175:i32 = load %174
-            %176:f32 = convert %175
-            %177:f32 = div %176, 10.0f
-            %178:f32 = add 0.5f, %177
-            store %grey, %178
+      $B46: {  # false
+        %194:f32 = load_vector_element %gl_FragCoord, 1u
+        %195:i32 = call %tint_f32_to_i32, %194
+        %196:bool = lt %195, 60i
+        if %196 [t: $B47, f: $B48] {  # if_10
+          $B47: {  # true
+            %197:ptr<private, i32, read_write> = access %data, 1i
+            %198:i32 = load %197
+            %199:f32 = convert %198
+            %200:f32 = div %199, 10.0f
+            %201:f32 = add 0.5f, %200
+            store %grey, %201
             exit_if  # if_10
           }
-          %b48 = block {  # false
-            %179:f32 = load_vector_element %gl_FragCoord, 1u
-            %180:i32 = convert %179
-            %181:bool = lt %180, 90i
-            if %181 [t: %b49, f: %b50] {  # if_11
-              %b49 = block {  # true
-                %182:ptr<private, i32, read_write> = access %data, 2i
-                %183:i32 = load %182
-                %184:f32 = convert %183
-                %185:f32 = div %184, 10.0f
-                %186:f32 = add 0.5f, %185
-                store %grey, %186
+          $B48: {  # false
+            %202:f32 = load_vector_element %gl_FragCoord, 1u
+            %203:i32 = call %tint_f32_to_i32, %202
+            %204:bool = lt %203, 90i
+            if %204 [t: $B49, f: $B50] {  # if_11
+              $B49: {  # true
+                %205:ptr<private, i32, read_write> = access %data, 2i
+                %206:i32 = load %205
+                %207:f32 = convert %206
+                %208:f32 = div %207, 10.0f
+                %209:f32 = add 0.5f, %208
+                store %grey, %209
                 exit_if  # if_11
               }
-              %b50 = block {  # false
-                %187:f32 = load_vector_element %gl_FragCoord, 1u
-                %188:i32 = convert %187
-                %189:bool = lt %188, 120i
-                if %189 [t: %b51, f: %b52] {  # if_12
-                  %b51 = block {  # true
-                    %190:ptr<private, i32, read_write> = access %data, 3i
-                    %191:i32 = load %190
-                    %192:f32 = convert %191
-                    %193:f32 = div %192, 10.0f
-                    %194:f32 = add 0.5f, %193
-                    store %grey, %194
+              $B50: {  # false
+                %210:f32 = load_vector_element %gl_FragCoord, 1u
+                %211:i32 = call %tint_f32_to_i32, %210
+                %212:bool = lt %211, 120i
+                if %212 [t: $B51, f: $B52] {  # if_12
+                  $B51: {  # true
+                    %213:ptr<private, i32, read_write> = access %data, 3i
+                    %214:i32 = load %213
+                    %215:f32 = convert %214
+                    %216:f32 = div %215, 10.0f
+                    %217:f32 = add 0.5f, %216
+                    store %grey, %217
                     exit_if  # if_12
                   }
-                  %b52 = block {  # false
-                    %195:f32 = load_vector_element %gl_FragCoord, 1u
-                    %196:i32 = convert %195
-                    %197:bool = lt %196, 150i
-                    if %197 [t: %b53, f: %b54] {  # if_13
-                      %b53 = block {  # true
-                        discard
+                  $B52: {  # false
+                    %218:f32 = load_vector_element %gl_FragCoord, 1u
+                    %219:i32 = call %tint_f32_to_i32, %218
+                    %220:bool = lt %219, 150i
+                    if %220 [t: $B53, f: $B54] {  # if_13
+                      $B53: {  # true
+                        store %continue_execution, false
                         exit_if  # if_13
                       }
-                      %b54 = block {  # false
-                        %198:f32 = load_vector_element %gl_FragCoord, 1u
-                        %199:i32 = convert %198
-                        %200:bool = lt %199, 180i
-                        if %200 [t: %b55, f: %b56] {  # if_14
-                          %b55 = block {  # true
-                            %201:ptr<private, i32, read_write> = access %data, 5i
-                            %202:i32 = load %201
-                            %203:f32 = convert %202
-                            %204:f32 = div %203, 10.0f
-                            %205:f32 = add 0.5f, %204
-                            store %grey, %205
+                      $B54: {  # false
+                        %221:f32 = load_vector_element %gl_FragCoord, 1u
+                        %222:i32 = call %tint_f32_to_i32, %221
+                        %223:bool = lt %222, 180i
+                        if %223 [t: $B55, f: $B56] {  # if_14
+                          $B55: {  # true
+                            %224:ptr<private, i32, read_write> = access %data, 5i
+                            %225:i32 = load %224
+                            %226:f32 = convert %225
+                            %227:f32 = div %226, 10.0f
+                            %228:f32 = add 0.5f, %227
+                            store %grey, %228
                             exit_if  # if_14
                           }
-                          %b56 = block {  # false
-                            %206:f32 = load_vector_element %gl_FragCoord, 1u
-                            %207:i32 = convert %206
-                            %208:bool = lt %207, 210i
-                            if %208 [t: %b57, f: %b58] {  # if_15
-                              %b57 = block {  # true
-                                %209:ptr<private, i32, read_write> = access %data, 6i
-                                %210:i32 = load %209
-                                %211:f32 = convert %210
-                                %212:f32 = div %211, 10.0f
-                                %213:f32 = add 0.5f, %212
-                                store %grey, %213
+                          $B56: {  # false
+                            %229:f32 = load_vector_element %gl_FragCoord, 1u
+                            %230:i32 = call %tint_f32_to_i32, %229
+                            %231:bool = lt %230, 210i
+                            if %231 [t: $B57, f: $B58] {  # if_15
+                              $B57: {  # true
+                                %232:ptr<private, i32, read_write> = access %data, 6i
+                                %233:i32 = load %232
+                                %234:f32 = convert %233
+                                %235:f32 = div %234, 10.0f
+                                %236:f32 = add 0.5f, %235
+                                store %grey, %236
                                 exit_if  # if_15
                               }
-                              %b58 = block {  # false
-                                %214:f32 = load_vector_element %gl_FragCoord, 1u
-                                %215:i32 = convert %214
-                                %216:bool = lt %215, 240i
-                                if %216 [t: %b59, f: %b60] {  # if_16
-                                  %b59 = block {  # true
-                                    %217:ptr<private, i32, read_write> = access %data, 7i
-                                    %218:i32 = load %217
-                                    %219:f32 = convert %218
-                                    %220:f32 = div %219, 10.0f
-                                    %221:f32 = add 0.5f, %220
-                                    store %grey, %221
+                              $B58: {  # false
+                                %237:f32 = load_vector_element %gl_FragCoord, 1u
+                                %238:i32 = call %tint_f32_to_i32, %237
+                                %239:bool = lt %238, 240i
+                                if %239 [t: $B59, f: $B60] {  # if_16
+                                  $B59: {  # true
+                                    %240:ptr<private, i32, read_write> = access %data, 7i
+                                    %241:i32 = load %240
+                                    %242:f32 = convert %241
+                                    %243:f32 = div %242, 10.0f
+                                    %244:f32 = add 0.5f, %243
+                                    store %grey, %244
                                     exit_if  # if_16
                                   }
-                                  %b60 = block {  # false
-                                    %x_240:f32 = load_vector_element %gl_FragCoord, 1u
+                                  $B60: {  # false
+                                    %245:f32 = load_vector_element %gl_FragCoord, 1u
+                                    %x_240:f32 = let %245
                                     %guard233:ptr<function, bool, read_write> = var, true
-                                    %224:i32 = convert %x_240
-                                    %225:bool = lt %224, 270i
-                                    if %225 [t: %b61, f: %b62] {  # if_17
-                                      %b61 = block {  # true
-                                        %226:ptr<private, i32, read_write> = access %data, 8i
-                                        %227:i32 = load %226
-                                        %228:f32 = convert %227
-                                        %229:f32 = div %228, 10.0f
-                                        %230:f32 = add 0.5f, %229
-                                        store %grey, %230
+                                    %248:i32 = call %tint_f32_to_i32, %x_240
+                                    %249:bool = lt %248, 270i
+                                    if %249 [t: $B61, f: $B62] {  # if_17
+                                      $B61: {  # true
+                                        %250:ptr<private, i32, read_write> = access %data, 8i
+                                        %251:i32 = load %250
+                                        %252:f32 = convert %251
+                                        %253:f32 = div %252, 10.0f
+                                        %254:f32 = add 0.5f, %253
+                                        store %grey, %254
                                         store %guard233, false
                                         exit_if  # if_17
                                       }
-                                      %b62 = block {  # false
-                                        %231:bool = load %guard233
-                                        if %231 [t: %b63] {  # if_18
-                                          %b63 = block {  # true
-                                            %232:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
-                                            %233:f32 = load_vector_element %232, 1u
-                                            %234:bool = lt 0.0f, %233
-                                            %235:bool = eq %234, false
-                                            if %235 [t: %b64] {  # if_19
-                                              %b64 = block {  # true
+                                      $B62: {  # false
+                                        %255:bool = load %guard233
+                                        if %255 [t: $B63] {  # if_18
+                                          $B63: {  # true
+                                            %256:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
+                                            %257:f32 = load_vector_element %256, 1u
+                                            %258:bool = lt 0.0f, %257
+                                            %259:bool = eq %258, false
+                                            if %259 [t: $B64] {  # if_19
+                                              $B64: {  # true
                                                 store %guard233, false
                                                 exit_if  # if_19
                                               }
                                             }
-                                            %236:bool = load %guard233
-                                            if %236 [t: %b65] {  # if_20
-                                              %b65 = block {  # true
-                                                discard
+                                            %260:bool = load %guard233
+                                            if %260 [t: $B65] {  # if_20
+                                              $B65: {  # true
+                                                store %continue_execution, false
                                                 exit_if  # if_20
                                               }
                                             }
@@ -547,23 +570,41 @@
         exit_if  # if_9
       }
     }
-    %237:f32 = load %grey
-    %x_256:vec3<f32> = construct %237
-    %239:f32 = access %x_256, 0u
-    %240:f32 = access %x_256, 1u
-    %241:f32 = access %x_256, 2u
-    %242:vec4<f32> = construct %239, %240, %241, 1.0f
-    store %x_GLF_color, %242
+    %261:f32 = load %grey
+    %262:vec3<f32> = construct %261
+    %x_256:vec3<f32> = let %262
+    %264:f32 = access %x_256, 0u
+    %265:f32 = access %x_256, 1u
+    %266:f32 = access %x_256, 2u
+    %267:vec4<f32> = construct %264, %265, %266, 1.0f
+    store %x_GLF_color, %267
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b66 {
-  %b66 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B66: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %245:void = call %main_1
-    %246:vec4<f32> = load %x_GLF_color
-    %247:main_out = construct %246
-    ret %247
+    %270:void = call %main_1
+    %271:vec4<f32> = load %x_GLF_color
+    %272:main_out = construct %271
+    %273:bool = load %continue_execution
+    %274:bool = eq %273, false
+    if %274 [t: $B67] {  # if_21
+      $B67: {  # true
+        terminate_invocation
+      }
+    }
+    ret %272
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B68: {
+    %276:i32 = convert %value
+    %277:bool = gte %value, -2147483648.0f
+    %278:i32 = select -2147483648i, %276, %277
+    %279:bool = lte %value, 2147483520.0f
+    %280:i32 = select 2147483647i, %278, %279
+    ret %280
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/1.wgsl.expected.ir.msl
index 3ce10a9..e940594 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/1.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/1.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,152 +8,183 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %data:ptr<private, array<i32, 10>, read_write> = var
   %temp:ptr<private, array<i32, 10>, read_write> = var
   %x_28:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%merge_i1_i1_i1_ = func(%f:ptr<function, i32, read_write>, %mid:ptr<function, i32, read_write>, %to:ptr<function, i32, read_write>):void -> %b2 {
-  %b2 = block {
+%merge_i1_i1_i1_ = func(%f:ptr<function, i32, read_write>, %mid:ptr<function, i32, read_write>, %to:ptr<function, i32, read_write>):void {
+  $B2: {
     %k:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %j:ptr<function, i32, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
-    %x_262:i32 = load %f
+    %15:i32 = load %f
+    %x_262:i32 = let %15
     store %k, %x_262
-    %x_263:i32 = load %f
+    %17:i32 = load %f
+    %x_263:i32 = let %17
     store %i, %x_263
-    %x_264:i32 = load %mid
-    %17:i32 = add %x_264, 1i
-    store %j, %17
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_270:i32 = load %i
-        %x_271:i32 = load %mid
-        %x_273:i32 = load %j
-        %x_274:i32 = load %to
-        %22:bool = lte %x_270, %x_271
-        %23:bool = lte %x_273, %x_274
-        %24:bool = and %22, %23
-        if %24 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    %19:i32 = load %mid
+    %x_264:i32 = let %19
+    %21:i32 = add %x_264, 1i
+    store %j, %21
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %22:i32 = load %i
+        %x_270:i32 = let %22
+        %24:i32 = load %mid
+        %x_271:i32 = let %24
+        %26:i32 = load %j
+        %x_273:i32 = let %26
+        %28:i32 = load %to
+        %x_274:i32 = let %28
+        %30:bool = lte %x_270, %x_271
+        %31:bool = lte %x_273, %x_274
+        %32:bool = and %30, %31
+        if %32 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_278:i32 = load %i
-        %26:ptr<private, i32, read_write> = access %data, %x_278
-        %x_280:i32 = load %26
-        %x_281:i32 = load %j
-        %29:ptr<private, i32, read_write> = access %data, %x_281
-        %x_283:i32 = load %29
-        %31:bool = lt %x_280, %x_283
-        if %31 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
-            %x_288:i32 = load %k
-            %33:i32 = add %x_288, 1i
-            store %k, %33
-            %x_290:i32 = load %i
-            %35:i32 = add %x_290, 1i
-            store %i, %35
-            %36:ptr<private, i32, read_write> = access %data, %x_290
-            %x_293:i32 = load %36
-            %38:ptr<private, i32, read_write> = access %temp, %x_288
-            store %38, %x_293
+        %33:i32 = load %i
+        %x_278:i32 = let %33
+        %35:ptr<private, i32, read_write> = access %data, %x_278
+        %36:i32 = load %35
+        %x_280:i32 = let %36
+        %38:i32 = load %j
+        %x_281:i32 = let %38
+        %40:ptr<private, i32, read_write> = access %data, %x_281
+        %41:i32 = load %40
+        %x_283:i32 = let %41
+        %43:bool = lt %x_280, %x_283
+        if %43 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
+            %44:i32 = load %k
+            %x_288:i32 = let %44
+            %46:i32 = add %x_288, 1i
+            store %k, %46
+            %47:i32 = load %i
+            %x_290:i32 = let %47
+            %49:i32 = add %x_290, 1i
+            store %i, %49
+            %50:ptr<private, i32, read_write> = access %data, %x_290
+            %51:i32 = load %50
+            %x_293:i32 = let %51
+            %53:ptr<private, i32, read_write> = access %temp, %x_288
+            store %53, %x_293
             exit_if  # if_2
           }
-          %b8 = block {  # false
-            %x_295:i32 = load %k
-            %40:i32 = add %x_295, 1i
-            store %k, %40
-            %x_297:i32 = load %j
-            %42:i32 = add %x_297, 1i
-            store %j, %42
-            %43:ptr<private, i32, read_write> = access %data, %x_297
-            %x_300:i32 = load %43
-            %45:ptr<private, i32, read_write> = access %temp, %x_295
-            store %45, %x_300
+          $B8: {  # false
+            %54:i32 = load %k
+            %x_295:i32 = let %54
+            %56:i32 = add %x_295, 1i
+            store %k, %56
+            %57:i32 = load %j
+            %x_297:i32 = let %57
+            %59:i32 = add %x_297, 1i
+            store %j, %59
+            %60:ptr<private, i32, read_write> = access %data, %x_297
+            %61:i32 = load %60
+            %x_300:i32 = let %61
+            %63:ptr<private, i32, read_write> = access %temp, %x_295
+            store %63, %x_300
             exit_if  # if_2
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
-    loop [b: %b9, c: %b10] {  # loop_2
-      %b9 = block {  # body
-        %x_306:i32 = load %i
-        %x_308:i32 = load %i
-        %x_309:i32 = load %mid
-        %49:bool = lt %x_306, 10i
-        %50:bool = lte %x_308, %x_309
-        %51:bool = and %49, %50
-        if %51 [t: %b11, f: %b12] {  # if_3
-          %b11 = block {  # true
+    loop [b: $B9, c: $B10] {  # loop_2
+      $B9: {  # body
+        %64:i32 = load %i
+        %x_306:i32 = let %64
+        %66:i32 = load %i
+        %x_308:i32 = let %66
+        %68:i32 = load %mid
+        %x_309:i32 = let %68
+        %70:bool = lt %x_306, 10i
+        %71:bool = lte %x_308, %x_309
+        %72:bool = and %70, %71
+        if %72 [t: $B11, f: $B12] {  # if_3
+          $B11: {  # true
             exit_if  # if_3
           }
-          %b12 = block {  # false
+          $B12: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_313:i32 = load %k
-        %53:i32 = add %x_313, 1i
-        store %k, %53
-        %x_315:i32 = load %i
-        %55:i32 = add %x_315, 1i
-        store %i, %55
-        %56:ptr<private, i32, read_write> = access %data, %x_315
-        %x_318:i32 = load %56
-        %58:ptr<private, i32, read_write> = access %temp, %x_313
-        store %58, %x_318
-        continue %b10
+        %73:i32 = load %k
+        %x_313:i32 = let %73
+        %75:i32 = add %x_313, 1i
+        store %k, %75
+        %76:i32 = load %i
+        %x_315:i32 = let %76
+        %78:i32 = add %x_315, 1i
+        store %i, %78
+        %79:ptr<private, i32, read_write> = access %data, %x_315
+        %80:i32 = load %79
+        %x_318:i32 = let %80
+        %82:ptr<private, i32, read_write> = access %temp, %x_313
+        store %82, %x_318
+        continue  # -> $B10
       }
-      %b10 = block {  # continuing
-        next_iteration %b9
+      $B10: {  # continuing
+        next_iteration  # -> $B9
       }
     }
-    %x_320:i32 = load %f
+    %83:i32 = load %f
+    %x_320:i32 = let %83
     store %i_1, %x_320
-    loop [b: %b13, c: %b14] {  # loop_3
-      %b13 = block {  # body
-        %x_325:i32 = load %i_1
-        %x_326:i32 = load %to
-        %62:bool = lte %x_325, %x_326
-        if %62 [t: %b15, f: %b16] {  # if_4
-          %b15 = block {  # true
+    loop [b: $B13, c: $B14] {  # loop_3
+      $B13: {  # body
+        %85:i32 = load %i_1
+        %x_325:i32 = let %85
+        %87:i32 = load %to
+        %x_326:i32 = let %87
+        %89:bool = lte %x_325, %x_326
+        if %89 [t: $B15, f: $B16] {  # if_4
+          $B15: {  # true
             exit_if  # if_4
           }
-          %b16 = block {  # false
+          $B16: {  # false
             exit_loop  # loop_3
           }
         }
-        %x_329:i32 = load %i_1
-        %x_330:i32 = load %i_1
-        %65:ptr<private, i32, read_write> = access %temp, %x_330
-        %x_332:i32 = load %65
-        %67:ptr<private, i32, read_write> = access %data, %x_329
-        store %67, %x_332
-        continue %b14
+        %90:i32 = load %i_1
+        %x_329:i32 = let %90
+        %92:i32 = load %i_1
+        %x_330:i32 = let %92
+        %94:ptr<private, i32, read_write> = access %temp, %x_330
+        %95:i32 = load %94
+        %x_332:i32 = let %95
+        %97:ptr<private, i32, read_write> = access %data, %x_329
+        store %97, %x_332
+        continue  # -> $B14
       }
-      %b14 = block {  # continuing
-        %x_334:i32 = load %i_1
-        %69:i32 = add %x_334, 1i
-        store %i_1, %69
-        next_iteration %b13
+      $B14: {  # continuing
+        %98:i32 = load %i_1
+        %x_334:i32 = let %98
+        %100:i32 = add %x_334, 1i
+        store %i_1, %100
+        next_iteration  # -> $B13
       }
     }
     ret
   }
 }
-%mergeSort_ = func():void -> %b17 {
-  %b17 = block {
+%mergeSort_ = func():void {
+  $B17: {
     %low:ptr<function, i32, read_write> = var
     %high:ptr<function, i32, read_write> = var
     %m:ptr<function, i32, read_write> = var
@@ -167,347 +198,403 @@
     store %low, 0i
     store %high, 9i
     store %m, 1i
-    loop [b: %b18, c: %b19] {  # loop_4
-      %b18 = block {  # body
-        %x_341:i32 = load %m
-        %x_342:i32 = load %high
-        %83:bool = lte %x_341, %x_342
-        if %83 [t: %b20, f: %b21] {  # if_5
-          %b20 = block {  # true
+    loop [b: $B18, c: $B19] {  # loop_4
+      $B18: {  # body
+        %112:i32 = load %m
+        %x_341:i32 = let %112
+        %114:i32 = load %high
+        %x_342:i32 = let %114
+        %116:bool = lte %x_341, %x_342
+        if %116 [t: $B20, f: $B21] {  # if_5
+          $B20: {  # true
             exit_if  # if_5
           }
-          %b21 = block {  # false
+          $B21: {  # false
             exit_loop  # loop_4
           }
         }
-        %x_345:i32 = load %low
+        %117:i32 = load %low
+        %x_345:i32 = let %117
         store %i_2, %x_345
-        loop [b: %b22, c: %b23] {  # loop_5
-          %b22 = block {  # body
-            %x_350:i32 = load %i_2
-            %x_351:i32 = load %high
-            %87:bool = lt %x_350, %x_351
-            if %87 [t: %b24, f: %b25] {  # if_6
-              %b24 = block {  # true
+        loop [b: $B22, c: $B23] {  # loop_5
+          $B22: {  # body
+            %119:i32 = load %i_2
+            %x_350:i32 = let %119
+            %121:i32 = load %high
+            %x_351:i32 = let %121
+            %123:bool = lt %x_350, %x_351
+            if %123 [t: $B24, f: $B25] {  # if_6
+              $B24: {  # true
                 exit_if  # if_6
               }
-              %b25 = block {  # false
+              $B25: {  # false
                 exit_loop  # loop_5
               }
             }
-            %x_354:i32 = load %i_2
+            %124:i32 = load %i_2
+            %x_354:i32 = let %124
             store %f_1, %x_354
-            %x_355:i32 = load %i_2
-            %x_356:i32 = load %m
-            %91:i32 = add %x_355, %x_356
-            %92:i32 = sub %91, 1i
-            store %mid_1, %92
-            %x_359:i32 = load %i_2
-            %x_360:i32 = load %m
-            %x_364:i32 = load %high
-            %96:i32 = mul 2i, %x_360
-            %97:i32 = add %x_359, %96
-            %98:i32 = sub %97, 1i
-            %99:i32 = min %98, %x_364
-            store %to_1, %99
-            %x_366:i32 = load %f_1
+            %126:i32 = load %i_2
+            %x_355:i32 = let %126
+            %128:i32 = load %m
+            %x_356:i32 = let %128
+            %130:i32 = add %x_355, %x_356
+            %131:i32 = sub %130, 1i
+            store %mid_1, %131
+            %132:i32 = load %i_2
+            %x_359:i32 = let %132
+            %134:i32 = load %m
+            %x_360:i32 = let %134
+            %136:i32 = load %high
+            %x_364:i32 = let %136
+            %138:i32 = mul 2i, %x_360
+            %139:i32 = add %x_359, %138
+            %140:i32 = sub %139, 1i
+            %141:i32 = min %140, %x_364
+            store %to_1, %141
+            %142:i32 = load %f_1
+            %x_366:i32 = let %142
             store %param, %x_366
-            %x_367:i32 = load %mid_1
+            %144:i32 = load %mid_1
+            %x_367:i32 = let %144
             store %param_1, %x_367
-            %x_368:i32 = load %to_1
+            %146:i32 = load %to_1
+            %x_368:i32 = let %146
             store %param_2, %x_368
-            %103:void = call %merge_i1_i1_i1_, %param, %param_1, %param_2
-            continue %b23
+            %148:void = call %merge_i1_i1_i1_, %param, %param_1, %param_2
+            continue  # -> $B23
           }
-          %b23 = block {  # continuing
-            %x_370:i32 = load %m
-            %x_372:i32 = load %i_2
-            %106:i32 = mul 2i, %x_370
-            %107:i32 = add %x_372, %106
-            store %i_2, %107
-            next_iteration %b22
+          $B23: {  # continuing
+            %149:i32 = load %m
+            %x_370:i32 = let %149
+            %151:i32 = load %i_2
+            %x_372:i32 = let %151
+            %153:i32 = mul 2i, %x_370
+            %154:i32 = add %x_372, %153
+            store %i_2, %154
+            next_iteration  # -> $B22
           }
         }
-        continue %b19
+        continue  # -> $B19
       }
-      %b19 = block {  # continuing
-        %x_374:i32 = load %m
-        %109:i32 = mul 2i, %x_374
-        store %m, %109
-        next_iteration %b18
+      $B19: {  # continuing
+        %155:i32 = load %m
+        %x_374:i32 = let %155
+        %157:i32 = mul 2i, %x_374
+        store %m, %157
+        next_iteration  # -> $B18
       }
     }
     ret
   }
 }
-%main_1 = func():void -> %b26 {
-  %b26 = block {
+%main_1 = func():void {
+  $B26: {
     %i_3:ptr<function, i32, read_write> = var
     %j_1:ptr<function, i32, read_write> = var
     %grey:ptr<function, f32, read_write> = var
-    %114:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
-    %x_86:f32 = load_vector_element %114, 0u
-    %116:i32 = convert %x_86
-    store %i_3, %116
-    loop [b: %b27, c: %b28] {  # loop_6
-      %b27 = block {  # body
-        %x_92:i32 = load %i_3
-        switch %x_92 [c: (9i, %b29), c: (8i, %b30), c: (7i, %b31), c: (6i, %b32), c: (5i, %b33), c: (4i, %b34), c: (3i, %b35), c: (2i, %b36), c: (1i, %b37), c: (0i, %b38), c: (default, %b39)] {  # switch_1
-          %b29 = block {  # case
-            %x_122:i32 = load %i_3
-            %119:ptr<private, i32, read_write> = access %data, %x_122
-            store %119, -5i
+    %162:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
+    %163:f32 = load_vector_element %162, 0u
+    %x_86:f32 = let %163
+    %165:i32 = call %tint_f32_to_i32, %x_86
+    store %i_3, %165
+    loop [b: $B27, c: $B28] {  # loop_6
+      $B27: {  # body
+        %167:i32 = load %i_3
+        %x_92:i32 = let %167
+        switch %x_92 [c: (9i, $B29), c: (8i, $B30), c: (7i, $B31), c: (6i, $B32), c: (5i, $B33), c: (4i, $B34), c: (3i, $B35), c: (2i, $B36), c: (1i, $B37), c: (0i, $B38), c: (default, $B39)] {  # switch_1
+          $B29: {  # case
+            %169:i32 = load %i_3
+            %x_122:i32 = let %169
+            %171:ptr<private, i32, read_write> = access %data, %x_122
+            store %171, -5i
             exit_switch  # switch_1
           }
-          %b30 = block {  # case
-            %x_120:i32 = load %i_3
-            %121:ptr<private, i32, read_write> = access %data, %x_120
-            store %121, -4i
+          $B30: {  # case
+            %172:i32 = load %i_3
+            %x_120:i32 = let %172
+            %174:ptr<private, i32, read_write> = access %data, %x_120
+            store %174, -4i
             exit_switch  # switch_1
           }
-          %b31 = block {  # case
-            %x_118:i32 = load %i_3
-            %123:ptr<private, i32, read_write> = access %data, %x_118
-            store %123, -3i
+          $B31: {  # case
+            %175:i32 = load %i_3
+            %x_118:i32 = let %175
+            %177:ptr<private, i32, read_write> = access %data, %x_118
+            store %177, -3i
             exit_switch  # switch_1
           }
-          %b32 = block {  # case
-            %x_116:i32 = load %i_3
-            %125:ptr<private, i32, read_write> = access %data, %x_116
-            store %125, -2i
+          $B32: {  # case
+            %178:i32 = load %i_3
+            %x_116:i32 = let %178
+            %180:ptr<private, i32, read_write> = access %data, %x_116
+            store %180, -2i
             exit_switch  # switch_1
           }
-          %b33 = block {  # case
-            %x_114:i32 = load %i_3
-            %127:ptr<private, i32, read_write> = access %data, %x_114
-            store %127, -1i
+          $B33: {  # case
+            %181:i32 = load %i_3
+            %x_114:i32 = let %181
+            %183:ptr<private, i32, read_write> = access %data, %x_114
+            store %183, -1i
             exit_switch  # switch_1
           }
-          %b34 = block {  # case
-            %x_112:i32 = load %i_3
-            %129:ptr<private, i32, read_write> = access %data, %x_112
-            store %129, 0i
+          $B34: {  # case
+            %184:i32 = load %i_3
+            %x_112:i32 = let %184
+            %186:ptr<private, i32, read_write> = access %data, %x_112
+            store %186, 0i
             exit_switch  # switch_1
           }
-          %b35 = block {  # case
-            %x_110:i32 = load %i_3
-            %131:ptr<private, i32, read_write> = access %data, %x_110
-            store %131, 1i
+          $B35: {  # case
+            %187:i32 = load %i_3
+            %x_110:i32 = let %187
+            %189:ptr<private, i32, read_write> = access %data, %x_110
+            store %189, 1i
             exit_switch  # switch_1
           }
-          %b36 = block {  # case
-            %x_108:i32 = load %i_3
-            %133:ptr<private, i32, read_write> = access %data, %x_108
-            store %133, 2i
+          $B36: {  # case
+            %190:i32 = load %i_3
+            %x_108:i32 = let %190
+            %192:ptr<private, i32, read_write> = access %data, %x_108
+            store %192, 2i
             exit_switch  # switch_1
           }
-          %b37 = block {  # case
-            %x_106:i32 = load %i_3
-            %135:ptr<private, i32, read_write> = access %data, %x_106
-            store %135, 3i
+          $B37: {  # case
+            %193:i32 = load %i_3
+            %x_106:i32 = let %193
+            %195:ptr<private, i32, read_write> = access %data, %x_106
+            store %195, 3i
             exit_switch  # switch_1
           }
-          %b38 = block {  # case
-            %x_104:i32 = load %i_3
-            %137:ptr<private, i32, read_write> = access %data, %x_104
-            store %137, 4i
+          $B38: {  # case
+            %196:i32 = load %i_3
+            %x_104:i32 = let %196
+            %198:ptr<private, i32, read_write> = access %data, %x_104
+            store %198, 4i
             exit_switch  # switch_1
           }
-          %b39 = block {  # case
+          $B39: {  # case
             exit_switch  # switch_1
           }
         }
-        %x_124:i32 = load %i_3
-        %139:i32 = add %x_124, 1i
-        store %i_3, %139
-        continue %b28
+        %199:i32 = load %i_3
+        %x_124:i32 = let %199
+        %201:i32 = add %x_124, 1i
+        store %i_3, %201
+        continue  # -> $B28
       }
-      %b28 = block {  # continuing
-        %x_126:i32 = load %i_3
-        %141:bool = lt %x_126, 10i
-        %142:bool = eq %141, false
-        break_if %142 %b27
+      $B28: {  # continuing
+        %202:i32 = load %i_3
+        %x_126:i32 = let %202
+        %204:bool = lt %x_126, 10i
+        %205:bool = eq %204, false
+        break_if %205  # -> [t: exit_loop loop_6, f: $B27]
       }
     }
     store %j_1, 0i
-    loop [b: %b40, c: %b41] {  # loop_7
-      %b40 = block {  # body
-        %x_132:i32 = load %j_1
-        %x_133:bool = lt %x_132, 10i
-        %145:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
-        %x_135:f32 = load_vector_element %145, 0u
-        %147:bool = lte %x_135, 1.0f
-        %148:bool = eq %147, false
-        if %148 [t: %b42] {  # if_7
-          %b42 = block {  # true
+    loop [b: $B40, c: $B41] {  # loop_7
+      $B40: {  # body
+        %206:i32 = load %j_1
+        %x_132:i32 = let %206
+        %208:bool = lt %x_132, 10i
+        %x_133:bool = let %208
+        %210:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
+        %211:f32 = load_vector_element %210, 0u
+        %x_135:f32 = let %211
+        %213:bool = lte %x_135, 1.0f
+        %214:bool = eq %213, false
+        if %214 [t: $B42] {  # if_7
+          $B42: {  # true
             store %grey, 1.0f
             exit_if  # if_7
           }
         }
-        if %x_133 [t: %b43, f: %b44] {  # if_8
-          %b43 = block {  # true
+        if %x_133 [t: $B43, f: $B44] {  # if_8
+          $B43: {  # true
             exit_if  # if_8
           }
-          %b44 = block {  # false
+          $B44: {  # false
             exit_loop  # loop_7
           }
         }
-        %x_140:i32 = load %j_1
-        %x_141:i32 = load %j_1
-        %151:ptr<private, i32, read_write> = access %data, %x_141
-        %x_143:i32 = load %151
-        %153:ptr<private, i32, read_write> = access %temp, %x_140
-        store %153, %x_143
-        continue %b41
+        %215:i32 = load %j_1
+        %x_140:i32 = let %215
+        %217:i32 = load %j_1
+        %x_141:i32 = let %217
+        %219:ptr<private, i32, read_write> = access %data, %x_141
+        %220:i32 = load %219
+        %x_143:i32 = let %220
+        %222:ptr<private, i32, read_write> = access %temp, %x_140
+        store %222, %x_143
+        continue  # -> $B41
       }
-      %b41 = block {  # continuing
-        %x_145:i32 = load %j_1
-        %155:i32 = add %x_145, 1i
-        store %j_1, %155
-        next_iteration %b40
+      $B41: {  # continuing
+        %223:i32 = load %j_1
+        %x_145:i32 = let %223
+        %225:i32 = add %x_145, 1i
+        store %j_1, %225
+        next_iteration  # -> $B40
       }
     }
-    %156:void = call %mergeSort_
-    %x_149:f32 = load_vector_element %gl_FragCoord, 1u
-    %158:i32 = convert %x_149
-    %159:bool = lt %158, 30i
-    if %159 [t: %b45, f: %b46] {  # if_9
-      %b45 = block {  # true
-        %160:ptr<private, i32, read_write> = access %data, 0i
-        %x_156:i32 = load %160
-        %162:f32 = convert %x_156
-        %163:f32 = div %162, 10.0f
-        %164:f32 = add 0.5f, %163
-        store %grey, %164
+    %226:void = call %mergeSort_
+    %227:f32 = load_vector_element %gl_FragCoord, 1u
+    %x_149:f32 = let %227
+    %229:i32 = call %tint_f32_to_i32, %x_149
+    %230:bool = lt %229, 30i
+    if %230 [t: $B45, f: $B46] {  # if_9
+      $B45: {  # true
+        %231:ptr<private, i32, read_write> = access %data, 0i
+        %232:i32 = load %231
+        %x_156:i32 = let %232
+        %234:f32 = convert %x_156
+        %235:f32 = div %234, 10.0f
+        %236:f32 = add 0.5f, %235
+        store %grey, %236
         exit_if  # if_9
       }
-      %b46 = block {  # false
-        %x_161:f32 = load_vector_element %gl_FragCoord, 1u
-        %166:i32 = convert %x_161
-        %167:bool = lt %166, 60i
-        if %167 [t: %b47, f: %b48] {  # if_10
-          %b47 = block {  # true
-            %168:ptr<private, i32, read_write> = access %data, 1i
-            %x_168:i32 = load %168
-            %170:f32 = convert %x_168
-            %171:f32 = div %170, 10.0f
-            %172:f32 = add 0.5f, %171
-            store %grey, %172
+      $B46: {  # false
+        %237:f32 = load_vector_element %gl_FragCoord, 1u
+        %x_161:f32 = let %237
+        %239:i32 = call %tint_f32_to_i32, %x_161
+        %240:bool = lt %239, 60i
+        if %240 [t: $B47, f: $B48] {  # if_10
+          $B47: {  # true
+            %241:ptr<private, i32, read_write> = access %data, 1i
+            %242:i32 = load %241
+            %x_168:i32 = let %242
+            %244:f32 = convert %x_168
+            %245:f32 = div %244, 10.0f
+            %246:f32 = add 0.5f, %245
+            store %grey, %246
             exit_if  # if_10
           }
-          %b48 = block {  # false
-            %x_173:f32 = load_vector_element %gl_FragCoord, 1u
-            %174:i32 = convert %x_173
-            %175:bool = lt %174, 90i
-            if %175 [t: %b49, f: %b50] {  # if_11
-              %b49 = block {  # true
-                %176:ptr<private, i32, read_write> = access %data, 2i
-                %x_180:i32 = load %176
-                %178:f32 = convert %x_180
-                %179:f32 = div %178, 10.0f
-                %180:f32 = add 0.5f, %179
-                store %grey, %180
+          $B48: {  # false
+            %247:f32 = load_vector_element %gl_FragCoord, 1u
+            %x_173:f32 = let %247
+            %249:i32 = call %tint_f32_to_i32, %x_173
+            %250:bool = lt %249, 90i
+            if %250 [t: $B49, f: $B50] {  # if_11
+              $B49: {  # true
+                %251:ptr<private, i32, read_write> = access %data, 2i
+                %252:i32 = load %251
+                %x_180:i32 = let %252
+                %254:f32 = convert %x_180
+                %255:f32 = div %254, 10.0f
+                %256:f32 = add 0.5f, %255
+                store %grey, %256
                 exit_if  # if_11
               }
-              %b50 = block {  # false
-                %x_185:f32 = load_vector_element %gl_FragCoord, 1u
-                %182:i32 = convert %x_185
-                %183:bool = lt %182, 120i
-                if %183 [t: %b51, f: %b52] {  # if_12
-                  %b51 = block {  # true
-                    %184:ptr<private, i32, read_write> = access %data, 3i
-                    %x_192:i32 = load %184
-                    %186:f32 = convert %x_192
-                    %187:f32 = div %186, 10.0f
-                    %188:f32 = add 0.5f, %187
-                    store %grey, %188
+              $B50: {  # false
+                %257:f32 = load_vector_element %gl_FragCoord, 1u
+                %x_185:f32 = let %257
+                %259:i32 = call %tint_f32_to_i32, %x_185
+                %260:bool = lt %259, 120i
+                if %260 [t: $B51, f: $B52] {  # if_12
+                  $B51: {  # true
+                    %261:ptr<private, i32, read_write> = access %data, 3i
+                    %262:i32 = load %261
+                    %x_192:i32 = let %262
+                    %264:f32 = convert %x_192
+                    %265:f32 = div %264, 10.0f
+                    %266:f32 = add 0.5f, %265
+                    store %grey, %266
                     exit_if  # if_12
                   }
-                  %b52 = block {  # false
-                    %x_197:f32 = load_vector_element %gl_FragCoord, 1u
-                    %190:i32 = convert %x_197
-                    %191:bool = lt %190, 150i
-                    if %191 [t: %b53, f: %b54] {  # if_13
-                      %b53 = block {  # true
-                        discard
+                  $B52: {  # false
+                    %267:f32 = load_vector_element %gl_FragCoord, 1u
+                    %x_197:f32 = let %267
+                    %269:i32 = call %tint_f32_to_i32, %x_197
+                    %270:bool = lt %269, 150i
+                    if %270 [t: $B53, f: $B54] {  # if_13
+                      $B53: {  # true
+                        store %continue_execution, false
                         exit_if  # if_13
                       }
-                      %b54 = block {  # false
-                        %x_204:f32 = load_vector_element %gl_FragCoord, 1u
-                        %193:i32 = convert %x_204
-                        %194:bool = lt %193, 180i
-                        if %194 [t: %b55, f: %b56] {  # if_14
-                          %b55 = block {  # true
-                            %195:ptr<private, i32, read_write> = access %data, 5i
-                            %x_211:i32 = load %195
-                            %197:f32 = convert %x_211
-                            %198:f32 = div %197, 10.0f
-                            %199:f32 = add 0.5f, %198
-                            store %grey, %199
+                      $B54: {  # false
+                        %271:f32 = load_vector_element %gl_FragCoord, 1u
+                        %x_204:f32 = let %271
+                        %273:i32 = call %tint_f32_to_i32, %x_204
+                        %274:bool = lt %273, 180i
+                        if %274 [t: $B55, f: $B56] {  # if_14
+                          $B55: {  # true
+                            %275:ptr<private, i32, read_write> = access %data, 5i
+                            %276:i32 = load %275
+                            %x_211:i32 = let %276
+                            %278:f32 = convert %x_211
+                            %279:f32 = div %278, 10.0f
+                            %280:f32 = add 0.5f, %279
+                            store %grey, %280
                             exit_if  # if_14
                           }
-                          %b56 = block {  # false
-                            %x_216:f32 = load_vector_element %gl_FragCoord, 1u
-                            %201:i32 = convert %x_216
-                            %202:bool = lt %201, 210i
-                            if %202 [t: %b57, f: %b58] {  # if_15
-                              %b57 = block {  # true
-                                %203:ptr<private, i32, read_write> = access %data, 6i
-                                %x_223:i32 = load %203
-                                %205:f32 = convert %x_223
-                                %206:f32 = div %205, 10.0f
-                                %207:f32 = add 0.5f, %206
-                                store %grey, %207
+                          $B56: {  # false
+                            %281:f32 = load_vector_element %gl_FragCoord, 1u
+                            %x_216:f32 = let %281
+                            %283:i32 = call %tint_f32_to_i32, %x_216
+                            %284:bool = lt %283, 210i
+                            if %284 [t: $B57, f: $B58] {  # if_15
+                              $B57: {  # true
+                                %285:ptr<private, i32, read_write> = access %data, 6i
+                                %286:i32 = load %285
+                                %x_223:i32 = let %286
+                                %288:f32 = convert %x_223
+                                %289:f32 = div %288, 10.0f
+                                %290:f32 = add 0.5f, %289
+                                store %grey, %290
                                 exit_if  # if_15
                               }
-                              %b58 = block {  # false
-                                %x_228:f32 = load_vector_element %gl_FragCoord, 1u
-                                %209:i32 = convert %x_228
-                                %210:bool = lt %209, 240i
-                                if %210 [t: %b59, f: %b60] {  # if_16
-                                  %b59 = block {  # true
-                                    %211:ptr<private, i32, read_write> = access %data, 7i
-                                    %x_235:i32 = load %211
-                                    %213:f32 = convert %x_235
-                                    %214:f32 = div %213, 10.0f
-                                    %215:f32 = add 0.5f, %214
-                                    store %grey, %215
+                              $B58: {  # false
+                                %291:f32 = load_vector_element %gl_FragCoord, 1u
+                                %x_228:f32 = let %291
+                                %293:i32 = call %tint_f32_to_i32, %x_228
+                                %294:bool = lt %293, 240i
+                                if %294 [t: $B59, f: $B60] {  # if_16
+                                  $B59: {  # true
+                                    %295:ptr<private, i32, read_write> = access %data, 7i
+                                    %296:i32 = load %295
+                                    %x_235:i32 = let %296
+                                    %298:f32 = convert %x_235
+                                    %299:f32 = div %298, 10.0f
+                                    %300:f32 = add 0.5f, %299
+                                    store %grey, %300
                                     exit_if  # if_16
                                   }
-                                  %b60 = block {  # false
-                                    %x_240:f32 = load_vector_element %gl_FragCoord, 1u
+                                  $B60: {  # false
+                                    %301:f32 = load_vector_element %gl_FragCoord, 1u
+                                    %x_240:f32 = let %301
                                     %guard233:ptr<function, bool, read_write> = var, true
-                                    %218:i32 = convert %x_240
-                                    %219:bool = lt %218, 270i
-                                    if %219 [t: %b61, f: %b62] {  # if_17
-                                      %b61 = block {  # true
-                                        %220:ptr<private, i32, read_write> = access %data, 8i
-                                        %x_247:i32 = load %220
-                                        %222:f32 = convert %x_247
-                                        %223:f32 = div %222, 10.0f
-                                        %224:f32 = add 0.5f, %223
-                                        store %grey, %224
+                                    %304:i32 = call %tint_f32_to_i32, %x_240
+                                    %305:bool = lt %304, 270i
+                                    if %305 [t: $B61, f: $B62] {  # if_17
+                                      $B61: {  # true
+                                        %306:ptr<private, i32, read_write> = access %data, 8i
+                                        %307:i32 = load %306
+                                        %x_247:i32 = let %307
+                                        %309:f32 = convert %x_247
+                                        %310:f32 = div %309, 10.0f
+                                        %311:f32 = add 0.5f, %310
+                                        store %grey, %311
                                         store %guard233, false
                                         exit_if  # if_17
                                       }
-                                      %b62 = block {  # false
-                                        %225:bool = load %guard233
-                                        if %225 [t: %b63] {  # if_18
-                                          %b63 = block {  # true
-                                            %226:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
-                                            %x_252:f32 = load_vector_element %226, 1u
-                                            %228:bool = lt 0.0f, %x_252
-                                            %229:bool = eq %228, false
-                                            if %229 [t: %b64] {  # if_19
-                                              %b64 = block {  # true
+                                      $B62: {  # false
+                                        %312:bool = load %guard233
+                                        if %312 [t: $B63] {  # if_18
+                                          $B63: {  # true
+                                            %313:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
+                                            %314:f32 = load_vector_element %313, 1u
+                                            %x_252:f32 = let %314
+                                            %316:bool = lt 0.0f, %x_252
+                                            %317:bool = eq %316, false
+                                            if %317 [t: $B64] {  # if_19
+                                              $B64: {  # true
                                                 store %guard233, false
                                                 exit_if  # if_19
                                               }
                                             }
-                                            %230:bool = load %guard233
-                                            if %230 [t: %b65] {  # if_20
-                                              %b65 = block {  # true
-                                                discard
+                                            %318:bool = load %guard233
+                                            if %318 [t: $B65] {  # if_20
+                                              $B65: {  # true
+                                                store %continue_execution, false
                                                 exit_if  # if_20
                                               }
                                             }
@@ -541,23 +628,42 @@
         exit_if  # if_9
       }
     }
-    %x_255:f32 = load %grey
-    %x_256:vec3<f32> = construct %x_255, %x_255, %x_255
-    %233:f32 = access %x_256, 0u
-    %234:f32 = access %x_256, 1u
-    %235:f32 = access %x_256, 2u
-    %236:vec4<f32> = construct %233, %234, %235, 1.0f
-    store %x_GLF_color, %236
+    %319:f32 = load %grey
+    %x_255:f32 = let %319
+    %321:vec3<f32> = construct %x_255, %x_255, %x_255
+    %x_256:vec3<f32> = let %321
+    %323:f32 = access %x_256, 0u
+    %324:f32 = access %x_256, 1u
+    %325:f32 = access %x_256, 2u
+    %326:vec4<f32> = construct %323, %324, %325, 1.0f
+    store %x_GLF_color, %326
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b66 {
-  %b66 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B66: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %239:void = call %main_1
-    %240:vec4<f32> = load %x_GLF_color
-    %241:main_out = construct %240
-    ret %241
+    %329:void = call %main_1
+    %330:vec4<f32> = load %x_GLF_color
+    %331:main_out = construct %330
+    %332:bool = load %continue_execution
+    %333:bool = eq %332, false
+    if %333 [t: $B67] {  # if_21
+      $B67: {  # true
+        terminate_invocation
+      }
+    }
+    ret %331
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B68: {
+    %335:i32 = convert %value
+    %336:bool = gte %value, -2147483648.0f
+    %337:i32 = select -2147483648i, %335, %336
+    %338:bool = lte %value, 2147483520.0f
+    %339:i32 = select 2147483647i, %337, %338
+    ret %339
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/1.spvasm.expected.ir.msl
index a2ee86f..7dda55c 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/1.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,29 +8,30 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %data:ptr<private, array<i32, 10>, read_write> = var
   %temp:ptr<private, array<i32, 10>, read_write> = var
   %x_28:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%merge_i1_i1_i1_ = func(%f:ptr<function, i32, read_write>, %mid:ptr<function, i32, read_write>, %to:ptr<function, i32, read_write>):void -> %b2 {
-  %b2 = block {
+%merge_i1_i1_i1_ = func(%f:ptr<function, i32, read_write>, %mid:ptr<function, i32, read_write>, %to:ptr<function, i32, read_write>):void {
+  $B2: {
     %k:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %j:ptr<function, i32, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
-    %14:i32 = load %f
-    store %k, %14
     %15:i32 = load %f
-    store %i, %15
-    %16:i32 = load %mid
-    %17:i32 = add %16, 1i
-    store %j, %17
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    store %k, %15
+    %16:i32 = load %f
+    store %i, %16
+    %17:i32 = load %mid
+    %18:i32 = add %17, 1i
+    store %j, %18
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %x_285:ptr<function, i32, read_write> = var
         %x_286:ptr<function, i32, read_write> = var
         %x_287:ptr<function, i32, read_write> = var
@@ -49,326 +50,336 @@
         %x_366:ptr<function, i32, read_write> = var
         %x_365:ptr<function, i32, read_write> = var
         %x_367:ptr<function, i32, read_write> = var
-        %36:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
-        %37:f32 = load_vector_element %36, 0u
-        %38:bool = gte 1.0f, %37
-        if %38 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %37:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
+        %38:f32 = load_vector_element %37, 0u
+        %39:bool = gte 1.0f, %38
+        if %39 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
-            continue %b4
+          $B6: {  # false
+            continue  # -> $B4
           }
         }
-        %39:i32 = load %i
-        %40:i32 = load %mid
-        %41:bool = lte %39, %40
-        %42:i32 = load %j
-        %43:i32 = load %to
-        %44:bool = lte %42, %43
-        %45:bool = and %41, %44
-        if %45 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
+        %40:i32 = load %i
+        %41:i32 = load %mid
+        %42:bool = lte %40, %41
+        %43:i32 = load %j
+        %44:i32 = load %to
+        %45:bool = lte %43, %44
+        %46:bool = and %42, %45
+        if %46 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
             exit_if  # if_2
           }
-          %b8 = block {  # false
+          $B8: {  # false
             exit_loop  # loop_1
           }
         }
-        %46:i32 = load %i
-        %47:ptr<private, i32, read_write> = access %data, %46
-        %48:i32 = load %47
-        %49:i32 = load %j
-        %50:ptr<private, i32, read_write> = access %data, %49
-        %51:i32 = load %50
-        %x_280:bool = lt %48, %51
-        if %x_280 [t: %b9, f: %b10] {  # if_3
-          %b9 = block {  # true
-            %53:i32 = load %k
-            store %x_285, %53
-            %54:i32 = load %x_285
-            store %x_287, %54
+        %47:i32 = load %i
+        %48:ptr<private, i32, read_write> = access %data, %47
+        %49:i32 = load %48
+        %50:i32 = load %j
+        %51:ptr<private, i32, read_write> = access %data, %50
+        %52:i32 = load %51
+        %53:bool = lt %49, %52
+        %x_280:bool = let %53
+        if %x_280 [t: $B9, f: $B10] {  # if_3
+          $B9: {  # true
+            %55:i32 = load %k
+            store %x_285, %55
+            %56:i32 = load %x_285
+            store %x_287, %56
             exit_if  # if_3
           }
-          %b10 = block {  # false
+          $B10: {  # false
             store %x_286, 0i
-            %55:i32 = load %x_286
-            store %x_287, %55
+            %57:i32 = load %x_286
+            store %x_287, %57
             exit_if  # if_3
           }
         }
-        %56:i32 = load %x_287
-        %x_288:i32 = add %56, 1i
-        if %x_280 [t: %b11] {  # if_4
-          %b11 = block {  # true
+        %58:i32 = load %x_287
+        %59:i32 = add %58, 1i
+        %x_288:i32 = let %59
+        if %x_280 [t: $B11] {  # if_4
+          $B11: {  # true
             store %k, %x_288
-            %58:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
-            %59:f32 = load_vector_element %58, 0u
-            %60:bool = lte 1.0f, %59
-            %61:bool = eq %60, false
-            if %61 [t: %b12, f: %b13] {  # if_5
-              %b12 = block {  # true
+            %61:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
+            %62:f32 = load_vector_element %61, 0u
+            %63:bool = lte 1.0f, %62
+            %64:bool = eq %63, false
+            if %64 [t: $B12, f: $B13] {  # if_5
+              $B12: {  # true
                 exit_if  # if_5
               }
-              %b13 = block {  # false
-                continue %b4
+              $B13: {  # false
+                continue  # -> $B4
               }
             }
             exit_if  # if_4
           }
         }
-        %62:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
-        %63:f32 = load_vector_element %62, 1u
-        %64:bool = gte %63, 0.0f
-        if %64 [t: %b14, f: %b15] {  # if_6
-          %b14 = block {  # true
+        %65:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
+        %66:f32 = load_vector_element %65, 1u
+        %67:bool = gte %66, 0.0f
+        if %67 [t: $B14, f: $B15] {  # if_6
+          $B14: {  # true
             exit_if  # if_6
           }
-          %b15 = block {  # false
-            continue %b4
+          $B15: {  # false
+            continue  # -> $B4
           }
         }
         %x_300:i32 = let 0i
-        if %x_280 [t: %b16, f: %b17] {  # if_7
-          %b16 = block {  # true
-            %66:i32 = load %i
-            store %x_305, %66
-            %67:i32 = load %x_305
-            store %x_307, %67
+        if %x_280 [t: $B16, f: $B17] {  # if_7
+          $B16: {  # true
+            %69:i32 = load %i
+            store %x_305, %69
+            %70:i32 = load %x_305
+            store %x_307, %70
             exit_if  # if_7
           }
-          %b17 = block {  # false
+          $B17: {  # false
             store %x_306, 0i
-            %68:i32 = load %x_306
-            store %x_307, %68
+            %71:i32 = load %x_306
+            store %x_307, %71
             exit_if  # if_7
           }
         }
-        %69:i32 = load %x_307
-        %x_309:i32 = select %x_300, %69, %x_280
-        if %x_280 [t: %b18] {  # if_8
-          %b18 = block {  # true
-            %71:i32 = add %x_309, 1i
-            store %i, %71
+        %72:i32 = load %x_307
+        %73:i32 = select %x_300, %72, %x_280
+        %x_309:i32 = let %73
+        if %x_280 [t: $B18] {  # if_8
+          $B18: {  # true
+            %75:i32 = add %x_309, 1i
+            store %i, %75
             exit_if  # if_8
           }
         }
         %x_315:i32 = let 0i
-        if %x_280 [t: %b19, f: %b20] {  # if_9
-          %b19 = block {  # true
-            %73:ptr<private, i32, read_write> = access %data, %x_309
-            %74:i32 = load %73
-            store %x_320, %74
-            %75:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
-            %x_322:f32 = load_vector_element %75, 1u
-            %77:i32 = load %x_320
-            store %x_328, %77
-            %78:bool = lte 0.0f, %x_322
-            %79:bool = eq %78, false
-            if %79 [t: %b21] {  # if_10
-              %b21 = block {  # true
-                continue %b4
+        if %x_280 [t: $B19, f: $B20] {  # if_9
+          $B19: {  # true
+            %77:ptr<private, i32, read_write> = access %data, %x_309
+            %78:i32 = load %77
+            store %x_320, %78
+            %79:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
+            %80:f32 = load_vector_element %79, 1u
+            %x_322:f32 = let %80
+            %82:i32 = load %x_320
+            store %x_328, %82
+            %83:bool = lte 0.0f, %x_322
+            %84:bool = eq %83, false
+            if %84 [t: $B21] {  # if_10
+              $B21: {  # true
+                continue  # -> $B4
               }
             }
             exit_if  # if_9
           }
-          %b20 = block {  # false
+          $B20: {  # false
             store %x_324, 0i
-            %80:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
-            %x_326:f32 = load_vector_element %80, 1u
-            %82:i32 = load %x_324
-            store %x_328, %82
-            %83:bool = lt %x_326, 0.0f
-            %84:bool = eq %83, false
-            if %84 [t: %b22, f: %b23] {  # if_11
-              %b22 = block {  # true
+            %85:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
+            %86:f32 = load_vector_element %85, 1u
+            %x_326:f32 = let %86
+            %88:i32 = load %x_324
+            store %x_328, %88
+            %89:bool = lt %x_326, 0.0f
+            %90:bool = eq %89, false
+            if %90 [t: $B22, f: $B23] {  # if_11
+              $B22: {  # true
                 exit_if  # if_11
               }
-              %b23 = block {  # false
-                continue %b4
+              $B23: {  # false
+                continue  # -> $B4
               }
             }
             exit_if  # if_9
           }
         }
-        if %x_280 [t: %b24] {  # if_12
-          %b24 = block {  # true
-            %85:i32 = load %x_287
-            %86:ptr<private, i32, read_write> = access %temp, %85
-            %87:i32 = load %x_328
-            %88:i32 = select %x_315, %87, %x_280
-            store %86, %88
+        if %x_280 [t: $B24] {  # if_12
+          $B24: {  # true
+            %91:i32 = load %x_287
+            %92:ptr<private, i32, read_write> = access %temp, %91
+            %93:ptr<private, i32, read_write> = let %92
+            %94:i32 = load %x_328
+            %95:i32 = select %x_315, %94, %x_280
+            store %93, %95
             exit_if  # if_12
           }
         }
-        if %x_280 [t: %b25, f: %b26] {  # if_13
-          %b25 = block {  # true
+        if %x_280 [t: $B25, f: $B26] {  # if_13
+          $B25: {  # true
             store %x_339, 0i
-            %89:i32 = load %x_339
-            store %x_340, %89
+            %96:i32 = load %x_339
+            store %x_340, %96
             exit_if  # if_13
           }
-          %b26 = block {  # false
-            %90:i32 = load %k
-            store %x_338, %90
-            %91:i32 = load %x_338
-            store %x_340, %91
+          $B26: {  # false
+            %97:i32 = load %k
+            store %x_338, %97
+            %98:i32 = load %x_338
+            store %x_340, %98
             exit_if  # if_13
           }
         }
-        if %x_280 [t: %b27, f: %b28] {  # if_14
-          %b27 = block {  # true
+        if %x_280 [t: $B27, f: $B28] {  # if_14
+          $B27: {  # true
             exit_if  # if_14
           }
-          %b28 = block {  # false
-            %92:i32 = load %x_340
-            %93:i32 = add %92, 1i
-            store %k, %93
+          $B28: {  # false
+            %99:i32 = load %x_340
+            %100:i32 = add %99, 1i
+            store %k, %100
             exit_if  # if_14
           }
         }
-        %94:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
-        %95:f32 = load_vector_element %94, 0u
-        %96:bool = lte 1.0f, %95
-        %97:bool = eq %96, false
-        if %97 [t: %b29, f: %b30] {  # if_15
-          %b29 = block {  # true
+        %101:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
+        %102:f32 = load_vector_element %101, 0u
+        %103:bool = lte 1.0f, %102
+        %104:bool = eq %103, false
+        if %104 [t: $B29, f: $B30] {  # if_15
+          $B29: {  # true
             exit_if  # if_15
           }
-          %b30 = block {  # false
-            continue %b4
+          $B30: {  # false
+            continue  # -> $B4
           }
         }
-        if %x_280 [t: %b31, f: %b32] {  # if_16
-          %b31 = block {  # true
+        if %x_280 [t: $B31, f: $B32] {  # if_16
+          $B31: {  # true
             store %x_352, 0i
-            %98:i32 = load %x_352
-            store %x_353, %98
+            %105:i32 = load %x_352
+            store %x_353, %105
             exit_if  # if_16
           }
-          %b32 = block {  # false
-            %99:i32 = load %j
-            store %x_351, %99
-            %100:i32 = load %x_351
-            store %x_353, %100
+          $B32: {  # false
+            %106:i32 = load %j
+            store %x_351, %106
+            %107:i32 = load %x_351
+            store %x_353, %107
             exit_if  # if_16
           }
         }
-        %101:i32 = load %x_353
-        %x_357:i32 = select %101, 0i, %x_280
-        if %x_280 [t: %b33, f: %b34] {  # if_17
-          %b33 = block {  # true
+        %108:i32 = load %x_353
+        %109:i32 = select %108, 0i, %x_280
+        %x_357:i32 = let %109
+        if %x_280 [t: $B33, f: $B34] {  # if_17
+          $B33: {  # true
             exit_if  # if_17
           }
-          %b34 = block {  # false
-            %103:i32 = add %x_357, 1i
-            store %j, %103
+          $B34: {  # false
+            %111:i32 = add %x_357, 1i
+            store %j, %111
             exit_if  # if_17
           }
         }
-        if %x_280 [t: %b35, f: %b36] {  # if_18
-          %b35 = block {  # true
+        if %x_280 [t: $B35, f: $B36] {  # if_18
+          $B35: {  # true
             store %x_366, 0i
-            %104:i32 = load %x_366
-            store %x_367, %104
+            %112:i32 = load %x_366
+            store %x_367, %112
             exit_if  # if_18
           }
-          %b36 = block {  # false
-            %105:ptr<private, i32, read_write> = access %data, %x_357
-            %106:i32 = load %105
-            store %x_365, %106
-            %107:i32 = load %x_365
-            store %x_367, %107
+          $B36: {  # false
+            %113:ptr<private, i32, read_write> = access %data, %x_357
+            %114:i32 = load %113
+            store %x_365, %114
+            %115:i32 = load %x_365
+            store %x_367, %115
             exit_if  # if_18
           }
         }
-        if %x_280 [t: %b37, f: %b38] {  # if_19
-          %b37 = block {  # true
+        if %x_280 [t: $B37, f: $B38] {  # if_19
+          $B37: {  # true
             exit_if  # if_19
           }
-          %b38 = block {  # false
-            %108:i32 = load %x_340
-            %109:ptr<private, i32, read_write> = access %temp, %108
-            %110:i32 = load %x_367
-            store %109, %110
+          $B38: {  # false
+            %116:i32 = load %x_340
+            %117:ptr<private, i32, read_write> = access %temp, %116
+            %118:i32 = load %x_367
+            store %117, %118
             exit_if  # if_19
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
-    loop [b: %b39, c: %b40] {  # loop_2
-      %b39 = block {  # body
-        %111:i32 = load %i
-        %112:bool = lt %111, 10i
-        %113:i32 = load %i
-        %114:i32 = load %mid
-        %115:bool = lte %113, %114
-        %116:bool = and %112, %115
-        if %116 [t: %b41, f: %b42] {  # if_20
-          %b41 = block {  # true
+    loop [b: $B39, c: $B40] {  # loop_2
+      $B39: {  # body
+        %119:i32 = load %i
+        %120:bool = lt %119, 10i
+        %121:i32 = load %i
+        %122:i32 = load %mid
+        %123:bool = lte %121, %122
+        %124:bool = and %120, %123
+        if %124 [t: $B41, f: $B42] {  # if_20
+          $B41: {  # true
             exit_if  # if_20
           }
-          %b42 = block {  # false
+          $B42: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_383:i32 = load %k
-        %118:i32 = load %k
-        %119:i32 = add %118, 1i
-        store %k, %119
-        %x_385:i32 = load %i
-        %121:i32 = load %i
-        %122:i32 = add %121, 1i
-        store %i, %122
-        %123:ptr<private, i32, read_write> = access %temp, %x_383
-        %124:ptr<private, i32, read_write> = access %data, %x_385
-        %125:i32 = load %124
-        store %123, %125
-        continue %b40
+        %125:i32 = load %k
+        %x_383:i32 = let %125
+        %127:i32 = load %k
+        %128:i32 = add %127, 1i
+        store %k, %128
+        %129:i32 = load %i
+        %x_385:i32 = let %129
+        %131:i32 = load %i
+        %132:i32 = add %131, 1i
+        store %i, %132
+        %133:ptr<private, i32, read_write> = access %temp, %x_383
+        %134:ptr<private, i32, read_write> = access %data, %x_385
+        %135:i32 = load %134
+        store %133, %135
+        continue  # -> $B40
       }
-      %b40 = block {  # continuing
-        next_iteration %b39
+      $B40: {  # continuing
+        next_iteration  # -> $B39
       }
     }
-    %126:i32 = load %f
-    store %i_1, %126
-    loop [b: %b43, c: %b44] {  # loop_3
-      %b43 = block {  # body
-        %127:i32 = load %i_1
-        %128:i32 = load %to
-        %129:bool = lte %127, %128
-        if %129 [t: %b45, f: %b46] {  # if_21
-          %b45 = block {  # true
+    %136:i32 = load %f
+    store %i_1, %136
+    loop [b: $B43, c: $B44] {  # loop_3
+      $B43: {  # body
+        %137:i32 = load %i_1
+        %138:i32 = load %to
+        %139:bool = lte %137, %138
+        if %139 [t: $B45, f: $B46] {  # if_21
+          $B45: {  # true
             exit_if  # if_21
           }
-          %b46 = block {  # false
+          $B46: {  # false
             exit_loop  # loop_3
           }
         }
-        %x_399:i32 = load %i_1
-        %131:ptr<private, i32, read_write> = access %data, %x_399
-        %132:i32 = load %i_1
-        %133:ptr<private, i32, read_write> = access %temp, %132
-        %134:i32 = load %133
-        store %131, %134
-        continue %b44
+        %140:i32 = load %i_1
+        %x_399:i32 = let %140
+        %142:ptr<private, i32, read_write> = access %data, %x_399
+        %143:i32 = load %i_1
+        %144:ptr<private, i32, read_write> = access %temp, %143
+        %145:i32 = load %144
+        store %142, %145
+        continue  # -> $B44
       }
-      %b44 = block {  # continuing
-        %135:i32 = load %i_1
-        %136:i32 = add %135, 1i
-        store %i_1, %136
-        next_iteration %b43
+      $B44: {  # continuing
+        %146:i32 = load %i_1
+        %147:i32 = add %146, 1i
+        store %i_1, %147
+        next_iteration  # -> $B43
       }
     }
     ret
   }
 }
-%mergeSort_ = func():void -> %b47 {
-  %b47 = block {
+%mergeSort_ = func():void {
+  $B47: {
     %low:ptr<function, i32, read_write> = var
     %high:ptr<function, i32, read_write> = var
     %m:ptr<function, i32, read_write> = var
@@ -382,319 +393,332 @@
     store %low, 0i
     store %high, 9i
     store %m, 1i
-    loop [b: %b48, c: %b49] {  # loop_4
-      %b48 = block {  # body
-        %148:i32 = load %m
-        %149:i32 = load %high
-        %150:bool = lte %148, %149
-        if %150 [t: %b50, f: %b51] {  # if_22
-          %b50 = block {  # true
+    loop [b: $B48, c: $B49] {  # loop_4
+      $B48: {  # body
+        %159:i32 = load %m
+        %160:i32 = load %high
+        %161:bool = lte %159, %160
+        if %161 [t: $B50, f: $B51] {  # if_22
+          $B50: {  # true
             exit_if  # if_22
           }
-          %b51 = block {  # false
+          $B51: {  # false
             exit_loop  # loop_4
           }
         }
-        %151:i32 = load %low
-        store %i_2, %151
-        loop [b: %b52, c: %b53] {  # loop_5
-          %b52 = block {  # body
-            %152:i32 = load %i_2
-            %153:i32 = load %high
-            %154:bool = lt %152, %153
-            if %154 [t: %b54, f: %b55] {  # if_23
-              %b54 = block {  # true
+        %162:i32 = load %low
+        store %i_2, %162
+        loop [b: $B52, c: $B53] {  # loop_5
+          $B52: {  # body
+            %163:i32 = load %i_2
+            %164:i32 = load %high
+            %165:bool = lt %163, %164
+            if %165 [t: $B54, f: $B55] {  # if_23
+              $B54: {  # true
                 exit_if  # if_23
               }
-              %b55 = block {  # false
+              $B55: {  # false
                 exit_loop  # loop_5
               }
             }
-            %155:i32 = load %i_2
-            store %f_1, %155
-            %156:i32 = load %i_2
-            %157:i32 = load %m
-            %158:i32 = add %156, %157
-            %159:i32 = sub %158, 1i
-            store %mid_1, %159
-            %160:i32 = load %i_2
-            %161:i32 = load %m
-            %162:i32 = mul 2i, %161
-            %163:i32 = add %160, %162
-            %164:i32 = sub %163, 1i
-            %165:i32 = load %high
-            %166:i32 = min %164, %165
-            store %to_1, %166
-            %167:i32 = load %f_1
-            store %param, %167
-            %168:i32 = load %mid_1
-            store %param_1, %168
-            %169:i32 = load %to_1
-            store %param_2, %169
-            %170:void = call %merge_i1_i1_i1_, %param, %param_1, %param_2
-            continue %b53
-          }
-          %b53 = block {  # continuing
+            %166:i32 = load %i_2
+            store %f_1, %166
+            %167:i32 = load %i_2
+            %168:i32 = load %m
+            %169:i32 = add %167, %168
+            %170:i32 = sub %169, 1i
+            store %mid_1, %170
             %171:i32 = load %i_2
             %172:i32 = load %m
             %173:i32 = mul 2i, %172
             %174:i32 = add %171, %173
-            store %i_2, %174
-            next_iteration %b52
+            %175:i32 = sub %174, 1i
+            %176:i32 = load %high
+            %177:i32 = min %175, %176
+            store %to_1, %177
+            %178:i32 = load %f_1
+            store %param, %178
+            %179:i32 = load %mid_1
+            store %param_1, %179
+            %180:i32 = load %to_1
+            store %param_2, %180
+            %181:void = call %merge_i1_i1_i1_, %param, %param_1, %param_2
+            continue  # -> $B53
+          }
+          $B53: {  # continuing
+            %182:i32 = load %i_2
+            %183:i32 = load %m
+            %184:i32 = mul 2i, %183
+            %185:i32 = add %182, %184
+            store %i_2, %185
+            next_iteration  # -> $B52
           }
         }
-        continue %b49
+        continue  # -> $B49
       }
-      %b49 = block {  # continuing
-        %175:i32 = load %m
-        %176:i32 = mul 2i, %175
-        store %m, %176
-        next_iteration %b48
+      $B49: {  # continuing
+        %186:i32 = load %m
+        %187:i32 = mul 2i, %186
+        store %m, %187
+        next_iteration  # -> $B48
       }
     }
     ret
   }
 }
-%main_1 = func():void -> %b56 {
-  %b56 = block {
+%main_1 = func():void {
+  $B56: {
     %i_3:ptr<function, i32, read_write> = var
     %j_1:ptr<function, i32, read_write> = var
     %grey:ptr<function, f32, read_write> = var
-    %181:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
-    %182:f32 = load_vector_element %181, 0u
-    %183:i32 = convert %182
-    store %i_3, %183
-    loop [b: %b57, c: %b58] {  # loop_6
-      %b57 = block {  # body
-        %x_94:i32 = load %i_3
-        switch %x_94 [c: (9i, %b59), c: (8i, %b60), c: (7i, %b61), c: (6i, %b62), c: (5i, %b63), c: (4i, %b64), c: (3i, %b65), c: (2i, %b66), c: (1i, %b67), c: (0i, %b68), c: (default, %b69)] {  # switch_1
-          %b59 = block {  # case
-            %x_124:i32 = load %i_3
-            %186:ptr<private, i32, read_write> = access %data, %x_124
-            store %186, -5i
+    %192:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
+    %193:f32 = load_vector_element %192, 0u
+    %194:i32 = call %tint_f32_to_i32, %193
+    store %i_3, %194
+    loop [b: $B57, c: $B58] {  # loop_6
+      $B57: {  # body
+        %196:i32 = load %i_3
+        %x_94:i32 = let %196
+        switch %x_94 [c: (9i, $B59), c: (8i, $B60), c: (7i, $B61), c: (6i, $B62), c: (5i, $B63), c: (4i, $B64), c: (3i, $B65), c: (2i, $B66), c: (1i, $B67), c: (0i, $B68), c: (default, $B69)] {  # switch_1
+          $B59: {  # case
+            %198:i32 = load %i_3
+            %x_124:i32 = let %198
+            %200:ptr<private, i32, read_write> = access %data, %x_124
+            store %200, -5i
             exit_switch  # switch_1
           }
-          %b60 = block {  # case
-            %x_122:i32 = load %i_3
-            %188:ptr<private, i32, read_write> = access %data, %x_122
-            store %188, -4i
+          $B60: {  # case
+            %201:i32 = load %i_3
+            %x_122:i32 = let %201
+            %203:ptr<private, i32, read_write> = access %data, %x_122
+            store %203, -4i
             exit_switch  # switch_1
           }
-          %b61 = block {  # case
-            %x_120:i32 = load %i_3
-            %190:ptr<private, i32, read_write> = access %data, %x_120
-            store %190, -3i
+          $B61: {  # case
+            %204:i32 = load %i_3
+            %x_120:i32 = let %204
+            %206:ptr<private, i32, read_write> = access %data, %x_120
+            store %206, -3i
             exit_switch  # switch_1
           }
-          %b62 = block {  # case
-            %x_118:i32 = load %i_3
-            %192:ptr<private, i32, read_write> = access %data, %x_118
-            store %192, -2i
+          $B62: {  # case
+            %207:i32 = load %i_3
+            %x_118:i32 = let %207
+            %209:ptr<private, i32, read_write> = access %data, %x_118
+            store %209, -2i
             exit_switch  # switch_1
           }
-          %b63 = block {  # case
-            %x_116:i32 = load %i_3
-            %194:ptr<private, i32, read_write> = access %data, %x_116
-            store %194, -1i
+          $B63: {  # case
+            %210:i32 = load %i_3
+            %x_116:i32 = let %210
+            %212:ptr<private, i32, read_write> = access %data, %x_116
+            store %212, -1i
             exit_switch  # switch_1
           }
-          %b64 = block {  # case
-            %x_114:i32 = load %i_3
-            %196:ptr<private, i32, read_write> = access %data, %x_114
-            store %196, 0i
+          $B64: {  # case
+            %213:i32 = load %i_3
+            %x_114:i32 = let %213
+            %215:ptr<private, i32, read_write> = access %data, %x_114
+            store %215, 0i
             exit_switch  # switch_1
           }
-          %b65 = block {  # case
-            %x_112:i32 = load %i_3
-            %198:ptr<private, i32, read_write> = access %data, %x_112
-            store %198, 1i
+          $B65: {  # case
+            %216:i32 = load %i_3
+            %x_112:i32 = let %216
+            %218:ptr<private, i32, read_write> = access %data, %x_112
+            store %218, 1i
             exit_switch  # switch_1
           }
-          %b66 = block {  # case
-            %x_110:i32 = load %i_3
-            %200:ptr<private, i32, read_write> = access %data, %x_110
-            store %200, 2i
+          $B66: {  # case
+            %219:i32 = load %i_3
+            %x_110:i32 = let %219
+            %221:ptr<private, i32, read_write> = access %data, %x_110
+            store %221, 2i
             exit_switch  # switch_1
           }
-          %b67 = block {  # case
-            %x_108:i32 = load %i_3
-            %202:ptr<private, i32, read_write> = access %data, %x_108
-            store %202, 3i
+          $B67: {  # case
+            %222:i32 = load %i_3
+            %x_108:i32 = let %222
+            %224:ptr<private, i32, read_write> = access %data, %x_108
+            store %224, 3i
             exit_switch  # switch_1
           }
-          %b68 = block {  # case
-            %x_106:i32 = load %i_3
-            %204:ptr<private, i32, read_write> = access %data, %x_106
-            store %204, 4i
+          $B68: {  # case
+            %225:i32 = load %i_3
+            %x_106:i32 = let %225
+            %227:ptr<private, i32, read_write> = access %data, %x_106
+            store %227, 4i
             exit_switch  # switch_1
           }
-          %b69 = block {  # case
+          $B69: {  # case
             exit_switch  # switch_1
           }
         }
-        %205:i32 = load %i_3
-        %206:i32 = add %205, 1i
-        store %i_3, %206
-        continue %b58
+        %228:i32 = load %i_3
+        %229:i32 = add %228, 1i
+        store %i_3, %229
+        continue  # -> $B58
       }
-      %b58 = block {  # continuing
-        %x_128:i32 = load %i_3
-        %208:bool = lt %x_128, 10i
-        %209:bool = eq %208, false
-        break_if %209 %b57
+      $B58: {  # continuing
+        %230:i32 = load %i_3
+        %x_128:i32 = let %230
+        %232:bool = lt %x_128, 10i
+        %233:bool = eq %232, false
+        break_if %233  # -> [t: exit_loop loop_6, f: $B57]
       }
     }
     store %j_1, 0i
-    loop [b: %b70, c: %b71] {  # loop_7
-      %b70 = block {  # body
-        %210:i32 = load %j_1
-        %211:bool = lt %210, 10i
-        if %211 [t: %b72, f: %b73] {  # if_24
-          %b72 = block {  # true
+    loop [b: $B70, c: $B71] {  # loop_7
+      $B70: {  # body
+        %234:i32 = load %j_1
+        %235:bool = lt %234, 10i
+        if %235 [t: $B72, f: $B73] {  # if_24
+          $B72: {  # true
             exit_if  # if_24
           }
-          %b73 = block {  # false
+          $B73: {  # false
             exit_loop  # loop_7
           }
         }
-        %x_137:i32 = load %j_1
-        %213:ptr<private, i32, read_write> = access %temp, %x_137
-        %214:i32 = load %j_1
-        %215:ptr<private, i32, read_write> = access %data, %214
-        %216:i32 = load %215
-        store %213, %216
-        continue %b71
+        %236:i32 = load %j_1
+        %x_137:i32 = let %236
+        %238:ptr<private, i32, read_write> = access %temp, %x_137
+        %239:i32 = load %j_1
+        %240:ptr<private, i32, read_write> = access %data, %239
+        %241:i32 = load %240
+        store %238, %241
+        continue  # -> $B71
       }
-      %b71 = block {  # continuing
-        %217:i32 = load %j_1
-        %218:i32 = add %217, 1i
-        store %j_1, %218
-        next_iteration %b70
+      $B71: {  # continuing
+        %242:i32 = load %j_1
+        %243:i32 = add %242, 1i
+        store %j_1, %243
+        next_iteration  # -> $B70
       }
     }
-    %219:void = call %mergeSort_
-    %220:f32 = load_vector_element %gl_FragCoord, 1u
-    %221:i32 = convert %220
-    %222:bool = lt %221, 30i
-    if %222 [t: %b74, f: %b75] {  # if_25
-      %b74 = block {  # true
-        %223:ptr<private, i32, read_write> = access %data, 0i
-        %224:i32 = load %223
-        %225:f32 = convert %224
-        %226:f32 = div %225, 10.0f
-        %227:f32 = add 0.5f, %226
-        store %grey, %227
+    %244:void = call %mergeSort_
+    %245:f32 = load_vector_element %gl_FragCoord, 1u
+    %246:i32 = call %tint_f32_to_i32, %245
+    %247:bool = lt %246, 30i
+    if %247 [t: $B74, f: $B75] {  # if_25
+      $B74: {  # true
+        %248:ptr<private, i32, read_write> = access %data, 0i
+        %249:i32 = load %248
+        %250:f32 = convert %249
+        %251:f32 = div %250, 10.0f
+        %252:f32 = add 0.5f, %251
+        store %grey, %252
         exit_if  # if_25
       }
-      %b75 = block {  # false
-        %228:f32 = load_vector_element %gl_FragCoord, 1u
-        %229:i32 = convert %228
-        %230:bool = lt %229, 60i
-        if %230 [t: %b76, f: %b77] {  # if_26
-          %b76 = block {  # true
-            %231:ptr<private, i32, read_write> = access %data, 1i
-            %232:i32 = load %231
-            %233:f32 = convert %232
-            %234:f32 = div %233, 10.0f
-            %235:f32 = add 0.5f, %234
-            store %grey, %235
+      $B75: {  # false
+        %253:f32 = load_vector_element %gl_FragCoord, 1u
+        %254:i32 = call %tint_f32_to_i32, %253
+        %255:bool = lt %254, 60i
+        if %255 [t: $B76, f: $B77] {  # if_26
+          $B76: {  # true
+            %256:ptr<private, i32, read_write> = access %data, 1i
+            %257:i32 = load %256
+            %258:f32 = convert %257
+            %259:f32 = div %258, 10.0f
+            %260:f32 = add 0.5f, %259
+            store %grey, %260
             exit_if  # if_26
           }
-          %b77 = block {  # false
-            %236:f32 = load_vector_element %gl_FragCoord, 1u
-            %237:i32 = convert %236
-            %238:bool = lt %237, 90i
-            if %238 [t: %b78, f: %b79] {  # if_27
-              %b78 = block {  # true
-                %239:ptr<private, i32, read_write> = access %data, 2i
-                %240:i32 = load %239
-                %241:f32 = convert %240
-                %242:f32 = div %241, 10.0f
-                %243:f32 = add 0.5f, %242
-                store %grey, %243
+          $B77: {  # false
+            %261:f32 = load_vector_element %gl_FragCoord, 1u
+            %262:i32 = call %tint_f32_to_i32, %261
+            %263:bool = lt %262, 90i
+            if %263 [t: $B78, f: $B79] {  # if_27
+              $B78: {  # true
+                %264:ptr<private, i32, read_write> = access %data, 2i
+                %265:i32 = load %264
+                %266:f32 = convert %265
+                %267:f32 = div %266, 10.0f
+                %268:f32 = add 0.5f, %267
+                store %grey, %268
                 exit_if  # if_27
               }
-              %b79 = block {  # false
-                %244:f32 = load_vector_element %gl_FragCoord, 1u
-                %245:i32 = convert %244
-                %246:bool = lt %245, 120i
-                if %246 [t: %b80, f: %b81] {  # if_28
-                  %b80 = block {  # true
-                    %247:ptr<private, i32, read_write> = access %data, 3i
-                    %248:i32 = load %247
-                    %249:f32 = convert %248
-                    %250:f32 = div %249, 10.0f
-                    %251:f32 = add 0.5f, %250
-                    store %grey, %251
+              $B79: {  # false
+                %269:f32 = load_vector_element %gl_FragCoord, 1u
+                %270:i32 = call %tint_f32_to_i32, %269
+                %271:bool = lt %270, 120i
+                if %271 [t: $B80, f: $B81] {  # if_28
+                  $B80: {  # true
+                    %272:ptr<private, i32, read_write> = access %data, 3i
+                    %273:i32 = load %272
+                    %274:f32 = convert %273
+                    %275:f32 = div %274, 10.0f
+                    %276:f32 = add 0.5f, %275
+                    store %grey, %276
                     exit_if  # if_28
                   }
-                  %b81 = block {  # false
-                    %252:f32 = load_vector_element %gl_FragCoord, 1u
-                    %253:i32 = convert %252
-                    %254:bool = lt %253, 150i
-                    if %254 [t: %b82, f: %b83] {  # if_29
-                      %b82 = block {  # true
-                        discard
+                  $B81: {  # false
+                    %277:f32 = load_vector_element %gl_FragCoord, 1u
+                    %278:i32 = call %tint_f32_to_i32, %277
+                    %279:bool = lt %278, 150i
+                    if %279 [t: $B82, f: $B83] {  # if_29
+                      $B82: {  # true
+                        store %continue_execution, false
                         exit_if  # if_29
                       }
-                      %b83 = block {  # false
-                        %255:f32 = load_vector_element %gl_FragCoord, 1u
-                        %256:i32 = convert %255
-                        %257:bool = lt %256, 180i
-                        if %257 [t: %b84, f: %b85] {  # if_30
-                          %b84 = block {  # true
-                            %258:ptr<private, i32, read_write> = access %data, 5i
-                            %259:i32 = load %258
-                            %260:f32 = convert %259
-                            %261:f32 = div %260, 10.0f
-                            %262:f32 = add 0.5f, %261
-                            store %grey, %262
+                      $B83: {  # false
+                        %280:f32 = load_vector_element %gl_FragCoord, 1u
+                        %281:i32 = call %tint_f32_to_i32, %280
+                        %282:bool = lt %281, 180i
+                        if %282 [t: $B84, f: $B85] {  # if_30
+                          $B84: {  # true
+                            %283:ptr<private, i32, read_write> = access %data, 5i
+                            %284:i32 = load %283
+                            %285:f32 = convert %284
+                            %286:f32 = div %285, 10.0f
+                            %287:f32 = add 0.5f, %286
+                            store %grey, %287
                             exit_if  # if_30
                           }
-                          %b85 = block {  # false
-                            %263:f32 = load_vector_element %gl_FragCoord, 1u
-                            %264:i32 = convert %263
-                            %265:bool = lt %264, 210i
-                            if %265 [t: %b86, f: %b87] {  # if_31
-                              %b86 = block {  # true
-                                %266:ptr<private, i32, read_write> = access %data, 6i
-                                %267:i32 = load %266
-                                %268:f32 = convert %267
-                                %269:f32 = div %268, 10.0f
-                                %270:f32 = add 0.5f, %269
-                                store %grey, %270
+                          $B85: {  # false
+                            %288:f32 = load_vector_element %gl_FragCoord, 1u
+                            %289:i32 = call %tint_f32_to_i32, %288
+                            %290:bool = lt %289, 210i
+                            if %290 [t: $B86, f: $B87] {  # if_31
+                              $B86: {  # true
+                                %291:ptr<private, i32, read_write> = access %data, 6i
+                                %292:i32 = load %291
+                                %293:f32 = convert %292
+                                %294:f32 = div %293, 10.0f
+                                %295:f32 = add 0.5f, %294
+                                store %grey, %295
                                 exit_if  # if_31
                               }
-                              %b87 = block {  # false
-                                %271:f32 = load_vector_element %gl_FragCoord, 1u
-                                %272:i32 = convert %271
-                                %273:bool = lt %272, 240i
-                                if %273 [t: %b88, f: %b89] {  # if_32
-                                  %b88 = block {  # true
-                                    %274:ptr<private, i32, read_write> = access %data, 7i
-                                    %275:i32 = load %274
-                                    %276:f32 = convert %275
-                                    %277:f32 = div %276, 10.0f
-                                    %278:f32 = add 0.5f, %277
-                                    store %grey, %278
+                              $B87: {  # false
+                                %296:f32 = load_vector_element %gl_FragCoord, 1u
+                                %297:i32 = call %tint_f32_to_i32, %296
+                                %298:bool = lt %297, 240i
+                                if %298 [t: $B88, f: $B89] {  # if_32
+                                  $B88: {  # true
+                                    %299:ptr<private, i32, read_write> = access %data, 7i
+                                    %300:i32 = load %299
+                                    %301:f32 = convert %300
+                                    %302:f32 = div %301, 10.0f
+                                    %303:f32 = add 0.5f, %302
+                                    store %grey, %303
                                     exit_if  # if_32
                                   }
-                                  %b89 = block {  # false
-                                    %279:f32 = load_vector_element %gl_FragCoord, 1u
-                                    %280:i32 = convert %279
-                                    %281:bool = lt %280, 270i
-                                    if %281 [t: %b90, f: %b91] {  # if_33
-                                      %b90 = block {  # true
-                                        %282:ptr<private, i32, read_write> = access %data, 8i
-                                        %283:i32 = load %282
-                                        %284:f32 = convert %283
-                                        %285:f32 = div %284, 10.0f
-                                        %286:f32 = add 0.5f, %285
-                                        store %grey, %286
+                                  $B89: {  # false
+                                    %304:f32 = load_vector_element %gl_FragCoord, 1u
+                                    %305:i32 = call %tint_f32_to_i32, %304
+                                    %306:bool = lt %305, 270i
+                                    if %306 [t: $B90, f: $B91] {  # if_33
+                                      $B90: {  # true
+                                        %307:ptr<private, i32, read_write> = access %data, 8i
+                                        %308:i32 = load %307
+                                        %309:f32 = convert %308
+                                        %310:f32 = div %309, 10.0f
+                                        %311:f32 = add 0.5f, %310
+                                        store %grey, %311
                                         exit_if  # if_33
                                       }
-                                      %b91 = block {  # false
-                                        discard
+                                      $B91: {  # false
+                                        store %continue_execution, false
                                         exit_if  # if_33
                                       }
                                     }
@@ -722,23 +746,41 @@
         exit_if  # if_25
       }
     }
-    %287:f32 = load %grey
-    %x_249:vec3<f32> = construct %287
-    %289:f32 = access %x_249, 0u
-    %290:f32 = access %x_249, 1u
-    %291:f32 = access %x_249, 2u
-    %292:vec4<f32> = construct %289, %290, %291, 1.0f
-    store %x_GLF_color, %292
+    %312:f32 = load %grey
+    %313:vec3<f32> = construct %312
+    %x_249:vec3<f32> = let %313
+    %315:f32 = access %x_249, 0u
+    %316:f32 = access %x_249, 1u
+    %317:f32 = access %x_249, 2u
+    %318:vec4<f32> = construct %315, %316, %317, 1.0f
+    store %x_GLF_color, %318
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b92 {
-  %b92 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B92: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %295:void = call %main_1
-    %296:vec4<f32> = load %x_GLF_color
-    %297:main_out = construct %296
-    ret %297
+    %321:void = call %main_1
+    %322:vec4<f32> = load %x_GLF_color
+    %323:main_out = construct %322
+    %324:bool = load %continue_execution
+    %325:bool = eq %324, false
+    if %325 [t: $B93] {  # if_34
+      $B93: {  # true
+        terminate_invocation
+      }
+    }
+    ret %323
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B94: {
+    %327:i32 = convert %value
+    %328:bool = gte %value, -2147483648.0f
+    %329:i32 = select -2147483648i, %327, %328
+    %330:bool = lte %value, 2147483520.0f
+    %331:i32 = select 2147483647i, %329, %330
+    ret %331
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/1.wgsl.expected.ir.msl
index 7b7ac34..bc9c8ee 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/1.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/1.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,29 +8,33 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %data:ptr<private, array<i32, 10>, read_write> = var
   %temp:ptr<private, array<i32, 10>, read_write> = var
   %x_28:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%merge_i1_i1_i1_ = func(%f:ptr<function, i32, read_write>, %mid:ptr<function, i32, read_write>, %to:ptr<function, i32, read_write>):void -> %b2 {
-  %b2 = block {
+%merge_i1_i1_i1_ = func(%f:ptr<function, i32, read_write>, %mid:ptr<function, i32, read_write>, %to:ptr<function, i32, read_write>):void {
+  $B2: {
     %k:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %j:ptr<function, i32, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
-    %x_255:i32 = load %f
+    %15:i32 = load %f
+    %x_255:i32 = let %15
     store %k, %x_255
-    %x_256:i32 = load %f
+    %17:i32 = load %f
+    %x_256:i32 = let %17
     store %i, %x_256
-    %x_257:i32 = load %mid
-    %17:i32 = add %x_257, 1i
-    store %j, %17
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    %19:i32 = load %mid
+    %x_257:i32 = let %19
+    %21:i32 = add %x_257, 1i
+    store %j, %21
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %x_285:ptr<function, i32, read_write> = var
         %x_286:ptr<function, i32, read_write> = var
         %x_305:ptr<function, i32, read_write> = var
@@ -49,323 +53,360 @@
         %x_340_phi:ptr<function, i32, read_write> = var
         %x_353_phi:ptr<function, i32, read_write> = var
         %x_367_phi:ptr<function, i32, read_write> = var
-        %36:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
-        %x_261:f32 = load_vector_element %36, 0u
-        %38:bool = gte 1.0f, %x_261
-        if %38 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %40:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
+        %41:f32 = load_vector_element %40, 0u
+        %x_261:f32 = let %41
+        %43:bool = gte 1.0f, %x_261
+        if %43 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
-            continue %b4
+          $B6: {  # false
+            continue  # -> $B4
           }
         }
-        %x_266:i32 = load %i
-        %x_267:i32 = load %mid
-        %x_269:i32 = load %j
-        %x_270:i32 = load %to
-        %43:bool = lte %x_266, %x_267
-        %44:bool = lte %x_269, %x_270
-        %45:bool = and %43, %44
-        if %45 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
+        %44:i32 = load %i
+        %x_266:i32 = let %44
+        %46:i32 = load %mid
+        %x_267:i32 = let %46
+        %48:i32 = load %j
+        %x_269:i32 = let %48
+        %50:i32 = load %to
+        %x_270:i32 = let %50
+        %52:bool = lte %x_266, %x_267
+        %53:bool = lte %x_269, %x_270
+        %54:bool = and %52, %53
+        if %54 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
             exit_if  # if_2
           }
-          %b8 = block {  # false
+          $B8: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_274:i32 = load %i
-        %47:ptr<private, i32, read_write> = access %data, %x_274
-        %x_276:i32 = load %47
-        %x_277:i32 = load %j
-        %50:ptr<private, i32, read_write> = access %data, %x_277
-        %x_279:i32 = load %50
-        %x_280:bool = lt %x_276, %x_279
-        if %x_280 [t: %b9, f: %b10] {  # if_3
-          %b9 = block {  # true
-            %53:i32 = load %k
-            store %x_285, %53
-            %54:i32 = load %x_285
-            store %x_287_phi, %54
+        %55:i32 = load %i
+        %x_274:i32 = let %55
+        %57:ptr<private, i32, read_write> = access %data, %x_274
+        %58:i32 = load %57
+        %x_276:i32 = let %58
+        %60:i32 = load %j
+        %x_277:i32 = let %60
+        %62:ptr<private, i32, read_write> = access %data, %x_277
+        %63:i32 = load %62
+        %x_279:i32 = let %63
+        %65:bool = lt %x_276, %x_279
+        %x_280:bool = let %65
+        if %x_280 [t: $B9, f: $B10] {  # if_3
+          $B9: {  # true
+            %67:i32 = load %k
+            store %x_285, %67
+            %68:i32 = load %x_285
+            store %x_287_phi, %68
             exit_if  # if_3
           }
-          %b10 = block {  # false
+          $B10: {  # false
             store %x_286, 0i
-            %55:i32 = load %x_286
-            store %x_287_phi, %55
+            %69:i32 = load %x_286
+            store %x_287_phi, %69
             exit_if  # if_3
           }
         }
-        %x_287:i32 = load %x_287_phi
-        %x_288:i32 = add %x_287, 1i
-        if %x_280 [t: %b11] {  # if_4
-          %b11 = block {  # true
+        %70:i32 = load %x_287_phi
+        %x_287:i32 = let %70
+        %72:i32 = add %x_287, 1i
+        %x_288:i32 = let %72
+        if %x_280 [t: $B11] {  # if_4
+          $B11: {  # true
             store %k, %x_288
-            %58:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
-            %x_293:f32 = load_vector_element %58, 0u
-            %60:bool = lte 1.0f, %x_293
-            %61:bool = eq %60, false
-            if %61 [t: %b12, f: %b13] {  # if_5
-              %b12 = block {  # true
+            %74:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
+            %75:f32 = load_vector_element %74, 0u
+            %x_293:f32 = let %75
+            %77:bool = lte 1.0f, %x_293
+            %78:bool = eq %77, false
+            if %78 [t: $B12, f: $B13] {  # if_5
+              $B12: {  # true
                 exit_if  # if_5
               }
-              %b13 = block {  # false
-                continue %b4
+              $B13: {  # false
+                continue  # -> $B4
               }
             }
             exit_if  # if_4
           }
         }
-        %62:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
-        %x_297:f32 = load_vector_element %62, 1u
-        %64:bool = gte %x_297, 0.0f
-        if %64 [t: %b14, f: %b15] {  # if_6
-          %b14 = block {  # true
+        %79:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
+        %80:f32 = load_vector_element %79, 1u
+        %x_297:f32 = let %80
+        %82:bool = gte %x_297, 0.0f
+        if %82 [t: $B14, f: $B15] {  # if_6
+          $B14: {  # true
             exit_if  # if_6
           }
-          %b15 = block {  # false
-            continue %b4
+          $B15: {  # false
+            continue  # -> $B4
           }
         }
         %x_300:i32 = let 0i
-        if %x_280 [t: %b16, f: %b17] {  # if_7
-          %b16 = block {  # true
-            %66:i32 = load %i
-            store %x_305, %66
-            %67:i32 = load %x_305
-            store %x_307_phi, %67
+        if %x_280 [t: $B16, f: $B17] {  # if_7
+          $B16: {  # true
+            %84:i32 = load %i
+            store %x_305, %84
+            %85:i32 = load %x_305
+            store %x_307_phi, %85
             exit_if  # if_7
           }
-          %b17 = block {  # false
+          $B17: {  # false
             store %x_306, 0i
-            %68:i32 = load %x_306
-            store %x_307_phi, %68
+            %86:i32 = load %x_306
+            store %x_307_phi, %86
             exit_if  # if_7
           }
         }
-        %x_307:i32 = load %x_307_phi
-        %x_309:i32 = select %x_300, %x_307, %x_280
-        if %x_280 [t: %b18] {  # if_8
-          %b18 = block {  # true
-            %71:i32 = add %x_309, 1i
-            store %i, %71
+        %87:i32 = load %x_307_phi
+        %x_307:i32 = let %87
+        %89:i32 = select %x_300, %x_307, %x_280
+        %x_309:i32 = let %89
+        if %x_280 [t: $B18] {  # if_8
+          $B18: {  # true
+            %91:i32 = add %x_309, 1i
+            store %i, %91
             exit_if  # if_8
           }
         }
         %x_315:i32 = let 0i
-        if %x_280 [t: %b19, f: %b20] {  # if_9
-          %b19 = block {  # true
-            %73:ptr<private, i32, read_write> = access %data, %x_309
-            %74:i32 = load %73
-            store %x_320, %74
-            %75:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
-            %x_322:f32 = load_vector_element %75, 1u
-            %77:i32 = load %x_320
-            store %x_328_phi, %77
-            %78:bool = lte 0.0f, %x_322
-            %79:bool = eq %78, false
-            if %79 [t: %b21] {  # if_10
-              %b21 = block {  # true
-                continue %b4
+        if %x_280 [t: $B19, f: $B20] {  # if_9
+          $B19: {  # true
+            %93:ptr<private, i32, read_write> = access %data, %x_309
+            %94:i32 = load %93
+            store %x_320, %94
+            %95:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
+            %96:f32 = load_vector_element %95, 1u
+            %x_322:f32 = let %96
+            %98:i32 = load %x_320
+            store %x_328_phi, %98
+            %99:bool = lte 0.0f, %x_322
+            %100:bool = eq %99, false
+            if %100 [t: $B21] {  # if_10
+              $B21: {  # true
+                continue  # -> $B4
               }
             }
             exit_if  # if_9
           }
-          %b20 = block {  # false
+          $B20: {  # false
             store %x_324, 0i
-            %80:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
-            %x_326:f32 = load_vector_element %80, 1u
-            %82:i32 = load %x_324
-            store %x_328_phi, %82
-            %83:bool = lt %x_326, 0.0f
-            %84:bool = eq %83, false
-            if %84 [t: %b22, f: %b23] {  # if_11
-              %b22 = block {  # true
+            %101:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
+            %102:f32 = load_vector_element %101, 1u
+            %x_326:f32 = let %102
+            %104:i32 = load %x_324
+            store %x_328_phi, %104
+            %105:bool = lt %x_326, 0.0f
+            %106:bool = eq %105, false
+            if %106 [t: $B22, f: $B23] {  # if_11
+              $B22: {  # true
                 exit_if  # if_11
               }
-              %b23 = block {  # false
-                continue %b4
+              $B23: {  # false
+                continue  # -> $B4
               }
             }
             exit_if  # if_9
           }
         }
-        %x_328:i32 = load %x_328_phi
-        if %x_280 [t: %b24] {  # if_12
-          %b24 = block {  # true
-            %86:ptr<private, i32, read_write> = access %temp, %x_287
-            %87:i32 = select %x_315, %x_328, %x_280
-            store %86, %87
+        %107:i32 = load %x_328_phi
+        %x_328:i32 = let %107
+        if %x_280 [t: $B24] {  # if_12
+          $B24: {  # true
+            %109:ptr<private, i32, read_write> = access %temp, %x_287
+            %110:i32 = select %x_315, %x_328, %x_280
+            store %109, %110
             exit_if  # if_12
           }
         }
-        if %x_280 [t: %b25, f: %b26] {  # if_13
-          %b25 = block {  # true
+        if %x_280 [t: $B25, f: $B26] {  # if_13
+          $B25: {  # true
             store %x_339, 0i
-            %88:i32 = load %x_339
-            store %x_340_phi, %88
+            %111:i32 = load %x_339
+            store %x_340_phi, %111
             exit_if  # if_13
           }
-          %b26 = block {  # false
-            %89:i32 = load %k
-            store %x_338, %89
-            %90:i32 = load %x_338
-            store %x_340_phi, %90
+          $B26: {  # false
+            %112:i32 = load %k
+            store %x_338, %112
+            %113:i32 = load %x_338
+            store %x_340_phi, %113
             exit_if  # if_13
           }
         }
-        %x_340:i32 = load %x_340_phi
-        if %x_280 [t: %b27, f: %b28] {  # if_14
-          %b27 = block {  # true
+        %114:i32 = load %x_340_phi
+        %x_340:i32 = let %114
+        if %x_280 [t: $B27, f: $B28] {  # if_14
+          $B27: {  # true
             exit_if  # if_14
           }
-          %b28 = block {  # false
-            %92:i32 = add %x_340, 1i
-            store %k, %92
+          $B28: {  # false
+            %116:i32 = add %x_340, 1i
+            store %k, %116
             exit_if  # if_14
           }
         }
-        %93:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
-        %x_345:f32 = load_vector_element %93, 0u
-        %95:bool = lte 1.0f, %x_345
-        %96:bool = eq %95, false
-        if %96 [t: %b29, f: %b30] {  # if_15
-          %b29 = block {  # true
+        %117:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
+        %118:f32 = load_vector_element %117, 0u
+        %x_345:f32 = let %118
+        %120:bool = lte 1.0f, %x_345
+        %121:bool = eq %120, false
+        if %121 [t: $B29, f: $B30] {  # if_15
+          $B29: {  # true
             exit_if  # if_15
           }
-          %b30 = block {  # false
-            continue %b4
+          $B30: {  # false
+            continue  # -> $B4
           }
         }
-        if %x_280 [t: %b31, f: %b32] {  # if_16
-          %b31 = block {  # true
+        if %x_280 [t: $B31, f: $B32] {  # if_16
+          $B31: {  # true
             store %x_352, 0i
-            %97:i32 = load %x_352
-            store %x_353_phi, %97
+            %122:i32 = load %x_352
+            store %x_353_phi, %122
             exit_if  # if_16
           }
-          %b32 = block {  # false
-            %98:i32 = load %j
-            store %x_351, %98
-            %99:i32 = load %x_351
-            store %x_353_phi, %99
+          $B32: {  # false
+            %123:i32 = load %j
+            store %x_351, %123
+            %124:i32 = load %x_351
+            store %x_353_phi, %124
             exit_if  # if_16
           }
         }
-        %x_353:i32 = load %x_353_phi
+        %125:i32 = load %x_353_phi
+        %x_353:i32 = let %125
         %x_355:i32 = let 0i
-        %x_357:i32 = select %x_353, %x_355, %x_280
-        if %x_280 [t: %b33, f: %b34] {  # if_17
-          %b33 = block {  # true
+        %128:i32 = select %x_353, %x_355, %x_280
+        %x_357:i32 = let %128
+        if %x_280 [t: $B33, f: $B34] {  # if_17
+          $B33: {  # true
             exit_if  # if_17
           }
-          %b34 = block {  # false
-            %103:i32 = add %x_357, 1i
-            store %j, %103
+          $B34: {  # false
+            %130:i32 = add %x_357, 1i
+            store %j, %130
             exit_if  # if_17
           }
         }
-        if %x_280 [t: %b35, f: %b36] {  # if_18
-          %b35 = block {  # true
+        if %x_280 [t: $B35, f: $B36] {  # if_18
+          $B35: {  # true
             store %x_366, 0i
-            %104:i32 = load %x_366
-            store %x_367_phi, %104
+            %131:i32 = load %x_366
+            store %x_367_phi, %131
             exit_if  # if_18
           }
-          %b36 = block {  # false
-            %105:ptr<private, i32, read_write> = access %data, %x_357
-            %106:i32 = load %105
-            store %x_365, %106
-            %107:i32 = load %x_365
-            store %x_367_phi, %107
+          $B36: {  # false
+            %132:ptr<private, i32, read_write> = access %data, %x_357
+            %133:i32 = load %132
+            store %x_365, %133
+            %134:i32 = load %x_365
+            store %x_367_phi, %134
             exit_if  # if_18
           }
         }
-        %x_367:i32 = load %x_367_phi
-        if %x_280 [t: %b37, f: %b38] {  # if_19
-          %b37 = block {  # true
+        %135:i32 = load %x_367_phi
+        %x_367:i32 = let %135
+        if %x_280 [t: $B37, f: $B38] {  # if_19
+          $B37: {  # true
             exit_if  # if_19
           }
-          %b38 = block {  # false
-            %109:ptr<private, i32, read_write> = access %temp, %x_340
-            store %109, %x_367
+          $B38: {  # false
+            %137:ptr<private, i32, read_write> = access %temp, %x_340
+            store %137, %x_367
             exit_if  # if_19
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
-    loop [b: %b39, c: %b40] {  # loop_2
-      %b39 = block {  # body
-        %x_376:i32 = load %i
-        %x_378:i32 = load %i
-        %x_379:i32 = load %mid
-        %113:bool = lt %x_376, 10i
-        %114:bool = lte %x_378, %x_379
-        %115:bool = and %113, %114
-        if %115 [t: %b41, f: %b42] {  # if_20
-          %b41 = block {  # true
+    loop [b: $B39, c: $B40] {  # loop_2
+      $B39: {  # body
+        %138:i32 = load %i
+        %x_376:i32 = let %138
+        %140:i32 = load %i
+        %x_378:i32 = let %140
+        %142:i32 = load %mid
+        %x_379:i32 = let %142
+        %144:bool = lt %x_376, 10i
+        %145:bool = lte %x_378, %x_379
+        %146:bool = and %144, %145
+        if %146 [t: $B41, f: $B42] {  # if_20
+          $B41: {  # true
             exit_if  # if_20
           }
-          %b42 = block {  # false
+          $B42: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_383:i32 = load %k
-        %117:i32 = add %x_383, 1i
-        store %k, %117
-        %x_385:i32 = load %i
-        %119:i32 = add %x_385, 1i
-        store %i, %119
-        %120:ptr<private, i32, read_write> = access %data, %x_385
-        %x_388:i32 = load %120
-        %122:ptr<private, i32, read_write> = access %temp, %x_383
-        store %122, %x_388
-        continue %b40
+        %147:i32 = load %k
+        %x_383:i32 = let %147
+        %149:i32 = add %x_383, 1i
+        store %k, %149
+        %150:i32 = load %i
+        %x_385:i32 = let %150
+        %152:i32 = add %x_385, 1i
+        store %i, %152
+        %153:ptr<private, i32, read_write> = access %data, %x_385
+        %154:i32 = load %153
+        %x_388:i32 = let %154
+        %156:ptr<private, i32, read_write> = access %temp, %x_383
+        store %156, %x_388
+        continue  # -> $B40
       }
-      %b40 = block {  # continuing
-        next_iteration %b39
+      $B40: {  # continuing
+        next_iteration  # -> $B39
       }
     }
-    %x_390:i32 = load %f
+    %157:i32 = load %f
+    %x_390:i32 = let %157
     store %i_1, %x_390
-    loop [b: %b43, c: %b44] {  # loop_3
-      %b43 = block {  # body
-        %x_395:i32 = load %i_1
-        %x_396:i32 = load %to
-        %126:bool = lte %x_395, %x_396
-        if %126 [t: %b45, f: %b46] {  # if_21
-          %b45 = block {  # true
+    loop [b: $B43, c: $B44] {  # loop_3
+      $B43: {  # body
+        %159:i32 = load %i_1
+        %x_395:i32 = let %159
+        %161:i32 = load %to
+        %x_396:i32 = let %161
+        %163:bool = lte %x_395, %x_396
+        if %163 [t: $B45, f: $B46] {  # if_21
+          $B45: {  # true
             exit_if  # if_21
           }
-          %b46 = block {  # false
+          $B46: {  # false
             exit_loop  # loop_3
           }
         }
-        %x_399:i32 = load %i_1
-        %x_400:i32 = load %i_1
-        %129:ptr<private, i32, read_write> = access %temp, %x_400
-        %x_402:i32 = load %129
-        %131:ptr<private, i32, read_write> = access %data, %x_399
-        store %131, %x_402
-        continue %b44
+        %164:i32 = load %i_1
+        %x_399:i32 = let %164
+        %166:i32 = load %i_1
+        %x_400:i32 = let %166
+        %168:ptr<private, i32, read_write> = access %temp, %x_400
+        %169:i32 = load %168
+        %x_402:i32 = let %169
+        %171:ptr<private, i32, read_write> = access %data, %x_399
+        store %171, %x_402
+        continue  # -> $B44
       }
-      %b44 = block {  # continuing
-        %x_404:i32 = load %i_1
-        %133:i32 = add %x_404, 1i
-        store %i_1, %133
-        next_iteration %b43
+      $B44: {  # continuing
+        %172:i32 = load %i_1
+        %x_404:i32 = let %172
+        %174:i32 = add %x_404, 1i
+        store %i_1, %174
+        next_iteration  # -> $B43
       }
     }
     ret
   }
 }
-%mergeSort_ = func():void -> %b47 {
-  %b47 = block {
+%mergeSort_ = func():void {
+  $B47: {
     %low:ptr<function, i32, read_write> = var
     %high:ptr<function, i32, read_write> = var
     %m:ptr<function, i32, read_write> = var
@@ -379,319 +420,372 @@
     store %low, 0i
     store %high, 9i
     store %m, 1i
-    loop [b: %b48, c: %b49] {  # loop_4
-      %b48 = block {  # body
-        %x_411:i32 = load %m
-        %x_412:i32 = load %high
-        %147:bool = lte %x_411, %x_412
-        if %147 [t: %b50, f: %b51] {  # if_22
-          %b50 = block {  # true
+    loop [b: $B48, c: $B49] {  # loop_4
+      $B48: {  # body
+        %186:i32 = load %m
+        %x_411:i32 = let %186
+        %188:i32 = load %high
+        %x_412:i32 = let %188
+        %190:bool = lte %x_411, %x_412
+        if %190 [t: $B50, f: $B51] {  # if_22
+          $B50: {  # true
             exit_if  # if_22
           }
-          %b51 = block {  # false
+          $B51: {  # false
             exit_loop  # loop_4
           }
         }
-        %x_415:i32 = load %low
+        %191:i32 = load %low
+        %x_415:i32 = let %191
         store %i_2, %x_415
-        loop [b: %b52, c: %b53] {  # loop_5
-          %b52 = block {  # body
-            %x_420:i32 = load %i_2
-            %x_421:i32 = load %high
-            %151:bool = lt %x_420, %x_421
-            if %151 [t: %b54, f: %b55] {  # if_23
-              %b54 = block {  # true
+        loop [b: $B52, c: $B53] {  # loop_5
+          $B52: {  # body
+            %193:i32 = load %i_2
+            %x_420:i32 = let %193
+            %195:i32 = load %high
+            %x_421:i32 = let %195
+            %197:bool = lt %x_420, %x_421
+            if %197 [t: $B54, f: $B55] {  # if_23
+              $B54: {  # true
                 exit_if  # if_23
               }
-              %b55 = block {  # false
+              $B55: {  # false
                 exit_loop  # loop_5
               }
             }
-            %x_424:i32 = load %i_2
+            %198:i32 = load %i_2
+            %x_424:i32 = let %198
             store %f_1, %x_424
-            %x_425:i32 = load %i_2
-            %x_426:i32 = load %m
-            %155:i32 = add %x_425, %x_426
-            %156:i32 = sub %155, 1i
-            store %mid_1, %156
-            %x_429:i32 = load %i_2
-            %x_430:i32 = load %m
-            %x_434:i32 = load %high
-            %160:i32 = mul 2i, %x_430
-            %161:i32 = add %x_429, %160
-            %162:i32 = sub %161, 1i
-            %163:i32 = min %162, %x_434
-            store %to_1, %163
-            %x_436:i32 = load %f_1
+            %200:i32 = load %i_2
+            %x_425:i32 = let %200
+            %202:i32 = load %m
+            %x_426:i32 = let %202
+            %204:i32 = add %x_425, %x_426
+            %205:i32 = sub %204, 1i
+            store %mid_1, %205
+            %206:i32 = load %i_2
+            %x_429:i32 = let %206
+            %208:i32 = load %m
+            %x_430:i32 = let %208
+            %210:i32 = load %high
+            %x_434:i32 = let %210
+            %212:i32 = mul 2i, %x_430
+            %213:i32 = add %x_429, %212
+            %214:i32 = sub %213, 1i
+            %215:i32 = min %214, %x_434
+            store %to_1, %215
+            %216:i32 = load %f_1
+            %x_436:i32 = let %216
             store %param, %x_436
-            %x_437:i32 = load %mid_1
+            %218:i32 = load %mid_1
+            %x_437:i32 = let %218
             store %param_1, %x_437
-            %x_438:i32 = load %to_1
+            %220:i32 = load %to_1
+            %x_438:i32 = let %220
             store %param_2, %x_438
-            %167:void = call %merge_i1_i1_i1_, %param, %param_1, %param_2
-            continue %b53
+            %222:void = call %merge_i1_i1_i1_, %param, %param_1, %param_2
+            continue  # -> $B53
           }
-          %b53 = block {  # continuing
-            %x_440:i32 = load %m
-            %x_442:i32 = load %i_2
-            %170:i32 = mul 2i, %x_440
-            %171:i32 = add %x_442, %170
-            store %i_2, %171
-            next_iteration %b52
+          $B53: {  # continuing
+            %223:i32 = load %m
+            %x_440:i32 = let %223
+            %225:i32 = load %i_2
+            %x_442:i32 = let %225
+            %227:i32 = mul 2i, %x_440
+            %228:i32 = add %x_442, %227
+            store %i_2, %228
+            next_iteration  # -> $B52
           }
         }
-        continue %b49
+        continue  # -> $B49
       }
-      %b49 = block {  # continuing
-        %x_444:i32 = load %m
-        %173:i32 = mul 2i, %x_444
-        store %m, %173
-        next_iteration %b48
+      $B49: {  # continuing
+        %229:i32 = load %m
+        %x_444:i32 = let %229
+        %231:i32 = mul 2i, %x_444
+        store %m, %231
+        next_iteration  # -> $B48
       }
     }
     ret
   }
 }
-%main_1 = func():void -> %b56 {
-  %b56 = block {
+%main_1 = func():void {
+  $B56: {
     %i_3:ptr<function, i32, read_write> = var
     %j_1:ptr<function, i32, read_write> = var
     %grey:ptr<function, f32, read_write> = var
-    %178:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
-    %x_88:f32 = load_vector_element %178, 0u
-    %180:i32 = convert %x_88
-    store %i_3, %180
-    loop [b: %b57, c: %b58] {  # loop_6
-      %b57 = block {  # body
-        %x_94:i32 = load %i_3
-        switch %x_94 [c: (9i, %b59), c: (8i, %b60), c: (7i, %b61), c: (6i, %b62), c: (5i, %b63), c: (4i, %b64), c: (3i, %b65), c: (2i, %b66), c: (1i, %b67), c: (0i, %b68), c: (default, %b69)] {  # switch_1
-          %b59 = block {  # case
-            %x_124:i32 = load %i_3
-            %183:ptr<private, i32, read_write> = access %data, %x_124
-            store %183, -5i
+    %236:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
+    %237:f32 = load_vector_element %236, 0u
+    %x_88:f32 = let %237
+    %239:i32 = call %tint_f32_to_i32, %x_88
+    store %i_3, %239
+    loop [b: $B57, c: $B58] {  # loop_6
+      $B57: {  # body
+        %241:i32 = load %i_3
+        %x_94:i32 = let %241
+        switch %x_94 [c: (9i, $B59), c: (8i, $B60), c: (7i, $B61), c: (6i, $B62), c: (5i, $B63), c: (4i, $B64), c: (3i, $B65), c: (2i, $B66), c: (1i, $B67), c: (0i, $B68), c: (default, $B69)] {  # switch_1
+          $B59: {  # case
+            %243:i32 = load %i_3
+            %x_124:i32 = let %243
+            %245:ptr<private, i32, read_write> = access %data, %x_124
+            store %245, -5i
             exit_switch  # switch_1
           }
-          %b60 = block {  # case
-            %x_122:i32 = load %i_3
-            %185:ptr<private, i32, read_write> = access %data, %x_122
-            store %185, -4i
+          $B60: {  # case
+            %246:i32 = load %i_3
+            %x_122:i32 = let %246
+            %248:ptr<private, i32, read_write> = access %data, %x_122
+            store %248, -4i
             exit_switch  # switch_1
           }
-          %b61 = block {  # case
-            %x_120:i32 = load %i_3
-            %187:ptr<private, i32, read_write> = access %data, %x_120
-            store %187, -3i
+          $B61: {  # case
+            %249:i32 = load %i_3
+            %x_120:i32 = let %249
+            %251:ptr<private, i32, read_write> = access %data, %x_120
+            store %251, -3i
             exit_switch  # switch_1
           }
-          %b62 = block {  # case
-            %x_118:i32 = load %i_3
-            %189:ptr<private, i32, read_write> = access %data, %x_118
-            store %189, -2i
+          $B62: {  # case
+            %252:i32 = load %i_3
+            %x_118:i32 = let %252
+            %254:ptr<private, i32, read_write> = access %data, %x_118
+            store %254, -2i
             exit_switch  # switch_1
           }
-          %b63 = block {  # case
-            %x_116:i32 = load %i_3
-            %191:ptr<private, i32, read_write> = access %data, %x_116
-            store %191, -1i
+          $B63: {  # case
+            %255:i32 = load %i_3
+            %x_116:i32 = let %255
+            %257:ptr<private, i32, read_write> = access %data, %x_116
+            store %257, -1i
             exit_switch  # switch_1
           }
-          %b64 = block {  # case
-            %x_114:i32 = load %i_3
-            %193:ptr<private, i32, read_write> = access %data, %x_114
-            store %193, 0i
+          $B64: {  # case
+            %258:i32 = load %i_3
+            %x_114:i32 = let %258
+            %260:ptr<private, i32, read_write> = access %data, %x_114
+            store %260, 0i
             exit_switch  # switch_1
           }
-          %b65 = block {  # case
-            %x_112:i32 = load %i_3
-            %195:ptr<private, i32, read_write> = access %data, %x_112
-            store %195, 1i
+          $B65: {  # case
+            %261:i32 = load %i_3
+            %x_112:i32 = let %261
+            %263:ptr<private, i32, read_write> = access %data, %x_112
+            store %263, 1i
             exit_switch  # switch_1
           }
-          %b66 = block {  # case
-            %x_110:i32 = load %i_3
-            %197:ptr<private, i32, read_write> = access %data, %x_110
-            store %197, 2i
+          $B66: {  # case
+            %264:i32 = load %i_3
+            %x_110:i32 = let %264
+            %266:ptr<private, i32, read_write> = access %data, %x_110
+            store %266, 2i
             exit_switch  # switch_1
           }
-          %b67 = block {  # case
-            %x_108:i32 = load %i_3
-            %199:ptr<private, i32, read_write> = access %data, %x_108
-            store %199, 3i
+          $B67: {  # case
+            %267:i32 = load %i_3
+            %x_108:i32 = let %267
+            %269:ptr<private, i32, read_write> = access %data, %x_108
+            store %269, 3i
             exit_switch  # switch_1
           }
-          %b68 = block {  # case
-            %x_106:i32 = load %i_3
-            %201:ptr<private, i32, read_write> = access %data, %x_106
-            store %201, 4i
+          $B68: {  # case
+            %270:i32 = load %i_3
+            %x_106:i32 = let %270
+            %272:ptr<private, i32, read_write> = access %data, %x_106
+            store %272, 4i
             exit_switch  # switch_1
           }
-          %b69 = block {  # case
+          $B69: {  # case
             exit_switch  # switch_1
           }
         }
-        %x_126:i32 = load %i_3
-        %203:i32 = add %x_126, 1i
-        store %i_3, %203
-        continue %b58
+        %273:i32 = load %i_3
+        %x_126:i32 = let %273
+        %275:i32 = add %x_126, 1i
+        store %i_3, %275
+        continue  # -> $B58
       }
-      %b58 = block {  # continuing
-        %x_128:i32 = load %i_3
-        %205:bool = lt %x_128, 10i
-        %206:bool = eq %205, false
-        break_if %206 %b57
+      $B58: {  # continuing
+        %276:i32 = load %i_3
+        %x_128:i32 = let %276
+        %278:bool = lt %x_128, 10i
+        %279:bool = eq %278, false
+        break_if %279  # -> [t: exit_loop loop_6, f: $B57]
       }
     }
     store %j_1, 0i
-    loop [b: %b70, c: %b71] {  # loop_7
-      %b70 = block {  # body
-        %x_134:i32 = load %j_1
-        %208:bool = lt %x_134, 10i
-        if %208 [t: %b72, f: %b73] {  # if_24
-          %b72 = block {  # true
+    loop [b: $B70, c: $B71] {  # loop_7
+      $B70: {  # body
+        %280:i32 = load %j_1
+        %x_134:i32 = let %280
+        %282:bool = lt %x_134, 10i
+        if %282 [t: $B72, f: $B73] {  # if_24
+          $B72: {  # true
             exit_if  # if_24
           }
-          %b73 = block {  # false
+          $B73: {  # false
             exit_loop  # loop_7
           }
         }
-        %x_137:i32 = load %j_1
-        %x_138:i32 = load %j_1
-        %211:ptr<private, i32, read_write> = access %data, %x_138
-        %x_140:i32 = load %211
-        %213:ptr<private, i32, read_write> = access %temp, %x_137
-        store %213, %x_140
-        continue %b71
+        %283:i32 = load %j_1
+        %x_137:i32 = let %283
+        %285:i32 = load %j_1
+        %x_138:i32 = let %285
+        %287:ptr<private, i32, read_write> = access %data, %x_138
+        %288:i32 = load %287
+        %x_140:i32 = let %288
+        %290:ptr<private, i32, read_write> = access %temp, %x_137
+        store %290, %x_140
+        continue  # -> $B71
       }
-      %b71 = block {  # continuing
-        %x_142:i32 = load %j_1
-        %215:i32 = add %x_142, 1i
-        store %j_1, %215
-        next_iteration %b70
+      $B71: {  # continuing
+        %291:i32 = load %j_1
+        %x_142:i32 = let %291
+        %293:i32 = add %x_142, 1i
+        store %j_1, %293
+        next_iteration  # -> $B70
       }
     }
-    %216:void = call %mergeSort_
-    %x_146:f32 = load_vector_element %gl_FragCoord, 1u
-    %218:i32 = convert %x_146
-    %219:bool = lt %218, 30i
-    if %219 [t: %b74, f: %b75] {  # if_25
-      %b74 = block {  # true
-        %220:ptr<private, i32, read_write> = access %data, 0i
-        %x_153:i32 = load %220
-        %222:f32 = convert %x_153
-        %223:f32 = div %222, 10.0f
-        %224:f32 = add 0.5f, %223
-        store %grey, %224
+    %294:void = call %mergeSort_
+    %295:f32 = load_vector_element %gl_FragCoord, 1u
+    %x_146:f32 = let %295
+    %297:i32 = call %tint_f32_to_i32, %x_146
+    %298:bool = lt %297, 30i
+    if %298 [t: $B74, f: $B75] {  # if_25
+      $B74: {  # true
+        %299:ptr<private, i32, read_write> = access %data, 0i
+        %300:i32 = load %299
+        %x_153:i32 = let %300
+        %302:f32 = convert %x_153
+        %303:f32 = div %302, 10.0f
+        %304:f32 = add 0.5f, %303
+        store %grey, %304
         exit_if  # if_25
       }
-      %b75 = block {  # false
-        %x_158:f32 = load_vector_element %gl_FragCoord, 1u
-        %226:i32 = convert %x_158
-        %227:bool = lt %226, 60i
-        if %227 [t: %b76, f: %b77] {  # if_26
-          %b76 = block {  # true
-            %228:ptr<private, i32, read_write> = access %data, 1i
-            %x_165:i32 = load %228
-            %230:f32 = convert %x_165
-            %231:f32 = div %230, 10.0f
-            %232:f32 = add 0.5f, %231
-            store %grey, %232
+      $B75: {  # false
+        %305:f32 = load_vector_element %gl_FragCoord, 1u
+        %x_158:f32 = let %305
+        %307:i32 = call %tint_f32_to_i32, %x_158
+        %308:bool = lt %307, 60i
+        if %308 [t: $B76, f: $B77] {  # if_26
+          $B76: {  # true
+            %309:ptr<private, i32, read_write> = access %data, 1i
+            %310:i32 = load %309
+            %x_165:i32 = let %310
+            %312:f32 = convert %x_165
+            %313:f32 = div %312, 10.0f
+            %314:f32 = add 0.5f, %313
+            store %grey, %314
             exit_if  # if_26
           }
-          %b77 = block {  # false
-            %x_170:f32 = load_vector_element %gl_FragCoord, 1u
-            %234:i32 = convert %x_170
-            %235:bool = lt %234, 90i
-            if %235 [t: %b78, f: %b79] {  # if_27
-              %b78 = block {  # true
-                %236:ptr<private, i32, read_write> = access %data, 2i
-                %x_177:i32 = load %236
-                %238:f32 = convert %x_177
-                %239:f32 = div %238, 10.0f
-                %240:f32 = add 0.5f, %239
-                store %grey, %240
+          $B77: {  # false
+            %315:f32 = load_vector_element %gl_FragCoord, 1u
+            %x_170:f32 = let %315
+            %317:i32 = call %tint_f32_to_i32, %x_170
+            %318:bool = lt %317, 90i
+            if %318 [t: $B78, f: $B79] {  # if_27
+              $B78: {  # true
+                %319:ptr<private, i32, read_write> = access %data, 2i
+                %320:i32 = load %319
+                %x_177:i32 = let %320
+                %322:f32 = convert %x_177
+                %323:f32 = div %322, 10.0f
+                %324:f32 = add 0.5f, %323
+                store %grey, %324
                 exit_if  # if_27
               }
-              %b79 = block {  # false
-                %x_182:f32 = load_vector_element %gl_FragCoord, 1u
-                %242:i32 = convert %x_182
-                %243:bool = lt %242, 120i
-                if %243 [t: %b80, f: %b81] {  # if_28
-                  %b80 = block {  # true
-                    %244:ptr<private, i32, read_write> = access %data, 3i
-                    %x_189:i32 = load %244
-                    %246:f32 = convert %x_189
-                    %247:f32 = div %246, 10.0f
-                    %248:f32 = add 0.5f, %247
-                    store %grey, %248
+              $B79: {  # false
+                %325:f32 = load_vector_element %gl_FragCoord, 1u
+                %x_182:f32 = let %325
+                %327:i32 = call %tint_f32_to_i32, %x_182
+                %328:bool = lt %327, 120i
+                if %328 [t: $B80, f: $B81] {  # if_28
+                  $B80: {  # true
+                    %329:ptr<private, i32, read_write> = access %data, 3i
+                    %330:i32 = load %329
+                    %x_189:i32 = let %330
+                    %332:f32 = convert %x_189
+                    %333:f32 = div %332, 10.0f
+                    %334:f32 = add 0.5f, %333
+                    store %grey, %334
                     exit_if  # if_28
                   }
-                  %b81 = block {  # false
-                    %x_194:f32 = load_vector_element %gl_FragCoord, 1u
-                    %250:i32 = convert %x_194
-                    %251:bool = lt %250, 150i
-                    if %251 [t: %b82, f: %b83] {  # if_29
-                      %b82 = block {  # true
-                        discard
+                  $B81: {  # false
+                    %335:f32 = load_vector_element %gl_FragCoord, 1u
+                    %x_194:f32 = let %335
+                    %337:i32 = call %tint_f32_to_i32, %x_194
+                    %338:bool = lt %337, 150i
+                    if %338 [t: $B82, f: $B83] {  # if_29
+                      $B82: {  # true
+                        store %continue_execution, false
                         exit_if  # if_29
                       }
-                      %b83 = block {  # false
-                        %x_201:f32 = load_vector_element %gl_FragCoord, 1u
-                        %253:i32 = convert %x_201
-                        %254:bool = lt %253, 180i
-                        if %254 [t: %b84, f: %b85] {  # if_30
-                          %b84 = block {  # true
-                            %255:ptr<private, i32, read_write> = access %data, 5i
-                            %x_208:i32 = load %255
-                            %257:f32 = convert %x_208
-                            %258:f32 = div %257, 10.0f
-                            %259:f32 = add 0.5f, %258
-                            store %grey, %259
+                      $B83: {  # false
+                        %339:f32 = load_vector_element %gl_FragCoord, 1u
+                        %x_201:f32 = let %339
+                        %341:i32 = call %tint_f32_to_i32, %x_201
+                        %342:bool = lt %341, 180i
+                        if %342 [t: $B84, f: $B85] {  # if_30
+                          $B84: {  # true
+                            %343:ptr<private, i32, read_write> = access %data, 5i
+                            %344:i32 = load %343
+                            %x_208:i32 = let %344
+                            %346:f32 = convert %x_208
+                            %347:f32 = div %346, 10.0f
+                            %348:f32 = add 0.5f, %347
+                            store %grey, %348
                             exit_if  # if_30
                           }
-                          %b85 = block {  # false
-                            %x_213:f32 = load_vector_element %gl_FragCoord, 1u
-                            %261:i32 = convert %x_213
-                            %262:bool = lt %261, 210i
-                            if %262 [t: %b86, f: %b87] {  # if_31
-                              %b86 = block {  # true
-                                %263:ptr<private, i32, read_write> = access %data, 6i
-                                %x_220:i32 = load %263
-                                %265:f32 = convert %x_220
-                                %266:f32 = div %265, 10.0f
-                                %267:f32 = add 0.5f, %266
-                                store %grey, %267
+                          $B85: {  # false
+                            %349:f32 = load_vector_element %gl_FragCoord, 1u
+                            %x_213:f32 = let %349
+                            %351:i32 = call %tint_f32_to_i32, %x_213
+                            %352:bool = lt %351, 210i
+                            if %352 [t: $B86, f: $B87] {  # if_31
+                              $B86: {  # true
+                                %353:ptr<private, i32, read_write> = access %data, 6i
+                                %354:i32 = load %353
+                                %x_220:i32 = let %354
+                                %356:f32 = convert %x_220
+                                %357:f32 = div %356, 10.0f
+                                %358:f32 = add 0.5f, %357
+                                store %grey, %358
                                 exit_if  # if_31
                               }
-                              %b87 = block {  # false
-                                %x_225:f32 = load_vector_element %gl_FragCoord, 1u
-                                %269:i32 = convert %x_225
-                                %270:bool = lt %269, 240i
-                                if %270 [t: %b88, f: %b89] {  # if_32
-                                  %b88 = block {  # true
-                                    %271:ptr<private, i32, read_write> = access %data, 7i
-                                    %x_232:i32 = load %271
-                                    %273:f32 = convert %x_232
-                                    %274:f32 = div %273, 10.0f
-                                    %275:f32 = add 0.5f, %274
-                                    store %grey, %275
+                              $B87: {  # false
+                                %359:f32 = load_vector_element %gl_FragCoord, 1u
+                                %x_225:f32 = let %359
+                                %361:i32 = call %tint_f32_to_i32, %x_225
+                                %362:bool = lt %361, 240i
+                                if %362 [t: $B88, f: $B89] {  # if_32
+                                  $B88: {  # true
+                                    %363:ptr<private, i32, read_write> = access %data, 7i
+                                    %364:i32 = load %363
+                                    %x_232:i32 = let %364
+                                    %366:f32 = convert %x_232
+                                    %367:f32 = div %366, 10.0f
+                                    %368:f32 = add 0.5f, %367
+                                    store %grey, %368
                                     exit_if  # if_32
                                   }
-                                  %b89 = block {  # false
-                                    %x_237:f32 = load_vector_element %gl_FragCoord, 1u
-                                    %277:i32 = convert %x_237
-                                    %278:bool = lt %277, 270i
-                                    if %278 [t: %b90, f: %b91] {  # if_33
-                                      %b90 = block {  # true
-                                        %279:ptr<private, i32, read_write> = access %data, 8i
-                                        %x_244:i32 = load %279
-                                        %281:f32 = convert %x_244
-                                        %282:f32 = div %281, 10.0f
-                                        %283:f32 = add 0.5f, %282
-                                        store %grey, %283
+                                  $B89: {  # false
+                                    %369:f32 = load_vector_element %gl_FragCoord, 1u
+                                    %x_237:f32 = let %369
+                                    %371:i32 = call %tint_f32_to_i32, %x_237
+                                    %372:bool = lt %371, 270i
+                                    if %372 [t: $B90, f: $B91] {  # if_33
+                                      $B90: {  # true
+                                        %373:ptr<private, i32, read_write> = access %data, 8i
+                                        %374:i32 = load %373
+                                        %x_244:i32 = let %374
+                                        %376:f32 = convert %x_244
+                                        %377:f32 = div %376, 10.0f
+                                        %378:f32 = add 0.5f, %377
+                                        store %grey, %378
                                         exit_if  # if_33
                                       }
-                                      %b91 = block {  # false
-                                        discard
+                                      $B91: {  # false
+                                        store %continue_execution, false
                                         exit_if  # if_33
                                       }
                                     }
@@ -719,23 +813,42 @@
         exit_if  # if_25
       }
     }
-    %x_248:f32 = load %grey
-    %x_249:vec3<f32> = construct %x_248, %x_248, %x_248
-    %286:f32 = access %x_249, 0u
-    %287:f32 = access %x_249, 1u
-    %288:f32 = access %x_249, 2u
-    %289:vec4<f32> = construct %286, %287, %288, 1.0f
-    store %x_GLF_color, %289
+    %379:f32 = load %grey
+    %x_248:f32 = let %379
+    %381:vec3<f32> = construct %x_248, %x_248, %x_248
+    %x_249:vec3<f32> = let %381
+    %383:f32 = access %x_249, 0u
+    %384:f32 = access %x_249, 1u
+    %385:f32 = access %x_249, 2u
+    %386:vec4<f32> = construct %383, %384, %385, 1.0f
+    store %x_GLF_color, %386
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b92 {
-  %b92 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B92: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %292:void = call %main_1
-    %293:vec4<f32> = load %x_GLF_color
-    %294:main_out = construct %293
-    ret %294
+    %389:void = call %main_1
+    %390:vec4<f32> = load %x_GLF_color
+    %391:main_out = construct %390
+    %392:bool = load %continue_execution
+    %393:bool = eq %392, false
+    if %393 [t: $B93] {  # if_34
+      $B93: {  # true
+        terminate_invocation
+      }
+    }
+    ret %391
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B94: {
+    %395:i32 = convert %value
+    %396:bool = gte %value, -2147483648.0f
+    %397:i32 = select -2147483648i, %395, %396
+    %398:bool = lte %value, 2147483520.0f
+    %399:i32 = select 2147483647i, %397, %398
+    ret %399
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/2-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/2-opt.spvasm.expected.ir.msl
index deefa9c..043faac 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/2-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/2-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,29 +8,30 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %data:ptr<private, array<i32, 10>, read_write> = var
   %temp:ptr<private, array<i32, 10>, read_write> = var
   %x_28:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%merge_i1_i1_i1_ = func(%f:ptr<function, i32, read_write>, %mid:ptr<function, i32, read_write>, %to:ptr<function, i32, read_write>):void -> %b2 {
-  %b2 = block {
+%merge_i1_i1_i1_ = func(%f:ptr<function, i32, read_write>, %mid:ptr<function, i32, read_write>, %to:ptr<function, i32, read_write>):void {
+  $B2: {
     %k:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %j:ptr<function, i32, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
-    %14:i32 = load %f
-    store %k, %14
     %15:i32 = load %f
-    store %i, %15
-    %16:i32 = load %mid
-    %17:i32 = add %16, 1i
-    store %j, %17
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    store %k, %15
+    %16:i32 = load %f
+    store %i, %16
+    %17:i32 = load %mid
+    %18:i32 = add %17, 1i
+    store %j, %18
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %x_283:ptr<function, i32, read_write> = var
         %x_284:ptr<function, i32, read_write> = var
         %x_285:ptr<function, i32, read_write> = var
@@ -49,323 +50,333 @@
         %x_364:ptr<function, i32, read_write> = var
         %x_363:ptr<function, i32, read_write> = var
         %x_365:ptr<function, i32, read_write> = var
-        if true [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if true [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
-            continue %b4
+          $B6: {  # false
+            continue  # -> $B4
           }
         }
-        %36:i32 = load %i
-        %37:i32 = load %mid
-        %38:bool = lte %36, %37
-        %39:i32 = load %j
-        %40:i32 = load %to
-        %41:bool = lte %39, %40
-        %42:bool = and %38, %41
-        if %42 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
+        %37:i32 = load %i
+        %38:i32 = load %mid
+        %39:bool = lte %37, %38
+        %40:i32 = load %j
+        %41:i32 = load %to
+        %42:bool = lte %40, %41
+        %43:bool = and %39, %42
+        if %43 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
             exit_if  # if_2
           }
-          %b8 = block {  # false
+          $B8: {  # false
             exit_loop  # loop_1
           }
         }
-        %43:i32 = load %i
-        %44:ptr<private, i32, read_write> = access %data, %43
-        %45:i32 = load %44
-        %46:i32 = load %j
-        %47:ptr<private, i32, read_write> = access %data, %46
-        %48:i32 = load %47
-        %x_278:bool = lt %45, %48
-        if %x_278 [t: %b9, f: %b10] {  # if_3
-          %b9 = block {  # true
-            %50:i32 = load %k
-            store %x_283, %50
-            %51:i32 = load %x_283
-            store %x_285, %51
+        %44:i32 = load %i
+        %45:ptr<private, i32, read_write> = access %data, %44
+        %46:i32 = load %45
+        %47:i32 = load %j
+        %48:ptr<private, i32, read_write> = access %data, %47
+        %49:i32 = load %48
+        %50:bool = lt %46, %49
+        %x_278:bool = let %50
+        if %x_278 [t: $B9, f: $B10] {  # if_3
+          $B9: {  # true
+            %52:i32 = load %k
+            store %x_283, %52
+            %53:i32 = load %x_283
+            store %x_285, %53
             exit_if  # if_3
           }
-          %b10 = block {  # false
+          $B10: {  # false
             store %x_284, 0i
-            %52:i32 = load %x_284
-            store %x_285, %52
+            %54:i32 = load %x_284
+            store %x_285, %54
             exit_if  # if_3
           }
         }
-        %53:i32 = load %x_285
-        %x_286:i32 = add %53, 1i
-        if %x_278 [t: %b11] {  # if_4
-          %b11 = block {  # true
+        %55:i32 = load %x_285
+        %56:i32 = add %55, 1i
+        %x_286:i32 = let %56
+        if %x_278 [t: $B11] {  # if_4
+          $B11: {  # true
             store %k, %x_286
-            %55:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
-            %56:f32 = load_vector_element %55, 0u
-            %57:bool = lte 1.0f, %56
-            %58:bool = eq %57, false
-            if %58 [t: %b12, f: %b13] {  # if_5
-              %b12 = block {  # true
+            %58:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
+            %59:f32 = load_vector_element %58, 0u
+            %60:bool = lte 1.0f, %59
+            %61:bool = eq %60, false
+            if %61 [t: $B12, f: $B13] {  # if_5
+              $B12: {  # true
                 exit_if  # if_5
               }
-              %b13 = block {  # false
-                continue %b4
+              $B13: {  # false
+                continue  # -> $B4
               }
             }
             exit_if  # if_4
           }
         }
-        %59:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
-        %60:f32 = load_vector_element %59, 1u
-        %61:bool = gte %60, 0.0f
-        if %61 [t: %b14, f: %b15] {  # if_6
-          %b14 = block {  # true
+        %62:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
+        %63:f32 = load_vector_element %62, 1u
+        %64:bool = gte %63, 0.0f
+        if %64 [t: $B14, f: $B15] {  # if_6
+          $B14: {  # true
             exit_if  # if_6
           }
-          %b15 = block {  # false
-            continue %b4
+          $B15: {  # false
+            continue  # -> $B4
           }
         }
         %x_298:i32 = let 0i
-        if %x_278 [t: %b16, f: %b17] {  # if_7
-          %b16 = block {  # true
-            %63:i32 = load %i
-            store %x_303, %63
-            %64:i32 = load %x_303
-            store %x_305, %64
+        if %x_278 [t: $B16, f: $B17] {  # if_7
+          $B16: {  # true
+            %66:i32 = load %i
+            store %x_303, %66
+            %67:i32 = load %x_303
+            store %x_305, %67
             exit_if  # if_7
           }
-          %b17 = block {  # false
+          $B17: {  # false
             store %x_304, 0i
-            %65:i32 = load %x_304
-            store %x_305, %65
+            %68:i32 = load %x_304
+            store %x_305, %68
             exit_if  # if_7
           }
         }
-        %66:i32 = load %x_305
-        %x_307:i32 = select %x_298, %66, %x_278
-        if %x_278 [t: %b18] {  # if_8
-          %b18 = block {  # true
-            %68:i32 = add %x_307, 1i
-            store %i, %68
+        %69:i32 = load %x_305
+        %70:i32 = select %x_298, %69, %x_278
+        %x_307:i32 = let %70
+        if %x_278 [t: $B18] {  # if_8
+          $B18: {  # true
+            %72:i32 = add %x_307, 1i
+            store %i, %72
             exit_if  # if_8
           }
         }
         %x_313:i32 = let 0i
-        if %x_278 [t: %b19, f: %b20] {  # if_9
-          %b19 = block {  # true
-            %70:ptr<private, i32, read_write> = access %data, %x_307
-            %71:i32 = load %70
-            store %x_318, %71
-            %72:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
-            %x_320:f32 = load_vector_element %72, 1u
-            %74:i32 = load %x_318
-            store %x_326, %74
-            %75:bool = lte 0.0f, %x_320
-            %76:bool = eq %75, false
-            if %76 [t: %b21] {  # if_10
-              %b21 = block {  # true
-                continue %b4
+        if %x_278 [t: $B19, f: $B20] {  # if_9
+          $B19: {  # true
+            %74:ptr<private, i32, read_write> = access %data, %x_307
+            %75:i32 = load %74
+            store %x_318, %75
+            %76:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
+            %77:f32 = load_vector_element %76, 1u
+            %x_320:f32 = let %77
+            %79:i32 = load %x_318
+            store %x_326, %79
+            %80:bool = lte 0.0f, %x_320
+            %81:bool = eq %80, false
+            if %81 [t: $B21] {  # if_10
+              $B21: {  # true
+                continue  # -> $B4
               }
             }
             exit_if  # if_9
           }
-          %b20 = block {  # false
+          $B20: {  # false
             store %x_322, 0i
-            %77:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
-            %x_324:f32 = load_vector_element %77, 1u
-            %79:i32 = load %x_322
-            store %x_326, %79
-            %80:bool = lt %x_324, 0.0f
-            %81:bool = eq %80, false
-            if %81 [t: %b22, f: %b23] {  # if_11
-              %b22 = block {  # true
+            %82:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
+            %83:f32 = load_vector_element %82, 1u
+            %x_324:f32 = let %83
+            %85:i32 = load %x_322
+            store %x_326, %85
+            %86:bool = lt %x_324, 0.0f
+            %87:bool = eq %86, false
+            if %87 [t: $B22, f: $B23] {  # if_11
+              $B22: {  # true
                 exit_if  # if_11
               }
-              %b23 = block {  # false
-                continue %b4
+              $B23: {  # false
+                continue  # -> $B4
               }
             }
             exit_if  # if_9
           }
         }
-        if %x_278 [t: %b24] {  # if_12
-          %b24 = block {  # true
-            %82:i32 = load %x_285
-            %83:ptr<private, i32, read_write> = access %temp, %82
-            %84:i32 = load %x_326
-            %85:i32 = select %x_313, %84, %x_278
-            store %83, %85
+        if %x_278 [t: $B24] {  # if_12
+          $B24: {  # true
+            %88:i32 = load %x_285
+            %89:ptr<private, i32, read_write> = access %temp, %88
+            %90:ptr<private, i32, read_write> = let %89
+            %91:i32 = load %x_326
+            %92:i32 = select %x_313, %91, %x_278
+            store %90, %92
             exit_if  # if_12
           }
         }
-        if %x_278 [t: %b25, f: %b26] {  # if_13
-          %b25 = block {  # true
+        if %x_278 [t: $B25, f: $B26] {  # if_13
+          $B25: {  # true
             store %x_337, 0i
-            %86:i32 = load %x_337
-            store %x_338, %86
+            %93:i32 = load %x_337
+            store %x_338, %93
             exit_if  # if_13
           }
-          %b26 = block {  # false
-            %87:i32 = load %k
-            store %x_336, %87
-            %88:i32 = load %x_336
-            store %x_338, %88
+          $B26: {  # false
+            %94:i32 = load %k
+            store %x_336, %94
+            %95:i32 = load %x_336
+            store %x_338, %95
             exit_if  # if_13
           }
         }
-        if %x_278 [t: %b27, f: %b28] {  # if_14
-          %b27 = block {  # true
+        if %x_278 [t: $B27, f: $B28] {  # if_14
+          $B27: {  # true
             exit_if  # if_14
           }
-          %b28 = block {  # false
-            %89:i32 = load %x_338
-            %90:i32 = add %89, 1i
-            store %k, %90
+          $B28: {  # false
+            %96:i32 = load %x_338
+            %97:i32 = add %96, 1i
+            store %k, %97
             exit_if  # if_14
           }
         }
-        %91:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
-        %92:f32 = load_vector_element %91, 0u
-        %93:bool = lte 1.0f, %92
-        %94:bool = eq %93, false
-        if %94 [t: %b29, f: %b30] {  # if_15
-          %b29 = block {  # true
+        %98:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
+        %99:f32 = load_vector_element %98, 0u
+        %100:bool = lte 1.0f, %99
+        %101:bool = eq %100, false
+        if %101 [t: $B29, f: $B30] {  # if_15
+          $B29: {  # true
             exit_if  # if_15
           }
-          %b30 = block {  # false
-            continue %b4
+          $B30: {  # false
+            continue  # -> $B4
           }
         }
-        if %x_278 [t: %b31, f: %b32] {  # if_16
-          %b31 = block {  # true
+        if %x_278 [t: $B31, f: $B32] {  # if_16
+          $B31: {  # true
             store %x_350, 0i
-            %95:i32 = load %x_350
-            store %x_351, %95
+            %102:i32 = load %x_350
+            store %x_351, %102
             exit_if  # if_16
           }
-          %b32 = block {  # false
-            %96:i32 = load %j
-            store %x_349, %96
-            %97:i32 = load %x_349
-            store %x_351, %97
+          $B32: {  # false
+            %103:i32 = load %j
+            store %x_349, %103
+            %104:i32 = load %x_349
+            store %x_351, %104
             exit_if  # if_16
           }
         }
-        %98:i32 = load %x_351
-        %x_355:i32 = select %98, 0i, %x_278
-        if %x_278 [t: %b33, f: %b34] {  # if_17
-          %b33 = block {  # true
+        %105:i32 = load %x_351
+        %106:i32 = select %105, 0i, %x_278
+        %x_355:i32 = let %106
+        if %x_278 [t: $B33, f: $B34] {  # if_17
+          $B33: {  # true
             exit_if  # if_17
           }
-          %b34 = block {  # false
-            %100:i32 = add %x_355, 1i
-            store %j, %100
+          $B34: {  # false
+            %108:i32 = add %x_355, 1i
+            store %j, %108
             exit_if  # if_17
           }
         }
-        if %x_278 [t: %b35, f: %b36] {  # if_18
-          %b35 = block {  # true
+        if %x_278 [t: $B35, f: $B36] {  # if_18
+          $B35: {  # true
             store %x_364, 0i
-            %101:i32 = load %x_364
-            store %x_365, %101
+            %109:i32 = load %x_364
+            store %x_365, %109
             exit_if  # if_18
           }
-          %b36 = block {  # false
-            %102:ptr<private, i32, read_write> = access %data, %x_355
-            %103:i32 = load %102
-            store %x_363, %103
-            %104:i32 = load %x_363
-            store %x_365, %104
+          $B36: {  # false
+            %110:ptr<private, i32, read_write> = access %data, %x_355
+            %111:i32 = load %110
+            store %x_363, %111
+            %112:i32 = load %x_363
+            store %x_365, %112
             exit_if  # if_18
           }
         }
-        if %x_278 [t: %b37, f: %b38] {  # if_19
-          %b37 = block {  # true
+        if %x_278 [t: $B37, f: $B38] {  # if_19
+          $B37: {  # true
             exit_if  # if_19
           }
-          %b38 = block {  # false
-            %105:i32 = load %x_338
-            %106:ptr<private, i32, read_write> = access %temp, %105
-            %107:i32 = load %x_365
-            store %106, %107
+          $B38: {  # false
+            %113:i32 = load %x_338
+            %114:ptr<private, i32, read_write> = access %temp, %113
+            %115:i32 = load %x_365
+            store %114, %115
             exit_if  # if_19
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
-    loop [b: %b39, c: %b40] {  # loop_2
-      %b39 = block {  # body
-        %108:i32 = load %i
-        %109:bool = lt %108, 10i
-        %110:i32 = load %i
-        %111:i32 = load %mid
-        %112:bool = lte %110, %111
-        %113:bool = and %109, %112
-        if %113 [t: %b41, f: %b42] {  # if_20
-          %b41 = block {  # true
+    loop [b: $B39, c: $B40] {  # loop_2
+      $B39: {  # body
+        %116:i32 = load %i
+        %117:bool = lt %116, 10i
+        %118:i32 = load %i
+        %119:i32 = load %mid
+        %120:bool = lte %118, %119
+        %121:bool = and %117, %120
+        if %121 [t: $B41, f: $B42] {  # if_20
+          $B41: {  # true
             exit_if  # if_20
           }
-          %b42 = block {  # false
+          $B42: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_381:i32 = load %k
-        %115:i32 = load %k
-        %116:i32 = add %115, 1i
-        store %k, %116
-        %x_383:i32 = load %i
-        %118:i32 = load %i
-        %119:i32 = add %118, 1i
-        store %i, %119
-        %120:ptr<private, i32, read_write> = access %temp, %x_381
-        %121:ptr<private, i32, read_write> = access %data, %x_383
-        %122:i32 = load %121
-        store %120, %122
-        continue %b40
+        %122:i32 = load %k
+        %x_381:i32 = let %122
+        %124:i32 = load %k
+        %125:i32 = add %124, 1i
+        store %k, %125
+        %126:i32 = load %i
+        %x_383:i32 = let %126
+        %128:i32 = load %i
+        %129:i32 = add %128, 1i
+        store %i, %129
+        %130:ptr<private, i32, read_write> = access %temp, %x_381
+        %131:ptr<private, i32, read_write> = access %data, %x_383
+        %132:i32 = load %131
+        store %130, %132
+        continue  # -> $B40
       }
-      %b40 = block {  # continuing
-        next_iteration %b39
+      $B40: {  # continuing
+        next_iteration  # -> $B39
       }
     }
-    %123:i32 = load %f
-    store %i_1, %123
-    loop [b: %b43, c: %b44] {  # loop_3
-      %b43 = block {  # body
-        %124:i32 = load %i_1
-        %125:i32 = load %to
-        %126:bool = lte %124, %125
-        if %126 [t: %b45, f: %b46] {  # if_21
-          %b45 = block {  # true
+    %133:i32 = load %f
+    store %i_1, %133
+    loop [b: $B43, c: $B44] {  # loop_3
+      $B43: {  # body
+        %134:i32 = load %i_1
+        %135:i32 = load %to
+        %136:bool = lte %134, %135
+        if %136 [t: $B45, f: $B46] {  # if_21
+          $B45: {  # true
             exit_if  # if_21
           }
-          %b46 = block {  # false
+          $B46: {  # false
             exit_loop  # loop_3
           }
         }
-        %x_397:i32 = load %i_1
-        %128:ptr<private, i32, read_write> = access %data, %x_397
-        %129:i32 = load %i_1
-        %130:ptr<private, i32, read_write> = access %temp, %129
-        %131:i32 = load %130
-        store %128, %131
-        continue %b44
+        %137:i32 = load %i_1
+        %x_397:i32 = let %137
+        %139:ptr<private, i32, read_write> = access %data, %x_397
+        %140:i32 = load %i_1
+        %141:ptr<private, i32, read_write> = access %temp, %140
+        %142:i32 = load %141
+        store %139, %142
+        continue  # -> $B44
       }
-      %b44 = block {  # continuing
-        %132:i32 = load %i_1
-        %133:i32 = add %132, 1i
-        store %i_1, %133
-        next_iteration %b43
+      $B44: {  # continuing
+        %143:i32 = load %i_1
+        %144:i32 = add %143, 1i
+        store %i_1, %144
+        next_iteration  # -> $B43
       }
     }
     ret
   }
 }
-%mergeSort_ = func():void -> %b47 {
-  %b47 = block {
+%mergeSort_ = func():void {
+  $B47: {
     %low:ptr<function, i32, read_write> = var
     %high:ptr<function, i32, read_write> = var
     %m:ptr<function, i32, read_write> = var
@@ -379,319 +390,332 @@
     store %low, 0i
     store %high, 9i
     store %m, 1i
-    loop [b: %b48, c: %b49] {  # loop_4
-      %b48 = block {  # body
-        %145:i32 = load %m
-        %146:i32 = load %high
-        %147:bool = lte %145, %146
-        if %147 [t: %b50, f: %b51] {  # if_22
-          %b50 = block {  # true
+    loop [b: $B48, c: $B49] {  # loop_4
+      $B48: {  # body
+        %156:i32 = load %m
+        %157:i32 = load %high
+        %158:bool = lte %156, %157
+        if %158 [t: $B50, f: $B51] {  # if_22
+          $B50: {  # true
             exit_if  # if_22
           }
-          %b51 = block {  # false
+          $B51: {  # false
             exit_loop  # loop_4
           }
         }
-        %148:i32 = load %low
-        store %i_2, %148
-        loop [b: %b52, c: %b53] {  # loop_5
-          %b52 = block {  # body
-            %149:i32 = load %i_2
-            %150:i32 = load %high
-            %151:bool = lt %149, %150
-            if %151 [t: %b54, f: %b55] {  # if_23
-              %b54 = block {  # true
+        %159:i32 = load %low
+        store %i_2, %159
+        loop [b: $B52, c: $B53] {  # loop_5
+          $B52: {  # body
+            %160:i32 = load %i_2
+            %161:i32 = load %high
+            %162:bool = lt %160, %161
+            if %162 [t: $B54, f: $B55] {  # if_23
+              $B54: {  # true
                 exit_if  # if_23
               }
-              %b55 = block {  # false
+              $B55: {  # false
                 exit_loop  # loop_5
               }
             }
-            %152:i32 = load %i_2
-            store %f_1, %152
-            %153:i32 = load %i_2
-            %154:i32 = load %m
-            %155:i32 = add %153, %154
-            %156:i32 = sub %155, 1i
-            store %mid_1, %156
-            %157:i32 = load %i_2
-            %158:i32 = load %m
-            %159:i32 = mul 2i, %158
-            %160:i32 = add %157, %159
-            %161:i32 = sub %160, 1i
-            %162:i32 = load %high
-            %163:i32 = min %161, %162
-            store %to_1, %163
-            %164:i32 = load %f_1
-            store %param, %164
-            %165:i32 = load %mid_1
-            store %param_1, %165
-            %166:i32 = load %to_1
-            store %param_2, %166
-            %167:void = call %merge_i1_i1_i1_, %param, %param_1, %param_2
-            continue %b53
-          }
-          %b53 = block {  # continuing
+            %163:i32 = load %i_2
+            store %f_1, %163
+            %164:i32 = load %i_2
+            %165:i32 = load %m
+            %166:i32 = add %164, %165
+            %167:i32 = sub %166, 1i
+            store %mid_1, %167
             %168:i32 = load %i_2
             %169:i32 = load %m
             %170:i32 = mul 2i, %169
             %171:i32 = add %168, %170
-            store %i_2, %171
-            next_iteration %b52
+            %172:i32 = sub %171, 1i
+            %173:i32 = load %high
+            %174:i32 = min %172, %173
+            store %to_1, %174
+            %175:i32 = load %f_1
+            store %param, %175
+            %176:i32 = load %mid_1
+            store %param_1, %176
+            %177:i32 = load %to_1
+            store %param_2, %177
+            %178:void = call %merge_i1_i1_i1_, %param, %param_1, %param_2
+            continue  # -> $B53
+          }
+          $B53: {  # continuing
+            %179:i32 = load %i_2
+            %180:i32 = load %m
+            %181:i32 = mul 2i, %180
+            %182:i32 = add %179, %181
+            store %i_2, %182
+            next_iteration  # -> $B52
           }
         }
-        continue %b49
+        continue  # -> $B49
       }
-      %b49 = block {  # continuing
-        %172:i32 = load %m
-        %173:i32 = mul 2i, %172
-        store %m, %173
-        next_iteration %b48
+      $B49: {  # continuing
+        %183:i32 = load %m
+        %184:i32 = mul 2i, %183
+        store %m, %184
+        next_iteration  # -> $B48
       }
     }
     ret
   }
 }
-%main_1 = func():void -> %b56 {
-  %b56 = block {
+%main_1 = func():void {
+  $B56: {
     %i_3:ptr<function, i32, read_write> = var
     %j_1:ptr<function, i32, read_write> = var
     %grey:ptr<function, f32, read_write> = var
-    %178:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
-    %179:f32 = load_vector_element %178, 0u
-    %180:i32 = convert %179
-    store %i_3, %180
-    loop [b: %b57, c: %b58] {  # loop_6
-      %b57 = block {  # body
-        %x_94:i32 = load %i_3
-        switch %x_94 [c: (9i, %b59), c: (8i, %b60), c: (7i, %b61), c: (6i, %b62), c: (5i, %b63), c: (4i, %b64), c: (3i, %b65), c: (2i, %b66), c: (1i, %b67), c: (0i, %b68), c: (default, %b69)] {  # switch_1
-          %b59 = block {  # case
-            %x_124:i32 = load %i_3
-            %183:ptr<private, i32, read_write> = access %data, %x_124
-            store %183, -5i
+    %189:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
+    %190:f32 = load_vector_element %189, 0u
+    %191:i32 = call %tint_f32_to_i32, %190
+    store %i_3, %191
+    loop [b: $B57, c: $B58] {  # loop_6
+      $B57: {  # body
+        %193:i32 = load %i_3
+        %x_94:i32 = let %193
+        switch %x_94 [c: (9i, $B59), c: (8i, $B60), c: (7i, $B61), c: (6i, $B62), c: (5i, $B63), c: (4i, $B64), c: (3i, $B65), c: (2i, $B66), c: (1i, $B67), c: (0i, $B68), c: (default, $B69)] {  # switch_1
+          $B59: {  # case
+            %195:i32 = load %i_3
+            %x_124:i32 = let %195
+            %197:ptr<private, i32, read_write> = access %data, %x_124
+            store %197, -5i
             exit_switch  # switch_1
           }
-          %b60 = block {  # case
-            %x_122:i32 = load %i_3
-            %185:ptr<private, i32, read_write> = access %data, %x_122
-            store %185, -4i
+          $B60: {  # case
+            %198:i32 = load %i_3
+            %x_122:i32 = let %198
+            %200:ptr<private, i32, read_write> = access %data, %x_122
+            store %200, -4i
             exit_switch  # switch_1
           }
-          %b61 = block {  # case
-            %x_120:i32 = load %i_3
-            %187:ptr<private, i32, read_write> = access %data, %x_120
-            store %187, -3i
+          $B61: {  # case
+            %201:i32 = load %i_3
+            %x_120:i32 = let %201
+            %203:ptr<private, i32, read_write> = access %data, %x_120
+            store %203, -3i
             exit_switch  # switch_1
           }
-          %b62 = block {  # case
-            %x_118:i32 = load %i_3
-            %189:ptr<private, i32, read_write> = access %data, %x_118
-            store %189, -2i
+          $B62: {  # case
+            %204:i32 = load %i_3
+            %x_118:i32 = let %204
+            %206:ptr<private, i32, read_write> = access %data, %x_118
+            store %206, -2i
             exit_switch  # switch_1
           }
-          %b63 = block {  # case
-            %x_116:i32 = load %i_3
-            %191:ptr<private, i32, read_write> = access %data, %x_116
-            store %191, -1i
+          $B63: {  # case
+            %207:i32 = load %i_3
+            %x_116:i32 = let %207
+            %209:ptr<private, i32, read_write> = access %data, %x_116
+            store %209, -1i
             exit_switch  # switch_1
           }
-          %b64 = block {  # case
-            %x_114:i32 = load %i_3
-            %193:ptr<private, i32, read_write> = access %data, %x_114
-            store %193, 0i
+          $B64: {  # case
+            %210:i32 = load %i_3
+            %x_114:i32 = let %210
+            %212:ptr<private, i32, read_write> = access %data, %x_114
+            store %212, 0i
             exit_switch  # switch_1
           }
-          %b65 = block {  # case
-            %x_112:i32 = load %i_3
-            %195:ptr<private, i32, read_write> = access %data, %x_112
-            store %195, 1i
+          $B65: {  # case
+            %213:i32 = load %i_3
+            %x_112:i32 = let %213
+            %215:ptr<private, i32, read_write> = access %data, %x_112
+            store %215, 1i
             exit_switch  # switch_1
           }
-          %b66 = block {  # case
-            %x_110:i32 = load %i_3
-            %197:ptr<private, i32, read_write> = access %data, %x_110
-            store %197, 2i
+          $B66: {  # case
+            %216:i32 = load %i_3
+            %x_110:i32 = let %216
+            %218:ptr<private, i32, read_write> = access %data, %x_110
+            store %218, 2i
             exit_switch  # switch_1
           }
-          %b67 = block {  # case
-            %x_108:i32 = load %i_3
-            %199:ptr<private, i32, read_write> = access %data, %x_108
-            store %199, 3i
+          $B67: {  # case
+            %219:i32 = load %i_3
+            %x_108:i32 = let %219
+            %221:ptr<private, i32, read_write> = access %data, %x_108
+            store %221, 3i
             exit_switch  # switch_1
           }
-          %b68 = block {  # case
-            %x_106:i32 = load %i_3
-            %201:ptr<private, i32, read_write> = access %data, %x_106
-            store %201, 4i
+          $B68: {  # case
+            %222:i32 = load %i_3
+            %x_106:i32 = let %222
+            %224:ptr<private, i32, read_write> = access %data, %x_106
+            store %224, 4i
             exit_switch  # switch_1
           }
-          %b69 = block {  # case
+          $B69: {  # case
             exit_switch  # switch_1
           }
         }
-        %202:i32 = load %i_3
-        %203:i32 = add %202, 1i
-        store %i_3, %203
-        continue %b58
+        %225:i32 = load %i_3
+        %226:i32 = add %225, 1i
+        store %i_3, %226
+        continue  # -> $B58
       }
-      %b58 = block {  # continuing
-        %x_128:i32 = load %i_3
-        %205:bool = lt %x_128, 10i
-        %206:bool = eq %205, false
-        break_if %206 %b57
+      $B58: {  # continuing
+        %227:i32 = load %i_3
+        %x_128:i32 = let %227
+        %229:bool = lt %x_128, 10i
+        %230:bool = eq %229, false
+        break_if %230  # -> [t: exit_loop loop_6, f: $B57]
       }
     }
     store %j_1, 0i
-    loop [b: %b70, c: %b71] {  # loop_7
-      %b70 = block {  # body
-        %207:i32 = load %j_1
-        %208:bool = lt %207, 10i
-        if %208 [t: %b72, f: %b73] {  # if_24
-          %b72 = block {  # true
+    loop [b: $B70, c: $B71] {  # loop_7
+      $B70: {  # body
+        %231:i32 = load %j_1
+        %232:bool = lt %231, 10i
+        if %232 [t: $B72, f: $B73] {  # if_24
+          $B72: {  # true
             exit_if  # if_24
           }
-          %b73 = block {  # false
+          $B73: {  # false
             exit_loop  # loop_7
           }
         }
-        %x_137:i32 = load %j_1
-        %210:ptr<private, i32, read_write> = access %temp, %x_137
-        %211:i32 = load %j_1
-        %212:ptr<private, i32, read_write> = access %data, %211
-        %213:i32 = load %212
-        store %210, %213
-        continue %b71
+        %233:i32 = load %j_1
+        %x_137:i32 = let %233
+        %235:ptr<private, i32, read_write> = access %temp, %x_137
+        %236:i32 = load %j_1
+        %237:ptr<private, i32, read_write> = access %data, %236
+        %238:i32 = load %237
+        store %235, %238
+        continue  # -> $B71
       }
-      %b71 = block {  # continuing
-        %214:i32 = load %j_1
-        %215:i32 = add %214, 1i
-        store %j_1, %215
-        next_iteration %b70
+      $B71: {  # continuing
+        %239:i32 = load %j_1
+        %240:i32 = add %239, 1i
+        store %j_1, %240
+        next_iteration  # -> $B70
       }
     }
-    %216:void = call %mergeSort_
-    %217:f32 = load_vector_element %gl_FragCoord, 1u
-    %218:i32 = convert %217
-    %219:bool = lt %218, 30i
-    if %219 [t: %b74, f: %b75] {  # if_25
-      %b74 = block {  # true
-        %220:ptr<private, i32, read_write> = access %data, 0i
-        %221:i32 = load %220
-        %222:f32 = convert %221
-        %223:f32 = div %222, 10.0f
-        %224:f32 = add 0.5f, %223
-        store %grey, %224
+    %241:void = call %mergeSort_
+    %242:f32 = load_vector_element %gl_FragCoord, 1u
+    %243:i32 = call %tint_f32_to_i32, %242
+    %244:bool = lt %243, 30i
+    if %244 [t: $B74, f: $B75] {  # if_25
+      $B74: {  # true
+        %245:ptr<private, i32, read_write> = access %data, 0i
+        %246:i32 = load %245
+        %247:f32 = convert %246
+        %248:f32 = div %247, 10.0f
+        %249:f32 = add 0.5f, %248
+        store %grey, %249
         exit_if  # if_25
       }
-      %b75 = block {  # false
-        %225:f32 = load_vector_element %gl_FragCoord, 1u
-        %226:i32 = convert %225
-        %227:bool = lt %226, 60i
-        if %227 [t: %b76, f: %b77] {  # if_26
-          %b76 = block {  # true
-            %228:ptr<private, i32, read_write> = access %data, 1i
-            %229:i32 = load %228
-            %230:f32 = convert %229
-            %231:f32 = div %230, 10.0f
-            %232:f32 = add 0.5f, %231
-            store %grey, %232
+      $B75: {  # false
+        %250:f32 = load_vector_element %gl_FragCoord, 1u
+        %251:i32 = call %tint_f32_to_i32, %250
+        %252:bool = lt %251, 60i
+        if %252 [t: $B76, f: $B77] {  # if_26
+          $B76: {  # true
+            %253:ptr<private, i32, read_write> = access %data, 1i
+            %254:i32 = load %253
+            %255:f32 = convert %254
+            %256:f32 = div %255, 10.0f
+            %257:f32 = add 0.5f, %256
+            store %grey, %257
             exit_if  # if_26
           }
-          %b77 = block {  # false
-            %233:f32 = load_vector_element %gl_FragCoord, 1u
-            %234:i32 = convert %233
-            %235:bool = lt %234, 90i
-            if %235 [t: %b78, f: %b79] {  # if_27
-              %b78 = block {  # true
-                %236:ptr<private, i32, read_write> = access %data, 2i
-                %237:i32 = load %236
-                %238:f32 = convert %237
-                %239:f32 = div %238, 10.0f
-                %240:f32 = add 0.5f, %239
-                store %grey, %240
+          $B77: {  # false
+            %258:f32 = load_vector_element %gl_FragCoord, 1u
+            %259:i32 = call %tint_f32_to_i32, %258
+            %260:bool = lt %259, 90i
+            if %260 [t: $B78, f: $B79] {  # if_27
+              $B78: {  # true
+                %261:ptr<private, i32, read_write> = access %data, 2i
+                %262:i32 = load %261
+                %263:f32 = convert %262
+                %264:f32 = div %263, 10.0f
+                %265:f32 = add 0.5f, %264
+                store %grey, %265
                 exit_if  # if_27
               }
-              %b79 = block {  # false
-                %241:f32 = load_vector_element %gl_FragCoord, 1u
-                %242:i32 = convert %241
-                %243:bool = lt %242, 120i
-                if %243 [t: %b80, f: %b81] {  # if_28
-                  %b80 = block {  # true
-                    %244:ptr<private, i32, read_write> = access %data, 3i
-                    %245:i32 = load %244
-                    %246:f32 = convert %245
-                    %247:f32 = div %246, 10.0f
-                    %248:f32 = add 0.5f, %247
-                    store %grey, %248
+              $B79: {  # false
+                %266:f32 = load_vector_element %gl_FragCoord, 1u
+                %267:i32 = call %tint_f32_to_i32, %266
+                %268:bool = lt %267, 120i
+                if %268 [t: $B80, f: $B81] {  # if_28
+                  $B80: {  # true
+                    %269:ptr<private, i32, read_write> = access %data, 3i
+                    %270:i32 = load %269
+                    %271:f32 = convert %270
+                    %272:f32 = div %271, 10.0f
+                    %273:f32 = add 0.5f, %272
+                    store %grey, %273
                     exit_if  # if_28
                   }
-                  %b81 = block {  # false
-                    %249:f32 = load_vector_element %gl_FragCoord, 1u
-                    %250:i32 = convert %249
-                    %251:bool = lt %250, 150i
-                    if %251 [t: %b82, f: %b83] {  # if_29
-                      %b82 = block {  # true
-                        discard
+                  $B81: {  # false
+                    %274:f32 = load_vector_element %gl_FragCoord, 1u
+                    %275:i32 = call %tint_f32_to_i32, %274
+                    %276:bool = lt %275, 150i
+                    if %276 [t: $B82, f: $B83] {  # if_29
+                      $B82: {  # true
+                        store %continue_execution, false
                         exit_if  # if_29
                       }
-                      %b83 = block {  # false
-                        %252:f32 = load_vector_element %gl_FragCoord, 1u
-                        %253:i32 = convert %252
-                        %254:bool = lt %253, 180i
-                        if %254 [t: %b84, f: %b85] {  # if_30
-                          %b84 = block {  # true
-                            %255:ptr<private, i32, read_write> = access %data, 5i
-                            %256:i32 = load %255
-                            %257:f32 = convert %256
-                            %258:f32 = div %257, 10.0f
-                            %259:f32 = add 0.5f, %258
-                            store %grey, %259
+                      $B83: {  # false
+                        %277:f32 = load_vector_element %gl_FragCoord, 1u
+                        %278:i32 = call %tint_f32_to_i32, %277
+                        %279:bool = lt %278, 180i
+                        if %279 [t: $B84, f: $B85] {  # if_30
+                          $B84: {  # true
+                            %280:ptr<private, i32, read_write> = access %data, 5i
+                            %281:i32 = load %280
+                            %282:f32 = convert %281
+                            %283:f32 = div %282, 10.0f
+                            %284:f32 = add 0.5f, %283
+                            store %grey, %284
                             exit_if  # if_30
                           }
-                          %b85 = block {  # false
-                            %260:f32 = load_vector_element %gl_FragCoord, 1u
-                            %261:i32 = convert %260
-                            %262:bool = lt %261, 210i
-                            if %262 [t: %b86, f: %b87] {  # if_31
-                              %b86 = block {  # true
-                                %263:ptr<private, i32, read_write> = access %data, 6i
-                                %264:i32 = load %263
-                                %265:f32 = convert %264
-                                %266:f32 = div %265, 10.0f
-                                %267:f32 = add 0.5f, %266
-                                store %grey, %267
+                          $B85: {  # false
+                            %285:f32 = load_vector_element %gl_FragCoord, 1u
+                            %286:i32 = call %tint_f32_to_i32, %285
+                            %287:bool = lt %286, 210i
+                            if %287 [t: $B86, f: $B87] {  # if_31
+                              $B86: {  # true
+                                %288:ptr<private, i32, read_write> = access %data, 6i
+                                %289:i32 = load %288
+                                %290:f32 = convert %289
+                                %291:f32 = div %290, 10.0f
+                                %292:f32 = add 0.5f, %291
+                                store %grey, %292
                                 exit_if  # if_31
                               }
-                              %b87 = block {  # false
-                                %268:f32 = load_vector_element %gl_FragCoord, 1u
-                                %269:i32 = convert %268
-                                %270:bool = lt %269, 240i
-                                if %270 [t: %b88, f: %b89] {  # if_32
-                                  %b88 = block {  # true
-                                    %271:ptr<private, i32, read_write> = access %data, 7i
-                                    %272:i32 = load %271
-                                    %273:f32 = convert %272
-                                    %274:f32 = div %273, 10.0f
-                                    %275:f32 = add 0.5f, %274
-                                    store %grey, %275
+                              $B87: {  # false
+                                %293:f32 = load_vector_element %gl_FragCoord, 1u
+                                %294:i32 = call %tint_f32_to_i32, %293
+                                %295:bool = lt %294, 240i
+                                if %295 [t: $B88, f: $B89] {  # if_32
+                                  $B88: {  # true
+                                    %296:ptr<private, i32, read_write> = access %data, 7i
+                                    %297:i32 = load %296
+                                    %298:f32 = convert %297
+                                    %299:f32 = div %298, 10.0f
+                                    %300:f32 = add 0.5f, %299
+                                    store %grey, %300
                                     exit_if  # if_32
                                   }
-                                  %b89 = block {  # false
-                                    %276:f32 = load_vector_element %gl_FragCoord, 1u
-                                    %277:i32 = convert %276
-                                    %278:bool = lt %277, 270i
-                                    if %278 [t: %b90, f: %b91] {  # if_33
-                                      %b90 = block {  # true
-                                        %279:ptr<private, i32, read_write> = access %data, 8i
-                                        %280:i32 = load %279
-                                        %281:f32 = convert %280
-                                        %282:f32 = div %281, 10.0f
-                                        %283:f32 = add 0.5f, %282
-                                        store %grey, %283
+                                  $B89: {  # false
+                                    %301:f32 = load_vector_element %gl_FragCoord, 1u
+                                    %302:i32 = call %tint_f32_to_i32, %301
+                                    %303:bool = lt %302, 270i
+                                    if %303 [t: $B90, f: $B91] {  # if_33
+                                      $B90: {  # true
+                                        %304:ptr<private, i32, read_write> = access %data, 8i
+                                        %305:i32 = load %304
+                                        %306:f32 = convert %305
+                                        %307:f32 = div %306, 10.0f
+                                        %308:f32 = add 0.5f, %307
+                                        store %grey, %308
                                         exit_if  # if_33
                                       }
-                                      %b91 = block {  # false
-                                        discard
+                                      $B91: {  # false
+                                        store %continue_execution, false
                                         exit_if  # if_33
                                       }
                                     }
@@ -719,23 +743,41 @@
         exit_if  # if_25
       }
     }
-    %284:f32 = load %grey
-    %x_249:vec3<f32> = construct %284
-    %286:f32 = access %x_249, 0u
-    %287:f32 = access %x_249, 1u
-    %288:f32 = access %x_249, 2u
-    %289:vec4<f32> = construct %286, %287, %288, 1.0f
-    store %x_GLF_color, %289
+    %309:f32 = load %grey
+    %310:vec3<f32> = construct %309
+    %x_249:vec3<f32> = let %310
+    %312:f32 = access %x_249, 0u
+    %313:f32 = access %x_249, 1u
+    %314:f32 = access %x_249, 2u
+    %315:vec4<f32> = construct %312, %313, %314, 1.0f
+    store %x_GLF_color, %315
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b92 {
-  %b92 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B92: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %292:void = call %main_1
-    %293:vec4<f32> = load %x_GLF_color
-    %294:main_out = construct %293
-    ret %294
+    %318:void = call %main_1
+    %319:vec4<f32> = load %x_GLF_color
+    %320:main_out = construct %319
+    %321:bool = load %continue_execution
+    %322:bool = eq %321, false
+    if %322 [t: $B93] {  # if_34
+      $B93: {  # true
+        terminate_invocation
+      }
+    }
+    ret %320
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B94: {
+    %324:i32 = convert %value
+    %325:bool = gte %value, -2147483648.0f
+    %326:i32 = select -2147483648i, %324, %325
+    %327:bool = lte %value, 2147483520.0f
+    %328:i32 = select 2147483647i, %326, %327
+    ret %328
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/2-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/2-opt.wgsl.expected.ir.msl
index 64b59ee..2a265bc 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/2-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/2-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,29 +8,33 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %data:ptr<private, array<i32, 10>, read_write> = var
   %temp:ptr<private, array<i32, 10>, read_write> = var
   %x_28:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%merge_i1_i1_i1_ = func(%f:ptr<function, i32, read_write>, %mid:ptr<function, i32, read_write>, %to:ptr<function, i32, read_write>):void -> %b2 {
-  %b2 = block {
+%merge_i1_i1_i1_ = func(%f:ptr<function, i32, read_write>, %mid:ptr<function, i32, read_write>, %to:ptr<function, i32, read_write>):void {
+  $B2: {
     %k:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %j:ptr<function, i32, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
-    %x_255:i32 = load %f
+    %15:i32 = load %f
+    %x_255:i32 = let %15
     store %k, %x_255
-    %x_256:i32 = load %f
+    %17:i32 = load %f
+    %x_256:i32 = let %17
     store %i, %x_256
-    %x_257:i32 = load %mid
-    %17:i32 = add %x_257, 1i
-    store %j, %17
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    %19:i32 = load %mid
+    %x_257:i32 = let %19
+    %21:i32 = add %x_257, 1i
+    store %j, %21
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %x_283:ptr<function, i32, read_write> = var
         %x_284:ptr<function, i32, read_write> = var
         %x_303:ptr<function, i32, read_write> = var
@@ -49,320 +53,356 @@
         %x_338_phi:ptr<function, i32, read_write> = var
         %x_351_phi:ptr<function, i32, read_write> = var
         %x_365_phi:ptr<function, i32, read_write> = var
-        if true [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if true [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
-            continue %b4
+          $B6: {  # false
+            continue  # -> $B4
           }
         }
-        %x_264:i32 = load %i
-        %x_265:i32 = load %mid
-        %x_267:i32 = load %j
-        %x_268:i32 = load %to
-        %40:bool = lte %x_264, %x_265
-        %41:bool = lte %x_267, %x_268
-        %42:bool = and %40, %41
-        if %42 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
+        %40:i32 = load %i
+        %x_264:i32 = let %40
+        %42:i32 = load %mid
+        %x_265:i32 = let %42
+        %44:i32 = load %j
+        %x_267:i32 = let %44
+        %46:i32 = load %to
+        %x_268:i32 = let %46
+        %48:bool = lte %x_264, %x_265
+        %49:bool = lte %x_267, %x_268
+        %50:bool = and %48, %49
+        if %50 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
             exit_if  # if_2
           }
-          %b8 = block {  # false
+          $B8: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_272:i32 = load %i
-        %44:ptr<private, i32, read_write> = access %data, %x_272
-        %x_274:i32 = load %44
-        %x_275:i32 = load %j
-        %47:ptr<private, i32, read_write> = access %data, %x_275
-        %x_277:i32 = load %47
-        %x_278:bool = lt %x_274, %x_277
-        if %x_278 [t: %b9, f: %b10] {  # if_3
-          %b9 = block {  # true
-            %50:i32 = load %k
-            store %x_283, %50
-            %51:i32 = load %x_283
-            store %x_285_phi, %51
+        %51:i32 = load %i
+        %x_272:i32 = let %51
+        %53:ptr<private, i32, read_write> = access %data, %x_272
+        %54:i32 = load %53
+        %x_274:i32 = let %54
+        %56:i32 = load %j
+        %x_275:i32 = let %56
+        %58:ptr<private, i32, read_write> = access %data, %x_275
+        %59:i32 = load %58
+        %x_277:i32 = let %59
+        %61:bool = lt %x_274, %x_277
+        %x_278:bool = let %61
+        if %x_278 [t: $B9, f: $B10] {  # if_3
+          $B9: {  # true
+            %63:i32 = load %k
+            store %x_283, %63
+            %64:i32 = load %x_283
+            store %x_285_phi, %64
             exit_if  # if_3
           }
-          %b10 = block {  # false
+          $B10: {  # false
             store %x_284, 0i
-            %52:i32 = load %x_284
-            store %x_285_phi, %52
+            %65:i32 = load %x_284
+            store %x_285_phi, %65
             exit_if  # if_3
           }
         }
-        %x_285:i32 = load %x_285_phi
-        %x_286:i32 = add %x_285, 1i
-        if %x_278 [t: %b11] {  # if_4
-          %b11 = block {  # true
+        %66:i32 = load %x_285_phi
+        %x_285:i32 = let %66
+        %68:i32 = add %x_285, 1i
+        %x_286:i32 = let %68
+        if %x_278 [t: $B11] {  # if_4
+          $B11: {  # true
             store %k, %x_286
-            %55:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
-            %x_291:f32 = load_vector_element %55, 0u
-            %57:bool = lte 1.0f, %x_291
-            %58:bool = eq %57, false
-            if %58 [t: %b12, f: %b13] {  # if_5
-              %b12 = block {  # true
+            %70:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
+            %71:f32 = load_vector_element %70, 0u
+            %x_291:f32 = let %71
+            %73:bool = lte 1.0f, %x_291
+            %74:bool = eq %73, false
+            if %74 [t: $B12, f: $B13] {  # if_5
+              $B12: {  # true
                 exit_if  # if_5
               }
-              %b13 = block {  # false
-                continue %b4
+              $B13: {  # false
+                continue  # -> $B4
               }
             }
             exit_if  # if_4
           }
         }
-        %59:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
-        %x_295:f32 = load_vector_element %59, 1u
-        %61:bool = gte %x_295, 0.0f
-        if %61 [t: %b14, f: %b15] {  # if_6
-          %b14 = block {  # true
+        %75:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
+        %76:f32 = load_vector_element %75, 1u
+        %x_295:f32 = let %76
+        %78:bool = gte %x_295, 0.0f
+        if %78 [t: $B14, f: $B15] {  # if_6
+          $B14: {  # true
             exit_if  # if_6
           }
-          %b15 = block {  # false
-            continue %b4
+          $B15: {  # false
+            continue  # -> $B4
           }
         }
         %x_298:i32 = let 0i
-        if %x_278 [t: %b16, f: %b17] {  # if_7
-          %b16 = block {  # true
-            %63:i32 = load %i
-            store %x_303, %63
-            %64:i32 = load %x_303
-            store %x_305_phi, %64
+        if %x_278 [t: $B16, f: $B17] {  # if_7
+          $B16: {  # true
+            %80:i32 = load %i
+            store %x_303, %80
+            %81:i32 = load %x_303
+            store %x_305_phi, %81
             exit_if  # if_7
           }
-          %b17 = block {  # false
+          $B17: {  # false
             store %x_304, 0i
-            %65:i32 = load %x_304
-            store %x_305_phi, %65
+            %82:i32 = load %x_304
+            store %x_305_phi, %82
             exit_if  # if_7
           }
         }
-        %x_305:i32 = load %x_305_phi
-        %x_307:i32 = select %x_298, %x_305, %x_278
-        if %x_278 [t: %b18] {  # if_8
-          %b18 = block {  # true
-            %68:i32 = add %x_307, 1i
-            store %i, %68
+        %83:i32 = load %x_305_phi
+        %x_305:i32 = let %83
+        %85:i32 = select %x_298, %x_305, %x_278
+        %x_307:i32 = let %85
+        if %x_278 [t: $B18] {  # if_8
+          $B18: {  # true
+            %87:i32 = add %x_307, 1i
+            store %i, %87
             exit_if  # if_8
           }
         }
         %x_313:i32 = let 0i
-        if %x_278 [t: %b19, f: %b20] {  # if_9
-          %b19 = block {  # true
-            %70:ptr<private, i32, read_write> = access %data, %x_307
-            %71:i32 = load %70
-            store %x_318, %71
-            %72:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
-            %x_320:f32 = load_vector_element %72, 1u
-            %74:i32 = load %x_318
-            store %x_326_phi, %74
-            %75:bool = lte 0.0f, %x_320
-            %76:bool = eq %75, false
-            if %76 [t: %b21] {  # if_10
-              %b21 = block {  # true
-                continue %b4
+        if %x_278 [t: $B19, f: $B20] {  # if_9
+          $B19: {  # true
+            %89:ptr<private, i32, read_write> = access %data, %x_307
+            %90:i32 = load %89
+            store %x_318, %90
+            %91:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
+            %92:f32 = load_vector_element %91, 1u
+            %x_320:f32 = let %92
+            %94:i32 = load %x_318
+            store %x_326_phi, %94
+            %95:bool = lte 0.0f, %x_320
+            %96:bool = eq %95, false
+            if %96 [t: $B21] {  # if_10
+              $B21: {  # true
+                continue  # -> $B4
               }
             }
             exit_if  # if_9
           }
-          %b20 = block {  # false
+          $B20: {  # false
             store %x_322, 0i
-            %77:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
-            %x_324:f32 = load_vector_element %77, 1u
-            %79:i32 = load %x_322
-            store %x_326_phi, %79
-            %80:bool = lt %x_324, 0.0f
-            %81:bool = eq %80, false
-            if %81 [t: %b22, f: %b23] {  # if_11
-              %b22 = block {  # true
+            %97:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
+            %98:f32 = load_vector_element %97, 1u
+            %x_324:f32 = let %98
+            %100:i32 = load %x_322
+            store %x_326_phi, %100
+            %101:bool = lt %x_324, 0.0f
+            %102:bool = eq %101, false
+            if %102 [t: $B22, f: $B23] {  # if_11
+              $B22: {  # true
                 exit_if  # if_11
               }
-              %b23 = block {  # false
-                continue %b4
+              $B23: {  # false
+                continue  # -> $B4
               }
             }
             exit_if  # if_9
           }
         }
-        %x_326:i32 = load %x_326_phi
-        if %x_278 [t: %b24] {  # if_12
-          %b24 = block {  # true
-            %83:ptr<private, i32, read_write> = access %temp, %x_285
-            %84:i32 = select %x_313, %x_326, %x_278
-            store %83, %84
+        %103:i32 = load %x_326_phi
+        %x_326:i32 = let %103
+        if %x_278 [t: $B24] {  # if_12
+          $B24: {  # true
+            %105:ptr<private, i32, read_write> = access %temp, %x_285
+            %106:i32 = select %x_313, %x_326, %x_278
+            store %105, %106
             exit_if  # if_12
           }
         }
-        if %x_278 [t: %b25, f: %b26] {  # if_13
-          %b25 = block {  # true
+        if %x_278 [t: $B25, f: $B26] {  # if_13
+          $B25: {  # true
             store %x_337, 0i
-            %85:i32 = load %x_337
-            store %x_338_phi, %85
+            %107:i32 = load %x_337
+            store %x_338_phi, %107
             exit_if  # if_13
           }
-          %b26 = block {  # false
-            %86:i32 = load %k
-            store %x_336, %86
-            %87:i32 = load %x_336
-            store %x_338_phi, %87
+          $B26: {  # false
+            %108:i32 = load %k
+            store %x_336, %108
+            %109:i32 = load %x_336
+            store %x_338_phi, %109
             exit_if  # if_13
           }
         }
-        %x_338:i32 = load %x_338_phi
-        if %x_278 [t: %b27, f: %b28] {  # if_14
-          %b27 = block {  # true
+        %110:i32 = load %x_338_phi
+        %x_338:i32 = let %110
+        if %x_278 [t: $B27, f: $B28] {  # if_14
+          $B27: {  # true
             exit_if  # if_14
           }
-          %b28 = block {  # false
-            %89:i32 = add %x_338, 1i
-            store %k, %89
+          $B28: {  # false
+            %112:i32 = add %x_338, 1i
+            store %k, %112
             exit_if  # if_14
           }
         }
-        %90:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
-        %x_343:f32 = load_vector_element %90, 0u
-        %92:bool = lte 1.0f, %x_343
-        %93:bool = eq %92, false
-        if %93 [t: %b29, f: %b30] {  # if_15
-          %b29 = block {  # true
+        %113:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
+        %114:f32 = load_vector_element %113, 0u
+        %x_343:f32 = let %114
+        %116:bool = lte 1.0f, %x_343
+        %117:bool = eq %116, false
+        if %117 [t: $B29, f: $B30] {  # if_15
+          $B29: {  # true
             exit_if  # if_15
           }
-          %b30 = block {  # false
-            continue %b4
+          $B30: {  # false
+            continue  # -> $B4
           }
         }
-        if %x_278 [t: %b31, f: %b32] {  # if_16
-          %b31 = block {  # true
+        if %x_278 [t: $B31, f: $B32] {  # if_16
+          $B31: {  # true
             store %x_350, 0i
-            %94:i32 = load %x_350
-            store %x_351_phi, %94
+            %118:i32 = load %x_350
+            store %x_351_phi, %118
             exit_if  # if_16
           }
-          %b32 = block {  # false
-            %95:i32 = load %j
-            store %x_349, %95
-            %96:i32 = load %x_349
-            store %x_351_phi, %96
+          $B32: {  # false
+            %119:i32 = load %j
+            store %x_349, %119
+            %120:i32 = load %x_349
+            store %x_351_phi, %120
             exit_if  # if_16
           }
         }
-        %x_351:i32 = load %x_351_phi
+        %121:i32 = load %x_351_phi
+        %x_351:i32 = let %121
         %x_353:i32 = let 0i
-        %x_355:i32 = select %x_351, %x_353, %x_278
-        if %x_278 [t: %b33, f: %b34] {  # if_17
-          %b33 = block {  # true
+        %124:i32 = select %x_351, %x_353, %x_278
+        %x_355:i32 = let %124
+        if %x_278 [t: $B33, f: $B34] {  # if_17
+          $B33: {  # true
             exit_if  # if_17
           }
-          %b34 = block {  # false
-            %100:i32 = add %x_355, 1i
-            store %j, %100
+          $B34: {  # false
+            %126:i32 = add %x_355, 1i
+            store %j, %126
             exit_if  # if_17
           }
         }
-        if %x_278 [t: %b35, f: %b36] {  # if_18
-          %b35 = block {  # true
+        if %x_278 [t: $B35, f: $B36] {  # if_18
+          $B35: {  # true
             store %x_364, 0i
-            %101:i32 = load %x_364
-            store %x_365_phi, %101
+            %127:i32 = load %x_364
+            store %x_365_phi, %127
             exit_if  # if_18
           }
-          %b36 = block {  # false
-            %102:ptr<private, i32, read_write> = access %data, %x_355
-            %103:i32 = load %102
-            store %x_363, %103
-            %104:i32 = load %x_363
-            store %x_365_phi, %104
+          $B36: {  # false
+            %128:ptr<private, i32, read_write> = access %data, %x_355
+            %129:i32 = load %128
+            store %x_363, %129
+            %130:i32 = load %x_363
+            store %x_365_phi, %130
             exit_if  # if_18
           }
         }
-        %x_365:i32 = load %x_365_phi
-        if %x_278 [t: %b37, f: %b38] {  # if_19
-          %b37 = block {  # true
+        %131:i32 = load %x_365_phi
+        %x_365:i32 = let %131
+        if %x_278 [t: $B37, f: $B38] {  # if_19
+          $B37: {  # true
             exit_if  # if_19
           }
-          %b38 = block {  # false
-            %106:ptr<private, i32, read_write> = access %temp, %x_338
-            store %106, %x_365
+          $B38: {  # false
+            %133:ptr<private, i32, read_write> = access %temp, %x_338
+            store %133, %x_365
             exit_if  # if_19
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
-    loop [b: %b39, c: %b40] {  # loop_2
-      %b39 = block {  # body
-        %x_374:i32 = load %i
-        %x_376:i32 = load %i
-        %x_377:i32 = load %mid
-        %110:bool = lt %x_374, 10i
-        %111:bool = lte %x_376, %x_377
-        %112:bool = and %110, %111
-        if %112 [t: %b41, f: %b42] {  # if_20
-          %b41 = block {  # true
+    loop [b: $B39, c: $B40] {  # loop_2
+      $B39: {  # body
+        %134:i32 = load %i
+        %x_374:i32 = let %134
+        %136:i32 = load %i
+        %x_376:i32 = let %136
+        %138:i32 = load %mid
+        %x_377:i32 = let %138
+        %140:bool = lt %x_374, 10i
+        %141:bool = lte %x_376, %x_377
+        %142:bool = and %140, %141
+        if %142 [t: $B41, f: $B42] {  # if_20
+          $B41: {  # true
             exit_if  # if_20
           }
-          %b42 = block {  # false
+          $B42: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_381:i32 = load %k
-        %114:i32 = add %x_381, 1i
-        store %k, %114
-        %x_383:i32 = load %i
-        %116:i32 = add %x_383, 1i
-        store %i, %116
-        %117:ptr<private, i32, read_write> = access %data, %x_383
-        %x_386:i32 = load %117
-        %119:ptr<private, i32, read_write> = access %temp, %x_381
-        store %119, %x_386
-        continue %b40
+        %143:i32 = load %k
+        %x_381:i32 = let %143
+        %145:i32 = add %x_381, 1i
+        store %k, %145
+        %146:i32 = load %i
+        %x_383:i32 = let %146
+        %148:i32 = add %x_383, 1i
+        store %i, %148
+        %149:ptr<private, i32, read_write> = access %data, %x_383
+        %150:i32 = load %149
+        %x_386:i32 = let %150
+        %152:ptr<private, i32, read_write> = access %temp, %x_381
+        store %152, %x_386
+        continue  # -> $B40
       }
-      %b40 = block {  # continuing
-        next_iteration %b39
+      $B40: {  # continuing
+        next_iteration  # -> $B39
       }
     }
-    %x_388:i32 = load %f
+    %153:i32 = load %f
+    %x_388:i32 = let %153
     store %i_1, %x_388
-    loop [b: %b43, c: %b44] {  # loop_3
-      %b43 = block {  # body
-        %x_393:i32 = load %i_1
-        %x_394:i32 = load %to
-        %123:bool = lte %x_393, %x_394
-        if %123 [t: %b45, f: %b46] {  # if_21
-          %b45 = block {  # true
+    loop [b: $B43, c: $B44] {  # loop_3
+      $B43: {  # body
+        %155:i32 = load %i_1
+        %x_393:i32 = let %155
+        %157:i32 = load %to
+        %x_394:i32 = let %157
+        %159:bool = lte %x_393, %x_394
+        if %159 [t: $B45, f: $B46] {  # if_21
+          $B45: {  # true
             exit_if  # if_21
           }
-          %b46 = block {  # false
+          $B46: {  # false
             exit_loop  # loop_3
           }
         }
-        %x_397:i32 = load %i_1
-        %x_398:i32 = load %i_1
-        %126:ptr<private, i32, read_write> = access %temp, %x_398
-        %x_400:i32 = load %126
-        %128:ptr<private, i32, read_write> = access %data, %x_397
-        store %128, %x_400
-        continue %b44
+        %160:i32 = load %i_1
+        %x_397:i32 = let %160
+        %162:i32 = load %i_1
+        %x_398:i32 = let %162
+        %164:ptr<private, i32, read_write> = access %temp, %x_398
+        %165:i32 = load %164
+        %x_400:i32 = let %165
+        %167:ptr<private, i32, read_write> = access %data, %x_397
+        store %167, %x_400
+        continue  # -> $B44
       }
-      %b44 = block {  # continuing
-        %x_402:i32 = load %i_1
-        %130:i32 = add %x_402, 1i
-        store %i_1, %130
-        next_iteration %b43
+      $B44: {  # continuing
+        %168:i32 = load %i_1
+        %x_402:i32 = let %168
+        %170:i32 = add %x_402, 1i
+        store %i_1, %170
+        next_iteration  # -> $B43
       }
     }
     ret
   }
 }
-%mergeSort_ = func():void -> %b47 {
-  %b47 = block {
+%mergeSort_ = func():void {
+  $B47: {
     %low:ptr<function, i32, read_write> = var
     %high:ptr<function, i32, read_write> = var
     %m:ptr<function, i32, read_write> = var
@@ -376,319 +416,372 @@
     store %low, 0i
     store %high, 9i
     store %m, 1i
-    loop [b: %b48, c: %b49] {  # loop_4
-      %b48 = block {  # body
-        %x_409:i32 = load %m
-        %x_410:i32 = load %high
-        %144:bool = lte %x_409, %x_410
-        if %144 [t: %b50, f: %b51] {  # if_22
-          %b50 = block {  # true
+    loop [b: $B48, c: $B49] {  # loop_4
+      $B48: {  # body
+        %182:i32 = load %m
+        %x_409:i32 = let %182
+        %184:i32 = load %high
+        %x_410:i32 = let %184
+        %186:bool = lte %x_409, %x_410
+        if %186 [t: $B50, f: $B51] {  # if_22
+          $B50: {  # true
             exit_if  # if_22
           }
-          %b51 = block {  # false
+          $B51: {  # false
             exit_loop  # loop_4
           }
         }
-        %x_413:i32 = load %low
+        %187:i32 = load %low
+        %x_413:i32 = let %187
         store %i_2, %x_413
-        loop [b: %b52, c: %b53] {  # loop_5
-          %b52 = block {  # body
-            %x_418:i32 = load %i_2
-            %x_419:i32 = load %high
-            %148:bool = lt %x_418, %x_419
-            if %148 [t: %b54, f: %b55] {  # if_23
-              %b54 = block {  # true
+        loop [b: $B52, c: $B53] {  # loop_5
+          $B52: {  # body
+            %189:i32 = load %i_2
+            %x_418:i32 = let %189
+            %191:i32 = load %high
+            %x_419:i32 = let %191
+            %193:bool = lt %x_418, %x_419
+            if %193 [t: $B54, f: $B55] {  # if_23
+              $B54: {  # true
                 exit_if  # if_23
               }
-              %b55 = block {  # false
+              $B55: {  # false
                 exit_loop  # loop_5
               }
             }
-            %x_422:i32 = load %i_2
+            %194:i32 = load %i_2
+            %x_422:i32 = let %194
             store %f_1, %x_422
-            %x_423:i32 = load %i_2
-            %x_424:i32 = load %m
-            %152:i32 = add %x_423, %x_424
-            %153:i32 = sub %152, 1i
-            store %mid_1, %153
-            %x_427:i32 = load %i_2
-            %x_428:i32 = load %m
-            %x_432:i32 = load %high
-            %157:i32 = mul 2i, %x_428
-            %158:i32 = add %x_427, %157
-            %159:i32 = sub %158, 1i
-            %160:i32 = min %159, %x_432
-            store %to_1, %160
-            %x_434:i32 = load %f_1
+            %196:i32 = load %i_2
+            %x_423:i32 = let %196
+            %198:i32 = load %m
+            %x_424:i32 = let %198
+            %200:i32 = add %x_423, %x_424
+            %201:i32 = sub %200, 1i
+            store %mid_1, %201
+            %202:i32 = load %i_2
+            %x_427:i32 = let %202
+            %204:i32 = load %m
+            %x_428:i32 = let %204
+            %206:i32 = load %high
+            %x_432:i32 = let %206
+            %208:i32 = mul 2i, %x_428
+            %209:i32 = add %x_427, %208
+            %210:i32 = sub %209, 1i
+            %211:i32 = min %210, %x_432
+            store %to_1, %211
+            %212:i32 = load %f_1
+            %x_434:i32 = let %212
             store %param, %x_434
-            %x_435:i32 = load %mid_1
+            %214:i32 = load %mid_1
+            %x_435:i32 = let %214
             store %param_1, %x_435
-            %x_436:i32 = load %to_1
+            %216:i32 = load %to_1
+            %x_436:i32 = let %216
             store %param_2, %x_436
-            %164:void = call %merge_i1_i1_i1_, %param, %param_1, %param_2
-            continue %b53
+            %218:void = call %merge_i1_i1_i1_, %param, %param_1, %param_2
+            continue  # -> $B53
           }
-          %b53 = block {  # continuing
-            %x_438:i32 = load %m
-            %x_440:i32 = load %i_2
-            %167:i32 = mul 2i, %x_438
-            %168:i32 = add %x_440, %167
-            store %i_2, %168
-            next_iteration %b52
+          $B53: {  # continuing
+            %219:i32 = load %m
+            %x_438:i32 = let %219
+            %221:i32 = load %i_2
+            %x_440:i32 = let %221
+            %223:i32 = mul 2i, %x_438
+            %224:i32 = add %x_440, %223
+            store %i_2, %224
+            next_iteration  # -> $B52
           }
         }
-        continue %b49
+        continue  # -> $B49
       }
-      %b49 = block {  # continuing
-        %x_442:i32 = load %m
-        %170:i32 = mul 2i, %x_442
-        store %m, %170
-        next_iteration %b48
+      $B49: {  # continuing
+        %225:i32 = load %m
+        %x_442:i32 = let %225
+        %227:i32 = mul 2i, %x_442
+        store %m, %227
+        next_iteration  # -> $B48
       }
     }
     ret
   }
 }
-%main_1 = func():void -> %b56 {
-  %b56 = block {
+%main_1 = func():void {
+  $B56: {
     %i_3:ptr<function, i32, read_write> = var
     %j_1:ptr<function, i32, read_write> = var
     %grey:ptr<function, f32, read_write> = var
-    %175:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
-    %x_88:f32 = load_vector_element %175, 0u
-    %177:i32 = convert %x_88
-    store %i_3, %177
-    loop [b: %b57, c: %b58] {  # loop_6
-      %b57 = block {  # body
-        %x_94:i32 = load %i_3
-        switch %x_94 [c: (9i, %b59), c: (8i, %b60), c: (7i, %b61), c: (6i, %b62), c: (5i, %b63), c: (4i, %b64), c: (3i, %b65), c: (2i, %b66), c: (1i, %b67), c: (0i, %b68), c: (default, %b69)] {  # switch_1
-          %b59 = block {  # case
-            %x_124:i32 = load %i_3
-            %180:ptr<private, i32, read_write> = access %data, %x_124
-            store %180, -5i
+    %232:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
+    %233:f32 = load_vector_element %232, 0u
+    %x_88:f32 = let %233
+    %235:i32 = call %tint_f32_to_i32, %x_88
+    store %i_3, %235
+    loop [b: $B57, c: $B58] {  # loop_6
+      $B57: {  # body
+        %237:i32 = load %i_3
+        %x_94:i32 = let %237
+        switch %x_94 [c: (9i, $B59), c: (8i, $B60), c: (7i, $B61), c: (6i, $B62), c: (5i, $B63), c: (4i, $B64), c: (3i, $B65), c: (2i, $B66), c: (1i, $B67), c: (0i, $B68), c: (default, $B69)] {  # switch_1
+          $B59: {  # case
+            %239:i32 = load %i_3
+            %x_124:i32 = let %239
+            %241:ptr<private, i32, read_write> = access %data, %x_124
+            store %241, -5i
             exit_switch  # switch_1
           }
-          %b60 = block {  # case
-            %x_122:i32 = load %i_3
-            %182:ptr<private, i32, read_write> = access %data, %x_122
-            store %182, -4i
+          $B60: {  # case
+            %242:i32 = load %i_3
+            %x_122:i32 = let %242
+            %244:ptr<private, i32, read_write> = access %data, %x_122
+            store %244, -4i
             exit_switch  # switch_1
           }
-          %b61 = block {  # case
-            %x_120:i32 = load %i_3
-            %184:ptr<private, i32, read_write> = access %data, %x_120
-            store %184, -3i
+          $B61: {  # case
+            %245:i32 = load %i_3
+            %x_120:i32 = let %245
+            %247:ptr<private, i32, read_write> = access %data, %x_120
+            store %247, -3i
             exit_switch  # switch_1
           }
-          %b62 = block {  # case
-            %x_118:i32 = load %i_3
-            %186:ptr<private, i32, read_write> = access %data, %x_118
-            store %186, -2i
+          $B62: {  # case
+            %248:i32 = load %i_3
+            %x_118:i32 = let %248
+            %250:ptr<private, i32, read_write> = access %data, %x_118
+            store %250, -2i
             exit_switch  # switch_1
           }
-          %b63 = block {  # case
-            %x_116:i32 = load %i_3
-            %188:ptr<private, i32, read_write> = access %data, %x_116
-            store %188, -1i
+          $B63: {  # case
+            %251:i32 = load %i_3
+            %x_116:i32 = let %251
+            %253:ptr<private, i32, read_write> = access %data, %x_116
+            store %253, -1i
             exit_switch  # switch_1
           }
-          %b64 = block {  # case
-            %x_114:i32 = load %i_3
-            %190:ptr<private, i32, read_write> = access %data, %x_114
-            store %190, 0i
+          $B64: {  # case
+            %254:i32 = load %i_3
+            %x_114:i32 = let %254
+            %256:ptr<private, i32, read_write> = access %data, %x_114
+            store %256, 0i
             exit_switch  # switch_1
           }
-          %b65 = block {  # case
-            %x_112:i32 = load %i_3
-            %192:ptr<private, i32, read_write> = access %data, %x_112
-            store %192, 1i
+          $B65: {  # case
+            %257:i32 = load %i_3
+            %x_112:i32 = let %257
+            %259:ptr<private, i32, read_write> = access %data, %x_112
+            store %259, 1i
             exit_switch  # switch_1
           }
-          %b66 = block {  # case
-            %x_110:i32 = load %i_3
-            %194:ptr<private, i32, read_write> = access %data, %x_110
-            store %194, 2i
+          $B66: {  # case
+            %260:i32 = load %i_3
+            %x_110:i32 = let %260
+            %262:ptr<private, i32, read_write> = access %data, %x_110
+            store %262, 2i
             exit_switch  # switch_1
           }
-          %b67 = block {  # case
-            %x_108:i32 = load %i_3
-            %196:ptr<private, i32, read_write> = access %data, %x_108
-            store %196, 3i
+          $B67: {  # case
+            %263:i32 = load %i_3
+            %x_108:i32 = let %263
+            %265:ptr<private, i32, read_write> = access %data, %x_108
+            store %265, 3i
             exit_switch  # switch_1
           }
-          %b68 = block {  # case
-            %x_106:i32 = load %i_3
-            %198:ptr<private, i32, read_write> = access %data, %x_106
-            store %198, 4i
+          $B68: {  # case
+            %266:i32 = load %i_3
+            %x_106:i32 = let %266
+            %268:ptr<private, i32, read_write> = access %data, %x_106
+            store %268, 4i
             exit_switch  # switch_1
           }
-          %b69 = block {  # case
+          $B69: {  # case
             exit_switch  # switch_1
           }
         }
-        %x_126:i32 = load %i_3
-        %200:i32 = add %x_126, 1i
-        store %i_3, %200
-        continue %b58
+        %269:i32 = load %i_3
+        %x_126:i32 = let %269
+        %271:i32 = add %x_126, 1i
+        store %i_3, %271
+        continue  # -> $B58
       }
-      %b58 = block {  # continuing
-        %x_128:i32 = load %i_3
-        %202:bool = lt %x_128, 10i
-        %203:bool = eq %202, false
-        break_if %203 %b57
+      $B58: {  # continuing
+        %272:i32 = load %i_3
+        %x_128:i32 = let %272
+        %274:bool = lt %x_128, 10i
+        %275:bool = eq %274, false
+        break_if %275  # -> [t: exit_loop loop_6, f: $B57]
       }
     }
     store %j_1, 0i
-    loop [b: %b70, c: %b71] {  # loop_7
-      %b70 = block {  # body
-        %x_134:i32 = load %j_1
-        %205:bool = lt %x_134, 10i
-        if %205 [t: %b72, f: %b73] {  # if_24
-          %b72 = block {  # true
+    loop [b: $B70, c: $B71] {  # loop_7
+      $B70: {  # body
+        %276:i32 = load %j_1
+        %x_134:i32 = let %276
+        %278:bool = lt %x_134, 10i
+        if %278 [t: $B72, f: $B73] {  # if_24
+          $B72: {  # true
             exit_if  # if_24
           }
-          %b73 = block {  # false
+          $B73: {  # false
             exit_loop  # loop_7
           }
         }
-        %x_137:i32 = load %j_1
-        %x_138:i32 = load %j_1
-        %208:ptr<private, i32, read_write> = access %data, %x_138
-        %x_140:i32 = load %208
-        %210:ptr<private, i32, read_write> = access %temp, %x_137
-        store %210, %x_140
-        continue %b71
+        %279:i32 = load %j_1
+        %x_137:i32 = let %279
+        %281:i32 = load %j_1
+        %x_138:i32 = let %281
+        %283:ptr<private, i32, read_write> = access %data, %x_138
+        %284:i32 = load %283
+        %x_140:i32 = let %284
+        %286:ptr<private, i32, read_write> = access %temp, %x_137
+        store %286, %x_140
+        continue  # -> $B71
       }
-      %b71 = block {  # continuing
-        %x_142:i32 = load %j_1
-        %212:i32 = add %x_142, 1i
-        store %j_1, %212
-        next_iteration %b70
+      $B71: {  # continuing
+        %287:i32 = load %j_1
+        %x_142:i32 = let %287
+        %289:i32 = add %x_142, 1i
+        store %j_1, %289
+        next_iteration  # -> $B70
       }
     }
-    %213:void = call %mergeSort_
-    %x_146:f32 = load_vector_element %gl_FragCoord, 1u
-    %215:i32 = convert %x_146
-    %216:bool = lt %215, 30i
-    if %216 [t: %b74, f: %b75] {  # if_25
-      %b74 = block {  # true
-        %217:ptr<private, i32, read_write> = access %data, 0i
-        %x_153:i32 = load %217
-        %219:f32 = convert %x_153
-        %220:f32 = div %219, 10.0f
-        %221:f32 = add 0.5f, %220
-        store %grey, %221
+    %290:void = call %mergeSort_
+    %291:f32 = load_vector_element %gl_FragCoord, 1u
+    %x_146:f32 = let %291
+    %293:i32 = call %tint_f32_to_i32, %x_146
+    %294:bool = lt %293, 30i
+    if %294 [t: $B74, f: $B75] {  # if_25
+      $B74: {  # true
+        %295:ptr<private, i32, read_write> = access %data, 0i
+        %296:i32 = load %295
+        %x_153:i32 = let %296
+        %298:f32 = convert %x_153
+        %299:f32 = div %298, 10.0f
+        %300:f32 = add 0.5f, %299
+        store %grey, %300
         exit_if  # if_25
       }
-      %b75 = block {  # false
-        %x_158:f32 = load_vector_element %gl_FragCoord, 1u
-        %223:i32 = convert %x_158
-        %224:bool = lt %223, 60i
-        if %224 [t: %b76, f: %b77] {  # if_26
-          %b76 = block {  # true
-            %225:ptr<private, i32, read_write> = access %data, 1i
-            %x_165:i32 = load %225
-            %227:f32 = convert %x_165
-            %228:f32 = div %227, 10.0f
-            %229:f32 = add 0.5f, %228
-            store %grey, %229
+      $B75: {  # false
+        %301:f32 = load_vector_element %gl_FragCoord, 1u
+        %x_158:f32 = let %301
+        %303:i32 = call %tint_f32_to_i32, %x_158
+        %304:bool = lt %303, 60i
+        if %304 [t: $B76, f: $B77] {  # if_26
+          $B76: {  # true
+            %305:ptr<private, i32, read_write> = access %data, 1i
+            %306:i32 = load %305
+            %x_165:i32 = let %306
+            %308:f32 = convert %x_165
+            %309:f32 = div %308, 10.0f
+            %310:f32 = add 0.5f, %309
+            store %grey, %310
             exit_if  # if_26
           }
-          %b77 = block {  # false
-            %x_170:f32 = load_vector_element %gl_FragCoord, 1u
-            %231:i32 = convert %x_170
-            %232:bool = lt %231, 90i
-            if %232 [t: %b78, f: %b79] {  # if_27
-              %b78 = block {  # true
-                %233:ptr<private, i32, read_write> = access %data, 2i
-                %x_177:i32 = load %233
-                %235:f32 = convert %x_177
-                %236:f32 = div %235, 10.0f
-                %237:f32 = add 0.5f, %236
-                store %grey, %237
+          $B77: {  # false
+            %311:f32 = load_vector_element %gl_FragCoord, 1u
+            %x_170:f32 = let %311
+            %313:i32 = call %tint_f32_to_i32, %x_170
+            %314:bool = lt %313, 90i
+            if %314 [t: $B78, f: $B79] {  # if_27
+              $B78: {  # true
+                %315:ptr<private, i32, read_write> = access %data, 2i
+                %316:i32 = load %315
+                %x_177:i32 = let %316
+                %318:f32 = convert %x_177
+                %319:f32 = div %318, 10.0f
+                %320:f32 = add 0.5f, %319
+                store %grey, %320
                 exit_if  # if_27
               }
-              %b79 = block {  # false
-                %x_182:f32 = load_vector_element %gl_FragCoord, 1u
-                %239:i32 = convert %x_182
-                %240:bool = lt %239, 120i
-                if %240 [t: %b80, f: %b81] {  # if_28
-                  %b80 = block {  # true
-                    %241:ptr<private, i32, read_write> = access %data, 3i
-                    %x_189:i32 = load %241
-                    %243:f32 = convert %x_189
-                    %244:f32 = div %243, 10.0f
-                    %245:f32 = add 0.5f, %244
-                    store %grey, %245
+              $B79: {  # false
+                %321:f32 = load_vector_element %gl_FragCoord, 1u
+                %x_182:f32 = let %321
+                %323:i32 = call %tint_f32_to_i32, %x_182
+                %324:bool = lt %323, 120i
+                if %324 [t: $B80, f: $B81] {  # if_28
+                  $B80: {  # true
+                    %325:ptr<private, i32, read_write> = access %data, 3i
+                    %326:i32 = load %325
+                    %x_189:i32 = let %326
+                    %328:f32 = convert %x_189
+                    %329:f32 = div %328, 10.0f
+                    %330:f32 = add 0.5f, %329
+                    store %grey, %330
                     exit_if  # if_28
                   }
-                  %b81 = block {  # false
-                    %x_194:f32 = load_vector_element %gl_FragCoord, 1u
-                    %247:i32 = convert %x_194
-                    %248:bool = lt %247, 150i
-                    if %248 [t: %b82, f: %b83] {  # if_29
-                      %b82 = block {  # true
-                        discard
+                  $B81: {  # false
+                    %331:f32 = load_vector_element %gl_FragCoord, 1u
+                    %x_194:f32 = let %331
+                    %333:i32 = call %tint_f32_to_i32, %x_194
+                    %334:bool = lt %333, 150i
+                    if %334 [t: $B82, f: $B83] {  # if_29
+                      $B82: {  # true
+                        store %continue_execution, false
                         exit_if  # if_29
                       }
-                      %b83 = block {  # false
-                        %x_201:f32 = load_vector_element %gl_FragCoord, 1u
-                        %250:i32 = convert %x_201
-                        %251:bool = lt %250, 180i
-                        if %251 [t: %b84, f: %b85] {  # if_30
-                          %b84 = block {  # true
-                            %252:ptr<private, i32, read_write> = access %data, 5i
-                            %x_208:i32 = load %252
-                            %254:f32 = convert %x_208
-                            %255:f32 = div %254, 10.0f
-                            %256:f32 = add 0.5f, %255
-                            store %grey, %256
+                      $B83: {  # false
+                        %335:f32 = load_vector_element %gl_FragCoord, 1u
+                        %x_201:f32 = let %335
+                        %337:i32 = call %tint_f32_to_i32, %x_201
+                        %338:bool = lt %337, 180i
+                        if %338 [t: $B84, f: $B85] {  # if_30
+                          $B84: {  # true
+                            %339:ptr<private, i32, read_write> = access %data, 5i
+                            %340:i32 = load %339
+                            %x_208:i32 = let %340
+                            %342:f32 = convert %x_208
+                            %343:f32 = div %342, 10.0f
+                            %344:f32 = add 0.5f, %343
+                            store %grey, %344
                             exit_if  # if_30
                           }
-                          %b85 = block {  # false
-                            %x_213:f32 = load_vector_element %gl_FragCoord, 1u
-                            %258:i32 = convert %x_213
-                            %259:bool = lt %258, 210i
-                            if %259 [t: %b86, f: %b87] {  # if_31
-                              %b86 = block {  # true
-                                %260:ptr<private, i32, read_write> = access %data, 6i
-                                %x_220:i32 = load %260
-                                %262:f32 = convert %x_220
-                                %263:f32 = div %262, 10.0f
-                                %264:f32 = add 0.5f, %263
-                                store %grey, %264
+                          $B85: {  # false
+                            %345:f32 = load_vector_element %gl_FragCoord, 1u
+                            %x_213:f32 = let %345
+                            %347:i32 = call %tint_f32_to_i32, %x_213
+                            %348:bool = lt %347, 210i
+                            if %348 [t: $B86, f: $B87] {  # if_31
+                              $B86: {  # true
+                                %349:ptr<private, i32, read_write> = access %data, 6i
+                                %350:i32 = load %349
+                                %x_220:i32 = let %350
+                                %352:f32 = convert %x_220
+                                %353:f32 = div %352, 10.0f
+                                %354:f32 = add 0.5f, %353
+                                store %grey, %354
                                 exit_if  # if_31
                               }
-                              %b87 = block {  # false
-                                %x_225:f32 = load_vector_element %gl_FragCoord, 1u
-                                %266:i32 = convert %x_225
-                                %267:bool = lt %266, 240i
-                                if %267 [t: %b88, f: %b89] {  # if_32
-                                  %b88 = block {  # true
-                                    %268:ptr<private, i32, read_write> = access %data, 7i
-                                    %x_232:i32 = load %268
-                                    %270:f32 = convert %x_232
-                                    %271:f32 = div %270, 10.0f
-                                    %272:f32 = add 0.5f, %271
-                                    store %grey, %272
+                              $B87: {  # false
+                                %355:f32 = load_vector_element %gl_FragCoord, 1u
+                                %x_225:f32 = let %355
+                                %357:i32 = call %tint_f32_to_i32, %x_225
+                                %358:bool = lt %357, 240i
+                                if %358 [t: $B88, f: $B89] {  # if_32
+                                  $B88: {  # true
+                                    %359:ptr<private, i32, read_write> = access %data, 7i
+                                    %360:i32 = load %359
+                                    %x_232:i32 = let %360
+                                    %362:f32 = convert %x_232
+                                    %363:f32 = div %362, 10.0f
+                                    %364:f32 = add 0.5f, %363
+                                    store %grey, %364
                                     exit_if  # if_32
                                   }
-                                  %b89 = block {  # false
-                                    %x_237:f32 = load_vector_element %gl_FragCoord, 1u
-                                    %274:i32 = convert %x_237
-                                    %275:bool = lt %274, 270i
-                                    if %275 [t: %b90, f: %b91] {  # if_33
-                                      %b90 = block {  # true
-                                        %276:ptr<private, i32, read_write> = access %data, 8i
-                                        %x_244:i32 = load %276
-                                        %278:f32 = convert %x_244
-                                        %279:f32 = div %278, 10.0f
-                                        %280:f32 = add 0.5f, %279
-                                        store %grey, %280
+                                  $B89: {  # false
+                                    %365:f32 = load_vector_element %gl_FragCoord, 1u
+                                    %x_237:f32 = let %365
+                                    %367:i32 = call %tint_f32_to_i32, %x_237
+                                    %368:bool = lt %367, 270i
+                                    if %368 [t: $B90, f: $B91] {  # if_33
+                                      $B90: {  # true
+                                        %369:ptr<private, i32, read_write> = access %data, 8i
+                                        %370:i32 = load %369
+                                        %x_244:i32 = let %370
+                                        %372:f32 = convert %x_244
+                                        %373:f32 = div %372, 10.0f
+                                        %374:f32 = add 0.5f, %373
+                                        store %grey, %374
                                         exit_if  # if_33
                                       }
-                                      %b91 = block {  # false
-                                        discard
+                                      $B91: {  # false
+                                        store %continue_execution, false
                                         exit_if  # if_33
                                       }
                                     }
@@ -716,23 +809,42 @@
         exit_if  # if_25
       }
     }
-    %x_248:f32 = load %grey
-    %x_249:vec3<f32> = construct %x_248, %x_248, %x_248
-    %283:f32 = access %x_249, 0u
-    %284:f32 = access %x_249, 1u
-    %285:f32 = access %x_249, 2u
-    %286:vec4<f32> = construct %283, %284, %285, 1.0f
-    store %x_GLF_color, %286
+    %375:f32 = load %grey
+    %x_248:f32 = let %375
+    %377:vec3<f32> = construct %x_248, %x_248, %x_248
+    %x_249:vec3<f32> = let %377
+    %379:f32 = access %x_249, 0u
+    %380:f32 = access %x_249, 1u
+    %381:f32 = access %x_249, 2u
+    %382:vec4<f32> = construct %379, %380, %381, 1.0f
+    store %x_GLF_color, %382
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b92 {
-  %b92 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B92: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %289:void = call %main_1
-    %290:vec4<f32> = load %x_GLF_color
-    %291:main_out = construct %290
-    ret %291
+    %385:void = call %main_1
+    %386:vec4<f32> = load %x_GLF_color
+    %387:main_out = construct %386
+    %388:bool = load %continue_execution
+    %389:bool = eq %388, false
+    if %389 [t: $B93] {  # if_34
+      $B93: {  # true
+        terminate_invocation
+      }
+    }
+    ret %387
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B94: {
+    %391:i32 = convert %value
+    %392:bool = gte %value, -2147483648.0f
+    %393:i32 = select -2147483648i, %391, %392
+    %394:bool = lte %value, 2147483520.0f
+    %395:i32 = select 2147483647i, %393, %394
+    ret %395
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/1.spvasm.expected.ir.msl
index 6e8d8a0..fc12253 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/1.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,158 +8,166 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %data:ptr<private, array<i32, 10>, read_write> = var
   %temp:ptr<private, array<i32, 10>, read_write> = var
   %x_28:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%merge_i1_i1_i1_ = func(%f:ptr<function, i32, read_write>, %mid:ptr<function, i32, read_write>, %to:ptr<function, i32, read_write>):void -> %b2 {
-  %b2 = block {
+%merge_i1_i1_i1_ = func(%f:ptr<function, i32, read_write>, %mid:ptr<function, i32, read_write>, %to:ptr<function, i32, read_write>):void {
+  $B2: {
     %k:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %j:ptr<function, i32, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
-    %14:i32 = load %f
-    store %k, %14
     %15:i32 = load %f
-    store %i, %15
-    %16:i32 = load %mid
-    %17:i32 = add %16, 1i
-    store %j, %17
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %18:i32 = load %i
-        %19:i32 = load %mid
-        %20:bool = lte %18, %19
-        %21:i32 = load %j
-        %22:i32 = load %to
-        %23:bool = lte %21, %22
-        %24:bool = and %20, %23
-        if %24 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    store %k, %15
+    %16:i32 = load %f
+    store %i, %16
+    %17:i32 = load %mid
+    %18:i32 = add %17, 1i
+    store %j, %18
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %19:i32 = load %i
+        %20:i32 = load %mid
+        %21:bool = lte %19, %20
+        %22:i32 = load %j
+        %23:i32 = load %to
+        %24:bool = lte %22, %23
+        %25:bool = and %21, %24
+        if %25 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %25:i32 = load %i
-        %26:ptr<private, i32, read_write> = access %data, %25
-        %27:i32 = load %26
-        %28:i32 = load %j
-        %29:ptr<private, i32, read_write> = access %data, %28
-        %30:i32 = load %29
-        %31:bool = lt %27, %30
-        if %31 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
-            %x_329:i32 = load %k
+        %26:i32 = load %i
+        %27:ptr<private, i32, read_write> = access %data, %26
+        %28:i32 = load %27
+        %29:i32 = load %j
+        %30:ptr<private, i32, read_write> = access %data, %29
+        %31:i32 = load %30
+        %32:bool = lt %28, %31
+        if %32 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
             %33:i32 = load %k
-            %34:i32 = add %33, 1i
-            store %k, %34
-            %x_331:i32 = load %i
-            %36:i32 = load %i
-            %37:i32 = add %36, 1i
-            store %i, %37
-            %38:ptr<private, i32, read_write> = access %temp, %x_329
-            %39:ptr<private, i32, read_write> = access %data, %x_331
-            %40:i32 = load %39
-            store %38, %40
+            %x_329:i32 = let %33
+            %35:i32 = load %k
+            %36:i32 = add %35, 1i
+            store %k, %36
+            %37:i32 = load %i
+            %x_331:i32 = let %37
+            %39:i32 = load %i
+            %40:i32 = add %39, 1i
+            store %i, %40
+            %41:ptr<private, i32, read_write> = access %temp, %x_329
+            %42:ptr<private, i32, read_write> = access %data, %x_331
+            %43:i32 = load %42
+            store %41, %43
             exit_if  # if_2
           }
-          %b8 = block {  # false
-            %x_336:i32 = load %k
-            %42:i32 = load %k
-            %43:i32 = add %42, 1i
-            store %k, %43
-            %x_338:i32 = load %j
-            %45:i32 = load %j
-            %46:i32 = add %45, 1i
-            store %j, %46
-            %47:ptr<private, i32, read_write> = access %temp, %x_336
-            %48:ptr<private, i32, read_write> = access %data, %x_338
-            %49:i32 = load %48
-            store %47, %49
+          $B8: {  # false
+            %44:i32 = load %k
+            %x_336:i32 = let %44
+            %46:i32 = load %k
+            %47:i32 = add %46, 1i
+            store %k, %47
+            %48:i32 = load %j
+            %x_338:i32 = let %48
+            %50:i32 = load %j
+            %51:i32 = add %50, 1i
+            store %j, %51
+            %52:ptr<private, i32, read_write> = access %temp, %x_336
+            %53:ptr<private, i32, read_write> = access %data, %x_338
+            %54:i32 = load %53
+            store %52, %54
             exit_if  # if_2
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
-    loop [b: %b9, c: %b10] {  # loop_2
-      %b9 = block {  # body
-        %50:i32 = load %i
-        %51:bool = lt %50, 10i
-        %52:i32 = load %i
-        %53:i32 = load %mid
-        %54:bool = lte %52, %53
-        %55:bool = and %51, %54
-        if %55 [t: %b11, f: %b12] {  # if_3
-          %b11 = block {  # true
+    loop [b: $B9, c: $B10] {  # loop_2
+      $B9: {  # body
+        %55:i32 = load %i
+        %56:bool = lt %55, 10i
+        %57:i32 = load %i
+        %58:i32 = load %mid
+        %59:bool = lte %57, %58
+        %60:bool = and %56, %59
+        if %60 [t: $B11, f: $B12] {  # if_3
+          $B11: {  # true
             exit_if  # if_3
           }
-          %b12 = block {  # false
+          $B12: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_354:i32 = load %k
-        %57:i32 = load %k
-        %58:i32 = add %57, 1i
-        store %k, %58
-        %x_356:i32 = load %i
-        %60:i32 = load %i
-        %61:i32 = add %60, 1i
-        store %i, %61
-        %62:ptr<private, i32, read_write> = access %temp, %x_354
-        %63:ptr<private, i32, read_write> = access %data, %x_356
-        %64:i32 = load %63
-        store %62, %64
-        continue %b10
+        %61:i32 = load %k
+        %x_354:i32 = let %61
+        %63:i32 = load %k
+        %64:i32 = add %63, 1i
+        store %k, %64
+        %65:i32 = load %i
+        %x_356:i32 = let %65
+        %67:i32 = load %i
+        %68:i32 = add %67, 1i
+        store %i, %68
+        %69:ptr<private, i32, read_write> = access %temp, %x_354
+        %70:ptr<private, i32, read_write> = access %data, %x_356
+        %71:i32 = load %70
+        store %69, %71
+        continue  # -> $B10
       }
-      %b10 = block {  # continuing
-        next_iteration %b9
+      $B10: {  # continuing
+        next_iteration  # -> $B9
       }
     }
-    %65:i32 = load %f
-    store %i_1, %65
-    loop [b: %b13, c: %b14] {  # loop_3
-      %b13 = block {  # body
-        %66:i32 = load %i_1
-        %67:i32 = load %to
-        %68:bool = lte %66, %67
-        if %68 [t: %b15, f: %b16] {  # if_4
-          %b15 = block {  # true
+    %72:i32 = load %f
+    store %i_1, %72
+    loop [b: $B13, c: $B14] {  # loop_3
+      $B13: {  # body
+        %73:i32 = load %i_1
+        %74:i32 = load %to
+        %75:bool = lte %73, %74
+        if %75 [t: $B15, f: $B16] {  # if_4
+          $B15: {  # true
             exit_if  # if_4
           }
-          %b16 = block {  # false
+          $B16: {  # false
             exit_loop  # loop_3
           }
         }
-        %x_370:i32 = load %i_1
-        %70:ptr<private, i32, read_write> = access %data, %x_370
-        %71:i32 = load %i_1
-        %72:ptr<private, i32, read_write> = access %temp, %71
-        %73:i32 = load %72
-        store %70, %73
-        continue %b14
+        %76:i32 = load %i_1
+        %x_370:i32 = let %76
+        %78:ptr<private, i32, read_write> = access %data, %x_370
+        %79:i32 = load %i_1
+        %80:ptr<private, i32, read_write> = access %temp, %79
+        %81:i32 = load %80
+        store %78, %81
+        continue  # -> $B14
       }
-      %b14 = block {  # continuing
-        %74:i32 = load %i_1
-        %75:i32 = add %74, 1i
-        store %i_1, %75
-        next_iteration %b13
+      $B14: {  # continuing
+        %82:i32 = load %i_1
+        %83:i32 = add %82, 1i
+        store %i_1, %83
+        next_iteration  # -> $B13
       }
     }
     ret
   }
 }
-%main_1 = func():void -> %b17 {
-  %b17 = block {
+%main_1 = func():void {
+  $B17: {
     %x_85:ptr<function, i32, read_write> = var
     %x_86:ptr<function, i32, read_write> = var
     %x_87:ptr<function, i32, read_write> = var
@@ -173,316 +181,332 @@
     %i_3:ptr<function, i32, read_write> = var
     %j_1:ptr<function, i32, read_write> = var
     %grey:ptr<function, f32, read_write> = var
-    %90:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
-    %91:f32 = load_vector_element %90, 0u
-    %92:i32 = convert %91
-    store %i_3, %92
-    loop [b: %b18, c: %b19] {  # loop_4
-      %b18 = block {  # body
-        %x_102:i32 = load %i_3
-        switch %x_102 [c: (9i, %b20), c: (8i, %b21), c: (7i, %b22), c: (6i, %b23), c: (5i, %b24), c: (4i, %b25), c: (3i, %b26), c: (2i, %b27), c: (1i, %b28), c: (0i, %b29), c: (default, %b30)] {  # switch_1
-          %b20 = block {  # case
-            %x_132:i32 = load %i_3
-            %95:ptr<private, i32, read_write> = access %data, %x_132
-            store %95, -5i
+    %98:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
+    %99:f32 = load_vector_element %98, 0u
+    %100:i32 = call %tint_f32_to_i32, %99
+    store %i_3, %100
+    loop [b: $B18, c: $B19] {  # loop_4
+      $B18: {  # body
+        %102:i32 = load %i_3
+        %x_102:i32 = let %102
+        switch %x_102 [c: (9i, $B20), c: (8i, $B21), c: (7i, $B22), c: (6i, $B23), c: (5i, $B24), c: (4i, $B25), c: (3i, $B26), c: (2i, $B27), c: (1i, $B28), c: (0i, $B29), c: (default, $B30)] {  # switch_1
+          $B20: {  # case
+            %104:i32 = load %i_3
+            %x_132:i32 = let %104
+            %106:ptr<private, i32, read_write> = access %data, %x_132
+            store %106, -5i
             exit_switch  # switch_1
           }
-          %b21 = block {  # case
-            %x_130:i32 = load %i_3
-            %97:ptr<private, i32, read_write> = access %data, %x_130
-            store %97, -4i
+          $B21: {  # case
+            %107:i32 = load %i_3
+            %x_130:i32 = let %107
+            %109:ptr<private, i32, read_write> = access %data, %x_130
+            store %109, -4i
             exit_switch  # switch_1
           }
-          %b22 = block {  # case
-            %x_128:i32 = load %i_3
-            %99:ptr<private, i32, read_write> = access %data, %x_128
-            store %99, -3i
+          $B22: {  # case
+            %110:i32 = load %i_3
+            %x_128:i32 = let %110
+            %112:ptr<private, i32, read_write> = access %data, %x_128
+            store %112, -3i
             exit_switch  # switch_1
           }
-          %b23 = block {  # case
-            %x_126:i32 = load %i_3
-            %101:ptr<private, i32, read_write> = access %data, %x_126
-            store %101, -2i
+          $B23: {  # case
+            %113:i32 = load %i_3
+            %x_126:i32 = let %113
+            %115:ptr<private, i32, read_write> = access %data, %x_126
+            store %115, -2i
             exit_switch  # switch_1
           }
-          %b24 = block {  # case
-            %x_124:i32 = load %i_3
-            %103:ptr<private, i32, read_write> = access %data, %x_124
-            store %103, -1i
+          $B24: {  # case
+            %116:i32 = load %i_3
+            %x_124:i32 = let %116
+            %118:ptr<private, i32, read_write> = access %data, %x_124
+            store %118, -1i
             exit_switch  # switch_1
           }
-          %b25 = block {  # case
-            %x_122:i32 = load %i_3
-            %105:ptr<private, i32, read_write> = access %data, %x_122
-            store %105, 0i
+          $B25: {  # case
+            %119:i32 = load %i_3
+            %x_122:i32 = let %119
+            %121:ptr<private, i32, read_write> = access %data, %x_122
+            store %121, 0i
             exit_switch  # switch_1
           }
-          %b26 = block {  # case
-            %x_120:i32 = load %i_3
-            %107:ptr<private, i32, read_write> = access %data, %x_120
-            store %107, 1i
+          $B26: {  # case
+            %122:i32 = load %i_3
+            %x_120:i32 = let %122
+            %124:ptr<private, i32, read_write> = access %data, %x_120
+            store %124, 1i
             exit_switch  # switch_1
           }
-          %b27 = block {  # case
-            %x_118:i32 = load %i_3
-            %109:ptr<private, i32, read_write> = access %data, %x_118
-            store %109, 2i
+          $B27: {  # case
+            %125:i32 = load %i_3
+            %x_118:i32 = let %125
+            %127:ptr<private, i32, read_write> = access %data, %x_118
+            store %127, 2i
             exit_switch  # switch_1
           }
-          %b28 = block {  # case
-            %x_116:i32 = load %i_3
-            %111:ptr<private, i32, read_write> = access %data, %x_116
-            store %111, 3i
+          $B28: {  # case
+            %128:i32 = load %i_3
+            %x_116:i32 = let %128
+            %130:ptr<private, i32, read_write> = access %data, %x_116
+            store %130, 3i
             exit_switch  # switch_1
           }
-          %b29 = block {  # case
-            %x_114:i32 = load %i_3
-            %113:ptr<private, i32, read_write> = access %data, %x_114
-            store %113, 4i
+          $B29: {  # case
+            %131:i32 = load %i_3
+            %x_114:i32 = let %131
+            %133:ptr<private, i32, read_write> = access %data, %x_114
+            store %133, 4i
             exit_switch  # switch_1
           }
-          %b30 = block {  # case
+          $B30: {  # case
             exit_switch  # switch_1
           }
         }
-        %114:i32 = load %i_3
-        %115:i32 = add %114, 1i
-        store %i_3, %115
-        continue %b19
+        %134:i32 = load %i_3
+        %135:i32 = add %134, 1i
+        store %i_3, %135
+        continue  # -> $B19
       }
-      %b19 = block {  # continuing
-        %x_136:i32 = load %i_3
-        %117:bool = lt %x_136, 10i
-        %118:bool = eq %117, false
-        break_if %118 %b18
+      $B19: {  # continuing
+        %136:i32 = load %i_3
+        %x_136:i32 = let %136
+        %138:bool = lt %x_136, 10i
+        %139:bool = eq %138, false
+        break_if %139  # -> [t: exit_loop loop_4, f: $B18]
       }
     }
     store %j_1, 0i
-    loop [b: %b31, c: %b32] {  # loop_5
-      %b31 = block {  # body
-        %119:i32 = load %j_1
-        %120:bool = lt %119, 10i
-        if %120 [t: %b33, f: %b34] {  # if_5
-          %b33 = block {  # true
+    loop [b: $B31, c: $B32] {  # loop_5
+      $B31: {  # body
+        %140:i32 = load %j_1
+        %141:bool = lt %140, 10i
+        if %141 [t: $B33, f: $B34] {  # if_5
+          $B33: {  # true
             exit_if  # if_5
           }
-          %b34 = block {  # false
+          $B34: {  # false
             exit_loop  # loop_5
           }
         }
-        %x_145:i32 = load %j_1
-        %122:ptr<private, i32, read_write> = access %temp, %x_145
-        %123:i32 = load %j_1
-        %124:ptr<private, i32, read_write> = access %data, %123
-        %125:i32 = load %124
-        store %122, %125
-        continue %b32
+        %142:i32 = load %j_1
+        %x_145:i32 = let %142
+        %144:ptr<private, i32, read_write> = access %temp, %x_145
+        %145:i32 = load %j_1
+        %146:ptr<private, i32, read_write> = access %data, %145
+        %147:i32 = load %146
+        store %144, %147
+        continue  # -> $B32
       }
-      %b32 = block {  # continuing
-        %126:i32 = load %j_1
-        %127:i32 = add %126, 1i
-        store %j_1, %127
-        next_iteration %b31
+      $B32: {  # continuing
+        %148:i32 = load %j_1
+        %149:i32 = add %148, 1i
+        store %j_1, %149
+        next_iteration  # -> $B31
       }
     }
     store %x_94, 0i
     store %x_93, 9i
     store %x_92, 1i
-    loop [b: %b35, c: %b36] {  # loop_6
-      %b35 = block {  # body
-        %128:i32 = load %x_92
-        %129:i32 = load %x_93
-        %130:bool = lte %128, %129
-        if %130 [t: %b37, f: %b38] {  # if_6
-          %b37 = block {  # true
+    loop [b: $B35, c: $B36] {  # loop_6
+      $B35: {  # body
+        %150:i32 = load %x_92
+        %151:i32 = load %x_93
+        %152:bool = lte %150, %151
+        if %152 [t: $B37, f: $B38] {  # if_6
+          $B37: {  # true
             exit_if  # if_6
           }
-          %b38 = block {  # false
+          $B38: {  # false
             exit_loop  # loop_6
           }
         }
-        %131:i32 = load %x_94
-        store %x_91, %131
-        loop [b: %b39, c: %b40] {  # loop_7
-          %b39 = block {  # body
-            %132:i32 = load %x_91
-            %133:i32 = load %x_93
-            %134:bool = lt %132, %133
-            if %134 [t: %b41, f: %b42] {  # if_7
-              %b41 = block {  # true
+        %153:i32 = load %x_94
+        store %x_91, %153
+        loop [b: $B39, c: $B40] {  # loop_7
+          $B39: {  # body
+            %154:i32 = load %x_91
+            %155:i32 = load %x_93
+            %156:bool = lt %154, %155
+            if %156 [t: $B41, f: $B42] {  # if_7
+              $B41: {  # true
                 exit_if  # if_7
               }
-              %b42 = block {  # false
+              $B42: {  # false
                 exit_loop  # loop_7
               }
             }
-            %135:i32 = load %x_91
-            store %x_90, %135
-            %x_170:i32 = load %x_91
-            %x_171:i32 = load %x_92
-            %x_173:array<i32, 10> = load %data
+            %157:i32 = load %x_91
+            store %x_90, %157
+            %158:i32 = load %x_91
+            %x_170:i32 = let %158
+            %160:i32 = load %x_92
+            %x_171:i32 = let %160
+            %162:array<i32, 10> = load %data
+            %x_173:array<i32, 10> = let %162
             store %data, array<i32, 10>(0i)
             store %data, %x_173
-            %139:i32 = add %x_170, %x_171
-            %140:i32 = sub %139, 1i
-            store %x_89, %140
-            %141:i32 = load %x_91
-            %142:i32 = load %x_92
-            %143:i32 = mul 2i, %142
-            %144:i32 = add %141, %143
-            %145:i32 = sub %144, 1i
-            %146:i32 = load %x_93
-            %147:i32 = min %145, %146
-            store %x_88, %147
-            %148:i32 = load %x_90
-            store %x_87, %148
-            %149:i32 = load %x_89
-            store %x_86, %149
-            %150:i32 = load %x_88
-            store %x_85, %150
-            %151:void = call %merge_i1_i1_i1_, %x_87, %x_86, %x_85
-            continue %b40
+            %164:i32 = add %x_170, %x_171
+            %165:i32 = sub %164, 1i
+            store %x_89, %165
+            %166:i32 = load %x_91
+            %167:i32 = load %x_92
+            %168:i32 = mul 2i, %167
+            %169:i32 = add %166, %168
+            %170:i32 = sub %169, 1i
+            %171:i32 = load %x_93
+            %172:i32 = min %170, %171
+            store %x_88, %172
+            %173:i32 = load %x_90
+            store %x_87, %173
+            %174:i32 = load %x_89
+            store %x_86, %174
+            %175:i32 = load %x_88
+            store %x_85, %175
+            %176:void = call %merge_i1_i1_i1_, %x_87, %x_86, %x_85
+            continue  # -> $B40
           }
-          %b40 = block {  # continuing
-            %152:i32 = load %x_91
-            %153:i32 = load %x_92
-            %154:i32 = mul 2i, %153
-            %155:i32 = add %152, %154
-            store %x_91, %155
-            next_iteration %b39
+          $B40: {  # continuing
+            %177:i32 = load %x_91
+            %178:i32 = load %x_92
+            %179:i32 = mul 2i, %178
+            %180:i32 = add %177, %179
+            store %x_91, %180
+            next_iteration  # -> $B39
           }
         }
-        continue %b36
+        continue  # -> $B36
       }
-      %b36 = block {  # continuing
-        %156:i32 = load %x_92
-        %157:i32 = mul 2i, %156
-        store %x_92, %157
-        next_iteration %b35
+      $B36: {  # continuing
+        %181:i32 = load %x_92
+        %182:i32 = mul 2i, %181
+        store %x_92, %182
+        next_iteration  # -> $B35
       }
     }
-    %158:f32 = load_vector_element %gl_FragCoord, 1u
-    %159:i32 = convert %158
-    %160:bool = lt %159, 30i
-    if %160 [t: %b43, f: %b44] {  # if_8
-      %b43 = block {  # true
-        %161:ptr<private, i32, read_write> = access %data, 0i
-        %162:i32 = load %161
-        %163:f32 = convert %162
-        %164:f32 = div %163, 10.0f
-        %165:f32 = add 0.5f, %164
-        store %grey, %165
+    %183:f32 = load_vector_element %gl_FragCoord, 1u
+    %184:i32 = call %tint_f32_to_i32, %183
+    %185:bool = lt %184, 30i
+    if %185 [t: $B43, f: $B44] {  # if_8
+      $B43: {  # true
+        %186:ptr<private, i32, read_write> = access %data, 0i
+        %187:i32 = load %186
+        %188:f32 = convert %187
+        %189:f32 = div %188, 10.0f
+        %190:f32 = add 0.5f, %189
+        store %grey, %190
         exit_if  # if_8
       }
-      %b44 = block {  # false
-        %166:f32 = load_vector_element %gl_FragCoord, 1u
-        %167:i32 = convert %166
-        %168:bool = lt %167, 60i
-        if %168 [t: %b45, f: %b46] {  # if_9
-          %b45 = block {  # true
-            %169:ptr<private, i32, read_write> = access %data, 1i
-            %170:i32 = load %169
-            %171:f32 = convert %170
-            %172:f32 = div %171, 10.0f
-            %173:f32 = add 0.5f, %172
-            store %grey, %173
+      $B44: {  # false
+        %191:f32 = load_vector_element %gl_FragCoord, 1u
+        %192:i32 = call %tint_f32_to_i32, %191
+        %193:bool = lt %192, 60i
+        if %193 [t: $B45, f: $B46] {  # if_9
+          $B45: {  # true
+            %194:ptr<private, i32, read_write> = access %data, 1i
+            %195:i32 = load %194
+            %196:f32 = convert %195
+            %197:f32 = div %196, 10.0f
+            %198:f32 = add 0.5f, %197
+            store %grey, %198
             exit_if  # if_9
           }
-          %b46 = block {  # false
-            %174:f32 = load_vector_element %gl_FragCoord, 1u
-            %175:i32 = convert %174
-            %176:bool = lt %175, 90i
-            if %176 [t: %b47, f: %b48] {  # if_10
-              %b47 = block {  # true
-                %177:ptr<private, i32, read_write> = access %data, 2i
-                %178:i32 = load %177
-                %179:f32 = convert %178
-                %180:f32 = div %179, 10.0f
-                %181:f32 = add 0.5f, %180
-                store %grey, %181
+          $B46: {  # false
+            %199:f32 = load_vector_element %gl_FragCoord, 1u
+            %200:i32 = call %tint_f32_to_i32, %199
+            %201:bool = lt %200, 90i
+            if %201 [t: $B47, f: $B48] {  # if_10
+              $B47: {  # true
+                %202:ptr<private, i32, read_write> = access %data, 2i
+                %203:i32 = load %202
+                %204:f32 = convert %203
+                %205:f32 = div %204, 10.0f
+                %206:f32 = add 0.5f, %205
+                store %grey, %206
                 exit_if  # if_10
               }
-              %b48 = block {  # false
-                %182:f32 = load_vector_element %gl_FragCoord, 1u
-                %183:i32 = convert %182
-                %184:bool = lt %183, 120i
-                if %184 [t: %b49, f: %b50] {  # if_11
-                  %b49 = block {  # true
-                    %185:ptr<private, i32, read_write> = access %data, 3i
-                    %186:i32 = load %185
-                    %187:f32 = convert %186
-                    %188:f32 = div %187, 10.0f
-                    %189:f32 = add 0.5f, %188
-                    store %grey, %189
+              $B48: {  # false
+                %207:f32 = load_vector_element %gl_FragCoord, 1u
+                %208:i32 = call %tint_f32_to_i32, %207
+                %209:bool = lt %208, 120i
+                if %209 [t: $B49, f: $B50] {  # if_11
+                  $B49: {  # true
+                    %210:ptr<private, i32, read_write> = access %data, 3i
+                    %211:i32 = load %210
+                    %212:f32 = convert %211
+                    %213:f32 = div %212, 10.0f
+                    %214:f32 = add 0.5f, %213
+                    store %grey, %214
                     exit_if  # if_11
                   }
-                  %b50 = block {  # false
-                    %190:f32 = load_vector_element %gl_FragCoord, 1u
-                    %191:i32 = convert %190
-                    %192:bool = lt %191, 150i
-                    if %192 [t: %b51, f: %b52] {  # if_12
-                      %b51 = block {  # true
-                        discard
+                  $B50: {  # false
+                    %215:f32 = load_vector_element %gl_FragCoord, 1u
+                    %216:i32 = call %tint_f32_to_i32, %215
+                    %217:bool = lt %216, 150i
+                    if %217 [t: $B51, f: $B52] {  # if_12
+                      $B51: {  # true
+                        store %continue_execution, false
                         exit_if  # if_12
                       }
-                      %b52 = block {  # false
-                        %193:f32 = load_vector_element %gl_FragCoord, 1u
-                        %194:i32 = convert %193
-                        %195:bool = lt %194, 180i
-                        if %195 [t: %b53, f: %b54] {  # if_13
-                          %b53 = block {  # true
-                            %196:ptr<private, i32, read_write> = access %data, 5i
-                            %197:i32 = load %196
-                            %198:f32 = convert %197
-                            %199:f32 = div %198, 10.0f
-                            %200:f32 = add 0.5f, %199
-                            store %grey, %200
+                      $B52: {  # false
+                        %218:f32 = load_vector_element %gl_FragCoord, 1u
+                        %219:i32 = call %tint_f32_to_i32, %218
+                        %220:bool = lt %219, 180i
+                        if %220 [t: $B53, f: $B54] {  # if_13
+                          $B53: {  # true
+                            %221:ptr<private, i32, read_write> = access %data, 5i
+                            %222:i32 = load %221
+                            %223:f32 = convert %222
+                            %224:f32 = div %223, 10.0f
+                            %225:f32 = add 0.5f, %224
+                            store %grey, %225
                             exit_if  # if_13
                           }
-                          %b54 = block {  # false
-                            %201:f32 = load_vector_element %gl_FragCoord, 1u
-                            %202:i32 = convert %201
-                            %203:bool = lt %202, 210i
-                            if %203 [t: %b55, f: %b56] {  # if_14
-                              %b55 = block {  # true
-                                %204:ptr<private, i32, read_write> = access %data, 6i
-                                %205:i32 = load %204
-                                %206:f32 = convert %205
-                                %207:f32 = div %206, 10.0f
-                                %208:f32 = add 0.5f, %207
-                                store %grey, %208
+                          $B54: {  # false
+                            %226:f32 = load_vector_element %gl_FragCoord, 1u
+                            %227:i32 = call %tint_f32_to_i32, %226
+                            %228:bool = lt %227, 210i
+                            if %228 [t: $B55, f: $B56] {  # if_14
+                              $B55: {  # true
+                                %229:ptr<private, i32, read_write> = access %data, 6i
+                                %230:i32 = load %229
+                                %231:f32 = convert %230
+                                %232:f32 = div %231, 10.0f
+                                %233:f32 = add 0.5f, %232
+                                store %grey, %233
                                 exit_if  # if_14
                               }
-                              %b56 = block {  # false
-                                %209:f32 = load_vector_element %gl_FragCoord, 1u
-                                %210:i32 = convert %209
-                                %211:bool = lt %210, 240i
-                                if %211 [t: %b57, f: %b58] {  # if_15
-                                  %b57 = block {  # true
-                                    %212:ptr<private, i32, read_write> = access %data, 7i
-                                    %213:i32 = load %212
-                                    %214:f32 = convert %213
-                                    %215:f32 = div %214, 10.0f
-                                    %216:f32 = add 0.5f, %215
-                                    store %grey, %216
+                              $B56: {  # false
+                                %234:f32 = load_vector_element %gl_FragCoord, 1u
+                                %235:i32 = call %tint_f32_to_i32, %234
+                                %236:bool = lt %235, 240i
+                                if %236 [t: $B57, f: $B58] {  # if_15
+                                  $B57: {  # true
+                                    %237:ptr<private, i32, read_write> = access %data, 7i
+                                    %238:i32 = load %237
+                                    %239:f32 = convert %238
+                                    %240:f32 = div %239, 10.0f
+                                    %241:f32 = add 0.5f, %240
+                                    store %grey, %241
                                     exit_if  # if_15
                                   }
-                                  %b58 = block {  # false
-                                    %217:f32 = load_vector_element %gl_FragCoord, 1u
-                                    %218:i32 = convert %217
-                                    %219:bool = lt %218, 270i
-                                    if %219 [t: %b59, f: %b60] {  # if_16
-                                      %b59 = block {  # true
-                                        %220:ptr<private, i32, read_write> = access %data, 8i
-                                        %221:i32 = load %220
-                                        %222:f32 = convert %221
-                                        %223:f32 = div %222, 10.0f
-                                        %224:f32 = add 0.5f, %223
-                                        store %grey, %224
+                                  $B58: {  # false
+                                    %242:f32 = load_vector_element %gl_FragCoord, 1u
+                                    %243:i32 = call %tint_f32_to_i32, %242
+                                    %244:bool = lt %243, 270i
+                                    if %244 [t: $B59, f: $B60] {  # if_16
+                                      $B59: {  # true
+                                        %245:ptr<private, i32, read_write> = access %data, 8i
+                                        %246:i32 = load %245
+                                        %247:f32 = convert %246
+                                        %248:f32 = div %247, 10.0f
+                                        %249:f32 = add 0.5f, %248
+                                        store %grey, %249
                                         exit_if  # if_16
                                       }
-                                      %b60 = block {  # false
-                                        discard
+                                      $B60: {  # false
+                                        store %continue_execution, false
                                         exit_if  # if_16
                                       }
                                     }
@@ -510,27 +534,35 @@
         exit_if  # if_8
       }
     }
-    %225:f32 = load %grey
-    %x_297:vec3<f32> = construct %225
-    %227:f32 = access %x_297, 0u
-    %228:f32 = access %x_297, 1u
-    %229:f32 = access %x_297, 2u
-    %230:vec4<f32> = construct %227, %228, %229, 1.0f
-    store %x_GLF_color, %230
+    %250:f32 = load %grey
+    %251:vec3<f32> = construct %250
+    %x_297:vec3<f32> = let %251
+    %253:f32 = access %x_297, 0u
+    %254:f32 = access %x_297, 1u
+    %255:f32 = access %x_297, 2u
+    %256:vec4<f32> = construct %253, %254, %255, 1.0f
+    store %x_GLF_color, %256
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b61 {
-  %b61 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B61: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %233:void = call %main_1
-    %234:vec4<f32> = load %x_GLF_color
-    %235:main_out = construct %234
-    ret %235
+    %259:void = call %main_1
+    %260:vec4<f32> = load %x_GLF_color
+    %261:main_out = construct %260
+    %262:bool = load %continue_execution
+    %263:bool = eq %262, false
+    if %263 [t: $B62] {  # if_17
+      $B62: {  # true
+        terminate_invocation
+      }
+    }
+    ret %261
   }
 }
-%mergeSort_ = func():void -> %b62 {
-  %b62 = block {
+%mergeSort_ = func():void {
+  $B63: {
     %low:ptr<function, i32, read_write> = var
     %high:ptr<function, i32, read_write> = var
     %m:ptr<function, i32, read_write> = var
@@ -544,79 +576,89 @@
     store %low, 0i
     store %high, 9i
     store %m, 1i
-    loop [b: %b63, c: %b64] {  # loop_8
-      %b63 = block {  # body
-        %247:i32 = load %m
-        %248:i32 = load %high
-        %249:bool = lte %247, %248
-        if %249 [t: %b65, f: %b66] {  # if_17
-          %b65 = block {  # true
-            exit_if  # if_17
+    loop [b: $B64, c: $B65] {  # loop_8
+      $B64: {  # body
+        %275:i32 = load %m
+        %276:i32 = load %high
+        %277:bool = lte %275, %276
+        if %277 [t: $B66, f: $B67] {  # if_18
+          $B66: {  # true
+            exit_if  # if_18
           }
-          %b66 = block {  # false
+          $B67: {  # false
             exit_loop  # loop_8
           }
         }
-        %250:i32 = load %low
-        store %i_2, %250
-        loop [b: %b67, c: %b68] {  # loop_9
-          %b67 = block {  # body
-            %251:i32 = load %i_2
-            %252:i32 = load %high
-            %253:bool = lt %251, %252
-            if %253 [t: %b69, f: %b70] {  # if_18
-              %b69 = block {  # true
-                exit_if  # if_18
+        %278:i32 = load %low
+        store %i_2, %278
+        loop [b: $B68, c: $B69] {  # loop_9
+          $B68: {  # body
+            %279:i32 = load %i_2
+            %280:i32 = load %high
+            %281:bool = lt %279, %280
+            if %281 [t: $B70, f: $B71] {  # if_19
+              $B70: {  # true
+                exit_if  # if_19
               }
-              %b70 = block {  # false
+              $B71: {  # false
                 exit_loop  # loop_9
               }
             }
-            %254:i32 = load %i_2
-            store %f_1, %254
-            %255:i32 = load %i_2
-            %256:i32 = load %m
-            %257:i32 = add %255, %256
-            %258:i32 = sub %257, 1i
-            store %mid_1, %258
-            %259:i32 = load %i_2
-            %260:i32 = load %m
-            %261:i32 = mul 2i, %260
-            %262:i32 = add %259, %261
-            %263:i32 = sub %262, 1i
-            %264:i32 = load %high
-            %265:i32 = min %263, %264
-            store %to_1, %265
-            %266:i32 = load %f_1
-            store %param, %266
-            %267:i32 = load %mid_1
-            store %param_1, %267
-            %268:i32 = load %to_1
-            store %param_2, %268
-            %269:void = call %merge_i1_i1_i1_, %param, %param_1, %param_2
-            continue %b68
+            %282:i32 = load %i_2
+            store %f_1, %282
+            %283:i32 = load %i_2
+            %284:i32 = load %m
+            %285:i32 = add %283, %284
+            %286:i32 = sub %285, 1i
+            store %mid_1, %286
+            %287:i32 = load %i_2
+            %288:i32 = load %m
+            %289:i32 = mul 2i, %288
+            %290:i32 = add %287, %289
+            %291:i32 = sub %290, 1i
+            %292:i32 = load %high
+            %293:i32 = min %291, %292
+            store %to_1, %293
+            %294:i32 = load %f_1
+            store %param, %294
+            %295:i32 = load %mid_1
+            store %param_1, %295
+            %296:i32 = load %to_1
+            store %param_2, %296
+            %297:void = call %merge_i1_i1_i1_, %param, %param_1, %param_2
+            continue  # -> $B69
           }
-          %b68 = block {  # continuing
-            %270:i32 = load %i_2
-            %271:i32 = load %m
-            %272:i32 = mul 2i, %271
-            %273:i32 = add %270, %272
-            store %i_2, %273
-            next_iteration %b67
+          $B69: {  # continuing
+            %298:i32 = load %i_2
+            %299:i32 = load %m
+            %300:i32 = mul 2i, %299
+            %301:i32 = add %298, %300
+            store %i_2, %301
+            next_iteration  # -> $B68
           }
         }
-        continue %b64
+        continue  # -> $B65
       }
-      %b64 = block {  # continuing
-        %274:i32 = load %m
-        %275:i32 = mul 2i, %274
-        store %m, %275
-        next_iteration %b63
+      $B65: {  # continuing
+        %302:i32 = load %m
+        %303:i32 = mul 2i, %302
+        store %m, %303
+        next_iteration  # -> $B64
       }
     }
     ret
   }
 }
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B72: {
+    %305:i32 = convert %value
+    %306:bool = gte %value, -2147483648.0f
+    %307:i32 = select -2147483648i, %305, %306
+    %308:bool = lte %value, 2147483520.0f
+    %309:i32 = select 2147483647i, %307, %308
+    ret %309
+  }
+}
 
 unhandled variable address space
 ********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/1.wgsl.expected.ir.msl
index 2f38fb7..718309b 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/1.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/1.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,152 +8,183 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %data:ptr<private, array<i32, 10>, read_write> = var
   %temp:ptr<private, array<i32, 10>, read_write> = var
   %x_28:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%merge_i1_i1_i1_ = func(%f:ptr<function, i32, read_write>, %mid:ptr<function, i32, read_write>, %to:ptr<function, i32, read_write>):void -> %b2 {
-  %b2 = block {
+%merge_i1_i1_i1_ = func(%f:ptr<function, i32, read_write>, %mid:ptr<function, i32, read_write>, %to:ptr<function, i32, read_write>):void {
+  $B2: {
     %k:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %j:ptr<function, i32, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
-    %x_303:i32 = load %f
+    %15:i32 = load %f
+    %x_303:i32 = let %15
     store %k, %x_303
-    %x_304:i32 = load %f
+    %17:i32 = load %f
+    %x_304:i32 = let %17
     store %i, %x_304
-    %x_305:i32 = load %mid
-    %17:i32 = add %x_305, 1i
-    store %j, %17
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_311:i32 = load %i
-        %x_312:i32 = load %mid
-        %x_314:i32 = load %j
-        %x_315:i32 = load %to
-        %22:bool = lte %x_311, %x_312
-        %23:bool = lte %x_314, %x_315
-        %24:bool = and %22, %23
-        if %24 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    %19:i32 = load %mid
+    %x_305:i32 = let %19
+    %21:i32 = add %x_305, 1i
+    store %j, %21
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %22:i32 = load %i
+        %x_311:i32 = let %22
+        %24:i32 = load %mid
+        %x_312:i32 = let %24
+        %26:i32 = load %j
+        %x_314:i32 = let %26
+        %28:i32 = load %to
+        %x_315:i32 = let %28
+        %30:bool = lte %x_311, %x_312
+        %31:bool = lte %x_314, %x_315
+        %32:bool = and %30, %31
+        if %32 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_319:i32 = load %i
-        %26:ptr<private, i32, read_write> = access %data, %x_319
-        %x_321:i32 = load %26
-        %x_322:i32 = load %j
-        %29:ptr<private, i32, read_write> = access %data, %x_322
-        %x_324:i32 = load %29
-        %31:bool = lt %x_321, %x_324
-        if %31 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
-            %x_329:i32 = load %k
-            %33:i32 = add %x_329, 1i
-            store %k, %33
-            %x_331:i32 = load %i
-            %35:i32 = add %x_331, 1i
-            store %i, %35
-            %36:ptr<private, i32, read_write> = access %data, %x_331
-            %x_334:i32 = load %36
-            %38:ptr<private, i32, read_write> = access %temp, %x_329
-            store %38, %x_334
+        %33:i32 = load %i
+        %x_319:i32 = let %33
+        %35:ptr<private, i32, read_write> = access %data, %x_319
+        %36:i32 = load %35
+        %x_321:i32 = let %36
+        %38:i32 = load %j
+        %x_322:i32 = let %38
+        %40:ptr<private, i32, read_write> = access %data, %x_322
+        %41:i32 = load %40
+        %x_324:i32 = let %41
+        %43:bool = lt %x_321, %x_324
+        if %43 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
+            %44:i32 = load %k
+            %x_329:i32 = let %44
+            %46:i32 = add %x_329, 1i
+            store %k, %46
+            %47:i32 = load %i
+            %x_331:i32 = let %47
+            %49:i32 = add %x_331, 1i
+            store %i, %49
+            %50:ptr<private, i32, read_write> = access %data, %x_331
+            %51:i32 = load %50
+            %x_334:i32 = let %51
+            %53:ptr<private, i32, read_write> = access %temp, %x_329
+            store %53, %x_334
             exit_if  # if_2
           }
-          %b8 = block {  # false
-            %x_336:i32 = load %k
-            %40:i32 = add %x_336, 1i
-            store %k, %40
-            %x_338:i32 = load %j
-            %42:i32 = add %x_338, 1i
-            store %j, %42
-            %43:ptr<private, i32, read_write> = access %data, %x_338
-            %x_341:i32 = load %43
-            %45:ptr<private, i32, read_write> = access %temp, %x_336
-            store %45, %x_341
+          $B8: {  # false
+            %54:i32 = load %k
+            %x_336:i32 = let %54
+            %56:i32 = add %x_336, 1i
+            store %k, %56
+            %57:i32 = load %j
+            %x_338:i32 = let %57
+            %59:i32 = add %x_338, 1i
+            store %j, %59
+            %60:ptr<private, i32, read_write> = access %data, %x_338
+            %61:i32 = load %60
+            %x_341:i32 = let %61
+            %63:ptr<private, i32, read_write> = access %temp, %x_336
+            store %63, %x_341
             exit_if  # if_2
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
-    loop [b: %b9, c: %b10] {  # loop_2
-      %b9 = block {  # body
-        %x_347:i32 = load %i
-        %x_349:i32 = load %i
-        %x_350:i32 = load %mid
-        %49:bool = lt %x_347, 10i
-        %50:bool = lte %x_349, %x_350
-        %51:bool = and %49, %50
-        if %51 [t: %b11, f: %b12] {  # if_3
-          %b11 = block {  # true
+    loop [b: $B9, c: $B10] {  # loop_2
+      $B9: {  # body
+        %64:i32 = load %i
+        %x_347:i32 = let %64
+        %66:i32 = load %i
+        %x_349:i32 = let %66
+        %68:i32 = load %mid
+        %x_350:i32 = let %68
+        %70:bool = lt %x_347, 10i
+        %71:bool = lte %x_349, %x_350
+        %72:bool = and %70, %71
+        if %72 [t: $B11, f: $B12] {  # if_3
+          $B11: {  # true
             exit_if  # if_3
           }
-          %b12 = block {  # false
+          $B12: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_354:i32 = load %k
-        %53:i32 = add %x_354, 1i
-        store %k, %53
-        %x_356:i32 = load %i
-        %55:i32 = add %x_356, 1i
-        store %i, %55
-        %56:ptr<private, i32, read_write> = access %data, %x_356
-        %x_359:i32 = load %56
-        %58:ptr<private, i32, read_write> = access %temp, %x_354
-        store %58, %x_359
-        continue %b10
+        %73:i32 = load %k
+        %x_354:i32 = let %73
+        %75:i32 = add %x_354, 1i
+        store %k, %75
+        %76:i32 = load %i
+        %x_356:i32 = let %76
+        %78:i32 = add %x_356, 1i
+        store %i, %78
+        %79:ptr<private, i32, read_write> = access %data, %x_356
+        %80:i32 = load %79
+        %x_359:i32 = let %80
+        %82:ptr<private, i32, read_write> = access %temp, %x_354
+        store %82, %x_359
+        continue  # -> $B10
       }
-      %b10 = block {  # continuing
-        next_iteration %b9
+      $B10: {  # continuing
+        next_iteration  # -> $B9
       }
     }
-    %x_361:i32 = load %f
+    %83:i32 = load %f
+    %x_361:i32 = let %83
     store %i_1, %x_361
-    loop [b: %b13, c: %b14] {  # loop_3
-      %b13 = block {  # body
-        %x_366:i32 = load %i_1
-        %x_367:i32 = load %to
-        %62:bool = lte %x_366, %x_367
-        if %62 [t: %b15, f: %b16] {  # if_4
-          %b15 = block {  # true
+    loop [b: $B13, c: $B14] {  # loop_3
+      $B13: {  # body
+        %85:i32 = load %i_1
+        %x_366:i32 = let %85
+        %87:i32 = load %to
+        %x_367:i32 = let %87
+        %89:bool = lte %x_366, %x_367
+        if %89 [t: $B15, f: $B16] {  # if_4
+          $B15: {  # true
             exit_if  # if_4
           }
-          %b16 = block {  # false
+          $B16: {  # false
             exit_loop  # loop_3
           }
         }
-        %x_370:i32 = load %i_1
-        %x_371:i32 = load %i_1
-        %65:ptr<private, i32, read_write> = access %temp, %x_371
-        %x_373:i32 = load %65
-        %67:ptr<private, i32, read_write> = access %data, %x_370
-        store %67, %x_373
-        continue %b14
+        %90:i32 = load %i_1
+        %x_370:i32 = let %90
+        %92:i32 = load %i_1
+        %x_371:i32 = let %92
+        %94:ptr<private, i32, read_write> = access %temp, %x_371
+        %95:i32 = load %94
+        %x_373:i32 = let %95
+        %97:ptr<private, i32, read_write> = access %data, %x_370
+        store %97, %x_373
+        continue  # -> $B14
       }
-      %b14 = block {  # continuing
-        %x_375:i32 = load %i_1
-        %69:i32 = add %x_375, 1i
-        store %i_1, %69
-        next_iteration %b13
+      $B14: {  # continuing
+        %98:i32 = load %i_1
+        %x_375:i32 = let %98
+        %100:i32 = add %x_375, 1i
+        store %i_1, %100
+        next_iteration  # -> $B13
       }
     }
     ret
   }
 }
-%main_1 = func():void -> %b17 {
-  %b17 = block {
+%main_1 = func():void {
+  $B17: {
     %x_85:ptr<function, i32, read_write> = var
     %x_86:ptr<function, i32, read_write> = var
     %x_87:ptr<function, i32, read_write> = var
@@ -167,316 +198,370 @@
     %i_3:ptr<function, i32, read_write> = var
     %j_1:ptr<function, i32, read_write> = var
     %grey:ptr<function, f32, read_write> = var
-    %84:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
-    %x_96:f32 = load_vector_element %84, 0u
-    %86:i32 = convert %x_96
-    store %i_3, %86
-    loop [b: %b18, c: %b19] {  # loop_4
-      %b18 = block {  # body
-        %x_102:i32 = load %i_3
-        switch %x_102 [c: (9i, %b20), c: (8i, %b21), c: (7i, %b22), c: (6i, %b23), c: (5i, %b24), c: (4i, %b25), c: (3i, %b26), c: (2i, %b27), c: (1i, %b28), c: (0i, %b29), c: (default, %b30)] {  # switch_1
-          %b20 = block {  # case
-            %x_132:i32 = load %i_3
-            %89:ptr<private, i32, read_write> = access %data, %x_132
-            store %89, -5i
+    %115:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
+    %116:f32 = load_vector_element %115, 0u
+    %x_96:f32 = let %116
+    %118:i32 = call %tint_f32_to_i32, %x_96
+    store %i_3, %118
+    loop [b: $B18, c: $B19] {  # loop_4
+      $B18: {  # body
+        %120:i32 = load %i_3
+        %x_102:i32 = let %120
+        switch %x_102 [c: (9i, $B20), c: (8i, $B21), c: (7i, $B22), c: (6i, $B23), c: (5i, $B24), c: (4i, $B25), c: (3i, $B26), c: (2i, $B27), c: (1i, $B28), c: (0i, $B29), c: (default, $B30)] {  # switch_1
+          $B20: {  # case
+            %122:i32 = load %i_3
+            %x_132:i32 = let %122
+            %124:ptr<private, i32, read_write> = access %data, %x_132
+            store %124, -5i
             exit_switch  # switch_1
           }
-          %b21 = block {  # case
-            %x_130:i32 = load %i_3
-            %91:ptr<private, i32, read_write> = access %data, %x_130
-            store %91, -4i
+          $B21: {  # case
+            %125:i32 = load %i_3
+            %x_130:i32 = let %125
+            %127:ptr<private, i32, read_write> = access %data, %x_130
+            store %127, -4i
             exit_switch  # switch_1
           }
-          %b22 = block {  # case
-            %x_128:i32 = load %i_3
-            %93:ptr<private, i32, read_write> = access %data, %x_128
-            store %93, -3i
+          $B22: {  # case
+            %128:i32 = load %i_3
+            %x_128:i32 = let %128
+            %130:ptr<private, i32, read_write> = access %data, %x_128
+            store %130, -3i
             exit_switch  # switch_1
           }
-          %b23 = block {  # case
-            %x_126:i32 = load %i_3
-            %95:ptr<private, i32, read_write> = access %data, %x_126
-            store %95, -2i
+          $B23: {  # case
+            %131:i32 = load %i_3
+            %x_126:i32 = let %131
+            %133:ptr<private, i32, read_write> = access %data, %x_126
+            store %133, -2i
             exit_switch  # switch_1
           }
-          %b24 = block {  # case
-            %x_124:i32 = load %i_3
-            %97:ptr<private, i32, read_write> = access %data, %x_124
-            store %97, -1i
+          $B24: {  # case
+            %134:i32 = load %i_3
+            %x_124:i32 = let %134
+            %136:ptr<private, i32, read_write> = access %data, %x_124
+            store %136, -1i
             exit_switch  # switch_1
           }
-          %b25 = block {  # case
-            %x_122:i32 = load %i_3
-            %99:ptr<private, i32, read_write> = access %data, %x_122
-            store %99, 0i
+          $B25: {  # case
+            %137:i32 = load %i_3
+            %x_122:i32 = let %137
+            %139:ptr<private, i32, read_write> = access %data, %x_122
+            store %139, 0i
             exit_switch  # switch_1
           }
-          %b26 = block {  # case
-            %x_120:i32 = load %i_3
-            %101:ptr<private, i32, read_write> = access %data, %x_120
-            store %101, 1i
+          $B26: {  # case
+            %140:i32 = load %i_3
+            %x_120:i32 = let %140
+            %142:ptr<private, i32, read_write> = access %data, %x_120
+            store %142, 1i
             exit_switch  # switch_1
           }
-          %b27 = block {  # case
-            %x_118:i32 = load %i_3
-            %103:ptr<private, i32, read_write> = access %data, %x_118
-            store %103, 2i
+          $B27: {  # case
+            %143:i32 = load %i_3
+            %x_118:i32 = let %143
+            %145:ptr<private, i32, read_write> = access %data, %x_118
+            store %145, 2i
             exit_switch  # switch_1
           }
-          %b28 = block {  # case
-            %x_116:i32 = load %i_3
-            %105:ptr<private, i32, read_write> = access %data, %x_116
-            store %105, 3i
+          $B28: {  # case
+            %146:i32 = load %i_3
+            %x_116:i32 = let %146
+            %148:ptr<private, i32, read_write> = access %data, %x_116
+            store %148, 3i
             exit_switch  # switch_1
           }
-          %b29 = block {  # case
-            %x_114:i32 = load %i_3
-            %107:ptr<private, i32, read_write> = access %data, %x_114
-            store %107, 4i
+          $B29: {  # case
+            %149:i32 = load %i_3
+            %x_114:i32 = let %149
+            %151:ptr<private, i32, read_write> = access %data, %x_114
+            store %151, 4i
             exit_switch  # switch_1
           }
-          %b30 = block {  # case
+          $B30: {  # case
             exit_switch  # switch_1
           }
         }
-        %x_134:i32 = load %i_3
-        %109:i32 = add %x_134, 1i
-        store %i_3, %109
-        continue %b19
+        %152:i32 = load %i_3
+        %x_134:i32 = let %152
+        %154:i32 = add %x_134, 1i
+        store %i_3, %154
+        continue  # -> $B19
       }
-      %b19 = block {  # continuing
-        %x_136:i32 = load %i_3
-        %111:bool = lt %x_136, 10i
-        %112:bool = eq %111, false
-        break_if %112 %b18
+      $B19: {  # continuing
+        %155:i32 = load %i_3
+        %x_136:i32 = let %155
+        %157:bool = lt %x_136, 10i
+        %158:bool = eq %157, false
+        break_if %158  # -> [t: exit_loop loop_4, f: $B18]
       }
     }
     store %j_1, 0i
-    loop [b: %b31, c: %b32] {  # loop_5
-      %b31 = block {  # body
-        %x_142:i32 = load %j_1
-        %114:bool = lt %x_142, 10i
-        if %114 [t: %b33, f: %b34] {  # if_5
-          %b33 = block {  # true
+    loop [b: $B31, c: $B32] {  # loop_5
+      $B31: {  # body
+        %159:i32 = load %j_1
+        %x_142:i32 = let %159
+        %161:bool = lt %x_142, 10i
+        if %161 [t: $B33, f: $B34] {  # if_5
+          $B33: {  # true
             exit_if  # if_5
           }
-          %b34 = block {  # false
+          $B34: {  # false
             exit_loop  # loop_5
           }
         }
-        %x_145:i32 = load %j_1
-        %x_146:i32 = load %j_1
-        %117:ptr<private, i32, read_write> = access %data, %x_146
-        %x_148:i32 = load %117
-        %119:ptr<private, i32, read_write> = access %temp, %x_145
-        store %119, %x_148
-        continue %b32
+        %162:i32 = load %j_1
+        %x_145:i32 = let %162
+        %164:i32 = load %j_1
+        %x_146:i32 = let %164
+        %166:ptr<private, i32, read_write> = access %data, %x_146
+        %167:i32 = load %166
+        %x_148:i32 = let %167
+        %169:ptr<private, i32, read_write> = access %temp, %x_145
+        store %169, %x_148
+        continue  # -> $B32
       }
-      %b32 = block {  # continuing
-        %x_150:i32 = load %j_1
-        %121:i32 = add %x_150, 1i
-        store %j_1, %121
-        next_iteration %b31
+      $B32: {  # continuing
+        %170:i32 = load %j_1
+        %x_150:i32 = let %170
+        %172:i32 = add %x_150, 1i
+        store %j_1, %172
+        next_iteration  # -> $B31
       }
     }
     store %x_94, 0i
     store %x_93, 9i
     store %x_92, 1i
-    loop [b: %b35, c: %b36] {  # loop_6
-      %b35 = block {  # body
-        %x_156:i32 = load %x_92
-        %x_157:i32 = load %x_93
-        %124:bool = lte %x_156, %x_157
-        if %124 [t: %b37, f: %b38] {  # if_6
-          %b37 = block {  # true
+    loop [b: $B35, c: $B36] {  # loop_6
+      $B35: {  # body
+        %173:i32 = load %x_92
+        %x_156:i32 = let %173
+        %175:i32 = load %x_93
+        %x_157:i32 = let %175
+        %177:bool = lte %x_156, %x_157
+        if %177 [t: $B37, f: $B38] {  # if_6
+          $B37: {  # true
             exit_if  # if_6
           }
-          %b38 = block {  # false
+          $B38: {  # false
             exit_loop  # loop_6
           }
         }
-        %x_160:i32 = load %x_94
+        %178:i32 = load %x_94
+        %x_160:i32 = let %178
         store %x_91, %x_160
-        loop [b: %b39, c: %b40] {  # loop_7
-          %b39 = block {  # body
-            %x_165:i32 = load %x_91
-            %x_166:i32 = load %x_93
-            %128:bool = lt %x_165, %x_166
-            if %128 [t: %b41, f: %b42] {  # if_7
-              %b41 = block {  # true
+        loop [b: $B39, c: $B40] {  # loop_7
+          $B39: {  # body
+            %180:i32 = load %x_91
+            %x_165:i32 = let %180
+            %182:i32 = load %x_93
+            %x_166:i32 = let %182
+            %184:bool = lt %x_165, %x_166
+            if %184 [t: $B41, f: $B42] {  # if_7
+              $B41: {  # true
                 exit_if  # if_7
               }
-              %b42 = block {  # false
+              $B42: {  # false
                 exit_loop  # loop_7
               }
             }
-            %x_169:i32 = load %x_91
+            %185:i32 = load %x_91
+            %x_169:i32 = let %185
             store %x_90, %x_169
-            %x_170:i32 = load %x_91
-            %x_171:i32 = load %x_92
-            %x_173:array<i32, 10> = load %data
+            %187:i32 = load %x_91
+            %x_170:i32 = let %187
+            %189:i32 = load %x_92
+            %x_171:i32 = let %189
+            %191:array<i32, 10> = load %data
+            %x_173:array<i32, 10> = let %191
             store %data, array<i32, 10>(0i)
             store %data, %x_173
-            %133:i32 = add %x_170, %x_171
-            %134:i32 = sub %133, 1i
-            store %x_89, %134
-            %x_175:i32 = load %x_91
-            %x_176:i32 = load %x_92
-            %x_180:i32 = load %x_93
-            %138:i32 = mul 2i, %x_176
-            %139:i32 = add %x_175, %138
-            %140:i32 = sub %139, 1i
-            %141:i32 = min %140, %x_180
-            store %x_88, %141
-            %x_182:i32 = load %x_90
+            %193:i32 = add %x_170, %x_171
+            %194:i32 = sub %193, 1i
+            store %x_89, %194
+            %195:i32 = load %x_91
+            %x_175:i32 = let %195
+            %197:i32 = load %x_92
+            %x_176:i32 = let %197
+            %199:i32 = load %x_93
+            %x_180:i32 = let %199
+            %201:i32 = mul 2i, %x_176
+            %202:i32 = add %x_175, %201
+            %203:i32 = sub %202, 1i
+            %204:i32 = min %203, %x_180
+            store %x_88, %204
+            %205:i32 = load %x_90
+            %x_182:i32 = let %205
             store %x_87, %x_182
-            %x_183:i32 = load %x_89
+            %207:i32 = load %x_89
+            %x_183:i32 = let %207
             store %x_86, %x_183
-            %x_184:i32 = load %x_88
+            %209:i32 = load %x_88
+            %x_184:i32 = let %209
             store %x_85, %x_184
-            %145:void = call %merge_i1_i1_i1_, %x_87, %x_86, %x_85
-            continue %b40
+            %211:void = call %merge_i1_i1_i1_, %x_87, %x_86, %x_85
+            continue  # -> $B40
           }
-          %b40 = block {  # continuing
-            %x_186:i32 = load %x_92
-            %x_188:i32 = load %x_91
-            %148:i32 = mul 2i, %x_186
-            %149:i32 = add %x_188, %148
-            store %x_91, %149
-            next_iteration %b39
+          $B40: {  # continuing
+            %212:i32 = load %x_92
+            %x_186:i32 = let %212
+            %214:i32 = load %x_91
+            %x_188:i32 = let %214
+            %216:i32 = mul 2i, %x_186
+            %217:i32 = add %x_188, %216
+            store %x_91, %217
+            next_iteration  # -> $B39
           }
         }
-        continue %b36
+        continue  # -> $B36
       }
-      %b36 = block {  # continuing
-        %x_190:i32 = load %x_92
-        %151:i32 = mul 2i, %x_190
-        store %x_92, %151
-        next_iteration %b35
+      $B36: {  # continuing
+        %218:i32 = load %x_92
+        %x_190:i32 = let %218
+        %220:i32 = mul 2i, %x_190
+        store %x_92, %220
+        next_iteration  # -> $B35
       }
     }
-    %x_194:f32 = load_vector_element %gl_FragCoord, 1u
-    %153:i32 = convert %x_194
-    %154:bool = lt %153, 30i
-    if %154 [t: %b43, f: %b44] {  # if_8
-      %b43 = block {  # true
-        %155:ptr<private, i32, read_write> = access %data, 0i
-        %x_201:i32 = load %155
-        %157:f32 = convert %x_201
-        %158:f32 = div %157, 10.0f
-        %159:f32 = add 0.5f, %158
-        store %grey, %159
+    %221:f32 = load_vector_element %gl_FragCoord, 1u
+    %x_194:f32 = let %221
+    %223:i32 = call %tint_f32_to_i32, %x_194
+    %224:bool = lt %223, 30i
+    if %224 [t: $B43, f: $B44] {  # if_8
+      $B43: {  # true
+        %225:ptr<private, i32, read_write> = access %data, 0i
+        %226:i32 = load %225
+        %x_201:i32 = let %226
+        %228:f32 = convert %x_201
+        %229:f32 = div %228, 10.0f
+        %230:f32 = add 0.5f, %229
+        store %grey, %230
         exit_if  # if_8
       }
-      %b44 = block {  # false
-        %x_206:f32 = load_vector_element %gl_FragCoord, 1u
-        %161:i32 = convert %x_206
-        %162:bool = lt %161, 60i
-        if %162 [t: %b45, f: %b46] {  # if_9
-          %b45 = block {  # true
-            %163:ptr<private, i32, read_write> = access %data, 1i
-            %x_213:i32 = load %163
-            %165:f32 = convert %x_213
-            %166:f32 = div %165, 10.0f
-            %167:f32 = add 0.5f, %166
-            store %grey, %167
+      $B44: {  # false
+        %231:f32 = load_vector_element %gl_FragCoord, 1u
+        %x_206:f32 = let %231
+        %233:i32 = call %tint_f32_to_i32, %x_206
+        %234:bool = lt %233, 60i
+        if %234 [t: $B45, f: $B46] {  # if_9
+          $B45: {  # true
+            %235:ptr<private, i32, read_write> = access %data, 1i
+            %236:i32 = load %235
+            %x_213:i32 = let %236
+            %238:f32 = convert %x_213
+            %239:f32 = div %238, 10.0f
+            %240:f32 = add 0.5f, %239
+            store %grey, %240
             exit_if  # if_9
           }
-          %b46 = block {  # false
-            %x_218:f32 = load_vector_element %gl_FragCoord, 1u
-            %169:i32 = convert %x_218
-            %170:bool = lt %169, 90i
-            if %170 [t: %b47, f: %b48] {  # if_10
-              %b47 = block {  # true
-                %171:ptr<private, i32, read_write> = access %data, 2i
-                %x_225:i32 = load %171
-                %173:f32 = convert %x_225
-                %174:f32 = div %173, 10.0f
-                %175:f32 = add 0.5f, %174
-                store %grey, %175
+          $B46: {  # false
+            %241:f32 = load_vector_element %gl_FragCoord, 1u
+            %x_218:f32 = let %241
+            %243:i32 = call %tint_f32_to_i32, %x_218
+            %244:bool = lt %243, 90i
+            if %244 [t: $B47, f: $B48] {  # if_10
+              $B47: {  # true
+                %245:ptr<private, i32, read_write> = access %data, 2i
+                %246:i32 = load %245
+                %x_225:i32 = let %246
+                %248:f32 = convert %x_225
+                %249:f32 = div %248, 10.0f
+                %250:f32 = add 0.5f, %249
+                store %grey, %250
                 exit_if  # if_10
               }
-              %b48 = block {  # false
-                %x_230:f32 = load_vector_element %gl_FragCoord, 1u
-                %177:i32 = convert %x_230
-                %178:bool = lt %177, 120i
-                if %178 [t: %b49, f: %b50] {  # if_11
-                  %b49 = block {  # true
-                    %179:ptr<private, i32, read_write> = access %data, 3i
-                    %x_237:i32 = load %179
-                    %181:f32 = convert %x_237
-                    %182:f32 = div %181, 10.0f
-                    %183:f32 = add 0.5f, %182
-                    store %grey, %183
+              $B48: {  # false
+                %251:f32 = load_vector_element %gl_FragCoord, 1u
+                %x_230:f32 = let %251
+                %253:i32 = call %tint_f32_to_i32, %x_230
+                %254:bool = lt %253, 120i
+                if %254 [t: $B49, f: $B50] {  # if_11
+                  $B49: {  # true
+                    %255:ptr<private, i32, read_write> = access %data, 3i
+                    %256:i32 = load %255
+                    %x_237:i32 = let %256
+                    %258:f32 = convert %x_237
+                    %259:f32 = div %258, 10.0f
+                    %260:f32 = add 0.5f, %259
+                    store %grey, %260
                     exit_if  # if_11
                   }
-                  %b50 = block {  # false
-                    %x_242:f32 = load_vector_element %gl_FragCoord, 1u
-                    %185:i32 = convert %x_242
-                    %186:bool = lt %185, 150i
-                    if %186 [t: %b51, f: %b52] {  # if_12
-                      %b51 = block {  # true
-                        discard
+                  $B50: {  # false
+                    %261:f32 = load_vector_element %gl_FragCoord, 1u
+                    %x_242:f32 = let %261
+                    %263:i32 = call %tint_f32_to_i32, %x_242
+                    %264:bool = lt %263, 150i
+                    if %264 [t: $B51, f: $B52] {  # if_12
+                      $B51: {  # true
+                        store %continue_execution, false
                         exit_if  # if_12
                       }
-                      %b52 = block {  # false
-                        %x_249:f32 = load_vector_element %gl_FragCoord, 1u
-                        %188:i32 = convert %x_249
-                        %189:bool = lt %188, 180i
-                        if %189 [t: %b53, f: %b54] {  # if_13
-                          %b53 = block {  # true
-                            %190:ptr<private, i32, read_write> = access %data, 5i
-                            %x_256:i32 = load %190
-                            %192:f32 = convert %x_256
-                            %193:f32 = div %192, 10.0f
-                            %194:f32 = add 0.5f, %193
-                            store %grey, %194
+                      $B52: {  # false
+                        %265:f32 = load_vector_element %gl_FragCoord, 1u
+                        %x_249:f32 = let %265
+                        %267:i32 = call %tint_f32_to_i32, %x_249
+                        %268:bool = lt %267, 180i
+                        if %268 [t: $B53, f: $B54] {  # if_13
+                          $B53: {  # true
+                            %269:ptr<private, i32, read_write> = access %data, 5i
+                            %270:i32 = load %269
+                            %x_256:i32 = let %270
+                            %272:f32 = convert %x_256
+                            %273:f32 = div %272, 10.0f
+                            %274:f32 = add 0.5f, %273
+                            store %grey, %274
                             exit_if  # if_13
                           }
-                          %b54 = block {  # false
-                            %x_261:f32 = load_vector_element %gl_FragCoord, 1u
-                            %196:i32 = convert %x_261
-                            %197:bool = lt %196, 210i
-                            if %197 [t: %b55, f: %b56] {  # if_14
-                              %b55 = block {  # true
-                                %198:ptr<private, i32, read_write> = access %data, 6i
-                                %x_268:i32 = load %198
-                                %200:f32 = convert %x_268
-                                %201:f32 = div %200, 10.0f
-                                %202:f32 = add 0.5f, %201
-                                store %grey, %202
+                          $B54: {  # false
+                            %275:f32 = load_vector_element %gl_FragCoord, 1u
+                            %x_261:f32 = let %275
+                            %277:i32 = call %tint_f32_to_i32, %x_261
+                            %278:bool = lt %277, 210i
+                            if %278 [t: $B55, f: $B56] {  # if_14
+                              $B55: {  # true
+                                %279:ptr<private, i32, read_write> = access %data, 6i
+                                %280:i32 = load %279
+                                %x_268:i32 = let %280
+                                %282:f32 = convert %x_268
+                                %283:f32 = div %282, 10.0f
+                                %284:f32 = add 0.5f, %283
+                                store %grey, %284
                                 exit_if  # if_14
                               }
-                              %b56 = block {  # false
-                                %x_273:f32 = load_vector_element %gl_FragCoord, 1u
-                                %204:i32 = convert %x_273
-                                %205:bool = lt %204, 240i
-                                if %205 [t: %b57, f: %b58] {  # if_15
-                                  %b57 = block {  # true
-                                    %206:ptr<private, i32, read_write> = access %data, 7i
-                                    %x_280:i32 = load %206
-                                    %208:f32 = convert %x_280
-                                    %209:f32 = div %208, 10.0f
-                                    %210:f32 = add 0.5f, %209
-                                    store %grey, %210
+                              $B56: {  # false
+                                %285:f32 = load_vector_element %gl_FragCoord, 1u
+                                %x_273:f32 = let %285
+                                %287:i32 = call %tint_f32_to_i32, %x_273
+                                %288:bool = lt %287, 240i
+                                if %288 [t: $B57, f: $B58] {  # if_15
+                                  $B57: {  # true
+                                    %289:ptr<private, i32, read_write> = access %data, 7i
+                                    %290:i32 = load %289
+                                    %x_280:i32 = let %290
+                                    %292:f32 = convert %x_280
+                                    %293:f32 = div %292, 10.0f
+                                    %294:f32 = add 0.5f, %293
+                                    store %grey, %294
                                     exit_if  # if_15
                                   }
-                                  %b58 = block {  # false
-                                    %x_285:f32 = load_vector_element %gl_FragCoord, 1u
-                                    %212:i32 = convert %x_285
-                                    %213:bool = lt %212, 270i
-                                    if %213 [t: %b59, f: %b60] {  # if_16
-                                      %b59 = block {  # true
-                                        %214:ptr<private, i32, read_write> = access %data, 8i
-                                        %x_292:i32 = load %214
-                                        %216:f32 = convert %x_292
-                                        %217:f32 = div %216, 10.0f
-                                        %218:f32 = add 0.5f, %217
-                                        store %grey, %218
+                                  $B58: {  # false
+                                    %295:f32 = load_vector_element %gl_FragCoord, 1u
+                                    %x_285:f32 = let %295
+                                    %297:i32 = call %tint_f32_to_i32, %x_285
+                                    %298:bool = lt %297, 270i
+                                    if %298 [t: $B59, f: $B60] {  # if_16
+                                      $B59: {  # true
+                                        %299:ptr<private, i32, read_write> = access %data, 8i
+                                        %300:i32 = load %299
+                                        %x_292:i32 = let %300
+                                        %302:f32 = convert %x_292
+                                        %303:f32 = div %302, 10.0f
+                                        %304:f32 = add 0.5f, %303
+                                        store %grey, %304
                                         exit_if  # if_16
                                       }
-                                      %b60 = block {  # false
-                                        discard
+                                      $B60: {  # false
+                                        store %continue_execution, false
                                         exit_if  # if_16
                                       }
                                     }
@@ -504,27 +589,36 @@
         exit_if  # if_8
       }
     }
-    %x_296:f32 = load %grey
-    %x_297:vec3<f32> = construct %x_296, %x_296, %x_296
-    %221:f32 = access %x_297, 0u
-    %222:f32 = access %x_297, 1u
-    %223:f32 = access %x_297, 2u
-    %224:vec4<f32> = construct %221, %222, %223, 1.0f
-    store %x_GLF_color, %224
+    %305:f32 = load %grey
+    %x_296:f32 = let %305
+    %307:vec3<f32> = construct %x_296, %x_296, %x_296
+    %x_297:vec3<f32> = let %307
+    %309:f32 = access %x_297, 0u
+    %310:f32 = access %x_297, 1u
+    %311:f32 = access %x_297, 2u
+    %312:vec4<f32> = construct %309, %310, %311, 1.0f
+    store %x_GLF_color, %312
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b61 {
-  %b61 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B61: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %227:void = call %main_1
-    %228:vec4<f32> = load %x_GLF_color
-    %229:main_out = construct %228
-    ret %229
+    %315:void = call %main_1
+    %316:vec4<f32> = load %x_GLF_color
+    %317:main_out = construct %316
+    %318:bool = load %continue_execution
+    %319:bool = eq %318, false
+    if %319 [t: $B62] {  # if_17
+      $B62: {  # true
+        terminate_invocation
+      }
+    }
+    ret %317
   }
 }
-%mergeSort_ = func():void -> %b62 {
-  %b62 = block {
+%mergeSort_ = func():void {
+  $B63: {
     %low:ptr<function, i32, read_write> = var
     %high:ptr<function, i32, read_write> = var
     %m:ptr<function, i32, read_write> = var
@@ -538,79 +632,106 @@
     store %low, 0i
     store %high, 9i
     store %m, 1i
-    loop [b: %b63, c: %b64] {  # loop_8
-      %b63 = block {  # body
-        %x_382:i32 = load %m
-        %x_383:i32 = load %high
-        %243:bool = lte %x_382, %x_383
-        if %243 [t: %b65, f: %b66] {  # if_17
-          %b65 = block {  # true
-            exit_if  # if_17
+    loop [b: $B64, c: $B65] {  # loop_8
+      $B64: {  # body
+        %331:i32 = load %m
+        %x_382:i32 = let %331
+        %333:i32 = load %high
+        %x_383:i32 = let %333
+        %335:bool = lte %x_382, %x_383
+        if %335 [t: $B66, f: $B67] {  # if_18
+          $B66: {  # true
+            exit_if  # if_18
           }
-          %b66 = block {  # false
+          $B67: {  # false
             exit_loop  # loop_8
           }
         }
-        %x_386:i32 = load %low
+        %336:i32 = load %low
+        %x_386:i32 = let %336
         store %i_2, %x_386
-        loop [b: %b67, c: %b68] {  # loop_9
-          %b67 = block {  # body
-            %x_391:i32 = load %i_2
-            %x_392:i32 = load %high
-            %247:bool = lt %x_391, %x_392
-            if %247 [t: %b69, f: %b70] {  # if_18
-              %b69 = block {  # true
-                exit_if  # if_18
+        loop [b: $B68, c: $B69] {  # loop_9
+          $B68: {  # body
+            %338:i32 = load %i_2
+            %x_391:i32 = let %338
+            %340:i32 = load %high
+            %x_392:i32 = let %340
+            %342:bool = lt %x_391, %x_392
+            if %342 [t: $B70, f: $B71] {  # if_19
+              $B70: {  # true
+                exit_if  # if_19
               }
-              %b70 = block {  # false
+              $B71: {  # false
                 exit_loop  # loop_9
               }
             }
-            %x_395:i32 = load %i_2
+            %343:i32 = load %i_2
+            %x_395:i32 = let %343
             store %f_1, %x_395
-            %x_396:i32 = load %i_2
-            %x_397:i32 = load %m
-            %251:i32 = add %x_396, %x_397
-            %252:i32 = sub %251, 1i
-            store %mid_1, %252
-            %x_400:i32 = load %i_2
-            %x_401:i32 = load %m
-            %x_405:i32 = load %high
-            %256:i32 = mul 2i, %x_401
-            %257:i32 = add %x_400, %256
-            %258:i32 = sub %257, 1i
-            %259:i32 = min %258, %x_405
-            store %to_1, %259
-            %x_407:i32 = load %f_1
+            %345:i32 = load %i_2
+            %x_396:i32 = let %345
+            %347:i32 = load %m
+            %x_397:i32 = let %347
+            %349:i32 = add %x_396, %x_397
+            %350:i32 = sub %349, 1i
+            store %mid_1, %350
+            %351:i32 = load %i_2
+            %x_400:i32 = let %351
+            %353:i32 = load %m
+            %x_401:i32 = let %353
+            %355:i32 = load %high
+            %x_405:i32 = let %355
+            %357:i32 = mul 2i, %x_401
+            %358:i32 = add %x_400, %357
+            %359:i32 = sub %358, 1i
+            %360:i32 = min %359, %x_405
+            store %to_1, %360
+            %361:i32 = load %f_1
+            %x_407:i32 = let %361
             store %param, %x_407
-            %x_408:i32 = load %mid_1
+            %363:i32 = load %mid_1
+            %x_408:i32 = let %363
             store %param_1, %x_408
-            %x_409:i32 = load %to_1
+            %365:i32 = load %to_1
+            %x_409:i32 = let %365
             store %param_2, %x_409
-            %263:void = call %merge_i1_i1_i1_, %param, %param_1, %param_2
-            continue %b68
+            %367:void = call %merge_i1_i1_i1_, %param, %param_1, %param_2
+            continue  # -> $B69
           }
-          %b68 = block {  # continuing
-            %x_411:i32 = load %m
-            %x_413:i32 = load %i_2
-            %266:i32 = mul 2i, %x_411
-            %267:i32 = add %x_413, %266
-            store %i_2, %267
-            next_iteration %b67
+          $B69: {  # continuing
+            %368:i32 = load %m
+            %x_411:i32 = let %368
+            %370:i32 = load %i_2
+            %x_413:i32 = let %370
+            %372:i32 = mul 2i, %x_411
+            %373:i32 = add %x_413, %372
+            store %i_2, %373
+            next_iteration  # -> $B68
           }
         }
-        continue %b64
+        continue  # -> $B65
       }
-      %b64 = block {  # continuing
-        %x_415:i32 = load %m
-        %269:i32 = mul 2i, %x_415
-        store %m, %269
-        next_iteration %b63
+      $B65: {  # continuing
+        %374:i32 = load %m
+        %x_415:i32 = let %374
+        %376:i32 = mul 2i, %x_415
+        store %m, %376
+        next_iteration  # -> $B64
       }
     }
     ret
   }
 }
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B72: {
+    %378:i32 = convert %value
+    %379:bool = gte %value, -2147483648.0f
+    %380:i32 = select -2147483648i, %378, %379
+    %381:bool = lte %value, 2147483520.0f
+    %382:i32 = select 2147483647i, %380, %381
+    ret %382
+  }
+}
 
 unhandled variable address space
 ********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/2.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/2.spvasm.expected.ir.msl
index 5904e30..d85f331 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/2.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/2.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,158 +8,166 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %data:ptr<private, array<i32, 10>, read_write> = var
   %temp:ptr<private, array<i32, 10>, read_write> = var
   %x_28:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%merge_i1_i1_i1_ = func(%f:ptr<function, i32, read_write>, %mid:ptr<function, i32, read_write>, %to:ptr<function, i32, read_write>):void -> %b2 {
-  %b2 = block {
+%merge_i1_i1_i1_ = func(%f:ptr<function, i32, read_write>, %mid:ptr<function, i32, read_write>, %to:ptr<function, i32, read_write>):void {
+  $B2: {
     %k:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %j:ptr<function, i32, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
-    %14:i32 = load %f
-    store %k, %14
     %15:i32 = load %f
-    store %i, %15
-    %16:i32 = load %mid
-    %17:i32 = add %16, 1i
-    store %j, %17
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %18:i32 = load %i
-        %19:i32 = load %mid
-        %20:bool = lte %18, %19
-        %21:i32 = load %j
-        %22:i32 = load %to
-        %23:bool = lte %21, %22
-        %24:bool = and %20, %23
-        if %24 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    store %k, %15
+    %16:i32 = load %f
+    store %i, %16
+    %17:i32 = load %mid
+    %18:i32 = add %17, 1i
+    store %j, %18
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %19:i32 = load %i
+        %20:i32 = load %mid
+        %21:bool = lte %19, %20
+        %22:i32 = load %j
+        %23:i32 = load %to
+        %24:bool = lte %22, %23
+        %25:bool = and %21, %24
+        if %25 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %25:i32 = load %i
-        %26:ptr<private, i32, read_write> = access %data, %25
-        %27:i32 = load %26
-        %28:i32 = load %j
-        %29:ptr<private, i32, read_write> = access %data, %28
-        %30:i32 = load %29
-        %31:bool = lt %27, %30
-        if %31 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
-            %x_328:i32 = load %k
+        %26:i32 = load %i
+        %27:ptr<private, i32, read_write> = access %data, %26
+        %28:i32 = load %27
+        %29:i32 = load %j
+        %30:ptr<private, i32, read_write> = access %data, %29
+        %31:i32 = load %30
+        %32:bool = lt %28, %31
+        if %32 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
             %33:i32 = load %k
-            %34:i32 = add %33, 1i
-            store %k, %34
-            %x_330:i32 = load %i
-            %36:i32 = load %i
-            %37:i32 = add %36, 1i
-            store %i, %37
-            %38:ptr<private, i32, read_write> = access %temp, %x_328
-            %39:ptr<private, i32, read_write> = access %data, %x_330
-            %40:i32 = load %39
-            store %38, %40
+            %x_328:i32 = let %33
+            %35:i32 = load %k
+            %36:i32 = add %35, 1i
+            store %k, %36
+            %37:i32 = load %i
+            %x_330:i32 = let %37
+            %39:i32 = load %i
+            %40:i32 = add %39, 1i
+            store %i, %40
+            %41:ptr<private, i32, read_write> = access %temp, %x_328
+            %42:ptr<private, i32, read_write> = access %data, %x_330
+            %43:i32 = load %42
+            store %41, %43
             exit_if  # if_2
           }
-          %b8 = block {  # false
-            %x_335:i32 = load %k
-            %42:i32 = load %k
-            %43:i32 = add %42, 1i
-            store %k, %43
-            %x_337:i32 = load %j
-            %45:i32 = load %j
-            %46:i32 = add %45, 1i
-            store %j, %46
-            %47:ptr<private, i32, read_write> = access %temp, %x_335
-            %48:ptr<private, i32, read_write> = access %data, %x_337
-            %49:i32 = load %48
-            store %47, %49
+          $B8: {  # false
+            %44:i32 = load %k
+            %x_335:i32 = let %44
+            %46:i32 = load %k
+            %47:i32 = add %46, 1i
+            store %k, %47
+            %48:i32 = load %j
+            %x_337:i32 = let %48
+            %50:i32 = load %j
+            %51:i32 = add %50, 1i
+            store %j, %51
+            %52:ptr<private, i32, read_write> = access %temp, %x_335
+            %53:ptr<private, i32, read_write> = access %data, %x_337
+            %54:i32 = load %53
+            store %52, %54
             exit_if  # if_2
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
-    loop [b: %b9, c: %b10] {  # loop_2
-      %b9 = block {  # body
-        %50:i32 = load %i
-        %51:bool = lt %50, 10i
-        %52:i32 = load %i
-        %53:i32 = load %mid
-        %54:bool = lte %52, %53
-        %55:bool = and %51, %54
-        if %55 [t: %b11, f: %b12] {  # if_3
-          %b11 = block {  # true
+    loop [b: $B9, c: $B10] {  # loop_2
+      $B9: {  # body
+        %55:i32 = load %i
+        %56:bool = lt %55, 10i
+        %57:i32 = load %i
+        %58:i32 = load %mid
+        %59:bool = lte %57, %58
+        %60:bool = and %56, %59
+        if %60 [t: $B11, f: $B12] {  # if_3
+          $B11: {  # true
             exit_if  # if_3
           }
-          %b12 = block {  # false
+          $B12: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_353:i32 = load %k
-        %57:i32 = load %k
-        %58:i32 = add %57, 1i
-        store %k, %58
-        %x_355:i32 = load %i
-        %60:i32 = load %i
-        %61:i32 = add %60, 1i
-        store %i, %61
-        %62:ptr<private, i32, read_write> = access %temp, %x_353
-        %63:ptr<private, i32, read_write> = access %data, %x_355
-        %64:i32 = load %63
-        store %62, %64
-        continue %b10
+        %61:i32 = load %k
+        %x_353:i32 = let %61
+        %63:i32 = load %k
+        %64:i32 = add %63, 1i
+        store %k, %64
+        %65:i32 = load %i
+        %x_355:i32 = let %65
+        %67:i32 = load %i
+        %68:i32 = add %67, 1i
+        store %i, %68
+        %69:ptr<private, i32, read_write> = access %temp, %x_353
+        %70:ptr<private, i32, read_write> = access %data, %x_355
+        %71:i32 = load %70
+        store %69, %71
+        continue  # -> $B10
       }
-      %b10 = block {  # continuing
-        next_iteration %b9
+      $B10: {  # continuing
+        next_iteration  # -> $B9
       }
     }
-    %65:i32 = load %f
-    store %i_1, %65
-    loop [b: %b13, c: %b14] {  # loop_3
-      %b13 = block {  # body
-        %66:i32 = load %i_1
-        %67:i32 = load %to
-        %68:bool = lte %66, %67
-        if %68 [t: %b15, f: %b16] {  # if_4
-          %b15 = block {  # true
+    %72:i32 = load %f
+    store %i_1, %72
+    loop [b: $B13, c: $B14] {  # loop_3
+      $B13: {  # body
+        %73:i32 = load %i_1
+        %74:i32 = load %to
+        %75:bool = lte %73, %74
+        if %75 [t: $B15, f: $B16] {  # if_4
+          $B15: {  # true
             exit_if  # if_4
           }
-          %b16 = block {  # false
+          $B16: {  # false
             exit_loop  # loop_3
           }
         }
-        %x_369:i32 = load %i_1
-        %70:ptr<private, i32, read_write> = access %data, %x_369
-        %71:i32 = load %i_1
-        %72:ptr<private, i32, read_write> = access %temp, %71
-        %73:i32 = load %72
-        store %70, %73
-        continue %b14
+        %76:i32 = load %i_1
+        %x_369:i32 = let %76
+        %78:ptr<private, i32, read_write> = access %data, %x_369
+        %79:i32 = load %i_1
+        %80:ptr<private, i32, read_write> = access %temp, %79
+        %81:i32 = load %80
+        store %78, %81
+        continue  # -> $B14
       }
-      %b14 = block {  # continuing
-        %74:i32 = load %i_1
-        %75:i32 = add %74, 1i
-        store %i_1, %75
-        next_iteration %b13
+      $B14: {  # continuing
+        %82:i32 = load %i_1
+        %83:i32 = add %82, 1i
+        store %i_1, %83
+        next_iteration  # -> $B13
       }
     }
     ret
   }
 }
-%main_1 = func():void -> %b17 {
-  %b17 = block {
+%main_1 = func():void {
+  $B17: {
     %x_85:ptr<function, i32, read_write> = var
     %x_86:ptr<function, i32, read_write> = var
     %x_87:ptr<function, i32, read_write> = var
@@ -173,313 +181,326 @@
     %i_3:ptr<function, i32, read_write> = var
     %j_1:ptr<function, i32, read_write> = var
     %grey:ptr<function, f32, read_write> = var
-    %90:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
-    %91:f32 = load_vector_element %90, 0u
-    %92:i32 = convert %91
-    store %i_3, %92
-    loop [b: %b18, c: %b19] {  # loop_4
-      %b18 = block {  # body
-        %x_102:i32 = load %i_3
-        switch %x_102 [c: (9i, %b20), c: (8i, %b21), c: (7i, %b22), c: (6i, %b23), c: (5i, %b24), c: (4i, %b25), c: (3i, %b26), c: (2i, %b27), c: (1i, %b28), c: (0i, %b29), c: (default, %b30)] {  # switch_1
-          %b20 = block {  # case
-            %x_132:i32 = load %i_3
-            %95:ptr<private, i32, read_write> = access %data, %x_132
-            store %95, -5i
+    %98:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
+    %99:f32 = load_vector_element %98, 0u
+    %100:i32 = call %tint_f32_to_i32, %99
+    store %i_3, %100
+    loop [b: $B18, c: $B19] {  # loop_4
+      $B18: {  # body
+        %102:i32 = load %i_3
+        %x_102:i32 = let %102
+        switch %x_102 [c: (9i, $B20), c: (8i, $B21), c: (7i, $B22), c: (6i, $B23), c: (5i, $B24), c: (4i, $B25), c: (3i, $B26), c: (2i, $B27), c: (1i, $B28), c: (0i, $B29), c: (default, $B30)] {  # switch_1
+          $B20: {  # case
+            %104:i32 = load %i_3
+            %x_132:i32 = let %104
+            %106:ptr<private, i32, read_write> = access %data, %x_132
+            store %106, -5i
             exit_switch  # switch_1
           }
-          %b21 = block {  # case
-            %x_130:i32 = load %i_3
-            %97:ptr<private, i32, read_write> = access %data, %x_130
-            store %97, -4i
+          $B21: {  # case
+            %107:i32 = load %i_3
+            %x_130:i32 = let %107
+            %109:ptr<private, i32, read_write> = access %data, %x_130
+            store %109, -4i
             exit_switch  # switch_1
           }
-          %b22 = block {  # case
-            %x_128:i32 = load %i_3
-            %99:ptr<private, i32, read_write> = access %data, %x_128
-            store %99, -3i
+          $B22: {  # case
+            %110:i32 = load %i_3
+            %x_128:i32 = let %110
+            %112:ptr<private, i32, read_write> = access %data, %x_128
+            store %112, -3i
             exit_switch  # switch_1
           }
-          %b23 = block {  # case
-            %x_126:i32 = load %i_3
-            %101:ptr<private, i32, read_write> = access %data, %x_126
-            store %101, -2i
+          $B23: {  # case
+            %113:i32 = load %i_3
+            %x_126:i32 = let %113
+            %115:ptr<private, i32, read_write> = access %data, %x_126
+            store %115, -2i
             exit_switch  # switch_1
           }
-          %b24 = block {  # case
-            %x_124:i32 = load %i_3
-            %103:ptr<private, i32, read_write> = access %data, %x_124
-            store %103, -1i
+          $B24: {  # case
+            %116:i32 = load %i_3
+            %x_124:i32 = let %116
+            %118:ptr<private, i32, read_write> = access %data, %x_124
+            store %118, -1i
             exit_switch  # switch_1
           }
-          %b25 = block {  # case
-            %x_122:i32 = load %i_3
-            %105:ptr<private, i32, read_write> = access %data, %x_122
-            store %105, 0i
+          $B25: {  # case
+            %119:i32 = load %i_3
+            %x_122:i32 = let %119
+            %121:ptr<private, i32, read_write> = access %data, %x_122
+            store %121, 0i
             exit_switch  # switch_1
           }
-          %b26 = block {  # case
-            %x_120:i32 = load %i_3
-            %107:ptr<private, i32, read_write> = access %data, %x_120
-            store %107, 1i
+          $B26: {  # case
+            %122:i32 = load %i_3
+            %x_120:i32 = let %122
+            %124:ptr<private, i32, read_write> = access %data, %x_120
+            store %124, 1i
             exit_switch  # switch_1
           }
-          %b27 = block {  # case
-            %x_118:i32 = load %i_3
-            %109:ptr<private, i32, read_write> = access %data, %x_118
-            store %109, 2i
+          $B27: {  # case
+            %125:i32 = load %i_3
+            %x_118:i32 = let %125
+            %127:ptr<private, i32, read_write> = access %data, %x_118
+            store %127, 2i
             exit_switch  # switch_1
           }
-          %b28 = block {  # case
-            %x_116:i32 = load %i_3
-            %111:ptr<private, i32, read_write> = access %data, %x_116
-            store %111, 3i
+          $B28: {  # case
+            %128:i32 = load %i_3
+            %x_116:i32 = let %128
+            %130:ptr<private, i32, read_write> = access %data, %x_116
+            store %130, 3i
             exit_switch  # switch_1
           }
-          %b29 = block {  # case
-            %x_114:i32 = load %i_3
-            %113:ptr<private, i32, read_write> = access %data, %x_114
-            store %113, 4i
+          $B29: {  # case
+            %131:i32 = load %i_3
+            %x_114:i32 = let %131
+            %133:ptr<private, i32, read_write> = access %data, %x_114
+            store %133, 4i
             exit_switch  # switch_1
           }
-          %b30 = block {  # case
+          $B30: {  # case
             exit_switch  # switch_1
           }
         }
-        %114:i32 = load %i_3
-        %115:i32 = add %114, 1i
-        store %i_3, %115
-        continue %b19
+        %134:i32 = load %i_3
+        %135:i32 = add %134, 1i
+        store %i_3, %135
+        continue  # -> $B19
       }
-      %b19 = block {  # continuing
-        %x_136:i32 = load %i_3
-        %117:bool = lt %x_136, 10i
-        %118:bool = eq %117, false
-        break_if %118 %b18
+      $B19: {  # continuing
+        %136:i32 = load %i_3
+        %x_136:i32 = let %136
+        %138:bool = lt %x_136, 10i
+        %139:bool = eq %138, false
+        break_if %139  # -> [t: exit_loop loop_4, f: $B18]
       }
     }
     store %j_1, 0i
-    loop [b: %b31, c: %b32] {  # loop_5
-      %b31 = block {  # body
-        %119:i32 = load %j_1
-        %120:bool = lt %119, 10i
-        if %120 [t: %b33, f: %b34] {  # if_5
-          %b33 = block {  # true
+    loop [b: $B31, c: $B32] {  # loop_5
+      $B31: {  # body
+        %140:i32 = load %j_1
+        %141:bool = lt %140, 10i
+        if %141 [t: $B33, f: $B34] {  # if_5
+          $B33: {  # true
             exit_if  # if_5
           }
-          %b34 = block {  # false
+          $B34: {  # false
             exit_loop  # loop_5
           }
         }
-        %x_145:i32 = load %j_1
-        %122:ptr<private, i32, read_write> = access %temp, %x_145
-        %123:i32 = load %j_1
-        %124:ptr<private, i32, read_write> = access %data, %123
-        %125:i32 = load %124
-        store %122, %125
-        continue %b32
+        %142:i32 = load %j_1
+        %x_145:i32 = let %142
+        %144:ptr<private, i32, read_write> = access %temp, %x_145
+        %145:i32 = load %j_1
+        %146:ptr<private, i32, read_write> = access %data, %145
+        %147:i32 = load %146
+        store %144, %147
+        continue  # -> $B32
       }
-      %b32 = block {  # continuing
-        %126:i32 = load %j_1
-        %127:i32 = add %126, 1i
-        store %j_1, %127
-        next_iteration %b31
+      $B32: {  # continuing
+        %148:i32 = load %j_1
+        %149:i32 = add %148, 1i
+        store %j_1, %149
+        next_iteration  # -> $B31
       }
     }
     store %x_94, 0i
     store %x_93, 9i
     store %x_92, 1i
-    loop [b: %b35, c: %b36] {  # loop_6
-      %b35 = block {  # body
-        %128:i32 = load %x_92
-        %129:i32 = load %x_93
-        %130:bool = lte %128, %129
-        if %130 [t: %b37, f: %b38] {  # if_6
-          %b37 = block {  # true
+    loop [b: $B35, c: $B36] {  # loop_6
+      $B35: {  # body
+        %150:i32 = load %x_92
+        %151:i32 = load %x_93
+        %152:bool = lte %150, %151
+        if %152 [t: $B37, f: $B38] {  # if_6
+          $B37: {  # true
             exit_if  # if_6
           }
-          %b38 = block {  # false
+          $B38: {  # false
             exit_loop  # loop_6
           }
         }
-        %131:i32 = load %x_94
-        store %x_91, %131
-        loop [b: %b39, c: %b40] {  # loop_7
-          %b39 = block {  # body
-            %132:i32 = load %x_91
-            %133:i32 = load %x_93
-            %134:bool = lt %132, %133
-            if %134 [t: %b41, f: %b42] {  # if_7
-              %b41 = block {  # true
+        %153:i32 = load %x_94
+        store %x_91, %153
+        loop [b: $B39, c: $B40] {  # loop_7
+          $B39: {  # body
+            %154:i32 = load %x_91
+            %155:i32 = load %x_93
+            %156:bool = lt %154, %155
+            if %156 [t: $B41, f: $B42] {  # if_7
+              $B41: {  # true
                 exit_if  # if_7
               }
-              %b42 = block {  # false
+              $B42: {  # false
                 exit_loop  # loop_7
               }
             }
-            %135:i32 = load %x_91
-            store %x_90, %135
-            %136:i32 = load %x_91
-            %137:i32 = load %x_92
-            %138:i32 = add %136, %137
-            %139:i32 = sub %138, 1i
-            store %x_89, %139
-            %140:i32 = load %x_91
-            %141:i32 = load %x_92
-            %142:i32 = mul 2i, %141
-            %143:i32 = add %140, %142
-            %144:i32 = sub %143, 1i
-            %145:i32 = load %x_93
-            %146:i32 = min %144, %145
-            store %x_88, %146
-            %147:i32 = load %x_90
-            store %x_87, %147
-            %148:i32 = load %x_89
-            store %x_86, %148
-            %149:i32 = load %x_88
-            store %x_85, %149
-            %150:void = call %merge_i1_i1_i1_, %x_87, %x_86, %x_85
-            continue %b40
+            %157:i32 = load %x_91
+            store %x_90, %157
+            %158:i32 = load %x_91
+            %159:i32 = load %x_92
+            %160:i32 = add %158, %159
+            %161:i32 = sub %160, 1i
+            store %x_89, %161
+            %162:i32 = load %x_91
+            %163:i32 = load %x_92
+            %164:i32 = mul 2i, %163
+            %165:i32 = add %162, %164
+            %166:i32 = sub %165, 1i
+            %167:i32 = load %x_93
+            %168:i32 = min %166, %167
+            store %x_88, %168
+            %169:i32 = load %x_90
+            store %x_87, %169
+            %170:i32 = load %x_89
+            store %x_86, %170
+            %171:i32 = load %x_88
+            store %x_85, %171
+            %172:void = call %merge_i1_i1_i1_, %x_87, %x_86, %x_85
+            continue  # -> $B40
           }
-          %b40 = block {  # continuing
-            %151:i32 = load %x_91
-            %152:i32 = load %x_92
-            %153:i32 = mul 2i, %152
-            %154:i32 = add %151, %153
-            store %x_91, %154
-            next_iteration %b39
+          $B40: {  # continuing
+            %173:i32 = load %x_91
+            %174:i32 = load %x_92
+            %175:i32 = mul 2i, %174
+            %176:i32 = add %173, %175
+            store %x_91, %176
+            next_iteration  # -> $B39
           }
         }
-        continue %b36
+        continue  # -> $B36
       }
-      %b36 = block {  # continuing
-        %155:i32 = load %x_92
-        %156:i32 = mul 2i, %155
-        store %x_92, %156
-        next_iteration %b35
+      $B36: {  # continuing
+        %177:i32 = load %x_92
+        %178:i32 = mul 2i, %177
+        store %x_92, %178
+        next_iteration  # -> $B35
       }
     }
-    %157:f32 = load_vector_element %gl_FragCoord, 1u
-    %158:i32 = convert %157
-    %159:bool = lt %158, 30i
-    if %159 [t: %b43, f: %b44] {  # if_8
-      %b43 = block {  # true
-        %160:ptr<private, i32, read_write> = access %data, 0i
-        %161:i32 = load %160
-        %162:f32 = convert %161
-        %163:f32 = div %162, 10.0f
-        %164:f32 = add 0.5f, %163
-        store %grey, %164
+    %179:f32 = load_vector_element %gl_FragCoord, 1u
+    %180:i32 = call %tint_f32_to_i32, %179
+    %181:bool = lt %180, 30i
+    if %181 [t: $B43, f: $B44] {  # if_8
+      $B43: {  # true
+        %182:ptr<private, i32, read_write> = access %data, 0i
+        %183:i32 = load %182
+        %184:f32 = convert %183
+        %185:f32 = div %184, 10.0f
+        %186:f32 = add 0.5f, %185
+        store %grey, %186
         exit_if  # if_8
       }
-      %b44 = block {  # false
-        %165:f32 = load_vector_element %gl_FragCoord, 1u
-        %166:i32 = convert %165
-        %167:bool = lt %166, 60i
-        if %167 [t: %b45, f: %b46] {  # if_9
-          %b45 = block {  # true
-            %168:ptr<private, i32, read_write> = access %data, 1i
-            %169:i32 = load %168
-            %170:f32 = convert %169
-            %171:f32 = div %170, 10.0f
-            %172:f32 = add 0.5f, %171
-            store %grey, %172
+      $B44: {  # false
+        %187:f32 = load_vector_element %gl_FragCoord, 1u
+        %188:i32 = call %tint_f32_to_i32, %187
+        %189:bool = lt %188, 60i
+        if %189 [t: $B45, f: $B46] {  # if_9
+          $B45: {  # true
+            %190:ptr<private, i32, read_write> = access %data, 1i
+            %191:i32 = load %190
+            %192:f32 = convert %191
+            %193:f32 = div %192, 10.0f
+            %194:f32 = add 0.5f, %193
+            store %grey, %194
             exit_if  # if_9
           }
-          %b46 = block {  # false
-            %173:f32 = load_vector_element %gl_FragCoord, 1u
-            %174:i32 = convert %173
-            %175:bool = lt %174, 90i
-            if %175 [t: %b47, f: %b48] {  # if_10
-              %b47 = block {  # true
-                %176:ptr<private, i32, read_write> = access %data, 2i
-                %177:i32 = load %176
-                %178:f32 = convert %177
-                %179:f32 = div %178, 10.0f
-                %180:f32 = add 0.5f, %179
-                store %grey, %180
+          $B46: {  # false
+            %195:f32 = load_vector_element %gl_FragCoord, 1u
+            %196:i32 = call %tint_f32_to_i32, %195
+            %197:bool = lt %196, 90i
+            if %197 [t: $B47, f: $B48] {  # if_10
+              $B47: {  # true
+                %198:ptr<private, i32, read_write> = access %data, 2i
+                %199:i32 = load %198
+                %200:f32 = convert %199
+                %201:f32 = div %200, 10.0f
+                %202:f32 = add 0.5f, %201
+                store %grey, %202
                 exit_if  # if_10
               }
-              %b48 = block {  # false
-                %181:f32 = load_vector_element %gl_FragCoord, 1u
-                %182:i32 = convert %181
-                %183:bool = lt %182, 120i
-                if %183 [t: %b49, f: %b50] {  # if_11
-                  %b49 = block {  # true
-                    %184:ptr<private, i32, read_write> = access %data, 3i
-                    %185:i32 = load %184
-                    %186:f32 = convert %185
-                    %187:f32 = div %186, 10.0f
-                    %188:f32 = add 0.5f, %187
-                    store %grey, %188
+              $B48: {  # false
+                %203:f32 = load_vector_element %gl_FragCoord, 1u
+                %204:i32 = call %tint_f32_to_i32, %203
+                %205:bool = lt %204, 120i
+                if %205 [t: $B49, f: $B50] {  # if_11
+                  $B49: {  # true
+                    %206:ptr<private, i32, read_write> = access %data, 3i
+                    %207:i32 = load %206
+                    %208:f32 = convert %207
+                    %209:f32 = div %208, 10.0f
+                    %210:f32 = add 0.5f, %209
+                    store %grey, %210
                     exit_if  # if_11
                   }
-                  %b50 = block {  # false
-                    %189:f32 = load_vector_element %gl_FragCoord, 1u
-                    %190:i32 = convert %189
-                    %191:bool = lt %190, 150i
-                    if %191 [t: %b51, f: %b52] {  # if_12
-                      %b51 = block {  # true
-                        discard
+                  $B50: {  # false
+                    %211:f32 = load_vector_element %gl_FragCoord, 1u
+                    %212:i32 = call %tint_f32_to_i32, %211
+                    %213:bool = lt %212, 150i
+                    if %213 [t: $B51, f: $B52] {  # if_12
+                      $B51: {  # true
+                        store %continue_execution, false
                         exit_if  # if_12
                       }
-                      %b52 = block {  # false
-                        %192:f32 = load_vector_element %gl_FragCoord, 1u
-                        %193:i32 = convert %192
-                        %194:bool = lt %193, 180i
-                        if %194 [t: %b53, f: %b54] {  # if_13
-                          %b53 = block {  # true
-                            %195:ptr<private, i32, read_write> = access %data, 5i
-                            %196:i32 = load %195
-                            %197:f32 = convert %196
-                            %198:f32 = div %197, 10.0f
-                            %199:f32 = add 0.5f, %198
-                            store %grey, %199
+                      $B52: {  # false
+                        %214:f32 = load_vector_element %gl_FragCoord, 1u
+                        %215:i32 = call %tint_f32_to_i32, %214
+                        %216:bool = lt %215, 180i
+                        if %216 [t: $B53, f: $B54] {  # if_13
+                          $B53: {  # true
+                            %217:ptr<private, i32, read_write> = access %data, 5i
+                            %218:i32 = load %217
+                            %219:f32 = convert %218
+                            %220:f32 = div %219, 10.0f
+                            %221:f32 = add 0.5f, %220
+                            store %grey, %221
                             exit_if  # if_13
                           }
-                          %b54 = block {  # false
-                            %200:f32 = load_vector_element %gl_FragCoord, 1u
-                            %201:i32 = convert %200
-                            %202:bool = lt %201, 210i
-                            if %202 [t: %b55, f: %b56] {  # if_14
-                              %b55 = block {  # true
-                                %203:ptr<private, i32, read_write> = access %data, 6i
-                                %204:i32 = load %203
-                                %205:f32 = convert %204
-                                %206:f32 = div %205, 10.0f
-                                %207:f32 = add 0.5f, %206
-                                store %grey, %207
+                          $B54: {  # false
+                            %222:f32 = load_vector_element %gl_FragCoord, 1u
+                            %223:i32 = call %tint_f32_to_i32, %222
+                            %224:bool = lt %223, 210i
+                            if %224 [t: $B55, f: $B56] {  # if_14
+                              $B55: {  # true
+                                %225:ptr<private, i32, read_write> = access %data, 6i
+                                %226:i32 = load %225
+                                %227:f32 = convert %226
+                                %228:f32 = div %227, 10.0f
+                                %229:f32 = add 0.5f, %228
+                                store %grey, %229
                                 exit_if  # if_14
                               }
-                              %b56 = block {  # false
-                                %208:f32 = load_vector_element %gl_FragCoord, 1u
-                                %209:i32 = convert %208
-                                %210:bool = lt %209, 240i
-                                if %210 [t: %b57, f: %b58] {  # if_15
-                                  %b57 = block {  # true
-                                    %211:ptr<private, i32, read_write> = access %data, 7i
-                                    %212:i32 = load %211
-                                    %213:f32 = convert %212
-                                    %214:f32 = div %213, 10.0f
-                                    %215:f32 = add 0.5f, %214
-                                    store %grey, %215
+                              $B56: {  # false
+                                %230:f32 = load_vector_element %gl_FragCoord, 1u
+                                %231:i32 = call %tint_f32_to_i32, %230
+                                %232:bool = lt %231, 240i
+                                if %232 [t: $B57, f: $B58] {  # if_15
+                                  $B57: {  # true
+                                    %233:ptr<private, i32, read_write> = access %data, 7i
+                                    %234:i32 = load %233
+                                    %235:f32 = convert %234
+                                    %236:f32 = div %235, 10.0f
+                                    %237:f32 = add 0.5f, %236
+                                    store %grey, %237
                                     exit_if  # if_15
                                   }
-                                  %b58 = block {  # false
-                                    %216:f32 = load_vector_element %gl_FragCoord, 1u
-                                    %217:i32 = convert %216
-                                    %218:bool = lt %217, 270i
-                                    if %218 [t: %b59, f: %b60] {  # if_16
-                                      %b59 = block {  # true
-                                        %219:ptr<private, i32, read_write> = access %data, 8i
-                                        %220:i32 = load %219
-                                        %221:f32 = convert %220
-                                        %222:f32 = div %221, 10.0f
-                                        %223:f32 = add 0.5f, %222
-                                        store %grey, %223
+                                  $B58: {  # false
+                                    %238:f32 = load_vector_element %gl_FragCoord, 1u
+                                    %239:i32 = call %tint_f32_to_i32, %238
+                                    %240:bool = lt %239, 270i
+                                    if %240 [t: $B59, f: $B60] {  # if_16
+                                      $B59: {  # true
+                                        %241:ptr<private, i32, read_write> = access %data, 8i
+                                        %242:i32 = load %241
+                                        %243:f32 = convert %242
+                                        %244:f32 = div %243, 10.0f
+                                        %245:f32 = add 0.5f, %244
+                                        store %grey, %245
                                         exit_if  # if_16
                                       }
-                                      %b60 = block {  # false
-                                        discard
+                                      $B60: {  # false
+                                        store %continue_execution, false
                                         exit_if  # if_16
                                       }
                                     }
@@ -507,27 +528,35 @@
         exit_if  # if_8
       }
     }
-    %224:f32 = load %grey
-    %x_296:vec3<f32> = construct %224
-    %226:f32 = access %x_296, 0u
-    %227:f32 = access %x_296, 1u
-    %228:f32 = access %x_296, 2u
-    %229:vec4<f32> = construct %226, %227, %228, 1.0f
-    store %x_GLF_color, %229
+    %246:f32 = load %grey
+    %247:vec3<f32> = construct %246
+    %x_296:vec3<f32> = let %247
+    %249:f32 = access %x_296, 0u
+    %250:f32 = access %x_296, 1u
+    %251:f32 = access %x_296, 2u
+    %252:vec4<f32> = construct %249, %250, %251, 1.0f
+    store %x_GLF_color, %252
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b61 {
-  %b61 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B61: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %232:void = call %main_1
-    %233:vec4<f32> = load %x_GLF_color
-    %234:main_out = construct %233
-    ret %234
+    %255:void = call %main_1
+    %256:vec4<f32> = load %x_GLF_color
+    %257:main_out = construct %256
+    %258:bool = load %continue_execution
+    %259:bool = eq %258, false
+    if %259 [t: $B62] {  # if_17
+      $B62: {  # true
+        terminate_invocation
+      }
+    }
+    ret %257
   }
 }
-%mergeSort_ = func():void -> %b62 {
-  %b62 = block {
+%mergeSort_ = func():void {
+  $B63: {
     %low:ptr<function, i32, read_write> = var
     %high:ptr<function, i32, read_write> = var
     %m:ptr<function, i32, read_write> = var
@@ -541,79 +570,89 @@
     store %low, 0i
     store %high, 9i
     store %m, 1i
-    loop [b: %b63, c: %b64] {  # loop_8
-      %b63 = block {  # body
-        %246:i32 = load %m
-        %247:i32 = load %high
-        %248:bool = lte %246, %247
-        if %248 [t: %b65, f: %b66] {  # if_17
-          %b65 = block {  # true
-            exit_if  # if_17
+    loop [b: $B64, c: $B65] {  # loop_8
+      $B64: {  # body
+        %271:i32 = load %m
+        %272:i32 = load %high
+        %273:bool = lte %271, %272
+        if %273 [t: $B66, f: $B67] {  # if_18
+          $B66: {  # true
+            exit_if  # if_18
           }
-          %b66 = block {  # false
+          $B67: {  # false
             exit_loop  # loop_8
           }
         }
-        %249:i32 = load %low
-        store %i_2, %249
-        loop [b: %b67, c: %b68] {  # loop_9
-          %b67 = block {  # body
-            %250:i32 = load %i_2
-            %251:i32 = load %high
-            %252:bool = lt %250, %251
-            if %252 [t: %b69, f: %b70] {  # if_18
-              %b69 = block {  # true
-                exit_if  # if_18
+        %274:i32 = load %low
+        store %i_2, %274
+        loop [b: $B68, c: $B69] {  # loop_9
+          $B68: {  # body
+            %275:i32 = load %i_2
+            %276:i32 = load %high
+            %277:bool = lt %275, %276
+            if %277 [t: $B70, f: $B71] {  # if_19
+              $B70: {  # true
+                exit_if  # if_19
               }
-              %b70 = block {  # false
+              $B71: {  # false
                 exit_loop  # loop_9
               }
             }
-            %253:i32 = load %i_2
-            store %f_1, %253
-            %254:i32 = load %i_2
-            %255:i32 = load %m
-            %256:i32 = add %254, %255
-            %257:i32 = sub %256, 1i
-            store %mid_1, %257
-            %258:i32 = load %i_2
-            %259:i32 = load %m
-            %260:i32 = mul 2i, %259
-            %261:i32 = add %258, %260
-            %262:i32 = sub %261, 1i
-            %263:i32 = load %high
-            %264:i32 = min %262, %263
-            store %to_1, %264
-            %265:i32 = load %f_1
-            store %param, %265
-            %266:i32 = load %mid_1
-            store %param_1, %266
-            %267:i32 = load %to_1
-            store %param_2, %267
-            %268:void = call %merge_i1_i1_i1_, %param, %param_1, %param_2
-            continue %b68
+            %278:i32 = load %i_2
+            store %f_1, %278
+            %279:i32 = load %i_2
+            %280:i32 = load %m
+            %281:i32 = add %279, %280
+            %282:i32 = sub %281, 1i
+            store %mid_1, %282
+            %283:i32 = load %i_2
+            %284:i32 = load %m
+            %285:i32 = mul 2i, %284
+            %286:i32 = add %283, %285
+            %287:i32 = sub %286, 1i
+            %288:i32 = load %high
+            %289:i32 = min %287, %288
+            store %to_1, %289
+            %290:i32 = load %f_1
+            store %param, %290
+            %291:i32 = load %mid_1
+            store %param_1, %291
+            %292:i32 = load %to_1
+            store %param_2, %292
+            %293:void = call %merge_i1_i1_i1_, %param, %param_1, %param_2
+            continue  # -> $B69
           }
-          %b68 = block {  # continuing
-            %269:i32 = load %i_2
-            %270:i32 = load %m
-            %271:i32 = mul 2i, %270
-            %272:i32 = add %269, %271
-            store %i_2, %272
-            next_iteration %b67
+          $B69: {  # continuing
+            %294:i32 = load %i_2
+            %295:i32 = load %m
+            %296:i32 = mul 2i, %295
+            %297:i32 = add %294, %296
+            store %i_2, %297
+            next_iteration  # -> $B68
           }
         }
-        continue %b64
+        continue  # -> $B65
       }
-      %b64 = block {  # continuing
-        %273:i32 = load %m
-        %274:i32 = mul 2i, %273
-        store %m, %274
-        next_iteration %b63
+      $B65: {  # continuing
+        %298:i32 = load %m
+        %299:i32 = mul 2i, %298
+        store %m, %299
+        next_iteration  # -> $B64
       }
     }
     ret
   }
 }
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B72: {
+    %301:i32 = convert %value
+    %302:bool = gte %value, -2147483648.0f
+    %303:i32 = select -2147483648i, %301, %302
+    %304:bool = lte %value, 2147483520.0f
+    %305:i32 = select 2147483647i, %303, %304
+    ret %305
+  }
+}
 
 unhandled variable address space
 ********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/2.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/2.wgsl.expected.ir.msl
index 68e4cd0..e1fb12b 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/2.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/2.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,152 +8,183 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %data:ptr<private, array<i32, 10>, read_write> = var
   %temp:ptr<private, array<i32, 10>, read_write> = var
   %x_28:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%merge_i1_i1_i1_ = func(%f:ptr<function, i32, read_write>, %mid:ptr<function, i32, read_write>, %to:ptr<function, i32, read_write>):void -> %b2 {
-  %b2 = block {
+%merge_i1_i1_i1_ = func(%f:ptr<function, i32, read_write>, %mid:ptr<function, i32, read_write>, %to:ptr<function, i32, read_write>):void {
+  $B2: {
     %k:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %j:ptr<function, i32, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
-    %x_302:i32 = load %f
+    %15:i32 = load %f
+    %x_302:i32 = let %15
     store %k, %x_302
-    %x_303:i32 = load %f
+    %17:i32 = load %f
+    %x_303:i32 = let %17
     store %i, %x_303
-    %x_304:i32 = load %mid
-    %17:i32 = add %x_304, 1i
-    store %j, %17
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_310:i32 = load %i
-        %x_311:i32 = load %mid
-        %x_313:i32 = load %j
-        %x_314:i32 = load %to
-        %22:bool = lte %x_310, %x_311
-        %23:bool = lte %x_313, %x_314
-        %24:bool = and %22, %23
-        if %24 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    %19:i32 = load %mid
+    %x_304:i32 = let %19
+    %21:i32 = add %x_304, 1i
+    store %j, %21
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %22:i32 = load %i
+        %x_310:i32 = let %22
+        %24:i32 = load %mid
+        %x_311:i32 = let %24
+        %26:i32 = load %j
+        %x_313:i32 = let %26
+        %28:i32 = load %to
+        %x_314:i32 = let %28
+        %30:bool = lte %x_310, %x_311
+        %31:bool = lte %x_313, %x_314
+        %32:bool = and %30, %31
+        if %32 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_318:i32 = load %i
-        %26:ptr<private, i32, read_write> = access %data, %x_318
-        %x_320:i32 = load %26
-        %x_321:i32 = load %j
-        %29:ptr<private, i32, read_write> = access %data, %x_321
-        %x_323:i32 = load %29
-        %31:bool = lt %x_320, %x_323
-        if %31 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
-            %x_328:i32 = load %k
-            %33:i32 = add %x_328, 1i
-            store %k, %33
-            %x_330:i32 = load %i
-            %35:i32 = add %x_330, 1i
-            store %i, %35
-            %36:ptr<private, i32, read_write> = access %data, %x_330
-            %x_333:i32 = load %36
-            %38:ptr<private, i32, read_write> = access %temp, %x_328
-            store %38, %x_333
+        %33:i32 = load %i
+        %x_318:i32 = let %33
+        %35:ptr<private, i32, read_write> = access %data, %x_318
+        %36:i32 = load %35
+        %x_320:i32 = let %36
+        %38:i32 = load %j
+        %x_321:i32 = let %38
+        %40:ptr<private, i32, read_write> = access %data, %x_321
+        %41:i32 = load %40
+        %x_323:i32 = let %41
+        %43:bool = lt %x_320, %x_323
+        if %43 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
+            %44:i32 = load %k
+            %x_328:i32 = let %44
+            %46:i32 = add %x_328, 1i
+            store %k, %46
+            %47:i32 = load %i
+            %x_330:i32 = let %47
+            %49:i32 = add %x_330, 1i
+            store %i, %49
+            %50:ptr<private, i32, read_write> = access %data, %x_330
+            %51:i32 = load %50
+            %x_333:i32 = let %51
+            %53:ptr<private, i32, read_write> = access %temp, %x_328
+            store %53, %x_333
             exit_if  # if_2
           }
-          %b8 = block {  # false
-            %x_335:i32 = load %k
-            %40:i32 = add %x_335, 1i
-            store %k, %40
-            %x_337:i32 = load %j
-            %42:i32 = add %x_337, 1i
-            store %j, %42
-            %43:ptr<private, i32, read_write> = access %data, %x_337
-            %x_340:i32 = load %43
-            %45:ptr<private, i32, read_write> = access %temp, %x_335
-            store %45, %x_340
+          $B8: {  # false
+            %54:i32 = load %k
+            %x_335:i32 = let %54
+            %56:i32 = add %x_335, 1i
+            store %k, %56
+            %57:i32 = load %j
+            %x_337:i32 = let %57
+            %59:i32 = add %x_337, 1i
+            store %j, %59
+            %60:ptr<private, i32, read_write> = access %data, %x_337
+            %61:i32 = load %60
+            %x_340:i32 = let %61
+            %63:ptr<private, i32, read_write> = access %temp, %x_335
+            store %63, %x_340
             exit_if  # if_2
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
-    loop [b: %b9, c: %b10] {  # loop_2
-      %b9 = block {  # body
-        %x_346:i32 = load %i
-        %x_348:i32 = load %i
-        %x_349:i32 = load %mid
-        %49:bool = lt %x_346, 10i
-        %50:bool = lte %x_348, %x_349
-        %51:bool = and %49, %50
-        if %51 [t: %b11, f: %b12] {  # if_3
-          %b11 = block {  # true
+    loop [b: $B9, c: $B10] {  # loop_2
+      $B9: {  # body
+        %64:i32 = load %i
+        %x_346:i32 = let %64
+        %66:i32 = load %i
+        %x_348:i32 = let %66
+        %68:i32 = load %mid
+        %x_349:i32 = let %68
+        %70:bool = lt %x_346, 10i
+        %71:bool = lte %x_348, %x_349
+        %72:bool = and %70, %71
+        if %72 [t: $B11, f: $B12] {  # if_3
+          $B11: {  # true
             exit_if  # if_3
           }
-          %b12 = block {  # false
+          $B12: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_353:i32 = load %k
-        %53:i32 = add %x_353, 1i
-        store %k, %53
-        %x_355:i32 = load %i
-        %55:i32 = add %x_355, 1i
-        store %i, %55
-        %56:ptr<private, i32, read_write> = access %data, %x_355
-        %x_358:i32 = load %56
-        %58:ptr<private, i32, read_write> = access %temp, %x_353
-        store %58, %x_358
-        continue %b10
+        %73:i32 = load %k
+        %x_353:i32 = let %73
+        %75:i32 = add %x_353, 1i
+        store %k, %75
+        %76:i32 = load %i
+        %x_355:i32 = let %76
+        %78:i32 = add %x_355, 1i
+        store %i, %78
+        %79:ptr<private, i32, read_write> = access %data, %x_355
+        %80:i32 = load %79
+        %x_358:i32 = let %80
+        %82:ptr<private, i32, read_write> = access %temp, %x_353
+        store %82, %x_358
+        continue  # -> $B10
       }
-      %b10 = block {  # continuing
-        next_iteration %b9
+      $B10: {  # continuing
+        next_iteration  # -> $B9
       }
     }
-    %x_360:i32 = load %f
+    %83:i32 = load %f
+    %x_360:i32 = let %83
     store %i_1, %x_360
-    loop [b: %b13, c: %b14] {  # loop_3
-      %b13 = block {  # body
-        %x_365:i32 = load %i_1
-        %x_366:i32 = load %to
-        %62:bool = lte %x_365, %x_366
-        if %62 [t: %b15, f: %b16] {  # if_4
-          %b15 = block {  # true
+    loop [b: $B13, c: $B14] {  # loop_3
+      $B13: {  # body
+        %85:i32 = load %i_1
+        %x_365:i32 = let %85
+        %87:i32 = load %to
+        %x_366:i32 = let %87
+        %89:bool = lte %x_365, %x_366
+        if %89 [t: $B15, f: $B16] {  # if_4
+          $B15: {  # true
             exit_if  # if_4
           }
-          %b16 = block {  # false
+          $B16: {  # false
             exit_loop  # loop_3
           }
         }
-        %x_369:i32 = load %i_1
-        %x_370:i32 = load %i_1
-        %65:ptr<private, i32, read_write> = access %temp, %x_370
-        %x_372:i32 = load %65
-        %67:ptr<private, i32, read_write> = access %data, %x_369
-        store %67, %x_372
-        continue %b14
+        %90:i32 = load %i_1
+        %x_369:i32 = let %90
+        %92:i32 = load %i_1
+        %x_370:i32 = let %92
+        %94:ptr<private, i32, read_write> = access %temp, %x_370
+        %95:i32 = load %94
+        %x_372:i32 = let %95
+        %97:ptr<private, i32, read_write> = access %data, %x_369
+        store %97, %x_372
+        continue  # -> $B14
       }
-      %b14 = block {  # continuing
-        %x_374:i32 = load %i_1
-        %69:i32 = add %x_374, 1i
-        store %i_1, %69
-        next_iteration %b13
+      $B14: {  # continuing
+        %98:i32 = load %i_1
+        %x_374:i32 = let %98
+        %100:i32 = add %x_374, 1i
+        store %i_1, %100
+        next_iteration  # -> $B13
       }
     }
     ret
   }
 }
-%main_1 = func():void -> %b17 {
-  %b17 = block {
+%main_1 = func():void {
+  $B17: {
     %x_85:ptr<function, i32, read_write> = var
     %x_86:ptr<function, i32, read_write> = var
     %x_87:ptr<function, i32, read_write> = var
@@ -167,313 +198,366 @@
     %i_3:ptr<function, i32, read_write> = var
     %j_1:ptr<function, i32, read_write> = var
     %grey:ptr<function, f32, read_write> = var
-    %84:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
-    %x_96:f32 = load_vector_element %84, 0u
-    %86:i32 = convert %x_96
-    store %i_3, %86
-    loop [b: %b18, c: %b19] {  # loop_4
-      %b18 = block {  # body
-        %x_102:i32 = load %i_3
-        switch %x_102 [c: (9i, %b20), c: (8i, %b21), c: (7i, %b22), c: (6i, %b23), c: (5i, %b24), c: (4i, %b25), c: (3i, %b26), c: (2i, %b27), c: (1i, %b28), c: (0i, %b29), c: (default, %b30)] {  # switch_1
-          %b20 = block {  # case
-            %x_132:i32 = load %i_3
-            %89:ptr<private, i32, read_write> = access %data, %x_132
-            store %89, -5i
+    %115:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
+    %116:f32 = load_vector_element %115, 0u
+    %x_96:f32 = let %116
+    %118:i32 = call %tint_f32_to_i32, %x_96
+    store %i_3, %118
+    loop [b: $B18, c: $B19] {  # loop_4
+      $B18: {  # body
+        %120:i32 = load %i_3
+        %x_102:i32 = let %120
+        switch %x_102 [c: (9i, $B20), c: (8i, $B21), c: (7i, $B22), c: (6i, $B23), c: (5i, $B24), c: (4i, $B25), c: (3i, $B26), c: (2i, $B27), c: (1i, $B28), c: (0i, $B29), c: (default, $B30)] {  # switch_1
+          $B20: {  # case
+            %122:i32 = load %i_3
+            %x_132:i32 = let %122
+            %124:ptr<private, i32, read_write> = access %data, %x_132
+            store %124, -5i
             exit_switch  # switch_1
           }
-          %b21 = block {  # case
-            %x_130:i32 = load %i_3
-            %91:ptr<private, i32, read_write> = access %data, %x_130
-            store %91, -4i
+          $B21: {  # case
+            %125:i32 = load %i_3
+            %x_130:i32 = let %125
+            %127:ptr<private, i32, read_write> = access %data, %x_130
+            store %127, -4i
             exit_switch  # switch_1
           }
-          %b22 = block {  # case
-            %x_128:i32 = load %i_3
-            %93:ptr<private, i32, read_write> = access %data, %x_128
-            store %93, -3i
+          $B22: {  # case
+            %128:i32 = load %i_3
+            %x_128:i32 = let %128
+            %130:ptr<private, i32, read_write> = access %data, %x_128
+            store %130, -3i
             exit_switch  # switch_1
           }
-          %b23 = block {  # case
-            %x_126:i32 = load %i_3
-            %95:ptr<private, i32, read_write> = access %data, %x_126
-            store %95, -2i
+          $B23: {  # case
+            %131:i32 = load %i_3
+            %x_126:i32 = let %131
+            %133:ptr<private, i32, read_write> = access %data, %x_126
+            store %133, -2i
             exit_switch  # switch_1
           }
-          %b24 = block {  # case
-            %x_124:i32 = load %i_3
-            %97:ptr<private, i32, read_write> = access %data, %x_124
-            store %97, -1i
+          $B24: {  # case
+            %134:i32 = load %i_3
+            %x_124:i32 = let %134
+            %136:ptr<private, i32, read_write> = access %data, %x_124
+            store %136, -1i
             exit_switch  # switch_1
           }
-          %b25 = block {  # case
-            %x_122:i32 = load %i_3
-            %99:ptr<private, i32, read_write> = access %data, %x_122
-            store %99, 0i
+          $B25: {  # case
+            %137:i32 = load %i_3
+            %x_122:i32 = let %137
+            %139:ptr<private, i32, read_write> = access %data, %x_122
+            store %139, 0i
             exit_switch  # switch_1
           }
-          %b26 = block {  # case
-            %x_120:i32 = load %i_3
-            %101:ptr<private, i32, read_write> = access %data, %x_120
-            store %101, 1i
+          $B26: {  # case
+            %140:i32 = load %i_3
+            %x_120:i32 = let %140
+            %142:ptr<private, i32, read_write> = access %data, %x_120
+            store %142, 1i
             exit_switch  # switch_1
           }
-          %b27 = block {  # case
-            %x_118:i32 = load %i_3
-            %103:ptr<private, i32, read_write> = access %data, %x_118
-            store %103, 2i
+          $B27: {  # case
+            %143:i32 = load %i_3
+            %x_118:i32 = let %143
+            %145:ptr<private, i32, read_write> = access %data, %x_118
+            store %145, 2i
             exit_switch  # switch_1
           }
-          %b28 = block {  # case
-            %x_116:i32 = load %i_3
-            %105:ptr<private, i32, read_write> = access %data, %x_116
-            store %105, 3i
+          $B28: {  # case
+            %146:i32 = load %i_3
+            %x_116:i32 = let %146
+            %148:ptr<private, i32, read_write> = access %data, %x_116
+            store %148, 3i
             exit_switch  # switch_1
           }
-          %b29 = block {  # case
-            %x_114:i32 = load %i_3
-            %107:ptr<private, i32, read_write> = access %data, %x_114
-            store %107, 4i
+          $B29: {  # case
+            %149:i32 = load %i_3
+            %x_114:i32 = let %149
+            %151:ptr<private, i32, read_write> = access %data, %x_114
+            store %151, 4i
             exit_switch  # switch_1
           }
-          %b30 = block {  # case
+          $B30: {  # case
             exit_switch  # switch_1
           }
         }
-        %x_134:i32 = load %i_3
-        %109:i32 = add %x_134, 1i
-        store %i_3, %109
-        continue %b19
+        %152:i32 = load %i_3
+        %x_134:i32 = let %152
+        %154:i32 = add %x_134, 1i
+        store %i_3, %154
+        continue  # -> $B19
       }
-      %b19 = block {  # continuing
-        %x_136:i32 = load %i_3
-        %111:bool = lt %x_136, 10i
-        %112:bool = eq %111, false
-        break_if %112 %b18
+      $B19: {  # continuing
+        %155:i32 = load %i_3
+        %x_136:i32 = let %155
+        %157:bool = lt %x_136, 10i
+        %158:bool = eq %157, false
+        break_if %158  # -> [t: exit_loop loop_4, f: $B18]
       }
     }
     store %j_1, 0i
-    loop [b: %b31, c: %b32] {  # loop_5
-      %b31 = block {  # body
-        %x_142:i32 = load %j_1
-        %114:bool = lt %x_142, 10i
-        if %114 [t: %b33, f: %b34] {  # if_5
-          %b33 = block {  # true
+    loop [b: $B31, c: $B32] {  # loop_5
+      $B31: {  # body
+        %159:i32 = load %j_1
+        %x_142:i32 = let %159
+        %161:bool = lt %x_142, 10i
+        if %161 [t: $B33, f: $B34] {  # if_5
+          $B33: {  # true
             exit_if  # if_5
           }
-          %b34 = block {  # false
+          $B34: {  # false
             exit_loop  # loop_5
           }
         }
-        %x_145:i32 = load %j_1
-        %x_146:i32 = load %j_1
-        %117:ptr<private, i32, read_write> = access %data, %x_146
-        %x_148:i32 = load %117
-        %119:ptr<private, i32, read_write> = access %temp, %x_145
-        store %119, %x_148
-        continue %b32
+        %162:i32 = load %j_1
+        %x_145:i32 = let %162
+        %164:i32 = load %j_1
+        %x_146:i32 = let %164
+        %166:ptr<private, i32, read_write> = access %data, %x_146
+        %167:i32 = load %166
+        %x_148:i32 = let %167
+        %169:ptr<private, i32, read_write> = access %temp, %x_145
+        store %169, %x_148
+        continue  # -> $B32
       }
-      %b32 = block {  # continuing
-        %x_150:i32 = load %j_1
-        %121:i32 = add %x_150, 1i
-        store %j_1, %121
-        next_iteration %b31
+      $B32: {  # continuing
+        %170:i32 = load %j_1
+        %x_150:i32 = let %170
+        %172:i32 = add %x_150, 1i
+        store %j_1, %172
+        next_iteration  # -> $B31
       }
     }
     store %x_94, 0i
     store %x_93, 9i
     store %x_92, 1i
-    loop [b: %b35, c: %b36] {  # loop_6
-      %b35 = block {  # body
-        %x_156:i32 = load %x_92
-        %x_157:i32 = load %x_93
-        %124:bool = lte %x_156, %x_157
-        if %124 [t: %b37, f: %b38] {  # if_6
-          %b37 = block {  # true
+    loop [b: $B35, c: $B36] {  # loop_6
+      $B35: {  # body
+        %173:i32 = load %x_92
+        %x_156:i32 = let %173
+        %175:i32 = load %x_93
+        %x_157:i32 = let %175
+        %177:bool = lte %x_156, %x_157
+        if %177 [t: $B37, f: $B38] {  # if_6
+          $B37: {  # true
             exit_if  # if_6
           }
-          %b38 = block {  # false
+          $B38: {  # false
             exit_loop  # loop_6
           }
         }
-        %x_160:i32 = load %x_94
+        %178:i32 = load %x_94
+        %x_160:i32 = let %178
         store %x_91, %x_160
-        loop [b: %b39, c: %b40] {  # loop_7
-          %b39 = block {  # body
-            %x_165:i32 = load %x_91
-            %x_166:i32 = load %x_93
-            %128:bool = lt %x_165, %x_166
-            if %128 [t: %b41, f: %b42] {  # if_7
-              %b41 = block {  # true
+        loop [b: $B39, c: $B40] {  # loop_7
+          $B39: {  # body
+            %180:i32 = load %x_91
+            %x_165:i32 = let %180
+            %182:i32 = load %x_93
+            %x_166:i32 = let %182
+            %184:bool = lt %x_165, %x_166
+            if %184 [t: $B41, f: $B42] {  # if_7
+              $B41: {  # true
                 exit_if  # if_7
               }
-              %b42 = block {  # false
+              $B42: {  # false
                 exit_loop  # loop_7
               }
             }
-            %x_169:i32 = load %x_91
+            %185:i32 = load %x_91
+            %x_169:i32 = let %185
             store %x_90, %x_169
-            %x_170:i32 = load %x_91
-            %x_171:i32 = load %x_92
-            %132:i32 = add %x_170, %x_171
-            %133:i32 = sub %132, 1i
-            store %x_89, %133
-            %x_174:i32 = load %x_91
-            %x_175:i32 = load %x_92
-            %x_179:i32 = load %x_93
-            %137:i32 = mul 2i, %x_175
-            %138:i32 = add %x_174, %137
-            %139:i32 = sub %138, 1i
-            %140:i32 = min %139, %x_179
-            store %x_88, %140
-            %x_181:i32 = load %x_90
+            %187:i32 = load %x_91
+            %x_170:i32 = let %187
+            %189:i32 = load %x_92
+            %x_171:i32 = let %189
+            %191:i32 = add %x_170, %x_171
+            %192:i32 = sub %191, 1i
+            store %x_89, %192
+            %193:i32 = load %x_91
+            %x_174:i32 = let %193
+            %195:i32 = load %x_92
+            %x_175:i32 = let %195
+            %197:i32 = load %x_93
+            %x_179:i32 = let %197
+            %199:i32 = mul 2i, %x_175
+            %200:i32 = add %x_174, %199
+            %201:i32 = sub %200, 1i
+            %202:i32 = min %201, %x_179
+            store %x_88, %202
+            %203:i32 = load %x_90
+            %x_181:i32 = let %203
             store %x_87, %x_181
-            %x_182:i32 = load %x_89
+            %205:i32 = load %x_89
+            %x_182:i32 = let %205
             store %x_86, %x_182
-            %x_183:i32 = load %x_88
+            %207:i32 = load %x_88
+            %x_183:i32 = let %207
             store %x_85, %x_183
-            %144:void = call %merge_i1_i1_i1_, %x_87, %x_86, %x_85
-            continue %b40
+            %209:void = call %merge_i1_i1_i1_, %x_87, %x_86, %x_85
+            continue  # -> $B40
           }
-          %b40 = block {  # continuing
-            %x_185:i32 = load %x_92
-            %x_187:i32 = load %x_91
-            %147:i32 = mul 2i, %x_185
-            %148:i32 = add %x_187, %147
-            store %x_91, %148
-            next_iteration %b39
+          $B40: {  # continuing
+            %210:i32 = load %x_92
+            %x_185:i32 = let %210
+            %212:i32 = load %x_91
+            %x_187:i32 = let %212
+            %214:i32 = mul 2i, %x_185
+            %215:i32 = add %x_187, %214
+            store %x_91, %215
+            next_iteration  # -> $B39
           }
         }
-        continue %b36
+        continue  # -> $B36
       }
-      %b36 = block {  # continuing
-        %x_189:i32 = load %x_92
-        %150:i32 = mul 2i, %x_189
-        store %x_92, %150
-        next_iteration %b35
+      $B36: {  # continuing
+        %216:i32 = load %x_92
+        %x_189:i32 = let %216
+        %218:i32 = mul 2i, %x_189
+        store %x_92, %218
+        next_iteration  # -> $B35
       }
     }
-    %x_193:f32 = load_vector_element %gl_FragCoord, 1u
-    %152:i32 = convert %x_193
-    %153:bool = lt %152, 30i
-    if %153 [t: %b43, f: %b44] {  # if_8
-      %b43 = block {  # true
-        %154:ptr<private, i32, read_write> = access %data, 0i
-        %x_200:i32 = load %154
-        %156:f32 = convert %x_200
-        %157:f32 = div %156, 10.0f
-        %158:f32 = add 0.5f, %157
-        store %grey, %158
+    %219:f32 = load_vector_element %gl_FragCoord, 1u
+    %x_193:f32 = let %219
+    %221:i32 = call %tint_f32_to_i32, %x_193
+    %222:bool = lt %221, 30i
+    if %222 [t: $B43, f: $B44] {  # if_8
+      $B43: {  # true
+        %223:ptr<private, i32, read_write> = access %data, 0i
+        %224:i32 = load %223
+        %x_200:i32 = let %224
+        %226:f32 = convert %x_200
+        %227:f32 = div %226, 10.0f
+        %228:f32 = add 0.5f, %227
+        store %grey, %228
         exit_if  # if_8
       }
-      %b44 = block {  # false
-        %x_205:f32 = load_vector_element %gl_FragCoord, 1u
-        %160:i32 = convert %x_205
-        %161:bool = lt %160, 60i
-        if %161 [t: %b45, f: %b46] {  # if_9
-          %b45 = block {  # true
-            %162:ptr<private, i32, read_write> = access %data, 1i
-            %x_212:i32 = load %162
-            %164:f32 = convert %x_212
-            %165:f32 = div %164, 10.0f
-            %166:f32 = add 0.5f, %165
-            store %grey, %166
+      $B44: {  # false
+        %229:f32 = load_vector_element %gl_FragCoord, 1u
+        %x_205:f32 = let %229
+        %231:i32 = call %tint_f32_to_i32, %x_205
+        %232:bool = lt %231, 60i
+        if %232 [t: $B45, f: $B46] {  # if_9
+          $B45: {  # true
+            %233:ptr<private, i32, read_write> = access %data, 1i
+            %234:i32 = load %233
+            %x_212:i32 = let %234
+            %236:f32 = convert %x_212
+            %237:f32 = div %236, 10.0f
+            %238:f32 = add 0.5f, %237
+            store %grey, %238
             exit_if  # if_9
           }
-          %b46 = block {  # false
-            %x_217:f32 = load_vector_element %gl_FragCoord, 1u
-            %168:i32 = convert %x_217
-            %169:bool = lt %168, 90i
-            if %169 [t: %b47, f: %b48] {  # if_10
-              %b47 = block {  # true
-                %170:ptr<private, i32, read_write> = access %data, 2i
-                %x_224:i32 = load %170
-                %172:f32 = convert %x_224
-                %173:f32 = div %172, 10.0f
-                %174:f32 = add 0.5f, %173
-                store %grey, %174
+          $B46: {  # false
+            %239:f32 = load_vector_element %gl_FragCoord, 1u
+            %x_217:f32 = let %239
+            %241:i32 = call %tint_f32_to_i32, %x_217
+            %242:bool = lt %241, 90i
+            if %242 [t: $B47, f: $B48] {  # if_10
+              $B47: {  # true
+                %243:ptr<private, i32, read_write> = access %data, 2i
+                %244:i32 = load %243
+                %x_224:i32 = let %244
+                %246:f32 = convert %x_224
+                %247:f32 = div %246, 10.0f
+                %248:f32 = add 0.5f, %247
+                store %grey, %248
                 exit_if  # if_10
               }
-              %b48 = block {  # false
-                %x_229:f32 = load_vector_element %gl_FragCoord, 1u
-                %176:i32 = convert %x_229
-                %177:bool = lt %176, 120i
-                if %177 [t: %b49, f: %b50] {  # if_11
-                  %b49 = block {  # true
-                    %178:ptr<private, i32, read_write> = access %data, 3i
-                    %x_236:i32 = load %178
-                    %180:f32 = convert %x_236
-                    %181:f32 = div %180, 10.0f
-                    %182:f32 = add 0.5f, %181
-                    store %grey, %182
+              $B48: {  # false
+                %249:f32 = load_vector_element %gl_FragCoord, 1u
+                %x_229:f32 = let %249
+                %251:i32 = call %tint_f32_to_i32, %x_229
+                %252:bool = lt %251, 120i
+                if %252 [t: $B49, f: $B50] {  # if_11
+                  $B49: {  # true
+                    %253:ptr<private, i32, read_write> = access %data, 3i
+                    %254:i32 = load %253
+                    %x_236:i32 = let %254
+                    %256:f32 = convert %x_236
+                    %257:f32 = div %256, 10.0f
+                    %258:f32 = add 0.5f, %257
+                    store %grey, %258
                     exit_if  # if_11
                   }
-                  %b50 = block {  # false
-                    %x_241:f32 = load_vector_element %gl_FragCoord, 1u
-                    %184:i32 = convert %x_241
-                    %185:bool = lt %184, 150i
-                    if %185 [t: %b51, f: %b52] {  # if_12
-                      %b51 = block {  # true
-                        discard
+                  $B50: {  # false
+                    %259:f32 = load_vector_element %gl_FragCoord, 1u
+                    %x_241:f32 = let %259
+                    %261:i32 = call %tint_f32_to_i32, %x_241
+                    %262:bool = lt %261, 150i
+                    if %262 [t: $B51, f: $B52] {  # if_12
+                      $B51: {  # true
+                        store %continue_execution, false
                         exit_if  # if_12
                       }
-                      %b52 = block {  # false
-                        %x_248:f32 = load_vector_element %gl_FragCoord, 1u
-                        %187:i32 = convert %x_248
-                        %188:bool = lt %187, 180i
-                        if %188 [t: %b53, f: %b54] {  # if_13
-                          %b53 = block {  # true
-                            %189:ptr<private, i32, read_write> = access %data, 5i
-                            %x_255:i32 = load %189
-                            %191:f32 = convert %x_255
-                            %192:f32 = div %191, 10.0f
-                            %193:f32 = add 0.5f, %192
-                            store %grey, %193
+                      $B52: {  # false
+                        %263:f32 = load_vector_element %gl_FragCoord, 1u
+                        %x_248:f32 = let %263
+                        %265:i32 = call %tint_f32_to_i32, %x_248
+                        %266:bool = lt %265, 180i
+                        if %266 [t: $B53, f: $B54] {  # if_13
+                          $B53: {  # true
+                            %267:ptr<private, i32, read_write> = access %data, 5i
+                            %268:i32 = load %267
+                            %x_255:i32 = let %268
+                            %270:f32 = convert %x_255
+                            %271:f32 = div %270, 10.0f
+                            %272:f32 = add 0.5f, %271
+                            store %grey, %272
                             exit_if  # if_13
                           }
-                          %b54 = block {  # false
-                            %x_260:f32 = load_vector_element %gl_FragCoord, 1u
-                            %195:i32 = convert %x_260
-                            %196:bool = lt %195, 210i
-                            if %196 [t: %b55, f: %b56] {  # if_14
-                              %b55 = block {  # true
-                                %197:ptr<private, i32, read_write> = access %data, 6i
-                                %x_267:i32 = load %197
-                                %199:f32 = convert %x_267
-                                %200:f32 = div %199, 10.0f
-                                %201:f32 = add 0.5f, %200
-                                store %grey, %201
+                          $B54: {  # false
+                            %273:f32 = load_vector_element %gl_FragCoord, 1u
+                            %x_260:f32 = let %273
+                            %275:i32 = call %tint_f32_to_i32, %x_260
+                            %276:bool = lt %275, 210i
+                            if %276 [t: $B55, f: $B56] {  # if_14
+                              $B55: {  # true
+                                %277:ptr<private, i32, read_write> = access %data, 6i
+                                %278:i32 = load %277
+                                %x_267:i32 = let %278
+                                %280:f32 = convert %x_267
+                                %281:f32 = div %280, 10.0f
+                                %282:f32 = add 0.5f, %281
+                                store %grey, %282
                                 exit_if  # if_14
                               }
-                              %b56 = block {  # false
-                                %x_272:f32 = load_vector_element %gl_FragCoord, 1u
-                                %203:i32 = convert %x_272
-                                %204:bool = lt %203, 240i
-                                if %204 [t: %b57, f: %b58] {  # if_15
-                                  %b57 = block {  # true
-                                    %205:ptr<private, i32, read_write> = access %data, 7i
-                                    %x_279:i32 = load %205
-                                    %207:f32 = convert %x_279
-                                    %208:f32 = div %207, 10.0f
-                                    %209:f32 = add 0.5f, %208
-                                    store %grey, %209
+                              $B56: {  # false
+                                %283:f32 = load_vector_element %gl_FragCoord, 1u
+                                %x_272:f32 = let %283
+                                %285:i32 = call %tint_f32_to_i32, %x_272
+                                %286:bool = lt %285, 240i
+                                if %286 [t: $B57, f: $B58] {  # if_15
+                                  $B57: {  # true
+                                    %287:ptr<private, i32, read_write> = access %data, 7i
+                                    %288:i32 = load %287
+                                    %x_279:i32 = let %288
+                                    %290:f32 = convert %x_279
+                                    %291:f32 = div %290, 10.0f
+                                    %292:f32 = add 0.5f, %291
+                                    store %grey, %292
                                     exit_if  # if_15
                                   }
-                                  %b58 = block {  # false
-                                    %x_284:f32 = load_vector_element %gl_FragCoord, 1u
-                                    %211:i32 = convert %x_284
-                                    %212:bool = lt %211, 270i
-                                    if %212 [t: %b59, f: %b60] {  # if_16
-                                      %b59 = block {  # true
-                                        %213:ptr<private, i32, read_write> = access %data, 8i
-                                        %x_291:i32 = load %213
-                                        %215:f32 = convert %x_291
-                                        %216:f32 = div %215, 10.0f
-                                        %217:f32 = add 0.5f, %216
-                                        store %grey, %217
+                                  $B58: {  # false
+                                    %293:f32 = load_vector_element %gl_FragCoord, 1u
+                                    %x_284:f32 = let %293
+                                    %295:i32 = call %tint_f32_to_i32, %x_284
+                                    %296:bool = lt %295, 270i
+                                    if %296 [t: $B59, f: $B60] {  # if_16
+                                      $B59: {  # true
+                                        %297:ptr<private, i32, read_write> = access %data, 8i
+                                        %298:i32 = load %297
+                                        %x_291:i32 = let %298
+                                        %300:f32 = convert %x_291
+                                        %301:f32 = div %300, 10.0f
+                                        %302:f32 = add 0.5f, %301
+                                        store %grey, %302
                                         exit_if  # if_16
                                       }
-                                      %b60 = block {  # false
-                                        discard
+                                      $B60: {  # false
+                                        store %continue_execution, false
                                         exit_if  # if_16
                                       }
                                     }
@@ -501,27 +585,36 @@
         exit_if  # if_8
       }
     }
-    %x_295:f32 = load %grey
-    %x_296:vec3<f32> = construct %x_295, %x_295, %x_295
-    %220:f32 = access %x_296, 0u
-    %221:f32 = access %x_296, 1u
-    %222:f32 = access %x_296, 2u
-    %223:vec4<f32> = construct %220, %221, %222, 1.0f
-    store %x_GLF_color, %223
+    %303:f32 = load %grey
+    %x_295:f32 = let %303
+    %305:vec3<f32> = construct %x_295, %x_295, %x_295
+    %x_296:vec3<f32> = let %305
+    %307:f32 = access %x_296, 0u
+    %308:f32 = access %x_296, 1u
+    %309:f32 = access %x_296, 2u
+    %310:vec4<f32> = construct %307, %308, %309, 1.0f
+    store %x_GLF_color, %310
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b61 {
-  %b61 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B61: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %226:void = call %main_1
-    %227:vec4<f32> = load %x_GLF_color
-    %228:main_out = construct %227
-    ret %228
+    %313:void = call %main_1
+    %314:vec4<f32> = load %x_GLF_color
+    %315:main_out = construct %314
+    %316:bool = load %continue_execution
+    %317:bool = eq %316, false
+    if %317 [t: $B62] {  # if_17
+      $B62: {  # true
+        terminate_invocation
+      }
+    }
+    ret %315
   }
 }
-%mergeSort_ = func():void -> %b62 {
-  %b62 = block {
+%mergeSort_ = func():void {
+  $B63: {
     %low:ptr<function, i32, read_write> = var
     %high:ptr<function, i32, read_write> = var
     %m:ptr<function, i32, read_write> = var
@@ -535,79 +628,106 @@
     store %low, 0i
     store %high, 9i
     store %m, 1i
-    loop [b: %b63, c: %b64] {  # loop_8
-      %b63 = block {  # body
-        %x_381:i32 = load %m
-        %x_382:i32 = load %high
-        %242:bool = lte %x_381, %x_382
-        if %242 [t: %b65, f: %b66] {  # if_17
-          %b65 = block {  # true
-            exit_if  # if_17
+    loop [b: $B64, c: $B65] {  # loop_8
+      $B64: {  # body
+        %329:i32 = load %m
+        %x_381:i32 = let %329
+        %331:i32 = load %high
+        %x_382:i32 = let %331
+        %333:bool = lte %x_381, %x_382
+        if %333 [t: $B66, f: $B67] {  # if_18
+          $B66: {  # true
+            exit_if  # if_18
           }
-          %b66 = block {  # false
+          $B67: {  # false
             exit_loop  # loop_8
           }
         }
-        %x_385:i32 = load %low
+        %334:i32 = load %low
+        %x_385:i32 = let %334
         store %i_2, %x_385
-        loop [b: %b67, c: %b68] {  # loop_9
-          %b67 = block {  # body
-            %x_390:i32 = load %i_2
-            %x_391:i32 = load %high
-            %246:bool = lt %x_390, %x_391
-            if %246 [t: %b69, f: %b70] {  # if_18
-              %b69 = block {  # true
-                exit_if  # if_18
+        loop [b: $B68, c: $B69] {  # loop_9
+          $B68: {  # body
+            %336:i32 = load %i_2
+            %x_390:i32 = let %336
+            %338:i32 = load %high
+            %x_391:i32 = let %338
+            %340:bool = lt %x_390, %x_391
+            if %340 [t: $B70, f: $B71] {  # if_19
+              $B70: {  # true
+                exit_if  # if_19
               }
-              %b70 = block {  # false
+              $B71: {  # false
                 exit_loop  # loop_9
               }
             }
-            %x_394:i32 = load %i_2
+            %341:i32 = load %i_2
+            %x_394:i32 = let %341
             store %f_1, %x_394
-            %x_395:i32 = load %i_2
-            %x_396:i32 = load %m
-            %250:i32 = add %x_395, %x_396
-            %251:i32 = sub %250, 1i
-            store %mid_1, %251
-            %x_399:i32 = load %i_2
-            %x_400:i32 = load %m
-            %x_404:i32 = load %high
-            %255:i32 = mul 2i, %x_400
-            %256:i32 = add %x_399, %255
-            %257:i32 = sub %256, 1i
-            %258:i32 = min %257, %x_404
-            store %to_1, %258
-            %x_406:i32 = load %f_1
+            %343:i32 = load %i_2
+            %x_395:i32 = let %343
+            %345:i32 = load %m
+            %x_396:i32 = let %345
+            %347:i32 = add %x_395, %x_396
+            %348:i32 = sub %347, 1i
+            store %mid_1, %348
+            %349:i32 = load %i_2
+            %x_399:i32 = let %349
+            %351:i32 = load %m
+            %x_400:i32 = let %351
+            %353:i32 = load %high
+            %x_404:i32 = let %353
+            %355:i32 = mul 2i, %x_400
+            %356:i32 = add %x_399, %355
+            %357:i32 = sub %356, 1i
+            %358:i32 = min %357, %x_404
+            store %to_1, %358
+            %359:i32 = load %f_1
+            %x_406:i32 = let %359
             store %param, %x_406
-            %x_407:i32 = load %mid_1
+            %361:i32 = load %mid_1
+            %x_407:i32 = let %361
             store %param_1, %x_407
-            %x_408:i32 = load %to_1
+            %363:i32 = load %to_1
+            %x_408:i32 = let %363
             store %param_2, %x_408
-            %262:void = call %merge_i1_i1_i1_, %param, %param_1, %param_2
-            continue %b68
+            %365:void = call %merge_i1_i1_i1_, %param, %param_1, %param_2
+            continue  # -> $B69
           }
-          %b68 = block {  # continuing
-            %x_410:i32 = load %m
-            %x_412:i32 = load %i_2
-            %265:i32 = mul 2i, %x_410
-            %266:i32 = add %x_412, %265
-            store %i_2, %266
-            next_iteration %b67
+          $B69: {  # continuing
+            %366:i32 = load %m
+            %x_410:i32 = let %366
+            %368:i32 = load %i_2
+            %x_412:i32 = let %368
+            %370:i32 = mul 2i, %x_410
+            %371:i32 = add %x_412, %370
+            store %i_2, %371
+            next_iteration  # -> $B68
           }
         }
-        continue %b64
+        continue  # -> $B65
       }
-      %b64 = block {  # continuing
-        %x_414:i32 = load %m
-        %268:i32 = mul 2i, %x_414
-        store %m, %268
-        next_iteration %b63
+      $B65: {  # continuing
+        %372:i32 = load %m
+        %x_414:i32 = let %372
+        %374:i32 = mul 2i, %x_414
+        store %m, %374
+        next_iteration  # -> $B64
       }
     }
     ret
   }
 }
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B72: {
+    %376:i32 = convert %value
+    %377:bool = gte %value, -2147483648.0f
+    %378:i32 = select -2147483648i, %376, %377
+    %379:bool = lte %value, 2147483520.0f
+    %380:i32 = select 2147483647i, %378, %379
+    ret %380
+  }
+}
 
 unhandled variable address space
 ********************************************************************
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
index 5c08107..546198e 100644
--- 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
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,14 +8,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%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
@@ -27,151 +27,179 @@
     %13:vec2<f32> = swizzle %12, xy
     %14:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
     %15:vec2<f32> = load %14
-    %x_60:vec2<f32> = div %13, %15
-    %17:f32 = access %x_60, 0u
-    %18:f32 = mul %17, 8.0f
-    %x_63:i32 = convert %18
-    %20:f32 = access %x_60, 1u
-    %21:f32 = mul %20, 8.0f
-    %x_66:i32 = convert %21
-    %23:i32 = and %x_63, 5i
-    %24:i32 = and %x_66, 10i
-    %25:i32 = or %23, %24
-    %26:i32 = mul %25, 8i
-    %27:i32 = and %x_66, 5i
-    %28:i32 = and %x_63, 10i
+    %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 = add %26, %29
-    %31:vec2<i32> = construct %30, 0i
-    store %x_77, %31
+    %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 = block {  # body
+    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
-        %37:i32 = load %x_80
-        %38:bool = lt %37, 100i
-        if %38 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %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 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %39:vec2<i32> = load %x_77
-        store %x_92, %39
-        %40:i32 = load_vector_element %x_77, 0u
-        %41:bool = gt %40, 0i
-        if %41 [t: %b7] {  # if_2
-          %b7 = block {  # true
-            %42:vec2<i32> = load %x_77
-            store %x_91, %42
-            %43:i32 = load_vector_element %x_77, 1u
-            %44:i32 = sub %43, 1i
-            store_vector_element %x_91, 1u, %44
-            %45:vec2<i32> = load %x_91
-            store %x_92, %45
+        %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
           }
         }
-        %46:vec2<i32> = load %x_92
-        store %x_100, %46
-        %47:i32 = load_vector_element %x_92, 0u
-        %48:bool = lt %47, 0i
-        if %48 [t: %b8] {  # if_3
-          %b8 = block {  # true
-            %49:vec2<i32> = load %x_92
-            store %x_99, %49
-            %50:i32 = load_vector_element %x_92, 1u
-            %51:i32 = add %50, 1i
-            store_vector_element %x_99, 1u, %51
-            %52:vec2<i32> = load %x_99
-            store %x_100, %52
+        %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
           }
         }
-        %53:vec2<i32> = load %x_100
-        %x_78_1:ptr<function, vec2<i32>, read_write> = var, %53
-        %55:i32 = load_vector_element %x_100, 0u
-        %56:i32 = load_vector_element %x_100, 1u
-        %57:i32 = div %56, 2i
-        %58:i32 = add %55, %57
-        store_vector_element %x_78_1, 0u, %58
-        %x_78:vec2<i32> = load %x_78_1
-        continue %b4
+        %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 = block {  # continuing
-        %60:i32 = load %x_80
-        %61:i32 = add %60, 1i
-        store %x_81, %61
+      $B4: {  # continuing
+        %67:i32 = load %x_80
+        %68:i32 = add %67, 1i
+        store %x_81, %68
         store %x_77, %x_78
-        %62:i32 = load %x_81
-        store %x_80, %62
-        next_iteration %b3
+        %69:i32 = load %x_81
+        store %x_80, %69
+        next_iteration  # -> $B3
       }
     }
-    %x_105:i32 = load_vector_element %x_77, 0u
-    %64:vec2<i32> = load %x_77
-    store %x_111, %64
-    %65:bool = lt %x_105, 0i
-    if %65 [t: %b9] {  # if_4
-      %b9 = block {  # true
+    %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)
-        %66:i32 = negation %x_105
-        store_vector_element %x_110, 0u, %66
-        %67:vec2<i32> = load %x_110
-        store %x_111, %67
+        %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
       }
     }
-    %68:vec2<i32> = load %x_111
-    store %x_113, %68
-    loop [b: %b10, c: %b11] {  # loop_2
-      %b10 = block {  # body
+    %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
-        %70:i32 = load_vector_element %x_113, 0u
-        store %x_116, %70
-        %71:i32 = load %x_116
-        %72:bool = gt %71, 15i
-        if %72 [t: %b12, f: %b13] {  # if_5
-          %b12 = block {  # true
+        %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 = block {  # false
+          $B13: {  # false
             exit_loop  # loop_2
           }
         }
-        continue %b11
+        continue  # -> $B11
       }
-      %b11 = block {  # continuing
+      $B11: {  # continuing
         store %x_114, vec2<i32>(0i)
-        %73:i32 = load %x_116
-        %74:i32 = sub %73, 16i
-        store_vector_element %x_114, 0u, %74
-        %75:vec2<i32> = load %x_114
-        store %x_113, %75
-        next_iteration %b10
+        %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))
-    %76:i32 = load %x_116
-    %77:ptr<function, vec4<f32>, read_write> = access %indexable, %76
-    %78:vec4<f32> = load %77
-    store %x_GLF_color, %78
+    %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 {
-  %b14 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B14: {
     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
+    %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
   }
 }
 
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
index a222196..37f898b 100644
--- 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
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,14 +8,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%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
@@ -24,159 +24,195 @@
     %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
-    %x_56:vec4<f32> = load %gl_FragCoord
-    %14:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %x_59:vec2<f32> = load %14
-    %16:f32 = access %x_56, 0u
-    %17:f32 = access %x_56, 1u
-    %18:vec2<f32> = construct %16, %17
-    %x_60:vec2<f32> = div %18, %x_59
-    %20:f32 = access %x_60, 0u
-    %21:f32 = mul %20, 8.0f
-    %x_63:i32 = convert %21
-    %23:f32 = access %x_60, 1u
+    %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
-    %x_66:i32 = convert %24
-    %26:i32 = and %x_63, 5i
-    %27:i32 = and %x_66, 10i
-    %28:i32 = or %26, %27
-    %29:i32 = mul %28, 8i
-    %30:i32 = and %x_66, 5i
-    %31:i32 = and %x_63, 10i
-    %32:i32 = or %30, %31
-    %33:i32 = add %29, %32
-    %x_75:vec2<i32> = construct %33, 0i
+    %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 = block {  # body
+    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
-        %40:vec2<i32> = load %x_77_phi
-        store %x_77, %40
-        %x_80:i32 = load %x_80_phi
-        %42:bool = lt %x_80, 100i
-        if %42 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %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 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %43:vec2<i32> = load %x_77
-        store %x_92_phi, %43
-        %44:i32 = load_vector_element %x_77, 0u
-        %45:bool = gt %44, 0i
-        if %45 [t: %b7] {  # if_2
-          %b7 = block {  # 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_phi, %49
+        %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
           }
         }
-        %x_92:vec2<i32> = load %x_92_phi
+        %58:vec2<i32> = load %x_92_phi
+        %x_92:vec2<i32> = let %58
         store %x_100_phi, %x_92
-        %51:i32 = access %x_92, 0u
-        %52:bool = lt %51, 0i
-        if %52 [t: %b8] {  # if_3
-          %b8 = block {  # true
+        %60:i32 = access %x_92, 0u
+        %61:bool = lt %60, 0i
+        if %61 [t: $B8] {  # if_3
+          $B8: {  # true
             store %x_99, %x_92
-            %53:i32 = access %x_92, 1u
-            %54:i32 = add %53, 1i
-            store_vector_element %x_99, 1u, %54
-            %55:vec2<i32> = load %x_99
-            store %x_100_phi, %55
+            %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
           }
         }
-        %x_100:vec2<i32> = load %x_100_phi
+        %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
-        %58:i32 = access %x_100, 0u
-        %59:i32 = access %x_100, 1u
-        %60:i32 = div %59, 2i
-        %61:i32 = add %58, %60
-        store_vector_element %x_78_1, 0u, %61
-        %x_78:vec2<i32> = load %x_78_1
-        continue %b4
+        %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 = block {  # continuing
-        %63:i32 = add %x_80, 1i
-        store %x_81, %63
+      $B4: {  # continuing
+        %75:i32 = add %x_80, 1i
+        store %x_81, %75
         store %x_77_phi, %x_78
-        %64:i32 = load %x_81
-        store %x_80_phi, %64
-        next_iteration %b3
+        %76:i32 = load %x_81
+        store %x_80_phi, %76
+        next_iteration  # -> $B3
       }
     }
-    %x_105:i32 = load_vector_element %x_77, 0u
-    %66:vec2<i32> = load %x_77
-    store %x_111_phi, %66
-    %67:bool = lt %x_105, 0i
-    if %67 [t: %b9] {  # if_4
-      %b9 = block {  # true
+    %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)
-        %68:i32 = negation %x_105
-        store_vector_element %x_110, 0u, %68
-        %69:vec2<i32> = load %x_110
-        store %x_111_phi, %69
+        %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
       }
     }
-    %x_111:vec2<i32> = load %x_111_phi
+    %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 = block {  # body
+    loop [b: $B10, c: $B11] {  # loop_2
+      $B10: {  # body
         %x_114:ptr<function, vec2<i32>, read_write> = var
-        %x_113:vec2<i32> = load %x_113_phi
-        %73:i32 = access %x_113, 0u
-        store %x_116, %73
-        %74:i32 = load %x_116
-        %75:bool = gt %74, 15i
-        if %75 [t: %b12, f: %b13] {  # if_5
-          %b12 = block {  # true
+        %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 = block {  # false
+          $B13: {  # false
             exit_loop  # loop_2
           }
         }
-        continue %b11
+        continue  # -> $B11
       }
-      %b11 = block {  # continuing
+      $B11: {  # continuing
         store %x_114, vec2<i32>(0i)
-        %76:i32 = load %x_116
-        %77:i32 = sub %76, 16i
-        %78:i32 = bitcast %77
-        store_vector_element %x_114, 0u, %78
-        %79:vec2<i32> = load %x_114
-        store %x_113_phi, %79
-        next_iteration %b10
+        %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))
-    %80:i32 = load %x_116
-    %81:ptr<function, vec4<f32>, read_write> = access %indexable, %80
-    %x_121:vec4<f32> = load %81
+    %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 {
-  %b14 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B14: {
     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
+    %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
   }
 }
 
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
index 0a710b9..2d0afab3 100644
--- 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
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,14 +8,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%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
@@ -27,154 +27,183 @@
     %13:vec2<f32> = swizzle %12, xy
     %14:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
     %15:vec2<f32> = load %14
-    %x_63:vec2<f32> = div %13, %15
-    %17:f32 = access %x_63, 0u
-    %18:f32 = mul %17, 8.0f
-    %x_66:i32 = convert %18
-    %20:f32 = access %x_63, 1u
-    %21:f32 = mul %20, 8.0f
-    %x_69:i32 = convert %21
-    %23:i32 = and %x_66, 5i
-    %24:i32 = and %x_69, 10i
-    %25:i32 = or %23, %24
-    %26:i32 = mul %25, 8i
-    %27:i32 = and %x_69, 5i
-    %28:i32 = and %x_66, 10i
+    %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 = add %26, %29
-    %31:vec2<i32> = construct %30, 0i
-    store %x_80, %31
+    %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 = block {  # body
+    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
-        %37:i32 = load %x_83
-        %38:bool = lt %37, 100i
-        if %38 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %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 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %39:vec2<i32> = load %x_80
-        store %x_95, %39
-        %40:i32 = load_vector_element %x_80, 0u
-        %41:bool = gt %40, 0i
-        if %41 [t: %b7] {  # if_2
-          %b7 = block {  # true
-            %42:vec2<i32> = load %x_80
-            store %x_94, %42
-            %43:i32 = load_vector_element %x_80, 1u
-            %44:i32 = sub %43, 1i
-            store_vector_element %x_94, 1u, %44
-            %45:vec2<i32> = load %x_94
-            store %x_95, %45
+        %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
           }
         }
-        %46:vec2<i32> = load %x_95
-        store %x_103, %46
-        %47:i32 = load_vector_element %x_95, 0u
-        %48:bool = lt %47, 0i
-        if %48 [t: %b8] {  # if_3
-          %b8 = block {  # true
-            %49:vec2<i32> = load %x_95
-            store %x_102, %49
-            %50:i32 = load_vector_element %x_95, 1u
-            %51:i32 = add %50, 1i
-            store_vector_element %x_102, 1u, %51
-            %52:vec2<i32> = load %x_102
-            store %x_103, %52
+        %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
           }
         }
-        %53:vec2<i32> = load %x_103
-        %x_81_1:ptr<function, vec2<i32>, read_write> = var, %53
-        %55:i32 = load_vector_element %x_103, 0u
-        %56:i32 = load_vector_element %x_103, 1u
-        %57:i32 = div %56, 2i
-        %58:i32 = add %55, %57
-        store_vector_element %x_81_1, 0u, %58
-        %x_81:vec2<i32> = load %x_81_1
-        continue %b4
+        %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 = block {  # continuing
-        %60:i32 = load %x_83
-        %61:i32 = add %60, 1i
-        store %x_84, %61
+      $B4: {  # continuing
+        %67:i32 = load %x_83
+        %68:i32 = add %67, 1i
+        store %x_84, %68
         store %x_80, %x_81
-        %62:i32 = load %x_84
-        store %x_83, %62
-        next_iteration %b3
+        %69:i32 = load %x_84
+        store %x_83, %69
+        next_iteration  # -> $B3
       }
     }
-    %x_108:i32 = load_vector_element %x_80, 0u
-    %64:vec2<i32> = load %x_80
-    store %x_114, %64
-    %65:bool = lt %x_108, 0i
-    if %65 [t: %b9] {  # if_4
-      %b9 = block {  # true
+    %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)
-        %66:i32 = negation %x_108
-        store_vector_element %x_113, 0u, %66
-        %67:vec2<i32> = load %x_113
-        store %x_114, %67
+        %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
       }
     }
-    %68:vec2<i32> = load %x_114
-    store %x_116, %68
-    loop [b: %b10, c: %b11] {  # loop_2
-      %b10 = block {  # body
+    %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
-        %70:i32 = load_vector_element %x_116, 0u
-        store %x_119, %70
-        %71:i32 = load %x_119
-        %72:bool = gt %71, 15i
-        if %72 [t: %b12, f: %b13] {  # if_5
-          %b12 = block {  # true
+        %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 = block {  # false
+          $B13: {  # false
             exit_loop  # loop_2
           }
         }
-        continue %b11
+        continue  # -> $B11
       }
-      %b11 = block {  # continuing
+      $B11: {  # continuing
         store %x_117, vec2<i32>(0i)
-        %73:i32 = load %x_119
-        %74:i32 = sub %73, 16i
-        store_vector_element %x_117, 0u, %74
-        %75:vec2<i32> = load %x_117
-        store %x_116, %75
-        next_iteration %b10
+        %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))
-    %x_123:array<vec4<f32>, 16> = load %indexable
+    %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
-    %77:i32 = load %x_119
-    %78:ptr<function, vec4<f32>, read_write> = access %indexable, %77
-    %79:vec4<f32> = load %78
-    store %x_GLF_color, %79
+    %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 {
-  %b14 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B14: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %82:void = call %main_1
-    %83:vec4<f32> = load %x_GLF_color
-    %84:main_out = construct %83
-    ret %84
+    %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
   }
 }
 
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
index 453db69..11e508b 100644
--- 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
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,14 +8,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%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
@@ -24,162 +24,199 @@
     %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
-    %x_59:vec4<f32> = load %gl_FragCoord
-    %14:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %x_62:vec2<f32> = load %14
-    %16:f32 = access %x_59, 0u
-    %17:f32 = access %x_59, 1u
-    %18:vec2<f32> = construct %16, %17
-    %x_63:vec2<f32> = div %18, %x_62
-    %20:f32 = access %x_63, 0u
-    %21:f32 = mul %20, 8.0f
-    %x_66:i32 = convert %21
-    %23:f32 = access %x_63, 1u
+    %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
-    %x_69:i32 = convert %24
-    %26:i32 = and %x_66, 5i
-    %27:i32 = and %x_69, 10i
-    %28:i32 = or %26, %27
-    %29:i32 = mul %28, 8i
-    %30:i32 = and %x_69, 5i
-    %31:i32 = and %x_66, 10i
-    %32:i32 = or %30, %31
-    %33:i32 = add %29, %32
-    %x_78:vec2<i32> = construct %33, 0i
+    %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 = block {  # body
+    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
-        %40:vec2<i32> = load %x_80_phi
-        store %x_80, %40
-        %x_83:i32 = load %x_83_phi
-        %42:bool = lt %x_83, 100i
-        if %42 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %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 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %43:vec2<i32> = load %x_80
-        store %x_95_phi, %43
-        %44:i32 = load_vector_element %x_80, 0u
-        %45:bool = gt %44, 0i
-        if %45 [t: %b7] {  # if_2
-          %b7 = block {  # 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_phi, %49
+        %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
           }
         }
-        %x_95:vec2<i32> = load %x_95_phi
+        %58:vec2<i32> = load %x_95_phi
+        %x_95:vec2<i32> = let %58
         store %x_103_phi, %x_95
-        %51:i32 = access %x_95, 0u
-        %52:bool = lt %51, 0i
-        if %52 [t: %b8] {  # if_3
-          %b8 = block {  # true
+        %60:i32 = access %x_95, 0u
+        %61:bool = lt %60, 0i
+        if %61 [t: $B8] {  # if_3
+          $B8: {  # true
             store %x_102, %x_95
-            %53:i32 = access %x_95, 1u
-            %54:i32 = add %53, 1i
-            store_vector_element %x_102, 1u, %54
-            %55:vec2<i32> = load %x_102
-            store %x_103_phi, %55
+            %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
           }
         }
-        %x_103:vec2<i32> = load %x_103_phi
+        %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
-        %58:i32 = access %x_103, 0u
-        %59:i32 = access %x_103, 1u
-        %60:i32 = div %59, 2i
-        %61:i32 = add %58, %60
-        store_vector_element %x_81_1, 0u, %61
-        %x_81:vec2<i32> = load %x_81_1
-        continue %b4
+        %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 = block {  # continuing
-        %63:i32 = add %x_83, 1i
-        store %x_84, %63
+      $B4: {  # continuing
+        %75:i32 = add %x_83, 1i
+        store %x_84, %75
         store %x_80_phi, %x_81
-        %64:i32 = load %x_84
-        store %x_83_phi, %64
-        next_iteration %b3
+        %76:i32 = load %x_84
+        store %x_83_phi, %76
+        next_iteration  # -> $B3
       }
     }
-    %x_108:i32 = load_vector_element %x_80, 0u
-    %66:vec2<i32> = load %x_80
-    store %x_114_phi, %66
-    %67:bool = lt %x_108, 0i
-    if %67 [t: %b9] {  # if_4
-      %b9 = block {  # true
+    %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)
-        %68:i32 = negation %x_108
-        store_vector_element %x_113, 0u, %68
-        %69:vec2<i32> = load %x_113
-        store %x_114_phi, %69
+        %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
       }
     }
-    %x_114:vec2<i32> = load %x_114_phi
+    %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 = block {  # body
+    loop [b: $B10, c: $B11] {  # loop_2
+      $B10: {  # body
         %x_117:ptr<function, vec2<i32>, read_write> = var
-        %x_116:vec2<i32> = load %x_116_phi
-        %73:i32 = access %x_116, 0u
-        store %x_119, %73
-        %74:i32 = load %x_119
-        %75:bool = gt %74, 15i
-        if %75 [t: %b12, f: %b13] {  # if_5
-          %b12 = block {  # true
+        %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 = block {  # false
+          $B13: {  # false
             exit_loop  # loop_2
           }
         }
-        continue %b11
+        continue  # -> $B11
       }
-      %b11 = block {  # continuing
+      $B11: {  # continuing
         store %x_117, vec2<i32>(0i)
-        %76:i32 = load %x_119
-        %77:i32 = sub %76, 16i
-        %78:i32 = bitcast %77
-        store_vector_element %x_117, 0u, %78
-        %79:vec2<i32> = load %x_117
-        store %x_116_phi, %79
-        next_iteration %b10
+        %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))
-    %x_123:array<vec4<f32>, 16> = load %indexable
+    %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
-    %81:i32 = load %x_119
-    %82:ptr<function, vec4<f32>, read_write> = access %indexable, %81
-    %x_125:vec4<f32> = load %82
+    %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 {
-  %b14 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B14: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %86:void = call %main_1
-    %87:vec4<f32> = load %x_GLF_color
-    %88:main_out = construct %87
-    ret %88
+    %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
   }
 }
 
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
index a6e3807..7b6e195 100644
--- 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
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,14 +8,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%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
@@ -27,153 +27,181 @@
     %13:vec2<f32> = swizzle %12, xy
     %14:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
     %15:vec2<f32> = load %14
-    %x_59:vec2<f32> = div %13, %15
-    %17:f32 = access %x_59, 0u
-    %18:f32 = mul %17, 8.0f
-    %x_62:i32 = convert %18
-    %20:f32 = access %x_59, 1u
-    %21:f32 = mul %20, 8.0f
-    %x_65:i32 = convert %21
-    %23:i32 = and %x_62, 5i
-    %24:i32 = and %x_65, 10i
-    %25:i32 = or %23, %24
-    %26:i32 = mul %25, 8i
-    %27:i32 = and %x_65, 5i
-    %28:i32 = and %x_62, 10i
+    %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 = add %26, %29
-    %31:vec2<i32> = construct %30, 0i
-    store %x_76, %31
+    %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 = block {  # body
+    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
-        %37:i32 = load %x_79
-        %38:bool = lt %37, 100i
-        if %38 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %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 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %39:vec2<i32> = load %x_76
-        store %x_91, %39
-        %40:i32 = load_vector_element %x_76, 0u
-        %41:bool = gt %40, 0i
-        if %41 [t: %b7] {  # if_2
-          %b7 = block {  # true
-            %42:vec2<i32> = load %x_76
-            store %x_90, %42
-            %43:i32 = load_vector_element %x_76, 1u
-            %44:i32 = sub %43, 1i
-            store_vector_element %x_90, 1u, %44
-            %45:vec2<i32> = load %x_90
-            store %x_91, %45
+        %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
           }
         }
-        %46:vec2<i32> = load %x_91
-        store %x_99, %46
-        %47:i32 = load_vector_element %x_91, 0u
-        %48:bool = lt %47, 0i
-        if %48 [t: %b8] {  # if_3
-          %b8 = block {  # true
-            %49:vec2<i32> = load %x_91
-            store %x_98, %49
-            %50:i32 = load_vector_element %x_91, 1u
-            %51:i32 = add %50, 1i
-            store_vector_element %x_98, 1u, %51
-            %52:vec2<i32> = load %x_98
-            store %x_99, %52
+        %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
           }
         }
-        %53:vec2<i32> = load %x_99
-        %x_77_1:ptr<function, vec2<i32>, read_write> = var, %53
-        %55:i32 = load_vector_element %x_99, 0u
-        %56:i32 = load_vector_element %x_99, 1u
-        %57:i32 = div %56, 2i
-        %58:i32 = add %55, %57
-        store_vector_element %x_77_1, 0u, %58
-        %x_77:vec2<i32> = load %x_77_1
-        continue %b4
+        %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 = block {  # continuing
-        %60:i32 = load %x_79
-        %61:i32 = add %60, 1i
-        store %x_80, %61
+      $B4: {  # continuing
+        %67:i32 = load %x_79
+        %68:i32 = add %67, 1i
+        store %x_80, %68
         store %x_76, %x_77
-        %62:i32 = load %x_80
-        store %x_79, %62
-        next_iteration %b3
+        %69:i32 = load %x_80
+        store %x_79, %69
+        next_iteration  # -> $B3
       }
     }
-    %x_104:i32 = load_vector_element %x_76, 0u
-    %64:vec2<i32> = load %x_76
-    store %x_110, %64
-    %65:bool = lt %x_104, 0i
-    if %65 [t: %b9] {  # if_4
-      %b9 = block {  # true
-        %66:vec2<i32> = load %x_76
-        store %x_109, %66
-        %67:i32 = negation %x_104
-        store_vector_element %x_109, 0u, %67
-        %68:vec2<i32> = load %x_109
-        store %x_110, %68
+    %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
       }
     }
-    %69:vec2<i32> = load %x_110
-    store %x_112, %69
-    loop [b: %b10, c: %b11] {  # loop_2
-      %b10 = block {  # body
+    %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
-        %71:i32 = load_vector_element %x_112, 0u
-        store %x_115, %71
-        %72:i32 = load %x_115
-        %73:bool = gt %72, 15i
-        if %73 [t: %b12, f: %b13] {  # if_5
-          %b12 = block {  # true
+        %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 = block {  # false
+          $B13: {  # false
             exit_loop  # loop_2
           }
         }
-        continue %b11
+        continue  # -> $B11
       }
-      %b11 = block {  # continuing
-        %74:vec2<i32> = load %x_112
-        store %x_113, %74
-        %75:i32 = load %x_115
-        %76:i32 = sub %75, 16i
-        store_vector_element %x_113, 0u, %76
-        %77:vec2<i32> = load %x_113
-        store %x_112, %77
-        next_iteration %b10
+      $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))
-    %78:i32 = load %x_115
-    %79:ptr<function, vec4<f32>, read_write> = access %indexable, %78
-    %80:vec4<f32> = load %79
-    store %x_GLF_color, %80
+    %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 {
-  %b14 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B14: {
     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
+    %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
   }
 }
 
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
index fb26df0..f48bba4 100644
--- 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
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,14 +8,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%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
@@ -24,160 +24,196 @@
     %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
-    %x_55:vec4<f32> = load %gl_FragCoord
-    %14:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %x_58:vec2<f32> = load %14
-    %16:f32 = access %x_55, 0u
-    %17:f32 = access %x_55, 1u
-    %18:vec2<f32> = construct %16, %17
-    %x_59:vec2<f32> = div %18, %x_58
-    %20:f32 = access %x_59, 0u
-    %21:f32 = mul %20, 8.0f
-    %x_62:i32 = convert %21
-    %23:f32 = access %x_59, 1u
+    %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
-    %x_65:i32 = convert %24
-    %26:i32 = and %x_62, 5i
-    %27:i32 = and %x_65, 10i
-    %28:i32 = or %26, %27
-    %29:i32 = mul %28, 8i
-    %30:i32 = and %x_65, 5i
-    %31:i32 = and %x_62, 10i
-    %32:i32 = or %30, %31
-    %33:i32 = add %29, %32
-    %x_74:vec2<i32> = construct %33, 0i
+    %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 = block {  # body
+    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
-        %40:vec2<i32> = load %x_76_phi
-        store %x_76, %40
-        %x_79:i32 = load %x_79_phi
-        %42:bool = lt %x_79, 100i
-        if %42 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %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 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %43:vec2<i32> = load %x_76
-        store %x_91_phi, %43
-        %44:i32 = load_vector_element %x_76, 0u
-        %45:bool = gt %44, 0i
-        if %45 [t: %b7] {  # if_2
-          %b7 = block {  # 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_phi, %49
+        %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
           }
         }
-        %x_91:vec2<i32> = load %x_91_phi
+        %58:vec2<i32> = load %x_91_phi
+        %x_91:vec2<i32> = let %58
         store %x_99_phi, %x_91
-        %51:i32 = access %x_91, 0u
-        %52:bool = lt %51, 0i
-        if %52 [t: %b8] {  # if_3
-          %b8 = block {  # true
+        %60:i32 = access %x_91, 0u
+        %61:bool = lt %60, 0i
+        if %61 [t: $B8] {  # if_3
+          $B8: {  # true
             store %x_98, %x_91
-            %53:i32 = access %x_91, 1u
-            %54:i32 = add %53, 1i
-            store_vector_element %x_98, 1u, %54
-            %55:vec2<i32> = load %x_98
-            store %x_99_phi, %55
+            %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
           }
         }
-        %x_99:vec2<i32> = load %x_99_phi
+        %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
-        %58:i32 = access %x_99, 0u
-        %59:i32 = access %x_99, 1u
-        %60:i32 = div %59, 2i
-        %61:i32 = add %58, %60
-        store_vector_element %x_77_1, 0u, %61
-        %x_77:vec2<i32> = load %x_77_1
-        continue %b4
+        %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 = block {  # continuing
-        %63:i32 = add %x_79, 1i
-        store %x_80, %63
+      $B4: {  # continuing
+        %75:i32 = add %x_79, 1i
+        store %x_80, %75
         store %x_76_phi, %x_77
-        %64:i32 = load %x_80
-        store %x_79_phi, %64
-        next_iteration %b3
+        %76:i32 = load %x_80
+        store %x_79_phi, %76
+        next_iteration  # -> $B3
       }
     }
-    %x_104:i32 = load_vector_element %x_76, 0u
-    %66:vec2<i32> = load %x_76
-    store %x_110_phi, %66
-    %67:bool = lt %x_104, 0i
-    if %67 [t: %b9] {  # if_4
-      %b9 = block {  # true
-        %68:vec2<i32> = load %x_76
-        store %x_109, %68
-        %69:i32 = negation %x_104
-        store_vector_element %x_109, 0u, %69
-        %70:vec2<i32> = load %x_109
-        store %x_110_phi, %70
+    %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
       }
     }
-    %x_110:vec2<i32> = load %x_110_phi
+    %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 = block {  # body
+    loop [b: $B10, c: $B11] {  # loop_2
+      $B10: {  # body
         %x_113:ptr<function, vec2<i32>, read_write> = var
-        %x_112:vec2<i32> = load %x_112_phi
-        %74:i32 = access %x_112, 0u
-        store %x_115, %74
-        %75:i32 = load %x_115
-        %76:bool = gt %75, 15i
-        if %76 [t: %b12, f: %b13] {  # if_5
-          %b12 = block {  # true
+        %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 = block {  # false
+          $B13: {  # false
             exit_loop  # loop_2
           }
         }
-        continue %b11
+        continue  # -> $B11
       }
-      %b11 = block {  # continuing
+      $B11: {  # continuing
         store %x_113, %x_112
-        %77:i32 = load %x_115
-        %78:i32 = sub %77, 16i
-        %79:i32 = bitcast %78
-        store_vector_element %x_113, 0u, %79
-        %80:vec2<i32> = load %x_113
-        store %x_112_phi, %80
-        next_iteration %b10
+        %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))
-    %81:i32 = load %x_115
-    %82:ptr<function, vec4<f32>, read_write> = access %indexable, %81
-    %x_120:vec4<f32> = load %82
+    %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 {
-  %b14 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B14: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %86:void = call %main_1
-    %87:vec4<f32> = load %x_GLF_color
-    %88:main_out = construct %87
-    ret %88
+    %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
   }
 }
 
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
index f6efa9e..e4a6707 100644
--- 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
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,14 +8,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%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
@@ -27,156 +27,185 @@
     %13:vec2<f32> = swizzle %12, xy
     %14:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
     %15:vec2<f32> = load %14
-    %x_62:vec2<f32> = div %13, %15
-    %17:f32 = access %x_62, 0u
-    %18:f32 = mul %17, 8.0f
-    %x_65:i32 = convert %18
-    %20:f32 = access %x_62, 1u
-    %21:f32 = mul %20, 8.0f
-    %x_69:i32 = convert %21
-    %23:i32 = and %x_65, 5i
-    %24:i32 = and %x_69, 10i
-    %25:i32 = or %23, %24
-    %26:i32 = mul %25, 8i
-    %27:i32 = and %x_69, 5i
-    %28:i32 = and %x_65, 10i
+    %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 = add %26, %29
-    %31:vec2<i32> = construct %30, 0i
-    store %x_80, %31
+    %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 = block {  # body
+    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
-        %37:i32 = load %x_83
-        %38:bool = lt %37, 100i
-        if %38 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %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 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %39:vec2<i32> = load %x_80
-        store %x_95, %39
-        %40:i32 = load_vector_element %x_80, 0u
-        %41:bool = gt %40, 0i
-        if %41 [t: %b7] {  # if_2
-          %b7 = block {  # true
-            %42:vec2<i32> = load %x_80
-            store %x_94, %42
-            %43:i32 = load_vector_element %x_80, 1u
-            %44:i32 = sub %43, 1i
-            store_vector_element %x_94, 1u, %44
-            %45:vec2<i32> = load %x_94
-            store %x_95, %45
+        %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
           }
         }
-        %46:vec2<i32> = load %x_95
-        store %x_103, %46
-        %47:i32 = load_vector_element %x_95, 0u
-        %48:bool = lt %47, 0i
-        if %48 [t: %b8] {  # if_3
-          %b8 = block {  # true
-            %49:vec2<i32> = load %x_95
-            store %x_102, %49
-            %50:i32 = load_vector_element %x_95, 1u
-            %51:i32 = add %50, 1i
-            store_vector_element %x_102, 1u, %51
-            %52:vec2<i32> = load %x_102
-            store %x_103, %52
+        %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
           }
         }
-        %53:vec2<i32> = load %x_103
-        %x_81_1:ptr<function, vec2<i32>, read_write> = var, %53
-        %55:i32 = load_vector_element %x_103, 0u
-        %56:i32 = load_vector_element %x_103, 1u
-        %57:i32 = div %56, 2i
-        %58:i32 = add %55, %57
-        store_vector_element %x_81_1, 0u, %58
-        %x_81:vec2<i32> = load %x_81_1
-        continue %b4
+        %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 = block {  # continuing
-        %60:i32 = load %x_83
-        %61:i32 = add %60, 1i
-        store %x_84, %61
+      $B4: {  # continuing
+        %67:i32 = load %x_83
+        %68:i32 = add %67, 1i
+        store %x_84, %68
         store %x_80, %x_81
-        %62:i32 = load %x_84
-        store %x_83, %62
-        next_iteration %b3
+        %69:i32 = load %x_84
+        store %x_83, %69
+        next_iteration  # -> $B3
       }
     }
-    %x_108:i32 = load_vector_element %x_80, 0u
-    %64:vec2<i32> = load %x_80
-    store %x_114, %64
-    %65:bool = lt %x_108, 0i
-    if %65 [t: %b9] {  # if_4
-      %b9 = block {  # true
-        %66:vec2<i32> = load %x_80
-        store %x_113, %66
-        %67:i32 = negation %x_108
-        store_vector_element %x_113, 0u, %67
-        %68:vec2<i32> = load %x_113
-        store %x_114, %68
+    %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
       }
     }
-    %69:vec2<i32> = load %x_114
-    store %x_116, %69
-    loop [b: %b10, c: %b11] {  # loop_2
-      %b10 = block {  # body
+    %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
-        %71:i32 = load_vector_element %x_116, 0u
-        store %x_119, %71
-        %72:i32 = load %x_119
-        %73:bool = gt %72, 15i
-        if %73 [t: %b12, f: %b13] {  # if_5
-          %b12 = block {  # true
+        %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 = block {  # false
+          $B13: {  # false
             exit_loop  # loop_2
           }
         }
-        continue %b11
+        continue  # -> $B11
       }
-      %b11 = block {  # continuing
-        %74:vec2<i32> = load %x_116
-        store %x_117, %74
-        %75:i32 = load %x_119
-        %76:i32 = sub %75, 16i
-        store_vector_element %x_117, 0u, %76
-        %77:vec2<i32> = load %x_117
-        store %x_116, %77
-        next_iteration %b10
+      $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))
-    %x_124:array<vec4<f32>, 16> = load %indexable
+    %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
-    %79:i32 = load %x_119
-    %80:ptr<function, vec4<f32>, read_write> = access %indexable, %79
-    %81:vec4<f32> = load %80
-    store %x_GLF_color, %81
+    %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 {
-  %b14 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B14: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %84:void = call %main_1
-    %85:vec4<f32> = load %x_GLF_color
-    %86:main_out = construct %85
-    ret %86
+    %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
   }
 }
 
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
index 699169d..a4cf65d 100644
--- 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
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,14 +8,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%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
@@ -24,163 +24,200 @@
     %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
-    %x_58:vec4<f32> = load %gl_FragCoord
-    %14:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %x_61:vec2<f32> = load %14
-    %16:f32 = access %x_58, 0u
-    %17:f32 = access %x_58, 1u
-    %18:vec2<f32> = construct %16, %17
-    %x_62:vec2<f32> = div %18, %x_61
-    %20:f32 = access %x_62, 0u
-    %21:f32 = mul %20, 8.0f
-    %x_65:i32 = convert %21
-    %23:f32 = access %x_62, 1u
+    %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
-    %x_69:i32 = convert %24
-    %26:i32 = and %x_65, 5i
-    %27:i32 = and %x_69, 10i
-    %28:i32 = or %26, %27
-    %29:i32 = mul %28, 8i
-    %30:i32 = and %x_69, 5i
-    %31:i32 = and %x_65, 10i
-    %32:i32 = or %30, %31
-    %33:i32 = add %29, %32
-    %x_78:vec2<i32> = construct %33, 0i
+    %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 = block {  # body
+    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
-        %40:vec2<i32> = load %x_80_phi
-        store %x_80, %40
-        %x_83:i32 = load %x_83_phi
-        %42:bool = lt %x_83, 100i
-        if %42 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %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 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %43:vec2<i32> = load %x_80
-        store %x_95_phi, %43
-        %44:i32 = load_vector_element %x_80, 0u
-        %45:bool = gt %44, 0i
-        if %45 [t: %b7] {  # if_2
-          %b7 = block {  # 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_phi, %49
+        %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
           }
         }
-        %x_95:vec2<i32> = load %x_95_phi
+        %58:vec2<i32> = load %x_95_phi
+        %x_95:vec2<i32> = let %58
         store %x_103_phi, %x_95
-        %51:i32 = access %x_95, 0u
-        %52:bool = lt %51, 0i
-        if %52 [t: %b8] {  # if_3
-          %b8 = block {  # true
+        %60:i32 = access %x_95, 0u
+        %61:bool = lt %60, 0i
+        if %61 [t: $B8] {  # if_3
+          $B8: {  # true
             store %x_102, %x_95
-            %53:i32 = access %x_95, 1u
-            %54:i32 = add %53, 1i
-            store_vector_element %x_102, 1u, %54
-            %55:vec2<i32> = load %x_102
-            store %x_103_phi, %55
+            %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
           }
         }
-        %x_103:vec2<i32> = load %x_103_phi
+        %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
-        %58:i32 = access %x_103, 0u
-        %59:i32 = access %x_103, 1u
-        %60:i32 = div %59, 2i
-        %61:i32 = add %58, %60
-        store_vector_element %x_81_1, 0u, %61
-        %x_81:vec2<i32> = load %x_81_1
-        continue %b4
+        %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 = block {  # continuing
-        %63:i32 = add %x_83, 1i
-        store %x_84, %63
+      $B4: {  # continuing
+        %75:i32 = add %x_83, 1i
+        store %x_84, %75
         store %x_80_phi, %x_81
-        %64:i32 = load %x_84
-        store %x_83_phi, %64
-        next_iteration %b3
+        %76:i32 = load %x_84
+        store %x_83_phi, %76
+        next_iteration  # -> $B3
       }
     }
-    %x_108:i32 = load_vector_element %x_80, 0u
-    %66:vec2<i32> = load %x_80
-    store %x_114_phi, %66
-    %67:bool = lt %x_108, 0i
-    if %67 [t: %b9] {  # if_4
-      %b9 = block {  # true
-        %68:vec2<i32> = load %x_80
-        store %x_113, %68
-        %69:i32 = negation %x_108
-        store_vector_element %x_113, 0u, %69
-        %70:vec2<i32> = load %x_113
-        store %x_114_phi, %70
+    %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
       }
     }
-    %x_114:vec2<i32> = load %x_114_phi
+    %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 = block {  # body
+    loop [b: $B10, c: $B11] {  # loop_2
+      $B10: {  # body
         %x_117:ptr<function, vec2<i32>, read_write> = var
-        %x_116:vec2<i32> = load %x_116_phi
-        %74:i32 = access %x_116, 0u
-        store %x_119, %74
-        %75:i32 = load %x_119
-        %76:bool = gt %75, 15i
-        if %76 [t: %b12, f: %b13] {  # if_5
-          %b12 = block {  # true
+        %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 = block {  # false
+          $B13: {  # false
             exit_loop  # loop_2
           }
         }
-        continue %b11
+        continue  # -> $B11
       }
-      %b11 = block {  # continuing
+      $B11: {  # continuing
         store %x_117, %x_116
-        %77:i32 = load %x_119
-        %78:i32 = sub %77, 16i
-        %79:i32 = bitcast %78
-        store_vector_element %x_117, 0u, %79
-        %80:vec2<i32> = load %x_117
-        store %x_116_phi, %80
-        next_iteration %b10
+        %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))
-    %x_124:array<vec4<f32>, 16> = load %indexable
+    %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
-    %82:i32 = load %x_119
-    %83:ptr<function, vec4<f32>, read_write> = access %indexable, %82
-    %x_125:vec4<f32> = load %83
+    %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 {
-  %b14 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B14: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %87:void = call %main_1
-    %88:vec4<f32> = load %x_GLF_color
-    %89:main_out = construct %88
-    ret %89
+    %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
   }
 }
 
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
index 46959eb..10601ee 100644
--- 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
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,14 +8,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%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
@@ -27,153 +27,181 @@
     %13:vec2<f32> = swizzle %12, xy
     %14:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
     %15:vec2<f32> = load %14
-    %x_62:vec2<f32> = div %13, %15
-    %17:f32 = access %x_62, 0u
-    %18:f32 = mul %17, 8.0f
-    %x_65:i32 = convert %18
-    %20:f32 = access %x_62, 1u
-    %21:f32 = mul %20, 8.0f
-    %x_69:i32 = convert %21
-    %23:i32 = and %x_65, 5i
-    %24:i32 = and %x_69, 10i
-    %25:i32 = or %23, %24
-    %26:i32 = mul %25, 8i
-    %27:i32 = and %x_69, 5i
-    %28:i32 = and %x_65, 10i
+    %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 = add %26, %29
-    %31:vec2<i32> = construct %30, 0i
-    store %x_80, %31
+    %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 = block {  # body
+    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
-        %37:i32 = load %x_83
-        %38:bool = lt %37, 100i
-        if %38 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %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 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %39:vec2<i32> = load %x_80
-        store %x_95, %39
-        %40:i32 = load_vector_element %x_80, 0u
-        %41:bool = gt %40, 0i
-        if %41 [t: %b7] {  # if_2
-          %b7 = block {  # true
-            %42:vec2<i32> = load %x_80
-            store %x_94, %42
-            %43:i32 = load_vector_element %x_80, 1u
-            %44:i32 = sub %43, 1i
-            store_vector_element %x_94, 1u, %44
-            %45:vec2<i32> = load %x_94
-            store %x_95, %45
+        %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
           }
         }
-        %46:vec2<i32> = load %x_95
-        store %x_103, %46
-        %47:i32 = load_vector_element %x_95, 0u
-        %48:bool = lt %47, 0i
-        if %48 [t: %b8] {  # if_3
-          %b8 = block {  # true
-            %49:vec2<i32> = load %x_95
-            store %x_102, %49
-            %50:i32 = load_vector_element %x_95, 1u
-            %51:i32 = add %50, 1i
-            store_vector_element %x_102, 1u, %51
-            %52:vec2<i32> = load %x_102
-            store %x_103, %52
+        %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
           }
         }
-        %53:vec2<i32> = load %x_103
-        %x_81_1:ptr<function, vec2<i32>, read_write> = var, %53
-        %55:i32 = load_vector_element %x_103, 0u
-        %56:i32 = load_vector_element %x_103, 1u
-        %57:i32 = div %56, 2i
-        %58:i32 = add %55, %57
-        store_vector_element %x_81_1, 0u, %58
-        %x_81:vec2<i32> = load %x_81_1
-        continue %b4
+        %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 = block {  # continuing
-        %60:i32 = load %x_83
-        %61:i32 = add %60, 1i
-        store %x_84, %61
+      $B4: {  # continuing
+        %67:i32 = load %x_83
+        %68:i32 = add %67, 1i
+        store %x_84, %68
         store %x_80, %x_81
-        %62:i32 = load %x_84
-        store %x_83, %62
-        next_iteration %b3
+        %69:i32 = load %x_84
+        store %x_83, %69
+        next_iteration  # -> $B3
       }
     }
-    %x_108:i32 = load_vector_element %x_80, 0u
-    %64:vec2<i32> = load %x_80
-    store %x_114, %64
-    %65:bool = lt %x_108, 0i
-    if %65 [t: %b9] {  # if_4
-      %b9 = block {  # true
-        %66:vec2<i32> = load %x_80
-        store %x_113, %66
-        %67:i32 = negation %x_108
-        store_vector_element %x_113, 0u, %67
-        %68:vec2<i32> = load %x_113
-        store %x_114, %68
+    %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
       }
     }
-    %69:vec2<i32> = load %x_114
-    store %x_116, %69
-    loop [b: %b10, c: %b11] {  # loop_2
-      %b10 = block {  # body
+    %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
-        %71:i32 = load_vector_element %x_116, 0u
-        store %x_119, %71
-        %72:i32 = load %x_119
-        %73:bool = gt %72, 15i
-        if %73 [t: %b12, f: %b13] {  # if_5
-          %b12 = block {  # true
+        %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 = block {  # false
+          $B13: {  # false
             exit_loop  # loop_2
           }
         }
-        continue %b11
+        continue  # -> $B11
       }
-      %b11 = block {  # continuing
-        %74:vec2<i32> = load %x_116
-        store %x_117, %74
-        %75:i32 = load %x_119
-        %76:i32 = sub %75, 16i
-        store_vector_element %x_117, 0u, %76
-        %77:vec2<i32> = load %x_117
-        store %x_116, %77
-        next_iteration %b10
+      $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))
-    %78:i32 = load %x_119
-    %79:ptr<function, vec4<f32>, read_write> = access %indexable, %78
-    %80:vec4<f32> = load %79
-    store %x_GLF_color, %80
+    %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 {
-  %b14 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B14: {
     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
+    %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
   }
 }
 
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
index 78b6bb1..91749ee1 100644
--- 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
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,14 +8,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%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
@@ -24,160 +24,196 @@
     %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
-    %x_58:vec4<f32> = load %gl_FragCoord
-    %14:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %x_61:vec2<f32> = load %14
-    %16:f32 = access %x_58, 0u
-    %17:f32 = access %x_58, 1u
-    %18:vec2<f32> = construct %16, %17
-    %x_62:vec2<f32> = div %18, %x_61
-    %20:f32 = access %x_62, 0u
-    %21:f32 = mul %20, 8.0f
-    %x_65:i32 = convert %21
-    %23:f32 = access %x_62, 1u
+    %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
-    %x_69:i32 = convert %24
-    %26:i32 = and %x_65, 5i
-    %27:i32 = and %x_69, 10i
-    %28:i32 = or %26, %27
-    %29:i32 = mul %28, 8i
-    %30:i32 = and %x_69, 5i
-    %31:i32 = and %x_65, 10i
-    %32:i32 = or %30, %31
-    %33:i32 = add %29, %32
-    %x_78:vec2<i32> = construct %33, 0i
+    %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 = block {  # body
+    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
-        %40:vec2<i32> = load %x_80_phi
-        store %x_80, %40
-        %x_83:i32 = load %x_83_phi
-        %42:bool = lt %x_83, 100i
-        if %42 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %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 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %43:vec2<i32> = load %x_80
-        store %x_95_phi, %43
-        %44:i32 = load_vector_element %x_80, 0u
-        %45:bool = gt %44, 0i
-        if %45 [t: %b7] {  # if_2
-          %b7 = block {  # 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_phi, %49
+        %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
           }
         }
-        %x_95:vec2<i32> = load %x_95_phi
+        %58:vec2<i32> = load %x_95_phi
+        %x_95:vec2<i32> = let %58
         store %x_103_phi, %x_95
-        %51:i32 = access %x_95, 0u
-        %52:bool = lt %51, 0i
-        if %52 [t: %b8] {  # if_3
-          %b8 = block {  # true
+        %60:i32 = access %x_95, 0u
+        %61:bool = lt %60, 0i
+        if %61 [t: $B8] {  # if_3
+          $B8: {  # true
             store %x_102, %x_95
-            %53:i32 = access %x_95, 1u
-            %54:i32 = add %53, 1i
-            store_vector_element %x_102, 1u, %54
-            %55:vec2<i32> = load %x_102
-            store %x_103_phi, %55
+            %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
           }
         }
-        %x_103:vec2<i32> = load %x_103_phi
+        %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
-        %58:i32 = access %x_103, 0u
-        %59:i32 = access %x_103, 1u
-        %60:i32 = div %59, 2i
-        %61:i32 = add %58, %60
-        store_vector_element %x_81_1, 0u, %61
-        %x_81:vec2<i32> = load %x_81_1
-        continue %b4
+        %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 = block {  # continuing
-        %63:i32 = add %x_83, 1i
-        store %x_84, %63
+      $B4: {  # continuing
+        %75:i32 = add %x_83, 1i
+        store %x_84, %75
         store %x_80_phi, %x_81
-        %64:i32 = load %x_84
-        store %x_83_phi, %64
-        next_iteration %b3
+        %76:i32 = load %x_84
+        store %x_83_phi, %76
+        next_iteration  # -> $B3
       }
     }
-    %x_108:i32 = load_vector_element %x_80, 0u
-    %66:vec2<i32> = load %x_80
-    store %x_114_phi, %66
-    %67:bool = lt %x_108, 0i
-    if %67 [t: %b9] {  # if_4
-      %b9 = block {  # true
-        %68:vec2<i32> = load %x_80
-        store %x_113, %68
-        %69:i32 = negation %x_108
-        store_vector_element %x_113, 0u, %69
-        %70:vec2<i32> = load %x_113
-        store %x_114_phi, %70
+    %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
       }
     }
-    %x_114:vec2<i32> = load %x_114_phi
+    %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 = block {  # body
+    loop [b: $B10, c: $B11] {  # loop_2
+      $B10: {  # body
         %x_117:ptr<function, vec2<i32>, read_write> = var
-        %x_116:vec2<i32> = load %x_116_phi
-        %74:i32 = access %x_116, 0u
-        store %x_119, %74
-        %75:i32 = load %x_119
-        %76:bool = gt %75, 15i
-        if %76 [t: %b12, f: %b13] {  # if_5
-          %b12 = block {  # true
+        %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 = block {  # false
+          $B13: {  # false
             exit_loop  # loop_2
           }
         }
-        continue %b11
+        continue  # -> $B11
       }
-      %b11 = block {  # continuing
+      $B11: {  # continuing
         store %x_117, %x_116
-        %77:i32 = load %x_119
-        %78:i32 = sub %77, 16i
-        %79:i32 = bitcast %78
-        store_vector_element %x_117, 0u, %79
-        %80:vec2<i32> = load %x_117
-        store %x_116_phi, %80
-        next_iteration %b10
+        %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))
-    %81:i32 = load %x_119
-    %82:ptr<function, vec4<f32>, read_write> = access %indexable, %81
-    %x_124:vec4<f32> = load %82
+    %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 {
-  %b14 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B14: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %86:void = call %main_1
-    %87:vec4<f32> = load %x_GLF_color
-    %88:main_out = construct %87
-    ret %88
+    %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
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/1.spvasm.expected.ir.msl
index a7092fa..862ab59 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/1.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,14 +8,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %x_196:ptr<function, array<i32, 256>, read_write> = var
     %x_197:ptr<function, array<i32, 256>, read_write> = var
     %x_198:ptr<function, array<i32, 256>, read_write> = var
@@ -29,114 +29,122 @@
     %15:vec2<f32> = swizzle %14, xy
     %16:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
     %17:vec2<f32> = load %16
-    %x_203:vec2<f32> = div %15, %17
-    %19:f32 = access %x_203, 0u
-    %20:f32 = mul %19, 256.0f
-    %21:i32 = convert %20
-    %22:f32 = access %x_203, 1u
-    %23:f32 = mul %22, 256.0f
-    %24:i32 = convert %23
-    %25:vec2<i32> = construct %21, %24
-    store %x_210, %25
-    switch 0u [c: (default, %b3)] {  # switch_1
-      %b3 = block {  # case
-        %26:vec2<i32> = load %x_210
-        store %x_214, %26
-        loop [b: %b4, c: %b5] {  # loop_1
-          %b4 = block {  # body
+    %18:vec2<f32> = div %15, %17
+    %x_203:vec2<f32> = let %18
+    %20:f32 = access %x_203, 0u
+    %21:f32 = mul %20, 256.0f
+    %22:i32 = call %tint_f32_to_i32, %21
+    %24:i32 = let %22
+    %25:f32 = access %x_203, 1u
+    %26:f32 = mul %25, 256.0f
+    %27:i32 = call %tint_f32_to_i32, %26
+    %28:vec2<i32> = construct %24, %27
+    store %x_210, %28
+    switch 0u [c: (default, $B3)] {  # switch_1
+      $B3: {  # case
+        %29:vec2<i32> = load %x_210
+        store %x_214, %29
+        loop [b: $B4, c: $B5] {  # loop_1
+          $B4: {  # body
             %x_233:ptr<function, i32, read_write> = var
             %x_234:ptr<function, i32, read_write> = var
             %x_235:ptr<function, i32, read_write> = var
             %x_241:ptr<function, bool, read_write> = var
-            %x_217:i32 = load_vector_element %x_214, 1u
+            %34:i32 = load_vector_element %x_214, 1u
+            %x_217:i32 = let %34
             store %x_253, vec4<f32>(0.0f)
             store %x_254, false
-            %32:bool = neq %x_217, 256i
-            if %32 [t: %b6, f: %b7] {  # if_1
-              %b6 = block {  # true
+            %36:bool = neq %x_217, 256i
+            if %36 [t: $B6, f: $B7] {  # if_1
+              $B6: {  # true
                 exit_if  # if_1
               }
-              %b7 = block {  # false
+              $B7: {  # false
                 exit_loop  # loop_1
               }
             }
-            %x_221:i32 = load_vector_element %x_214, 0u
+            %37:i32 = load_vector_element %x_214, 0u
+            %x_221:i32 = let %37
             store %x_196, array<i32, 256>(115i, 133i, 150i, 164i, 176i, 184i, 190i, 192i, 191i, 187i, 181i, 172i, 163i, 153i, 143i, 134i, 126i, 120i, 116i, 114i, 114i, 117i, 121i, 127i, 134i, 141i, 148i, 154i, 159i, 162i, 163i, 161i, 157i, 151i, 143i, 134i, 124i, 113i, 103i, 94i, 87i, 82i, 79i, 80i, 84i, 91i, 101i, 114i, 130i, 146i, 164i, 182i, 199i, 215i, 229i, 240i, 249i, 254i, 256i, 254i, 250i, 243i, 233i, 223i, 212i, 200i, 190i, 180i, 172i, 166i, 163i, 161i, 162i, 164i, 169i, 174i, 179i, 185i, 190i, 193i, 195i, 195i, 192i, 188i, 180i, 171i, 161i, 149i, 137i, 125i, 114i, 105i, 97i, 93i, 91i, 93i, 98i, 106i, 117i, 130i, 145i, 161i, 177i, 193i, 208i, 221i, 231i, 239i, 243i, 244i, 242i, 236i, 228i, 218i, 207i, 194i, 181i, 169i, 158i, 148i, 141i, 135i, 132i, 131i, 132i, 135i, 138i, 143i, 147i, 151i, 154i, 155i, 155i, 152i, 146i, 139i, 129i, 118i, 106i, 93i, 80i, 68i, 58i, 49i, 43i, 40i, 41i, 44i, 51i, 61i, 73i, 87i, 103i, 119i, 134i, 149i, 162i, 173i, 181i, 186i, 188i, 186i, 181i, 174i, 164i, 153i, 141i, 128i, 116i, 104i, 94i, 86i, 81i, 77i, 76i, 77i, 80i, 84i, 89i, 94i, 98i, 102i, 104i, 104i, 102i, 98i, 92i, 83i, 73i, 62i, 50i, 38i, 26i, 16i, 8i, 2i, 0i, 0i, 4i, 11i, 21i, 33i, 48i, 64i, 81i, 98i, 114i, 129i, 141i, 151i, 158i, 161i, 161i, 158i, 152i, 144i, 134i, 123i, 112i, 100i, 90i, 81i, 73i, 68i, 65i, 65i, 67i, 70i, 75i, 81i, 87i, 92i, 97i, 101i, 103i, 102i, 100i, 95i, 88i, 79i, 69i, 58i, 47i, 36i, 26i, 18i, 13i, 11i, 11i, 15i, 22i, 32i, 45i, 60i, 77i, 94i)
-            %34:ptr<function, i32, read_write> = access %x_196, %x_217
-            %35:i32 = load %34
-            %36:i32 = add %35, 15i
-            %x_225:bool = lt %x_221, %36
-            if %x_225 [t: %b8] {  # if_2
-              %b8 = block {  # true
+            %39:ptr<function, i32, read_write> = access %x_196, %x_217
+            %40:i32 = load %39
+            %41:i32 = add %40, 15i
+            %42:bool = lt %x_221, %41
+            %x_225:bool = let %42
+            if %x_225 [t: $B8] {  # if_2
+              $B8: {  # true
                 store %x_197, array<i32, 256>(115i, 133i, 150i, 164i, 176i, 184i, 190i, 192i, 191i, 187i, 181i, 172i, 163i, 153i, 143i, 134i, 126i, 120i, 116i, 114i, 114i, 117i, 121i, 127i, 134i, 141i, 148i, 154i, 159i, 162i, 163i, 161i, 157i, 151i, 143i, 134i, 124i, 113i, 103i, 94i, 87i, 82i, 79i, 80i, 84i, 91i, 101i, 114i, 130i, 146i, 164i, 182i, 199i, 215i, 229i, 240i, 249i, 254i, 256i, 254i, 250i, 243i, 233i, 223i, 212i, 200i, 190i, 180i, 172i, 166i, 163i, 161i, 162i, 164i, 169i, 174i, 179i, 185i, 190i, 193i, 195i, 195i, 192i, 188i, 180i, 171i, 161i, 149i, 137i, 125i, 114i, 105i, 97i, 93i, 91i, 93i, 98i, 106i, 117i, 130i, 145i, 161i, 177i, 193i, 208i, 221i, 231i, 239i, 243i, 244i, 242i, 236i, 228i, 218i, 207i, 194i, 181i, 169i, 158i, 148i, 141i, 135i, 132i, 131i, 132i, 135i, 138i, 143i, 147i, 151i, 154i, 155i, 155i, 152i, 146i, 139i, 129i, 118i, 106i, 93i, 80i, 68i, 58i, 49i, 43i, 40i, 41i, 44i, 51i, 61i, 73i, 87i, 103i, 119i, 134i, 149i, 162i, 173i, 181i, 186i, 188i, 186i, 181i, 174i, 164i, 153i, 141i, 128i, 116i, 104i, 94i, 86i, 81i, 77i, 76i, 77i, 80i, 84i, 89i, 94i, 98i, 102i, 104i, 104i, 102i, 98i, 92i, 83i, 73i, 62i, 50i, 38i, 26i, 16i, 8i, 2i, 0i, 0i, 4i, 11i, 21i, 33i, 48i, 64i, 81i, 98i, 114i, 129i, 141i, 151i, 158i, 161i, 161i, 158i, 152i, 144i, 134i, 123i, 112i, 100i, 90i, 81i, 73i, 68i, 65i, 65i, 67i, 70i, 75i, 81i, 87i, 92i, 97i, 101i, 103i, 102i, 100i, 95i, 88i, 79i, 69i, 58i, 47i, 36i, 26i, 18i, 13i, 11i, 11i, 15i, 22i, 32i, 45i, 60i, 77i, 94i)
                 exit_if  # if_2
               }
             }
-            if %x_225 [t: %b9, f: %b10] {  # if_3
-              %b9 = block {  # true
-                %38:ptr<function, i32, read_write> = access %x_197, %x_217
-                %39:i32 = load %38
-                store %x_233, %39
-                %40:i32 = load %x_233
-                store %x_235, %40
+            if %x_225 [t: $B9, f: $B10] {  # if_3
+              $B9: {  # true
+                %44:ptr<function, i32, read_write> = access %x_197, %x_217
+                %45:i32 = load %44
+                store %x_233, %45
+                %46:i32 = load %x_233
+                store %x_235, %46
                 exit_if  # if_3
               }
-              %b10 = block {  # false
+              $B10: {  # false
                 store %x_234, 0i
-                %41:i32 = load %x_234
-                store %x_235, %41
+                %47:i32 = load %x_234
+                store %x_235, %47
                 exit_if  # if_3
               }
             }
-            %42:i32 = load %x_235
-            %43:i32 = sub %42, 15i
-            %x_237:bool = gt %x_221, %43
-            if %x_225 [t: %b11, f: %b12] {  # if_4
-              %b11 = block {  # true
+            %48:i32 = load %x_235
+            %49:i32 = sub %48, 15i
+            %50:bool = gt %x_221, %49
+            %x_237:bool = let %50
+            if %x_225 [t: $B11, f: $B12] {  # if_4
+              $B11: {  # true
                 store %x_241, %x_237
                 exit_if  # if_4
               }
-              %b12 = block {  # false
+              $B12: {  # false
                 store %x_241, %x_225
                 exit_if  # if_4
               }
             }
-            %45:bool = load %x_241
-            if %45 [t: %b13] {  # if_5
-              %b13 = block {  # true
+            %52:bool = load %x_241
+            if %52 [t: $B13] {  # if_5
+              $B13: {  # true
                 store %x_198, array<i32, 256>(115i, 133i, 150i, 164i, 176i, 184i, 190i, 192i, 191i, 187i, 181i, 172i, 163i, 153i, 143i, 134i, 126i, 120i, 116i, 114i, 114i, 117i, 121i, 127i, 134i, 141i, 148i, 154i, 159i, 162i, 163i, 161i, 157i, 151i, 143i, 134i, 124i, 113i, 103i, 94i, 87i, 82i, 79i, 80i, 84i, 91i, 101i, 114i, 130i, 146i, 164i, 182i, 199i, 215i, 229i, 240i, 249i, 254i, 256i, 254i, 250i, 243i, 233i, 223i, 212i, 200i, 190i, 180i, 172i, 166i, 163i, 161i, 162i, 164i, 169i, 174i, 179i, 185i, 190i, 193i, 195i, 195i, 192i, 188i, 180i, 171i, 161i, 149i, 137i, 125i, 114i, 105i, 97i, 93i, 91i, 93i, 98i, 106i, 117i, 130i, 145i, 161i, 177i, 193i, 208i, 221i, 231i, 239i, 243i, 244i, 242i, 236i, 228i, 218i, 207i, 194i, 181i, 169i, 158i, 148i, 141i, 135i, 132i, 131i, 132i, 135i, 138i, 143i, 147i, 151i, 154i, 155i, 155i, 152i, 146i, 139i, 129i, 118i, 106i, 93i, 80i, 68i, 58i, 49i, 43i, 40i, 41i, 44i, 51i, 61i, 73i, 87i, 103i, 119i, 134i, 149i, 162i, 173i, 181i, 186i, 188i, 186i, 181i, 174i, 164i, 153i, 141i, 128i, 116i, 104i, 94i, 86i, 81i, 77i, 76i, 77i, 80i, 84i, 89i, 94i, 98i, 102i, 104i, 104i, 102i, 98i, 92i, 83i, 73i, 62i, 50i, 38i, 26i, 16i, 8i, 2i, 0i, 0i, 4i, 11i, 21i, 33i, 48i, 64i, 81i, 98i, 114i, 129i, 141i, 151i, 158i, 161i, 161i, 158i, 152i, 144i, 134i, 123i, 112i, 100i, 90i, 81i, 73i, 68i, 65i, 65i, 67i, 70i, 75i, 81i, 87i, 92i, 97i, 101i, 103i, 102i, 100i, 95i, 88i, 79i, 69i, 58i, 47i, 36i, 26i, 18i, 13i, 11i, 11i, 15i, 22i, 32i, 45i, 60i, 77i, 94i)
-                %46:ptr<function, i32, read_write> = access %x_198, %x_217
-                %47:i32 = load %46
-                %48:i32 = sub %x_221, %47
-                %49:f32 = convert %48
-                %50:f32 = abs %49
-                %51:f32 = sub 15.0f, %50
-                %x_250:f32 = mul %51, 0.06666667014360427856f
-                %53:vec4<f32> = construct %x_250, %x_250, %x_250, 1.0f
-                store %x_251, %53
-                %54:vec4<f32> = load %x_251
-                store %x_253, %54
+                %53:ptr<function, i32, read_write> = access %x_198, %x_217
+                %54:i32 = load %53
+                %55:i32 = sub %x_221, %54
+                %56:f32 = convert %55
+                %57:f32 = abs %56
+                %58:f32 = sub 15.0f, %57
+                %59:f32 = mul %58, 0.06666667014360427856f
+                %x_250:f32 = let %59
+                %61:vec4<f32> = construct %x_250, %x_250, %x_250, 1.0f
+                store %x_251, %61
+                %62:vec4<f32> = load %x_251
+                store %x_253, %62
                 store %x_254, true
                 exit_loop  # loop_1
               }
             }
-            %55:vec2<i32> = load %x_214
-            %x_215_1:ptr<function, vec2<i32>, read_write> = var, %55
-            %57:i32 = add %x_217, 1i
-            store_vector_element %x_215_1, 1u, %57
-            %x_215:vec2<i32> = load %x_215_1
-            continue %b5
+            %63:vec2<i32> = load %x_214
+            %x_215_1:ptr<function, vec2<i32>, read_write> = var, %63
+            %65:i32 = add %x_217, 1i
+            store_vector_element %x_215_1, 1u, %65
+            %66:vec2<i32> = load %x_215_1
+            %x_215:vec2<i32> = let %66
+            continue  # -> $B5
           }
-          %b5 = block {  # continuing
+          $B5: {  # continuing
             store %x_214, %x_215
-            next_iteration %b4
+            next_iteration  # -> $B4
           }
         }
-        %59:vec4<f32> = load %x_253
-        store %x_256, %59
-        %60:bool = load %x_254
-        if %60 [t: %b14] {  # if_6
-          %b14 = block {  # true
+        %68:vec4<f32> = load %x_253
+        store %x_256, %68
+        %69:bool = load %x_254
+        if %69 [t: $B14] {  # if_6
+          $B14: {  # true
             exit_switch  # switch_1
           }
         }
@@ -144,18 +152,28 @@
         exit_switch  # switch_1
       }
     }
-    %61:vec4<f32> = load %x_256
-    store %x_GLF_color, %61
+    %70:vec4<f32> = load %x_256
+    store %x_GLF_color, %70
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b15 {
-  %b15 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B15: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %64:void = call %main_1
-    %65:vec4<f32> = load %x_GLF_color
-    %66:main_out = construct %65
-    ret %66
+    %73:void = call %main_1
+    %74:vec4<f32> = load %x_GLF_color
+    %75:main_out = construct %74
+    ret %75
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B16: {
+    %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
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/1.wgsl.expected.ir.msl
index e720d06..c64087a 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/1.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/1.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,14 +8,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %x_196:ptr<function, array<i32, 256>, read_write> = var
     %x_197:ptr<function, array<i32, 256>, read_write> = var
     %x_198:ptr<function, array<i32, 256>, read_write> = var
@@ -26,122 +26,138 @@
     %x_253_phi:ptr<function, vec4<f32>, read_write> = var
     %x_254_phi:ptr<function, bool, read_write> = var
     %x_256_phi:ptr<function, vec4<f32>, read_write> = var
-    %x_199:vec4<f32> = load %gl_FragCoord
-    %16:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %x_202:vec2<f32> = load %16
-    %18:f32 = access %x_199, 0u
-    %19:f32 = access %x_199, 1u
-    %20:vec2<f32> = construct %18, %19
-    %x_203:vec2<f32> = div %20, %x_202
-    %22:f32 = access %x_203, 0u
-    %23:f32 = mul %22, 256.0f
-    %24:i32 = convert %23
-    %25:f32 = access %x_203, 1u
+    %15:vec4<f32> = load %gl_FragCoord
+    %x_199:vec4<f32> = let %15
+    %17:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
+    %18:vec2<f32> = load %17
+    %x_202:vec2<f32> = let %18
+    %20:f32 = access %x_199, 0u
+    %21:f32 = access %x_199, 1u
+    %22:vec2<f32> = construct %20, %21
+    %23:vec2<f32> = div %22, %x_202
+    %x_203:vec2<f32> = let %23
+    %25:f32 = access %x_203, 0u
     %26:f32 = mul %25, 256.0f
-    %27:i32 = convert %26
-    %28:vec2<i32> = construct %24, %27
-    store %x_210, %28
-    switch 0u [c: (default, %b3)] {  # switch_1
-      %b3 = block {  # case
-        %29:vec2<i32> = load %x_210
-        store %x_214_phi, %29
-        loop [b: %b4, c: %b5] {  # loop_1
-          %b4 = block {  # body
+    %27:i32 = call %tint_f32_to_i32, %26
+    %29:i32 = let %27
+    %30:f32 = access %x_203, 1u
+    %31:f32 = mul %30, 256.0f
+    %32:i32 = call %tint_f32_to_i32, %31
+    %33:vec2<i32> = construct %29, %32
+    store %x_210, %33
+    switch 0u [c: (default, $B3)] {  # switch_1
+      $B3: {  # case
+        %34:vec2<i32> = load %x_210
+        store %x_214_phi, %34
+        loop [b: $B4, c: $B5] {  # loop_1
+          $B4: {  # body
             %x_233:ptr<function, i32, read_write> = var
             %x_234:ptr<function, i32, read_write> = var
             %x_235_phi:ptr<function, i32, read_write> = var
             %x_241_phi:ptr<function, bool, read_write> = var
-            %x_214:vec2<i32> = load %x_214_phi
-            %x_217:i32 = access %x_214, 1u
+            %39:vec2<i32> = load %x_214_phi
+            %x_214:vec2<i32> = let %39
+            %41:i32 = access %x_214, 1u
+            %x_217:i32 = let %41
             store %x_253_phi, vec4<f32>(0.0f)
             store %x_254_phi, false
-            %36:bool = neq %x_217, 256i
-            if %36 [t: %b6, f: %b7] {  # if_1
-              %b6 = block {  # true
+            %43:bool = neq %x_217, 256i
+            if %43 [t: $B6, f: $B7] {  # if_1
+              $B6: {  # true
                 exit_if  # if_1
               }
-              %b7 = block {  # false
+              $B7: {  # false
                 exit_loop  # loop_1
               }
             }
-            %x_221:i32 = access %x_214, 0u
+            %44:i32 = access %x_214, 0u
+            %x_221:i32 = let %44
             store %x_196, array<i32, 256>(115i, 133i, 150i, 164i, 176i, 184i, 190i, 192i, 191i, 187i, 181i, 172i, 163i, 153i, 143i, 134i, 126i, 120i, 116i, 114i, 114i, 117i, 121i, 127i, 134i, 141i, 148i, 154i, 159i, 162i, 163i, 161i, 157i, 151i, 143i, 134i, 124i, 113i, 103i, 94i, 87i, 82i, 79i, 80i, 84i, 91i, 101i, 114i, 130i, 146i, 164i, 182i, 199i, 215i, 229i, 240i, 249i, 254i, 256i, 254i, 250i, 243i, 233i, 223i, 212i, 200i, 190i, 180i, 172i, 166i, 163i, 161i, 162i, 164i, 169i, 174i, 179i, 185i, 190i, 193i, 195i, 195i, 192i, 188i, 180i, 171i, 161i, 149i, 137i, 125i, 114i, 105i, 97i, 93i, 91i, 93i, 98i, 106i, 117i, 130i, 145i, 161i, 177i, 193i, 208i, 221i, 231i, 239i, 243i, 244i, 242i, 236i, 228i, 218i, 207i, 194i, 181i, 169i, 158i, 148i, 141i, 135i, 132i, 131i, 132i, 135i, 138i, 143i, 147i, 151i, 154i, 155i, 155i, 152i, 146i, 139i, 129i, 118i, 106i, 93i, 80i, 68i, 58i, 49i, 43i, 40i, 41i, 44i, 51i, 61i, 73i, 87i, 103i, 119i, 134i, 149i, 162i, 173i, 181i, 186i, 188i, 186i, 181i, 174i, 164i, 153i, 141i, 128i, 116i, 104i, 94i, 86i, 81i, 77i, 76i, 77i, 80i, 84i, 89i, 94i, 98i, 102i, 104i, 104i, 102i, 98i, 92i, 83i, 73i, 62i, 50i, 38i, 26i, 16i, 8i, 2i, 0i, 0i, 4i, 11i, 21i, 33i, 48i, 64i, 81i, 98i, 114i, 129i, 141i, 151i, 158i, 161i, 161i, 158i, 152i, 144i, 134i, 123i, 112i, 100i, 90i, 81i, 73i, 68i, 65i, 65i, 67i, 70i, 75i, 81i, 87i, 92i, 97i, 101i, 103i, 102i, 100i, 95i, 88i, 79i, 69i, 58i, 47i, 36i, 26i, 18i, 13i, 11i, 11i, 15i, 22i, 32i, 45i, 60i, 77i, 94i)
-            %38:ptr<function, i32, read_write> = access %x_196, %x_217
-            %x_223:i32 = load %38
-            %40:i32 = add %x_223, 15i
-            %x_225:bool = lt %x_221, %40
-            if %x_225 [t: %b8] {  # if_2
-              %b8 = block {  # true
+            %46:ptr<function, i32, read_write> = access %x_196, %x_217
+            %47:i32 = load %46
+            %x_223:i32 = let %47
+            %49:i32 = add %x_223, 15i
+            %50:bool = lt %x_221, %49
+            %x_225:bool = let %50
+            if %x_225 [t: $B8] {  # if_2
+              $B8: {  # true
                 store %x_197, array<i32, 256>(115i, 133i, 150i, 164i, 176i, 184i, 190i, 192i, 191i, 187i, 181i, 172i, 163i, 153i, 143i, 134i, 126i, 120i, 116i, 114i, 114i, 117i, 121i, 127i, 134i, 141i, 148i, 154i, 159i, 162i, 163i, 161i, 157i, 151i, 143i, 134i, 124i, 113i, 103i, 94i, 87i, 82i, 79i, 80i, 84i, 91i, 101i, 114i, 130i, 146i, 164i, 182i, 199i, 215i, 229i, 240i, 249i, 254i, 256i, 254i, 250i, 243i, 233i, 223i, 212i, 200i, 190i, 180i, 172i, 166i, 163i, 161i, 162i, 164i, 169i, 174i, 179i, 185i, 190i, 193i, 195i, 195i, 192i, 188i, 180i, 171i, 161i, 149i, 137i, 125i, 114i, 105i, 97i, 93i, 91i, 93i, 98i, 106i, 117i, 130i, 145i, 161i, 177i, 193i, 208i, 221i, 231i, 239i, 243i, 244i, 242i, 236i, 228i, 218i, 207i, 194i, 181i, 169i, 158i, 148i, 141i, 135i, 132i, 131i, 132i, 135i, 138i, 143i, 147i, 151i, 154i, 155i, 155i, 152i, 146i, 139i, 129i, 118i, 106i, 93i, 80i, 68i, 58i, 49i, 43i, 40i, 41i, 44i, 51i, 61i, 73i, 87i, 103i, 119i, 134i, 149i, 162i, 173i, 181i, 186i, 188i, 186i, 181i, 174i, 164i, 153i, 141i, 128i, 116i, 104i, 94i, 86i, 81i, 77i, 76i, 77i, 80i, 84i, 89i, 94i, 98i, 102i, 104i, 104i, 102i, 98i, 92i, 83i, 73i, 62i, 50i, 38i, 26i, 16i, 8i, 2i, 0i, 0i, 4i, 11i, 21i, 33i, 48i, 64i, 81i, 98i, 114i, 129i, 141i, 151i, 158i, 161i, 161i, 158i, 152i, 144i, 134i, 123i, 112i, 100i, 90i, 81i, 73i, 68i, 65i, 65i, 67i, 70i, 75i, 81i, 87i, 92i, 97i, 101i, 103i, 102i, 100i, 95i, 88i, 79i, 69i, 58i, 47i, 36i, 26i, 18i, 13i, 11i, 11i, 15i, 22i, 32i, 45i, 60i, 77i, 94i)
                 exit_if  # if_2
               }
             }
-            if %x_225 [t: %b9, f: %b10] {  # if_3
-              %b9 = block {  # true
-                %42:ptr<function, i32, read_write> = access %x_197, %x_217
-                %43:i32 = load %42
-                store %x_233, %43
-                %44:i32 = load %x_233
-                store %x_235_phi, %44
+            if %x_225 [t: $B9, f: $B10] {  # if_3
+              $B9: {  # true
+                %52:ptr<function, i32, read_write> = access %x_197, %x_217
+                %53:i32 = load %52
+                store %x_233, %53
+                %54:i32 = load %x_233
+                store %x_235_phi, %54
                 exit_if  # if_3
               }
-              %b10 = block {  # false
+              $B10: {  # false
                 store %x_234, 0i
-                %45:i32 = load %x_234
-                store %x_235_phi, %45
+                %55:i32 = load %x_234
+                store %x_235_phi, %55
                 exit_if  # if_3
               }
             }
-            %x_235:i32 = load %x_235_phi
-            %47:i32 = sub %x_235, 15i
-            %x_237:bool = gt %x_221, %47
-            if %x_225 [t: %b11, f: %b12] {  # if_4
-              %b11 = block {  # true
+            %56:i32 = load %x_235_phi
+            %x_235:i32 = let %56
+            %58:i32 = sub %x_235, 15i
+            %59:bool = gt %x_221, %58
+            %x_237:bool = let %59
+            if %x_225 [t: $B11, f: $B12] {  # if_4
+              $B11: {  # true
                 store %x_241_phi, %x_237
                 exit_if  # if_4
               }
-              %b12 = block {  # false
+              $B12: {  # false
                 store %x_241_phi, %x_225
                 exit_if  # if_4
               }
             }
-            %x_241:bool = load %x_241_phi
-            if %x_241 [t: %b13] {  # if_5
-              %b13 = block {  # true
+            %61:bool = load %x_241_phi
+            %x_241:bool = let %61
+            if %x_241 [t: $B13] {  # if_5
+              $B13: {  # true
                 store %x_198, array<i32, 256>(115i, 133i, 150i, 164i, 176i, 184i, 190i, 192i, 191i, 187i, 181i, 172i, 163i, 153i, 143i, 134i, 126i, 120i, 116i, 114i, 114i, 117i, 121i, 127i, 134i, 141i, 148i, 154i, 159i, 162i, 163i, 161i, 157i, 151i, 143i, 134i, 124i, 113i, 103i, 94i, 87i, 82i, 79i, 80i, 84i, 91i, 101i, 114i, 130i, 146i, 164i, 182i, 199i, 215i, 229i, 240i, 249i, 254i, 256i, 254i, 250i, 243i, 233i, 223i, 212i, 200i, 190i, 180i, 172i, 166i, 163i, 161i, 162i, 164i, 169i, 174i, 179i, 185i, 190i, 193i, 195i, 195i, 192i, 188i, 180i, 171i, 161i, 149i, 137i, 125i, 114i, 105i, 97i, 93i, 91i, 93i, 98i, 106i, 117i, 130i, 145i, 161i, 177i, 193i, 208i, 221i, 231i, 239i, 243i, 244i, 242i, 236i, 228i, 218i, 207i, 194i, 181i, 169i, 158i, 148i, 141i, 135i, 132i, 131i, 132i, 135i, 138i, 143i, 147i, 151i, 154i, 155i, 155i, 152i, 146i, 139i, 129i, 118i, 106i, 93i, 80i, 68i, 58i, 49i, 43i, 40i, 41i, 44i, 51i, 61i, 73i, 87i, 103i, 119i, 134i, 149i, 162i, 173i, 181i, 186i, 188i, 186i, 181i, 174i, 164i, 153i, 141i, 128i, 116i, 104i, 94i, 86i, 81i, 77i, 76i, 77i, 80i, 84i, 89i, 94i, 98i, 102i, 104i, 104i, 102i, 98i, 92i, 83i, 73i, 62i, 50i, 38i, 26i, 16i, 8i, 2i, 0i, 0i, 4i, 11i, 21i, 33i, 48i, 64i, 81i, 98i, 114i, 129i, 141i, 151i, 158i, 161i, 161i, 158i, 152i, 144i, 134i, 123i, 112i, 100i, 90i, 81i, 73i, 68i, 65i, 65i, 67i, 70i, 75i, 81i, 87i, 92i, 97i, 101i, 103i, 102i, 100i, 95i, 88i, 79i, 69i, 58i, 47i, 36i, 26i, 18i, 13i, 11i, 11i, 15i, 22i, 32i, 45i, 60i, 77i, 94i)
-                %50:ptr<function, i32, read_write> = access %x_198, %x_217
-                %x_245:i32 = load %50
-                %52:i32 = sub %x_221, %x_245
-                %53:f32 = convert %52
-                %54:f32 = abs %53
-                %55:f32 = sub 15.0f, %54
-                %x_250:f32 = mul %55, 0.06666667014360427856f
-                %57:vec4<f32> = construct %x_250, %x_250, %x_250, 1.0f
-                store %x_251, %57
-                %58:vec4<f32> = load %x_251
-                store %x_253_phi, %58
+                %63:ptr<function, i32, read_write> = access %x_198, %x_217
+                %64:i32 = load %63
+                %x_245:i32 = let %64
+                %66:i32 = sub %x_221, %x_245
+                %67:f32 = convert %66
+                %68:f32 = abs %67
+                %69:f32 = sub 15.0f, %68
+                %70:f32 = mul %69, 0.06666667014360427856f
+                %x_250:f32 = let %70
+                %72:vec4<f32> = construct %x_250, %x_250, %x_250, 1.0f
+                store %x_251, %72
+                %73:vec4<f32> = load %x_251
+                store %x_253_phi, %73
                 store %x_254_phi, true
                 exit_loop  # loop_1
               }
             }
             %x_215_1:ptr<function, vec2<i32>, read_write> = var, %x_214
-            %60:i32 = add %x_217, 1i
-            store_vector_element %x_215_1, 1u, %60
-            %x_215:vec2<i32> = load %x_215_1
-            continue %b5
+            %75:i32 = add %x_217, 1i
+            store_vector_element %x_215_1, 1u, %75
+            %76:vec2<i32> = load %x_215_1
+            %x_215:vec2<i32> = let %76
+            continue  # -> $B5
           }
-          %b5 = block {  # continuing
+          $B5: {  # continuing
             store %x_214_phi, %x_215
-            next_iteration %b4
+            next_iteration  # -> $B4
           }
         }
-        %62:vec4<f32> = load %x_253_phi
-        store %x_253, %62
-        %x_254:bool = load %x_254_phi
-        %64:vec4<f32> = load %x_253
-        store %x_256_phi, %64
-        if %x_254 [t: %b14] {  # if_6
-          %b14 = block {  # true
+        %78:vec4<f32> = load %x_253_phi
+        store %x_253, %78
+        %79:bool = load %x_254_phi
+        %x_254:bool = let %79
+        %81:vec4<f32> = load %x_253
+        store %x_256_phi, %81
+        if %x_254 [t: $B14] {  # if_6
+          $B14: {  # true
             exit_switch  # switch_1
           }
         }
@@ -149,18 +165,29 @@
         exit_switch  # switch_1
       }
     }
-    %x_256:vec4<f32> = load %x_256_phi
+    %82:vec4<f32> = load %x_256_phi
+    %x_256:vec4<f32> = let %82
     store %x_GLF_color, %x_256
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b15 {
-  %b15 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B15: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %68:void = call %main_1
-    %69:vec4<f32> = load %x_GLF_color
-    %70:main_out = construct %69
-    ret %70
+    %86:void = call %main_1
+    %87:vec4<f32> = load %x_GLF_color
+    %88:main_out = construct %87
+    ret %88
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B16: {
+    %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
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/2.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/2.spvasm.expected.ir.msl
index 8696d3b..1664f3a 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/2.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/2.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,14 +8,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %x_196:ptr<function, array<i32, 256>, read_write> = var
     %x_197:ptr<function, array<i32, 256>, read_write> = var
     %x_198:ptr<function, array<i32, 256>, read_write> = var
@@ -29,103 +29,110 @@
     %15:vec2<f32> = swizzle %14, xy
     %16:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
     %17:vec2<f32> = load %16
-    %x_203:vec2<f32> = div %15, %17
-    %19:f32 = access %x_203, 0u
-    %20:f32 = mul %19, 256.0f
-    %21:i32 = convert %20
-    %22:f32 = access %x_203, 1u
-    %23:f32 = mul %22, 256.0f
-    %24:i32 = convert %23
-    %25:vec2<i32> = construct %21, %24
-    store %x_210, %25
-    switch 0u [c: (default, %b3)] {  # switch_1
-      %b3 = block {  # case
-        %26:vec2<i32> = load %x_210
-        store %x_214, %26
-        loop [b: %b4, c: %b5] {  # loop_1
-          %b4 = block {  # body
+    %18:vec2<f32> = div %15, %17
+    %x_203:vec2<f32> = let %18
+    %20:f32 = access %x_203, 0u
+    %21:f32 = mul %20, 256.0f
+    %22:i32 = call %tint_f32_to_i32, %21
+    %24:i32 = let %22
+    %25:f32 = access %x_203, 1u
+    %26:f32 = mul %25, 256.0f
+    %27:i32 = call %tint_f32_to_i32, %26
+    %28:vec2<i32> = construct %24, %27
+    store %x_210, %28
+    switch 0u [c: (default, $B3)] {  # switch_1
+      $B3: {  # case
+        %29:vec2<i32> = load %x_210
+        store %x_214, %29
+        loop [b: $B4, c: $B5] {  # loop_1
+          $B4: {  # body
             %x_233:ptr<function, i32, read_write> = var
             %x_234:ptr<function, i32, read_write> = var
             %x_235:ptr<function, i32, read_write> = var
-            %x_217:i32 = load_vector_element %x_214, 1u
+            %33:i32 = load_vector_element %x_214, 1u
+            %x_217:i32 = let %33
             store %x_251, vec4<f32>(0.0f)
             store %x_252, false
-            %31:bool = neq %x_217, 256i
-            if %31 [t: %b6, f: %b7] {  # if_1
-              %b6 = block {  # true
+            %35:bool = neq %x_217, 256i
+            if %35 [t: $B6, f: $B7] {  # if_1
+              $B6: {  # true
                 exit_if  # if_1
               }
-              %b7 = block {  # false
+              $B7: {  # false
                 exit_loop  # loop_1
               }
             }
-            %x_221:i32 = load_vector_element %x_214, 0u
+            %36:i32 = load_vector_element %x_214, 0u
+            %x_221:i32 = let %36
             store %x_196, array<i32, 256>(115i, 133i, 150i, 164i, 176i, 184i, 190i, 192i, 191i, 187i, 181i, 172i, 163i, 153i, 143i, 134i, 126i, 120i, 116i, 114i, 114i, 117i, 121i, 127i, 134i, 141i, 148i, 154i, 159i, 162i, 163i, 161i, 157i, 151i, 143i, 134i, 124i, 113i, 103i, 94i, 87i, 82i, 79i, 80i, 84i, 91i, 101i, 114i, 130i, 146i, 164i, 182i, 199i, 215i, 229i, 240i, 249i, 254i, 256i, 254i, 250i, 243i, 233i, 223i, 212i, 200i, 190i, 180i, 172i, 166i, 163i, 161i, 162i, 164i, 169i, 174i, 179i, 185i, 190i, 193i, 195i, 195i, 192i, 188i, 180i, 171i, 161i, 149i, 137i, 125i, 114i, 105i, 97i, 93i, 91i, 93i, 98i, 106i, 117i, 130i, 145i, 161i, 177i, 193i, 208i, 221i, 231i, 239i, 243i, 244i, 242i, 236i, 228i, 218i, 207i, 194i, 181i, 169i, 158i, 148i, 141i, 135i, 132i, 131i, 132i, 135i, 138i, 143i, 147i, 151i, 154i, 155i, 155i, 152i, 146i, 139i, 129i, 118i, 106i, 93i, 80i, 68i, 58i, 49i, 43i, 40i, 41i, 44i, 51i, 61i, 73i, 87i, 103i, 119i, 134i, 149i, 162i, 173i, 181i, 186i, 188i, 186i, 181i, 174i, 164i, 153i, 141i, 128i, 116i, 104i, 94i, 86i, 81i, 77i, 76i, 77i, 80i, 84i, 89i, 94i, 98i, 102i, 104i, 104i, 102i, 98i, 92i, 83i, 73i, 62i, 50i, 38i, 26i, 16i, 8i, 2i, 0i, 0i, 4i, 11i, 21i, 33i, 48i, 64i, 81i, 98i, 114i, 129i, 141i, 151i, 158i, 161i, 161i, 158i, 152i, 144i, 134i, 123i, 112i, 100i, 90i, 81i, 73i, 68i, 65i, 65i, 67i, 70i, 75i, 81i, 87i, 92i, 97i, 101i, 103i, 102i, 100i, 95i, 88i, 79i, 69i, 58i, 47i, 36i, 26i, 18i, 13i, 11i, 11i, 15i, 22i, 32i, 45i, 60i, 77i, 94i)
-            %33:ptr<function, i32, read_write> = access %x_196, %x_217
-            %34:i32 = load %33
-            %35:i32 = add %34, 15i
-            %x_225:bool = lt %x_221, %35
-            if %x_225 [t: %b8] {  # if_2
-              %b8 = block {  # true
+            %38:ptr<function, i32, read_write> = access %x_196, %x_217
+            %39:i32 = load %38
+            %40:i32 = add %39, 15i
+            %41:bool = lt %x_221, %40
+            %x_225:bool = let %41
+            if %x_225 [t: $B8] {  # if_2
+              $B8: {  # true
                 store %x_197, array<i32, 256>(115i, 133i, 150i, 164i, 176i, 184i, 190i, 192i, 191i, 187i, 181i, 172i, 163i, 153i, 143i, 134i, 126i, 120i, 116i, 114i, 114i, 117i, 121i, 127i, 134i, 141i, 148i, 154i, 159i, 162i, 163i, 161i, 157i, 151i, 143i, 134i, 124i, 113i, 103i, 94i, 87i, 82i, 79i, 80i, 84i, 91i, 101i, 114i, 130i, 146i, 164i, 182i, 199i, 215i, 229i, 240i, 249i, 254i, 256i, 254i, 250i, 243i, 233i, 223i, 212i, 200i, 190i, 180i, 172i, 166i, 163i, 161i, 162i, 164i, 169i, 174i, 179i, 185i, 190i, 193i, 195i, 195i, 192i, 188i, 180i, 171i, 161i, 149i, 137i, 125i, 114i, 105i, 97i, 93i, 91i, 93i, 98i, 106i, 117i, 130i, 145i, 161i, 177i, 193i, 208i, 221i, 231i, 239i, 243i, 244i, 242i, 236i, 228i, 218i, 207i, 194i, 181i, 169i, 158i, 148i, 141i, 135i, 132i, 131i, 132i, 135i, 138i, 143i, 147i, 151i, 154i, 155i, 155i, 152i, 146i, 139i, 129i, 118i, 106i, 93i, 80i, 68i, 58i, 49i, 43i, 40i, 41i, 44i, 51i, 61i, 73i, 87i, 103i, 119i, 134i, 149i, 162i, 173i, 181i, 186i, 188i, 186i, 181i, 174i, 164i, 153i, 141i, 128i, 116i, 104i, 94i, 86i, 81i, 77i, 76i, 77i, 80i, 84i, 89i, 94i, 98i, 102i, 104i, 104i, 102i, 98i, 92i, 83i, 73i, 62i, 50i, 38i, 26i, 16i, 8i, 2i, 0i, 0i, 4i, 11i, 21i, 33i, 48i, 64i, 81i, 98i, 114i, 129i, 141i, 151i, 158i, 161i, 161i, 158i, 152i, 144i, 134i, 123i, 112i, 100i, 90i, 81i, 73i, 68i, 65i, 65i, 67i, 70i, 75i, 81i, 87i, 92i, 97i, 101i, 103i, 102i, 100i, 95i, 88i, 79i, 69i, 58i, 47i, 36i, 26i, 18i, 13i, 11i, 11i, 15i, 22i, 32i, 45i, 60i, 77i, 94i)
                 exit_if  # if_2
               }
             }
-            if %x_225 [t: %b9, f: %b10] {  # if_3
-              %b9 = block {  # true
-                %37:ptr<function, i32, read_write> = access %x_197, %x_217
-                %38:i32 = load %37
-                store %x_233, %38
-                %39:i32 = load %x_233
-                store %x_235, %39
+            if %x_225 [t: $B9, f: $B10] {  # if_3
+              $B9: {  # true
+                %43:ptr<function, i32, read_write> = access %x_197, %x_217
+                %44:i32 = load %43
+                store %x_233, %44
+                %45:i32 = load %x_233
+                store %x_235, %45
                 exit_if  # if_3
               }
-              %b10 = block {  # false
+              $B10: {  # false
                 store %x_234, 0i
-                %40:i32 = load %x_234
-                store %x_235, %40
+                %46:i32 = load %x_234
+                store %x_235, %46
                 exit_if  # if_3
               }
             }
-            %41:i32 = load %x_235
-            %42:i32 = sub %41, 15i
-            %43:bool = gt %x_221, %42
-            %44:bool = select %x_225, %43, %x_225
-            if %44 [t: %b11] {  # if_4
-              %b11 = block {  # true
+            %47:i32 = load %x_235
+            %48:i32 = sub %47, 15i
+            %49:bool = gt %x_221, %48
+            %50:bool = select %x_225, %49, %x_225
+            if %50 [t: $B11] {  # if_4
+              $B11: {  # true
                 store %x_198, array<i32, 256>(115i, 133i, 150i, 164i, 176i, 184i, 190i, 192i, 191i, 187i, 181i, 172i, 163i, 153i, 143i, 134i, 126i, 120i, 116i, 114i, 114i, 117i, 121i, 127i, 134i, 141i, 148i, 154i, 159i, 162i, 163i, 161i, 157i, 151i, 143i, 134i, 124i, 113i, 103i, 94i, 87i, 82i, 79i, 80i, 84i, 91i, 101i, 114i, 130i, 146i, 164i, 182i, 199i, 215i, 229i, 240i, 249i, 254i, 256i, 254i, 250i, 243i, 233i, 223i, 212i, 200i, 190i, 180i, 172i, 166i, 163i, 161i, 162i, 164i, 169i, 174i, 179i, 185i, 190i, 193i, 195i, 195i, 192i, 188i, 180i, 171i, 161i, 149i, 137i, 125i, 114i, 105i, 97i, 93i, 91i, 93i, 98i, 106i, 117i, 130i, 145i, 161i, 177i, 193i, 208i, 221i, 231i, 239i, 243i, 244i, 242i, 236i, 228i, 218i, 207i, 194i, 181i, 169i, 158i, 148i, 141i, 135i, 132i, 131i, 132i, 135i, 138i, 143i, 147i, 151i, 154i, 155i, 155i, 152i, 146i, 139i, 129i, 118i, 106i, 93i, 80i, 68i, 58i, 49i, 43i, 40i, 41i, 44i, 51i, 61i, 73i, 87i, 103i, 119i, 134i, 149i, 162i, 173i, 181i, 186i, 188i, 186i, 181i, 174i, 164i, 153i, 141i, 128i, 116i, 104i, 94i, 86i, 81i, 77i, 76i, 77i, 80i, 84i, 89i, 94i, 98i, 102i, 104i, 104i, 102i, 98i, 92i, 83i, 73i, 62i, 50i, 38i, 26i, 16i, 8i, 2i, 0i, 0i, 4i, 11i, 21i, 33i, 48i, 64i, 81i, 98i, 114i, 129i, 141i, 151i, 158i, 161i, 161i, 158i, 152i, 144i, 134i, 123i, 112i, 100i, 90i, 81i, 73i, 68i, 65i, 65i, 67i, 70i, 75i, 81i, 87i, 92i, 97i, 101i, 103i, 102i, 100i, 95i, 88i, 79i, 69i, 58i, 47i, 36i, 26i, 18i, 13i, 11i, 11i, 15i, 22i, 32i, 45i, 60i, 77i, 94i)
-                %45:ptr<function, i32, read_write> = access %x_198, %x_217
-                %46:i32 = load %45
-                %47:i32 = sub %x_221, %46
-                %48:f32 = convert %47
-                %49:f32 = abs %48
-                %50:f32 = sub 15.0f, %49
-                %x_248:f32 = mul %50, 0.06666667014360427856f
-                %52:vec4<f32> = construct %x_248, %x_248, %x_248, 1.0f
-                store %x_249, %52
-                %53:vec4<f32> = load %x_249
-                store %x_251, %53
+                %51:ptr<function, i32, read_write> = access %x_198, %x_217
+                %52:i32 = load %51
+                %53:i32 = sub %x_221, %52
+                %54:f32 = convert %53
+                %55:f32 = abs %54
+                %56:f32 = sub 15.0f, %55
+                %57:f32 = mul %56, 0.06666667014360427856f
+                %x_248:f32 = let %57
+                %59:vec4<f32> = construct %x_248, %x_248, %x_248, 1.0f
+                store %x_249, %59
+                %60:vec4<f32> = load %x_249
+                store %x_251, %60
                 store %x_252, true
                 exit_loop  # loop_1
               }
             }
-            %54:vec2<i32> = load %x_214
-            %x_215_1:ptr<function, vec2<i32>, read_write> = var, %54
-            %56:i32 = add %x_217, 1i
-            store_vector_element %x_215_1, 1u, %56
-            %x_215:vec2<i32> = load %x_215_1
-            continue %b5
+            %61:vec2<i32> = load %x_214
+            %x_215_1:ptr<function, vec2<i32>, read_write> = var, %61
+            %63:i32 = add %x_217, 1i
+            store_vector_element %x_215_1, 1u, %63
+            %64:vec2<i32> = load %x_215_1
+            %x_215:vec2<i32> = let %64
+            continue  # -> $B5
           }
-          %b5 = block {  # continuing
+          $B5: {  # continuing
             store %x_214, %x_215
-            next_iteration %b4
+            next_iteration  # -> $B4
           }
         }
-        %58:vec4<f32> = load %x_251
-        store %x_254, %58
-        %59:bool = load %x_252
-        if %59 [t: %b12] {  # if_5
-          %b12 = block {  # true
+        %66:vec4<f32> = load %x_251
+        store %x_254, %66
+        %67:bool = load %x_252
+        if %67 [t: $B12] {  # if_5
+          $B12: {  # true
             exit_switch  # switch_1
           }
         }
@@ -133,18 +140,28 @@
         exit_switch  # switch_1
       }
     }
-    %60:vec4<f32> = load %x_254
-    store %x_GLF_color, %60
+    %68:vec4<f32> = load %x_254
+    store %x_GLF_color, %68
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b13 {
-  %b13 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B13: {
     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
+    %71:void = call %main_1
+    %72:vec4<f32> = load %x_GLF_color
+    %73:main_out = construct %72
+    ret %73
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B14: {
+    %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
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/2.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/2.wgsl.expected.ir.msl
index 63e701d..c95c30d 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/2.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/2.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,14 +8,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %x_196:ptr<function, array<i32, 256>, read_write> = var
     %x_197:ptr<function, array<i32, 256>, read_write> = var
     %x_198:ptr<function, array<i32, 256>, read_write> = var
@@ -26,111 +26,126 @@
     %x_251_phi:ptr<function, vec4<f32>, read_write> = var
     %x_252_phi:ptr<function, bool, read_write> = var
     %x_254_phi:ptr<function, vec4<f32>, read_write> = var
-    %x_199:vec4<f32> = load %gl_FragCoord
-    %16:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %x_202:vec2<f32> = load %16
-    %18:f32 = access %x_199, 0u
-    %19:f32 = access %x_199, 1u
-    %20:vec2<f32> = construct %18, %19
-    %x_203:vec2<f32> = div %20, %x_202
-    %22:f32 = access %x_203, 0u
-    %23:f32 = mul %22, 256.0f
-    %24:i32 = convert %23
-    %25:f32 = access %x_203, 1u
+    %15:vec4<f32> = load %gl_FragCoord
+    %x_199:vec4<f32> = let %15
+    %17:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
+    %18:vec2<f32> = load %17
+    %x_202:vec2<f32> = let %18
+    %20:f32 = access %x_199, 0u
+    %21:f32 = access %x_199, 1u
+    %22:vec2<f32> = construct %20, %21
+    %23:vec2<f32> = div %22, %x_202
+    %x_203:vec2<f32> = let %23
+    %25:f32 = access %x_203, 0u
     %26:f32 = mul %25, 256.0f
-    %27:i32 = convert %26
-    %28:vec2<i32> = construct %24, %27
-    store %x_210, %28
-    switch 0u [c: (default, %b3)] {  # switch_1
-      %b3 = block {  # case
-        %29:vec2<i32> = load %x_210
-        store %x_214_phi, %29
-        loop [b: %b4, c: %b5] {  # loop_1
-          %b4 = block {  # body
+    %27:i32 = call %tint_f32_to_i32, %26
+    %29:i32 = let %27
+    %30:f32 = access %x_203, 1u
+    %31:f32 = mul %30, 256.0f
+    %32:i32 = call %tint_f32_to_i32, %31
+    %33:vec2<i32> = construct %29, %32
+    store %x_210, %33
+    switch 0u [c: (default, $B3)] {  # switch_1
+      $B3: {  # case
+        %34:vec2<i32> = load %x_210
+        store %x_214_phi, %34
+        loop [b: $B4, c: $B5] {  # loop_1
+          $B4: {  # body
             %x_233:ptr<function, i32, read_write> = var
             %x_234:ptr<function, i32, read_write> = var
             %x_235_phi:ptr<function, i32, read_write> = var
-            %x_214:vec2<i32> = load %x_214_phi
-            %x_217:i32 = access %x_214, 1u
+            %38:vec2<i32> = load %x_214_phi
+            %x_214:vec2<i32> = let %38
+            %40:i32 = access %x_214, 1u
+            %x_217:i32 = let %40
             store %x_251_phi, vec4<f32>(0.0f)
             store %x_252_phi, false
-            %35:bool = neq %x_217, 256i
-            if %35 [t: %b6, f: %b7] {  # if_1
-              %b6 = block {  # true
+            %42:bool = neq %x_217, 256i
+            if %42 [t: $B6, f: $B7] {  # if_1
+              $B6: {  # true
                 exit_if  # if_1
               }
-              %b7 = block {  # false
+              $B7: {  # false
                 exit_loop  # loop_1
               }
             }
-            %x_221:i32 = access %x_214, 0u
+            %43:i32 = access %x_214, 0u
+            %x_221:i32 = let %43
             store %x_196, array<i32, 256>(115i, 133i, 150i, 164i, 176i, 184i, 190i, 192i, 191i, 187i, 181i, 172i, 163i, 153i, 143i, 134i, 126i, 120i, 116i, 114i, 114i, 117i, 121i, 127i, 134i, 141i, 148i, 154i, 159i, 162i, 163i, 161i, 157i, 151i, 143i, 134i, 124i, 113i, 103i, 94i, 87i, 82i, 79i, 80i, 84i, 91i, 101i, 114i, 130i, 146i, 164i, 182i, 199i, 215i, 229i, 240i, 249i, 254i, 256i, 254i, 250i, 243i, 233i, 223i, 212i, 200i, 190i, 180i, 172i, 166i, 163i, 161i, 162i, 164i, 169i, 174i, 179i, 185i, 190i, 193i, 195i, 195i, 192i, 188i, 180i, 171i, 161i, 149i, 137i, 125i, 114i, 105i, 97i, 93i, 91i, 93i, 98i, 106i, 117i, 130i, 145i, 161i, 177i, 193i, 208i, 221i, 231i, 239i, 243i, 244i, 242i, 236i, 228i, 218i, 207i, 194i, 181i, 169i, 158i, 148i, 141i, 135i, 132i, 131i, 132i, 135i, 138i, 143i, 147i, 151i, 154i, 155i, 155i, 152i, 146i, 139i, 129i, 118i, 106i, 93i, 80i, 68i, 58i, 49i, 43i, 40i, 41i, 44i, 51i, 61i, 73i, 87i, 103i, 119i, 134i, 149i, 162i, 173i, 181i, 186i, 188i, 186i, 181i, 174i, 164i, 153i, 141i, 128i, 116i, 104i, 94i, 86i, 81i, 77i, 76i, 77i, 80i, 84i, 89i, 94i, 98i, 102i, 104i, 104i, 102i, 98i, 92i, 83i, 73i, 62i, 50i, 38i, 26i, 16i, 8i, 2i, 0i, 0i, 4i, 11i, 21i, 33i, 48i, 64i, 81i, 98i, 114i, 129i, 141i, 151i, 158i, 161i, 161i, 158i, 152i, 144i, 134i, 123i, 112i, 100i, 90i, 81i, 73i, 68i, 65i, 65i, 67i, 70i, 75i, 81i, 87i, 92i, 97i, 101i, 103i, 102i, 100i, 95i, 88i, 79i, 69i, 58i, 47i, 36i, 26i, 18i, 13i, 11i, 11i, 15i, 22i, 32i, 45i, 60i, 77i, 94i)
-            %37:ptr<function, i32, read_write> = access %x_196, %x_217
-            %x_223:i32 = load %37
-            %39:i32 = add %x_223, 15i
-            %x_225:bool = lt %x_221, %39
-            if %x_225 [t: %b8] {  # if_2
-              %b8 = block {  # true
+            %45:ptr<function, i32, read_write> = access %x_196, %x_217
+            %46:i32 = load %45
+            %x_223:i32 = let %46
+            %48:i32 = add %x_223, 15i
+            %49:bool = lt %x_221, %48
+            %x_225:bool = let %49
+            if %x_225 [t: $B8] {  # if_2
+              $B8: {  # true
                 store %x_197, array<i32, 256>(115i, 133i, 150i, 164i, 176i, 184i, 190i, 192i, 191i, 187i, 181i, 172i, 163i, 153i, 143i, 134i, 126i, 120i, 116i, 114i, 114i, 117i, 121i, 127i, 134i, 141i, 148i, 154i, 159i, 162i, 163i, 161i, 157i, 151i, 143i, 134i, 124i, 113i, 103i, 94i, 87i, 82i, 79i, 80i, 84i, 91i, 101i, 114i, 130i, 146i, 164i, 182i, 199i, 215i, 229i, 240i, 249i, 254i, 256i, 254i, 250i, 243i, 233i, 223i, 212i, 200i, 190i, 180i, 172i, 166i, 163i, 161i, 162i, 164i, 169i, 174i, 179i, 185i, 190i, 193i, 195i, 195i, 192i, 188i, 180i, 171i, 161i, 149i, 137i, 125i, 114i, 105i, 97i, 93i, 91i, 93i, 98i, 106i, 117i, 130i, 145i, 161i, 177i, 193i, 208i, 221i, 231i, 239i, 243i, 244i, 242i, 236i, 228i, 218i, 207i, 194i, 181i, 169i, 158i, 148i, 141i, 135i, 132i, 131i, 132i, 135i, 138i, 143i, 147i, 151i, 154i, 155i, 155i, 152i, 146i, 139i, 129i, 118i, 106i, 93i, 80i, 68i, 58i, 49i, 43i, 40i, 41i, 44i, 51i, 61i, 73i, 87i, 103i, 119i, 134i, 149i, 162i, 173i, 181i, 186i, 188i, 186i, 181i, 174i, 164i, 153i, 141i, 128i, 116i, 104i, 94i, 86i, 81i, 77i, 76i, 77i, 80i, 84i, 89i, 94i, 98i, 102i, 104i, 104i, 102i, 98i, 92i, 83i, 73i, 62i, 50i, 38i, 26i, 16i, 8i, 2i, 0i, 0i, 4i, 11i, 21i, 33i, 48i, 64i, 81i, 98i, 114i, 129i, 141i, 151i, 158i, 161i, 161i, 158i, 152i, 144i, 134i, 123i, 112i, 100i, 90i, 81i, 73i, 68i, 65i, 65i, 67i, 70i, 75i, 81i, 87i, 92i, 97i, 101i, 103i, 102i, 100i, 95i, 88i, 79i, 69i, 58i, 47i, 36i, 26i, 18i, 13i, 11i, 11i, 15i, 22i, 32i, 45i, 60i, 77i, 94i)
                 exit_if  # if_2
               }
             }
-            if %x_225 [t: %b9, f: %b10] {  # if_3
-              %b9 = block {  # true
-                %41:ptr<function, i32, read_write> = access %x_197, %x_217
-                %42:i32 = load %41
-                store %x_233, %42
-                %43:i32 = load %x_233
-                store %x_235_phi, %43
+            if %x_225 [t: $B9, f: $B10] {  # if_3
+              $B9: {  # true
+                %51:ptr<function, i32, read_write> = access %x_197, %x_217
+                %52:i32 = load %51
+                store %x_233, %52
+                %53:i32 = load %x_233
+                store %x_235_phi, %53
                 exit_if  # if_3
               }
-              %b10 = block {  # false
+              $B10: {  # false
                 store %x_234, 0i
-                %44:i32 = load %x_234
-                store %x_235_phi, %44
+                %54:i32 = load %x_234
+                store %x_235_phi, %54
                 exit_if  # if_3
               }
             }
-            %x_235:i32 = load %x_235_phi
-            %46:i32 = sub %x_235, 15i
-            %x_237:bool = gt %x_221, %46
-            %48:bool = select %x_225, %x_237, %x_225
-            if %48 [t: %b11] {  # if_4
-              %b11 = block {  # true
+            %55:i32 = load %x_235_phi
+            %x_235:i32 = let %55
+            %57:i32 = sub %x_235, 15i
+            %58:bool = gt %x_221, %57
+            %x_237:bool = let %58
+            %60:bool = select %x_225, %x_237, %x_225
+            if %60 [t: $B11] {  # if_4
+              $B11: {  # true
                 store %x_198, array<i32, 256>(115i, 133i, 150i, 164i, 176i, 184i, 190i, 192i, 191i, 187i, 181i, 172i, 163i, 153i, 143i, 134i, 126i, 120i, 116i, 114i, 114i, 117i, 121i, 127i, 134i, 141i, 148i, 154i, 159i, 162i, 163i, 161i, 157i, 151i, 143i, 134i, 124i, 113i, 103i, 94i, 87i, 82i, 79i, 80i, 84i, 91i, 101i, 114i, 130i, 146i, 164i, 182i, 199i, 215i, 229i, 240i, 249i, 254i, 256i, 254i, 250i, 243i, 233i, 223i, 212i, 200i, 190i, 180i, 172i, 166i, 163i, 161i, 162i, 164i, 169i, 174i, 179i, 185i, 190i, 193i, 195i, 195i, 192i, 188i, 180i, 171i, 161i, 149i, 137i, 125i, 114i, 105i, 97i, 93i, 91i, 93i, 98i, 106i, 117i, 130i, 145i, 161i, 177i, 193i, 208i, 221i, 231i, 239i, 243i, 244i, 242i, 236i, 228i, 218i, 207i, 194i, 181i, 169i, 158i, 148i, 141i, 135i, 132i, 131i, 132i, 135i, 138i, 143i, 147i, 151i, 154i, 155i, 155i, 152i, 146i, 139i, 129i, 118i, 106i, 93i, 80i, 68i, 58i, 49i, 43i, 40i, 41i, 44i, 51i, 61i, 73i, 87i, 103i, 119i, 134i, 149i, 162i, 173i, 181i, 186i, 188i, 186i, 181i, 174i, 164i, 153i, 141i, 128i, 116i, 104i, 94i, 86i, 81i, 77i, 76i, 77i, 80i, 84i, 89i, 94i, 98i, 102i, 104i, 104i, 102i, 98i, 92i, 83i, 73i, 62i, 50i, 38i, 26i, 16i, 8i, 2i, 0i, 0i, 4i, 11i, 21i, 33i, 48i, 64i, 81i, 98i, 114i, 129i, 141i, 151i, 158i, 161i, 161i, 158i, 152i, 144i, 134i, 123i, 112i, 100i, 90i, 81i, 73i, 68i, 65i, 65i, 67i, 70i, 75i, 81i, 87i, 92i, 97i, 101i, 103i, 102i, 100i, 95i, 88i, 79i, 69i, 58i, 47i, 36i, 26i, 18i, 13i, 11i, 11i, 15i, 22i, 32i, 45i, 60i, 77i, 94i)
-                %49:ptr<function, i32, read_write> = access %x_198, %x_217
-                %x_243:i32 = load %49
-                %51:i32 = sub %x_221, %x_243
-                %52:f32 = convert %51
-                %53:f32 = abs %52
-                %54:f32 = sub 15.0f, %53
-                %x_248:f32 = mul %54, 0.06666667014360427856f
-                %56:vec4<f32> = construct %x_248, %x_248, %x_248, 1.0f
-                store %x_249, %56
-                %57:vec4<f32> = load %x_249
-                store %x_251_phi, %57
+                %61:ptr<function, i32, read_write> = access %x_198, %x_217
+                %62:i32 = load %61
+                %x_243:i32 = let %62
+                %64:i32 = sub %x_221, %x_243
+                %65:f32 = convert %64
+                %66:f32 = abs %65
+                %67:f32 = sub 15.0f, %66
+                %68:f32 = mul %67, 0.06666667014360427856f
+                %x_248:f32 = let %68
+                %70:vec4<f32> = construct %x_248, %x_248, %x_248, 1.0f
+                store %x_249, %70
+                %71:vec4<f32> = load %x_249
+                store %x_251_phi, %71
                 store %x_252_phi, true
                 exit_loop  # loop_1
               }
             }
             %x_215_1:ptr<function, vec2<i32>, read_write> = var, %x_214
-            %59:i32 = add %x_217, 1i
-            store_vector_element %x_215_1, 1u, %59
-            %x_215:vec2<i32> = load %x_215_1
-            continue %b5
+            %73:i32 = add %x_217, 1i
+            store_vector_element %x_215_1, 1u, %73
+            %74:vec2<i32> = load %x_215_1
+            %x_215:vec2<i32> = let %74
+            continue  # -> $B5
           }
-          %b5 = block {  # continuing
+          $B5: {  # continuing
             store %x_214_phi, %x_215
-            next_iteration %b4
+            next_iteration  # -> $B4
           }
         }
-        %61:vec4<f32> = load %x_251_phi
-        store %x_251, %61
-        %x_252:bool = load %x_252_phi
-        %63:vec4<f32> = load %x_251
-        store %x_254_phi, %63
-        if %x_252 [t: %b12] {  # if_5
-          %b12 = block {  # true
+        %76:vec4<f32> = load %x_251_phi
+        store %x_251, %76
+        %77:bool = load %x_252_phi
+        %x_252:bool = let %77
+        %79:vec4<f32> = load %x_251
+        store %x_254_phi, %79
+        if %x_252 [t: $B12] {  # if_5
+          $B12: {  # true
             exit_switch  # switch_1
           }
         }
@@ -138,18 +153,29 @@
         exit_switch  # switch_1
       }
     }
-    %x_254:vec4<f32> = load %x_254_phi
+    %80:vec4<f32> = load %x_254_phi
+    %x_254:vec4<f32> = let %80
     store %x_GLF_color, %x_254
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b13 {
-  %b13 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B13: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %67:void = call %main_1
-    %68:vec4<f32> = load %x_GLF_color
-    %69:main_out = construct %68
-    ret %69
+    %84:void = call %main_1
+    %85:vec4<f32> = load %x_GLF_color
+    %86:main_out = construct %85
+    ret %86
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B14: {
+    %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
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/0.spvasm.expected.ir.msl
index b31089a..f300289 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,121 +8,143 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_13:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%trace_vi2_ = func(%pos:ptr<function, vec2<i32>, read_write>):vec4<f32> -> %b2 {
-  %b2 = block {
+%trace_vi2_ = func(%pos:ptr<function, vec2<i32>, read_write>):vec4<f32> {
+  $B2: {
     %indexable:ptr<function, array<i32, 256>, read_write> = var
     %indexable_1:ptr<function, array<i32, 256>, read_write> = var
     %p:ptr<function, f32, read_write> = var
     %indexable_2:ptr<function, array<i32, 256>, read_write> = var
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %x_247:ptr<function, bool, read_write> = var
         %x_248:ptr<function, bool, read_write> = var
         %12:i32 = load_vector_element %pos, 1u
         %13:bool = neq %12, 256i
-        if %13 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %13 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_231:i32 = load_vector_element %pos, 0u
-        %x_233:i32 = load_vector_element %pos, 1u
+        %14:i32 = load_vector_element %pos, 0u
+        %x_231:i32 = let %14
+        %16:i32 = load_vector_element %pos, 1u
+        %x_233:i32 = let %16
         store %indexable, array<i32, 256>(115i, 133i, 150i, 164i, 176i, 184i, 190i, 192i, 191i, 187i, 181i, 172i, 163i, 153i, 143i, 134i, 126i, 120i, 116i, 114i, 114i, 117i, 121i, 127i, 134i, 141i, 148i, 154i, 159i, 162i, 163i, 161i, 157i, 151i, 143i, 134i, 124i, 113i, 103i, 94i, 87i, 82i, 79i, 80i, 84i, 91i, 101i, 114i, 130i, 146i, 164i, 182i, 199i, 215i, 229i, 240i, 249i, 254i, 256i, 254i, 250i, 243i, 233i, 223i, 212i, 200i, 190i, 180i, 172i, 166i, 163i, 161i, 162i, 164i, 169i, 174i, 179i, 185i, 190i, 193i, 195i, 195i, 192i, 188i, 180i, 171i, 161i, 149i, 137i, 125i, 114i, 105i, 97i, 93i, 91i, 93i, 98i, 106i, 117i, 130i, 145i, 161i, 177i, 193i, 208i, 221i, 231i, 239i, 243i, 244i, 242i, 236i, 228i, 218i, 207i, 194i, 181i, 169i, 158i, 148i, 141i, 135i, 132i, 131i, 132i, 135i, 138i, 143i, 147i, 151i, 154i, 155i, 155i, 152i, 146i, 139i, 129i, 118i, 106i, 93i, 80i, 68i, 58i, 49i, 43i, 40i, 41i, 44i, 51i, 61i, 73i, 87i, 103i, 119i, 134i, 149i, 162i, 173i, 181i, 186i, 188i, 186i, 181i, 174i, 164i, 153i, 141i, 128i, 116i, 104i, 94i, 86i, 81i, 77i, 76i, 77i, 80i, 84i, 89i, 94i, 98i, 102i, 104i, 104i, 102i, 98i, 92i, 83i, 73i, 62i, 50i, 38i, 26i, 16i, 8i, 2i, 0i, 0i, 4i, 11i, 21i, 33i, 48i, 64i, 81i, 98i, 114i, 129i, 141i, 151i, 158i, 161i, 161i, 158i, 152i, 144i, 134i, 123i, 112i, 100i, 90i, 81i, 73i, 68i, 65i, 65i, 67i, 70i, 75i, 81i, 87i, 92i, 97i, 101i, 103i, 102i, 100i, 95i, 88i, 79i, 69i, 58i, 47i, 36i, 26i, 18i, 13i, 11i, 11i, 15i, 22i, 32i, 45i, 60i, 77i, 94i)
-        %16:ptr<function, i32, read_write> = access %indexable, %x_233
-        %17:i32 = load %16
-        %18:i32 = add %17, 15i
-        %x_237:bool = lt %x_231, %18
+        %18:ptr<function, i32, read_write> = access %indexable, %x_233
+        %19:i32 = load %18
+        %20:i32 = add %19, 15i
+        %21:bool = lt %x_231, %20
+        %x_237:bool = let %21
         store %x_248, %x_237
-        if %x_237 [t: %b7] {  # if_2
-          %b7 = block {  # true
-            %x_241:i32 = load_vector_element %pos, 0u
-            %x_243:i32 = load_vector_element %pos, 1u
+        if %x_237 [t: $B7] {  # if_2
+          $B7: {  # true
+            %23:i32 = load_vector_element %pos, 0u
+            %x_241:i32 = let %23
+            %25:i32 = load_vector_element %pos, 1u
+            %x_243:i32 = let %25
             store %indexable_1, array<i32, 256>(115i, 133i, 150i, 164i, 176i, 184i, 190i, 192i, 191i, 187i, 181i, 172i, 163i, 153i, 143i, 134i, 126i, 120i, 116i, 114i, 114i, 117i, 121i, 127i, 134i, 141i, 148i, 154i, 159i, 162i, 163i, 161i, 157i, 151i, 143i, 134i, 124i, 113i, 103i, 94i, 87i, 82i, 79i, 80i, 84i, 91i, 101i, 114i, 130i, 146i, 164i, 182i, 199i, 215i, 229i, 240i, 249i, 254i, 256i, 254i, 250i, 243i, 233i, 223i, 212i, 200i, 190i, 180i, 172i, 166i, 163i, 161i, 162i, 164i, 169i, 174i, 179i, 185i, 190i, 193i, 195i, 195i, 192i, 188i, 180i, 171i, 161i, 149i, 137i, 125i, 114i, 105i, 97i, 93i, 91i, 93i, 98i, 106i, 117i, 130i, 145i, 161i, 177i, 193i, 208i, 221i, 231i, 239i, 243i, 244i, 242i, 236i, 228i, 218i, 207i, 194i, 181i, 169i, 158i, 148i, 141i, 135i, 132i, 131i, 132i, 135i, 138i, 143i, 147i, 151i, 154i, 155i, 155i, 152i, 146i, 139i, 129i, 118i, 106i, 93i, 80i, 68i, 58i, 49i, 43i, 40i, 41i, 44i, 51i, 61i, 73i, 87i, 103i, 119i, 134i, 149i, 162i, 173i, 181i, 186i, 188i, 186i, 181i, 174i, 164i, 153i, 141i, 128i, 116i, 104i, 94i, 86i, 81i, 77i, 76i, 77i, 80i, 84i, 89i, 94i, 98i, 102i, 104i, 104i, 102i, 98i, 92i, 83i, 73i, 62i, 50i, 38i, 26i, 16i, 8i, 2i, 0i, 0i, 4i, 11i, 21i, 33i, 48i, 64i, 81i, 98i, 114i, 129i, 141i, 151i, 158i, 161i, 161i, 158i, 152i, 144i, 134i, 123i, 112i, 100i, 90i, 81i, 73i, 68i, 65i, 65i, 67i, 70i, 75i, 81i, 87i, 92i, 97i, 101i, 103i, 102i, 100i, 95i, 88i, 79i, 69i, 58i, 47i, 36i, 26i, 18i, 13i, 11i, 11i, 15i, 22i, 32i, 45i, 60i, 77i, 94i)
-            %22:ptr<function, i32, read_write> = access %indexable_1, %x_243
-            %23:i32 = load %22
-            %24:i32 = sub %23, 15i
-            %25:bool = gt %x_241, %24
-            store %x_247, %25
-            %26:bool = load %x_247
-            store %x_248, %26
+            %27:ptr<function, i32, read_write> = access %indexable_1, %x_243
+            %28:i32 = load %27
+            %29:i32 = sub %28, 15i
+            %30:bool = gt %x_241, %29
+            store %x_247, %30
+            %31:bool = load %x_247
+            store %x_248, %31
             exit_if  # if_2
           }
         }
-        %27:bool = load %x_248
-        if %27 [t: %b8] {  # if_3
-          %b8 = block {  # true
-            %x_252:i32 = load_vector_element %pos, 0u
-            %x_254:i32 = load_vector_element %pos, 1u
+        %32:bool = load %x_248
+        if %32 [t: $B8] {  # if_3
+          $B8: {  # true
+            %33:i32 = load_vector_element %pos, 0u
+            %x_252:i32 = let %33
+            %35:i32 = load_vector_element %pos, 1u
+            %x_254:i32 = let %35
             store %indexable_2, array<i32, 256>(115i, 133i, 150i, 164i, 176i, 184i, 190i, 192i, 191i, 187i, 181i, 172i, 163i, 153i, 143i, 134i, 126i, 120i, 116i, 114i, 114i, 117i, 121i, 127i, 134i, 141i, 148i, 154i, 159i, 162i, 163i, 161i, 157i, 151i, 143i, 134i, 124i, 113i, 103i, 94i, 87i, 82i, 79i, 80i, 84i, 91i, 101i, 114i, 130i, 146i, 164i, 182i, 199i, 215i, 229i, 240i, 249i, 254i, 256i, 254i, 250i, 243i, 233i, 223i, 212i, 200i, 190i, 180i, 172i, 166i, 163i, 161i, 162i, 164i, 169i, 174i, 179i, 185i, 190i, 193i, 195i, 195i, 192i, 188i, 180i, 171i, 161i, 149i, 137i, 125i, 114i, 105i, 97i, 93i, 91i, 93i, 98i, 106i, 117i, 130i, 145i, 161i, 177i, 193i, 208i, 221i, 231i, 239i, 243i, 244i, 242i, 236i, 228i, 218i, 207i, 194i, 181i, 169i, 158i, 148i, 141i, 135i, 132i, 131i, 132i, 135i, 138i, 143i, 147i, 151i, 154i, 155i, 155i, 152i, 146i, 139i, 129i, 118i, 106i, 93i, 80i, 68i, 58i, 49i, 43i, 40i, 41i, 44i, 51i, 61i, 73i, 87i, 103i, 119i, 134i, 149i, 162i, 173i, 181i, 186i, 188i, 186i, 181i, 174i, 164i, 153i, 141i, 128i, 116i, 104i, 94i, 86i, 81i, 77i, 76i, 77i, 80i, 84i, 89i, 94i, 98i, 102i, 104i, 104i, 102i, 98i, 92i, 83i, 73i, 62i, 50i, 38i, 26i, 16i, 8i, 2i, 0i, 0i, 4i, 11i, 21i, 33i, 48i, 64i, 81i, 98i, 114i, 129i, 141i, 151i, 158i, 161i, 161i, 158i, 152i, 144i, 134i, 123i, 112i, 100i, 90i, 81i, 73i, 68i, 65i, 65i, 67i, 70i, 75i, 81i, 87i, 92i, 97i, 101i, 103i, 102i, 100i, 95i, 88i, 79i, 69i, 58i, 47i, 36i, 26i, 18i, 13i, 11i, 11i, 15i, 22i, 32i, 45i, 60i, 77i, 94i)
-            %30:ptr<function, i32, read_write> = access %indexable_2, %x_254
-            %31:i32 = load %30
-            %32:i32 = sub %x_252, %31
-            %33:f32 = convert %32
-            %34:f32 = abs %33
-            %35:f32 = sub 15.0f, %34
-            %36:f32 = div %35, 15.0f
-            store %p, %36
-            %x_262:f32 = load %p
-            %x_263:f32 = load %p
-            %x_264:f32 = load %p
-            %40:vec4<f32> = construct %x_262, %x_263, %x_264, 1.0f
-            ret %40
+            %37:ptr<function, i32, read_write> = access %indexable_2, %x_254
+            %38:i32 = load %37
+            %39:i32 = sub %x_252, %38
+            %40:f32 = convert %39
+            %41:f32 = abs %40
+            %42:f32 = sub 15.0f, %41
+            %43:f32 = div %42, 15.0f
+            store %p, %43
+            %44:f32 = load %p
+            %x_262:f32 = let %44
+            %46:f32 = load %p
+            %x_263:f32 = let %46
+            %48:f32 = load %p
+            %x_264:f32 = let %48
+            %50:vec4<f32> = construct %x_262, %x_263, %x_264, 1.0f
+            ret %50
           }
         }
-        %41:i32 = load_vector_element %pos, 1u
-        %42:i32 = add %41, 1i
-        store_vector_element %pos, 1u, %42
-        continue %b4
+        %51:i32 = load_vector_element %pos, 1u
+        %52:i32 = add %51, 1i
+        store_vector_element %pos, 1u, %52
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
     ret vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f)
   }
 }
-%main_1 = func():void -> %b9 {
-  %b9 = block {
+%main_1 = func():void {
+  $B9: {
     %pos_1:ptr<function, vec2<f32>, read_write> = var
     %ipos:ptr<function, vec2<i32>, read_write> = var
     %param:ptr<function, vec2<i32>, read_write> = var
-    %47:vec4<f32> = load %gl_FragCoord
-    %48:vec2<f32> = swizzle %47, xy
-    %49:ptr<uniform, vec2<f32>, read> = access %x_13, 0u
-    %50:vec2<f32> = load %49
-    %51:vec2<f32> = div %48, %50
-    store %pos_1, %51
-    %52:f32 = load_vector_element %pos_1, 0u
-    %53:f32 = mul %52, 256.0f
-    %54:i32 = convert %53
-    %55:f32 = load_vector_element %pos_1, 1u
-    %56:f32 = mul %55, 256.0f
-    %57:i32 = convert %56
-    %58:vec2<i32> = construct %54, %57
-    store %ipos, %58
-    %59:vec2<i32> = load %ipos
-    store %param, %59
-    %x_220:vec4<f32> = call %trace_vi2_, %param
+    %57:vec4<f32> = load %gl_FragCoord
+    %58:vec2<f32> = swizzle %57, xy
+    %59:ptr<uniform, vec2<f32>, read> = access %x_13, 0u
+    %60:vec2<f32> = load %59
+    %61:vec2<f32> = div %58, %60
+    store %pos_1, %61
+    %62:f32 = load_vector_element %pos_1, 0u
+    %63:f32 = mul %62, 256.0f
+    %64:i32 = call %tint_f32_to_i32, %63
+    %66:i32 = let %64
+    %67:f32 = load_vector_element %pos_1, 1u
+    %68:f32 = mul %67, 256.0f
+    %69:i32 = call %tint_f32_to_i32, %68
+    %70:vec2<i32> = construct %66, %69
+    store %ipos, %70
+    %71:vec2<i32> = load %ipos
+    store %param, %71
+    %72:vec4<f32> = call %trace_vi2_, %param
+    %x_220:vec4<f32> = let %72
     store %x_GLF_color, %x_220
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b10 {
-  %b10 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B10: {
     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
+    %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 {
+  $B11: {
+    %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
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/0.wgsl.expected.ir.msl
index 4eb6774..0a5f7bb 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/0.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,123 +8,156 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_13:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%trace_vi2_ = func(%pos:ptr<function, vec2<i32>, read_write>):vec4<f32> -> %b2 {
-  %b2 = block {
+%trace_vi2_ = func(%pos:ptr<function, vec2<i32>, read_write>):vec4<f32> {
+  $B2: {
     %indexable:ptr<function, array<i32, 256>, read_write> = var
     %indexable_1:ptr<function, array<i32, 256>, read_write> = var
     %p:ptr<function, f32, read_write> = var
     %indexable_2:ptr<function, array<i32, 256>, read_write> = var
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %x_247:ptr<function, bool, read_write> = var
         %x_248_phi:ptr<function, bool, read_write> = var
-        %x_227:i32 = load_vector_element %pos, 1u
-        %13:bool = neq %x_227, 256i
-        if %13 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %12:i32 = load_vector_element %pos, 1u
+        %x_227:i32 = let %12
+        %14:bool = neq %x_227, 256i
+        if %14 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_231:i32 = load_vector_element %pos, 0u
-        %x_233:i32 = load_vector_element %pos, 1u
+        %15:i32 = load_vector_element %pos, 0u
+        %x_231:i32 = let %15
+        %17:i32 = load_vector_element %pos, 1u
+        %x_233:i32 = let %17
         store %indexable, array<i32, 256>(115i, 133i, 150i, 164i, 176i, 184i, 190i, 192i, 191i, 187i, 181i, 172i, 163i, 153i, 143i, 134i, 126i, 120i, 116i, 114i, 114i, 117i, 121i, 127i, 134i, 141i, 148i, 154i, 159i, 162i, 163i, 161i, 157i, 151i, 143i, 134i, 124i, 113i, 103i, 94i, 87i, 82i, 79i, 80i, 84i, 91i, 101i, 114i, 130i, 146i, 164i, 182i, 199i, 215i, 229i, 240i, 249i, 254i, 256i, 254i, 250i, 243i, 233i, 223i, 212i, 200i, 190i, 180i, 172i, 166i, 163i, 161i, 162i, 164i, 169i, 174i, 179i, 185i, 190i, 193i, 195i, 195i, 192i, 188i, 180i, 171i, 161i, 149i, 137i, 125i, 114i, 105i, 97i, 93i, 91i, 93i, 98i, 106i, 117i, 130i, 145i, 161i, 177i, 193i, 208i, 221i, 231i, 239i, 243i, 244i, 242i, 236i, 228i, 218i, 207i, 194i, 181i, 169i, 158i, 148i, 141i, 135i, 132i, 131i, 132i, 135i, 138i, 143i, 147i, 151i, 154i, 155i, 155i, 152i, 146i, 139i, 129i, 118i, 106i, 93i, 80i, 68i, 58i, 49i, 43i, 40i, 41i, 44i, 51i, 61i, 73i, 87i, 103i, 119i, 134i, 149i, 162i, 173i, 181i, 186i, 188i, 186i, 181i, 174i, 164i, 153i, 141i, 128i, 116i, 104i, 94i, 86i, 81i, 77i, 76i, 77i, 80i, 84i, 89i, 94i, 98i, 102i, 104i, 104i, 102i, 98i, 92i, 83i, 73i, 62i, 50i, 38i, 26i, 16i, 8i, 2i, 0i, 0i, 4i, 11i, 21i, 33i, 48i, 64i, 81i, 98i, 114i, 129i, 141i, 151i, 158i, 161i, 161i, 158i, 152i, 144i, 134i, 123i, 112i, 100i, 90i, 81i, 73i, 68i, 65i, 65i, 67i, 70i, 75i, 81i, 87i, 92i, 97i, 101i, 103i, 102i, 100i, 95i, 88i, 79i, 69i, 58i, 47i, 36i, 26i, 18i, 13i, 11i, 11i, 15i, 22i, 32i, 45i, 60i, 77i, 94i)
-        %16:ptr<function, i32, read_write> = access %indexable, %x_233
-        %x_235:i32 = load %16
-        %18:i32 = add %x_235, 15i
-        %x_237:bool = lt %x_231, %18
+        %19:ptr<function, i32, read_write> = access %indexable, %x_233
+        %20:i32 = load %19
+        %x_235:i32 = let %20
+        %22:i32 = add %x_235, 15i
+        %23:bool = lt %x_231, %22
+        %x_237:bool = let %23
         store %x_248_phi, %x_237
-        if %x_237 [t: %b7] {  # if_2
-          %b7 = block {  # true
-            %x_241:i32 = load_vector_element %pos, 0u
-            %x_243:i32 = load_vector_element %pos, 1u
+        if %x_237 [t: $B7] {  # if_2
+          $B7: {  # true
+            %25:i32 = load_vector_element %pos, 0u
+            %x_241:i32 = let %25
+            %27:i32 = load_vector_element %pos, 1u
+            %x_243:i32 = let %27
             store %indexable_1, array<i32, 256>(115i, 133i, 150i, 164i, 176i, 184i, 190i, 192i, 191i, 187i, 181i, 172i, 163i, 153i, 143i, 134i, 126i, 120i, 116i, 114i, 114i, 117i, 121i, 127i, 134i, 141i, 148i, 154i, 159i, 162i, 163i, 161i, 157i, 151i, 143i, 134i, 124i, 113i, 103i, 94i, 87i, 82i, 79i, 80i, 84i, 91i, 101i, 114i, 130i, 146i, 164i, 182i, 199i, 215i, 229i, 240i, 249i, 254i, 256i, 254i, 250i, 243i, 233i, 223i, 212i, 200i, 190i, 180i, 172i, 166i, 163i, 161i, 162i, 164i, 169i, 174i, 179i, 185i, 190i, 193i, 195i, 195i, 192i, 188i, 180i, 171i, 161i, 149i, 137i, 125i, 114i, 105i, 97i, 93i, 91i, 93i, 98i, 106i, 117i, 130i, 145i, 161i, 177i, 193i, 208i, 221i, 231i, 239i, 243i, 244i, 242i, 236i, 228i, 218i, 207i, 194i, 181i, 169i, 158i, 148i, 141i, 135i, 132i, 131i, 132i, 135i, 138i, 143i, 147i, 151i, 154i, 155i, 155i, 152i, 146i, 139i, 129i, 118i, 106i, 93i, 80i, 68i, 58i, 49i, 43i, 40i, 41i, 44i, 51i, 61i, 73i, 87i, 103i, 119i, 134i, 149i, 162i, 173i, 181i, 186i, 188i, 186i, 181i, 174i, 164i, 153i, 141i, 128i, 116i, 104i, 94i, 86i, 81i, 77i, 76i, 77i, 80i, 84i, 89i, 94i, 98i, 102i, 104i, 104i, 102i, 98i, 92i, 83i, 73i, 62i, 50i, 38i, 26i, 16i, 8i, 2i, 0i, 0i, 4i, 11i, 21i, 33i, 48i, 64i, 81i, 98i, 114i, 129i, 141i, 151i, 158i, 161i, 161i, 158i, 152i, 144i, 134i, 123i, 112i, 100i, 90i, 81i, 73i, 68i, 65i, 65i, 67i, 70i, 75i, 81i, 87i, 92i, 97i, 101i, 103i, 102i, 100i, 95i, 88i, 79i, 69i, 58i, 47i, 36i, 26i, 18i, 13i, 11i, 11i, 15i, 22i, 32i, 45i, 60i, 77i, 94i)
-            %22:ptr<function, i32, read_write> = access %indexable_1, %x_243
-            %x_245:i32 = load %22
-            %24:i32 = sub %x_245, 15i
-            %25:bool = gt %x_241, %24
-            store %x_247, %25
-            %26:bool = load %x_247
-            store %x_248_phi, %26
+            %29:ptr<function, i32, read_write> = access %indexable_1, %x_243
+            %30:i32 = load %29
+            %x_245:i32 = let %30
+            %32:i32 = sub %x_245, 15i
+            %33:bool = gt %x_241, %32
+            store %x_247, %33
+            %34:bool = load %x_247
+            store %x_248_phi, %34
             exit_if  # if_2
           }
         }
-        %x_248:bool = load %x_248_phi
-        if %x_248 [t: %b8] {  # if_3
-          %b8 = block {  # true
-            %x_252:i32 = load_vector_element %pos, 0u
-            %x_254:i32 = load_vector_element %pos, 1u
+        %35:bool = load %x_248_phi
+        %x_248:bool = let %35
+        if %x_248 [t: $B8] {  # if_3
+          $B8: {  # true
+            %37:i32 = load_vector_element %pos, 0u
+            %x_252:i32 = let %37
+            %39:i32 = load_vector_element %pos, 1u
+            %x_254:i32 = let %39
             store %indexable_2, array<i32, 256>(115i, 133i, 150i, 164i, 176i, 184i, 190i, 192i, 191i, 187i, 181i, 172i, 163i, 153i, 143i, 134i, 126i, 120i, 116i, 114i, 114i, 117i, 121i, 127i, 134i, 141i, 148i, 154i, 159i, 162i, 163i, 161i, 157i, 151i, 143i, 134i, 124i, 113i, 103i, 94i, 87i, 82i, 79i, 80i, 84i, 91i, 101i, 114i, 130i, 146i, 164i, 182i, 199i, 215i, 229i, 240i, 249i, 254i, 256i, 254i, 250i, 243i, 233i, 223i, 212i, 200i, 190i, 180i, 172i, 166i, 163i, 161i, 162i, 164i, 169i, 174i, 179i, 185i, 190i, 193i, 195i, 195i, 192i, 188i, 180i, 171i, 161i, 149i, 137i, 125i, 114i, 105i, 97i, 93i, 91i, 93i, 98i, 106i, 117i, 130i, 145i, 161i, 177i, 193i, 208i, 221i, 231i, 239i, 243i, 244i, 242i, 236i, 228i, 218i, 207i, 194i, 181i, 169i, 158i, 148i, 141i, 135i, 132i, 131i, 132i, 135i, 138i, 143i, 147i, 151i, 154i, 155i, 155i, 152i, 146i, 139i, 129i, 118i, 106i, 93i, 80i, 68i, 58i, 49i, 43i, 40i, 41i, 44i, 51i, 61i, 73i, 87i, 103i, 119i, 134i, 149i, 162i, 173i, 181i, 186i, 188i, 186i, 181i, 174i, 164i, 153i, 141i, 128i, 116i, 104i, 94i, 86i, 81i, 77i, 76i, 77i, 80i, 84i, 89i, 94i, 98i, 102i, 104i, 104i, 102i, 98i, 92i, 83i, 73i, 62i, 50i, 38i, 26i, 16i, 8i, 2i, 0i, 0i, 4i, 11i, 21i, 33i, 48i, 64i, 81i, 98i, 114i, 129i, 141i, 151i, 158i, 161i, 161i, 158i, 152i, 144i, 134i, 123i, 112i, 100i, 90i, 81i, 73i, 68i, 65i, 65i, 67i, 70i, 75i, 81i, 87i, 92i, 97i, 101i, 103i, 102i, 100i, 95i, 88i, 79i, 69i, 58i, 47i, 36i, 26i, 18i, 13i, 11i, 11i, 15i, 22i, 32i, 45i, 60i, 77i, 94i)
-            %30:ptr<function, i32, read_write> = access %indexable_2, %x_254
-            %x_256:i32 = load %30
-            %32:i32 = sub %x_252, %x_256
-            %33:f32 = convert %32
-            %34:f32 = abs %33
-            %35:f32 = sub 15.0f, %34
-            %36:f32 = div %35, 15.0f
-            store %p, %36
-            %x_262:f32 = load %p
-            %x_263:f32 = load %p
-            %x_264:f32 = load %p
-            %40:vec4<f32> = construct %x_262, %x_263, %x_264, 1.0f
-            ret %40
+            %41:ptr<function, i32, read_write> = access %indexable_2, %x_254
+            %42:i32 = load %41
+            %x_256:i32 = let %42
+            %44:i32 = sub %x_252, %x_256
+            %45:f32 = convert %44
+            %46:f32 = abs %45
+            %47:f32 = sub 15.0f, %46
+            %48:f32 = div %47, 15.0f
+            store %p, %48
+            %49:f32 = load %p
+            %x_262:f32 = let %49
+            %51:f32 = load %p
+            %x_263:f32 = let %51
+            %53:f32 = load %p
+            %x_264:f32 = let %53
+            %55:vec4<f32> = construct %x_262, %x_263, %x_264, 1.0f
+            ret %55
           }
         }
-        %x_267:i32 = load_vector_element %pos, 1u
-        %42:i32 = add %x_267, 1i
-        store_vector_element %pos, 1u, %42
-        continue %b4
+        %56:i32 = load_vector_element %pos, 1u
+        %x_267:i32 = let %56
+        %58:i32 = add %x_267, 1i
+        store_vector_element %pos, 1u, %58
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
     ret vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f)
   }
 }
-%main_1 = func():void -> %b9 {
-  %b9 = block {
+%main_1 = func():void {
+  $B9: {
     %pos_1:ptr<function, vec2<f32>, read_write> = var
     %ipos:ptr<function, vec2<i32>, read_write> = var
     %param:ptr<function, vec2<i32>, read_write> = var
-    %x_205:vec4<f32> = load %gl_FragCoord
-    %48:ptr<uniform, vec2<f32>, read> = access %x_13, 0u
-    %x_208:vec2<f32> = load %48
-    %50:f32 = access %x_205, 0u
-    %51:f32 = access %x_205, 1u
-    %52:vec2<f32> = construct %50, %51
-    %53:vec2<f32> = div %52, %x_208
-    store %pos_1, %53
-    %x_211:f32 = load_vector_element %pos_1, 0u
-    %x_215:f32 = load_vector_element %pos_1, 1u
-    %56:f32 = mul %x_211, 256.0f
-    %57:i32 = convert %56
-    %58:f32 = mul %x_215, 256.0f
-    %59:i32 = convert %58
-    %60:vec2<i32> = construct %57, %59
-    store %ipos, %60
-    %x_219:vec2<i32> = load %ipos
+    %63:vec4<f32> = load %gl_FragCoord
+    %x_205:vec4<f32> = let %63
+    %65:ptr<uniform, vec2<f32>, read> = access %x_13, 0u
+    %66:vec2<f32> = load %65
+    %x_208:vec2<f32> = let %66
+    %68:f32 = access %x_205, 0u
+    %69:f32 = access %x_205, 1u
+    %70:vec2<f32> = construct %68, %69
+    %71:vec2<f32> = div %70, %x_208
+    store %pos_1, %71
+    %72:f32 = load_vector_element %pos_1, 0u
+    %x_211:f32 = let %72
+    %74:f32 = load_vector_element %pos_1, 1u
+    %x_215:f32 = let %74
+    %76:f32 = mul %x_211, 256.0f
+    %77:i32 = call %tint_f32_to_i32, %76
+    %79:i32 = let %77
+    %80:f32 = mul %x_215, 256.0f
+    %81:i32 = call %tint_f32_to_i32, %80
+    %82:vec2<i32> = construct %79, %81
+    store %ipos, %82
+    %83:vec2<i32> = load %ipos
+    %x_219:vec2<i32> = let %83
     store %param, %x_219
-    %x_220:vec4<f32> = call %trace_vi2_, %param
+    %85:vec4<f32> = call %trace_vi2_, %param
+    %x_220:vec4<f32> = let %85
     store %x_GLF_color, %x_220
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b10 {
-  %b10 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B10: {
     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
+    %89:void = call %main_1
+    %90:vec4<f32> = load %x_GLF_color
+    %91:main_out = construct %90
+    ret %91
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B11: {
+    %93:i32 = convert %value
+    %94:bool = gte %value, -2147483648.0f
+    %95:i32 = select -2147483648i, %93, %94
+    %96:bool = lte %value, 2147483520.0f
+    %97:i32 = select 2147483647i, %95, %96
+    ret %97
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/1.spvasm.expected.ir.msl
index 269c27f..d3680ab 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/1.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,127 +8,152 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_13:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%trace_vi2_ = func(%pos:ptr<function, vec2<i32>, read_write>):vec4<f32> -> %b2 {
-  %b2 = block {
+%trace_vi2_ = func(%pos:ptr<function, vec2<i32>, read_write>):vec4<f32> {
+  $B2: {
     %indexable:ptr<function, array<i32, 256>, read_write> = var
     %indexable_1:ptr<function, array<i32, 256>, read_write> = var
     %p:ptr<function, f32, read_write> = var
     %indexable_2:ptr<function, array<i32, 256>, read_write> = var
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %x_251:ptr<function, bool, read_write> = var
         %x_252:ptr<function, bool, read_write> = var
         %12:i32 = load_vector_element %pos, 1u
         %13:bool = neq %12, 256i
-        if %13 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %13 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_233:i32 = load_vector_element %pos, 0u
-        %x_235:i32 = load_vector_element %pos, 1u
+        %14:i32 = load_vector_element %pos, 0u
+        %x_233:i32 = let %14
+        %16:i32 = load_vector_element %pos, 1u
+        %x_235:i32 = let %16
         store %indexable, array<i32, 256>(115i, 133i, 150i, 164i, 176i, 184i, 190i, 192i, 191i, 187i, 181i, 172i, 163i, 153i, 143i, 134i, 126i, 120i, 116i, 114i, 114i, 117i, 121i, 127i, 134i, 141i, 148i, 154i, 159i, 162i, 163i, 161i, 157i, 151i, 143i, 134i, 124i, 113i, 103i, 94i, 87i, 82i, 79i, 80i, 84i, 91i, 101i, 114i, 130i, 146i, 164i, 182i, 199i, 215i, 229i, 240i, 249i, 254i, 256i, 254i, 250i, 243i, 233i, 223i, 212i, 200i, 190i, 180i, 172i, 166i, 163i, 161i, 162i, 164i, 169i, 174i, 179i, 185i, 190i, 193i, 195i, 195i, 192i, 188i, 180i, 171i, 161i, 149i, 137i, 125i, 114i, 105i, 97i, 93i, 91i, 93i, 98i, 106i, 117i, 130i, 145i, 161i, 177i, 193i, 208i, 221i, 231i, 239i, 243i, 244i, 242i, 236i, 228i, 218i, 207i, 194i, 181i, 169i, 158i, 148i, 141i, 135i, 132i, 131i, 132i, 135i, 138i, 143i, 147i, 151i, 154i, 155i, 155i, 152i, 146i, 139i, 129i, 118i, 106i, 93i, 80i, 68i, 58i, 49i, 43i, 40i, 41i, 44i, 51i, 61i, 73i, 87i, 103i, 119i, 134i, 149i, 162i, 173i, 181i, 186i, 188i, 186i, 181i, 174i, 164i, 153i, 141i, 128i, 116i, 104i, 94i, 86i, 81i, 77i, 76i, 77i, 80i, 84i, 89i, 94i, 98i, 102i, 104i, 104i, 102i, 98i, 92i, 83i, 73i, 62i, 50i, 38i, 26i, 16i, 8i, 2i, 0i, 0i, 4i, 11i, 21i, 33i, 48i, 64i, 81i, 98i, 114i, 129i, 141i, 151i, 158i, 161i, 161i, 158i, 152i, 144i, 134i, 123i, 112i, 100i, 90i, 81i, 73i, 68i, 65i, 65i, 67i, 70i, 75i, 81i, 87i, 92i, 97i, 101i, 103i, 102i, 100i, 95i, 88i, 79i, 69i, 58i, 47i, 36i, 26i, 18i, 13i, 11i, 11i, 15i, 22i, 32i, 45i, 60i, 77i, 94i)
-        %16:ptr<function, i32, read_write> = access %indexable, %x_235
-        %x_237:i32 = load %16
-        %x_238:array<i32, 256> = load %indexable
+        %18:ptr<function, i32, read_write> = access %indexable, %x_235
+        %19:i32 = load %18
+        %x_237:i32 = let %19
+        %21:array<i32, 256> = load %indexable
+        %x_238:array<i32, 256> = let %21
         store %indexable, array<i32, 256>(0i)
-        %x_239:i32 = load_vector_element %pos, 1u
+        %23:i32 = load_vector_element %pos, 1u
+        %x_239:i32 = let %23
         store_vector_element %pos, 1u, 0i
         store_vector_element %pos, 1u, %x_239
         store %indexable, %x_238
-        %20:i32 = add %x_237, 15i
-        %x_241:bool = lt %x_233, %20
+        %25:i32 = add %x_237, 15i
+        %26:bool = lt %x_233, %25
+        %x_241:bool = let %26
         store %x_252, %x_241
-        if %x_241 [t: %b7] {  # if_2
-          %b7 = block {  # true
-            %x_245:i32 = load_vector_element %pos, 0u
-            %x_247:i32 = load_vector_element %pos, 1u
+        if %x_241 [t: $B7] {  # if_2
+          $B7: {  # true
+            %28:i32 = load_vector_element %pos, 0u
+            %x_245:i32 = let %28
+            %30:i32 = load_vector_element %pos, 1u
+            %x_247:i32 = let %30
             store %indexable_1, array<i32, 256>(115i, 133i, 150i, 164i, 176i, 184i, 190i, 192i, 191i, 187i, 181i, 172i, 163i, 153i, 143i, 134i, 126i, 120i, 116i, 114i, 114i, 117i, 121i, 127i, 134i, 141i, 148i, 154i, 159i, 162i, 163i, 161i, 157i, 151i, 143i, 134i, 124i, 113i, 103i, 94i, 87i, 82i, 79i, 80i, 84i, 91i, 101i, 114i, 130i, 146i, 164i, 182i, 199i, 215i, 229i, 240i, 249i, 254i, 256i, 254i, 250i, 243i, 233i, 223i, 212i, 200i, 190i, 180i, 172i, 166i, 163i, 161i, 162i, 164i, 169i, 174i, 179i, 185i, 190i, 193i, 195i, 195i, 192i, 188i, 180i, 171i, 161i, 149i, 137i, 125i, 114i, 105i, 97i, 93i, 91i, 93i, 98i, 106i, 117i, 130i, 145i, 161i, 177i, 193i, 208i, 221i, 231i, 239i, 243i, 244i, 242i, 236i, 228i, 218i, 207i, 194i, 181i, 169i, 158i, 148i, 141i, 135i, 132i, 131i, 132i, 135i, 138i, 143i, 147i, 151i, 154i, 155i, 155i, 152i, 146i, 139i, 129i, 118i, 106i, 93i, 80i, 68i, 58i, 49i, 43i, 40i, 41i, 44i, 51i, 61i, 73i, 87i, 103i, 119i, 134i, 149i, 162i, 173i, 181i, 186i, 188i, 186i, 181i, 174i, 164i, 153i, 141i, 128i, 116i, 104i, 94i, 86i, 81i, 77i, 76i, 77i, 80i, 84i, 89i, 94i, 98i, 102i, 104i, 104i, 102i, 98i, 92i, 83i, 73i, 62i, 50i, 38i, 26i, 16i, 8i, 2i, 0i, 0i, 4i, 11i, 21i, 33i, 48i, 64i, 81i, 98i, 114i, 129i, 141i, 151i, 158i, 161i, 161i, 158i, 152i, 144i, 134i, 123i, 112i, 100i, 90i, 81i, 73i, 68i, 65i, 65i, 67i, 70i, 75i, 81i, 87i, 92i, 97i, 101i, 103i, 102i, 100i, 95i, 88i, 79i, 69i, 58i, 47i, 36i, 26i, 18i, 13i, 11i, 11i, 15i, 22i, 32i, 45i, 60i, 77i, 94i)
-            %24:ptr<function, i32, read_write> = access %indexable_1, %x_247
-            %25:i32 = load %24
-            %26:i32 = sub %25, 15i
-            %27:bool = gt %x_245, %26
-            store %x_251, %27
-            %28:bool = load %x_251
-            store %x_252, %28
+            %32:ptr<function, i32, read_write> = access %indexable_1, %x_247
+            %33:i32 = load %32
+            %34:i32 = sub %33, 15i
+            %35:bool = gt %x_245, %34
+            store %x_251, %35
+            %36:bool = load %x_251
+            store %x_252, %36
             exit_if  # if_2
           }
         }
-        %29:bool = load %x_252
-        if %29 [t: %b8] {  # if_3
-          %b8 = block {  # true
-            %x_256:i32 = load_vector_element %pos, 0u
-            %x_258:i32 = load_vector_element %pos, 1u
+        %37:bool = load %x_252
+        if %37 [t: $B8] {  # if_3
+          $B8: {  # true
+            %38:i32 = load_vector_element %pos, 0u
+            %x_256:i32 = let %38
+            %40:i32 = load_vector_element %pos, 1u
+            %x_258:i32 = let %40
             store %indexable_2, array<i32, 256>(115i, 133i, 150i, 164i, 176i, 184i, 190i, 192i, 191i, 187i, 181i, 172i, 163i, 153i, 143i, 134i, 126i, 120i, 116i, 114i, 114i, 117i, 121i, 127i, 134i, 141i, 148i, 154i, 159i, 162i, 163i, 161i, 157i, 151i, 143i, 134i, 124i, 113i, 103i, 94i, 87i, 82i, 79i, 80i, 84i, 91i, 101i, 114i, 130i, 146i, 164i, 182i, 199i, 215i, 229i, 240i, 249i, 254i, 256i, 254i, 250i, 243i, 233i, 223i, 212i, 200i, 190i, 180i, 172i, 166i, 163i, 161i, 162i, 164i, 169i, 174i, 179i, 185i, 190i, 193i, 195i, 195i, 192i, 188i, 180i, 171i, 161i, 149i, 137i, 125i, 114i, 105i, 97i, 93i, 91i, 93i, 98i, 106i, 117i, 130i, 145i, 161i, 177i, 193i, 208i, 221i, 231i, 239i, 243i, 244i, 242i, 236i, 228i, 218i, 207i, 194i, 181i, 169i, 158i, 148i, 141i, 135i, 132i, 131i, 132i, 135i, 138i, 143i, 147i, 151i, 154i, 155i, 155i, 152i, 146i, 139i, 129i, 118i, 106i, 93i, 80i, 68i, 58i, 49i, 43i, 40i, 41i, 44i, 51i, 61i, 73i, 87i, 103i, 119i, 134i, 149i, 162i, 173i, 181i, 186i, 188i, 186i, 181i, 174i, 164i, 153i, 141i, 128i, 116i, 104i, 94i, 86i, 81i, 77i, 76i, 77i, 80i, 84i, 89i, 94i, 98i, 102i, 104i, 104i, 102i, 98i, 92i, 83i, 73i, 62i, 50i, 38i, 26i, 16i, 8i, 2i, 0i, 0i, 4i, 11i, 21i, 33i, 48i, 64i, 81i, 98i, 114i, 129i, 141i, 151i, 158i, 161i, 161i, 158i, 152i, 144i, 134i, 123i, 112i, 100i, 90i, 81i, 73i, 68i, 65i, 65i, 67i, 70i, 75i, 81i, 87i, 92i, 97i, 101i, 103i, 102i, 100i, 95i, 88i, 79i, 69i, 58i, 47i, 36i, 26i, 18i, 13i, 11i, 11i, 15i, 22i, 32i, 45i, 60i, 77i, 94i)
-            %32:ptr<function, i32, read_write> = access %indexable_2, %x_258
-            %33:i32 = load %32
-            %34:i32 = sub %x_256, %33
-            %35:f32 = convert %34
-            %36:f32 = abs %35
-            %37:f32 = sub 15.0f, %36
-            %38:f32 = div %37, 15.0f
-            store %p, %38
-            %x_266:f32 = load %p
-            %x_267:f32 = load %p
-            %x_268:f32 = load %p
-            %42:vec4<f32> = construct %x_266, %x_267, %x_268, 1.0f
-            ret %42
+            %42:ptr<function, i32, read_write> = access %indexable_2, %x_258
+            %43:i32 = load %42
+            %44:i32 = sub %x_256, %43
+            %45:f32 = convert %44
+            %46:f32 = abs %45
+            %47:f32 = sub 15.0f, %46
+            %48:f32 = div %47, 15.0f
+            store %p, %48
+            %49:f32 = load %p
+            %x_266:f32 = let %49
+            %51:f32 = load %p
+            %x_267:f32 = let %51
+            %53:f32 = load %p
+            %x_268:f32 = let %53
+            %55:vec4<f32> = construct %x_266, %x_267, %x_268, 1.0f
+            ret %55
           }
         }
-        %43:i32 = load_vector_element %pos, 1u
-        %44:i32 = add %43, 1i
-        store_vector_element %pos, 1u, %44
-        continue %b4
+        %56:i32 = load_vector_element %pos, 1u
+        %57:i32 = add %56, 1i
+        store_vector_element %pos, 1u, %57
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
     ret vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f)
   }
 }
-%main_1 = func():void -> %b9 {
-  %b9 = block {
+%main_1 = func():void {
+  $B9: {
     %pos_1:ptr<function, vec2<f32>, read_write> = var
     %ipos:ptr<function, vec2<i32>, read_write> = var
     %param:ptr<function, vec2<i32>, read_write> = var
-    %49:vec4<f32> = load %gl_FragCoord
-    %50:vec2<f32> = swizzle %49, xy
-    %51:ptr<uniform, vec2<f32>, read> = access %x_13, 0u
-    %52:vec2<f32> = load %51
-    %53:vec2<f32> = div %50, %52
-    store %pos_1, %53
-    %54:f32 = load_vector_element %pos_1, 0u
-    %55:f32 = mul %54, 256.0f
-    %56:i32 = convert %55
-    %57:f32 = load_vector_element %pos_1, 1u
-    %58:f32 = mul %57, 256.0f
-    %59:i32 = convert %58
-    %60:vec2<i32> = construct %56, %59
-    store %ipos, %60
-    %61:vec2<i32> = load %ipos
-    store %param, %61
-    %x_222:vec4<f32> = call %trace_vi2_, %param
+    %62:vec4<f32> = load %gl_FragCoord
+    %63:vec2<f32> = swizzle %62, xy
+    %64:ptr<uniform, vec2<f32>, read> = access %x_13, 0u
+    %65:vec2<f32> = load %64
+    %66:vec2<f32> = div %63, %65
+    store %pos_1, %66
+    %67:f32 = load_vector_element %pos_1, 0u
+    %68:f32 = mul %67, 256.0f
+    %69:i32 = call %tint_f32_to_i32, %68
+    %71:i32 = let %69
+    %72:f32 = load_vector_element %pos_1, 1u
+    %73:f32 = mul %72, 256.0f
+    %74:i32 = call %tint_f32_to_i32, %73
+    %75:vec2<i32> = construct %71, %74
+    store %ipos, %75
+    %76:vec2<i32> = load %ipos
+    store %param, %76
+    %77:vec4<f32> = call %trace_vi2_, %param
+    %x_222:vec4<f32> = let %77
     store %x_GLF_color, %x_222
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b10 {
-  %b10 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B10: {
     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
+    %81:void = call %main_1
+    %82:vec4<f32> = load %x_GLF_color
+    %83:main_out = construct %82
+    ret %83
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B11: {
+    %85:i32 = convert %value
+    %86:bool = gte %value, -2147483648.0f
+    %87:i32 = select -2147483648i, %85, %86
+    %88:bool = lte %value, 2147483520.0f
+    %89:i32 = select 2147483647i, %87, %88
+    ret %89
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/1.wgsl.expected.ir.msl
index 32ddd86..3de98d2 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/1.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/1.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,129 +8,164 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_13:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%trace_vi2_ = func(%pos:ptr<function, vec2<i32>, read_write>):vec4<f32> -> %b2 {
-  %b2 = block {
+%trace_vi2_ = func(%pos:ptr<function, vec2<i32>, read_write>):vec4<f32> {
+  $B2: {
     %indexable:ptr<function, array<i32, 256>, read_write> = var
     %indexable_1:ptr<function, array<i32, 256>, read_write> = var
     %p:ptr<function, f32, read_write> = var
     %indexable_2:ptr<function, array<i32, 256>, read_write> = var
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %x_251:ptr<function, bool, read_write> = var
         %x_252_phi:ptr<function, bool, read_write> = var
-        %x_229:i32 = load_vector_element %pos, 1u
-        %13:bool = neq %x_229, 256i
-        if %13 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %12:i32 = load_vector_element %pos, 1u
+        %x_229:i32 = let %12
+        %14:bool = neq %x_229, 256i
+        if %14 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_233:i32 = load_vector_element %pos, 0u
-        %x_235:i32 = load_vector_element %pos, 1u
+        %15:i32 = load_vector_element %pos, 0u
+        %x_233:i32 = let %15
+        %17:i32 = load_vector_element %pos, 1u
+        %x_235:i32 = let %17
         store %indexable, array<i32, 256>(115i, 133i, 150i, 164i, 176i, 184i, 190i, 192i, 191i, 187i, 181i, 172i, 163i, 153i, 143i, 134i, 126i, 120i, 116i, 114i, 114i, 117i, 121i, 127i, 134i, 141i, 148i, 154i, 159i, 162i, 163i, 161i, 157i, 151i, 143i, 134i, 124i, 113i, 103i, 94i, 87i, 82i, 79i, 80i, 84i, 91i, 101i, 114i, 130i, 146i, 164i, 182i, 199i, 215i, 229i, 240i, 249i, 254i, 256i, 254i, 250i, 243i, 233i, 223i, 212i, 200i, 190i, 180i, 172i, 166i, 163i, 161i, 162i, 164i, 169i, 174i, 179i, 185i, 190i, 193i, 195i, 195i, 192i, 188i, 180i, 171i, 161i, 149i, 137i, 125i, 114i, 105i, 97i, 93i, 91i, 93i, 98i, 106i, 117i, 130i, 145i, 161i, 177i, 193i, 208i, 221i, 231i, 239i, 243i, 244i, 242i, 236i, 228i, 218i, 207i, 194i, 181i, 169i, 158i, 148i, 141i, 135i, 132i, 131i, 132i, 135i, 138i, 143i, 147i, 151i, 154i, 155i, 155i, 152i, 146i, 139i, 129i, 118i, 106i, 93i, 80i, 68i, 58i, 49i, 43i, 40i, 41i, 44i, 51i, 61i, 73i, 87i, 103i, 119i, 134i, 149i, 162i, 173i, 181i, 186i, 188i, 186i, 181i, 174i, 164i, 153i, 141i, 128i, 116i, 104i, 94i, 86i, 81i, 77i, 76i, 77i, 80i, 84i, 89i, 94i, 98i, 102i, 104i, 104i, 102i, 98i, 92i, 83i, 73i, 62i, 50i, 38i, 26i, 16i, 8i, 2i, 0i, 0i, 4i, 11i, 21i, 33i, 48i, 64i, 81i, 98i, 114i, 129i, 141i, 151i, 158i, 161i, 161i, 158i, 152i, 144i, 134i, 123i, 112i, 100i, 90i, 81i, 73i, 68i, 65i, 65i, 67i, 70i, 75i, 81i, 87i, 92i, 97i, 101i, 103i, 102i, 100i, 95i, 88i, 79i, 69i, 58i, 47i, 36i, 26i, 18i, 13i, 11i, 11i, 15i, 22i, 32i, 45i, 60i, 77i, 94i)
-        %16:ptr<function, i32, read_write> = access %indexable, %x_235
-        %x_237:i32 = load %16
-        %x_238:array<i32, 256> = load %indexable
+        %19:ptr<function, i32, read_write> = access %indexable, %x_235
+        %20:i32 = load %19
+        %x_237:i32 = let %20
+        %22:array<i32, 256> = load %indexable
+        %x_238:array<i32, 256> = let %22
         store %indexable, array<i32, 256>(0i)
-        %x_239:i32 = load_vector_element %pos, 1u
+        %24:i32 = load_vector_element %pos, 1u
+        %x_239:i32 = let %24
         store_vector_element %pos, 1u, 0i
         store_vector_element %pos, 1u, %x_239
         store %indexable, %x_238
-        %20:i32 = add %x_237, 15i
-        %x_241:bool = lt %x_233, %20
+        %26:i32 = add %x_237, 15i
+        %27:bool = lt %x_233, %26
+        %x_241:bool = let %27
         store %x_252_phi, %x_241
-        if %x_241 [t: %b7] {  # if_2
-          %b7 = block {  # true
-            %x_245:i32 = load_vector_element %pos, 0u
-            %x_247:i32 = load_vector_element %pos, 1u
+        if %x_241 [t: $B7] {  # if_2
+          $B7: {  # true
+            %29:i32 = load_vector_element %pos, 0u
+            %x_245:i32 = let %29
+            %31:i32 = load_vector_element %pos, 1u
+            %x_247:i32 = let %31
             store %indexable_1, array<i32, 256>(115i, 133i, 150i, 164i, 176i, 184i, 190i, 192i, 191i, 187i, 181i, 172i, 163i, 153i, 143i, 134i, 126i, 120i, 116i, 114i, 114i, 117i, 121i, 127i, 134i, 141i, 148i, 154i, 159i, 162i, 163i, 161i, 157i, 151i, 143i, 134i, 124i, 113i, 103i, 94i, 87i, 82i, 79i, 80i, 84i, 91i, 101i, 114i, 130i, 146i, 164i, 182i, 199i, 215i, 229i, 240i, 249i, 254i, 256i, 254i, 250i, 243i, 233i, 223i, 212i, 200i, 190i, 180i, 172i, 166i, 163i, 161i, 162i, 164i, 169i, 174i, 179i, 185i, 190i, 193i, 195i, 195i, 192i, 188i, 180i, 171i, 161i, 149i, 137i, 125i, 114i, 105i, 97i, 93i, 91i, 93i, 98i, 106i, 117i, 130i, 145i, 161i, 177i, 193i, 208i, 221i, 231i, 239i, 243i, 244i, 242i, 236i, 228i, 218i, 207i, 194i, 181i, 169i, 158i, 148i, 141i, 135i, 132i, 131i, 132i, 135i, 138i, 143i, 147i, 151i, 154i, 155i, 155i, 152i, 146i, 139i, 129i, 118i, 106i, 93i, 80i, 68i, 58i, 49i, 43i, 40i, 41i, 44i, 51i, 61i, 73i, 87i, 103i, 119i, 134i, 149i, 162i, 173i, 181i, 186i, 188i, 186i, 181i, 174i, 164i, 153i, 141i, 128i, 116i, 104i, 94i, 86i, 81i, 77i, 76i, 77i, 80i, 84i, 89i, 94i, 98i, 102i, 104i, 104i, 102i, 98i, 92i, 83i, 73i, 62i, 50i, 38i, 26i, 16i, 8i, 2i, 0i, 0i, 4i, 11i, 21i, 33i, 48i, 64i, 81i, 98i, 114i, 129i, 141i, 151i, 158i, 161i, 161i, 158i, 152i, 144i, 134i, 123i, 112i, 100i, 90i, 81i, 73i, 68i, 65i, 65i, 67i, 70i, 75i, 81i, 87i, 92i, 97i, 101i, 103i, 102i, 100i, 95i, 88i, 79i, 69i, 58i, 47i, 36i, 26i, 18i, 13i, 11i, 11i, 15i, 22i, 32i, 45i, 60i, 77i, 94i)
-            %24:ptr<function, i32, read_write> = access %indexable_1, %x_247
-            %x_249:i32 = load %24
-            %26:i32 = sub %x_249, 15i
-            %27:bool = gt %x_245, %26
-            store %x_251, %27
-            %28:bool = load %x_251
-            store %x_252_phi, %28
+            %33:ptr<function, i32, read_write> = access %indexable_1, %x_247
+            %34:i32 = load %33
+            %x_249:i32 = let %34
+            %36:i32 = sub %x_249, 15i
+            %37:bool = gt %x_245, %36
+            store %x_251, %37
+            %38:bool = load %x_251
+            store %x_252_phi, %38
             exit_if  # if_2
           }
         }
-        %x_252:bool = load %x_252_phi
-        if %x_252 [t: %b8] {  # if_3
-          %b8 = block {  # true
-            %x_256:i32 = load_vector_element %pos, 0u
-            %x_258:i32 = load_vector_element %pos, 1u
+        %39:bool = load %x_252_phi
+        %x_252:bool = let %39
+        if %x_252 [t: $B8] {  # if_3
+          $B8: {  # true
+            %41:i32 = load_vector_element %pos, 0u
+            %x_256:i32 = let %41
+            %43:i32 = load_vector_element %pos, 1u
+            %x_258:i32 = let %43
             store %indexable_2, array<i32, 256>(115i, 133i, 150i, 164i, 176i, 184i, 190i, 192i, 191i, 187i, 181i, 172i, 163i, 153i, 143i, 134i, 126i, 120i, 116i, 114i, 114i, 117i, 121i, 127i, 134i, 141i, 148i, 154i, 159i, 162i, 163i, 161i, 157i, 151i, 143i, 134i, 124i, 113i, 103i, 94i, 87i, 82i, 79i, 80i, 84i, 91i, 101i, 114i, 130i, 146i, 164i, 182i, 199i, 215i, 229i, 240i, 249i, 254i, 256i, 254i, 250i, 243i, 233i, 223i, 212i, 200i, 190i, 180i, 172i, 166i, 163i, 161i, 162i, 164i, 169i, 174i, 179i, 185i, 190i, 193i, 195i, 195i, 192i, 188i, 180i, 171i, 161i, 149i, 137i, 125i, 114i, 105i, 97i, 93i, 91i, 93i, 98i, 106i, 117i, 130i, 145i, 161i, 177i, 193i, 208i, 221i, 231i, 239i, 243i, 244i, 242i, 236i, 228i, 218i, 207i, 194i, 181i, 169i, 158i, 148i, 141i, 135i, 132i, 131i, 132i, 135i, 138i, 143i, 147i, 151i, 154i, 155i, 155i, 152i, 146i, 139i, 129i, 118i, 106i, 93i, 80i, 68i, 58i, 49i, 43i, 40i, 41i, 44i, 51i, 61i, 73i, 87i, 103i, 119i, 134i, 149i, 162i, 173i, 181i, 186i, 188i, 186i, 181i, 174i, 164i, 153i, 141i, 128i, 116i, 104i, 94i, 86i, 81i, 77i, 76i, 77i, 80i, 84i, 89i, 94i, 98i, 102i, 104i, 104i, 102i, 98i, 92i, 83i, 73i, 62i, 50i, 38i, 26i, 16i, 8i, 2i, 0i, 0i, 4i, 11i, 21i, 33i, 48i, 64i, 81i, 98i, 114i, 129i, 141i, 151i, 158i, 161i, 161i, 158i, 152i, 144i, 134i, 123i, 112i, 100i, 90i, 81i, 73i, 68i, 65i, 65i, 67i, 70i, 75i, 81i, 87i, 92i, 97i, 101i, 103i, 102i, 100i, 95i, 88i, 79i, 69i, 58i, 47i, 36i, 26i, 18i, 13i, 11i, 11i, 15i, 22i, 32i, 45i, 60i, 77i, 94i)
-            %32:ptr<function, i32, read_write> = access %indexable_2, %x_258
-            %x_260:i32 = load %32
-            %34:i32 = sub %x_256, %x_260
-            %35:f32 = convert %34
-            %36:f32 = abs %35
-            %37:f32 = sub 15.0f, %36
-            %38:f32 = div %37, 15.0f
-            store %p, %38
-            %x_266:f32 = load %p
-            %x_267:f32 = load %p
-            %x_268:f32 = load %p
-            %42:vec4<f32> = construct %x_266, %x_267, %x_268, 1.0f
-            ret %42
+            %45:ptr<function, i32, read_write> = access %indexable_2, %x_258
+            %46:i32 = load %45
+            %x_260:i32 = let %46
+            %48:i32 = sub %x_256, %x_260
+            %49:f32 = convert %48
+            %50:f32 = abs %49
+            %51:f32 = sub 15.0f, %50
+            %52:f32 = div %51, 15.0f
+            store %p, %52
+            %53:f32 = load %p
+            %x_266:f32 = let %53
+            %55:f32 = load %p
+            %x_267:f32 = let %55
+            %57:f32 = load %p
+            %x_268:f32 = let %57
+            %59:vec4<f32> = construct %x_266, %x_267, %x_268, 1.0f
+            ret %59
           }
         }
-        %x_271:i32 = load_vector_element %pos, 1u
-        %44:i32 = add %x_271, 1i
-        store_vector_element %pos, 1u, %44
-        continue %b4
+        %60:i32 = load_vector_element %pos, 1u
+        %x_271:i32 = let %60
+        %62:i32 = add %x_271, 1i
+        store_vector_element %pos, 1u, %62
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
     ret vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f)
   }
 }
-%main_1 = func():void -> %b9 {
-  %b9 = block {
+%main_1 = func():void {
+  $B9: {
     %pos_1:ptr<function, vec2<f32>, read_write> = var
     %ipos:ptr<function, vec2<i32>, read_write> = var
     %param:ptr<function, vec2<i32>, read_write> = var
-    %x_207:vec4<f32> = load %gl_FragCoord
-    %50:ptr<uniform, vec2<f32>, read> = access %x_13, 0u
-    %x_210:vec2<f32> = load %50
-    %52:f32 = access %x_207, 0u
-    %53:f32 = access %x_207, 1u
-    %54:vec2<f32> = construct %52, %53
-    %55:vec2<f32> = div %54, %x_210
-    store %pos_1, %55
-    %x_213:f32 = load_vector_element %pos_1, 0u
-    %x_217:f32 = load_vector_element %pos_1, 1u
-    %58:f32 = mul %x_213, 256.0f
-    %59:i32 = convert %58
-    %60:f32 = mul %x_217, 256.0f
-    %61:i32 = convert %60
-    %62:vec2<i32> = construct %59, %61
-    store %ipos, %62
-    %x_221:vec2<i32> = load %ipos
+    %67:vec4<f32> = load %gl_FragCoord
+    %x_207:vec4<f32> = let %67
+    %69:ptr<uniform, vec2<f32>, read> = access %x_13, 0u
+    %70:vec2<f32> = load %69
+    %x_210:vec2<f32> = let %70
+    %72:f32 = access %x_207, 0u
+    %73:f32 = access %x_207, 1u
+    %74:vec2<f32> = construct %72, %73
+    %75:vec2<f32> = div %74, %x_210
+    store %pos_1, %75
+    %76:f32 = load_vector_element %pos_1, 0u
+    %x_213:f32 = let %76
+    %78:f32 = load_vector_element %pos_1, 1u
+    %x_217:f32 = let %78
+    %80:f32 = mul %x_213, 256.0f
+    %81:i32 = call %tint_f32_to_i32, %80
+    %83:i32 = let %81
+    %84:f32 = mul %x_217, 256.0f
+    %85:i32 = call %tint_f32_to_i32, %84
+    %86:vec2<i32> = construct %83, %85
+    store %ipos, %86
+    %87:vec2<i32> = load %ipos
+    %x_221:vec2<i32> = let %87
     store %param, %x_221
-    %x_222:vec4<f32> = call %trace_vi2_, %param
+    %89:vec4<f32> = call %trace_vi2_, %param
+    %x_222:vec4<f32> = let %89
     store %x_GLF_color, %x_222
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b10 {
-  %b10 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B10: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %67:void = call %main_1
-    %68:vec4<f32> = load %x_GLF_color
-    %69:main_out = construct %68
-    ret %69
+    %93:void = call %main_1
+    %94:vec4<f32> = load %x_GLF_color
+    %95:main_out = construct %94
+    ret %95
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B11: {
+    %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
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-dontinline/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-dontinline/0-opt.spvasm.expected.ir.msl
index cd18bd9..152e0da 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-dontinline/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-dontinline/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: QuicksortObject = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: QuicksortObject = struct @align(4) {
   numbers:array<i32, 10> @offset(0)
 }
 
@@ -12,35 +12,37 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %obj:ptr<private, QuicksortObject, read_write> = var
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_32:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%swap_i1_i1_ = func(%i:ptr<function, i32, read_write>, %j:ptr<function, i32, read_write>):void -> %b2 {
-  %b2 = block {
+%swap_i1_i1_ = func(%i:ptr<function, i32, read_write>, %j:ptr<function, i32, read_write>):void {
+  $B2: {
     %temp:ptr<function, i32, read_write> = var
     %9:i32 = load %i
     %10:ptr<private, i32, read_write> = access %obj, 0u, %9
     %11:i32 = load %10
     store %temp, %11
-    %x_228:i32 = load %i
-    %13:ptr<private, i32, read_write> = access %obj, 0u, %x_228
-    %14:i32 = load %j
-    %15:ptr<private, i32, read_write> = access %obj, 0u, %14
-    %16:i32 = load %15
-    store %13, %16
-    %x_233:i32 = load %j
-    %18:ptr<private, i32, read_write> = access %obj, 0u, %x_233
-    %19:i32 = load %temp
-    store %18, %19
+    %12:i32 = load %i
+    %x_228:i32 = let %12
+    %14:ptr<private, i32, read_write> = access %obj, 0u, %x_228
+    %15:i32 = load %j
+    %16:ptr<private, i32, read_write> = access %obj, 0u, %15
+    %17:i32 = load %16
+    store %14, %17
+    %18:i32 = load %j
+    %x_233:i32 = let %18
+    %20:ptr<private, i32, read_write> = access %obj, 0u, %x_233
+    %21:i32 = load %temp
+    store %20, %21
     ret
   }
 }
-%performPartition_i1_i1_ = func(%l:ptr<function, i32, read_write>, %h:ptr<function, i32, read_write>):i32 -> %b3 {
-  %b3 = block {
+%performPartition_i1_i1_ = func(%l:ptr<function, i32, read_write>, %h:ptr<function, i32, read_write>):i32 {
+  $B3: {
     %pivot:ptr<function, i32, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
     %j_1:ptr<function, i32, read_write> = var
@@ -48,70 +50,71 @@
     %param_1:ptr<function, i32, read_write> = var
     %param_2:ptr<function, i32, read_write> = var
     %param_3:ptr<function, i32, read_write> = var
-    %30:i32 = load %h
-    %31:ptr<private, i32, read_write> = access %obj, 0u, %30
-    %32:i32 = load %31
-    store %pivot, %32
-    %33:i32 = load %l
-    %34:i32 = sub %33, 1i
-    store %i_1, %34
+    %32:i32 = load %h
+    %33:ptr<private, i32, read_write> = access %obj, 0u, %32
+    %34:i32 = load %33
+    store %pivot, %34
     %35:i32 = load %l
-    store %j_1, %35
-    loop [b: %b4, c: %b5] {  # loop_1
-      %b4 = block {  # body
-        %36:i32 = load %j_1
-        %37:i32 = load %h
-        %38:i32 = sub %37, 1i
-        %39:bool = lte %36, %38
-        if %39 [t: %b6, f: %b7] {  # if_1
-          %b6 = block {  # true
+    %36:i32 = sub %35, 1i
+    store %i_1, %36
+    %37:i32 = load %l
+    store %j_1, %37
+    loop [b: $B4, c: $B5] {  # loop_1
+      $B4: {  # body
+        %38:i32 = load %j_1
+        %39:i32 = load %h
+        %40:i32 = sub %39, 1i
+        %41:bool = lte %38, %40
+        if %41 [t: $B6, f: $B7] {  # if_1
+          $B6: {  # true
             exit_if  # if_1
           }
-          %b7 = block {  # false
+          $B7: {  # false
             exit_loop  # loop_1
           }
         }
-        %40:i32 = load %j_1
-        %41:ptr<private, i32, read_write> = access %obj, 0u, %40
-        %42:i32 = load %41
-        %43:i32 = load %pivot
-        %44:bool = lte %42, %43
-        if %44 [t: %b8] {  # if_2
-          %b8 = block {  # true
-            %45:i32 = load %i_1
-            %46:i32 = add %45, 1i
-            store %i_1, %46
+        %42:i32 = load %j_1
+        %43:ptr<private, i32, read_write> = access %obj, 0u, %42
+        %44:i32 = load %43
+        %45:i32 = load %pivot
+        %46:bool = lte %44, %45
+        if %46 [t: $B8] {  # if_2
+          $B8: {  # true
             %47:i32 = load %i_1
-            store %param, %47
-            %48:i32 = load %j_1
-            store %param_1, %48
-            %49:void = call %swap_i1_i1_, %param, %param_1
+            %48:i32 = add %47, 1i
+            store %i_1, %48
+            %49:i32 = load %i_1
+            store %param, %49
+            %50:i32 = load %j_1
+            store %param_1, %50
+            %51:void = call %swap_i1_i1_, %param, %param_1
             exit_if  # if_2
           }
         }
-        continue %b5
+        continue  # -> $B5
       }
-      %b5 = block {  # continuing
-        %50:i32 = load %j_1
-        %51:i32 = add %50, 1i
-        store %j_1, %51
-        next_iteration %b4
+      $B5: {  # continuing
+        %52:i32 = load %j_1
+        %53:i32 = add %52, 1i
+        store %j_1, %53
+        next_iteration  # -> $B4
       }
     }
-    %52:i32 = load %i_1
-    %53:i32 = add %52, 1i
-    store %i_1, %53
     %54:i32 = load %i_1
-    store %param_2, %54
-    %55:i32 = load %h
-    store %param_3, %55
-    %56:void = call %swap_i1_i1_, %param_2, %param_3
-    %x_271:i32 = load %i_1
+    %55:i32 = add %54, 1i
+    store %i_1, %55
+    %56:i32 = load %i_1
+    store %param_2, %56
+    %57:i32 = load %h
+    store %param_3, %57
+    %58:void = call %swap_i1_i1_, %param_2, %param_3
+    %59:i32 = load %i_1
+    %x_271:i32 = let %59
     ret %x_271
   }
 }
-%quicksort_ = func():void -> %b9 {
-  %b9 = block {
+%quicksort_ = func():void {
+  $B9: {
     %l_1:ptr<function, i32, read_write> = var
     %h_1:ptr<function, i32, read_write> = var
     %top:ptr<function, i32, read_write> = var
@@ -122,282 +125,304 @@
     store %l_1, 0i
     store %h_1, 9i
     store %top, -1i
-    %66:i32 = load %top
-    %x_274:i32 = add %66, 1i
+    %69:i32 = load %top
+    %70:i32 = add %69, 1i
+    %x_274:i32 = let %70
     store %top, %x_274
-    %68:ptr<function, i32, read_write> = access %stack, %x_274
-    %69:i32 = load %l_1
-    store %68, %69
-    %70:i32 = load %top
-    %x_278:i32 = add %70, 1i
-    store %top, %x_278
-    %72:ptr<function, i32, read_write> = access %stack, %x_278
-    %73:i32 = load %h_1
+    %72:ptr<function, i32, read_write> = access %stack, %x_274
+    %73:i32 = load %l_1
     store %72, %73
-    loop [b: %b10, c: %b11] {  # loop_2
-      %b10 = block {  # body
-        %74:i32 = load %top
-        %75:bool = gte %74, 0i
-        if %75 [t: %b12, f: %b13] {  # if_3
-          %b12 = block {  # true
+    %74:i32 = load %top
+    %75:i32 = add %74, 1i
+    %x_278:i32 = let %75
+    store %top, %x_278
+    %77:ptr<function, i32, read_write> = access %stack, %x_278
+    %78:i32 = load %h_1
+    store %77, %78
+    loop [b: $B10, c: $B11] {  # loop_2
+      $B10: {  # body
+        %79:i32 = load %top
+        %80:bool = gte %79, 0i
+        if %80 [t: $B12, f: $B13] {  # if_3
+          $B12: {  # true
             exit_if  # if_3
           }
-          %b13 = block {  # false
+          $B13: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_288:i32 = load %top
-        %77:i32 = load %top
-        %78:i32 = sub %77, 1i
-        store %top, %78
-        %79:ptr<function, i32, read_write> = access %stack, %x_288
-        %80:i32 = load %79
-        store %h_1, %80
-        %x_292:i32 = load %top
-        %82:i32 = load %top
-        %83:i32 = sub %82, 1i
-        store %top, %83
-        %84:ptr<function, i32, read_write> = access %stack, %x_292
-        %85:i32 = load %84
-        store %l_1, %85
-        %86:i32 = load %l_1
-        store %param_4, %86
-        %87:i32 = load %h_1
-        store %param_5, %87
-        %x_298:i32 = call %performPartition_i1_i1_, %param_4, %param_5
-        store %p, %x_298
-        %89:i32 = load %p
+        %81:i32 = load %top
+        %x_288:i32 = let %81
+        %83:i32 = load %top
+        %84:i32 = sub %83, 1i
+        store %top, %84
+        %85:ptr<function, i32, read_write> = access %stack, %x_288
+        %86:i32 = load %85
+        store %h_1, %86
+        %87:i32 = load %top
+        %x_292:i32 = let %87
+        %89:i32 = load %top
         %90:i32 = sub %89, 1i
-        %91:i32 = load %l_1
-        %92:bool = gt %90, %91
-        if %92 [t: %b14] {  # if_4
-          %b14 = block {  # true
-            %93:i32 = load %top
-            %x_306:i32 = add %93, 1i
+        store %top, %90
+        %91:ptr<function, i32, read_write> = access %stack, %x_292
+        %92:i32 = load %91
+        store %l_1, %92
+        %93:i32 = load %l_1
+        store %param_4, %93
+        %94:i32 = load %h_1
+        store %param_5, %94
+        %95:i32 = call %performPartition_i1_i1_, %param_4, %param_5
+        %x_298:i32 = let %95
+        store %p, %x_298
+        %97:i32 = load %p
+        %98:i32 = sub %97, 1i
+        %99:i32 = load %l_1
+        %100:bool = gt %98, %99
+        if %100 [t: $B14] {  # if_4
+          $B14: {  # true
+            %101:i32 = load %top
+            %102:i32 = add %101, 1i
+            %x_306:i32 = let %102
             store %top, %x_306
-            %95:ptr<function, i32, read_write> = access %stack, %x_306
-            %96:i32 = load %l_1
-            store %95, %96
-            %97:i32 = load %top
-            %x_310:i32 = add %97, 1i
+            %104:ptr<function, i32, read_write> = access %stack, %x_306
+            %105:i32 = load %l_1
+            store %104, %105
+            %106:i32 = load %top
+            %107:i32 = add %106, 1i
+            %x_310:i32 = let %107
             store %top, %x_310
-            %99:ptr<function, i32, read_write> = access %stack, %x_310
-            %100:i32 = load %p
-            %101:i32 = sub %100, 1i
-            store %99, %101
+            %109:ptr<function, i32, read_write> = access %stack, %x_310
+            %110:i32 = load %p
+            %111:i32 = sub %110, 1i
+            store %109, %111
             exit_if  # if_4
           }
         }
-        %102:i32 = load %p
-        %103:i32 = add %102, 1i
-        %104:i32 = load %h_1
-        %105:bool = lt %103, %104
-        if %105 [t: %b15] {  # if_5
-          %b15 = block {  # true
-            %106:i32 = load %top
-            %x_321:i32 = add %106, 1i
+        %112:i32 = load %p
+        %113:i32 = add %112, 1i
+        %114:i32 = load %h_1
+        %115:bool = lt %113, %114
+        if %115 [t: $B15] {  # if_5
+          $B15: {  # true
+            %116:i32 = load %top
+            %117:i32 = add %116, 1i
+            %x_321:i32 = let %117
             store %top, %x_321
-            %108:ptr<function, i32, read_write> = access %stack, %x_321
-            %109:i32 = load %p
-            %110:i32 = add %109, 1i
-            store %108, %110
-            %111:i32 = load %top
-            %x_326:i32 = add %111, 1i
+            %119:ptr<function, i32, read_write> = access %stack, %x_321
+            %120:i32 = load %p
+            %121:i32 = add %120, 1i
+            store %119, %121
+            %122:i32 = load %top
+            %123:i32 = add %122, 1i
+            %x_326:i32 = let %123
             store %top, %x_326
-            %113:ptr<function, i32, read_write> = access %stack, %x_326
-            %114:i32 = load %h_1
-            store %113, %114
+            %125:ptr<function, i32, read_write> = access %stack, %x_326
+            %126:i32 = load %h_1
+            store %125, %126
             exit_if  # if_5
           }
         }
-        continue %b11
+        continue  # -> $B11
       }
-      %b11 = block {  # continuing
-        next_iteration %b10
+      $B11: {  # continuing
+        next_iteration  # -> $B10
       }
     }
     ret
   }
 }
-%main_1 = func():void -> %b16 {
-  %b16 = block {
+%main_1 = func():void {
+  $B16: {
     %i_2:ptr<function, i32, read_write> = var
     %uv:ptr<function, vec2<f32>, read_write> = var
     %color:ptr<function, vec3<f32>, read_write> = var
     store %i_2, 0i
-    loop [b: %b17, c: %b18] {  # loop_3
-      %b17 = block {  # body
-        %119:i32 = load %i_2
-        %120:bool = lt %119, 10i
-        if %120 [t: %b19, f: %b20] {  # if_6
-          %b19 = block {  # true
+    loop [b: $B17, c: $B18] {  # loop_3
+      $B17: {  # body
+        %131:i32 = load %i_2
+        %132:bool = lt %131, 10i
+        if %132 [t: $B19, f: $B20] {  # if_6
+          $B19: {  # true
             exit_if  # if_6
           }
-          %b20 = block {  # false
+          $B20: {  # false
             exit_loop  # loop_3
           }
         }
-        %x_88:i32 = load %i_2
-        %122:ptr<private, i32, read_write> = access %obj, 0u, %x_88
-        %123:i32 = load %i_2
-        %124:i32 = sub 10i, %123
-        store %122, %124
-        %x_92:i32 = load %i_2
-        %126:ptr<private, i32, read_write> = access %obj, 0u, %x_92
-        %127:i32 = load %i_2
-        %128:ptr<private, i32, read_write> = access %obj, 0u, %127
-        %129:i32 = load %128
-        %130:i32 = load %i_2
-        %131:ptr<private, i32, read_write> = access %obj, 0u, %130
-        %132:i32 = load %131
-        %133:i32 = mul %129, %132
-        store %126, %133
-        continue %b18
+        %133:i32 = load %i_2
+        %x_88:i32 = let %133
+        %135:ptr<private, i32, read_write> = access %obj, 0u, %x_88
+        %136:i32 = load %i_2
+        %137:i32 = sub 10i, %136
+        store %135, %137
+        %138:i32 = load %i_2
+        %x_92:i32 = let %138
+        %140:ptr<private, i32, read_write> = access %obj, 0u, %x_92
+        %141:i32 = load %i_2
+        %142:ptr<private, i32, read_write> = access %obj, 0u, %141
+        %143:i32 = load %142
+        %144:i32 = load %i_2
+        %145:ptr<private, i32, read_write> = access %obj, 0u, %144
+        %146:i32 = load %145
+        %147:i32 = mul %143, %146
+        store %140, %147
+        continue  # -> $B18
       }
-      %b18 = block {  # continuing
-        %134:i32 = load %i_2
-        %135:i32 = add %134, 1i
-        store %i_2, %135
-        next_iteration %b17
+      $B18: {  # continuing
+        %148:i32 = load %i_2
+        %149:i32 = add %148, 1i
+        store %i_2, %149
+        next_iteration  # -> $B17
       }
     }
-    %136:void = call %quicksort_
-    %137:vec4<f32> = load %gl_FragCoord
-    %138:vec2<f32> = swizzle %137, xy
-    %139:ptr<uniform, vec2<f32>, read> = access %x_32, 0u
-    %140:vec2<f32> = load %139
-    %141:vec2<f32> = div %138, %140
-    store %uv, %141
+    %150:void = call %quicksort_
+    %151:vec4<f32> = load %gl_FragCoord
+    %152:vec2<f32> = swizzle %151, xy
+    %153:ptr<uniform, vec2<f32>, read> = access %x_32, 0u
+    %154:vec2<f32> = load %153
+    %155:vec2<f32> = div %152, %154
+    store %uv, %155
     store %color, vec3<f32>(1.0f, 2.0f, 3.0f)
-    %142:f32 = load_vector_element %color, 0u
-    %143:ptr<private, i32, read_write> = access %obj, 0u, 0i
-    %144:i32 = load %143
-    %145:f32 = convert %144
-    %146:f32 = add %142, %145
-    store_vector_element %color, 0u, %146
-    %147:f32 = load_vector_element %uv, 0u
-    %148:bool = gt %147, 0.25f
-    if %148 [t: %b21] {  # if_7
-      %b21 = block {  # true
-        %149:f32 = load_vector_element %color, 0u
-        %150:ptr<private, i32, read_write> = access %obj, 0u, 1i
-        %151:i32 = load %150
-        %152:f32 = convert %151
-        %153:f32 = add %149, %152
-        store_vector_element %color, 0u, %153
+    %156:f32 = load_vector_element %color, 0u
+    %157:f32 = let %156
+    %158:ptr<private, i32, read_write> = access %obj, 0u, 0i
+    %159:i32 = load %158
+    %160:f32 = convert %159
+    %161:f32 = add %157, %160
+    store_vector_element %color, 0u, %161
+    %162:f32 = load_vector_element %uv, 0u
+    %163:bool = gt %162, 0.25f
+    if %163 [t: $B21] {  # if_7
+      $B21: {  # true
+        %164:f32 = load_vector_element %color, 0u
+        %165:f32 = let %164
+        %166:ptr<private, i32, read_write> = access %obj, 0u, 1i
+        %167:i32 = load %166
+        %168:f32 = convert %167
+        %169:f32 = add %165, %168
+        store_vector_element %color, 0u, %169
         exit_if  # if_7
       }
     }
-    %154:f32 = load_vector_element %uv, 0u
-    %155:bool = gt %154, 0.5f
-    if %155 [t: %b22] {  # if_8
-      %b22 = block {  # true
-        %156:f32 = load_vector_element %color, 1u
-        %157:ptr<private, i32, read_write> = access %obj, 0u, 2i
-        %158:i32 = load %157
-        %159:f32 = convert %158
-        %160:f32 = add %156, %159
-        store_vector_element %color, 1u, %160
+    %170:f32 = load_vector_element %uv, 0u
+    %171:bool = gt %170, 0.5f
+    if %171 [t: $B22] {  # if_8
+      $B22: {  # true
+        %172:f32 = load_vector_element %color, 1u
+        %173:f32 = let %172
+        %174:ptr<private, i32, read_write> = access %obj, 0u, 2i
+        %175:i32 = load %174
+        %176:f32 = convert %175
+        %177:f32 = add %173, %176
+        store_vector_element %color, 1u, %177
         exit_if  # if_8
       }
     }
-    %161:f32 = load_vector_element %uv, 0u
-    %162:bool = gt %161, 0.75f
-    if %162 [t: %b23] {  # if_9
-      %b23 = block {  # true
-        %163:f32 = load_vector_element %color, 2u
-        %164:ptr<private, i32, read_write> = access %obj, 0u, 3i
-        %165:i32 = load %164
-        %166:f32 = convert %165
-        %167:f32 = add %163, %166
-        store_vector_element %color, 2u, %167
+    %178:f32 = load_vector_element %uv, 0u
+    %179:bool = gt %178, 0.75f
+    if %179 [t: $B23] {  # if_9
+      $B23: {  # true
+        %180:f32 = load_vector_element %color, 2u
+        %181:f32 = let %180
+        %182:ptr<private, i32, read_write> = access %obj, 0u, 3i
+        %183:i32 = load %182
+        %184:f32 = convert %183
+        %185:f32 = add %181, %184
+        store_vector_element %color, 2u, %185
         exit_if  # if_9
       }
     }
-    %168:f32 = load_vector_element %color, 1u
-    %169:ptr<private, i32, read_write> = access %obj, 0u, 4i
-    %170:i32 = load %169
-    %171:f32 = convert %170
-    %172:f32 = add %168, %171
-    store_vector_element %color, 1u, %172
-    %173:f32 = load_vector_element %uv, 1u
-    %174:bool = gt %173, 0.25f
-    if %174 [t: %b24] {  # if_10
-      %b24 = block {  # true
-        %175:f32 = load_vector_element %color, 0u
-        %176:ptr<private, i32, read_write> = access %obj, 0u, 5i
-        %177:i32 = load %176
-        %178:f32 = convert %177
-        %179:f32 = add %175, %178
-        store_vector_element %color, 0u, %179
+    %186:f32 = load_vector_element %color, 1u
+    %187:f32 = let %186
+    %188:ptr<private, i32, read_write> = access %obj, 0u, 4i
+    %189:i32 = load %188
+    %190:f32 = convert %189
+    %191:f32 = add %187, %190
+    store_vector_element %color, 1u, %191
+    %192:f32 = load_vector_element %uv, 1u
+    %193:bool = gt %192, 0.25f
+    if %193 [t: $B24] {  # if_10
+      $B24: {  # true
+        %194:f32 = load_vector_element %color, 0u
+        %195:f32 = let %194
+        %196:ptr<private, i32, read_write> = access %obj, 0u, 5i
+        %197:i32 = load %196
+        %198:f32 = convert %197
+        %199:f32 = add %195, %198
+        store_vector_element %color, 0u, %199
         exit_if  # if_10
       }
     }
-    %180:f32 = load_vector_element %uv, 1u
-    %181:bool = gt %180, 0.5f
-    if %181 [t: %b25] {  # if_11
-      %b25 = block {  # true
-        %182:f32 = load_vector_element %color, 1u
-        %183:ptr<private, i32, read_write> = access %obj, 0u, 6i
-        %184:i32 = load %183
-        %185:f32 = convert %184
-        %186:f32 = add %182, %185
-        store_vector_element %color, 1u, %186
+    %200:f32 = load_vector_element %uv, 1u
+    %201:bool = gt %200, 0.5f
+    if %201 [t: $B25] {  # if_11
+      $B25: {  # true
+        %202:f32 = load_vector_element %color, 1u
+        %203:f32 = let %202
+        %204:ptr<private, i32, read_write> = access %obj, 0u, 6i
+        %205:i32 = load %204
+        %206:f32 = convert %205
+        %207:f32 = add %203, %206
+        store_vector_element %color, 1u, %207
         exit_if  # if_11
       }
     }
-    %187:f32 = load_vector_element %uv, 1u
-    %188:bool = gt %187, 0.75f
-    if %188 [t: %b26] {  # if_12
-      %b26 = block {  # true
-        %189:f32 = load_vector_element %color, 2u
-        %190:ptr<private, i32, read_write> = access %obj, 0u, 7i
-        %191:i32 = load %190
-        %192:f32 = convert %191
-        %193:f32 = add %189, %192
-        store_vector_element %color, 2u, %193
+    %208:f32 = load_vector_element %uv, 1u
+    %209:bool = gt %208, 0.75f
+    if %209 [t: $B26] {  # if_12
+      $B26: {  # true
+        %210:f32 = load_vector_element %color, 2u
+        %211:f32 = let %210
+        %212:ptr<private, i32, read_write> = access %obj, 0u, 7i
+        %213:i32 = load %212
+        %214:f32 = convert %213
+        %215:f32 = add %211, %214
+        store_vector_element %color, 2u, %215
         exit_if  # if_12
       }
     }
-    %194:f32 = load_vector_element %color, 2u
-    %195:ptr<private, i32, read_write> = access %obj, 0u, 8i
-    %196:i32 = load %195
-    %197:f32 = convert %196
-    %198:f32 = add %194, %197
-    store_vector_element %color, 2u, %198
-    %199:f32 = load_vector_element %uv, 0u
-    %200:f32 = load_vector_element %uv, 1u
-    %201:f32 = sub %199, %200
-    %202:f32 = abs %201
-    %203:bool = lt %202, 0.25f
-    if %203 [t: %b27] {  # if_13
-      %b27 = block {  # true
-        %204:f32 = load_vector_element %color, 0u
-        %205:ptr<private, i32, read_write> = access %obj, 0u, 9i
-        %206:i32 = load %205
-        %207:f32 = convert %206
-        %208:f32 = add %204, %207
-        store_vector_element %color, 0u, %208
+    %216:f32 = load_vector_element %color, 2u
+    %217:f32 = let %216
+    %218:ptr<private, i32, read_write> = access %obj, 0u, 8i
+    %219:i32 = load %218
+    %220:f32 = convert %219
+    %221:f32 = add %217, %220
+    store_vector_element %color, 2u, %221
+    %222:f32 = load_vector_element %uv, 0u
+    %223:f32 = load_vector_element %uv, 1u
+    %224:f32 = sub %222, %223
+    %225:f32 = abs %224
+    %226:bool = lt %225, 0.25f
+    if %226 [t: $B27] {  # if_13
+      $B27: {  # true
+        %227:f32 = load_vector_element %color, 0u
+        %228:f32 = let %227
+        %229:ptr<private, i32, read_write> = access %obj, 0u, 9i
+        %230:i32 = load %229
+        %231:f32 = convert %230
+        %232:f32 = add %228, %231
+        store_vector_element %color, 0u, %232
         exit_if  # if_13
       }
     }
-    %209:vec3<f32> = load %color
-    %x_219:vec3<f32> = normalize %209
-    %211:f32 = access %x_219, 0u
-    %212:f32 = access %x_219, 1u
-    %213:f32 = access %x_219, 2u
-    %214:vec4<f32> = construct %211, %212, %213, 1.0f
-    store %x_GLF_color, %214
+    %233:vec3<f32> = load %color
+    %234:vec3<f32> = normalize %233
+    %x_219:vec3<f32> = let %234
+    %236:f32 = access %x_219, 0u
+    %237:f32 = access %x_219, 1u
+    %238:f32 = access %x_219, 2u
+    %239:vec4<f32> = construct %236, %237, %238, 1.0f
+    store %x_GLF_color, %239
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b28 {
-  %b28 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B28: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %217:void = call %main_1
-    %218:vec4<f32> = load %x_GLF_color
-    %219:main_out = construct %218
-    ret %219
+    %242:void = call %main_1
+    %243:vec4<f32> = load %x_GLF_color
+    %244:main_out = construct %243
+    ret %244
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-dontinline/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-dontinline/0-opt.wgsl.expected.ir.msl
index 4447e29..09a008a 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-dontinline/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-dontinline/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: QuicksortObject = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: QuicksortObject = struct @align(4) {
   numbers:array<i32, 10> @offset(0)
 }
 
@@ -12,35 +12,42 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %obj:ptr<private, QuicksortObject, read_write> = var
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_32:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%swap_i1_i1_ = func(%i:ptr<function, i32, read_write>, %j:ptr<function, i32, read_write>):void -> %b2 {
-  %b2 = block {
+%swap_i1_i1_ = func(%i:ptr<function, i32, read_write>, %j:ptr<function, i32, read_write>):void {
+  $B2: {
     %temp:ptr<function, i32, read_write> = var
-    %x_225:i32 = load %i
-    %10:ptr<private, i32, read_write> = access %obj, 0u, %x_225
-    %x_227:i32 = load %10
+    %9:i32 = load %i
+    %x_225:i32 = let %9
+    %11:ptr<private, i32, read_write> = access %obj, 0u, %x_225
+    %12:i32 = load %11
+    %x_227:i32 = let %12
     store %temp, %x_227
-    %x_228:i32 = load %i
-    %x_229:i32 = load %j
-    %14:ptr<private, i32, read_write> = access %obj, 0u, %x_229
-    %x_231:i32 = load %14
-    %16:ptr<private, i32, read_write> = access %obj, 0u, %x_228
-    store %16, %x_231
-    %x_233:i32 = load %j
-    %x_234:i32 = load %temp
-    %19:ptr<private, i32, read_write> = access %obj, 0u, %x_233
-    store %19, %x_234
+    %14:i32 = load %i
+    %x_228:i32 = let %14
+    %16:i32 = load %j
+    %x_229:i32 = let %16
+    %18:ptr<private, i32, read_write> = access %obj, 0u, %x_229
+    %19:i32 = load %18
+    %x_231:i32 = let %19
+    %21:ptr<private, i32, read_write> = access %obj, 0u, %x_228
+    store %21, %x_231
+    %22:i32 = load %j
+    %x_233:i32 = let %22
+    %24:i32 = load %temp
+    %x_234:i32 = let %24
+    %26:ptr<private, i32, read_write> = access %obj, 0u, %x_233
+    store %26, %x_234
     ret
   }
 }
-%performPartition_i1_i1_ = func(%l:ptr<function, i32, read_write>, %h:ptr<function, i32, read_write>):i32 -> %b3 {
-  %b3 = block {
+%performPartition_i1_i1_ = func(%l:ptr<function, i32, read_write>, %h:ptr<function, i32, read_write>):i32 {
+  $B3: {
     %pivot:ptr<function, i32, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
     %j_1:ptr<function, i32, read_write> = var
@@ -48,70 +55,87 @@
     %param_1:ptr<function, i32, read_write> = var
     %param_2:ptr<function, i32, read_write> = var
     %param_3:ptr<function, i32, read_write> = var
-    %x_237:i32 = load %h
-    %31:ptr<private, i32, read_write> = access %obj, 0u, %x_237
-    %x_239:i32 = load %31
+    %37:i32 = load %h
+    %x_237:i32 = let %37
+    %39:ptr<private, i32, read_write> = access %obj, 0u, %x_237
+    %40:i32 = load %39
+    %x_239:i32 = let %40
     store %pivot, %x_239
-    %x_240:i32 = load %l
-    %34:i32 = sub %x_240, 1i
-    store %i_1, %34
-    %x_242:i32 = load %l
+    %42:i32 = load %l
+    %x_240:i32 = let %42
+    %44:i32 = sub %x_240, 1i
+    store %i_1, %44
+    %45:i32 = load %l
+    %x_242:i32 = let %45
     store %j_1, %x_242
-    loop [b: %b4, c: %b5] {  # loop_1
-      %b4 = block {  # body
-        %x_247:i32 = load %j_1
-        %x_248:i32 = load %h
-        %38:i32 = sub %x_248, 1i
-        %39:bool = lte %x_247, %38
-        if %39 [t: %b6, f: %b7] {  # if_1
-          %b6 = block {  # true
+    loop [b: $B4, c: $B5] {  # loop_1
+      $B4: {  # body
+        %47:i32 = load %j_1
+        %x_247:i32 = let %47
+        %49:i32 = load %h
+        %x_248:i32 = let %49
+        %51:i32 = sub %x_248, 1i
+        %52:bool = lte %x_247, %51
+        if %52 [t: $B6, f: $B7] {  # if_1
+          $B6: {  # true
             exit_if  # if_1
           }
-          %b7 = block {  # false
+          $B7: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_252:i32 = load %j_1
-        %41:ptr<private, i32, read_write> = access %obj, 0u, %x_252
-        %x_254:i32 = load %41
-        %x_255:i32 = load %pivot
-        %44:bool = lte %x_254, %x_255
-        if %44 [t: %b8] {  # if_2
-          %b8 = block {  # true
-            %x_259:i32 = load %i_1
-            %46:i32 = add %x_259, 1i
-            store %i_1, %46
-            %x_261:i32 = load %i_1
+        %53:i32 = load %j_1
+        %x_252:i32 = let %53
+        %55:ptr<private, i32, read_write> = access %obj, 0u, %x_252
+        %56:i32 = load %55
+        %x_254:i32 = let %56
+        %58:i32 = load %pivot
+        %x_255:i32 = let %58
+        %60:bool = lte %x_254, %x_255
+        if %60 [t: $B8] {  # if_2
+          $B8: {  # true
+            %61:i32 = load %i_1
+            %x_259:i32 = let %61
+            %63:i32 = add %x_259, 1i
+            store %i_1, %63
+            %64:i32 = load %i_1
+            %x_261:i32 = let %64
             store %param, %x_261
-            %x_262:i32 = load %j_1
+            %66:i32 = load %j_1
+            %x_262:i32 = let %66
             store %param_1, %x_262
-            %49:void = call %swap_i1_i1_, %param, %param_1
+            %68:void = call %swap_i1_i1_, %param, %param_1
             exit_if  # if_2
           }
         }
-        continue %b5
+        continue  # -> $B5
       }
-      %b5 = block {  # continuing
-        %x_264:i32 = load %j_1
-        %51:i32 = add %x_264, 1i
-        store %j_1, %51
-        next_iteration %b4
+      $B5: {  # continuing
+        %69:i32 = load %j_1
+        %x_264:i32 = let %69
+        %71:i32 = add %x_264, 1i
+        store %j_1, %71
+        next_iteration  # -> $B4
       }
     }
-    %x_266:i32 = load %i_1
-    %53:i32 = add %x_266, 1i
-    store %i_1, %53
-    %x_268:i32 = load %i_1
+    %72:i32 = load %i_1
+    %x_266:i32 = let %72
+    %74:i32 = add %x_266, 1i
+    store %i_1, %74
+    %75:i32 = load %i_1
+    %x_268:i32 = let %75
     store %param_2, %x_268
-    %x_269:i32 = load %h
+    %77:i32 = load %h
+    %x_269:i32 = let %77
     store %param_3, %x_269
-    %56:void = call %swap_i1_i1_, %param_2, %param_3
-    %x_271:i32 = load %i_1
+    %79:void = call %swap_i1_i1_, %param_2, %param_3
+    %80:i32 = load %i_1
+    %x_271:i32 = let %80
     ret %x_271
   }
 }
-%quicksort_ = func():void -> %b9 {
-  %b9 = block {
+%quicksort_ = func():void {
+  $B9: {
     %l_1:ptr<function, i32, read_write> = var
     %h_1:ptr<function, i32, read_write> = var
     %top:ptr<function, i32, read_write> = var
@@ -122,282 +146,353 @@
     store %l_1, 0i
     store %h_1, 9i
     store %top, -1i
-    %x_273:i32 = load %top
-    %x_274:i32 = add %x_273, 1i
+    %90:i32 = load %top
+    %x_273:i32 = let %90
+    %92:i32 = add %x_273, 1i
+    %x_274:i32 = let %92
     store %top, %x_274
-    %x_275:i32 = load %l_1
-    %69:ptr<function, i32, read_write> = access %stack, %x_274
-    store %69, %x_275
-    %x_277:i32 = load %top
-    %x_278:i32 = add %x_277, 1i
+    %94:i32 = load %l_1
+    %x_275:i32 = let %94
+    %96:ptr<function, i32, read_write> = access %stack, %x_274
+    store %96, %x_275
+    %97:i32 = load %top
+    %x_277:i32 = let %97
+    %99:i32 = add %x_277, 1i
+    %x_278:i32 = let %99
     store %top, %x_278
-    %x_279:i32 = load %h_1
-    %73:ptr<function, i32, read_write> = access %stack, %x_278
-    store %73, %x_279
-    loop [b: %b10, c: %b11] {  # loop_2
-      %b10 = block {  # body
-        %x_285:i32 = load %top
-        %75:bool = gte %x_285, 0i
-        if %75 [t: %b12, f: %b13] {  # if_3
-          %b12 = block {  # true
+    %101:i32 = load %h_1
+    %x_279:i32 = let %101
+    %103:ptr<function, i32, read_write> = access %stack, %x_278
+    store %103, %x_279
+    loop [b: $B10, c: $B11] {  # loop_2
+      $B10: {  # body
+        %104:i32 = load %top
+        %x_285:i32 = let %104
+        %106:bool = gte %x_285, 0i
+        if %106 [t: $B12, f: $B13] {  # if_3
+          $B12: {  # true
             exit_if  # if_3
           }
-          %b13 = block {  # false
+          $B13: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_288:i32 = load %top
-        %77:i32 = sub %x_288, 1i
-        store %top, %77
-        %78:ptr<function, i32, read_write> = access %stack, %x_288
-        %x_291:i32 = load %78
+        %107:i32 = load %top
+        %x_288:i32 = let %107
+        %109:i32 = sub %x_288, 1i
+        store %top, %109
+        %110:ptr<function, i32, read_write> = access %stack, %x_288
+        %111:i32 = load %110
+        %x_291:i32 = let %111
         store %h_1, %x_291
-        %x_292:i32 = load %top
-        %81:i32 = sub %x_292, 1i
-        store %top, %81
-        %82:ptr<function, i32, read_write> = access %stack, %x_292
-        %x_295:i32 = load %82
+        %113:i32 = load %top
+        %x_292:i32 = let %113
+        %115:i32 = sub %x_292, 1i
+        store %top, %115
+        %116:ptr<function, i32, read_write> = access %stack, %x_292
+        %117:i32 = load %116
+        %x_295:i32 = let %117
         store %l_1, %x_295
-        %x_296:i32 = load %l_1
+        %119:i32 = load %l_1
+        %x_296:i32 = let %119
         store %param_4, %x_296
-        %x_297:i32 = load %h_1
+        %121:i32 = load %h_1
+        %x_297:i32 = let %121
         store %param_5, %x_297
-        %x_298:i32 = call %performPartition_i1_i1_, %param_4, %param_5
+        %123:i32 = call %performPartition_i1_i1_, %param_4, %param_5
+        %x_298:i32 = let %123
         store %p, %x_298
-        %x_299:i32 = load %p
-        %x_301:i32 = load %l_1
-        %89:i32 = sub %x_299, 1i
-        %90:bool = gt %89, %x_301
-        if %90 [t: %b14] {  # if_4
-          %b14 = block {  # true
-            %x_305:i32 = load %top
-            %x_306:i32 = add %x_305, 1i
+        %125:i32 = load %p
+        %x_299:i32 = let %125
+        %127:i32 = load %l_1
+        %x_301:i32 = let %127
+        %129:i32 = sub %x_299, 1i
+        %130:bool = gt %129, %x_301
+        if %130 [t: $B14] {  # if_4
+          $B14: {  # true
+            %131:i32 = load %top
+            %x_305:i32 = let %131
+            %133:i32 = add %x_305, 1i
+            %x_306:i32 = let %133
             store %top, %x_306
-            %x_307:i32 = load %l_1
-            %94:ptr<function, i32, read_write> = access %stack, %x_306
-            store %94, %x_307
-            %x_309:i32 = load %top
-            %x_310:i32 = add %x_309, 1i
+            %135:i32 = load %l_1
+            %x_307:i32 = let %135
+            %137:ptr<function, i32, read_write> = access %stack, %x_306
+            store %137, %x_307
+            %138:i32 = load %top
+            %x_309:i32 = let %138
+            %140:i32 = add %x_309, 1i
+            %x_310:i32 = let %140
             store %top, %x_310
-            %x_311:i32 = load %p
-            %98:ptr<function, i32, read_write> = access %stack, %x_310
-            %99:i32 = sub %x_311, 1i
-            store %98, %99
+            %142:i32 = load %p
+            %x_311:i32 = let %142
+            %144:ptr<function, i32, read_write> = access %stack, %x_310
+            %145:i32 = sub %x_311, 1i
+            store %144, %145
             exit_if  # if_4
           }
         }
-        %x_314:i32 = load %p
-        %x_316:i32 = load %h_1
-        %102:i32 = add %x_314, 1i
-        %103:bool = lt %102, %x_316
-        if %103 [t: %b15] {  # if_5
-          %b15 = block {  # true
-            %x_320:i32 = load %top
-            %x_321:i32 = add %x_320, 1i
+        %146:i32 = load %p
+        %x_314:i32 = let %146
+        %148:i32 = load %h_1
+        %x_316:i32 = let %148
+        %150:i32 = add %x_314, 1i
+        %151:bool = lt %150, %x_316
+        if %151 [t: $B15] {  # if_5
+          $B15: {  # true
+            %152:i32 = load %top
+            %x_320:i32 = let %152
+            %154:i32 = add %x_320, 1i
+            %x_321:i32 = let %154
             store %top, %x_321
-            %x_322:i32 = load %p
-            %107:ptr<function, i32, read_write> = access %stack, %x_321
-            %108:i32 = add %x_322, 1i
-            store %107, %108
-            %x_325:i32 = load %top
-            %x_326:i32 = add %x_325, 1i
+            %156:i32 = load %p
+            %x_322:i32 = let %156
+            %158:ptr<function, i32, read_write> = access %stack, %x_321
+            %159:i32 = add %x_322, 1i
+            store %158, %159
+            %160:i32 = load %top
+            %x_325:i32 = let %160
+            %162:i32 = add %x_325, 1i
+            %x_326:i32 = let %162
             store %top, %x_326
-            %x_327:i32 = load %h_1
-            %112:ptr<function, i32, read_write> = access %stack, %x_326
-            store %112, %x_327
+            %164:i32 = load %h_1
+            %x_327:i32 = let %164
+            %166:ptr<function, i32, read_write> = access %stack, %x_326
+            store %166, %x_327
             exit_if  # if_5
           }
         }
-        continue %b11
+        continue  # -> $B11
       }
-      %b11 = block {  # continuing
-        next_iteration %b10
+      $B11: {  # continuing
+        next_iteration  # -> $B10
       }
     }
     ret
   }
 }
-%main_1 = func():void -> %b16 {
-  %b16 = block {
+%main_1 = func():void {
+  $B16: {
     %i_2:ptr<function, i32, read_write> = var
     %uv:ptr<function, vec2<f32>, read_write> = var
     %color:ptr<function, vec3<f32>, read_write> = var
     store %i_2, 0i
-    loop [b: %b17, c: %b18] {  # loop_3
-      %b17 = block {  # body
-        %x_85:i32 = load %i_2
-        %118:bool = lt %x_85, 10i
-        if %118 [t: %b19, f: %b20] {  # if_6
-          %b19 = block {  # true
+    loop [b: $B17, c: $B18] {  # loop_3
+      $B17: {  # body
+        %171:i32 = load %i_2
+        %x_85:i32 = let %171
+        %173:bool = lt %x_85, 10i
+        if %173 [t: $B19, f: $B20] {  # if_6
+          $B19: {  # true
             exit_if  # if_6
           }
-          %b20 = block {  # false
+          $B20: {  # false
             exit_loop  # loop_3
           }
         }
-        %x_88:i32 = load %i_2
-        %x_89:i32 = load %i_2
-        %121:ptr<private, i32, read_write> = access %obj, 0u, %x_88
-        %122:i32 = sub 10i, %x_89
-        store %121, %122
-        %x_92:i32 = load %i_2
-        %x_93:i32 = load %i_2
-        %125:ptr<private, i32, read_write> = access %obj, 0u, %x_93
-        %x_95:i32 = load %125
-        %x_96:i32 = load %i_2
-        %128:ptr<private, i32, read_write> = access %obj, 0u, %x_96
-        %x_98:i32 = load %128
-        %130:ptr<private, i32, read_write> = access %obj, 0u, %x_92
-        %131:i32 = mul %x_95, %x_98
-        store %130, %131
-        continue %b18
+        %174:i32 = load %i_2
+        %x_88:i32 = let %174
+        %176:i32 = load %i_2
+        %x_89:i32 = let %176
+        %178:ptr<private, i32, read_write> = access %obj, 0u, %x_88
+        %179:i32 = sub 10i, %x_89
+        store %178, %179
+        %180:i32 = load %i_2
+        %x_92:i32 = let %180
+        %182:i32 = load %i_2
+        %x_93:i32 = let %182
+        %184:ptr<private, i32, read_write> = access %obj, 0u, %x_93
+        %185:i32 = load %184
+        %x_95:i32 = let %185
+        %187:i32 = load %i_2
+        %x_96:i32 = let %187
+        %189:ptr<private, i32, read_write> = access %obj, 0u, %x_96
+        %190:i32 = load %189
+        %x_98:i32 = let %190
+        %192:ptr<private, i32, read_write> = access %obj, 0u, %x_92
+        %193:i32 = mul %x_95, %x_98
+        store %192, %193
+        continue  # -> $B18
       }
-      %b18 = block {  # continuing
-        %x_101:i32 = load %i_2
-        %133:i32 = add %x_101, 1i
-        store %i_2, %133
-        next_iteration %b17
+      $B18: {  # continuing
+        %194:i32 = load %i_2
+        %x_101:i32 = let %194
+        %196:i32 = add %x_101, 1i
+        store %i_2, %196
+        next_iteration  # -> $B17
       }
     }
-    %134:void = call %quicksort_
-    %x_104:vec4<f32> = load %gl_FragCoord
-    %136:ptr<uniform, vec2<f32>, read> = access %x_32, 0u
-    %x_107:vec2<f32> = load %136
-    %138:f32 = access %x_104, 0u
-    %139:f32 = access %x_104, 1u
-    %140:vec2<f32> = construct %138, %139
-    %141:vec2<f32> = div %140, %x_107
-    store %uv, %141
+    %197:void = call %quicksort_
+    %198:vec4<f32> = load %gl_FragCoord
+    %x_104:vec4<f32> = let %198
+    %200:ptr<uniform, vec2<f32>, read> = access %x_32, 0u
+    %201:vec2<f32> = load %200
+    %x_107:vec2<f32> = let %201
+    %203:f32 = access %x_104, 0u
+    %204:f32 = access %x_104, 1u
+    %205:vec2<f32> = construct %203, %204
+    %206:vec2<f32> = div %205, %x_107
+    store %uv, %206
     store %color, vec3<f32>(1.0f, 2.0f, 3.0f)
-    %142:ptr<private, i32, read_write> = access %obj, 0u, 0i
-    %x_110:i32 = load %142
-    %x_113:f32 = load_vector_element %color, 0u
-    %145:f32 = convert %x_110
-    %146:f32 = add %x_113, %145
-    store_vector_element %color, 0u, %146
-    %x_117:f32 = load_vector_element %uv, 0u
-    %148:bool = gt %x_117, 0.25f
-    if %148 [t: %b21] {  # if_7
-      %b21 = block {  # true
-        %149:ptr<private, i32, read_write> = access %obj, 0u, 1i
-        %x_122:i32 = load %149
-        %x_125:f32 = load_vector_element %color, 0u
-        %152:f32 = convert %x_122
-        %153:f32 = add %x_125, %152
-        store_vector_element %color, 0u, %153
+    %207:ptr<private, i32, read_write> = access %obj, 0u, 0i
+    %208:i32 = load %207
+    %x_110:i32 = let %208
+    %210:f32 = load_vector_element %color, 0u
+    %x_113:f32 = let %210
+    %212:f32 = convert %x_110
+    %213:f32 = add %x_113, %212
+    store_vector_element %color, 0u, %213
+    %214:f32 = load_vector_element %uv, 0u
+    %x_117:f32 = let %214
+    %216:bool = gt %x_117, 0.25f
+    if %216 [t: $B21] {  # if_7
+      $B21: {  # true
+        %217:ptr<private, i32, read_write> = access %obj, 0u, 1i
+        %218:i32 = load %217
+        %x_122:i32 = let %218
+        %220:f32 = load_vector_element %color, 0u
+        %x_125:f32 = let %220
+        %222:f32 = convert %x_122
+        %223:f32 = add %x_125, %222
+        store_vector_element %color, 0u, %223
         exit_if  # if_7
       }
     }
-    %x_129:f32 = load_vector_element %uv, 0u
-    %155:bool = gt %x_129, 0.5f
-    if %155 [t: %b22] {  # if_8
-      %b22 = block {  # true
-        %156:ptr<private, i32, read_write> = access %obj, 0u, 2i
-        %x_134:i32 = load %156
-        %x_137:f32 = load_vector_element %color, 1u
-        %159:f32 = convert %x_134
-        %160:f32 = add %x_137, %159
-        store_vector_element %color, 1u, %160
+    %224:f32 = load_vector_element %uv, 0u
+    %x_129:f32 = let %224
+    %226:bool = gt %x_129, 0.5f
+    if %226 [t: $B22] {  # if_8
+      $B22: {  # true
+        %227:ptr<private, i32, read_write> = access %obj, 0u, 2i
+        %228:i32 = load %227
+        %x_134:i32 = let %228
+        %230:f32 = load_vector_element %color, 1u
+        %x_137:f32 = let %230
+        %232:f32 = convert %x_134
+        %233:f32 = add %x_137, %232
+        store_vector_element %color, 1u, %233
         exit_if  # if_8
       }
     }
-    %x_141:f32 = load_vector_element %uv, 0u
-    %162:bool = gt %x_141, 0.75f
-    if %162 [t: %b23] {  # if_9
-      %b23 = block {  # true
-        %163:ptr<private, i32, read_write> = access %obj, 0u, 3i
-        %x_146:i32 = load %163
-        %x_149:f32 = load_vector_element %color, 2u
-        %166:f32 = convert %x_146
-        %167:f32 = add %x_149, %166
-        store_vector_element %color, 2u, %167
+    %234:f32 = load_vector_element %uv, 0u
+    %x_141:f32 = let %234
+    %236:bool = gt %x_141, 0.75f
+    if %236 [t: $B23] {  # if_9
+      $B23: {  # true
+        %237:ptr<private, i32, read_write> = access %obj, 0u, 3i
+        %238:i32 = load %237
+        %x_146:i32 = let %238
+        %240:f32 = load_vector_element %color, 2u
+        %x_149:f32 = let %240
+        %242:f32 = convert %x_146
+        %243:f32 = add %x_149, %242
+        store_vector_element %color, 2u, %243
         exit_if  # if_9
       }
     }
-    %168:ptr<private, i32, read_write> = access %obj, 0u, 4i
-    %x_153:i32 = load %168
-    %x_156:f32 = load_vector_element %color, 1u
-    %171:f32 = convert %x_153
-    %172:f32 = add %x_156, %171
-    store_vector_element %color, 1u, %172
-    %x_160:f32 = load_vector_element %uv, 1u
-    %174:bool = gt %x_160, 0.25f
-    if %174 [t: %b24] {  # if_10
-      %b24 = block {  # true
-        %175:ptr<private, i32, read_write> = access %obj, 0u, 5i
-        %x_165:i32 = load %175
-        %x_168:f32 = load_vector_element %color, 0u
-        %178:f32 = convert %x_165
-        %179:f32 = add %x_168, %178
-        store_vector_element %color, 0u, %179
+    %244:ptr<private, i32, read_write> = access %obj, 0u, 4i
+    %245:i32 = load %244
+    %x_153:i32 = let %245
+    %247:f32 = load_vector_element %color, 1u
+    %x_156:f32 = let %247
+    %249:f32 = convert %x_153
+    %250:f32 = add %x_156, %249
+    store_vector_element %color, 1u, %250
+    %251:f32 = load_vector_element %uv, 1u
+    %x_160:f32 = let %251
+    %253:bool = gt %x_160, 0.25f
+    if %253 [t: $B24] {  # if_10
+      $B24: {  # true
+        %254:ptr<private, i32, read_write> = access %obj, 0u, 5i
+        %255:i32 = load %254
+        %x_165:i32 = let %255
+        %257:f32 = load_vector_element %color, 0u
+        %x_168:f32 = let %257
+        %259:f32 = convert %x_165
+        %260:f32 = add %x_168, %259
+        store_vector_element %color, 0u, %260
         exit_if  # if_10
       }
     }
-    %x_172:f32 = load_vector_element %uv, 1u
-    %181:bool = gt %x_172, 0.5f
-    if %181 [t: %b25] {  # if_11
-      %b25 = block {  # true
-        %182:ptr<private, i32, read_write> = access %obj, 0u, 6i
-        %x_177:i32 = load %182
-        %x_180:f32 = load_vector_element %color, 1u
-        %185:f32 = convert %x_177
-        %186:f32 = add %x_180, %185
-        store_vector_element %color, 1u, %186
+    %261:f32 = load_vector_element %uv, 1u
+    %x_172:f32 = let %261
+    %263:bool = gt %x_172, 0.5f
+    if %263 [t: $B25] {  # if_11
+      $B25: {  # true
+        %264:ptr<private, i32, read_write> = access %obj, 0u, 6i
+        %265:i32 = load %264
+        %x_177:i32 = let %265
+        %267:f32 = load_vector_element %color, 1u
+        %x_180:f32 = let %267
+        %269:f32 = convert %x_177
+        %270:f32 = add %x_180, %269
+        store_vector_element %color, 1u, %270
         exit_if  # if_11
       }
     }
-    %x_184:f32 = load_vector_element %uv, 1u
-    %188:bool = gt %x_184, 0.75f
-    if %188 [t: %b26] {  # if_12
-      %b26 = block {  # true
-        %189:ptr<private, i32, read_write> = access %obj, 0u, 7i
-        %x_189:i32 = load %189
-        %x_192:f32 = load_vector_element %color, 2u
-        %192:f32 = convert %x_189
-        %193:f32 = add %x_192, %192
-        store_vector_element %color, 2u, %193
+    %271:f32 = load_vector_element %uv, 1u
+    %x_184:f32 = let %271
+    %273:bool = gt %x_184, 0.75f
+    if %273 [t: $B26] {  # if_12
+      $B26: {  # true
+        %274:ptr<private, i32, read_write> = access %obj, 0u, 7i
+        %275:i32 = load %274
+        %x_189:i32 = let %275
+        %277:f32 = load_vector_element %color, 2u
+        %x_192:f32 = let %277
+        %279:f32 = convert %x_189
+        %280:f32 = add %x_192, %279
+        store_vector_element %color, 2u, %280
         exit_if  # if_12
       }
     }
-    %194:ptr<private, i32, read_write> = access %obj, 0u, 8i
-    %x_196:i32 = load %194
-    %x_199:f32 = load_vector_element %color, 2u
-    %197:f32 = convert %x_196
-    %198:f32 = add %x_199, %197
-    store_vector_element %color, 2u, %198
-    %x_203:f32 = load_vector_element %uv, 0u
-    %x_205:f32 = load_vector_element %uv, 1u
-    %201:f32 = sub %x_203, %x_205
-    %202:f32 = abs %201
-    %203:bool = lt %202, 0.25f
-    if %203 [t: %b27] {  # if_13
-      %b27 = block {  # true
-        %204:ptr<private, i32, read_write> = access %obj, 0u, 9i
-        %x_212:i32 = load %204
-        %x_215:f32 = load_vector_element %color, 0u
-        %207:f32 = convert %x_212
-        %208:f32 = add %x_215, %207
-        store_vector_element %color, 0u, %208
+    %281:ptr<private, i32, read_write> = access %obj, 0u, 8i
+    %282:i32 = load %281
+    %x_196:i32 = let %282
+    %284:f32 = load_vector_element %color, 2u
+    %x_199:f32 = let %284
+    %286:f32 = convert %x_196
+    %287:f32 = add %x_199, %286
+    store_vector_element %color, 2u, %287
+    %288:f32 = load_vector_element %uv, 0u
+    %x_203:f32 = let %288
+    %290:f32 = load_vector_element %uv, 1u
+    %x_205:f32 = let %290
+    %292:f32 = sub %x_203, %x_205
+    %293:f32 = abs %292
+    %294:bool = lt %293, 0.25f
+    if %294 [t: $B27] {  # if_13
+      $B27: {  # true
+        %295:ptr<private, i32, read_write> = access %obj, 0u, 9i
+        %296:i32 = load %295
+        %x_212:i32 = let %296
+        %298:f32 = load_vector_element %color, 0u
+        %x_215:f32 = let %298
+        %300:f32 = convert %x_212
+        %301:f32 = add %x_215, %300
+        store_vector_element %color, 0u, %301
         exit_if  # if_13
       }
     }
-    %x_218:vec3<f32> = load %color
-    %x_219:vec3<f32> = normalize %x_218
-    %211:f32 = access %x_219, 0u
-    %212:f32 = access %x_219, 1u
-    %213:f32 = access %x_219, 2u
-    %214:vec4<f32> = construct %211, %212, %213, 1.0f
-    store %x_GLF_color, %214
+    %302:vec3<f32> = load %color
+    %x_218:vec3<f32> = let %302
+    %304:vec3<f32> = normalize %x_218
+    %x_219:vec3<f32> = let %304
+    %306:f32 = access %x_219, 0u
+    %307:f32 = access %x_219, 1u
+    %308:f32 = access %x_219, 2u
+    %309:vec4<f32> = construct %306, %307, %308, 1.0f
+    store %x_GLF_color, %309
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b28 {
-  %b28 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B28: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %217:void = call %main_1
-    %218:vec4<f32> = load %x_GLF_color
-    %219:main_out = construct %218
-    ret %219
+    %312:void = call %main_1
+    %313:vec4<f32> = load %x_GLF_color
+    %314:main_out = construct %313
+    ret %314
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-mat-func-param/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-mat-func-param/1.spvasm.expected.ir.msl
index 14c8f22..778dc46 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-mat-func-param/1.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-mat-func-param/1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: QuicksortObject = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: QuicksortObject = struct @align(4) {
   numbers:array<i32, 10> @offset(0)
 }
 
@@ -12,35 +12,37 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %obj:ptr<private, QuicksortObject, read_write> = var
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_32:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%swap_i1_i1_ = func(%i:ptr<function, i32, read_write>, %j:ptr<function, i32, read_write>, %x_228:mat3x3<f32>):void -> %b2 {
-  %b2 = block {
+%swap_i1_i1_ = func(%i:ptr<function, i32, read_write>, %j:ptr<function, i32, read_write>, %x_228:mat3x3<f32>):void {
+  $B2: {
     %temp:ptr<function, i32, read_write> = var
     %10:i32 = load %i
     %11:ptr<private, i32, read_write> = access %obj, 0u, %10
     %12:i32 = load %11
     store %temp, %12
-    %x_233:i32 = load %i
-    %14:ptr<private, i32, read_write> = access %obj, 0u, %x_233
-    %15:i32 = load %j
-    %16:ptr<private, i32, read_write> = access %obj, 0u, %15
-    %17:i32 = load %16
-    store %14, %17
-    %x_238:i32 = load %j
-    %19:ptr<private, i32, read_write> = access %obj, 0u, %x_238
-    %20:i32 = load %temp
-    store %19, %20
+    %13:i32 = load %i
+    %x_233:i32 = let %13
+    %15:ptr<private, i32, read_write> = access %obj, 0u, %x_233
+    %16:i32 = load %j
+    %17:ptr<private, i32, read_write> = access %obj, 0u, %16
+    %18:i32 = load %17
+    store %15, %18
+    %19:i32 = load %j
+    %x_238:i32 = let %19
+    %21:ptr<private, i32, read_write> = access %obj, 0u, %x_238
+    %22:i32 = load %temp
+    store %21, %22
     ret
   }
 }
-%performPartition_i1_i1_ = func(%l:ptr<function, i32, read_write>, %h:ptr<function, i32, read_write>):i32 -> %b3 {
-  %b3 = block {
+%performPartition_i1_i1_ = func(%l:ptr<function, i32, read_write>, %h:ptr<function, i32, read_write>):i32 {
+  $B3: {
     %pivot:ptr<function, i32, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
     %j_1:ptr<function, i32, read_write> = var
@@ -48,70 +50,71 @@
     %param_1:ptr<function, i32, read_write> = var
     %param_2:ptr<function, i32, read_write> = var
     %param_3:ptr<function, i32, read_write> = var
-    %31:i32 = load %h
-    %32:ptr<private, i32, read_write> = access %obj, 0u, %31
-    %33:i32 = load %32
-    store %pivot, %33
-    %34:i32 = load %l
-    %35:i32 = sub %34, 1i
-    store %i_1, %35
+    %33:i32 = load %h
+    %34:ptr<private, i32, read_write> = access %obj, 0u, %33
+    %35:i32 = load %34
+    store %pivot, %35
     %36:i32 = load %l
-    store %j_1, %36
-    loop [b: %b4, c: %b5] {  # loop_1
-      %b4 = block {  # body
-        %37:i32 = load %j_1
-        %38:i32 = load %h
-        %39:i32 = sub %38, 1i
-        %40:bool = lte %37, %39
-        if %40 [t: %b6, f: %b7] {  # if_1
-          %b6 = block {  # true
+    %37:i32 = sub %36, 1i
+    store %i_1, %37
+    %38:i32 = load %l
+    store %j_1, %38
+    loop [b: $B4, c: $B5] {  # loop_1
+      $B4: {  # body
+        %39:i32 = load %j_1
+        %40:i32 = load %h
+        %41:i32 = sub %40, 1i
+        %42:bool = lte %39, %41
+        if %42 [t: $B6, f: $B7] {  # if_1
+          $B6: {  # true
             exit_if  # if_1
           }
-          %b7 = block {  # false
+          $B7: {  # false
             exit_loop  # loop_1
           }
         }
-        %41:i32 = load %j_1
-        %42:ptr<private, i32, read_write> = access %obj, 0u, %41
-        %43:i32 = load %42
-        %44:i32 = load %pivot
-        %45:bool = lte %43, %44
-        if %45 [t: %b8] {  # if_2
-          %b8 = block {  # true
-            %46:i32 = load %i_1
-            %47:i32 = add %46, 1i
-            store %i_1, %47
+        %43:i32 = load %j_1
+        %44:ptr<private, i32, read_write> = access %obj, 0u, %43
+        %45:i32 = load %44
+        %46:i32 = load %pivot
+        %47:bool = lte %45, %46
+        if %47 [t: $B8] {  # if_2
+          $B8: {  # true
             %48:i32 = load %i_1
-            store %param, %48
-            %49:i32 = load %j_1
-            store %param_1, %49
-            %50:void = call %swap_i1_i1_, %param, %param_1, mat3x3<f32>(vec3<f32>(0.0f))
+            %49:i32 = add %48, 1i
+            store %i_1, %49
+            %50:i32 = load %i_1
+            store %param, %50
+            %51:i32 = load %j_1
+            store %param_1, %51
+            %52:void = call %swap_i1_i1_, %param, %param_1, mat3x3<f32>(vec3<f32>(0.0f))
             exit_if  # if_2
           }
         }
-        continue %b5
+        continue  # -> $B5
       }
-      %b5 = block {  # continuing
-        %51:i32 = load %j_1
-        %52:i32 = add %51, 1i
-        store %j_1, %52
-        next_iteration %b4
+      $B5: {  # continuing
+        %53:i32 = load %j_1
+        %54:i32 = add %53, 1i
+        store %j_1, %54
+        next_iteration  # -> $B4
       }
     }
-    %53:i32 = load %i_1
-    %54:i32 = add %53, 1i
-    store %i_1, %54
     %55:i32 = load %i_1
-    store %param_2, %55
-    %56:i32 = load %h
-    store %param_3, %56
-    %57:void = call %swap_i1_i1_, %param_2, %param_3, mat3x3<f32>(vec3<f32>(0.0f))
-    %x_276:i32 = load %i_1
+    %56:i32 = add %55, 1i
+    store %i_1, %56
+    %57:i32 = load %i_1
+    store %param_2, %57
+    %58:i32 = load %h
+    store %param_3, %58
+    %59:void = call %swap_i1_i1_, %param_2, %param_3, mat3x3<f32>(vec3<f32>(0.0f))
+    %60:i32 = load %i_1
+    %x_276:i32 = let %60
     ret %x_276
   }
 }
-%quicksort_ = func():void -> %b9 {
-  %b9 = block {
+%quicksort_ = func():void {
+  $B9: {
     %l_1:ptr<function, i32, read_write> = var
     %h_1:ptr<function, i32, read_write> = var
     %top:ptr<function, i32, read_write> = var
@@ -122,282 +125,304 @@
     store %l_1, 0i
     store %h_1, 9i
     store %top, -1i
-    %67:i32 = load %top
-    %x_279:i32 = add %67, 1i
+    %70:i32 = load %top
+    %71:i32 = add %70, 1i
+    %x_279:i32 = let %71
     store %top, %x_279
-    %69:ptr<function, i32, read_write> = access %stack, %x_279
-    %70:i32 = load %l_1
-    store %69, %70
-    %71:i32 = load %top
-    %x_283:i32 = add %71, 1i
-    store %top, %x_283
-    %73:ptr<function, i32, read_write> = access %stack, %x_283
-    %74:i32 = load %h_1
+    %73:ptr<function, i32, read_write> = access %stack, %x_279
+    %74:i32 = load %l_1
     store %73, %74
-    loop [b: %b10, c: %b11] {  # loop_2
-      %b10 = block {  # body
-        %75:i32 = load %top
-        %76:bool = gte %75, 0i
-        if %76 [t: %b12, f: %b13] {  # if_3
-          %b12 = block {  # true
+    %75:i32 = load %top
+    %76:i32 = add %75, 1i
+    %x_283:i32 = let %76
+    store %top, %x_283
+    %78:ptr<function, i32, read_write> = access %stack, %x_283
+    %79:i32 = load %h_1
+    store %78, %79
+    loop [b: $B10, c: $B11] {  # loop_2
+      $B10: {  # body
+        %80:i32 = load %top
+        %81:bool = gte %80, 0i
+        if %81 [t: $B12, f: $B13] {  # if_3
+          $B12: {  # true
             exit_if  # if_3
           }
-          %b13 = block {  # false
+          $B13: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_293:i32 = load %top
-        %78:i32 = load %top
-        %79:i32 = sub %78, 1i
-        store %top, %79
-        %80:ptr<function, i32, read_write> = access %stack, %x_293
-        %81:i32 = load %80
-        store %h_1, %81
-        %x_297:i32 = load %top
-        %83:i32 = load %top
-        %84:i32 = sub %83, 1i
-        store %top, %84
-        %85:ptr<function, i32, read_write> = access %stack, %x_297
-        %86:i32 = load %85
-        store %l_1, %86
-        %87:i32 = load %l_1
-        store %param_4, %87
-        %88:i32 = load %h_1
-        store %param_5, %88
-        %x_303:i32 = call %performPartition_i1_i1_, %param_4, %param_5
-        store %p, %x_303
-        %90:i32 = load %p
+        %82:i32 = load %top
+        %x_293:i32 = let %82
+        %84:i32 = load %top
+        %85:i32 = sub %84, 1i
+        store %top, %85
+        %86:ptr<function, i32, read_write> = access %stack, %x_293
+        %87:i32 = load %86
+        store %h_1, %87
+        %88:i32 = load %top
+        %x_297:i32 = let %88
+        %90:i32 = load %top
         %91:i32 = sub %90, 1i
-        %92:i32 = load %l_1
-        %93:bool = gt %91, %92
-        if %93 [t: %b14] {  # if_4
-          %b14 = block {  # true
-            %94:i32 = load %top
-            %x_311:i32 = add %94, 1i
+        store %top, %91
+        %92:ptr<function, i32, read_write> = access %stack, %x_297
+        %93:i32 = load %92
+        store %l_1, %93
+        %94:i32 = load %l_1
+        store %param_4, %94
+        %95:i32 = load %h_1
+        store %param_5, %95
+        %96:i32 = call %performPartition_i1_i1_, %param_4, %param_5
+        %x_303:i32 = let %96
+        store %p, %x_303
+        %98:i32 = load %p
+        %99:i32 = sub %98, 1i
+        %100:i32 = load %l_1
+        %101:bool = gt %99, %100
+        if %101 [t: $B14] {  # if_4
+          $B14: {  # true
+            %102:i32 = load %top
+            %103:i32 = add %102, 1i
+            %x_311:i32 = let %103
             store %top, %x_311
-            %96:ptr<function, i32, read_write> = access %stack, %x_311
-            %97:i32 = load %l_1
-            store %96, %97
-            %98:i32 = load %top
-            %x_315:i32 = add %98, 1i
+            %105:ptr<function, i32, read_write> = access %stack, %x_311
+            %106:i32 = load %l_1
+            store %105, %106
+            %107:i32 = load %top
+            %108:i32 = add %107, 1i
+            %x_315:i32 = let %108
             store %top, %x_315
-            %100:ptr<function, i32, read_write> = access %stack, %x_315
-            %101:i32 = load %p
-            %102:i32 = sub %101, 1i
-            store %100, %102
+            %110:ptr<function, i32, read_write> = access %stack, %x_315
+            %111:i32 = load %p
+            %112:i32 = sub %111, 1i
+            store %110, %112
             exit_if  # if_4
           }
         }
-        %103:i32 = load %p
-        %104:i32 = add %103, 1i
-        %105:i32 = load %h_1
-        %106:bool = lt %104, %105
-        if %106 [t: %b15] {  # if_5
-          %b15 = block {  # true
-            %107:i32 = load %top
-            %x_326:i32 = add %107, 1i
+        %113:i32 = load %p
+        %114:i32 = add %113, 1i
+        %115:i32 = load %h_1
+        %116:bool = lt %114, %115
+        if %116 [t: $B15] {  # if_5
+          $B15: {  # true
+            %117:i32 = load %top
+            %118:i32 = add %117, 1i
+            %x_326:i32 = let %118
             store %top, %x_326
-            %109:ptr<function, i32, read_write> = access %stack, %x_326
-            %110:i32 = load %p
-            %111:i32 = add %110, 1i
-            store %109, %111
-            %112:i32 = load %top
-            %x_331:i32 = add %112, 1i
+            %120:ptr<function, i32, read_write> = access %stack, %x_326
+            %121:i32 = load %p
+            %122:i32 = add %121, 1i
+            store %120, %122
+            %123:i32 = load %top
+            %124:i32 = add %123, 1i
+            %x_331:i32 = let %124
             store %top, %x_331
-            %114:ptr<function, i32, read_write> = access %stack, %x_331
-            %115:i32 = load %h_1
-            store %114, %115
+            %126:ptr<function, i32, read_write> = access %stack, %x_331
+            %127:i32 = load %h_1
+            store %126, %127
             exit_if  # if_5
           }
         }
-        continue %b11
+        continue  # -> $B11
       }
-      %b11 = block {  # continuing
-        next_iteration %b10
+      $B11: {  # continuing
+        next_iteration  # -> $B10
       }
     }
     ret
   }
 }
-%main_1 = func():void -> %b16 {
-  %b16 = block {
+%main_1 = func():void {
+  $B16: {
     %i_2:ptr<function, i32, read_write> = var
     %uv:ptr<function, vec2<f32>, read_write> = var
     %color:ptr<function, vec3<f32>, read_write> = var
     store %i_2, 0i
-    loop [b: %b17, c: %b18] {  # loop_3
-      %b17 = block {  # body
-        %120:i32 = load %i_2
-        %121:bool = lt %120, 10i
-        if %121 [t: %b19, f: %b20] {  # if_6
-          %b19 = block {  # true
+    loop [b: $B17, c: $B18] {  # loop_3
+      $B17: {  # body
+        %132:i32 = load %i_2
+        %133:bool = lt %132, 10i
+        if %133 [t: $B19, f: $B20] {  # if_6
+          $B19: {  # true
             exit_if  # if_6
           }
-          %b20 = block {  # false
+          $B20: {  # false
             exit_loop  # loop_3
           }
         }
-        %x_92:i32 = load %i_2
-        %123:ptr<private, i32, read_write> = access %obj, 0u, %x_92
-        %124:i32 = load %i_2
-        %125:i32 = sub 10i, %124
-        store %123, %125
-        %x_96:i32 = load %i_2
-        %127:ptr<private, i32, read_write> = access %obj, 0u, %x_96
-        %128:i32 = load %i_2
-        %129:ptr<private, i32, read_write> = access %obj, 0u, %128
-        %130:i32 = load %129
-        %131:i32 = load %i_2
-        %132:ptr<private, i32, read_write> = access %obj, 0u, %131
-        %133:i32 = load %132
-        %134:i32 = mul %130, %133
-        store %127, %134
-        continue %b18
+        %134:i32 = load %i_2
+        %x_92:i32 = let %134
+        %136:ptr<private, i32, read_write> = access %obj, 0u, %x_92
+        %137:i32 = load %i_2
+        %138:i32 = sub 10i, %137
+        store %136, %138
+        %139:i32 = load %i_2
+        %x_96:i32 = let %139
+        %141:ptr<private, i32, read_write> = access %obj, 0u, %x_96
+        %142:i32 = load %i_2
+        %143:ptr<private, i32, read_write> = access %obj, 0u, %142
+        %144:i32 = load %143
+        %145:i32 = load %i_2
+        %146:ptr<private, i32, read_write> = access %obj, 0u, %145
+        %147:i32 = load %146
+        %148:i32 = mul %144, %147
+        store %141, %148
+        continue  # -> $B18
       }
-      %b18 = block {  # continuing
-        %135:i32 = load %i_2
-        %136:i32 = add %135, 1i
-        store %i_2, %136
-        next_iteration %b17
+      $B18: {  # continuing
+        %149:i32 = load %i_2
+        %150:i32 = add %149, 1i
+        store %i_2, %150
+        next_iteration  # -> $B17
       }
     }
-    %137:void = call %quicksort_
-    %138:vec4<f32> = load %gl_FragCoord
-    %139:vec2<f32> = swizzle %138, xy
-    %140:ptr<uniform, vec2<f32>, read> = access %x_32, 0u
-    %141:vec2<f32> = load %140
-    %142:vec2<f32> = div %139, %141
-    store %uv, %142
+    %151:void = call %quicksort_
+    %152:vec4<f32> = load %gl_FragCoord
+    %153:vec2<f32> = swizzle %152, xy
+    %154:ptr<uniform, vec2<f32>, read> = access %x_32, 0u
+    %155:vec2<f32> = load %154
+    %156:vec2<f32> = div %153, %155
+    store %uv, %156
     store %color, vec3<f32>(1.0f, 2.0f, 3.0f)
-    %143:f32 = load_vector_element %color, 0u
-    %144:ptr<private, i32, read_write> = access %obj, 0u, 0i
-    %145:i32 = load %144
-    %146:f32 = convert %145
-    %147:f32 = add %143, %146
-    store_vector_element %color, 0u, %147
-    %148:f32 = load_vector_element %uv, 0u
-    %149:bool = gt %148, 0.25f
-    if %149 [t: %b21] {  # if_7
-      %b21 = block {  # true
-        %150:f32 = load_vector_element %color, 0u
-        %151:ptr<private, i32, read_write> = access %obj, 0u, 1i
-        %152:i32 = load %151
-        %153:f32 = convert %152
-        %154:f32 = add %150, %153
-        store_vector_element %color, 0u, %154
+    %157:f32 = load_vector_element %color, 0u
+    %158:f32 = let %157
+    %159:ptr<private, i32, read_write> = access %obj, 0u, 0i
+    %160:i32 = load %159
+    %161:f32 = convert %160
+    %162:f32 = add %158, %161
+    store_vector_element %color, 0u, %162
+    %163:f32 = load_vector_element %uv, 0u
+    %164:bool = gt %163, 0.25f
+    if %164 [t: $B21] {  # if_7
+      $B21: {  # true
+        %165:f32 = load_vector_element %color, 0u
+        %166:f32 = let %165
+        %167:ptr<private, i32, read_write> = access %obj, 0u, 1i
+        %168:i32 = load %167
+        %169:f32 = convert %168
+        %170:f32 = add %166, %169
+        store_vector_element %color, 0u, %170
         exit_if  # if_7
       }
     }
-    %155:f32 = load_vector_element %uv, 0u
-    %156:bool = gt %155, 0.5f
-    if %156 [t: %b22] {  # if_8
-      %b22 = block {  # true
-        %157:f32 = load_vector_element %color, 1u
-        %158:ptr<private, i32, read_write> = access %obj, 0u, 2i
-        %159:i32 = load %158
-        %160:f32 = convert %159
-        %161:f32 = add %157, %160
-        store_vector_element %color, 1u, %161
+    %171:f32 = load_vector_element %uv, 0u
+    %172:bool = gt %171, 0.5f
+    if %172 [t: $B22] {  # if_8
+      $B22: {  # true
+        %173:f32 = load_vector_element %color, 1u
+        %174:f32 = let %173
+        %175:ptr<private, i32, read_write> = access %obj, 0u, 2i
+        %176:i32 = load %175
+        %177:f32 = convert %176
+        %178:f32 = add %174, %177
+        store_vector_element %color, 1u, %178
         exit_if  # if_8
       }
     }
-    %162:f32 = load_vector_element %uv, 0u
-    %163:bool = gt %162, 0.75f
-    if %163 [t: %b23] {  # if_9
-      %b23 = block {  # true
-        %164:f32 = load_vector_element %color, 2u
-        %165:ptr<private, i32, read_write> = access %obj, 0u, 3i
-        %166:i32 = load %165
-        %167:f32 = convert %166
-        %168:f32 = add %164, %167
-        store_vector_element %color, 2u, %168
+    %179:f32 = load_vector_element %uv, 0u
+    %180:bool = gt %179, 0.75f
+    if %180 [t: $B23] {  # if_9
+      $B23: {  # true
+        %181:f32 = load_vector_element %color, 2u
+        %182:f32 = let %181
+        %183:ptr<private, i32, read_write> = access %obj, 0u, 3i
+        %184:i32 = load %183
+        %185:f32 = convert %184
+        %186:f32 = add %182, %185
+        store_vector_element %color, 2u, %186
         exit_if  # if_9
       }
     }
-    %169:f32 = load_vector_element %color, 1u
-    %170:ptr<private, i32, read_write> = access %obj, 0u, 4i
-    %171:i32 = load %170
-    %172:f32 = convert %171
-    %173:f32 = add %169, %172
-    store_vector_element %color, 1u, %173
-    %174:f32 = load_vector_element %uv, 1u
-    %175:bool = gt %174, 0.25f
-    if %175 [t: %b24] {  # if_10
-      %b24 = block {  # true
-        %176:f32 = load_vector_element %color, 0u
-        %177:ptr<private, i32, read_write> = access %obj, 0u, 5i
-        %178:i32 = load %177
-        %179:f32 = convert %178
-        %180:f32 = add %176, %179
-        store_vector_element %color, 0u, %180
+    %187:f32 = load_vector_element %color, 1u
+    %188:f32 = let %187
+    %189:ptr<private, i32, read_write> = access %obj, 0u, 4i
+    %190:i32 = load %189
+    %191:f32 = convert %190
+    %192:f32 = add %188, %191
+    store_vector_element %color, 1u, %192
+    %193:f32 = load_vector_element %uv, 1u
+    %194:bool = gt %193, 0.25f
+    if %194 [t: $B24] {  # if_10
+      $B24: {  # true
+        %195:f32 = load_vector_element %color, 0u
+        %196:f32 = let %195
+        %197:ptr<private, i32, read_write> = access %obj, 0u, 5i
+        %198:i32 = load %197
+        %199:f32 = convert %198
+        %200:f32 = add %196, %199
+        store_vector_element %color, 0u, %200
         exit_if  # if_10
       }
     }
-    %181:f32 = load_vector_element %uv, 1u
-    %182:bool = gt %181, 0.5f
-    if %182 [t: %b25] {  # if_11
-      %b25 = block {  # true
-        %183:f32 = load_vector_element %color, 1u
-        %184:ptr<private, i32, read_write> = access %obj, 0u, 6i
-        %185:i32 = load %184
-        %186:f32 = convert %185
-        %187:f32 = add %183, %186
-        store_vector_element %color, 1u, %187
+    %201:f32 = load_vector_element %uv, 1u
+    %202:bool = gt %201, 0.5f
+    if %202 [t: $B25] {  # if_11
+      $B25: {  # true
+        %203:f32 = load_vector_element %color, 1u
+        %204:f32 = let %203
+        %205:ptr<private, i32, read_write> = access %obj, 0u, 6i
+        %206:i32 = load %205
+        %207:f32 = convert %206
+        %208:f32 = add %204, %207
+        store_vector_element %color, 1u, %208
         exit_if  # if_11
       }
     }
-    %188:f32 = load_vector_element %uv, 1u
-    %189:bool = gt %188, 0.75f
-    if %189 [t: %b26] {  # if_12
-      %b26 = block {  # true
-        %190:f32 = load_vector_element %color, 2u
-        %191:ptr<private, i32, read_write> = access %obj, 0u, 7i
-        %192:i32 = load %191
-        %193:f32 = convert %192
-        %194:f32 = add %190, %193
-        store_vector_element %color, 2u, %194
+    %209:f32 = load_vector_element %uv, 1u
+    %210:bool = gt %209, 0.75f
+    if %210 [t: $B26] {  # if_12
+      $B26: {  # true
+        %211:f32 = load_vector_element %color, 2u
+        %212:f32 = let %211
+        %213:ptr<private, i32, read_write> = access %obj, 0u, 7i
+        %214:i32 = load %213
+        %215:f32 = convert %214
+        %216:f32 = add %212, %215
+        store_vector_element %color, 2u, %216
         exit_if  # if_12
       }
     }
-    %195:f32 = load_vector_element %color, 2u
-    %196:ptr<private, i32, read_write> = access %obj, 0u, 8i
-    %197:i32 = load %196
-    %198:f32 = convert %197
-    %199:f32 = add %195, %198
-    store_vector_element %color, 2u, %199
-    %200:f32 = load_vector_element %uv, 0u
-    %201:f32 = load_vector_element %uv, 1u
-    %202:f32 = sub %200, %201
-    %203:f32 = abs %202
-    %204:bool = lt %203, 0.25f
-    if %204 [t: %b27] {  # if_13
-      %b27 = block {  # true
-        %205:f32 = load_vector_element %color, 0u
-        %206:ptr<private, i32, read_write> = access %obj, 0u, 9i
-        %207:i32 = load %206
-        %208:f32 = convert %207
-        %209:f32 = add %205, %208
-        store_vector_element %color, 0u, %209
+    %217:f32 = load_vector_element %color, 2u
+    %218:f32 = let %217
+    %219:ptr<private, i32, read_write> = access %obj, 0u, 8i
+    %220:i32 = load %219
+    %221:f32 = convert %220
+    %222:f32 = add %218, %221
+    store_vector_element %color, 2u, %222
+    %223:f32 = load_vector_element %uv, 0u
+    %224:f32 = load_vector_element %uv, 1u
+    %225:f32 = sub %223, %224
+    %226:f32 = abs %225
+    %227:bool = lt %226, 0.25f
+    if %227 [t: $B27] {  # if_13
+      $B27: {  # true
+        %228:f32 = load_vector_element %color, 0u
+        %229:f32 = let %228
+        %230:ptr<private, i32, read_write> = access %obj, 0u, 9i
+        %231:i32 = load %230
+        %232:f32 = convert %231
+        %233:f32 = add %229, %232
+        store_vector_element %color, 0u, %233
         exit_if  # if_13
       }
     }
-    %210:vec3<f32> = load %color
-    %x_223:vec3<f32> = normalize %210
-    %212:f32 = access %x_223, 0u
-    %213:f32 = access %x_223, 1u
-    %214:f32 = access %x_223, 2u
-    %215:vec4<f32> = construct %212, %213, %214, 1.0f
-    store %x_GLF_color, %215
+    %234:vec3<f32> = load %color
+    %235:vec3<f32> = normalize %234
+    %x_223:vec3<f32> = let %235
+    %237:f32 = access %x_223, 0u
+    %238:f32 = access %x_223, 1u
+    %239:f32 = access %x_223, 2u
+    %240:vec4<f32> = construct %237, %238, %239, 1.0f
+    store %x_GLF_color, %240
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b28 {
-  %b28 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B28: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %218:void = call %main_1
-    %219:vec4<f32> = load %x_GLF_color
-    %220:main_out = construct %219
-    ret %220
+    %243:void = call %main_1
+    %244:vec4<f32> = load %x_GLF_color
+    %245:main_out = construct %244
+    ret %245
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-mat-func-param/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-mat-func-param/1.wgsl.expected.ir.msl
index 2839b99..533f89b 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-mat-func-param/1.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-mat-func-param/1.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: QuicksortObject = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: QuicksortObject = struct @align(4) {
   numbers:array<i32, 10> @offset(0)
 }
 
@@ -12,35 +12,42 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %obj:ptr<private, QuicksortObject, read_write> = var
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_32:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%swap_i1_i1_ = func(%i:ptr<function, i32, read_write>, %j:ptr<function, i32, read_write>, %x_228:mat3x3<f32>):void -> %b2 {
-  %b2 = block {
+%swap_i1_i1_ = func(%i:ptr<function, i32, read_write>, %j:ptr<function, i32, read_write>, %x_228:mat3x3<f32>):void {
+  $B2: {
     %temp:ptr<function, i32, read_write> = var
-    %x_230:i32 = load %i
-    %11:ptr<private, i32, read_write> = access %obj, 0u, %x_230
-    %x_232:i32 = load %11
+    %10:i32 = load %i
+    %x_230:i32 = let %10
+    %12:ptr<private, i32, read_write> = access %obj, 0u, %x_230
+    %13:i32 = load %12
+    %x_232:i32 = let %13
     store %temp, %x_232
-    %x_233:i32 = load %i
-    %x_234:i32 = load %j
-    %15:ptr<private, i32, read_write> = access %obj, 0u, %x_234
-    %x_236:i32 = load %15
-    %17:ptr<private, i32, read_write> = access %obj, 0u, %x_233
-    store %17, %x_236
-    %x_238:i32 = load %j
-    %x_239:i32 = load %temp
-    %20:ptr<private, i32, read_write> = access %obj, 0u, %x_238
-    store %20, %x_239
+    %15:i32 = load %i
+    %x_233:i32 = let %15
+    %17:i32 = load %j
+    %x_234:i32 = let %17
+    %19:ptr<private, i32, read_write> = access %obj, 0u, %x_234
+    %20:i32 = load %19
+    %x_236:i32 = let %20
+    %22:ptr<private, i32, read_write> = access %obj, 0u, %x_233
+    store %22, %x_236
+    %23:i32 = load %j
+    %x_238:i32 = let %23
+    %25:i32 = load %temp
+    %x_239:i32 = let %25
+    %27:ptr<private, i32, read_write> = access %obj, 0u, %x_238
+    store %27, %x_239
     ret
   }
 }
-%performPartition_i1_i1_ = func(%l:ptr<function, i32, read_write>, %h:ptr<function, i32, read_write>):i32 -> %b3 {
-  %b3 = block {
+%performPartition_i1_i1_ = func(%l:ptr<function, i32, read_write>, %h:ptr<function, i32, read_write>):i32 {
+  $B3: {
     %pivot:ptr<function, i32, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
     %j_1:ptr<function, i32, read_write> = var
@@ -48,70 +55,87 @@
     %param_1:ptr<function, i32, read_write> = var
     %param_2:ptr<function, i32, read_write> = var
     %param_3:ptr<function, i32, read_write> = var
-    %x_242:i32 = load %h
-    %32:ptr<private, i32, read_write> = access %obj, 0u, %x_242
-    %x_244:i32 = load %32
+    %38:i32 = load %h
+    %x_242:i32 = let %38
+    %40:ptr<private, i32, read_write> = access %obj, 0u, %x_242
+    %41:i32 = load %40
+    %x_244:i32 = let %41
     store %pivot, %x_244
-    %x_245:i32 = load %l
-    %35:i32 = sub %x_245, 1i
-    store %i_1, %35
-    %x_247:i32 = load %l
+    %43:i32 = load %l
+    %x_245:i32 = let %43
+    %45:i32 = sub %x_245, 1i
+    store %i_1, %45
+    %46:i32 = load %l
+    %x_247:i32 = let %46
     store %j_1, %x_247
-    loop [b: %b4, c: %b5] {  # loop_1
-      %b4 = block {  # body
-        %x_252:i32 = load %j_1
-        %x_253:i32 = load %h
-        %39:i32 = sub %x_253, 1i
-        %40:bool = lte %x_252, %39
-        if %40 [t: %b6, f: %b7] {  # if_1
-          %b6 = block {  # true
+    loop [b: $B4, c: $B5] {  # loop_1
+      $B4: {  # body
+        %48:i32 = load %j_1
+        %x_252:i32 = let %48
+        %50:i32 = load %h
+        %x_253:i32 = let %50
+        %52:i32 = sub %x_253, 1i
+        %53:bool = lte %x_252, %52
+        if %53 [t: $B6, f: $B7] {  # if_1
+          $B6: {  # true
             exit_if  # if_1
           }
-          %b7 = block {  # false
+          $B7: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_257:i32 = load %j_1
-        %42:ptr<private, i32, read_write> = access %obj, 0u, %x_257
-        %x_259:i32 = load %42
-        %x_260:i32 = load %pivot
-        %45:bool = lte %x_259, %x_260
-        if %45 [t: %b8] {  # if_2
-          %b8 = block {  # true
-            %x_264:i32 = load %i_1
-            %47:i32 = add %x_264, 1i
-            store %i_1, %47
-            %x_266:i32 = load %i_1
+        %54:i32 = load %j_1
+        %x_257:i32 = let %54
+        %56:ptr<private, i32, read_write> = access %obj, 0u, %x_257
+        %57:i32 = load %56
+        %x_259:i32 = let %57
+        %59:i32 = load %pivot
+        %x_260:i32 = let %59
+        %61:bool = lte %x_259, %x_260
+        if %61 [t: $B8] {  # if_2
+          $B8: {  # true
+            %62:i32 = load %i_1
+            %x_264:i32 = let %62
+            %64:i32 = add %x_264, 1i
+            store %i_1, %64
+            %65:i32 = load %i_1
+            %x_266:i32 = let %65
             store %param, %x_266
-            %x_267:i32 = load %j_1
+            %67:i32 = load %j_1
+            %x_267:i32 = let %67
             store %param_1, %x_267
-            %50:void = call %swap_i1_i1_, %param, %param_1, mat3x3<f32>(vec3<f32>(0.0f))
+            %69:void = call %swap_i1_i1_, %param, %param_1, mat3x3<f32>(vec3<f32>(0.0f))
             exit_if  # if_2
           }
         }
-        continue %b5
+        continue  # -> $B5
       }
-      %b5 = block {  # continuing
-        %x_269:i32 = load %j_1
-        %52:i32 = add %x_269, 1i
-        store %j_1, %52
-        next_iteration %b4
+      $B5: {  # continuing
+        %70:i32 = load %j_1
+        %x_269:i32 = let %70
+        %72:i32 = add %x_269, 1i
+        store %j_1, %72
+        next_iteration  # -> $B4
       }
     }
-    %x_271:i32 = load %i_1
-    %54:i32 = add %x_271, 1i
-    store %i_1, %54
-    %x_273:i32 = load %i_1
+    %73:i32 = load %i_1
+    %x_271:i32 = let %73
+    %75:i32 = add %x_271, 1i
+    store %i_1, %75
+    %76:i32 = load %i_1
+    %x_273:i32 = let %76
     store %param_2, %x_273
-    %x_274:i32 = load %h
+    %78:i32 = load %h
+    %x_274:i32 = let %78
     store %param_3, %x_274
-    %57:void = call %swap_i1_i1_, %param_2, %param_3, mat3x3<f32>(vec3<f32>(0.0f))
-    %x_276:i32 = load %i_1
+    %80:void = call %swap_i1_i1_, %param_2, %param_3, mat3x3<f32>(vec3<f32>(0.0f))
+    %81:i32 = load %i_1
+    %x_276:i32 = let %81
     ret %x_276
   }
 }
-%quicksort_ = func():void -> %b9 {
-  %b9 = block {
+%quicksort_ = func():void {
+  $B9: {
     %l_1:ptr<function, i32, read_write> = var
     %h_1:ptr<function, i32, read_write> = var
     %top:ptr<function, i32, read_write> = var
@@ -122,282 +146,353 @@
     store %l_1, 0i
     store %h_1, 9i
     store %top, -1i
-    %x_278:i32 = load %top
-    %x_279:i32 = add %x_278, 1i
+    %91:i32 = load %top
+    %x_278:i32 = let %91
+    %93:i32 = add %x_278, 1i
+    %x_279:i32 = let %93
     store %top, %x_279
-    %x_280:i32 = load %l_1
-    %70:ptr<function, i32, read_write> = access %stack, %x_279
-    store %70, %x_280
-    %x_282:i32 = load %top
-    %x_283:i32 = add %x_282, 1i
+    %95:i32 = load %l_1
+    %x_280:i32 = let %95
+    %97:ptr<function, i32, read_write> = access %stack, %x_279
+    store %97, %x_280
+    %98:i32 = load %top
+    %x_282:i32 = let %98
+    %100:i32 = add %x_282, 1i
+    %x_283:i32 = let %100
     store %top, %x_283
-    %x_284:i32 = load %h_1
-    %74:ptr<function, i32, read_write> = access %stack, %x_283
-    store %74, %x_284
-    loop [b: %b10, c: %b11] {  # loop_2
-      %b10 = block {  # body
-        %x_290:i32 = load %top
-        %76:bool = gte %x_290, 0i
-        if %76 [t: %b12, f: %b13] {  # if_3
-          %b12 = block {  # true
+    %102:i32 = load %h_1
+    %x_284:i32 = let %102
+    %104:ptr<function, i32, read_write> = access %stack, %x_283
+    store %104, %x_284
+    loop [b: $B10, c: $B11] {  # loop_2
+      $B10: {  # body
+        %105:i32 = load %top
+        %x_290:i32 = let %105
+        %107:bool = gte %x_290, 0i
+        if %107 [t: $B12, f: $B13] {  # if_3
+          $B12: {  # true
             exit_if  # if_3
           }
-          %b13 = block {  # false
+          $B13: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_293:i32 = load %top
-        %78:i32 = sub %x_293, 1i
-        store %top, %78
-        %79:ptr<function, i32, read_write> = access %stack, %x_293
-        %x_296:i32 = load %79
+        %108:i32 = load %top
+        %x_293:i32 = let %108
+        %110:i32 = sub %x_293, 1i
+        store %top, %110
+        %111:ptr<function, i32, read_write> = access %stack, %x_293
+        %112:i32 = load %111
+        %x_296:i32 = let %112
         store %h_1, %x_296
-        %x_297:i32 = load %top
-        %82:i32 = sub %x_297, 1i
-        store %top, %82
-        %83:ptr<function, i32, read_write> = access %stack, %x_297
-        %x_300:i32 = load %83
+        %114:i32 = load %top
+        %x_297:i32 = let %114
+        %116:i32 = sub %x_297, 1i
+        store %top, %116
+        %117:ptr<function, i32, read_write> = access %stack, %x_297
+        %118:i32 = load %117
+        %x_300:i32 = let %118
         store %l_1, %x_300
-        %x_301:i32 = load %l_1
+        %120:i32 = load %l_1
+        %x_301:i32 = let %120
         store %param_4, %x_301
-        %x_302:i32 = load %h_1
+        %122:i32 = load %h_1
+        %x_302:i32 = let %122
         store %param_5, %x_302
-        %x_303:i32 = call %performPartition_i1_i1_, %param_4, %param_5
+        %124:i32 = call %performPartition_i1_i1_, %param_4, %param_5
+        %x_303:i32 = let %124
         store %p, %x_303
-        %x_304:i32 = load %p
-        %x_306:i32 = load %l_1
-        %90:i32 = sub %x_304, 1i
-        %91:bool = gt %90, %x_306
-        if %91 [t: %b14] {  # if_4
-          %b14 = block {  # true
-            %x_310:i32 = load %top
-            %x_311:i32 = add %x_310, 1i
+        %126:i32 = load %p
+        %x_304:i32 = let %126
+        %128:i32 = load %l_1
+        %x_306:i32 = let %128
+        %130:i32 = sub %x_304, 1i
+        %131:bool = gt %130, %x_306
+        if %131 [t: $B14] {  # if_4
+          $B14: {  # true
+            %132:i32 = load %top
+            %x_310:i32 = let %132
+            %134:i32 = add %x_310, 1i
+            %x_311:i32 = let %134
             store %top, %x_311
-            %x_312:i32 = load %l_1
-            %95:ptr<function, i32, read_write> = access %stack, %x_311
-            store %95, %x_312
-            %x_314:i32 = load %top
-            %x_315:i32 = add %x_314, 1i
+            %136:i32 = load %l_1
+            %x_312:i32 = let %136
+            %138:ptr<function, i32, read_write> = access %stack, %x_311
+            store %138, %x_312
+            %139:i32 = load %top
+            %x_314:i32 = let %139
+            %141:i32 = add %x_314, 1i
+            %x_315:i32 = let %141
             store %top, %x_315
-            %x_316:i32 = load %p
-            %99:ptr<function, i32, read_write> = access %stack, %x_315
-            %100:i32 = sub %x_316, 1i
-            store %99, %100
+            %143:i32 = load %p
+            %x_316:i32 = let %143
+            %145:ptr<function, i32, read_write> = access %stack, %x_315
+            %146:i32 = sub %x_316, 1i
+            store %145, %146
             exit_if  # if_4
           }
         }
-        %x_319:i32 = load %p
-        %x_321:i32 = load %h_1
-        %103:i32 = add %x_319, 1i
-        %104:bool = lt %103, %x_321
-        if %104 [t: %b15] {  # if_5
-          %b15 = block {  # true
-            %x_325:i32 = load %top
-            %x_326:i32 = add %x_325, 1i
+        %147:i32 = load %p
+        %x_319:i32 = let %147
+        %149:i32 = load %h_1
+        %x_321:i32 = let %149
+        %151:i32 = add %x_319, 1i
+        %152:bool = lt %151, %x_321
+        if %152 [t: $B15] {  # if_5
+          $B15: {  # true
+            %153:i32 = load %top
+            %x_325:i32 = let %153
+            %155:i32 = add %x_325, 1i
+            %x_326:i32 = let %155
             store %top, %x_326
-            %x_327:i32 = load %p
-            %108:ptr<function, i32, read_write> = access %stack, %x_326
-            %109:i32 = add %x_327, 1i
-            store %108, %109
-            %x_330:i32 = load %top
-            %x_331:i32 = add %x_330, 1i
+            %157:i32 = load %p
+            %x_327:i32 = let %157
+            %159:ptr<function, i32, read_write> = access %stack, %x_326
+            %160:i32 = add %x_327, 1i
+            store %159, %160
+            %161:i32 = load %top
+            %x_330:i32 = let %161
+            %163:i32 = add %x_330, 1i
+            %x_331:i32 = let %163
             store %top, %x_331
-            %x_332:i32 = load %h_1
-            %113:ptr<function, i32, read_write> = access %stack, %x_331
-            store %113, %x_332
+            %165:i32 = load %h_1
+            %x_332:i32 = let %165
+            %167:ptr<function, i32, read_write> = access %stack, %x_331
+            store %167, %x_332
             exit_if  # if_5
           }
         }
-        continue %b11
+        continue  # -> $B11
       }
-      %b11 = block {  # continuing
-        next_iteration %b10
+      $B11: {  # continuing
+        next_iteration  # -> $B10
       }
     }
     ret
   }
 }
-%main_1 = func():void -> %b16 {
-  %b16 = block {
+%main_1 = func():void {
+  $B16: {
     %i_2:ptr<function, i32, read_write> = var
     %uv:ptr<function, vec2<f32>, read_write> = var
     %color:ptr<function, vec3<f32>, read_write> = var
     store %i_2, 0i
-    loop [b: %b17, c: %b18] {  # loop_3
-      %b17 = block {  # body
-        %x_89:i32 = load %i_2
-        %119:bool = lt %x_89, 10i
-        if %119 [t: %b19, f: %b20] {  # if_6
-          %b19 = block {  # true
+    loop [b: $B17, c: $B18] {  # loop_3
+      $B17: {  # body
+        %172:i32 = load %i_2
+        %x_89:i32 = let %172
+        %174:bool = lt %x_89, 10i
+        if %174 [t: $B19, f: $B20] {  # if_6
+          $B19: {  # true
             exit_if  # if_6
           }
-          %b20 = block {  # false
+          $B20: {  # false
             exit_loop  # loop_3
           }
         }
-        %x_92:i32 = load %i_2
-        %x_93:i32 = load %i_2
-        %122:ptr<private, i32, read_write> = access %obj, 0u, %x_92
-        %123:i32 = sub 10i, %x_93
-        store %122, %123
-        %x_96:i32 = load %i_2
-        %x_97:i32 = load %i_2
-        %126:ptr<private, i32, read_write> = access %obj, 0u, %x_97
-        %x_99:i32 = load %126
-        %x_100:i32 = load %i_2
-        %129:ptr<private, i32, read_write> = access %obj, 0u, %x_100
-        %x_102:i32 = load %129
-        %131:ptr<private, i32, read_write> = access %obj, 0u, %x_96
-        %132:i32 = mul %x_99, %x_102
-        store %131, %132
-        continue %b18
+        %175:i32 = load %i_2
+        %x_92:i32 = let %175
+        %177:i32 = load %i_2
+        %x_93:i32 = let %177
+        %179:ptr<private, i32, read_write> = access %obj, 0u, %x_92
+        %180:i32 = sub 10i, %x_93
+        store %179, %180
+        %181:i32 = load %i_2
+        %x_96:i32 = let %181
+        %183:i32 = load %i_2
+        %x_97:i32 = let %183
+        %185:ptr<private, i32, read_write> = access %obj, 0u, %x_97
+        %186:i32 = load %185
+        %x_99:i32 = let %186
+        %188:i32 = load %i_2
+        %x_100:i32 = let %188
+        %190:ptr<private, i32, read_write> = access %obj, 0u, %x_100
+        %191:i32 = load %190
+        %x_102:i32 = let %191
+        %193:ptr<private, i32, read_write> = access %obj, 0u, %x_96
+        %194:i32 = mul %x_99, %x_102
+        store %193, %194
+        continue  # -> $B18
       }
-      %b18 = block {  # continuing
-        %x_105:i32 = load %i_2
-        %134:i32 = add %x_105, 1i
-        store %i_2, %134
-        next_iteration %b17
+      $B18: {  # continuing
+        %195:i32 = load %i_2
+        %x_105:i32 = let %195
+        %197:i32 = add %x_105, 1i
+        store %i_2, %197
+        next_iteration  # -> $B17
       }
     }
-    %135:void = call %quicksort_
-    %x_108:vec4<f32> = load %gl_FragCoord
-    %137:ptr<uniform, vec2<f32>, read> = access %x_32, 0u
-    %x_111:vec2<f32> = load %137
-    %139:f32 = access %x_108, 0u
-    %140:f32 = access %x_108, 1u
-    %141:vec2<f32> = construct %139, %140
-    %142:vec2<f32> = div %141, %x_111
-    store %uv, %142
+    %198:void = call %quicksort_
+    %199:vec4<f32> = load %gl_FragCoord
+    %x_108:vec4<f32> = let %199
+    %201:ptr<uniform, vec2<f32>, read> = access %x_32, 0u
+    %202:vec2<f32> = load %201
+    %x_111:vec2<f32> = let %202
+    %204:f32 = access %x_108, 0u
+    %205:f32 = access %x_108, 1u
+    %206:vec2<f32> = construct %204, %205
+    %207:vec2<f32> = div %206, %x_111
+    store %uv, %207
     store %color, vec3<f32>(1.0f, 2.0f, 3.0f)
-    %143:ptr<private, i32, read_write> = access %obj, 0u, 0i
-    %x_114:i32 = load %143
-    %x_117:f32 = load_vector_element %color, 0u
-    %146:f32 = convert %x_114
-    %147:f32 = add %x_117, %146
-    store_vector_element %color, 0u, %147
-    %x_121:f32 = load_vector_element %uv, 0u
-    %149:bool = gt %x_121, 0.25f
-    if %149 [t: %b21] {  # if_7
-      %b21 = block {  # true
-        %150:ptr<private, i32, read_write> = access %obj, 0u, 1i
-        %x_126:i32 = load %150
-        %x_129:f32 = load_vector_element %color, 0u
-        %153:f32 = convert %x_126
-        %154:f32 = add %x_129, %153
-        store_vector_element %color, 0u, %154
+    %208:ptr<private, i32, read_write> = access %obj, 0u, 0i
+    %209:i32 = load %208
+    %x_114:i32 = let %209
+    %211:f32 = load_vector_element %color, 0u
+    %x_117:f32 = let %211
+    %213:f32 = convert %x_114
+    %214:f32 = add %x_117, %213
+    store_vector_element %color, 0u, %214
+    %215:f32 = load_vector_element %uv, 0u
+    %x_121:f32 = let %215
+    %217:bool = gt %x_121, 0.25f
+    if %217 [t: $B21] {  # if_7
+      $B21: {  # true
+        %218:ptr<private, i32, read_write> = access %obj, 0u, 1i
+        %219:i32 = load %218
+        %x_126:i32 = let %219
+        %221:f32 = load_vector_element %color, 0u
+        %x_129:f32 = let %221
+        %223:f32 = convert %x_126
+        %224:f32 = add %x_129, %223
+        store_vector_element %color, 0u, %224
         exit_if  # if_7
       }
     }
-    %x_133:f32 = load_vector_element %uv, 0u
-    %156:bool = gt %x_133, 0.5f
-    if %156 [t: %b22] {  # if_8
-      %b22 = block {  # true
-        %157:ptr<private, i32, read_write> = access %obj, 0u, 2i
-        %x_138:i32 = load %157
-        %x_141:f32 = load_vector_element %color, 1u
-        %160:f32 = convert %x_138
-        %161:f32 = add %x_141, %160
-        store_vector_element %color, 1u, %161
+    %225:f32 = load_vector_element %uv, 0u
+    %x_133:f32 = let %225
+    %227:bool = gt %x_133, 0.5f
+    if %227 [t: $B22] {  # if_8
+      $B22: {  # true
+        %228:ptr<private, i32, read_write> = access %obj, 0u, 2i
+        %229:i32 = load %228
+        %x_138:i32 = let %229
+        %231:f32 = load_vector_element %color, 1u
+        %x_141:f32 = let %231
+        %233:f32 = convert %x_138
+        %234:f32 = add %x_141, %233
+        store_vector_element %color, 1u, %234
         exit_if  # if_8
       }
     }
-    %x_145:f32 = load_vector_element %uv, 0u
-    %163:bool = gt %x_145, 0.75f
-    if %163 [t: %b23] {  # if_9
-      %b23 = block {  # true
-        %164:ptr<private, i32, read_write> = access %obj, 0u, 3i
-        %x_150:i32 = load %164
-        %x_153:f32 = load_vector_element %color, 2u
-        %167:f32 = convert %x_150
-        %168:f32 = add %x_153, %167
-        store_vector_element %color, 2u, %168
+    %235:f32 = load_vector_element %uv, 0u
+    %x_145:f32 = let %235
+    %237:bool = gt %x_145, 0.75f
+    if %237 [t: $B23] {  # if_9
+      $B23: {  # true
+        %238:ptr<private, i32, read_write> = access %obj, 0u, 3i
+        %239:i32 = load %238
+        %x_150:i32 = let %239
+        %241:f32 = load_vector_element %color, 2u
+        %x_153:f32 = let %241
+        %243:f32 = convert %x_150
+        %244:f32 = add %x_153, %243
+        store_vector_element %color, 2u, %244
         exit_if  # if_9
       }
     }
-    %169:ptr<private, i32, read_write> = access %obj, 0u, 4i
-    %x_157:i32 = load %169
-    %x_160:f32 = load_vector_element %color, 1u
-    %172:f32 = convert %x_157
-    %173:f32 = add %x_160, %172
-    store_vector_element %color, 1u, %173
-    %x_164:f32 = load_vector_element %uv, 1u
-    %175:bool = gt %x_164, 0.25f
-    if %175 [t: %b24] {  # if_10
-      %b24 = block {  # true
-        %176:ptr<private, i32, read_write> = access %obj, 0u, 5i
-        %x_169:i32 = load %176
-        %x_172:f32 = load_vector_element %color, 0u
-        %179:f32 = convert %x_169
-        %180:f32 = add %x_172, %179
-        store_vector_element %color, 0u, %180
+    %245:ptr<private, i32, read_write> = access %obj, 0u, 4i
+    %246:i32 = load %245
+    %x_157:i32 = let %246
+    %248:f32 = load_vector_element %color, 1u
+    %x_160:f32 = let %248
+    %250:f32 = convert %x_157
+    %251:f32 = add %x_160, %250
+    store_vector_element %color, 1u, %251
+    %252:f32 = load_vector_element %uv, 1u
+    %x_164:f32 = let %252
+    %254:bool = gt %x_164, 0.25f
+    if %254 [t: $B24] {  # if_10
+      $B24: {  # true
+        %255:ptr<private, i32, read_write> = access %obj, 0u, 5i
+        %256:i32 = load %255
+        %x_169:i32 = let %256
+        %258:f32 = load_vector_element %color, 0u
+        %x_172:f32 = let %258
+        %260:f32 = convert %x_169
+        %261:f32 = add %x_172, %260
+        store_vector_element %color, 0u, %261
         exit_if  # if_10
       }
     }
-    %x_176:f32 = load_vector_element %uv, 1u
-    %182:bool = gt %x_176, 0.5f
-    if %182 [t: %b25] {  # if_11
-      %b25 = block {  # true
-        %183:ptr<private, i32, read_write> = access %obj, 0u, 6i
-        %x_181:i32 = load %183
-        %x_184:f32 = load_vector_element %color, 1u
-        %186:f32 = convert %x_181
-        %187:f32 = add %x_184, %186
-        store_vector_element %color, 1u, %187
+    %262:f32 = load_vector_element %uv, 1u
+    %x_176:f32 = let %262
+    %264:bool = gt %x_176, 0.5f
+    if %264 [t: $B25] {  # if_11
+      $B25: {  # true
+        %265:ptr<private, i32, read_write> = access %obj, 0u, 6i
+        %266:i32 = load %265
+        %x_181:i32 = let %266
+        %268:f32 = load_vector_element %color, 1u
+        %x_184:f32 = let %268
+        %270:f32 = convert %x_181
+        %271:f32 = add %x_184, %270
+        store_vector_element %color, 1u, %271
         exit_if  # if_11
       }
     }
-    %x_188:f32 = load_vector_element %uv, 1u
-    %189:bool = gt %x_188, 0.75f
-    if %189 [t: %b26] {  # if_12
-      %b26 = block {  # true
-        %190:ptr<private, i32, read_write> = access %obj, 0u, 7i
-        %x_193:i32 = load %190
-        %x_196:f32 = load_vector_element %color, 2u
-        %193:f32 = convert %x_193
-        %194:f32 = add %x_196, %193
-        store_vector_element %color, 2u, %194
+    %272:f32 = load_vector_element %uv, 1u
+    %x_188:f32 = let %272
+    %274:bool = gt %x_188, 0.75f
+    if %274 [t: $B26] {  # if_12
+      $B26: {  # true
+        %275:ptr<private, i32, read_write> = access %obj, 0u, 7i
+        %276:i32 = load %275
+        %x_193:i32 = let %276
+        %278:f32 = load_vector_element %color, 2u
+        %x_196:f32 = let %278
+        %280:f32 = convert %x_193
+        %281:f32 = add %x_196, %280
+        store_vector_element %color, 2u, %281
         exit_if  # if_12
       }
     }
-    %195:ptr<private, i32, read_write> = access %obj, 0u, 8i
-    %x_200:i32 = load %195
-    %x_203:f32 = load_vector_element %color, 2u
-    %198:f32 = convert %x_200
-    %199:f32 = add %x_203, %198
-    store_vector_element %color, 2u, %199
-    %x_207:f32 = load_vector_element %uv, 0u
-    %x_209:f32 = load_vector_element %uv, 1u
-    %202:f32 = sub %x_207, %x_209
-    %203:f32 = abs %202
-    %204:bool = lt %203, 0.25f
-    if %204 [t: %b27] {  # if_13
-      %b27 = block {  # true
-        %205:ptr<private, i32, read_write> = access %obj, 0u, 9i
-        %x_216:i32 = load %205
-        %x_219:f32 = load_vector_element %color, 0u
-        %208:f32 = convert %x_216
-        %209:f32 = add %x_219, %208
-        store_vector_element %color, 0u, %209
+    %282:ptr<private, i32, read_write> = access %obj, 0u, 8i
+    %283:i32 = load %282
+    %x_200:i32 = let %283
+    %285:f32 = load_vector_element %color, 2u
+    %x_203:f32 = let %285
+    %287:f32 = convert %x_200
+    %288:f32 = add %x_203, %287
+    store_vector_element %color, 2u, %288
+    %289:f32 = load_vector_element %uv, 0u
+    %x_207:f32 = let %289
+    %291:f32 = load_vector_element %uv, 1u
+    %x_209:f32 = let %291
+    %293:f32 = sub %x_207, %x_209
+    %294:f32 = abs %293
+    %295:bool = lt %294, 0.25f
+    if %295 [t: $B27] {  # if_13
+      $B27: {  # true
+        %296:ptr<private, i32, read_write> = access %obj, 0u, 9i
+        %297:i32 = load %296
+        %x_216:i32 = let %297
+        %299:f32 = load_vector_element %color, 0u
+        %x_219:f32 = let %299
+        %301:f32 = convert %x_216
+        %302:f32 = add %x_219, %301
+        store_vector_element %color, 0u, %302
         exit_if  # if_13
       }
     }
-    %x_222:vec3<f32> = load %color
-    %x_223:vec3<f32> = normalize %x_222
-    %212:f32 = access %x_223, 0u
-    %213:f32 = access %x_223, 1u
-    %214:f32 = access %x_223, 2u
-    %215:vec4<f32> = construct %212, %213, %214, 1.0f
-    store %x_GLF_color, %215
+    %303:vec3<f32> = load %color
+    %x_222:vec3<f32> = let %303
+    %305:vec3<f32> = normalize %x_222
+    %x_223:vec3<f32> = let %305
+    %307:f32 = access %x_223, 0u
+    %308:f32 = access %x_223, 1u
+    %309:f32 = access %x_223, 2u
+    %310:vec4<f32> = construct %307, %308, %309, 1.0f
+    store %x_GLF_color, %310
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b28 {
-  %b28 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B28: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %218:void = call %main_1
-    %219:vec4<f32> = load %x_GLF_color
-    %220:main_out = construct %219
-    ret %220
+    %313:void = call %main_1
+    %314:vec4<f32> = load %x_GLF_color
+    %315:main_out = construct %314
+    ret %315
   }
 }
 
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
index b15de75..04428d8 100644
--- 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
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,14 +8,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%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
@@ -24,72 +24,78 @@
     %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))
-    %x_86:array<vec4<f32>, 8> = load %x_81
-    %13:vec4<f32> = load %gl_FragCoord
-    %14:vec2<f32> = swizzle %13, xy
-    %15:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %16:vec2<f32> = load %15
-    %17:vec2<f32> = div %14, %16
-    %18:vec2<f32> = mul %17, 32.0f
-    %x_93:vec2<f32> = floor %18
+    %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 = block {  # body
+    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
-        %24:i32 = load %x_98
-        %25:bool = lt %24, 8i
-        if %25 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %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 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
         %x_104:ptr<function, vec4<f32>, read_write> = var
         store %x_82, %x_86
-        %27:i32 = load %x_98
-        %28:ptr<function, vec4<f32>, read_write> = access %x_82, %27
-        %29:vec4<f32> = load %28
-        store %x_104, %29
-        switch 0u [c: (default, %b7)] {  # switch_1
-          %b7 = block {  # case
-            %x_107:f32 = access %x_93, 0u
-            %x_108:f32 = load_vector_element %x_104, 0u
-            %32:bool = lt %x_107, %x_108
-            if %32 [t: %b8] {  # if_2
-              %b8 = block {  # true
+        %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
               }
             }
-            %x_112:f32 = access %x_93, 1u
-            %x_113:f32 = load_vector_element %x_104, 1u
-            %35:bool = lt %x_112, %x_113
-            if %35 [t: %b9] {  # if_3
-              %b9 = block {  # true
+            %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
               }
             }
-            %36:f32 = load_vector_element %x_104, 2u
-            %37:f32 = add %x_108, %36
-            %38:bool = gt %x_107, %37
-            if %38 [t: %b10] {  # if_4
-              %b10 = block {  # true
+            %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
               }
             }
-            %39:f32 = load_vector_element %x_104, 3u
-            %40:f32 = add %x_113, %39
-            %41:bool = gt %x_112, %40
-            if %41 [t: %b11] {  # if_5
-              %b11 = block {  # true
+            %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
               }
@@ -98,64 +104,93 @@
             exit_switch  # switch_1
           }
         }
-        %42:vec4<f32> = load %x_95
-        store %x_96, %42
-        %43:bool = load %x_127
-        if %43 [t: %b12] {  # if_6
-          %b12 = block {  # true
+        %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))
-            %44:i32 = load %x_98
-            %45:ptr<function, vec4<f32>, read_write> = access %x_83, %44
-            %x_131:f32 = load_vector_element %45, 0u
+            %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))
-            %47:i32 = load %x_98
-            %48:ptr<function, vec4<f32>, read_write> = access %x_84, %47
-            %x_134:f32 = load_vector_element %48, 1u
-            %x_135:array<vec4<f32>, 8> = load %x_81
+            %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))
-            %51:i32 = convert %x_131
-            %52:i32 = convert %x_134
-            %53:i32 = mul %51, %52
-            %54:i32 = load %x_98
-            %55:i32 = mul %54, 9i
-            %56:i32 = add %53, %55
-            %57:i32 = add %56, 11i
-            %58:i32 = mod %57, 16i
-            %59:ptr<function, vec4<f32>, read_write> = access %x_85, %58
-            %60:vec4<f32> = load %59
-            store %x_143, %60
-            %61:vec4<f32> = load %x_143
-            store %x_96, %61
+            %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
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %62:i32 = load %x_98
-        %63:i32 = add %62, 1i
-        store %x_99, %63
-        %64:vec4<f32> = load %x_96
-        store %x_95, %64
-        %65:i32 = load %x_99
-        store %x_98, %65
-        next_iteration %b3
+      $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
       }
     }
-    %66:vec4<f32> = load %x_95
-    store %x_GLF_color, %66
+    %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 {
-  %b13 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B13: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %69:void = call %main_1
-    %70:vec4<f32> = load %x_GLF_color
-    %71:main_out = construct %70
-    ret %71
+    %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
   }
 }
 
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
index bf0511f..4811209 100644
--- 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
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,14 +8,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%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
@@ -25,75 +25,84 @@
     %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))
-    %x_86:array<vec4<f32>, 8> = load %x_81
-    %x_87:vec4<f32> = load %gl_FragCoord
-    %15:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %x_90:vec2<f32> = load %15
-    %17:f32 = access %x_87, 0u
-    %18:f32 = access %x_87, 1u
-    %19:vec2<f32> = construct %17, %18
-    %20:vec2<f32> = div %19, %x_90
-    %21:vec2<f32> = mul %20, 32.0f
-    %x_93:vec2<f32> = floor %21
+    %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 = block {  # body
+    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
-        %27:vec4<f32> = load %x_95_phi
-        store %x_95, %27
-        %x_98:i32 = load %x_98_phi
-        %29:bool = lt %x_98, 8i
-        if %29 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %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 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
         %x_104:ptr<function, vec4<f32>, read_write> = var
         store %x_82, %x_86
-        %31:ptr<function, vec4<f32>, read_write> = access %x_82, %x_98
-        %32:vec4<f32> = load %31
-        store %x_104, %32
-        switch 0u [c: (default, %b7)] {  # switch_1
-          %b7 = block {  # case
-            %x_107:f32 = access %x_93, 0u
-            %x_108:f32 = load_vector_element %x_104, 0u
-            %35:bool = lt %x_107, %x_108
-            if %35 [t: %b8] {  # if_2
-              %b8 = block {  # true
+        %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
               }
             }
-            %x_112:f32 = access %x_93, 1u
-            %x_113:f32 = load_vector_element %x_104, 1u
-            %38:bool = lt %x_112, %x_113
-            if %38 [t: %b9] {  # if_3
-              %b9 = block {  # true
+            %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
               }
             }
-            %39:f32 = load_vector_element %x_104, 2u
-            %40:f32 = add %x_108, %39
-            %41:bool = gt %x_107, %40
-            if %41 [t: %b10] {  # if_4
-              %b10 = block {  # true
+            %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
               }
             }
-            %42:f32 = load_vector_element %x_104, 3u
-            %43:f32 = add %x_113, %42
-            %44:bool = gt %x_112, %43
-            if %44 [t: %b11] {  # if_5
-              %b11 = block {  # true
+            %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
               }
@@ -102,60 +111,91 @@
             exit_switch  # switch_1
           }
         }
-        %x_127:bool = load %x_127_phi
-        %46:vec4<f32> = load %x_95
-        store %x_96_phi, %46
-        if %x_127 [t: %b12] {  # if_6
-          %b12 = block {  # true
+        %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))
-            %47:ptr<function, vec4<f32>, read_write> = access %x_83, %x_98
-            %x_131:f32 = load_vector_element %47, 0u
+            %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))
-            %49:ptr<function, vec4<f32>, read_write> = access %x_84, %x_98
-            %x_134:f32 = load_vector_element %49, 1u
-            %x_135:array<vec4<f32>, 8> = load %x_81
+            %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))
-            %52:i32 = convert %x_131
-            %53:i32 = convert %x_134
-            %54:i32 = mul %52, %53
-            %55:i32 = mul %x_98, 9i
-            %56:i32 = add %54, %55
-            %57:i32 = add %56, 11i
-            %58:i32 = mod %57, 16i
-            %59:ptr<function, vec4<f32>, read_write> = access %x_85, %58
-            %60:vec4<f32> = load %59
-            store %x_143, %60
-            %61:vec4<f32> = load %x_143
-            store %x_96_phi, %61
+            %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
           }
         }
-        %x_96:vec4<f32> = load %x_96_phi
-        continue %b4
+        %78:vec4<f32> = load %x_96_phi
+        %x_96:vec4<f32> = let %78
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %63:i32 = add %x_98, 1i
-        store %x_99, %63
+      $B4: {  # continuing
+        %80:i32 = add %x_98, 1i
+        store %x_99, %80
         store %x_95_phi, %x_96
-        %64:i32 = load %x_99
-        store %x_98_phi, %64
-        next_iteration %b3
+        %81:i32 = load %x_99
+        store %x_98_phi, %81
+        next_iteration  # -> $B3
       }
     }
-    %65:vec4<f32> = load %x_95
-    store %x_GLF_color, %65
+    %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 {
-  %b13 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B13: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %68:void = call %main_1
-    %69:vec4<f32> = load %x_GLF_color
-    %70:main_out = construct %69
-    ret %70
+    %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
   }
 }
 
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
index b0fdab5..3e3d461 100644
--- 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
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,14 +8,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%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
@@ -24,72 +24,78 @@
     %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))
-    %x_86:array<vec4<f32>, 8> = load %x_81
-    %13:vec4<f32> = load %gl_FragCoord
-    %14:vec2<f32> = swizzle %13, xy
-    %15:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %16:vec2<f32> = load %15
-    %17:vec2<f32> = div %14, %16
-    %18:vec2<f32> = mul %17, 32.0f
-    %x_93:vec2<f32> = floor %18
+    %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 = block {  # body
+    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
-        %24:i32 = load %x_98
-        %25:bool = lt %24, 8i
-        if %25 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %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 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
         %x_104:ptr<function, vec4<f32>, read_write> = var
         store %x_82, %x_86
-        %27:i32 = load %x_98
-        %28:ptr<function, vec4<f32>, read_write> = access %x_82, %27
-        %29:vec4<f32> = load %28
-        store %x_104, %29
-        switch 0u [c: (default, %b7)] {  # switch_1
-          %b7 = block {  # case
-            %x_107:f32 = access %x_93, 0u
-            %x_108:f32 = load_vector_element %x_104, 0u
-            %32:bool = lt %x_107, %x_108
-            if %32 [t: %b8] {  # if_2
-              %b8 = block {  # true
+        %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
               }
             }
-            %x_112:f32 = access %x_93, 1u
-            %x_113:f32 = load_vector_element %x_104, 1u
-            %35:bool = lt %x_112, %x_113
-            if %35 [t: %b9] {  # if_3
-              %b9 = block {  # true
+            %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
               }
             }
-            %36:f32 = load_vector_element %x_104, 2u
-            %37:f32 = add %x_108, %36
-            %38:bool = gt %x_107, %37
-            if %38 [t: %b10] {  # if_4
-              %b10 = block {  # true
+            %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
               }
             }
-            %39:f32 = load_vector_element %x_104, 3u
-            %40:f32 = add %x_113, %39
-            %41:bool = gt %x_112, %40
-            if %41 [t: %b11] {  # if_5
-              %b11 = block {  # true
+            %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
               }
@@ -98,61 +104,89 @@
             exit_switch  # switch_1
           }
         }
-        %42:vec4<f32> = load %x_95
-        store %x_96, %42
-        %43:bool = load %x_127
-        if %43 [t: %b12] {  # if_6
-          %b12 = block {  # true
+        %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))
-            %44:i32 = load %x_98
-            %45:ptr<function, vec4<f32>, read_write> = access %x_83, %44
-            %x_131:f32 = load_vector_element %45, 0u
+            %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))
-            %47:i32 = load %x_98
-            %48:ptr<function, vec4<f32>, read_write> = access %x_84, %47
-            %x_134:f32 = load_vector_element %48, 1u
+            %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))
-            %50:i32 = convert %x_131
-            %51:i32 = convert %x_134
-            %52:i32 = mul %50, %51
-            %53:i32 = load %x_98
-            %54:i32 = mul %53, 9i
-            %55:i32 = add %52, %54
-            %56:i32 = add %55, 11i
-            %57:i32 = mod %56, 16i
-            %58:ptr<function, vec4<f32>, read_write> = access %x_85, %57
-            %59:vec4<f32> = load %58
-            store %x_142, %59
-            %60:vec4<f32> = load %x_142
-            store %x_96, %60
+            %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
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %61:i32 = load %x_98
-        %62:i32 = add %61, 1i
-        store %x_99, %62
-        %63:vec4<f32> = load %x_96
-        store %x_95, %63
-        %64:i32 = load %x_99
-        store %x_98, %64
-        next_iteration %b3
+      $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
       }
     }
-    %65:vec4<f32> = load %x_95
-    store %x_GLF_color, %65
+    %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 {
-  %b13 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B13: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %68:void = call %main_1
-    %69:vec4<f32> = load %x_GLF_color
-    %70:main_out = construct %69
-    ret %70
+    %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
   }
 }
 
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
index c7a0843..a5d0340 100644
--- 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
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,14 +8,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%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
@@ -25,75 +25,84 @@
     %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))
-    %x_86:array<vec4<f32>, 8> = load %x_81
-    %x_87:vec4<f32> = load %gl_FragCoord
-    %15:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %x_90:vec2<f32> = load %15
-    %17:f32 = access %x_87, 0u
-    %18:f32 = access %x_87, 1u
-    %19:vec2<f32> = construct %17, %18
-    %20:vec2<f32> = div %19, %x_90
-    %21:vec2<f32> = mul %20, 32.0f
-    %x_93:vec2<f32> = floor %21
+    %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 = block {  # body
+    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
-        %27:vec4<f32> = load %x_95_phi
-        store %x_95, %27
-        %x_98:i32 = load %x_98_phi
-        %29:bool = lt %x_98, 8i
-        if %29 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %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 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
         %x_104:ptr<function, vec4<f32>, read_write> = var
         store %x_82, %x_86
-        %31:ptr<function, vec4<f32>, read_write> = access %x_82, %x_98
-        %32:vec4<f32> = load %31
-        store %x_104, %32
-        switch 0u [c: (default, %b7)] {  # switch_1
-          %b7 = block {  # case
-            %x_107:f32 = access %x_93, 0u
-            %x_108:f32 = load_vector_element %x_104, 0u
-            %35:bool = lt %x_107, %x_108
-            if %35 [t: %b8] {  # if_2
-              %b8 = block {  # true
+        %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
               }
             }
-            %x_112:f32 = access %x_93, 1u
-            %x_113:f32 = load_vector_element %x_104, 1u
-            %38:bool = lt %x_112, %x_113
-            if %38 [t: %b9] {  # if_3
-              %b9 = block {  # true
+            %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
               }
             }
-            %39:f32 = load_vector_element %x_104, 2u
-            %40:f32 = add %x_108, %39
-            %41:bool = gt %x_107, %40
-            if %41 [t: %b10] {  # if_4
-              %b10 = block {  # true
+            %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
               }
             }
-            %42:f32 = load_vector_element %x_104, 3u
-            %43:f32 = add %x_113, %42
-            %44:bool = gt %x_112, %43
-            if %44 [t: %b11] {  # if_5
-              %b11 = block {  # true
+            %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
               }
@@ -102,57 +111,87 @@
             exit_switch  # switch_1
           }
         }
-        %x_127:bool = load %x_127_phi
-        %46:vec4<f32> = load %x_95
-        store %x_96_phi, %46
-        if %x_127 [t: %b12] {  # if_6
-          %b12 = block {  # true
+        %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))
-            %47:ptr<function, vec4<f32>, read_write> = access %x_83, %x_98
-            %x_131:f32 = load_vector_element %47, 0u
+            %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))
-            %49:ptr<function, vec4<f32>, read_write> = access %x_84, %x_98
-            %x_134:f32 = load_vector_element %49, 1u
+            %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))
-            %51:i32 = convert %x_131
-            %52:i32 = convert %x_134
-            %53:i32 = mul %51, %52
-            %54:i32 = mul %x_98, 9i
-            %55:i32 = add %53, %54
-            %56:i32 = add %55, 11i
-            %57:i32 = mod %56, 16i
-            %58:ptr<function, vec4<f32>, read_write> = access %x_85, %57
-            %59:vec4<f32> = load %58
-            store %x_142, %59
-            %60:vec4<f32> = load %x_142
-            store %x_96_phi, %60
+            %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
           }
         }
-        %x_96:vec4<f32> = load %x_96_phi
-        continue %b4
+        %76:vec4<f32> = load %x_96_phi
+        %x_96:vec4<f32> = let %76
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %62:i32 = add %x_98, 1i
-        store %x_99, %62
+      $B4: {  # continuing
+        %78:i32 = add %x_98, 1i
+        store %x_99, %78
         store %x_95_phi, %x_96
-        %63:i32 = load %x_99
-        store %x_98_phi, %63
-        next_iteration %b3
+        %79:i32 = load %x_99
+        store %x_98_phi, %79
+        next_iteration  # -> $B3
       }
     }
-    %64:vec4<f32> = load %x_95
-    store %x_GLF_color, %64
+    %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 {
-  %b13 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B13: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %67:void = call %main_1
-    %68:vec4<f32> = load %x_GLF_color
-    %69:main_out = construct %68
-    ret %69
+    %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
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/0.spvasm.expected.ir.msl
index 28251dc..c177362 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/0.spvasm.expected.ir.msl
@@ -1,6 +1,1076 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: BST = struct @align(4) {
+  data:i32 @offset(0)
+  leftIndex:i32 @offset(4)
+  rightIndex:i32 @offset(8)
+}
+
+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
+}
+
+%main_1 = func():void {
+  $B2: {
+    %tree:ptr<function, array<BST, 10>, read_write> = var
+    %x_58:ptr<function, i32, read_write> = var
+    %x_86:ptr<function, bool, read_write> = var
+    %x_353:ptr<function, i32, read_write> = var
+    %x_356:ptr<function, i32, read_write> = var
+    %x_358:ptr<function, i32, read_write> = var
+    %9:ptr<function, BST, read_write> = access %tree, 0i
+    store %9, BST(9i, -1i, -1i)
+    switch 0u [c: (default, $B3)] {  # switch_1
+      $B3: {  # case
+        store %x_58, 0i
+        loop [b: $B4, c: $B5] {  # loop_1
+          $B4: {  # body
+            %x_84:ptr<function, i32, read_write> = var
+            %x_76:ptr<function, i32, read_write> = var
+            %x_59:ptr<function, i32, read_write> = var
+            store %x_86, false
+            %13:i32 = load %x_58
+            %14:bool = lte %13, 1i
+            if %14 [t: $B6, f: $B7] {  # if_1
+              $B6: {  # true
+                exit_if  # if_1
+              }
+              $B7: {  # false
+                exit_loop  # loop_1
+              }
+            }
+            %15:i32 = load %x_58
+            %16:ptr<function, i32, read_write> = access %tree, %15, 0u
+            %17:i32 = load %16
+            %18:bool = lte 5i, %17
+            if %18 [t: $B8, f: $B9] {  # if_2
+              $B8: {  # true
+                %19:i32 = load %x_58
+                %x_78_save:i32 = let %19
+                %21:i32 = load %x_58
+                %22:ptr<function, i32, read_write> = access %tree, %21, 1u
+                %23:i32 = load %22
+                %24:bool = eq %23, -1i
+                if %24 [t: $B10, f: $B11] {  # if_3
+                  $B10: {  # true
+                    %25:ptr<function, i32, read_write> = access %tree, %x_78_save, 1u
+                    store %25, 1i
+                    %26:ptr<function, BST, read_write> = access %tree, 1i
+                    store %26, BST(5i, -1i, -1i)
+                    store %x_86, true
+                    exit_loop  # loop_1
+                  }
+                  $B11: {  # false
+                    %27:ptr<function, i32, read_write> = access %tree, %x_78_save, 1u
+                    %28:i32 = load %27
+                    store %x_84, %28
+                    %29:i32 = load %x_84
+                    store %x_59, %29
+                    continue  # -> $B5
+                  }
+                }
+                exit_if  # if_2
+              }
+              $B9: {  # false
+                %30:i32 = load %x_58
+                %x_70_save:i32 = let %30
+                %32:i32 = load %x_58
+                %33:ptr<function, i32, read_write> = access %tree, %32, 2u
+                %34:i32 = load %33
+                %35:bool = eq %34, -1i
+                if %35 [t: $B12, f: $B13] {  # if_4
+                  $B12: {  # true
+                    %36:ptr<function, i32, read_write> = access %tree, %x_70_save, 2u
+                    store %36, 1i
+                    %37:ptr<function, BST, read_write> = access %tree, 1i
+                    store %37, BST(5i, -1i, -1i)
+                    store %x_86, true
+                    exit_loop  # loop_1
+                  }
+                  $B13: {  # false
+                    %38:ptr<function, i32, read_write> = access %tree, %x_70_save, 2u
+                    %39:i32 = load %38
+                    store %x_76, %39
+                    %40:i32 = load %x_76
+                    store %x_59, %40
+                    continue  # -> $B5
+                  }
+                }
+                exit_if  # if_2
+              }
+            }
+            unreachable
+          }
+          $B5: {  # continuing
+            %41:i32 = load %x_59
+            store %x_58, %41
+            next_iteration  # -> $B4
+          }
+        }
+        %42:bool = load %x_86
+        if %42 [t: $B14] {  # if_5
+          $B14: {  # true
+            exit_switch  # switch_1
+          }
+        }
+        exit_switch  # switch_1
+      }
+    }
+    %x_91:ptr<function, i32, read_write> = var
+    %x_119:ptr<function, bool, read_write> = var
+    switch 0u [c: (default, $B15)] {  # switch_2
+      $B15: {  # case
+        store %x_91, 0i
+        loop [b: $B16, c: $B17] {  # loop_2
+          $B16: {  # body
+            %x_117:ptr<function, i32, read_write> = var
+            %x_109:ptr<function, i32, read_write> = var
+            %x_92:ptr<function, i32, read_write> = var
+            store %x_119, false
+            %48:i32 = load %x_91
+            %49:bool = lte %48, 2i
+            if %49 [t: $B18, f: $B19] {  # if_6
+              $B18: {  # true
+                exit_if  # if_6
+              }
+              $B19: {  # false
+                exit_loop  # loop_2
+              }
+            }
+            %50:i32 = load %x_91
+            %51:ptr<function, i32, read_write> = access %tree, %50, 0u
+            %52:i32 = load %51
+            %53:bool = lte 12i, %52
+            if %53 [t: $B20, f: $B21] {  # if_7
+              $B20: {  # true
+                %54:i32 = load %x_91
+                %x_111_save:i32 = let %54
+                %56:i32 = load %x_91
+                %57:ptr<function, i32, read_write> = access %tree, %56, 1u
+                %58:i32 = load %57
+                %59:bool = eq %58, -1i
+                if %59 [t: $B22, f: $B23] {  # if_8
+                  $B22: {  # true
+                    %60:ptr<function, i32, read_write> = access %tree, %x_111_save, 1u
+                    store %60, 2i
+                    %61:ptr<function, BST, read_write> = access %tree, 2i
+                    store %61, BST(12i, -1i, -1i)
+                    store %x_119, true
+                    exit_loop  # loop_2
+                  }
+                  $B23: {  # false
+                    %62:ptr<function, i32, read_write> = access %tree, %x_111_save, 1u
+                    %63:i32 = load %62
+                    store %x_117, %63
+                    %64:i32 = load %x_117
+                    store %x_92, %64
+                    continue  # -> $B17
+                  }
+                }
+                exit_if  # if_7
+              }
+              $B21: {  # false
+                %65:i32 = load %x_91
+                %x_103_save:i32 = let %65
+                %67:i32 = load %x_91
+                %68:ptr<function, i32, read_write> = access %tree, %67, 2u
+                %69:i32 = load %68
+                %70:bool = eq %69, -1i
+                if %70 [t: $B24, f: $B25] {  # if_9
+                  $B24: {  # true
+                    %71:ptr<function, i32, read_write> = access %tree, %x_103_save, 2u
+                    store %71, 2i
+                    %72:ptr<function, BST, read_write> = access %tree, 2i
+                    store %72, BST(12i, -1i, -1i)
+                    store %x_119, true
+                    exit_loop  # loop_2
+                  }
+                  $B25: {  # false
+                    %73:ptr<function, i32, read_write> = access %tree, %x_103_save, 2u
+                    %74:i32 = load %73
+                    store %x_109, %74
+                    %75:i32 = load %x_109
+                    store %x_92, %75
+                    continue  # -> $B17
+                  }
+                }
+                exit_if  # if_7
+              }
+            }
+            unreachable
+          }
+          $B17: {  # continuing
+            %76:i32 = load %x_92
+            store %x_91, %76
+            next_iteration  # -> $B16
+          }
+        }
+        %77:bool = load %x_119
+        if %77 [t: $B26] {  # if_10
+          $B26: {  # true
+            exit_switch  # switch_2
+          }
+        }
+        exit_switch  # switch_2
+      }
+    }
+    %x_124:ptr<function, i32, read_write> = var
+    %x_152:ptr<function, bool, read_write> = var
+    switch 0u [c: (default, $B27)] {  # switch_3
+      $B27: {  # case
+        store %x_124, 0i
+        loop [b: $B28, c: $B29] {  # loop_3
+          $B28: {  # body
+            %x_150:ptr<function, i32, read_write> = var
+            %x_142:ptr<function, i32, read_write> = var
+            %x_125:ptr<function, i32, read_write> = var
+            store %x_152, false
+            %83:i32 = load %x_124
+            %84:bool = lte %83, 3i
+            if %84 [t: $B30, f: $B31] {  # if_11
+              $B30: {  # true
+                exit_if  # if_11
+              }
+              $B31: {  # false
+                exit_loop  # loop_3
+              }
+            }
+            %85:i32 = load %x_124
+            %86:ptr<function, i32, read_write> = access %tree, %85, 0u
+            %87:i32 = load %86
+            %88:bool = lte 15i, %87
+            if %88 [t: $B32, f: $B33] {  # if_12
+              $B32: {  # true
+                %89:i32 = load %x_124
+                %x_144_save:i32 = let %89
+                %91:i32 = load %x_124
+                %92:ptr<function, i32, read_write> = access %tree, %91, 1u
+                %93:i32 = load %92
+                %94:bool = eq %93, -1i
+                if %94 [t: $B34, f: $B35] {  # if_13
+                  $B34: {  # true
+                    %95:ptr<function, i32, read_write> = access %tree, %x_144_save, 1u
+                    store %95, 3i
+                    %96:ptr<function, BST, read_write> = access %tree, 3i
+                    store %96, BST(15i, -1i, -1i)
+                    store %x_152, true
+                    exit_loop  # loop_3
+                  }
+                  $B35: {  # false
+                    %97:ptr<function, i32, read_write> = access %tree, %x_144_save, 1u
+                    %98:i32 = load %97
+                    store %x_150, %98
+                    %99:i32 = load %x_150
+                    store %x_125, %99
+                    continue  # -> $B29
+                  }
+                }
+                exit_if  # if_12
+              }
+              $B33: {  # false
+                %100:i32 = load %x_124
+                %x_136_save:i32 = let %100
+                %102:i32 = load %x_124
+                %103:ptr<function, i32, read_write> = access %tree, %102, 2u
+                %104:i32 = load %103
+                %105:bool = eq %104, -1i
+                if %105 [t: $B36, f: $B37] {  # if_14
+                  $B36: {  # true
+                    %106:ptr<function, i32, read_write> = access %tree, %x_136_save, 2u
+                    store %106, 3i
+                    %107:ptr<function, BST, read_write> = access %tree, 3i
+                    store %107, BST(15i, -1i, -1i)
+                    store %x_152, true
+                    exit_loop  # loop_3
+                  }
+                  $B37: {  # false
+                    %108:ptr<function, i32, read_write> = access %tree, %x_136_save, 2u
+                    %109:i32 = load %108
+                    store %x_142, %109
+                    %110:i32 = load %x_142
+                    store %x_125, %110
+                    continue  # -> $B29
+                  }
+                }
+                exit_if  # if_12
+              }
+            }
+            unreachable
+          }
+          $B29: {  # continuing
+            %111:i32 = load %x_125
+            store %x_124, %111
+            next_iteration  # -> $B28
+          }
+        }
+        %112:bool = load %x_152
+        if %112 [t: $B38] {  # if_15
+          $B38: {  # true
+            exit_switch  # switch_3
+          }
+        }
+        exit_switch  # switch_3
+      }
+    }
+    %x_157:ptr<function, i32, read_write> = var
+    %x_185:ptr<function, bool, read_write> = var
+    switch 0u [c: (default, $B39)] {  # switch_4
+      $B39: {  # case
+        store %x_157, 0i
+        loop [b: $B40, c: $B41] {  # loop_4
+          $B40: {  # body
+            %x_183:ptr<function, i32, read_write> = var
+            %x_175:ptr<function, i32, read_write> = var
+            %x_158:ptr<function, i32, read_write> = var
+            store %x_185, false
+            %118:i32 = load %x_157
+            %119:bool = lte %118, 4i
+            if %119 [t: $B42, f: $B43] {  # if_16
+              $B42: {  # true
+                exit_if  # if_16
+              }
+              $B43: {  # false
+                exit_loop  # loop_4
+              }
+            }
+            %120:i32 = load %x_157
+            %121:ptr<function, i32, read_write> = access %tree, %120, 0u
+            %122:i32 = load %121
+            %123:bool = lte 7i, %122
+            if %123 [t: $B44, f: $B45] {  # if_17
+              $B44: {  # true
+                %124:i32 = load %x_157
+                %x_177_save:i32 = let %124
+                %126:i32 = load %x_157
+                %127:ptr<function, i32, read_write> = access %tree, %126, 1u
+                %128:i32 = load %127
+                %129:bool = eq %128, -1i
+                if %129 [t: $B46, f: $B47] {  # if_18
+                  $B46: {  # true
+                    %130:ptr<function, i32, read_write> = access %tree, %x_177_save, 1u
+                    store %130, 4i
+                    %131:ptr<function, BST, read_write> = access %tree, 4i
+                    store %131, BST(7i, -1i, -1i)
+                    store %x_185, true
+                    exit_loop  # loop_4
+                  }
+                  $B47: {  # false
+                    %132:ptr<function, i32, read_write> = access %tree, %x_177_save, 1u
+                    %133:i32 = load %132
+                    store %x_183, %133
+                    %134:i32 = load %x_183
+                    store %x_158, %134
+                    continue  # -> $B41
+                  }
+                }
+                exit_if  # if_17
+              }
+              $B45: {  # false
+                %135:i32 = load %x_157
+                %x_169_save:i32 = let %135
+                %137:i32 = load %x_157
+                %138:ptr<function, i32, read_write> = access %tree, %137, 2u
+                %139:i32 = load %138
+                %140:bool = eq %139, -1i
+                if %140 [t: $B48, f: $B49] {  # if_19
+                  $B48: {  # true
+                    %141:ptr<function, i32, read_write> = access %tree, %x_169_save, 2u
+                    store %141, 4i
+                    %142:ptr<function, BST, read_write> = access %tree, 4i
+                    store %142, BST(7i, -1i, -1i)
+                    store %x_185, true
+                    exit_loop  # loop_4
+                  }
+                  $B49: {  # false
+                    %143:ptr<function, i32, read_write> = access %tree, %x_169_save, 2u
+                    %144:i32 = load %143
+                    store %x_175, %144
+                    %145:i32 = load %x_175
+                    store %x_158, %145
+                    continue  # -> $B41
+                  }
+                }
+                exit_if  # if_17
+              }
+            }
+            unreachable
+          }
+          $B41: {  # continuing
+            %146:i32 = load %x_158
+            store %x_157, %146
+            next_iteration  # -> $B40
+          }
+        }
+        %147:bool = load %x_185
+        if %147 [t: $B50] {  # if_20
+          $B50: {  # true
+            exit_switch  # switch_4
+          }
+        }
+        exit_switch  # switch_4
+      }
+    }
+    %x_190:ptr<function, i32, read_write> = var
+    %x_218:ptr<function, bool, read_write> = var
+    switch 0u [c: (default, $B51)] {  # switch_5
+      $B51: {  # case
+        store %x_190, 0i
+        loop [b: $B52, c: $B53] {  # loop_5
+          $B52: {  # body
+            %x_216:ptr<function, i32, read_write> = var
+            %x_208:ptr<function, i32, read_write> = var
+            %x_191:ptr<function, i32, read_write> = var
+            store %x_218, false
+            %153:i32 = load %x_190
+            %154:bool = lte %153, 5i
+            if %154 [t: $B54, f: $B55] {  # if_21
+              $B54: {  # true
+                exit_if  # if_21
+              }
+              $B55: {  # false
+                exit_loop  # loop_5
+              }
+            }
+            %155:i32 = load %x_190
+            %156:ptr<function, i32, read_write> = access %tree, %155, 0u
+            %157:i32 = load %156
+            %158:bool = lte 8i, %157
+            if %158 [t: $B56, f: $B57] {  # if_22
+              $B56: {  # true
+                %159:i32 = load %x_190
+                %x_210_save:i32 = let %159
+                %161:i32 = load %x_190
+                %162:ptr<function, i32, read_write> = access %tree, %161, 1u
+                %163:i32 = load %162
+                %164:bool = eq %163, -1i
+                if %164 [t: $B58, f: $B59] {  # if_23
+                  $B58: {  # true
+                    %165:ptr<function, i32, read_write> = access %tree, %x_210_save, 1u
+                    store %165, 5i
+                    %166:ptr<function, BST, read_write> = access %tree, 5i
+                    store %166, BST(8i, -1i, -1i)
+                    store %x_218, true
+                    exit_loop  # loop_5
+                  }
+                  $B59: {  # false
+                    %167:ptr<function, i32, read_write> = access %tree, %x_210_save, 1u
+                    %168:i32 = load %167
+                    store %x_216, %168
+                    %169:i32 = load %x_216
+                    store %x_191, %169
+                    continue  # -> $B53
+                  }
+                }
+                exit_if  # if_22
+              }
+              $B57: {  # false
+                %170:i32 = load %x_190
+                %x_202_save:i32 = let %170
+                %172:i32 = load %x_190
+                %173:ptr<function, i32, read_write> = access %tree, %172, 2u
+                %174:i32 = load %173
+                %175:bool = eq %174, -1i
+                if %175 [t: $B60, f: $B61] {  # if_24
+                  $B60: {  # true
+                    %176:ptr<function, i32, read_write> = access %tree, %x_202_save, 2u
+                    store %176, 5i
+                    %177:ptr<function, BST, read_write> = access %tree, 5i
+                    store %177, BST(8i, -1i, -1i)
+                    store %x_218, true
+                    exit_loop  # loop_5
+                  }
+                  $B61: {  # false
+                    %178:ptr<function, i32, read_write> = access %tree, %x_202_save, 2u
+                    %179:i32 = load %178
+                    store %x_208, %179
+                    %180:i32 = load %x_208
+                    store %x_191, %180
+                    continue  # -> $B53
+                  }
+                }
+                exit_if  # if_22
+              }
+            }
+            unreachable
+          }
+          $B53: {  # continuing
+            %181:i32 = load %x_191
+            store %x_190, %181
+            next_iteration  # -> $B52
+          }
+        }
+        %182:bool = load %x_218
+        if %182 [t: $B62] {  # if_25
+          $B62: {  # true
+            exit_switch  # switch_5
+          }
+        }
+        exit_switch  # switch_5
+      }
+    }
+    %x_223:ptr<function, i32, read_write> = var
+    %x_251:ptr<function, bool, read_write> = var
+    switch 0u [c: (default, $B63)] {  # switch_6
+      $B63: {  # case
+        store %x_223, 0i
+        loop [b: $B64, c: $B65] {  # loop_6
+          $B64: {  # body
+            %x_249:ptr<function, i32, read_write> = var
+            %x_241:ptr<function, i32, read_write> = var
+            %x_224:ptr<function, i32, read_write> = var
+            store %x_251, false
+            %188:i32 = load %x_223
+            %189:bool = lte %188, 6i
+            if %189 [t: $B66, f: $B67] {  # if_26
+              $B66: {  # true
+                exit_if  # if_26
+              }
+              $B67: {  # false
+                exit_loop  # loop_6
+              }
+            }
+            %190:i32 = load %x_223
+            %191:ptr<function, i32, read_write> = access %tree, %190, 0u
+            %192:i32 = load %191
+            %193:bool = lte 2i, %192
+            if %193 [t: $B68, f: $B69] {  # if_27
+              $B68: {  # true
+                %194:i32 = load %x_223
+                %x_243_save:i32 = let %194
+                %196:i32 = load %x_223
+                %197:ptr<function, i32, read_write> = access %tree, %196, 1u
+                %198:i32 = load %197
+                %199:bool = eq %198, -1i
+                if %199 [t: $B70, f: $B71] {  # if_28
+                  $B70: {  # true
+                    %200:ptr<function, i32, read_write> = access %tree, %x_243_save, 1u
+                    store %200, 6i
+                    %201:ptr<function, BST, read_write> = access %tree, 6i
+                    store %201, BST(2i, -1i, -1i)
+                    store %x_251, true
+                    exit_loop  # loop_6
+                  }
+                  $B71: {  # false
+                    %202:ptr<function, i32, read_write> = access %tree, %x_243_save, 1u
+                    %203:i32 = load %202
+                    store %x_249, %203
+                    %204:i32 = load %x_249
+                    store %x_224, %204
+                    continue  # -> $B65
+                  }
+                }
+                exit_if  # if_27
+              }
+              $B69: {  # false
+                %205:i32 = load %x_223
+                %x_235_save:i32 = let %205
+                %207:i32 = load %x_223
+                %208:ptr<function, i32, read_write> = access %tree, %207, 2u
+                %209:i32 = load %208
+                %210:bool = eq %209, -1i
+                if %210 [t: $B72, f: $B73] {  # if_29
+                  $B72: {  # true
+                    %211:ptr<function, i32, read_write> = access %tree, %x_235_save, 2u
+                    store %211, 6i
+                    %212:ptr<function, BST, read_write> = access %tree, 6i
+                    store %212, BST(2i, -1i, -1i)
+                    store %x_251, true
+                    exit_loop  # loop_6
+                  }
+                  $B73: {  # false
+                    %213:ptr<function, i32, read_write> = access %tree, %x_235_save, 2u
+                    %214:i32 = load %213
+                    store %x_241, %214
+                    %215:i32 = load %x_241
+                    store %x_224, %215
+                    continue  # -> $B65
+                  }
+                }
+                exit_if  # if_27
+              }
+            }
+            unreachable
+          }
+          $B65: {  # continuing
+            %216:i32 = load %x_224
+            store %x_223, %216
+            next_iteration  # -> $B64
+          }
+        }
+        %217:bool = load %x_251
+        if %217 [t: $B74] {  # if_30
+          $B74: {  # true
+            exit_switch  # switch_6
+          }
+        }
+        exit_switch  # switch_6
+      }
+    }
+    %x_256:ptr<function, i32, read_write> = var
+    %x_284:ptr<function, bool, read_write> = var
+    switch 0u [c: (default, $B75)] {  # switch_7
+      $B75: {  # case
+        store %x_256, 0i
+        loop [b: $B76, c: $B77] {  # loop_7
+          $B76: {  # body
+            %x_282:ptr<function, i32, read_write> = var
+            %x_274:ptr<function, i32, read_write> = var
+            %x_257:ptr<function, i32, read_write> = var
+            store %x_284, false
+            %223:i32 = load %x_256
+            %224:bool = lte %223, 7i
+            if %224 [t: $B78, f: $B79] {  # if_31
+              $B78: {  # true
+                exit_if  # if_31
+              }
+              $B79: {  # false
+                exit_loop  # loop_7
+              }
+            }
+            %225:i32 = load %x_256
+            %226:ptr<function, i32, read_write> = access %tree, %225, 0u
+            %227:i32 = load %226
+            %228:bool = lte 6i, %227
+            if %228 [t: $B80, f: $B81] {  # if_32
+              $B80: {  # true
+                %229:i32 = load %x_256
+                %x_276_save:i32 = let %229
+                %231:i32 = load %x_256
+                %232:ptr<function, i32, read_write> = access %tree, %231, 1u
+                %233:i32 = load %232
+                %234:bool = eq %233, -1i
+                if %234 [t: $B82, f: $B83] {  # if_33
+                  $B82: {  # true
+                    %235:ptr<function, i32, read_write> = access %tree, %x_276_save, 1u
+                    store %235, 7i
+                    %236:ptr<function, BST, read_write> = access %tree, 7i
+                    store %236, BST(6i, -1i, -1i)
+                    store %x_284, true
+                    exit_loop  # loop_7
+                  }
+                  $B83: {  # false
+                    %237:ptr<function, i32, read_write> = access %tree, %x_276_save, 1u
+                    %238:i32 = load %237
+                    store %x_282, %238
+                    %239:i32 = load %x_282
+                    store %x_257, %239
+                    continue  # -> $B77
+                  }
+                }
+                exit_if  # if_32
+              }
+              $B81: {  # false
+                %240:i32 = load %x_256
+                %x_268_save:i32 = let %240
+                %242:i32 = load %x_256
+                %243:ptr<function, i32, read_write> = access %tree, %242, 2u
+                %244:i32 = load %243
+                %245:bool = eq %244, -1i
+                if %245 [t: $B84, f: $B85] {  # if_34
+                  $B84: {  # true
+                    %246:ptr<function, i32, read_write> = access %tree, %x_268_save, 2u
+                    store %246, 7i
+                    %247:ptr<function, BST, read_write> = access %tree, 7i
+                    store %247, BST(6i, -1i, -1i)
+                    store %x_284, true
+                    exit_loop  # loop_7
+                  }
+                  $B85: {  # false
+                    %248:ptr<function, i32, read_write> = access %tree, %x_268_save, 2u
+                    %249:i32 = load %248
+                    store %x_274, %249
+                    %250:i32 = load %x_274
+                    store %x_257, %250
+                    continue  # -> $B77
+                  }
+                }
+                exit_if  # if_32
+              }
+            }
+            unreachable
+          }
+          $B77: {  # continuing
+            %251:i32 = load %x_257
+            store %x_256, %251
+            next_iteration  # -> $B76
+          }
+        }
+        %252:bool = load %x_284
+        if %252 [t: $B86] {  # if_35
+          $B86: {  # true
+            exit_switch  # switch_7
+          }
+        }
+        exit_switch  # switch_7
+      }
+    }
+    %x_289:ptr<function, i32, read_write> = var
+    %x_317:ptr<function, bool, read_write> = var
+    switch 0u [c: (default, $B87)] {  # switch_8
+      $B87: {  # case
+        store %x_289, 0i
+        loop [b: $B88, c: $B89] {  # loop_8
+          $B88: {  # body
+            %x_315:ptr<function, i32, read_write> = var
+            %x_307:ptr<function, i32, read_write> = var
+            %x_290:ptr<function, i32, read_write> = var
+            store %x_317, false
+            %258:i32 = load %x_289
+            %259:bool = lte %258, 8i
+            if %259 [t: $B90, f: $B91] {  # if_36
+              $B90: {  # true
+                exit_if  # if_36
+              }
+              $B91: {  # false
+                exit_loop  # loop_8
+              }
+            }
+            %260:i32 = load %x_289
+            %261:ptr<function, i32, read_write> = access %tree, %260, 0u
+            %262:i32 = load %261
+            %263:bool = lte 17i, %262
+            if %263 [t: $B92, f: $B93] {  # if_37
+              $B92: {  # true
+                %264:i32 = load %x_289
+                %x_309_save:i32 = let %264
+                %266:i32 = load %x_289
+                %267:ptr<function, i32, read_write> = access %tree, %266, 1u
+                %268:i32 = load %267
+                %269:bool = eq %268, -1i
+                if %269 [t: $B94, f: $B95] {  # if_38
+                  $B94: {  # true
+                    %270:ptr<function, i32, read_write> = access %tree, %x_309_save, 1u
+                    store %270, 8i
+                    %271:ptr<function, BST, read_write> = access %tree, 8i
+                    store %271, BST(17i, -1i, -1i)
+                    store %x_317, true
+                    exit_loop  # loop_8
+                  }
+                  $B95: {  # false
+                    %272:ptr<function, i32, read_write> = access %tree, %x_309_save, 1u
+                    %273:i32 = load %272
+                    store %x_315, %273
+                    %274:i32 = load %x_315
+                    store %x_290, %274
+                    continue  # -> $B89
+                  }
+                }
+                exit_if  # if_37
+              }
+              $B93: {  # false
+                %275:i32 = load %x_289
+                %x_301_save:i32 = let %275
+                %277:i32 = load %x_289
+                %278:ptr<function, i32, read_write> = access %tree, %277, 2u
+                %279:i32 = load %278
+                %280:bool = eq %279, -1i
+                if %280 [t: $B96, f: $B97] {  # if_39
+                  $B96: {  # true
+                    %281:ptr<function, i32, read_write> = access %tree, %x_301_save, 2u
+                    store %281, 8i
+                    %282:ptr<function, BST, read_write> = access %tree, 8i
+                    store %282, BST(17i, -1i, -1i)
+                    store %x_317, true
+                    exit_loop  # loop_8
+                  }
+                  $B97: {  # false
+                    %283:ptr<function, i32, read_write> = access %tree, %x_301_save, 2u
+                    %284:i32 = load %283
+                    store %x_307, %284
+                    %285:i32 = load %x_307
+                    store %x_290, %285
+                    continue  # -> $B89
+                  }
+                }
+                exit_if  # if_37
+              }
+            }
+            unreachable
+          }
+          $B89: {  # continuing
+            %286:i32 = load %x_290
+            store %x_289, %286
+            next_iteration  # -> $B88
+          }
+        }
+        %287:bool = load %x_317
+        if %287 [t: $B98] {  # if_40
+          $B98: {  # true
+            exit_switch  # switch_8
+          }
+        }
+        exit_switch  # switch_8
+      }
+    }
+    %x_322:ptr<function, i32, read_write> = var
+    %x_350:ptr<function, bool, read_write> = var
+    switch 0u [c: (default, $B99)] {  # switch_9
+      $B99: {  # case
+        store %x_322, 0i
+        loop [b: $B100, c: $B101] {  # loop_9
+          $B100: {  # body
+            %x_348:ptr<function, i32, read_write> = var
+            %x_340:ptr<function, i32, read_write> = var
+            %x_323:ptr<function, i32, read_write> = var
+            store %x_350, false
+            %293:i32 = load %x_322
+            %294:bool = lte %293, 9i
+            if %294 [t: $B102, f: $B103] {  # if_41
+              $B102: {  # true
+                exit_if  # if_41
+              }
+              $B103: {  # false
+                exit_loop  # loop_9
+              }
+            }
+            %295:i32 = load %x_322
+            %296:ptr<function, i32, read_write> = access %tree, %295, 0u
+            %297:i32 = load %296
+            %298:bool = lte 13i, %297
+            if %298 [t: $B104, f: $B105] {  # if_42
+              $B104: {  # true
+                %299:i32 = load %x_322
+                %x_342_save:i32 = let %299
+                %301:i32 = load %x_322
+                %302:ptr<function, i32, read_write> = access %tree, %301, 1u
+                %303:i32 = load %302
+                %304:bool = eq %303, -1i
+                if %304 [t: $B106, f: $B107] {  # if_43
+                  $B106: {  # true
+                    %305:ptr<function, i32, read_write> = access %tree, %x_342_save, 1u
+                    store %305, 9i
+                    %306:ptr<function, BST, read_write> = access %tree, 9i
+                    store %306, BST(13i, -1i, -1i)
+                    store %x_350, true
+                    exit_loop  # loop_9
+                  }
+                  $B107: {  # false
+                    %307:ptr<function, i32, read_write> = access %tree, %x_342_save, 1u
+                    %308:i32 = load %307
+                    store %x_348, %308
+                    %309:i32 = load %x_348
+                    store %x_323, %309
+                    continue  # -> $B101
+                  }
+                }
+                exit_if  # if_42
+              }
+              $B105: {  # false
+                %310:i32 = load %x_322
+                %x_334_save:i32 = let %310
+                %312:i32 = load %x_322
+                %313:ptr<function, i32, read_write> = access %tree, %312, 2u
+                %314:i32 = load %313
+                %315:bool = eq %314, -1i
+                if %315 [t: $B108, f: $B109] {  # if_44
+                  $B108: {  # true
+                    %316:ptr<function, i32, read_write> = access %tree, %x_334_save, 2u
+                    store %316, 9i
+                    %317:ptr<function, BST, read_write> = access %tree, 9i
+                    store %317, BST(13i, -1i, -1i)
+                    store %x_350, true
+                    exit_loop  # loop_9
+                  }
+                  $B109: {  # false
+                    %318:ptr<function, i32, read_write> = access %tree, %x_334_save, 2u
+                    %319:i32 = load %318
+                    store %x_340, %319
+                    %320:i32 = load %x_340
+                    store %x_323, %320
+                    continue  # -> $B101
+                  }
+                }
+                exit_if  # if_42
+              }
+            }
+            unreachable
+          }
+          $B101: {  # continuing
+            %321:i32 = load %x_323
+            store %x_322, %321
+            next_iteration  # -> $B100
+          }
+        }
+        %322:bool = load %x_350
+        if %322 [t: $B110] {  # if_45
+          $B110: {  # true
+            exit_switch  # switch_9
+          }
+        }
+        exit_switch  # switch_9
+      }
+    }
+    store %x_353, 0i
+    store %x_356, 0i
+    store %x_358, 0i
+    loop [b: $B111, c: $B112] {  # loop_10
+      $B111: {  # body
+        %x_381:ptr<function, i32, read_write> = var
+        %x_354:ptr<function, i32, read_write> = var
+        %x_391:ptr<function, i32, read_write> = var
+        %x_396:ptr<function, i32, read_write> = var
+        %x_357:ptr<function, i32, read_write> = var
+        %x_359:ptr<function, i32, read_write> = var
+        %329:i32 = load %x_358
+        %330:bool = lt %329, 20i
+        if %330 [t: $B113, f: $B114] {  # if_46
+          $B113: {  # true
+            exit_if  # if_46
+          }
+          $B114: {  # false
+            exit_loop  # loop_10
+          }
+        }
+        %x_366:ptr<function, i32, read_write> = var
+        %x_382:ptr<function, bool, read_write> = var
+        switch 0u [c: (default, $B115)] {  # switch_10
+          $B115: {  # case
+            store %x_366, 0i
+            loop [b: $B116, c: $B117] {  # loop_11
+              $B116: {  # body
+                %333:i32 = load %x_353
+                store %x_381, %333
+                store %x_382, false
+                %334:i32 = load %x_366
+                %335:bool = neq %334, -1i
+                if %335 [t: $B118, f: $B119] {  # if_47
+                  $B118: {  # true
+                    exit_if  # if_47
+                  }
+                  $B119: {  # false
+                    exit_loop  # loop_11
+                  }
+                }
+                %336:i32 = load %x_366
+                %337:ptr<function, BST, read_write> = access %tree, %336
+                %338:BST = load %337
+                %x_373:BST = let %338
+                %340:i32 = access %x_373, 0u
+                %x_374:i32 = let %340
+                %342:i32 = access %x_373, 1u
+                %x_375:i32 = let %342
+                %344:i32 = access %x_373, 2u
+                %x_376:i32 = let %344
+                %346:i32 = load %x_358
+                %347:bool = eq %x_374, %346
+                if %347 [t: $B120] {  # if_48
+                  $B120: {  # true
+                    %348:i32 = load %x_358
+                    store %x_381, %348
+                    store %x_382, true
+                    exit_loop  # loop_11
+                  }
+                }
+                continue  # -> $B117
+              }
+              $B117: {  # continuing
+                %349:i32 = load %x_358
+                %350:bool = gt %349, %x_374
+                %351:i32 = select %x_375, %x_376, %350
+                store %x_366, %351
+                next_iteration  # -> $B116
+              }
+            }
+            %352:i32 = load %x_381
+            store %x_354, %352
+            %353:bool = load %x_382
+            if %353 [t: $B121] {  # if_49
+              $B121: {  # true
+                exit_switch  # switch_10
+              }
+            }
+            store %x_354, -1i
+            exit_switch  # switch_10
+          }
+        }
+        %x_390:ptr<function, i32, read_write> = var
+        %x_395:ptr<function, i32, read_write> = var
+        %356:i32 = load %x_358
+        switch %356 [c: (2i 5i 6i 7i 8i 9i 12i 13i 15i 17i, $B122), c: (default, $B123)] {  # switch_11
+          $B122: {  # case
+            %357:i32 = load %x_356
+            store %x_391, %357
+            %358:i32 = load %x_354
+            %359:i32 = load %x_358
+            %360:bool = eq %358, %359
+            if %360 [t: $B124] {  # if_50
+              $B124: {  # true
+                %361:i32 = load %x_356
+                %362:i32 = add %361, 1i
+                store %x_390, %362
+                %363:i32 = load %x_390
+                store %x_391, %363
+                exit_if  # if_50
+              }
+            }
+            %364:i32 = load %x_391
+            store %x_357, %364
+            exit_switch  # switch_11
+          }
+          $B123: {  # case
+            %365:i32 = load %x_356
+            store %x_396, %365
+            %366:i32 = load %x_354
+            %367:bool = eq %366, -1i
+            if %367 [t: $B125] {  # if_51
+              $B125: {  # true
+                %368:i32 = load %x_356
+                %369:i32 = add %368, 1i
+                store %x_395, %369
+                %370:i32 = load %x_395
+                store %x_396, %370
+                exit_if  # if_51
+              }
+            }
+            %371:i32 = load %x_396
+            store %x_357, %371
+            exit_switch  # switch_11
+          }
+        }
+        continue  # -> $B112
+      }
+      $B112: {  # continuing
+        %372:i32 = load %x_358
+        %373:i32 = add %372, 1i
+        store %x_359, %373
+        %374:i32 = load %x_354
+        store %x_353, %374
+        %375:i32 = load %x_357
+        store %x_356, %375
+        %376:i32 = load %x_359
+        store %x_358, %376
+        next_iteration  # -> $B111
+      }
+    }
+    %377:i32 = load %x_356
+    %378:bool = eq %377, 20i
+    if %378 [t: $B126, f: $B127] {  # if_52
+      $B126: {  # true
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        exit_if  # if_52
+      }
+      $B127: {  # false
+        store %x_GLF_color, vec4<f32>(0.0f, 0.0f, 1.0f, 1.0f)
+        exit_if  # if_52
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B128: {
+    %380:void = call %main_1
+    %381:vec4<f32> = load %x_GLF_color
+    %382:main_out = construct %381
+    ret %382
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/0.wgsl.expected.ir.msl
index 28251dc..59eae18 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/0.wgsl.expected.ir.msl
@@ -1,6 +1,1120 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: BST = struct @align(4) {
+  data:i32 @offset(0)
+  leftIndex:i32 @offset(4)
+  rightIndex:i32 @offset(8)
+}
+
+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
+}
+
+%main_1 = func():void {
+  $B2: {
+    %tree:ptr<function, array<BST, 10>, read_write> = var
+    %x_356:ptr<function, i32, read_write> = var
+    %x_58_phi:ptr<function, i32, read_write> = var
+    %x_86_phi:ptr<function, bool, read_write> = var
+    %x_353_phi:ptr<function, i32, read_write> = var
+    %x_356_phi:ptr<function, i32, read_write> = var
+    %x_358_phi:ptr<function, i32, read_write> = var
+    %10:ptr<function, BST, read_write> = access %tree, 0i
+    store %10, BST(9i, -1i, -1i)
+    switch 0u [c: (default, $B3)] {  # switch_1
+      $B3: {  # case
+        store %x_58_phi, 0i
+        loop [b: $B4, c: $B5] {  # loop_1
+          $B4: {  # body
+            %x_84:ptr<function, i32, read_write> = var
+            %x_76:ptr<function, i32, read_write> = var
+            %x_59:ptr<function, i32, read_write> = var
+            %x_59_phi:ptr<function, i32, read_write> = var
+            %15:i32 = load %x_58_phi
+            %x_58:i32 = let %15
+            store %x_86_phi, false
+            %17:bool = lte %x_58, 1i
+            if %17 [t: $B6, f: $B7] {  # if_1
+              $B6: {  # true
+                exit_if  # if_1
+              }
+              $B7: {  # false
+                exit_loop  # loop_1
+              }
+            }
+            %18:ptr<function, i32, read_write> = access %tree, %x_58, 0u
+            %19:i32 = load %18
+            %x_65:i32 = let %19
+            %21:bool = lte 5i, %x_65
+            if %21 [t: $B8, f: $B9] {  # if_2
+              $B8: {  # true
+                %x_78_save:i32 = let %x_58
+                %23:ptr<function, i32, read_write> = access %tree, %x_78_save, 1u
+                %24:i32 = load %23
+                %x_79:i32 = let %24
+                %26:bool = eq %x_79, -1i
+                if %26 [t: $B10, f: $B11] {  # if_3
+                  $B10: {  # true
+                    %27:ptr<function, i32, read_write> = access %tree, %x_78_save, 1u
+                    store %27, 1i
+                    %28:ptr<function, BST, read_write> = access %tree, 1i
+                    store %28, BST(5i, -1i, -1i)
+                    store %x_86_phi, true
+                    exit_loop  # loop_1
+                  }
+                  $B11: {  # false
+                    %29:ptr<function, i32, read_write> = access %tree, %x_78_save, 1u
+                    %30:i32 = load %29
+                    store %x_84, %30
+                    %31:i32 = load %x_84
+                    store %x_59_phi, %31
+                    continue  # -> $B5
+                  }
+                }
+                exit_if  # if_2
+              }
+              $B9: {  # false
+                %x_70_save:i32 = let %x_58
+                %33:ptr<function, i32, read_write> = access %tree, %x_70_save, 2u
+                %34:i32 = load %33
+                %x_71:i32 = let %34
+                %36:bool = eq %x_71, -1i
+                if %36 [t: $B12, f: $B13] {  # if_4
+                  $B12: {  # true
+                    %37:ptr<function, i32, read_write> = access %tree, %x_70_save, 2u
+                    store %37, 1i
+                    %38:ptr<function, BST, read_write> = access %tree, 1i
+                    store %38, BST(5i, -1i, -1i)
+                    store %x_86_phi, true
+                    exit_loop  # loop_1
+                  }
+                  $B13: {  # false
+                    %39:ptr<function, i32, read_write> = access %tree, %x_70_save, 2u
+                    %40:i32 = load %39
+                    store %x_76, %40
+                    %41:i32 = load %x_76
+                    store %x_59_phi, %41
+                    continue  # -> $B5
+                  }
+                }
+                exit_if  # if_2
+              }
+            }
+            unreachable
+          }
+          $B5: {  # continuing
+            %42:i32 = load %x_59_phi
+            store %x_59, %42
+            %43:i32 = load %x_59
+            store %x_58_phi, %43
+            next_iteration  # -> $B4
+          }
+        }
+        %44:bool = load %x_86_phi
+        %x_86:bool = let %44
+        if %x_86 [t: $B14] {  # if_5
+          $B14: {  # true
+            exit_switch  # switch_1
+          }
+        }
+        exit_switch  # switch_1
+      }
+    }
+    %x_91_phi:ptr<function, i32, read_write> = var
+    %x_119_phi:ptr<function, bool, read_write> = var
+    switch 0u [c: (default, $B15)] {  # switch_2
+      $B15: {  # case
+        store %x_91_phi, 0i
+        loop [b: $B16, c: $B17] {  # loop_2
+          $B16: {  # body
+            %x_117:ptr<function, i32, read_write> = var
+            %x_109:ptr<function, i32, read_write> = var
+            %x_92:ptr<function, i32, read_write> = var
+            %x_92_phi:ptr<function, i32, read_write> = var
+            %52:i32 = load %x_91_phi
+            %x_91:i32 = let %52
+            store %x_119_phi, false
+            %54:bool = lte %x_91, 2i
+            if %54 [t: $B18, f: $B19] {  # if_6
+              $B18: {  # true
+                exit_if  # if_6
+              }
+              $B19: {  # false
+                exit_loop  # loop_2
+              }
+            }
+            %55:ptr<function, i32, read_write> = access %tree, %x_91, 0u
+            %56:i32 = load %55
+            %x_98:i32 = let %56
+            %58:bool = lte 12i, %x_98
+            if %58 [t: $B20, f: $B21] {  # if_7
+              $B20: {  # true
+                %x_111_save:i32 = let %x_91
+                %60:ptr<function, i32, read_write> = access %tree, %x_111_save, 1u
+                %61:i32 = load %60
+                %x_112:i32 = let %61
+                %63:bool = eq %x_112, -1i
+                if %63 [t: $B22, f: $B23] {  # if_8
+                  $B22: {  # true
+                    %64:ptr<function, i32, read_write> = access %tree, %x_111_save, 1u
+                    store %64, 2i
+                    %65:ptr<function, BST, read_write> = access %tree, 2i
+                    store %65, BST(12i, -1i, -1i)
+                    store %x_119_phi, true
+                    exit_loop  # loop_2
+                  }
+                  $B23: {  # false
+                    %66:ptr<function, i32, read_write> = access %tree, %x_111_save, 1u
+                    %67:i32 = load %66
+                    store %x_117, %67
+                    %68:i32 = load %x_117
+                    store %x_92_phi, %68
+                    continue  # -> $B17
+                  }
+                }
+                exit_if  # if_7
+              }
+              $B21: {  # false
+                %x_103_save:i32 = let %x_91
+                %70:ptr<function, i32, read_write> = access %tree, %x_103_save, 2u
+                %71:i32 = load %70
+                %x_104:i32 = let %71
+                %73:bool = eq %x_104, -1i
+                if %73 [t: $B24, f: $B25] {  # if_9
+                  $B24: {  # true
+                    %74:ptr<function, i32, read_write> = access %tree, %x_103_save, 2u
+                    store %74, 2i
+                    %75:ptr<function, BST, read_write> = access %tree, 2i
+                    store %75, BST(12i, -1i, -1i)
+                    store %x_119_phi, true
+                    exit_loop  # loop_2
+                  }
+                  $B25: {  # false
+                    %76:ptr<function, i32, read_write> = access %tree, %x_103_save, 2u
+                    %77:i32 = load %76
+                    store %x_109, %77
+                    %78:i32 = load %x_109
+                    store %x_92_phi, %78
+                    continue  # -> $B17
+                  }
+                }
+                exit_if  # if_7
+              }
+            }
+            unreachable
+          }
+          $B17: {  # continuing
+            %79:i32 = load %x_92_phi
+            store %x_92, %79
+            %80:i32 = load %x_92
+            store %x_91_phi, %80
+            next_iteration  # -> $B16
+          }
+        }
+        %81:bool = load %x_119_phi
+        %x_119:bool = let %81
+        if %x_119 [t: $B26] {  # if_10
+          $B26: {  # true
+            exit_switch  # switch_2
+          }
+        }
+        exit_switch  # switch_2
+      }
+    }
+    %x_124_phi:ptr<function, i32, read_write> = var
+    %x_152_phi:ptr<function, bool, read_write> = var
+    switch 0u [c: (default, $B27)] {  # switch_3
+      $B27: {  # case
+        store %x_124_phi, 0i
+        loop [b: $B28, c: $B29] {  # loop_3
+          $B28: {  # body
+            %x_150:ptr<function, i32, read_write> = var
+            %x_142:ptr<function, i32, read_write> = var
+            %x_125:ptr<function, i32, read_write> = var
+            %x_125_phi:ptr<function, i32, read_write> = var
+            %89:i32 = load %x_124_phi
+            %x_124:i32 = let %89
+            store %x_152_phi, false
+            %91:bool = lte %x_124, 3i
+            if %91 [t: $B30, f: $B31] {  # if_11
+              $B30: {  # true
+                exit_if  # if_11
+              }
+              $B31: {  # false
+                exit_loop  # loop_3
+              }
+            }
+            %92:ptr<function, i32, read_write> = access %tree, %x_124, 0u
+            %93:i32 = load %92
+            %x_131:i32 = let %93
+            %95:bool = lte 15i, %x_131
+            if %95 [t: $B32, f: $B33] {  # if_12
+              $B32: {  # true
+                %x_144_save:i32 = let %x_124
+                %97:ptr<function, i32, read_write> = access %tree, %x_144_save, 1u
+                %98:i32 = load %97
+                %x_145:i32 = let %98
+                %100:bool = eq %x_145, -1i
+                if %100 [t: $B34, f: $B35] {  # if_13
+                  $B34: {  # true
+                    %101:ptr<function, i32, read_write> = access %tree, %x_144_save, 1u
+                    store %101, 3i
+                    %102:ptr<function, BST, read_write> = access %tree, 3i
+                    store %102, BST(15i, -1i, -1i)
+                    store %x_152_phi, true
+                    exit_loop  # loop_3
+                  }
+                  $B35: {  # false
+                    %103:ptr<function, i32, read_write> = access %tree, %x_144_save, 1u
+                    %104:i32 = load %103
+                    store %x_150, %104
+                    %105:i32 = load %x_150
+                    store %x_125_phi, %105
+                    continue  # -> $B29
+                  }
+                }
+                exit_if  # if_12
+              }
+              $B33: {  # false
+                %x_136_save:i32 = let %x_124
+                %107:ptr<function, i32, read_write> = access %tree, %x_136_save, 2u
+                %108:i32 = load %107
+                %x_137:i32 = let %108
+                %110:bool = eq %x_137, -1i
+                if %110 [t: $B36, f: $B37] {  # if_14
+                  $B36: {  # true
+                    %111:ptr<function, i32, read_write> = access %tree, %x_136_save, 2u
+                    store %111, 3i
+                    %112:ptr<function, BST, read_write> = access %tree, 3i
+                    store %112, BST(15i, -1i, -1i)
+                    store %x_152_phi, true
+                    exit_loop  # loop_3
+                  }
+                  $B37: {  # false
+                    %113:ptr<function, i32, read_write> = access %tree, %x_136_save, 2u
+                    %114:i32 = load %113
+                    store %x_142, %114
+                    %115:i32 = load %x_142
+                    store %x_125_phi, %115
+                    continue  # -> $B29
+                  }
+                }
+                exit_if  # if_12
+              }
+            }
+            unreachable
+          }
+          $B29: {  # continuing
+            %116:i32 = load %x_125_phi
+            store %x_125, %116
+            %117:i32 = load %x_125
+            store %x_124_phi, %117
+            next_iteration  # -> $B28
+          }
+        }
+        %118:bool = load %x_152_phi
+        %x_152:bool = let %118
+        if %x_152 [t: $B38] {  # if_15
+          $B38: {  # true
+            exit_switch  # switch_3
+          }
+        }
+        exit_switch  # switch_3
+      }
+    }
+    %x_157_phi:ptr<function, i32, read_write> = var
+    %x_185_phi:ptr<function, bool, read_write> = var
+    switch 0u [c: (default, $B39)] {  # switch_4
+      $B39: {  # case
+        store %x_157_phi, 0i
+        loop [b: $B40, c: $B41] {  # loop_4
+          $B40: {  # body
+            %x_183:ptr<function, i32, read_write> = var
+            %x_175:ptr<function, i32, read_write> = var
+            %x_158:ptr<function, i32, read_write> = var
+            %x_158_phi:ptr<function, i32, read_write> = var
+            %126:i32 = load %x_157_phi
+            %x_157:i32 = let %126
+            store %x_185_phi, false
+            %128:bool = lte %x_157, 4i
+            if %128 [t: $B42, f: $B43] {  # if_16
+              $B42: {  # true
+                exit_if  # if_16
+              }
+              $B43: {  # false
+                exit_loop  # loop_4
+              }
+            }
+            %129:ptr<function, i32, read_write> = access %tree, %x_157, 0u
+            %130:i32 = load %129
+            %x_164:i32 = let %130
+            %132:bool = lte 7i, %x_164
+            if %132 [t: $B44, f: $B45] {  # if_17
+              $B44: {  # true
+                %x_177_save:i32 = let %x_157
+                %134:ptr<function, i32, read_write> = access %tree, %x_177_save, 1u
+                %135:i32 = load %134
+                %x_178:i32 = let %135
+                %137:bool = eq %x_178, -1i
+                if %137 [t: $B46, f: $B47] {  # if_18
+                  $B46: {  # true
+                    %138:ptr<function, i32, read_write> = access %tree, %x_177_save, 1u
+                    store %138, 4i
+                    %139:ptr<function, BST, read_write> = access %tree, 4i
+                    store %139, BST(7i, -1i, -1i)
+                    store %x_185_phi, true
+                    exit_loop  # loop_4
+                  }
+                  $B47: {  # false
+                    %140:ptr<function, i32, read_write> = access %tree, %x_177_save, 1u
+                    %141:i32 = load %140
+                    store %x_183, %141
+                    %142:i32 = load %x_183
+                    store %x_158_phi, %142
+                    continue  # -> $B41
+                  }
+                }
+                exit_if  # if_17
+              }
+              $B45: {  # false
+                %x_169_save:i32 = let %x_157
+                %144:ptr<function, i32, read_write> = access %tree, %x_169_save, 2u
+                %145:i32 = load %144
+                %x_170:i32 = let %145
+                %147:bool = eq %x_170, -1i
+                if %147 [t: $B48, f: $B49] {  # if_19
+                  $B48: {  # true
+                    %148:ptr<function, i32, read_write> = access %tree, %x_169_save, 2u
+                    store %148, 4i
+                    %149:ptr<function, BST, read_write> = access %tree, 4i
+                    store %149, BST(7i, -1i, -1i)
+                    store %x_185_phi, true
+                    exit_loop  # loop_4
+                  }
+                  $B49: {  # false
+                    %150:ptr<function, i32, read_write> = access %tree, %x_169_save, 2u
+                    %151:i32 = load %150
+                    store %x_175, %151
+                    %152:i32 = load %x_175
+                    store %x_158_phi, %152
+                    continue  # -> $B41
+                  }
+                }
+                exit_if  # if_17
+              }
+            }
+            unreachable
+          }
+          $B41: {  # continuing
+            %153:i32 = load %x_158_phi
+            store %x_158, %153
+            %154:i32 = load %x_158
+            store %x_157_phi, %154
+            next_iteration  # -> $B40
+          }
+        }
+        %155:bool = load %x_185_phi
+        %x_185:bool = let %155
+        if %x_185 [t: $B50] {  # if_20
+          $B50: {  # true
+            exit_switch  # switch_4
+          }
+        }
+        exit_switch  # switch_4
+      }
+    }
+    %x_190_phi:ptr<function, i32, read_write> = var
+    %x_218_phi:ptr<function, bool, read_write> = var
+    switch 0u [c: (default, $B51)] {  # switch_5
+      $B51: {  # case
+        store %x_190_phi, 0i
+        loop [b: $B52, c: $B53] {  # loop_5
+          $B52: {  # body
+            %x_216:ptr<function, i32, read_write> = var
+            %x_208:ptr<function, i32, read_write> = var
+            %x_191:ptr<function, i32, read_write> = var
+            %x_191_phi:ptr<function, i32, read_write> = var
+            %163:i32 = load %x_190_phi
+            %x_190:i32 = let %163
+            store %x_218_phi, false
+            %165:bool = lte %x_190, 5i
+            if %165 [t: $B54, f: $B55] {  # if_21
+              $B54: {  # true
+                exit_if  # if_21
+              }
+              $B55: {  # false
+                exit_loop  # loop_5
+              }
+            }
+            %166:ptr<function, i32, read_write> = access %tree, %x_190, 0u
+            %167:i32 = load %166
+            %x_197:i32 = let %167
+            %169:bool = lte 8i, %x_197
+            if %169 [t: $B56, f: $B57] {  # if_22
+              $B56: {  # true
+                %x_210_save:i32 = let %x_190
+                %171:ptr<function, i32, read_write> = access %tree, %x_210_save, 1u
+                %172:i32 = load %171
+                %x_211:i32 = let %172
+                %174:bool = eq %x_211, -1i
+                if %174 [t: $B58, f: $B59] {  # if_23
+                  $B58: {  # true
+                    %175:ptr<function, i32, read_write> = access %tree, %x_210_save, 1u
+                    store %175, 5i
+                    %176:ptr<function, BST, read_write> = access %tree, 5i
+                    store %176, BST(8i, -1i, -1i)
+                    store %x_218_phi, true
+                    exit_loop  # loop_5
+                  }
+                  $B59: {  # false
+                    %177:ptr<function, i32, read_write> = access %tree, %x_210_save, 1u
+                    %178:i32 = load %177
+                    store %x_216, %178
+                    %179:i32 = load %x_216
+                    store %x_191_phi, %179
+                    continue  # -> $B53
+                  }
+                }
+                exit_if  # if_22
+              }
+              $B57: {  # false
+                %x_202_save:i32 = let %x_190
+                %181:ptr<function, i32, read_write> = access %tree, %x_202_save, 2u
+                %182:i32 = load %181
+                %x_203:i32 = let %182
+                %184:bool = eq %x_203, -1i
+                if %184 [t: $B60, f: $B61] {  # if_24
+                  $B60: {  # true
+                    %185:ptr<function, i32, read_write> = access %tree, %x_202_save, 2u
+                    store %185, 5i
+                    %186:ptr<function, BST, read_write> = access %tree, 5i
+                    store %186, BST(8i, -1i, -1i)
+                    store %x_218_phi, true
+                    exit_loop  # loop_5
+                  }
+                  $B61: {  # false
+                    %187:ptr<function, i32, read_write> = access %tree, %x_202_save, 2u
+                    %188:i32 = load %187
+                    store %x_208, %188
+                    %189:i32 = load %x_208
+                    store %x_191_phi, %189
+                    continue  # -> $B53
+                  }
+                }
+                exit_if  # if_22
+              }
+            }
+            unreachable
+          }
+          $B53: {  # continuing
+            %190:i32 = load %x_191_phi
+            store %x_191, %190
+            %191:i32 = load %x_191
+            store %x_190_phi, %191
+            next_iteration  # -> $B52
+          }
+        }
+        %192:bool = load %x_218_phi
+        %x_218:bool = let %192
+        if %x_218 [t: $B62] {  # if_25
+          $B62: {  # true
+            exit_switch  # switch_5
+          }
+        }
+        exit_switch  # switch_5
+      }
+    }
+    %x_223_phi:ptr<function, i32, read_write> = var
+    %x_251_phi:ptr<function, bool, read_write> = var
+    switch 0u [c: (default, $B63)] {  # switch_6
+      $B63: {  # case
+        store %x_223_phi, 0i
+        loop [b: $B64, c: $B65] {  # loop_6
+          $B64: {  # body
+            %x_249:ptr<function, i32, read_write> = var
+            %x_241:ptr<function, i32, read_write> = var
+            %x_224:ptr<function, i32, read_write> = var
+            %x_224_phi:ptr<function, i32, read_write> = var
+            %200:i32 = load %x_223_phi
+            %x_223:i32 = let %200
+            store %x_251_phi, false
+            %202:bool = lte %x_223, 6i
+            if %202 [t: $B66, f: $B67] {  # if_26
+              $B66: {  # true
+                exit_if  # if_26
+              }
+              $B67: {  # false
+                exit_loop  # loop_6
+              }
+            }
+            %203:ptr<function, i32, read_write> = access %tree, %x_223, 0u
+            %204:i32 = load %203
+            %x_230:i32 = let %204
+            %206:bool = lte 2i, %x_230
+            if %206 [t: $B68, f: $B69] {  # if_27
+              $B68: {  # true
+                %x_243_save:i32 = let %x_223
+                %208:ptr<function, i32, read_write> = access %tree, %x_243_save, 1u
+                %209:i32 = load %208
+                %x_244:i32 = let %209
+                %211:bool = eq %x_244, -1i
+                if %211 [t: $B70, f: $B71] {  # if_28
+                  $B70: {  # true
+                    %212:ptr<function, i32, read_write> = access %tree, %x_243_save, 1u
+                    store %212, 6i
+                    %213:ptr<function, BST, read_write> = access %tree, 6i
+                    store %213, BST(2i, -1i, -1i)
+                    store %x_251_phi, true
+                    exit_loop  # loop_6
+                  }
+                  $B71: {  # false
+                    %214:ptr<function, i32, read_write> = access %tree, %x_243_save, 1u
+                    %215:i32 = load %214
+                    store %x_249, %215
+                    %216:i32 = load %x_249
+                    store %x_224_phi, %216
+                    continue  # -> $B65
+                  }
+                }
+                exit_if  # if_27
+              }
+              $B69: {  # false
+                %x_235_save:i32 = let %x_223
+                %218:ptr<function, i32, read_write> = access %tree, %x_235_save, 2u
+                %219:i32 = load %218
+                %x_236:i32 = let %219
+                %221:bool = eq %x_236, -1i
+                if %221 [t: $B72, f: $B73] {  # if_29
+                  $B72: {  # true
+                    %222:ptr<function, i32, read_write> = access %tree, %x_235_save, 2u
+                    store %222, 6i
+                    %223:ptr<function, BST, read_write> = access %tree, 6i
+                    store %223, BST(2i, -1i, -1i)
+                    store %x_251_phi, true
+                    exit_loop  # loop_6
+                  }
+                  $B73: {  # false
+                    %224:ptr<function, i32, read_write> = access %tree, %x_235_save, 2u
+                    %225:i32 = load %224
+                    store %x_241, %225
+                    %226:i32 = load %x_241
+                    store %x_224_phi, %226
+                    continue  # -> $B65
+                  }
+                }
+                exit_if  # if_27
+              }
+            }
+            unreachable
+          }
+          $B65: {  # continuing
+            %227:i32 = load %x_224_phi
+            store %x_224, %227
+            %228:i32 = load %x_224
+            store %x_223_phi, %228
+            next_iteration  # -> $B64
+          }
+        }
+        %229:bool = load %x_251_phi
+        %x_251:bool = let %229
+        if %x_251 [t: $B74] {  # if_30
+          $B74: {  # true
+            exit_switch  # switch_6
+          }
+        }
+        exit_switch  # switch_6
+      }
+    }
+    %x_256_phi:ptr<function, i32, read_write> = var
+    %x_284_phi:ptr<function, bool, read_write> = var
+    switch 0u [c: (default, $B75)] {  # switch_7
+      $B75: {  # case
+        store %x_256_phi, 0i
+        loop [b: $B76, c: $B77] {  # loop_7
+          $B76: {  # body
+            %x_282:ptr<function, i32, read_write> = var
+            %x_274:ptr<function, i32, read_write> = var
+            %x_257:ptr<function, i32, read_write> = var
+            %x_257_phi:ptr<function, i32, read_write> = var
+            %237:i32 = load %x_256_phi
+            %x_256:i32 = let %237
+            store %x_284_phi, false
+            %239:bool = lte %x_256, 7i
+            if %239 [t: $B78, f: $B79] {  # if_31
+              $B78: {  # true
+                exit_if  # if_31
+              }
+              $B79: {  # false
+                exit_loop  # loop_7
+              }
+            }
+            %240:ptr<function, i32, read_write> = access %tree, %x_256, 0u
+            %241:i32 = load %240
+            %x_263:i32 = let %241
+            %243:bool = lte 6i, %x_263
+            if %243 [t: $B80, f: $B81] {  # if_32
+              $B80: {  # true
+                %x_276_save:i32 = let %x_256
+                %245:ptr<function, i32, read_write> = access %tree, %x_276_save, 1u
+                %246:i32 = load %245
+                %x_277:i32 = let %246
+                %248:bool = eq %x_277, -1i
+                if %248 [t: $B82, f: $B83] {  # if_33
+                  $B82: {  # true
+                    %249:ptr<function, i32, read_write> = access %tree, %x_276_save, 1u
+                    store %249, 7i
+                    %250:ptr<function, BST, read_write> = access %tree, 7i
+                    store %250, BST(6i, -1i, -1i)
+                    store %x_284_phi, true
+                    exit_loop  # loop_7
+                  }
+                  $B83: {  # false
+                    %251:ptr<function, i32, read_write> = access %tree, %x_276_save, 1u
+                    %252:i32 = load %251
+                    store %x_282, %252
+                    %253:i32 = load %x_282
+                    store %x_257_phi, %253
+                    continue  # -> $B77
+                  }
+                }
+                exit_if  # if_32
+              }
+              $B81: {  # false
+                %x_268_save:i32 = let %x_256
+                %255:ptr<function, i32, read_write> = access %tree, %x_268_save, 2u
+                %256:i32 = load %255
+                %x_269:i32 = let %256
+                %258:bool = eq %x_269, -1i
+                if %258 [t: $B84, f: $B85] {  # if_34
+                  $B84: {  # true
+                    %259:ptr<function, i32, read_write> = access %tree, %x_268_save, 2u
+                    store %259, 7i
+                    %260:ptr<function, BST, read_write> = access %tree, 7i
+                    store %260, BST(6i, -1i, -1i)
+                    store %x_284_phi, true
+                    exit_loop  # loop_7
+                  }
+                  $B85: {  # false
+                    %261:ptr<function, i32, read_write> = access %tree, %x_268_save, 2u
+                    %262:i32 = load %261
+                    store %x_274, %262
+                    %263:i32 = load %x_274
+                    store %x_257_phi, %263
+                    continue  # -> $B77
+                  }
+                }
+                exit_if  # if_32
+              }
+            }
+            unreachable
+          }
+          $B77: {  # continuing
+            %264:i32 = load %x_257_phi
+            store %x_257, %264
+            %265:i32 = load %x_257
+            store %x_256_phi, %265
+            next_iteration  # -> $B76
+          }
+        }
+        %266:bool = load %x_284_phi
+        %x_284:bool = let %266
+        if %x_284 [t: $B86] {  # if_35
+          $B86: {  # true
+            exit_switch  # switch_7
+          }
+        }
+        exit_switch  # switch_7
+      }
+    }
+    %x_289_phi:ptr<function, i32, read_write> = var
+    %x_317_phi:ptr<function, bool, read_write> = var
+    switch 0u [c: (default, $B87)] {  # switch_8
+      $B87: {  # case
+        store %x_289_phi, 0i
+        loop [b: $B88, c: $B89] {  # loop_8
+          $B88: {  # body
+            %x_315:ptr<function, i32, read_write> = var
+            %x_307:ptr<function, i32, read_write> = var
+            %x_290:ptr<function, i32, read_write> = var
+            %x_290_phi:ptr<function, i32, read_write> = var
+            %274:i32 = load %x_289_phi
+            %x_289:i32 = let %274
+            store %x_317_phi, false
+            %276:bool = lte %x_289, 8i
+            if %276 [t: $B90, f: $B91] {  # if_36
+              $B90: {  # true
+                exit_if  # if_36
+              }
+              $B91: {  # false
+                exit_loop  # loop_8
+              }
+            }
+            %277:ptr<function, i32, read_write> = access %tree, %x_289, 0u
+            %278:i32 = load %277
+            %x_296:i32 = let %278
+            %280:bool = lte 17i, %x_296
+            if %280 [t: $B92, f: $B93] {  # if_37
+              $B92: {  # true
+                %x_309_save:i32 = let %x_289
+                %282:ptr<function, i32, read_write> = access %tree, %x_309_save, 1u
+                %283:i32 = load %282
+                %x_310:i32 = let %283
+                %285:bool = eq %x_310, -1i
+                if %285 [t: $B94, f: $B95] {  # if_38
+                  $B94: {  # true
+                    %286:ptr<function, i32, read_write> = access %tree, %x_309_save, 1u
+                    store %286, 8i
+                    %287:ptr<function, BST, read_write> = access %tree, 8i
+                    store %287, BST(17i, -1i, -1i)
+                    store %x_317_phi, true
+                    exit_loop  # loop_8
+                  }
+                  $B95: {  # false
+                    %288:ptr<function, i32, read_write> = access %tree, %x_309_save, 1u
+                    %289:i32 = load %288
+                    store %x_315, %289
+                    %290:i32 = load %x_315
+                    store %x_290_phi, %290
+                    continue  # -> $B89
+                  }
+                }
+                exit_if  # if_37
+              }
+              $B93: {  # false
+                %x_301_save:i32 = let %x_289
+                %292:ptr<function, i32, read_write> = access %tree, %x_301_save, 2u
+                %293:i32 = load %292
+                %x_302:i32 = let %293
+                %295:bool = eq %x_302, -1i
+                if %295 [t: $B96, f: $B97] {  # if_39
+                  $B96: {  # true
+                    %296:ptr<function, i32, read_write> = access %tree, %x_301_save, 2u
+                    store %296, 8i
+                    %297:ptr<function, BST, read_write> = access %tree, 8i
+                    store %297, BST(17i, -1i, -1i)
+                    store %x_317_phi, true
+                    exit_loop  # loop_8
+                  }
+                  $B97: {  # false
+                    %298:ptr<function, i32, read_write> = access %tree, %x_301_save, 2u
+                    %299:i32 = load %298
+                    store %x_307, %299
+                    %300:i32 = load %x_307
+                    store %x_290_phi, %300
+                    continue  # -> $B89
+                  }
+                }
+                exit_if  # if_37
+              }
+            }
+            unreachable
+          }
+          $B89: {  # continuing
+            %301:i32 = load %x_290_phi
+            store %x_290, %301
+            %302:i32 = load %x_290
+            store %x_289_phi, %302
+            next_iteration  # -> $B88
+          }
+        }
+        %303:bool = load %x_317_phi
+        %x_317:bool = let %303
+        if %x_317 [t: $B98] {  # if_40
+          $B98: {  # true
+            exit_switch  # switch_8
+          }
+        }
+        exit_switch  # switch_8
+      }
+    }
+    %x_322_phi:ptr<function, i32, read_write> = var
+    %x_350_phi:ptr<function, bool, read_write> = var
+    switch 0u [c: (default, $B99)] {  # switch_9
+      $B99: {  # case
+        store %x_322_phi, 0i
+        loop [b: $B100, c: $B101] {  # loop_9
+          $B100: {  # body
+            %x_348:ptr<function, i32, read_write> = var
+            %x_340:ptr<function, i32, read_write> = var
+            %x_323:ptr<function, i32, read_write> = var
+            %x_323_phi:ptr<function, i32, read_write> = var
+            %311:i32 = load %x_322_phi
+            %x_322:i32 = let %311
+            store %x_350_phi, false
+            %313:bool = lte %x_322, 9i
+            if %313 [t: $B102, f: $B103] {  # if_41
+              $B102: {  # true
+                exit_if  # if_41
+              }
+              $B103: {  # false
+                exit_loop  # loop_9
+              }
+            }
+            %314:ptr<function, i32, read_write> = access %tree, %x_322, 0u
+            %315:i32 = load %314
+            %x_329:i32 = let %315
+            %317:bool = lte 13i, %x_329
+            if %317 [t: $B104, f: $B105] {  # if_42
+              $B104: {  # true
+                %x_342_save:i32 = let %x_322
+                %319:ptr<function, i32, read_write> = access %tree, %x_342_save, 1u
+                %320:i32 = load %319
+                %x_343:i32 = let %320
+                %322:bool = eq %x_343, -1i
+                if %322 [t: $B106, f: $B107] {  # if_43
+                  $B106: {  # true
+                    %323:ptr<function, i32, read_write> = access %tree, %x_342_save, 1u
+                    store %323, 9i
+                    %324:ptr<function, BST, read_write> = access %tree, 9i
+                    store %324, BST(13i, -1i, -1i)
+                    store %x_350_phi, true
+                    exit_loop  # loop_9
+                  }
+                  $B107: {  # false
+                    %325:ptr<function, i32, read_write> = access %tree, %x_342_save, 1u
+                    %326:i32 = load %325
+                    store %x_348, %326
+                    %327:i32 = load %x_348
+                    store %x_323_phi, %327
+                    continue  # -> $B101
+                  }
+                }
+                exit_if  # if_42
+              }
+              $B105: {  # false
+                %x_334_save:i32 = let %x_322
+                %329:ptr<function, i32, read_write> = access %tree, %x_334_save, 2u
+                %330:i32 = load %329
+                %x_335:i32 = let %330
+                %332:bool = eq %x_335, -1i
+                if %332 [t: $B108, f: $B109] {  # if_44
+                  $B108: {  # true
+                    %333:ptr<function, i32, read_write> = access %tree, %x_334_save, 2u
+                    store %333, 9i
+                    %334:ptr<function, BST, read_write> = access %tree, 9i
+                    store %334, BST(13i, -1i, -1i)
+                    store %x_350_phi, true
+                    exit_loop  # loop_9
+                  }
+                  $B109: {  # false
+                    %335:ptr<function, i32, read_write> = access %tree, %x_334_save, 2u
+                    %336:i32 = load %335
+                    store %x_340, %336
+                    %337:i32 = load %x_340
+                    store %x_323_phi, %337
+                    continue  # -> $B101
+                  }
+                }
+                exit_if  # if_42
+              }
+            }
+            unreachable
+          }
+          $B101: {  # continuing
+            %338:i32 = load %x_323_phi
+            store %x_323, %338
+            %339:i32 = load %x_323
+            store %x_322_phi, %339
+            next_iteration  # -> $B100
+          }
+        }
+        %340:bool = load %x_350_phi
+        %x_350:bool = let %340
+        if %x_350 [t: $B110] {  # if_45
+          $B110: {  # true
+            exit_switch  # switch_9
+          }
+        }
+        exit_switch  # switch_9
+      }
+    }
+    store %x_353_phi, 0i
+    store %x_356_phi, 0i
+    store %x_358_phi, 0i
+    loop [b: $B111, c: $B112] {  # loop_10
+      $B111: {  # body
+        %x_381:ptr<function, i32, read_write> = var
+        %x_391:ptr<function, i32, read_write> = var
+        %x_396:ptr<function, i32, read_write> = var
+        %x_359:ptr<function, i32, read_write> = var
+        %x_354_phi:ptr<function, i32, read_write> = var
+        %x_357_phi:ptr<function, i32, read_write> = var
+        %348:i32 = load %x_353_phi
+        %x_353:i32 = let %348
+        %350:i32 = load %x_356_phi
+        store %x_356, %350
+        %351:i32 = load %x_358_phi
+        %x_358:i32 = let %351
+        %353:bool = lt %x_358, 20i
+        if %353 [t: $B113, f: $B114] {  # if_46
+          $B113: {  # true
+            exit_if  # if_46
+          }
+          $B114: {  # false
+            exit_loop  # loop_10
+          }
+        }
+        %x_366_phi:ptr<function, i32, read_write> = var
+        %x_381_phi:ptr<function, i32, read_write> = var
+        %x_382_phi:ptr<function, bool, read_write> = var
+        switch 0u [c: (default, $B115)] {  # switch_10
+          $B115: {  # case
+            store %x_366_phi, 0i
+            loop [b: $B116, c: $B117] {  # loop_11
+              $B116: {  # body
+                %357:i32 = load %x_366_phi
+                %x_366:i32 = let %357
+                store %x_381_phi, %x_353
+                store %x_382_phi, false
+                %359:bool = neq %x_366, -1i
+                if %359 [t: $B118, f: $B119] {  # if_47
+                  $B118: {  # true
+                    exit_if  # if_47
+                  }
+                  $B119: {  # false
+                    exit_loop  # loop_11
+                  }
+                }
+                %360:ptr<function, BST, read_write> = access %tree, %x_366
+                %361:BST = load %360
+                %x_373:BST = let %361
+                %363:i32 = access %x_373, 0u
+                %x_374:i32 = let %363
+                %365:i32 = access %x_373, 1u
+                %x_375:i32 = let %365
+                %367:i32 = access %x_373, 2u
+                %x_376:i32 = let %367
+                %369:bool = eq %x_374, %x_358
+                if %369 [t: $B120] {  # if_48
+                  $B120: {  # true
+                    store %x_381_phi, %x_358
+                    store %x_382_phi, true
+                    exit_loop  # loop_11
+                  }
+                }
+                continue  # -> $B117
+              }
+              $B117: {  # continuing
+                %370:bool = gt %x_358, %x_374
+                %371:i32 = select %x_375, %x_376, %370
+                store %x_366_phi, %371
+                next_iteration  # -> $B116
+              }
+            }
+            %372:i32 = load %x_381_phi
+            store %x_381, %372
+            %373:bool = load %x_382_phi
+            %x_382:bool = let %373
+            %375:i32 = load %x_381
+            store %x_354_phi, %375
+            if %x_382 [t: $B121] {  # if_49
+              $B121: {  # true
+                exit_switch  # switch_10
+              }
+            }
+            store %x_354_phi, -1i
+            exit_switch  # switch_10
+          }
+        }
+        %x_354:ptr<function, i32, read_write> = var
+        %x_390:ptr<function, i32, read_write> = var
+        %x_395:ptr<function, i32, read_write> = var
+        %x_391_phi:ptr<function, i32, read_write> = var
+        %x_396_phi:ptr<function, i32, read_write> = var
+        %381:i32 = load %x_354_phi
+        store %x_354, %381
+        switch %x_358 [c: (2i 5i 6i 7i 8i 9i 12i 13i 15i 17i, $B122), c: (default, $B123)] {  # switch_11
+          $B122: {  # case
+            %382:i32 = load %x_356
+            store %x_391_phi, %382
+            %383:i32 = load %x_354
+            %384:i32 = let %383
+            %385:i32 = bitcast %x_358
+            %386:bool = eq %384, %385
+            if %386 [t: $B124] {  # if_50
+              $B124: {  # true
+                %387:i32 = load %x_356
+                %388:i32 = add %387, 1i
+                %389:i32 = bitcast %388
+                store %x_390, %389
+                %390:i32 = load %x_390
+                store %x_391_phi, %390
+                exit_if  # if_50
+              }
+            }
+            %391:i32 = load %x_391_phi
+            store %x_391, %391
+            %392:i32 = load %x_391
+            store %x_357_phi, %392
+            exit_switch  # switch_11
+          }
+          $B123: {  # case
+            %393:i32 = load %x_356
+            store %x_396_phi, %393
+            %394:i32 = load %x_354
+            %395:bool = eq %394, -1i
+            if %395 [t: $B125] {  # if_51
+              $B125: {  # true
+                %396:i32 = load %x_356
+                %397:i32 = add %396, 1i
+                %398:i32 = bitcast %397
+                store %x_395, %398
+                %399:i32 = load %x_395
+                store %x_396_phi, %399
+                exit_if  # if_51
+              }
+            }
+            %400:i32 = load %x_396_phi
+            store %x_396, %400
+            %401:i32 = load %x_396
+            store %x_357_phi, %401
+            exit_switch  # switch_11
+          }
+        }
+        %402:i32 = load %x_357_phi
+        %x_357:i32 = let %402
+        continue  # -> $B112
+      }
+      $B112: {  # continuing
+        %404:i32 = add %x_358, 1i
+        store %x_359, %404
+        %405:i32 = load %x_354
+        store %x_353_phi, %405
+        store %x_356_phi, %x_357
+        %406:i32 = load %x_359
+        store %x_358_phi, %406
+        next_iteration  # -> $B111
+      }
+    }
+    %407:i32 = load %x_356
+    %408:bool = eq %407, 20i
+    if %408 [t: $B126, f: $B127] {  # if_52
+      $B126: {  # true
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        exit_if  # if_52
+      }
+      $B127: {  # false
+        store %x_GLF_color, vec4<f32>(0.0f, 0.0f, 1.0f, 1.0f)
+        exit_if  # if_52
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B128: {
+    %410:void = call %main_1
+    %411:vec4<f32> = load %x_GLF_color
+    %412:main_out = construct %411
+    ret %412
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/0.spvasm.expected.ir.msl
index 28251dc..7a950e2 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/0.spvasm.expected.ir.msl
@@ -1,6 +1,384 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: BST = struct @align(4) {
+  data:i32 @offset(0)
+  leftIndex:i32 @offset(4)
+  rightIndex:i32 @offset(8)
+}
+
+main_out = struct @align(16) {
+  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
+}
+
+$B1: {  # root
+  %tree_1:ptr<private, array<BST, 10>, read_write> = var
+  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+}
+
+%makeTreeNode_struct_BST_i1_i1_i11_i1_ = func(%tree:ptr<function, BST, read_write>, %data:ptr<function, i32, read_write>):void {
+  $B2: {
+    %6:ptr<function, i32, read_write> = access %tree, 0u
+    %7:i32 = load %data
+    store %6, %7
+    %8:ptr<function, i32, read_write> = access %tree, 1u
+    store %8, -1i
+    %9:ptr<function, i32, read_write> = access %tree, 2u
+    store %9, -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
+        %18:i32 = load %baseIndex
+        %19:i32 = load %treeIndex
+        %20:bool = lte %18, %19
+        if %20 [t: $B6, f: $B7] {  # if_1
+          $B6: {  # true
+            exit_if  # if_1
+          }
+          $B7: {  # false
+            exit_loop  # loop_1
+          }
+        }
+        %21:i32 = load %data_1
+        %22:i32 = load %baseIndex
+        %23:ptr<private, i32, read_write> = access %tree_1, %22, 0u
+        %24:i32 = load %23
+        %25:bool = lte %21, %24
+        if %25 [t: $B8, f: $B9] {  # if_2
+          $B8: {  # true
+            %26:i32 = load %baseIndex
+            %27:ptr<private, i32, read_write> = access %tree_1, %26, 1u
+            %28:i32 = load %27
+            %29:bool = eq %28, -1i
+            if %29 [t: $B10, f: $B11] {  # if_3
+              $B10: {  # true
+                %30:i32 = load %baseIndex
+                %x_186:i32 = let %30
+                %32:ptr<private, i32, read_write> = access %tree_1, %x_186, 1u
+                %33:i32 = load %treeIndex
+                store %32, %33
+                %34:i32 = load %treeIndex
+                %x_189:i32 = let %34
+                %36:ptr<private, BST, read_write> = access %tree_1, %x_189
+                %37:BST = load %36
+                store %param, %37
+                %38:i32 = load %data_1
+                store %param_1, %38
+                %39:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param, %param_1
+                %40:ptr<private, BST, read_write> = access %tree_1, %x_189
+                %41:BST = load %param
+                store %40, %41
+                ret
+              }
+              $B11: {  # false
+                %42:i32 = load %baseIndex
+                %43:ptr<private, i32, read_write> = access %tree_1, %42, 1u
+                %44:i32 = load %43
+                store %baseIndex, %44
+                continue  # -> $B5
+              }
+            }
+            exit_if  # if_2
+          }
+          $B9: {  # false
+            %45:i32 = load %baseIndex
+            %46:ptr<private, i32, read_write> = access %tree_1, %45, 2u
+            %47:i32 = load %46
+            %48:bool = eq %47, -1i
+            if %48 [t: $B12, f: $B13] {  # if_4
+              $B12: {  # true
+                %49:i32 = load %baseIndex
+                %x_206:i32 = let %49
+                %51:ptr<private, i32, read_write> = access %tree_1, %x_206, 2u
+                %52:i32 = load %treeIndex
+                store %51, %52
+                %53:i32 = load %treeIndex
+                %x_209:i32 = let %53
+                %55:ptr<private, BST, read_write> = access %tree_1, %x_209
+                %56:BST = load %55
+                store %param_2, %56
+                %57:i32 = load %data_1
+                store %param_3, %57
+                %58:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param_2, %param_3
+                %59:ptr<private, BST, read_write> = access %tree_1, %x_209
+                %60:BST = load %param_2
+                store %59, %60
+                ret
+              }
+              $B13: {  # false
+                %61:i32 = load %baseIndex
+                %62:ptr<private, i32, read_write> = access %tree_1, %61, 2u
+                %63:i32 = load %62
+                store %baseIndex, %63
+                continue  # -> $B5
+              }
+            }
+            exit_if  # if_2
+          }
+        }
+        unreachable
+      }
+      $B5: {  # continuing
+        next_iteration  # -> $B4
+      }
+    }
+    ret
+  }
+}
+%search_i1_ = func(%t:ptr<function, i32, read_write>):i32 {
+  $B14: {
+    %index:ptr<function, i32, read_write> = var
+    %currentNode:ptr<function, BST, read_write> = var
+    %x_220:ptr<function, i32, read_write> = var
+    store %index, 0i
+    loop [b: $B15, c: $B16] {  # loop_2
+      $B15: {  # body
+        %69:i32 = load %index
+        %70:bool = neq %69, -1i
+        if %70 [t: $B17, f: $B18] {  # if_5
+          $B17: {  # true
+            exit_if  # if_5
+          }
+          $B18: {  # false
+            exit_loop  # loop_2
+          }
+        }
+        %71:i32 = load %index
+        %72:ptr<private, BST, read_write> = access %tree_1, %71
+        %73:BST = load %72
+        store %currentNode, %73
+        %74:ptr<function, i32, read_write> = access %currentNode, 0u
+        %75:i32 = load %74
+        %76:i32 = load %t
+        %77:bool = eq %75, %76
+        if %77 [t: $B19] {  # if_6
+          $B19: {  # true
+            %78:i32 = load %t
+            %x_237:i32 = let %78
+            ret %x_237
+          }
+        }
+        %80:i32 = load %t
+        %81:ptr<function, i32, read_write> = access %currentNode, 0u
+        %82:i32 = load %81
+        %83:bool = gt %80, %82
+        if %83 [t: $B20, f: $B21] {  # if_7
+          $B20: {  # true
+            %84:ptr<function, i32, read_write> = access %currentNode, 2u
+            %85:i32 = load %84
+            store %x_220, %85
+            exit_if  # if_7
+          }
+          $B21: {  # false
+            %86:ptr<function, i32, read_write> = access %currentNode, 1u
+            %87:i32 = load %86
+            store %x_220, %87
+            exit_if  # if_7
+          }
+        }
+        %88:i32 = load %x_220
+        store %index, %88
+        continue  # -> $B16
+      }
+      $B16: {  # continuing
+        next_iteration  # -> $B15
+      }
+    }
+    ret -1i
+  }
+}
+%main_1 = func():void {
+  $B22: {
+    %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
+    %count:ptr<function, i32, read_write> = var
+    %i:ptr<function, i32, read_write> = var
+    %result:ptr<function, i32, read_write> = var
+    %param_24:ptr<function, i32, read_write> = var
+    store %treeIndex_1, 0i
+    %115:ptr<private, BST, read_write> = access %tree_1, 0i
+    %116:BST = load %115
+    store %param_4, %116
+    store %param_5, 9i
+    %117:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param_4, %param_5
+    %118:ptr<private, BST, read_write> = access %tree_1, 0i
+    %119:BST = load %param_4
+    store %118, %119
+    %120:i32 = load %treeIndex_1
+    %121:i32 = add %120, 1i
+    store %treeIndex_1, %121
+    %122:i32 = load %treeIndex_1
+    store %param_6, %122
+    store %param_7, 5i
+    %123:void = call %insert_i1_i1_, %param_6, %param_7
+    %124:i32 = load %treeIndex_1
+    %125:i32 = add %124, 1i
+    store %treeIndex_1, %125
+    %126:i32 = load %treeIndex_1
+    store %param_8, %126
+    store %param_9, 12i
+    %127:void = call %insert_i1_i1_, %param_8, %param_9
+    %128:i32 = load %treeIndex_1
+    %129:i32 = add %128, 1i
+    store %treeIndex_1, %129
+    %130:i32 = load %treeIndex_1
+    store %param_10, %130
+    store %param_11, 15i
+    %131:void = call %insert_i1_i1_, %param_10, %param_11
+    %132:i32 = load %treeIndex_1
+    %133:i32 = add %132, 1i
+    store %treeIndex_1, %133
+    %134:i32 = load %treeIndex_1
+    store %param_12, %134
+    store %param_13, 7i
+    %135:void = call %insert_i1_i1_, %param_12, %param_13
+    %136:i32 = load %treeIndex_1
+    %137:i32 = add %136, 1i
+    store %treeIndex_1, %137
+    %138:i32 = load %treeIndex_1
+    store %param_14, %138
+    store %param_15, 8i
+    %139:void = call %insert_i1_i1_, %param_14, %param_15
+    %140:i32 = load %treeIndex_1
+    %141:i32 = add %140, 1i
+    store %treeIndex_1, %141
+    %142:i32 = load %treeIndex_1
+    store %param_16, %142
+    store %param_17, 2i
+    %143:void = call %insert_i1_i1_, %param_16, %param_17
+    %144:i32 = load %treeIndex_1
+    %145:i32 = add %144, 1i
+    store %treeIndex_1, %145
+    %146:i32 = load %treeIndex_1
+    store %param_18, %146
+    store %param_19, 6i
+    %147:void = call %insert_i1_i1_, %param_18, %param_19
+    %148:i32 = load %treeIndex_1
+    %149:i32 = add %148, 1i
+    store %treeIndex_1, %149
+    %150:i32 = load %treeIndex_1
+    store %param_20, %150
+    store %param_21, 17i
+    %151:void = call %insert_i1_i1_, %param_20, %param_21
+    %152:i32 = load %treeIndex_1
+    %153:i32 = add %152, 1i
+    store %treeIndex_1, %153
+    %154:i32 = load %treeIndex_1
+    store %param_22, %154
+    store %param_23, 13i
+    %155:void = call %insert_i1_i1_, %param_22, %param_23
+    store %count, 0i
+    store %i, 0i
+    loop [b: $B23, c: $B24] {  # loop_3
+      $B23: {  # body
+        %156:i32 = load %i
+        %157:bool = lt %156, 20i
+        if %157 [t: $B25, f: $B26] {  # if_8
+          $B25: {  # true
+            exit_if  # if_8
+          }
+          $B26: {  # false
+            exit_loop  # loop_3
+          }
+        }
+        %158:i32 = load %i
+        store %param_24, %158
+        %159:i32 = call %search_i1_, %param_24
+        %x_132:i32 = let %159
+        store %result, %x_132
+        %161:i32 = load %i
+        %x_133:i32 = let %161
+        switch %x_133 [c: (2i 5i 6i 7i 8i 9i 12i 13i 15i 17i, $B27), c: (default, $B28)] {  # switch_1
+          $B27: {  # case
+            %163:i32 = load %result
+            %164:i32 = load %i
+            %165:bool = eq %163, %164
+            if %165 [t: $B29] {  # if_9
+              $B29: {  # true
+                %166:i32 = load %count
+                %167:i32 = add %166, 1i
+                store %count, %167
+                exit_if  # if_9
+              }
+            }
+            exit_switch  # switch_1
+          }
+          $B28: {  # case
+            %168:i32 = load %result
+            %169:bool = eq %168, -1i
+            if %169 [t: $B30] {  # if_10
+              $B30: {  # true
+                %170:i32 = load %count
+                %171:i32 = add %170, 1i
+                store %count, %171
+                exit_if  # if_10
+              }
+            }
+            exit_switch  # switch_1
+          }
+        }
+        continue  # -> $B24
+      }
+      $B24: {  # continuing
+        %172:i32 = load %i
+        %173:i32 = add %172, 1i
+        store %i, %173
+        next_iteration  # -> $B23
+      }
+    }
+    %174:i32 = load %count
+    %175:bool = eq %174, 20i
+    if %175 [t: $B31, f: $B32] {  # if_11
+      $B31: {  # true
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        exit_if  # if_11
+      }
+      $B32: {  # false
+        store %x_GLF_color, vec4<f32>(0.0f, 0.0f, 1.0f, 1.0f)
+        exit_if  # if_11
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B33: {
+    %177:void = call %main_1
+    %178:vec4<f32> = load %x_GLF_color
+    %179:main_out = construct %178
+    ret %179
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/0.wgsl.expected.ir.msl
index 28251dc..93b6e0e 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/0.wgsl.expected.ir.msl
@@ -1,6 +1,445 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: BST = struct @align(4) {
+  data:i32 @offset(0)
+  leftIndex:i32 @offset(4)
+  rightIndex:i32 @offset(8)
+}
+
+main_out = struct @align(16) {
+  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
+}
+
+$B1: {  # root
+  %tree_1:ptr<private, array<BST, 10>, read_write> = var
+  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+}
+
+%makeTreeNode_struct_BST_i1_i1_i11_i1_ = func(%tree:ptr<function, BST, read_write>, %data:ptr<function, i32, read_write>):void {
+  $B2: {
+    %6:i32 = load %data
+    %x_158:i32 = let %6
+    %8:ptr<function, i32, read_write> = access %tree, 0u
+    store %8, %x_158
+    %9:ptr<function, i32, read_write> = access %tree, 1u
+    store %9, -1i
+    %10:ptr<function, i32, read_write> = access %tree, 2u
+    store %10, -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
+        %19:i32 = load %baseIndex
+        %x_167:i32 = let %19
+        %21:i32 = load %treeIndex
+        %x_168:i32 = let %21
+        %23:bool = lte %x_167, %x_168
+        if %23 [t: $B6, f: $B7] {  # if_1
+          $B6: {  # true
+            exit_if  # if_1
+          }
+          $B7: {  # false
+            exit_loop  # loop_1
+          }
+        }
+        %24:i32 = load %data_1
+        %x_171:i32 = let %24
+        %26:i32 = load %baseIndex
+        %x_172:i32 = let %26
+        %28:ptr<private, i32, read_write> = access %tree_1, %x_172, 0u
+        %29:i32 = load %28
+        %x_174:i32 = let %29
+        %31:bool = lte %x_171, %x_174
+        if %31 [t: $B8, f: $B9] {  # if_2
+          $B8: {  # true
+            %32:i32 = load %baseIndex
+            %x_179:i32 = let %32
+            %34:ptr<private, i32, read_write> = access %tree_1, %x_179, 1u
+            %35:i32 = load %34
+            %x_181:i32 = let %35
+            %37:bool = eq %x_181, -1i
+            if %37 [t: $B10, f: $B11] {  # if_3
+              $B10: {  # true
+                %38:i32 = load %baseIndex
+                %x_186:i32 = let %38
+                %40:i32 = load %treeIndex
+                %x_187:i32 = let %40
+                %42:ptr<private, i32, read_write> = access %tree_1, %x_186, 1u
+                store %42, %x_187
+                %43:i32 = load %treeIndex
+                %x_189:i32 = let %43
+                %45:ptr<private, BST, read_write> = access %tree_1, %x_189
+                %46:BST = load %45
+                %x_191:BST = let %46
+                store %param, %x_191
+                %48:i32 = load %data_1
+                %x_192:i32 = let %48
+                store %param_1, %x_192
+                %50:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param, %param_1
+                %51:BST = load %param
+                %x_194:BST = let %51
+                %53:ptr<private, BST, read_write> = access %tree_1, %x_189
+                store %53, %x_194
+                ret
+              }
+              $B11: {  # false
+                %54:i32 = load %baseIndex
+                %x_196:i32 = let %54
+                %56:ptr<private, i32, read_write> = access %tree_1, %x_196, 1u
+                %57:i32 = load %56
+                %x_198:i32 = let %57
+                store %baseIndex, %x_198
+                continue  # -> $B5
+              }
+            }
+            exit_if  # if_2
+          }
+          $B9: {  # false
+            %59:i32 = load %baseIndex
+            %x_199:i32 = let %59
+            %61:ptr<private, i32, read_write> = access %tree_1, %x_199, 2u
+            %62:i32 = load %61
+            %x_201:i32 = let %62
+            %64:bool = eq %x_201, -1i
+            if %64 [t: $B12, f: $B13] {  # if_4
+              $B12: {  # true
+                %65:i32 = load %baseIndex
+                %x_206:i32 = let %65
+                %67:i32 = load %treeIndex
+                %x_207:i32 = let %67
+                %69:ptr<private, i32, read_write> = access %tree_1, %x_206, 2u
+                store %69, %x_207
+                %70:i32 = load %treeIndex
+                %x_209:i32 = let %70
+                %72:ptr<private, BST, read_write> = access %tree_1, %x_209
+                %73:BST = load %72
+                %x_211:BST = let %73
+                store %param_2, %x_211
+                %75:i32 = load %data_1
+                %x_212:i32 = let %75
+                store %param_3, %x_212
+                %77:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param_2, %param_3
+                %78:BST = load %param_2
+                %x_214:BST = let %78
+                %80:ptr<private, BST, read_write> = access %tree_1, %x_209
+                store %80, %x_214
+                ret
+              }
+              $B13: {  # false
+                %81:i32 = load %baseIndex
+                %x_216:i32 = let %81
+                %83:ptr<private, i32, read_write> = access %tree_1, %x_216, 2u
+                %84:i32 = load %83
+                %x_218:i32 = let %84
+                store %baseIndex, %x_218
+                continue  # -> $B5
+              }
+            }
+            exit_if  # if_2
+          }
+        }
+        unreachable
+      }
+      $B5: {  # continuing
+        next_iteration  # -> $B4
+      }
+    }
+    ret
+  }
+}
+%search_i1_ = func(%t:ptr<function, i32, read_write>):i32 {
+  $B14: {
+    %index:ptr<function, i32, read_write> = var
+    %currentNode:ptr<function, BST, read_write> = var
+    %x_220:ptr<function, i32, read_write> = var
+    store %index, 0i
+    loop [b: $B15, c: $B16] {  # loop_2
+      $B15: {  # body
+        %91:i32 = load %index
+        %x_225:i32 = let %91
+        %93:bool = neq %x_225, -1i
+        if %93 [t: $B17, f: $B18] {  # if_5
+          $B17: {  # true
+            exit_if  # if_5
+          }
+          $B18: {  # false
+            exit_loop  # loop_2
+          }
+        }
+        %94:i32 = load %index
+        %x_228:i32 = let %94
+        %96:ptr<private, BST, read_write> = access %tree_1, %x_228
+        %97:BST = load %96
+        %x_230:BST = let %97
+        store %currentNode, %x_230
+        %99:ptr<function, i32, read_write> = access %currentNode, 0u
+        %100:i32 = load %99
+        %x_232:i32 = let %100
+        %102:i32 = load %t
+        %x_233:i32 = let %102
+        %104:bool = eq %x_232, %x_233
+        if %104 [t: $B19] {  # if_6
+          $B19: {  # true
+            %105:i32 = load %t
+            %x_237:i32 = let %105
+            ret %x_237
+          }
+        }
+        %107:i32 = load %t
+        %x_238:i32 = let %107
+        %109:ptr<function, i32, read_write> = access %currentNode, 0u
+        %110:i32 = load %109
+        %x_240:i32 = let %110
+        %112:bool = gt %x_238, %x_240
+        if %112 [t: $B20, f: $B21] {  # if_7
+          $B20: {  # true
+            %113:ptr<function, i32, read_write> = access %currentNode, 2u
+            %114:i32 = load %113
+            %x_246:i32 = let %114
+            store %x_220, %x_246
+            exit_if  # if_7
+          }
+          $B21: {  # false
+            %116:ptr<function, i32, read_write> = access %currentNode, 1u
+            %117:i32 = load %116
+            %x_248:i32 = let %117
+            store %x_220, %x_248
+            exit_if  # if_7
+          }
+        }
+        %119:i32 = load %x_220
+        %x_249:i32 = let %119
+        store %index, %x_249
+        continue  # -> $B16
+      }
+      $B16: {  # continuing
+        next_iteration  # -> $B15
+      }
+    }
+    ret -1i
+  }
+}
+%main_1 = func():void {
+  $B22: {
+    %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
+    %count:ptr<function, i32, read_write> = var
+    %i:ptr<function, i32, read_write> = var
+    %result:ptr<function, i32, read_write> = var
+    %param_24:ptr<function, i32, read_write> = var
+    store %treeIndex_1, 0i
+    %147:ptr<private, BST, read_write> = access %tree_1, 0i
+    %148:BST = load %147
+    %x_84:BST = let %148
+    store %param_4, %x_84
+    store %param_5, 9i
+    %150:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param_4, %param_5
+    %151:BST = load %param_4
+    %x_86:BST = let %151
+    %153:ptr<private, BST, read_write> = access %tree_1, 0i
+    store %153, %x_86
+    %154:i32 = load %treeIndex_1
+    %x_88:i32 = let %154
+    %156:i32 = add %x_88, 1i
+    store %treeIndex_1, %156
+    %157:i32 = load %treeIndex_1
+    %x_90:i32 = let %157
+    store %param_6, %x_90
+    store %param_7, 5i
+    %159:void = call %insert_i1_i1_, %param_6, %param_7
+    %160:i32 = load %treeIndex_1
+    %x_92:i32 = let %160
+    %162:i32 = add %x_92, 1i
+    store %treeIndex_1, %162
+    %163:i32 = load %treeIndex_1
+    %x_94:i32 = let %163
+    store %param_8, %x_94
+    store %param_9, 12i
+    %165:void = call %insert_i1_i1_, %param_8, %param_9
+    %166:i32 = load %treeIndex_1
+    %x_96:i32 = let %166
+    %168:i32 = add %x_96, 1i
+    store %treeIndex_1, %168
+    %169:i32 = load %treeIndex_1
+    %x_98:i32 = let %169
+    store %param_10, %x_98
+    store %param_11, 15i
+    %171:void = call %insert_i1_i1_, %param_10, %param_11
+    %172:i32 = load %treeIndex_1
+    %x_100:i32 = let %172
+    %174:i32 = add %x_100, 1i
+    store %treeIndex_1, %174
+    %175:i32 = load %treeIndex_1
+    %x_102:i32 = let %175
+    store %param_12, %x_102
+    store %param_13, 7i
+    %177:void = call %insert_i1_i1_, %param_12, %param_13
+    %178:i32 = load %treeIndex_1
+    %x_104:i32 = let %178
+    %180:i32 = add %x_104, 1i
+    store %treeIndex_1, %180
+    %181:i32 = load %treeIndex_1
+    %x_106:i32 = let %181
+    store %param_14, %x_106
+    store %param_15, 8i
+    %183:void = call %insert_i1_i1_, %param_14, %param_15
+    %184:i32 = load %treeIndex_1
+    %x_108:i32 = let %184
+    %186:i32 = add %x_108, 1i
+    store %treeIndex_1, %186
+    %187:i32 = load %treeIndex_1
+    %x_110:i32 = let %187
+    store %param_16, %x_110
+    store %param_17, 2i
+    %189:void = call %insert_i1_i1_, %param_16, %param_17
+    %190:i32 = load %treeIndex_1
+    %x_112:i32 = let %190
+    %192:i32 = add %x_112, 1i
+    store %treeIndex_1, %192
+    %193:i32 = load %treeIndex_1
+    %x_114:i32 = let %193
+    store %param_18, %x_114
+    store %param_19, 6i
+    %195:void = call %insert_i1_i1_, %param_18, %param_19
+    %196:i32 = load %treeIndex_1
+    %x_116:i32 = let %196
+    %198:i32 = add %x_116, 1i
+    store %treeIndex_1, %198
+    %199:i32 = load %treeIndex_1
+    %x_118:i32 = let %199
+    store %param_20, %x_118
+    store %param_21, 17i
+    %201:void = call %insert_i1_i1_, %param_20, %param_21
+    %202:i32 = load %treeIndex_1
+    %x_120:i32 = let %202
+    %204:i32 = add %x_120, 1i
+    store %treeIndex_1, %204
+    %205:i32 = load %treeIndex_1
+    %x_122:i32 = let %205
+    store %param_22, %x_122
+    store %param_23, 13i
+    %207:void = call %insert_i1_i1_, %param_22, %param_23
+    store %count, 0i
+    store %i, 0i
+    loop [b: $B23, c: $B24] {  # loop_3
+      $B23: {  # body
+        %208:i32 = load %i
+        %x_128:i32 = let %208
+        %210:bool = lt %x_128, 20i
+        if %210 [t: $B25, f: $B26] {  # if_8
+          $B25: {  # true
+            exit_if  # if_8
+          }
+          $B26: {  # false
+            exit_loop  # loop_3
+          }
+        }
+        %211:i32 = load %i
+        %x_131:i32 = let %211
+        store %param_24, %x_131
+        %213:i32 = call %search_i1_, %param_24
+        %x_132:i32 = let %213
+        store %result, %x_132
+        %215:i32 = load %i
+        %x_133:i32 = let %215
+        switch %x_133 [c: (2i 5i 6i 7i 8i 9i 12i 13i 15i 17i, $B27), c: (default, $B28)] {  # switch_1
+          $B27: {  # case
+            %217:i32 = load %result
+            %x_143:i32 = let %217
+            %219:i32 = load %i
+            %x_144:i32 = let %219
+            %221:bool = eq %x_143, %x_144
+            if %221 [t: $B29] {  # if_9
+              $B29: {  # true
+                %222:i32 = load %count
+                %x_148:i32 = let %222
+                %224:i32 = add %x_148, 1i
+                store %count, %224
+                exit_if  # if_9
+              }
+            }
+            exit_switch  # switch_1
+          }
+          $B28: {  # case
+            %225:i32 = load %result
+            %x_137:i32 = let %225
+            %227:bool = eq %x_137, -1i
+            if %227 [t: $B30] {  # if_10
+              $B30: {  # true
+                %228:i32 = load %count
+                %x_141:i32 = let %228
+                %230:i32 = add %x_141, 1i
+                store %count, %230
+                exit_if  # if_10
+              }
+            }
+            exit_switch  # switch_1
+          }
+        }
+        continue  # -> $B24
+      }
+      $B24: {  # continuing
+        %231:i32 = load %i
+        %x_150:i32 = let %231
+        %233:i32 = add %x_150, 1i
+        store %i, %233
+        next_iteration  # -> $B23
+      }
+    }
+    %234:i32 = load %count
+    %x_152:i32 = let %234
+    %236:bool = eq %x_152, 20i
+    if %236 [t: $B31, f: $B32] {  # if_11
+      $B31: {  # true
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        exit_if  # if_11
+      }
+      $B32: {  # false
+        store %x_GLF_color, vec4<f32>(0.0f, 0.0f, 1.0f, 1.0f)
+        exit_if  # if_11
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B33: {
+    %238:void = call %main_1
+    %239:vec4<f32> = load %x_GLF_color
+    %240:main_out = construct %239
+    ret %240
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/1.spvasm.expected.ir.msl
index 28251dc..fdb01f0 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/1.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/1.spvasm.expected.ir.msl
@@ -1,6 +1,402 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: BST = struct @align(4) {
+  data:i32 @offset(0)
+  leftIndex:i32 @offset(4)
+  rightIndex:i32 @offset(8)
+}
+
+main_out = struct @align(16) {
+  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
+}
+
+$B1: {  # root
+  %tree_1:ptr<private, array<BST, 10>, read_write> = var
+  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
+  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+}
+
+%makeTreeNode_struct_BST_i1_i1_i11_i1_ = func(%tree:ptr<function, BST, read_write>, %data:ptr<function, i32, read_write>):void {
+  $B2: {
+    %7:ptr<function, i32, read_write> = access %tree, 0u
+    %8:i32 = load %data
+    store %7, %8
+    %9:ptr<function, i32, read_write> = access %tree, 1u
+    store %9, -1i
+    %10:ptr<function, i32, read_write> = access %tree, 2u
+    store %10, -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
+        %19:i32 = load %baseIndex
+        %20:i32 = load %treeIndex
+        %21:bool = lte %19, %20
+        if %21 [t: $B6, f: $B7] {  # if_1
+          $B6: {  # true
+            exit_if  # if_1
+          }
+          $B7: {  # false
+            exit_loop  # loop_1
+          }
+        }
+        %22:i32 = load %data_1
+        %23:i32 = load %baseIndex
+        %24:ptr<private, i32, read_write> = access %tree_1, %23, 0u
+        %25:i32 = load %24
+        %26:bool = lte %22, %25
+        if %26 [t: $B8, f: $B9] {  # if_2
+          $B8: {  # true
+            %27:i32 = load %baseIndex
+            %28:ptr<private, i32, read_write> = access %tree_1, %27, 1u
+            %29:i32 = load %28
+            %30:bool = eq %29, -1i
+            if %30 [t: $B10, f: $B11] {  # if_3
+              $B10: {  # true
+                %31:i32 = load %baseIndex
+                %x_197:i32 = let %31
+                %33:ptr<private, i32, read_write> = access %tree_1, %x_197, 1u
+                %34:i32 = load %treeIndex
+                store %33, %34
+                %35:i32 = load %treeIndex
+                %x_200:i32 = let %35
+                %37:ptr<private, BST, read_write> = access %tree_1, %x_200
+                %38:BST = load %37
+                store %param, %38
+                %39:i32 = load %data_1
+                store %param_1, %39
+                %40:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param, %param_1
+                %41:ptr<private, BST, read_write> = access %tree_1, %x_200
+                %42:BST = load %param
+                store %41, %42
+                ret
+              }
+              $B11: {  # false
+                %43:i32 = load %baseIndex
+                %44:ptr<private, i32, read_write> = access %tree_1, %43, 1u
+                %45:i32 = load %44
+                store %baseIndex, %45
+                continue  # -> $B5
+              }
+            }
+            exit_if  # if_2
+          }
+          $B9: {  # false
+            %46:i32 = load %baseIndex
+            %47:ptr<private, i32, read_write> = access %tree_1, %46, 2u
+            %48:i32 = load %47
+            %49:bool = eq %48, -1i
+            if %49 [t: $B12, f: $B13] {  # if_4
+              $B12: {  # true
+                %50:i32 = load %baseIndex
+                %x_217:i32 = let %50
+                %52:ptr<private, i32, read_write> = access %tree_1, %x_217, 2u
+                %53:i32 = load %treeIndex
+                store %52, %53
+                %54:i32 = load %treeIndex
+                %x_220:i32 = let %54
+                %56:ptr<private, BST, read_write> = access %tree_1, %x_220
+                %57:BST = load %56
+                store %param_2, %57
+                %58:i32 = load %data_1
+                store %param_3, %58
+                %59:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param_2, %param_3
+                %60:ptr<private, BST, read_write> = access %tree_1, %x_220
+                %61:BST = load %param_2
+                store %60, %61
+                ret
+              }
+              $B13: {  # false
+                %62:i32 = load %baseIndex
+                %63:ptr<private, i32, read_write> = access %tree_1, %62, 2u
+                %64:i32 = load %63
+                store %baseIndex, %64
+                continue  # -> $B5
+              }
+            }
+            exit_if  # if_2
+          }
+        }
+        unreachable
+      }
+      $B5: {  # continuing
+        next_iteration  # -> $B4
+      }
+    }
+    ret
+  }
+}
+%search_i1_ = func(%t:ptr<function, i32, read_write>):i32 {
+  $B14: {
+    %index:ptr<function, i32, read_write> = var
+    %currentNode:ptr<function, BST, read_write> = var
+    %x_231:ptr<function, i32, read_write> = var
+    store %index, 0i
+    loop [b: $B15, c: $B16] {  # loop_2
+      $B15: {  # body
+        %70:i32 = load %index
+        %71:bool = neq %70, -1i
+        if %71 [t: $B17, f: $B18] {  # if_5
+          $B17: {  # true
+            exit_if  # if_5
+          }
+          $B18: {  # false
+            exit_loop  # loop_2
+          }
+        }
+        %72:i32 = load %index
+        %73:ptr<private, BST, read_write> = access %tree_1, %72
+        %74:BST = load %73
+        store %currentNode, %74
+        %75:ptr<function, i32, read_write> = access %currentNode, 0u
+        %76:i32 = load %75
+        %77:i32 = load %t
+        %78:bool = eq %76, %77
+        if %78 [t: $B19] {  # if_6
+          $B19: {  # true
+            %79:i32 = load %t
+            %x_248:i32 = let %79
+            ret %x_248
+          }
+        }
+        %81:i32 = load %t
+        %82:ptr<function, i32, read_write> = access %currentNode, 0u
+        %83:i32 = load %82
+        %84:bool = gt %81, %83
+        if %84 [t: $B20, f: $B21] {  # if_7
+          $B20: {  # true
+            %85:ptr<function, i32, read_write> = access %currentNode, 2u
+            %86:i32 = load %85
+            store %x_231, %86
+            exit_if  # if_7
+          }
+          $B21: {  # false
+            %87:ptr<function, i32, read_write> = access %currentNode, 1u
+            %88:i32 = load %87
+            store %x_231, %88
+            exit_if  # if_7
+          }
+        }
+        %89:i32 = load %x_231
+        store %index, %89
+        continue  # -> $B16
+      }
+      $B16: {  # continuing
+        next_iteration  # -> $B15
+      }
+    }
+    ret -1i
+  }
+}
+%main_1 = func():void {
+  $B22: {
+    %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
+    %count:ptr<function, i32, read_write> = var
+    %i:ptr<function, i32, read_write> = var
+    %result:ptr<function, i32, read_write> = var
+    %param_24:ptr<function, i32, read_write> = var
+    store %treeIndex_1, 0i
+    %116:ptr<private, BST, read_write> = access %tree_1, 0i
+    %117:BST = load %116
+    store %param_4, %117
+    store %param_5, 9i
+    %118:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param_4, %param_5
+    %119:ptr<private, BST, read_write> = access %tree_1, 0i
+    %120:BST = load %param_4
+    store %119, %120
+    %121:i32 = load %treeIndex_1
+    %122:i32 = add %121, 1i
+    store %treeIndex_1, %122
+    %123:i32 = load %treeIndex_1
+    store %param_6, %123
+    store %param_7, 5i
+    %124:void = call %insert_i1_i1_, %param_6, %param_7
+    %125:i32 = load %treeIndex_1
+    %126:i32 = add %125, 1i
+    store %treeIndex_1, %126
+    %127:i32 = load %treeIndex_1
+    store %param_8, %127
+    store %param_9, 12i
+    %128:void = call %insert_i1_i1_, %param_8, %param_9
+    %129:i32 = load %treeIndex_1
+    %130:i32 = add %129, 1i
+    store %treeIndex_1, %130
+    %131:i32 = load %treeIndex_1
+    store %param_10, %131
+    store %param_11, 15i
+    %132:void = call %insert_i1_i1_, %param_10, %param_11
+    %133:i32 = load %treeIndex_1
+    %134:i32 = add %133, 1i
+    store %treeIndex_1, %134
+    %135:i32 = load %treeIndex_1
+    store %param_12, %135
+    store %param_13, 7i
+    %136:void = call %insert_i1_i1_, %param_12, %param_13
+    %137:i32 = load %treeIndex_1
+    %138:i32 = add %137, 1i
+    store %treeIndex_1, %138
+    %139:i32 = load %treeIndex_1
+    store %param_14, %139
+    store %param_15, 8i
+    %140:void = call %insert_i1_i1_, %param_14, %param_15
+    %141:i32 = load %treeIndex_1
+    %142:i32 = add %141, 1i
+    store %treeIndex_1, %142
+    %143:i32 = load %treeIndex_1
+    store %param_16, %143
+    store %param_17, 2i
+    %144:void = call %insert_i1_i1_, %param_16, %param_17
+    %145:i32 = load %treeIndex_1
+    %146:i32 = add %145, 1i
+    store %treeIndex_1, %146
+    %147:i32 = load %treeIndex_1
+    store %param_18, %147
+    store %param_19, 6i
+    %148:void = call %insert_i1_i1_, %param_18, %param_19
+    %149:i32 = load %treeIndex_1
+    %150:i32 = add %149, 1i
+    store %treeIndex_1, %150
+    %151:i32 = load %treeIndex_1
+    store %param_20, %151
+    store %param_21, 17i
+    %152:void = call %insert_i1_i1_, %param_20, %param_21
+    %153:i32 = load %treeIndex_1
+    %154:i32 = add %153, 1i
+    store %treeIndex_1, %154
+    %155:i32 = load %treeIndex_1
+    store %param_22, %155
+    store %param_23, 13i
+    %156:void = call %insert_i1_i1_, %param_22, %param_23
+    store %count, 0i
+    store %i, 0i
+    loop [b: $B23, c: $B24] {  # loop_3
+      $B23: {  # body
+        %157:i32 = load %i
+        %158:bool = lt %157, 20i
+        if %158 [t: $B25, f: $B26] {  # if_8
+          $B25: {  # true
+            exit_if  # if_8
+          }
+          $B26: {  # false
+            exit_loop  # loop_3
+          }
+        }
+        %x_155:ptr<function, bool, read_write> = var
+        %x_156:ptr<function, bool, read_write> = var
+        %161:i32 = load %i
+        store %param_24, %161
+        %162:i32 = call %search_i1_, %param_24
+        %x_136:i32 = let %162
+        store %result, %x_136
+        %164:i32 = load %i
+        %x_137:i32 = let %164
+        switch %x_137 [c: (2i 5i 6i 7i 8i 9i 12i 13i 15i 17i, $B27), c: (default, $B28)] {  # switch_1
+          $B27: {  # case
+            %166:i32 = load %result
+            %167:i32 = load %i
+            %168:bool = eq %166, %167
+            %x_149:bool = let %168
+            store %x_156, %x_149
+            %170:bool = eq %x_149, false
+            if %170 [t: $B29] {  # if_9
+              $B29: {  # true
+                %171:f32 = load_vector_element %gl_FragCoord, 0u
+                %172:bool = lt %171, 0.0f
+                store %x_155, %172
+                %173:bool = load %x_155
+                store %x_156, %173
+                exit_if  # if_9
+              }
+            }
+            %174:bool = load %x_156
+            if %174 [t: $B30] {  # if_10
+              $B30: {  # true
+                %175:i32 = load %count
+                %176:i32 = add %175, 1i
+                store %count, %176
+                exit_if  # if_10
+              }
+            }
+            exit_switch  # switch_1
+          }
+          $B28: {  # case
+            %177:i32 = load %result
+            %178:bool = eq %177, -1i
+            if %178 [t: $B31] {  # if_11
+              $B31: {  # true
+                %179:i32 = load %count
+                %180:i32 = add %179, 1i
+                store %count, %180
+                exit_if  # if_11
+              }
+            }
+            exit_switch  # switch_1
+          }
+        }
+        continue  # -> $B24
+      }
+      $B24: {  # continuing
+        %181:i32 = load %i
+        %182:i32 = add %181, 1i
+        store %i, %182
+        next_iteration  # -> $B23
+      }
+    }
+    %183:i32 = load %count
+    %184:bool = eq %183, 20i
+    if %184 [t: $B32, f: $B33] {  # if_12
+      $B32: {  # true
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        exit_if  # if_12
+      }
+      $B33: {  # false
+        store %x_GLF_color, vec4<f32>(0.0f, 0.0f, 1.0f, 1.0f)
+        exit_if  # if_12
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B34: {
+    store %gl_FragCoord, %gl_FragCoord_param
+    %187:void = call %main_1
+    %188:vec4<f32> = load %x_GLF_color
+    %189:main_out = construct %188
+    ret %189
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/1.wgsl.expected.ir.msl
index 28251dc..806ddd9 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/1.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/1.wgsl.expected.ir.msl
@@ -1,6 +1,465 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: BST = struct @align(4) {
+  data:i32 @offset(0)
+  leftIndex:i32 @offset(4)
+  rightIndex:i32 @offset(8)
+}
+
+main_out = struct @align(16) {
+  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
+}
+
+$B1: {  # root
+  %tree_1:ptr<private, array<BST, 10>, read_write> = var
+  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
+  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+}
+
+%makeTreeNode_struct_BST_i1_i1_i11_i1_ = func(%tree:ptr<function, BST, read_write>, %data:ptr<function, i32, read_write>):void {
+  $B2: {
+    %7:i32 = load %data
+    %x_169:i32 = let %7
+    %9:ptr<function, i32, read_write> = access %tree, 0u
+    store %9, %x_169
+    %10:ptr<function, i32, read_write> = access %tree, 1u
+    store %10, -1i
+    %11:ptr<function, i32, read_write> = access %tree, 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
+        %x_178:i32 = let %20
+        %22:i32 = load %treeIndex
+        %x_179:i32 = let %22
+        %24:bool = lte %x_178, %x_179
+        if %24 [t: $B6, f: $B7] {  # if_1
+          $B6: {  # true
+            exit_if  # if_1
+          }
+          $B7: {  # false
+            exit_loop  # loop_1
+          }
+        }
+        %25:i32 = load %data_1
+        %x_182:i32 = let %25
+        %27:i32 = load %baseIndex
+        %x_183:i32 = let %27
+        %29:ptr<private, i32, read_write> = access %tree_1, %x_183, 0u
+        %30:i32 = load %29
+        %x_185:i32 = let %30
+        %32:bool = lte %x_182, %x_185
+        if %32 [t: $B8, f: $B9] {  # if_2
+          $B8: {  # true
+            %33:i32 = load %baseIndex
+            %x_190:i32 = let %33
+            %35:ptr<private, i32, read_write> = access %tree_1, %x_190, 1u
+            %36:i32 = load %35
+            %x_192:i32 = let %36
+            %38:bool = eq %x_192, -1i
+            if %38 [t: $B10, f: $B11] {  # if_3
+              $B10: {  # true
+                %39:i32 = load %baseIndex
+                %x_197:i32 = let %39
+                %41:i32 = load %treeIndex
+                %x_198:i32 = let %41
+                %43:ptr<private, i32, read_write> = access %tree_1, %x_197, 1u
+                store %43, %x_198
+                %44:i32 = load %treeIndex
+                %x_200:i32 = let %44
+                %46:ptr<private, BST, read_write> = access %tree_1, %x_200
+                %47:BST = load %46
+                %x_202:BST = let %47
+                store %param, %x_202
+                %49:i32 = load %data_1
+                %x_203:i32 = let %49
+                store %param_1, %x_203
+                %51:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param, %param_1
+                %52:BST = load %param
+                %x_205:BST = let %52
+                %54:ptr<private, BST, read_write> = access %tree_1, %x_200
+                store %54, %x_205
+                ret
+              }
+              $B11: {  # false
+                %55:i32 = load %baseIndex
+                %x_207:i32 = let %55
+                %57:ptr<private, i32, read_write> = access %tree_1, %x_207, 1u
+                %58:i32 = load %57
+                %x_209:i32 = let %58
+                store %baseIndex, %x_209
+                continue  # -> $B5
+              }
+            }
+            exit_if  # if_2
+          }
+          $B9: {  # false
+            %60:i32 = load %baseIndex
+            %x_210:i32 = let %60
+            %62:ptr<private, i32, read_write> = access %tree_1, %x_210, 2u
+            %63:i32 = load %62
+            %x_212:i32 = let %63
+            %65:bool = eq %x_212, -1i
+            if %65 [t: $B12, f: $B13] {  # if_4
+              $B12: {  # true
+                %66:i32 = load %baseIndex
+                %x_217:i32 = let %66
+                %68:i32 = load %treeIndex
+                %x_218:i32 = let %68
+                %70:ptr<private, i32, read_write> = access %tree_1, %x_217, 2u
+                store %70, %x_218
+                %71:i32 = load %treeIndex
+                %x_220:i32 = let %71
+                %73:ptr<private, BST, read_write> = access %tree_1, %x_220
+                %74:BST = load %73
+                %x_222:BST = let %74
+                store %param_2, %x_222
+                %76:i32 = load %data_1
+                %x_223:i32 = let %76
+                store %param_3, %x_223
+                %78:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param_2, %param_3
+                %79:BST = load %param_2
+                %x_225:BST = let %79
+                %81:ptr<private, BST, read_write> = access %tree_1, %x_220
+                store %81, %x_225
+                ret
+              }
+              $B13: {  # false
+                %82:i32 = load %baseIndex
+                %x_227:i32 = let %82
+                %84:ptr<private, i32, read_write> = access %tree_1, %x_227, 2u
+                %85:i32 = load %84
+                %x_229:i32 = let %85
+                store %baseIndex, %x_229
+                continue  # -> $B5
+              }
+            }
+            exit_if  # if_2
+          }
+        }
+        unreachable
+      }
+      $B5: {  # continuing
+        next_iteration  # -> $B4
+      }
+    }
+    ret
+  }
+}
+%search_i1_ = func(%t:ptr<function, i32, read_write>):i32 {
+  $B14: {
+    %index:ptr<function, i32, read_write> = var
+    %currentNode:ptr<function, BST, read_write> = var
+    %x_231:ptr<function, i32, read_write> = var
+    store %index, 0i
+    loop [b: $B15, c: $B16] {  # loop_2
+      $B15: {  # body
+        %92:i32 = load %index
+        %x_236:i32 = let %92
+        %94:bool = neq %x_236, -1i
+        if %94 [t: $B17, f: $B18] {  # if_5
+          $B17: {  # true
+            exit_if  # if_5
+          }
+          $B18: {  # false
+            exit_loop  # loop_2
+          }
+        }
+        %95:i32 = load %index
+        %x_239:i32 = let %95
+        %97:ptr<private, BST, read_write> = access %tree_1, %x_239
+        %98:BST = load %97
+        %x_241:BST = let %98
+        store %currentNode, %x_241
+        %100:ptr<function, i32, read_write> = access %currentNode, 0u
+        %101:i32 = load %100
+        %x_243:i32 = let %101
+        %103:i32 = load %t
+        %x_244:i32 = let %103
+        %105:bool = eq %x_243, %x_244
+        if %105 [t: $B19] {  # if_6
+          $B19: {  # true
+            %106:i32 = load %t
+            %x_248:i32 = let %106
+            ret %x_248
+          }
+        }
+        %108:i32 = load %t
+        %x_249:i32 = let %108
+        %110:ptr<function, i32, read_write> = access %currentNode, 0u
+        %111:i32 = load %110
+        %x_251:i32 = let %111
+        %113:bool = gt %x_249, %x_251
+        if %113 [t: $B20, f: $B21] {  # if_7
+          $B20: {  # true
+            %114:ptr<function, i32, read_write> = access %currentNode, 2u
+            %115:i32 = load %114
+            %x_257:i32 = let %115
+            store %x_231, %x_257
+            exit_if  # if_7
+          }
+          $B21: {  # false
+            %117:ptr<function, i32, read_write> = access %currentNode, 1u
+            %118:i32 = load %117
+            %x_259:i32 = let %118
+            store %x_231, %x_259
+            exit_if  # if_7
+          }
+        }
+        %120:i32 = load %x_231
+        %x_260:i32 = let %120
+        store %index, %x_260
+        continue  # -> $B16
+      }
+      $B16: {  # continuing
+        next_iteration  # -> $B15
+      }
+    }
+    ret -1i
+  }
+}
+%main_1 = func():void {
+  $B22: {
+    %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
+    %count:ptr<function, i32, read_write> = var
+    %i:ptr<function, i32, read_write> = var
+    %result:ptr<function, i32, read_write> = var
+    %param_24:ptr<function, i32, read_write> = var
+    store %treeIndex_1, 0i
+    %148:ptr<private, BST, read_write> = access %tree_1, 0i
+    %149:BST = load %148
+    %x_88:BST = let %149
+    store %param_4, %x_88
+    store %param_5, 9i
+    %151:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param_4, %param_5
+    %152:BST = load %param_4
+    %x_90:BST = let %152
+    %154:ptr<private, BST, read_write> = access %tree_1, 0i
+    store %154, %x_90
+    %155:i32 = load %treeIndex_1
+    %x_92:i32 = let %155
+    %157:i32 = add %x_92, 1i
+    store %treeIndex_1, %157
+    %158:i32 = load %treeIndex_1
+    %x_94:i32 = let %158
+    store %param_6, %x_94
+    store %param_7, 5i
+    %160:void = call %insert_i1_i1_, %param_6, %param_7
+    %161:i32 = load %treeIndex_1
+    %x_96:i32 = let %161
+    %163:i32 = add %x_96, 1i
+    store %treeIndex_1, %163
+    %164:i32 = load %treeIndex_1
+    %x_98:i32 = let %164
+    store %param_8, %x_98
+    store %param_9, 12i
+    %166:void = call %insert_i1_i1_, %param_8, %param_9
+    %167:i32 = load %treeIndex_1
+    %x_100:i32 = let %167
+    %169:i32 = add %x_100, 1i
+    store %treeIndex_1, %169
+    %170:i32 = load %treeIndex_1
+    %x_102:i32 = let %170
+    store %param_10, %x_102
+    store %param_11, 15i
+    %172:void = call %insert_i1_i1_, %param_10, %param_11
+    %173:i32 = load %treeIndex_1
+    %x_104:i32 = let %173
+    %175:i32 = add %x_104, 1i
+    store %treeIndex_1, %175
+    %176:i32 = load %treeIndex_1
+    %x_106:i32 = let %176
+    store %param_12, %x_106
+    store %param_13, 7i
+    %178:void = call %insert_i1_i1_, %param_12, %param_13
+    %179:i32 = load %treeIndex_1
+    %x_108:i32 = let %179
+    %181:i32 = add %x_108, 1i
+    store %treeIndex_1, %181
+    %182:i32 = load %treeIndex_1
+    %x_110:i32 = let %182
+    store %param_14, %x_110
+    store %param_15, 8i
+    %184:void = call %insert_i1_i1_, %param_14, %param_15
+    %185:i32 = load %treeIndex_1
+    %x_112:i32 = let %185
+    %187:i32 = add %x_112, 1i
+    store %treeIndex_1, %187
+    %188:i32 = load %treeIndex_1
+    %x_114:i32 = let %188
+    store %param_16, %x_114
+    store %param_17, 2i
+    %190:void = call %insert_i1_i1_, %param_16, %param_17
+    %191:i32 = load %treeIndex_1
+    %x_116:i32 = let %191
+    %193:i32 = add %x_116, 1i
+    store %treeIndex_1, %193
+    %194:i32 = load %treeIndex_1
+    %x_118:i32 = let %194
+    store %param_18, %x_118
+    store %param_19, 6i
+    %196:void = call %insert_i1_i1_, %param_18, %param_19
+    %197:i32 = load %treeIndex_1
+    %x_120:i32 = let %197
+    %199:i32 = add %x_120, 1i
+    store %treeIndex_1, %199
+    %200:i32 = load %treeIndex_1
+    %x_122:i32 = let %200
+    store %param_20, %x_122
+    store %param_21, 17i
+    %202:void = call %insert_i1_i1_, %param_20, %param_21
+    %203:i32 = load %treeIndex_1
+    %x_124:i32 = let %203
+    %205:i32 = add %x_124, 1i
+    store %treeIndex_1, %205
+    %206:i32 = load %treeIndex_1
+    %x_126:i32 = let %206
+    store %param_22, %x_126
+    store %param_23, 13i
+    %208:void = call %insert_i1_i1_, %param_22, %param_23
+    store %count, 0i
+    store %i, 0i
+    loop [b: $B23, c: $B24] {  # loop_3
+      $B23: {  # body
+        %209:i32 = load %i
+        %x_132:i32 = let %209
+        %211:bool = lt %x_132, 20i
+        if %211 [t: $B25, f: $B26] {  # if_8
+          $B25: {  # true
+            exit_if  # if_8
+          }
+          $B26: {  # false
+            exit_loop  # loop_3
+          }
+        }
+        %x_155:ptr<function, bool, read_write> = var
+        %x_156_phi:ptr<function, bool, read_write> = var
+        %214:i32 = load %i
+        %x_135:i32 = let %214
+        store %param_24, %x_135
+        %216:i32 = call %search_i1_, %param_24
+        %x_136:i32 = let %216
+        store %result, %x_136
+        %218:i32 = load %i
+        %x_137:i32 = let %218
+        switch %x_137 [c: (2i 5i 6i 7i 8i 9i 12i 13i 15i 17i, $B27), c: (default, $B28)] {  # switch_1
+          $B27: {  # case
+            %220:i32 = load %result
+            %x_147:i32 = let %220
+            %222:i32 = load %i
+            %x_148:i32 = let %222
+            %224:bool = eq %x_147, %x_148
+            %x_149:bool = let %224
+            store %x_156_phi, %x_149
+            %226:bool = eq %x_149, false
+            if %226 [t: $B29] {  # if_9
+              $B29: {  # true
+                %227:f32 = load_vector_element %gl_FragCoord, 0u
+                %x_154:f32 = let %227
+                %229:bool = lt %x_154, 0.0f
+                store %x_155, %229
+                %230:bool = load %x_155
+                store %x_156_phi, %230
+                exit_if  # if_9
+              }
+            }
+            %231:bool = load %x_156_phi
+            %x_156:bool = let %231
+            if %x_156 [t: $B30] {  # if_10
+              $B30: {  # true
+                %233:i32 = load %count
+                %x_159:i32 = let %233
+                %235:i32 = add %x_159, 1i
+                store %count, %235
+                exit_if  # if_10
+              }
+            }
+            exit_switch  # switch_1
+          }
+          $B28: {  # case
+            %236:i32 = load %result
+            %x_141:i32 = let %236
+            %238:bool = eq %x_141, -1i
+            if %238 [t: $B31] {  # if_11
+              $B31: {  # true
+                %239:i32 = load %count
+                %x_145:i32 = let %239
+                %241:i32 = add %x_145, 1i
+                store %count, %241
+                exit_if  # if_11
+              }
+            }
+            exit_switch  # switch_1
+          }
+        }
+        continue  # -> $B24
+      }
+      $B24: {  # continuing
+        %242:i32 = load %i
+        %x_161:i32 = let %242
+        %244:i32 = add %x_161, 1i
+        store %i, %244
+        next_iteration  # -> $B23
+      }
+    }
+    %245:i32 = load %count
+    %x_163:i32 = let %245
+    %247:bool = eq %x_163, 20i
+    if %247 [t: $B32, f: $B33] {  # if_12
+      $B32: {  # true
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        exit_if  # if_12
+      }
+      $B33: {  # false
+        store %x_GLF_color, vec4<f32>(0.0f, 0.0f, 1.0f, 1.0f)
+        exit_if  # if_12
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B34: {
+    store %gl_FragCoord, %gl_FragCoord_param
+    %250:void = call %main_1
+    %251:vec4<f32> = load %x_GLF_color
+    %252:main_out = construct %251
+    ret %252
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-nested-if-and-conditional/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-nested-if-and-conditional/1.spvasm.expected.ir.msl
index 327ea03..579c4cd 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-nested-if-and-conditional/1.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-nested-if-and-conditional/1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: BST = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: BST = struct @align(4) {
   data:i32 @offset(0)
   leftIndex:i32 @offset(4)
   rightIndex:i32 @offset(8)
@@ -14,14 +14,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %tree_1:ptr<private, array<BST, 10>, read_write> = var
   %x_16: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(%tree:ptr<function, BST, read_write>, %data:ptr<function, i32, read_write>):void -> %b2 {
-  %b2 = block {
+%makeTreeNode_struct_BST_i1_i1_i11_i1_ = func(%tree:ptr<function, BST, read_write>, %data:ptr<function, i32, read_write>):void {
+  $B2: {
     %7:ptr<function, i32, read_write> = access %tree, 0u
     %8:i32 = load %data
     store %7, %8
@@ -32,8 +32,8 @@
     ret
   }
 }
-%insert_i1_i1_ = func(%treeIndex:ptr<function, i32, read_write>, %data_1:ptr<function, i32, read_write>):void -> %b3 {
-  %b3 = block {
+%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
@@ -41,16 +41,16 @@
     %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 = block {  # body
+    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 = block {  # true
+        if %22 [t: $B6, f: $B7] {  # if_1
+          $B6: {  # true
             exit_if  # if_1
           }
-          %b7 = block {  # false
+          $B7: {  # false
             exit_loop  # loop_1
           }
         }
@@ -59,195 +59,200 @@
         %25:ptr<private, i32, read_write> = access %tree_1, %24, 0u
         %26:i32 = load %25
         %27:bool = lte %23, %26
-        if %27 [t: %b8, f: %b9] {  # if_2
-          %b8 = block {  # true
+        if %27 [t: $B8, f: $B9] {  # if_2
+          $B8: {  # true
             %28:i32 = load %baseIndex
             %29:ptr<private, i32, read_write> = access %tree_1, %28, 1u
             %30:i32 = load %29
             %31:bool = eq %30, -1i
-            if %31 [t: %b10, f: %b11] {  # if_3
-              %b10 = block {  # true
-                %x_194:i32 = load %baseIndex
-                %33:ptr<private, i32, read_write> = access %tree_1, %x_194, 1u
-                %34:i32 = load %treeIndex
-                store %33, %34
-                %35:ptr<uniform, vec2<f32>, read> = access %x_16, 0u
-                %36:f32 = load_vector_element %35, 0u
-                %37:ptr<uniform, vec2<f32>, read> = access %x_16, 0u
-                %38:f32 = load_vector_element %37, 1u
-                %39:bool = lt %36, %38
-                if %39 [t: %b12] {  # if_4
-                  %b12 = block {  # true
-                    %x_204:i32 = load %treeIndex
-                    %41:ptr<private, BST, read_write> = access %tree_1, %x_204
-                    %42:BST = load %41
-                    store %param, %42
-                    %43:i32 = load %data_1
-                    store %param_1, %43
-                    %44:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param, %param_1
-                    %45:ptr<private, BST, read_write> = access %tree_1, %x_204
-                    %46:BST = load %param
-                    store %45, %46
+            if %31 [t: $B10, f: $B11] {  # if_3
+              $B10: {  # true
+                %32:i32 = load %baseIndex
+                %x_194:i32 = let %32
+                %34:ptr<private, i32, read_write> = access %tree_1, %x_194, 1u
+                %35:i32 = load %treeIndex
+                store %34, %35
+                %36:ptr<uniform, vec2<f32>, read> = access %x_16, 0u
+                %37:f32 = load_vector_element %36, 0u
+                %38:ptr<uniform, vec2<f32>, read> = access %x_16, 0u
+                %39:f32 = load_vector_element %38, 1u
+                %40:bool = lt %37, %39
+                if %40 [t: $B12] {  # if_4
+                  $B12: {  # true
+                    %41:i32 = load %treeIndex
+                    %x_204:i32 = let %41
+                    %43:ptr<private, BST, read_write> = access %tree_1, %x_204
+                    %44:BST = load %43
+                    store %param, %44
+                    %45:i32 = load %data_1
+                    store %param_1, %45
+                    %46:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param, %param_1
+                    %47:ptr<private, BST, read_write> = access %tree_1, %x_204
+                    %48:BST = load %param
+                    store %47, %48
                     exit_if  # if_4
                   }
                 }
-                %47:ptr<uniform, vec2<f32>, read> = access %x_16, 0u
-                %48:f32 = load_vector_element %47, 0u
                 %49:ptr<uniform, vec2<f32>, read> = access %x_16, 0u
-                %50:f32 = load_vector_element %49, 1u
-                %51:bool = lt %48, %50
-                if %51 [t: %b13] {  # if_5
-                  %b13 = block {  # true
+                %50:f32 = load_vector_element %49, 0u
+                %51:ptr<uniform, vec2<f32>, read> = access %x_16, 0u
+                %52:f32 = load_vector_element %51, 1u
+                %53:bool = lt %50, %52
+                if %53 [t: $B13] {  # if_5
+                  $B13: {  # true
                     ret
                   }
                 }
                 exit_if  # if_3
               }
-              %b11 = block {  # false
-                %52:i32 = load %baseIndex
-                %53:ptr<private, i32, read_write> = access %tree_1, %52, 1u
-                %54:i32 = load %53
-                store %baseIndex, %54
-                continue %b5
+              $B11: {  # false
+                %54:i32 = load %baseIndex
+                %55:ptr<private, i32, read_write> = access %tree_1, %54, 1u
+                %56:i32 = load %55
+                store %baseIndex, %56
+                continue  # -> $B5
               }
             }
             exit_if  # if_2
           }
-          %b9 = block {  # false
-            %55:ptr<uniform, vec2<f32>, read> = access %x_16, 0u
-            %56:f32 = load_vector_element %55, 0u
+          $B9: {  # false
             %57:ptr<uniform, vec2<f32>, read> = access %x_16, 0u
-            %58:f32 = load_vector_element %57, 1u
-            %59:bool = lt %56, %58
-            if %59 [t: %b14, f: %b15] {  # if_6
-              %b14 = block {  # true
-                %60:i32 = load %baseIndex
-                %61:ptr<private, i32, read_write> = access %tree_1, %60, 2u
-                %62:i32 = load %61
-                store %x_170, %62
+            %58:f32 = load_vector_element %57, 0u
+            %59:ptr<uniform, vec2<f32>, read> = access %x_16, 0u
+            %60:f32 = load_vector_element %59, 1u
+            %61:bool = lt %58, %60
+            if %61 [t: $B14, f: $B15] {  # if_6
+              $B14: {  # true
+                %62:i32 = load %baseIndex
+                %63:ptr<private, i32, read_write> = access %tree_1, %62, 2u
+                %64:i32 = load %63
+                store %x_170, %64
                 exit_if  # if_6
               }
-              %b15 = block {  # false
-                %63:i32 = load %baseIndex
-                %64:ptr<private, i32, read_write> = access %tree_1, %63, 2u
-                %65:i32 = load %64
-                store %x_170, %65
+              $B15: {  # false
+                %65:i32 = load %baseIndex
+                %66:ptr<private, i32, read_write> = access %tree_1, %65, 2u
+                %67:i32 = load %66
+                store %x_170, %67
                 exit_if  # if_6
               }
             }
-            %66:i32 = load %x_170
-            %67:bool = eq %66, -1i
-            if %67 [t: %b16, f: %b17] {  # if_7
-              %b16 = block {  # true
-                %x_240:i32 = load %baseIndex
-                %69:ptr<private, i32, read_write> = access %tree_1, %x_240, 2u
-                %70:i32 = load %treeIndex
-                store %69, %70
-                %x_243:i32 = load %treeIndex
-                %72:ptr<private, BST, read_write> = access %tree_1, %x_243
-                %73:BST = load %72
-                store %param_2, %73
-                %74:i32 = load %data_1
-                store %param_3, %74
-                %75:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param_2, %param_3
+            %68:i32 = load %x_170
+            %69:bool = eq %68, -1i
+            if %69 [t: $B16, f: $B17] {  # if_7
+              $B16: {  # true
+                %70:i32 = load %baseIndex
+                %x_240:i32 = let %70
+                %72:ptr<private, i32, read_write> = access %tree_1, %x_240, 2u
+                %73:i32 = load %treeIndex
+                store %72, %73
+                %74:i32 = load %treeIndex
+                %x_243:i32 = let %74
                 %76:ptr<private, BST, read_write> = access %tree_1, %x_243
-                %77:BST = load %param_2
-                store %76, %77
+                %77:BST = load %76
+                store %param_2, %77
+                %78:i32 = load %data_1
+                store %param_3, %78
+                %79:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param_2, %param_3
+                %80:ptr<private, BST, read_write> = access %tree_1, %x_243
+                %81:BST = load %param_2
+                store %80, %81
                 ret
               }
-              %b17 = block {  # false
-                %78:i32 = load %baseIndex
-                %79:ptr<private, i32, read_write> = access %tree_1, %78, 2u
-                %80:i32 = load %79
-                store %baseIndex, %80
-                continue %b5
+              $B17: {  # false
+                %82:i32 = load %baseIndex
+                %83:ptr<private, i32, read_write> = access %tree_1, %82, 2u
+                %84:i32 = load %83
+                store %baseIndex, %84
+                continue  # -> $B5
               }
             }
             exit_if  # if_2
           }
         }
-        %81:ptr<uniform, vec2<f32>, read> = access %x_16, 0u
-        %82:f32 = load_vector_element %81, 0u
-        %83:ptr<uniform, vec2<f32>, read> = access %x_16, 0u
-        %84:f32 = load_vector_element %83, 1u
-        %85:bool = gt %82, %84
-        if %85 [t: %b18] {  # if_8
-          %b18 = block {  # true
+        %85:ptr<uniform, vec2<f32>, read> = access %x_16, 0u
+        %86:f32 = load_vector_element %85, 0u
+        %87:ptr<uniform, vec2<f32>, read> = access %x_16, 0u
+        %88:f32 = load_vector_element %87, 1u
+        %89:bool = gt %86, %88
+        if %89 [t: $B18] {  # if_8
+          $B18: {  # true
             ret
           }
         }
-        continue %b5
+        continue  # -> $B5
       }
-      %b5 = block {  # continuing
-        next_iteration %b4
+      $B5: {  # continuing
+        next_iteration  # -> $B4
       }
     }
     ret
   }
 }
-%search_i1_ = func(%t:ptr<function, i32, read_write>):i32 -> %b19 {
-  %b19 = block {
+%search_i1_ = func(%t:ptr<function, i32, read_write>):i32 {
+  $B19: {
     %index:ptr<function, i32, read_write> = var
     %currentNode:ptr<function, BST, read_write> = var
     %x_261:ptr<function, i32, read_write> = var
     store %index, 0i
-    loop [b: %b20, c: %b21] {  # loop_2
-      %b20 = block {  # body
-        %91:i32 = load %index
-        %92:bool = neq %91, -1i
-        if %92 [t: %b22, f: %b23] {  # if_9
-          %b22 = block {  # true
+    loop [b: $B20, c: $B21] {  # loop_2
+      $B20: {  # body
+        %95:i32 = load %index
+        %96:bool = neq %95, -1i
+        if %96 [t: $B22, f: $B23] {  # if_9
+          $B22: {  # true
             exit_if  # if_9
           }
-          %b23 = block {  # false
+          $B23: {  # false
             exit_loop  # loop_2
           }
         }
-        %93:i32 = load %index
-        %94:ptr<private, BST, read_write> = access %tree_1, %93
-        %95:BST = load %94
-        store %currentNode, %95
-        %96:ptr<function, i32, read_write> = access %currentNode, 0u
-        %97:i32 = load %96
-        %98:i32 = load %t
-        %99:bool = eq %97, %98
-        if %99 [t: %b24] {  # if_10
-          %b24 = block {  # true
-            %x_278:i32 = load %t
+        %97:i32 = load %index
+        %98:ptr<private, BST, read_write> = access %tree_1, %97
+        %99:BST = load %98
+        store %currentNode, %99
+        %100:ptr<function, i32, read_write> = access %currentNode, 0u
+        %101:i32 = load %100
+        %102:i32 = load %t
+        %103:bool = eq %101, %102
+        if %103 [t: $B24] {  # if_10
+          $B24: {  # true
+            %104:i32 = load %t
+            %x_278:i32 = let %104
             ret %x_278
           }
         }
-        %101:i32 = load %t
-        %102:ptr<function, i32, read_write> = access %currentNode, 0u
-        %103:i32 = load %102
-        %104:bool = gt %101, %103
-        if %104 [t: %b25, f: %b26] {  # if_11
-          %b25 = block {  # true
-            %105:ptr<function, i32, read_write> = access %currentNode, 2u
-            %106:i32 = load %105
-            store %x_261, %106
+        %106:i32 = load %t
+        %107:ptr<function, i32, read_write> = access %currentNode, 0u
+        %108:i32 = load %107
+        %109:bool = gt %106, %108
+        if %109 [t: $B25, f: $B26] {  # if_11
+          $B25: {  # true
+            %110:ptr<function, i32, read_write> = access %currentNode, 2u
+            %111:i32 = load %110
+            store %x_261, %111
             exit_if  # if_11
           }
-          %b26 = block {  # false
-            %107:ptr<function, i32, read_write> = access %currentNode, 1u
-            %108:i32 = load %107
-            store %x_261, %108
+          $B26: {  # false
+            %112:ptr<function, i32, read_write> = access %currentNode, 1u
+            %113:i32 = load %112
+            store %x_261, %113
             exit_if  # if_11
           }
         }
-        %109:i32 = load %x_261
-        store %index, %109
-        continue %b21
+        %114:i32 = load %x_261
+        store %index, %114
+        continue  # -> $B21
       }
-      %b21 = block {  # continuing
-        next_iteration %b20
+      $B21: {  # continuing
+        next_iteration  # -> $B20
       }
     }
     ret -1i
   }
 }
-%main_1 = func():void -> %b27 {
-  %b27 = block {
+%main_1 = func():void {
+  $B27: {
     %treeIndex_1:ptr<function, i32, read_write> = var
     %param_4:ptr<function, BST, read_write> = var
     %param_5:ptr<function, i32, read_write> = var
@@ -274,142 +279,144 @@
     %result:ptr<function, i32, read_write> = var
     %param_24:ptr<function, i32, read_write> = var
     store %treeIndex_1, 0i
-    %136:ptr<private, BST, read_write> = access %tree_1, 0i
-    %137:BST = load %136
-    store %param_4, %137
+    %141:ptr<private, BST, read_write> = access %tree_1, 0i
+    %142:BST = load %141
+    store %param_4, %142
     store %param_5, 9i
-    %138:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param_4, %param_5
-    %139:ptr<private, BST, read_write> = access %tree_1, 0i
-    %140:BST = load %param_4
-    store %139, %140
-    %141:i32 = load %treeIndex_1
-    %142:i32 = add %141, 1i
-    store %treeIndex_1, %142
-    %143:i32 = load %treeIndex_1
-    store %param_6, %143
+    %143:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param_4, %param_5
+    %144:ptr<private, BST, read_write> = access %tree_1, 0i
+    %145:BST = load %param_4
+    store %144, %145
+    %146:i32 = load %treeIndex_1
+    %147:i32 = add %146, 1i
+    store %treeIndex_1, %147
+    %148:i32 = load %treeIndex_1
+    store %param_6, %148
     store %param_7, 5i
-    %144:void = call %insert_i1_i1_, %param_6, %param_7
-    %145:i32 = load %treeIndex_1
-    %146:i32 = add %145, 1i
-    store %treeIndex_1, %146
-    %147:i32 = load %treeIndex_1
-    store %param_8, %147
+    %149:void = call %insert_i1_i1_, %param_6, %param_7
+    %150:i32 = load %treeIndex_1
+    %151:i32 = add %150, 1i
+    store %treeIndex_1, %151
+    %152:i32 = load %treeIndex_1
+    store %param_8, %152
     store %param_9, 12i
-    %148:void = call %insert_i1_i1_, %param_8, %param_9
-    %149:i32 = load %treeIndex_1
-    %150:i32 = add %149, 1i
-    store %treeIndex_1, %150
-    %151:i32 = load %treeIndex_1
-    store %param_10, %151
+    %153:void = call %insert_i1_i1_, %param_8, %param_9
+    %154:i32 = load %treeIndex_1
+    %155:i32 = add %154, 1i
+    store %treeIndex_1, %155
+    %156:i32 = load %treeIndex_1
+    store %param_10, %156
     store %param_11, 15i
-    %152:void = call %insert_i1_i1_, %param_10, %param_11
-    %153:i32 = load %treeIndex_1
-    %154:i32 = add %153, 1i
-    store %treeIndex_1, %154
-    %155:i32 = load %treeIndex_1
-    store %param_12, %155
+    %157:void = call %insert_i1_i1_, %param_10, %param_11
+    %158:i32 = load %treeIndex_1
+    %159:i32 = add %158, 1i
+    store %treeIndex_1, %159
+    %160:i32 = load %treeIndex_1
+    store %param_12, %160
     store %param_13, 7i
-    %156:void = call %insert_i1_i1_, %param_12, %param_13
-    %157:i32 = load %treeIndex_1
-    %158:i32 = add %157, 1i
-    store %treeIndex_1, %158
-    %159:i32 = load %treeIndex_1
-    store %param_14, %159
+    %161:void = call %insert_i1_i1_, %param_12, %param_13
+    %162:i32 = load %treeIndex_1
+    %163:i32 = add %162, 1i
+    store %treeIndex_1, %163
+    %164:i32 = load %treeIndex_1
+    store %param_14, %164
     store %param_15, 8i
-    %160:void = call %insert_i1_i1_, %param_14, %param_15
-    %161:i32 = load %treeIndex_1
-    %162:i32 = add %161, 1i
-    store %treeIndex_1, %162
-    %163:i32 = load %treeIndex_1
-    store %param_16, %163
+    %165:void = call %insert_i1_i1_, %param_14, %param_15
+    %166:i32 = load %treeIndex_1
+    %167:i32 = add %166, 1i
+    store %treeIndex_1, %167
+    %168:i32 = load %treeIndex_1
+    store %param_16, %168
     store %param_17, 2i
-    %164:void = call %insert_i1_i1_, %param_16, %param_17
-    %165:i32 = load %treeIndex_1
-    %166:i32 = add %165, 1i
-    store %treeIndex_1, %166
-    %167:i32 = load %treeIndex_1
-    store %param_18, %167
+    %169:void = call %insert_i1_i1_, %param_16, %param_17
+    %170:i32 = load %treeIndex_1
+    %171:i32 = add %170, 1i
+    store %treeIndex_1, %171
+    %172:i32 = load %treeIndex_1
+    store %param_18, %172
     store %param_19, 6i
-    %168:void = call %insert_i1_i1_, %param_18, %param_19
-    %169:i32 = load %treeIndex_1
-    %170:i32 = add %169, 1i
-    store %treeIndex_1, %170
-    %171:i32 = load %treeIndex_1
-    store %param_20, %171
+    %173:void = call %insert_i1_i1_, %param_18, %param_19
+    %174:i32 = load %treeIndex_1
+    %175:i32 = add %174, 1i
+    store %treeIndex_1, %175
+    %176:i32 = load %treeIndex_1
+    store %param_20, %176
     store %param_21, 17i
-    %172:void = call %insert_i1_i1_, %param_20, %param_21
-    %173:i32 = load %treeIndex_1
-    %174:i32 = add %173, 1i
-    store %treeIndex_1, %174
-    %175:i32 = load %treeIndex_1
-    store %param_22, %175
+    %177:void = call %insert_i1_i1_, %param_20, %param_21
+    %178:i32 = load %treeIndex_1
+    %179:i32 = add %178, 1i
+    store %treeIndex_1, %179
+    %180:i32 = load %treeIndex_1
+    store %param_22, %180
     store %param_23, 13i
-    %176:void = call %insert_i1_i1_, %param_22, %param_23
+    %181:void = call %insert_i1_i1_, %param_22, %param_23
     store %count, 0i
     store %i, 0i
-    loop [b: %b28, c: %b29] {  # loop_3
-      %b28 = block {  # body
-        %177:i32 = load %i
-        %178:bool = lt %177, 20i
-        if %178 [t: %b30, f: %b31] {  # if_12
-          %b30 = block {  # true
+    loop [b: $B28, c: $B29] {  # loop_3
+      $B28: {  # body
+        %182:i32 = load %i
+        %183:bool = lt %182, 20i
+        if %183 [t: $B30, f: $B31] {  # if_12
+          $B30: {  # true
             exit_if  # if_12
           }
-          %b31 = block {  # false
+          $B31: {  # false
             exit_loop  # loop_3
           }
         }
-        %179:i32 = load %i
-        store %param_24, %179
-        %x_139:i32 = call %search_i1_, %param_24
+        %184:i32 = load %i
+        store %param_24, %184
+        %185:i32 = call %search_i1_, %param_24
+        %x_139:i32 = let %185
         store %result, %x_139
-        %x_140:i32 = load %i
-        switch %x_140 [c: (2i 5i 6i 7i 8i 9i 12i 13i 15i 17i, %b32), c: (default, %b33)] {  # switch_1
-          %b32 = block {  # case
-            %182:i32 = load %result
-            %183:i32 = load %i
-            %184:bool = eq %182, %183
-            if %184 [t: %b34] {  # if_13
-              %b34 = block {  # true
-                %185:i32 = load %count
-                %186:i32 = add %185, 1i
-                store %count, %186
+        %187:i32 = load %i
+        %x_140:i32 = let %187
+        switch %x_140 [c: (2i 5i 6i 7i 8i 9i 12i 13i 15i 17i, $B32), c: (default, $B33)] {  # switch_1
+          $B32: {  # case
+            %189:i32 = load %result
+            %190:i32 = load %i
+            %191:bool = eq %189, %190
+            if %191 [t: $B34] {  # if_13
+              $B34: {  # true
+                %192:i32 = load %count
+                %193:i32 = add %192, 1i
+                store %count, %193
                 exit_if  # if_13
               }
             }
             exit_switch  # switch_1
           }
-          %b33 = block {  # case
-            %187:i32 = load %result
-            %188:bool = eq %187, -1i
-            if %188 [t: %b35] {  # if_14
-              %b35 = block {  # true
-                %189:i32 = load %count
-                %190:i32 = add %189, 1i
-                store %count, %190
+          $B33: {  # case
+            %194:i32 = load %result
+            %195:bool = eq %194, -1i
+            if %195 [t: $B35] {  # if_14
+              $B35: {  # true
+                %196:i32 = load %count
+                %197:i32 = add %196, 1i
+                store %count, %197
                 exit_if  # if_14
               }
             }
             exit_switch  # switch_1
           }
         }
-        continue %b29
+        continue  # -> $B29
       }
-      %b29 = block {  # continuing
-        %191:i32 = load %i
-        %192:i32 = add %191, 1i
-        store %i, %192
-        next_iteration %b28
+      $B29: {  # continuing
+        %198:i32 = load %i
+        %199:i32 = add %198, 1i
+        store %i, %199
+        next_iteration  # -> $B28
       }
     }
-    %193:i32 = load %count
-    %194:bool = eq %193, 20i
-    if %194 [t: %b36, f: %b37] {  # if_15
-      %b36 = block {  # true
+    %200:i32 = load %count
+    %201:bool = eq %200, 20i
+    if %201 [t: $B36, f: $B37] {  # if_15
+      $B36: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_15
       }
-      %b37 = block {  # false
+      $B37: {  # false
         store %x_GLF_color, vec4<f32>(0.0f, 0.0f, 1.0f, 1.0f)
         exit_if  # if_15
       }
@@ -417,12 +424,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b38 {
-  %b38 = block {
-    %196:void = call %main_1
-    %197:vec4<f32> = load %x_GLF_color
-    %198:main_out = construct %197
-    ret %198
+%tint_symbol = @fragment func():main_out {
+  $B38: {
+    %203:void = call %main_1
+    %204:vec4<f32> = load %x_GLF_color
+    %205:main_out = construct %204
+    ret %205
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-nested-if-and-conditional/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-nested-if-and-conditional/1.wgsl.expected.ir.msl
index 8c53e96..4083d4b 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-nested-if-and-conditional/1.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-nested-if-and-conditional/1.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: BST = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: BST = struct @align(4) {
   data:i32 @offset(0)
   leftIndex:i32 @offset(4)
   rightIndex:i32 @offset(8)
@@ -14,26 +14,27 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %tree_1:ptr<private, array<BST, 10>, read_write> = var
   %x_16: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(%tree:ptr<function, BST, read_write>, %data:ptr<function, i32, read_write>):void -> %b2 {
-  %b2 = block {
-    %x_165:i32 = load %data
-    %8:ptr<function, i32, read_write> = access %tree, 0u
-    store %8, %x_165
-    %9:ptr<function, i32, read_write> = access %tree, 1u
-    store %9, -1i
-    %10:ptr<function, i32, read_write> = access %tree, 2u
+%makeTreeNode_struct_BST_i1_i1_i11_i1_ = func(%tree:ptr<function, BST, read_write>, %data:ptr<function, i32, read_write>):void {
+  $B2: {
+    %7:i32 = load %data
+    %x_165:i32 = let %7
+    %9:ptr<function, i32, read_write> = access %tree, 0u
+    store %9, %x_165
+    %10:ptr<function, i32, read_write> = access %tree, 1u
     store %10, -1i
+    %11:ptr<function, i32, read_write> = access %tree, 2u
+    store %11, -1i
     ret
   }
 }
-%insert_i1_i1_ = func(%treeIndex:ptr<function, i32, read_write>, %data_1:ptr<function, i32, read_write>):void -> %b3 {
-  %b3 = block {
+%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
@@ -41,213 +42,260 @@
     %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 = block {  # body
-        %x_175:i32 = load %baseIndex
-        %x_176:i32 = load %treeIndex
-        %22:bool = lte %x_175, %x_176
-        if %22 [t: %b6, f: %b7] {  # if_1
-          %b6 = block {  # true
+    loop [b: $B4, c: $B5] {  # loop_1
+      $B4: {  # body
+        %21:i32 = load %baseIndex
+        %x_175:i32 = let %21
+        %23:i32 = load %treeIndex
+        %x_176:i32 = let %23
+        %25:bool = lte %x_175, %x_176
+        if %25 [t: $B6, f: $B7] {  # if_1
+          $B6: {  # true
             exit_if  # if_1
           }
-          %b7 = block {  # false
+          $B7: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_179:i32 = load %data_1
-        %x_180:i32 = load %baseIndex
-        %25:ptr<private, i32, read_write> = access %tree_1, %x_180, 0u
-        %x_182:i32 = load %25
-        %27:bool = lte %x_179, %x_182
-        if %27 [t: %b8, f: %b9] {  # if_2
-          %b8 = block {  # true
-            %x_187:i32 = load %baseIndex
-            %29:ptr<private, i32, read_write> = access %tree_1, %x_187, 1u
-            %x_189:i32 = load %29
-            %31:bool = eq %x_189, -1i
-            if %31 [t: %b10, f: %b11] {  # if_3
-              %b10 = block {  # true
-                %x_194:i32 = load %baseIndex
-                %x_195:i32 = load %treeIndex
-                %34:ptr<private, i32, read_write> = access %tree_1, %x_194, 1u
-                store %34, %x_195
-                %35:ptr<uniform, vec2<f32>, read> = access %x_16, 0u
-                %x_198:f32 = load_vector_element %35, 0u
-                %37:ptr<uniform, vec2<f32>, read> = access %x_16, 0u
-                %x_200:f32 = load_vector_element %37, 1u
-                %39:bool = lt %x_198, %x_200
-                if %39 [t: %b12] {  # if_4
-                  %b12 = block {  # true
-                    %x_204:i32 = load %treeIndex
-                    %41:ptr<private, BST, read_write> = access %tree_1, %x_204
-                    %x_206:BST = load %41
+        %26:i32 = load %data_1
+        %x_179:i32 = let %26
+        %28:i32 = load %baseIndex
+        %x_180:i32 = let %28
+        %30:ptr<private, i32, read_write> = access %tree_1, %x_180, 0u
+        %31:i32 = load %30
+        %x_182:i32 = let %31
+        %33:bool = lte %x_179, %x_182
+        if %33 [t: $B8, f: $B9] {  # if_2
+          $B8: {  # true
+            %34:i32 = load %baseIndex
+            %x_187:i32 = let %34
+            %36:ptr<private, i32, read_write> = access %tree_1, %x_187, 1u
+            %37:i32 = load %36
+            %x_189:i32 = let %37
+            %39:bool = eq %x_189, -1i
+            if %39 [t: $B10, f: $B11] {  # if_3
+              $B10: {  # true
+                %40:i32 = load %baseIndex
+                %x_194:i32 = let %40
+                %42:i32 = load %treeIndex
+                %x_195:i32 = let %42
+                %44:ptr<private, i32, read_write> = access %tree_1, %x_194, 1u
+                store %44, %x_195
+                %45:ptr<uniform, vec2<f32>, read> = access %x_16, 0u
+                %46:f32 = load_vector_element %45, 0u
+                %x_198:f32 = let %46
+                %48:ptr<uniform, vec2<f32>, read> = access %x_16, 0u
+                %49:f32 = load_vector_element %48, 1u
+                %x_200:f32 = let %49
+                %51:bool = lt %x_198, %x_200
+                if %51 [t: $B12] {  # if_4
+                  $B12: {  # true
+                    %52:i32 = load %treeIndex
+                    %x_204:i32 = let %52
+                    %54:ptr<private, BST, read_write> = access %tree_1, %x_204
+                    %55:BST = load %54
+                    %x_206:BST = let %55
                     store %param, %x_206
-                    %x_207:i32 = load %data_1
+                    %57:i32 = load %data_1
+                    %x_207:i32 = let %57
                     store %param_1, %x_207
-                    %44:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param, %param_1
-                    %x_209:BST = load %param
-                    %46:ptr<private, BST, read_write> = access %tree_1, %x_204
-                    store %46, %x_209
+                    %59:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param, %param_1
+                    %60:BST = load %param
+                    %x_209:BST = let %60
+                    %62:ptr<private, BST, read_write> = access %tree_1, %x_204
+                    store %62, %x_209
                     exit_if  # if_4
                   }
                 }
-                %47:ptr<uniform, vec2<f32>, read> = access %x_16, 0u
-                %x_212:f32 = load_vector_element %47, 0u
-                %49:ptr<uniform, vec2<f32>, read> = access %x_16, 0u
-                %x_214:f32 = load_vector_element %49, 1u
-                %51:bool = lt %x_212, %x_214
-                if %51 [t: %b13] {  # if_5
-                  %b13 = block {  # true
+                %63:ptr<uniform, vec2<f32>, read> = access %x_16, 0u
+                %64:f32 = load_vector_element %63, 0u
+                %x_212:f32 = let %64
+                %66:ptr<uniform, vec2<f32>, read> = access %x_16, 0u
+                %67:f32 = load_vector_element %66, 1u
+                %x_214:f32 = let %67
+                %69:bool = lt %x_212, %x_214
+                if %69 [t: $B13] {  # if_5
+                  $B13: {  # true
                     ret
                   }
                 }
                 exit_if  # if_3
               }
-              %b11 = block {  # false
-                %x_218:i32 = load %baseIndex
-                %53:ptr<private, i32, read_write> = access %tree_1, %x_218, 1u
-                %x_220:i32 = load %53
+              $B11: {  # false
+                %70:i32 = load %baseIndex
+                %x_218:i32 = let %70
+                %72:ptr<private, i32, read_write> = access %tree_1, %x_218, 1u
+                %73:i32 = load %72
+                %x_220:i32 = let %73
                 store %baseIndex, %x_220
-                continue %b5
+                continue  # -> $B5
               }
             }
             exit_if  # if_2
           }
-          %b9 = block {  # false
-            %55:ptr<uniform, vec2<f32>, read> = access %x_16, 0u
-            %x_222:f32 = load_vector_element %55, 0u
-            %57:ptr<uniform, vec2<f32>, read> = access %x_16, 0u
-            %x_224:f32 = load_vector_element %57, 1u
-            %59:bool = lt %x_222, %x_224
-            if %59 [t: %b14, f: %b15] {  # if_6
-              %b14 = block {  # true
-                %x_229:i32 = load %baseIndex
-                %61:ptr<private, i32, read_write> = access %tree_1, %x_229, 2u
-                %x_231:i32 = load %61
+          $B9: {  # false
+            %75:ptr<uniform, vec2<f32>, read> = access %x_16, 0u
+            %76:f32 = load_vector_element %75, 0u
+            %x_222:f32 = let %76
+            %78:ptr<uniform, vec2<f32>, read> = access %x_16, 0u
+            %79:f32 = load_vector_element %78, 1u
+            %x_224:f32 = let %79
+            %81:bool = lt %x_222, %x_224
+            if %81 [t: $B14, f: $B15] {  # if_6
+              $B14: {  # true
+                %82:i32 = load %baseIndex
+                %x_229:i32 = let %82
+                %84:ptr<private, i32, read_write> = access %tree_1, %x_229, 2u
+                %85:i32 = load %84
+                %x_231:i32 = let %85
                 store %x_170, %x_231
                 exit_if  # if_6
               }
-              %b15 = block {  # false
-                %x_232:i32 = load %baseIndex
-                %64:ptr<private, i32, read_write> = access %tree_1, %x_232, 2u
-                %x_234:i32 = load %64
+              $B15: {  # false
+                %87:i32 = load %baseIndex
+                %x_232:i32 = let %87
+                %89:ptr<private, i32, read_write> = access %tree_1, %x_232, 2u
+                %90:i32 = load %89
+                %x_234:i32 = let %90
                 store %x_170, %x_234
                 exit_if  # if_6
               }
             }
-            %x_235:i32 = load %x_170
-            %67:bool = eq %x_235, -1i
-            if %67 [t: %b16, f: %b17] {  # if_7
-              %b16 = block {  # true
-                %x_240:i32 = load %baseIndex
-                %x_241:i32 = load %treeIndex
-                %70:ptr<private, i32, read_write> = access %tree_1, %x_240, 2u
-                store %70, %x_241
-                %x_243:i32 = load %treeIndex
-                %72:ptr<private, BST, read_write> = access %tree_1, %x_243
-                %x_245:BST = load %72
+            %92:i32 = load %x_170
+            %x_235:i32 = let %92
+            %94:bool = eq %x_235, -1i
+            if %94 [t: $B16, f: $B17] {  # if_7
+              $B16: {  # true
+                %95:i32 = load %baseIndex
+                %x_240:i32 = let %95
+                %97:i32 = load %treeIndex
+                %x_241:i32 = let %97
+                %99:ptr<private, i32, read_write> = access %tree_1, %x_240, 2u
+                store %99, %x_241
+                %100:i32 = load %treeIndex
+                %x_243:i32 = let %100
+                %102:ptr<private, BST, read_write> = access %tree_1, %x_243
+                %103:BST = load %102
+                %x_245:BST = let %103
                 store %param_2, %x_245
-                %x_246:i32 = load %data_1
+                %105:i32 = load %data_1
+                %x_246:i32 = let %105
                 store %param_3, %x_246
-                %75:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param_2, %param_3
-                %x_248:BST = load %param_2
-                %77:ptr<private, BST, read_write> = access %tree_1, %x_243
-                store %77, %x_248
+                %107:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param_2, %param_3
+                %108:BST = load %param_2
+                %x_248:BST = let %108
+                %110:ptr<private, BST, read_write> = access %tree_1, %x_243
+                store %110, %x_248
                 ret
               }
-              %b17 = block {  # false
-                %x_250:i32 = load %baseIndex
-                %79:ptr<private, i32, read_write> = access %tree_1, %x_250, 2u
-                %x_252:i32 = load %79
+              $B17: {  # false
+                %111:i32 = load %baseIndex
+                %x_250:i32 = let %111
+                %113:ptr<private, i32, read_write> = access %tree_1, %x_250, 2u
+                %114:i32 = load %113
+                %x_252:i32 = let %114
                 store %baseIndex, %x_252
-                continue %b5
+                continue  # -> $B5
               }
             }
             exit_if  # if_2
           }
         }
-        %81:ptr<uniform, vec2<f32>, read> = access %x_16, 0u
-        %x_254:f32 = load_vector_element %81, 0u
-        %83:ptr<uniform, vec2<f32>, read> = access %x_16, 0u
-        %x_256:f32 = load_vector_element %83, 1u
-        %85:bool = gt %x_254, %x_256
-        if %85 [t: %b18] {  # if_8
-          %b18 = block {  # true
+        %116:ptr<uniform, vec2<f32>, read> = access %x_16, 0u
+        %117:f32 = load_vector_element %116, 0u
+        %x_254:f32 = let %117
+        %119:ptr<uniform, vec2<f32>, read> = access %x_16, 0u
+        %120:f32 = load_vector_element %119, 1u
+        %x_256:f32 = let %120
+        %122:bool = gt %x_254, %x_256
+        if %122 [t: $B18] {  # if_8
+          $B18: {  # true
             ret
           }
         }
-        continue %b5
+        continue  # -> $B5
       }
-      %b5 = block {  # continuing
-        next_iteration %b4
+      $B5: {  # continuing
+        next_iteration  # -> $B4
       }
     }
     ret
   }
 }
-%search_i1_ = func(%t:ptr<function, i32, read_write>):i32 -> %b19 {
-  %b19 = block {
+%search_i1_ = func(%t:ptr<function, i32, read_write>):i32 {
+  $B19: {
     %index:ptr<function, i32, read_write> = var
     %currentNode:ptr<function, BST, read_write> = var
     %x_261:ptr<function, i32, read_write> = var
     store %index, 0i
-    loop [b: %b20, c: %b21] {  # loop_2
-      %b20 = block {  # body
-        %x_266:i32 = load %index
-        %92:bool = neq %x_266, -1i
-        if %92 [t: %b22, f: %b23] {  # if_9
-          %b22 = block {  # true
+    loop [b: $B20, c: $B21] {  # loop_2
+      $B20: {  # body
+        %128:i32 = load %index
+        %x_266:i32 = let %128
+        %130:bool = neq %x_266, -1i
+        if %130 [t: $B22, f: $B23] {  # if_9
+          $B22: {  # true
             exit_if  # if_9
           }
-          %b23 = block {  # false
+          $B23: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_269:i32 = load %index
-        %94:ptr<private, BST, read_write> = access %tree_1, %x_269
-        %x_271:BST = load %94
+        %131:i32 = load %index
+        %x_269:i32 = let %131
+        %133:ptr<private, BST, read_write> = access %tree_1, %x_269
+        %134:BST = load %133
+        %x_271:BST = let %134
         store %currentNode, %x_271
-        %96:ptr<function, i32, read_write> = access %currentNode, 0u
-        %x_273:i32 = load %96
-        %x_274:i32 = load %t
-        %99:bool = eq %x_273, %x_274
-        if %99 [t: %b24] {  # if_10
-          %b24 = block {  # true
-            %x_278:i32 = load %t
+        %136:ptr<function, i32, read_write> = access %currentNode, 0u
+        %137:i32 = load %136
+        %x_273:i32 = let %137
+        %139:i32 = load %t
+        %x_274:i32 = let %139
+        %141:bool = eq %x_273, %x_274
+        if %141 [t: $B24] {  # if_10
+          $B24: {  # true
+            %142:i32 = load %t
+            %x_278:i32 = let %142
             ret %x_278
           }
         }
-        %x_279:i32 = load %t
-        %102:ptr<function, i32, read_write> = access %currentNode, 0u
-        %x_281:i32 = load %102
-        %104:bool = gt %x_279, %x_281
-        if %104 [t: %b25, f: %b26] {  # if_11
-          %b25 = block {  # true
-            %105:ptr<function, i32, read_write> = access %currentNode, 2u
-            %x_287:i32 = load %105
+        %144:i32 = load %t
+        %x_279:i32 = let %144
+        %146:ptr<function, i32, read_write> = access %currentNode, 0u
+        %147:i32 = load %146
+        %x_281:i32 = let %147
+        %149:bool = gt %x_279, %x_281
+        if %149 [t: $B25, f: $B26] {  # if_11
+          $B25: {  # true
+            %150:ptr<function, i32, read_write> = access %currentNode, 2u
+            %151:i32 = load %150
+            %x_287:i32 = let %151
             store %x_261, %x_287
             exit_if  # if_11
           }
-          %b26 = block {  # false
-            %107:ptr<function, i32, read_write> = access %currentNode, 1u
-            %x_289:i32 = load %107
+          $B26: {  # false
+            %153:ptr<function, i32, read_write> = access %currentNode, 1u
+            %154:i32 = load %153
+            %x_289:i32 = let %154
             store %x_261, %x_289
             exit_if  # if_11
           }
         }
-        %x_290:i32 = load %x_261
+        %156:i32 = load %x_261
+        %x_290:i32 = let %156
         store %index, %x_290
-        continue %b21
+        continue  # -> $B21
       }
-      %b21 = block {  # continuing
-        next_iteration %b20
+      $B21: {  # continuing
+        next_iteration  # -> $B20
       }
     }
     ret -1i
   }
 }
-%main_1 = func():void -> %b27 {
-  %b27 = block {
+%main_1 = func():void {
+  $B27: {
     %treeIndex_1:ptr<function, i32, read_write> = var
     %param_4:ptr<function, BST, read_write> = var
     %param_5:ptr<function, i32, read_write> = var
@@ -274,142 +322,173 @@
     %result:ptr<function, i32, read_write> = var
     %param_24:ptr<function, i32, read_write> = var
     store %treeIndex_1, 0i
-    %136:ptr<private, BST, read_write> = access %tree_1, 0i
-    %x_91:BST = load %136
+    %184:ptr<private, BST, read_write> = access %tree_1, 0i
+    %185:BST = load %184
+    %x_91:BST = let %185
     store %param_4, %x_91
     store %param_5, 9i
-    %138:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param_4, %param_5
-    %x_93:BST = load %param_4
-    %140:ptr<private, BST, read_write> = access %tree_1, 0i
-    store %140, %x_93
-    %x_95:i32 = load %treeIndex_1
-    %142:i32 = add %x_95, 1i
-    store %treeIndex_1, %142
-    %x_97:i32 = load %treeIndex_1
+    %187:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param_4, %param_5
+    %188:BST = load %param_4
+    %x_93:BST = let %188
+    %190:ptr<private, BST, read_write> = access %tree_1, 0i
+    store %190, %x_93
+    %191:i32 = load %treeIndex_1
+    %x_95:i32 = let %191
+    %193:i32 = add %x_95, 1i
+    store %treeIndex_1, %193
+    %194:i32 = load %treeIndex_1
+    %x_97:i32 = let %194
     store %param_6, %x_97
     store %param_7, 5i
-    %144:void = call %insert_i1_i1_, %param_6, %param_7
-    %x_99:i32 = load %treeIndex_1
-    %146:i32 = add %x_99, 1i
-    store %treeIndex_1, %146
-    %x_101:i32 = load %treeIndex_1
+    %196:void = call %insert_i1_i1_, %param_6, %param_7
+    %197:i32 = load %treeIndex_1
+    %x_99:i32 = let %197
+    %199:i32 = add %x_99, 1i
+    store %treeIndex_1, %199
+    %200:i32 = load %treeIndex_1
+    %x_101:i32 = let %200
     store %param_8, %x_101
     store %param_9, 12i
-    %148:void = call %insert_i1_i1_, %param_8, %param_9
-    %x_103:i32 = load %treeIndex_1
-    %150:i32 = add %x_103, 1i
-    store %treeIndex_1, %150
-    %x_105:i32 = load %treeIndex_1
+    %202:void = call %insert_i1_i1_, %param_8, %param_9
+    %203:i32 = load %treeIndex_1
+    %x_103:i32 = let %203
+    %205:i32 = add %x_103, 1i
+    store %treeIndex_1, %205
+    %206:i32 = load %treeIndex_1
+    %x_105:i32 = let %206
     store %param_10, %x_105
     store %param_11, 15i
-    %152:void = call %insert_i1_i1_, %param_10, %param_11
-    %x_107:i32 = load %treeIndex_1
-    %154:i32 = add %x_107, 1i
-    store %treeIndex_1, %154
-    %x_109:i32 = load %treeIndex_1
+    %208:void = call %insert_i1_i1_, %param_10, %param_11
+    %209:i32 = load %treeIndex_1
+    %x_107:i32 = let %209
+    %211:i32 = add %x_107, 1i
+    store %treeIndex_1, %211
+    %212:i32 = load %treeIndex_1
+    %x_109:i32 = let %212
     store %param_12, %x_109
     store %param_13, 7i
-    %156:void = call %insert_i1_i1_, %param_12, %param_13
-    %x_111:i32 = load %treeIndex_1
-    %158:i32 = add %x_111, 1i
-    store %treeIndex_1, %158
-    %x_113:i32 = load %treeIndex_1
+    %214:void = call %insert_i1_i1_, %param_12, %param_13
+    %215:i32 = load %treeIndex_1
+    %x_111:i32 = let %215
+    %217:i32 = add %x_111, 1i
+    store %treeIndex_1, %217
+    %218:i32 = load %treeIndex_1
+    %x_113:i32 = let %218
     store %param_14, %x_113
     store %param_15, 8i
-    %160:void = call %insert_i1_i1_, %param_14, %param_15
-    %x_115:i32 = load %treeIndex_1
-    %162:i32 = add %x_115, 1i
-    store %treeIndex_1, %162
-    %x_117:i32 = load %treeIndex_1
+    %220:void = call %insert_i1_i1_, %param_14, %param_15
+    %221:i32 = load %treeIndex_1
+    %x_115:i32 = let %221
+    %223:i32 = add %x_115, 1i
+    store %treeIndex_1, %223
+    %224:i32 = load %treeIndex_1
+    %x_117:i32 = let %224
     store %param_16, %x_117
     store %param_17, 2i
-    %164:void = call %insert_i1_i1_, %param_16, %param_17
-    %x_119:i32 = load %treeIndex_1
-    %166:i32 = add %x_119, 1i
-    store %treeIndex_1, %166
-    %x_121:i32 = load %treeIndex_1
+    %226:void = call %insert_i1_i1_, %param_16, %param_17
+    %227:i32 = load %treeIndex_1
+    %x_119:i32 = let %227
+    %229:i32 = add %x_119, 1i
+    store %treeIndex_1, %229
+    %230:i32 = load %treeIndex_1
+    %x_121:i32 = let %230
     store %param_18, %x_121
     store %param_19, 6i
-    %168:void = call %insert_i1_i1_, %param_18, %param_19
-    %x_123:i32 = load %treeIndex_1
-    %170:i32 = add %x_123, 1i
-    store %treeIndex_1, %170
-    %x_125:i32 = load %treeIndex_1
+    %232:void = call %insert_i1_i1_, %param_18, %param_19
+    %233:i32 = load %treeIndex_1
+    %x_123:i32 = let %233
+    %235:i32 = add %x_123, 1i
+    store %treeIndex_1, %235
+    %236:i32 = load %treeIndex_1
+    %x_125:i32 = let %236
     store %param_20, %x_125
     store %param_21, 17i
-    %172:void = call %insert_i1_i1_, %param_20, %param_21
-    %x_127:i32 = load %treeIndex_1
-    %174:i32 = add %x_127, 1i
-    store %treeIndex_1, %174
-    %x_129:i32 = load %treeIndex_1
+    %238:void = call %insert_i1_i1_, %param_20, %param_21
+    %239:i32 = load %treeIndex_1
+    %x_127:i32 = let %239
+    %241:i32 = add %x_127, 1i
+    store %treeIndex_1, %241
+    %242:i32 = load %treeIndex_1
+    %x_129:i32 = let %242
     store %param_22, %x_129
     store %param_23, 13i
-    %176:void = call %insert_i1_i1_, %param_22, %param_23
+    %244:void = call %insert_i1_i1_, %param_22, %param_23
     store %count, 0i
     store %i, 0i
-    loop [b: %b28, c: %b29] {  # loop_3
-      %b28 = block {  # body
-        %x_135:i32 = load %i
-        %178:bool = lt %x_135, 20i
-        if %178 [t: %b30, f: %b31] {  # if_12
-          %b30 = block {  # true
+    loop [b: $B28, c: $B29] {  # loop_3
+      $B28: {  # body
+        %245:i32 = load %i
+        %x_135:i32 = let %245
+        %247:bool = lt %x_135, 20i
+        if %247 [t: $B30, f: $B31] {  # if_12
+          $B30: {  # true
             exit_if  # if_12
           }
-          %b31 = block {  # false
+          $B31: {  # false
             exit_loop  # loop_3
           }
         }
-        %x_138:i32 = load %i
+        %248:i32 = load %i
+        %x_138:i32 = let %248
         store %param_24, %x_138
-        %x_139:i32 = call %search_i1_, %param_24
+        %250:i32 = call %search_i1_, %param_24
+        %x_139:i32 = let %250
         store %result, %x_139
-        %x_140:i32 = load %i
-        switch %x_140 [c: (2i 5i 6i 7i 8i 9i 12i 13i 15i 17i, %b32), c: (default, %b33)] {  # switch_1
-          %b32 = block {  # case
-            %x_150:i32 = load %result
-            %x_151:i32 = load %i
-            %184:bool = eq %x_150, %x_151
-            if %184 [t: %b34] {  # if_13
-              %b34 = block {  # true
-                %x_155:i32 = load %count
-                %186:i32 = add %x_155, 1i
-                store %count, %186
+        %252:i32 = load %i
+        %x_140:i32 = let %252
+        switch %x_140 [c: (2i 5i 6i 7i 8i 9i 12i 13i 15i 17i, $B32), c: (default, $B33)] {  # switch_1
+          $B32: {  # case
+            %254:i32 = load %result
+            %x_150:i32 = let %254
+            %256:i32 = load %i
+            %x_151:i32 = let %256
+            %258:bool = eq %x_150, %x_151
+            if %258 [t: $B34] {  # if_13
+              $B34: {  # true
+                %259:i32 = load %count
+                %x_155:i32 = let %259
+                %261:i32 = add %x_155, 1i
+                store %count, %261
                 exit_if  # if_13
               }
             }
             exit_switch  # switch_1
           }
-          %b33 = block {  # case
-            %x_144:i32 = load %result
-            %188:bool = eq %x_144, -1i
-            if %188 [t: %b35] {  # if_14
-              %b35 = block {  # true
-                %x_148:i32 = load %count
-                %190:i32 = add %x_148, 1i
-                store %count, %190
+          $B33: {  # case
+            %262:i32 = load %result
+            %x_144:i32 = let %262
+            %264:bool = eq %x_144, -1i
+            if %264 [t: $B35] {  # if_14
+              $B35: {  # true
+                %265:i32 = load %count
+                %x_148:i32 = let %265
+                %267:i32 = add %x_148, 1i
+                store %count, %267
                 exit_if  # if_14
               }
             }
             exit_switch  # switch_1
           }
         }
-        continue %b29
+        continue  # -> $B29
       }
-      %b29 = block {  # continuing
-        %x_157:i32 = load %i
-        %192:i32 = add %x_157, 1i
-        store %i, %192
-        next_iteration %b28
+      $B29: {  # continuing
+        %268:i32 = load %i
+        %x_157:i32 = let %268
+        %270:i32 = add %x_157, 1i
+        store %i, %270
+        next_iteration  # -> $B28
       }
     }
-    %x_159:i32 = load %count
-    %194:bool = eq %x_159, 20i
-    if %194 [t: %b36, f: %b37] {  # if_15
-      %b36 = block {  # true
+    %271:i32 = load %count
+    %x_159:i32 = let %271
+    %273:bool = eq %x_159, 20i
+    if %273 [t: $B36, f: $B37] {  # if_15
+      $B36: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_15
       }
-      %b37 = block {  # false
+      $B37: {  # false
         store %x_GLF_color, vec4<f32>(0.0f, 0.0f, 1.0f, 1.0f)
         exit_if  # if_15
       }
@@ -417,12 +496,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b38 {
-  %b38 = block {
-    %196:void = call %main_1
-    %197:vec4<f32> = load %x_GLF_color
-    %198:main_out = construct %197
-    ret %198
+%tint_symbol = @fragment func():main_out {
+  $B38: {
+    %275:void = call %main_1
+    %276:vec4<f32> = load %x_GLF_color
+    %277:main_out = construct %276
+    ret %277
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/0-opt.spvasm.expected.ir.msl
index 28251dc..667a4ad 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,384 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: BST = struct @align(4) {
+  data:i32 @offset(0)
+  leftIndex:i32 @offset(4)
+  rightIndex:i32 @offset(8)
+}
+
+main_out = struct @align(16) {
+  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
+}
+
+$B1: {  # root
+  %tree:ptr<private, array<BST, 10>, read_write> = var
+  %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: {
+    %6:ptr<function, i32, read_write> = access %node, 0u
+    %7:i32 = load %data
+    store %6, %7
+    %8:ptr<function, i32, read_write> = access %node, 1u
+    store %8, -1i
+    %9:ptr<function, i32, read_write> = access %node, 2u
+    store %9, -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
+        %18:i32 = load %baseIndex
+        %19:i32 = load %treeIndex
+        %20:bool = lte %18, %19
+        if %20 [t: $B6, f: $B7] {  # if_1
+          $B6: {  # true
+            exit_if  # if_1
+          }
+          $B7: {  # false
+            exit_loop  # loop_1
+          }
+        }
+        %21:i32 = load %data_1
+        %22:i32 = load %baseIndex
+        %23:ptr<private, i32, read_write> = access %tree, %22, 0u
+        %24:i32 = load %23
+        %25:bool = lte %21, %24
+        if %25 [t: $B8, f: $B9] {  # if_2
+          $B8: {  # true
+            %26:i32 = load %baseIndex
+            %27:ptr<private, i32, read_write> = access %tree, %26, 1u
+            %28:i32 = load %27
+            %29:bool = eq %28, -1i
+            if %29 [t: $B10, f: $B11] {  # if_3
+              $B10: {  # true
+                %30:i32 = load %baseIndex
+                %x_186:i32 = let %30
+                %32:ptr<private, i32, read_write> = access %tree, %x_186, 1u
+                %33:i32 = load %treeIndex
+                store %32, %33
+                %34:i32 = load %treeIndex
+                %x_189:i32 = let %34
+                %36:ptr<private, BST, read_write> = access %tree, %x_189
+                %37:BST = load %36
+                store %param, %37
+                %38:i32 = load %data_1
+                store %param_1, %38
+                %39:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param, %param_1
+                %40:ptr<private, BST, read_write> = access %tree, %x_189
+                %41:BST = load %param
+                store %40, %41
+                ret
+              }
+              $B11: {  # false
+                %42:i32 = load %baseIndex
+                %43:ptr<private, i32, read_write> = access %tree, %42, 1u
+                %44:i32 = load %43
+                store %baseIndex, %44
+                continue  # -> $B5
+              }
+            }
+            exit_if  # if_2
+          }
+          $B9: {  # false
+            %45:i32 = load %baseIndex
+            %46:ptr<private, i32, read_write> = access %tree, %45, 2u
+            %47:i32 = load %46
+            %48:bool = eq %47, -1i
+            if %48 [t: $B12, f: $B13] {  # if_4
+              $B12: {  # true
+                %49:i32 = load %baseIndex
+                %x_206:i32 = let %49
+                %51:ptr<private, i32, read_write> = access %tree, %x_206, 2u
+                %52:i32 = load %treeIndex
+                store %51, %52
+                %53:i32 = load %treeIndex
+                %x_209:i32 = let %53
+                %55:ptr<private, BST, read_write> = access %tree, %x_209
+                %56:BST = load %55
+                store %param_2, %56
+                %57:i32 = load %data_1
+                store %param_3, %57
+                %58:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param_2, %param_3
+                %59:ptr<private, BST, read_write> = access %tree, %x_209
+                %60:BST = load %param_2
+                store %59, %60
+                ret
+              }
+              $B13: {  # false
+                %61:i32 = load %baseIndex
+                %62:ptr<private, i32, read_write> = access %tree, %61, 2u
+                %63:i32 = load %62
+                store %baseIndex, %63
+                continue  # -> $B5
+              }
+            }
+            exit_if  # if_2
+          }
+        }
+        unreachable
+      }
+      $B5: {  # continuing
+        next_iteration  # -> $B4
+      }
+    }
+    ret
+  }
+}
+%search_i1_ = func(%t:ptr<function, i32, read_write>):i32 {
+  $B14: {
+    %index:ptr<function, i32, read_write> = var
+    %currentNode:ptr<function, BST, read_write> = var
+    %x_220:ptr<function, i32, read_write> = var
+    store %index, 0i
+    loop [b: $B15, c: $B16] {  # loop_2
+      $B15: {  # body
+        %69:i32 = load %index
+        %70:bool = neq %69, -1i
+        if %70 [t: $B17, f: $B18] {  # if_5
+          $B17: {  # true
+            exit_if  # if_5
+          }
+          $B18: {  # false
+            exit_loop  # loop_2
+          }
+        }
+        %71:i32 = load %index
+        %72:ptr<private, BST, read_write> = access %tree, %71
+        %73:BST = load %72
+        store %currentNode, %73
+        %74:ptr<function, i32, read_write> = access %currentNode, 0u
+        %75:i32 = load %74
+        %76:i32 = load %t
+        %77:bool = eq %75, %76
+        if %77 [t: $B19] {  # if_6
+          $B19: {  # true
+            %78:i32 = load %t
+            %x_237:i32 = let %78
+            ret %x_237
+          }
+        }
+        %80:i32 = load %t
+        %81:ptr<function, i32, read_write> = access %currentNode, 0u
+        %82:i32 = load %81
+        %83:bool = gt %80, %82
+        if %83 [t: $B20, f: $B21] {  # if_7
+          $B20: {  # true
+            %84:ptr<function, i32, read_write> = access %currentNode, 2u
+            %85:i32 = load %84
+            store %x_220, %85
+            exit_if  # if_7
+          }
+          $B21: {  # false
+            %86:ptr<function, i32, read_write> = access %currentNode, 1u
+            %87:i32 = load %86
+            store %x_220, %87
+            exit_if  # if_7
+          }
+        }
+        %88:i32 = load %x_220
+        store %index, %88
+        continue  # -> $B16
+      }
+      $B16: {  # continuing
+        next_iteration  # -> $B15
+      }
+    }
+    ret -1i
+  }
+}
+%main_1 = func():void {
+  $B22: {
+    %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
+    %count:ptr<function, i32, read_write> = var
+    %i:ptr<function, i32, read_write> = var
+    %result:ptr<function, i32, read_write> = var
+    %param_24:ptr<function, i32, read_write> = var
+    store %treeIndex_1, 0i
+    %115:ptr<private, BST, read_write> = access %tree, 0i
+    %116:BST = load %115
+    store %param_4, %116
+    store %param_5, 9i
+    %117:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param_4, %param_5
+    %118:ptr<private, BST, read_write> = access %tree, 0i
+    %119:BST = load %param_4
+    store %118, %119
+    %120:i32 = load %treeIndex_1
+    %121:i32 = add %120, 1i
+    store %treeIndex_1, %121
+    %122:i32 = load %treeIndex_1
+    store %param_6, %122
+    store %param_7, 5i
+    %123:void = call %insert_i1_i1_, %param_6, %param_7
+    %124:i32 = load %treeIndex_1
+    %125:i32 = add %124, 1i
+    store %treeIndex_1, %125
+    %126:i32 = load %treeIndex_1
+    store %param_8, %126
+    store %param_9, 12i
+    %127:void = call %insert_i1_i1_, %param_8, %param_9
+    %128:i32 = load %treeIndex_1
+    %129:i32 = add %128, 1i
+    store %treeIndex_1, %129
+    %130:i32 = load %treeIndex_1
+    store %param_10, %130
+    store %param_11, 15i
+    %131:void = call %insert_i1_i1_, %param_10, %param_11
+    %132:i32 = load %treeIndex_1
+    %133:i32 = add %132, 1i
+    store %treeIndex_1, %133
+    %134:i32 = load %treeIndex_1
+    store %param_12, %134
+    store %param_13, 7i
+    %135:void = call %insert_i1_i1_, %param_12, %param_13
+    %136:i32 = load %treeIndex_1
+    %137:i32 = add %136, 1i
+    store %treeIndex_1, %137
+    %138:i32 = load %treeIndex_1
+    store %param_14, %138
+    store %param_15, 8i
+    %139:void = call %insert_i1_i1_, %param_14, %param_15
+    %140:i32 = load %treeIndex_1
+    %141:i32 = add %140, 1i
+    store %treeIndex_1, %141
+    %142:i32 = load %treeIndex_1
+    store %param_16, %142
+    store %param_17, 2i
+    %143:void = call %insert_i1_i1_, %param_16, %param_17
+    %144:i32 = load %treeIndex_1
+    %145:i32 = add %144, 1i
+    store %treeIndex_1, %145
+    %146:i32 = load %treeIndex_1
+    store %param_18, %146
+    store %param_19, 6i
+    %147:void = call %insert_i1_i1_, %param_18, %param_19
+    %148:i32 = load %treeIndex_1
+    %149:i32 = add %148, 1i
+    store %treeIndex_1, %149
+    %150:i32 = load %treeIndex_1
+    store %param_20, %150
+    store %param_21, 17i
+    %151:void = call %insert_i1_i1_, %param_20, %param_21
+    %152:i32 = load %treeIndex_1
+    %153:i32 = add %152, 1i
+    store %treeIndex_1, %153
+    %154:i32 = load %treeIndex_1
+    store %param_22, %154
+    store %param_23, 13i
+    %155:void = call %insert_i1_i1_, %param_22, %param_23
+    store %count, 0i
+    store %i, 0i
+    loop [b: $B23, c: $B24] {  # loop_3
+      $B23: {  # body
+        %156:i32 = load %i
+        %157:bool = lt %156, 20i
+        if %157 [t: $B25, f: $B26] {  # if_8
+          $B25: {  # true
+            exit_if  # if_8
+          }
+          $B26: {  # false
+            exit_loop  # loop_3
+          }
+        }
+        %158:i32 = load %i
+        store %param_24, %158
+        %159:i32 = call %search_i1_, %param_24
+        %x_132:i32 = let %159
+        store %result, %x_132
+        %161:i32 = load %i
+        %x_133:i32 = let %161
+        switch %x_133 [c: (2i 5i 6i 7i 8i 9i 12i 13i 15i 17i, $B27), c: (default, $B28)] {  # switch_1
+          $B27: {  # case
+            %163:i32 = load %result
+            %164:i32 = load %i
+            %165:bool = eq %163, %164
+            if %165 [t: $B29] {  # if_9
+              $B29: {  # true
+                %166:i32 = load %count
+                %167:i32 = add %166, 1i
+                store %count, %167
+                exit_if  # if_9
+              }
+            }
+            exit_switch  # switch_1
+          }
+          $B28: {  # case
+            %168:i32 = load %result
+            %169:bool = eq %168, -1i
+            if %169 [t: $B30] {  # if_10
+              $B30: {  # true
+                %170:i32 = load %count
+                %171:i32 = add %170, 1i
+                store %count, %171
+                exit_if  # if_10
+              }
+            }
+            exit_switch  # switch_1
+          }
+        }
+        continue  # -> $B24
+      }
+      $B24: {  # continuing
+        %172:i32 = load %i
+        %173:i32 = add %172, 1i
+        store %i, %173
+        next_iteration  # -> $B23
+      }
+    }
+    %174:i32 = load %count
+    %175:bool = eq %174, 20i
+    if %175 [t: $B31, f: $B32] {  # if_11
+      $B31: {  # true
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        exit_if  # if_11
+      }
+      $B32: {  # false
+        store %x_GLF_color, vec4<f32>(0.0f, 0.0f, 1.0f, 1.0f)
+        exit_if  # if_11
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B33: {
+    %177:void = call %main_1
+    %178:vec4<f32> = load %x_GLF_color
+    %179:main_out = construct %178
+    ret %179
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/0-opt.wgsl.expected.ir.msl
index 28251dc..1e60ae2 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,445 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: BST = struct @align(4) {
+  data:i32 @offset(0)
+  leftIndex:i32 @offset(4)
+  rightIndex:i32 @offset(8)
+}
+
+main_out = struct @align(16) {
+  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
+}
+
+$B1: {  # root
+  %tree:ptr<private, array<BST, 10>, read_write> = var
+  %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: {
+    %6:i32 = load %data
+    %x_158:i32 = let %6
+    %8:ptr<function, i32, read_write> = access %node, 0u
+    store %8, %x_158
+    %9:ptr<function, i32, read_write> = access %node, 1u
+    store %9, -1i
+    %10:ptr<function, i32, read_write> = access %node, 2u
+    store %10, -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
+        %19:i32 = load %baseIndex
+        %x_167:i32 = let %19
+        %21:i32 = load %treeIndex
+        %x_168:i32 = let %21
+        %23:bool = lte %x_167, %x_168
+        if %23 [t: $B6, f: $B7] {  # if_1
+          $B6: {  # true
+            exit_if  # if_1
+          }
+          $B7: {  # false
+            exit_loop  # loop_1
+          }
+        }
+        %24:i32 = load %data_1
+        %x_171:i32 = let %24
+        %26:i32 = load %baseIndex
+        %x_172:i32 = let %26
+        %28:ptr<private, i32, read_write> = access %tree, %x_172, 0u
+        %29:i32 = load %28
+        %x_174:i32 = let %29
+        %31:bool = lte %x_171, %x_174
+        if %31 [t: $B8, f: $B9] {  # if_2
+          $B8: {  # true
+            %32:i32 = load %baseIndex
+            %x_179:i32 = let %32
+            %34:ptr<private, i32, read_write> = access %tree, %x_179, 1u
+            %35:i32 = load %34
+            %x_181:i32 = let %35
+            %37:bool = eq %x_181, -1i
+            if %37 [t: $B10, f: $B11] {  # if_3
+              $B10: {  # true
+                %38:i32 = load %baseIndex
+                %x_186:i32 = let %38
+                %40:i32 = load %treeIndex
+                %x_187:i32 = let %40
+                %42:ptr<private, i32, read_write> = access %tree, %x_186, 1u
+                store %42, %x_187
+                %43:i32 = load %treeIndex
+                %x_189:i32 = let %43
+                %45:ptr<private, BST, read_write> = access %tree, %x_189
+                %46:BST = load %45
+                %x_191:BST = let %46
+                store %param, %x_191
+                %48:i32 = load %data_1
+                %x_192:i32 = let %48
+                store %param_1, %x_192
+                %50:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param, %param_1
+                %51:BST = load %param
+                %x_194:BST = let %51
+                %53:ptr<private, BST, read_write> = access %tree, %x_189
+                store %53, %x_194
+                ret
+              }
+              $B11: {  # false
+                %54:i32 = load %baseIndex
+                %x_196:i32 = let %54
+                %56:ptr<private, i32, read_write> = access %tree, %x_196, 1u
+                %57:i32 = load %56
+                %x_198:i32 = let %57
+                store %baseIndex, %x_198
+                continue  # -> $B5
+              }
+            }
+            exit_if  # if_2
+          }
+          $B9: {  # false
+            %59:i32 = load %baseIndex
+            %x_199:i32 = let %59
+            %61:ptr<private, i32, read_write> = access %tree, %x_199, 2u
+            %62:i32 = load %61
+            %x_201:i32 = let %62
+            %64:bool = eq %x_201, -1i
+            if %64 [t: $B12, f: $B13] {  # if_4
+              $B12: {  # true
+                %65:i32 = load %baseIndex
+                %x_206:i32 = let %65
+                %67:i32 = load %treeIndex
+                %x_207:i32 = let %67
+                %69:ptr<private, i32, read_write> = access %tree, %x_206, 2u
+                store %69, %x_207
+                %70:i32 = load %treeIndex
+                %x_209:i32 = let %70
+                %72:ptr<private, BST, read_write> = access %tree, %x_209
+                %73:BST = load %72
+                %x_211:BST = let %73
+                store %param_2, %x_211
+                %75:i32 = load %data_1
+                %x_212:i32 = let %75
+                store %param_3, %x_212
+                %77:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param_2, %param_3
+                %78:BST = load %param_2
+                %x_214:BST = let %78
+                %80:ptr<private, BST, read_write> = access %tree, %x_209
+                store %80, %x_214
+                ret
+              }
+              $B13: {  # false
+                %81:i32 = load %baseIndex
+                %x_216:i32 = let %81
+                %83:ptr<private, i32, read_write> = access %tree, %x_216, 2u
+                %84:i32 = load %83
+                %x_218:i32 = let %84
+                store %baseIndex, %x_218
+                continue  # -> $B5
+              }
+            }
+            exit_if  # if_2
+          }
+        }
+        unreachable
+      }
+      $B5: {  # continuing
+        next_iteration  # -> $B4
+      }
+    }
+    ret
+  }
+}
+%search_i1_ = func(%t:ptr<function, i32, read_write>):i32 {
+  $B14: {
+    %index:ptr<function, i32, read_write> = var
+    %currentNode:ptr<function, BST, read_write> = var
+    %x_220:ptr<function, i32, read_write> = var
+    store %index, 0i
+    loop [b: $B15, c: $B16] {  # loop_2
+      $B15: {  # body
+        %91:i32 = load %index
+        %x_225:i32 = let %91
+        %93:bool = neq %x_225, -1i
+        if %93 [t: $B17, f: $B18] {  # if_5
+          $B17: {  # true
+            exit_if  # if_5
+          }
+          $B18: {  # false
+            exit_loop  # loop_2
+          }
+        }
+        %94:i32 = load %index
+        %x_228:i32 = let %94
+        %96:ptr<private, BST, read_write> = access %tree, %x_228
+        %97:BST = load %96
+        %x_230:BST = let %97
+        store %currentNode, %x_230
+        %99:ptr<function, i32, read_write> = access %currentNode, 0u
+        %100:i32 = load %99
+        %x_232:i32 = let %100
+        %102:i32 = load %t
+        %x_233:i32 = let %102
+        %104:bool = eq %x_232, %x_233
+        if %104 [t: $B19] {  # if_6
+          $B19: {  # true
+            %105:i32 = load %t
+            %x_237:i32 = let %105
+            ret %x_237
+          }
+        }
+        %107:i32 = load %t
+        %x_238:i32 = let %107
+        %109:ptr<function, i32, read_write> = access %currentNode, 0u
+        %110:i32 = load %109
+        %x_240:i32 = let %110
+        %112:bool = gt %x_238, %x_240
+        if %112 [t: $B20, f: $B21] {  # if_7
+          $B20: {  # true
+            %113:ptr<function, i32, read_write> = access %currentNode, 2u
+            %114:i32 = load %113
+            %x_246:i32 = let %114
+            store %x_220, %x_246
+            exit_if  # if_7
+          }
+          $B21: {  # false
+            %116:ptr<function, i32, read_write> = access %currentNode, 1u
+            %117:i32 = load %116
+            %x_248:i32 = let %117
+            store %x_220, %x_248
+            exit_if  # if_7
+          }
+        }
+        %119:i32 = load %x_220
+        %x_249:i32 = let %119
+        store %index, %x_249
+        continue  # -> $B16
+      }
+      $B16: {  # continuing
+        next_iteration  # -> $B15
+      }
+    }
+    ret -1i
+  }
+}
+%main_1 = func():void {
+  $B22: {
+    %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
+    %count:ptr<function, i32, read_write> = var
+    %i:ptr<function, i32, read_write> = var
+    %result:ptr<function, i32, read_write> = var
+    %param_24:ptr<function, i32, read_write> = var
+    store %treeIndex_1, 0i
+    %147:ptr<private, BST, read_write> = access %tree, 0i
+    %148:BST = load %147
+    %x_84:BST = let %148
+    store %param_4, %x_84
+    store %param_5, 9i
+    %150:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param_4, %param_5
+    %151:BST = load %param_4
+    %x_86:BST = let %151
+    %153:ptr<private, BST, read_write> = access %tree, 0i
+    store %153, %x_86
+    %154:i32 = load %treeIndex_1
+    %x_88:i32 = let %154
+    %156:i32 = add %x_88, 1i
+    store %treeIndex_1, %156
+    %157:i32 = load %treeIndex_1
+    %x_90:i32 = let %157
+    store %param_6, %x_90
+    store %param_7, 5i
+    %159:void = call %insert_i1_i1_, %param_6, %param_7
+    %160:i32 = load %treeIndex_1
+    %x_92:i32 = let %160
+    %162:i32 = add %x_92, 1i
+    store %treeIndex_1, %162
+    %163:i32 = load %treeIndex_1
+    %x_94:i32 = let %163
+    store %param_8, %x_94
+    store %param_9, 12i
+    %165:void = call %insert_i1_i1_, %param_8, %param_9
+    %166:i32 = load %treeIndex_1
+    %x_96:i32 = let %166
+    %168:i32 = add %x_96, 1i
+    store %treeIndex_1, %168
+    %169:i32 = load %treeIndex_1
+    %x_98:i32 = let %169
+    store %param_10, %x_98
+    store %param_11, 15i
+    %171:void = call %insert_i1_i1_, %param_10, %param_11
+    %172:i32 = load %treeIndex_1
+    %x_100:i32 = let %172
+    %174:i32 = add %x_100, 1i
+    store %treeIndex_1, %174
+    %175:i32 = load %treeIndex_1
+    %x_102:i32 = let %175
+    store %param_12, %x_102
+    store %param_13, 7i
+    %177:void = call %insert_i1_i1_, %param_12, %param_13
+    %178:i32 = load %treeIndex_1
+    %x_104:i32 = let %178
+    %180:i32 = add %x_104, 1i
+    store %treeIndex_1, %180
+    %181:i32 = load %treeIndex_1
+    %x_106:i32 = let %181
+    store %param_14, %x_106
+    store %param_15, 8i
+    %183:void = call %insert_i1_i1_, %param_14, %param_15
+    %184:i32 = load %treeIndex_1
+    %x_108:i32 = let %184
+    %186:i32 = add %x_108, 1i
+    store %treeIndex_1, %186
+    %187:i32 = load %treeIndex_1
+    %x_110:i32 = let %187
+    store %param_16, %x_110
+    store %param_17, 2i
+    %189:void = call %insert_i1_i1_, %param_16, %param_17
+    %190:i32 = load %treeIndex_1
+    %x_112:i32 = let %190
+    %192:i32 = add %x_112, 1i
+    store %treeIndex_1, %192
+    %193:i32 = load %treeIndex_1
+    %x_114:i32 = let %193
+    store %param_18, %x_114
+    store %param_19, 6i
+    %195:void = call %insert_i1_i1_, %param_18, %param_19
+    %196:i32 = load %treeIndex_1
+    %x_116:i32 = let %196
+    %198:i32 = add %x_116, 1i
+    store %treeIndex_1, %198
+    %199:i32 = load %treeIndex_1
+    %x_118:i32 = let %199
+    store %param_20, %x_118
+    store %param_21, 17i
+    %201:void = call %insert_i1_i1_, %param_20, %param_21
+    %202:i32 = load %treeIndex_1
+    %x_120:i32 = let %202
+    %204:i32 = add %x_120, 1i
+    store %treeIndex_1, %204
+    %205:i32 = load %treeIndex_1
+    %x_122:i32 = let %205
+    store %param_22, %x_122
+    store %param_23, 13i
+    %207:void = call %insert_i1_i1_, %param_22, %param_23
+    store %count, 0i
+    store %i, 0i
+    loop [b: $B23, c: $B24] {  # loop_3
+      $B23: {  # body
+        %208:i32 = load %i
+        %x_128:i32 = let %208
+        %210:bool = lt %x_128, 20i
+        if %210 [t: $B25, f: $B26] {  # if_8
+          $B25: {  # true
+            exit_if  # if_8
+          }
+          $B26: {  # false
+            exit_loop  # loop_3
+          }
+        }
+        %211:i32 = load %i
+        %x_131:i32 = let %211
+        store %param_24, %x_131
+        %213:i32 = call %search_i1_, %param_24
+        %x_132:i32 = let %213
+        store %result, %x_132
+        %215:i32 = load %i
+        %x_133:i32 = let %215
+        switch %x_133 [c: (2i 5i 6i 7i 8i 9i 12i 13i 15i 17i, $B27), c: (default, $B28)] {  # switch_1
+          $B27: {  # case
+            %217:i32 = load %result
+            %x_143:i32 = let %217
+            %219:i32 = load %i
+            %x_144:i32 = let %219
+            %221:bool = eq %x_143, %x_144
+            if %221 [t: $B29] {  # if_9
+              $B29: {  # true
+                %222:i32 = load %count
+                %x_148:i32 = let %222
+                %224:i32 = add %x_148, 1i
+                store %count, %224
+                exit_if  # if_9
+              }
+            }
+            exit_switch  # switch_1
+          }
+          $B28: {  # case
+            %225:i32 = load %result
+            %x_137:i32 = let %225
+            %227:bool = eq %x_137, -1i
+            if %227 [t: $B30] {  # if_10
+              $B30: {  # true
+                %228:i32 = load %count
+                %x_141:i32 = let %228
+                %230:i32 = add %x_141, 1i
+                store %count, %230
+                exit_if  # if_10
+              }
+            }
+            exit_switch  # switch_1
+          }
+        }
+        continue  # -> $B24
+      }
+      $B24: {  # continuing
+        %231:i32 = load %i
+        %x_150:i32 = let %231
+        %233:i32 = add %x_150, 1i
+        store %i, %233
+        next_iteration  # -> $B23
+      }
+    }
+    %234:i32 = load %count
+    %x_152:i32 = let %234
+    %236:bool = eq %x_152, 20i
+    if %236 [t: $B31, f: $B32] {  # if_11
+      $B31: {  # true
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        exit_if  # if_11
+      }
+      $B32: {  # false
+        store %x_GLF_color, vec4<f32>(0.0f, 0.0f, 1.0f, 1.0f)
+        exit_if  # if_11
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B33: {
+    %238:void = call %main_1
+    %239:vec4<f32> = load %x_GLF_color
+    %240:main_out = construct %239
+    ret %240
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
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
index 9f4a32d..21e6e74 100644
--- 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
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: QuicksortObject = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: QuicksortObject = struct @align(4) {
   numbers:array<i32, 10> @offset(0)
 }
 
@@ -18,15 +18,15 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%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
@@ -37,24 +37,24 @@
     ret
   }
 }
-%insert_i1_i1_ = func(%treeIndex:ptr<function, i32, read_write>, %data_1:ptr<function, i32, read_write>):void -> %b3 {
-  %b3 = block {
+%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 = block {  # body
+    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 = block {  # true
+        if %22 [t: $B6, f: $B7] {  # if_1
+          $B6: {  # true
             exit_if  # if_1
           }
-          %b7 = block {  # false
+          $B7: {  # false
             exit_loop  # loop_1
           }
         }
@@ -63,157 +63,164 @@
         %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 = block {  # true
+        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 = block {  # true
-                %x_236:i32 = load %baseIndex
-                %33:ptr<private, i32, read_write> = access %tree, %x_236, 1u
-                %34:i32 = load %treeIndex
-                store %33, %34
-                %x_239:i32 = load %treeIndex
-                %36:ptr<private, BST, read_write> = access %tree, %x_239
-                %37:BST = load %36
-                store %param, %37
-                %38:i32 = load %data_1
-                store %param_1, %38
-                %39:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param, %param_1
-                %40:ptr<private, BST, read_write> = access %tree, %x_239
-                %41:BST = load %param
-                store %40, %41
+            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 = block {  # false
-                %42:i32 = load %baseIndex
-                %43:ptr<private, i32, read_write> = access %tree, %42, 1u
-                %44:i32 = load %43
-                store %baseIndex, %44
-                continue %b5
+              $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 = block {  # false
-            %45:i32 = load %baseIndex
-            %46:ptr<private, i32, read_write> = access %tree, %45, 2u
-            %47:i32 = load %46
-            %48:bool = eq %47, -1i
-            if %48 [t: %b12, f: %b13] {  # if_4
-              %b12 = block {  # true
-                %x_256:i32 = load %baseIndex
-                %50:ptr<private, i32, read_write> = access %tree, %x_256, 2u
-                %51:i32 = load %treeIndex
-                store %50, %51
-                %x_259:i32 = load %treeIndex
-                %53:ptr<private, BST, read_write> = access %tree, %x_259
-                %54:BST = load %53
-                store %param_2, %54
-                %55:i32 = load %data_1
-                store %param_3, %55
-                %56:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param_2, %param_3
+          $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 %param_2
-                store %57, %58
+                %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 = block {  # false
-                %59:i32 = load %baseIndex
-                %60:ptr<private, i32, read_write> = access %tree, %59, 2u
-                %61:i32 = load %60
-                store %baseIndex, %61
-                continue %b5
+              $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
           }
         }
-        continue %b5
+        unreachable
       }
-      %b5 = block {  # continuing
-        next_iteration %b4
+      $B5: {  # continuing
+        next_iteration  # -> $B4
       }
     }
     ret
   }
 }
-%identity_i1_ = func(%a:ptr<function, i32, read_write>):i32 -> %b14 {
-  %b14 = block {
-    %x_202:i32 = load %a
-    %65:ptr<private, i32, read_write> = access %obj, 0u, %x_202
-    %66:i32 = load %a
-    store %65, %66
-    %67:ptr<private, i32, read_write> = access %obj, 0u, 2i
-    %x_206:i32 = load %67
+%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 {
-  %b15 = block {
+%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 = block {  # body
-        %74:i32 = load %index
-        %75:bool = neq %74, -1i
-        if %75 [t: %b18, f: %b19] {  # if_5
-          %b18 = block {  # true
+    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 = block {  # false
+          $B19: {  # false
             exit_loop  # loop_2
           }
         }
-        %76:i32 = load %index
-        %77:ptr<private, BST, read_write> = access %tree, %76
-        %78:BST = load %77
-        store %currentNode, %78
-        %79:ptr<function, i32, read_write> = access %currentNode, 0u
-        %80:i32 = load %79
-        %81:i32 = load %t
-        %82:bool = eq %80, %81
-        if %82 [t: %b20] {  # if_6
-          %b20 = block {  # true
-            %x_287:i32 = load %t
+        %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
           }
         }
-        %84:i32 = load %t
-        %85:ptr<function, i32, read_write> = access %currentNode, 0u
-        %86:i32 = load %85
-        %87:bool = gt %84, %86
-        if %87 [t: %b21, f: %b22] {  # if_7
-          %b21 = block {  # true
-            %88:ptr<function, i32, read_write> = access %currentNode, 2u
-            %89:i32 = load %88
-            store %x_270, %89
+        %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 = block {  # false
-            %90:ptr<function, i32, read_write> = access %currentNode, 1u
-            %91:i32 = load %90
-            store %x_270, %91
+          $B22: {  # false
+            %97:ptr<function, i32, read_write> = access %currentNode, 1u
+            %98:i32 = load %97
+            store %x_270, %98
             exit_if  # if_7
           }
         }
-        %92:i32 = load %x_270
-        store %index, %92
-        continue %b17
+        %99:i32 = load %x_270
+        store %index, %99
+        continue  # -> $B17
       }
-      %b17 = block {  # continuing
-        next_iteration %b16
+      $B17: {  # continuing
+        next_iteration  # -> $B16
       }
     }
     ret -1i
   }
 }
-%main_1 = func():void -> %b23 {
-  %b23 = block {
+%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
@@ -244,193 +251,197 @@
     %result:ptr<function, i32, read_write> = var
     %param_25:ptr<function, i32, read_write> = var
     store %treeIndex_1, 0i
-    %123:ptr<private, BST, read_write> = access %tree, 0i
-    %124:BST = load %123
-    store %param_4, %124
+    %130:ptr<private, BST, read_write> = access %tree, 0i
+    %131:BST = load %130
+    store %param_4, %131
     store %param_5, 9i
-    %125:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param_4, %param_5
-    %126:ptr<private, BST, read_write> = access %tree, 0i
-    %127:BST = load %param_4
-    store %126, %127
-    %128:i32 = load %treeIndex_1
-    %129:i32 = add %128, 1i
-    store %treeIndex_1, %129
-    %130:i32 = load %treeIndex_1
-    store %param_6, %130
+    %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
-    %131:void = call %insert_i1_i1_, %param_6, %param_7
-    %132:i32 = load %treeIndex_1
-    %133:i32 = add %132, 1i
-    store %treeIndex_1, %133
-    %134:i32 = load %treeIndex_1
-    store %param_8, %134
+    %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
-    %135:void = call %insert_i1_i1_, %param_8, %param_9
-    %136:i32 = load %treeIndex_1
-    %137:i32 = add %136, 1i
-    store %treeIndex_1, %137
-    %138:i32 = load %treeIndex_1
-    store %param_10, %138
+    %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
-    %139:void = call %insert_i1_i1_, %param_10, %param_11
-    %140:i32 = load %treeIndex_1
-    %141:i32 = add %140, 1i
-    store %treeIndex_1, %141
-    %142:i32 = load %treeIndex_1
-    store %param_12, %142
+    %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
-    %143:void = call %insert_i1_i1_, %param_12, %param_13
-    %144:i32 = load %treeIndex_1
-    %145:i32 = add %144, 1i
-    store %treeIndex_1, %145
-    %146:i32 = load %treeIndex_1
-    store %param_14, %146
+    %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
-    %147:void = call %insert_i1_i1_, %param_14, %param_15
-    %148:i32 = load %treeIndex_1
-    %149:i32 = add %148, 1i
-    store %treeIndex_1, %149
-    %150:i32 = load %treeIndex_1
-    store %param_16, %150
+    %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
-    %151:void = call %insert_i1_i1_, %param_16, %param_17
-    %152:i32 = load %treeIndex_1
-    %153:i32 = add %152, 1i
-    store %treeIndex_1, %153
-    %154:i32 = load %treeIndex_1
-    store %param_18, %154
+    %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
-    %155:void = call %insert_i1_i1_, %param_18, %param_19
-    %156:i32 = load %treeIndex_1
-    %157:i32 = add %156, 1i
-    store %treeIndex_1, %157
-    %158:i32 = load %treeIndex_1
-    store %param_20, %158
+    %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
-    %159:void = call %insert_i1_i1_, %param_20, %param_21
-    %160:i32 = load %treeIndex_1
-    %161:i32 = add %160, 1i
-    store %treeIndex_1, %161
-    %162:i32 = load %treeIndex_1
-    store %param_22, %162
+    %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
-    %163:void = call %insert_i1_i1_, %param_22, %param_23
+    %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 = block {  # body
-        %164:i32 = load %i
-        %165:bool = lt %164, 10000i
-        if %165 [t: %b26, f: %b27] {  # if_8
-          %b26 = block {  # true
+    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 = block {  # false
+          $B27: {  # false
             exit_loop  # loop_3
           }
         }
-        %166:i32 = load %looplimiter0
-        %167:ptr<uniform, vec2<f32>, read> = access %x_50, 0u
-        %168:f32 = load_vector_element %167, 1u
-        %169:i32 = convert %168
-        %170:bool = gte %166, %169
-        if %170 [t: %b28] {  # if_9
-          %b28 = block {  # true
-            %171:ptr<uniform, vec2<f32>, read> = access %x_50, 0u
-            %172:f32 = load_vector_element %171, 1u
-            %173:i32 = convert %172
-            %174:i32 = add 1i, %173
-            store %param_24, %174
-            %x_159:i32 = call %identity_i1_, %param_24
+        %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
           }
         }
-        %176:i32 = load %looplimiter0
-        %177:i32 = add %176, 1i
-        store %looplimiter0, %177
-        continue %b25
+        %186:i32 = load %looplimiter0
+        %187:i32 = add %186, 1i
+        store %looplimiter0, %187
+        continue  # -> $B25
       }
-      %b25 = block {  # continuing
-        %178:i32 = load %i
-        %179:i32 = add %178, 1i
-        store %i, %179
-        next_iteration %b24
+      $B25: {  # continuing
+        %188:i32 = load %i
+        %189:i32 = add %188, 1i
+        store %i, %189
+        next_iteration  # -> $B24
       }
     }
-    %180:i32 = load %pp
-    %181:bool = neq %180, 2i
-    if %181 [t: %b29] {  # if_10
-      %b29 = block {  # true
+    %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 = block {  # body
-        %182:i32 = load %i_1
-        %183:bool = lt %182, 20i
-        if %183 [t: %b32, f: %b33] {  # if_11
-          %b32 = block {  # true
+    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 = block {  # false
+          $B33: {  # false
             exit_loop  # loop_4
           }
         }
-        %184:i32 = load %i_1
-        store %param_25, %184
-        %x_176:i32 = call %search_i1_, %param_25
+        %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
-        %x_177:i32 = load %i_1
-        switch %x_177 [c: (2i 5i 6i 7i 8i 9i 12i 13i 15i 17i, %b34), c: (default, %b35)] {  # switch_1
-          %b34 = block {  # case
-            %187:i32 = load %result
-            %188:i32 = load %i_1
-            %189:bool = eq %187, %188
-            if %189 [t: %b36] {  # if_12
-              %b36 = block {  # true
-                %190:i32 = load %count
-                %191:i32 = add %190, 1i
-                store %count, %191
+        %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 = block {  # case
-            %192:i32 = load %result
-            %193:bool = eq %192, -1i
-            if %193 [t: %b37] {  # if_13
-              %b37 = block {  # true
-                %194:i32 = load %count
-                %195:i32 = add %194, 1i
-                store %count, %195
+          $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
+        continue  # -> $B31
       }
-      %b31 = block {  # continuing
-        %196:i32 = load %i_1
-        %197:i32 = add %196, 1i
-        store %i_1, %197
-        next_iteration %b30
+      $B31: {  # continuing
+        %208:i32 = load %i_1
+        %209:i32 = add %208, 1i
+        store %i_1, %209
+        next_iteration  # -> $B30
       }
     }
-    %198:i32 = load %count
-    %199:bool = eq %198, 20i
-    if %199 [t: %b38, f: %b39] {  # if_14
-      %b38 = block {  # true
+    %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 = block {  # false
+      $B39: {  # false
         store %x_GLF_color, vec4<f32>(0.0f, 0.0f, 1.0f, 1.0f)
         exit_if  # if_14
       }
@@ -438,12 +449,22 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b40 {
-  %b40 = block {
-    %201:void = call %main_1
-    %202:vec4<f32> = load %x_GLF_color
-    %203:main_out = construct %202
-    ret %203
+%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
   }
 }
 
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
index 4ec7d08..488bcf2 100644
--- 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
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: QuicksortObject = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: QuicksortObject = struct @align(4) {
   numbers:array<i32, 10> @offset(0)
 }
 
@@ -18,202 +18,242 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
-    %x_208:i32 = load %data
-    %9:ptr<function, i32, read_write> = access %node, 0u
-    store %9, %x_208
-    %10:ptr<function, i32, read_write> = access %node, 1u
-    store %10, -1i
-    %11:ptr<function, i32, read_write> = access %node, 2u
+%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 {
-  %b3 = block {
+%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 = block {  # body
-        %x_217:i32 = load %baseIndex
-        %x_218:i32 = load %treeIndex
-        %22:bool = lte %x_217, %x_218
-        if %22 [t: %b6, f: %b7] {  # if_1
-          %b6 = block {  # true
+    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 = block {  # false
+          $B7: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_221:i32 = load %data_1
-        %x_222:i32 = load %baseIndex
-        %25:ptr<private, i32, read_write> = access %tree, %x_222, 0u
-        %x_224:i32 = load %25
-        %27:bool = lte %x_221, %x_224
-        if %27 [t: %b8, f: %b9] {  # if_2
-          %b8 = block {  # true
-            %x_229:i32 = load %baseIndex
-            %29:ptr<private, i32, read_write> = access %tree, %x_229, 1u
-            %x_231:i32 = load %29
-            %31:bool = eq %x_231, -1i
-            if %31 [t: %b10, f: %b11] {  # if_3
-              %b10 = block {  # true
-                %x_236:i32 = load %baseIndex
-                %x_237:i32 = load %treeIndex
-                %34:ptr<private, i32, read_write> = access %tree, %x_236, 1u
-                store %34, %x_237
-                %x_239:i32 = load %treeIndex
-                %36:ptr<private, BST, read_write> = access %tree, %x_239
-                %x_241:BST = load %36
+        %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
-                %x_242:i32 = load %data_1
+                %50:i32 = load %data_1
+                %x_242:i32 = let %50
                 store %param_1, %x_242
-                %39:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param, %param_1
-                %x_244:BST = load %param
-                %41:ptr<private, BST, read_write> = access %tree, %x_239
-                store %41, %x_244
+                %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 = block {  # false
-                %x_246:i32 = load %baseIndex
-                %43:ptr<private, i32, read_write> = access %tree, %x_246, 1u
-                %x_248:i32 = load %43
+              $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
+                continue  # -> $B5
               }
             }
             exit_if  # if_2
           }
-          %b9 = block {  # false
-            %x_249:i32 = load %baseIndex
-            %46:ptr<private, i32, read_write> = access %tree, %x_249, 2u
-            %x_251:i32 = load %46
-            %48:bool = eq %x_251, -1i
-            if %48 [t: %b12, f: %b13] {  # if_4
-              %b12 = block {  # true
-                %x_256:i32 = load %baseIndex
-                %x_257:i32 = load %treeIndex
-                %51:ptr<private, i32, read_write> = access %tree, %x_256, 2u
-                store %51, %x_257
-                %x_259:i32 = load %treeIndex
-                %53:ptr<private, BST, read_write> = access %tree, %x_259
-                %x_261:BST = load %53
+          $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
-                %x_262:i32 = load %data_1
+                %77:i32 = load %data_1
+                %x_262:i32 = let %77
                 store %param_3, %x_262
-                %56:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param_2, %param_3
-                %x_264:BST = load %param_2
-                %58:ptr<private, BST, read_write> = access %tree, %x_259
-                store %58, %x_264
+                %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 = block {  # false
-                %x_266:i32 = load %baseIndex
-                %60:ptr<private, i32, read_write> = access %tree, %x_266, 2u
-                %x_268:i32 = load %60
+              $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
+                continue  # -> $B5
               }
             }
             exit_if  # if_2
           }
         }
-        continue %b5
+        unreachable
       }
-      %b5 = block {  # continuing
-        next_iteration %b4
+      $B5: {  # continuing
+        next_iteration  # -> $B4
       }
     }
     ret
   }
 }
-%identity_i1_ = func(%a:ptr<function, i32, read_write>):i32 -> %b14 {
-  %b14 = block {
-    %x_202:i32 = load %a
-    %x_203:i32 = load %a
-    %66:ptr<private, i32, read_write> = access %obj, 0u, %x_202
-    store %66, %x_203
-    %67:ptr<private, i32, read_write> = access %obj, 0u, 2i
-    %x_206:i32 = load %67
+%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 {
-  %b15 = block {
+%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 = block {  # body
-        %x_275:i32 = load %index
-        %75:bool = neq %x_275, -1i
-        if %75 [t: %b18, f: %b19] {  # if_5
-          %b18 = block {  # true
+    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 = block {  # false
+          $B19: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_278:i32 = load %index
-        %77:ptr<private, BST, read_write> = access %tree, %x_278
-        %x_280:BST = load %77
+        %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
-        %79:ptr<function, i32, read_write> = access %currentNode, 0u
-        %x_282:i32 = load %79
-        %x_283:i32 = load %t
-        %82:bool = eq %x_282, %x_283
-        if %82 [t: %b20] {  # if_6
-          %b20 = block {  # true
-            %x_287:i32 = load %t
+        %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
           }
         }
-        %x_288:i32 = load %t
-        %85:ptr<function, i32, read_write> = access %currentNode, 0u
-        %x_290:i32 = load %85
-        %87:bool = gt %x_288, %x_290
-        if %87 [t: %b21, f: %b22] {  # if_7
-          %b21 = block {  # true
-            %88:ptr<function, i32, read_write> = access %currentNode, 2u
-            %x_296:i32 = load %88
+        %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 = block {  # false
-            %90:ptr<function, i32, read_write> = access %currentNode, 1u
-            %x_298:i32 = load %90
+          $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
           }
         }
-        %x_299:i32 = load %x_270
+        %131:i32 = load %x_270
+        %x_299:i32 = let %131
         store %index, %x_299
-        continue %b17
+        continue  # -> $B17
       }
-      %b17 = block {  # continuing
-        next_iteration %b16
+      $B17: {  # continuing
+        next_iteration  # -> $B16
       }
     }
     ret -1i
   }
 }
-%main_1 = func():void -> %b23 {
-  %b23 = block {
+%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
@@ -244,193 +284,232 @@
     %result:ptr<function, i32, read_write> = var
     %param_25:ptr<function, i32, read_write> = var
     store %treeIndex_1, 0i
-    %123:ptr<private, BST, read_write> = access %tree, 0i
-    %x_101:BST = load %123
+    %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
-    %125:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param_4, %param_5
-    %x_103:BST = load %param_4
-    %127:ptr<private, BST, read_write> = access %tree, 0i
-    store %127, %x_103
-    %x_105:i32 = load %treeIndex_1
-    %129:i32 = add %x_105, 1i
-    store %treeIndex_1, %129
-    %x_107:i32 = load %treeIndex_1
+    %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
-    %131:void = call %insert_i1_i1_, %param_6, %param_7
-    %x_109:i32 = load %treeIndex_1
-    %133:i32 = add %x_109, 1i
-    store %treeIndex_1, %133
-    %x_111:i32 = load %treeIndex_1
+    %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
-    %135:void = call %insert_i1_i1_, %param_8, %param_9
-    %x_113:i32 = load %treeIndex_1
-    %137:i32 = add %x_113, 1i
-    store %treeIndex_1, %137
-    %x_115:i32 = load %treeIndex_1
+    %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
-    %139:void = call %insert_i1_i1_, %param_10, %param_11
-    %x_117:i32 = load %treeIndex_1
-    %141:i32 = add %x_117, 1i
-    store %treeIndex_1, %141
-    %x_119:i32 = load %treeIndex_1
+    %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
-    %143:void = call %insert_i1_i1_, %param_12, %param_13
-    %x_121:i32 = load %treeIndex_1
-    %145:i32 = add %x_121, 1i
-    store %treeIndex_1, %145
-    %x_123:i32 = load %treeIndex_1
+    %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
-    %147:void = call %insert_i1_i1_, %param_14, %param_15
-    %x_125:i32 = load %treeIndex_1
-    %149:i32 = add %x_125, 1i
-    store %treeIndex_1, %149
-    %x_127:i32 = load %treeIndex_1
+    %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
-    %151:void = call %insert_i1_i1_, %param_16, %param_17
-    %x_129:i32 = load %treeIndex_1
-    %153:i32 = add %x_129, 1i
-    store %treeIndex_1, %153
-    %x_131:i32 = load %treeIndex_1
+    %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
-    %155:void = call %insert_i1_i1_, %param_18, %param_19
-    %x_133:i32 = load %treeIndex_1
-    %157:i32 = add %x_133, 1i
-    store %treeIndex_1, %157
-    %x_135:i32 = load %treeIndex_1
+    %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
-    %159:void = call %insert_i1_i1_, %param_20, %param_21
-    %x_137:i32 = load %treeIndex_1
-    %161:i32 = add %x_137, 1i
-    store %treeIndex_1, %161
-    %x_139:i32 = load %treeIndex_1
+    %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
-    %163:void = call %insert_i1_i1_, %param_22, %param_23
+    %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 = block {  # body
-        %x_145:i32 = load %i
-        %165:bool = lt %x_145, 10000i
-        if %165 [t: %b26, f: %b27] {  # if_8
-          %b26 = block {  # true
+    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 = block {  # false
+          $B27: {  # false
             exit_loop  # loop_3
           }
         }
-        %x_148:i32 = load %looplimiter0
-        %167:ptr<uniform, vec2<f32>, read> = access %x_50, 0u
-        %x_150:f32 = load_vector_element %167, 1u
-        %169:i32 = convert %x_150
-        %170:bool = gte %x_148, %169
-        if %170 [t: %b28] {  # if_9
-          %b28 = block {  # true
-            %171:ptr<uniform, vec2<f32>, read> = access %x_50, 0u
-            %x_156:f32 = load_vector_element %171, 1u
-            %173:i32 = convert %x_156
-            %174:i32 = add 1i, %173
-            store %param_24, %174
-            %x_159:i32 = call %identity_i1_, %param_24
+        %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
           }
         }
-        %x_160:i32 = load %looplimiter0
-        %177:i32 = add %x_160, 1i
-        store %looplimiter0, %177
-        continue %b25
+        %242:i32 = load %looplimiter0
+        %x_160:i32 = let %242
+        %244:i32 = add %x_160, 1i
+        store %looplimiter0, %244
+        continue  # -> $B25
       }
-      %b25 = block {  # continuing
-        %x_162:i32 = load %i
-        %179:i32 = add %x_162, 1i
-        store %i, %179
-        next_iteration %b24
+      $B25: {  # continuing
+        %245:i32 = load %i
+        %x_162:i32 = let %245
+        %247:i32 = add %x_162, 1i
+        store %i, %247
+        next_iteration  # -> $B24
       }
     }
-    %x_164:i32 = load %pp
-    %181:bool = neq %x_164, 2i
-    if %181 [t: %b29] {  # if_10
-      %b29 = block {  # true
+    %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 = block {  # body
-        %x_172:i32 = load %i_1
-        %183:bool = lt %x_172, 20i
-        if %183 [t: %b32, f: %b33] {  # if_11
-          %b32 = block {  # true
+    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 = block {  # false
+          $B33: {  # false
             exit_loop  # loop_4
           }
         }
-        %x_175:i32 = load %i_1
+        %254:i32 = load %i_1
+        %x_175:i32 = let %254
         store %param_25, %x_175
-        %x_176:i32 = call %search_i1_, %param_25
+        %256:i32 = call %search_i1_, %param_25
+        %x_176:i32 = let %256
         store %result, %x_176
-        %x_177:i32 = load %i_1
-        switch %x_177 [c: (2i 5i 6i 7i 8i 9i 12i 13i 15i 17i, %b34), c: (default, %b35)] {  # switch_1
-          %b34 = block {  # case
-            %x_187:i32 = load %result
-            %x_188:i32 = load %i_1
-            %189:bool = eq %x_187, %x_188
-            if %189 [t: %b36] {  # if_12
-              %b36 = block {  # true
-                %x_192:i32 = load %count
-                %191:i32 = add %x_192, 1i
-                store %count, %191
+        %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 = block {  # case
-            %x_181:i32 = load %result
-            %193:bool = eq %x_181, -1i
-            if %193 [t: %b37] {  # if_13
-              %b37 = block {  # true
-                %x_185:i32 = load %count
-                %195:i32 = add %x_185, 1i
-                store %count, %195
+          $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
+        continue  # -> $B31
       }
-      %b31 = block {  # continuing
-        %x_194:i32 = load %i_1
-        %197:i32 = add %x_194, 1i
-        store %i_1, %197
-        next_iteration %b30
+      $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
       }
     }
-    %x_196:i32 = load %count
-    %199:bool = eq %x_196, 20i
-    if %199 [t: %b38, f: %b39] {  # if_14
-      %b38 = block {  # true
+    %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 = block {  # false
+      $B39: {  # false
         store %x_GLF_color, vec4<f32>(0.0f, 0.0f, 1.0f, 1.0f)
         exit_if  # if_14
       }
@@ -438,12 +517,22 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b40 {
-  %b40 = block {
-    %201:void = call %main_1
-    %202:vec4<f32> = load %x_GLF_color
-    %203:main_out = construct %202
-    ret %203
+%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
   }
 }
 
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
index 174cad0..c3c1389 100644
--- 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
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,100 +8,140 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%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 = block {  # body
+    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 = block {  # true
+        if %8 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $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 = block {  # true
+        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 = block {  # false
+          $B8: {  # false
             %15:i32 = load %v
-            %16:i32 = div %15, 2i
+            %16:i32 = call %tint_div_i32, %15, 2i
             store %v, %16
             exit_if  # if_2
           }
         }
-        %17:i32 = load %count
-        %18:i32 = add %17, 1i
-        store %count, %18
-        continue %b4
+        %18:i32 = load %count
+        %19:i32 = add %18, 1i
+        store %count, %19
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
-    %x_105:i32 = load %count
+    %20:i32 = load %count
+    %x_105:i32 = let %20
     ret %x_105
   }
 }
-%main_1 = func():void -> %b9 {
-  %b9 = block {
+%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
-    %25:vec4<f32> = load %gl_FragCoord
-    %26:vec2<f32> = swizzle %25, xy
-    %27:ptr<uniform, vec2<f32>, read> = access %x_10, 0u
-    %28:vec2<f32> = load %27
-    %29:vec2<f32> = div %26, %28
-    store %lin, %29
-    %30:vec2<f32> = load %lin
-    %31:vec2<f32> = mul %30, 8.0f
-    %32:vec2<f32> = floor %31
-    store %lin, %32
-    %33:f32 = load_vector_element %lin, 0u
-    %34:i32 = convert %33
-    %35:i32 = mul %34, 8i
-    %36:f32 = load_vector_element %lin, 1u
-    %37:i32 = convert %36
-    %38:i32 = add %35, %37
-    store %v_1, %38
-    %39:i32 = load %v_1
-    store %param, %39
-    %x_80:i32 = call %collatz_i1_, %param
+    %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))
-    %41:i32 = mod %x_80, 16i
-    %42:ptr<function, vec4<f32>, read_write> = access %indexable, %41
-    %43:vec4<f32> = load %42
-    store %x_GLF_color, %43
+    %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 {
-  %b10 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B10: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %46:void = call %main_1
-    %47:vec4<f32> = load %x_GLF_color
-    %48:main_out = construct %47
-    ret %48
+    %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
   }
 }
 
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
index e20a179..53042c0 100644
--- 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
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,102 +8,154 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%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 = block {  # body
-        %x_89:i32 = load %v
-        %8:bool = gt %x_89, 1i
-        if %8 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    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 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_92:i32 = load %v
-        %10:i32 = and %x_92, 1i
-        %11:bool = eq %10, 1i
-        if %11 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
-            %x_98:i32 = load %v
-            %13:i32 = mul 3i, %x_98
-            %14:i32 = add %13, 1i
-            store %v, %14
+        %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 = block {  # false
-            %x_101:i32 = load %v
-            %16:i32 = div %x_101, 2i
-            store %v, %16
+          $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
           }
         }
-        %x_103:i32 = load %count
-        %18:i32 = add %x_103, 1i
-        store %count, %18
-        continue %b4
+        %22:i32 = load %count
+        %x_103:i32 = let %22
+        %24:i32 = add %x_103, 1i
+        store %count, %24
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
-    %x_105:i32 = load %count
+    %25:i32 = load %count
+    %x_105:i32 = let %25
     ret %x_105
   }
 }
-%main_1 = func():void -> %b9 {
-  %b9 = block {
+%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
-    %x_63:vec4<f32> = load %gl_FragCoord
-    %26:ptr<uniform, vec2<f32>, read> = access %x_10, 0u
-    %x_66:vec2<f32> = load %26
-    %28:f32 = access %x_63, 0u
-    %29:f32 = access %x_63, 1u
-    %30:vec2<f32> = construct %28, %29
-    %31:vec2<f32> = div %30, %x_66
-    store %lin, %31
-    %x_68:vec2<f32> = load %lin
-    %33:vec2<f32> = mul %x_68, 8.0f
-    %34:vec2<f32> = floor %33
-    store %lin, %34
-    %x_72:f32 = load_vector_element %lin, 0u
-    %x_76:f32 = load_vector_element %lin, 1u
-    %37:i32 = convert %x_72
-    %38:i32 = mul %37, 8i
-    %39:i32 = convert %x_76
-    %40:i32 = add %38, %39
-    store %v_1, %40
-    %x_79:i32 = load %v_1
+    %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
-    %x_80:i32 = call %collatz_i1_, %param
+    %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))
-    %43:i32 = mod %x_80, 16i
-    %44:ptr<function, vec4<f32>, read_write> = access %indexable, %43
-    %x_83:vec4<f32> = load %44
+    %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 {
-  %b10 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B10: {
     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
+    %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
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-double-always-false-discard/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-double-always-false-discard/1.spvasm.expected.ir.msl
index 43dc852..16f1283 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-double-always-false-discard/1.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-double-always-false-discard/1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf1 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf1 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -12,15 +12,16 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_9:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %c:ptr<function, vec3<f32>, read_write> = var
     %x_54:ptr<function, f32, read_write> = var
     %x_58:ptr<function, f32, read_write> = var
@@ -35,125 +36,129 @@
     %x_139:ptr<function, f32, read_write> = var
     %x_146:ptr<function, i32, read_write> = var
     store %c, vec3<f32>(7.0f, 8.0f, 9.0f)
-    %19:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
-    %20:f32 = load_vector_element %19, 0u
-    %21:f32 = mul %20, 0.125f
-    %x_52:f32 = round %21
-    %23:f32 = load_vector_element %gl_FragCoord, 0u
-    store %x_54, %23
-    switch 0u [c: (default, %b3)] {  # switch_1
-      %b3 = block {  # case
+    %20:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
+    %21:f32 = load_vector_element %20, 0u
+    %22:f32 = mul %21, 0.125f
+    %23:f32 = round %22
+    %x_52:f32 = let %23
+    %25:f32 = load_vector_element %gl_FragCoord, 0u
+    store %x_54, %25
+    switch 0u [c: (default, $B3)] {  # switch_1
+      $B3: {  # case
         store %x_58, -0.5f
         store %x_61, 1i
-        loop [b: %b4, c: %b5] {  # loop_1
-          %b4 = block {  # body
+        loop [b: $B4, c: $B5] {  # loop_1
+          $B4: {  # body
             %x_71:ptr<function, f32, read_write> = var
             %x_79:ptr<function, f32, read_write> = var
             %x_62:ptr<function, i32, read_write> = var
             store %x_91, 0.0f
-            %27:f32 = load %x_58
-            store %x_92, %27
+            %29:f32 = load %x_58
+            store %x_92, %29
             store %x_93, false
-            %28:i32 = load %x_61
-            %29:bool = lt %28, 800i
-            if %29 [t: %b6, f: %b7] {  # if_1
-              %b6 = block {  # true
+            %30:i32 = load %x_61
+            %31:bool = lt %30, 800i
+            if %31 [t: $B6, f: $B7] {  # if_1
+              $B6: {  # true
                 exit_if  # if_1
               }
-              %b7 = block {  # false
+              $B7: {  # false
                 exit_loop  # loop_1
               }
             }
             %x_78:ptr<function, f32, read_write> = var
-            %31:i32 = load %x_61
-            %32:i32 = mod %31, 32i
-            %33:bool = eq %32, 0i
-            if %33 [t: %b8, f: %b9] {  # if_2
-              %b8 = block {  # true
-                %34:f32 = load %x_58
-                %35:f32 = add %34, 0.40000000596046447754f
-                store %x_71, %35
-                %36:f32 = load %x_71
-                store %x_59, %36
+            %33:i32 = load %x_61
+            %34:i32 = call %tint_mod_i32, %33, 32i
+            %36:bool = eq %34, 0i
+            if %36 [t: $B8, f: $B9] {  # if_2
+              $B8: {  # true
+                %37:f32 = load %x_58
+                %38:f32 = add %37, 0.40000000596046447754f
+                store %x_71, %38
+                %39:f32 = load %x_71
+                store %x_59, %39
                 exit_if  # if_2
               }
-              %b9 = block {  # false
-                %37:f32 = load %x_58
-                store %x_79, %37
-                %38:i32 = load %x_61
-                %39:f32 = convert %38
-                %40:f32 = round %x_52
+              $B9: {  # false
+                %40:f32 = load %x_58
+                store %x_79, %40
                 %41:i32 = load %x_61
                 %42:f32 = convert %41
-                %43:f32 = round %x_52
-                %44:f32 = div %42, %43
-                %45:f32 = floor %44
-                %46:f32 = mul %40, %45
-                %47:f32 = sub %39, %46
-                %48:bool = lte %47, 0.00999999977648258209f
-                if %48 [t: %b10] {  # if_3
-                  %b10 = block {  # true
-                    %49:f32 = load %x_58
-                    %50:f32 = add %49, 100.0f
-                    store %x_78, %50
-                    %51:f32 = load %x_78
-                    store %x_79, %51
+                %43:f32 = let %42
+                %44:f32 = round %x_52
+                %45:f32 = let %44
+                %46:i32 = load %x_61
+                %47:f32 = convert %46
+                %48:f32 = let %47
+                %49:f32 = round %x_52
+                %50:f32 = div %48, %49
+                %51:f32 = floor %50
+                %52:f32 = mul %45, %51
+                %53:f32 = sub %43, %52
+                %54:bool = lte %53, 0.00999999977648258209f
+                if %54 [t: $B10] {  # if_3
+                  $B10: {  # true
+                    %55:f32 = load %x_58
+                    %56:f32 = add %55, 100.0f
+                    store %x_78, %56
+                    %57:f32 = load %x_78
+                    store %x_79, %57
                     exit_if  # if_3
                   }
                 }
-                %52:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-                %53:f32 = load_vector_element %52, 0u
-                %54:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-                %55:f32 = load_vector_element %54, 1u
-                %56:bool = gt %53, %55
-                if %56 [t: %b11] {  # if_4
-                  %b11 = block {  # true
-                    discard
+                %58:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
+                %59:f32 = load_vector_element %58, 0u
+                %60:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
+                %61:f32 = load_vector_element %60, 1u
+                %62:bool = gt %59, %61
+                if %62 [t: $B11] {  # if_4
+                  $B11: {  # true
+                    store %continue_execution, false
                     exit_if  # if_4
                   }
                 }
-                %57:f32 = load %x_79
-                store %x_59, %57
+                %63:f32 = load %x_79
+                store %x_59, %63
                 exit_if  # if_2
               }
             }
-            %58:i32 = load %x_61
-            %59:f32 = convert %58
-            %60:f32 = load %x_54
-            %61:bool = gte %59, %60
-            if %61 [t: %b12] {  # if_5
-              %b12 = block {  # true
-                %62:f32 = load %x_59
-                store %x_91, %62
-                %63:f32 = load %x_59
-                store %x_92, %63
+            %64:i32 = load %x_61
+            %65:f32 = convert %64
+            %66:f32 = load %x_54
+            %67:bool = gte %65, %66
+            if %67 [t: $B12] {  # if_5
+              $B12: {  # true
+                %68:f32 = load %x_59
+                store %x_91, %68
+                %69:f32 = load %x_59
+                store %x_92, %69
                 store %x_93, true
                 exit_loop  # loop_1
               }
             }
-            continue %b5
+            continue  # -> $B5
           }
-          %b5 = block {  # continuing
-            %64:i32 = load %x_61
-            %65:i32 = add %64, 1i
-            store %x_62, %65
-            %66:f32 = load %x_59
-            store %x_58, %66
-            %67:i32 = load %x_62
-            store %x_61, %67
-            next_iteration %b4
+          $B5: {  # continuing
+            %70:i32 = load %x_61
+            %71:i32 = add %70, 1i
+            store %x_62, %71
+            %72:f32 = load %x_59
+            store %x_58, %72
+            %73:i32 = load %x_62
+            store %x_61, %73
+            next_iteration  # -> $B4
           }
         }
-        %68:f32 = load %x_91
-        store %x_95, %68
-        %69:bool = load %x_93
-        if %69 [t: %b13] {  # if_6
-          %b13 = block {  # true
+        %74:f32 = load %x_91
+        store %x_95, %74
+        %75:bool = load %x_93
+        if %75 [t: $B13] {  # if_6
+          $B13: {  # true
             exit_switch  # switch_1
           }
         }
-        %70:f32 = load %x_92
-        store %x_95, %70
+        %76:f32 = load %x_92
+        store %x_95, %76
         exit_switch  # switch_1
       }
     }
@@ -162,201 +167,227 @@
     %x_105:ptr<function, i32, read_write> = var
     %x_103:ptr<function, f32, read_write> = var
     %x_137:ptr<function, bool, read_write> = var
-    %76:f32 = load %x_95
-    store_vector_element %c, 0u, %76
-    %77:f32 = load_vector_element %gl_FragCoord, 1u
-    store %x_98, %77
-    switch 0u [c: (default, %b14)] {  # switch_2
-      %b14 = block {  # case
+    %82:f32 = load %x_95
+    store_vector_element %c, 0u, %82
+    %83:f32 = load_vector_element %gl_FragCoord, 1u
+    store %x_98, %83
+    switch 0u [c: (default, $B14)] {  # switch_2
+      $B14: {  # case
         store %x_102, -0.5f
         store %x_105, 1i
-        loop [b: %b15, c: %b16] {  # loop_2
-          %b15 = block {  # body
+        loop [b: $B15, c: $B16] {  # loop_2
+          $B15: {  # body
             %x_115:ptr<function, f32, read_write> = var
             %x_123:ptr<function, f32, read_write> = var
             %x_106:ptr<function, i32, read_write> = var
             store %x_135, 0.0f
-            %81:f32 = load %x_102
-            store %x_136, %81
+            %87:f32 = load %x_102
+            store %x_136, %87
             store %x_137, false
-            %82:i32 = load %x_105
-            %83:bool = lt %82, 800i
-            if %83 [t: %b17, f: %b18] {  # if_7
-              %b17 = block {  # true
+            %88:i32 = load %x_105
+            %89:bool = lt %88, 800i
+            if %89 [t: $B17, f: $B18] {  # if_7
+              $B17: {  # true
                 exit_if  # if_7
               }
-              %b18 = block {  # false
+              $B18: {  # false
                 exit_loop  # loop_2
               }
             }
             %x_122:ptr<function, f32, read_write> = var
-            %85:i32 = load %x_105
-            %86:i32 = mod %85, 32i
-            %87:bool = eq %86, 0i
-            if %87 [t: %b19, f: %b20] {  # if_8
-              %b19 = block {  # true
-                %88:f32 = load %x_102
-                %89:f32 = add %88, 0.40000000596046447754f
-                store %x_115, %89
-                %90:f32 = load %x_115
-                store %x_103, %90
+            %91:i32 = load %x_105
+            %92:i32 = call %tint_mod_i32, %91, 32i
+            %93:bool = eq %92, 0i
+            if %93 [t: $B19, f: $B20] {  # if_8
+              $B19: {  # true
+                %94:f32 = load %x_102
+                %95:f32 = add %94, 0.40000000596046447754f
+                store %x_115, %95
+                %96:f32 = load %x_115
+                store %x_103, %96
                 exit_if  # if_8
               }
-              %b20 = block {  # false
-                %91:f32 = load %x_102
-                store %x_123, %91
-                %92:i32 = load %x_105
-                %93:f32 = convert %92
-                %94:f32 = round %x_52
-                %95:i32 = load %x_105
-                %96:f32 = convert %95
-                %97:f32 = round %x_52
-                %98:f32 = div %96, %97
-                %99:f32 = floor %98
-                %100:f32 = mul %94, %99
-                %101:f32 = sub %93, %100
-                %102:bool = lte %101, 0.00999999977648258209f
-                if %102 [t: %b21] {  # if_9
-                  %b21 = block {  # true
-                    %103:f32 = load %x_102
-                    %104:f32 = add %103, 100.0f
-                    store %x_122, %104
-                    %105:f32 = load %x_122
-                    store %x_123, %105
+              $B20: {  # false
+                %97:f32 = load %x_102
+                store %x_123, %97
+                %98:i32 = load %x_105
+                %99:f32 = convert %98
+                %100:f32 = let %99
+                %101:f32 = round %x_52
+                %102:f32 = let %101
+                %103:i32 = load %x_105
+                %104:f32 = convert %103
+                %105:f32 = let %104
+                %106:f32 = round %x_52
+                %107:f32 = div %105, %106
+                %108:f32 = floor %107
+                %109:f32 = mul %102, %108
+                %110:f32 = sub %100, %109
+                %111:bool = lte %110, 0.00999999977648258209f
+                if %111 [t: $B21] {  # if_9
+                  $B21: {  # true
+                    %112:f32 = load %x_102
+                    %113:f32 = add %112, 100.0f
+                    store %x_122, %113
+                    %114:f32 = load %x_122
+                    store %x_123, %114
                     exit_if  # if_9
                   }
                 }
-                %106:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-                %107:f32 = load_vector_element %106, 0u
-                %108:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-                %109:f32 = load_vector_element %108, 1u
-                %110:bool = gt %107, %109
-                if %110 [t: %b22] {  # if_10
-                  %b22 = block {  # true
-                    discard
+                %115:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
+                %116:f32 = load_vector_element %115, 0u
+                %117:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
+                %118:f32 = load_vector_element %117, 1u
+                %119:bool = gt %116, %118
+                if %119 [t: $B22] {  # if_10
+                  $B22: {  # true
+                    store %continue_execution, false
                     exit_if  # if_10
                   }
                 }
-                %111:f32 = load %x_123
-                store %x_103, %111
+                %120:f32 = load %x_123
+                store %x_103, %120
                 exit_if  # if_8
               }
             }
-            %112:i32 = load %x_105
-            %113:f32 = convert %112
-            %114:f32 = load %x_98
-            %115:bool = gte %113, %114
-            if %115 [t: %b23] {  # if_11
-              %b23 = block {  # true
-                %116:f32 = load %x_103
-                store %x_135, %116
-                %117:f32 = load %x_103
-                store %x_136, %117
+            %121:i32 = load %x_105
+            %122:f32 = convert %121
+            %123:f32 = load %x_98
+            %124:bool = gte %122, %123
+            if %124 [t: $B23] {  # if_11
+              $B23: {  # true
+                %125:f32 = load %x_103
+                store %x_135, %125
+                %126:f32 = load %x_103
+                store %x_136, %126
                 store %x_137, true
                 exit_loop  # loop_2
               }
             }
-            continue %b16
+            continue  # -> $B16
           }
-          %b16 = block {  # continuing
-            %118:i32 = load %x_105
-            %119:i32 = add %118, 1i
-            store %x_106, %119
-            %120:f32 = load %x_103
-            store %x_102, %120
-            %121:i32 = load %x_106
-            store %x_105, %121
-            next_iteration %b15
+          $B16: {  # continuing
+            %127:i32 = load %x_105
+            %128:i32 = add %127, 1i
+            store %x_106, %128
+            %129:f32 = load %x_103
+            store %x_102, %129
+            %130:i32 = load %x_106
+            store %x_105, %130
+            next_iteration  # -> $B15
           }
         }
-        %122:f32 = load %x_135
-        store %x_139, %122
-        %123:bool = load %x_137
-        if %123 [t: %b24] {  # if_12
-          %b24 = block {  # true
+        %131:f32 = load %x_135
+        store %x_139, %131
+        %132:bool = load %x_137
+        if %132 [t: $B24] {  # if_12
+          $B24: {  # true
             exit_switch  # switch_2
           }
         }
-        %124:f32 = load %x_136
-        store %x_139, %124
+        %133:f32 = load %x_136
+        store %x_139, %133
         exit_switch  # switch_2
       }
     }
-    %125:f32 = load %x_139
-    store_vector_element %c, 1u, %125
-    %126:f32 = load_vector_element %c, 0u
-    %127:f32 = load_vector_element %c, 1u
-    %128:f32 = add %126, %127
-    store_vector_element %c, 2u, %128
+    %134:f32 = load %x_139
+    store_vector_element %c, 1u, %134
+    %135:f32 = load_vector_element %c, 0u
+    %136:f32 = load_vector_element %c, 1u
+    %137:f32 = add %135, %136
+    store_vector_element %c, 2u, %137
     store %x_146, 0i
-    loop [b: %b25, c: %b26] {  # loop_3
-      %b25 = block {  # body
+    loop [b: $B25, c: $B26] {  # loop_3
+      $B25: {  # body
         %x_147:ptr<function, i32, read_write> = var
-        %130:i32 = load %x_146
-        %131:bool = lt %130, 3i
-        if %131 [t: %b27, f: %b28] {  # if_13
-          %b27 = block {  # true
+        %139:i32 = load %x_146
+        %140:bool = lt %139, 3i
+        if %140 [t: $B27, f: $B28] {  # if_13
+          $B27: {  # true
             exit_if  # if_13
           }
-          %b28 = block {  # false
+          $B28: {  # false
             exit_loop  # loop_3
           }
         }
-        %132:i32 = load %x_146
-        %133:f32 = load_vector_element %c, %132
-        %134:bool = gte %133, 1.0f
-        if %134 [t: %b29] {  # if_14
-          %b29 = block {  # true
-            %135:i32 = load %x_146
-            %136:i32 = load %x_146
-            %137:f32 = load_vector_element %c, %136
-            %138:i32 = load %x_146
-            %139:f32 = load_vector_element %c, %138
-            %140:f32 = mul %137, %139
-            store_vector_element %c, %135, %140
-            %141:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-            %142:f32 = load_vector_element %141, 0u
-            %143:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-            %144:f32 = load_vector_element %143, 1u
-            %145:bool = gt %142, %144
-            if %145 [t: %b30] {  # if_15
-              %b30 = block {  # true
-                discard
+        %141:i32 = load %x_146
+        %142:f32 = load_vector_element %c, %141
+        %143:bool = gte %142, 1.0f
+        if %143 [t: $B29] {  # if_14
+          $B29: {  # true
+            %144:i32 = load %x_146
+            %145:i32 = load %x_146
+            %146:f32 = load_vector_element %c, %145
+            %147:i32 = load %x_146
+            %148:f32 = load_vector_element %c, %147
+            %149:f32 = mul %146, %148
+            store_vector_element %c, %144, %149
+            %150:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
+            %151:f32 = load_vector_element %150, 0u
+            %152:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
+            %153:f32 = load_vector_element %152, 1u
+            %154:bool = gt %151, %153
+            if %154 [t: $B30] {  # if_15
+              $B30: {  # true
+                store %continue_execution, false
                 exit_if  # if_15
               }
             }
             exit_if  # if_14
           }
         }
-        continue %b26
+        continue  # -> $B26
       }
-      %b26 = block {  # continuing
-        %146:i32 = load %x_146
-        %147:i32 = add %146, 1i
-        store %x_147, %147
-        %148:i32 = load %x_147
-        store %x_146, %148
-        next_iteration %b25
+      $B26: {  # continuing
+        %155:i32 = load %x_146
+        %156:i32 = add %155, 1i
+        store %x_147, %156
+        %157:i32 = load %x_147
+        store %x_146, %157
+        next_iteration  # -> $B25
       }
     }
-    %149:vec3<f32> = load %c
-    %150:vec3<f32> = abs %149
-    %x_169:vec3<f32> = normalize %150
-    %152:f32 = access %x_169, 0u
-    %153:f32 = access %x_169, 1u
-    %154:f32 = access %x_169, 2u
-    %155:vec4<f32> = construct %152, %153, %154, 1.0f
-    store %x_GLF_color, %155
+    %158:vec3<f32> = load %c
+    %159:vec3<f32> = abs %158
+    %160:vec3<f32> = normalize %159
+    %x_169:vec3<f32> = let %160
+    %162:f32 = access %x_169, 0u
+    %163:f32 = access %x_169, 1u
+    %164:f32 = access %x_169, 2u
+    %165:vec4<f32> = construct %162, %163, %164, 1.0f
+    store %x_GLF_color, %165
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b31 {
-  %b31 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B31: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %158:void = call %main_1
-    %159:vec4<f32> = load %x_GLF_color
-    %160:main_out = construct %159
-    ret %160
+    %168:void = call %main_1
+    %169:vec4<f32> = load %x_GLF_color
+    %170:main_out = construct %169
+    %171:bool = load %continue_execution
+    %172:bool = eq %171, false
+    if %172 [t: $B32] {  # if_16
+      $B32: {  # true
+        terminate_invocation
+      }
+    }
+    ret %170
+  }
+}
+%tint_mod_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B33: {
+    %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
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-double-always-false-discard/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-double-always-false-discard/1.wgsl.expected.ir.msl
index c81aa1c..ddd5f32 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-double-always-false-discard/1.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-double-always-false-discard/1.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf1 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf1 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -12,15 +12,16 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_9:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %c:ptr<function, vec3<f32>, read_write> = var
     %x_54:ptr<function, f32, read_write> = var
     %x_58:ptr<function, f32, read_write> = var
@@ -38,132 +39,141 @@
     %x_139_phi:ptr<function, f32, read_write> = var
     %x_146_phi:ptr<function, i32, read_write> = var
     store %c, vec3<f32>(7.0f, 8.0f, 9.0f)
-    %22:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
-    %x_50:f32 = load_vector_element %22, 0u
-    %24:f32 = mul %x_50, 0.125f
-    %x_52:f32 = round %24
-    %26:f32 = load_vector_element %gl_FragCoord, 0u
-    store %x_54, %26
-    switch 0u [c: (default, %b3)] {  # switch_1
-      %b3 = block {  # case
+    %23:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
+    %24:f32 = load_vector_element %23, 0u
+    %x_50:f32 = let %24
+    %26:f32 = mul %x_50, 0.125f
+    %27:f32 = round %26
+    %x_52:f32 = let %27
+    %29:f32 = load_vector_element %gl_FragCoord, 0u
+    store %x_54, %29
+    switch 0u [c: (default, $B3)] {  # switch_1
+      $B3: {  # case
         store %x_58_phi, -0.5f
         store %x_61_phi, 1i
-        loop [b: %b4, c: %b5] {  # loop_1
-          %b4 = block {  # body
+        loop [b: $B4, c: $B5] {  # loop_1
+          $B4: {  # body
             %x_71:ptr<function, f32, read_write> = var
             %x_79:ptr<function, f32, read_write> = var
             %x_62:ptr<function, i32, read_write> = var
             %x_59_phi:ptr<function, f32, read_write> = var
-            %31:f32 = load %x_58_phi
-            store %x_58, %31
-            %x_61:i32 = load %x_61_phi
+            %34:f32 = load %x_58_phi
+            store %x_58, %34
+            %35:i32 = load %x_61_phi
+            %x_61:i32 = let %35
             store %x_91_phi, 0.0f
-            %33:f32 = load %x_58
-            store %x_92_phi, %33
+            %37:f32 = load %x_58
+            store %x_92_phi, %37
             store %x_93_phi, false
-            %34:bool = lt %x_61, 800i
-            if %34 [t: %b6, f: %b7] {  # if_1
-              %b6 = block {  # true
+            %38:bool = lt %x_61, 800i
+            if %38 [t: $B6, f: $B7] {  # if_1
+              $B6: {  # true
                 exit_if  # if_1
               }
-              %b7 = block {  # false
+              $B7: {  # false
                 exit_loop  # loop_1
               }
             }
             %x_78:ptr<function, f32, read_write> = var
             %x_79_phi:ptr<function, f32, read_write> = var
-            %37:i32 = mod %x_61, 32i
-            %38:bool = eq %37, 0i
-            if %38 [t: %b8, f: %b9] {  # if_2
-              %b8 = block {  # true
-                %39:f32 = load %x_58
-                %40:f32 = add %39, 0.40000000596046447754f
-                store %x_71, %40
-                %41:f32 = load %x_71
-                store %x_59_phi, %41
+            %41:i32 = call %tint_mod_i32, %x_61, 32i
+            %43:bool = eq %41, 0i
+            if %43 [t: $B8, f: $B9] {  # if_2
+              $B8: {  # true
+                %44:f32 = load %x_58
+                %45:f32 = add %44, 0.40000000596046447754f
+                store %x_71, %45
+                %46:f32 = load %x_71
+                store %x_59_phi, %46
                 exit_if  # if_2
               }
-              %b9 = block {  # false
-                %42:f32 = load %x_58
-                store %x_79_phi, %42
-                %43:f32 = convert %x_61
-                %44:f32 = round %x_52
-                %45:f32 = convert %x_61
-                %46:f32 = round %x_52
-                %47:f32 = div %45, %46
-                %48:f32 = floor %47
-                %49:f32 = mul %44, %48
-                %50:f32 = sub %43, %49
-                %51:bool = lte %50, 0.00999999977648258209f
-                if %51 [t: %b10] {  # if_3
-                  %b10 = block {  # true
-                    %52:f32 = load %x_58
-                    %53:f32 = add %52, 100.0f
-                    store %x_78, %53
-                    %54:f32 = load %x_78
-                    store %x_79_phi, %54
+              $B9: {  # false
+                %47:f32 = load %x_58
+                store %x_79_phi, %47
+                %48:f32 = convert %x_61
+                %49:f32 = let %48
+                %50:f32 = round %x_52
+                %51:f32 = let %50
+                %52:f32 = convert %x_61
+                %53:f32 = let %52
+                %54:f32 = round %x_52
+                %55:f32 = div %53, %54
+                %56:f32 = floor %55
+                %57:f32 = mul %51, %56
+                %58:f32 = sub %49, %57
+                %59:bool = lte %58, 0.00999999977648258209f
+                if %59 [t: $B10] {  # if_3
+                  $B10: {  # true
+                    %60:f32 = load %x_58
+                    %61:f32 = add %60, 100.0f
+                    store %x_78, %61
+                    %62:f32 = load %x_78
+                    store %x_79_phi, %62
                     exit_if  # if_3
                   }
                 }
-                %55:f32 = load %x_79_phi
-                store %x_79, %55
-                %56:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-                %x_81:f32 = load_vector_element %56, 0u
-                %58:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-                %x_83:f32 = load_vector_element %58, 1u
-                %60:bool = gt %x_81, %x_83
-                if %60 [t: %b11] {  # if_4
-                  %b11 = block {  # true
-                    discard
+                %63:f32 = load %x_79_phi
+                store %x_79, %63
+                %64:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
+                %65:f32 = load_vector_element %64, 0u
+                %x_81:f32 = let %65
+                %67:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
+                %68:f32 = load_vector_element %67, 1u
+                %x_83:f32 = let %68
+                %70:bool = gt %x_81, %x_83
+                if %70 [t: $B11] {  # if_4
+                  $B11: {  # true
+                    store %continue_execution, false
                     exit_if  # if_4
                   }
                 }
-                %61:f32 = load %x_79
-                store %x_59_phi, %61
+                %71:f32 = load %x_79
+                store %x_59_phi, %71
                 exit_if  # if_2
               }
             }
-            %62:f32 = load %x_59_phi
-            store %x_59, %62
-            %63:f32 = convert %x_61
-            %64:f32 = load %x_54
-            %65:bool = gte %63, %64
-            if %65 [t: %b12] {  # if_5
-              %b12 = block {  # true
-                %66:f32 = load %x_59
-                store %x_91_phi, %66
-                %67:f32 = load %x_59
-                store %x_92_phi, %67
+            %72:f32 = load %x_59_phi
+            store %x_59, %72
+            %73:f32 = convert %x_61
+            %74:f32 = load %x_54
+            %75:bool = gte %73, %74
+            if %75 [t: $B12] {  # if_5
+              $B12: {  # true
+                %76:f32 = load %x_59
+                store %x_91_phi, %76
+                %77:f32 = load %x_59
+                store %x_92_phi, %77
                 store %x_93_phi, true
                 exit_loop  # loop_1
               }
             }
-            continue %b5
+            continue  # -> $B5
           }
-          %b5 = block {  # continuing
-            %68:i32 = add %x_61, 1i
-            store %x_62, %68
-            %69:f32 = load %x_59
-            store %x_58_phi, %69
-            %70:i32 = load %x_62
-            store %x_61_phi, %70
-            next_iteration %b4
+          $B5: {  # continuing
+            %78:i32 = add %x_61, 1i
+            store %x_62, %78
+            %79:f32 = load %x_59
+            store %x_58_phi, %79
+            %80:i32 = load %x_62
+            store %x_61_phi, %80
+            next_iteration  # -> $B4
           }
         }
-        %71:f32 = load %x_91_phi
-        store %x_91, %71
-        %72:f32 = load %x_92_phi
-        store %x_92, %72
-        %x_93:bool = load %x_93_phi
-        %74:f32 = load %x_91
-        store %x_95_phi, %74
-        if %x_93 [t: %b13] {  # if_6
-          %b13 = block {  # true
+        %81:f32 = load %x_91_phi
+        store %x_91, %81
+        %82:f32 = load %x_92_phi
+        store %x_92, %82
+        %83:bool = load %x_93_phi
+        %x_93:bool = let %83
+        %85:f32 = load %x_91
+        store %x_95_phi, %85
+        if %x_93 [t: $B13] {  # if_6
+          $B13: {  # true
             exit_switch  # switch_1
           }
         }
-        %75:f32 = load %x_92
-        store %x_95_phi, %75
+        %86:f32 = load %x_92
+        store %x_95_phi, %86
         exit_switch  # switch_1
       }
     }
@@ -175,203 +185,244 @@
     %x_135_phi:ptr<function, f32, read_write> = var
     %x_136_phi:ptr<function, f32, read_write> = var
     %x_137_phi:ptr<function, bool, read_write> = var
-    %x_95:f32 = load %x_95_phi
+    %95:f32 = load %x_95_phi
+    %x_95:f32 = let %95
     store_vector_element %c, 0u, %x_95
-    %85:f32 = load_vector_element %gl_FragCoord, 1u
-    store %x_98, %85
-    switch 0u [c: (default, %b14)] {  # switch_2
-      %b14 = block {  # case
+    %97:f32 = load_vector_element %gl_FragCoord, 1u
+    store %x_98, %97
+    switch 0u [c: (default, $B14)] {  # switch_2
+      $B14: {  # case
         store %x_102_phi, -0.5f
         store %x_105_phi, 1i
-        loop [b: %b15, c: %b16] {  # loop_2
-          %b15 = block {  # body
+        loop [b: $B15, c: $B16] {  # loop_2
+          $B15: {  # body
             %x_115:ptr<function, f32, read_write> = var
             %x_123:ptr<function, f32, read_write> = var
             %x_106:ptr<function, i32, read_write> = var
             %x_103_phi:ptr<function, f32, read_write> = var
-            %90:f32 = load %x_102_phi
-            store %x_102, %90
-            %x_105:i32 = load %x_105_phi
+            %102:f32 = load %x_102_phi
+            store %x_102, %102
+            %103:i32 = load %x_105_phi
+            %x_105:i32 = let %103
             store %x_135_phi, 0.0f
-            %92:f32 = load %x_102
-            store %x_136_phi, %92
+            %105:f32 = load %x_102
+            store %x_136_phi, %105
             store %x_137_phi, false
-            %93:bool = lt %x_105, 800i
-            if %93 [t: %b17, f: %b18] {  # if_7
-              %b17 = block {  # true
+            %106:bool = lt %x_105, 800i
+            if %106 [t: $B17, f: $B18] {  # if_7
+              $B17: {  # true
                 exit_if  # if_7
               }
-              %b18 = block {  # false
+              $B18: {  # false
                 exit_loop  # loop_2
               }
             }
             %x_122:ptr<function, f32, read_write> = var
             %x_123_phi:ptr<function, f32, read_write> = var
-            %96:i32 = mod %x_105, 32i
-            %97:bool = eq %96, 0i
-            if %97 [t: %b19, f: %b20] {  # if_8
-              %b19 = block {  # true
-                %98:f32 = load %x_102
-                %99:f32 = add %98, 0.40000000596046447754f
-                store %x_115, %99
-                %100:f32 = load %x_115
-                store %x_103_phi, %100
+            %109:i32 = call %tint_mod_i32, %x_105, 32i
+            %110:bool = eq %109, 0i
+            if %110 [t: $B19, f: $B20] {  # if_8
+              $B19: {  # true
+                %111:f32 = load %x_102
+                %112:f32 = add %111, 0.40000000596046447754f
+                store %x_115, %112
+                %113:f32 = load %x_115
+                store %x_103_phi, %113
                 exit_if  # if_8
               }
-              %b20 = block {  # false
-                %101:f32 = load %x_102
-                store %x_123_phi, %101
-                %102:f32 = convert %x_105
-                %103:f32 = round %x_52
-                %104:f32 = convert %x_105
-                %105:f32 = round %x_52
-                %106:f32 = div %104, %105
-                %107:f32 = floor %106
-                %108:f32 = mul %103, %107
-                %109:f32 = sub %102, %108
-                %110:bool = lte %109, 0.00999999977648258209f
-                if %110 [t: %b21] {  # if_9
-                  %b21 = block {  # true
-                    %111:f32 = load %x_102
-                    %112:f32 = add %111, 100.0f
-                    store %x_122, %112
-                    %113:f32 = load %x_122
-                    store %x_123_phi, %113
+              $B20: {  # false
+                %114:f32 = load %x_102
+                store %x_123_phi, %114
+                %115:f32 = convert %x_105
+                %116:f32 = let %115
+                %117:f32 = round %x_52
+                %118:f32 = let %117
+                %119:f32 = convert %x_105
+                %120:f32 = let %119
+                %121:f32 = round %x_52
+                %122:f32 = div %120, %121
+                %123:f32 = floor %122
+                %124:f32 = mul %118, %123
+                %125:f32 = sub %116, %124
+                %126:bool = lte %125, 0.00999999977648258209f
+                if %126 [t: $B21] {  # if_9
+                  $B21: {  # true
+                    %127:f32 = load %x_102
+                    %128:f32 = add %127, 100.0f
+                    store %x_122, %128
+                    %129:f32 = load %x_122
+                    store %x_123_phi, %129
                     exit_if  # if_9
                   }
                 }
-                %114:f32 = load %x_123_phi
-                store %x_123, %114
-                %115:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-                %x_125:f32 = load_vector_element %115, 0u
-                %117:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-                %x_127:f32 = load_vector_element %117, 1u
-                %119:bool = gt %x_125, %x_127
-                if %119 [t: %b22] {  # if_10
-                  %b22 = block {  # true
-                    discard
+                %130:f32 = load %x_123_phi
+                store %x_123, %130
+                %131:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
+                %132:f32 = load_vector_element %131, 0u
+                %x_125:f32 = let %132
+                %134:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
+                %135:f32 = load_vector_element %134, 1u
+                %x_127:f32 = let %135
+                %137:bool = gt %x_125, %x_127
+                if %137 [t: $B22] {  # if_10
+                  $B22: {  # true
+                    store %continue_execution, false
                     exit_if  # if_10
                   }
                 }
-                %120:f32 = load %x_123
-                store %x_103_phi, %120
+                %138:f32 = load %x_123
+                store %x_103_phi, %138
                 exit_if  # if_8
               }
             }
-            %121:f32 = load %x_103_phi
-            store %x_103, %121
-            %122:f32 = convert %x_105
-            %123:f32 = load %x_98
-            %124:bool = gte %122, %123
-            if %124 [t: %b23] {  # if_11
-              %b23 = block {  # true
-                %125:f32 = load %x_103
-                store %x_135_phi, %125
-                %126:f32 = load %x_103
-                store %x_136_phi, %126
+            %139:f32 = load %x_103_phi
+            store %x_103, %139
+            %140:f32 = convert %x_105
+            %141:f32 = load %x_98
+            %142:bool = gte %140, %141
+            if %142 [t: $B23] {  # if_11
+              $B23: {  # true
+                %143:f32 = load %x_103
+                store %x_135_phi, %143
+                %144:f32 = load %x_103
+                store %x_136_phi, %144
                 store %x_137_phi, true
                 exit_loop  # loop_2
               }
             }
-            continue %b16
+            continue  # -> $B16
           }
-          %b16 = block {  # continuing
-            %127:i32 = add %x_105, 1i
-            store %x_106, %127
-            %128:f32 = load %x_103
-            store %x_102_phi, %128
-            %129:i32 = load %x_106
-            store %x_105_phi, %129
-            next_iteration %b15
+          $B16: {  # continuing
+            %145:i32 = add %x_105, 1i
+            store %x_106, %145
+            %146:f32 = load %x_103
+            store %x_102_phi, %146
+            %147:i32 = load %x_106
+            store %x_105_phi, %147
+            next_iteration  # -> $B15
           }
         }
-        %130:f32 = load %x_135_phi
-        store %x_135, %130
-        %131:f32 = load %x_136_phi
-        store %x_136, %131
-        %x_137:bool = load %x_137_phi
-        %133:f32 = load %x_135
-        store %x_139_phi, %133
-        if %x_137 [t: %b24] {  # if_12
-          %b24 = block {  # true
+        %148:f32 = load %x_135_phi
+        store %x_135, %148
+        %149:f32 = load %x_136_phi
+        store %x_136, %149
+        %150:bool = load %x_137_phi
+        %x_137:bool = let %150
+        %152:f32 = load %x_135
+        store %x_139_phi, %152
+        if %x_137 [t: $B24] {  # if_12
+          $B24: {  # true
             exit_switch  # switch_2
           }
         }
-        %134:f32 = load %x_136
-        store %x_139_phi, %134
+        %153:f32 = load %x_136
+        store %x_139_phi, %153
         exit_switch  # switch_2
       }
     }
-    %x_139:f32 = load %x_139_phi
+    %154:f32 = load %x_139_phi
+    %x_139:f32 = let %154
     store_vector_element %c, 1u, %x_139
-    %x_141:f32 = load_vector_element %c, 0u
-    %x_142:f32 = load_vector_element %c, 1u
-    %138:f32 = add %x_141, %x_142
-    store_vector_element %c, 2u, %138
+    %156:f32 = load_vector_element %c, 0u
+    %x_141:f32 = let %156
+    %158:f32 = load_vector_element %c, 1u
+    %x_142:f32 = let %158
+    %160:f32 = add %x_141, %x_142
+    store_vector_element %c, 2u, %160
     store %x_146_phi, 0i
-    loop [b: %b25, c: %b26] {  # loop_3
-      %b25 = block {  # body
+    loop [b: $B25, c: $B26] {  # loop_3
+      $B25: {  # body
         %x_147:ptr<function, i32, read_write> = var
-        %x_146:i32 = load %x_146_phi
-        %141:bool = lt %x_146, 3i
-        if %141 [t: %b27, f: %b28] {  # if_13
-          %b27 = block {  # true
+        %162:i32 = load %x_146_phi
+        %x_146:i32 = let %162
+        %164:bool = lt %x_146, 3i
+        if %164 [t: $B27, f: $B28] {  # if_13
+          $B27: {  # true
             exit_if  # if_13
           }
-          %b28 = block {  # false
+          $B28: {  # false
             exit_loop  # loop_3
           }
         }
-        %x_153:f32 = load_vector_element %c, %x_146
-        %143:bool = gte %x_153, 1.0f
-        if %143 [t: %b29] {  # if_14
-          %b29 = block {  # true
-            %x_157:f32 = load_vector_element %c, %x_146
-            %x_158:f32 = load_vector_element %c, %x_146
-            %146:f32 = mul %x_157, %x_158
-            store_vector_element %c, %x_146, %146
-            %147:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-            %x_161:f32 = load_vector_element %147, 0u
-            %149:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-            %x_163:f32 = load_vector_element %149, 1u
-            %151:bool = gt %x_161, %x_163
-            if %151 [t: %b30] {  # if_15
-              %b30 = block {  # true
-                discard
+        %165:f32 = load_vector_element %c, %x_146
+        %x_153:f32 = let %165
+        %167:bool = gte %x_153, 1.0f
+        if %167 [t: $B29] {  # if_14
+          $B29: {  # true
+            %168:f32 = load_vector_element %c, %x_146
+            %x_157:f32 = let %168
+            %170:f32 = load_vector_element %c, %x_146
+            %x_158:f32 = let %170
+            %172:f32 = mul %x_157, %x_158
+            store_vector_element %c, %x_146, %172
+            %173:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
+            %174:f32 = load_vector_element %173, 0u
+            %x_161:f32 = let %174
+            %176:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
+            %177:f32 = load_vector_element %176, 1u
+            %x_163:f32 = let %177
+            %179:bool = gt %x_161, %x_163
+            if %179 [t: $B30] {  # if_15
+              $B30: {  # true
+                store %continue_execution, false
                 exit_if  # if_15
               }
             }
             exit_if  # if_14
           }
         }
-        continue %b26
+        continue  # -> $B26
       }
-      %b26 = block {  # continuing
-        %152:i32 = add %x_146, 1i
-        store %x_147, %152
-        %153:i32 = load %x_147
-        store %x_146_phi, %153
-        next_iteration %b25
+      $B26: {  # continuing
+        %180:i32 = add %x_146, 1i
+        store %x_147, %180
+        %181:i32 = load %x_147
+        store %x_146_phi, %181
+        next_iteration  # -> $B25
       }
     }
-    %x_167:vec3<f32> = load %c
-    %155:vec3<f32> = abs %x_167
-    %x_169:vec3<f32> = normalize %155
-    %157:f32 = access %x_169, 0u
-    %158:f32 = access %x_169, 1u
-    %159:f32 = access %x_169, 2u
-    %160:vec4<f32> = construct %157, %158, %159, 1.0f
-    store %x_GLF_color, %160
+    %182:vec3<f32> = load %c
+    %x_167:vec3<f32> = let %182
+    %184:vec3<f32> = abs %x_167
+    %185:vec3<f32> = normalize %184
+    %x_169:vec3<f32> = let %185
+    %187:f32 = access %x_169, 0u
+    %188:f32 = access %x_169, 1u
+    %189:f32 = access %x_169, 2u
+    %190:vec4<f32> = construct %187, %188, %189, 1.0f
+    store %x_GLF_color, %190
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b31 {
-  %b31 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B31: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %163:void = call %main_1
-    %164:vec4<f32> = load %x_GLF_color
-    %165:main_out = construct %164
-    ret %165
+    %193:void = call %main_1
+    %194:vec4<f32> = load %x_GLF_color
+    %195:main_out = construct %194
+    %196:bool = load %continue_execution
+    %197:bool = eq %196, false
+    if %197 [t: $B32] {  # if_16
+      $B32: {  # true
+        terminate_invocation
+      }
+    }
+    ret %195
+  }
+}
+%tint_mod_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B33: {
+    %200:bool = eq %rhs, 0i
+    %201:bool = eq %lhs, -2147483648i
+    %202:bool = eq %rhs, -1i
+    %203:bool = and %201, %202
+    %204:bool = or %200, %203
+    %205:i32 = select %rhs, 1i, %204
+    %206:i32 = let %205
+    %207:i32 = div %lhs, %206
+    %208:i32 = mul %207, %206
+    %209:i32 = sub %lhs, %208
+    ret %209
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-float-mat-determinant-clamp/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-float-mat-determinant-clamp/0.spvasm.expected.ir.msl
index de71938..812caff 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-float-mat-determinant-clamp/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-float-mat-determinant-clamp/0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,89 +8,95 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_13:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%compute_value_f1_f1_ = func(%limit:ptr<function, f32, read_write>, %thirty_two:ptr<function, f32, read_write>):f32 -> %b2 {
-  %b2 = block {
+%compute_value_f1_f1_ = func(%limit:ptr<function, f32, read_write>, %thirty_two:ptr<function, f32, read_write>):f32 {
+  $B2: {
     %result:ptr<function, f32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     store %result, -0.5f
     store %i, 1i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %9:i32 = load %i
         %10:bool = lt %9, 800i
-        if %10 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %10 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
         %11:i32 = load %i
-        %12:i32 = mod %11, 32i
-        %13:bool = eq %12, 0i
-        if %13 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
-            %14:f32 = load %result
-            %15:f32 = add %14, 0.40000000596046447754f
-            store %result, %15
+        %12:i32 = call %tint_mod_i32, %11, 32i
+        %14:bool = eq %12, 0i
+        if %14 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
+            %15:f32 = load %result
+            %16:f32 = add %15, 0.40000000596046447754f
+            store %result, %16
             exit_if  # if_2
           }
-          %b8 = block {  # false
-            %x_124:f32 = load %thirty_two
-            %17:i32 = load %i
-            %18:f32 = convert %17
-            %19:f32 = round %x_124
-            %20:i32 = load %i
-            %21:f32 = convert %20
+          $B8: {  # false
+            %17:f32 = load %thirty_two
+            %x_124:f32 = let %17
+            %19:i32 = load %i
+            %20:f32 = convert %19
+            %21:f32 = let %20
             %22:f32 = round %x_124
-            %23:f32 = div %21, %22
-            %24:f32 = floor %23
-            %25:f32 = mul %19, %24
-            %26:f32 = sub %18, %25
-            %27:bool = lte %26, 0.00999999977648258209f
-            if %27 [t: %b9] {  # if_3
-              %b9 = block {  # true
-                %28:f32 = load %result
-                %29:f32 = add %28, 100.0f
-                store %result, %29
+            %23:f32 = let %22
+            %24:i32 = load %i
+            %25:f32 = convert %24
+            %26:f32 = let %25
+            %27:f32 = round %x_124
+            %28:f32 = div %26, %27
+            %29:f32 = floor %28
+            %30:f32 = mul %23, %29
+            %31:f32 = sub %21, %30
+            %32:bool = lte %31, 0.00999999977648258209f
+            if %32 [t: $B9] {  # if_3
+              $B9: {  # true
+                %33:f32 = load %result
+                %34:f32 = add %33, 100.0f
+                store %result, %34
                 exit_if  # if_3
               }
             }
             exit_if  # if_2
           }
         }
-        %30:i32 = load %i
-        %31:f32 = convert %30
-        %32:f32 = load %limit
-        %33:bool = gte %31, %32
-        if %33 [t: %b10] {  # if_4
-          %b10 = block {  # true
-            %x_138:f32 = load %result
+        %35:i32 = load %i
+        %36:f32 = convert %35
+        %37:f32 = load %limit
+        %38:bool = gte %36, %37
+        if %38 [t: $B10] {  # if_4
+          $B10: {  # true
+            %39:f32 = load %result
+            %x_138:f32 = let %39
             ret %x_138
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %35:i32 = load %i
-        %36:i32 = add %35, 1i
-        store %i, %36
-        next_iteration %b3
+      $B4: {  # continuing
+        %41:i32 = load %i
+        %42:i32 = add %41, 1i
+        store %i, %42
+        next_iteration  # -> $B3
       }
     }
-    %x_141:f32 = load %result
+    %43:f32 = load %result
+    %x_141:f32 = let %43
     ret %x_141
   }
 }
-%main_1 = func():void -> %b11 {
-  %b11 = block {
+%main_1 = func():void {
+  $B11: {
     %c:ptr<function, vec3<f32>, read_write> = var
     %thirty_two_1:ptr<function, f32, read_write> = var
     %param:ptr<function, f32, read_write> = var
@@ -99,82 +105,101 @@
     %param_3:ptr<function, f32, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
     store %c, vec3<f32>(7.0f, 8.0f, 9.0f)
-    %46:ptr<uniform, vec2<f32>, read> = access %x_13, 0u
-    %47:f32 = load_vector_element %46, 0u
-    %48:f32 = div %47, 8.0f
-    %49:f32 = round %48
-    store %thirty_two_1, %49
-    %50:f32 = load_vector_element %gl_FragCoord, 0u
-    store %param, %50
-    %51:f32 = load %thirty_two_1
-    store %param_1, %51
-    %x_62:f32 = call %compute_value_f1_f1_, %param, %param_1
+    %53:ptr<uniform, vec2<f32>, read> = access %x_13, 0u
+    %54:f32 = load_vector_element %53, 0u
+    %55:f32 = div %54, 8.0f
+    %56:f32 = round %55
+    store %thirty_two_1, %56
+    %57:f32 = load_vector_element %gl_FragCoord, 0u
+    store %param, %57
+    %58:f32 = load %thirty_two_1
+    store %param_1, %58
+    %59:f32 = call %compute_value_f1_f1_, %param, %param_1
+    %x_62:f32 = let %59
     store_vector_element %c, 0u, %x_62
-    %53:f32 = load_vector_element %gl_FragCoord, 1u
-    store %param_2, %53
-    %54:f32 = load %thirty_two_1
-    store %param_3, %54
-    %x_67:f32 = call %compute_value_f1_f1_, %param_2, %param_3
+    %61:f32 = load_vector_element %gl_FragCoord, 1u
+    store %param_2, %61
+    %62:f32 = load %thirty_two_1
+    store %param_3, %62
+    %63:f32 = call %compute_value_f1_f1_, %param_2, %param_3
+    %x_67:f32 = let %63
     store_vector_element %c, 1u, %x_67
-    %56:f32 = load_vector_element %c, 0u
-    %57:f32 = load_vector_element %c, 1u
-    %58:f32 = add %56, %57
-    store_vector_element %c, 2u, %58
+    %65:f32 = load_vector_element %c, 0u
+    %66:f32 = load_vector_element %c, 1u
+    %67:f32 = add %65, %66
+    store_vector_element %c, 2u, %67
     store %i_1, 0i
-    loop [b: %b12, c: %b13] {  # loop_2
-      %b12 = block {  # body
-        %59:i32 = load %i_1
-        %60:bool = lt %59, 3i
-        if %60 [t: %b14, f: %b15] {  # if_5
-          %b14 = block {  # true
+    loop [b: $B12, c: $B13] {  # loop_2
+      $B12: {  # body
+        %68:i32 = load %i_1
+        %69:bool = lt %68, 3i
+        if %69 [t: $B14, f: $B15] {  # if_5
+          $B14: {  # true
             exit_if  # if_5
           }
-          %b15 = block {  # false
+          $B15: {  # false
             exit_loop  # loop_2
           }
         }
-        %61:i32 = load %i_1
-        %62:f32 = load_vector_element %c, %61
-        %63:bool = gte %62, 1.0f
-        if %63 [t: %b16] {  # if_6
-          %b16 = block {  # true
-            %x_88:i32 = load %i_1
-            %65:i32 = load %i_1
-            %66:f32 = load_vector_element %c, %65
-            %67:i32 = load %i_1
-            %68:f32 = load_vector_element %c, %67
-            %69:f32 = mul %66, %68
-            store_vector_element %c, %x_88, %69
+        %70:i32 = load %i_1
+        %71:f32 = load_vector_element %c, %70
+        %72:bool = gte %71, 1.0f
+        if %72 [t: $B16] {  # if_6
+          $B16: {  # true
+            %73:i32 = load %i_1
+            %x_88:i32 = let %73
+            %75:i32 = load %i_1
+            %76:f32 = load_vector_element %c, %75
+            %77:i32 = load %i_1
+            %78:f32 = load_vector_element %c, %77
+            %79:f32 = mul %76, %78
+            store_vector_element %c, %x_88, %79
             exit_if  # if_6
           }
         }
-        continue %b13
+        continue  # -> $B13
       }
-      %b13 = block {  # continuing
-        %70:i32 = load %i_1
-        %71:i32 = add %70, 1i
-        store %i_1, %71
-        next_iteration %b12
+      $B13: {  # continuing
+        %80:i32 = load %i_1
+        %81:i32 = add %80, 1i
+        store %i_1, %81
+        next_iteration  # -> $B12
       }
     }
-    %72:vec3<f32> = load %c
-    %73:vec3<f32> = abs %72
-    %x_101:vec3<f32> = normalize %73
-    %75:f32 = access %x_101, 0u
-    %76:f32 = access %x_101, 1u
-    %77:f32 = access %x_101, 2u
-    %78:vec4<f32> = construct %75, %76, %77, 1.0f
-    store %x_GLF_color, %78
+    %82:vec3<f32> = load %c
+    %83:vec3<f32> = abs %82
+    %84:vec3<f32> = normalize %83
+    %x_101:vec3<f32> = let %84
+    %86:f32 = access %x_101, 0u
+    %87:f32 = access %x_101, 1u
+    %88:f32 = access %x_101, 2u
+    %89:vec4<f32> = construct %86, %87, %88, 1.0f
+    store %x_GLF_color, %89
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b17 {
-  %b17 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B17: {
     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
+    %92:void = call %main_1
+    %93:vec4<f32> = load %x_GLF_color
+    %94:main_out = construct %93
+    ret %94
+  }
+}
+%tint_mod_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B18: {
+    %97:bool = eq %rhs, 0i
+    %98:bool = eq %lhs, -2147483648i
+    %99:bool = eq %rhs, -1i
+    %100:bool = and %98, %99
+    %101:bool = or %97, %100
+    %102:i32 = select %rhs, 1i, %101
+    %103:i32 = let %102
+    %104:i32 = div %lhs, %103
+    %105:i32 = mul %104, %103
+    %106:i32 = sub %lhs, %105
+    ret %106
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-float-mat-determinant-clamp/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-float-mat-determinant-clamp/0.wgsl.expected.ir.msl
index 0c63bb8..d8bc1a5 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-float-mat-determinant-clamp/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-float-mat-determinant-clamp/0.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,88 +8,102 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_13:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%compute_value_f1_f1_ = func(%limit:ptr<function, f32, read_write>, %thirty_two:ptr<function, f32, read_write>):f32 -> %b2 {
-  %b2 = block {
+%compute_value_f1_f1_ = func(%limit:ptr<function, f32, read_write>, %thirty_two:ptr<function, f32, read_write>):f32 {
+  $B2: {
     %result:ptr<function, f32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     store %result, -0.5f
     store %i, 1i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_111:i32 = load %i
-        %10:bool = lt %x_111, 800i
-        if %10 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %9:i32 = load %i
+        %x_111:i32 = let %9
+        %11:bool = lt %x_111, 800i
+        if %11 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_114:i32 = load %i
-        %12:i32 = mod %x_114, 32i
-        %13:bool = eq %12, 0i
-        if %13 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
-            %x_120:f32 = load %result
-            %15:f32 = add %x_120, 0.40000000596046447754f
-            store %result, %15
+        %12:i32 = load %i
+        %x_114:i32 = let %12
+        %14:i32 = call %tint_mod_i32, %x_114, 32i
+        %16:bool = eq %14, 0i
+        if %16 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
+            %17:f32 = load %result
+            %x_120:f32 = let %17
+            %19:f32 = add %x_120, 0.40000000596046447754f
+            store %result, %19
             exit_if  # if_2
           }
-          %b8 = block {  # false
-            %x_122:i32 = load %i
-            %x_124:f32 = load %thirty_two
-            %18:f32 = convert %x_122
-            %19:f32 = round %x_124
-            %20:f32 = convert %x_122
-            %21:f32 = round %x_124
-            %22:f32 = div %20, %21
-            %23:f32 = floor %22
-            %24:f32 = mul %19, %23
-            %25:f32 = sub %18, %24
-            %26:bool = lte %25, 0.00999999977648258209f
-            if %26 [t: %b9] {  # if_3
-              %b9 = block {  # true
-                %x_130:f32 = load %result
-                %28:f32 = add %x_130, 100.0f
-                store %result, %28
+          $B8: {  # false
+            %20:i32 = load %i
+            %x_122:i32 = let %20
+            %22:f32 = load %thirty_two
+            %x_124:f32 = let %22
+            %24:f32 = convert %x_122
+            %25:f32 = let %24
+            %26:f32 = round %x_124
+            %27:f32 = let %26
+            %28:f32 = convert %x_122
+            %29:f32 = let %28
+            %30:f32 = round %x_124
+            %31:f32 = div %29, %30
+            %32:f32 = floor %31
+            %33:f32 = mul %27, %32
+            %34:f32 = sub %25, %33
+            %35:bool = lte %34, 0.00999999977648258209f
+            if %35 [t: $B9] {  # if_3
+              $B9: {  # true
+                %36:f32 = load %result
+                %x_130:f32 = let %36
+                %38:f32 = add %x_130, 100.0f
+                store %result, %38
                 exit_if  # if_3
               }
             }
             exit_if  # if_2
           }
         }
-        %x_132:i32 = load %i
-        %x_134:f32 = load %limit
-        %31:f32 = convert %x_132
-        %32:bool = gte %31, %x_134
-        if %32 [t: %b10] {  # if_4
-          %b10 = block {  # true
-            %x_138:f32 = load %result
+        %39:i32 = load %i
+        %x_132:i32 = let %39
+        %41:f32 = load %limit
+        %x_134:f32 = let %41
+        %43:f32 = convert %x_132
+        %44:bool = gte %43, %x_134
+        if %44 [t: $B10] {  # if_4
+          $B10: {  # true
+            %45:f32 = load %result
+            %x_138:f32 = let %45
             ret %x_138
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_139:i32 = load %i
-        %35:i32 = add %x_139, 1i
-        store %i, %35
-        next_iteration %b3
+      $B4: {  # continuing
+        %47:i32 = load %i
+        %x_139:i32 = let %47
+        %49:i32 = add %x_139, 1i
+        store %i, %49
+        next_iteration  # -> $B3
       }
     }
-    %x_141:f32 = load %result
+    %50:f32 = load %result
+    %x_141:f32 = let %50
     ret %x_141
   }
 }
-%main_1 = func():void -> %b11 {
-  %b11 = block {
+%main_1 = func():void {
+  $B11: {
     %c:ptr<function, vec3<f32>, read_write> = var
     %thirty_two_1:ptr<function, f32, read_write> = var
     %param:ptr<function, f32, read_write> = var
@@ -98,82 +112,117 @@
     %param_3:ptr<function, f32, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
     store %c, vec3<f32>(7.0f, 8.0f, 9.0f)
-    %45:ptr<uniform, vec2<f32>, read> = access %x_13, 0u
-    %x_56:f32 = load_vector_element %45, 0u
-    %47:f32 = div %x_56, 8.0f
-    %48:f32 = round %47
-    store %thirty_two_1, %48
-    %x_60:f32 = load_vector_element %gl_FragCoord, 0u
+    %60:ptr<uniform, vec2<f32>, read> = access %x_13, 0u
+    %61:f32 = load_vector_element %60, 0u
+    %x_56:f32 = let %61
+    %63:f32 = div %x_56, 8.0f
+    %64:f32 = round %63
+    store %thirty_two_1, %64
+    %65:f32 = load_vector_element %gl_FragCoord, 0u
+    %x_60:f32 = let %65
     store %param, %x_60
-    %x_61:f32 = load %thirty_two_1
+    %67:f32 = load %thirty_two_1
+    %x_61:f32 = let %67
     store %param_1, %x_61
-    %x_62:f32 = call %compute_value_f1_f1_, %param, %param_1
+    %69:f32 = call %compute_value_f1_f1_, %param, %param_1
+    %x_62:f32 = let %69
     store_vector_element %c, 0u, %x_62
-    %x_65:f32 = load_vector_element %gl_FragCoord, 1u
+    %71:f32 = load_vector_element %gl_FragCoord, 1u
+    %x_65:f32 = let %71
     store %param_2, %x_65
-    %x_66:f32 = load %thirty_two_1
+    %73:f32 = load %thirty_two_1
+    %x_66:f32 = let %73
     store %param_3, %x_66
-    %x_67:f32 = call %compute_value_f1_f1_, %param_2, %param_3
+    %75:f32 = call %compute_value_f1_f1_, %param_2, %param_3
+    %x_67:f32 = let %75
     store_vector_element %c, 1u, %x_67
-    %x_70:f32 = load_vector_element %c, 0u
-    %x_72:f32 = load_vector_element %c, 1u
-    %57:f32 = add %x_70, %x_72
-    store_vector_element %c, 2u, %57
+    %77:f32 = load_vector_element %c, 0u
+    %x_70:f32 = let %77
+    %79:f32 = load_vector_element %c, 1u
+    %x_72:f32 = let %79
+    %81:f32 = add %x_70, %x_72
+    store_vector_element %c, 2u, %81
     store %i_1, 0i
-    loop [b: %b12, c: %b13] {  # loop_2
-      %b12 = block {  # body
-        %x_79:i32 = load %i_1
-        %59:bool = lt %x_79, 3i
-        if %59 [t: %b14, f: %b15] {  # if_5
-          %b14 = block {  # true
+    loop [b: $B12, c: $B13] {  # loop_2
+      $B12: {  # body
+        %82:i32 = load %i_1
+        %x_79:i32 = let %82
+        %84:bool = lt %x_79, 3i
+        if %84 [t: $B14, f: $B15] {  # if_5
+          $B14: {  # true
             exit_if  # if_5
           }
-          %b15 = block {  # false
+          $B15: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_82:i32 = load %i_1
-        %x_84:f32 = load_vector_element %c, %x_82
-        %62:bool = gte %x_84, 1.0f
-        if %62 [t: %b16] {  # if_6
-          %b16 = block {  # true
-            %x_88:i32 = load %i_1
-            %x_89:i32 = load %i_1
-            %x_91:f32 = load_vector_element %c, %x_89
-            %x_92:i32 = load %i_1
-            %x_94:f32 = load_vector_element %c, %x_92
-            %68:f32 = mul %x_91, %x_94
-            store_vector_element %c, %x_88, %68
+        %85:i32 = load %i_1
+        %x_82:i32 = let %85
+        %87:f32 = load_vector_element %c, %x_82
+        %x_84:f32 = let %87
+        %89:bool = gte %x_84, 1.0f
+        if %89 [t: $B16] {  # if_6
+          $B16: {  # true
+            %90:i32 = load %i_1
+            %x_88:i32 = let %90
+            %92:i32 = load %i_1
+            %x_89:i32 = let %92
+            %94:f32 = load_vector_element %c, %x_89
+            %x_91:f32 = let %94
+            %96:i32 = load %i_1
+            %x_92:i32 = let %96
+            %98:f32 = load_vector_element %c, %x_92
+            %x_94:f32 = let %98
+            %100:f32 = mul %x_91, %x_94
+            store_vector_element %c, %x_88, %100
             exit_if  # if_6
           }
         }
-        continue %b13
+        continue  # -> $B13
       }
-      %b13 = block {  # continuing
-        %x_97:i32 = load %i_1
-        %70:i32 = add %x_97, 1i
-        store %i_1, %70
-        next_iteration %b12
+      $B13: {  # continuing
+        %101:i32 = load %i_1
+        %x_97:i32 = let %101
+        %103:i32 = add %x_97, 1i
+        store %i_1, %103
+        next_iteration  # -> $B12
       }
     }
-    %x_99:vec3<f32> = load %c
-    %72:vec3<f32> = abs %x_99
-    %x_101:vec3<f32> = normalize %72
-    %74:f32 = access %x_101, 0u
-    %75:f32 = access %x_101, 1u
-    %76:f32 = access %x_101, 2u
-    %77:vec4<f32> = construct %74, %75, %76, 1.0f
-    store %x_GLF_color, %77
+    %104:vec3<f32> = load %c
+    %x_99:vec3<f32> = let %104
+    %106:vec3<f32> = abs %x_99
+    %107:vec3<f32> = normalize %106
+    %x_101:vec3<f32> = let %107
+    %109:f32 = access %x_101, 0u
+    %110:f32 = access %x_101, 1u
+    %111:f32 = access %x_101, 2u
+    %112:vec4<f32> = construct %109, %110, %111, 1.0f
+    store %x_GLF_color, %112
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b17 {
-  %b17 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B17: {
     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
+    %115:void = call %main_1
+    %116:vec4<f32> = load %x_GLF_color
+    %117:main_out = construct %116
+    ret %117
+  }
+}
+%tint_mod_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B18: {
+    %120:bool = eq %rhs, 0i
+    %121:bool = eq %lhs, -2147483648i
+    %122:bool = eq %rhs, -1i
+    %123:bool = and %121, %122
+    %124:bool = or %120, %123
+    %125:i32 = select %rhs, 1i, %124
+    %126:i32 = let %125
+    %127:i32 = div %lhs, %126
+    %128:i32 = mul %127, %126
+    %129:i32 = sub %lhs, %128
+    ret %129
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-injected-conditional-true/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-injected-conditional-true/1.spvasm.expected.ir.msl
index 609f018..db21ff1 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-injected-conditional-true/1.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-injected-conditional-true/1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -12,90 +12,96 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_13:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_20:ptr<uniform, buf1, read> = var @binding_point(0, 1)
 }
 
-%compute_value_f1_f1_ = func(%limit:ptr<function, f32, read_write>, %thirty_two:ptr<function, f32, read_write>):f32 -> %b2 {
-  %b2 = block {
+%compute_value_f1_f1_ = func(%limit:ptr<function, f32, read_write>, %thirty_two:ptr<function, f32, read_write>):f32 {
+  $B2: {
     %result:ptr<function, f32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     store %result, -0.5f
     store %i, 1i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %10:i32 = load %i
         %11:bool = lt %10, 800i
-        if %11 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %11 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
         %12:i32 = load %i
-        %13:i32 = mod %12, 32i
-        %14:bool = eq %13, 0i
-        if %14 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
-            %15:f32 = load %result
-            %16:f32 = add %15, 0.40000000596046447754f
-            store %result, %16
+        %13:i32 = call %tint_mod_i32, %12, 32i
+        %15:bool = eq %13, 0i
+        if %15 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
+            %16:f32 = load %result
+            %17:f32 = add %16, 0.40000000596046447754f
+            store %result, %17
             exit_if  # if_2
           }
-          %b8 = block {  # false
-            %x_138:f32 = load %thirty_two
-            %18:i32 = load %i
-            %19:f32 = convert %18
-            %20:f32 = round %x_138
-            %21:i32 = load %i
-            %22:f32 = convert %21
+          $B8: {  # false
+            %18:f32 = load %thirty_two
+            %x_138:f32 = let %18
+            %20:i32 = load %i
+            %21:f32 = convert %20
+            %22:f32 = let %21
             %23:f32 = round %x_138
-            %24:f32 = div %22, %23
-            %25:f32 = floor %24
-            %26:f32 = mul %20, %25
-            %27:f32 = sub %19, %26
-            %28:bool = lte %27, 0.00999999977648258209f
-            if %28 [t: %b9] {  # if_3
-              %b9 = block {  # true
-                %29:f32 = load %result
-                %30:f32 = add %29, 100.0f
-                store %result, %30
+            %24:f32 = let %23
+            %25:i32 = load %i
+            %26:f32 = convert %25
+            %27:f32 = let %26
+            %28:f32 = round %x_138
+            %29:f32 = div %27, %28
+            %30:f32 = floor %29
+            %31:f32 = mul %24, %30
+            %32:f32 = sub %22, %31
+            %33:bool = lte %32, 0.00999999977648258209f
+            if %33 [t: $B9] {  # if_3
+              $B9: {  # true
+                %34:f32 = load %result
+                %35:f32 = add %34, 100.0f
+                store %result, %35
                 exit_if  # if_3
               }
             }
             exit_if  # if_2
           }
         }
-        %31:i32 = load %i
-        %32:f32 = convert %31
-        %33:f32 = load %limit
-        %34:bool = gte %32, %33
-        if %34 [t: %b10] {  # if_4
-          %b10 = block {  # true
-            %x_152:f32 = load %result
+        %36:i32 = load %i
+        %37:f32 = convert %36
+        %38:f32 = load %limit
+        %39:bool = gte %37, %38
+        if %39 [t: $B10] {  # if_4
+          $B10: {  # true
+            %40:f32 = load %result
+            %x_152:f32 = let %40
             ret %x_152
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %36:i32 = load %i
-        %37:i32 = add %36, 1i
-        store %i, %37
-        next_iteration %b3
+      $B4: {  # continuing
+        %42:i32 = load %i
+        %43:i32 = add %42, 1i
+        store %i, %43
+        next_iteration  # -> $B3
       }
     }
-    %x_155:f32 = load %result
+    %44:f32 = load %result
+    %x_155:f32 = let %44
     ret %x_155
   }
 }
-%main_1 = func():void -> %b11 {
-  %b11 = block {
+%main_1 = func():void {
+  $B11: {
     %c:ptr<function, vec3<f32>, read_write> = var
     %thirty_two_1:ptr<function, f32, read_write> = var
     %param:ptr<function, f32, read_write> = var
@@ -105,99 +111,118 @@
     %i_1:ptr<function, i32, read_write> = var
     %x_58:ptr<function, vec3<f32>, read_write> = var
     store %c, vec3<f32>(7.0f, 8.0f, 9.0f)
-    %48:ptr<uniform, vec2<f32>, read> = access %x_13, 0u
-    %49:f32 = load_vector_element %48, 0u
-    %50:f32 = div %49, 8.0f
-    %51:f32 = round %50
-    store %thirty_two_1, %51
-    %52:f32 = load_vector_element %gl_FragCoord, 0u
-    store %param, %52
-    %53:f32 = load %thirty_two_1
-    store %param_1, %53
-    %x_66:f32 = call %compute_value_f1_f1_, %param, %param_1
+    %55:ptr<uniform, vec2<f32>, read> = access %x_13, 0u
+    %56:f32 = load_vector_element %55, 0u
+    %57:f32 = div %56, 8.0f
+    %58:f32 = round %57
+    store %thirty_two_1, %58
+    %59:f32 = load_vector_element %gl_FragCoord, 0u
+    store %param, %59
+    %60:f32 = load %thirty_two_1
+    store %param_1, %60
+    %61:f32 = call %compute_value_f1_f1_, %param, %param_1
+    %x_66:f32 = let %61
     store_vector_element %c, 0u, %x_66
-    %55:f32 = load_vector_element %gl_FragCoord, 1u
-    store %param_2, %55
-    %56:f32 = load %thirty_two_1
-    store %param_3, %56
-    %x_71:f32 = call %compute_value_f1_f1_, %param_2, %param_3
+    %63:f32 = load_vector_element %gl_FragCoord, 1u
+    store %param_2, %63
+    %64:f32 = load %thirty_two_1
+    store %param_3, %64
+    %65:f32 = call %compute_value_f1_f1_, %param_2, %param_3
+    %x_71:f32 = let %65
     store_vector_element %c, 1u, %x_71
-    %58:f32 = load_vector_element %c, 0u
-    %59:f32 = load_vector_element %c, 1u
-    %60:f32 = add %58, %59
-    store_vector_element %c, 2u, %60
+    %67:f32 = load_vector_element %c, 0u
+    %68:f32 = load_vector_element %c, 1u
+    %69:f32 = add %67, %68
+    store_vector_element %c, 2u, %69
     store %i_1, 0i
-    loop [b: %b12, c: %b13] {  # loop_2
-      %b12 = block {  # body
-        %61:i32 = load %i_1
-        %62:bool = lt %61, 3i
-        if %62 [t: %b14, f: %b15] {  # if_5
-          %b14 = block {  # true
+    loop [b: $B12, c: $B13] {  # loop_2
+      $B12: {  # body
+        %70:i32 = load %i_1
+        %71:bool = lt %70, 3i
+        if %71 [t: $B14, f: $B15] {  # if_5
+          $B14: {  # true
             exit_if  # if_5
           }
-          %b15 = block {  # false
+          $B15: {  # false
             exit_loop  # loop_2
           }
         }
-        %63:i32 = load %i_1
-        %64:f32 = load_vector_element %c, %63
-        %65:bool = gte %64, 1.0f
-        if %65 [t: %b16] {  # if_6
-          %b16 = block {  # true
-            %x_92:i32 = load %i_1
-            %67:i32 = load %i_1
-            %68:f32 = load_vector_element %c, %67
-            %69:i32 = load %i_1
-            %70:f32 = load_vector_element %c, %69
-            %71:f32 = mul %68, %70
-            store_vector_element %c, %x_92, %71
+        %72:i32 = load %i_1
+        %73:f32 = load_vector_element %c, %72
+        %74:bool = gte %73, 1.0f
+        if %74 [t: $B16] {  # if_6
+          $B16: {  # true
+            %75:i32 = load %i_1
+            %x_92:i32 = let %75
+            %77:i32 = load %i_1
+            %78:f32 = load_vector_element %c, %77
+            %79:i32 = load %i_1
+            %80:f32 = load_vector_element %c, %79
+            %81:f32 = mul %78, %80
+            store_vector_element %c, %x_92, %81
             exit_if  # if_6
           }
         }
-        continue %b13
+        continue  # -> $B13
       }
-      %b13 = block {  # continuing
-        %72:i32 = load %i_1
-        %73:i32 = add %72, 1i
-        store %i_1, %73
-        next_iteration %b12
+      $B13: {  # continuing
+        %82:i32 = load %i_1
+        %83:i32 = add %82, 1i
+        store %i_1, %83
+        next_iteration  # -> $B12
       }
     }
-    %74:ptr<uniform, vec2<f32>, read> = access %x_20, 0u
-    %75:f32 = load_vector_element %74, 0u
-    %76:ptr<uniform, vec2<f32>, read> = access %x_20, 0u
-    %77:f32 = load_vector_element %76, 1u
-    %78:bool = lt %75, %77
-    if %78 [t: %b17, f: %b18] {  # if_7
-      %b17 = block {  # true
-        %79:vec3<f32> = load %c
-        %80:vec3<f32> = abs %79
-        store %x_58, %80
+    %84:ptr<uniform, vec2<f32>, read> = access %x_20, 0u
+    %85:f32 = load_vector_element %84, 0u
+    %86:ptr<uniform, vec2<f32>, read> = access %x_20, 0u
+    %87:f32 = load_vector_element %86, 1u
+    %88:bool = lt %85, %87
+    if %88 [t: $B17, f: $B18] {  # if_7
+      $B17: {  # true
+        %89:vec3<f32> = load %c
+        %90:vec3<f32> = abs %89
+        store %x_58, %90
         exit_if  # if_7
       }
-      %b18 = block {  # false
-        %81:vec3<f32> = load %c
-        store %x_58, %81
+      $B18: {  # false
+        %91:vec3<f32> = load %c
+        store %x_58, %91
         exit_if  # if_7
       }
     }
-    %82:vec3<f32> = load %x_58
-    %x_115:vec3<f32> = normalize %82
-    %84:f32 = access %x_115, 0u
-    %85:f32 = access %x_115, 1u
-    %86:f32 = access %x_115, 2u
-    %87:vec4<f32> = construct %84, %85, %86, 1.0f
-    store %x_GLF_color, %87
+    %92:vec3<f32> = load %x_58
+    %93:vec3<f32> = normalize %92
+    %x_115:vec3<f32> = let %93
+    %95:f32 = access %x_115, 0u
+    %96:f32 = access %x_115, 1u
+    %97:f32 = access %x_115, 2u
+    %98:vec4<f32> = construct %95, %96, %97, 1.0f
+    store %x_GLF_color, %98
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b19 {
-  %b19 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B19: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %90:void = call %main_1
-    %91:vec4<f32> = load %x_GLF_color
-    %92:main_out = construct %91
-    ret %92
+    %101:void = call %main_1
+    %102:vec4<f32> = load %x_GLF_color
+    %103:main_out = construct %102
+    ret %103
+  }
+}
+%tint_mod_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B20: {
+    %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 = let %111
+    %113:i32 = div %lhs, %112
+    %114:i32 = mul %113, %112
+    %115:i32 = sub %lhs, %114
+    ret %115
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-injected-conditional-true/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-injected-conditional-true/1.wgsl.expected.ir.msl
index e9fc950..6641a99 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-injected-conditional-true/1.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-injected-conditional-true/1.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -12,89 +12,103 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_13:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_20:ptr<uniform, buf1, read> = var @binding_point(0, 1)
 }
 
-%compute_value_f1_f1_ = func(%limit:ptr<function, f32, read_write>, %thirty_two:ptr<function, f32, read_write>):f32 -> %b2 {
-  %b2 = block {
+%compute_value_f1_f1_ = func(%limit:ptr<function, f32, read_write>, %thirty_two:ptr<function, f32, read_write>):f32 {
+  $B2: {
     %result:ptr<function, f32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     store %result, -0.5f
     store %i, 1i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_125:i32 = load %i
-        %11:bool = lt %x_125, 800i
-        if %11 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %10:i32 = load %i
+        %x_125:i32 = let %10
+        %12:bool = lt %x_125, 800i
+        if %12 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_128:i32 = load %i
-        %13:i32 = mod %x_128, 32i
-        %14:bool = eq %13, 0i
-        if %14 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
-            %x_134:f32 = load %result
-            %16:f32 = add %x_134, 0.40000000596046447754f
-            store %result, %16
+        %13:i32 = load %i
+        %x_128:i32 = let %13
+        %15:i32 = call %tint_mod_i32, %x_128, 32i
+        %17:bool = eq %15, 0i
+        if %17 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
+            %18:f32 = load %result
+            %x_134:f32 = let %18
+            %20:f32 = add %x_134, 0.40000000596046447754f
+            store %result, %20
             exit_if  # if_2
           }
-          %b8 = block {  # false
-            %x_136:i32 = load %i
-            %x_138:f32 = load %thirty_two
-            %19:f32 = convert %x_136
-            %20:f32 = round %x_138
-            %21:f32 = convert %x_136
-            %22:f32 = round %x_138
-            %23:f32 = div %21, %22
-            %24:f32 = floor %23
-            %25:f32 = mul %20, %24
-            %26:f32 = sub %19, %25
-            %27:bool = lte %26, 0.00999999977648258209f
-            if %27 [t: %b9] {  # if_3
-              %b9 = block {  # true
-                %x_144:f32 = load %result
-                %29:f32 = add %x_144, 100.0f
-                store %result, %29
+          $B8: {  # false
+            %21:i32 = load %i
+            %x_136:i32 = let %21
+            %23:f32 = load %thirty_two
+            %x_138:f32 = let %23
+            %25:f32 = convert %x_136
+            %26:f32 = let %25
+            %27:f32 = round %x_138
+            %28:f32 = let %27
+            %29:f32 = convert %x_136
+            %30:f32 = let %29
+            %31:f32 = round %x_138
+            %32:f32 = div %30, %31
+            %33:f32 = floor %32
+            %34:f32 = mul %28, %33
+            %35:f32 = sub %26, %34
+            %36:bool = lte %35, 0.00999999977648258209f
+            if %36 [t: $B9] {  # if_3
+              $B9: {  # true
+                %37:f32 = load %result
+                %x_144:f32 = let %37
+                %39:f32 = add %x_144, 100.0f
+                store %result, %39
                 exit_if  # if_3
               }
             }
             exit_if  # if_2
           }
         }
-        %x_146:i32 = load %i
-        %x_148:f32 = load %limit
-        %32:f32 = convert %x_146
-        %33:bool = gte %32, %x_148
-        if %33 [t: %b10] {  # if_4
-          %b10 = block {  # true
-            %x_152:f32 = load %result
+        %40:i32 = load %i
+        %x_146:i32 = let %40
+        %42:f32 = load %limit
+        %x_148:f32 = let %42
+        %44:f32 = convert %x_146
+        %45:bool = gte %44, %x_148
+        if %45 [t: $B10] {  # if_4
+          $B10: {  # true
+            %46:f32 = load %result
+            %x_152:f32 = let %46
             ret %x_152
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_153:i32 = load %i
-        %36:i32 = add %x_153, 1i
-        store %i, %36
-        next_iteration %b3
+      $B4: {  # continuing
+        %48:i32 = load %i
+        %x_153:i32 = let %48
+        %50:i32 = add %x_153, 1i
+        store %i, %50
+        next_iteration  # -> $B3
       }
     }
-    %x_155:f32 = load %result
+    %51:f32 = load %result
+    %x_155:f32 = let %51
     ret %x_155
   }
 }
-%main_1 = func():void -> %b11 {
-  %b11 = block {
+%main_1 = func():void {
+  $B11: {
     %c:ptr<function, vec3<f32>, read_write> = var
     %thirty_two_1:ptr<function, f32, read_write> = var
     %param:ptr<function, f32, read_write> = var
@@ -104,99 +118,138 @@
     %i_1:ptr<function, i32, read_write> = var
     %x_58:ptr<function, vec3<f32>, read_write> = var
     store %c, vec3<f32>(7.0f, 8.0f, 9.0f)
-    %47:ptr<uniform, vec2<f32>, read> = access %x_13, 0u
-    %x_60:f32 = load_vector_element %47, 0u
-    %49:f32 = div %x_60, 8.0f
-    %50:f32 = round %49
-    store %thirty_two_1, %50
-    %x_64:f32 = load_vector_element %gl_FragCoord, 0u
+    %62:ptr<uniform, vec2<f32>, read> = access %x_13, 0u
+    %63:f32 = load_vector_element %62, 0u
+    %x_60:f32 = let %63
+    %65:f32 = div %x_60, 8.0f
+    %66:f32 = round %65
+    store %thirty_two_1, %66
+    %67:f32 = load_vector_element %gl_FragCoord, 0u
+    %x_64:f32 = let %67
     store %param, %x_64
-    %x_65:f32 = load %thirty_two_1
+    %69:f32 = load %thirty_two_1
+    %x_65:f32 = let %69
     store %param_1, %x_65
-    %x_66:f32 = call %compute_value_f1_f1_, %param, %param_1
+    %71:f32 = call %compute_value_f1_f1_, %param, %param_1
+    %x_66:f32 = let %71
     store_vector_element %c, 0u, %x_66
-    %x_69:f32 = load_vector_element %gl_FragCoord, 1u
+    %73:f32 = load_vector_element %gl_FragCoord, 1u
+    %x_69:f32 = let %73
     store %param_2, %x_69
-    %x_70:f32 = load %thirty_two_1
+    %75:f32 = load %thirty_two_1
+    %x_70:f32 = let %75
     store %param_3, %x_70
-    %x_71:f32 = call %compute_value_f1_f1_, %param_2, %param_3
+    %77:f32 = call %compute_value_f1_f1_, %param_2, %param_3
+    %x_71:f32 = let %77
     store_vector_element %c, 1u, %x_71
-    %x_74:f32 = load_vector_element %c, 0u
-    %x_76:f32 = load_vector_element %c, 1u
-    %59:f32 = add %x_74, %x_76
-    store_vector_element %c, 2u, %59
+    %79:f32 = load_vector_element %c, 0u
+    %x_74:f32 = let %79
+    %81:f32 = load_vector_element %c, 1u
+    %x_76:f32 = let %81
+    %83:f32 = add %x_74, %x_76
+    store_vector_element %c, 2u, %83
     store %i_1, 0i
-    loop [b: %b12, c: %b13] {  # loop_2
-      %b12 = block {  # body
-        %x_83:i32 = load %i_1
-        %61:bool = lt %x_83, 3i
-        if %61 [t: %b14, f: %b15] {  # if_5
-          %b14 = block {  # true
+    loop [b: $B12, c: $B13] {  # loop_2
+      $B12: {  # body
+        %84:i32 = load %i_1
+        %x_83:i32 = let %84
+        %86:bool = lt %x_83, 3i
+        if %86 [t: $B14, f: $B15] {  # if_5
+          $B14: {  # true
             exit_if  # if_5
           }
-          %b15 = block {  # false
+          $B15: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_86:i32 = load %i_1
-        %x_88:f32 = load_vector_element %c, %x_86
-        %64:bool = gte %x_88, 1.0f
-        if %64 [t: %b16] {  # if_6
-          %b16 = block {  # true
-            %x_92:i32 = load %i_1
-            %x_93:i32 = load %i_1
-            %x_95:f32 = load_vector_element %c, %x_93
-            %x_96:i32 = load %i_1
-            %x_98:f32 = load_vector_element %c, %x_96
-            %70:f32 = mul %x_95, %x_98
-            store_vector_element %c, %x_92, %70
+        %87:i32 = load %i_1
+        %x_86:i32 = let %87
+        %89:f32 = load_vector_element %c, %x_86
+        %x_88:f32 = let %89
+        %91:bool = gte %x_88, 1.0f
+        if %91 [t: $B16] {  # if_6
+          $B16: {  # true
+            %92:i32 = load %i_1
+            %x_92:i32 = let %92
+            %94:i32 = load %i_1
+            %x_93:i32 = let %94
+            %96:f32 = load_vector_element %c, %x_93
+            %x_95:f32 = let %96
+            %98:i32 = load %i_1
+            %x_96:i32 = let %98
+            %100:f32 = load_vector_element %c, %x_96
+            %x_98:f32 = let %100
+            %102:f32 = mul %x_95, %x_98
+            store_vector_element %c, %x_92, %102
             exit_if  # if_6
           }
         }
-        continue %b13
+        continue  # -> $B13
       }
-      %b13 = block {  # continuing
-        %x_101:i32 = load %i_1
-        %72:i32 = add %x_101, 1i
-        store %i_1, %72
-        next_iteration %b12
+      $B13: {  # continuing
+        %103:i32 = load %i_1
+        %x_101:i32 = let %103
+        %105:i32 = add %x_101, 1i
+        store %i_1, %105
+        next_iteration  # -> $B12
       }
     }
-    %73:ptr<uniform, vec2<f32>, read> = access %x_20, 0u
-    %x_104:f32 = load_vector_element %73, 0u
-    %75:ptr<uniform, vec2<f32>, read> = access %x_20, 0u
-    %x_106:f32 = load_vector_element %75, 1u
-    %77:bool = lt %x_104, %x_106
-    if %77 [t: %b17, f: %b18] {  # if_7
-      %b17 = block {  # true
-        %x_111:vec3<f32> = load %c
-        %79:vec3<f32> = abs %x_111
-        store %x_58, %79
+    %106:ptr<uniform, vec2<f32>, read> = access %x_20, 0u
+    %107:f32 = load_vector_element %106, 0u
+    %x_104:f32 = let %107
+    %109:ptr<uniform, vec2<f32>, read> = access %x_20, 0u
+    %110:f32 = load_vector_element %109, 1u
+    %x_106:f32 = let %110
+    %112:bool = lt %x_104, %x_106
+    if %112 [t: $B17, f: $B18] {  # if_7
+      $B17: {  # true
+        %113:vec3<f32> = load %c
+        %x_111:vec3<f32> = let %113
+        %115:vec3<f32> = abs %x_111
+        store %x_58, %115
         exit_if  # if_7
       }
-      %b18 = block {  # false
-        %x_113:vec3<f32> = load %c
+      $B18: {  # false
+        %116:vec3<f32> = load %c
+        %x_113:vec3<f32> = let %116
         store %x_58, %x_113
         exit_if  # if_7
       }
     }
-    %x_114:vec3<f32> = load %x_58
-    %x_115:vec3<f32> = normalize %x_114
-    %83:f32 = access %x_115, 0u
-    %84:f32 = access %x_115, 1u
-    %85:f32 = access %x_115, 2u
-    %86:vec4<f32> = construct %83, %84, %85, 1.0f
-    store %x_GLF_color, %86
+    %118:vec3<f32> = load %x_58
+    %x_114:vec3<f32> = let %118
+    %120:vec3<f32> = normalize %x_114
+    %x_115:vec3<f32> = let %120
+    %122:f32 = access %x_115, 0u
+    %123:f32 = access %x_115, 1u
+    %124:f32 = access %x_115, 2u
+    %125:vec4<f32> = construct %122, %123, %124, 1.0f
+    store %x_GLF_color, %125
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b19 {
-  %b19 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B19: {
     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
+    %128:void = call %main_1
+    %129:vec4<f32> = load %x_GLF_color
+    %130:main_out = construct %129
+    ret %130
+  }
+}
+%tint_mod_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B20: {
+    %133:bool = eq %rhs, 0i
+    %134:bool = eq %lhs, -2147483648i
+    %135:bool = eq %rhs, -1i
+    %136:bool = and %134, %135
+    %137:bool = or %133, %136
+    %138:i32 = select %rhs, 1i, %137
+    %139:i32 = let %138
+    %140:i32 = div %lhs, %139
+    %141:i32 = mul %140, %139
+    %142:i32 = sub %lhs, %141
+    ret %142
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/0-opt.spvasm.expected.ir.msl
index 52d7a15..8bb64da 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,106 +8,110 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_10:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%compute_value_f1_f1_ = func(%limit:ptr<function, f32, read_write>, %thirty_two:ptr<function, f32, read_write>):f32 -> %b2 {
-  %b2 = block {
+%compute_value_f1_f1_ = func(%limit:ptr<function, f32, read_write>, %thirty_two:ptr<function, f32, read_write>):f32 {
+  $B2: {
     %x_91:ptr<function, f32, read_write> = var
     %x_94:ptr<function, i32, read_write> = var
     store %x_91, -0.5f
     store %x_94, 1i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %x_104:ptr<function, f32, read_write> = var
         %x_113:ptr<function, f32, read_write> = var
         %x_92:ptr<function, f32, read_write> = var
         %x_95:ptr<function, i32, read_write> = var
         %13:i32 = load %x_94
         %14:bool = lt %13, 800i
-        if %14 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %14 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
         %x_112:ptr<function, f32, read_write> = var
         %16:i32 = load %x_94
-        %17:i32 = mod %16, 32i
-        %18:bool = eq %17, 0i
-        if %18 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
-            %19:f32 = load %x_91
-            %20:f32 = add %19, 0.40000000596046447754f
-            store %x_104, %20
-            %21:f32 = load %x_104
-            store %x_92, %21
+        %17:i32 = call %tint_mod_i32, %16, 32i
+        %19:bool = eq %17, 0i
+        if %19 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
+            %20:f32 = load %x_91
+            %21:f32 = add %20, 0.40000000596046447754f
+            store %x_104, %21
+            %22:f32 = load %x_104
+            store %x_92, %22
             exit_if  # if_2
           }
-          %b8 = block {  # false
-            %x_106:f32 = load %thirty_two
-            %23:f32 = load %x_91
-            store %x_113, %23
-            %24:i32 = load %x_94
-            %25:f32 = convert %24
-            %26:f32 = round %x_106
-            %27:i32 = load %x_94
-            %28:f32 = convert %27
+          $B8: {  # false
+            %23:f32 = load %thirty_two
+            %x_106:f32 = let %23
+            %25:f32 = load %x_91
+            store %x_113, %25
+            %26:i32 = load %x_94
+            %27:f32 = convert %26
+            %28:f32 = let %27
             %29:f32 = round %x_106
-            %30:f32 = div %28, %29
-            %31:f32 = floor %30
-            %32:f32 = mul %26, %31
-            %33:f32 = sub %25, %32
-            %34:bool = lte %33, 0.00999999977648258209f
-            if %34 [t: %b9] {  # if_3
-              %b9 = block {  # true
-                %35:f32 = load %x_91
-                %36:f32 = add %35, 100.0f
-                store %x_112, %36
-                %37:f32 = load %x_112
-                store %x_113, %37
+            %30:f32 = let %29
+            %31:i32 = load %x_94
+            %32:f32 = convert %31
+            %33:f32 = let %32
+            %34:f32 = round %x_106
+            %35:f32 = div %33, %34
+            %36:f32 = floor %35
+            %37:f32 = mul %30, %36
+            %38:f32 = sub %28, %37
+            %39:bool = lte %38, 0.00999999977648258209f
+            if %39 [t: $B9] {  # if_3
+              $B9: {  # true
+                %40:f32 = load %x_91
+                %41:f32 = add %40, 100.0f
+                store %x_112, %41
+                %42:f32 = load %x_112
+                store %x_113, %42
                 exit_if  # if_3
               }
             }
-            %38:f32 = load %x_113
-            store %x_92, %38
+            %43:f32 = load %x_113
+            store %x_92, %43
             exit_if  # if_2
           }
         }
-        %39:i32 = load %x_94
-        %40:f32 = convert %39
-        %41:f32 = load %limit
-        %42:bool = gte %40, %41
-        if %42 [t: %b10] {  # if_4
-          %b10 = block {  # true
-            %43:f32 = load %x_92
-            ret %43
+        %44:i32 = load %x_94
+        %45:f32 = convert %44
+        %46:f32 = load %limit
+        %47:bool = gte %45, %46
+        if %47 [t: $B10] {  # if_4
+          $B10: {  # true
+            %48:f32 = load %x_92
+            ret %48
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %44:i32 = load %x_94
-        %45:i32 = add %44, 1i
-        store %x_95, %45
-        %46:f32 = load %x_92
-        store %x_91, %46
-        %47:i32 = load %x_95
-        store %x_94, %47
-        next_iteration %b3
+      $B4: {  # continuing
+        %49:i32 = load %x_94
+        %50:i32 = add %49, 1i
+        store %x_95, %50
+        %51:f32 = load %x_92
+        store %x_91, %51
+        %52:i32 = load %x_95
+        store %x_94, %52
+        next_iteration  # -> $B3
       }
     }
-    %48:f32 = load %x_91
-    ret %48
+    %53:f32 = load %x_91
+    ret %53
   }
 }
-%main_1 = func():void -> %b11 {
-  %b11 = block {
+%main_1 = func():void {
+  $B11: {
     %c:ptr<function, vec3<f32>, read_write> = var
     %param:ptr<function, f32, read_write> = var
     %param_1:ptr<function, f32, read_write> = var
@@ -115,82 +119,101 @@
     %param_3:ptr<function, f32, read_write> = var
     %x_68:ptr<function, i32, read_write> = var
     store %c, vec3<f32>(7.0f, 8.0f, 9.0f)
-    %56:ptr<uniform, vec2<f32>, read> = access %x_10, 0u
-    %57:f32 = load_vector_element %56, 0u
-    %58:f32 = mul %57, 0.125f
-    %x_54:f32 = round %58
-    %60:f32 = load_vector_element %gl_FragCoord, 0u
-    store %param, %60
+    %61:ptr<uniform, vec2<f32>, read> = access %x_10, 0u
+    %62:f32 = load_vector_element %61, 0u
+    %63:f32 = mul %62, 0.125f
+    %64:f32 = round %63
+    %x_54:f32 = let %64
+    %66:f32 = load_vector_element %gl_FragCoord, 0u
+    store %param, %66
     store %param_1, %x_54
-    %x_57:f32 = call %compute_value_f1_f1_, %param, %param_1
+    %67:f32 = call %compute_value_f1_f1_, %param, %param_1
+    %x_57:f32 = let %67
     store_vector_element %c, 0u, %x_57
-    %62:f32 = load_vector_element %gl_FragCoord, 1u
-    store %param_2, %62
+    %69:f32 = load_vector_element %gl_FragCoord, 1u
+    store %param_2, %69
     store %param_3, %x_54
-    %x_61:f32 = call %compute_value_f1_f1_, %param_2, %param_3
+    %70:f32 = call %compute_value_f1_f1_, %param_2, %param_3
+    %x_61:f32 = let %70
     store_vector_element %c, 1u, %x_61
-    %64:f32 = load_vector_element %c, 0u
-    %65:f32 = load_vector_element %c, 1u
-    %66:f32 = add %64, %65
-    store_vector_element %c, 2u, %66
+    %72:f32 = load_vector_element %c, 0u
+    %73:f32 = load_vector_element %c, 1u
+    %74:f32 = add %72, %73
+    store_vector_element %c, 2u, %74
     store %x_68, 0i
-    loop [b: %b12, c: %b13] {  # loop_2
-      %b12 = block {  # body
+    loop [b: $B12, c: $B13] {  # loop_2
+      $B12: {  # body
         %x_69:ptr<function, i32, read_write> = var
-        %68:i32 = load %x_68
-        %69:bool = lt %68, 3i
-        if %69 [t: %b14, f: %b15] {  # if_5
-          %b14 = block {  # true
+        %76:i32 = load %x_68
+        %77:bool = lt %76, 3i
+        if %77 [t: $B14, f: $B15] {  # if_5
+          $B14: {  # true
             exit_if  # if_5
           }
-          %b15 = block {  # false
+          $B15: {  # false
             exit_loop  # loop_2
           }
         }
-        %70:i32 = load %x_68
-        %71:f32 = load_vector_element %c, %70
-        %72:bool = gte %71, 1.0f
-        if %72 [t: %b16] {  # if_6
-          %b16 = block {  # true
-            %73:i32 = load %x_68
-            %74:i32 = load %x_68
-            %75:f32 = load_vector_element %c, %74
-            %76:i32 = load %x_68
-            %77:f32 = load_vector_element %c, %76
-            %78:f32 = mul %75, %77
-            store_vector_element %c, %73, %78
+        %78:i32 = load %x_68
+        %79:f32 = load_vector_element %c, %78
+        %80:bool = gte %79, 1.0f
+        if %80 [t: $B16] {  # if_6
+          $B16: {  # true
+            %81:i32 = load %x_68
+            %82:i32 = load %x_68
+            %83:f32 = load_vector_element %c, %82
+            %84:i32 = load %x_68
+            %85:f32 = load_vector_element %c, %84
+            %86:f32 = mul %83, %85
+            store_vector_element %c, %81, %86
             exit_if  # if_6
           }
         }
-        continue %b13
+        continue  # -> $B13
       }
-      %b13 = block {  # continuing
-        %79:i32 = load %x_68
-        %80:i32 = add %79, 1i
-        store %x_69, %80
-        %81:i32 = load %x_69
-        store %x_68, %81
-        next_iteration %b12
+      $B13: {  # continuing
+        %87:i32 = load %x_68
+        %88:i32 = add %87, 1i
+        store %x_69, %88
+        %89:i32 = load %x_69
+        store %x_68, %89
+        next_iteration  # -> $B12
       }
     }
-    %82:vec3<f32> = load %c
-    %83:vec3<f32> = abs %82
-    %x_84:vec3<f32> = normalize %83
-    %85:f32 = access %x_84, 0u
-    %86:f32 = access %x_84, 1u
-    %87:f32 = access %x_84, 2u
-    %88:vec4<f32> = construct %85, %86, %87, 1.0f
-    store %x_GLF_color, %88
+    %90:vec3<f32> = load %c
+    %91:vec3<f32> = abs %90
+    %92:vec3<f32> = normalize %91
+    %x_84:vec3<f32> = let %92
+    %94:f32 = access %x_84, 0u
+    %95:f32 = access %x_84, 1u
+    %96:f32 = access %x_84, 2u
+    %97:vec4<f32> = construct %94, %95, %96, 1.0f
+    store %x_GLF_color, %97
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b17 {
-  %b17 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B17: {
     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
+    %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 {
+  $B18: {
+    %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
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/0-opt.wgsl.expected.ir.msl
index e14904d..9dda484 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,110 +8,116 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_10:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%compute_value_f1_f1_ = func(%limit:ptr<function, f32, read_write>, %thirty_two:ptr<function, f32, read_write>):f32 -> %b2 {
-  %b2 = block {
+%compute_value_f1_f1_ = func(%limit:ptr<function, f32, read_write>, %thirty_two:ptr<function, f32, read_write>):f32 {
+  $B2: {
     %x_91:ptr<function, f32, read_write> = var
     %x_91_phi:ptr<function, f32, read_write> = var
     %x_94_phi:ptr<function, i32, read_write> = var
     store %x_91_phi, -0.5f
     store %x_94_phi, 1i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %x_104:ptr<function, f32, read_write> = var
         %x_113:ptr<function, f32, read_write> = var
         %x_95:ptr<function, i32, read_write> = var
         %x_92_phi:ptr<function, f32, read_write> = var
         %14:f32 = load %x_91_phi
         store %x_91, %14
-        %x_94:i32 = load %x_94_phi
-        %16:bool = lt %x_94, 800i
-        if %16 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %15:i32 = load %x_94_phi
+        %x_94:i32 = let %15
+        %17:bool = lt %x_94, 800i
+        if %17 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
         %x_112:ptr<function, f32, read_write> = var
         %x_113_phi:ptr<function, f32, read_write> = var
-        %19:i32 = mod %x_94, 32i
-        %20:bool = eq %19, 0i
-        if %20 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
-            %21:f32 = load %x_91
-            %22:f32 = add %21, 0.40000000596046447754f
-            store %x_104, %22
-            %23:f32 = load %x_104
-            store %x_92_phi, %23
+        %20:i32 = call %tint_mod_i32, %x_94, 32i
+        %22:bool = eq %20, 0i
+        if %22 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
+            %23:f32 = load %x_91
+            %24:f32 = add %23, 0.40000000596046447754f
+            store %x_104, %24
+            %25:f32 = load %x_104
+            store %x_92_phi, %25
             exit_if  # if_2
           }
-          %b8 = block {  # false
-            %x_106:f32 = load %thirty_two
-            %25:f32 = load %x_91
-            store %x_113_phi, %25
-            %26:f32 = convert %x_94
-            %27:f32 = round %x_106
-            %28:f32 = convert %x_94
-            %29:f32 = round %x_106
-            %30:f32 = div %28, %29
-            %31:f32 = floor %30
-            %32:f32 = mul %27, %31
-            %33:f32 = sub %26, %32
-            %34:bool = lte %33, 0.00999999977648258209f
-            if %34 [t: %b9] {  # if_3
-              %b9 = block {  # true
-                %35:f32 = load %x_91
-                %36:f32 = add %35, 100.0f
-                store %x_112, %36
-                %37:f32 = load %x_112
-                store %x_113_phi, %37
+          $B8: {  # false
+            %26:f32 = load %thirty_two
+            %x_106:f32 = let %26
+            %28:f32 = load %x_91
+            store %x_113_phi, %28
+            %29:f32 = convert %x_94
+            %30:f32 = let %29
+            %31:f32 = round %x_106
+            %32:f32 = let %31
+            %33:f32 = convert %x_94
+            %34:f32 = let %33
+            %35:f32 = round %x_106
+            %36:f32 = div %34, %35
+            %37:f32 = floor %36
+            %38:f32 = mul %32, %37
+            %39:f32 = sub %30, %38
+            %40:bool = lte %39, 0.00999999977648258209f
+            if %40 [t: $B9] {  # if_3
+              $B9: {  # true
+                %41:f32 = load %x_91
+                %42:f32 = add %41, 100.0f
+                store %x_112, %42
+                %43:f32 = load %x_112
+                store %x_113_phi, %43
                 exit_if  # if_3
               }
             }
-            %38:f32 = load %x_113_phi
-            store %x_113, %38
-            %39:f32 = load %x_113
-            store %x_92_phi, %39
+            %44:f32 = load %x_113_phi
+            store %x_113, %44
+            %45:f32 = load %x_113
+            store %x_92_phi, %45
             exit_if  # if_2
           }
         }
         %x_92:ptr<function, f32, read_write> = var
-        %41:f32 = load %x_92_phi
-        store %x_92, %41
-        %x_115:f32 = load %limit
-        %43:f32 = convert %x_94
-        %44:bool = gte %43, %x_115
-        if %44 [t: %b10] {  # if_4
-          %b10 = block {  # true
-            %45:f32 = load %x_92
-            ret %45
+        %47:f32 = load %x_92_phi
+        store %x_92, %47
+        %48:f32 = load %limit
+        %x_115:f32 = let %48
+        %50:f32 = convert %x_94
+        %51:bool = gte %50, %x_115
+        if %51 [t: $B10] {  # if_4
+          $B10: {  # true
+            %52:f32 = load %x_92
+            ret %52
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %46:i32 = add %x_94, 1i
-        store %x_95, %46
-        %47:f32 = load %x_92
-        store %x_91_phi, %47
-        %48:i32 = load %x_95
-        store %x_94_phi, %48
-        next_iteration %b3
+      $B4: {  # continuing
+        %53:i32 = add %x_94, 1i
+        store %x_95, %53
+        %54:f32 = load %x_92
+        store %x_91_phi, %54
+        %55:i32 = load %x_95
+        store %x_94_phi, %55
+        next_iteration  # -> $B3
       }
     }
-    %49:f32 = load %x_91
-    ret %49
+    %56:f32 = load %x_91
+    ret %56
   }
 }
-%main_1 = func():void -> %b11 {
-  %b11 = block {
+%main_1 = func():void {
+  $B11: {
     %c:ptr<function, vec3<f32>, read_write> = var
     %param:ptr<function, f32, read_write> = var
     %param_1:ptr<function, f32, read_write> = var
@@ -119,77 +125,106 @@
     %param_3:ptr<function, f32, read_write> = var
     %x_68_phi:ptr<function, i32, read_write> = var
     store %c, vec3<f32>(7.0f, 8.0f, 9.0f)
-    %57:ptr<uniform, vec2<f32>, read> = access %x_10, 0u
-    %x_52:f32 = load_vector_element %57, 0u
-    %59:f32 = mul %x_52, 0.125f
-    %x_54:f32 = round %59
-    %x_56:f32 = load_vector_element %gl_FragCoord, 0u
+    %64:ptr<uniform, vec2<f32>, read> = access %x_10, 0u
+    %65:f32 = load_vector_element %64, 0u
+    %x_52:f32 = let %65
+    %67:f32 = mul %x_52, 0.125f
+    %68:f32 = round %67
+    %x_54:f32 = let %68
+    %70:f32 = load_vector_element %gl_FragCoord, 0u
+    %x_56:f32 = let %70
     store %param, %x_56
     store %param_1, %x_54
-    %x_57:f32 = call %compute_value_f1_f1_, %param, %param_1
+    %72:f32 = call %compute_value_f1_f1_, %param, %param_1
+    %x_57:f32 = let %72
     store_vector_element %c, 0u, %x_57
-    %x_60:f32 = load_vector_element %gl_FragCoord, 1u
+    %74:f32 = load_vector_element %gl_FragCoord, 1u
+    %x_60:f32 = let %74
     store %param_2, %x_60
     store %param_3, %x_54
-    %x_61:f32 = call %compute_value_f1_f1_, %param_2, %param_3
+    %76:f32 = call %compute_value_f1_f1_, %param_2, %param_3
+    %x_61:f32 = let %76
     store_vector_element %c, 1u, %x_61
-    %x_63:f32 = load_vector_element %c, 0u
-    %x_64:f32 = load_vector_element %c, 1u
-    %67:f32 = add %x_63, %x_64
-    store_vector_element %c, 2u, %67
+    %78:f32 = load_vector_element %c, 0u
+    %x_63:f32 = let %78
+    %80:f32 = load_vector_element %c, 1u
+    %x_64:f32 = let %80
+    %82:f32 = add %x_63, %x_64
+    store_vector_element %c, 2u, %82
     store %x_68_phi, 0i
-    loop [b: %b12, c: %b13] {  # loop_2
-      %b12 = block {  # body
+    loop [b: $B12, c: $B13] {  # loop_2
+      $B12: {  # body
         %x_69:ptr<function, i32, read_write> = var
-        %x_68:i32 = load %x_68_phi
-        %70:bool = lt %x_68, 3i
-        if %70 [t: %b14, f: %b15] {  # if_5
-          %b14 = block {  # true
+        %84:i32 = load %x_68_phi
+        %x_68:i32 = let %84
+        %86:bool = lt %x_68, 3i
+        if %86 [t: $B14, f: $B15] {  # if_5
+          $B14: {  # true
             exit_if  # if_5
           }
-          %b15 = block {  # false
+          $B15: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_75:f32 = load_vector_element %c, %x_68
-        %72:bool = gte %x_75, 1.0f
-        if %72 [t: %b16] {  # if_6
-          %b16 = block {  # true
-            %x_79:f32 = load_vector_element %c, %x_68
-            %x_80:f32 = load_vector_element %c, %x_68
-            %75:f32 = mul %x_79, %x_80
-            store_vector_element %c, %x_68, %75
+        %87:f32 = load_vector_element %c, %x_68
+        %x_75:f32 = let %87
+        %89:bool = gte %x_75, 1.0f
+        if %89 [t: $B16] {  # if_6
+          $B16: {  # true
+            %90:f32 = load_vector_element %c, %x_68
+            %x_79:f32 = let %90
+            %92:f32 = load_vector_element %c, %x_68
+            %x_80:f32 = let %92
+            %94:f32 = mul %x_79, %x_80
+            store_vector_element %c, %x_68, %94
             exit_if  # if_6
           }
         }
-        continue %b13
+        continue  # -> $B13
       }
-      %b13 = block {  # continuing
-        %76:i32 = add %x_68, 1i
-        store %x_69, %76
-        %77:i32 = load %x_69
-        store %x_68_phi, %77
-        next_iteration %b12
+      $B13: {  # continuing
+        %95:i32 = add %x_68, 1i
+        store %x_69, %95
+        %96:i32 = load %x_69
+        store %x_68_phi, %96
+        next_iteration  # -> $B12
       }
     }
-    %x_82:vec3<f32> = load %c
-    %79:vec3<f32> = abs %x_82
-    %x_84:vec3<f32> = normalize %79
-    %81:f32 = access %x_84, 0u
-    %82:f32 = access %x_84, 1u
-    %83:f32 = access %x_84, 2u
-    %84:vec4<f32> = construct %81, %82, %83, 1.0f
-    store %x_GLF_color, %84
+    %97:vec3<f32> = load %c
+    %x_82:vec3<f32> = let %97
+    %99:vec3<f32> = abs %x_82
+    %100:vec3<f32> = normalize %99
+    %x_84:vec3<f32> = let %100
+    %102:f32 = access %x_84, 0u
+    %103:f32 = access %x_84, 1u
+    %104:f32 = access %x_84, 2u
+    %105:vec4<f32> = construct %102, %103, %104, 1.0f
+    store %x_GLF_color, %105
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b17 {
-  %b17 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B17: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %87:void = call %main_1
-    %88:vec4<f32> = load %x_GLF_color
-    %89:main_out = construct %88
-    ret %89
+    %108:void = call %main_1
+    %109:vec4<f32> = load %x_GLF_color
+    %110:main_out = construct %109
+    ret %110
+  }
+}
+%tint_mod_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B18: {
+    %113:bool = eq %rhs, 0i
+    %114:bool = eq %lhs, -2147483648i
+    %115:bool = eq %rhs, -1i
+    %116:bool = and %114, %115
+    %117:bool = or %113, %116
+    %118:i32 = select %rhs, 1i, %117
+    %119:i32 = let %118
+    %120:i32 = div %lhs, %119
+    %121:i32 = mul %120, %119
+    %122:i32 = sub %lhs, %121
+    ret %122
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/1.spvasm.expected.ir.msl
index 7ea3a9d..0c551b8 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/1.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -12,107 +12,112 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_10:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_16:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%compute_value_f1_f1_ = func(%limit:ptr<function, f32, read_write>, %thirty_two:ptr<function, f32, read_write>):f32 -> %b2 {
-  %b2 = block {
+%compute_value_f1_f1_ = func(%limit:ptr<function, f32, read_write>, %thirty_two:ptr<function, f32, read_write>):f32 {
+  $B2: {
     %x_104:ptr<function, f32, read_write> = var
     %x_107:ptr<function, i32, read_write> = var
     store %x_104, -0.5f
     store %x_107, 1i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %x_126:ptr<function, f32, read_write> = var
         %x_125:ptr<function, f32, read_write> = var
         %x_105:ptr<function, f32, read_write> = var
         %x_108:ptr<function, i32, read_write> = var
-        %14:i32 = load %x_107
-        %15:bool = lt %14, 800i
-        if %15 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %15:i32 = load %x_107
+        %16:bool = lt %15, 800i
+        if %16 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
         %x_124:ptr<function, f32, read_write> = var
-        %17:i32 = load %x_107
-        %18:i32 = mod %17, 32i
-        %19:bool = eq %18, 0i
-        if %19 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
-            %20:f32 = load %x_104
-            %21:f32 = add %20, 0.40000000596046447754f
-            store %x_126, %21
-            %22:f32 = load %x_126
-            store %x_105, %22
+        %18:i32 = load %x_107
+        %19:i32 = call %tint_mod_i32, %18, 32i
+        %21:bool = eq %19, 0i
+        if %21 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
+            %22:f32 = load %x_104
+            %23:f32 = add %22, 0.40000000596046447754f
+            store %x_126, %23
+            %24:f32 = load %x_126
+            store %x_105, %24
             exit_if  # if_2
           }
-          %b8 = block {  # false
-            %x_118:f32 = load %thirty_two
-            %24:f32 = load %x_104
-            store %x_125, %24
-            %25:i32 = load %x_107
-            %26:f32 = convert %25
-            %27:f32 = round %x_118
+          $B8: {  # false
+            %25:f32 = load %thirty_two
+            %x_118:f32 = let %25
+            %27:f32 = load %x_104
+            store %x_125, %27
             %28:i32 = load %x_107
             %29:f32 = convert %28
-            %30:f32 = round %x_118
-            %31:f32 = div %29, %30
-            %32:f32 = floor %31
-            %33:f32 = mul %27, %32
-            %34:f32 = sub %26, %33
-            %35:bool = lte %34, 0.00999999977648258209f
-            if %35 [t: %b9] {  # if_3
-              %b9 = block {  # true
-                %36:f32 = load %x_104
-                %37:f32 = add %36, 100.0f
-                store %x_124, %37
-                %38:f32 = load %x_124
-                store %x_125, %38
+            %30:f32 = let %29
+            %31:f32 = round %x_118
+            %32:f32 = let %31
+            %33:i32 = load %x_107
+            %34:f32 = convert %33
+            %35:f32 = let %34
+            %36:f32 = round %x_118
+            %37:f32 = div %35, %36
+            %38:f32 = floor %37
+            %39:f32 = mul %32, %38
+            %40:f32 = sub %30, %39
+            %41:bool = lte %40, 0.00999999977648258209f
+            if %41 [t: $B9] {  # if_3
+              $B9: {  # true
+                %42:f32 = load %x_104
+                %43:f32 = add %42, 100.0f
+                store %x_124, %43
+                %44:f32 = load %x_124
+                store %x_125, %44
                 exit_if  # if_3
               }
             }
-            %39:f32 = load %x_125
-            store %x_105, %39
+            %45:f32 = load %x_125
+            store %x_105, %45
             exit_if  # if_2
           }
         }
-        %40:i32 = load %x_107
-        %41:f32 = convert %40
-        %42:f32 = load %limit
-        %43:bool = gte %41, %42
-        if %43 [t: %b10] {  # if_4
-          %b10 = block {  # true
-            %44:f32 = load %x_105
-            ret %44
+        %46:i32 = load %x_107
+        %47:f32 = convert %46
+        %48:f32 = load %limit
+        %49:bool = gte %47, %48
+        if %49 [t: $B10] {  # if_4
+          $B10: {  # true
+            %50:f32 = load %x_105
+            ret %50
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %45:i32 = load %x_107
-        %46:i32 = add %45, 1i
-        store %x_108, %46
-        %47:f32 = load %x_105
-        store %x_104, %47
-        %48:i32 = load %x_108
-        store %x_107, %48
-        next_iteration %b3
+      $B4: {  # continuing
+        %51:i32 = load %x_107
+        %52:i32 = add %51, 1i
+        store %x_108, %52
+        %53:f32 = load %x_105
+        store %x_104, %53
+        %54:i32 = load %x_108
+        store %x_107, %54
+        next_iteration  # -> $B3
       }
     }
-    %49:f32 = load %x_104
-    ret %49
+    %55:f32 = load %x_104
+    ret %55
   }
 }
-%main_1 = func():void -> %b11 {
-  %b11 = block {
+%main_1 = func():void {
+  $B11: {
     %c:ptr<function, vec3<f32>, read_write> = var
     %param:ptr<function, f32, read_write> = var
     %param_1:ptr<function, f32, read_write> = var
@@ -121,95 +126,122 @@
     %x_54:ptr<function, vec3<f32>, read_write> = var
     %x_74:ptr<function, i32, read_write> = var
     store %c, vec3<f32>(7.0f, 8.0f, 9.0f)
-    %58:ptr<uniform, vec2<f32>, read> = access %x_10, 0u
-    %59:f32 = load_vector_element %58, 0u
-    %60:f32 = mul %59, 0.125f
-    %x_58:f32 = round %60
-    %62:f32 = load_vector_element %gl_FragCoord, 0u
-    store %param, %62
+    %64:ptr<uniform, vec2<f32>, read> = access %x_10, 0u
+    %65:f32 = load_vector_element %64, 0u
+    %66:f32 = mul %65, 0.125f
+    %67:f32 = round %66
+    %x_58:f32 = let %67
+    %69:f32 = load_vector_element %gl_FragCoord, 0u
+    store %param, %69
     store %param_1, %x_58
-    %x_61:f32 = call %compute_value_f1_f1_, %param, %param_1
+    %70:f32 = call %compute_value_f1_f1_, %param, %param_1
+    %x_61:f32 = let %70
     store_vector_element %c, 0u, %x_61
-    %64:f32 = load_vector_element %gl_FragCoord, 1u
-    store %param_2, %64
+    %72:f32 = load_vector_element %gl_FragCoord, 1u
+    store %param_2, %72
     store %param_3, %x_58
-    %x_65:f32 = call %compute_value_f1_f1_, %param_2, %param_3
+    %73:f32 = call %compute_value_f1_f1_, %param_2, %param_3
+    %x_65:f32 = let %73
     store_vector_element %c, 1u, %x_65
-    %x_67:f32 = load_vector_element %c, 0u
-    %67:vec3<f32> = load %c
-    store %x_54, %67
-    %68:f32 = load_vector_element %x_54, 1u
-    %69:f32 = add %x_67, %68
-    store_vector_element %c, 2u, %69
+    %75:f32 = load_vector_element %c, 0u
+    %x_67:f32 = let %75
+    %77:vec3<f32> = load %c
+    store %x_54, %77
+    %78:f32 = load_vector_element %x_54, 1u
+    %79:f32 = add %x_67, %78
+    store_vector_element %c, 2u, %79
     store %x_74, 0i
-    loop [b: %b12, c: %b13] {  # loop_2
-      %b12 = block {  # body
+    loop [b: $B12, c: $B13] {  # loop_2
+      $B12: {  # body
         %x_75:ptr<function, i32, read_write> = var
-        %71:i32 = load %x_74
-        %72:bool = lt %71, 3i
-        if %72 [t: %b14, f: %b15] {  # if_5
-          %b14 = block {  # true
+        %81:i32 = load %x_74
+        %82:bool = lt %81, 3i
+        if %82 [t: $B14, f: $B15] {  # if_5
+          $B14: {  # true
             exit_if  # if_5
           }
-          %b15 = block {  # false
+          $B15: {  # false
             exit_loop  # loop_2
           }
         }
-        %73:i32 = load %x_74
-        %74:f32 = load_vector_element %c, %73
-        %75:bool = gte %74, 1.0f
-        if %75 [t: %b16] {  # if_6
-          %b16 = block {  # true
-            %76:ptr<uniform, vec2<f32>, read> = access %x_16, 0u
-            %77:f32 = load_vector_element %76, 0u
-            %78:ptr<uniform, vec2<f32>, read> = access %x_16, 0u
-            %79:f32 = load_vector_element %78, 1u
-            %80:bool = gt %77, %79
-            if %80 [t: %b17] {  # if_7
-              %b17 = block {  # true
-                discard
+        %83:i32 = load %x_74
+        %84:f32 = load_vector_element %c, %83
+        %85:bool = gte %84, 1.0f
+        if %85 [t: $B16] {  # if_6
+          $B16: {  # true
+            %86:ptr<uniform, vec2<f32>, read> = access %x_16, 0u
+            %87:f32 = load_vector_element %86, 0u
+            %88:ptr<uniform, vec2<f32>, read> = access %x_16, 0u
+            %89:f32 = load_vector_element %88, 1u
+            %90:bool = gt %87, %89
+            if %90 [t: $B17] {  # if_7
+              $B17: {  # true
+                store %continue_execution, false
                 exit_if  # if_7
               }
             }
-            %81:i32 = load %x_74
-            %82:i32 = load %x_74
-            %83:f32 = load_vector_element %c, %82
-            %84:i32 = load %x_74
-            %85:f32 = load_vector_element %c, %84
-            %86:f32 = mul %83, %85
-            store_vector_element %c, %81, %86
+            %91:i32 = load %x_74
+            %92:i32 = load %x_74
+            %93:f32 = load_vector_element %c, %92
+            %94:i32 = load %x_74
+            %95:f32 = load_vector_element %c, %94
+            %96:f32 = mul %93, %95
+            store_vector_element %c, %91, %96
             exit_if  # if_6
           }
         }
-        continue %b13
+        continue  # -> $B13
       }
-      %b13 = block {  # continuing
-        %87:i32 = load %x_74
-        %88:i32 = add %87, 1i
-        store %x_75, %88
-        %89:i32 = load %x_75
-        store %x_74, %89
-        next_iteration %b12
+      $B13: {  # continuing
+        %97:i32 = load %x_74
+        %98:i32 = add %97, 1i
+        store %x_75, %98
+        %99:i32 = load %x_75
+        store %x_74, %99
+        next_iteration  # -> $B12
       }
     }
-    %90:vec3<f32> = load %c
-    %91:vec3<f32> = abs %90
-    %x_97:vec3<f32> = normalize %91
-    %93:f32 = access %x_97, 0u
-    %94:f32 = access %x_97, 1u
-    %95:f32 = access %x_97, 2u
-    %96:vec4<f32> = construct %93, %94, %95, 1.0f
-    store %x_GLF_color, %96
+    %100:vec3<f32> = load %c
+    %101:vec3<f32> = abs %100
+    %102:vec3<f32> = normalize %101
+    %x_97:vec3<f32> = let %102
+    %104:f32 = access %x_97, 0u
+    %105:f32 = access %x_97, 1u
+    %106:f32 = access %x_97, 2u
+    %107:vec4<f32> = construct %104, %105, %106, 1.0f
+    store %x_GLF_color, %107
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b18 {
-  %b18 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B18: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %99:void = call %main_1
-    %100:vec4<f32> = load %x_GLF_color
-    %101:main_out = construct %100
-    ret %101
+    %110:void = call %main_1
+    %111:vec4<f32> = load %x_GLF_color
+    %112:main_out = construct %111
+    %113:bool = load %continue_execution
+    %114:bool = eq %113, false
+    if %114 [t: $B19] {  # if_8
+      $B19: {  # true
+        terminate_invocation
+      }
+    }
+    ret %112
+  }
+}
+%tint_mod_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B20: {
+    %117:bool = eq %rhs, 0i
+    %118:bool = eq %lhs, -2147483648i
+    %119:bool = eq %rhs, -1i
+    %120:bool = and %118, %119
+    %121:bool = or %117, %120
+    %122:i32 = select %rhs, 1i, %121
+    %123:i32 = let %122
+    %124:i32 = div %lhs, %123
+    %125:i32 = mul %124, %123
+    %126:i32 = sub %lhs, %125
+    ret %126
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/1.wgsl.expected.ir.msl
index 53155ac..1c92161 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/1.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/1.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -12,111 +12,118 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_10:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_16:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%compute_value_f1_f1_ = func(%limit:ptr<function, f32, read_write>, %thirty_two:ptr<function, f32, read_write>):f32 -> %b2 {
-  %b2 = block {
+%compute_value_f1_f1_ = func(%limit:ptr<function, f32, read_write>, %thirty_two:ptr<function, f32, read_write>):f32 {
+  $B2: {
     %x_104:ptr<function, f32, read_write> = var
     %x_104_phi:ptr<function, f32, read_write> = var
     %x_107_phi:ptr<function, i32, read_write> = var
     store %x_104_phi, -0.5f
     store %x_107_phi, 1i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %x_126:ptr<function, f32, read_write> = var
         %x_125:ptr<function, f32, read_write> = var
         %x_108:ptr<function, i32, read_write> = var
         %x_105_phi:ptr<function, f32, read_write> = var
-        %15:f32 = load %x_104_phi
-        store %x_104, %15
-        %x_107:i32 = load %x_107_phi
-        %17:bool = lt %x_107, 800i
-        if %17 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %16:f32 = load %x_104_phi
+        store %x_104, %16
+        %17:i32 = load %x_107_phi
+        %x_107:i32 = let %17
+        %19:bool = lt %x_107, 800i
+        if %19 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
         %x_124:ptr<function, f32, read_write> = var
         %x_125_phi:ptr<function, f32, read_write> = var
-        %20:i32 = mod %x_107, 32i
-        %21:bool = eq %20, 0i
-        if %21 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
-            %22:f32 = load %x_104
-            %23:f32 = add %22, 0.40000000596046447754f
-            store %x_126, %23
-            %24:f32 = load %x_126
-            store %x_105_phi, %24
+        %22:i32 = call %tint_mod_i32, %x_107, 32i
+        %24:bool = eq %22, 0i
+        if %24 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
+            %25:f32 = load %x_104
+            %26:f32 = add %25, 0.40000000596046447754f
+            store %x_126, %26
+            %27:f32 = load %x_126
+            store %x_105_phi, %27
             exit_if  # if_2
           }
-          %b8 = block {  # false
-            %x_118:f32 = load %thirty_two
-            %26:f32 = load %x_104
-            store %x_125_phi, %26
-            %27:f32 = convert %x_107
-            %28:f32 = round %x_118
-            %29:f32 = convert %x_107
-            %30:f32 = round %x_118
-            %31:f32 = div %29, %30
-            %32:f32 = floor %31
-            %33:f32 = mul %28, %32
-            %34:f32 = sub %27, %33
-            %35:bool = lte %34, 0.00999999977648258209f
-            if %35 [t: %b9] {  # if_3
-              %b9 = block {  # true
-                %36:f32 = load %x_104
-                %37:f32 = add %36, 100.0f
-                store %x_124, %37
-                %38:f32 = load %x_124
-                store %x_125_phi, %38
+          $B8: {  # false
+            %28:f32 = load %thirty_two
+            %x_118:f32 = let %28
+            %30:f32 = load %x_104
+            store %x_125_phi, %30
+            %31:f32 = convert %x_107
+            %32:f32 = let %31
+            %33:f32 = round %x_118
+            %34:f32 = let %33
+            %35:f32 = convert %x_107
+            %36:f32 = let %35
+            %37:f32 = round %x_118
+            %38:f32 = div %36, %37
+            %39:f32 = floor %38
+            %40:f32 = mul %34, %39
+            %41:f32 = sub %32, %40
+            %42:bool = lte %41, 0.00999999977648258209f
+            if %42 [t: $B9] {  # if_3
+              $B9: {  # true
+                %43:f32 = load %x_104
+                %44:f32 = add %43, 100.0f
+                store %x_124, %44
+                %45:f32 = load %x_124
+                store %x_125_phi, %45
                 exit_if  # if_3
               }
             }
-            %39:f32 = load %x_125_phi
-            store %x_125, %39
-            %40:f32 = load %x_125
-            store %x_105_phi, %40
+            %46:f32 = load %x_125_phi
+            store %x_125, %46
+            %47:f32 = load %x_125
+            store %x_105_phi, %47
             exit_if  # if_2
           }
         }
         %x_105:ptr<function, f32, read_write> = var
-        %42:f32 = load %x_105_phi
-        store %x_105, %42
-        %x_128:f32 = load %limit
-        %44:f32 = convert %x_107
-        %45:bool = gte %44, %x_128
-        if %45 [t: %b10] {  # if_4
-          %b10 = block {  # true
-            %46:f32 = load %x_105
-            ret %46
+        %49:f32 = load %x_105_phi
+        store %x_105, %49
+        %50:f32 = load %limit
+        %x_128:f32 = let %50
+        %52:f32 = convert %x_107
+        %53:bool = gte %52, %x_128
+        if %53 [t: $B10] {  # if_4
+          $B10: {  # true
+            %54:f32 = load %x_105
+            ret %54
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %47:i32 = add %x_107, 1i
-        store %x_108, %47
-        %48:f32 = load %x_105
-        store %x_104_phi, %48
-        %49:i32 = load %x_108
-        store %x_107_phi, %49
-        next_iteration %b3
+      $B4: {  # continuing
+        %55:i32 = add %x_107, 1i
+        store %x_108, %55
+        %56:f32 = load %x_105
+        store %x_104_phi, %56
+        %57:i32 = load %x_108
+        store %x_107_phi, %57
+        next_iteration  # -> $B3
       }
     }
-    %50:f32 = load %x_104
-    ret %50
+    %58:f32 = load %x_104
+    ret %58
   }
 }
-%main_1 = func():void -> %b11 {
-  %b11 = block {
+%main_1 = func():void {
+  $B11: {
     %c:ptr<function, vec3<f32>, read_write> = var
     %param:ptr<function, f32, read_write> = var
     %param_1:ptr<function, f32, read_write> = var
@@ -125,90 +132,129 @@
     %x_54:ptr<function, vec3<f32>, read_write> = var
     %x_74_phi:ptr<function, i32, read_write> = var
     store %c, vec3<f32>(7.0f, 8.0f, 9.0f)
-    %59:ptr<uniform, vec2<f32>, read> = access %x_10, 0u
-    %x_56:f32 = load_vector_element %59, 0u
-    %61:f32 = mul %x_56, 0.125f
-    %x_58:f32 = round %61
-    %x_60:f32 = load_vector_element %gl_FragCoord, 0u
+    %67:ptr<uniform, vec2<f32>, read> = access %x_10, 0u
+    %68:f32 = load_vector_element %67, 0u
+    %x_56:f32 = let %68
+    %70:f32 = mul %x_56, 0.125f
+    %71:f32 = round %70
+    %x_58:f32 = let %71
+    %73:f32 = load_vector_element %gl_FragCoord, 0u
+    %x_60:f32 = let %73
     store %param, %x_60
     store %param_1, %x_58
-    %x_61:f32 = call %compute_value_f1_f1_, %param, %param_1
+    %75:f32 = call %compute_value_f1_f1_, %param, %param_1
+    %x_61:f32 = let %75
     store_vector_element %c, 0u, %x_61
-    %x_64:f32 = load_vector_element %gl_FragCoord, 1u
+    %77:f32 = load_vector_element %gl_FragCoord, 1u
+    %x_64:f32 = let %77
     store %param_2, %x_64
     store %param_3, %x_58
-    %x_65:f32 = call %compute_value_f1_f1_, %param_2, %param_3
+    %79:f32 = call %compute_value_f1_f1_, %param_2, %param_3
+    %x_65:f32 = let %79
     store_vector_element %c, 1u, %x_65
-    %x_67:f32 = load_vector_element %c, 0u
-    %x_68:vec3<f32> = load %c
+    %81:f32 = load_vector_element %c, 0u
+    %x_67:f32 = let %81
+    %83:vec3<f32> = load %c
+    %x_68:vec3<f32> = let %83
     store %x_54, %x_68
-    %x_70:f32 = load_vector_element %x_54, 1u
-    %70:f32 = add %x_67, %x_70
-    store_vector_element %c, 2u, %70
+    %85:f32 = load_vector_element %x_54, 1u
+    %x_70:f32 = let %85
+    %87:f32 = add %x_67, %x_70
+    store_vector_element %c, 2u, %87
     store %x_74_phi, 0i
-    loop [b: %b12, c: %b13] {  # loop_2
-      %b12 = block {  # body
+    loop [b: $B12, c: $B13] {  # loop_2
+      $B12: {  # body
         %x_75:ptr<function, i32, read_write> = var
-        %x_74:i32 = load %x_74_phi
-        %73:bool = lt %x_74, 3i
-        if %73 [t: %b14, f: %b15] {  # if_5
-          %b14 = block {  # true
+        %89:i32 = load %x_74_phi
+        %x_74:i32 = let %89
+        %91:bool = lt %x_74, 3i
+        if %91 [t: $B14, f: $B15] {  # if_5
+          $B14: {  # true
             exit_if  # if_5
           }
-          %b15 = block {  # false
+          $B15: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_81:f32 = load_vector_element %c, %x_74
-        %75:bool = gte %x_81, 1.0f
-        if %75 [t: %b16] {  # if_6
-          %b16 = block {  # true
-            %76:ptr<uniform, vec2<f32>, read> = access %x_16, 0u
-            %x_86:f32 = load_vector_element %76, 0u
-            %78:ptr<uniform, vec2<f32>, read> = access %x_16, 0u
-            %x_88:f32 = load_vector_element %78, 1u
-            %80:bool = gt %x_86, %x_88
-            if %80 [t: %b17] {  # if_7
-              %b17 = block {  # true
-                discard
+        %92:f32 = load_vector_element %c, %x_74
+        %x_81:f32 = let %92
+        %94:bool = gte %x_81, 1.0f
+        if %94 [t: $B16] {  # if_6
+          $B16: {  # true
+            %95:ptr<uniform, vec2<f32>, read> = access %x_16, 0u
+            %96:f32 = load_vector_element %95, 0u
+            %x_86:f32 = let %96
+            %98:ptr<uniform, vec2<f32>, read> = access %x_16, 0u
+            %99:f32 = load_vector_element %98, 1u
+            %x_88:f32 = let %99
+            %101:bool = gt %x_86, %x_88
+            if %101 [t: $B17] {  # if_7
+              $B17: {  # true
+                store %continue_execution, false
                 exit_if  # if_7
               }
             }
-            %x_92:f32 = load_vector_element %c, %x_74
-            %x_93:f32 = load_vector_element %c, %x_74
-            %83:f32 = mul %x_92, %x_93
-            store_vector_element %c, %x_74, %83
+            %102:f32 = load_vector_element %c, %x_74
+            %x_92:f32 = let %102
+            %104:f32 = load_vector_element %c, %x_74
+            %x_93:f32 = let %104
+            %106:f32 = mul %x_92, %x_93
+            store_vector_element %c, %x_74, %106
             exit_if  # if_6
           }
         }
-        continue %b13
+        continue  # -> $B13
       }
-      %b13 = block {  # continuing
-        %84:i32 = add %x_74, 1i
-        store %x_75, %84
-        %85:i32 = load %x_75
-        store %x_74_phi, %85
-        next_iteration %b12
+      $B13: {  # continuing
+        %107:i32 = add %x_74, 1i
+        store %x_75, %107
+        %108:i32 = load %x_75
+        store %x_74_phi, %108
+        next_iteration  # -> $B12
       }
     }
-    %x_95:vec3<f32> = load %c
-    %87:vec3<f32> = abs %x_95
-    %x_97:vec3<f32> = normalize %87
-    %89:f32 = access %x_97, 0u
-    %90:f32 = access %x_97, 1u
-    %91:f32 = access %x_97, 2u
-    %92:vec4<f32> = construct %89, %90, %91, 1.0f
-    store %x_GLF_color, %92
+    %109:vec3<f32> = load %c
+    %x_95:vec3<f32> = let %109
+    %111:vec3<f32> = abs %x_95
+    %112:vec3<f32> = normalize %111
+    %x_97:vec3<f32> = let %112
+    %114:f32 = access %x_97, 0u
+    %115:f32 = access %x_97, 1u
+    %116:f32 = access %x_97, 2u
+    %117:vec4<f32> = construct %114, %115, %116, 1.0f
+    store %x_GLF_color, %117
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b18 {
-  %b18 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B18: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %95:void = call %main_1
-    %96:vec4<f32> = load %x_GLF_color
-    %97:main_out = construct %96
-    ret %97
+    %120:void = call %main_1
+    %121:vec4<f32> = load %x_GLF_color
+    %122:main_out = construct %121
+    %123:bool = load %continue_execution
+    %124:bool = eq %123, false
+    if %124 [t: $B19] {  # if_8
+      $B19: {  # true
+        terminate_invocation
+      }
+    }
+    ret %122
+  }
+}
+%tint_mod_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B20: {
+    %127:bool = eq %rhs, 0i
+    %128:bool = eq %lhs, -2147483648i
+    %129:bool = eq %rhs, -1i
+    %130:bool = and %128, %129
+    %131:bool = or %127, %130
+    %132:i32 = select %rhs, 1i, %131
+    %133:i32 = let %132
+    %134:i32 = div %lhs, %133
+    %135:i32 = mul %134, %133
+    %136:i32 = sub %lhs, %135
+    ret %136
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-simple-loop/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-simple-loop/1.spvasm.expected.ir.msl
index 3aced45..83eee8e 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-simple-loop/1.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-simple-loop/1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -12,90 +12,96 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_13:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_19:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%compute_value_f1_f1_ = func(%limit:ptr<function, f32, read_write>, %thirty_two:ptr<function, f32, read_write>):f32 -> %b2 {
-  %b2 = block {
+%compute_value_f1_f1_ = func(%limit:ptr<function, f32, read_write>, %thirty_two:ptr<function, f32, read_write>):f32 {
+  $B2: {
     %result:ptr<function, f32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     store %result, -0.5f
     store %i, 1i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %10:i32 = load %i
         %11:bool = lt %10, 800i
-        if %11 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %11 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
         %12:i32 = load %i
-        %13:i32 = mod %12, 32i
-        %14:bool = eq %13, 0i
-        if %14 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
-            %15:f32 = load %result
-            %16:f32 = add %15, 0.40000000596046447754f
-            store %result, %16
+        %13:i32 = call %tint_mod_i32, %12, 32i
+        %15:bool = eq %13, 0i
+        if %15 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
+            %16:f32 = load %result
+            %17:f32 = add %16, 0.40000000596046447754f
+            store %result, %17
             exit_if  # if_2
           }
-          %b8 = block {  # false
-            %x_157:f32 = load %thirty_two
-            %18:i32 = load %i
-            %19:f32 = convert %18
-            %20:f32 = round %x_157
-            %21:i32 = load %i
-            %22:f32 = convert %21
+          $B8: {  # false
+            %18:f32 = load %thirty_two
+            %x_157:f32 = let %18
+            %20:i32 = load %i
+            %21:f32 = convert %20
+            %22:f32 = let %21
             %23:f32 = round %x_157
-            %24:f32 = div %22, %23
-            %25:f32 = floor %24
-            %26:f32 = mul %20, %25
-            %27:f32 = sub %19, %26
-            %28:bool = lte %27, 0.00999999977648258209f
-            if %28 [t: %b9] {  # if_3
-              %b9 = block {  # true
-                %29:f32 = load %result
-                %30:f32 = add %29, 100.0f
-                store %result, %30
+            %24:f32 = let %23
+            %25:i32 = load %i
+            %26:f32 = convert %25
+            %27:f32 = let %26
+            %28:f32 = round %x_157
+            %29:f32 = div %27, %28
+            %30:f32 = floor %29
+            %31:f32 = mul %24, %30
+            %32:f32 = sub %22, %31
+            %33:bool = lte %32, 0.00999999977648258209f
+            if %33 [t: $B9] {  # if_3
+              $B9: {  # true
+                %34:f32 = load %result
+                %35:f32 = add %34, 100.0f
+                store %result, %35
                 exit_if  # if_3
               }
             }
             exit_if  # if_2
           }
         }
-        %31:i32 = load %i
-        %32:f32 = convert %31
-        %33:f32 = load %limit
-        %34:bool = gte %32, %33
-        if %34 [t: %b10] {  # if_4
-          %b10 = block {  # true
-            %x_171:f32 = load %result
+        %36:i32 = load %i
+        %37:f32 = convert %36
+        %38:f32 = load %limit
+        %39:bool = gte %37, %38
+        if %39 [t: $B10] {  # if_4
+          $B10: {  # true
+            %40:f32 = load %result
+            %x_171:f32 = let %40
             ret %x_171
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %36:i32 = load %i
-        %37:i32 = add %36, 1i
-        store %i, %37
-        next_iteration %b3
+      $B4: {  # continuing
+        %42:i32 = load %i
+        %43:i32 = add %42, 1i
+        store %i, %43
+        next_iteration  # -> $B3
       }
     }
-    %x_174:f32 = load %result
+    %44:f32 = load %result
+    %x_174:f32 = let %44
     ret %x_174
   }
 }
-%main_1 = func():void -> %b11 {
-  %b11 = block {
+%main_1 = func():void {
+  $B11: {
     %c:ptr<function, vec3<f32>, read_write> = var
     %thirty_two_1:ptr<function, f32, read_write> = var
     %param:ptr<function, f32, read_write> = var
@@ -106,131 +112,151 @@
     %i_1:ptr<function, i32, read_write> = var
     %j:ptr<function, f32, read_write> = var
     store %c, vec3<f32>(7.0f, 8.0f, 9.0f)
-    %49:ptr<uniform, vec2<f32>, read> = access %x_13, 0u
-    %50:f32 = load_vector_element %49, 0u
-    %51:f32 = div %50, 8.0f
-    %52:f32 = round %51
-    store %thirty_two_1, %52
-    %53:f32 = load_vector_element %gl_FragCoord, 0u
-    store %param, %53
-    %54:f32 = load %thirty_two_1
-    store %param_1, %54
-    %x_69:f32 = call %compute_value_f1_f1_, %param, %param_1
+    %56:ptr<uniform, vec2<f32>, read> = access %x_13, 0u
+    %57:f32 = load_vector_element %56, 0u
+    %58:f32 = div %57, 8.0f
+    %59:f32 = round %58
+    store %thirty_two_1, %59
+    %60:f32 = load_vector_element %gl_FragCoord, 0u
+    store %param, %60
+    %61:f32 = load %thirty_two_1
+    store %param_1, %61
+    %62:f32 = call %compute_value_f1_f1_, %param, %param_1
+    %x_69:f32 = let %62
     store_vector_element %c, 0u, %x_69
-    %56:f32 = load_vector_element %gl_FragCoord, 1u
-    store %param_2, %56
-    %57:f32 = load %thirty_two_1
-    store %param_3, %57
-    %x_74:f32 = call %compute_value_f1_f1_, %param_2, %param_3
+    %64:f32 = load_vector_element %gl_FragCoord, 1u
+    store %param_2, %64
+    %65:f32 = load %thirty_two_1
+    store %param_3, %65
+    %66:f32 = call %compute_value_f1_f1_, %param_2, %param_3
+    %x_74:f32 = let %66
     store_vector_element %c, 1u, %x_74
-    %x_77:f32 = load_vector_element %c, 0u
-    if true [t: %b12, f: %b13] {  # if_5
-      %b12 = block {  # true
-        %60:vec3<f32> = load %c
-        store %x_61, %60
+    %68:f32 = load_vector_element %c, 0u
+    %x_77:f32 = let %68
+    if true [t: $B12, f: $B13] {  # if_5
+      $B12: {  # true
+        %70:vec3<f32> = load %c
+        store %x_61, %70
         exit_if  # if_5
       }
-      %b13 = block {  # false
-        %61:vec3<f32> = load %c
-        %62:ptr<uniform, vec2<f32>, read> = access %x_19, 0u
-        %63:f32 = load_vector_element %62, 0u
-        %64:vec3<f32> = mul %61, %63
-        store %x_61, %64
+      $B13: {  # false
+        %71:vec3<f32> = load %c
+        %72:ptr<uniform, vec2<f32>, read> = access %x_19, 0u
+        %73:f32 = load_vector_element %72, 0u
+        %74:vec3<f32> = mul %71, %73
+        store %x_61, %74
         exit_if  # if_5
       }
     }
-    %65:f32 = load_vector_element %x_61, 1u
-    %66:f32 = add %x_77, %65
-    store_vector_element %c, 2u, %66
+    %75:f32 = load_vector_element %x_61, 1u
+    %76:f32 = add %x_77, %75
+    store_vector_element %c, 2u, %76
     store %i_1, 0i
-    loop [b: %b14, c: %b15] {  # loop_2
-      %b14 = block {  # body
-        %67:i32 = load %i_1
-        %68:bool = lt %67, 3i
-        if %68 [t: %b16, f: %b17] {  # if_6
-          %b16 = block {  # true
+    loop [b: $B14, c: $B15] {  # loop_2
+      $B14: {  # body
+        %77:i32 = load %i_1
+        %78:bool = lt %77, 3i
+        if %78 [t: $B16, f: $B17] {  # if_6
+          $B16: {  # true
             exit_if  # if_6
           }
-          %b17 = block {  # false
+          $B17: {  # false
             exit_loop  # loop_2
           }
         }
-        %69:i32 = load %i_1
-        %70:f32 = load_vector_element %c, %69
-        %71:bool = gte %70, 1.0f
-        if %71 [t: %b18] {  # if_7
-          %b18 = block {  # true
-            %x_103:i32 = load %i_1
-            %73:i32 = load %i_1
-            %74:f32 = load_vector_element %c, %73
-            %75:i32 = load %i_1
-            %76:f32 = load_vector_element %c, %75
-            %77:f32 = mul %74, %76
-            store_vector_element %c, %x_103, %77
+        %79:i32 = load %i_1
+        %80:f32 = load_vector_element %c, %79
+        %81:bool = gte %80, 1.0f
+        if %81 [t: $B18] {  # if_7
+          $B18: {  # true
+            %82:i32 = load %i_1
+            %x_103:i32 = let %82
+            %84:i32 = load %i_1
+            %85:f32 = load_vector_element %c, %84
+            %86:i32 = load %i_1
+            %87:f32 = load_vector_element %c, %86
+            %88:f32 = mul %85, %87
+            store_vector_element %c, %x_103, %88
             exit_if  # if_7
           }
         }
         store %j, 0.0f
-        loop [b: %b19, c: %b20] {  # loop_3
-          %b19 = block {  # body
-            %78:ptr<uniform, vec2<f32>, read> = access %x_19, 0u
-            %79:f32 = load_vector_element %78, 0u
-            %80:ptr<uniform, vec2<f32>, read> = access %x_19, 0u
-            %81:f32 = load_vector_element %80, 1u
-            %82:bool = gt %79, %81
-            if %82 [t: %b21, f: %b22] {  # if_8
-              %b21 = block {  # true
+        loop [b: $B19, c: $B20] {  # loop_3
+          $B19: {  # body
+            %89:ptr<uniform, vec2<f32>, read> = access %x_19, 0u
+            %90:f32 = load_vector_element %89, 0u
+            %91:ptr<uniform, vec2<f32>, read> = access %x_19, 0u
+            %92:f32 = load_vector_element %91, 1u
+            %93:bool = gt %90, %92
+            if %93 [t: $B21, f: $B22] {  # if_8
+              $B21: {  # true
                 exit_if  # if_8
               }
-              %b22 = block {  # false
+              $B22: {  # false
                 exit_loop  # loop_3
               }
             }
-            %83:f32 = load %j
-            %84:ptr<uniform, vec2<f32>, read> = access %x_19, 0u
-            %85:f32 = load_vector_element %84, 0u
-            %86:bool = gte %83, %85
-            if %86 [t: %b23] {  # if_9
-              %b23 = block {  # true
+            %94:f32 = load %j
+            %95:ptr<uniform, vec2<f32>, read> = access %x_19, 0u
+            %96:f32 = load_vector_element %95, 0u
+            %97:bool = gte %94, %96
+            if %97 [t: $B23] {  # if_9
+              $B23: {  # true
                 exit_loop  # loop_3
               }
             }
-            %87:f32 = load %j
-            %88:f32 = add %87, 1.0f
-            store %j, %88
-            continue %b20
+            %98:f32 = load %j
+            %99:f32 = add %98, 1.0f
+            store %j, %99
+            continue  # -> $B20
           }
-          %b20 = block {  # continuing
-            next_iteration %b19
+          $B20: {  # continuing
+            next_iteration  # -> $B19
           }
         }
-        continue %b15
+        continue  # -> $B15
       }
-      %b15 = block {  # continuing
-        %89:i32 = load %i_1
-        %90:i32 = add %89, 1i
-        store %i_1, %90
-        next_iteration %b14
+      $B15: {  # continuing
+        %100:i32 = load %i_1
+        %101:i32 = add %100, 1i
+        store %i_1, %101
+        next_iteration  # -> $B14
       }
     }
-    %91:vec3<f32> = load %c
-    %92:vec3<f32> = abs %91
-    %x_134:vec3<f32> = normalize %92
-    %94:f32 = access %x_134, 0u
-    %95:f32 = access %x_134, 1u
-    %96:f32 = access %x_134, 2u
-    %97:vec4<f32> = construct %94, %95, %96, 1.0f
-    store %x_GLF_color, %97
+    %102:vec3<f32> = load %c
+    %103:vec3<f32> = abs %102
+    %104:vec3<f32> = normalize %103
+    %x_134:vec3<f32> = let %104
+    %106:f32 = access %x_134, 0u
+    %107:f32 = access %x_134, 1u
+    %108:f32 = access %x_134, 2u
+    %109:vec4<f32> = construct %106, %107, %108, 1.0f
+    store %x_GLF_color, %109
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b24 {
-  %b24 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B24: {
     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
+    %112:void = call %main_1
+    %113:vec4<f32> = load %x_GLF_color
+    %114:main_out = construct %113
+    ret %114
+  }
+}
+%tint_mod_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B25: {
+    %117:bool = eq %rhs, 0i
+    %118:bool = eq %lhs, -2147483648i
+    %119:bool = eq %rhs, -1i
+    %120:bool = and %118, %119
+    %121:bool = or %117, %120
+    %122:i32 = select %rhs, 1i, %121
+    %123:i32 = let %122
+    %124:i32 = div %lhs, %123
+    %125:i32 = mul %124, %123
+    %126:i32 = sub %lhs, %125
+    ret %126
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-simple-loop/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-simple-loop/1.wgsl.expected.ir.msl
index d4b836c..6d49353 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-simple-loop/1.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-simple-loop/1.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -12,89 +12,103 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_13:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_19:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%compute_value_f1_f1_ = func(%limit:ptr<function, f32, read_write>, %thirty_two:ptr<function, f32, read_write>):f32 -> %b2 {
-  %b2 = block {
+%compute_value_f1_f1_ = func(%limit:ptr<function, f32, read_write>, %thirty_two:ptr<function, f32, read_write>):f32 {
+  $B2: {
     %result:ptr<function, f32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     store %result, -0.5f
     store %i, 1i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_144:i32 = load %i
-        %11:bool = lt %x_144, 800i
-        if %11 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %10:i32 = load %i
+        %x_144:i32 = let %10
+        %12:bool = lt %x_144, 800i
+        if %12 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_147:i32 = load %i
-        %13:i32 = mod %x_147, 32i
-        %14:bool = eq %13, 0i
-        if %14 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
-            %x_153:f32 = load %result
-            %16:f32 = add %x_153, 0.40000000596046447754f
-            store %result, %16
+        %13:i32 = load %i
+        %x_147:i32 = let %13
+        %15:i32 = call %tint_mod_i32, %x_147, 32i
+        %17:bool = eq %15, 0i
+        if %17 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
+            %18:f32 = load %result
+            %x_153:f32 = let %18
+            %20:f32 = add %x_153, 0.40000000596046447754f
+            store %result, %20
             exit_if  # if_2
           }
-          %b8 = block {  # false
-            %x_155:i32 = load %i
-            %x_157:f32 = load %thirty_two
-            %19:f32 = convert %x_155
-            %20:f32 = round %x_157
-            %21:f32 = convert %x_155
-            %22:f32 = round %x_157
-            %23:f32 = div %21, %22
-            %24:f32 = floor %23
-            %25:f32 = mul %20, %24
-            %26:f32 = sub %19, %25
-            %27:bool = lte %26, 0.00999999977648258209f
-            if %27 [t: %b9] {  # if_3
-              %b9 = block {  # true
-                %x_163:f32 = load %result
-                %29:f32 = add %x_163, 100.0f
-                store %result, %29
+          $B8: {  # false
+            %21:i32 = load %i
+            %x_155:i32 = let %21
+            %23:f32 = load %thirty_two
+            %x_157:f32 = let %23
+            %25:f32 = convert %x_155
+            %26:f32 = let %25
+            %27:f32 = round %x_157
+            %28:f32 = let %27
+            %29:f32 = convert %x_155
+            %30:f32 = let %29
+            %31:f32 = round %x_157
+            %32:f32 = div %30, %31
+            %33:f32 = floor %32
+            %34:f32 = mul %28, %33
+            %35:f32 = sub %26, %34
+            %36:bool = lte %35, 0.00999999977648258209f
+            if %36 [t: $B9] {  # if_3
+              $B9: {  # true
+                %37:f32 = load %result
+                %x_163:f32 = let %37
+                %39:f32 = add %x_163, 100.0f
+                store %result, %39
                 exit_if  # if_3
               }
             }
             exit_if  # if_2
           }
         }
-        %x_165:i32 = load %i
-        %x_167:f32 = load %limit
-        %32:f32 = convert %x_165
-        %33:bool = gte %32, %x_167
-        if %33 [t: %b10] {  # if_4
-          %b10 = block {  # true
-            %x_171:f32 = load %result
+        %40:i32 = load %i
+        %x_165:i32 = let %40
+        %42:f32 = load %limit
+        %x_167:f32 = let %42
+        %44:f32 = convert %x_165
+        %45:bool = gte %44, %x_167
+        if %45 [t: $B10] {  # if_4
+          $B10: {  # true
+            %46:f32 = load %result
+            %x_171:f32 = let %46
             ret %x_171
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_172:i32 = load %i
-        %36:i32 = add %x_172, 1i
-        store %i, %36
-        next_iteration %b3
+      $B4: {  # continuing
+        %48:i32 = load %i
+        %x_172:i32 = let %48
+        %50:i32 = add %x_172, 1i
+        store %i, %50
+        next_iteration  # -> $B3
       }
     }
-    %x_174:f32 = load %result
+    %51:f32 = load %result
+    %x_174:f32 = let %51
     ret %x_174
   }
 }
-%main_1 = func():void -> %b11 {
-  %b11 = block {
+%main_1 = func():void {
+  $B11: {
     %c:ptr<function, vec3<f32>, read_write> = var
     %thirty_two_1:ptr<function, f32, read_write> = var
     %param:ptr<function, f32, read_write> = var
@@ -105,131 +119,174 @@
     %i_1:ptr<function, i32, read_write> = var
     %j:ptr<function, f32, read_write> = var
     store %c, vec3<f32>(7.0f, 8.0f, 9.0f)
-    %48:ptr<uniform, vec2<f32>, read> = access %x_13, 0u
-    %x_63:f32 = load_vector_element %48, 0u
-    %50:f32 = div %x_63, 8.0f
-    %51:f32 = round %50
-    store %thirty_two_1, %51
-    %x_67:f32 = load_vector_element %gl_FragCoord, 0u
+    %63:ptr<uniform, vec2<f32>, read> = access %x_13, 0u
+    %64:f32 = load_vector_element %63, 0u
+    %x_63:f32 = let %64
+    %66:f32 = div %x_63, 8.0f
+    %67:f32 = round %66
+    store %thirty_two_1, %67
+    %68:f32 = load_vector_element %gl_FragCoord, 0u
+    %x_67:f32 = let %68
     store %param, %x_67
-    %x_68:f32 = load %thirty_two_1
+    %70:f32 = load %thirty_two_1
+    %x_68:f32 = let %70
     store %param_1, %x_68
-    %x_69:f32 = call %compute_value_f1_f1_, %param, %param_1
+    %72:f32 = call %compute_value_f1_f1_, %param, %param_1
+    %x_69:f32 = let %72
     store_vector_element %c, 0u, %x_69
-    %x_72:f32 = load_vector_element %gl_FragCoord, 1u
+    %74:f32 = load_vector_element %gl_FragCoord, 1u
+    %x_72:f32 = let %74
     store %param_2, %x_72
-    %x_73:f32 = load %thirty_two_1
+    %76:f32 = load %thirty_two_1
+    %x_73:f32 = let %76
     store %param_3, %x_73
-    %x_74:f32 = call %compute_value_f1_f1_, %param_2, %param_3
+    %78:f32 = call %compute_value_f1_f1_, %param_2, %param_3
+    %x_74:f32 = let %78
     store_vector_element %c, 1u, %x_74
-    %x_77:f32 = load_vector_element %c, 0u
-    if true [t: %b12, f: %b13] {  # if_5
-      %b12 = block {  # true
-        %x_81:vec3<f32> = load %c
+    %80:f32 = load_vector_element %c, 0u
+    %x_77:f32 = let %80
+    if true [t: $B12, f: $B13] {  # if_5
+      $B12: {  # true
+        %82:vec3<f32> = load %c
+        %x_81:vec3<f32> = let %82
         store %x_61, %x_81
         exit_if  # if_5
       }
-      %b13 = block {  # false
-        %x_82:vec3<f32> = load %c
-        %61:ptr<uniform, vec2<f32>, read> = access %x_19, 0u
-        %x_84:f32 = load_vector_element %61, 0u
-        %63:vec3<f32> = mul %x_82, %x_84
-        store %x_61, %63
+      $B13: {  # false
+        %84:vec3<f32> = load %c
+        %x_82:vec3<f32> = let %84
+        %86:ptr<uniform, vec2<f32>, read> = access %x_19, 0u
+        %87:f32 = load_vector_element %86, 0u
+        %x_84:f32 = let %87
+        %89:vec3<f32> = mul %x_82, %x_84
+        store %x_61, %89
         exit_if  # if_5
       }
     }
-    %x_87:f32 = load_vector_element %x_61, 1u
-    %65:f32 = add %x_77, %x_87
-    store_vector_element %c, 2u, %65
+    %90:f32 = load_vector_element %x_61, 1u
+    %x_87:f32 = let %90
+    %92:f32 = add %x_77, %x_87
+    store_vector_element %c, 2u, %92
     store %i_1, 0i
-    loop [b: %b14, c: %b15] {  # loop_2
-      %b14 = block {  # body
-        %x_94:i32 = load %i_1
-        %67:bool = lt %x_94, 3i
-        if %67 [t: %b16, f: %b17] {  # if_6
-          %b16 = block {  # true
+    loop [b: $B14, c: $B15] {  # loop_2
+      $B14: {  # body
+        %93:i32 = load %i_1
+        %x_94:i32 = let %93
+        %95:bool = lt %x_94, 3i
+        if %95 [t: $B16, f: $B17] {  # if_6
+          $B16: {  # true
             exit_if  # if_6
           }
-          %b17 = block {  # false
+          $B17: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_97:i32 = load %i_1
-        %x_99:f32 = load_vector_element %c, %x_97
-        %70:bool = gte %x_99, 1.0f
-        if %70 [t: %b18] {  # if_7
-          %b18 = block {  # true
-            %x_103:i32 = load %i_1
-            %x_104:i32 = load %i_1
-            %x_106:f32 = load_vector_element %c, %x_104
-            %x_107:i32 = load %i_1
-            %x_109:f32 = load_vector_element %c, %x_107
-            %76:f32 = mul %x_106, %x_109
-            store_vector_element %c, %x_103, %76
+        %96:i32 = load %i_1
+        %x_97:i32 = let %96
+        %98:f32 = load_vector_element %c, %x_97
+        %x_99:f32 = let %98
+        %100:bool = gte %x_99, 1.0f
+        if %100 [t: $B18] {  # if_7
+          $B18: {  # true
+            %101:i32 = load %i_1
+            %x_103:i32 = let %101
+            %103:i32 = load %i_1
+            %x_104:i32 = let %103
+            %105:f32 = load_vector_element %c, %x_104
+            %x_106:f32 = let %105
+            %107:i32 = load %i_1
+            %x_107:i32 = let %107
+            %109:f32 = load_vector_element %c, %x_107
+            %x_109:f32 = let %109
+            %111:f32 = mul %x_106, %x_109
+            store_vector_element %c, %x_103, %111
             exit_if  # if_7
           }
         }
         store %j, 0.0f
-        loop [b: %b19, c: %b20] {  # loop_3
-          %b19 = block {  # body
-            %77:ptr<uniform, vec2<f32>, read> = access %x_19, 0u
-            %x_117:f32 = load_vector_element %77, 0u
-            %79:ptr<uniform, vec2<f32>, read> = access %x_19, 0u
-            %x_119:f32 = load_vector_element %79, 1u
-            %81:bool = gt %x_117, %x_119
-            if %81 [t: %b21, f: %b22] {  # if_8
-              %b21 = block {  # true
+        loop [b: $B19, c: $B20] {  # loop_3
+          $B19: {  # body
+            %112:ptr<uniform, vec2<f32>, read> = access %x_19, 0u
+            %113:f32 = load_vector_element %112, 0u
+            %x_117:f32 = let %113
+            %115:ptr<uniform, vec2<f32>, read> = access %x_19, 0u
+            %116:f32 = load_vector_element %115, 1u
+            %x_119:f32 = let %116
+            %118:bool = gt %x_117, %x_119
+            if %118 [t: $B21, f: $B22] {  # if_8
+              $B21: {  # true
                 exit_if  # if_8
               }
-              %b22 = block {  # false
+              $B22: {  # false
                 exit_loop  # loop_3
               }
             }
-            %x_122:f32 = load %j
-            %83:ptr<uniform, vec2<f32>, read> = access %x_19, 0u
-            %x_124:f32 = load_vector_element %83, 0u
-            %85:bool = gte %x_122, %x_124
-            if %85 [t: %b23] {  # if_9
-              %b23 = block {  # true
+            %119:f32 = load %j
+            %x_122:f32 = let %119
+            %121:ptr<uniform, vec2<f32>, read> = access %x_19, 0u
+            %122:f32 = load_vector_element %121, 0u
+            %x_124:f32 = let %122
+            %124:bool = gte %x_122, %x_124
+            if %124 [t: $B23] {  # if_9
+              $B23: {  # true
                 exit_loop  # loop_3
               }
             }
-            %x_128:f32 = load %j
-            %87:f32 = add %x_128, 1.0f
-            store %j, %87
-            continue %b20
+            %125:f32 = load %j
+            %x_128:f32 = let %125
+            %127:f32 = add %x_128, 1.0f
+            store %j, %127
+            continue  # -> $B20
           }
-          %b20 = block {  # continuing
-            next_iteration %b19
+          $B20: {  # continuing
+            next_iteration  # -> $B19
           }
         }
-        continue %b15
+        continue  # -> $B15
       }
-      %b15 = block {  # continuing
-        %x_130:i32 = load %i_1
-        %89:i32 = add %x_130, 1i
-        store %i_1, %89
-        next_iteration %b14
+      $B15: {  # continuing
+        %128:i32 = load %i_1
+        %x_130:i32 = let %128
+        %130:i32 = add %x_130, 1i
+        store %i_1, %130
+        next_iteration  # -> $B14
       }
     }
-    %x_132:vec3<f32> = load %c
-    %91:vec3<f32> = abs %x_132
-    %x_134:vec3<f32> = normalize %91
-    %93:f32 = access %x_134, 0u
-    %94:f32 = access %x_134, 1u
-    %95:f32 = access %x_134, 2u
-    %96:vec4<f32> = construct %93, %94, %95, 1.0f
-    store %x_GLF_color, %96
+    %131:vec3<f32> = load %c
+    %x_132:vec3<f32> = let %131
+    %133:vec3<f32> = abs %x_132
+    %134:vec3<f32> = normalize %133
+    %x_134:vec3<f32> = let %134
+    %136:f32 = access %x_134, 0u
+    %137:f32 = access %x_134, 1u
+    %138:f32 = access %x_134, 2u
+    %139:vec4<f32> = construct %136, %137, %138, 1.0f
+    store %x_GLF_color, %139
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b24 {
-  %b24 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B24: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %99:void = call %main_1
-    %100:vec4<f32> = load %x_GLF_color
-    %101:main_out = construct %100
-    ret %101
+    %142:void = call %main_1
+    %143:vec4<f32> = load %x_GLF_color
+    %144:main_out = construct %143
+    ret %144
+  }
+}
+%tint_mod_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B25: {
+    %147:bool = eq %rhs, 0i
+    %148:bool = eq %lhs, -2147483648i
+    %149:bool = eq %rhs, -1i
+    %150:bool = and %148, %149
+    %151:bool = or %147, %150
+    %152:i32 = select %rhs, 1i, %151
+    %153:i32 = let %152
+    %154:i32 = div %lhs, %153
+    %155:i32 = mul %154, %153
+    %156:i32 = sub %lhs, %155
+    ret %156
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-vec3-values-from-matrix/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-vec3-values-from-matrix/1.spvasm.expected.ir.msl
index 5d2b07b..f0cc3fa 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-vec3-values-from-matrix/1.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-vec3-values-from-matrix/1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,89 +8,95 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_13:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%compute_value_f1_f1_ = func(%limit:ptr<function, f32, read_write>, %thirty_two:ptr<function, f32, read_write>):f32 -> %b2 {
-  %b2 = block {
+%compute_value_f1_f1_ = func(%limit:ptr<function, f32, read_write>, %thirty_two:ptr<function, f32, read_write>):f32 {
+  $B2: {
     %result:ptr<function, f32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     store %result, -0.5f
     store %i, 1i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %9:i32 = load %i
         %10:bool = lt %9, 800i
-        if %10 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %10 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
         %11:i32 = load %i
-        %12:i32 = mod %11, 32i
-        %13:bool = eq %12, 0i
-        if %13 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
-            %14:f32 = load %result
-            %15:f32 = add %14, 0.40000000596046447754f
-            store %result, %15
+        %12:i32 = call %tint_mod_i32, %11, 32i
+        %14:bool = eq %12, 0i
+        if %14 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
+            %15:f32 = load %result
+            %16:f32 = add %15, 0.40000000596046447754f
+            store %result, %16
             exit_if  # if_2
           }
-          %b8 = block {  # false
-            %x_149:f32 = load %thirty_two
-            %17:i32 = load %i
-            %18:f32 = convert %17
-            %19:f32 = round %x_149
-            %20:i32 = load %i
-            %21:f32 = convert %20
+          $B8: {  # false
+            %17:f32 = load %thirty_two
+            %x_149:f32 = let %17
+            %19:i32 = load %i
+            %20:f32 = convert %19
+            %21:f32 = let %20
             %22:f32 = round %x_149
-            %23:f32 = div %21, %22
-            %24:f32 = floor %23
-            %25:f32 = mul %19, %24
-            %26:f32 = sub %18, %25
-            %27:bool = lte %26, 0.00999999977648258209f
-            if %27 [t: %b9] {  # if_3
-              %b9 = block {  # true
-                %28:f32 = load %result
-                %29:f32 = add %28, 100.0f
-                store %result, %29
+            %23:f32 = let %22
+            %24:i32 = load %i
+            %25:f32 = convert %24
+            %26:f32 = let %25
+            %27:f32 = round %x_149
+            %28:f32 = div %26, %27
+            %29:f32 = floor %28
+            %30:f32 = mul %23, %29
+            %31:f32 = sub %21, %30
+            %32:bool = lte %31, 0.00999999977648258209f
+            if %32 [t: $B9] {  # if_3
+              $B9: {  # true
+                %33:f32 = load %result
+                %34:f32 = add %33, 100.0f
+                store %result, %34
                 exit_if  # if_3
               }
             }
             exit_if  # if_2
           }
         }
-        %30:i32 = load %i
-        %31:f32 = convert %30
-        %32:f32 = load %limit
-        %33:bool = gte %31, %32
-        if %33 [t: %b10] {  # if_4
-          %b10 = block {  # true
-            %x_163:f32 = load %result
+        %35:i32 = load %i
+        %36:f32 = convert %35
+        %37:f32 = load %limit
+        %38:bool = gte %36, %37
+        if %38 [t: $B10] {  # if_4
+          $B10: {  # true
+            %39:f32 = load %result
+            %x_163:f32 = let %39
             ret %x_163
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %35:i32 = load %i
-        %36:i32 = add %35, 1i
-        store %i, %36
-        next_iteration %b3
+      $B4: {  # continuing
+        %41:i32 = load %i
+        %42:i32 = add %41, 1i
+        store %i, %42
+        next_iteration  # -> $B3
       }
     }
-    %x_166:f32 = load %result
+    %43:f32 = load %result
+    %x_166:f32 = let %43
     ret %x_166
   }
 }
-%main_1 = func():void -> %b11 {
-  %b11 = block {
+%main_1 = func():void {
+  $B11: {
     %c:ptr<function, vec3<f32>, read_write> = var
     %thirty_two_1:ptr<function, f32, read_write> = var
     %param:ptr<function, f32, read_write> = var
@@ -99,101 +105,123 @@
     %param_3:ptr<function, f32, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
     store %c, vec3<f32>(7.0f, 8.0f, 9.0f)
-    %46:ptr<uniform, vec2<f32>, read> = access %x_13, 0u
-    %47:f32 = load_vector_element %46, 0u
-    %48:f32 = div %47, 8.0f
-    %49:f32 = round %48
-    store %thirty_two_1, %49
-    %50:f32 = load_vector_element %gl_FragCoord, 0u
-    store %param, %50
-    %51:f32 = load %thirty_two_1
-    store %param_1, %51
-    %x_69:f32 = call %compute_value_f1_f1_, %param, %param_1
+    %53:ptr<uniform, vec2<f32>, read> = access %x_13, 0u
+    %54:f32 = load_vector_element %53, 0u
+    %55:f32 = div %54, 8.0f
+    %56:f32 = round %55
+    store %thirty_two_1, %56
+    %57:f32 = load_vector_element %gl_FragCoord, 0u
+    store %param, %57
+    %58:f32 = load %thirty_two_1
+    store %param_1, %58
+    %59:f32 = call %compute_value_f1_f1_, %param, %param_1
+    %x_69:f32 = let %59
     store_vector_element %c, 0u, %x_69
-    %53:f32 = load_vector_element %gl_FragCoord, 1u
-    store %param_2, %53
-    %54:f32 = load %thirty_two_1
-    store %param_3, %54
-    %x_74:f32 = call %compute_value_f1_f1_, %param_2, %param_3
+    %61:f32 = load_vector_element %gl_FragCoord, 1u
+    store %param_2, %61
+    %62:f32 = load %thirty_two_1
+    store %param_3, %62
+    %63:f32 = call %compute_value_f1_f1_, %param_2, %param_3
+    %x_74:f32 = let %63
     store_vector_element %c, 1u, %x_74
-    %56:f32 = load_vector_element %c, 0u
-    %57:f32 = load_vector_element %c, 1u
-    %58:vec2<f32> = construct %56, %57
-    %59:f32 = load_vector_element %c, 2u
-    %60:vec2<f32> = construct %59, 1.0f
-    %x_87:mat4x2<f32> = construct %58, %60, vec2<f32>(1.0f, 0.0f), vec2<f32>(1.0f, 0.0f)
-    %62:vec3<f32> = load %c
-    %63:vec3<f32> = mul %62, mat3x3<f32>(vec3<f32>(1.0f, 0.0f, 0.0f), vec3<f32>(0.0f, 1.0f, 0.0f), vec3<f32>(0.0f, 0.0f, 1.0f))
-    %64:f32 = access %63, 0u
-    %65:f32 = access %x_87, 0u, 0u
-    %66:f32 = access %x_87, 0u, 1u
-    %67:f32 = access %x_87, 1u, 0u
-    %68:vec3<f32> = construct %65, %66, %67
-    %69:f32 = access %68, 1u
-    %70:f32 = add %64, %69
-    store_vector_element %c, 2u, %70
+    %65:f32 = load_vector_element %c, 0u
+    %66:f32 = load_vector_element %c, 1u
+    %67:vec2<f32> = construct %65, %66
+    %68:vec2<f32> = let %67
+    %69:f32 = load_vector_element %c, 2u
+    %70:vec2<f32> = construct %69, 1.0f
+    %71:mat4x2<f32> = construct %68, %70, vec2<f32>(1.0f, 0.0f), vec2<f32>(1.0f, 0.0f)
+    %x_87:mat4x2<f32> = let %71
+    %73:vec3<f32> = load %c
+    %74:vec3<f32> = mul %73, mat3x3<f32>(vec3<f32>(1.0f, 0.0f, 0.0f), vec3<f32>(0.0f, 1.0f, 0.0f), vec3<f32>(0.0f, 0.0f, 1.0f))
+    %75:f32 = access %74, 0u
+    %76:f32 = let %75
+    %77:f32 = access %x_87, 0u, 0u
+    %78:f32 = access %x_87, 0u, 1u
+    %79:f32 = access %x_87, 1u, 0u
+    %80:vec3<f32> = construct %77, %78, %79
+    %81:f32 = access %80, 1u
+    %82:f32 = add %76, %81
+    store_vector_element %c, 2u, %82
     store %i_1, 0i
-    loop [b: %b12, c: %b13] {  # loop_2
-      %b12 = block {  # body
-        %71:i32 = load %i_1
-        %72:bool = lt %71, 3i
-        if %72 [t: %b14, f: %b15] {  # if_5
-          %b14 = block {  # true
+    loop [b: $B12, c: $B13] {  # loop_2
+      $B12: {  # body
+        %83:i32 = load %i_1
+        %84:bool = lt %83, 3i
+        if %84 [t: $B14, f: $B15] {  # if_5
+          $B14: {  # true
             exit_if  # if_5
           }
-          %b15 = block {  # false
+          $B15: {  # false
             exit_loop  # loop_2
           }
         }
-        %73:i32 = load %i_1
-        %74:f32 = load_vector_element %c, %73
-        %75:bool = gte %74, 1.0f
-        if %75 [t: %b16] {  # if_6
-          %b16 = block {  # true
-            %x_108:i32 = load %i_1
-            %77:i32 = load %i_1
-            %78:f32 = load_vector_element %c, %77
-            %79:i32 = load %i_1
-            %80:f32 = load_vector_element %c, %79
-            %81:f32 = mul %78, %80
-            store_vector_element %c, %x_108, %81
-            %82:f32 = load_vector_element %gl_FragCoord, 1u
-            %83:bool = lt %82, 0.0f
-            if %83 [t: %b17] {  # if_7
-              %b17 = block {  # true
+        %85:i32 = load %i_1
+        %86:f32 = load_vector_element %c, %85
+        %87:bool = gte %86, 1.0f
+        if %87 [t: $B16] {  # if_6
+          $B16: {  # true
+            %88:i32 = load %i_1
+            %x_108:i32 = let %88
+            %90:i32 = load %i_1
+            %91:f32 = load_vector_element %c, %90
+            %92:i32 = load %i_1
+            %93:f32 = load_vector_element %c, %92
+            %94:f32 = mul %91, %93
+            store_vector_element %c, %x_108, %94
+            %95:f32 = load_vector_element %gl_FragCoord, 1u
+            %96:bool = lt %95, 0.0f
+            if %96 [t: $B17] {  # if_7
+              $B17: {  # true
                 exit_loop  # loop_2
               }
             }
             exit_if  # if_6
           }
         }
-        continue %b13
+        continue  # -> $B13
       }
-      %b13 = block {  # continuing
-        %84:i32 = load %i_1
-        %85:i32 = add %84, 1i
-        store %i_1, %85
-        next_iteration %b12
+      $B13: {  # continuing
+        %97:i32 = load %i_1
+        %98:i32 = add %97, 1i
+        store %i_1, %98
+        next_iteration  # -> $B12
       }
     }
-    %86:vec3<f32> = load %c
-    %87:vec3<f32> = abs %86
-    %x_126:vec3<f32> = normalize %87
-    %89:f32 = access %x_126, 0u
-    %90:f32 = access %x_126, 1u
-    %91:f32 = access %x_126, 2u
-    %92:vec4<f32> = construct %89, %90, %91, 1.0f
-    store %x_GLF_color, %92
+    %99:vec3<f32> = load %c
+    %100:vec3<f32> = abs %99
+    %101:vec3<f32> = normalize %100
+    %x_126:vec3<f32> = let %101
+    %103:f32 = access %x_126, 0u
+    %104:f32 = access %x_126, 1u
+    %105:f32 = access %x_126, 2u
+    %106:vec4<f32> = construct %103, %104, %105, 1.0f
+    store %x_GLF_color, %106
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b18 {
-  %b18 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B18: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %95:void = call %main_1
-    %96:vec4<f32> = load %x_GLF_color
-    %97:main_out = construct %96
-    ret %97
+    %109:void = call %main_1
+    %110:vec4<f32> = load %x_GLF_color
+    %111:main_out = construct %110
+    ret %111
+  }
+}
+%tint_mod_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B19: {
+    %114:bool = eq %rhs, 0i
+    %115:bool = eq %lhs, -2147483648i
+    %116:bool = eq %rhs, -1i
+    %117:bool = and %115, %116
+    %118:bool = or %114, %117
+    %119:i32 = select %rhs, 1i, %118
+    %120:i32 = let %119
+    %121:i32 = div %lhs, %120
+    %122:i32 = mul %121, %120
+    %123:i32 = sub %lhs, %122
+    ret %123
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-vec3-values-from-matrix/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-vec3-values-from-matrix/1.wgsl.expected.ir.msl
index 583ee90..e193c6b 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-vec3-values-from-matrix/1.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-vec3-values-from-matrix/1.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,88 +8,102 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_13:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%compute_value_f1_f1_ = func(%limit:ptr<function, f32, read_write>, %thirty_two:ptr<function, f32, read_write>):f32 -> %b2 {
-  %b2 = block {
+%compute_value_f1_f1_ = func(%limit:ptr<function, f32, read_write>, %thirty_two:ptr<function, f32, read_write>):f32 {
+  $B2: {
     %result:ptr<function, f32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     store %result, -0.5f
     store %i, 1i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_136:i32 = load %i
-        %10:bool = lt %x_136, 800i
-        if %10 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %9:i32 = load %i
+        %x_136:i32 = let %9
+        %11:bool = lt %x_136, 800i
+        if %11 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_139:i32 = load %i
-        %12:i32 = mod %x_139, 32i
-        %13:bool = eq %12, 0i
-        if %13 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
-            %x_145:f32 = load %result
-            %15:f32 = add %x_145, 0.40000000596046447754f
-            store %result, %15
+        %12:i32 = load %i
+        %x_139:i32 = let %12
+        %14:i32 = call %tint_mod_i32, %x_139, 32i
+        %16:bool = eq %14, 0i
+        if %16 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
+            %17:f32 = load %result
+            %x_145:f32 = let %17
+            %19:f32 = add %x_145, 0.40000000596046447754f
+            store %result, %19
             exit_if  # if_2
           }
-          %b8 = block {  # false
-            %x_147:i32 = load %i
-            %x_149:f32 = load %thirty_two
-            %18:f32 = convert %x_147
-            %19:f32 = round %x_149
-            %20:f32 = convert %x_147
-            %21:f32 = round %x_149
-            %22:f32 = div %20, %21
-            %23:f32 = floor %22
-            %24:f32 = mul %19, %23
-            %25:f32 = sub %18, %24
-            %26:bool = lte %25, 0.00999999977648258209f
-            if %26 [t: %b9] {  # if_3
-              %b9 = block {  # true
-                %x_155:f32 = load %result
-                %28:f32 = add %x_155, 100.0f
-                store %result, %28
+          $B8: {  # false
+            %20:i32 = load %i
+            %x_147:i32 = let %20
+            %22:f32 = load %thirty_two
+            %x_149:f32 = let %22
+            %24:f32 = convert %x_147
+            %25:f32 = let %24
+            %26:f32 = round %x_149
+            %27:f32 = let %26
+            %28:f32 = convert %x_147
+            %29:f32 = let %28
+            %30:f32 = round %x_149
+            %31:f32 = div %29, %30
+            %32:f32 = floor %31
+            %33:f32 = mul %27, %32
+            %34:f32 = sub %25, %33
+            %35:bool = lte %34, 0.00999999977648258209f
+            if %35 [t: $B9] {  # if_3
+              $B9: {  # true
+                %36:f32 = load %result
+                %x_155:f32 = let %36
+                %38:f32 = add %x_155, 100.0f
+                store %result, %38
                 exit_if  # if_3
               }
             }
             exit_if  # if_2
           }
         }
-        %x_157:i32 = load %i
-        %x_159:f32 = load %limit
-        %31:f32 = convert %x_157
-        %32:bool = gte %31, %x_159
-        if %32 [t: %b10] {  # if_4
-          %b10 = block {  # true
-            %x_163:f32 = load %result
+        %39:i32 = load %i
+        %x_157:i32 = let %39
+        %41:f32 = load %limit
+        %x_159:f32 = let %41
+        %43:f32 = convert %x_157
+        %44:bool = gte %43, %x_159
+        if %44 [t: $B10] {  # if_4
+          $B10: {  # true
+            %45:f32 = load %result
+            %x_163:f32 = let %45
             ret %x_163
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_164:i32 = load %i
-        %35:i32 = add %x_164, 1i
-        store %i, %35
-        next_iteration %b3
+      $B4: {  # continuing
+        %47:i32 = load %i
+        %x_164:i32 = let %47
+        %49:i32 = add %x_164, 1i
+        store %i, %49
+        next_iteration  # -> $B3
       }
     }
-    %x_166:f32 = load %result
+    %50:f32 = load %result
+    %x_166:f32 = let %50
     ret %x_166
   }
 }
-%main_1 = func():void -> %b11 {
-  %b11 = block {
+%main_1 = func():void {
+  $B11: {
     %c:ptr<function, vec3<f32>, read_write> = var
     %thirty_two_1:ptr<function, f32, read_write> = var
     %param:ptr<function, f32, read_write> = var
@@ -98,102 +112,140 @@
     %param_3:ptr<function, f32, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
     store %c, vec3<f32>(7.0f, 8.0f, 9.0f)
-    %45:ptr<uniform, vec2<f32>, read> = access %x_13, 0u
-    %x_63:f32 = load_vector_element %45, 0u
-    %47:f32 = div %x_63, 8.0f
-    %48:f32 = round %47
-    store %thirty_two_1, %48
-    %x_67:f32 = load_vector_element %gl_FragCoord, 0u
+    %60:ptr<uniform, vec2<f32>, read> = access %x_13, 0u
+    %61:f32 = load_vector_element %60, 0u
+    %x_63:f32 = let %61
+    %63:f32 = div %x_63, 8.0f
+    %64:f32 = round %63
+    store %thirty_two_1, %64
+    %65:f32 = load_vector_element %gl_FragCoord, 0u
+    %x_67:f32 = let %65
     store %param, %x_67
-    %x_68:f32 = load %thirty_two_1
+    %67:f32 = load %thirty_two_1
+    %x_68:f32 = let %67
     store %param_1, %x_68
-    %x_69:f32 = call %compute_value_f1_f1_, %param, %param_1
+    %69:f32 = call %compute_value_f1_f1_, %param, %param_1
+    %x_69:f32 = let %69
     store_vector_element %c, 0u, %x_69
-    %x_72:f32 = load_vector_element %gl_FragCoord, 1u
+    %71:f32 = load_vector_element %gl_FragCoord, 1u
+    %x_72:f32 = let %71
     store %param_2, %x_72
-    %x_73:f32 = load %thirty_two_1
+    %73:f32 = load %thirty_two_1
+    %x_73:f32 = let %73
     store %param_3, %x_73
-    %x_74:f32 = call %compute_value_f1_f1_, %param_2, %param_3
+    %75:f32 = call %compute_value_f1_f1_, %param_2, %param_3
+    %x_74:f32 = let %75
     store_vector_element %c, 1u, %x_74
-    %x_76:vec3<f32> = load %c
-    %x_79:vec3<f32> = load %c
-    %57:f32 = access %x_79, 0u
-    %58:f32 = access %x_79, 1u
-    %59:vec2<f32> = construct %57, %58
-    %60:f32 = access %x_79, 2u
-    %61:vec2<f32> = construct %60, 1.0f
-    %x_87:mat4x2<f32> = construct %59, %61, vec2<f32>(1.0f, 0.0f), vec2<f32>(1.0f, 0.0f)
-    %63:vec3<f32> = mul %x_76, mat3x3<f32>(vec3<f32>(1.0f, 0.0f, 0.0f), vec3<f32>(0.0f, 1.0f, 0.0f), vec3<f32>(0.0f, 0.0f, 1.0f))
-    %64:f32 = access %63, 0u
-    %65:f32 = access %x_87, 0u, 0u
-    %66:f32 = access %x_87, 0u, 1u
-    %67:f32 = access %x_87, 1u, 0u
-    %68:vec3<f32> = construct %65, %66, %67
-    %69:f32 = access %68, 1u
-    %70:f32 = add %64, %69
-    store_vector_element %c, 2u, %70
+    %77:vec3<f32> = load %c
+    %x_76:vec3<f32> = let %77
+    %79:vec3<f32> = load %c
+    %x_79:vec3<f32> = let %79
+    %81:f32 = access %x_79, 0u
+    %82:f32 = access %x_79, 1u
+    %83:vec2<f32> = construct %81, %82
+    %84:vec2<f32> = let %83
+    %85:f32 = access %x_79, 2u
+    %86:vec2<f32> = construct %85, 1.0f
+    %87:mat4x2<f32> = construct %84, %86, vec2<f32>(1.0f, 0.0f), vec2<f32>(1.0f, 0.0f)
+    %x_87:mat4x2<f32> = let %87
+    %89:vec3<f32> = mul %x_76, mat3x3<f32>(vec3<f32>(1.0f, 0.0f, 0.0f), vec3<f32>(0.0f, 1.0f, 0.0f), vec3<f32>(0.0f, 0.0f, 1.0f))
+    %90:f32 = access %89, 0u
+    %91:f32 = access %x_87, 0u, 0u
+    %92:f32 = access %x_87, 0u, 1u
+    %93:f32 = access %x_87, 1u, 0u
+    %94:vec3<f32> = construct %91, %92, %93
+    %95:f32 = access %94, 1u
+    %96:f32 = add %90, %95
+    store_vector_element %c, 2u, %96
     store %i_1, 0i
-    loop [b: %b12, c: %b13] {  # loop_2
-      %b12 = block {  # body
-        %x_99:i32 = load %i_1
-        %72:bool = lt %x_99, 3i
-        if %72 [t: %b14, f: %b15] {  # if_5
-          %b14 = block {  # true
+    loop [b: $B12, c: $B13] {  # loop_2
+      $B12: {  # body
+        %97:i32 = load %i_1
+        %x_99:i32 = let %97
+        %99:bool = lt %x_99, 3i
+        if %99 [t: $B14, f: $B15] {  # if_5
+          $B14: {  # true
             exit_if  # if_5
           }
-          %b15 = block {  # false
+          $B15: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_102:i32 = load %i_1
-        %x_104:f32 = load_vector_element %c, %x_102
-        %75:bool = gte %x_104, 1.0f
-        if %75 [t: %b16] {  # if_6
-          %b16 = block {  # true
-            %x_108:i32 = load %i_1
-            %x_109:i32 = load %i_1
-            %x_111:f32 = load_vector_element %c, %x_109
-            %x_112:i32 = load %i_1
-            %x_114:f32 = load_vector_element %c, %x_112
-            %81:f32 = mul %x_111, %x_114
-            store_vector_element %c, %x_108, %81
-            %x_118:f32 = load_vector_element %gl_FragCoord, 1u
-            %83:bool = lt %x_118, 0.0f
-            if %83 [t: %b17] {  # if_7
-              %b17 = block {  # true
+        %100:i32 = load %i_1
+        %x_102:i32 = let %100
+        %102:f32 = load_vector_element %c, %x_102
+        %x_104:f32 = let %102
+        %104:bool = gte %x_104, 1.0f
+        if %104 [t: $B16] {  # if_6
+          $B16: {  # true
+            %105:i32 = load %i_1
+            %x_108:i32 = let %105
+            %107:i32 = load %i_1
+            %x_109:i32 = let %107
+            %109:f32 = load_vector_element %c, %x_109
+            %x_111:f32 = let %109
+            %111:i32 = load %i_1
+            %x_112:i32 = let %111
+            %113:f32 = load_vector_element %c, %x_112
+            %x_114:f32 = let %113
+            %115:f32 = mul %x_111, %x_114
+            store_vector_element %c, %x_108, %115
+            %116:f32 = load_vector_element %gl_FragCoord, 1u
+            %x_118:f32 = let %116
+            %118:bool = lt %x_118, 0.0f
+            if %118 [t: $B17] {  # if_7
+              $B17: {  # true
                 exit_loop  # loop_2
               }
             }
             exit_if  # if_6
           }
         }
-        continue %b13
+        continue  # -> $B13
       }
-      %b13 = block {  # continuing
-        %x_122:i32 = load %i_1
-        %85:i32 = add %x_122, 1i
-        store %i_1, %85
-        next_iteration %b12
+      $B13: {  # continuing
+        %119:i32 = load %i_1
+        %x_122:i32 = let %119
+        %121:i32 = add %x_122, 1i
+        store %i_1, %121
+        next_iteration  # -> $B12
       }
     }
-    %x_124:vec3<f32> = load %c
-    %87:vec3<f32> = abs %x_124
-    %x_126:vec3<f32> = normalize %87
-    %89:f32 = access %x_126, 0u
-    %90:f32 = access %x_126, 1u
-    %91:f32 = access %x_126, 2u
-    %92:vec4<f32> = construct %89, %90, %91, 1.0f
-    store %x_GLF_color, %92
+    %122:vec3<f32> = load %c
+    %x_124:vec3<f32> = let %122
+    %124:vec3<f32> = abs %x_124
+    %125:vec3<f32> = normalize %124
+    %x_126:vec3<f32> = let %125
+    %127:f32 = access %x_126, 0u
+    %128:f32 = access %x_126, 1u
+    %129:f32 = access %x_126, 2u
+    %130:vec4<f32> = construct %127, %128, %129, 1.0f
+    store %x_GLF_color, %130
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b18 {
-  %b18 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B18: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %95:void = call %main_1
-    %96:vec4<f32> = load %x_GLF_color
-    %97:main_out = construct %96
-    ret %97
+    %133:void = call %main_1
+    %134:vec4<f32> = load %x_GLF_color
+    %135:main_out = construct %134
+    ret %135
+  }
+}
+%tint_mod_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B19: {
+    %138:bool = eq %rhs, 0i
+    %139:bool = eq %lhs, -2147483648i
+    %140:bool = eq %rhs, -1i
+    %141:bool = and %139, %140
+    %142:bool = or %138, %141
+    %143:i32 = select %rhs, 1i, %142
+    %144:i32 = let %143
+    %145:i32 = div %lhs, %144
+    %146:i32 = mul %145, %144
+    %147:i32 = sub %lhs, %146
+    ret %147
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-mergesort-clamped-conditional-bit-shift/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-mergesort-clamped-conditional-bit-shift/1.spvasm.expected.ir.msl
index d072e0c..b2976f3 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-mergesort-clamped-conditional-bit-shift/1.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/stable-mergesort-clamped-conditional-bit-shift/1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,207 +8,224 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %data:ptr<private, array<i32, 10>, read_write> = var
   %temp:ptr<private, array<i32, 10>, read_write> = var
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_34:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%merge_i1_i1_i1_ = func(%f:ptr<function, i32, read_write>, %mid:ptr<function, i32, read_write>, %to:ptr<function, i32, read_write>):void -> %b2 {
-  %b2 = block {
+%merge_i1_i1_i1_ = func(%f:ptr<function, i32, read_write>, %mid:ptr<function, i32, read_write>, %to:ptr<function, i32, read_write>):void {
+  $B2: {
     %k:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %j:ptr<function, i32, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
-    %14:i32 = load %f
-    store %k, %14
     %15:i32 = load %f
-    store %i, %15
-    %16:i32 = load %mid
-    %17:i32 = add %16, 1i
-    store %j, %17
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %18:i32 = load %i
-        %19:i32 = load %mid
-        %20:bool = lte %18, %19
-        %21:i32 = load %j
-        %22:i32 = load %to
-        %23:bool = lte %21, %22
-        %24:bool = and %20, %23
-        if %24 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    store %k, %15
+    %16:i32 = load %f
+    store %i, %16
+    %17:i32 = load %mid
+    %18:i32 = add %17, 1i
+    store %j, %18
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %19:i32 = load %i
+        %20:i32 = load %mid
+        %21:bool = lte %19, %20
+        %22:i32 = load %j
+        %23:i32 = load %to
+        %24:bool = lte %22, %23
+        %25:bool = and %21, %24
+        if %25 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %25:i32 = load %i
-        %26:ptr<private, i32, read_write> = access %data, %25
-        %27:i32 = load %26
-        %28:i32 = load %j
-        %29:ptr<private, i32, read_write> = access %data, %28
-        %30:i32 = load %29
-        %31:bool = lt %27, %30
-        if %31 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
-            %x_286:i32 = load %k
+        %26:i32 = load %i
+        %27:ptr<private, i32, read_write> = access %data, %26
+        %28:i32 = load %27
+        %29:i32 = load %j
+        %30:ptr<private, i32, read_write> = access %data, %29
+        %31:i32 = load %30
+        %32:bool = lt %28, %31
+        if %32 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
             %33:i32 = load %k
-            %34:i32 = add %33, 1i
-            store %k, %34
-            %x_288:i32 = load %i
-            %36:i32 = load %i
-            %37:i32 = add %36, 1i
-            store %i, %37
-            %38:ptr<private, i32, read_write> = access %temp, %x_286
-            %39:ptr<private, i32, read_write> = access %data, %x_288
-            %40:i32 = load %39
-            store %38, %40
+            %x_286:i32 = let %33
+            %35:i32 = load %k
+            %36:i32 = add %35, 1i
+            store %k, %36
+            %37:i32 = load %i
+            %x_288:i32 = let %37
+            %39:i32 = load %i
+            %40:i32 = add %39, 1i
+            store %i, %40
+            %41:ptr<private, i32, read_write> = access %temp, %x_286
+            %42:ptr<private, i32, read_write> = access %data, %x_288
+            %43:i32 = load %42
+            store %41, %43
             exit_if  # if_2
           }
-          %b8 = block {  # false
-            %x_293:i32 = load %k
-            %42:i32 = load %k
-            %43:i32 = add %42, 1i
-            store %k, %43
-            %x_295:i32 = load %j
-            %45:i32 = load %j
-            %46:i32 = add %45, 1i
-            store %j, %46
-            %47:ptr<private, i32, read_write> = access %temp, %x_293
-            %48:ptr<private, i32, read_write> = access %data, %x_295
-            %49:i32 = load %48
-            store %47, %49
+          $B8: {  # false
+            %44:i32 = load %k
+            %x_293:i32 = let %44
+            %46:i32 = load %k
+            %47:i32 = add %46, 1i
+            store %k, %47
+            %48:i32 = load %j
+            %x_295:i32 = let %48
+            %50:i32 = load %j
+            %51:i32 = add %50, 1i
+            store %j, %51
+            %52:ptr<private, i32, read_write> = access %temp, %x_293
+            %53:ptr<private, i32, read_write> = access %data, %x_295
+            %54:i32 = load %53
+            store %52, %54
             exit_if  # if_2
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
-    loop [b: %b9, c: %b10] {  # loop_2
-      %b9 = block {  # body
-        %50:i32 = load %i
-        %51:bool = lt %50, 10i
-        %52:i32 = load %i
-        %53:i32 = load %mid
-        %54:bool = lte %52, %53
-        %55:bool = and %51, %54
-        if %55 [t: %b11, f: %b12] {  # if_3
-          %b11 = block {  # true
+    loop [b: $B9, c: $B10] {  # loop_2
+      $B9: {  # body
+        %55:i32 = load %i
+        %56:bool = lt %55, 10i
+        %57:i32 = load %i
+        %58:i32 = load %mid
+        %59:bool = lte %57, %58
+        %60:bool = and %56, %59
+        if %60 [t: $B11, f: $B12] {  # if_3
+          $B11: {  # true
             exit_if  # if_3
           }
-          %b12 = block {  # false
+          $B12: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_311:i32 = load %k
-        %57:i32 = load %k
-        %58:i32 = add %57, 1i
-        store %k, %58
-        %x_313:i32 = load %i
-        %60:i32 = load %i
-        %61:i32 = add %60, 1i
-        store %i, %61
-        %62:ptr<private, i32, read_write> = access %temp, %x_311
-        %63:ptr<private, i32, read_write> = access %data, %x_313
-        %64:i32 = load %63
-        store %62, %64
-        continue %b10
+        %61:i32 = load %k
+        %x_311:i32 = let %61
+        %63:i32 = load %k
+        %64:i32 = add %63, 1i
+        store %k, %64
+        %65:i32 = load %i
+        %x_313:i32 = let %65
+        %67:i32 = load %i
+        %68:i32 = add %67, 1i
+        store %i, %68
+        %69:ptr<private, i32, read_write> = access %temp, %x_311
+        %70:ptr<private, i32, read_write> = access %data, %x_313
+        %71:i32 = load %70
+        store %69, %71
+        continue  # -> $B10
       }
-      %b10 = block {  # continuing
-        next_iteration %b9
+      $B10: {  # continuing
+        next_iteration  # -> $B9
       }
     }
-    %65:i32 = load %f
-    store %i_1, %65
-    loop [b: %b13, c: %b14] {  # loop_3
-      %b13 = block {  # body
-        %66:i32 = load %i_1
-        %67:i32 = load %to
-        %68:bool = lte %66, %67
-        if %68 [t: %b15, f: %b16] {  # if_4
-          %b15 = block {  # true
+    %72:i32 = load %f
+    store %i_1, %72
+    loop [b: $B13, c: $B14] {  # loop_3
+      $B13: {  # body
+        %73:i32 = load %i_1
+        %74:i32 = load %to
+        %75:bool = lte %73, %74
+        if %75 [t: $B15, f: $B16] {  # if_4
+          $B15: {  # true
             exit_if  # if_4
           }
-          %b16 = block {  # false
+          $B16: {  # false
             exit_loop  # loop_3
           }
         }
-        %x_327:i32 = load %i_1
-        %70:ptr<private, i32, read_write> = access %data, %x_327
-        %71:i32 = load %i_1
-        %72:ptr<private, i32, read_write> = access %temp, %71
-        %73:i32 = load %72
-        store %70, %73
-        continue %b14
+        %76:i32 = load %i_1
+        %x_327:i32 = let %76
+        %78:ptr<private, i32, read_write> = access %data, %x_327
+        %79:i32 = load %i_1
+        %80:ptr<private, i32, read_write> = access %temp, %79
+        %81:i32 = load %80
+        store %78, %81
+        continue  # -> $B14
       }
-      %b14 = block {  # continuing
-        %74:i32 = load %i_1
-        %75:i32 = add %74, 1i
-        store %i_1, %75
-        next_iteration %b13
+      $B14: {  # continuing
+        %82:i32 = load %i_1
+        %83:i32 = add %82, 1i
+        store %i_1, %83
+        next_iteration  # -> $B13
       }
     }
     ret
   }
 }
-%func_i1_i1_ = func(%m:ptr<function, i32, read_write>, %high:ptr<function, i32, read_write>):i32 -> %b17 {
-  %b17 = block {
+%func_i1_i1_ = func(%m:ptr<function, i32, read_write>, %high:ptr<function, i32, read_write>):i32 {
+  $B17: {
     %x:ptr<function, i32, read_write> = var
     %x_335:ptr<function, i32, read_write> = var
     %x_336:ptr<function, i32, read_write> = var
-    %82:f32 = load_vector_element %gl_FragCoord, 0u
-    %83:bool = gte %82, 0.0f
-    if %83 [t: %b18, f: %b19] {  # if_5
-      %b18 = block {  # true
-        if false [t: %b20, f: %b21] {  # if_6
-          %b20 = block {  # true
-            %84:i32 = load %high
-            %85:i32 = shiftl %84, 0u
-            store %x_336, %85
+    %90:f32 = load_vector_element %gl_FragCoord, 0u
+    %91:bool = gte %90, 0.0f
+    if %91 [t: $B18, f: $B19] {  # if_5
+      $B18: {  # true
+        if false [t: $B20, f: $B21] {  # if_6
+          $B20: {  # true
+            %92:i32 = load %high
+            %93:u32 = and 0u, 31u
+            %94:i32 = shl %92, %93
+            store %x_336, %94
             exit_if  # if_6
           }
-          %b21 = block {  # false
+          $B21: {  # false
             store %x_336, 4i
             exit_if  # if_6
           }
         }
-        %86:i32 = load %x_336
-        %87:u32 = bitcast %86
-        %88:i32 = shiftl 1i, %87
-        store %x_335, %88
+        %95:i32 = load %x_336
+        %96:u32 = bitcast %95
+        %97:u32 = and %96, 31u
+        %98:i32 = shl 1i, %97
+        store %x_335, %98
         exit_if  # if_5
       }
-      %b19 = block {  # false
+      $B19: {  # false
         store %x_335, 1i
         exit_if  # if_5
       }
     }
-    %89:i32 = load %x_335
-    store %x, %89
-    %90:i32 = load %x
-    %91:i32 = shiftr %90, 4u
-    store %x, %91
-    %x_353:i32 = load %m
-    %x_355:i32 = load %m
-    %x_357:i32 = load %m
-    %x_359:i32 = load %x
-    %96:i32 = mul 2i, %x_353
-    %97:i32 = mul 2i, %x_355
-    %98:i32 = mul 2i, %x_357
-    %99:i32 = div %98, %x_359
-    %100:i32 = clamp %96, %97, %99
-    ret %100
+    %99:i32 = load %x_335
+    store %x, %99
+    %100:i32 = load %x
+    %101:u32 = and 4u, 31u
+    %102:i32 = shr %100, %101
+    store %x, %102
+    %103:i32 = load %m
+    %x_353:i32 = let %103
+    %105:i32 = load %m
+    %x_355:i32 = let %105
+    %107:i32 = load %m
+    %x_357:i32 = let %107
+    %109:i32 = load %x
+    %x_359:i32 = let %109
+    %111:i32 = mul 2i, %x_353
+    %112:i32 = mul 2i, %x_355
+    %113:i32 = mul 2i, %x_357
+    %114:i32 = call %tint_div_i32, %113, %x_359
+    %116:i32 = let %114
+    %117:i32 = max %111, %112
+    %118:i32 = min %117, %116
+    ret %118
   }
 }
-%mergeSort_ = func():void -> %b22 {
-  %b22 = block {
+%mergeSort_ = func():void {
+  $B22: {
     %low:ptr<function, i32, read_write> = var
     %high_1:ptr<function, i32, read_write> = var
     %m_1:ptr<function, i32, read_write> = var
@@ -224,322 +241,336 @@
     store %low, 0i
     store %high_1, 9i
     store %m_1, 1i
-    loop [b: %b23, c: %b24] {  # loop_4
-      %b23 = block {  # body
-        %114:i32 = load %m_1
-        %115:i32 = load %high_1
-        %116:bool = lte %114, %115
-        if %116 [t: %b25, f: %b26] {  # if_7
-          %b25 = block {  # true
+    loop [b: $B23, c: $B24] {  # loop_4
+      $B23: {  # body
+        %132:i32 = load %m_1
+        %133:i32 = load %high_1
+        %134:bool = lte %132, %133
+        if %134 [t: $B25, f: $B26] {  # if_7
+          $B25: {  # true
             exit_if  # if_7
           }
-          %b26 = block {  # false
+          $B26: {  # false
             exit_loop  # loop_4
           }
         }
-        %117:i32 = load %low
-        store %i_2, %117
-        loop [b: %b27, c: %b28] {  # loop_5
-          %b27 = block {  # body
-            %118:i32 = load %i_2
-            %119:i32 = load %high_1
-            %120:bool = lt %118, %119
-            if %120 [t: %b29, f: %b30] {  # if_8
-              %b29 = block {  # true
+        %135:i32 = load %low
+        store %i_2, %135
+        loop [b: $B27, c: $B28] {  # loop_5
+          $B27: {  # body
+            %136:i32 = load %i_2
+            %137:i32 = load %high_1
+            %138:bool = lt %136, %137
+            if %138 [t: $B29, f: $B30] {  # if_8
+              $B29: {  # true
                 exit_if  # if_8
               }
-              %b30 = block {  # false
+              $B30: {  # false
                 exit_loop  # loop_5
               }
             }
-            %121:i32 = load %i_2
-            store %f_1, %121
-            %122:i32 = load %i_2
-            %123:i32 = load %m_1
-            %124:i32 = add %122, %123
-            %125:i32 = sub %124, 1i
-            store %mid_1, %125
-            %126:i32 = load %i_2
-            %127:i32 = load %m_1
-            %128:i32 = mul 2i, %127
-            %129:i32 = add %126, %128
-            %130:i32 = sub %129, 1i
-            %131:i32 = load %high_1
-            %132:i32 = min %130, %131
-            store %to_1, %132
-            %133:i32 = load %f_1
-            store %param, %133
-            %134:i32 = load %mid_1
-            store %param_1, %134
-            %135:i32 = load %to_1
-            store %param_2, %135
-            %136:void = call %merge_i1_i1_i1_, %param, %param_1, %param_2
-            continue %b28
-          }
-          %b28 = block {  # continuing
-            %137:i32 = load %m_1
-            store %param_3, %137
-            %138:i32 = load %high_1
-            store %param_4, %138
-            %x_398:i32 = call %func_i1_i1_, %param_3, %param_4
+            %139:i32 = load %i_2
+            store %f_1, %139
             %140:i32 = load %i_2
-            %141:i32 = add %140, %x_398
-            store %i_2, %141
-            next_iteration %b27
+            %141:i32 = load %m_1
+            %142:i32 = add %140, %141
+            %143:i32 = sub %142, 1i
+            store %mid_1, %143
+            %144:i32 = load %i_2
+            %145:i32 = load %m_1
+            %146:i32 = mul 2i, %145
+            %147:i32 = add %144, %146
+            %148:i32 = sub %147, 1i
+            %149:i32 = load %high_1
+            %150:i32 = min %148, %149
+            store %to_1, %150
+            %151:i32 = load %f_1
+            store %param, %151
+            %152:i32 = load %mid_1
+            store %param_1, %152
+            %153:i32 = load %to_1
+            store %param_2, %153
+            %154:void = call %merge_i1_i1_i1_, %param, %param_1, %param_2
+            continue  # -> $B28
+          }
+          $B28: {  # continuing
+            %155:i32 = load %m_1
+            store %param_3, %155
+            %156:i32 = load %high_1
+            store %param_4, %156
+            %157:i32 = call %func_i1_i1_, %param_3, %param_4
+            %x_398:i32 = let %157
+            %159:i32 = load %i_2
+            %160:i32 = add %159, %x_398
+            store %i_2, %160
+            next_iteration  # -> $B27
           }
         }
-        continue %b24
+        continue  # -> $B24
       }
-      %b24 = block {  # continuing
-        %142:i32 = load %m_1
-        %143:i32 = mul 2i, %142
-        store %m_1, %143
-        next_iteration %b23
+      $B24: {  # continuing
+        %161:i32 = load %m_1
+        %162:i32 = mul 2i, %161
+        store %m_1, %162
+        next_iteration  # -> $B23
       }
     }
     ret
   }
 }
-%main_1 = func():void -> %b31 {
-  %b31 = block {
+%main_1 = func():void {
+  $B31: {
     %i_3:ptr<function, i32, read_write> = var
     %j_1:ptr<function, i32, read_write> = var
     %grey:ptr<function, f32, read_write> = var
-    %148:ptr<uniform, vec2<f32>, read> = access %x_34, 0u
-    %149:f32 = load_vector_element %148, 0u
-    %150:i32 = convert %149
-    store %i_3, %150
-    loop [b: %b32, c: %b33] {  # loop_6
-      %b32 = block {  # body
-        %x_99:i32 = load %i_3
-        switch %x_99 [c: (9i, %b34), c: (8i, %b35), c: (7i, %b36), c: (6i, %b37), c: (5i, %b38), c: (4i, %b39), c: (3i, %b40), c: (2i, %b41), c: (1i, %b42), c: (0i, %b43), c: (default, %b44)] {  # switch_1
-          %b34 = block {  # case
-            %x_129:i32 = load %i_3
-            %153:ptr<private, i32, read_write> = access %data, %x_129
-            store %153, -5i
+    %167:ptr<uniform, vec2<f32>, read> = access %x_34, 0u
+    %168:f32 = load_vector_element %167, 0u
+    %169:i32 = call %tint_f32_to_i32, %168
+    store %i_3, %169
+    loop [b: $B32, c: $B33] {  # loop_6
+      $B32: {  # body
+        %171:i32 = load %i_3
+        %x_99:i32 = let %171
+        switch %x_99 [c: (9i, $B34), c: (8i, $B35), c: (7i, $B36), c: (6i, $B37), c: (5i, $B38), c: (4i, $B39), c: (3i, $B40), c: (2i, $B41), c: (1i, $B42), c: (0i, $B43), c: (default, $B44)] {  # switch_1
+          $B34: {  # case
+            %173:i32 = load %i_3
+            %x_129:i32 = let %173
+            %175:ptr<private, i32, read_write> = access %data, %x_129
+            store %175, -5i
             exit_switch  # switch_1
           }
-          %b35 = block {  # case
-            %x_127:i32 = load %i_3
-            %155:ptr<private, i32, read_write> = access %data, %x_127
-            store %155, -4i
+          $B35: {  # case
+            %176:i32 = load %i_3
+            %x_127:i32 = let %176
+            %178:ptr<private, i32, read_write> = access %data, %x_127
+            store %178, -4i
             exit_switch  # switch_1
           }
-          %b36 = block {  # case
-            %x_125:i32 = load %i_3
-            %157:ptr<private, i32, read_write> = access %data, %x_125
-            store %157, -3i
+          $B36: {  # case
+            %179:i32 = load %i_3
+            %x_125:i32 = let %179
+            %181:ptr<private, i32, read_write> = access %data, %x_125
+            store %181, -3i
             exit_switch  # switch_1
           }
-          %b37 = block {  # case
-            %x_123:i32 = load %i_3
-            %159:ptr<private, i32, read_write> = access %data, %x_123
-            store %159, -2i
+          $B37: {  # case
+            %182:i32 = load %i_3
+            %x_123:i32 = let %182
+            %184:ptr<private, i32, read_write> = access %data, %x_123
+            store %184, -2i
             exit_switch  # switch_1
           }
-          %b38 = block {  # case
-            %x_121:i32 = load %i_3
-            %161:ptr<private, i32, read_write> = access %data, %x_121
-            store %161, -1i
+          $B38: {  # case
+            %185:i32 = load %i_3
+            %x_121:i32 = let %185
+            %187:ptr<private, i32, read_write> = access %data, %x_121
+            store %187, -1i
             exit_switch  # switch_1
           }
-          %b39 = block {  # case
-            %x_119:i32 = load %i_3
-            %163:ptr<private, i32, read_write> = access %data, %x_119
-            store %163, 0i
+          $B39: {  # case
+            %188:i32 = load %i_3
+            %x_119:i32 = let %188
+            %190:ptr<private, i32, read_write> = access %data, %x_119
+            store %190, 0i
             exit_switch  # switch_1
           }
-          %b40 = block {  # case
-            %x_117:i32 = load %i_3
-            %165:ptr<private, i32, read_write> = access %data, %x_117
-            store %165, 1i
+          $B40: {  # case
+            %191:i32 = load %i_3
+            %x_117:i32 = let %191
+            %193:ptr<private, i32, read_write> = access %data, %x_117
+            store %193, 1i
             exit_switch  # switch_1
           }
-          %b41 = block {  # case
-            %x_115:i32 = load %i_3
-            %167:ptr<private, i32, read_write> = access %data, %x_115
-            store %167, 2i
+          $B41: {  # case
+            %194:i32 = load %i_3
+            %x_115:i32 = let %194
+            %196:ptr<private, i32, read_write> = access %data, %x_115
+            store %196, 2i
             exit_switch  # switch_1
           }
-          %b42 = block {  # case
-            %x_113:i32 = load %i_3
-            %169:ptr<private, i32, read_write> = access %data, %x_113
-            store %169, 3i
+          $B42: {  # case
+            %197:i32 = load %i_3
+            %x_113:i32 = let %197
+            %199:ptr<private, i32, read_write> = access %data, %x_113
+            store %199, 3i
             exit_switch  # switch_1
           }
-          %b43 = block {  # case
-            %x_111:i32 = load %i_3
-            %171:ptr<private, i32, read_write> = access %data, %x_111
-            store %171, 4i
+          $B43: {  # case
+            %200:i32 = load %i_3
+            %x_111:i32 = let %200
+            %202:ptr<private, i32, read_write> = access %data, %x_111
+            store %202, 4i
             exit_switch  # switch_1
           }
-          %b44 = block {  # case
+          $B44: {  # case
             exit_switch  # switch_1
           }
         }
-        %172:i32 = load %i_3
-        %173:i32 = add %172, 1i
-        store %i_3, %173
-        continue %b33
+        %203:i32 = load %i_3
+        %204:i32 = add %203, 1i
+        store %i_3, %204
+        continue  # -> $B33
       }
-      %b33 = block {  # continuing
-        %x_133:i32 = load %i_3
-        %175:bool = lt %x_133, 10i
-        %176:bool = eq %175, false
-        break_if %176 %b32
+      $B33: {  # continuing
+        %205:i32 = load %i_3
+        %x_133:i32 = let %205
+        %207:bool = lt %x_133, 10i
+        %208:bool = eq %207, false
+        break_if %208  # -> [t: exit_loop loop_6, f: $B32]
       }
     }
     store %j_1, 0i
-    loop [b: %b45, c: %b46] {  # loop_7
-      %b45 = block {  # body
-        %177:i32 = load %j_1
-        %178:bool = lt %177, 10i
-        if %178 [t: %b47, f: %b48] {  # if_9
-          %b47 = block {  # true
+    loop [b: $B45, c: $B46] {  # loop_7
+      $B45: {  # body
+        %209:i32 = load %j_1
+        %210:bool = lt %209, 10i
+        if %210 [t: $B47, f: $B48] {  # if_9
+          $B47: {  # true
             exit_if  # if_9
           }
-          %b48 = block {  # false
+          $B48: {  # false
             exit_loop  # loop_7
           }
         }
-        %x_142:i32 = load %j_1
-        %180:ptr<private, i32, read_write> = access %temp, %x_142
-        %181:i32 = load %j_1
-        %182:ptr<private, i32, read_write> = access %data, %181
-        %183:i32 = load %182
-        store %180, %183
-        continue %b46
+        %211:i32 = load %j_1
+        %x_142:i32 = let %211
+        %213:ptr<private, i32, read_write> = access %temp, %x_142
+        %214:i32 = load %j_1
+        %215:ptr<private, i32, read_write> = access %data, %214
+        %216:i32 = load %215
+        store %213, %216
+        continue  # -> $B46
       }
-      %b46 = block {  # continuing
-        %184:i32 = load %j_1
-        %185:i32 = add %184, 1i
-        store %j_1, %185
-        next_iteration %b45
+      $B46: {  # continuing
+        %217:i32 = load %j_1
+        %218:i32 = add %217, 1i
+        store %j_1, %218
+        next_iteration  # -> $B45
       }
     }
-    %186:void = call %mergeSort_
-    %187:f32 = load_vector_element %gl_FragCoord, 1u
-    %188:i32 = convert %187
-    %189:bool = lt %188, 30i
-    if %189 [t: %b49, f: %b50] {  # if_10
-      %b49 = block {  # true
-        %190:ptr<private, i32, read_write> = access %data, 0i
-        %191:i32 = load %190
-        %192:f32 = convert %191
-        %193:f32 = div %192, 10.0f
-        %194:f32 = add 0.5f, %193
-        store %grey, %194
+    %219:void = call %mergeSort_
+    %220:f32 = load_vector_element %gl_FragCoord, 1u
+    %221:i32 = call %tint_f32_to_i32, %220
+    %222:bool = lt %221, 30i
+    if %222 [t: $B49, f: $B50] {  # if_10
+      $B49: {  # true
+        %223:ptr<private, i32, read_write> = access %data, 0i
+        %224:i32 = load %223
+        %225:f32 = convert %224
+        %226:f32 = div %225, 10.0f
+        %227:f32 = add 0.5f, %226
+        store %grey, %227
         exit_if  # if_10
       }
-      %b50 = block {  # false
-        %195:f32 = load_vector_element %gl_FragCoord, 1u
-        %196:i32 = convert %195
-        %197:bool = lt %196, 60i
-        if %197 [t: %b51, f: %b52] {  # if_11
-          %b51 = block {  # true
-            %198:ptr<private, i32, read_write> = access %data, 1i
-            %199:i32 = load %198
-            %200:f32 = convert %199
-            %201:f32 = div %200, 10.0f
-            %202:f32 = add 0.5f, %201
-            store %grey, %202
+      $B50: {  # false
+        %228:f32 = load_vector_element %gl_FragCoord, 1u
+        %229:i32 = call %tint_f32_to_i32, %228
+        %230:bool = lt %229, 60i
+        if %230 [t: $B51, f: $B52] {  # if_11
+          $B51: {  # true
+            %231:ptr<private, i32, read_write> = access %data, 1i
+            %232:i32 = load %231
+            %233:f32 = convert %232
+            %234:f32 = div %233, 10.0f
+            %235:f32 = add 0.5f, %234
+            store %grey, %235
             exit_if  # if_11
           }
-          %b52 = block {  # false
-            %203:f32 = load_vector_element %gl_FragCoord, 1u
-            %204:i32 = convert %203
-            %205:bool = lt %204, 90i
-            if %205 [t: %b53, f: %b54] {  # if_12
-              %b53 = block {  # true
-                %206:ptr<private, i32, read_write> = access %data, 2i
-                %207:i32 = load %206
-                %208:f32 = convert %207
-                %209:f32 = div %208, 10.0f
-                %210:f32 = add 0.5f, %209
-                store %grey, %210
+          $B52: {  # false
+            %236:f32 = load_vector_element %gl_FragCoord, 1u
+            %237:i32 = call %tint_f32_to_i32, %236
+            %238:bool = lt %237, 90i
+            if %238 [t: $B53, f: $B54] {  # if_12
+              $B53: {  # true
+                %239:ptr<private, i32, read_write> = access %data, 2i
+                %240:i32 = load %239
+                %241:f32 = convert %240
+                %242:f32 = div %241, 10.0f
+                %243:f32 = add 0.5f, %242
+                store %grey, %243
                 exit_if  # if_12
               }
-              %b54 = block {  # false
-                %211:f32 = load_vector_element %gl_FragCoord, 1u
-                %212:i32 = convert %211
-                %213:bool = lt %212, 120i
-                if %213 [t: %b55, f: %b56] {  # if_13
-                  %b55 = block {  # true
-                    %214:ptr<private, i32, read_write> = access %data, 3i
-                    %215:i32 = load %214
-                    %216:f32 = convert %215
-                    %217:f32 = div %216, 10.0f
-                    %218:f32 = add 0.5f, %217
-                    store %grey, %218
+              $B54: {  # false
+                %244:f32 = load_vector_element %gl_FragCoord, 1u
+                %245:i32 = call %tint_f32_to_i32, %244
+                %246:bool = lt %245, 120i
+                if %246 [t: $B55, f: $B56] {  # if_13
+                  $B55: {  # true
+                    %247:ptr<private, i32, read_write> = access %data, 3i
+                    %248:i32 = load %247
+                    %249:f32 = convert %248
+                    %250:f32 = div %249, 10.0f
+                    %251:f32 = add 0.5f, %250
+                    store %grey, %251
                     exit_if  # if_13
                   }
-                  %b56 = block {  # false
-                    %219:f32 = load_vector_element %gl_FragCoord, 1u
-                    %220:i32 = convert %219
-                    %221:bool = lt %220, 150i
-                    if %221 [t: %b57, f: %b58] {  # if_14
-                      %b57 = block {  # true
-                        discard
+                  $B56: {  # false
+                    %252:f32 = load_vector_element %gl_FragCoord, 1u
+                    %253:i32 = call %tint_f32_to_i32, %252
+                    %254:bool = lt %253, 150i
+                    if %254 [t: $B57, f: $B58] {  # if_14
+                      $B57: {  # true
+                        store %continue_execution, false
                         exit_if  # if_14
                       }
-                      %b58 = block {  # false
-                        %222:f32 = load_vector_element %gl_FragCoord, 1u
-                        %223:i32 = convert %222
-                        %224:bool = lt %223, 180i
-                        if %224 [t: %b59, f: %b60] {  # if_15
-                          %b59 = block {  # true
-                            %225:ptr<private, i32, read_write> = access %data, 5i
-                            %226:i32 = load %225
-                            %227:f32 = convert %226
-                            %228:f32 = div %227, 10.0f
-                            %229:f32 = add 0.5f, %228
-                            store %grey, %229
+                      $B58: {  # false
+                        %255:f32 = load_vector_element %gl_FragCoord, 1u
+                        %256:i32 = call %tint_f32_to_i32, %255
+                        %257:bool = lt %256, 180i
+                        if %257 [t: $B59, f: $B60] {  # if_15
+                          $B59: {  # true
+                            %258:ptr<private, i32, read_write> = access %data, 5i
+                            %259:i32 = load %258
+                            %260:f32 = convert %259
+                            %261:f32 = div %260, 10.0f
+                            %262:f32 = add 0.5f, %261
+                            store %grey, %262
                             exit_if  # if_15
                           }
-                          %b60 = block {  # false
-                            %230:f32 = load_vector_element %gl_FragCoord, 1u
-                            %231:i32 = convert %230
-                            %232:bool = lt %231, 210i
-                            if %232 [t: %b61, f: %b62] {  # if_16
-                              %b61 = block {  # true
-                                %233:ptr<private, i32, read_write> = access %data, 6i
-                                %234:i32 = load %233
-                                %235:f32 = convert %234
-                                %236:f32 = div %235, 10.0f
-                                %237:f32 = add 0.5f, %236
-                                store %grey, %237
+                          $B60: {  # false
+                            %263:f32 = load_vector_element %gl_FragCoord, 1u
+                            %264:i32 = call %tint_f32_to_i32, %263
+                            %265:bool = lt %264, 210i
+                            if %265 [t: $B61, f: $B62] {  # if_16
+                              $B61: {  # true
+                                %266:ptr<private, i32, read_write> = access %data, 6i
+                                %267:i32 = load %266
+                                %268:f32 = convert %267
+                                %269:f32 = div %268, 10.0f
+                                %270:f32 = add 0.5f, %269
+                                store %grey, %270
                                 exit_if  # if_16
                               }
-                              %b62 = block {  # false
-                                %238:f32 = load_vector_element %gl_FragCoord, 1u
-                                %239:i32 = convert %238
-                                %240:bool = lt %239, 240i
-                                if %240 [t: %b63, f: %b64] {  # if_17
-                                  %b63 = block {  # true
-                                    %241:ptr<private, i32, read_write> = access %data, 7i
-                                    %242:i32 = load %241
-                                    %243:f32 = convert %242
-                                    %244:f32 = div %243, 10.0f
-                                    %245:f32 = add 0.5f, %244
-                                    store %grey, %245
+                              $B62: {  # false
+                                %271:f32 = load_vector_element %gl_FragCoord, 1u
+                                %272:i32 = call %tint_f32_to_i32, %271
+                                %273:bool = lt %272, 240i
+                                if %273 [t: $B63, f: $B64] {  # if_17
+                                  $B63: {  # true
+                                    %274:ptr<private, i32, read_write> = access %data, 7i
+                                    %275:i32 = load %274
+                                    %276:f32 = convert %275
+                                    %277:f32 = div %276, 10.0f
+                                    %278:f32 = add 0.5f, %277
+                                    store %grey, %278
                                     exit_if  # if_17
                                   }
-                                  %b64 = block {  # false
-                                    %246:f32 = load_vector_element %gl_FragCoord, 1u
-                                    %247:i32 = convert %246
-                                    %248:bool = lt %247, 270i
-                                    if %248 [t: %b65, f: %b66] {  # if_18
-                                      %b65 = block {  # true
-                                        %249:ptr<private, i32, read_write> = access %data, 8i
-                                        %250:i32 = load %249
-                                        %251:f32 = convert %250
-                                        %252:f32 = div %251, 10.0f
-                                        %253:f32 = add 0.5f, %252
-                                        store %grey, %253
+                                  $B64: {  # false
+                                    %279:f32 = load_vector_element %gl_FragCoord, 1u
+                                    %280:i32 = call %tint_f32_to_i32, %279
+                                    %281:bool = lt %280, 270i
+                                    if %281 [t: $B65, f: $B66] {  # if_18
+                                      $B65: {  # true
+                                        %282:ptr<private, i32, read_write> = access %data, 8i
+                                        %283:i32 = load %282
+                                        %284:f32 = convert %283
+                                        %285:f32 = div %284, 10.0f
+                                        %286:f32 = add 0.5f, %285
+                                        store %grey, %286
                                         exit_if  # if_18
                                       }
-                                      %b66 = block {  # false
-                                        discard
+                                      $B66: {  # false
+                                        store %continue_execution, false
                                         exit_if  # if_18
                                       }
                                     }
@@ -567,23 +598,53 @@
         exit_if  # if_10
       }
     }
-    %254:f32 = load %grey
-    %x_254:vec3<f32> = construct %254
-    %256:f32 = access %x_254, 0u
-    %257:f32 = access %x_254, 1u
-    %258:f32 = access %x_254, 2u
-    %259:vec4<f32> = construct %256, %257, %258, 1.0f
-    store %x_GLF_color, %259
+    %287:f32 = load %grey
+    %288:vec3<f32> = construct %287
+    %x_254:vec3<f32> = let %288
+    %290:f32 = access %x_254, 0u
+    %291:f32 = access %x_254, 1u
+    %292:f32 = access %x_254, 2u
+    %293:vec4<f32> = construct %290, %291, %292, 1.0f
+    store %x_GLF_color, %293
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b67 {
-  %b67 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B67: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %262:void = call %main_1
-    %263:vec4<f32> = load %x_GLF_color
-    %264:main_out = construct %263
-    ret %264
+    %296:void = call %main_1
+    %297:vec4<f32> = load %x_GLF_color
+    %298:main_out = construct %297
+    %299:bool = load %continue_execution
+    %300:bool = eq %299, false
+    if %300 [t: $B68] {  # if_19
+      $B68: {  # true
+        terminate_invocation
+      }
+    }
+    ret %298
+  }
+}
+%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B69: {
+    %303:bool = eq %rhs, 0i
+    %304:bool = eq %lhs, -2147483648i
+    %305:bool = eq %rhs, -1i
+    %306:bool = and %304, %305
+    %307:bool = or %303, %306
+    %308:i32 = select %rhs, 1i, %307
+    %309:i32 = div %lhs, %308
+    ret %309
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B70: {
+    %311:i32 = convert %value
+    %312:bool = gte %value, -2147483648.0f
+    %313:i32 = select -2147483648i, %311, %312
+    %314:bool = lte %value, 2147483520.0f
+    %315:i32 = select 2147483647i, %313, %314
+    ret %315
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-mergesort-clamped-conditional-bit-shift/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-mergesort-clamped-conditional-bit-shift/1.wgsl.expected.ir.msl
index de8988c..85caa14 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-mergesort-clamped-conditional-bit-shift/1.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/stable-mergesort-clamped-conditional-bit-shift/1.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,201 +8,246 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %data:ptr<private, array<i32, 10>, read_write> = var
   %temp:ptr<private, array<i32, 10>, read_write> = var
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_34:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%merge_i1_i1_i1_ = func(%f:ptr<function, i32, read_write>, %mid:ptr<function, i32, read_write>, %to:ptr<function, i32, read_write>):void -> %b2 {
-  %b2 = block {
+%merge_i1_i1_i1_ = func(%f:ptr<function, i32, read_write>, %mid:ptr<function, i32, read_write>, %to:ptr<function, i32, read_write>):void {
+  $B2: {
     %k:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %j:ptr<function, i32, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
-    %x_260:i32 = load %f
+    %15:i32 = load %f
+    %x_260:i32 = let %15
     store %k, %x_260
-    %x_261:i32 = load %f
+    %17:i32 = load %f
+    %x_261:i32 = let %17
     store %i, %x_261
-    %x_262:i32 = load %mid
-    %17:i32 = add %x_262, 1i
-    store %j, %17
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_268:i32 = load %i
-        %x_269:i32 = load %mid
-        %x_271:i32 = load %j
-        %x_272:i32 = load %to
-        %22:bool = lte %x_268, %x_269
-        %23:bool = lte %x_271, %x_272
-        %24:bool = and %22, %23
-        if %24 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    %19:i32 = load %mid
+    %x_262:i32 = let %19
+    %21:i32 = add %x_262, 1i
+    store %j, %21
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %22:i32 = load %i
+        %x_268:i32 = let %22
+        %24:i32 = load %mid
+        %x_269:i32 = let %24
+        %26:i32 = load %j
+        %x_271:i32 = let %26
+        %28:i32 = load %to
+        %x_272:i32 = let %28
+        %30:bool = lte %x_268, %x_269
+        %31:bool = lte %x_271, %x_272
+        %32:bool = and %30, %31
+        if %32 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_276:i32 = load %i
-        %26:ptr<private, i32, read_write> = access %data, %x_276
-        %x_278:i32 = load %26
-        %x_279:i32 = load %j
-        %29:ptr<private, i32, read_write> = access %data, %x_279
-        %x_281:i32 = load %29
-        %31:bool = lt %x_278, %x_281
-        if %31 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
-            %x_286:i32 = load %k
-            %33:i32 = add %x_286, 1i
-            store %k, %33
-            %x_288:i32 = load %i
-            %35:i32 = add %x_288, 1i
-            store %i, %35
-            %36:ptr<private, i32, read_write> = access %data, %x_288
-            %x_291:i32 = load %36
-            %38:ptr<private, i32, read_write> = access %temp, %x_286
-            store %38, %x_291
+        %33:i32 = load %i
+        %x_276:i32 = let %33
+        %35:ptr<private, i32, read_write> = access %data, %x_276
+        %36:i32 = load %35
+        %x_278:i32 = let %36
+        %38:i32 = load %j
+        %x_279:i32 = let %38
+        %40:ptr<private, i32, read_write> = access %data, %x_279
+        %41:i32 = load %40
+        %x_281:i32 = let %41
+        %43:bool = lt %x_278, %x_281
+        if %43 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
+            %44:i32 = load %k
+            %x_286:i32 = let %44
+            %46:i32 = add %x_286, 1i
+            store %k, %46
+            %47:i32 = load %i
+            %x_288:i32 = let %47
+            %49:i32 = add %x_288, 1i
+            store %i, %49
+            %50:ptr<private, i32, read_write> = access %data, %x_288
+            %51:i32 = load %50
+            %x_291:i32 = let %51
+            %53:ptr<private, i32, read_write> = access %temp, %x_286
+            store %53, %x_291
             exit_if  # if_2
           }
-          %b8 = block {  # false
-            %x_293:i32 = load %k
-            %40:i32 = add %x_293, 1i
-            store %k, %40
-            %x_295:i32 = load %j
-            %42:i32 = add %x_295, 1i
-            store %j, %42
-            %43:ptr<private, i32, read_write> = access %data, %x_295
-            %x_298:i32 = load %43
-            %45:ptr<private, i32, read_write> = access %temp, %x_293
-            store %45, %x_298
+          $B8: {  # false
+            %54:i32 = load %k
+            %x_293:i32 = let %54
+            %56:i32 = add %x_293, 1i
+            store %k, %56
+            %57:i32 = load %j
+            %x_295:i32 = let %57
+            %59:i32 = add %x_295, 1i
+            store %j, %59
+            %60:ptr<private, i32, read_write> = access %data, %x_295
+            %61:i32 = load %60
+            %x_298:i32 = let %61
+            %63:ptr<private, i32, read_write> = access %temp, %x_293
+            store %63, %x_298
             exit_if  # if_2
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
-    loop [b: %b9, c: %b10] {  # loop_2
-      %b9 = block {  # body
-        %x_304:i32 = load %i
-        %x_306:i32 = load %i
-        %x_307:i32 = load %mid
-        %49:bool = lt %x_304, 10i
-        %50:bool = lte %x_306, %x_307
-        %51:bool = and %49, %50
-        if %51 [t: %b11, f: %b12] {  # if_3
-          %b11 = block {  # true
+    loop [b: $B9, c: $B10] {  # loop_2
+      $B9: {  # body
+        %64:i32 = load %i
+        %x_304:i32 = let %64
+        %66:i32 = load %i
+        %x_306:i32 = let %66
+        %68:i32 = load %mid
+        %x_307:i32 = let %68
+        %70:bool = lt %x_304, 10i
+        %71:bool = lte %x_306, %x_307
+        %72:bool = and %70, %71
+        if %72 [t: $B11, f: $B12] {  # if_3
+          $B11: {  # true
             exit_if  # if_3
           }
-          %b12 = block {  # false
+          $B12: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_311:i32 = load %k
-        %53:i32 = add %x_311, 1i
-        store %k, %53
-        %x_313:i32 = load %i
-        %55:i32 = add %x_313, 1i
-        store %i, %55
-        %56:ptr<private, i32, read_write> = access %data, %x_313
-        %x_316:i32 = load %56
-        %58:ptr<private, i32, read_write> = access %temp, %x_311
-        store %58, %x_316
-        continue %b10
+        %73:i32 = load %k
+        %x_311:i32 = let %73
+        %75:i32 = add %x_311, 1i
+        store %k, %75
+        %76:i32 = load %i
+        %x_313:i32 = let %76
+        %78:i32 = add %x_313, 1i
+        store %i, %78
+        %79:ptr<private, i32, read_write> = access %data, %x_313
+        %80:i32 = load %79
+        %x_316:i32 = let %80
+        %82:ptr<private, i32, read_write> = access %temp, %x_311
+        store %82, %x_316
+        continue  # -> $B10
       }
-      %b10 = block {  # continuing
-        next_iteration %b9
+      $B10: {  # continuing
+        next_iteration  # -> $B9
       }
     }
-    %x_318:i32 = load %f
+    %83:i32 = load %f
+    %x_318:i32 = let %83
     store %i_1, %x_318
-    loop [b: %b13, c: %b14] {  # loop_3
-      %b13 = block {  # body
-        %x_323:i32 = load %i_1
-        %x_324:i32 = load %to
-        %62:bool = lte %x_323, %x_324
-        if %62 [t: %b15, f: %b16] {  # if_4
-          %b15 = block {  # true
+    loop [b: $B13, c: $B14] {  # loop_3
+      $B13: {  # body
+        %85:i32 = load %i_1
+        %x_323:i32 = let %85
+        %87:i32 = load %to
+        %x_324:i32 = let %87
+        %89:bool = lte %x_323, %x_324
+        if %89 [t: $B15, f: $B16] {  # if_4
+          $B15: {  # true
             exit_if  # if_4
           }
-          %b16 = block {  # false
+          $B16: {  # false
             exit_loop  # loop_3
           }
         }
-        %x_327:i32 = load %i_1
-        %x_328:i32 = load %i_1
-        %65:ptr<private, i32, read_write> = access %temp, %x_328
-        %x_330:i32 = load %65
-        %67:ptr<private, i32, read_write> = access %data, %x_327
-        store %67, %x_330
-        continue %b14
+        %90:i32 = load %i_1
+        %x_327:i32 = let %90
+        %92:i32 = load %i_1
+        %x_328:i32 = let %92
+        %94:ptr<private, i32, read_write> = access %temp, %x_328
+        %95:i32 = load %94
+        %x_330:i32 = let %95
+        %97:ptr<private, i32, read_write> = access %data, %x_327
+        store %97, %x_330
+        continue  # -> $B14
       }
-      %b14 = block {  # continuing
-        %x_332:i32 = load %i_1
-        %69:i32 = add %x_332, 1i
-        store %i_1, %69
-        next_iteration %b13
+      $B14: {  # continuing
+        %98:i32 = load %i_1
+        %x_332:i32 = let %98
+        %100:i32 = add %x_332, 1i
+        store %i_1, %100
+        next_iteration  # -> $B13
       }
     }
     ret
   }
 }
-%func_i1_i1_ = func(%m:ptr<function, i32, read_write>, %high:ptr<function, i32, read_write>):i32 -> %b17 {
-  %b17 = block {
+%func_i1_i1_ = func(%m:ptr<function, i32, read_write>, %high:ptr<function, i32, read_write>):i32 {
+  $B17: {
     %x:ptr<function, i32, read_write> = var
     %x_335:ptr<function, i32, read_write> = var
     %x_336:ptr<function, i32, read_write> = var
-    %x_338:f32 = load_vector_element %gl_FragCoord, 0u
-    %77:bool = gte %x_338, 0.0f
-    if %77 [t: %b18, f: %b19] {  # if_5
-      %b18 = block {  # true
-        if false [t: %b20, f: %b21] {  # if_6
-          %b20 = block {  # true
-            %x_346:i32 = load %high
-            %79:i32 = shiftl %x_346, 0u
-            store %x_336, %79
+    %107:f32 = load_vector_element %gl_FragCoord, 0u
+    %x_338:f32 = let %107
+    %109:bool = gte %x_338, 0.0f
+    if %109 [t: $B18, f: $B19] {  # if_5
+      $B18: {  # true
+        if false [t: $B20, f: $B21] {  # if_6
+          $B20: {  # true
+            %110:i32 = load %high
+            %x_346:i32 = let %110
+            %112:u32 = and 0u, 31u
+            %113:i32 = shl %x_346, %112
+            store %x_336, %113
             exit_if  # if_6
           }
-          %b21 = block {  # false
+          $B21: {  # false
             store %x_336, 4i
             exit_if  # if_6
           }
         }
-        %x_348:i32 = load %x_336
-        %81:u32 = bitcast %x_348
-        %82:i32 = shiftl 1i, %81
-        store %x_335, %82
+        %114:i32 = load %x_336
+        %x_348:i32 = let %114
+        %116:u32 = bitcast %x_348
+        %117:u32 = and %116, 31u
+        %118:i32 = shl 1i, %117
+        store %x_335, %118
         exit_if  # if_5
       }
-      %b19 = block {  # false
+      $B19: {  # false
         store %x_335, 1i
         exit_if  # if_5
       }
     }
-    %x_350:i32 = load %x_335
+    %119:i32 = load %x_335
+    %x_350:i32 = let %119
     store %x, %x_350
-    %x_351:i32 = load %x
-    %85:i32 = shiftr %x_351, 4u
-    store %x, %85
-    %x_353:i32 = load %m
-    %x_355:i32 = load %m
-    %x_357:i32 = load %m
-    %x_359:i32 = load %x
-    %90:i32 = mul 2i, %x_353
-    %91:i32 = mul 2i, %x_355
-    %92:i32 = mul 2i, %x_357
-    %93:i32 = div %92, %x_359
-    %94:i32 = clamp %90, %91, %93
-    ret %94
+    %121:i32 = load %x
+    %x_351:i32 = let %121
+    %123:u32 = and 4u, 31u
+    %124:i32 = shr %x_351, %123
+    store %x, %124
+    %125:i32 = load %m
+    %x_353:i32 = let %125
+    %127:i32 = load %m
+    %x_355:i32 = let %127
+    %129:i32 = load %m
+    %x_357:i32 = let %129
+    %131:i32 = load %x
+    %x_359:i32 = let %131
+    %133:i32 = mul 2i, %x_353
+    %134:i32 = mul 2i, %x_355
+    %135:i32 = mul 2i, %x_357
+    %136:i32 = call %tint_div_i32, %135, %x_359
+    %138:i32 = let %136
+    %139:i32 = max %133, %134
+    %140:i32 = min %139, %138
+    ret %140
   }
 }
-%mergeSort_ = func():void -> %b22 {
-  %b22 = block {
+%mergeSort_ = func():void {
+  $B22: {
     %low:ptr<function, i32, read_write> = var
     %high_1:ptr<function, i32, read_write> = var
     %m_1:ptr<function, i32, read_write> = var
@@ -218,322 +263,377 @@
     store %low, 0i
     store %high_1, 9i
     store %m_1, 1i
-    loop [b: %b23, c: %b24] {  # loop_4
-      %b23 = block {  # body
-        %x_367:i32 = load %m_1
-        %x_368:i32 = load %high_1
-        %110:bool = lte %x_367, %x_368
-        if %110 [t: %b25, f: %b26] {  # if_7
-          %b25 = block {  # true
+    loop [b: $B23, c: $B24] {  # loop_4
+      $B23: {  # body
+        %154:i32 = load %m_1
+        %x_367:i32 = let %154
+        %156:i32 = load %high_1
+        %x_368:i32 = let %156
+        %158:bool = lte %x_367, %x_368
+        if %158 [t: $B25, f: $B26] {  # if_7
+          $B25: {  # true
             exit_if  # if_7
           }
-          %b26 = block {  # false
+          $B26: {  # false
             exit_loop  # loop_4
           }
         }
-        %x_371:i32 = load %low
+        %159:i32 = load %low
+        %x_371:i32 = let %159
         store %i_2, %x_371
-        loop [b: %b27, c: %b28] {  # loop_5
-          %b27 = block {  # body
-            %x_376:i32 = load %i_2
-            %x_377:i32 = load %high_1
-            %114:bool = lt %x_376, %x_377
-            if %114 [t: %b29, f: %b30] {  # if_8
-              %b29 = block {  # true
+        loop [b: $B27, c: $B28] {  # loop_5
+          $B27: {  # body
+            %161:i32 = load %i_2
+            %x_376:i32 = let %161
+            %163:i32 = load %high_1
+            %x_377:i32 = let %163
+            %165:bool = lt %x_376, %x_377
+            if %165 [t: $B29, f: $B30] {  # if_8
+              $B29: {  # true
                 exit_if  # if_8
               }
-              %b30 = block {  # false
+              $B30: {  # false
                 exit_loop  # loop_5
               }
             }
-            %x_380:i32 = load %i_2
+            %166:i32 = load %i_2
+            %x_380:i32 = let %166
             store %f_1, %x_380
-            %x_381:i32 = load %i_2
-            %x_382:i32 = load %m_1
-            %118:i32 = add %x_381, %x_382
-            %119:i32 = sub %118, 1i
-            store %mid_1, %119
-            %x_385:i32 = load %i_2
-            %x_386:i32 = load %m_1
-            %x_390:i32 = load %high_1
-            %123:i32 = mul 2i, %x_386
-            %124:i32 = add %x_385, %123
-            %125:i32 = sub %124, 1i
-            %126:i32 = min %125, %x_390
-            store %to_1, %126
-            %x_392:i32 = load %f_1
+            %168:i32 = load %i_2
+            %x_381:i32 = let %168
+            %170:i32 = load %m_1
+            %x_382:i32 = let %170
+            %172:i32 = add %x_381, %x_382
+            %173:i32 = sub %172, 1i
+            store %mid_1, %173
+            %174:i32 = load %i_2
+            %x_385:i32 = let %174
+            %176:i32 = load %m_1
+            %x_386:i32 = let %176
+            %178:i32 = load %high_1
+            %x_390:i32 = let %178
+            %180:i32 = mul 2i, %x_386
+            %181:i32 = add %x_385, %180
+            %182:i32 = sub %181, 1i
+            %183:i32 = min %182, %x_390
+            store %to_1, %183
+            %184:i32 = load %f_1
+            %x_392:i32 = let %184
             store %param, %x_392
-            %x_393:i32 = load %mid_1
+            %186:i32 = load %mid_1
+            %x_393:i32 = let %186
             store %param_1, %x_393
-            %x_394:i32 = load %to_1
+            %188:i32 = load %to_1
+            %x_394:i32 = let %188
             store %param_2, %x_394
-            %130:void = call %merge_i1_i1_i1_, %param, %param_1, %param_2
-            continue %b28
+            %190:void = call %merge_i1_i1_i1_, %param, %param_1, %param_2
+            continue  # -> $B28
           }
-          %b28 = block {  # continuing
-            %x_396:i32 = load %m_1
+          $B28: {  # continuing
+            %191:i32 = load %m_1
+            %x_396:i32 = let %191
             store %param_3, %x_396
-            %x_397:i32 = load %high_1
+            %193:i32 = load %high_1
+            %x_397:i32 = let %193
             store %param_4, %x_397
-            %x_398:i32 = call %func_i1_i1_, %param_3, %param_4
-            %x_399:i32 = load %i_2
-            %135:i32 = add %x_399, %x_398
-            store %i_2, %135
-            next_iteration %b27
+            %195:i32 = call %func_i1_i1_, %param_3, %param_4
+            %x_398:i32 = let %195
+            %197:i32 = load %i_2
+            %x_399:i32 = let %197
+            %199:i32 = add %x_399, %x_398
+            store %i_2, %199
+            next_iteration  # -> $B27
           }
         }
-        continue %b24
+        continue  # -> $B24
       }
-      %b24 = block {  # continuing
-        %x_401:i32 = load %m_1
-        %137:i32 = mul 2i, %x_401
-        store %m_1, %137
-        next_iteration %b23
+      $B24: {  # continuing
+        %200:i32 = load %m_1
+        %x_401:i32 = let %200
+        %202:i32 = mul 2i, %x_401
+        store %m_1, %202
+        next_iteration  # -> $B23
       }
     }
     ret
   }
 }
-%main_1 = func():void -> %b31 {
-  %b31 = block {
+%main_1 = func():void {
+  $B31: {
     %i_3:ptr<function, i32, read_write> = var
     %j_1:ptr<function, i32, read_write> = var
     %grey:ptr<function, f32, read_write> = var
-    %142:ptr<uniform, vec2<f32>, read> = access %x_34, 0u
-    %x_93:f32 = load_vector_element %142, 0u
-    %144:i32 = convert %x_93
-    store %i_3, %144
-    loop [b: %b32, c: %b33] {  # loop_6
-      %b32 = block {  # body
-        %x_99:i32 = load %i_3
-        switch %x_99 [c: (9i, %b34), c: (8i, %b35), c: (7i, %b36), c: (6i, %b37), c: (5i, %b38), c: (4i, %b39), c: (3i, %b40), c: (2i, %b41), c: (1i, %b42), c: (0i, %b43), c: (default, %b44)] {  # switch_1
-          %b34 = block {  # case
-            %x_129:i32 = load %i_3
-            %147:ptr<private, i32, read_write> = access %data, %x_129
-            store %147, -5i
+    %207:ptr<uniform, vec2<f32>, read> = access %x_34, 0u
+    %208:f32 = load_vector_element %207, 0u
+    %x_93:f32 = let %208
+    %210:i32 = call %tint_f32_to_i32, %x_93
+    store %i_3, %210
+    loop [b: $B32, c: $B33] {  # loop_6
+      $B32: {  # body
+        %212:i32 = load %i_3
+        %x_99:i32 = let %212
+        switch %x_99 [c: (9i, $B34), c: (8i, $B35), c: (7i, $B36), c: (6i, $B37), c: (5i, $B38), c: (4i, $B39), c: (3i, $B40), c: (2i, $B41), c: (1i, $B42), c: (0i, $B43), c: (default, $B44)] {  # switch_1
+          $B34: {  # case
+            %214:i32 = load %i_3
+            %x_129:i32 = let %214
+            %216:ptr<private, i32, read_write> = access %data, %x_129
+            store %216, -5i
             exit_switch  # switch_1
           }
-          %b35 = block {  # case
-            %x_127:i32 = load %i_3
-            %149:ptr<private, i32, read_write> = access %data, %x_127
-            store %149, -4i
+          $B35: {  # case
+            %217:i32 = load %i_3
+            %x_127:i32 = let %217
+            %219:ptr<private, i32, read_write> = access %data, %x_127
+            store %219, -4i
             exit_switch  # switch_1
           }
-          %b36 = block {  # case
-            %x_125:i32 = load %i_3
-            %151:ptr<private, i32, read_write> = access %data, %x_125
-            store %151, -3i
+          $B36: {  # case
+            %220:i32 = load %i_3
+            %x_125:i32 = let %220
+            %222:ptr<private, i32, read_write> = access %data, %x_125
+            store %222, -3i
             exit_switch  # switch_1
           }
-          %b37 = block {  # case
-            %x_123:i32 = load %i_3
-            %153:ptr<private, i32, read_write> = access %data, %x_123
-            store %153, -2i
+          $B37: {  # case
+            %223:i32 = load %i_3
+            %x_123:i32 = let %223
+            %225:ptr<private, i32, read_write> = access %data, %x_123
+            store %225, -2i
             exit_switch  # switch_1
           }
-          %b38 = block {  # case
-            %x_121:i32 = load %i_3
-            %155:ptr<private, i32, read_write> = access %data, %x_121
-            store %155, -1i
+          $B38: {  # case
+            %226:i32 = load %i_3
+            %x_121:i32 = let %226
+            %228:ptr<private, i32, read_write> = access %data, %x_121
+            store %228, -1i
             exit_switch  # switch_1
           }
-          %b39 = block {  # case
-            %x_119:i32 = load %i_3
-            %157:ptr<private, i32, read_write> = access %data, %x_119
-            store %157, 0i
+          $B39: {  # case
+            %229:i32 = load %i_3
+            %x_119:i32 = let %229
+            %231:ptr<private, i32, read_write> = access %data, %x_119
+            store %231, 0i
             exit_switch  # switch_1
           }
-          %b40 = block {  # case
-            %x_117:i32 = load %i_3
-            %159:ptr<private, i32, read_write> = access %data, %x_117
-            store %159, 1i
+          $B40: {  # case
+            %232:i32 = load %i_3
+            %x_117:i32 = let %232
+            %234:ptr<private, i32, read_write> = access %data, %x_117
+            store %234, 1i
             exit_switch  # switch_1
           }
-          %b41 = block {  # case
-            %x_115:i32 = load %i_3
-            %161:ptr<private, i32, read_write> = access %data, %x_115
-            store %161, 2i
+          $B41: {  # case
+            %235:i32 = load %i_3
+            %x_115:i32 = let %235
+            %237:ptr<private, i32, read_write> = access %data, %x_115
+            store %237, 2i
             exit_switch  # switch_1
           }
-          %b42 = block {  # case
-            %x_113:i32 = load %i_3
-            %163:ptr<private, i32, read_write> = access %data, %x_113
-            store %163, 3i
+          $B42: {  # case
+            %238:i32 = load %i_3
+            %x_113:i32 = let %238
+            %240:ptr<private, i32, read_write> = access %data, %x_113
+            store %240, 3i
             exit_switch  # switch_1
           }
-          %b43 = block {  # case
-            %x_111:i32 = load %i_3
-            %165:ptr<private, i32, read_write> = access %data, %x_111
-            store %165, 4i
+          $B43: {  # case
+            %241:i32 = load %i_3
+            %x_111:i32 = let %241
+            %243:ptr<private, i32, read_write> = access %data, %x_111
+            store %243, 4i
             exit_switch  # switch_1
           }
-          %b44 = block {  # case
+          $B44: {  # case
             exit_switch  # switch_1
           }
         }
-        %x_131:i32 = load %i_3
-        %167:i32 = add %x_131, 1i
-        store %i_3, %167
-        continue %b33
+        %244:i32 = load %i_3
+        %x_131:i32 = let %244
+        %246:i32 = add %x_131, 1i
+        store %i_3, %246
+        continue  # -> $B33
       }
-      %b33 = block {  # continuing
-        %x_133:i32 = load %i_3
-        %169:bool = lt %x_133, 10i
-        %170:bool = eq %169, false
-        break_if %170 %b32
+      $B33: {  # continuing
+        %247:i32 = load %i_3
+        %x_133:i32 = let %247
+        %249:bool = lt %x_133, 10i
+        %250:bool = eq %249, false
+        break_if %250  # -> [t: exit_loop loop_6, f: $B32]
       }
     }
     store %j_1, 0i
-    loop [b: %b45, c: %b46] {  # loop_7
-      %b45 = block {  # body
-        %x_139:i32 = load %j_1
-        %172:bool = lt %x_139, 10i
-        if %172 [t: %b47, f: %b48] {  # if_9
-          %b47 = block {  # true
+    loop [b: $B45, c: $B46] {  # loop_7
+      $B45: {  # body
+        %251:i32 = load %j_1
+        %x_139:i32 = let %251
+        %253:bool = lt %x_139, 10i
+        if %253 [t: $B47, f: $B48] {  # if_9
+          $B47: {  # true
             exit_if  # if_9
           }
-          %b48 = block {  # false
+          $B48: {  # false
             exit_loop  # loop_7
           }
         }
-        %x_142:i32 = load %j_1
-        %x_143:i32 = load %j_1
-        %175:ptr<private, i32, read_write> = access %data, %x_143
-        %x_145:i32 = load %175
-        %177:ptr<private, i32, read_write> = access %temp, %x_142
-        store %177, %x_145
-        continue %b46
+        %254:i32 = load %j_1
+        %x_142:i32 = let %254
+        %256:i32 = load %j_1
+        %x_143:i32 = let %256
+        %258:ptr<private, i32, read_write> = access %data, %x_143
+        %259:i32 = load %258
+        %x_145:i32 = let %259
+        %261:ptr<private, i32, read_write> = access %temp, %x_142
+        store %261, %x_145
+        continue  # -> $B46
       }
-      %b46 = block {  # continuing
-        %x_147:i32 = load %j_1
-        %179:i32 = add %x_147, 1i
-        store %j_1, %179
-        next_iteration %b45
+      $B46: {  # continuing
+        %262:i32 = load %j_1
+        %x_147:i32 = let %262
+        %264:i32 = add %x_147, 1i
+        store %j_1, %264
+        next_iteration  # -> $B45
       }
     }
-    %180:void = call %mergeSort_
-    %x_151:f32 = load_vector_element %gl_FragCoord, 1u
-    %182:i32 = convert %x_151
-    %183:bool = lt %182, 30i
-    if %183 [t: %b49, f: %b50] {  # if_10
-      %b49 = block {  # true
-        %184:ptr<private, i32, read_write> = access %data, 0i
-        %x_158:i32 = load %184
-        %186:f32 = convert %x_158
-        %187:f32 = div %186, 10.0f
-        %188:f32 = add 0.5f, %187
-        store %grey, %188
+    %265:void = call %mergeSort_
+    %266:f32 = load_vector_element %gl_FragCoord, 1u
+    %x_151:f32 = let %266
+    %268:i32 = call %tint_f32_to_i32, %x_151
+    %269:bool = lt %268, 30i
+    if %269 [t: $B49, f: $B50] {  # if_10
+      $B49: {  # true
+        %270:ptr<private, i32, read_write> = access %data, 0i
+        %271:i32 = load %270
+        %x_158:i32 = let %271
+        %273:f32 = convert %x_158
+        %274:f32 = div %273, 10.0f
+        %275:f32 = add 0.5f, %274
+        store %grey, %275
         exit_if  # if_10
       }
-      %b50 = block {  # false
-        %x_163:f32 = load_vector_element %gl_FragCoord, 1u
-        %190:i32 = convert %x_163
-        %191:bool = lt %190, 60i
-        if %191 [t: %b51, f: %b52] {  # if_11
-          %b51 = block {  # true
-            %192:ptr<private, i32, read_write> = access %data, 1i
-            %x_170:i32 = load %192
-            %194:f32 = convert %x_170
-            %195:f32 = div %194, 10.0f
-            %196:f32 = add 0.5f, %195
-            store %grey, %196
+      $B50: {  # false
+        %276:f32 = load_vector_element %gl_FragCoord, 1u
+        %x_163:f32 = let %276
+        %278:i32 = call %tint_f32_to_i32, %x_163
+        %279:bool = lt %278, 60i
+        if %279 [t: $B51, f: $B52] {  # if_11
+          $B51: {  # true
+            %280:ptr<private, i32, read_write> = access %data, 1i
+            %281:i32 = load %280
+            %x_170:i32 = let %281
+            %283:f32 = convert %x_170
+            %284:f32 = div %283, 10.0f
+            %285:f32 = add 0.5f, %284
+            store %grey, %285
             exit_if  # if_11
           }
-          %b52 = block {  # false
-            %x_175:f32 = load_vector_element %gl_FragCoord, 1u
-            %198:i32 = convert %x_175
-            %199:bool = lt %198, 90i
-            if %199 [t: %b53, f: %b54] {  # if_12
-              %b53 = block {  # true
-                %200:ptr<private, i32, read_write> = access %data, 2i
-                %x_182:i32 = load %200
-                %202:f32 = convert %x_182
-                %203:f32 = div %202, 10.0f
-                %204:f32 = add 0.5f, %203
-                store %grey, %204
+          $B52: {  # false
+            %286:f32 = load_vector_element %gl_FragCoord, 1u
+            %x_175:f32 = let %286
+            %288:i32 = call %tint_f32_to_i32, %x_175
+            %289:bool = lt %288, 90i
+            if %289 [t: $B53, f: $B54] {  # if_12
+              $B53: {  # true
+                %290:ptr<private, i32, read_write> = access %data, 2i
+                %291:i32 = load %290
+                %x_182:i32 = let %291
+                %293:f32 = convert %x_182
+                %294:f32 = div %293, 10.0f
+                %295:f32 = add 0.5f, %294
+                store %grey, %295
                 exit_if  # if_12
               }
-              %b54 = block {  # false
-                %x_187:f32 = load_vector_element %gl_FragCoord, 1u
-                %206:i32 = convert %x_187
-                %207:bool = lt %206, 120i
-                if %207 [t: %b55, f: %b56] {  # if_13
-                  %b55 = block {  # true
-                    %208:ptr<private, i32, read_write> = access %data, 3i
-                    %x_194:i32 = load %208
-                    %210:f32 = convert %x_194
-                    %211:f32 = div %210, 10.0f
-                    %212:f32 = add 0.5f, %211
-                    store %grey, %212
+              $B54: {  # false
+                %296:f32 = load_vector_element %gl_FragCoord, 1u
+                %x_187:f32 = let %296
+                %298:i32 = call %tint_f32_to_i32, %x_187
+                %299:bool = lt %298, 120i
+                if %299 [t: $B55, f: $B56] {  # if_13
+                  $B55: {  # true
+                    %300:ptr<private, i32, read_write> = access %data, 3i
+                    %301:i32 = load %300
+                    %x_194:i32 = let %301
+                    %303:f32 = convert %x_194
+                    %304:f32 = div %303, 10.0f
+                    %305:f32 = add 0.5f, %304
+                    store %grey, %305
                     exit_if  # if_13
                   }
-                  %b56 = block {  # false
-                    %x_199:f32 = load_vector_element %gl_FragCoord, 1u
-                    %214:i32 = convert %x_199
-                    %215:bool = lt %214, 150i
-                    if %215 [t: %b57, f: %b58] {  # if_14
-                      %b57 = block {  # true
-                        discard
+                  $B56: {  # false
+                    %306:f32 = load_vector_element %gl_FragCoord, 1u
+                    %x_199:f32 = let %306
+                    %308:i32 = call %tint_f32_to_i32, %x_199
+                    %309:bool = lt %308, 150i
+                    if %309 [t: $B57, f: $B58] {  # if_14
+                      $B57: {  # true
+                        store %continue_execution, false
                         exit_if  # if_14
                       }
-                      %b58 = block {  # false
-                        %x_206:f32 = load_vector_element %gl_FragCoord, 1u
-                        %217:i32 = convert %x_206
-                        %218:bool = lt %217, 180i
-                        if %218 [t: %b59, f: %b60] {  # if_15
-                          %b59 = block {  # true
-                            %219:ptr<private, i32, read_write> = access %data, 5i
-                            %x_213:i32 = load %219
-                            %221:f32 = convert %x_213
-                            %222:f32 = div %221, 10.0f
-                            %223:f32 = add 0.5f, %222
-                            store %grey, %223
+                      $B58: {  # false
+                        %310:f32 = load_vector_element %gl_FragCoord, 1u
+                        %x_206:f32 = let %310
+                        %312:i32 = call %tint_f32_to_i32, %x_206
+                        %313:bool = lt %312, 180i
+                        if %313 [t: $B59, f: $B60] {  # if_15
+                          $B59: {  # true
+                            %314:ptr<private, i32, read_write> = access %data, 5i
+                            %315:i32 = load %314
+                            %x_213:i32 = let %315
+                            %317:f32 = convert %x_213
+                            %318:f32 = div %317, 10.0f
+                            %319:f32 = add 0.5f, %318
+                            store %grey, %319
                             exit_if  # if_15
                           }
-                          %b60 = block {  # false
-                            %x_218:f32 = load_vector_element %gl_FragCoord, 1u
-                            %225:i32 = convert %x_218
-                            %226:bool = lt %225, 210i
-                            if %226 [t: %b61, f: %b62] {  # if_16
-                              %b61 = block {  # true
-                                %227:ptr<private, i32, read_write> = access %data, 6i
-                                %x_225:i32 = load %227
-                                %229:f32 = convert %x_225
-                                %230:f32 = div %229, 10.0f
-                                %231:f32 = add 0.5f, %230
-                                store %grey, %231
+                          $B60: {  # false
+                            %320:f32 = load_vector_element %gl_FragCoord, 1u
+                            %x_218:f32 = let %320
+                            %322:i32 = call %tint_f32_to_i32, %x_218
+                            %323:bool = lt %322, 210i
+                            if %323 [t: $B61, f: $B62] {  # if_16
+                              $B61: {  # true
+                                %324:ptr<private, i32, read_write> = access %data, 6i
+                                %325:i32 = load %324
+                                %x_225:i32 = let %325
+                                %327:f32 = convert %x_225
+                                %328:f32 = div %327, 10.0f
+                                %329:f32 = add 0.5f, %328
+                                store %grey, %329
                                 exit_if  # if_16
                               }
-                              %b62 = block {  # false
-                                %x_230:f32 = load_vector_element %gl_FragCoord, 1u
-                                %233:i32 = convert %x_230
-                                %234:bool = lt %233, 240i
-                                if %234 [t: %b63, f: %b64] {  # if_17
-                                  %b63 = block {  # true
-                                    %235:ptr<private, i32, read_write> = access %data, 7i
-                                    %x_237:i32 = load %235
-                                    %237:f32 = convert %x_237
-                                    %238:f32 = div %237, 10.0f
-                                    %239:f32 = add 0.5f, %238
-                                    store %grey, %239
+                              $B62: {  # false
+                                %330:f32 = load_vector_element %gl_FragCoord, 1u
+                                %x_230:f32 = let %330
+                                %332:i32 = call %tint_f32_to_i32, %x_230
+                                %333:bool = lt %332, 240i
+                                if %333 [t: $B63, f: $B64] {  # if_17
+                                  $B63: {  # true
+                                    %334:ptr<private, i32, read_write> = access %data, 7i
+                                    %335:i32 = load %334
+                                    %x_237:i32 = let %335
+                                    %337:f32 = convert %x_237
+                                    %338:f32 = div %337, 10.0f
+                                    %339:f32 = add 0.5f, %338
+                                    store %grey, %339
                                     exit_if  # if_17
                                   }
-                                  %b64 = block {  # false
-                                    %x_242:f32 = load_vector_element %gl_FragCoord, 1u
-                                    %241:i32 = convert %x_242
-                                    %242:bool = lt %241, 270i
-                                    if %242 [t: %b65, f: %b66] {  # if_18
-                                      %b65 = block {  # true
-                                        %243:ptr<private, i32, read_write> = access %data, 8i
-                                        %x_249:i32 = load %243
-                                        %245:f32 = convert %x_249
-                                        %246:f32 = div %245, 10.0f
-                                        %247:f32 = add 0.5f, %246
-                                        store %grey, %247
+                                  $B64: {  # false
+                                    %340:f32 = load_vector_element %gl_FragCoord, 1u
+                                    %x_242:f32 = let %340
+                                    %342:i32 = call %tint_f32_to_i32, %x_242
+                                    %343:bool = lt %342, 270i
+                                    if %343 [t: $B65, f: $B66] {  # if_18
+                                      $B65: {  # true
+                                        %344:ptr<private, i32, read_write> = access %data, 8i
+                                        %345:i32 = load %344
+                                        %x_249:i32 = let %345
+                                        %347:f32 = convert %x_249
+                                        %348:f32 = div %347, 10.0f
+                                        %349:f32 = add 0.5f, %348
+                                        store %grey, %349
                                         exit_if  # if_18
                                       }
-                                      %b66 = block {  # false
-                                        discard
+                                      $B66: {  # false
+                                        store %continue_execution, false
                                         exit_if  # if_18
                                       }
                                     }
@@ -561,23 +661,54 @@
         exit_if  # if_10
       }
     }
-    %x_253:f32 = load %grey
-    %x_254:vec3<f32> = construct %x_253, %x_253, %x_253
-    %250:f32 = access %x_254, 0u
-    %251:f32 = access %x_254, 1u
-    %252:f32 = access %x_254, 2u
-    %253:vec4<f32> = construct %250, %251, %252, 1.0f
-    store %x_GLF_color, %253
+    %350:f32 = load %grey
+    %x_253:f32 = let %350
+    %352:vec3<f32> = construct %x_253, %x_253, %x_253
+    %x_254:vec3<f32> = let %352
+    %354:f32 = access %x_254, 0u
+    %355:f32 = access %x_254, 1u
+    %356:f32 = access %x_254, 2u
+    %357:vec4<f32> = construct %354, %355, %356, 1.0f
+    store %x_GLF_color, %357
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b67 {
-  %b67 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B67: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %256:void = call %main_1
-    %257:vec4<f32> = load %x_GLF_color
-    %258:main_out = construct %257
-    ret %258
+    %360:void = call %main_1
+    %361:vec4<f32> = load %x_GLF_color
+    %362:main_out = construct %361
+    %363:bool = load %continue_execution
+    %364:bool = eq %363, false
+    if %364 [t: $B68] {  # if_19
+      $B68: {  # true
+        terminate_invocation
+      }
+    }
+    ret %362
+  }
+}
+%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B69: {
+    %367:bool = eq %rhs, 0i
+    %368:bool = eq %lhs, -2147483648i
+    %369:bool = eq %rhs, -1i
+    %370:bool = and %368, %369
+    %371:bool = or %367, %370
+    %372:i32 = select %rhs, 1i, %371
+    %373:i32 = div %lhs, %372
+    ret %373
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B70: {
+    %375:i32 = convert %value
+    %376:bool = gte %value, -2147483648.0f
+    %377:i32 = select -2147483648i, %375, %376
+    %378:bool = lte %value, 2147483520.0f
+    %379:i32 = select 2147483647i, %377, %378
+    ret %379
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-mergesort-for-always-false-if-discard/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-mergesort-for-always-false-if-discard/1.spvasm.expected.ir.msl
index b9ef350..c4a4f63 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-mergesort-for-always-false-if-discard/1.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/stable-mergesort-for-always-false-if-discard/1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,14 +8,15 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_8:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %temp:ptr<function, array<i32, 10>, read_write> = var
     %data:ptr<function, array<i32, 10>, read_write> = var
     %x_65:ptr<function, i32, read_write> = var
@@ -24,607 +25,634 @@
     %x_180:ptr<function, f32, read_write> = var
     %x_279:ptr<function, f32, read_write> = var
     %x_280:ptr<function, f32, read_write> = var
-    %13:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
-    %x_62:f32 = load_vector_element %13, 0u
-    %15:i32 = convert %x_62
-    store %x_65, %15
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    %14:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
+    %15:f32 = load_vector_element %14, 0u
+    %x_62:f32 = let %15
+    %17:i32 = call %tint_f32_to_i32, %x_62
+    store %x_65, %17
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %x_66:ptr<function, i32, read_write> = var
-        %17:i32 = load %x_65
-        switch %17 [c: (9i, %b5), c: (8i, %b6), c: (7i, %b7), c: (6i, %b8), c: (5i, %b9), c: (4i, %b10), c: (3i, %b11), c: (2i, %b12), c: (1i, %b13), c: (0i, %b14), c: (default, %b15)] {  # switch_1
-          %b5 = block {  # case
-            %18:i32 = load %x_65
-            %19:ptr<function, i32, read_write> = access %data, %18
-            store %19, -5i
+        %20:i32 = load %x_65
+        switch %20 [c: (9i, $B5), c: (8i, $B6), c: (7i, $B7), c: (6i, $B8), c: (5i, $B9), c: (4i, $B10), c: (3i, $B11), c: (2i, $B12), c: (1i, $B13), c: (0i, $B14), c: (default, $B15)] {  # switch_1
+          $B5: {  # case
+            %21:i32 = load %x_65
+            %22:ptr<function, i32, read_write> = access %data, %21
+            store %22, -5i
             exit_switch  # switch_1
           }
-          %b6 = block {  # case
-            %20:i32 = load %x_65
-            %21:ptr<function, i32, read_write> = access %data, %20
-            store %21, -4i
+          $B6: {  # case
+            %23:i32 = load %x_65
+            %24:ptr<function, i32, read_write> = access %data, %23
+            store %24, -4i
             exit_switch  # switch_1
           }
-          %b7 = block {  # case
-            %22:i32 = load %x_65
-            %23:ptr<function, i32, read_write> = access %data, %22
-            store %23, -3i
+          $B7: {  # case
+            %25:i32 = load %x_65
+            %26:ptr<function, i32, read_write> = access %data, %25
+            store %26, -3i
             exit_switch  # switch_1
           }
-          %b8 = block {  # case
-            %24:i32 = load %x_65
-            %25:ptr<function, i32, read_write> = access %data, %24
-            store %25, -2i
+          $B8: {  # case
+            %27:i32 = load %x_65
+            %28:ptr<function, i32, read_write> = access %data, %27
+            store %28, -2i
             exit_switch  # switch_1
           }
-          %b9 = block {  # case
-            %26:i32 = load %x_65
-            %27:ptr<function, i32, read_write> = access %data, %26
-            store %27, -1i
+          $B9: {  # case
+            %29:i32 = load %x_65
+            %30:ptr<function, i32, read_write> = access %data, %29
+            store %30, -1i
             exit_switch  # switch_1
           }
-          %b10 = block {  # case
-            %28:i32 = load %x_65
-            %29:ptr<function, i32, read_write> = access %data, %28
-            store %29, 0i
+          $B10: {  # case
+            %31:i32 = load %x_65
+            %32:ptr<function, i32, read_write> = access %data, %31
+            store %32, 0i
             exit_switch  # switch_1
           }
-          %b11 = block {  # case
-            %30:i32 = load %x_65
-            %31:ptr<function, i32, read_write> = access %data, %30
-            store %31, 1i
+          $B11: {  # case
+            %33:i32 = load %x_65
+            %34:ptr<function, i32, read_write> = access %data, %33
+            store %34, 1i
             exit_switch  # switch_1
           }
-          %b12 = block {  # case
-            %32:i32 = load %x_65
-            %33:ptr<function, i32, read_write> = access %data, %32
-            store %33, 2i
+          $B12: {  # case
+            %35:i32 = load %x_65
+            %36:ptr<function, i32, read_write> = access %data, %35
+            store %36, 2i
             exit_switch  # switch_1
           }
-          %b13 = block {  # case
-            %34:i32 = load %x_65
-            %35:ptr<function, i32, read_write> = access %data, %34
-            store %35, 3i
+          $B13: {  # case
+            %37:i32 = load %x_65
+            %38:ptr<function, i32, read_write> = access %data, %37
+            store %38, 3i
             exit_switch  # switch_1
           }
-          %b14 = block {  # case
-            %36:i32 = load %x_65
-            %37:ptr<function, i32, read_write> = access %data, %36
-            store %37, 4i
+          $B14: {  # case
+            %39:i32 = load %x_65
+            %40:ptr<function, i32, read_write> = access %data, %39
+            store %40, 4i
             exit_switch  # switch_1
           }
-          %b15 = block {  # case
+          $B15: {  # case
             exit_switch  # switch_1
           }
         }
-        %38:i32 = load %x_65
-        %39:i32 = add %38, 1i
-        store %x_66, %39
-        continue %b4
+        %41:i32 = load %x_65
+        %42:i32 = add %41, 1i
+        store %x_66, %42
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %40:i32 = load %x_66
-        store %x_65, %40
-        %41:i32 = load %x_66
-        %42:bool = lt %41, 10i
-        %43:bool = eq %42, false
-        break_if %43 %b3
+      $B4: {  # continuing
+        %43:i32 = load %x_66
+        store %x_65, %43
+        %44:i32 = load %x_66
+        %45:bool = lt %44, 10i
+        %46:bool = eq %45, false
+        break_if %46  # -> [t: exit_loop loop_1, f: $B3]
       }
     }
     store %x_93, 0i
-    loop [b: %b16, c: %b17] {  # loop_2
-      %b16 = block {  # body
+    loop [b: $B16, c: $B17] {  # loop_2
+      $B16: {  # body
         %x_94:ptr<function, i32, read_write> = var
-        %45:i32 = load %x_93
-        %46:bool = lt %45, 10i
-        if %46 [t: %b18, f: %b19] {  # if_1
-          %b18 = block {  # true
+        %48:i32 = load %x_93
+        %49:bool = lt %48, 10i
+        if %49 [t: $B18, f: $B19] {  # if_1
+          $B18: {  # true
             exit_if  # if_1
           }
-          %b19 = block {  # false
+          $B19: {  # false
             exit_loop  # loop_2
           }
         }
-        continue %b17
+        continue  # -> $B17
       }
-      %b17 = block {  # continuing
-        %47:i32 = load %x_93
-        %48:ptr<function, i32, read_write> = access %temp, %47
-        %49:i32 = load %x_93
-        %50:ptr<function, i32, read_write> = access %data, %49
-        %51:i32 = load %50
-        store %48, %51
+      $B17: {  # continuing
+        %50:i32 = load %x_93
+        %51:ptr<function, i32, read_write> = access %temp, %50
         %52:i32 = load %x_93
-        %53:i32 = add %52, 1i
-        store %x_94, %53
-        %54:i32 = load %x_94
-        store %x_93, %54
-        next_iteration %b16
+        %53:ptr<function, i32, read_write> = access %data, %52
+        %54:i32 = load %53
+        store %51, %54
+        %55:i32 = load %x_93
+        %56:i32 = add %55, 1i
+        store %x_94, %56
+        %57:i32 = load %x_94
+        store %x_93, %57
+        next_iteration  # -> $B16
       }
     }
     store %x_102, 1i
-    loop [b: %b20, c: %b21] {  # loop_3
-      %b20 = block {  # body
+    loop [b: $B20, c: $B21] {  # loop_3
+      $B20: {  # body
         %x_109:ptr<function, i32, read_write> = var
         %x_103:ptr<function, i32, read_write> = var
-        %57:i32 = load %x_102
-        %58:bool = lte %57, 9i
-        if %58 [t: %b22, f: %b23] {  # if_2
-          %b22 = block {  # true
+        %60:i32 = load %x_102
+        %61:bool = lte %60, 9i
+        if %61 [t: $B22, f: $B23] {  # if_2
+          $B22: {  # true
             exit_if  # if_2
           }
-          %b23 = block {  # false
+          $B23: {  # false
             exit_loop  # loop_3
           }
         }
         store %x_109, 0i
-        loop [b: %b24, c: %b25] {  # loop_4
-          %b24 = block {  # body
+        loop [b: $B24, c: $B25] {  # loop_4
+          $B24: {  # body
             %x_121:ptr<function, i32, read_write> = var
             %x_124:ptr<function, i32, read_write> = var
             %x_126:ptr<function, i32, read_write> = var
             %x_148:ptr<function, i32, read_write> = var
             %x_151:ptr<function, i32, read_write> = var
             %x_161:ptr<function, i32, read_write> = var
-            %65:i32 = load %x_109
-            %66:bool = lt %65, 9i
-            if %66 [t: %b26, f: %b27] {  # if_3
-              %b26 = block {  # true
+            %68:i32 = load %x_109
+            %69:bool = lt %68, 9i
+            if %69 [t: $B26, f: $B27] {  # if_3
+              $B26: {  # true
                 exit_if  # if_3
               }
-              %b27 = block {  # false
+              $B27: {  # false
                 exit_loop  # loop_4
               }
             }
-            %67:i32 = load %x_109
-            %68:i32 = load %x_102
-            %x_115:i32 = add %67, %68
-            %x_116:i32 = sub %x_115, 1i
-            %71:i32 = load %x_109
-            %72:i32 = load %x_102
-            %73:i32 = mul 2i, %72
-            %x_110:i32 = add %71, %73
-            %75:i32 = sub %x_110, 1i
-            %x_119:i32 = min %75, 9i
-            %77:i32 = load %x_109
-            store %x_121, %77
+            %70:i32 = load %x_109
+            %71:i32 = load %x_102
+            %72:i32 = add %70, %71
+            %x_115:i32 = let %72
+            %74:i32 = sub %x_115, 1i
+            %x_116:i32 = let %74
+            %76:i32 = load %x_109
+            %77:i32 = load %x_102
+            %78:i32 = mul 2i, %77
+            %79:i32 = add %76, %78
+            %x_110:i32 = let %79
+            %81:i32 = sub %x_110, 1i
+            %82:i32 = min %81, 9i
+            %x_119:i32 = let %82
+            %84:i32 = load %x_109
+            store %x_121, %84
             store %x_124, %x_115
-            %78:i32 = load %x_109
-            store %x_126, %78
-            loop [b: %b28, c: %b29] {  # loop_5
-              %b28 = block {  # body
+            %85:i32 = load %x_109
+            store %x_126, %85
+            loop [b: $B28, c: $B29] {  # loop_5
+              $B28: {  # body
                 %x_141:ptr<function, i32, read_write> = var
                 %x_144:ptr<function, i32, read_write> = var
                 %x_125:ptr<function, i32, read_write> = var
                 %x_127:ptr<function, i32, read_write> = var
-                %83:i32 = load %x_126
-                %84:bool = lte %83, %x_116
-                %85:i32 = load %x_124
-                %86:bool = lte %85, %x_119
-                %87:bool = and %84, %86
-                if %87 [t: %b30, f: %b31] {  # if_4
-                  %b30 = block {  # true
+                %90:i32 = load %x_126
+                %91:bool = lte %90, %x_116
+                %92:i32 = load %x_124
+                %93:bool = lte %92, %x_119
+                %94:bool = and %91, %93
+                if %94 [t: $B30, f: $B31] {  # if_4
+                  $B30: {  # true
                     exit_if  # if_4
                   }
-                  %b31 = block {  # false
+                  $B31: {  # false
                     exit_loop  # loop_5
                   }
                 }
-                %x_133_save:i32 = load %x_126
-                %x_135_save:i32 = load %x_124
-                %90:i32 = load %x_121
-                %x_122:i32 = add %90, 1i
-                %92:i32 = load %x_126
-                %93:ptr<function, i32, read_write> = access %data, %92
-                %94:i32 = load %93
-                %95:i32 = load %x_124
-                %96:ptr<function, i32, read_write> = access %data, %95
-                %97:i32 = load %96
-                %98:bool = lt %94, %97
-                if %98 [t: %b32, f: %b33] {  # if_5
-                  %b32 = block {  # true
-                    %99:i32 = load %x_126
-                    %100:i32 = add %99, 1i
-                    store %x_141, %100
-                    %101:i32 = load %x_121
-                    %102:ptr<function, i32, read_write> = access %temp, %101
-                    %103:ptr<function, i32, read_write> = access %data, %x_133_save
-                    %104:i32 = load %103
-                    store %102, %104
-                    %105:i32 = load %x_124
-                    store %x_125, %105
-                    %106:i32 = load %x_141
-                    store %x_127, %106
+                %95:i32 = load %x_126
+                %x_133_save:i32 = let %95
+                %97:i32 = load %x_124
+                %x_135_save:i32 = let %97
+                %99:i32 = load %x_121
+                %100:i32 = add %99, 1i
+                %x_122:i32 = let %100
+                %102:i32 = load %x_126
+                %103:ptr<function, i32, read_write> = access %data, %102
+                %104:i32 = load %103
+                %105:i32 = load %x_124
+                %106:ptr<function, i32, read_write> = access %data, %105
+                %107:i32 = load %106
+                %108:bool = lt %104, %107
+                if %108 [t: $B32, f: $B33] {  # if_5
+                  $B32: {  # true
+                    %109:i32 = load %x_126
+                    %110:i32 = add %109, 1i
+                    store %x_141, %110
+                    %111:i32 = load %x_121
+                    %112:ptr<function, i32, read_write> = access %temp, %111
+                    %113:ptr<function, i32, read_write> = access %data, %x_133_save
+                    %114:i32 = load %113
+                    store %112, %114
+                    %115:i32 = load %x_124
+                    store %x_125, %115
+                    %116:i32 = load %x_141
+                    store %x_127, %116
                     exit_if  # if_5
                   }
-                  %b33 = block {  # false
-                    %107:i32 = load %x_124
-                    %108:i32 = add %107, 1i
-                    store %x_144, %108
-                    %109:i32 = load %x_121
-                    %110:ptr<function, i32, read_write> = access %temp, %109
-                    %111:ptr<function, i32, read_write> = access %data, %x_135_save
-                    %112:i32 = load %111
-                    store %110, %112
-                    %113:i32 = load %x_144
-                    store %x_125, %113
-                    %114:i32 = load %x_126
-                    store %x_127, %114
+                  $B33: {  # false
+                    %117:i32 = load %x_124
+                    %118:i32 = add %117, 1i
+                    store %x_144, %118
+                    %119:i32 = load %x_121
+                    %120:ptr<function, i32, read_write> = access %temp, %119
+                    %121:ptr<function, i32, read_write> = access %data, %x_135_save
+                    %122:i32 = load %121
+                    store %120, %122
+                    %123:i32 = load %x_144
+                    store %x_125, %123
+                    %124:i32 = load %x_126
+                    store %x_127, %124
                     exit_if  # if_5
                   }
                 }
-                continue %b29
+                continue  # -> $B29
               }
-              %b29 = block {  # continuing
+              $B29: {  # continuing
                 store %x_121, %x_122
-                %115:i32 = load %x_125
-                store %x_124, %115
-                %116:i32 = load %x_127
-                store %x_126, %116
-                next_iteration %b28
+                %125:i32 = load %x_125
+                store %x_124, %125
+                %126:i32 = load %x_127
+                store %x_126, %126
+                next_iteration  # -> $B28
               }
             }
-            %117:i32 = load %x_121
-            store %x_148, %117
-            %118:i32 = load %x_126
-            store %x_151, %118
-            loop [b: %b34, c: %b35] {  # loop_6
-              %b34 = block {  # body
+            %127:i32 = load %x_121
+            store %x_148, %127
+            %128:i32 = load %x_126
+            store %x_151, %128
+            loop [b: $B34, c: $B35] {  # loop_6
+              $B34: {  # body
                 %x_149:ptr<function, i32, read_write> = var
                 %x_152:ptr<function, i32, read_write> = var
-                %121:i32 = load %x_151
-                %122:bool = lt %121, 10i
-                %123:i32 = load %x_151
-                %124:bool = lte %123, %x_116
-                %125:bool = and %122, %124
-                if %125 [t: %b36, f: %b37] {  # if_6
-                  %b36 = block {  # true
+                %131:i32 = load %x_151
+                %132:bool = lt %131, 10i
+                %133:i32 = load %x_151
+                %134:bool = lte %133, %x_116
+                %135:bool = and %132, %134
+                if %135 [t: $B36, f: $B37] {  # if_6
+                  $B36: {  # true
                     exit_if  # if_6
                   }
-                  %b37 = block {  # false
+                  $B37: {  # false
                     exit_loop  # loop_6
                   }
                 }
-                continue %b35
+                continue  # -> $B35
               }
-              %b35 = block {  # continuing
-                %126:i32 = load %x_148
-                %127:i32 = add %126, 1i
-                store %x_149, %127
-                %128:i32 = load %x_151
-                %129:i32 = add %128, 1i
-                store %x_152, %129
-                %130:i32 = load %x_148
-                %131:ptr<function, i32, read_write> = access %temp, %130
-                %132:i32 = load %x_151
-                %133:ptr<function, i32, read_write> = access %data, %132
-                %134:i32 = load %133
-                store %131, %134
-                %135:i32 = load %x_149
-                store %x_148, %135
-                %136:i32 = load %x_152
-                store %x_151, %136
-                next_iteration %b34
+              $B35: {  # continuing
+                %136:i32 = load %x_148
+                %137:i32 = add %136, 1i
+                store %x_149, %137
+                %138:i32 = load %x_151
+                %139:i32 = add %138, 1i
+                store %x_152, %139
+                %140:i32 = load %x_148
+                %141:ptr<function, i32, read_write> = access %temp, %140
+                %142:i32 = load %x_151
+                %143:ptr<function, i32, read_write> = access %data, %142
+                %144:i32 = load %143
+                store %141, %144
+                %145:i32 = load %x_149
+                store %x_148, %145
+                %146:i32 = load %x_152
+                store %x_151, %146
+                next_iteration  # -> $B34
               }
             }
-            %137:i32 = load %x_109
-            store %x_161, %137
-            loop [b: %b38, c: %b39] {  # loop_7
-              %b38 = block {  # body
+            %147:i32 = load %x_109
+            store %x_161, %147
+            loop [b: $B38, c: $B39] {  # loop_7
+              $B38: {  # body
                 %x_162:ptr<function, i32, read_write> = var
-                %139:i32 = load %x_161
-                %140:bool = lte %139, %x_119
-                if %140 [t: %b40, f: %b41] {  # if_7
-                  %b40 = block {  # true
+                %149:i32 = load %x_161
+                %150:bool = lte %149, %x_119
+                if %150 [t: $B40, f: $B41] {  # if_7
+                  $B40: {  # true
                     exit_if  # if_7
                   }
-                  %b41 = block {  # false
+                  $B41: {  # false
                     exit_loop  # loop_7
                   }
                 }
-                continue %b39
+                continue  # -> $B39
               }
-              %b39 = block {  # continuing
-                %141:i32 = load %x_161
-                %142:ptr<function, i32, read_write> = access %data, %141
-                %143:i32 = load %x_161
-                %144:ptr<function, i32, read_write> = access %temp, %143
-                %145:i32 = load %144
-                store %142, %145
-                %146:i32 = load %x_161
-                %147:i32 = add %146, 1i
-                store %x_162, %147
-                %148:i32 = load %x_162
-                store %x_161, %148
-                next_iteration %b38
+              $B39: {  # continuing
+                %151:i32 = load %x_161
+                %152:ptr<function, i32, read_write> = access %data, %151
+                %153:i32 = load %x_161
+                %154:ptr<function, i32, read_write> = access %temp, %153
+                %155:i32 = load %154
+                store %152, %155
+                %156:i32 = load %x_161
+                %157:i32 = add %156, 1i
+                store %x_162, %157
+                %158:i32 = load %x_162
+                store %x_161, %158
+                next_iteration  # -> $B38
               }
             }
-            continue %b25
+            continue  # -> $B25
           }
-          %b25 = block {  # continuing
+          $B25: {  # continuing
             store %x_109, %x_110
-            next_iteration %b24
+            next_iteration  # -> $B24
           }
         }
-        continue %b21
+        continue  # -> $B21
       }
-      %b21 = block {  # continuing
-        %149:i32 = load %x_102
-        %150:i32 = mul 2i, %149
-        store %x_103, %150
-        %151:i32 = load %x_103
-        store %x_102, %151
-        next_iteration %b20
+      $B21: {  # continuing
+        %159:i32 = load %x_102
+        %160:i32 = mul 2i, %159
+        store %x_103, %160
+        %161:i32 = load %x_103
+        store %x_102, %161
+        next_iteration  # -> $B20
       }
     }
     %x_171:ptr<function, i32, read_write> = var
     %x_189:ptr<function, f32, read_write> = var
     %x_278:ptr<function, f32, read_write> = var
-    %155:f32 = load_vector_element %gl_FragCoord, 1u
-    %156:i32 = convert %155
-    store %x_171, %156
-    %157:i32 = load %x_171
-    %158:bool = lt %157, 30i
-    if %158 [t: %b42, f: %b43] {  # if_8
-      %b42 = block {  # true
-        %159:ptr<function, i32, read_write> = access %data, 0i
-        %160:i32 = load %159
-        %161:f32 = convert %160
-        %162:f32 = mul %161, 0.10000000149011611938f
-        %163:f32 = add 0.5f, %162
-        store %x_180, %163
-        %164:f32 = load %x_180
-        store %x_280, %164
+    %165:f32 = load_vector_element %gl_FragCoord, 1u
+    %166:i32 = call %tint_f32_to_i32, %165
+    store %x_171, %166
+    %167:i32 = load %x_171
+    %168:bool = lt %167, 30i
+    if %168 [t: $B42, f: $B43] {  # if_8
+      $B42: {  # true
+        %169:ptr<function, i32, read_write> = access %data, 0i
+        %170:i32 = load %169
+        %171:f32 = convert %170
+        %172:f32 = mul %171, 0.10000000149011611938f
+        %173:f32 = add 0.5f, %172
+        store %x_180, %173
+        %174:f32 = load %x_180
+        store %x_280, %174
         exit_if  # if_8
       }
-      %b43 = block {  # false
+      $B43: {  # false
         %x_198:ptr<function, f32, read_write> = var
         %x_277:ptr<function, f32, read_write> = var
-        %167:i32 = load %x_171
-        %168:bool = lt %167, 60i
-        if %168 [t: %b44, f: %b45] {  # if_9
-          %b44 = block {  # true
-            %169:ptr<function, i32, read_write> = access %data, 1i
-            %170:i32 = load %169
-            %171:f32 = convert %170
-            %172:f32 = mul %171, 0.10000000149011611938f
-            %173:f32 = add 0.5f, %172
-            store %x_189, %173
-            %174:f32 = load %x_189
-            store %x_279, %174
+        %177:i32 = load %x_171
+        %178:bool = lt %177, 60i
+        if %178 [t: $B44, f: $B45] {  # if_9
+          $B44: {  # true
+            %179:ptr<function, i32, read_write> = access %data, 1i
+            %180:i32 = load %179
+            %181:f32 = convert %180
+            %182:f32 = mul %181, 0.10000000149011611938f
+            %183:f32 = add 0.5f, %182
+            store %x_189, %183
+            %184:f32 = load %x_189
+            store %x_279, %184
             exit_if  # if_9
           }
-          %b45 = block {  # false
+          $B45: {  # false
             %x_207:ptr<function, f32, read_write> = var
             %x_249:ptr<function, f32, read_write> = var
-            %177:i32 = load %x_171
-            %178:bool = lt %177, 90i
-            if %178 [t: %b46, f: %b47] {  # if_10
-              %b46 = block {  # true
-                %179:ptr<function, i32, read_write> = access %data, 2i
-                %180:i32 = load %179
-                %181:f32 = convert %180
-                %182:f32 = mul %181, 0.10000000149011611938f
-                %183:f32 = add 0.5f, %182
-                store %x_198, %183
-                %184:f32 = load %x_198
-                store %x_278, %184
+            %187:i32 = load %x_171
+            %188:bool = lt %187, 90i
+            if %188 [t: $B46, f: $B47] {  # if_10
+              $B46: {  # true
+                %189:ptr<function, i32, read_write> = access %data, 2i
+                %190:i32 = load %189
+                %191:f32 = convert %190
+                %192:f32 = mul %191, 0.10000000149011611938f
+                %193:f32 = add 0.5f, %192
+                store %x_198, %193
+                %194:f32 = load %x_198
+                store %x_278, %194
                 exit_if  # if_10
               }
-              %b47 = block {  # false
-                %185:i32 = load %x_171
-                %186:bool = lt %185, 120i
-                if %186 [t: %b48, f: %b49] {  # if_11
-                  %b48 = block {  # true
-                    %187:ptr<function, i32, read_write> = access %data, 3i
-                    %188:i32 = load %187
-                    %189:f32 = convert %188
-                    %190:f32 = mul %189, 0.10000000149011611938f
-                    %191:f32 = add 0.5f, %190
-                    store %x_207, %191
-                    %192:f32 = load %x_207
-                    store %x_277, %192
+              $B47: {  # false
+                %195:i32 = load %x_171
+                %196:bool = lt %195, 120i
+                if %196 [t: $B48, f: $B49] {  # if_11
+                  $B48: {  # true
+                    %197:ptr<function, i32, read_write> = access %data, 3i
+                    %198:i32 = load %197
+                    %199:f32 = convert %198
+                    %200:f32 = mul %199, 0.10000000149011611938f
+                    %201:f32 = add 0.5f, %200
+                    store %x_207, %201
+                    %202:f32 = load %x_207
+                    store %x_277, %202
                     exit_if  # if_11
                   }
-                  %b49 = block {  # false
+                  $B49: {  # false
                     %x_220:ptr<function, f32, read_write> = var
                     %x_248:ptr<function, f32, read_write> = var
                     %x_256:ptr<function, vec2<f32>, read_write> = var
                     %x_259:ptr<function, i32, read_write> = var
-                    %197:i32 = load %x_171
-                    %198:bool = lt %197, 150i
-                    if %198 [t: %b50, f: %b51] {  # if_12
-                      %b50 = block {  # true
-                        discard
+                    %207:i32 = load %x_171
+                    %208:bool = lt %207, 150i
+                    if %208 [t: $B50, f: $B51] {  # if_12
+                      $B50: {  # true
+                        store %continue_execution, false
                         exit_if  # if_12
                       }
-                      %b51 = block {  # false
+                      $B51: {  # false
                         %x_229:ptr<function, f32, read_write> = var
                         %x_247:ptr<function, f32, read_write> = var
-                        %201:i32 = load %x_171
-                        %202:bool = lt %201, 180i
-                        if %202 [t: %b52, f: %b53] {  # if_13
-                          %b52 = block {  # true
-                            %203:ptr<function, i32, read_write> = access %data, 5i
-                            %204:i32 = load %203
-                            %205:f32 = convert %204
-                            %206:f32 = mul %205, 0.10000000149011611938f
-                            %207:f32 = add 0.5f, %206
-                            store %x_220, %207
-                            %208:f32 = load %x_220
-                            store %x_249, %208
+                        %211:i32 = load %x_171
+                        %212:bool = lt %211, 180i
+                        if %212 [t: $B52, f: $B53] {  # if_13
+                          $B52: {  # true
+                            %213:ptr<function, i32, read_write> = access %data, 5i
+                            %214:i32 = load %213
+                            %215:f32 = convert %214
+                            %216:f32 = mul %215, 0.10000000149011611938f
+                            %217:f32 = add 0.5f, %216
+                            store %x_220, %217
+                            %218:f32 = load %x_220
+                            store %x_249, %218
                             exit_if  # if_13
                           }
-                          %b53 = block {  # false
+                          $B53: {  # false
                             %x_238:ptr<function, f32, read_write> = var
                             %x_246:ptr<function, f32, read_write> = var
-                            %211:i32 = load %x_171
-                            %212:bool = lt %211, 210i
-                            if %212 [t: %b54, f: %b55] {  # if_14
-                              %b54 = block {  # true
-                                %213:ptr<function, i32, read_write> = access %data, 6i
-                                %214:i32 = load %213
-                                %215:f32 = convert %214
-                                %216:f32 = mul %215, 0.10000000149011611938f
-                                %217:f32 = add 0.5f, %216
-                                store %x_229, %217
-                                %218:f32 = load %x_229
-                                store %x_248, %218
+                            %221:i32 = load %x_171
+                            %222:bool = lt %221, 210i
+                            if %222 [t: $B54, f: $B55] {  # if_14
+                              $B54: {  # true
+                                %223:ptr<function, i32, read_write> = access %data, 6i
+                                %224:i32 = load %223
+                                %225:f32 = convert %224
+                                %226:f32 = mul %225, 0.10000000149011611938f
+                                %227:f32 = add 0.5f, %226
+                                store %x_229, %227
+                                %228:f32 = load %x_229
+                                store %x_248, %228
                                 exit_if  # if_14
                               }
-                              %b55 = block {  # false
-                                %219:i32 = load %x_171
-                                %220:bool = lt %219, 240i
-                                if %220 [t: %b56, f: %b57] {  # if_15
-                                  %b56 = block {  # true
-                                    %221:ptr<function, i32, read_write> = access %data, 7i
-                                    %222:i32 = load %221
-                                    %223:f32 = convert %222
-                                    %224:f32 = mul %223, 0.10000000149011611938f
-                                    %225:f32 = add 0.5f, %224
-                                    store %x_238, %225
-                                    %226:f32 = load %x_238
-                                    store %x_247, %226
+                              $B55: {  # false
+                                %229:i32 = load %x_171
+                                %230:bool = lt %229, 240i
+                                if %230 [t: $B56, f: $B57] {  # if_15
+                                  $B56: {  # true
+                                    %231:ptr<function, i32, read_write> = access %data, 7i
+                                    %232:i32 = load %231
+                                    %233:f32 = convert %232
+                                    %234:f32 = mul %233, 0.10000000149011611938f
+                                    %235:f32 = add 0.5f, %234
+                                    store %x_238, %235
+                                    %236:f32 = load %x_238
+                                    store %x_247, %236
                                     exit_if  # if_15
                                   }
-                                  %b57 = block {  # false
-                                    %227:i32 = load %x_171
-                                    %228:bool = lt %227, 270i
-                                    if %228 [t: %b58, f: %b59] {  # if_16
-                                      %b58 = block {  # true
+                                  $B57: {  # false
+                                    %237:i32 = load %x_171
+                                    %238:bool = lt %237, 270i
+                                    if %238 [t: $B58, f: $B59] {  # if_16
+                                      $B58: {  # true
                                         exit_if  # if_16
                                       }
-                                      %b59 = block {  # false
-                                        discard
+                                      $B59: {  # false
+                                        store %continue_execution, false
                                         exit_if  # if_16
                                       }
                                     }
-                                    %229:ptr<function, i32, read_write> = access %data, 8i
-                                    %230:i32 = load %229
-                                    %231:f32 = convert %230
-                                    %232:f32 = mul %231, 0.10000000149011611938f
-                                    %233:f32 = add 0.5f, %232
-                                    store %x_246, %233
-                                    %234:f32 = load %x_246
-                                    store %x_247, %234
+                                    %239:ptr<function, i32, read_write> = access %data, 8i
+                                    %240:i32 = load %239
+                                    %241:f32 = convert %240
+                                    %242:f32 = mul %241, 0.10000000149011611938f
+                                    %243:f32 = add 0.5f, %242
+                                    store %x_246, %243
+                                    %244:f32 = load %x_246
+                                    store %x_247, %244
                                     exit_if  # if_15
                                   }
                                 }
-                                %235:f32 = load %x_247
-                                store %x_248, %235
+                                %245:f32 = load %x_247
+                                store %x_248, %245
                                 exit_if  # if_14
                               }
                             }
-                            %236:f32 = load %x_248
-                            store %x_249, %236
+                            %246:f32 = load %x_248
+                            store %x_249, %246
                             exit_if  # if_13
                           }
                         }
-                        %237:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
-                        %238:f32 = load_vector_element %237, 1u
-                        %x_252:bool = gt %x_62, %238
-                        if %x_252 [t: %b60] {  # if_17
-                          %b60 = block {  # true
+                        %247:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
+                        %248:f32 = load_vector_element %247, 1u
+                        %249:bool = gt %x_62, %248
+                        %x_252:bool = let %249
+                        if %x_252 [t: $B60] {  # if_17
+                          $B60: {  # true
                             store %x_GLF_color, vec4<f32>(1.0f)
                             exit_if  # if_17
                           }
                         }
                         store %x_256, vec2<f32>(1.0f)
                         store %x_259, 0i
-                        loop [b: %b61, c: %b62] {  # loop_8
-                          %b61 = block {  # body
+                        loop [b: $B61, c: $B62] {  # loop_8
+                          $B61: {  # body
                             %x_272:ptr<function, vec2<f32>, read_write> = var
                             %x_273:ptr<function, vec2<f32>, read_write> = var
                             %x_260:ptr<function, i32, read_write> = var
-                            %243:i32 = load %x_259
-                            %244:bool = lte %243, 32i
-                            if %244 [t: %b63, f: %b64] {  # if_18
-                              %b63 = block {  # true
+                            %254:i32 = load %x_259
+                            %255:bool = lte %254, 32i
+                            if %255 [t: $B63, f: $B64] {  # if_18
+                              $B63: {  # true
                                 exit_if  # if_18
                               }
-                              %b64 = block {  # false
+                              $B64: {  # false
                                 exit_loop  # loop_8
                               }
                             }
-                            %245:vec2<f32> = load %x_256
-                            store %x_273, %245
-                            %246:f32 = load_vector_element %x_256, 0u
-                            %247:bool = lt %246, 0.0f
-                            if %247 [t: %b65] {  # if_19
-                              %b65 = block {  # true
-                                if %x_252 [t: %b66] {  # if_20
-                                  %b66 = block {  # true
-                                    discard
+                            %256:vec2<f32> = load %x_256
+                            store %x_273, %256
+                            %257:f32 = load_vector_element %x_256, 0u
+                            %258:bool = lt %257, 0.0f
+                            if %258 [t: $B65] {  # if_19
+                              $B65: {  # true
+                                if %x_252 [t: $B66] {  # if_20
+                                  $B66: {  # true
+                                    store %continue_execution, false
                                     exit_if  # if_20
                                   }
                                 }
-                                %248:vec2<f32> = load %x_256
-                                store %x_272, %248
-                                %249:f32 = load_vector_element %x_256, 1u
-                                %250:f32 = add %249, 1.0f
-                                store_vector_element %x_272, 1u, %250
-                                %251:vec2<f32> = load %x_272
-                                store %x_273, %251
+                                %259:vec2<f32> = load %x_256
+                                store %x_272, %259
+                                %260:f32 = load_vector_element %x_256, 1u
+                                %261:f32 = add %260, 1.0f
+                                store_vector_element %x_272, 1u, %261
+                                %262:vec2<f32> = load %x_272
+                                store %x_273, %262
                                 exit_if  # if_19
                               }
                             }
-                            %252:vec2<f32> = load %x_273
-                            %x_257_1:ptr<function, vec2<f32>, read_write> = var, %252
-                            %254:f32 = load_vector_element %x_273, 0u
-                            %255:f32 = load_vector_element %x_273, 1u
-                            %256:f32 = add %254, %255
-                            store_vector_element %x_257_1, 0u, %256
-                            %x_257:vec2<f32> = load %x_257_1
-                            continue %b62
+                            %263:vec2<f32> = load %x_273
+                            %x_257_1:ptr<function, vec2<f32>, read_write> = var, %263
+                            %265:f32 = load_vector_element %x_273, 0u
+                            %266:f32 = load_vector_element %x_273, 1u
+                            %267:f32 = add %265, %266
+                            store_vector_element %x_257_1, 0u, %267
+                            %268:vec2<f32> = load %x_257_1
+                            %x_257:vec2<f32> = let %268
+                            continue  # -> $B62
                           }
-                          %b62 = block {  # continuing
-                            %258:i32 = load %x_259
-                            %259:i32 = add %258, 1i
-                            store %x_260, %259
+                          $B62: {  # continuing
+                            %270:i32 = load %x_259
+                            %271:i32 = add %270, 1i
+                            store %x_260, %271
                             store %x_256, %x_257
-                            %260:i32 = load %x_260
-                            store %x_259, %260
-                            next_iteration %b61
+                            %272:i32 = load %x_260
+                            store %x_259, %272
+                            next_iteration  # -> $B61
                           }
                         }
                         exit_if  # if_12
                       }
                     }
-                    %261:f32 = load %x_249
-                    store %x_277, %261
+                    %273:f32 = load %x_249
+                    store %x_277, %273
                     exit_if  # if_11
                   }
                 }
-                %262:f32 = load %x_277
-                store %x_278, %262
+                %274:f32 = load %x_277
+                store %x_278, %274
                 exit_if  # if_10
               }
             }
-            %263:f32 = load %x_278
-            store %x_279, %263
+            %275:f32 = load %x_278
+            store %x_279, %275
             exit_if  # if_9
           }
         }
-        %264:f32 = load %x_279
-        store %x_280, %264
+        %276:f32 = load %x_279
+        store %x_280, %276
         exit_if  # if_8
       }
     }
-    %265:f32 = load %x_280
-    %266:f32 = load %x_280
-    %267:f32 = load %x_280
-    %268:vec4<f32> = construct %265, %266, %267, 1.0f
-    store %x_GLF_color, %268
+    %277:f32 = load %x_280
+    %278:f32 = load %x_280
+    %279:f32 = load %x_280
+    %280:vec4<f32> = construct %277, %278, %279, 1.0f
+    store %x_GLF_color, %280
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b67 {
-  %b67 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B67: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %271:void = call %main_1
-    %272:vec4<f32> = load %x_GLF_color
-    %273:main_out = construct %272
-    ret %273
+    %283:void = call %main_1
+    %284:vec4<f32> = load %x_GLF_color
+    %285:main_out = construct %284
+    %286:bool = load %continue_execution
+    %287:bool = eq %286, false
+    if %287 [t: $B68] {  # if_21
+      $B68: {  # true
+        terminate_invocation
+      }
+    }
+    ret %285
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B69: {
+    %289:i32 = convert %value
+    %290:bool = gte %value, -2147483648.0f
+    %291:i32 = select -2147483648i, %289, %290
+    %292:bool = lte %value, 2147483520.0f
+    %293:i32 = select 2147483647i, %291, %292
+    ret %293
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-mergesort-for-always-false-if-discard/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-mergesort-for-always-false-if-discard/1.wgsl.expected.ir.msl
index c18005c..ae93504 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-mergesort-for-always-false-if-discard/1.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/stable-mergesort-for-always-false-if-discard/1.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,14 +8,15 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_8:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %temp:ptr<function, array<i32, 10>, read_write> = var
     %data:ptr<function, array<i32, 10>, read_write> = var
     %x_180:ptr<function, f32, read_write> = var
@@ -24,124 +25,131 @@
     %x_93_phi:ptr<function, i32, read_write> = var
     %x_102_phi:ptr<function, i32, read_write> = var
     %x_280_phi:ptr<function, f32, read_write> = var
-    %13:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
-    %x_62:f32 = load_vector_element %13, 0u
-    %x_63:i32 = convert %x_62
+    %14:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
+    %15:f32 = load_vector_element %14, 0u
+    %x_62:f32 = let %15
+    %17:i32 = call %tint_f32_to_i32, %x_62
+    %x_63:i32 = let %17
     store %x_65_phi, %x_63
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_65:i32 = load %x_65_phi
-        switch %x_65 [c: (9i, %b5), c: (8i, %b6), c: (7i, %b7), c: (6i, %b8), c: (5i, %b9), c: (4i, %b10), c: (3i, %b11), c: (2i, %b12), c: (1i, %b13), c: (0i, %b14), c: (default, %b15)] {  # switch_1
-          %b5 = block {  # case
-            %17:ptr<function, i32, read_write> = access %data, %x_65
-            store %17, -5i
-            exit_switch  # switch_1
-          }
-          %b6 = block {  # case
-            %18:ptr<function, i32, read_write> = access %data, %x_65
-            store %18, -4i
-            exit_switch  # switch_1
-          }
-          %b7 = block {  # case
-            %19:ptr<function, i32, read_write> = access %data, %x_65
-            store %19, -3i
-            exit_switch  # switch_1
-          }
-          %b8 = block {  # case
-            %20:ptr<function, i32, read_write> = access %data, %x_65
-            store %20, -2i
-            exit_switch  # switch_1
-          }
-          %b9 = block {  # case
-            %21:ptr<function, i32, read_write> = access %data, %x_65
-            store %21, -1i
-            exit_switch  # switch_1
-          }
-          %b10 = block {  # case
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %20:i32 = load %x_65_phi
+        %x_65:i32 = let %20
+        switch %x_65 [c: (9i, $B5), c: (8i, $B6), c: (7i, $B7), c: (6i, $B8), c: (5i, $B9), c: (4i, $B10), c: (3i, $B11), c: (2i, $B12), c: (1i, $B13), c: (0i, $B14), c: (default, $B15)] {  # switch_1
+          $B5: {  # case
             %22:ptr<function, i32, read_write> = access %data, %x_65
-            store %22, 0i
+            store %22, -5i
             exit_switch  # switch_1
           }
-          %b11 = block {  # case
+          $B6: {  # case
             %23:ptr<function, i32, read_write> = access %data, %x_65
-            store %23, 1i
+            store %23, -4i
             exit_switch  # switch_1
           }
-          %b12 = block {  # case
+          $B7: {  # case
             %24:ptr<function, i32, read_write> = access %data, %x_65
-            store %24, 2i
+            store %24, -3i
             exit_switch  # switch_1
           }
-          %b13 = block {  # case
+          $B8: {  # case
             %25:ptr<function, i32, read_write> = access %data, %x_65
-            store %25, 3i
+            store %25, -2i
             exit_switch  # switch_1
           }
-          %b14 = block {  # case
+          $B9: {  # case
             %26:ptr<function, i32, read_write> = access %data, %x_65
-            store %26, 4i
+            store %26, -1i
             exit_switch  # switch_1
           }
-          %b15 = block {  # case
+          $B10: {  # case
+            %27:ptr<function, i32, read_write> = access %data, %x_65
+            store %27, 0i
+            exit_switch  # switch_1
+          }
+          $B11: {  # case
+            %28:ptr<function, i32, read_write> = access %data, %x_65
+            store %28, 1i
+            exit_switch  # switch_1
+          }
+          $B12: {  # case
+            %29:ptr<function, i32, read_write> = access %data, %x_65
+            store %29, 2i
+            exit_switch  # switch_1
+          }
+          $B13: {  # case
+            %30:ptr<function, i32, read_write> = access %data, %x_65
+            store %30, 3i
+            exit_switch  # switch_1
+          }
+          $B14: {  # case
+            %31:ptr<function, i32, read_write> = access %data, %x_65
+            store %31, 4i
+            exit_switch  # switch_1
+          }
+          $B15: {  # case
             exit_switch  # switch_1
           }
         }
-        %x_66:i32 = add %x_65, 1i
-        continue %b4
+        %32:i32 = add %x_65, 1i
+        %x_66:i32 = let %32
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
+      $B4: {  # continuing
         store %x_65_phi, %x_66
-        %28:bool = lt %x_66, 10i
-        %29:bool = eq %28, false
-        break_if %29 %b3
+        %34:bool = lt %x_66, 10i
+        %35:bool = eq %34, false
+        break_if %35  # -> [t: exit_loop loop_1, f: $B3]
       }
     }
     store %x_93_phi, 0i
-    loop [b: %b16, c: %b17] {  # loop_2
-      %b16 = block {  # body
+    loop [b: $B16, c: $B17] {  # loop_2
+      $B16: {  # body
         %x_94:ptr<function, i32, read_write> = var
-        %x_93:i32 = load %x_93_phi
-        %32:bool = lt %x_93, 10i
-        if %32 [t: %b18, f: %b19] {  # if_1
-          %b18 = block {  # true
+        %37:i32 = load %x_93_phi
+        %x_93:i32 = let %37
+        %39:bool = lt %x_93, 10i
+        if %39 [t: $B18, f: $B19] {  # if_1
+          $B18: {  # true
             exit_if  # if_1
           }
-          %b19 = block {  # false
+          $B19: {  # false
             exit_loop  # loop_2
           }
         }
-        continue %b17
+        continue  # -> $B17
       }
-      %b17 = block {  # continuing
-        %33:ptr<function, i32, read_write> = access %data, %x_93
-        %x_99:i32 = load %33
-        %35:ptr<function, i32, read_write> = access %temp, %x_93
-        store %35, %x_99
-        %36:i32 = add %x_93, 1i
-        store %x_94, %36
-        %37:i32 = load %x_94
-        store %x_93_phi, %37
-        next_iteration %b16
+      $B17: {  # continuing
+        %40:ptr<function, i32, read_write> = access %data, %x_93
+        %41:i32 = load %40
+        %x_99:i32 = let %41
+        %43:ptr<function, i32, read_write> = access %temp, %x_93
+        store %43, %x_99
+        %44:i32 = add %x_93, 1i
+        store %x_94, %44
+        %45:i32 = load %x_94
+        store %x_93_phi, %45
+        next_iteration  # -> $B16
       }
     }
     store %x_102_phi, 1i
-    loop [b: %b20, c: %b21] {  # loop_3
-      %b20 = block {  # body
+    loop [b: $B20, c: $B21] {  # loop_3
+      $B20: {  # body
         %x_103:ptr<function, i32, read_write> = var
         %x_109_phi:ptr<function, i32, read_write> = var
-        %x_102:i32 = load %x_102_phi
-        %41:bool = lte %x_102, 9i
-        if %41 [t: %b22, f: %b23] {  # if_2
-          %b22 = block {  # true
+        %48:i32 = load %x_102_phi
+        %x_102:i32 = let %48
+        %50:bool = lte %x_102, 9i
+        if %50 [t: $B22, f: $B23] {  # if_2
+          $B22: {  # true
             exit_if  # if_2
           }
-          %b23 = block {  # false
+          $B23: {  # false
             exit_loop  # loop_3
           }
         }
         store %x_109_phi, 0i
-        loop [b: %b24, c: %b25] {  # loop_4
-          %b24 = block {  # body
+        loop [b: $B24, c: $B25] {  # loop_4
+          $B24: {  # body
             %x_121:ptr<function, i32, read_write> = var
             %x_126:ptr<function, i32, read_write> = var
             %x_121_phi:ptr<function, i32, read_write> = var
@@ -150,466 +158,518 @@
             %x_148_phi:ptr<function, i32, read_write> = var
             %x_151_phi:ptr<function, i32, read_write> = var
             %x_161_phi:ptr<function, i32, read_write> = var
-            %x_109:i32 = load %x_109_phi
-            %51:bool = lt %x_109, 9i
-            if %51 [t: %b26, f: %b27] {  # if_3
-              %b26 = block {  # true
+            %59:i32 = load %x_109_phi
+            %x_109:i32 = let %59
+            %61:bool = lt %x_109, 9i
+            if %61 [t: $B26, f: $B27] {  # if_3
+              $B26: {  # true
                 exit_if  # if_3
               }
-              %b27 = block {  # false
+              $B27: {  # false
                 exit_loop  # loop_4
               }
             }
-            %x_115:i32 = add %x_109, %x_102
-            %x_116:i32 = sub %x_115, 1i
-            %54:i32 = mul 2i, %x_102
-            %x_110:i32 = add %x_109, %54
-            %56:i32 = sub %x_110, 1i
-            %x_119:i32 = min %56, 9i
+            %62:i32 = add %x_109, %x_102
+            %x_115:i32 = let %62
+            %64:i32 = sub %x_115, 1i
+            %x_116:i32 = let %64
+            %66:i32 = mul 2i, %x_102
+            %67:i32 = add %x_109, %66
+            %x_110:i32 = let %67
+            %69:i32 = sub %x_110, 1i
+            %70:i32 = min %69, 9i
+            %x_119:i32 = let %70
             store %x_121_phi, %x_109
             store %x_124_phi, %x_115
             store %x_126_phi, %x_109
-            loop [b: %b28, c: %b29] {  # loop_5
-              %b28 = block {  # body
+            loop [b: $B28, c: $B29] {  # loop_5
+              $B28: {  # body
                 %x_141:ptr<function, i32, read_write> = var
                 %x_144:ptr<function, i32, read_write> = var
                 %x_125_phi:ptr<function, i32, read_write> = var
                 %x_127_phi:ptr<function, i32, read_write> = var
-                %62:i32 = load %x_121_phi
-                store %x_121, %62
-                %x_124:i32 = load %x_124_phi
-                %64:i32 = load %x_126_phi
-                store %x_126, %64
-                %65:i32 = load %x_126
-                %66:bool = lte %65, %x_116
-                %67:bool = lte %x_124, %x_119
-                %68:bool = and %66, %67
-                if %68 [t: %b30, f: %b31] {  # if_4
-                  %b30 = block {  # true
+                %76:i32 = load %x_121_phi
+                store %x_121, %76
+                %77:i32 = load %x_124_phi
+                %x_124:i32 = let %77
+                %79:i32 = load %x_126_phi
+                store %x_126, %79
+                %80:i32 = load %x_126
+                %81:bool = lte %80, %x_116
+                %82:bool = lte %x_124, %x_119
+                %83:bool = and %81, %82
+                if %83 [t: $B30, f: $B31] {  # if_4
+                  $B30: {  # true
                     exit_if  # if_4
                   }
-                  %b31 = block {  # false
+                  $B31: {  # false
                     exit_loop  # loop_5
                   }
                 }
-                %x_133_save:i32 = load %x_126
-                %70:ptr<function, i32, read_write> = access %data, %x_133_save
-                %x_134:i32 = load %70
+                %84:i32 = load %x_126
+                %x_133_save:i32 = let %84
+                %86:ptr<function, i32, read_write> = access %data, %x_133_save
+                %87:i32 = load %86
+                %x_134:i32 = let %87
                 %x_135_save:i32 = let %x_124
-                %73:ptr<function, i32, read_write> = access %data, %x_135_save
-                %x_136:i32 = load %73
-                %75:i32 = load %x_121
-                %76:i32 = add %75, 1i
-                %x_122:i32 = bitcast %76
-                %78:bool = lt %x_134, %x_136
-                if %78 [t: %b32, f: %b33] {  # if_5
-                  %b32 = block {  # true
-                    %79:i32 = load %x_126
-                    %80:i32 = add %79, 1i
-                    %81:i32 = bitcast %80
-                    store %x_141, %81
-                    %82:ptr<function, i32, read_write> = access %data, %x_133_save
-                    %x_142:i32 = load %82
-                    %84:i32 = load %x_121
-                    %85:ptr<function, i32, read_write> = access %temp, %84
-                    store %85, %x_142
+                %90:ptr<function, i32, read_write> = access %data, %x_135_save
+                %91:i32 = load %90
+                %x_136:i32 = let %91
+                %93:i32 = load %x_121
+                %94:i32 = add %93, 1i
+                %95:i32 = bitcast %94
+                %x_122:i32 = let %95
+                %97:bool = lt %x_134, %x_136
+                if %97 [t: $B32, f: $B33] {  # if_5
+                  $B32: {  # true
+                    %98:i32 = load %x_126
+                    %99:i32 = add %98, 1i
+                    %100:i32 = bitcast %99
+                    store %x_141, %100
+                    %101:ptr<function, i32, read_write> = access %data, %x_133_save
+                    %102:i32 = load %101
+                    %x_142:i32 = let %102
+                    %104:i32 = load %x_121
+                    %105:ptr<function, i32, read_write> = access %temp, %104
+                    store %105, %x_142
                     store %x_125_phi, %x_124
-                    %86:i32 = load %x_141
-                    store %x_127_phi, %86
+                    %106:i32 = load %x_141
+                    store %x_127_phi, %106
                     exit_if  # if_5
                   }
-                  %b33 = block {  # false
-                    %87:i32 = add %x_124, 1i
-                    store %x_144, %87
-                    %88:ptr<function, i32, read_write> = access %data, %x_135_save
-                    %x_145:i32 = load %88
-                    %90:i32 = load %x_121
-                    %91:ptr<function, i32, read_write> = access %temp, %90
-                    store %91, %x_145
-                    %92:i32 = load %x_144
-                    store %x_125_phi, %92
-                    %93:i32 = load %x_126
-                    store %x_127_phi, %93
+                  $B33: {  # false
+                    %107:i32 = add %x_124, 1i
+                    store %x_144, %107
+                    %108:ptr<function, i32, read_write> = access %data, %x_135_save
+                    %109:i32 = load %108
+                    %x_145:i32 = let %109
+                    %111:i32 = load %x_121
+                    %112:ptr<function, i32, read_write> = access %temp, %111
+                    store %112, %x_145
+                    %113:i32 = load %x_144
+                    store %x_125_phi, %113
+                    %114:i32 = load %x_126
+                    store %x_127_phi, %114
                     exit_if  # if_5
                   }
                 }
-                %x_125:i32 = load %x_125_phi
-                %x_127:i32 = load %x_127_phi
-                continue %b29
+                %115:i32 = load %x_125_phi
+                %x_125:i32 = let %115
+                %117:i32 = load %x_127_phi
+                %x_127:i32 = let %117
+                continue  # -> $B29
               }
-              %b29 = block {  # continuing
+              $B29: {  # continuing
                 store %x_121_phi, %x_122
                 store %x_124_phi, %x_125
                 store %x_126_phi, %x_127
-                next_iteration %b28
+                next_iteration  # -> $B28
               }
             }
-            %96:i32 = load %x_121
-            store %x_148_phi, %96
-            %97:i32 = load %x_126
-            store %x_151_phi, %97
-            loop [b: %b34, c: %b35] {  # loop_6
-              %b34 = block {  # body
+            %119:i32 = load %x_121
+            store %x_148_phi, %119
+            %120:i32 = load %x_126
+            store %x_151_phi, %120
+            loop [b: $B34, c: $B35] {  # loop_6
+              $B34: {  # body
                 %x_149:ptr<function, i32, read_write> = var
                 %x_152:ptr<function, i32, read_write> = var
-                %x_148:i32 = load %x_148_phi
-                %x_151:i32 = load %x_151_phi
-                %102:bool = lt %x_151, 10i
-                %103:bool = lte %x_151, %x_116
-                %104:bool = and %102, %103
-                if %104 [t: %b36, f: %b37] {  # if_6
-                  %b36 = block {  # true
+                %123:i32 = load %x_148_phi
+                %x_148:i32 = let %123
+                %125:i32 = load %x_151_phi
+                %x_151:i32 = let %125
+                %127:bool = lt %x_151, 10i
+                %128:bool = lte %x_151, %x_116
+                %129:bool = and %127, %128
+                if %129 [t: $B36, f: $B37] {  # if_6
+                  $B36: {  # true
                     exit_if  # if_6
                   }
-                  %b37 = block {  # false
+                  $B37: {  # false
                     exit_loop  # loop_6
                   }
                 }
-                continue %b35
+                continue  # -> $B35
               }
-              %b35 = block {  # continuing
-                %105:i32 = add %x_148, 1i
-                store %x_149, %105
-                %106:i32 = add %x_151, 1i
-                store %x_152, %106
-                %107:ptr<function, i32, read_write> = access %data, %x_151
-                %x_158:i32 = load %107
-                %109:ptr<function, i32, read_write> = access %temp, %x_148
-                store %109, %x_158
-                %110:i32 = load %x_149
-                store %x_148_phi, %110
-                %111:i32 = load %x_152
-                store %x_151_phi, %111
-                next_iteration %b34
+              $B35: {  # continuing
+                %130:i32 = add %x_148, 1i
+                store %x_149, %130
+                %131:i32 = add %x_151, 1i
+                store %x_152, %131
+                %132:ptr<function, i32, read_write> = access %data, %x_151
+                %133:i32 = load %132
+                %x_158:i32 = let %133
+                %135:ptr<function, i32, read_write> = access %temp, %x_148
+                store %135, %x_158
+                %136:i32 = load %x_149
+                store %x_148_phi, %136
+                %137:i32 = load %x_152
+                store %x_151_phi, %137
+                next_iteration  # -> $B34
               }
             }
             store %x_161_phi, %x_109
-            loop [b: %b38, c: %b39] {  # loop_7
-              %b38 = block {  # body
+            loop [b: $B38, c: $B39] {  # loop_7
+              $B38: {  # body
                 %x_162:ptr<function, i32, read_write> = var
-                %x_161:i32 = load %x_161_phi
-                %114:bool = lte %x_161, %x_119
-                if %114 [t: %b40, f: %b41] {  # if_7
-                  %b40 = block {  # true
+                %139:i32 = load %x_161_phi
+                %x_161:i32 = let %139
+                %141:bool = lte %x_161, %x_119
+                if %141 [t: $B40, f: $B41] {  # if_7
+                  $B40: {  # true
                     exit_if  # if_7
                   }
-                  %b41 = block {  # false
+                  $B41: {  # false
                     exit_loop  # loop_7
                   }
                 }
-                continue %b39
+                continue  # -> $B39
               }
-              %b39 = block {  # continuing
-                %115:ptr<function, i32, read_write> = access %temp, %x_161
-                %x_167:i32 = load %115
-                %117:ptr<function, i32, read_write> = access %data, %x_161
-                store %117, %x_167
-                %118:i32 = add %x_161, 1i
-                store %x_162, %118
-                %119:i32 = load %x_162
-                store %x_161_phi, %119
-                next_iteration %b38
+              $B39: {  # continuing
+                %142:ptr<function, i32, read_write> = access %temp, %x_161
+                %143:i32 = load %142
+                %x_167:i32 = let %143
+                %145:ptr<function, i32, read_write> = access %data, %x_161
+                store %145, %x_167
+                %146:i32 = add %x_161, 1i
+                store %x_162, %146
+                %147:i32 = load %x_162
+                store %x_161_phi, %147
+                next_iteration  # -> $B38
               }
             }
-            continue %b25
+            continue  # -> $B25
           }
-          %b25 = block {  # continuing
+          $B25: {  # continuing
             store %x_109_phi, %x_110
-            next_iteration %b24
+            next_iteration  # -> $B24
           }
         }
-        continue %b21
+        continue  # -> $B21
       }
-      %b21 = block {  # continuing
-        %120:i32 = mul 2i, %x_102
-        store %x_103, %120
-        %121:i32 = load %x_103
-        store %x_102_phi, %121
-        next_iteration %b20
+      $B21: {  # continuing
+        %148:i32 = mul 2i, %x_102
+        store %x_103, %148
+        %149:i32 = load %x_103
+        store %x_102_phi, %149
+        next_iteration  # -> $B20
       }
     }
     %x_171:ptr<function, i32, read_write> = var
     %x_189:ptr<function, f32, read_write> = var
     %x_278:ptr<function, f32, read_write> = var
     %x_279_phi:ptr<function, f32, read_write> = var
-    %x_170:f32 = load_vector_element %gl_FragCoord, 1u
-    %127:i32 = convert %x_170
-    store %x_171, %127
-    %128:i32 = load %x_171
-    %129:bool = lt %128, 30i
-    if %129 [t: %b42, f: %b43] {  # if_8
-      %b42 = block {  # true
-        %130:ptr<function, i32, read_write> = access %data, 0i
-        %x_177:i32 = load %130
-        %132:f32 = convert %x_177
-        %133:f32 = mul %132, 0.10000000149011611938f
-        %134:f32 = add 0.5f, %133
-        store %x_180, %134
-        %135:f32 = load %x_180
-        store %x_280_phi, %135
+    %154:f32 = load_vector_element %gl_FragCoord, 1u
+    %x_170:f32 = let %154
+    %156:i32 = call %tint_f32_to_i32, %x_170
+    store %x_171, %156
+    %157:i32 = load %x_171
+    %158:bool = lt %157, 30i
+    if %158 [t: $B42, f: $B43] {  # if_8
+      $B42: {  # true
+        %159:ptr<function, i32, read_write> = access %data, 0i
+        %160:i32 = load %159
+        %x_177:i32 = let %160
+        %162:f32 = convert %x_177
+        %163:f32 = mul %162, 0.10000000149011611938f
+        %164:f32 = add 0.5f, %163
+        store %x_180, %164
+        %165:f32 = load %x_180
+        store %x_280_phi, %165
         exit_if  # if_8
       }
-      %b43 = block {  # false
+      $B43: {  # false
         %x_198:ptr<function, f32, read_write> = var
         %x_277:ptr<function, f32, read_write> = var
         %x_278_phi:ptr<function, f32, read_write> = var
-        %139:i32 = load %x_171
-        %140:bool = lt %139, 60i
-        if %140 [t: %b44, f: %b45] {  # if_9
-          %b44 = block {  # true
-            %141:ptr<function, i32, read_write> = access %data, 1i
-            %x_186:i32 = load %141
-            %143:f32 = convert %x_186
-            %144:f32 = mul %143, 0.10000000149011611938f
-            %145:f32 = add 0.5f, %144
-            store %x_189, %145
-            %146:f32 = load %x_189
-            store %x_279_phi, %146
+        %169:i32 = load %x_171
+        %170:bool = lt %169, 60i
+        if %170 [t: $B44, f: $B45] {  # if_9
+          $B44: {  # true
+            %171:ptr<function, i32, read_write> = access %data, 1i
+            %172:i32 = load %171
+            %x_186:i32 = let %172
+            %174:f32 = convert %x_186
+            %175:f32 = mul %174, 0.10000000149011611938f
+            %176:f32 = add 0.5f, %175
+            store %x_189, %176
+            %177:f32 = load %x_189
+            store %x_279_phi, %177
             exit_if  # if_9
           }
-          %b45 = block {  # false
+          $B45: {  # false
             %x_207:ptr<function, f32, read_write> = var
             %x_249:ptr<function, f32, read_write> = var
             %x_277_phi:ptr<function, f32, read_write> = var
-            %150:i32 = load %x_171
-            %151:bool = lt %150, 90i
-            if %151 [t: %b46, f: %b47] {  # if_10
-              %b46 = block {  # true
-                %152:ptr<function, i32, read_write> = access %data, 2i
-                %x_195:i32 = load %152
-                %154:f32 = convert %x_195
-                %155:f32 = mul %154, 0.10000000149011611938f
-                %156:f32 = add 0.5f, %155
-                store %x_198, %156
-                %157:f32 = load %x_198
-                store %x_278_phi, %157
+            %181:i32 = load %x_171
+            %182:bool = lt %181, 90i
+            if %182 [t: $B46, f: $B47] {  # if_10
+              $B46: {  # true
+                %183:ptr<function, i32, read_write> = access %data, 2i
+                %184:i32 = load %183
+                %x_195:i32 = let %184
+                %186:f32 = convert %x_195
+                %187:f32 = mul %186, 0.10000000149011611938f
+                %188:f32 = add 0.5f, %187
+                store %x_198, %188
+                %189:f32 = load %x_198
+                store %x_278_phi, %189
                 exit_if  # if_10
               }
-              %b47 = block {  # false
-                %158:i32 = load %x_171
-                %159:bool = lt %158, 120i
-                if %159 [t: %b48, f: %b49] {  # if_11
-                  %b48 = block {  # true
-                    %160:ptr<function, i32, read_write> = access %data, 3i
-                    %x_204:i32 = load %160
-                    %162:f32 = convert %x_204
-                    %163:f32 = mul %162, 0.10000000149011611938f
-                    %164:f32 = add 0.5f, %163
-                    store %x_207, %164
-                    %165:f32 = load %x_207
-                    store %x_277_phi, %165
+              $B47: {  # false
+                %190:i32 = load %x_171
+                %191:bool = lt %190, 120i
+                if %191 [t: $B48, f: $B49] {  # if_11
+                  $B48: {  # true
+                    %192:ptr<function, i32, read_write> = access %data, 3i
+                    %193:i32 = load %192
+                    %x_204:i32 = let %193
+                    %195:f32 = convert %x_204
+                    %196:f32 = mul %195, 0.10000000149011611938f
+                    %197:f32 = add 0.5f, %196
+                    store %x_207, %197
+                    %198:f32 = load %x_207
+                    store %x_277_phi, %198
                     exit_if  # if_11
                   }
-                  %b49 = block {  # false
+                  $B49: {  # false
                     %x_220:ptr<function, f32, read_write> = var
                     %x_248:ptr<function, f32, read_write> = var
                     %x_249_phi:ptr<function, f32, read_write> = var
                     %x_256_phi:ptr<function, vec2<f32>, read_write> = var
                     %x_259_phi:ptr<function, i32, read_write> = var
-                    %171:i32 = load %x_171
-                    %172:bool = lt %171, 150i
-                    if %172 [t: %b50, f: %b51] {  # if_12
-                      %b50 = block {  # true
-                        discard
+                    %204:i32 = load %x_171
+                    %205:bool = lt %204, 150i
+                    if %205 [t: $B50, f: $B51] {  # if_12
+                      $B50: {  # true
+                        store %continue_execution, false
                         exit_if  # if_12
                       }
-                      %b51 = block {  # false
+                      $B51: {  # false
                         %x_229:ptr<function, f32, read_write> = var
                         %x_247:ptr<function, f32, read_write> = var
                         %x_248_phi:ptr<function, f32, read_write> = var
-                        %176:i32 = load %x_171
-                        %177:bool = lt %176, 180i
-                        if %177 [t: %b52, f: %b53] {  # if_13
-                          %b52 = block {  # true
-                            %178:ptr<function, i32, read_write> = access %data, 5i
-                            %x_217:i32 = load %178
-                            %180:f32 = convert %x_217
-                            %181:f32 = mul %180, 0.10000000149011611938f
-                            %182:f32 = add 0.5f, %181
-                            store %x_220, %182
-                            %183:f32 = load %x_220
-                            store %x_249_phi, %183
+                        %209:i32 = load %x_171
+                        %210:bool = lt %209, 180i
+                        if %210 [t: $B52, f: $B53] {  # if_13
+                          $B52: {  # true
+                            %211:ptr<function, i32, read_write> = access %data, 5i
+                            %212:i32 = load %211
+                            %x_217:i32 = let %212
+                            %214:f32 = convert %x_217
+                            %215:f32 = mul %214, 0.10000000149011611938f
+                            %216:f32 = add 0.5f, %215
+                            store %x_220, %216
+                            %217:f32 = load %x_220
+                            store %x_249_phi, %217
                             exit_if  # if_13
                           }
-                          %b53 = block {  # false
+                          $B53: {  # false
                             %x_238:ptr<function, f32, read_write> = var
                             %x_246:ptr<function, f32, read_write> = var
                             %x_247_phi:ptr<function, f32, read_write> = var
-                            %187:i32 = load %x_171
-                            %188:bool = lt %187, 210i
-                            if %188 [t: %b54, f: %b55] {  # if_14
-                              %b54 = block {  # true
-                                %189:ptr<function, i32, read_write> = access %data, 6i
-                                %x_226:i32 = load %189
-                                %191:f32 = convert %x_226
-                                %192:f32 = mul %191, 0.10000000149011611938f
-                                %193:f32 = add 0.5f, %192
-                                store %x_229, %193
-                                %194:f32 = load %x_229
-                                store %x_248_phi, %194
+                            %221:i32 = load %x_171
+                            %222:bool = lt %221, 210i
+                            if %222 [t: $B54, f: $B55] {  # if_14
+                              $B54: {  # true
+                                %223:ptr<function, i32, read_write> = access %data, 6i
+                                %224:i32 = load %223
+                                %x_226:i32 = let %224
+                                %226:f32 = convert %x_226
+                                %227:f32 = mul %226, 0.10000000149011611938f
+                                %228:f32 = add 0.5f, %227
+                                store %x_229, %228
+                                %229:f32 = load %x_229
+                                store %x_248_phi, %229
                                 exit_if  # if_14
                               }
-                              %b55 = block {  # false
-                                %195:i32 = load %x_171
-                                %196:bool = lt %195, 240i
-                                if %196 [t: %b56, f: %b57] {  # if_15
-                                  %b56 = block {  # true
-                                    %197:ptr<function, i32, read_write> = access %data, 7i
-                                    %x_235:i32 = load %197
-                                    %199:f32 = convert %x_235
-                                    %200:f32 = mul %199, 0.10000000149011611938f
-                                    %201:f32 = add 0.5f, %200
-                                    store %x_238, %201
-                                    %202:f32 = load %x_238
-                                    store %x_247_phi, %202
+                              $B55: {  # false
+                                %230:i32 = load %x_171
+                                %231:bool = lt %230, 240i
+                                if %231 [t: $B56, f: $B57] {  # if_15
+                                  $B56: {  # true
+                                    %232:ptr<function, i32, read_write> = access %data, 7i
+                                    %233:i32 = load %232
+                                    %x_235:i32 = let %233
+                                    %235:f32 = convert %x_235
+                                    %236:f32 = mul %235, 0.10000000149011611938f
+                                    %237:f32 = add 0.5f, %236
+                                    store %x_238, %237
+                                    %238:f32 = load %x_238
+                                    store %x_247_phi, %238
                                     exit_if  # if_15
                                   }
-                                  %b57 = block {  # false
-                                    %203:i32 = load %x_171
-                                    %204:bool = lt %203, 270i
-                                    if %204 [t: %b58, f: %b59] {  # if_16
-                                      %b58 = block {  # true
+                                  $B57: {  # false
+                                    %239:i32 = load %x_171
+                                    %240:bool = lt %239, 270i
+                                    if %240 [t: $B58, f: $B59] {  # if_16
+                                      $B58: {  # true
                                         exit_if  # if_16
                                       }
-                                      %b59 = block {  # false
-                                        discard
+                                      $B59: {  # false
+                                        store %continue_execution, false
                                         exit_if  # if_16
                                       }
                                     }
-                                    %205:ptr<function, i32, read_write> = access %data, 8i
-                                    %x_243:i32 = load %205
-                                    %207:f32 = convert %x_243
-                                    %208:f32 = mul %207, 0.10000000149011611938f
-                                    %209:f32 = add 0.5f, %208
-                                    store %x_246, %209
-                                    %210:f32 = load %x_246
-                                    store %x_247_phi, %210
+                                    %241:ptr<function, i32, read_write> = access %data, 8i
+                                    %242:i32 = load %241
+                                    %x_243:i32 = let %242
+                                    %244:f32 = convert %x_243
+                                    %245:f32 = mul %244, 0.10000000149011611938f
+                                    %246:f32 = add 0.5f, %245
+                                    store %x_246, %246
+                                    %247:f32 = load %x_246
+                                    store %x_247_phi, %247
                                     exit_if  # if_15
                                   }
                                 }
-                                %211:f32 = load %x_247_phi
-                                store %x_247, %211
-                                %212:f32 = load %x_247
-                                store %x_248_phi, %212
+                                %248:f32 = load %x_247_phi
+                                store %x_247, %248
+                                %249:f32 = load %x_247
+                                store %x_248_phi, %249
                                 exit_if  # if_14
                               }
                             }
-                            %213:f32 = load %x_248_phi
-                            store %x_248, %213
-                            %214:f32 = load %x_248
-                            store %x_249_phi, %214
+                            %250:f32 = load %x_248_phi
+                            store %x_248, %250
+                            %251:f32 = load %x_248
+                            store %x_249_phi, %251
                             exit_if  # if_13
                           }
                         }
-                        %215:f32 = load %x_249_phi
-                        store %x_249, %215
-                        %216:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
-                        %x_251:f32 = load_vector_element %216, 1u
-                        %x_252:bool = gt %x_62, %x_251
-                        if %x_252 [t: %b60] {  # if_17
-                          %b60 = block {  # true
+                        %252:f32 = load %x_249_phi
+                        store %x_249, %252
+                        %253:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
+                        %254:f32 = load_vector_element %253, 1u
+                        %x_251:f32 = let %254
+                        %256:bool = gt %x_62, %x_251
+                        %x_252:bool = let %256
+                        if %x_252 [t: $B60] {  # if_17
+                          $B60: {  # true
                             store %x_GLF_color, vec4<f32>(1.0f)
                             exit_if  # if_17
                           }
                         }
                         store %x_256_phi, vec2<f32>(1.0f)
                         store %x_259_phi, 0i
-                        loop [b: %b61, c: %b62] {  # loop_8
-                          %b61 = block {  # body
+                        loop [b: $B61, c: $B62] {  # loop_8
+                          $B61: {  # body
                             %x_272:ptr<function, vec2<f32>, read_write> = var
                             %x_260:ptr<function, i32, read_write> = var
                             %x_273_phi:ptr<function, vec2<f32>, read_write> = var
-                            %x_256:vec2<f32> = load %x_256_phi
-                            %x_259:i32 = load %x_259_phi
-                            %224:bool = lte %x_259, 32i
-                            if %224 [t: %b63, f: %b64] {  # if_18
-                              %b63 = block {  # true
+                            %261:vec2<f32> = load %x_256_phi
+                            %x_256:vec2<f32> = let %261
+                            %263:i32 = load %x_259_phi
+                            %x_259:i32 = let %263
+                            %265:bool = lte %x_259, 32i
+                            if %265 [t: $B63, f: $B64] {  # if_18
+                              $B63: {  # true
                                 exit_if  # if_18
                               }
-                              %b64 = block {  # false
+                              $B64: {  # false
                                 exit_loop  # loop_8
                               }
                             }
                             store %x_273_phi, %x_256
-                            %225:f32 = access %x_256, 0u
-                            %226:bool = lt %225, 0.0f
-                            if %226 [t: %b65] {  # if_19
-                              %b65 = block {  # true
-                                if %x_252 [t: %b66] {  # if_20
-                                  %b66 = block {  # true
-                                    discard
+                            %266:f32 = access %x_256, 0u
+                            %267:bool = lt %266, 0.0f
+                            if %267 [t: $B65] {  # if_19
+                              $B65: {  # true
+                                if %x_252 [t: $B66] {  # if_20
+                                  $B66: {  # true
+                                    store %continue_execution, false
                                     exit_if  # if_20
                                   }
                                 }
                                 store %x_272, %x_256
-                                %227:f32 = access %x_256, 1u
-                                %228:f32 = add %227, 1.0f
-                                store_vector_element %x_272, 1u, %228
-                                %229:vec2<f32> = load %x_272
-                                store %x_273_phi, %229
+                                %268:f32 = access %x_256, 1u
+                                %269:f32 = add %268, 1.0f
+                                store_vector_element %x_272, 1u, %269
+                                %270:vec2<f32> = load %x_272
+                                store %x_273_phi, %270
                                 exit_if  # if_19
                               }
                             }
-                            %x_273:vec2<f32> = load %x_273_phi
+                            %271:vec2<f32> = load %x_273_phi
+                            %x_273:vec2<f32> = let %271
                             %x_257_1:ptr<function, vec2<f32>, read_write> = var, %x_273
-                            %232:f32 = access %x_273, 0u
-                            %233:f32 = access %x_273, 1u
-                            %234:f32 = add %232, %233
-                            store_vector_element %x_257_1, 0u, %234
-                            %x_257:vec2<f32> = load %x_257_1
-                            continue %b62
+                            %274:f32 = access %x_273, 0u
+                            %275:f32 = access %x_273, 1u
+                            %276:f32 = add %274, %275
+                            store_vector_element %x_257_1, 0u, %276
+                            %277:vec2<f32> = load %x_257_1
+                            %x_257:vec2<f32> = let %277
+                            continue  # -> $B62
                           }
-                          %b62 = block {  # continuing
-                            %236:i32 = add %x_259, 1i
-                            store %x_260, %236
+                          $B62: {  # continuing
+                            %279:i32 = add %x_259, 1i
+                            store %x_260, %279
                             store %x_256_phi, %x_257
-                            %237:i32 = load %x_260
-                            store %x_259_phi, %237
-                            next_iteration %b61
+                            %280:i32 = load %x_260
+                            store %x_259_phi, %280
+                            next_iteration  # -> $B61
                           }
                         }
                         exit_if  # if_12
                       }
                     }
-                    %238:f32 = load %x_249
-                    store %x_277_phi, %238
+                    %281:f32 = load %x_249
+                    store %x_277_phi, %281
                     exit_if  # if_11
                   }
                 }
-                %239:f32 = load %x_277_phi
-                store %x_277, %239
-                %240:f32 = load %x_277
-                store %x_278_phi, %240
+                %282:f32 = load %x_277_phi
+                store %x_277, %282
+                %283:f32 = load %x_277
+                store %x_278_phi, %283
                 exit_if  # if_10
               }
             }
-            %241:f32 = load %x_278_phi
-            store %x_278, %241
-            %242:f32 = load %x_278
-            store %x_279_phi, %242
+            %284:f32 = load %x_278_phi
+            store %x_278, %284
+            %285:f32 = load %x_278
+            store %x_279_phi, %285
             exit_if  # if_9
           }
         }
-        %243:f32 = load %x_279_phi
-        store %x_279, %243
-        %244:f32 = load %x_279
-        store %x_280_phi, %244
+        %286:f32 = load %x_279_phi
+        store %x_279, %286
+        %287:f32 = load %x_279
+        store %x_280_phi, %287
         exit_if  # if_8
       }
     }
-    %x_280:f32 = load %x_280_phi
-    %246:vec4<f32> = construct %x_280, %x_280, %x_280, 1.0f
-    store %x_GLF_color, %246
+    %288:f32 = load %x_280_phi
+    %x_280:f32 = let %288
+    %290:vec4<f32> = construct %x_280, %x_280, %x_280, 1.0f
+    store %x_GLF_color, %290
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b67 {
-  %b67 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B67: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %249:void = call %main_1
-    %250:vec4<f32> = load %x_GLF_color
-    %251:main_out = construct %250
-    ret %251
+    %293:void = call %main_1
+    %294:vec4<f32> = load %x_GLF_color
+    %295:main_out = construct %294
+    %296:bool = load %continue_execution
+    %297:bool = eq %296, false
+    if %297 [t: $B68] {  # if_21
+      $B68: {  # true
+        terminate_invocation
+      }
+    }
+    ret %295
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B69: {
+    %299:i32 = convert %value
+    %300:bool = gte %value, -2147483648.0f
+    %301:i32 = select -2147483648i, %299, %300
+    %302:bool = lte %value, 2147483520.0f
+    %303:i32 = select 2147483647i, %301, %302
+    ret %303
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-mergesort-reversed-for-loop/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-mergesort-reversed-for-loop/1.spvasm.expected.ir.msl
index 5126351..3fe867b 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-mergesort-reversed-for-loop/1.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/stable-mergesort-reversed-for-loop/1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,158 +8,166 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %data:ptr<private, array<i32, 10>, read_write> = var
   %temp:ptr<private, array<i32, 10>, read_write> = var
   %x_28:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%merge_i1_i1_i1_ = func(%f:ptr<function, i32, read_write>, %mid:ptr<function, i32, read_write>, %to:ptr<function, i32, read_write>):void -> %b2 {
-  %b2 = block {
+%merge_i1_i1_i1_ = func(%f:ptr<function, i32, read_write>, %mid:ptr<function, i32, read_write>, %to:ptr<function, i32, read_write>):void {
+  $B2: {
     %k:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %j:ptr<function, i32, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
-    %14:i32 = load %f
-    store %k, %14
     %15:i32 = load %f
-    store %i, %15
-    %16:i32 = load %mid
-    %17:i32 = add %16, 1i
-    store %j, %17
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %18:i32 = load %i
-        %19:i32 = load %mid
-        %20:bool = lte %18, %19
-        %21:i32 = load %j
-        %22:i32 = load %to
-        %23:bool = lte %21, %22
-        %24:bool = and %20, %23
-        if %24 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    store %k, %15
+    %16:i32 = load %f
+    store %i, %16
+    %17:i32 = load %mid
+    %18:i32 = add %17, 1i
+    store %j, %18
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %19:i32 = load %i
+        %20:i32 = load %mid
+        %21:bool = lte %19, %20
+        %22:i32 = load %j
+        %23:i32 = load %to
+        %24:bool = lte %22, %23
+        %25:bool = and %21, %24
+        if %25 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %25:i32 = load %i
-        %26:ptr<private, i32, read_write> = access %data, %25
-        %27:i32 = load %26
-        %28:i32 = load %j
-        %29:ptr<private, i32, read_write> = access %data, %28
-        %30:i32 = load %29
-        %31:bool = lt %27, %30
-        if %31 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
-            %x_288:i32 = load %k
+        %26:i32 = load %i
+        %27:ptr<private, i32, read_write> = access %data, %26
+        %28:i32 = load %27
+        %29:i32 = load %j
+        %30:ptr<private, i32, read_write> = access %data, %29
+        %31:i32 = load %30
+        %32:bool = lt %28, %31
+        if %32 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
             %33:i32 = load %k
-            %34:i32 = add %33, 1i
-            store %k, %34
-            %x_290:i32 = load %i
-            %36:i32 = load %i
-            %37:i32 = add %36, 1i
-            store %i, %37
-            %38:ptr<private, i32, read_write> = access %temp, %x_288
-            %39:ptr<private, i32, read_write> = access %data, %x_290
-            %40:i32 = load %39
-            store %38, %40
+            %x_288:i32 = let %33
+            %35:i32 = load %k
+            %36:i32 = add %35, 1i
+            store %k, %36
+            %37:i32 = load %i
+            %x_290:i32 = let %37
+            %39:i32 = load %i
+            %40:i32 = add %39, 1i
+            store %i, %40
+            %41:ptr<private, i32, read_write> = access %temp, %x_288
+            %42:ptr<private, i32, read_write> = access %data, %x_290
+            %43:i32 = load %42
+            store %41, %43
             exit_if  # if_2
           }
-          %b8 = block {  # false
-            %x_295:i32 = load %k
-            %42:i32 = load %k
-            %43:i32 = add %42, 1i
-            store %k, %43
-            %x_297:i32 = load %j
-            %45:i32 = load %j
-            %46:i32 = add %45, 1i
-            store %j, %46
-            %47:ptr<private, i32, read_write> = access %temp, %x_295
-            %48:ptr<private, i32, read_write> = access %data, %x_297
-            %49:i32 = load %48
-            store %47, %49
+          $B8: {  # false
+            %44:i32 = load %k
+            %x_295:i32 = let %44
+            %46:i32 = load %k
+            %47:i32 = add %46, 1i
+            store %k, %47
+            %48:i32 = load %j
+            %x_297:i32 = let %48
+            %50:i32 = load %j
+            %51:i32 = add %50, 1i
+            store %j, %51
+            %52:ptr<private, i32, read_write> = access %temp, %x_295
+            %53:ptr<private, i32, read_write> = access %data, %x_297
+            %54:i32 = load %53
+            store %52, %54
             exit_if  # if_2
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
-    loop [b: %b9, c: %b10] {  # loop_2
-      %b9 = block {  # body
-        %50:i32 = load %i
-        %51:bool = lt %50, 10i
-        %52:i32 = load %i
-        %53:i32 = load %mid
-        %54:bool = lte %52, %53
-        %55:bool = and %51, %54
-        if %55 [t: %b11, f: %b12] {  # if_3
-          %b11 = block {  # true
+    loop [b: $B9, c: $B10] {  # loop_2
+      $B9: {  # body
+        %55:i32 = load %i
+        %56:bool = lt %55, 10i
+        %57:i32 = load %i
+        %58:i32 = load %mid
+        %59:bool = lte %57, %58
+        %60:bool = and %56, %59
+        if %60 [t: $B11, f: $B12] {  # if_3
+          $B11: {  # true
             exit_if  # if_3
           }
-          %b12 = block {  # false
+          $B12: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_313:i32 = load %k
-        %57:i32 = load %k
-        %58:i32 = add %57, 1i
-        store %k, %58
-        %x_315:i32 = load %i
-        %60:i32 = load %i
-        %61:i32 = add %60, 1i
-        store %i, %61
-        %62:ptr<private, i32, read_write> = access %temp, %x_313
-        %63:ptr<private, i32, read_write> = access %data, %x_315
-        %64:i32 = load %63
-        store %62, %64
-        continue %b10
+        %61:i32 = load %k
+        %x_313:i32 = let %61
+        %63:i32 = load %k
+        %64:i32 = add %63, 1i
+        store %k, %64
+        %65:i32 = load %i
+        %x_315:i32 = let %65
+        %67:i32 = load %i
+        %68:i32 = add %67, 1i
+        store %i, %68
+        %69:ptr<private, i32, read_write> = access %temp, %x_313
+        %70:ptr<private, i32, read_write> = access %data, %x_315
+        %71:i32 = load %70
+        store %69, %71
+        continue  # -> $B10
       }
-      %b10 = block {  # continuing
-        next_iteration %b9
+      $B10: {  # continuing
+        next_iteration  # -> $B9
       }
     }
-    %65:i32 = load %f
-    store %i_1, %65
-    loop [b: %b13, c: %b14] {  # loop_3
-      %b13 = block {  # body
-        %66:i32 = load %i_1
-        %67:i32 = load %to
-        %68:bool = lte %66, %67
-        if %68 [t: %b15, f: %b16] {  # if_4
-          %b15 = block {  # true
+    %72:i32 = load %f
+    store %i_1, %72
+    loop [b: $B13, c: $B14] {  # loop_3
+      $B13: {  # body
+        %73:i32 = load %i_1
+        %74:i32 = load %to
+        %75:bool = lte %73, %74
+        if %75 [t: $B15, f: $B16] {  # if_4
+          $B15: {  # true
             exit_if  # if_4
           }
-          %b16 = block {  # false
+          $B16: {  # false
             exit_loop  # loop_3
           }
         }
-        %x_329:i32 = load %i_1
-        %70:ptr<private, i32, read_write> = access %data, %x_329
-        %71:i32 = load %i_1
-        %72:ptr<private, i32, read_write> = access %temp, %71
-        %73:i32 = load %72
-        store %70, %73
-        continue %b14
+        %76:i32 = load %i_1
+        %x_329:i32 = let %76
+        %78:ptr<private, i32, read_write> = access %data, %x_329
+        %79:i32 = load %i_1
+        %80:ptr<private, i32, read_write> = access %temp, %79
+        %81:i32 = load %80
+        store %78, %81
+        continue  # -> $B14
       }
-      %b14 = block {  # continuing
-        %74:i32 = load %i_1
-        %75:i32 = add %74, 1i
-        store %i_1, %75
-        next_iteration %b13
+      $B14: {  # continuing
+        %82:i32 = load %i_1
+        %83:i32 = add %82, 1i
+        store %i_1, %83
+        next_iteration  # -> $B13
       }
     }
     ret
   }
 }
-%mergeSort_ = func():void -> %b17 {
-  %b17 = block {
+%mergeSort_ = func():void {
+  $B17: {
     %low:ptr<function, i32, read_write> = var
     %high:ptr<function, i32, read_write> = var
     %m:ptr<function, i32, read_write> = var
@@ -173,342 +181,356 @@
     store %low, 0i
     store %high, 9i
     store %m, 1i
-    loop [b: %b18, c: %b19] {  # loop_4
-      %b18 = block {  # body
-        %87:i32 = load %m
-        %88:i32 = load %high
-        %89:bool = lte %87, %88
-        if %89 [t: %b20, f: %b21] {  # if_5
-          %b20 = block {  # true
+    loop [b: $B18, c: $B19] {  # loop_4
+      $B18: {  # body
+        %95:i32 = load %m
+        %96:i32 = load %high
+        %97:bool = lte %95, %96
+        if %97 [t: $B20, f: $B21] {  # if_5
+          $B20: {  # true
             exit_if  # if_5
           }
-          %b21 = block {  # false
+          $B21: {  # false
             exit_loop  # loop_4
           }
         }
-        %90:i32 = load %low
-        store %i_2, %90
-        loop [b: %b22, c: %b23] {  # loop_5
-          %b22 = block {  # body
-            %91:i32 = load %i_2
-            %92:i32 = load %high
-            %93:bool = lt %91, %92
-            if %93 [t: %b24, f: %b25] {  # if_6
-              %b24 = block {  # true
+        %98:i32 = load %low
+        store %i_2, %98
+        loop [b: $B22, c: $B23] {  # loop_5
+          $B22: {  # body
+            %99:i32 = load %i_2
+            %100:i32 = load %high
+            %101:bool = lt %99, %100
+            if %101 [t: $B24, f: $B25] {  # if_6
+              $B24: {  # true
                 exit_if  # if_6
               }
-              %b25 = block {  # false
+              $B25: {  # false
                 exit_loop  # loop_5
               }
             }
-            %94:i32 = load %i_2
-            store %f_1, %94
-            %95:i32 = load %i_2
-            %96:i32 = load %m
-            %97:i32 = add %95, %96
-            %98:i32 = sub %97, 1i
-            store %mid_1, %98
-            %99:i32 = load %i_2
-            %100:i32 = load %m
-            %101:i32 = mul 2i, %100
-            %102:i32 = add %99, %101
-            %103:i32 = sub %102, 1i
-            %104:i32 = load %high
-            %105:i32 = min %103, %104
-            store %to_1, %105
-            %106:i32 = load %f_1
-            store %param, %106
-            %107:i32 = load %mid_1
-            store %param_1, %107
-            %108:i32 = load %to_1
-            store %param_2, %108
-            %109:void = call %merge_i1_i1_i1_, %param, %param_1, %param_2
-            continue %b23
+            %102:i32 = load %i_2
+            store %f_1, %102
+            %103:i32 = load %i_2
+            %104:i32 = load %m
+            %105:i32 = add %103, %104
+            %106:i32 = sub %105, 1i
+            store %mid_1, %106
+            %107:i32 = load %i_2
+            %108:i32 = load %m
+            %109:i32 = mul 2i, %108
+            %110:i32 = add %107, %109
+            %111:i32 = sub %110, 1i
+            %112:i32 = load %high
+            %113:i32 = min %111, %112
+            store %to_1, %113
+            %114:i32 = load %f_1
+            store %param, %114
+            %115:i32 = load %mid_1
+            store %param_1, %115
+            %116:i32 = load %to_1
+            store %param_2, %116
+            %117:void = call %merge_i1_i1_i1_, %param, %param_1, %param_2
+            continue  # -> $B23
           }
-          %b23 = block {  # continuing
-            %110:i32 = load %i_2
-            %111:i32 = load %m
-            %112:i32 = mul 2i, %111
-            %113:i32 = add %110, %112
-            store %i_2, %113
-            next_iteration %b22
+          $B23: {  # continuing
+            %118:i32 = load %i_2
+            %119:i32 = load %m
+            %120:i32 = mul 2i, %119
+            %121:i32 = add %118, %120
+            store %i_2, %121
+            next_iteration  # -> $B22
           }
         }
-        continue %b19
+        continue  # -> $B19
       }
-      %b19 = block {  # continuing
-        %114:i32 = load %m
-        %115:i32 = mul 2i, %114
-        store %m, %115
-        next_iteration %b18
+      $B19: {  # continuing
+        %122:i32 = load %m
+        %123:i32 = mul 2i, %122
+        store %m, %123
+        next_iteration  # -> $B18
       }
     }
     ret
   }
 }
-%main_1 = func():void -> %b26 {
-  %b26 = block {
+%main_1 = func():void {
+  $B26: {
     %i_3:ptr<function, i32, read_write> = var
     %j_1:ptr<function, i32, read_write> = var
     %grey:ptr<function, f32, read_write> = var
     %int_i:ptr<function, i32, read_write> = var
-    %121:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
-    %122:f32 = load_vector_element %121, 0u
-    %123:i32 = convert %122
-    store %i_3, %123
-    loop [b: %b27, c: %b28] {  # loop_6
-      %b27 = block {  # body
-        %x_91:i32 = load %i_3
-        switch %x_91 [c: (9i, %b29), c: (8i, %b30), c: (7i, %b31), c: (6i, %b32), c: (5i, %b33), c: (4i, %b34), c: (3i, %b35), c: (2i, %b36), c: (1i, %b37), c: (0i, %b38), c: (default, %b39)] {  # switch_1
-          %b29 = block {  # case
-            %x_121:i32 = load %i_3
-            %126:ptr<private, i32, read_write> = access %data, %x_121
-            store %126, -5i
+    %129:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
+    %130:f32 = load_vector_element %129, 0u
+    %131:i32 = call %tint_f32_to_i32, %130
+    store %i_3, %131
+    loop [b: $B27, c: $B28] {  # loop_6
+      $B27: {  # body
+        %133:i32 = load %i_3
+        %x_91:i32 = let %133
+        switch %x_91 [c: (9i, $B29), c: (8i, $B30), c: (7i, $B31), c: (6i, $B32), c: (5i, $B33), c: (4i, $B34), c: (3i, $B35), c: (2i, $B36), c: (1i, $B37), c: (0i, $B38), c: (default, $B39)] {  # switch_1
+          $B29: {  # case
+            %135:i32 = load %i_3
+            %x_121:i32 = let %135
+            %137:ptr<private, i32, read_write> = access %data, %x_121
+            store %137, -5i
             exit_switch  # switch_1
           }
-          %b30 = block {  # case
-            %x_119:i32 = load %i_3
-            %128:ptr<private, i32, read_write> = access %data, %x_119
-            store %128, -4i
+          $B30: {  # case
+            %138:i32 = load %i_3
+            %x_119:i32 = let %138
+            %140:ptr<private, i32, read_write> = access %data, %x_119
+            store %140, -4i
             exit_switch  # switch_1
           }
-          %b31 = block {  # case
-            %x_117:i32 = load %i_3
-            %130:ptr<private, i32, read_write> = access %data, %x_117
-            store %130, -3i
+          $B31: {  # case
+            %141:i32 = load %i_3
+            %x_117:i32 = let %141
+            %143:ptr<private, i32, read_write> = access %data, %x_117
+            store %143, -3i
             exit_switch  # switch_1
           }
-          %b32 = block {  # case
-            %x_115:i32 = load %i_3
-            %132:ptr<private, i32, read_write> = access %data, %x_115
-            store %132, -2i
+          $B32: {  # case
+            %144:i32 = load %i_3
+            %x_115:i32 = let %144
+            %146:ptr<private, i32, read_write> = access %data, %x_115
+            store %146, -2i
             exit_switch  # switch_1
           }
-          %b33 = block {  # case
-            %x_113:i32 = load %i_3
-            %134:ptr<private, i32, read_write> = access %data, %x_113
-            store %134, -1i
+          $B33: {  # case
+            %147:i32 = load %i_3
+            %x_113:i32 = let %147
+            %149:ptr<private, i32, read_write> = access %data, %x_113
+            store %149, -1i
             exit_switch  # switch_1
           }
-          %b34 = block {  # case
-            %x_111:i32 = load %i_3
-            %136:ptr<private, i32, read_write> = access %data, %x_111
-            store %136, 0i
+          $B34: {  # case
+            %150:i32 = load %i_3
+            %x_111:i32 = let %150
+            %152:ptr<private, i32, read_write> = access %data, %x_111
+            store %152, 0i
             exit_switch  # switch_1
           }
-          %b35 = block {  # case
-            %x_109:i32 = load %i_3
-            %138:ptr<private, i32, read_write> = access %data, %x_109
-            store %138, 1i
+          $B35: {  # case
+            %153:i32 = load %i_3
+            %x_109:i32 = let %153
+            %155:ptr<private, i32, read_write> = access %data, %x_109
+            store %155, 1i
             exit_switch  # switch_1
           }
-          %b36 = block {  # case
-            %x_107:i32 = load %i_3
-            %140:ptr<private, i32, read_write> = access %data, %x_107
-            store %140, 2i
+          $B36: {  # case
+            %156:i32 = load %i_3
+            %x_107:i32 = let %156
+            %158:ptr<private, i32, read_write> = access %data, %x_107
+            store %158, 2i
             exit_switch  # switch_1
           }
-          %b37 = block {  # case
-            %x_105:i32 = load %i_3
-            %142:ptr<private, i32, read_write> = access %data, %x_105
-            store %142, 3i
+          $B37: {  # case
+            %159:i32 = load %i_3
+            %x_105:i32 = let %159
+            %161:ptr<private, i32, read_write> = access %data, %x_105
+            store %161, 3i
             exit_switch  # switch_1
           }
-          %b38 = block {  # case
-            %x_103:i32 = load %i_3
-            %144:ptr<private, i32, read_write> = access %data, %x_103
-            store %144, 4i
+          $B38: {  # case
+            %162:i32 = load %i_3
+            %x_103:i32 = let %162
+            %164:ptr<private, i32, read_write> = access %data, %x_103
+            store %164, 4i
             exit_switch  # switch_1
           }
-          %b39 = block {  # case
+          $B39: {  # case
             exit_switch  # switch_1
           }
         }
-        %145:i32 = load %i_3
-        %146:i32 = add %145, 1i
-        store %i_3, %146
-        continue %b28
+        %165:i32 = load %i_3
+        %166:i32 = add %165, 1i
+        store %i_3, %166
+        continue  # -> $B28
       }
-      %b28 = block {  # continuing
-        %x_125:i32 = load %i_3
-        %148:bool = lt %x_125, 10i
-        %149:bool = eq %148, false
-        break_if %149 %b27
+      $B28: {  # continuing
+        %167:i32 = load %i_3
+        %x_125:i32 = let %167
+        %169:bool = lt %x_125, 10i
+        %170:bool = eq %169, false
+        break_if %170  # -> [t: exit_loop loop_6, f: $B27]
       }
     }
     store %j_1, 0i
-    loop [b: %b40, c: %b41] {  # loop_7
-      %b40 = block {  # body
-        %150:i32 = load %j_1
-        %151:bool = lt %150, 10i
-        if %151 [t: %b42, f: %b43] {  # if_7
-          %b42 = block {  # true
+    loop [b: $B40, c: $B41] {  # loop_7
+      $B40: {  # body
+        %171:i32 = load %j_1
+        %172:bool = lt %171, 10i
+        if %172 [t: $B42, f: $B43] {  # if_7
+          $B42: {  # true
             exit_if  # if_7
           }
-          %b43 = block {  # false
+          $B43: {  # false
             exit_loop  # loop_7
           }
         }
-        %x_134:i32 = load %j_1
-        %153:ptr<private, i32, read_write> = access %temp, %x_134
-        %154:i32 = load %j_1
-        %155:ptr<private, i32, read_write> = access %data, %154
-        %156:i32 = load %155
-        store %153, %156
-        continue %b41
+        %173:i32 = load %j_1
+        %x_134:i32 = let %173
+        %175:ptr<private, i32, read_write> = access %temp, %x_134
+        %176:i32 = load %j_1
+        %177:ptr<private, i32, read_write> = access %data, %176
+        %178:i32 = load %177
+        store %175, %178
+        continue  # -> $B41
       }
-      %b41 = block {  # continuing
-        %157:i32 = load %j_1
-        %158:i32 = add %157, 1i
-        store %j_1, %158
-        next_iteration %b40
+      $B41: {  # continuing
+        %179:i32 = load %j_1
+        %180:i32 = add %179, 1i
+        store %j_1, %180
+        next_iteration  # -> $B40
       }
     }
-    %159:void = call %mergeSort_
-    %160:f32 = load_vector_element %gl_FragCoord, 1u
-    %161:i32 = convert %160
-    %162:bool = lt %161, 30i
-    if %162 [t: %b44, f: %b45] {  # if_8
-      %b44 = block {  # true
-        %163:ptr<private, i32, read_write> = access %data, 0i
-        %164:i32 = load %163
-        %165:f32 = convert %164
-        %166:f32 = div %165, 10.0f
-        %167:f32 = add 0.5f, %166
-        store %grey, %167
+    %181:void = call %mergeSort_
+    %182:f32 = load_vector_element %gl_FragCoord, 1u
+    %183:i32 = call %tint_f32_to_i32, %182
+    %184:bool = lt %183, 30i
+    if %184 [t: $B44, f: $B45] {  # if_8
+      $B44: {  # true
+        %185:ptr<private, i32, read_write> = access %data, 0i
+        %186:i32 = load %185
+        %187:f32 = convert %186
+        %188:f32 = div %187, 10.0f
+        %189:f32 = add 0.5f, %188
+        store %grey, %189
         exit_if  # if_8
       }
-      %b45 = block {  # false
-        %168:f32 = load_vector_element %gl_FragCoord, 1u
-        %169:i32 = convert %168
-        %170:bool = lt %169, 60i
-        if %170 [t: %b46, f: %b47] {  # if_9
-          %b46 = block {  # true
-            %171:ptr<private, i32, read_write> = access %data, 1i
-            %172:i32 = load %171
-            %173:f32 = convert %172
-            %174:f32 = div %173, 10.0f
-            %175:f32 = add 0.5f, %174
-            store %grey, %175
+      $B45: {  # false
+        %190:f32 = load_vector_element %gl_FragCoord, 1u
+        %191:i32 = call %tint_f32_to_i32, %190
+        %192:bool = lt %191, 60i
+        if %192 [t: $B46, f: $B47] {  # if_9
+          $B46: {  # true
+            %193:ptr<private, i32, read_write> = access %data, 1i
+            %194:i32 = load %193
+            %195:f32 = convert %194
+            %196:f32 = div %195, 10.0f
+            %197:f32 = add 0.5f, %196
+            store %grey, %197
             exit_if  # if_9
           }
-          %b47 = block {  # false
-            %176:f32 = load_vector_element %gl_FragCoord, 1u
-            %177:i32 = convert %176
-            %178:bool = lt %177, 90i
-            if %178 [t: %b48, f: %b49] {  # if_10
-              %b48 = block {  # true
-                %179:ptr<private, i32, read_write> = access %data, 2i
-                %180:i32 = load %179
-                %181:f32 = convert %180
-                %182:f32 = div %181, 10.0f
-                %183:f32 = add 0.5f, %182
-                store %grey, %183
+          $B47: {  # false
+            %198:f32 = load_vector_element %gl_FragCoord, 1u
+            %199:i32 = call %tint_f32_to_i32, %198
+            %200:bool = lt %199, 90i
+            if %200 [t: $B48, f: $B49] {  # if_10
+              $B48: {  # true
+                %201:ptr<private, i32, read_write> = access %data, 2i
+                %202:i32 = load %201
+                %203:f32 = convert %202
+                %204:f32 = div %203, 10.0f
+                %205:f32 = add 0.5f, %204
+                store %grey, %205
                 exit_if  # if_10
               }
-              %b49 = block {  # false
-                %184:f32 = load_vector_element %gl_FragCoord, 1u
-                %185:i32 = convert %184
-                %186:bool = lt %185, 120i
-                if %186 [t: %b50, f: %b51] {  # if_11
-                  %b50 = block {  # true
-                    %187:ptr<private, i32, read_write> = access %data, 3i
-                    %188:i32 = load %187
-                    %189:f32 = convert %188
-                    %190:f32 = div %189, 10.0f
-                    %191:f32 = add 0.5f, %190
-                    store %grey, %191
+              $B49: {  # false
+                %206:f32 = load_vector_element %gl_FragCoord, 1u
+                %207:i32 = call %tint_f32_to_i32, %206
+                %208:bool = lt %207, 120i
+                if %208 [t: $B50, f: $B51] {  # if_11
+                  $B50: {  # true
+                    %209:ptr<private, i32, read_write> = access %data, 3i
+                    %210:i32 = load %209
+                    %211:f32 = convert %210
+                    %212:f32 = div %211, 10.0f
+                    %213:f32 = add 0.5f, %212
+                    store %grey, %213
                     exit_if  # if_11
                   }
-                  %b51 = block {  # false
-                    %192:f32 = load_vector_element %gl_FragCoord, 1u
-                    %193:i32 = convert %192
-                    %194:bool = lt %193, 150i
-                    if %194 [t: %b52, f: %b53] {  # if_12
-                      %b52 = block {  # true
+                  $B51: {  # false
+                    %214:f32 = load_vector_element %gl_FragCoord, 1u
+                    %215:i32 = call %tint_f32_to_i32, %214
+                    %216:bool = lt %215, 150i
+                    if %216 [t: $B52, f: $B53] {  # if_12
+                      $B52: {  # true
                         store %int_i, 1i
-                        loop [b: %b54, c: %b55] {  # loop_8
-                          %b54 = block {  # body
-                            %195:i32 = load %int_i
-                            %196:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
-                            %197:f32 = load_vector_element %196, 0u
-                            %198:i32 = convert %197
-                            %199:bool = gt %195, %198
-                            if %199 [t: %b56, f: %b57] {  # if_13
-                              %b56 = block {  # true
+                        loop [b: $B54, c: $B55] {  # loop_8
+                          $B54: {  # body
+                            %217:i32 = load %int_i
+                            %218:i32 = let %217
+                            %219:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
+                            %220:f32 = load_vector_element %219, 0u
+                            %221:i32 = call %tint_f32_to_i32, %220
+                            %222:bool = gt %218, %221
+                            if %222 [t: $B56, f: $B57] {  # if_13
+                              $B56: {  # true
                                 exit_if  # if_13
                               }
-                              %b57 = block {  # false
+                              $B57: {  # false
                                 exit_loop  # loop_8
                               }
                             }
-                            discard
-                            continue %b55
+                            store %continue_execution, false
+                            continue  # -> $B55
                           }
-                          %b55 = block {  # continuing
-                            next_iteration %b54
+                          $B55: {  # continuing
+                            next_iteration  # -> $B54
                           }
                         }
                         exit_if  # if_12
                       }
-                      %b53 = block {  # false
-                        %200:f32 = load_vector_element %gl_FragCoord, 1u
-                        %201:i32 = convert %200
-                        %202:bool = lt %201, 180i
-                        if %202 [t: %b58, f: %b59] {  # if_14
-                          %b58 = block {  # true
-                            %203:ptr<private, i32, read_write> = access %data, 5i
-                            %204:i32 = load %203
-                            %205:f32 = convert %204
-                            %206:f32 = div %205, 10.0f
-                            %207:f32 = add 0.5f, %206
-                            store %grey, %207
+                      $B53: {  # false
+                        %223:f32 = load_vector_element %gl_FragCoord, 1u
+                        %224:i32 = call %tint_f32_to_i32, %223
+                        %225:bool = lt %224, 180i
+                        if %225 [t: $B58, f: $B59] {  # if_14
+                          $B58: {  # true
+                            %226:ptr<private, i32, read_write> = access %data, 5i
+                            %227:i32 = load %226
+                            %228:f32 = convert %227
+                            %229:f32 = div %228, 10.0f
+                            %230:f32 = add 0.5f, %229
+                            store %grey, %230
                             exit_if  # if_14
                           }
-                          %b59 = block {  # false
-                            %208:f32 = load_vector_element %gl_FragCoord, 1u
-                            %209:i32 = convert %208
-                            %210:bool = lt %209, 210i
-                            if %210 [t: %b60, f: %b61] {  # if_15
-                              %b60 = block {  # true
-                                %211:ptr<private, i32, read_write> = access %data, 6i
-                                %212:i32 = load %211
-                                %213:f32 = convert %212
-                                %214:f32 = div %213, 10.0f
-                                %215:f32 = add 0.5f, %214
-                                store %grey, %215
+                          $B59: {  # false
+                            %231:f32 = load_vector_element %gl_FragCoord, 1u
+                            %232:i32 = call %tint_f32_to_i32, %231
+                            %233:bool = lt %232, 210i
+                            if %233 [t: $B60, f: $B61] {  # if_15
+                              $B60: {  # true
+                                %234:ptr<private, i32, read_write> = access %data, 6i
+                                %235:i32 = load %234
+                                %236:f32 = convert %235
+                                %237:f32 = div %236, 10.0f
+                                %238:f32 = add 0.5f, %237
+                                store %grey, %238
                                 exit_if  # if_15
                               }
-                              %b61 = block {  # false
-                                %216:f32 = load_vector_element %gl_FragCoord, 1u
-                                %217:i32 = convert %216
-                                %218:bool = lt %217, 240i
-                                if %218 [t: %b62, f: %b63] {  # if_16
-                                  %b62 = block {  # true
-                                    %219:ptr<private, i32, read_write> = access %data, 7i
-                                    %220:i32 = load %219
-                                    %221:f32 = convert %220
-                                    %222:f32 = div %221, 10.0f
-                                    %223:f32 = add 0.5f, %222
-                                    store %grey, %223
+                              $B61: {  # false
+                                %239:f32 = load_vector_element %gl_FragCoord, 1u
+                                %240:i32 = call %tint_f32_to_i32, %239
+                                %241:bool = lt %240, 240i
+                                if %241 [t: $B62, f: $B63] {  # if_16
+                                  $B62: {  # true
+                                    %242:ptr<private, i32, read_write> = access %data, 7i
+                                    %243:i32 = load %242
+                                    %244:f32 = convert %243
+                                    %245:f32 = div %244, 10.0f
+                                    %246:f32 = add 0.5f, %245
+                                    store %grey, %246
                                     exit_if  # if_16
                                   }
-                                  %b63 = block {  # false
-                                    %224:f32 = load_vector_element %gl_FragCoord, 1u
-                                    %225:i32 = convert %224
-                                    %226:bool = lt %225, 270i
-                                    if %226 [t: %b64, f: %b65] {  # if_17
-                                      %b64 = block {  # true
-                                        %227:ptr<private, i32, read_write> = access %data, 8i
-                                        %228:i32 = load %227
-                                        %229:f32 = convert %228
-                                        %230:f32 = div %229, 10.0f
-                                        %231:f32 = add 0.5f, %230
-                                        store %grey, %231
+                                  $B63: {  # false
+                                    %247:f32 = load_vector_element %gl_FragCoord, 1u
+                                    %248:i32 = call %tint_f32_to_i32, %247
+                                    %249:bool = lt %248, 270i
+                                    if %249 [t: $B64, f: $B65] {  # if_17
+                                      $B64: {  # true
+                                        %250:ptr<private, i32, read_write> = access %data, 8i
+                                        %251:i32 = load %250
+                                        %252:f32 = convert %251
+                                        %253:f32 = div %252, 10.0f
+                                        %254:f32 = add 0.5f, %253
+                                        store %grey, %254
                                         exit_if  # if_17
                                       }
-                                      %b65 = block {  # false
-                                        discard
+                                      $B65: {  # false
+                                        store %continue_execution, false
                                         exit_if  # if_17
                                       }
                                     }
@@ -536,23 +558,41 @@
         exit_if  # if_8
       }
     }
-    %232:f32 = load %grey
-    %x_256:vec3<f32> = construct %232
-    %234:f32 = access %x_256, 0u
-    %235:f32 = access %x_256, 1u
-    %236:f32 = access %x_256, 2u
-    %237:vec4<f32> = construct %234, %235, %236, 1.0f
-    store %x_GLF_color, %237
+    %255:f32 = load %grey
+    %256:vec3<f32> = construct %255
+    %x_256:vec3<f32> = let %256
+    %258:f32 = access %x_256, 0u
+    %259:f32 = access %x_256, 1u
+    %260:f32 = access %x_256, 2u
+    %261:vec4<f32> = construct %258, %259, %260, 1.0f
+    store %x_GLF_color, %261
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b66 {
-  %b66 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B66: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %240:void = call %main_1
-    %241:vec4<f32> = load %x_GLF_color
-    %242:main_out = construct %241
-    ret %242
+    %264:void = call %main_1
+    %265:vec4<f32> = load %x_GLF_color
+    %266:main_out = construct %265
+    %267:bool = load %continue_execution
+    %268:bool = eq %267, false
+    if %268 [t: $B67] {  # if_18
+      $B67: {  # true
+        terminate_invocation
+      }
+    }
+    ret %266
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B68: {
+    %270:i32 = convert %value
+    %271:bool = gte %value, -2147483648.0f
+    %272:i32 = select -2147483648i, %270, %271
+    %273:bool = lte %value, 2147483520.0f
+    %274:i32 = select 2147483647i, %272, %273
+    ret %274
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-mergesort-reversed-for-loop/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-mergesort-reversed-for-loop/1.wgsl.expected.ir.msl
index 58b6dd3..a4f8d90 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-mergesort-reversed-for-loop/1.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/stable-mergesort-reversed-for-loop/1.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,152 +8,183 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %data:ptr<private, array<i32, 10>, read_write> = var
   %temp:ptr<private, array<i32, 10>, read_write> = var
   %x_28:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%merge_i1_i1_i1_ = func(%f:ptr<function, i32, read_write>, %mid:ptr<function, i32, read_write>, %to:ptr<function, i32, read_write>):void -> %b2 {
-  %b2 = block {
+%merge_i1_i1_i1_ = func(%f:ptr<function, i32, read_write>, %mid:ptr<function, i32, read_write>, %to:ptr<function, i32, read_write>):void {
+  $B2: {
     %k:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %j:ptr<function, i32, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
-    %x_262:i32 = load %f
+    %15:i32 = load %f
+    %x_262:i32 = let %15
     store %k, %x_262
-    %x_263:i32 = load %f
+    %17:i32 = load %f
+    %x_263:i32 = let %17
     store %i, %x_263
-    %x_264:i32 = load %mid
-    %17:i32 = add %x_264, 1i
-    store %j, %17
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_270:i32 = load %i
-        %x_271:i32 = load %mid
-        %x_273:i32 = load %j
-        %x_274:i32 = load %to
-        %22:bool = lte %x_270, %x_271
-        %23:bool = lte %x_273, %x_274
-        %24:bool = and %22, %23
-        if %24 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    %19:i32 = load %mid
+    %x_264:i32 = let %19
+    %21:i32 = add %x_264, 1i
+    store %j, %21
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %22:i32 = load %i
+        %x_270:i32 = let %22
+        %24:i32 = load %mid
+        %x_271:i32 = let %24
+        %26:i32 = load %j
+        %x_273:i32 = let %26
+        %28:i32 = load %to
+        %x_274:i32 = let %28
+        %30:bool = lte %x_270, %x_271
+        %31:bool = lte %x_273, %x_274
+        %32:bool = and %30, %31
+        if %32 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_278:i32 = load %i
-        %26:ptr<private, i32, read_write> = access %data, %x_278
-        %x_280:i32 = load %26
-        %x_281:i32 = load %j
-        %29:ptr<private, i32, read_write> = access %data, %x_281
-        %x_283:i32 = load %29
-        %31:bool = lt %x_280, %x_283
-        if %31 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
-            %x_288:i32 = load %k
-            %33:i32 = add %x_288, 1i
-            store %k, %33
-            %x_290:i32 = load %i
-            %35:i32 = add %x_290, 1i
-            store %i, %35
-            %36:ptr<private, i32, read_write> = access %data, %x_290
-            %x_293:i32 = load %36
-            %38:ptr<private, i32, read_write> = access %temp, %x_288
-            store %38, %x_293
+        %33:i32 = load %i
+        %x_278:i32 = let %33
+        %35:ptr<private, i32, read_write> = access %data, %x_278
+        %36:i32 = load %35
+        %x_280:i32 = let %36
+        %38:i32 = load %j
+        %x_281:i32 = let %38
+        %40:ptr<private, i32, read_write> = access %data, %x_281
+        %41:i32 = load %40
+        %x_283:i32 = let %41
+        %43:bool = lt %x_280, %x_283
+        if %43 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
+            %44:i32 = load %k
+            %x_288:i32 = let %44
+            %46:i32 = add %x_288, 1i
+            store %k, %46
+            %47:i32 = load %i
+            %x_290:i32 = let %47
+            %49:i32 = add %x_290, 1i
+            store %i, %49
+            %50:ptr<private, i32, read_write> = access %data, %x_290
+            %51:i32 = load %50
+            %x_293:i32 = let %51
+            %53:ptr<private, i32, read_write> = access %temp, %x_288
+            store %53, %x_293
             exit_if  # if_2
           }
-          %b8 = block {  # false
-            %x_295:i32 = load %k
-            %40:i32 = add %x_295, 1i
-            store %k, %40
-            %x_297:i32 = load %j
-            %42:i32 = add %x_297, 1i
-            store %j, %42
-            %43:ptr<private, i32, read_write> = access %data, %x_297
-            %x_300:i32 = load %43
-            %45:ptr<private, i32, read_write> = access %temp, %x_295
-            store %45, %x_300
+          $B8: {  # false
+            %54:i32 = load %k
+            %x_295:i32 = let %54
+            %56:i32 = add %x_295, 1i
+            store %k, %56
+            %57:i32 = load %j
+            %x_297:i32 = let %57
+            %59:i32 = add %x_297, 1i
+            store %j, %59
+            %60:ptr<private, i32, read_write> = access %data, %x_297
+            %61:i32 = load %60
+            %x_300:i32 = let %61
+            %63:ptr<private, i32, read_write> = access %temp, %x_295
+            store %63, %x_300
             exit_if  # if_2
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
-    loop [b: %b9, c: %b10] {  # loop_2
-      %b9 = block {  # body
-        %x_306:i32 = load %i
-        %x_308:i32 = load %i
-        %x_309:i32 = load %mid
-        %49:bool = lt %x_306, 10i
-        %50:bool = lte %x_308, %x_309
-        %51:bool = and %49, %50
-        if %51 [t: %b11, f: %b12] {  # if_3
-          %b11 = block {  # true
+    loop [b: $B9, c: $B10] {  # loop_2
+      $B9: {  # body
+        %64:i32 = load %i
+        %x_306:i32 = let %64
+        %66:i32 = load %i
+        %x_308:i32 = let %66
+        %68:i32 = load %mid
+        %x_309:i32 = let %68
+        %70:bool = lt %x_306, 10i
+        %71:bool = lte %x_308, %x_309
+        %72:bool = and %70, %71
+        if %72 [t: $B11, f: $B12] {  # if_3
+          $B11: {  # true
             exit_if  # if_3
           }
-          %b12 = block {  # false
+          $B12: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_313:i32 = load %k
-        %53:i32 = add %x_313, 1i
-        store %k, %53
-        %x_315:i32 = load %i
-        %55:i32 = add %x_315, 1i
-        store %i, %55
-        %56:ptr<private, i32, read_write> = access %data, %x_315
-        %x_318:i32 = load %56
-        %58:ptr<private, i32, read_write> = access %temp, %x_313
-        store %58, %x_318
-        continue %b10
+        %73:i32 = load %k
+        %x_313:i32 = let %73
+        %75:i32 = add %x_313, 1i
+        store %k, %75
+        %76:i32 = load %i
+        %x_315:i32 = let %76
+        %78:i32 = add %x_315, 1i
+        store %i, %78
+        %79:ptr<private, i32, read_write> = access %data, %x_315
+        %80:i32 = load %79
+        %x_318:i32 = let %80
+        %82:ptr<private, i32, read_write> = access %temp, %x_313
+        store %82, %x_318
+        continue  # -> $B10
       }
-      %b10 = block {  # continuing
-        next_iteration %b9
+      $B10: {  # continuing
+        next_iteration  # -> $B9
       }
     }
-    %x_320:i32 = load %f
+    %83:i32 = load %f
+    %x_320:i32 = let %83
     store %i_1, %x_320
-    loop [b: %b13, c: %b14] {  # loop_3
-      %b13 = block {  # body
-        %x_325:i32 = load %i_1
-        %x_326:i32 = load %to
-        %62:bool = lte %x_325, %x_326
-        if %62 [t: %b15, f: %b16] {  # if_4
-          %b15 = block {  # true
+    loop [b: $B13, c: $B14] {  # loop_3
+      $B13: {  # body
+        %85:i32 = load %i_1
+        %x_325:i32 = let %85
+        %87:i32 = load %to
+        %x_326:i32 = let %87
+        %89:bool = lte %x_325, %x_326
+        if %89 [t: $B15, f: $B16] {  # if_4
+          $B15: {  # true
             exit_if  # if_4
           }
-          %b16 = block {  # false
+          $B16: {  # false
             exit_loop  # loop_3
           }
         }
-        %x_329:i32 = load %i_1
-        %x_330:i32 = load %i_1
-        %65:ptr<private, i32, read_write> = access %temp, %x_330
-        %x_332:i32 = load %65
-        %67:ptr<private, i32, read_write> = access %data, %x_329
-        store %67, %x_332
-        continue %b14
+        %90:i32 = load %i_1
+        %x_329:i32 = let %90
+        %92:i32 = load %i_1
+        %x_330:i32 = let %92
+        %94:ptr<private, i32, read_write> = access %temp, %x_330
+        %95:i32 = load %94
+        %x_332:i32 = let %95
+        %97:ptr<private, i32, read_write> = access %data, %x_329
+        store %97, %x_332
+        continue  # -> $B14
       }
-      %b14 = block {  # continuing
-        %x_334:i32 = load %i_1
-        %69:i32 = add %x_334, 1i
-        store %i_1, %69
-        next_iteration %b13
+      $B14: {  # continuing
+        %98:i32 = load %i_1
+        %x_334:i32 = let %98
+        %100:i32 = add %x_334, 1i
+        store %i_1, %100
+        next_iteration  # -> $B13
       }
     }
     ret
   }
 }
-%mergeSort_ = func():void -> %b17 {
-  %b17 = block {
+%mergeSort_ = func():void {
+  $B17: {
     %low:ptr<function, i32, read_write> = var
     %high:ptr<function, i32, read_write> = var
     %m:ptr<function, i32, read_write> = var
@@ -167,342 +198,397 @@
     store %low, 0i
     store %high, 9i
     store %m, 1i
-    loop [b: %b18, c: %b19] {  # loop_4
-      %b18 = block {  # body
-        %x_341:i32 = load %m
-        %x_342:i32 = load %high
-        %83:bool = lte %x_341, %x_342
-        if %83 [t: %b20, f: %b21] {  # if_5
-          %b20 = block {  # true
+    loop [b: $B18, c: $B19] {  # loop_4
+      $B18: {  # body
+        %112:i32 = load %m
+        %x_341:i32 = let %112
+        %114:i32 = load %high
+        %x_342:i32 = let %114
+        %116:bool = lte %x_341, %x_342
+        if %116 [t: $B20, f: $B21] {  # if_5
+          $B20: {  # true
             exit_if  # if_5
           }
-          %b21 = block {  # false
+          $B21: {  # false
             exit_loop  # loop_4
           }
         }
-        %x_345:i32 = load %low
+        %117:i32 = load %low
+        %x_345:i32 = let %117
         store %i_2, %x_345
-        loop [b: %b22, c: %b23] {  # loop_5
-          %b22 = block {  # body
-            %x_350:i32 = load %i_2
-            %x_351:i32 = load %high
-            %87:bool = lt %x_350, %x_351
-            if %87 [t: %b24, f: %b25] {  # if_6
-              %b24 = block {  # true
+        loop [b: $B22, c: $B23] {  # loop_5
+          $B22: {  # body
+            %119:i32 = load %i_2
+            %x_350:i32 = let %119
+            %121:i32 = load %high
+            %x_351:i32 = let %121
+            %123:bool = lt %x_350, %x_351
+            if %123 [t: $B24, f: $B25] {  # if_6
+              $B24: {  # true
                 exit_if  # if_6
               }
-              %b25 = block {  # false
+              $B25: {  # false
                 exit_loop  # loop_5
               }
             }
-            %x_354:i32 = load %i_2
+            %124:i32 = load %i_2
+            %x_354:i32 = let %124
             store %f_1, %x_354
-            %x_355:i32 = load %i_2
-            %x_356:i32 = load %m
-            %91:i32 = add %x_355, %x_356
-            %92:i32 = sub %91, 1i
-            store %mid_1, %92
-            %x_359:i32 = load %i_2
-            %x_360:i32 = load %m
-            %x_364:i32 = load %high
-            %96:i32 = mul 2i, %x_360
-            %97:i32 = add %x_359, %96
-            %98:i32 = sub %97, 1i
-            %99:i32 = min %98, %x_364
-            store %to_1, %99
-            %x_366:i32 = load %f_1
+            %126:i32 = load %i_2
+            %x_355:i32 = let %126
+            %128:i32 = load %m
+            %x_356:i32 = let %128
+            %130:i32 = add %x_355, %x_356
+            %131:i32 = sub %130, 1i
+            store %mid_1, %131
+            %132:i32 = load %i_2
+            %x_359:i32 = let %132
+            %134:i32 = load %m
+            %x_360:i32 = let %134
+            %136:i32 = load %high
+            %x_364:i32 = let %136
+            %138:i32 = mul 2i, %x_360
+            %139:i32 = add %x_359, %138
+            %140:i32 = sub %139, 1i
+            %141:i32 = min %140, %x_364
+            store %to_1, %141
+            %142:i32 = load %f_1
+            %x_366:i32 = let %142
             store %param, %x_366
-            %x_367:i32 = load %mid_1
+            %144:i32 = load %mid_1
+            %x_367:i32 = let %144
             store %param_1, %x_367
-            %x_368:i32 = load %to_1
+            %146:i32 = load %to_1
+            %x_368:i32 = let %146
             store %param_2, %x_368
-            %103:void = call %merge_i1_i1_i1_, %param, %param_1, %param_2
-            continue %b23
+            %148:void = call %merge_i1_i1_i1_, %param, %param_1, %param_2
+            continue  # -> $B23
           }
-          %b23 = block {  # continuing
-            %x_370:i32 = load %m
-            %x_372:i32 = load %i_2
-            %106:i32 = mul 2i, %x_370
-            %107:i32 = add %x_372, %106
-            store %i_2, %107
-            next_iteration %b22
+          $B23: {  # continuing
+            %149:i32 = load %m
+            %x_370:i32 = let %149
+            %151:i32 = load %i_2
+            %x_372:i32 = let %151
+            %153:i32 = mul 2i, %x_370
+            %154:i32 = add %x_372, %153
+            store %i_2, %154
+            next_iteration  # -> $B22
           }
         }
-        continue %b19
+        continue  # -> $B19
       }
-      %b19 = block {  # continuing
-        %x_374:i32 = load %m
-        %109:i32 = mul 2i, %x_374
-        store %m, %109
-        next_iteration %b18
+      $B19: {  # continuing
+        %155:i32 = load %m
+        %x_374:i32 = let %155
+        %157:i32 = mul 2i, %x_374
+        store %m, %157
+        next_iteration  # -> $B18
       }
     }
     ret
   }
 }
-%main_1 = func():void -> %b26 {
-  %b26 = block {
+%main_1 = func():void {
+  $B26: {
     %i_3:ptr<function, i32, read_write> = var
     %j_1:ptr<function, i32, read_write> = var
     %grey:ptr<function, f32, read_write> = var
     %int_i:ptr<function, i32, read_write> = var
-    %115:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
-    %x_85:f32 = load_vector_element %115, 0u
-    %117:i32 = convert %x_85
-    store %i_3, %117
-    loop [b: %b27, c: %b28] {  # loop_6
-      %b27 = block {  # body
-        %x_91:i32 = load %i_3
-        switch %x_91 [c: (9i, %b29), c: (8i, %b30), c: (7i, %b31), c: (6i, %b32), c: (5i, %b33), c: (4i, %b34), c: (3i, %b35), c: (2i, %b36), c: (1i, %b37), c: (0i, %b38), c: (default, %b39)] {  # switch_1
-          %b29 = block {  # case
-            %x_121:i32 = load %i_3
-            %120:ptr<private, i32, read_write> = access %data, %x_121
-            store %120, -5i
+    %163:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
+    %164:f32 = load_vector_element %163, 0u
+    %x_85:f32 = let %164
+    %166:i32 = call %tint_f32_to_i32, %x_85
+    store %i_3, %166
+    loop [b: $B27, c: $B28] {  # loop_6
+      $B27: {  # body
+        %168:i32 = load %i_3
+        %x_91:i32 = let %168
+        switch %x_91 [c: (9i, $B29), c: (8i, $B30), c: (7i, $B31), c: (6i, $B32), c: (5i, $B33), c: (4i, $B34), c: (3i, $B35), c: (2i, $B36), c: (1i, $B37), c: (0i, $B38), c: (default, $B39)] {  # switch_1
+          $B29: {  # case
+            %170:i32 = load %i_3
+            %x_121:i32 = let %170
+            %172:ptr<private, i32, read_write> = access %data, %x_121
+            store %172, -5i
             exit_switch  # switch_1
           }
-          %b30 = block {  # case
-            %x_119:i32 = load %i_3
-            %122:ptr<private, i32, read_write> = access %data, %x_119
-            store %122, -4i
+          $B30: {  # case
+            %173:i32 = load %i_3
+            %x_119:i32 = let %173
+            %175:ptr<private, i32, read_write> = access %data, %x_119
+            store %175, -4i
             exit_switch  # switch_1
           }
-          %b31 = block {  # case
-            %x_117:i32 = load %i_3
-            %124:ptr<private, i32, read_write> = access %data, %x_117
-            store %124, -3i
+          $B31: {  # case
+            %176:i32 = load %i_3
+            %x_117:i32 = let %176
+            %178:ptr<private, i32, read_write> = access %data, %x_117
+            store %178, -3i
             exit_switch  # switch_1
           }
-          %b32 = block {  # case
-            %x_115:i32 = load %i_3
-            %126:ptr<private, i32, read_write> = access %data, %x_115
-            store %126, -2i
+          $B32: {  # case
+            %179:i32 = load %i_3
+            %x_115:i32 = let %179
+            %181:ptr<private, i32, read_write> = access %data, %x_115
+            store %181, -2i
             exit_switch  # switch_1
           }
-          %b33 = block {  # case
-            %x_113:i32 = load %i_3
-            %128:ptr<private, i32, read_write> = access %data, %x_113
-            store %128, -1i
+          $B33: {  # case
+            %182:i32 = load %i_3
+            %x_113:i32 = let %182
+            %184:ptr<private, i32, read_write> = access %data, %x_113
+            store %184, -1i
             exit_switch  # switch_1
           }
-          %b34 = block {  # case
-            %x_111:i32 = load %i_3
-            %130:ptr<private, i32, read_write> = access %data, %x_111
-            store %130, 0i
+          $B34: {  # case
+            %185:i32 = load %i_3
+            %x_111:i32 = let %185
+            %187:ptr<private, i32, read_write> = access %data, %x_111
+            store %187, 0i
             exit_switch  # switch_1
           }
-          %b35 = block {  # case
-            %x_109:i32 = load %i_3
-            %132:ptr<private, i32, read_write> = access %data, %x_109
-            store %132, 1i
+          $B35: {  # case
+            %188:i32 = load %i_3
+            %x_109:i32 = let %188
+            %190:ptr<private, i32, read_write> = access %data, %x_109
+            store %190, 1i
             exit_switch  # switch_1
           }
-          %b36 = block {  # case
-            %x_107:i32 = load %i_3
-            %134:ptr<private, i32, read_write> = access %data, %x_107
-            store %134, 2i
+          $B36: {  # case
+            %191:i32 = load %i_3
+            %x_107:i32 = let %191
+            %193:ptr<private, i32, read_write> = access %data, %x_107
+            store %193, 2i
             exit_switch  # switch_1
           }
-          %b37 = block {  # case
-            %x_105:i32 = load %i_3
-            %136:ptr<private, i32, read_write> = access %data, %x_105
-            store %136, 3i
+          $B37: {  # case
+            %194:i32 = load %i_3
+            %x_105:i32 = let %194
+            %196:ptr<private, i32, read_write> = access %data, %x_105
+            store %196, 3i
             exit_switch  # switch_1
           }
-          %b38 = block {  # case
-            %x_103:i32 = load %i_3
-            %138:ptr<private, i32, read_write> = access %data, %x_103
-            store %138, 4i
+          $B38: {  # case
+            %197:i32 = load %i_3
+            %x_103:i32 = let %197
+            %199:ptr<private, i32, read_write> = access %data, %x_103
+            store %199, 4i
             exit_switch  # switch_1
           }
-          %b39 = block {  # case
+          $B39: {  # case
             exit_switch  # switch_1
           }
         }
-        %x_123:i32 = load %i_3
-        %140:i32 = add %x_123, 1i
-        store %i_3, %140
-        continue %b28
+        %200:i32 = load %i_3
+        %x_123:i32 = let %200
+        %202:i32 = add %x_123, 1i
+        store %i_3, %202
+        continue  # -> $B28
       }
-      %b28 = block {  # continuing
-        %x_125:i32 = load %i_3
-        %142:bool = lt %x_125, 10i
-        %143:bool = eq %142, false
-        break_if %143 %b27
+      $B28: {  # continuing
+        %203:i32 = load %i_3
+        %x_125:i32 = let %203
+        %205:bool = lt %x_125, 10i
+        %206:bool = eq %205, false
+        break_if %206  # -> [t: exit_loop loop_6, f: $B27]
       }
     }
     store %j_1, 0i
-    loop [b: %b40, c: %b41] {  # loop_7
-      %b40 = block {  # body
-        %x_131:i32 = load %j_1
-        %145:bool = lt %x_131, 10i
-        if %145 [t: %b42, f: %b43] {  # if_7
-          %b42 = block {  # true
+    loop [b: $B40, c: $B41] {  # loop_7
+      $B40: {  # body
+        %207:i32 = load %j_1
+        %x_131:i32 = let %207
+        %209:bool = lt %x_131, 10i
+        if %209 [t: $B42, f: $B43] {  # if_7
+          $B42: {  # true
             exit_if  # if_7
           }
-          %b43 = block {  # false
+          $B43: {  # false
             exit_loop  # loop_7
           }
         }
-        %x_134:i32 = load %j_1
-        %x_135:i32 = load %j_1
-        %148:ptr<private, i32, read_write> = access %data, %x_135
-        %x_137:i32 = load %148
-        %150:ptr<private, i32, read_write> = access %temp, %x_134
-        store %150, %x_137
-        continue %b41
+        %210:i32 = load %j_1
+        %x_134:i32 = let %210
+        %212:i32 = load %j_1
+        %x_135:i32 = let %212
+        %214:ptr<private, i32, read_write> = access %data, %x_135
+        %215:i32 = load %214
+        %x_137:i32 = let %215
+        %217:ptr<private, i32, read_write> = access %temp, %x_134
+        store %217, %x_137
+        continue  # -> $B41
       }
-      %b41 = block {  # continuing
-        %x_139:i32 = load %j_1
-        %152:i32 = add %x_139, 1i
-        store %j_1, %152
-        next_iteration %b40
+      $B41: {  # continuing
+        %218:i32 = load %j_1
+        %x_139:i32 = let %218
+        %220:i32 = add %x_139, 1i
+        store %j_1, %220
+        next_iteration  # -> $B40
       }
     }
-    %153:void = call %mergeSort_
-    %x_143:f32 = load_vector_element %gl_FragCoord, 1u
-    %155:i32 = convert %x_143
-    %156:bool = lt %155, 30i
-    if %156 [t: %b44, f: %b45] {  # if_8
-      %b44 = block {  # true
-        %157:ptr<private, i32, read_write> = access %data, 0i
-        %x_150:i32 = load %157
-        %159:f32 = convert %x_150
-        %160:f32 = div %159, 10.0f
-        %161:f32 = add 0.5f, %160
-        store %grey, %161
+    %221:void = call %mergeSort_
+    %222:f32 = load_vector_element %gl_FragCoord, 1u
+    %x_143:f32 = let %222
+    %224:i32 = call %tint_f32_to_i32, %x_143
+    %225:bool = lt %224, 30i
+    if %225 [t: $B44, f: $B45] {  # if_8
+      $B44: {  # true
+        %226:ptr<private, i32, read_write> = access %data, 0i
+        %227:i32 = load %226
+        %x_150:i32 = let %227
+        %229:f32 = convert %x_150
+        %230:f32 = div %229, 10.0f
+        %231:f32 = add 0.5f, %230
+        store %grey, %231
         exit_if  # if_8
       }
-      %b45 = block {  # false
-        %x_155:f32 = load_vector_element %gl_FragCoord, 1u
-        %163:i32 = convert %x_155
-        %164:bool = lt %163, 60i
-        if %164 [t: %b46, f: %b47] {  # if_9
-          %b46 = block {  # true
-            %165:ptr<private, i32, read_write> = access %data, 1i
-            %x_162:i32 = load %165
-            %167:f32 = convert %x_162
-            %168:f32 = div %167, 10.0f
-            %169:f32 = add 0.5f, %168
-            store %grey, %169
+      $B45: {  # false
+        %232:f32 = load_vector_element %gl_FragCoord, 1u
+        %x_155:f32 = let %232
+        %234:i32 = call %tint_f32_to_i32, %x_155
+        %235:bool = lt %234, 60i
+        if %235 [t: $B46, f: $B47] {  # if_9
+          $B46: {  # true
+            %236:ptr<private, i32, read_write> = access %data, 1i
+            %237:i32 = load %236
+            %x_162:i32 = let %237
+            %239:f32 = convert %x_162
+            %240:f32 = div %239, 10.0f
+            %241:f32 = add 0.5f, %240
+            store %grey, %241
             exit_if  # if_9
           }
-          %b47 = block {  # false
-            %x_167:f32 = load_vector_element %gl_FragCoord, 1u
-            %171:i32 = convert %x_167
-            %172:bool = lt %171, 90i
-            if %172 [t: %b48, f: %b49] {  # if_10
-              %b48 = block {  # true
-                %173:ptr<private, i32, read_write> = access %data, 2i
-                %x_174:i32 = load %173
-                %175:f32 = convert %x_174
-                %176:f32 = div %175, 10.0f
-                %177:f32 = add 0.5f, %176
-                store %grey, %177
+          $B47: {  # false
+            %242:f32 = load_vector_element %gl_FragCoord, 1u
+            %x_167:f32 = let %242
+            %244:i32 = call %tint_f32_to_i32, %x_167
+            %245:bool = lt %244, 90i
+            if %245 [t: $B48, f: $B49] {  # if_10
+              $B48: {  # true
+                %246:ptr<private, i32, read_write> = access %data, 2i
+                %247:i32 = load %246
+                %x_174:i32 = let %247
+                %249:f32 = convert %x_174
+                %250:f32 = div %249, 10.0f
+                %251:f32 = add 0.5f, %250
+                store %grey, %251
                 exit_if  # if_10
               }
-              %b49 = block {  # false
-                %x_179:f32 = load_vector_element %gl_FragCoord, 1u
-                %179:i32 = convert %x_179
-                %180:bool = lt %179, 120i
-                if %180 [t: %b50, f: %b51] {  # if_11
-                  %b50 = block {  # true
-                    %181:ptr<private, i32, read_write> = access %data, 3i
-                    %x_186:i32 = load %181
-                    %183:f32 = convert %x_186
-                    %184:f32 = div %183, 10.0f
-                    %185:f32 = add 0.5f, %184
-                    store %grey, %185
+              $B49: {  # false
+                %252:f32 = load_vector_element %gl_FragCoord, 1u
+                %x_179:f32 = let %252
+                %254:i32 = call %tint_f32_to_i32, %x_179
+                %255:bool = lt %254, 120i
+                if %255 [t: $B50, f: $B51] {  # if_11
+                  $B50: {  # true
+                    %256:ptr<private, i32, read_write> = access %data, 3i
+                    %257:i32 = load %256
+                    %x_186:i32 = let %257
+                    %259:f32 = convert %x_186
+                    %260:f32 = div %259, 10.0f
+                    %261:f32 = add 0.5f, %260
+                    store %grey, %261
                     exit_if  # if_11
                   }
-                  %b51 = block {  # false
-                    %x_191:f32 = load_vector_element %gl_FragCoord, 1u
-                    %187:i32 = convert %x_191
-                    %188:bool = lt %187, 150i
-                    if %188 [t: %b52, f: %b53] {  # if_12
-                      %b52 = block {  # true
+                  $B51: {  # false
+                    %262:f32 = load_vector_element %gl_FragCoord, 1u
+                    %x_191:f32 = let %262
+                    %264:i32 = call %tint_f32_to_i32, %x_191
+                    %265:bool = lt %264, 150i
+                    if %265 [t: $B52, f: $B53] {  # if_12
+                      $B52: {  # true
                         store %int_i, 1i
-                        loop [b: %b54, c: %b55] {  # loop_8
-                          %b54 = block {  # body
-                            %x_201:i32 = load %int_i
-                            %190:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
-                            %x_203:f32 = load_vector_element %190, 0u
-                            %192:i32 = convert %x_203
-                            %193:bool = gt %x_201, %192
-                            if %193 [t: %b56, f: %b57] {  # if_13
-                              %b56 = block {  # true
+                        loop [b: $B54, c: $B55] {  # loop_8
+                          $B54: {  # body
+                            %266:i32 = load %int_i
+                            %x_201:i32 = let %266
+                            %268:ptr<uniform, vec2<f32>, read> = access %x_28, 0u
+                            %269:f32 = load_vector_element %268, 0u
+                            %x_203:f32 = let %269
+                            %271:i32 = call %tint_f32_to_i32, %x_203
+                            %272:bool = gt %x_201, %271
+                            if %272 [t: $B56, f: $B57] {  # if_13
+                              $B56: {  # true
                                 exit_if  # if_13
                               }
-                              %b57 = block {  # false
+                              $B57: {  # false
                                 exit_loop  # loop_8
                               }
                             }
-                            discard
-                            continue %b55
+                            store %continue_execution, false
+                            continue  # -> $B55
                           }
-                          %b55 = block {  # continuing
-                            next_iteration %b54
+                          $B55: {  # continuing
+                            next_iteration  # -> $B54
                           }
                         }
                         exit_if  # if_12
                       }
-                      %b53 = block {  # false
-                        %x_208:f32 = load_vector_element %gl_FragCoord, 1u
-                        %195:i32 = convert %x_208
-                        %196:bool = lt %195, 180i
-                        if %196 [t: %b58, f: %b59] {  # if_14
-                          %b58 = block {  # true
-                            %197:ptr<private, i32, read_write> = access %data, 5i
-                            %x_215:i32 = load %197
-                            %199:f32 = convert %x_215
-                            %200:f32 = div %199, 10.0f
-                            %201:f32 = add 0.5f, %200
-                            store %grey, %201
+                      $B53: {  # false
+                        %273:f32 = load_vector_element %gl_FragCoord, 1u
+                        %x_208:f32 = let %273
+                        %275:i32 = call %tint_f32_to_i32, %x_208
+                        %276:bool = lt %275, 180i
+                        if %276 [t: $B58, f: $B59] {  # if_14
+                          $B58: {  # true
+                            %277:ptr<private, i32, read_write> = access %data, 5i
+                            %278:i32 = load %277
+                            %x_215:i32 = let %278
+                            %280:f32 = convert %x_215
+                            %281:f32 = div %280, 10.0f
+                            %282:f32 = add 0.5f, %281
+                            store %grey, %282
                             exit_if  # if_14
                           }
-                          %b59 = block {  # false
-                            %x_220:f32 = load_vector_element %gl_FragCoord, 1u
-                            %203:i32 = convert %x_220
-                            %204:bool = lt %203, 210i
-                            if %204 [t: %b60, f: %b61] {  # if_15
-                              %b60 = block {  # true
-                                %205:ptr<private, i32, read_write> = access %data, 6i
-                                %x_227:i32 = load %205
-                                %207:f32 = convert %x_227
-                                %208:f32 = div %207, 10.0f
-                                %209:f32 = add 0.5f, %208
-                                store %grey, %209
+                          $B59: {  # false
+                            %283:f32 = load_vector_element %gl_FragCoord, 1u
+                            %x_220:f32 = let %283
+                            %285:i32 = call %tint_f32_to_i32, %x_220
+                            %286:bool = lt %285, 210i
+                            if %286 [t: $B60, f: $B61] {  # if_15
+                              $B60: {  # true
+                                %287:ptr<private, i32, read_write> = access %data, 6i
+                                %288:i32 = load %287
+                                %x_227:i32 = let %288
+                                %290:f32 = convert %x_227
+                                %291:f32 = div %290, 10.0f
+                                %292:f32 = add 0.5f, %291
+                                store %grey, %292
                                 exit_if  # if_15
                               }
-                              %b61 = block {  # false
-                                %x_232:f32 = load_vector_element %gl_FragCoord, 1u
-                                %211:i32 = convert %x_232
-                                %212:bool = lt %211, 240i
-                                if %212 [t: %b62, f: %b63] {  # if_16
-                                  %b62 = block {  # true
-                                    %213:ptr<private, i32, read_write> = access %data, 7i
-                                    %x_239:i32 = load %213
-                                    %215:f32 = convert %x_239
-                                    %216:f32 = div %215, 10.0f
-                                    %217:f32 = add 0.5f, %216
-                                    store %grey, %217
+                              $B61: {  # false
+                                %293:f32 = load_vector_element %gl_FragCoord, 1u
+                                %x_232:f32 = let %293
+                                %295:i32 = call %tint_f32_to_i32, %x_232
+                                %296:bool = lt %295, 240i
+                                if %296 [t: $B62, f: $B63] {  # if_16
+                                  $B62: {  # true
+                                    %297:ptr<private, i32, read_write> = access %data, 7i
+                                    %298:i32 = load %297
+                                    %x_239:i32 = let %298
+                                    %300:f32 = convert %x_239
+                                    %301:f32 = div %300, 10.0f
+                                    %302:f32 = add 0.5f, %301
+                                    store %grey, %302
                                     exit_if  # if_16
                                   }
-                                  %b63 = block {  # false
-                                    %x_244:f32 = load_vector_element %gl_FragCoord, 1u
-                                    %219:i32 = convert %x_244
-                                    %220:bool = lt %219, 270i
-                                    if %220 [t: %b64, f: %b65] {  # if_17
-                                      %b64 = block {  # true
-                                        %221:ptr<private, i32, read_write> = access %data, 8i
-                                        %x_251:i32 = load %221
-                                        %223:f32 = convert %x_251
-                                        %224:f32 = div %223, 10.0f
-                                        %225:f32 = add 0.5f, %224
-                                        store %grey, %225
+                                  $B63: {  # false
+                                    %303:f32 = load_vector_element %gl_FragCoord, 1u
+                                    %x_244:f32 = let %303
+                                    %305:i32 = call %tint_f32_to_i32, %x_244
+                                    %306:bool = lt %305, 270i
+                                    if %306 [t: $B64, f: $B65] {  # if_17
+                                      $B64: {  # true
+                                        %307:ptr<private, i32, read_write> = access %data, 8i
+                                        %308:i32 = load %307
+                                        %x_251:i32 = let %308
+                                        %310:f32 = convert %x_251
+                                        %311:f32 = div %310, 10.0f
+                                        %312:f32 = add 0.5f, %311
+                                        store %grey, %312
                                         exit_if  # if_17
                                       }
-                                      %b65 = block {  # false
-                                        discard
+                                      $B65: {  # false
+                                        store %continue_execution, false
                                         exit_if  # if_17
                                       }
                                     }
@@ -530,23 +616,42 @@
         exit_if  # if_8
       }
     }
-    %x_255:f32 = load %grey
-    %x_256:vec3<f32> = construct %x_255, %x_255, %x_255
-    %228:f32 = access %x_256, 0u
-    %229:f32 = access %x_256, 1u
-    %230:f32 = access %x_256, 2u
-    %231:vec4<f32> = construct %228, %229, %230, 1.0f
-    store %x_GLF_color, %231
+    %313:f32 = load %grey
+    %x_255:f32 = let %313
+    %315:vec3<f32> = construct %x_255, %x_255, %x_255
+    %x_256:vec3<f32> = let %315
+    %317:f32 = access %x_256, 0u
+    %318:f32 = access %x_256, 1u
+    %319:f32 = access %x_256, 2u
+    %320:vec4<f32> = construct %317, %318, %319, 1.0f
+    store %x_GLF_color, %320
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b66 {
-  %b66 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B66: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %234:void = call %main_1
-    %235:vec4<f32> = load %x_GLF_color
-    %236:main_out = construct %235
-    ret %236
+    %323:void = call %main_1
+    %324:vec4<f32> = load %x_GLF_color
+    %325:main_out = construct %324
+    %326:bool = load %continue_execution
+    %327:bool = eq %326, false
+    if %327 [t: $B67] {  # if_18
+      $B67: {  # true
+        terminate_invocation
+      }
+    }
+    ret %325
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B68: {
+    %329:i32 = convert %value
+    %330:bool = gte %value, -2147483648.0f
+    %331:i32 = select -2147483648i, %329, %330
+    %332:bool = lte %value, 2147483520.0f
+    %333:i32 = select 2147483647i, %331, %332
+    ret %333
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-quicksort-conditional-bitwise-or-clamp/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-quicksort-conditional-bitwise-or-clamp/1.spvasm.expected.ir.msl
index 1afae1d..49bf1c2 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-quicksort-conditional-bitwise-or-clamp/1.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/stable-quicksort-conditional-bitwise-or-clamp/1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: QuicksortObject = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: QuicksortObject = struct @align(4) {
   numbers:array<i32, 10> @offset(0)
 }
 
@@ -12,35 +12,37 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %obj:ptr<private, QuicksortObject, read_write> = var
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_34:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%swap_i1_i1_ = func(%i:ptr<function, i32, read_write>, %j:ptr<function, i32, read_write>):void -> %b2 {
-  %b2 = block {
+%swap_i1_i1_ = func(%i:ptr<function, i32, read_write>, %j:ptr<function, i32, read_write>):void {
+  $B2: {
     %temp:ptr<function, i32, read_write> = var
     %9:i32 = load %i
     %10:ptr<private, i32, read_write> = access %obj, 0u, %9
     %11:i32 = load %10
     store %temp, %11
-    %x_233:i32 = load %i
-    %13:ptr<private, i32, read_write> = access %obj, 0u, %x_233
-    %14:i32 = load %j
-    %15:ptr<private, i32, read_write> = access %obj, 0u, %14
-    %16:i32 = load %15
-    store %13, %16
-    %x_238:i32 = load %j
-    %18:ptr<private, i32, read_write> = access %obj, 0u, %x_238
-    %19:i32 = load %temp
-    store %18, %19
+    %12:i32 = load %i
+    %x_233:i32 = let %12
+    %14:ptr<private, i32, read_write> = access %obj, 0u, %x_233
+    %15:i32 = load %j
+    %16:ptr<private, i32, read_write> = access %obj, 0u, %15
+    %17:i32 = load %16
+    store %14, %17
+    %18:i32 = load %j
+    %x_238:i32 = let %18
+    %20:ptr<private, i32, read_write> = access %obj, 0u, %x_238
+    %21:i32 = load %temp
+    store %20, %21
     ret
   }
 }
-%performPartition_i1_i1_ = func(%l:ptr<function, i32, read_write>, %h:ptr<function, i32, read_write>):i32 -> %b3 {
-  %b3 = block {
+%performPartition_i1_i1_ = func(%l:ptr<function, i32, read_write>, %h:ptr<function, i32, read_write>):i32 {
+  $B3: {
     %pivot:ptr<function, i32, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
     %j_1:ptr<function, i32, read_write> = var
@@ -48,70 +50,71 @@
     %param_1:ptr<function, i32, read_write> = var
     %param_2:ptr<function, i32, read_write> = var
     %param_3:ptr<function, i32, read_write> = var
-    %30:i32 = load %h
-    %31:ptr<private, i32, read_write> = access %obj, 0u, %30
-    %32:i32 = load %31
-    store %pivot, %32
-    %33:i32 = load %l
-    %34:i32 = sub %33, 1i
-    store %i_1, %34
+    %32:i32 = load %h
+    %33:ptr<private, i32, read_write> = access %obj, 0u, %32
+    %34:i32 = load %33
+    store %pivot, %34
     %35:i32 = load %l
-    store %j_1, %35
-    loop [b: %b4, c: %b5] {  # loop_1
-      %b4 = block {  # body
-        %36:i32 = load %j_1
-        %37:i32 = load %h
-        %38:i32 = sub %37, 1i
-        %39:bool = lte %36, %38
-        if %39 [t: %b6, f: %b7] {  # if_1
-          %b6 = block {  # true
+    %36:i32 = sub %35, 1i
+    store %i_1, %36
+    %37:i32 = load %l
+    store %j_1, %37
+    loop [b: $B4, c: $B5] {  # loop_1
+      $B4: {  # body
+        %38:i32 = load %j_1
+        %39:i32 = load %h
+        %40:i32 = sub %39, 1i
+        %41:bool = lte %38, %40
+        if %41 [t: $B6, f: $B7] {  # if_1
+          $B6: {  # true
             exit_if  # if_1
           }
-          %b7 = block {  # false
+          $B7: {  # false
             exit_loop  # loop_1
           }
         }
-        %40:i32 = load %j_1
-        %41:ptr<private, i32, read_write> = access %obj, 0u, %40
-        %42:i32 = load %41
-        %43:i32 = load %pivot
-        %44:bool = lte %42, %43
-        if %44 [t: %b8] {  # if_2
-          %b8 = block {  # true
-            %45:i32 = load %i_1
-            %46:i32 = add %45, 1i
-            store %i_1, %46
+        %42:i32 = load %j_1
+        %43:ptr<private, i32, read_write> = access %obj, 0u, %42
+        %44:i32 = load %43
+        %45:i32 = load %pivot
+        %46:bool = lte %44, %45
+        if %46 [t: $B8] {  # if_2
+          $B8: {  # true
             %47:i32 = load %i_1
-            store %param, %47
-            %48:i32 = load %j_1
-            store %param_1, %48
-            %49:void = call %swap_i1_i1_, %param, %param_1
+            %48:i32 = add %47, 1i
+            store %i_1, %48
+            %49:i32 = load %i_1
+            store %param, %49
+            %50:i32 = load %j_1
+            store %param_1, %50
+            %51:void = call %swap_i1_i1_, %param, %param_1
             exit_if  # if_2
           }
         }
-        continue %b5
+        continue  # -> $B5
       }
-      %b5 = block {  # continuing
-        %50:i32 = load %j_1
-        %51:i32 = add %50, 1i
-        store %j_1, %51
-        next_iteration %b4
+      $B5: {  # continuing
+        %52:i32 = load %j_1
+        %53:i32 = add %52, 1i
+        store %j_1, %53
+        next_iteration  # -> $B4
       }
     }
-    %52:i32 = load %i_1
-    %53:i32 = add %52, 1i
-    store %i_1, %53
     %54:i32 = load %i_1
-    store %param_2, %54
-    %55:i32 = load %h
-    store %param_3, %55
-    %56:void = call %swap_i1_i1_, %param_2, %param_3
-    %x_276:i32 = load %i_1
+    %55:i32 = add %54, 1i
+    store %i_1, %55
+    %56:i32 = load %i_1
+    store %param_2, %56
+    %57:i32 = load %h
+    store %param_3, %57
+    %58:void = call %swap_i1_i1_, %param_2, %param_3
+    %59:i32 = load %i_1
+    %x_276:i32 = let %59
     ret %x_276
   }
 }
-%quicksort_ = func():void -> %b9 {
-  %b9 = block {
+%quicksort_ = func():void {
+  $B9: {
     %l_1:ptr<function, i32, read_write> = var
     %h_1:ptr<function, i32, read_write> = var
     %top:ptr<function, i32, read_write> = var
@@ -126,317 +129,355 @@
     store %l_1, 0i
     store %h_1, 9i
     store %top, -1i
-    %70:i32 = load %top
-    %x_281:i32 = add %70, 1i
+    %73:i32 = load %top
+    %74:i32 = add %73, 1i
+    %x_281:i32 = let %74
     store %top, %x_281
-    %72:ptr<function, i32, read_write> = access %stack, %x_281
-    %73:i32 = load %l_1
-    store %72, %73
-    %74:f32 = load_vector_element %gl_FragCoord, 1u
-    %75:bool = gte %74, 0.0f
-    if %75 [t: %b10, f: %b11] {  # if_3
-      %b10 = block {  # true
-        %x_290:i32 = load %h_1
-        if false [t: %b12, f: %b13] {  # if_4
-          %b12 = block {  # true
+    %76:ptr<function, i32, read_write> = access %stack, %x_281
+    %77:i32 = load %l_1
+    store %76, %77
+    %78:f32 = load_vector_element %gl_FragCoord, 1u
+    %79:bool = gte %78, 0.0f
+    if %79 [t: $B10, f: $B11] {  # if_3
+      $B10: {  # true
+        %80:i32 = load %h_1
+        %x_290:i32 = let %80
+        if false [t: $B12, f: $B13] {  # if_4
+          $B12: {  # true
             store %x_279, 1i
             exit_if  # if_4
           }
-          %b13 = block {  # false
-            %77:i32 = load %h_1
-            %78:i32 = shiftl %77, 0u
-            store %x_279, %78
+          $B13: {  # false
+            %82:i32 = load %h_1
+            %83:u32 = and 0u, 31u
+            %84:i32 = shl %82, %83
+            store %x_279, %84
             exit_if  # if_4
           }
         }
-        %79:i32 = load %x_279
-        %80:i32 = or %x_290, %79
-        store %x_278, %80
+        %85:i32 = load %x_279
+        %86:i32 = or %x_290, %85
+        store %x_278, %86
         exit_if  # if_3
       }
-      %b11 = block {  # false
+      $B11: {  # false
         store %x_278, 1i
         exit_if  # if_3
       }
     }
-    %81:i32 = load %x_278
-    store %int_a, %81
-    %82:i32 = load %h_1
-    %83:i32 = load %h_1
-    %84:i32 = load %int_a
-    %85:i32 = clamp %82, %83, %84
-    store %clamp_a, %85
-    %86:i32 = load %top
-    %x_304:i32 = add %86, 1i
+    %87:i32 = load %x_278
+    store %int_a, %87
+    %88:i32 = load %h_1
+    %89:i32 = load %h_1
+    %90:i32 = load %int_a
+    %91:i32 = let %90
+    %92:i32 = max %88, %89
+    %93:i32 = min %92, %91
+    store %clamp_a, %93
+    %94:i32 = load %top
+    %95:i32 = add %94, 1i
+    %x_304:i32 = let %95
     store %top, %x_304
-    %88:ptr<function, i32, read_write> = access %stack, %x_304
-    %89:i32 = load %clamp_a
-    %90:i32 = div %89, 1i
-    store %88, %90
-    loop [b: %b14, c: %b15] {  # loop_2
-      %b14 = block {  # body
-        %91:i32 = load %top
-        %92:bool = gte %91, 0i
-        if %92 [t: %b16, f: %b17] {  # if_5
-          %b16 = block {  # true
+    %97:ptr<function, i32, read_write> = access %stack, %x_304
+    %98:i32 = load %clamp_a
+    %99:i32 = call %tint_div_i32, %98, 1i
+    store %97, %99
+    loop [b: $B14, c: $B15] {  # loop_2
+      $B14: {  # body
+        %101:i32 = load %top
+        %102:bool = gte %101, 0i
+        if %102 [t: $B16, f: $B17] {  # if_5
+          $B16: {  # true
             exit_if  # if_5
           }
-          %b17 = block {  # false
+          $B17: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_315:i32 = load %top
-        %94:i32 = load %top
-        %95:i32 = sub %94, 1i
-        store %top, %95
-        %96:ptr<function, i32, read_write> = access %stack, %x_315
-        %97:i32 = load %96
-        store %h_1, %97
-        %x_319:i32 = load %top
-        %99:i32 = load %top
-        %100:i32 = sub %99, 1i
-        store %top, %100
-        %101:ptr<function, i32, read_write> = access %stack, %x_319
-        %102:i32 = load %101
-        store %l_1, %102
-        %103:i32 = load %l_1
-        store %param_4, %103
-        %104:i32 = load %h_1
-        store %param_5, %104
-        %x_325:i32 = call %performPartition_i1_i1_, %param_4, %param_5
+        %103:i32 = load %top
+        %x_315:i32 = let %103
+        %105:i32 = load %top
+        %106:i32 = sub %105, 1i
+        store %top, %106
+        %107:ptr<function, i32, read_write> = access %stack, %x_315
+        %108:i32 = load %107
+        store %h_1, %108
+        %109:i32 = load %top
+        %x_319:i32 = let %109
+        %111:i32 = load %top
+        %112:i32 = sub %111, 1i
+        store %top, %112
+        %113:ptr<function, i32, read_write> = access %stack, %x_319
+        %114:i32 = load %113
+        store %l_1, %114
+        %115:i32 = load %l_1
+        store %param_4, %115
+        %116:i32 = load %h_1
+        store %param_5, %116
+        %117:i32 = call %performPartition_i1_i1_, %param_4, %param_5
+        %x_325:i32 = let %117
         store %p, %x_325
-        %106:i32 = load %p
-        %107:i32 = sub %106, 1i
-        %108:i32 = load %l_1
-        %109:bool = gt %107, %108
-        if %109 [t: %b18] {  # if_6
-          %b18 = block {  # true
-            %110:i32 = load %top
-            %x_333:i32 = add %110, 1i
+        %119:i32 = load %p
+        %120:i32 = sub %119, 1i
+        %121:i32 = load %l_1
+        %122:bool = gt %120, %121
+        if %122 [t: $B18] {  # if_6
+          $B18: {  # true
+            %123:i32 = load %top
+            %124:i32 = add %123, 1i
+            %x_333:i32 = let %124
             store %top, %x_333
-            %112:ptr<function, i32, read_write> = access %stack, %x_333
-            %113:i32 = load %l_1
-            store %112, %113
-            %114:i32 = load %top
-            %x_337:i32 = add %114, 1i
+            %126:ptr<function, i32, read_write> = access %stack, %x_333
+            %127:i32 = load %l_1
+            store %126, %127
+            %128:i32 = load %top
+            %129:i32 = add %128, 1i
+            %x_337:i32 = let %129
             store %top, %x_337
-            %116:ptr<function, i32, read_write> = access %stack, %x_337
-            %117:i32 = load %p
-            %118:i32 = sub %117, 1i
-            store %116, %118
+            %131:ptr<function, i32, read_write> = access %stack, %x_337
+            %132:i32 = load %p
+            %133:i32 = sub %132, 1i
+            store %131, %133
             exit_if  # if_6
           }
         }
-        %119:i32 = load %p
-        %120:i32 = add %119, 1i
-        %121:i32 = load %h_1
-        %122:bool = lt %120, %121
-        if %122 [t: %b19] {  # if_7
-          %b19 = block {  # true
-            %123:i32 = load %top
-            %x_348:i32 = add %123, 1i
+        %134:i32 = load %p
+        %135:i32 = add %134, 1i
+        %136:i32 = load %h_1
+        %137:bool = lt %135, %136
+        if %137 [t: $B19] {  # if_7
+          $B19: {  # true
+            %138:i32 = load %top
+            %139:i32 = add %138, 1i
+            %x_348:i32 = let %139
             store %top, %x_348
-            %125:ptr<function, i32, read_write> = access %stack, %x_348
-            %126:i32 = load %p
-            %127:i32 = add %126, 1i
-            store %125, %127
-            %128:i32 = load %top
-            %x_353:i32 = add %128, 1i
+            %141:ptr<function, i32, read_write> = access %stack, %x_348
+            %142:i32 = load %p
+            %143:i32 = add %142, 1i
+            store %141, %143
+            %144:i32 = load %top
+            %145:i32 = add %144, 1i
+            %x_353:i32 = let %145
             store %top, %x_353
-            %130:ptr<function, i32, read_write> = access %stack, %x_353
-            %131:i32 = load %h_1
-            store %130, %131
+            %147:ptr<function, i32, read_write> = access %stack, %x_353
+            %148:i32 = load %h_1
+            store %147, %148
             exit_if  # if_7
           }
         }
-        continue %b15
+        continue  # -> $B15
       }
-      %b15 = block {  # continuing
-        next_iteration %b14
+      $B15: {  # continuing
+        next_iteration  # -> $B14
       }
     }
     ret
   }
 }
-%main_1 = func():void -> %b20 {
-  %b20 = block {
+%main_1 = func():void {
+  $B20: {
     %i_2:ptr<function, i32, read_write> = var
     %uv:ptr<function, vec2<f32>, read_write> = var
     %color:ptr<function, vec3<f32>, read_write> = var
     store %i_2, 0i
-    loop [b: %b21, c: %b22] {  # loop_3
-      %b21 = block {  # body
-        %136:i32 = load %i_2
-        %137:bool = lt %136, 10i
-        if %137 [t: %b23, f: %b24] {  # if_8
-          %b23 = block {  # true
+    loop [b: $B21, c: $B22] {  # loop_3
+      $B21: {  # body
+        %153:i32 = load %i_2
+        %154:bool = lt %153, 10i
+        if %154 [t: $B23, f: $B24] {  # if_8
+          $B23: {  # true
             exit_if  # if_8
           }
-          %b24 = block {  # false
+          $B24: {  # false
             exit_loop  # loop_3
           }
         }
-        %x_93:i32 = load %i_2
-        %139:ptr<private, i32, read_write> = access %obj, 0u, %x_93
-        %140:i32 = load %i_2
-        %141:i32 = sub 10i, %140
-        store %139, %141
-        %x_97:i32 = load %i_2
-        %143:ptr<private, i32, read_write> = access %obj, 0u, %x_97
-        %144:i32 = load %i_2
-        %145:ptr<private, i32, read_write> = access %obj, 0u, %144
-        %146:i32 = load %145
-        %147:i32 = load %i_2
-        %148:ptr<private, i32, read_write> = access %obj, 0u, %147
-        %149:i32 = load %148
-        %150:i32 = mul %146, %149
-        store %143, %150
-        continue %b22
+        %155:i32 = load %i_2
+        %x_93:i32 = let %155
+        %157:ptr<private, i32, read_write> = access %obj, 0u, %x_93
+        %158:i32 = load %i_2
+        %159:i32 = sub 10i, %158
+        store %157, %159
+        %160:i32 = load %i_2
+        %x_97:i32 = let %160
+        %162:ptr<private, i32, read_write> = access %obj, 0u, %x_97
+        %163:i32 = load %i_2
+        %164:ptr<private, i32, read_write> = access %obj, 0u, %163
+        %165:i32 = load %164
+        %166:i32 = load %i_2
+        %167:ptr<private, i32, read_write> = access %obj, 0u, %166
+        %168:i32 = load %167
+        %169:i32 = mul %165, %168
+        store %162, %169
+        continue  # -> $B22
       }
-      %b22 = block {  # continuing
-        %151:i32 = load %i_2
-        %152:i32 = add %151, 1i
-        store %i_2, %152
-        next_iteration %b21
+      $B22: {  # continuing
+        %170:i32 = load %i_2
+        %171:i32 = add %170, 1i
+        store %i_2, %171
+        next_iteration  # -> $B21
       }
     }
-    %153:void = call %quicksort_
-    %154:vec4<f32> = load %gl_FragCoord
-    %155:vec2<f32> = swizzle %154, xy
-    %156:ptr<uniform, vec2<f32>, read> = access %x_34, 0u
-    %157:vec2<f32> = load %156
-    %158:vec2<f32> = div %155, %157
-    store %uv, %158
+    %172:void = call %quicksort_
+    %173:vec4<f32> = load %gl_FragCoord
+    %174:vec2<f32> = swizzle %173, xy
+    %175:ptr<uniform, vec2<f32>, read> = access %x_34, 0u
+    %176:vec2<f32> = load %175
+    %177:vec2<f32> = div %174, %176
+    store %uv, %177
     store %color, vec3<f32>(1.0f, 2.0f, 3.0f)
-    %159:f32 = load_vector_element %color, 0u
-    %160:ptr<private, i32, read_write> = access %obj, 0u, 0i
-    %161:i32 = load %160
-    %162:f32 = convert %161
-    %163:f32 = add %159, %162
-    store_vector_element %color, 0u, %163
-    %164:f32 = load_vector_element %uv, 0u
-    %165:bool = gt %164, 0.25f
-    if %165 [t: %b25] {  # if_9
-      %b25 = block {  # true
-        %166:f32 = load_vector_element %color, 0u
-        %167:ptr<private, i32, read_write> = access %obj, 0u, 1i
-        %168:i32 = load %167
-        %169:f32 = convert %168
-        %170:f32 = add %166, %169
-        store_vector_element %color, 0u, %170
+    %178:f32 = load_vector_element %color, 0u
+    %179:f32 = let %178
+    %180:ptr<private, i32, read_write> = access %obj, 0u, 0i
+    %181:i32 = load %180
+    %182:f32 = convert %181
+    %183:f32 = add %179, %182
+    store_vector_element %color, 0u, %183
+    %184:f32 = load_vector_element %uv, 0u
+    %185:bool = gt %184, 0.25f
+    if %185 [t: $B25] {  # if_9
+      $B25: {  # true
+        %186:f32 = load_vector_element %color, 0u
+        %187:f32 = let %186
+        %188:ptr<private, i32, read_write> = access %obj, 0u, 1i
+        %189:i32 = load %188
+        %190:f32 = convert %189
+        %191:f32 = add %187, %190
+        store_vector_element %color, 0u, %191
         exit_if  # if_9
       }
     }
-    %171:f32 = load_vector_element %uv, 0u
-    %172:bool = gt %171, 0.5f
-    if %172 [t: %b26] {  # if_10
-      %b26 = block {  # true
-        %173:f32 = load_vector_element %color, 1u
-        %174:ptr<private, i32, read_write> = access %obj, 0u, 2i
-        %175:i32 = load %174
-        %176:f32 = convert %175
-        %177:f32 = add %173, %176
-        store_vector_element %color, 1u, %177
+    %192:f32 = load_vector_element %uv, 0u
+    %193:bool = gt %192, 0.5f
+    if %193 [t: $B26] {  # if_10
+      $B26: {  # true
+        %194:f32 = load_vector_element %color, 1u
+        %195:f32 = let %194
+        %196:ptr<private, i32, read_write> = access %obj, 0u, 2i
+        %197:i32 = load %196
+        %198:f32 = convert %197
+        %199:f32 = add %195, %198
+        store_vector_element %color, 1u, %199
         exit_if  # if_10
       }
     }
-    %178:f32 = load_vector_element %uv, 0u
-    %179:bool = gt %178, 0.75f
-    if %179 [t: %b27] {  # if_11
-      %b27 = block {  # true
-        %180:f32 = load_vector_element %color, 2u
-        %181:ptr<private, i32, read_write> = access %obj, 0u, 3i
-        %182:i32 = load %181
-        %183:f32 = convert %182
-        %184:f32 = add %180, %183
-        store_vector_element %color, 2u, %184
+    %200:f32 = load_vector_element %uv, 0u
+    %201:bool = gt %200, 0.75f
+    if %201 [t: $B27] {  # if_11
+      $B27: {  # true
+        %202:f32 = load_vector_element %color, 2u
+        %203:f32 = let %202
+        %204:ptr<private, i32, read_write> = access %obj, 0u, 3i
+        %205:i32 = load %204
+        %206:f32 = convert %205
+        %207:f32 = add %203, %206
+        store_vector_element %color, 2u, %207
         exit_if  # if_11
       }
     }
-    %185:f32 = load_vector_element %color, 1u
-    %186:ptr<private, i32, read_write> = access %obj, 0u, 4i
-    %187:i32 = load %186
-    %188:f32 = convert %187
-    %189:f32 = add %185, %188
-    store_vector_element %color, 1u, %189
-    %190:f32 = load_vector_element %uv, 1u
-    %191:bool = gt %190, 0.25f
-    if %191 [t: %b28] {  # if_12
-      %b28 = block {  # true
-        %192:f32 = load_vector_element %color, 0u
-        %193:ptr<private, i32, read_write> = access %obj, 0u, 5i
-        %194:i32 = load %193
-        %195:f32 = convert %194
-        %196:f32 = add %192, %195
-        store_vector_element %color, 0u, %196
+    %208:f32 = load_vector_element %color, 1u
+    %209:f32 = let %208
+    %210:ptr<private, i32, read_write> = access %obj, 0u, 4i
+    %211:i32 = load %210
+    %212:f32 = convert %211
+    %213:f32 = add %209, %212
+    store_vector_element %color, 1u, %213
+    %214:f32 = load_vector_element %uv, 1u
+    %215:bool = gt %214, 0.25f
+    if %215 [t: $B28] {  # if_12
+      $B28: {  # true
+        %216:f32 = load_vector_element %color, 0u
+        %217:f32 = let %216
+        %218:ptr<private, i32, read_write> = access %obj, 0u, 5i
+        %219:i32 = load %218
+        %220:f32 = convert %219
+        %221:f32 = add %217, %220
+        store_vector_element %color, 0u, %221
         exit_if  # if_12
       }
     }
-    %197:f32 = load_vector_element %uv, 1u
-    %198:bool = gt %197, 0.5f
-    if %198 [t: %b29] {  # if_13
-      %b29 = block {  # true
-        %199:f32 = load_vector_element %color, 1u
-        %200:ptr<private, i32, read_write> = access %obj, 0u, 6i
-        %201:i32 = load %200
-        %202:f32 = convert %201
-        %203:f32 = add %199, %202
-        store_vector_element %color, 1u, %203
+    %222:f32 = load_vector_element %uv, 1u
+    %223:bool = gt %222, 0.5f
+    if %223 [t: $B29] {  # if_13
+      $B29: {  # true
+        %224:f32 = load_vector_element %color, 1u
+        %225:f32 = let %224
+        %226:ptr<private, i32, read_write> = access %obj, 0u, 6i
+        %227:i32 = load %226
+        %228:f32 = convert %227
+        %229:f32 = add %225, %228
+        store_vector_element %color, 1u, %229
         exit_if  # if_13
       }
     }
-    %204:f32 = load_vector_element %uv, 1u
-    %205:bool = gt %204, 0.75f
-    if %205 [t: %b30] {  # if_14
-      %b30 = block {  # true
-        %206:f32 = load_vector_element %color, 2u
-        %207:ptr<private, i32, read_write> = access %obj, 0u, 7i
-        %208:i32 = load %207
-        %209:f32 = convert %208
-        %210:f32 = add %206, %209
-        store_vector_element %color, 2u, %210
+    %230:f32 = load_vector_element %uv, 1u
+    %231:bool = gt %230, 0.75f
+    if %231 [t: $B30] {  # if_14
+      $B30: {  # true
+        %232:f32 = load_vector_element %color, 2u
+        %233:f32 = let %232
+        %234:ptr<private, i32, read_write> = access %obj, 0u, 7i
+        %235:i32 = load %234
+        %236:f32 = convert %235
+        %237:f32 = add %233, %236
+        store_vector_element %color, 2u, %237
         exit_if  # if_14
       }
     }
-    %211:f32 = load_vector_element %color, 2u
-    %212:ptr<private, i32, read_write> = access %obj, 0u, 8i
-    %213:i32 = load %212
-    %214:f32 = convert %213
-    %215:f32 = add %211, %214
-    store_vector_element %color, 2u, %215
-    %216:f32 = load_vector_element %uv, 0u
-    %217:f32 = load_vector_element %uv, 1u
-    %218:f32 = sub %216, %217
-    %219:f32 = abs %218
-    %220:bool = lt %219, 0.25f
-    if %220 [t: %b31] {  # if_15
-      %b31 = block {  # true
-        %221:f32 = load_vector_element %color, 0u
-        %222:ptr<private, i32, read_write> = access %obj, 0u, 9i
-        %223:i32 = load %222
-        %224:f32 = convert %223
-        %225:f32 = add %221, %224
-        store_vector_element %color, 0u, %225
+    %238:f32 = load_vector_element %color, 2u
+    %239:f32 = let %238
+    %240:ptr<private, i32, read_write> = access %obj, 0u, 8i
+    %241:i32 = load %240
+    %242:f32 = convert %241
+    %243:f32 = add %239, %242
+    store_vector_element %color, 2u, %243
+    %244:f32 = load_vector_element %uv, 0u
+    %245:f32 = load_vector_element %uv, 1u
+    %246:f32 = sub %244, %245
+    %247:f32 = abs %246
+    %248:bool = lt %247, 0.25f
+    if %248 [t: $B31] {  # if_15
+      $B31: {  # true
+        %249:f32 = load_vector_element %color, 0u
+        %250:f32 = let %249
+        %251:ptr<private, i32, read_write> = access %obj, 0u, 9i
+        %252:i32 = load %251
+        %253:f32 = convert %252
+        %254:f32 = add %250, %253
+        store_vector_element %color, 0u, %254
         exit_if  # if_15
       }
     }
-    %226:vec3<f32> = load %color
-    %x_224:vec3<f32> = normalize %226
-    %228:f32 = access %x_224, 0u
-    %229:f32 = access %x_224, 1u
-    %230:f32 = access %x_224, 2u
-    %231:vec4<f32> = construct %228, %229, %230, 1.0f
-    store %x_GLF_color, %231
+    %255:vec3<f32> = load %color
+    %256:vec3<f32> = normalize %255
+    %x_224:vec3<f32> = let %256
+    %258:f32 = access %x_224, 0u
+    %259:f32 = access %x_224, 1u
+    %260:f32 = access %x_224, 2u
+    %261:vec4<f32> = construct %258, %259, %260, 1.0f
+    store %x_GLF_color, %261
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b32 {
-  %b32 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B32: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %234:void = call %main_1
-    %235:vec4<f32> = load %x_GLF_color
-    %236:main_out = construct %235
-    ret %236
+    %264:void = call %main_1
+    %265:vec4<f32> = load %x_GLF_color
+    %266:main_out = construct %265
+    ret %266
+  }
+}
+%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B33: {
+    %269:bool = eq %rhs, 0i
+    %270:bool = eq %lhs, -2147483648i
+    %271:bool = eq %rhs, -1i
+    %272:bool = and %270, %271
+    %273:bool = or %269, %272
+    %274:i32 = select %rhs, 1i, %273
+    %275:i32 = div %lhs, %274
+    ret %275
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-quicksort-conditional-bitwise-or-clamp/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-quicksort-conditional-bitwise-or-clamp/1.wgsl.expected.ir.msl
index 3840d8a..04a9625 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-quicksort-conditional-bitwise-or-clamp/1.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/stable-quicksort-conditional-bitwise-or-clamp/1.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: QuicksortObject = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: QuicksortObject = struct @align(4) {
   numbers:array<i32, 10> @offset(0)
 }
 
@@ -12,35 +12,42 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %obj:ptr<private, QuicksortObject, read_write> = var
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_34:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%swap_i1_i1_ = func(%i:ptr<function, i32, read_write>, %j:ptr<function, i32, read_write>):void -> %b2 {
-  %b2 = block {
+%swap_i1_i1_ = func(%i:ptr<function, i32, read_write>, %j:ptr<function, i32, read_write>):void {
+  $B2: {
     %temp:ptr<function, i32, read_write> = var
-    %x_230:i32 = load %i
-    %10:ptr<private, i32, read_write> = access %obj, 0u, %x_230
-    %x_232:i32 = load %10
+    %9:i32 = load %i
+    %x_230:i32 = let %9
+    %11:ptr<private, i32, read_write> = access %obj, 0u, %x_230
+    %12:i32 = load %11
+    %x_232:i32 = let %12
     store %temp, %x_232
-    %x_233:i32 = load %i
-    %x_234:i32 = load %j
-    %14:ptr<private, i32, read_write> = access %obj, 0u, %x_234
-    %x_236:i32 = load %14
-    %16:ptr<private, i32, read_write> = access %obj, 0u, %x_233
-    store %16, %x_236
-    %x_238:i32 = load %j
-    %x_239:i32 = load %temp
-    %19:ptr<private, i32, read_write> = access %obj, 0u, %x_238
-    store %19, %x_239
+    %14:i32 = load %i
+    %x_233:i32 = let %14
+    %16:i32 = load %j
+    %x_234:i32 = let %16
+    %18:ptr<private, i32, read_write> = access %obj, 0u, %x_234
+    %19:i32 = load %18
+    %x_236:i32 = let %19
+    %21:ptr<private, i32, read_write> = access %obj, 0u, %x_233
+    store %21, %x_236
+    %22:i32 = load %j
+    %x_238:i32 = let %22
+    %24:i32 = load %temp
+    %x_239:i32 = let %24
+    %26:ptr<private, i32, read_write> = access %obj, 0u, %x_238
+    store %26, %x_239
     ret
   }
 }
-%performPartition_i1_i1_ = func(%l:ptr<function, i32, read_write>, %h:ptr<function, i32, read_write>):i32 -> %b3 {
-  %b3 = block {
+%performPartition_i1_i1_ = func(%l:ptr<function, i32, read_write>, %h:ptr<function, i32, read_write>):i32 {
+  $B3: {
     %pivot:ptr<function, i32, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
     %j_1:ptr<function, i32, read_write> = var
@@ -48,70 +55,87 @@
     %param_1:ptr<function, i32, read_write> = var
     %param_2:ptr<function, i32, read_write> = var
     %param_3:ptr<function, i32, read_write> = var
-    %x_242:i32 = load %h
-    %31:ptr<private, i32, read_write> = access %obj, 0u, %x_242
-    %x_244:i32 = load %31
+    %37:i32 = load %h
+    %x_242:i32 = let %37
+    %39:ptr<private, i32, read_write> = access %obj, 0u, %x_242
+    %40:i32 = load %39
+    %x_244:i32 = let %40
     store %pivot, %x_244
-    %x_245:i32 = load %l
-    %34:i32 = sub %x_245, 1i
-    store %i_1, %34
-    %x_247:i32 = load %l
+    %42:i32 = load %l
+    %x_245:i32 = let %42
+    %44:i32 = sub %x_245, 1i
+    store %i_1, %44
+    %45:i32 = load %l
+    %x_247:i32 = let %45
     store %j_1, %x_247
-    loop [b: %b4, c: %b5] {  # loop_1
-      %b4 = block {  # body
-        %x_252:i32 = load %j_1
-        %x_253:i32 = load %h
-        %38:i32 = sub %x_253, 1i
-        %39:bool = lte %x_252, %38
-        if %39 [t: %b6, f: %b7] {  # if_1
-          %b6 = block {  # true
+    loop [b: $B4, c: $B5] {  # loop_1
+      $B4: {  # body
+        %47:i32 = load %j_1
+        %x_252:i32 = let %47
+        %49:i32 = load %h
+        %x_253:i32 = let %49
+        %51:i32 = sub %x_253, 1i
+        %52:bool = lte %x_252, %51
+        if %52 [t: $B6, f: $B7] {  # if_1
+          $B6: {  # true
             exit_if  # if_1
           }
-          %b7 = block {  # false
+          $B7: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_257:i32 = load %j_1
-        %41:ptr<private, i32, read_write> = access %obj, 0u, %x_257
-        %x_259:i32 = load %41
-        %x_260:i32 = load %pivot
-        %44:bool = lte %x_259, %x_260
-        if %44 [t: %b8] {  # if_2
-          %b8 = block {  # true
-            %x_264:i32 = load %i_1
-            %46:i32 = add %x_264, 1i
-            store %i_1, %46
-            %x_266:i32 = load %i_1
+        %53:i32 = load %j_1
+        %x_257:i32 = let %53
+        %55:ptr<private, i32, read_write> = access %obj, 0u, %x_257
+        %56:i32 = load %55
+        %x_259:i32 = let %56
+        %58:i32 = load %pivot
+        %x_260:i32 = let %58
+        %60:bool = lte %x_259, %x_260
+        if %60 [t: $B8] {  # if_2
+          $B8: {  # true
+            %61:i32 = load %i_1
+            %x_264:i32 = let %61
+            %63:i32 = add %x_264, 1i
+            store %i_1, %63
+            %64:i32 = load %i_1
+            %x_266:i32 = let %64
             store %param, %x_266
-            %x_267:i32 = load %j_1
+            %66:i32 = load %j_1
+            %x_267:i32 = let %66
             store %param_1, %x_267
-            %49:void = call %swap_i1_i1_, %param, %param_1
+            %68:void = call %swap_i1_i1_, %param, %param_1
             exit_if  # if_2
           }
         }
-        continue %b5
+        continue  # -> $B5
       }
-      %b5 = block {  # continuing
-        %x_269:i32 = load %j_1
-        %51:i32 = add %x_269, 1i
-        store %j_1, %51
-        next_iteration %b4
+      $B5: {  # continuing
+        %69:i32 = load %j_1
+        %x_269:i32 = let %69
+        %71:i32 = add %x_269, 1i
+        store %j_1, %71
+        next_iteration  # -> $B4
       }
     }
-    %x_271:i32 = load %i_1
-    %53:i32 = add %x_271, 1i
-    store %i_1, %53
-    %x_273:i32 = load %i_1
+    %72:i32 = load %i_1
+    %x_271:i32 = let %72
+    %74:i32 = add %x_271, 1i
+    store %i_1, %74
+    %75:i32 = load %i_1
+    %x_273:i32 = let %75
     store %param_2, %x_273
-    %x_274:i32 = load %h
+    %77:i32 = load %h
+    %x_274:i32 = let %77
     store %param_3, %x_274
-    %56:void = call %swap_i1_i1_, %param_2, %param_3
-    %x_276:i32 = load %i_1
+    %79:void = call %swap_i1_i1_, %param_2, %param_3
+    %80:i32 = load %i_1
+    %x_276:i32 = let %80
     ret %x_276
   }
 }
-%quicksort_ = func():void -> %b9 {
-  %b9 = block {
+%quicksort_ = func():void {
+  $B9: {
     %l_1:ptr<function, i32, read_write> = var
     %h_1:ptr<function, i32, read_write> = var
     %top:ptr<function, i32, read_write> = var
@@ -126,317 +150,410 @@
     store %l_1, 0i
     store %h_1, 9i
     store %top, -1i
-    %x_280:i32 = load %top
-    %x_281:i32 = add %x_280, 1i
+    %94:i32 = load %top
+    %x_280:i32 = let %94
+    %96:i32 = add %x_280, 1i
+    %x_281:i32 = let %96
     store %top, %x_281
-    %x_282:i32 = load %l_1
-    %73:ptr<function, i32, read_write> = access %stack, %x_281
-    store %73, %x_282
-    %x_285:f32 = load_vector_element %gl_FragCoord, 1u
-    %75:bool = gte %x_285, 0.0f
-    if %75 [t: %b10, f: %b11] {  # if_3
-      %b10 = block {  # true
-        %x_290:i32 = load %h_1
-        if false [t: %b12, f: %b13] {  # if_4
-          %b12 = block {  # true
+    %98:i32 = load %l_1
+    %x_282:i32 = let %98
+    %100:ptr<function, i32, read_write> = access %stack, %x_281
+    store %100, %x_282
+    %101:f32 = load_vector_element %gl_FragCoord, 1u
+    %x_285:f32 = let %101
+    %103:bool = gte %x_285, 0.0f
+    if %103 [t: $B10, f: $B11] {  # if_3
+      $B10: {  # true
+        %104:i32 = load %h_1
+        %x_290:i32 = let %104
+        if false [t: $B12, f: $B13] {  # if_4
+          $B12: {  # true
             store %x_279, 1i
             exit_if  # if_4
           }
-          %b13 = block {  # false
-            %x_294:i32 = load %h_1
-            %78:i32 = shiftl %x_294, 0u
-            store %x_279, %78
+          $B13: {  # false
+            %106:i32 = load %h_1
+            %x_294:i32 = let %106
+            %108:u32 = and 0u, 31u
+            %109:i32 = shl %x_294, %108
+            store %x_279, %109
             exit_if  # if_4
           }
         }
-        %x_296:i32 = load %x_279
-        %80:i32 = or %x_290, %x_296
-        store %x_278, %80
+        %110:i32 = load %x_279
+        %x_296:i32 = let %110
+        %112:i32 = or %x_290, %x_296
+        store %x_278, %112
         exit_if  # if_3
       }
-      %b11 = block {  # false
+      $B11: {  # false
         store %x_278, 1i
         exit_if  # if_3
       }
     }
-    %x_298:i32 = load %x_278
+    %113:i32 = load %x_278
+    %x_298:i32 = let %113
     store %int_a, %x_298
-    %x_299:i32 = load %h_1
-    %x_300:i32 = load %h_1
-    %x_301:i32 = load %int_a
-    %85:i32 = clamp %x_299, %x_300, %x_301
-    store %clamp_a, %85
-    %x_303:i32 = load %top
-    %x_304:i32 = add %x_303, 1i
+    %115:i32 = load %h_1
+    %x_299:i32 = let %115
+    %117:i32 = load %h_1
+    %x_300:i32 = let %117
+    %119:i32 = load %int_a
+    %x_301:i32 = let %119
+    %121:i32 = max %x_299, %x_300
+    %122:i32 = min %121, %x_301
+    store %clamp_a, %122
+    %123:i32 = load %top
+    %x_303:i32 = let %123
+    %125:i32 = add %x_303, 1i
+    %x_304:i32 = let %125
     store %top, %x_304
-    %x_305:i32 = load %clamp_a
-    %89:ptr<function, i32, read_write> = access %stack, %x_304
-    %90:i32 = div %x_305, 1i
-    store %89, %90
-    loop [b: %b14, c: %b15] {  # loop_2
-      %b14 = block {  # body
-        %x_312:i32 = load %top
-        %92:bool = gte %x_312, 0i
-        if %92 [t: %b16, f: %b17] {  # if_5
-          %b16 = block {  # true
+    %127:i32 = load %clamp_a
+    %x_305:i32 = let %127
+    %129:ptr<function, i32, read_write> = access %stack, %x_304
+    %130:i32 = call %tint_div_i32, %x_305, 1i
+    store %129, %130
+    loop [b: $B14, c: $B15] {  # loop_2
+      $B14: {  # body
+        %132:i32 = load %top
+        %x_312:i32 = let %132
+        %134:bool = gte %x_312, 0i
+        if %134 [t: $B16, f: $B17] {  # if_5
+          $B16: {  # true
             exit_if  # if_5
           }
-          %b17 = block {  # false
+          $B17: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_315:i32 = load %top
-        %94:i32 = sub %x_315, 1i
-        store %top, %94
-        %95:ptr<function, i32, read_write> = access %stack, %x_315
-        %x_318:i32 = load %95
+        %135:i32 = load %top
+        %x_315:i32 = let %135
+        %137:i32 = sub %x_315, 1i
+        store %top, %137
+        %138:ptr<function, i32, read_write> = access %stack, %x_315
+        %139:i32 = load %138
+        %x_318:i32 = let %139
         store %h_1, %x_318
-        %x_319:i32 = load %top
-        %98:i32 = sub %x_319, 1i
-        store %top, %98
-        %99:ptr<function, i32, read_write> = access %stack, %x_319
-        %x_322:i32 = load %99
+        %141:i32 = load %top
+        %x_319:i32 = let %141
+        %143:i32 = sub %x_319, 1i
+        store %top, %143
+        %144:ptr<function, i32, read_write> = access %stack, %x_319
+        %145:i32 = load %144
+        %x_322:i32 = let %145
         store %l_1, %x_322
-        %x_323:i32 = load %l_1
+        %147:i32 = load %l_1
+        %x_323:i32 = let %147
         store %param_4, %x_323
-        %x_324:i32 = load %h_1
+        %149:i32 = load %h_1
+        %x_324:i32 = let %149
         store %param_5, %x_324
-        %x_325:i32 = call %performPartition_i1_i1_, %param_4, %param_5
+        %151:i32 = call %performPartition_i1_i1_, %param_4, %param_5
+        %x_325:i32 = let %151
         store %p, %x_325
-        %x_326:i32 = load %p
-        %x_328:i32 = load %l_1
-        %106:i32 = sub %x_326, 1i
-        %107:bool = gt %106, %x_328
-        if %107 [t: %b18] {  # if_6
-          %b18 = block {  # true
-            %x_332:i32 = load %top
-            %x_333:i32 = add %x_332, 1i
+        %153:i32 = load %p
+        %x_326:i32 = let %153
+        %155:i32 = load %l_1
+        %x_328:i32 = let %155
+        %157:i32 = sub %x_326, 1i
+        %158:bool = gt %157, %x_328
+        if %158 [t: $B18] {  # if_6
+          $B18: {  # true
+            %159:i32 = load %top
+            %x_332:i32 = let %159
+            %161:i32 = add %x_332, 1i
+            %x_333:i32 = let %161
             store %top, %x_333
-            %x_334:i32 = load %l_1
-            %111:ptr<function, i32, read_write> = access %stack, %x_333
-            store %111, %x_334
-            %x_336:i32 = load %top
-            %x_337:i32 = add %x_336, 1i
+            %163:i32 = load %l_1
+            %x_334:i32 = let %163
+            %165:ptr<function, i32, read_write> = access %stack, %x_333
+            store %165, %x_334
+            %166:i32 = load %top
+            %x_336:i32 = let %166
+            %168:i32 = add %x_336, 1i
+            %x_337:i32 = let %168
             store %top, %x_337
-            %x_338:i32 = load %p
-            %115:ptr<function, i32, read_write> = access %stack, %x_337
-            %116:i32 = sub %x_338, 1i
-            store %115, %116
+            %170:i32 = load %p
+            %x_338:i32 = let %170
+            %172:ptr<function, i32, read_write> = access %stack, %x_337
+            %173:i32 = sub %x_338, 1i
+            store %172, %173
             exit_if  # if_6
           }
         }
-        %x_341:i32 = load %p
-        %x_343:i32 = load %h_1
-        %119:i32 = add %x_341, 1i
-        %120:bool = lt %119, %x_343
-        if %120 [t: %b19] {  # if_7
-          %b19 = block {  # true
-            %x_347:i32 = load %top
-            %x_348:i32 = add %x_347, 1i
+        %174:i32 = load %p
+        %x_341:i32 = let %174
+        %176:i32 = load %h_1
+        %x_343:i32 = let %176
+        %178:i32 = add %x_341, 1i
+        %179:bool = lt %178, %x_343
+        if %179 [t: $B19] {  # if_7
+          $B19: {  # true
+            %180:i32 = load %top
+            %x_347:i32 = let %180
+            %182:i32 = add %x_347, 1i
+            %x_348:i32 = let %182
             store %top, %x_348
-            %x_349:i32 = load %p
-            %124:ptr<function, i32, read_write> = access %stack, %x_348
-            %125:i32 = add %x_349, 1i
-            store %124, %125
-            %x_352:i32 = load %top
-            %x_353:i32 = add %x_352, 1i
+            %184:i32 = load %p
+            %x_349:i32 = let %184
+            %186:ptr<function, i32, read_write> = access %stack, %x_348
+            %187:i32 = add %x_349, 1i
+            store %186, %187
+            %188:i32 = load %top
+            %x_352:i32 = let %188
+            %190:i32 = add %x_352, 1i
+            %x_353:i32 = let %190
             store %top, %x_353
-            %x_354:i32 = load %h_1
-            %129:ptr<function, i32, read_write> = access %stack, %x_353
-            store %129, %x_354
+            %192:i32 = load %h_1
+            %x_354:i32 = let %192
+            %194:ptr<function, i32, read_write> = access %stack, %x_353
+            store %194, %x_354
             exit_if  # if_7
           }
         }
-        continue %b15
+        continue  # -> $B15
       }
-      %b15 = block {  # continuing
-        next_iteration %b14
+      $B15: {  # continuing
+        next_iteration  # -> $B14
       }
     }
     ret
   }
 }
-%main_1 = func():void -> %b20 {
-  %b20 = block {
+%main_1 = func():void {
+  $B20: {
     %i_2:ptr<function, i32, read_write> = var
     %uv:ptr<function, vec2<f32>, read_write> = var
     %color:ptr<function, vec3<f32>, read_write> = var
     store %i_2, 0i
-    loop [b: %b21, c: %b22] {  # loop_3
-      %b21 = block {  # body
-        %x_90:i32 = load %i_2
-        %135:bool = lt %x_90, 10i
-        if %135 [t: %b23, f: %b24] {  # if_8
-          %b23 = block {  # true
+    loop [b: $B21, c: $B22] {  # loop_3
+      $B21: {  # body
+        %199:i32 = load %i_2
+        %x_90:i32 = let %199
+        %201:bool = lt %x_90, 10i
+        if %201 [t: $B23, f: $B24] {  # if_8
+          $B23: {  # true
             exit_if  # if_8
           }
-          %b24 = block {  # false
+          $B24: {  # false
             exit_loop  # loop_3
           }
         }
-        %x_93:i32 = load %i_2
-        %x_94:i32 = load %i_2
-        %138:ptr<private, i32, read_write> = access %obj, 0u, %x_93
-        %139:i32 = sub 10i, %x_94
-        store %138, %139
-        %x_97:i32 = load %i_2
-        %x_98:i32 = load %i_2
-        %142:ptr<private, i32, read_write> = access %obj, 0u, %x_98
-        %x_100:i32 = load %142
-        %x_101:i32 = load %i_2
-        %145:ptr<private, i32, read_write> = access %obj, 0u, %x_101
-        %x_103:i32 = load %145
-        %147:ptr<private, i32, read_write> = access %obj, 0u, %x_97
-        %148:i32 = mul %x_100, %x_103
-        store %147, %148
-        continue %b22
+        %202:i32 = load %i_2
+        %x_93:i32 = let %202
+        %204:i32 = load %i_2
+        %x_94:i32 = let %204
+        %206:ptr<private, i32, read_write> = access %obj, 0u, %x_93
+        %207:i32 = sub 10i, %x_94
+        store %206, %207
+        %208:i32 = load %i_2
+        %x_97:i32 = let %208
+        %210:i32 = load %i_2
+        %x_98:i32 = let %210
+        %212:ptr<private, i32, read_write> = access %obj, 0u, %x_98
+        %213:i32 = load %212
+        %x_100:i32 = let %213
+        %215:i32 = load %i_2
+        %x_101:i32 = let %215
+        %217:ptr<private, i32, read_write> = access %obj, 0u, %x_101
+        %218:i32 = load %217
+        %x_103:i32 = let %218
+        %220:ptr<private, i32, read_write> = access %obj, 0u, %x_97
+        %221:i32 = mul %x_100, %x_103
+        store %220, %221
+        continue  # -> $B22
       }
-      %b22 = block {  # continuing
-        %x_106:i32 = load %i_2
-        %150:i32 = add %x_106, 1i
-        store %i_2, %150
-        next_iteration %b21
+      $B22: {  # continuing
+        %222:i32 = load %i_2
+        %x_106:i32 = let %222
+        %224:i32 = add %x_106, 1i
+        store %i_2, %224
+        next_iteration  # -> $B21
       }
     }
-    %151:void = call %quicksort_
-    %x_109:vec4<f32> = load %gl_FragCoord
-    %153:ptr<uniform, vec2<f32>, read> = access %x_34, 0u
-    %x_112:vec2<f32> = load %153
-    %155:f32 = access %x_109, 0u
-    %156:f32 = access %x_109, 1u
-    %157:vec2<f32> = construct %155, %156
-    %158:vec2<f32> = div %157, %x_112
-    store %uv, %158
+    %225:void = call %quicksort_
+    %226:vec4<f32> = load %gl_FragCoord
+    %x_109:vec4<f32> = let %226
+    %228:ptr<uniform, vec2<f32>, read> = access %x_34, 0u
+    %229:vec2<f32> = load %228
+    %x_112:vec2<f32> = let %229
+    %231:f32 = access %x_109, 0u
+    %232:f32 = access %x_109, 1u
+    %233:vec2<f32> = construct %231, %232
+    %234:vec2<f32> = div %233, %x_112
+    store %uv, %234
     store %color, vec3<f32>(1.0f, 2.0f, 3.0f)
-    %159:ptr<private, i32, read_write> = access %obj, 0u, 0i
-    %x_115:i32 = load %159
-    %x_118:f32 = load_vector_element %color, 0u
-    %162:f32 = convert %x_115
-    %163:f32 = add %x_118, %162
-    store_vector_element %color, 0u, %163
-    %x_122:f32 = load_vector_element %uv, 0u
-    %165:bool = gt %x_122, 0.25f
-    if %165 [t: %b25] {  # if_9
-      %b25 = block {  # true
-        %166:ptr<private, i32, read_write> = access %obj, 0u, 1i
-        %x_127:i32 = load %166
-        %x_130:f32 = load_vector_element %color, 0u
-        %169:f32 = convert %x_127
-        %170:f32 = add %x_130, %169
-        store_vector_element %color, 0u, %170
+    %235:ptr<private, i32, read_write> = access %obj, 0u, 0i
+    %236:i32 = load %235
+    %x_115:i32 = let %236
+    %238:f32 = load_vector_element %color, 0u
+    %x_118:f32 = let %238
+    %240:f32 = convert %x_115
+    %241:f32 = add %x_118, %240
+    store_vector_element %color, 0u, %241
+    %242:f32 = load_vector_element %uv, 0u
+    %x_122:f32 = let %242
+    %244:bool = gt %x_122, 0.25f
+    if %244 [t: $B25] {  # if_9
+      $B25: {  # true
+        %245:ptr<private, i32, read_write> = access %obj, 0u, 1i
+        %246:i32 = load %245
+        %x_127:i32 = let %246
+        %248:f32 = load_vector_element %color, 0u
+        %x_130:f32 = let %248
+        %250:f32 = convert %x_127
+        %251:f32 = add %x_130, %250
+        store_vector_element %color, 0u, %251
         exit_if  # if_9
       }
     }
-    %x_134:f32 = load_vector_element %uv, 0u
-    %172:bool = gt %x_134, 0.5f
-    if %172 [t: %b26] {  # if_10
-      %b26 = block {  # true
-        %173:ptr<private, i32, read_write> = access %obj, 0u, 2i
-        %x_139:i32 = load %173
-        %x_142:f32 = load_vector_element %color, 1u
-        %176:f32 = convert %x_139
-        %177:f32 = add %x_142, %176
-        store_vector_element %color, 1u, %177
+    %252:f32 = load_vector_element %uv, 0u
+    %x_134:f32 = let %252
+    %254:bool = gt %x_134, 0.5f
+    if %254 [t: $B26] {  # if_10
+      $B26: {  # true
+        %255:ptr<private, i32, read_write> = access %obj, 0u, 2i
+        %256:i32 = load %255
+        %x_139:i32 = let %256
+        %258:f32 = load_vector_element %color, 1u
+        %x_142:f32 = let %258
+        %260:f32 = convert %x_139
+        %261:f32 = add %x_142, %260
+        store_vector_element %color, 1u, %261
         exit_if  # if_10
       }
     }
-    %x_146:f32 = load_vector_element %uv, 0u
-    %179:bool = gt %x_146, 0.75f
-    if %179 [t: %b27] {  # if_11
-      %b27 = block {  # true
-        %180:ptr<private, i32, read_write> = access %obj, 0u, 3i
-        %x_151:i32 = load %180
-        %x_154:f32 = load_vector_element %color, 2u
-        %183:f32 = convert %x_151
-        %184:f32 = add %x_154, %183
-        store_vector_element %color, 2u, %184
+    %262:f32 = load_vector_element %uv, 0u
+    %x_146:f32 = let %262
+    %264:bool = gt %x_146, 0.75f
+    if %264 [t: $B27] {  # if_11
+      $B27: {  # true
+        %265:ptr<private, i32, read_write> = access %obj, 0u, 3i
+        %266:i32 = load %265
+        %x_151:i32 = let %266
+        %268:f32 = load_vector_element %color, 2u
+        %x_154:f32 = let %268
+        %270:f32 = convert %x_151
+        %271:f32 = add %x_154, %270
+        store_vector_element %color, 2u, %271
         exit_if  # if_11
       }
     }
-    %185:ptr<private, i32, read_write> = access %obj, 0u, 4i
-    %x_158:i32 = load %185
-    %x_161:f32 = load_vector_element %color, 1u
-    %188:f32 = convert %x_158
-    %189:f32 = add %x_161, %188
-    store_vector_element %color, 1u, %189
-    %x_165:f32 = load_vector_element %uv, 1u
-    %191:bool = gt %x_165, 0.25f
-    if %191 [t: %b28] {  # if_12
-      %b28 = block {  # true
-        %192:ptr<private, i32, read_write> = access %obj, 0u, 5i
-        %x_170:i32 = load %192
-        %x_173:f32 = load_vector_element %color, 0u
-        %195:f32 = convert %x_170
-        %196:f32 = add %x_173, %195
-        store_vector_element %color, 0u, %196
+    %272:ptr<private, i32, read_write> = access %obj, 0u, 4i
+    %273:i32 = load %272
+    %x_158:i32 = let %273
+    %275:f32 = load_vector_element %color, 1u
+    %x_161:f32 = let %275
+    %277:f32 = convert %x_158
+    %278:f32 = add %x_161, %277
+    store_vector_element %color, 1u, %278
+    %279:f32 = load_vector_element %uv, 1u
+    %x_165:f32 = let %279
+    %281:bool = gt %x_165, 0.25f
+    if %281 [t: $B28] {  # if_12
+      $B28: {  # true
+        %282:ptr<private, i32, read_write> = access %obj, 0u, 5i
+        %283:i32 = load %282
+        %x_170:i32 = let %283
+        %285:f32 = load_vector_element %color, 0u
+        %x_173:f32 = let %285
+        %287:f32 = convert %x_170
+        %288:f32 = add %x_173, %287
+        store_vector_element %color, 0u, %288
         exit_if  # if_12
       }
     }
-    %x_177:f32 = load_vector_element %uv, 1u
-    %198:bool = gt %x_177, 0.5f
-    if %198 [t: %b29] {  # if_13
-      %b29 = block {  # true
-        %199:ptr<private, i32, read_write> = access %obj, 0u, 6i
-        %x_182:i32 = load %199
-        %x_185:f32 = load_vector_element %color, 1u
-        %202:f32 = convert %x_182
-        %203:f32 = add %x_185, %202
-        store_vector_element %color, 1u, %203
+    %289:f32 = load_vector_element %uv, 1u
+    %x_177:f32 = let %289
+    %291:bool = gt %x_177, 0.5f
+    if %291 [t: $B29] {  # if_13
+      $B29: {  # true
+        %292:ptr<private, i32, read_write> = access %obj, 0u, 6i
+        %293:i32 = load %292
+        %x_182:i32 = let %293
+        %295:f32 = load_vector_element %color, 1u
+        %x_185:f32 = let %295
+        %297:f32 = convert %x_182
+        %298:f32 = add %x_185, %297
+        store_vector_element %color, 1u, %298
         exit_if  # if_13
       }
     }
-    %x_189:f32 = load_vector_element %uv, 1u
-    %205:bool = gt %x_189, 0.75f
-    if %205 [t: %b30] {  # if_14
-      %b30 = block {  # true
-        %206:ptr<private, i32, read_write> = access %obj, 0u, 7i
-        %x_194:i32 = load %206
-        %x_197:f32 = load_vector_element %color, 2u
-        %209:f32 = convert %x_194
-        %210:f32 = add %x_197, %209
-        store_vector_element %color, 2u, %210
+    %299:f32 = load_vector_element %uv, 1u
+    %x_189:f32 = let %299
+    %301:bool = gt %x_189, 0.75f
+    if %301 [t: $B30] {  # if_14
+      $B30: {  # true
+        %302:ptr<private, i32, read_write> = access %obj, 0u, 7i
+        %303:i32 = load %302
+        %x_194:i32 = let %303
+        %305:f32 = load_vector_element %color, 2u
+        %x_197:f32 = let %305
+        %307:f32 = convert %x_194
+        %308:f32 = add %x_197, %307
+        store_vector_element %color, 2u, %308
         exit_if  # if_14
       }
     }
-    %211:ptr<private, i32, read_write> = access %obj, 0u, 8i
-    %x_201:i32 = load %211
-    %x_204:f32 = load_vector_element %color, 2u
-    %214:f32 = convert %x_201
-    %215:f32 = add %x_204, %214
-    store_vector_element %color, 2u, %215
-    %x_208:f32 = load_vector_element %uv, 0u
-    %x_210:f32 = load_vector_element %uv, 1u
-    %218:f32 = sub %x_208, %x_210
-    %219:f32 = abs %218
-    %220:bool = lt %219, 0.25f
-    if %220 [t: %b31] {  # if_15
-      %b31 = block {  # true
-        %221:ptr<private, i32, read_write> = access %obj, 0u, 9i
-        %x_217:i32 = load %221
-        %x_220:f32 = load_vector_element %color, 0u
-        %224:f32 = convert %x_217
-        %225:f32 = add %x_220, %224
-        store_vector_element %color, 0u, %225
+    %309:ptr<private, i32, read_write> = access %obj, 0u, 8i
+    %310:i32 = load %309
+    %x_201:i32 = let %310
+    %312:f32 = load_vector_element %color, 2u
+    %x_204:f32 = let %312
+    %314:f32 = convert %x_201
+    %315:f32 = add %x_204, %314
+    store_vector_element %color, 2u, %315
+    %316:f32 = load_vector_element %uv, 0u
+    %x_208:f32 = let %316
+    %318:f32 = load_vector_element %uv, 1u
+    %x_210:f32 = let %318
+    %320:f32 = sub %x_208, %x_210
+    %321:f32 = abs %320
+    %322:bool = lt %321, 0.25f
+    if %322 [t: $B31] {  # if_15
+      $B31: {  # true
+        %323:ptr<private, i32, read_write> = access %obj, 0u, 9i
+        %324:i32 = load %323
+        %x_217:i32 = let %324
+        %326:f32 = load_vector_element %color, 0u
+        %x_220:f32 = let %326
+        %328:f32 = convert %x_217
+        %329:f32 = add %x_220, %328
+        store_vector_element %color, 0u, %329
         exit_if  # if_15
       }
     }
-    %x_223:vec3<f32> = load %color
-    %x_224:vec3<f32> = normalize %x_223
-    %228:f32 = access %x_224, 0u
-    %229:f32 = access %x_224, 1u
-    %230:f32 = access %x_224, 2u
-    %231:vec4<f32> = construct %228, %229, %230, 1.0f
-    store %x_GLF_color, %231
+    %330:vec3<f32> = load %color
+    %x_223:vec3<f32> = let %330
+    %332:vec3<f32> = normalize %x_223
+    %x_224:vec3<f32> = let %332
+    %334:f32 = access %x_224, 0u
+    %335:f32 = access %x_224, 1u
+    %336:f32 = access %x_224, 2u
+    %337:vec4<f32> = construct %334, %335, %336, 1.0f
+    store %x_GLF_color, %337
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b32 {
-  %b32 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B32: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %234:void = call %main_1
-    %235:vec4<f32> = load %x_GLF_color
-    %236:main_out = construct %235
-    ret %236
+    %340:void = call %main_1
+    %341:vec4<f32> = load %x_GLF_color
+    %342:main_out = construct %341
+    ret %342
+  }
+}
+%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B33: {
+    %345:bool = eq %rhs, 0i
+    %346:bool = eq %lhs, -2147483648i
+    %347:bool = eq %rhs, -1i
+    %348:bool = and %346, %347
+    %349:bool = or %345, %348
+    %350:i32 = select %rhs, 1i, %349
+    %351:i32 = div %lhs, %350
+    ret %351
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/0-opt.spvasm.expected.ir.msl
index a29c353..734c88a 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: QuicksortObject = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: QuicksortObject = struct @align(4) {
   numbers:array<i32, 10> @offset(0)
 }
 
@@ -13,7 +13,7 @@
   gl_Position:vec4<f32> @offset(16), @builtin(position)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %obj:ptr<private, QuicksortObject, read_write> = var
   %x_GLF_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_pos:ptr<private, vec4<f32>, read_write> = var
@@ -22,28 +22,30 @@
   %gl_Position:ptr<private, vec4<f32>, read_write> = var
 }
 
-%swap_i1_i1_ = func(%i:ptr<function, i32, read_write>, %j:ptr<function, i32, read_write>):void -> %b2 {
-  %b2 = block {
+%swap_i1_i1_ = func(%i:ptr<function, i32, read_write>, %j:ptr<function, i32, read_write>):void {
+  $B2: {
     %temp:ptr<function, i32, read_write> = var
     %11:i32 = load %i
     %12:ptr<private, i32, read_write> = access %obj, 0u, %11
     %13:i32 = load %12
     store %temp, %13
-    %x_242:i32 = load %i
-    %15:ptr<private, i32, read_write> = access %obj, 0u, %x_242
-    %16:i32 = load %j
-    %17:ptr<private, i32, read_write> = access %obj, 0u, %16
-    %18:i32 = load %17
-    store %15, %18
-    %x_247:i32 = load %j
-    %20:ptr<private, i32, read_write> = access %obj, 0u, %x_247
-    %21:i32 = load %temp
-    store %20, %21
+    %14:i32 = load %i
+    %x_242:i32 = let %14
+    %16:ptr<private, i32, read_write> = access %obj, 0u, %x_242
+    %17:i32 = load %j
+    %18:ptr<private, i32, read_write> = access %obj, 0u, %17
+    %19:i32 = load %18
+    store %16, %19
+    %20:i32 = load %j
+    %x_247:i32 = let %20
+    %22:ptr<private, i32, read_write> = access %obj, 0u, %x_247
+    %23:i32 = load %temp
+    store %22, %23
     ret
   }
 }
-%performPartition_i1_i1_ = func(%l:ptr<function, i32, read_write>, %h:ptr<function, i32, read_write>):i32 -> %b3 {
-  %b3 = block {
+%performPartition_i1_i1_ = func(%l:ptr<function, i32, read_write>, %h:ptr<function, i32, read_write>):i32 {
+  $B3: {
     %pivot:ptr<function, i32, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
     %j_1:ptr<function, i32, read_write> = var
@@ -51,69 +53,70 @@
     %param_1:ptr<function, i32, read_write> = var
     %param_2:ptr<function, i32, read_write> = var
     %param_3:ptr<function, i32, read_write> = var
-    %32:i32 = load %h
-    %33:ptr<private, i32, read_write> = access %obj, 0u, %32
-    %34:i32 = load %33
-    store %pivot, %34
-    %35:i32 = load %l
-    %36:i32 = sub %35, 1i
-    store %i_1, %36
+    %34:i32 = load %h
+    %35:ptr<private, i32, read_write> = access %obj, 0u, %34
+    %36:i32 = load %35
+    store %pivot, %36
     %37:i32 = load %l
-    store %j_1, %37
-    loop [b: %b4, c: %b5] {  # loop_1
-      %b4 = block {  # body
-        %38:i32 = load %j_1
-        %39:i32 = load %h
-        %40:i32 = sub %39, 1i
-        %41:bool = lte %38, %40
-        if %41 [t: %b6, f: %b7] {  # if_1
-          %b6 = block {  # true
+    %38:i32 = sub %37, 1i
+    store %i_1, %38
+    %39:i32 = load %l
+    store %j_1, %39
+    loop [b: $B4, c: $B5] {  # loop_1
+      $B4: {  # body
+        %40:i32 = load %j_1
+        %41:i32 = load %h
+        %42:i32 = sub %41, 1i
+        %43:bool = lte %40, %42
+        if %43 [t: $B6, f: $B7] {  # if_1
+          $B6: {  # true
             exit_if  # if_1
           }
-          %b7 = block {  # false
+          $B7: {  # false
             exit_loop  # loop_1
           }
         }
-        %42:i32 = load %j_1
-        %43:ptr<private, i32, read_write> = access %obj, 0u, %42
-        %44:i32 = load %43
-        %45:i32 = load %pivot
-        %46:bool = lte %44, %45
-        if %46 [t: %b8] {  # if_2
-          %b8 = block {  # true
-            %47:i32 = load %i_1
-            %48:i32 = add %47, 1i
-            store %i_1, %48
+        %44:i32 = load %j_1
+        %45:ptr<private, i32, read_write> = access %obj, 0u, %44
+        %46:i32 = load %45
+        %47:i32 = load %pivot
+        %48:bool = lte %46, %47
+        if %48 [t: $B8] {  # if_2
+          $B8: {  # true
             %49:i32 = load %i_1
-            store %param, %49
-            %50:i32 = load %j_1
-            store %param_1, %50
-            %51:void = call %swap_i1_i1_, %param, %param_1
+            %50:i32 = add %49, 1i
+            store %i_1, %50
+            %51:i32 = load %i_1
+            store %param, %51
+            %52:i32 = load %j_1
+            store %param_1, %52
+            %53:void = call %swap_i1_i1_, %param, %param_1
             exit_if  # if_2
           }
         }
-        continue %b5
+        continue  # -> $B5
       }
-      %b5 = block {  # continuing
-        %52:i32 = load %j_1
-        %53:i32 = add %52, 1i
-        store %j_1, %53
-        next_iteration %b4
+      $B5: {  # continuing
+        %54:i32 = load %j_1
+        %55:i32 = add %54, 1i
+        store %j_1, %55
+        next_iteration  # -> $B4
       }
     }
-    %54:i32 = load %i_1
-    %55:i32 = add %54, 1i
-    store %param_2, %55
-    %56:i32 = load %h
-    store %param_3, %56
-    %57:void = call %swap_i1_i1_, %param_2, %param_3
-    %x_284:i32 = load %i_1
-    %59:i32 = add %x_284, 1i
-    ret %59
+    %56:i32 = load %i_1
+    %57:i32 = add %56, 1i
+    store %param_2, %57
+    %58:i32 = load %h
+    store %param_3, %58
+    %59:void = call %swap_i1_i1_, %param_2, %param_3
+    %60:i32 = load %i_1
+    %x_284:i32 = let %60
+    %62:i32 = add %x_284, 1i
+    ret %62
   }
 }
-%quicksort_ = func():void -> %b9 {
-  %b9 = block {
+%quicksort_ = func():void {
+  $B9: {
     %l_1:ptr<function, i32, read_write> = var
     %h_1:ptr<function, i32, read_write> = var
     %top:ptr<function, i32, read_write> = var
@@ -124,289 +127,311 @@
     store %l_1, 0i
     store %h_1, 9i
     store %top, -1i
-    %68:i32 = load %top
-    %x_288:i32 = add %68, 1i
+    %71:i32 = load %top
+    %72:i32 = add %71, 1i
+    %x_288:i32 = let %72
     store %top, %x_288
-    %70:ptr<function, i32, read_write> = access %stack, %x_288
-    %71:i32 = load %l_1
-    store %70, %71
-    %72:i32 = load %top
-    %x_292:i32 = add %72, 1i
-    store %top, %x_292
-    %74:ptr<function, i32, read_write> = access %stack, %x_292
-    %75:i32 = load %h_1
+    %74:ptr<function, i32, read_write> = access %stack, %x_288
+    %75:i32 = load %l_1
     store %74, %75
-    loop [b: %b10, c: %b11] {  # loop_2
-      %b10 = block {  # body
-        %76:i32 = load %top
-        %77:bool = gte %76, 0i
-        if %77 [t: %b12, f: %b13] {  # if_3
-          %b12 = block {  # true
+    %76:i32 = load %top
+    %77:i32 = add %76, 1i
+    %x_292:i32 = let %77
+    store %top, %x_292
+    %79:ptr<function, i32, read_write> = access %stack, %x_292
+    %80:i32 = load %h_1
+    store %79, %80
+    loop [b: $B10, c: $B11] {  # loop_2
+      $B10: {  # body
+        %81:i32 = load %top
+        %82:bool = gte %81, 0i
+        if %82 [t: $B12, f: $B13] {  # if_3
+          $B12: {  # true
             exit_if  # if_3
           }
-          %b13 = block {  # false
+          $B13: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_302:i32 = load %top
-        %79:i32 = load %top
-        %80:i32 = sub %79, 1i
-        store %top, %80
-        %81:ptr<function, i32, read_write> = access %stack, %x_302
-        %82:i32 = load %81
-        store %h_1, %82
-        %x_306:i32 = load %top
-        %84:i32 = load %top
-        %85:i32 = sub %84, 1i
-        store %top, %85
-        %86:ptr<function, i32, read_write> = access %stack, %x_306
-        %87:i32 = load %86
-        store %l_1, %87
-        %88:i32 = load %l_1
-        store %param_4, %88
-        %89:i32 = load %h_1
-        store %param_5, %89
-        %x_312:i32 = call %performPartition_i1_i1_, %param_4, %param_5
-        store %p, %x_312
-        %91:i32 = load %p
+        %83:i32 = load %top
+        %x_302:i32 = let %83
+        %85:i32 = load %top
+        %86:i32 = sub %85, 1i
+        store %top, %86
+        %87:ptr<function, i32, read_write> = access %stack, %x_302
+        %88:i32 = load %87
+        store %h_1, %88
+        %89:i32 = load %top
+        %x_306:i32 = let %89
+        %91:i32 = load %top
         %92:i32 = sub %91, 1i
-        %93:i32 = load %l_1
-        %94:bool = gt %92, %93
-        if %94 [t: %b14] {  # if_4
-          %b14 = block {  # true
-            %95:i32 = load %top
-            %x_320:i32 = add %95, 1i
+        store %top, %92
+        %93:ptr<function, i32, read_write> = access %stack, %x_306
+        %94:i32 = load %93
+        store %l_1, %94
+        %95:i32 = load %l_1
+        store %param_4, %95
+        %96:i32 = load %h_1
+        store %param_5, %96
+        %97:i32 = call %performPartition_i1_i1_, %param_4, %param_5
+        %x_312:i32 = let %97
+        store %p, %x_312
+        %99:i32 = load %p
+        %100:i32 = sub %99, 1i
+        %101:i32 = load %l_1
+        %102:bool = gt %100, %101
+        if %102 [t: $B14] {  # if_4
+          $B14: {  # true
+            %103:i32 = load %top
+            %104:i32 = add %103, 1i
+            %x_320:i32 = let %104
             store %top, %x_320
-            %97:ptr<function, i32, read_write> = access %stack, %x_320
-            %98:i32 = load %l_1
-            store %97, %98
-            %99:i32 = load %top
-            %x_324:i32 = add %99, 1i
+            %106:ptr<function, i32, read_write> = access %stack, %x_320
+            %107:i32 = load %l_1
+            store %106, %107
+            %108:i32 = load %top
+            %109:i32 = add %108, 1i
+            %x_324:i32 = let %109
             store %top, %x_324
-            %101:ptr<function, i32, read_write> = access %stack, %x_324
-            %102:i32 = load %p
-            %103:i32 = sub %102, 1i
-            store %101, %103
+            %111:ptr<function, i32, read_write> = access %stack, %x_324
+            %112:i32 = load %p
+            %113:i32 = sub %112, 1i
+            store %111, %113
             exit_if  # if_4
           }
         }
-        %104:i32 = load %p
-        %105:i32 = add %104, 1i
-        %106:i32 = load %h_1
-        %107:bool = lt %105, %106
-        if %107 [t: %b15] {  # if_5
-          %b15 = block {  # true
-            %108:i32 = load %top
-            %x_335:i32 = add %108, 1i
+        %114:i32 = load %p
+        %115:i32 = add %114, 1i
+        %116:i32 = load %h_1
+        %117:bool = lt %115, %116
+        if %117 [t: $B15] {  # if_5
+          $B15: {  # true
+            %118:i32 = load %top
+            %119:i32 = add %118, 1i
+            %x_335:i32 = let %119
             store %top, %x_335
-            %110:ptr<function, i32, read_write> = access %stack, %x_335
-            %111:i32 = load %p
-            %112:i32 = add %111, 1i
-            store %110, %112
-            %113:i32 = load %top
-            %x_340:i32 = add %113, 1i
+            %121:ptr<function, i32, read_write> = access %stack, %x_335
+            %122:i32 = load %p
+            %123:i32 = add %122, 1i
+            store %121, %123
+            %124:i32 = load %top
+            %125:i32 = add %124, 1i
+            %x_340:i32 = let %125
             store %top, %x_340
-            %115:ptr<function, i32, read_write> = access %stack, %x_340
-            %116:i32 = load %h_1
-            store %115, %116
+            %127:ptr<function, i32, read_write> = access %stack, %x_340
+            %128:i32 = load %h_1
+            store %127, %128
             exit_if  # if_5
           }
         }
-        continue %b11
+        continue  # -> $B11
       }
-      %b11 = block {  # continuing
-        next_iteration %b10
+      $B11: {  # continuing
+        next_iteration  # -> $B10
       }
     }
     ret
   }
 }
-%main_1 = func():void -> %b16 {
-  %b16 = block {
+%main_1 = func():void {
+  $B16: {
     %i_2:ptr<function, i32, read_write> = var
     %uv:ptr<function, vec2<f32>, read_write> = var
     %color:ptr<function, vec3<f32>, read_write> = var
-    %121:vec4<f32> = load %x_GLF_pos
-    %122:vec4<f32> = add %121, vec4<f32>(1.0f, 1.0f, 0.0f, 0.0f)
-    %123:vec4<f32> = mul %122, vec4<f32>(128.0f, 128.0f, 1.0f, 1.0f)
-    store %x_GLF_FragCoord, %123
+    %133:vec4<f32> = load %x_GLF_pos
+    %134:vec4<f32> = add %133, vec4<f32>(1.0f, 1.0f, 0.0f, 0.0f)
+    %135:vec4<f32> = mul %134, vec4<f32>(128.0f, 128.0f, 1.0f, 1.0f)
+    store %x_GLF_FragCoord, %135
     store %i_2, 0i
-    loop [b: %b17, c: %b18] {  # loop_3
-      %b17 = block {  # body
-        %124:i32 = load %i_2
-        %125:bool = lt %124, 10i
-        if %125 [t: %b19, f: %b20] {  # if_6
-          %b19 = block {  # true
+    loop [b: $B17, c: $B18] {  # loop_3
+      $B17: {  # body
+        %136:i32 = load %i_2
+        %137:bool = lt %136, 10i
+        if %137 [t: $B19, f: $B20] {  # if_6
+          $B19: {  # true
             exit_if  # if_6
           }
-          %b20 = block {  # false
+          $B20: {  # false
             exit_loop  # loop_3
           }
         }
-        %x_100:i32 = load %i_2
-        %127:ptr<private, i32, read_write> = access %obj, 0u, %x_100
-        %128:i32 = load %i_2
-        %129:i32 = sub 10i, %128
-        store %127, %129
-        %x_104:i32 = load %i_2
-        %131:ptr<private, i32, read_write> = access %obj, 0u, %x_104
-        %132:i32 = load %i_2
-        %133:ptr<private, i32, read_write> = access %obj, 0u, %132
-        %134:i32 = load %133
-        %135:i32 = load %i_2
-        %136:ptr<private, i32, read_write> = access %obj, 0u, %135
-        %137:i32 = load %136
-        %138:i32 = mul %134, %137
-        store %131, %138
-        continue %b18
+        %138:i32 = load %i_2
+        %x_100:i32 = let %138
+        %140:ptr<private, i32, read_write> = access %obj, 0u, %x_100
+        %141:i32 = load %i_2
+        %142:i32 = sub 10i, %141
+        store %140, %142
+        %143:i32 = load %i_2
+        %x_104:i32 = let %143
+        %145:ptr<private, i32, read_write> = access %obj, 0u, %x_104
+        %146:i32 = load %i_2
+        %147:ptr<private, i32, read_write> = access %obj, 0u, %146
+        %148:i32 = load %147
+        %149:i32 = load %i_2
+        %150:ptr<private, i32, read_write> = access %obj, 0u, %149
+        %151:i32 = load %150
+        %152:i32 = mul %148, %151
+        store %145, %152
+        continue  # -> $B18
       }
-      %b18 = block {  # continuing
-        %139:i32 = load %i_2
-        %140:i32 = add %139, 1i
-        store %i_2, %140
-        next_iteration %b17
+      $B18: {  # continuing
+        %153:i32 = load %i_2
+        %154:i32 = add %153, 1i
+        store %i_2, %154
+        next_iteration  # -> $B17
       }
     }
-    %141:void = call %quicksort_
-    %142:vec4<f32> = load %x_GLF_FragCoord
-    %143:vec2<f32> = swizzle %142, xy
-    %144:ptr<uniform, vec2<f32>, read> = access %x_34, 0u
-    %145:vec2<f32> = load %144
-    %146:vec2<f32> = div %143, %145
-    store %uv, %146
+    %155:void = call %quicksort_
+    %156:vec4<f32> = load %x_GLF_FragCoord
+    %157:vec2<f32> = swizzle %156, xy
+    %158:ptr<uniform, vec2<f32>, read> = access %x_34, 0u
+    %159:vec2<f32> = load %158
+    %160:vec2<f32> = div %157, %159
+    store %uv, %160
     store %color, vec3<f32>(1.0f, 2.0f, 3.0f)
-    %147:f32 = load_vector_element %color, 0u
-    %148:ptr<private, i32, read_write> = access %obj, 0u, 0i
-    %149:i32 = load %148
-    %150:f32 = convert %149
-    %151:f32 = add %147, %150
-    store_vector_element %color, 0u, %151
-    %152:f32 = load_vector_element %uv, 0u
-    %153:bool = gt %152, 0.25f
-    if %153 [t: %b21] {  # if_7
-      %b21 = block {  # true
-        %154:f32 = load_vector_element %color, 0u
-        %155:ptr<private, i32, read_write> = access %obj, 0u, 1i
-        %156:i32 = load %155
-        %157:f32 = convert %156
-        %158:f32 = add %154, %157
-        store_vector_element %color, 0u, %158
+    %161:f32 = load_vector_element %color, 0u
+    %162:f32 = let %161
+    %163:ptr<private, i32, read_write> = access %obj, 0u, 0i
+    %164:i32 = load %163
+    %165:f32 = convert %164
+    %166:f32 = add %162, %165
+    store_vector_element %color, 0u, %166
+    %167:f32 = load_vector_element %uv, 0u
+    %168:bool = gt %167, 0.25f
+    if %168 [t: $B21] {  # if_7
+      $B21: {  # true
+        %169:f32 = load_vector_element %color, 0u
+        %170:f32 = let %169
+        %171:ptr<private, i32, read_write> = access %obj, 0u, 1i
+        %172:i32 = load %171
+        %173:f32 = convert %172
+        %174:f32 = add %170, %173
+        store_vector_element %color, 0u, %174
         exit_if  # if_7
       }
     }
-    %159:f32 = load_vector_element %uv, 0u
-    %160:bool = gt %159, 0.5f
-    if %160 [t: %b22] {  # if_8
-      %b22 = block {  # true
-        %161:f32 = load_vector_element %color, 1u
-        %162:ptr<private, i32, read_write> = access %obj, 0u, 2i
-        %163:i32 = load %162
-        %164:f32 = convert %163
-        %165:f32 = add %161, %164
-        store_vector_element %color, 1u, %165
+    %175:f32 = load_vector_element %uv, 0u
+    %176:bool = gt %175, 0.5f
+    if %176 [t: $B22] {  # if_8
+      $B22: {  # true
+        %177:f32 = load_vector_element %color, 1u
+        %178:f32 = let %177
+        %179:ptr<private, i32, read_write> = access %obj, 0u, 2i
+        %180:i32 = load %179
+        %181:f32 = convert %180
+        %182:f32 = add %178, %181
+        store_vector_element %color, 1u, %182
         exit_if  # if_8
       }
     }
-    %166:f32 = load_vector_element %uv, 0u
-    %167:bool = gt %166, 0.75f
-    if %167 [t: %b23] {  # if_9
-      %b23 = block {  # true
-        %168:f32 = load_vector_element %color, 2u
-        %169:ptr<private, i32, read_write> = access %obj, 0u, 3i
-        %170:i32 = load %169
-        %171:f32 = convert %170
-        %172:f32 = add %168, %171
-        store_vector_element %color, 2u, %172
+    %183:f32 = load_vector_element %uv, 0u
+    %184:bool = gt %183, 0.75f
+    if %184 [t: $B23] {  # if_9
+      $B23: {  # true
+        %185:f32 = load_vector_element %color, 2u
+        %186:f32 = let %185
+        %187:ptr<private, i32, read_write> = access %obj, 0u, 3i
+        %188:i32 = load %187
+        %189:f32 = convert %188
+        %190:f32 = add %186, %189
+        store_vector_element %color, 2u, %190
         exit_if  # if_9
       }
     }
-    %173:f32 = load_vector_element %color, 1u
-    %174:ptr<private, i32, read_write> = access %obj, 0u, 4i
-    %175:i32 = load %174
-    %176:f32 = convert %175
-    %177:f32 = add %173, %176
-    store_vector_element %color, 1u, %177
-    %178:f32 = load_vector_element %uv, 1u
-    %179:bool = gt %178, 0.25f
-    if %179 [t: %b24] {  # if_10
-      %b24 = block {  # true
-        %180:f32 = load_vector_element %color, 0u
-        %181:ptr<private, i32, read_write> = access %obj, 0u, 5i
-        %182:i32 = load %181
-        %183:f32 = convert %182
-        %184:f32 = add %180, %183
-        store_vector_element %color, 0u, %184
+    %191:f32 = load_vector_element %color, 1u
+    %192:f32 = let %191
+    %193:ptr<private, i32, read_write> = access %obj, 0u, 4i
+    %194:i32 = load %193
+    %195:f32 = convert %194
+    %196:f32 = add %192, %195
+    store_vector_element %color, 1u, %196
+    %197:f32 = load_vector_element %uv, 1u
+    %198:bool = gt %197, 0.25f
+    if %198 [t: $B24] {  # if_10
+      $B24: {  # true
+        %199:f32 = load_vector_element %color, 0u
+        %200:f32 = let %199
+        %201:ptr<private, i32, read_write> = access %obj, 0u, 5i
+        %202:i32 = load %201
+        %203:f32 = convert %202
+        %204:f32 = add %200, %203
+        store_vector_element %color, 0u, %204
         exit_if  # if_10
       }
     }
-    %185:f32 = load_vector_element %uv, 1u
-    %186:bool = gt %185, 0.5f
-    if %186 [t: %b25] {  # if_11
-      %b25 = block {  # true
-        %187:f32 = load_vector_element %color, 1u
-        %188:ptr<private, i32, read_write> = access %obj, 0u, 6i
-        %189:i32 = load %188
-        %190:f32 = convert %189
-        %191:f32 = add %187, %190
-        store_vector_element %color, 1u, %191
+    %205:f32 = load_vector_element %uv, 1u
+    %206:bool = gt %205, 0.5f
+    if %206 [t: $B25] {  # if_11
+      $B25: {  # true
+        %207:f32 = load_vector_element %color, 1u
+        %208:f32 = let %207
+        %209:ptr<private, i32, read_write> = access %obj, 0u, 6i
+        %210:i32 = load %209
+        %211:f32 = convert %210
+        %212:f32 = add %208, %211
+        store_vector_element %color, 1u, %212
         exit_if  # if_11
       }
     }
-    %192:f32 = load_vector_element %uv, 1u
-    %193:bool = gt %192, 0.75f
-    if %193 [t: %b26] {  # if_12
-      %b26 = block {  # true
-        %194:f32 = load_vector_element %color, 2u
-        %195:ptr<private, i32, read_write> = access %obj, 0u, 7i
-        %196:i32 = load %195
-        %197:f32 = convert %196
-        %198:f32 = add %194, %197
-        store_vector_element %color, 2u, %198
+    %213:f32 = load_vector_element %uv, 1u
+    %214:bool = gt %213, 0.75f
+    if %214 [t: $B26] {  # if_12
+      $B26: {  # true
+        %215:f32 = load_vector_element %color, 2u
+        %216:f32 = let %215
+        %217:ptr<private, i32, read_write> = access %obj, 0u, 7i
+        %218:i32 = load %217
+        %219:f32 = convert %218
+        %220:f32 = add %216, %219
+        store_vector_element %color, 2u, %220
         exit_if  # if_12
       }
     }
-    %199:f32 = load_vector_element %color, 2u
-    %200:ptr<private, i32, read_write> = access %obj, 0u, 8i
-    %201:i32 = load %200
-    %202:f32 = convert %201
-    %203:f32 = add %199, %202
-    store_vector_element %color, 2u, %203
-    %204:f32 = load_vector_element %uv, 0u
-    %205:f32 = load_vector_element %uv, 1u
-    %206:f32 = sub %204, %205
-    %207:f32 = abs %206
-    %208:bool = lt %207, 0.25f
-    if %208 [t: %b27] {  # if_13
-      %b27 = block {  # true
-        %209:f32 = load_vector_element %color, 0u
-        %210:ptr<private, i32, read_write> = access %obj, 0u, 9i
-        %211:i32 = load %210
-        %212:f32 = convert %211
-        %213:f32 = add %209, %212
-        store_vector_element %color, 0u, %213
+    %221:f32 = load_vector_element %color, 2u
+    %222:f32 = let %221
+    %223:ptr<private, i32, read_write> = access %obj, 0u, 8i
+    %224:i32 = load %223
+    %225:f32 = convert %224
+    %226:f32 = add %222, %225
+    store_vector_element %color, 2u, %226
+    %227:f32 = load_vector_element %uv, 0u
+    %228:f32 = load_vector_element %uv, 1u
+    %229:f32 = sub %227, %228
+    %230:f32 = abs %229
+    %231:bool = lt %230, 0.25f
+    if %231 [t: $B27] {  # if_13
+      $B27: {  # true
+        %232:f32 = load_vector_element %color, 0u
+        %233:f32 = let %232
+        %234:ptr<private, i32, read_write> = access %obj, 0u, 9i
+        %235:i32 = load %234
+        %236:f32 = convert %235
+        %237:f32 = add %233, %236
+        store_vector_element %color, 0u, %237
         exit_if  # if_13
       }
     }
-    %214:vec3<f32> = load %color
-    %x_231:vec3<f32> = normalize %214
-    %216:f32 = access %x_231, 0u
-    %217:f32 = access %x_231, 1u
-    %218:f32 = access %x_231, 2u
-    %219:vec4<f32> = construct %216, %217, %218, 1.0f
-    store %frag_color, %219
-    %220:vec4<f32> = load %x_GLF_pos
-    store %gl_Position, %220
+    %238:vec3<f32> = load %color
+    %239:vec3<f32> = normalize %238
+    %x_231:vec3<f32> = let %239
+    %241:f32 = access %x_231, 0u
+    %242:f32 = access %x_231, 1u
+    %243:f32 = access %x_231, 2u
+    %244:vec4<f32> = construct %241, %242, %243, 1.0f
+    store %frag_color, %244
+    %245:vec4<f32> = load %x_GLF_pos
+    store %gl_Position, %245
     ret
   }
 }
-%tint_symbol = @vertex func(%x_GLF_pos_param:vec4<f32> [@location(0)]):main_out -> %b28 {
-  %b28 = block {
+%tint_symbol = @vertex func(%x_GLF_pos_param:vec4<f32> [@location(0)]):main_out {
+  $B28: {
     store %x_GLF_pos, %x_GLF_pos_param
-    %223:void = call %main_1
-    %224:vec4<f32> = load %frag_color
-    %225:vec4<f32> = load %gl_Position
-    %226:main_out = construct %224, %225
-    ret %226
+    %248:void = call %main_1
+    %249:vec4<f32> = load %frag_color
+    %250:vec4<f32> = load %gl_Position
+    %251:main_out = construct %249, %250
+    ret %251
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/0-opt.wgsl.expected.ir.msl
index 56c0a11..8111d47 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: QuicksortObject = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: QuicksortObject = struct @align(4) {
   numbers:array<i32, 10> @offset(0)
 }
 
@@ -13,7 +13,7 @@
   gl_Position:vec4<f32> @offset(16), @builtin(position)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %obj:ptr<private, QuicksortObject, read_write> = var
   %x_GLF_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_pos:ptr<private, vec4<f32>, read_write> = var
@@ -22,28 +22,35 @@
   %gl_Position:ptr<private, vec4<f32>, read_write> = var
 }
 
-%swap_i1_i1_ = func(%i:ptr<function, i32, read_write>, %j:ptr<function, i32, read_write>):void -> %b2 {
-  %b2 = block {
+%swap_i1_i1_ = func(%i:ptr<function, i32, read_write>, %j:ptr<function, i32, read_write>):void {
+  $B2: {
     %temp:ptr<function, i32, read_write> = var
-    %x_239:i32 = load %i
-    %12:ptr<private, i32, read_write> = access %obj, 0u, %x_239
-    %x_241:i32 = load %12
+    %11:i32 = load %i
+    %x_239:i32 = let %11
+    %13:ptr<private, i32, read_write> = access %obj, 0u, %x_239
+    %14:i32 = load %13
+    %x_241:i32 = let %14
     store %temp, %x_241
-    %x_242:i32 = load %i
-    %x_243:i32 = load %j
-    %16:ptr<private, i32, read_write> = access %obj, 0u, %x_243
-    %x_245:i32 = load %16
-    %18:ptr<private, i32, read_write> = access %obj, 0u, %x_242
-    store %18, %x_245
-    %x_247:i32 = load %j
-    %x_248:i32 = load %temp
-    %21:ptr<private, i32, read_write> = access %obj, 0u, %x_247
-    store %21, %x_248
+    %16:i32 = load %i
+    %x_242:i32 = let %16
+    %18:i32 = load %j
+    %x_243:i32 = let %18
+    %20:ptr<private, i32, read_write> = access %obj, 0u, %x_243
+    %21:i32 = load %20
+    %x_245:i32 = let %21
+    %23:ptr<private, i32, read_write> = access %obj, 0u, %x_242
+    store %23, %x_245
+    %24:i32 = load %j
+    %x_247:i32 = let %24
+    %26:i32 = load %temp
+    %x_248:i32 = let %26
+    %28:ptr<private, i32, read_write> = access %obj, 0u, %x_247
+    store %28, %x_248
     ret
   }
 }
-%performPartition_i1_i1_ = func(%l:ptr<function, i32, read_write>, %h:ptr<function, i32, read_write>):i32 -> %b3 {
-  %b3 = block {
+%performPartition_i1_i1_ = func(%l:ptr<function, i32, read_write>, %h:ptr<function, i32, read_write>):i32 {
+  $B3: {
     %pivot:ptr<function, i32, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
     %j_1:ptr<function, i32, read_write> = var
@@ -51,69 +58,85 @@
     %param_1:ptr<function, i32, read_write> = var
     %param_2:ptr<function, i32, read_write> = var
     %param_3:ptr<function, i32, read_write> = var
-    %x_251:i32 = load %h
-    %33:ptr<private, i32, read_write> = access %obj, 0u, %x_251
-    %x_253:i32 = load %33
+    %39:i32 = load %h
+    %x_251:i32 = let %39
+    %41:ptr<private, i32, read_write> = access %obj, 0u, %x_251
+    %42:i32 = load %41
+    %x_253:i32 = let %42
     store %pivot, %x_253
-    %x_254:i32 = load %l
-    %36:i32 = sub %x_254, 1i
-    store %i_1, %36
-    %x_256:i32 = load %l
+    %44:i32 = load %l
+    %x_254:i32 = let %44
+    %46:i32 = sub %x_254, 1i
+    store %i_1, %46
+    %47:i32 = load %l
+    %x_256:i32 = let %47
     store %j_1, %x_256
-    loop [b: %b4, c: %b5] {  # loop_1
-      %b4 = block {  # body
-        %x_261:i32 = load %j_1
-        %x_262:i32 = load %h
-        %40:i32 = sub %x_262, 1i
-        %41:bool = lte %x_261, %40
-        if %41 [t: %b6, f: %b7] {  # if_1
-          %b6 = block {  # true
+    loop [b: $B4, c: $B5] {  # loop_1
+      $B4: {  # body
+        %49:i32 = load %j_1
+        %x_261:i32 = let %49
+        %51:i32 = load %h
+        %x_262:i32 = let %51
+        %53:i32 = sub %x_262, 1i
+        %54:bool = lte %x_261, %53
+        if %54 [t: $B6, f: $B7] {  # if_1
+          $B6: {  # true
             exit_if  # if_1
           }
-          %b7 = block {  # false
+          $B7: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_266:i32 = load %j_1
-        %43:ptr<private, i32, read_write> = access %obj, 0u, %x_266
-        %x_268:i32 = load %43
-        %x_269:i32 = load %pivot
-        %46:bool = lte %x_268, %x_269
-        if %46 [t: %b8] {  # if_2
-          %b8 = block {  # true
-            %x_273:i32 = load %i_1
-            %48:i32 = add %x_273, 1i
-            store %i_1, %48
-            %x_275:i32 = load %i_1
+        %55:i32 = load %j_1
+        %x_266:i32 = let %55
+        %57:ptr<private, i32, read_write> = access %obj, 0u, %x_266
+        %58:i32 = load %57
+        %x_268:i32 = let %58
+        %60:i32 = load %pivot
+        %x_269:i32 = let %60
+        %62:bool = lte %x_268, %x_269
+        if %62 [t: $B8] {  # if_2
+          $B8: {  # true
+            %63:i32 = load %i_1
+            %x_273:i32 = let %63
+            %65:i32 = add %x_273, 1i
+            store %i_1, %65
+            %66:i32 = load %i_1
+            %x_275:i32 = let %66
             store %param, %x_275
-            %x_276:i32 = load %j_1
+            %68:i32 = load %j_1
+            %x_276:i32 = let %68
             store %param_1, %x_276
-            %51:void = call %swap_i1_i1_, %param, %param_1
+            %70:void = call %swap_i1_i1_, %param, %param_1
             exit_if  # if_2
           }
         }
-        continue %b5
+        continue  # -> $B5
       }
-      %b5 = block {  # continuing
-        %x_278:i32 = load %j_1
-        %53:i32 = add %x_278, 1i
-        store %j_1, %53
-        next_iteration %b4
+      $B5: {  # continuing
+        %71:i32 = load %j_1
+        %x_278:i32 = let %71
+        %73:i32 = add %x_278, 1i
+        store %j_1, %73
+        next_iteration  # -> $B4
       }
     }
-    %x_280:i32 = load %i_1
-    %55:i32 = add %x_280, 1i
-    store %param_2, %55
-    %x_282:i32 = load %h
+    %74:i32 = load %i_1
+    %x_280:i32 = let %74
+    %76:i32 = add %x_280, 1i
+    store %param_2, %76
+    %77:i32 = load %h
+    %x_282:i32 = let %77
     store %param_3, %x_282
-    %57:void = call %swap_i1_i1_, %param_2, %param_3
-    %x_284:i32 = load %i_1
-    %59:i32 = add %x_284, 1i
-    ret %59
+    %79:void = call %swap_i1_i1_, %param_2, %param_3
+    %80:i32 = load %i_1
+    %x_284:i32 = let %80
+    %82:i32 = add %x_284, 1i
+    ret %82
   }
 }
-%quicksort_ = func():void -> %b9 {
-  %b9 = block {
+%quicksort_ = func():void {
+  $B9: {
     %l_1:ptr<function, i32, read_write> = var
     %h_1:ptr<function, i32, read_write> = var
     %top:ptr<function, i32, read_write> = var
@@ -124,289 +147,362 @@
     store %l_1, 0i
     store %h_1, 9i
     store %top, -1i
-    %x_287:i32 = load %top
-    %x_288:i32 = add %x_287, 1i
+    %91:i32 = load %top
+    %x_287:i32 = let %91
+    %93:i32 = add %x_287, 1i
+    %x_288:i32 = let %93
     store %top, %x_288
-    %x_289:i32 = load %l_1
-    %71:ptr<function, i32, read_write> = access %stack, %x_288
-    store %71, %x_289
-    %x_291:i32 = load %top
-    %x_292:i32 = add %x_291, 1i
+    %95:i32 = load %l_1
+    %x_289:i32 = let %95
+    %97:ptr<function, i32, read_write> = access %stack, %x_288
+    store %97, %x_289
+    %98:i32 = load %top
+    %x_291:i32 = let %98
+    %100:i32 = add %x_291, 1i
+    %x_292:i32 = let %100
     store %top, %x_292
-    %x_293:i32 = load %h_1
-    %75:ptr<function, i32, read_write> = access %stack, %x_292
-    store %75, %x_293
-    loop [b: %b10, c: %b11] {  # loop_2
-      %b10 = block {  # body
-        %x_299:i32 = load %top
-        %77:bool = gte %x_299, 0i
-        if %77 [t: %b12, f: %b13] {  # if_3
-          %b12 = block {  # true
+    %102:i32 = load %h_1
+    %x_293:i32 = let %102
+    %104:ptr<function, i32, read_write> = access %stack, %x_292
+    store %104, %x_293
+    loop [b: $B10, c: $B11] {  # loop_2
+      $B10: {  # body
+        %105:i32 = load %top
+        %x_299:i32 = let %105
+        %107:bool = gte %x_299, 0i
+        if %107 [t: $B12, f: $B13] {  # if_3
+          $B12: {  # true
             exit_if  # if_3
           }
-          %b13 = block {  # false
+          $B13: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_302:i32 = load %top
-        %79:i32 = sub %x_302, 1i
-        store %top, %79
-        %80:ptr<function, i32, read_write> = access %stack, %x_302
-        %x_305:i32 = load %80
+        %108:i32 = load %top
+        %x_302:i32 = let %108
+        %110:i32 = sub %x_302, 1i
+        store %top, %110
+        %111:ptr<function, i32, read_write> = access %stack, %x_302
+        %112:i32 = load %111
+        %x_305:i32 = let %112
         store %h_1, %x_305
-        %x_306:i32 = load %top
-        %83:i32 = sub %x_306, 1i
-        store %top, %83
-        %84:ptr<function, i32, read_write> = access %stack, %x_306
-        %x_309:i32 = load %84
+        %114:i32 = load %top
+        %x_306:i32 = let %114
+        %116:i32 = sub %x_306, 1i
+        store %top, %116
+        %117:ptr<function, i32, read_write> = access %stack, %x_306
+        %118:i32 = load %117
+        %x_309:i32 = let %118
         store %l_1, %x_309
-        %x_310:i32 = load %l_1
+        %120:i32 = load %l_1
+        %x_310:i32 = let %120
         store %param_4, %x_310
-        %x_311:i32 = load %h_1
+        %122:i32 = load %h_1
+        %x_311:i32 = let %122
         store %param_5, %x_311
-        %x_312:i32 = call %performPartition_i1_i1_, %param_4, %param_5
+        %124:i32 = call %performPartition_i1_i1_, %param_4, %param_5
+        %x_312:i32 = let %124
         store %p, %x_312
-        %x_313:i32 = load %p
-        %x_315:i32 = load %l_1
-        %91:i32 = sub %x_313, 1i
-        %92:bool = gt %91, %x_315
-        if %92 [t: %b14] {  # if_4
-          %b14 = block {  # true
-            %x_319:i32 = load %top
-            %x_320:i32 = add %x_319, 1i
+        %126:i32 = load %p
+        %x_313:i32 = let %126
+        %128:i32 = load %l_1
+        %x_315:i32 = let %128
+        %130:i32 = sub %x_313, 1i
+        %131:bool = gt %130, %x_315
+        if %131 [t: $B14] {  # if_4
+          $B14: {  # true
+            %132:i32 = load %top
+            %x_319:i32 = let %132
+            %134:i32 = add %x_319, 1i
+            %x_320:i32 = let %134
             store %top, %x_320
-            %x_321:i32 = load %l_1
-            %96:ptr<function, i32, read_write> = access %stack, %x_320
-            store %96, %x_321
-            %x_323:i32 = load %top
-            %x_324:i32 = add %x_323, 1i
+            %136:i32 = load %l_1
+            %x_321:i32 = let %136
+            %138:ptr<function, i32, read_write> = access %stack, %x_320
+            store %138, %x_321
+            %139:i32 = load %top
+            %x_323:i32 = let %139
+            %141:i32 = add %x_323, 1i
+            %x_324:i32 = let %141
             store %top, %x_324
-            %x_325:i32 = load %p
-            %100:ptr<function, i32, read_write> = access %stack, %x_324
-            %101:i32 = sub %x_325, 1i
-            store %100, %101
+            %143:i32 = load %p
+            %x_325:i32 = let %143
+            %145:ptr<function, i32, read_write> = access %stack, %x_324
+            %146:i32 = sub %x_325, 1i
+            store %145, %146
             exit_if  # if_4
           }
         }
-        %x_328:i32 = load %p
-        %x_330:i32 = load %h_1
-        %104:i32 = add %x_328, 1i
-        %105:bool = lt %104, %x_330
-        if %105 [t: %b15] {  # if_5
-          %b15 = block {  # true
-            %x_334:i32 = load %top
-            %x_335:i32 = add %x_334, 1i
+        %147:i32 = load %p
+        %x_328:i32 = let %147
+        %149:i32 = load %h_1
+        %x_330:i32 = let %149
+        %151:i32 = add %x_328, 1i
+        %152:bool = lt %151, %x_330
+        if %152 [t: $B15] {  # if_5
+          $B15: {  # true
+            %153:i32 = load %top
+            %x_334:i32 = let %153
+            %155:i32 = add %x_334, 1i
+            %x_335:i32 = let %155
             store %top, %x_335
-            %x_336:i32 = load %p
-            %109:ptr<function, i32, read_write> = access %stack, %x_335
-            %110:i32 = add %x_336, 1i
-            store %109, %110
-            %x_339:i32 = load %top
-            %x_340:i32 = add %x_339, 1i
+            %157:i32 = load %p
+            %x_336:i32 = let %157
+            %159:ptr<function, i32, read_write> = access %stack, %x_335
+            %160:i32 = add %x_336, 1i
+            store %159, %160
+            %161:i32 = load %top
+            %x_339:i32 = let %161
+            %163:i32 = add %x_339, 1i
+            %x_340:i32 = let %163
             store %top, %x_340
-            %x_341:i32 = load %h_1
-            %114:ptr<function, i32, read_write> = access %stack, %x_340
-            store %114, %x_341
+            %165:i32 = load %h_1
+            %x_341:i32 = let %165
+            %167:ptr<function, i32, read_write> = access %stack, %x_340
+            store %167, %x_341
             exit_if  # if_5
           }
         }
-        continue %b11
+        continue  # -> $B11
       }
-      %b11 = block {  # continuing
-        next_iteration %b10
+      $B11: {  # continuing
+        next_iteration  # -> $B10
       }
     }
     ret
   }
 }
-%main_1 = func():void -> %b16 {
-  %b16 = block {
+%main_1 = func():void {
+  $B16: {
     %i_2:ptr<function, i32, read_write> = var
     %uv:ptr<function, vec2<f32>, read_write> = var
     %color:ptr<function, vec3<f32>, read_write> = var
-    %x_90:vec4<f32> = load %x_GLF_pos
-    %120:vec4<f32> = add %x_90, vec4<f32>(1.0f, 1.0f, 0.0f, 0.0f)
-    %121:vec4<f32> = mul %120, vec4<f32>(128.0f, 128.0f, 1.0f, 1.0f)
-    store %x_GLF_FragCoord, %121
+    %172:vec4<f32> = load %x_GLF_pos
+    %x_90:vec4<f32> = let %172
+    %174:vec4<f32> = add %x_90, vec4<f32>(1.0f, 1.0f, 0.0f, 0.0f)
+    %175:vec4<f32> = mul %174, vec4<f32>(128.0f, 128.0f, 1.0f, 1.0f)
+    store %x_GLF_FragCoord, %175
     store %i_2, 0i
-    loop [b: %b17, c: %b18] {  # loop_3
-      %b17 = block {  # body
-        %x_97:i32 = load %i_2
-        %123:bool = lt %x_97, 10i
-        if %123 [t: %b19, f: %b20] {  # if_6
-          %b19 = block {  # true
+    loop [b: $B17, c: $B18] {  # loop_3
+      $B17: {  # body
+        %176:i32 = load %i_2
+        %x_97:i32 = let %176
+        %178:bool = lt %x_97, 10i
+        if %178 [t: $B19, f: $B20] {  # if_6
+          $B19: {  # true
             exit_if  # if_6
           }
-          %b20 = block {  # false
+          $B20: {  # false
             exit_loop  # loop_3
           }
         }
-        %x_100:i32 = load %i_2
-        %x_101:i32 = load %i_2
-        %126:ptr<private, i32, read_write> = access %obj, 0u, %x_100
-        %127:i32 = sub 10i, %x_101
-        store %126, %127
-        %x_104:i32 = load %i_2
-        %x_105:i32 = load %i_2
-        %130:ptr<private, i32, read_write> = access %obj, 0u, %x_105
-        %x_107:i32 = load %130
-        %x_108:i32 = load %i_2
-        %133:ptr<private, i32, read_write> = access %obj, 0u, %x_108
-        %x_110:i32 = load %133
-        %135:ptr<private, i32, read_write> = access %obj, 0u, %x_104
-        %136:i32 = mul %x_107, %x_110
-        store %135, %136
-        continue %b18
+        %179:i32 = load %i_2
+        %x_100:i32 = let %179
+        %181:i32 = load %i_2
+        %x_101:i32 = let %181
+        %183:ptr<private, i32, read_write> = access %obj, 0u, %x_100
+        %184:i32 = sub 10i, %x_101
+        store %183, %184
+        %185:i32 = load %i_2
+        %x_104:i32 = let %185
+        %187:i32 = load %i_2
+        %x_105:i32 = let %187
+        %189:ptr<private, i32, read_write> = access %obj, 0u, %x_105
+        %190:i32 = load %189
+        %x_107:i32 = let %190
+        %192:i32 = load %i_2
+        %x_108:i32 = let %192
+        %194:ptr<private, i32, read_write> = access %obj, 0u, %x_108
+        %195:i32 = load %194
+        %x_110:i32 = let %195
+        %197:ptr<private, i32, read_write> = access %obj, 0u, %x_104
+        %198:i32 = mul %x_107, %x_110
+        store %197, %198
+        continue  # -> $B18
       }
-      %b18 = block {  # continuing
-        %x_113:i32 = load %i_2
-        %138:i32 = add %x_113, 1i
-        store %i_2, %138
-        next_iteration %b17
+      $B18: {  # continuing
+        %199:i32 = load %i_2
+        %x_113:i32 = let %199
+        %201:i32 = add %x_113, 1i
+        store %i_2, %201
+        next_iteration  # -> $B17
       }
     }
-    %139:void = call %quicksort_
-    %x_116:vec4<f32> = load %x_GLF_FragCoord
-    %141:ptr<uniform, vec2<f32>, read> = access %x_34, 0u
-    %x_119:vec2<f32> = load %141
-    %143:f32 = access %x_116, 0u
-    %144:f32 = access %x_116, 1u
-    %145:vec2<f32> = construct %143, %144
-    %146:vec2<f32> = div %145, %x_119
-    store %uv, %146
+    %202:void = call %quicksort_
+    %203:vec4<f32> = load %x_GLF_FragCoord
+    %x_116:vec4<f32> = let %203
+    %205:ptr<uniform, vec2<f32>, read> = access %x_34, 0u
+    %206:vec2<f32> = load %205
+    %x_119:vec2<f32> = let %206
+    %208:f32 = access %x_116, 0u
+    %209:f32 = access %x_116, 1u
+    %210:vec2<f32> = construct %208, %209
+    %211:vec2<f32> = div %210, %x_119
+    store %uv, %211
     store %color, vec3<f32>(1.0f, 2.0f, 3.0f)
-    %147:ptr<private, i32, read_write> = access %obj, 0u, 0i
-    %x_122:i32 = load %147
-    %x_125:f32 = load_vector_element %color, 0u
-    %150:f32 = convert %x_122
-    %151:f32 = add %x_125, %150
-    store_vector_element %color, 0u, %151
-    %x_129:f32 = load_vector_element %uv, 0u
-    %153:bool = gt %x_129, 0.25f
-    if %153 [t: %b21] {  # if_7
-      %b21 = block {  # true
-        %154:ptr<private, i32, read_write> = access %obj, 0u, 1i
-        %x_134:i32 = load %154
-        %x_137:f32 = load_vector_element %color, 0u
-        %157:f32 = convert %x_134
-        %158:f32 = add %x_137, %157
-        store_vector_element %color, 0u, %158
+    %212:ptr<private, i32, read_write> = access %obj, 0u, 0i
+    %213:i32 = load %212
+    %x_122:i32 = let %213
+    %215:f32 = load_vector_element %color, 0u
+    %x_125:f32 = let %215
+    %217:f32 = convert %x_122
+    %218:f32 = add %x_125, %217
+    store_vector_element %color, 0u, %218
+    %219:f32 = load_vector_element %uv, 0u
+    %x_129:f32 = let %219
+    %221:bool = gt %x_129, 0.25f
+    if %221 [t: $B21] {  # if_7
+      $B21: {  # true
+        %222:ptr<private, i32, read_write> = access %obj, 0u, 1i
+        %223:i32 = load %222
+        %x_134:i32 = let %223
+        %225:f32 = load_vector_element %color, 0u
+        %x_137:f32 = let %225
+        %227:f32 = convert %x_134
+        %228:f32 = add %x_137, %227
+        store_vector_element %color, 0u, %228
         exit_if  # if_7
       }
     }
-    %x_141:f32 = load_vector_element %uv, 0u
-    %160:bool = gt %x_141, 0.5f
-    if %160 [t: %b22] {  # if_8
-      %b22 = block {  # true
-        %161:ptr<private, i32, read_write> = access %obj, 0u, 2i
-        %x_146:i32 = load %161
-        %x_149:f32 = load_vector_element %color, 1u
-        %164:f32 = convert %x_146
-        %165:f32 = add %x_149, %164
-        store_vector_element %color, 1u, %165
+    %229:f32 = load_vector_element %uv, 0u
+    %x_141:f32 = let %229
+    %231:bool = gt %x_141, 0.5f
+    if %231 [t: $B22] {  # if_8
+      $B22: {  # true
+        %232:ptr<private, i32, read_write> = access %obj, 0u, 2i
+        %233:i32 = load %232
+        %x_146:i32 = let %233
+        %235:f32 = load_vector_element %color, 1u
+        %x_149:f32 = let %235
+        %237:f32 = convert %x_146
+        %238:f32 = add %x_149, %237
+        store_vector_element %color, 1u, %238
         exit_if  # if_8
       }
     }
-    %x_153:f32 = load_vector_element %uv, 0u
-    %167:bool = gt %x_153, 0.75f
-    if %167 [t: %b23] {  # if_9
-      %b23 = block {  # true
-        %168:ptr<private, i32, read_write> = access %obj, 0u, 3i
-        %x_158:i32 = load %168
-        %x_161:f32 = load_vector_element %color, 2u
-        %171:f32 = convert %x_158
-        %172:f32 = add %x_161, %171
-        store_vector_element %color, 2u, %172
+    %239:f32 = load_vector_element %uv, 0u
+    %x_153:f32 = let %239
+    %241:bool = gt %x_153, 0.75f
+    if %241 [t: $B23] {  # if_9
+      $B23: {  # true
+        %242:ptr<private, i32, read_write> = access %obj, 0u, 3i
+        %243:i32 = load %242
+        %x_158:i32 = let %243
+        %245:f32 = load_vector_element %color, 2u
+        %x_161:f32 = let %245
+        %247:f32 = convert %x_158
+        %248:f32 = add %x_161, %247
+        store_vector_element %color, 2u, %248
         exit_if  # if_9
       }
     }
-    %173:ptr<private, i32, read_write> = access %obj, 0u, 4i
-    %x_165:i32 = load %173
-    %x_168:f32 = load_vector_element %color, 1u
-    %176:f32 = convert %x_165
-    %177:f32 = add %x_168, %176
-    store_vector_element %color, 1u, %177
-    %x_172:f32 = load_vector_element %uv, 1u
-    %179:bool = gt %x_172, 0.25f
-    if %179 [t: %b24] {  # if_10
-      %b24 = block {  # true
-        %180:ptr<private, i32, read_write> = access %obj, 0u, 5i
-        %x_177:i32 = load %180
-        %x_180:f32 = load_vector_element %color, 0u
-        %183:f32 = convert %x_177
-        %184:f32 = add %x_180, %183
-        store_vector_element %color, 0u, %184
+    %249:ptr<private, i32, read_write> = access %obj, 0u, 4i
+    %250:i32 = load %249
+    %x_165:i32 = let %250
+    %252:f32 = load_vector_element %color, 1u
+    %x_168:f32 = let %252
+    %254:f32 = convert %x_165
+    %255:f32 = add %x_168, %254
+    store_vector_element %color, 1u, %255
+    %256:f32 = load_vector_element %uv, 1u
+    %x_172:f32 = let %256
+    %258:bool = gt %x_172, 0.25f
+    if %258 [t: $B24] {  # if_10
+      $B24: {  # true
+        %259:ptr<private, i32, read_write> = access %obj, 0u, 5i
+        %260:i32 = load %259
+        %x_177:i32 = let %260
+        %262:f32 = load_vector_element %color, 0u
+        %x_180:f32 = let %262
+        %264:f32 = convert %x_177
+        %265:f32 = add %x_180, %264
+        store_vector_element %color, 0u, %265
         exit_if  # if_10
       }
     }
-    %x_184:f32 = load_vector_element %uv, 1u
-    %186:bool = gt %x_184, 0.5f
-    if %186 [t: %b25] {  # if_11
-      %b25 = block {  # true
-        %187:ptr<private, i32, read_write> = access %obj, 0u, 6i
-        %x_189:i32 = load %187
-        %x_192:f32 = load_vector_element %color, 1u
-        %190:f32 = convert %x_189
-        %191:f32 = add %x_192, %190
-        store_vector_element %color, 1u, %191
+    %266:f32 = load_vector_element %uv, 1u
+    %x_184:f32 = let %266
+    %268:bool = gt %x_184, 0.5f
+    if %268 [t: $B25] {  # if_11
+      $B25: {  # true
+        %269:ptr<private, i32, read_write> = access %obj, 0u, 6i
+        %270:i32 = load %269
+        %x_189:i32 = let %270
+        %272:f32 = load_vector_element %color, 1u
+        %x_192:f32 = let %272
+        %274:f32 = convert %x_189
+        %275:f32 = add %x_192, %274
+        store_vector_element %color, 1u, %275
         exit_if  # if_11
       }
     }
-    %x_196:f32 = load_vector_element %uv, 1u
-    %193:bool = gt %x_196, 0.75f
-    if %193 [t: %b26] {  # if_12
-      %b26 = block {  # true
-        %194:ptr<private, i32, read_write> = access %obj, 0u, 7i
-        %x_201:i32 = load %194
-        %x_204:f32 = load_vector_element %color, 2u
-        %197:f32 = convert %x_201
-        %198:f32 = add %x_204, %197
-        store_vector_element %color, 2u, %198
+    %276:f32 = load_vector_element %uv, 1u
+    %x_196:f32 = let %276
+    %278:bool = gt %x_196, 0.75f
+    if %278 [t: $B26] {  # if_12
+      $B26: {  # true
+        %279:ptr<private, i32, read_write> = access %obj, 0u, 7i
+        %280:i32 = load %279
+        %x_201:i32 = let %280
+        %282:f32 = load_vector_element %color, 2u
+        %x_204:f32 = let %282
+        %284:f32 = convert %x_201
+        %285:f32 = add %x_204, %284
+        store_vector_element %color, 2u, %285
         exit_if  # if_12
       }
     }
-    %199:ptr<private, i32, read_write> = access %obj, 0u, 8i
-    %x_208:i32 = load %199
-    %x_211:f32 = load_vector_element %color, 2u
-    %202:f32 = convert %x_208
-    %203:f32 = add %x_211, %202
-    store_vector_element %color, 2u, %203
-    %x_215:f32 = load_vector_element %uv, 0u
-    %x_217:f32 = load_vector_element %uv, 1u
-    %206:f32 = sub %x_215, %x_217
-    %207:f32 = abs %206
-    %208:bool = lt %207, 0.25f
-    if %208 [t: %b27] {  # if_13
-      %b27 = block {  # true
-        %209:ptr<private, i32, read_write> = access %obj, 0u, 9i
-        %x_224:i32 = load %209
-        %x_227:f32 = load_vector_element %color, 0u
-        %212:f32 = convert %x_224
-        %213:f32 = add %x_227, %212
-        store_vector_element %color, 0u, %213
+    %286:ptr<private, i32, read_write> = access %obj, 0u, 8i
+    %287:i32 = load %286
+    %x_208:i32 = let %287
+    %289:f32 = load_vector_element %color, 2u
+    %x_211:f32 = let %289
+    %291:f32 = convert %x_208
+    %292:f32 = add %x_211, %291
+    store_vector_element %color, 2u, %292
+    %293:f32 = load_vector_element %uv, 0u
+    %x_215:f32 = let %293
+    %295:f32 = load_vector_element %uv, 1u
+    %x_217:f32 = let %295
+    %297:f32 = sub %x_215, %x_217
+    %298:f32 = abs %297
+    %299:bool = lt %298, 0.25f
+    if %299 [t: $B27] {  # if_13
+      $B27: {  # true
+        %300:ptr<private, i32, read_write> = access %obj, 0u, 9i
+        %301:i32 = load %300
+        %x_224:i32 = let %301
+        %303:f32 = load_vector_element %color, 0u
+        %x_227:f32 = let %303
+        %305:f32 = convert %x_224
+        %306:f32 = add %x_227, %305
+        store_vector_element %color, 0u, %306
         exit_if  # if_13
       }
     }
-    %x_230:vec3<f32> = load %color
-    %x_231:vec3<f32> = normalize %x_230
-    %216:f32 = access %x_231, 0u
-    %217:f32 = access %x_231, 1u
-    %218:f32 = access %x_231, 2u
-    %219:vec4<f32> = construct %216, %217, %218, 1.0f
-    store %frag_color, %219
-    %x_236:vec4<f32> = load %x_GLF_pos
+    %307:vec3<f32> = load %color
+    %x_230:vec3<f32> = let %307
+    %309:vec3<f32> = normalize %x_230
+    %x_231:vec3<f32> = let %309
+    %311:f32 = access %x_231, 0u
+    %312:f32 = access %x_231, 1u
+    %313:f32 = access %x_231, 2u
+    %314:vec4<f32> = construct %311, %312, %313, 1.0f
+    store %frag_color, %314
+    %315:vec4<f32> = load %x_GLF_pos
+    %x_236:vec4<f32> = let %315
     store %gl_Position, %x_236
     ret
   }
 }
-%tint_symbol = @vertex func(%x_GLF_pos_param:vec4<f32> [@location(0)]):main_out -> %b28 {
-  %b28 = block {
+%tint_symbol = @vertex func(%x_GLF_pos_param:vec4<f32> [@location(0)]):main_out {
+  $B28: {
     store %x_GLF_pos, %x_GLF_pos_param
-    %223:void = call %main_1
-    %224:vec4<f32> = load %frag_color
-    %225:vec4<f32> = load %gl_Position
-    %226:main_out = construct %224, %225
-    ret %226
+    %319:void = call %main_1
+    %320:vec4<f32> = load %frag_color
+    %321:vec4<f32> = load %gl_Position
+    %322:main_out = construct %320, %321
+    ret %322
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/1.spvasm.expected.ir.msl
index efdd3b1..288466c 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/1.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/1.spvasm.expected.ir.msl
@@ -1,6 +1,32 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+  %frag_color:ptr<private, vec4<f32>, read_write> = var
+}
+
+%main_1 = func():void {
+  $B2: {
+    %4:vec4<f32> = load %frag_color
+    store %x_GLF_color, %4
+    ret
+  }
+}
+%tint_symbol = @fragment func(%frag_color_param:vec4<f32> [@location(0)]):main_out {
+  $B3: {
+    store %frag_color, %frag_color_param
+    %7:void = call %main_1
+    %8:vec4<f32> = load %x_GLF_color
+    %9:main_out = construct %8
+    ret %9
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/1.wgsl.expected.ir.msl
index efdd3b1..7d2c2db 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/1.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/1.wgsl.expected.ir.msl
@@ -1,6 +1,33 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+  %frag_color:ptr<private, vec4<f32>, read_write> = var
+}
+
+%main_1 = func():void {
+  $B2: {
+    %4:vec4<f32> = load %frag_color
+    %x_12:vec4<f32> = let %4
+    store %x_GLF_color, %x_12
+    ret
+  }
+}
+%tint_symbol = @fragment func(%frag_color_param:vec4<f32> [@location(0)]):main_out {
+  $B3: {
+    store %frag_color, %frag_color_param
+    %8:void = call %main_1
+    %9:vec4<f32> = load %x_GLF_color
+    %10:main_out = construct %9
+    ret %10
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/2-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/2-opt.spvasm.expected.ir.msl
index 5c00989..23566bb 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/2-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/2-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: QuicksortObject = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: QuicksortObject = struct @align(4) {
   numbers:array<i32, 10> @offset(0)
 }
 
@@ -17,7 +17,7 @@
   gl_Position:vec4<f32> @offset(16), @builtin(position)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %obj:ptr<private, QuicksortObject, read_write> = var
   %x_GLF_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_pos:ptr<private, vec4<f32>, read_write> = var
@@ -27,28 +27,30 @@
   %gl_Position:ptr<private, vec4<f32>, read_write> = var
 }
 
-%swap_i1_i1_ = func(%i:ptr<function, i32, read_write>, %j:ptr<function, i32, read_write>):void -> %b2 {
-  %b2 = block {
+%swap_i1_i1_ = func(%i:ptr<function, i32, read_write>, %j:ptr<function, i32, read_write>):void {
+  $B2: {
     %temp:ptr<function, i32, read_write> = var
     %12:i32 = load %i
     %13:ptr<private, i32, read_write> = access %obj, 0u, %12
     %14:i32 = load %13
     store %temp, %14
-    %x_253:i32 = load %i
-    %16:ptr<private, i32, read_write> = access %obj, 0u, %x_253
-    %17:i32 = load %j
-    %18:ptr<private, i32, read_write> = access %obj, 0u, %17
-    %19:i32 = load %18
-    store %16, %19
-    %x_258:i32 = load %j
-    %21:ptr<private, i32, read_write> = access %obj, 0u, %x_258
-    %22:i32 = load %temp
-    store %21, %22
+    %15:i32 = load %i
+    %x_253:i32 = let %15
+    %17:ptr<private, i32, read_write> = access %obj, 0u, %x_253
+    %18:i32 = load %j
+    %19:ptr<private, i32, read_write> = access %obj, 0u, %18
+    %20:i32 = load %19
+    store %17, %20
+    %21:i32 = load %j
+    %x_258:i32 = let %21
+    %23:ptr<private, i32, read_write> = access %obj, 0u, %x_258
+    %24:i32 = load %temp
+    store %23, %24
     ret
   }
 }
-%performPartition_i1_i1_ = func(%l:ptr<function, i32, read_write>, %h:ptr<function, i32, read_write>):i32 -> %b3 {
-  %b3 = block {
+%performPartition_i1_i1_ = func(%l:ptr<function, i32, read_write>, %h:ptr<function, i32, read_write>):i32 {
+  $B3: {
     %pivot:ptr<function, i32, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
     %j_1:ptr<function, i32, read_write> = var
@@ -56,69 +58,70 @@
     %param_1:ptr<function, i32, read_write> = var
     %param_2:ptr<function, i32, read_write> = var
     %param_3:ptr<function, i32, read_write> = var
-    %33:i32 = load %h
-    %34:ptr<private, i32, read_write> = access %obj, 0u, %33
-    %35:i32 = load %34
-    store %pivot, %35
-    %36:i32 = load %l
-    %37:i32 = sub %36, 1i
-    store %i_1, %37
+    %35:i32 = load %h
+    %36:ptr<private, i32, read_write> = access %obj, 0u, %35
+    %37:i32 = load %36
+    store %pivot, %37
     %38:i32 = load %l
-    store %j_1, %38
-    loop [b: %b4, c: %b5] {  # loop_1
-      %b4 = block {  # body
-        %39:i32 = load %j_1
-        %40:i32 = load %h
-        %41:i32 = sub %40, 1i
-        %42:bool = lte %39, %41
-        if %42 [t: %b6, f: %b7] {  # if_1
-          %b6 = block {  # true
+    %39:i32 = sub %38, 1i
+    store %i_1, %39
+    %40:i32 = load %l
+    store %j_1, %40
+    loop [b: $B4, c: $B5] {  # loop_1
+      $B4: {  # body
+        %41:i32 = load %j_1
+        %42:i32 = load %h
+        %43:i32 = sub %42, 1i
+        %44:bool = lte %41, %43
+        if %44 [t: $B6, f: $B7] {  # if_1
+          $B6: {  # true
             exit_if  # if_1
           }
-          %b7 = block {  # false
+          $B7: {  # false
             exit_loop  # loop_1
           }
         }
-        %43:i32 = load %j_1
-        %44:ptr<private, i32, read_write> = access %obj, 0u, %43
-        %45:i32 = load %44
-        %46:i32 = load %pivot
-        %47:bool = lte %45, %46
-        if %47 [t: %b8] {  # if_2
-          %b8 = block {  # true
-            %48:i32 = load %i_1
-            %49:i32 = add %48, 1i
-            store %i_1, %49
+        %45:i32 = load %j_1
+        %46:ptr<private, i32, read_write> = access %obj, 0u, %45
+        %47:i32 = load %46
+        %48:i32 = load %pivot
+        %49:bool = lte %47, %48
+        if %49 [t: $B8] {  # if_2
+          $B8: {  # true
             %50:i32 = load %i_1
-            store %param, %50
-            %51:i32 = load %j_1
-            store %param_1, %51
-            %52:void = call %swap_i1_i1_, %param, %param_1
+            %51:i32 = add %50, 1i
+            store %i_1, %51
+            %52:i32 = load %i_1
+            store %param, %52
+            %53:i32 = load %j_1
+            store %param_1, %53
+            %54:void = call %swap_i1_i1_, %param, %param_1
             exit_if  # if_2
           }
         }
-        continue %b5
+        continue  # -> $B5
       }
-      %b5 = block {  # continuing
-        %53:i32 = load %j_1
-        %54:i32 = add %53, 1i
-        store %j_1, %54
-        next_iteration %b4
+      $B5: {  # continuing
+        %55:i32 = load %j_1
+        %56:i32 = add %55, 1i
+        store %j_1, %56
+        next_iteration  # -> $B4
       }
     }
-    %55:i32 = load %i_1
-    %56:i32 = add %55, 1i
-    store %param_2, %56
-    %57:i32 = load %h
-    store %param_3, %57
-    %58:void = call %swap_i1_i1_, %param_2, %param_3
-    %x_295:i32 = load %i_1
-    %60:i32 = add %x_295, 1i
-    ret %60
+    %57:i32 = load %i_1
+    %58:i32 = add %57, 1i
+    store %param_2, %58
+    %59:i32 = load %h
+    store %param_3, %59
+    %60:void = call %swap_i1_i1_, %param_2, %param_3
+    %61:i32 = load %i_1
+    %x_295:i32 = let %61
+    %63:i32 = add %x_295, 1i
+    ret %63
   }
 }
-%quicksort_ = func():void -> %b9 {
-  %b9 = block {
+%quicksort_ = func():void {
+  $B9: {
     %l_1:ptr<function, i32, read_write> = var
     %h_1:ptr<function, i32, read_write> = var
     %top:ptr<function, i32, read_write> = var
@@ -129,299 +132,321 @@
     store %l_1, 0i
     store %h_1, 9i
     store %top, -1i
-    %69:i32 = load %top
-    %x_299:i32 = add %69, 1i
+    %72:i32 = load %top
+    %73:i32 = add %72, 1i
+    %x_299:i32 = let %73
     store %top, %x_299
-    %71:ptr<function, i32, read_write> = access %stack, %x_299
-    %72:i32 = load %l_1
-    store %71, %72
-    %73:i32 = load %top
-    %x_303:i32 = add %73, 1i
-    store %top, %x_303
-    %75:ptr<function, i32, read_write> = access %stack, %x_303
-    %76:i32 = load %h_1
+    %75:ptr<function, i32, read_write> = access %stack, %x_299
+    %76:i32 = load %l_1
     store %75, %76
-    loop [b: %b10, c: %b11] {  # loop_2
-      %b10 = block {  # body
-        %77:i32 = load %top
-        %78:bool = gte %77, 0i
-        if %78 [t: %b12, f: %b13] {  # if_3
-          %b12 = block {  # true
+    %77:i32 = load %top
+    %78:i32 = add %77, 1i
+    %x_303:i32 = let %78
+    store %top, %x_303
+    %80:ptr<function, i32, read_write> = access %stack, %x_303
+    %81:i32 = load %h_1
+    store %80, %81
+    loop [b: $B10, c: $B11] {  # loop_2
+      $B10: {  # body
+        %82:i32 = load %top
+        %83:bool = gte %82, 0i
+        if %83 [t: $B12, f: $B13] {  # if_3
+          $B12: {  # true
             exit_if  # if_3
           }
-          %b13 = block {  # false
+          $B13: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_313:i32 = load %top
-        %80:i32 = load %top
-        %81:i32 = sub %80, 1i
-        store %top, %81
-        %82:ptr<function, i32, read_write> = access %stack, %x_313
-        %83:i32 = load %82
-        store %h_1, %83
-        %x_317:i32 = load %top
-        %85:i32 = load %top
-        %86:i32 = sub %85, 1i
-        store %top, %86
-        %87:ptr<function, i32, read_write> = access %stack, %x_317
-        %88:i32 = load %87
-        store %l_1, %88
-        %89:i32 = load %l_1
-        store %param_4, %89
-        %90:i32 = load %h_1
-        store %param_5, %90
-        %x_323:i32 = call %performPartition_i1_i1_, %param_4, %param_5
-        store %p, %x_323
-        %92:i32 = load %p
+        %84:i32 = load %top
+        %x_313:i32 = let %84
+        %86:i32 = load %top
+        %87:i32 = sub %86, 1i
+        store %top, %87
+        %88:ptr<function, i32, read_write> = access %stack, %x_313
+        %89:i32 = load %88
+        store %h_1, %89
+        %90:i32 = load %top
+        %x_317:i32 = let %90
+        %92:i32 = load %top
         %93:i32 = sub %92, 1i
-        %94:i32 = load %l_1
-        %95:bool = gt %93, %94
-        if %95 [t: %b14] {  # if_4
-          %b14 = block {  # true
-            %96:i32 = load %top
-            %x_331:i32 = add %96, 1i
+        store %top, %93
+        %94:ptr<function, i32, read_write> = access %stack, %x_317
+        %95:i32 = load %94
+        store %l_1, %95
+        %96:i32 = load %l_1
+        store %param_4, %96
+        %97:i32 = load %h_1
+        store %param_5, %97
+        %98:i32 = call %performPartition_i1_i1_, %param_4, %param_5
+        %x_323:i32 = let %98
+        store %p, %x_323
+        %100:i32 = load %p
+        %101:i32 = sub %100, 1i
+        %102:i32 = load %l_1
+        %103:bool = gt %101, %102
+        if %103 [t: $B14] {  # if_4
+          $B14: {  # true
+            %104:i32 = load %top
+            %105:i32 = add %104, 1i
+            %x_331:i32 = let %105
             store %top, %x_331
-            %98:ptr<function, i32, read_write> = access %stack, %x_331
-            %99:i32 = load %l_1
-            store %98, %99
-            %100:i32 = load %top
-            %x_335:i32 = add %100, 1i
+            %107:ptr<function, i32, read_write> = access %stack, %x_331
+            %108:i32 = load %l_1
+            store %107, %108
+            %109:i32 = load %top
+            %110:i32 = add %109, 1i
+            %x_335:i32 = let %110
             store %top, %x_335
-            %102:ptr<function, i32, read_write> = access %stack, %x_335
-            %103:i32 = load %p
-            %104:i32 = sub %103, 1i
-            store %102, %104
+            %112:ptr<function, i32, read_write> = access %stack, %x_335
+            %113:i32 = load %p
+            %114:i32 = sub %113, 1i
+            store %112, %114
             exit_if  # if_4
           }
         }
-        %105:i32 = load %p
-        %106:i32 = add %105, 1i
-        %107:i32 = load %h_1
-        %108:bool = lt %106, %107
-        if %108 [t: %b15] {  # if_5
-          %b15 = block {  # true
-            %109:i32 = load %top
-            %x_346:i32 = add %109, 1i
+        %115:i32 = load %p
+        %116:i32 = add %115, 1i
+        %117:i32 = load %h_1
+        %118:bool = lt %116, %117
+        if %118 [t: $B15] {  # if_5
+          $B15: {  # true
+            %119:i32 = load %top
+            %120:i32 = add %119, 1i
+            %x_346:i32 = let %120
             store %top, %x_346
-            %111:ptr<function, i32, read_write> = access %stack, %x_346
-            %112:i32 = load %p
-            %113:i32 = add %112, 1i
-            store %111, %113
-            %114:i32 = load %top
-            %x_351:i32 = add %114, 1i
+            %122:ptr<function, i32, read_write> = access %stack, %x_346
+            %123:i32 = load %p
+            %124:i32 = add %123, 1i
+            store %122, %124
+            %125:i32 = load %top
+            %126:i32 = add %125, 1i
+            %x_351:i32 = let %126
             store %top, %x_351
-            %116:ptr<function, i32, read_write> = access %stack, %x_351
-            %117:i32 = load %h_1
-            store %116, %117
+            %128:ptr<function, i32, read_write> = access %stack, %x_351
+            %129:i32 = load %h_1
+            store %128, %129
             exit_if  # if_5
           }
         }
-        continue %b11
+        continue  # -> $B11
       }
-      %b11 = block {  # continuing
-        next_iteration %b10
+      $B11: {  # continuing
+        next_iteration  # -> $B10
       }
     }
     ret
   }
 }
-%main_1 = func():void -> %b16 {
-  %b16 = block {
+%main_1 = func():void {
+  $B16: {
     %i_2:ptr<function, i32, read_write> = var
     %uv:ptr<function, vec2<f32>, read_write> = var
     %color:ptr<function, vec3<f32>, read_write> = var
-    %122:vec4<f32> = load %x_GLF_pos
-    %123:vec4<f32> = add %122, vec4<f32>(1.0f, 1.0f, 0.0f, 0.0f)
-    %124:vec4<f32> = mul %123, vec4<f32>(128.0f, 128.0f, 1.0f, 1.0f)
-    store %x_GLF_FragCoord, %124
+    %134:vec4<f32> = load %x_GLF_pos
+    %135:vec4<f32> = add %134, vec4<f32>(1.0f, 1.0f, 0.0f, 0.0f)
+    %136:vec4<f32> = mul %135, vec4<f32>(128.0f, 128.0f, 1.0f, 1.0f)
+    store %x_GLF_FragCoord, %136
     store %i_2, 0i
-    loop [b: %b17, c: %b18] {  # loop_3
-      %b17 = block {  # body
-        %125:i32 = load %i_2
-        %126:bool = lt %125, 10i
-        if %126 [t: %b19, f: %b20] {  # if_6
-          %b19 = block {  # true
+    loop [b: $B17, c: $B18] {  # loop_3
+      $B17: {  # body
+        %137:i32 = load %i_2
+        %138:bool = lt %137, 10i
+        if %138 [t: $B19, f: $B20] {  # if_6
+          $B19: {  # true
             exit_if  # if_6
           }
-          %b20 = block {  # false
+          $B20: {  # false
             exit_loop  # loop_3
           }
         }
-        %x_104:i32 = load %i_2
-        %128:ptr<private, i32, read_write> = access %obj, 0u, %x_104
-        %129:i32 = load %i_2
-        %130:i32 = sub 10i, %129
-        store %128, %130
-        %131:ptr<uniform, vec2<f32>, read> = access %x_33, 0u
-        %132:f32 = load_vector_element %131, 0u
-        %133:ptr<uniform, vec2<f32>, read> = access %x_33, 0u
-        %134:f32 = load_vector_element %133, 1u
-        %135:bool = gt %132, %134
-        if %135 [t: %b21] {  # if_7
-          %b21 = block {  # true
+        %139:i32 = load %i_2
+        %x_104:i32 = let %139
+        %141:ptr<private, i32, read_write> = access %obj, 0u, %x_104
+        %142:i32 = load %i_2
+        %143:i32 = sub 10i, %142
+        store %141, %143
+        %144:ptr<uniform, vec2<f32>, read> = access %x_33, 0u
+        %145:f32 = load_vector_element %144, 0u
+        %146:ptr<uniform, vec2<f32>, read> = access %x_33, 0u
+        %147:f32 = load_vector_element %146, 1u
+        %148:bool = gt %145, %147
+        if %148 [t: $B21] {  # if_7
+          $B21: {  # true
             exit_loop  # loop_3
           }
         }
-        %x_115:i32 = load %i_2
-        %137:ptr<private, i32, read_write> = access %obj, 0u, %x_115
-        %138:i32 = load %i_2
-        %139:ptr<private, i32, read_write> = access %obj, 0u, %138
-        %140:i32 = load %139
-        %141:i32 = load %i_2
-        %142:ptr<private, i32, read_write> = access %obj, 0u, %141
-        %143:i32 = load %142
-        %144:i32 = mul %140, %143
-        store %137, %144
-        continue %b18
+        %149:i32 = load %i_2
+        %x_115:i32 = let %149
+        %151:ptr<private, i32, read_write> = access %obj, 0u, %x_115
+        %152:i32 = load %i_2
+        %153:ptr<private, i32, read_write> = access %obj, 0u, %152
+        %154:i32 = load %153
+        %155:i32 = load %i_2
+        %156:ptr<private, i32, read_write> = access %obj, 0u, %155
+        %157:i32 = load %156
+        %158:i32 = mul %154, %157
+        store %151, %158
+        continue  # -> $B18
       }
-      %b18 = block {  # continuing
-        %145:i32 = load %i_2
-        %146:i32 = add %145, 1i
-        store %i_2, %146
-        next_iteration %b17
+      $B18: {  # continuing
+        %159:i32 = load %i_2
+        %160:i32 = add %159, 1i
+        store %i_2, %160
+        next_iteration  # -> $B17
       }
     }
-    %147:void = call %quicksort_
-    %148:vec4<f32> = load %x_GLF_FragCoord
-    %149:vec2<f32> = swizzle %148, xy
-    %150:ptr<uniform, vec2<f32>, read> = access %x_36, 0u
-    %151:vec2<f32> = load %150
-    %152:vec2<f32> = div %149, %151
-    store %uv, %152
+    %161:void = call %quicksort_
+    %162:vec4<f32> = load %x_GLF_FragCoord
+    %163:vec2<f32> = swizzle %162, xy
+    %164:ptr<uniform, vec2<f32>, read> = access %x_36, 0u
+    %165:vec2<f32> = load %164
+    %166:vec2<f32> = div %163, %165
+    store %uv, %166
     store %color, vec3<f32>(1.0f, 2.0f, 3.0f)
-    %153:f32 = load_vector_element %color, 0u
-    %154:ptr<private, i32, read_write> = access %obj, 0u, 0i
-    %155:i32 = load %154
-    %156:f32 = convert %155
-    %157:f32 = add %153, %156
-    store_vector_element %color, 0u, %157
-    %158:f32 = load_vector_element %uv, 0u
-    %159:bool = gt %158, 0.25f
-    if %159 [t: %b22] {  # if_8
-      %b22 = block {  # true
-        %160:f32 = load_vector_element %color, 0u
-        %161:ptr<private, i32, read_write> = access %obj, 0u, 1i
-        %162:i32 = load %161
-        %163:f32 = convert %162
-        %164:f32 = add %160, %163
-        store_vector_element %color, 0u, %164
+    %167:f32 = load_vector_element %color, 0u
+    %168:f32 = let %167
+    %169:ptr<private, i32, read_write> = access %obj, 0u, 0i
+    %170:i32 = load %169
+    %171:f32 = convert %170
+    %172:f32 = add %168, %171
+    store_vector_element %color, 0u, %172
+    %173:f32 = load_vector_element %uv, 0u
+    %174:bool = gt %173, 0.25f
+    if %174 [t: $B22] {  # if_8
+      $B22: {  # true
+        %175:f32 = load_vector_element %color, 0u
+        %176:f32 = let %175
+        %177:ptr<private, i32, read_write> = access %obj, 0u, 1i
+        %178:i32 = load %177
+        %179:f32 = convert %178
+        %180:f32 = add %176, %179
+        store_vector_element %color, 0u, %180
         exit_if  # if_8
       }
     }
-    %165:f32 = load_vector_element %uv, 0u
-    %166:bool = gt %165, 0.5f
-    if %166 [t: %b23] {  # if_9
-      %b23 = block {  # true
-        %167:f32 = load_vector_element %color, 1u
-        %168:ptr<private, i32, read_write> = access %obj, 0u, 2i
-        %169:i32 = load %168
-        %170:f32 = convert %169
-        %171:f32 = add %167, %170
-        store_vector_element %color, 1u, %171
+    %181:f32 = load_vector_element %uv, 0u
+    %182:bool = gt %181, 0.5f
+    if %182 [t: $B23] {  # if_9
+      $B23: {  # true
+        %183:f32 = load_vector_element %color, 1u
+        %184:f32 = let %183
+        %185:ptr<private, i32, read_write> = access %obj, 0u, 2i
+        %186:i32 = load %185
+        %187:f32 = convert %186
+        %188:f32 = add %184, %187
+        store_vector_element %color, 1u, %188
         exit_if  # if_9
       }
     }
-    %172:f32 = load_vector_element %uv, 0u
-    %173:bool = gt %172, 0.75f
-    if %173 [t: %b24] {  # if_10
-      %b24 = block {  # true
-        %174:f32 = load_vector_element %color, 2u
-        %175:ptr<private, i32, read_write> = access %obj, 0u, 3i
-        %176:i32 = load %175
-        %177:f32 = convert %176
-        %178:f32 = add %174, %177
-        store_vector_element %color, 2u, %178
+    %189:f32 = load_vector_element %uv, 0u
+    %190:bool = gt %189, 0.75f
+    if %190 [t: $B24] {  # if_10
+      $B24: {  # true
+        %191:f32 = load_vector_element %color, 2u
+        %192:f32 = let %191
+        %193:ptr<private, i32, read_write> = access %obj, 0u, 3i
+        %194:i32 = load %193
+        %195:f32 = convert %194
+        %196:f32 = add %192, %195
+        store_vector_element %color, 2u, %196
         exit_if  # if_10
       }
     }
-    %179:f32 = load_vector_element %color, 1u
-    %180:ptr<private, i32, read_write> = access %obj, 0u, 4i
-    %181:i32 = load %180
-    %182:f32 = convert %181
-    %183:f32 = add %179, %182
-    store_vector_element %color, 1u, %183
-    %184:f32 = load_vector_element %uv, 1u
-    %185:bool = gt %184, 0.25f
-    if %185 [t: %b25] {  # if_11
-      %b25 = block {  # true
-        %186:f32 = load_vector_element %color, 0u
-        %187:ptr<private, i32, read_write> = access %obj, 0u, 5i
-        %188:i32 = load %187
-        %189:f32 = convert %188
-        %190:f32 = add %186, %189
-        store_vector_element %color, 0u, %190
+    %197:f32 = load_vector_element %color, 1u
+    %198:f32 = let %197
+    %199:ptr<private, i32, read_write> = access %obj, 0u, 4i
+    %200:i32 = load %199
+    %201:f32 = convert %200
+    %202:f32 = add %198, %201
+    store_vector_element %color, 1u, %202
+    %203:f32 = load_vector_element %uv, 1u
+    %204:bool = gt %203, 0.25f
+    if %204 [t: $B25] {  # if_11
+      $B25: {  # true
+        %205:f32 = load_vector_element %color, 0u
+        %206:f32 = let %205
+        %207:ptr<private, i32, read_write> = access %obj, 0u, 5i
+        %208:i32 = load %207
+        %209:f32 = convert %208
+        %210:f32 = add %206, %209
+        store_vector_element %color, 0u, %210
         exit_if  # if_11
       }
     }
-    %191:f32 = load_vector_element %uv, 1u
-    %192:bool = gt %191, 0.5f
-    if %192 [t: %b26] {  # if_12
-      %b26 = block {  # true
-        %193:f32 = load_vector_element %color, 1u
-        %194:ptr<private, i32, read_write> = access %obj, 0u, 6i
-        %195:i32 = load %194
-        %196:f32 = convert %195
-        %197:f32 = add %193, %196
-        store_vector_element %color, 1u, %197
+    %211:f32 = load_vector_element %uv, 1u
+    %212:bool = gt %211, 0.5f
+    if %212 [t: $B26] {  # if_12
+      $B26: {  # true
+        %213:f32 = load_vector_element %color, 1u
+        %214:f32 = let %213
+        %215:ptr<private, i32, read_write> = access %obj, 0u, 6i
+        %216:i32 = load %215
+        %217:f32 = convert %216
+        %218:f32 = add %214, %217
+        store_vector_element %color, 1u, %218
         exit_if  # if_12
       }
     }
-    %198:f32 = load_vector_element %uv, 1u
-    %199:bool = gt %198, 0.75f
-    if %199 [t: %b27] {  # if_13
-      %b27 = block {  # true
-        %200:f32 = load_vector_element %color, 2u
-        %201:ptr<private, i32, read_write> = access %obj, 0u, 7i
-        %202:i32 = load %201
-        %203:f32 = convert %202
-        %204:f32 = add %200, %203
-        store_vector_element %color, 2u, %204
+    %219:f32 = load_vector_element %uv, 1u
+    %220:bool = gt %219, 0.75f
+    if %220 [t: $B27] {  # if_13
+      $B27: {  # true
+        %221:f32 = load_vector_element %color, 2u
+        %222:f32 = let %221
+        %223:ptr<private, i32, read_write> = access %obj, 0u, 7i
+        %224:i32 = load %223
+        %225:f32 = convert %224
+        %226:f32 = add %222, %225
+        store_vector_element %color, 2u, %226
         exit_if  # if_13
       }
     }
-    %205:f32 = load_vector_element %color, 2u
-    %206:ptr<private, i32, read_write> = access %obj, 0u, 8i
-    %207:i32 = load %206
-    %208:f32 = convert %207
-    %209:f32 = add %205, %208
-    store_vector_element %color, 2u, %209
-    %210:f32 = load_vector_element %uv, 0u
-    %211:f32 = load_vector_element %uv, 1u
-    %212:f32 = sub %210, %211
-    %213:f32 = abs %212
-    %214:bool = lt %213, 0.25f
-    if %214 [t: %b28] {  # if_14
-      %b28 = block {  # true
-        %215:f32 = load_vector_element %color, 0u
-        %216:ptr<private, i32, read_write> = access %obj, 0u, 9i
-        %217:i32 = load %216
-        %218:f32 = convert %217
-        %219:f32 = add %215, %218
-        store_vector_element %color, 0u, %219
+    %227:f32 = load_vector_element %color, 2u
+    %228:f32 = let %227
+    %229:ptr<private, i32, read_write> = access %obj, 0u, 8i
+    %230:i32 = load %229
+    %231:f32 = convert %230
+    %232:f32 = add %228, %231
+    store_vector_element %color, 2u, %232
+    %233:f32 = load_vector_element %uv, 0u
+    %234:f32 = load_vector_element %uv, 1u
+    %235:f32 = sub %233, %234
+    %236:f32 = abs %235
+    %237:bool = lt %236, 0.25f
+    if %237 [t: $B28] {  # if_14
+      $B28: {  # true
+        %238:f32 = load_vector_element %color, 0u
+        %239:f32 = let %238
+        %240:ptr<private, i32, read_write> = access %obj, 0u, 9i
+        %241:i32 = load %240
+        %242:f32 = convert %241
+        %243:f32 = add %239, %242
+        store_vector_element %color, 0u, %243
         exit_if  # if_14
       }
     }
-    %220:vec3<f32> = load %color
-    %x_242:vec3<f32> = normalize %220
-    %222:f32 = access %x_242, 0u
-    %223:f32 = access %x_242, 1u
-    %224:f32 = access %x_242, 2u
-    %225:vec4<f32> = construct %222, %223, %224, 1.0f
-    store %frag_color, %225
-    %226:vec4<f32> = load %x_GLF_pos
-    store %gl_Position, %226
+    %244:vec3<f32> = load %color
+    %245:vec3<f32> = normalize %244
+    %x_242:vec3<f32> = let %245
+    %247:f32 = access %x_242, 0u
+    %248:f32 = access %x_242, 1u
+    %249:f32 = access %x_242, 2u
+    %250:vec4<f32> = construct %247, %248, %249, 1.0f
+    store %frag_color, %250
+    %251:vec4<f32> = load %x_GLF_pos
+    store %gl_Position, %251
     ret
   }
 }
-%tint_symbol = @vertex func(%x_GLF_pos_param:vec4<f32> [@location(0)]):main_out -> %b29 {
-  %b29 = block {
+%tint_symbol = @vertex func(%x_GLF_pos_param:vec4<f32> [@location(0)]):main_out {
+  $B29: {
     store %x_GLF_pos, %x_GLF_pos_param
-    %229:void = call %main_1
-    %230:vec4<f32> = load %frag_color
-    %231:vec4<f32> = load %gl_Position
-    %232:main_out = construct %230, %231
-    ret %232
+    %254:void = call %main_1
+    %255:vec4<f32> = load %frag_color
+    %256:vec4<f32> = load %gl_Position
+    %257:main_out = construct %255, %256
+    ret %257
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/2-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/2-opt.wgsl.expected.ir.msl
index 20bec36..19cae19 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/2-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/2-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: QuicksortObject = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: QuicksortObject = struct @align(4) {
   numbers:array<i32, 10> @offset(0)
 }
 
@@ -17,7 +17,7 @@
   gl_Position:vec4<f32> @offset(16), @builtin(position)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %obj:ptr<private, QuicksortObject, read_write> = var
   %x_GLF_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_pos:ptr<private, vec4<f32>, read_write> = var
@@ -27,28 +27,35 @@
   %gl_Position:ptr<private, vec4<f32>, read_write> = var
 }
 
-%swap_i1_i1_ = func(%i:ptr<function, i32, read_write>, %j:ptr<function, i32, read_write>):void -> %b2 {
-  %b2 = block {
+%swap_i1_i1_ = func(%i:ptr<function, i32, read_write>, %j:ptr<function, i32, read_write>):void {
+  $B2: {
     %temp:ptr<function, i32, read_write> = var
-    %x_250:i32 = load %i
-    %13:ptr<private, i32, read_write> = access %obj, 0u, %x_250
-    %x_252:i32 = load %13
+    %12:i32 = load %i
+    %x_250:i32 = let %12
+    %14:ptr<private, i32, read_write> = access %obj, 0u, %x_250
+    %15:i32 = load %14
+    %x_252:i32 = let %15
     store %temp, %x_252
-    %x_253:i32 = load %i
-    %x_254:i32 = load %j
-    %17:ptr<private, i32, read_write> = access %obj, 0u, %x_254
-    %x_256:i32 = load %17
-    %19:ptr<private, i32, read_write> = access %obj, 0u, %x_253
-    store %19, %x_256
-    %x_258:i32 = load %j
-    %x_259:i32 = load %temp
-    %22:ptr<private, i32, read_write> = access %obj, 0u, %x_258
-    store %22, %x_259
+    %17:i32 = load %i
+    %x_253:i32 = let %17
+    %19:i32 = load %j
+    %x_254:i32 = let %19
+    %21:ptr<private, i32, read_write> = access %obj, 0u, %x_254
+    %22:i32 = load %21
+    %x_256:i32 = let %22
+    %24:ptr<private, i32, read_write> = access %obj, 0u, %x_253
+    store %24, %x_256
+    %25:i32 = load %j
+    %x_258:i32 = let %25
+    %27:i32 = load %temp
+    %x_259:i32 = let %27
+    %29:ptr<private, i32, read_write> = access %obj, 0u, %x_258
+    store %29, %x_259
     ret
   }
 }
-%performPartition_i1_i1_ = func(%l:ptr<function, i32, read_write>, %h:ptr<function, i32, read_write>):i32 -> %b3 {
-  %b3 = block {
+%performPartition_i1_i1_ = func(%l:ptr<function, i32, read_write>, %h:ptr<function, i32, read_write>):i32 {
+  $B3: {
     %pivot:ptr<function, i32, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
     %j_1:ptr<function, i32, read_write> = var
@@ -56,69 +63,85 @@
     %param_1:ptr<function, i32, read_write> = var
     %param_2:ptr<function, i32, read_write> = var
     %param_3:ptr<function, i32, read_write> = var
-    %x_262:i32 = load %h
-    %34:ptr<private, i32, read_write> = access %obj, 0u, %x_262
-    %x_264:i32 = load %34
+    %40:i32 = load %h
+    %x_262:i32 = let %40
+    %42:ptr<private, i32, read_write> = access %obj, 0u, %x_262
+    %43:i32 = load %42
+    %x_264:i32 = let %43
     store %pivot, %x_264
-    %x_265:i32 = load %l
-    %37:i32 = sub %x_265, 1i
-    store %i_1, %37
-    %x_267:i32 = load %l
+    %45:i32 = load %l
+    %x_265:i32 = let %45
+    %47:i32 = sub %x_265, 1i
+    store %i_1, %47
+    %48:i32 = load %l
+    %x_267:i32 = let %48
     store %j_1, %x_267
-    loop [b: %b4, c: %b5] {  # loop_1
-      %b4 = block {  # body
-        %x_272:i32 = load %j_1
-        %x_273:i32 = load %h
-        %41:i32 = sub %x_273, 1i
-        %42:bool = lte %x_272, %41
-        if %42 [t: %b6, f: %b7] {  # if_1
-          %b6 = block {  # true
+    loop [b: $B4, c: $B5] {  # loop_1
+      $B4: {  # body
+        %50:i32 = load %j_1
+        %x_272:i32 = let %50
+        %52:i32 = load %h
+        %x_273:i32 = let %52
+        %54:i32 = sub %x_273, 1i
+        %55:bool = lte %x_272, %54
+        if %55 [t: $B6, f: $B7] {  # if_1
+          $B6: {  # true
             exit_if  # if_1
           }
-          %b7 = block {  # false
+          $B7: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_277:i32 = load %j_1
-        %44:ptr<private, i32, read_write> = access %obj, 0u, %x_277
-        %x_279:i32 = load %44
-        %x_280:i32 = load %pivot
-        %47:bool = lte %x_279, %x_280
-        if %47 [t: %b8] {  # if_2
-          %b8 = block {  # true
-            %x_284:i32 = load %i_1
-            %49:i32 = add %x_284, 1i
-            store %i_1, %49
-            %x_286:i32 = load %i_1
+        %56:i32 = load %j_1
+        %x_277:i32 = let %56
+        %58:ptr<private, i32, read_write> = access %obj, 0u, %x_277
+        %59:i32 = load %58
+        %x_279:i32 = let %59
+        %61:i32 = load %pivot
+        %x_280:i32 = let %61
+        %63:bool = lte %x_279, %x_280
+        if %63 [t: $B8] {  # if_2
+          $B8: {  # true
+            %64:i32 = load %i_1
+            %x_284:i32 = let %64
+            %66:i32 = add %x_284, 1i
+            store %i_1, %66
+            %67:i32 = load %i_1
+            %x_286:i32 = let %67
             store %param, %x_286
-            %x_287:i32 = load %j_1
+            %69:i32 = load %j_1
+            %x_287:i32 = let %69
             store %param_1, %x_287
-            %52:void = call %swap_i1_i1_, %param, %param_1
+            %71:void = call %swap_i1_i1_, %param, %param_1
             exit_if  # if_2
           }
         }
-        continue %b5
+        continue  # -> $B5
       }
-      %b5 = block {  # continuing
-        %x_289:i32 = load %j_1
-        %54:i32 = add %x_289, 1i
-        store %j_1, %54
-        next_iteration %b4
+      $B5: {  # continuing
+        %72:i32 = load %j_1
+        %x_289:i32 = let %72
+        %74:i32 = add %x_289, 1i
+        store %j_1, %74
+        next_iteration  # -> $B4
       }
     }
-    %x_291:i32 = load %i_1
-    %56:i32 = add %x_291, 1i
-    store %param_2, %56
-    %x_293:i32 = load %h
+    %75:i32 = load %i_1
+    %x_291:i32 = let %75
+    %77:i32 = add %x_291, 1i
+    store %param_2, %77
+    %78:i32 = load %h
+    %x_293:i32 = let %78
     store %param_3, %x_293
-    %58:void = call %swap_i1_i1_, %param_2, %param_3
-    %x_295:i32 = load %i_1
-    %60:i32 = add %x_295, 1i
-    ret %60
+    %80:void = call %swap_i1_i1_, %param_2, %param_3
+    %81:i32 = load %i_1
+    %x_295:i32 = let %81
+    %83:i32 = add %x_295, 1i
+    ret %83
   }
 }
-%quicksort_ = func():void -> %b9 {
-  %b9 = block {
+%quicksort_ = func():void {
+  $B9: {
     %l_1:ptr<function, i32, read_write> = var
     %h_1:ptr<function, i32, read_write> = var
     %top:ptr<function, i32, read_write> = var
@@ -129,299 +152,374 @@
     store %l_1, 0i
     store %h_1, 9i
     store %top, -1i
-    %x_298:i32 = load %top
-    %x_299:i32 = add %x_298, 1i
+    %92:i32 = load %top
+    %x_298:i32 = let %92
+    %94:i32 = add %x_298, 1i
+    %x_299:i32 = let %94
     store %top, %x_299
-    %x_300:i32 = load %l_1
-    %72:ptr<function, i32, read_write> = access %stack, %x_299
-    store %72, %x_300
-    %x_302:i32 = load %top
-    %x_303:i32 = add %x_302, 1i
+    %96:i32 = load %l_1
+    %x_300:i32 = let %96
+    %98:ptr<function, i32, read_write> = access %stack, %x_299
+    store %98, %x_300
+    %99:i32 = load %top
+    %x_302:i32 = let %99
+    %101:i32 = add %x_302, 1i
+    %x_303:i32 = let %101
     store %top, %x_303
-    %x_304:i32 = load %h_1
-    %76:ptr<function, i32, read_write> = access %stack, %x_303
-    store %76, %x_304
-    loop [b: %b10, c: %b11] {  # loop_2
-      %b10 = block {  # body
-        %x_310:i32 = load %top
-        %78:bool = gte %x_310, 0i
-        if %78 [t: %b12, f: %b13] {  # if_3
-          %b12 = block {  # true
+    %103:i32 = load %h_1
+    %x_304:i32 = let %103
+    %105:ptr<function, i32, read_write> = access %stack, %x_303
+    store %105, %x_304
+    loop [b: $B10, c: $B11] {  # loop_2
+      $B10: {  # body
+        %106:i32 = load %top
+        %x_310:i32 = let %106
+        %108:bool = gte %x_310, 0i
+        if %108 [t: $B12, f: $B13] {  # if_3
+          $B12: {  # true
             exit_if  # if_3
           }
-          %b13 = block {  # false
+          $B13: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_313:i32 = load %top
-        %80:i32 = sub %x_313, 1i
-        store %top, %80
-        %81:ptr<function, i32, read_write> = access %stack, %x_313
-        %x_316:i32 = load %81
+        %109:i32 = load %top
+        %x_313:i32 = let %109
+        %111:i32 = sub %x_313, 1i
+        store %top, %111
+        %112:ptr<function, i32, read_write> = access %stack, %x_313
+        %113:i32 = load %112
+        %x_316:i32 = let %113
         store %h_1, %x_316
-        %x_317:i32 = load %top
-        %84:i32 = sub %x_317, 1i
-        store %top, %84
-        %85:ptr<function, i32, read_write> = access %stack, %x_317
-        %x_320:i32 = load %85
+        %115:i32 = load %top
+        %x_317:i32 = let %115
+        %117:i32 = sub %x_317, 1i
+        store %top, %117
+        %118:ptr<function, i32, read_write> = access %stack, %x_317
+        %119:i32 = load %118
+        %x_320:i32 = let %119
         store %l_1, %x_320
-        %x_321:i32 = load %l_1
+        %121:i32 = load %l_1
+        %x_321:i32 = let %121
         store %param_4, %x_321
-        %x_322:i32 = load %h_1
+        %123:i32 = load %h_1
+        %x_322:i32 = let %123
         store %param_5, %x_322
-        %x_323:i32 = call %performPartition_i1_i1_, %param_4, %param_5
+        %125:i32 = call %performPartition_i1_i1_, %param_4, %param_5
+        %x_323:i32 = let %125
         store %p, %x_323
-        %x_324:i32 = load %p
-        %x_326:i32 = load %l_1
-        %92:i32 = sub %x_324, 1i
-        %93:bool = gt %92, %x_326
-        if %93 [t: %b14] {  # if_4
-          %b14 = block {  # true
-            %x_330:i32 = load %top
-            %x_331:i32 = add %x_330, 1i
+        %127:i32 = load %p
+        %x_324:i32 = let %127
+        %129:i32 = load %l_1
+        %x_326:i32 = let %129
+        %131:i32 = sub %x_324, 1i
+        %132:bool = gt %131, %x_326
+        if %132 [t: $B14] {  # if_4
+          $B14: {  # true
+            %133:i32 = load %top
+            %x_330:i32 = let %133
+            %135:i32 = add %x_330, 1i
+            %x_331:i32 = let %135
             store %top, %x_331
-            %x_332:i32 = load %l_1
-            %97:ptr<function, i32, read_write> = access %stack, %x_331
-            store %97, %x_332
-            %x_334:i32 = load %top
-            %x_335:i32 = add %x_334, 1i
+            %137:i32 = load %l_1
+            %x_332:i32 = let %137
+            %139:ptr<function, i32, read_write> = access %stack, %x_331
+            store %139, %x_332
+            %140:i32 = load %top
+            %x_334:i32 = let %140
+            %142:i32 = add %x_334, 1i
+            %x_335:i32 = let %142
             store %top, %x_335
-            %x_336:i32 = load %p
-            %101:ptr<function, i32, read_write> = access %stack, %x_335
-            %102:i32 = sub %x_336, 1i
-            store %101, %102
+            %144:i32 = load %p
+            %x_336:i32 = let %144
+            %146:ptr<function, i32, read_write> = access %stack, %x_335
+            %147:i32 = sub %x_336, 1i
+            store %146, %147
             exit_if  # if_4
           }
         }
-        %x_339:i32 = load %p
-        %x_341:i32 = load %h_1
-        %105:i32 = add %x_339, 1i
-        %106:bool = lt %105, %x_341
-        if %106 [t: %b15] {  # if_5
-          %b15 = block {  # true
-            %x_345:i32 = load %top
-            %x_346:i32 = add %x_345, 1i
+        %148:i32 = load %p
+        %x_339:i32 = let %148
+        %150:i32 = load %h_1
+        %x_341:i32 = let %150
+        %152:i32 = add %x_339, 1i
+        %153:bool = lt %152, %x_341
+        if %153 [t: $B15] {  # if_5
+          $B15: {  # true
+            %154:i32 = load %top
+            %x_345:i32 = let %154
+            %156:i32 = add %x_345, 1i
+            %x_346:i32 = let %156
             store %top, %x_346
-            %x_347:i32 = load %p
-            %110:ptr<function, i32, read_write> = access %stack, %x_346
-            %111:i32 = add %x_347, 1i
-            store %110, %111
-            %x_350:i32 = load %top
-            %x_351:i32 = add %x_350, 1i
+            %158:i32 = load %p
+            %x_347:i32 = let %158
+            %160:ptr<function, i32, read_write> = access %stack, %x_346
+            %161:i32 = add %x_347, 1i
+            store %160, %161
+            %162:i32 = load %top
+            %x_350:i32 = let %162
+            %164:i32 = add %x_350, 1i
+            %x_351:i32 = let %164
             store %top, %x_351
-            %x_352:i32 = load %h_1
-            %115:ptr<function, i32, read_write> = access %stack, %x_351
-            store %115, %x_352
+            %166:i32 = load %h_1
+            %x_352:i32 = let %166
+            %168:ptr<function, i32, read_write> = access %stack, %x_351
+            store %168, %x_352
             exit_if  # if_5
           }
         }
-        continue %b11
+        continue  # -> $B11
       }
-      %b11 = block {  # continuing
-        next_iteration %b10
+      $B11: {  # continuing
+        next_iteration  # -> $B10
       }
     }
     ret
   }
 }
-%main_1 = func():void -> %b16 {
-  %b16 = block {
+%main_1 = func():void {
+  $B16: {
     %i_2:ptr<function, i32, read_write> = var
     %uv:ptr<function, vec2<f32>, read_write> = var
     %color:ptr<function, vec3<f32>, read_write> = var
-    %x_94:vec4<f32> = load %x_GLF_pos
-    %121:vec4<f32> = add %x_94, vec4<f32>(1.0f, 1.0f, 0.0f, 0.0f)
-    %122:vec4<f32> = mul %121, vec4<f32>(128.0f, 128.0f, 1.0f, 1.0f)
-    store %x_GLF_FragCoord, %122
+    %173:vec4<f32> = load %x_GLF_pos
+    %x_94:vec4<f32> = let %173
+    %175:vec4<f32> = add %x_94, vec4<f32>(1.0f, 1.0f, 0.0f, 0.0f)
+    %176:vec4<f32> = mul %175, vec4<f32>(128.0f, 128.0f, 1.0f, 1.0f)
+    store %x_GLF_FragCoord, %176
     store %i_2, 0i
-    loop [b: %b17, c: %b18] {  # loop_3
-      %b17 = block {  # body
-        %x_101:i32 = load %i_2
-        %124:bool = lt %x_101, 10i
-        if %124 [t: %b19, f: %b20] {  # if_6
-          %b19 = block {  # true
+    loop [b: $B17, c: $B18] {  # loop_3
+      $B17: {  # body
+        %177:i32 = load %i_2
+        %x_101:i32 = let %177
+        %179:bool = lt %x_101, 10i
+        if %179 [t: $B19, f: $B20] {  # if_6
+          $B19: {  # true
             exit_if  # if_6
           }
-          %b20 = block {  # false
+          $B20: {  # false
             exit_loop  # loop_3
           }
         }
-        %x_104:i32 = load %i_2
-        %x_105:i32 = load %i_2
-        %127:ptr<private, i32, read_write> = access %obj, 0u, %x_104
-        %128:i32 = sub 10i, %x_105
-        store %127, %128
-        %129:ptr<uniform, vec2<f32>, read> = access %x_33, 0u
-        %x_109:f32 = load_vector_element %129, 0u
-        %131:ptr<uniform, vec2<f32>, read> = access %x_33, 0u
-        %x_111:f32 = load_vector_element %131, 1u
-        %133:bool = gt %x_109, %x_111
-        if %133 [t: %b21] {  # if_7
-          %b21 = block {  # true
+        %180:i32 = load %i_2
+        %x_104:i32 = let %180
+        %182:i32 = load %i_2
+        %x_105:i32 = let %182
+        %184:ptr<private, i32, read_write> = access %obj, 0u, %x_104
+        %185:i32 = sub 10i, %x_105
+        store %184, %185
+        %186:ptr<uniform, vec2<f32>, read> = access %x_33, 0u
+        %187:f32 = load_vector_element %186, 0u
+        %x_109:f32 = let %187
+        %189:ptr<uniform, vec2<f32>, read> = access %x_33, 0u
+        %190:f32 = load_vector_element %189, 1u
+        %x_111:f32 = let %190
+        %192:bool = gt %x_109, %x_111
+        if %192 [t: $B21] {  # if_7
+          $B21: {  # true
             exit_loop  # loop_3
           }
         }
-        %x_115:i32 = load %i_2
-        %x_116:i32 = load %i_2
-        %136:ptr<private, i32, read_write> = access %obj, 0u, %x_116
-        %x_118:i32 = load %136
-        %x_119:i32 = load %i_2
-        %139:ptr<private, i32, read_write> = access %obj, 0u, %x_119
-        %x_121:i32 = load %139
-        %141:ptr<private, i32, read_write> = access %obj, 0u, %x_115
-        %142:i32 = mul %x_118, %x_121
-        store %141, %142
-        continue %b18
+        %193:i32 = load %i_2
+        %x_115:i32 = let %193
+        %195:i32 = load %i_2
+        %x_116:i32 = let %195
+        %197:ptr<private, i32, read_write> = access %obj, 0u, %x_116
+        %198:i32 = load %197
+        %x_118:i32 = let %198
+        %200:i32 = load %i_2
+        %x_119:i32 = let %200
+        %202:ptr<private, i32, read_write> = access %obj, 0u, %x_119
+        %203:i32 = load %202
+        %x_121:i32 = let %203
+        %205:ptr<private, i32, read_write> = access %obj, 0u, %x_115
+        %206:i32 = mul %x_118, %x_121
+        store %205, %206
+        continue  # -> $B18
       }
-      %b18 = block {  # continuing
-        %x_124:i32 = load %i_2
-        %144:i32 = add %x_124, 1i
-        store %i_2, %144
-        next_iteration %b17
+      $B18: {  # continuing
+        %207:i32 = load %i_2
+        %x_124:i32 = let %207
+        %209:i32 = add %x_124, 1i
+        store %i_2, %209
+        next_iteration  # -> $B17
       }
     }
-    %145:void = call %quicksort_
-    %x_127:vec4<f32> = load %x_GLF_FragCoord
-    %147:ptr<uniform, vec2<f32>, read> = access %x_36, 0u
-    %x_130:vec2<f32> = load %147
-    %149:f32 = access %x_127, 0u
-    %150:f32 = access %x_127, 1u
-    %151:vec2<f32> = construct %149, %150
-    %152:vec2<f32> = div %151, %x_130
-    store %uv, %152
+    %210:void = call %quicksort_
+    %211:vec4<f32> = load %x_GLF_FragCoord
+    %x_127:vec4<f32> = let %211
+    %213:ptr<uniform, vec2<f32>, read> = access %x_36, 0u
+    %214:vec2<f32> = load %213
+    %x_130:vec2<f32> = let %214
+    %216:f32 = access %x_127, 0u
+    %217:f32 = access %x_127, 1u
+    %218:vec2<f32> = construct %216, %217
+    %219:vec2<f32> = div %218, %x_130
+    store %uv, %219
     store %color, vec3<f32>(1.0f, 2.0f, 3.0f)
-    %153:ptr<private, i32, read_write> = access %obj, 0u, 0i
-    %x_133:i32 = load %153
-    %x_136:f32 = load_vector_element %color, 0u
-    %156:f32 = convert %x_133
-    %157:f32 = add %x_136, %156
-    store_vector_element %color, 0u, %157
-    %x_140:f32 = load_vector_element %uv, 0u
-    %159:bool = gt %x_140, 0.25f
-    if %159 [t: %b22] {  # if_8
-      %b22 = block {  # true
-        %160:ptr<private, i32, read_write> = access %obj, 0u, 1i
-        %x_145:i32 = load %160
-        %x_148:f32 = load_vector_element %color, 0u
-        %163:f32 = convert %x_145
-        %164:f32 = add %x_148, %163
-        store_vector_element %color, 0u, %164
+    %220:ptr<private, i32, read_write> = access %obj, 0u, 0i
+    %221:i32 = load %220
+    %x_133:i32 = let %221
+    %223:f32 = load_vector_element %color, 0u
+    %x_136:f32 = let %223
+    %225:f32 = convert %x_133
+    %226:f32 = add %x_136, %225
+    store_vector_element %color, 0u, %226
+    %227:f32 = load_vector_element %uv, 0u
+    %x_140:f32 = let %227
+    %229:bool = gt %x_140, 0.25f
+    if %229 [t: $B22] {  # if_8
+      $B22: {  # true
+        %230:ptr<private, i32, read_write> = access %obj, 0u, 1i
+        %231:i32 = load %230
+        %x_145:i32 = let %231
+        %233:f32 = load_vector_element %color, 0u
+        %x_148:f32 = let %233
+        %235:f32 = convert %x_145
+        %236:f32 = add %x_148, %235
+        store_vector_element %color, 0u, %236
         exit_if  # if_8
       }
     }
-    %x_152:f32 = load_vector_element %uv, 0u
-    %166:bool = gt %x_152, 0.5f
-    if %166 [t: %b23] {  # if_9
-      %b23 = block {  # true
-        %167:ptr<private, i32, read_write> = access %obj, 0u, 2i
-        %x_157:i32 = load %167
-        %x_160:f32 = load_vector_element %color, 1u
-        %170:f32 = convert %x_157
-        %171:f32 = add %x_160, %170
-        store_vector_element %color, 1u, %171
+    %237:f32 = load_vector_element %uv, 0u
+    %x_152:f32 = let %237
+    %239:bool = gt %x_152, 0.5f
+    if %239 [t: $B23] {  # if_9
+      $B23: {  # true
+        %240:ptr<private, i32, read_write> = access %obj, 0u, 2i
+        %241:i32 = load %240
+        %x_157:i32 = let %241
+        %243:f32 = load_vector_element %color, 1u
+        %x_160:f32 = let %243
+        %245:f32 = convert %x_157
+        %246:f32 = add %x_160, %245
+        store_vector_element %color, 1u, %246
         exit_if  # if_9
       }
     }
-    %x_164:f32 = load_vector_element %uv, 0u
-    %173:bool = gt %x_164, 0.75f
-    if %173 [t: %b24] {  # if_10
-      %b24 = block {  # true
-        %174:ptr<private, i32, read_write> = access %obj, 0u, 3i
-        %x_169:i32 = load %174
-        %x_172:f32 = load_vector_element %color, 2u
-        %177:f32 = convert %x_169
-        %178:f32 = add %x_172, %177
-        store_vector_element %color, 2u, %178
+    %247:f32 = load_vector_element %uv, 0u
+    %x_164:f32 = let %247
+    %249:bool = gt %x_164, 0.75f
+    if %249 [t: $B24] {  # if_10
+      $B24: {  # true
+        %250:ptr<private, i32, read_write> = access %obj, 0u, 3i
+        %251:i32 = load %250
+        %x_169:i32 = let %251
+        %253:f32 = load_vector_element %color, 2u
+        %x_172:f32 = let %253
+        %255:f32 = convert %x_169
+        %256:f32 = add %x_172, %255
+        store_vector_element %color, 2u, %256
         exit_if  # if_10
       }
     }
-    %179:ptr<private, i32, read_write> = access %obj, 0u, 4i
-    %x_176:i32 = load %179
-    %x_179:f32 = load_vector_element %color, 1u
-    %182:f32 = convert %x_176
-    %183:f32 = add %x_179, %182
-    store_vector_element %color, 1u, %183
-    %x_183:f32 = load_vector_element %uv, 1u
-    %185:bool = gt %x_183, 0.25f
-    if %185 [t: %b25] {  # if_11
-      %b25 = block {  # true
-        %186:ptr<private, i32, read_write> = access %obj, 0u, 5i
-        %x_188:i32 = load %186
-        %x_191:f32 = load_vector_element %color, 0u
-        %189:f32 = convert %x_188
-        %190:f32 = add %x_191, %189
-        store_vector_element %color, 0u, %190
+    %257:ptr<private, i32, read_write> = access %obj, 0u, 4i
+    %258:i32 = load %257
+    %x_176:i32 = let %258
+    %260:f32 = load_vector_element %color, 1u
+    %x_179:f32 = let %260
+    %262:f32 = convert %x_176
+    %263:f32 = add %x_179, %262
+    store_vector_element %color, 1u, %263
+    %264:f32 = load_vector_element %uv, 1u
+    %x_183:f32 = let %264
+    %266:bool = gt %x_183, 0.25f
+    if %266 [t: $B25] {  # if_11
+      $B25: {  # true
+        %267:ptr<private, i32, read_write> = access %obj, 0u, 5i
+        %268:i32 = load %267
+        %x_188:i32 = let %268
+        %270:f32 = load_vector_element %color, 0u
+        %x_191:f32 = let %270
+        %272:f32 = convert %x_188
+        %273:f32 = add %x_191, %272
+        store_vector_element %color, 0u, %273
         exit_if  # if_11
       }
     }
-    %x_195:f32 = load_vector_element %uv, 1u
-    %192:bool = gt %x_195, 0.5f
-    if %192 [t: %b26] {  # if_12
-      %b26 = block {  # true
-        %193:ptr<private, i32, read_write> = access %obj, 0u, 6i
-        %x_200:i32 = load %193
-        %x_203:f32 = load_vector_element %color, 1u
-        %196:f32 = convert %x_200
-        %197:f32 = add %x_203, %196
-        store_vector_element %color, 1u, %197
+    %274:f32 = load_vector_element %uv, 1u
+    %x_195:f32 = let %274
+    %276:bool = gt %x_195, 0.5f
+    if %276 [t: $B26] {  # if_12
+      $B26: {  # true
+        %277:ptr<private, i32, read_write> = access %obj, 0u, 6i
+        %278:i32 = load %277
+        %x_200:i32 = let %278
+        %280:f32 = load_vector_element %color, 1u
+        %x_203:f32 = let %280
+        %282:f32 = convert %x_200
+        %283:f32 = add %x_203, %282
+        store_vector_element %color, 1u, %283
         exit_if  # if_12
       }
     }
-    %x_207:f32 = load_vector_element %uv, 1u
-    %199:bool = gt %x_207, 0.75f
-    if %199 [t: %b27] {  # if_13
-      %b27 = block {  # true
-        %200:ptr<private, i32, read_write> = access %obj, 0u, 7i
-        %x_212:i32 = load %200
-        %x_215:f32 = load_vector_element %color, 2u
-        %203:f32 = convert %x_212
-        %204:f32 = add %x_215, %203
-        store_vector_element %color, 2u, %204
+    %284:f32 = load_vector_element %uv, 1u
+    %x_207:f32 = let %284
+    %286:bool = gt %x_207, 0.75f
+    if %286 [t: $B27] {  # if_13
+      $B27: {  # true
+        %287:ptr<private, i32, read_write> = access %obj, 0u, 7i
+        %288:i32 = load %287
+        %x_212:i32 = let %288
+        %290:f32 = load_vector_element %color, 2u
+        %x_215:f32 = let %290
+        %292:f32 = convert %x_212
+        %293:f32 = add %x_215, %292
+        store_vector_element %color, 2u, %293
         exit_if  # if_13
       }
     }
-    %205:ptr<private, i32, read_write> = access %obj, 0u, 8i
-    %x_219:i32 = load %205
-    %x_222:f32 = load_vector_element %color, 2u
-    %208:f32 = convert %x_219
-    %209:f32 = add %x_222, %208
-    store_vector_element %color, 2u, %209
-    %x_226:f32 = load_vector_element %uv, 0u
-    %x_228:f32 = load_vector_element %uv, 1u
-    %212:f32 = sub %x_226, %x_228
-    %213:f32 = abs %212
-    %214:bool = lt %213, 0.25f
-    if %214 [t: %b28] {  # if_14
-      %b28 = block {  # true
-        %215:ptr<private, i32, read_write> = access %obj, 0u, 9i
-        %x_235:i32 = load %215
-        %x_238:f32 = load_vector_element %color, 0u
-        %218:f32 = convert %x_235
-        %219:f32 = add %x_238, %218
-        store_vector_element %color, 0u, %219
+    %294:ptr<private, i32, read_write> = access %obj, 0u, 8i
+    %295:i32 = load %294
+    %x_219:i32 = let %295
+    %297:f32 = load_vector_element %color, 2u
+    %x_222:f32 = let %297
+    %299:f32 = convert %x_219
+    %300:f32 = add %x_222, %299
+    store_vector_element %color, 2u, %300
+    %301:f32 = load_vector_element %uv, 0u
+    %x_226:f32 = let %301
+    %303:f32 = load_vector_element %uv, 1u
+    %x_228:f32 = let %303
+    %305:f32 = sub %x_226, %x_228
+    %306:f32 = abs %305
+    %307:bool = lt %306, 0.25f
+    if %307 [t: $B28] {  # if_14
+      $B28: {  # true
+        %308:ptr<private, i32, read_write> = access %obj, 0u, 9i
+        %309:i32 = load %308
+        %x_235:i32 = let %309
+        %311:f32 = load_vector_element %color, 0u
+        %x_238:f32 = let %311
+        %313:f32 = convert %x_235
+        %314:f32 = add %x_238, %313
+        store_vector_element %color, 0u, %314
         exit_if  # if_14
       }
     }
-    %x_241:vec3<f32> = load %color
-    %x_242:vec3<f32> = normalize %x_241
-    %222:f32 = access %x_242, 0u
-    %223:f32 = access %x_242, 1u
-    %224:f32 = access %x_242, 2u
-    %225:vec4<f32> = construct %222, %223, %224, 1.0f
-    store %frag_color, %225
-    %x_247:vec4<f32> = load %x_GLF_pos
+    %315:vec3<f32> = load %color
+    %x_241:vec3<f32> = let %315
+    %317:vec3<f32> = normalize %x_241
+    %x_242:vec3<f32> = let %317
+    %319:f32 = access %x_242, 0u
+    %320:f32 = access %x_242, 1u
+    %321:f32 = access %x_242, 2u
+    %322:vec4<f32> = construct %319, %320, %321, 1.0f
+    store %frag_color, %322
+    %323:vec4<f32> = load %x_GLF_pos
+    %x_247:vec4<f32> = let %323
     store %gl_Position, %x_247
     ret
   }
 }
-%tint_symbol = @vertex func(%x_GLF_pos_param:vec4<f32> [@location(0)]):main_out -> %b29 {
-  %b29 = block {
+%tint_symbol = @vertex func(%x_GLF_pos_param:vec4<f32> [@location(0)]):main_out {
+  $B29: {
     store %x_GLF_pos, %x_GLF_pos_param
-    %229:void = call %main_1
-    %230:vec4<f32> = load %frag_color
-    %231:vec4<f32> = load %gl_Position
-    %232:main_out = construct %230, %231
-    ret %232
+    %327:void = call %main_1
+    %328:vec4<f32> = load %frag_color
+    %329:vec4<f32> = load %gl_Position
+    %330:main_out = construct %328, %329
+    ret %330
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/0.spvasm.expected.ir.msl
index c8e22d4..ac518cd 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: QuicksortObject = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: QuicksortObject = struct @align(4) {
   numbers:array<i32, 10> @offset(0)
 }
 
@@ -13,7 +13,7 @@
   gl_Position:vec4<f32> @offset(16), @builtin(position)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %obj:ptr<private, QuicksortObject, read_write> = var
   %x_GLF_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_pos:ptr<private, vec4<f32>, read_write> = var
@@ -22,8 +22,8 @@
   %gl_Position:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %x_90:ptr<function, i32, read_write> = var
     %x_91:ptr<function, i32, read_write> = var
     %x_92:ptr<function, i32, read_write> = var
@@ -49,387 +49,414 @@
     %30:vec4<f32> = mul %29, vec4<f32>(128.0f, 128.0f, 1.0f, 1.0f)
     store %x_GLF_FragCoord, %30
     store %i_2, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %31:i32 = load %i_2
         %32:bool = lt %31, 10i
-        if %32 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %32 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_117:i32 = load %i_2
-        %34:ptr<private, i32, read_write> = access %obj, 0u, %x_117
-        %35:i32 = load %i_2
-        %36:i32 = sub 10i, %35
-        store %34, %36
-        %x_121:i32 = load %i_2
-        %38:ptr<private, i32, read_write> = access %obj, 0u, %x_121
-        %39:i32 = load %i_2
-        %40:ptr<private, i32, read_write> = access %obj, 0u, %39
-        %41:i32 = load %40
-        %42:i32 = load %i_2
-        %43:ptr<private, i32, read_write> = access %obj, 0u, %42
-        %44:i32 = load %43
-        %45:i32 = mul %41, %44
-        store %38, %45
-        continue %b4
+        %33:i32 = load %i_2
+        %x_117:i32 = let %33
+        %35:ptr<private, i32, read_write> = access %obj, 0u, %x_117
+        %36:i32 = load %i_2
+        %37:i32 = sub 10i, %36
+        store %35, %37
+        %38:i32 = load %i_2
+        %x_121:i32 = let %38
+        %40:ptr<private, i32, read_write> = access %obj, 0u, %x_121
+        %41:i32 = load %i_2
+        %42:ptr<private, i32, read_write> = access %obj, 0u, %41
+        %43:i32 = load %42
+        %44:i32 = load %i_2
+        %45:ptr<private, i32, read_write> = access %obj, 0u, %44
+        %46:i32 = load %45
+        %47:i32 = mul %43, %46
+        store %40, %47
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %46:i32 = load %i_2
-        %47:i32 = add %46, 1i
-        store %i_2, %47
-        next_iteration %b3
+      $B4: {  # continuing
+        %48:i32 = load %i_2
+        %49:i32 = add %48, 1i
+        store %i_2, %49
+        next_iteration  # -> $B3
       }
     }
     store %x_100, 0i
     store %x_101, 9i
     store %x_102, -1i
-    %48:i32 = load %x_102
-    %x_133:i32 = add %48, 1i
+    %50:i32 = load %x_102
+    %51:i32 = add %50, 1i
+    %x_133:i32 = let %51
     store %x_102, %x_133
-    %50:ptr<function, i32, read_write> = access %x_103, %x_133
-    %51:i32 = load %x_100
-    store %50, %51
-    %52:i32 = load %x_102
-    %x_137:i32 = add %52, 1i
+    %53:ptr<function, i32, read_write> = access %x_103, %x_133
+    %54:i32 = load %x_100
+    store %53, %54
+    %55:i32 = load %x_102
+    %56:i32 = add %55, 1i
+    %x_137:i32 = let %56
     store %x_102, %x_137
-    %54:ptr<function, i32, read_write> = access %x_103, %x_137
-    %55:i32 = load %x_101
-    store %54, %55
-    loop [b: %b7, c: %b8] {  # loop_2
-      %b7 = block {  # body
-        %56:i32 = load %x_102
-        %57:bool = gte %56, 0i
-        if %57 [t: %b9, f: %b10] {  # if_2
-          %b9 = block {  # true
+    %58:ptr<function, i32, read_write> = access %x_103, %x_137
+    %59:i32 = load %x_101
+    store %58, %59
+    loop [b: $B7, c: $B8] {  # loop_2
+      $B7: {  # body
+        %60:i32 = load %x_102
+        %61:bool = gte %60, 0i
+        if %61 [t: $B9, f: $B10] {  # if_2
+          $B9: {  # true
             exit_if  # if_2
           }
-          %b10 = block {  # false
+          $B10: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_147:i32 = load %x_102
-        %59:i32 = load %x_102
-        %60:i32 = sub %59, 1i
-        store %x_102, %60
-        %61:ptr<function, i32, read_write> = access %x_103, %x_147
-        %62:i32 = load %61
-        store %x_101, %62
-        %x_151:i32 = load %x_102
+        %62:i32 = load %x_102
+        %x_147:i32 = let %62
         %64:i32 = load %x_102
         %65:i32 = sub %64, 1i
         store %x_102, %65
-        %66:ptr<function, i32, read_write> = access %x_103, %x_151
+        %66:ptr<function, i32, read_write> = access %x_103, %x_147
         %67:i32 = load %66
-        store %x_100, %67
-        %68:i32 = load %x_100
-        store %x_105, %68
-        %69:i32 = load %x_101
-        store %x_106, %69
-        %70:i32 = load %x_106
-        %71:ptr<private, i32, read_write> = access %obj, 0u, %70
-        %72:i32 = load %71
-        store %x_92, %72
-        %73:i32 = load %x_105
-        %74:i32 = sub %73, 1i
-        store %x_93, %74
-        %75:i32 = load %x_105
-        store %x_94, %75
-        loop [b: %b11, c: %b12] {  # loop_3
-          %b11 = block {  # body
-            %76:i32 = load %x_94
-            %77:i32 = load %x_106
-            %78:i32 = sub %77, 1i
-            %79:bool = lte %76, %78
-            if %79 [t: %b13, f: %b14] {  # if_3
-              %b13 = block {  # true
+        store %x_101, %67
+        %68:i32 = load %x_102
+        %x_151:i32 = let %68
+        %70:i32 = load %x_102
+        %71:i32 = sub %70, 1i
+        store %x_102, %71
+        %72:ptr<function, i32, read_write> = access %x_103, %x_151
+        %73:i32 = load %72
+        store %x_100, %73
+        %74:i32 = load %x_100
+        store %x_105, %74
+        %75:i32 = load %x_101
+        store %x_106, %75
+        %76:i32 = load %x_106
+        %77:ptr<private, i32, read_write> = access %obj, 0u, %76
+        %78:i32 = load %77
+        store %x_92, %78
+        %79:i32 = load %x_105
+        %80:i32 = sub %79, 1i
+        store %x_93, %80
+        %81:i32 = load %x_105
+        store %x_94, %81
+        loop [b: $B11, c: $B12] {  # loop_3
+          $B11: {  # body
+            %82:i32 = load %x_94
+            %83:i32 = load %x_106
+            %84:i32 = sub %83, 1i
+            %85:bool = lte %82, %84
+            if %85 [t: $B13, f: $B14] {  # if_3
+              $B13: {  # true
                 exit_if  # if_3
               }
-              %b14 = block {  # false
+              $B14: {  # false
                 exit_loop  # loop_3
               }
             }
-            %80:i32 = load %x_94
-            %81:ptr<private, i32, read_write> = access %obj, 0u, %80
-            %82:i32 = load %81
-            %83:i32 = load %x_92
-            %84:bool = lte %82, %83
-            if %84 [t: %b15] {  # if_4
-              %b15 = block {  # true
-                %85:i32 = load %x_93
-                %86:i32 = add %85, 1i
-                store %x_93, %86
-                %87:i32 = load %x_93
-                store %x_95, %87
-                %88:i32 = load %x_94
-                store %x_96, %88
-                %89:i32 = load %x_95
-                %90:ptr<private, i32, read_write> = access %obj, 0u, %89
-                %91:i32 = load %90
-                store %x_91, %91
-                %x_186:i32 = load %x_95
-                %93:ptr<private, i32, read_write> = access %obj, 0u, %x_186
-                %94:i32 = load %x_96
-                %95:ptr<private, i32, read_write> = access %obj, 0u, %94
-                %96:i32 = load %95
-                store %93, %96
-                %x_191:i32 = load %x_96
-                %98:ptr<private, i32, read_write> = access %obj, 0u, %x_191
-                %99:i32 = load %x_91
-                store %98, %99
+            %86:i32 = load %x_94
+            %87:ptr<private, i32, read_write> = access %obj, 0u, %86
+            %88:i32 = load %87
+            %89:i32 = load %x_92
+            %90:bool = lte %88, %89
+            if %90 [t: $B15] {  # if_4
+              $B15: {  # true
+                %91:i32 = load %x_93
+                %92:i32 = add %91, 1i
+                store %x_93, %92
+                %93:i32 = load %x_93
+                store %x_95, %93
+                %94:i32 = load %x_94
+                store %x_96, %94
+                %95:i32 = load %x_95
+                %96:ptr<private, i32, read_write> = access %obj, 0u, %95
+                %97:i32 = load %96
+                store %x_91, %97
+                %98:i32 = load %x_95
+                %x_186:i32 = let %98
+                %100:ptr<private, i32, read_write> = access %obj, 0u, %x_186
+                %101:i32 = load %x_96
+                %102:ptr<private, i32, read_write> = access %obj, 0u, %101
+                %103:i32 = load %102
+                store %100, %103
+                %104:i32 = load %x_96
+                %x_191:i32 = let %104
+                %106:ptr<private, i32, read_write> = access %obj, 0u, %x_191
+                %107:i32 = load %x_91
+                store %106, %107
                 exit_if  # if_4
               }
             }
-            continue %b12
+            continue  # -> $B12
           }
-          %b12 = block {  # continuing
-            %100:i32 = load %x_94
-            %101:i32 = add %100, 1i
-            store %x_94, %101
-            next_iteration %b11
+          $B12: {  # continuing
+            %108:i32 = load %x_94
+            %109:i32 = add %108, 1i
+            store %x_94, %109
+            next_iteration  # -> $B11
           }
         }
-        %102:i32 = load %x_93
-        %103:i32 = add %102, 1i
-        store %x_97, %103
-        %104:i32 = load %x_106
-        store %x_98, %104
-        %105:i32 = load %x_97
-        %106:ptr<private, i32, read_write> = access %obj, 0u, %105
-        %107:i32 = load %106
-        store %x_90, %107
-        %x_202:i32 = load %x_97
-        %109:ptr<private, i32, read_write> = access %obj, 0u, %x_202
-        %110:i32 = load %x_98
-        %111:ptr<private, i32, read_write> = access %obj, 0u, %110
-        %112:i32 = load %111
-        store %109, %112
-        %x_207:i32 = load %x_98
-        %114:ptr<private, i32, read_write> = access %obj, 0u, %x_207
-        %115:i32 = load %x_90
-        store %114, %115
-        %116:i32 = load %x_93
-        %117:i32 = add %116, 1i
-        store %x_99, %117
-        %118:i32 = load %x_99
-        store %x_104, %118
-        %119:i32 = load %x_104
-        %120:i32 = sub %119, 1i
-        %121:i32 = load %x_100
-        %122:bool = gt %120, %121
-        if %122 [t: %b16] {  # if_5
-          %b16 = block {  # true
-            %123:i32 = load %x_102
-            %x_220:i32 = add %123, 1i
+        %110:i32 = load %x_93
+        %111:i32 = add %110, 1i
+        store %x_97, %111
+        %112:i32 = load %x_106
+        store %x_98, %112
+        %113:i32 = load %x_97
+        %114:ptr<private, i32, read_write> = access %obj, 0u, %113
+        %115:i32 = load %114
+        store %x_90, %115
+        %116:i32 = load %x_97
+        %x_202:i32 = let %116
+        %118:ptr<private, i32, read_write> = access %obj, 0u, %x_202
+        %119:i32 = load %x_98
+        %120:ptr<private, i32, read_write> = access %obj, 0u, %119
+        %121:i32 = load %120
+        store %118, %121
+        %122:i32 = load %x_98
+        %x_207:i32 = let %122
+        %124:ptr<private, i32, read_write> = access %obj, 0u, %x_207
+        %125:i32 = load %x_90
+        store %124, %125
+        %126:i32 = load %x_93
+        %127:i32 = add %126, 1i
+        store %x_99, %127
+        %128:i32 = load %x_99
+        store %x_104, %128
+        %129:i32 = load %x_104
+        %130:i32 = sub %129, 1i
+        %131:i32 = load %x_100
+        %132:bool = gt %130, %131
+        if %132 [t: $B16] {  # if_5
+          $B16: {  # true
+            %133:i32 = load %x_102
+            %134:i32 = add %133, 1i
+            %x_220:i32 = let %134
             store %x_102, %x_220
-            %125:ptr<function, i32, read_write> = access %x_103, %x_220
-            %126:i32 = load %x_100
-            store %125, %126
-            %127:i32 = load %x_102
-            %x_224:i32 = add %127, 1i
+            %136:ptr<function, i32, read_write> = access %x_103, %x_220
+            %137:i32 = load %x_100
+            store %136, %137
+            %138:i32 = load %x_102
+            %139:i32 = add %138, 1i
+            %x_224:i32 = let %139
             store %x_102, %x_224
-            %129:ptr<function, i32, read_write> = access %x_103, %x_224
-            %130:i32 = load %x_104
-            %131:i32 = sub %130, 1i
-            store %129, %131
+            %141:ptr<function, i32, read_write> = access %x_103, %x_224
+            %142:i32 = load %x_104
+            %143:i32 = sub %142, 1i
+            store %141, %143
             exit_if  # if_5
           }
         }
-        %132:i32 = load %x_104
-        %133:i32 = add %132, 1i
-        %134:i32 = load %x_101
-        %135:bool = lt %133, %134
-        if %135 [t: %b17] {  # if_6
-          %b17 = block {  # true
-            %136:i32 = load %x_102
-            %x_235:i32 = add %136, 1i
+        %144:i32 = load %x_104
+        %145:i32 = add %144, 1i
+        %146:i32 = load %x_101
+        %147:bool = lt %145, %146
+        if %147 [t: $B17] {  # if_6
+          $B17: {  # true
+            %148:i32 = load %x_102
+            %149:i32 = add %148, 1i
+            %x_235:i32 = let %149
             store %x_102, %x_235
-            %138:ptr<function, i32, read_write> = access %x_103, %x_235
-            %139:i32 = load %x_104
-            %140:i32 = add %139, 1i
-            store %138, %140
-            %141:i32 = load %x_102
-            %x_240:i32 = add %141, 1i
+            %151:ptr<function, i32, read_write> = access %x_103, %x_235
+            %152:i32 = load %x_104
+            %153:i32 = add %152, 1i
+            store %151, %153
+            %154:i32 = load %x_102
+            %155:i32 = add %154, 1i
+            %x_240:i32 = let %155
             store %x_102, %x_240
-            %143:ptr<function, i32, read_write> = access %x_103, %x_240
-            %144:i32 = load %x_101
-            store %143, %144
+            %157:ptr<function, i32, read_write> = access %x_103, %x_240
+            %158:i32 = load %x_101
+            store %157, %158
             exit_if  # if_6
           }
         }
-        continue %b8
+        continue  # -> $B8
       }
-      %b8 = block {  # continuing
-        next_iteration %b7
+      $B8: {  # continuing
+        next_iteration  # -> $B7
       }
     }
-    %145:vec4<f32> = load %x_GLF_FragCoord
-    %146:vec2<f32> = swizzle %145, xy
-    %147:ptr<uniform, vec2<f32>, read> = access %x_34, 0u
-    %148:vec2<f32> = load %147
-    %149:vec2<f32> = div %146, %148
-    store %uv, %149
+    %159:vec4<f32> = load %x_GLF_FragCoord
+    %160:vec2<f32> = swizzle %159, xy
+    %161:ptr<uniform, vec2<f32>, read> = access %x_34, 0u
+    %162:vec2<f32> = load %161
+    %163:vec2<f32> = div %160, %162
+    store %uv, %163
     store %color, vec3<f32>(1.0f, 2.0f, 3.0f)
-    %150:f32 = load_vector_element %color, 0u
-    %151:ptr<private, i32, read_write> = access %obj, 0u, 0i
-    %152:i32 = load %151
-    %153:f32 = convert %152
-    %154:f32 = add %150, %153
-    store_vector_element %color, 0u, %154
-    %155:f32 = load_vector_element %uv, 0u
-    %156:bool = gt %155, 0.25f
-    if %156 [t: %b18] {  # if_7
-      %b18 = block {  # true
-        %157:f32 = load_vector_element %color, 0u
-        %158:ptr<private, i32, read_write> = access %obj, 0u, 1i
-        %159:i32 = load %158
-        %160:f32 = convert %159
-        %161:f32 = add %157, %160
-        store_vector_element %color, 0u, %161
+    %164:f32 = load_vector_element %color, 0u
+    %165:f32 = let %164
+    %166:ptr<private, i32, read_write> = access %obj, 0u, 0i
+    %167:i32 = load %166
+    %168:f32 = convert %167
+    %169:f32 = add %165, %168
+    store_vector_element %color, 0u, %169
+    %170:f32 = load_vector_element %uv, 0u
+    %171:bool = gt %170, 0.25f
+    if %171 [t: $B18] {  # if_7
+      $B18: {  # true
+        %172:f32 = load_vector_element %color, 0u
+        %173:f32 = let %172
+        %174:ptr<private, i32, read_write> = access %obj, 0u, 1i
+        %175:i32 = load %174
+        %176:f32 = convert %175
+        %177:f32 = add %173, %176
+        store_vector_element %color, 0u, %177
         exit_if  # if_7
       }
     }
-    %162:f32 = load_vector_element %uv, 0u
-    %163:bool = gt %162, 0.5f
-    if %163 [t: %b19] {  # if_8
-      %b19 = block {  # true
-        %164:f32 = load_vector_element %color, 1u
-        %165:ptr<private, i32, read_write> = access %obj, 0u, 2i
-        %166:i32 = load %165
-        %167:f32 = convert %166
-        %168:f32 = add %164, %167
-        store_vector_element %color, 1u, %168
+    %178:f32 = load_vector_element %uv, 0u
+    %179:bool = gt %178, 0.5f
+    if %179 [t: $B19] {  # if_8
+      $B19: {  # true
+        %180:f32 = load_vector_element %color, 1u
+        %181:f32 = let %180
+        %182:ptr<private, i32, read_write> = access %obj, 0u, 2i
+        %183:i32 = load %182
+        %184:f32 = convert %183
+        %185:f32 = add %181, %184
+        store_vector_element %color, 1u, %185
         exit_if  # if_8
       }
     }
-    %169:f32 = load_vector_element %uv, 0u
-    %170:bool = gt %169, 0.75f
-    if %170 [t: %b20] {  # if_9
-      %b20 = block {  # true
-        %171:f32 = load_vector_element %color, 2u
-        %172:ptr<private, i32, read_write> = access %obj, 0u, 3i
-        %173:i32 = load %172
-        %174:f32 = convert %173
-        %175:f32 = add %171, %174
-        store_vector_element %color, 2u, %175
+    %186:f32 = load_vector_element %uv, 0u
+    %187:bool = gt %186, 0.75f
+    if %187 [t: $B20] {  # if_9
+      $B20: {  # true
+        %188:f32 = load_vector_element %color, 2u
+        %189:f32 = let %188
+        %190:ptr<private, i32, read_write> = access %obj, 0u, 3i
+        %191:i32 = load %190
+        %192:f32 = convert %191
+        %193:f32 = add %189, %192
+        store_vector_element %color, 2u, %193
         exit_if  # if_9
       }
     }
-    %176:f32 = load_vector_element %color, 1u
-    %177:ptr<private, i32, read_write> = access %obj, 0u, 4i
-    %178:i32 = load %177
-    %179:f32 = convert %178
-    %180:f32 = add %176, %179
-    store_vector_element %color, 1u, %180
-    %181:f32 = load_vector_element %uv, 1u
-    %182:bool = gt %181, 0.25f
-    if %182 [t: %b21] {  # if_10
-      %b21 = block {  # true
-        %183:f32 = load_vector_element %color, 0u
-        %184:ptr<private, i32, read_write> = access %obj, 0u, 5i
-        %185:i32 = load %184
-        %186:f32 = convert %185
-        %187:f32 = add %183, %186
-        store_vector_element %color, 0u, %187
+    %194:f32 = load_vector_element %color, 1u
+    %195:f32 = let %194
+    %196:ptr<private, i32, read_write> = access %obj, 0u, 4i
+    %197:i32 = load %196
+    %198:f32 = convert %197
+    %199:f32 = add %195, %198
+    store_vector_element %color, 1u, %199
+    %200:f32 = load_vector_element %uv, 1u
+    %201:bool = gt %200, 0.25f
+    if %201 [t: $B21] {  # if_10
+      $B21: {  # true
+        %202:f32 = load_vector_element %color, 0u
+        %203:f32 = let %202
+        %204:ptr<private, i32, read_write> = access %obj, 0u, 5i
+        %205:i32 = load %204
+        %206:f32 = convert %205
+        %207:f32 = add %203, %206
+        store_vector_element %color, 0u, %207
         exit_if  # if_10
       }
     }
-    %188:f32 = load_vector_element %uv, 1u
-    %189:bool = gt %188, 0.5f
-    if %189 [t: %b22] {  # if_11
-      %b22 = block {  # true
-        %190:f32 = load_vector_element %color, 1u
-        %191:ptr<private, i32, read_write> = access %obj, 0u, 6i
-        %192:i32 = load %191
-        %193:f32 = convert %192
-        %194:f32 = add %190, %193
-        store_vector_element %color, 1u, %194
+    %208:f32 = load_vector_element %uv, 1u
+    %209:bool = gt %208, 0.5f
+    if %209 [t: $B22] {  # if_11
+      $B22: {  # true
+        %210:f32 = load_vector_element %color, 1u
+        %211:f32 = let %210
+        %212:ptr<private, i32, read_write> = access %obj, 0u, 6i
+        %213:i32 = load %212
+        %214:f32 = convert %213
+        %215:f32 = add %211, %214
+        store_vector_element %color, 1u, %215
         exit_if  # if_11
       }
     }
-    %195:f32 = load_vector_element %uv, 1u
-    %196:bool = gt %195, 0.75f
-    if %196 [t: %b23] {  # if_12
-      %b23 = block {  # true
-        %197:f32 = load_vector_element %color, 2u
-        %198:ptr<private, i32, read_write> = access %obj, 0u, 7i
-        %199:i32 = load %198
-        %200:f32 = convert %199
-        %201:f32 = add %197, %200
-        store_vector_element %color, 2u, %201
+    %216:f32 = load_vector_element %uv, 1u
+    %217:bool = gt %216, 0.75f
+    if %217 [t: $B23] {  # if_12
+      $B23: {  # true
+        %218:f32 = load_vector_element %color, 2u
+        %219:f32 = let %218
+        %220:ptr<private, i32, read_write> = access %obj, 0u, 7i
+        %221:i32 = load %220
+        %222:f32 = convert %221
+        %223:f32 = add %219, %222
+        store_vector_element %color, 2u, %223
         exit_if  # if_12
       }
     }
-    %202:f32 = load_vector_element %color, 2u
-    %203:ptr<private, i32, read_write> = access %obj, 0u, 8i
-    %204:i32 = load %203
-    %205:f32 = convert %204
-    %206:f32 = add %202, %205
-    store_vector_element %color, 2u, %206
-    %207:f32 = load_vector_element %uv, 0u
-    %208:f32 = load_vector_element %uv, 1u
-    %209:f32 = sub %207, %208
-    %210:f32 = abs %209
-    %211:bool = lt %210, 0.25f
-    if %211 [t: %b24] {  # if_13
-      %b24 = block {  # true
-        %212:f32 = load_vector_element %color, 0u
-        %213:ptr<private, i32, read_write> = access %obj, 0u, 9i
-        %214:i32 = load %213
-        %215:f32 = convert %214
-        %216:f32 = add %212, %215
-        store_vector_element %color, 0u, %216
+    %224:f32 = load_vector_element %color, 2u
+    %225:f32 = let %224
+    %226:ptr<private, i32, read_write> = access %obj, 0u, 8i
+    %227:i32 = load %226
+    %228:f32 = convert %227
+    %229:f32 = add %225, %228
+    store_vector_element %color, 2u, %229
+    %230:f32 = load_vector_element %uv, 0u
+    %231:f32 = load_vector_element %uv, 1u
+    %232:f32 = sub %230, %231
+    %233:f32 = abs %232
+    %234:bool = lt %233, 0.25f
+    if %234 [t: $B24] {  # if_13
+      $B24: {  # true
+        %235:f32 = load_vector_element %color, 0u
+        %236:f32 = let %235
+        %237:ptr<private, i32, read_write> = access %obj, 0u, 9i
+        %238:i32 = load %237
+        %239:f32 = convert %238
+        %240:f32 = add %236, %239
+        store_vector_element %color, 0u, %240
         exit_if  # if_13
       }
     }
-    %217:vec3<f32> = load %color
-    %x_358:vec3<f32> = normalize %217
-    %219:f32 = access %x_358, 0u
-    %220:f32 = access %x_358, 1u
-    %221:f32 = access %x_358, 2u
-    %222:vec4<f32> = construct %219, %220, %221, 1.0f
-    store %frag_color, %222
-    %223:vec4<f32> = load %x_GLF_pos
-    store %gl_Position, %223
+    %241:vec3<f32> = load %color
+    %242:vec3<f32> = normalize %241
+    %x_358:vec3<f32> = let %242
+    %244:f32 = access %x_358, 0u
+    %245:f32 = access %x_358, 1u
+    %246:f32 = access %x_358, 2u
+    %247:vec4<f32> = construct %244, %245, %246, 1.0f
+    store %frag_color, %247
+    %248:vec4<f32> = load %x_GLF_pos
+    store %gl_Position, %248
     ret
   }
 }
-%tint_symbol = @vertex func(%x_GLF_pos_param:vec4<f32> [@location(0)]):main_out -> %b25 {
-  %b25 = block {
+%tint_symbol = @vertex func(%x_GLF_pos_param:vec4<f32> [@location(0)]):main_out {
+  $B25: {
     store %x_GLF_pos, %x_GLF_pos_param
-    %226:void = call %main_1
-    %227:vec4<f32> = load %frag_color
-    %228:vec4<f32> = load %gl_Position
-    %229:main_out = construct %227, %228
-    ret %229
+    %251:void = call %main_1
+    %252:vec4<f32> = load %frag_color
+    %253:vec4<f32> = load %gl_Position
+    %254:main_out = construct %252, %253
+    ret %254
   }
 }
-%swap_i1_i1_ = func(%i:ptr<function, i32, read_write>, %j:ptr<function, i32, read_write>):void -> %b26 {
-  %b26 = block {
+%swap_i1_i1_ = func(%i:ptr<function, i32, read_write>, %j:ptr<function, i32, read_write>):void {
+  $B26: {
     %temp:ptr<function, i32, read_write> = var
-    %234:i32 = load %i
-    %235:ptr<private, i32, read_write> = access %obj, 0u, %234
-    %236:i32 = load %235
-    store %temp, %236
-    %x_369:i32 = load %i
-    %238:ptr<private, i32, read_write> = access %obj, 0u, %x_369
-    %239:i32 = load %j
-    %240:ptr<private, i32, read_write> = access %obj, 0u, %239
-    %241:i32 = load %240
-    store %238, %241
-    %x_374:i32 = load %j
-    %243:ptr<private, i32, read_write> = access %obj, 0u, %x_374
-    %244:i32 = load %temp
-    store %243, %244
+    %259:i32 = load %i
+    %260:ptr<private, i32, read_write> = access %obj, 0u, %259
+    %261:i32 = load %260
+    store %temp, %261
+    %262:i32 = load %i
+    %x_369:i32 = let %262
+    %264:ptr<private, i32, read_write> = access %obj, 0u, %x_369
+    %265:i32 = load %j
+    %266:ptr<private, i32, read_write> = access %obj, 0u, %265
+    %267:i32 = load %266
+    store %264, %267
+    %268:i32 = load %j
+    %x_374:i32 = let %268
+    %270:ptr<private, i32, read_write> = access %obj, 0u, %x_374
+    %271:i32 = load %temp
+    store %270, %271
     ret
   }
 }
-%performPartition_i1_i1_ = func(%l:ptr<function, i32, read_write>, %h:ptr<function, i32, read_write>):i32 -> %b27 {
-  %b27 = block {
+%performPartition_i1_i1_ = func(%l:ptr<function, i32, read_write>, %h:ptr<function, i32, read_write>):i32 {
+  $B27: {
     %pivot:ptr<function, i32, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
     %j_1:ptr<function, i32, read_write> = var
@@ -437,69 +464,70 @@
     %param_1:ptr<function, i32, read_write> = var
     %param_2:ptr<function, i32, read_write> = var
     %param_3:ptr<function, i32, read_write> = var
-    %255:i32 = load %h
-    %256:ptr<private, i32, read_write> = access %obj, 0u, %255
-    %257:i32 = load %256
-    store %pivot, %257
-    %258:i32 = load %l
-    %259:i32 = sub %258, 1i
-    store %i_1, %259
-    %260:i32 = load %l
-    store %j_1, %260
-    loop [b: %b28, c: %b29] {  # loop_4
-      %b28 = block {  # body
-        %261:i32 = load %j_1
-        %262:i32 = load %h
-        %263:i32 = sub %262, 1i
-        %264:bool = lte %261, %263
-        if %264 [t: %b30, f: %b31] {  # if_14
-          %b30 = block {  # true
+    %282:i32 = load %h
+    %283:ptr<private, i32, read_write> = access %obj, 0u, %282
+    %284:i32 = load %283
+    store %pivot, %284
+    %285:i32 = load %l
+    %286:i32 = sub %285, 1i
+    store %i_1, %286
+    %287:i32 = load %l
+    store %j_1, %287
+    loop [b: $B28, c: $B29] {  # loop_4
+      $B28: {  # body
+        %288:i32 = load %j_1
+        %289:i32 = load %h
+        %290:i32 = sub %289, 1i
+        %291:bool = lte %288, %290
+        if %291 [t: $B30, f: $B31] {  # if_14
+          $B30: {  # true
             exit_if  # if_14
           }
-          %b31 = block {  # false
+          $B31: {  # false
             exit_loop  # loop_4
           }
         }
-        %265:i32 = load %j_1
-        %266:ptr<private, i32, read_write> = access %obj, 0u, %265
-        %267:i32 = load %266
-        %268:i32 = load %pivot
-        %269:bool = lte %267, %268
-        if %269 [t: %b32] {  # if_15
-          %b32 = block {  # true
-            %270:i32 = load %i_1
-            %271:i32 = add %270, 1i
-            store %i_1, %271
-            %272:i32 = load %i_1
-            store %param, %272
-            %273:i32 = load %j_1
-            store %param_1, %273
-            %274:void = call %swap_i1_i1_, %param, %param_1
+        %292:i32 = load %j_1
+        %293:ptr<private, i32, read_write> = access %obj, 0u, %292
+        %294:i32 = load %293
+        %295:i32 = load %pivot
+        %296:bool = lte %294, %295
+        if %296 [t: $B32] {  # if_15
+          $B32: {  # true
+            %297:i32 = load %i_1
+            %298:i32 = add %297, 1i
+            store %i_1, %298
+            %299:i32 = load %i_1
+            store %param, %299
+            %300:i32 = load %j_1
+            store %param_1, %300
+            %301:void = call %swap_i1_i1_, %param, %param_1
             exit_if  # if_15
           }
         }
-        continue %b29
+        continue  # -> $B29
       }
-      %b29 = block {  # continuing
-        %275:i32 = load %j_1
-        %276:i32 = add %275, 1i
-        store %j_1, %276
-        next_iteration %b28
+      $B29: {  # continuing
+        %302:i32 = load %j_1
+        %303:i32 = add %302, 1i
+        store %j_1, %303
+        next_iteration  # -> $B28
       }
     }
-    %277:i32 = load %i_1
-    %278:i32 = add %277, 1i
-    store %param_2, %278
-    %279:i32 = load %h
-    store %param_3, %279
-    %280:void = call %swap_i1_i1_, %param_2, %param_3
-    %x_411:i32 = load %i_1
-    %282:i32 = add %x_411, 1i
-    ret %282
+    %304:i32 = load %i_1
+    %305:i32 = add %304, 1i
+    store %param_2, %305
+    %306:i32 = load %h
+    store %param_3, %306
+    %307:void = call %swap_i1_i1_, %param_2, %param_3
+    %308:i32 = load %i_1
+    %x_411:i32 = let %308
+    %310:i32 = add %x_411, 1i
+    ret %310
   }
 }
-%quicksort_ = func():void -> %b33 {
-  %b33 = block {
+%quicksort_ = func():void {
+  $B33: {
     %l_1:ptr<function, i32, read_write> = var
     %h_1:ptr<function, i32, read_write> = var
     %top:ptr<function, i32, read_write> = var
@@ -510,98 +538,107 @@
     store %l_1, 0i
     store %h_1, 9i
     store %top, -1i
-    %291:i32 = load %top
-    %x_415:i32 = add %291, 1i
+    %319:i32 = load %top
+    %320:i32 = add %319, 1i
+    %x_415:i32 = let %320
     store %top, %x_415
-    %293:ptr<function, i32, read_write> = access %stack, %x_415
-    %294:i32 = load %l_1
-    store %293, %294
-    %295:i32 = load %top
-    %x_419:i32 = add %295, 1i
+    %322:ptr<function, i32, read_write> = access %stack, %x_415
+    %323:i32 = load %l_1
+    store %322, %323
+    %324:i32 = load %top
+    %325:i32 = add %324, 1i
+    %x_419:i32 = let %325
     store %top, %x_419
-    %297:ptr<function, i32, read_write> = access %stack, %x_419
-    %298:i32 = load %h_1
-    store %297, %298
-    loop [b: %b34, c: %b35] {  # loop_5
-      %b34 = block {  # body
-        %299:i32 = load %top
-        %300:bool = gte %299, 0i
-        if %300 [t: %b36, f: %b37] {  # if_16
-          %b36 = block {  # true
+    %327:ptr<function, i32, read_write> = access %stack, %x_419
+    %328:i32 = load %h_1
+    store %327, %328
+    loop [b: $B34, c: $B35] {  # loop_5
+      $B34: {  # body
+        %329:i32 = load %top
+        %330:bool = gte %329, 0i
+        if %330 [t: $B36, f: $B37] {  # if_16
+          $B36: {  # true
             exit_if  # if_16
           }
-          %b37 = block {  # false
+          $B37: {  # false
             exit_loop  # loop_5
           }
         }
-        %x_429:i32 = load %top
-        %302:i32 = load %top
-        %303:i32 = sub %302, 1i
-        store %top, %303
-        %304:ptr<function, i32, read_write> = access %stack, %x_429
-        %305:i32 = load %304
-        store %h_1, %305
-        %x_433:i32 = load %top
-        %307:i32 = load %top
-        %308:i32 = sub %307, 1i
-        store %top, %308
-        %309:ptr<function, i32, read_write> = access %stack, %x_433
-        %310:i32 = load %309
-        store %l_1, %310
-        %311:i32 = load %l_1
-        store %param_4, %311
-        %312:i32 = load %h_1
-        store %param_5, %312
-        %x_439:i32 = call %performPartition_i1_i1_, %param_4, %param_5
+        %331:i32 = load %top
+        %x_429:i32 = let %331
+        %333:i32 = load %top
+        %334:i32 = sub %333, 1i
+        store %top, %334
+        %335:ptr<function, i32, read_write> = access %stack, %x_429
+        %336:i32 = load %335
+        store %h_1, %336
+        %337:i32 = load %top
+        %x_433:i32 = let %337
+        %339:i32 = load %top
+        %340:i32 = sub %339, 1i
+        store %top, %340
+        %341:ptr<function, i32, read_write> = access %stack, %x_433
+        %342:i32 = load %341
+        store %l_1, %342
+        %343:i32 = load %l_1
+        store %param_4, %343
+        %344:i32 = load %h_1
+        store %param_5, %344
+        %345:i32 = call %performPartition_i1_i1_, %param_4, %param_5
+        %x_439:i32 = let %345
         store %p, %x_439
-        %314:i32 = load %p
-        %315:i32 = sub %314, 1i
-        %316:i32 = load %l_1
-        %317:bool = gt %315, %316
-        if %317 [t: %b38] {  # if_17
-          %b38 = block {  # true
-            %318:i32 = load %top
-            %x_447:i32 = add %318, 1i
+        %347:i32 = load %p
+        %348:i32 = sub %347, 1i
+        %349:i32 = load %l_1
+        %350:bool = gt %348, %349
+        if %350 [t: $B38] {  # if_17
+          $B38: {  # true
+            %351:i32 = load %top
+            %352:i32 = add %351, 1i
+            %x_447:i32 = let %352
             store %top, %x_447
-            %320:ptr<function, i32, read_write> = access %stack, %x_447
-            %321:i32 = load %l_1
-            store %320, %321
-            %322:i32 = load %top
-            %x_451:i32 = add %322, 1i
+            %354:ptr<function, i32, read_write> = access %stack, %x_447
+            %355:i32 = load %l_1
+            store %354, %355
+            %356:i32 = load %top
+            %357:i32 = add %356, 1i
+            %x_451:i32 = let %357
             store %top, %x_451
-            %324:ptr<function, i32, read_write> = access %stack, %x_451
-            %325:i32 = load %p
-            %326:i32 = sub %325, 1i
-            store %324, %326
+            %359:ptr<function, i32, read_write> = access %stack, %x_451
+            %360:i32 = load %p
+            %361:i32 = sub %360, 1i
+            store %359, %361
             exit_if  # if_17
           }
         }
-        %327:i32 = load %p
-        %328:i32 = add %327, 1i
-        %329:i32 = load %h_1
-        %330:bool = lt %328, %329
-        if %330 [t: %b39] {  # if_18
-          %b39 = block {  # true
-            %331:i32 = load %top
-            %x_462:i32 = add %331, 1i
+        %362:i32 = load %p
+        %363:i32 = add %362, 1i
+        %364:i32 = load %h_1
+        %365:bool = lt %363, %364
+        if %365 [t: $B39] {  # if_18
+          $B39: {  # true
+            %366:i32 = load %top
+            %367:i32 = add %366, 1i
+            %x_462:i32 = let %367
             store %top, %x_462
-            %333:ptr<function, i32, read_write> = access %stack, %x_462
-            %334:i32 = load %p
-            %335:i32 = add %334, 1i
-            store %333, %335
-            %336:i32 = load %top
-            %x_467:i32 = add %336, 1i
+            %369:ptr<function, i32, read_write> = access %stack, %x_462
+            %370:i32 = load %p
+            %371:i32 = add %370, 1i
+            store %369, %371
+            %372:i32 = load %top
+            %373:i32 = add %372, 1i
+            %x_467:i32 = let %373
             store %top, %x_467
-            %338:ptr<function, i32, read_write> = access %stack, %x_467
-            %339:i32 = load %h_1
-            store %338, %339
+            %375:ptr<function, i32, read_write> = access %stack, %x_467
+            %376:i32 = load %h_1
+            store %375, %376
             exit_if  # if_18
           }
         }
-        continue %b35
+        continue  # -> $B35
       }
-      %b35 = block {  # continuing
-        next_iteration %b34
+      $B35: {  # continuing
+        next_iteration  # -> $B34
       }
     }
     ret
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/0.wgsl.expected.ir.msl
index 9745417..096187bd 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/0.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: QuicksortObject = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: QuicksortObject = struct @align(4) {
   numbers:array<i32, 10> @offset(0)
 }
 
@@ -13,7 +13,7 @@
   gl_Position:vec4<f32> @offset(16), @builtin(position)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %obj:ptr<private, QuicksortObject, read_write> = var
   %x_GLF_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_pos:ptr<private, vec4<f32>, read_write> = var
@@ -22,8 +22,8 @@
   %gl_Position:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %x_90:ptr<function, i32, read_write> = var
     %x_91:ptr<function, i32, read_write> = var
     %x_92:ptr<function, i32, read_write> = var
@@ -44,392 +44,502 @@
     %i_2:ptr<function, i32, read_write> = var
     %uv:ptr<function, vec2<f32>, read_write> = var
     %color:ptr<function, vec3<f32>, read_write> = var
-    %x_107:vec4<f32> = load %x_GLF_pos
-    %29:vec4<f32> = add %x_107, vec4<f32>(1.0f, 1.0f, 0.0f, 0.0f)
-    %30:vec4<f32> = mul %29, vec4<f32>(128.0f, 128.0f, 1.0f, 1.0f)
-    store %x_GLF_FragCoord, %30
+    %28:vec4<f32> = load %x_GLF_pos
+    %x_107:vec4<f32> = let %28
+    %30:vec4<f32> = add %x_107, vec4<f32>(1.0f, 1.0f, 0.0f, 0.0f)
+    %31:vec4<f32> = mul %30, vec4<f32>(128.0f, 128.0f, 1.0f, 1.0f)
+    store %x_GLF_FragCoord, %31
     store %i_2, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_114:i32 = load %i_2
-        %32:bool = lt %x_114, 10i
-        if %32 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %32:i32 = load %i_2
+        %x_114:i32 = let %32
+        %34:bool = lt %x_114, 10i
+        if %34 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_117:i32 = load %i_2
-        %x_118:i32 = load %i_2
-        %35:ptr<private, i32, read_write> = access %obj, 0u, %x_117
-        %36:i32 = sub 10i, %x_118
-        store %35, %36
-        %x_121:i32 = load %i_2
-        %x_122:i32 = load %i_2
-        %39:ptr<private, i32, read_write> = access %obj, 0u, %x_122
-        %x_124:i32 = load %39
-        %x_125:i32 = load %i_2
-        %42:ptr<private, i32, read_write> = access %obj, 0u, %x_125
-        %x_127:i32 = load %42
-        %44:ptr<private, i32, read_write> = access %obj, 0u, %x_121
-        %45:i32 = mul %x_124, %x_127
-        store %44, %45
-        continue %b4
+        %35:i32 = load %i_2
+        %x_117:i32 = let %35
+        %37:i32 = load %i_2
+        %x_118:i32 = let %37
+        %39:ptr<private, i32, read_write> = access %obj, 0u, %x_117
+        %40:i32 = sub 10i, %x_118
+        store %39, %40
+        %41:i32 = load %i_2
+        %x_121:i32 = let %41
+        %43:i32 = load %i_2
+        %x_122:i32 = let %43
+        %45:ptr<private, i32, read_write> = access %obj, 0u, %x_122
+        %46:i32 = load %45
+        %x_124:i32 = let %46
+        %48:i32 = load %i_2
+        %x_125:i32 = let %48
+        %50:ptr<private, i32, read_write> = access %obj, 0u, %x_125
+        %51:i32 = load %50
+        %x_127:i32 = let %51
+        %53:ptr<private, i32, read_write> = access %obj, 0u, %x_121
+        %54:i32 = mul %x_124, %x_127
+        store %53, %54
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_130:i32 = load %i_2
-        %47:i32 = add %x_130, 1i
-        store %i_2, %47
-        next_iteration %b3
+      $B4: {  # continuing
+        %55:i32 = load %i_2
+        %x_130:i32 = let %55
+        %57:i32 = add %x_130, 1i
+        store %i_2, %57
+        next_iteration  # -> $B3
       }
     }
     store %x_100, 0i
     store %x_101, 9i
     store %x_102, -1i
-    %x_132:i32 = load %x_102
-    %x_133:i32 = add %x_132, 1i
+    %58:i32 = load %x_102
+    %x_132:i32 = let %58
+    %60:i32 = add %x_132, 1i
+    %x_133:i32 = let %60
     store %x_102, %x_133
-    %x_134:i32 = load %x_100
-    %51:ptr<function, i32, read_write> = access %x_103, %x_133
-    store %51, %x_134
-    %x_136:i32 = load %x_102
-    %x_137:i32 = add %x_136, 1i
+    %62:i32 = load %x_100
+    %x_134:i32 = let %62
+    %64:ptr<function, i32, read_write> = access %x_103, %x_133
+    store %64, %x_134
+    %65:i32 = load %x_102
+    %x_136:i32 = let %65
+    %67:i32 = add %x_136, 1i
+    %x_137:i32 = let %67
     store %x_102, %x_137
-    %x_138:i32 = load %x_101
-    %55:ptr<function, i32, read_write> = access %x_103, %x_137
-    store %55, %x_138
-    loop [b: %b7, c: %b8] {  # loop_2
-      %b7 = block {  # body
-        %x_144:i32 = load %x_102
-        %57:bool = gte %x_144, 0i
-        if %57 [t: %b9, f: %b10] {  # if_2
-          %b9 = block {  # true
+    %69:i32 = load %x_101
+    %x_138:i32 = let %69
+    %71:ptr<function, i32, read_write> = access %x_103, %x_137
+    store %71, %x_138
+    loop [b: $B7, c: $B8] {  # loop_2
+      $B7: {  # body
+        %72:i32 = load %x_102
+        %x_144:i32 = let %72
+        %74:bool = gte %x_144, 0i
+        if %74 [t: $B9, f: $B10] {  # if_2
+          $B9: {  # true
             exit_if  # if_2
           }
-          %b10 = block {  # false
+          $B10: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_147:i32 = load %x_102
-        %59:i32 = sub %x_147, 1i
-        store %x_102, %59
-        %60:ptr<function, i32, read_write> = access %x_103, %x_147
-        %x_150:i32 = load %60
+        %75:i32 = load %x_102
+        %x_147:i32 = let %75
+        %77:i32 = sub %x_147, 1i
+        store %x_102, %77
+        %78:ptr<function, i32, read_write> = access %x_103, %x_147
+        %79:i32 = load %78
+        %x_150:i32 = let %79
         store %x_101, %x_150
-        %x_151:i32 = load %x_102
-        %63:i32 = sub %x_151, 1i
-        store %x_102, %63
-        %64:ptr<function, i32, read_write> = access %x_103, %x_151
-        %x_154:i32 = load %64
+        %81:i32 = load %x_102
+        %x_151:i32 = let %81
+        %83:i32 = sub %x_151, 1i
+        store %x_102, %83
+        %84:ptr<function, i32, read_write> = access %x_103, %x_151
+        %85:i32 = load %84
+        %x_154:i32 = let %85
         store %x_100, %x_154
-        %x_155:i32 = load %x_100
+        %87:i32 = load %x_100
+        %x_155:i32 = let %87
         store %x_105, %x_155
-        %x_156:i32 = load %x_101
+        %89:i32 = load %x_101
+        %x_156:i32 = let %89
         store %x_106, %x_156
-        %x_157:i32 = load %x_106
-        %69:ptr<private, i32, read_write> = access %obj, 0u, %x_157
-        %x_159:i32 = load %69
+        %91:i32 = load %x_106
+        %x_157:i32 = let %91
+        %93:ptr<private, i32, read_write> = access %obj, 0u, %x_157
+        %94:i32 = load %93
+        %x_159:i32 = let %94
         store %x_92, %x_159
-        %x_160:i32 = load %x_105
-        %72:i32 = sub %x_160, 1i
-        store %x_93, %72
-        %x_162:i32 = load %x_105
+        %96:i32 = load %x_105
+        %x_160:i32 = let %96
+        %98:i32 = sub %x_160, 1i
+        store %x_93, %98
+        %99:i32 = load %x_105
+        %x_162:i32 = let %99
         store %x_94, %x_162
-        loop [b: %b11, c: %b12] {  # loop_3
-          %b11 = block {  # body
-            %x_167:i32 = load %x_94
-            %x_168:i32 = load %x_106
-            %76:i32 = sub %x_168, 1i
-            %77:bool = lte %x_167, %76
-            if %77 [t: %b13, f: %b14] {  # if_3
-              %b13 = block {  # true
+        loop [b: $B11, c: $B12] {  # loop_3
+          $B11: {  # body
+            %101:i32 = load %x_94
+            %x_167:i32 = let %101
+            %103:i32 = load %x_106
+            %x_168:i32 = let %103
+            %105:i32 = sub %x_168, 1i
+            %106:bool = lte %x_167, %105
+            if %106 [t: $B13, f: $B14] {  # if_3
+              $B13: {  # true
                 exit_if  # if_3
               }
-              %b14 = block {  # false
+              $B14: {  # false
                 exit_loop  # loop_3
               }
             }
-            %x_172:i32 = load %x_94
-            %79:ptr<private, i32, read_write> = access %obj, 0u, %x_172
-            %x_174:i32 = load %79
-            %x_175:i32 = load %x_92
-            %82:bool = lte %x_174, %x_175
-            if %82 [t: %b15] {  # if_4
-              %b15 = block {  # true
-                %x_179:i32 = load %x_93
-                %84:i32 = add %x_179, 1i
-                store %x_93, %84
-                %x_181:i32 = load %x_93
+            %107:i32 = load %x_94
+            %x_172:i32 = let %107
+            %109:ptr<private, i32, read_write> = access %obj, 0u, %x_172
+            %110:i32 = load %109
+            %x_174:i32 = let %110
+            %112:i32 = load %x_92
+            %x_175:i32 = let %112
+            %114:bool = lte %x_174, %x_175
+            if %114 [t: $B15] {  # if_4
+              $B15: {  # true
+                %115:i32 = load %x_93
+                %x_179:i32 = let %115
+                %117:i32 = add %x_179, 1i
+                store %x_93, %117
+                %118:i32 = load %x_93
+                %x_181:i32 = let %118
                 store %x_95, %x_181
-                %x_182:i32 = load %x_94
+                %120:i32 = load %x_94
+                %x_182:i32 = let %120
                 store %x_96, %x_182
-                %x_183:i32 = load %x_95
-                %88:ptr<private, i32, read_write> = access %obj, 0u, %x_183
-                %x_185:i32 = load %88
+                %122:i32 = load %x_95
+                %x_183:i32 = let %122
+                %124:ptr<private, i32, read_write> = access %obj, 0u, %x_183
+                %125:i32 = load %124
+                %x_185:i32 = let %125
                 store %x_91, %x_185
-                %x_186:i32 = load %x_95
-                %x_187:i32 = load %x_96
-                %92:ptr<private, i32, read_write> = access %obj, 0u, %x_187
-                %x_189:i32 = load %92
-                %94:ptr<private, i32, read_write> = access %obj, 0u, %x_186
-                store %94, %x_189
-                %x_191:i32 = load %x_96
-                %x_192:i32 = load %x_91
-                %97:ptr<private, i32, read_write> = access %obj, 0u, %x_191
-                store %97, %x_192
+                %127:i32 = load %x_95
+                %x_186:i32 = let %127
+                %129:i32 = load %x_96
+                %x_187:i32 = let %129
+                %131:ptr<private, i32, read_write> = access %obj, 0u, %x_187
+                %132:i32 = load %131
+                %x_189:i32 = let %132
+                %134:ptr<private, i32, read_write> = access %obj, 0u, %x_186
+                store %134, %x_189
+                %135:i32 = load %x_96
+                %x_191:i32 = let %135
+                %137:i32 = load %x_91
+                %x_192:i32 = let %137
+                %139:ptr<private, i32, read_write> = access %obj, 0u, %x_191
+                store %139, %x_192
                 exit_if  # if_4
               }
             }
-            continue %b12
+            continue  # -> $B12
           }
-          %b12 = block {  # continuing
-            %x_194:i32 = load %x_94
-            %99:i32 = add %x_194, 1i
-            store %x_94, %99
-            next_iteration %b11
+          $B12: {  # continuing
+            %140:i32 = load %x_94
+            %x_194:i32 = let %140
+            %142:i32 = add %x_194, 1i
+            store %x_94, %142
+            next_iteration  # -> $B11
           }
         }
-        %x_196:i32 = load %x_93
-        %101:i32 = add %x_196, 1i
-        store %x_97, %101
-        %x_198:i32 = load %x_106
+        %143:i32 = load %x_93
+        %x_196:i32 = let %143
+        %145:i32 = add %x_196, 1i
+        store %x_97, %145
+        %146:i32 = load %x_106
+        %x_198:i32 = let %146
         store %x_98, %x_198
-        %x_199:i32 = load %x_97
-        %104:ptr<private, i32, read_write> = access %obj, 0u, %x_199
-        %x_201:i32 = load %104
+        %148:i32 = load %x_97
+        %x_199:i32 = let %148
+        %150:ptr<private, i32, read_write> = access %obj, 0u, %x_199
+        %151:i32 = load %150
+        %x_201:i32 = let %151
         store %x_90, %x_201
-        %x_202:i32 = load %x_97
-        %x_203:i32 = load %x_98
-        %108:ptr<private, i32, read_write> = access %obj, 0u, %x_203
-        %x_205:i32 = load %108
-        %110:ptr<private, i32, read_write> = access %obj, 0u, %x_202
-        store %110, %x_205
-        %x_207:i32 = load %x_98
-        %x_208:i32 = load %x_90
-        %113:ptr<private, i32, read_write> = access %obj, 0u, %x_207
-        store %113, %x_208
-        %x_210:i32 = load %x_93
-        %115:i32 = add %x_210, 1i
-        store %x_99, %115
-        %x_212:i32 = load %x_99
+        %153:i32 = load %x_97
+        %x_202:i32 = let %153
+        %155:i32 = load %x_98
+        %x_203:i32 = let %155
+        %157:ptr<private, i32, read_write> = access %obj, 0u, %x_203
+        %158:i32 = load %157
+        %x_205:i32 = let %158
+        %160:ptr<private, i32, read_write> = access %obj, 0u, %x_202
+        store %160, %x_205
+        %161:i32 = load %x_98
+        %x_207:i32 = let %161
+        %163:i32 = load %x_90
+        %x_208:i32 = let %163
+        %165:ptr<private, i32, read_write> = access %obj, 0u, %x_207
+        store %165, %x_208
+        %166:i32 = load %x_93
+        %x_210:i32 = let %166
+        %168:i32 = add %x_210, 1i
+        store %x_99, %168
+        %169:i32 = load %x_99
+        %x_212:i32 = let %169
         store %x_104, %x_212
-        %x_213:i32 = load %x_104
-        %x_215:i32 = load %x_100
-        %119:i32 = sub %x_213, 1i
-        %120:bool = gt %119, %x_215
-        if %120 [t: %b16] {  # if_5
-          %b16 = block {  # true
-            %x_219:i32 = load %x_102
-            %x_220:i32 = add %x_219, 1i
+        %171:i32 = load %x_104
+        %x_213:i32 = let %171
+        %173:i32 = load %x_100
+        %x_215:i32 = let %173
+        %175:i32 = sub %x_213, 1i
+        %176:bool = gt %175, %x_215
+        if %176 [t: $B16] {  # if_5
+          $B16: {  # true
+            %177:i32 = load %x_102
+            %x_219:i32 = let %177
+            %179:i32 = add %x_219, 1i
+            %x_220:i32 = let %179
             store %x_102, %x_220
-            %x_221:i32 = load %x_100
-            %124:ptr<function, i32, read_write> = access %x_103, %x_220
-            store %124, %x_221
-            %x_223:i32 = load %x_102
-            %x_224:i32 = add %x_223, 1i
+            %181:i32 = load %x_100
+            %x_221:i32 = let %181
+            %183:ptr<function, i32, read_write> = access %x_103, %x_220
+            store %183, %x_221
+            %184:i32 = load %x_102
+            %x_223:i32 = let %184
+            %186:i32 = add %x_223, 1i
+            %x_224:i32 = let %186
             store %x_102, %x_224
-            %x_225:i32 = load %x_104
-            %128:ptr<function, i32, read_write> = access %x_103, %x_224
-            %129:i32 = sub %x_225, 1i
-            store %128, %129
+            %188:i32 = load %x_104
+            %x_225:i32 = let %188
+            %190:ptr<function, i32, read_write> = access %x_103, %x_224
+            %191:i32 = sub %x_225, 1i
+            store %190, %191
             exit_if  # if_5
           }
         }
-        %x_228:i32 = load %x_104
-        %x_230:i32 = load %x_101
-        %132:i32 = add %x_228, 1i
-        %133:bool = lt %132, %x_230
-        if %133 [t: %b17] {  # if_6
-          %b17 = block {  # true
-            %x_234:i32 = load %x_102
-            %x_235:i32 = add %x_234, 1i
+        %192:i32 = load %x_104
+        %x_228:i32 = let %192
+        %194:i32 = load %x_101
+        %x_230:i32 = let %194
+        %196:i32 = add %x_228, 1i
+        %197:bool = lt %196, %x_230
+        if %197 [t: $B17] {  # if_6
+          $B17: {  # true
+            %198:i32 = load %x_102
+            %x_234:i32 = let %198
+            %200:i32 = add %x_234, 1i
+            %x_235:i32 = let %200
             store %x_102, %x_235
-            %x_236:i32 = load %x_104
-            %137:ptr<function, i32, read_write> = access %x_103, %x_235
-            %138:i32 = add %x_236, 1i
-            store %137, %138
-            %x_239:i32 = load %x_102
-            %x_240:i32 = add %x_239, 1i
+            %202:i32 = load %x_104
+            %x_236:i32 = let %202
+            %204:ptr<function, i32, read_write> = access %x_103, %x_235
+            %205:i32 = add %x_236, 1i
+            store %204, %205
+            %206:i32 = load %x_102
+            %x_239:i32 = let %206
+            %208:i32 = add %x_239, 1i
+            %x_240:i32 = let %208
             store %x_102, %x_240
-            %x_241:i32 = load %x_101
-            %142:ptr<function, i32, read_write> = access %x_103, %x_240
-            store %142, %x_241
+            %210:i32 = load %x_101
+            %x_241:i32 = let %210
+            %212:ptr<function, i32, read_write> = access %x_103, %x_240
+            store %212, %x_241
             exit_if  # if_6
           }
         }
-        continue %b8
+        continue  # -> $B8
       }
-      %b8 = block {  # continuing
-        next_iteration %b7
+      $B8: {  # continuing
+        next_iteration  # -> $B7
       }
     }
-    %x_243:vec4<f32> = load %x_GLF_FragCoord
-    %144:ptr<uniform, vec2<f32>, read> = access %x_34, 0u
-    %x_246:vec2<f32> = load %144
-    %146:f32 = access %x_243, 0u
-    %147:f32 = access %x_243, 1u
-    %148:vec2<f32> = construct %146, %147
-    %149:vec2<f32> = div %148, %x_246
-    store %uv, %149
+    %213:vec4<f32> = load %x_GLF_FragCoord
+    %x_243:vec4<f32> = let %213
+    %215:ptr<uniform, vec2<f32>, read> = access %x_34, 0u
+    %216:vec2<f32> = load %215
+    %x_246:vec2<f32> = let %216
+    %218:f32 = access %x_243, 0u
+    %219:f32 = access %x_243, 1u
+    %220:vec2<f32> = construct %218, %219
+    %221:vec2<f32> = div %220, %x_246
+    store %uv, %221
     store %color, vec3<f32>(1.0f, 2.0f, 3.0f)
-    %150:ptr<private, i32, read_write> = access %obj, 0u, 0i
-    %x_249:i32 = load %150
-    %x_252:f32 = load_vector_element %color, 0u
-    %153:f32 = convert %x_249
-    %154:f32 = add %x_252, %153
-    store_vector_element %color, 0u, %154
-    %x_256:f32 = load_vector_element %uv, 0u
-    %156:bool = gt %x_256, 0.25f
-    if %156 [t: %b18] {  # if_7
-      %b18 = block {  # true
-        %157:ptr<private, i32, read_write> = access %obj, 0u, 1i
-        %x_261:i32 = load %157
-        %x_264:f32 = load_vector_element %color, 0u
-        %160:f32 = convert %x_261
-        %161:f32 = add %x_264, %160
-        store_vector_element %color, 0u, %161
+    %222:ptr<private, i32, read_write> = access %obj, 0u, 0i
+    %223:i32 = load %222
+    %x_249:i32 = let %223
+    %225:f32 = load_vector_element %color, 0u
+    %x_252:f32 = let %225
+    %227:f32 = convert %x_249
+    %228:f32 = add %x_252, %227
+    store_vector_element %color, 0u, %228
+    %229:f32 = load_vector_element %uv, 0u
+    %x_256:f32 = let %229
+    %231:bool = gt %x_256, 0.25f
+    if %231 [t: $B18] {  # if_7
+      $B18: {  # true
+        %232:ptr<private, i32, read_write> = access %obj, 0u, 1i
+        %233:i32 = load %232
+        %x_261:i32 = let %233
+        %235:f32 = load_vector_element %color, 0u
+        %x_264:f32 = let %235
+        %237:f32 = convert %x_261
+        %238:f32 = add %x_264, %237
+        store_vector_element %color, 0u, %238
         exit_if  # if_7
       }
     }
-    %x_268:f32 = load_vector_element %uv, 0u
-    %163:bool = gt %x_268, 0.5f
-    if %163 [t: %b19] {  # if_8
-      %b19 = block {  # true
-        %164:ptr<private, i32, read_write> = access %obj, 0u, 2i
-        %x_273:i32 = load %164
-        %x_276:f32 = load_vector_element %color, 1u
-        %167:f32 = convert %x_273
-        %168:f32 = add %x_276, %167
-        store_vector_element %color, 1u, %168
+    %239:f32 = load_vector_element %uv, 0u
+    %x_268:f32 = let %239
+    %241:bool = gt %x_268, 0.5f
+    if %241 [t: $B19] {  # if_8
+      $B19: {  # true
+        %242:ptr<private, i32, read_write> = access %obj, 0u, 2i
+        %243:i32 = load %242
+        %x_273:i32 = let %243
+        %245:f32 = load_vector_element %color, 1u
+        %x_276:f32 = let %245
+        %247:f32 = convert %x_273
+        %248:f32 = add %x_276, %247
+        store_vector_element %color, 1u, %248
         exit_if  # if_8
       }
     }
-    %x_280:f32 = load_vector_element %uv, 0u
-    %170:bool = gt %x_280, 0.75f
-    if %170 [t: %b20] {  # if_9
-      %b20 = block {  # true
-        %171:ptr<private, i32, read_write> = access %obj, 0u, 3i
-        %x_285:i32 = load %171
-        %x_288:f32 = load_vector_element %color, 2u
-        %174:f32 = convert %x_285
-        %175:f32 = add %x_288, %174
-        store_vector_element %color, 2u, %175
+    %249:f32 = load_vector_element %uv, 0u
+    %x_280:f32 = let %249
+    %251:bool = gt %x_280, 0.75f
+    if %251 [t: $B20] {  # if_9
+      $B20: {  # true
+        %252:ptr<private, i32, read_write> = access %obj, 0u, 3i
+        %253:i32 = load %252
+        %x_285:i32 = let %253
+        %255:f32 = load_vector_element %color, 2u
+        %x_288:f32 = let %255
+        %257:f32 = convert %x_285
+        %258:f32 = add %x_288, %257
+        store_vector_element %color, 2u, %258
         exit_if  # if_9
       }
     }
-    %176:ptr<private, i32, read_write> = access %obj, 0u, 4i
-    %x_292:i32 = load %176
-    %x_295:f32 = load_vector_element %color, 1u
-    %179:f32 = convert %x_292
-    %180:f32 = add %x_295, %179
-    store_vector_element %color, 1u, %180
-    %x_299:f32 = load_vector_element %uv, 1u
-    %182:bool = gt %x_299, 0.25f
-    if %182 [t: %b21] {  # if_10
-      %b21 = block {  # true
-        %183:ptr<private, i32, read_write> = access %obj, 0u, 5i
-        %x_304:i32 = load %183
-        %x_307:f32 = load_vector_element %color, 0u
-        %186:f32 = convert %x_304
-        %187:f32 = add %x_307, %186
-        store_vector_element %color, 0u, %187
+    %259:ptr<private, i32, read_write> = access %obj, 0u, 4i
+    %260:i32 = load %259
+    %x_292:i32 = let %260
+    %262:f32 = load_vector_element %color, 1u
+    %x_295:f32 = let %262
+    %264:f32 = convert %x_292
+    %265:f32 = add %x_295, %264
+    store_vector_element %color, 1u, %265
+    %266:f32 = load_vector_element %uv, 1u
+    %x_299:f32 = let %266
+    %268:bool = gt %x_299, 0.25f
+    if %268 [t: $B21] {  # if_10
+      $B21: {  # true
+        %269:ptr<private, i32, read_write> = access %obj, 0u, 5i
+        %270:i32 = load %269
+        %x_304:i32 = let %270
+        %272:f32 = load_vector_element %color, 0u
+        %x_307:f32 = let %272
+        %274:f32 = convert %x_304
+        %275:f32 = add %x_307, %274
+        store_vector_element %color, 0u, %275
         exit_if  # if_10
       }
     }
-    %x_311:f32 = load_vector_element %uv, 1u
-    %189:bool = gt %x_311, 0.5f
-    if %189 [t: %b22] {  # if_11
-      %b22 = block {  # true
-        %190:ptr<private, i32, read_write> = access %obj, 0u, 6i
-        %x_316:i32 = load %190
-        %x_319:f32 = load_vector_element %color, 1u
-        %193:f32 = convert %x_316
-        %194:f32 = add %x_319, %193
-        store_vector_element %color, 1u, %194
+    %276:f32 = load_vector_element %uv, 1u
+    %x_311:f32 = let %276
+    %278:bool = gt %x_311, 0.5f
+    if %278 [t: $B22] {  # if_11
+      $B22: {  # true
+        %279:ptr<private, i32, read_write> = access %obj, 0u, 6i
+        %280:i32 = load %279
+        %x_316:i32 = let %280
+        %282:f32 = load_vector_element %color, 1u
+        %x_319:f32 = let %282
+        %284:f32 = convert %x_316
+        %285:f32 = add %x_319, %284
+        store_vector_element %color, 1u, %285
         exit_if  # if_11
       }
     }
-    %x_323:f32 = load_vector_element %uv, 1u
-    %196:bool = gt %x_323, 0.75f
-    if %196 [t: %b23] {  # if_12
-      %b23 = block {  # true
-        %197:ptr<private, i32, read_write> = access %obj, 0u, 7i
-        %x_328:i32 = load %197
-        %x_331:f32 = load_vector_element %color, 2u
-        %200:f32 = convert %x_328
-        %201:f32 = add %x_331, %200
-        store_vector_element %color, 2u, %201
+    %286:f32 = load_vector_element %uv, 1u
+    %x_323:f32 = let %286
+    %288:bool = gt %x_323, 0.75f
+    if %288 [t: $B23] {  # if_12
+      $B23: {  # true
+        %289:ptr<private, i32, read_write> = access %obj, 0u, 7i
+        %290:i32 = load %289
+        %x_328:i32 = let %290
+        %292:f32 = load_vector_element %color, 2u
+        %x_331:f32 = let %292
+        %294:f32 = convert %x_328
+        %295:f32 = add %x_331, %294
+        store_vector_element %color, 2u, %295
         exit_if  # if_12
       }
     }
-    %202:ptr<private, i32, read_write> = access %obj, 0u, 8i
-    %x_335:i32 = load %202
-    %x_338:f32 = load_vector_element %color, 2u
-    %205:f32 = convert %x_335
-    %206:f32 = add %x_338, %205
-    store_vector_element %color, 2u, %206
-    %x_342:f32 = load_vector_element %uv, 0u
-    %x_344:f32 = load_vector_element %uv, 1u
-    %209:f32 = sub %x_342, %x_344
-    %210:f32 = abs %209
-    %211:bool = lt %210, 0.25f
-    if %211 [t: %b24] {  # if_13
-      %b24 = block {  # true
-        %212:ptr<private, i32, read_write> = access %obj, 0u, 9i
-        %x_351:i32 = load %212
-        %x_354:f32 = load_vector_element %color, 0u
-        %215:f32 = convert %x_351
-        %216:f32 = add %x_354, %215
-        store_vector_element %color, 0u, %216
+    %296:ptr<private, i32, read_write> = access %obj, 0u, 8i
+    %297:i32 = load %296
+    %x_335:i32 = let %297
+    %299:f32 = load_vector_element %color, 2u
+    %x_338:f32 = let %299
+    %301:f32 = convert %x_335
+    %302:f32 = add %x_338, %301
+    store_vector_element %color, 2u, %302
+    %303:f32 = load_vector_element %uv, 0u
+    %x_342:f32 = let %303
+    %305:f32 = load_vector_element %uv, 1u
+    %x_344:f32 = let %305
+    %307:f32 = sub %x_342, %x_344
+    %308:f32 = abs %307
+    %309:bool = lt %308, 0.25f
+    if %309 [t: $B24] {  # if_13
+      $B24: {  # true
+        %310:ptr<private, i32, read_write> = access %obj, 0u, 9i
+        %311:i32 = load %310
+        %x_351:i32 = let %311
+        %313:f32 = load_vector_element %color, 0u
+        %x_354:f32 = let %313
+        %315:f32 = convert %x_351
+        %316:f32 = add %x_354, %315
+        store_vector_element %color, 0u, %316
         exit_if  # if_13
       }
     }
-    %x_357:vec3<f32> = load %color
-    %x_358:vec3<f32> = normalize %x_357
-    %219:f32 = access %x_358, 0u
-    %220:f32 = access %x_358, 1u
-    %221:f32 = access %x_358, 2u
-    %222:vec4<f32> = construct %219, %220, %221, 1.0f
-    store %frag_color, %222
-    %x_363:vec4<f32> = load %x_GLF_pos
+    %317:vec3<f32> = load %color
+    %x_357:vec3<f32> = let %317
+    %319:vec3<f32> = normalize %x_357
+    %x_358:vec3<f32> = let %319
+    %321:f32 = access %x_358, 0u
+    %322:f32 = access %x_358, 1u
+    %323:f32 = access %x_358, 2u
+    %324:vec4<f32> = construct %321, %322, %323, 1.0f
+    store %frag_color, %324
+    %325:vec4<f32> = load %x_GLF_pos
+    %x_363:vec4<f32> = let %325
     store %gl_Position, %x_363
     ret
   }
 }
-%tint_symbol = @vertex func(%x_GLF_pos_param:vec4<f32> [@location(0)]):main_out -> %b25 {
-  %b25 = block {
+%tint_symbol = @vertex func(%x_GLF_pos_param:vec4<f32> [@location(0)]):main_out {
+  $B25: {
     store %x_GLF_pos, %x_GLF_pos_param
-    %226:void = call %main_1
-    %227:vec4<f32> = load %frag_color
-    %228:vec4<f32> = load %gl_Position
-    %229:main_out = construct %227, %228
-    ret %229
+    %329:void = call %main_1
+    %330:vec4<f32> = load %frag_color
+    %331:vec4<f32> = load %gl_Position
+    %332:main_out = construct %330, %331
+    ret %332
   }
 }
-%swap_i1_i1_ = func(%i:ptr<function, i32, read_write>, %j:ptr<function, i32, read_write>):void -> %b26 {
-  %b26 = block {
+%swap_i1_i1_ = func(%i:ptr<function, i32, read_write>, %j:ptr<function, i32, read_write>):void {
+  $B26: {
     %temp:ptr<function, i32, read_write> = var
-    %x_366:i32 = load %i
-    %235:ptr<private, i32, read_write> = access %obj, 0u, %x_366
-    %x_368:i32 = load %235
+    %337:i32 = load %i
+    %x_366:i32 = let %337
+    %339:ptr<private, i32, read_write> = access %obj, 0u, %x_366
+    %340:i32 = load %339
+    %x_368:i32 = let %340
     store %temp, %x_368
-    %x_369:i32 = load %i
-    %x_370:i32 = load %j
-    %239:ptr<private, i32, read_write> = access %obj, 0u, %x_370
-    %x_372:i32 = load %239
-    %241:ptr<private, i32, read_write> = access %obj, 0u, %x_369
-    store %241, %x_372
-    %x_374:i32 = load %j
-    %x_375:i32 = load %temp
-    %244:ptr<private, i32, read_write> = access %obj, 0u, %x_374
-    store %244, %x_375
+    %342:i32 = load %i
+    %x_369:i32 = let %342
+    %344:i32 = load %j
+    %x_370:i32 = let %344
+    %346:ptr<private, i32, read_write> = access %obj, 0u, %x_370
+    %347:i32 = load %346
+    %x_372:i32 = let %347
+    %349:ptr<private, i32, read_write> = access %obj, 0u, %x_369
+    store %349, %x_372
+    %350:i32 = load %j
+    %x_374:i32 = let %350
+    %352:i32 = load %temp
+    %x_375:i32 = let %352
+    %354:ptr<private, i32, read_write> = access %obj, 0u, %x_374
+    store %354, %x_375
     ret
   }
 }
-%performPartition_i1_i1_ = func(%l:ptr<function, i32, read_write>, %h:ptr<function, i32, read_write>):i32 -> %b27 {
-  %b27 = block {
+%performPartition_i1_i1_ = func(%l:ptr<function, i32, read_write>, %h:ptr<function, i32, read_write>):i32 {
+  $B27: {
     %pivot:ptr<function, i32, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
     %j_1:ptr<function, i32, read_write> = var
@@ -437,69 +547,85 @@
     %param_1:ptr<function, i32, read_write> = var
     %param_2:ptr<function, i32, read_write> = var
     %param_3:ptr<function, i32, read_write> = var
-    %x_378:i32 = load %h
-    %256:ptr<private, i32, read_write> = access %obj, 0u, %x_378
-    %x_380:i32 = load %256
+    %365:i32 = load %h
+    %x_378:i32 = let %365
+    %367:ptr<private, i32, read_write> = access %obj, 0u, %x_378
+    %368:i32 = load %367
+    %x_380:i32 = let %368
     store %pivot, %x_380
-    %x_381:i32 = load %l
-    %259:i32 = sub %x_381, 1i
-    store %i_1, %259
-    %x_383:i32 = load %l
+    %370:i32 = load %l
+    %x_381:i32 = let %370
+    %372:i32 = sub %x_381, 1i
+    store %i_1, %372
+    %373:i32 = load %l
+    %x_383:i32 = let %373
     store %j_1, %x_383
-    loop [b: %b28, c: %b29] {  # loop_4
-      %b28 = block {  # body
-        %x_388:i32 = load %j_1
-        %x_389:i32 = load %h
-        %263:i32 = sub %x_389, 1i
-        %264:bool = lte %x_388, %263
-        if %264 [t: %b30, f: %b31] {  # if_14
-          %b30 = block {  # true
+    loop [b: $B28, c: $B29] {  # loop_4
+      $B28: {  # body
+        %375:i32 = load %j_1
+        %x_388:i32 = let %375
+        %377:i32 = load %h
+        %x_389:i32 = let %377
+        %379:i32 = sub %x_389, 1i
+        %380:bool = lte %x_388, %379
+        if %380 [t: $B30, f: $B31] {  # if_14
+          $B30: {  # true
             exit_if  # if_14
           }
-          %b31 = block {  # false
+          $B31: {  # false
             exit_loop  # loop_4
           }
         }
-        %x_393:i32 = load %j_1
-        %266:ptr<private, i32, read_write> = access %obj, 0u, %x_393
-        %x_395:i32 = load %266
-        %x_396:i32 = load %pivot
-        %269:bool = lte %x_395, %x_396
-        if %269 [t: %b32] {  # if_15
-          %b32 = block {  # true
-            %x_400:i32 = load %i_1
-            %271:i32 = add %x_400, 1i
-            store %i_1, %271
-            %x_402:i32 = load %i_1
+        %381:i32 = load %j_1
+        %x_393:i32 = let %381
+        %383:ptr<private, i32, read_write> = access %obj, 0u, %x_393
+        %384:i32 = load %383
+        %x_395:i32 = let %384
+        %386:i32 = load %pivot
+        %x_396:i32 = let %386
+        %388:bool = lte %x_395, %x_396
+        if %388 [t: $B32] {  # if_15
+          $B32: {  # true
+            %389:i32 = load %i_1
+            %x_400:i32 = let %389
+            %391:i32 = add %x_400, 1i
+            store %i_1, %391
+            %392:i32 = load %i_1
+            %x_402:i32 = let %392
             store %param, %x_402
-            %x_403:i32 = load %j_1
+            %394:i32 = load %j_1
+            %x_403:i32 = let %394
             store %param_1, %x_403
-            %274:void = call %swap_i1_i1_, %param, %param_1
+            %396:void = call %swap_i1_i1_, %param, %param_1
             exit_if  # if_15
           }
         }
-        continue %b29
+        continue  # -> $B29
       }
-      %b29 = block {  # continuing
-        %x_405:i32 = load %j_1
-        %276:i32 = add %x_405, 1i
-        store %j_1, %276
-        next_iteration %b28
+      $B29: {  # continuing
+        %397:i32 = load %j_1
+        %x_405:i32 = let %397
+        %399:i32 = add %x_405, 1i
+        store %j_1, %399
+        next_iteration  # -> $B28
       }
     }
-    %x_407:i32 = load %i_1
-    %278:i32 = add %x_407, 1i
-    store %param_2, %278
-    %x_409:i32 = load %h
+    %400:i32 = load %i_1
+    %x_407:i32 = let %400
+    %402:i32 = add %x_407, 1i
+    store %param_2, %402
+    %403:i32 = load %h
+    %x_409:i32 = let %403
     store %param_3, %x_409
-    %280:void = call %swap_i1_i1_, %param_2, %param_3
-    %x_411:i32 = load %i_1
-    %282:i32 = add %x_411, 1i
-    ret %282
+    %405:void = call %swap_i1_i1_, %param_2, %param_3
+    %406:i32 = load %i_1
+    %x_411:i32 = let %406
+    %408:i32 = add %x_411, 1i
+    ret %408
   }
 }
-%quicksort_ = func():void -> %b33 {
-  %b33 = block {
+%quicksort_ = func():void {
+  $B33: {
     %l_1:ptr<function, i32, read_write> = var
     %h_1:ptr<function, i32, read_write> = var
     %top:ptr<function, i32, read_write> = var
@@ -510,96 +636,126 @@
     store %l_1, 0i
     store %h_1, 9i
     store %top, -1i
-    %x_414:i32 = load %top
-    %x_415:i32 = add %x_414, 1i
+    %417:i32 = load %top
+    %x_414:i32 = let %417
+    %419:i32 = add %x_414, 1i
+    %x_415:i32 = let %419
     store %top, %x_415
-    %x_416:i32 = load %l_1
-    %294:ptr<function, i32, read_write> = access %stack, %x_415
-    store %294, %x_416
-    %x_418:i32 = load %top
-    %x_419:i32 = add %x_418, 1i
+    %421:i32 = load %l_1
+    %x_416:i32 = let %421
+    %423:ptr<function, i32, read_write> = access %stack, %x_415
+    store %423, %x_416
+    %424:i32 = load %top
+    %x_418:i32 = let %424
+    %426:i32 = add %x_418, 1i
+    %x_419:i32 = let %426
     store %top, %x_419
-    %x_420:i32 = load %h_1
-    %298:ptr<function, i32, read_write> = access %stack, %x_419
-    store %298, %x_420
-    loop [b: %b34, c: %b35] {  # loop_5
-      %b34 = block {  # body
-        %x_426:i32 = load %top
-        %300:bool = gte %x_426, 0i
-        if %300 [t: %b36, f: %b37] {  # if_16
-          %b36 = block {  # true
+    %428:i32 = load %h_1
+    %x_420:i32 = let %428
+    %430:ptr<function, i32, read_write> = access %stack, %x_419
+    store %430, %x_420
+    loop [b: $B34, c: $B35] {  # loop_5
+      $B34: {  # body
+        %431:i32 = load %top
+        %x_426:i32 = let %431
+        %433:bool = gte %x_426, 0i
+        if %433 [t: $B36, f: $B37] {  # if_16
+          $B36: {  # true
             exit_if  # if_16
           }
-          %b37 = block {  # false
+          $B37: {  # false
             exit_loop  # loop_5
           }
         }
-        %x_429:i32 = load %top
-        %302:i32 = sub %x_429, 1i
-        store %top, %302
-        %303:ptr<function, i32, read_write> = access %stack, %x_429
-        %x_432:i32 = load %303
+        %434:i32 = load %top
+        %x_429:i32 = let %434
+        %436:i32 = sub %x_429, 1i
+        store %top, %436
+        %437:ptr<function, i32, read_write> = access %stack, %x_429
+        %438:i32 = load %437
+        %x_432:i32 = let %438
         store %h_1, %x_432
-        %x_433:i32 = load %top
-        %306:i32 = sub %x_433, 1i
-        store %top, %306
-        %307:ptr<function, i32, read_write> = access %stack, %x_433
-        %x_436:i32 = load %307
+        %440:i32 = load %top
+        %x_433:i32 = let %440
+        %442:i32 = sub %x_433, 1i
+        store %top, %442
+        %443:ptr<function, i32, read_write> = access %stack, %x_433
+        %444:i32 = load %443
+        %x_436:i32 = let %444
         store %l_1, %x_436
-        %x_437:i32 = load %l_1
+        %446:i32 = load %l_1
+        %x_437:i32 = let %446
         store %param_4, %x_437
-        %x_438:i32 = load %h_1
+        %448:i32 = load %h_1
+        %x_438:i32 = let %448
         store %param_5, %x_438
-        %x_439:i32 = call %performPartition_i1_i1_, %param_4, %param_5
+        %450:i32 = call %performPartition_i1_i1_, %param_4, %param_5
+        %x_439:i32 = let %450
         store %p, %x_439
-        %x_440:i32 = load %p
-        %x_442:i32 = load %l_1
-        %314:i32 = sub %x_440, 1i
-        %315:bool = gt %314, %x_442
-        if %315 [t: %b38] {  # if_17
-          %b38 = block {  # true
-            %x_446:i32 = load %top
-            %x_447:i32 = add %x_446, 1i
+        %452:i32 = load %p
+        %x_440:i32 = let %452
+        %454:i32 = load %l_1
+        %x_442:i32 = let %454
+        %456:i32 = sub %x_440, 1i
+        %457:bool = gt %456, %x_442
+        if %457 [t: $B38] {  # if_17
+          $B38: {  # true
+            %458:i32 = load %top
+            %x_446:i32 = let %458
+            %460:i32 = add %x_446, 1i
+            %x_447:i32 = let %460
             store %top, %x_447
-            %x_448:i32 = load %l_1
-            %319:ptr<function, i32, read_write> = access %stack, %x_447
-            store %319, %x_448
-            %x_450:i32 = load %top
-            %x_451:i32 = add %x_450, 1i
+            %462:i32 = load %l_1
+            %x_448:i32 = let %462
+            %464:ptr<function, i32, read_write> = access %stack, %x_447
+            store %464, %x_448
+            %465:i32 = load %top
+            %x_450:i32 = let %465
+            %467:i32 = add %x_450, 1i
+            %x_451:i32 = let %467
             store %top, %x_451
-            %x_452:i32 = load %p
-            %323:ptr<function, i32, read_write> = access %stack, %x_451
-            %324:i32 = sub %x_452, 1i
-            store %323, %324
+            %469:i32 = load %p
+            %x_452:i32 = let %469
+            %471:ptr<function, i32, read_write> = access %stack, %x_451
+            %472:i32 = sub %x_452, 1i
+            store %471, %472
             exit_if  # if_17
           }
         }
-        %x_455:i32 = load %p
-        %x_457:i32 = load %h_1
-        %327:i32 = add %x_455, 1i
-        %328:bool = lt %327, %x_457
-        if %328 [t: %b39] {  # if_18
-          %b39 = block {  # true
-            %x_461:i32 = load %top
-            %x_462:i32 = add %x_461, 1i
+        %473:i32 = load %p
+        %x_455:i32 = let %473
+        %475:i32 = load %h_1
+        %x_457:i32 = let %475
+        %477:i32 = add %x_455, 1i
+        %478:bool = lt %477, %x_457
+        if %478 [t: $B39] {  # if_18
+          $B39: {  # true
+            %479:i32 = load %top
+            %x_461:i32 = let %479
+            %481:i32 = add %x_461, 1i
+            %x_462:i32 = let %481
             store %top, %x_462
-            %x_463:i32 = load %p
-            %332:ptr<function, i32, read_write> = access %stack, %x_462
-            %333:i32 = add %x_463, 1i
-            store %332, %333
-            %x_466:i32 = load %top
-            %x_467:i32 = add %x_466, 1i
+            %483:i32 = load %p
+            %x_463:i32 = let %483
+            %485:ptr<function, i32, read_write> = access %stack, %x_462
+            %486:i32 = add %x_463, 1i
+            store %485, %486
+            %487:i32 = load %top
+            %x_466:i32 = let %487
+            %489:i32 = add %x_466, 1i
+            %x_467:i32 = let %489
             store %top, %x_467
-            %x_468:i32 = load %h_1
-            %337:ptr<function, i32, read_write> = access %stack, %x_467
-            store %337, %x_468
+            %491:i32 = load %h_1
+            %x_468:i32 = let %491
+            %493:ptr<function, i32, read_write> = access %stack, %x_467
+            store %493, %x_468
             exit_if  # if_18
           }
         }
-        continue %b35
+        continue  # -> $B35
       }
-      %b35 = block {  # continuing
-        next_iteration %b34
+      $B35: {  # continuing
+        next_iteration  # -> $B34
       }
     }
     ret
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/2.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/2.spvasm.expected.ir.msl
index 0649103..df43f6a 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/2.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/2.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: QuicksortObject = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: QuicksortObject = struct @align(4) {
   numbers:array<i32, 10> @offset(0)
 }
 
@@ -13,7 +13,7 @@
   gl_Position:vec4<f32> @offset(16), @builtin(position)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %obj:ptr<private, QuicksortObject, read_write> = var
   %x_GLF_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_pos:ptr<private, vec4<f32>, read_write> = var
@@ -22,8 +22,8 @@
   %gl_Position:ptr<private, vec4<f32>, read_write> = var
 }
 
-%performPartition_i1_i1_ = func(%l:ptr<function, i32, read_write>, %h:ptr<function, i32, read_write>):i32 -> %b2 {
-  %b2 = block {
+%performPartition_i1_i1_ = func(%l:ptr<function, i32, read_write>, %h:ptr<function, i32, read_write>):i32 {
+  $B2: {
     %x_314:ptr<function, i32, read_write> = var
     %x_315:ptr<function, i32, read_write> = var
     %pivot:ptr<function, i32, read_write> = var
@@ -42,17 +42,17 @@
     store %i_1, %23
     %24:i32 = load %l
     store %j_1, %24
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %25:i32 = load %j_1
         %26:i32 = load %h
         %27:i32 = sub %26, 1i
         %28:bool = lte %25, %27
-        if %28 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %28 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
@@ -61,8 +61,8 @@
         %31:i32 = load %30
         %32:i32 = load %pivot
         %33:bool = lte %31, %32
-        if %33 [t: %b7] {  # if_2
-          %b7 = block {  # true
+        if %33 [t: $B7] {  # if_2
+          $B7: {  # true
             %34:i32 = load %i_1
             %35:i32 = add %34, 1i
             store %i_1, %35
@@ -74,62 +74,67 @@
             %39:ptr<private, i32, read_write> = access %obj, 0u, %38
             %40:i32 = load %39
             store %x_315, %40
-            %x_345:i32 = load %param
-            %42:ptr<private, i32, read_write> = access %obj, 0u, %x_345
-            %43:i32 = load %param_1
-            %44:ptr<private, i32, read_write> = access %obj, 0u, %43
-            %45:i32 = load %44
-            store %42, %45
-            %x_350:i32 = load %param_1
-            %47:ptr<private, i32, read_write> = access %obj, 0u, %x_350
-            %48:i32 = load %x_315
-            store %47, %48
+            %41:i32 = load %param
+            %x_345:i32 = let %41
+            %43:ptr<private, i32, read_write> = access %obj, 0u, %x_345
+            %44:i32 = load %param_1
+            %45:ptr<private, i32, read_write> = access %obj, 0u, %44
+            %46:i32 = load %45
+            store %43, %46
+            %47:i32 = load %param_1
+            %x_350:i32 = let %47
+            %49:ptr<private, i32, read_write> = access %obj, 0u, %x_350
+            %50:i32 = load %x_315
+            store %49, %50
             exit_if  # if_2
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %49:i32 = load %j_1
-        %50:i32 = add %49, 1i
-        store %j_1, %50
-        next_iteration %b3
+      $B4: {  # continuing
+        %51:i32 = load %j_1
+        %52:i32 = add %51, 1i
+        store %j_1, %52
+        next_iteration  # -> $B3
       }
     }
-    %51:i32 = load %i_1
-    %52:i32 = add %51, 1i
-    store %param_2, %52
-    %53:i32 = load %h
-    store %param_3, %53
-    %54:i32 = load %param_2
-    %55:ptr<private, i32, read_write> = access %obj, 0u, %54
-    %56:i32 = load %55
-    store %x_314, %56
-    %x_361:i32 = load %param_2
-    %58:ptr<private, i32, read_write> = access %obj, 0u, %x_361
-    %59:i32 = load %param_3
-    %60:ptr<private, i32, read_write> = access %obj, 0u, %59
-    %61:i32 = load %60
-    store %58, %61
-    %x_366:i32 = load %param_3
-    %63:ptr<private, i32, read_write> = access %obj, 0u, %x_366
-    %64:i32 = load %x_314
-    store %63, %64
-    if false [t: %b8, f: %b9] {  # if_3
-      %b8 = block {  # true
+    %53:i32 = load %i_1
+    %54:i32 = add %53, 1i
+    store %param_2, %54
+    %55:i32 = load %h
+    store %param_3, %55
+    %56:i32 = load %param_2
+    %57:ptr<private, i32, read_write> = access %obj, 0u, %56
+    %58:i32 = load %57
+    store %x_314, %58
+    %59:i32 = load %param_2
+    %x_361:i32 = let %59
+    %61:ptr<private, i32, read_write> = access %obj, 0u, %x_361
+    %62:i32 = load %param_3
+    %63:ptr<private, i32, read_write> = access %obj, 0u, %62
+    %64:i32 = load %63
+    store %61, %64
+    %65:i32 = load %param_3
+    %x_366:i32 = let %65
+    %67:ptr<private, i32, read_write> = access %obj, 0u, %x_366
+    %68:i32 = load %x_314
+    store %67, %68
+    if false [t: $B8, f: $B9] {  # if_3
+      $B8: {  # true
         exit_if  # if_3
       }
-      %b9 = block {  # false
-        %x_372:i32 = load %i_1
-        %66:i32 = add %x_372, 1i
-        ret %66
+      $B9: {  # false
+        %69:i32 = load %i_1
+        %x_372:i32 = let %69
+        %71:i32 = add %x_372, 1i
+        ret %71
       }
     }
     ret 0i
   }
 }
-%main_1 = func():void -> %b10 {
-  %b10 = block {
+%main_1 = func():void {
+  $B10: {
     %x_91:ptr<function, i32, read_write> = var
     %x_92:ptr<function, i32, read_write> = var
     %x_93:ptr<function, i32, read_write> = var
@@ -140,307 +145,331 @@
     %i_2:ptr<function, i32, read_write> = var
     %uv:ptr<function, vec2<f32>, read_write> = var
     %color:ptr<function, vec3<f32>, read_write> = var
-    %78:vec4<f32> = load %x_GLF_pos
-    %79:vec4<f32> = add %78, vec4<f32>(1.0f, 1.0f, 0.0f, 0.0f)
-    %80:vec4<f32> = mul %79, vec4<f32>(128.0f, 128.0f, 1.0f, 1.0f)
-    store %x_GLF_FragCoord, %80
+    %83:vec4<f32> = load %x_GLF_pos
+    %84:vec4<f32> = add %83, vec4<f32>(1.0f, 1.0f, 0.0f, 0.0f)
+    %85:vec4<f32> = mul %84, vec4<f32>(128.0f, 128.0f, 1.0f, 1.0f)
+    store %x_GLF_FragCoord, %85
     store %i_2, 0i
-    loop [b: %b11, c: %b12] {  # loop_2
-      %b11 = block {  # body
-        %81:i32 = load %i_2
-        %82:bool = lt %81, 10i
-        if %82 [t: %b13, f: %b14] {  # if_4
-          %b13 = block {  # true
+    loop [b: $B11, c: $B12] {  # loop_2
+      $B11: {  # body
+        %86:i32 = load %i_2
+        %87:bool = lt %86, 10i
+        if %87 [t: $B13, f: $B14] {  # if_4
+          $B13: {  # true
             exit_if  # if_4
           }
-          %b14 = block {  # false
+          $B14: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_108:i32 = load %i_2
-        %84:ptr<private, i32, read_write> = access %obj, 0u, %x_108
-        %85:i32 = load %i_2
-        %86:i32 = sub 10i, %85
-        store %84, %86
-        %x_112:i32 = load %i_2
-        %88:ptr<private, i32, read_write> = access %obj, 0u, %x_112
-        %89:i32 = load %i_2
-        %90:ptr<private, i32, read_write> = access %obj, 0u, %89
-        %91:i32 = load %90
-        %92:i32 = load %i_2
-        %93:ptr<private, i32, read_write> = access %obj, 0u, %92
-        %94:i32 = load %93
-        %95:i32 = mul %91, %94
-        store %88, %95
-        continue %b12
-      }
-      %b12 = block {  # continuing
+        %88:i32 = load %i_2
+        %x_108:i32 = let %88
+        %90:ptr<private, i32, read_write> = access %obj, 0u, %x_108
+        %91:i32 = load %i_2
+        %92:i32 = sub 10i, %91
+        store %90, %92
+        %93:i32 = load %i_2
+        %x_112:i32 = let %93
+        %95:ptr<private, i32, read_write> = access %obj, 0u, %x_112
         %96:i32 = load %i_2
-        %97:i32 = add %96, 1i
-        store %i_2, %97
-        next_iteration %b11
+        %97:ptr<private, i32, read_write> = access %obj, 0u, %96
+        %98:i32 = load %97
+        %99:i32 = load %i_2
+        %100:ptr<private, i32, read_write> = access %obj, 0u, %99
+        %101:i32 = load %100
+        %102:i32 = mul %98, %101
+        store %95, %102
+        continue  # -> $B12
+      }
+      $B12: {  # continuing
+        %103:i32 = load %i_2
+        %104:i32 = add %103, 1i
+        store %i_2, %104
+        next_iteration  # -> $B11
       }
     }
     store %x_91, 0i
     store %x_92, 9i
     store %x_93, -1i
-    %98:i32 = load %x_93
-    %x_124:i32 = add %98, 1i
+    %105:i32 = load %x_93
+    %106:i32 = add %105, 1i
+    %x_124:i32 = let %106
     store %x_93, %x_124
-    %100:ptr<function, i32, read_write> = access %x_94, %x_124
-    %101:i32 = load %x_91
-    store %100, %101
-    %102:i32 = load %x_93
-    %x_128:i32 = add %102, 1i
+    %108:ptr<function, i32, read_write> = access %x_94, %x_124
+    %109:i32 = load %x_91
+    store %108, %109
+    %110:i32 = load %x_93
+    %111:i32 = add %110, 1i
+    %x_128:i32 = let %111
     store %x_93, %x_128
-    %104:ptr<function, i32, read_write> = access %x_94, %x_128
-    %105:i32 = load %x_92
-    store %104, %105
-    loop [b: %b15, c: %b16] {  # loop_3
-      %b15 = block {  # body
-        %106:i32 = load %x_93
-        %107:bool = gte %106, 0i
-        if %107 [t: %b17, f: %b18] {  # if_5
-          %b17 = block {  # true
+    %113:ptr<function, i32, read_write> = access %x_94, %x_128
+    %114:i32 = load %x_92
+    store %113, %114
+    loop [b: $B15, c: $B16] {  # loop_3
+      $B15: {  # body
+        %115:i32 = load %x_93
+        %116:bool = gte %115, 0i
+        if %116 [t: $B17, f: $B18] {  # if_5
+          $B17: {  # true
             exit_if  # if_5
           }
-          %b18 = block {  # false
+          $B18: {  # false
             exit_loop  # loop_3
           }
         }
-        %x_138:i32 = load %x_93
-        %109:i32 = load %x_93
-        %110:i32 = sub %109, 1i
-        store %x_93, %110
-        %111:ptr<function, i32, read_write> = access %x_94, %x_138
-        %112:i32 = load %111
-        store %x_92, %112
-        %x_142:i32 = load %x_93
-        %114:i32 = load %x_93
-        %115:i32 = sub %114, 1i
-        store %x_93, %115
-        %116:ptr<function, i32, read_write> = access %x_94, %x_142
-        %117:i32 = load %116
-        store %x_91, %117
-        %118:i32 = load %x_91
-        store %x_96, %118
-        %119:i32 = load %x_92
-        store %x_97, %119
-        %x_148:i32 = call %performPartition_i1_i1_, %x_96, %x_97
+        %117:i32 = load %x_93
+        %x_138:i32 = let %117
+        %119:i32 = load %x_93
+        %120:i32 = sub %119, 1i
+        store %x_93, %120
+        %121:ptr<function, i32, read_write> = access %x_94, %x_138
+        %122:i32 = load %121
+        store %x_92, %122
+        %123:i32 = load %x_93
+        %x_142:i32 = let %123
+        %125:i32 = load %x_93
+        %126:i32 = sub %125, 1i
+        store %x_93, %126
+        %127:ptr<function, i32, read_write> = access %x_94, %x_142
+        %128:i32 = load %127
+        store %x_91, %128
+        %129:i32 = load %x_91
+        store %x_96, %129
+        %130:i32 = load %x_92
+        store %x_97, %130
+        %131:i32 = call %performPartition_i1_i1_, %x_96, %x_97
+        %x_148:i32 = let %131
         store %x_95, %x_148
-        %121:i32 = load %x_95
-        %122:i32 = sub %121, 1i
-        %123:i32 = load %x_91
-        %124:bool = gt %122, %123
-        if %124 [t: %b19] {  # if_6
-          %b19 = block {  # true
-            %125:i32 = load %x_93
-            %x_156:i32 = add %125, 1i
+        %133:i32 = load %x_95
+        %134:i32 = sub %133, 1i
+        %135:i32 = load %x_91
+        %136:bool = gt %134, %135
+        if %136 [t: $B19] {  # if_6
+          $B19: {  # true
+            %137:i32 = load %x_93
+            %138:i32 = add %137, 1i
+            %x_156:i32 = let %138
             store %x_93, %x_156
-            %127:ptr<function, i32, read_write> = access %x_94, %x_156
-            %128:i32 = load %x_91
-            store %127, %128
-            %129:i32 = load %x_93
-            %x_160:i32 = add %129, 1i
+            %140:ptr<function, i32, read_write> = access %x_94, %x_156
+            %141:i32 = load %x_91
+            store %140, %141
+            %142:i32 = load %x_93
+            %143:i32 = add %142, 1i
+            %x_160:i32 = let %143
             store %x_93, %x_160
-            %131:ptr<function, i32, read_write> = access %x_94, %x_160
-            %132:i32 = load %x_95
-            %133:i32 = sub %132, 1i
-            store %131, %133
+            %145:ptr<function, i32, read_write> = access %x_94, %x_160
+            %146:i32 = load %x_95
+            %147:i32 = sub %146, 1i
+            store %145, %147
             exit_if  # if_6
           }
         }
-        %134:i32 = load %x_95
-        %135:i32 = add %134, 1i
-        %136:i32 = load %x_92
-        %137:bool = lt %135, %136
-        if %137 [t: %b20] {  # if_7
-          %b20 = block {  # true
-            %138:i32 = load %x_93
-            %x_171:i32 = add %138, 1i
+        %148:i32 = load %x_95
+        %149:i32 = add %148, 1i
+        %150:i32 = load %x_92
+        %151:bool = lt %149, %150
+        if %151 [t: $B20] {  # if_7
+          $B20: {  # true
+            %152:i32 = load %x_93
+            %153:i32 = add %152, 1i
+            %x_171:i32 = let %153
             store %x_93, %x_171
-            %140:ptr<function, i32, read_write> = access %x_94, %x_171
-            %141:i32 = load %x_95
-            %142:i32 = add %141, 1i
-            store %140, %142
-            %143:i32 = load %x_93
-            %x_176:i32 = add %143, 1i
+            %155:ptr<function, i32, read_write> = access %x_94, %x_171
+            %156:i32 = load %x_95
+            %157:i32 = add %156, 1i
+            store %155, %157
+            %158:i32 = load %x_93
+            %159:i32 = add %158, 1i
+            %x_176:i32 = let %159
             store %x_93, %x_176
-            %145:ptr<function, i32, read_write> = access %x_94, %x_176
-            %146:i32 = load %x_92
-            store %145, %146
+            %161:ptr<function, i32, read_write> = access %x_94, %x_176
+            %162:i32 = load %x_92
+            store %161, %162
             exit_if  # if_7
           }
         }
-        continue %b16
+        continue  # -> $B16
       }
-      %b16 = block {  # continuing
-        next_iteration %b15
+      $B16: {  # continuing
+        next_iteration  # -> $B15
       }
     }
-    %147:vec4<f32> = load %x_GLF_FragCoord
-    %148:vec2<f32> = swizzle %147, xy
-    %149:ptr<uniform, vec2<f32>, read> = access %x_34, 0u
-    %150:vec2<f32> = load %149
-    %151:vec2<f32> = div %148, %150
-    store %uv, %151
+    %163:vec4<f32> = load %x_GLF_FragCoord
+    %164:vec2<f32> = swizzle %163, xy
+    %165:ptr<uniform, vec2<f32>, read> = access %x_34, 0u
+    %166:vec2<f32> = load %165
+    %167:vec2<f32> = div %164, %166
+    store %uv, %167
     store %color, vec3<f32>(1.0f, 2.0f, 3.0f)
-    %152:f32 = load_vector_element %color, 0u
-    %153:ptr<private, i32, read_write> = access %obj, 0u, 0i
-    %154:i32 = load %153
-    %155:f32 = convert %154
-    %156:f32 = add %152, %155
-    store_vector_element %color, 0u, %156
-    %157:f32 = load_vector_element %uv, 0u
-    %158:bool = gt %157, 0.25f
-    if %158 [t: %b21] {  # if_8
-      %b21 = block {  # true
-        %159:f32 = load_vector_element %color, 0u
-        %160:ptr<private, i32, read_write> = access %obj, 0u, 1i
-        %161:i32 = load %160
-        %162:f32 = convert %161
-        %163:f32 = add %159, %162
-        store_vector_element %color, 0u, %163
+    %168:f32 = load_vector_element %color, 0u
+    %169:f32 = let %168
+    %170:ptr<private, i32, read_write> = access %obj, 0u, 0i
+    %171:i32 = load %170
+    %172:f32 = convert %171
+    %173:f32 = add %169, %172
+    store_vector_element %color, 0u, %173
+    %174:f32 = load_vector_element %uv, 0u
+    %175:bool = gt %174, 0.25f
+    if %175 [t: $B21] {  # if_8
+      $B21: {  # true
+        %176:f32 = load_vector_element %color, 0u
+        %177:f32 = let %176
+        %178:ptr<private, i32, read_write> = access %obj, 0u, 1i
+        %179:i32 = load %178
+        %180:f32 = convert %179
+        %181:f32 = add %177, %180
+        store_vector_element %color, 0u, %181
         exit_if  # if_8
       }
     }
-    %164:f32 = load_vector_element %uv, 0u
-    %165:bool = gt %164, 0.5f
-    if %165 [t: %b22] {  # if_9
-      %b22 = block {  # true
-        %166:f32 = load_vector_element %color, 1u
-        %167:ptr<private, i32, read_write> = access %obj, 0u, 2i
-        %168:i32 = load %167
-        %169:f32 = convert %168
-        %170:f32 = add %166, %169
-        store_vector_element %color, 1u, %170
-        exit_if  # if_9
-      }
-    }
-    %171:f32 = load_vector_element %uv, 0u
-    %172:bool = gt %171, 0.75f
-    if %172 [t: %b23] {  # if_10
-      %b23 = block {  # true
-        %173:f32 = load_vector_element %color, 2u
-        %174:ptr<private, i32, read_write> = access %obj, 0u, 3i
-        %175:i32 = load %174
-        %176:f32 = convert %175
-        %177:f32 = add %173, %176
-        store_vector_element %color, 2u, %177
-        exit_if  # if_10
-      }
-    }
-    %178:f32 = load_vector_element %color, 1u
-    %179:ptr<private, i32, read_write> = access %obj, 0u, 4i
-    %180:i32 = load %179
-    %181:f32 = convert %180
-    %182:f32 = add %178, %181
-    store_vector_element %color, 1u, %182
-    %183:f32 = load_vector_element %uv, 1u
-    %184:bool = gt %183, 0.25f
-    if %184 [t: %b24] {  # if_11
-      %b24 = block {  # true
-        %185:f32 = load_vector_element %color, 0u
-        %186:ptr<private, i32, read_write> = access %obj, 0u, 5i
+    %182:f32 = load_vector_element %uv, 0u
+    %183:bool = gt %182, 0.5f
+    if %183 [t: $B22] {  # if_9
+      $B22: {  # true
+        %184:f32 = load_vector_element %color, 1u
+        %185:f32 = let %184
+        %186:ptr<private, i32, read_write> = access %obj, 0u, 2i
         %187:i32 = load %186
         %188:f32 = convert %187
         %189:f32 = add %185, %188
-        store_vector_element %color, 0u, %189
+        store_vector_element %color, 1u, %189
+        exit_if  # if_9
+      }
+    }
+    %190:f32 = load_vector_element %uv, 0u
+    %191:bool = gt %190, 0.75f
+    if %191 [t: $B23] {  # if_10
+      $B23: {  # true
+        %192:f32 = load_vector_element %color, 2u
+        %193:f32 = let %192
+        %194:ptr<private, i32, read_write> = access %obj, 0u, 3i
+        %195:i32 = load %194
+        %196:f32 = convert %195
+        %197:f32 = add %193, %196
+        store_vector_element %color, 2u, %197
+        exit_if  # if_10
+      }
+    }
+    %198:f32 = load_vector_element %color, 1u
+    %199:f32 = let %198
+    %200:ptr<private, i32, read_write> = access %obj, 0u, 4i
+    %201:i32 = load %200
+    %202:f32 = convert %201
+    %203:f32 = add %199, %202
+    store_vector_element %color, 1u, %203
+    %204:f32 = load_vector_element %uv, 1u
+    %205:bool = gt %204, 0.25f
+    if %205 [t: $B24] {  # if_11
+      $B24: {  # true
+        %206:f32 = load_vector_element %color, 0u
+        %207:f32 = let %206
+        %208:ptr<private, i32, read_write> = access %obj, 0u, 5i
+        %209:i32 = load %208
+        %210:f32 = convert %209
+        %211:f32 = add %207, %210
+        store_vector_element %color, 0u, %211
         exit_if  # if_11
       }
     }
-    %190:f32 = load_vector_element %uv, 1u
-    %191:bool = gt %190, 0.5f
-    if %191 [t: %b25] {  # if_12
-      %b25 = block {  # true
-        %192:f32 = load_vector_element %color, 1u
-        %193:ptr<private, i32, read_write> = access %obj, 0u, 6i
-        %194:i32 = load %193
-        %195:f32 = convert %194
-        %196:f32 = add %192, %195
-        store_vector_element %color, 1u, %196
+    %212:f32 = load_vector_element %uv, 1u
+    %213:bool = gt %212, 0.5f
+    if %213 [t: $B25] {  # if_12
+      $B25: {  # true
+        %214:f32 = load_vector_element %color, 1u
+        %215:f32 = let %214
+        %216:ptr<private, i32, read_write> = access %obj, 0u, 6i
+        %217:i32 = load %216
+        %218:f32 = convert %217
+        %219:f32 = add %215, %218
+        store_vector_element %color, 1u, %219
         exit_if  # if_12
       }
     }
-    %197:f32 = load_vector_element %uv, 1u
-    %198:bool = gt %197, 0.75f
-    if %198 [t: %b26] {  # if_13
-      %b26 = block {  # true
-        %199:f32 = load_vector_element %color, 2u
-        %200:ptr<private, i32, read_write> = access %obj, 0u, 7i
-        %201:i32 = load %200
-        %202:f32 = convert %201
-        %203:f32 = add %199, %202
-        store_vector_element %color, 2u, %203
+    %220:f32 = load_vector_element %uv, 1u
+    %221:bool = gt %220, 0.75f
+    if %221 [t: $B26] {  # if_13
+      $B26: {  # true
+        %222:f32 = load_vector_element %color, 2u
+        %223:f32 = let %222
+        %224:ptr<private, i32, read_write> = access %obj, 0u, 7i
+        %225:i32 = load %224
+        %226:f32 = convert %225
+        %227:f32 = add %223, %226
+        store_vector_element %color, 2u, %227
         exit_if  # if_13
       }
     }
-    %204:f32 = load_vector_element %color, 2u
-    %205:ptr<private, i32, read_write> = access %obj, 0u, 8i
-    %206:i32 = load %205
-    %207:f32 = convert %206
-    %208:f32 = add %204, %207
-    store_vector_element %color, 2u, %208
-    %209:f32 = load_vector_element %uv, 0u
-    %210:f32 = load_vector_element %uv, 1u
-    %211:f32 = sub %209, %210
-    %212:f32 = abs %211
-    %213:bool = lt %212, 0.25f
-    if %213 [t: %b27] {  # if_14
-      %b27 = block {  # true
-        %214:f32 = load_vector_element %color, 0u
-        %215:ptr<private, i32, read_write> = access %obj, 0u, 9i
-        %216:i32 = load %215
-        %217:f32 = convert %216
-        %218:f32 = add %214, %217
-        store_vector_element %color, 0u, %218
+    %228:f32 = load_vector_element %color, 2u
+    %229:f32 = let %228
+    %230:ptr<private, i32, read_write> = access %obj, 0u, 8i
+    %231:i32 = load %230
+    %232:f32 = convert %231
+    %233:f32 = add %229, %232
+    store_vector_element %color, 2u, %233
+    %234:f32 = load_vector_element %uv, 0u
+    %235:f32 = load_vector_element %uv, 1u
+    %236:f32 = sub %234, %235
+    %237:f32 = abs %236
+    %238:bool = lt %237, 0.25f
+    if %238 [t: $B27] {  # if_14
+      $B27: {  # true
+        %239:f32 = load_vector_element %color, 0u
+        %240:f32 = let %239
+        %241:ptr<private, i32, read_write> = access %obj, 0u, 9i
+        %242:i32 = load %241
+        %243:f32 = convert %242
+        %244:f32 = add %240, %243
+        store_vector_element %color, 0u, %244
         exit_if  # if_14
       }
     }
-    %219:vec3<f32> = load %color
-    %x_294:vec3<f32> = normalize %219
-    %221:f32 = access %x_294, 0u
-    %222:f32 = access %x_294, 1u
-    %223:f32 = access %x_294, 2u
-    %224:vec4<f32> = construct %221, %222, %223, 1.0f
-    store %frag_color, %224
-    %225:vec4<f32> = load %x_GLF_pos
-    store %gl_Position, %225
+    %245:vec3<f32> = load %color
+    %246:vec3<f32> = normalize %245
+    %x_294:vec3<f32> = let %246
+    %248:f32 = access %x_294, 0u
+    %249:f32 = access %x_294, 1u
+    %250:f32 = access %x_294, 2u
+    %251:vec4<f32> = construct %248, %249, %250, 1.0f
+    store %frag_color, %251
+    %252:vec4<f32> = load %x_GLF_pos
+    store %gl_Position, %252
     ret
   }
 }
-%tint_symbol = @vertex func(%x_GLF_pos_param:vec4<f32> [@location(0)]):main_out -> %b28 {
-  %b28 = block {
+%tint_symbol = @vertex func(%x_GLF_pos_param:vec4<f32> [@location(0)]):main_out {
+  $B28: {
     store %x_GLF_pos, %x_GLF_pos_param
-    %228:void = call %main_1
-    %229:vec4<f32> = load %frag_color
-    %230:vec4<f32> = load %gl_Position
-    %231:main_out = construct %229, %230
-    ret %231
+    %255:void = call %main_1
+    %256:vec4<f32> = load %frag_color
+    %257:vec4<f32> = load %gl_Position
+    %258:main_out = construct %256, %257
+    ret %258
   }
 }
-%swap_i1_i1_ = func(%i:ptr<function, i32, read_write>, %j:ptr<function, i32, read_write>):void -> %b29 {
-  %b29 = block {
+%swap_i1_i1_ = func(%i:ptr<function, i32, read_write>, %j:ptr<function, i32, read_write>):void {
+  $B29: {
     %temp:ptr<function, i32, read_write> = var
-    %236:i32 = load %i
-    %237:ptr<private, i32, read_write> = access %obj, 0u, %236
-    %238:i32 = load %237
-    store %temp, %238
-    %x_305:i32 = load %i
-    %240:ptr<private, i32, read_write> = access %obj, 0u, %x_305
-    %241:i32 = load %j
-    %242:ptr<private, i32, read_write> = access %obj, 0u, %241
-    %243:i32 = load %242
-    store %240, %243
-    %x_310:i32 = load %j
-    %245:ptr<private, i32, read_write> = access %obj, 0u, %x_310
-    %246:i32 = load %temp
-    store %245, %246
+    %263:i32 = load %i
+    %264:ptr<private, i32, read_write> = access %obj, 0u, %263
+    %265:i32 = load %264
+    store %temp, %265
+    %266:i32 = load %i
+    %x_305:i32 = let %266
+    %268:ptr<private, i32, read_write> = access %obj, 0u, %x_305
+    %269:i32 = load %j
+    %270:ptr<private, i32, read_write> = access %obj, 0u, %269
+    %271:i32 = load %270
+    store %268, %271
+    %272:i32 = load %j
+    %x_310:i32 = let %272
+    %274:ptr<private, i32, read_write> = access %obj, 0u, %x_310
+    %275:i32 = load %temp
+    store %274, %275
     ret
   }
 }
-%quicksort_ = func():void -> %b30 {
-  %b30 = block {
+%quicksort_ = func():void {
+  $B30: {
     %l_1:ptr<function, i32, read_write> = var
     %h_1:ptr<function, i32, read_write> = var
     %top:ptr<function, i32, read_write> = var
@@ -451,98 +480,107 @@
     store %l_1, 0i
     store %h_1, 9i
     store %top, -1i
-    %255:i32 = load %top
-    %x_377:i32 = add %255, 1i
+    %284:i32 = load %top
+    %285:i32 = add %284, 1i
+    %x_377:i32 = let %285
     store %top, %x_377
-    %257:ptr<function, i32, read_write> = access %stack, %x_377
-    %258:i32 = load %l_1
-    store %257, %258
-    %259:i32 = load %top
-    %x_381:i32 = add %259, 1i
+    %287:ptr<function, i32, read_write> = access %stack, %x_377
+    %288:i32 = load %l_1
+    store %287, %288
+    %289:i32 = load %top
+    %290:i32 = add %289, 1i
+    %x_381:i32 = let %290
     store %top, %x_381
-    %261:ptr<function, i32, read_write> = access %stack, %x_381
-    %262:i32 = load %h_1
-    store %261, %262
-    loop [b: %b31, c: %b32] {  # loop_4
-      %b31 = block {  # body
-        %263:i32 = load %top
-        %264:bool = gte %263, 0i
-        if %264 [t: %b33, f: %b34] {  # if_15
-          %b33 = block {  # true
+    %292:ptr<function, i32, read_write> = access %stack, %x_381
+    %293:i32 = load %h_1
+    store %292, %293
+    loop [b: $B31, c: $B32] {  # loop_4
+      $B31: {  # body
+        %294:i32 = load %top
+        %295:bool = gte %294, 0i
+        if %295 [t: $B33, f: $B34] {  # if_15
+          $B33: {  # true
             exit_if  # if_15
           }
-          %b34 = block {  # false
+          $B34: {  # false
             exit_loop  # loop_4
           }
         }
-        %x_391:i32 = load %top
-        %266:i32 = load %top
-        %267:i32 = sub %266, 1i
-        store %top, %267
-        %268:ptr<function, i32, read_write> = access %stack, %x_391
-        %269:i32 = load %268
-        store %h_1, %269
-        %x_395:i32 = load %top
-        %271:i32 = load %top
-        %272:i32 = sub %271, 1i
-        store %top, %272
-        %273:ptr<function, i32, read_write> = access %stack, %x_395
-        %274:i32 = load %273
-        store %l_1, %274
-        %275:i32 = load %l_1
-        store %param_4, %275
-        %276:i32 = load %h_1
-        store %param_5, %276
-        %x_401:i32 = call %performPartition_i1_i1_, %param_4, %param_5
+        %296:i32 = load %top
+        %x_391:i32 = let %296
+        %298:i32 = load %top
+        %299:i32 = sub %298, 1i
+        store %top, %299
+        %300:ptr<function, i32, read_write> = access %stack, %x_391
+        %301:i32 = load %300
+        store %h_1, %301
+        %302:i32 = load %top
+        %x_395:i32 = let %302
+        %304:i32 = load %top
+        %305:i32 = sub %304, 1i
+        store %top, %305
+        %306:ptr<function, i32, read_write> = access %stack, %x_395
+        %307:i32 = load %306
+        store %l_1, %307
+        %308:i32 = load %l_1
+        store %param_4, %308
+        %309:i32 = load %h_1
+        store %param_5, %309
+        %310:i32 = call %performPartition_i1_i1_, %param_4, %param_5
+        %x_401:i32 = let %310
         store %p, %x_401
-        %278:i32 = load %p
-        %279:i32 = sub %278, 1i
-        %280:i32 = load %l_1
-        %281:bool = gt %279, %280
-        if %281 [t: %b35] {  # if_16
-          %b35 = block {  # true
-            %282:i32 = load %top
-            %x_409:i32 = add %282, 1i
+        %312:i32 = load %p
+        %313:i32 = sub %312, 1i
+        %314:i32 = load %l_1
+        %315:bool = gt %313, %314
+        if %315 [t: $B35] {  # if_16
+          $B35: {  # true
+            %316:i32 = load %top
+            %317:i32 = add %316, 1i
+            %x_409:i32 = let %317
             store %top, %x_409
-            %284:ptr<function, i32, read_write> = access %stack, %x_409
-            %285:i32 = load %l_1
-            store %284, %285
-            %286:i32 = load %top
-            %x_413:i32 = add %286, 1i
+            %319:ptr<function, i32, read_write> = access %stack, %x_409
+            %320:i32 = load %l_1
+            store %319, %320
+            %321:i32 = load %top
+            %322:i32 = add %321, 1i
+            %x_413:i32 = let %322
             store %top, %x_413
-            %288:ptr<function, i32, read_write> = access %stack, %x_413
-            %289:i32 = load %p
-            %290:i32 = sub %289, 1i
-            store %288, %290
+            %324:ptr<function, i32, read_write> = access %stack, %x_413
+            %325:i32 = load %p
+            %326:i32 = sub %325, 1i
+            store %324, %326
             exit_if  # if_16
           }
         }
-        %291:i32 = load %p
-        %292:i32 = add %291, 1i
-        %293:i32 = load %h_1
-        %294:bool = lt %292, %293
-        if %294 [t: %b36] {  # if_17
-          %b36 = block {  # true
-            %295:i32 = load %top
-            %x_424:i32 = add %295, 1i
+        %327:i32 = load %p
+        %328:i32 = add %327, 1i
+        %329:i32 = load %h_1
+        %330:bool = lt %328, %329
+        if %330 [t: $B36] {  # if_17
+          $B36: {  # true
+            %331:i32 = load %top
+            %332:i32 = add %331, 1i
+            %x_424:i32 = let %332
             store %top, %x_424
-            %297:ptr<function, i32, read_write> = access %stack, %x_424
-            %298:i32 = load %p
-            %299:i32 = add %298, 1i
-            store %297, %299
-            %300:i32 = load %top
-            %x_429:i32 = add %300, 1i
+            %334:ptr<function, i32, read_write> = access %stack, %x_424
+            %335:i32 = load %p
+            %336:i32 = add %335, 1i
+            store %334, %336
+            %337:i32 = load %top
+            %338:i32 = add %337, 1i
+            %x_429:i32 = let %338
             store %top, %x_429
-            %302:ptr<function, i32, read_write> = access %stack, %x_429
-            %303:i32 = load %h_1
-            store %302, %303
+            %340:ptr<function, i32, read_write> = access %stack, %x_429
+            %341:i32 = load %h_1
+            store %340, %341
             exit_if  # if_17
           }
         }
-        continue %b32
+        continue  # -> $B32
       }
-      %b32 = block {  # continuing
-        next_iteration %b31
+      $B32: {  # continuing
+        next_iteration  # -> $B31
       }
     }
     ret
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/2.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/2.wgsl.expected.ir.msl
index 23914dc..44ad617 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/2.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/2.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: QuicksortObject = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: QuicksortObject = struct @align(4) {
   numbers:array<i32, 10> @offset(0)
 }
 
@@ -13,7 +13,7 @@
   gl_Position:vec4<f32> @offset(16), @builtin(position)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %obj:ptr<private, QuicksortObject, read_write> = var
   %x_GLF_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_pos:ptr<private, vec4<f32>, read_write> = var
@@ -22,8 +22,8 @@
   %gl_Position:ptr<private, vec4<f32>, read_write> = var
 }
 
-%performPartition_i1_i1_ = func(%l:ptr<function, i32, read_write>, %h:ptr<function, i32, read_write>):i32 -> %b2 {
-  %b2 = block {
+%performPartition_i1_i1_ = func(%l:ptr<function, i32, read_write>, %h:ptr<function, i32, read_write>):i32 {
+  $B2: {
     %x_314:ptr<function, i32, read_write> = var
     %x_315:ptr<function, i32, read_write> = var
     %pivot:ptr<function, i32, read_write> = var
@@ -33,103 +33,133 @@
     %param_1:ptr<function, i32, read_write> = var
     %param_2:ptr<function, i32, read_write> = var
     %param_3:ptr<function, i32, read_write> = var
-    %x_316:i32 = load %h
-    %20:ptr<private, i32, read_write> = access %obj, 0u, %x_316
-    %x_318:i32 = load %20
+    %19:i32 = load %h
+    %x_316:i32 = let %19
+    %21:ptr<private, i32, read_write> = access %obj, 0u, %x_316
+    %22:i32 = load %21
+    %x_318:i32 = let %22
     store %pivot, %x_318
-    %x_319:i32 = load %l
-    %23:i32 = sub %x_319, 1i
-    store %i_1, %23
-    %x_321:i32 = load %l
+    %24:i32 = load %l
+    %x_319:i32 = let %24
+    %26:i32 = sub %x_319, 1i
+    store %i_1, %26
+    %27:i32 = load %l
+    %x_321:i32 = let %27
     store %j_1, %x_321
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_326:i32 = load %j_1
-        %x_327:i32 = load %h
-        %27:i32 = sub %x_327, 1i
-        %28:bool = lte %x_326, %27
-        if %28 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %29:i32 = load %j_1
+        %x_326:i32 = let %29
+        %31:i32 = load %h
+        %x_327:i32 = let %31
+        %33:i32 = sub %x_327, 1i
+        %34:bool = lte %x_326, %33
+        if %34 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_331:i32 = load %j_1
-        %30:ptr<private, i32, read_write> = access %obj, 0u, %x_331
-        %x_333:i32 = load %30
-        %x_334:i32 = load %pivot
-        %33:bool = lte %x_333, %x_334
-        if %33 [t: %b7] {  # if_2
-          %b7 = block {  # true
-            %x_338:i32 = load %i_1
-            %35:i32 = add %x_338, 1i
-            store %i_1, %35
-            %x_340:i32 = load %i_1
+        %35:i32 = load %j_1
+        %x_331:i32 = let %35
+        %37:ptr<private, i32, read_write> = access %obj, 0u, %x_331
+        %38:i32 = load %37
+        %x_333:i32 = let %38
+        %40:i32 = load %pivot
+        %x_334:i32 = let %40
+        %42:bool = lte %x_333, %x_334
+        if %42 [t: $B7] {  # if_2
+          $B7: {  # true
+            %43:i32 = load %i_1
+            %x_338:i32 = let %43
+            %45:i32 = add %x_338, 1i
+            store %i_1, %45
+            %46:i32 = load %i_1
+            %x_340:i32 = let %46
             store %param, %x_340
-            %x_341:i32 = load %j_1
+            %48:i32 = load %j_1
+            %x_341:i32 = let %48
             store %param_1, %x_341
-            %x_342:i32 = load %param
-            %39:ptr<private, i32, read_write> = access %obj, 0u, %x_342
-            %x_344:i32 = load %39
+            %50:i32 = load %param
+            %x_342:i32 = let %50
+            %52:ptr<private, i32, read_write> = access %obj, 0u, %x_342
+            %53:i32 = load %52
+            %x_344:i32 = let %53
             store %x_315, %x_344
-            %x_345:i32 = load %param
-            %x_346:i32 = load %param_1
-            %43:ptr<private, i32, read_write> = access %obj, 0u, %x_346
-            %x_348:i32 = load %43
-            %45:ptr<private, i32, read_write> = access %obj, 0u, %x_345
-            store %45, %x_348
-            %x_350:i32 = load %param_1
-            %x_351:i32 = load %x_315
-            %48:ptr<private, i32, read_write> = access %obj, 0u, %x_350
-            store %48, %x_351
+            %55:i32 = load %param
+            %x_345:i32 = let %55
+            %57:i32 = load %param_1
+            %x_346:i32 = let %57
+            %59:ptr<private, i32, read_write> = access %obj, 0u, %x_346
+            %60:i32 = load %59
+            %x_348:i32 = let %60
+            %62:ptr<private, i32, read_write> = access %obj, 0u, %x_345
+            store %62, %x_348
+            %63:i32 = load %param_1
+            %x_350:i32 = let %63
+            %65:i32 = load %x_315
+            %x_351:i32 = let %65
+            %67:ptr<private, i32, read_write> = access %obj, 0u, %x_350
+            store %67, %x_351
             exit_if  # if_2
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_353:i32 = load %j_1
-        %50:i32 = add %x_353, 1i
-        store %j_1, %50
-        next_iteration %b3
+      $B4: {  # continuing
+        %68:i32 = load %j_1
+        %x_353:i32 = let %68
+        %70:i32 = add %x_353, 1i
+        store %j_1, %70
+        next_iteration  # -> $B3
       }
     }
-    %x_355:i32 = load %i_1
-    %52:i32 = add %x_355, 1i
-    store %param_2, %52
-    %x_357:i32 = load %h
+    %71:i32 = load %i_1
+    %x_355:i32 = let %71
+    %73:i32 = add %x_355, 1i
+    store %param_2, %73
+    %74:i32 = load %h
+    %x_357:i32 = let %74
     store %param_3, %x_357
-    %x_358:i32 = load %param_2
-    %55:ptr<private, i32, read_write> = access %obj, 0u, %x_358
-    %x_360:i32 = load %55
+    %76:i32 = load %param_2
+    %x_358:i32 = let %76
+    %78:ptr<private, i32, read_write> = access %obj, 0u, %x_358
+    %79:i32 = load %78
+    %x_360:i32 = let %79
     store %x_314, %x_360
-    %x_361:i32 = load %param_2
-    %x_362:i32 = load %param_3
-    %59:ptr<private, i32, read_write> = access %obj, 0u, %x_362
-    %x_364:i32 = load %59
-    %61:ptr<private, i32, read_write> = access %obj, 0u, %x_361
-    store %61, %x_364
-    %x_366:i32 = load %param_3
-    %x_367:i32 = load %x_314
-    %64:ptr<private, i32, read_write> = access %obj, 0u, %x_366
-    store %64, %x_367
-    if false [t: %b8, f: %b9] {  # if_3
-      %b8 = block {  # true
+    %81:i32 = load %param_2
+    %x_361:i32 = let %81
+    %83:i32 = load %param_3
+    %x_362:i32 = let %83
+    %85:ptr<private, i32, read_write> = access %obj, 0u, %x_362
+    %86:i32 = load %85
+    %x_364:i32 = let %86
+    %88:ptr<private, i32, read_write> = access %obj, 0u, %x_361
+    store %88, %x_364
+    %89:i32 = load %param_3
+    %x_366:i32 = let %89
+    %91:i32 = load %x_314
+    %x_367:i32 = let %91
+    %93:ptr<private, i32, read_write> = access %obj, 0u, %x_366
+    store %93, %x_367
+    if false [t: $B8, f: $B9] {  # if_3
+      $B8: {  # true
         exit_if  # if_3
       }
-      %b9 = block {  # false
-        %x_372:i32 = load %i_1
-        %66:i32 = add %x_372, 1i
-        ret %66
+      $B9: {  # false
+        %94:i32 = load %i_1
+        %x_372:i32 = let %94
+        %96:i32 = add %x_372, 1i
+        ret %96
       }
     }
     ret 0i
   }
 }
-%main_1 = func():void -> %b10 {
-  %b10 = block {
+%main_1 = func():void {
+  $B10: {
     %x_91:ptr<function, i32, read_write> = var
     %x_92:ptr<function, i32, read_write> = var
     %x_93:ptr<function, i32, read_write> = var
@@ -140,307 +170,387 @@
     %i_2:ptr<function, i32, read_write> = var
     %uv:ptr<function, vec2<f32>, read_write> = var
     %color:ptr<function, vec3<f32>, read_write> = var
-    %x_98:vec4<f32> = load %x_GLF_pos
-    %79:vec4<f32> = add %x_98, vec4<f32>(1.0f, 1.0f, 0.0f, 0.0f)
-    %80:vec4<f32> = mul %79, vec4<f32>(128.0f, 128.0f, 1.0f, 1.0f)
-    store %x_GLF_FragCoord, %80
+    %108:vec4<f32> = load %x_GLF_pos
+    %x_98:vec4<f32> = let %108
+    %110:vec4<f32> = add %x_98, vec4<f32>(1.0f, 1.0f, 0.0f, 0.0f)
+    %111:vec4<f32> = mul %110, vec4<f32>(128.0f, 128.0f, 1.0f, 1.0f)
+    store %x_GLF_FragCoord, %111
     store %i_2, 0i
-    loop [b: %b11, c: %b12] {  # loop_2
-      %b11 = block {  # body
-        %x_105:i32 = load %i_2
-        %82:bool = lt %x_105, 10i
-        if %82 [t: %b13, f: %b14] {  # if_4
-          %b13 = block {  # true
+    loop [b: $B11, c: $B12] {  # loop_2
+      $B11: {  # body
+        %112:i32 = load %i_2
+        %x_105:i32 = let %112
+        %114:bool = lt %x_105, 10i
+        if %114 [t: $B13, f: $B14] {  # if_4
+          $B13: {  # true
             exit_if  # if_4
           }
-          %b14 = block {  # false
+          $B14: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_108:i32 = load %i_2
-        %x_109:i32 = load %i_2
-        %85:ptr<private, i32, read_write> = access %obj, 0u, %x_108
-        %86:i32 = sub 10i, %x_109
-        store %85, %86
-        %x_112:i32 = load %i_2
-        %x_113:i32 = load %i_2
-        %89:ptr<private, i32, read_write> = access %obj, 0u, %x_113
-        %x_115:i32 = load %89
-        %x_116:i32 = load %i_2
-        %92:ptr<private, i32, read_write> = access %obj, 0u, %x_116
-        %x_118:i32 = load %92
-        %94:ptr<private, i32, read_write> = access %obj, 0u, %x_112
-        %95:i32 = mul %x_115, %x_118
-        store %94, %95
-        continue %b12
+        %115:i32 = load %i_2
+        %x_108:i32 = let %115
+        %117:i32 = load %i_2
+        %x_109:i32 = let %117
+        %119:ptr<private, i32, read_write> = access %obj, 0u, %x_108
+        %120:i32 = sub 10i, %x_109
+        store %119, %120
+        %121:i32 = load %i_2
+        %x_112:i32 = let %121
+        %123:i32 = load %i_2
+        %x_113:i32 = let %123
+        %125:ptr<private, i32, read_write> = access %obj, 0u, %x_113
+        %126:i32 = load %125
+        %x_115:i32 = let %126
+        %128:i32 = load %i_2
+        %x_116:i32 = let %128
+        %130:ptr<private, i32, read_write> = access %obj, 0u, %x_116
+        %131:i32 = load %130
+        %x_118:i32 = let %131
+        %133:ptr<private, i32, read_write> = access %obj, 0u, %x_112
+        %134:i32 = mul %x_115, %x_118
+        store %133, %134
+        continue  # -> $B12
       }
-      %b12 = block {  # continuing
-        %x_121:i32 = load %i_2
-        %97:i32 = add %x_121, 1i
-        store %i_2, %97
-        next_iteration %b11
+      $B12: {  # continuing
+        %135:i32 = load %i_2
+        %x_121:i32 = let %135
+        %137:i32 = add %x_121, 1i
+        store %i_2, %137
+        next_iteration  # -> $B11
       }
     }
     store %x_91, 0i
     store %x_92, 9i
     store %x_93, -1i
-    %x_123:i32 = load %x_93
-    %x_124:i32 = add %x_123, 1i
+    %138:i32 = load %x_93
+    %x_123:i32 = let %138
+    %140:i32 = add %x_123, 1i
+    %x_124:i32 = let %140
     store %x_93, %x_124
-    %x_125:i32 = load %x_91
-    %101:ptr<function, i32, read_write> = access %x_94, %x_124
-    store %101, %x_125
-    %x_127:i32 = load %x_93
-    %x_128:i32 = add %x_127, 1i
+    %142:i32 = load %x_91
+    %x_125:i32 = let %142
+    %144:ptr<function, i32, read_write> = access %x_94, %x_124
+    store %144, %x_125
+    %145:i32 = load %x_93
+    %x_127:i32 = let %145
+    %147:i32 = add %x_127, 1i
+    %x_128:i32 = let %147
     store %x_93, %x_128
-    %x_129:i32 = load %x_92
-    %105:ptr<function, i32, read_write> = access %x_94, %x_128
-    store %105, %x_129
-    loop [b: %b15, c: %b16] {  # loop_3
-      %b15 = block {  # body
-        %x_135:i32 = load %x_93
-        %107:bool = gte %x_135, 0i
-        if %107 [t: %b17, f: %b18] {  # if_5
-          %b17 = block {  # true
+    %149:i32 = load %x_92
+    %x_129:i32 = let %149
+    %151:ptr<function, i32, read_write> = access %x_94, %x_128
+    store %151, %x_129
+    loop [b: $B15, c: $B16] {  # loop_3
+      $B15: {  # body
+        %152:i32 = load %x_93
+        %x_135:i32 = let %152
+        %154:bool = gte %x_135, 0i
+        if %154 [t: $B17, f: $B18] {  # if_5
+          $B17: {  # true
             exit_if  # if_5
           }
-          %b18 = block {  # false
+          $B18: {  # false
             exit_loop  # loop_3
           }
         }
-        %x_138:i32 = load %x_93
-        %109:i32 = sub %x_138, 1i
-        store %x_93, %109
-        %110:ptr<function, i32, read_write> = access %x_94, %x_138
-        %x_141:i32 = load %110
+        %155:i32 = load %x_93
+        %x_138:i32 = let %155
+        %157:i32 = sub %x_138, 1i
+        store %x_93, %157
+        %158:ptr<function, i32, read_write> = access %x_94, %x_138
+        %159:i32 = load %158
+        %x_141:i32 = let %159
         store %x_92, %x_141
-        %x_142:i32 = load %x_93
-        %113:i32 = sub %x_142, 1i
-        store %x_93, %113
-        %114:ptr<function, i32, read_write> = access %x_94, %x_142
-        %x_145:i32 = load %114
+        %161:i32 = load %x_93
+        %x_142:i32 = let %161
+        %163:i32 = sub %x_142, 1i
+        store %x_93, %163
+        %164:ptr<function, i32, read_write> = access %x_94, %x_142
+        %165:i32 = load %164
+        %x_145:i32 = let %165
         store %x_91, %x_145
-        %x_146:i32 = load %x_91
+        %167:i32 = load %x_91
+        %x_146:i32 = let %167
         store %x_96, %x_146
-        %x_147:i32 = load %x_92
+        %169:i32 = load %x_92
+        %x_147:i32 = let %169
         store %x_97, %x_147
-        %x_148:i32 = call %performPartition_i1_i1_, %x_96, %x_97
+        %171:i32 = call %performPartition_i1_i1_, %x_96, %x_97
+        %x_148:i32 = let %171
         store %x_95, %x_148
-        %x_149:i32 = load %x_95
-        %x_151:i32 = load %x_91
-        %121:i32 = sub %x_149, 1i
-        %122:bool = gt %121, %x_151
-        if %122 [t: %b19] {  # if_6
-          %b19 = block {  # true
-            %x_155:i32 = load %x_93
-            %x_156:i32 = add %x_155, 1i
+        %173:i32 = load %x_95
+        %x_149:i32 = let %173
+        %175:i32 = load %x_91
+        %x_151:i32 = let %175
+        %177:i32 = sub %x_149, 1i
+        %178:bool = gt %177, %x_151
+        if %178 [t: $B19] {  # if_6
+          $B19: {  # true
+            %179:i32 = load %x_93
+            %x_155:i32 = let %179
+            %181:i32 = add %x_155, 1i
+            %x_156:i32 = let %181
             store %x_93, %x_156
-            %x_157:i32 = load %x_91
-            %126:ptr<function, i32, read_write> = access %x_94, %x_156
-            store %126, %x_157
-            %x_159:i32 = load %x_93
-            %x_160:i32 = add %x_159, 1i
+            %183:i32 = load %x_91
+            %x_157:i32 = let %183
+            %185:ptr<function, i32, read_write> = access %x_94, %x_156
+            store %185, %x_157
+            %186:i32 = load %x_93
+            %x_159:i32 = let %186
+            %188:i32 = add %x_159, 1i
+            %x_160:i32 = let %188
             store %x_93, %x_160
-            %x_161:i32 = load %x_95
-            %130:ptr<function, i32, read_write> = access %x_94, %x_160
-            %131:i32 = sub %x_161, 1i
-            store %130, %131
+            %190:i32 = load %x_95
+            %x_161:i32 = let %190
+            %192:ptr<function, i32, read_write> = access %x_94, %x_160
+            %193:i32 = sub %x_161, 1i
+            store %192, %193
             exit_if  # if_6
           }
         }
-        %x_164:i32 = load %x_95
-        %x_166:i32 = load %x_92
-        %134:i32 = add %x_164, 1i
-        %135:bool = lt %134, %x_166
-        if %135 [t: %b20] {  # if_7
-          %b20 = block {  # true
-            %x_170:i32 = load %x_93
-            %x_171:i32 = add %x_170, 1i
+        %194:i32 = load %x_95
+        %x_164:i32 = let %194
+        %196:i32 = load %x_92
+        %x_166:i32 = let %196
+        %198:i32 = add %x_164, 1i
+        %199:bool = lt %198, %x_166
+        if %199 [t: $B20] {  # if_7
+          $B20: {  # true
+            %200:i32 = load %x_93
+            %x_170:i32 = let %200
+            %202:i32 = add %x_170, 1i
+            %x_171:i32 = let %202
             store %x_93, %x_171
-            %x_172:i32 = load %x_95
-            %139:ptr<function, i32, read_write> = access %x_94, %x_171
-            %140:i32 = add %x_172, 1i
-            store %139, %140
-            %x_175:i32 = load %x_93
-            %x_176:i32 = add %x_175, 1i
+            %204:i32 = load %x_95
+            %x_172:i32 = let %204
+            %206:ptr<function, i32, read_write> = access %x_94, %x_171
+            %207:i32 = add %x_172, 1i
+            store %206, %207
+            %208:i32 = load %x_93
+            %x_175:i32 = let %208
+            %210:i32 = add %x_175, 1i
+            %x_176:i32 = let %210
             store %x_93, %x_176
-            %x_177:i32 = load %x_92
-            %144:ptr<function, i32, read_write> = access %x_94, %x_176
-            store %144, %x_177
+            %212:i32 = load %x_92
+            %x_177:i32 = let %212
+            %214:ptr<function, i32, read_write> = access %x_94, %x_176
+            store %214, %x_177
             exit_if  # if_7
           }
         }
-        continue %b16
+        continue  # -> $B16
       }
-      %b16 = block {  # continuing
-        next_iteration %b15
+      $B16: {  # continuing
+        next_iteration  # -> $B15
       }
     }
-    %x_179:vec4<f32> = load %x_GLF_FragCoord
-    %146:ptr<uniform, vec2<f32>, read> = access %x_34, 0u
-    %x_182:vec2<f32> = load %146
-    %148:f32 = access %x_179, 0u
-    %149:f32 = access %x_179, 1u
-    %150:vec2<f32> = construct %148, %149
-    %151:vec2<f32> = div %150, %x_182
-    store %uv, %151
+    %215:vec4<f32> = load %x_GLF_FragCoord
+    %x_179:vec4<f32> = let %215
+    %217:ptr<uniform, vec2<f32>, read> = access %x_34, 0u
+    %218:vec2<f32> = load %217
+    %x_182:vec2<f32> = let %218
+    %220:f32 = access %x_179, 0u
+    %221:f32 = access %x_179, 1u
+    %222:vec2<f32> = construct %220, %221
+    %223:vec2<f32> = div %222, %x_182
+    store %uv, %223
     store %color, vec3<f32>(1.0f, 2.0f, 3.0f)
-    %152:ptr<private, i32, read_write> = access %obj, 0u, 0i
-    %x_185:i32 = load %152
-    %x_188:f32 = load_vector_element %color, 0u
-    %155:f32 = convert %x_185
-    %156:f32 = add %x_188, %155
-    store_vector_element %color, 0u, %156
-    %x_192:f32 = load_vector_element %uv, 0u
-    %158:bool = gt %x_192, 0.25f
-    if %158 [t: %b21] {  # if_8
-      %b21 = block {  # true
-        %159:ptr<private, i32, read_write> = access %obj, 0u, 1i
-        %x_197:i32 = load %159
-        %x_200:f32 = load_vector_element %color, 0u
-        %162:f32 = convert %x_197
-        %163:f32 = add %x_200, %162
-        store_vector_element %color, 0u, %163
+    %224:ptr<private, i32, read_write> = access %obj, 0u, 0i
+    %225:i32 = load %224
+    %x_185:i32 = let %225
+    %227:f32 = load_vector_element %color, 0u
+    %x_188:f32 = let %227
+    %229:f32 = convert %x_185
+    %230:f32 = add %x_188, %229
+    store_vector_element %color, 0u, %230
+    %231:f32 = load_vector_element %uv, 0u
+    %x_192:f32 = let %231
+    %233:bool = gt %x_192, 0.25f
+    if %233 [t: $B21] {  # if_8
+      $B21: {  # true
+        %234:ptr<private, i32, read_write> = access %obj, 0u, 1i
+        %235:i32 = load %234
+        %x_197:i32 = let %235
+        %237:f32 = load_vector_element %color, 0u
+        %x_200:f32 = let %237
+        %239:f32 = convert %x_197
+        %240:f32 = add %x_200, %239
+        store_vector_element %color, 0u, %240
         exit_if  # if_8
       }
     }
-    %x_204:f32 = load_vector_element %uv, 0u
-    %165:bool = gt %x_204, 0.5f
-    if %165 [t: %b22] {  # if_9
-      %b22 = block {  # true
-        %166:ptr<private, i32, read_write> = access %obj, 0u, 2i
-        %x_209:i32 = load %166
-        %x_212:f32 = load_vector_element %color, 1u
-        %169:f32 = convert %x_209
-        %170:f32 = add %x_212, %169
-        store_vector_element %color, 1u, %170
+    %241:f32 = load_vector_element %uv, 0u
+    %x_204:f32 = let %241
+    %243:bool = gt %x_204, 0.5f
+    if %243 [t: $B22] {  # if_9
+      $B22: {  # true
+        %244:ptr<private, i32, read_write> = access %obj, 0u, 2i
+        %245:i32 = load %244
+        %x_209:i32 = let %245
+        %247:f32 = load_vector_element %color, 1u
+        %x_212:f32 = let %247
+        %249:f32 = convert %x_209
+        %250:f32 = add %x_212, %249
+        store_vector_element %color, 1u, %250
         exit_if  # if_9
       }
     }
-    %x_216:f32 = load_vector_element %uv, 0u
-    %172:bool = gt %x_216, 0.75f
-    if %172 [t: %b23] {  # if_10
-      %b23 = block {  # true
-        %173:ptr<private, i32, read_write> = access %obj, 0u, 3i
-        %x_221:i32 = load %173
-        %x_224:f32 = load_vector_element %color, 2u
-        %176:f32 = convert %x_221
-        %177:f32 = add %x_224, %176
-        store_vector_element %color, 2u, %177
+    %251:f32 = load_vector_element %uv, 0u
+    %x_216:f32 = let %251
+    %253:bool = gt %x_216, 0.75f
+    if %253 [t: $B23] {  # if_10
+      $B23: {  # true
+        %254:ptr<private, i32, read_write> = access %obj, 0u, 3i
+        %255:i32 = load %254
+        %x_221:i32 = let %255
+        %257:f32 = load_vector_element %color, 2u
+        %x_224:f32 = let %257
+        %259:f32 = convert %x_221
+        %260:f32 = add %x_224, %259
+        store_vector_element %color, 2u, %260
         exit_if  # if_10
       }
     }
-    %178:ptr<private, i32, read_write> = access %obj, 0u, 4i
-    %x_228:i32 = load %178
-    %x_231:f32 = load_vector_element %color, 1u
-    %181:f32 = convert %x_228
-    %182:f32 = add %x_231, %181
-    store_vector_element %color, 1u, %182
-    %x_235:f32 = load_vector_element %uv, 1u
-    %184:bool = gt %x_235, 0.25f
-    if %184 [t: %b24] {  # if_11
-      %b24 = block {  # true
-        %185:ptr<private, i32, read_write> = access %obj, 0u, 5i
-        %x_240:i32 = load %185
-        %x_243:f32 = load_vector_element %color, 0u
-        %188:f32 = convert %x_240
-        %189:f32 = add %x_243, %188
-        store_vector_element %color, 0u, %189
+    %261:ptr<private, i32, read_write> = access %obj, 0u, 4i
+    %262:i32 = load %261
+    %x_228:i32 = let %262
+    %264:f32 = load_vector_element %color, 1u
+    %x_231:f32 = let %264
+    %266:f32 = convert %x_228
+    %267:f32 = add %x_231, %266
+    store_vector_element %color, 1u, %267
+    %268:f32 = load_vector_element %uv, 1u
+    %x_235:f32 = let %268
+    %270:bool = gt %x_235, 0.25f
+    if %270 [t: $B24] {  # if_11
+      $B24: {  # true
+        %271:ptr<private, i32, read_write> = access %obj, 0u, 5i
+        %272:i32 = load %271
+        %x_240:i32 = let %272
+        %274:f32 = load_vector_element %color, 0u
+        %x_243:f32 = let %274
+        %276:f32 = convert %x_240
+        %277:f32 = add %x_243, %276
+        store_vector_element %color, 0u, %277
         exit_if  # if_11
       }
     }
-    %x_247:f32 = load_vector_element %uv, 1u
-    %191:bool = gt %x_247, 0.5f
-    if %191 [t: %b25] {  # if_12
-      %b25 = block {  # true
-        %192:ptr<private, i32, read_write> = access %obj, 0u, 6i
-        %x_252:i32 = load %192
-        %x_255:f32 = load_vector_element %color, 1u
-        %195:f32 = convert %x_252
-        %196:f32 = add %x_255, %195
-        store_vector_element %color, 1u, %196
+    %278:f32 = load_vector_element %uv, 1u
+    %x_247:f32 = let %278
+    %280:bool = gt %x_247, 0.5f
+    if %280 [t: $B25] {  # if_12
+      $B25: {  # true
+        %281:ptr<private, i32, read_write> = access %obj, 0u, 6i
+        %282:i32 = load %281
+        %x_252:i32 = let %282
+        %284:f32 = load_vector_element %color, 1u
+        %x_255:f32 = let %284
+        %286:f32 = convert %x_252
+        %287:f32 = add %x_255, %286
+        store_vector_element %color, 1u, %287
         exit_if  # if_12
       }
     }
-    %x_259:f32 = load_vector_element %uv, 1u
-    %198:bool = gt %x_259, 0.75f
-    if %198 [t: %b26] {  # if_13
-      %b26 = block {  # true
-        %199:ptr<private, i32, read_write> = access %obj, 0u, 7i
-        %x_264:i32 = load %199
-        %x_267:f32 = load_vector_element %color, 2u
-        %202:f32 = convert %x_264
-        %203:f32 = add %x_267, %202
-        store_vector_element %color, 2u, %203
+    %288:f32 = load_vector_element %uv, 1u
+    %x_259:f32 = let %288
+    %290:bool = gt %x_259, 0.75f
+    if %290 [t: $B26] {  # if_13
+      $B26: {  # true
+        %291:ptr<private, i32, read_write> = access %obj, 0u, 7i
+        %292:i32 = load %291
+        %x_264:i32 = let %292
+        %294:f32 = load_vector_element %color, 2u
+        %x_267:f32 = let %294
+        %296:f32 = convert %x_264
+        %297:f32 = add %x_267, %296
+        store_vector_element %color, 2u, %297
         exit_if  # if_13
       }
     }
-    %204:ptr<private, i32, read_write> = access %obj, 0u, 8i
-    %x_271:i32 = load %204
-    %x_274:f32 = load_vector_element %color, 2u
-    %207:f32 = convert %x_271
-    %208:f32 = add %x_274, %207
-    store_vector_element %color, 2u, %208
-    %x_278:f32 = load_vector_element %uv, 0u
-    %x_280:f32 = load_vector_element %uv, 1u
-    %211:f32 = sub %x_278, %x_280
-    %212:f32 = abs %211
-    %213:bool = lt %212, 0.25f
-    if %213 [t: %b27] {  # if_14
-      %b27 = block {  # true
-        %214:ptr<private, i32, read_write> = access %obj, 0u, 9i
-        %x_287:i32 = load %214
-        %x_290:f32 = load_vector_element %color, 0u
-        %217:f32 = convert %x_287
-        %218:f32 = add %x_290, %217
-        store_vector_element %color, 0u, %218
+    %298:ptr<private, i32, read_write> = access %obj, 0u, 8i
+    %299:i32 = load %298
+    %x_271:i32 = let %299
+    %301:f32 = load_vector_element %color, 2u
+    %x_274:f32 = let %301
+    %303:f32 = convert %x_271
+    %304:f32 = add %x_274, %303
+    store_vector_element %color, 2u, %304
+    %305:f32 = load_vector_element %uv, 0u
+    %x_278:f32 = let %305
+    %307:f32 = load_vector_element %uv, 1u
+    %x_280:f32 = let %307
+    %309:f32 = sub %x_278, %x_280
+    %310:f32 = abs %309
+    %311:bool = lt %310, 0.25f
+    if %311 [t: $B27] {  # if_14
+      $B27: {  # true
+        %312:ptr<private, i32, read_write> = access %obj, 0u, 9i
+        %313:i32 = load %312
+        %x_287:i32 = let %313
+        %315:f32 = load_vector_element %color, 0u
+        %x_290:f32 = let %315
+        %317:f32 = convert %x_287
+        %318:f32 = add %x_290, %317
+        store_vector_element %color, 0u, %318
         exit_if  # if_14
       }
     }
-    %x_293:vec3<f32> = load %color
-    %x_294:vec3<f32> = normalize %x_293
-    %221:f32 = access %x_294, 0u
-    %222:f32 = access %x_294, 1u
-    %223:f32 = access %x_294, 2u
-    %224:vec4<f32> = construct %221, %222, %223, 1.0f
-    store %frag_color, %224
-    %x_299:vec4<f32> = load %x_GLF_pos
+    %319:vec3<f32> = load %color
+    %x_293:vec3<f32> = let %319
+    %321:vec3<f32> = normalize %x_293
+    %x_294:vec3<f32> = let %321
+    %323:f32 = access %x_294, 0u
+    %324:f32 = access %x_294, 1u
+    %325:f32 = access %x_294, 2u
+    %326:vec4<f32> = construct %323, %324, %325, 1.0f
+    store %frag_color, %326
+    %327:vec4<f32> = load %x_GLF_pos
+    %x_299:vec4<f32> = let %327
     store %gl_Position, %x_299
     ret
   }
 }
-%tint_symbol = @vertex func(%x_GLF_pos_param:vec4<f32> [@location(0)]):main_out -> %b28 {
-  %b28 = block {
+%tint_symbol = @vertex func(%x_GLF_pos_param:vec4<f32> [@location(0)]):main_out {
+  $B28: {
     store %x_GLF_pos, %x_GLF_pos_param
-    %228:void = call %main_1
-    %229:vec4<f32> = load %frag_color
-    %230:vec4<f32> = load %gl_Position
-    %231:main_out = construct %229, %230
-    ret %231
+    %331:void = call %main_1
+    %332:vec4<f32> = load %frag_color
+    %333:vec4<f32> = load %gl_Position
+    %334:main_out = construct %332, %333
+    ret %334
   }
 }
-%swap_i1_i1_ = func(%i:ptr<function, i32, read_write>, %j:ptr<function, i32, read_write>):void -> %b29 {
-  %b29 = block {
+%swap_i1_i1_ = func(%i:ptr<function, i32, read_write>, %j:ptr<function, i32, read_write>):void {
+  $B29: {
     %temp:ptr<function, i32, read_write> = var
-    %x_302:i32 = load %i
-    %237:ptr<private, i32, read_write> = access %obj, 0u, %x_302
-    %x_304:i32 = load %237
+    %339:i32 = load %i
+    %x_302:i32 = let %339
+    %341:ptr<private, i32, read_write> = access %obj, 0u, %x_302
+    %342:i32 = load %341
+    %x_304:i32 = let %342
     store %temp, %x_304
-    %x_305:i32 = load %i
-    %x_306:i32 = load %j
-    %241:ptr<private, i32, read_write> = access %obj, 0u, %x_306
-    %x_308:i32 = load %241
-    %243:ptr<private, i32, read_write> = access %obj, 0u, %x_305
-    store %243, %x_308
-    %x_310:i32 = load %j
-    %x_311:i32 = load %temp
-    %246:ptr<private, i32, read_write> = access %obj, 0u, %x_310
-    store %246, %x_311
+    %344:i32 = load %i
+    %x_305:i32 = let %344
+    %346:i32 = load %j
+    %x_306:i32 = let %346
+    %348:ptr<private, i32, read_write> = access %obj, 0u, %x_306
+    %349:i32 = load %348
+    %x_308:i32 = let %349
+    %351:ptr<private, i32, read_write> = access %obj, 0u, %x_305
+    store %351, %x_308
+    %352:i32 = load %j
+    %x_310:i32 = let %352
+    %354:i32 = load %temp
+    %x_311:i32 = let %354
+    %356:ptr<private, i32, read_write> = access %obj, 0u, %x_310
+    store %356, %x_311
     ret
   }
 }
-%quicksort_ = func():void -> %b30 {
-  %b30 = block {
+%quicksort_ = func():void {
+  $B30: {
     %l_1:ptr<function, i32, read_write> = var
     %h_1:ptr<function, i32, read_write> = var
     %top:ptr<function, i32, read_write> = var
@@ -451,96 +561,126 @@
     store %l_1, 0i
     store %h_1, 9i
     store %top, -1i
-    %x_376:i32 = load %top
-    %x_377:i32 = add %x_376, 1i
+    %365:i32 = load %top
+    %x_376:i32 = let %365
+    %367:i32 = add %x_376, 1i
+    %x_377:i32 = let %367
     store %top, %x_377
-    %x_378:i32 = load %l_1
-    %258:ptr<function, i32, read_write> = access %stack, %x_377
-    store %258, %x_378
-    %x_380:i32 = load %top
-    %x_381:i32 = add %x_380, 1i
+    %369:i32 = load %l_1
+    %x_378:i32 = let %369
+    %371:ptr<function, i32, read_write> = access %stack, %x_377
+    store %371, %x_378
+    %372:i32 = load %top
+    %x_380:i32 = let %372
+    %374:i32 = add %x_380, 1i
+    %x_381:i32 = let %374
     store %top, %x_381
-    %x_382:i32 = load %h_1
-    %262:ptr<function, i32, read_write> = access %stack, %x_381
-    store %262, %x_382
-    loop [b: %b31, c: %b32] {  # loop_4
-      %b31 = block {  # body
-        %x_388:i32 = load %top
-        %264:bool = gte %x_388, 0i
-        if %264 [t: %b33, f: %b34] {  # if_15
-          %b33 = block {  # true
+    %376:i32 = load %h_1
+    %x_382:i32 = let %376
+    %378:ptr<function, i32, read_write> = access %stack, %x_381
+    store %378, %x_382
+    loop [b: $B31, c: $B32] {  # loop_4
+      $B31: {  # body
+        %379:i32 = load %top
+        %x_388:i32 = let %379
+        %381:bool = gte %x_388, 0i
+        if %381 [t: $B33, f: $B34] {  # if_15
+          $B33: {  # true
             exit_if  # if_15
           }
-          %b34 = block {  # false
+          $B34: {  # false
             exit_loop  # loop_4
           }
         }
-        %x_391:i32 = load %top
-        %266:i32 = sub %x_391, 1i
-        store %top, %266
-        %267:ptr<function, i32, read_write> = access %stack, %x_391
-        %x_394:i32 = load %267
+        %382:i32 = load %top
+        %x_391:i32 = let %382
+        %384:i32 = sub %x_391, 1i
+        store %top, %384
+        %385:ptr<function, i32, read_write> = access %stack, %x_391
+        %386:i32 = load %385
+        %x_394:i32 = let %386
         store %h_1, %x_394
-        %x_395:i32 = load %top
-        %270:i32 = sub %x_395, 1i
-        store %top, %270
-        %271:ptr<function, i32, read_write> = access %stack, %x_395
-        %x_398:i32 = load %271
+        %388:i32 = load %top
+        %x_395:i32 = let %388
+        %390:i32 = sub %x_395, 1i
+        store %top, %390
+        %391:ptr<function, i32, read_write> = access %stack, %x_395
+        %392:i32 = load %391
+        %x_398:i32 = let %392
         store %l_1, %x_398
-        %x_399:i32 = load %l_1
+        %394:i32 = load %l_1
+        %x_399:i32 = let %394
         store %param_4, %x_399
-        %x_400:i32 = load %h_1
+        %396:i32 = load %h_1
+        %x_400:i32 = let %396
         store %param_5, %x_400
-        %x_401:i32 = call %performPartition_i1_i1_, %param_4, %param_5
+        %398:i32 = call %performPartition_i1_i1_, %param_4, %param_5
+        %x_401:i32 = let %398
         store %p, %x_401
-        %x_402:i32 = load %p
-        %x_404:i32 = load %l_1
-        %278:i32 = sub %x_402, 1i
-        %279:bool = gt %278, %x_404
-        if %279 [t: %b35] {  # if_16
-          %b35 = block {  # true
-            %x_408:i32 = load %top
-            %x_409:i32 = add %x_408, 1i
+        %400:i32 = load %p
+        %x_402:i32 = let %400
+        %402:i32 = load %l_1
+        %x_404:i32 = let %402
+        %404:i32 = sub %x_402, 1i
+        %405:bool = gt %404, %x_404
+        if %405 [t: $B35] {  # if_16
+          $B35: {  # true
+            %406:i32 = load %top
+            %x_408:i32 = let %406
+            %408:i32 = add %x_408, 1i
+            %x_409:i32 = let %408
             store %top, %x_409
-            %x_410:i32 = load %l_1
-            %283:ptr<function, i32, read_write> = access %stack, %x_409
-            store %283, %x_410
-            %x_412:i32 = load %top
-            %x_413:i32 = add %x_412, 1i
+            %410:i32 = load %l_1
+            %x_410:i32 = let %410
+            %412:ptr<function, i32, read_write> = access %stack, %x_409
+            store %412, %x_410
+            %413:i32 = load %top
+            %x_412:i32 = let %413
+            %415:i32 = add %x_412, 1i
+            %x_413:i32 = let %415
             store %top, %x_413
-            %x_414:i32 = load %p
-            %287:ptr<function, i32, read_write> = access %stack, %x_413
-            %288:i32 = sub %x_414, 1i
-            store %287, %288
+            %417:i32 = load %p
+            %x_414:i32 = let %417
+            %419:ptr<function, i32, read_write> = access %stack, %x_413
+            %420:i32 = sub %x_414, 1i
+            store %419, %420
             exit_if  # if_16
           }
         }
-        %x_417:i32 = load %p
-        %x_419:i32 = load %h_1
-        %291:i32 = add %x_417, 1i
-        %292:bool = lt %291, %x_419
-        if %292 [t: %b36] {  # if_17
-          %b36 = block {  # true
-            %x_423:i32 = load %top
-            %x_424:i32 = add %x_423, 1i
+        %421:i32 = load %p
+        %x_417:i32 = let %421
+        %423:i32 = load %h_1
+        %x_419:i32 = let %423
+        %425:i32 = add %x_417, 1i
+        %426:bool = lt %425, %x_419
+        if %426 [t: $B36] {  # if_17
+          $B36: {  # true
+            %427:i32 = load %top
+            %x_423:i32 = let %427
+            %429:i32 = add %x_423, 1i
+            %x_424:i32 = let %429
             store %top, %x_424
-            %x_425:i32 = load %p
-            %296:ptr<function, i32, read_write> = access %stack, %x_424
-            %297:i32 = add %x_425, 1i
-            store %296, %297
-            %x_428:i32 = load %top
-            %x_429:i32 = add %x_428, 1i
+            %431:i32 = load %p
+            %x_425:i32 = let %431
+            %433:ptr<function, i32, read_write> = access %stack, %x_424
+            %434:i32 = add %x_425, 1i
+            store %433, %434
+            %435:i32 = load %top
+            %x_428:i32 = let %435
+            %437:i32 = add %x_428, 1i
+            %x_429:i32 = let %437
             store %top, %x_429
-            %x_430:i32 = load %h_1
-            %301:ptr<function, i32, read_write> = access %stack, %x_429
-            store %301, %x_430
+            %439:i32 = load %h_1
+            %x_430:i32 = let %439
+            %441:ptr<function, i32, read_write> = access %stack, %x_429
+            store %441, %x_430
             exit_if  # if_17
           }
         }
-        continue %b32
+        continue  # -> $B32
       }
-      %b32 = block {  # continuing
-        next_iteration %b31
+      $B32: {  # continuing
+        next_iteration  # -> $B31
       }
     }
     ret
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-quicksort-max-value-as-index/2-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-quicksort-max-value-as-index/2-opt.spvasm.expected.ir.msl
index fb5e600..eedc2e5 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-quicksort-max-value-as-index/2-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/stable-quicksort-max-value-as-index/2-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: QuicksortObject = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: QuicksortObject = struct @align(4) {
   numbers:array<i32, 10> @offset(0)
 }
 
@@ -17,7 +17,7 @@
   gl_Position:vec4<f32> @offset(16), @builtin(position)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %obj:ptr<private, QuicksortObject, read_write> = var
   %x_GLF_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_pos:ptr<private, vec4<f32>, read_write> = var
@@ -27,28 +27,30 @@
   %gl_Position:ptr<private, vec4<f32>, read_write> = var
 }
 
-%swap_i1_i1_ = func(%i:ptr<function, i32, read_write>, %j:ptr<function, i32, read_write>):void -> %b2 {
-  %b2 = block {
+%swap_i1_i1_ = func(%i:ptr<function, i32, read_write>, %j:ptr<function, i32, read_write>):void {
+  $B2: {
     %temp:ptr<function, i32, read_write> = var
     %12:i32 = load %i
     %13:ptr<private, i32, read_write> = access %obj, 0u, %12
     %14:i32 = load %13
     store %temp, %14
-    %x_260:i32 = load %i
-    %16:ptr<private, i32, read_write> = access %obj, 0u, %x_260
-    %17:i32 = load %j
-    %18:ptr<private, i32, read_write> = access %obj, 0u, %17
-    %19:i32 = load %18
-    store %16, %19
-    %x_265:i32 = load %j
-    %21:ptr<private, i32, read_write> = access %obj, 0u, %x_265
-    %22:i32 = load %temp
-    store %21, %22
+    %15:i32 = load %i
+    %x_260:i32 = let %15
+    %17:ptr<private, i32, read_write> = access %obj, 0u, %x_260
+    %18:i32 = load %j
+    %19:ptr<private, i32, read_write> = access %obj, 0u, %18
+    %20:i32 = load %19
+    store %17, %20
+    %21:i32 = load %j
+    %x_265:i32 = let %21
+    %23:ptr<private, i32, read_write> = access %obj, 0u, %x_265
+    %24:i32 = load %temp
+    store %23, %24
     ret
   }
 }
-%performPartition_i1_i1_ = func(%l:ptr<function, i32, read_write>, %h:ptr<function, i32, read_write>):i32 -> %b3 {
-  %b3 = block {
+%performPartition_i1_i1_ = func(%l:ptr<function, i32, read_write>, %h:ptr<function, i32, read_write>):i32 {
+  $B3: {
     %pivot:ptr<function, i32, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
     %j_1:ptr<function, i32, read_write> = var
@@ -56,69 +58,70 @@
     %param_1:ptr<function, i32, read_write> = var
     %param_2:ptr<function, i32, read_write> = var
     %param_3:ptr<function, i32, read_write> = var
-    %33:i32 = load %h
-    %34:ptr<private, i32, read_write> = access %obj, 0u, %33
-    %35:i32 = load %34
-    store %pivot, %35
-    %36:i32 = load %l
-    %37:i32 = sub %36, 1i
-    store %i_1, %37
+    %35:i32 = load %h
+    %36:ptr<private, i32, read_write> = access %obj, 0u, %35
+    %37:i32 = load %36
+    store %pivot, %37
     %38:i32 = load %l
-    store %j_1, %38
-    loop [b: %b4, c: %b5] {  # loop_1
-      %b4 = block {  # body
-        %39:i32 = load %j_1
-        %40:i32 = load %h
-        %41:i32 = sub %40, 1i
-        %42:bool = lte %39, %41
-        if %42 [t: %b6, f: %b7] {  # if_1
-          %b6 = block {  # true
+    %39:i32 = sub %38, 1i
+    store %i_1, %39
+    %40:i32 = load %l
+    store %j_1, %40
+    loop [b: $B4, c: $B5] {  # loop_1
+      $B4: {  # body
+        %41:i32 = load %j_1
+        %42:i32 = load %h
+        %43:i32 = sub %42, 1i
+        %44:bool = lte %41, %43
+        if %44 [t: $B6, f: $B7] {  # if_1
+          $B6: {  # true
             exit_if  # if_1
           }
-          %b7 = block {  # false
+          $B7: {  # false
             exit_loop  # loop_1
           }
         }
-        %43:i32 = load %j_1
-        %44:ptr<private, i32, read_write> = access %obj, 0u, %43
-        %45:i32 = load %44
-        %46:i32 = load %pivot
-        %47:bool = lte %45, %46
-        if %47 [t: %b8] {  # if_2
-          %b8 = block {  # true
-            %48:i32 = load %i_1
-            %49:i32 = add %48, 1i
-            store %i_1, %49
+        %45:i32 = load %j_1
+        %46:ptr<private, i32, read_write> = access %obj, 0u, %45
+        %47:i32 = load %46
+        %48:i32 = load %pivot
+        %49:bool = lte %47, %48
+        if %49 [t: $B8] {  # if_2
+          $B8: {  # true
             %50:i32 = load %i_1
-            store %param, %50
-            %51:i32 = load %j_1
-            store %param_1, %51
-            %52:void = call %swap_i1_i1_, %param, %param_1
+            %51:i32 = add %50, 1i
+            store %i_1, %51
+            %52:i32 = load %i_1
+            store %param, %52
+            %53:i32 = load %j_1
+            store %param_1, %53
+            %54:void = call %swap_i1_i1_, %param, %param_1
             exit_if  # if_2
           }
         }
-        continue %b5
+        continue  # -> $B5
       }
-      %b5 = block {  # continuing
-        %53:i32 = load %j_1
-        %54:i32 = add %53, 1i
-        store %j_1, %54
-        next_iteration %b4
+      $B5: {  # continuing
+        %55:i32 = load %j_1
+        %56:i32 = add %55, 1i
+        store %j_1, %56
+        next_iteration  # -> $B4
       }
     }
-    %55:i32 = load %i_1
-    %56:i32 = add %55, 1i
-    store %param_2, %56
-    %57:i32 = load %h
-    store %param_3, %57
-    %58:void = call %swap_i1_i1_, %param_2, %param_3
-    %x_302:i32 = load %i_1
-    %60:i32 = add %x_302, 1i
-    ret %60
+    %57:i32 = load %i_1
+    %58:i32 = add %57, 1i
+    store %param_2, %58
+    %59:i32 = load %h
+    store %param_3, %59
+    %60:void = call %swap_i1_i1_, %param_2, %param_3
+    %61:i32 = load %i_1
+    %x_302:i32 = let %61
+    %63:i32 = add %x_302, 1i
+    ret %63
   }
 }
-%quicksort_ = func():void -> %b9 {
-  %b9 = block {
+%quicksort_ = func():void {
+  $B9: {
     %l_1:ptr<function, i32, read_write> = var
     %h_1:ptr<function, i32, read_write> = var
     %top:ptr<function, i32, read_write> = var
@@ -129,303 +132,336 @@
     store %l_1, 0i
     store %h_1, 9i
     store %top, -1i
-    %69:i32 = load %top
-    %x_306:i32 = add %69, 1i
+    %72:i32 = load %top
+    %73:i32 = add %72, 1i
+    %x_306:i32 = let %73
     store %top, %x_306
-    %71:ptr<function, i32, read_write> = access %stack, %x_306
-    %72:i32 = load %l_1
-    store %71, %72
-    %73:i32 = load %top
-    %x_310:i32 = add %73, 1i
-    store %top, %x_310
-    %75:ptr<function, i32, read_write> = access %stack, %x_310
-    %76:i32 = load %h_1
+    %75:ptr<function, i32, read_write> = access %stack, %x_306
+    %76:i32 = load %l_1
     store %75, %76
-    loop [b: %b10, c: %b11] {  # loop_2
-      %b10 = block {  # body
-        %77:i32 = load %top
-        %78:bool = gte %77, 0i
-        if %78 [t: %b12, f: %b13] {  # if_3
-          %b12 = block {  # true
+    %77:i32 = load %top
+    %78:i32 = add %77, 1i
+    %x_310:i32 = let %78
+    store %top, %x_310
+    %80:ptr<function, i32, read_write> = access %stack, %x_310
+    %81:i32 = load %h_1
+    store %80, %81
+    loop [b: $B10, c: $B11] {  # loop_2
+      $B10: {  # body
+        %82:i32 = load %top
+        %83:bool = gte %82, 0i
+        if %83 [t: $B12, f: $B13] {  # if_3
+          $B12: {  # true
             exit_if  # if_3
           }
-          %b13 = block {  # false
+          $B13: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_320:i32 = load %top
-        %80:i32 = load %top
-        %81:i32 = sub %80, 1i
-        store %top, %81
-        %82:ptr<function, i32, read_write> = access %stack, %x_320
-        %83:i32 = load %82
-        store %h_1, %83
-        %x_324:i32 = load %top
-        %85:i32 = load %top
-        %86:i32 = sub %85, 1i
-        store %top, %86
-        %87:ptr<function, i32, read_write> = access %stack, %x_324
-        %88:i32 = load %87
-        store %l_1, %88
-        %89:i32 = load %l_1
-        store %param_4, %89
-        %90:i32 = load %h_1
-        store %param_5, %90
-        %x_330:i32 = call %performPartition_i1_i1_, %param_4, %param_5
-        store %p, %x_330
-        %92:i32 = load %p
+        %84:i32 = load %top
+        %x_320:i32 = let %84
+        %86:i32 = load %top
+        %87:i32 = sub %86, 1i
+        store %top, %87
+        %88:ptr<function, i32, read_write> = access %stack, %x_320
+        %89:i32 = load %88
+        store %h_1, %89
+        %90:i32 = load %top
+        %x_324:i32 = let %90
+        %92:i32 = load %top
         %93:i32 = sub %92, 1i
-        %94:i32 = load %l_1
-        %95:bool = gt %93, %94
-        if %95 [t: %b14] {  # if_4
-          %b14 = block {  # true
-            %96:i32 = load %top
-            %x_338:i32 = add %96, 1i
+        store %top, %93
+        %94:ptr<function, i32, read_write> = access %stack, %x_324
+        %95:i32 = load %94
+        store %l_1, %95
+        %96:i32 = load %l_1
+        store %param_4, %96
+        %97:i32 = load %h_1
+        store %param_5, %97
+        %98:i32 = call %performPartition_i1_i1_, %param_4, %param_5
+        %x_330:i32 = let %98
+        store %p, %x_330
+        %100:i32 = load %p
+        %101:i32 = sub %100, 1i
+        %102:i32 = load %l_1
+        %103:bool = gt %101, %102
+        if %103 [t: $B14] {  # if_4
+          $B14: {  # true
+            %104:i32 = load %top
+            %105:i32 = add %104, 1i
+            %x_338:i32 = let %105
             store %top, %x_338
-            %98:ptr<function, i32, read_write> = access %stack, %x_338
-            %99:i32 = load %l_1
-            store %98, %99
-            %100:i32 = load %top
-            %x_342:i32 = add %100, 1i
+            %107:ptr<function, i32, read_write> = access %stack, %x_338
+            %108:i32 = load %l_1
+            store %107, %108
+            %109:i32 = load %top
+            %110:i32 = add %109, 1i
+            %x_342:i32 = let %110
             store %top, %x_342
-            %102:ptr<function, i32, read_write> = access %stack, %x_342
-            %103:i32 = load %p
-            %104:i32 = sub %103, 1i
-            store %102, %104
+            %112:ptr<function, i32, read_write> = access %stack, %x_342
+            %113:i32 = load %p
+            %114:i32 = sub %113, 1i
+            store %112, %114
             exit_if  # if_4
           }
         }
-        %105:i32 = load %p
-        %106:i32 = add %105, 1i
-        %107:i32 = load %h_1
-        %108:bool = lt %106, %107
-        if %108 [t: %b15] {  # if_5
-          %b15 = block {  # true
-            %109:i32 = load %top
-            %x_353:i32 = add %109, 1i
+        %115:i32 = load %p
+        %116:i32 = add %115, 1i
+        %117:i32 = load %h_1
+        %118:bool = lt %116, %117
+        if %118 [t: $B15] {  # if_5
+          $B15: {  # true
+            %119:i32 = load %top
+            %120:i32 = add %119, 1i
+            %x_353:i32 = let %120
             store %top, %x_353
-            %111:ptr<function, i32, read_write> = access %stack, %x_353
-            %112:i32 = load %p
-            %113:i32 = add %112, 1i
-            store %111, %113
-            %114:i32 = load %top
-            %x_358:i32 = add %114, 1i
+            %122:ptr<function, i32, read_write> = access %stack, %x_353
+            %123:i32 = load %p
+            %124:i32 = add %123, 1i
+            store %122, %124
+            %125:i32 = load %top
+            %126:i32 = add %125, 1i
+            %x_358:i32 = let %126
             store %top, %x_358
-            %116:ptr<function, i32, read_write> = access %stack, %x_358
-            %117:i32 = load %h_1
-            store %116, %117
+            %128:ptr<function, i32, read_write> = access %stack, %x_358
+            %129:i32 = load %h_1
+            store %128, %129
             exit_if  # if_5
           }
         }
-        continue %b11
+        continue  # -> $B11
       }
-      %b11 = block {  # continuing
-        next_iteration %b10
+      $B11: {  # continuing
+        next_iteration  # -> $B10
       }
     }
     ret
   }
 }
-%main_1 = func():void -> %b16 {
-  %b16 = block {
+%main_1 = func():void {
+  $B16: {
     %i_2:ptr<function, i32, read_write> = var
     %uv:ptr<function, vec2<f32>, read_write> = var
     %color:ptr<function, vec3<f32>, read_write> = var
-    %122:vec4<f32> = load %x_GLF_pos
-    %123:vec4<f32> = add %122, vec4<f32>(1.0f, 1.0f, 0.0f, 0.0f)
-    %124:vec4<f32> = mul %123, vec4<f32>(128.0f, 128.0f, 1.0f, 1.0f)
-    store %x_GLF_FragCoord, %124
+    %134:vec4<f32> = load %x_GLF_pos
+    %135:vec4<f32> = add %134, vec4<f32>(1.0f, 1.0f, 0.0f, 0.0f)
+    %136:vec4<f32> = mul %135, vec4<f32>(128.0f, 128.0f, 1.0f, 1.0f)
+    store %x_GLF_FragCoord, %136
     store %i_2, 0i
-    loop [b: %b17, c: %b18] {  # loop_3
-      %b17 = block {  # body
-        %125:i32 = load %i_2
-        %126:bool = lt %125, 10i
-        if %126 [t: %b19, f: %b20] {  # if_6
-          %b19 = block {  # true
+    loop [b: $B17, c: $B18] {  # loop_3
+      $B17: {  # body
+        %137:i32 = load %i_2
+        %138:bool = lt %137, 10i
+        if %138 [t: $B19, f: $B20] {  # if_6
+          $B19: {  # true
             exit_if  # if_6
           }
-          %b20 = block {  # false
+          $B20: {  # false
             exit_loop  # loop_3
           }
         }
-        %x_104:i32 = load %i_2
-        %128:ptr<private, i32, read_write> = access %obj, 0u, %x_104
-        %129:i32 = load %i_2
-        %130:i32 = sub 10i, %129
-        store %128, %130
-        %x_108:i32 = load %i_2
-        %132:ptr<private, i32, read_write> = access %obj, 0u, %x_108
-        %133:i32 = load %i_2
-        %134:ptr<private, i32, read_write> = access %obj, 0u, %133
-        %135:i32 = load %134
-        %136:i32 = load %i_2
-        %137:ptr<private, i32, read_write> = access %obj, 0u, %136
-        %138:i32 = load %137
-        %139:i32 = mul %135, %138
-        store %132, %139
-        continue %b18
+        %139:i32 = load %i_2
+        %x_104:i32 = let %139
+        %141:ptr<private, i32, read_write> = access %obj, 0u, %x_104
+        %142:i32 = load %i_2
+        %143:i32 = sub 10i, %142
+        store %141, %143
+        %144:i32 = load %i_2
+        %x_108:i32 = let %144
+        %146:ptr<private, i32, read_write> = access %obj, 0u, %x_108
+        %147:i32 = load %i_2
+        %148:ptr<private, i32, read_write> = access %obj, 0u, %147
+        %149:i32 = load %148
+        %150:i32 = load %i_2
+        %151:ptr<private, i32, read_write> = access %obj, 0u, %150
+        %152:i32 = load %151
+        %153:i32 = mul %149, %152
+        store %146, %153
+        continue  # -> $B18
       }
-      %b18 = block {  # continuing
-        %140:i32 = load %i_2
-        %141:i32 = add %140, 1i
-        store %i_2, %141
-        next_iteration %b17
+      $B18: {  # continuing
+        %154:i32 = load %i_2
+        %155:i32 = add %154, 1i
+        store %i_2, %155
+        next_iteration  # -> $B17
       }
     }
-    %142:void = call %quicksort_
-    %143:vec4<f32> = load %x_GLF_FragCoord
-    %144:vec2<f32> = swizzle %143, xy
-    %145:ptr<uniform, vec2<f32>, read> = access %x_34, 0u
-    %146:vec2<f32> = load %145
-    %147:vec2<f32> = div %144, %146
-    store %uv, %147
+    %156:void = call %quicksort_
+    %157:vec4<f32> = load %x_GLF_FragCoord
+    %158:vec2<f32> = swizzle %157, xy
+    %159:ptr<uniform, vec2<f32>, read> = access %x_34, 0u
+    %160:vec2<f32> = load %159
+    %161:vec2<f32> = div %158, %160
+    store %uv, %161
     store %color, vec3<f32>(1.0f, 2.0f, 3.0f)
-    %148:f32 = load_vector_element %color, 0u
-    %149:ptr<private, i32, read_write> = access %obj, 0u, 0i
-    %150:i32 = load %149
-    %151:f32 = convert %150
-    %152:f32 = add %148, %151
-    store_vector_element %color, 0u, %152
-    %153:f32 = load_vector_element %uv, 0u
-    %154:bool = gt %153, 0.25f
-    if %154 [t: %b21] {  # if_7
-      %b21 = block {  # true
-        %155:f32 = load_vector_element %color, 0u
-        %156:ptr<private, i32, read_write> = access %obj, 0u, 1i
-        %157:i32 = load %156
-        %158:f32 = convert %157
-        %159:f32 = add %155, %158
-        store_vector_element %color, 0u, %159
+    %162:f32 = load_vector_element %color, 0u
+    %163:f32 = let %162
+    %164:ptr<private, i32, read_write> = access %obj, 0u, 0i
+    %165:i32 = load %164
+    %166:f32 = convert %165
+    %167:f32 = add %163, %166
+    store_vector_element %color, 0u, %167
+    %168:f32 = load_vector_element %uv, 0u
+    %169:bool = gt %168, 0.25f
+    if %169 [t: $B21] {  # if_7
+      $B21: {  # true
+        %170:f32 = load_vector_element %color, 0u
+        %171:f32 = let %170
+        %172:ptr<private, i32, read_write> = access %obj, 0u, 1i
+        %173:i32 = load %172
+        %174:f32 = convert %173
+        %175:f32 = add %171, %174
+        store_vector_element %color, 0u, %175
         exit_if  # if_7
       }
     }
-    %160:f32 = load_vector_element %uv, 0u
-    %161:bool = gt %160, 0.5f
-    if %161 [t: %b22] {  # if_8
-      %b22 = block {  # true
-        %162:f32 = load_vector_element %color, 1u
-        %163:ptr<uniform, vec2<f32>, read> = access %x_37, 0u
-        %164:f32 = load_vector_element %163, 1u
-        %165:i32 = convert %164
-        %166:i32 = mul 2i, %165
-        %167:i32 = max %166, 2i
-        %168:ptr<private, i32, read_write> = access %obj, 0u, %167
-        %169:i32 = load %168
-        %170:f32 = convert %169
-        %171:ptr<uniform, vec2<f32>, read> = access %x_37, 0u
-        %172:f32 = load_vector_element %171, 1u
-        %173:i32 = convert %172
-        %174:i32 = mul 2i, %173
-        %175:i32 = max %174, 2i
-        %176:ptr<private, i32, read_write> = access %obj, 0u, %175
-        %177:i32 = load %176
-        %178:f32 = convert %177
-        %179:f32 = max %170, %178
-        %180:f32 = add %162, %179
-        store_vector_element %color, 1u, %180
+    %176:f32 = load_vector_element %uv, 0u
+    %177:bool = gt %176, 0.5f
+    if %177 [t: $B22] {  # if_8
+      $B22: {  # true
+        %178:f32 = load_vector_element %color, 1u
+        %179:f32 = let %178
+        %180:ptr<uniform, vec2<f32>, read> = access %x_37, 0u
+        %181:f32 = load_vector_element %180, 1u
+        %182:i32 = call %tint_f32_to_i32, %181
+        %184:i32 = mul 2i, %182
+        %185:i32 = max %184, 2i
+        %186:ptr<private, i32, read_write> = access %obj, 0u, %185
+        %187:i32 = load %186
+        %188:f32 = convert %187
+        %189:f32 = let %188
+        %190:ptr<uniform, vec2<f32>, read> = access %x_37, 0u
+        %191:f32 = load_vector_element %190, 1u
+        %192:i32 = call %tint_f32_to_i32, %191
+        %193:i32 = mul 2i, %192
+        %194:i32 = max %193, 2i
+        %195:ptr<private, i32, read_write> = access %obj, 0u, %194
+        %196:i32 = load %195
+        %197:f32 = convert %196
+        %198:f32 = max %189, %197
+        %199:f32 = add %179, %198
+        store_vector_element %color, 1u, %199
         exit_if  # if_8
       }
     }
-    %181:f32 = load_vector_element %uv, 0u
-    %182:bool = gt %181, 0.75f
-    if %182 [t: %b23] {  # if_9
-      %b23 = block {  # true
-        %183:f32 = load_vector_element %color, 2u
-        %184:ptr<private, i32, read_write> = access %obj, 0u, 3i
-        %185:i32 = load %184
-        %186:f32 = convert %185
-        %187:f32 = add %183, %186
-        store_vector_element %color, 2u, %187
+    %200:f32 = load_vector_element %uv, 0u
+    %201:bool = gt %200, 0.75f
+    if %201 [t: $B23] {  # if_9
+      $B23: {  # true
+        %202:f32 = load_vector_element %color, 2u
+        %203:f32 = let %202
+        %204:ptr<private, i32, read_write> = access %obj, 0u, 3i
+        %205:i32 = load %204
+        %206:f32 = convert %205
+        %207:f32 = add %203, %206
+        store_vector_element %color, 2u, %207
         exit_if  # if_9
       }
     }
-    %188:f32 = load_vector_element %color, 1u
-    %189:ptr<private, i32, read_write> = access %obj, 0u, 4i
-    %190:i32 = load %189
-    %191:f32 = convert %190
-    %192:f32 = add %188, %191
-    store_vector_element %color, 1u, %192
-    %193:f32 = load_vector_element %uv, 1u
-    %194:bool = gt %193, 0.25f
-    if %194 [t: %b24] {  # if_10
-      %b24 = block {  # true
-        %195:f32 = load_vector_element %color, 0u
-        %196:ptr<private, i32, read_write> = access %obj, 0u, 5i
-        %197:i32 = load %196
-        %198:f32 = convert %197
-        %199:f32 = add %195, %198
-        store_vector_element %color, 0u, %199
+    %208:f32 = load_vector_element %color, 1u
+    %209:f32 = let %208
+    %210:ptr<private, i32, read_write> = access %obj, 0u, 4i
+    %211:i32 = load %210
+    %212:f32 = convert %211
+    %213:f32 = add %209, %212
+    store_vector_element %color, 1u, %213
+    %214:f32 = load_vector_element %uv, 1u
+    %215:bool = gt %214, 0.25f
+    if %215 [t: $B24] {  # if_10
+      $B24: {  # true
+        %216:f32 = load_vector_element %color, 0u
+        %217:f32 = let %216
+        %218:ptr<private, i32, read_write> = access %obj, 0u, 5i
+        %219:i32 = load %218
+        %220:f32 = convert %219
+        %221:f32 = add %217, %220
+        store_vector_element %color, 0u, %221
         exit_if  # if_10
       }
     }
-    %200:f32 = load_vector_element %uv, 1u
-    %201:bool = gt %200, 0.5f
-    if %201 [t: %b25] {  # if_11
-      %b25 = block {  # true
-        %202:f32 = load_vector_element %color, 1u
-        %203:ptr<private, i32, read_write> = access %obj, 0u, 6i
-        %204:i32 = load %203
-        %205:f32 = convert %204
-        %206:f32 = add %202, %205
-        store_vector_element %color, 1u, %206
+    %222:f32 = load_vector_element %uv, 1u
+    %223:bool = gt %222, 0.5f
+    if %223 [t: $B25] {  # if_11
+      $B25: {  # true
+        %224:f32 = load_vector_element %color, 1u
+        %225:f32 = let %224
+        %226:ptr<private, i32, read_write> = access %obj, 0u, 6i
+        %227:i32 = load %226
+        %228:f32 = convert %227
+        %229:f32 = add %225, %228
+        store_vector_element %color, 1u, %229
         exit_if  # if_11
       }
     }
-    %207:f32 = load_vector_element %uv, 1u
-    %208:bool = gt %207, 0.75f
-    if %208 [t: %b26] {  # if_12
-      %b26 = block {  # true
-        %209:f32 = load_vector_element %color, 2u
-        %210:ptr<private, i32, read_write> = access %obj, 0u, 7i
-        %211:i32 = load %210
-        %212:f32 = convert %211
-        %213:f32 = add %209, %212
-        store_vector_element %color, 2u, %213
+    %230:f32 = load_vector_element %uv, 1u
+    %231:bool = gt %230, 0.75f
+    if %231 [t: $B26] {  # if_12
+      $B26: {  # true
+        %232:f32 = load_vector_element %color, 2u
+        %233:f32 = let %232
+        %234:ptr<private, i32, read_write> = access %obj, 0u, 7i
+        %235:i32 = load %234
+        %236:f32 = convert %235
+        %237:f32 = add %233, %236
+        store_vector_element %color, 2u, %237
         exit_if  # if_12
       }
     }
-    %214:f32 = load_vector_element %color, 2u
-    %215:ptr<private, i32, read_write> = access %obj, 0u, 8i
-    %216:i32 = load %215
-    %217:f32 = convert %216
-    %218:f32 = add %214, %217
-    store_vector_element %color, 2u, %218
-    %219:f32 = load_vector_element %uv, 0u
-    %220:f32 = load_vector_element %uv, 1u
-    %221:f32 = sub %219, %220
-    %222:f32 = abs %221
-    %223:bool = lt %222, 0.25f
-    if %223 [t: %b27] {  # if_13
-      %b27 = block {  # true
-        %224:f32 = load_vector_element %color, 0u
-        %225:ptr<private, i32, read_write> = access %obj, 0u, 9i
-        %226:i32 = load %225
-        %227:f32 = convert %226
-        %228:f32 = add %224, %227
-        store_vector_element %color, 0u, %228
+    %238:f32 = load_vector_element %color, 2u
+    %239:f32 = let %238
+    %240:ptr<private, i32, read_write> = access %obj, 0u, 8i
+    %241:i32 = load %240
+    %242:f32 = convert %241
+    %243:f32 = add %239, %242
+    store_vector_element %color, 2u, %243
+    %244:f32 = load_vector_element %uv, 0u
+    %245:f32 = load_vector_element %uv, 1u
+    %246:f32 = sub %244, %245
+    %247:f32 = abs %246
+    %248:bool = lt %247, 0.25f
+    if %248 [t: $B27] {  # if_13
+      $B27: {  # true
+        %249:f32 = load_vector_element %color, 0u
+        %250:f32 = let %249
+        %251:ptr<private, i32, read_write> = access %obj, 0u, 9i
+        %252:i32 = load %251
+        %253:f32 = convert %252
+        %254:f32 = add %250, %253
+        store_vector_element %color, 0u, %254
         exit_if  # if_13
       }
     }
-    %229:vec3<f32> = load %color
-    %x_249:vec3<f32> = normalize %229
-    %231:f32 = access %x_249, 0u
-    %232:f32 = access %x_249, 1u
-    %233:f32 = access %x_249, 2u
-    %234:vec4<f32> = construct %231, %232, %233, 1.0f
-    store %frag_color, %234
-    %235:vec4<f32> = load %x_GLF_pos
-    store %gl_Position, %235
+    %255:vec3<f32> = load %color
+    %256:vec3<f32> = normalize %255
+    %x_249:vec3<f32> = let %256
+    %258:f32 = access %x_249, 0u
+    %259:f32 = access %x_249, 1u
+    %260:f32 = access %x_249, 2u
+    %261:vec4<f32> = construct %258, %259, %260, 1.0f
+    store %frag_color, %261
+    %262:vec4<f32> = load %x_GLF_pos
+    store %gl_Position, %262
     ret
   }
 }
-%tint_symbol = @vertex func(%x_GLF_pos_param:vec4<f32> [@location(0)]):main_out -> %b28 {
-  %b28 = block {
+%tint_symbol = @vertex func(%x_GLF_pos_param:vec4<f32> [@location(0)]):main_out {
+  $B28: {
     store %x_GLF_pos, %x_GLF_pos_param
-    %238:void = call %main_1
-    %239:vec4<f32> = load %frag_color
-    %240:vec4<f32> = load %gl_Position
-    %241:main_out = construct %239, %240
-    ret %241
+    %265:void = call %main_1
+    %266:vec4<f32> = load %frag_color
+    %267:vec4<f32> = load %gl_Position
+    %268:main_out = construct %266, %267
+    ret %268
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B29: {
+    %270:i32 = convert %value
+    %271:bool = gte %value, -2147483648.0f
+    %272:i32 = select -2147483648i, %270, %271
+    %273:bool = lte %value, 2147483520.0f
+    %274:i32 = select 2147483647i, %272, %273
+    ret %274
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-quicksort-max-value-as-index/2-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-quicksort-max-value-as-index/2-opt.wgsl.expected.ir.msl
index 88de7f7..f2251ed 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-quicksort-max-value-as-index/2-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/stable-quicksort-max-value-as-index/2-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: QuicksortObject = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: QuicksortObject = struct @align(4) {
   numbers:array<i32, 10> @offset(0)
 }
 
@@ -17,7 +17,7 @@
   gl_Position:vec4<f32> @offset(16), @builtin(position)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %obj:ptr<private, QuicksortObject, read_write> = var
   %x_GLF_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_pos:ptr<private, vec4<f32>, read_write> = var
@@ -27,28 +27,35 @@
   %gl_Position:ptr<private, vec4<f32>, read_write> = var
 }
 
-%swap_i1_i1_ = func(%i:ptr<function, i32, read_write>, %j:ptr<function, i32, read_write>):void -> %b2 {
-  %b2 = block {
+%swap_i1_i1_ = func(%i:ptr<function, i32, read_write>, %j:ptr<function, i32, read_write>):void {
+  $B2: {
     %temp:ptr<function, i32, read_write> = var
-    %x_257:i32 = load %i
-    %13:ptr<private, i32, read_write> = access %obj, 0u, %x_257
-    %x_259:i32 = load %13
+    %12:i32 = load %i
+    %x_257:i32 = let %12
+    %14:ptr<private, i32, read_write> = access %obj, 0u, %x_257
+    %15:i32 = load %14
+    %x_259:i32 = let %15
     store %temp, %x_259
-    %x_260:i32 = load %i
-    %x_261:i32 = load %j
-    %17:ptr<private, i32, read_write> = access %obj, 0u, %x_261
-    %x_263:i32 = load %17
-    %19:ptr<private, i32, read_write> = access %obj, 0u, %x_260
-    store %19, %x_263
-    %x_265:i32 = load %j
-    %x_266:i32 = load %temp
-    %22:ptr<private, i32, read_write> = access %obj, 0u, %x_265
-    store %22, %x_266
+    %17:i32 = load %i
+    %x_260:i32 = let %17
+    %19:i32 = load %j
+    %x_261:i32 = let %19
+    %21:ptr<private, i32, read_write> = access %obj, 0u, %x_261
+    %22:i32 = load %21
+    %x_263:i32 = let %22
+    %24:ptr<private, i32, read_write> = access %obj, 0u, %x_260
+    store %24, %x_263
+    %25:i32 = load %j
+    %x_265:i32 = let %25
+    %27:i32 = load %temp
+    %x_266:i32 = let %27
+    %29:ptr<private, i32, read_write> = access %obj, 0u, %x_265
+    store %29, %x_266
     ret
   }
 }
-%performPartition_i1_i1_ = func(%l:ptr<function, i32, read_write>, %h:ptr<function, i32, read_write>):i32 -> %b3 {
-  %b3 = block {
+%performPartition_i1_i1_ = func(%l:ptr<function, i32, read_write>, %h:ptr<function, i32, read_write>):i32 {
+  $B3: {
     %pivot:ptr<function, i32, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
     %j_1:ptr<function, i32, read_write> = var
@@ -56,69 +63,85 @@
     %param_1:ptr<function, i32, read_write> = var
     %param_2:ptr<function, i32, read_write> = var
     %param_3:ptr<function, i32, read_write> = var
-    %x_269:i32 = load %h
-    %34:ptr<private, i32, read_write> = access %obj, 0u, %x_269
-    %x_271:i32 = load %34
+    %40:i32 = load %h
+    %x_269:i32 = let %40
+    %42:ptr<private, i32, read_write> = access %obj, 0u, %x_269
+    %43:i32 = load %42
+    %x_271:i32 = let %43
     store %pivot, %x_271
-    %x_272:i32 = load %l
-    %37:i32 = sub %x_272, 1i
-    store %i_1, %37
-    %x_274:i32 = load %l
+    %45:i32 = load %l
+    %x_272:i32 = let %45
+    %47:i32 = sub %x_272, 1i
+    store %i_1, %47
+    %48:i32 = load %l
+    %x_274:i32 = let %48
     store %j_1, %x_274
-    loop [b: %b4, c: %b5] {  # loop_1
-      %b4 = block {  # body
-        %x_279:i32 = load %j_1
-        %x_280:i32 = load %h
-        %41:i32 = sub %x_280, 1i
-        %42:bool = lte %x_279, %41
-        if %42 [t: %b6, f: %b7] {  # if_1
-          %b6 = block {  # true
+    loop [b: $B4, c: $B5] {  # loop_1
+      $B4: {  # body
+        %50:i32 = load %j_1
+        %x_279:i32 = let %50
+        %52:i32 = load %h
+        %x_280:i32 = let %52
+        %54:i32 = sub %x_280, 1i
+        %55:bool = lte %x_279, %54
+        if %55 [t: $B6, f: $B7] {  # if_1
+          $B6: {  # true
             exit_if  # if_1
           }
-          %b7 = block {  # false
+          $B7: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_284:i32 = load %j_1
-        %44:ptr<private, i32, read_write> = access %obj, 0u, %x_284
-        %x_286:i32 = load %44
-        %x_287:i32 = load %pivot
-        %47:bool = lte %x_286, %x_287
-        if %47 [t: %b8] {  # if_2
-          %b8 = block {  # true
-            %x_291:i32 = load %i_1
-            %49:i32 = add %x_291, 1i
-            store %i_1, %49
-            %x_293:i32 = load %i_1
+        %56:i32 = load %j_1
+        %x_284:i32 = let %56
+        %58:ptr<private, i32, read_write> = access %obj, 0u, %x_284
+        %59:i32 = load %58
+        %x_286:i32 = let %59
+        %61:i32 = load %pivot
+        %x_287:i32 = let %61
+        %63:bool = lte %x_286, %x_287
+        if %63 [t: $B8] {  # if_2
+          $B8: {  # true
+            %64:i32 = load %i_1
+            %x_291:i32 = let %64
+            %66:i32 = add %x_291, 1i
+            store %i_1, %66
+            %67:i32 = load %i_1
+            %x_293:i32 = let %67
             store %param, %x_293
-            %x_294:i32 = load %j_1
+            %69:i32 = load %j_1
+            %x_294:i32 = let %69
             store %param_1, %x_294
-            %52:void = call %swap_i1_i1_, %param, %param_1
+            %71:void = call %swap_i1_i1_, %param, %param_1
             exit_if  # if_2
           }
         }
-        continue %b5
+        continue  # -> $B5
       }
-      %b5 = block {  # continuing
-        %x_296:i32 = load %j_1
-        %54:i32 = add %x_296, 1i
-        store %j_1, %54
-        next_iteration %b4
+      $B5: {  # continuing
+        %72:i32 = load %j_1
+        %x_296:i32 = let %72
+        %74:i32 = add %x_296, 1i
+        store %j_1, %74
+        next_iteration  # -> $B4
       }
     }
-    %x_298:i32 = load %i_1
-    %56:i32 = add %x_298, 1i
-    store %param_2, %56
-    %x_300:i32 = load %h
+    %75:i32 = load %i_1
+    %x_298:i32 = let %75
+    %77:i32 = add %x_298, 1i
+    store %param_2, %77
+    %78:i32 = load %h
+    %x_300:i32 = let %78
     store %param_3, %x_300
-    %58:void = call %swap_i1_i1_, %param_2, %param_3
-    %x_302:i32 = load %i_1
-    %60:i32 = add %x_302, 1i
-    ret %60
+    %80:void = call %swap_i1_i1_, %param_2, %param_3
+    %81:i32 = load %i_1
+    %x_302:i32 = let %81
+    %83:i32 = add %x_302, 1i
+    ret %83
   }
 }
-%quicksort_ = func():void -> %b9 {
-  %b9 = block {
+%quicksort_ = func():void {
+  $B9: {
     %l_1:ptr<function, i32, read_write> = var
     %h_1:ptr<function, i32, read_write> = var
     %top:ptr<function, i32, read_write> = var
@@ -129,303 +152,390 @@
     store %l_1, 0i
     store %h_1, 9i
     store %top, -1i
-    %x_305:i32 = load %top
-    %x_306:i32 = add %x_305, 1i
+    %92:i32 = load %top
+    %x_305:i32 = let %92
+    %94:i32 = add %x_305, 1i
+    %x_306:i32 = let %94
     store %top, %x_306
-    %x_307:i32 = load %l_1
-    %72:ptr<function, i32, read_write> = access %stack, %x_306
-    store %72, %x_307
-    %x_309:i32 = load %top
-    %x_310:i32 = add %x_309, 1i
+    %96:i32 = load %l_1
+    %x_307:i32 = let %96
+    %98:ptr<function, i32, read_write> = access %stack, %x_306
+    store %98, %x_307
+    %99:i32 = load %top
+    %x_309:i32 = let %99
+    %101:i32 = add %x_309, 1i
+    %x_310:i32 = let %101
     store %top, %x_310
-    %x_311:i32 = load %h_1
-    %76:ptr<function, i32, read_write> = access %stack, %x_310
-    store %76, %x_311
-    loop [b: %b10, c: %b11] {  # loop_2
-      %b10 = block {  # body
-        %x_317:i32 = load %top
-        %78:bool = gte %x_317, 0i
-        if %78 [t: %b12, f: %b13] {  # if_3
-          %b12 = block {  # true
+    %103:i32 = load %h_1
+    %x_311:i32 = let %103
+    %105:ptr<function, i32, read_write> = access %stack, %x_310
+    store %105, %x_311
+    loop [b: $B10, c: $B11] {  # loop_2
+      $B10: {  # body
+        %106:i32 = load %top
+        %x_317:i32 = let %106
+        %108:bool = gte %x_317, 0i
+        if %108 [t: $B12, f: $B13] {  # if_3
+          $B12: {  # true
             exit_if  # if_3
           }
-          %b13 = block {  # false
+          $B13: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_320:i32 = load %top
-        %80:i32 = sub %x_320, 1i
-        store %top, %80
-        %81:ptr<function, i32, read_write> = access %stack, %x_320
-        %x_323:i32 = load %81
+        %109:i32 = load %top
+        %x_320:i32 = let %109
+        %111:i32 = sub %x_320, 1i
+        store %top, %111
+        %112:ptr<function, i32, read_write> = access %stack, %x_320
+        %113:i32 = load %112
+        %x_323:i32 = let %113
         store %h_1, %x_323
-        %x_324:i32 = load %top
-        %84:i32 = sub %x_324, 1i
-        store %top, %84
-        %85:ptr<function, i32, read_write> = access %stack, %x_324
-        %x_327:i32 = load %85
+        %115:i32 = load %top
+        %x_324:i32 = let %115
+        %117:i32 = sub %x_324, 1i
+        store %top, %117
+        %118:ptr<function, i32, read_write> = access %stack, %x_324
+        %119:i32 = load %118
+        %x_327:i32 = let %119
         store %l_1, %x_327
-        %x_328:i32 = load %l_1
+        %121:i32 = load %l_1
+        %x_328:i32 = let %121
         store %param_4, %x_328
-        %x_329:i32 = load %h_1
+        %123:i32 = load %h_1
+        %x_329:i32 = let %123
         store %param_5, %x_329
-        %x_330:i32 = call %performPartition_i1_i1_, %param_4, %param_5
+        %125:i32 = call %performPartition_i1_i1_, %param_4, %param_5
+        %x_330:i32 = let %125
         store %p, %x_330
-        %x_331:i32 = load %p
-        %x_333:i32 = load %l_1
-        %92:i32 = sub %x_331, 1i
-        %93:bool = gt %92, %x_333
-        if %93 [t: %b14] {  # if_4
-          %b14 = block {  # true
-            %x_337:i32 = load %top
-            %x_338:i32 = add %x_337, 1i
+        %127:i32 = load %p
+        %x_331:i32 = let %127
+        %129:i32 = load %l_1
+        %x_333:i32 = let %129
+        %131:i32 = sub %x_331, 1i
+        %132:bool = gt %131, %x_333
+        if %132 [t: $B14] {  # if_4
+          $B14: {  # true
+            %133:i32 = load %top
+            %x_337:i32 = let %133
+            %135:i32 = add %x_337, 1i
+            %x_338:i32 = let %135
             store %top, %x_338
-            %x_339:i32 = load %l_1
-            %97:ptr<function, i32, read_write> = access %stack, %x_338
-            store %97, %x_339
-            %x_341:i32 = load %top
-            %x_342:i32 = add %x_341, 1i
+            %137:i32 = load %l_1
+            %x_339:i32 = let %137
+            %139:ptr<function, i32, read_write> = access %stack, %x_338
+            store %139, %x_339
+            %140:i32 = load %top
+            %x_341:i32 = let %140
+            %142:i32 = add %x_341, 1i
+            %x_342:i32 = let %142
             store %top, %x_342
-            %x_343:i32 = load %p
-            %101:ptr<function, i32, read_write> = access %stack, %x_342
-            %102:i32 = sub %x_343, 1i
-            store %101, %102
+            %144:i32 = load %p
+            %x_343:i32 = let %144
+            %146:ptr<function, i32, read_write> = access %stack, %x_342
+            %147:i32 = sub %x_343, 1i
+            store %146, %147
             exit_if  # if_4
           }
         }
-        %x_346:i32 = load %p
-        %x_348:i32 = load %h_1
-        %105:i32 = add %x_346, 1i
-        %106:bool = lt %105, %x_348
-        if %106 [t: %b15] {  # if_5
-          %b15 = block {  # true
-            %x_352:i32 = load %top
-            %x_353:i32 = add %x_352, 1i
+        %148:i32 = load %p
+        %x_346:i32 = let %148
+        %150:i32 = load %h_1
+        %x_348:i32 = let %150
+        %152:i32 = add %x_346, 1i
+        %153:bool = lt %152, %x_348
+        if %153 [t: $B15] {  # if_5
+          $B15: {  # true
+            %154:i32 = load %top
+            %x_352:i32 = let %154
+            %156:i32 = add %x_352, 1i
+            %x_353:i32 = let %156
             store %top, %x_353
-            %x_354:i32 = load %p
-            %110:ptr<function, i32, read_write> = access %stack, %x_353
-            %111:i32 = add %x_354, 1i
-            store %110, %111
-            %x_357:i32 = load %top
-            %x_358:i32 = add %x_357, 1i
+            %158:i32 = load %p
+            %x_354:i32 = let %158
+            %160:ptr<function, i32, read_write> = access %stack, %x_353
+            %161:i32 = add %x_354, 1i
+            store %160, %161
+            %162:i32 = load %top
+            %x_357:i32 = let %162
+            %164:i32 = add %x_357, 1i
+            %x_358:i32 = let %164
             store %top, %x_358
-            %x_359:i32 = load %h_1
-            %115:ptr<function, i32, read_write> = access %stack, %x_358
-            store %115, %x_359
+            %166:i32 = load %h_1
+            %x_359:i32 = let %166
+            %168:ptr<function, i32, read_write> = access %stack, %x_358
+            store %168, %x_359
             exit_if  # if_5
           }
         }
-        continue %b11
+        continue  # -> $B11
       }
-      %b11 = block {  # continuing
-        next_iteration %b10
+      $B11: {  # continuing
+        next_iteration  # -> $B10
       }
     }
     ret
   }
 }
-%main_1 = func():void -> %b16 {
-  %b16 = block {
+%main_1 = func():void {
+  $B16: {
     %i_2:ptr<function, i32, read_write> = var
     %uv:ptr<function, vec2<f32>, read_write> = var
     %color:ptr<function, vec3<f32>, read_write> = var
-    %x_94:vec4<f32> = load %x_GLF_pos
-    %121:vec4<f32> = add %x_94, vec4<f32>(1.0f, 1.0f, 0.0f, 0.0f)
-    %122:vec4<f32> = mul %121, vec4<f32>(128.0f, 128.0f, 1.0f, 1.0f)
-    store %x_GLF_FragCoord, %122
+    %173:vec4<f32> = load %x_GLF_pos
+    %x_94:vec4<f32> = let %173
+    %175:vec4<f32> = add %x_94, vec4<f32>(1.0f, 1.0f, 0.0f, 0.0f)
+    %176:vec4<f32> = mul %175, vec4<f32>(128.0f, 128.0f, 1.0f, 1.0f)
+    store %x_GLF_FragCoord, %176
     store %i_2, 0i
-    loop [b: %b17, c: %b18] {  # loop_3
-      %b17 = block {  # body
-        %x_101:i32 = load %i_2
-        %124:bool = lt %x_101, 10i
-        if %124 [t: %b19, f: %b20] {  # if_6
-          %b19 = block {  # true
+    loop [b: $B17, c: $B18] {  # loop_3
+      $B17: {  # body
+        %177:i32 = load %i_2
+        %x_101:i32 = let %177
+        %179:bool = lt %x_101, 10i
+        if %179 [t: $B19, f: $B20] {  # if_6
+          $B19: {  # true
             exit_if  # if_6
           }
-          %b20 = block {  # false
+          $B20: {  # false
             exit_loop  # loop_3
           }
         }
-        %x_104:i32 = load %i_2
-        %x_105:i32 = load %i_2
-        %127:ptr<private, i32, read_write> = access %obj, 0u, %x_104
-        %128:i32 = sub 10i, %x_105
-        store %127, %128
-        %x_108:i32 = load %i_2
-        %x_109:i32 = load %i_2
-        %131:ptr<private, i32, read_write> = access %obj, 0u, %x_109
-        %x_111:i32 = load %131
-        %x_112:i32 = load %i_2
-        %134:ptr<private, i32, read_write> = access %obj, 0u, %x_112
-        %x_114:i32 = load %134
-        %136:ptr<private, i32, read_write> = access %obj, 0u, %x_108
-        %137:i32 = mul %x_111, %x_114
-        store %136, %137
-        continue %b18
+        %180:i32 = load %i_2
+        %x_104:i32 = let %180
+        %182:i32 = load %i_2
+        %x_105:i32 = let %182
+        %184:ptr<private, i32, read_write> = access %obj, 0u, %x_104
+        %185:i32 = sub 10i, %x_105
+        store %184, %185
+        %186:i32 = load %i_2
+        %x_108:i32 = let %186
+        %188:i32 = load %i_2
+        %x_109:i32 = let %188
+        %190:ptr<private, i32, read_write> = access %obj, 0u, %x_109
+        %191:i32 = load %190
+        %x_111:i32 = let %191
+        %193:i32 = load %i_2
+        %x_112:i32 = let %193
+        %195:ptr<private, i32, read_write> = access %obj, 0u, %x_112
+        %196:i32 = load %195
+        %x_114:i32 = let %196
+        %198:ptr<private, i32, read_write> = access %obj, 0u, %x_108
+        %199:i32 = mul %x_111, %x_114
+        store %198, %199
+        continue  # -> $B18
       }
-      %b18 = block {  # continuing
-        %x_117:i32 = load %i_2
-        %139:i32 = add %x_117, 1i
-        store %i_2, %139
-        next_iteration %b17
+      $B18: {  # continuing
+        %200:i32 = load %i_2
+        %x_117:i32 = let %200
+        %202:i32 = add %x_117, 1i
+        store %i_2, %202
+        next_iteration  # -> $B17
       }
     }
-    %140:void = call %quicksort_
-    %x_120:vec4<f32> = load %x_GLF_FragCoord
-    %142:ptr<uniform, vec2<f32>, read> = access %x_34, 0u
-    %x_123:vec2<f32> = load %142
-    %144:f32 = access %x_120, 0u
-    %145:f32 = access %x_120, 1u
-    %146:vec2<f32> = construct %144, %145
-    %147:vec2<f32> = div %146, %x_123
-    store %uv, %147
+    %203:void = call %quicksort_
+    %204:vec4<f32> = load %x_GLF_FragCoord
+    %x_120:vec4<f32> = let %204
+    %206:ptr<uniform, vec2<f32>, read> = access %x_34, 0u
+    %207:vec2<f32> = load %206
+    %x_123:vec2<f32> = let %207
+    %209:f32 = access %x_120, 0u
+    %210:f32 = access %x_120, 1u
+    %211:vec2<f32> = construct %209, %210
+    %212:vec2<f32> = div %211, %x_123
+    store %uv, %212
     store %color, vec3<f32>(1.0f, 2.0f, 3.0f)
-    %148:ptr<private, i32, read_write> = access %obj, 0u, 0i
-    %x_126:i32 = load %148
-    %x_129:f32 = load_vector_element %color, 0u
-    %151:f32 = convert %x_126
-    %152:f32 = add %x_129, %151
-    store_vector_element %color, 0u, %152
-    %x_133:f32 = load_vector_element %uv, 0u
-    %154:bool = gt %x_133, 0.25f
-    if %154 [t: %b21] {  # if_7
-      %b21 = block {  # true
-        %155:ptr<private, i32, read_write> = access %obj, 0u, 1i
-        %x_138:i32 = load %155
-        %x_141:f32 = load_vector_element %color, 0u
-        %158:f32 = convert %x_138
-        %159:f32 = add %x_141, %158
-        store_vector_element %color, 0u, %159
+    %213:ptr<private, i32, read_write> = access %obj, 0u, 0i
+    %214:i32 = load %213
+    %x_126:i32 = let %214
+    %216:f32 = load_vector_element %color, 0u
+    %x_129:f32 = let %216
+    %218:f32 = convert %x_126
+    %219:f32 = add %x_129, %218
+    store_vector_element %color, 0u, %219
+    %220:f32 = load_vector_element %uv, 0u
+    %x_133:f32 = let %220
+    %222:bool = gt %x_133, 0.25f
+    if %222 [t: $B21] {  # if_7
+      $B21: {  # true
+        %223:ptr<private, i32, read_write> = access %obj, 0u, 1i
+        %224:i32 = load %223
+        %x_138:i32 = let %224
+        %226:f32 = load_vector_element %color, 0u
+        %x_141:f32 = let %226
+        %228:f32 = convert %x_138
+        %229:f32 = add %x_141, %228
+        store_vector_element %color, 0u, %229
         exit_if  # if_7
       }
     }
-    %x_145:f32 = load_vector_element %uv, 0u
-    %161:bool = gt %x_145, 0.5f
-    if %161 [t: %b22] {  # if_8
-      %b22 = block {  # true
-        %162:ptr<uniform, vec2<f32>, read> = access %x_37, 0u
-        %x_150:f32 = load_vector_element %162, 1u
-        %164:i32 = convert %x_150
-        %165:i32 = mul 2i, %164
-        %166:i32 = max %165, 2i
-        %167:ptr<private, i32, read_write> = access %obj, 0u, %166
-        %x_155:i32 = load %167
-        %169:ptr<uniform, vec2<f32>, read> = access %x_37, 0u
-        %x_158:f32 = load_vector_element %169, 1u
-        %171:i32 = convert %x_158
-        %172:i32 = mul 2i, %171
-        %173:i32 = max %172, 2i
-        %174:ptr<private, i32, read_write> = access %obj, 0u, %173
-        %x_163:i32 = load %174
-        %x_167:f32 = load_vector_element %color, 1u
-        %177:f32 = convert %x_155
-        %178:f32 = convert %x_163
-        %179:f32 = max %177, %178
-        %180:f32 = add %x_167, %179
-        store_vector_element %color, 1u, %180
+    %230:f32 = load_vector_element %uv, 0u
+    %x_145:f32 = let %230
+    %232:bool = gt %x_145, 0.5f
+    if %232 [t: $B22] {  # if_8
+      $B22: {  # true
+        %233:ptr<uniform, vec2<f32>, read> = access %x_37, 0u
+        %234:f32 = load_vector_element %233, 1u
+        %x_150:f32 = let %234
+        %236:i32 = call %tint_f32_to_i32, %x_150
+        %238:i32 = mul 2i, %236
+        %239:i32 = max %238, 2i
+        %240:ptr<private, i32, read_write> = access %obj, 0u, %239
+        %241:i32 = load %240
+        %x_155:i32 = let %241
+        %243:ptr<uniform, vec2<f32>, read> = access %x_37, 0u
+        %244:f32 = load_vector_element %243, 1u
+        %x_158:f32 = let %244
+        %246:i32 = call %tint_f32_to_i32, %x_158
+        %247:i32 = mul 2i, %246
+        %248:i32 = max %247, 2i
+        %249:ptr<private, i32, read_write> = access %obj, 0u, %248
+        %250:i32 = load %249
+        %x_163:i32 = let %250
+        %252:f32 = load_vector_element %color, 1u
+        %x_167:f32 = let %252
+        %254:f32 = convert %x_155
+        %255:f32 = let %254
+        %256:f32 = convert %x_163
+        %257:f32 = max %255, %256
+        %258:f32 = add %x_167, %257
+        store_vector_element %color, 1u, %258
         exit_if  # if_8
       }
     }
-    %x_171:f32 = load_vector_element %uv, 0u
-    %182:bool = gt %x_171, 0.75f
-    if %182 [t: %b23] {  # if_9
-      %b23 = block {  # true
-        %183:ptr<private, i32, read_write> = access %obj, 0u, 3i
-        %x_176:i32 = load %183
-        %x_179:f32 = load_vector_element %color, 2u
-        %186:f32 = convert %x_176
-        %187:f32 = add %x_179, %186
-        store_vector_element %color, 2u, %187
+    %259:f32 = load_vector_element %uv, 0u
+    %x_171:f32 = let %259
+    %261:bool = gt %x_171, 0.75f
+    if %261 [t: $B23] {  # if_9
+      $B23: {  # true
+        %262:ptr<private, i32, read_write> = access %obj, 0u, 3i
+        %263:i32 = load %262
+        %x_176:i32 = let %263
+        %265:f32 = load_vector_element %color, 2u
+        %x_179:f32 = let %265
+        %267:f32 = convert %x_176
+        %268:f32 = add %x_179, %267
+        store_vector_element %color, 2u, %268
         exit_if  # if_9
       }
     }
-    %188:ptr<private, i32, read_write> = access %obj, 0u, 4i
-    %x_183:i32 = load %188
-    %x_186:f32 = load_vector_element %color, 1u
-    %191:f32 = convert %x_183
-    %192:f32 = add %x_186, %191
-    store_vector_element %color, 1u, %192
-    %x_190:f32 = load_vector_element %uv, 1u
-    %194:bool = gt %x_190, 0.25f
-    if %194 [t: %b24] {  # if_10
-      %b24 = block {  # true
-        %195:ptr<private, i32, read_write> = access %obj, 0u, 5i
-        %x_195:i32 = load %195
-        %x_198:f32 = load_vector_element %color, 0u
-        %198:f32 = convert %x_195
-        %199:f32 = add %x_198, %198
-        store_vector_element %color, 0u, %199
+    %269:ptr<private, i32, read_write> = access %obj, 0u, 4i
+    %270:i32 = load %269
+    %x_183:i32 = let %270
+    %272:f32 = load_vector_element %color, 1u
+    %x_186:f32 = let %272
+    %274:f32 = convert %x_183
+    %275:f32 = add %x_186, %274
+    store_vector_element %color, 1u, %275
+    %276:f32 = load_vector_element %uv, 1u
+    %x_190:f32 = let %276
+    %278:bool = gt %x_190, 0.25f
+    if %278 [t: $B24] {  # if_10
+      $B24: {  # true
+        %279:ptr<private, i32, read_write> = access %obj, 0u, 5i
+        %280:i32 = load %279
+        %x_195:i32 = let %280
+        %282:f32 = load_vector_element %color, 0u
+        %x_198:f32 = let %282
+        %284:f32 = convert %x_195
+        %285:f32 = add %x_198, %284
+        store_vector_element %color, 0u, %285
         exit_if  # if_10
       }
     }
-    %x_202:f32 = load_vector_element %uv, 1u
-    %201:bool = gt %x_202, 0.5f
-    if %201 [t: %b25] {  # if_11
-      %b25 = block {  # true
-        %202:ptr<private, i32, read_write> = access %obj, 0u, 6i
-        %x_207:i32 = load %202
-        %x_210:f32 = load_vector_element %color, 1u
-        %205:f32 = convert %x_207
-        %206:f32 = add %x_210, %205
-        store_vector_element %color, 1u, %206
+    %286:f32 = load_vector_element %uv, 1u
+    %x_202:f32 = let %286
+    %288:bool = gt %x_202, 0.5f
+    if %288 [t: $B25] {  # if_11
+      $B25: {  # true
+        %289:ptr<private, i32, read_write> = access %obj, 0u, 6i
+        %290:i32 = load %289
+        %x_207:i32 = let %290
+        %292:f32 = load_vector_element %color, 1u
+        %x_210:f32 = let %292
+        %294:f32 = convert %x_207
+        %295:f32 = add %x_210, %294
+        store_vector_element %color, 1u, %295
         exit_if  # if_11
       }
     }
-    %x_214:f32 = load_vector_element %uv, 1u
-    %208:bool = gt %x_214, 0.75f
-    if %208 [t: %b26] {  # if_12
-      %b26 = block {  # true
-        %209:ptr<private, i32, read_write> = access %obj, 0u, 7i
-        %x_219:i32 = load %209
-        %x_222:f32 = load_vector_element %color, 2u
-        %212:f32 = convert %x_219
-        %213:f32 = add %x_222, %212
-        store_vector_element %color, 2u, %213
+    %296:f32 = load_vector_element %uv, 1u
+    %x_214:f32 = let %296
+    %298:bool = gt %x_214, 0.75f
+    if %298 [t: $B26] {  # if_12
+      $B26: {  # true
+        %299:ptr<private, i32, read_write> = access %obj, 0u, 7i
+        %300:i32 = load %299
+        %x_219:i32 = let %300
+        %302:f32 = load_vector_element %color, 2u
+        %x_222:f32 = let %302
+        %304:f32 = convert %x_219
+        %305:f32 = add %x_222, %304
+        store_vector_element %color, 2u, %305
         exit_if  # if_12
       }
     }
-    %214:ptr<private, i32, read_write> = access %obj, 0u, 8i
-    %x_226:i32 = load %214
-    %x_229:f32 = load_vector_element %color, 2u
-    %217:f32 = convert %x_226
-    %218:f32 = add %x_229, %217
-    store_vector_element %color, 2u, %218
-    %x_233:f32 = load_vector_element %uv, 0u
-    %x_235:f32 = load_vector_element %uv, 1u
-    %221:f32 = sub %x_233, %x_235
-    %222:f32 = abs %221
-    %223:bool = lt %222, 0.25f
-    if %223 [t: %b27] {  # if_13
-      %b27 = block {  # true
-        %224:ptr<private, i32, read_write> = access %obj, 0u, 9i
-        %x_242:i32 = load %224
-        %x_245:f32 = load_vector_element %color, 0u
-        %227:f32 = convert %x_242
-        %228:f32 = add %x_245, %227
-        store_vector_element %color, 0u, %228
+    %306:ptr<private, i32, read_write> = access %obj, 0u, 8i
+    %307:i32 = load %306
+    %x_226:i32 = let %307
+    %309:f32 = load_vector_element %color, 2u
+    %x_229:f32 = let %309
+    %311:f32 = convert %x_226
+    %312:f32 = add %x_229, %311
+    store_vector_element %color, 2u, %312
+    %313:f32 = load_vector_element %uv, 0u
+    %x_233:f32 = let %313
+    %315:f32 = load_vector_element %uv, 1u
+    %x_235:f32 = let %315
+    %317:f32 = sub %x_233, %x_235
+    %318:f32 = abs %317
+    %319:bool = lt %318, 0.25f
+    if %319 [t: $B27] {  # if_13
+      $B27: {  # true
+        %320:ptr<private, i32, read_write> = access %obj, 0u, 9i
+        %321:i32 = load %320
+        %x_242:i32 = let %321
+        %323:f32 = load_vector_element %color, 0u
+        %x_245:f32 = let %323
+        %325:f32 = convert %x_242
+        %326:f32 = add %x_245, %325
+        store_vector_element %color, 0u, %326
         exit_if  # if_13
       }
     }
-    %x_248:vec3<f32> = load %color
-    %x_249:vec3<f32> = normalize %x_248
-    %231:f32 = access %x_249, 0u
-    %232:f32 = access %x_249, 1u
-    %233:f32 = access %x_249, 2u
-    %234:vec4<f32> = construct %231, %232, %233, 1.0f
-    store %frag_color, %234
-    %x_254:vec4<f32> = load %x_GLF_pos
+    %327:vec3<f32> = load %color
+    %x_248:vec3<f32> = let %327
+    %329:vec3<f32> = normalize %x_248
+    %x_249:vec3<f32> = let %329
+    %331:f32 = access %x_249, 0u
+    %332:f32 = access %x_249, 1u
+    %333:f32 = access %x_249, 2u
+    %334:vec4<f32> = construct %331, %332, %333, 1.0f
+    store %frag_color, %334
+    %335:vec4<f32> = load %x_GLF_pos
+    %x_254:vec4<f32> = let %335
     store %gl_Position, %x_254
     ret
   }
 }
-%tint_symbol = @vertex func(%x_GLF_pos_param:vec4<f32> [@location(0)]):main_out -> %b28 {
-  %b28 = block {
+%tint_symbol = @vertex func(%x_GLF_pos_param:vec4<f32> [@location(0)]):main_out {
+  $B28: {
     store %x_GLF_pos, %x_GLF_pos_param
-    %238:void = call %main_1
-    %239:vec4<f32> = load %frag_color
-    %240:vec4<f32> = load %gl_Position
-    %241:main_out = construct %239, %240
-    ret %241
+    %339:void = call %main_1
+    %340:vec4<f32> = load %frag_color
+    %341:vec4<f32> = load %gl_Position
+    %342:main_out = construct %340, %341
+    ret %342
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B29: {
+    %344:i32 = convert %value
+    %345:bool = gte %value, -2147483648.0f
+    %346:i32 = select -2147483648i, %344, %345
+    %347:bool = lte %value, 2147483520.0f
+    %348:i32 = select 2147483647i, %346, %347
+    ret %348
   }
 }
 
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
index 47fe76e..2440ec1 100644
--- 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
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,27 +8,27 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%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 = block {  # true
+    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 = block {  # true
+    if %12 [t: $B4] {  # if_2
+      $B4: {  # true
         ret false
       }
     }
@@ -37,8 +37,8 @@
     %15:f32 = load_vector_element %quad, 2u
     %16:f32 = add %14, %15
     %17:bool = gt %13, %16
-    if %17 [t: %b5] {  # if_3
-      %b5 = block {  # true
+    if %17 [t: $B5] {  # if_3
+      $B5: {  # true
         ret false
       }
     }
@@ -47,16 +47,16 @@
     %20:f32 = load_vector_element %quad, 3u
     %21:f32 = add %19, %20
     %22:bool = gt %18, %21
-    if %22 [t: %b6] {  # if_4
-      %b6 = block {  # true
+    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 {
-  %b7 = block {
+%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
@@ -69,23 +69,23 @@
     %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 = block {  # true
+    if %36 [t: $B8, f: $B9] {  # if_5
+      $B8: {  # true
         store %x_144, -1.0f
         exit_if  # if_5
       }
-      %b9 = block {  # false
+      $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 = block {  # true
+        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 = block {  # false
+          $B11: {  # false
             store %x_145, 1.0f
             exit_if  # if_6
           }
@@ -101,92 +101,127 @@
     %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 = block {  # body
+    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 = block {  # true
+        if %48 [t: $B14, f: $B15] {  # if_7
+          $B14: {  # true
             exit_if  # if_7
           }
-          %b15 = block {  # false
+          $B15: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_174:i32 = load %i
-        %50:vec2<f32> = load %pos_1
-        store %param, %50
+        %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))
-        %51:ptr<function, vec4<f32>, read_write> = access %indexable, %x_174
-        %52:vec4<f32> = load %51
-        store %param_1, %52
-        %x_178:bool = call %collision_vf2_vf4_, %param, %param_1
-        if %x_178 [t: %b16] {  # if_8
-          %b16 = block {  # true
-            %x_181:i32 = load %i
+        %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))
-            %55:ptr<function, vec4<f32>, read_write> = access %indexable_1, %x_181
-            %x_183:f32 = load_vector_element %55, 0u
-            %x_185:i32 = load %i
+            %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))
-            %58:ptr<function, vec4<f32>, read_write> = access %indexable_2, %x_185
-            %x_187:f32 = load_vector_element %58, 1u
-            %x_190:i32 = load %i
+            %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))
-            %61:i32 = convert %x_183
-            %62:i32 = convert %x_187
-            %63:i32 = mul %61, %62
-            %64:i32 = mul %x_190, 9i
-            %65:i32 = add %63, %64
-            %66:i32 = add %65, 11i
-            %67:i32 = mod %66, 16i
-            %68:ptr<function, vec4<f32>, read_write> = access %indexable_3, %67
-            %69:vec4<f32> = load %68
-            store %res, %69
+            %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
+        continue  # -> $B13
       }
-      %b13 = block {  # continuing
-        %70:i32 = load %i
-        %71:i32 = add %70, 1i
-        store %i, %71
-        next_iteration %b12
+      $B13: {  # continuing
+        %80:i32 = load %i
+        %81:i32 = add %80, 1i
+        store %i, %81
+        next_iteration  # -> $B12
       }
     }
-    %x_199:vec4<f32> = load %res
+    %82:vec4<f32> = load %res
+    %x_199:vec4<f32> = let %82
     ret %x_199
   }
 }
-%main_1 = func():void -> %b17 {
-  %b17 = block {
+%main_1 = func():void {
+  $B17: {
     %lin:ptr<function, vec2<f32>, read_write> = var
     %param_2:ptr<function, vec2<f32>, read_write> = var
-    %76:vec4<f32> = load %gl_FragCoord
-    %77:vec2<f32> = swizzle %76, xy
-    %78:ptr<uniform, vec2<f32>, read> = access %x_20, 0u
-    %79:vec2<f32> = load %78
-    %80:vec2<f32> = div %77, %79
-    store %lin, %80
-    %81:vec2<f32> = load %lin
-    %82:vec2<f32> = mul %81, 32.0f
-    %83:vec2<f32> = floor %82
-    store %lin, %83
-    %84:vec2<f32> = load %lin
-    store %param_2, %84
-    %x_107:vec4<f32> = call %match_vf2_, %param_2
+    %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 {
-  %b18 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B18: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %88:void = call %main_1
-    %89:vec4<f32> = load %x_GLF_color
-    %90:main_out = construct %89
-    ret %90
+    %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
   }
 }
 
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
index b1dffe7..435e6f5 100644
--- 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
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,55 +8,65 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
-    %x_110:f32 = load_vector_element %pos, 0u
-    %x_112:f32 = load_vector_element %quad, 0u
-    %9:bool = lt %x_110, %x_112
-    if %9 [t: %b3] {  # if_1
-      %b3 = block {  # true
+%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
       }
     }
-    %x_117:f32 = load_vector_element %pos, 1u
-    %x_119:f32 = load_vector_element %quad, 1u
-    %12:bool = lt %x_117, %x_119
-    if %12 [t: %b4] {  # if_2
-      %b4 = block {  # true
+    %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
       }
     }
-    %x_124:f32 = load_vector_element %pos, 0u
-    %x_126:f32 = load_vector_element %quad, 0u
-    %x_128:f32 = load_vector_element %quad, 2u
-    %16:f32 = add %x_126, %x_128
-    %17:bool = gt %x_124, %16
-    if %17 [t: %b5] {  # if_3
-      %b5 = block {  # true
+    %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
       }
     }
-    %x_134:f32 = load_vector_element %pos, 1u
-    %x_136:f32 = load_vector_element %quad, 1u
-    %x_138:f32 = load_vector_element %quad, 3u
-    %21:f32 = add %x_136, %x_138
-    %22:bool = gt %x_134, %21
-    if %22 [t: %b6] {  # if_4
-      %b6 = block {  # true
+    %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 {
-  %b7 = block {
+%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
@@ -67,128 +77,177 @@
     %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
-    %x_147:f32 = load_vector_element %gl_FragCoord, 0u
-    %36:bool = lt %x_147, 0.0f
-    if %36 [t: %b8, f: %b9] {  # if_5
-      %b8 = block {  # true
+    %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 = block {  # false
-        %x_153:f32 = load_vector_element %gl_FragCoord, 0u
-        %38:bool = gte %x_153, 0.0f
-        if %38 [t: %b10, f: %b11] {  # if_6
-          %b10 = block {  # true
-            %x_159:f32 = load_vector_element %gl_FragCoord, 0u
-            %40:bool = gte %x_159, 0.0f
-            %41:f32 = select 1.0f, 0.5f, %40
-            store %x_145, %41
+      $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 = block {  # false
+          $B11: {  # false
             store %x_145, 1.0f
             exit_if  # if_6
           }
         }
-        %x_162:f32 = load %x_145
-        %43:f32 = min %x_162, 0.5f
-        store %x_144, %43
+        %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
       }
     }
-    %x_164:f32 = load %x_144
-    %45:f32 = clamp 0.5f, 0.5f, %x_164
-    %46:vec4<f32> = construct %45, 0.5f, 1.0f, 1.0f
-    store %res, %46
+    %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 = block {  # body
-        %x_171:i32 = load %i
-        %48:bool = lt %x_171, 8i
-        if %48 [t: %b14, f: %b15] {  # if_7
-          %b14 = block {  # true
+    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 = block {  # false
+          $B15: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_174:i32 = load %i
-        %x_175:vec2<f32> = load %pos_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))
-        %51:ptr<function, vec4<f32>, read_write> = access %indexable, %x_174
-        %x_177:vec4<f32> = load %51
+        %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
-        %x_178:bool = call %collision_vf2_vf4_, %param, %param_1
-        if %x_178 [t: %b16] {  # if_8
-          %b16 = block {  # true
-            %x_181:i32 = load %i
+        %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))
-            %55:ptr<function, vec4<f32>, read_write> = access %indexable_1, %x_181
-            %x_183:f32 = load_vector_element %55, 0u
-            %x_185:i32 = load %i
+            %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))
-            %58:ptr<function, vec4<f32>, read_write> = access %indexable_2, %x_185
-            %x_187:f32 = load_vector_element %58, 1u
-            %x_190:i32 = load %i
+            %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))
-            %61:i32 = convert %x_183
-            %62:i32 = convert %x_187
-            %63:i32 = mul %61, %62
-            %64:i32 = mul %x_190, 9i
-            %65:i32 = add %63, %64
-            %66:i32 = add %65, 11i
-            %67:i32 = mod %66, 16i
-            %68:ptr<function, vec4<f32>, read_write> = access %indexable_3, %67
-            %x_196:vec4<f32> = load %68
+            %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
+        continue  # -> $B13
       }
-      %b13 = block {  # continuing
-        %x_197:i32 = load %i
-        %71:i32 = add %x_197, 1i
-        store %i, %71
-        next_iteration %b12
+      $B13: {  # continuing
+        %99:i32 = load %i
+        %x_197:i32 = let %99
+        %101:i32 = add %x_197, 1i
+        store %i, %101
+        next_iteration  # -> $B12
       }
     }
-    %x_199:vec4<f32> = load %res
+    %102:vec4<f32> = load %res
+    %x_199:vec4<f32> = let %102
     ret %x_199
   }
 }
-%main_1 = func():void -> %b17 {
-  %b17 = block {
+%main_1 = func():void {
+  $B17: {
     %lin:ptr<function, vec2<f32>, read_write> = var
     %param_2:ptr<function, vec2<f32>, read_write> = var
-    %x_98:vec4<f32> = load %gl_FragCoord
-    %77:ptr<uniform, vec2<f32>, read> = access %x_20, 0u
-    %x_101:vec2<f32> = load %77
-    %79:f32 = access %x_98, 0u
-    %80:f32 = access %x_98, 1u
-    %81:vec2<f32> = construct %79, %80
-    %82:vec2<f32> = div %81, %x_101
-    store %lin, %82
-    %x_103:vec2<f32> = load %lin
-    %84:vec2<f32> = mul %x_103, 32.0f
-    %85:vec2<f32> = floor %84
-    store %lin, %85
-    %x_106:vec2<f32> = load %lin
+    %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
-    %x_107:vec4<f32> = call %match_vf2_, %param_2
+    %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 {
-  %b18 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B18: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %90:void = call %main_1
-    %91:vec4<f32> = load %x_GLF_color
-    %92:main_out = construct %91
-    ret %92
+    %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
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-triangle-array-nested-loop/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-triangle-array-nested-loop/0-opt.spvasm.expected.ir.msl
index c0aa8fc..e5d4488 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-triangle-array-nested-loop/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/stable-triangle-array-nested-loop/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,26 +8,30 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_24:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%cross2d_vf2_vf2_ = func(%a:ptr<function, vec2<f32>, read_write>, %b:ptr<function, vec2<f32>, read_write>):f32 -> %b2 {
-  %b2 = block {
-    %x_79:f32 = load_vector_element %a, 0u
-    %x_81:f32 = load_vector_element %b, 1u
-    %x_84:f32 = load_vector_element %b, 0u
-    %x_86:f32 = load_vector_element %a, 1u
-    %11:f32 = mul %x_79, %x_81
-    %12:f32 = mul %x_84, %x_86
-    %13:f32 = sub %11, %12
-    ret %13
+%cross2d_vf2_vf2_ = func(%a:ptr<function, vec2<f32>, read_write>, %b:ptr<function, vec2<f32>, read_write>):f32 {
+  $B2: {
+    %7:f32 = load_vector_element %a, 0u
+    %x_79:f32 = let %7
+    %9:f32 = load_vector_element %b, 1u
+    %x_81:f32 = let %9
+    %11:f32 = load_vector_element %b, 0u
+    %x_84:f32 = let %11
+    %13:f32 = load_vector_element %a, 1u
+    %x_86:f32 = let %13
+    %15:f32 = mul %x_79, %x_81
+    %16:f32 = mul %x_84, %x_86
+    %17:f32 = sub %15, %16
+    ret %17
   }
 }
-%pointInTriangle_vf2_vf2_vf2_vf2_ = func(%p:ptr<function, vec2<f32>, read_write>, %a_1:ptr<function, vec2<f32>, read_write>, %b_1:ptr<function, vec2<f32>, read_write>, %c:ptr<function, vec2<f32>, read_write>):i32 -> %b3 {
-  %b3 = block {
+%pointInTriangle_vf2_vf2_vf2_vf2_ = func(%p:ptr<function, vec2<f32>, read_write>, %a_1:ptr<function, vec2<f32>, read_write>, %b_1:ptr<function, vec2<f32>, read_write>, %c:ptr<function, vec2<f32>, read_write>):i32 {
+  $B3: {
     %x_90:ptr<function, bool, read_write> = var, false
     %x_91:ptr<function, i32, read_write> = var
     %pab:ptr<function, f32, read_write> = var
@@ -44,108 +48,125 @@
     %x_168:ptr<function, bool, read_write> = var
     %x_169:ptr<function, bool, read_write> = var
     %x_173:ptr<function, i32, read_write> = var
-    switch 0u [c: (default, %b4)] {  # switch_1
-      %b4 = block {  # case
-        %x_106:f32 = load_vector_element %b_1, 0u
-        %x_107:f32 = load_vector_element %a_1, 0u
-        %x_110:f32 = load_vector_element %b_1, 1u
-        %x_111:f32 = load_vector_element %a_1, 1u
-        %39:f32 = load_vector_element %p, 0u
-        %40:f32 = load_vector_element %a_1, 0u
-        %41:f32 = sub %39, %40
-        %42:f32 = load_vector_element %p, 1u
-        %43:f32 = load_vector_element %a_1, 1u
-        %44:f32 = sub %42, %43
-        %45:vec2<f32> = construct %41, %44
-        store %param, %45
-        %46:f32 = sub %x_106, %x_107
-        %47:f32 = sub %x_110, %x_111
-        %48:vec2<f32> = construct %46, %47
-        store %param_1, %48
-        %x_114:f32 = call %cross2d_vf2_vf2_, %param, %param_1
+    switch 0u [c: (default, $B4)] {  # switch_1
+      $B4: {  # case
+        %39:f32 = load_vector_element %b_1, 0u
+        %x_106:f32 = let %39
+        %41:f32 = load_vector_element %a_1, 0u
+        %x_107:f32 = let %41
+        %43:f32 = load_vector_element %b_1, 1u
+        %x_110:f32 = let %43
+        %45:f32 = load_vector_element %a_1, 1u
+        %x_111:f32 = let %45
+        %47:f32 = load_vector_element %p, 0u
+        %48:f32 = load_vector_element %a_1, 0u
+        %49:f32 = sub %47, %48
+        %50:f32 = load_vector_element %p, 1u
+        %51:f32 = load_vector_element %a_1, 1u
+        %52:f32 = sub %50, %51
+        %53:vec2<f32> = construct %49, %52
+        store %param, %53
+        %54:f32 = sub %x_106, %x_107
+        %55:f32 = sub %x_110, %x_111
+        %56:vec2<f32> = construct %54, %55
+        store %param_1, %56
+        %57:f32 = call %cross2d_vf2_vf2_, %param, %param_1
+        %x_114:f32 = let %57
         store %pab, %x_114
-        %x_123:f32 = load_vector_element %c, 0u
-        %x_124:f32 = load_vector_element %b_1, 0u
-        %x_127:f32 = load_vector_element %c, 1u
-        %x_128:f32 = load_vector_element %b_1, 1u
-        %54:f32 = load_vector_element %p, 0u
-        %55:f32 = load_vector_element %b_1, 0u
-        %56:f32 = sub %54, %55
-        %57:f32 = load_vector_element %p, 1u
-        %58:f32 = load_vector_element %b_1, 1u
-        %59:f32 = sub %57, %58
-        %60:vec2<f32> = construct %56, %59
-        store %param_2, %60
-        %61:f32 = sub %x_123, %x_124
-        %62:f32 = sub %x_127, %x_128
-        %63:vec2<f32> = construct %61, %62
-        store %param_3, %63
-        %x_131:f32 = call %cross2d_vf2_vf2_, %param_2, %param_3
+        %59:f32 = load_vector_element %c, 0u
+        %x_123:f32 = let %59
+        %61:f32 = load_vector_element %b_1, 0u
+        %x_124:f32 = let %61
+        %63:f32 = load_vector_element %c, 1u
+        %x_127:f32 = let %63
+        %65:f32 = load_vector_element %b_1, 1u
+        %x_128:f32 = let %65
+        %67:f32 = load_vector_element %p, 0u
+        %68:f32 = load_vector_element %b_1, 0u
+        %69:f32 = sub %67, %68
+        %70:f32 = load_vector_element %p, 1u
+        %71:f32 = load_vector_element %b_1, 1u
+        %72:f32 = sub %70, %71
+        %73:vec2<f32> = construct %69, %72
+        store %param_2, %73
+        %74:f32 = sub %x_123, %x_124
+        %75:f32 = sub %x_127, %x_128
+        %76:vec2<f32> = construct %74, %75
+        store %param_3, %76
+        %77:f32 = call %cross2d_vf2_vf2_, %param_2, %param_3
+        %x_131:f32 = let %77
         store %pbc, %x_131
-        %65:bool = lt %x_114, 0.0f
-        %66:bool = lt %x_131, 0.0f
-        %x_134:bool = and %65, %66
+        %79:bool = lt %x_114, 0.0f
+        %80:bool = lt %x_131, 0.0f
+        %81:bool = and %79, %80
+        %x_134:bool = let %81
         store %x_141, %x_134
-        %68:bool = eq %x_134, false
-        if %68 [t: %b5] {  # if_1
-          %b5 = block {  # true
-            %69:bool = gte %x_114, 0.0f
-            %70:bool = gte %x_131, 0.0f
-            %71:bool = and %69, %70
-            store %x_140, %71
-            %72:bool = load %x_140
-            store %x_141, %72
+        %83:bool = eq %x_134, false
+        if %83 [t: $B5] {  # if_1
+          $B5: {  # true
+            %84:bool = gte %x_114, 0.0f
+            %85:bool = gte %x_131, 0.0f
+            %86:bool = and %84, %85
+            store %x_140, %86
+            %87:bool = load %x_140
+            store %x_141, %87
             exit_if  # if_1
           }
         }
-        %73:bool = load %x_141
-        %74:bool = eq %73, false
-        if %74 [t: %b6] {  # if_2
-          %b6 = block {  # true
+        %88:bool = load %x_141
+        %89:bool = eq %88, false
+        if %89 [t: $B6] {  # if_2
+          $B6: {  # true
             store %x_90, true
             store %x_91, 0i
             store %x_173, 0i
             exit_switch  # switch_1
           }
         }
-        %x_152:f32 = load_vector_element %a_1, 0u
-        %x_153:f32 = load_vector_element %c, 0u
-        %x_155:f32 = load_vector_element %a_1, 1u
-        %x_156:f32 = load_vector_element %c, 1u
-        %79:f32 = load_vector_element %p, 0u
-        %80:f32 = load_vector_element %c, 0u
-        %81:f32 = sub %79, %80
-        %82:f32 = load_vector_element %p, 1u
-        %83:f32 = load_vector_element %c, 1u
-        %84:f32 = sub %82, %83
-        %85:vec2<f32> = construct %81, %84
-        store %param_4, %85
-        %86:f32 = sub %x_152, %x_153
-        %87:f32 = sub %x_155, %x_156
-        %88:vec2<f32> = construct %86, %87
-        store %param_5, %88
-        %x_159:f32 = call %cross2d_vf2_vf2_, %param_4, %param_5
+        %90:f32 = load_vector_element %a_1, 0u
+        %x_152:f32 = let %90
+        %92:f32 = load_vector_element %c, 0u
+        %x_153:f32 = let %92
+        %94:f32 = load_vector_element %a_1, 1u
+        %x_155:f32 = let %94
+        %96:f32 = load_vector_element %c, 1u
+        %x_156:f32 = let %96
+        %98:f32 = load_vector_element %p, 0u
+        %99:f32 = load_vector_element %c, 0u
+        %100:f32 = sub %98, %99
+        %101:f32 = load_vector_element %p, 1u
+        %102:f32 = load_vector_element %c, 1u
+        %103:f32 = sub %101, %102
+        %104:vec2<f32> = construct %100, %103
+        store %param_4, %104
+        %105:f32 = sub %x_152, %x_153
+        %106:f32 = sub %x_155, %x_156
+        %107:vec2<f32> = construct %105, %106
+        store %param_5, %107
+        %108:f32 = call %cross2d_vf2_vf2_, %param_4, %param_5
+        %x_159:f32 = let %108
         store %pca, %x_159
-        %90:bool = lt %x_114, 0.0f
-        %91:bool = lt %x_159, 0.0f
-        %x_162:bool = and %90, %91
+        %110:bool = lt %x_114, 0.0f
+        %111:bool = lt %x_159, 0.0f
+        %112:bool = and %110, %111
+        %x_162:bool = let %112
         store %x_169, %x_162
-        %93:bool = eq %x_162, false
-        if %93 [t: %b7] {  # if_3
-          %b7 = block {  # true
-            %94:bool = gte %x_114, 0.0f
-            %95:bool = gte %x_159, 0.0f
-            %96:bool = and %94, %95
-            store %x_168, %96
-            %97:bool = load %x_168
-            store %x_169, %97
+        %114:bool = eq %x_162, false
+        if %114 [t: $B7] {  # if_3
+          $B7: {  # true
+            %115:bool = gte %x_114, 0.0f
+            %116:bool = gte %x_159, 0.0f
+            %117:bool = and %115, %116
+            store %x_168, %117
+            %118:bool = load %x_168
+            store %x_169, %118
             exit_if  # if_3
           }
         }
-        %98:bool = load %x_169
-        %99:bool = eq %98, false
-        if %99 [t: %b8] {  # if_4
-          %b8 = block {  # true
+        %119:bool = load %x_169
+        %120:bool = eq %119, false
+        if %120 [t: $B8] {  # if_4
+          $B8: {  # true
             store %x_90, true
             store %x_91, 0i
             store %x_173, 0i
@@ -158,35 +179,37 @@
         exit_switch  # switch_1
       }
     }
-    %100:i32 = load %x_173
-    ret %100
+    %121:i32 = load %x_173
+    ret %121
   }
 }
-%main_1 = func():void -> %b9 {
-  %b9 = block {
+%main_1 = func():void {
+  $B9: {
     %pos:ptr<function, vec2<f32>, read_write> = var
     %param_6:ptr<function, vec2<f32>, read_write> = var
     %param_7:ptr<function, vec2<f32>, read_write> = var
     %param_8:ptr<function, vec2<f32>, read_write> = var
     %param_9:ptr<function, vec2<f32>, read_write> = var
-    %107:vec4<f32> = load %gl_FragCoord
-    %108:vec2<f32> = swizzle %107, xy
-    %109:ptr<uniform, vec2<f32>, read> = access %x_24, 0u
-    %110:vec2<f32> = load %109
-    %x_71:vec2<f32> = div %108, %110
+    %128:vec4<f32> = load %gl_FragCoord
+    %129:vec2<f32> = swizzle %128, xy
+    %130:ptr<uniform, vec2<f32>, read> = access %x_24, 0u
+    %131:vec2<f32> = load %130
+    %132:vec2<f32> = div %129, %131
+    %x_71:vec2<f32> = let %132
     store %pos, %x_71
     store %param_6, %x_71
     store %param_7, vec2<f32>(0.69999998807907104492f, 0.30000001192092895508f)
     store %param_8, vec2<f32>(0.5f, 0.89999997615814208984f)
     store %param_9, vec2<f32>(0.10000000149011611938f, 0.40000000596046447754f)
-    %x_72:i32 = call %pointInTriangle_vf2_vf2_vf2_vf2_, %param_6, %param_7, %param_8, %param_9
-    %113:bool = eq %x_72, 1i
-    if %113 [t: %b10, f: %b11] {  # if_5
-      %b10 = block {  # true
+    %134:i32 = call %pointInTriangle_vf2_vf2_vf2_vf2_, %param_6, %param_7, %param_8, %param_9
+    %x_72:i32 = let %134
+    %136:bool = eq %x_72, 1i
+    if %136 [t: $B10, f: $B11] {  # if_5
+      $B10: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_5
       }
-      %b11 = block {  # false
+      $B11: {  # false
         store %x_GLF_color, vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_5
       }
@@ -194,13 +217,13 @@
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b12 {
-  %b12 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B12: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %116:void = call %main_1
-    %117:vec4<f32> = load %x_GLF_color
-    %118:main_out = construct %117
-    ret %118
+    %139:void = call %main_1
+    %140:vec4<f32> = load %x_GLF_color
+    %141:main_out = construct %140
+    ret %141
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-triangle-array-nested-loop/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-triangle-array-nested-loop/0-opt.wgsl.expected.ir.msl
index 18ff9b4..5aa90252 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-triangle-array-nested-loop/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/stable-triangle-array-nested-loop/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,26 +8,30 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_24:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%cross2d_vf2_vf2_ = func(%a:ptr<function, vec2<f32>, read_write>, %b:ptr<function, vec2<f32>, read_write>):f32 -> %b2 {
-  %b2 = block {
-    %x_79:f32 = load_vector_element %a, 0u
-    %x_81:f32 = load_vector_element %b, 1u
-    %x_84:f32 = load_vector_element %b, 0u
-    %x_86:f32 = load_vector_element %a, 1u
-    %11:f32 = mul %x_79, %x_81
-    %12:f32 = mul %x_84, %x_86
-    %13:f32 = sub %11, %12
-    ret %13
+%cross2d_vf2_vf2_ = func(%a:ptr<function, vec2<f32>, read_write>, %b:ptr<function, vec2<f32>, read_write>):f32 {
+  $B2: {
+    %7:f32 = load_vector_element %a, 0u
+    %x_79:f32 = let %7
+    %9:f32 = load_vector_element %b, 1u
+    %x_81:f32 = let %9
+    %11:f32 = load_vector_element %b, 0u
+    %x_84:f32 = let %11
+    %13:f32 = load_vector_element %a, 1u
+    %x_86:f32 = let %13
+    %15:f32 = mul %x_79, %x_81
+    %16:f32 = mul %x_84, %x_86
+    %17:f32 = sub %15, %16
+    ret %17
   }
 }
-%pointInTriangle_vf2_vf2_vf2_vf2_ = func(%p:ptr<function, vec2<f32>, read_write>, %a_1:ptr<function, vec2<f32>, read_write>, %b_1:ptr<function, vec2<f32>, read_write>, %c:ptr<function, vec2<f32>, read_write>):i32 -> %b3 {
-  %b3 = block {
+%pointInTriangle_vf2_vf2_vf2_vf2_ = func(%p:ptr<function, vec2<f32>, read_write>, %a_1:ptr<function, vec2<f32>, read_write>, %b_1:ptr<function, vec2<f32>, read_write>, %c:ptr<function, vec2<f32>, read_write>):i32 {
+  $B3: {
     %x_90:ptr<function, bool, read_write> = var, false
     %x_91:ptr<function, i32, read_write> = var
     %pab:ptr<function, f32, read_write> = var
@@ -44,108 +48,139 @@
     %x_141_phi:ptr<function, bool, read_write> = var
     %x_169_phi:ptr<function, bool, read_write> = var
     %x_173_phi:ptr<function, i32, read_write> = var
-    switch 0u [c: (default, %b4)] {  # switch_1
-      %b4 = block {  # case
-        %x_95:f32 = load_vector_element %p, 0u
-        %x_97:f32 = load_vector_element %a_1, 0u
-        %x_100:f32 = load_vector_element %p, 1u
-        %x_102:f32 = load_vector_element %a_1, 1u
-        %x_106:f32 = load_vector_element %b_1, 0u
-        %x_107:f32 = load_vector_element %a_1, 0u
-        %x_110:f32 = load_vector_element %b_1, 1u
-        %x_111:f32 = load_vector_element %a_1, 1u
-        %43:f32 = sub %x_95, %x_97
-        %44:f32 = sub %x_100, %x_102
-        %45:vec2<f32> = construct %43, %44
-        store %param, %45
-        %46:f32 = sub %x_106, %x_107
-        %47:f32 = sub %x_110, %x_111
-        %48:vec2<f32> = construct %46, %47
-        store %param_1, %48
-        %x_114:f32 = call %cross2d_vf2_vf2_, %param, %param_1
-        store %pab, %x_114
-        %x_115:f32 = load_vector_element %p, 0u
-        %x_116:f32 = load_vector_element %b_1, 0u
-        %x_118:f32 = load_vector_element %p, 1u
-        %x_119:f32 = load_vector_element %b_1, 1u
-        %x_123:f32 = load_vector_element %c, 0u
-        %x_124:f32 = load_vector_element %b_1, 0u
-        %x_127:f32 = load_vector_element %c, 1u
-        %x_128:f32 = load_vector_element %b_1, 1u
-        %58:f32 = sub %x_115, %x_116
-        %59:f32 = sub %x_118, %x_119
+    switch 0u [c: (default, $B4)] {  # switch_1
+      $B4: {  # case
+        %39:f32 = load_vector_element %p, 0u
+        %x_95:f32 = let %39
+        %41:f32 = load_vector_element %a_1, 0u
+        %x_97:f32 = let %41
+        %43:f32 = load_vector_element %p, 1u
+        %x_100:f32 = let %43
+        %45:f32 = load_vector_element %a_1, 1u
+        %x_102:f32 = let %45
+        %47:f32 = load_vector_element %b_1, 0u
+        %x_106:f32 = let %47
+        %49:f32 = load_vector_element %a_1, 0u
+        %x_107:f32 = let %49
+        %51:f32 = load_vector_element %b_1, 1u
+        %x_110:f32 = let %51
+        %53:f32 = load_vector_element %a_1, 1u
+        %x_111:f32 = let %53
+        %55:f32 = sub %x_95, %x_97
+        %56:f32 = sub %x_100, %x_102
+        %57:vec2<f32> = construct %55, %56
+        store %param, %57
+        %58:f32 = sub %x_106, %x_107
+        %59:f32 = sub %x_110, %x_111
         %60:vec2<f32> = construct %58, %59
-        store %param_2, %60
-        %61:f32 = sub %x_123, %x_124
-        %62:f32 = sub %x_127, %x_128
-        %63:vec2<f32> = construct %61, %62
-        store %param_3, %63
-        %x_131:f32 = call %cross2d_vf2_vf2_, %param_2, %param_3
+        store %param_1, %60
+        %61:f32 = call %cross2d_vf2_vf2_, %param, %param_1
+        %x_114:f32 = let %61
+        store %pab, %x_114
+        %63:f32 = load_vector_element %p, 0u
+        %x_115:f32 = let %63
+        %65:f32 = load_vector_element %b_1, 0u
+        %x_116:f32 = let %65
+        %67:f32 = load_vector_element %p, 1u
+        %x_118:f32 = let %67
+        %69:f32 = load_vector_element %b_1, 1u
+        %x_119:f32 = let %69
+        %71:f32 = load_vector_element %c, 0u
+        %x_123:f32 = let %71
+        %73:f32 = load_vector_element %b_1, 0u
+        %x_124:f32 = let %73
+        %75:f32 = load_vector_element %c, 1u
+        %x_127:f32 = let %75
+        %77:f32 = load_vector_element %b_1, 1u
+        %x_128:f32 = let %77
+        %79:f32 = sub %x_115, %x_116
+        %80:f32 = sub %x_118, %x_119
+        %81:vec2<f32> = construct %79, %80
+        store %param_2, %81
+        %82:f32 = sub %x_123, %x_124
+        %83:f32 = sub %x_127, %x_128
+        %84:vec2<f32> = construct %82, %83
+        store %param_3, %84
+        %85:f32 = call %cross2d_vf2_vf2_, %param_2, %param_3
+        %x_131:f32 = let %85
         store %pbc, %x_131
-        %65:bool = lt %x_114, 0.0f
-        %66:bool = lt %x_131, 0.0f
-        %x_134:bool = and %65, %66
+        %87:bool = lt %x_114, 0.0f
+        %88:bool = lt %x_131, 0.0f
+        %89:bool = and %87, %88
+        %x_134:bool = let %89
         store %x_141_phi, %x_134
-        %68:bool = eq %x_134, false
-        if %68 [t: %b5] {  # if_1
-          %b5 = block {  # true
-            %69:bool = gte %x_114, 0.0f
-            %70:bool = gte %x_131, 0.0f
-            %71:bool = and %69, %70
-            store %x_140, %71
-            %72:bool = load %x_140
-            store %x_141_phi, %72
+        %91:bool = eq %x_134, false
+        if %91 [t: $B5] {  # if_1
+          $B5: {  # true
+            %92:bool = gte %x_114, 0.0f
+            %93:bool = gte %x_131, 0.0f
+            %94:bool = and %92, %93
+            store %x_140, %94
+            %95:bool = load %x_140
+            store %x_141_phi, %95
             exit_if  # if_1
           }
         }
-        %x_141:bool = load %x_141_phi
-        %74:bool = eq %x_141, false
-        if %74 [t: %b6] {  # if_2
-          %b6 = block {  # true
+        %96:bool = load %x_141_phi
+        %x_141:bool = let %96
+        %98:bool = eq %x_141, false
+        if %98 [t: $B6] {  # if_2
+          $B6: {  # true
             store %x_90, true
             store %x_91, 0i
             store %x_173_phi, 0i
             exit_switch  # switch_1
           }
         }
-        %x_145:f32 = load_vector_element %p, 0u
-        %x_146:f32 = load_vector_element %c, 0u
-        %x_148:f32 = load_vector_element %p, 1u
-        %x_149:f32 = load_vector_element %c, 1u
-        %x_152:f32 = load_vector_element %a_1, 0u
-        %x_153:f32 = load_vector_element %c, 0u
-        %x_155:f32 = load_vector_element %a_1, 1u
-        %x_156:f32 = load_vector_element %c, 1u
-        %83:f32 = sub %x_145, %x_146
-        %84:f32 = sub %x_148, %x_149
-        %85:vec2<f32> = construct %83, %84
-        store %param_4, %85
-        %86:f32 = sub %x_152, %x_153
-        %87:f32 = sub %x_155, %x_156
-        %88:vec2<f32> = construct %86, %87
-        store %param_5, %88
-        %x_159:f32 = call %cross2d_vf2_vf2_, %param_4, %param_5
+        %99:f32 = load_vector_element %p, 0u
+        %x_145:f32 = let %99
+        %101:f32 = load_vector_element %c, 0u
+        %x_146:f32 = let %101
+        %103:f32 = load_vector_element %p, 1u
+        %x_148:f32 = let %103
+        %105:f32 = load_vector_element %c, 1u
+        %x_149:f32 = let %105
+        %107:f32 = load_vector_element %a_1, 0u
+        %x_152:f32 = let %107
+        %109:f32 = load_vector_element %c, 0u
+        %x_153:f32 = let %109
+        %111:f32 = load_vector_element %a_1, 1u
+        %x_155:f32 = let %111
+        %113:f32 = load_vector_element %c, 1u
+        %x_156:f32 = let %113
+        %115:f32 = sub %x_145, %x_146
+        %116:f32 = sub %x_148, %x_149
+        %117:vec2<f32> = construct %115, %116
+        store %param_4, %117
+        %118:f32 = sub %x_152, %x_153
+        %119:f32 = sub %x_155, %x_156
+        %120:vec2<f32> = construct %118, %119
+        store %param_5, %120
+        %121:f32 = call %cross2d_vf2_vf2_, %param_4, %param_5
+        %x_159:f32 = let %121
         store %pca, %x_159
-        %90:bool = lt %x_114, 0.0f
-        %91:bool = lt %x_159, 0.0f
-        %x_162:bool = and %90, %91
+        %123:bool = lt %x_114, 0.0f
+        %124:bool = lt %x_159, 0.0f
+        %125:bool = and %123, %124
+        %x_162:bool = let %125
         store %x_169_phi, %x_162
-        %93:bool = eq %x_162, false
-        if %93 [t: %b7] {  # if_3
-          %b7 = block {  # true
-            %94:bool = gte %x_114, 0.0f
-            %95:bool = gte %x_159, 0.0f
-            %96:bool = and %94, %95
-            store %x_168, %96
-            %97:bool = load %x_168
-            store %x_169_phi, %97
+        %127:bool = eq %x_162, false
+        if %127 [t: $B7] {  # if_3
+          $B7: {  # true
+            %128:bool = gte %x_114, 0.0f
+            %129:bool = gte %x_159, 0.0f
+            %130:bool = and %128, %129
+            store %x_168, %130
+            %131:bool = load %x_168
+            store %x_169_phi, %131
             exit_if  # if_3
           }
         }
-        %x_169:bool = load %x_169_phi
-        %99:bool = eq %x_169, false
-        if %99 [t: %b8] {  # if_4
-          %b8 = block {  # true
+        %132:bool = load %x_169_phi
+        %x_169:bool = let %132
+        %134:bool = eq %x_169, false
+        if %134 [t: $B8] {  # if_4
+          $B8: {  # true
             store %x_90, true
             store %x_91, 0i
             store %x_173_phi, 0i
@@ -158,37 +193,42 @@
         exit_switch  # switch_1
       }
     }
-    %x_173:i32 = load %x_173_phi
+    %135:i32 = load %x_173_phi
+    %x_173:i32 = let %135
     ret %x_173
   }
 }
-%main_1 = func():void -> %b9 {
-  %b9 = block {
+%main_1 = func():void {
+  $B9: {
     %pos:ptr<function, vec2<f32>, read_write> = var
     %param_6:ptr<function, vec2<f32>, read_write> = var
     %param_7:ptr<function, vec2<f32>, read_write> = var
     %param_8:ptr<function, vec2<f32>, read_write> = var
     %param_9:ptr<function, vec2<f32>, read_write> = var
-    %x_67:vec4<f32> = load %gl_FragCoord
-    %108:ptr<uniform, vec2<f32>, read> = access %x_24, 0u
-    %x_70:vec2<f32> = load %108
-    %110:f32 = access %x_67, 0u
-    %111:f32 = access %x_67, 1u
-    %112:vec2<f32> = construct %110, %111
-    %x_71:vec2<f32> = div %112, %x_70
+    %143:vec4<f32> = load %gl_FragCoord
+    %x_67:vec4<f32> = let %143
+    %145:ptr<uniform, vec2<f32>, read> = access %x_24, 0u
+    %146:vec2<f32> = load %145
+    %x_70:vec2<f32> = let %146
+    %148:f32 = access %x_67, 0u
+    %149:f32 = access %x_67, 1u
+    %150:vec2<f32> = construct %148, %149
+    %151:vec2<f32> = div %150, %x_70
+    %x_71:vec2<f32> = let %151
     store %pos, %x_71
     store %param_6, %x_71
     store %param_7, vec2<f32>(0.69999998807907104492f, 0.30000001192092895508f)
     store %param_8, vec2<f32>(0.5f, 0.89999997615814208984f)
     store %param_9, vec2<f32>(0.10000000149011611938f, 0.40000000596046447754f)
-    %x_72:i32 = call %pointInTriangle_vf2_vf2_vf2_vf2_, %param_6, %param_7, %param_8, %param_9
-    %115:bool = eq %x_72, 1i
-    if %115 [t: %b10, f: %b11] {  # if_5
-      %b10 = block {  # true
+    %153:i32 = call %pointInTriangle_vf2_vf2_vf2_vf2_, %param_6, %param_7, %param_8, %param_9
+    %x_72:i32 = let %153
+    %155:bool = eq %x_72, 1i
+    if %155 [t: $B10, f: $B11] {  # if_5
+      $B10: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_5
       }
-      %b11 = block {  # false
+      $B11: {  # false
         store %x_GLF_color, vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_5
       }
@@ -196,13 +236,13 @@
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b12 {
-  %b12 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B12: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %118:void = call %main_1
-    %119:vec4<f32> = load %x_GLF_color
-    %120:main_out = construct %119
-    ret %120
+    %158:void = call %main_1
+    %159:vec4<f32> = load %x_GLF_color
+    %160:main_out = construct %159
+    ret %160
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/0.spvasm.expected.ir.msl
index 120dd26..54ebf02 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,26 +8,30 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_24:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%cross2d_vf2_vf2_ = func(%a:ptr<function, vec2<f32>, read_write>, %b:ptr<function, vec2<f32>, read_write>):f32 -> %b2 {
-  %b2 = block {
-    %x_76:f32 = load_vector_element %a, 0u
-    %x_78:f32 = load_vector_element %b, 1u
-    %x_81:f32 = load_vector_element %b, 0u
-    %x_83:f32 = load_vector_element %a, 1u
-    %11:f32 = mul %x_76, %x_78
-    %12:f32 = mul %x_81, %x_83
-    %13:f32 = sub %11, %12
-    ret %13
+%cross2d_vf2_vf2_ = func(%a:ptr<function, vec2<f32>, read_write>, %b:ptr<function, vec2<f32>, read_write>):f32 {
+  $B2: {
+    %7:f32 = load_vector_element %a, 0u
+    %x_76:f32 = let %7
+    %9:f32 = load_vector_element %b, 1u
+    %x_78:f32 = let %9
+    %11:f32 = load_vector_element %b, 0u
+    %x_81:f32 = let %11
+    %13:f32 = load_vector_element %a, 1u
+    %x_83:f32 = let %13
+    %15:f32 = mul %x_76, %x_78
+    %16:f32 = mul %x_81, %x_83
+    %17:f32 = sub %15, %16
+    ret %17
   }
 }
-%pointInTriangle_vf2_vf2_vf2_vf2_ = func(%p:ptr<function, vec2<f32>, read_write>, %a_1:ptr<function, vec2<f32>, read_write>, %b_1:ptr<function, vec2<f32>, read_write>, %c:ptr<function, vec2<f32>, read_write>):i32 -> %b3 {
-  %b3 = block {
+%pointInTriangle_vf2_vf2_vf2_vf2_ = func(%p:ptr<function, vec2<f32>, read_write>, %a_1:ptr<function, vec2<f32>, read_write>, %b_1:ptr<function, vec2<f32>, read_write>, %c:ptr<function, vec2<f32>, read_write>):i32 {
+  $B3: {
     %pab:ptr<function, f32, read_write> = var
     %param:ptr<function, vec2<f32>, read_write> = var
     %param_1:ptr<function, vec2<f32>, read_write> = var
@@ -41,143 +45,161 @@
     %x_138:ptr<function, bool, read_write> = var
     %x_169:ptr<function, bool, read_write> = var
     %x_170:ptr<function, bool, read_write> = var
-    %x_99:f32 = load_vector_element %b_1, 0u
-    %x_100:f32 = load_vector_element %a_1, 0u
-    %x_103:f32 = load_vector_element %b_1, 1u
-    %x_104:f32 = load_vector_element %a_1, 1u
-    %36:f32 = load_vector_element %p, 0u
-    %37:f32 = load_vector_element %a_1, 0u
-    %38:f32 = sub %36, %37
-    %39:f32 = load_vector_element %p, 1u
-    %40:f32 = load_vector_element %a_1, 1u
-    %41:f32 = sub %39, %40
-    %42:vec2<f32> = construct %38, %41
-    store %param, %42
-    %43:f32 = sub %x_99, %x_100
-    %44:f32 = sub %x_103, %x_104
-    %45:vec2<f32> = construct %43, %44
-    store %param_1, %45
-    %x_107:f32 = call %cross2d_vf2_vf2_, %param, %param_1
+    %36:f32 = load_vector_element %b_1, 0u
+    %x_99:f32 = let %36
+    %38:f32 = load_vector_element %a_1, 0u
+    %x_100:f32 = let %38
+    %40:f32 = load_vector_element %b_1, 1u
+    %x_103:f32 = let %40
+    %42:f32 = load_vector_element %a_1, 1u
+    %x_104:f32 = let %42
+    %44:f32 = load_vector_element %p, 0u
+    %45:f32 = load_vector_element %a_1, 0u
+    %46:f32 = sub %44, %45
+    %47:f32 = load_vector_element %p, 1u
+    %48:f32 = load_vector_element %a_1, 1u
+    %49:f32 = sub %47, %48
+    %50:vec2<f32> = construct %46, %49
+    store %param, %50
+    %51:f32 = sub %x_99, %x_100
+    %52:f32 = sub %x_103, %x_104
+    %53:vec2<f32> = construct %51, %52
+    store %param_1, %53
+    %54:f32 = call %cross2d_vf2_vf2_, %param, %param_1
+    %x_107:f32 = let %54
     store %pab, %x_107
-    %x_116:f32 = load_vector_element %c, 0u
-    %x_117:f32 = load_vector_element %b_1, 0u
-    %x_120:f32 = load_vector_element %c, 1u
-    %x_121:f32 = load_vector_element %b_1, 1u
-    %51:f32 = load_vector_element %p, 0u
-    %52:f32 = load_vector_element %b_1, 0u
-    %53:f32 = sub %51, %52
-    %54:f32 = load_vector_element %p, 1u
-    %55:f32 = load_vector_element %b_1, 1u
-    %56:f32 = sub %54, %55
-    %57:vec2<f32> = construct %53, %56
-    store %param_2, %57
-    %58:f32 = sub %x_116, %x_117
-    %59:f32 = sub %x_120, %x_121
-    %60:vec2<f32> = construct %58, %59
-    store %param_3, %60
-    %x_124:f32 = call %cross2d_vf2_vf2_, %param_2, %param_3
+    %56:f32 = load_vector_element %c, 0u
+    %x_116:f32 = let %56
+    %58:f32 = load_vector_element %b_1, 0u
+    %x_117:f32 = let %58
+    %60:f32 = load_vector_element %c, 1u
+    %x_120:f32 = let %60
+    %62:f32 = load_vector_element %b_1, 1u
+    %x_121:f32 = let %62
+    %64:f32 = load_vector_element %p, 0u
+    %65:f32 = load_vector_element %b_1, 0u
+    %66:f32 = sub %64, %65
+    %67:f32 = load_vector_element %p, 1u
+    %68:f32 = load_vector_element %b_1, 1u
+    %69:f32 = sub %67, %68
+    %70:vec2<f32> = construct %66, %69
+    store %param_2, %70
+    %71:f32 = sub %x_116, %x_117
+    %72:f32 = sub %x_120, %x_121
+    %73:vec2<f32> = construct %71, %72
+    store %param_3, %73
+    %74:f32 = call %cross2d_vf2_vf2_, %param_2, %param_3
+    %x_124:f32 = let %74
     store %pbc, %x_124
-    %62:f32 = load %pab
-    %63:bool = lt %62, 0.0f
-    %64:f32 = load %pbc
-    %65:bool = lt %64, 0.0f
-    %x_129:bool = and %63, %65
+    %76:f32 = load %pab
+    %77:bool = lt %76, 0.0f
+    %78:f32 = load %pbc
+    %79:bool = lt %78, 0.0f
+    %80:bool = and %77, %79
+    %x_129:bool = let %80
     store %x_138, %x_129
-    %67:bool = eq %x_129, false
-    if %67 [t: %b4] {  # if_1
-      %b4 = block {  # true
-        %68:f32 = load %pab
-        %69:bool = gte %68, 0.0f
-        %70:f32 = load %pbc
-        %71:bool = gte %70, 0.0f
-        %72:bool = and %69, %71
-        store %x_137, %72
-        %73:bool = load %x_137
-        store %x_138, %73
+    %82:bool = eq %x_129, false
+    if %82 [t: $B4] {  # if_1
+      $B4: {  # true
+        %83:f32 = load %pab
+        %84:bool = gte %83, 0.0f
+        %85:f32 = load %pbc
+        %86:bool = gte %85, 0.0f
+        %87:bool = and %84, %86
+        store %x_137, %87
+        %88:bool = load %x_137
+        store %x_138, %88
         exit_if  # if_1
       }
     }
-    %74:bool = load %x_138
-    %75:bool = eq %74, false
-    if %75 [t: %b5] {  # if_2
-      %b5 = block {  # true
+    %89:bool = load %x_138
+    %90:bool = eq %89, false
+    if %90 [t: $B5] {  # if_2
+      $B5: {  # true
         ret 0i
       }
     }
-    %x_149:f32 = load_vector_element %a_1, 0u
-    %x_150:f32 = load_vector_element %c, 0u
-    %x_152:f32 = load_vector_element %a_1, 1u
-    %x_153:f32 = load_vector_element %c, 1u
-    %80:f32 = load_vector_element %p, 0u
-    %81:f32 = load_vector_element %c, 0u
-    %82:f32 = sub %80, %81
-    %83:f32 = load_vector_element %p, 1u
-    %84:f32 = load_vector_element %c, 1u
-    %85:f32 = sub %83, %84
-    %86:vec2<f32> = construct %82, %85
-    store %param_4, %86
-    %87:f32 = sub %x_149, %x_150
-    %88:f32 = sub %x_152, %x_153
-    %89:vec2<f32> = construct %87, %88
-    store %param_5, %89
-    %x_156:f32 = call %cross2d_vf2_vf2_, %param_4, %param_5
+    %91:f32 = load_vector_element %a_1, 0u
+    %x_149:f32 = let %91
+    %93:f32 = load_vector_element %c, 0u
+    %x_150:f32 = let %93
+    %95:f32 = load_vector_element %a_1, 1u
+    %x_152:f32 = let %95
+    %97:f32 = load_vector_element %c, 1u
+    %x_153:f32 = let %97
+    %99:f32 = load_vector_element %p, 0u
+    %100:f32 = load_vector_element %c, 0u
+    %101:f32 = sub %99, %100
+    %102:f32 = load_vector_element %p, 1u
+    %103:f32 = load_vector_element %c, 1u
+    %104:f32 = sub %102, %103
+    %105:vec2<f32> = construct %101, %104
+    store %param_4, %105
+    %106:f32 = sub %x_149, %x_150
+    %107:f32 = sub %x_152, %x_153
+    %108:vec2<f32> = construct %106, %107
+    store %param_5, %108
+    %109:f32 = call %cross2d_vf2_vf2_, %param_4, %param_5
+    %x_156:f32 = let %109
     store %pca, %x_156
-    %91:f32 = load %pab
-    %92:bool = lt %91, 0.0f
-    %93:f32 = load %pca
-    %94:bool = lt %93, 0.0f
-    %x_161:bool = and %92, %94
+    %111:f32 = load %pab
+    %112:bool = lt %111, 0.0f
+    %113:f32 = load %pca
+    %114:bool = lt %113, 0.0f
+    %115:bool = and %112, %114
+    %x_161:bool = let %115
     store %x_170, %x_161
-    %96:bool = eq %x_161, false
-    if %96 [t: %b6] {  # if_3
-      %b6 = block {  # true
-        %97:f32 = load %pab
-        %98:bool = gte %97, 0.0f
-        %99:f32 = load %pca
-        %100:bool = gte %99, 0.0f
-        %101:bool = and %98, %100
-        store %x_169, %101
-        %102:bool = load %x_169
-        store %x_170, %102
+    %117:bool = eq %x_161, false
+    if %117 [t: $B6] {  # if_3
+      $B6: {  # true
+        %118:f32 = load %pab
+        %119:bool = gte %118, 0.0f
+        %120:f32 = load %pca
+        %121:bool = gte %120, 0.0f
+        %122:bool = and %119, %121
+        store %x_169, %122
+        %123:bool = load %x_169
+        store %x_170, %123
         exit_if  # if_3
       }
     }
-    %103:bool = load %x_170
-    %104:bool = eq %103, false
-    if %104 [t: %b7] {  # if_4
-      %b7 = block {  # true
+    %124:bool = load %x_170
+    %125:bool = eq %124, false
+    if %125 [t: $B7] {  # if_4
+      $B7: {  # true
         ret 0i
       }
     }
     ret 1i
   }
 }
-%main_1 = func():void -> %b8 {
-  %b8 = block {
+%main_1 = func():void {
+  $B8: {
     %pos:ptr<function, vec2<f32>, read_write> = var
     %param_6:ptr<function, vec2<f32>, read_write> = var
     %param_7:ptr<function, vec2<f32>, read_write> = var
     %param_8:ptr<function, vec2<f32>, read_write> = var
     %param_9:ptr<function, vec2<f32>, read_write> = var
-    %111:vec4<f32> = load %gl_FragCoord
-    %112:vec2<f32> = swizzle %111, xy
-    %113:ptr<uniform, vec2<f32>, read> = access %x_24, 0u
-    %114:vec2<f32> = load %113
-    %115:vec2<f32> = div %112, %114
-    store %pos, %115
-    %116:vec2<f32> = load %pos
-    store %param_6, %116
+    %132:vec4<f32> = load %gl_FragCoord
+    %133:vec2<f32> = swizzle %132, xy
+    %134:ptr<uniform, vec2<f32>, read> = access %x_24, 0u
+    %135:vec2<f32> = load %134
+    %136:vec2<f32> = div %133, %135
+    store %pos, %136
+    %137:vec2<f32> = load %pos
+    store %param_6, %137
     store %param_7, vec2<f32>(0.69999998807907104492f, 0.30000001192092895508f)
     store %param_8, vec2<f32>(0.5f, 0.89999997615814208984f)
     store %param_9, vec2<f32>(0.10000000149011611938f, 0.40000000596046447754f)
-    %x_69:i32 = call %pointInTriangle_vf2_vf2_vf2_vf2_, %param_6, %param_7, %param_8, %param_9
-    %118:bool = eq %x_69, 1i
-    if %118 [t: %b9, f: %b10] {  # if_5
-      %b9 = block {  # true
+    %138:i32 = call %pointInTriangle_vf2_vf2_vf2_vf2_, %param_6, %param_7, %param_8, %param_9
+    %x_69:i32 = let %138
+    %140:bool = eq %x_69, 1i
+    if %140 [t: $B9, f: $B10] {  # if_5
+      $B9: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_5
       }
-      %b10 = block {  # false
+      $B10: {  # false
         store %x_GLF_color, vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_5
       }
@@ -185,13 +207,13 @@
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b11 {
-  %b11 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B11: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %121:void = call %main_1
-    %122:vec4<f32> = load %x_GLF_color
-    %123:main_out = construct %122
-    ret %123
+    %143:void = call %main_1
+    %144:vec4<f32> = load %x_GLF_color
+    %145:main_out = construct %144
+    ret %145
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/0.wgsl.expected.ir.msl
index 05d44c5..d9beded 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/0.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,26 +8,30 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_24:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%cross2d_vf2_vf2_ = func(%a:ptr<function, vec2<f32>, read_write>, %b:ptr<function, vec2<f32>, read_write>):f32 -> %b2 {
-  %b2 = block {
-    %x_76:f32 = load_vector_element %a, 0u
-    %x_78:f32 = load_vector_element %b, 1u
-    %x_81:f32 = load_vector_element %b, 0u
-    %x_83:f32 = load_vector_element %a, 1u
-    %11:f32 = mul %x_76, %x_78
-    %12:f32 = mul %x_81, %x_83
-    %13:f32 = sub %11, %12
-    ret %13
+%cross2d_vf2_vf2_ = func(%a:ptr<function, vec2<f32>, read_write>, %b:ptr<function, vec2<f32>, read_write>):f32 {
+  $B2: {
+    %7:f32 = load_vector_element %a, 0u
+    %x_76:f32 = let %7
+    %9:f32 = load_vector_element %b, 1u
+    %x_78:f32 = let %9
+    %11:f32 = load_vector_element %b, 0u
+    %x_81:f32 = let %11
+    %13:f32 = load_vector_element %a, 1u
+    %x_83:f32 = let %13
+    %15:f32 = mul %x_76, %x_78
+    %16:f32 = mul %x_81, %x_83
+    %17:f32 = sub %15, %16
+    ret %17
   }
 }
-%pointInTriangle_vf2_vf2_vf2_vf2_ = func(%p:ptr<function, vec2<f32>, read_write>, %a_1:ptr<function, vec2<f32>, read_write>, %b_1:ptr<function, vec2<f32>, read_write>, %c:ptr<function, vec2<f32>, read_write>):i32 -> %b3 {
-  %b3 = block {
+%pointInTriangle_vf2_vf2_vf2_vf2_ = func(%p:ptr<function, vec2<f32>, read_write>, %a_1:ptr<function, vec2<f32>, read_write>, %b_1:ptr<function, vec2<f32>, read_write>, %c:ptr<function, vec2<f32>, read_write>):i32 {
+  $B3: {
     %pab:ptr<function, f32, read_write> = var
     %param:ptr<function, vec2<f32>, read_write> = var
     %param_1:ptr<function, vec2<f32>, read_write> = var
@@ -41,145 +45,188 @@
     %x_169:ptr<function, bool, read_write> = var
     %x_138_phi:ptr<function, bool, read_write> = var
     %x_170_phi:ptr<function, bool, read_write> = var
-    %x_88:f32 = load_vector_element %p, 0u
-    %x_90:f32 = load_vector_element %a_1, 0u
-    %x_93:f32 = load_vector_element %p, 1u
-    %x_95:f32 = load_vector_element %a_1, 1u
-    %x_99:f32 = load_vector_element %b_1, 0u
-    %x_100:f32 = load_vector_element %a_1, 0u
-    %x_103:f32 = load_vector_element %b_1, 1u
-    %x_104:f32 = load_vector_element %a_1, 1u
-    %40:f32 = sub %x_88, %x_90
-    %41:f32 = sub %x_93, %x_95
-    %42:vec2<f32> = construct %40, %41
-    store %param, %42
-    %43:f32 = sub %x_99, %x_100
-    %44:f32 = sub %x_103, %x_104
-    %45:vec2<f32> = construct %43, %44
-    store %param_1, %45
-    %x_107:f32 = call %cross2d_vf2_vf2_, %param, %param_1
-    store %pab, %x_107
-    %x_108:f32 = load_vector_element %p, 0u
-    %x_109:f32 = load_vector_element %b_1, 0u
-    %x_111:f32 = load_vector_element %p, 1u
-    %x_112:f32 = load_vector_element %b_1, 1u
-    %x_116:f32 = load_vector_element %c, 0u
-    %x_117:f32 = load_vector_element %b_1, 0u
-    %x_120:f32 = load_vector_element %c, 1u
-    %x_121:f32 = load_vector_element %b_1, 1u
-    %55:f32 = sub %x_108, %x_109
-    %56:f32 = sub %x_111, %x_112
+    %36:f32 = load_vector_element %p, 0u
+    %x_88:f32 = let %36
+    %38:f32 = load_vector_element %a_1, 0u
+    %x_90:f32 = let %38
+    %40:f32 = load_vector_element %p, 1u
+    %x_93:f32 = let %40
+    %42:f32 = load_vector_element %a_1, 1u
+    %x_95:f32 = let %42
+    %44:f32 = load_vector_element %b_1, 0u
+    %x_99:f32 = let %44
+    %46:f32 = load_vector_element %a_1, 0u
+    %x_100:f32 = let %46
+    %48:f32 = load_vector_element %b_1, 1u
+    %x_103:f32 = let %48
+    %50:f32 = load_vector_element %a_1, 1u
+    %x_104:f32 = let %50
+    %52:f32 = sub %x_88, %x_90
+    %53:f32 = sub %x_93, %x_95
+    %54:vec2<f32> = construct %52, %53
+    store %param, %54
+    %55:f32 = sub %x_99, %x_100
+    %56:f32 = sub %x_103, %x_104
     %57:vec2<f32> = construct %55, %56
-    store %param_2, %57
-    %58:f32 = sub %x_116, %x_117
-    %59:f32 = sub %x_120, %x_121
-    %60:vec2<f32> = construct %58, %59
-    store %param_3, %60
-    %x_124:f32 = call %cross2d_vf2_vf2_, %param_2, %param_3
+    store %param_1, %57
+    %58:f32 = call %cross2d_vf2_vf2_, %param, %param_1
+    %x_107:f32 = let %58
+    store %pab, %x_107
+    %60:f32 = load_vector_element %p, 0u
+    %x_108:f32 = let %60
+    %62:f32 = load_vector_element %b_1, 0u
+    %x_109:f32 = let %62
+    %64:f32 = load_vector_element %p, 1u
+    %x_111:f32 = let %64
+    %66:f32 = load_vector_element %b_1, 1u
+    %x_112:f32 = let %66
+    %68:f32 = load_vector_element %c, 0u
+    %x_116:f32 = let %68
+    %70:f32 = load_vector_element %b_1, 0u
+    %x_117:f32 = let %70
+    %72:f32 = load_vector_element %c, 1u
+    %x_120:f32 = let %72
+    %74:f32 = load_vector_element %b_1, 1u
+    %x_121:f32 = let %74
+    %76:f32 = sub %x_108, %x_109
+    %77:f32 = sub %x_111, %x_112
+    %78:vec2<f32> = construct %76, %77
+    store %param_2, %78
+    %79:f32 = sub %x_116, %x_117
+    %80:f32 = sub %x_120, %x_121
+    %81:vec2<f32> = construct %79, %80
+    store %param_3, %81
+    %82:f32 = call %cross2d_vf2_vf2_, %param_2, %param_3
+    %x_124:f32 = let %82
     store %pbc, %x_124
-    %x_125:f32 = load %pab
-    %x_127:f32 = load %pbc
-    %64:bool = lt %x_125, 0.0f
-    %65:bool = lt %x_127, 0.0f
-    %x_129:bool = and %64, %65
+    %84:f32 = load %pab
+    %x_125:f32 = let %84
+    %86:f32 = load %pbc
+    %x_127:f32 = let %86
+    %88:bool = lt %x_125, 0.0f
+    %89:bool = lt %x_127, 0.0f
+    %90:bool = and %88, %89
+    %x_129:bool = let %90
     store %x_138_phi, %x_129
-    %67:bool = eq %x_129, false
-    if %67 [t: %b4] {  # if_1
-      %b4 = block {  # true
-        %x_133:f32 = load %pab
-        %x_135:f32 = load %pbc
-        %70:bool = gte %x_133, 0.0f
-        %71:bool = gte %x_135, 0.0f
-        %72:bool = and %70, %71
-        store %x_137, %72
-        %73:bool = load %x_137
-        store %x_138_phi, %73
+    %92:bool = eq %x_129, false
+    if %92 [t: $B4] {  # if_1
+      $B4: {  # true
+        %93:f32 = load %pab
+        %x_133:f32 = let %93
+        %95:f32 = load %pbc
+        %x_135:f32 = let %95
+        %97:bool = gte %x_133, 0.0f
+        %98:bool = gte %x_135, 0.0f
+        %99:bool = and %97, %98
+        store %x_137, %99
+        %100:bool = load %x_137
+        store %x_138_phi, %100
         exit_if  # if_1
       }
     }
-    %x_138:bool = load %x_138_phi
-    %75:bool = eq %x_138, false
-    if %75 [t: %b5] {  # if_2
-      %b5 = block {  # true
+    %101:bool = load %x_138_phi
+    %x_138:bool = let %101
+    %103:bool = eq %x_138, false
+    if %103 [t: $B5] {  # if_2
+      $B5: {  # true
         ret 0i
       }
     }
-    %x_142:f32 = load_vector_element %p, 0u
-    %x_143:f32 = load_vector_element %c, 0u
-    %x_145:f32 = load_vector_element %p, 1u
-    %x_146:f32 = load_vector_element %c, 1u
-    %x_149:f32 = load_vector_element %a_1, 0u
-    %x_150:f32 = load_vector_element %c, 0u
-    %x_152:f32 = load_vector_element %a_1, 1u
-    %x_153:f32 = load_vector_element %c, 1u
-    %84:f32 = sub %x_142, %x_143
-    %85:f32 = sub %x_145, %x_146
-    %86:vec2<f32> = construct %84, %85
-    store %param_4, %86
-    %87:f32 = sub %x_149, %x_150
-    %88:f32 = sub %x_152, %x_153
-    %89:vec2<f32> = construct %87, %88
-    store %param_5, %89
-    %x_156:f32 = call %cross2d_vf2_vf2_, %param_4, %param_5
+    %104:f32 = load_vector_element %p, 0u
+    %x_142:f32 = let %104
+    %106:f32 = load_vector_element %c, 0u
+    %x_143:f32 = let %106
+    %108:f32 = load_vector_element %p, 1u
+    %x_145:f32 = let %108
+    %110:f32 = load_vector_element %c, 1u
+    %x_146:f32 = let %110
+    %112:f32 = load_vector_element %a_1, 0u
+    %x_149:f32 = let %112
+    %114:f32 = load_vector_element %c, 0u
+    %x_150:f32 = let %114
+    %116:f32 = load_vector_element %a_1, 1u
+    %x_152:f32 = let %116
+    %118:f32 = load_vector_element %c, 1u
+    %x_153:f32 = let %118
+    %120:f32 = sub %x_142, %x_143
+    %121:f32 = sub %x_145, %x_146
+    %122:vec2<f32> = construct %120, %121
+    store %param_4, %122
+    %123:f32 = sub %x_149, %x_150
+    %124:f32 = sub %x_152, %x_153
+    %125:vec2<f32> = construct %123, %124
+    store %param_5, %125
+    %126:f32 = call %cross2d_vf2_vf2_, %param_4, %param_5
+    %x_156:f32 = let %126
     store %pca, %x_156
-    %x_157:f32 = load %pab
-    %x_159:f32 = load %pca
-    %93:bool = lt %x_157, 0.0f
-    %94:bool = lt %x_159, 0.0f
-    %x_161:bool = and %93, %94
+    %128:f32 = load %pab
+    %x_157:f32 = let %128
+    %130:f32 = load %pca
+    %x_159:f32 = let %130
+    %132:bool = lt %x_157, 0.0f
+    %133:bool = lt %x_159, 0.0f
+    %134:bool = and %132, %133
+    %x_161:bool = let %134
     store %x_170_phi, %x_161
-    %96:bool = eq %x_161, false
-    if %96 [t: %b6] {  # if_3
-      %b6 = block {  # true
-        %x_165:f32 = load %pab
-        %x_167:f32 = load %pca
-        %99:bool = gte %x_165, 0.0f
-        %100:bool = gte %x_167, 0.0f
-        %101:bool = and %99, %100
-        store %x_169, %101
-        %102:bool = load %x_169
-        store %x_170_phi, %102
+    %136:bool = eq %x_161, false
+    if %136 [t: $B6] {  # if_3
+      $B6: {  # true
+        %137:f32 = load %pab
+        %x_165:f32 = let %137
+        %139:f32 = load %pca
+        %x_167:f32 = let %139
+        %141:bool = gte %x_165, 0.0f
+        %142:bool = gte %x_167, 0.0f
+        %143:bool = and %141, %142
+        store %x_169, %143
+        %144:bool = load %x_169
+        store %x_170_phi, %144
         exit_if  # if_3
       }
     }
-    %x_170:bool = load %x_170_phi
-    %104:bool = eq %x_170, false
-    if %104 [t: %b7] {  # if_4
-      %b7 = block {  # true
+    %145:bool = load %x_170_phi
+    %x_170:bool = let %145
+    %147:bool = eq %x_170, false
+    if %147 [t: $B7] {  # if_4
+      $B7: {  # true
         ret 0i
       }
     }
     ret 1i
   }
 }
-%main_1 = func():void -> %b8 {
-  %b8 = block {
+%main_1 = func():void {
+  $B8: {
     %pos:ptr<function, vec2<f32>, read_write> = var
     %param_6:ptr<function, vec2<f32>, read_write> = var
     %param_7:ptr<function, vec2<f32>, read_write> = var
     %param_8:ptr<function, vec2<f32>, read_write> = var
     %param_9:ptr<function, vec2<f32>, read_write> = var
-    %x_63:vec4<f32> = load %gl_FragCoord
-    %112:ptr<uniform, vec2<f32>, read> = access %x_24, 0u
-    %x_66:vec2<f32> = load %112
-    %114:f32 = access %x_63, 0u
-    %115:f32 = access %x_63, 1u
-    %116:vec2<f32> = construct %114, %115
-    %117:vec2<f32> = div %116, %x_66
-    store %pos, %117
-    %x_68:vec2<f32> = load %pos
+    %154:vec4<f32> = load %gl_FragCoord
+    %x_63:vec4<f32> = let %154
+    %156:ptr<uniform, vec2<f32>, read> = access %x_24, 0u
+    %157:vec2<f32> = load %156
+    %x_66:vec2<f32> = let %157
+    %159:f32 = access %x_63, 0u
+    %160:f32 = access %x_63, 1u
+    %161:vec2<f32> = construct %159, %160
+    %162:vec2<f32> = div %161, %x_66
+    store %pos, %162
+    %163:vec2<f32> = load %pos
+    %x_68:vec2<f32> = let %163
     store %param_6, %x_68
     store %param_7, vec2<f32>(0.69999998807907104492f, 0.30000001192092895508f)
     store %param_8, vec2<f32>(0.5f, 0.89999997615814208984f)
     store %param_9, vec2<f32>(0.10000000149011611938f, 0.40000000596046447754f)
-    %x_69:i32 = call %pointInTriangle_vf2_vf2_vf2_vf2_, %param_6, %param_7, %param_8, %param_9
-    %120:bool = eq %x_69, 1i
-    if %120 [t: %b9, f: %b10] {  # if_5
-      %b9 = block {  # true
+    %165:i32 = call %pointInTriangle_vf2_vf2_vf2_vf2_, %param_6, %param_7, %param_8, %param_9
+    %x_69:i32 = let %165
+    %167:bool = eq %x_69, 1i
+    if %167 [t: $B9, f: $B10] {  # if_5
+      $B9: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_5
       }
-      %b10 = block {  # false
+      $B10: {  # false
         store %x_GLF_color, vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_5
       }
@@ -187,13 +234,13 @@
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b11 {
-  %b11 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B11: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %123:void = call %main_1
-    %124:vec4<f32> = load %x_GLF_color
-    %125:main_out = construct %124
-    ret %125
+    %170:void = call %main_1
+    %171:vec4<f32> = load %x_GLF_color
+    %172:main_out = construct %171
+    ret %172
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/1.spvasm.expected.ir.msl
index 56771a3..a537593 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/1.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,26 +8,30 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_15:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%cross2d_vf2_vf2_ = func(%a:ptr<function, vec2<f32>, read_write>, %b:ptr<function, vec2<f32>, read_write>):f32 -> %b2 {
-  %b2 = block {
-    %x_85:f32 = load_vector_element %a, 0u
-    %x_87:f32 = load_vector_element %b, 1u
-    %x_90:f32 = load_vector_element %b, 0u
-    %x_92:f32 = load_vector_element %a, 1u
-    %11:f32 = mul %x_85, %x_87
-    %12:f32 = mul %x_90, %x_92
-    %13:f32 = sub %11, %12
-    ret %13
+%cross2d_vf2_vf2_ = func(%a:ptr<function, vec2<f32>, read_write>, %b:ptr<function, vec2<f32>, read_write>):f32 {
+  $B2: {
+    %7:f32 = load_vector_element %a, 0u
+    %x_85:f32 = let %7
+    %9:f32 = load_vector_element %b, 1u
+    %x_87:f32 = let %9
+    %11:f32 = load_vector_element %b, 0u
+    %x_90:f32 = let %11
+    %13:f32 = load_vector_element %a, 1u
+    %x_92:f32 = let %13
+    %15:f32 = mul %x_85, %x_87
+    %16:f32 = mul %x_90, %x_92
+    %17:f32 = sub %15, %16
+    ret %17
   }
 }
-%pointInTriangle_vf2_vf2_vf2_vf2_ = func(%p:ptr<function, vec2<f32>, read_write>, %a_1:ptr<function, vec2<f32>, read_write>, %b_1:ptr<function, vec2<f32>, read_write>, %c:ptr<function, vec2<f32>, read_write>):i32 -> %b3 {
-  %b3 = block {
+%pointInTriangle_vf2_vf2_vf2_vf2_ = func(%p:ptr<function, vec2<f32>, read_write>, %a_1:ptr<function, vec2<f32>, read_write>, %b_1:ptr<function, vec2<f32>, read_write>, %c:ptr<function, vec2<f32>, read_write>):i32 {
+  $B3: {
     %var_y:ptr<function, f32, read_write> = var
     %x_96:ptr<function, f32, read_write> = var
     %x_97:ptr<function, f32, read_write> = var
@@ -45,183 +49,205 @@
     %x_174:ptr<function, bool, read_write> = var
     %x_205:ptr<function, bool, read_write> = var
     %x_206:ptr<function, bool, read_write> = var
-    %36:ptr<uniform, vec2<f32>, read> = access %x_15, 0u
-    %37:f32 = load_vector_element %36, 0u
-    %38:ptr<uniform, vec2<f32>, read> = access %x_15, 0u
-    %39:f32 = load_vector_element %38, 1u
-    %40:bool = eq %37, %39
-    if %40 [t: %b4, f: %b5] {  # if_1
-      %b4 = block {  # true
-        %x_107:f32 = load_vector_element %c, 1u
-        %x_108:vec2<f32> = construct 0.0f, %x_107
-        if true [t: %b6, f: %b7] {  # if_2
-          %b6 = block {  # true
-            %43:f32 = load_vector_element %c, 1u
-            store %x_97, %43
+    %40:ptr<uniform, vec2<f32>, read> = access %x_15, 0u
+    %41:f32 = load_vector_element %40, 0u
+    %42:ptr<uniform, vec2<f32>, read> = access %x_15, 0u
+    %43:f32 = load_vector_element %42, 1u
+    %44:bool = eq %41, %43
+    if %44 [t: $B4, f: $B5] {  # if_1
+      $B4: {  # true
+        %45:f32 = load_vector_element %c, 1u
+        %x_107:f32 = let %45
+        %47:vec2<f32> = construct 0.0f, %x_107
+        %x_108:vec2<f32> = let %47
+        if true [t: $B6, f: $B7] {  # if_2
+          $B6: {  # true
+            %49:f32 = load_vector_element %c, 1u
+            store %x_97, %49
             exit_if  # if_2
           }
-          %b7 = block {  # false
+          $B7: {  # false
             store %x_97, 1.0f
             exit_if  # if_2
           }
         }
-        %44:f32 = load %x_97
-        %45:f32 = load_vector_element %c, 1u
-        %46:f32 = max %44, %45
-        %x_116:vec2<f32> = construct 1.0f, %46
-        %x_117:vec2<f32> = swizzle %x_108, xy
+        %50:f32 = load %x_97
+        %51:f32 = load_vector_element %c, 1u
+        %52:f32 = max %50, %51
+        %53:vec2<f32> = construct 1.0f, %52
+        %x_116:vec2<f32> = let %53
+        %55:vec2<f32> = swizzle %x_108, xy
+        %x_117:vec2<f32> = let %55
         store %x_96, %x_107
         exit_if  # if_1
       }
-      %b5 = block {  # false
+      $B5: {  # false
         store %x_96, -1.0f
         exit_if  # if_1
       }
     }
-    %49:f32 = load %x_96
-    store %var_y, %49
-    %50:f32 = load_vector_element %c, 1u
-    %51:f32 = load_vector_element %c, 1u
-    %52:f32 = load %var_y
-    %53:f32 = clamp %50, %51, %52
-    store %clamp_y, %53
-    %x_136:f32 = load_vector_element %b_1, 0u
-    %x_137:f32 = load_vector_element %a_1, 0u
-    %x_140:f32 = load_vector_element %b_1, 1u
-    %x_141:f32 = load_vector_element %a_1, 1u
-    %58:f32 = load_vector_element %p, 0u
-    %59:f32 = load_vector_element %a_1, 0u
-    %60:f32 = sub %58, %59
-    %61:f32 = load_vector_element %p, 1u
-    %62:f32 = load_vector_element %a_1, 1u
-    %63:f32 = sub %61, %62
-    %64:vec2<f32> = construct %60, %63
-    store %param, %64
-    %65:f32 = sub %x_136, %x_137
-    %66:f32 = sub %x_140, %x_141
-    %67:vec2<f32> = construct %65, %66
-    store %param_1, %67
-    %x_144:f32 = call %cross2d_vf2_vf2_, %param, %param_1
-    store %pab, %x_144
-    %x_153:f32 = load_vector_element %c, 0u
-    %x_154:f32 = load_vector_element %b_1, 0u
-    %x_156:f32 = load %clamp_y
-    %x_157:f32 = load_vector_element %b_1, 1u
-    %73:f32 = load_vector_element %p, 0u
-    %74:f32 = load_vector_element %b_1, 0u
+    %57:f32 = load %x_96
+    store %var_y, %57
+    %58:f32 = load_vector_element %c, 1u
+    %59:f32 = load_vector_element %c, 1u
+    %60:f32 = load %var_y
+    %61:f32 = clamp %58, %59, %60
+    store %clamp_y, %61
+    %62:f32 = load_vector_element %b_1, 0u
+    %x_136:f32 = let %62
+    %64:f32 = load_vector_element %a_1, 0u
+    %x_137:f32 = let %64
+    %66:f32 = load_vector_element %b_1, 1u
+    %x_140:f32 = let %66
+    %68:f32 = load_vector_element %a_1, 1u
+    %x_141:f32 = let %68
+    %70:f32 = load_vector_element %p, 0u
+    %71:f32 = load_vector_element %a_1, 0u
+    %72:f32 = sub %70, %71
+    %73:f32 = load_vector_element %p, 1u
+    %74:f32 = load_vector_element %a_1, 1u
     %75:f32 = sub %73, %74
-    %76:f32 = load_vector_element %p, 1u
-    %77:f32 = load_vector_element %b_1, 1u
-    %78:f32 = sub %76, %77
-    %79:vec2<f32> = construct %75, %78
-    store %param_2, %79
-    %80:f32 = sub %x_153, %x_154
-    %81:f32 = sub %x_156, %x_157
-    %82:vec2<f32> = construct %80, %81
-    store %param_3, %82
-    %x_160:f32 = call %cross2d_vf2_vf2_, %param_2, %param_3
+    %76:vec2<f32> = construct %72, %75
+    store %param, %76
+    %77:f32 = sub %x_136, %x_137
+    %78:f32 = sub %x_140, %x_141
+    %79:vec2<f32> = construct %77, %78
+    store %param_1, %79
+    %80:f32 = call %cross2d_vf2_vf2_, %param, %param_1
+    %x_144:f32 = let %80
+    store %pab, %x_144
+    %82:f32 = load_vector_element %c, 0u
+    %x_153:f32 = let %82
+    %84:f32 = load_vector_element %b_1, 0u
+    %x_154:f32 = let %84
+    %86:f32 = load %clamp_y
+    %x_156:f32 = let %86
+    %88:f32 = load_vector_element %b_1, 1u
+    %x_157:f32 = let %88
+    %90:f32 = load_vector_element %p, 0u
+    %91:f32 = load_vector_element %b_1, 0u
+    %92:f32 = sub %90, %91
+    %93:f32 = load_vector_element %p, 1u
+    %94:f32 = load_vector_element %b_1, 1u
+    %95:f32 = sub %93, %94
+    %96:vec2<f32> = construct %92, %95
+    store %param_2, %96
+    %97:f32 = sub %x_153, %x_154
+    %98:f32 = sub %x_156, %x_157
+    %99:vec2<f32> = construct %97, %98
+    store %param_3, %99
+    %100:f32 = call %cross2d_vf2_vf2_, %param_2, %param_3
+    %x_160:f32 = let %100
     store %pbc, %x_160
-    %84:f32 = load %pab
-    %85:bool = lt %84, 0.0f
-    %86:f32 = load %pbc
-    %87:bool = lt %86, 0.0f
-    %x_165:bool = and %85, %87
+    %102:f32 = load %pab
+    %103:bool = lt %102, 0.0f
+    %104:f32 = load %pbc
+    %105:bool = lt %104, 0.0f
+    %106:bool = and %103, %105
+    %x_165:bool = let %106
     store %x_174, %x_165
-    %89:bool = eq %x_165, false
-    if %89 [t: %b8] {  # if_3
-      %b8 = block {  # true
-        %90:f32 = load %pab
-        %91:bool = gte %90, 0.0f
-        %92:f32 = load %pbc
-        %93:bool = gte %92, 0.0f
-        %94:bool = and %91, %93
-        store %x_173, %94
-        %95:bool = load %x_173
-        store %x_174, %95
+    %108:bool = eq %x_165, false
+    if %108 [t: $B8] {  # if_3
+      $B8: {  # true
+        %109:f32 = load %pab
+        %110:bool = gte %109, 0.0f
+        %111:f32 = load %pbc
+        %112:bool = gte %111, 0.0f
+        %113:bool = and %110, %112
+        store %x_173, %113
+        %114:bool = load %x_173
+        store %x_174, %114
         exit_if  # if_3
       }
     }
-    %96:bool = load %x_174
-    %97:bool = eq %96, false
-    if %97 [t: %b9] {  # if_4
-      %b9 = block {  # true
+    %115:bool = load %x_174
+    %116:bool = eq %115, false
+    if %116 [t: $B9] {  # if_4
+      $B9: {  # true
         ret 0i
       }
     }
-    %x_185:f32 = load_vector_element %a_1, 0u
-    %x_186:f32 = load_vector_element %c, 0u
-    %x_188:f32 = load_vector_element %a_1, 1u
-    %x_189:f32 = load_vector_element %c, 1u
-    %102:f32 = load_vector_element %p, 0u
-    %103:f32 = load_vector_element %c, 0u
-    %104:f32 = sub %102, %103
-    %105:f32 = load_vector_element %p, 1u
-    %106:f32 = load_vector_element %c, 1u
-    %107:f32 = sub %105, %106
-    %108:vec2<f32> = construct %104, %107
-    store %param_4, %108
-    %109:f32 = sub %x_185, %x_186
-    %110:f32 = sub %x_188, %x_189
-    %111:vec2<f32> = construct %109, %110
-    store %param_5, %111
-    %x_192:f32 = call %cross2d_vf2_vf2_, %param_4, %param_5
+    %117:f32 = load_vector_element %a_1, 0u
+    %x_185:f32 = let %117
+    %119:f32 = load_vector_element %c, 0u
+    %x_186:f32 = let %119
+    %121:f32 = load_vector_element %a_1, 1u
+    %x_188:f32 = let %121
+    %123:f32 = load_vector_element %c, 1u
+    %x_189:f32 = let %123
+    %125:f32 = load_vector_element %p, 0u
+    %126:f32 = load_vector_element %c, 0u
+    %127:f32 = sub %125, %126
+    %128:f32 = load_vector_element %p, 1u
+    %129:f32 = load_vector_element %c, 1u
+    %130:f32 = sub %128, %129
+    %131:vec2<f32> = construct %127, %130
+    store %param_4, %131
+    %132:f32 = sub %x_185, %x_186
+    %133:f32 = sub %x_188, %x_189
+    %134:vec2<f32> = construct %132, %133
+    store %param_5, %134
+    %135:f32 = call %cross2d_vf2_vf2_, %param_4, %param_5
+    %x_192:f32 = let %135
     store %pca, %x_192
-    %113:f32 = load %pab
-    %114:bool = lt %113, 0.0f
-    %115:f32 = load %pca
-    %116:bool = lt %115, 0.0f
-    %x_197:bool = and %114, %116
+    %137:f32 = load %pab
+    %138:bool = lt %137, 0.0f
+    %139:f32 = load %pca
+    %140:bool = lt %139, 0.0f
+    %141:bool = and %138, %140
+    %x_197:bool = let %141
     store %x_206, %x_197
-    %118:bool = eq %x_197, false
-    if %118 [t: %b10] {  # if_5
-      %b10 = block {  # true
-        %119:f32 = load %pab
-        %120:bool = gte %119, 0.0f
-        %121:f32 = load %pca
-        %122:bool = gte %121, 0.0f
-        %123:bool = and %120, %122
-        store %x_205, %123
-        %124:bool = load %x_205
-        store %x_206, %124
+    %143:bool = eq %x_197, false
+    if %143 [t: $B10] {  # if_5
+      $B10: {  # true
+        %144:f32 = load %pab
+        %145:bool = gte %144, 0.0f
+        %146:f32 = load %pca
+        %147:bool = gte %146, 0.0f
+        %148:bool = and %145, %147
+        store %x_205, %148
+        %149:bool = load %x_205
+        store %x_206, %149
         exit_if  # if_5
       }
     }
-    %125:bool = load %x_206
-    %126:bool = eq %125, false
-    if %126 [t: %b11] {  # if_6
-      %b11 = block {  # true
+    %150:bool = load %x_206
+    %151:bool = eq %150, false
+    if %151 [t: $B11] {  # if_6
+      $B11: {  # true
         ret 0i
       }
     }
     ret 1i
   }
 }
-%main_1 = func():void -> %b12 {
-  %b12 = block {
+%main_1 = func():void {
+  $B12: {
     %pos:ptr<function, vec2<f32>, read_write> = var
     %param_6:ptr<function, vec2<f32>, read_write> = var
     %param_7:ptr<function, vec2<f32>, read_write> = var
     %param_8:ptr<function, vec2<f32>, read_write> = var
     %param_9:ptr<function, vec2<f32>, read_write> = var
-    %133:vec4<f32> = load %gl_FragCoord
-    %134:vec2<f32> = swizzle %133, xy
-    %135:ptr<uniform, vec2<f32>, read> = access %x_15, 0u
-    %136:vec2<f32> = load %135
-    %137:vec2<f32> = div %134, %136
-    store %pos, %137
-    %138:vec2<f32> = load %pos
-    store %param_6, %138
+    %158:vec4<f32> = load %gl_FragCoord
+    %159:vec2<f32> = swizzle %158, xy
+    %160:ptr<uniform, vec2<f32>, read> = access %x_15, 0u
+    %161:vec2<f32> = load %160
+    %162:vec2<f32> = div %159, %161
+    store %pos, %162
+    %163:vec2<f32> = load %pos
+    store %param_6, %163
     store %param_7, vec2<f32>(0.69999998807907104492f, 0.30000001192092895508f)
     store %param_8, vec2<f32>(0.5f, 0.89999997615814208984f)
     store %param_9, vec2<f32>(0.10000000149011611938f, 0.40000000596046447754f)
-    %x_78:i32 = call %pointInTriangle_vf2_vf2_vf2_vf2_, %param_6, %param_7, %param_8, %param_9
-    %140:bool = eq %x_78, 1i
-    if %140 [t: %b13, f: %b14] {  # if_7
-      %b13 = block {  # true
+    %164:i32 = call %pointInTriangle_vf2_vf2_vf2_vf2_, %param_6, %param_7, %param_8, %param_9
+    %x_78:i32 = let %164
+    %166:bool = eq %x_78, 1i
+    if %166 [t: $B13, f: $B14] {  # if_7
+      $B13: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_7
       }
-      %b14 = block {  # false
+      $B14: {  # false
         store %x_GLF_color, vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_7
       }
@@ -229,13 +255,13 @@
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b15 {
-  %b15 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B15: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %143:void = call %main_1
-    %144:vec4<f32> = load %x_GLF_color
-    %145:main_out = construct %144
-    ret %145
+    %169:void = call %main_1
+    %170:vec4<f32> = load %x_GLF_color
+    %171:main_out = construct %170
+    ret %171
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/1.wgsl.expected.ir.msl
index cfc7833..cbdb59a 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/1.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/1.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,26 +8,30 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_15:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%cross2d_vf2_vf2_ = func(%a:ptr<function, vec2<f32>, read_write>, %b:ptr<function, vec2<f32>, read_write>):f32 -> %b2 {
-  %b2 = block {
-    %x_85:f32 = load_vector_element %a, 0u
-    %x_87:f32 = load_vector_element %b, 1u
-    %x_90:f32 = load_vector_element %b, 0u
-    %x_92:f32 = load_vector_element %a, 1u
-    %11:f32 = mul %x_85, %x_87
-    %12:f32 = mul %x_90, %x_92
-    %13:f32 = sub %11, %12
-    ret %13
+%cross2d_vf2_vf2_ = func(%a:ptr<function, vec2<f32>, read_write>, %b:ptr<function, vec2<f32>, read_write>):f32 {
+  $B2: {
+    %7:f32 = load_vector_element %a, 0u
+    %x_85:f32 = let %7
+    %9:f32 = load_vector_element %b, 1u
+    %x_87:f32 = let %9
+    %11:f32 = load_vector_element %b, 0u
+    %x_90:f32 = let %11
+    %13:f32 = load_vector_element %a, 1u
+    %x_92:f32 = let %13
+    %15:f32 = mul %x_85, %x_87
+    %16:f32 = mul %x_90, %x_92
+    %17:f32 = sub %15, %16
+    ret %17
   }
 }
-%pointInTriangle_vf2_vf2_vf2_vf2_ = func(%p:ptr<function, vec2<f32>, read_write>, %a_1:ptr<function, vec2<f32>, read_write>, %b_1:ptr<function, vec2<f32>, read_write>, %c:ptr<function, vec2<f32>, read_write>):i32 -> %b3 {
-  %b3 = block {
+%pointInTriangle_vf2_vf2_vf2_vf2_ = func(%p:ptr<function, vec2<f32>, read_write>, %a_1:ptr<function, vec2<f32>, read_write>, %b_1:ptr<function, vec2<f32>, read_write>, %c:ptr<function, vec2<f32>, read_write>):i32 {
+  $B3: {
     %var_y:ptr<function, f32, read_write> = var
     %x_96:ptr<function, f32, read_write> = var
     %x_97:ptr<function, f32, read_write> = var
@@ -45,187 +49,243 @@
     %x_205:ptr<function, bool, read_write> = var
     %x_174_phi:ptr<function, bool, read_write> = var
     %x_206_phi:ptr<function, bool, read_write> = var
-    %36:ptr<uniform, vec2<f32>, read> = access %x_15, 0u
-    %x_99:f32 = load_vector_element %36, 0u
-    %38:ptr<uniform, vec2<f32>, read> = access %x_15, 0u
-    %x_101:f32 = load_vector_element %38, 1u
-    %40:bool = eq %x_99, %x_101
-    if %40 [t: %b4, f: %b5] {  # if_1
-      %b4 = block {  # true
-        %x_107:f32 = load_vector_element %c, 1u
-        %x_108:vec2<f32> = construct 0.0f, %x_107
-        if true [t: %b6, f: %b7] {  # if_2
-          %b6 = block {  # true
-            %x_112:f32 = load_vector_element %c, 1u
+    %40:ptr<uniform, vec2<f32>, read> = access %x_15, 0u
+    %41:f32 = load_vector_element %40, 0u
+    %x_99:f32 = let %41
+    %43:ptr<uniform, vec2<f32>, read> = access %x_15, 0u
+    %44:f32 = load_vector_element %43, 1u
+    %x_101:f32 = let %44
+    %46:bool = eq %x_99, %x_101
+    if %46 [t: $B4, f: $B5] {  # if_1
+      $B4: {  # true
+        %47:f32 = load_vector_element %c, 1u
+        %x_107:f32 = let %47
+        %49:vec2<f32> = construct 0.0f, %x_107
+        %x_108:vec2<f32> = let %49
+        if true [t: $B6, f: $B7] {  # if_2
+          $B6: {  # true
+            %51:f32 = load_vector_element %c, 1u
+            %x_112:f32 = let %51
             store %x_97, %x_112
             exit_if  # if_2
           }
-          %b7 = block {  # false
+          $B7: {  # false
             store %x_97, 1.0f
             exit_if  # if_2
           }
         }
-        %x_113:f32 = load %x_97
-        %x_114:f32 = load_vector_element %c, 1u
-        %46:f32 = max %x_113, %x_114
-        %x_116:vec2<f32> = construct 1.0f, %46
-        %48:f32 = access %x_108, 0u
-        %49:f32 = access %x_108, 1u
-        %x_117:vec2<f32> = construct %48, %49
+        %53:f32 = load %x_97
+        %x_113:f32 = let %53
+        %55:f32 = load_vector_element %c, 1u
+        %x_114:f32 = let %55
+        %57:f32 = max %x_113, %x_114
+        %58:vec2<f32> = construct 1.0f, %57
+        %x_116:vec2<f32> = let %58
+        %60:f32 = access %x_108, 0u
+        %61:f32 = access %x_108, 1u
+        %62:vec2<f32> = construct %60, %61
+        %x_117:vec2<f32> = let %62
         store %x_96, %x_107
         exit_if  # if_1
       }
-      %b5 = block {  # false
+      $B5: {  # false
         store %x_96, -1.0f
         exit_if  # if_1
       }
     }
-    %x_118:f32 = load %x_96
+    %64:f32 = load %x_96
+    %x_118:f32 = let %64
     store %var_y, %x_118
-    %x_120:f32 = load_vector_element %c, 1u
-    %x_121:f32 = load_vector_element %c, 1u
-    %x_122:f32 = load %var_y
-    %55:f32 = clamp %x_120, %x_121, %x_122
-    store %clamp_y, %55
-    %x_125:f32 = load_vector_element %p, 0u
-    %x_127:f32 = load_vector_element %a_1, 0u
-    %x_130:f32 = load_vector_element %p, 1u
-    %x_132:f32 = load_vector_element %a_1, 1u
-    %x_136:f32 = load_vector_element %b_1, 0u
-    %x_137:f32 = load_vector_element %a_1, 0u
-    %x_140:f32 = load_vector_element %b_1, 1u
-    %x_141:f32 = load_vector_element %a_1, 1u
-    %64:f32 = sub %x_125, %x_127
-    %65:f32 = sub %x_130, %x_132
-    %66:vec2<f32> = construct %64, %65
-    store %param, %66
-    %67:f32 = sub %x_136, %x_137
-    %68:f32 = sub %x_140, %x_141
-    %69:vec2<f32> = construct %67, %68
-    store %param_1, %69
-    %x_144:f32 = call %cross2d_vf2_vf2_, %param, %param_1
+    %66:f32 = load_vector_element %c, 1u
+    %x_120:f32 = let %66
+    %68:f32 = load_vector_element %c, 1u
+    %x_121:f32 = let %68
+    %70:f32 = load %var_y
+    %x_122:f32 = let %70
+    %72:f32 = clamp %x_120, %x_121, %x_122
+    store %clamp_y, %72
+    %73:f32 = load_vector_element %p, 0u
+    %x_125:f32 = let %73
+    %75:f32 = load_vector_element %a_1, 0u
+    %x_127:f32 = let %75
+    %77:f32 = load_vector_element %p, 1u
+    %x_130:f32 = let %77
+    %79:f32 = load_vector_element %a_1, 1u
+    %x_132:f32 = let %79
+    %81:f32 = load_vector_element %b_1, 0u
+    %x_136:f32 = let %81
+    %83:f32 = load_vector_element %a_1, 0u
+    %x_137:f32 = let %83
+    %85:f32 = load_vector_element %b_1, 1u
+    %x_140:f32 = let %85
+    %87:f32 = load_vector_element %a_1, 1u
+    %x_141:f32 = let %87
+    %89:f32 = sub %x_125, %x_127
+    %90:f32 = sub %x_130, %x_132
+    %91:vec2<f32> = construct %89, %90
+    store %param, %91
+    %92:f32 = sub %x_136, %x_137
+    %93:f32 = sub %x_140, %x_141
+    %94:vec2<f32> = construct %92, %93
+    store %param_1, %94
+    %95:f32 = call %cross2d_vf2_vf2_, %param, %param_1
+    %x_144:f32 = let %95
     store %pab, %x_144
-    %x_145:f32 = load_vector_element %p, 0u
-    %x_146:f32 = load_vector_element %b_1, 0u
-    %x_148:f32 = load_vector_element %p, 1u
-    %x_149:f32 = load_vector_element %b_1, 1u
-    %x_153:f32 = load_vector_element %c, 0u
-    %x_154:f32 = load_vector_element %b_1, 0u
-    %x_156:f32 = load %clamp_y
-    %x_157:f32 = load_vector_element %b_1, 1u
-    %79:f32 = sub %x_145, %x_146
-    %80:f32 = sub %x_148, %x_149
-    %81:vec2<f32> = construct %79, %80
-    store %param_2, %81
-    %82:f32 = sub %x_153, %x_154
-    %83:f32 = sub %x_156, %x_157
-    %84:vec2<f32> = construct %82, %83
-    store %param_3, %84
-    %x_160:f32 = call %cross2d_vf2_vf2_, %param_2, %param_3
+    %97:f32 = load_vector_element %p, 0u
+    %x_145:f32 = let %97
+    %99:f32 = load_vector_element %b_1, 0u
+    %x_146:f32 = let %99
+    %101:f32 = load_vector_element %p, 1u
+    %x_148:f32 = let %101
+    %103:f32 = load_vector_element %b_1, 1u
+    %x_149:f32 = let %103
+    %105:f32 = load_vector_element %c, 0u
+    %x_153:f32 = let %105
+    %107:f32 = load_vector_element %b_1, 0u
+    %x_154:f32 = let %107
+    %109:f32 = load %clamp_y
+    %x_156:f32 = let %109
+    %111:f32 = load_vector_element %b_1, 1u
+    %x_157:f32 = let %111
+    %113:f32 = sub %x_145, %x_146
+    %114:f32 = sub %x_148, %x_149
+    %115:vec2<f32> = construct %113, %114
+    store %param_2, %115
+    %116:f32 = sub %x_153, %x_154
+    %117:f32 = sub %x_156, %x_157
+    %118:vec2<f32> = construct %116, %117
+    store %param_3, %118
+    %119:f32 = call %cross2d_vf2_vf2_, %param_2, %param_3
+    %x_160:f32 = let %119
     store %pbc, %x_160
-    %x_161:f32 = load %pab
-    %x_163:f32 = load %pbc
-    %88:bool = lt %x_161, 0.0f
-    %89:bool = lt %x_163, 0.0f
-    %x_165:bool = and %88, %89
+    %121:f32 = load %pab
+    %x_161:f32 = let %121
+    %123:f32 = load %pbc
+    %x_163:f32 = let %123
+    %125:bool = lt %x_161, 0.0f
+    %126:bool = lt %x_163, 0.0f
+    %127:bool = and %125, %126
+    %x_165:bool = let %127
     store %x_174_phi, %x_165
-    %91:bool = eq %x_165, false
-    if %91 [t: %b8] {  # if_3
-      %b8 = block {  # true
-        %x_169:f32 = load %pab
-        %x_171:f32 = load %pbc
-        %94:bool = gte %x_169, 0.0f
-        %95:bool = gte %x_171, 0.0f
-        %96:bool = and %94, %95
-        store %x_173, %96
-        %97:bool = load %x_173
-        store %x_174_phi, %97
+    %129:bool = eq %x_165, false
+    if %129 [t: $B8] {  # if_3
+      $B8: {  # true
+        %130:f32 = load %pab
+        %x_169:f32 = let %130
+        %132:f32 = load %pbc
+        %x_171:f32 = let %132
+        %134:bool = gte %x_169, 0.0f
+        %135:bool = gte %x_171, 0.0f
+        %136:bool = and %134, %135
+        store %x_173, %136
+        %137:bool = load %x_173
+        store %x_174_phi, %137
         exit_if  # if_3
       }
     }
-    %x_174:bool = load %x_174_phi
-    %99:bool = eq %x_174, false
-    if %99 [t: %b9] {  # if_4
-      %b9 = block {  # true
+    %138:bool = load %x_174_phi
+    %x_174:bool = let %138
+    %140:bool = eq %x_174, false
+    if %140 [t: $B9] {  # if_4
+      $B9: {  # true
         ret 0i
       }
     }
-    %x_178:f32 = load_vector_element %p, 0u
-    %x_179:f32 = load_vector_element %c, 0u
-    %x_181:f32 = load_vector_element %p, 1u
-    %x_182:f32 = load_vector_element %c, 1u
-    %x_185:f32 = load_vector_element %a_1, 0u
-    %x_186:f32 = load_vector_element %c, 0u
-    %x_188:f32 = load_vector_element %a_1, 1u
-    %x_189:f32 = load_vector_element %c, 1u
-    %108:f32 = sub %x_178, %x_179
-    %109:f32 = sub %x_181, %x_182
-    %110:vec2<f32> = construct %108, %109
-    store %param_4, %110
-    %111:f32 = sub %x_185, %x_186
-    %112:f32 = sub %x_188, %x_189
-    %113:vec2<f32> = construct %111, %112
-    store %param_5, %113
-    %x_192:f32 = call %cross2d_vf2_vf2_, %param_4, %param_5
+    %141:f32 = load_vector_element %p, 0u
+    %x_178:f32 = let %141
+    %143:f32 = load_vector_element %c, 0u
+    %x_179:f32 = let %143
+    %145:f32 = load_vector_element %p, 1u
+    %x_181:f32 = let %145
+    %147:f32 = load_vector_element %c, 1u
+    %x_182:f32 = let %147
+    %149:f32 = load_vector_element %a_1, 0u
+    %x_185:f32 = let %149
+    %151:f32 = load_vector_element %c, 0u
+    %x_186:f32 = let %151
+    %153:f32 = load_vector_element %a_1, 1u
+    %x_188:f32 = let %153
+    %155:f32 = load_vector_element %c, 1u
+    %x_189:f32 = let %155
+    %157:f32 = sub %x_178, %x_179
+    %158:f32 = sub %x_181, %x_182
+    %159:vec2<f32> = construct %157, %158
+    store %param_4, %159
+    %160:f32 = sub %x_185, %x_186
+    %161:f32 = sub %x_188, %x_189
+    %162:vec2<f32> = construct %160, %161
+    store %param_5, %162
+    %163:f32 = call %cross2d_vf2_vf2_, %param_4, %param_5
+    %x_192:f32 = let %163
     store %pca, %x_192
-    %x_193:f32 = load %pab
-    %x_195:f32 = load %pca
-    %117:bool = lt %x_193, 0.0f
-    %118:bool = lt %x_195, 0.0f
-    %x_197:bool = and %117, %118
+    %165:f32 = load %pab
+    %x_193:f32 = let %165
+    %167:f32 = load %pca
+    %x_195:f32 = let %167
+    %169:bool = lt %x_193, 0.0f
+    %170:bool = lt %x_195, 0.0f
+    %171:bool = and %169, %170
+    %x_197:bool = let %171
     store %x_206_phi, %x_197
-    %120:bool = eq %x_197, false
-    if %120 [t: %b10] {  # if_5
-      %b10 = block {  # true
-        %x_201:f32 = load %pab
-        %x_203:f32 = load %pca
-        %123:bool = gte %x_201, 0.0f
-        %124:bool = gte %x_203, 0.0f
-        %125:bool = and %123, %124
-        store %x_205, %125
-        %126:bool = load %x_205
-        store %x_206_phi, %126
+    %173:bool = eq %x_197, false
+    if %173 [t: $B10] {  # if_5
+      $B10: {  # true
+        %174:f32 = load %pab
+        %x_201:f32 = let %174
+        %176:f32 = load %pca
+        %x_203:f32 = let %176
+        %178:bool = gte %x_201, 0.0f
+        %179:bool = gte %x_203, 0.0f
+        %180:bool = and %178, %179
+        store %x_205, %180
+        %181:bool = load %x_205
+        store %x_206_phi, %181
         exit_if  # if_5
       }
     }
-    %x_206:bool = load %x_206_phi
-    %128:bool = eq %x_206, false
-    if %128 [t: %b11] {  # if_6
-      %b11 = block {  # true
+    %182:bool = load %x_206_phi
+    %x_206:bool = let %182
+    %184:bool = eq %x_206, false
+    if %184 [t: $B11] {  # if_6
+      $B11: {  # true
         ret 0i
       }
     }
     ret 1i
   }
 }
-%main_1 = func():void -> %b12 {
-  %b12 = block {
+%main_1 = func():void {
+  $B12: {
     %pos:ptr<function, vec2<f32>, read_write> = var
     %param_6:ptr<function, vec2<f32>, read_write> = var
     %param_7:ptr<function, vec2<f32>, read_write> = var
     %param_8:ptr<function, vec2<f32>, read_write> = var
     %param_9:ptr<function, vec2<f32>, read_write> = var
-    %x_72:vec4<f32> = load %gl_FragCoord
-    %136:ptr<uniform, vec2<f32>, read> = access %x_15, 0u
-    %x_75:vec2<f32> = load %136
-    %138:f32 = access %x_72, 0u
-    %139:f32 = access %x_72, 1u
-    %140:vec2<f32> = construct %138, %139
-    %141:vec2<f32> = div %140, %x_75
-    store %pos, %141
-    %x_77:vec2<f32> = load %pos
+    %191:vec4<f32> = load %gl_FragCoord
+    %x_72:vec4<f32> = let %191
+    %193:ptr<uniform, vec2<f32>, read> = access %x_15, 0u
+    %194:vec2<f32> = load %193
+    %x_75:vec2<f32> = let %194
+    %196:f32 = access %x_72, 0u
+    %197:f32 = access %x_72, 1u
+    %198:vec2<f32> = construct %196, %197
+    %199:vec2<f32> = div %198, %x_75
+    store %pos, %199
+    %200:vec2<f32> = load %pos
+    %x_77:vec2<f32> = let %200
     store %param_6, %x_77
     store %param_7, vec2<f32>(0.69999998807907104492f, 0.30000001192092895508f)
     store %param_8, vec2<f32>(0.5f, 0.89999997615814208984f)
     store %param_9, vec2<f32>(0.10000000149011611938f, 0.40000000596046447754f)
-    %x_78:i32 = call %pointInTriangle_vf2_vf2_vf2_vf2_, %param_6, %param_7, %param_8, %param_9
-    %144:bool = eq %x_78, 1i
-    if %144 [t: %b13, f: %b14] {  # if_7
-      %b13 = block {  # true
+    %202:i32 = call %pointInTriangle_vf2_vf2_vf2_vf2_, %param_6, %param_7, %param_8, %param_9
+    %x_78:i32 = let %202
+    %204:bool = eq %x_78, 1i
+    if %204 [t: $B13, f: $B14] {  # if_7
+      $B13: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_7
       }
-      %b14 = block {  # false
+      $B14: {  # false
         store %x_GLF_color, vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_7
       }
@@ -233,13 +293,13 @@
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b15 {
-  %b15 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B15: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %147:void = call %main_1
-    %148:vec4<f32> = load %x_GLF_color
-    %149:main_out = construct %148
-    ret %149
+    %207:void = call %main_1
+    %208:vec4<f32> = load %x_GLF_color
+    %209:main_out = construct %208
+    ret %209
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-triangle-nested-conditional-clamped-float/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-triangle-nested-conditional-clamped-float/0.spvasm.expected.ir.msl
index 877b119..ad324fc 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-triangle-nested-conditional-clamped-float/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/stable-triangle-nested-conditional-clamped-float/0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,26 +8,30 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_24:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%cross2d_vf2_vf2_ = func(%a:ptr<function, vec2<f32>, read_write>, %b:ptr<function, vec2<f32>, read_write>):f32 -> %b2 {
-  %b2 = block {
-    %x_76:f32 = load_vector_element %a, 0u
-    %x_78:f32 = load_vector_element %b, 1u
-    %x_81:f32 = load_vector_element %b, 0u
-    %x_83:f32 = load_vector_element %a, 1u
-    %11:f32 = mul %x_76, %x_78
-    %12:f32 = mul %x_81, %x_83
-    %13:f32 = sub %11, %12
-    ret %13
+%cross2d_vf2_vf2_ = func(%a:ptr<function, vec2<f32>, read_write>, %b:ptr<function, vec2<f32>, read_write>):f32 {
+  $B2: {
+    %7:f32 = load_vector_element %a, 0u
+    %x_76:f32 = let %7
+    %9:f32 = load_vector_element %b, 1u
+    %x_78:f32 = let %9
+    %11:f32 = load_vector_element %b, 0u
+    %x_81:f32 = let %11
+    %13:f32 = load_vector_element %a, 1u
+    %x_83:f32 = let %13
+    %15:f32 = mul %x_76, %x_78
+    %16:f32 = mul %x_81, %x_83
+    %17:f32 = sub %15, %16
+    ret %17
   }
 }
-%pointInTriangle_vf2_vf2_vf2_vf2_ = func(%p:ptr<function, vec2<f32>, read_write>, %a_1:ptr<function, vec2<f32>, read_write>, %b_1:ptr<function, vec2<f32>, read_write>, %c:ptr<function, vec2<f32>, read_write>):i32 -> %b3 {
-  %b3 = block {
+%pointInTriangle_vf2_vf2_vf2_vf2_ = func(%p:ptr<function, vec2<f32>, read_write>, %a_1:ptr<function, vec2<f32>, read_write>, %b_1:ptr<function, vec2<f32>, read_write>, %c:ptr<function, vec2<f32>, read_write>):i32 {
+  $B3: {
     %pab:ptr<function, f32, read_write> = var
     %param:ptr<function, vec2<f32>, read_write> = var
     %param_1:ptr<function, vec2<f32>, read_write> = var
@@ -41,143 +45,161 @@
     %x_146:ptr<function, bool, read_write> = var
     %x_185:ptr<function, bool, read_write> = var
     %x_186:ptr<function, bool, read_write> = var
-    %x_99:f32 = load_vector_element %b_1, 0u
-    %x_101:f32 = load_vector_element %a_1, 0u
-    %x_104:f32 = load_vector_element %b_1, 1u
-    %x_106:f32 = load_vector_element %a_1, 1u
-    %36:f32 = load_vector_element %p, 0u
-    %37:f32 = load_vector_element %a_1, 0u
-    %38:f32 = sub %36, %37
-    %39:f32 = load_vector_element %p, 1u
-    %40:f32 = load_vector_element %a_1, 1u
-    %41:f32 = sub %39, %40
-    %42:vec2<f32> = construct %38, %41
-    store %param, %42
-    %43:f32 = sub %x_99, %x_101
-    %44:f32 = sub %x_104, %x_106
-    %45:vec2<f32> = construct %43, %44
-    store %param_1, %45
-    %x_109:f32 = call %cross2d_vf2_vf2_, %param, %param_1
+    %36:f32 = load_vector_element %b_1, 0u
+    %x_99:f32 = let %36
+    %38:f32 = load_vector_element %a_1, 0u
+    %x_101:f32 = let %38
+    %40:f32 = load_vector_element %b_1, 1u
+    %x_104:f32 = let %40
+    %42:f32 = load_vector_element %a_1, 1u
+    %x_106:f32 = let %42
+    %44:f32 = load_vector_element %p, 0u
+    %45:f32 = load_vector_element %a_1, 0u
+    %46:f32 = sub %44, %45
+    %47:f32 = load_vector_element %p, 1u
+    %48:f32 = load_vector_element %a_1, 1u
+    %49:f32 = sub %47, %48
+    %50:vec2<f32> = construct %46, %49
+    store %param, %50
+    %51:f32 = sub %x_99, %x_101
+    %52:f32 = sub %x_104, %x_106
+    %53:vec2<f32> = construct %51, %52
+    store %param_1, %53
+    %54:f32 = call %cross2d_vf2_vf2_, %param, %param_1
+    %x_109:f32 = let %54
     store %pab, %x_109
-    %x_122:f32 = load_vector_element %c, 0u
-    %x_124:f32 = load_vector_element %b_1, 0u
-    %x_127:f32 = load_vector_element %c, 1u
-    %x_129:f32 = load_vector_element %b_1, 1u
-    %51:f32 = load_vector_element %p, 0u
-    %52:f32 = load_vector_element %b_1, 0u
-    %53:f32 = sub %51, %52
-    %54:f32 = load_vector_element %p, 1u
-    %55:f32 = load_vector_element %b_1, 1u
-    %56:f32 = sub %54, %55
-    %57:vec2<f32> = construct %53, %56
-    store %param_2, %57
-    %58:f32 = sub %x_122, %x_124
-    %59:f32 = sub %x_127, %x_129
-    %60:vec2<f32> = construct %58, %59
-    store %param_3, %60
-    %x_132:f32 = call %cross2d_vf2_vf2_, %param_2, %param_3
+    %56:f32 = load_vector_element %c, 0u
+    %x_122:f32 = let %56
+    %58:f32 = load_vector_element %b_1, 0u
+    %x_124:f32 = let %58
+    %60:f32 = load_vector_element %c, 1u
+    %x_127:f32 = let %60
+    %62:f32 = load_vector_element %b_1, 1u
+    %x_129:f32 = let %62
+    %64:f32 = load_vector_element %p, 0u
+    %65:f32 = load_vector_element %b_1, 0u
+    %66:f32 = sub %64, %65
+    %67:f32 = load_vector_element %p, 1u
+    %68:f32 = load_vector_element %b_1, 1u
+    %69:f32 = sub %67, %68
+    %70:vec2<f32> = construct %66, %69
+    store %param_2, %70
+    %71:f32 = sub %x_122, %x_124
+    %72:f32 = sub %x_127, %x_129
+    %73:vec2<f32> = construct %71, %72
+    store %param_3, %73
+    %74:f32 = call %cross2d_vf2_vf2_, %param_2, %param_3
+    %x_132:f32 = let %74
     store %pbc, %x_132
-    %62:f32 = load %pab
-    %63:bool = lt %62, 0.0f
-    %64:f32 = load %pbc
-    %65:bool = lt %64, 0.0f
-    %x_137:bool = and %63, %65
+    %76:f32 = load %pab
+    %77:bool = lt %76, 0.0f
+    %78:f32 = load %pbc
+    %79:bool = lt %78, 0.0f
+    %80:bool = and %77, %79
+    %x_137:bool = let %80
     store %x_146, %x_137
-    %67:bool = eq %x_137, false
-    if %67 [t: %b4] {  # if_1
-      %b4 = block {  # true
-        %68:f32 = load %pab
-        %69:bool = gte %68, 0.0f
-        %70:f32 = load %pbc
-        %71:bool = gte %70, 0.0f
-        %72:bool = and %69, %71
-        store %x_145, %72
-        %73:bool = load %x_145
-        store %x_146, %73
+    %82:bool = eq %x_137, false
+    if %82 [t: $B4] {  # if_1
+      $B4: {  # true
+        %83:f32 = load %pab
+        %84:bool = gte %83, 0.0f
+        %85:f32 = load %pbc
+        %86:bool = gte %85, 0.0f
+        %87:bool = and %84, %86
+        store %x_145, %87
+        %88:bool = load %x_145
+        store %x_146, %88
         exit_if  # if_1
       }
     }
-    %74:bool = load %x_146
-    %75:bool = eq %74, false
-    if %75 [t: %b5] {  # if_2
-      %b5 = block {  # true
+    %89:bool = load %x_146
+    %90:bool = eq %89, false
+    if %90 [t: $B5] {  # if_2
+      $B5: {  # true
         ret 0i
       }
     }
-    %x_162:f32 = load_vector_element %a_1, 0u
-    %x_164:f32 = load_vector_element %c, 0u
-    %x_167:f32 = load_vector_element %a_1, 1u
-    %x_169:f32 = load_vector_element %c, 1u
-    %80:f32 = load_vector_element %p, 0u
-    %81:f32 = load_vector_element %c, 0u
-    %82:f32 = sub %80, %81
-    %83:f32 = load_vector_element %p, 1u
-    %84:f32 = load_vector_element %c, 1u
-    %85:f32 = sub %83, %84
-    %86:vec2<f32> = construct %82, %85
-    store %param_4, %86
-    %87:f32 = sub %x_162, %x_164
-    %88:f32 = sub %x_167, %x_169
-    %89:vec2<f32> = construct %87, %88
-    store %param_5, %89
-    %x_172:f32 = call %cross2d_vf2_vf2_, %param_4, %param_5
+    %91:f32 = load_vector_element %a_1, 0u
+    %x_162:f32 = let %91
+    %93:f32 = load_vector_element %c, 0u
+    %x_164:f32 = let %93
+    %95:f32 = load_vector_element %a_1, 1u
+    %x_167:f32 = let %95
+    %97:f32 = load_vector_element %c, 1u
+    %x_169:f32 = let %97
+    %99:f32 = load_vector_element %p, 0u
+    %100:f32 = load_vector_element %c, 0u
+    %101:f32 = sub %99, %100
+    %102:f32 = load_vector_element %p, 1u
+    %103:f32 = load_vector_element %c, 1u
+    %104:f32 = sub %102, %103
+    %105:vec2<f32> = construct %101, %104
+    store %param_4, %105
+    %106:f32 = sub %x_162, %x_164
+    %107:f32 = sub %x_167, %x_169
+    %108:vec2<f32> = construct %106, %107
+    store %param_5, %108
+    %109:f32 = call %cross2d_vf2_vf2_, %param_4, %param_5
+    %x_172:f32 = let %109
     store %pca, %x_172
-    %91:f32 = load %pab
-    %92:bool = lt %91, 0.0f
-    %93:f32 = load %pca
-    %94:bool = lt %93, 0.0f
-    %x_177:bool = and %92, %94
+    %111:f32 = load %pab
+    %112:bool = lt %111, 0.0f
+    %113:f32 = load %pca
+    %114:bool = lt %113, 0.0f
+    %115:bool = and %112, %114
+    %x_177:bool = let %115
     store %x_186, %x_177
-    %96:bool = eq %x_177, false
-    if %96 [t: %b6] {  # if_3
-      %b6 = block {  # true
-        %97:f32 = load %pab
-        %98:bool = gte %97, 0.0f
-        %99:f32 = load %pca
-        %100:bool = gte %99, 0.0f
-        %101:bool = and %98, %100
-        store %x_185, %101
-        %102:bool = load %x_185
-        store %x_186, %102
+    %117:bool = eq %x_177, false
+    if %117 [t: $B6] {  # if_3
+      $B6: {  # true
+        %118:f32 = load %pab
+        %119:bool = gte %118, 0.0f
+        %120:f32 = load %pca
+        %121:bool = gte %120, 0.0f
+        %122:bool = and %119, %121
+        store %x_185, %122
+        %123:bool = load %x_185
+        store %x_186, %123
         exit_if  # if_3
       }
     }
-    %103:bool = load %x_186
-    %104:bool = eq %103, false
-    if %104 [t: %b7] {  # if_4
-      %b7 = block {  # true
+    %124:bool = load %x_186
+    %125:bool = eq %124, false
+    if %125 [t: $B7] {  # if_4
+      $B7: {  # true
         ret 0i
       }
     }
     ret 1i
   }
 }
-%main_1 = func():void -> %b8 {
-  %b8 = block {
+%main_1 = func():void {
+  $B8: {
     %pos:ptr<function, vec2<f32>, read_write> = var
     %param_6:ptr<function, vec2<f32>, read_write> = var
     %param_7:ptr<function, vec2<f32>, read_write> = var
     %param_8:ptr<function, vec2<f32>, read_write> = var
     %param_9:ptr<function, vec2<f32>, read_write> = var
-    %111:vec4<f32> = load %gl_FragCoord
-    %112:vec2<f32> = swizzle %111, xy
-    %113:ptr<uniform, vec2<f32>, read> = access %x_24, 0u
-    %114:vec2<f32> = load %113
-    %115:vec2<f32> = div %112, %114
-    store %pos, %115
-    %116:vec2<f32> = load %pos
-    store %param_6, %116
+    %132:vec4<f32> = load %gl_FragCoord
+    %133:vec2<f32> = swizzle %132, xy
+    %134:ptr<uniform, vec2<f32>, read> = access %x_24, 0u
+    %135:vec2<f32> = load %134
+    %136:vec2<f32> = div %133, %135
+    store %pos, %136
+    %137:vec2<f32> = load %pos
+    store %param_6, %137
     store %param_7, vec2<f32>(0.69999998807907104492f, 0.30000001192092895508f)
     store %param_8, vec2<f32>(0.5f, 0.89999997615814208984f)
     store %param_9, vec2<f32>(0.10000000149011611938f, 0.40000000596046447754f)
-    %x_69:i32 = call %pointInTriangle_vf2_vf2_vf2_vf2_, %param_6, %param_7, %param_8, %param_9
-    %118:bool = eq %x_69, 1i
-    if %118 [t: %b9, f: %b10] {  # if_5
-      %b9 = block {  # true
+    %138:i32 = call %pointInTriangle_vf2_vf2_vf2_vf2_, %param_6, %param_7, %param_8, %param_9
+    %x_69:i32 = let %138
+    %140:bool = eq %x_69, 1i
+    if %140 [t: $B9, f: $B10] {  # if_5
+      $B9: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_5
       }
-      %b10 = block {  # false
+      $B10: {  # false
         store %x_GLF_color, vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_5
       }
@@ -185,13 +207,13 @@
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b11 {
-  %b11 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B11: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %121:void = call %main_1
-    %122:vec4<f32> = load %x_GLF_color
-    %123:main_out = construct %122
-    ret %123
+    %143:void = call %main_1
+    %144:vec4<f32> = load %x_GLF_color
+    %145:main_out = construct %144
+    ret %145
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-triangle-nested-conditional-clamped-float/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-triangle-nested-conditional-clamped-float/0.wgsl.expected.ir.msl
index aa8c14c..805afd5 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-triangle-nested-conditional-clamped-float/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/stable-triangle-nested-conditional-clamped-float/0.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,26 +8,30 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_24:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%cross2d_vf2_vf2_ = func(%a:ptr<function, vec2<f32>, read_write>, %b:ptr<function, vec2<f32>, read_write>):f32 -> %b2 {
-  %b2 = block {
-    %x_76:f32 = load_vector_element %a, 0u
-    %x_78:f32 = load_vector_element %b, 1u
-    %x_81:f32 = load_vector_element %b, 0u
-    %x_83:f32 = load_vector_element %a, 1u
-    %11:f32 = mul %x_76, %x_78
-    %12:f32 = mul %x_81, %x_83
-    %13:f32 = sub %11, %12
-    ret %13
+%cross2d_vf2_vf2_ = func(%a:ptr<function, vec2<f32>, read_write>, %b:ptr<function, vec2<f32>, read_write>):f32 {
+  $B2: {
+    %7:f32 = load_vector_element %a, 0u
+    %x_76:f32 = let %7
+    %9:f32 = load_vector_element %b, 1u
+    %x_78:f32 = let %9
+    %11:f32 = load_vector_element %b, 0u
+    %x_81:f32 = let %11
+    %13:f32 = load_vector_element %a, 1u
+    %x_83:f32 = let %13
+    %15:f32 = mul %x_76, %x_78
+    %16:f32 = mul %x_81, %x_83
+    %17:f32 = sub %15, %16
+    ret %17
   }
 }
-%pointInTriangle_vf2_vf2_vf2_vf2_ = func(%p:ptr<function, vec2<f32>, read_write>, %a_1:ptr<function, vec2<f32>, read_write>, %b_1:ptr<function, vec2<f32>, read_write>, %c:ptr<function, vec2<f32>, read_write>):i32 -> %b3 {
-  %b3 = block {
+%pointInTriangle_vf2_vf2_vf2_vf2_ = func(%p:ptr<function, vec2<f32>, read_write>, %a_1:ptr<function, vec2<f32>, read_write>, %b_1:ptr<function, vec2<f32>, read_write>, %c:ptr<function, vec2<f32>, read_write>):i32 {
+  $B3: {
     %pab:ptr<function, f32, read_write> = var
     %param:ptr<function, vec2<f32>, read_write> = var
     %param_1:ptr<function, vec2<f32>, read_write> = var
@@ -41,145 +45,188 @@
     %x_185:ptr<function, bool, read_write> = var
     %x_146_phi:ptr<function, bool, read_write> = var
     %x_186_phi:ptr<function, bool, read_write> = var
-    %x_88:f32 = load_vector_element %p, 0u
-    %x_90:f32 = load_vector_element %a_1, 0u
-    %x_93:f32 = load_vector_element %p, 1u
-    %x_95:f32 = load_vector_element %a_1, 1u
-    %x_99:f32 = load_vector_element %b_1, 0u
-    %x_101:f32 = load_vector_element %a_1, 0u
-    %x_104:f32 = load_vector_element %b_1, 1u
-    %x_106:f32 = load_vector_element %a_1, 1u
-    %40:f32 = sub %x_88, %x_90
-    %41:f32 = sub %x_93, %x_95
-    %42:vec2<f32> = construct %40, %41
-    store %param, %42
-    %43:f32 = sub %x_99, %x_101
-    %44:f32 = sub %x_104, %x_106
-    %45:vec2<f32> = construct %43, %44
-    store %param_1, %45
-    %x_109:f32 = call %cross2d_vf2_vf2_, %param, %param_1
-    store %pab, %x_109
-    %x_111:f32 = load_vector_element %p, 0u
-    %x_113:f32 = load_vector_element %b_1, 0u
-    %x_116:f32 = load_vector_element %p, 1u
-    %x_118:f32 = load_vector_element %b_1, 1u
-    %x_122:f32 = load_vector_element %c, 0u
-    %x_124:f32 = load_vector_element %b_1, 0u
-    %x_127:f32 = load_vector_element %c, 1u
-    %x_129:f32 = load_vector_element %b_1, 1u
-    %55:f32 = sub %x_111, %x_113
-    %56:f32 = sub %x_116, %x_118
+    %36:f32 = load_vector_element %p, 0u
+    %x_88:f32 = let %36
+    %38:f32 = load_vector_element %a_1, 0u
+    %x_90:f32 = let %38
+    %40:f32 = load_vector_element %p, 1u
+    %x_93:f32 = let %40
+    %42:f32 = load_vector_element %a_1, 1u
+    %x_95:f32 = let %42
+    %44:f32 = load_vector_element %b_1, 0u
+    %x_99:f32 = let %44
+    %46:f32 = load_vector_element %a_1, 0u
+    %x_101:f32 = let %46
+    %48:f32 = load_vector_element %b_1, 1u
+    %x_104:f32 = let %48
+    %50:f32 = load_vector_element %a_1, 1u
+    %x_106:f32 = let %50
+    %52:f32 = sub %x_88, %x_90
+    %53:f32 = sub %x_93, %x_95
+    %54:vec2<f32> = construct %52, %53
+    store %param, %54
+    %55:f32 = sub %x_99, %x_101
+    %56:f32 = sub %x_104, %x_106
     %57:vec2<f32> = construct %55, %56
-    store %param_2, %57
-    %58:f32 = sub %x_122, %x_124
-    %59:f32 = sub %x_127, %x_129
-    %60:vec2<f32> = construct %58, %59
-    store %param_3, %60
-    %x_132:f32 = call %cross2d_vf2_vf2_, %param_2, %param_3
+    store %param_1, %57
+    %58:f32 = call %cross2d_vf2_vf2_, %param, %param_1
+    %x_109:f32 = let %58
+    store %pab, %x_109
+    %60:f32 = load_vector_element %p, 0u
+    %x_111:f32 = let %60
+    %62:f32 = load_vector_element %b_1, 0u
+    %x_113:f32 = let %62
+    %64:f32 = load_vector_element %p, 1u
+    %x_116:f32 = let %64
+    %66:f32 = load_vector_element %b_1, 1u
+    %x_118:f32 = let %66
+    %68:f32 = load_vector_element %c, 0u
+    %x_122:f32 = let %68
+    %70:f32 = load_vector_element %b_1, 0u
+    %x_124:f32 = let %70
+    %72:f32 = load_vector_element %c, 1u
+    %x_127:f32 = let %72
+    %74:f32 = load_vector_element %b_1, 1u
+    %x_129:f32 = let %74
+    %76:f32 = sub %x_111, %x_113
+    %77:f32 = sub %x_116, %x_118
+    %78:vec2<f32> = construct %76, %77
+    store %param_2, %78
+    %79:f32 = sub %x_122, %x_124
+    %80:f32 = sub %x_127, %x_129
+    %81:vec2<f32> = construct %79, %80
+    store %param_3, %81
+    %82:f32 = call %cross2d_vf2_vf2_, %param_2, %param_3
+    %x_132:f32 = let %82
     store %pbc, %x_132
-    %x_133:f32 = load %pab
-    %x_135:f32 = load %pbc
-    %64:bool = lt %x_133, 0.0f
-    %65:bool = lt %x_135, 0.0f
-    %x_137:bool = and %64, %65
+    %84:f32 = load %pab
+    %x_133:f32 = let %84
+    %86:f32 = load %pbc
+    %x_135:f32 = let %86
+    %88:bool = lt %x_133, 0.0f
+    %89:bool = lt %x_135, 0.0f
+    %90:bool = and %88, %89
+    %x_137:bool = let %90
     store %x_146_phi, %x_137
-    %67:bool = eq %x_137, false
-    if %67 [t: %b4] {  # if_1
-      %b4 = block {  # true
-        %x_141:f32 = load %pab
-        %x_143:f32 = load %pbc
-        %70:bool = gte %x_141, 0.0f
-        %71:bool = gte %x_143, 0.0f
-        %72:bool = and %70, %71
-        store %x_145, %72
-        %73:bool = load %x_145
-        store %x_146_phi, %73
+    %92:bool = eq %x_137, false
+    if %92 [t: $B4] {  # if_1
+      $B4: {  # true
+        %93:f32 = load %pab
+        %x_141:f32 = let %93
+        %95:f32 = load %pbc
+        %x_143:f32 = let %95
+        %97:bool = gte %x_141, 0.0f
+        %98:bool = gte %x_143, 0.0f
+        %99:bool = and %97, %98
+        store %x_145, %99
+        %100:bool = load %x_145
+        store %x_146_phi, %100
         exit_if  # if_1
       }
     }
-    %x_146:bool = load %x_146_phi
-    %75:bool = eq %x_146, false
-    if %75 [t: %b5] {  # if_2
-      %b5 = block {  # true
+    %101:bool = load %x_146_phi
+    %x_146:bool = let %101
+    %103:bool = eq %x_146, false
+    if %103 [t: $B5] {  # if_2
+      $B5: {  # true
         ret 0i
       }
     }
-    %x_151:f32 = load_vector_element %p, 0u
-    %x_153:f32 = load_vector_element %c, 0u
-    %x_156:f32 = load_vector_element %p, 1u
-    %x_158:f32 = load_vector_element %c, 1u
-    %x_162:f32 = load_vector_element %a_1, 0u
-    %x_164:f32 = load_vector_element %c, 0u
-    %x_167:f32 = load_vector_element %a_1, 1u
-    %x_169:f32 = load_vector_element %c, 1u
-    %84:f32 = sub %x_151, %x_153
-    %85:f32 = sub %x_156, %x_158
-    %86:vec2<f32> = construct %84, %85
-    store %param_4, %86
-    %87:f32 = sub %x_162, %x_164
-    %88:f32 = sub %x_167, %x_169
-    %89:vec2<f32> = construct %87, %88
-    store %param_5, %89
-    %x_172:f32 = call %cross2d_vf2_vf2_, %param_4, %param_5
+    %104:f32 = load_vector_element %p, 0u
+    %x_151:f32 = let %104
+    %106:f32 = load_vector_element %c, 0u
+    %x_153:f32 = let %106
+    %108:f32 = load_vector_element %p, 1u
+    %x_156:f32 = let %108
+    %110:f32 = load_vector_element %c, 1u
+    %x_158:f32 = let %110
+    %112:f32 = load_vector_element %a_1, 0u
+    %x_162:f32 = let %112
+    %114:f32 = load_vector_element %c, 0u
+    %x_164:f32 = let %114
+    %116:f32 = load_vector_element %a_1, 1u
+    %x_167:f32 = let %116
+    %118:f32 = load_vector_element %c, 1u
+    %x_169:f32 = let %118
+    %120:f32 = sub %x_151, %x_153
+    %121:f32 = sub %x_156, %x_158
+    %122:vec2<f32> = construct %120, %121
+    store %param_4, %122
+    %123:f32 = sub %x_162, %x_164
+    %124:f32 = sub %x_167, %x_169
+    %125:vec2<f32> = construct %123, %124
+    store %param_5, %125
+    %126:f32 = call %cross2d_vf2_vf2_, %param_4, %param_5
+    %x_172:f32 = let %126
     store %pca, %x_172
-    %x_173:f32 = load %pab
-    %x_175:f32 = load %pca
-    %93:bool = lt %x_173, 0.0f
-    %94:bool = lt %x_175, 0.0f
-    %x_177:bool = and %93, %94
+    %128:f32 = load %pab
+    %x_173:f32 = let %128
+    %130:f32 = load %pca
+    %x_175:f32 = let %130
+    %132:bool = lt %x_173, 0.0f
+    %133:bool = lt %x_175, 0.0f
+    %134:bool = and %132, %133
+    %x_177:bool = let %134
     store %x_186_phi, %x_177
-    %96:bool = eq %x_177, false
-    if %96 [t: %b6] {  # if_3
-      %b6 = block {  # true
-        %x_181:f32 = load %pab
-        %x_183:f32 = load %pca
-        %99:bool = gte %x_181, 0.0f
-        %100:bool = gte %x_183, 0.0f
-        %101:bool = and %99, %100
-        store %x_185, %101
-        %102:bool = load %x_185
-        store %x_186_phi, %102
+    %136:bool = eq %x_177, false
+    if %136 [t: $B6] {  # if_3
+      $B6: {  # true
+        %137:f32 = load %pab
+        %x_181:f32 = let %137
+        %139:f32 = load %pca
+        %x_183:f32 = let %139
+        %141:bool = gte %x_181, 0.0f
+        %142:bool = gte %x_183, 0.0f
+        %143:bool = and %141, %142
+        store %x_185, %143
+        %144:bool = load %x_185
+        store %x_186_phi, %144
         exit_if  # if_3
       }
     }
-    %x_186:bool = load %x_186_phi
-    %104:bool = eq %x_186, false
-    if %104 [t: %b7] {  # if_4
-      %b7 = block {  # true
+    %145:bool = load %x_186_phi
+    %x_186:bool = let %145
+    %147:bool = eq %x_186, false
+    if %147 [t: $B7] {  # if_4
+      $B7: {  # true
         ret 0i
       }
     }
     ret 1i
   }
 }
-%main_1 = func():void -> %b8 {
-  %b8 = block {
+%main_1 = func():void {
+  $B8: {
     %pos:ptr<function, vec2<f32>, read_write> = var
     %param_6:ptr<function, vec2<f32>, read_write> = var
     %param_7:ptr<function, vec2<f32>, read_write> = var
     %param_8:ptr<function, vec2<f32>, read_write> = var
     %param_9:ptr<function, vec2<f32>, read_write> = var
-    %x_63:vec4<f32> = load %gl_FragCoord
-    %112:ptr<uniform, vec2<f32>, read> = access %x_24, 0u
-    %x_66:vec2<f32> = load %112
-    %114:f32 = access %x_63, 0u
-    %115:f32 = access %x_63, 1u
-    %116:vec2<f32> = construct %114, %115
-    %117:vec2<f32> = div %116, %x_66
-    store %pos, %117
-    %x_68:vec2<f32> = load %pos
+    %154:vec4<f32> = load %gl_FragCoord
+    %x_63:vec4<f32> = let %154
+    %156:ptr<uniform, vec2<f32>, read> = access %x_24, 0u
+    %157:vec2<f32> = load %156
+    %x_66:vec2<f32> = let %157
+    %159:f32 = access %x_63, 0u
+    %160:f32 = access %x_63, 1u
+    %161:vec2<f32> = construct %159, %160
+    %162:vec2<f32> = div %161, %x_66
+    store %pos, %162
+    %163:vec2<f32> = load %pos
+    %x_68:vec2<f32> = let %163
     store %param_6, %x_68
     store %param_7, vec2<f32>(0.69999998807907104492f, 0.30000001192092895508f)
     store %param_8, vec2<f32>(0.5f, 0.89999997615814208984f)
     store %param_9, vec2<f32>(0.10000000149011611938f, 0.40000000596046447754f)
-    %x_69:i32 = call %pointInTriangle_vf2_vf2_vf2_vf2_, %param_6, %param_7, %param_8, %param_9
-    %120:bool = eq %x_69, 1i
-    if %120 [t: %b9, f: %b10] {  # if_5
-      %b9 = block {  # true
+    %165:i32 = call %pointInTriangle_vf2_vf2_vf2_vf2_, %param_6, %param_7, %param_8, %param_9
+    %x_69:i32 = let %165
+    %167:bool = eq %x_69, 1i
+    if %167 [t: $B9, f: $B10] {  # if_5
+      $B9: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_5
       }
-      %b10 = block {  # false
+      $B10: {  # false
         store %x_GLF_color, vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_5
       }
@@ -187,13 +234,13 @@
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b11 {
-  %b11 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B11: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %123:void = call %main_1
-    %124:vec4<f32> = load %x_GLF_color
-    %125:main_out = construct %124
-    ret %125
+    %170:void = call %main_1
+    %171:vec4<f32> = load %x_GLF_color
+    %172:main_out = construct %171
+    ret %172
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/0.spvasm.expected.ir.msl
index dfa456a..e212b35 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,14 +8,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_17:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%pointInTriangle_vf2_vf2_vf2_vf2_ = func(%p:ptr<function, vec2<f32>, read_write>, %a:ptr<function, vec2<f32>, read_write>, %b:ptr<function, vec2<f32>, read_write>, %c:ptr<function, vec2<f32>, read_write>):i32 -> %b2 {
-  %b2 = block {
+%pointInTriangle_vf2_vf2_vf2_vf2_ = func(%p:ptr<function, vec2<f32>, read_write>, %a:ptr<function, vec2<f32>, read_write>, %b:ptr<function, vec2<f32>, read_write>, %c:ptr<function, vec2<f32>, read_write>):i32 {
+  $B2: {
     %x_66:ptr<function, f32, read_write> = var
     %x_67:ptr<function, f32, read_write> = var
     %x_68:ptr<function, f32, read_write> = var
@@ -29,149 +29,168 @@
     %x_136:ptr<function, bool, read_write> = var
     %x_172:ptr<function, bool, read_write> = var
     %x_173:ptr<function, bool, read_write> = var
-    %x_81:f32 = load_vector_element %b, 0u
-    %x_82:f32 = load_vector_element %a, 0u
-    %x_85:f32 = load_vector_element %b, 1u
-    %x_86:f32 = load_vector_element %a, 1u
-    %26:f32 = load_vector_element %p, 0u
-    %27:f32 = load_vector_element %a, 0u
-    %28:f32 = sub %26, %27
-    %29:f32 = load_vector_element %p, 1u
-    %30:f32 = load_vector_element %a, 1u
-    %31:f32 = sub %29, %30
-    %32:vec2<f32> = construct %28, %31
-    store %param, %32
-    %33:f32 = sub %x_81, %x_82
-    %34:f32 = sub %x_85, %x_86
-    %35:vec2<f32> = construct %33, %34
-    store %param_1, %35
-    %36:f32 = load_vector_element %param, 0u
-    %37:f32 = load_vector_element %param_1, 1u
-    %38:f32 = mul %36, %37
-    %39:f32 = load_vector_element %param_1, 0u
-    %40:f32 = load_vector_element %param, 1u
-    %41:f32 = mul %39, %40
-    %x_99:f32 = sub %38, %41
+    %22:f32 = load_vector_element %b, 0u
+    %x_81:f32 = let %22
+    %24:f32 = load_vector_element %a, 0u
+    %x_82:f32 = let %24
+    %26:f32 = load_vector_element %b, 1u
+    %x_85:f32 = let %26
+    %28:f32 = load_vector_element %a, 1u
+    %x_86:f32 = let %28
+    %30:f32 = load_vector_element %p, 0u
+    %31:f32 = load_vector_element %a, 0u
+    %32:f32 = sub %30, %31
+    %33:f32 = load_vector_element %p, 1u
+    %34:f32 = load_vector_element %a, 1u
+    %35:f32 = sub %33, %34
+    %36:vec2<f32> = construct %32, %35
+    store %param, %36
+    %37:f32 = sub %x_81, %x_82
+    %38:f32 = sub %x_85, %x_86
+    %39:vec2<f32> = construct %37, %38
+    store %param_1, %39
+    %40:f32 = load_vector_element %param, 0u
+    %41:f32 = load_vector_element %param_1, 1u
+    %42:f32 = mul %40, %41
+    %43:f32 = load_vector_element %param_1, 0u
+    %44:f32 = load_vector_element %param, 1u
+    %45:f32 = mul %43, %44
+    %46:f32 = sub %42, %45
+    %x_99:f32 = let %46
     store %x_68, %x_99
-    %x_108:f32 = load_vector_element %c, 0u
-    %x_109:f32 = load_vector_element %b, 0u
-    %x_112:f32 = load_vector_element %c, 1u
-    %x_113:f32 = load_vector_element %b, 1u
-    %47:f32 = load_vector_element %p, 0u
-    %48:f32 = load_vector_element %b, 0u
-    %49:f32 = sub %47, %48
-    %50:f32 = load_vector_element %p, 1u
-    %51:f32 = load_vector_element %b, 1u
-    %52:f32 = sub %50, %51
-    %53:vec2<f32> = construct %49, %52
-    store %param_2, %53
-    %54:f32 = sub %x_108, %x_109
-    %55:f32 = sub %x_112, %x_113
-    %56:vec2<f32> = construct %54, %55
-    store %param_3, %56
-    %57:f32 = load_vector_element %param_2, 0u
-    %58:f32 = load_vector_element %param_3, 1u
-    %59:f32 = mul %57, %58
-    %60:f32 = load_vector_element %param_3, 0u
-    %61:f32 = load_vector_element %param_2, 1u
-    %62:f32 = mul %60, %61
-    %x_126:f32 = sub %59, %62
+    %48:f32 = load_vector_element %c, 0u
+    %x_108:f32 = let %48
+    %50:f32 = load_vector_element %b, 0u
+    %x_109:f32 = let %50
+    %52:f32 = load_vector_element %c, 1u
+    %x_112:f32 = let %52
+    %54:f32 = load_vector_element %b, 1u
+    %x_113:f32 = let %54
+    %56:f32 = load_vector_element %p, 0u
+    %57:f32 = load_vector_element %b, 0u
+    %58:f32 = sub %56, %57
+    %59:f32 = load_vector_element %p, 1u
+    %60:f32 = load_vector_element %b, 1u
+    %61:f32 = sub %59, %60
+    %62:vec2<f32> = construct %58, %61
+    store %param_2, %62
+    %63:f32 = sub %x_108, %x_109
+    %64:f32 = sub %x_112, %x_113
+    %65:vec2<f32> = construct %63, %64
+    store %param_3, %65
+    %66:f32 = load_vector_element %param_2, 0u
+    %67:f32 = load_vector_element %param_3, 1u
+    %68:f32 = mul %66, %67
+    %69:f32 = load_vector_element %param_3, 0u
+    %70:f32 = load_vector_element %param_2, 1u
+    %71:f32 = mul %69, %70
+    %72:f32 = sub %68, %71
+    %x_126:f32 = let %72
     store %x_67, %x_126
-    %x_127:bool = lt %x_99, 0.0f
-    %65:bool = lt %x_126, 0.0f
-    %x_129:bool = and %x_127, %65
+    %74:bool = lt %x_99, 0.0f
+    %x_127:bool = let %74
+    %76:bool = lt %x_126, 0.0f
+    %77:bool = and %x_127, %76
+    %x_129:bool = let %77
     store %x_136, %x_129
-    %67:bool = eq %x_129, false
-    if %67 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %68:bool = gte %x_99, 0.0f
-        %69:bool = gte %x_126, 0.0f
-        %70:bool = and %68, %69
-        store %x_135, %70
-        %71:bool = load %x_135
-        store %x_136, %71
+    %79:bool = eq %x_129, false
+    if %79 [t: $B3] {  # if_1
+      $B3: {  # true
+        %80:bool = gte %x_99, 0.0f
+        %81:bool = gte %x_126, 0.0f
+        %82:bool = and %80, %81
+        store %x_135, %82
+        %83:bool = load %x_135
+        store %x_136, %83
         exit_if  # if_1
       }
     }
-    %72:bool = load %x_136
-    %73:bool = eq %72, false
-    if %73 [t: %b4] {  # if_2
-      %b4 = block {  # true
+    %84:bool = load %x_136
+    %85:bool = eq %84, false
+    if %85 [t: $B4] {  # if_2
+      $B4: {  # true
         ret 0i
       }
     }
-    %x_147:f32 = load_vector_element %a, 0u
-    %x_148:f32 = load_vector_element %c, 0u
-    %x_150:f32 = load_vector_element %a, 1u
-    %x_151:f32 = load_vector_element %c, 1u
-    %78:f32 = load_vector_element %p, 0u
-    %79:f32 = load_vector_element %c, 0u
-    %80:f32 = sub %78, %79
-    %81:f32 = load_vector_element %p, 1u
-    %82:f32 = load_vector_element %c, 1u
-    %83:f32 = sub %81, %82
-    %84:vec2<f32> = construct %80, %83
-    store %param_4, %84
-    %85:f32 = sub %x_147, %x_148
-    %86:f32 = sub %x_150, %x_151
-    %87:vec2<f32> = construct %85, %86
-    store %param_5, %87
-    %88:f32 = load_vector_element %param_4, 0u
-    %89:f32 = load_vector_element %param_5, 1u
-    %90:f32 = mul %88, %89
-    %91:f32 = load_vector_element %param_5, 0u
-    %92:f32 = load_vector_element %param_4, 1u
-    %93:f32 = mul %91, %92
-    %x_164:f32 = sub %90, %93
+    %86:f32 = load_vector_element %a, 0u
+    %x_147:f32 = let %86
+    %88:f32 = load_vector_element %c, 0u
+    %x_148:f32 = let %88
+    %90:f32 = load_vector_element %a, 1u
+    %x_150:f32 = let %90
+    %92:f32 = load_vector_element %c, 1u
+    %x_151:f32 = let %92
+    %94:f32 = load_vector_element %p, 0u
+    %95:f32 = load_vector_element %c, 0u
+    %96:f32 = sub %94, %95
+    %97:f32 = load_vector_element %p, 1u
+    %98:f32 = load_vector_element %c, 1u
+    %99:f32 = sub %97, %98
+    %100:vec2<f32> = construct %96, %99
+    store %param_4, %100
+    %101:f32 = sub %x_147, %x_148
+    %102:f32 = sub %x_150, %x_151
+    %103:vec2<f32> = construct %101, %102
+    store %param_5, %103
+    %104:f32 = load_vector_element %param_4, 0u
+    %105:f32 = load_vector_element %param_5, 1u
+    %106:f32 = mul %104, %105
+    %107:f32 = load_vector_element %param_5, 0u
+    %108:f32 = load_vector_element %param_4, 1u
+    %109:f32 = mul %107, %108
+    %110:f32 = sub %106, %109
+    %x_164:f32 = let %110
     store %x_66, %x_164
-    %95:bool = lt %x_164, 0.0f
-    %x_166:bool = and %x_127, %95
+    %112:bool = lt %x_164, 0.0f
+    %113:bool = and %x_127, %112
+    %x_166:bool = let %113
     store %x_173, %x_166
-    %97:bool = eq %x_166, false
-    if %97 [t: %b5] {  # if_3
-      %b5 = block {  # true
-        %98:bool = gte %x_99, 0.0f
-        %99:bool = gte %x_164, 0.0f
-        %100:bool = and %98, %99
-        store %x_172, %100
-        %101:bool = load %x_172
-        store %x_173, %101
+    %115:bool = eq %x_166, false
+    if %115 [t: $B5] {  # if_3
+      $B5: {  # true
+        %116:bool = gte %x_99, 0.0f
+        %117:bool = gte %x_164, 0.0f
+        %118:bool = and %116, %117
+        store %x_172, %118
+        %119:bool = load %x_172
+        store %x_173, %119
         exit_if  # if_3
       }
     }
-    %102:bool = load %x_173
-    %103:bool = eq %102, false
-    if %103 [t: %b6] {  # if_4
-      %b6 = block {  # true
+    %120:bool = load %x_173
+    %121:bool = eq %120, false
+    if %121 [t: $B6] {  # if_4
+      $B6: {  # true
         ret 0i
       }
     }
     ret 1i
   }
 }
-%main_1 = func():void -> %b7 {
-  %b7 = block {
+%main_1 = func():void {
+  $B7: {
     %param_6:ptr<function, vec2<f32>, read_write> = var
     %param_7:ptr<function, vec2<f32>, read_write> = var
     %param_8:ptr<function, vec2<f32>, read_write> = var
     %param_9:ptr<function, vec2<f32>, read_write> = var
-    %109:vec4<f32> = load %gl_FragCoord
-    %110:vec2<f32> = swizzle %109, xy
-    %111:ptr<uniform, vec2<f32>, read> = access %x_17, 0u
-    %112:vec2<f32> = load %111
-    %113:vec2<f32> = div %110, %112
-    store %param_6, %113
+    %127:vec4<f32> = load %gl_FragCoord
+    %128:vec2<f32> = swizzle %127, xy
+    %129:ptr<uniform, vec2<f32>, read> = access %x_17, 0u
+    %130:vec2<f32> = load %129
+    %131:vec2<f32> = div %128, %130
+    store %param_6, %131
     store %param_7, vec2<f32>(0.69999998807907104492f, 0.30000001192092895508f)
     store %param_8, vec2<f32>(0.5f, 0.89999997615814208984f)
     store %param_9, vec2<f32>(0.10000000149011611938f, 0.40000000596046447754f)
-    %x_60:i32 = call %pointInTriangle_vf2_vf2_vf2_vf2_, %param_6, %param_7, %param_8, %param_9
-    %115:bool = eq %x_60, 1i
-    if %115 [t: %b8, f: %b9] {  # if_5
-      %b8 = block {  # true
+    %132:i32 = call %pointInTriangle_vf2_vf2_vf2_vf2_, %param_6, %param_7, %param_8, %param_9
+    %x_60:i32 = let %132
+    %134:bool = eq %x_60, 1i
+    if %134 [t: $B8, f: $B9] {  # if_5
+      $B8: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_5
       }
-      %b9 = block {  # false
+      $B9: {  # false
         store %x_GLF_color, vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_5
       }
@@ -179,13 +198,13 @@
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b10 {
-  %b10 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B10: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %118:void = call %main_1
-    %119:vec4<f32> = load %x_GLF_color
-    %120:main_out = construct %119
-    ret %120
+    %137:void = call %main_1
+    %138:vec4<f32> = load %x_GLF_color
+    %139:main_out = construct %138
+    ret %139
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/0.wgsl.expected.ir.msl
index 4e9bd9c..c1c5763 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/0.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   resolution:vec2<f32> @offset(0)
 }
 
@@ -8,14 +8,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_17:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%pointInTriangle_vf2_vf2_vf2_vf2_ = func(%p:ptr<function, vec2<f32>, read_write>, %a:ptr<function, vec2<f32>, read_write>, %b:ptr<function, vec2<f32>, read_write>, %c:ptr<function, vec2<f32>, read_write>):i32 -> %b2 {
-  %b2 = block {
+%pointInTriangle_vf2_vf2_vf2_vf2_ = func(%p:ptr<function, vec2<f32>, read_write>, %a:ptr<function, vec2<f32>, read_write>, %b:ptr<function, vec2<f32>, read_write>, %c:ptr<function, vec2<f32>, read_write>):i32 {
+  $B2: {
     %x_66:ptr<function, f32, read_write> = var
     %x_67:ptr<function, f32, read_write> = var
     %x_68:ptr<function, f32, read_write> = var
@@ -29,151 +29,198 @@
     %x_172:ptr<function, bool, read_write> = var
     %x_136_phi:ptr<function, bool, read_write> = var
     %x_173_phi:ptr<function, bool, read_write> = var
-    %x_70:f32 = load_vector_element %p, 0u
-    %x_72:f32 = load_vector_element %a, 0u
-    %x_75:f32 = load_vector_element %p, 1u
-    %x_77:f32 = load_vector_element %a, 1u
-    %x_81:f32 = load_vector_element %b, 0u
-    %x_82:f32 = load_vector_element %a, 0u
-    %x_85:f32 = load_vector_element %b, 1u
-    %x_86:f32 = load_vector_element %a, 1u
-    %30:f32 = sub %x_70, %x_72
-    %31:f32 = sub %x_75, %x_77
-    %32:vec2<f32> = construct %30, %31
-    store %param, %32
-    %33:f32 = sub %x_81, %x_82
-    %34:f32 = sub %x_85, %x_86
-    %35:vec2<f32> = construct %33, %34
-    store %param_1, %35
-    %x_90:f32 = load_vector_element %param, 0u
-    %x_92:f32 = load_vector_element %param_1, 1u
-    %x_95:f32 = load_vector_element %param_1, 0u
-    %x_97:f32 = load_vector_element %param, 1u
-    %40:f32 = mul %x_90, %x_92
-    %41:f32 = mul %x_95, %x_97
-    %x_99:f32 = sub %40, %41
+    %22:f32 = load_vector_element %p, 0u
+    %x_70:f32 = let %22
+    %24:f32 = load_vector_element %a, 0u
+    %x_72:f32 = let %24
+    %26:f32 = load_vector_element %p, 1u
+    %x_75:f32 = let %26
+    %28:f32 = load_vector_element %a, 1u
+    %x_77:f32 = let %28
+    %30:f32 = load_vector_element %b, 0u
+    %x_81:f32 = let %30
+    %32:f32 = load_vector_element %a, 0u
+    %x_82:f32 = let %32
+    %34:f32 = load_vector_element %b, 1u
+    %x_85:f32 = let %34
+    %36:f32 = load_vector_element %a, 1u
+    %x_86:f32 = let %36
+    %38:f32 = sub %x_70, %x_72
+    %39:f32 = sub %x_75, %x_77
+    %40:vec2<f32> = construct %38, %39
+    store %param, %40
+    %41:f32 = sub %x_81, %x_82
+    %42:f32 = sub %x_85, %x_86
+    %43:vec2<f32> = construct %41, %42
+    store %param_1, %43
+    %44:f32 = load_vector_element %param, 0u
+    %x_90:f32 = let %44
+    %46:f32 = load_vector_element %param_1, 1u
+    %x_92:f32 = let %46
+    %48:f32 = load_vector_element %param_1, 0u
+    %x_95:f32 = let %48
+    %50:f32 = load_vector_element %param, 1u
+    %x_97:f32 = let %50
+    %52:f32 = mul %x_90, %x_92
+    %53:f32 = mul %x_95, %x_97
+    %54:f32 = sub %52, %53
+    %x_99:f32 = let %54
     store %x_68, %x_99
-    %x_100:f32 = load_vector_element %p, 0u
-    %x_101:f32 = load_vector_element %b, 0u
-    %x_103:f32 = load_vector_element %p, 1u
-    %x_104:f32 = load_vector_element %b, 1u
-    %x_108:f32 = load_vector_element %c, 0u
-    %x_109:f32 = load_vector_element %b, 0u
-    %x_112:f32 = load_vector_element %c, 1u
-    %x_113:f32 = load_vector_element %b, 1u
-    %51:f32 = sub %x_100, %x_101
-    %52:f32 = sub %x_103, %x_104
-    %53:vec2<f32> = construct %51, %52
-    store %param_2, %53
-    %54:f32 = sub %x_108, %x_109
-    %55:f32 = sub %x_112, %x_113
-    %56:vec2<f32> = construct %54, %55
-    store %param_3, %56
-    %x_117:f32 = load_vector_element %param_2, 0u
-    %x_119:f32 = load_vector_element %param_3, 1u
-    %x_122:f32 = load_vector_element %param_3, 0u
-    %x_124:f32 = load_vector_element %param_2, 1u
-    %61:f32 = mul %x_117, %x_119
-    %62:f32 = mul %x_122, %x_124
-    %x_126:f32 = sub %61, %62
+    %56:f32 = load_vector_element %p, 0u
+    %x_100:f32 = let %56
+    %58:f32 = load_vector_element %b, 0u
+    %x_101:f32 = let %58
+    %60:f32 = load_vector_element %p, 1u
+    %x_103:f32 = let %60
+    %62:f32 = load_vector_element %b, 1u
+    %x_104:f32 = let %62
+    %64:f32 = load_vector_element %c, 0u
+    %x_108:f32 = let %64
+    %66:f32 = load_vector_element %b, 0u
+    %x_109:f32 = let %66
+    %68:f32 = load_vector_element %c, 1u
+    %x_112:f32 = let %68
+    %70:f32 = load_vector_element %b, 1u
+    %x_113:f32 = let %70
+    %72:f32 = sub %x_100, %x_101
+    %73:f32 = sub %x_103, %x_104
+    %74:vec2<f32> = construct %72, %73
+    store %param_2, %74
+    %75:f32 = sub %x_108, %x_109
+    %76:f32 = sub %x_112, %x_113
+    %77:vec2<f32> = construct %75, %76
+    store %param_3, %77
+    %78:f32 = load_vector_element %param_2, 0u
+    %x_117:f32 = let %78
+    %80:f32 = load_vector_element %param_3, 1u
+    %x_119:f32 = let %80
+    %82:f32 = load_vector_element %param_3, 0u
+    %x_122:f32 = let %82
+    %84:f32 = load_vector_element %param_2, 1u
+    %x_124:f32 = let %84
+    %86:f32 = mul %x_117, %x_119
+    %87:f32 = mul %x_122, %x_124
+    %88:f32 = sub %86, %87
+    %x_126:f32 = let %88
     store %x_67, %x_126
-    %x_127:bool = lt %x_99, 0.0f
-    %65:bool = lt %x_126, 0.0f
-    %x_129:bool = and %x_127, %65
+    %90:bool = lt %x_99, 0.0f
+    %x_127:bool = let %90
+    %92:bool = lt %x_126, 0.0f
+    %93:bool = and %x_127, %92
+    %x_129:bool = let %93
     store %x_136_phi, %x_129
-    %67:bool = eq %x_129, false
-    if %67 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %68:bool = gte %x_99, 0.0f
-        %69:bool = gte %x_126, 0.0f
-        %70:bool = and %68, %69
-        store %x_135, %70
-        %71:bool = load %x_135
-        store %x_136_phi, %71
+    %95:bool = eq %x_129, false
+    if %95 [t: $B3] {  # if_1
+      $B3: {  # true
+        %96:bool = gte %x_99, 0.0f
+        %97:bool = gte %x_126, 0.0f
+        %98:bool = and %96, %97
+        store %x_135, %98
+        %99:bool = load %x_135
+        store %x_136_phi, %99
         exit_if  # if_1
       }
     }
-    %x_136:bool = load %x_136_phi
-    %73:bool = eq %x_136, false
-    if %73 [t: %b4] {  # if_2
-      %b4 = block {  # true
+    %100:bool = load %x_136_phi
+    %x_136:bool = let %100
+    %102:bool = eq %x_136, false
+    if %102 [t: $B4] {  # if_2
+      $B4: {  # true
         ret 0i
       }
     }
-    %x_140:f32 = load_vector_element %p, 0u
-    %x_141:f32 = load_vector_element %c, 0u
-    %x_143:f32 = load_vector_element %p, 1u
-    %x_144:f32 = load_vector_element %c, 1u
-    %x_147:f32 = load_vector_element %a, 0u
-    %x_148:f32 = load_vector_element %c, 0u
-    %x_150:f32 = load_vector_element %a, 1u
-    %x_151:f32 = load_vector_element %c, 1u
-    %82:f32 = sub %x_140, %x_141
-    %83:f32 = sub %x_143, %x_144
-    %84:vec2<f32> = construct %82, %83
-    store %param_4, %84
-    %85:f32 = sub %x_147, %x_148
-    %86:f32 = sub %x_150, %x_151
-    %87:vec2<f32> = construct %85, %86
-    store %param_5, %87
-    %x_155:f32 = load_vector_element %param_4, 0u
-    %x_157:f32 = load_vector_element %param_5, 1u
-    %x_160:f32 = load_vector_element %param_5, 0u
-    %x_162:f32 = load_vector_element %param_4, 1u
-    %92:f32 = mul %x_155, %x_157
-    %93:f32 = mul %x_160, %x_162
-    %x_164:f32 = sub %92, %93
+    %103:f32 = load_vector_element %p, 0u
+    %x_140:f32 = let %103
+    %105:f32 = load_vector_element %c, 0u
+    %x_141:f32 = let %105
+    %107:f32 = load_vector_element %p, 1u
+    %x_143:f32 = let %107
+    %109:f32 = load_vector_element %c, 1u
+    %x_144:f32 = let %109
+    %111:f32 = load_vector_element %a, 0u
+    %x_147:f32 = let %111
+    %113:f32 = load_vector_element %c, 0u
+    %x_148:f32 = let %113
+    %115:f32 = load_vector_element %a, 1u
+    %x_150:f32 = let %115
+    %117:f32 = load_vector_element %c, 1u
+    %x_151:f32 = let %117
+    %119:f32 = sub %x_140, %x_141
+    %120:f32 = sub %x_143, %x_144
+    %121:vec2<f32> = construct %119, %120
+    store %param_4, %121
+    %122:f32 = sub %x_147, %x_148
+    %123:f32 = sub %x_150, %x_151
+    %124:vec2<f32> = construct %122, %123
+    store %param_5, %124
+    %125:f32 = load_vector_element %param_4, 0u
+    %x_155:f32 = let %125
+    %127:f32 = load_vector_element %param_5, 1u
+    %x_157:f32 = let %127
+    %129:f32 = load_vector_element %param_5, 0u
+    %x_160:f32 = let %129
+    %131:f32 = load_vector_element %param_4, 1u
+    %x_162:f32 = let %131
+    %133:f32 = mul %x_155, %x_157
+    %134:f32 = mul %x_160, %x_162
+    %135:f32 = sub %133, %134
+    %x_164:f32 = let %135
     store %x_66, %x_164
-    %95:bool = lt %x_164, 0.0f
-    %x_166:bool = and %x_127, %95
+    %137:bool = lt %x_164, 0.0f
+    %138:bool = and %x_127, %137
+    %x_166:bool = let %138
     store %x_173_phi, %x_166
-    %97:bool = eq %x_166, false
-    if %97 [t: %b5] {  # if_3
-      %b5 = block {  # true
-        %98:bool = gte %x_99, 0.0f
-        %99:bool = gte %x_164, 0.0f
-        %100:bool = and %98, %99
-        store %x_172, %100
-        %101:bool = load %x_172
-        store %x_173_phi, %101
+    %140:bool = eq %x_166, false
+    if %140 [t: $B5] {  # if_3
+      $B5: {  # true
+        %141:bool = gte %x_99, 0.0f
+        %142:bool = gte %x_164, 0.0f
+        %143:bool = and %141, %142
+        store %x_172, %143
+        %144:bool = load %x_172
+        store %x_173_phi, %144
         exit_if  # if_3
       }
     }
-    %x_173:bool = load %x_173_phi
-    %103:bool = eq %x_173, false
-    if %103 [t: %b6] {  # if_4
-      %b6 = block {  # true
+    %145:bool = load %x_173_phi
+    %x_173:bool = let %145
+    %147:bool = eq %x_173, false
+    if %147 [t: $B6] {  # if_4
+      $B6: {  # true
         ret 0i
       }
     }
     ret 1i
   }
 }
-%main_1 = func():void -> %b7 {
-  %b7 = block {
+%main_1 = func():void {
+  $B7: {
     %param_6:ptr<function, vec2<f32>, read_write> = var
     %param_7:ptr<function, vec2<f32>, read_write> = var
     %param_8:ptr<function, vec2<f32>, read_write> = var
     %param_9:ptr<function, vec2<f32>, read_write> = var
-    %x_55:vec4<f32> = load %gl_FragCoord
-    %110:ptr<uniform, vec2<f32>, read> = access %x_17, 0u
-    %x_58:vec2<f32> = load %110
-    %112:f32 = access %x_55, 0u
-    %113:f32 = access %x_55, 1u
-    %114:vec2<f32> = construct %112, %113
-    %115:vec2<f32> = div %114, %x_58
-    store %param_6, %115
+    %153:vec4<f32> = load %gl_FragCoord
+    %x_55:vec4<f32> = let %153
+    %155:ptr<uniform, vec2<f32>, read> = access %x_17, 0u
+    %156:vec2<f32> = load %155
+    %x_58:vec2<f32> = let %156
+    %158:f32 = access %x_55, 0u
+    %159:f32 = access %x_55, 1u
+    %160:vec2<f32> = construct %158, %159
+    %161:vec2<f32> = div %160, %x_58
+    store %param_6, %161
     store %param_7, vec2<f32>(0.69999998807907104492f, 0.30000001192092895508f)
     store %param_8, vec2<f32>(0.5f, 0.89999997615814208984f)
     store %param_9, vec2<f32>(0.10000000149011611938f, 0.40000000596046447754f)
-    %x_60:i32 = call %pointInTriangle_vf2_vf2_vf2_vf2_, %param_6, %param_7, %param_8, %param_9
-    %117:bool = eq %x_60, 1i
-    if %117 [t: %b8, f: %b9] {  # if_5
-      %b8 = block {  # true
+    %162:i32 = call %pointInTriangle_vf2_vf2_vf2_vf2_, %param_6, %param_7, %param_8, %param_9
+    %x_60:i32 = let %162
+    %164:bool = eq %x_60, 1i
+    if %164 [t: $B8, f: $B9] {  # if_5
+      $B8: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_5
       }
-      %b9 = block {  # false
+      $B9: {  # false
         store %x_GLF_color, vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_5
       }
@@ -181,13 +228,13 @@
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b10 {
-  %b10 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B10: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %120:void = call %main_1
-    %121:vec4<f32> = load %x_GLF_color
-    %122:main_out = construct %121
-    ret %122
+    %167:void = call %main_1
+    %168:vec4<f32> = load %x_GLF_color
+    %169:main_out = construct %168
+    ret %169
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/1.spvasm.expected.ir.msl
index f9e8d82..b9b6b1c 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/1.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf1 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf1 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -12,15 +12,15 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_11:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_19:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%pointInTriangle_vf2_vf2_vf2_vf2_ = func(%p:ptr<function, vec2<f32>, read_write>, %a:ptr<function, vec2<f32>, read_write>, %b:ptr<function, vec2<f32>, read_write>, %c:ptr<function, vec2<f32>, read_write>):i32 -> %b2 {
-  %b2 = block {
+%pointInTriangle_vf2_vf2_vf2_vf2_ = func(%p:ptr<function, vec2<f32>, read_write>, %a:ptr<function, vec2<f32>, read_write>, %b:ptr<function, vec2<f32>, read_write>, %c:ptr<function, vec2<f32>, read_write>):i32 {
+  $B2: {
     %x_78:ptr<function, f32, read_write> = var
     %x_79:ptr<function, f32, read_write> = var
     %x_80:ptr<function, f32, read_write> = var
@@ -34,216 +34,236 @@
     %x_148:ptr<function, bool, read_write> = var
     %x_203:ptr<function, bool, read_write> = var
     %x_204:ptr<function, bool, read_write> = var
-    %x_93:f32 = load_vector_element %b, 0u
-    %x_94:f32 = load_vector_element %a, 0u
-    %x_97:f32 = load_vector_element %b, 1u
-    %x_98:f32 = load_vector_element %a, 1u
-    %27:f32 = load_vector_element %p, 0u
-    %28:f32 = load_vector_element %a, 0u
-    %29:f32 = sub %27, %28
-    %30:f32 = load_vector_element %p, 1u
-    %31:f32 = load_vector_element %a, 1u
-    %32:f32 = sub %30, %31
-    %33:vec2<f32> = construct %29, %32
-    store %param, %33
-    %34:f32 = sub %x_93, %x_94
-    %35:f32 = sub %x_97, %x_98
-    %36:vec2<f32> = construct %34, %35
-    store %param_1, %36
-    %37:f32 = load_vector_element %param, 0u
-    %38:f32 = load_vector_element %param_1, 1u
-    %39:f32 = mul %37, %38
-    %40:f32 = load_vector_element %param_1, 0u
-    %41:f32 = load_vector_element %param, 1u
-    %42:f32 = mul %40, %41
-    %x_111:f32 = sub %39, %42
+    %23:f32 = load_vector_element %b, 0u
+    %x_93:f32 = let %23
+    %25:f32 = load_vector_element %a, 0u
+    %x_94:f32 = let %25
+    %27:f32 = load_vector_element %b, 1u
+    %x_97:f32 = let %27
+    %29:f32 = load_vector_element %a, 1u
+    %x_98:f32 = let %29
+    %31:f32 = load_vector_element %p, 0u
+    %32:f32 = load_vector_element %a, 0u
+    %33:f32 = sub %31, %32
+    %34:f32 = load_vector_element %p, 1u
+    %35:f32 = load_vector_element %a, 1u
+    %36:f32 = sub %34, %35
+    %37:vec2<f32> = construct %33, %36
+    store %param, %37
+    %38:f32 = sub %x_93, %x_94
+    %39:f32 = sub %x_97, %x_98
+    %40:vec2<f32> = construct %38, %39
+    store %param_1, %40
+    %41:f32 = load_vector_element %param, 0u
+    %42:f32 = load_vector_element %param_1, 1u
+    %43:f32 = mul %41, %42
+    %44:f32 = load_vector_element %param_1, 0u
+    %45:f32 = load_vector_element %param, 1u
+    %46:f32 = mul %44, %45
+    %47:f32 = sub %43, %46
+    %x_111:f32 = let %47
     store %x_80, %x_111
-    %x_120:f32 = load_vector_element %c, 0u
-    %x_121:f32 = load_vector_element %b, 0u
-    %x_124:f32 = load_vector_element %c, 1u
-    %x_125:f32 = load_vector_element %b, 1u
-    %48:f32 = load_vector_element %p, 0u
-    %49:f32 = load_vector_element %b, 0u
-    %50:f32 = sub %48, %49
-    %51:f32 = load_vector_element %p, 1u
-    %52:f32 = load_vector_element %b, 1u
-    %53:f32 = sub %51, %52
-    %54:vec2<f32> = construct %50, %53
-    store %param_2, %54
-    %55:f32 = sub %x_120, %x_121
-    %56:f32 = sub %x_124, %x_125
-    %57:vec2<f32> = construct %55, %56
-    store %param_3, %57
-    %58:f32 = load_vector_element %param_2, 0u
-    %59:f32 = load_vector_element %param_3, 1u
-    %60:f32 = mul %58, %59
-    %61:f32 = load_vector_element %param_3, 0u
-    %62:f32 = load_vector_element %param_2, 1u
-    %63:f32 = mul %61, %62
-    %x_138:f32 = sub %60, %63
+    %49:f32 = load_vector_element %c, 0u
+    %x_120:f32 = let %49
+    %51:f32 = load_vector_element %b, 0u
+    %x_121:f32 = let %51
+    %53:f32 = load_vector_element %c, 1u
+    %x_124:f32 = let %53
+    %55:f32 = load_vector_element %b, 1u
+    %x_125:f32 = let %55
+    %57:f32 = load_vector_element %p, 0u
+    %58:f32 = load_vector_element %b, 0u
+    %59:f32 = sub %57, %58
+    %60:f32 = load_vector_element %p, 1u
+    %61:f32 = load_vector_element %b, 1u
+    %62:f32 = sub %60, %61
+    %63:vec2<f32> = construct %59, %62
+    store %param_2, %63
+    %64:f32 = sub %x_120, %x_121
+    %65:f32 = sub %x_124, %x_125
+    %66:vec2<f32> = construct %64, %65
+    store %param_3, %66
+    %67:f32 = load_vector_element %param_2, 0u
+    %68:f32 = load_vector_element %param_3, 1u
+    %69:f32 = mul %67, %68
+    %70:f32 = load_vector_element %param_3, 0u
+    %71:f32 = load_vector_element %param_2, 1u
+    %72:f32 = mul %70, %71
+    %73:f32 = sub %69, %72
+    %x_138:f32 = let %73
     store %x_79, %x_138
-    %x_139:bool = lt %x_111, 0.0f
-    %66:bool = lt %x_138, 0.0f
-    %x_141:bool = and %x_139, %66
+    %75:bool = lt %x_111, 0.0f
+    %x_139:bool = let %75
+    %77:bool = lt %x_138, 0.0f
+    %78:bool = and %x_139, %77
+    %x_141:bool = let %78
     store %x_148, %x_141
-    %68:bool = eq %x_141, false
-    if %68 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %69:bool = gte %x_111, 0.0f
-        %70:bool = gte %x_138, 0.0f
-        %71:bool = and %69, %70
-        store %x_147, %71
-        %72:bool = load %x_147
-        store %x_148, %72
+    %80:bool = eq %x_141, false
+    if %80 [t: $B3] {  # if_1
+      $B3: {  # true
+        %81:bool = gte %x_111, 0.0f
+        %82:bool = gte %x_138, 0.0f
+        %83:bool = and %81, %82
+        store %x_147, %83
+        %84:bool = load %x_147
+        store %x_148, %84
         exit_if  # if_1
       }
     }
     %x_153:ptr<function, i32, read_write> = var
-    %74:bool = load %x_148
-    %75:bool = eq %74, false
-    if %75 [t: %b4] {  # if_2
-      %b4 = block {  # true
+    %86:bool = load %x_148
+    %87:bool = eq %86, false
+    if %87 [t: $B4] {  # if_2
+      $B4: {  # true
         store %x_153, 0i
-        loop [b: %b5, c: %b6] {  # loop_1
-          %b5 = block {  # body
+        loop [b: $B5, c: $B6] {  # loop_1
+          $B5: {  # body
             %x_164:ptr<function, i32, read_write> = var
             %x_154:ptr<function, i32, read_write> = var
-            %78:ptr<uniform, vec2<f32>, read> = access %x_11, 0u
-            %79:f32 = load_vector_element %78, 1u
-            %x_160:i32 = convert %79
-            %81:i32 = load %x_153
-            %82:bool = lt %81, %x_160
-            if %82 [t: %b7, f: %b8] {  # if_3
-              %b7 = block {  # true
+            %90:ptr<uniform, vec2<f32>, read> = access %x_11, 0u
+            %91:f32 = load_vector_element %90, 1u
+            %92:i32 = call %tint_f32_to_i32, %91
+            %x_160:i32 = let %92
+            %95:i32 = load %x_153
+            %96:bool = lt %95, %x_160
+            if %96 [t: $B7, f: $B8] {  # if_3
+              $B7: {  # true
                 exit_if  # if_3
               }
-              %b8 = block {  # false
+              $B8: {  # false
                 exit_loop  # loop_1
               }
             }
             store %x_GLF_color, vec4<f32>(1.0f)
             store %x_164, 0i
-            loop [b: %b9, c: %b10] {  # loop_2
-              %b9 = block {  # body
+            loop [b: $B9, c: $B10] {  # loop_2
+              $B9: {  # body
                 %x_165:ptr<function, i32, read_write> = var
-                %84:i32 = load %x_164
-                %85:bool = lt %84, %x_160
-                if %85 [t: %b11, f: %b12] {  # if_4
-                  %b11 = block {  # true
+                %98:i32 = load %x_164
+                %99:bool = lt %98, %x_160
+                if %99 [t: $B11, f: $B12] {  # if_4
+                  $B11: {  # true
                     exit_if  # if_4
                   }
-                  %b12 = block {  # false
+                  $B12: {  # false
                     exit_loop  # loop_2
                   }
                 }
                 store %x_GLF_color, vec4<f32>(1.0f)
-                continue %b10
+                continue  # -> $B10
               }
-              %b10 = block {  # continuing
-                %86:i32 = load %x_164
-                %87:i32 = add %86, 1i
-                store %x_165, %87
-                %88:i32 = load %x_165
-                store %x_164, %88
-                next_iteration %b9
+              $B10: {  # continuing
+                %100:i32 = load %x_164
+                %101:i32 = add %100, 1i
+                store %x_165, %101
+                %102:i32 = load %x_165
+                store %x_164, %102
+                next_iteration  # -> $B9
               }
             }
-            continue %b6
+            continue  # -> $B6
           }
-          %b6 = block {  # continuing
-            %89:i32 = load %x_153
-            %90:i32 = add %89, 1i
-            store %x_154, %90
-            %91:i32 = load %x_154
-            store %x_153, %91
-            next_iteration %b5
+          $B6: {  # continuing
+            %103:i32 = load %x_153
+            %104:i32 = add %103, 1i
+            store %x_154, %104
+            %105:i32 = load %x_154
+            store %x_153, %105
+            next_iteration  # -> $B5
           }
         }
         ret 0i
       }
     }
-    %x_178:f32 = load_vector_element %a, 0u
-    %x_179:f32 = load_vector_element %c, 0u
-    %x_181:f32 = load_vector_element %a, 1u
-    %x_182:f32 = load_vector_element %c, 1u
-    %96:f32 = load_vector_element %p, 0u
-    %97:f32 = load_vector_element %c, 0u
-    %98:f32 = sub %96, %97
-    %99:f32 = load_vector_element %p, 1u
-    %100:f32 = load_vector_element %c, 1u
-    %101:f32 = sub %99, %100
-    %102:vec2<f32> = construct %98, %101
-    store %param_4, %102
-    %103:f32 = sub %x_178, %x_179
-    %104:f32 = sub %x_181, %x_182
-    %105:vec2<f32> = construct %103, %104
-    store %param_5, %105
-    %106:f32 = load_vector_element %param_4, 0u
-    %107:f32 = load_vector_element %param_5, 1u
-    %108:f32 = mul %106, %107
-    %109:f32 = load_vector_element %param_5, 0u
-    %110:f32 = load_vector_element %param_4, 1u
-    %111:f32 = mul %109, %110
-    %x_195:f32 = sub %108, %111
+    %106:f32 = load_vector_element %a, 0u
+    %x_178:f32 = let %106
+    %108:f32 = load_vector_element %c, 0u
+    %x_179:f32 = let %108
+    %110:f32 = load_vector_element %a, 1u
+    %x_181:f32 = let %110
+    %112:f32 = load_vector_element %c, 1u
+    %x_182:f32 = let %112
+    %114:f32 = load_vector_element %p, 0u
+    %115:f32 = load_vector_element %c, 0u
+    %116:f32 = sub %114, %115
+    %117:f32 = load_vector_element %p, 1u
+    %118:f32 = load_vector_element %c, 1u
+    %119:f32 = sub %117, %118
+    %120:vec2<f32> = construct %116, %119
+    store %param_4, %120
+    %121:f32 = sub %x_178, %x_179
+    %122:f32 = sub %x_181, %x_182
+    %123:vec2<f32> = construct %121, %122
+    store %param_5, %123
+    %124:f32 = load_vector_element %param_4, 0u
+    %125:f32 = load_vector_element %param_5, 1u
+    %126:f32 = mul %124, %125
+    %127:f32 = load_vector_element %param_5, 0u
+    %128:f32 = load_vector_element %param_4, 1u
+    %129:f32 = mul %127, %128
+    %130:f32 = sub %126, %129
+    %x_195:f32 = let %130
     store %x_78, %x_195
-    %113:bool = lt %x_195, 0.0f
-    %x_197:bool = and %x_139, %113
+    %132:bool = lt %x_195, 0.0f
+    %133:bool = and %x_139, %132
+    %x_197:bool = let %133
     store %x_204, %x_197
-    %115:bool = eq %x_197, false
-    if %115 [t: %b13] {  # if_5
-      %b13 = block {  # true
-        %116:bool = gte %x_111, 0.0f
-        %117:bool = gte %x_195, 0.0f
-        %118:bool = and %116, %117
-        store %x_203, %118
-        %119:bool = load %x_203
-        store %x_204, %119
+    %135:bool = eq %x_197, false
+    if %135 [t: $B13] {  # if_5
+      $B13: {  # true
+        %136:bool = gte %x_111, 0.0f
+        %137:bool = gte %x_195, 0.0f
+        %138:bool = and %136, %137
+        store %x_203, %138
+        %139:bool = load %x_203
+        store %x_204, %139
         exit_if  # if_5
       }
     }
-    %120:bool = load %x_204
-    %121:bool = eq %120, false
-    if %121 [t: %b14] {  # if_6
-      %b14 = block {  # true
+    %140:bool = load %x_204
+    %141:bool = eq %140, false
+    if %141 [t: $B14] {  # if_6
+      $B14: {  # true
         ret 0i
       }
     }
     ret 1i
   }
 }
-%main_1 = func():void -> %b15 {
-  %b15 = block {
+%main_1 = func():void {
+  $B15: {
     %param_6:ptr<function, vec2<f32>, read_write> = var
     %param_7:ptr<function, vec2<f32>, read_write> = var
     %param_8:ptr<function, vec2<f32>, read_write> = var
     %param_9:ptr<function, vec2<f32>, read_write> = var
-    %127:vec4<f32> = load %gl_FragCoord
-    %128:vec2<f32> = swizzle %127, xy
-    %129:ptr<uniform, vec2<f32>, read> = access %x_19, 0u
-    %130:vec2<f32> = load %129
-    %131:vec2<f32> = div %128, %130
-    store %param_6, %131
+    %147:vec4<f32> = load %gl_FragCoord
+    %148:vec2<f32> = swizzle %147, xy
+    %149:ptr<uniform, vec2<f32>, read> = access %x_19, 0u
+    %150:vec2<f32> = load %149
+    %151:vec2<f32> = div %148, %150
+    store %param_6, %151
     store %param_7, vec2<f32>(0.69999998807907104492f, 0.30000001192092895508f)
     store %param_8, vec2<f32>(0.5f, 0.89999997615814208984f)
     store %param_9, vec2<f32>(0.10000000149011611938f, 0.40000000596046447754f)
-    %x_65:i32 = call %pointInTriangle_vf2_vf2_vf2_vf2_, %param_6, %param_7, %param_8, %param_9
-    %133:bool = eq %x_65, 1i
-    if %133 [t: %b16, f: %b17] {  # if_7
-      %b16 = block {  # true
-        %134:ptr<uniform, vec2<f32>, read> = access %x_11, 0u
-        %135:f32 = load_vector_element %134, 1u
-        %136:ptr<uniform, vec2<f32>, read> = access %x_11, 0u
-        %137:f32 = load_vector_element %136, 0u
-        %138:bool = gte %135, %137
-        if %138 [t: %b18] {  # if_8
-          %b18 = block {  # true
+    %152:i32 = call %pointInTriangle_vf2_vf2_vf2_vf2_, %param_6, %param_7, %param_8, %param_9
+    %x_65:i32 = let %152
+    %154:bool = eq %x_65, 1i
+    if %154 [t: $B16, f: $B17] {  # if_7
+      $B16: {  # true
+        %155:ptr<uniform, vec2<f32>, read> = access %x_11, 0u
+        %156:f32 = load_vector_element %155, 1u
+        %157:ptr<uniform, vec2<f32>, read> = access %x_11, 0u
+        %158:f32 = load_vector_element %157, 0u
+        %159:bool = gte %156, %158
+        if %159 [t: $B18] {  # if_8
+          $B18: {  # true
             store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
             exit_if  # if_8
           }
         }
         exit_if  # if_7
       }
-      %b17 = block {  # false
+      $B17: {  # false
         store %x_GLF_color, vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_7
       }
@@ -251,13 +271,23 @@
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b19 {
-  %b19 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B19: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %141:void = call %main_1
-    %142:vec4<f32> = load %x_GLF_color
-    %143:main_out = construct %142
-    ret %143
+    %162:void = call %main_1
+    %163:vec4<f32> = load %x_GLF_color
+    %164:main_out = construct %163
+    ret %164
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B20: {
+    %166:i32 = convert %value
+    %167:bool = gte %value, -2147483648.0f
+    %168:i32 = select -2147483648i, %166, %167
+    %169:bool = lte %value, 2147483520.0f
+    %170:i32 = select 2147483647i, %168, %169
+    ret %170
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/1.wgsl.expected.ir.msl
index 3cbc44a..36dff3c 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/1.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/1.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf1 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf1 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -12,15 +12,15 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_11:ptr<uniform, buf1, read> = var @binding_point(0, 1)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_19:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%pointInTriangle_vf2_vf2_vf2_vf2_ = func(%p:ptr<function, vec2<f32>, read_write>, %a:ptr<function, vec2<f32>, read_write>, %b:ptr<function, vec2<f32>, read_write>, %c:ptr<function, vec2<f32>, read_write>):i32 -> %b2 {
-  %b2 = block {
+%pointInTriangle_vf2_vf2_vf2_vf2_ = func(%p:ptr<function, vec2<f32>, read_write>, %a:ptr<function, vec2<f32>, read_write>, %b:ptr<function, vec2<f32>, read_write>, %c:ptr<function, vec2<f32>, read_write>):i32 {
+  $B2: {
     %x_78:ptr<function, f32, read_write> = var
     %x_79:ptr<function, f32, read_write> = var
     %x_80:ptr<function, f32, read_write> = var
@@ -34,216 +34,269 @@
     %x_203:ptr<function, bool, read_write> = var
     %x_148_phi:ptr<function, bool, read_write> = var
     %x_204_phi:ptr<function, bool, read_write> = var
-    %x_82:f32 = load_vector_element %p, 0u
-    %x_84:f32 = load_vector_element %a, 0u
-    %x_87:f32 = load_vector_element %p, 1u
-    %x_89:f32 = load_vector_element %a, 1u
-    %x_93:f32 = load_vector_element %b, 0u
-    %x_94:f32 = load_vector_element %a, 0u
-    %x_97:f32 = load_vector_element %b, 1u
-    %x_98:f32 = load_vector_element %a, 1u
-    %31:f32 = sub %x_82, %x_84
-    %32:f32 = sub %x_87, %x_89
-    %33:vec2<f32> = construct %31, %32
-    store %param, %33
-    %34:f32 = sub %x_93, %x_94
-    %35:f32 = sub %x_97, %x_98
-    %36:vec2<f32> = construct %34, %35
-    store %param_1, %36
-    %x_102:f32 = load_vector_element %param, 0u
-    %x_104:f32 = load_vector_element %param_1, 1u
-    %x_107:f32 = load_vector_element %param_1, 0u
-    %x_109:f32 = load_vector_element %param, 1u
-    %41:f32 = mul %x_102, %x_104
-    %42:f32 = mul %x_107, %x_109
-    %x_111:f32 = sub %41, %42
+    %23:f32 = load_vector_element %p, 0u
+    %x_82:f32 = let %23
+    %25:f32 = load_vector_element %a, 0u
+    %x_84:f32 = let %25
+    %27:f32 = load_vector_element %p, 1u
+    %x_87:f32 = let %27
+    %29:f32 = load_vector_element %a, 1u
+    %x_89:f32 = let %29
+    %31:f32 = load_vector_element %b, 0u
+    %x_93:f32 = let %31
+    %33:f32 = load_vector_element %a, 0u
+    %x_94:f32 = let %33
+    %35:f32 = load_vector_element %b, 1u
+    %x_97:f32 = let %35
+    %37:f32 = load_vector_element %a, 1u
+    %x_98:f32 = let %37
+    %39:f32 = sub %x_82, %x_84
+    %40:f32 = sub %x_87, %x_89
+    %41:vec2<f32> = construct %39, %40
+    store %param, %41
+    %42:f32 = sub %x_93, %x_94
+    %43:f32 = sub %x_97, %x_98
+    %44:vec2<f32> = construct %42, %43
+    store %param_1, %44
+    %45:f32 = load_vector_element %param, 0u
+    %x_102:f32 = let %45
+    %47:f32 = load_vector_element %param_1, 1u
+    %x_104:f32 = let %47
+    %49:f32 = load_vector_element %param_1, 0u
+    %x_107:f32 = let %49
+    %51:f32 = load_vector_element %param, 1u
+    %x_109:f32 = let %51
+    %53:f32 = mul %x_102, %x_104
+    %54:f32 = mul %x_107, %x_109
+    %55:f32 = sub %53, %54
+    %x_111:f32 = let %55
     store %x_80, %x_111
-    %x_112:f32 = load_vector_element %p, 0u
-    %x_113:f32 = load_vector_element %b, 0u
-    %x_115:f32 = load_vector_element %p, 1u
-    %x_116:f32 = load_vector_element %b, 1u
-    %x_120:f32 = load_vector_element %c, 0u
-    %x_121:f32 = load_vector_element %b, 0u
-    %x_124:f32 = load_vector_element %c, 1u
-    %x_125:f32 = load_vector_element %b, 1u
-    %52:f32 = sub %x_112, %x_113
-    %53:f32 = sub %x_115, %x_116
-    %54:vec2<f32> = construct %52, %53
-    store %param_2, %54
-    %55:f32 = sub %x_120, %x_121
-    %56:f32 = sub %x_124, %x_125
-    %57:vec2<f32> = construct %55, %56
-    store %param_3, %57
-    %x_129:f32 = load_vector_element %param_2, 0u
-    %x_131:f32 = load_vector_element %param_3, 1u
-    %x_134:f32 = load_vector_element %param_3, 0u
-    %x_136:f32 = load_vector_element %param_2, 1u
-    %62:f32 = mul %x_129, %x_131
-    %63:f32 = mul %x_134, %x_136
-    %x_138:f32 = sub %62, %63
+    %57:f32 = load_vector_element %p, 0u
+    %x_112:f32 = let %57
+    %59:f32 = load_vector_element %b, 0u
+    %x_113:f32 = let %59
+    %61:f32 = load_vector_element %p, 1u
+    %x_115:f32 = let %61
+    %63:f32 = load_vector_element %b, 1u
+    %x_116:f32 = let %63
+    %65:f32 = load_vector_element %c, 0u
+    %x_120:f32 = let %65
+    %67:f32 = load_vector_element %b, 0u
+    %x_121:f32 = let %67
+    %69:f32 = load_vector_element %c, 1u
+    %x_124:f32 = let %69
+    %71:f32 = load_vector_element %b, 1u
+    %x_125:f32 = let %71
+    %73:f32 = sub %x_112, %x_113
+    %74:f32 = sub %x_115, %x_116
+    %75:vec2<f32> = construct %73, %74
+    store %param_2, %75
+    %76:f32 = sub %x_120, %x_121
+    %77:f32 = sub %x_124, %x_125
+    %78:vec2<f32> = construct %76, %77
+    store %param_3, %78
+    %79:f32 = load_vector_element %param_2, 0u
+    %x_129:f32 = let %79
+    %81:f32 = load_vector_element %param_3, 1u
+    %x_131:f32 = let %81
+    %83:f32 = load_vector_element %param_3, 0u
+    %x_134:f32 = let %83
+    %85:f32 = load_vector_element %param_2, 1u
+    %x_136:f32 = let %85
+    %87:f32 = mul %x_129, %x_131
+    %88:f32 = mul %x_134, %x_136
+    %89:f32 = sub %87, %88
+    %x_138:f32 = let %89
     store %x_79, %x_138
-    %x_139:bool = lt %x_111, 0.0f
-    %66:bool = lt %x_138, 0.0f
-    %x_141:bool = and %x_139, %66
+    %91:bool = lt %x_111, 0.0f
+    %x_139:bool = let %91
+    %93:bool = lt %x_138, 0.0f
+    %94:bool = and %x_139, %93
+    %x_141:bool = let %94
     store %x_148_phi, %x_141
-    %68:bool = eq %x_141, false
-    if %68 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %69:bool = gte %x_111, 0.0f
-        %70:bool = gte %x_138, 0.0f
-        %71:bool = and %69, %70
-        store %x_147, %71
-        %72:bool = load %x_147
-        store %x_148_phi, %72
+    %96:bool = eq %x_141, false
+    if %96 [t: $B3] {  # if_1
+      $B3: {  # true
+        %97:bool = gte %x_111, 0.0f
+        %98:bool = gte %x_138, 0.0f
+        %99:bool = and %97, %98
+        store %x_147, %99
+        %100:bool = load %x_147
+        store %x_148_phi, %100
         exit_if  # if_1
       }
     }
     %x_153_phi:ptr<function, i32, read_write> = var
-    %x_148:bool = load %x_148_phi
-    %75:bool = eq %x_148, false
-    if %75 [t: %b4] {  # if_2
-      %b4 = block {  # true
+    %102:bool = load %x_148_phi
+    %x_148:bool = let %102
+    %104:bool = eq %x_148, false
+    if %104 [t: $B4] {  # if_2
+      $B4: {  # true
         store %x_153_phi, 0i
-        loop [b: %b5, c: %b6] {  # loop_1
-          %b5 = block {  # body
+        loop [b: $B5, c: $B6] {  # loop_1
+          $B5: {  # body
             %x_154:ptr<function, i32, read_write> = var
             %x_164_phi:ptr<function, i32, read_write> = var
-            %x_153:i32 = load %x_153_phi
-            %79:ptr<uniform, vec2<f32>, read> = access %x_11, 0u
-            %x_159:f32 = load_vector_element %79, 1u
-            %x_160:i32 = convert %x_159
-            %82:bool = lt %x_153, %x_160
-            if %82 [t: %b7, f: %b8] {  # if_3
-              %b7 = block {  # true
+            %107:i32 = load %x_153_phi
+            %x_153:i32 = let %107
+            %109:ptr<uniform, vec2<f32>, read> = access %x_11, 0u
+            %110:f32 = load_vector_element %109, 1u
+            %x_159:f32 = let %110
+            %112:i32 = call %tint_f32_to_i32, %x_159
+            %x_160:i32 = let %112
+            %115:bool = lt %x_153, %x_160
+            if %115 [t: $B7, f: $B8] {  # if_3
+              $B7: {  # true
                 exit_if  # if_3
               }
-              %b8 = block {  # false
+              $B8: {  # false
                 exit_loop  # loop_1
               }
             }
             store %x_GLF_color, vec4<f32>(1.0f)
             store %x_164_phi, 0i
-            loop [b: %b9, c: %b10] {  # loop_2
-              %b9 = block {  # body
+            loop [b: $B9, c: $B10] {  # loop_2
+              $B9: {  # body
                 %x_165:ptr<function, i32, read_write> = var
-                %x_164:i32 = load %x_164_phi
-                %85:bool = lt %x_164, %x_160
-                if %85 [t: %b11, f: %b12] {  # if_4
-                  %b11 = block {  # true
+                %117:i32 = load %x_164_phi
+                %x_164:i32 = let %117
+                %119:bool = lt %x_164, %x_160
+                if %119 [t: $B11, f: $B12] {  # if_4
+                  $B11: {  # true
                     exit_if  # if_4
                   }
-                  %b12 = block {  # false
+                  $B12: {  # false
                     exit_loop  # loop_2
                   }
                 }
                 store %x_GLF_color, vec4<f32>(1.0f)
-                continue %b10
+                continue  # -> $B10
               }
-              %b10 = block {  # continuing
-                %86:i32 = add %x_164, 1i
-                store %x_165, %86
-                %87:i32 = load %x_165
-                store %x_164_phi, %87
-                next_iteration %b9
+              $B10: {  # continuing
+                %120:i32 = add %x_164, 1i
+                store %x_165, %120
+                %121:i32 = load %x_165
+                store %x_164_phi, %121
+                next_iteration  # -> $B9
               }
             }
-            continue %b6
+            continue  # -> $B6
           }
-          %b6 = block {  # continuing
-            %88:i32 = add %x_153, 1i
-            store %x_154, %88
-            %89:i32 = load %x_154
-            store %x_153_phi, %89
-            next_iteration %b5
+          $B6: {  # continuing
+            %122:i32 = add %x_153, 1i
+            store %x_154, %122
+            %123:i32 = load %x_154
+            store %x_153_phi, %123
+            next_iteration  # -> $B5
           }
         }
         ret 0i
       }
     }
-    %x_171:f32 = load_vector_element %p, 0u
-    %x_172:f32 = load_vector_element %c, 0u
-    %x_174:f32 = load_vector_element %p, 1u
-    %x_175:f32 = load_vector_element %c, 1u
-    %x_178:f32 = load_vector_element %a, 0u
-    %x_179:f32 = load_vector_element %c, 0u
-    %x_181:f32 = load_vector_element %a, 1u
-    %x_182:f32 = load_vector_element %c, 1u
-    %98:f32 = sub %x_171, %x_172
-    %99:f32 = sub %x_174, %x_175
-    %100:vec2<f32> = construct %98, %99
-    store %param_4, %100
-    %101:f32 = sub %x_178, %x_179
-    %102:f32 = sub %x_181, %x_182
-    %103:vec2<f32> = construct %101, %102
-    store %param_5, %103
-    %x_186:f32 = load_vector_element %param_4, 0u
-    %x_188:f32 = load_vector_element %param_5, 1u
-    %x_191:f32 = load_vector_element %param_5, 0u
-    %x_193:f32 = load_vector_element %param_4, 1u
-    %108:f32 = mul %x_186, %x_188
-    %109:f32 = mul %x_191, %x_193
-    %x_195:f32 = sub %108, %109
+    %124:f32 = load_vector_element %p, 0u
+    %x_171:f32 = let %124
+    %126:f32 = load_vector_element %c, 0u
+    %x_172:f32 = let %126
+    %128:f32 = load_vector_element %p, 1u
+    %x_174:f32 = let %128
+    %130:f32 = load_vector_element %c, 1u
+    %x_175:f32 = let %130
+    %132:f32 = load_vector_element %a, 0u
+    %x_178:f32 = let %132
+    %134:f32 = load_vector_element %c, 0u
+    %x_179:f32 = let %134
+    %136:f32 = load_vector_element %a, 1u
+    %x_181:f32 = let %136
+    %138:f32 = load_vector_element %c, 1u
+    %x_182:f32 = let %138
+    %140:f32 = sub %x_171, %x_172
+    %141:f32 = sub %x_174, %x_175
+    %142:vec2<f32> = construct %140, %141
+    store %param_4, %142
+    %143:f32 = sub %x_178, %x_179
+    %144:f32 = sub %x_181, %x_182
+    %145:vec2<f32> = construct %143, %144
+    store %param_5, %145
+    %146:f32 = load_vector_element %param_4, 0u
+    %x_186:f32 = let %146
+    %148:f32 = load_vector_element %param_5, 1u
+    %x_188:f32 = let %148
+    %150:f32 = load_vector_element %param_5, 0u
+    %x_191:f32 = let %150
+    %152:f32 = load_vector_element %param_4, 1u
+    %x_193:f32 = let %152
+    %154:f32 = mul %x_186, %x_188
+    %155:f32 = mul %x_191, %x_193
+    %156:f32 = sub %154, %155
+    %x_195:f32 = let %156
     store %x_78, %x_195
-    %111:bool = lt %x_195, 0.0f
-    %x_197:bool = and %x_139, %111
+    %158:bool = lt %x_195, 0.0f
+    %159:bool = and %x_139, %158
+    %x_197:bool = let %159
     store %x_204_phi, %x_197
-    %113:bool = eq %x_197, false
-    if %113 [t: %b13] {  # if_5
-      %b13 = block {  # true
-        %114:bool = gte %x_111, 0.0f
-        %115:bool = gte %x_195, 0.0f
-        %116:bool = and %114, %115
-        store %x_203, %116
-        %117:bool = load %x_203
-        store %x_204_phi, %117
+    %161:bool = eq %x_197, false
+    if %161 [t: $B13] {  # if_5
+      $B13: {  # true
+        %162:bool = gte %x_111, 0.0f
+        %163:bool = gte %x_195, 0.0f
+        %164:bool = and %162, %163
+        store %x_203, %164
+        %165:bool = load %x_203
+        store %x_204_phi, %165
         exit_if  # if_5
       }
     }
-    %x_204:bool = load %x_204_phi
-    %119:bool = eq %x_204, false
-    if %119 [t: %b14] {  # if_6
-      %b14 = block {  # true
+    %166:bool = load %x_204_phi
+    %x_204:bool = let %166
+    %168:bool = eq %x_204, false
+    if %168 [t: $B14] {  # if_6
+      $B14: {  # true
         ret 0i
       }
     }
     ret 1i
   }
 }
-%main_1 = func():void -> %b15 {
-  %b15 = block {
+%main_1 = func():void {
+  $B15: {
     %param_6:ptr<function, vec2<f32>, read_write> = var
     %param_7:ptr<function, vec2<f32>, read_write> = var
     %param_8:ptr<function, vec2<f32>, read_write> = var
     %param_9:ptr<function, vec2<f32>, read_write> = var
-    %x_60:vec4<f32> = load %gl_FragCoord
-    %126:ptr<uniform, vec2<f32>, read> = access %x_19, 0u
-    %x_63:vec2<f32> = load %126
-    %128:f32 = access %x_60, 0u
-    %129:f32 = access %x_60, 1u
-    %130:vec2<f32> = construct %128, %129
-    %131:vec2<f32> = div %130, %x_63
-    store %param_6, %131
+    %174:vec4<f32> = load %gl_FragCoord
+    %x_60:vec4<f32> = let %174
+    %176:ptr<uniform, vec2<f32>, read> = access %x_19, 0u
+    %177:vec2<f32> = load %176
+    %x_63:vec2<f32> = let %177
+    %179:f32 = access %x_60, 0u
+    %180:f32 = access %x_60, 1u
+    %181:vec2<f32> = construct %179, %180
+    %182:vec2<f32> = div %181, %x_63
+    store %param_6, %182
     store %param_7, vec2<f32>(0.69999998807907104492f, 0.30000001192092895508f)
     store %param_8, vec2<f32>(0.5f, 0.89999997615814208984f)
     store %param_9, vec2<f32>(0.10000000149011611938f, 0.40000000596046447754f)
-    %x_65:i32 = call %pointInTriangle_vf2_vf2_vf2_vf2_, %param_6, %param_7, %param_8, %param_9
-    %133:bool = eq %x_65, 1i
-    if %133 [t: %b16, f: %b17] {  # if_7
-      %b16 = block {  # true
-        %134:ptr<uniform, vec2<f32>, read> = access %x_11, 0u
-        %x_71:f32 = load_vector_element %134, 1u
-        %136:ptr<uniform, vec2<f32>, read> = access %x_11, 0u
-        %x_73:f32 = load_vector_element %136, 0u
-        %138:bool = gte %x_71, %x_73
-        if %138 [t: %b18] {  # if_8
-          %b18 = block {  # true
+    %183:i32 = call %pointInTriangle_vf2_vf2_vf2_vf2_, %param_6, %param_7, %param_8, %param_9
+    %x_65:i32 = let %183
+    %185:bool = eq %x_65, 1i
+    if %185 [t: $B16, f: $B17] {  # if_7
+      $B16: {  # true
+        %186:ptr<uniform, vec2<f32>, read> = access %x_11, 0u
+        %187:f32 = load_vector_element %186, 1u
+        %x_71:f32 = let %187
+        %189:ptr<uniform, vec2<f32>, read> = access %x_11, 0u
+        %190:f32 = load_vector_element %189, 0u
+        %x_73:f32 = let %190
+        %192:bool = gte %x_71, %x_73
+        if %192 [t: $B18] {  # if_8
+          $B18: {  # true
             store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
             exit_if  # if_8
           }
         }
         exit_if  # if_7
       }
-      %b17 = block {  # false
+      $B17: {  # false
         store %x_GLF_color, vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_7
       }
@@ -251,13 +304,23 @@
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b19 {
-  %b19 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B19: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %141:void = call %main_1
-    %142:vec4<f32> = load %x_GLF_color
-    %143:main_out = construct %142
-    ret %143
+    %195:void = call %main_1
+    %196:vec4<f32> = load %x_GLF_color
+    %197:main_out = construct %196
+    ret %197
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B20: {
+    %199:i32 = convert %value
+    %200:bool = gte %value, -2147483648.0f
+    %201:i32 = select -2147483648i, %199, %200
+    %202:bool = lte %value, 2147483520.0f
+    %203:i32 = select 2147483647i, %201, %202
+    ret %203
   }
 }
 
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
index 941c27d..bdc7c2e 100644
--- 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
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: struct_base = struct @align(4) {
+../../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)
@@ -14,14 +14,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%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
@@ -30,35 +30,35 @@
     %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 = block {  # true
+    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 = convert %11
-        %13:ptr<private, i32, read_write> = access %struct_array, %12, 2u
-        %14:i32 = load %13
-        store %index, %14
+        %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 = block {  # false
-        %15:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
-        %16:f32 = load_vector_element %15, 1u
-        %17:i32 = convert %16
-        %18:ptr<private, i32, read_write> = access %struct_array, %17, 1u
-        %19:i32 = load %18
-        store %index, %19
+      $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
       }
     }
-    %20:ptr<private, i32, read_write> = access %struct_array, 1i, 1u
-    %21:i32 = load %20
-    %22:bool = eq %21, 1i
-    if %22 [t: %b5, f: %b6] {  # if_2
-      %b5 = block {  # true
+    %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 = block {  # false
+      $B6: {  # false
         store %x_GLF_color, vec4<f32>(1.0f)
         exit_if  # if_2
       }
@@ -66,12 +66,22 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b7 {
-  %b7 = block {
-    %24:void = call %main_1
-    %25:vec4<f32> = load %x_GLF_color
-    %26:main_out = construct %25
-    ret %26
+%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
   }
 }
 
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
index 55c7eaa..3a47ff9 100644
--- 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
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: struct_base = struct @align(4) {
+../../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)
@@ -14,51 +14,57 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%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
-    %x_39:i32 = load %7
-    %9:bool = eq %x_39, 1i
-    if %9 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
-        %10:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
-        %x_45:f32 = load_vector_element %10, 0u
-        %12:i32 = convert %x_45
-        %13:ptr<private, i32, read_write> = access %struct_array, %12, 2u
-        %x_48:i32 = load %13
+    %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 = block {  # false
-        %15:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
-        %x_50:f32 = load_vector_element %15, 1u
-        %17:i32 = convert %x_50
-        %18:ptr<private, i32, read_write> = access %struct_array, %17, 1u
-        %x_53:i32 = load %18
+      $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
       }
     }
-    %20:ptr<private, i32, read_write> = access %struct_array, 1i, 1u
-    %x_55:i32 = load %20
-    %22:bool = eq %x_55, 1i
-    if %22 [t: %b5, f: %b6] {  # if_2
-      %b5 = block {  # true
+    %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 = block {  # false
+      $B6: {  # false
         store %x_GLF_color, vec4<f32>(1.0f)
         exit_if  # if_2
       }
@@ -66,12 +72,22 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b7 {
-  %b7 = block {
-    %24:void = call %main_1
-    %25:vec4<f32> = load %x_GLF_color
-    %26:main_out = construct %25
-    ret %26
+%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
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/struct-controlled-loop/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/struct-controlled-loop/0-opt.spvasm.expected.ir.msl
index fd518ca..ee4cfae 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/struct-controlled-loop/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/struct-controlled-loop/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -13,65 +13,79 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %ll:ptr<function, S, read_write> = var
     %sums:ptr<function, array<f32, 9>, read_write> = var
     store %ll, S(0i, vec3<bool>(true))
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %6:ptr<function, i32, read_write> = access %ll, 0u
         %7:i32 = load %6
-        %8:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-        %9:f32 = load_vector_element %8, 1u
-        %10:i32 = convert %9
-        %11:bool = neq %7, %10
-        if %11 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %8:i32 = let %7
+        %9:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
+        %10:f32 = load_vector_element %9, 1u
+        %11:i32 = call %tint_f32_to_i32, %10
+        %13:bool = neq %8, %11
+        if %13 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %12:ptr<function, f32, read_write> = access %sums, 0i
-        store %12, 0.0f
-        continue %b4
+        %14:ptr<function, f32, read_write> = access %sums, 0i
+        store %14, 0.0f
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_13:S = load %ll
-        %x_50:S = load %ll
+      $B4: {  # continuing
+        %15:S = load %ll
+        %x_13:S = let %15
+        %17:S = load %ll
+        %x_50:S = let %17
         %x_51_1:ptr<function, S, read_write> = var, %x_50
-        %16:ptr<function, i32, read_write> = access %x_51_1, 0u
-        %17:i32 = access %x_13, 0u
-        %18:i32 = add %17, 1i
-        store %16, %18
-        %19:S = load %x_51_1
-        store %ll, %19
-        next_iteration %b3
+        %20:ptr<function, i32, read_write> = access %x_51_1, 0u
+        %21:i32 = access %x_13, 0u
+        %22:i32 = add %21, 1i
+        store %20, %22
+        %23:S = load %x_51_1
+        store %ll, %23
+        next_iteration  # -> $B3
       }
     }
-    %20:ptr<function, f32, read_write> = access %sums, 0i
-    %21:f32 = load %20
-    %x_54:vec2<f32> = construct %21
-    %23:f32 = access %x_54, 0u
-    %24:f32 = access %x_54, 1u
-    %25:vec4<f32> = construct 1.0f, %23, %24, 1.0f
-    store %x_GLF_color, %25
+    %24:ptr<function, f32, read_write> = access %sums, 0i
+    %25:f32 = load %24
+    %26:vec2<f32> = construct %25
+    %x_54:vec2<f32> = let %26
+    %28:f32 = access %x_54, 0u
+    %29:f32 = access %x_54, 1u
+    %30:vec4<f32> = construct 1.0f, %28, %29, 1.0f
+    store %x_GLF_color, %30
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b7 {
-  %b7 = block {
-    %27:void = call %main_1
-    %28:vec4<f32> = load %x_GLF_color
-    %29:main_out = construct %28
-    ret %29
+%tint_symbol = @fragment func():main_out {
+  $B7: {
+    %32:void = call %main_1
+    %33:vec4<f32> = load %x_GLF_color
+    %34:main_out = construct %33
+    ret %34
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B8: {
+    %36:i32 = convert %value
+    %37:bool = gte %value, -2147483648.0f
+    %38:i32 = select -2147483648i, %36, %37
+    %39:bool = lte %value, 2147483520.0f
+    %40:i32 = select 2147483647i, %38, %39
+    ret %40
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/struct-controlled-loop/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/struct-controlled-loop/0-opt.wgsl.expected.ir.msl
index b8aeaa0..3a44572 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/struct-controlled-loop/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/struct-controlled-loop/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -13,65 +13,82 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %ll:ptr<function, S, read_write> = var
     %sums:ptr<function, array<f32, 9>, read_write> = var
     store %ll, S(0i, vec3<bool>(true))
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_12:S = load %ll
-        %7:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-        %x_45:f32 = load_vector_element %7, 1u
-        %9:i32 = access %x_12, 0u
-        %10:i32 = convert %x_45
-        %11:bool = neq %9, %10
-        if %11 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %6:S = load %ll
+        %x_12:S = let %6
+        %8:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
+        %9:f32 = load_vector_element %8, 1u
+        %x_45:f32 = let %9
+        %11:i32 = access %x_12, 0u
+        %12:i32 = call %tint_f32_to_i32, %x_45
+        %14:bool = neq %11, %12
+        if %14 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %12:ptr<function, f32, read_write> = access %sums, 0i
-        store %12, 0.0f
-        continue %b4
+        %15:ptr<function, f32, read_write> = access %sums, 0i
+        store %15, 0.0f
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_13:S = load %ll
-        %x_50:S = load %ll
+      $B4: {  # continuing
+        %16:S = load %ll
+        %x_13:S = let %16
+        %18:S = load %ll
+        %x_50:S = let %18
         %x_51_1:ptr<function, S, read_write> = var, %x_50
-        %16:ptr<function, i32, read_write> = access %x_51_1, 0u
-        %17:i32 = access %x_13, 0u
-        %18:i32 = add %17, 1i
-        store %16, %18
-        %x_51:S = load %x_51_1
+        %21:ptr<function, i32, read_write> = access %x_51_1, 0u
+        %22:i32 = access %x_13, 0u
+        %23:i32 = add %22, 1i
+        store %21, %23
+        %24:S = load %x_51_1
+        %x_51:S = let %24
         store %ll, %x_51
-        next_iteration %b3
+        next_iteration  # -> $B3
       }
     }
-    %20:ptr<function, f32, read_write> = access %sums, 0i
-    %x_53:f32 = load %20
-    %x_54:vec2<f32> = construct %x_53, %x_53
-    %23:f32 = access %x_54, 0u
-    %24:f32 = access %x_54, 1u
-    %25:vec4<f32> = construct 1.0f, %23, %24, 1.0f
-    store %x_GLF_color, %25
+    %26:ptr<function, f32, read_write> = access %sums, 0i
+    %27:f32 = load %26
+    %x_53:f32 = let %27
+    %29:vec2<f32> = construct %x_53, %x_53
+    %x_54:vec2<f32> = let %29
+    %31:f32 = access %x_54, 0u
+    %32:f32 = access %x_54, 1u
+    %33:vec4<f32> = construct 1.0f, %31, %32, 1.0f
+    store %x_GLF_color, %33
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b7 {
-  %b7 = block {
-    %27:void = call %main_1
-    %28:vec4<f32> = load %x_GLF_color
-    %29:main_out = construct %28
-    ret %29
+%tint_symbol = @fragment func():main_out {
+  $B7: {
+    %35:void = call %main_1
+    %36:vec4<f32> = load %x_GLF_color
+    %37:main_out = construct %36
+    ret %37
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B8: {
+    %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
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/struct-used-as-temporary/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/struct-used-as-temporary/0-opt.spvasm.expected.ir.msl
index 51e0679..50edaff 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/struct-used-as-temporary/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/struct-used-as-temporary/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(16) {
   field0:vec4<f32> @offset(0)
 }
 
@@ -12,30 +12,31 @@
   x_3_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_3:ptr<private, vec4<f32>, read_write> = var
   %x_5:ptr<uniform, S, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %4:ptr<uniform, vec4<f32>, read> = access %x_5, 0u
-    %x_20:vec4<f32> = load %4
+    %5:vec4<f32> = load %4
+    %x_20:vec4<f32> = let %5
     %x_21_1:ptr<function, S_1, read_write> = var, S_1(vec4<f32>(0.0f))
-    %7:ptr<function, vec4<f32>, read_write> = access %x_21_1, 0u
-    store %7, %x_20
     %8:ptr<function, vec4<f32>, read_write> = access %x_21_1, 0u
-    %9:vec4<f32> = load %8
-    store %x_3, %9
+    store %8, %x_20
+    %9:ptr<function, vec4<f32>, read_write> = access %x_21_1, 0u
+    %10:vec4<f32> = load %9
+    store %x_3, %10
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b3 {
-  %b3 = block {
-    %11:void = call %main_1
-    %12:vec4<f32> = load %x_3
-    %13:main_out = construct %12
-    ret %13
+%tint_symbol = @fragment func():main_out {
+  $B3: {
+    %12:void = call %main_1
+    %13:vec4<f32> = load %x_3
+    %14:main_out = construct %13
+    ret %14
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/struct-used-as-temporary/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/struct-used-as-temporary/0-opt.wgsl.expected.ir.msl
index 23ba2dd..6e59fc4 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/struct-used-as-temporary/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/struct-used-as-temporary/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(16) {
   field0:vec4<f32> @offset(0)
 }
 
@@ -12,30 +12,32 @@
   x_3_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_3:ptr<private, vec4<f32>, read_write> = var
   %x_5:ptr<uniform, S, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %4:ptr<uniform, vec4<f32>, read> = access %x_5, 0u
-    %x_20:vec4<f32> = load %4
+    %5:vec4<f32> = load %4
+    %x_20:vec4<f32> = let %5
     %x_21_1:ptr<function, S_1, read_write> = var, S_1(vec4<f32>(0.0f))
-    %7:ptr<function, vec4<f32>, read_write> = access %x_21_1, 0u
-    store %7, %x_20
-    %x_21:S_1 = load %x_21_1
-    %9:vec4<f32> = access %x_21, 0u
-    store %x_3, %9
+    %8:ptr<function, vec4<f32>, read_write> = access %x_21_1, 0u
+    store %8, %x_20
+    %9:S_1 = load %x_21_1
+    %x_21:S_1 = let %9
+    %11:vec4<f32> = access %x_21, 0u
+    store %x_3, %11
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b3 {
-  %b3 = block {
-    %11:void = call %main_1
-    %12:vec4<f32> = load %x_3
-    %13:main_out = construct %12
-    ret %13
+%tint_symbol = @fragment func():main_out {
+  $B3: {
+    %13:void = call %main_1
+    %14:vec4<f32> = load %x_3
+    %15:main_out = construct %14
+    ret %15
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/switch-if-discard/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/switch-if-discard/0-opt.spvasm.expected.ir.msl
index 747316c..c9ff4d8 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/switch-if-discard/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/switch-if-discard/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,32 +8,34 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
-    %4:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
-    %x_25:f32 = load_vector_element %4, 1u
-    %6:i32 = convert %x_25
-    switch %6 [c: (-1i, %b3), c: (default, %b4)] {  # switch_1
-      %b3 = block {  # case
-        %7:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
-        %8:f32 = load_vector_element %7, 1u
-        %9:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
-        %10:f32 = load_vector_element %9, 0u
-        %11:bool = gt %8, %10
-        if %11 [t: %b5] {  # if_1
-          %b5 = block {  # true
-            discard
+%main_1 = func():void {
+  $B2: {
+    %5:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
+    %6:f32 = load_vector_element %5, 1u
+    %x_25:f32 = let %6
+    %8:i32 = call %tint_f32_to_i32, %x_25
+    switch %8 [c: (-1i, $B3), c: (default, $B4)] {  # switch_1
+      $B3: {  # case
+        %10:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
+        %11:f32 = load_vector_element %10, 1u
+        %12:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
+        %13:f32 = load_vector_element %12, 0u
+        %14:bool = gt %11, %13
+        if %14 [t: $B5] {  # if_1
+          $B5: {  # true
+            store %continue_execution, false
             exit_if  # if_1
           }
         }
         exit_switch  # switch_1
       }
-      %b4 = block {  # case
+      $B4: {  # case
         exit_switch  # switch_1
       }
     }
@@ -41,12 +43,29 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b6 {
-  %b6 = block {
-    %13:void = call %main_1
-    %14:vec4<f32> = load %x_GLF_color
-    %15:main_out = construct %14
-    ret %15
+%tint_symbol = @fragment func():main_out {
+  $B6: {
+    %16:void = call %main_1
+    %17:vec4<f32> = load %x_GLF_color
+    %18:main_out = construct %17
+    %19:bool = load %continue_execution
+    %20:bool = eq %19, false
+    if %20 [t: $B7] {  # if_2
+      $B7: {  # true
+        terminate_invocation
+      }
+    }
+    ret %18
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B8: {
+    %22:i32 = convert %value
+    %23:bool = gte %value, -2147483648.0f
+    %24:i32 = select -2147483648i, %22, %23
+    %25:bool = lte %value, 2147483520.0f
+    %26:i32 = select 2147483647i, %24, %25
+    ret %26
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/switch-if-discard/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/switch-if-discard/0-opt.wgsl.expected.ir.msl
index 3d9e5ca..4548ee8 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/switch-if-discard/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/switch-if-discard/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,32 +8,36 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
-    %4:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
-    %x_25:f32 = load_vector_element %4, 1u
-    %6:i32 = convert %x_25
-    switch %6 [c: (-1i, %b3), c: (default, %b4)] {  # switch_1
-      %b3 = block {  # case
-        %7:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
-        %x_30:f32 = load_vector_element %7, 1u
-        %9:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
-        %x_32:f32 = load_vector_element %9, 0u
-        %11:bool = gt %x_30, %x_32
-        if %11 [t: %b5] {  # if_1
-          %b5 = block {  # true
-            discard
+%main_1 = func():void {
+  $B2: {
+    %5:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
+    %6:f32 = load_vector_element %5, 1u
+    %x_25:f32 = let %6
+    %8:i32 = call %tint_f32_to_i32, %x_25
+    switch %8 [c: (-1i, $B3), c: (default, $B4)] {  # switch_1
+      $B3: {  # case
+        %10:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
+        %11:f32 = load_vector_element %10, 1u
+        %x_30:f32 = let %11
+        %13:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
+        %14:f32 = load_vector_element %13, 0u
+        %x_32:f32 = let %14
+        %16:bool = gt %x_30, %x_32
+        if %16 [t: $B5] {  # if_1
+          $B5: {  # true
+            store %continue_execution, false
             exit_if  # if_1
           }
         }
         exit_switch  # switch_1
       }
-      %b4 = block {  # case
+      $B4: {  # case
         exit_switch  # switch_1
       }
     }
@@ -41,12 +45,29 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b6 {
-  %b6 = block {
-    %13:void = call %main_1
-    %14:vec4<f32> = load %x_GLF_color
-    %15:main_out = construct %14
-    ret %15
+%tint_symbol = @fragment func():main_out {
+  $B6: {
+    %18:void = call %main_1
+    %19:vec4<f32> = load %x_GLF_color
+    %20:main_out = construct %19
+    %21:bool = load %continue_execution
+    %22:bool = eq %21, false
+    if %22 [t: $B7] {  # if_2
+      $B7: {  # true
+        terminate_invocation
+      }
+    }
+    ret %20
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B8: {
+    %24:i32 = convert %value
+    %25:bool = gte %value, -2147483648.0f
+    %26:i32 = select -2147483648i, %24, %25
+    %27:bool = lte %value, 2147483520.0f
+    %28:i32 = select 2147483647i, %26, %27
+    ret %28
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/switch-inside-while-always-return/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/switch-inside-while-always-return/0-opt.spvasm.expected.ir.msl
index dc1f239..4f8a581 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/switch-inside-while-always-return/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/switch-inside-while-always-return/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   zero:f32 @offset(0)
 }
 
@@ -8,62 +8,74 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%merge_ = func():i32 -> %b2 {
-  %b2 = block {
+%merge_ = func():i32 {
+  $B2: {
     %4:ptr<uniform, f32, read> = access %x_6, 0u
     %5:f32 = load %4
     %6:bool = lt %5, 0.0f
-    if %6 [t: %b3] {  # if_1
-      %b3 = block {  # true
+    if %6 [t: $B3] {  # if_1
+      $B3: {  # true
         ret 0i
       }
     }
     ret 0i
   }
 }
-%main_1 = func():void -> %b4 {
-  %b4 = block {
+%main_1 = func():void {
+  $B4: {
     %res:ptr<function, i32, read_write> = var
     store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
-    loop [b: %b5, c: %b6] {  # loop_1
-      %b5 = block {  # body
+    loop [b: $B5, c: $B6] {  # loop_1
+      $B5: {  # body
         %9:ptr<uniform, f32, read> = access %x_6, 0u
-        %x_32:f32 = load %9
-        %11:i32 = convert %x_32
-        switch %11 [c: (0i, %b7), c: (default, %b8)] {  # switch_1
-          %b7 = block {  # case
+        %10:f32 = load %9
+        %x_32:f32 = let %10
+        %12:i32 = call %tint_f32_to_i32, %x_32
+        switch %12 [c: (0i, $B7), c: (default, $B8)] {  # switch_1
+          $B7: {  # case
             ret
           }
-          %b8 = block {  # case
+          $B8: {  # case
             exit_switch  # switch_1
           }
         }
-        continue %b6
+        continue  # -> $B6
       }
-      %b6 = block {  # continuing
-        break_if true %b5
+      $B6: {  # continuing
+        break_if true  # -> [t: exit_loop loop_1, f: $B5]
       }
     }
-    %x_8:i32 = call %merge_
+    %14:i32 = call %merge_
+    %x_8:i32 = let %14
     store %res, %x_8
-    %13:i32 = load %res
-    %14:f32 = convert %13
-    %15:vec4<f32> = construct %14
-    store %x_GLF_color, %15
+    %16:i32 = load %res
+    %17:f32 = convert %16
+    %18:vec4<f32> = construct %17
+    store %x_GLF_color, %18
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b9 {
-  %b9 = block {
-    %17:void = call %main_1
-    %18:vec4<f32> = load %x_GLF_color
-    %19:main_out = construct %18
-    ret %19
+%tint_symbol = @fragment func():main_out {
+  $B9: {
+    %20:void = call %main_1
+    %21:vec4<f32> = load %x_GLF_color
+    %22:main_out = construct %21
+    ret %22
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B10: {
+    %24:i32 = convert %value
+    %25:bool = gte %value, -2147483648.0f
+    %26:i32 = select -2147483648i, %24, %25
+    %27:bool = lte %value, 2147483520.0f
+    %28:i32 = select 2147483647i, %26, %27
+    ret %28
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/switch-inside-while-always-return/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/switch-inside-while-always-return/0-opt.wgsl.expected.ir.msl
index 4673466..832d90e 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/switch-inside-while-always-return/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/switch-inside-while-always-return/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   zero:f32 @offset(0)
 }
 
@@ -8,62 +8,77 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%merge_ = func():i32 -> %b2 {
-  %b2 = block {
+%merge_ = func():i32 {
+  $B2: {
     %4:ptr<uniform, f32, read> = access %x_6, 0u
-    %x_40:f32 = load %4
-    %6:bool = lt %x_40, 0.0f
-    if %6 [t: %b3] {  # if_1
-      %b3 = block {  # true
+    %5:f32 = load %4
+    %x_40:f32 = let %5
+    %7:bool = lt %x_40, 0.0f
+    if %7 [t: $B3] {  # if_1
+      $B3: {  # true
         ret 0i
       }
     }
     ret 0i
   }
 }
-%main_1 = func():void -> %b4 {
-  %b4 = block {
+%main_1 = func():void {
+  $B4: {
     %res:ptr<function, i32, read_write> = var
     store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
-    loop [b: %b5, c: %b6] {  # loop_1
-      %b5 = block {  # body
-        %9:ptr<uniform, f32, read> = access %x_6, 0u
-        %x_32:f32 = load %9
-        %11:i32 = convert %x_32
-        switch %11 [c: (0i, %b7), c: (default, %b8)] {  # switch_1
-          %b7 = block {  # case
+    loop [b: $B5, c: $B6] {  # loop_1
+      $B5: {  # body
+        %10:ptr<uniform, f32, read> = access %x_6, 0u
+        %11:f32 = load %10
+        %x_32:f32 = let %11
+        %13:i32 = call %tint_f32_to_i32, %x_32
+        switch %13 [c: (0i, $B7), c: (default, $B8)] {  # switch_1
+          $B7: {  # case
             ret
           }
-          %b8 = block {  # case
+          $B8: {  # case
             exit_switch  # switch_1
           }
         }
-        continue %b6
+        continue  # -> $B6
       }
-      %b6 = block {  # continuing
-        break_if true %b5
+      $B6: {  # continuing
+        break_if true  # -> [t: exit_loop loop_1, f: $B5]
       }
     }
-    %x_8:i32 = call %merge_
+    %15:i32 = call %merge_
+    %x_8:i32 = let %15
     store %res, %x_8
-    %x_9:i32 = load %res
-    %x_36:f32 = convert %x_9
-    %15:vec4<f32> = construct %x_36, %x_36, %x_36, %x_36
-    store %x_GLF_color, %15
+    %17:i32 = load %res
+    %x_9:i32 = let %17
+    %19:f32 = convert %x_9
+    %x_36:f32 = let %19
+    %21:vec4<f32> = construct %x_36, %x_36, %x_36, %x_36
+    store %x_GLF_color, %21
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b9 {
-  %b9 = block {
-    %17:void = call %main_1
-    %18:vec4<f32> = load %x_GLF_color
-    %19:main_out = construct %18
-    ret %19
+%tint_symbol = @fragment func():main_out {
+  $B9: {
+    %23:void = call %main_1
+    %24:vec4<f32> = load %x_GLF_color
+    %25:main_out = construct %24
+    ret %25
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B10: {
+    %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
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/switch-with-empty-if-false/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/switch-with-empty-if-false/0.spvasm.expected.ir.msl
index 2b8690e..e186c30 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/switch-with-empty-if-false/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/switch-with-empty-if-false/0.spvasm.expected.ir.msl
@@ -1,6 +1,42 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Switch
+../../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
+}
+
+%main_1 = func():void {
+  $B2: {
+    switch 0i [c: (0i, $B3), c: (default, $B4)] {  # switch_1
+      $B3: {  # case
+        if false [t: $B5] {  # if_1
+          $B5: {  # true
+            exit_if  # if_1
+          }
+        }
+        exit_switch  # switch_1
+      }
+      $B4: {  # case
+        exit_switch  # switch_1
+      }
+    }
+    store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B6: {
+    %4:void = call %main_1
+    %5:vec4<f32> = load %x_GLF_color
+    %6:main_out = construct %5
+    ret %6
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/switch-with-empty-if-false/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/switch-with-empty-if-false/0.wgsl.expected.ir.msl
index 2b8690e..e186c30 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/switch-with-empty-if-false/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/switch-with-empty-if-false/0.wgsl.expected.ir.msl
@@ -1,6 +1,42 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Switch
+../../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
+}
+
+%main_1 = func():void {
+  $B2: {
+    switch 0i [c: (0i, $B3), c: (default, $B4)] {  # switch_1
+      $B3: {  # case
+        if false [t: $B5] {  # if_1
+          $B5: {  # true
+            exit_if  # if_1
+          }
+        }
+        exit_switch  # switch_1
+      }
+      $B4: {  # case
+        exit_switch  # switch_1
+      }
+    }
+    store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B6: {
+    %4:void = call %main_1
+    %5:vec4<f32> = load %x_GLF_color
+    %6:main_out = construct %5
+    ret %6
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/transpose-rectangular-matrix/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/transpose-rectangular-matrix/0.spvasm.expected.ir.msl
index 2e88a5f..082755f 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/transpose-rectangular-matrix/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/transpose-rectangular-matrix/0.spvasm.expected.ir.msl
@@ -1,6 +1,69 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::LoadVectorElement
+../../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: {
+    %x_37:ptr<function, mat4x3<f32>, read_write> = var
+    %x_38:ptr<function, mat4x3<f32>, read_write> = var
+    %x_48:ptr<function, vec3<f32>, read_write> = var
+    %7:f32 = load_vector_element %gl_FragCoord, 1u
+    %8:bool = lt %7, 1.0f
+    if %8 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        store %x_38, mat4x3<f32>(vec3<f32>(1.0f, 0.0f, 0.0f), vec3<f32>(0.0f, 1.0f, 0.0f), vec3<f32>(0.0f, 0.0f, 1.0f), vec3<f32>(0.0f))
+        exit_if  # if_1
+      }
+      $B4: {  # false
+        store %x_37, mat4x3<f32>(vec3<f32>(1.0f, 0.0f, 0.0f), vec3<f32>(0.0f, 1.0f, 0.0f), vec3<f32>(0.0f, 0.0f, 1.0f), vec3<f32>(0.0f))
+        %9:mat4x3<f32> = load %x_37
+        store %x_38, %9
+        exit_if  # if_1
+      }
+    }
+    %10:mat4x3<f32> = load %x_38
+    %11:mat3x4<f32> = transpose %10
+    %12:f32 = access %11, 0u, 1u
+    %x_40:f32 = let %12
+    loop [b: $B5] {  # loop_1
+      $B5: {  # body
+        %14:bool = gt %x_40, 1.0f
+        if %14 [t: $B6] {  # if_2
+          $B6: {  # true
+            store %x_48, vec3<f32>(0.0f)
+            exit_loop  # loop_1
+          }
+        }
+        store %x_48, vec3<f32>(1.0f, 0.0f, 0.0f)
+        exit_loop  # loop_1
+      }
+    }
+    %15:f32 = load_vector_element %x_48, 0u
+    %16:f32 = load_vector_element %x_48, 1u
+    %17:f32 = load_vector_element %x_48, 2u
+    %18:vec4<f32> = construct %15, %16, %17, 1.0f
+    store %x_GLF_color, %18
+    ret
+  }
+}
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B7: {
+    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
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/transpose-rectangular-matrix/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/transpose-rectangular-matrix/0.wgsl.expected.ir.msl
index 2e88a5f..5da7ab3 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/transpose-rectangular-matrix/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/transpose-rectangular-matrix/0.wgsl.expected.ir.msl
@@ -1,6 +1,73 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::LoadVectorElement
+../../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: {
+    %x_37:ptr<function, mat4x3<f32>, read_write> = var
+    %x_38_phi:ptr<function, mat4x3<f32>, read_write> = var
+    %x_48_phi:ptr<function, vec3<f32>, read_write> = var
+    %7:f32 = load_vector_element %gl_FragCoord, 1u
+    %x_32:f32 = let %7
+    %9:bool = lt %x_32, 1.0f
+    if %9 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        store %x_38_phi, mat4x3<f32>(vec3<f32>(1.0f, 0.0f, 0.0f), vec3<f32>(0.0f, 1.0f, 0.0f), vec3<f32>(0.0f, 0.0f, 1.0f), vec3<f32>(0.0f))
+        exit_if  # if_1
+      }
+      $B4: {  # false
+        store %x_37, mat4x3<f32>(vec3<f32>(1.0f, 0.0f, 0.0f), vec3<f32>(0.0f, 1.0f, 0.0f), vec3<f32>(0.0f, 0.0f, 1.0f), vec3<f32>(0.0f))
+        %10:mat4x3<f32> = load %x_37
+        store %x_38_phi, %10
+        exit_if  # if_1
+      }
+    }
+    %11:mat4x3<f32> = load %x_38_phi
+    %x_38:mat4x3<f32> = let %11
+    %13:mat3x4<f32> = transpose %x_38
+    %14:f32 = access %13, 0u, 1u
+    %x_40:f32 = let %14
+    loop [b: $B5] {  # loop_1
+      $B5: {  # body
+        %16:bool = gt %x_40, 1.0f
+        if %16 [t: $B6] {  # if_2
+          $B6: {  # true
+            store %x_48_phi, vec3<f32>(0.0f)
+            exit_loop  # loop_1
+          }
+        }
+        store %x_48_phi, vec3<f32>(1.0f, 0.0f, 0.0f)
+        exit_loop  # loop_1
+      }
+    }
+    %17:vec3<f32> = load %x_48_phi
+    %x_48:vec3<f32> = let %17
+    %19:f32 = access %x_48, 0u
+    %20:f32 = access %x_48, 1u
+    %21:f32 = access %x_48, 2u
+    %22:vec4<f32> = construct %19, %20, %21, 1.0f
+    store %x_GLF_color, %22
+    ret
+  }
+}
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B7: {
+    store %gl_FragCoord, %gl_FragCoord_param
+    %25:void = call %main_1
+    %26:vec4<f32> = load %x_GLF_color
+    %27:main_out = construct %26
+    ret %27
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/two-2-iteration-loops/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/two-2-iteration-loops/0-opt.spvasm.expected.ir.msl
index 83dd560..04758a5 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/two-2-iteration-loops/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/two-2-iteration-loops/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,14 +8,15 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_8:ptr<uniform, buf0, read> = var @binding_point(0, 0)
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %odd_index:ptr<function, i32, read_write> = var
     %even_index:ptr<function, i32, read_write> = var
     %j:ptr<function, i32, read_write> = var
@@ -23,162 +24,170 @@
     %x_59:ptr<function, bool, read_write> = var
     %x_60:ptr<function, bool, read_write> = var
     store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
-    %11:f32 = load_vector_element %gl_FragCoord, 0u
-    %x_54:bool = lt %11, 128.0f
+    %12:f32 = load_vector_element %gl_FragCoord, 0u
+    %13:bool = lt %12, 128.0f
+    %x_54:bool = let %13
     store %x_60, %x_54
-    if %x_54 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %13:f32 = load_vector_element %gl_FragCoord, 1u
-        %14:bool = lt %13, 128.0f
-        store %x_59, %14
-        %15:bool = load %x_59
-        store %x_60, %15
+    if %x_54 [t: $B3] {  # if_1
+      $B3: {  # true
+        %15:f32 = load_vector_element %gl_FragCoord, 1u
+        %16:bool = lt %15, 128.0f
+        store %x_59, %16
+        %17:bool = load %x_59
+        store %x_60, %17
         exit_if  # if_1
       }
     }
-    %16:bool = load %x_60
-    if %16 [t: %b4] {  # if_2
-      %b4 = block {  # true
+    %18:bool = load %x_60
+    if %18 [t: $B4] {  # if_2
+      $B4: {  # true
         ret
       }
     }
     store %odd_index, 0i
-    loop [b: %b5, c: %b6] {  # loop_1
-      %b5 = block {  # body
-        %17:i32 = load %odd_index
-        %18:bool = lte %17, 1i
-        if %18 [t: %b7, f: %b8] {  # if_3
-          %b7 = block {  # true
+    loop [b: $B5, c: $B6] {  # loop_1
+      $B5: {  # body
+        %19:i32 = load %odd_index
+        %20:bool = lte %19, 1i
+        if %20 [t: $B7, f: $B8] {  # if_3
+          $B7: {  # true
             exit_if  # if_3
           }
-          %b8 = block {  # false
+          $B8: {  # false
             exit_loop  # loop_1
           }
         }
-        %19:f32 = load_vector_element %x_GLF_color, 0u
-        %20:f32 = add %19, 0.25f
-        store_vector_element %x_GLF_color, 0u, %20
-        %21:i32 = load %odd_index
-        %22:i32 = add %21, 1i
-        store %odd_index, %22
-        continue %b6
+        %21:f32 = load_vector_element %x_GLF_color, 0u
+        %22:f32 = add %21, 0.25f
+        store_vector_element %x_GLF_color, 0u, %22
+        %23:i32 = load %odd_index
+        %24:i32 = add %23, 1i
+        store %odd_index, %24
+        continue  # -> $B6
       }
-      %b6 = block {  # continuing
-        next_iteration %b5
+      $B6: {  # continuing
+        next_iteration  # -> $B5
       }
     }
     store %even_index, 1i
-    loop [b: %b9, c: %b10] {  # loop_2
-      %b9 = block {  # body
-        %23:i32 = load %even_index
-        %24:bool = gte %23, 0i
-        if %24 [t: %b11, f: %b12] {  # if_4
-          %b11 = block {  # true
+    loop [b: $B9, c: $B10] {  # loop_2
+      $B9: {  # body
+        %25:i32 = load %even_index
+        %26:bool = gte %25, 0i
+        if %26 [t: $B11, f: $B12] {  # if_4
+          $B11: {  # true
             exit_if  # if_4
           }
-          %b12 = block {  # false
+          $B12: {  # false
             exit_loop  # loop_2
           }
         }
-        %25:f32 = load_vector_element %x_GLF_color, 0u
-        %26:f32 = add %25, 0.25f
-        store_vector_element %x_GLF_color, 0u, %26
-        %27:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
-        %28:f32 = load_vector_element %27, 0u
+        %27:f32 = load_vector_element %x_GLF_color, 0u
+        %28:f32 = add %27, 0.25f
+        store_vector_element %x_GLF_color, 0u, %28
         %29:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
-        %30:f32 = load_vector_element %29, 1u
-        %31:bool = gt %28, %30
-        if %31 [t: %b13] {  # if_5
-          %b13 = block {  # true
-            continue %b10
+        %30:f32 = load_vector_element %29, 0u
+        %31:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
+        %32:f32 = load_vector_element %31, 1u
+        %33:bool = gt %30, %32
+        if %33 [t: $B13] {  # if_5
+          $B13: {  # true
+            continue  # -> $B10
           }
         }
-        %32:i32 = load %even_index
-        %33:bool = gte %32, 1i
-        if %33 [t: %b14] {  # if_6
-          %b14 = block {  # true
-            discard
+        %34:i32 = load %even_index
+        %35:bool = gte %34, 1i
+        if %35 [t: $B14] {  # if_6
+          $B14: {  # true
+            store %continue_execution, false
             exit_if  # if_6
           }
         }
         store %j, 1i
-        loop [b: %b15, c: %b16] {  # loop_3
-          %b15 = block {  # body
-            if true [t: %b17, f: %b18] {  # if_7
-              %b17 = block {  # true
+        loop [b: $B15, c: $B16] {  # loop_3
+          $B15: {  # body
+            if true [t: $B17, f: $B18] {  # if_7
+              $B17: {  # true
                 exit_if  # if_7
               }
-              %b18 = block {  # false
-                exit_loop  # loop_3
-              }
-            }
-            %34:i32 = load %ll
-            %35:bool = gte %34, 3i
-            if %35 [t: %b19] {  # if_8
-              %b19 = block {  # true
+              $B18: {  # false
                 exit_loop  # loop_3
               }
             }
             %36:i32 = load %ll
-            %37:i32 = add %36, 1i
-            store %ll, %37
-            %38:i32 = load %j
-            %39:u32 = bitcast %38
-            %40:bool = lt %39, 1u
-            if %40 [t: %b20] {  # if_9
-              %b20 = block {  # true
-                continue %b16
-              }
-            }
-            %41:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
-            %42:f32 = load_vector_element %41, 0u
-            %43:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
-            %44:f32 = load_vector_element %43, 1u
-            %45:bool = gt %42, %44
-            if %45 [t: %b21] {  # if_10
-              %b21 = block {  # true
+            %37:bool = gte %36, 3i
+            if %37 [t: $B19] {  # if_8
+              $B19: {  # true
                 exit_loop  # loop_3
               }
             }
-            continue %b16
+            %38:i32 = load %ll
+            %39:i32 = add %38, 1i
+            store %ll, %39
+            %40:i32 = load %j
+            %41:u32 = bitcast %40
+            %42:bool = lt %41, 1u
+            if %42 [t: $B20] {  # if_9
+              $B20: {  # true
+                continue  # -> $B16
+              }
+            }
+            %43:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
+            %44:f32 = load_vector_element %43, 0u
+            %45:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
+            %46:f32 = load_vector_element %45, 1u
+            %47:bool = gt %44, %46
+            if %47 [t: $B21] {  # if_10
+              $B21: {  # true
+                exit_loop  # loop_3
+              }
+            }
+            continue  # -> $B16
           }
-          %b16 = block {  # continuing
-            %46:i32 = load %j
-            %47:i32 = add %46, 1i
-            store %j, %47
-            next_iteration %b15
+          $B16: {  # continuing
+            %48:i32 = load %j
+            %49:i32 = add %48, 1i
+            store %j, %49
+            next_iteration  # -> $B15
           }
         }
-        %48:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
-        %49:f32 = load_vector_element %48, 0u
         %50:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
-        %51:f32 = load_vector_element %50, 1u
-        %52:bool = gt %49, %51
-        if %52 [t: %b22] {  # if_11
-          %b22 = block {  # true
+        %51:f32 = load_vector_element %50, 0u
+        %52:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
+        %53:f32 = load_vector_element %52, 1u
+        %54:bool = gt %51, %53
+        if %54 [t: $B22] {  # if_11
+          $B22: {  # true
             store %x_GLF_color, vec4<f32>(1.0f)
             exit_if  # if_11
           }
         }
-        %53:i32 = load %even_index
-        %54:i32 = sub %53, 1i
-        store %even_index, %54
-        continue %b10
+        %55:i32 = load %even_index
+        %56:i32 = sub %55, 1i
+        store %even_index, %56
+        continue  # -> $B10
       }
-      %b10 = block {  # continuing
-        next_iteration %b9
+      $B10: {  # continuing
+        next_iteration  # -> $B9
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b23 {
-  %b23 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B23: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %57:void = call %main_1
-    %58:vec4<f32> = load %x_GLF_color
-    %59:main_out = construct %58
-    ret %59
+    %59:void = call %main_1
+    %60:vec4<f32> = load %x_GLF_color
+    %61:main_out = construct %60
+    %62:bool = load %continue_execution
+    %63:bool = eq %62, false
+    if %63 [t: $B24] {  # if_12
+      $B24: {  # true
+        terminate_invocation
+      }
+    }
+    ret %61
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/two-2-iteration-loops/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/two-2-iteration-loops/0-opt.wgsl.expected.ir.msl
index 243c928..6c3ed04 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/two-2-iteration-loops/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/two-2-iteration-loops/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,14 +8,15 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_8:ptr<uniform, buf0, read> = var @binding_point(0, 0)
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %odd_index:ptr<function, i32, read_write> = var
     %even_index:ptr<function, i32, read_write> = var
     %j:ptr<function, i32, read_write> = var
@@ -23,162 +24,190 @@
     %x_59:ptr<function, bool, read_write> = var
     %x_60_phi:ptr<function, bool, read_write> = var
     store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
-    %x_53:f32 = load_vector_element %gl_FragCoord, 0u
-    %x_54:bool = lt %x_53, 128.0f
+    %12:f32 = load_vector_element %gl_FragCoord, 0u
+    %x_53:f32 = let %12
+    %14:bool = lt %x_53, 128.0f
+    %x_54:bool = let %14
     store %x_60_phi, %x_54
-    if %x_54 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %x_58:f32 = load_vector_element %gl_FragCoord, 1u
-        %14:bool = lt %x_58, 128.0f
-        store %x_59, %14
-        %15:bool = load %x_59
-        store %x_60_phi, %15
+    if %x_54 [t: $B3] {  # if_1
+      $B3: {  # true
+        %16:f32 = load_vector_element %gl_FragCoord, 1u
+        %x_58:f32 = let %16
+        %18:bool = lt %x_58, 128.0f
+        store %x_59, %18
+        %19:bool = load %x_59
+        store %x_60_phi, %19
         exit_if  # if_1
       }
     }
-    %x_60:bool = load %x_60_phi
-    if %x_60 [t: %b4] {  # if_2
-      %b4 = block {  # true
+    %20:bool = load %x_60_phi
+    %x_60:bool = let %20
+    if %x_60 [t: $B4] {  # if_2
+      $B4: {  # true
         ret
       }
     }
     store %odd_index, 0i
-    loop [b: %b5, c: %b6] {  # loop_1
-      %b5 = block {  # body
-        %x_11:i32 = load %odd_index
-        %18:bool = lte %x_11, 1i
-        if %18 [t: %b7, f: %b8] {  # if_3
-          %b7 = block {  # true
+    loop [b: $B5, c: $B6] {  # loop_1
+      $B5: {  # body
+        %22:i32 = load %odd_index
+        %x_11:i32 = let %22
+        %24:bool = lte %x_11, 1i
+        if %24 [t: $B7, f: $B8] {  # if_3
+          $B7: {  # true
             exit_if  # if_3
           }
-          %b8 = block {  # false
+          $B8: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_70:f32 = load_vector_element %x_GLF_color, 0u
-        %20:f32 = add %x_70, 0.25f
-        store_vector_element %x_GLF_color, 0u, %20
-        %x_12:i32 = load %odd_index
-        %22:i32 = add %x_12, 1i
-        store %odd_index, %22
-        continue %b6
+        %25:f32 = load_vector_element %x_GLF_color, 0u
+        %x_70:f32 = let %25
+        %27:f32 = add %x_70, 0.25f
+        store_vector_element %x_GLF_color, 0u, %27
+        %28:i32 = load %odd_index
+        %x_12:i32 = let %28
+        %30:i32 = add %x_12, 1i
+        store %odd_index, %30
+        continue  # -> $B6
       }
-      %b6 = block {  # continuing
-        next_iteration %b5
+      $B6: {  # continuing
+        next_iteration  # -> $B5
       }
     }
     store %even_index, 1i
-    loop [b: %b9, c: %b10] {  # loop_2
-      %b9 = block {  # body
-        %x_14:i32 = load %even_index
-        %24:bool = gte %x_14, 0i
-        if %24 [t: %b11, f: %b12] {  # if_4
-          %b11 = block {  # true
+    loop [b: $B9, c: $B10] {  # loop_2
+      $B9: {  # body
+        %31:i32 = load %even_index
+        %x_14:i32 = let %31
+        %33:bool = gte %x_14, 0i
+        if %33 [t: $B11, f: $B12] {  # if_4
+          $B11: {  # true
             exit_if  # if_4
           }
-          %b12 = block {  # false
+          $B12: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_80:f32 = load_vector_element %x_GLF_color, 0u
-        %26:f32 = add %x_80, 0.25f
-        store_vector_element %x_GLF_color, 0u, %26
-        %27:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
-        %x_84:f32 = load_vector_element %27, 0u
-        %29:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
-        %x_86:f32 = load_vector_element %29, 1u
-        %31:bool = gt %x_84, %x_86
-        if %31 [t: %b13] {  # if_5
-          %b13 = block {  # true
-            continue %b10
+        %34:f32 = load_vector_element %x_GLF_color, 0u
+        %x_80:f32 = let %34
+        %36:f32 = add %x_80, 0.25f
+        store_vector_element %x_GLF_color, 0u, %36
+        %37:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
+        %38:f32 = load_vector_element %37, 0u
+        %x_84:f32 = let %38
+        %40:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
+        %41:f32 = load_vector_element %40, 1u
+        %x_86:f32 = let %41
+        %43:bool = gt %x_84, %x_86
+        if %43 [t: $B13] {  # if_5
+          $B13: {  # true
+            continue  # -> $B10
           }
         }
-        %x_15:i32 = load %even_index
-        %33:bool = gte %x_15, 1i
-        if %33 [t: %b14] {  # if_6
-          %b14 = block {  # true
-            discard
+        %44:i32 = load %even_index
+        %x_15:i32 = let %44
+        %46:bool = gte %x_15, 1i
+        if %46 [t: $B14] {  # if_6
+          $B14: {  # true
+            store %continue_execution, false
             exit_if  # if_6
           }
         }
         store %j, 1i
-        loop [b: %b15, c: %b16] {  # loop_3
-          %b15 = block {  # body
-            if true [t: %b17, f: %b18] {  # if_7
-              %b17 = block {  # true
+        loop [b: $B15, c: $B16] {  # loop_3
+          $B15: {  # body
+            if true [t: $B17, f: $B18] {  # if_7
+              $B17: {  # true
                 exit_if  # if_7
               }
-              %b18 = block {  # false
+              $B18: {  # false
                 exit_loop  # loop_3
               }
             }
-            %x_16:i32 = load %ll
-            %35:bool = gte %x_16, 3i
-            if %35 [t: %b19] {  # if_8
-              %b19 = block {  # true
+            %47:i32 = load %ll
+            %x_16:i32 = let %47
+            %49:bool = gte %x_16, 3i
+            if %49 [t: $B19] {  # if_8
+              $B19: {  # true
                 exit_loop  # loop_3
               }
             }
-            %x_17:i32 = load %ll
-            %37:i32 = add %x_17, 1i
-            store %ll, %37
-            %x_19:i32 = load %j
-            %39:u32 = bitcast %x_19
-            %40:bool = lt %39, 1u
-            if %40 [t: %b20] {  # if_9
-              %b20 = block {  # true
-                continue %b16
+            %50:i32 = load %ll
+            %x_17:i32 = let %50
+            %52:i32 = add %x_17, 1i
+            store %ll, %52
+            %53:i32 = load %j
+            %x_19:i32 = let %53
+            %55:u32 = bitcast %x_19
+            %56:bool = lt %55, 1u
+            if %56 [t: $B20] {  # if_9
+              $B20: {  # true
+                continue  # -> $B16
               }
             }
-            %41:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
-            %x_106:f32 = load_vector_element %41, 0u
-            %43:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
-            %x_108:f32 = load_vector_element %43, 1u
-            %45:bool = gt %x_106, %x_108
-            if %45 [t: %b21] {  # if_10
-              %b21 = block {  # true
+            %57:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
+            %58:f32 = load_vector_element %57, 0u
+            %x_106:f32 = let %58
+            %60:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
+            %61:f32 = load_vector_element %60, 1u
+            %x_108:f32 = let %61
+            %63:bool = gt %x_106, %x_108
+            if %63 [t: $B21] {  # if_10
+              $B21: {  # true
                 exit_loop  # loop_3
               }
             }
-            continue %b16
+            continue  # -> $B16
           }
-          %b16 = block {  # continuing
-            %x_20:i32 = load %j
-            %47:i32 = add %x_20, 1i
-            store %j, %47
-            next_iteration %b15
+          $B16: {  # continuing
+            %64:i32 = load %j
+            %x_20:i32 = let %64
+            %66:i32 = add %x_20, 1i
+            store %j, %66
+            next_iteration  # -> $B15
           }
         }
-        %48:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
-        %x_113:f32 = load_vector_element %48, 0u
-        %50:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
-        %x_115:f32 = load_vector_element %50, 1u
-        %52:bool = gt %x_113, %x_115
-        if %52 [t: %b22] {  # if_11
-          %b22 = block {  # true
+        %67:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
+        %68:f32 = load_vector_element %67, 0u
+        %x_113:f32 = let %68
+        %70:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
+        %71:f32 = load_vector_element %70, 1u
+        %x_115:f32 = let %71
+        %73:bool = gt %x_113, %x_115
+        if %73 [t: $B22] {  # if_11
+          $B22: {  # true
             store %x_GLF_color, vec4<f32>(1.0f)
             exit_if  # if_11
           }
         }
-        %x_22:i32 = load %even_index
-        %54:i32 = sub %x_22, 1i
-        store %even_index, %54
-        continue %b10
+        %74:i32 = load %even_index
+        %x_22:i32 = let %74
+        %76:i32 = sub %x_22, 1i
+        store %even_index, %76
+        continue  # -> $B10
       }
-      %b10 = block {  # continuing
-        next_iteration %b9
+      $B10: {  # continuing
+        next_iteration  # -> $B9
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b23 {
-  %b23 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B23: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %57:void = call %main_1
-    %58:vec4<f32> = load %x_GLF_color
-    %59:main_out = construct %58
-    ret %59
+    %79:void = call %main_1
+    %80:vec4<f32> = load %x_GLF_color
+    %81:main_out = construct %80
+    %82:bool = load %continue_execution
+    %83:bool = eq %82, false
+    if %83 [t: $B24] {  # if_12
+      $B24: {  # true
+        terminate_invocation
+      }
+    }
+    ret %81
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/two-loops-matrix/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/two-loops-matrix/0.spvasm.expected.ir.msl
index 8f9f4b8..b8358b0 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/two-loops-matrix/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/two-loops-matrix/0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(16) {
   matrix_a_uni:mat4x4<f32> @offset(0)
 }
 
@@ -8,94 +8,96 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %x:ptr<function, i32, read_write> = var
     %matrix_u:ptr<function, vec4<f32>, read_write> = var
     %b:ptr<function, i32, read_write> = var
     %matrix_b:ptr<function, vec4<f32>, read_write> = var
     %x_42:ptr<function, vec4<f32>, read_write> = var
     store %x, 4i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %9:i32 = load %x
         %10:bool = gte %9, 1i
-        if %10 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %10 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_11:i32 = load %x
+        %11:i32 = load %x
+        %x_11:i32 = let %11
         store_vector_element %matrix_u, %x_11, 1.0f
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %12:i32 = load %x
-        %13:i32 = sub %12, 1i
-        store %x, %13
-        next_iteration %b3
+      $B4: {  # continuing
+        %13:i32 = load %x
+        %14:i32 = sub %13, 1i
+        store %x, %14
+        next_iteration  # -> $B3
       }
     }
     store %b, 4i
-    loop [b: %b7, c: %b8] {  # loop_2
-      %b7 = block {  # body
-        %14:ptr<uniform, vec4<f32>, read> = access %x_8, 0u, 0i
-        %15:f32 = load_vector_element %14, 0u
-        %16:bool = lt %15, -1.0f
-        if %16 [t: %b9, f: %b10] {  # if_2
-          %b9 = block {  # true
+    loop [b: $B7, c: $B8] {  # loop_2
+      $B7: {  # body
+        %15:ptr<uniform, vec4<f32>, read> = access %x_8, 0u, 0i
+        %16:f32 = load_vector_element %15, 0u
+        %17:bool = lt %16, -1.0f
+        if %17 [t: $B9, f: $B10] {  # if_2
+          $B9: {  # true
             exit_if  # if_2
           }
-          %b10 = block {  # false
+          $B10: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_14:i32 = load %b
         %18:i32 = load %b
-        %19:bool = gt %18, 1i
-        if %19 [t: %b11, f: %b12] {  # if_3
-          %b11 = block {  # true
-            %20:vec4<f32> = load %matrix_b
-            %21:vec4<f32> = load %matrix_b
-            %22:vec4<f32> = min %20, %21
-            store %x_42, %22
+        %x_14:i32 = let %18
+        %20:i32 = load %b
+        %21:bool = gt %20, 1i
+        if %21 [t: $B11, f: $B12] {  # if_3
+          $B11: {  # true
+            %22:vec4<f32> = load %matrix_b
+            %23:vec4<f32> = load %matrix_b
+            %24:vec4<f32> = min %22, %23
+            store %x_42, %24
             exit_if  # if_3
           }
-          %b12 = block {  # false
-            %23:vec4<f32> = load %matrix_u
-            store %x_42, %23
+          $B12: {  # false
+            %25:vec4<f32> = load %matrix_u
+            store %x_42, %25
             exit_if  # if_3
           }
         }
-        %24:f32 = load_vector_element %x_42, 1u
-        store_vector_element %matrix_b, %x_14, %24
-        continue %b8
+        %26:f32 = load_vector_element %x_42, 1u
+        store_vector_element %matrix_b, %x_14, %26
+        continue  # -> $B8
       }
-      %b8 = block {  # continuing
-        %25:i32 = load %b
-        %26:i32 = sub %25, 1i
-        store %b, %26
-        next_iteration %b7
+      $B8: {  # continuing
+        %27:i32 = load %b
+        %28:i32 = sub %27, 1i
+        store %b, %28
+        next_iteration  # -> $B7
       }
     }
     store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b13 {
-  %b13 = block {
-    %28:void = call %main_1
-    %29:vec4<f32> = load %x_GLF_color
-    %30:main_out = construct %29
-    ret %30
+%tint_symbol = @fragment func():main_out {
+  $B13: {
+    %30:void = call %main_1
+    %31:vec4<f32> = load %x_GLF_color
+    %32:main_out = construct %31
+    ret %32
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/two-loops-matrix/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/two-loops-matrix/0.wgsl.expected.ir.msl
index f0cc327..f217e5b 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/two-loops-matrix/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/two-loops-matrix/0.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(16) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(16) {
   matrix_a_uni:mat4x4<f32> @offset(0)
 }
 
@@ -8,94 +8,105 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %x:ptr<function, i32, read_write> = var
     %matrix_u:ptr<function, vec4<f32>, read_write> = var
     %b:ptr<function, i32, read_write> = var
     %matrix_b:ptr<function, vec4<f32>, read_write> = var
     %x_42:ptr<function, vec4<f32>, read_write> = var
     store %x, 4i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_10:i32 = load %x
-        %10:bool = gte %x_10, 1i
-        if %10 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %9:i32 = load %x
+        %x_10:i32 = let %9
+        %11:bool = gte %x_10, 1i
+        if %11 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_11:i32 = load %x
+        %12:i32 = load %x
+        %x_11:i32 = let %12
         store_vector_element %matrix_u, %x_11, 1.0f
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_12:i32 = load %x
-        %13:i32 = sub %x_12, 1i
-        store %x, %13
-        next_iteration %b3
+      $B4: {  # continuing
+        %14:i32 = load %x
+        %x_12:i32 = let %14
+        %16:i32 = sub %x_12, 1i
+        store %x, %16
+        next_iteration  # -> $B3
       }
     }
     store %b, 4i
-    loop [b: %b7, c: %b8] {  # loop_2
-      %b7 = block {  # body
-        %14:ptr<uniform, vec4<f32>, read> = access %x_8, 0u, 0i
-        %x_55:f32 = load_vector_element %14, 0u
-        %16:bool = lt %x_55, -1.0f
-        if %16 [t: %b9, f: %b10] {  # if_2
-          %b9 = block {  # true
+    loop [b: $B7, c: $B8] {  # loop_2
+      $B7: {  # body
+        %17:ptr<uniform, vec4<f32>, read> = access %x_8, 0u, 0i
+        %18:f32 = load_vector_element %17, 0u
+        %x_55:f32 = let %18
+        %20:bool = lt %x_55, -1.0f
+        if %20 [t: $B9, f: $B10] {  # if_2
+          $B9: {  # true
             exit_if  # if_2
           }
-          %b10 = block {  # false
+          $B10: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_14:i32 = load %b
-        %x_15:i32 = load %b
-        %19:bool = gt %x_15, 1i
-        if %19 [t: %b11, f: %b12] {  # if_3
-          %b11 = block {  # true
-            %x_62:vec4<f32> = load %matrix_b
-            %x_63:vec4<f32> = load %matrix_b
-            %22:vec4<f32> = min %x_62, %x_63
-            store %x_42, %22
+        %21:i32 = load %b
+        %x_14:i32 = let %21
+        %23:i32 = load %b
+        %x_15:i32 = let %23
+        %25:bool = gt %x_15, 1i
+        if %25 [t: $B11, f: $B12] {  # if_3
+          $B11: {  # true
+            %26:vec4<f32> = load %matrix_b
+            %x_62:vec4<f32> = let %26
+            %28:vec4<f32> = load %matrix_b
+            %x_63:vec4<f32> = let %28
+            %30:vec4<f32> = min %x_62, %x_63
+            store %x_42, %30
             exit_if  # if_3
           }
-          %b12 = block {  # false
-            %x_65:vec4<f32> = load %matrix_u
+          $B12: {  # false
+            %31:vec4<f32> = load %matrix_u
+            %x_65:vec4<f32> = let %31
             store %x_42, %x_65
             exit_if  # if_3
           }
         }
-        %x_67:f32 = load_vector_element %x_42, 1u
+        %33:f32 = load_vector_element %x_42, 1u
+        %x_67:f32 = let %33
         store_vector_element %matrix_b, %x_14, %x_67
-        continue %b8
+        continue  # -> $B8
       }
-      %b8 = block {  # continuing
-        %x_16:i32 = load %b
-        %26:i32 = sub %x_16, 1i
-        store %b, %26
-        next_iteration %b7
+      $B8: {  # continuing
+        %35:i32 = load %b
+        %x_16:i32 = let %35
+        %37:i32 = sub %x_16, 1i
+        store %b, %37
+        next_iteration  # -> $B7
       }
     }
     store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b13 {
-  %b13 = block {
-    %28:void = call %main_1
-    %29:vec4<f32> = load %x_GLF_color
-    %30:main_out = construct %29
-    ret %30
+%tint_symbol = @fragment func():main_out {
+  $B13: {
+    %39:void = call %main_1
+    %40:vec4<f32> = load %x_GLF_color
+    %41:main_out = construct %40
+    ret %41
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/two-loops-set-struct/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/two-loops-set-struct/0.spvasm.expected.ir.msl
index 2436908..4b270a7 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/two-loops-set-struct/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/two-loops-set-struct/0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -13,13 +13,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %x_33:ptr<function, StructType, read_write> = var
     %x_9:ptr<function, i32, read_write> = var
     %x_38:ptr<function, i32, read_write> = var
@@ -27,93 +27,104 @@
     %x_10:ptr<function, i32, read_write> = var
     store %x_33, StructType(vec3<f32>(0.0f), vec4<bool>(false))
     store %x_9, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %x_34:ptr<function, StructType, read_write> = var
         %x_7:ptr<function, i32, read_write> = var
         %11:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
         %12:f32 = load_vector_element %11, 1u
-        %13:i32 = convert %12
+        %13:i32 = call %tint_f32_to_i32, %12
         store %x_38, %13
-        %14:i32 = load %x_9
-        %15:i32 = load %x_38
-        %16:bool = lt %14, %15
-        if %16 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %15:i32 = load %x_9
+        %16:i32 = load %x_38
+        %17:bool = lt %15, %16
+        if %17 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %17:StructType = load %x_33
-        store %x_34, %17
-        %18:ptr<function, vec3<f32>, read_write> = access %x_34, 0u
-        store %18, vec3<f32>(1.0f, 0.0f, 0.0f)
-        %19:i32 = load %x_9
-        %20:i32 = add %19, 1i
-        store %x_7, %20
-        %21:StructType = load %x_34
-        store %x_33, %21
-        %22:i32 = load %x_7
-        store %x_9, %22
-        next_iteration %b3
+      $B4: {  # continuing
+        %18:StructType = load %x_33
+        store %x_34, %18
+        %19:ptr<function, vec3<f32>, read_write> = access %x_34, 0u
+        store %19, vec3<f32>(1.0f, 0.0f, 0.0f)
+        %20:i32 = load %x_9
+        %21:i32 = add %20, 1i
+        store %x_7, %21
+        %22:StructType = load %x_34
+        store %x_33, %22
+        %23:i32 = load %x_7
+        store %x_9, %23
+        next_iteration  # -> $B3
       }
     }
-    %23:StructType = load %x_33
-    store %x_42, %23
+    %24:StructType = load %x_33
+    store %x_42, %24
     store %x_10, 0i
-    loop [b: %b7, c: %b8] {  # loop_2
-      %b7 = block {  # body
+    loop [b: $B7, c: $B8] {  # loop_2
+      $B7: {  # body
         %x_43:ptr<function, StructType, read_write> = var
         %x_8:ptr<function, i32, read_write> = var
-        %26:i32 = load %x_10
-        %27:i32 = load %x_38
-        %28:bool = lt %26, %27
-        if %28 [t: %b9, f: %b10] {  # if_2
-          %b9 = block {  # true
+        %27:i32 = load %x_10
+        %28:i32 = load %x_38
+        %29:bool = lt %27, %28
+        if %29 [t: $B9, f: $B10] {  # if_2
+          $B9: {  # true
             exit_if  # if_2
           }
-          %b10 = block {  # false
+          $B10: {  # false
             exit_loop  # loop_2
           }
         }
-        continue %b8
+        continue  # -> $B8
       }
-      %b8 = block {  # continuing
-        %29:StructType = load %x_42
-        store %x_43, %29
-        %30:ptr<function, vec3<f32>, read_write> = access %x_43, 0u
-        store %30, vec3<f32>(1.0f, 0.0f, 0.0f)
-        %31:i32 = load %x_10
-        %32:i32 = add %31, 1i
-        store %x_8, %32
-        %33:StructType = load %x_43
-        store %x_42, %33
-        %34:i32 = load %x_8
-        store %x_10, %34
-        next_iteration %b7
+      $B8: {  # continuing
+        %30:StructType = load %x_42
+        store %x_43, %30
+        %31:ptr<function, vec3<f32>, read_write> = access %x_43, 0u
+        store %31, vec3<f32>(1.0f, 0.0f, 0.0f)
+        %32:i32 = load %x_10
+        %33:i32 = add %32, 1i
+        store %x_8, %33
+        %34:StructType = load %x_43
+        store %x_42, %34
+        %35:i32 = load %x_8
+        store %x_10, %35
+        next_iteration  # -> $B7
       }
     }
-    %35:ptr<function, vec3<f32>, read_write> = access %x_42, 0u
-    %x_47:vec3<f32> = load %35
-    %37:f32 = access %x_47, 0u
-    %38:f32 = access %x_47, 1u
-    %39:f32 = access %x_47, 2u
-    %40:vec4<f32> = construct %37, %38, %39, 1.0f
-    store %x_GLF_color, %40
+    %36:ptr<function, vec3<f32>, read_write> = access %x_42, 0u
+    %37:vec3<f32> = load %36
+    %x_47:vec3<f32> = let %37
+    %39:f32 = access %x_47, 0u
+    %40:f32 = access %x_47, 1u
+    %41:f32 = access %x_47, 2u
+    %42:vec4<f32> = construct %39, %40, %41, 1.0f
+    store %x_GLF_color, %42
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b11 {
-  %b11 = block {
-    %42:void = call %main_1
-    %43:vec4<f32> = load %x_GLF_color
-    %44:main_out = construct %43
-    ret %44
+%tint_symbol = @fragment func():main_out {
+  $B11: {
+    %44:void = call %main_1
+    %45:vec4<f32> = load %x_GLF_color
+    %46:main_out = construct %45
+    ret %46
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B12: {
+    %48:i32 = convert %value
+    %49:bool = gte %value, -2147483648.0f
+    %50:i32 = select -2147483648i, %48, %49
+    %51:bool = lte %value, 2147483520.0f
+    %52:i32 = select 2147483647i, %50, %51
+    ret %52
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/two-loops-set-struct/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/two-loops-set-struct/0.wgsl.expected.ir.msl
index 0e7ba7f..789b8e7 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/two-loops-set-struct/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/two-loops-set-struct/0.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -13,13 +13,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %x_33:ptr<function, StructType, read_write> = var
     %x_38:ptr<function, i32, read_write> = var
     %x_42:ptr<function, StructType, read_write> = var
@@ -29,95 +29,109 @@
     %x_10_phi:ptr<function, i32, read_write> = var
     store %x_33_phi, StructType(vec3<f32>(0.0f), vec4<bool>(false))
     store %x_9_phi, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %x_34:ptr<function, StructType, read_write> = var
         %x_7:ptr<function, i32, read_write> = var
         %13:StructType = load %x_33_phi
         store %x_33, %13
-        %x_9:i32 = load %x_9_phi
-        %15:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
-        %x_37:f32 = load_vector_element %15, 1u
-        %17:i32 = convert %x_37
-        store %x_38, %17
-        %18:i32 = load %x_38
-        %19:bool = lt %x_9, %18
-        if %19 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %14:i32 = load %x_9_phi
+        %x_9:i32 = let %14
+        %16:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
+        %17:f32 = load_vector_element %16, 1u
+        %x_37:f32 = let %17
+        %19:i32 = call %tint_f32_to_i32, %x_37
+        store %x_38, %19
+        %21:i32 = load %x_38
+        %22:bool = lt %x_9, %21
+        if %22 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %20:StructType = load %x_33
-        store %x_34, %20
-        %21:ptr<function, vec3<f32>, read_write> = access %x_34, 0u
-        store %21, vec3<f32>(1.0f, 0.0f, 0.0f)
-        %22:i32 = add %x_9, 1i
-        store %x_7, %22
-        %23:StructType = load %x_34
-        store %x_33_phi, %23
-        %24:i32 = load %x_7
-        store %x_9_phi, %24
-        next_iteration %b3
+      $B4: {  # continuing
+        %23:StructType = load %x_33
+        store %x_34, %23
+        %24:ptr<function, vec3<f32>, read_write> = access %x_34, 0u
+        store %24, vec3<f32>(1.0f, 0.0f, 0.0f)
+        %25:i32 = add %x_9, 1i
+        store %x_7, %25
+        %26:StructType = load %x_34
+        store %x_33_phi, %26
+        %27:i32 = load %x_7
+        store %x_9_phi, %27
+        next_iteration  # -> $B3
       }
     }
-    %25:StructType = load %x_33
-    store %x_42_phi, %25
+    %28:StructType = load %x_33
+    store %x_42_phi, %28
     store %x_10_phi, 0i
-    loop [b: %b7, c: %b8] {  # loop_2
-      %b7 = block {  # body
+    loop [b: $B7, c: $B8] {  # loop_2
+      $B7: {  # body
         %x_43:ptr<function, StructType, read_write> = var
         %x_8:ptr<function, i32, read_write> = var
-        %28:StructType = load %x_42_phi
-        store %x_42, %28
-        %x_10:i32 = load %x_10_phi
-        %30:i32 = load %x_38
-        %31:bool = lt %x_10, %30
-        if %31 [t: %b9, f: %b10] {  # if_2
-          %b9 = block {  # true
+        %31:StructType = load %x_42_phi
+        store %x_42, %31
+        %32:i32 = load %x_10_phi
+        %x_10:i32 = let %32
+        %34:i32 = load %x_38
+        %35:bool = lt %x_10, %34
+        if %35 [t: $B9, f: $B10] {  # if_2
+          $B9: {  # true
             exit_if  # if_2
           }
-          %b10 = block {  # false
+          $B10: {  # false
             exit_loop  # loop_2
           }
         }
-        continue %b8
+        continue  # -> $B8
       }
-      %b8 = block {  # continuing
-        %32:StructType = load %x_42
-        store %x_43, %32
-        %33:ptr<function, vec3<f32>, read_write> = access %x_43, 0u
-        store %33, vec3<f32>(1.0f, 0.0f, 0.0f)
-        %34:i32 = add %x_10, 1i
-        store %x_8, %34
-        %35:StructType = load %x_43
-        store %x_42_phi, %35
-        %36:i32 = load %x_8
-        store %x_10_phi, %36
-        next_iteration %b7
+      $B8: {  # continuing
+        %36:StructType = load %x_42
+        store %x_43, %36
+        %37:ptr<function, vec3<f32>, read_write> = access %x_43, 0u
+        store %37, vec3<f32>(1.0f, 0.0f, 0.0f)
+        %38:i32 = add %x_10, 1i
+        store %x_8, %38
+        %39:StructType = load %x_43
+        store %x_42_phi, %39
+        %40:i32 = load %x_8
+        store %x_10_phi, %40
+        next_iteration  # -> $B7
       }
     }
-    %37:ptr<function, vec3<f32>, read_write> = access %x_42, 0u
-    %x_47:vec3<f32> = load %37
-    %39:f32 = access %x_47, 0u
-    %40:f32 = access %x_47, 1u
-    %41:f32 = access %x_47, 2u
-    %42:vec4<f32> = construct %39, %40, %41, 1.0f
-    store %x_GLF_color, %42
+    %41:ptr<function, vec3<f32>, read_write> = access %x_42, 0u
+    %42:vec3<f32> = load %41
+    %x_47:vec3<f32> = let %42
+    %44:f32 = access %x_47, 0u
+    %45:f32 = access %x_47, 1u
+    %46:f32 = access %x_47, 2u
+    %47:vec4<f32> = construct %44, %45, %46, 1.0f
+    store %x_GLF_color, %47
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b11 {
-  %b11 = block {
-    %44:void = call %main_1
-    %45:vec4<f32> = load %x_GLF_color
-    %46:main_out = construct %45
-    ret %46
+%tint_symbol = @fragment func():main_out {
+  $B11: {
+    %49:void = call %main_1
+    %50:vec4<f32> = load %x_GLF_color
+    %51:main_out = construct %50
+    ret %51
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B12: {
+    %53:i32 = convert %value
+    %54:bool = gte %value, -2147483648.0f
+    %55:i32 = select -2147483648i, %53, %54
+    %56:bool = lte %value, 2147483520.0f
+    %57:i32 = select 2147483647i, %55, %56
+    ret %57
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/two-loops-with-break/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/two-loops-with-break/0-opt.spvasm.expected.ir.msl
index efdd3b1..12cf0aa 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/two-loops-with-break/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/two-loops-with-break/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,113 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+}
+
+%main_1 = func():void {
+  $B2: {
+    %GLF_live15c:ptr<function, vec4<f32>, read_write> = var
+    %GLF_live15i:ptr<function, i32, read_write> = var
+    %GLF_live15d:ptr<function, vec4<f32>, read_write> = var
+    %GLF_live15i_1:ptr<function, i32, read_write> = var
+    store %GLF_live15c, vec4<f32>(0.0f)
+    store %GLF_live15i, 0i
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %7:i32 = load %GLF_live15i
+        %8:bool = lt %7, 4i
+        if %8 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
+            exit_if  # if_1
+          }
+          $B6: {  # false
+            exit_loop  # loop_1
+          }
+        }
+        %9:i32 = load %GLF_live15i
+        %10:bool = gte %9, 3i
+        if %10 [t: $B7] {  # if_2
+          $B7: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %11:f32 = load_vector_element %GLF_live15c, 1u
+        %12:bool = gte %11, 1.0f
+        if %12 [t: $B8] {  # if_3
+          $B8: {  # true
+            %13:i32 = load %GLF_live15i
+            %x_10:i32 = let %13
+            store_vector_element %GLF_live15c, %x_10, 1.0f
+            exit_if  # if_3
+          }
+        }
+        continue  # -> $B4
+      }
+      $B4: {  # continuing
+        %15:i32 = load %GLF_live15i
+        %16:i32 = add %15, 1i
+        store %GLF_live15i, %16
+        next_iteration  # -> $B3
+      }
+    }
+    store %GLF_live15d, vec4<f32>(0.0f)
+    store %GLF_live15i_1, 0i
+    loop [b: $B9, c: $B10] {  # loop_2
+      $B9: {  # body
+        %17:i32 = load %GLF_live15i_1
+        %18:bool = lt %17, 4i
+        if %18 [t: $B11, f: $B12] {  # if_4
+          $B11: {  # true
+            exit_if  # if_4
+          }
+          $B12: {  # false
+            exit_loop  # loop_2
+          }
+        }
+        %19:i32 = load %GLF_live15i_1
+        %20:bool = gte %19, 3i
+        if %20 [t: $B13] {  # if_5
+          $B13: {  # true
+            exit_loop  # loop_2
+          }
+        }
+        %21:f32 = load_vector_element %GLF_live15d, 1u
+        %22:bool = gte %21, 1.0f
+        if %22 [t: $B14] {  # if_6
+          $B14: {  # true
+            %23:i32 = load %GLF_live15i_1
+            %x_15:i32 = let %23
+            store_vector_element %GLF_live15d, %x_15, 1.0f
+            exit_if  # if_6
+          }
+        }
+        continue  # -> $B10
+      }
+      $B10: {  # continuing
+        %25:i32 = load %GLF_live15i_1
+        %26:i32 = add %25, 1i
+        store %GLF_live15i_1, %26
+        next_iteration  # -> $B9
+      }
+    }
+    store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B15: {
+    %28:void = call %main_1
+    %29:vec4<f32> = load %x_GLF_color
+    %30:main_out = construct %29
+    ret %30
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/two-loops-with-break/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/two-loops-with-break/0-opt.wgsl.expected.ir.msl
index efdd3b1..5edd50a 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/two-loops-with-break/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/two-loops-with-break/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,121 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+}
+
+%main_1 = func():void {
+  $B2: {
+    %GLF_live15c:ptr<function, vec4<f32>, read_write> = var
+    %GLF_live15i:ptr<function, i32, read_write> = var
+    %GLF_live15d:ptr<function, vec4<f32>, read_write> = var
+    %GLF_live15i_1:ptr<function, i32, read_write> = var
+    store %GLF_live15c, vec4<f32>(0.0f)
+    store %GLF_live15i, 0i
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %7:i32 = load %GLF_live15i
+        %x_8:i32 = let %7
+        %9:bool = lt %x_8, 4i
+        if %9 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
+            exit_if  # if_1
+          }
+          $B6: {  # false
+            exit_loop  # loop_1
+          }
+        }
+        %10:i32 = load %GLF_live15i
+        %x_9:i32 = let %10
+        %12:bool = gte %x_9, 3i
+        if %12 [t: $B7] {  # if_2
+          $B7: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %13:f32 = load_vector_element %GLF_live15c, 1u
+        %x_49:f32 = let %13
+        %15:bool = gte %x_49, 1.0f
+        if %15 [t: $B8] {  # if_3
+          $B8: {  # true
+            %16:i32 = load %GLF_live15i
+            %x_10:i32 = let %16
+            store_vector_element %GLF_live15c, %x_10, 1.0f
+            exit_if  # if_3
+          }
+        }
+        continue  # -> $B4
+      }
+      $B4: {  # continuing
+        %18:i32 = load %GLF_live15i
+        %x_11:i32 = let %18
+        %20:i32 = add %x_11, 1i
+        store %GLF_live15i, %20
+        next_iteration  # -> $B3
+      }
+    }
+    store %GLF_live15d, vec4<f32>(0.0f)
+    store %GLF_live15i_1, 0i
+    loop [b: $B9, c: $B10] {  # loop_2
+      $B9: {  # body
+        %21:i32 = load %GLF_live15i_1
+        %x_13:i32 = let %21
+        %23:bool = lt %x_13, 4i
+        if %23 [t: $B11, f: $B12] {  # if_4
+          $B11: {  # true
+            exit_if  # if_4
+          }
+          $B12: {  # false
+            exit_loop  # loop_2
+          }
+        }
+        %24:i32 = load %GLF_live15i_1
+        %x_14:i32 = let %24
+        %26:bool = gte %x_14, 3i
+        if %26 [t: $B13] {  # if_5
+          $B13: {  # true
+            exit_loop  # loop_2
+          }
+        }
+        %27:f32 = load_vector_element %GLF_live15d, 1u
+        %x_64:f32 = let %27
+        %29:bool = gte %x_64, 1.0f
+        if %29 [t: $B14] {  # if_6
+          $B14: {  # true
+            %30:i32 = load %GLF_live15i_1
+            %x_15:i32 = let %30
+            store_vector_element %GLF_live15d, %x_15, 1.0f
+            exit_if  # if_6
+          }
+        }
+        continue  # -> $B10
+      }
+      $B10: {  # continuing
+        %32:i32 = load %GLF_live15i_1
+        %x_16:i32 = let %32
+        %34:i32 = add %x_16, 1i
+        store %GLF_live15i_1, %34
+        next_iteration  # -> $B9
+      }
+    }
+    store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B15: {
+    %36:void = call %main_1
+    %37:vec4<f32> = load %x_GLF_color
+    %38:main_out = construct %37
+    ret %38
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/two-nested-do-whiles/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/two-nested-do-whiles/0-opt.spvasm.expected.ir.msl
index b176b51..93dd108 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/two-nested-do-whiles/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/two-nested-do-whiles/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,14 +8,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %i:ptr<function, i32, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
     %i_2:ptr<function, i32, read_write> = var
@@ -24,92 +24,92 @@
     %8:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
     %9:f32 = load_vector_element %8, 1u
     %10:bool = lt %9, 0.0f
-    if %10 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    if %10 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         %x_42:ptr<function, bool, read_write> = var
         %12:f32 = load_vector_element %gl_FragCoord, 1u
         %13:bool = lt %12, -1.0f
         store %x_42, %13
         %14:bool = load %x_42
-        if %14 [t: %b5, f: %b6] {  # if_2
-          %b5 = block {  # true
+        if %14 [t: $B5, f: $B6] {  # if_2
+          $B5: {  # true
             exit_if  # if_2
           }
-          %b6 = block {  # false
-            loop [b: %b7, c: %b8] {  # loop_1
-              %b7 = block {  # body
+          $B6: {  # false
+            loop [b: $B7, c: $B8] {  # loop_1
+              $B7: {  # body
                 %15:i32 = load %i
                 %16:bool = gte %15, 256i
-                if %16 [t: %b9] {  # if_3
-                  %b9 = block {  # true
+                if %16 [t: $B9] {  # if_3
+                  $B9: {  # true
                     exit_loop  # loop_1
                   }
                 }
-                loop [b: %b10, c: %b11] {  # loop_2
-                  %b10 = block {  # body
+                loop [b: $B10, c: $B11] {  # loop_2
+                  $B10: {  # body
                     store %i_1, 0i
-                    loop [b: %b12, c: %b13] {  # loop_3
-                      %b12 = block {  # body
+                    loop [b: $B12, c: $B13] {  # loop_3
+                      $B12: {  # body
                         %17:i32 = load %i_1
                         %18:bool = lt %17, 1i
-                        if %18 [t: %b14, f: %b15] {  # if_4
-                          %b14 = block {  # true
+                        if %18 [t: $B14, f: $B15] {  # if_4
+                          $B14: {  # true
                             exit_if  # if_4
                           }
-                          %b15 = block {  # false
+                          $B15: {  # false
                             exit_loop  # loop_3
                           }
                         }
                         %19:bool = load %x_42
-                        if %19 [t: %b16] {  # if_5
-                          %b16 = block {  # true
+                        if %19 [t: $B16] {  # if_5
+                          $B16: {  # true
                             store %i_2, 0i
-                            loop [b: %b17, c: %b18] {  # loop_4
-                              %b17 = block {  # body
+                            loop [b: $B17, c: $B18] {  # loop_4
+                              $B17: {  # body
                                 %20:i32 = load %i_2
                                 %21:bool = lt %20, 1i
-                                if %21 [t: %b19, f: %b20] {  # if_6
-                                  %b19 = block {  # true
+                                if %21 [t: $B19, f: $B20] {  # if_6
+                                  $B19: {  # true
                                     exit_if  # if_6
                                   }
-                                  %b20 = block {  # false
+                                  $B20: {  # false
                                     exit_loop  # loop_4
                                   }
                                 }
-                                continue %b18
+                                continue  # -> $B18
                               }
-                              %b18 = block {  # continuing
+                              $B18: {  # continuing
                                 %22:i32 = load %i_2
                                 %23:i32 = add %22, 1i
                                 store %i_2, %23
-                                next_iteration %b17
+                                next_iteration  # -> $B17
                               }
                             }
-                            continue %b13
+                            continue  # -> $B13
                           }
                         }
                         ret
                       }
-                      %b13 = block {  # continuing
+                      $B13: {  # continuing
                         %24:i32 = load %i_1
                         %25:i32 = add %24, 1i
                         store %i_1, %25
-                        next_iteration %b12
+                        next_iteration  # -> $B12
                       }
                     }
-                    continue %b11
+                    continue  # -> $B11
                   }
-                  %b11 = block {  # continuing
-                    break_if true %b10
+                  $B11: {  # continuing
+                    break_if true  # -> [t: exit_loop loop_2, f: $B10]
                   }
                 }
-                continue %b8
+                continue  # -> $B8
               }
-              %b8 = block {  # continuing
-                break_if true %b7
+              $B8: {  # continuing
+                break_if true  # -> [t: exit_loop loop_1, f: $B7]
               }
             }
             exit_if  # if_2
@@ -121,8 +121,8 @@
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b21 {
-  %b21 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B21: {
     store %gl_FragCoord, %gl_FragCoord_param
     %28:void = call %main_1
     %29:vec4<f32> = load %x_GLF_color
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/two-nested-do-whiles/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/two-nested-do-whiles/0-opt.wgsl.expected.ir.msl
index 4a17cb9..f106595 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/two-nested-do-whiles/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/two-nested-do-whiles/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,108 +8,115 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %i:ptr<function, i32, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
     %i_2:ptr<function, i32, read_write> = var
     store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
     store %i, 0i
     %8:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-    %x_35:f32 = load_vector_element %8, 1u
-    %10:bool = lt %x_35, 0.0f
-    if %10 [t: %b3, f: %b4] {  # if_1
-      %b3 = block {  # true
+    %9:f32 = load_vector_element %8, 1u
+    %x_35:f32 = let %9
+    %11:bool = lt %x_35, 0.0f
+    if %11 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
         exit_if  # if_1
       }
-      %b4 = block {  # false
+      $B4: {  # false
         %x_42:ptr<function, bool, read_write> = var
-        %x_41:f32 = load_vector_element %gl_FragCoord, 1u
-        %13:bool = lt %x_41, -1.0f
-        store %x_42, %13
-        %14:bool = load %x_42
-        if %14 [t: %b5, f: %b6] {  # if_2
-          %b5 = block {  # true
+        %13:f32 = load_vector_element %gl_FragCoord, 1u
+        %x_41:f32 = let %13
+        %15:bool = lt %x_41, -1.0f
+        store %x_42, %15
+        %16:bool = load %x_42
+        if %16 [t: $B5, f: $B6] {  # if_2
+          $B5: {  # true
             exit_if  # if_2
           }
-          %b6 = block {  # false
-            loop [b: %b7, c: %b8] {  # loop_1
-              %b7 = block {  # body
-                %x_50:i32 = load %i
-                %16:bool = gte %x_50, 256i
-                if %16 [t: %b9] {  # if_3
-                  %b9 = block {  # true
+          $B6: {  # false
+            loop [b: $B7, c: $B8] {  # loop_1
+              $B7: {  # body
+                %17:i32 = load %i
+                %x_50:i32 = let %17
+                %19:bool = gte %x_50, 256i
+                if %19 [t: $B9] {  # if_3
+                  $B9: {  # true
                     exit_loop  # loop_1
                   }
                 }
-                loop [b: %b10, c: %b11] {  # loop_2
-                  %b10 = block {  # body
+                loop [b: $B10, c: $B11] {  # loop_2
+                  $B10: {  # body
                     store %i_1, 0i
-                    loop [b: %b12, c: %b13] {  # loop_3
-                      %b12 = block {  # body
-                        %x_58:i32 = load %i_1
-                        %18:bool = lt %x_58, 1i
-                        if %18 [t: %b14, f: %b15] {  # if_4
-                          %b14 = block {  # true
+                    loop [b: $B12, c: $B13] {  # loop_3
+                      $B12: {  # body
+                        %20:i32 = load %i_1
+                        %x_58:i32 = let %20
+                        %22:bool = lt %x_58, 1i
+                        if %22 [t: $B14, f: $B15] {  # if_4
+                          $B14: {  # true
                             exit_if  # if_4
                           }
-                          %b15 = block {  # false
+                          $B15: {  # false
                             exit_loop  # loop_3
                           }
                         }
-                        %19:bool = load %x_42
-                        if %19 [t: %b16] {  # if_5
-                          %b16 = block {  # true
+                        %23:bool = load %x_42
+                        if %23 [t: $B16] {  # if_5
+                          $B16: {  # true
                             store %i_2, 0i
-                            loop [b: %b17, c: %b18] {  # loop_4
-                              %b17 = block {  # body
-                                %x_66:i32 = load %i_2
-                                %21:bool = lt %x_66, 1i
-                                if %21 [t: %b19, f: %b20] {  # if_6
-                                  %b19 = block {  # true
+                            loop [b: $B17, c: $B18] {  # loop_4
+                              $B17: {  # body
+                                %24:i32 = load %i_2
+                                %x_66:i32 = let %24
+                                %26:bool = lt %x_66, 1i
+                                if %26 [t: $B19, f: $B20] {  # if_6
+                                  $B19: {  # true
                                     exit_if  # if_6
                                   }
-                                  %b20 = block {  # false
+                                  $B20: {  # false
                                     exit_loop  # loop_4
                                   }
                                 }
-                                continue %b18
+                                continue  # -> $B18
                               }
-                              %b18 = block {  # continuing
-                                %x_70:i32 = load %i_2
-                                %23:i32 = add %x_70, 1i
-                                store %i_2, %23
-                                next_iteration %b17
+                              $B18: {  # continuing
+                                %27:i32 = load %i_2
+                                %x_70:i32 = let %27
+                                %29:i32 = add %x_70, 1i
+                                store %i_2, %29
+                                next_iteration  # -> $B17
                               }
                             }
-                            continue %b13
+                            continue  # -> $B13
                           }
                         }
                         ret
                       }
-                      %b13 = block {  # continuing
-                        %x_72:i32 = load %i_1
-                        %25:i32 = add %x_72, 1i
-                        store %i_1, %25
-                        next_iteration %b12
+                      $B13: {  # continuing
+                        %30:i32 = load %i_1
+                        %x_72:i32 = let %30
+                        %32:i32 = add %x_72, 1i
+                        store %i_1, %32
+                        next_iteration  # -> $B12
                       }
                     }
-                    continue %b11
+                    continue  # -> $B11
                   }
-                  %b11 = block {  # continuing
-                    break_if true %b10
+                  $B11: {  # continuing
+                    break_if true  # -> [t: exit_loop loop_2, f: $B10]
                   }
                 }
-                continue %b8
+                continue  # -> $B8
               }
-              %b8 = block {  # continuing
-                break_if true %b7
+              $B8: {  # continuing
+                break_if true  # -> [t: exit_loop loop_1, f: $B7]
               }
             }
             exit_if  # if_2
@@ -121,13 +128,13 @@
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b21 {
-  %b21 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B21: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %28:void = call %main_1
-    %29:vec4<f32> = load %x_GLF_color
-    %30:main_out = construct %29
-    ret %30
+    %35:void = call %main_1
+    %36:vec4<f32> = load %x_GLF_color
+    %37:main_out = construct %36
+    ret %37
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/two-nested-for-loops-with-returns/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/two-nested-for-loops-with-returns/0-opt.spvasm.expected.ir.msl
index 52ef3f6..9fad2d20 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/two-nested-for-loops-with-returns/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/two-nested-for-loops-with-returns/0-opt.spvasm.expected.ir.msl
@@ -1,15 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: doesNotMatter = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: doesNotMatter = struct @align(4) {
   x_compute_data:array<f32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_9:ptr<storage, doesNotMatter, read_write> = var @binding_point(0, 0)
 }
 
-%nb_mod_ = func():f32 -> %b2 {
-  %b2 = block {
+%nb_mod_ = func():f32 {
+  $B2: {
     %s:ptr<function, f32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %GLF_live1i:ptr<function, i32, read_write> = var
@@ -18,32 +18,32 @@
     %x_56:ptr<function, f32, read_write> = var
     store %s, 0.0f
     store %i, 5i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3] {  # loop_1
+      $B3: {  # body
         %x_50:ptr<function, f32, read_write> = var
         store %x_56, 0.0f
-        if true [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if true [t: $B4, f: $B5] {  # if_1
+          $B4: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B5: {  # false
             exit_loop  # loop_1
           }
         }
         store %GLF_live1i, 0i
-        loop [b: %b7, c: %b8] {  # loop_2
-          %b7 = block {  # body
+        loop [b: $B6] {  # loop_2
+          $B6: {  # body
             store %x_51, 0.0f
-            if true [t: %b9, f: %b10] {  # if_2
-              %b9 = block {  # true
+            if true [t: $B7, f: $B8] {  # if_2
+              $B7: {  # true
                 exit_if  # if_2
               }
-              %b10 = block {  # false
+              $B8: {  # false
                 exit_loop  # loop_2
               }
             }
-            if false [t: %b11] {  # if_3
-              %b11 = block {  # true
+            if false [t: $B9] {  # if_3
+              $B9: {  # true
                 store %x_50, 1.0f
                 %10:f32 = load %x_50
                 store %s, %10
@@ -54,14 +54,11 @@
             }
             ret 42.0f
           }
-          %b8 = block {  # continuing
-            next_iteration %b7
-          }
         }
         %12:f32 = load %x_51
         %13:bool = lte 5.0f, %12
-        if %13 [t: %b12] {  # if_4
-          %b12 = block {  # true
+        if %13 [t: $B10] {  # if_4
+          $B10: {  # true
             %14:f32 = load %x_51
             store %x_56, %14
             exit_loop  # loop_1
@@ -69,25 +66,23 @@
         }
         ret 42.0f
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
-      }
     }
     %15:f32 = load %x_56
     ret %15
   }
 }
-%main_1 = func():void -> %b13 {
-  %b13 = block {
-    %x_32:f32 = call %nb_mod_
-    %18:ptr<storage, f32, read_write> = access %x_9, 0u, 0i
-    store %18, %x_32
+%main_1 = func():void {
+  $B11: {
+    %17:f32 = call %nb_mod_
+    %x_32:f32 = let %17
+    %19:ptr<storage, f32, read_write> = access %x_9, 0u, 0i
+    store %19, %x_32
     ret
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b14 {
-  %b14 = block {
-    %20:void = call %main_1
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B12: {
+    %21:void = call %main_1
     ret
   }
 }
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/two-nested-for-loops-with-returns/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/two-nested-for-loops-with-returns/0-opt.wgsl.expected.ir.msl
index 36f2dbb..ed79910 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/two-nested-for-loops-with-returns/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/two-nested-for-loops-with-returns/0-opt.wgsl.expected.ir.msl
@@ -1,15 +1,15 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: doesNotMatter = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: doesNotMatter = struct @align(4) {
   x_compute_data:array<f32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_9:ptr<storage, doesNotMatter, read_write> = var @binding_point(0, 0)
 }
 
-%nb_mod_ = func():f32 -> %b2 {
-  %b2 = block {
+%nb_mod_ = func():f32 {
+  $B2: {
     %s:ptr<function, f32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %GLF_live1i:ptr<function, i32, read_write> = var
@@ -18,33 +18,33 @@
     %x_56_phi:ptr<function, f32, read_write> = var
     store %s, 0.0f
     store %i, 5i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3] {  # loop_1
+      $B3: {  # body
         %x_50:ptr<function, f32, read_write> = var
         %x_51_phi:ptr<function, f32, read_write> = var
         store %x_56_phi, 0.0f
-        if true [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if true [t: $B4, f: $B5] {  # if_1
+          $B4: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B5: {  # false
             exit_loop  # loop_1
           }
         }
         store %GLF_live1i, 0i
-        loop [b: %b7, c: %b8] {  # loop_2
-          %b7 = block {  # body
+        loop [b: $B6] {  # loop_2
+          $B6: {  # body
             store %x_51_phi, 0.0f
-            if true [t: %b9, f: %b10] {  # if_2
-              %b9 = block {  # true
+            if true [t: $B7, f: $B8] {  # if_2
+              $B7: {  # true
                 exit_if  # if_2
               }
-              %b10 = block {  # false
+              $B8: {  # false
                 exit_loop  # loop_2
               }
             }
-            if false [t: %b11] {  # if_3
-              %b11 = block {  # true
+            if false [t: $B9] {  # if_3
+              $B9: {  # true
                 store %x_50, 1.0f
                 %11:f32 = load %x_50
                 store %s, %11
@@ -55,16 +55,13 @@
             }
             ret 42.0f
           }
-          %b8 = block {  # continuing
-            next_iteration %b7
-          }
         }
         %13:f32 = load %x_51_phi
         store %x_51, %13
         %14:f32 = load %x_51
         %15:bool = lte 5.0f, %14
-        if %15 [t: %b12] {  # if_4
-          %b12 = block {  # true
+        if %15 [t: $B10] {  # if_4
+          $B10: {  # true
             %16:f32 = load %x_51
             store %x_56_phi, %16
             exit_loop  # loop_1
@@ -72,25 +69,24 @@
         }
         ret 42.0f
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
-      }
     }
-    %x_56:f32 = load %x_56_phi
+    %17:f32 = load %x_56_phi
+    %x_56:f32 = let %17
     ret %x_56
   }
 }
-%main_1 = func():void -> %b13 {
-  %b13 = block {
-    %x_32:f32 = call %nb_mod_
-    %20:ptr<storage, f32, read_write> = access %x_9, 0u, 0i
-    store %20, %x_32
+%main_1 = func():void {
+  $B11: {
+    %20:f32 = call %nb_mod_
+    %x_32:f32 = let %20
+    %22:ptr<storage, f32, read_write> = access %x_9, 0u, 0i
+    store %22, %x_32
     ret
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b14 {
-  %b14 = block {
-    %22:void = call %main_1
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B12: {
+    %24:void = call %main_1
     ret
   }
 }
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/undefined-assign-in-infinite-loop/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/undefined-assign-in-infinite-loop/0.spvasm.expected.ir.msl
index 098e69f..7473afd 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/undefined-assign-in-infinite-loop/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/undefined-assign-in-infinite-loop/0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,13 +8,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %GLF_dead6index:ptr<function, i32, read_write> = var
     %GLF_dead6currentNode:ptr<function, i32, read_write> = var
     %donor_replacementGLF_dead6tree:ptr<function, array<i32, 1>, read_write> = var
@@ -23,15 +23,15 @@
     %7:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
     %8:f32 = load_vector_element %7, 1u
     %9:bool = lt %8, 0.0f
-    if %9 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        loop [b: %b4, c: %b5] {  # loop_1
-          %b4 = block {  # body
-            if true [t: %b6, f: %b7] {  # if_2
-              %b6 = block {  # true
+    if %9 [t: $B3] {  # if_1
+      $B3: {  # true
+        loop [b: $B4, c: $B5] {  # loop_1
+          $B4: {  # body
+            if true [t: $B6, f: $B7] {  # if_2
+              $B6: {  # true
                 exit_if  # if_2
               }
-              %b7 = block {  # false
+              $B7: {  # false
                 exit_loop  # loop_1
               }
             }
@@ -41,10 +41,10 @@
             store %GLF_dead6currentNode, %12
             %13:i32 = load %GLF_dead6currentNode
             store %GLF_dead6index, %13
-            continue %b5
+            continue  # -> $B5
           }
-          %b5 = block {  # continuing
-            next_iteration %b4
+          $B5: {  # continuing
+            next_iteration  # -> $B4
           }
         }
         exit_if  # if_1
@@ -53,8 +53,8 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b8 {
-  %b8 = block {
+%tint_symbol = @fragment func():main_out {
+  $B8: {
     %15:void = call %main_1
     %16:vec4<f32> = load %x_GLF_color
     %17:main_out = construct %16
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/undefined-assign-in-infinite-loop/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/undefined-assign-in-infinite-loop/0.wgsl.expected.ir.msl
index a38ae8b..ed0ea8d 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/undefined-assign-in-infinite-loop/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/undefined-assign-in-infinite-loop/0.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,43 +8,47 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %GLF_dead6index:ptr<function, i32, read_write> = var
     %GLF_dead6currentNode:ptr<function, i32, read_write> = var
     %donor_replacementGLF_dead6tree:ptr<function, array<i32, 1>, read_write> = var
     store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
     store %GLF_dead6index, 0i
     %7:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %x_34:f32 = load_vector_element %7, 1u
-    %9:bool = lt %x_34, 0.0f
-    if %9 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        loop [b: %b4, c: %b5] {  # loop_1
-          %b4 = block {  # body
-            if true [t: %b6, f: %b7] {  # if_2
-              %b6 = block {  # true
+    %8:f32 = load_vector_element %7, 1u
+    %x_34:f32 = let %8
+    %10:bool = lt %x_34, 0.0f
+    if %10 [t: $B3] {  # if_1
+      $B3: {  # true
+        loop [b: $B4, c: $B5] {  # loop_1
+          $B4: {  # body
+            if true [t: $B6, f: $B7] {  # if_2
+              $B6: {  # true
                 exit_if  # if_2
               }
-              %b7 = block {  # false
+              $B7: {  # false
                 exit_loop  # loop_1
               }
             }
-            %x_9:i32 = load %GLF_dead6index
-            %11:ptr<function, i32, read_write> = access %donor_replacementGLF_dead6tree, %x_9
-            %x_10:i32 = load %11
+            %11:i32 = load %GLF_dead6index
+            %x_9:i32 = let %11
+            %13:ptr<function, i32, read_write> = access %donor_replacementGLF_dead6tree, %x_9
+            %14:i32 = load %13
+            %x_10:i32 = let %14
             store %GLF_dead6currentNode, %x_10
-            %x_11:i32 = load %GLF_dead6currentNode
+            %16:i32 = load %GLF_dead6currentNode
+            %x_11:i32 = let %16
             store %GLF_dead6index, %x_11
-            continue %b5
+            continue  # -> $B5
           }
-          %b5 = block {  # continuing
-            next_iteration %b4
+          $B5: {  # continuing
+            next_iteration  # -> $B4
           }
         }
         exit_if  # if_1
@@ -53,12 +57,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b8 {
-  %b8 = block {
-    %15:void = call %main_1
-    %16:vec4<f32> = load %x_GLF_color
-    %17:main_out = construct %16
-    ret %17
+%tint_symbol = @fragment func():main_out {
+  $B8: {
+    %19:void = call %main_1
+    %20:vec4<f32> = load %x_GLF_color
+    %21:main_out = construct %20
+    ret %21
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/undefined-integer-in-function/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/undefined-integer-in-function/0-opt.spvasm.expected.ir.msl
index be8a9a9..4c84403 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/undefined-integer-in-function/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/undefined-integer-in-function/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,93 +8,88 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%performPartition_ = func():i32 -> %b2 {
-  %b2 = block {
+%performPartition_ = func():i32 {
+  $B2: {
     %GLF_live0i:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %x_10:ptr<function, i32, read_write> = var
     %x_11:ptr<function, i32, read_write> = var
     store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
     store %x_10, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %x_42:ptr<function, bool, read_write> = var
         %9:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
         %10:f32 = load_vector_element %9, 1u
         %11:bool = lt %10, 0.0f
         store %x_42, %11
         %12:bool = load %x_42
-        if %12 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %12 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             %13:i32 = load %x_10
             store %x_11, %13
-            continue %b4
+            continue  # -> $B4
           }
-          %b6 = block {  # false
+          $B6: {  # false
             store %GLF_live0i, 0i
-            loop [b: %b7, c: %b8] {  # loop_2
-              %b7 = block {  # body
+            loop [b: $B7] {  # loop_2
+              $B7: {  # body
                 %x_47:bool = let true
                 %15:bool = load %x_42
-                if %15 [t: %b9] {  # if_2
-                  %b9 = block {  # true
+                if %15 [t: $B8] {  # if_2
+                  $B8: {  # true
                     exit_loop  # loop_2
                   }
                 }
                 ret 1i
               }
-              %b8 = block {  # continuing
-                next_iteration %b7
-              }
             }
             %16:bool = load %x_42
-            if %16 [t: %b10] {  # if_3
-              %b10 = block {  # true
-                loop [b: %b11, c: %b12] {  # loop_3
-                  %b11 = block {  # body
+            if %16 [t: $B9] {  # if_3
+              $B9: {  # true
+                loop [b: $B10] {  # loop_3
+                  $B10: {  # body
                     ret 1i
                   }
-                  %b12 = block {  # continuing
-                    next_iteration %b11
-                  }
                 }
                 exit_if  # if_3
               }
             }
             %17:i32 = load %x_10
             store %x_11, %17
-            continue %b4
+            continue  # -> $B4
           }
         }
-        continue %b4
+        unreachable
       }
-      %b4 = block {  # continuing
+      $B4: {  # continuing
         %18:i32 = load %x_11
         store %x_10, %18
-        break_if true %b3
+        break_if true  # -> [t: exit_loop loop_1, f: $B3]
       }
     }
     %19:i32 = load %x_11
     ret %19
   }
 }
-%main_1 = func():void -> %b13 {
-  %b13 = block {
-    %x_9:i32 = call %performPartition_
+%main_1 = func():void {
+  $B11: {
+    %21:i32 = call %performPartition_
+    %x_9:i32 = let %21
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b14 {
-  %b14 = block {
-    %23:void = call %main_1
-    %24:vec4<f32> = load %x_GLF_color
-    %25:main_out = construct %24
-    ret %25
+%tint_symbol = @fragment func():main_out {
+  $B12: {
+    %24:void = call %main_1
+    %25:vec4<f32> = load %x_GLF_color
+    %26:main_out = construct %25
+    ret %26
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/undefined-integer-in-function/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/undefined-integer-in-function/0-opt.wgsl.expected.ir.msl
index 2763073..4d36908 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/undefined-integer-in-function/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/undefined-integer-in-function/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,95 +8,92 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%performPartition_ = func():i32 -> %b2 {
-  %b2 = block {
+%performPartition_ = func():i32 {
+  $B2: {
     %GLF_live0i:ptr<function, i32, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %x_11:ptr<function, i32, read_write> = var
     %x_10_phi:ptr<function, i32, read_write> = var
     store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
     store %x_10_phi, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %x_11_phi:ptr<function, i32, read_write> = var
-        %x_10:i32 = load %x_10_phi
+        %9:i32 = load %x_10_phi
+        %x_10:i32 = let %9
         %x_42:ptr<function, bool, read_write> = var
-        %11:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-        %x_41:f32 = load_vector_element %11, 1u
-        %13:bool = lt %x_41, 0.0f
-        store %x_42, %13
-        %14:bool = load %x_42
-        if %14 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %12:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
+        %13:f32 = load_vector_element %12, 1u
+        %x_41:f32 = let %13
+        %15:bool = lt %x_41, 0.0f
+        store %x_42, %15
+        %16:bool = load %x_42
+        if %16 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             store %x_11_phi, %x_10
-            continue %b4
+            continue  # -> $B4
           }
-          %b6 = block {  # false
+          $B6: {  # false
             store %GLF_live0i, 0i
-            loop [b: %b7, c: %b8] {  # loop_2
-              %b7 = block {  # body
+            loop [b: $B7] {  # loop_2
+              $B7: {  # body
                 %x_47:bool = let true
-                %16:bool = load %x_42
-                if %16 [t: %b9] {  # if_2
-                  %b9 = block {  # true
+                %18:bool = load %x_42
+                if %18 [t: $B8] {  # if_2
+                  $B8: {  # true
                     exit_loop  # loop_2
                   }
                 }
                 ret 1i
               }
-              %b8 = block {  # continuing
-                next_iteration %b7
-              }
             }
-            %17:bool = load %x_42
-            if %17 [t: %b10] {  # if_3
-              %b10 = block {  # true
-                loop [b: %b11, c: %b12] {  # loop_3
-                  %b11 = block {  # body
+            %19:bool = load %x_42
+            if %19 [t: $B9] {  # if_3
+              $B9: {  # true
+                loop [b: $B10] {  # loop_3
+                  $B10: {  # body
                     ret 1i
                   }
-                  %b12 = block {  # continuing
-                    next_iteration %b11
-                  }
                 }
                 exit_if  # if_3
               }
             }
             store %x_11_phi, %x_10
-            continue %b4
+            continue  # -> $B4
           }
         }
-        continue %b4
+        unreachable
       }
-      %b4 = block {  # continuing
-        %18:i32 = load %x_11_phi
-        store %x_11, %18
-        %19:i32 = load %x_11
-        store %x_10_phi, %19
-        break_if true %b3
+      $B4: {  # continuing
+        %20:i32 = load %x_11_phi
+        store %x_11, %20
+        %21:i32 = load %x_11
+        store %x_10_phi, %21
+        break_if true  # -> [t: exit_loop loop_1, f: $B3]
       }
     }
-    %20:i32 = load %x_11
-    ret %20
+    %22:i32 = load %x_11
+    ret %22
   }
 }
-%main_1 = func():void -> %b13 {
-  %b13 = block {
-    %x_9:i32 = call %performPartition_
+%main_1 = func():void {
+  $B11: {
+    %24:i32 = call %performPartition_
+    %x_9:i32 = let %24
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b14 {
-  %b14 = block {
-    %24:void = call %main_1
-    %25:vec4<f32> = load %x_GLF_color
-    %26:main_out = construct %25
-    ret %26
+%tint_symbol = @fragment func():main_out {
+  $B12: {
+    %27:void = call %main_1
+    %28:vec4<f32> = load %x_GLF_color
+    %29:main_out = construct %28
+    ret %29
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/uninit-element-cast-in-loop/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/uninit-element-cast-in-loop/0-opt.spvasm.expected.ir.msl
index c2c0d95..c2fe3de 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/uninit-element-cast-in-loop/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/uninit-element-cast-in-loop/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,18 +8,18 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %x_30:ptr<function, f32, read_write> = var
     %x_32:ptr<function, f32, read_write> = var
     store %x_32, 0.0f
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %x_33:ptr<function, f32, read_write> = var
         %7:f32 = load %x_32
         store %x_33, %7
@@ -28,28 +28,28 @@
         %10:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
         %11:f32 = load_vector_element %10, 1u
         %12:bool = lt %9, %11
-        if %12 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %12 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
             ret
           }
-          %b6 = block {  # false
-            continue %b4
+          $B6: {  # false
+            continue  # -> $B4
           }
         }
-        continue %b4
+        unreachable
       }
-      %b4 = block {  # continuing
+      $B4: {  # continuing
         %13:f32 = load %x_33
         store %x_32, %13
-        next_iteration %b3
+        next_iteration  # -> $B3
       }
     }
     unreachable
   }
 }
-%tint_symbol = @fragment func():main_out -> %b7 {
-  %b7 = block {
+%tint_symbol = @fragment func():main_out {
+  $B7: {
     %15:void = call %main_1
     %16:vec4<f32> = load %x_GLF_color
     %17:main_out = construct %16
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/uninit-element-cast-in-loop/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/uninit-element-cast-in-loop/0-opt.wgsl.expected.ir.msl
index 2bca960..a5a4c8d 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/uninit-element-cast-in-loop/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/uninit-element-cast-in-loop/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,52 +8,56 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %x_30:ptr<function, f32, read_write> = var
     %x_32_phi:ptr<function, f32, read_write> = var
     store %x_32_phi, 0.0f
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %x_33_phi:ptr<function, f32, read_write> = var
-        %x_32:f32 = load %x_32_phi
+        %7:f32 = load %x_32_phi
+        %x_32:f32 = let %7
         store %x_33_phi, %x_32
-        %x_33:f32 = load %x_33_phi
-        %9:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
-        %x_39:f32 = load_vector_element %9, 0u
+        %9:f32 = load %x_33_phi
+        %x_33:f32 = let %9
         %11:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
-        %x_41:f32 = load_vector_element %11, 1u
-        %13:bool = lt %x_39, %x_41
-        if %13 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        %12:f32 = load_vector_element %11, 0u
+        %x_39:f32 = let %12
+        %14:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
+        %15:f32 = load_vector_element %14, 1u
+        %x_41:f32 = let %15
+        %17:bool = lt %x_39, %x_41
+        if %17 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
             ret
           }
-          %b6 = block {  # false
-            continue %b4
+          $B6: {  # false
+            continue  # -> $B4
           }
         }
-        continue %b4
+        unreachable
       }
-      %b4 = block {  # continuing
+      $B4: {  # continuing
         store %x_32_phi, %x_33
-        next_iteration %b3
+        next_iteration  # -> $B3
       }
     }
     unreachable
   }
 }
-%tint_symbol = @fragment func():main_out -> %b7 {
-  %b7 = block {
-    %15:void = call %main_1
-    %16:vec4<f32> = load %x_GLF_color
-    %17:main_out = construct %16
-    ret %17
+%tint_symbol = @fragment func():main_out {
+  $B7: {
+    %19:void = call %main_1
+    %20:vec4<f32> = load %x_GLF_color
+    %21:main_out = construct %20
+    ret %21
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/uninitialized-var-decrement-and-add/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/uninitialized-var-decrement-and-add/0-opt.spvasm.expected.ir.msl
index efdd3b1..d478cb2 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/uninitialized-var-decrement-and-add/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/uninitialized-var-decrement-and-add/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,54 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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: {
+    %x_30:ptr<function, f32, read_write> = var
+    %foo:ptr<function, u32, 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:bool = gt %6, -1.0f
+    if %7 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %8:f32 = load_vector_element %x_GLF_color, 0u
+        store %x_30, %8
+        exit_if  # if_1
+      }
+      $B4: {  # false
+        %9:u32 = load %foo
+        %10:u32 = sub %9, 1u
+        %x_7:u32 = let %10
+        store %foo, %x_7
+        %12:u32 = add 178493u, %x_7
+        %13:f32 = convert %12
+        store %x_30, %13
+        exit_if  # if_1
+      }
+    }
+    %14:f32 = load %x_30
+    store_vector_element %x_GLF_color, 0u, %14
+    ret
+  }
+}
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B5: {
+    store %gl_FragCoord, %gl_FragCoord_param
+    %17:void = call %main_1
+    %18:vec4<f32> = load %x_GLF_color
+    %19:main_out = construct %18
+    ret %19
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/uninitialized-var-decrement-and-add/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/uninitialized-var-decrement-and-add/0-opt.wgsl.expected.ir.msl
index efdd3b1..2150252 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/uninitialized-var-decrement-and-add/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/uninitialized-var-decrement-and-add/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,58 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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: {
+    %x_30:ptr<function, f32, read_write> = var
+    %foo:ptr<function, u32, 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_32:f32 = let %6
+    %8:bool = gt %x_32, -1.0f
+    if %8 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %9:f32 = load_vector_element %x_GLF_color, 0u
+        %x_38:f32 = let %9
+        store %x_30, %x_38
+        exit_if  # if_1
+      }
+      $B4: {  # false
+        %11:u32 = load %foo
+        %x_6:u32 = let %11
+        %13:u32 = sub %x_6, 1u
+        %x_7:u32 = let %13
+        store %foo, %x_7
+        %15:u32 = add 178493u, %x_7
+        %16:f32 = convert %15
+        store %x_30, %16
+        exit_if  # if_1
+      }
+    }
+    %17:f32 = load %x_30
+    %x_40:f32 = let %17
+    store_vector_element %x_GLF_color, 0u, %x_40
+    ret
+  }
+}
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B5: {
+    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
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/unreachable-continue-statement/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/unreachable-continue-statement/0.spvasm.expected.ir.msl
index e69c2be..4e2482e 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/unreachable-continue-statement/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/unreachable-continue-statement/0.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,32 +8,32 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%computeColor_ = func():vec3<f32> -> %b2 {
-  %b2 = block {
+%computeColor_ = func():vec3<f32> {
+  $B2: {
     %x_injected_loop_counter:ptr<function, i32, read_write> = var
     store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
     store %x_injected_loop_counter, 1i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %5:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
         %6:f32 = load_vector_element %5, 0u
         %7:bool = gt %6, 1.0f
-        if %7 [t: %b5] {  # if_1
-          %b5 = block {  # true
+        if %7 [t: $B5] {  # if_1
+          $B5: {  # true
             %8:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
             %9:f32 = load_vector_element %8, 0u
             %10:bool = gt %9, 1.0f
-            if %10 [t: %b6, f: %b7] {  # if_2
-              %b6 = block {  # true
-                continue %b4
+            if %10 [t: $B6, f: $B7] {  # if_2
+              $B6: {  # true
+                continue  # -> $B4
               }
-              %b7 = block {  # false
-                continue %b4
+              $B7: {  # false
+                continue  # -> $B4
               }
             }
             exit_if  # if_1
@@ -41,25 +41,26 @@
         }
         ret vec3<f32>(1.0f)
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
     unreachable
   }
 }
-%main_1 = func():void -> %b8 {
-  %b8 = block {
-    %x_31:vec3<f32> = call %computeColor_
+%main_1 = func():void {
+  $B8: {
+    %12:vec3<f32> = call %computeColor_
+    %x_31:vec3<f32> = let %12
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b9 {
-  %b9 = block {
-    %14:void = call %main_1
-    %15:vec4<f32> = load %x_GLF_color
-    %16:main_out = construct %15
-    ret %16
+%tint_symbol = @fragment func():main_out {
+  $B9: {
+    %15:void = call %main_1
+    %16:vec4<f32> = load %x_GLF_color
+    %17:main_out = construct %16
+    ret %17
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/unreachable-continue-statement/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/unreachable-continue-statement/0.wgsl.expected.ir.msl
index f0605a9a..99dae24 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/unreachable-continue-statement/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/unreachable-continue-statement/0.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,32 +8,34 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%computeColor_ = func():vec3<f32> -> %b2 {
-  %b2 = block {
+%computeColor_ = func():vec3<f32> {
+  $B2: {
     %x_injected_loop_counter:ptr<function, i32, read_write> = var
     store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
     store %x_injected_loop_counter, 1i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %5:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-        %x_38:f32 = load_vector_element %5, 0u
-        %7:bool = gt %x_38, 1.0f
-        if %7 [t: %b5] {  # if_1
-          %b5 = block {  # true
-            %8:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-            %x_43:f32 = load_vector_element %8, 0u
-            %10:bool = gt %x_43, 1.0f
-            if %10 [t: %b6, f: %b7] {  # if_2
-              %b6 = block {  # true
-                continue %b4
+        %6:f32 = load_vector_element %5, 0u
+        %x_38:f32 = let %6
+        %8:bool = gt %x_38, 1.0f
+        if %8 [t: $B5] {  # if_1
+          $B5: {  # true
+            %9:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
+            %10:f32 = load_vector_element %9, 0u
+            %x_43:f32 = let %10
+            %12:bool = gt %x_43, 1.0f
+            if %12 [t: $B6, f: $B7] {  # if_2
+              $B6: {  # true
+                continue  # -> $B4
               }
-              %b7 = block {  # false
-                continue %b4
+              $B7: {  # false
+                continue  # -> $B4
               }
             }
             exit_if  # if_1
@@ -41,25 +43,26 @@
         }
         ret vec3<f32>(1.0f)
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
     unreachable
   }
 }
-%main_1 = func():void -> %b8 {
-  %b8 = block {
-    %x_31:vec3<f32> = call %computeColor_
+%main_1 = func():void {
+  $B8: {
+    %14:vec3<f32> = call %computeColor_
+    %x_31:vec3<f32> = let %14
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b9 {
-  %b9 = block {
-    %14:void = call %main_1
-    %15:vec4<f32> = load %x_GLF_color
-    %16:main_out = construct %15
-    ret %16
+%tint_symbol = @fragment func():main_out {
+  $B9: {
+    %17:void = call %main_1
+    %18:vec4<f32> = load %x_GLF_color
+    %19:main_out = construct %18
+    ret %19
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/unreachable-discard-statement-in-if/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/unreachable-discard-statement-in-if/0-opt.spvasm.expected.ir.msl
index 8cb6f56..112a18d 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/unreachable-discard-statement-in-if/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/unreachable-discard-statement-in-if/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,61 +8,68 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%computePoint_ = func():vec3<f32> -> %b2 {
-  %b2 = block {
-    %5:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-    %6:f32 = load_vector_element %5, 0u
-    %7:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-    %8:f32 = load_vector_element %7, 1u
-    %9:bool = gt %6, %8
-    if %9 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        discard
+%computePoint_ = func():vec3<f32> {
+  $B2: {
+    %6:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
+    %7:f32 = load_vector_element %6, 0u
+    %8:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
+    %9:f32 = load_vector_element %8, 1u
+    %10:bool = gt %7, %9
+    if %10 [t: $B3] {  # if_1
+      $B3: {  # true
+        store %continue_execution, false
         exit_if  # if_1
       }
     }
     ret vec3<f32>(0.0f)
   }
 }
-%main_1 = func():void -> %b4 {
-  %b4 = block {
+%main_1 = func():void {
+  $B4: {
     %x_34:ptr<function, bool, read_write> = var, false
-    loop [b: %b5, c: %b6] {  # loop_1
-      %b5 = block {  # body
-        %x_36:vec3<f32> = call %computePoint_
-        %13:f32 = load_vector_element %gl_FragCoord, 0u
-        %14:bool = lt %13, 0.0f
-        if %14 [t: %b7] {  # if_2
-          %b7 = block {  # true
+    loop [b: $B5] {  # loop_1
+      $B5: {  # body
+        %13:vec3<f32> = call %computePoint_
+        %x_36:vec3<f32> = let %13
+        %15:f32 = load_vector_element %gl_FragCoord, 0u
+        %16:bool = lt %15, 0.0f
+        if %16 [t: $B6] {  # if_2
+          $B6: {  # true
             store %x_34, true
             exit_loop  # loop_1
           }
         }
-        %x_45:vec3<f32> = call %computePoint_
+        %17:vec3<f32> = call %computePoint_
+        %x_45:vec3<f32> = let %17
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         store %x_34, true
         exit_loop  # loop_1
       }
-      %b6 = block {  # continuing
-        next_iteration %b5
-      }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b8 {
-  %b8 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B7: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %18:void = call %main_1
-    %19:vec4<f32> = load %x_GLF_color
-    %20:main_out = construct %19
-    ret %20
+    %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: $B8] {  # if_3
+      $B8: {  # true
+        terminate_invocation
+      }
+    }
+    ret %23
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/unreachable-discard-statement-in-if/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/unreachable-discard-statement-in-if/0-opt.wgsl.expected.ir.msl
index c3848c9..d37a77b 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/unreachable-discard-statement-in-if/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/unreachable-discard-statement-in-if/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,61 +8,71 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
+  %continue_execution:ptr<private, bool, read_write> = var, true
 }
 
-%computePoint_ = func():vec3<f32> -> %b2 {
-  %b2 = block {
-    %5:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-    %x_48:f32 = load_vector_element %5, 0u
-    %7:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-    %x_50:f32 = load_vector_element %7, 1u
-    %9:bool = gt %x_48, %x_50
-    if %9 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        discard
+%computePoint_ = func():vec3<f32> {
+  $B2: {
+    %6:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
+    %7:f32 = load_vector_element %6, 0u
+    %x_48:f32 = let %7
+    %9:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
+    %10:f32 = load_vector_element %9, 1u
+    %x_50:f32 = let %10
+    %12:bool = gt %x_48, %x_50
+    if %12 [t: $B3] {  # if_1
+      $B3: {  # true
+        store %continue_execution, false
         exit_if  # if_1
       }
     }
     ret vec3<f32>(0.0f)
   }
 }
-%main_1 = func():void -> %b4 {
-  %b4 = block {
+%main_1 = func():void {
+  $B4: {
     %x_34:ptr<function, bool, read_write> = var, false
-    loop [b: %b5, c: %b6] {  # loop_1
-      %b5 = block {  # body
-        %x_36:vec3<f32> = call %computePoint_
-        %x_41:f32 = load_vector_element %gl_FragCoord, 0u
-        %14:bool = lt %x_41, 0.0f
-        if %14 [t: %b7] {  # if_2
-          %b7 = block {  # true
+    loop [b: $B5] {  # loop_1
+      $B5: {  # body
+        %15:vec3<f32> = call %computePoint_
+        %x_36:vec3<f32> = let %15
+        %17:f32 = load_vector_element %gl_FragCoord, 0u
+        %x_41:f32 = let %17
+        %19:bool = lt %x_41, 0.0f
+        if %19 [t: $B6] {  # if_2
+          $B6: {  # true
             store %x_34, true
             exit_loop  # loop_1
           }
         }
-        %x_45:vec3<f32> = call %computePoint_
+        %20:vec3<f32> = call %computePoint_
+        %x_45:vec3<f32> = let %20
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         store %x_34, true
         exit_loop  # loop_1
       }
-      %b6 = block {  # continuing
-        next_iteration %b5
-      }
     }
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b8 {
-  %b8 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B7: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %18:void = call %main_1
-    %19:vec4<f32> = load %x_GLF_color
-    %20:main_out = construct %19
-    ret %20
+    %24:void = call %main_1
+    %25:vec4<f32> = load %x_GLF_color
+    %26:main_out = construct %25
+    %27:bool = load %continue_execution
+    %28:bool = eq %27, false
+    if %28 [t: $B8] {  # if_3
+      $B8: {  # true
+        terminate_invocation
+      }
+    }
+    ret %26
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/unreachable-loops/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/unreachable-loops/0-opt.spvasm.expected.ir.msl
index 470029e..d96fda4 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/unreachable-loops/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/unreachable-loops/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injected:vec2<f32> @offset(0)
 }
 
@@ -8,13 +8,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %m:ptr<function, i32, read_write> = var
     store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
     %5:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
@@ -22,32 +22,32 @@
     %7:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
     %8:f32 = load_vector_element %7, 1u
     %9:bool = gt %6, %8
-    if %9 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        loop [b: %b4, c: %b5] {  # loop_1
-          %b4 = block {  # body
-            continue %b5
+    if %9 [t: $B3] {  # if_1
+      $B3: {  # true
+        loop [b: $B4, c: $B5] {  # loop_1
+          $B4: {  # body
+            continue  # -> $B5
           }
-          %b5 = block {  # continuing
-            break_if true %b4
+          $B5: {  # continuing
+            break_if true  # -> [t: exit_loop loop_1, f: $B4]
           }
         }
         store %m, 1i
-        loop [b: %b6, c: %b7] {  # loop_2
-          %b6 = block {  # body
-            if true [t: %b8, f: %b9] {  # if_2
-              %b8 = block {  # true
+        loop [b: $B6, c: $B7] {  # loop_2
+          $B6: {  # body
+            if true [t: $B8, f: $B9] {  # if_2
+              $B8: {  # true
                 exit_if  # if_2
               }
-              %b9 = block {  # false
+              $B9: {  # false
                 exit_loop  # loop_2
               }
             }
             store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
-            continue %b7
+            continue  # -> $B7
           }
-          %b7 = block {  # continuing
-            next_iteration %b6
+          $B7: {  # continuing
+            next_iteration  # -> $B6
           }
         }
         exit_if  # if_1
@@ -56,8 +56,8 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b10 {
-  %b10 = block {
+%tint_symbol = @fragment func():main_out {
+  $B10: {
     %11:void = call %main_1
     %12:vec4<f32> = load %x_GLF_color
     %13:main_out = construct %12
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/unreachable-loops/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/unreachable-loops/0-opt.wgsl.expected.ir.msl
index 3e2da70..277aa16 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/unreachable-loops/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/unreachable-loops/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injected:vec2<f32> @offset(0)
 }
 
@@ -8,46 +8,48 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %m:ptr<function, i32, read_write> = var
     store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
     %5:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
-    %x_30:f32 = load_vector_element %5, 0u
-    %7:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
-    %x_32:f32 = load_vector_element %7, 1u
-    %9:bool = gt %x_30, %x_32
-    if %9 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        loop [b: %b4, c: %b5] {  # loop_1
-          %b4 = block {  # body
-            continue %b5
+    %6:f32 = load_vector_element %5, 0u
+    %x_30:f32 = let %6
+    %8:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
+    %9:f32 = load_vector_element %8, 1u
+    %x_32:f32 = let %9
+    %11:bool = gt %x_30, %x_32
+    if %11 [t: $B3] {  # if_1
+      $B3: {  # true
+        loop [b: $B4, c: $B5] {  # loop_1
+          $B4: {  # body
+            continue  # -> $B5
           }
-          %b5 = block {  # continuing
-            break_if true %b4
+          $B5: {  # continuing
+            break_if true  # -> [t: exit_loop loop_1, f: $B4]
           }
         }
         store %m, 1i
-        loop [b: %b6, c: %b7] {  # loop_2
-          %b6 = block {  # body
-            if true [t: %b8, f: %b9] {  # if_2
-              %b8 = block {  # true
+        loop [b: $B6, c: $B7] {  # loop_2
+          $B6: {  # body
+            if true [t: $B8, f: $B9] {  # if_2
+              $B8: {  # true
                 exit_if  # if_2
               }
-              %b9 = block {  # false
+              $B9: {  # false
                 exit_loop  # loop_2
               }
             }
             store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
-            continue %b7
+            continue  # -> $B7
           }
-          %b7 = block {  # continuing
-            next_iteration %b6
+          $B7: {  # continuing
+            next_iteration  # -> $B6
           }
         }
         exit_if  # if_1
@@ -56,12 +58,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b10 {
-  %b10 = block {
-    %11:void = call %main_1
-    %12:vec4<f32> = load %x_GLF_color
-    %13:main_out = construct %12
-    ret %13
+%tint_symbol = @fragment func():main_out {
+  $B10: {
+    %13:void = call %main_1
+    %14:vec4<f32> = load %x_GLF_color
+    %15:main_out = construct %14
+    ret %15
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/unreachable-return-in-loop/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/unreachable-return-in-loop/0.spvasm.expected.ir.msl
index efdd3b1..a9ae9d9 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/unreachable-return-in-loop/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/unreachable-return-in-loop/0.spvasm.expected.ir.msl
@@ -1,6 +1,62 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+}
+
+%main_1 = func():void {
+  $B2: {
+    %x_21:ptr<function, bool, read_write> = var
+    store %x_21, false
+    loop [b: $B3] {  # loop_1
+      $B3: {  # body
+        %x_25:ptr<function, bool, read_write> = var
+        %x_30:ptr<function, bool, read_write> = var
+        %6:bool = load %x_21
+        store %x_25, %6
+        loop [b: $B4] {  # loop_2
+          $B4: {  # body
+            %7:bool = load %x_25
+            store %x_30, %7
+            if false [t: $B5, f: $B6] {  # if_1
+              $B5: {  # true
+                exit_if  # if_1
+              }
+              $B6: {  # false
+                exit_loop  # loop_2
+              }
+            }
+            store %x_30, true
+            exit_loop  # loop_2
+          }
+        }
+        %8:bool = load %x_30
+        if %8 [t: $B7] {  # if_2
+          $B7: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        exit_loop  # loop_1
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B8: {
+    %10:void = call %main_1
+    %11:vec4<f32> = load %x_GLF_color
+    %12:main_out = construct %11
+    ret %12
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/unreachable-return-in-loop/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/unreachable-return-in-loop/0.wgsl.expected.ir.msl
index efdd3b1..3b508d1 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/unreachable-return-in-loop/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/unreachable-return-in-loop/0.wgsl.expected.ir.msl
@@ -1,6 +1,67 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+}
+
+%main_1 = func():void {
+  $B2: {
+    %x_21_phi:ptr<function, bool, read_write> = var
+    store %x_21_phi, false
+    loop [b: $B3] {  # loop_1
+      $B3: {  # body
+        %x_25:ptr<function, bool, read_write> = var
+        %x_25_phi:ptr<function, bool, read_write> = var
+        %x_30_phi:ptr<function, bool, read_write> = var
+        %7:bool = load %x_21_phi
+        %x_21:bool = let %7
+        store %x_25_phi, %x_21
+        loop [b: $B4] {  # loop_2
+          $B4: {  # body
+            %9:bool = load %x_25_phi
+            store %x_25, %9
+            %10:bool = load %x_25
+            store %x_30_phi, %10
+            if false [t: $B5, f: $B6] {  # if_1
+              $B5: {  # true
+                exit_if  # if_1
+              }
+              $B6: {  # false
+                exit_loop  # loop_2
+              }
+            }
+            store %x_30_phi, true
+            exit_loop  # loop_2
+          }
+        }
+        %11:bool = load %x_30_phi
+        %x_30:bool = let %11
+        if %x_30 [t: $B7] {  # if_2
+          $B7: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        exit_loop  # loop_1
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B8: {
+    %14:void = call %main_1
+    %15:vec4<f32> = load %x_GLF_color
+    %16:main_out = construct %15
+    ret %16
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/uv-value-comparison-as-boolean/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/uv-value-comparison-as-boolean/0.spvasm.expected.ir.msl
index 2e88a5f..1df86df 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/uv-value-comparison-as-boolean/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/uv-value-comparison-as-boolean/0.spvasm.expected.ir.msl
@@ -1,6 +1,62 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::LoadVectorElement
+../../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
+}
+
+%main_1 = func():void {
+  $B2: {
+    %c1:ptr<function, bool, read_write> = var
+    %uv:ptr<function, vec2<f32>, read_write> = var
+    %i:ptr<function, i32, read_write> = var
+    %x_37:ptr<function, bool, read_write> = var
+    %x_9:ptr<function, i32, read_write> = var
+    %8:f32 = load_vector_element %uv, 1u
+    %9:bool = lt %8, 0.25f
+    %x_35:bool = let %9
+    store %c1, %x_35
+    store %i, 0i
+    store %x_37, %x_35
+    store %x_9, 0i
+    loop [b: $B3] {  # loop_1
+      $B3: {  # body
+        %11:i32 = load %x_9
+        %12:bool = lt %11, 1i
+        if %12 [t: $B4, f: $B5] {  # if_1
+          $B4: {  # true
+            exit_if  # if_1
+          }
+          $B5: {  # false
+            exit_loop  # loop_1
+          }
+        }
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        ret
+      }
+    }
+    %13:bool = load %x_37
+    if %13 [t: $B6] {  # if_2
+      $B6: {  # true
+        ret
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B7: {
+    %15:void = call %main_1
+    %16:vec4<f32> = load %x_GLF_color
+    %17:main_out = construct %16
+    ret %17
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/uv-value-comparison-as-boolean/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/uv-value-comparison-as-boolean/0.wgsl.expected.ir.msl
index 2e88a5f..62bb5ae 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/uv-value-comparison-as-boolean/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/uv-value-comparison-as-boolean/0.wgsl.expected.ir.msl
@@ -1,6 +1,67 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::LoadVectorElement
+../../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
+}
+
+%main_1 = func():void {
+  $B2: {
+    %c1:ptr<function, bool, read_write> = var
+    %uv:ptr<function, vec2<f32>, read_write> = var
+    %i:ptr<function, i32, read_write> = var
+    %x_37:ptr<function, bool, read_write> = var
+    %x_37_phi:ptr<function, bool, read_write> = var
+    %x_9_phi:ptr<function, i32, read_write> = var
+    %9:f32 = load_vector_element %uv, 1u
+    %x_34:f32 = let %9
+    %11:bool = lt %x_34, 0.25f
+    %x_35:bool = let %11
+    store %c1, %x_35
+    store %i, 0i
+    store %x_37_phi, %x_35
+    store %x_9_phi, 0i
+    loop [b: $B3] {  # loop_1
+      $B3: {  # body
+        %13:bool = load %x_37_phi
+        store %x_37, %13
+        %14:i32 = load %x_9_phi
+        %x_9:i32 = let %14
+        %16:bool = lt %x_9, 1i
+        if %16 [t: $B4, f: $B5] {  # if_1
+          $B4: {  # true
+            exit_if  # if_1
+          }
+          $B5: {  # false
+            exit_loop  # loop_1
+          }
+        }
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        ret
+      }
+    }
+    %17:bool = load %x_37
+    if %17 [t: $B6] {  # if_2
+      $B6: {  # true
+        ret
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B7: {
+    %19:void = call %main_1
+    %20:vec4<f32> = load %x_GLF_color
+    %21:main_out = construct %20
+    ret %21
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/vector-values-multiplied-by-fragcoord/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/vector-values-multiplied-by-fragcoord/0-opt.spvasm.expected.ir.msl
index 169b1a6..066dcaf 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/vector-values-multiplied-by-fragcoord/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/vector-values-multiplied-by-fragcoord/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,14 +8,14 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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
 }
 
-%func_ = func():f32 -> %b2 {
-  %b2 = block {
+%func_ = func():f32 {
+  $B2: {
     %alwaysFalse:ptr<function, bool, read_write> = var
     %value:ptr<function, vec4<f32>, read_write> = var
     %a:ptr<function, vec2<f32>, read_write> = var
@@ -26,8 +26,8 @@
     %12:bool = lt %11, -1.0f
     store %alwaysFalse, %12
     %13:bool = load %alwaysFalse
-    if %13 [t: %b3] {  # if_1
-      %b3 = block {  # true
+    if %13 [t: $B3] {  # if_1
+      $B3: {  # true
         %14:vec2<f32> = load %a
         %15:vec2<f32> = swizzle %14, xy
         %16:vec4<f32> = load %value
@@ -39,8 +39,8 @@
     }
     %19:bool = load %alwaysFalse
     %20:bool = eq %19, false
-    if %20 [t: %b4] {  # if_2
-      %b4 = block {  # true
+    if %20 [t: $B4] {  # if_2
+      $B4: {  # true
         %21:ptr<uniform, vec2<f32>, read> = access %x_10, 0u
         %22:vec2<f32> = load %21
         %23:vec2<f32> = swizzle %22, xy
@@ -66,103 +66,108 @@
     %39:vec4<f32> = construct %28, %38
     store %value, %39
     store %i, 0i
-    loop [b: %b5, c: %b6] {  # loop_1
-      %b5 = block {  # body
+    loop [b: $B5, c: $B6] {  # loop_1
+      $B5: {  # body
         %40:i32 = load %i
-        %41:ptr<uniform, vec2<f32>, read> = access %x_10, 0u
-        %42:f32 = load_vector_element %41, 1u
-        %43:i32 = convert %42
-        %44:i32 = add %43, 1i
-        %45:bool = lt %40, %44
-        if %45 [t: %b7, f: %b8] {  # if_3
-          %b7 = block {  # true
+        %41:i32 = let %40
+        %42:ptr<uniform, vec2<f32>, read> = access %x_10, 0u
+        %43:f32 = load_vector_element %42, 1u
+        %44:i32 = call %tint_f32_to_i32, %43
+        %46:i32 = add %44, 1i
+        %47:bool = lt %41, %46
+        if %47 [t: $B7, f: $B8] {  # if_3
+          $B7: {  # true
             exit_if  # if_3
           }
-          %b8 = block {  # false
+          $B8: {  # false
             exit_loop  # loop_1
           }
         }
-        %46:i32 = load %i
-        %47:f32 = convert %46
-        store_vector_element %value, 0u, %47
-        continue %b6
-      }
-      %b6 = block {  # continuing
         %48:i32 = load %i
-        %49:i32 = add %48, 1i
-        store %i, %49
-        next_iteration %b5
+        %49:f32 = convert %48
+        store_vector_element %value, 0u, %49
+        continue  # -> $B6
+      }
+      $B6: {  # continuing
+        %50:i32 = load %i
+        %51:i32 = add %50, 1i
+        store %i, %51
+        next_iteration  # -> $B5
       }
     }
-    %50:f32 = load_vector_element %value, 0u
-    %x_116:bool = eq %50, 1.0f
+    %52:f32 = load_vector_element %value, 0u
+    %53:bool = eq %52, 1.0f
+    %x_116:bool = let %53
     store %x_122, %x_116
-    if %x_116 [t: %b9] {  # if_4
-      %b9 = block {  # true
-        %52:f32 = load_vector_element %value, 1u
-        %53:bool = eq %52, 1.0f
-        store %x_121, %53
-        %54:bool = load %x_121
-        store %x_122, %54
+    if %x_116 [t: $B9] {  # if_4
+      $B9: {  # true
+        %55:f32 = load_vector_element %value, 1u
+        %56:bool = eq %55, 1.0f
+        store %x_121, %56
+        %57:bool = load %x_121
+        store %x_122, %57
         exit_if  # if_4
       }
     }
-    %55:bool = load %x_122
-    if %55 [t: %b10, f: %b11] {  # if_5
-      %b10 = block {  # true
+    %58:bool = load %x_122
+    if %58 [t: $B10, f: $B11] {  # if_5
+      $B10: {  # true
         ret 1.0f
       }
-      %b11 = block {  # false
+      $B11: {  # false
         ret 0.0f
       }
     }
     unreachable
   }
 }
-%main_1 = func():void -> %b12 {
-  %b12 = block {
+%main_1 = func():void {
+  $B12: {
     %count:ptr<function, i32, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
     store %count, 0i
     store %i_1, 0i
-    loop [b: %b13, c: %b14] {  # loop_2
-      %b13 = block {  # body
-        %59:i32 = load %i_1
-        %60:ptr<uniform, vec2<f32>, read> = access %x_10, 0u
-        %61:f32 = load_vector_element %60, 1u
-        %62:i32 = convert %61
-        %63:i32 = add %62, 1i
-        %64:bool = lt %59, %63
-        if %64 [t: %b15, f: %b16] {  # if_6
-          %b15 = block {  # true
+    loop [b: $B13, c: $B14] {  # loop_2
+      $B13: {  # body
+        %62:i32 = load %i_1
+        %63:i32 = let %62
+        %64:ptr<uniform, vec2<f32>, read> = access %x_10, 0u
+        %65:f32 = load_vector_element %64, 1u
+        %66:i32 = call %tint_f32_to_i32, %65
+        %67:i32 = add %66, 1i
+        %68:bool = lt %63, %67
+        if %68 [t: $B15, f: $B16] {  # if_6
+          $B15: {  # true
             exit_if  # if_6
           }
-          %b16 = block {  # false
+          $B16: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_58:f32 = call %func_
-        %66:i32 = load %count
-        %67:i32 = convert %x_58
-        %68:i32 = add %66, %67
-        store %count, %68
-        continue %b14
+        %69:f32 = call %func_
+        %x_58:f32 = let %69
+        %71:i32 = load %count
+        %72:i32 = let %71
+        %73:i32 = call %tint_f32_to_i32, %x_58
+        %74:i32 = add %72, %73
+        store %count, %74
+        continue  # -> $B14
       }
-      %b14 = block {  # continuing
-        %69:i32 = load %i_1
-        %70:i32 = add %69, 1i
-        store %i_1, %70
-        next_iteration %b13
+      $B14: {  # continuing
+        %75:i32 = load %i_1
+        %76:i32 = add %75, 1i
+        store %i_1, %76
+        next_iteration  # -> $B13
       }
     }
-    %71:i32 = load %count
-    %72:bool = eq %71, 2i
-    if %72 [t: %b17, f: %b18] {  # if_7
-      %b17 = block {  # true
+    %77:i32 = load %count
+    %78:bool = eq %77, 2i
+    if %78 [t: $B17, f: $B18] {  # if_7
+      $B17: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_7
       }
-      %b18 = block {  # false
+      $B18: {  # false
         store %x_GLF_color, vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_7
       }
@@ -170,13 +175,23 @@
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b19 {
-  %b19 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B19: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %75:void = call %main_1
-    %76:vec4<f32> = load %x_GLF_color
-    %77:main_out = construct %76
-    ret %77
+    %81:void = call %main_1
+    %82:vec4<f32> = load %x_GLF_color
+    %83:main_out = construct %82
+    ret %83
+  }
+}
+%tint_f32_to_i32 = func(%value_1:f32):i32 {  # %value_1: 'value'
+  $B20: {
+    %85:i32 = convert %value_1
+    %86:bool = gte %value_1, -2147483648.0f
+    %87:i32 = select -2147483648i, %85, %86
+    %88:bool = lte %value_1, 2147483520.0f
+    %89:i32 = select 2147483647i, %87, %88
+    ret %89
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/vector-values-multiplied-by-fragcoord/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/vector-values-multiplied-by-fragcoord/0-opt.wgsl.expected.ir.msl
index 0dd22ab..f4430db 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/vector-values-multiplied-by-fragcoord/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/vector-values-multiplied-by-fragcoord/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,173 +8,201 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$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
 }
 
-%func_ = func():f32 -> %b2 {
-  %b2 = block {
+%func_ = func():f32 {
+  $B2: {
     %alwaysFalse:ptr<function, bool, read_write> = var
     %value:ptr<function, vec4<f32>, read_write> = var
     %a:ptr<function, vec2<f32>, read_write> = var
     %i:ptr<function, i32, read_write> = var
     %x_121:ptr<function, bool, read_write> = var
     %x_122_phi:ptr<function, bool, read_write> = var
-    %x_71:f32 = load_vector_element %gl_FragCoord, 0u
-    %12:bool = lt %x_71, -1.0f
-    store %alwaysFalse, %12
-    %x_73:bool = load %alwaysFalse
-    if %x_73 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %x_76:vec2<f32> = load %a
-        %x_77:vec4<f32> = load %value
-        %16:f32 = access %x_76, 0u
-        %17:f32 = access %x_76, 1u
-        %18:f32 = access %x_77, 2u
-        %19:f32 = access %x_77, 3u
-        %20:vec4<f32> = construct %16, %17, %18, %19
-        store %value, %20
+    %11:f32 = load_vector_element %gl_FragCoord, 0u
+    %x_71:f32 = let %11
+    %13:bool = lt %x_71, -1.0f
+    store %alwaysFalse, %13
+    %14:bool = load %alwaysFalse
+    %x_73:bool = let %14
+    if %x_73 [t: $B3] {  # if_1
+      $B3: {  # true
+        %16:vec2<f32> = load %a
+        %x_76:vec2<f32> = let %16
+        %18:vec4<f32> = load %value
+        %x_77:vec4<f32> = let %18
+        %20:f32 = access %x_76, 0u
+        %21:f32 = access %x_76, 1u
+        %22:f32 = access %x_77, 2u
+        %23:f32 = access %x_77, 3u
+        %24:vec4<f32> = construct %20, %21, %22, %23
+        store %value, %24
         exit_if  # if_1
       }
     }
-    %x_79:bool = load %alwaysFalse
-    %22:bool = eq %x_79, false
-    if %22 [t: %b4] {  # if_2
-      %b4 = block {  # true
-        %23:ptr<uniform, vec2<f32>, read> = access %x_10, 0u
-        %x_84:vec2<f32> = load %23
-        %x_85:vec4<f32> = load %value
-        %26:f32 = access %x_84, 0u
-        %27:f32 = access %x_84, 1u
-        %28:f32 = access %x_85, 2u
-        %29:f32 = access %x_85, 3u
-        %30:vec4<f32> = construct %26, %27, %28, %29
-        store %value, %30
+    %25:bool = load %alwaysFalse
+    %x_79:bool = let %25
+    %27:bool = eq %x_79, false
+    if %27 [t: $B4] {  # if_2
+      $B4: {  # true
+        %28:ptr<uniform, vec2<f32>, read> = access %x_10, 0u
+        %29:vec2<f32> = load %28
+        %x_84:vec2<f32> = let %29
+        %31:vec4<f32> = load %value
+        %x_85:vec4<f32> = let %31
+        %33:f32 = access %x_84, 0u
+        %34:f32 = access %x_84, 1u
+        %35:f32 = access %x_85, 2u
+        %36:f32 = access %x_85, 3u
+        %37:vec4<f32> = construct %33, %34, %35, %36
+        store %value, %37
         exit_if  # if_2
       }
     }
-    %x_87:vec4<f32> = load %gl_FragCoord
-    %x_89:vec4<f32> = load %value
-    %x_93:vec4<f32> = load %value
-    %34:f32 = access %x_87, 0u
-    %35:f32 = access %x_87, 1u
-    %36:vec2<f32> = construct %34, %35
-    %37:f32 = access %x_89, 0u
-    %38:f32 = access %x_89, 1u
-    %39:vec2<f32> = construct %37, %38
-    %40:vec2<f32> = mul %36, %39
-    %41:vec2<f32> = mul %40, vec2<f32>(2.0f)
-    %42:f32 = access %x_93, 0u
-    %43:f32 = access %x_93, 1u
-    %44:vec2<f32> = construct %42, %43
-    %x_95:vec2<f32> = add %41, %44
-    %x_96:vec4<f32> = load %value
-    %47:f32 = access %x_96, 0u
-    %48:f32 = access %x_96, 1u
-    %49:f32 = access %x_95, 0u
-    %50:f32 = access %x_95, 1u
-    %51:vec4<f32> = construct %47, %48, %49, %50
-    store %value, %51
+    %38:vec4<f32> = load %gl_FragCoord
+    %x_87:vec4<f32> = let %38
+    %40:vec4<f32> = load %value
+    %x_89:vec4<f32> = let %40
+    %42:vec4<f32> = load %value
+    %x_93:vec4<f32> = let %42
+    %44:f32 = access %x_87, 0u
+    %45:f32 = access %x_87, 1u
+    %46:vec2<f32> = construct %44, %45
+    %47:vec2<f32> = let %46
+    %48:f32 = access %x_89, 0u
+    %49:f32 = access %x_89, 1u
+    %50:vec2<f32> = construct %48, %49
+    %51:vec2<f32> = mul %47, %50
+    %52:vec2<f32> = mul %51, vec2<f32>(2.0f)
+    %53:vec2<f32> = let %52
+    %54:f32 = access %x_93, 0u
+    %55:f32 = access %x_93, 1u
+    %56:vec2<f32> = construct %54, %55
+    %57:vec2<f32> = add %53, %56
+    %x_95:vec2<f32> = let %57
+    %59:vec4<f32> = load %value
+    %x_96:vec4<f32> = let %59
+    %61:f32 = access %x_96, 0u
+    %62:f32 = access %x_96, 1u
+    %63:f32 = access %x_95, 0u
+    %64:f32 = access %x_95, 1u
+    %65:vec4<f32> = construct %61, %62, %63, %64
+    store %value, %65
     store %i, 0i
-    loop [b: %b5, c: %b6] {  # loop_1
-      %b5 = block {  # body
-        %x_102:i32 = load %i
-        %53:ptr<uniform, vec2<f32>, read> = access %x_10, 0u
-        %x_104:f32 = load_vector_element %53, 1u
-        %55:i32 = convert %x_104
-        %56:i32 = add %55, 1i
-        %57:bool = lt %x_102, %56
-        if %57 [t: %b7, f: %b8] {  # if_3
-          %b7 = block {  # true
+    loop [b: $B5, c: $B6] {  # loop_1
+      $B5: {  # body
+        %66:i32 = load %i
+        %x_102:i32 = let %66
+        %68:ptr<uniform, vec2<f32>, read> = access %x_10, 0u
+        %69:f32 = load_vector_element %68, 1u
+        %x_104:f32 = let %69
+        %71:i32 = call %tint_f32_to_i32, %x_104
+        %73:i32 = add %71, 1i
+        %74:bool = lt %x_102, %73
+        if %74 [t: $B7, f: $B8] {  # if_3
+          $B7: {  # true
             exit_if  # if_3
           }
-          %b8 = block {  # false
+          $B8: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_109:i32 = load %i
-        %59:f32 = convert %x_109
-        store_vector_element %value, 0u, %59
-        continue %b6
+        %75:i32 = load %i
+        %x_109:i32 = let %75
+        %77:f32 = convert %x_109
+        store_vector_element %value, 0u, %77
+        continue  # -> $B6
       }
-      %b6 = block {  # continuing
-        %x_112:i32 = load %i
-        %61:i32 = add %x_112, 1i
-        store %i, %61
-        next_iteration %b5
+      $B6: {  # continuing
+        %78:i32 = load %i
+        %x_112:i32 = let %78
+        %80:i32 = add %x_112, 1i
+        store %i, %80
+        next_iteration  # -> $B5
       }
     }
-    %x_115:f32 = load_vector_element %value, 0u
-    %x_116:bool = eq %x_115, 1.0f
+    %81:f32 = load_vector_element %value, 0u
+    %x_115:f32 = let %81
+    %83:bool = eq %x_115, 1.0f
+    %x_116:bool = let %83
     store %x_122_phi, %x_116
-    if %x_116 [t: %b9] {  # if_4
-      %b9 = block {  # true
-        %x_120:f32 = load_vector_element %value, 1u
-        %65:bool = eq %x_120, 1.0f
-        store %x_121, %65
-        %66:bool = load %x_121
-        store %x_122_phi, %66
+    if %x_116 [t: $B9] {  # if_4
+      $B9: {  # true
+        %85:f32 = load_vector_element %value, 1u
+        %x_120:f32 = let %85
+        %87:bool = eq %x_120, 1.0f
+        store %x_121, %87
+        %88:bool = load %x_121
+        store %x_122_phi, %88
         exit_if  # if_4
       }
     }
-    %x_122:bool = load %x_122_phi
-    if %x_122 [t: %b10, f: %b11] {  # if_5
-      %b10 = block {  # true
+    %89:bool = load %x_122_phi
+    %x_122:bool = let %89
+    if %x_122 [t: $B10, f: $B11] {  # if_5
+      $B10: {  # true
         ret 1.0f
       }
-      %b11 = block {  # false
+      $B11: {  # false
         ret 0.0f
       }
     }
     unreachable
   }
 }
-%main_1 = func():void -> %b12 {
-  %b12 = block {
+%main_1 = func():void {
+  $B12: {
     %count:ptr<function, i32, read_write> = var
     %i_1:ptr<function, i32, read_write> = var
     store %count, 0i
     store %i_1, 0i
-    loop [b: %b13, c: %b14] {  # loop_2
-      %b13 = block {  # body
-        %x_51:i32 = load %i_1
-        %72:ptr<uniform, vec2<f32>, read> = access %x_10, 0u
-        %x_53:f32 = load_vector_element %72, 1u
-        %74:i32 = convert %x_53
-        %75:i32 = add %74, 1i
-        %76:bool = lt %x_51, %75
-        if %76 [t: %b15, f: %b16] {  # if_6
-          %b15 = block {  # true
+    loop [b: $B13, c: $B14] {  # loop_2
+      $B13: {  # body
+        %94:i32 = load %i_1
+        %x_51:i32 = let %94
+        %96:ptr<uniform, vec2<f32>, read> = access %x_10, 0u
+        %97:f32 = load_vector_element %96, 1u
+        %x_53:f32 = let %97
+        %99:i32 = call %tint_f32_to_i32, %x_53
+        %100:i32 = add %99, 1i
+        %101:bool = lt %x_51, %100
+        if %101 [t: $B15, f: $B16] {  # if_6
+          $B15: {  # true
             exit_if  # if_6
           }
-          %b16 = block {  # false
+          $B16: {  # false
             exit_loop  # loop_2
           }
         }
-        %x_58:f32 = call %func_
-        %x_60:i32 = load %count
-        %79:i32 = convert %x_58
-        %80:i32 = add %x_60, %79
-        store %count, %80
-        continue %b14
+        %102:f32 = call %func_
+        %x_58:f32 = let %102
+        %104:i32 = load %count
+        %x_60:i32 = let %104
+        %106:i32 = call %tint_f32_to_i32, %x_58
+        %107:i32 = add %x_60, %106
+        store %count, %107
+        continue  # -> $B14
       }
-      %b14 = block {  # continuing
-        %x_62:i32 = load %i_1
-        %82:i32 = add %x_62, 1i
-        store %i_1, %82
-        next_iteration %b13
+      $B14: {  # continuing
+        %108:i32 = load %i_1
+        %x_62:i32 = let %108
+        %110:i32 = add %x_62, 1i
+        store %i_1, %110
+        next_iteration  # -> $B13
       }
     }
-    %x_64:i32 = load %count
-    %84:bool = eq %x_64, 2i
-    if %84 [t: %b17, f: %b18] {  # if_7
-      %b17 = block {  # true
+    %111:i32 = load %count
+    %x_64:i32 = let %111
+    %113:bool = eq %x_64, 2i
+    if %113 [t: $B17, f: $B18] {  # if_7
+      $B17: {  # true
         store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_7
       }
-      %b18 = block {  # false
+      $B18: {  # false
         store %x_GLF_color, vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f)
         exit_if  # if_7
       }
@@ -182,13 +210,23 @@
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b19 {
-  %b19 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B19: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %87:void = call %main_1
-    %88:vec4<f32> = load %x_GLF_color
-    %89:main_out = construct %88
-    ret %89
+    %116:void = call %main_1
+    %117:vec4<f32> = load %x_GLF_color
+    %118:main_out = construct %117
+    ret %118
+  }
+}
+%tint_f32_to_i32 = func(%value_1:f32):i32 {  # %value_1: 'value'
+  $B20: {
+    %120:i32 = convert %value_1
+    %121:bool = gte %value_1, -2147483648.0f
+    %122:i32 = select -2147483648i, %120, %121
+    %123:bool = lte %value_1, 2147483520.0f
+    %124:i32 = select 2147483647i, %122, %123
+    ret %124
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/vectors-and-discard-in-function/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/vectors-and-discard-in-function/0.spvasm.expected.ir.msl
index efdd3b1..0decfbd 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/vectors-and-discard-in-function/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/vectors-and-discard-in-function/0.spvasm.expected.ir.msl
@@ -1,6 +1,90 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+  %continue_execution:ptr<private, bool, read_write> = var, true
+}
+
+%func_ = func():i32 {
+  $B2: {
+    %coord:ptr<function, vec2<f32>, read_write> = var
+    %tmp3:ptr<function, f32, read_write> = var
+    %tmp2:ptr<function, array<f32, 1>, read_write> = var
+    %tmp:ptr<function, vec4<f32>, read_write> = var
+    %x_48:ptr<function, f32, read_write> = var
+    store %coord, vec2<f32>(1.0f)
+    %9:f32 = load_vector_element %coord, 1u
+    %10:i32 = call %tint_f32_to_i32, %9
+    %12:bool = lt %10, 180i
+    if %12 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %13:ptr<function, f32, read_write> = access %tmp2, 0i
+        %14:f32 = load %13
+        store %x_48, %14
+        %15:f32 = load %x_48
+        store %tmp3, %15
+        exit_if  # if_1
+      }
+      $B4: {  # false
+        store %continue_execution, false
+        exit_if  # if_1
+      }
+    }
+    %16:f32 = load %x_48
+    %17:vec4<f32> = construct %16
+    store %tmp, %17
+    ret 1i
+  }
+}
+%main_1 = func():void {
+  $B5: {
+    %19:i32 = call %func_
+    %x_9:i32 = let %19
+    %21:bool = eq %x_9, 1i
+    if %21 [t: $B6, f: $B7] {  # if_2
+      $B6: {  # true
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        exit_if  # if_2
+      }
+      $B7: {  # false
+        store %x_GLF_color, vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f)
+        exit_if  # if_2
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B8: {
+    %23:void = call %main_1
+    %24:vec4<f32> = load %x_GLF_color
+    %25:main_out = construct %24
+    %26:bool = load %continue_execution
+    %27:bool = eq %26, false
+    if %27 [t: $B9] {  # if_3
+      $B9: {  # true
+        terminate_invocation
+      }
+    }
+    ret %25
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B10: {
+    %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.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/vectors-and-discard-in-function/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/vectors-and-discard-in-function/0.wgsl.expected.ir.msl
index efdd3b1..504abb0 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/vectors-and-discard-in-function/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/vectors-and-discard-in-function/0.wgsl.expected.ir.msl
@@ -1,6 +1,94 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+  %continue_execution:ptr<private, bool, read_write> = var, true
+}
+
+%func_ = func():i32 {
+  $B2: {
+    %coord:ptr<function, vec2<f32>, read_write> = var
+    %tmp3:ptr<function, f32, read_write> = var
+    %tmp2:ptr<function, array<f32, 1>, read_write> = var
+    %tmp:ptr<function, vec4<f32>, read_write> = var
+    %x_48:ptr<function, f32, read_write> = var
+    store %coord, vec2<f32>(1.0f)
+    %9:f32 = load_vector_element %coord, 1u
+    %x_41:f32 = let %9
+    %11:i32 = call %tint_f32_to_i32, %x_41
+    %13:bool = lt %11, 180i
+    if %13 [t: $B3, f: $B4] {  # if_1
+      $B3: {  # true
+        %14:ptr<function, f32, read_write> = access %tmp2, 0i
+        %15:f32 = load %14
+        store %x_48, %15
+        %16:f32 = load %x_48
+        store %tmp3, %16
+        exit_if  # if_1
+      }
+      $B4: {  # false
+        store %continue_execution, false
+        exit_if  # if_1
+      }
+    }
+    %17:f32 = load %x_48
+    %18:f32 = load %x_48
+    %19:f32 = load %x_48
+    %20:f32 = load %x_48
+    %21:vec4<f32> = construct %17, %18, %19, %20
+    store %tmp, %21
+    ret 1i
+  }
+}
+%main_1 = func():void {
+  $B5: {
+    %23:i32 = call %func_
+    %x_9:i32 = let %23
+    %25:bool = eq %x_9, 1i
+    if %25 [t: $B6, f: $B7] {  # if_2
+      $B6: {  # true
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        exit_if  # if_2
+      }
+      $B7: {  # false
+        store %x_GLF_color, vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f)
+        exit_if  # if_2
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B8: {
+    %27:void = call %main_1
+    %28:vec4<f32> = load %x_GLF_color
+    %29:main_out = construct %28
+    %30:bool = load %continue_execution
+    %31:bool = eq %30, false
+    if %31 [t: $B9] {  # if_3
+      $B9: {  # true
+        terminate_invocation
+      }
+    }
+    ret %29
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B10: {
+    %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
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/while-function-always-false/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/while-function-always-false/0-opt.spvasm.expected.ir.msl
index 446dc2d..5219abb 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/while-function-always-false/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/while-function-always-false/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,63 +8,71 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %j:ptr<function, i32, read_write> = var
     %x_41:ptr<function, f32, read_write> = var
     store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %6:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
         %7:f32 = load_vector_element %6, 0u
-        %8:i32 = convert %7
+        %8:i32 = call %tint_f32_to_i32, %7
         store %j, %8
-        loop [b: %b5, c: %b6] {  # loop_2
-          %b5 = block {  # body
-            %9:i32 = load %j
-            %10:bool = lt %9, 2i
-            if %10 [t: %b7, f: %b8] {  # if_1
-              %b7 = block {  # true
+        loop [b: $B5] {  # loop_2
+          $B5: {  # body
+            %10:i32 = load %j
+            %11:bool = lt %10, 2i
+            if %11 [t: $B6, f: $B7] {  # if_1
+              $B6: {  # true
                 exit_if  # if_1
               }
-              %b8 = block {  # false
+              $B7: {  # false
                 exit_loop  # loop_2
               }
             }
             ret
           }
-          %b6 = block {  # continuing
-            next_iteration %b5
-          }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %11:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-        %12:f32 = load_vector_element %11, 1u
-        store %x_41, %12
-        %13:f32 = load %x_41
-        %14:bool = gt 0.0f, %13
-        %15:bool = eq %14, false
-        break_if %15 %b3
+      $B4: {  # continuing
+        %12:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
+        %13:f32 = load_vector_element %12, 1u
+        store %x_41, %13
+        %14:f32 = load %x_41
+        %15:bool = gt 0.0f, %14
+        %16:bool = eq %15, false
+        break_if %16  # -> [t: exit_loop loop_1, f: $B3]
       }
     }
-    %16:f32 = load %x_41
-    %x_43:i32 = convert %16
+    %17:f32 = load %x_41
+    %18:i32 = call %tint_f32_to_i32, %17
+    %x_43:i32 = let %18
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b9 {
-  %b9 = block {
-    %19:void = call %main_1
-    %20:vec4<f32> = load %x_GLF_color
-    %21:main_out = construct %20
-    ret %21
+%tint_symbol = @fragment func():main_out {
+  $B8: {
+    %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 {
+  $B9: {
+    %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
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/while-function-always-false/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/while-function-always-false/0-opt.wgsl.expected.ir.msl
index b5c520f..7e41e80 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/while-function-always-false/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/while-function-always-false/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,63 +8,73 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
   %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %j:ptr<function, i32, read_write> = var
     %x_41:ptr<function, f32, read_write> = var
     store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %6:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-        %x_32:f32 = load_vector_element %6, 0u
-        %8:i32 = convert %x_32
-        store %j, %8
-        loop [b: %b5, c: %b6] {  # loop_2
-          %b5 = block {  # body
-            %x_8:i32 = load %j
-            %10:bool = lt %x_8, 2i
-            if %10 [t: %b7, f: %b8] {  # if_1
-              %b7 = block {  # true
+        %7:f32 = load_vector_element %6, 0u
+        %x_32:f32 = let %7
+        %9:i32 = call %tint_f32_to_i32, %x_32
+        store %j, %9
+        loop [b: $B5] {  # loop_2
+          $B5: {  # body
+            %11:i32 = load %j
+            %x_8:i32 = let %11
+            %13:bool = lt %x_8, 2i
+            if %13 [t: $B6, f: $B7] {  # if_1
+              $B6: {  # true
                 exit_if  # if_1
               }
-              %b8 = block {  # false
+              $B7: {  # false
                 exit_loop  # loop_2
               }
             }
             ret
           }
-          %b6 = block {  # continuing
-            next_iteration %b5
-          }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %11:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-        %12:f32 = load_vector_element %11, 1u
-        store %x_41, %12
-        %13:f32 = load %x_41
-        %14:bool = gt 0.0f, %13
-        %15:bool = eq %14, false
-        break_if %15 %b3
+      $B4: {  # continuing
+        %14:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
+        %15:f32 = load_vector_element %14, 1u
+        store %x_41, %15
+        %16:f32 = load %x_41
+        %17:bool = gt 0.0f, %16
+        %18:bool = eq %17, false
+        break_if %18  # -> [t: exit_loop loop_1, f: $B3]
       }
     }
-    %16:f32 = load %x_41
-    %x_43:i32 = convert %16
+    %19:f32 = load %x_41
+    %20:i32 = call %tint_f32_to_i32, %19
+    %x_43:i32 = let %20
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b9 {
-  %b9 = block {
-    %19:void = call %main_1
-    %20:vec4<f32> = load %x_GLF_color
-    %21:main_out = construct %20
-    ret %21
+%tint_symbol = @fragment func():main_out {
+  $B8: {
+    %23:void = call %main_1
+    %24:vec4<f32> = load %x_GLF_color
+    %25:main_out = construct %24
+    ret %25
+  }
+}
+%tint_f32_to_i32 = func(%value:f32):i32 {
+  $B9: {
+    %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
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/write-before-break/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/write-before-break/0-opt.spvasm.expected.ir.msl
index a922f48..1f54f5c 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/write-before-break/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/write-before-break/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   injected:i32 @offset(0)
 }
 
@@ -8,13 +8,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_9:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %idx:ptr<function, i32, read_write> = var
     %m43:ptr<function, mat4x3<f32>, read_write> = var
     %ll_1:ptr<function, i32, read_write> = var
@@ -31,14 +31,14 @@
     store %m43, mat4x3<f32>(vec3<f32>(1.0f, 0.0f, 0.0f), vec3<f32>(0.0f, 1.0f, 0.0f), vec3<f32>(0.0f, 0.0f, 1.0f), vec3<f32>(0.0f))
     store %ll_1, 0i
     store %GLF_live6rows, 2i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %16:i32 = load %ll_1
         %17:ptr<uniform, i32, read> = access %x_9, 0u
         %18:i32 = load %17
         %19:bool = gte %16, %18
-        if %19 [t: %b5] {  # if_1
-          %b5 = block {  # true
+        if %19 [t: $B5] {  # if_1
+          $B5: {  # true
             store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
             exit_loop  # loop_1
           }
@@ -51,15 +51,15 @@
         store %z, %23
         store %ll_2, 0i
         store %ctr, 0i
-        loop [b: %b6, c: %b7] {  # loop_2
-          %b6 = block {  # body
+        loop [b: $B6, c: $B7] {  # loop_2
+          $B6: {  # body
             %24:i32 = load %ctr
             %25:bool = lt %24, 1i
-            if %25 [t: %b8, f: %b9] {  # if_2
-              %b8 = block {  # true
+            if %25 [t: $B8, f: $B9] {  # if_2
+              $B8: {  # true
                 exit_if  # if_2
               }
-              %b9 = block {  # false
+              $B9: {  # false
                 exit_loop  # loop_2
               }
             }
@@ -67,8 +67,8 @@
             %27:ptr<uniform, i32, read> = access %x_9, 0u
             %28:i32 = load %27
             %29:bool = gte %26, %28
-            if %29 [t: %b10] {  # if_3
-              %b10 = block {  # true
+            if %29 [t: $B10] {  # if_3
+              $B10: {  # true
                 exit_loop  # loop_2
               }
             }
@@ -79,86 +79,94 @@
             store %tempm43, %32
             store %ll_3, 0i
             store %c, 0i
-            loop [b: %b11, c: %b12] {  # loop_3
-              %b11 = block {  # body
+            loop [b: $B11, c: $B12] {  # loop_3
+              $B11: {  # body
                 %33:i32 = load %z
                 %34:bool = lt 1i, %33
-                if %34 [t: %b13, f: %b14] {  # if_4
-                  %b13 = block {  # true
+                if %34 [t: $B13, f: $B14] {  # if_4
+                  $B13: {  # true
                     exit_if  # if_4
                   }
-                  %b14 = block {  # false
+                  $B14: {  # false
                     exit_loop  # loop_3
                   }
                 }
                 store %d, 0i
-                %x_29:i32 = load %c
-                %x_30:i32 = load %c
-                %x_31:i32 = load %c
-                %x_32:i32 = load %d
-                %x_33:i32 = load %d
-                %x_34:i32 = load %d
-                %41:bool = gte %x_29, 0i
-                %42:bool = lt %x_30, 4i
-                %43:bool = and %41, %42
-                %44:i32 = select 0i, %x_31, %43
-                %45:ptr<function, vec3<f32>, read_write> = access %tempm43, %44
-                %46:bool = gte %x_32, 0i
-                %47:bool = lt %x_33, 3i
-                %48:bool = and %46, %47
-                %49:i32 = select 0i, %x_34, %48
-                store_vector_element %45, %49, 1.0f
-                continue %b12
+                %35:i32 = load %c
+                %x_29:i32 = let %35
+                %37:i32 = load %c
+                %x_30:i32 = let %37
+                %39:i32 = load %c
+                %x_31:i32 = let %39
+                %41:i32 = load %d
+                %x_32:i32 = let %41
+                %43:i32 = load %d
+                %x_33:i32 = let %43
+                %45:i32 = load %d
+                %x_34:i32 = let %45
+                %47:bool = gte %x_29, 0i
+                %48:bool = lt %x_30, 4i
+                %49:bool = and %47, %48
+                %50:i32 = select 0i, %x_31, %49
+                %51:ptr<function, vec3<f32>, read_write> = access %tempm43, %50
+                %52:ptr<function, vec3<f32>, read_write> = let %51
+                %53:bool = gte %x_32, 0i
+                %54:bool = lt %x_33, 3i
+                %55:bool = and %53, %54
+                %56:i32 = select 0i, %x_34, %55
+                store_vector_element %52, %56, 1.0f
+                continue  # -> $B12
               }
-              %b12 = block {  # continuing
-                %50:i32 = load %c
-                %51:i32 = add %50, 1i
-                store %c, %51
-                next_iteration %b11
+              $B12: {  # continuing
+                %57:i32 = load %c
+                %58:i32 = add %57, 1i
+                store %c, %58
+                next_iteration  # -> $B11
               }
             }
-            %52:i32 = load %idx
-            %53:i32 = load %idx
-            %54:bool = gte %53, 0i
-            %55:i32 = load %idx
-            %56:bool = lt %55, 9i
-            %57:bool = and %54, %56
-            %x_117:i32 = select 0i, %52, %57
-            %59:ptr<function, f32, read_write> = access %GLF_live6sums, %x_117
-            %60:ptr<function, f32, read_write> = access %GLF_live6sums, %x_117
-            %61:f32 = load %60
-            %62:i32 = load %ctr
-            %63:ptr<function, vec3<f32>, read_write> = access %m43, %62
-            %64:f32 = load_vector_element %63, 1u
-            %65:f32 = add %61, %64
-            store %59, %65
-            continue %b7
+            %59:i32 = load %idx
+            %60:i32 = load %idx
+            %61:bool = gte %60, 0i
+            %62:i32 = load %idx
+            %63:bool = lt %62, 9i
+            %64:bool = and %61, %63
+            %65:i32 = select 0i, %59, %64
+            %x_117:i32 = let %65
+            %67:ptr<function, f32, read_write> = access %GLF_live6sums, %x_117
+            %68:ptr<function, f32, read_write> = access %GLF_live6sums, %x_117
+            %69:f32 = load %68
+            %70:i32 = load %ctr
+            %71:ptr<function, vec3<f32>, read_write> = access %m43, %70
+            %72:f32 = load_vector_element %71, 1u
+            %73:f32 = add %69, %72
+            store %67, %73
+            continue  # -> $B7
           }
-          %b7 = block {  # continuing
-            %66:i32 = load %ctr
-            %67:i32 = add %66, 1i
-            store %ctr, %67
-            next_iteration %b6
+          $B7: {  # continuing
+            %74:i32 = load %ctr
+            %75:i32 = add %74, 1i
+            store %ctr, %75
+            next_iteration  # -> $B6
           }
         }
-        %68:i32 = load %idx
-        %69:i32 = add %68, 1i
-        store %idx, %69
-        continue %b4
+        %76:i32 = load %idx
+        %77:i32 = add %76, 1i
+        store %idx, %77
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b15 {
-  %b15 = block {
-    %71:void = call %main_1
-    %72:vec4<f32> = load %x_GLF_color
-    %73:main_out = construct %72
-    ret %73
+%tint_symbol = @fragment func():main_out {
+  $B15: {
+    %79:void = call %main_1
+    %80:vec4<f32> = load %x_GLF_color
+    %81:main_out = construct %80
+    ret %81
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/write-before-break/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/write-before-break/0-opt.wgsl.expected.ir.msl
index 4c071ce..9331a47 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/write-before-break/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/write-before-break/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
   injected:i32 @offset(0)
 }
 
@@ -8,13 +8,13 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_9:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %idx:ptr<function, i32, read_write> = var
     %m43:ptr<function, mat4x3<f32>, read_write> = var
     %ll_1:ptr<function, i32, read_write> = var
@@ -31,134 +31,161 @@
     store %m43, mat4x3<f32>(vec3<f32>(1.0f, 0.0f, 0.0f), vec3<f32>(0.0f, 1.0f, 0.0f), vec3<f32>(0.0f, 0.0f, 1.0f), vec3<f32>(0.0f))
     store %ll_1, 0i
     store %GLF_live6rows, 2i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_18:i32 = load %ll_1
-        %17:ptr<uniform, i32, read> = access %x_9, 0u
-        %x_19:i32 = load %17
-        %19:bool = gte %x_18, %x_19
-        if %19 [t: %b5] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %16:i32 = load %ll_1
+        %x_18:i32 = let %16
+        %18:ptr<uniform, i32, read> = access %x_9, 0u
+        %19:i32 = load %18
+        %x_19:i32 = let %19
+        %21:bool = gte %x_18, %x_19
+        if %21 [t: $B5] {  # if_1
+          $B5: {  # true
             store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
             exit_loop  # loop_1
           }
         }
-        %x_20:i32 = load %ll_1
-        %21:i32 = add %x_20, 1i
-        store %ll_1, %21
-        %22:ptr<uniform, i32, read> = access %x_9, 0u
-        %x_22:i32 = load %22
+        %22:i32 = load %ll_1
+        %x_20:i32 = let %22
+        %24:i32 = add %x_20, 1i
+        store %ll_1, %24
+        %25:ptr<uniform, i32, read> = access %x_9, 0u
+        %26:i32 = load %25
+        %x_22:i32 = let %26
         store %z, %x_22
         store %ll_2, 0i
         store %ctr, 0i
-        loop [b: %b6, c: %b7] {  # loop_2
-          %b6 = block {  # body
-            %x_23:i32 = load %ctr
-            %25:bool = lt %x_23, 1i
-            if %25 [t: %b8, f: %b9] {  # if_2
-              %b8 = block {  # true
+        loop [b: $B6, c: $B7] {  # loop_2
+          $B6: {  # body
+            %28:i32 = load %ctr
+            %x_23:i32 = let %28
+            %30:bool = lt %x_23, 1i
+            if %30 [t: $B8, f: $B9] {  # if_2
+              $B8: {  # true
                 exit_if  # if_2
               }
-              %b9 = block {  # false
+              $B9: {  # false
                 exit_loop  # loop_2
               }
             }
-            %x_24:i32 = load %ll_2
-            %27:ptr<uniform, i32, read> = access %x_9, 0u
-            %x_25:i32 = load %27
-            %29:bool = gte %x_24, %x_25
-            if %29 [t: %b10] {  # if_3
-              %b10 = block {  # true
+            %31:i32 = load %ll_2
+            %x_24:i32 = let %31
+            %33:ptr<uniform, i32, read> = access %x_9, 0u
+            %34:i32 = load %33
+            %x_25:i32 = let %34
+            %36:bool = gte %x_24, %x_25
+            if %36 [t: $B10] {  # if_3
+              $B10: {  # true
                 exit_loop  # loop_2
               }
             }
-            %x_26:i32 = load %ll_2
-            %31:i32 = add %x_26, 1i
-            store %ll_2, %31
-            %x_98:mat4x3<f32> = load %m43
+            %37:i32 = load %ll_2
+            %x_26:i32 = let %37
+            %39:i32 = add %x_26, 1i
+            store %ll_2, %39
+            %40:mat4x3<f32> = load %m43
+            %x_98:mat4x3<f32> = let %40
             store %tempm43, %x_98
             store %ll_3, 0i
             store %c, 0i
-            loop [b: %b11, c: %b12] {  # loop_3
-              %b11 = block {  # body
-                %x_28:i32 = load %z
-                %34:bool = lt 1i, %x_28
-                if %34 [t: %b13, f: %b14] {  # if_4
-                  %b13 = block {  # true
+            loop [b: $B11, c: $B12] {  # loop_3
+              $B11: {  # body
+                %42:i32 = load %z
+                %x_28:i32 = let %42
+                %44:bool = lt 1i, %x_28
+                if %44 [t: $B13, f: $B14] {  # if_4
+                  $B13: {  # true
                     exit_if  # if_4
                   }
-                  %b14 = block {  # false
+                  $B14: {  # false
                     exit_loop  # loop_3
                   }
                 }
                 store %d, 0i
-                %x_29:i32 = load %c
-                %x_30:i32 = load %c
-                %x_31:i32 = load %c
-                %x_32:i32 = load %d
-                %x_33:i32 = load %d
-                %x_34:i32 = load %d
-                %41:bool = gte %x_29, 0i
-                %42:bool = lt %x_30, 4i
-                %43:bool = and %41, %42
-                %44:i32 = select 0i, %x_31, %43
-                %45:ptr<function, vec3<f32>, read_write> = access %tempm43, %44
-                %46:bool = gte %x_32, 0i
-                %47:bool = lt %x_33, 3i
-                %48:bool = and %46, %47
-                %49:i32 = select 0i, %x_34, %48
-                store_vector_element %45, %49, 1.0f
-                continue %b12
+                %45:i32 = load %c
+                %x_29:i32 = let %45
+                %47:i32 = load %c
+                %x_30:i32 = let %47
+                %49:i32 = load %c
+                %x_31:i32 = let %49
+                %51:i32 = load %d
+                %x_32:i32 = let %51
+                %53:i32 = load %d
+                %x_33:i32 = let %53
+                %55:i32 = load %d
+                %x_34:i32 = let %55
+                %57:bool = gte %x_29, 0i
+                %58:bool = lt %x_30, 4i
+                %59:bool = and %57, %58
+                %60:i32 = select 0i, %x_31, %59
+                %61:ptr<function, vec3<f32>, read_write> = access %tempm43, %60
+                %62:ptr<function, vec3<f32>, read_write> = let %61
+                %63:bool = gte %x_32, 0i
+                %64:bool = lt %x_33, 3i
+                %65:bool = and %63, %64
+                %66:i32 = select 0i, %x_34, %65
+                store_vector_element %62, %66, 1.0f
+                continue  # -> $B12
               }
-              %b12 = block {  # continuing
-                %x_35:i32 = load %c
-                %51:i32 = add %x_35, 1i
-                store %c, %51
-                next_iteration %b11
+              $B12: {  # continuing
+                %67:i32 = load %c
+                %x_35:i32 = let %67
+                %69:i32 = add %x_35, 1i
+                store %c, %69
+                next_iteration  # -> $B11
               }
             }
-            %x_37:i32 = load %idx
-            %x_38:i32 = load %idx
-            %x_39:i32 = load %idx
-            %55:bool = gte %x_37, 0i
-            %56:bool = lt %x_38, 9i
-            %57:bool = and %55, %56
-            %x_117:i32 = select 0i, %x_39, %57
-            %x_40:i32 = load %ctr
-            %60:ptr<function, vec3<f32>, read_write> = access %m43, %x_40
-            %x_119:f32 = load_vector_element %60, 1u
-            %62:ptr<function, f32, read_write> = access %GLF_live6sums, %x_117
-            %x_121:f32 = load %62
-            %64:ptr<function, f32, read_write> = access %GLF_live6sums, %x_117
-            %65:f32 = add %x_121, %x_119
-            store %64, %65
-            continue %b7
+            %70:i32 = load %idx
+            %x_37:i32 = let %70
+            %72:i32 = load %idx
+            %x_38:i32 = let %72
+            %74:i32 = load %idx
+            %x_39:i32 = let %74
+            %76:bool = gte %x_37, 0i
+            %77:bool = lt %x_38, 9i
+            %78:bool = and %76, %77
+            %79:i32 = select 0i, %x_39, %78
+            %x_117:i32 = let %79
+            %81:i32 = load %ctr
+            %x_40:i32 = let %81
+            %83:ptr<function, vec3<f32>, read_write> = access %m43, %x_40
+            %84:f32 = load_vector_element %83, 1u
+            %x_119:f32 = let %84
+            %86:ptr<function, f32, read_write> = access %GLF_live6sums, %x_117
+            %87:f32 = load %86
+            %x_121:f32 = let %87
+            %89:ptr<function, f32, read_write> = access %GLF_live6sums, %x_117
+            %90:f32 = add %x_121, %x_119
+            store %89, %90
+            continue  # -> $B7
           }
-          %b7 = block {  # continuing
-            %x_41:i32 = load %ctr
-            %67:i32 = add %x_41, 1i
-            store %ctr, %67
-            next_iteration %b6
+          $B7: {  # continuing
+            %91:i32 = load %ctr
+            %x_41:i32 = let %91
+            %93:i32 = add %x_41, 1i
+            store %ctr, %93
+            next_iteration  # -> $B6
           }
         }
-        %x_43:i32 = load %idx
-        %69:i32 = add %x_43, 1i
-        store %idx, %69
-        continue %b4
+        %94:i32 = load %idx
+        %x_43:i32 = let %94
+        %96:i32 = add %x_43, 1i
+        store %idx, %96
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        next_iteration %b3
+      $B4: {  # continuing
+        next_iteration  # -> $B3
       }
     }
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b15 {
-  %b15 = block {
-    %71:void = call %main_1
-    %72:vec4<f32> = load %x_GLF_color
-    %73:main_out = construct %72
-    ret %73
+%tint_symbol = @fragment func():main_out {
+  $B15: {
+    %98:void = call %main_1
+    %99:vec4<f32> = load %x_GLF_color
+    %100:main_out = construct %99
+    ret %100
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/write-red-after-search/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/write-red-after-search/0-opt.spvasm.expected.ir.msl
index e603e15..1473a73 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/write-red-after-search/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/write-red-after-search/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: BST = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: BST = struct @align(4) {
   data:i32 @offset(0)
   leftIndex:i32 @offset(4)
   rightIndex:i32 @offset(8)
@@ -19,15 +19,15 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %tree_1:ptr<private, array<BST, 10>, read_write> = var
   %x_27:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%makeTreeNode_struct_BST_i1_i1_i11_i1_ = func(%tree:ptr<function, BST, read_write>, %data:ptr<function, i32, read_write>):void -> %b2 {
-  %b2 = block {
+%makeTreeNode_struct_BST_i1_i1_i11_i1_ = func(%tree:ptr<function, BST, read_write>, %data:ptr<function, i32, read_write>):void {
+  $B2: {
     %8:ptr<function, i32, read_write> = access %tree, 0u
     %9:i32 = load %data
     store %8, %9
@@ -38,8 +38,8 @@
     ret
   }
 }
-%insert_i1_i1_ = func(%treeIndex:ptr<function, i32, read_write>, %data_1:ptr<function, i32, read_write>):void -> %b3 {
-  %b3 = block {
+%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
@@ -48,16 +48,16 @@
     %GLF_live8i:ptr<function, i32, read_write> = var
     %GLF_live8A:ptr<function, array<f32, 50>, read_write> = var
     store %baseIndex, 0i
-    loop [b: %b4, c: %b5] {  # loop_1
-      %b4 = block {  # body
+    loop [b: $B4, c: $B5] {  # loop_1
+      $B4: {  # body
         %22:i32 = load %baseIndex
         %23:i32 = load %treeIndex
         %24:bool = lte %22, %23
-        if %24 [t: %b6, f: %b7] {  # if_1
-          %b6 = block {  # true
+        if %24 [t: $B6, f: $B7] {  # if_1
+          $B6: {  # true
             exit_if  # if_1
           }
-          %b7 = block {  # false
+          $B7: {  # false
             exit_loop  # loop_1
           }
         }
@@ -66,234 +66,249 @@
         %27:ptr<private, i32, read_write> = access %tree_1, %26, 0u
         %28:i32 = load %27
         %29:bool = lte %25, %28
-        if %29 [t: %b8, f: %b9] {  # if_2
-          %b8 = block {  # true
+        if %29 [t: $B8, f: $B9] {  # if_2
+          $B8: {  # true
             %30:i32 = load %baseIndex
             %31:ptr<private, i32, read_write> = access %tree_1, %30, 1u
             %32:i32 = load %31
             %33:bool = eq %32, -1i
-            if %33 [t: %b10, f: %b11] {  # if_3
-              %b10 = block {  # true
-                %x_82:i32 = load %baseIndex
-                %35:ptr<private, i32, read_write> = access %tree_1, %x_82, 1u
-                %36:i32 = load %treeIndex
-                store %35, %36
-                %x_84:i32 = load %treeIndex
-                %38:ptr<private, BST, read_write> = access %tree_1, %x_84
-                %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_1, %x_84
-                %43:BST = load %param
-                store %42, %43
+            if %33 [t: $B10, f: $B11] {  # if_3
+              $B10: {  # true
+                %34:i32 = load %baseIndex
+                %x_82:i32 = let %34
+                %36:ptr<private, i32, read_write> = access %tree_1, %x_82, 1u
+                %37:i32 = load %treeIndex
+                store %36, %37
+                %38:i32 = load %treeIndex
+                %x_84:i32 = let %38
+                %40:ptr<private, BST, read_write> = access %tree_1, %x_84
+                %41:BST = load %40
+                store %param, %41
+                %42:i32 = load %data_1
+                store %param_1, %42
+                %43:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param, %param_1
+                %44:ptr<private, BST, read_write> = access %tree_1, %x_84
+                %45:BST = load %param
+                store %44, %45
                 ret
               }
-              %b11 = block {  # false
-                %44:i32 = load %baseIndex
-                %45:ptr<private, i32, read_write> = access %tree_1, %44, 1u
-                %46:i32 = load %45
-                store %baseIndex, %46
-                continue %b5
+              $B11: {  # false
+                %46:i32 = load %baseIndex
+                %47:ptr<private, i32, read_write> = access %tree_1, %46, 1u
+                %48:i32 = load %47
+                store %baseIndex, %48
+                continue  # -> $B5
               }
             }
             exit_if  # if_2
           }
-          %b9 = block {  # false
-            %47:i32 = load %baseIndex
-            %48:ptr<private, i32, read_write> = access %tree_1, %47, 2u
-            %49:i32 = load %48
-            %50:bool = eq %49, -1i
-            if %50 [t: %b12, f: %b13] {  # if_4
-              %b12 = block {  # true
-                %x_90:i32 = load %baseIndex
-                %52:ptr<private, i32, read_write> = access %tree_1, %x_90, 2u
-                %53:i32 = load %treeIndex
-                store %52, %53
-                %x_92:i32 = load %treeIndex
-                %55:ptr<private, BST, read_write> = access %tree_1, %x_92
-                %56:BST = load %55
-                store %param_2, %56
-                %57:i32 = load %data_1
-                store %param_3, %57
-                %58:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param_2, %param_3
+          $B9: {  # false
+            %49:i32 = load %baseIndex
+            %50:ptr<private, i32, read_write> = access %tree_1, %49, 2u
+            %51:i32 = load %50
+            %52:bool = eq %51, -1i
+            if %52 [t: $B12, f: $B13] {  # if_4
+              $B12: {  # true
+                %53:i32 = load %baseIndex
+                %x_90:i32 = let %53
+                %55:ptr<private, i32, read_write> = access %tree_1, %x_90, 2u
+                %56:i32 = load %treeIndex
+                store %55, %56
+                %57:i32 = load %treeIndex
+                %x_92:i32 = let %57
                 %59:ptr<private, BST, read_write> = access %tree_1, %x_92
-                %60:BST = load %param_2
-                store %59, %60
+                %60:BST = load %59
+                store %param_2, %60
+                %61:i32 = load %data_1
+                store %param_3, %61
+                %62:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param_2, %param_3
+                %63:ptr<private, BST, read_write> = access %tree_1, %x_92
+                %64:BST = load %param_2
+                store %63, %64
                 ret
               }
-              %b13 = block {  # false
+              $B13: {  # false
                 store %GLF_live8i, 1i
-                %61:i32 = load %GLF_live8i
-                %62:i32 = load %GLF_live8i
-                %63:bool = gte %62, 0i
-                %64:i32 = load %GLF_live8i
-                %65:bool = lt %64, 50i
-                %66:bool = and %63, %65
-                %x_369:i32 = select 0i, %61, %66
-                %68:ptr<function, f32, read_write> = access %GLF_live8A, %x_369
-                %69:ptr<function, f32, read_write> = access %GLF_live8A, %x_369
-                %70:f32 = load %69
-                %71:ptr<function, f32, read_write> = access %GLF_live8A, 0i
-                %72:f32 = load %71
-                %73:f32 = add %70, %72
-                store %68, %73
-                loop [b: %b14, c: %b15] {  # loop_2
-                  %b14 = block {  # body
-                    %74:i32 = load %baseIndex
-                    %75:ptr<private, i32, read_write> = access %tree_1, %74, 2u
-                    %76:i32 = load %75
-                    store %baseIndex, %76
-                    continue %b15
+                %65:i32 = load %GLF_live8i
+                %66:i32 = load %GLF_live8i
+                %67:bool = gte %66, 0i
+                %68:i32 = load %GLF_live8i
+                %69:bool = lt %68, 50i
+                %70:bool = and %67, %69
+                %71:i32 = select 0i, %65, %70
+                %x_369:i32 = let %71
+                %73:ptr<function, f32, read_write> = access %GLF_live8A, %x_369
+                %74:ptr<function, f32, read_write> = access %GLF_live8A, %x_369
+                %75:f32 = load %74
+                %76:ptr<function, f32, read_write> = access %GLF_live8A, 0i
+                %77:f32 = load %76
+                %78:f32 = add %75, %77
+                store %73, %78
+                loop [b: $B14, c: $B15] {  # loop_2
+                  $B14: {  # body
+                    %79:i32 = load %baseIndex
+                    %80:ptr<private, i32, read_write> = access %tree_1, %79, 2u
+                    %81:i32 = load %80
+                    store %baseIndex, %81
+                    continue  # -> $B15
                   }
-                  %b15 = block {  # continuing
-                    %77:ptr<uniform, vec2<f32>, read> = access %x_27, 0u
-                    %x_382:f32 = load_vector_element %77, 0u
-                    %79:ptr<uniform, vec2<f32>, read> = access %x_27, 0u
-                    %x_384:f32 = load_vector_element %79, 1u
-                    %81:bool = gt %x_382, %x_384
-                    %82:bool = eq %81, false
-                    break_if %82 %b14
+                  $B15: {  # continuing
+                    %82:ptr<uniform, vec2<f32>, read> = access %x_27, 0u
+                    %83:f32 = load_vector_element %82, 0u
+                    %x_382:f32 = let %83
+                    %85:ptr<uniform, vec2<f32>, read> = access %x_27, 0u
+                    %86:f32 = load_vector_element %85, 1u
+                    %x_384:f32 = let %86
+                    %88:bool = gt %x_382, %x_384
+                    %89:bool = eq %88, false
+                    break_if %89  # -> [t: exit_loop loop_2, f: $B14]
                   }
                 }
-                continue %b5
+                continue  # -> $B5
               }
             }
             exit_if  # if_2
           }
         }
-        continue %b5
+        unreachable
       }
-      %b5 = block {  # continuing
-        next_iteration %b4
+      $B5: {  # continuing
+        next_iteration  # -> $B4
       }
     }
     ret
   }
 }
-%search_i1_ = func(%t:ptr<function, i32, read_write>):i32 -> %b16 {
-  %b16 = block {
+%search_i1_ = func(%t:ptr<function, i32, read_write>):i32 {
+  $B16: {
     %index:ptr<function, i32, read_write> = var
     %currentNode:ptr<function, BST, read_write> = var
     %x_387:ptr<function, i32, read_write> = var
     store %index, 0i
-    loop [b: %b17, c: %b18] {  # loop_3
-      %b17 = block {  # body
-        %88:i32 = load %index
-        %89:bool = neq %88, -1i
-        if %89 [t: %b19, f: %b20] {  # if_5
-          %b19 = block {  # true
+    loop [b: $B17, c: $B18] {  # loop_3
+      $B17: {  # body
+        %95:i32 = load %index
+        %96:bool = neq %95, -1i
+        if %96 [t: $B19, f: $B20] {  # if_5
+          $B19: {  # true
             exit_if  # if_5
           }
-          %b20 = block {  # false
+          $B20: {  # false
             exit_loop  # loop_3
           }
         }
-        %90:i32 = load %index
-        %91:ptr<private, BST, read_write> = access %tree_1, %90
-        %92:BST = load %91
-        store %currentNode, %92
-        %93:ptr<function, i32, read_write> = access %currentNode, 0u
-        %94:i32 = load %93
-        %95:i32 = load %t
-        %96:bool = eq %94, %95
-        if %96 [t: %b21] {  # if_6
-          %b21 = block {  # true
-            %x_103:i32 = load %t
+        %97:i32 = load %index
+        %98:ptr<private, BST, read_write> = access %tree_1, %97
+        %99:BST = load %98
+        store %currentNode, %99
+        %100:ptr<function, i32, read_write> = access %currentNode, 0u
+        %101:i32 = load %100
+        %102:i32 = load %t
+        %103:bool = eq %101, %102
+        if %103 [t: $B21] {  # if_6
+          $B21: {  # true
+            %104:i32 = load %t
+            %x_103:i32 = let %104
             ret %x_103
           }
         }
-        %98:i32 = load %t
-        %99:ptr<function, i32, read_write> = access %currentNode, 0u
-        %100:i32 = load %99
-        %101:bool = gt %98, %100
-        if %101 [t: %b22, f: %b23] {  # if_7
-          %b22 = block {  # true
-            %102:ptr<function, i32, read_write> = access %currentNode, 2u
-            %103:i32 = load %102
-            store %x_387, %103
+        %106:i32 = load %t
+        %107:ptr<function, i32, read_write> = access %currentNode, 0u
+        %108:i32 = load %107
+        %109:bool = gt %106, %108
+        if %109 [t: $B22, f: $B23] {  # if_7
+          $B22: {  # true
+            %110:ptr<function, i32, read_write> = access %currentNode, 2u
+            %111:i32 = load %110
+            store %x_387, %111
             exit_if  # if_7
           }
-          %b23 = block {  # false
-            %104:ptr<function, i32, read_write> = access %currentNode, 1u
-            %105:i32 = load %104
-            store %x_387, %105
+          $B23: {  # false
+            %112:ptr<function, i32, read_write> = access %currentNode, 1u
+            %113:i32 = load %112
+            store %x_387, %113
             exit_if  # if_7
           }
         }
-        %106:i32 = load %x_387
-        store %index, %106
-        continue %b18
+        %114:i32 = load %x_387
+        store %index, %114
+        continue  # -> $B18
       }
-      %b18 = block {  # continuing
-        next_iteration %b17
+      $B18: {  # continuing
+        next_iteration  # -> $B17
       }
     }
     ret -1i
   }
 }
-%makeFrame_f1_ = func(%v:ptr<function, f32, read_write>):f32 -> %b24 {
-  %b24 = block {
+%makeFrame_f1_ = func(%v:ptr<function, f32, read_write>):f32 {
+  $B24: {
     %param_5:ptr<function, i32, read_write> = var
     %param_6:ptr<function, i32, read_write> = var
     %param_7:ptr<function, i32, read_write> = var
-    %112:f32 = load %v
-    %113:f32 = mul %112, 6.5f
-    store %v, %113
-    %114:f32 = load %v
-    %115:bool = lt %114, 1.5f
-    if %115 [t: %b25] {  # if_8
-      %b25 = block {  # true
+    %120:f32 = load %v
+    %121:f32 = mul %120, 6.5f
+    store %v, %121
+    %122:f32 = load %v
+    %123:bool = lt %122, 1.5f
+    if %123 [t: $B25] {  # if_8
+      $B25: {  # true
         store %param_5, 100i
-        %x_110:i32 = call %search_i1_, %param_5
-        %117:f32 = convert %x_110
-        ret %117
+        %124:i32 = call %search_i1_, %param_5
+        %x_110:i32 = let %124
+        %126:f32 = convert %x_110
+        ret %126
       }
     }
-    %118:f32 = load %v
-    %119:bool = lt %118, 4.0f
-    if %119 [t: %b26] {  # if_9
-      %b26 = block {  # true
+    %127:f32 = load %v
+    %128:bool = lt %127, 4.0f
+    if %128 [t: $B26] {  # if_9
+      $B26: {  # true
         ret 0.0f
       }
     }
-    %x_429:f32 = load %v
+    %129:f32 = load %v
+    %x_429:f32 = let %129
     store %param_6, 6i
-    %x_111:i32 = call %search_i1_, %param_6
-    %122:f32 = convert %x_111
-    %123:bool = lt %x_429, %122
-    if %123 [t: %b27] {  # if_10
-      %b27 = block {  # true
+    %131:i32 = call %search_i1_, %param_6
+    %x_111:i32 = let %131
+    %133:f32 = convert %x_111
+    %134:bool = lt %x_429, %133
+    if %134 [t: $B27] {  # if_10
+      $B27: {  # true
         ret 1.0f
       }
     }
     store %param_7, 30i
-    %x_112:i32 = call %search_i1_, %param_7
-    %125:f32 = convert %x_112
-    %126:f32 = add 10.0f, %125
-    ret %126
-  }
-}
-%hueColor_f1_ = func(%angle:ptr<function, f32, read_write>):vec3<f32> -> %b28 {
-  %b28 = block {
-    %nodeData:ptr<function, f32, read_write> = var
-    %param_4:ptr<function, i32, read_write> = var
-    store %param_4, 15i
-    %x_109:i32 = call %search_i1_, %param_4
-    %132:f32 = convert %x_109
-    store %nodeData, %132
-    %x_409:f32 = load %angle
-    %x_410:f32 = load %nodeData
-    %135:vec3<f32> = construct 1.0f, 5.0f, %x_410
-    %136:vec3<f32> = mul %135, %x_409
-    %137:vec3<f32> = add vec3<f32>(30.0f), %136
-    %138:vec3<f32> = div %137, vec3<f32>(50.0f)
+    %135:i32 = call %search_i1_, %param_7
+    %x_112:i32 = let %135
+    %137:f32 = convert %x_112
+    %138:f32 = add 10.0f, %137
     ret %138
   }
 }
-%main_1 = func():void -> %b29 {
-  %b29 = block {
+%hueColor_f1_ = func(%angle:ptr<function, f32, read_write>):vec3<f32> {
+  $B28: {
+    %nodeData:ptr<function, f32, read_write> = var
+    %param_4:ptr<function, i32, read_write> = var
+    store %param_4, 15i
+    %143:i32 = call %search_i1_, %param_4
+    %x_109:i32 = let %143
+    %145:f32 = convert %x_109
+    store %nodeData, %145
+    %146:f32 = load %angle
+    %x_409:f32 = let %146
+    %148:f32 = load %nodeData
+    %x_410:f32 = let %148
+    %150:vec3<f32> = construct 1.0f, 5.0f, %x_410
+    %151:vec3<f32> = mul %150, %x_409
+    %152:vec3<f32> = add vec3<f32>(30.0f), %151
+    %153:vec3<f32> = div %152, vec3<f32>(50.0f)
+    ret %153
+  }
+}
+%main_1 = func():void {
+  $B29: {
     %treeIndex_1:ptr<function, i32, read_write> = var
     %param_8:ptr<function, BST, read_write> = var
     %param_9:ptr<function, i32, read_write> = var
@@ -334,274 +349,287 @@
     %x_235:ptr<function, vec3<f32>, read_write> = var
     %param_31:ptr<function, f32, read_write> = var
     store %treeIndex_1, 0i
-    %179:ptr<private, BST, read_write> = access %tree_1, 0i
-    %180:BST = load %179
-    store %param_8, %180
+    %194:ptr<private, BST, read_write> = access %tree_1, 0i
+    %195:BST = load %194
+    store %param_8, %195
     store %param_9, 9i
-    %181:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param_8, %param_9
-    %182:ptr<private, BST, read_write> = access %tree_1, 0i
-    %183:BST = load %param_8
-    store %182, %183
-    %184:i32 = load %treeIndex_1
-    %185:i32 = add %184, 1i
-    store %treeIndex_1, %185
-    %186:i32 = load %treeIndex_1
-    store %param_10, %186
+    %196:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param_8, %param_9
+    %197:ptr<private, BST, read_write> = access %tree_1, 0i
+    %198:BST = load %param_8
+    store %197, %198
+    %199:i32 = load %treeIndex_1
+    %200:i32 = add %199, 1i
+    store %treeIndex_1, %200
+    %201:i32 = load %treeIndex_1
+    store %param_10, %201
     store %param_11, 5i
-    %187:void = call %insert_i1_i1_, %param_10, %param_11
-    %188:i32 = load %treeIndex_1
-    %189:i32 = add %188, 1i
-    store %treeIndex_1, %189
+    %202:void = call %insert_i1_i1_, %param_10, %param_11
+    %203:i32 = load %treeIndex_1
+    %204:i32 = add %203, 1i
+    store %treeIndex_1, %204
     store %GLF_live1_looplimiter2, 0i
     store %GLF_live1i, 0i
-    loop [b: %b30, c: %b31] {  # loop_4
-      %b30 = block {  # body
-        if true [t: %b32, f: %b33] {  # if_11
-          %b32 = block {  # true
+    loop [b: $B30, c: $B31] {  # loop_4
+      $B30: {  # body
+        if true [t: $B32, f: $B33] {  # if_11
+          $B32: {  # true
             exit_if  # if_11
           }
-          %b33 = block {  # false
+          $B33: {  # false
             exit_loop  # loop_4
           }
         }
-        %190:i32 = load %GLF_live1_looplimiter2
-        %191:bool = gte %190, 7i
-        if %191 [t: %b34] {  # if_12
-          %b34 = block {  # true
+        %205:i32 = load %GLF_live1_looplimiter2
+        %206:bool = gte %205, 7i
+        if %206 [t: $B34] {  # if_12
+          $B34: {  # true
             exit_loop  # loop_4
           }
         }
-        %192:i32 = load %GLF_live1_looplimiter2
-        %193:i32 = add %192, 1i
-        store %GLF_live1_looplimiter2, %193
-        continue %b31
+        %207:i32 = load %GLF_live1_looplimiter2
+        %208:i32 = add %207, 1i
+        store %GLF_live1_looplimiter2, %208
+        continue  # -> $B31
       }
-      %b31 = block {  # continuing
-        %194:i32 = load %GLF_live1i
-        %195:i32 = add %194, 1i
-        store %GLF_live1i, %195
-        next_iteration %b30
+      $B31: {  # continuing
+        %209:i32 = load %GLF_live1i
+        %210:i32 = add %209, 1i
+        store %GLF_live1i, %210
+        next_iteration  # -> $B30
       }
     }
-    %196:i32 = load %treeIndex_1
-    store %param_12, %196
+    %211:i32 = load %treeIndex_1
+    store %param_12, %211
     store %param_13, 12i
-    %197:void = call %insert_i1_i1_, %param_12, %param_13
-    %198:i32 = load %treeIndex_1
-    %199:i32 = add %198, 1i
-    store %treeIndex_1, %199
-    %200:i32 = load %treeIndex_1
-    store %param_14, %200
+    %212:void = call %insert_i1_i1_, %param_12, %param_13
+    %213:i32 = load %treeIndex_1
+    %214:i32 = add %213, 1i
+    store %treeIndex_1, %214
+    %215:i32 = load %treeIndex_1
+    store %param_14, %215
     store %param_15, 15i
-    %201:void = call %insert_i1_i1_, %param_14, %param_15
-    %202:i32 = load %treeIndex_1
-    %203:i32 = add %202, 1i
-    store %treeIndex_1, %203
-    %204:i32 = load %treeIndex_1
-    store %param_16, %204
+    %216:void = call %insert_i1_i1_, %param_14, %param_15
+    %217:i32 = load %treeIndex_1
+    %218:i32 = add %217, 1i
+    store %treeIndex_1, %218
+    %219:i32 = load %treeIndex_1
+    store %param_16, %219
     store %param_17, 7i
-    %205:void = call %insert_i1_i1_, %param_16, %param_17
-    %206:i32 = load %treeIndex_1
-    %207:i32 = add %206, 1i
-    store %treeIndex_1, %207
-    %208:i32 = load %treeIndex_1
-    store %param_18, %208
+    %220:void = call %insert_i1_i1_, %param_16, %param_17
+    %221:i32 = load %treeIndex_1
+    %222:i32 = add %221, 1i
+    store %treeIndex_1, %222
+    %223:i32 = load %treeIndex_1
+    store %param_18, %223
     store %param_19, 8i
-    %209:void = call %insert_i1_i1_, %param_18, %param_19
-    %210:i32 = load %treeIndex_1
-    %211:i32 = add %210, 1i
-    store %treeIndex_1, %211
-    %212:i32 = load %treeIndex_1
-    store %param_20, %212
+    %224:void = call %insert_i1_i1_, %param_18, %param_19
+    %225:i32 = load %treeIndex_1
+    %226:i32 = add %225, 1i
+    store %treeIndex_1, %226
+    %227:i32 = load %treeIndex_1
+    store %param_20, %227
     store %param_21, 2i
-    %213:void = call %insert_i1_i1_, %param_20, %param_21
-    %214:i32 = load %treeIndex_1
-    %215:i32 = add %214, 1i
-    store %treeIndex_1, %215
-    %216:i32 = load %treeIndex_1
-    store %param_22, %216
+    %228:void = call %insert_i1_i1_, %param_20, %param_21
+    %229:i32 = load %treeIndex_1
+    %230:i32 = add %229, 1i
+    store %treeIndex_1, %230
+    %231:i32 = load %treeIndex_1
+    store %param_22, %231
     store %param_23, 6i
-    %217:void = call %insert_i1_i1_, %param_22, %param_23
-    %218:i32 = load %treeIndex_1
-    %219:i32 = add %218, 1i
-    store %treeIndex_1, %219
+    %232:void = call %insert_i1_i1_, %param_22, %param_23
+    %233:i32 = load %treeIndex_1
+    %234:i32 = add %233, 1i
+    store %treeIndex_1, %234
     store %GLF_live4_looplimiter3, 0i
     store %GLF_live4i, 0i
-    loop [b: %b35, c: %b36] {  # loop_5
-      %b35 = block {  # body
-        if true [t: %b37, f: %b38] {  # if_13
-          %b37 = block {  # true
+    loop [b: $B35, c: $B36] {  # loop_5
+      $B35: {  # body
+        if true [t: $B37, f: $B38] {  # if_13
+          $B37: {  # true
             exit_if  # if_13
           }
-          %b38 = block {  # false
+          $B38: {  # false
             exit_loop  # loop_5
           }
         }
-        %220:i32 = load %GLF_live4_looplimiter3
-        %221:bool = gte %220, 3i
-        if %221 [t: %b39] {  # if_14
-          %b39 = block {  # true
+        %235:i32 = load %GLF_live4_looplimiter3
+        %236:bool = gte %235, 3i
+        if %236 [t: $B39] {  # if_14
+          $B39: {  # true
             exit_loop  # loop_5
           }
         }
-        %222:i32 = load %GLF_live4_looplimiter3
-        %223:i32 = add %222, 1i
-        store %GLF_live4_looplimiter3, %223
+        %237:i32 = load %GLF_live4_looplimiter3
+        %238:i32 = add %237, 1i
+        store %GLF_live4_looplimiter3, %238
         store %GLF_live4index, 1i
-        %x_144:i32 = load %GLF_live4index
-        %x_145:i32 = load %GLF_live4index
-        %x_146:i32 = load %GLF_live4index
-        %227:bool = gte %x_144, 0i
-        %228:bool = lt %x_145, 10i
-        %229:bool = and %227, %228
-        %230:i32 = select 0i, %x_146, %229
-        %231:ptr<function, f32, read_write> = access %GLF_live4obj, 1u, %230
-        %232:ptr<function, f32, read_write> = access %GLF_live4obj, 1u, 1i
-        %233:f32 = load %232
-        store %231, %233
-        %x_147:i32 = load %GLF_live4i
-        %x_148:i32 = load %GLF_live4i
-        %x_149:i32 = load %GLF_live4i
-        %237:bool = gte %x_147, 0i
-        %238:bool = lt %x_148, 10i
-        %239:bool = and %237, %238
-        %240:i32 = select 0i, %x_149, %239
-        %241:ptr<function, f32, read_write> = access %GLF_live4obj, 1u, %240
-        store %241, 1.0f
-        continue %b36
+        %239:i32 = load %GLF_live4index
+        %x_144:i32 = let %239
+        %241:i32 = load %GLF_live4index
+        %x_145:i32 = let %241
+        %243:i32 = load %GLF_live4index
+        %x_146:i32 = let %243
+        %245:bool = gte %x_144, 0i
+        %246:bool = lt %x_145, 10i
+        %247:bool = and %245, %246
+        %248:i32 = select 0i, %x_146, %247
+        %249:ptr<function, f32, read_write> = access %GLF_live4obj, 1u, %248
+        %250:ptr<function, f32, read_write> = access %GLF_live4obj, 1u, 1i
+        %251:f32 = load %250
+        store %249, %251
+        %252:i32 = load %GLF_live4i
+        %x_147:i32 = let %252
+        %254:i32 = load %GLF_live4i
+        %x_148:i32 = let %254
+        %256:i32 = load %GLF_live4i
+        %x_149:i32 = let %256
+        %258:bool = gte %x_147, 0i
+        %259:bool = lt %x_148, 10i
+        %260:bool = and %258, %259
+        %261:i32 = select 0i, %x_149, %260
+        %262:ptr<function, f32, read_write> = access %GLF_live4obj, 1u, %261
+        store %262, 1.0f
+        continue  # -> $B36
       }
-      %b36 = block {  # continuing
-        %242:i32 = load %GLF_live4i
-        %243:i32 = add %242, 1i
-        store %GLF_live4i, %243
-        next_iteration %b35
+      $B36: {  # continuing
+        %263:i32 = load %GLF_live4i
+        %264:i32 = add %263, 1i
+        store %GLF_live4i, %264
+        next_iteration  # -> $B35
       }
     }
-    %244:i32 = load %treeIndex_1
-    store %param_24, %244
+    %265:i32 = load %treeIndex_1
+    store %param_24, %265
     store %param_25, 17i
-    %245:void = call %insert_i1_i1_, %param_24, %param_25
-    %246:ptr<uniform, vec2<f32>, read> = access %x_27, 0u
-    %247:f32 = load_vector_element %246, 0u
-    %248:ptr<uniform, vec2<f32>, read> = access %x_27, 0u
-    %249:f32 = load_vector_element %248, 1u
-    %250:bool = gt %247, %249
-    if %250 [t: %b40] {  # if_15
-      %b40 = block {  # true
+    %266:void = call %insert_i1_i1_, %param_24, %param_25
+    %267:ptr<uniform, vec2<f32>, read> = access %x_27, 0u
+    %268:f32 = load_vector_element %267, 0u
+    %269:ptr<uniform, vec2<f32>, read> = access %x_27, 0u
+    %270:f32 = load_vector_element %269, 1u
+    %271:bool = gt %268, %270
+    if %271 [t: $B40] {  # if_15
+      $B40: {  # true
         ret
       }
     }
-    %251:i32 = load %treeIndex_1
-    %252:i32 = add %251, 1i
-    store %treeIndex_1, %252
-    %253:i32 = load %treeIndex_1
-    store %param_26, %253
+    %272:i32 = load %treeIndex_1
+    %273:i32 = add %272, 1i
+    store %treeIndex_1, %273
+    %274:i32 = load %treeIndex_1
+    store %param_26, %274
     store %param_27, 13i
-    %254:void = call %insert_i1_i1_, %param_26, %param_27
-    %255:vec4<f32> = load %gl_FragCoord
-    %256:vec2<f32> = swizzle %255, yx
-    %257:vec2<f32> = div %256, vec2<f32>(256.0f)
-    store %z, %257
-    %258:f32 = load_vector_element %z, 0u
-    store %param_28, %258
-    %x_290:f32 = call %makeFrame_f1_, %param_28
+    %275:void = call %insert_i1_i1_, %param_26, %param_27
+    %276:vec4<f32> = load %gl_FragCoord
+    %277:vec2<f32> = swizzle %276, yx
+    %278:vec2<f32> = div %277, vec2<f32>(256.0f)
+    store %z, %278
+    %279:f32 = load_vector_element %z, 0u
+    store %param_28, %279
+    %280:f32 = call %makeFrame_f1_, %param_28
+    %x_290:f32 = let %280
     store %x, %x_290
-    %260:f32 = load_vector_element %z, 1u
-    store %param_29, %260
-    %x_293:f32 = call %makeFrame_f1_, %param_29
+    %282:f32 = load_vector_element %z, 1u
+    store %param_29, %282
+    %283:f32 = call %makeFrame_f1_, %param_29
+    %x_293:f32 = let %283
     store %y, %x_293
     store %sum, -100i
     store %t_1, 0i
-    loop [b: %b41, c: %b42] {  # loop_6
-      %b41 = block {  # body
-        %262:i32 = load %t_1
-        %263:bool = lt %262, 20i
-        if %263 [t: %b43, f: %b44] {  # if_16
-          %b43 = block {  # true
+    loop [b: $B41, c: $B42] {  # loop_6
+      $B41: {  # body
+        %285:i32 = load %t_1
+        %286:bool = lt %285, 20i
+        if %286 [t: $B43, f: $B44] {  # if_16
+          $B43: {  # true
             exit_if  # if_16
           }
-          %b44 = block {  # false
+          $B44: {  # false
             exit_loop  # loop_6
           }
         }
-        %264:i32 = load %t_1
-        store %param_30, %264
-        %x_158:i32 = call %search_i1_, %param_30
+        %287:i32 = load %t_1
+        store %param_30, %287
+        %288:i32 = call %search_i1_, %param_30
+        %x_158:i32 = let %288
         store %result, %x_158
-        %266:i32 = load %result
-        %267:bool = gt %266, 0i
-        if %267 [t: %b45, f: %b46] {  # if_17
-          %b45 = block {  # true
+        %290:i32 = load %result
+        %291:bool = gt %290, 0i
+        if %291 [t: $B45, f: $B46] {  # if_17
+          $B45: {  # true
             exit_if  # if_17
           }
-          %b46 = block {  # false
-            %x_160:i32 = load %result
-            switch %x_160 [c: (0i, %b47), c: (-1i, %b48), c: (default, %b49)] {  # switch_1
-              %b47 = block {  # case
+          $B46: {  # false
+            %292:i32 = load %result
+            %x_160:i32 = let %292
+            switch %x_160 [c: (0i, $B47), c: (-1i, $B48), c: (default, $B49)] {  # switch_1
+              $B47: {  # case
                 ret
               }
-              %b48 = block {  # case
-                %269:i32 = load %sum
-                %270:i32 = add %269, 1i
-                store %sum, %270
+              $B48: {  # case
+                %294:i32 = load %sum
+                %295:i32 = add %294, 1i
+                store %sum, %295
                 exit_switch  # switch_1
               }
-              %b49 = block {  # case
+              $B49: {  # case
                 exit_switch  # switch_1
               }
             }
             exit_if  # if_17
           }
         }
-        continue %b42
+        continue  # -> $B42
       }
-      %b42 = block {  # continuing
-        %271:i32 = load %t_1
-        %272:i32 = add %271, 1i
-        store %t_1, %272
-        next_iteration %b41
+      $B42: {  # continuing
+        %296:i32 = load %t_1
+        %297:i32 = add %296, 1i
+        store %t_1, %297
+        next_iteration  # -> $B41
       }
     }
-    %273:f32 = load %x
-    %274:f32 = load %y
-    %275:i32 = load %sum
-    %276:f32 = convert %275
-    %277:f32 = mul %274, %276
-    %278:f32 = add %273, %277
-    store %a, %278
-    %279:ptr<uniform, vec2<f32>, read> = access %x_27, 0u
-    %280:f32 = load_vector_element %279, 0u
-    %281:ptr<uniform, vec2<f32>, read> = access %x_27, 0u
-    %282:f32 = load_vector_element %281, 1u
-    %283:bool = lt %280, %282
-    if %283 [t: %b50, f: %b51] {  # if_18
-      %b50 = block {  # true
+    %298:f32 = load %x
+    %299:f32 = let %298
+    %300:f32 = load %y
+    %301:f32 = let %300
+    %302:i32 = load %sum
+    %303:f32 = convert %302
+    %304:f32 = mul %301, %303
+    %305:f32 = add %299, %304
+    store %a, %305
+    %306:ptr<uniform, vec2<f32>, read> = access %x_27, 0u
+    %307:f32 = load_vector_element %306, 0u
+    %308:ptr<uniform, vec2<f32>, read> = access %x_27, 0u
+    %309:f32 = load_vector_element %308, 1u
+    %310:bool = lt %307, %309
+    if %310 [t: $B50, f: $B51] {  # if_18
+      $B50: {  # true
         store %x_235, vec3<f32>(1.0f, 0.0f, 0.0f)
         exit_if  # if_18
       }
-      %b51 = block {  # false
-        %284:f32 = load %a
-        store %param_31, %284
-        %x_321:vec3<f32> = call %hueColor_f1_, %param_31
+      $B51: {  # false
+        %311:f32 = load %a
+        store %param_31, %311
+        %312:vec3<f32> = call %hueColor_f1_, %param_31
+        %x_321:vec3<f32> = let %312
         store %x_235, %x_321
         exit_if  # if_18
       }
     }
-    %286:f32 = load_vector_element %x_235, 0u
-    %287:f32 = load_vector_element %x_235, 1u
-    %288:f32 = load_vector_element %x_235, 2u
-    %289:vec4<f32> = construct %286, %287, %288, 1.0f
-    store %x_GLF_color, %289
+    %314:f32 = load_vector_element %x_235, 0u
+    %315:f32 = load_vector_element %x_235, 1u
+    %316:f32 = load_vector_element %x_235, 2u
+    %317:vec4<f32> = construct %314, %315, %316, 1.0f
+    store %x_GLF_color, %317
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b52 {
-  %b52 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B52: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %292:void = call %main_1
-    %293:vec4<f32> = load %x_GLF_color
-    %294:main_out = construct %293
-    ret %294
+    %320:void = call %main_1
+    %321:vec4<f32> = load %x_GLF_color
+    %322:main_out = construct %321
+    ret %322
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/write-red-after-search/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/write-red-after-search/0-opt.wgsl.expected.ir.msl
index 0834031..15616a5 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/write-red-after-search/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/write-red-after-search/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: BST = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: BST = struct @align(4) {
   data:i32 @offset(0)
   leftIndex:i32 @offset(4)
   rightIndex:i32 @offset(8)
@@ -19,27 +19,28 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %tree_1:ptr<private, array<BST, 10>, read_write> = var
   %x_27:ptr<uniform, buf0, read> = var @binding_point(0, 0)
   %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
   %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
 }
 
-%makeTreeNode_struct_BST_i1_i1_i11_i1_ = func(%tree:ptr<function, BST, read_write>, %data:ptr<function, i32, read_write>):void -> %b2 {
-  %b2 = block {
-    %x_74:i32 = load %data
-    %9:ptr<function, i32, read_write> = access %tree, 0u
-    store %9, %x_74
-    %10:ptr<function, i32, read_write> = access %tree, 1u
-    store %10, -1i
-    %11:ptr<function, i32, read_write> = access %tree, 2u
+%makeTreeNode_struct_BST_i1_i1_i11_i1_ = func(%tree:ptr<function, BST, read_write>, %data:ptr<function, i32, read_write>):void {
+  $B2: {
+    %8:i32 = load %data
+    %x_74:i32 = let %8
+    %10:ptr<function, i32, read_write> = access %tree, 0u
+    store %10, %x_74
+    %11:ptr<function, i32, read_write> = access %tree, 1u
     store %11, -1i
+    %12:ptr<function, i32, read_write> = access %tree, 2u
+    store %12, -1i
     ret
   }
 }
-%insert_i1_i1_ = func(%treeIndex:ptr<function, i32, read_write>, %data_1:ptr<function, i32, read_write>):void -> %b3 {
-  %b3 = block {
+%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
@@ -48,252 +49,306 @@
     %GLF_live8i:ptr<function, i32, read_write> = var
     %GLF_live8A:ptr<function, array<f32, 50>, read_write> = var
     store %baseIndex, 0i
-    loop [b: %b4, c: %b5] {  # loop_1
-      %b4 = block {  # body
-        %x_75:i32 = load %baseIndex
-        %x_76:i32 = load %treeIndex
-        %24:bool = lte %x_75, %x_76
-        if %24 [t: %b6, f: %b7] {  # if_1
-          %b6 = block {  # true
+    loop [b: $B4, c: $B5] {  # loop_1
+      $B4: {  # body
+        %23:i32 = load %baseIndex
+        %x_75:i32 = let %23
+        %25:i32 = load %treeIndex
+        %x_76:i32 = let %25
+        %27:bool = lte %x_75, %x_76
+        if %27 [t: $B6, f: $B7] {  # if_1
+          $B6: {  # true
             exit_if  # if_1
           }
-          %b7 = block {  # false
+          $B7: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_77:i32 = load %data_1
-        %x_78:i32 = load %baseIndex
-        %27:ptr<private, i32, read_write> = access %tree_1, %x_78, 0u
-        %x_79:i32 = load %27
-        %29:bool = lte %x_77, %x_79
-        if %29 [t: %b8, f: %b9] {  # if_2
-          %b8 = block {  # true
-            %x_80:i32 = load %baseIndex
-            %31:ptr<private, i32, read_write> = access %tree_1, %x_80, 1u
-            %x_81:i32 = load %31
-            %33:bool = eq %x_81, -1i
-            if %33 [t: %b10, f: %b11] {  # if_3
-              %b10 = block {  # true
-                %x_82:i32 = load %baseIndex
-                %x_83:i32 = load %treeIndex
-                %36:ptr<private, i32, read_write> = access %tree_1, %x_82, 1u
-                store %36, %x_83
-                %x_84:i32 = load %treeIndex
-                %38:ptr<private, BST, read_write> = access %tree_1, %x_84
-                %x_350:BST = load %38
+        %28:i32 = load %data_1
+        %x_77:i32 = let %28
+        %30:i32 = load %baseIndex
+        %x_78:i32 = let %30
+        %32:ptr<private, i32, read_write> = access %tree_1, %x_78, 0u
+        %33:i32 = load %32
+        %x_79:i32 = let %33
+        %35:bool = lte %x_77, %x_79
+        if %35 [t: $B8, f: $B9] {  # if_2
+          $B8: {  # true
+            %36:i32 = load %baseIndex
+            %x_80:i32 = let %36
+            %38:ptr<private, i32, read_write> = access %tree_1, %x_80, 1u
+            %39:i32 = load %38
+            %x_81:i32 = let %39
+            %41:bool = eq %x_81, -1i
+            if %41 [t: $B10, f: $B11] {  # if_3
+              $B10: {  # true
+                %42:i32 = load %baseIndex
+                %x_82:i32 = let %42
+                %44:i32 = load %treeIndex
+                %x_83:i32 = let %44
+                %46:ptr<private, i32, read_write> = access %tree_1, %x_82, 1u
+                store %46, %x_83
+                %47:i32 = load %treeIndex
+                %x_84:i32 = let %47
+                %49:ptr<private, BST, read_write> = access %tree_1, %x_84
+                %50:BST = load %49
+                %x_350:BST = let %50
                 store %param, %x_350
-                %x_85:i32 = load %data_1
+                %52:i32 = load %data_1
+                %x_85:i32 = let %52
                 store %param_1, %x_85
-                %41:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param, %param_1
-                %x_352:BST = load %param
-                %43:ptr<private, BST, read_write> = access %tree_1, %x_84
-                store %43, %x_352
+                %54:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param, %param_1
+                %55:BST = load %param
+                %x_352:BST = let %55
+                %57:ptr<private, BST, read_write> = access %tree_1, %x_84
+                store %57, %x_352
                 ret
               }
-              %b11 = block {  # false
-                %x_86:i32 = load %baseIndex
-                %45:ptr<private, i32, read_write> = access %tree_1, %x_86, 1u
-                %x_87:i32 = load %45
+              $B11: {  # false
+                %58:i32 = load %baseIndex
+                %x_86:i32 = let %58
+                %60:ptr<private, i32, read_write> = access %tree_1, %x_86, 1u
+                %61:i32 = load %60
+                %x_87:i32 = let %61
                 store %baseIndex, %x_87
-                continue %b5
+                continue  # -> $B5
               }
             }
             exit_if  # if_2
           }
-          %b9 = block {  # false
-            %x_88:i32 = load %baseIndex
-            %48:ptr<private, i32, read_write> = access %tree_1, %x_88, 2u
-            %x_89:i32 = load %48
-            %50:bool = eq %x_89, -1i
-            if %50 [t: %b12, f: %b13] {  # if_4
-              %b12 = block {  # true
-                %x_90:i32 = load %baseIndex
-                %x_91:i32 = load %treeIndex
-                %53:ptr<private, i32, read_write> = access %tree_1, %x_90, 2u
-                store %53, %x_91
-                %x_92:i32 = load %treeIndex
-                %55:ptr<private, BST, read_write> = access %tree_1, %x_92
-                %x_362:BST = load %55
+          $B9: {  # false
+            %63:i32 = load %baseIndex
+            %x_88:i32 = let %63
+            %65:ptr<private, i32, read_write> = access %tree_1, %x_88, 2u
+            %66:i32 = load %65
+            %x_89:i32 = let %66
+            %68:bool = eq %x_89, -1i
+            if %68 [t: $B12, f: $B13] {  # if_4
+              $B12: {  # true
+                %69:i32 = load %baseIndex
+                %x_90:i32 = let %69
+                %71:i32 = load %treeIndex
+                %x_91:i32 = let %71
+                %73:ptr<private, i32, read_write> = access %tree_1, %x_90, 2u
+                store %73, %x_91
+                %74:i32 = load %treeIndex
+                %x_92:i32 = let %74
+                %76:ptr<private, BST, read_write> = access %tree_1, %x_92
+                %77:BST = load %76
+                %x_362:BST = let %77
                 store %param_2, %x_362
-                %x_93:i32 = load %data_1
+                %79:i32 = load %data_1
+                %x_93:i32 = let %79
                 store %param_3, %x_93
-                %58:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param_2, %param_3
-                %x_364:BST = load %param_2
-                %60:ptr<private, BST, read_write> = access %tree_1, %x_92
-                store %60, %x_364
+                %81:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param_2, %param_3
+                %82:BST = load %param_2
+                %x_364:BST = let %82
+                %84:ptr<private, BST, read_write> = access %tree_1, %x_92
+                store %84, %x_364
                 ret
               }
-              %b13 = block {  # false
+              $B13: {  # false
                 store %GLF_live8i, 1i
-                %x_94:i32 = load %GLF_live8i
-                %x_95:i32 = load %GLF_live8i
-                %x_96:i32 = load %GLF_live8i
-                %64:bool = gte %x_94, 0i
-                %65:bool = lt %x_95, 50i
-                %66:bool = and %64, %65
-                %x_369:i32 = select 0i, %x_96, %66
-                %68:ptr<function, f32, read_write> = access %GLF_live8A, 0i
-                %x_371:f32 = load %68
-                %70:ptr<function, f32, read_write> = access %GLF_live8A, %x_369
-                %x_373:f32 = load %70
-                %72:ptr<function, f32, read_write> = access %GLF_live8A, %x_369
-                %73:f32 = add %x_373, %x_371
-                store %72, %73
-                loop [b: %b14, c: %b15] {  # loop_2
-                  %b14 = block {  # body
-                    %x_97:i32 = load %baseIndex
-                    %75:ptr<private, i32, read_write> = access %tree_1, %x_97, 2u
-                    %x_98:i32 = load %75
+                %85:i32 = load %GLF_live8i
+                %x_94:i32 = let %85
+                %87:i32 = load %GLF_live8i
+                %x_95:i32 = let %87
+                %89:i32 = load %GLF_live8i
+                %x_96:i32 = let %89
+                %91:bool = gte %x_94, 0i
+                %92:bool = lt %x_95, 50i
+                %93:bool = and %91, %92
+                %94:i32 = select 0i, %x_96, %93
+                %x_369:i32 = let %94
+                %96:ptr<function, f32, read_write> = access %GLF_live8A, 0i
+                %97:f32 = load %96
+                %x_371:f32 = let %97
+                %99:ptr<function, f32, read_write> = access %GLF_live8A, %x_369
+                %100:f32 = load %99
+                %x_373:f32 = let %100
+                %102:ptr<function, f32, read_write> = access %GLF_live8A, %x_369
+                %103:f32 = add %x_373, %x_371
+                store %102, %103
+                loop [b: $B14, c: $B15] {  # loop_2
+                  $B14: {  # body
+                    %104:i32 = load %baseIndex
+                    %x_97:i32 = let %104
+                    %106:ptr<private, i32, read_write> = access %tree_1, %x_97, 2u
+                    %107:i32 = load %106
+                    %x_98:i32 = let %107
                     store %baseIndex, %x_98
-                    continue %b15
+                    continue  # -> $B15
                   }
-                  %b15 = block {  # continuing
-                    %77:ptr<uniform, vec2<f32>, read> = access %x_27, 0u
-                    %x_382:f32 = load_vector_element %77, 0u
-                    %79:ptr<uniform, vec2<f32>, read> = access %x_27, 0u
-                    %x_384:f32 = load_vector_element %79, 1u
-                    %81:bool = gt %x_382, %x_384
-                    %82:bool = eq %81, false
-                    break_if %82 %b14
+                  $B15: {  # continuing
+                    %109:ptr<uniform, vec2<f32>, read> = access %x_27, 0u
+                    %110:f32 = load_vector_element %109, 0u
+                    %x_382:f32 = let %110
+                    %112:ptr<uniform, vec2<f32>, read> = access %x_27, 0u
+                    %113:f32 = load_vector_element %112, 1u
+                    %x_384:f32 = let %113
+                    %115:bool = gt %x_382, %x_384
+                    %116:bool = eq %115, false
+                    break_if %116  # -> [t: exit_loop loop_2, f: $B14]
                   }
                 }
-                continue %b5
+                continue  # -> $B5
               }
             }
             exit_if  # if_2
           }
         }
-        continue %b5
+        unreachable
       }
-      %b5 = block {  # continuing
-        next_iteration %b4
+      $B5: {  # continuing
+        next_iteration  # -> $B4
       }
     }
     ret
   }
 }
-%search_i1_ = func(%t:ptr<function, i32, read_write>):i32 -> %b16 {
-  %b16 = block {
+%search_i1_ = func(%t:ptr<function, i32, read_write>):i32 {
+  $B16: {
     %index:ptr<function, i32, read_write> = var
     %currentNode:ptr<function, BST, read_write> = var
     %x_387:ptr<function, i32, read_write> = var
     store %index, 0i
-    loop [b: %b17, c: %b18] {  # loop_3
-      %b17 = block {  # body
-        %x_99:i32 = load %index
-        %89:bool = neq %x_99, -1i
-        if %89 [t: %b19, f: %b20] {  # if_5
-          %b19 = block {  # true
+    loop [b: $B17, c: $B18] {  # loop_3
+      $B17: {  # body
+        %122:i32 = load %index
+        %x_99:i32 = let %122
+        %124:bool = neq %x_99, -1i
+        if %124 [t: $B19, f: $B20] {  # if_5
+          $B19: {  # true
             exit_if  # if_5
           }
-          %b20 = block {  # false
+          $B20: {  # false
             exit_loop  # loop_3
           }
         }
-        %x_100:i32 = load %index
-        %91:ptr<private, BST, read_write> = access %tree_1, %x_100
-        %x_395:BST = load %91
+        %125:i32 = load %index
+        %x_100:i32 = let %125
+        %127:ptr<private, BST, read_write> = access %tree_1, %x_100
+        %128:BST = load %127
+        %x_395:BST = let %128
         store %currentNode, %x_395
-        %93:ptr<function, i32, read_write> = access %currentNode, 0u
-        %x_101:i32 = load %93
-        %x_102:i32 = load %t
-        %96:bool = eq %x_101, %x_102
-        if %96 [t: %b21] {  # if_6
-          %b21 = block {  # true
-            %x_103:i32 = load %t
+        %130:ptr<function, i32, read_write> = access %currentNode, 0u
+        %131:i32 = load %130
+        %x_101:i32 = let %131
+        %133:i32 = load %t
+        %x_102:i32 = let %133
+        %135:bool = eq %x_101, %x_102
+        if %135 [t: $B21] {  # if_6
+          $B21: {  # true
+            %136:i32 = load %t
+            %x_103:i32 = let %136
             ret %x_103
           }
         }
-        %x_104:i32 = load %t
-        %99:ptr<function, i32, read_write> = access %currentNode, 0u
-        %x_105:i32 = load %99
-        %101:bool = gt %x_104, %x_105
-        if %101 [t: %b22, f: %b23] {  # if_7
-          %b22 = block {  # true
-            %102:ptr<function, i32, read_write> = access %currentNode, 2u
-            %x_106:i32 = load %102
+        %138:i32 = load %t
+        %x_104:i32 = let %138
+        %140:ptr<function, i32, read_write> = access %currentNode, 0u
+        %141:i32 = load %140
+        %x_105:i32 = let %141
+        %143:bool = gt %x_104, %x_105
+        if %143 [t: $B22, f: $B23] {  # if_7
+          $B22: {  # true
+            %144:ptr<function, i32, read_write> = access %currentNode, 2u
+            %145:i32 = load %144
+            %x_106:i32 = let %145
             store %x_387, %x_106
             exit_if  # if_7
           }
-          %b23 = block {  # false
-            %104:ptr<function, i32, read_write> = access %currentNode, 1u
-            %x_107:i32 = load %104
+          $B23: {  # false
+            %147:ptr<function, i32, read_write> = access %currentNode, 1u
+            %148:i32 = load %147
+            %x_107:i32 = let %148
             store %x_387, %x_107
             exit_if  # if_7
           }
         }
-        %x_108:i32 = load %x_387
+        %150:i32 = load %x_387
+        %x_108:i32 = let %150
         store %index, %x_108
-        continue %b18
+        continue  # -> $B18
       }
-      %b18 = block {  # continuing
-        next_iteration %b17
+      $B18: {  # continuing
+        next_iteration  # -> $B17
       }
     }
     ret -1i
   }
 }
-%makeFrame_f1_ = func(%v:ptr<function, f32, read_write>):f32 -> %b24 {
-  %b24 = block {
+%makeFrame_f1_ = func(%v:ptr<function, f32, read_write>):f32 {
+  $B24: {
     %param_5:ptr<function, i32, read_write> = var
     %param_6:ptr<function, i32, read_write> = var
     %param_7:ptr<function, i32, read_write> = var
-    %x_418:f32 = load %v
-    %113:f32 = mul %x_418, 6.5f
-    store %v, %113
-    %x_420:f32 = load %v
-    %115:bool = lt %x_420, 1.5f
-    if %115 [t: %b25] {  # if_8
-      %b25 = block {  # true
+    %157:f32 = load %v
+    %x_418:f32 = let %157
+    %159:f32 = mul %x_418, 6.5f
+    store %v, %159
+    %160:f32 = load %v
+    %x_420:f32 = let %160
+    %162:bool = lt %x_420, 1.5f
+    if %162 [t: $B25] {  # if_8
+      $B25: {  # true
         store %param_5, 100i
-        %x_110:i32 = call %search_i1_, %param_5
-        %117:f32 = convert %x_110
-        ret %117
+        %163:i32 = call %search_i1_, %param_5
+        %x_110:i32 = let %163
+        %165:f32 = convert %x_110
+        ret %165
       }
     }
-    %x_425:f32 = load %v
-    %119:bool = lt %x_425, 4.0f
-    if %119 [t: %b26] {  # if_9
-      %b26 = block {  # true
+    %166:f32 = load %v
+    %x_425:f32 = let %166
+    %168:bool = lt %x_425, 4.0f
+    if %168 [t: $B26] {  # if_9
+      $B26: {  # true
         ret 0.0f
       }
     }
-    %x_429:f32 = load %v
+    %169:f32 = load %v
+    %x_429:f32 = let %169
     store %param_6, 6i
-    %x_111:i32 = call %search_i1_, %param_6
-    %122:f32 = convert %x_111
-    %123:bool = lt %x_429, %122
-    if %123 [t: %b27] {  # if_10
-      %b27 = block {  # true
+    %171:i32 = call %search_i1_, %param_6
+    %x_111:i32 = let %171
+    %173:f32 = convert %x_111
+    %174:bool = lt %x_429, %173
+    if %174 [t: $B27] {  # if_10
+      $B27: {  # true
         ret 1.0f
       }
     }
     store %param_7, 30i
-    %x_112:i32 = call %search_i1_, %param_7
-    %125:f32 = convert %x_112
-    %126:f32 = add 10.0f, %125
-    ret %126
+    %175:i32 = call %search_i1_, %param_7
+    %x_112:i32 = let %175
+    %177:f32 = convert %x_112
+    %178:f32 = add 10.0f, %177
+    ret %178
   }
 }
-%hueColor_f1_ = func(%angle:ptr<function, f32, read_write>):vec3<f32> -> %b28 {
-  %b28 = block {
+%hueColor_f1_ = func(%angle:ptr<function, f32, read_write>):vec3<f32> {
+  $B28: {
     %nodeData:ptr<function, f32, read_write> = var
     %param_4:ptr<function, i32, read_write> = var
     store %param_4, 15i
-    %x_109:i32 = call %search_i1_, %param_4
-    %132:f32 = convert %x_109
-    store %nodeData, %132
-    %x_409:f32 = load %angle
-    %x_410:f32 = load %nodeData
-    %135:vec3<f32> = construct 1.0f, 5.0f, %x_410
-    %136:vec3<f32> = mul %135, %x_409
-    %137:vec3<f32> = add vec3<f32>(30.0f), %136
-    %138:vec3<f32> = div %137, vec3<f32>(50.0f)
-    ret %138
+    %183:i32 = call %search_i1_, %param_4
+    %x_109:i32 = let %183
+    %185:f32 = convert %x_109
+    store %nodeData, %185
+    %186:f32 = load %angle
+    %x_409:f32 = let %186
+    %188:f32 = load %nodeData
+    %x_410:f32 = let %188
+    %190:vec3<f32> = construct 1.0f, 5.0f, %x_410
+    %191:vec3<f32> = mul %190, %x_409
+    %192:vec3<f32> = add vec3<f32>(30.0f), %191
+    %193:vec3<f32> = div %192, vec3<f32>(50.0f)
+    ret %193
   }
 }
-%main_1 = func():void -> %b29 {
-  %b29 = block {
+%main_1 = func():void {
+  $B29: {
     %treeIndex_1:ptr<function, i32, read_write> = var
     %param_8:ptr<function, BST, read_write> = var
     %param_9:ptr<function, i32, read_write> = var
@@ -334,277 +389,332 @@
     %x_235:ptr<function, vec3<f32>, read_write> = var
     %param_31:ptr<function, f32, read_write> = var
     store %treeIndex_1, 0i
-    %179:ptr<private, BST, read_write> = access %tree_1, 0i
-    %x_237:BST = load %179
+    %234:ptr<private, BST, read_write> = access %tree_1, 0i
+    %235:BST = load %234
+    %x_237:BST = let %235
     store %param_8, %x_237
     store %param_9, 9i
-    %181:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param_8, %param_9
-    %x_239:BST = load %param_8
-    %183:ptr<private, BST, read_write> = access %tree_1, 0i
-    store %183, %x_239
-    %x_113:i32 = load %treeIndex_1
-    %185:i32 = add %x_113, 1i
-    store %treeIndex_1, %185
-    %x_115:i32 = load %treeIndex_1
+    %237:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param_8, %param_9
+    %238:BST = load %param_8
+    %x_239:BST = let %238
+    %240:ptr<private, BST, read_write> = access %tree_1, 0i
+    store %240, %x_239
+    %241:i32 = load %treeIndex_1
+    %x_113:i32 = let %241
+    %243:i32 = add %x_113, 1i
+    store %treeIndex_1, %243
+    %244:i32 = load %treeIndex_1
+    %x_115:i32 = let %244
     store %param_10, %x_115
     store %param_11, 5i
-    %187:void = call %insert_i1_i1_, %param_10, %param_11
-    %x_116:i32 = load %treeIndex_1
-    %189:i32 = add %x_116, 1i
-    store %treeIndex_1, %189
+    %246:void = call %insert_i1_i1_, %param_10, %param_11
+    %247:i32 = load %treeIndex_1
+    %x_116:i32 = let %247
+    %249:i32 = add %x_116, 1i
+    store %treeIndex_1, %249
     store %GLF_live1_looplimiter2, 0i
     store %GLF_live1i, 0i
-    loop [b: %b30, c: %b31] {  # loop_4
-      %b30 = block {  # body
-        if true [t: %b32, f: %b33] {  # if_11
-          %b32 = block {  # true
+    loop [b: $B30, c: $B31] {  # loop_4
+      $B30: {  # body
+        if true [t: $B32, f: $B33] {  # if_11
+          $B32: {  # true
             exit_if  # if_11
           }
-          %b33 = block {  # false
+          $B33: {  # false
             exit_loop  # loop_4
           }
         }
-        %x_118:i32 = load %GLF_live1_looplimiter2
-        %191:bool = gte %x_118, 7i
-        if %191 [t: %b34] {  # if_12
-          %b34 = block {  # true
+        %250:i32 = load %GLF_live1_looplimiter2
+        %x_118:i32 = let %250
+        %252:bool = gte %x_118, 7i
+        if %252 [t: $B34] {  # if_12
+          $B34: {  # true
             exit_loop  # loop_4
           }
         }
-        %x_119:i32 = load %GLF_live1_looplimiter2
-        %193:i32 = add %x_119, 1i
-        store %GLF_live1_looplimiter2, %193
-        continue %b31
+        %253:i32 = load %GLF_live1_looplimiter2
+        %x_119:i32 = let %253
+        %255:i32 = add %x_119, 1i
+        store %GLF_live1_looplimiter2, %255
+        continue  # -> $B31
       }
-      %b31 = block {  # continuing
-        %x_121:i32 = load %GLF_live1i
-        %195:i32 = add %x_121, 1i
-        store %GLF_live1i, %195
-        next_iteration %b30
+      $B31: {  # continuing
+        %256:i32 = load %GLF_live1i
+        %x_121:i32 = let %256
+        %258:i32 = add %x_121, 1i
+        store %GLF_live1i, %258
+        next_iteration  # -> $B30
       }
     }
-    %x_123:i32 = load %treeIndex_1
+    %259:i32 = load %treeIndex_1
+    %x_123:i32 = let %259
     store %param_12, %x_123
     store %param_13, 12i
-    %197:void = call %insert_i1_i1_, %param_12, %param_13
-    %x_124:i32 = load %treeIndex_1
-    %199:i32 = add %x_124, 1i
-    store %treeIndex_1, %199
-    %x_126:i32 = load %treeIndex_1
+    %261:void = call %insert_i1_i1_, %param_12, %param_13
+    %262:i32 = load %treeIndex_1
+    %x_124:i32 = let %262
+    %264:i32 = add %x_124, 1i
+    store %treeIndex_1, %264
+    %265:i32 = load %treeIndex_1
+    %x_126:i32 = let %265
     store %param_14, %x_126
     store %param_15, 15i
-    %201:void = call %insert_i1_i1_, %param_14, %param_15
-    %x_127:i32 = load %treeIndex_1
-    %203:i32 = add %x_127, 1i
-    store %treeIndex_1, %203
-    %x_129:i32 = load %treeIndex_1
+    %267:void = call %insert_i1_i1_, %param_14, %param_15
+    %268:i32 = load %treeIndex_1
+    %x_127:i32 = let %268
+    %270:i32 = add %x_127, 1i
+    store %treeIndex_1, %270
+    %271:i32 = load %treeIndex_1
+    %x_129:i32 = let %271
     store %param_16, %x_129
     store %param_17, 7i
-    %205:void = call %insert_i1_i1_, %param_16, %param_17
-    %x_130:i32 = load %treeIndex_1
-    %207:i32 = add %x_130, 1i
-    store %treeIndex_1, %207
-    %x_132:i32 = load %treeIndex_1
+    %273:void = call %insert_i1_i1_, %param_16, %param_17
+    %274:i32 = load %treeIndex_1
+    %x_130:i32 = let %274
+    %276:i32 = add %x_130, 1i
+    store %treeIndex_1, %276
+    %277:i32 = load %treeIndex_1
+    %x_132:i32 = let %277
     store %param_18, %x_132
     store %param_19, 8i
-    %209:void = call %insert_i1_i1_, %param_18, %param_19
-    %x_133:i32 = load %treeIndex_1
-    %211:i32 = add %x_133, 1i
-    store %treeIndex_1, %211
-    %x_135:i32 = load %treeIndex_1
+    %279:void = call %insert_i1_i1_, %param_18, %param_19
+    %280:i32 = load %treeIndex_1
+    %x_133:i32 = let %280
+    %282:i32 = add %x_133, 1i
+    store %treeIndex_1, %282
+    %283:i32 = load %treeIndex_1
+    %x_135:i32 = let %283
     store %param_20, %x_135
     store %param_21, 2i
-    %213:void = call %insert_i1_i1_, %param_20, %param_21
-    %x_136:i32 = load %treeIndex_1
-    %215:i32 = add %x_136, 1i
-    store %treeIndex_1, %215
-    %x_138:i32 = load %treeIndex_1
+    %285:void = call %insert_i1_i1_, %param_20, %param_21
+    %286:i32 = load %treeIndex_1
+    %x_136:i32 = let %286
+    %288:i32 = add %x_136, 1i
+    store %treeIndex_1, %288
+    %289:i32 = load %treeIndex_1
+    %x_138:i32 = let %289
     store %param_22, %x_138
     store %param_23, 6i
-    %217:void = call %insert_i1_i1_, %param_22, %param_23
-    %x_139:i32 = load %treeIndex_1
-    %219:i32 = add %x_139, 1i
-    store %treeIndex_1, %219
+    %291:void = call %insert_i1_i1_, %param_22, %param_23
+    %292:i32 = load %treeIndex_1
+    %x_139:i32 = let %292
+    %294:i32 = add %x_139, 1i
+    store %treeIndex_1, %294
     store %GLF_live4_looplimiter3, 0i
     store %GLF_live4i, 0i
-    loop [b: %b35, c: %b36] {  # loop_5
-      %b35 = block {  # body
-        if true [t: %b37, f: %b38] {  # if_13
-          %b37 = block {  # true
+    loop [b: $B35, c: $B36] {  # loop_5
+      $B35: {  # body
+        if true [t: $B37, f: $B38] {  # if_13
+          $B37: {  # true
             exit_if  # if_13
           }
-          %b38 = block {  # false
+          $B38: {  # false
             exit_loop  # loop_5
           }
         }
-        %x_141:i32 = load %GLF_live4_looplimiter3
-        %221:bool = gte %x_141, 3i
-        if %221 [t: %b39] {  # if_14
-          %b39 = block {  # true
+        %295:i32 = load %GLF_live4_looplimiter3
+        %x_141:i32 = let %295
+        %297:bool = gte %x_141, 3i
+        if %297 [t: $B39] {  # if_14
+          $B39: {  # true
             exit_loop  # loop_5
           }
         }
-        %x_142:i32 = load %GLF_live4_looplimiter3
-        %223:i32 = add %x_142, 1i
-        store %GLF_live4_looplimiter3, %223
+        %298:i32 = load %GLF_live4_looplimiter3
+        %x_142:i32 = let %298
+        %300:i32 = add %x_142, 1i
+        store %GLF_live4_looplimiter3, %300
         store %GLF_live4index, 1i
-        %x_144:i32 = load %GLF_live4index
-        %x_145:i32 = load %GLF_live4index
-        %x_146:i32 = load %GLF_live4index
-        %227:ptr<function, f32, read_write> = access %GLF_live4obj, 1u, 1i
-        %x_269:f32 = load %227
-        %229:bool = gte %x_144, 0i
-        %230:bool = lt %x_145, 10i
-        %231:bool = and %229, %230
-        %232:i32 = select 0i, %x_146, %231
-        %233:ptr<function, f32, read_write> = access %GLF_live4obj, 1u, %232
-        store %233, %x_269
-        %x_147:i32 = load %GLF_live4i
-        %x_148:i32 = load %GLF_live4i
-        %x_149:i32 = load %GLF_live4i
-        %237:bool = gte %x_147, 0i
-        %238:bool = lt %x_148, 10i
-        %239:bool = and %237, %238
-        %240:i32 = select 0i, %x_149, %239
-        %241:ptr<function, f32, read_write> = access %GLF_live4obj, 1u, %240
-        store %241, 1.0f
-        continue %b36
+        %301:i32 = load %GLF_live4index
+        %x_144:i32 = let %301
+        %303:i32 = load %GLF_live4index
+        %x_145:i32 = let %303
+        %305:i32 = load %GLF_live4index
+        %x_146:i32 = let %305
+        %307:ptr<function, f32, read_write> = access %GLF_live4obj, 1u, 1i
+        %308:f32 = load %307
+        %x_269:f32 = let %308
+        %310:bool = gte %x_144, 0i
+        %311:bool = lt %x_145, 10i
+        %312:bool = and %310, %311
+        %313:i32 = select 0i, %x_146, %312
+        %314:ptr<function, f32, read_write> = access %GLF_live4obj, 1u, %313
+        store %314, %x_269
+        %315:i32 = load %GLF_live4i
+        %x_147:i32 = let %315
+        %317:i32 = load %GLF_live4i
+        %x_148:i32 = let %317
+        %319:i32 = load %GLF_live4i
+        %x_149:i32 = let %319
+        %321:bool = gte %x_147, 0i
+        %322:bool = lt %x_148, 10i
+        %323:bool = and %321, %322
+        %324:i32 = select 0i, %x_149, %323
+        %325:ptr<function, f32, read_write> = access %GLF_live4obj, 1u, %324
+        store %325, 1.0f
+        continue  # -> $B36
       }
-      %b36 = block {  # continuing
-        %x_150:i32 = load %GLF_live4i
-        %243:i32 = add %x_150, 1i
-        store %GLF_live4i, %243
-        next_iteration %b35
+      $B36: {  # continuing
+        %326:i32 = load %GLF_live4i
+        %x_150:i32 = let %326
+        %328:i32 = add %x_150, 1i
+        store %GLF_live4i, %328
+        next_iteration  # -> $B35
       }
     }
-    %x_152:i32 = load %treeIndex_1
+    %329:i32 = load %treeIndex_1
+    %x_152:i32 = let %329
     store %param_24, %x_152
     store %param_25, 17i
-    %245:void = call %insert_i1_i1_, %param_24, %param_25
-    %246:ptr<uniform, vec2<f32>, read> = access %x_27, 0u
-    %x_278:f32 = load_vector_element %246, 0u
-    %248:ptr<uniform, vec2<f32>, read> = access %x_27, 0u
-    %x_280:f32 = load_vector_element %248, 1u
-    %250:bool = gt %x_278, %x_280
-    if %250 [t: %b40] {  # if_15
-      %b40 = block {  # true
+    %331:void = call %insert_i1_i1_, %param_24, %param_25
+    %332:ptr<uniform, vec2<f32>, read> = access %x_27, 0u
+    %333:f32 = load_vector_element %332, 0u
+    %x_278:f32 = let %333
+    %335:ptr<uniform, vec2<f32>, read> = access %x_27, 0u
+    %336:f32 = load_vector_element %335, 1u
+    %x_280:f32 = let %336
+    %338:bool = gt %x_278, %x_280
+    if %338 [t: $B40] {  # if_15
+      $B40: {  # true
         ret
       }
     }
-    %x_153:i32 = load %treeIndex_1
-    %252:i32 = add %x_153, 1i
-    store %treeIndex_1, %252
-    %x_155:i32 = load %treeIndex_1
+    %339:i32 = load %treeIndex_1
+    %x_153:i32 = let %339
+    %341:i32 = add %x_153, 1i
+    store %treeIndex_1, %341
+    %342:i32 = load %treeIndex_1
+    %x_155:i32 = let %342
     store %param_26, %x_155
     store %param_27, 13i
-    %254:void = call %insert_i1_i1_, %param_26, %param_27
-    %x_285:vec4<f32> = load %gl_FragCoord
-    %256:f32 = access %x_285, 1u
-    %257:f32 = access %x_285, 0u
-    %258:vec2<f32> = construct %256, %257
-    %259:vec2<f32> = div %258, vec2<f32>(256.0f)
-    store %z, %259
-    %x_289:f32 = load_vector_element %z, 0u
+    %344:void = call %insert_i1_i1_, %param_26, %param_27
+    %345:vec4<f32> = load %gl_FragCoord
+    %x_285:vec4<f32> = let %345
+    %347:f32 = access %x_285, 1u
+    %348:f32 = access %x_285, 0u
+    %349:vec2<f32> = construct %347, %348
+    %350:vec2<f32> = div %349, vec2<f32>(256.0f)
+    store %z, %350
+    %351:f32 = load_vector_element %z, 0u
+    %x_289:f32 = let %351
     store %param_28, %x_289
-    %x_290:f32 = call %makeFrame_f1_, %param_28
+    %353:f32 = call %makeFrame_f1_, %param_28
+    %x_290:f32 = let %353
     store %x, %x_290
-    %x_292:f32 = load_vector_element %z, 1u
+    %355:f32 = load_vector_element %z, 1u
+    %x_292:f32 = let %355
     store %param_29, %x_292
-    %x_293:f32 = call %makeFrame_f1_, %param_29
+    %357:f32 = call %makeFrame_f1_, %param_29
+    %x_293:f32 = let %357
     store %y, %x_293
     store %sum, -100i
     store %t_1, 0i
-    loop [b: %b41, c: %b42] {  # loop_6
-      %b41 = block {  # body
-        %x_156:i32 = load %t_1
-        %265:bool = lt %x_156, 20i
-        if %265 [t: %b43, f: %b44] {  # if_16
-          %b43 = block {  # true
+    loop [b: $B41, c: $B42] {  # loop_6
+      $B41: {  # body
+        %359:i32 = load %t_1
+        %x_156:i32 = let %359
+        %361:bool = lt %x_156, 20i
+        if %361 [t: $B43, f: $B44] {  # if_16
+          $B43: {  # true
             exit_if  # if_16
           }
-          %b44 = block {  # false
+          $B44: {  # false
             exit_loop  # loop_6
           }
         }
-        %x_157:i32 = load %t_1
+        %362:i32 = load %t_1
+        %x_157:i32 = let %362
         store %param_30, %x_157
-        %x_158:i32 = call %search_i1_, %param_30
+        %364:i32 = call %search_i1_, %param_30
+        %x_158:i32 = let %364
         store %result, %x_158
-        %x_159:i32 = load %result
-        %269:bool = gt %x_159, 0i
-        if %269 [t: %b45, f: %b46] {  # if_17
-          %b45 = block {  # true
+        %366:i32 = load %result
+        %x_159:i32 = let %366
+        %368:bool = gt %x_159, 0i
+        if %368 [t: $B45, f: $B46] {  # if_17
+          $B45: {  # true
             exit_if  # if_17
           }
-          %b46 = block {  # false
-            %x_160:i32 = load %result
-            switch %x_160 [c: (0i, %b47), c: (-1i, %b48), c: (default, %b49)] {  # switch_1
-              %b47 = block {  # case
+          $B46: {  # false
+            %369:i32 = load %result
+            %x_160:i32 = let %369
+            switch %x_160 [c: (0i, $B47), c: (-1i, $B48), c: (default, $B49)] {  # switch_1
+              $B47: {  # case
                 ret
               }
-              %b48 = block {  # case
-                %x_161:i32 = load %sum
-                %272:i32 = add %x_161, 1i
-                store %sum, %272
+              $B48: {  # case
+                %371:i32 = load %sum
+                %x_161:i32 = let %371
+                %373:i32 = add %x_161, 1i
+                store %sum, %373
                 exit_switch  # switch_1
               }
-              %b49 = block {  # case
+              $B49: {  # case
                 exit_switch  # switch_1
               }
             }
             exit_if  # if_17
           }
         }
-        continue %b42
+        continue  # -> $B42
       }
-      %b42 = block {  # continuing
-        %x_163:i32 = load %t_1
-        %274:i32 = add %x_163, 1i
-        store %t_1, %274
-        next_iteration %b41
+      $B42: {  # continuing
+        %374:i32 = load %t_1
+        %x_163:i32 = let %374
+        %376:i32 = add %x_163, 1i
+        store %t_1, %376
+        next_iteration  # -> $B41
       }
     }
-    %x_307:f32 = load %x
-    %x_308:f32 = load %y
-    %x_165:i32 = load %sum
-    %278:f32 = convert %x_165
-    %279:f32 = mul %x_308, %278
-    %280:f32 = add %x_307, %279
-    store %a, %280
-    %281:ptr<uniform, vec2<f32>, read> = access %x_27, 0u
-    %x_313:f32 = load_vector_element %281, 0u
-    %283:ptr<uniform, vec2<f32>, read> = access %x_27, 0u
-    %x_315:f32 = load_vector_element %283, 1u
-    %285:bool = lt %x_313, %x_315
-    if %285 [t: %b50, f: %b51] {  # if_18
-      %b50 = block {  # true
+    %377:f32 = load %x
+    %x_307:f32 = let %377
+    %379:f32 = load %y
+    %x_308:f32 = let %379
+    %381:i32 = load %sum
+    %x_165:i32 = let %381
+    %383:f32 = convert %x_165
+    %384:f32 = mul %x_308, %383
+    %385:f32 = add %x_307, %384
+    store %a, %385
+    %386:ptr<uniform, vec2<f32>, read> = access %x_27, 0u
+    %387:f32 = load_vector_element %386, 0u
+    %x_313:f32 = let %387
+    %389:ptr<uniform, vec2<f32>, read> = access %x_27, 0u
+    %390:f32 = load_vector_element %389, 1u
+    %x_315:f32 = let %390
+    %392:bool = lt %x_313, %x_315
+    if %392 [t: $B50, f: $B51] {  # if_18
+      $B50: {  # true
         store %x_235, vec3<f32>(1.0f, 0.0f, 0.0f)
         exit_if  # if_18
       }
-      %b51 = block {  # false
-        %x_320:f32 = load %a
+      $B51: {  # false
+        %393:f32 = load %a
+        %x_320:f32 = let %393
         store %param_31, %x_320
-        %x_321:vec3<f32> = call %hueColor_f1_, %param_31
+        %395:vec3<f32> = call %hueColor_f1_, %param_31
+        %x_321:vec3<f32> = let %395
         store %x_235, %x_321
         exit_if  # if_18
       }
     }
-    %x_322:vec3<f32> = load %x_235
-    %289:f32 = access %x_322, 0u
-    %290:f32 = access %x_322, 1u
-    %291:f32 = access %x_322, 2u
-    %292:vec4<f32> = construct %289, %290, %291, 1.0f
-    store %x_GLF_color, %292
+    %397:vec3<f32> = load %x_235
+    %x_322:vec3<f32> = let %397
+    %399:f32 = access %x_322, 0u
+    %400:f32 = access %x_322, 1u
+    %401:f32 = access %x_322, 2u
+    %402:vec4<f32> = construct %399, %400, %401, 1.0f
+    store %x_GLF_color, %402
     ret
   }
 }
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b52 {
-  %b52 = block {
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B52: {
     store %gl_FragCoord, %gl_FragCoord_param
-    %295:void = call %main_1
-    %296:vec4<f32> = load %x_GLF_color
-    %297:main_out = construct %296
-    ret %297
+    %405:void = call %main_1
+    %406:vec4<f32> = load %x_GLF_color
+    %407:main_out = construct %406
+    ret %407
   }
 }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/write-red-in-loop-nest/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/write-red-in-loop-nest/0-opt.spvasm.expected.ir.msl
index efdd3b1..b5187aa 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/write-red-in-loop-nest/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/write-red-in-loop-nest/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,171 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+}
+
+%main_1 = func():void {
+  $B2: {
+    %m43:ptr<function, mat4x3<f32>, read_write> = var
+    %ll1:ptr<function, i32, read_write> = var
+    %rows:ptr<function, i32, read_write> = var
+    %ll4:ptr<function, i32, read_write> = var
+    %ll2:ptr<function, i32, read_write> = var
+    %c:ptr<function, i32, read_write> = var
+    %tempm43:ptr<function, mat4x3<f32>, read_write> = var
+    %ll3:ptr<function, i32, read_write> = var
+    %d:ptr<function, i32, read_write> = var
+    %r:ptr<function, i32, read_write> = var
+    %sums:ptr<function, array<f32, 9>, read_write> = var
+    %idx:ptr<function, i32, read_write> = var
+    store %m43, mat4x3<f32>(vec3<f32>(1.0f, 0.0f, 0.0f), vec3<f32>(0.0f, 1.0f, 0.0f), vec3<f32>(0.0f, 0.0f, 1.0f), vec3<f32>(0.0f))
+    store %ll1, 0i
+    store %rows, 2i
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        if true [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
+            exit_if  # if_1
+          }
+          $B6: {  # false
+            exit_loop  # loop_1
+          }
+        }
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        %15:i32 = load %ll1
+        %16:bool = gte %15, 5i
+        if %16 [t: $B7] {  # if_2
+          $B7: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %17:i32 = load %ll1
+        %18:i32 = add %17, 1i
+        store %ll1, %18
+        store %ll4, 10i
+        store %ll2, 0i
+        store %c, 0i
+        loop [b: $B8, c: $B9] {  # loop_2
+          $B8: {  # body
+            %19:i32 = load %c
+            %20:bool = lt %19, 1i
+            if %20 [t: $B10, f: $B11] {  # if_3
+              $B10: {  # true
+                exit_if  # if_3
+              }
+              $B11: {  # false
+                exit_loop  # loop_2
+              }
+            }
+            %21:i32 = load %ll2
+            %22:bool = gte %21, 0i
+            if %22 [t: $B12] {  # if_4
+              $B12: {  # true
+                exit_loop  # loop_2
+              }
+            }
+            %23:i32 = load %ll2
+            %24:i32 = add %23, 1i
+            store %ll2, %24
+            %25:mat4x3<f32> = load %m43
+            store %tempm43, %25
+            store %ll3, 0i
+            store %d, 0i
+            loop [b: $B13, c: $B14] {  # loop_3
+              $B13: {  # body
+                %26:i32 = load %ll4
+                %27:bool = lt 1i, %26
+                if %27 [t: $B15, f: $B16] {  # if_5
+                  $B15: {  # true
+                    exit_if  # if_5
+                  }
+                  $B16: {  # false
+                    exit_loop  # loop_3
+                  }
+                }
+                %28:i32 = load %d
+                %x_24:i32 = let %28
+                %30:i32 = load %d
+                %x_25:i32 = let %30
+                %32:i32 = load %d
+                %x_26:i32 = let %32
+                %34:i32 = load %r
+                %x_27:i32 = let %34
+                %36:i32 = load %r
+                %x_28:i32 = let %36
+                %38:i32 = load %r
+                %x_29:i32 = let %38
+                %40:bool = gte %x_24, 0i
+                %41:bool = lt %x_25, 4i
+                %42:bool = and %40, %41
+                %43:i32 = select 0i, %x_26, %42
+                %44:ptr<function, vec3<f32>, read_write> = access %tempm43, %43
+                %45:ptr<function, vec3<f32>, read_write> = let %44
+                %46:bool = gte %x_27, 0i
+                %47:bool = lt %x_28, 3i
+                %48:bool = and %46, %47
+                %49:i32 = select 0i, %x_29, %48
+                store_vector_element %45, %49, 1.0f
+                continue  # -> $B14
+              }
+              $B14: {  # continuing
+                %50:i32 = load %d
+                %51:i32 = add %50, 1i
+                store %d, %51
+                next_iteration  # -> $B13
+              }
+            }
+            %52:i32 = load %idx
+            %53:i32 = load %idx
+            %54:bool = gte %53, 0i
+            %55:i32 = load %idx
+            %56:bool = lt %55, 9i
+            %57:bool = and %54, %56
+            %58:i32 = select 0i, %52, %57
+            %x_111:i32 = let %58
+            %60:ptr<function, f32, read_write> = access %sums, %x_111
+            %61:ptr<function, f32, read_write> = access %sums, %x_111
+            %62:f32 = load %61
+            %63:i32 = load %c
+            %64:ptr<function, vec3<f32>, read_write> = access %m43, %63
+            %65:f32 = load_vector_element %64, 1u
+            %66:f32 = add %62, %65
+            store %60, %66
+            continue  # -> $B9
+          }
+          $B9: {  # continuing
+            %67:i32 = load %c
+            %68:i32 = add %67, 1i
+            store %c, %68
+            next_iteration  # -> $B8
+          }
+        }
+        %69:i32 = load %idx
+        %70:i32 = add %69, 1i
+        store %idx, %70
+        continue  # -> $B4
+      }
+      $B4: {  # continuing
+        next_iteration  # -> $B3
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B17: {
+    %72:void = call %main_1
+    %73:vec4<f32> = load %x_GLF_color
+    %74:main_out = construct %73
+    ret %74
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/write-red-in-loop-nest/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/write-red-in-loop-nest/0-opt.wgsl.expected.ir.msl
index efdd3b1..cb93630 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/write-red-in-loop-nest/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/write-red-in-loop-nest/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,187 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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
+}
+
+%main_1 = func():void {
+  $B2: {
+    %m43:ptr<function, mat4x3<f32>, read_write> = var
+    %ll1:ptr<function, i32, read_write> = var
+    %rows:ptr<function, i32, read_write> = var
+    %ll4:ptr<function, i32, read_write> = var
+    %ll2:ptr<function, i32, read_write> = var
+    %c:ptr<function, i32, read_write> = var
+    %tempm43:ptr<function, mat4x3<f32>, read_write> = var
+    %ll3:ptr<function, i32, read_write> = var
+    %d:ptr<function, i32, read_write> = var
+    %r:ptr<function, i32, read_write> = var
+    %sums:ptr<function, array<f32, 9>, read_write> = var
+    %idx:ptr<function, i32, read_write> = var
+    store %m43, mat4x3<f32>(vec3<f32>(1.0f, 0.0f, 0.0f), vec3<f32>(0.0f, 1.0f, 0.0f), vec3<f32>(0.0f, 0.0f, 1.0f), vec3<f32>(0.0f))
+    store %ll1, 0i
+    store %rows, 2i
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        if true [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
+            exit_if  # if_1
+          }
+          $B6: {  # false
+            exit_loop  # loop_1
+          }
+        }
+        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+        %15:i32 = load %ll1
+        %x_16:i32 = let %15
+        %17:bool = gte %x_16, 5i
+        if %17 [t: $B7] {  # if_2
+          $B7: {  # true
+            exit_loop  # loop_1
+          }
+        }
+        %18:i32 = load %ll1
+        %x_17:i32 = let %18
+        %20:i32 = add %x_17, 1i
+        store %ll1, %20
+        store %ll4, 10i
+        store %ll2, 0i
+        store %c, 0i
+        loop [b: $B8, c: $B9] {  # loop_2
+          $B8: {  # body
+            %21:i32 = load %c
+            %x_19:i32 = let %21
+            %23:bool = lt %x_19, 1i
+            if %23 [t: $B10, f: $B11] {  # if_3
+              $B10: {  # true
+                exit_if  # if_3
+              }
+              $B11: {  # false
+                exit_loop  # loop_2
+              }
+            }
+            %24:i32 = load %ll2
+            %x_20:i32 = let %24
+            %26:bool = gte %x_20, 0i
+            if %26 [t: $B12] {  # if_4
+              $B12: {  # true
+                exit_loop  # loop_2
+              }
+            }
+            %27:i32 = load %ll2
+            %x_21:i32 = let %27
+            %29:i32 = add %x_21, 1i
+            store %ll2, %29
+            %30:mat4x3<f32> = load %m43
+            %x_92:mat4x3<f32> = let %30
+            store %tempm43, %x_92
+            store %ll3, 0i
+            store %d, 0i
+            loop [b: $B13, c: $B14] {  # loop_3
+              $B13: {  # body
+                %32:i32 = load %ll4
+                %x_23:i32 = let %32
+                %34:bool = lt 1i, %x_23
+                if %34 [t: $B15, f: $B16] {  # if_5
+                  $B15: {  # true
+                    exit_if  # if_5
+                  }
+                  $B16: {  # false
+                    exit_loop  # loop_3
+                  }
+                }
+                %35:i32 = load %d
+                %x_24:i32 = let %35
+                %37:i32 = load %d
+                %x_25:i32 = let %37
+                %39:i32 = load %d
+                %x_26:i32 = let %39
+                %41:i32 = load %r
+                %x_27:i32 = let %41
+                %43:i32 = load %r
+                %x_28:i32 = let %43
+                %45:i32 = load %r
+                %x_29:i32 = let %45
+                %47:bool = gte %x_24, 0i
+                %48:bool = lt %x_25, 4i
+                %49:bool = and %47, %48
+                %50:i32 = select 0i, %x_26, %49
+                %51:ptr<function, vec3<f32>, read_write> = access %tempm43, %50
+                %52:ptr<function, vec3<f32>, read_write> = let %51
+                %53:bool = gte %x_27, 0i
+                %54:bool = lt %x_28, 3i
+                %55:bool = and %53, %54
+                %56:i32 = select 0i, %x_29, %55
+                store_vector_element %52, %56, 1.0f
+                continue  # -> $B14
+              }
+              $B14: {  # continuing
+                %57:i32 = load %d
+                %x_30:i32 = let %57
+                %59:i32 = add %x_30, 1i
+                store %d, %59
+                next_iteration  # -> $B13
+              }
+            }
+            %60:i32 = load %idx
+            %x_32:i32 = let %60
+            %62:i32 = load %idx
+            %x_33:i32 = let %62
+            %64:i32 = load %idx
+            %x_34:i32 = let %64
+            %66:bool = gte %x_32, 0i
+            %67:bool = lt %x_33, 9i
+            %68:bool = and %66, %67
+            %69:i32 = select 0i, %x_34, %68
+            %x_111:i32 = let %69
+            %71:i32 = load %c
+            %x_35:i32 = let %71
+            %73:ptr<function, vec3<f32>, read_write> = access %m43, %x_35
+            %74:f32 = load_vector_element %73, 1u
+            %x_113:f32 = let %74
+            %76:ptr<function, f32, read_write> = access %sums, %x_111
+            %77:f32 = load %76
+            %x_115:f32 = let %77
+            %79:ptr<function, f32, read_write> = access %sums, %x_111
+            %80:f32 = add %x_115, %x_113
+            store %79, %80
+            continue  # -> $B9
+          }
+          $B9: {  # continuing
+            %81:i32 = load %c
+            %x_36:i32 = let %81
+            %83:i32 = add %x_36, 1i
+            store %c, %83
+            next_iteration  # -> $B8
+          }
+        }
+        %84:i32 = load %idx
+        %x_38:i32 = let %84
+        %86:i32 = add %x_38, 1i
+        store %idx, %86
+        continue  # -> $B4
+      }
+      $B4: {  # continuing
+        next_iteration  # -> $B3
+      }
+    }
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B17: {
+    %88:void = call %main_1
+    %89:vec4<f32> = load %x_GLF_color
+    %90:main_out = construct %89
+    ret %90
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/wrong-color-in-always-false-if/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/wrong-color-in-always-false-if/0-opt.spvasm.expected.ir.msl
index bbc9704..faed4fc 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/wrong-color-in-always-false-if/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/wrong-color-in-always-false-if/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,20 +8,20 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %height:ptr<function, f32, read_write> = var
     store %height, 256.0f
     %5:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
     %6:f32 = load_vector_element %5, 1u
     %7:bool = lt %6, 0.0f
-    if %7 [t: %b3] {  # if_1
-      %b3 = block {  # true
+    if %7 [t: $B3] {  # if_1
+      $B3: {  # true
         %8:f32 = load %height
         %9:vec4<f32> = construct 7612.9453125f, 797.010986328125f, %8, 9.0f
         %10:vec4<f32> = mix vec4<f32>(30.18000030517578125f, 8840.0f, 469.970001220703125f, 18.2399997711181640625f), vec4<f32>(9.8999996185302734375f, 0.10000000149011611938f, 1169.5386962890625f, 55.79000091552734375f), %9
@@ -33,8 +33,8 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b4 {
-  %b4 = block {
+%tint_symbol = @fragment func():main_out {
+  $B4: {
     %12:void = call %main_1
     %13:vec4<f32> = load %x_GLF_color
     %14:main_out = construct %13
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/wrong-color-in-always-false-if/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/wrong-color-in-always-false-if/0-opt.wgsl.expected.ir.msl
index 86bec2c..1c5c9aa 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/wrong-color-in-always-false-if/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/wrong-color-in-always-false-if/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(8) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
   injectionSwitch:vec2<f32> @offset(0)
 }
 
@@ -8,24 +8,26 @@
   x_GLF_color_1:vec4<f32> @offset(0), @location(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %height:ptr<function, f32, read_write> = var
     store %height, 256.0f
     %5:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %x_40:f32 = load_vector_element %5, 1u
-    %7:bool = lt %x_40, 0.0f
-    if %7 [t: %b3] {  # if_1
-      %b3 = block {  # true
-        %x_44:f32 = load %height
-        %9:vec4<f32> = construct 7612.9453125f, 797.010986328125f, %x_44, 9.0f
-        %10:vec4<f32> = mix vec4<f32>(30.18000030517578125f, 8840.0f, 469.970001220703125f, 18.2399997711181640625f), vec4<f32>(9.8999996185302734375f, 0.10000000149011611938f, 1169.5386962890625f, 55.79000091552734375f), %9
-        store %x_GLF_color, %10
+    %6:f32 = load_vector_element %5, 1u
+    %x_40:f32 = let %6
+    %8:bool = lt %x_40, 0.0f
+    if %8 [t: $B3] {  # if_1
+      $B3: {  # true
+        %9:f32 = load %height
+        %x_44:f32 = let %9
+        %11:vec4<f32> = construct 7612.9453125f, 797.010986328125f, %x_44, 9.0f
+        %12:vec4<f32> = mix vec4<f32>(30.18000030517578125f, 8840.0f, 469.970001220703125f, 18.2399997711181640625f), vec4<f32>(9.8999996185302734375f, 0.10000000149011611938f, 1169.5386962890625f, 55.79000091552734375f), %11
+        store %x_GLF_color, %12
         exit_if  # if_1
       }
     }
@@ -33,12 +35,12 @@
     ret
   }
 }
-%tint_symbol = @fragment func():main_out -> %b4 {
-  %b4 = block {
-    %12:void = call %main_1
-    %13:vec4<f32> = load %x_GLF_color
-    %14:main_out = construct %13
-    ret %14
+%tint_symbol = @fragment func():main_out {
+  $B4: {
+    %14:void = call %main_1
+    %15:vec4<f32> = load %x_GLF_color
+    %16:main_out = construct %15
+    ret %16
   }
 }
 
diff --git a/test/tint/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_overflow/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_overflow/0-opt.spvasm.expected.ir.msl
index 9c676f8..26da6db 100644
--- a/test/tint/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_overflow/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_overflow/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: In2 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: In2 = struct @align(4) {
   data_in2:array<i32, 8> @offset(0)
 }
 
@@ -16,16 +16,15 @@
   data_in0:array<i32, 512> @offset(0)
 }
 
-%b1 = block {  # root
-  %gl_WorkGroupID:ptr<private, vec3<u32>, read_write> = var
+$B1: {  # root
   %x_13:ptr<storage, In2, read> = var @binding_point(0, 2)
   %x_15:ptr<storage, Out0, read_write> = var @binding_point(0, 3)
   %x_17:ptr<storage, In1, read> = var @binding_point(0, 1)
   %x_19:ptr<storage, In0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func(%tint_wgid:vec3<u32>):void {
+  $B2: {
     %base_index_in:ptr<function, u32, read_write> = var
     %base_index_out:ptr<function, u32, read_write> = var
     %index_in0:ptr<function, i32, read_write> = var
@@ -36,10 +35,10 @@
     %i:ptr<function, i32, read_write> = var
     %temp0:ptr<function, i32, read_write> = var
     %temp1:ptr<function, i32, read_write> = var
-    %17:u32 = load_vector_element %gl_WorkGroupID, 0u
+    %17:u32 = access %tint_wgid, 0u
     %18:u32 = mul 128u, %17
     store %base_index_in, %18
-    %19:u32 = load_vector_element %gl_WorkGroupID, 0u
+    %19:u32 = access %tint_wgid, 0u
     %20:u32 = mul 256u, %19
     store %base_index_out, %20
     store %index_in0, 127i
@@ -48,15 +47,15 @@
     store %index_out1, 383i
     store %condition_index, 0i
     store %i, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %21:i32 = load %i
         %22:bool = lt %21, 256i
-        if %22 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %22 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
@@ -64,85 +63,92 @@
         %24:ptr<storage, i32, read> = access %x_13, 0u, %23
         %25:i32 = load %24
         %26:bool = eq %25, 0i
-        if %26 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
-            %x_77:u32 = load %base_index_out
-            %x_78:i32 = load %index_out0
-            %29:u32 = bitcast %x_78
-            %30:u32 = add %x_77, %29
-            %31:ptr<storage, i32, read_write> = access %x_15, 0u, %30
-            %32:u32 = load %base_index_in
-            %33:i32 = load %index_in0
-            %34:u32 = bitcast %33
-            %35:u32 = add %32, %34
-            %36:ptr<storage, i32, read> = access %x_17, 0u, %35
-            %37:i32 = load %36
-            store %31, %37
-            %38:i32 = load %index_out0
-            %39:i32 = sub %38, 1i
-            store %index_out0, %39
-            %40:i32 = load %index_in1
-            %41:i32 = sub %40, 1i
-            store %index_in1, %41
+        if %26 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
+            %27:u32 = load %base_index_out
+            %x_77:u32 = let %27
+            %29:i32 = load %index_out0
+            %x_78:i32 = let %29
+            %31:u32 = bitcast %x_78
+            %32:u32 = add %x_77, %31
+            %33:ptr<storage, i32, read_write> = access %x_15, 0u, %32
+            %34:ptr<storage, i32, read_write> = let %33
+            %35:u32 = load %base_index_in
+            %36:u32 = let %35
+            %37:i32 = load %index_in0
+            %38:u32 = bitcast %37
+            %39:u32 = add %36, %38
+            %40:ptr<storage, i32, read> = access %x_17, 0u, %39
+            %41:i32 = load %40
+            store %34, %41
+            %42:i32 = load %index_out0
+            %43:i32 = sub %42, 1i
+            store %index_out0, %43
+            %44:i32 = load %index_in1
+            %45:i32 = sub %44, 1i
+            store %index_in1, %45
             exit_if  # if_2
           }
-          %b8 = block {  # false
-            %x_92:u32 = load %base_index_out
-            %x_93:i32 = load %index_out1
-            %44:u32 = bitcast %x_93
-            %45:u32 = add %x_92, %44
-            %46:ptr<storage, i32, read_write> = access %x_15, 0u, %45
-            %47:u32 = load %base_index_in
-            %48:i32 = load %index_in1
-            %49:u32 = bitcast %48
-            %50:u32 = add %47, %49
-            %51:ptr<storage, i32, read> = access %x_19, 0u, %50
-            %52:i32 = load %51
-            store %46, %52
-            %53:i32 = load %index_out1
-            %54:i32 = sub %53, 1i
-            store %index_out1, %54
-            %55:i32 = load %index_in1
-            %56:i32 = sub %55, 1i
-            store %index_in1, %56
+          $B8: {  # false
+            %46:u32 = load %base_index_out
+            %x_92:u32 = let %46
+            %48:i32 = load %index_out1
+            %x_93:i32 = let %48
+            %50:u32 = bitcast %x_93
+            %51:u32 = add %x_92, %50
+            %52:ptr<storage, i32, read_write> = access %x_15, 0u, %51
+            %53:ptr<storage, i32, read_write> = let %52
+            %54:u32 = load %base_index_in
+            %55:u32 = let %54
+            %56:i32 = load %index_in1
+            %57:u32 = bitcast %56
+            %58:u32 = add %55, %57
+            %59:ptr<storage, i32, read> = access %x_19, 0u, %58
+            %60:i32 = load %59
+            store %53, %60
+            %61:i32 = load %index_out1
+            %62:i32 = sub %61, 1i
+            store %index_out1, %62
+            %63:i32 = load %index_in1
+            %64:i32 = sub %63, 1i
+            store %index_in1, %64
             exit_if  # if_2
           }
         }
-        %57:i32 = load %condition_index
-        %58:i32 = load %condition_index
-        %59:i32 = add %58, 1i
-        %60:ptr<storage, i32, read> = access %x_13, 0u, %59
-        %61:i32 = load %60
-        %62:i32 = add %57, %61
-        store %condition_index, %62
-        %63:i32 = load %index_in0
-        store %temp0, %63
-        %64:i32 = load %index_in1
-        store %index_in0, %64
-        %65:i32 = load %temp0
-        store %index_in1, %65
-        %66:i32 = load %index_out0
-        store %temp1, %66
-        %67:i32 = load %index_out1
-        store %index_out0, %67
-        %68:i32 = load %temp1
-        store %index_out1, %68
-        continue %b4
+        %65:i32 = load %condition_index
+        %66:i32 = load %condition_index
+        %67:i32 = add %66, 1i
+        %68:ptr<storage, i32, read> = access %x_13, 0u, %67
+        %69:i32 = load %68
+        %70:i32 = add %65, %69
+        store %condition_index, %70
+        %71:i32 = load %index_in0
+        store %temp0, %71
+        %72:i32 = load %index_in1
+        store %index_in0, %72
+        %73:i32 = load %temp0
+        store %index_in1, %73
+        %74:i32 = load %index_out0
+        store %temp1, %74
+        %75:i32 = load %index_out1
+        store %index_out0, %75
+        %76:i32 = load %temp1
+        store %index_out1, %76
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %69:i32 = load %i
-        %70:i32 = add %69, 1i
-        store %i, %70
-        next_iteration %b3
+      $B4: {  # continuing
+        %77:i32 = load %i
+        %78:i32 = add %77, 1i
+        store %i, %78
+        next_iteration  # -> $B3
       }
     }
     ret
   }
 }
-%tint_symbol = @compute @workgroup_size(4, 1, 1) func(%gl_WorkGroupID_param:vec3<u32> [@workgroup_id]):void -> %b9 {
-  %b9 = block {
-    store %gl_WorkGroupID, %gl_WorkGroupID_param
-    %73:void = call %main_1
+%tint_symbol = @compute @workgroup_size(4, 1, 1) func(%gl_WorkGroupID_param:vec3<u32> [@workgroup_id]):void {
+  $B9: {
+    %81:void = call %main_1, %gl_WorkGroupID_param
     ret
   }
 }
diff --git a/test/tint/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_overflow/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_overflow/0-opt.wgsl.expected.ir.msl
index 576fde1..594a41a 100644
--- a/test/tint/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_overflow/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_overflow/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: In2 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: In2 = struct @align(4) {
   data_in2:array<i32, 8> @offset(0)
 }
 
@@ -16,7 +16,7 @@
   data_in0:array<i32, 512> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %gl_WorkGroupID:ptr<private, vec3<u32>, read_write> = var
   %x_13:ptr<storage, In2, read> = var @binding_point(0, 2)
   %x_15:ptr<storage, Out0, read_write> = var @binding_point(0, 3)
@@ -24,8 +24,8 @@
   %x_19:ptr<storage, In0, read> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %base_index_in:ptr<function, u32, read_write> = var
     %base_index_out:ptr<function, u32, read_write> = var
     %index_in0:ptr<function, i32, read_write> = var
@@ -36,113 +36,142 @@
     %i:ptr<function, i32, read_write> = var
     %temp0:ptr<function, i32, read_write> = var
     %temp1:ptr<function, i32, read_write> = var
-    %x_58:u32 = load_vector_element %gl_WorkGroupID, 0u
-    %18:u32 = mul 128u, %x_58
-    store %base_index_in, %18
-    %x_61:u32 = load_vector_element %gl_WorkGroupID, 0u
-    %20:u32 = mul 256u, %x_61
-    store %base_index_out, %20
+    %17:u32 = load_vector_element %gl_WorkGroupID, 0u
+    %x_58:u32 = let %17
+    %19:u32 = mul 128u, %x_58
+    store %base_index_in, %19
+    %20:u32 = load_vector_element %gl_WorkGroupID, 0u
+    %x_61:u32 = let %20
+    %22:u32 = mul 256u, %x_61
+    store %base_index_out, %22
     store %index_in0, 127i
     store %index_in1, 383i
     store %index_out0, 255i
     store %index_out1, 383i
     store %condition_index, 0i
     store %i, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_67:i32 = load %i
-        %22:bool = lt %x_67, 256i
-        if %22 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %23:i32 = load %i
+        %x_67:i32 = let %23
+        %25:bool = lt %x_67, 256i
+        if %25 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_70:i32 = load %condition_index
-        %24:ptr<storage, i32, read> = access %x_13, 0u, %x_70
-        %x_72:i32 = load %24
-        %26:bool = eq %x_72, 0i
-        if %26 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
-            %x_77:u32 = load %base_index_out
-            %x_78:i32 = load %index_out0
-            %x_81:u32 = load %base_index_in
-            %x_82:i32 = load %index_in0
-            %31:u32 = bitcast %x_82
-            %32:u32 = add %x_81, %31
-            %33:ptr<storage, i32, read> = access %x_17, 0u, %32
-            %x_86:i32 = load %33
-            %35:u32 = bitcast %x_78
-            %36:u32 = add %x_77, %35
-            %37:ptr<storage, i32, read_write> = access %x_15, 0u, %36
-            store %37, %x_86
-            %x_88:i32 = load %index_out0
-            %39:i32 = sub %x_88, 1i
-            store %index_out0, %39
-            %x_90:i32 = load %index_in1
-            %41:i32 = sub %x_90, 1i
-            store %index_in1, %41
+        %26:i32 = load %condition_index
+        %x_70:i32 = let %26
+        %28:ptr<storage, i32, read> = access %x_13, 0u, %x_70
+        %29:i32 = load %28
+        %x_72:i32 = let %29
+        %31:bool = eq %x_72, 0i
+        if %31 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
+            %32:u32 = load %base_index_out
+            %x_77:u32 = let %32
+            %34:i32 = load %index_out0
+            %x_78:i32 = let %34
+            %36:u32 = load %base_index_in
+            %x_81:u32 = let %36
+            %38:i32 = load %index_in0
+            %x_82:i32 = let %38
+            %40:u32 = bitcast %x_82
+            %41:u32 = add %x_81, %40
+            %42:ptr<storage, i32, read> = access %x_17, 0u, %41
+            %43:i32 = load %42
+            %x_86:i32 = let %43
+            %45:u32 = bitcast %x_78
+            %46:u32 = add %x_77, %45
+            %47:ptr<storage, i32, read_write> = access %x_15, 0u, %46
+            store %47, %x_86
+            %48:i32 = load %index_out0
+            %x_88:i32 = let %48
+            %50:i32 = sub %x_88, 1i
+            store %index_out0, %50
+            %51:i32 = load %index_in1
+            %x_90:i32 = let %51
+            %53:i32 = sub %x_90, 1i
+            store %index_in1, %53
             exit_if  # if_2
           }
-          %b8 = block {  # false
-            %x_92:u32 = load %base_index_out
-            %x_93:i32 = load %index_out1
-            %x_96:u32 = load %base_index_in
-            %x_97:i32 = load %index_in1
-            %46:u32 = bitcast %x_97
-            %47:u32 = add %x_96, %46
-            %48:ptr<storage, i32, read> = access %x_19, 0u, %47
-            %x_101:i32 = load %48
-            %50:u32 = bitcast %x_93
-            %51:u32 = add %x_92, %50
-            %52:ptr<storage, i32, read_write> = access %x_15, 0u, %51
-            store %52, %x_101
-            %x_103:i32 = load %index_out1
-            %54:i32 = sub %x_103, 1i
-            store %index_out1, %54
-            %x_105:i32 = load %index_in1
-            %56:i32 = sub %x_105, 1i
-            store %index_in1, %56
+          $B8: {  # false
+            %54:u32 = load %base_index_out
+            %x_92:u32 = let %54
+            %56:i32 = load %index_out1
+            %x_93:i32 = let %56
+            %58:u32 = load %base_index_in
+            %x_96:u32 = let %58
+            %60:i32 = load %index_in1
+            %x_97:i32 = let %60
+            %62:u32 = bitcast %x_97
+            %63:u32 = add %x_96, %62
+            %64:ptr<storage, i32, read> = access %x_19, 0u, %63
+            %65:i32 = load %64
+            %x_101:i32 = let %65
+            %67:u32 = bitcast %x_93
+            %68:u32 = add %x_92, %67
+            %69:ptr<storage, i32, read_write> = access %x_15, 0u, %68
+            store %69, %x_101
+            %70:i32 = load %index_out1
+            %x_103:i32 = let %70
+            %72:i32 = sub %x_103, 1i
+            store %index_out1, %72
+            %73:i32 = load %index_in1
+            %x_105:i32 = let %73
+            %75:i32 = sub %x_105, 1i
+            store %index_in1, %75
             exit_if  # if_2
           }
         }
-        %x_107:i32 = load %condition_index
-        %58:i32 = add %x_107, 1i
-        %59:ptr<storage, i32, read> = access %x_13, 0u, %58
-        %x_110:i32 = load %59
-        %x_111:i32 = load %condition_index
-        %62:i32 = add %x_111, %x_110
-        store %condition_index, %62
-        %x_113:i32 = load %index_in0
+        %76:i32 = load %condition_index
+        %x_107:i32 = let %76
+        %78:i32 = add %x_107, 1i
+        %79:ptr<storage, i32, read> = access %x_13, 0u, %78
+        %80:i32 = load %79
+        %x_110:i32 = let %80
+        %82:i32 = load %condition_index
+        %x_111:i32 = let %82
+        %84:i32 = add %x_111, %x_110
+        store %condition_index, %84
+        %85:i32 = load %index_in0
+        %x_113:i32 = let %85
         store %temp0, %x_113
-        %x_114:i32 = load %index_in1
+        %87:i32 = load %index_in1
+        %x_114:i32 = let %87
         store %index_in0, %x_114
-        %x_115:i32 = load %temp0
+        %89:i32 = load %temp0
+        %x_115:i32 = let %89
         store %index_in1, %x_115
-        %x_116:i32 = load %index_out0
+        %91:i32 = load %index_out0
+        %x_116:i32 = let %91
         store %temp1, %x_116
-        %x_117:i32 = load %index_out1
+        %93:i32 = load %index_out1
+        %x_117:i32 = let %93
         store %index_out0, %x_117
-        %x_118:i32 = load %temp1
+        %95:i32 = load %temp1
+        %x_118:i32 = let %95
         store %index_out1, %x_118
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_119:i32 = load %i
-        %70:i32 = add %x_119, 1i
-        store %i, %70
-        next_iteration %b3
+      $B4: {  # continuing
+        %97:i32 = load %i
+        %x_119:i32 = let %97
+        %99:i32 = add %x_119, 1i
+        store %i, %99
+        next_iteration  # -> $B3
       }
     }
     ret
   }
 }
-%tint_symbol = @compute @workgroup_size(4, 1, 1) func(%gl_WorkGroupID_param:vec3<u32> [@workgroup_id]):void -> %b9 {
-  %b9 = block {
+%tint_symbol = @compute @workgroup_size(4, 1, 1) func(%gl_WorkGroupID_param:vec3<u32> [@workgroup_id]):void {
+  $B9: {
     store %gl_WorkGroupID, %gl_WorkGroupID_param
-    %73:void = call %main_1
+    %102:void = call %main_1
     ret
   }
 }
diff --git a/test/tint/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_underflow/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_underflow/0-opt.spvasm.expected.ir.msl
index 1624d2c..d3fb672 100644
--- a/test/tint/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_underflow/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_underflow/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: In2 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: In2 = struct @align(4) {
   data_in2:array<i32, 8> @offset(0)
 }
 
@@ -16,16 +16,15 @@
   data_in1:array<i32, 512> @offset(0)
 }
 
-%b1 = block {  # root
-  %gl_WorkGroupID:ptr<private, vec3<u32>, read_write> = var
+$B1: {  # root
   %x_13:ptr<storage, In2, read> = var @binding_point(0, 2)
   %x_15:ptr<storage, Out0, read_write> = var @binding_point(0, 3)
   %x_17:ptr<storage, In0, read> = var @binding_point(0, 0)
   %x_19:ptr<storage, In1, read> = var @binding_point(0, 1)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func(%tint_wgid:vec3<u32>):void {
+  $B2: {
     %base_index_in:ptr<function, u32, read_write> = var
     %base_index_out:ptr<function, u32, read_write> = var
     %index_in0:ptr<function, i32, read_write> = var
@@ -36,10 +35,10 @@
     %i:ptr<function, i32, read_write> = var
     %temp0:ptr<function, i32, read_write> = var
     %temp1:ptr<function, i32, read_write> = var
-    %17:u32 = load_vector_element %gl_WorkGroupID, 0u
+    %17:u32 = access %tint_wgid, 0u
     %18:u32 = mul 128u, %17
     store %base_index_in, %18
-    %19:u32 = load_vector_element %gl_WorkGroupID, 0u
+    %19:u32 = access %tint_wgid, 0u
     %20:u32 = mul 256u, %19
     store %base_index_out, %20
     store %index_in0, 0i
@@ -48,15 +47,15 @@
     store %index_out1, -128i
     store %condition_index, 0i
     store %i, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %21:i32 = load %i
         %22:bool = lt %21, 256i
-        if %22 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %22 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
@@ -64,85 +63,92 @@
         %24:ptr<storage, i32, read> = access %x_13, 0u, %23
         %25:i32 = load %24
         %26:bool = eq %25, 0i
-        if %26 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
-            %x_75:u32 = load %base_index_out
-            %x_76:i32 = load %index_out0
-            %29:u32 = bitcast %x_76
-            %30:u32 = add %x_75, %29
-            %31:ptr<storage, i32, read_write> = access %x_15, 0u, %30
-            %32:u32 = load %base_index_in
-            %33:i32 = load %index_in0
-            %34:u32 = bitcast %33
-            %35:u32 = add %32, %34
-            %36:ptr<storage, i32, read> = access %x_17, 0u, %35
-            %37:i32 = load %36
-            store %31, %37
-            %38:i32 = load %index_out0
-            %39:i32 = add %38, 1i
-            store %index_out0, %39
-            %40:i32 = load %index_in1
-            %41:i32 = add %40, 1i
-            store %index_in1, %41
+        if %26 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
+            %27:u32 = load %base_index_out
+            %x_75:u32 = let %27
+            %29:i32 = load %index_out0
+            %x_76:i32 = let %29
+            %31:u32 = bitcast %x_76
+            %32:u32 = add %x_75, %31
+            %33:ptr<storage, i32, read_write> = access %x_15, 0u, %32
+            %34:ptr<storage, i32, read_write> = let %33
+            %35:u32 = load %base_index_in
+            %36:u32 = let %35
+            %37:i32 = load %index_in0
+            %38:u32 = bitcast %37
+            %39:u32 = add %36, %38
+            %40:ptr<storage, i32, read> = access %x_17, 0u, %39
+            %41:i32 = load %40
+            store %34, %41
+            %42:i32 = load %index_out0
+            %43:i32 = add %42, 1i
+            store %index_out0, %43
+            %44:i32 = load %index_in1
+            %45:i32 = add %44, 1i
+            store %index_in1, %45
             exit_if  # if_2
           }
-          %b8 = block {  # false
-            %x_90:u32 = load %base_index_out
-            %x_91:i32 = load %index_out1
-            %44:u32 = bitcast %x_91
-            %45:u32 = add %x_90, %44
-            %46:ptr<storage, i32, read_write> = access %x_15, 0u, %45
-            %47:u32 = load %base_index_in
-            %48:i32 = load %index_in1
-            %49:u32 = bitcast %48
-            %50:u32 = add %47, %49
-            %51:ptr<storage, i32, read> = access %x_19, 0u, %50
-            %52:i32 = load %51
-            store %46, %52
-            %53:i32 = load %index_out1
-            %54:i32 = add %53, 1i
-            store %index_out1, %54
-            %55:i32 = load %index_in1
-            %56:i32 = add %55, 1i
-            store %index_in1, %56
+          $B8: {  # false
+            %46:u32 = load %base_index_out
+            %x_90:u32 = let %46
+            %48:i32 = load %index_out1
+            %x_91:i32 = let %48
+            %50:u32 = bitcast %x_91
+            %51:u32 = add %x_90, %50
+            %52:ptr<storage, i32, read_write> = access %x_15, 0u, %51
+            %53:ptr<storage, i32, read_write> = let %52
+            %54:u32 = load %base_index_in
+            %55:u32 = let %54
+            %56:i32 = load %index_in1
+            %57:u32 = bitcast %56
+            %58:u32 = add %55, %57
+            %59:ptr<storage, i32, read> = access %x_19, 0u, %58
+            %60:i32 = load %59
+            store %53, %60
+            %61:i32 = load %index_out1
+            %62:i32 = add %61, 1i
+            store %index_out1, %62
+            %63:i32 = load %index_in1
+            %64:i32 = add %63, 1i
+            store %index_in1, %64
             exit_if  # if_2
           }
         }
-        %57:i32 = load %condition_index
-        %58:i32 = load %condition_index
-        %59:i32 = add %58, 1i
-        %60:ptr<storage, i32, read> = access %x_13, 0u, %59
-        %61:i32 = load %60
-        %62:i32 = add %57, %61
-        store %condition_index, %62
-        %63:i32 = load %index_in0
-        store %temp0, %63
-        %64:i32 = load %index_in1
-        store %index_in0, %64
-        %65:i32 = load %temp0
-        store %index_in1, %65
-        %66:i32 = load %index_out0
-        store %temp1, %66
-        %67:i32 = load %index_out1
-        store %index_out0, %67
-        %68:i32 = load %temp1
-        store %index_out1, %68
-        continue %b4
+        %65:i32 = load %condition_index
+        %66:i32 = load %condition_index
+        %67:i32 = add %66, 1i
+        %68:ptr<storage, i32, read> = access %x_13, 0u, %67
+        %69:i32 = load %68
+        %70:i32 = add %65, %69
+        store %condition_index, %70
+        %71:i32 = load %index_in0
+        store %temp0, %71
+        %72:i32 = load %index_in1
+        store %index_in0, %72
+        %73:i32 = load %temp0
+        store %index_in1, %73
+        %74:i32 = load %index_out0
+        store %temp1, %74
+        %75:i32 = load %index_out1
+        store %index_out0, %75
+        %76:i32 = load %temp1
+        store %index_out1, %76
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %69:i32 = load %i
-        %70:i32 = add %69, 1i
-        store %i, %70
-        next_iteration %b3
+      $B4: {  # continuing
+        %77:i32 = load %i
+        %78:i32 = add %77, 1i
+        store %i, %78
+        next_iteration  # -> $B3
       }
     }
     ret
   }
 }
-%tint_symbol = @compute @workgroup_size(4, 1, 1) func(%gl_WorkGroupID_param:vec3<u32> [@workgroup_id]):void -> %b9 {
-  %b9 = block {
-    store %gl_WorkGroupID, %gl_WorkGroupID_param
-    %73:void = call %main_1
+%tint_symbol = @compute @workgroup_size(4, 1, 1) func(%gl_WorkGroupID_param:vec3<u32> [@workgroup_id]):void {
+  $B9: {
+    %81:void = call %main_1, %gl_WorkGroupID_param
     ret
   }
 }
diff --git a/test/tint/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_underflow/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_underflow/0-opt.wgsl.expected.ir.msl
index 15c0b92..82a26e8 100644
--- a/test/tint/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_underflow/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_underflow/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: In2 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: In2 = struct @align(4) {
   data_in2:array<i32, 8> @offset(0)
 }
 
@@ -16,7 +16,7 @@
   data_in1:array<i32, 512> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %gl_WorkGroupID:ptr<private, vec3<u32>, read_write> = var
   %x_13:ptr<storage, In2, read> = var @binding_point(0, 2)
   %x_15:ptr<storage, Out0, read_write> = var @binding_point(0, 3)
@@ -24,8 +24,8 @@
   %x_19:ptr<storage, In1, read> = var @binding_point(0, 1)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %base_index_in:ptr<function, u32, read_write> = var
     %base_index_out:ptr<function, u32, read_write> = var
     %index_in0:ptr<function, i32, read_write> = var
@@ -36,113 +36,142 @@
     %i:ptr<function, i32, read_write> = var
     %temp0:ptr<function, i32, read_write> = var
     %temp1:ptr<function, i32, read_write> = var
-    %x_56:u32 = load_vector_element %gl_WorkGroupID, 0u
-    %18:u32 = mul 128u, %x_56
-    store %base_index_in, %18
-    %x_59:u32 = load_vector_element %gl_WorkGroupID, 0u
-    %20:u32 = mul 256u, %x_59
-    store %base_index_out, %20
+    %17:u32 = load_vector_element %gl_WorkGroupID, 0u
+    %x_56:u32 = let %17
+    %19:u32 = mul 128u, %x_56
+    store %base_index_in, %19
+    %20:u32 = load_vector_element %gl_WorkGroupID, 0u
+    %x_59:u32 = let %20
+    %22:u32 = mul 256u, %x_59
+    store %base_index_out, %22
     store %index_in0, 0i
     store %index_in1, -128i
     store %index_out0, 0i
     store %index_out1, -128i
     store %condition_index, 0i
     store %i, 0i
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_65:i32 = load %i
-        %22:bool = lt %x_65, 256i
-        if %22 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %23:i32 = load %i
+        %x_65:i32 = let %23
+        %25:bool = lt %x_65, 256i
+        if %25 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_68:i32 = load %condition_index
-        %24:ptr<storage, i32, read> = access %x_13, 0u, %x_68
-        %x_70:i32 = load %24
-        %26:bool = eq %x_70, 0i
-        if %26 [t: %b7, f: %b8] {  # if_2
-          %b7 = block {  # true
-            %x_75:u32 = load %base_index_out
-            %x_76:i32 = load %index_out0
-            %x_79:u32 = load %base_index_in
-            %x_80:i32 = load %index_in0
-            %31:u32 = bitcast %x_80
-            %32:u32 = add %x_79, %31
-            %33:ptr<storage, i32, read> = access %x_17, 0u, %32
-            %x_84:i32 = load %33
-            %35:u32 = bitcast %x_76
-            %36:u32 = add %x_75, %35
-            %37:ptr<storage, i32, read_write> = access %x_15, 0u, %36
-            store %37, %x_84
-            %x_86:i32 = load %index_out0
-            %39:i32 = add %x_86, 1i
-            store %index_out0, %39
-            %x_88:i32 = load %index_in1
-            %41:i32 = add %x_88, 1i
-            store %index_in1, %41
+        %26:i32 = load %condition_index
+        %x_68:i32 = let %26
+        %28:ptr<storage, i32, read> = access %x_13, 0u, %x_68
+        %29:i32 = load %28
+        %x_70:i32 = let %29
+        %31:bool = eq %x_70, 0i
+        if %31 [t: $B7, f: $B8] {  # if_2
+          $B7: {  # true
+            %32:u32 = load %base_index_out
+            %x_75:u32 = let %32
+            %34:i32 = load %index_out0
+            %x_76:i32 = let %34
+            %36:u32 = load %base_index_in
+            %x_79:u32 = let %36
+            %38:i32 = load %index_in0
+            %x_80:i32 = let %38
+            %40:u32 = bitcast %x_80
+            %41:u32 = add %x_79, %40
+            %42:ptr<storage, i32, read> = access %x_17, 0u, %41
+            %43:i32 = load %42
+            %x_84:i32 = let %43
+            %45:u32 = bitcast %x_76
+            %46:u32 = add %x_75, %45
+            %47:ptr<storage, i32, read_write> = access %x_15, 0u, %46
+            store %47, %x_84
+            %48:i32 = load %index_out0
+            %x_86:i32 = let %48
+            %50:i32 = add %x_86, 1i
+            store %index_out0, %50
+            %51:i32 = load %index_in1
+            %x_88:i32 = let %51
+            %53:i32 = add %x_88, 1i
+            store %index_in1, %53
             exit_if  # if_2
           }
-          %b8 = block {  # false
-            %x_90:u32 = load %base_index_out
-            %x_91:i32 = load %index_out1
-            %x_94:u32 = load %base_index_in
-            %x_95:i32 = load %index_in1
-            %46:u32 = bitcast %x_95
-            %47:u32 = add %x_94, %46
-            %48:ptr<storage, i32, read> = access %x_19, 0u, %47
-            %x_99:i32 = load %48
-            %50:u32 = bitcast %x_91
-            %51:u32 = add %x_90, %50
-            %52:ptr<storage, i32, read_write> = access %x_15, 0u, %51
-            store %52, %x_99
-            %x_101:i32 = load %index_out1
-            %54:i32 = add %x_101, 1i
-            store %index_out1, %54
-            %x_103:i32 = load %index_in1
-            %56:i32 = add %x_103, 1i
-            store %index_in1, %56
+          $B8: {  # false
+            %54:u32 = load %base_index_out
+            %x_90:u32 = let %54
+            %56:i32 = load %index_out1
+            %x_91:i32 = let %56
+            %58:u32 = load %base_index_in
+            %x_94:u32 = let %58
+            %60:i32 = load %index_in1
+            %x_95:i32 = let %60
+            %62:u32 = bitcast %x_95
+            %63:u32 = add %x_94, %62
+            %64:ptr<storage, i32, read> = access %x_19, 0u, %63
+            %65:i32 = load %64
+            %x_99:i32 = let %65
+            %67:u32 = bitcast %x_91
+            %68:u32 = add %x_90, %67
+            %69:ptr<storage, i32, read_write> = access %x_15, 0u, %68
+            store %69, %x_99
+            %70:i32 = load %index_out1
+            %x_101:i32 = let %70
+            %72:i32 = add %x_101, 1i
+            store %index_out1, %72
+            %73:i32 = load %index_in1
+            %x_103:i32 = let %73
+            %75:i32 = add %x_103, 1i
+            store %index_in1, %75
             exit_if  # if_2
           }
         }
-        %x_105:i32 = load %condition_index
-        %58:i32 = add %x_105, 1i
-        %59:ptr<storage, i32, read> = access %x_13, 0u, %58
-        %x_108:i32 = load %59
-        %x_109:i32 = load %condition_index
-        %62:i32 = add %x_109, %x_108
-        store %condition_index, %62
-        %x_111:i32 = load %index_in0
+        %76:i32 = load %condition_index
+        %x_105:i32 = let %76
+        %78:i32 = add %x_105, 1i
+        %79:ptr<storage, i32, read> = access %x_13, 0u, %78
+        %80:i32 = load %79
+        %x_108:i32 = let %80
+        %82:i32 = load %condition_index
+        %x_109:i32 = let %82
+        %84:i32 = add %x_109, %x_108
+        store %condition_index, %84
+        %85:i32 = load %index_in0
+        %x_111:i32 = let %85
         store %temp0, %x_111
-        %x_112:i32 = load %index_in1
+        %87:i32 = load %index_in1
+        %x_112:i32 = let %87
         store %index_in0, %x_112
-        %x_113:i32 = load %temp0
+        %89:i32 = load %temp0
+        %x_113:i32 = let %89
         store %index_in1, %x_113
-        %x_114:i32 = load %index_out0
+        %91:i32 = load %index_out0
+        %x_114:i32 = let %91
         store %temp1, %x_114
-        %x_115:i32 = load %index_out1
+        %93:i32 = load %index_out1
+        %x_115:i32 = let %93
         store %index_out0, %x_115
-        %x_116:i32 = load %temp1
+        %95:i32 = load %temp1
+        %x_116:i32 = let %95
         store %index_out1, %x_116
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_117:i32 = load %i
-        %70:i32 = add %x_117, 1i
-        store %i, %70
-        next_iteration %b3
+      $B4: {  # continuing
+        %97:i32 = load %i
+        %x_117:i32 = let %97
+        %99:i32 = add %x_117, 1i
+        store %i, %99
+        next_iteration  # -> $B3
       }
     }
     ret
   }
 }
-%tint_symbol = @compute @workgroup_size(4, 1, 1) func(%gl_WorkGroupID_param:vec3<u32> [@workgroup_id]):void -> %b9 {
-  %b9 = block {
+%tint_symbol = @compute @workgroup_size(4, 1, 1) func(%gl_WorkGroupID_param:vec3<u32> [@workgroup_id]):void {
+  $B9: {
     store %gl_WorkGroupID, %gl_WorkGroupID_param
-    %73:void = call %main_1
+    %102:void = call %main_1
     ret
   }
 }
diff --git a/test/tint/vk-gl-cts/rasterization/line_continuity/line-strip/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/rasterization/line_continuity/line-strip/0.spvasm.expected.ir.msl
index efdd3b1..83ed178 100644
--- a/test/tint/vk-gl-cts/rasterization/line_continuity/line-strip/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/rasterization/line_continuity/line-strip/0.spvasm.expected.ir.msl
@@ -1,6 +1,29 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(16) {
+  color_1:vec4<f32> @offset(0), @location(0)
+}
+
+$B1: {  # root
+  %color:ptr<private, vec4<f32>, read_write> = var
+}
+
+%main_1 = func():void {
+  $B2: {
+    store %color, vec4<f32>(1.0f)
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B3: {
+    %4:void = call %main_1
+    %5:vec4<f32> = load %color
+    %6:main_out = construct %5
+    ret %6
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/rasterization/line_continuity/line-strip/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/rasterization/line_continuity/line-strip/0.wgsl.expected.ir.msl
index efdd3b1..83ed178 100644
--- a/test/tint/vk-gl-cts/rasterization/line_continuity/line-strip/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/rasterization/line_continuity/line-strip/0.wgsl.expected.ir.msl
@@ -1,6 +1,29 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(16) {
+  color_1:vec4<f32> @offset(0), @location(0)
+}
+
+$B1: {  # root
+  %color:ptr<private, vec4<f32>, read_write> = var
+}
+
+%main_1 = func():void {
+  $B2: {
+    store %color, vec4<f32>(1.0f)
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B3: {
+    %4:void = call %main_1
+    %5:vec4<f32> = load %color
+    %6:main_out = construct %5
+    ret %6
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/rasterization/line_continuity/line-strip/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/rasterization/line_continuity/line-strip/1.spvasm.expected.ir.msl
index 94e248c..ee65b2d 100644
--- a/test/tint/vk-gl-cts/rasterization/line_continuity/line-strip/1.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/rasterization/line_continuity/line-strip/1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Swizzle
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureLoad
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/rasterization/line_continuity/line-strip/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/rasterization/line_continuity/line-strip/1.wgsl.expected.ir.msl
index 28251dc..ee65b2d 100644
--- a/test/tint/vk-gl-cts/rasterization/line_continuity/line-strip/1.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/rasterization/line_continuity/line-strip/1.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureLoad
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/arraylength/array-stride-larger-than-element-size/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/arraylength/array-stride-larger-than-element-size/1.spvasm.expected.ir.msl
index db2933f..cd371e5 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/arraylength/array-stride-larger-than-element-size/1.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/arraylength/array-stride-larger-than-element-size/1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Buf1 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Buf1 = struct @align(4) {
   result:i32 @offset(0)
 }
 
@@ -8,26 +8,26 @@
   values:array<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_4:ptr<storage, Buf1, read_write> = var @binding_point(0, 1)
   %x_7:ptr<storage, Buf0, read_write> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %i:ptr<function, u32, read_write> = var
     %5:ptr<storage, i32, read_write> = access %x_4, 0u
     store %5, 1i
     store %i, 0u
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
         %6:u32 = load %i
         %7:bool = lt %6, 512u
-        if %7 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+        if %7 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
@@ -37,27 +37,27 @@
         %11:u32 = load %10
         %12:u32 = load %i
         %13:bool = neq %11, %12
-        if %13 [t: %b7] {  # if_2
-          %b7 = block {  # true
+        if %13 [t: $B7] {  # if_2
+          $B7: {  # true
             %14:ptr<storage, i32, read_write> = access %x_4, 0u
             store %14, 0i
             exit_if  # if_2
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
+      $B4: {  # continuing
         %15:u32 = load %i
         %16:u32 = add %15, 1u
         store %i, %16
-        next_iteration %b3
+        next_iteration  # -> $B3
       }
     }
     ret
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b8 {
-  %b8 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B8: {
     %18:void = call %main_1
     ret
   }
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/arraylength/array-stride-larger-than-element-size/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/arraylength/array-stride-larger-than-element-size/1.wgsl.expected.ir.msl
index a622a8e..80f3ac0 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/arraylength/array-stride-larger-than-element-size/1.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/arraylength/array-stride-larger-than-element-size/1.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: Buf1 = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Buf1 = struct @align(4) {
   result:i32 @offset(0)
 }
 
@@ -8,57 +8,62 @@
   values:array<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_4:ptr<storage, Buf1, read_write> = var @binding_point(0, 1)
   %x_7:ptr<storage, Buf0, read_write> = var @binding_point(0, 0)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     %i:ptr<function, u32, read_write> = var
     %5:ptr<storage, i32, read_write> = access %x_4, 0u
     store %5, 1i
     store %i, 0u
-    loop [b: %b3, c: %b4] {  # loop_1
-      %b3 = block {  # body
-        %x_33:u32 = load %i
-        %7:bool = lt %x_33, 512u
-        if %7 [t: %b5, f: %b6] {  # if_1
-          %b5 = block {  # true
+    loop [b: $B3, c: $B4] {  # loop_1
+      $B3: {  # body
+        %6:u32 = load %i
+        %x_33:u32 = let %6
+        %8:bool = lt %x_33, 512u
+        if %8 [t: $B5, f: $B6] {  # if_1
+          $B5: {  # true
             exit_if  # if_1
           }
-          %b6 = block {  # false
+          $B6: {  # false
             exit_loop  # loop_1
           }
         }
-        %x_36:u32 = load %i
-        %9:u32 = mul %x_36, 2u
-        %10:ptr<storage, u32, read_write> = access %x_7, 0u, %9
-        %x_39:u32 = load %10
-        %x_40:u32 = load %i
-        %13:bool = neq %x_39, %x_40
-        if %13 [t: %b7] {  # if_2
-          %b7 = block {  # true
-            %14:ptr<storage, i32, read_write> = access %x_4, 0u
-            store %14, 0i
+        %9:u32 = load %i
+        %x_36:u32 = let %9
+        %11:u32 = mul %x_36, 2u
+        %12:ptr<storage, u32, read_write> = access %x_7, 0u, %11
+        %13:u32 = load %12
+        %x_39:u32 = let %13
+        %15:u32 = load %i
+        %x_40:u32 = let %15
+        %17:bool = neq %x_39, %x_40
+        if %17 [t: $B7] {  # if_2
+          $B7: {  # true
+            %18:ptr<storage, i32, read_write> = access %x_4, 0u
+            store %18, 0i
             exit_if  # if_2
           }
         }
-        continue %b4
+        continue  # -> $B4
       }
-      %b4 = block {  # continuing
-        %x_45:u32 = load %i
-        %16:u32 = add %x_45, 1u
-        store %i, %16
-        next_iteration %b3
+      $B4: {  # continuing
+        %19:u32 = load %i
+        %x_45:u32 = let %19
+        %21:u32 = add %x_45, 1u
+        store %i, %21
+        next_iteration  # -> $B3
       }
     }
     ret
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b8 {
-  %b8 = block {
-    %18:void = call %main_1
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
+  $B8: {
+    %23:void = call %main_1
     ret
   }
 }
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthan/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthan/0.spvasm.expected.ir.msl
index 319f48c..7cc7724 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthan/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthan/0.spvasm.expected.ir.msl
@@ -1,36 +1,38 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   field0:array<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_2:ptr<private, vec3<u32>, read_write> = var
   %x_5:ptr<storage, S, read_write> = var @binding_point(0, 0)
   %x_6:ptr<storage, S, read_write> = var @binding_point(0, 1)
   %x_7:ptr<storage, S, read_write> = var @binding_point(0, 2)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
-    %x_21:u32 = load_vector_element %x_2, 0u
-    %7:ptr<storage, u32, read_write> = access %x_7, 0u, %x_21
-    %8:ptr<storage, u32, read_write> = access %x_5, 0u, %x_21
-    %9:u32 = load %8
-    %10:i32 = bitcast %9
-    %11:ptr<storage, u32, read_write> = access %x_6, 0u, %x_21
-    %12:u32 = load %11
-    %13:i32 = bitcast %12
-    %14:bool = gt %10, %13
-    %15:u32 = select 0u, 1u, %14
-    store %7, %15
+%main_1 = func():void {
+  $B2: {
+    %6:u32 = load_vector_element %x_2, 0u
+    %x_21:u32 = let %6
+    %8:ptr<storage, u32, read_write> = access %x_7, 0u, %x_21
+    %9:ptr<storage, u32, read_write> = access %x_5, 0u, %x_21
+    %10:u32 = load %9
+    %11:i32 = bitcast %10
+    %12:i32 = let %11
+    %13:ptr<storage, u32, read_write> = access %x_6, 0u, %x_21
+    %14:u32 = load %13
+    %15:i32 = bitcast %14
+    %16:bool = gt %12, %15
+    %17:u32 = select 0u, 1u, %16
+    store %8, %17
     ret
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%x_2_param:vec3<u32> [@global_invocation_id]):void -> %b3 {
-  %b3 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%x_2_param:vec3<u32> [@global_invocation_id]):void {
+  $B3: {
     store %x_2, %x_2_param
-    %18:void = call %main_1
+    %20:void = call %main_1
     ret
   }
 }
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthan/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthan/0.wgsl.expected.ir.msl
index e8e85a7..ceaa51e 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthan/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthan/0.wgsl.expected.ir.msl
@@ -1,36 +1,40 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   field0:array<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_2:ptr<private, vec3<u32>, read_write> = var
   %x_5:ptr<storage, S, read_write> = var @binding_point(0, 0)
   %x_6:ptr<storage, S, read_write> = var @binding_point(0, 1)
   %x_7:ptr<storage, S, read_write> = var @binding_point(0, 2)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
-    %x_21:u32 = load_vector_element %x_2, 0u
-    %7:ptr<storage, u32, read_write> = access %x_5, 0u, %x_21
-    %x_23:u32 = load %7
-    %9:ptr<storage, u32, read_write> = access %x_6, 0u, %x_21
-    %x_25:u32 = load %9
-    %11:ptr<storage, u32, read_write> = access %x_7, 0u, %x_21
-    %12:i32 = bitcast %x_23
-    %13:i32 = bitcast %x_25
-    %14:bool = gt %12, %13
-    %15:u32 = select 0u, 1u, %14
-    store %11, %15
+%main_1 = func():void {
+  $B2: {
+    %6:u32 = load_vector_element %x_2, 0u
+    %x_21:u32 = let %6
+    %8:ptr<storage, u32, read_write> = access %x_5, 0u, %x_21
+    %9:u32 = load %8
+    %x_23:u32 = let %9
+    %11:ptr<storage, u32, read_write> = access %x_6, 0u, %x_21
+    %12:u32 = load %11
+    %x_25:u32 = let %12
+    %14:ptr<storage, u32, read_write> = access %x_7, 0u, %x_21
+    %15:i32 = bitcast %x_23
+    %16:i32 = let %15
+    %17:i32 = bitcast %x_25
+    %18:bool = gt %16, %17
+    %19:u32 = select 0u, 1u, %18
+    store %14, %19
     ret
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%x_2_param:vec3<u32> [@global_invocation_id]):void -> %b3 {
-  %b3 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%x_2_param:vec3<u32> [@global_invocation_id]):void {
+  $B3: {
     store %x_2, %x_2_param
-    %18:void = call %main_1
+    %22:void = call %main_1
     ret
   }
 }
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthanequal/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthanequal/0.spvasm.expected.ir.msl
index 06c15a8..74815d1 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthanequal/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthanequal/0.spvasm.expected.ir.msl
@@ -1,36 +1,38 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   field0:array<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_2:ptr<private, vec3<u32>, read_write> = var
   %x_5:ptr<storage, S, read_write> = var @binding_point(0, 0)
   %x_6:ptr<storage, S, read_write> = var @binding_point(0, 1)
   %x_7:ptr<storage, S, read_write> = var @binding_point(0, 2)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
-    %x_21:u32 = load_vector_element %x_2, 0u
-    %7:ptr<storage, u32, read_write> = access %x_7, 0u, %x_21
-    %8:ptr<storage, u32, read_write> = access %x_5, 0u, %x_21
-    %9:u32 = load %8
-    %10:i32 = bitcast %9
-    %11:ptr<storage, u32, read_write> = access %x_6, 0u, %x_21
-    %12:u32 = load %11
-    %13:i32 = bitcast %12
-    %14:bool = gte %10, %13
-    %15:u32 = select 0u, 1u, %14
-    store %7, %15
+%main_1 = func():void {
+  $B2: {
+    %6:u32 = load_vector_element %x_2, 0u
+    %x_21:u32 = let %6
+    %8:ptr<storage, u32, read_write> = access %x_7, 0u, %x_21
+    %9:ptr<storage, u32, read_write> = access %x_5, 0u, %x_21
+    %10:u32 = load %9
+    %11:i32 = bitcast %10
+    %12:i32 = let %11
+    %13:ptr<storage, u32, read_write> = access %x_6, 0u, %x_21
+    %14:u32 = load %13
+    %15:i32 = bitcast %14
+    %16:bool = gte %12, %15
+    %17:u32 = select 0u, 1u, %16
+    store %8, %17
     ret
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%x_2_param:vec3<u32> [@global_invocation_id]):void -> %b3 {
-  %b3 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%x_2_param:vec3<u32> [@global_invocation_id]):void {
+  $B3: {
     store %x_2, %x_2_param
-    %18:void = call %main_1
+    %20:void = call %main_1
     ret
   }
 }
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthanequal/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthanequal/0.wgsl.expected.ir.msl
index 8d34f15..5b46a17 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthanequal/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthanequal/0.wgsl.expected.ir.msl
@@ -1,36 +1,40 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   field0:array<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_2:ptr<private, vec3<u32>, read_write> = var
   %x_5:ptr<storage, S, read_write> = var @binding_point(0, 0)
   %x_6:ptr<storage, S, read_write> = var @binding_point(0, 1)
   %x_7:ptr<storage, S, read_write> = var @binding_point(0, 2)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
-    %x_21:u32 = load_vector_element %x_2, 0u
-    %7:ptr<storage, u32, read_write> = access %x_5, 0u, %x_21
-    %x_23:u32 = load %7
-    %9:ptr<storage, u32, read_write> = access %x_6, 0u, %x_21
-    %x_25:u32 = load %9
-    %11:ptr<storage, u32, read_write> = access %x_7, 0u, %x_21
-    %12:i32 = bitcast %x_23
-    %13:i32 = bitcast %x_25
-    %14:bool = gte %12, %13
-    %15:u32 = select 0u, 1u, %14
-    store %11, %15
+%main_1 = func():void {
+  $B2: {
+    %6:u32 = load_vector_element %x_2, 0u
+    %x_21:u32 = let %6
+    %8:ptr<storage, u32, read_write> = access %x_5, 0u, %x_21
+    %9:u32 = load %8
+    %x_23:u32 = let %9
+    %11:ptr<storage, u32, read_write> = access %x_6, 0u, %x_21
+    %12:u32 = load %11
+    %x_25:u32 = let %12
+    %14:ptr<storage, u32, read_write> = access %x_7, 0u, %x_21
+    %15:i32 = bitcast %x_23
+    %16:i32 = let %15
+    %17:i32 = bitcast %x_25
+    %18:bool = gte %16, %17
+    %19:u32 = select 0u, 1u, %18
+    store %14, %19
     ret
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%x_2_param:vec3<u32> [@global_invocation_id]):void -> %b3 {
-  %b3 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%x_2_param:vec3<u32> [@global_invocation_id]):void {
+  $B3: {
     store %x_2, %x_2_param
-    %18:void = call %main_1
+    %22:void = call %main_1
     ret
   }
 }
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthan/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthan/0.spvasm.expected.ir.msl
index 0d98c63..83f4293 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthan/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthan/0.spvasm.expected.ir.msl
@@ -1,36 +1,38 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   field0:array<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_2:ptr<private, vec3<u32>, read_write> = var
   %x_5:ptr<storage, S, read_write> = var @binding_point(0, 0)
   %x_6:ptr<storage, S, read_write> = var @binding_point(0, 1)
   %x_7:ptr<storage, S, read_write> = var @binding_point(0, 2)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
-    %x_21:u32 = load_vector_element %x_2, 0u
-    %7:ptr<storage, u32, read_write> = access %x_7, 0u, %x_21
-    %8:ptr<storage, u32, read_write> = access %x_5, 0u, %x_21
-    %9:u32 = load %8
-    %10:i32 = bitcast %9
-    %11:ptr<storage, u32, read_write> = access %x_6, 0u, %x_21
-    %12:u32 = load %11
-    %13:i32 = bitcast %12
-    %14:bool = lt %10, %13
-    %15:u32 = select 0u, 1u, %14
-    store %7, %15
+%main_1 = func():void {
+  $B2: {
+    %6:u32 = load_vector_element %x_2, 0u
+    %x_21:u32 = let %6
+    %8:ptr<storage, u32, read_write> = access %x_7, 0u, %x_21
+    %9:ptr<storage, u32, read_write> = access %x_5, 0u, %x_21
+    %10:u32 = load %9
+    %11:i32 = bitcast %10
+    %12:i32 = let %11
+    %13:ptr<storage, u32, read_write> = access %x_6, 0u, %x_21
+    %14:u32 = load %13
+    %15:i32 = bitcast %14
+    %16:bool = lt %12, %15
+    %17:u32 = select 0u, 1u, %16
+    store %8, %17
     ret
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%x_2_param:vec3<u32> [@global_invocation_id]):void -> %b3 {
-  %b3 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%x_2_param:vec3<u32> [@global_invocation_id]):void {
+  $B3: {
     store %x_2, %x_2_param
-    %18:void = call %main_1
+    %20:void = call %main_1
     ret
   }
 }
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthan/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthan/0.wgsl.expected.ir.msl
index 9efe1c2..ea7ed1d 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthan/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthan/0.wgsl.expected.ir.msl
@@ -1,36 +1,40 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   field0:array<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_2:ptr<private, vec3<u32>, read_write> = var
   %x_5:ptr<storage, S, read_write> = var @binding_point(0, 0)
   %x_6:ptr<storage, S, read_write> = var @binding_point(0, 1)
   %x_7:ptr<storage, S, read_write> = var @binding_point(0, 2)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
-    %x_21:u32 = load_vector_element %x_2, 0u
-    %7:ptr<storage, u32, read_write> = access %x_5, 0u, %x_21
-    %x_23:u32 = load %7
-    %9:ptr<storage, u32, read_write> = access %x_6, 0u, %x_21
-    %x_25:u32 = load %9
-    %11:ptr<storage, u32, read_write> = access %x_7, 0u, %x_21
-    %12:i32 = bitcast %x_23
-    %13:i32 = bitcast %x_25
-    %14:bool = lt %12, %13
-    %15:u32 = select 0u, 1u, %14
-    store %11, %15
+%main_1 = func():void {
+  $B2: {
+    %6:u32 = load_vector_element %x_2, 0u
+    %x_21:u32 = let %6
+    %8:ptr<storage, u32, read_write> = access %x_5, 0u, %x_21
+    %9:u32 = load %8
+    %x_23:u32 = let %9
+    %11:ptr<storage, u32, read_write> = access %x_6, 0u, %x_21
+    %12:u32 = load %11
+    %x_25:u32 = let %12
+    %14:ptr<storage, u32, read_write> = access %x_7, 0u, %x_21
+    %15:i32 = bitcast %x_23
+    %16:i32 = let %15
+    %17:i32 = bitcast %x_25
+    %18:bool = lt %16, %17
+    %19:u32 = select 0u, 1u, %18
+    store %14, %19
     ret
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%x_2_param:vec3<u32> [@global_invocation_id]):void -> %b3 {
-  %b3 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%x_2_param:vec3<u32> [@global_invocation_id]):void {
+  $B3: {
     store %x_2, %x_2_param
-    %18:void = call %main_1
+    %22:void = call %main_1
     ret
   }
 }
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthanequal/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthanequal/0.spvasm.expected.ir.msl
index f31ca88..c0f8fcc 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthanequal/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthanequal/0.spvasm.expected.ir.msl
@@ -1,36 +1,38 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   field0:array<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_2:ptr<private, vec3<u32>, read_write> = var
   %x_5:ptr<storage, S, read_write> = var @binding_point(0, 0)
   %x_6:ptr<storage, S, read_write> = var @binding_point(0, 1)
   %x_7:ptr<storage, S, read_write> = var @binding_point(0, 2)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
-    %x_21:u32 = load_vector_element %x_2, 0u
-    %7:ptr<storage, u32, read_write> = access %x_7, 0u, %x_21
-    %8:ptr<storage, u32, read_write> = access %x_5, 0u, %x_21
-    %9:u32 = load %8
-    %10:i32 = bitcast %9
-    %11:ptr<storage, u32, read_write> = access %x_6, 0u, %x_21
-    %12:u32 = load %11
-    %13:i32 = bitcast %12
-    %14:bool = lte %10, %13
-    %15:u32 = select 0u, 1u, %14
-    store %7, %15
+%main_1 = func():void {
+  $B2: {
+    %6:u32 = load_vector_element %x_2, 0u
+    %x_21:u32 = let %6
+    %8:ptr<storage, u32, read_write> = access %x_7, 0u, %x_21
+    %9:ptr<storage, u32, read_write> = access %x_5, 0u, %x_21
+    %10:u32 = load %9
+    %11:i32 = bitcast %10
+    %12:i32 = let %11
+    %13:ptr<storage, u32, read_write> = access %x_6, 0u, %x_21
+    %14:u32 = load %13
+    %15:i32 = bitcast %14
+    %16:bool = lte %12, %15
+    %17:u32 = select 0u, 1u, %16
+    store %8, %17
     ret
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%x_2_param:vec3<u32> [@global_invocation_id]):void -> %b3 {
-  %b3 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%x_2_param:vec3<u32> [@global_invocation_id]):void {
+  $B3: {
     store %x_2, %x_2_param
-    %18:void = call %main_1
+    %20:void = call %main_1
     ret
   }
 }
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthanequal/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthanequal/0.wgsl.expected.ir.msl
index 73fabb9..7486883 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthanequal/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthanequal/0.wgsl.expected.ir.msl
@@ -1,36 +1,40 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   field0:array<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_2:ptr<private, vec3<u32>, read_write> = var
   %x_5:ptr<storage, S, read_write> = var @binding_point(0, 0)
   %x_6:ptr<storage, S, read_write> = var @binding_point(0, 1)
   %x_7:ptr<storage, S, read_write> = var @binding_point(0, 2)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
-    %x_21:u32 = load_vector_element %x_2, 0u
-    %7:ptr<storage, u32, read_write> = access %x_5, 0u, %x_21
-    %x_23:u32 = load %7
-    %9:ptr<storage, u32, read_write> = access %x_6, 0u, %x_21
-    %x_25:u32 = load %9
-    %11:ptr<storage, u32, read_write> = access %x_7, 0u, %x_21
-    %12:i32 = bitcast %x_23
-    %13:i32 = bitcast %x_25
-    %14:bool = lte %12, %13
-    %15:u32 = select 0u, 1u, %14
-    store %11, %15
+%main_1 = func():void {
+  $B2: {
+    %6:u32 = load_vector_element %x_2, 0u
+    %x_21:u32 = let %6
+    %8:ptr<storage, u32, read_write> = access %x_5, 0u, %x_21
+    %9:u32 = load %8
+    %x_23:u32 = let %9
+    %11:ptr<storage, u32, read_write> = access %x_6, 0u, %x_21
+    %12:u32 = load %11
+    %x_25:u32 = let %12
+    %14:ptr<storage, u32, read_write> = access %x_7, 0u, %x_21
+    %15:i32 = bitcast %x_23
+    %16:i32 = let %15
+    %17:i32 = bitcast %x_25
+    %18:bool = lte %16, %17
+    %19:u32 = select 0u, 1u, %18
+    store %14, %19
     ret
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%x_2_param:vec3<u32> [@global_invocation_id]):void -> %b3 {
-  %b3 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%x_2_param:vec3<u32> [@global_invocation_id]):void {
+  $B3: {
     store %x_2, %x_2_param
-    %18:void = call %main_1
+    %22:void = call %main_1
     ret
   }
 }
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_int_uclamp/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_int_uclamp/0-opt.spvasm.expected.ir.msl
index a5b2278..55ef712 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_int_uclamp/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_int_uclamp/0-opt.spvasm.expected.ir.msl
@@ -1,10 +1,10 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   field0:array<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_3:ptr<private, vec3<u32>, read_write> = var
   %x_6:ptr<storage, S, read_write> = var @binding_point(0, 0)
   %x_7:ptr<storage, S, read_write> = var @binding_point(0, 1)
@@ -12,29 +12,34 @@
   %x_9:ptr<storage, S, read_write> = var @binding_point(0, 3)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
-    %x_26:u32 = load_vector_element %x_3, 0u
-    %8:ptr<storage, i32, read_write> = access %x_9, 0u, %x_26
-    %9:ptr<storage, i32, read_write> = access %x_6, 0u, %x_26
-    %10:i32 = load %9
-    %11:u32 = bitcast %10
-    %12:ptr<storage, i32, read_write> = access %x_7, 0u, %x_26
-    %13:i32 = load %12
-    %14:u32 = bitcast %13
-    %15:ptr<storage, i32, read_write> = access %x_8, 0u, %x_26
-    %16:i32 = load %15
-    %17:u32 = bitcast %16
-    %18:u32 = clamp %11, %14, %17
-    %19:i32 = bitcast %18
-    store %8, %19
+%main_1 = func():void {
+  $B2: {
+    %7:u32 = load_vector_element %x_3, 0u
+    %x_26:u32 = let %7
+    %9:ptr<storage, i32, read_write> = access %x_9, 0u, %x_26
+    %10:ptr<storage, i32, read_write> = access %x_6, 0u, %x_26
+    %11:i32 = load %10
+    %12:u32 = bitcast %11
+    %13:u32 = let %12
+    %14:ptr<storage, i32, read_write> = access %x_7, 0u, %x_26
+    %15:i32 = load %14
+    %16:u32 = bitcast %15
+    %17:u32 = let %16
+    %18:ptr<storage, i32, read_write> = access %x_8, 0u, %x_26
+    %19:i32 = load %18
+    %20:u32 = bitcast %19
+    %21:u32 = let %20
+    %22:u32 = max %13, %17
+    %23:u32 = min %22, %21
+    %24:i32 = bitcast %23
+    store %9, %24
     ret
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%x_3_param:vec3<u32> [@global_invocation_id]):void -> %b3 {
-  %b3 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%x_3_param:vec3<u32> [@global_invocation_id]):void {
+  $B3: {
     store %x_3, %x_3_param
-    %22:void = call %main_1
+    %27:void = call %main_1
     ret
   }
 }
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_int_uclamp/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_int_uclamp/0-opt.wgsl.expected.ir.msl
index dc355ac..ada8f10 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_int_uclamp/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_int_uclamp/0-opt.wgsl.expected.ir.msl
@@ -1,10 +1,10 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   field0:array<i32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_3:ptr<private, vec3<u32>, read_write> = var
   %x_6:ptr<storage, S, read_write> = var @binding_point(0, 0)
   %x_7:ptr<storage, S, read_write> = var @binding_point(0, 1)
@@ -12,29 +12,37 @@
   %x_9:ptr<storage, S, read_write> = var @binding_point(0, 3)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
-    %x_26:u32 = load_vector_element %x_3, 0u
-    %8:ptr<storage, i32, read_write> = access %x_6, 0u, %x_26
-    %x_28:i32 = load %8
-    %10:ptr<storage, i32, read_write> = access %x_7, 0u, %x_26
-    %x_30:i32 = load %10
-    %12:ptr<storage, i32, read_write> = access %x_8, 0u, %x_26
-    %x_32:i32 = load %12
-    %14:ptr<storage, i32, read_write> = access %x_9, 0u, %x_26
-    %15:u32 = bitcast %x_28
-    %16:u32 = bitcast %x_30
-    %17:u32 = bitcast %x_32
-    %18:u32 = clamp %15, %16, %17
-    %19:i32 = bitcast %18
-    store %14, %19
+%main_1 = func():void {
+  $B2: {
+    %7:u32 = load_vector_element %x_3, 0u
+    %x_26:u32 = let %7
+    %9:ptr<storage, i32, read_write> = access %x_6, 0u, %x_26
+    %10:i32 = load %9
+    %x_28:i32 = let %10
+    %12:ptr<storage, i32, read_write> = access %x_7, 0u, %x_26
+    %13:i32 = load %12
+    %x_30:i32 = let %13
+    %15:ptr<storage, i32, read_write> = access %x_8, 0u, %x_26
+    %16:i32 = load %15
+    %x_32:i32 = let %16
+    %18:ptr<storage, i32, read_write> = access %x_9, 0u, %x_26
+    %19:u32 = bitcast %x_28
+    %20:u32 = let %19
+    %21:u32 = bitcast %x_30
+    %22:u32 = let %21
+    %23:u32 = bitcast %x_32
+    %24:u32 = let %23
+    %25:u32 = max %20, %22
+    %26:u32 = min %25, %24
+    %27:i32 = bitcast %26
+    store %18, %27
     ret
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%x_3_param:vec3<u32> [@global_invocation_id]):void -> %b3 {
-  %b3 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%x_3_param:vec3<u32> [@global_invocation_id]):void {
+  $B3: {
     store %x_3, %x_3_param
-    %22:void = call %main_1
+    %30:void = call %main_1
     ret
   }
 }
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sabs/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sabs/0-opt.spvasm.expected.ir.msl
index eddfcd3..14bad00 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sabs/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sabs/0-opt.spvasm.expected.ir.msl
@@ -1,32 +1,33 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   field0:array<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_3:ptr<private, vec3<u32>, read_write> = var
   %x_6:ptr<storage, S, read_write> = var @binding_point(0, 0)
   %x_7:ptr<storage, S, read_write> = var @binding_point(0, 1)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
-    %x_21:u32 = load_vector_element %x_3, 0u
-    %6:ptr<storage, u32, read_write> = access %x_7, 0u, %x_21
-    %7:ptr<storage, u32, read_write> = access %x_6, 0u, %x_21
-    %8:u32 = load %7
-    %9:i32 = bitcast %8
-    %10:i32 = abs %9
-    %11:u32 = bitcast %10
-    store %6, %11
+%main_1 = func():void {
+  $B2: {
+    %5:u32 = load_vector_element %x_3, 0u
+    %x_21:u32 = let %5
+    %7:ptr<storage, u32, read_write> = access %x_7, 0u, %x_21
+    %8:ptr<storage, u32, read_write> = access %x_6, 0u, %x_21
+    %9:u32 = load %8
+    %10:i32 = bitcast %9
+    %11:i32 = abs %10
+    %12:u32 = bitcast %11
+    store %7, %12
     ret
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%x_3_param:vec3<u32> [@global_invocation_id]):void -> %b3 {
-  %b3 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%x_3_param:vec3<u32> [@global_invocation_id]):void {
+  $B3: {
     store %x_3, %x_3_param
-    %14:void = call %main_1
+    %15:void = call %main_1
     ret
   }
 }
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sabs/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sabs/0-opt.wgsl.expected.ir.msl
index 01f0198..ae12524 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sabs/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sabs/0-opt.wgsl.expected.ir.msl
@@ -1,32 +1,34 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   field0:array<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_3:ptr<private, vec3<u32>, read_write> = var
   %x_6:ptr<storage, S, read_write> = var @binding_point(0, 0)
   %x_7:ptr<storage, S, read_write> = var @binding_point(0, 1)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
-    %x_21:u32 = load_vector_element %x_3, 0u
-    %6:ptr<storage, u32, read_write> = access %x_6, 0u, %x_21
-    %x_23:u32 = load %6
-    %8:ptr<storage, u32, read_write> = access %x_7, 0u, %x_21
-    %9:i32 = bitcast %x_23
-    %10:i32 = abs %9
-    %11:u32 = bitcast %10
-    store %8, %11
+%main_1 = func():void {
+  $B2: {
+    %5:u32 = load_vector_element %x_3, 0u
+    %x_21:u32 = let %5
+    %7:ptr<storage, u32, read_write> = access %x_6, 0u, %x_21
+    %8:u32 = load %7
+    %x_23:u32 = let %8
+    %10:ptr<storage, u32, read_write> = access %x_7, 0u, %x_21
+    %11:i32 = bitcast %x_23
+    %12:i32 = abs %11
+    %13:u32 = bitcast %12
+    store %10, %13
     ret
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%x_3_param:vec3<u32> [@global_invocation_id]):void -> %b3 {
-  %b3 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%x_3_param:vec3<u32> [@global_invocation_id]):void {
+  $B3: {
     store %x_3, %x_3_param
-    %14:void = call %main_1
+    %16:void = call %main_1
     ret
   }
 }
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sclamp/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sclamp/0-opt.spvasm.expected.ir.msl
index 5861073..ec196d3 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sclamp/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sclamp/0-opt.spvasm.expected.ir.msl
@@ -1,10 +1,10 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   field0:array<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_3:ptr<private, vec3<u32>, read_write> = var
   %x_6:ptr<storage, S, read_write> = var @binding_point(0, 0)
   %x_7:ptr<storage, S, read_write> = var @binding_point(0, 1)
@@ -12,29 +12,34 @@
   %x_9:ptr<storage, S, read_write> = var @binding_point(0, 3)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
-    %x_23:u32 = load_vector_element %x_3, 0u
-    %8:ptr<storage, u32, read_write> = access %x_9, 0u, %x_23
-    %9:ptr<storage, u32, read_write> = access %x_6, 0u, %x_23
-    %10:u32 = load %9
-    %11:i32 = bitcast %10
-    %12:ptr<storage, u32, read_write> = access %x_7, 0u, %x_23
-    %13:u32 = load %12
-    %14:i32 = bitcast %13
-    %15:ptr<storage, u32, read_write> = access %x_8, 0u, %x_23
-    %16:u32 = load %15
-    %17:i32 = bitcast %16
-    %18:i32 = clamp %11, %14, %17
-    %19:u32 = bitcast %18
-    store %8, %19
+%main_1 = func():void {
+  $B2: {
+    %7:u32 = load_vector_element %x_3, 0u
+    %x_23:u32 = let %7
+    %9:ptr<storage, u32, read_write> = access %x_9, 0u, %x_23
+    %10:ptr<storage, u32, read_write> = access %x_6, 0u, %x_23
+    %11:u32 = load %10
+    %12:i32 = bitcast %11
+    %13:i32 = let %12
+    %14:ptr<storage, u32, read_write> = access %x_7, 0u, %x_23
+    %15:u32 = load %14
+    %16:i32 = bitcast %15
+    %17:i32 = let %16
+    %18:ptr<storage, u32, read_write> = access %x_8, 0u, %x_23
+    %19:u32 = load %18
+    %20:i32 = bitcast %19
+    %21:i32 = let %20
+    %22:i32 = max %13, %17
+    %23:i32 = min %22, %21
+    %24:u32 = bitcast %23
+    store %9, %24
     ret
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%x_3_param:vec3<u32> [@global_invocation_id]):void -> %b3 {
-  %b3 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%x_3_param:vec3<u32> [@global_invocation_id]):void {
+  $B3: {
     store %x_3, %x_3_param
-    %22:void = call %main_1
+    %27:void = call %main_1
     ret
   }
 }
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sclamp/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sclamp/0-opt.wgsl.expected.ir.msl
index 4473031..d11bca9 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sclamp/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sclamp/0-opt.wgsl.expected.ir.msl
@@ -1,10 +1,10 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   field0:array<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_3:ptr<private, vec3<u32>, read_write> = var
   %x_6:ptr<storage, S, read_write> = var @binding_point(0, 0)
   %x_7:ptr<storage, S, read_write> = var @binding_point(0, 1)
@@ -12,29 +12,37 @@
   %x_9:ptr<storage, S, read_write> = var @binding_point(0, 3)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
-    %x_23:u32 = load_vector_element %x_3, 0u
-    %8:ptr<storage, u32, read_write> = access %x_6, 0u, %x_23
-    %x_25:u32 = load %8
-    %10:ptr<storage, u32, read_write> = access %x_7, 0u, %x_23
-    %x_27:u32 = load %10
-    %12:ptr<storage, u32, read_write> = access %x_8, 0u, %x_23
-    %x_29:u32 = load %12
-    %14:ptr<storage, u32, read_write> = access %x_9, 0u, %x_23
-    %15:i32 = bitcast %x_25
-    %16:i32 = bitcast %x_27
-    %17:i32 = bitcast %x_29
-    %18:i32 = clamp %15, %16, %17
-    %19:u32 = bitcast %18
-    store %14, %19
+%main_1 = func():void {
+  $B2: {
+    %7:u32 = load_vector_element %x_3, 0u
+    %x_23:u32 = let %7
+    %9:ptr<storage, u32, read_write> = access %x_6, 0u, %x_23
+    %10:u32 = load %9
+    %x_25:u32 = let %10
+    %12:ptr<storage, u32, read_write> = access %x_7, 0u, %x_23
+    %13:u32 = load %12
+    %x_27:u32 = let %13
+    %15:ptr<storage, u32, read_write> = access %x_8, 0u, %x_23
+    %16:u32 = load %15
+    %x_29:u32 = let %16
+    %18:ptr<storage, u32, read_write> = access %x_9, 0u, %x_23
+    %19:i32 = bitcast %x_25
+    %20:i32 = let %19
+    %21:i32 = bitcast %x_27
+    %22:i32 = let %21
+    %23:i32 = bitcast %x_29
+    %24:i32 = let %23
+    %25:i32 = max %20, %22
+    %26:i32 = min %25, %24
+    %27:u32 = bitcast %26
+    store %18, %27
     ret
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%x_3_param:vec3<u32> [@global_invocation_id]):void -> %b3 {
-  %b3 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%x_3_param:vec3<u32> [@global_invocation_id]):void {
+  $B3: {
     store %x_3, %x_3_param
-    %22:void = call %main_1
+    %30:void = call %main_1
     ret
   }
 }
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smax/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smax/0-opt.spvasm.expected.ir.msl
index ff8a1af..c9ca4ee 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smax/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smax/0-opt.spvasm.expected.ir.msl
@@ -1,36 +1,38 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   field0:array<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_3:ptr<private, vec3<u32>, read_write> = var
   %x_6:ptr<storage, S, read_write> = var @binding_point(0, 0)
   %x_7:ptr<storage, S, read_write> = var @binding_point(0, 1)
   %x_8:ptr<storage, S, read_write> = var @binding_point(0, 2)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
-    %x_21:u32 = load_vector_element %x_3, 0u
-    %7:ptr<storage, u32, read_write> = access %x_8, 0u, %x_21
-    %8:ptr<storage, u32, read_write> = access %x_6, 0u, %x_21
-    %9:u32 = load %8
-    %10:i32 = bitcast %9
-    %11:ptr<storage, u32, read_write> = access %x_7, 0u, %x_21
-    %12:u32 = load %11
-    %13:i32 = bitcast %12
-    %14:i32 = max %10, %13
-    %15:u32 = bitcast %14
-    store %7, %15
+%main_1 = func():void {
+  $B2: {
+    %6:u32 = load_vector_element %x_3, 0u
+    %x_21:u32 = let %6
+    %8:ptr<storage, u32, read_write> = access %x_8, 0u, %x_21
+    %9:ptr<storage, u32, read_write> = access %x_6, 0u, %x_21
+    %10:u32 = load %9
+    %11:i32 = bitcast %10
+    %12:i32 = let %11
+    %13:ptr<storage, u32, read_write> = access %x_7, 0u, %x_21
+    %14:u32 = load %13
+    %15:i32 = bitcast %14
+    %16:i32 = max %12, %15
+    %17:u32 = bitcast %16
+    store %8, %17
     ret
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%x_3_param:vec3<u32> [@global_invocation_id]):void -> %b3 {
-  %b3 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%x_3_param:vec3<u32> [@global_invocation_id]):void {
+  $B3: {
     store %x_3, %x_3_param
-    %18:void = call %main_1
+    %20:void = call %main_1
     ret
   }
 }
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smax/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smax/0-opt.wgsl.expected.ir.msl
index 2a42e3e..cd3896b 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smax/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smax/0-opt.wgsl.expected.ir.msl
@@ -1,36 +1,40 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   field0:array<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_3:ptr<private, vec3<u32>, read_write> = var
   %x_6:ptr<storage, S, read_write> = var @binding_point(0, 0)
   %x_7:ptr<storage, S, read_write> = var @binding_point(0, 1)
   %x_8:ptr<storage, S, read_write> = var @binding_point(0, 2)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
-    %x_21:u32 = load_vector_element %x_3, 0u
-    %7:ptr<storage, u32, read_write> = access %x_6, 0u, %x_21
-    %x_23:u32 = load %7
-    %9:ptr<storage, u32, read_write> = access %x_7, 0u, %x_21
-    %x_25:u32 = load %9
-    %11:ptr<storage, u32, read_write> = access %x_8, 0u, %x_21
-    %12:i32 = bitcast %x_23
-    %13:i32 = bitcast %x_25
-    %14:i32 = max %12, %13
-    %15:u32 = bitcast %14
-    store %11, %15
+%main_1 = func():void {
+  $B2: {
+    %6:u32 = load_vector_element %x_3, 0u
+    %x_21:u32 = let %6
+    %8:ptr<storage, u32, read_write> = access %x_6, 0u, %x_21
+    %9:u32 = load %8
+    %x_23:u32 = let %9
+    %11:ptr<storage, u32, read_write> = access %x_7, 0u, %x_21
+    %12:u32 = load %11
+    %x_25:u32 = let %12
+    %14:ptr<storage, u32, read_write> = access %x_8, 0u, %x_21
+    %15:i32 = bitcast %x_23
+    %16:i32 = let %15
+    %17:i32 = bitcast %x_25
+    %18:i32 = max %16, %17
+    %19:u32 = bitcast %18
+    store %14, %19
     ret
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%x_3_param:vec3<u32> [@global_invocation_id]):void -> %b3 {
-  %b3 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%x_3_param:vec3<u32> [@global_invocation_id]):void {
+  $B3: {
     store %x_3, %x_3_param
-    %18:void = call %main_1
+    %22:void = call %main_1
     ret
   }
 }
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smin/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smin/0-opt.spvasm.expected.ir.msl
index dffa6dc..4c56349 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smin/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smin/0-opt.spvasm.expected.ir.msl
@@ -1,36 +1,38 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   field0:array<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_3:ptr<private, vec3<u32>, read_write> = var
   %x_6:ptr<storage, S, read_write> = var @binding_point(0, 0)
   %x_7:ptr<storage, S, read_write> = var @binding_point(0, 1)
   %x_8:ptr<storage, S, read_write> = var @binding_point(0, 2)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
-    %x_21:u32 = load_vector_element %x_3, 0u
-    %7:ptr<storage, u32, read_write> = access %x_8, 0u, %x_21
-    %8:ptr<storage, u32, read_write> = access %x_6, 0u, %x_21
-    %9:u32 = load %8
-    %10:i32 = bitcast %9
-    %11:ptr<storage, u32, read_write> = access %x_7, 0u, %x_21
-    %12:u32 = load %11
-    %13:i32 = bitcast %12
-    %14:i32 = min %10, %13
-    %15:u32 = bitcast %14
-    store %7, %15
+%main_1 = func():void {
+  $B2: {
+    %6:u32 = load_vector_element %x_3, 0u
+    %x_21:u32 = let %6
+    %8:ptr<storage, u32, read_write> = access %x_8, 0u, %x_21
+    %9:ptr<storage, u32, read_write> = access %x_6, 0u, %x_21
+    %10:u32 = load %9
+    %11:i32 = bitcast %10
+    %12:i32 = let %11
+    %13:ptr<storage, u32, read_write> = access %x_7, 0u, %x_21
+    %14:u32 = load %13
+    %15:i32 = bitcast %14
+    %16:i32 = min %12, %15
+    %17:u32 = bitcast %16
+    store %8, %17
     ret
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%x_3_param:vec3<u32> [@global_invocation_id]):void -> %b3 {
-  %b3 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%x_3_param:vec3<u32> [@global_invocation_id]):void {
+  $B3: {
     store %x_3, %x_3_param
-    %18:void = call %main_1
+    %20:void = call %main_1
     ret
   }
 }
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smin/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smin/0-opt.wgsl.expected.ir.msl
index e112b01..749865a 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smin/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smin/0-opt.wgsl.expected.ir.msl
@@ -1,36 +1,40 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   field0:array<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_3:ptr<private, vec3<u32>, read_write> = var
   %x_6:ptr<storage, S, read_write> = var @binding_point(0, 0)
   %x_7:ptr<storage, S, read_write> = var @binding_point(0, 1)
   %x_8:ptr<storage, S, read_write> = var @binding_point(0, 2)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
-    %x_21:u32 = load_vector_element %x_3, 0u
-    %7:ptr<storage, u32, read_write> = access %x_6, 0u, %x_21
-    %x_23:u32 = load %7
-    %9:ptr<storage, u32, read_write> = access %x_7, 0u, %x_21
-    %x_25:u32 = load %9
-    %11:ptr<storage, u32, read_write> = access %x_8, 0u, %x_21
-    %12:i32 = bitcast %x_23
-    %13:i32 = bitcast %x_25
-    %14:i32 = min %12, %13
-    %15:u32 = bitcast %14
-    store %11, %15
+%main_1 = func():void {
+  $B2: {
+    %6:u32 = load_vector_element %x_3, 0u
+    %x_21:u32 = let %6
+    %8:ptr<storage, u32, read_write> = access %x_6, 0u, %x_21
+    %9:u32 = load %8
+    %x_23:u32 = let %9
+    %11:ptr<storage, u32, read_write> = access %x_7, 0u, %x_21
+    %12:u32 = load %11
+    %x_25:u32 = let %12
+    %14:ptr<storage, u32, read_write> = access %x_8, 0u, %x_21
+    %15:i32 = bitcast %x_23
+    %16:i32 = let %15
+    %17:i32 = bitcast %x_25
+    %18:i32 = min %16, %17
+    %19:u32 = bitcast %18
+    store %14, %19
     ret
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%x_3_param:vec3<u32> [@global_invocation_id]):void -> %b3 {
-  %b3 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%x_3_param:vec3<u32> [@global_invocation_id]):void {
+  $B3: {
     store %x_3, %x_3_param
-    %18:void = call %main_1
+    %22:void = call %main_1
     ret
   }
 }
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_sdiv/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_sdiv/0-opt.spvasm.expected.ir.msl
index ecfe090..1acef4a 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_sdiv/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_sdiv/0-opt.spvasm.expected.ir.msl
@@ -1,39 +1,53 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   field0:array<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_2:ptr<private, vec3<u32>, read_write> = var
   %x_5:ptr<storage, S, read_write> = var @binding_point(0, 0)
   %x_6:ptr<storage, S, read_write> = var @binding_point(0, 1)
   %x_7:ptr<storage, S, read_write> = var @binding_point(0, 2)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
-    %x_20:u32 = load_vector_element %x_2, 0u
-    %7:ptr<storage, u32, read_write> = access %x_7, 0u, %x_20
-    %8:ptr<storage, u32, read_write> = access %x_5, 0u, %x_20
-    %9:u32 = load %8
-    %10:i32 = bitcast %9
-    %11:ptr<storage, u32, read_write> = access %x_6, 0u, %x_20
-    %12:u32 = load %11
-    %13:i32 = bitcast %12
-    %14:i32 = div %10, %13
-    %15:u32 = bitcast %14
-    store %7, %15
+%main_1 = func():void {
+  $B2: {
+    %6:u32 = load_vector_element %x_2, 0u
+    %x_20:u32 = let %6
+    %8:ptr<storage, u32, read_write> = access %x_7, 0u, %x_20
+    %9:ptr<storage, u32, read_write> = access %x_5, 0u, %x_20
+    %10:u32 = load %9
+    %11:i32 = bitcast %10
+    %12:i32 = let %11
+    %13:ptr<storage, u32, read_write> = access %x_6, 0u, %x_20
+    %14:u32 = load %13
+    %15:i32 = bitcast %14
+    %16:i32 = call %tint_div_i32, %12, %15
+    %18:u32 = bitcast %16
+    store %8, %18
     ret
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%x_2_param:vec3<u32> [@global_invocation_id]):void -> %b3 {
-  %b3 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%x_2_param:vec3<u32> [@global_invocation_id]):void {
+  $B3: {
     store %x_2, %x_2_param
-    %18:void = call %main_1
+    %21:void = call %main_1
     ret
   }
 }
+%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B4: {
+    %24:bool = eq %rhs, 0i
+    %25:bool = eq %lhs, -2147483648i
+    %26:bool = eq %rhs, -1i
+    %27:bool = and %25, %26
+    %28:bool = or %24, %27
+    %29:i32 = select %rhs, 1i, %28
+    %30:i32 = div %lhs, %29
+    ret %30
+  }
+}
 
 unhandled variable address space
 ********************************************************************
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_sdiv/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_sdiv/0-opt.wgsl.expected.ir.msl
index 5d54502..73c5474 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_sdiv/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_sdiv/0-opt.wgsl.expected.ir.msl
@@ -1,39 +1,55 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   field0:array<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_2:ptr<private, vec3<u32>, read_write> = var
   %x_5:ptr<storage, S, read_write> = var @binding_point(0, 0)
   %x_6:ptr<storage, S, read_write> = var @binding_point(0, 1)
   %x_7:ptr<storage, S, read_write> = var @binding_point(0, 2)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
-    %x_20:u32 = load_vector_element %x_2, 0u
-    %7:ptr<storage, u32, read_write> = access %x_5, 0u, %x_20
-    %x_22:u32 = load %7
-    %9:ptr<storage, u32, read_write> = access %x_6, 0u, %x_20
-    %x_24:u32 = load %9
-    %11:ptr<storage, u32, read_write> = access %x_7, 0u, %x_20
-    %12:i32 = bitcast %x_22
-    %13:i32 = bitcast %x_24
-    %14:i32 = div %12, %13
-    %15:u32 = bitcast %14
-    store %11, %15
+%main_1 = func():void {
+  $B2: {
+    %6:u32 = load_vector_element %x_2, 0u
+    %x_20:u32 = let %6
+    %8:ptr<storage, u32, read_write> = access %x_5, 0u, %x_20
+    %9:u32 = load %8
+    %x_22:u32 = let %9
+    %11:ptr<storage, u32, read_write> = access %x_6, 0u, %x_20
+    %12:u32 = load %11
+    %x_24:u32 = let %12
+    %14:ptr<storage, u32, read_write> = access %x_7, 0u, %x_20
+    %15:i32 = bitcast %x_22
+    %16:i32 = let %15
+    %17:i32 = bitcast %x_24
+    %18:i32 = call %tint_div_i32, %16, %17
+    %20:u32 = bitcast %18
+    store %14, %20
     ret
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%x_2_param:vec3<u32> [@global_invocation_id]):void -> %b3 {
-  %b3 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%x_2_param:vec3<u32> [@global_invocation_id]):void {
+  $B3: {
     store %x_2, %x_2_param
-    %18:void = call %main_1
+    %23:void = call %main_1
     ret
   }
 }
+%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
+  $B4: {
+    %26:bool = eq %rhs, 0i
+    %27:bool = eq %lhs, -2147483648i
+    %28:bool = eq %rhs, -1i
+    %29:bool = and %27, %28
+    %30:bool = or %26, %29
+    %31:i32 = select %rhs, 1i, %30
+    %32:i32 = div %lhs, %31
+    ret %32
+  }
+}
 
 unhandled variable address space
 ********************************************************************
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_snegate/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_snegate/0-opt.spvasm.expected.ir.msl
index ced5743..399b26a 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_snegate/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_snegate/0-opt.spvasm.expected.ir.msl
@@ -1,32 +1,33 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   field0:array<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_2:ptr<private, vec3<u32>, read_write> = var
   %x_5:ptr<storage, S, read_write> = var @binding_point(0, 0)
   %x_6:ptr<storage, S, read_write> = var @binding_point(0, 1)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
-    %x_20:u32 = load_vector_element %x_2, 0u
-    %6:ptr<storage, u32, read_write> = access %x_6, 0u, %x_20
-    %7:ptr<storage, u32, read_write> = access %x_5, 0u, %x_20
-    %8:u32 = load %7
-    %9:i32 = bitcast %8
-    %10:i32 = negation %9
-    %11:u32 = bitcast %10
-    store %6, %11
+%main_1 = func():void {
+  $B2: {
+    %5:u32 = load_vector_element %x_2, 0u
+    %x_20:u32 = let %5
+    %7:ptr<storage, u32, read_write> = access %x_6, 0u, %x_20
+    %8:ptr<storage, u32, read_write> = access %x_5, 0u, %x_20
+    %9:u32 = load %8
+    %10:i32 = bitcast %9
+    %11:i32 = negation %10
+    %12:u32 = bitcast %11
+    store %7, %12
     ret
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%x_2_param:vec3<u32> [@global_invocation_id]):void -> %b3 {
-  %b3 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%x_2_param:vec3<u32> [@global_invocation_id]):void {
+  $B3: {
     store %x_2, %x_2_param
-    %14:void = call %main_1
+    %15:void = call %main_1
     ret
   }
 }
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_snegate/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_snegate/0-opt.wgsl.expected.ir.msl
index bfe01bf..aa72ebe 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_snegate/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_snegate/0-opt.wgsl.expected.ir.msl
@@ -1,32 +1,34 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   field0:array<u32> @offset(0)
 }
 
-%b1 = block {  # root
+$B1: {  # root
   %x_2:ptr<private, vec3<u32>, read_write> = var
   %x_5:ptr<storage, S, read_write> = var @binding_point(0, 0)
   %x_6:ptr<storage, S, read_write> = var @binding_point(0, 1)
 }
 
-%main_1 = func():void -> %b2 {
-  %b2 = block {
-    %x_20:u32 = load_vector_element %x_2, 0u
-    %6:ptr<storage, u32, read_write> = access %x_5, 0u, %x_20
-    %x_22:u32 = load %6
-    %8:ptr<storage, u32, read_write> = access %x_6, 0u, %x_20
-    %9:i32 = bitcast %x_22
-    %10:i32 = negation %9
-    %11:u32 = bitcast %10
-    store %8, %11
+%main_1 = func():void {
+  $B2: {
+    %5:u32 = load_vector_element %x_2, 0u
+    %x_20:u32 = let %5
+    %7:ptr<storage, u32, read_write> = access %x_5, 0u, %x_20
+    %8:u32 = load %7
+    %x_22:u32 = let %8
+    %10:ptr<storage, u32, read_write> = access %x_6, 0u, %x_20
+    %11:i32 = bitcast %x_22
+    %12:i32 = negation %11
+    %13:u32 = bitcast %12
+    store %10, %13
     ret
   }
 }
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%x_2_param:vec3<u32> [@global_invocation_id]):void -> %b3 {
-  %b3 = block {
+%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%x_2_param:vec3<u32> [@global_invocation_id]):void {
+  $B3: {
     store %x_2, %x_2_param
-    %14:void = call %main_1
+    %16:void = call %main_1
     ret
   }
 }
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
index 2e88a5f..5fa0561 100644
--- 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
@@ -1,6 +1,61 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::LoadVectorElement
+../../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.   *
 *                                                                  *
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
index 2e88a5f..df8c87a 100644
--- 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
@@ -1,6 +1,65 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::LoadVectorElement
+../../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.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/0-opt.spvasm.expected.ir.msl
index 94e248c..5f6a95e 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/0-opt.spvasm.expected.ir.msl
@@ -1,9 +1,29 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Swizzle
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct main_out {
+  float4 gl_Position [[position]];
+};
+
+thread float4 position_1 = 0.0f;
+thread float4 gl_Position = 0.0f;
+void main_1() {
+  float2 const x_23 = position_1.xy;
+  gl_Position = float4(x_23[0u], x_23[1u], 0.5f, 1.0f);
+}
+vertex main_out tint_symbol(float4 position_1_param) {
+  position_1 = position_1_param;
+  main_1();
+  return {.gl_Position=gl_Position};
+}
+program_source:7:15: error: program scope variable must reside in constant address space
+thread float4 position_1 = 0.0f;
+              ^
+program_source:8:15: error: program scope variable must reside in constant address space
+thread float4 gl_Position = 0.0f;
+              ^
+program_source:13:29: error: invalid type 'float4' (vector of 4 'float' values) for input declaration in a vertex function
+vertex main_out tint_symbol(float4 position_1_param) {
+                            ^~~~~~~~~~~~~~~~~~~~~~~
+
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/0-opt.wgsl.expected.ir.msl
index 28251dc..6d8c635 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/0-opt.wgsl.expected.ir.msl
@@ -1,9 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct main_out {
+  float4 gl_Position [[position]];
+};
+
+thread float4 pos = 0.0f;
+thread float4 gl_Position = 0.0f;
+void main_1() {
+  float4 const x_22 = pos;
+  float2 const x_23 = float2(x_22[0u], x_22[1u]);
+  gl_Position = float4(x_23[0u], x_23[1u], 0.5f, 1.0f);
+}
+vertex main_out tint_symbol(float4 position_param) {
+  pos = position_param;
+  main_1();
+  return {.gl_Position=gl_Position};
+}
+program_source:7:15: error: program scope variable must reside in constant address space
+thread float4 pos = 0.0f;
+              ^
+program_source:8:15: error: program scope variable must reside in constant address space
+thread float4 gl_Position = 0.0f;
+              ^
+program_source:14:29: error: invalid type 'float4' (vector of 4 'float' values) for input declaration in a vertex function
+vertex main_out tint_symbol(float4 position_param) {
+                            ^~~~~~~~~~~~~~~~~~~~~
+
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/1.spvasm.expected.ir.msl
index efdd3b1..058cc5a 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/1.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/1.spvasm.expected.ir.msl
@@ -1,6 +1,33 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(16) {
+  color_out_1:vec4<f32> @offset(0), @location(0)
+  gl_FragDepth_1:f32 @offset(16), @builtin(frag_depth)
+}
+
+$B1: {  # root
+  %color_out:ptr<private, vec4<f32>, read_write> = var
+  %gl_FragDepth:ptr<private, f32, read_write> = var
+}
+
+%main_1 = func():void {
+  $B2: {
+    store %color_out, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+    store %gl_FragDepth, 0.30000001192092895508f
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B3: {
+    %5:void = call %main_1
+    %6:vec4<f32> = load %color_out
+    %7:f32 = load %gl_FragDepth
+    %8:main_out = construct %6, %7
+    ret %8
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/1.wgsl.expected.ir.msl
index efdd3b1..058cc5a 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/1.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/1.wgsl.expected.ir.msl
@@ -1,6 +1,33 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(16) {
+  color_out_1:vec4<f32> @offset(0), @location(0)
+  gl_FragDepth_1:f32 @offset(16), @builtin(frag_depth)
+}
+
+$B1: {  # root
+  %color_out:ptr<private, vec4<f32>, read_write> = var
+  %gl_FragDepth:ptr<private, f32, read_write> = var
+}
+
+%main_1 = func():void {
+  $B2: {
+    store %color_out, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+    store %gl_FragDepth, 0.30000001192092895508f
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B3: {
+    %5:void = call %main_1
+    %6:vec4<f32> = load %color_out
+    %7:f32 = load %gl_FragDepth
+    %8:main_out = construct %6, %7
+    ret %8
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/0-opt.spvasm.expected.ir.msl
index 94e248c..f89949f 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/0-opt.spvasm.expected.ir.msl
@@ -1,9 +1,29 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Swizzle
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct main_out {
+  float4 gl_Position [[position]];
+};
+
+thread float4 position_1 = 0.0f;
+thread float4 gl_Position = 0.0f;
+void main_1() {
+  float2 const x_23 = position_1.xy;
+  gl_Position = float4(x_23[0u], x_23[1u], 0.60000002384185791016f, 1.0f);
+}
+vertex main_out tint_symbol(float4 position_1_param) {
+  position_1 = position_1_param;
+  main_1();
+  return {.gl_Position=gl_Position};
+}
+program_source:7:15: error: program scope variable must reside in constant address space
+thread float4 position_1 = 0.0f;
+              ^
+program_source:8:15: error: program scope variable must reside in constant address space
+thread float4 gl_Position = 0.0f;
+              ^
+program_source:13:29: error: invalid type 'float4' (vector of 4 'float' values) for input declaration in a vertex function
+vertex main_out tint_symbol(float4 position_1_param) {
+                            ^~~~~~~~~~~~~~~~~~~~~~~
+
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/0-opt.wgsl.expected.ir.msl
index 28251dc..3ef9006 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/0-opt.wgsl.expected.ir.msl
@@ -1,9 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct main_out {
+  float4 gl_Position [[position]];
+};
+
+thread float4 pos = 0.0f;
+thread float4 gl_Position = 0.0f;
+void main_1() {
+  float4 const x_22 = pos;
+  float2 const x_23 = float2(x_22[0u], x_22[1u]);
+  gl_Position = float4(x_23[0u], x_23[1u], 0.60000002384185791016f, 1.0f);
+}
+vertex main_out tint_symbol(float4 position_param) {
+  pos = position_param;
+  main_1();
+  return {.gl_Position=gl_Position};
+}
+program_source:7:15: error: program scope variable must reside in constant address space
+thread float4 pos = 0.0f;
+              ^
+program_source:8:15: error: program scope variable must reside in constant address space
+thread float4 gl_Position = 0.0f;
+              ^
+program_source:14:29: error: invalid type 'float4' (vector of 4 'float' values) for input declaration in a vertex function
+vertex main_out tint_symbol(float4 position_param) {
+                            ^~~~~~~~~~~~~~~~~~~~~
+
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/1.spvasm.expected.ir.msl
index efdd3b1..d643a09 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/1.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/1.spvasm.expected.ir.msl
@@ -1,6 +1,33 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(16) {
+  color_out_1:vec4<f32> @offset(0), @location(0)
+  gl_FragDepth_1:f32 @offset(16), @builtin(frag_depth)
+}
+
+$B1: {  # root
+  %color_out:ptr<private, vec4<f32>, read_write> = var
+  %gl_FragDepth:ptr<private, f32, read_write> = var
+}
+
+%main_1 = func():void {
+  $B2: {
+    store %color_out, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+    store %gl_FragDepth, 0.40000000596046447754f
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B3: {
+    %5:void = call %main_1
+    %6:vec4<f32> = load %color_out
+    %7:f32 = load %gl_FragDepth
+    %8:main_out = construct %6, %7
+    ret %8
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/1.wgsl.expected.ir.msl
index efdd3b1..d643a09 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/1.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/1.wgsl.expected.ir.msl
@@ -1,6 +1,33 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(16) {
+  color_out_1:vec4<f32> @offset(0), @location(0)
+  gl_FragDepth_1:f32 @offset(16), @builtin(frag_depth)
+}
+
+$B1: {  # root
+  %color_out:ptr<private, vec4<f32>, read_write> = var
+  %gl_FragDepth:ptr<private, f32, read_write> = var
+}
+
+%main_1 = func():void {
+  $B2: {
+    store %color_out, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+    store %gl_FragDepth, 0.40000000596046447754f
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B3: {
+    %5:void = call %main_1
+    %6:vec4<f32> = load %color_out
+    %7:f32 = load %gl_FragDepth
+    %8:main_out = construct %6, %7
+    ret %8
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less/0-opt.spvasm.expected.ir.msl
index 94e248c..1674ea7 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less/0-opt.spvasm.expected.ir.msl
@@ -1,9 +1,29 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Swizzle
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct main_out {
+  float4 gl_Position [[position]];
+};
+
+thread float4 position_1 = 0.0f;
+thread float4 gl_Position = 0.0f;
+void main_1() {
+  float2 const x_23 = position_1.xy;
+  gl_Position = float4(x_23[0u], x_23[1u], 0.40000000596046447754f, 1.0f);
+}
+vertex main_out tint_symbol(float4 position_1_param) {
+  position_1 = position_1_param;
+  main_1();
+  return {.gl_Position=gl_Position};
+}
+program_source:7:15: error: program scope variable must reside in constant address space
+thread float4 position_1 = 0.0f;
+              ^
+program_source:8:15: error: program scope variable must reside in constant address space
+thread float4 gl_Position = 0.0f;
+              ^
+program_source:13:29: error: invalid type 'float4' (vector of 4 'float' values) for input declaration in a vertex function
+vertex main_out tint_symbol(float4 position_1_param) {
+                            ^~~~~~~~~~~~~~~~~~~~~~~
+
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less/0-opt.wgsl.expected.ir.msl
index 28251dc..7810624 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less/0-opt.wgsl.expected.ir.msl
@@ -1,9 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct main_out {
+  float4 gl_Position [[position]];
+};
+
+thread float4 pos = 0.0f;
+thread float4 gl_Position = 0.0f;
+void main_1() {
+  float4 const x_22 = pos;
+  float2 const x_23 = float2(x_22[0u], x_22[1u]);
+  gl_Position = float4(x_23[0u], x_23[1u], 0.40000000596046447754f, 1.0f);
+}
+vertex main_out tint_symbol(float4 position_param) {
+  pos = position_param;
+  main_1();
+  return {.gl_Position=gl_Position};
+}
+program_source:7:15: error: program scope variable must reside in constant address space
+thread float4 pos = 0.0f;
+              ^
+program_source:8:15: error: program scope variable must reside in constant address space
+thread float4 gl_Position = 0.0f;
+              ^
+program_source:14:29: error: invalid type 'float4' (vector of 4 'float' values) for input declaration in a vertex function
+vertex main_out tint_symbol(float4 position_param) {
+                            ^~~~~~~~~~~~~~~~~~~~~
+
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less_or_equal/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less_or_equal/1.spvasm.expected.ir.msl
index efdd3b1..c1d01f7 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less_or_equal/1.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less_or_equal/1.spvasm.expected.ir.msl
@@ -1,6 +1,33 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(16) {
+  color_out_1:vec4<f32> @offset(0), @location(0)
+  gl_FragDepth_1:f32 @offset(16), @builtin(frag_depth)
+}
+
+$B1: {  # root
+  %color_out:ptr<private, vec4<f32>, read_write> = var
+  %gl_FragDepth:ptr<private, f32, read_write> = var
+}
+
+%main_1 = func():void {
+  $B2: {
+    store %color_out, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+    store %gl_FragDepth, 0.69999998807907104492f
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B3: {
+    %5:void = call %main_1
+    %6:vec4<f32> = load %color_out
+    %7:f32 = load %gl_FragDepth
+    %8:main_out = construct %6, %7
+    ret %8
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less_or_equal/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less_or_equal/1.wgsl.expected.ir.msl
index efdd3b1..c1d01f7 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less_or_equal/1.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less_or_equal/1.wgsl.expected.ir.msl
@@ -1,6 +1,33 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(16) {
+  color_out_1:vec4<f32> @offset(0), @location(0)
+  gl_FragDepth_1:f32 @offset(16), @builtin(frag_depth)
+}
+
+$B1: {  # root
+  %color_out:ptr<private, vec4<f32>, read_write> = var
+  %gl_FragDepth:ptr<private, f32, read_write> = var
+}
+
+%main_1 = func():void {
+  $B2: {
+    store %color_out, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+    store %gl_FragDepth, 0.69999998807907104492f
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B3: {
+    %5:void = call %main_1
+    %6:vec4<f32> = load %color_out
+    %7:f32 = load %gl_FragDepth
+    %8:main_out = construct %6, %7
+    ret %8
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/0-opt.spvasm.expected.ir.msl
index 94e248c..f956aac 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/0-opt.spvasm.expected.ir.msl
@@ -1,9 +1,29 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Swizzle
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct main_out {
+  float4 gl_Position [[position]];
+};
+
+thread float4 position_1 = 0.0f;
+thread float4 gl_Position = 0.0f;
+void main_1() {
+  float2 const x_23 = position_1.xy;
+  gl_Position = float4(x_23[0u], x_23[1u], 0.30000001192092895508f, 1.0f);
+}
+vertex main_out tint_symbol(float4 position_1_param) {
+  position_1 = position_1_param;
+  main_1();
+  return {.gl_Position=gl_Position};
+}
+program_source:7:15: error: program scope variable must reside in constant address space
+thread float4 position_1 = 0.0f;
+              ^
+program_source:8:15: error: program scope variable must reside in constant address space
+thread float4 gl_Position = 0.0f;
+              ^
+program_source:13:29: error: invalid type 'float4' (vector of 4 'float' values) for input declaration in a vertex function
+vertex main_out tint_symbol(float4 position_1_param) {
+                            ^~~~~~~~~~~~~~~~~~~~~~~
+
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/0-opt.wgsl.expected.ir.msl
index 28251dc..e518b6a 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/0-opt.wgsl.expected.ir.msl
@@ -1,9 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct main_out {
+  float4 gl_Position [[position]];
+};
+
+thread float4 pos = 0.0f;
+thread float4 gl_Position = 0.0f;
+void main_1() {
+  float4 const x_22 = pos;
+  float2 const x_23 = float2(x_22[0u], x_22[1u]);
+  gl_Position = float4(x_23[0u], x_23[1u], 0.30000001192092895508f, 1.0f);
+}
+vertex main_out tint_symbol(float4 position_param) {
+  pos = position_param;
+  main_1();
+  return {.gl_Position=gl_Position};
+}
+program_source:7:15: error: program scope variable must reside in constant address space
+thread float4 pos = 0.0f;
+              ^
+program_source:8:15: error: program scope variable must reside in constant address space
+thread float4 gl_Position = 0.0f;
+              ^
+program_source:14:29: error: invalid type 'float4' (vector of 4 'float' values) for input declaration in a vertex function
+vertex main_out tint_symbol(float4 position_param) {
+                            ^~~~~~~~~~~~~~~~~~~~~
+
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/1.spvasm.expected.ir.msl
index efdd3b1..eb3264c 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/1.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/1.spvasm.expected.ir.msl
@@ -1,6 +1,33 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(16) {
+  color_out_1:vec4<f32> @offset(0), @location(0)
+  gl_FragDepth_1:f32 @offset(16), @builtin(frag_depth)
+}
+
+$B1: {  # root
+  %color_out:ptr<private, vec4<f32>, read_write> = var
+  %gl_FragDepth:ptr<private, f32, read_write> = var
+}
+
+%main_1 = func():void {
+  $B2: {
+    store %color_out, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+    store %gl_FragDepth, 0.5f
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B3: {
+    %5:void = call %main_1
+    %6:vec4<f32> = load %color_out
+    %7:f32 = load %gl_FragDepth
+    %8:main_out = construct %6, %7
+    ret %8
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/1.wgsl.expected.ir.msl
index efdd3b1..eb3264c 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/1.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/1.wgsl.expected.ir.msl
@@ -1,6 +1,33 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(16) {
+  color_out_1:vec4<f32> @offset(0), @location(0)
+  gl_FragDepth_1:f32 @offset(16), @builtin(frag_depth)
+}
+
+$B1: {  # root
+  %color_out:ptr<private, vec4<f32>, read_write> = var
+  %gl_FragDepth:ptr<private, f32, read_write> = var
+}
+
+%main_1 = func():void {
+  $B2: {
+    store %color_out, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
+    store %gl_FragDepth, 0.5f
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B3: {
+    %5:void = call %main_1
+    %6:vec4<f32> = load %color_out
+    %7:f32 = load %gl_FragDepth
+    %8:main_out = construct %6, %7
+    ret %8
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_1/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_1/0-opt.spvasm.expected.ir.msl
index 94e248c..bf1db6e 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_1/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_1/0-opt.spvasm.expected.ir.msl
@@ -1,9 +1,29 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Swizzle
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct main_out {
+  float4 gl_Position [[position]];
+};
+
+thread float4 position_1 = 0.0f;
+thread float4 gl_Position = 0.0f;
+void main_1() {
+  float2 const x_23 = position_1.xy;
+  gl_Position = float4(x_23[0u], x_23[1u], 0.69999998807907104492f, 1.0f);
+}
+vertex main_out tint_symbol(float4 position_1_param) {
+  position_1 = position_1_param;
+  main_1();
+  return {.gl_Position=gl_Position};
+}
+program_source:7:15: error: program scope variable must reside in constant address space
+thread float4 position_1 = 0.0f;
+              ^
+program_source:8:15: error: program scope variable must reside in constant address space
+thread float4 gl_Position = 0.0f;
+              ^
+program_source:13:29: error: invalid type 'float4' (vector of 4 'float' values) for input declaration in a vertex function
+vertex main_out tint_symbol(float4 position_1_param) {
+                            ^~~~~~~~~~~~~~~~~~~~~~~
+
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_1/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_1/0-opt.wgsl.expected.ir.msl
index 28251dc..63383f8 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_1/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_1/0-opt.wgsl.expected.ir.msl
@@ -1,9 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct main_out {
+  float4 gl_Position [[position]];
+};
+
+thread float4 pos = 0.0f;
+thread float4 gl_Position = 0.0f;
+void main_1() {
+  float4 const x_22 = pos;
+  float2 const x_23 = float2(x_22[0u], x_22[1u]);
+  gl_Position = float4(x_23[0u], x_23[1u], 0.69999998807907104492f, 1.0f);
+}
+vertex main_out tint_symbol(float4 position_param) {
+  pos = position_param;
+  main_1();
+  return {.gl_Position=gl_Position};
+}
+program_source:7:15: error: program scope variable must reside in constant address space
+thread float4 pos = 0.0f;
+              ^
+program_source:8:15: error: program scope variable must reside in constant address space
+thread float4 gl_Position = 0.0f;
+              ^
+program_source:14:29: error: invalid type 'float4' (vector of 4 'float' values) for input declaration in a vertex function
+vertex main_out tint_symbol(float4 position_param) {
+                            ^~~~~~~~~~~~~~~~~~~~~
+
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/0-opt.spvasm.expected.ir.msl
index 94e248c..3ed471e 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/0-opt.spvasm.expected.ir.msl
@@ -1,9 +1,29 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Swizzle
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct main_out {
+  float4 gl_Position [[position]];
+};
+
+thread float4 position_1 = 0.0f;
+thread float4 gl_Position = 0.0f;
+void main_1() {
+  float2 const x_23 = position_1.xy;
+  gl_Position = float4(x_23[0u], x_23[1u], 0.20000000298023223877f, 1.0f);
+}
+vertex main_out tint_symbol(float4 position_1_param) {
+  position_1 = position_1_param;
+  main_1();
+  return {.gl_Position=gl_Position};
+}
+program_source:7:15: error: program scope variable must reside in constant address space
+thread float4 position_1 = 0.0f;
+              ^
+program_source:8:15: error: program scope variable must reside in constant address space
+thread float4 gl_Position = 0.0f;
+              ^
+program_source:13:29: error: invalid type 'float4' (vector of 4 'float' values) for input declaration in a vertex function
+vertex main_out tint_symbol(float4 position_1_param) {
+                            ^~~~~~~~~~~~~~~~~~~~~~~
+
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/0-opt.wgsl.expected.ir.msl
index 28251dc..bbc42ee 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/0-opt.wgsl.expected.ir.msl
@@ -1,9 +1,30 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct main_out {
+  float4 gl_Position [[position]];
+};
+
+thread float4 pos = 0.0f;
+thread float4 gl_Position = 0.0f;
+void main_1() {
+  float4 const x_22 = pos;
+  float2 const x_23 = float2(x_22[0u], x_22[1u]);
+  gl_Position = float4(x_23[0u], x_23[1u], 0.20000000298023223877f, 1.0f);
+}
+vertex main_out tint_symbol(float4 position_param) {
+  pos = position_param;
+  main_1();
+  return {.gl_Position=gl_Position};
+}
+program_source:7:15: error: program scope variable must reside in constant address space
+thread float4 pos = 0.0f;
+              ^
+program_source:8:15: error: program scope variable must reside in constant address space
+thread float4 gl_Position = 0.0f;
+              ^
+program_source:14:29: error: invalid type 'float4' (vector of 4 'float' values) for input declaration in a vertex function
+vertex main_out tint_symbol(float4 position_param) {
+                            ^~~~~~~~~~~~~~~~~~~~~
+
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/1.spvasm.expected.ir.msl
index efdd3b1..de15631 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/1.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/1.spvasm.expected.ir.msl
@@ -1,6 +1,33 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(16) {
+  outColor_1:vec4<f32> @offset(0), @location(0)
+  gl_FragDepth_1:f32 @offset(16), @builtin(frag_depth)
+}
+
+$B1: {  # root
+  %outColor:ptr<private, vec4<f32>, read_write> = var
+  %gl_FragDepth:ptr<private, f32, read_write> = var
+}
+
+%main_1 = func():void {
+  $B2: {
+    store %outColor, vec4<f32>(0.0f)
+    store %gl_FragDepth, 0.30000001192092895508f
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B3: {
+    %5:void = call %main_1
+    %6:vec4<f32> = load %outColor
+    %7:f32 = load %gl_FragDepth
+    %8:main_out = construct %6, %7
+    ret %8
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/1.wgsl.expected.ir.msl
index efdd3b1..de15631 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/1.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/1.wgsl.expected.ir.msl
@@ -1,6 +1,33 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(16) {
+  outColor_1:vec4<f32> @offset(0), @location(0)
+  gl_FragDepth_1:f32 @offset(16), @builtin(frag_depth)
+}
+
+$B1: {  # root
+  %outColor:ptr<private, vec4<f32>, read_write> = var
+  %gl_FragDepth:ptr<private, f32, read_write> = var
+}
+
+%main_1 = func():void {
+  $B2: {
+    store %outColor, vec4<f32>(0.0f)
+    store %gl_FragDepth, 0.30000001192092895508f
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B3: {
+    %5:void = call %main_1
+    %6:vec4<f32> = load %outColor
+    %7:f32 = load %gl_FragDepth
+    %8:main_out = construct %6, %7
+    ret %8
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_0/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_0/1.spvasm.expected.ir.msl
index efdd3b1..58ded0f 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_0/1.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_0/1.spvasm.expected.ir.msl
@@ -1,6 +1,33 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(16) {
+  outColor_1:vec4<f32> @offset(0), @location(0)
+  gl_FragDepth_1:f32 @offset(16), @builtin(frag_depth)
+}
+
+$B1: {  # root
+  %outColor:ptr<private, vec4<f32>, read_write> = var
+  %gl_FragDepth:ptr<private, f32, read_write> = var
+}
+
+%main_1 = func():void {
+  $B2: {
+    store %outColor, vec4<f32>(0.0f)
+    store %gl_FragDepth, 0.10000000149011611938f
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B3: {
+    %5:void = call %main_1
+    %6:vec4<f32> = load %outColor
+    %7:f32 = load %gl_FragDepth
+    %8:main_out = construct %6, %7
+    ret %8
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_0/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_0/1.wgsl.expected.ir.msl
index efdd3b1..58ded0f 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_0/1.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_0/1.wgsl.expected.ir.msl
@@ -1,6 +1,33 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(16) {
+  outColor_1:vec4<f32> @offset(0), @location(0)
+  gl_FragDepth_1:f32 @offset(16), @builtin(frag_depth)
+}
+
+$B1: {  # root
+  %outColor:ptr<private, vec4<f32>, read_write> = var
+  %gl_FragDepth:ptr<private, f32, read_write> = var
+}
+
+%main_1 = func():void {
+  $B2: {
+    store %outColor, vec4<f32>(0.0f)
+    store %gl_FragDepth, 0.10000000149011611938f
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B3: {
+    %5:void = call %main_1
+    %6:vec4<f32> = load %outColor
+    %7:f32 = load %gl_FragDepth
+    %8:main_out = construct %6, %7
+    ret %8
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_2/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_2/1.spvasm.expected.ir.msl
index efdd3b1..89952c7 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_2/1.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_2/1.spvasm.expected.ir.msl
@@ -1,6 +1,33 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(16) {
+  outColor_1:vec4<f32> @offset(0), @location(0)
+  gl_FragDepth_1:f32 @offset(16), @builtin(frag_depth)
+}
+
+$B1: {  # root
+  %outColor:ptr<private, vec4<f32>, read_write> = var
+  %gl_FragDepth:ptr<private, f32, read_write> = var
+}
+
+%main_1 = func():void {
+  $B2: {
+    store %outColor, vec4<f32>(0.0f)
+    store %gl_FragDepth, 0.60000002384185791016f
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B3: {
+    %5:void = call %main_1
+    %6:vec4<f32> = load %outColor
+    %7:f32 = load %gl_FragDepth
+    %8:main_out = construct %6, %7
+    ret %8
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_2/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_2/1.wgsl.expected.ir.msl
index efdd3b1..89952c7 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_2/1.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_2/1.wgsl.expected.ir.msl
@@ -1,6 +1,33 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(16) {
+  outColor_1:vec4<f32> @offset(0), @location(0)
+  gl_FragDepth_1:f32 @offset(16), @builtin(frag_depth)
+}
+
+$B1: {  # root
+  %outColor:ptr<private, vec4<f32>, read_write> = var
+  %gl_FragDepth:ptr<private, f32, read_write> = var
+}
+
+%main_1 = func():void {
+  $B2: {
+    store %outColor, vec4<f32>(0.0f)
+    store %gl_FragDepth, 0.60000002384185791016f
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B3: {
+    %5:void = call %main_1
+    %6:vec4<f32> = load %outColor
+    %7:f32 = load %gl_FragDepth
+    %8:main_out = construct %6, %7
+    ret %8
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_0/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_0/1.spvasm.expected.ir.msl
index efdd3b1..09614d6 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_0/1.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_0/1.spvasm.expected.ir.msl
@@ -1,6 +1,36 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(16) {
+  outColor_1:vec4<f32> @offset(0), @location(0)
+  gl_FragDepth_1:f32 @offset(16), @builtin(frag_depth)
+}
+
+$B1: {  # root
+  %outColor:ptr<private, vec4<f32>, read_write> = var
+  %gl_FragDepth:ptr<private, f32, read_write> = var
+  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
+}
+
+%main_1 = func():void {
+  $B2: {
+    store %outColor, vec4<f32>(0.0f)
+    %5:f32 = load_vector_element %gl_FragCoord, 2u
+    store %gl_FragDepth, %5
+    ret
+  }
+}
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B3: {
+    store %gl_FragCoord, %gl_FragCoord_param
+    %8:void = call %main_1
+    %9:vec4<f32> = load %outColor
+    %10:f32 = load %gl_FragDepth
+    %11:main_out = construct %9, %10
+    ret %11
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_0/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_0/1.wgsl.expected.ir.msl
index efdd3b1..5682d70 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_0/1.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_0/1.wgsl.expected.ir.msl
@@ -1,6 +1,37 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(16) {
+  outColor_1:vec4<f32> @offset(0), @location(0)
+  gl_FragDepth_1:f32 @offset(16), @builtin(frag_depth)
+}
+
+$B1: {  # root
+  %outColor:ptr<private, vec4<f32>, read_write> = var
+  %gl_FragDepth:ptr<private, f32, read_write> = var
+  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
+}
+
+%main_1 = func():void {
+  $B2: {
+    store %outColor, vec4<f32>(0.0f)
+    %5:f32 = load_vector_element %gl_FragCoord, 2u
+    %x_20:f32 = let %5
+    store %gl_FragDepth, %x_20
+    ret
+  }
+}
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B3: {
+    store %gl_FragCoord, %gl_FragCoord_param
+    %9:void = call %main_1
+    %10:vec4<f32> = load %outColor
+    %11:f32 = load %gl_FragDepth
+    %12:main_out = construct %10, %11
+    ret %12
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_2/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_2/1.spvasm.expected.ir.msl
index efdd3b1..9af0bf3 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_2/1.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_2/1.spvasm.expected.ir.msl
@@ -1,6 +1,33 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(16) {
+  outColor_1:vec4<f32> @offset(0), @location(0)
+  gl_FragDepth_1:f32 @offset(16), @builtin(frag_depth)
+}
+
+$B1: {  # root
+  %outColor:ptr<private, vec4<f32>, read_write> = var
+  %gl_FragDepth:ptr<private, f32, read_write> = var
+}
+
+%main_1 = func():void {
+  $B2: {
+    store %outColor, vec4<f32>(0.0f)
+    store %gl_FragDepth, 0.69999998807907104492f
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B3: {
+    %5:void = call %main_1
+    %6:vec4<f32> = load %outColor
+    %7:f32 = load %gl_FragDepth
+    %8:main_out = construct %6, %7
+    ret %8
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_2/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_2/1.wgsl.expected.ir.msl
index efdd3b1..9af0bf3 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_2/1.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_2/1.wgsl.expected.ir.msl
@@ -1,6 +1,33 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(16) {
+  outColor_1:vec4<f32> @offset(0), @location(0)
+  gl_FragDepth_1:f32 @offset(16), @builtin(frag_depth)
+}
+
+$B1: {  # root
+  %outColor:ptr<private, vec4<f32>, read_write> = var
+  %gl_FragDepth:ptr<private, f32, read_write> = var
+}
+
+%main_1 = func():void {
+  $B2: {
+    store %outColor, vec4<f32>(0.0f)
+    store %gl_FragDepth, 0.69999998807907104492f
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B3: {
+    %5:void = call %main_1
+    %6:vec4<f32> = load %outColor
+    %7:f32 = load %gl_FragDepth
+    %8:main_out = construct %6, %7
+    ret %8
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_3/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_3/1.spvasm.expected.ir.msl
index efdd3b1..121c6ad 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_3/1.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_3/1.spvasm.expected.ir.msl
@@ -1,6 +1,33 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(16) {
+  outColor_1:vec4<f32> @offset(0), @location(0)
+  gl_FragDepth_1:f32 @offset(16), @builtin(frag_depth)
+}
+
+$B1: {  # root
+  %outColor:ptr<private, vec4<f32>, read_write> = var
+  %gl_FragDepth:ptr<private, f32, read_write> = var
+}
+
+%main_1 = func():void {
+  $B2: {
+    store %outColor, vec4<f32>(0.0f)
+    store %gl_FragDepth, 0.40000000596046447754f
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B3: {
+    %5:void = call %main_1
+    %6:vec4<f32> = load %outColor
+    %7:f32 = load %gl_FragDepth
+    %8:main_out = construct %6, %7
+    ret %8
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_3/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_3/1.wgsl.expected.ir.msl
index efdd3b1..121c6ad 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_3/1.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_3/1.wgsl.expected.ir.msl
@@ -1,6 +1,33 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(16) {
+  outColor_1:vec4<f32> @offset(0), @location(0)
+  gl_FragDepth_1:f32 @offset(16), @builtin(frag_depth)
+}
+
+$B1: {  # root
+  %outColor:ptr<private, vec4<f32>, read_write> = var
+  %gl_FragDepth:ptr<private, f32, read_write> = var
+}
+
+%main_1 = func():void {
+  $B2: {
+    store %outColor, vec4<f32>(0.0f)
+    store %gl_FragDepth, 0.40000000596046447754f
+    ret
+  }
+}
+%tint_symbol = @fragment func():main_out {
+  $B3: {
+    %5:void = call %main_1
+    %6:vec4<f32> = load %outColor
+    %7:f32 = load %gl_FragDepth
+    %8:main_out = construct %6, %7
+    ret %8
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/spirv1p4/hlsl_functionality1/decorate_string/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/spirv1p4/hlsl_functionality1/decorate_string/0.spvasm.expected.ir.msl
index efdd3b1..a96006c 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/spirv1p4/hlsl_functionality1/decorate_string/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/spirv1p4/hlsl_functionality1/decorate_string/0.spvasm.expected.ir.msl
@@ -1,6 +1,36 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(16) {
+  gl_Position:vec4<f32> @offset(0), @builtin(position)
+  pos_1:u32 @offset(16), @location(0), @interpolate(flat)
+}
+
+$B1: {  # root
+  %position_1:ptr<private, vec4<f32>, read_write> = var
+  %pos:ptr<private, u32, read_write> = var
+  %gl_Position:ptr<private, vec4<f32>, read_write> = var
+}
+
+%main_1 = func():void {
+  $B2: {
+    %5:vec4<f32> = load %position_1
+    store %gl_Position, %5
+    store %pos, 0u
+    ret
+  }
+}
+%tint_symbol = @vertex func(%position_1_param:vec4<f32> [@location(0)]):main_out {
+  $B3: {
+    store %position_1, %position_1_param
+    %8:void = call %main_1
+    %9:vec4<f32> = load %gl_Position
+    %10:u32 = load %pos
+    %11:main_out = construct %9, %10
+    ret %11
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/spirv1p4/hlsl_functionality1/decorate_string/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/spirv1p4/hlsl_functionality1/decorate_string/0.wgsl.expected.ir.msl
index efdd3b1..781951a 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/spirv1p4/hlsl_functionality1/decorate_string/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/spirv1p4/hlsl_functionality1/decorate_string/0.wgsl.expected.ir.msl
@@ -1,6 +1,37 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(16) {
+  gl_Position:vec4<f32> @offset(0), @builtin(position)
+  pos_1:u32 @offset(16), @location(0), @interpolate(flat)
+}
+
+$B1: {  # root
+  %vert_pos:ptr<private, vec4<f32>, read_write> = var
+  %pos:ptr<private, u32, read_write> = var
+  %gl_Position:ptr<private, vec4<f32>, read_write> = var
+}
+
+%main_1 = func():void {
+  $B2: {
+    %5:vec4<f32> = load %vert_pos
+    %x_22:vec4<f32> = let %5
+    store %gl_Position, %x_22
+    store %pos, 0u
+    ret
+  }
+}
+%tint_symbol = @vertex func(%position_param:vec4<f32> [@location(0)]):main_out {
+  $B3: {
+    store %vert_pos, %position_param
+    %9:void = call %main_1
+    %10:vec4<f32> = load %gl_Position
+    %11:u32 = load %pos
+    %12:main_out = construct %10, %11
+    ret %12
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_atomic/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_atomic/0-opt.spvasm.expected.ir.msl
index efdd3b1..98b8edb 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_atomic/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_atomic/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,40 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(16) {
+  x_4_1:i32 @offset(0), @location(0), @interpolate(flat)
+  gl_Position:vec4<f32> @offset(16), @builtin(position)
+}
+
+$B1: {  # root
+  %x_2:ptr<private, vec3<f32>, read_write> = var
+  %x_3:ptr<private, i32, read_write> = var
+  %x_4:ptr<private, i32, read_write> = var
+  %gl_Position:ptr<private, vec4<f32>, read_write> = var
+}
+
+%main_1 = func():void {
+  $B2: {
+    %6:vec3<f32> = load %x_2
+    %7:vec4<f32> = construct %6, 1.0f
+    store %gl_Position, %7
+    %8:i32 = load %x_3
+    store %x_4, %8
+    ret
+  }
+}
+%tint_symbol = @vertex func(%x_2_param:vec3<f32> [@location(0)], %x_3_param:i32 [@location(1), @interpolate(flat)]):main_out {
+  $B3: {
+    store %x_2, %x_2_param
+    store %x_3, %x_3_param
+    %12:void = call %main_1
+    %13:i32 = load %x_4
+    %14:vec4<f32> = load %gl_Position
+    %15:main_out = construct %13, %14
+    ret %15
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_atomic/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_atomic/0-opt.wgsl.expected.ir.msl
index efdd3b1..161ab72 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_atomic/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_atomic/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,41 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(16) {
+  x_4_1:i32 @offset(0), @location(0), @interpolate(flat)
+  gl_Position:vec4<f32> @offset(16), @builtin(position)
+}
+
+$B1: {  # root
+  %x_2:ptr<private, vec3<f32>, read_write> = var
+  %x_3:ptr<private, i32, read_write> = var
+  %x_4:ptr<private, i32, read_write> = var
+  %gl_Position:ptr<private, vec4<f32>, read_write> = var
+}
+
+%main_1 = func():void {
+  $B2: {
+    %6:vec3<f32> = load %x_2
+    %x_22:vec3<f32> = let %6
+    %8:vec4<f32> = construct %x_22, 1.0f
+    store %gl_Position, %8
+    %9:i32 = load %x_3
+    store %x_4, %9
+    ret
+  }
+}
+%tint_symbol = @vertex func(%x_2_param:vec3<f32> [@location(0)], %x_3_param:i32 [@location(1), @interpolate(flat)]):main_out {
+  $B3: {
+    store %x_2, %x_2_param
+    store %x_3, %x_3_param
+    %13:void = call %main_1
+    %14:i32 = load %x_4
+    %15:vec4<f32> = load %gl_Position
+    %16:main_out = construct %14, %15
+    ret %16
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_store/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_store/1.spvasm.expected.ir.msl
index efdd3b1..877ebc6 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_store/1.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_store/1.spvasm.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_store/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_store/1.wgsl.expected.ir.msl
index efdd3b1..877ebc6 100644
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_store/1.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_store/1.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
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
index 2e88a5f..96f0c80 100644
--- 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
@@ -1,6 +1,62 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::LoadVectorElement
+../../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.   *
 *                                                                  *
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
index 28251dc..118798a 100644
--- 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
@@ -1,6 +1,65 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
+../../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.   *
 *                                                                  *
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
index 2e88a5f..7c69af4 100644
--- 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
@@ -1,6 +1,57 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::LoadVectorElement
+../../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.   *
 *                                                                  *
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
index 2e88a5f..cdd96cd 100644
--- 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
@@ -1,6 +1,61 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::LoadVectorElement
+../../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.   *
 *                                                                  *
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
index efdd3b1..eb52e3c 100644
--- 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
@@ -1,6 +1,65 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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.   *
 *                                                                  *
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
index efdd3b1..eb52e3c 100644
--- 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
@@ -1,6 +1,65 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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.   *
 *                                                                  *
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
index 24741b5..13659a2 100644
--- 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
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   field0:array<i32> @offset(0)
 }
 
@@ -8,48 +8,61 @@
   x_4_1:i32 @offset(0), @location(0), @interpolate(flat)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     store %x_4, 1i
     %6:f32 = load_vector_element %x_2, 0u
-    %x_27:i32 = convert %6
-    %8:f32 = load_vector_element %x_2, 1u
-    %x_28:i32 = convert %8
-    %10:i32 = and %x_27, 1i
-    %11:i32 = and %x_28, 1i
-    %12:i32 = add %10, %11
-    %13:i32 = load %x_3
-    %14:i32 = add %12, %13
-    %15:f32 = load_vector_element %x_2, 2u
-    %16:i32 = convert %15
-    %17:bool = eq %14, %16
-    if %17 [t: %b3] {  # if_1
-      %b3 = block {  # true
+    %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
       }
     }
-    %18:i32 = mul %x_28, 8i
-    %19:i32 = add %x_27, %18
-    %20:ptr<storage, i32, read_write> = access %x_5, 0u, %19
-    store %20, %x_27
+    %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 {
-  %b4 = block {
+%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
-    %24:void = call %main_1
-    %25:i32 = load %x_4
-    %26:main_out = construct %25
-    ret %26
+    %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
   }
 }
 
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
index 46e7dcc37..e359fb6 100644
--- 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
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   field0:array<i32> @offset(0)
 }
 
@@ -8,49 +8,63 @@
   x_4_1:i32 @offset(0), @location(0), @interpolate(flat)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     store %x_4, 1i
-    %x_23:vec4<f32> = load %x_2
-    %7:f32 = access %x_23, 0u
-    %x_27:i32 = convert %7
-    %9:f32 = access %x_23, 1u
-    %x_28:i32 = convert %9
-    %x_33:i32 = load %x_3
-    %12:i32 = and %x_27, 1i
-    %13:i32 = and %x_28, 1i
-    %14:i32 = add %12, %13
-    %15:i32 = add %14, %x_33
-    %16:f32 = access %x_23, 2u
-    %17:i32 = convert %16
-    %18:bool = eq %15, %17
-    if %18 [t: %b3] {  # if_1
-      %b3 = block {  # true
+    %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
       }
     }
-    %19:i32 = mul %x_28, 8i
-    %20:i32 = add %x_27, %19
-    %21:ptr<storage, i32, read_write> = access %x_5, 0u, %20
-    store %21, %x_27
+    %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 {
-  %b4 = block {
+%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
-    %25:void = call %main_1
-    %26:i32 = load %x_4
-    %27:main_out = construct %26
-    ret %27
+    %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
   }
 }
 
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
index 34fe99c..ba7eaf9 100644
--- 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
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   field0:array<i32> @offset(0)
 }
 
@@ -8,49 +8,63 @@
   x_4_1:i32 @offset(0), @location(0), @interpolate(flat)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     store %x_4, 1i
-    %x_23:vec4<f32> = load %x_2
-    %7:f32 = load_vector_element %x_2, 0u
-    %x_27:i32 = convert %7
-    %9:f32 = load_vector_element %x_2, 1u
-    %x_28:i32 = convert %9
-    %x_33:i32 = load %x_3
-    %12:i32 = mul %x_28, 8i
-    %13:i32 = add %x_27, %12
-    %14:ptr<storage, i32, read_write> = access %x_5, 0u, %13
-    store %14, %x_27
-    %15:i32 = and %x_27, 1i
-    %16:i32 = and %x_28, 1i
-    %17:i32 = add %15, %16
-    %18:i32 = add %17, %x_33
-    %19:f32 = access %x_23, 2u
-    %20:i32 = convert %19
-    %21:bool = eq %18, %20
-    if %21 [t: %b3] {  # if_1
-      %b3 = block {  # true
+    %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 {
-  %b4 = block {
+%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
-    %25:void = call %main_1
-    %26:i32 = load %x_4
-    %27:main_out = construct %26
-    ret %27
+    %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
   }
 }
 
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
index 96ec0f3..537fcfa 100644
--- 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
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: S = struct @align(4) {
+../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
   field0:array<i32> @offset(0)
 }
 
@@ -8,49 +8,63 @@
   x_4_1:i32 @offset(0), @location(0), @interpolate(flat)
 }
 
-%b1 = block {  # root
+$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 {
-  %b2 = block {
+%main_1 = func():void {
+  $B2: {
     store %x_4, 1i
-    %x_23:vec4<f32> = load %x_2
-    %7:f32 = access %x_23, 0u
-    %x_27:i32 = convert %7
-    %9:f32 = access %x_23, 1u
-    %x_28:i32 = convert %9
-    %x_33:i32 = load %x_3
-    %12:i32 = mul %x_28, 8i
-    %13:i32 = add %x_27, %12
-    %14:ptr<storage, i32, read_write> = access %x_5, 0u, %13
-    store %14, %x_27
-    %15:i32 = and %x_27, 1i
-    %16:i32 = and %x_28, 1i
-    %17:i32 = add %15, %16
-    %18:i32 = add %17, %x_33
-    %19:f32 = access %x_23, 2u
-    %20:i32 = convert %19
-    %21:bool = eq %18, %20
-    if %21 [t: %b3] {  # if_1
-      %b3 = block {  # true
+    %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 {
-  %b4 = block {
+%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
-    %25:void = call %main_1
-    %26:i32 = load %x_4
-    %27:main_out = construct %26
-    ret %27
+    %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
   }
 }
 
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
index efdd3b1..40c7b84 100644
--- 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
@@ -1,6 +1,92 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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.   *
 *                                                                  *
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
index efdd3b1..2a16ab4 100644
--- 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
@@ -1,6 +1,92 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../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.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/0.spvasm.expected.ir.msl
index 2e88a5f..87619f7 100644
--- a/test/tint/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/0.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/0.spvasm.expected.ir.msl
@@ -1,9 +1,28 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::LoadVectorElement
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct main_out {
+  float4 gl_Position [[position]];
+};
+
+thread float3 position_1 = 0.0f;
+thread float4 gl_Position = 0.0f;
+void main_1() {
+  gl_Position = float4(position_1[0u], position_1[1u], position_1[2u], 1.0f);
+}
+vertex main_out tint_symbol(float3 position_1_param) {
+  position_1 = position_1_param;
+  main_1();
+  return {.gl_Position=gl_Position};
+}
+program_source:7:15: error: program scope variable must reside in constant address space
+thread float3 position_1 = 0.0f;
+              ^
+program_source:8:15: error: program scope variable must reside in constant address space
+thread float4 gl_Position = 0.0f;
+              ^
+program_source:12:29: error: invalid type 'float3' (vector of 3 'float' values) for input declaration in a vertex function
+vertex main_out tint_symbol(float3 position_1_param) {
+                            ^~~~~~~~~~~~~~~~~~~~~~~
+
diff --git a/test/tint/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/0.wgsl.expected.ir.msl
index 28251dc..5ed6613 100644
--- a/test/tint/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/0.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/0.wgsl.expected.ir.msl
@@ -1,9 +1,29 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+#include <metal_stdlib>
+using namespace metal;
+struct main_out {
+  float4 gl_Position [[position]];
+};
+
+thread float3 pos = 0.0f;
+thread float4 gl_Position = 0.0f;
+void main_1() {
+  float3 const x_21 = pos;
+  gl_Position = float4(x_21[0u], x_21[1u], x_21[2u], 1.0f);
+}
+vertex main_out tint_symbol(float3 position_param) {
+  pos = position_param;
+  main_1();
+  return {.gl_Position=gl_Position};
+}
+program_source:7:15: error: program scope variable must reside in constant address space
+thread float3 pos = 0.0f;
+              ^
+program_source:8:15: error: program scope variable must reside in constant address space
+thread float4 gl_Position = 0.0f;
+              ^
+program_source:13:29: error: invalid type 'float3' (vector of 3 'float' values) for input declaration in a vertex function
+vertex main_out tint_symbol(float3 position_param) {
+                            ^~~~~~~~~~~~~~~~~~~~~
+
diff --git a/test/tint/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/2-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/2-opt.spvasm.expected.ir.msl
index 2e88a5f..5d3ae17 100644
--- a/test/tint/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/2-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/2-opt.spvasm.expected.ir.msl
@@ -1,6 +1,53 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::LoadVectorElement
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(4) {
+  expect_1:i32 @offset(0), @location(0), @interpolate(flat)
+}
+
+$B1: {  # root
+  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
+  %expect:ptr<private, i32, read_write> = var
+}
+
+%main_1 = func():void {
+  $B2: {
+    %inbounds:ptr<function, bool, read_write> = var
+    %x_31:ptr<function, bool, read_write> = var
+    %x_32:ptr<function, bool, read_write> = var
+    %7:f32 = load_vector_element %gl_FragCoord, 0u
+    %8:bool = lt %7, 128.0f
+    %x_25:bool = let %8
+    store %x_32, %x_25
+    %10:bool = eq %x_25, false
+    if %10 [t: $B3] {  # if_1
+      $B3: {  # true
+        %11:f32 = load_vector_element %gl_FragCoord, 1u
+        %12:bool = lt %11, 128.0f
+        store %x_31, %12
+        %13:bool = load %x_31
+        store %x_32, %13
+        exit_if  # if_1
+      }
+    }
+    %14:bool = load %x_32
+    store %inbounds, %14
+    %15:bool = load %inbounds
+    %16:i32 = select -1i, 1i, %15
+    store %expect, %16
+    ret
+  }
+}
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B4: {
+    store %gl_FragCoord, %gl_FragCoord_param
+    %19:void = call %main_1
+    %20:i32 = load %expect
+    %21:main_out = construct %20
+    ret %21
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/2-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/2-opt.wgsl.expected.ir.msl
index 2e88a5f..cd23923 100644
--- a/test/tint/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/2-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/2-opt.wgsl.expected.ir.msl
@@ -1,6 +1,57 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::LoadVectorElement
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(4) {
+  expect_1:i32 @offset(0), @location(0), @interpolate(flat)
+}
+
+$B1: {  # root
+  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
+  %expect:ptr<private, i32, read_write> = var
+}
+
+%main_1 = func():void {
+  $B2: {
+    %inbounds:ptr<function, bool, read_write> = var
+    %x_31:ptr<function, bool, read_write> = var
+    %x_32_phi:ptr<function, bool, read_write> = var
+    %7:f32 = load_vector_element %gl_FragCoord, 0u
+    %x_24:f32 = let %7
+    %9:bool = lt %x_24, 128.0f
+    %x_25:bool = let %9
+    store %x_32_phi, %x_25
+    %11:bool = eq %x_25, false
+    if %11 [t: $B3] {  # if_1
+      $B3: {  # true
+        %12:f32 = load_vector_element %gl_FragCoord, 1u
+        %x_30:f32 = let %12
+        %14:bool = lt %x_30, 128.0f
+        store %x_31, %14
+        %15:bool = load %x_31
+        store %x_32_phi, %15
+        exit_if  # if_1
+      }
+    }
+    %16:bool = load %x_32_phi
+    %x_32:bool = let %16
+    store %inbounds, %x_32
+    %18:bool = load %inbounds
+    %x_33:bool = let %18
+    %20:i32 = select -1i, 1i, %x_33
+    store %expect, %20
+    ret
+  }
+}
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B4: {
+    store %gl_FragCoord, %gl_FragCoord_param
+    %23:void = call %main_1
+    %24:i32 = load %expect
+    %25:main_out = construct %24
+    ret %25
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/texture/subgroup_lod/texel_fetch/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/texture/subgroup_lod/texel_fetch/1.spvasm.expected.ir.msl
index efdd3b1..d622080 100644
--- a/test/tint/vk-gl-cts/texture/subgroup_lod/texel_fetch/1.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/texture/subgroup_lod/texel_fetch/1.spvasm.expected.ir.msl
@@ -1,6 +1,32 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(16) {
+  color_out_1:vec4<f32> @offset(0), @location(0)
+}
+
+$B1: {  # root
+  %color_out:ptr<private, vec4<f32>, read_write> = var
+  %color_in:ptr<private, vec4<f32>, read_write> = var
+}
+
+%main_1 = func():void {
+  $B2: {
+    %4:vec4<f32> = load %color_in
+    store %color_out, %4
+    ret
+  }
+}
+%tint_symbol = @fragment func(%color_in_param:vec4<f32> [@location(0)]):main_out {
+  $B3: {
+    store %color_in, %color_in_param
+    %7:void = call %main_1
+    %8:vec4<f32> = load %color_out
+    %9:main_out = construct %8
+    ret %9
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/texture/subgroup_lod/texel_fetch/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/texture/subgroup_lod/texel_fetch/1.wgsl.expected.ir.msl
index efdd3b1..2a65f90 100644
--- a/test/tint/vk-gl-cts/texture/subgroup_lod/texel_fetch/1.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/texture/subgroup_lod/texel_fetch/1.wgsl.expected.ir.msl
@@ -1,6 +1,33 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(16) {
+  color_out_1:vec4<f32> @offset(0), @location(0)
+}
+
+$B1: {  # root
+  %color_out:ptr<private, vec4<f32>, read_write> = var
+  %color_in:ptr<private, vec4<f32>, read_write> = var
+}
+
+%main_1 = func():void {
+  $B2: {
+    %4:vec4<f32> = load %color_in
+    %x_12:vec4<f32> = let %4
+    store %color_out, %x_12
+    ret
+  }
+}
+%tint_symbol = @fragment func(%color_in_param:vec4<f32> [@location(0)]):main_out {
+  $B3: {
+    store %color_in, %color_in_param
+    %8:void = call %main_1
+    %9:vec4<f32> = load %color_out
+    %10:main_out = construct %9
+    ret %10
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/texture/texel_offset/texel_offset/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/texture/texel_offset/texel_offset/0-opt.spvasm.expected.ir.msl
index 2e88a5f..aff25ec 100644
--- a/test/tint/vk-gl-cts/texture/texel_offset/texel_offset/0-opt.spvasm.expected.ir.msl
+++ b/test/tint/vk-gl-cts/texture/texel_offset/texel_offset/0-opt.spvasm.expected.ir.msl
@@ -1,6 +1,39 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::LoadVectorElement
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(16) {
+  result_1:vec4<f32> @offset(0), @location(0)
+}
+
+$B1: {  # root
+  %result: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 = floor %4
+    %6:f32 = div %5, 255.0f
+    %7:f32 = let %6
+    %8:f32 = load_vector_element %gl_FragCoord, 1u
+    %9:f32 = floor %8
+    %10:f32 = div %9, 255.0f
+    %11:vec4<f32> = construct %7, %10, 0.0f, 0.0f
+    store %result, %11
+    ret
+  }
+}
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B3: {
+    store %gl_FragCoord, %gl_FragCoord_param
+    %14:void = call %main_1
+    %15:vec4<f32> = load %result
+    %16:main_out = construct %15
+    ret %16
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/vk-gl-cts/texture/texel_offset/texel_offset/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/texture/texel_offset/texel_offset/0-opt.wgsl.expected.ir.msl
index 2e88a5f..b3f5160 100644
--- a/test/tint/vk-gl-cts/texture/texel_offset/texel_offset/0-opt.wgsl.expected.ir.msl
+++ b/test/tint/vk-gl-cts/texture/texel_offset/texel_offset/0-opt.wgsl.expected.ir.msl
@@ -1,6 +1,41 @@
 SKIP: FAILED
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::LoadVectorElement
+../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(16) {
+  result_1:vec4<f32> @offset(0), @location(0)
+}
+
+$B1: {  # root
+  %result: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_19:f32 = let %4
+    %6:f32 = load_vector_element %gl_FragCoord, 1u
+    %x_23:f32 = let %6
+    %8:f32 = floor %x_19
+    %9:f32 = div %8, 255.0f
+    %10:f32 = let %9
+    %11:f32 = floor %x_23
+    %12:f32 = div %11, 255.0f
+    %13:vec4<f32> = construct %10, %12, 0.0f, 0.0f
+    store %result, %13
+    ret
+  }
+}
+%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
+  $B3: {
+    store %gl_FragCoord, %gl_FragCoord_param
+    %16:void = call %main_1
+    %17:vec4<f32> = load %result
+    %18:main_out = construct %17
+    ret %18
+  }
+}
+
+invalid entry point IO struct uses
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *